summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/0xFFFF/.mtn2git_empty (renamed from packages/acpid/acpid-1.0.2/.mtn2git_empty)0
-rw-r--r--packages/0xFFFF/0xffff-native_0.1.bb19
-rw-r--r--packages/0xFFFF/0xffff-native_0.2.bb19
-rw-r--r--packages/0xFFFF/0xffff.inc14
-rw-r--r--packages/0xFFFF/0xffff_0.1.bb6
-rw-r--r--packages/0xFFFF/0xffff_0.2.bb6
-rw-r--r--packages/abiword/abiword-2.5.inc40
-rw-r--r--packages/abiword/abiword-embedded_2.4.5.bb12
-rw-r--r--packages/abiword/abiword-plugins_2.4.5.bb26
-rw-r--r--packages/abiword/abiword-plugins_2.4.6.bb2
-rw-r--r--packages/abiword/abiword.inc5
-rw-r--r--packages/abiword/abiword_2.4.5.bb4
-rw-r--r--packages/abiword/abiword_2.5.1.bb2
-rw-r--r--packages/acpid/acpid.inc20
-rw-r--r--packages/acpid/acpid_1.0.2.bb2
-rw-r--r--packages/acpid/acpid_1.0.3.bb2
-rw-r--r--packages/acpid/acpid_1.0.4.bb2
-rw-r--r--packages/agg/.mtn2git_empty (renamed from packages/altboot/files/.mtn2git_empty)0
-rw-r--r--packages/agg/agg_2.5.bb40
-rw-r--r--packages/aiostress/aiostress_0.0.bb3
-rw-r--r--packages/aircrack/aircrack-ng_0.7.bb28
-rw-r--r--packages/aircrack/aircrack-ng_0.9.1.bb22
-rw-r--r--packages/aircrack/aircrack-ng_1.0-svn.bb33
-rw-r--r--packages/aircrack/files/makefile-ldflags.patch13
-rw-r--r--packages/alp/hiker_0.9.1.bb24
-rw-r--r--packages/alsa/alsa-state.bb54
-rw-r--r--packages/alsa/alsa-state/.mtn2git_empty (renamed from packages/altboot/files/akita/.mtn2git_empty)0
-rwxr-xr-xpackages/alsa/alsa-state/alsa-state29
-rw-r--r--packages/alsa/alsa-state/asound.state1
-rw-r--r--packages/alsa/alsa-state/c7x0/.mtn2git_empty (renamed from packages/altboot/files/altboot-menu/.mtn2git_empty)0
-rw-r--r--packages/alsa/alsa-state/c7x0/asound.state151
-rw-r--r--packages/alsa/alsa-state/fic-gta01/.mtn2git_empty (renamed from packages/altboot/files/altboot-menu/Advanced/.mtn2git_empty)0
-rw-r--r--packages/alsa/alsa-state/fic-gta01/asound.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/capturehandset.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/captureheadset.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/gsmhandset.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/gsmheadset.state900
-rw-r--r--packages/alsa/alsa-state/fic-gta01/stereoout.state897
-rw-r--r--packages/alsa/alsa-state/spitz/.mtn2git_empty (renamed from packages/altboot/files/altboot.rc/.mtn2git_empty)0
-rw-r--r--packages/alsa/alsa-state/spitz/asound.state619
-rw-r--r--packages/alsa/alsa-state/tosa/.mtn2git_empty (renamed from packages/altboot/files/c7x0/.mtn2git_empty)0
-rw-r--r--packages/alsa/alsa-state/tosa/asound.state712
-rw-r--r--packages/alsa/alsa-utils_1.0.13.bb9
-rw-r--r--packages/altboot/README.txt4
-rw-r--r--packages/altboot/altboot.inc19
-rw-r--r--packages/altboot/altboot_0.0.0.bb91
-rw-r--r--packages/altboot/altboot_1.0.5.bb154
-rw-r--r--packages/altboot/altboot_1.0.8+1.0.9_pre1.bb76
-rw-r--r--packages/altboot/altboot_1.0.8.bb77
-rw-r--r--packages/altboot/altboot_1.1.1+wip-SVNR66.bb75
-rw-r--r--packages/altboot/altboot_svn.bb75
-rw-r--r--packages/altboot/altboot_wip.bb99
-rw-r--r--packages/altboot/files/akita/altboot-2.4.cfg31
-rw-r--r--packages/altboot/files/akita/altboot-2.6.cfg41
-rw-r--r--packages/altboot/files/altboot-menu/00-Default14
-rw-r--r--packages/altboot/files/altboot-menu/10-noGui14
-rw-r--r--packages/altboot/files/altboot-menu/15-bootSD32
-rw-r--r--packages/altboot/files/altboot-menu/20-bootCF32
-rw-r--r--packages/altboot/files/altboot-menu/99-ownScripts-example68
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/30-bootUSB-Stick47
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/40-bootNFS110
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/55-bin-sh27
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/60-orig-init20
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/70-install-tgz264
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/70-setKernel68
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/80-configure-kexec248
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/80-copyrootfs323
-rw-r--r--packages/altboot/files/altboot.func828
-rw-r--r--packages/altboot/files/altboot.rc/Readme.txt2
-rw-r--r--packages/altboot/files/altboot.rc/disable_printk.sh6
-rw-r--r--packages/altboot/files/altboot.rc/loadkeymap.sh8
-rw-r--r--packages/altboot/files/altboot.rc/playbeep.sh34
-rwxr-xr-xpackages/altboot/files/altbootctl311
-rw-r--r--packages/altboot/files/altbootctl.conf98
-rw-r--r--packages/altboot/files/beep.raw1
-rw-r--r--packages/altboot/files/c7x0/altboot-2.4.cfg30
-rw-r--r--packages/altboot/files/c7x0/altboot-2.6.cfg39
-rw-r--r--packages/altboot/files/collie/altboot-2.4.cfg26
-rw-r--r--packages/altboot/files/init.altboot504
-rw-r--r--packages/altboot/files/poodle/altboot-2.4.cfg26
-rw-r--r--packages/altboot/files/poodle/altboot-2.6.cfg45
-rw-r--r--packages/altboot/files/spitz/altboot-2.6.cfg41
-rw-r--r--packages/altboot/files/tosa/altboot-2.4.cfg32
-rw-r--r--packages/altboot/files/tosa/altboot-2.6.cfg41
-rw-r--r--packages/angstrom/angstrom-altboot-console-image.bb6
-rw-r--r--packages/angstrom/angstrom-altboot-x11-image.bb4
-rw-r--r--packages/angstrom/angstrom-console-image.bb11
-rw-r--r--packages/angstrom/angstrom-gateway-image.bb23
-rw-r--r--packages/angstrom/angstrom-gpe-task-apps.bb22
-rw-r--r--packages/angstrom/angstrom-gpe-task-base.bb38
-rw-r--r--packages/angstrom/angstrom-gpe-task-game.bb12
-rw-r--r--packages/angstrom/angstrom-gpe-task-pim.bb12
-rw-r--r--packages/angstrom/angstrom-gpe-task-settings.bb15
-rw-r--r--packages/angstrom/angstrom-mokogateway-image.bb25
-rw-r--r--packages/angstrom/angstrom-ohand-task-pim.bb10
-rw-r--r--packages/angstrom/angstrom-task-office.bb11
-rw-r--r--packages/angstrom/angstrom-task-printing.bb8
-rw-r--r--packages/angstrom/angstrom-task-sectest.bb17
-rw-r--r--packages/angstrom/angstrom-x11-base-depends.bb16
-rw-r--r--packages/angstrom/angstrom-x11-image.bb9
-rw-r--r--packages/angstrom/task-angstrom-e.bb27
-rw-r--r--packages/angstrom/task-angstrom-x11.bb130
-rw-r--r--packages/anthy/anthy-native_7811.bb7
-rw-r--r--packages/anthy/anthy_7811.bb15
-rw-r--r--packages/apex/apex_1.2.19.bb28
-rw-r--r--packages/apex/apex_1.4.11.bb58
-rw-r--r--packages/apex/apex_1.4.7.bb58
-rw-r--r--packages/apex/apex_1.5.8.bb68
-rw-r--r--packages/apex/nslu2/defconfig32
-rw-r--r--packages/apmd/apmd-3.2.2/unlinux.patch12
-rw-r--r--packages/apmd/apmd_3.2.2.bb1
-rw-r--r--packages/apt/apt-0.7.3/.mtn2git_empty (renamed from packages/altboot/files/collie/.mtn2git_empty)0
-rw-r--r--packages/apt/apt-native.inc2
-rw-r--r--packages/apt/apt-native_0.7.2.bb4
-rw-r--r--packages/apt/apt-package.inc15
-rw-r--r--packages/apt/apt.inc11
-rw-r--r--packages/apt/apt_0.6.46.2.bb6
-rw-r--r--packages/apt/apt_0.7.3.bb11
-rw-r--r--packages/apt/files/apt.conf4
-rw-r--r--packages/apt/files/environment.patch13
-rw-r--r--packages/arm-kernel-shim/arm-kernel-shim_1.3.bb77
-rw-r--r--packages/arm-kernel-shim/arm-kernel-shim_1.5.bb85
-rw-r--r--packages/arm-kernel-shim/files/cmdline_if_none.patch45
-rw-r--r--packages/arm-kernel-shim/files/config-dsmg600.h18
-rw-r--r--packages/arm-kernel-shim/files/config-fsg3.h9
-rw-r--r--packages/arm-kernel-shim/files/config-nas100d.h11
-rw-r--r--packages/arm-kernel-shim/files/config-nslu2.h11
-rw-r--r--packages/arm-kernel-shim/files/passthrough-atags.patch20
-rw-r--r--packages/aspell/aspell-0.50.5/makefile.patch20
-rwxr-xr-xpackages/aspell/aspell-0.50.5/mk-dirs_h.py20
-rw-r--r--packages/aspell/aspell-lang.inc15
-rw-r--r--packages/aspell/aspell-native_0.50.5.bb16
-rw-r--r--packages/aspell/aspell-native_0.60.5.bb6
-rw-r--r--packages/aspell/aspell5-en_6.0-0.bb14
-rw-r--r--packages/aspell/aspell6-en_6.0-0.bb14
-rw-r--r--packages/aspell/aspell6-pl_6.0-20061121-0.bb17
-rw-r--r--packages/aspell/aspell_0.50.5.bb30
-rw-r--r--packages/aspell/aspell_0.60.5.bb19
-rw-r--r--packages/asterisk/asterisk-1.0.9/gsm.patch71
-rw-r--r--packages/asterisk/asterisk-1.0.9/makefile.patch311
-rw-r--r--packages/asterisk/asterisk-1.2.13/uclibc-dsn.patch18
-rw-r--r--packages/asterisk/asterisk-1.2.14/uclibc-dsn.patch18
-rw-r--r--packages/asterisk/asterisk-1.2.18/.mtn2git_empty (renamed from packages/altboot/files/poodle/.mtn2git_empty)0
-rw-r--r--packages/asterisk/asterisk-1.2.18/asterisk.patch (renamed from packages/asterisk/asterisk-1.2.12.1/asterisk.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.18/enable-speex.patch21
-rw-r--r--packages/asterisk/asterisk-1.2.18/uclibc-compat-getloadavg.patch (renamed from packages/asterisk/asterisk-1.2.12.1/uclibc-compat-getloadavg.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.18/uclibc-dsn.patch (renamed from packages/asterisk/asterisk-1.2.12.1/uclibc-dsn.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.23/.mtn2git_empty (renamed from packages/altboot/files/spitz/.mtn2git_empty)0
-rw-r--r--packages/asterisk/asterisk-1.2.23/asterisk.patch (renamed from packages/asterisk/asterisk-1.2.13/asterisk.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.23/enable-speex.patch21
-rw-r--r--packages/asterisk/asterisk-1.2.23/uclibc-compat-getloadavg.patch (renamed from packages/asterisk/asterisk-1.2.13/uclibc-compat-getloadavg.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.23/uclibc-dns.patch18
-rw-r--r--packages/asterisk/asterisk-1.2.24/.mtn2git_empty (renamed from packages/altboot/files/tosa/.mtn2git_empty)0
-rw-r--r--packages/asterisk/asterisk-1.2.24/asterisk.patch (renamed from packages/asterisk/asterisk-1.2.14/asterisk.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.24/enable-speex.patch21
-rw-r--r--packages/asterisk/asterisk-1.2.24/uclibc-compat-getloadavg.patch (renamed from packages/asterisk/asterisk-1.2.14/uclibc-compat-getloadavg.patch)0
-rw-r--r--packages/asterisk/asterisk-1.2.24/uclibc-dns.patch18
-rw-r--r--packages/asterisk/asterisk-1.2.8/makefile.patch200
-rw-r--r--packages/asterisk/asterisk-1.2.9.1/asterisk.patch221
-rw-r--r--packages/asterisk/asterisk-1.2.9.1/uclibc-compat-getloadavg.patch13
-rw-r--r--packages/asterisk/asterisk-1.2.9.1/uclibc-dsn.patch18
-rw-r--r--packages/asterisk/asterisk-1.4.7/.mtn2git_empty (renamed from packages/aspell/aspell-0.50.5/.mtn2git_empty)0
-rw-r--r--packages/asterisk/asterisk-1.4.7/Makefile.patch20
-rw-r--r--packages/asterisk/asterisk-1.4.7/init77
-rw-r--r--packages/asterisk/asterisk-1.4.7/logrotate12
-rw-r--r--packages/asterisk/asterisk-1.4.7/sounds.xml.patch18
-rw-r--r--packages/asterisk/asterisk-1.4.7/volatiles7
-rw-r--r--packages/asterisk/asterisk_1.0.9.bb33
-rw-r--r--packages/asterisk/asterisk_1.2.12.1.bb38
-rw-r--r--packages/asterisk/asterisk_1.2.13.bb37
-rw-r--r--packages/asterisk/asterisk_1.2.14.bb43
-rw-r--r--packages/asterisk/asterisk_1.2.18.bb44
-rw-r--r--packages/asterisk/asterisk_1.2.23.bb44
-rw-r--r--packages/asterisk/asterisk_1.2.24.bb46
-rw-r--r--packages/asterisk/asterisk_1.2.8.bb32
-rw-r--r--packages/asterisk/asterisk_1.2.9.1.bb38
-rw-r--r--packages/asterisk/asterisk_1.4.7.bb142
-rw-r--r--packages/asterisk/files/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.0.9/.mtn2git_empty)0
-rw-r--r--packages/asterisk/files/init77
-rw-r--r--packages/atk/atk_1.19.3.bb10
-rw-r--r--packages/aumix/aumix_2.8.bb2
-rw-r--r--packages/autoconf/autoconf-2.61/config-site.patch13
-rw-r--r--packages/autoconf/autoconf-native_2.61.bb3
-rw-r--r--packages/autoconf/autoconf_2.61.bb4
-rw-r--r--packages/autofs/autofs-4.1.4/auto.net-sort-option-fix.patch11
-rw-r--r--packages/autofs/autofs-4.1.4/autofs-additional-distros.patch12
-rw-r--r--packages/autofs/autofs_4.1.4.bb6
-rw-r--r--packages/automake/automake-native_1.10.bb3
-rw-r--r--packages/automake/automake_1.10.bb31
-rw-r--r--packages/avahi/avahi.inc41
-rw-r--r--packages/avahi/avahi_0.6.18.bb1
-rw-r--r--packages/avahi/avahi_0.6.19.bb3
-rw-r--r--packages/avahi/avahi_0.6.20.bb3
-rw-r--r--packages/avahi/files/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.2.12.1/.mtn2git_empty)0
-rwxr-xr-xpackages/avahi/files/00avahi-autoipd10
-rwxr-xr-xpackages/avahi/files/99avahi-autoipd10
-rw-r--r--packages/base-files/base-files/akita/fstab2
-rw-r--r--packages/base-files/base-files/amsdelta/fstab2
-rw-r--r--packages/base-files/base-files/armzone-qt2410/fstab2
-rw-r--r--packages/base-files/base-files/c7x0/fstab2
-rw-r--r--packages/base-files/base-files/collie/fstab2
-rw-r--r--packages/base-files/base-files/efika/fstab2
-rw-r--r--packages/base-files/base-files/ep93xx/fstab2
-rw-r--r--packages/base-files/base-files/epia/fstab2
-rw-r--r--packages/base-files/base-files/fic-gta01/fstab3
-rw-r--r--packages/base-files/base-files/fstab2
-rw-r--r--packages/base-files/base-files/h2200/fstab2
-rw-r--r--packages/base-files/base-files/h3600/fstab2
-rw-r--r--packages/base-files/base-files/h3900/fstab2
-rw-r--r--packages/base-files/base-files/h5000/fstab2
-rw-r--r--packages/base-files/base-files/h6300/fstab2
-rw-r--r--packages/base-files/base-files/htcuniversal/fstab2
-rw-r--r--packages/base-files/base-files/hx4700/fstab2
-rw-r--r--packages/base-files/base-files/jornada56x/fstab2
-rw-r--r--packages/base-files/base-files/jornada6xx/fstab4
-rw-r--r--packages/base-files/base-files/jornada7xx/fstab4
-rw-r--r--packages/base-files/base-files/mtx-1/fstab2
-rw-r--r--packages/base-files/base-files/mtx-2/fstab2
-rw-r--r--packages/base-files/base-files/netbook-pro/fstab2
-rw-r--r--packages/base-files/base-files/netvista/fstab2
-rw-r--r--packages/base-files/base-files/nokia770/fstab2
-rw-r--r--packages/base-files/base-files/omap5912osk/fstab2
-rw-r--r--packages/base-files/base-files/openmn/fstab2
-rw-r--r--packages/base-files/base-files/openmoko/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.2.13/.mtn2git_empty)0
-rw-r--r--packages/base-files/base-files/openmoko/issue11
-rw-r--r--packages/base-files/base-files/openmoko/issue.net12
-rw-r--r--packages/base-files/base-files/openzaurus/issue2
-rw-r--r--packages/base-files/base-files/openzaurus/issue.net2
-rw-r--r--packages/base-files/base-files/oplinux-uclibc/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.2.14/.mtn2git_empty)0
-rw-r--r--packages/base-files/base-files/oplinux-uclibc/issue14
-rw-r--r--packages/base-files/base-files/oplinux-uclibc/issue.net16
-rw-r--r--packages/base-files/base-files/oplinux-uclibc/motd12
-rw-r--r--packages/base-files/base-files/oplinux-uclibc/profile32
-rw-r--r--packages/base-files/base-files/oplinux/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.2.8/.mtn2git_empty)0
-rw-r--r--packages/base-files/base-files/oplinux/issue10
-rw-r--r--packages/base-files/base-files/oplinux/issue.net11
-rw-r--r--packages/base-files/base-files/oplinux/motd8
-rw-r--r--packages/base-files/base-files/oplinux/profile32
-rw-r--r--packages/base-files/base-files/poodle/fstab2
-rw-r--r--packages/base-files/base-files/profile4
-rw-r--r--packages/base-files/base-files/simpad/fstab2
-rw-r--r--packages/base-files/base-files/slugos/fstab2
-rw-r--r--packages/base-files/base-files/spitz/fstab2
-rw-r--r--packages/base-files/base-files/tosa/fstab2
-rw-r--r--packages/base-files/base-files/wrt54/fstab2
-rw-r--r--packages/base-files/base-files/xxs1500/fstab2
-rw-r--r--packages/base-files/base-files_3.0.14.bb29
-rw-r--r--packages/billiardz/files/.mtn2git_empty (renamed from packages/asterisk/asterisk-1.2.9.1/.mtn2git_empty)0
-rw-r--r--packages/billiardz/files/gcc4.patch45
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/.mtn2git_empty (renamed from packages/base-files/base-files/openzaurus/.mtn2git_empty)0
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/110-arm-eabi-conf.patch24
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch31
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-100-uclibc-conf.patch139
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-001_ld_makefile_patch.patch50
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-006_better_file_error.patch43
-rw-r--r--packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-012_check_ldrunpath_length.patch47
-rw-r--r--packages/binutils/binutils-2.17/avr32-config.sub.patch11
-rw-r--r--packages/binutils/binutils-cross-sdk_2.17.50.0.5.bb20
-rw-r--r--packages/binutils/binutils-cross_2.17.50.0.12.bb32
-rw-r--r--packages/binutils/binutils_2.17.50.0.12.bb12
-rw-r--r--packages/binutils/binutils_2.17.bb5
-rw-r--r--packages/bitbake/bitbake.inc4
-rw-r--r--packages/bitbake/bitbake_1.8.6.bb7
-rw-r--r--packages/bitbake/bitbake_svn.bb4
-rw-r--r--packages/blassic/.mtn2git_empty (renamed from packages/bluez/files/openzaurus/.mtn2git_empty)0
-rw-r--r--packages/blassic/blassic_0.10.1.bb11
-rw-r--r--packages/blueprobe/blueprobe-0.18/uclibc-fix.patch30
-rw-r--r--packages/blueprobe/blueprobe_0.18.bb5
-rw-r--r--packages/bluez/bcm2035-tool/.mtn2git_empty (renamed from packages/busybox/busybox-1.01/openzaurus/.mtn2git_empty)0
-rw-r--r--packages/bluez/bcm2035-tool/addr-as-arg.patch104
-rw-r--r--packages/bluez/bcm2035-tool_0.0.bb19
-rw-r--r--packages/bluez/bluez-dtl1-workaround_1.0.bb17
-rw-r--r--packages/bluez/bluez-gnome_0.10.bb11
-rw-r--r--packages/bluez/bluez-gnome_0.6.bb5
-rw-r--r--packages/bluez/bluez-gnome_0.7.bb11
-rw-r--r--packages/bluez/bluez-gnome_0.9.bb11
-rw-r--r--packages/bluez/bluez-gnome_cvs.bb17
-rw-r--r--packages/bluez/bluez-gnome_git.bb17
-rw-r--r--packages/bluez/bluez-hcidump_1.37.bb13
-rw-r--r--packages/bluez/bluez-hcidump_1.38.bb13
-rw-r--r--packages/bluez/bluez-libs_3.10.bb1
-rw-r--r--packages/bluez/bluez-libs_3.11.bb1
-rw-r--r--packages/bluez/bluez-libs_3.12.bb1
-rw-r--r--packages/bluez/bluez-libs_3.13.bb1
-rw-r--r--packages/bluez/bluez-utils.inc19
-rw-r--r--packages/bluez/bluez-utils/02dtl1_cs.sh57
-rw-r--r--packages/bluez/bluez-utils/ppoll-uclibc-arm-r0.patch14
-rw-r--r--packages/bluez/bluez-utils/uclibc-fix.patch46
-rw-r--r--packages/bluez/bluez-utils_3.11.bb111
-rw-r--r--packages/bluez/bluez-utils_3.12.bb114
-rw-r--r--packages/bluez/bluez-utils_3.13.bb114
-rw-r--r--packages/bluez/bluez-utils_3.4.bb2
-rw-r--r--packages/bluez/bluez-utils_3.7.bb54
-rw-r--r--packages/bluez/bluez-utils_3.8.bb4
-rw-r--r--packages/bluez/bluez-utils_3.9.bb12
-rw-r--r--packages/bluez/files/openzaurus/bluetooth.default37
-rw-r--r--packages/bluez/files/pkgconfig-add-gthread.patch50
-rw-r--r--packages/boost-asio/boost-asio_0.3.7.bb1
-rw-r--r--packages/bridge-utils/bridge-utils_1.2.bb13
-rw-r--r--packages/brutefir/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.0/sparc/.mtn2git_empty)0
-rw-r--r--packages/brutefir/brutefir_1.0i.bb25
-rw-r--r--packages/brutefir/files/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.0/wrt54/.mtn2git_empty)0
-rw-r--r--packages/brutefir/files/unbreak-makefile.patch38
-rw-r--r--packages/btscanner/btscanner_2.0.bb8
-rw-r--r--packages/btscanner/files/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.1/openmn/.mtn2git_empty)0
-rw-r--r--packages/btscanner/files/gcc-4.patch12
-rw-r--r--packages/btxml/btxml.bb6
-rw-r--r--packages/busybox/busybox-1.00/nylon/defconfig4
-rw-r--r--packages/busybox/busybox-1.01/nylon/defconfig4
-rw-r--r--packages/busybox/busybox-1.01/openzaurus/defconfig475
-rw-r--r--packages/busybox/busybox-1.2.0/nylon/defconfig4
-rw-r--r--packages/busybox/busybox-1.2.1/angstrom/defconfig2
-rw-r--r--packages/busybox/busybox-1.2.1/angstrom/syslog.conf9
-rw-r--r--packages/busybox/busybox-1.2.1/foonas/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.1/sparc/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.2.1/foonas/defconfig643
-rw-r--r--packages/busybox/busybox-1.2.1/nylon/defconfig4
-rw-r--r--packages/busybox/busybox-1.2.1/slugos/defconfig65
-rw-r--r--packages/busybox/busybox-1.2.2/angstrom/defconfig2
-rw-r--r--packages/busybox/busybox-1.2.2/nylon/defconfig4
-rw-r--r--packages/busybox/busybox-1.3.1/angstrom/defconfig2
-rw-r--r--packages/busybox/busybox-1.5.0/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.1/wrt54/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.2/openmn/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.5.0/angstrom/defconfig647
-rwxr-xr-xpackages/busybox/busybox-1.5.0/busybox-mdev.sh69
-rw-r--r--packages/busybox/busybox-1.5.0/defconfig647
-rw-r--r--packages/busybox/busybox-1.5.0/df_rootfs.patch44
-rw-r--r--packages/busybox/busybox-1.5.0/dhcp-hostname.patch20
-rw-r--r--packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch11
-rw-r--r--packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch16
-rw-r--r--packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.2/sparc/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.5.0/mnci/defconfig643
-rw-r--r--packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty (renamed from packages/busybox/busybox-1.2.2/wrt54/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.5.0/nylon/defconfig568
-rw-r--r--packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty (renamed from packages/busybox/busybox-1.3.1/openmn/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.5.0/slugos/defconfig686
-rw-r--r--packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch133
-rw-r--r--packages/busybox/busybox-1.5.0/udhcpscript.patch17
-rw-r--r--packages/busybox/busybox-1.5.0/xargs-double-size.patch13
-rw-r--r--packages/busybox/busybox-1.6.0/.mtn2git_empty (renamed from packages/busybox/busybox-1.3.1/sparc/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty (renamed from packages/busybox/busybox-1.3.1/wrt54/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.6.0/angstrom/defconfig647
-rwxr-xr-xpackages/busybox/busybox-1.6.0/busybox-mdev.sh69
-rw-r--r--packages/busybox/busybox-1.6.0/defconfig647
-rw-r--r--packages/busybox/busybox-1.6.0/df_rootfs.patch44
-rw-r--r--packages/busybox/busybox-1.6.0/dhcp-hostname.patch20
-rw-r--r--packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch11
-rw-r--r--packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch16
-rw-r--r--packages/busybox/busybox-1.6.0/udhcpscript.patch17
-rw-r--r--packages/busybox/busybox-1.6.0/xargs-double-size.patch13
-rw-r--r--packages/busybox/busybox-static-1.2.1/.mtn2git_empty (renamed from packages/clucene/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-static-1.2.1/add-getkey-applet.patch167
-rw-r--r--packages/busybox/busybox-static-1.2.1/angstrom-busybox-syslogd-conf.patch19
-rw-r--r--packages/busybox/busybox-static-1.2.1/below.patch46
-rwxr-xr-xpackages/busybox/busybox-static-1.2.1/busybox-mdev.sh69
-rw-r--r--packages/busybox/busybox-static-1.2.1/defconfig647
-rw-r--r--packages/busybox/busybox-static-1.2.1/df_rootfs.patch34
-rw-r--r--packages/busybox/busybox-static-1.2.1/dhcp-hostname.patch30
-rw-r--r--packages/busybox/busybox-static-1.2.1/dhcpretrytime.patch85
-rw-r--r--packages/busybox/busybox-static-1.2.1/fbset.patch24
-rw-r--r--packages/busybox/busybox-static-1.2.1/hdparm_M.patch47
-rw-r--r--packages/busybox/busybox-static-1.2.1/ifupdown-spurious-environ.patch12
-rw-r--r--packages/busybox/busybox-static-1.2.1/iproute-flush-cache.patch23
-rw-r--r--packages/busybox/busybox-static-1.2.1/mount-all-type.patch84
-rw-r--r--packages/busybox/busybox-static-1.2.1/readlink.patch85
-rw-r--r--packages/busybox/busybox-static-1.2.1/rmmod.patch40
-rw-r--r--packages/busybox/busybox-static-1.2.1/syslog.conf9
-rw-r--r--packages/busybox/busybox-static-1.2.1/udhcppidfile-breakage.patch57
-rw-r--r--packages/busybox/busybox-static-1.2.1/udhcppidfile.patch274
-rw-r--r--packages/busybox/busybox-static-1.2.1/udhcpscript.patch17
-rw-r--r--packages/busybox/busybox-static-1.2.1/wget-long-options.patch20
-rw-r--r--packages/busybox/busybox-static-1.2.1/xargs-double-size.patch13
-rw-r--r--packages/busybox/busybox-static_1.2.1.bb6
-rw-r--r--packages/busybox/busybox_1.2.1.bb2
-rw-r--r--packages/busybox/busybox_1.5.0.bb104
-rw-r--r--packages/busybox/busybox_1.6.0.bb104
-rw-r--r--packages/busybox/files/syslog.conf14
-rw-r--r--packages/busybox/slingbox-1.3.1/fdisk-readhex.patch20
-rw-r--r--packages/busybox/slingbox_1.3.1.bb7
-rw-r--r--packages/c3110x/cx3110x_1.1.bb48
-rw-r--r--packages/c3110x/files/.mtn2git_empty (renamed from packages/clucene/clucene-0.8.12-pre/.mtn2git_empty)0
-rw-r--r--packages/c3110x/files/umac_binary.patch69
-rw-r--r--packages/cacao/.mtn2git_empty (renamed from packages/contacts/.mtn2git_empty)0
-rw-r--r--packages/cacao/cacao-cldc_0.98.bb35
-rw-r--r--packages/cacao/cacao.inc15
-rw-r--r--packages/cacao/cacaoh-cldc-native_0.98.bb16
-rw-r--r--packages/cacao/files/.mtn2git_empty (renamed from packages/contacts/files/.mtn2git_empty)0
-rw-r--r--packages/cacao/files/arm_mmap.patch21
-rw-r--r--packages/cacao/files/classpath_var.patch66
-rw-r--r--packages/cacao/files/libmath.patch53
-rw-r--r--packages/cacao/files/midpath.patch372
-rw-r--r--packages/cacao/files/offset.h_arm.patch35
-rw-r--r--packages/cacao/files/offsets_make.patch25
-rw-r--r--packages/cairo/cairo-1.4.4/.mtn2git_empty (renamed from packages/dates/.mtn2git_empty)0
-rw-r--r--packages/cairo/cairo-1.4.4/cairo-workqueue.patch2148
-rw-r--r--packages/cairo/cairo_1.2.2.bb13
-rw-r--r--packages/cairo/cairo_1.3.14.bb10
-rw-r--r--packages/cairo/cairo_1.3.4.bb17
-rw-r--r--packages/cairo/cairo_1.4.0.bb7
-rw-r--r--packages/cairo/cairo_1.4.10.bb6
-rw-r--r--packages/cairo/cairo_1.4.8.bb6
-rw-r--r--packages/cairo/cairo_git.bb8
-rw-r--r--packages/cairo/cairomm_1.2.4.bb9
-rw-r--r--packages/chrpath/.mtn2git_empty (renamed from packages/e17/e17-gpe-menu-convert/.mtn2git_empty)0
-rw-r--r--packages/chrpath/chrpath-native_0.13.bb3
-rw-r--r--packages/chrpath/chrpath.inc10
-rw-r--r--packages/chrpath/chrpath_0.13.bb1
-rw-r--r--packages/clamav/clamav.inc45
-rw-r--r--packages/clamav/clamav_0.90.2.bb (renamed from packages/clamav/clamav_0.88.6.bb)0
-rw-r--r--packages/clamav/clamav_0.90.3.bb (renamed from packages/clamav/clamav_0.88.7.bb)0
-rw-r--r--packages/clamav/files/clamav-daemon.default1
-rw-r--r--packages/clamav/files/clamav-daemon.init14
-rw-r--r--packages/clamav/files/clamav-freshclam.init58
-rw-r--r--packages/clamav/files/clamd.conf40
-rw-r--r--packages/clamav/files/cross-compile-fix.patch129
-rw-r--r--packages/clamav/files/freshclam.conf12
-rw-r--r--packages/clamav/files/libtool-fix.patch23
-rw-r--r--packages/clamav/files/volatiles.02_clamav-data4
-rw-r--r--packages/clamav/files/volatiles.03_clamav-data4
-rw-r--r--packages/classpath/classpath-gtk_0.90.bb16
-rw-r--r--packages/classpath/classpath-gtk_0.93.bb9
-rw-r--r--packages/classpath/classpath-gtk_cvs.bb30
-rw-r--r--packages/classpath/classpath-minimal-native_0.93.bb23
-rw-r--r--packages/classpath/classpath-minimal-native_0.95.bb8
-rw-r--r--packages/classpath/classpath-minimal.inc39
-rw-r--r--packages/classpath/classpath-minimal_0.90.bb11
-rw-r--r--packages/classpath/classpath-minimal_0.95.bb5
-rw-r--r--packages/classpath/classpath.inc24
-rw-r--r--packages/classpath/classpath_0.14.bb26
-rw-r--r--packages/classpath/classpath_0.15.bb26
-rw-r--r--packages/classpath/classpath_0.17.bb26
-rw-r--r--packages/classpath/classpath_0.18.bb25
-rw-r--r--packages/classpath/classpath_0.19.bb25
-rw-r--r--packages/classpath/classpath_0.20.bb25
-rw-r--r--packages/classpath/files/disable-automake-checks-v2.patch11
-rw-r--r--packages/classpath/files/gconf_version.patch11
-rw-r--r--packages/clish/.mtn2git_empty (renamed from packages/e17/engage/.mtn2git_empty)0
-rw-r--r--packages/clish/clish_0.7.1.bb17
-rw-r--r--packages/clutter/clutter-glx_svn.bb9
-rw-r--r--packages/clutter/clutter_svn.bb9
-rw-r--r--packages/confuse/.mtn2git_empty (renamed from packages/efl++/.mtn2git_empty)0
-rw-r--r--packages/confuse/confuse-native_2.5.bb3
-rw-r--r--packages/confuse/confuse_2.5.bb17
-rw-r--r--packages/confuse/files/.mtn2git_empty (renamed from packages/efl++/files/.mtn2git_empty)0
-rw-r--r--packages/confuse/files/build-only-library.patch13
-rw-r--r--packages/contacts/contacts_0.3.bb25
-rw-r--r--packages/contacts/contacts_svn.bb29
-rw-r--r--packages/coreutils/coreutils-5.3.0/futimens.patch44
-rw-r--r--packages/coreutils/coreutils-6.0/.mtn2git_empty (renamed from packages/efl/.mtn2git_empty)0
-rw-r--r--packages/coreutils/coreutils-6.0/man.patch42
-rw-r--r--packages/coreutils/coreutils-6.0/oe-old-tools.patch26
-rw-r--r--packages/coreutils/coreutils-6.0/onceonly.m463
-rw-r--r--packages/coreutils/coreutils-6.0/uptime-pow-lib.patch11
-rw-r--r--packages/coreutils/coreutils-native_6.0.bb7
-rw-r--r--packages/coreutils/coreutils_5.3.0.bb5
-rw-r--r--packages/coreutils/coreutils_6.0.bb85
-rw-r--r--packages/cpio/cpio_2.5.bb6
-rw-r--r--packages/cups/cups.inc83
-rw-r--r--packages/cups/cups_1.2.10.bb4
-rw-r--r--packages/cups/cups_1.2.12.bb5
-rw-r--r--packages/cups/cups_1.2.7.bb6
-rw-r--r--packages/curl/curl-native_7.16.2.bb14
-rw-r--r--packages/curl/curl_7.15.1.bb8
-rw-r--r--packages/curl/curl_7.16.2.bb51
-rw-r--r--packages/dates/dates_0.3.1.bb13
-rw-r--r--packages/dates/dates_svn.bb18
-rw-r--r--packages/db/db3_3.2.9.bb2
-rw-r--r--packages/db/db_4.2.52.bb2
-rw-r--r--packages/db/db_4.3.29.bb5
-rw-r--r--packages/dbus/dbus-c++-native_svn.bb6
-rw-r--r--packages/dbus/dbus-c++/.mtn2git_empty (renamed from packages/efl/e/.mtn2git_empty)0
-rw-r--r--packages/dbus/dbus-c++/fix-linking.patch13
-rw-r--r--packages/dbus/dbus-c++_svn.bb23
-rw-r--r--packages/debianutils/debianutils_2.19.bb5
-rw-r--r--packages/dfu-util/.mtn2git_empty (renamed from packages/efl/ecore/.mtn2git_empty)0
-rw-r--r--packages/dfu-util/dfu-util-native_svn.bb17
-rw-r--r--packages/dfu-util/dfu-util_svn.bb17
-rw-r--r--packages/dillo/dillo_0.8.6.bb13
-rw-r--r--packages/directfb/++dfb_1.0.0.bb (renamed from packages/directfb/++dfb_0.9.25.bb)0
-rw-r--r--packages/directfb/directfb-examples_0.9.25.bb15
-rw-r--r--packages/directfb/directfb-examples_1.0.0.bb20
-rw-r--r--packages/directfb/directfb_0.9.99+1.0.0rc3.bb49
-rw-r--r--packages/directfb/directfb_1.0.0.bb56
-rw-r--r--packages/directfb/files/fix-includes.patch24
-rw-r--r--packages/directfb/files/fix-pkgconfig-specs.patch55
-rw-r--r--packages/directfb/files/getpagesize.patch16
-rw-r--r--packages/directfb/fusionsound_0.9.26+cvs20070207.bb37
-rw-r--r--packages/directfb/fusionsound_1.0.0.bb37
-rw-r--r--packages/display-brightness/display-brightness.sh2
-rw-r--r--packages/display-brightness/display-brightness_1.0.0.bb2
-rw-r--r--packages/distcc/distcc_2.18.3.bb21
-rw-r--r--packages/distcc/files/.mtn2git_empty (renamed from packages/efl/edb-native/.mtn2git_empty)0
-rw-r--r--packages/distcc/files/default19
-rw-r--r--packages/distcc/files/distcc98
-rw-r--r--packages/dnsmasq/dnsmasq_2.38.bb1
-rw-r--r--packages/dosbox/dosbox_0.70.bb12
-rw-r--r--packages/dri/drm_cvs.bb18
-rw-r--r--packages/dtc/.mtn2git_empty (renamed from packages/efl/epsilon/.mtn2git_empty)0
-rw-r--r--packages/dtc/dtc-native_20070216.bb14
-rw-r--r--packages/dtc/dtc-native_git.bb14
-rw-r--r--packages/dtc/dtc_20070216.bb15
-rw-r--r--packages/dtc/dtc_git.bb15
-rw-r--r--packages/e17/e-iconbar_20060128.bb13
-rw-r--r--packages/e17/e-utils_20060501.bb11
-rw-r--r--packages/e17/e-utils_cvs.bb12
-rw-r--r--packages/e17/e-wm/Xsession.d/98enlightenment2
-rw-r--r--packages/e17/e-wm/applications.menu93
-rw-r--r--packages/e17/e-wm_0.16.999.037.bb41
-rw-r--r--packages/e17/e-wm_0.16.999.038.bb48
-rw-r--r--packages/e17/e17-gpe-menu-convert/e17-gpe-menu-convert.sh162
-rw-r--r--packages/e17/e17-gpe-menu-convert_0.2.bb20
-rw-r--r--packages/e17/e17genmenu_4.2.0.bb17
-rw-r--r--packages/e17/eclair_20060128.bb14
-rw-r--r--packages/e17/edje-editor_cvs.bb12
-rw-r--r--packages/e17/edje-viewer_cvs.bb12
-rw-r--r--packages/e17/engage/no-local-includes.patch17
-rw-r--r--packages/e17/engage_20060128.bb15
-rw-r--r--packages/e17/enna/.mtn2git_empty (renamed from packages/efl/esmart/.mtn2git_empty)0
-rw-r--r--packages/e17/enna/locale-is-broken.patch13
-rw-r--r--packages/e17/enna_svn.bb16
-rw-r--r--packages/e17/entice_20060128.bb17
-rw-r--r--packages/e17/entice_20060416.bb17
-rw-r--r--packages/e17/entice_cvs.bb15
-rw-r--r--packages/e17/entrance/allow-missing-xsession.patch22
-rw-r--r--packages/e17/entrance/config-db.patch136
-rw-r--r--packages/e17/entrance/fix-auth-mode.patch10
-rw-r--r--packages/e17/entrance/use-bash.patch63
-rw-r--r--packages/e17/entrance_0.9.0.007.bb37
-rw-r--r--packages/e17/entrance_0.9.0.010.bb34
-rw-r--r--packages/e17/examine_20060128.bb13
-rw-r--r--packages/e17/examine_cvs.bb14
-rw-r--r--packages/e17/exhibit_cvs.bb10
-rw-r--r--packages/e17/expedite_cvs.bb15
-rw-r--r--packages/e17/rage_0.2.0.003.bb10
-rw-r--r--packages/ecj/.mtn2git_empty (renamed from packages/efl/evas/.mtn2git_empty)0
-rw-r--r--packages/ecj/ecj-native_3.2.2.bb17
-rw-r--r--packages/ecj/ecj-native_3.3.bb17
-rw-r--r--packages/ecj/files/.mtn2git_empty (renamed from packages/efl/ewl/.mtn2git_empty)0
-rw-r--r--packages/ecj/files/ecj.sh3
-rw-r--r--packages/efl++/efl++-fb_cvs.bb9
-rw-r--r--packages/efl++/efl++-x11_cvs.bb10
-rw-r--r--packages/efl++/efl++.inc57
-rw-r--r--packages/efl++/files/disable-smart.patch21
-rw-r--r--packages/efl++/files/fix-src.pro.patch15
-rw-r--r--packages/efl/ecore.inc45
-rw-r--r--packages/efl/ecore/configure-abstract-sockets.patch14
-rw-r--r--packages/efl/edje-native_0.5.0.037.bb20
-rw-r--r--packages/efl/epsilon_0.3.0.007.bb18
-rw-r--r--packages/efl/etk_20060418.bb16
-rw-r--r--packages/efl/evas-fb_0.9.9.037.bb47
-rw-r--r--packages/efl/evas-x11_0.9.9.037.bb53
-rw-r--r--packages/efl/evas.inc43
-rw-r--r--packages/efl/imlib2-fb_1.2.2.001.bb5
-rw-r--r--packages/efl/imlib2-native_1.2.2.001.bb7
-rw-r--r--packages/efl/imlib2-x11_1.2.2.001.bb8
-rw-r--r--packages/efl/imlib2.inc54
-rw-r--r--packages/efl1/.mtn2git_empty (renamed from packages/efl/files/.mtn2git_empty)0
-rw-r--r--packages/efl1/ecore-native_cvs.bb29
-rw-r--r--packages/efl1/ecore.inc45
-rw-r--r--packages/efl1/ecore/.mtn2git_empty (renamed from packages/elfutils/elfutils-0.108/.mtn2git_empty)0
-rw-r--r--packages/efl1/ecore/add-tslib-support.patch (renamed from packages/efl/ecore/add-tslib-support.patch)0
-rw-r--r--packages/efl1/ecore/configure.patch (renamed from packages/efl/ecore/configure.patch)0
-rw-r--r--packages/efl1/ecore/ecore_kernel_input_header.patch (renamed from packages/efl/ecore/ecore_kernel_input_header.patch)0
-rw-r--r--packages/efl1/ecore/fix-directfb-include.patch13
-rw-r--r--packages/efl1/ecore/fix-tslib-configure.patch19
-rw-r--r--packages/efl1/ecore/remove-bad-code.patch (renamed from packages/efl/ecore/remove-bad-code.patch)0
-rw-r--r--packages/efl1/ecore_cvs.bb26
-rw-r--r--packages/efl1/edb_cvs.bb5
-rw-r--r--packages/efl1/edbus_cvs.bb12
-rw-r--r--packages/efl1/edje-native_cvs.bb12
-rw-r--r--packages/efl1/edje_cvs.bb11
-rw-r--r--packages/efl1/eet-native_cvs.bb3
-rw-r--r--packages/efl1/eet_cvs.bb10
-rw-r--r--packages/efl1/eflpp_cvs.bb12
-rw-r--r--packages/efl1/efreet_cvs.bb12
-rw-r--r--packages/efl1/embryo-native_cvs.bb3
-rw-r--r--packages/efl1/embryo_cvs.bb10
-rw-r--r--packages/efl1/emotion_cvs.bb15
-rw-r--r--packages/efl1/engrave_cvs.bb7
-rw-r--r--packages/efl1/enhance_cvs.bb6
-rw-r--r--packages/efl1/epdf/.mtn2git_empty (renamed from packages/elitaire/.mtn2git_empty)0
-rw-r--r--packages/efl1/epdf/fix-plugin-path-check.patch24
-rw-r--r--packages/efl1/epdf_cvs.bb22
-rw-r--r--packages/efl1/epeg_cvs.bb7
-rw-r--r--packages/efl1/epsilon/.mtn2git_empty (renamed from packages/elitaire/files/.mtn2git_empty)0
-rw-r--r--packages/efl1/epsilon/compile-fix.patch (renamed from packages/efl/epsilon/compile-fix.patch)0
-rw-r--r--packages/efl1/epsilon/server-is-not-client.patch (renamed from packages/efl/epsilon/server-is-not-client.patch)0
-rw-r--r--packages/efl1/epsilon_cvs.bb14
-rw-r--r--packages/efl1/esmart_cvs.bb26
-rw-r--r--packages/efl1/etk-native/.mtn2git_empty (renamed from packages/esound/esound-gpe/.mtn2git_empty)0
-rw-r--r--packages/efl1/etk-native_cvs.bb10
-rw-r--r--packages/efl1/etk_cvs.bb17
-rw-r--r--packages/efl1/evas-native_cvs.bb61
-rw-r--r--packages/efl1/evas.inc36
-rw-r--r--packages/efl1/evas/.mtn2git_empty (renamed from packages/esound/old/.mtn2git_empty)0
-rw-r--r--packages/efl1/evas/fix-configure.patch (renamed from packages/efl/evas/fix-configure.patch)0
-rw-r--r--packages/efl1/evas/pagesize.patch13
-rw-r--r--packages/efl1/evas_cvs.bb59
-rw-r--r--packages/efl1/evolve-native_cvs.bb6
-rw-r--r--packages/efl1/evolve_cvs.bb6
-rw-r--r--packages/efl1/ewl_cvs.bb21
-rw-r--r--packages/efl1/exml_cvs.bb6
-rw-r--r--packages/efl1/imlib2_1.4.0.002.bb17
-rw-r--r--packages/elfutils/elfutils-0.108/warnings.patch132
-rw-r--r--packages/elfutils/elfutils-0.127/.mtn2git_empty (renamed from packages/familiar/.mtn2git_empty)0
-rw-r--r--packages/elfutils/elfutils-0.127/warnings.patch112
-rw-r--r--packages/elfutils/elfutils_0.108.bb36
-rw-r--r--packages/elfutils/elfutils_0.127.bb15
-rw-r--r--packages/elitaire/elitaire_0.0.5.bb12
-rw-r--r--packages/elitaire/files/fix-ewl-and-gettext.patch16
-rw-r--r--packages/elitaire/files/math.patch14
-rw-r--r--packages/elvis/elvis_2.2.0.bb3
-rw-r--r--packages/enchant/enchant_1.3.0.bb22
-rw-r--r--packages/epdfview/epdfview_0.1.6.bb15
-rw-r--r--packages/esound/esound-gpe/audiofile-please.patch40
-rw-r--r--packages/esound/esound-gpe/configure.patch20
-rw-r--r--packages/esound/esound_0.2.36.bb15
-rw-r--r--packages/esound/files/.mtn2git_empty (renamed from packages/gcc/gcc-4.2-20060513/.mtn2git_empty)0
-rw-r--r--packages/esound/files/no-docs.patch11
-rw-r--r--packages/esound/old/esound-gpe_20020817.bb35
-rw-r--r--packages/esound/old/esound-gpe_20070109.bb34
-rw-r--r--packages/ethtool/ethtool_5.bb2
-rw-r--r--packages/evince/evince/no-help-dir.patch12
-rw-r--r--packages/evince/evince/no-icon-theme.diff13
-rw-r--r--packages/evince/evince_0.9.0.bb16
-rw-r--r--packages/evince/evince_0.9.2.bb16
-rw-r--r--packages/exmap-console/.mtn2git_empty (renamed from packages/glib-2.0/glib-2.0-2.12.0/.mtn2git_empty)0
-rw-r--r--packages/exmap-console/exmap-console.inc61
-rw-r--r--packages/exmap-console/exmap-console_0.4.1.bb3
-rw-r--r--packages/exmap-console/exmap-console_svn.bb11
-rw-r--r--packages/familiar/familiar-version.bb7
-rw-r--r--packages/fbgrab/fbgrab-viewer-native_1.0.bb31
-rw-r--r--packages/fbreader/fbreader-0.8.2a/.mtn2git_empty (renamed from packages/glib-2.0/glib-2.0-2.12.1/.mtn2git_empty)0
-rw-r--r--packages/fbreader/fbreader-0.8.2a/480x640-buildfix.patch44
-rw-r--r--packages/fbreader/fbreader-0.8.2a/fbreader-0.8.2a_buildsys_oe.patch50
-rw-r--r--packages/fbreader/fbreader_0.7.4q.bb6
-rw-r--r--packages/fbreader/fbreader_0.8.2a.bb58
-rw-r--r--packages/fbreader/files/zaurus-VGA.patch13
-rw-r--r--packages/ffmpeg/ffmpeg_svn.bb21
-rw-r--r--packages/fftw/benchfft_3.1.bb15
-rw-r--r--packages/fftw/fftw.inc27
-rw-r--r--packages/fftw/fftw_3.1.2.bb14
-rw-r--r--packages/fftw/fftwf_3.1.2.bb4
-rw-r--r--packages/fftw/fftwl_3.1.2.bb5
-rw-r--r--packages/file/file-native_4.20.bb8
-rw-r--r--packages/file/file-native_4.21.bb6
-rw-r--r--packages/file/file_4.20.bb18
-rw-r--r--packages/file/file_4.21.bb18
-rw-r--r--packages/fltk/fltk_1.1.4.bb3
-rw-r--r--packages/fltk/fltk_1.1.7.bb3
-rw-r--r--packages/flumotion/.mtn2git_empty (renamed from packages/glib-2.0/glib-2.0-2.12.3/.mtn2git_empty)0
-rw-r--r--packages/flumotion/files/.mtn2git_empty (renamed from packages/gnupg/gnupg-1.4.0/.mtn2git_empty)0
-rw-r--r--packages/flumotion/files/no-check-for-python-stuff.patch68
-rw-r--r--packages/flumotion/files/python-path.patch25
-rw-r--r--packages/flumotion/flumotion_0.4.1.bb35
-rw-r--r--packages/fluxbox/fluxbox_0.99+1.0rc.bb4
-rw-r--r--packages/fluxbox/fluxbox_svn.bb4
-rw-r--r--packages/foonas-init/.mtn2git_empty (renamed from packages/gpe-dm/files/.mtn2git_empty)0
-rw-r--r--packages/foonas-init/files/.mtn2git_empty (renamed from packages/gpe-mileage/.mtn2git_empty)0
-rw-r--r--packages/foonas-init/files/conffiles55
-rw-r--r--packages/foonas-init/files/functions413
-rw-r--r--packages/foonas-init/files/links.conf6
-rw-r--r--packages/foonas-init/files/modulefunctions39
-rw-r--r--packages/foonas-init/files/reflash163
-rw-r--r--packages/foonas-init/files/sysconf793
-rw-r--r--packages/foonas-init/files/turnup861
-rw-r--r--packages/foonas-init/foonas-init_0.10.bb122
-rw-r--r--packages/freetype/freetype-2.3.1/.mtn2git_empty (renamed from packages/gpephone/libim-0.1/.mtn2git_empty)0
-rw-r--r--packages/freetype/freetype-2.3.1/fix-x86_64-build.patch26
-rw-r--r--packages/freetype/freetype-2.3.4/.mtn2git_empty (renamed from packages/gstreamer/gst-plugins/.mtn2git_empty)0
-rw-r--r--packages/freetype/freetype-2.3.4/fix-x86_64-build.patch26
-rw-r--r--packages/freetype/freetype-native_2.1.10.bb5
-rw-r--r--packages/freetype/freetype_2.3.1.bb40
-rw-r--r--packages/freetype/freetype_2.3.4.bb41
-rwxr-xr-xpackages/ftpd-topfield/ftpd-topfield_0.7.1.bb34
-rwxr-xr-xpackages/ftpd-topfield/ftpd-topfield_0.7.4.bb33
-rw-r--r--packages/fuse/fuse-2.6.5/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.10.3/.mtn2git_empty)0
-rw-r--r--packages/fuse/fuse-2.6.5/not-run-updaterc.d-on-host.patch21
-rw-r--r--packages/fuse/fuse-module_2.5.3.bb29
-rw-r--r--packages/fuse/fuse-module_2.6.5.bb29
-rw-r--r--packages/fuse/fuse.inc2
-rw-r--r--packages/fuse/fuse_2.5.3.bb4
-rw-r--r--packages/fuse/fuse_2.6.5.bb27
-rw-r--r--packages/fuse/gmailfs_0.7.2.bb22
-rw-r--r--packages/fuse/gmailfs_0.7.3.bb22
-rw-r--r--packages/fuse/sshfs-fuse_1.7.bb17
-rw-r--r--packages/gaim/files/purple-OE-branding.patch14
-rw-r--r--packages/gaim/gaim_2.0.0-cvs-mco1.bb2
-rw-r--r--packages/gaim/gaim_svn.bb25
-rw-r--r--packages/gaim/pidgin.inc85
-rw-r--r--packages/gaim/pidgin/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.10.6/.mtn2git_empty)0
-rw-r--r--packages/gaim/pidgin/gconf-no-errors.patch12
-rw-r--r--packages/gaim/pidgin/pidgin.desktop-set-icon.patch11
-rw-r--r--packages/gaim/pidgin/sanitize-configure.ac.patch33
-rw-r--r--packages/gaim/pidgin_2.0.2.bb9
-rw-r--r--packages/gaim/pidgin_2.1.0.bb10
-rw-r--r--packages/gamin/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.10.7/.mtn2git_empty)0
-rw-r--r--packages/gamin/files/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.10.9/.mtn2git_empty)0
-rw-r--r--packages/gamin/files/no-abstract-sockets.patch54
-rw-r--r--packages/gamin/gamin_0.1.8.bb11
-rw-r--r--packages/gammu/files/.mtn2git_empty (renamed from packages/icewm/icewm-1.2.26/.mtn2git_empty)0
-rw-r--r--packages/gammu/files/ldflags-again.patch13
-rw-r--r--packages/gammu/gammu_1.07.00.bb75
-rw-r--r--packages/gammu/gammu_1.10.0.bb77
-rw-r--r--packages/gcc/gcc-4.0.2/gcc-4.0.2-atmel.0.99.2.patch21330
-rw-r--r--packages/gcc/gcc-4.0.2/libstdc++-configure.patch10
-rw-r--r--packages/gcc/gcc-4.1.1/gcc-ignore-cache.patch15
-rw-r--r--packages/gcc/gcc-4.1.1/ppc-gcc-41-20060515.patch2225
-rw-r--r--packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch4271
-rw-r--r--packages/gcc/gcc-4.1.2/200-uclibc-locale.patch116
-rw-r--r--packages/gcc/gcc-4.1.2/800-arm-bigendian.patch70
-rw-r--r--packages/gcc/gcc-4.1.2/cache-amnesia.patch13
-rw-r--r--packages/gcc/gcc-4.2-20060513/armeb-fix.patch62
-rw-r--r--packages/gcc/gcc-4.2-20060513/zecke-xgcc-cpp.patch12
-rw-r--r--packages/gcc/gcc-4.2.1/.mtn2git_empty (renamed from packages/initscripts/initscripts-1.0/angstrom/.mtn2git_empty)0
-rw-r--r--packages/gcc/gcc-4.2.1/100-uclibc-conf.patch200
-rw-r--r--packages/gcc/gcc-4.2.1/110-arm-eabi.patch27
-rw-r--r--packages/gcc/gcc-4.2.1/200-uclibc-locale.patch2790
-rw-r--r--packages/gcc/gcc-4.2.1/300-libstdc++-pic.patch46
-rw-r--r--packages/gcc/gcc-4.2.1/301-missing-execinfo_h.patch11
-rw-r--r--packages/gcc/gcc-4.2.1/302-c99-snprintf.patch11
-rw-r--r--packages/gcc/gcc-4.2.1/303-c99-complex-ugly-hack.patch12
-rw-r--r--packages/gcc/gcc-4.2.1/304-index_macro.patch24
-rw-r--r--packages/gcc/gcc-4.2.1/602-sdk-libstdc++-includes.patch20
-rw-r--r--packages/gcc/gcc-4.2.1/740-sh-pr24836.patch25
-rw-r--r--packages/gcc/gcc-4.2.1/800-arm-bigendian.patch67
-rw-r--r--packages/gcc/gcc-4.2.1/801-arm-bigendian-eabi.patch14
-rw-r--r--packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch153
-rw-r--r--packages/gcc/gcc-4.2.1/README4
-rw-r--r--packages/gcc/gcc-4.2.1/arm-nolibfloat.patch (renamed from packages/gcc/gcc-4.2-20060513/arm-nolibfloat.patch)0
-rw-r--r--packages/gcc/gcc-4.2.1/arm-softfloat.patch (renamed from packages/gcc/gcc-4.2-20060513/arm-softfloat.patch)0
-rw-r--r--packages/gcc/gcc-4.2.1/arm-thumb-cache.patch29
-rw-r--r--packages/gcc/gcc-4.2.1/arm-thumb.patch64
-rw-r--r--packages/gcc/gcc-4.2.1/cache-amnesia.patch13
-rw-r--r--packages/gcc/gcc-4.2.1/fix-ICE-in-arm_unwind_emit_set.diff18
-rw-r--r--packages/gcc/gcc-4.2.1/gcc41-configure.in.patch22
-rw-r--r--packages/gcc/gcc-4.2.1/ldflags.patch (renamed from packages/gcc/gcc-4.2-20060513/ldflags.patch)0
-rw-r--r--packages/gcc/gcc-4.2.1/sdk-libstdc++-includes.patch22
-rw-r--r--packages/gcc/gcc-4.2.1/sh3-installfix-fixheaders.patch11
-rw-r--r--packages/gcc/gcc-4.2.1/unbreak-armv4t.patch12
-rw-r--r--packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch (renamed from packages/gcc/gcc-4.2-20060513/zecke-no-host-includes.patch)0
-rw-r--r--packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch12
-rw-r--r--packages/gcc/gcc-cross-initial_3.3.3.bb1
-rw-r--r--packages/gcc/gcc-cross-initial_4.1.2.bb30
-rw-r--r--packages/gcc/gcc-cross-kernel-3.4.4_csl-arm-2005q3.bb25
-rw-r--r--packages/gcc/gcc-cross-sdk_4.1.2.bb38
-rw-r--r--packages/gcc/gcc-cross_4.0.2.bb2
-rw-r--r--packages/gcc/gcc-cross_4.1.1.bb6
-rw-r--r--packages/gcc/gcc-cross_4.1.2.bb20
-rw-r--r--packages/gcc/gcc-cross_4.2-20060513.bb18
-rw-r--r--packages/gcc/gcc-cross_4.2.1.bb20
-rw-r--r--packages/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch12
-rw-r--r--packages/gcc/gcc-package-cross.inc1
-rw-r--r--packages/gcc/gcc-package-sdk.inc2
-rw-r--r--packages/gcc/gcc-package.inc6
-rw-r--r--packages/gcc/gcc4-build-sdk.inc2
-rw-r--r--packages/gcc/gcc_4.0.2.bb6
-rw-r--r--packages/gcc/gcc_4.1.1.bb10
-rw-r--r--packages/gcc/gcc_4.1.2.bb6
-rw-r--r--packages/gcc/gcc_4.2-20060513.bb27
-rw-r--r--packages/gcc/gcc_4.2.1.bb53
-rw-r--r--packages/gcc/gcc_csl-arm-2005q3.bb3
-rw-r--r--packages/gd/gd_2.0.33.bb4
-rw-r--r--packages/gdado/.mtn2git_empty (renamed from packages/initscripts/initscripts-1.0/openzaurus/.mtn2git_empty)0
-rw-r--r--packages/gdado/gdado_2.2.bb15
-rw-r--r--packages/gdal/gdal_1.3.2.bb6
-rw-r--r--packages/gdb/gdb-cross.inc25
-rw-r--r--packages/gdb/gdb-cross_6.3.bb24
-rw-r--r--packages/gdb/gdb-cross_6.4.bb24
-rw-r--r--packages/gdb/gdb-cross_6.6.bb25
-rw-r--r--packages/gdb/gdb.inc43
-rw-r--r--packages/gdb/gdb_6.3.bb42
-rw-r--r--packages/gdb/gdb_6.4.bb42
-rw-r--r--packages/gdb/gdb_6.6.bb53
-rw-r--r--packages/geoclue/geoclue_git.bb36
-rw-r--r--packages/geoclue/geoclue_svn.bb29
-rw-r--r--packages/geos/.mtn2git_empty (renamed from packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty)0
-rw-r--r--packages/geos/geos_2.2.3+3.0.0rc4.bb21
-rw-r--r--packages/gettext/gettext-0.14.1/gettext-error_print_progname.patch12
-rw-r--r--packages/gettext/gettext_0.14.1.bb7
-rw-r--r--packages/gift/gift_0.11.5.bb3
-rw-r--r--packages/gimp/babl_svn.bb21
-rw-r--r--packages/gimp/gegl_svn.bb24
-rw-r--r--packages/gimp/gimp_2.3.10.bb13
-rw-r--r--packages/git/files/autotools.patch26
-rw-r--r--packages/git/git-native_1.4.4.2.bb3
-rw-r--r--packages/git/git-native_1.5.2.3.bb6
-rw-r--r--packages/git/git.inc15
-rw-r--r--packages/git/git_1.4.4.2.bb3
-rw-r--r--packages/git/git_1.5.2.3.bb26
-rw-r--r--packages/gizmod/gizmod_2.3.bb3
-rw-r--r--packages/gkrellm/gkrellm/.mtn2git_empty (renamed from packages/ipkg/ipkg-0.99.153/.mtn2git_empty)0
-rw-r--r--packages/gkrellm/gkrellm/destdir.patch24
-rw-r--r--packages/gkrellm/gkrellm_2.2.10.bb24
-rw-r--r--packages/gkrellm/gkrellm_2.2.7.bb23
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.0/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.1/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.10/.mtn2git_empty (renamed from packages/ipkg/ipkg-0.99.155/.mtn2git_empty)0
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.10/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.11/.mtn2git_empty (renamed from packages/ipsec-tools/ipsec-tools-0.6.6/.mtn2git_empty)0
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.11/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.12/.mtn2git_empty (renamed from packages/ixp4xx/ixp4xx-npe-native-2.3/.mtn2git_empty)0
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.12/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0-2.12.3/configure-libtool.patch20
-rw-r--r--packages/glib-2.0/glib-2.0_2.12.10.bb6
-rw-r--r--packages/glib-2.0/glib-2.0_2.12.11.bb6
-rw-r--r--packages/glib-2.0/glib-2.0_2.12.12.bb8
-rw-r--r--packages/glib-2.0/glib.inc11
-rw-r--r--packages/glibc/eglibc-initial_svn.bb46
-rw-r--r--packages/glibc/eglibc-intermediate_svn.bb19
-rw-r--r--packages/glibc/eglibc-package.bbclass319
-rw-r--r--packages/glibc/eglibc-svn/.mtn2git_empty (renamed from packages/kismet/kismet-2006-04-R1/.mtn2git_empty)0
-rw-r--r--packages/glibc/eglibc-svn/export-fcntl2.patch11
-rw-r--r--packages/glibc/eglibc_svn.bb135
-rw-r--r--packages/glibc/files/etc/ld.so.conf1
-rw-r--r--packages/glibc/files/ppc-ld-nofpu-20070104.patch190
-rw-r--r--packages/glibc/files/ppc-ports-ld-nofpu-20070114.patch38
-rw-r--r--packages/glibc/files/ppc-sfp-machine.patch297
-rw-r--r--packages/glibc/files/ppc-soft-fp-20070115.patch182
-rw-r--r--packages/glibc/glibc-2.2.5/etc/ld.so.conf1
-rw-r--r--packages/glibc/glibc-2.3.2/etc/ld.so.conf1
-rw-r--r--packages/glibc/glibc-2.4/etc/ld.so.conf1
-rw-r--r--packages/glibc/glibc-2.4/ldd-unbash.patch11
-rw-r--r--packages/glibc/glibc-cvs/etc/ld.so.conf1
-rw-r--r--packages/glibc/glibc-initial_2.6.bb46
-rw-r--r--packages/glibc/glibc-intermediate_2.4.bb1
-rw-r--r--packages/glibc/glibc-intermediate_2.5.bb1
-rw-r--r--packages/glibc/glibc-intermediate_2.6.bb19
-rw-r--r--packages/glibc/glibc-intermediate_cvs.bb1
-rw-r--r--packages/glibc/glibc-package.bbclass25
-rw-r--r--packages/glibc/glibc.inc13
-rw-r--r--packages/glibc/glibc_2.2.5.bb10
-rw-r--r--packages/glibc/glibc_2.3.2+cvs20040726.bb9
-rw-r--r--packages/glibc/glibc_2.3.2.bb10
-rw-r--r--packages/glibc/glibc_2.3.3+cvs20041128.bb9
-rw-r--r--packages/glibc/glibc_2.3.3+cvs20050221.bb9
-rw-r--r--packages/glibc/glibc_2.3.3+cvs20050420.bb9
-rw-r--r--packages/glibc/glibc_2.3.3.bb9
-rw-r--r--packages/glibc/glibc_2.3.5+cvs20050627.bb8
-rw-r--r--packages/glibc/glibc_2.4.bb8
-rw-r--r--packages/glibc/glibc_2.5.bb18
-rw-r--r--packages/glibc/glibc_2.6.bb204
-rw-r--r--packages/glibc/glibc_cvs.bb8
-rw-r--r--packages/glibmm/glibmm_2.12.10.bb23
-rw-r--r--packages/glibmm/glibmm_2.8.4.bb24
-rw-r--r--packages/gloox/.mtn2git_empty (renamed from packages/libmikey/.mtn2git_empty)0
-rw-r--r--packages/gloox/gloox_0.8.1.bb (renamed from packages/gpephone/gloox_0.8.1.bb)0
-rw-r--r--packages/gmp/gmp-4.2.1/x86-fat.diff122
-rw-r--r--packages/gmp/gmp_4.2.1.bb9
-rw-r--r--packages/gnash/.mtn2git_empty (renamed from packages/libmnetutil/.mtn2git_empty)0
-rw-r--r--packages/gnash/gnash_0.8.0.bb79
-rw-r--r--packages/gnet/gnet_svn.bb21
-rw-r--r--packages/gnome/gconf-dbus_svn.bb29
-rw-r--r--packages/gnome/gnome-cups-manager_0.31.bb3
-rw-r--r--packages/gnome/gnome-desktop/.mtn2git_empty (renamed from packages/libmpeg2/.mtn2git_empty)0
-rw-r--r--packages/gnome/gnome-desktop/no-desktop-docs.patch10
-rw-r--r--packages/gnome/gnome-desktop/scrollkeeper.patch17
-rw-r--r--packages/gnome/gnome-desktop_2.16.1.bb7
-rw-r--r--packages/gnome/gnome-desktop_2.18.3.bb25
-rw-r--r--packages/gnome/gnome-doc-utils_0.10.3.bb16
-rw-r--r--packages/gnome/gnome-doc-utils_0.7.1.bb4
-rw-r--r--packages/gnome/gnome-keyring_0.6.0.bb13
-rw-r--r--packages/gnome/gnome-menus_2.16.1.bb3
-rw-r--r--packages/gnome/gnome-panel_2.18.1.bb17
-rw-r--r--packages/gnome/gnome-power-manager_2.18.3.bb29
-rw-r--r--packages/gnome/gnome-vfs-2.18.1/.mtn2git_empty (renamed from packages/libmpeg2/libmpeg2-0.4.0b/.mtn2git_empty)0
-rw-r--r--packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch11
-rw-r--r--packages/gnome/gnome-vfs-2.18.1/gnome-vfs-no-kerberos.patch51
-rw-r--r--packages/gnome/gnome-vfs-obexftp_0.4.bb13
-rw-r--r--packages/gnome/gnome-vfs_2.18.1.bb38
-rw-r--r--packages/gnome/goffice_0.2.1.bb4
-rw-r--r--packages/gnome/goffice_0.3.2.bb4
-rw-r--r--packages/gnome/libart-lgpl/i486/.mtn2git_empty (renamed from packages/libmsip/.mtn2git_empty)0
-rw-r--r--packages/gnome/libart-lgpl/i486/art_config.h10
-rw-r--r--packages/gnome/libbonoboui_2.18.0.bb59
-rw-r--r--packages/gnome/libgnome_2.18.0.bb14
-rw-r--r--packages/gnome/libgnomeui_2.12.0.bb5
-rw-r--r--packages/gnome/libgnomeui_2.16.1.bb9
-rw-r--r--packages/gnome/libgnomeui_2.18.1.bb24
-rw-r--r--packages/gnome/libwnck_2.13.5.bb10
-rw-r--r--packages/gnu-config/gnu-config/avr32.patch20
-rw-r--r--packages/gnu-config/gnu-config_20050701.bb3
-rw-r--r--packages/gnuchess/.mtn2git_empty (renamed from packages/libxfce4mcs/.mtn2git_empty)0
-rw-r--r--packages/gnuchess/gnuchess_5.05.bb10
-rw-r--r--packages/gnumeric/gnumeric_1.6.3.bb3
-rw-r--r--packages/gnupg/gnupg-1.4.0/15_free_caps.patch93
-rw-r--r--packages/gnupg/gnupg-1.4.0/16_min_privileges.patch68
-rw-r--r--packages/gnupg/gnupg-1.4.0/18_ca_po_update.patch6430
-rw-r--r--packages/gnupg/gnupg-1.4.0/21_strgutil_update.patch200
-rw-r--r--packages/gnupg/gnupg2.inc77
-rw-r--r--packages/gnupg/gnupg2_1.9.15.bb3
-rw-r--r--packages/gnuradio/.mtn2git_empty (renamed from packages/libxfce4util/.mtn2git_empty)0
-rw-r--r--packages/gnuradio/gnuradio.inc61
-rw-r--r--packages/gnuradio/gnuradio/.mtn2git_empty (renamed from packages/libxfcegui4/.mtn2git_empty)0
-rw-r--r--packages/gnuradio/gnuradio/no-trellis-doc.patch20
-rw-r--r--packages/gnuradio/gnuradio_3.0.4.bb8
-rw-r--r--packages/gnuradio/gnuradio_svn.bb14
-rw-r--r--packages/gnutls/gnutls.inc3
-rw-r--r--packages/gnutls/gnutls_1.4.5.bb (renamed from packages/gnutls/gnutls_1.4.4.bb)0
-rw-r--r--packages/gnutls/gnutls_1.6.1.bb5
-rw-r--r--packages/gnutls/gnutls_1.6.2.bb6
-rw-r--r--packages/gparted/.mtn2git_empty (renamed from packages/libxslt/libxslt-1.1.17/.mtn2git_empty)0
-rw-r--r--packages/gparted/files/.mtn2git_empty (renamed from packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty)0
-rw-r--r--packages/gparted/files/cross.patch12
-rw-r--r--packages/gparted/files/gparted-0.3.3-llabs.patch72
-rw-r--r--packages/gparted/gparted_0.3.3.bb10
-rw-r--r--packages/gpe-aerial/gpe-aerial_0.3.0.bb11
-rw-r--r--packages/gpe-aerial/gpe-aerial_svn.bb16
-rw-r--r--packages/gpe-announce/files/.mtn2git_empty (renamed from packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty)0
-rw-r--r--packages/gpe-announce/files/fix-esound.diff24
-rw-r--r--packages/gpe-announce/gpe-announce_0.13.bb2
-rw-r--r--packages/gpe-autostarter/gpe-autostarter-0.12/.mtn2git_empty (renamed from packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/.mtn2git_empty)0
-rw-r--r--packages/gpe-autostarter/gpe-autostarter-0.12/wireless.patch12
-rw-r--r--packages/gpe-autostarter/gpe-autostarter_0.12.bb2
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth.inc11
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.49.bb11
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.51.bb14
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.52.bb14
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.53.bb14
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.54.bb14
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_0.55.bb4
-rw-r--r--packages/gpe-bluetooth/gpe-bluetooth_svn.bb10
-rw-r--r--packages/gpe-bootsplash/files/splash-l.svg21
-rw-r--r--packages/gpe-bootsplash/files/splash-p.svg22
-rw-r--r--packages/gpe-bootsplash/files/svn-build.patch239
-rw-r--r--packages/gpe-bootsplash/gpe-bootsplash_1.15.bb2
-rw-r--r--packages/gpe-bootsplash/gpe-bootsplash_svn.bb36
-rw-r--r--packages/gpe-buttonbox/gpe-buttonbox_cvs.bb17
-rw-r--r--packages/gpe-buttonbox/gpe-buttonbox_svn.bb15
-rw-r--r--packages/gpe-calendar/gpe-calendar_0.90.bb18
-rw-r--r--packages/gpe-calendar/gpe-calendar_0.91.bb16
-rw-r--r--packages/gpe-calendar/gpe-calendar_svn.bb4
-rw-r--r--packages/gpe-clock/files/.mtn2git_empty (renamed from packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/.mtn2git_empty)0
-rw-r--r--packages/gpe-clock/files/svn-build.patch240
-rw-r--r--packages/gpe-clock/gpe-clock.inc8
-rw-r--r--packages/gpe-clock/gpe-clock_0.14.bb8
-rw-r--r--packages/gpe-clock/gpe-clock_0.20.bb9
-rw-r--r--packages/gpe-clock/gpe-clock_0.21.bb10
-rw-r--r--packages/gpe-clock/gpe-clock_0.23.bb10
-rw-r--r--packages/gpe-clock/gpe-clock_0.24.bb10
-rw-r--r--packages/gpe-clock/gpe-clock_0.25.bb10
-rw-r--r--packages/gpe-clock/gpe-clock_svn.bb15
-rw-r--r--packages/gpe-conf/gpe-conf-0.2.4/.mtn2git_empty (renamed from packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/.mtn2git_empty)0
-rw-r--r--packages/gpe-conf/gpe-conf-0.2.4/scriptname.patch13
-rw-r--r--packages/gpe-conf/gpe-conf-0.2.5/.mtn2git_empty (renamed from packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/.mtn2git_empty)0
-rw-r--r--packages/gpe-conf/gpe-conf-0.2.5/backlight-bugfix.patch11
-rw-r--r--packages/gpe-conf/gpe-conf-0.2.5/wireless.patch16
-rw-r--r--packages/gpe-conf/gpe-conf_0.2.3.bb4
-rw-r--r--packages/gpe-conf/gpe-conf_0.2.4.bb8
-rw-r--r--packages/gpe-conf/gpe-conf_0.2.5.bb27
-rw-r--r--packages/gpe-conf/gpe-conf_0.2.6.bb25
-rw-r--r--packages/gpe-conf/gpe-conf_svn.bb4
-rw-r--r--packages/gpe-contacts/gpe-contacts_0.47.bb13
-rw-r--r--packages/gpe-contacts/gpe-contacts_cvs.bb19
-rw-r--r--packages/gpe-contacts/gpe-contacts_svn.bb19
-rw-r--r--packages/gpe-dm/files/Xserver-cxk.patch11
-rw-r--r--packages/gpe-dm/files/collie-suspend-hack.patch19
-rw-r--r--packages/gpe-dm/files/mnci.patch27
-rw-r--r--packages/gpe-dm/files/remove-X-scripts.patch14
-rw-r--r--packages/gpe-dm/files/source-xsession-scripts.patch27
-rw-r--r--packages/gpe-dm/gpe-dm_0.50.bb13
-rw-r--r--packages/gpe-dm/gpe-dm_0.51.bb13
-rw-r--r--packages/gpe-dm/gpe-dm_svn.bb18
-rw-r--r--packages/gpe-edit/gpe-edit_0.40.bb8
-rw-r--r--packages/gpe-edit/gpe-edit_svn.bb12
-rw-r--r--packages/gpe-expenses/gpe-expenses_0.0.6.bb7
-rw-r--r--packages/gpe-filemanager/files/.mtn2git_empty (renamed from packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty)0
-rw-r--r--packages/gpe-filemanager/files/svn-build.patch240
-rw-r--r--packages/gpe-filemanager/gpe-filemanager_0.30.bb13
-rw-r--r--packages/gpe-filemanager/gpe-filemanager_svn.bb18
-rw-r--r--packages/gpe-gallery/files/svn-build.patch240
-rw-r--r--packages/gpe-gallery/gpe-gallery_svn.bb19
-rw-r--r--packages/gpe-login/files/brightness-adjust-keyluanchrc.patch10
-rw-r--r--packages/gpe-login/files/busybox-bad-perms.patch39
-rw-r--r--packages/gpe-login/files/highdpifontfix.patch14
-rw-r--r--packages/gpe-login/files/pre-session.patch56
-rw-r--r--packages/gpe-login/files/use-xtscal.patch11
-rw-r--r--packages/gpe-login/files/user-own-collie-devs.patch30
-rw-r--r--packages/gpe-login/gpe-login-0.88/.mtn2git_empty (renamed from packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty)0
-rw-r--r--packages/gpe-login/gpe-login-0.88/chvt-keylaunch.patch12
-rw-r--r--packages/gpe-login/gpe-login-0.90/.mtn2git_empty (renamed from packages/linux/ixp4xx-kernel/2.6.15/.mtn2git_empty)0
-rw-r--r--packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch12
-rw-r--r--packages/gpe-login/gpe-login_0.88.bb22
-rw-r--r--packages/gpe-login/gpe-login_0.90.bb23
-rw-r--r--packages/gpe-login/gpe-login_svn.bb17
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser_0.11.bb54
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser_0.14.bb54
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser_0.21.bb52
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser_svn.bb2
-rw-r--r--packages/gpe-mininet/gpe-mininet_svn.bb18
-rw-r--r--packages/gpe-nmf/gpe-nmf.inc12
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.17.bb9
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.19.bb19
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.20.bb21
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.21.bb22
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.22.bb27
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo.inc13
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo/compile.patch13
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo/svn-build.patch238
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.23.bb12
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.24.bb12
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.25.bb12
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.26.bb12
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.27.bb12
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb14
-rw-r--r--packages/gpe-ownerinfo/gpe-ownerinfo_svn.bb11
-rw-r--r--packages/gpe-package/gpe-package_0.4.bb22
-rw-r--r--packages/gpe-plucker/gpe-plucker_0.4.bb5
-rw-r--r--packages/gpe-scap/gpe-scap-1.2/.mtn2git_empty (renamed from packages/linux/ixp4xx-kernel/2.6.16/.mtn2git_empty)0
-rw-r--r--packages/gpe-scap/gpe-scap-1.2/deviceinfo.patch22
-rw-r--r--packages/gpe-scap/gpe-scap_1.2.bb3
-rw-r--r--packages/gpe-scap/gpe-scap_1.3.bb13
-rw-r--r--packages/gpe-scap/gpe-scap_svn.bb12
-rw-r--r--packages/gpe-session-scripts/files/angstrom/matchbox-session1
-rw-r--r--packages/gpe-session-scripts/files/matchbox-session1
-rw-r--r--packages/gpe-session-scripts/gpe-session-scripts_0.67.bb8
-rw-r--r--packages/gpe-shield/files/.mtn2git_empty (renamed from packages/linux/linux-dht-walnut-2.6.12.6/.mtn2git_empty)0
-rw-r--r--packages/gpe-shield/files/uncrypt-startup-error.patch13
-rw-r--r--packages/gpe-shield/gpe-shield_0.9.bb4
-rw-r--r--packages/gpe-sketchbook/files/.mtn2git_empty (renamed from packages/linux/linux-dht-walnut-2.6.12/.mtn2git_empty)0
-rw-r--r--packages/gpe-sketchbook/files/svn-build.patch229
-rw-r--r--packages/gpe-sketchbook/gpe-sketchbook_svn.bb32
-rw-r--r--packages/gpe-snes/gpe-snes_0.1.bb11
-rw-r--r--packages/gpe-snes/gpe-snes_0.2.bb11
-rw-r--r--packages/gpe-su/files/.mtn2git_empty (renamed from packages/linux/linux-netvista-2.4.27/.mtn2git_empty)0
-rw-r--r--packages/gpe-su/files/svn-build.patch240
-rw-r--r--packages/gpe-su/gpe-su_svn.bb14
-rw-r--r--packages/gpe-terminal/files/svn-build.patch238
-rw-r--r--packages/gpe-terminal/gpe-terminal_1.1.bb9
-rw-r--r--packages/gpe-terminal/gpe-terminal_svn.bb22
-rw-r--r--packages/gpe-timesheet/gpe-timesheet.inc10
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.18.bb9
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.19.bb9
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.20.bb9
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.21.bb9
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.30.bb8
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.31.bb8
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_0.32.bb3
-rw-r--r--packages/gpe-timesheet/gpe-timesheet_svn.bb10
-rw-r--r--packages/gpe-today/gpe-today_cvs.bb29
-rw-r--r--packages/gpe-today/gpe-today_svn.bb24
-rw-r--r--packages/gpe-todo/gpe-todo_svn.bb14
-rw-r--r--packages/gpe-what/gpe-what.inc8
-rw-r--r--packages/gpe-what/gpe-what_0.30.bb7
-rw-r--r--packages/gpe-what/gpe-what_0.31.bb5
-rw-r--r--packages/gpe-what/gpe-what_0.33.bb5
-rw-r--r--packages/gpe-what/gpe-what_0.41.bb9
-rw-r--r--packages/gpe-what/gpe-what_0.42.bb9
-rw-r--r--packages/gpe-what/gpe-what_0.43.bb8
-rw-r--r--packages/gpe-what/gpe-what_cvs.bb12
-rw-r--r--packages/gpe-what/gpe-what_svn.bb9
-rw-r--r--packages/gpe-windowlist/gpe-windowlist_cvs.bb17
-rw-r--r--packages/gpe-windowlist/gpe-windowlist_svn.bb14
-rw-r--r--packages/gpephone/addressbook_svn.bb19
-rw-r--r--packages/gpephone/cms92init-0.1/.mtn2git_empty (renamed from packages/linux/linux-smdk2440-2.6.19/.mtn2git_empty)0
-rw-r--r--packages/gpephone/cms92init-0.1/oe-install.patch9
-rw-r--r--packages/gpephone/cms92init_0.1.bb3
-rw-r--r--packages/gpephone/connect_0.1.bb4
-rw-r--r--packages/gpephone/gpe-applauncher_0.8.bb12
-rw-r--r--packages/gpephone/gpe-applauncher_0.9.bb12
-rw-r--r--packages/gpephone/gpe-phonepanel_0.9.bb12
-rwxr-xr-xpackages/gpephone/gpe-session-scripts-phone/phonesession26
-rw-r--r--packages/gpephone/gpe-session-scripts-phone/standard-apps.patch23
-rw-r--r--packages/gpephone/gpe-session-scripts-phone_0.67.bb7
-rw-r--r--packages/gpephone/iksemel_1.2.bb14
-rw-r--r--packages/gpephone/libabenabler_0.1.bb2
-rw-r--r--packages/gpephone/libabenabler_svn.bb21
-rw-r--r--packages/gpephone/libcalenabler_1.0.bb2
-rw-r--r--packages/gpephone/libgemwidget/.mtn2git_empty (renamed from packages/linux/linux-titan-sh4-2.6.17/.mtn2git_empty)0
-rw-r--r--packages/gpephone/libgemwidget/gemfilechooser-NULL-callback.patch12
-rw-r--r--packages/gpephone/libgemwidget_0.1.bb6
-rw-r--r--packages/gpephone/libgpephone_0.4.bb13
-rw-r--r--packages/gpephone/libim_0.2.bb2
-rw-r--r--packages/gpephone/libmsgenabler_1.0.bb2
-rw-r--r--packages/gpephone/librecord2_0.1.bb15
-rw-r--r--packages/gpephone/librecord2_svn.bb27
-rw-r--r--packages/gpephone/libsettings_svn.bb22
-rw-r--r--packages/gpephone/libvocenabler_0.1.bb6
-rw-r--r--packages/gpephone/linphone_1.5.0.bb10
-rw-r--r--packages/gpephone/machined_svn.bb15
-rw-r--r--packages/gpephone/phoneserver/phoneserver-gta01.patch391
-rw-r--r--packages/gpephone/phoneserver_1.0.bb7
-rw-r--r--packages/gpephone/ptim-engine/.mtn2git_empty (renamed from packages/linux/linux-turbostation/2.6.20.1/.mtn2git_empty)0
-rw-r--r--packages/gpephone/ptim-engine/gtkmodule-location.patch11
-rw-r--r--packages/gpephone/ptim-engine_svn.bb23
-rw-r--r--packages/gpephone/ptim-headers_svn.bb18
-rw-r--r--packages/gpephone/ptim-helper/.mtn2git_empty (renamed from packages/m4/m4/.mtn2git_empty)0
-rw-r--r--packages/gpephone/ptim-helper/gtkmodule-location.patch22
-rw-r--r--packages/gpephone/ptim-helper_svn.bb23
-rw-r--r--packages/gpephone/ptim-manager/.mtn2git_empty (renamed from packages/make/make-3.80/.mtn2git_empty)0
-rw-r--r--packages/gpephone/ptim-manager/gtkmodule-location.patch21
-rw-r--r--packages/gpephone/ptim-manager_svn.bb31
-rw-r--r--packages/gpephone/xoo-vm_0.7-20070204.bb4
-rw-r--r--packages/gperf/.mtn2git_empty (renamed from packages/micro-emacs/micro-emacs-20040301/.mtn2git_empty)0
-rw-r--r--packages/gperf/files/.mtn2git_empty (renamed from packages/mozilla/firefox-1.5.0.6/.mtn2git_empty)0
-rw-r--r--packages/gperf/files/autoreconf.patch435
-rw-r--r--packages/gperf/gperf-native_3.0.3.bb10
-rw-r--r--packages/gperf/gperf_3.0.3.bb8
-rw-r--r--packages/gpesyncd/gpe-synctool_0.2.bb8
-rw-r--r--packages/gpesyncd/gpe-synctool_svn.bb4
-rw-r--r--packages/gpesyncd/gpesyncd_2.0.bb12
-rw-r--r--packages/gpgme/gpgme_1.1.4.bb22
-rw-r--r--packages/gphoto2/gphoto2_2.1.4.bb5
-rw-r--r--packages/gphoto2/gphoto2_2.1.5.bb5
-rw-r--r--packages/gphoto2/gphoto2_2.1.6.bb6
-rw-r--r--packages/gpsbabel/gpsbabel_1.2.5.bb6
-rw-r--r--packages/gpsbabel/gpsbabel_1.3.3.bb20
-rwxr-xr-xpackages/gpsd/files/gpsd2
-rw-r--r--packages/gpsd/files/gpsd-default3
-rw-r--r--packages/gpsd/gpsd.inc30
-rw-r--r--packages/gpsd/gpsd_2.28.bb2
-rw-r--r--packages/gpsd/gpsd_2.32.bb2
-rw-r--r--packages/gpsd/gpsd_2.33.bb5
-rw-r--r--packages/gpsd/gpsd_2.34.bb3
-rw-r--r--packages/gpstk/.mtn2git_empty (renamed from packages/mozilla/firefox-2.0.0.1/.mtn2git_empty)0
-rw-r--r--packages/gpstk/files/.mtn2git_empty (renamed from packages/mozilla/firefox-2.0/.mtn2git_empty)0
-rw-r--r--packages/gpstk/files/configure.patch10
-rw-r--r--packages/gpstk/gpstk_1.2.bb72
-rw-r--r--packages/granule/granule.inc12
-rw-r--r--packages/granule/granule_1.2.2.bb4
-rw-r--r--packages/granule/granule_1.2.4.bb4
-rw-r--r--packages/grep/grep-2.5.1/.mtn2git_empty (renamed from packages/nano/nano-1.3.9/.mtn2git_empty)0
-rw-r--r--packages/grep/grep-2.5.1/uclibc-fix.patch52
-rw-r--r--packages/grep/grep-native_2.5.1.bb2
-rw-r--r--packages/grep/grep_2.5.1.bb5
-rw-r--r--packages/groff/groff_1.19.2.bb4
-rw-r--r--packages/gsm/files/.mtn2git_empty (renamed from packages/nsqld/.mtn2git_empty)0
-rw-r--r--packages/gsm/files/default9
-rw-r--r--packages/gsm/files/extreplychars.patch70
-rw-r--r--packages/gsm/files/fic-gta01/.mtn2git_empty (renamed from packages/obsolete/maemo/gconf-osso/.mtn2git_empty)0
-rw-r--r--packages/gsm/files/fic-gta01/default9
-rw-r--r--packages/gsm/files/getopt-wait-interpreter-ready.patch57
-rw-r--r--packages/gsm/files/gsmd106
-rw-r--r--packages/gsm/files/htcuniversal/.mtn2git_empty (renamed from packages/ohand-tasks/.mtn2git_empty)0
-rw-r--r--packages/gsm/files/htcuniversal/default10
-rw-r--r--packages/gsm/files/libgsmd-tool-fix.patch19
-rw-r--r--packages/gsm/files/magician/.mtn2git_empty (renamed from packages/openmoko-base/files/.mtn2git_empty)0
-rw-r--r--packages/gsm/files/magician/default10
-rw-r--r--packages/gsm/files/mlbuf-in-gsmd-struct.patch102
-rw-r--r--packages/gsm/files/sms-hacks.patch820
-rw-r--r--packages/gsm/files/tihtc-csq-fix.patch27
-rw-r--r--packages/gsm/files/universal-wcdma.patch29
-rw-r--r--packages/gsm/libgsmd_svn.bb36
-rw-r--r--packages/gsoap/gsoap_2.7.7.bb1
-rw-r--r--packages/gspcav1/.mtn2git_empty (renamed from packages/openmoko-pim/openmoko-contacts/.mtn2git_empty)0
-rw-r--r--packages/gspcav1/files/.mtn2git_empty (renamed from packages/openmoko-pim/openmoko-dates/.mtn2git_empty)0
-rw-r--r--packages/gspcav1/files/MS.patch29
-rw-r--r--packages/gspcav1/files/Makefile.patch11
-rw-r--r--packages/gspcav1/gspcav1_20070110.bb29
-rw-r--r--packages/gspcav1/gspcav1_20070508.bb31
-rw-r--r--packages/gstreamer/gst-common.inc32
-rw-r--r--packages/gstreamer/gst-ffmpeg/.mtn2git_empty (renamed from packages/openzaurus/.mtn2git_empty)0
-rw-r--r--packages/gstreamer/gst-ffmpeg/armv5.patch1509
-rw-r--r--packages/gstreamer/gst-ffmpeg_0.10.2.bb30
-rw-r--r--packages/gstreamer/gst-meta-base_0.10.bb52
-rw-r--r--packages/gstreamer/gst-plugins-bad/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/akita/.mtn2git_empty)0
-rw-r--r--packages/gstreamer/gst-plugins-bad/cross-compile.patch44
-rw-r--r--packages/gstreamer/gst-plugins-bad/vorbisdec.h87
-rw-r--r--packages/gstreamer/gst-plugins-bad/vorbisenc.h101
-rw-r--r--packages/gstreamer/gst-plugins-bad_0.10.1.bb2
-rw-r--r--packages/gstreamer/gst-plugins-bad_0.10.3.bb3
-rw-r--r--packages/gstreamer/gst-plugins-bad_0.10.5.bb11
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.11.bb7
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.12.bb12
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.14.bb12
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.5.bb1
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.6.bb2
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.7.bb7
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.2.bb2
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.4.bb2
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.5.bb5
-rw-r--r--packages/gstreamer/gst-plugins-good_0.10.6.bb5
-rw-r--r--packages/gstreamer/gst-plugins-ugly/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/c7x0/.mtn2git_empty)0
-rw-r--r--packages/gstreamer/gst-plugins-ugly/cross-compile.patch16
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.2.bb2
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.4.bb2
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.5.bb5
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.6.bb6
-rw-r--r--packages/gstreamer/gst-plugins.inc17
-rw-r--r--packages/gstreamer/gst-plugins/gst-plugins-0.8.7-httpsrc1.patch853
-rw-r--r--packages/gstreamer/gst-plugins/lame-autoconf.patch21
-rw-r--r--packages/gstreamer/gst-plugins/try-esdsink.patch22
-rw-r--r--packages/gstreamer/gstreamer.inc23
-rw-r--r--packages/gstreamer/gstreamer_0.10.11.bb30
-rw-r--r--packages/gstreamer/gstreamer_0.10.12.bb3
-rw-r--r--packages/gstreamer/gstreamer_0.10.14.bb3
-rw-r--r--packages/gstreamer/gstreamer_0.10.4.bb1
-rw-r--r--packages/gstreamer/gstreamer_0.10.5.bb1
-rw-r--r--packages/gstreamer/gstreamer_0.10.6.bb1
-rw-r--r--packages/gstreamer/gstreamer_0.10.8.bb1
-rw-r--r--packages/gtk+/composite-pixbuf_0.0.bb18
-rw-r--r--packages/gtk+/files/filesel-fix-segfault.patch19
-rw-r--r--packages/gtk+/files/lower-quality-scaling-in-pixbuf-engine.patch13
-rw-r--r--packages/gtk+/gtk+-1.2_1.2.10.bb4
-rw-r--r--packages/gtk+/gtk+-2.10.14/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/htcuniversal/.mtn2git_empty)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/automake-lossage.patch (renamed from packages/gtk+/gtk+-2.10.3/automake-lossage.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/combo-arrow-size.patch67
-rw-r--r--packages/gtk+/gtk+-2.10.14/disable-print.patch (renamed from packages/gtk+/gtk+-2.10.3/disable-print.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/disable-tooltips.patch (renamed from packages/gtk+/gtk+-2.10.3/disable-tooltips.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/gnome-bug-341177.patch (renamed from packages/gtk+/gtk+-2.10.7/gnome-bug-341177.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/gtk+-handhelds.patch (renamed from packages/gtk+/gtk+-2.10.6/gtk+-handhelds.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/gtklabel-resize-patch (renamed from packages/gtk+/gtk+-2.10.3/gtklabel-resize-patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/hardcoded_libtool.patch (renamed from packages/gtk+/gtk+-2.10.7/hardcoded_libtool.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/integer-pixops.patch (renamed from packages/gtk+/gtk+-2.10.7/integer-pixops.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/menu-deactivate.patch (renamed from packages/gtk+/gtk+-2.10.3/menu-deactivate.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/migration.patch (renamed from packages/gtk+/gtk+-2.10.6/migration.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/no-demos.patch (renamed from packages/gtk+/gtk+-2.10.3/no-demos.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/no-xwc.patch (renamed from packages/gtk+/gtk+-2.10.3/no-xwc.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/plana-pixops.patch569
-rw-r--r--packages/gtk+/gtk+-2.10.14/range-no-redraw.patch41
-rw-r--r--packages/gtk+/gtk+-2.10.14/run-iconcache.patch (renamed from packages/gtk+/gtk+-2.10.7/run-iconcache.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/scroll-timings.patch (renamed from packages/gtk+/gtk+-2.10.3/scroll-timings.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/scrolled-placement.patch35
-rw-r--r--packages/gtk+/gtk+-2.10.14/single-click.patch (renamed from packages/gtk+/gtk+-2.10.6/single-click.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/small-gtkfilesel.patch (renamed from packages/gtk+/gtk+-2.10.3/small-gtkfilesel.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/spinbutton.patch (renamed from packages/gtk+/gtk+-2.10.6/spinbutton.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.14/toggle-font.diff100
-rw-r--r--packages/gtk+/gtk+-2.10.14/xsettings.patch (renamed from packages/gtk+/gtk+-2.10.3/xsettings.patch)0
-rw-r--r--packages/gtk+/gtk+-2.10.3/gtk+-handhelds.patch236
-rw-r--r--packages/gtk+/gtk+-2.10.3/hardcoded_libtool.patch29
-rw-r--r--packages/gtk+/gtk+-2.10.3/migration.patch615
-rw-r--r--packages/gtk+/gtk+-2.10.3/run-iconcache.patch19
-rw-r--r--packages/gtk+/gtk+-2.10.3/single-click.patch54
-rw-r--r--packages/gtk+/gtk+-2.10.3/spinbutton.patch128
-rw-r--r--packages/gtk+/gtk+-2.10.6/automake-lossage.patch24
-rw-r--r--packages/gtk+/gtk+-2.10.6/disable-print.patch50
-rw-r--r--packages/gtk+/gtk+-2.10.6/disable-tooltips.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.6/gtklabel-resize-patch10
-rw-r--r--packages/gtk+/gtk+-2.10.6/hardcoded_libtool.patch29
-rw-r--r--packages/gtk+/gtk+-2.10.6/menu-deactivate.patch51
-rw-r--r--packages/gtk+/gtk+-2.10.6/no-demos.patch10
-rw-r--r--packages/gtk+/gtk+-2.10.6/no-xwc.patch151
-rw-r--r--packages/gtk+/gtk+-2.10.6/pangoxft2.10.6.diff2456
-rw-r--r--packages/gtk+/gtk+-2.10.6/run-iconcache.patch21
-rw-r--r--packages/gtk+/gtk+-2.10.6/scroll-timings.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.6/small-gtkfilesel.patch267
-rw-r--r--packages/gtk+/gtk+-2.10.6/xsettings.patch16
-rw-r--r--packages/gtk+/gtk+-2.10.7/automake-lossage.patch24
-rw-r--r--packages/gtk+/gtk+-2.10.7/disable-print.patch50
-rw-r--r--packages/gtk+/gtk+-2.10.7/disable-tooltips.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.7/gtk+-handhelds.patch149
-rw-r--r--packages/gtk+/gtk+-2.10.7/gtklabel-resize-patch10
-rw-r--r--packages/gtk+/gtk+-2.10.7/menu-deactivate.patch51
-rw-r--r--packages/gtk+/gtk+-2.10.7/migration.patch611
-rw-r--r--packages/gtk+/gtk+-2.10.7/no-demos.patch10
-rw-r--r--packages/gtk+/gtk+-2.10.7/no-xwc.patch151
-rw-r--r--packages/gtk+/gtk+-2.10.7/scroll-timings.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.7/single-click.patch56
-rw-r--r--packages/gtk+/gtk+-2.10.7/small-gtkfilesel.patch267
-rw-r--r--packages/gtk+/gtk+-2.10.7/spinbutton.patch130
-rw-r--r--packages/gtk+/gtk+-2.10.7/xsettings.patch16
-rw-r--r--packages/gtk+/gtk+-2.10.9/automake-lossage.patch24
-rw-r--r--packages/gtk+/gtk+-2.10.9/disable-print.patch50
-rw-r--r--packages/gtk+/gtk+-2.10.9/disable-tooltips.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.9/gnome-bug-341177.patch217
-rw-r--r--packages/gtk+/gtk+-2.10.9/gtk+-handhelds.patch149
-rw-r--r--packages/gtk+/gtk+-2.10.9/gtklabel-resize-patch10
-rw-r--r--packages/gtk+/gtk+-2.10.9/hardcoded_libtool.patch29
-rw-r--r--packages/gtk+/gtk+-2.10.9/integer-pixops.patch348
-rw-r--r--packages/gtk+/gtk+-2.10.9/menu-deactivate.patch51
-rw-r--r--packages/gtk+/gtk+-2.10.9/migration.patch611
-rw-r--r--packages/gtk+/gtk+-2.10.9/no-demos.patch10
-rw-r--r--packages/gtk+/gtk+-2.10.9/no-xwc.patch151
-rw-r--r--packages/gtk+/gtk+-2.10.9/run-iconcache.patch19
-rw-r--r--packages/gtk+/gtk+-2.10.9/scroll-timings.patch11
-rw-r--r--packages/gtk+/gtk+-2.10.9/single-click.patch56
-rw-r--r--packages/gtk+/gtk+-2.10.9/small-gtkfilesel.patch267
-rw-r--r--packages/gtk+/gtk+-2.10.9/spinbutton.patch130
-rw-r--r--packages/gtk+/gtk+-2.10.9/xsettings.patch16
-rw-r--r--packages/gtk+/gtk+-2.6.10/gtk+-2.6.10-bg.patch20
-rw-r--r--packages/gtk+/gtk+-directfb_2.10.9.bb38
-rw-r--r--packages/gtk+/gtk+_2.10.14.bb39
-rw-r--r--packages/gtk+/gtk+_2.10.3.bb103
-rw-r--r--packages/gtk+/gtk+_2.10.6.bb103
-rw-r--r--packages/gtk+/gtk+_2.10.7.bb24
-rw-r--r--packages/gtk+/gtk+_2.10.9.bb24
-rw-r--r--packages/gtk+/gtk+_2.6.10.bb7
-rw-r--r--packages/gtk+/gtk+_2.8.9.bb1
-rw-r--r--packages/gtk+/gtk-2.10.inc14
-rw-r--r--packages/gtk+/gtk-fpu.inc6
-rw-r--r--packages/gtk-engines/gtk-engines_2.2.0.bb17
-rw-r--r--packages/gtk-engines/gtk-engines_2.6.1.bb29
-rw-r--r--packages/gtk-engines/gtk-engines_2.6.3.bb29
-rw-r--r--packages/gtk-engines/gtk-engines_2.6.5.bb13
-rw-r--r--packages/gtk-engines/gtk-sato-engine_0.1.bb26
-rw-r--r--packages/gtk-engines/gtk-sato-engine_svn.bb25
-rw-r--r--packages/gtk-engines/gtk-smooth-engine_0.5.8.bb21
-rw-r--r--packages/gtk-webcore/files/build_silence.patch16
-rw-r--r--packages/gtk-webcore/midori_0.0.2.bb11
-rw-r--r--packages/gtk-webcore/midori_0.0.3.bb11
-rw-r--r--packages/gtk-webcore/osb-browser_svn.bb18
-rw-r--r--packages/gtk-webcore/osb-jscore_svn.bb8
-rw-r--r--packages/gtk-webcore/osb-nrcit_svn.bb8
-rw-r--r--packages/gtk-webcore/osb-nrcore.inc9
-rw-r--r--packages/gtk-webcore/osb-nrcore_svn.bb18
-rw-r--r--packages/gtkhtml/gtkhtml-2.0_2.6.3.bb13
-rw-r--r--packages/gtkhtml/gtkhtml-3.0_3.0.10.bb10
-rw-r--r--packages/gtkhtml/gtkhtml-3.1_3.1.16.bb10
-rw-r--r--packages/gtkhtml/gtkhtml-3.6/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/mnci/.mtn2git_empty)0
-rw-r--r--packages/gtkhtml/gtkhtml-3.6/cross-includedir.patch25
-rw-r--r--packages/gtkhtml/gtkhtml-3.6_3.6.2.bb14
-rw-r--r--packages/gtkhtml/gtkhtml-3.8_3.8.2.bb12
-rw-r--r--packages/gtkhtml/gtkhtml-lite-3.0_3.0.10.bb10
-rw-r--r--packages/gtkhtml/gtkhtml.inc15
-rw-r--r--packages/gtkhtml2/gtkhtml2_svn.bb (renamed from packages/gtkhtml2/gtkhtml2_cvs.bb)0
-rw-r--r--packages/gtkmm/gtkmm.inc12
-rw-r--r--packages/gtkmm/gtkmm_2.10.10.bb4
-rw-r--r--packages/gtkmm/gtkmm_2.4.8.bb15
-rw-r--r--packages/gtkmm/gtkmm_2.8.3.bb13
-rw-r--r--packages/gtkterm/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/simpad/.mtn2git_empty)0
-rw-r--r--packages/gtkterm/gtkterm2_0.2.3.bb10
-rw-r--r--packages/guile/guile-native_1.8.2.bb133
-rw-r--r--packages/hal/files/20hal58
-rw-r--r--packages/hal/files/99_hal1
-rw-r--r--packages/hal/hal-info_git.bb20
-rw-r--r--packages/hal/hal.inc10
-rw-r--r--packages/hal/hal_0.2.98.bb16
-rw-r--r--packages/hal/hal_0.5.2.bb24
-rw-r--r--packages/hal/hal_0.5.4.bb32
-rw-r--r--packages/hal/hal_0.5.7.bb46
-rw-r--r--packages/hal/hal_0.5.8.1.bb83
-rw-r--r--packages/hal/hal_0.5.9.bb90
-rw-r--r--packages/haserl/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/spitz/.mtn2git_empty)0
-rw-r--r--packages/haserl/haserl_0.8.0.bb9
-rw-r--r--packages/havp/havp-0.82/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/tosa/.mtn2git_empty)0
-rw-r--r--packages/havp/havp-0.82/sysconfdir-is-etc.patch (renamed from packages/havp/files/sysconfdir-is-etc.patch)0
-rw-r--r--packages/havp/havp-0.86/.mtn2git_empty (renamed from packages/oprofile/oprofile-0.9.1/.mtn2git_empty)0
-rw-r--r--packages/havp/havp-0.86/reconfigure.patch164
-rw-r--r--packages/havp/havp.inc87
-rw-r--r--packages/havp/havp_0.82.bb90
-rw-r--r--packages/havp/havp_0.86.bb5
-rw-r--r--packages/hdparm/hdparm-6.9/uclibc.patch33
-rw-r--r--packages/helloworld/.mtn2git_empty (renamed from packages/ossie/.mtn2git_empty)0
-rw-r--r--packages/helloworld/helloworld_1.0.0.bb24
-rw-r--r--packages/hfsplusutils/.mtn2git_empty (renamed from packages/poboxserver/files/.mtn2git_empty)0
-rw-r--r--packages/hfsplusutils/hfsplusutils-1.0.4-4/.mtn2git_empty (renamed from packages/pptp-linux/pptp-linux/.mtn2git_empty)0
-rw-r--r--packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-errno.patch19
-rw-r--r--packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-gcc4.patch132
-rw-r--r--packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-glob.patch12
-rw-r--r--packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-string.patch11
-rw-r--r--packages/hfsplusutils/hfsplusutils_1.0.4-4.bb26
-rw-r--r--packages/hfsutils/.mtn2git_empty (renamed from packages/prism3-support/.mtn2git_empty)0
-rw-r--r--packages/hfsutils/hfsutils-3.2.6/.mtn2git_empty (renamed from packages/prism3-support/files/.mtn2git_empty)0
-rw-r--r--packages/hfsutils/hfsutils-3.2.6/hfsutils-3.2.6-errno.patch13
-rw-r--r--packages/hfsutils/hfsutils-3.2.6/largerthan2gb.patch15
-rw-r--r--packages/hfsutils/hfsutils_3.2.6.bb32
-rw-r--r--packages/hicolor-icon-theme/hicolor-icon-theme_0.9.bb4
-rw-r--r--packages/hostap/hostap-daemon.inc2
-rw-r--r--packages/hostap/hostap-daemon/init2
-rw-r--r--packages/hostap/hostap-daemon_0.3.7.bb2
-rw-r--r--packages/hostap/hostap-daemon_0.4.4.bb2
-rw-r--r--packages/hostap/hostap-daemon_0.4.8.bb2
-rw-r--r--packages/hostap/hostap-daemon_0.5.1.bb2
-rw-r--r--packages/hwdata/.mtn2git_empty (renamed from packages/qmake/qmake2-native-2.00a/.mtn2git_empty)0
-rw-r--r--packages/hwdata/hwdata_0.191.bb14
-rw-r--r--packages/iana-etc/.mtn2git_empty (renamed from packages/qpobox/files/.mtn2git_empty)0
-rw-r--r--packages/iana-etc/iana-etc_2.20.bb15
-rw-r--r--packages/icewm/icewm-1.2.30/.mtn2git_empty (renamed from packages/qte/qte-2.3.10/openmn/.mtn2git_empty)0
-rw-r--r--packages/icewm/icewm-1.2.30/configure.patch (renamed from packages/icewm/icewm-1.2.26/configure.patch)0
-rw-r--r--packages/icewm/icewm-1.2.30/makefile.patch (renamed from packages/icewm/icewm-1.2.26/makefile.patch)0
-rw-r--r--packages/icewm/icewm_1.2.26.bb25
-rw-r--r--packages/icewm/icewm_1.2.30.bb23
-rw-r--r--packages/icu/.mtn2git_empty (renamed from packages/s3c2410-utils/files/.mtn2git_empty)0
-rw-r--r--packages/icu/icu-3.6.inc15
-rw-r--r--packages/icu/icu-native_3.6.bb3
-rw-r--r--packages/icu/icu_3.6.bb31
-rw-r--r--packages/ifplugd/files/.mtn2git_empty (renamed from packages/swfdec/swfdec/arm/.mtn2git_empty)0
-rw-r--r--packages/ifplugd/files/kernel-types.patch10
-rw-r--r--packages/ifplugd/ifplugd_0.25.bb2
-rw-r--r--packages/iksemel/.mtn2git_empty (renamed from packages/swfdec/swfdec/powerpc/.mtn2git_empty)0
-rw-r--r--packages/iksemel/iksemel_1.2.bb14
-rw-r--r--packages/images/angstrom-minimal-image.bb20
-rw-r--r--packages/images/bootstrap-image.bb3
-rw-r--r--packages/images/devimage-image.bb20
-rw-r--r--packages/images/e-image.bb23
-rw-r--r--packages/images/essential-image.bb2
-rw-r--r--packages/images/essential-machine-image.bb2
-rw-r--r--packages/images/gpe-image.bb26
-rw-r--r--packages/images/gpephone-image.bb4
-rw-r--r--packages/images/helloworld-image.bb28
-rw-r--r--packages/images/initramfs-image.bb17
-rw-r--r--packages/images/initramfs-minimal-image.bb15
-rw-r--r--packages/images/maemo-image.bb2
-rw-r--r--packages/images/nylon-image-base.bb5
-rw-r--r--packages/images/nylon-image-mini.bb8
-rw-r--r--packages/images/nylon-image-standard.bb16
-rw-r--r--packages/images/openmoko-devel-image.bb1
-rw-r--r--packages/images/openmoko-image.bb5
-rw-r--r--packages/images/openprotium-image.bb7
-rw-r--r--packages/images/opie-image-16mb.bb69
-rw-r--r--packages/images/opie-image.bb5
-rw-r--r--packages/images/pivotboot-image.bb3
-rw-r--r--packages/images/sectest-gpe-image.bb2
-rw-r--r--packages/images/slugos-image.bb2
-rw-r--r--packages/images/unslung-image.bb50
-rw-r--r--packages/initrdscripts/.mtn2git_empty (renamed from packages/sysvinit/sysvinit/htcuniversal/.mtn2git_empty)0
-rw-r--r--packages/initrdscripts/devimage/.mtn2git_empty (renamed from packages/tor/tor-0.1.1.23/.mtn2git_empty)0
-rw-r--r--packages/initrdscripts/devimage/devimage.sh12
-rw-r--r--packages/initrdscripts/devimage/dropbear_rsa_host_keybin0 -> 426 bytes
-rw-r--r--packages/initrdscripts/devimage/passwd1
-rw-r--r--packages/initrdscripts/devimage_0.1.bb11
-rw-r--r--packages/initrdscripts/files/.mtn2git_empty (renamed from packages/tslib/tslib/a780/.mtn2git_empty)0
-rw-r--r--packages/initrdscripts/files/blockboot.sh8
-rw-r--r--packages/initrdscripts/files/init.sh65
-rw-r--r--packages/initrdscripts/files/loopboot.sh54
-rw-r--r--packages/initrdscripts/files/nfsboot.sh43
-rw-r--r--packages/initrdscripts/initramfs-jffs2/.mtn2git_empty (renamed from packages/uboot-utils/.mtn2git_empty)0
-rw-r--r--packages/initrdscripts/initramfs-jffs2/jffs2boot.sh18
-rw-r--r--packages/initrdscripts/initramfs-jffs2_0.1.bb8
-rw-r--r--packages/initrdscripts/initramfs-module-block_0.1.bb11
-rw-r--r--packages/initrdscripts/initramfs-module-loop_0.1.bb13
-rw-r--r--packages/initrdscripts/initramfs-module-nfs_0.1.bb12
-rw-r--r--packages/initrdscripts/initramfs-uniboot_0.2.bb11
-rwxr-xr-xpackages/initscripts/initscripts-1.0/checkroot.sh2
-rw-r--r--packages/initscripts/initscripts-1.0/fic-gta01/.mtn2git_empty (renamed from packages/uboot/u-boot-LABEL.2006.06.30.2020/.mtn2git_empty)0
-rw-r--r--packages/initscripts/initscripts-1.0/fic-gta01/inittab48
-rw-r--r--packages/initscripts/initscripts-1.0/foonas/.mtn2git_empty (renamed from packages/uicmoc/uicmoc4-native-4.1.1/.mtn2git_empty)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/foonas/checkroot.sh212
-rwxr-xr-xpackages/initscripts/initscripts-1.0/foonas/devices70
-rw-r--r--packages/initscripts/initscripts-1.0/foonas/domainname.sh5
-rwxr-xr-xpackages/initscripts/initscripts-1.0/foonas/halt27
-rwxr-xr-xpackages/initscripts/initscripts-1.0/foonas/reboot12
-rwxr-xr-xpackages/initscripts/initscripts-1.0/mountall.sh17
-rwxr-xr-xpackages/initscripts/initscripts-1.0/openzaurus/checkversion31
-rw-r--r--packages/initscripts/initscripts-1.0/oplinux-uclibc/.mtn2git_empty (renamed from packages/vera-fonts/.mtn2git_empty)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh (renamed from packages/initscripts/initscripts-1.0/angstrom/checkroot.sh)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh45
-rw-r--r--packages/initscripts/initscripts-1.0/oplinux/.mtn2git_empty (renamed from packages/x11-apps/.mtn2git_empty)0
-rwxr-xr-xpackages/initscripts/initscripts-1.0/oplinux/checkroot.sh201
-rwxr-xr-xpackages/initscripts/initscripts-1.0/ramdisk3
-rw-r--r--packages/initscripts/initscripts-1.0/volatiles24
-rw-r--r--packages/initscripts/initscripts_1.0.bb21
-rw-r--r--packages/install/install-native_0.1.bb2
-rw-r--r--packages/intltool/intltool-native_0.30.bb2
-rw-r--r--packages/intltool/intltool-native_0.31.bb2
-rw-r--r--packages/intltool/intltool-native_0.34.bb2
-rw-r--r--packages/intltool/intltool-native_0.35.0.bb4
-rw-r--r--packages/intltool/intltool-native_0.35.5.bb9
-rw-r--r--packages/intltool/intltool.inc14
-rw-r--r--packages/intltool/intltool_0.30.bb13
-rw-r--r--packages/intltool/intltool_0.31.bb13
-rw-r--r--packages/intltool/intltool_0.34.bb13
-rw-r--r--packages/intltool/intltool_0.35.0.bb14
-rw-r--r--packages/intltool/intltool_0.35.2.bb14
-rw-r--r--packages/intltool/intltool_0.35.5.bb10
-rw-r--r--packages/ipaq-sleep/ipaq-sleep_0.7-9.bb16
-rw-r--r--packages/ipaq-sleep/ipaq-sleep_0.8.bb10
-rw-r--r--packages/ipaq-sleep/ipaq-sleep_0.9.bb2
-rw-r--r--packages/iperf/iperf_2.0.2.bb1
-rw-r--r--packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch17
-rw-r--r--packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb4
-rw-r--r--packages/ipkg-utils/ipkg-utils/fields_tweaks.patch70
-rw-r--r--packages/ipkg-utils/ipkg-utils/index_speedup.patch53
-rw-r--r--packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch97
-rw-r--r--packages/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch51
-rw-r--r--packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch309
-rw-r--r--packages/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch20
-rw-r--r--packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb15
-rw-r--r--packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch227
-rw-r--r--packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch65
-rw-r--r--packages/ipkg/files/is-processing.patch60
-rw-r--r--packages/ipkg/ipkg-0.99.153/fix-bug1393.patch19
-rw-r--r--packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch14
-rw-r--r--packages/ipkg/ipkg-collateral.bb4
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty (renamed from packages/xdpyinfo/.mtn2git_empty)0
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux-uclibc/dest3
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty (renamed from packages/xfce-mcs-manager/.mtn2git_empty)0
-rw-r--r--packages/ipkg/ipkg-collateral/oplinux/dest3
-rw-r--r--packages/ipkg/ipkg-native_0.99.152.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.153.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.154.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.159.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.163.bb8
-rw-r--r--packages/ipkg/ipkg_0.99.152.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.153.bb8
-rw-r--r--packages/ipkg/ipkg_0.99.154.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.155.bb3
-rw-r--r--packages/ipkg/ipkg_0.99.159.bb2
-rw-r--r--packages/ipkg/ipkg_0.99.163.bb7
-rw-r--r--packages/iproute2/iproute2-2.6.20/.mtn2git_empty (renamed from packages/xfce-mcs-plugins/.mtn2git_empty)0
-rw-r--r--packages/iproute2/iproute2-2.6.20/ip6tunnel.patch10
-rw-r--r--packages/iproute2/iproute2-2.6.20/man-pages-fix.patch13
-rw-r--r--packages/iproute2/iproute2-2.6.20/new-flex-fix.patch83
-rw-r--r--packages/iproute2/iproute2-2.6.20/no-strip.patch36
-rw-r--r--packages/iproute2/iproute2.inc22
-rw-r--r--packages/iproute2/iproute2_2.6.16.bb6
-rw-r--r--packages/iproute2/iproute2_2.6.18.bb6
-rw-r--r--packages/iproute2/iproute2_2.6.20.bb11
-rw-r--r--packages/ipsec-tools/files/cross.patch75
-rw-r--r--packages/ipsec-tools/files/gcc-4.2.patch47
-rw-r--r--packages/ipsec-tools/files/racoon-search-missing.patch (renamed from packages/ipsec-tools/ipsec-tools-0.6.6/racoon-search-missing.patch)0
-rw-r--r--packages/ipsec-tools/ipsec-tools.inc65
-rw-r--r--packages/ipsec-tools/ipsec-tools_0.4+0.5-rc1.bb6
-rw-r--r--packages/ipsec-tools/ipsec-tools_0.4+0.5-rc2.bb6
-rw-r--r--packages/ipsec-tools/ipsec-tools_0.6.6.bb48
-rw-r--r--packages/ipsec-tools/ipsec-tools_0.6.7.bb3
-rw-r--r--packages/iptables/files/.mtn2git_empty (renamed from packages/xfce-utils/.mtn2git_empty)0
-rw-r--r--packages/iptables/files/compile.patch17
-rw-r--r--packages/iptables/iptables_1.2.9.bb5
-rw-r--r--packages/iptables/iptables_1.3.3.bb5
-rw-r--r--packages/iptables/iptables_1.3.8.bb30
-rw-r--r--packages/iptstate/.mtn2git_empty (renamed from packages/xfce4-goodies/.mtn2git_empty)0
-rw-r--r--packages/iptstate/iptstate_2.2.1.bb19
-rwxr-xr-xpackages/irda-utils/files/init55
-rw-r--r--packages/irda-utils/irda-utils_0.9.16.bb6
-rw-r--r--packages/irssi/irssi_svn.bb2
-rw-r--r--packages/ixp4xx/ixp4xx-npe-native-2.3.2/.mtn2git_empty (renamed from packages/xfce4-panel/.mtn2git_empty)0
-rw-r--r--packages/ixp4xx/ixp4xx-npe-native-2.3.2/IxNpeMicrocode.h143
-rw-r--r--packages/ixp4xx/ixp4xx-npe-native-2.3/IxNpeMicrocode.h143
-rw-r--r--packages/ixp4xx/ixp4xx-npe-native_2.3.2.bb19
-rw-r--r--packages/ixp4xx/ixp4xx-npe-native_2.3.bb19
-rw-r--r--packages/ixp4xx/ixp4xx-npe_2.3.2.bb37
-rw-r--r--packages/ixp4xx/ixp4xx-npe_2.3.bb33
-rw-r--r--packages/jack/jack_0.103.0.bb32
-rw-r--r--packages/jack/jack_0.99.0.bb33
-rw-r--r--packages/jamvm/jamvm_1.4.5.bb (renamed from packages/jamvm/jamvm_1.4.2.bb)0
-rw-r--r--packages/jards/.mtn2git_empty (renamed from packages/xfdesktop/.mtn2git_empty)0
-rw-r--r--packages/jards/jards_1.0.bb57
-rw-r--r--packages/jikes/jikes-native_1.21.bb3
-rw-r--r--packages/jpeg/jpeg-6b/libtool.patch49
-rw-r--r--packages/jpeg/jpeg_6b.bb9
-rw-r--r--packages/kanjipad/kanjipad.inc2
-rw-r--r--packages/kazehakase/.mtn2git_empty (renamed from packages/xfwm4-themes/.mtn2git_empty)0
-rw-r--r--packages/kazehakase/kazehakase_0.4.5.bb9
-rw-r--r--packages/kazehakase/kazehakase_0.4.7.bb9
-rw-r--r--packages/kazehakase/kazehakase_cvs.bb18
-rw-r--r--packages/kdepimpi/files/qt-mt.patch41
-rw-r--r--packages/kdepimpi/kdepimpi-base.inc18
-rw-r--r--packages/kdepimpi/kdepimpi_2.2.7.bb5
-rw-r--r--packages/kdepimpi/pwmpi.inc6
-rw-r--r--packages/keylaunch/files/akita/keylaunchrc22
-rw-r--r--packages/keylaunch/files/makefile-fix.patch14
-rw-r--r--packages/keylaunch/files/spitz/keylaunchrc26
-rw-r--r--packages/keylaunch/keylaunch_2.0.10.bb13
-rw-r--r--packages/keymaps/files/collie/keymap-2.6.map6
-rw-r--r--packages/keymaps/files/jornada6xx/keymap-uk.map42
-rw-r--r--packages/keymaps/keymaps_1.0.bb2
-rw-r--r--packages/kismet/kismet-2006-04-R1/no-chmod.patch173
-rw-r--r--packages/kismet/kismet_2005-04-R1.bb30
-rw-r--r--packages/kismet/kismet_2005-08-R1.bb30
-rw-r--r--packages/kismet/kismet_2006-04-R1.bb28
-rw-r--r--packages/kismet/kismet_2007-01-R1b.bb2
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/.mtn2git_empty (renamed from packages/xfwm4/.mtn2git_empty)0
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/dont-use-kde-config.patch43
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/konqe-kapplication.patch12
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/konqe_new_opie.patch756
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/konqueror.desktop6
-rw-r--r--packages/konqueror/konqueror-embedded-20070212/konqueror.pngbin0 -> 2996 bytes
-rw-r--r--packages/konqueror/konqueror-embedded_20030705.bb2
-rw-r--r--packages/konqueror/konqueror-embedded_20060404.bb2
-rw-r--r--packages/konqueror/konqueror-embedded_20070212.bb95
-rw-r--r--packages/lftp/lftp_3.5.1.bb4
-rw-r--r--packages/liba52/liba52_0.7.4.bb13
-rw-r--r--packages/libcap/libcap-1.10/syscall.patch20
-rw-r--r--packages/libcap/libcap_1.10.bb4
-rw-r--r--packages/libcwd/libcwd_0.99.44.bb25
-rw-r--r--packages/libcwd/libcwd_0.99.47.bb30
-rw-r--r--packages/libdaemon/libdaemon_0.11.bb20
-rw-r--r--packages/libeventdb/libeventdb_0.90.bb14
-rw-r--r--packages/libeventdb/libeventdb_svn.bb2
-rw-r--r--packages/libfakekey/libfakekey_svn.bb4
-rw-r--r--packages/libftdi/files/doxygen-configure.patch14
-rw-r--r--packages/libftdi/files/ftdi_eeprom-0.2-moko.patch16
-rw-r--r--packages/libftdi/ftdi-eeprom-native_0.2.bb9
-rw-r--r--packages/libftdi/ftdi-eeprom_0.2.bb13
-rw-r--r--packages/libftdi/libftdi-native_0.9.bb (renamed from packages/libftdi/libftdi-native_0.8.bb)0
-rw-r--r--packages/libftdi/libftdi_0.9.bb (renamed from packages/libftdi/libftdi_0.8.bb)0
-rw-r--r--packages/libglade/libglade_2.4.2.bb2
-rw-r--r--packages/libglade/libglade_2.5.1.bb2
-rw-r--r--packages/libgpepimc/libgpepimc_0.9.bb1
-rw-r--r--packages/libgpeplugin/libgpeplugin_cvs.bb19
-rw-r--r--packages/libgpevtype/libgpevtype_0.50.bb17
-rw-r--r--packages/libgpevtype/libgpevtype_svn.bb4
-rw-r--r--packages/libgpewidget/libgpewidget_0.115.bb22
-rw-r--r--packages/libgpg-error/libgpg-error-1.4/.mtn2git_empty (renamed from packages/xorg-xserver/xserver-kdrive-omap/.mtn2git_empty)0
-rw-r--r--packages/libgpg-error/libgpg-error-1.4/pkgconfig.patch54
-rw-r--r--packages/libgpg-error/libgpg-error_1.4.bb29
-rw-r--r--packages/libhandoff/libhandoff_0.1.bb13
-rw-r--r--packages/libhangul/.mtn2git_empty (renamed from packages/opie-taskbar/opie-taskbar/locale.conf)0
-rw-r--r--packages/libhangul/libhangul_0.0.4.bb14
-rw-r--r--packages/libiconv/libiconv_1.11.bb35
-rw-r--r--packages/libiconv/libiconv_1.9.2.bb28
-rw-r--r--packages/libid3/.mtn2git_empty0
-rw-r--r--packages/libid3/libid3_1.1.bb13
-rw-r--r--packages/libidl/libidl_0.8.6.bb12
-rw-r--r--packages/libmailwrapper/libmailwrapper.inc2
-rw-r--r--packages/libmailwrapper/libmailwrapper_1.2.2.bb1
-rw-r--r--packages/libmailwrapper/libmailwrapper_1.2.3.bb5
-rw-r--r--packages/libmailwrapper/libmailwrapper_cvs.bb3
-rw-r--r--packages/libmatchbox/files/16bppfixes-2.patch258
-rw-r--r--packages/libmatchbox/libmatchbox_1.9.bb5
-rw-r--r--packages/libmikey/libmikey0_svn.bb26
-rw-r--r--packages/libmimedir/libmimedir_0.3.1.bb4
-rw-r--r--packages/libmimedir/libmimedir_0.4.0-20060804.bb28
-rw-r--r--packages/libmimedir/libmimedir_0.4.2.bb19
-rw-r--r--packages/libmimedir/libmimedir_cvs.bb28
-rw-r--r--packages/libmimedir/libmimedir_svn.bb28
-rw-r--r--packages/libmnetutil/libmnetutil0_svn.bb25
-rw-r--r--packages/libmpeg2/libmpeg2-0.4.0b/Makefile.patch12
-rw-r--r--packages/libmpeg2/libmpeg2_0.4.0b.bb22
-rw-r--r--packages/libmrss/files/.mtn2git_empty0
-rw-r--r--packages/libmrss/files/better-parse-url-r0.patch90
-rw-r--r--packages/libmrss/libmrss_0.17.2.bb15
-rw-r--r--packages/libmrss/libmrss_0.17.bb13
-rw-r--r--packages/libmsip/libmsip0_svn.bb25
-rw-r--r--packages/libmutil/libmutil0_svn.bb20
-rw-r--r--packages/libnet/libnet-1.0.2a/configure_x86-64-host.patch11
-rw-r--r--packages/libnet/libnet_1.0.2a.bb1
-rw-r--r--packages/libnfnetlink/.mtn2git_empty0
-rw-r--r--packages/libnfnetlink/libnfnetlink_0.0.30.bb25
-rw-r--r--packages/libnxml/libnxml_0.16.bb4
-rw-r--r--packages/libogg/libtheora_0.9+1.0alpha7.bb19
-rw-r--r--packages/liboil/liboil_0.3.11.bb11
-rw-r--r--packages/libol/libol_0.3.18.bb7
-rw-r--r--packages/libopie/libopie2.inc22
-rw-r--r--packages/libopie/libopie2/exports.patch11
-rw-r--r--packages/libopie/libopie2/wireless.patch12
-rw-r--r--packages/libopie/libopie2_1.2.2.bb2
-rw-r--r--packages/libopie/libopie2_1.2.3.bb8
-rw-r--r--packages/libopie/libopie2_cvs.bb11
-rw-r--r--packages/libopieobex/files/.mtn2git_empty0
-rw-r--r--packages/libopieobex/libopieobex0.inc1
-rw-r--r--packages/libopieobex/libopieobex0_1.2.3.bb5
-rw-r--r--packages/libopieobex/libopieobex0_cvs.bb1
-rw-r--r--packages/libopietooth/libopietooth1.inc2
-rw-r--r--packages/libopietooth/libopietooth1_1.2.3.bb4
-rw-r--r--packages/libopietooth/libopietooth1_cvs.bb1
-rw-r--r--packages/libowl/.mtn2git_empty0
-rw-r--r--packages/libowl/libowl_svn.bb48
-rw-r--r--packages/libpcap/libpcap-0.9.6/.mtn2git_empty0
-rw-r--r--packages/libpcap/libpcap-0.9.6/shared.patch119
-rw-r--r--packages/libpcap/libpcap_0.9.6.bb36
-rw-r--r--packages/libpcre/libpcre_4.4.bb8
-rw-r--r--packages/libqpe/libqpe-opie.inc17
-rw-r--r--packages/libqpe/libqpe-opie/save-windows-pos-dynamic.patch113
-rw-r--r--packages/libqpe/libqpe-opie/unbreak-logging.patch21
-rw-r--r--packages/libqpe/libqpe-opie_1.2.2.bb3
-rw-r--r--packages/libqpe/libqpe-opie_1.2.3.bb9
-rw-r--r--packages/libqpe/libqpe-opie_cvs.bb9
-rw-r--r--packages/libqtaux/libqtaux2.inc5
-rw-r--r--packages/libqtaux/libqtaux2_1.2.3.bb5
-rw-r--r--packages/librcf/librcf_0.4.bb3
-rw-r--r--packages/librsvg/librsvg_2.11.1.bb21
-rw-r--r--packages/librsvg/librsvg_2.16.0.bb25
-rw-r--r--packages/librsvg/librsvg_2.16.1.bb36
-rw-r--r--packages/librsvg/librsvg_2.6.5.bb20
-rw-r--r--packages/librsvg/librsvg_2.9.5.bb20
-rw-r--r--packages/libschedule/libschedule_0.17.bb14
-rw-r--r--packages/libsdl/files/kernel-asm-page.patch13
-rw-r--r--packages/libsdl/libsdl-directfb_1.2.9.bb26
-rw-r--r--packages/libsdl/libsdl-native_1.2.11.bb5
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/.mtn2git_empty0
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/SDL-Akita-1.2.9.patch51
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/acinclude.m4332
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/agawa-piro-mickey-1.2.9.patch2054
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch22
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch27
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/ipaq-1.2.9.patch140
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch422
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/mouse-1.2.9.patch48
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/no-PAGE_SIZE.patch11
-rw-r--r--packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch191
-rw-r--r--packages/libsdl/libsdl-qpe_1.2.9.bb69
-rw-r--r--packages/libsdl/libsdl-x11_1.2.9.bb6
-rw-r--r--packages/libsexy/libsexy_0.1.11.bb2
-rw-r--r--packages/libsigc++-2.0/libsigc++-2.0-2.0.17/.mtn2git_empty0
-rw-r--r--packages/libsigc++-2.0/libsigc++-2.0-2.0.17/define_sigc_api.patch15
-rw-r--r--packages/libsigc++-2.0/libsigc++-2.0_2.0.17.bb47
-rw-r--r--packages/libsndfile/libsndfile1_1.0.17.bb17
-rw-r--r--packages/libsoundgen/libsoundgen_0.5.bb13
-rw-r--r--packages/libsoundgen/libsoundgen_0.6.bb13
-rw-r--r--packages/libtododb/libtododb_0.11.bb18
-rw-r--r--packages/libtool/libtool-1.5.10/never-ever-do-rpath.patch32
-rw-r--r--packages/libtool/libtool-1.5.10/rpath-control.patch21
-rw-r--r--packages/libtool/libtool-1.5.22/.mtn2git_empty0
-rw-r--r--packages/libtool/libtool-1.5.22/autotools.patch127
-rw-r--r--packages/libtool/libtool-1.5.22/install-path-check.patch25
-rw-r--r--packages/libtool/libtool-1.5.22/libdir-la.patch52
-rw-r--r--packages/libtool/libtool-1.5.22/prefix.patch44
-rw-r--r--packages/libtool/libtool-1.5.22/sedvar.patch16
-rw-r--r--packages/libtool/libtool-1.5.22/tag.patch19
-rw-r--r--packages/libtool/libtool-1.5.22/tag1.patch13
-rw-r--r--packages/libtool/libtool-1.5.22/uclibc.patch19
-rw-r--r--packages/libtool/libtool-1.5.24/.mtn2git_empty0
-rw-r--r--packages/libtool/libtool-1.5.24/autotools.patch127
-rw-r--r--packages/libtool/libtool-1.5.24/install-path-check.patch25
-rw-r--r--packages/libtool/libtool-1.5.24/libdir-la.patch52
-rw-r--r--packages/libtool/libtool-1.5.24/never-ever-do-rpath.patch32
-rw-r--r--packages/libtool/libtool-1.5.24/prefix.patch44
-rw-r--r--packages/libtool/libtool-1.5.24/tag.patch19
-rw-r--r--packages/libtool/libtool-1.5.24/tag1.patch13
-rw-r--r--packages/libtool/libtool-1.5.24/uclibc.patch19
-rw-r--r--packages/libtool/libtool-cross_1.5.10.bb9
-rw-r--r--packages/libtool/libtool-cross_1.5.22.bb38
-rw-r--r--packages/libtool/libtool-cross_1.5.24.bb35
-rw-r--r--packages/libtool/libtool-native_1.5.10.bb29
-rw-r--r--packages/libtool/libtool-native_1.5.22.bb32
-rw-r--r--packages/libtool/libtool-native_1.5.24.bb30
-rw-r--r--packages/libtool/libtool_1.5.22.bb37
-rw-r--r--packages/libtool/libtool_1.5.24.bb38
-rw-r--r--packages/libw100/libw100_0.0.2.bb2
-rw-r--r--packages/libw100/libw100_svn.bb2
-rw-r--r--packages/libwpd/libwpd_0.8.4.bb2
-rw-r--r--packages/libwpd/libwpd_0.8.6.bb2
-rw-r--r--packages/libxfce4mcs/libxfce4mcs_4.3.99.2.bb5
-rw-r--r--packages/libxfce4util/libxfce4util.inc31
-rw-r--r--packages/libxfce4util/libxfce4util_4.2.2.bb7
-rw-r--r--packages/libxfce4util/libxfce4util_4.3.99.2.bb22
-rw-r--r--packages/libxfcegui4/libxfcegui4_4.2.3.bb5
-rw-r--r--packages/libxfcegui4/libxfcegui4_4.3.99.2.bb5
-rw-r--r--packages/libxml/libxml2-native_2.6.29.bb17
-rw-r--r--packages/libxml/libxml2_2.6.26.bb2
-rw-r--r--packages/libxml/libxml2_2.6.29.bb34
-rw-r--r--packages/libxosd/.mtn2git_empty0
-rw-r--r--packages/libxosd/files/.mtn2git_empty0
-rw-r--r--packages/libxosd/files/autofoo.patch116
-rw-r--r--packages/libxosd/files/use-sane-default-font.patch13
-rw-r--r--packages/libxosd/libxosd_svn.bb24
-rw-r--r--packages/libxslt/files/.mtn2git_empty0
-rw-r--r--packages/libxslt/files/destdir.patch (renamed from packages/libxslt/libxslt-1.1.17/destdir.patch)0
-rw-r--r--packages/libxslt/libxslt-native_1.1.21.bb4
-rw-r--r--packages/libxslt/libxslt_1.1.17.bb4
-rw-r--r--packages/libxslt/libxslt_1.1.21.bb22
-rw-r--r--packages/lighttpd/lighttpd/configure.in.patch4
-rw-r--r--packages/lighttpd/lighttpd_1.4.13.bb41
-rw-r--r--packages/lighttpd/lighttpd_1.4.16.bb40
-rw-r--r--packages/links/links-x11_2.0+2.1pre26.bb3
-rw-r--r--packages/links/links_2.0+2.1pre26.bb4
-rw-r--r--packages/linphone/linphone_1.6.0.bb14
-rw-r--r--packages/linux-libc-headers/linux-libc-headers-2.6.20/.mtn2git_empty0
-rw-r--r--packages/linux-libc-headers/linux-libc-headers-2.6.20/procinfo.h24
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb8
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.18.bb14
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.20.bb73
-rw-r--r--packages/linux-uml/linux-uml_2.4.26.bb1
-rw-r--r--packages/linux-uml/linux-uml_2.6.11-rc2-mm1.bb1
-rw-r--r--packages/linux/LAB-kernel_2.6.13-hh2.bb1
-rw-r--r--packages/linux/LAB-kernel_cvs.bb5
-rw-r--r--packages/linux/a780-kernel_2.6.bb3
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/.mtn2git_empty0
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0001-gitignore.patch31
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0002-cm-x270-base.patch2161
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0003-ramdisk_load.patch38
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch324
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0005-mmcsd_large_cards-r0.patch41
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/0006-mmcsd_no_scr_check-r0.patch35
-rw-r--r--packages/linux/compulab-pxa270-2.6.20/defconfig1188
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty0
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch2850
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0002-cm-x270-match-type.patch25
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0003-cm-x270-ide.patch186
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0004-cm-x270-it8152.patch496
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0005-cm-x270-pcmcia.patch228
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0006-ramdisk_load.patch80
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0007-mmcsd_large_cards-r0.patch36
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0008-cm-x270-nand-simplify-name.patch25
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/0009-cursor-fix.patch43
-rw-r--r--packages/linux/compulab-pxa270-2.6.22/defconfig1234
-rw-r--r--packages/linux/compulab-pxa270_2.6.16.bb40
-rw-r--r--packages/linux/compulab-pxa270_2.6.20.bb55
-rw-r--r--packages/linux/compulab-pxa270_2.6.22.bb77
-rw-r--r--packages/linux/corgi-kernel-2.4-embedix.bb2
-rw-r--r--packages/linux/e680-kernel_2.6.bb2
-rw-r--r--packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb3
-rw-r--r--packages/linux/ezx-kernels_2.6.bb3
-rw-r--r--packages/linux/fsg3-kernel_2.6.18.bb22
-rw-r--r--packages/linux/gta01-kernel_2.6.bb1
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqpxa1578
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h39001578
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/mmc_h5400.patch20
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/defconfig-h39001447
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/defconfig-h39001468
-rw-r--r--packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/defconfig-h39001488
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/defconfig-ipaqsa1505
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/disable-pcmcia-probe.patch17
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/ipsec.patch1446
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/mkdep.patch16
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqsa1508
-rw-r--r--packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h36001464
-rw-r--r--packages/linux/husky-kernel-2.4-embedix.bb1
-rw-r--r--packages/linux/ipod_2.4.24-ipod0.bb2
-rw-r--r--packages/linux/ixp4xx-kernel.inc8
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/00-memory-h-page-shift.patch91
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch70
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/11-mtdpart-redboot-config-byteswap.patch74
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/15-jffs2-endian-config.patch80
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/40-rtc-class.patch3208
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/45-eeprom-notifier.patch184
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/48-setup-byteswap-cmdline.patch48
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/50-nas100d-arch.patch453
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/55-rtc-pcf8563.patch174
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/60-ixp4xx-beeper.patch238
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-i2c.patch531
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-ide.patch155
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-rtc.patch21
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/65-loft-config.patch84
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/81-nslu2-power.patch12
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/82-nas100d-power.patch12
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/85-timer.patch280
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/91-maclist.patch570
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/92-nas100d-maclist.patch72
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/92-nslu2-maclist.patch80
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/93-loft-maclist.patch96
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/94-nas100d-setup.patch71
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/94-nslu2-setup.patch72
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/95-ixp4xx-leds.patch260
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/950-leds-timer.patch151
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/951-ixp4xx-leds-cpu-activity.patch592
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/96-loft-leds.patch62
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/96-nas100d-leds.patch78
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/96-nslu2-leds.patch89
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.15/defconfig1696
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/06-remove-extraversion.patch11
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/10-ixp4xx-fix-irq.patch25
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/11-mtdpart-redboot-config-byteswap.patch74
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/15-jffs2-endian-config.patch85
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/40-rtc-class.patch5846
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/45-eeprom-new-notifier.patch209
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch51
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/50-hwmon-ad741x.patch378
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/65-loft-config.patch90
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/75-dsmg600.patch353
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/83-nas100d-memory-fixup.patch66
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/84-nas100d-cmdline.patch31
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/85-timer.patch280
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/91-maclist.patch573
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-mac.patch84
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-maclist.patch77
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-mac.patch87
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-maclist.patch81
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch214
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/94-nslu2-setup.patch74
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/951-ixp4xx-leds-cpu-activity.patch596
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/96-nas100d-leds.patch82
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/96-nslu2-leds.patch89
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/96-pata-ixp4xx.patch299
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-buttons.patch122
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-doc.patch43
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch120
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch72
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch290
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/97-ds101.patch457
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/copypage-xscale.patch21
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/defconfig1771
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/leds-class.patch1862
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/linux-2.6.16-i2c.patch13671
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.16/patch-2.6.16-rc6-ide118684
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty0
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.18/defconfig1840
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.19/series47
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.20/defconfig90
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.20/series46
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty0
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.21/defconfig2063
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty0
-rw-r--r--packages/linux/ixp4xx-kernel/2.6.22/defconfig1984
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.15.3.bb59
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.16.bb48
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.17.bb38
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.18.bb4
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.19.bb1
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.20.bb5
-rw-r--r--packages/linux/ixp4xx-kernel_2.6.21.6.bb24
-rw-r--r--packages/linux/linux-2.6.20/.mtn2git_empty0
-rw-r--r--packages/linux/linux-2.6.20/at91sam9263ek/.mtn2git_empty0
-rw-r--r--packages/linux/linux-2.6.20/at91sam9263ek/defconfig1529
-rw-r--r--packages/linux/linux-2.6.21+2.6.22-rc1/.mtn2git_empty0
-rw-r--r--packages/linux/linux-2.6.21+2.6.22-rc1/at91-mmcfix.patch35
-rw-r--r--packages/linux/linux-colinux_2.4.28.bb2
-rw-r--r--packages/linux/linux-colinux_2.6.10.bb2
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12.6/dht-walnut_defconfig2024
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12.6/iw_we18-5.diff462
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12.6/linux-2.6.12-mppe-mppc-1.3.patch1559
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12.6/ppc_40x_uboot.patch693
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12/dht-walnut_defconfig1963
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12/iw_we18-5.diff462
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12/linux-2.6.12-mppe-mppc-1.3.patch1559
-rw-r--r--packages/linux/linux-dht-walnut-2.6.12/ppc_40x_uboot.patch693
-rw-r--r--packages/linux/linux-dht-walnut_2.6.12.6.bb74
-rw-r--r--packages/linux/linux-dht-walnut_2.6.12.bb92
-rw-r--r--packages/linux/linux-dht-walnut_2.6.20.bb25
-rw-r--r--packages/linux/linux-efika-2.6.20.11/.mtn2git_empty0
-rw-r--r--packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch5590
-rw-r--r--packages/linux/linux-efika-2.6.20/0033-EFIKA-fullduplex-prpl_aln.txt27
-rw-r--r--packages/linux/linux-efika-2.6.21+git/.mtn2git_empty0
-rw-r--r--packages/linux/linux-efika-2.6.21+git/defconfig1645
-rw-r--r--packages/linux/linux-efika/0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt99
-rw-r--r--packages/linux/linux-efika/defconfig1530
-rw-r--r--packages/linux/linux-efika_2.6.18+2.6.19-rc6.bb6
-rw-r--r--packages/linux/linux-efika_2.6.20.11.bb86
-rw-r--r--packages/linux/linux-efika_2.6.20.bb3
-rw-r--r--packages/linux/linux-efika_2.6.21+git.bb68
-rw-r--r--packages/linux/linux-epia-2.6.19.2/epia_defconfig109
-rw-r--r--packages/linux/linux-ezx-2.6.21/.mtn2git_empty0
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/.mtn2git_empty0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX51
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch135
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch40
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-flip.patch44
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch90
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-leds.patch182
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-mci.patch135
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-ts.patch40
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch151
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch755
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/defconfig-a12001103
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/defconfig-a7801224
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/defconfig-e21092
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/defconfig-e61102
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/defconfig-e6801224
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log299
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch93
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-leds.patch369
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch43
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-mci.patch139
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/e680-ts.patch40
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch203
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch326
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-core.patch1178
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch313
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch99
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch274
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch1242
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch140
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch45
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-fix-init-errorpath.patch20
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-fix-makefile.patch14
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-fix-tty-driver.patch125
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-fix.patch164
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-ifdef-ezx-features.patch86
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-linux-2.6.21-fix.patch297
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-remove-flipbuffers.patch269
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-remove-get_halted_bit.patch22
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux-remove-usbh_finished_resume.patch22
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux_cli.patch5396
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/mux_debug.patch551
-rw-r--r--packages/linux/linux-ezx-2.6.21/patches/patch-2.6.21.42816
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/pcap-ts.patch404
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch534
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-support.2.patch3037
-rwxr-xr-xpackages/linux/linux-ezx-2.6.21/patches/series93
-rw-r--r--packages/linux/linux-ezx-2.6.21/update_patches.sh16
-rw-r--r--packages/linux/linux-ezx/defconfig-a7801317
-rw-r--r--packages/linux/linux-ezx/defconfig-a780-laforge1298
-rw-r--r--packages/linux/linux-ezx/defconfig-e6801314
-rw-r--r--packages/linux/linux-ezx/defconfig-rokr-e2904
-rw-r--r--packages/linux/linux-ezx/pxa-serial-gcc4.diff11
-rw-r--r--packages/linux/linux-ezx/sa1100-rtc-gcc4.diff11
-rw-r--r--packages/linux/linux-ezx_2.6.16.13.bb109
-rw-r--r--packages/linux/linux-ezx_2.6.19+2.6.20-rc2.bb124
-rw-r--r--packages/linux/linux-ezx_2.6.21.bb153
-rw-r--r--packages/linux/linux-geodegx_2.4.24.bb2
-rw-r--r--packages/linux/linux-geodelx_2.6.11.bb2
-rw-r--r--packages/linux/linux-gta01.inc104
-rw-r--r--packages/linux/linux-gta01/defconfig-2.6.20-fic-gta011781
-rw-r--r--packages/linux/linux-gta01/defconfig-2.6.21.3-fic-gta011857
-rw-r--r--packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta011857
-rw-r--r--packages/linux/linux-gta01/defconfig-fic-gta011621
-rw-r--r--packages/linux/linux-gta01/fix-EVIOCGRAB-semantics.patch97
-rw-r--r--packages/linux/linux-gta01/udc-nomodule-misccr.patch22
-rw-r--r--packages/linux/linux-gta01_2.6.17.14.bb101
-rw-r--r--packages/linux/linux-gta01_2.6.17.7.bb97
-rw-r--r--packages/linux/linux-gta01_2.6.20.bb102
-rw-r--r--packages/linux/linux-gta01_2.6.21.3.bb10
-rw-r--r--packages/linux/linux-gta01_2.6.21.5.bb10
-rw-r--r--packages/linux/linux-h1940_2.6.11-bk1-h1940.bb1
-rw-r--r--packages/linux/linux-h1940_2.6.14-h1940.bb1
-rw-r--r--packages/linux/linux-h1940_2.6.17-h1940.bb1
-rw-r--r--packages/linux/linux-h6300-omap1_2.6.12-rc5.bb2
-rw-r--r--packages/linux/linux-h6300-omap1_2.6.14.3.bb2
-rw-r--r--packages/linux/linux-h6300-omap1_2.6.16.16.bb2
-rw-r--r--packages/linux/linux-hackndev-2.6/palmld/defconfig549
-rw-r--r--packages/linux/linux-hackndev-2.6/palmt650/.mtn2git_empty0
-rw-r--r--packages/linux/linux-hackndev-2.6/palmt650/defconfig1295
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtc/.mtn2git_empty0
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtc/defconfig1208
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtt3/.mtn2git_empty0
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtt3/defconfig1383
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtt5/.mtn2git_empty0
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtt5/defconfig1314
-rw-r--r--packages/linux/linux-hackndev-2.6/palmtx/defconfig656
-rw-r--r--packages/linux/linux-hackndev-2.6/palmz72/defconfig627
-rw-r--r--packages/linux/linux-hackndev-2.6_svn.bb14
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/aximx50/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/aximx50/defconfig1495
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h2200/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h2200/defconfig1645
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h3600/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h3600/defconfig1101
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h3900/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h3900/defconfig1260
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h4000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h4000/defconfig1317
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h5000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/h5000/defconfig1252
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/defconfig1501
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/defconfig1447
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/hx4700/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig1879
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.main (renamed from packages/linux/linux-handhelds-2.6/hx4700/defconfig.main)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.old (renamed from packages/linux/linux-handhelds-2.6/hx4700/defconfig.old)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/magician/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/magician/defconfig1556
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/rx3000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.20/rx3000/defconfig1341
-rw-r--r--packages/linux/linux-handhelds-2.6.inc10
-rw-r--r--packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/asus620/defconfig1285
-rw-r--r--packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/asus730/defconfig1377
-rw-r--r--packages/linux/linux-handhelds-2.6/aximx50/defconfig899
-rw-r--r--packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/eteng500/defconfig1277
-rw-r--r--packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/h1910/defconfig1352
-rw-r--r--packages/linux/linux-handhelds-2.6/h2200/defconfig1056
-rw-r--r--packages/linux/linux-handhelds-2.6/h2200/hamcop-h11.patch20
-rw-r--r--packages/linux/linux-handhelds-2.6/h3600/defconfig674
-rw-r--r--packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/h3800/defconfig1270
-rw-r--r--packages/linux/linux-handhelds-2.6/h3900/defconfig495
-rw-r--r--packages/linux/linux-handhelds-2.6/h4000/defconfig505
-rw-r--r--packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/h5000/defconfig1329
-rw-r--r--packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/htcalpine/defconfig1277
-rw-r--r--packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/htcapache/defconfig1363
-rw-r--r--packages/linux/linux-handhelds-2.6/htcblueangel/defconfig867
-rw-r--r--packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/htchimalaya/defconfig1275
-rw-r--r--packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/htcsable/defconfig1387
-rw-r--r--packages/linux/linux-handhelds-2.6/htcuniversal/defconfig795
-rw-r--r--packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/htcwallaby/defconfig1275
-rw-r--r--packages/linux/linux-handhelds-2.6/hx4700/defconfig880
-rw-r--r--packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/looxc550/defconfig1280
-rw-r--r--packages/linux/linux-handhelds-2.6/magician/defconfig568
-rw-r--r--packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6/rx1950/defconfig1319
-rw-r--r--packages/linux/linux-handhelds-2.6/rx3000/defconfig556
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.19-hh11.bb15
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.20-hh10.bb15
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh10.bb (renamed from packages/linux/linux-handhelds-2.6_2.6.20-hh1.bb)0
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh11.bb12
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh12.bb11
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh13.bb (renamed from packages/linux/linux-handhelds-2.6_2.6.20-hh2.bb)0
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh14.bb11
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh9.bb11
-rw-r--r--packages/linux/linux-handhelds-2.6_cvs.bb6
-rw-r--r--packages/linux/linux-jlime-current.bb19
-rw-r--r--packages/linux/linux-jlime-jornada6xx-2.6.21rc5/.mtn2git_empty0
-rw-r--r--packages/linux/linux-jlime-jornada6xx-2.6.21rc5/defconfig1245
-rw-r--r--packages/linux/linux-jlime-jornada6xx-2.6.21rc5/git-20070405-2.patch1058
-rw-r--r--packages/linux/linux-jlime-jornada6xx-2.6.21rc5/hp6xx-IRQ3.patch4
-rw-r--r--packages/linux/linux-jlime-jornada6xx_2.6.21rc5.bb33
-rw-r--r--packages/linux/linux-linkstationarm/.mtn2git_empty0
-rw-r--r--packages/linux/linux-linkstationarm/defconfig1123
-rw-r--r--packages/linux/linux-linkstationarm/makefile.patch11
-rw-r--r--packages/linux/linux-linkstationarm_2.6.12.bb35
-rw-r--r--packages/linux/linux-linkstationppc/.mtn2git_empty0
-rw-r--r--packages/linux/linux-linkstationppc/defconfig1981
-rw-r--r--packages/linux/linux-linkstationppc_2.6.21-rc5.bb42
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/.mtn2git_empty0
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/000-fix-makefile.patch12
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/001-magicbox-board-2.6.18.patch381
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/002-magicbox-mtd-map-2.6.18.patch136
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/010-load-ramdisk-even-if-rootdev-equals-ramdisk.patch16
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/config-2.6.18-magicbox21204
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/kernel-2.6.18-layer7-2.6.patch2051
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/magicbox2-ide-cf_2.6.18.patch221
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/squashfs-lzma-support.patch890
-rw-r--r--packages/linux/linux-magicbox-2.6.18.6/squashfs3.1-patch4227
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/.mtn2git_empty0
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/001-magicbox_support.patch372
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/001-squashfs.patch4170
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/002-flash_map.patch147
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/002-lzma_decompress.patch780
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/003-squashfs_lzma.patch109
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/004-extra_optimization.patch13
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/006-gcc4_inline_fix.patch12
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/007-samsung_flash.patch37
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/009-revert_intel_flash_breakage.patch169
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/010-disable_old_squashfs_compatibility.patch21
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/011-mips_boot.patch14
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/012-mips_cpu_tlb.patch20
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/050-mtdpart_redboot_partition_truncate.patch61
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/060-rootfs_split.patch414
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/065-block2mtd_init.patch112
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/100-cf_slot.patch2306
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/100-netfilter_layer7_2.8.patch2053
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/101-netfilter_layer7_pktmatch.patch108
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/110-ipp2p_0.8.1rc1.patch948
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/120-openswan-2.4.0.kernel-2.6-natt.patch171
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/130-netfilter-ipset.patch5851
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/140-netfilter_time.patch241
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/150-netfilter_imq.patch892
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/160-netfilter_route.patch902
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/170-netfilter_chaostables.patch880
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/200-sched_esfq.patch730
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/201-multiple_default_gateways.patch1243
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/202-mips-freestanding.patch13
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/204-jffs2_eofdetect.patch58
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/207-powerpc_asm_segment_h.patch10
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/208-rtl8110sb_fix.patch25
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/209-mini_fo.patch7807
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/210-d80211_compat.patch11
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/211-no_block2mtd_readahead.patch11
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/212-block2mtd_erase_scan.patch11
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/510-Yaffs.patch13085
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/600-x86_lzma.patch1167
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/700-airprime.patch12
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/900-headers_type_and_time.patch48
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/901-asm_bitops_include.patch11
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/902-darwin_scripts_include.patch145
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/903-stddef_include.patch17
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/904-ls_time_locale.patch24
-rw-r--r--packages/linux/linux-magicbox-2.6.19.2/config-magicbox21619
-rw-r--r--packages/linux/linux-magicbox_2.6.18.6.bb79
-rw-r--r--packages/linux/linux-magicbox_2.6.19.2.bb115
-rw-r--r--packages/linux/linux-mtx-1-2.4.27/48-pptp.patch5092
-rw-r--r--packages/linux/linux-mtx-1_2.4.27.bb2
-rw-r--r--packages/linux/linux-mtx-1u_2.4.27.bb2
-rw-r--r--packages/linux/linux-mtx-2-2.4.27/45-acm-tty-and-sb2.patch721
-rw-r--r--packages/linux/linux-mtx-2-2.4.27/45-acm-tty.patch252
-rw-r--r--packages/linux/linux-mtx-2_2.4.27.bb3
-rw-r--r--packages/linux/linux-mtx-3_2.6.15.4.bb1
-rw-r--r--packages/linux/linux-mtx-3_2.6.15.bb2
-rw-r--r--packages/linux/linux-netvista-2.4.27/netvista_defconfig1309
-rw-r--r--packages/linux/linux-netvista_2.4.27.bb25
-rw-r--r--packages/linux/linux-nokia800-2.6.18-osso29/.mtn2git_empty0
-rw-r--r--packages/linux/linux-nokia800-2.6.18-osso29/nokia770/.mtn2git_empty0
-rw-r--r--packages/linux/linux-nokia800-2.6.18-osso29/nokia770/defconfig1342
-rw-r--r--packages/linux/linux-nokia800-2.6.18-osso29/nokia800/.mtn2git_empty0
-rw-r--r--packages/linux/linux-nokia800-2.6.18-osso29/nokia800/defconfig1315
-rw-r--r--packages/linux/linux-nokia800.inc40
-rw-r--r--packages/linux/linux-nokia800_2.6.18-osso29.bb9
-rw-r--r--packages/linux/linux-omap1-2.6.18-omap1/defconfig1
-rw-r--r--packages/linux/linux-omap1-2.6.20-omap1/defconfig.eabi102
-rw-r--r--packages/linux/linux-omap1.inc13
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/.mtn2git_empty0
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/.mtn2git_empty0
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/defconfig882
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/.mtn2git_empty0
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/defconfig882
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/.mtn2git_empty0
-rw-r--r--packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/defconfig875
-rw-r--r--packages/linux/linux-palm-omap1_2.6.22-omap1.bb46
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-qemuarm5
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-qemux8620
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-akita337
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-c7x0366
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-collie298
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-hx20006
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-ipaq-pxa2701021
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-poodle1
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-qemuarm7
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-qemux8611
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-spitz248
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-spitz.flash1604
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-tosa4
-rw-r--r--packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch50
-rw-r--r--packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch519
-rw-r--r--packages/linux/linux-rp-2.6.21/.mtn2git_empty0
-rw-r--r--packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch17
-rw-r--r--packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-akita1743
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-bootcdx861606
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-c7x01786
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-collie1739
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-hx20001165
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-poodle1656
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-qemuarm1193
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-qemux861567
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-spitz1741
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-tosa1612
-rw-r--r--packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch209
-rw-r--r--packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch88
-rw-r--r--packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch90
-rw-r--r--packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch519
-rw-r--r--packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch4191
-rw-r--r--packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch3141
-rw-r--r--packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp.inc46
-rw-r--r--packages/linux/linux-rp_2.6.17.bb4
-rw-r--r--packages/linux/linux-rp_2.6.20.bb28
-rw-r--r--packages/linux/linux-rp_2.6.21.bb116
-rw-r--r--packages/linux/linux-sequoia_2.6.21.bb60
-rw-r--r--packages/linux/linux-smdk2440-2.6.19/smdk2440-touchscreen-r2.patch532
-rw-r--r--packages/linux/linux-smdk2440-2.6.20+git/.mtn2git_empty0
-rw-r--r--packages/linux/linux-smdk2440-2.6.20+git/0001-Enable-cs8900A-network-device-for-smdk2440-board.patch92
-rw-r--r--packages/linux/linux-smdk2440/defconfig-smdk2440203
-rw-r--r--packages/linux/linux-smdk2440/smdk2440-touchscreen-r3.patch529
-rw-r--r--packages/linux/linux-smdk2440_2.6.19.bb39
-rw-r--r--packages/linux/linux-smdk2440_2.6.20+git.bb38
-rw-r--r--packages/linux/linux-smdk2443/.mtn2git_empty0
-rw-r--r--packages/linux/linux-smdk2443/0020-Add-ASoC-S3C24xx-platform-support.patch1077
-rw-r--r--packages/linux/linux-smdk2443/0021-Add-Neo1973-ASoC-support.patch763
-rw-r--r--packages/linux/linux-smdk2443/0022-Add-initial-ASoC-SMDK2440-support.patch373
-rw-r--r--packages/linux/linux-smdk2443/0023-Add-ASoC-SMDK2440-support-for-WM8956-codec.patch391
-rw-r--r--packages/linux/linux-smdk2443/0033-arch-hardware.h-is-no-longer-allowed-to-be-directly.patch41
-rw-r--r--packages/linux/linux-smdk2443/0034-Export-ac97_dai.patch39
-rw-r--r--packages/linux/linux-smdk2443/0035-Fix-power-and-PLL.patch63
-rw-r--r--packages/linux/linux-smdk2443/0036-Move-s3c24xx_i2s_dai-and-add-dma_size.patch48
-rw-r--r--packages/linux/linux-smdk2443/0037-Use-dma_size-parameter-and-fix-buffdone-oops.patch104
-rw-r--r--packages/linux/linux-smdk2443/0038-Add-smdk2443-s3c2443-ac97-and-wm9710-support.patch724
-rw-r--r--packages/linux/linux-smdk2443/asoc-mainline.patch142
-rw-r--r--packages/linux/linux-smdk2443/defconfig-smdk24431480
-rw-r--r--packages/linux/linux-smdk2443_2.6.20+git.bb52
-rw-r--r--packages/linux/linux-titan-sh4-2.6.17/titan-config1551
-rw-r--r--packages/linux/linux-titan-sh4-2.6.21/.mtn2git_empty0
-rw-r--r--packages/linux/linux-titan-sh4-2.6.21/no-mm-mutex.patch47
-rw-r--r--packages/linux/linux-titan-sh4-2.6.21/titan-config1798
-rw-r--r--packages/linux/linux-titan-sh4/titan-flash.patch94
-rw-r--r--packages/linux/linux-titan-sh4_2.6.17.bb48
-rw-r--r--packages/linux/linux-titan-sh4_2.6.21.bb29
-rw-r--r--packages/linux/linux-tornado-omap2/.mtn2git_empty0
-rw-r--r--packages/linux/linux-tornado-omap2/htctornado/.mtn2git_empty0
-rw-r--r--packages/linux/linux-tornado-omap2/htctornado/defconfig894
-rw-r--r--packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch5134
-rw-r--r--packages/linux/linux-tornado-omap2/tornado-20070320.patch6081
-rw-r--r--packages/linux/linux-tornado-omap2_2.6.16.16.bb49
-rw-r--r--packages/linux/linux-turbostation/defconfig705
-rw-r--r--packages/linux/linux-turbostation/linux-2.6.16_arch_ppc_syslib_open_pic.c14
-rw-r--r--packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Kconfig17
-rw-r--r--packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Makefile12
-rw-r--r--packages/linux/linux-turbostation/linux-2.6.16_drivers_mtd_maps_physmap.c38
-rw-r--r--packages/linux/linux-turbostation/linux-2.6.16_drivers_net_r8169.c13
-rw-r--r--packages/linux/linux-turbostation_2.6.20.1.bb74
-rw-r--r--packages/linux/linux-turbostation_2.6.20.2.bb51
-rw-r--r--packages/linux/linux-x86-2.6.20/defconfig1535
-rw-r--r--packages/linux/linux-x86-2.6.20/i486-defconfig1649
-rw-r--r--packages/linux/linux-x86-2.6.20/i586-defconfig2705
-rw-r--r--packages/linux/linux-x86-2.6.20/i686-defconfig2705
-rw-r--r--packages/linux/linux-x86-2.6.20/netvista/.mtn2git_empty0
-rw-r--r--packages/linux/linux-x86-2.6.20/netvista/defconfig1720
-rw-r--r--packages/linux/linux-x86_2.6.20.bb31
-rw-r--r--packages/linux/linux-xxs1500_2.4.21.bb2
-rw-r--r--packages/linux/linux.inc79
-rw-r--r--packages/linux/linux/alix/.mtn2git_empty0
-rw-r--r--packages/linux/linux/alix/defconfig1787
-rw-r--r--packages/linux/linux/at32stk1000/.mtn2git_empty0
-rw-r--r--packages/linux/linux/at32stk1000/defconfig849
-rw-r--r--packages/linux/linux/at91sam9263ek/.mtn2git_empty0
-rw-r--r--packages/linux/linux/at91sam9263ek/defconfig1184
-rw-r--r--packages/linux/linux/ep93xx/.mtn2git_empty0
-rw-r--r--packages/linux/linux/ep93xx/defconfig1176
-rw-r--r--packages/linux/linux/kb9202/.mtn2git_empty0
-rw-r--r--packages/linux/linux/kb9202/defconfig780
-rw-r--r--packages/linux/linux/n2100/.mtn2git_empty0
-rw-r--r--packages/linux/linux/n2100/defconfig1843
-rw-r--r--packages/linux/linux/n2100/n2100-r8169-parity.patch39
-rw-r--r--packages/linux/linux/n2100/rtc-rs5c372-n2100.patch13
-rw-r--r--packages/linux/linux/progear/progear_bl-r6.patch200
-rw-r--r--packages/linux/linux/sarge-at91/.mtn2git_empty0
-rw-r--r--packages/linux/linux/sarge-at91/2.6.21-sarge-kernel.patch238
-rw-r--r--packages/linux/linux/sarge-at91/2.6.21-sarge-mmc.patch87
-rw-r--r--packages/linux/linux/sarge-at91/2.6.21-sarge-phy.patch400
-rw-r--r--packages/linux/linux/sarge-at91/defconfig1909
-rw-r--r--packages/linux/linux/simpad/defconfig190
-rw-r--r--packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch1776
-rw-r--r--packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch231
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-GPIO-MMC-mod.patch1650
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-battery-old-way-but-also-with-sysfs.patch571
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch184
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch2511
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-net-shared-irq.patch63
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-pcmcia.patch162
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-gpio_keys-and-cs3-ro.patch332
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch359
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-ts-supend-and-accuracy.patch121
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-usb-gadget.patch3329
-rw-r--r--packages/linux/linux_2.6.20.bb28
-rw-r--r--packages/linux/linux_2.6.21+2.6.22-rc1.bb30
-rw-r--r--packages/linux/linux_2.6.21.bb29
-rw-r--r--packages/linux/linux_2.6.22.bb14
-rw-r--r--packages/linux/mx21ads-kernel_2.6.19rc6.bb1
-rw-r--r--packages/linux/mx31ads-kernel_2.6.19rc6.bb5
-rw-r--r--packages/linux/poodle-kernel-2.4-embedix.bb1
-rw-r--r--packages/linux/poodle-kernels-2.4-embedix.bb1
-rw-r--r--packages/linux/poodle255-kernel-2.4-embedix.bb2
-rw-r--r--packages/linux/shepherd-kernel-2.4-embedix.bb1
-rw-r--r--packages/linux/unslung-kernel/defconfig10
-rw-r--r--packages/linux/unslung-kernel_2.4.22.l2.3r63.bb4
-rw-r--r--packages/linux/xanadux-ba-2.6_2.6.12.bb1
-rw-r--r--packages/linux/xanadux-un-2.6_2.6.12.bb2
-rw-r--r--packages/lirc/lirc-config.inc3
-rw-r--r--packages/lirc/lirc-modules_0.8.1+cvs20070307.bb47
-rw-r--r--packages/lirc/lirc_0.8.0.bb3
-rw-r--r--packages/lirc/lirc_0.8.1+cvs20070307.bb73
-rw-r--r--packages/llvm/.mtn2git_empty0
-rw-r--r--packages/llvm/llvm-native_1.9.bb9
-rw-r--r--packages/llvm/llvm-native_2.0.bb12
-rw-r--r--packages/llvm/llvm-native_cvs.bb13
-rw-r--r--packages/llvm/llvm.inc16
-rw-r--r--packages/lm_sensors/files/iconv.patch13
-rw-r--r--packages/lm_sensors/lmsensors-apps_2.10.1.bb4
-rw-r--r--packages/logrotate/logrotate_3.7.1.bb11
-rw-r--r--packages/loudmouth/loudmouth_1.1.1.bb11
-rw-r--r--packages/loudmouth/loudmouth_1.2.2.bb12
-rw-r--r--packages/lrzsz/lrzsz_0.12.20.bb20
-rw-r--r--packages/lsof/lsof_4.77.bb39
-rw-r--r--packages/lsof/lsof_4.78.bb39
-rw-r--r--packages/ltp/.mtn2git_empty0
-rw-r--r--packages/ltp/ltp-20070228/.mtn2git_empty0
-rw-r--r--packages/ltp/ltp-20070228/cross-compile.patch51
-rw-r--r--packages/ltp/ltp-20070228/ltp-run4
-rw-r--r--packages/ltp/ltp-20070228/runltp-path.patch13
-rw-r--r--packages/ltp/ltp_20070228.bb42
-rw-r--r--packages/ltrace/files/.mtn2git_empty0
-rw-r--r--packages/ltrace/files/no-usr-include.patch16
-rw-r--r--packages/ltrace/ltrace_0.4.bb51
-rw-r--r--packages/lua/lua.inc14
-rw-r--r--packages/lua/lua_5.0.2.bb2
-rw-r--r--packages/lvm2/lvm2_2.01.15.bb2
-rw-r--r--packages/lyx/lyx_1.4.4+1.5.0rc1.bb27
-rw-r--r--packages/lyx/lyx_1.4.4.bb24
-rw-r--r--packages/m4/m4-native_1.4.8.bb19
-rw-r--r--packages/m4/m4_1.4.8.bb13
-rw-r--r--packages/mISDN/.mtn2git_empty0
-rw-r--r--packages/mISDN/files/.mtn2git_empty0
-rw-r--r--packages/mISDN/files/Makefile4
-rw-r--r--packages/mISDN/files/hfcs_usb_endianchecks.diff58
-rw-r--r--packages/mISDN/misdn_cvs.bb35
-rw-r--r--packages/madfu/.mtn2git_empty0
-rw-r--r--packages/madfu/files/.mtn2git_empty0
-rw-r--r--packages/madfu/files/autofoo.patch54
-rw-r--r--packages/madfu/madfu_1.2.bb27
-rw-r--r--packages/madwifi/madwifi-modules-0.9.3/.mtn2git_empty0
-rw-r--r--packages/madwifi/madwifi-modules-0.9.3/madwifi-devname.patch115
-rw-r--r--packages/madwifi/madwifi-modules-0.9.3/madwifi-skbpanic.patch16
-rw-r--r--packages/madwifi/madwifi-modules_0.9.3.bb57
-rw-r--r--packages/madwifi/madwifi-ng_r.inc4
-rw-r--r--packages/madwifi/madwifi-ng_r2182-20070308.bb3
-rw-r--r--packages/madwifi/madwifi-ng_r2187-20070309.bb3
-rw-r--r--packages/madwifi/madwifi-ng_r2518-20070626.bb7
-rw-r--r--packages/maemo/hildon-fm_0.9.1-2.bb2
-rw-r--r--packages/maemo3/hildon-libs_0.15.1.bb26
-rw-r--r--packages/maemo3/hildon-thumbnail_0.11.bb25
-rw-r--r--packages/maemo3/libhildonhelp_1.9.1.bb23
-rw-r--r--packages/maemo3/libhildonmime_1.9.5.bb23
-rw-r--r--packages/maemo3/libosso-help_2.1.2.bb24
-rw-r--r--packages/maemo3/mce-dev_1.5.6.bb23
-rw-r--r--packages/maemo3/osso-gwconnect_1.0.8.bb22
-rw-r--r--packages/maemo3/osso-ic-oss/.mtn2git_empty0
-rw-r--r--packages/maemo3/osso-ic-oss/dbus-api-update.patch33
-rw-r--r--packages/maemo3/osso-ic-oss_1.0.4.bb25
-rw-r--r--packages/maemo3/osso-thumbnail_0.7.bb22
-rw-r--r--packages/matchbox-common/matchbox_0.9.1.bb1
-rw-r--r--packages/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch91
-rw-r--r--packages/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch94
-rw-r--r--packages/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch65
-rw-r--r--packages/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch197
-rw-r--r--packages/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch111
-rw-r--r--packages/matchbox-keyboard/matchbox-keyboard_svn.bb10
-rw-r--r--packages/matchbox-keyboard/mboxkbd-layouts-gui_git.bb12
-rwxr-xr-xpackages/matchbox-panel-hacks/matchbox-panel-hacks-0.3-1/xrandr-panelapp.sh11
-rw-r--r--packages/matchbox-panel-hacks/matchbox-panel-hacks_0.3-1.bb2
-rw-r--r--packages/matchbox-panel/matchbox-panel_0.9.3.bb2
-rw-r--r--packages/matchbox-themes-extra/matchbox-theme-sato_0.1.bb13
-rw-r--r--packages/matchbox-themes-extra/matchbox-theme-sato_svn.bb18
-rw-r--r--packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb3
-rw-r--r--packages/matchbox-wm/matchbox-wm/gconf-2.m439
-rw-r--r--packages/matchbox-wm/matchbox-wm_1.2.bb42
-rw-r--r--packages/matchbox2/matchbox-desktop-2_svn.bb27
-rw-r--r--packages/matchbox2/matchbox-panel-2_svn.bb15
-rw-r--r--packages/mb-desktop-xine/mb-desktop-xine_0.4.bb7
-rw-r--r--packages/mdk/mdk2_v33.bb1
-rw-r--r--packages/mediatomb/mediatomb_0.9.0.bb30
-rw-r--r--packages/mediatomb/mediatomb_0.9.1.bb30
-rw-r--r--packages/memedit/.mtn2git_empty0
-rw-r--r--packages/memedit/memedit_0.7.bb11
-rw-r--r--packages/mesa/mesa-6.5.2/fix-host-compile.patch30
-rw-r--r--packages/mesa/mesa-mesa.inc2
-rw-r--r--packages/mesa/mesa_6.5.2.bb7
-rw-r--r--packages/meta/foonas-packages.bb167
-rw-r--r--packages/meta/meta-e-x11-core.bb4
-rw-r--r--packages/meta/meta-e-x11.bb4
-rw-r--r--packages/meta/meta-gpe-extras.bb7
-rw-r--r--packages/meta/meta-gpe.bb22
-rw-r--r--packages/meta/meta-gpephone.bb12
-rw-r--r--packages/meta/meta-opie-all.bb18
-rw-r--r--packages/meta/meta-opie.bb5
-rw-r--r--packages/meta/meta-sdk-gpe.bb106
-rw-r--r--packages/meta/meta-sdk-sbox-gpe.bb101
-rw-r--r--packages/meta/meta-sdk-sbox.bb97
-rw-r--r--packages/meta/meta-sdk.bb54
-rw-r--r--packages/meta/meta-sdl.bb12
-rw-r--r--packages/meta/meta-sectest-gpe.bb7
-rw-r--r--packages/meta/meta-toolchain.bb30
-rw-r--r--packages/meta/nylon-feed.bb5
-rw-r--r--packages/meta/nylon-feed.inc3
-rw-r--r--packages/meta/oplinux-packages.bb646
-rw-r--r--packages/meta/slugos-native.bb9
-rw-r--r--packages/meta/slugos-packages.bb42
-rw-r--r--packages/meta/xbase-clients.bb3
-rw-r--r--packages/miconapl/.mtn2git_empty0
-rw-r--r--packages/miconapl/miconapl_0.0.1.bb31
-rw-r--r--packages/micro-emacs/micro-emacs-20040301/zaurus_make.patch25
-rw-r--r--packages/micro-emacs/micro-emacs-20060909/.mtn2git_empty0
-rw-r--r--packages/micro-emacs/micro-emacs-20060909/zaurus_make.patch25
-rw-r--r--packages/micro-emacs/micro-emacs_20040301.bb26
-rw-r--r--packages/micro-emacs/micro-emacs_20060909.bb26
-rw-r--r--packages/micro-evtd/.mtn2git_empty0
-rw-r--r--packages/micro-evtd/micro-evtd_0.0.1.bb22
-rw-r--r--packages/midpath/.mtn2git_empty0
-rw-r--r--packages/midpath/midpath-alsa_svn.bb42
-rw-r--r--packages/midpath/midpath-cldc-x11_svn.bb43
-rw-r--r--packages/midpath/midpath-gtk_svn.bb43
-rw-r--r--packages/midpath/midpath-native_svn.bb34
-rw-r--r--packages/midpath/midpath-qt3x11_svn.bb48
-rw-r--r--packages/midpath/midpath-qte_svn.bb46
-rw-r--r--packages/midpath/midpath_svn.bb110
-rw-r--r--packages/miniclipboard/miniclipboard-0.3/makefile.patch26
-rw-r--r--packages/miniclipboard/miniclipboard_0.3.bb7
-rw-r--r--packages/minisip/libmikey_svn.bb17
-rw-r--r--packages/minisip/libmnetutil_svn.bb16
-rw-r--r--packages/minisip/libmsip_svn.bb16
-rw-r--r--packages/minisip/libmutil0_svn.bb16
-rw-r--r--packages/minisip/minisip-video_svn.bb16
-rw-r--r--packages/minisip/minisip_svn.bb21
-rw-r--r--packages/misc-binary-only/prism-firmware.bb30
-rw-r--r--packages/misc-binary-only/prism-firmware/.mtn2git_empty0
-rw-r--r--packages/misc-binary-only/prism-firmware/hostap.rules4
-rw-r--r--packages/misc-binary-only/prism-firmware/prism-fw.sh32
-rw-r--r--packages/misc-binary-only/prism3-firmware_1.8.3.bb27
-rw-r--r--packages/misc-binary-only/prism3-firmware_1.8.4.bb27
-rw-r--r--packages/module-init-tools/files/module-init-tools-remove-index.patch14
-rw-r--r--packages/module-init-tools/module-init-tools_3.2.2.bb5
-rw-r--r--packages/modutils/modutils-cross_2.4.27.bb2
-rw-r--r--packages/modutils/modutils_2.4.27.bb3
-rw-r--r--packages/mono/files/mono-configure.patch32
-rw-r--r--packages/mono/files/mono-mini-Makefile.patch11
-rw-r--r--packages/mono/files/mono-mips-endian.patch28
-rw-r--r--packages/mono/files/mono-monoburg-Makefile.patch21
-rw-r--r--packages/mono/mono-native_1.2.4.bb9
-rw-r--r--packages/mono/mono_1.2.4.bb19
-rw-r--r--packages/mono/mono_1.2.4.inc12
-rw-r--r--packages/monotone/monotone-6_0.33.bb4
-rw-r--r--packages/monotone/monotone-6_0.34.bb52
-rw-r--r--packages/mozilla/files/eabi-fix.patch66
-rw-r--r--packages/mozilla/files/eabi-fix2.patch56
-rw-r--r--packages/mozilla/files/eabi-fix3.patch15
-rw-r--r--packages/mozilla/firefox-1.0.7/mozilla-eabi.patch28
-rw-r--r--packages/mozilla/firefox-1.0.7/xptcinvoke-arm.patch (renamed from packages/mozilla/firefox-2.0.0.1/xptcinvoke-arm.patch)0
-rw-r--r--packages/mozilla/firefox-1.5.0.6/mozconfig53
-rw-r--r--packages/mozilla/firefox-2.0.0.3/.mtn2git_empty0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/jsautocfg-dontoverwrite.patch (renamed from packages/mozilla/firefox-2.0.0.1/jsautocfg-dontoverwrite.patch)0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/jsdtoa-float-type.patch (renamed from packages/mozilla/firefox-2.0.0.1/jsdtoa-float-type.patch)0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/mozconfig (renamed from packages/mozilla/firefox-2.0.0.1/mozconfig)0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/mozilla-eabi.patch42
-rw-r--r--packages/mozilla/firefox-2.0.0.3/mult-crash-fix.patch (renamed from packages/mozilla/firefox-2.0.0.1/mult-crash-fix.patch)0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/security-cross.patch (renamed from packages/mozilla/firefox-2.0.0.1/security-cross.patch)0
-rw-r--r--packages/mozilla/firefox-2.0.0.3/xptcinvoke-arm.patch11
-rw-r--r--packages/mozilla/firefox-2.0.0.3/xptcstubs.patch (renamed from packages/mozilla/firefox-2.0.0.1/xptcstubs.patch)0
-rw-r--r--packages/mozilla/firefox-2.0/jsautocfg-dontoverwrite.patch23
-rw-r--r--packages/mozilla/firefox-2.0/mozconfig53
-rw-r--r--packages/mozilla/firefox-2.0/security-cross.patch93
-rw-r--r--packages/mozilla/firefox_1.0.7.bb6
-rw-r--r--packages/mozilla/firefox_1.5.0.6.bb18
-rw-r--r--packages/mozilla/firefox_2.0.0.1.bb37
-rw-r--r--packages/mozilla/firefox_2.0.0.3.bb39
-rw-r--r--packages/mozilla/firefox_2.0.bb35
-rw-r--r--packages/mozilla/minimo/minimo-components-ssr-only.patch36
-rw-r--r--packages/mozilla/minimo/minimo-disable-mode-switch.patch11
-rw-r--r--packages/mozilla/minimo/minimo.patch843
-rw-r--r--packages/mozilla/minimo_0.016+cvs.bb147
-rw-r--r--packages/mozilla/minimo_cvs.bb180
-rw-r--r--packages/mpeg2dec/mpeg2dec_0.4.0b.bb16
-rw-r--r--packages/mpg123/.mtn2git_empty0
-rw-r--r--packages/mpg123/mpg123_0.66.bb11
-rw-r--r--packages/mpg321/mpg321_0.2.10.bb6
-rw-r--r--packages/mplayer/files/Makefile-codec-cfg.patch6
-rw-r--r--packages/mplayer/files/makefile-nostrip-svn.patch43
-rw-r--r--packages/mplayer/files/mplayer-imageon-svn.patch366
-rw-r--r--packages/mplayer/files/powerpc-is-ppc.diff11
-rw-r--r--packages/mplayer/files/vo_pxa.c746
-rw-r--r--packages/mplayer/files/vo_pxa.h20
-rw-r--r--packages/mplayer/mplayer-common.bb2
-rw-r--r--packages/mplayer/mplayer_0.0+1.0rc1.bb35
-rw-r--r--packages/mplayer/mplayer_svn.bb40
-rw-r--r--packages/mrxvt/files/fix-compile.patch23
-rw-r--r--packages/mrxvt/mrxvt_0.4.1.bb14
-rw-r--r--packages/mrxvt/mrxvt_0.5.2.bb18
-rw-r--r--packages/mtd/mtd-utils-native_0.0.0+cvs20060223.bb2
-rw-r--r--packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20041113.patch107
-rw-r--r--packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20060131.patch100
-rw-r--r--packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2.patch103
-rw-r--r--packages/mtd/mtd-utils/add_lzo.patch220
-rw-r--r--packages/mtd/mtd-utils/favour_lzo.patch136
-rw-r--r--packages/mtd/mtd-utils/fix-ignoreerrors-20060131.patch20
-rw-r--r--packages/mtd/mtd-utils/fix-ignoreerrors.patch20
-rw-r--r--packages/mtd/mtd-utils/lzo_1x.patch26
-rw-r--r--packages/mtd/mtd-utils_0.0.0+cvs20060223.bb39
-rw-r--r--packages/mtd/mtd-utils_1.0.0+git.bb7
-rw-r--r--packages/musicbrainz/libmusicbrainz_2.1.2.bb15
-rw-r--r--packages/musicbrainz/libmusicbrainz_2.1.4.bb13
-rw-r--r--packages/musicbrainz/libmusicbrainz_3.0.1.bb16
-rw-r--r--packages/musicpd/gmpc_svn.bb2
-rw-r--r--packages/mutt/mutt-1.5.15/.mtn2git_empty0
-rw-r--r--packages/mutt/mutt-1.5.15/makedoc.patch26
-rw-r--r--packages/mutt/mutt-1.5.15/patch-1.5.15.sidebar.20070408.txt1347
-rw-r--r--packages/mutt/mutt_1.5.15.bb27
-rw-r--r--packages/mysql/mysql-native_4.1.18.bb3
-rw-r--r--packages/nabi/.mtn2git_empty0
-rw-r--r--packages/nabi/nabi_0.17.bb9
-rw-r--r--packages/nano/nano-2.0.6/.mtn2git_empty0
-rw-r--r--packages/nano/nano-2.0.6/glib.m4 (renamed from packages/nano/nano-1.3.9/glib.m4)0
-rw-r--r--packages/nano/nano_1.3.9.bb16
-rw-r--r--packages/nano/nano_2.0.6.bb16
-rw-r--r--packages/neon/files/gnutls-force-and-detect.patch23
-rw-r--r--packages/neon/neon_0.25.5.bb11
-rw-r--r--packages/net-snmp/net-snmp_5.1.2.bb4
-rw-r--r--packages/netatalk/.mtn2git_empty0
-rw-r--r--packages/netatalk/files/.mtn2git_empty0
-rwxr-xr-xpackages/netatalk/files/init111
-rw-r--r--packages/netatalk/netatalk-2.0.3/.mtn2git_empty0
-rw-r--r--packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch32
-rw-r--r--packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch28
-rw-r--r--packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch14
-rw-r--r--packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch22
-rw-r--r--packages/netatalk/netatalk_2.0.3.bb39
-rw-r--r--packages/netbase/netbase/foonas/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/foonas/interfaces13
-rw-r--r--packages/netbase/netbase/if-down.d/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/if-post-down.d/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/if-pre-up.d/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/if-up.d/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/interfaces34
-rw-r--r--packages/netbase/netbase/oplinux-uclibc/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/oplinux-uclibc/interfaces10
-rw-r--r--packages/netbase/netbase/oplinux-uclibc/options3
-rw-r--r--packages/netbase/netbase/oplinux/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/oplinux/interfaces10
-rw-r--r--packages/netbase/netbase/oplinux/options3
-rw-r--r--packages/netbase/netbase/slugos/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/slugos/if-pre-up.d/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/slugos/if-pre-up.d/udhcpc-fix12
-rw-r--r--packages/netbase/netbase_4.21.bb17
-rw-r--r--packages/netpbm/netpbm_10.28.bb19
-rw-r--r--packages/networkmanager/network-manager-applet_0.6.5.bb14
-rw-r--r--packages/networkmanager/networkmanager.inc66
-rw-r--r--packages/networkmanager/networkmanager_0.6.5.bb10
-rw-r--r--packages/networkmanager/networkmanager_svn.bb14
-rw-r--r--packages/nfs-utils/files/nfsserver2
-rw-r--r--packages/nfs-utils/nfs-utils_1.0.6.bb2
-rw-r--r--packages/nonworking/angstrom/.mtn2git_empty0
-rw-r--r--packages/nonworking/angstrom/angstrom-e-image.bb36
-rw-r--r--packages/nonworking/clucene/.mtn2git_empty0
-rw-r--r--packages/nonworking/clucene/clucene-0.8.12-pre/.mtn2git_empty0
-rw-r--r--packages/nonworking/clucene/clucene-0.8.12-pre/compile-fix.patch (renamed from packages/clucene/clucene-0.8.12-pre/compile-fix.patch)0
-rw-r--r--packages/nonworking/clucene/clucene_0.8.12-pre.bb (renamed from packages/clucene/clucene_0.8.12-pre.bb)0
-rw-r--r--packages/nonworking/efl/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/e/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/e/fix-configure.patch (renamed from packages/efl/e/fix-configure.patch)0
-rw-r--r--packages/nonworking/efl/ecore-fb_0.9.9.038.bb (renamed from packages/efl/ecore-fb_0.9.9.037.bb)0
-rw-r--r--packages/nonworking/efl/ecore-native_0.9.9.038.bb (renamed from packages/efl/ecore-native_0.9.9.037.bb)0
-rw-r--r--packages/nonworking/efl/ecore-x11_0.9.9.038.bb (renamed from packages/efl/ecore-x11_0.9.9.037.bb)0
-rw-r--r--packages/nonworking/efl/ecore.inc46
-rw-r--r--packages/nonworking/efl/ecore/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/ecore/add-tslib-support.patch104
-rw-r--r--packages/nonworking/efl/ecore/configure-abstract-sockets.patch16
-rw-r--r--packages/nonworking/efl/ecore/configure.patch21
-rw-r--r--packages/nonworking/efl/ecore/ecore_kernel_input_header.patch23
-rw-r--r--packages/nonworking/efl/ecore/fix-tslib-configure.patch (renamed from packages/efl/ecore/fix-tslib-configure.patch)0
-rw-r--r--packages/nonworking/efl/ecore/remove-bad-code.patch36
-rw-r--r--packages/nonworking/efl/ecore/remove-tslib-configure.patch (renamed from packages/efl/ecore/remove-tslib-configure.patch)0
-rw-r--r--packages/nonworking/efl/edb-native/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/edb-native/no-gtk-forkbomb.patch (renamed from packages/efl/edb-native/no-gtk-forkbomb.patch)0
-rw-r--r--packages/nonworking/efl/edb-native_1.0.5.007.bb (renamed from packages/efl/edb-native_1.0.5.007.bb)0
-rw-r--r--packages/nonworking/efl/edb-utils_1.0.5.007.bb (renamed from packages/efl/edb-utils_1.0.5.007.bb)0
-rw-r--r--packages/nonworking/efl/edb_1.0.5.007.bb (renamed from packages/efl/edb_1.0.5.007.bb)0
-rw-r--r--packages/nonworking/efl/edje-native_0.5.0.038.bb20
-rw-r--r--packages/nonworking/efl/edje-utils_0.5.0.038.bb (renamed from packages/efl/edje-utils_0.5.0.037.bb)0
-rw-r--r--packages/nonworking/efl/edje_0.5.0.038.bb (renamed from packages/efl/edje_0.5.0.037.bb)0
-rw-r--r--packages/nonworking/efl/eet-native_0.9.10.038.bb (renamed from packages/efl/eet-native_0.9.10.037.bb)0
-rw-r--r--packages/nonworking/efl/eet_0.9.10.038.bb (renamed from packages/efl/eet_0.9.10.037.bb)0
-rw-r--r--packages/nonworking/efl/efl.bbclass52
-rw-r--r--packages/nonworking/efl/efreet-native_0.0.3.002.bb3
-rw-r--r--packages/nonworking/efl/efreet_0.0.3.002.bb8
-rw-r--r--packages/nonworking/efl/embryo-native_0.9.1.038.bb (renamed from packages/efl/embryo-native_0.9.1.037.bb)0
-rw-r--r--packages/nonworking/efl/embryo-utils_0.9.1.038.bb (renamed from packages/efl/embryo-utils_0.9.1.037.bb)0
-rw-r--r--packages/nonworking/efl/embryo_0.9.1.038.bb (renamed from packages/efl/embryo_0.9.1.037.bb)0
-rw-r--r--packages/nonworking/efl/emotion_20061116.bb (renamed from packages/efl/emotion_20061116.bb)0
-rw-r--r--packages/nonworking/efl/engrave_20060128.bb (renamed from packages/efl/engrave_20060128.bb)0
-rw-r--r--packages/nonworking/efl/epdf_20060418.bb (renamed from packages/efl/epdf_20060418.bb)0
-rw-r--r--packages/nonworking/efl/epeg_0.9.0.008.bb (renamed from packages/efl/epeg_0.9.0.007.bb)0
-rw-r--r--packages/nonworking/efl/epsilon/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/epsilon/compile-fix.patch15
-rw-r--r--packages/nonworking/efl/epsilon/server-is-not-client.patch11
-rw-r--r--packages/nonworking/efl/epsilon_0.3.0.008.bb17
-rw-r--r--packages/nonworking/efl/esmart-fb_0.9.0.008.bb (renamed from packages/efl/esmart-fb_0.9.0.007.bb)0
-rw-r--r--packages/nonworking/efl/esmart-x11_0.9.0.008.bb (renamed from packages/efl/esmart-x11_0.9.0.007.bb)0
-rw-r--r--packages/nonworking/efl/esmart.inc (renamed from packages/efl/esmart.inc)0
-rw-r--r--packages/nonworking/efl/esmart/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/esmart/compile-fix.patch (renamed from packages/efl/esmart/compile-fix.patch)0
-rw-r--r--packages/nonworking/efl/esmart/disable-x-only-features.patch (renamed from packages/efl/esmart/disable-x-only-features.patch)0
-rw-r--r--packages/nonworking/efl/esmart/ecore-fix.patch (renamed from packages/efl/esmart/ecore-fix.patch)0
-rw-r--r--packages/nonworking/efl/esmart/include-stdio.patch (renamed from packages/efl/esmart/include-stdio.patch)0
-rw-r--r--packages/nonworking/efl/etk_0.1.0.003.bb17
-rw-r--r--packages/nonworking/efl/evas-fb_0.9.9.038.bb47
-rw-r--r--packages/nonworking/efl/evas-native_0.9.9.038.bb (renamed from packages/efl/evas-native_0.9.9.037.bb)0
-rw-r--r--packages/nonworking/efl/evas-x11_0.9.9.038.bb55
-rw-r--r--packages/nonworking/efl/evas.inc50
-rw-r--r--packages/nonworking/efl/evas/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/evas/fix-configure.patch36
-rw-r--r--packages/nonworking/efl/evas/pagesize.patch13
-rw-r--r--packages/nonworking/efl/ewl/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/ewl/ewl-configure.patch (renamed from packages/efl/ewl/ewl-configure.patch)0
-rw-r--r--packages/nonworking/efl/ewl/minmax.patch (renamed from packages/efl/ewl/minmax.patch)0
-rw-r--r--packages/nonworking/efl/ewl/no-examples.patch (renamed from packages/efl/ewl/no-examples.patch)0
-rw-r--r--packages/nonworking/efl/ewl_0.5.1.008.bb (renamed from packages/efl/ewl_0.0.4.007.bb)0
-rw-r--r--packages/nonworking/efl/files/.mtn2git_empty0
-rw-r--r--packages/nonworking/efl/files/pkg.m4 (renamed from packages/efl/files/pkg.m4)0
-rw-r--r--packages/nonworking/efl/imlib2-fb_1.3.0.001.bb6
-rw-r--r--packages/nonworking/efl/imlib2-native_1.3.0.001.bb8
-rw-r--r--packages/nonworking/efl/imlib2-x11_1.3.0.001.bb8
-rw-r--r--packages/nonworking/efl/imlib2.inc58
-rw-r--r--packages/nonworking/exult/exult_1.2.bb8
-rw-r--r--packages/nonworking/libmikey/.mtn2git_empty0
-rw-r--r--packages/nonworking/libmikey/libmikey0_0.3.2.bb (renamed from packages/libmikey/libmikey0_0.3.2.bb)0
-rw-r--r--packages/nonworking/libmikey/libmikey_0.1a.bb (renamed from packages/libmikey/libmikey_0.1a.bb)0
-rw-r--r--packages/nonworking/libmnetutil/.mtn2git_empty0
-rw-r--r--packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb (renamed from packages/libmnetutil/libmnetutil0_0.2.2.bb)0
-rw-r--r--packages/nonworking/libmsip/.mtn2git_empty0
-rw-r--r--packages/nonworking/libmsip/libmsip0_0.2.2.bb (renamed from packages/libmsip/libmsip0_0.2.2.bb)0
-rw-r--r--packages/nonworking/minisip/minisip_0.6.2.bb (renamed from packages/minisip/minisip_0.6.2.bb)0
-rw-r--r--packages/nonworking/minisip/minisip_1.0a.bb13
-rw-r--r--packages/nonworking/nylon/.mtn2git_empty0
-rw-r--r--packages/nonworking/nylon/simple-firewall.bb16
-rw-r--r--packages/nonworking/redboot-utils/.mtn2git_empty0
-rwxr-xr-xpackages/nslu2-binary-only/unslung-rootfs/mkfs.ext313
-rwxr-xr-xpackages/nslu2-binary-only/unslung-rootfs/unsling4
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb7
-rw-r--r--packages/ntp/ntp-4.2.2p3/tickadj.c.patch32
-rw-r--r--packages/ntp/ntp-ssl_4.1.2.bb2
-rw-r--r--packages/ntp/ntp.inc32
-rw-r--r--packages/ntp/ntp_4.1.2.bb19
-rw-r--r--packages/ntp/ntp_4.2.0.bb26
-rw-r--r--packages/ntp/ntp_4.2.2p3.bb27
-rw-r--r--packages/ntpclient/ntpclient_2003_194.bb2
-rw-r--r--packages/nunome/files/timer.patch21
-rw-r--r--packages/nunome/nunome_1.0.1.bb41
-rw-r--r--packages/nunome/nunome_1.0.2.bb44
-rw-r--r--packages/nylon/simple-firewall.bb18
-rw-r--r--packages/obexftp/files/iconv.patch24
-rw-r--r--packages/obexftp/obexftp_0.20.bb7
-rw-r--r--packages/ohand-tasks/tasks_0.2.bb12
-rw-r--r--packages/openmoko-apps/files/.mtn2git_empty0
-rw-r--r--packages/openmoko-apps/files/unbreak-messages.patch29
-rw-r--r--packages/openmoko-apps/omext_0.2.bb12
-rw-r--r--packages/openmoko-apps/openmoko-calculator_svn.bb9
-rw-r--r--packages/openmoko-apps/openmoko-mainmenu_svn.bb9
-rw-r--r--packages/openmoko-apps/openmoko-messages_svn.bb6
-rw-r--r--packages/openmoko-apps/openmoko-terminal/.mtn2git_empty0
-rw-r--r--packages/openmoko-apps/openmoko-terminal/gtkterm2rc85
-rw-r--r--packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop12
-rw-r--r--packages/openmoko-apps/openmoko-terminal/openmoko-terminal.pngbin0 -> 11078 bytes
-rw-r--r--packages/openmoko-apps/openmoko-terminal_svn.bb34
-rw-r--r--packages/openmoko-base/files/session18
-rw-r--r--packages/openmoko-base/openmoko-common_svn.bb2
-rw-r--r--packages/openmoko-base/openmoko-icon-theme-standard_svn.bb19
-rw-r--r--packages/openmoko-base/openmoko-libs_svn.bb35
-rw-r--r--packages/openmoko-base/openmoko-session/.mtn2git_empty0
-rw-r--r--packages/openmoko-base/openmoko-session/session24
-rw-r--r--packages/openmoko-base/openmoko-session_svn.bb13
-rw-r--r--packages/openmoko-base/openmoko-sound-system/.mtn2git_empty0
-rwxr-xr-xpackages/openmoko-base/openmoko-sound-system/pulseaudio46
-rw-r--r--packages/openmoko-base/openmoko-sound-system/session26
-rw-r--r--packages/openmoko-base/openmoko-sound-system_0.1.0.bb31
-rw-r--r--packages/openmoko-base/openmoko-sound-theme-standard_svn.bb23
-rw-r--r--packages/openmoko-base/openmoko-theme-standard-qvga_svn.bb25
-rw-r--r--packages/openmoko-base/openmoko-theme-standard_svn.bb7
-rw-r--r--packages/openmoko-inputmethods/.mtn2git_empty0
-rw-r--r--packages/openmoko-inputmethods/openmoko-keyboard_svn.bb20
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-battery_svn.bb3
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-bt_svn.bb6
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-clock_svn.bb2
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-gps_svn.bb6
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb12
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb6
-rw-r--r--packages/openmoko-panel-plugins/openmoko-panel-usb_svn.bb5
-rw-r--r--packages/openmoko-pim/files/.mtn2git_empty0
-rw-r--r--packages/openmoko-pim/files/index.theme (renamed from packages/openmoko-pim/openmoko-contacts/index.theme)0
-rw-r--r--packages/openmoko-pim/files/intltool-update.in (renamed from packages/openmoko-pim/openmoko-contacts/intltool-update.in)0
-rw-r--r--packages/openmoko-pim/files/openmoko-dates.desktop12
-rw-r--r--packages/openmoko-pim/files/openmoko-dates.pngbin0 -> 12121 bytes
-rw-r--r--packages/openmoko-pim/files/stock_contact.png (renamed from packages/contacts/files/stock_contact.png)bin2311 -> 2311 bytes
-rw-r--r--packages/openmoko-pim/files/stock_person.png (renamed from packages/contacts/files/stock_person.png)bin2280 -> 2280 bytes
-rw-r--r--packages/openmoko-pim/openmoko-contacts_svn.bb4
-rw-r--r--packages/openmoko-pim/openmoko-dates/compile-fix.patch12
-rw-r--r--packages/openmoko-pim/openmoko-dates/intltool-update.in1089
-rw-r--r--packages/openmoko-pim/openmoko-dates/remove-bogus-include.patch10
-rw-r--r--packages/openmoko-pim/openmoko-dates_svn.bb15
-rw-r--r--packages/openmoko-pim/openmoko-tasks_svn.bb15
-rw-r--r--packages/openmoko-pim/openmoko-today_svn.bb2
-rw-r--r--packages/openmoko2/.mtn2git_empty0
-rw-r--r--packages/openmoko2/libmokogsmd2_svn.bb11
-rw-r--r--packages/openmoko2/libmokojournal2_svn.bb10
-rw-r--r--packages/openmoko2/libmokopanelui2_svn.bb11
-rw-r--r--packages/openmoko2/libmokoui2_svn.bb14
-rw-r--r--packages/openmoko2/neod_svn.bb7
-rw-r--r--packages/openmoko2/openmoko-calculator2_svn.bb7
-rw-r--r--packages/openmoko2/openmoko-contacts2_svn.bb12
-rw-r--r--packages/openmoko2/openmoko-dialer2_svn.bb12
-rw-r--r--packages/openmoko2/openmoko-feedreader2_svn.bb7
-rw-r--r--packages/openmoko2/openmoko-icon-theme-standard2_svn.bb18
-rw-r--r--packages/openmoko2/openmoko-session2.bb28
-rw-r--r--packages/openmoko2/openmoko-session2/.mtn2git_empty0
-rw-r--r--packages/openmoko2/openmoko-session2/etc/.mtn2git_empty0
-rw-r--r--packages/openmoko2/openmoko-session2/etc/matchbox/.mtn2git_empty0
-rwxr-xr-xpackages/openmoko2/openmoko-session2/etc/matchbox/session11
-rw-r--r--packages/openmoko2/openmoko-terminal2/.mtn2git_empty0
-rw-r--r--packages/openmoko2/openmoko-terminal2/openmoko-terminal.desktop12
-rw-r--r--packages/openmoko2/openmoko-terminal2/openmoko-terminal.pngbin0 -> 11078 bytes
-rw-r--r--packages/openmoko2/openmoko-terminal2_1.0.0.bb42
-rw-r--r--packages/openmoko2/openmoko-theme-standard2_svn.bb25
-rw-r--r--packages/openmoko2/openmoko-today2_svn.bb8
-rw-r--r--packages/openobex/openobex-1.3/.mtn2git_empty0
-rw-r--r--packages/openobex/openobex-1.3/libusb_crosscompile_check.patch11
-rw-r--r--packages/openobex/openobex_1.2.bb2
-rw-r--r--packages/openobex/openobex_1.3.bb33
-rw-r--r--packages/openocd/files/.mtn2git_empty0
-rw-r--r--packages/openocd/files/openocd-link-static.patch20
-rw-r--r--packages/openocd/openocd-native_svn.bb8
-rw-r--r--packages/openocd/openocd_svn.bb10
-rw-r--r--packages/openpbx/.mtn2git_empty0
-rw-r--r--packages/openpbx/files/.mtn2git_empty0
-rw-r--r--packages/openpbx/files/init75
-rw-r--r--packages/openpbx/files/logrotate13
-rw-r--r--packages/openpbx/files/volatiles6
-rw-r--r--packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty0
-rw-r--r--packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch37
-rw-r--r--packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch46
-rw-r--r--packages/openpbx/openpbx.org-perl.bb24
-rw-r--r--packages/openpbx/openpbx.org_1.2_rc3.bb139
-rw-r--r--packages/opensp/opensp-1.5/fix-docdir.patch11
-rw-r--r--packages/opensp/opensp-1.5/rangmap-fix.patch12
-rw-r--r--packages/opensp/opensp-native_1.5.bb4
-rw-r--r--packages/opensp/opensp_1.5.bb27
-rw-r--r--packages/openssl/openssl-0.9.7g/gnueabi-armeb.patch10
-rw-r--r--packages/openssl/openssl-native_0.9.7g.bb2
-rw-r--r--packages/openssl/openssl.inc6
-rw-r--r--packages/openssl/openssl_0.9.7e.bb2
-rw-r--r--packages/openssl/openssl_0.9.7g.bb5
-rw-r--r--packages/opensync/libopensync-plugin-evo2-sync_0.22.bb6
-rw-r--r--packages/opensync/libopensync-plugin-evo2-sync_svn.bb8
-rw-r--r--packages/opensync/libopensync-plugin-file-sync_0.22.bb2
-rw-r--r--packages/opensync/libopensync-plugin-file-sync_svn.bb5
-rw-r--r--packages/opensync/libopensync-plugin-irmc-sync_0.22.bb4
-rw-r--r--packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/.mtn2git_empty0
-rw-r--r--packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/missing-syncml-config.patch8
-rw-r--r--packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/syncml-client-plugin-cpp.patch11
-rw-r--r--packages/opensync/libopensync-plugin-syncml-client-plugin_0.1.bb13
-rw-r--r--packages/opensync/libopensync-plugin-syncml-plugin.bb16
-rw-r--r--packages/opensync/libopensync-plugin-syncml_0.22.bb13
-rw-r--r--packages/opensync/libopensync-plugin.inc24
-rw-r--r--packages/opensync/libopensync-plugin_0.22.inc12
-rw-r--r--packages/opensync/libopensync_0.22.bb21
-rw-r--r--packages/opensync/libopensync_svn.bb20
-rw-r--r--packages/opensync/libsyncml_svn.bb35
-rw-r--r--packages/opensync/msynctool_0.22.bb9
-rw-r--r--packages/opensync/msynctool_svn.bb10
-rw-r--r--packages/opensync/opensync-unpack.inc5
-rw-r--r--packages/opensync/syncml-client-0.1/.mtn2git_empty0
-rw-r--r--packages/opensync/syncml-client-0.1/syncml-client-pc-in-cross.patch10
-rw-r--r--packages/opensync/syncml-client-0.1/syncml-client-plugin-h.patch11
-rw-r--r--packages/opensync/syncml-client_0.1.bb12
-rw-r--r--packages/openzaurus/openzaurus-version.bb7
-rw-r--r--packages/opie-aboutapplet/opie-aboutapplet_1.2.3.bb4
-rw-r--r--packages/opie-addressbook/opie-addressbook_1.2.3.bb5
-rw-r--r--packages/opie-advancedfm/opie-advancedfm_1.2.3.bb6
-rw-r--r--packages/opie-alarm/opie-alarm.inc6
-rwxr-xr-xpackages/opie-alarm/opie-alarm/01opiealarm4
-rw-r--r--packages/opie-alarm/opie-alarm/dirdefines.patch21
-rw-r--r--packages/opie-alarm/opie-alarm_1.2.3.bb7
-rw-r--r--packages/opie-alarm/opie-alarm_cvs.bb4
-rw-r--r--packages/opie-appearance/opie-appearance_1.2.3.bb6
-rw-r--r--packages/opie-aqpkg/opie-aqpkg_1.2.3.bb6
-rw-r--r--packages/opie-autorotateapplet/opie-autorotateapplet.inc4
-rw-r--r--packages/opie-autorotateapplet/opie-autorotateapplet_1.2.3.bb6
-rw-r--r--packages/opie-autorotateapplet/opie-autorotateapplet_cvs.bb1
-rw-r--r--packages/opie-backgammon/opie-backgammon_1.2.3.bb6
-rw-r--r--packages/opie-backup/opie-backup_1.2.3.bb6
-rw-r--r--packages/opie-bartender/opie-bartender.inc2
-rw-r--r--packages/opie-bartender/opie-bartender_1.2.3.bb6
-rw-r--r--packages/opie-batteryapplet/opie-batteryapplet.inc4
-rw-r--r--packages/opie-batteryapplet/opie-batteryapplet_1.2.3.bb7
-rw-r--r--packages/opie-batteryapplet/opie-batteryapplet_cvs.bb1
-rw-r--r--packages/opie-bluepin/opie-bluepin_1.2.3.bb4
-rw-r--r--packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.3.bb8
-rw-r--r--packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.3.bb5
-rw-r--r--packages/opie-bounce/opie-bounce_1.2.3.bb6
-rw-r--r--packages/opie-brightnessapplet/opie-brightnessapplet.inc4
-rw-r--r--packages/opie-brightnessapplet/opie-brightnessapplet_1.2.3.bb6
-rw-r--r--packages/opie-brightnessapplet/opie-brightnessapplet_cvs.bb1
-rw-r--r--packages/opie-button-settings/opie-button-settings_1.2.3.bb6
-rw-r--r--packages/opie-buzzword/opie-buzzword_1.2.3.bb7
-rw-r--r--packages/opie-calculator/opie-calculator_1.2.3.bb7
-rw-r--r--packages/opie-camera/opie-camera_1.2.3.bb6
-rw-r--r--packages/opie-cardmon/opie-cardmon_1.2.3.bb7
-rw-r--r--packages/opie-checkbook/opie-checkbook_1.2.3.bb6
-rw-r--r--packages/opie-citytime/opie-citytime_1.2.3.bb6
-rw-r--r--packages/opie-clipboardapplet/opie-clipboardapplet.inc4
-rw-r--r--packages/opie-clipboardapplet/opie-clipboardapplet_1.2.3.bb7
-rw-r--r--packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb1
-rw-r--r--packages/opie-clock/opie-clock_1.2.3.bb6
-rw-r--r--packages/opie-clockapplet/opie-clockapplet.inc4
-rw-r--r--packages/opie-clockapplet/opie-clockapplet_1.2.3.bb7
-rw-r--r--packages/opie-clockapplet/opie-clockapplet_cvs.bb1
-rw-r--r--packages/opie-confeditor/opie-confeditor_1.2.3.bb6
-rw-r--r--packages/opie-console/opie-console.inc1
-rw-r--r--packages/opie-console/opie-console_1.2.3.bb7
-rw-r--r--packages/opie-console/opie-console_cvs.bb1
-rw-r--r--packages/opie-dagger/files/.mtn2git_empty0
-rw-r--r--packages/opie-dagger/files/opie-dagger-missing-include.patch11
-rw-r--r--packages/opie-dagger/opie-dagger_1.2.3.bb9
-rw-r--r--packages/opie-dagger/opie-dagger_cvs.bb3
-rw-r--r--packages/opie-dasher/opie-dasher.inc2
-rw-r--r--packages/opie-dasher/opie-dasher_1.2.2.bb2
-rw-r--r--packages/opie-dasher/opie-dasher_1.2.3.bb6
-rw-r--r--packages/opie-dasher/opie-dasher_cvs.bb1
-rw-r--r--packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.3.bb4
-rw-r--r--packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.3.bb4
-rw-r--r--packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.3.bb5
-rw-r--r--packages/opie-datebook/opie-datebook_1.2.3.bb5
-rw-r--r--packages/opie-deco-flat/opie-deco-flat_1.2.3.bb4
-rw-r--r--packages/opie-deco-liquid/opie-deco-liquid_1.2.3.bb4
-rw-r--r--packages/opie-deco-polished/opie-deco-polished_1.2.3.bb4
-rw-r--r--packages/opie-doctab/opie-doctab_1.2.3.bb6
-rw-r--r--packages/opie-drawpad/opie-drawpad_1.2.3.bb6
-rw-r--r--packages/opie-dvorak/files/.mtn2git_empty0
-rw-r--r--packages/opie-dvorak/files/fix-rpath.patch13
-rw-r--r--packages/opie-dvorak/opie-dvorak.inc4
-rw-r--r--packages/opie-dvorak/opie-dvorak_1.2.3.bb7
-rw-r--r--packages/opie-dvorak/opie-dvorak_cvs.bb4
-rw-r--r--packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.3.bb6
-rw-r--r--packages/opie-euroconv/opie-euroconv_1.2.3.bb6
-rw-r--r--packages/opie-examples-python/opie-examples-python_1.2.3.bb6
-rw-r--r--packages/opie-examples/opie-examples_1.2.3.bb6
-rw-r--r--packages/opie-eye/opie-eye.inc4
-rw-r--r--packages/opie-eye/opie-eye_1.2.3.bb7
-rw-r--r--packages/opie-eye/opie-eye_cvs.bb1
-rw-r--r--packages/opie-fifteen/opie-fifteen_1.2.3.bb6
-rw-r--r--packages/opie-formatter/opie-formatter_1.2.3.bb6
-rw-r--r--packages/opie-freetype/opie-freetype_1.2.3.bb5
-rw-r--r--packages/opie-ftp/opie-ftp_1.2.3.bb6
-rw-r--r--packages/opie-ftplib/opie-ftplib_1.2.3.bb4
-rw-r--r--packages/opie-go/opie-go_1.2.3.bb6
-rw-r--r--packages/opie-gutenbrowser/opie-gutenbrowser_1.2.3.bb7
-rw-r--r--packages/opie-handwriting/opie-handwriting.inc5
-rw-r--r--packages/opie-handwriting/opie-handwriting_1.2.3.bb6
-rw-r--r--packages/opie-handwriting/opie-handwriting_cvs.bb1
-rw-r--r--packages/opie-help-en/opie-help-en_1.2.3.bb4
-rw-r--r--packages/opie-helpbrowser/opie-helpbrowser_1.2.3.bb6
-rw-r--r--packages/opie-homeapplet/opie-homeapplet_1.2.3.bb6
-rw-r--r--packages/opie-i18n/opie-i18n_1.2.3.bb (renamed from packages/opie-i18n/opie-i18n_1.2.2.bb)0
-rw-r--r--packages/opie-i18n/opie-lrelease-native_1.2.3.bb (renamed from packages/opie-i18n/opie-lrelease-native_1.2.2.bb)0
-rw-r--r--packages/opie-i18n/opie-lupdate-native_1.2.3.bb (renamed from packages/opie-i18n/opie-lupdate-native_1.2.2.bb)0
-rw-r--r--packages/opie-icon-reload/opie-icon-reload.inc7
-rwxr-xr-xpackages/opie-icon-reload/opie-icon-reload/icon-reload.sh4
-rw-r--r--packages/opie-icon-reload/opie-icon-reload_1.2.2.bb3
-rw-r--r--packages/opie-icon-reload/opie-icon-reload_1.2.3.bb2
-rw-r--r--packages/opie-init/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init.inc46
-rw-r--r--packages/opie-init/opie-init/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/akita/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/akita/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/akita/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/c7x0/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/c7x0/qpe-suspend-resume (renamed from packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume)0
-rw-r--r--packages/opie-init/opie-init/c7x0/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/c7x0/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/htcuniversal/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/htcuniversal/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/htcuniversal/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/locale.conf0
-rw-r--r--packages/opie-init/opie-init/mnci/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/mnci/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/mnci/qpe.conf)0
-rwxr-xr-xpackages/opie-init/opie-init/opie102
-rwxr-xr-xpackages/opie-init/opie-init/opie-reorgfiles (renamed from packages/opie-taskbar/opie-taskbar/opie-reorgfiles)0
-rw-r--r--packages/opie-init/opie-init/opie_defaults15
-rw-r--r--packages/opie-init/opie-init/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/simpad/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/simpad/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/simpad/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/spitz/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/spitz/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/spitz/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init/tosa/.mtn2git_empty0
-rw-r--r--packages/opie-init/opie-init/tosa/qpe.conf (renamed from packages/opie-taskbar/opie-taskbar/tosa/qpe.conf)0
-rw-r--r--packages/opie-init/opie-init_1.2.2.bb10
-rw-r--r--packages/opie-irc/files/.mtn2git_empty0
-rw-r--r--packages/opie-irc/files/utf8-topic.patch18
-rw-r--r--packages/opie-irc/files/utf8.patch23
-rw-r--r--packages/opie-irc/opie-irc_1.2.3.bb10
-rw-r--r--packages/opie-irc/opie-irc_cvs.bb5
-rw-r--r--packages/opie-irdaapplet/files/.mtn2git_empty0
-rw-r--r--packages/opie-irdaapplet/files/learning-cpp.patch13
-rw-r--r--packages/opie-irdaapplet/opie-irdaapplet.inc4
-rw-r--r--packages/opie-irdaapplet/opie-irdaapplet_1.2.3.bb9
-rw-r--r--packages/opie-irdaapplet/opie-irdaapplet_cvs.bb4
-rw-r--r--packages/opie-jumpx/opie-jumpx_1.2.3.bb5
-rw-r--r--packages/opie-kbill/opie-kbill_1.2.3.bb6
-rw-r--r--packages/opie-kcheckers/opie-kcheckers_1.2.3.bb6
-rw-r--r--packages/opie-keyboard/files/.mtn2git_empty0
-rw-r--r--packages/opie-keyboard/files/fix-rpath.patch13
-rw-r--r--packages/opie-keyboard/opie-keyboard.inc4
-rw-r--r--packages/opie-keyboard/opie-keyboard_1.2.3.bb6
-rw-r--r--packages/opie-keyboard/opie-keyboard_cvs.bb4
-rw-r--r--packages/opie-keypebble/opie-keypebble_1.2.3.bb6
-rw-r--r--packages/opie-keytabs/opie-keytabs_1.2.3.bb5
-rw-r--r--packages/opie-keyview/opie-keyview.inc4
-rw-r--r--packages/opie-keyview/opie-keyview_1.2.3.bb5
-rw-r--r--packages/opie-keyview/opie-keyview_cvs.bb1
-rw-r--r--packages/opie-kjumpx/opie-kjumpx_1.2.3.bb5
-rw-r--r--packages/opie-kpacman/opie-kpacman_1.2.3.bb7
-rw-r--r--packages/opie-language/opie-language_1.2.3.bb5
-rw-r--r--packages/opie-launcher-settings/opie-launcher-settings_1.2.3.bb6
-rw-r--r--packages/opie-libqrsync/opie-libqrsync_1.2.3.bb4
-rw-r--r--packages/opie-light-and-power/opie-light-and-power_1.2.3.bb6
-rw-r--r--packages/opie-lockapplet/opie-lockapplet.inc4
-rw-r--r--packages/opie-lockapplet/opie-lockapplet_1.2.3.bb6
-rw-r--r--packages/opie-lockapplet/opie-lockapplet_cvs.bb1
-rw-r--r--packages/opie-login/opie-login_1.2.3.bb10
-rw-r--r--packages/opie-logoutapplet/opie-logoutapplet_1.2.3.bb5
-rw-r--r--packages/opie-mail/opie-mail_1.2.3.bb6
-rw-r--r--packages/opie-mailapplet/opie-mailapplet_1.2.3.bb7
-rw-r--r--packages/opie-mailapplet/opie-mailapplet_cvs.bb1
-rw-r--r--packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin.inc4
-rw-r--r--packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb2
-rw-r--r--packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_cvs.bb1
-rw-r--r--packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin.inc4
-rw-r--r--packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb2
-rw-r--r--packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_cvs.bb1
-rw-r--r--packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin.inc4
-rw-r--r--packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb2
-rw-r--r--packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_cvs.bb1
-rw-r--r--packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin.inc4
-rw-r--r--packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb2
-rw-r--r--packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_cvs.bb1
-rw-r--r--packages/opie-mediummount/opie-mediummount_1.2.3.bb6
-rw-r--r--packages/opie-memoryapplet/opie-memoryapplet.inc4
-rw-r--r--packages/opie-memoryapplet/opie-memoryapplet_1.2.3.bb7
-rw-r--r--packages/opie-memoryapplet/opie-memoryapplet_cvs.bb1
-rw-r--r--packages/opie-mindbreaker/opie-mindbreaker_1.2.3.bb6
-rw-r--r--packages/opie-minesweep/opie-minesweep_1.2.3.bb6
-rw-r--r--packages/opie-multikey/files/fix-rpath.patch11
-rw-r--r--packages/opie-multikey/files/ru.keymap255
-rw-r--r--packages/opie-multikey/opie-multikey.inc6
-rw-r--r--packages/opie-multikey/opie-multikey_1.2.2.bb2
-rw-r--r--packages/opie-multikey/opie-multikey_1.2.3.bb9
-rw-r--r--packages/opie-multikey/opie-multikey_cvs.bb6
-rw-r--r--packages/opie-multikeyapplet/opie-multikeyapplet.inc4
-rw-r--r--packages/opie-multikeyapplet/opie-multikeyapplet_1.2.3.bb6
-rw-r--r--packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb1
-rw-r--r--packages/opie-networkapplet/opie-networkapplet_1.2.3.bb5
-rw-r--r--packages/opie-networksettings/files/.mtn2git_empty0
-rw-r--r--packages/opie-networksettings/files/wireless.patch13
-rw-r--r--packages/opie-networksettings/opie-networksettings.inc2
-rw-r--r--packages/opie-networksettings/opie-networksettings_1.2.3.bb9
-rw-r--r--packages/opie-networksettings/opie-networksettings_cvs.bb4
-rw-r--r--packages/opie-notesapplet/opie-notesapplet_1.2.3.bb4
-rw-r--r--packages/opie-odict/opie-odict_1.2.3.bb6
-rw-r--r--packages/opie-oxygen/opie-oxygen.inc2
-rw-r--r--packages/opie-oxygen/opie-oxygen_1.2.3.bb7
-rw-r--r--packages/opie-oyatzee/opie-oyatzee_1.2.3.bb6
-rw-r--r--packages/opie-packagemanager/opie-packagemanager_1.2.3.bb6
-rw-r--r--packages/opie-parashoot/opie-parashoot_1.2.3.bb6
-rw-r--r--packages/opie-pcmciaapplet/opie-pcmciaapplet.inc4
-rw-r--r--packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.3.bb6
-rw-r--r--packages/opie-pcmciaapplet/opie-pcmciaapplet_cvs.bb1
-rw-r--r--packages/opie-pickboard/opie-pickboard.inc4
-rw-r--r--packages/opie-pickboard/opie-pickboard_1.2.3.bb5
-rw-r--r--packages/opie-pickboard/opie-pickboard_cvs.bb1
-rw-r--r--packages/opie-pics/opie-pics_1.2.3.bb6
-rw-r--r--packages/opie-pimconverter/opie-pimconverter_1.2.3.bb6
-rw-r--r--packages/opie-powerchord/opie-powerchord_1.2.3.bb7
-rw-r--r--packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.3.bb6
-rw-r--r--packages/opie-qasteroids/opie-qasteroids_1.2.3.bb6
-rw-r--r--packages/opie-qcop/files/.mtn2git_empty0
-rw-r--r--packages/opie-qcop/files/unbreak-logging.patch16
-rw-r--r--packages/opie-qcop/opie-qcop.inc4
-rw-r--r--packages/opie-qcop/opie-qcop_1.2.3.bb6
-rw-r--r--packages/opie-qcop/opie-qcop_cvs.bb4
-rw-r--r--packages/opie-qss/opie-qss.inc4
-rw-r--r--packages/opie-qss/opie-qss_1.2.3.bb5
-rw-r--r--packages/opie-qss/opie-qss_cvs.bb1
-rw-r--r--packages/opie-quicklauncher/opie-quicklauncher.inc5
-rw-r--r--packages/opie-quicklauncher/opie-quicklauncher_1.2.3.bb5
-rw-r--r--packages/opie-quicklauncher/opie-quicklauncher_cvs.bb1
-rw-r--r--packages/opie-rdesktop/opie-rdesktop_1.2.3.bb6
-rw-r--r--packages/opie-reader/files/.mtn2git_empty0
-rw-r--r--packages/opie-reader/files/qt4.patch2572
-rw-r--r--packages/opie-reader/opie-reader_1.2.3.bb8
-rw-r--r--packages/opie-reader/opie-reader_cvs.bb1
-rw-r--r--packages/opie-reader/uqtreader_cvs.bb72
-rw-r--r--packages/opie-recorder/opie-recorder_1.2.3.bb6
-rw-r--r--packages/opie-remote/opie-remote_1.2.3.bb6
-rw-r--r--packages/opie-restartapplet/opie-restartapplet_1.2.3.bb5
-rw-r--r--packages/opie-rotateapplet/opie-rotateapplet_1.2.3.bb5
-rw-r--r--packages/opie-screenshotapplet/opie-screenshotapplet.inc4
-rw-r--r--packages/opie-screenshotapplet/opie-screenshotapplet_1.2.3.bb7
-rw-r--r--packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb1
-rw-r--r--packages/opie-search/opie-search_1.2.3.bb6
-rw-r--r--packages/opie-security/opie-security_1.2.3.bb6
-rw-r--r--packages/opie-securityplugins/opie-securityplugin-pin_1.2.3.bb5
-rw-r--r--packages/opie-sfcave/opie-sfcave_1.2.3.bb6
-rw-r--r--packages/opie-sh-snes/opie-sh-snes.inc1
-rw-r--r--packages/opie-sh-snes/opie-sh-snes_1.2.3.bb3
-rw-r--r--packages/opie-sh-snes/opie-sh-snes_cvs.bb2
-rw-r--r--packages/opie-sh/opie-sh.inc6
-rw-r--r--packages/opie-sh/opie-sh_1.2.3.bb9
-rw-r--r--packages/opie-sheet/opie-sheet_1.2.3.bb6
-rw-r--r--packages/opie-snake/opie-snake_1.2.3.bb6
-rw-r--r--packages/opie-solitaire/opie-solitaire_1.2.3.bb6
-rw-r--r--packages/opie-sounds/opie-sounds_1.2.3.bb5
-rw-r--r--packages/opie-sshkeys/opie-sshkeys_1.2.3.bb6
-rw-r--r--packages/opie-stumbler/opie-stumbler_1.2.3.bb6
-rw-r--r--packages/opie-style-flat/opie-style-flat_1.2.3.bb4
-rw-r--r--packages/opie-style-fresh/opie-style-fresh_1.2.3.bb4
-rw-r--r--packages/opie-style-liquid/opie-style-liquid_1.2.3.bb4
-rw-r--r--packages/opie-style-metal/opie-style-metal_1.2.3.bb4
-rw-r--r--packages/opie-style-phase/opie-style-phase_1.2.3.bb4
-rw-r--r--packages/opie-style-web/opie-style-web_1.2.3.bb4
-rw-r--r--packages/opie-suspendapplet/opie-suspendapplet_1.2.3.bb5
-rw-r--r--packages/opie-symlinker/opie-symlinker_1.2.3.bb4
-rw-r--r--packages/opie-sysinfo/opie-sysinfo_1.2.3.bb7
-rw-r--r--packages/opie-systemtime/opie-systemtime_1.2.3.bb7
-rw-r--r--packages/opie-tableviewer/opie-tableviewer_1.2.3.bb6
-rw-r--r--packages/opie-taskbar/opie-taskbar-images.inc56
-rw-r--r--packages/opie-taskbar/opie-taskbar-images/.mtn2git_empty0
-rw-r--r--packages/opie-taskbar/opie-taskbar-images/firstuse-320x320.jpgbin0 -> 16113 bytes
-rw-r--r--packages/opie-taskbar/opie-taskbar-images/opie-background-320x320.jpgbin0 -> 7807 bytes
-rw-r--r--packages/opie-taskbar/opie-taskbar-images_1.2.3.bb6
-rw-r--r--packages/opie-taskbar/opie-taskbar-images_cvs.bb5
-rw-r--r--packages/opie-taskbar/opie-taskbar.inc68
-rwxr-xr-xpackages/opie-taskbar/opie-taskbar/c7x0/opie85
-rw-r--r--packages/opie-taskbar/opie-taskbar/kbdlocks-runtime.patch35
-rwxr-xr-xpackages/opie-taskbar/opie-taskbar/mnci/opie79
-rw-r--r--packages/opie-taskbar/opie-taskbar/no-builtin-qss-startup.patch11
-rwxr-xr-xpackages/opie-taskbar/opie-taskbar/opie90
-rw-r--r--packages/opie-taskbar/opie-taskbar/opie_defaults12
-rw-r--r--packages/opie-taskbar/opie-taskbar/restart-from-bindir.patch12
-rw-r--r--packages/opie-taskbar/opie-taskbar_1.2.2.bb10
-rw-r--r--packages/opie-taskbar/opie-taskbar_1.2.3.bb16
-rw-r--r--packages/opie-taskbar/opie-taskbar_cvs.bb13
-rw-r--r--packages/opie-tetrix/opie-tetrix_1.2.3.bb6
-rw-r--r--packages/opie-textedit/opie-textedit_1.2.3.bb6
-rw-r--r--packages/opie-theme/opie-theme.inc3
-rw-r--r--packages/opie-theme/opie-theme_1.2.2.bb2
-rw-r--r--packages/opie-theme/opie-theme_1.2.3.bb6
-rw-r--r--packages/opie-theme/opie-theme_cvs.bb1
-rw-r--r--packages/opie-tictac/opie-tictac_1.2.3.bb6
-rw-r--r--packages/opie-tinykate/opie-tinykate.inc7
-rw-r--r--packages/opie-tinykate/opie-tinykate_1.2.2.bb2
-rw-r--r--packages/opie-tinykate/opie-tinykate_1.2.3.bb7
-rw-r--r--packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.3.bb4
-rw-r--r--packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.3.bb4
-rw-r--r--packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.3.bb4
-rw-r--r--packages/opie-today-mailplugin/opie-today-mailplugin_1.2.3.bb4
-rw-r--r--packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.3.bb6
-rw-r--r--packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.3.bb4
-rw-r--r--packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.3.bb5
-rw-r--r--packages/opie-today/opie-today_1.2.3.bb6
-rw-r--r--packages/opie-todo/files/.mtn2git_empty0
-rw-r--r--packages/opie-todo/files/unbreak-logging.patch21
-rw-r--r--packages/opie-todo/opie-todo_1.2.3.bb7
-rw-r--r--packages/opie-todo/opie-todo_cvs.bb4
-rw-r--r--packages/opie-tonleiter/opie-tonleiter_1.2.3.bb6
-rw-r--r--packages/opie-ttf-support/opie-ttf-support_1.1.bb5
-rw-r--r--packages/opie-unikeyboard/opie-unikeyboard.inc4
-rw-r--r--packages/opie-unikeyboard/opie-unikeyboard_1.2.3.bb5
-rw-r--r--packages/opie-unikeyboard/opie-unikeyboard_cvs.bb1
-rw-r--r--packages/opie-usermanager/opie-usermanager_1.2.3.bb6
-rw-r--r--packages/opie-vmemo-settings/opie-vmemo-settings_1.2.3.bb5
-rw-r--r--packages/opie-vmemo/opie-vmemo_1.2.3.bb5
-rw-r--r--packages/opie-volumeapplet/opie-volumeapplet.inc4
-rw-r--r--packages/opie-volumeapplet/opie-volumeapplet_1.2.3.bb6
-rw-r--r--packages/opie-volumeapplet/opie-volumeapplet_cvs.bb1
-rw-r--r--packages/opie-vtapplet/opie-vtapplet_1.2.3.bb5
-rw-r--r--packages/opie-wellenreiter/opie-wellenreiter_1.2.3.bb6
-rw-r--r--packages/opie-wirelessapplet/opie-wirelessapplet_1.2.3.bb4
-rw-r--r--packages/opie-wordgame/opie-wordgame_1.2.3.bb6
-rw-r--r--packages/opie-write/opie-write_1.2.3.bb6
-rw-r--r--packages/opie-zkbapplet/opie-zkbapplet_1.2.3.bb7
-rw-r--r--packages/opie-zlines/opie-zlines_1.2.3.bb6
-rw-r--r--packages/opie-zsafe/opie-zsafe_1.2.3.bb6
-rw-r--r--packages/opie-zsame/opie-zsame_1.2.3.bb6
-rw-r--r--packages/oprofile/oprofile-0.9.1/acinclude.m4600
-rw-r--r--packages/oprofile/oprofile-0.9.1/no_arm_mapping_syms.patch21
-rw-r--r--packages/oprofile/oprofile_0.9.3.bb38
-rw-r--r--packages/oprofile/oprofile_cvs.bb2
-rw-r--r--packages/orinoco/spectrum-fw.bb1
-rw-r--r--packages/ossie/ossie-c-wavloader_svn.bb16
-rw-r--r--packages/ossie/ossie-channeldemo_svn.bb20
-rw-r--r--packages/ossie/ossie-demo_svn.bb20
-rw-r--r--packages/ossie/ossie-gpp-device_svn.bb20
-rw-r--r--packages/ossie/ossie-interpolator_svn.bb20
-rw-r--r--packages/ossie/ossie-modulator_svn.bb20
-rw-r--r--packages/ossie/ossie-nodebooter_svn.bb15
-rw-r--r--packages/ossie/ossie-randombits_svn.bb19
-rw-r--r--packages/ossie/ossie-rxdemo_svn.bb20
-rw-r--r--packages/ossie/ossie-sigproc_svn.bb23
-rw-r--r--packages/ossie/ossie-soundout-device_svn.bb22
-rw-r--r--packages/ossie/ossie-standardinterfaces_svn.bb23
-rw-r--r--packages/ossie/ossie-tx-random-data_svn.bb20
-rw-r--r--packages/ossie/ossie-usrp-device_svn.bb20
-rw-r--r--packages/ossie/ossie-usrp-tx-control_svn.bb20
-rw-r--r--packages/ossie/ossiecf_svn.bb24
-rw-r--r--packages/p3scan/files/configure.in-add-newline.patch14
-rw-r--r--packages/p3scan/p3scan_2.9.05d.bb3
-rw-r--r--packages/pango/pango-1.16.2/.mtn2git_empty0
-rw-r--r--packages/pango/pango-1.16.2/no-tests.patch10
-rw-r--r--packages/pango/pango-1.16.4/.mtn2git_empty0
-rw-r--r--packages/pango/pango-1.16.4/no-tests.patch10
-rw-r--r--packages/pango/pango_1.16.2.bb1
-rw-r--r--packages/pango/pango_1.16.4.bb4
-rw-r--r--packages/parted/files/.mtn2git_empty0
-rw-r--r--packages/parted/files/cross-gross-hack.patch33
-rw-r--r--packages/parted/files/syscalls.h166
-rw-r--r--packages/parted/files/syscalls.patch10
-rw-r--r--packages/parted/parted_1.8.7.bb30
-rw-r--r--packages/patcher/patcher-native_20040913.bb1
-rw-r--r--packages/patcher/patcher_20040913.bb1
-rw-r--r--packages/pciutils/pciutils-2.2.4/configure-uclibc.patch13
-rw-r--r--packages/pcmcia-cs/pcmcia-cs_3.2.8.bb3
-rw-r--r--packages/pcmciautils/pcmciautils-014/makefile_fix.patch73
-rw-r--r--packages/pcmciautils/pcmciautils/.mtn2git_empty0
-rw-r--r--packages/pcmciautils/pcmciautils/modalias_update.patch56
-rw-r--r--packages/pcmciautils/pcmciautils_013.bb5
-rw-r--r--packages/pcmciautils/pcmciautils_014.bb5
-rw-r--r--packages/perl/files/letgcc-find-errno.patch42
-rw-r--r--packages/perl/files/perl-5.8.8-gcc-4.2.patch13
-rw-r--r--packages/perl/libalgorithm-diff-perl_1.1902.bb2
-rw-r--r--packages/perl/libarchive-tar-perl_1.30.bb2
-rw-r--r--packages/perl/libcache-cache-perl_1.05.bb2
-rw-r--r--packages/perl/libclass-container-perl_0.12.bb2
-rw-r--r--packages/perl/libclass-data-inheritable-perl_0.06.bb2
-rw-r--r--packages/perl/libcompress-zlib-perl_1.42.bb8
-rw-r--r--packages/perl/libdata-optlist-perl_0.101.bb2
-rw-r--r--packages/perl/libdevel-stacktrace-perl_1.13.bb2
-rw-r--r--packages/perl/libdigest-sha1-perl_2.11.bb8
-rw-r--r--packages/perl/liberror-perl_0.17004.bb2
-rw-r--r--packages/perl/libexception-class-perl_1.23.bb2
-rw-r--r--packages/perl/libextutils-cbuilder-perl_0.18.bb2
-rw-r--r--packages/perl/libextutils-depends-perl-native_0.205.bb5
-rw-r--r--packages/perl/libextutils-depends-perl_0.205.bb10
-rw-r--r--packages/perl/libextutils-parsexs-perl_2.16.bb2
-rw-r--r--packages/perl/libextutils-pkgconfig-perl-native_1.07.bb5
-rw-r--r--packages/perl/libextutils-pkgconfig-perl_1.07.bb10
-rw-r--r--packages/perl/libhtml-mason-perl_1.35.bb35
-rw-r--r--packages/perl/libintl-perl_1.16.bb1
-rw-r--r--packages/perl/libio-zlib-perl_1.04.bb2
-rw-r--r--packages/perl/libipc-sharelite-perl_0.09.bb8
-rw-r--r--packages/perl/liblocale-gettext-perl_1.05.bb8
-rw-r--r--packages/perl/liblog-dispatch-perl_2.13.bb2
-rw-r--r--packages/perl/liblog-log4perl-perl_1.06.bb2
-rw-r--r--packages/perl/libmail-sendmail-perl_0.79.bb2
-rw-r--r--packages/perl/libmath-bigint-gmp-perl_1.18.bb8
-rw-r--r--packages/perl/libmodule-build-perl_0.2805.bb2
-rw-r--r--packages/perl/libnet-ip-perl_1.25.bb2
-rw-r--r--packages/perl/libnetserver-generic-perl_1.03.bb2
-rw-r--r--packages/perl/libparams-util-perl_0.20.bb2
-rw-r--r--packages/perl/libparams-validate-perl_0.86.bb10
-rw-r--r--packages/perl/libperl6-junction-perl_1.10.bb2
-rw-r--r--packages/perl/libsub-exporter-perl_0.970.bb2
-rw-r--r--packages/perl/libsub-install-perl_0.922.bb2
-rw-r--r--packages/perl/libsub-uplevel-perl_0.13.bb2
-rw-r--r--packages/perl/libtest-builder-tester-perl_1.01.bb2
-rw-r--r--packages/perl/libtest-differences-perl_0.47.bb2
-rw-r--r--packages/perl/libtest-exception-perl_0.22.bb2
-rw-r--r--packages/perl/libtest-mockmodule-perl_0.05.bb2
-rw-r--r--packages/perl/libtest-output-perl_0.10.bb2
-rw-r--r--packages/perl/libtext-diff-perl_0.35.bb2
-rw-r--r--packages/perl/liburi-perl-native_1.35.bb2
-rw-r--r--packages/perl/liburi-perl_1.35.bb11
-rw-r--r--packages/perl/libversion-perl_0.6701.bb10
-rw-r--r--packages/perl/libxml-parser-perl-native_2.34.bb3
-rw-r--r--packages/perl/libxml-parser-perl_2.34.bb11
-rw-r--r--packages/perl/libyaml-perl_0.62.bb2
-rw-r--r--packages/perl/perl-5.8.4/.mtn2git_empty0
-rw-r--r--packages/perl/perl-5.8.4/Makefile.SH.patch (renamed from packages/perl/files/Makefile.SH.patch)0
-rw-r--r--packages/perl/perl-5.8.4/Makefile.patch (renamed from packages/perl/files/Makefile.patch)0
-rw-r--r--packages/perl/perl-5.8.4/config.sh-arm-linux.patch (renamed from packages/perl/files/config.sh-arm-linux.patch)0
-rw-r--r--packages/perl/perl-5.8.4/config.sh-i686-linux (renamed from packages/perl/files/config.sh-i686-linux)0
-rw-r--r--packages/perl/perl-5.8.4/config.sh-mipsel-linux (renamed from packages/perl/files/config.sh-mipsel-linux)0
-rw-r--r--packages/perl/perl-5.8.4/uclibc.patch (renamed from packages/perl/files/uclibc.patch)0
-rw-r--r--packages/perl/perl-5.8.7/config.sh-powerpc-linux66
-rw-r--r--packages/perl/perl-5.8.8/.mtn2git_empty0
-rw-r--r--packages/perl/perl-5.8.8/09_fix_installperl.patch32
-rw-r--r--packages/perl/perl-5.8.8/52_debian_extutils_hacks.patch234
-rw-r--r--packages/perl/perl-5.8.8/53_debian_mod_paths.patch107
-rw-r--r--packages/perl/perl-5.8.8/54_debian_perldoc-r.patch16
-rw-r--r--packages/perl/perl-5.8.8/58_debian_cpan_config_path.patch14
-rw-r--r--packages/perl/perl-5.8.8/60_debian_libnet_config_path.patch16
-rw-r--r--packages/perl/perl-5.8.8/62_debian_cpan_definstalldirs.patch16
-rw-r--r--packages/perl/perl-5.8.8/64_debian_enc2xs_inc.patch28
-rw-r--r--packages/perl/perl-5.8.8/Makefile.SH.patch253
-rw-r--r--packages/perl/perl-5.8.8/Makefile.patch51
-rw-r--r--packages/perl/perl-5.8.8/asm-pageh-fix.patch19
-rw-r--r--packages/perl/perl-5.8.8/config.sh1021
-rw-r--r--packages/perl/perl-5.8.8/config.sh-3258
-rw-r--r--packages/perl/perl-5.8.8/config.sh-32-be1
-rw-r--r--packages/perl/perl-5.8.8/config.sh-32-le1
-rw-r--r--packages/perl/perl-5.8.8/config.sh-6458
-rw-r--r--packages/perl/perl-5.8.8/config.sh-64-be1
-rw-r--r--packages/perl/perl-5.8.8/config.sh-64-le1
-rw-r--r--packages/perl/perl-5.8.8/generate-sh.patch46
-rw-r--r--packages/perl/perl-5.8.8/installperl.patch15
-rw-r--r--packages/perl/perl-5.8.8/makedepend-dash.patch13
-rw-r--r--packages/perl/perl-5.8.8/native-no-gdbminc.patch18
-rw-r--r--packages/perl/perl-5.8.8/native-nopacklist.patch84
-rw-r--r--packages/perl/perl-5.8.8/native-perlinc.patch16
-rw-r--r--packages/perl/perl-5.8.8/native-ssp.patch14
-rw-r--r--packages/perl/perl-5.8.8/perl-configpm-switch.patch34
-rwxr-xr-xpackages/perl/perl-5.8.8/perl-configure.sh43
-rw-r--r--packages/perl/perl-5.8.8/perl-dynloader.patch23
-rw-r--r--packages/perl/perl-5.8.8/perl-moreconfig.patch16
-rw-r--r--packages/perl/perl-native_5.8.7.bb3
-rw-r--r--packages/perl/perl-native_5.8.8.bb70
-rw-r--r--packages/perl/perl-rdepends_5.8.8.inc1145
-rw-r--r--packages/perl/perl-rprovides.inc45
-rw-r--r--packages/perl/perl.inc34
-rw-r--r--packages/perl/perl_5.8.4.bb26
-rw-r--r--packages/perl/perl_5.8.7.bb60
-rw-r--r--packages/perl/perl_5.8.8.bb219
-rw-r--r--packages/phalanx/phalanx_22.bb7
-rw-r--r--packages/php/php-5.2.0/.mtn2git_empty0
-rw-r--r--packages/php/php-5.2.0/acinclude-xml2-config.patch18
-rw-r--r--packages/php/php-5.2.0/autotools.patch95
-rw-r--r--packages/php/php-5.2.0/pear-makefile.patch11
-rw-r--r--packages/php/php-native_4.3.10.bb5
-rw-r--r--packages/php/php-native_4.3.6.bb5
-rw-r--r--packages/php/php_4.3.10.bb1
-rw-r--r--packages/php/php_4.3.6.bb1
-rw-r--r--packages/php/php_5.1.4.bb2
-rw-r--r--packages/php/php_5.2.0.bb65
-rw-r--r--packages/picocom/picocom/.mtn2git_empty0
-rw-r--r--packages/picocom/picocom/gcc4.patch12
-rw-r--r--packages/picocom/picocom/nolock.patch35
-rw-r--r--packages/picocom/picocom_1.4.bb8
-rw-r--r--packages/pimlico/.mtn2git_empty0
-rw-r--r--packages/pimlico/contacts.inc16
-rw-r--r--packages/pimlico/contacts_0.5.bb5
-rw-r--r--packages/pimlico/contacts_svn.bb17
-rw-r--r--packages/pimlico/dates.inc20
-rw-r--r--packages/pimlico/dates_0.4.3.bb5
-rw-r--r--packages/pimlico/dates_svn.bb8
-rw-r--r--packages/pimlico/files/.mtn2git_empty0
-rw-r--r--packages/pimlico/files/stock_contact.png (renamed from packages/openmoko-pim/openmoko-contacts/stock_contact.png)bin2311 -> 2311 bytes
-rw-r--r--packages/pimlico/files/stock_person.png (renamed from packages/openmoko-pim/openmoko-contacts/stock_person.png)bin2280 -> 2280 bytes
-rw-r--r--packages/pimlico/files/tasks-single.diff9
-rw-r--r--packages/pimlico/tasks.inc6
-rw-r--r--packages/pimlico/tasks_0.9.bb5
-rw-r--r--packages/pimlico/tasks_svn.bb8
-rw-r--r--packages/pipepanic/files/fix-datadir.patch2
-rw-r--r--packages/pipepanic/pipepanic_0.1.1.bb2
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/.mtn2git_empty0
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/autofoo.patch513
-rw-r--r--packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h6
-rw-r--r--packages/pkgconfig/pkgconfig-native_0.22.bb16
-rw-r--r--packages/pkgconfig/pkgconfig.inc24
-rw-r--r--packages/pkgconfig/pkgconfig_0.15.0.bb2
-rw-r--r--packages/pkgconfig/pkgconfig_0.22.bb3
-rw-r--r--packages/poboxserver/files/pbserver.sh38
-rw-r--r--packages/poboxserver/poboxserver/.mtn2git_empty0
-rw-r--r--packages/poboxserver/poboxserver/OpenPOBox-1.25.diff (renamed from packages/poboxserver/files/OpenPOBox-1.25.diff)0
-rw-r--r--packages/poboxserver/poboxserver/pbserver.sh38
-rw-r--r--packages/poboxserver/poboxserver/remove-local-includes.patch (renamed from packages/poboxserver/files/remove-local-includes.patch)0
-rw-r--r--packages/poboxserver/poboxserver/unicode.patch13
-rw-r--r--packages/poboxserver/poboxserver_1.2.5.bb10
-rw-r--r--packages/poboxserver/qpobox/.mtn2git_empty0
-rw-r--r--packages/poboxserver/qpobox/qpobox-0.5.4-opie.patch (renamed from packages/qpobox/files/qpobox-0.5.4-opie.patch)0
-rw-r--r--packages/poboxserver/qpobox/qpobox.patch57
-rw-r--r--packages/poboxserver/qpobox_0.5.4.bb18
-rw-r--r--packages/pointercal/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/akita/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/akita/pointercal1
-rw-r--r--packages/pointercal/files/c7x0/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/c7x0/pointercal1
-rw-r--r--packages/pointercal/files/fic-gta01/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/fic-gta01/pointercal1
-rw-r--r--packages/pointercal/files/fic-gta02/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/fic-gta02/pointercal1
-rw-r--r--packages/pointercal/files/nokia800/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/nokia800/pointercal1
-rw-r--r--packages/pointercal/files/pointercal0
-rw-r--r--packages/pointercal/files/spitz/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/spitz/pointercal1
-rw-r--r--packages/pointercal/files/tosa/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/tosa/pointercal1
-rw-r--r--packages/pointercal/pointercal_0.0.bb18
-rw-r--r--packages/poppler/poppler.inc16
-rw-r--r--packages/poppler/poppler0.6_cvs.bb6
-rw-r--r--packages/poppler/poppler_0.5.4.bb2
-rw-r--r--packages/poppler/poppler_0.5.9.bb5
-rw-r--r--packages/poppler/poppler_20060418.bb16
-rw-r--r--packages/poptop/files/.mtn2git_empty0
-rwxr-xr-xpackages/poptop/files/pptpd.init37
-rw-r--r--packages/poptop/poptop-1.3.4/.mtn2git_empty0
-rw-r--r--packages/poptop/poptop-1.3.4/fix-plugins-install.patch26
-rw-r--r--packages/poptop/poptop_1.3.4.bb41
-rw-r--r--packages/postgresql/files/.mtn2git_empty0
-rw-r--r--packages/postgresql/files/no-ecpg-test.patch12
-rw-r--r--packages/postgresql/postgresql_8.1.4.bb2
-rw-r--r--packages/postgresql/postgresql_8.1.8.bb20
-rw-r--r--packages/postgresql/postgresql_8.2.4.bb20
-rw-r--r--packages/povray/povray_3.6.1.bb3
-rw-r--r--packages/powertop/.mtn2git_empty0
-rw-r--r--packages/powertop/powertop_1.5.bb17
-rw-r--r--packages/pptp-linux/pptp-linux-1.5.0/.mtn2git_empty0
-rw-r--r--packages/pptp-linux/pptp-linux-1.5.0/makefile.patch (renamed from packages/pptp-linux/pptp-linux/makefile.patch)0
-rw-r--r--packages/pptp-linux/pptp-linux-1.5.0/options.pptp (renamed from packages/pptp-linux/pptp-linux/options.pptp)0
-rw-r--r--packages/pptp-linux/pptp-linux-1.7.1/.mtn2git_empty0
-rw-r--r--packages/pptp-linux/pptp-linux-1.7.1/options.pptp30
-rw-r--r--packages/pptp-linux/pptp-linux_1.7.1.bb25
-rw-r--r--packages/prism3-support/files/hostap-fw-load26
-rw-r--r--packages/prism3-support/prism3-support_1.0.0.bb15
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/.mtn2git_empty0
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/fix-includes.patch11
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/gpsapi.patch13
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/wireless.patch12
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3/crosscompile.patch166
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3/fix-includes.patch26
-rw-r--r--packages/prismstumbler/prismstumbler-0.7.3/wireless.patch21
-rw-r--r--packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb44
-rw-r--r--packages/prismstumbler/prismstumbler_0.7.3.bb18
-rw-r--r--packages/procps/procps.inc14
-rw-r--r--packages/procps/procps_3.1.15.bb15
-rw-r--r--packages/procps/procps_3.2.1.bb16
-rw-r--r--packages/procps/procps_3.2.5.bb19
-rw-r--r--packages/procps/procps_3.2.7.bb19
-rw-r--r--packages/proj4/proj-4-native_4.9.bb3
-rw-r--r--packages/proj4/proj-4.inc18
-rw-r--r--packages/proj4/proj-4_4.9.bb14
-rw-r--r--packages/psplash/files/angstrom/.mtn2git_empty0
-rw-r--r--packages/psplash/files/angstrom/angstrom-psplash-qvga-img.h1336
-rw-r--r--packages/psplash/files/angstrom/angstrom-psplash-vga-img.h2109
-rw-r--r--packages/psplash/files/angstrom/psplash-hand-img.h1336
-rw-r--r--packages/psplash/files/configurability.patch292
-rw-r--r--packages/psplash/files/openmoko/.mtn2git_empty0
-rw-r--r--packages/psplash/files/openmoko/psplash-bar-img.h59
-rw-r--r--packages/psplash/files/openmoko/psplash-hand-img.h5377
-rw-r--r--packages/psplash/files/psplash-bar-img.h47
-rw-r--r--packages/psplash/files/psplash-init9
-rw-r--r--packages/psplash/files/zzapsplash-init4
-rw-r--r--packages/psplash/psplash-zap_1.0.bb13
-rw-r--r--packages/psplash/psplash_svn.bb22
-rw-r--r--packages/pulseaudio/files/gcc4-compile-fix.patch18
-rw-r--r--packages/pulseaudio/libatomics-ops_1.2.bb11
-rw-r--r--packages/pulseaudio/pulse.inc98
-rw-r--r--packages/pulseaudio/pulseaudio_0.9.5.bb97
-rw-r--r--packages/pulseaudio/pulseaudio_0.9.6.bb4
-rw-r--r--packages/puppy/files/.mtn2git_empty0
-rw-r--r--packages/puppy/files/usb-header.patch20
-rw-r--r--packages/puppy/puppy_1.11.bb5
-rw-r--r--packages/puzzles/oh-puzzles_svn.bb43
-rw-r--r--packages/puzzles/puzzles_r6915.bb47
-rw-r--r--packages/puzzles/puzzles_r7436.bb56
-rw-r--r--packages/puzzles/puzzles_svn.bb53
-rw-r--r--packages/python/fix-path.inc22
-rw-r--r--packages/python/python-2.4.4-manifest.inc146
-rw-r--r--packages/python/python-dbus/.mtn2git_empty0
-rw-r--r--packages/python/python-dbus/allow-older-autotools.patch27
-rw-r--r--packages/python/python-dbus_0.71.bb13
-rw-r--r--packages/python/python-dbus_0.81.1.bb14
-rw-r--r--packages/python/python-ecore_cvs.bb3
-rw-r--r--packages/python/python-edje_cvs.bb4
-rw-r--r--packages/python/python-efl.inc18
-rw-r--r--packages/python/python-emotion_cvs.bb4
-rw-r--r--packages/python/python-evas_cvs.bb13
-rw-r--r--packages/python/python-fam_1.1.1.bb12
-rw-r--r--packages/python/python-fuse_cvs.bb4
-rw-r--r--packages/python/python-gst/.mtn2git_empty0
-rw-r--r--packages/python/python-gst/python-path.patch24
-rw-r--r--packages/python/python-gst_0.10.7.bb25
-rw-r--r--packages/python/python-pycairo_1.2.2.bb4
-rw-r--r--packages/python/python-pygobject-native_2.12.3.bb7
-rw-r--r--packages/python/python-pygobject/.mtn2git_empty0
-rw-r--r--packages/python/python-pygobject/python-path.patch23
-rw-r--r--packages/python/python-pygobject_2.12.2.bb5
-rw-r--r--packages/python/python-pygobject_2.12.3.bb25
-rw-r--r--packages/python/python-pygtk2/acinclude.m46
-rw-r--r--packages/python/python-pygtk2_2.10.3.bb12
-rw-r--r--packages/python/python-pygtk2_2.6.3.bb35
-rw-r--r--packages/python/python-pygtk2_2.8.6.bb9
-rw-r--r--packages/python/python-pyqt4_4.2.bb (renamed from packages/python/python-pyqt4_4.0.bb)0
-rw-r--r--packages/python/python-pyqt_3.13.bb5
-rw-r--r--packages/python/python-pyrex-native_0.9.5.1a.bb (renamed from packages/python/python-pyrex-native_0.9.3.1.bb)0
-rw-r--r--packages/python/python-pyrex_0.9.5.1a.bb (renamed from packages/python/python-pyrex_0.9.3.1.bb)0
-rw-r--r--packages/python/python-pysqlite2_2.2.2.bb13
-rw-r--r--packages/python/python-setuptools_0.6c6.bb22
-rw-r--r--packages/python/python-simplejson_1.7.1.bb16
-rw-r--r--packages/python/python_2.4.4.bb11
-rw-r--r--packages/qemu/files/makefile.patch37
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch853
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch12
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch217
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch881
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch21
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch12
-rw-r--r--packages/qemu/qemu-native.inc4
-rw-r--r--packages/qemu/qemu-native_0.9.0+cvs.bb3
-rw-r--r--packages/qemu/qemu-qop-nogfx-native_svn.bb1
-rw-r--r--packages/qemu/qemu_0.9.0+cvs.bb22
-rw-r--r--packages/qemu/qemu_cvs.bb8
-rw-r--r--packages/qmake/qmake2-native-2.00a/linux-oe-qmake.conf90
-rw-r--r--packages/qmake/qmake2-native-2.01a/.mtn2git_empty0
-rw-r--r--packages/qmake/qmake2-native-2.01a/0001-fix-mkspecs.patch123
-rw-r--r--packages/qmake/qmake2-native-2.01a/linux-oe-qmake.conf1
-rw-r--r--packages/qmake/qmake2-native_2.00a.bb49
-rw-r--r--packages/qmake/qmake2-native_2.01a.bb67
-rw-r--r--packages/qof/qof_0.7.2.bb6
-rw-r--r--packages/qpe-games/hexatrolic_1.0beta3.bb1
-rw-r--r--packages/qpe-games/labyrinth_0.7.bb1
-rw-r--r--packages/qpe-games/win4_1.0.1.bb1
-rw-r--r--packages/qpe-games/ziq_1.1ern.bb3
-rw-r--r--packages/qpe-games/zsubhunt_1.0.0ern.bb1
-rw-r--r--packages/qpe-games/ztappy_0.9.3ern.bb1
-rw-r--r--packages/qpegps/qpegps.inc35
-rw-r--r--packages/qpegps/qpegps_0.9.2.3.3.bb34
-rw-r--r--packages/qpegps/qpegps_0.9.3.bb36
-rwxr-xr-xpackages/qpf-fonts/files/update-qtfontdir2
-rw-r--r--packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb (renamed from packages/vera-fonts/qpf-bitstream-vera-sans-mono_1.10.bb)0
-rw-r--r--packages/qpf-fonts/qpf-bitstream-vera_1.10.bb (renamed from packages/vera-fonts/qpf-bitstream-vera_1.10.bb)0
-rw-r--r--packages/qpf-fonts/qpf-font-common_1.0.bb3
-rw-r--r--packages/qpf-fonts/qpf-unismall_1.0.0.bb4
-rw-r--r--packages/qpobox/files/qpobox.patch57
-rw-r--r--packages/qpobox/qpobox_0.5.4.bb18
-rw-r--r--packages/qsvn/files/.mtn2git_empty0
-rw-r--r--packages/qsvn/files/build.patch23
-rw-r--r--packages/qsvn/qsvn_0.3.0.bb3
-rw-r--r--packages/qt/qt-x11-free-common.inc5
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/.mtn2git_empty0
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0001-cross-compile.patch174
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0002-fix-resinit-declaration.patch25
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0003-no-tools.patch25
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0004-no-qmake.patch25
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0005-fix-mkspecs.patch123
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0006-freetype-host-includes.patch23
-rw-r--r--packages/qt/qt4-x11-free-4.3.0/0007-openssl-host-includes.patch23
-rw-r--r--packages/qt/qt4-x11-free_4.1.2.bb13
-rw-r--r--packages/qt/qt4-x11-free_4.3.0.bb183
-rw-r--r--packages/qt/qt4_arch.inc13
-rw-r--r--packages/qte/qte-2.3.10/c7x0-w100-gcc4.patch31
-rw-r--r--packages/qte/qte-2.3.10/deprecated/.mtn2git_empty0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/c700-hardware.patch (renamed from packages/qte/qte-2.3.10/c700-hardware.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/devfs.patch (renamed from packages/qte/qte-2.3.10/devfs.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/ipaq-keyboard.patch (renamed from packages/qte/qte-2.3.10/ipaq-keyboard.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/mnci-touchscreen.patch (renamed from packages/qte/qte-2.3.10/mnci-touchscreen.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/mnci.patch (renamed from packages/qte/qte-2.3.10/mnci.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/openmn/.mtn2git_empty0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.cpp (renamed from packages/qte/qte-2.3.10/openmn/qkeyboard_qws.cpp)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.h (renamed from packages/qte/qte-2.3.10/openmn/qkeyboard_qws.h)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/simpad-defaultkbd.patch (renamed from packages/qte/qte-2.3.10/simpad-defaultkbd.patch)0
-rw-r--r--packages/qte/qte-2.3.10/deprecated/simpad.patch (renamed from packages/qte/qte-2.3.10/simpad.patch)0
-rw-r--r--packages/qte/qte-2.3.10/kernel-asm-page.patch20
-rw-r--r--packages/qte/qte-2.3.10/kernel-keymap-tosa.patch81
-rw-r--r--packages/qte/qte-2.3.10/kernel-keymap.patch110
-rw-r--r--packages/qte/qte-2.3.10/key.patch16
-rw-r--r--packages/qte/qte-2.3.10/remove-unused-kbdhandler.patch420
-rw-r--r--packages/qte/qte-2.3.10/spitz-adhoc-keypad-rotate.patch (renamed from packages/qte/qte-2.3.10/kernel-keymap-CXK.patch)0
-rw-r--r--packages/qte/qte-2.3.12/kernel-keymap-tosa.patch81
-rw-r--r--packages/qte/qte-common_2.3.10.inc109
-rw-r--r--packages/qte/qte-common_2.3.12.inc7
-rw-r--r--packages/qte/qte-mt-static_2.3.10.bb3
-rw-r--r--packages/qte/qte-mt-static_2.3.12.bb2
-rw-r--r--packages/qte/qte-mt_2.3.10.bb3
-rw-r--r--packages/qte/qte-mt_2.3.12.bb2
-rw-r--r--packages/qte/qte_2.3.10.bb2
-rw-r--r--packages/qte/qtopia-core_4.2.0.bb121
-rw-r--r--packages/quagga/quagga.inc4
-rw-r--r--packages/quagga/quagga_0.99.7.bb3
-rw-r--r--packages/quake/quetoo_0.6.1.bb26
-rw-r--r--packages/radvd/files/.mtn2git_empty0
-rw-r--r--packages/radvd/files/radvd.conf.empty18
-rwxr-xr-xpackages/radvd/files/radvd.init115
-rw-r--r--packages/radvd/files/volatiles.03_radvd2
-rw-r--r--packages/radvd/radvd.inc41
-rw-r--r--packages/radvd/radvd_0.7.2.bb14
-rw-r--r--packages/radvd/radvd_1.0.bb5
-rw-r--r--packages/raw-tools/.mtn2git_empty0
-rw-r--r--packages/raw-tools/exiv2_0.15.bb14
-rw-r--r--packages/raw-tools/gtkimageview_1.3.0.bb19
-rw-r--r--packages/raw-tools/libopenraw.inc10
-rw-r--r--packages/raw-tools/libopenraw_0.0.2.bb4
-rw-r--r--packages/raw-tools/ufraw_0.12.bb16
-rw-r--r--packages/redboot-utils/.mtn2git_empty0
-rw-r--r--packages/redboot-utils/fconfig_20060419.bb14
-rw-r--r--packages/redboot-utils/fis_1.0.bb15
-rw-r--r--packages/rfakeap/rfakeap_0.2.bb1
-rw-r--r--packages/rglueap/.mtn2git_empty0
-rw-r--r--packages/rglueap/rglueap_0.1.bb17
-rw-r--r--packages/roadmap/.mtn2git_empty0
-rw-r--r--packages/roadmap/files/.mtn2git_empty0
-rw-r--r--packages/roadmap/files/cross.patch17
-rw-r--r--packages/roadmap/roadmap-gtk2_cvs.bb44
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/.mtn2git_empty0
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/configure_in_cross.patch136
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/pppoe-no-timeout.patch16
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.default22
-rwxr-xr-xpackages/rp-pppoe/rp-pppoe-3.8/pppoe-server.init59
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/pppoe-src-restrictions.patch18
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/top-autoconf.patch25
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/update-config.patch30
-rw-r--r--packages/rp-pppoe/rp-pppoe_3.8.bb55
-rw-r--r--packages/rt2x00/rt2570-k2wrlz_1.6.0.bb17
-rw-r--r--packages/rt2x00/rt73-k2wrlz_1.0.0.bb19
-rw-r--r--packages/ruby/ruby_1.8.5.bb6
-rw-r--r--packages/s3c2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2bin3485 -> 0 bytes
-rw-r--r--packages/s3c2410-utils/files/sjf2410-linux-20060807.tar.bz2bin18471 -> 0 bytes
-rw-r--r--packages/s3c2410-utils/s3c2410-boot-usb-native_20060807.bb31
-rw-r--r--packages/s3c2410-utils/sjf2410-linux-native_20060807.bb32
-rw-r--r--packages/s3c2410-utils/sjf2410-linux-native_svn.bb2
-rw-r--r--packages/salsa-lib/.mtn2git_empty0
-rw-r--r--packages/salsa-lib/salsa-lib_0.0.1.bb12
-rw-r--r--packages/sapwood/sapwood/sockets.patch75
-rw-r--r--packages/sapwood/sapwood_svn.bb7
-rw-r--r--packages/sato-icon-theme/.mtn2git_empty0
-rw-r--r--packages/sato-icon-theme/sato-icon-theme_0.1.bb20
-rw-r--r--packages/schroedinger/schroedinger_0.2.0.0.bb2
-rw-r--r--packages/scummvm/scummvm-qpe_0.6.1b.bb5
-rw-r--r--packages/scummvm/scummvm.inc4
-rw-r--r--packages/scummvm/scummvm_0.6.0.bb2
-rw-r--r--packages/scummvm/scummvm_0.6.1b.bb2
-rw-r--r--packages/scummvm/scummvm_0.9.0.bb2
-rw-r--r--packages/scummvm/scummvm_0.9.1.bb16
-rw-r--r--packages/sdlperl/sdl-perl_1.20.3.bb40
-rw-r--r--packages/settings-daemon/settings-daemon_svn.bb12
-rw-r--r--packages/shared-mime-info/shared-mime-info.inc21
-rw-r--r--packages/shared-mime-info/shared-mime-info_0.20.bb18
-rw-r--r--packages/shared-mime-info/shared-mime-info_0.22.bb2
-rw-r--r--packages/shasum/.mtn2git_empty0
-rw-r--r--packages/shasum/files/.mtn2git_empty0
-rw-r--r--packages/shasum/files/main.c60
-rw-r--r--packages/shasum/files/mhash_sha256.h64
-rw-r--r--packages/shasum/files/sha256.c322
-rw-r--r--packages/shasum/shasum-native.bb11
-rw-r--r--packages/shasum/shasum.inc20
-rw-r--r--packages/sidplay-base/.mtn2git_empty0
-rw-r--r--packages/sidplay-base/sidplay-base_1.0.9.bb10
-rw-r--r--packages/simh/.mtn2git_empty0
-rw-r--r--packages/simh/files/.mtn2git_empty0
-rw-r--r--packages/simh/files/makefile.patch36
-rw-r--r--packages/simh/simh_3.7-1.bb47
-rw-r--r--packages/slugos-init/files/boot/kexec202
-rw-r--r--packages/slugos-init/files/boot/network5
-rw-r--r--packages/slugos-init/files/functions2
-rw-r--r--packages/slugos-init/files/initscripts/umountinitrd.sh2
-rw-r--r--packages/slugos-init/files/leds5
-rw-r--r--packages/slugos-init/files/modulefunctions9
-rw-r--r--packages/slugos-init/files/reflash4
-rw-r--r--packages/slugos-init/files/sysconf5
-rw-r--r--packages/slugos-init/files/turnup143
-rw-r--r--packages/slugos-init/slugos-init_0.10.bb5
-rw-r--r--packages/snes9x/snes9x-sdl-qpe_1.39.bb6
-rw-r--r--packages/snes9x/snes9x-sdl/gcc-4.1.patch28
-rw-r--r--packages/snes9x/snes9x-sdl_1.39.bb5
-rw-r--r--packages/sox/sox-native_13.0.0.bb19
-rw-r--r--packages/sox/sox/src-Makefile.am.patch11
-rw-r--r--packages/sox/sox_12.17.5.bb2
-rw-r--r--packages/sox/sox_13.0.0.bb18
-rw-r--r--packages/spandsp/.mtn2git_empty0
-rw-r--r--packages/spandsp/spandsp_0.0.2+0.0.3pre27.bb17
-rw-r--r--packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb24
-rw-r--r--packages/spandsp/spandsp_0.0.3.bb18
-rw-r--r--packages/speex/speex_1.1.12+1.2beta1.bb3
-rw-r--r--packages/sphyrna/.mtn2git_empty0
-rw-r--r--packages/sphyrna/sphyrna_svn.bb20
-rw-r--r--packages/sqlite/sqlite3-3.3.17/.mtn2git_empty0
-rw-r--r--packages/sqlite/sqlite3-3.3.17/libtool.patch25
-rw-r--r--packages/sqlite/sqlite3.inc5
-rw-r--r--packages/sqlite/sqlite3_3.3.12.bb3
-rw-r--r--packages/sqlite/sqlite3_3.3.13.bb3
-rw-r--r--packages/sqlite/sqlite3_3.3.17.bb3
-rw-r--r--packages/starling/starling_0.1.bb7
-rw-r--r--packages/starling/starling_0.2.bb21
-rw-r--r--packages/starling/starling_svn.bb23
-rw-r--r--packages/strace/strace/strace-undef-syscall.patch66
-rw-r--r--packages/strace/strace_4.5.14.bb3
-rw-r--r--packages/subversion/files/neon-detection.patch36
-rw-r--r--packages/subversion/subversion_1.3.1.bb2
-rw-r--r--packages/subversion/subversion_1.4.0.bb11
-rw-r--r--packages/subversion/subversion_1.4.3.bb33
-rw-r--r--packages/sudo/files/autofoo.patch61
-rw-r--r--packages/sudo/site/.mtn2git_empty0
-rw-r--r--packages/sudo/site/bit-322
-rw-r--r--packages/sudo/site/bit-642
-rw-r--r--packages/sudo/sudo_1.6.8p12.bb8
-rw-r--r--packages/sword/sword-1.5.9/.mtn2git_empty0
-rw-r--r--packages/sword/sword-1.5.9/gcc-visibility.patch26
-rw-r--r--packages/sword/sword_1.5.9.bb3
-rw-r--r--packages/sylpheed/claws-mail.inc54
-rw-r--r--packages/sylpheed/claws-mail_2.9.1.bb1
-rw-r--r--packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.bb20
-rw-r--r--packages/sylpheed/claws-plugin-mailmbox_1.13.bb20
-rw-r--r--packages/sylpheed/claws-plugin-rssyl_0.13.bb20
-rw-r--r--packages/sylpheed/files/desktop.patch19
-rw-r--r--packages/sylpheed/files/streamline-ui.patch1008
-rw-r--r--packages/synaesthesia/.mtn2git_empty0
-rw-r--r--packages/synaesthesia/synaesthesia_2.4.bb13
-rw-r--r--packages/synergy/synergy_1.3.1.bb15
-rw-r--r--packages/sysconf/.mtn2git_empty0
-rw-r--r--packages/sysconf/files/.mtn2git_empty0
-rw-r--r--packages/sysconf/files/conffiles55
-rw-r--r--packages/sysconf/files/sysconf1038
-rw-r--r--packages/sysconf/files/sysconfsetup53
-rw-r--r--packages/sysconf/sysconf_0.1.bb52
-rw-r--r--packages/sysfsutils/sysfsutils_2.0.0.bb3
-rw-r--r--packages/syslinux/syslinux-native_3.36.bb3
-rw-r--r--packages/syslinux/syslinux3.inc1
-rwxr-xr-xpackages/sysvinit/sysvinit/angstrom/rc54
-rw-r--r--packages/sysvinit/sysvinit/htcuniversal/inittab30
-rw-r--r--packages/sysvinit/sysvinit/oplinux-uclibc/.mtn2git_empty0
-rw-r--r--packages/sysvinit/sysvinit/oplinux-uclibc/inittab39
-rw-r--r--packages/sysvinit/sysvinit/oplinux/.mtn2git_empty0
-rw-r--r--packages/sysvinit/sysvinit/oplinux/inittab39
-rw-r--r--packages/sysvinit/sysvinit_2.86.bb15
-rw-r--r--packages/taglib/taglib_1.4.bb10
-rw-r--r--packages/taglib/taglibc_1.4.bb2
-rw-r--r--packages/tasks/task-base.bb436
-rw-r--r--packages/tasks/task-boot.bb54
-rw-r--r--packages/tasks/task-gmae.bb43
-rw-r--r--packages/tasks/task-gpe-apps.bb24
-rw-r--r--packages/tasks/task-gpe-base.bb35
-rw-r--r--packages/tasks/task-gpe-connectivity.bb9
-rw-r--r--packages/tasks/task-gpe-desktopapps.bb13
-rw-r--r--packages/tasks/task-gpe-games.bb13
-rw-r--r--packages/tasks/task-gpe-pim.bb18
-rw-r--r--packages/tasks/task-gpe-sectest.bb17
-rw-r--r--packages/tasks/task-gpe-settings.bb22
-rw-r--r--packages/tasks/task-gpe-web.bb10
-rw-r--r--packages/tasks/task-gpe.bb31
-rw-r--r--packages/tasks/task-gpephone.bb35
-rw-r--r--packages/tasks/task-mokogateway.bb82
-rw-r--r--packages/tasks/task-openmoko.bb137
-rw-r--r--packages/tasks/task-opie-16mb.bb54
-rw-r--r--packages/tasks/task-opie-all.bb68
-rw-r--r--packages/tasks/task-opie-apps.bb25
-rw-r--r--packages/tasks/task-opie-games.bb20
-rw-r--r--packages/tasks/task-opie.bb111
-rw-r--r--packages/tasks/task-ossie.bb15
-rw-r--r--packages/tasks/task-python-everything_20060425.bb9
-rw-r--r--packages/tasks/task-sdk-base.bb53
-rw-r--r--packages/tasks/task-sdk-extra.bb57
-rw-r--r--packages/tasks/task-sdk-gpephone.bb21
-rw-r--r--packages/tasks/task-sdk-opie.bb18
-rw-r--r--packages/tasks/task-sdk-sbox-gpe.bb20
-rw-r--r--packages/tasks/task-sdk-sbox.bb13
-rw-r--r--packages/tasks/task-sdk.bb125
-rw-r--r--packages/tasks/task-slugos.bb59
-rw-r--r--packages/tasks/task-xfce-base.bb2
-rw-r--r--packages/telepathy/empathy-0.1/.mtn2git_empty0
-rw-r--r--packages/telepathy/empathy-0.1/no-gnome.diff39
-rw-r--r--packages/telepathy/empathy-0.5/.mtn2git_empty0
-rw-r--r--packages/telepathy/empathy-0.5/no-gnome.diff146
-rw-r--r--packages/telepathy/empathy_0.1.bb17
-rw-r--r--packages/telepathy/empathy_0.4.bb18
-rw-r--r--packages/telepathy/empathy_0.5.bb18
-rw-r--r--packages/telepathy/libtelepathy_0.0.53.bb15
-rw-r--r--packages/telepathy/telepathy-gabble-0.5.10/.mtn2git_empty0
-rw-r--r--packages/telepathy/telepathy-gabble-0.5.10/gabble.manager33
-rw-r--r--packages/telepathy/telepathy-gabble_0.3.0.bb12
-rw-r--r--packages/telepathy/telepathy-gabble_0.5.10.bb17
-rw-r--r--packages/telepathy/telepathy-glib_0.5.10.bb40
-rw-r--r--packages/telepathy/telepathy-mission-control_4.21.bb42
-rw-r--r--packages/telepathy/telepathy-mission-control_4.22.bb42
-rw-r--r--packages/tetex/tetex-native_3.0.bb7
-rw-r--r--packages/tetex/tetex_3.0.bb16
-rw-r--r--packages/thc/thcrut_1.2.5.bb2
-rw-r--r--packages/thttpd/files/htpasswd_shared.diff11
-rw-r--r--packages/thttpd/thttpd_2.25b.bb5
-rw-r--r--packages/tinylogin/tinylogin-1.4/remove-index.patch11
-rw-r--r--packages/tinylogin/tinylogin_1.4.bb5
-rw-r--r--packages/tomoe/libtomoe-gtk_0.1.0.bb2
-rw-r--r--packages/tomoe/tomoe_0.2.1.bb2
-rw-r--r--packages/tomoe/uim-tomoe-gtk_0.2.0.bb2
-rw-r--r--packages/tor/tor-0.1.1.26/.mtn2git_empty0
-rw-r--r--packages/tor/tor-0.1.1.26/compat.patch (renamed from packages/tor/tor-0.1.1.23/compat.patch)0
-rw-r--r--packages/tor/tor-0.1.1.26/configure.patch (renamed from packages/tor/tor-0.1.1.23/configure.patch)0
-rw-r--r--packages/tor/tor-0.1.1.26/make.patch (renamed from packages/tor/tor-0.1.1.23/make.patch)0
-rw-r--r--packages/tor/tor-0.1.1.26/openssl.patch (renamed from packages/tor/tor-0.1.1.23/openssl.patch)0
-rw-r--r--packages/tor/tor_0.1.1.23.bb24
-rw-r--r--packages/tor/tor_0.1.1.26.bb23
-rw-r--r--packages/tracker/.mtn2git_empty0
-rw-r--r--packages/tracker/files/.mtn2git_empty0
-rw-r--r--packages/tracker/files/no-ioprio.patch22
-rw-r--r--packages/tracker/tracker_0.5.4.bb14
-rw-r--r--packages/tree/.mtn2git_empty0
-rw-r--r--packages/tree/tree_1.5.1.bb11
-rw-r--r--packages/tremor/tremor_20041119.bb10
-rw-r--r--packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty0
-rw-r--r--packages/tslib/tslib-1.0/fic-gta01/ts.conf25
-rw-r--r--packages/tslib/tslib-1.0/ts.conf2
-rw-r--r--packages/tslib/tslib/fix_version.patch32
-rw-r--r--packages/tslib/tslib/htctornado/.mtn2git_empty0
-rw-r--r--packages/tslib/tslib/htctornado/ts.conf0
-rw-r--r--packages/tslib/tslib_1.0.bb6
-rw-r--r--packages/ttf-fonts/ttf-bitstream-vera_1.10.bb (renamed from packages/vera-fonts/ttf-bitstream-vera_1.10.bb)0
-rw-r--r--packages/ttf-fonts/ttf-dejavu/.mtn2git_empty0
-rw-r--r--packages/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf16
-rw-r--r--packages/ttf-fonts/ttf-dejavu_2.13.bb18
-rw-r--r--packages/ttf-fonts/ttf-dejavu_2.18.bb28
-rw-r--r--packages/ttyrec/.mtn2git_empty0
-rw-r--r--packages/ttyrec/files/.mtn2git_empty0
-rw-r--r--packages/ttyrec/files/Makefile.patch8
-rw-r--r--packages/ttyrec/ttyrec_1.0.8.bb41
-rw-r--r--packages/twisted/twisted-2.5.0/.mtn2git_empty0
-rw-r--r--packages/twisted/twisted-2.5.0/remove-zope-check.patch18
-rw-r--r--packages/twisted/twisted_1.2.0.bb11
-rw-r--r--packages/twisted/twisted_2.5.0.bb180
-rw-r--r--packages/tzcode/tzcode-native_2007c.bb20
-rw-r--r--packages/tzcode/tzcode-native_2007e.bb21
-rw-r--r--packages/tzdata/tzdata_2007c.bb156
-rw-r--r--packages/tzdata/tzdata_2007e.bb158
-rw-r--r--packages/uboot-utils/fw_env.h.patch24
-rw-r--r--packages/uboot-utils/uboot-utils_1.1.2.bb39
-rw-r--r--packages/uboot/files/gta01_nand.h233
-rw-r--r--packages/uboot/files/qt2410.h256
-rw-r--r--packages/uboot/files/qt2410_nand.h256
-rw-r--r--packages/uboot/files/qt2410_ram.h256
-rw-r--r--packages/uboot/files/u-boot-20060807-qt2410.patch8435
-rw-r--r--packages/uboot/files/u-boot-20060807.tar.bz2bin6446218 -> 0 bytes
-rw-r--r--packages/uboot/files/u-boot-20060907-gta01.patch901
-rw-r--r--packages/uboot/files/u-boot-20060907.tar.bz2bin6535380 -> 0 bytes
-rw-r--r--packages/uboot/files/u-boot-20061030-gta01bv2.patch246
-rw-r--r--packages/uboot/files/u-boot-20061030-gta01v4.patch132
-rw-r--r--packages/uboot/files/u-boot-20061030-qt2410-gta01.patch9272
-rw-r--r--packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch19
-rw-r--r--packages/uboot/files/uboot-eabi-fix-HACK.patch197
-rw-r--r--packages/uboot/u-boot-1.1.2/u-boot-emetec.patch2170
-rw-r--r--packages/uboot/u-boot-1.1.6/sarge-uboot.patch3326
-rw-r--r--packages/uboot/u-boot-1.2.0/.mtn2git_empty0
-rw-r--r--packages/uboot/u-boot-1.2.0/defconfig_lsppchd500
-rw-r--r--packages/uboot/u-boot-1.2.0/defconfig_lsppchg500
-rw-r--r--packages/uboot/u-boot-1.2.0/env-Makefile.patch (renamed from packages/uboot-utils/env-Makefile.patch)0
-rw-r--r--packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty0
-rw-r--r--packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config6
-rw-r--r--packages/uboot/u-boot-1.2.0/fw_env.c.patch (renamed from packages/uboot-utils/fw_env.c.patch)0
-rw-r--r--packages/uboot/u-boot-1.2.0/fw_env.config7
-rw-r--r--packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff2286
-rw-r--r--packages/uboot/u-boot-1.2.0/qnap.diff1089
-rw-r--r--packages/uboot/u-boot-1.2.0/tools-Makefile.patch (renamed from packages/uboot-utils/tools-Makefile.patch)0
-rw-r--r--packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty0
-rw-r--r--packages/uboot/u-boot-1.2.0/turbostation/fw_env.config7
-rw-r--r--packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch29
-rw-r--r--packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch5595
-rw-r--r--packages/uboot/u-boot-1.2.0/uboot-qnap.diff1100
-rw-r--r--packages/uboot/u-boot-LABEL.2006.06.30.2020/nohelloworld.patch14
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty0
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch52
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch69
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch98
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch62
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch769
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch58
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch127
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch101
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch22
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch139
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch40
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch56
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch198
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch17
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch229
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch73
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch30
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch126
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch354
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch302
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch23
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch316
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch137
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch31
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/series76
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch24
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch2248
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch1233
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch56
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch28
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch43
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch175
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch41
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch2081
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch1560
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch1169
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch712
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch4121
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch10
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch20
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch31
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch113
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch45
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch818
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch525
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch32
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch98
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch215
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch1263
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch1301
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch256
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch1481
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch1411
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch43
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch1607
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch88
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch63
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch68
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native_oe.bb82
-rw-r--r--packages/uboot/u-boot.inc5
-rw-r--r--packages/uboot/u-boot_1.1.2.bb5
-rw-r--r--packages/uboot/u-boot_1.1.4.bb4
-rw-r--r--packages/uboot/u-boot_1.1.6.bb6
-rw-r--r--packages/uboot/u-boot_1.2.0.bb25
-rw-r--r--packages/uboot/u-boot_LABEL.2006.06.30.2020.bb17
-rw-r--r--packages/uboot/u-boot_git.bb4
-rw-r--r--packages/uboot/uboot-gta01_svn.bb56
-rw-r--r--packages/uboot/uboot-openmoko_svn.bb88
-rw-r--r--packages/uboot/uboot-qt2410_0.0+cvs20061030.bb41
-rw-r--r--packages/uboot/uboot-utils_1.2.0.bb43
-rw-r--r--packages/uclibc/files/errno_values.h.patch21
-rw-r--r--packages/uclibc/files/termios.h.patch22
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uClibc.config177
-rw-r--r--packages/uclibc/uclibc-0.9.28/powerpc/uClibc.config5
-rw-r--r--packages/uclibc/uclibc-0.9.29/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/a780/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/a780/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/akita/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/akita/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/arm/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/arm/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.29/armeb/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/armeb/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/bfin/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine58
-rw-r--r--packages/uclibc/uclibc-0.9.29/c7x0/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/c7x0/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/collie/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/collie/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/efika/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/efika/uClibc.machine53
-rw-r--r--packages/uclibc/uclibc-0.9.29/ep93xx/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/ep93xx/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine69
-rw-r--r--packages/uclibc/uclibc-0.9.29/h2200/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h2200/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3600/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3600/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3800/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3800/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3900/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h3900/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/h4000/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h4000/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/h5000/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/h5000/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/hx4700/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/hx4700/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/ixp4xxbe/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/ixp4xxbe/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmld/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmld/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmz31/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmz31/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmz72/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/palmz72/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/poodle/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/poodle/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/simpad/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/simpad/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/spitz/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/spitz/uClibc.machine70
-rw-r--r--packages/uclibc/uclibc-0.9.29/titan/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-0.9.29/titan/uClibc.machine52
-rw-r--r--packages/uclibc/uclibc-0.9.29/uClibc.config0
-rw-r--r--packages/uclibc/uclibc-0.9.29/uClibc.distro146
-rw-r--r--packages/uclibc/uclibc-cvs/magicbox/.mtn2git_empty0
-rw-r--r--packages/uclibc/uclibc-cvs/magicbox/uClibc.config181
-rw-r--r--packages/uclibc/uclibc-initial_0.9.29.bb32
-rw-r--r--packages/uclibc/uclibc.inc36
-rw-r--r--packages/uclibc/uclibc_0.9.28.bb29
-rw-r--r--packages/uclibc/uclibc_0.9.29.bb36
-rwxr-xr-xpackages/udev/files/init4
-rw-r--r--packages/udev/udev-092/init4
-rw-r--r--packages/udev/udev-097/init4
-rw-r--r--packages/udev/udev-100/init4
-rw-r--r--packages/udev/udev-hostap-cs-vcc-workaround_1.0.bb12
-rw-r--r--packages/udev/udev.inc20
-rw-r--r--packages/udev/udev_092.bb11
-rw-r--r--packages/udev/udev_097.bb5
-rw-r--r--packages/udev/udev_100.bb9
-rw-r--r--packages/uicmoc/uicmoc-native-2.3.10/kernel-asm-page.patch20
-rw-r--r--packages/uicmoc/uicmoc-native_2.3.10.bb5
-rw-r--r--packages/uicmoc/uicmoc4-native-4.2.3/.mtn2git_empty0
-rw-r--r--packages/uicmoc/uicmoc4-native-4.2.3/fix-mkspecs.patch (renamed from packages/uicmoc/uicmoc4-native-4.1.1/fix-mkspecs.patch)0
-rw-r--r--packages/uicmoc/uicmoc4-native_4.1.1.bb42
-rw-r--r--packages/uicmoc/uicmoc4-native_4.2.3.bb41
-rw-r--r--packages/uicmoc/uicmoc4-native_4.3.0.bb52
-rw-r--r--packages/uim/uim-native_1.3.1.bb3
-rw-r--r--packages/uim/uim.inc2
-rw-r--r--packages/uim/uim_1.3.1.bb4
-rw-r--r--packages/unionfs/unionfs.inc2
-rw-r--r--packages/upstart/.mtn2git_empty0
-rw-r--r--packages/upstart/files/.mtn2git_empty0
-rw-r--r--packages/upstart/files/autoconf_version.patch12
-rw-r--r--packages/upstart/upstart.inc26
-rw-r--r--packages/upstart/upstart_0.3.8.bb7
-rw-r--r--packages/usb-gadget-mode/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/akita/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/akita/usb-gadget.conf3
-rw-r--r--packages/usb-gadget-mode/files/c7x0/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/c7x0/usb-gadget.conf3
-rw-r--r--packages/usb-gadget-mode/files/collie/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/collie/usb-gadget.conf3
-rw-r--r--packages/usb-gadget-mode/files/spitz/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/spitz/usb-gadget.conf3
-rw-r--r--packages/usb-gadget-mode/files/tosa/.mtn2git_empty0
-rw-r--r--packages/usb-gadget-mode/files/tosa/usb-gadget.conf3
-rwxr-xr-xpackages/usb-gadget-mode/files/usb-gadget62
-rw-r--r--packages/usb-gadget-mode/files/usb-gadget.conf3
-rwxr-xr-xpackages/usb-gadget-mode/files/usb-gadget.init16
-rw-r--r--packages/usb-gadget-mode/usb-gadget-mode.bb50
-rw-r--r--packages/util-linux/files/glibc-umount2.patch18
-rw-r--r--packages/util-linux/util-linux.inc4
-rw-r--r--packages/util-linux/util-linux_2.12r.bb3
-rw-r--r--packages/uucp/files/.mtn2git_empty0
-rw-r--r--packages/uucp/files/policy.patch85
-rw-r--r--packages/uucp/uucp_1.07.bb12
-rw-r--r--packages/valgrind/valgrind_3.2.3.bb16
-rw-r--r--packages/vincent/vincent_svn.bb2
-rw-r--r--packages/vsftpd/vsftpd-2.0.5/syscall.patch12
-rw-r--r--packages/vsftpd/vsftpd_2.0.5.bb6
-rw-r--r--packages/vte/vte_0.11.15.bb8
-rw-r--r--packages/watchdog/watchdog_5.3.1.bb9
-rw-r--r--packages/webcam-server/.mtn2git_empty0
-rw-r--r--packages/webcam-server/webcam-server_0.50.bb22
-rw-r--r--packages/webkit/.mtn2git_empty0
-rw-r--r--packages/webkit/webkit/.mtn2git_empty0
-rw-r--r--packages/webkit/webkit/Makefile22
-rw-r--r--packages/webkit/webkit/Makefile.shared21
-rw-r--r--packages/webkit/webkit/WebKit.pri61
-rw-r--r--packages/webkit/webkit/WebKit.pro13
-rw-r--r--packages/webkit/webkit_svn.bb64
-rw-r--r--packages/wget/wget-1.9.1/ipv6-fix.patch31
-rw-r--r--packages/wget/wget_1.9.1.bb5
-rw-r--r--packages/wifi-radar/wifi-radar_1.9.6.bb4
-rw-r--r--packages/wireless-tools/wireless-tools.inc36
-rw-r--r--packages/wireless-tools/wireless-tools_26.bb34
-rw-r--r--packages/wireless-tools/wireless-tools_27.bb43
-rw-r--r--packages/wireless-tools/wireless-tools_28+29pre10.bb14
-rw-r--r--packages/wireless-tools/wireless-tools_28+29pre21.bb14
-rw-r--r--packages/wireless-tools/wireless-tools_28-pre13.bb43
-rw-r--r--packages/wireless-tools/wireless-tools_28.bb14
-rw-r--r--packages/wireless-tools/wireless-tools_29-pre10.bb45
-rw-r--r--packages/wireshark/wireshark_0.99.4.bb6
-rw-r--r--packages/wlan-ng/wlan-ng-utils.inc68
-rw-r--r--packages/wlan-ng/wlan-ng-utils_0.2.1-pre26.bb68
-rw-r--r--packages/wlan-ng/wlan-ng-utils_0.2.3.bb71
-rw-r--r--packages/wlan-ng/wlan-ng-utils_0.2.4+svn20060823.bb56
-rw-r--r--packages/wlan-ng/wlan-ng-utils_0.2.7.bb70
-rw-r--r--packages/wlan-ng/wlan-ng-utils_svn.bb55
-rwxr-xr-xpackages/wpa-supplicant/files/functions.sh841
-rwxr-xr-xpackages/wpa-supplicant/files/ifupdown.sh132
-rw-r--r--packages/wpa-supplicant/wpa-supplicant-0.5.inc36
-rw-r--r--packages/wpa-supplicant/wpa-supplicant_0.5.5.bb2
-rw-r--r--packages/wpa-supplicant/wpa-supplicant_0.5.7.bb2
-rw-r--r--packages/wrt/wrt-imagetools-native.bb5
-rw-r--r--packages/xcalibrate/xcalibrate_git.bb5
-rw-r--r--packages/xcalibrateext/xcalibrateext_git.bb8
-rw-r--r--packages/xcb/libpthread-stubs_0.1.bb17
-rw-r--r--packages/xcb/libxcb.inc46
-rw-r--r--packages/xcb/libxcb_0.9.91.bb45
-rw-r--r--packages/xcb/libxcb_0.9.92.bb46
-rw-r--r--packages/xcb/libxcb_0.9.93.bb4
-rw-r--r--packages/xcb/libxcb_1.0.bb6
-rw-r--r--packages/xcb/libxcb_git.bb73
-rw-r--r--packages/xcb/xcb-proto.inc18
-rw-r--r--packages/xcb/xcb-proto_0.9.91.bb19
-rw-r--r--packages/xcb/xcb-proto_0.9.92.bb19
-rw-r--r--packages/xcb/xcb-proto_0.9.93.bb2
-rw-r--r--packages/xcb/xcb-proto_0.9.bb13
-rw-r--r--packages/xcb/xcb-proto_1.0.bb2
-rw-r--r--packages/xcb/xcb-proto_git.bb10
-rw-r--r--packages/xcb/xcb-util.inc31
-rw-r--r--packages/xcb/xcb-util_0.1.bb41
-rw-r--r--packages/xcb/xcb-util_0.2.bb2
-rw-r--r--packages/xcb/xcb-util_git.bb41
-rw-r--r--packages/xchat/xchat_2.6.0.bb12
-rw-r--r--packages/xchat/xchat_2.6.1.bb3
-rw-r--r--packages/xchat/xchat_2.6.8.bb13
-rw-r--r--packages/xfce-mcs-manager/xfce-mcs-manager_4.2.3.bb5
-rw-r--r--packages/xfce-mcs-manager/xfce-mcs-manager_4.3.99.2.bb5
-rw-r--r--packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.3.bb5
-rw-r--r--packages/xfce-mcs-plugins/xfce-mcs-plugins_4.3.99.2.bb5
-rw-r--r--packages/xfce-utils/xfce-utils_4.3.99.2.bb6
-rw-r--r--packages/xfce/.mtn2git_empty0
-rw-r--r--packages/xfce/exo_0.3.2.bb17
-rw-r--r--packages/xfce/gtk-xfce-engine_2.4.1.bb9
-rw-r--r--packages/xfce/libxfce4mcs.inc (renamed from packages/libxfce4mcs/libxfce4mcs.inc)0
-rw-r--r--packages/xfce/libxfce4mcs_4.4.1.bb (renamed from packages/libxfce4mcs/libxfce4mcs_4.2.2.bb)0
-rw-r--r--packages/xfce/libxfce4util.inc26
-rw-r--r--packages/xfce/libxfce4util_4.4.1.bb5
-rw-r--r--packages/xfce/libxfcegui4.inc (renamed from packages/libxfcegui4/libxfcegui4.inc)0
-rw-r--r--packages/xfce/libxfcegui4_4.4.1.bb (renamed from packages/libxfcegui4/libxfcegui4_4.2.2.bb)0
-rw-r--r--packages/xfce/mousepad_0.2.12.bb6
-rw-r--r--packages/xfce/orage_4.4.1.bb5
-rw-r--r--packages/xfce/thunar_0.8.0.bb15
-rw-r--r--packages/xfce/xfce-mcs-manager.inc (renamed from packages/xfce-mcs-manager/xfce-mcs-manager.inc)0
-rw-r--r--packages/xfce/xfce-mcs-manager_4.4.1.bb (renamed from packages/xfce-mcs-manager/xfce-mcs-manager_4.2.2.bb)0
-rw-r--r--packages/xfce/xfce-mcs-plugins.inc (renamed from packages/xfce-mcs-plugins/xfce-mcs-plugins.inc)0
-rw-r--r--packages/xfce/xfce-mcs-plugins_4.4.1.bb (renamed from packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.2.bb)0
-rw-r--r--packages/xfce/xfce-terminal_0.2.6.bb8
-rw-r--r--packages/xfce/xfce-utils.inc (renamed from packages/xfce-utils/xfce-utils.inc)0
-rw-r--r--packages/xfce/xfce-utils_4.4.1.bb (renamed from packages/xfce-utils/xfce-utils_4.2.2.bb)0
-rw-r--r--packages/xfce/xfce4-appfinder.inc (renamed from packages/xfce4-goodies/xfce4-appfinder.inc)0
-rw-r--r--packages/xfce/xfce4-appfinder_4.4.1.bb (renamed from packages/xfce4-goodies/xfce4-appfinder_4.2.2.bb)0
-rw-r--r--packages/xfce/xfce4-dev-tools.inc12
-rw-r--r--packages/xfce/xfce4-dev-tools_4.4.0.bb1
-rw-r--r--packages/xfce/xfce4-icon-theme_4.4.1.bb6
-rw-r--r--packages/xfce/xfce4-mixer.inc (renamed from packages/xfce4-goodies/xfce4-mixer.inc)0
-rw-r--r--packages/xfce/xfce4-mixer_4.4.1.bb (renamed from packages/xfce4-goodies/xfce4-mixer_4.2.2.bb)0
-rw-r--r--packages/xfce/xfce4-panel.inc25
-rw-r--r--packages/xfce/xfce4-panel_4.4.1.bb6
-rw-r--r--packages/xfce/xfce4-session_4.4.1.bb4
-rw-r--r--packages/xfce/xfdesktop.inc15
-rw-r--r--packages/xfce/xfdesktop_4.4.1.bb6
-rw-r--r--packages/xfce/xfprint_4.4.1.bb (renamed from packages/xfprint/xfprint_4.2.0.bb)0
-rw-r--r--packages/xfce/xfwm4-themes.inc (renamed from packages/xfwm4-themes/xfwm4-themes.inc)0
-rw-r--r--packages/xfce/xfwm4-themes_4.4.1.bb (renamed from packages/xfwm4-themes/xfwm4-themes_4.2.2.bb)0
-rw-r--r--packages/xfce/xfwm4.inc (renamed from packages/xfwm4/xfwm4.inc)0
-rw-r--r--packages/xfce/xfwm4_4.4.1.bb (renamed from packages/xfwm4/xfwm4_4.2.2.bb)0
-rw-r--r--packages/xfce4-goodies/xfce4-appfinder_4.3.99.2.bb5
-rw-r--r--packages/xfce4-goodies/xfce4-mixer_4.3.99.2.bb5
-rw-r--r--packages/xfce4-panel/xfce4-panel.inc24
-rw-r--r--packages/xfce4-panel/xfce4-panel_4.2.2.bb6
-rw-r--r--packages/xfce4-panel/xfce4-panel_4.3.99.2.bb6
-rw-r--r--packages/xfdesktop/xfdesktop.inc14
-rw-r--r--packages/xfdesktop/xfdesktop_4.2.0.bb12
-rw-r--r--packages/xfdesktop/xfdesktop_4.2.2.bb6
-rw-r--r--packages/xfdesktop/xfdesktop_4.3.99.2.bb6
-rw-r--r--packages/xfsprogs/xfsprogs_2.8.16.bb5
-rw-r--r--packages/xfwm4-themes/xfwm4-themes_4.2.0.bb18
-rw-r--r--packages/xfwm4-themes/xfwm4-themes_4.3.99.2.bb5
-rw-r--r--packages/xfwm4/xfwm4_4.2.0.bb22
-rw-r--r--packages/xfwm4/xfwm4_4.2.3.2.bb5
-rw-r--r--packages/xfwm4/xfwm4_4.3.99.2.bb5
-rw-r--r--packages/xkbd/xkbd-layout-ru_0.1.1.bb21
-rw-r--r--packages/xorg-app/appres_1.0.1.bb7
-rw-r--r--packages/xorg-app/appres_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/bdftopcf-native_X11R7.0-1.0.0.bb12
-rw-r--r--packages/xorg-app/bdftopcf_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/beforelight_1.0.2.bb7
-rw-r--r--packages/xorg-app/beforelight_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/bitmap_X11R7.0-1.0.1.bb5
-rw-r--r--packages/xorg-app/bitmap_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/editres_1.0.2.bb7
-rw-r--r--packages/xorg-app/editres_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/fonttosfnt_1.0.3.bb7
-rw-r--r--packages/xorg-app/fonttosfnt_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/fslsfonts_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/fstobdf_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/fstobdf_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/iceauth_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/ico_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/lbxproxy_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/listres_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/luit_1.0.2.bb7
-rw-r--r--packages/xorg-app/luit_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/mkcfm_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/mkfontdir-native_1.0.3.bb11
-rw-r--r--packages/xorg-app/mkfontdir-native_X11R7.0-1.0.1.bb9
-rw-r--r--packages/xorg-app/mkfontdir-native_X11R7.1-1.0.2.bb9
-rw-r--r--packages/xorg-app/mkfontdir_1.0.3.bb6
-rw-r--r--packages/xorg-app/mkfontdir_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/mkfontdir_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/mkfontscale-native_X11R7.0-1.0.1.bb10
-rw-r--r--packages/xorg-app/mkfontscale_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/oclock_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/proxymngr_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/rgb_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/rgb_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-app/rstart_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/rstart_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/scripts_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-app/sessreg_1.0.2.bb7
-rw-r--r--packages/xorg-app/sessreg_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/setxkbmap_1.0.3.bb7
-rw-r--r--packages/xorg-app/setxkbmap_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/setxkbmap_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/showfont_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/smproxy_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/smproxy_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/twm_1.0.3.bb11
-rw-r--r--packages/xorg-app/twm_X11R7.0-1.0.1.bb10
-rw-r--r--packages/xorg-app/viewres_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/x11perf_1.4.1.bb6
-rw-r--r--packages/xorg-app/x11perf_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/x11perf_X11R7.1-1.4.1.bb5
-rw-r--r--packages/xorg-app/xauth_1.0.2.bb6
-rw-r--r--packages/xorg-app/xauth_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xbiff_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xcalc_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xclipboard_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xclock_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xclock_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xcmsdb_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xconsole_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xconsole_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xcursorgen_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/xcursorgen_X11R7.1-1.0.1.bb6
-rw-r--r--packages/xorg-app/xdbedizzy_1.0.2.bb7
-rw-r--r--packages/xorg-app/xdbedizzy_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xditview_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xdm_1.1.3.bb8
-rw-r--r--packages/xorg-app/xdm_1.1.4.bb8
-rw-r--r--packages/xorg-app/xdm_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-app/xdm_X11R7.1-1.0.4.bb7
-rw-r--r--packages/xorg-app/xdpyinfo_1.0.2.bb11
-rw-r--r--packages/xorg-app/xdpyinfo_X11R7.0-1.0.1.bb10
-rw-r--r--packages/xorg-app/xdriinfo_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/xdriinfo_X11R7.1-1.0.1.bb6
-rw-r--r--packages/xorg-app/xedit_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xedit_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xev-1.0.2/.mtn2git_empty0
-rw-r--r--packages/xorg-app/xev-1.0.2/diet-x11.patch80
-rw-r--r--packages/xorg-app/xev_1.0.2.bb7
-rw-r--r--packages/xorg-app/xev_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-app/xeyes_X11R7.0-1.0.1.bb5
-rw-r--r--packages/xorg-app/xf86dga_1.0.2.bb7
-rw-r--r--packages/xorg-app/xf86dga_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfd_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfindproxy_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfontsel_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfs_1.0.4.bb7
-rw-r--r--packages/xorg-app/xfs_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfs_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xfsinfo_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xfwp_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xgamma_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xgc_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xhost_1.0.2.bb6
-rw-r--r--packages/xorg-app/xhost_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-app/xhost_X11R7.1-1.0.1.bb7
-rw-r--r--packages/xorg-app/xinit_1.0.3.bb8
-rw-r--r--packages/xorg-app/xinit_1.0.4.bb6
-rw-r--r--packages/xorg-app/xinit_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-app/xinit_X11R7.1-1.0.2.bb7
-rw-r--r--packages/xorg-app/xkbcomp_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xkbcomp_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xkbevd_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xkbevd_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xkbprint_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xkbutils_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xkill_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xload_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xlogo_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xlsatoms_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xlsclients_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xlsfonts_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xmag_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xman_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-app/xman_X11R7.1-1.0.2.bb8
-rw-r--r--packages/xorg-app/xmessage_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xmh_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xmodmap_1.0.2.bb5
-rw-r--r--packages/xorg-app/xmodmap_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-app/xmodmap_X11R7.1-1.0.1.bb7
-rw-r--r--packages/xorg-app/xmore_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xorg-app-common.inc16
-rw-r--r--packages/xorg-app/xphelloworld_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xplsprinters_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xpr_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xprehashprinterlist_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xprop_1.0.2.bb7
-rw-r--r--packages/xorg-app/xprop_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xrandr/.mtn2git_empty0
-rw-r--r--packages/xorg-app/xrandr/resolve_symbol_clash.patch33
-rw-r--r--packages/xorg-app/xrandr_1.2.0.bb9
-rw-r--r--packages/xorg-app/xrandr_1.2.2.bb8
-rw-r--r--packages/xorg-app/xrandr_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-app/xrandr_X11R7.1-1.0.2.bb7
-rw-r--r--packages/xorg-app/xrdb_1.0.3.bb6
-rw-r--r--packages/xorg-app/xrdb_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-app/xrdb_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xrefresh_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xrefresh_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xrx_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xset_1.0.2.bb11
-rw-r--r--packages/xorg-app/xset_X11R7.0-1.0.1.bb12
-rw-r--r--packages/xorg-app/xset_X11R7.1-1.0.2.bb12
-rw-r--r--packages/xorg-app/xsetmode_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/xsetpointer_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-app/xsetroot_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xsm_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xstdcmap_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xterm_207.bb2
-rw-r--r--packages/xorg-app/xtrap_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xtrap_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xvidtune_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xvinfo_1.0.1.bb5
-rw-r--r--packages/xorg-app/xvinfo_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xwd_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xwininfo_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-app/xwininfo_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-app/xwud_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-data/xbitmaps_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-data/xcursor-themes_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-data/xkbdata_X11R7.0-1.0.1.bb9
-rw-r--r--packages/xorg-doc/xorg-doc-common.inc3
-rw-r--r--packages/xorg-doc/xorg-docs_X11R7.0-1.0.1.bb9
-rw-r--r--packages/xorg-doc/xorg-docs_X11R7.1-1.2.bb9
-rw-r--r--packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb8
-rw-r--r--packages/xorg-doc/xorg-sgml-doctools_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-doc/xorg-sgml-doctools_X11R7.1-1.1.bb7
-rw-r--r--packages/xorg-driver/xf86-input-acecad_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-acecad_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-aiptek_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-aiptek_X11R7.1-1.0.1.bb6
-rw-r--r--packages/xorg-driver/xf86-input-calcomp_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-calcomp_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-citron_X11R7.0-2.1.1.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-citron_X11R7.1-2.2.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-digitaledge_X11R7.0-1.0.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-input-digitaledge_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-dmc_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-dmc_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-dynapro_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-dynapro_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-elo2300_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-elo2300_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-evdev_1.1.5.bb7
-rw-r--r--packages/xorg-driver/xf86-input-evdev_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-evdev_X11R7.1-1.1.2.bb6
-rw-r--r--packages/xorg-driver/xf86-input-fpit_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-fpit_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-hyperpen_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-hyperpen_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-jamstudio_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-jamstudio_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-joystick_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-joystick_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-keyboard_1.1.1.bb7
-rw-r--r--packages/xorg-driver/xf86-input-keyboard_1.2.0.bb7
-rw-r--r--packages/xorg-driver/xf86-input-keyboard_X11R7.0-1.0.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-input-keyboard_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-magellan_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-magellan_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-magictouch_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-magictouch_X11R7.1-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-microtouch_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-microtouch_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-mouse_1.1.2.bb7
-rw-r--r--packages/xorg-driver/xf86-input-mouse_1.2.1.bb7
-rw-r--r--packages/xorg-driver/xf86-input-mouse_X11R7.0-1.0.3.1.bb6
-rw-r--r--packages/xorg-driver/xf86-input-mouse_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-mutouch_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-mutouch_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-palmax_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-palmax_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-penmount_1.2.0.bb7
-rw-r--r--packages/xorg-driver/xf86-input-penmount_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-penmount_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-spaceorb_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-spaceorb_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-summa_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-summa_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-tek4957_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-tek4957_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-ur98_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-ur98_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-input-vmmouse_X11R7.1-12.4.0.bb8
-rw-r--r--packages/xorg-driver/xf86-input-void_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-input-void_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-apm_X11R7.0-1.0.1.5.bb6
-rw-r--r--packages/xorg-driver/xf86-video-apm_X11R7.1-1.1.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-ark_X11R7.0-0.5.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-ark_X11R7.1-0.6.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-ast_X11R7.1-0.81.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-ati_6.6.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-ati_X11R7.0-6.5.7.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-ati_X11R7.1-6.6.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-chips_X11R7.0-1.0.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-chips_X11R7.1-1.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-cirrus_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-cirrus_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-cyrix_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-cyrix_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-dummy_X11R7.0-0.1.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-dummy_X11R7.1-0.2.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-fbdev_0.3.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-fbdev_X11R7.0-0.1.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-fbdev_X11R7.1-0.3.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-glint_X11R7.0-1.0.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-glint_X11R7.1-1.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i128_1.1.0.6.bb6
-rw-r--r--packages/xorg-driver/xf86-video-i128_X11R7.0-1.1.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i128_X11R7.1-1.1.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i740_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i740_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i810_1.6.5.bb7
-rw-r--r--packages/xorg-driver/xf86-video-i810_X11R7.0-1.4.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-i810_X11R7.1-1.6.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-imstt_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-imstt_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-mga_X11R7.0-1.2.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-mga_X11R7.1-1.4.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-neomagic_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-neomagic_X11R7.1-1.1.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-newport_0.2.1.bb7
-rw-r--r--packages/xorg-driver/xf86-video-newport_X11R7.0-0.1.4.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-newport_X11R7.1-0.2.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-nsc_2.8.2.bb9
-rw-r--r--packages/xorg-driver/xf86-video-nsc_X11R7.0-2.7.6.5.bb6
-rw-r--r--packages/xorg-driver/xf86-video-nsc_X11R7.1-2.8.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-nv_1.2.2.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-nv_X11R7.0-1.0.1.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-nv_X11R7.1-1.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-rendition_4.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-rendition_X11R7.0-4.0.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-rendition_X11R7.1-4.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-s3_0.5.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-s3_X11R7.0-0.3.5.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-s3_X11R7.1-0.4.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-s3virge_X11R7.0-1.8.6.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-s3virge_X11R7.1-1.9.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-savage_2.1.2.bb6
-rw-r--r--packages/xorg-driver/xf86-video-savage_X11R7.0-2.0.2.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-savage_X11R7.1-2.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-siliconmotion_1.5.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-siliconmotion_X11R7.0-1.3.1.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-siliconmotion_X11R7.1-1.4.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-sis_0.9.3.bb7
-rw-r--r--packages/xorg-driver/xf86-video-sis_X11R7.0-0.8.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sis_X11R7.1-0.9.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sisusb_X11R7.0-0.7.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sisusb_X11R7.1-0.8.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sunbw2_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sunbw2_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg14_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg14_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg3_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg3_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg6_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suncg6_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-sunffb_X11R7.0-1.0.1.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sunffb_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-sunleo_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-sunleo_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suntcx_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-suntcx_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-tdfx_1.3.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-tdfx_X11R7.0-1.1.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-tdfx_X11R7.1-1.2.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-tga_X11R7.0-1.0.0.5.bb6
-rw-r--r--packages/xorg-driver/xf86-video-tga_X11R7.1-1.1.0.bb6
-rw-r--r--packages/xorg-driver/xf86-video-trident_1.2.3.bb6
-rw-r--r--packages/xorg-driver/xf86-video-trident_X11R7.0-1.0.1.2.bb5
-rw-r--r--packages/xorg-driver/xf86-video-trident_X11R7.1-1.2.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-tseng_1.1.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-tseng_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-tseng_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-v4l_X11R7.0-0.0.1.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-v4l_X11R7.1-0.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vesa_1.3.0.bb8
-rw-r--r--packages/xorg-driver/xf86-video-vesa_X11R7.0-1.0.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vesa_X11R7.1-1.2.0.bb7
-rw-r--r--packages/xorg-driver/xf86-video-vga_X11R7.0-4.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vga_X11R7.1-4.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-via_0.2.2.bb6
-rw-r--r--packages/xorg-driver/xf86-video-via_X11R7.0-0.1.33.2.bb5
-rw-r--r--packages/xorg-driver/xf86-video-via_X11R7.1-0.2.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vmware_10.14.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-vmware_X11R7.0-10.11.1.3.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vmware_X11R7.1-10.13.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-voodoo_1.1.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-voodoo_X11R7.0-1.0.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-voodoo_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-driver/xorg-driver-common.inc3
-rw-r--r--packages/xorg-font/encodings_1.0.2.bb8
-rw-r--r--packages/xorg-font/encodings_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-font/font-adobe-100dpi_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-font/font-adobe-75dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-adobe-utopia-100dpi_X11R7.0-1.0.1.bb5
-rw-r--r--packages/xorg-font/font-adobe-utopia-75dpi_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-font/font-adobe-utopia-type1_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-font/font-alias_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-font/font-arabic-misc_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-font/font-bh-100dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bh-75dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bh-lucidatypewriter-100dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bh-lucidatypewriter-75dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bh-ttf_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bh-type1_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bitstream-100dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bitstream-75dpi_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bitstream-speedo_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-bitstream-type1_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-cronyx-cyrillic_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-cursor-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-daewoo-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-dec-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-ibm-type1_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-isas-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-jis-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-micro-misc_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-font/font-misc-cyrillic_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-misc-ethiopic_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-misc-meltho_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-font/font-misc-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-mutt-misc_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-font/font-schumacher-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-screen-cyrillic_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-sony-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-sun-misc_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-util-native_X11R7.0-1.0.0.bb11
-rw-r--r--packages/xorg-font/font-util-native_X11R7.1-1.0.1.bb11
-rw-r--r--packages/xorg-font/font-util_X11R7.0-1.0.0.bb7
-rw-r--r--packages/xorg-font/font-util_X11R7.1-1.0.1.bb9
-rw-r--r--packages/xorg-font/font-winitzki-cyrillic_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/font-xfree86-type1_X11R7.0-1.0.0.bb5
-rw-r--r--packages/xorg-font/xorg-font-common.inc3
-rw-r--r--packages/xorg-lib/diet-x11/makekeys.diff12
-rw-r--r--packages/xorg-lib/diet-x11_1.1.1.bb11
-rw-r--r--packages/xorg-lib/diet-x11_1.1.2.bb8
-rw-r--r--packages/xorg-lib/diet-x11_X11R7.0-1.0.0.bb13
-rw-r--r--packages/xorg-lib/diet-x11_X11R7.1-1.0.1.bb13
-rw-r--r--packages/xorg-lib/files/ruutf8.patch12
-rw-r--r--packages/xorg-lib/libapplewm_1.0.0.bb7
-rw-r--r--packages/xorg-lib/libapplewm_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libdmx_1.0.2.bb6
-rw-r--r--packages/xorg-lib/libdmx_X11R7.0-1.0.1.bb5
-rw-r--r--packages/xorg-lib/libdmx_X11R7.1-1.0.2.bb5
-rw-r--r--packages/xorg-lib/libfontenc-native_1.0.4.bb8
-rw-r--r--packages/xorg-lib/libfontenc-native_X11R7.0-1.0.1.bb11
-rw-r--r--packages/xorg-lib/libfontenc-native_X11R7.1-1.0.2.bb11
-rw-r--r--packages/xorg-lib/libfontenc_1.0.4.bb7
-rw-r--r--packages/xorg-lib/libfontenc_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libfontenc_X11R7.1-1.0.2.bb8
-rw-r--r--packages/xorg-lib/libfs_1.0.0.bb8
-rw-r--r--packages/xorg-lib/libfs_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libice_1.0.3.bb9
-rw-r--r--packages/xorg-lib/libice_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libice_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/liblbxutil_1.0.1.bb10
-rw-r--r--packages/xorg-lib/liblbxutil_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/liblbxutil_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/liboldx_1.0.1.bb6
-rw-r--r--packages/xorg-lib/liboldx_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libsm_1.0.2.bb10
-rw-r--r--packages/xorg-lib/libsm_1.0.3.bb8
-rw-r--r--packages/xorg-lib/libsm_X11R7.0-1.0.0.bb9
-rw-r--r--packages/xorg-lib/libsm_X11R7.1-1.0.1.bb9
-rw-r--r--packages/xorg-lib/libwindowswm_1.0.0.bb6
-rw-r--r--packages/xorg-lib/libwindowswm_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libx11-native_1.0.1.bb28
-rw-r--r--packages/xorg-lib/libx11-native_X11R7.0-1.0.0.bb25
-rw-r--r--packages/xorg-lib/libx11-native_X11R7.1-1.0.1.bb25
-rw-r--r--packages/xorg-lib/libx11/makekeys.diff12
-rw-r--r--packages/xorg-lib/libx11_1.1.1.bb29
-rw-r--r--packages/xorg-lib/libx11_1.1.2.bb24
-rw-r--r--packages/xorg-lib/libx11_X11R7.0-1.0.0.bb22
-rw-r--r--packages/xorg-lib/libx11_X11R7.1-1.0.1.bb24
-rw-r--r--packages/xorg-lib/libx11_git.bb18
-rw-r--r--packages/xorg-lib/libxau-native_1.0.3.bb8
-rw-r--r--packages/xorg-lib/libxau-native_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxau-native_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxau_1.0.3.bb8
-rw-r--r--packages/xorg-lib/libxau_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxau_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxaw_1.0.3.bb21
-rw-r--r--packages/xorg-lib/libxaw_X11R7.0-1.0.1.bb15
-rw-r--r--packages/xorg-lib/libxaw_X11R7.1-1.0.2.bb15
-rw-r--r--packages/xorg-lib/libxcalibrate/.mtn2git_empty0
-rw-r--r--packages/xorg-lib/libxcalibrate/coords.patch50
-rw-r--r--packages/xorg-lib/libxcalibrate_git.bb19
-rw-r--r--packages/xorg-lib/libxcomposite_0.3.1.bb12
-rw-r--r--packages/xorg-lib/libxcomposite_0.4.0.bb11
-rw-r--r--packages/xorg-lib/libxcomposite_X11R7.0-0.2.2.2.bb11
-rw-r--r--packages/xorg-lib/libxcomposite_X11R7.1-0.3.bb11
-rw-r--r--packages/xorg-lib/libxcursor_1.1.8.bb9
-rw-r--r--packages/xorg-lib/libxcursor_X11R7.0-1.1.5.2.bb10
-rw-r--r--packages/xorg-lib/libxcursor_X11R7.1-1.1.6.bb10
-rw-r--r--packages/xorg-lib/libxdamage_1.0.4.bb11
-rw-r--r--packages/xorg-lib/libxdamage_1.1.1.bb10
-rw-r--r--packages/xorg-lib/libxdamage_X11R7.0-1.0.2.2.bb10
-rw-r--r--packages/xorg-lib/libxdamage_X11R7.1-1.0.3.bb10
-rw-r--r--packages/xorg-lib/libxdmcp-native_1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxdmcp-native_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxdmcp-native_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxdmcp_1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxdmcp_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxdmcp_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxevie_1.0.2.bb8
-rw-r--r--packages/xorg-lib/libxevie_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxevie_X11R7.1-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxext_1.0.2.bb11
-rw-r--r--packages/xorg-lib/libxext_1.0.3.bb9
-rw-r--r--packages/xorg-lib/libxext_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxext_X11R7.1-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxfixes_4.0.3.bb8
-rw-r--r--packages/xorg-lib/libxfixes_X11R7.0-3.0.1.2.bb9
-rw-r--r--packages/xorg-lib/libxfixes_X11R7.1-4.0.1.bb9
-rw-r--r--packages/xorg-lib/libxfont-native_1.3.0.bb10
-rw-r--r--packages/xorg-lib/libxfont-native_X11R7.0-1.0.0.bb12
-rw-r--r--packages/xorg-lib/libxfont-native_X11R7.1-1.1.0.bb12
-rw-r--r--packages/xorg-lib/libxfont-native_X11R7.1-1.2.0.bb12
-rw-r--r--packages/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch188
-rw-r--r--packages/xorg-lib/libxfont_1.2.7.bb14
-rw-r--r--packages/xorg-lib/libxfont_1.2.8.bb14
-rw-r--r--packages/xorg-lib/libxfont_1.3.0.bb13
-rw-r--r--packages/xorg-lib/libxfont_X11R7.0-1.0.0.bb15
-rw-r--r--packages/xorg-lib/libxfont_X11R7.1-1.1.0.bb11
-rw-r--r--packages/xorg-lib/libxfont_X11R7.1-1.2.0.bb17
-rw-r--r--packages/xorg-lib/libxfontcache_1.0.4.bb8
-rw-r--r--packages/xorg-lib/libxfontcache_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxfontcache_X11R7.1-1.0.2.bb8
-rw-r--r--packages/xorg-lib/libxft_2.1.12.bb20
-rw-r--r--packages/xorg-lib/libxft_X11R7.0-2.1.12.bb23
-rw-r--r--packages/xorg-lib/libxft_X11R7.0-2.1.8.2.bb19
-rw-r--r--packages/xorg-lib/libxi_1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxi_1.1.0.bb9
-rw-r--r--packages/xorg-lib/libxi_1.1.2.bb8
-rw-r--r--packages/xorg-lib/libxi_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxi_X11R7.1-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxinerama_1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxinerama_X11R7.0-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxkbfile_1.0.4.bb7
-rw-r--r--packages/xorg-lib/libxkbfile_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxkbfile_X11R7.1-1.0.3.bb8
-rw-r--r--packages/xorg-lib/libxkbui_1.0.2.bb8
-rw-r--r--packages/xorg-lib/libxkbui_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxkbui_X11R7.1-1.0.2.bb8
-rw-r--r--packages/xorg-lib/libxmu_1.0.3.bb16
-rw-r--r--packages/xorg-lib/libxmu_X11R7.0-1.0.0.bb16
-rw-r--r--packages/xorg-lib/libxmu_X11R7.1-1.0.1.bb16
-rw-r--r--packages/xorg-lib/libxp_1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxp_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/libxpm_3.5.6.bb13
-rw-r--r--packages/xorg-lib/libxpm_X11R7.0-3.5.4.2.bb13
-rw-r--r--packages/xorg-lib/libxpm_X11R7.1-3.5.5.bb13
-rw-r--r--packages/xorg-lib/libxprintapputil_1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxprintapputil_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxprintutil_1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxprintutil_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxrandr_1.1.2.bb10
-rw-r--r--packages/xorg-lib/libxrandr_1.2.1.bb9
-rw-r--r--packages/xorg-lib/libxrandr_X11R7.0-1.1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxrandr_X11R7.1-1.1.1.bb9
-rw-r--r--packages/xorg-lib/libxrender_0.9.2.bb9
-rw-r--r--packages/xorg-lib/libxrender_X11R7.0-0.9.0.2.bb9
-rw-r--r--packages/xorg-lib/libxrender_X11R7.1-0.9.1.bb9
-rw-r--r--packages/xorg-lib/libxres_1.0.3.bb8
-rw-r--r--packages/xorg-lib/libxres_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxres_X11R7.1-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxscrnsaver_1.1.2.bb11
-rw-r--r--packages/xorg-lib/libxscrnsaver_X11R7.0-1.0.1.bb13
-rw-r--r--packages/xorg-lib/libxscrnsaver_X11R7.1-1.1.0.bb13
-rw-r--r--packages/xorg-lib/libxt_1.0.4.bb20
-rw-r--r--packages/xorg-lib/libxt_1.0.5.bb19
-rw-r--r--packages/xorg-lib/libxt_X11R7.0-1.0.0.bb19
-rw-r--r--packages/xorg-lib/libxt_X11R7.1-1.0.2.bb19
-rw-r--r--packages/xorg-lib/libxtrap_1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxtrap_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxtst_1.0.2.bb9
-rw-r--r--packages/xorg-lib/libxtst_X11R7.0-1.0.1.bb10
-rw-r--r--packages/xorg-lib/libxv_1.0.3.bb8
-rw-r--r--packages/xorg-lib/libxv_X11R7.0-1.0.1.bb9
-rw-r--r--packages/xorg-lib/libxvmc_1.0.4.bb8
-rw-r--r--packages/xorg-lib/libxvmc_X11R7.0-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxvmc_X11R7.1-1.0.2.bb8
-rw-r--r--packages/xorg-lib/libxxf86dga_1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxxf86dga_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxxf86dga_X11R7.1-1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxxf86misc_1.0.1.bb9
-rw-r--r--packages/xorg-lib/libxxf86misc_X11R7.0-1.0.0.bb9
-rw-r--r--packages/xorg-lib/libxxf86misc_X11R7.1-1.0.1.bb9
-rw-r--r--packages/xorg-lib/libxxf86vm_1.0.1.bb8
-rw-r--r--packages/xorg-lib/libxxf86vm_X11R7.0-1.0.0.bb8
-rw-r--r--packages/xorg-lib/libxxf86vm_X11R7.1-1.0.1.bb8
-rw-r--r--packages/xorg-lib/pixman_0.9.4.bb6
-rw-r--r--packages/xorg-lib/xorg-headers-native.bb1
-rw-r--r--packages/xorg-lib/xorg-lib-common.inc8
-rw-r--r--packages/xorg-lib/xtrans-native_1.0.3.bb10
-rw-r--r--packages/xorg-lib/xtrans-native_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-lib/xtrans_1.0.3.bb7
-rw-r--r--packages/xorg-lib/xtrans_X11R7.0-1.0.0.bb9
-rw-r--r--packages/xorg-proto/applewmproto_1.0.3.bb4
-rw-r--r--packages/xorg-proto/applewmproto_X11R7.0-1.0.3.bb6
-rw-r--r--packages/xorg-proto/bigreqsproto-native_1.0.2.bb7
-rw-r--r--packages/xorg-proto/bigreqsproto-native_X11R7.0-1.0.2.bb8
-rw-r--r--packages/xorg-proto/bigreqsproto_1.0.2.bb4
-rw-r--r--packages/xorg-proto/bigreqsproto_X11R7.0-1.0.2.bb6
-rw-r--r--packages/xorg-proto/calibrateproto/.mtn2git_empty0
-rw-r--r--packages/xorg-proto/calibrateproto/coords.patch56
-rw-r--r--packages/xorg-proto/calibrateproto_git.bb8
-rw-r--r--packages/xorg-proto/compositeproto_0.4.bb4
-rw-r--r--packages/xorg-proto/compositeproto_X11R7.0-0.2.2.bb7
-rw-r--r--packages/xorg-proto/compositeproto_X11R7.1-0.3.1.bb7
-rw-r--r--packages/xorg-proto/damageproto_1.1.0.bb5
-rw-r--r--packages/xorg-proto/damageproto_X11R7.0-1.0.3.bb7
-rw-r--r--packages/xorg-proto/dmxproto_2.2.2.bb4
-rw-r--r--packages/xorg-proto/dmxproto_X11R7.0-2.2.2.bb5
-rw-r--r--packages/xorg-proto/evieext_1.0.2.bb4
-rw-r--r--packages/xorg-proto/evieext_X11R7.0-1.0.2.bb5
-rw-r--r--packages/xorg-proto/fixesproto_4.0.bb5
-rw-r--r--packages/xorg-proto/fixesproto_X11R7.0-3.0.2.bb7
-rw-r--r--packages/xorg-proto/fixesproto_X11R7.1-4.0.bb7
-rw-r--r--packages/xorg-proto/fontcacheproto-native_0.1.2.bb7
-rw-r--r--packages/xorg-proto/fontcacheproto-native_X11R7.0-0.1.2.bb8
-rw-r--r--packages/xorg-proto/fontcacheproto_0.1.2.bb4
-rw-r--r--packages/xorg-proto/fontcacheproto_X11R7.0-0.1.2.bb5
-rw-r--r--packages/xorg-proto/fontsproto-native_2.0.2.bb9
-rw-r--r--packages/xorg-proto/fontsproto-native_X11R7.0-2.0.2.bb8
-rw-r--r--packages/xorg-proto/fontsproto_2.0.2.bb4
-rw-r--r--packages/xorg-proto/fontsproto_X11R7.0-2.0.2.bb5
-rw-r--r--packages/xorg-proto/glproto_1.4.8.bb4
-rw-r--r--packages/xorg-proto/glproto_X11R7.0-1.4.3.bb5
-rw-r--r--packages/xorg-proto/glproto_X11R7.1-1.4.7.bb5
-rw-r--r--packages/xorg-proto/inputproto-native_1.4.2.bb7
-rw-r--r--packages/xorg-proto/inputproto-native_X11R7.0-1.3.2.bb8
-rw-r--r--packages/xorg-proto/inputproto_1.4.1.bb4
-rw-r--r--packages/xorg-proto/inputproto_1.4.2.bb4
-rw-r--r--packages/xorg-proto/inputproto_X11R7.0-1.3.2.bb5
-rw-r--r--packages/xorg-proto/inputproto_X11R7.1-1.4.bb4
-rw-r--r--packages/xorg-proto/kbproto-native_1.0.3.bb7
-rw-r--r--packages/xorg-proto/kbproto-native_X11R7.0-1.0.2.bb8
-rw-r--r--packages/xorg-proto/kbproto_1.0.3.bb4
-rw-r--r--packages/xorg-proto/kbproto_X11R7.0-1.0.2.bb5
-rw-r--r--packages/xorg-proto/kbproto_X11R7.1-1.0.3.bb8
-rw-r--r--packages/xorg-proto/printproto_1.0.3.bb4
-rw-r--r--packages/xorg-proto/printproto_X11R7.0-1.0.3.bb5
-rw-r--r--packages/xorg-proto/randrproto_1.2.1.bb5
-rw-r--r--packages/xorg-proto/randrproto_X11R7.0-1.1.2.bb7
-rw-r--r--packages/xorg-proto/recordproto_1.13.2.bb5
-rw-r--r--packages/xorg-proto/recordproto_X11R7.0-1.13.2.bb7
-rw-r--r--packages/xorg-proto/renderproto_0.9.2.bb5
-rw-r--r--packages/xorg-proto/renderproto_X11R7.0-0.9.2.bb7
-rw-r--r--packages/xorg-proto/resourceproto_1.0.2.bb5
-rw-r--r--packages/xorg-proto/resourceproto_X11R7.0-1.0.2.bb7
-rw-r--r--packages/xorg-proto/scrnsaverproto_1.1.0.bb4
-rw-r--r--packages/xorg-proto/scrnsaverproto_X11R7.0-1.0.2.bb5
-rw-r--r--packages/xorg-proto/scrnsaverproto_X11R7.1-1.1.0.bb5
-rw-r--r--packages/xorg-proto/trapproto_3.4.3.bb4
-rw-r--r--packages/xorg-proto/trapproto_X11R7.0-3.4.3.bb5
-rw-r--r--packages/xorg-proto/videoproto_2.2.2.bb4
-rw-r--r--packages/xorg-proto/videoproto_X11R7.0-2.2.2.bb5
-rw-r--r--packages/xorg-proto/windowswmproto_1.0.3.bb4
-rw-r--r--packages/xorg-proto/windowswmproto_X11R7.0-1.0.3.bb5
-rw-r--r--packages/xorg-proto/xcmiscproto-native_1.1.2.bb7
-rw-r--r--packages/xorg-proto/xcmiscproto-native_X11R7.0-1.1.2.bb8
-rw-r--r--packages/xorg-proto/xcmiscproto_1.1.2.bb4
-rw-r--r--packages/xorg-proto/xcmiscproto_X11R7.0-1.1.2.bb5
-rw-r--r--packages/xorg-proto/xextproto-native_7.0.2.bb7
-rw-r--r--packages/xorg-proto/xextproto-native_X11R7.0-7.0.2.bb10
-rw-r--r--packages/xorg-proto/xextproto_7.0.2.bb4
-rw-r--r--packages/xorg-proto/xextproto_X11R7.0-7.0.2.bb7
-rw-r--r--packages/xorg-proto/xf86bigfontproto-native_1.1.2.bb7
-rw-r--r--packages/xorg-proto/xf86bigfontproto-native_X11R7.0-1.1.2.bb8
-rw-r--r--packages/xorg-proto/xf86bigfontproto_1.1.2.bb4
-rw-r--r--packages/xorg-proto/xf86bigfontproto_X11R7.0-1.1.2.bb5
-rw-r--r--packages/xorg-proto/xf86dgaproto_2.0.2.bb5
-rw-r--r--packages/xorg-proto/xf86dgaproto_X11R7.0-2.0.2.bb7
-rw-r--r--packages/xorg-proto/xf86driproto_2.0.3.bb4
-rw-r--r--packages/xorg-proto/xf86driproto_X11R7.0-2.0.3.bb5
-rw-r--r--packages/xorg-proto/xf86miscproto_0.9.2.bb4
-rw-r--r--packages/xorg-proto/xf86miscproto_X11R7.0-0.9.2.bb5
-rw-r--r--packages/xorg-proto/xf86rushproto_1.1.2.bb4
-rw-r--r--packages/xorg-proto/xf86rushproto_X11R7.0-1.1.2.bb5
-rw-r--r--packages/xorg-proto/xf86vidmodeproto_2.2.2.bb5
-rw-r--r--packages/xorg-proto/xf86vidmodeproto_X11R7.0-2.2.2.bb7
-rw-r--r--packages/xorg-proto/xineramaproto_1.1.2.bb4
-rw-r--r--packages/xorg-proto/xineramaproto_X11R7.0-1.1.2.bb5
-rw-r--r--packages/xorg-proto/xorg-proto-common.inc9
-rw-r--r--packages/xorg-proto/xproto-native_7.0.10.bb7
-rw-r--r--packages/xorg-proto/xproto-native_X11R7.0-7.0.4.bb8
-rw-r--r--packages/xorg-proto/xproto-native_X11R7.1-7.0.5.bb8
-rw-r--r--packages/xorg-proto/xproto_7.0.10.bb4
-rw-r--r--packages/xorg-proto/xproto_X11R7.0-7.0.4.bb5
-rw-r--r--packages/xorg-proto/xproto_X11R7.1-7.0.5.bb5
-rw-r--r--packages/xorg-proto/xproto_X11R7.1-7.0.8.bb10
-rw-r--r--packages/xorg-proto/xproxymanagementprotocol_1.0.2.bb5
-rw-r--r--packages/xorg-proto/xproxymanagementprotocol_X11R7.0-1.0.2.bb6
-rw-r--r--packages/xorg-util/gccmakedep_1.0.2.bb7
-rw-r--r--packages/xorg-util/gccmakedep_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-util/gccmakedep_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-util/imake_1.0.2.bb7
-rw-r--r--packages/xorg-util/imake_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-util/imake_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-util/lndir_1.0.1.bb5
-rw-r--r--packages/xorg-util/lndir_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-util/makedepend-native_1.0.1.bb9
-rw-r--r--packages/xorg-util/makedepend-native_X11R7.0-1.0.0.bb10
-rw-r--r--packages/xorg-util/makedepend_1.0.1.bb5
-rw-r--r--packages/xorg-util/makedepend_X11R7.0-1.0.0.bb6
-rw-r--r--packages/xorg-util/util-macros-native_1.1.5.bb9
-rw-r--r--packages/xorg-util/util-macros-native_X11R7.0-1.0.1.bb9
-rw-r--r--packages/xorg-util/util-macros-native_X11R7.1-1.0.2.bb9
-rw-r--r--packages/xorg-util/util-macros_1.1.5.bb7
-rw-r--r--packages/xorg-util/util-macros_X11R7.0-1.0.1.bb6
-rw-r--r--packages/xorg-util/util-macros_X11R7.1-1.0.2.bb6
-rw-r--r--packages/xorg-util/util-macros_X11R7.1-1.1.5.bb10
-rw-r--r--packages/xorg-util/xorg-cf-files_1.0.2.bb8
-rw-r--r--packages/xorg-util/xorg-cf-files_X11R7.0-1.0.1.bb7
-rw-r--r--packages/xorg-util/xorg-cf-files_X11R7.1-1.0.2.bb7
-rw-r--r--packages/xorg-util/xorg-util-common.inc7
-rw-r--r--packages/xorg-xserver/xorg-xserver-common.inc26
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/.mtn2git_empty0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/disable-xf86-dga-xorgcfg.patch (renamed from packages/xorg-xserver/xserver-kdrive/disable-xf86-dga-xorgcfg-git.patch)0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/enable-epson.patch11
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/enable-tslib.patch12
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/enable-xcalibrate.patch51
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/fbcompositesrc8888revnpx0565.patch194
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch9079
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/optional-xkb.patch58
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.2.0/xcalibrate_coords.patch122
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/.mtn2git_empty0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/disable-xf86-dga-xorgcfg.patch39
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-epson.patch11
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-tslib.patch12
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-xcalibrate.patch101
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/fix_default_mode.patch26
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/hide-cursor-and-ppm-root.patch307
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/optional-xkb.patch58
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/xcalibrate_coords.patch122
-rw-r--r--packages/xorg-xserver/xserver-kdrive-common.inc129
-rw-r--r--packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb26
-rw-r--r--packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb52
-rw-r--r--packages/xorg-xserver/xserver-kdrive-omap/configure-tslib.patch13
-rw-r--r--packages/xorg-xserver/xserver-kdrive-omap/kmode.patch19
-rw-r--r--packages/xorg-xserver/xserver-kdrive-omap_6.6.3.bb23
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch20
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch124
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch20
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch37
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch12
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch23
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch (renamed from packages/xorg-xserver/xserver-kdrive-omap/fbdev-not-fix.patch)0
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch446
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch503
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kdrive-use-evdev.patch53
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/kmode.patch43
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/no-serial-probing.patch13
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/optional-xkb.patch54
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate.patch73
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate_coords.patch122
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap/xfbdev-fb-opt.patch82
-rw-r--r--packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb51
-rw-r--r--packages/xorg-xserver/xserver-kdrive/build-20050207-against-X11R7.diff464
-rw-r--r--packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch18
-rw-r--r--packages/xorg-xserver/xserver-kdrive/hide-cursor-and-ppm-root.patch307
-rw-r--r--packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch2584
-rw-r--r--packages/xorg-xserver/xserver-kdrive/w100-fix-offscreen-bmp.patch15
-rw-r--r--packages/xorg-xserver/xserver-kdrive/xfbdev-fb-opt.patch82
-rw-r--r--packages/xorg-xserver/xserver-kdrive_1.1.0.bb59
-rw-r--r--packages/xorg-xserver/xserver-kdrive_1.2.0.bb21
-rw-r--r--packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb22
-rw-r--r--packages/xorg-xserver/xserver-kdrive_X11R7.1-1.1.0.bb130
-rw-r--r--packages/xorg-xserver/xserver-kdrive_git.bb50
-rw-r--r--packages/xorg-xserver/xserver-xorg/no-screen-blanking.patch13
-rw-r--r--packages/xorg-xserver/xserver-xorg_1.2.0.bb12
-rw-r--r--packages/xorg-xserver/xserver-xorg_1.3.0.0.bb12
-rw-r--r--packages/xorg-xserver/xserver-xorg_X11R7.0-1.0.1.bb11
-rw-r--r--packages/xorg-xserver/xserver-xorg_X11R7.1-1.1.0.bb11
-rw-r--r--packages/xorg-xserver/xserver-xorg_cvs.bb1
-rw-r--r--packages/xournal/files/no-printing.diff178
-rw-r--r--packages/xournal/files/xournal.desktop9
-rw-r--r--packages/xournal/xournal_0.2.bb11
-rw-r--r--packages/xournal/xournal_0.3.1.bb11
-rw-r--r--packages/xournal/xournal_0.3.3.bb17
-rw-r--r--packages/xqt2/xqt2_20060509.bb8
-rw-r--r--packages/xscrnsaverh/xscrnsaverh_1.0.bb2
-rw-r--r--packages/xserver-common/files/Xserver-udev-input-helper.patch11
-rw-r--r--packages/xserver-common/files/at-fix-slcxxxx.patch8
-rw-r--r--packages/xserver-common/files/load-xmodmap-k26.patch23
-rw-r--r--packages/xserver-common/files/sl-cxx00-modmap.patch120
-rw-r--r--packages/xserver-common/files/softkeys-c7x0.patch52
-rw-r--r--packages/xserver-common/files/softkeys-slcxxxx-xmodmap.patch20
-rw-r--r--packages/xserver-common/xserver-common_1.14.bb5
-rw-r--r--packages/xserver-common/xserver-common_1.15.bb18
-rw-r--r--packages/xserver-common/xserver-common_1.16.bb23
-rw-r--r--packages/xserver-common/xserver-common_svn.bb9
-rw-r--r--packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xserver8
-rw-r--r--packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb4
-rw-r--r--packages/xtscal/xtscal.inc3
-rw-r--r--packages/xtscal/xtscal/change-cross.patch16
-rw-r--r--packages/xtscal/xtscal/cleanup.patch619
-rw-r--r--packages/xtscal/xtscal/xtscal-cxk.patch30
-rw-r--r--packages/xtscal/xtscal_0.6.3.bb14
-rw-r--r--packages/yeaphone/yeaphone_0.1.bb15
-rw-r--r--packages/zaurusd/files/alsa-cxx00-default.state.patch163
-rw-r--r--packages/zaurusd/files/disable-alsa-handling.patch16
-rw-r--r--packages/zaurusd/files/tslib-1.diff11
-rw-r--r--packages/zaurusd/files/zaurus-hinge.bl-off10
-rw-r--r--packages/zaurusd/files/zaurus-hinge.bl-on10
-rw-r--r--packages/zaurusd/files/zaurusd-mixer-callback.patch11
-rw-r--r--packages/zaurusd/zaurusd_svn.bb18
-rw-r--r--packages/zd1211/zd1211-firmware_1.3.bb16
-rw-r--r--packages/zip/zip-native_2.32.bb5
-rw-r--r--packages/zip/zip.inc5
-rw-r--r--packages/zip/zip_2.32.bb3
-rw-r--r--packages/zope/zope_3.3.1.bb45
-rw-r--r--packages/zten/.mtn2git_empty0
-rw-r--r--packages/zten/files/.mtn2git_empty0
-rw-r--r--packages/zten/files/zten.patch35
-rw-r--r--packages/zten/zten_1.6.2.bb27
4816 files changed, 439725 insertions, 166457 deletions
diff --git a/packages/acpid/acpid-1.0.2/.mtn2git_empty b/packages/0xFFFF/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/acpid/acpid-1.0.2/.mtn2git_empty
+++ b/packages/0xFFFF/.mtn2git_empty
diff --git a/packages/0xFFFF/0xffff-native_0.1.bb b/packages/0xFFFF/0xffff-native_0.1.bb
new file mode 100644
index 0000000000..1cee49aafd
--- /dev/null
+++ b/packages/0xFFFF/0xffff-native_0.1.bb
@@ -0,0 +1,19 @@
+require 0xffff.inc
+
+DEPENDS = "libusb-native"
+
+inherit native
+
+do_stage() {
+ install -m 755 0xFFFF ${STAGING_BINDIR_NATIVE}
+}
+
+do_deploy[dirs] = "${S}"
+
+do_deploy() {
+ install -m 755 0xFFFF ${DEPLOY_DIR_IMAGE}
+}
+
+addtask deploy before do_package after do_install
+
+
diff --git a/packages/0xFFFF/0xffff-native_0.2.bb b/packages/0xFFFF/0xffff-native_0.2.bb
new file mode 100644
index 0000000000..1cee49aafd
--- /dev/null
+++ b/packages/0xFFFF/0xffff-native_0.2.bb
@@ -0,0 +1,19 @@
+require 0xffff.inc
+
+DEPENDS = "libusb-native"
+
+inherit native
+
+do_stage() {
+ install -m 755 0xFFFF ${STAGING_BINDIR_NATIVE}
+}
+
+do_deploy[dirs] = "${S}"
+
+do_deploy() {
+ install -m 755 0xFFFF ${DEPLOY_DIR_IMAGE}
+}
+
+addtask deploy before do_package after do_install
+
+
diff --git a/packages/0xFFFF/0xffff.inc b/packages/0xFFFF/0xffff.inc
new file mode 100644
index 0000000000..db281467ed
--- /dev/null
+++ b/packages/0xFFFF/0xffff.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "The 'Open Free Fiasco Firmware Flasher' aka 0xFFFF utility aims to implement a free (GPL'd) userspace handler for the NOLO bootloader."
+LICENSE = "GPLv3"
+
+SRC_URI = "http://www.nopcode.org/0xFFFF/get/0xFFFF-${PV}.tar.gz"
+
+S = "${WORKDIR}/0xFFFF-${PV}/src"
+
+CFLAGS += '-DVERSION="${PV}" -I.'
+BUILD_CFLAGS += '-DVERSION="${PV}" -I.'
+
+do_compile() {
+ oe_runmake
+}
+
diff --git a/packages/0xFFFF/0xffff_0.1.bb b/packages/0xFFFF/0xffff_0.1.bb
new file mode 100644
index 0000000000..fb3b93d415
--- /dev/null
+++ b/packages/0xFFFF/0xffff_0.1.bb
@@ -0,0 +1,6 @@
+require 0xffff.inc
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 755 0xFFFF ${D}${bindir}
+}
diff --git a/packages/0xFFFF/0xffff_0.2.bb b/packages/0xFFFF/0xffff_0.2.bb
new file mode 100644
index 0000000000..fb3b93d415
--- /dev/null
+++ b/packages/0xFFFF/0xffff_0.2.bb
@@ -0,0 +1,6 @@
+require 0xffff.inc
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 755 0xFFFF ${D}${bindir}
+}
diff --git a/packages/abiword/abiword-2.5.inc b/packages/abiword/abiword-2.5.inc
index 3184be72b4..42fc6c7d6e 100644
--- a/packages/abiword/abiword-2.5.inc
+++ b/packages/abiword/abiword-2.5.inc
@@ -13,21 +13,21 @@ SHRT_VER = "${@bb.data.getVar('PV',d,1).split('.')[0]}.${@bb.data.getVar('PV',d,
FILES_${PN} += " \
${datadir}/icons/* \
- ${datadir}/AbiSuite-${SHRT_VER}/AbiWord/glade \
- ${datadir}/AbiSuite-${SHRT_VER}/AbiWord/scripts \
- ${datadir}/AbiSuite-${SHRT_VER}/AbiWord/system.profile-en \
- ${datadir}/AbiSuite-${SHRT_VER}/AbiWord/system.profile-en_GB \
-# ${datadir}/AbiSuite-${SHRT_VER}/templates/A4.awt \
-# ${datadir}/AbiSuite-${SHRT_VER}/templates/US-Letter.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/normal.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/normal.awt-en_GB \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Employee-Directory.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Business-Report.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Fax-Coversheet.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Resume.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Two-Columns.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Memo.awt \
- ${datadir}/AbiSuite-${SHRT_VER}/templates/Press-Release.awt "
+ ${datadir}/abiword-${SHRT_VER}/AbiWord/glade \
+ ${datadir}/abiword-${SHRT_VER}/AbiWord/scripts \
+ ${datadir}/abiword-${SHRT_VER}/AbiWord/system.profile-en \
+ ${datadir}/abiword-${SHRT_VER}/AbiWord/system.profile-en_GB \
+# ${datadir}/abiword-${SHRT_VER}/templates/A4.awt \
+# ${datadir}/abiword-${SHRT_VER}/templates/US-Letter.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/normal.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/normal.awt-en_GB \
+ ${datadir}/abiword-${SHRT_VER}/templates/Employee-Directory.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Business-Report.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Fax-Coversheet.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Resume.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Two-Columns.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Memo.awt \
+ ${datadir}/abiword-${SHRT_VER}/templates/Press-Release.awt "
inherit autotools pkgconfig
@@ -54,8 +54,8 @@ do_install_append() {
PACKAGES += " abiword-clipart abiword-icons abiword-strings abiword-systemprofiles abiword-templates "
-FILES_abiword-clipart += "${datadir}/AbiSuite-${SHRT_VER}/clipart"
-FILES_abiword-icons += "${datadir}/AbiSuite-${SHRT_VER}/icons"
-FILES_abiword-strings += "${datadir}/AbiSuite-${SHRT_VER}/AbiWord/strings"
-FILES_abiword-systemprofiles += "${datadir}/AbiSuite-${SHRT_VER}/AbiWord/system.profile*"
-FILES_abiword-templates += "${datadir}/AbiSuite-${SHRT_VER}/templates"
+FILES_abiword-clipart += "${datadir}/abiword-${SHRT_VER}/clipart"
+FILES_abiword-icons += "${datadir}/abiword-${SHRT_VER}/icons"
+FILES_abiword-strings += "${datadir}/abiword-${SHRT_VER}/AbiWord/strings"
+FILES_abiword-systemprofiles += "${datadir}/abiword-${SHRT_VER}/AbiWord/system.profile*"
+FILES_abiword-templates += "${datadir}/abiword-${SHRT_VER}/templates"
diff --git a/packages/abiword/abiword-embedded_2.4.5.bb b/packages/abiword/abiword-embedded_2.4.5.bb
deleted file mode 100644
index 9381bbd8a7..0000000000
--- a/packages/abiword/abiword-embedded_2.4.5.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require abiword.inc
-
-EXTRA_OECONF += "--enable-embedded"
-
-RCONFLICTS = "abiword"
-RPROVIDES += "abiword"
-
-do_compile_prepend() {
- cp ${S}/src/af/xap/unix/hildon/xap_EmbeddedFeatures.h ${S}/src/af/xap/unix/
- cp ${S}/src/wp/ap/unix/hildon/ap_EmbeddedFeatures.h ${S}/src/wp/ap/unix/
-}
-
diff --git a/packages/abiword/abiword-plugins_2.4.5.bb b/packages/abiword/abiword-plugins_2.4.5.bb
deleted file mode 100644
index 0715026684..0000000000
--- a/packages/abiword/abiword-plugins_2.4.5.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "AbiWord is a free word processing program similar to Microsoft(r) Word""
-HOMEPAGE = "http://www.abiword.org""
-SECTION = "x11/office"
-LICENSE = "GPLv2"
-DEPENDS = "libwpd librsvg goffice poppler"
-RDEPENDS='abiword'
-PR = "r1"
-
-SRC_URI = "http://www.abiword.org/downloads/abiword/${PV}/source/abiword-${PV}.tar.gz \
- file://abiword-plugin-pdf-poppler.patch;patch=1;pnum=2"
-S = "${WORKDIR}/abiword-${PV}/abiword-plugins"
-
-inherit autotools
-
-PARALLEL_MAKE=""
-
-EXTRA_OECONF = "--without-libwmf"
-
-PACKAGES_DYNAMIC = "abiword-plugin-*"
-
-python populate_packages_prepend () {
- abiword_libdir = bb.data.expand('${libdir}/AbiWord-2.4/plugins', d)
-
- do_split_packages(d, abiword_libdir, '^libAbi(.*)\.so$', 'abiword-plugin-%s', 'Abiword plugin for %s', extra_depends='')
-}
-
diff --git a/packages/abiword/abiword-plugins_2.4.6.bb b/packages/abiword/abiword-plugins_2.4.6.bb
index 21ac8ea909..84de68c1a0 100644
--- a/packages/abiword/abiword-plugins_2.4.6.bb
+++ b/packages/abiword/abiword-plugins_2.4.6.bb
@@ -13,7 +13,7 @@ inherit autotools
PARALLEL_MAKE=""
-EXTRA_OECONF = "--without-libwmf"
+EXTRA_OECONF = "--without-libwmf --without-inter7eps"
PACKAGES_DYNAMIC = "abiword-plugin-*"
diff --git a/packages/abiword/abiword.inc b/packages/abiword/abiword.inc
index 8569845394..58f712aca9 100644
--- a/packages/abiword/abiword.inc
+++ b/packages/abiword/abiword.inc
@@ -3,8 +3,9 @@ HOMEPAGE = "http://www.abiword.org""
SECTION = "x11/office"
LICENSE = "GPLv2"
DEPENDS = "perl-native libgsf libgnomeprint libgnomeprintui libglade libfribidi enchant jpeg libpng libxml2"
-RDEPENDS = "enchant glibc-gconv-ibm850 glibc-gconv-cp1252 \
- glibc-gconv-iso8859-15 glibc-gconv-iso8859-1"
+RDEPENDS = "enchant "
+RDEPENDS_linux += "glibc-gconv-ibm850 glibc-gconv-cp1252 \
+ glibc-gconv-iso8859-15 glibc-gconv-iso8859-1"
PR = "r2"
SRC_URI = "http://www.abiword.org/downloads/abiword/${PV}/source/abiword-${PV}.tar.gz"
diff --git a/packages/abiword/abiword_2.4.5.bb b/packages/abiword/abiword_2.4.5.bb
deleted file mode 100644
index b97556b735..0000000000
--- a/packages/abiword/abiword_2.4.5.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require abiword.inc
-
-RCONFLICTS = "abiword-embedded"
-
diff --git a/packages/abiword/abiword_2.5.1.bb b/packages/abiword/abiword_2.5.1.bb
index 66d8fae0ad..5fcc1dd1a2 100644
--- a/packages/abiword/abiword_2.5.1.bb
+++ b/packages/abiword/abiword_2.5.1.bb
@@ -2,6 +2,6 @@ require abiword-2.5.inc
DEFAULT_PREFERENCE = "-1"
-PR = "r0"
+PR = "r1"
RCONFLICTS = "abiword-embedded"
diff --git a/packages/acpid/acpid.inc b/packages/acpid/acpid.inc
index c96f431224..6e79915527 100644
--- a/packages/acpid/acpid.inc
+++ b/packages/acpid/acpid.inc
@@ -5,28 +5,20 @@ LICENSE="GPL"
SRC_URI = "${SOURCEFORGE_MIRROR}/acpid/acpid-${PV}.tar.gz \
file://init"
+inherit update-rc.d
+
+INITSCRIPT_NAME = "acpid"
+INITSCRIPT_PARAMS = "defaults"
+
EXTRA_OEMAKE = ""
do_compile () {
oe_runmake 'CC=${CC}' 'CROSS=${HOST_PREFIX}'
}
do_install () {
+ install -d ${D}${bindir}
oe_runmake 'INSTPREFIX=${D}' install
install -d ${D}${sysconfdir}/init.d
cat ${WORKDIR}/init | sed -e's,/usr/sbin,${sbindir},g' > ${D}${sysconfdir}/init.d/acpid
chmod 755 ${D}${sysconfdir}/init.d/acpid
}
-
-pkg_postinst () {
- if test -n "${D}"; then
- D="-r $D"
- fi
- update-rc.d $D acpid defaults
-}
-
-pkg_prerm () {
- if test -n "${D}"; then
- D="-r $D"
- fi
- update-rc.d $D acpid remove
-}
diff --git a/packages/acpid/acpid_1.0.2.bb b/packages/acpid/acpid_1.0.2.bb
index 1b48266a9c..2a305eeac4 100644
--- a/packages/acpid/acpid_1.0.2.bb
+++ b/packages/acpid/acpid_1.0.2.bb
@@ -1,3 +1,3 @@
require acpid.inc
-PR = "r1"
+PR = "r2"
diff --git a/packages/acpid/acpid_1.0.3.bb b/packages/acpid/acpid_1.0.3.bb
index d67ea96875..640acd5203 100644
--- a/packages/acpid/acpid_1.0.3.bb
+++ b/packages/acpid/acpid_1.0.3.bb
@@ -1,4 +1,4 @@
require acpid.inc
SRC_URI += "file://gcc40.patch;patch=1"
-PR = "r1"
+PR = "r2"
diff --git a/packages/acpid/acpid_1.0.4.bb b/packages/acpid/acpid_1.0.4.bb
index d67ea96875..f48c262254 100644
--- a/packages/acpid/acpid_1.0.4.bb
+++ b/packages/acpid/acpid_1.0.4.bb
@@ -1,4 +1,4 @@
require acpid.inc
SRC_URI += "file://gcc40.patch;patch=1"
-PR = "r1"
+PR = "r3"
diff --git a/packages/altboot/files/.mtn2git_empty b/packages/agg/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/.mtn2git_empty
+++ b/packages/agg/.mtn2git_empty
diff --git a/packages/agg/agg_2.5.bb b/packages/agg/agg_2.5.bb
new file mode 100644
index 0000000000..84bbb4d4bb
--- /dev/null
+++ b/packages/agg/agg_2.5.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Anti Grain Geometry - A High Quality Rendering Engine for C++"
+AUTHOR = "mcseem@antigrain.com"
+HOMEPAGE = "http://www.antigrain.com"
+SECTION = "libs"
+LICENSE = "AGG License"
+DEPENDS = "virtual/libx11 virtual/libsdl freetype"
+
+PR = "r0"
+
+SRC_URI = "http://www.antigrain.com/${P}.tar.gz"
+
+S = "${WORKDIR}/${P}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--with-sdl-exec-prefix=${STAGING_DIR}/${BUILD_SYS}"
+CFLAGS += " -I{$STAGING_INCDIR} "
+
+PACKAGES =+ "${PN}-sdl ${PN}-x11"
+
+FILES_${PN}-sdl = "${libdir}/libaggplatformsdl.so.*"
+FILES_${PN}-x11 += "${libdir}/libaggplatformX11.so.*"
+FILES_${PN} = "${libdir}/libagg.so.* \
+ ${libdir}/libaggfontfreetype.so.*"
+
+LEAD_SONAME = "libagg.so"
+
+do_stage() {
+ install -m 0644 libagg.m4 ${STAGING_DATADIR}/aclocal/
+ install -d ${STAGING_INCDIR}/agg2
+ cd include
+ headers=`find . -name "*.h"`
+ for f in $headers
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/agg2/
+ done
+}
+
+
+
diff --git a/packages/aiostress/aiostress_0.0.bb b/packages/aiostress/aiostress_0.0.bb
index 8b4085ad4f..9ebc20d371 100644
--- a/packages/aiostress/aiostress_0.0.bb
+++ b/packages/aiostress/aiostress_0.0.bb
@@ -1,8 +1,9 @@
DESCRIPTION = "Asynchronous I/O stress util"
LICENSE = "GPLv2"
DEPENDS = "libaio"
+PR="r1"
-SRC_URI = "ftp://ftp.suse.com/pub/people/mason/utils/aio-stress.c;md5sum=727e5fc3566837b3ea72f887d048769b"
+SRC_URI = "http://mirrors.easynews.com/linux/suse/people/mason/utils/aio-stress.c"
S = "${WORKDIR}"
diff --git a/packages/aircrack/aircrack-ng_0.7.bb b/packages/aircrack/aircrack-ng_0.7.bb
deleted file mode 100644
index 3093c39955..0000000000
--- a/packages/aircrack/aircrack-ng_0.7.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SECTION = "console/network"
-DESCRIPTION = "Aircrack-ng is a set of tools for wep key statistical cracking"
-HOMEPAGE = "http://www.aircrack-ng.org/"
-LICENSE = "GPLv2"
-MAINTAINER = "Zero_Chaos <sidhayn@gmail.com>"
-DEPENDS = ""
-RDEPENDS = ""
-PR="r2"
-
-SRC_URI = "http://download.aircrack-ng.org/aircrack-ng-${PV}.tar.gz"
-
-oe_compile() {
- oe_runmake CC="${CC}" CXX="${CXX}" CFLAGS="-O3 ${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LD="${LD}" LDFLAGS="${LDFLAGS}"
-}
-
-do_install() {
- install -d ${D}/${sbindir}
- install -d ${D}/${bindir}
- install -m 0755 airodump-ng ${D}/${sbindir}
- install -m 0755 aircrack-ng ${D}/${bindir}
- install -m 0755 aireplay-ng ${D}/${sbindir}
- install -m 0755 airdecap-ng ${D}/${bindir}
- install -m 0755 packetforge-ng ${D}/${bindir}
- install -m 0755 airmon-ng ${D}/${sbindir}
- install -m 0755 ivstools ${D}/${bindir}
- install -m 0755 kstats ${D}/${bindir}
- install -m 0755 airtun-ng ${D}/${bindir}
-}
diff --git a/packages/aircrack/aircrack-ng_0.9.1.bb b/packages/aircrack/aircrack-ng_0.9.1.bb
new file mode 100644
index 0000000000..116ee599e3
--- /dev/null
+++ b/packages/aircrack/aircrack-ng_0.9.1.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Aircrack-ng is a set of tools for wep key statistical cracking"
+HOMEPAGE = "http://www.aircrack-ng.org/"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+PR = "r2"
+
+SRC_URI = "http://download.aircrack-ng.org/aircrack-ng-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -d ${D}/${bindir}
+ install -m 0755 airodump-ng ${D}/${sbindir}
+ install -m 0755 aircrack-ng ${D}/${bindir}
+ install -m 0755 aireplay-ng ${D}/${sbindir}
+ install -m 0755 airdecap-ng ${D}/${bindir}
+ install -m 0755 packetforge-ng ${D}/${bindir}
+ install -m 0755 airmon-ng ${D}/${sbindir}
+ install -m 0755 ivstools ${D}/${bindir}
+ install -m 0755 kstats ${D}/${bindir}
+ install -m 0755 airtun-ng ${D}/${sbindir}
+ install -m 0755 makeivs ${D}/${bindir}
+}
diff --git a/packages/aircrack/aircrack-ng_1.0-svn.bb b/packages/aircrack/aircrack-ng_1.0-svn.bb
new file mode 100644
index 0000000000..a09957bb45
--- /dev/null
+++ b/packages/aircrack/aircrack-ng_1.0-svn.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "Aircrack-ng is a set of tools for wep key statistical cracking"
+HOMEPAGE = "http://www.aircrack-ng.org/"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+DEPENDS = "openssl"
+PV = "0.9.99+svn${SRCDATE}"
+PR = "r0"
+SRC_URI = "svn://trac.aircrack-ng.org/svn/branch;module=1.0-dev;proto=http \
+ file://makefile-ldflags.patch;patch=1;maxdate=20070629 "
+
+S="${WORKDIR}/1.0-dev"
+
+DEFAULT_PREFERENCE = "-1"
+
+export TOOL_PREFIX = "${HOST_SYS}-"
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -d ${D}/${bindir}
+ install -m 0755 src/airodump-ng ${D}/${sbindir}
+ install -m 0755 src/aircrack-ng ${D}/${bindir}
+ install -m 0755 src/aireplay-ng ${D}/${sbindir}
+ install -m 0755 src/airserv-ng ${D}/${sbindir}
+ install -m 0755 src/wesside-ng ${D}/${sbindir}
+ install -m 0755 src/airdecap-ng ${D}/${bindir}
+ install -m 0755 src/packetforge-ng ${D}/${bindir}
+ install -m 0755 airmon-ng ${D}/${sbindir}
+ install -m 0755 src/ivstools ${D}/${bindir}
+ install -m 0755 src/kstats ${D}/${bindir}
+ install -m 0755 src/airtun-ng ${D}/${sbindir}
+ install -m 0755 test/makeivs ${D}/${bindir}
+}
+
diff --git a/packages/aircrack/files/makefile-ldflags.patch b/packages/aircrack/files/makefile-ldflags.patch
new file mode 100644
index 0000000000..da2a0afaf1
--- /dev/null
+++ b/packages/aircrack/files/makefile-ldflags.patch
@@ -0,0 +1,13 @@
+Index: 1.0-dev/src/Makefile
+===================================================================
+--- 1.0-dev.orig/src/Makefile 2007-06-29 21:16:15.000000000 +0100
++++ 1.0-dev/src/Makefile 2007-06-29 21:16:32.000000000 +0100
+@@ -36,7 +36,7 @@
+ endif
+ LIBOSD = $(OSD)/lib$(OSD).a
+
+-LIBSSL = -lssl -lcrypto
++LIBSSL = -lssl -lcrypto $(LDFLAGS)
+
+ all: osd userland $(SBINFILES)
+
diff --git a/packages/alp/hiker_0.9.1.bb b/packages/alp/hiker_0.9.1.bb
new file mode 100644
index 0000000000..2c6c1d7647
--- /dev/null
+++ b/packages/alp/hiker_0.9.1.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Hiker Application Frameworkâ„¢"
+LICENSE = "MPL"
+
+DEPENDS = "gtk+ sqlite3 gnet dbus-glib openssl"
+
+SRC_URI = "http://www.access-company.com/downloads/${P}.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+export CFLAGS += "-DALP_BUILD=ALP_BUILD_DEBUG"
+export CXXFLAGS += "-DALP_BUILD=ALP_BUILD_DEBUG"
+
+do_configure_prepend() {
+ sed -i s:unittest::g utils/Makefile.am
+}
+
+PACKAGES =+ "libhiker libsqlfs"
+FILES_libhiker += "${libdir}/libhiker*.so.*"
+FILES_libsqlfs += "${libdir}/libsql*.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/alsa/alsa-state.bb b/packages/alsa/alsa-state.bb
new file mode 100644
index 0000000000..35c8f5d3d3
--- /dev/null
+++ b/packages/alsa/alsa-state.bb
@@ -0,0 +1,54 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: alsa-state.bb
+# Date: 20070308 (YMD)
+
+DESCRIPTION = "Default ALSA configuration"
+LICENSE = "GPL"
+RRECOMMENDS_alsa-state = "alsa-states"
+PV = "0.0.4"
+PR = "r2"
+
+SRC_URI = "file://asound.state \
+ file://alsa-state "
+
+SRC_URI_append_fic-gta01 = " \
+ file://capturehandset.state \
+ file://captureheadset.state \
+ file://gsmbluetooth.state \
+ file://gsmhandset.state \
+ file://gsmheadset.state \
+ file://stereoout.state"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "alsa-state"
+INITSCRIPT_PARAMS = "defaults 10"
+
+do_install() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/alsa-state ${D}${sysconfdir}/init.d
+
+ install -m 0644 ${WORKDIR}/*.state ${D}${sysconfdir}
+}
+
+PACKAGES += "alsa-states"
+FILES_${PN} = "${sysconfdir}/init.d"
+FILES_alsa-states = "${sysconfdir}/*.state"
+PACKAGE_ARCH_${PN} = "all"
+PACKAGE_ARCH_alsa-states = "${MACHINE}"
+
+pkg_postinst_${PN}() {
+ if test -z "$D"
+ then
+ if test -x /usr/sbin/alsactl
+ then
+ /usr/sbin/alsactl -f ${sysconfdir}/asound.state restore
+ fi
+ fi
+}
+
diff --git a/packages/altboot/files/akita/.mtn2git_empty b/packages/alsa/alsa-state/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/akita/.mtn2git_empty
+++ b/packages/alsa/alsa-state/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/alsa-state b/packages/alsa/alsa-state/alsa-state
new file mode 100755
index 0000000000..c6bc1fd494
--- /dev/null
+++ b/packages/alsa/alsa-state/alsa-state
@@ -0,0 +1,29 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: alsa-state
+# Date: 20070308 (YMD)
+
+
+asound_restore(){
+ echo "ALSA: Restoring mixer settings..."
+ if test -x /usr/sbin/alsactl -a -e /etc/asound.state
+ then
+ /usr/sbin/alsactl -f /etc/asound.state restore
+ fi
+}
+
+asound_store(){
+ echo "ALSA: Storing mixer settings..."
+ if test -x /usr/sbin/alsactl
+ then
+ /usr/sbin/alsactl -f /etc/asound.state store
+ fi
+}
+
+case "$1" in
+start) asound_restore ;;
+stop) asound_store ;;
+esac
diff --git a/packages/alsa/alsa-state/asound.state b/packages/alsa/alsa-state/asound.state
new file mode 100644
index 0000000000..88b0d02657
--- /dev/null
+++ b/packages/alsa/alsa-state/asound.state
@@ -0,0 +1 @@
+# Dummy file, do not delete \ No newline at end of file
diff --git a/packages/altboot/files/altboot-menu/.mtn2git_empty b/packages/alsa/alsa-state/c7x0/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/altboot-menu/.mtn2git_empty
+++ b/packages/alsa/alsa-state/c7x0/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/c7x0/asound.state b/packages/alsa/alsa-state/c7x0/asound.state
new file mode 100644
index 0000000000..7fd648fcf6
--- /dev/null
+++ b/packages/alsa/alsa-state/c7x0/asound.state
@@ -0,0 +1,151 @@
+state.Corgi {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Playback Volume'
+ value.0 103
+ value.1 103
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Playback Switch'
+ value.0 false
+ value.1 false
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic Boost (+20dB)'
+ value false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Mic Switch'
+ value true
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value 3
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ADC High Pass Filter Switch'
+ value true
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Store DC Offset Switch'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32Khz'
+ comment.item.2 '44.1Khz'
+ comment.item.3 '48Khz'
+ iface MIXER
+ name 'Playback De-emphasis'
+ value None
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line In'
+ comment.item.1 Mic
+ iface MIXER
+ name 'Input Mux'
+ value 'Line In'
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Line Bypass Switch'
+ value true
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer Mic Sidetone Switc'
+ value false
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Output Mixer HiFi Playback Swit'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Headphone
+ comment.item.1 Mic
+ comment.item.2 Line
+ comment.item.3 Headset
+ comment.item.4 Off
+ iface MIXER
+ name 'Jack Function'
+ value Headphone
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Auto
+ comment.item.1 On
+ comment.item.2 Off
+ iface MIXER
+ name 'Speaker Function'
+ value On
+ }
+}
diff --git a/packages/altboot/files/altboot-menu/Advanced/.mtn2git_empty b/packages/alsa/alsa-state/fic-gta01/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/altboot-menu/Advanced/.mtn2git_empty
+++ b/packages/alsa/alsa-state/fic-gta01/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/fic-gta01/asound.state b/packages/alsa/alsa-state/fic-gta01/asound.state
new file mode 100644
index 0000000000..903bc9d89a
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/asound.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 127
+ value.1 127
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value true
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value true
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 19
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 19
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value 'Stereo Speakers + Headphones'
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value Headphones
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value true
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/capturehandset.state b/packages/alsa/alsa-state/fic-gta01/capturehandset.state
new file mode 100644
index 0000000000..4a55f09035
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/capturehandset.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 3
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 2'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value true
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value false
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value false
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 0
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 0
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value Off
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value 'Capture Handset'
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/captureheadset.state b/packages/alsa/alsa-state/fic-gta01/captureheadset.state
new file mode 100644
index 0000000000..3a27323b25
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/captureheadset.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 3
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 3
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 2'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value true
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value false
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value false
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 0
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 0
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value Off
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value 'Capture Headset'
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state b/packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state
new file mode 100644
index 0000000000..a0c0c95ea6
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value true
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value 'Analogue Mix Left'
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value true
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value false
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value false
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 0
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 0
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value Off
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value 'GSM Bluetooth'
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/gsmhandset.state b/packages/alsa/alsa-state/fic-gta01/gsmhandset.state
new file mode 100644
index 0000000000..a83141fcbb
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/gsmhandset.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 24
+ value.1 24
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 true
+ value.1 true
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 1
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Stereo
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 7
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Rx Mix'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Rx Mix'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value true
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value true
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value false
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value true
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value false
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value true
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 31
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 31
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value 'Call Speaker'
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value 'GSM Handset'
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value true
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/gsmheadset.state b/packages/alsa/alsa-state/fic-gta01/gsmheadset.state
new file mode 100644
index 0000000000..e732b77db8
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/gsmheadset.state
@@ -0,0 +1,900 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 102
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 0
+ value.1 0
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 4
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 4
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 4
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 5
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 5
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value Inverted
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 3
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Rx Mix'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Rx Mix'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value true
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Mic 1'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value true
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value false
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value true
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value false
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value true
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 30
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 15
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value Headphones
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ comment.item.6 'Capture Handset'
+ comment.item.7 'Capture Headset'
+ comment.item.8 'Capture Bluetooth'
+ iface MIXER
+ name 'Neo Mode'
+ value 'GSM Headset'
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta01/stereoout.state b/packages/alsa/alsa-state/fic-gta01/stereoout.state
new file mode 100644
index 0000000000..c27b78bb27
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta01/stereoout.state
@@ -0,0 +1,897 @@
+state.neo1973 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 127
+ value.1 127
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Treble Volume'
+ value 7
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value true
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value true
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Left Playback Volume'
+ value 21
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Right Playback Volume'
+ value 21
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Amp Mono Playback Volume'
+ value 0
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'Call Speaker'
+ comment.item.2 'Stereo Speakers'
+ comment.item.3 'Stereo Speakers + Headphones'
+ comment.item.4 Headphones
+ iface MIXER
+ name 'Amp Mode'
+ value 'Stereo Speakers + Headphones'
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 'GSM Handset'
+ comment.item.2 'GSM Headset'
+ comment.item.3 'GSM Bluetooth'
+ comment.item.4 Speakers
+ comment.item.5 Headphones
+ iface MIXER
+ name 'Neo Mode'
+ value Headphones
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk 3D Playback Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp HP 3d Playback Switch'
+ value false
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Fast Wakeup Playback Switch'
+ value false
+ }
+ control.94 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Earpiece 6dB Playback Switch'
+ value false
+ }
+}
diff --git a/packages/altboot/files/altboot.rc/.mtn2git_empty b/packages/alsa/alsa-state/spitz/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/altboot.rc/.mtn2git_empty
+++ b/packages/alsa/alsa-state/spitz/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/spitz/asound.state b/packages/alsa/alsa-state/spitz/asound.state
new file mode 100644
index 0000000000..81b6ed9814
--- /dev/null
+++ b/packages/alsa/alsa-state/spitz/asound.state
@@ -0,0 +1,619 @@
+state.Spitz {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32Khz'
+ comment.item.2 '44.1Khz'
+ comment.item.3 '48Khz'
+ iface MIXER
+ name 'Playback De-emphasis'
+ value None
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Normal
+ comment.item.1 'L Invert'
+ comment.item.2 'R Invert'
+ comment.item.3 'L + R Invert'
+ iface MIXER
+ name 'Capture Polarity'
+ value Normal
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Treble Volume'
+ value 15
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Mode'
+ value Capture
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 0
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 3
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value '2.2kHz'
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 255'
+ iface MIXER
+ name 'Left ADC Capture Volume'
+ value 195
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 255'
+ iface MIXER
+ name 'Right ADC Capture Volume'
+ value 195
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ZC Timeout Switch'
+ value false
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Invert Switch'
+ value false
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Speaker Playback Invert Switch'
+ value false
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic Boost'
+ value.0 0
+ value.1 0
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Left Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Right Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Mono Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Mono (Left)'
+ comment.item.2 'Mono (Right)'
+ comment.item.3 'Digital Mono'
+ iface MIXER
+ name 'Right ADC Mux'
+ value Stereo
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Mono (Left)'
+ comment.item.2 'Mono (Right)'
+ comment.item.3 'Digital Mono'
+ iface MIXER
+ name 'Left ADC Mux'
+ value Stereo
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Line 2'
+ iface MIXER
+ name 'Differential Mux'
+ value 'Line 1'
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'ROUT1 + Vol'
+ comment.item.2 MonoOut
+ comment.item.3 ROUT1
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Line 2'
+ comment.item.2 'Line 3'
+ comment.item.3 PGA
+ comment.item.4 Differential
+ iface MIXER
+ name 'Right Line Mux'
+ value 'Line 1'
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Line 2'
+ comment.item.2 'Line 3'
+ comment.item.3 PGA
+ comment.item.4 Differential
+ iface MIXER
+ name 'Left Line Mux'
+ value 'Line 1'
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Line 2'
+ comment.item.2 'Line 3'
+ comment.item.3 Differential
+ iface MIXER
+ name 'Right PGA Mux'
+ value 'Line 1'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Line 2'
+ comment.item.2 'Line 3'
+ comment.item.3 Differential
+ iface MIXER
+ name 'Left PGA Mux'
+ value 'Line 1'
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Bypass Switch'
+ value false
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Bypass Switch'
+ value false
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Left Playback Switc'
+ value true
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Left Bypass Switch'
+ value false
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Playback Switch'
+ value true
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Bypass Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Playback Switch'
+ value true
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Bypass Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Right Playback Switc'
+ value false
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Right Bypass Switch'
+ value false
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Headphone
+ comment.item.1 Mic
+ comment.item.2 Line
+ comment.item.3 Headset
+ comment.item.4 Off
+ iface MIXER
+ name 'Jack Function'
+ value Off
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 On
+ comment.item.1 Off
+ iface MIXER
+ name 'Speaker Function'
+ value On
+ }
+}
diff --git a/packages/altboot/files/c7x0/.mtn2git_empty b/packages/alsa/alsa-state/tosa/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/c7x0/.mtn2git_empty
+++ b/packages/alsa/alsa-state/tosa/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/tosa/asound.state b/packages/alsa/alsa-state/tosa/asound.state
new file mode 100644
index 0000000000..12eaf2e036
--- /dev/null
+++ b/packages/alsa/alsa-state/tosa/asound.state
@@ -0,0 +1,712 @@
+state.Tosa {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 25
+ value.1 25
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Playback Switch'
+ value true
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 20
+ value.1 20
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Playback Switch'
+ value true
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value true
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Playback Invert Switch'
+ value true
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value true
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 0
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Target Volume'
+ value 11
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Hold Time'
+ value 0
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Decay Time'
+ value 3
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Attack Time'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Function'
+ value None
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Max Volume'
+ value 7
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'ALC ZC Timeout'
+ value 0
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC ZC Switch'
+ value false
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC NG Switch'
+ value false
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant Gain'
+ comment.item.1 Mute
+ iface MIXER
+ name 'ALC NG Type'
+ value 'Constant Gain'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC NG Threshold'
+ value 31
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mic Headphone Volume'
+ value 3
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Headphone Volume'
+ value 5
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Out3 Switch'
+ value false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Out3 ZC Switch'
+ value true
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Out3 Volume'
+ value 0
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'PCBeep Bypass Headphone Volume'
+ value 0
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'PCBeep Bypass Speaker Volume'
+ value 0
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'PCBeep Bypass Phone Volume'
+ value 0
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Aux Playback Headphone Volume'
+ value 6
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Aux Playback Speaker Volume'
+ value 0
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Aux Playback Phone Volume'
+ value 0
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Phone Volume'
+ value 0
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Line Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 20dB Boost Switch'
+ value true
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture to Phone 20dB Boost Switch'
+ value true
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Upper Cut-off Switch'
+ value false
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Lower Cut-off Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Playback Volume'
+ value 0
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Control'
+ value 'Adaptive Boost'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Bass Cut-off Switch'
+ value true
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Tone Cut-off Switch'
+ value false
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Attenuate (-6dB) Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Bass Volume'
+ value 8
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Treble Volume'
+ value 5
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture ADC Switch'
+ value false
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+ comment.item.0 '+1.5dB Steps'
+ comment.item.1 '+0.75dB Steps'
+ iface MIXER
+ name 'Capture Volume Steps'
+ value.0 '+0.75dB Steps'
+ value.1 '+0.75dB Steps'
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 63
+ value.1 63
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture ZC Switch'
+ value false
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Mic 1 Volume'
+ value 23
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'Mic 2 Volume'
+ value 23
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mic 20dB Boost Switch'
+ value false
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Mixer PCBeep Bypass Swi'
+ value false
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Mixer Aux Playback Swit'
+ value false
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Mixer Phone Bypass Swit'
+ value false
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Mixer Line Bypass Switc'
+ value false
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Mixer PCM Playback Swit'
+ value true
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer PCBeep Bypass Switc'
+ value false
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer Aux Playback Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer Line Bypass Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer PCM Playback Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer Mic 1 Sidetone Swit'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Phone Mixer Mic 2 Sidetone Swit'
+ value false
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer PCBeep Bypass Switch'
+ value false
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer Aux Playback Switch'
+ value false
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer Phone Bypass Switch'
+ value false
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer Line Bypass Switch'
+ value false
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer PCM Playback Switch'
+ value true
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'HP Mixer Mic Sidetone Switch'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic
+ comment.item.1 Line
+ iface MIXER
+ name 'Differential Source'
+ value Mic
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 Differential
+ comment.item.2 'Mic 2'
+ comment.item.3 Stereo
+ iface MIXER
+ name 'Mic Select Source'
+ value Differential
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic
+ comment.item.1 NC
+ comment.item.2 NC
+ comment.item.3 'Speaker Mixer'
+ comment.item.4 Line
+ comment.item.5 'Headphone Mixer'
+ comment.item.6 'Phone Mixer'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Right Capture Select'
+ value Mic
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Mic
+ comment.item.1 NC
+ comment.item.2 NC
+ comment.item.3 'Speaker Mixer'
+ comment.item.4 Line
+ comment.item.5 'Headphone Mixer'
+ comment.item.6 'Phone Mixer'
+ comment.item.7 Phone
+ iface MIXER
+ name 'Left Capture Select'
+ value Mic
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mute
+ iface MIXER
+ name 'Capture Phone Mux'
+ value Mute
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Speaker Mix'
+ comment.item.1 'Headphone Mix'
+ iface MIXER
+ name 'Speaker Mux'
+ value 'Headphone Mix'
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Left
+ comment.item.1 VREF
+ comment.item.2 'Left + Right'
+ comment.item.3 Mono
+ iface MIXER
+ name 'Out3 Mux'
+ value Left
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 None
+ iface MIXER
+ name 'ALC Sidetone Mux'
+ value Stereo
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Headphone
+ comment.item.1 Mic
+ comment.item.2 Line
+ comment.item.3 Headset
+ comment.item.4 Off
+ iface MIXER
+ name 'Jack Function'
+ value Headphone
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Auto
+ comment.item.1 On
+ comment.item.2 Off
+ iface MIXER
+ name 'Speaker Function'
+ value Auto
+ }
+}
diff --git a/packages/alsa/alsa-utils_1.0.13.bb b/packages/alsa/alsa-utils_1.0.13.bb
index 93054a3ab6..e1ae7aa399 100644
--- a/packages/alsa/alsa-utils_1.0.13.bb
+++ b/packages/alsa/alsa-utils_1.0.13.bb
@@ -3,10 +3,17 @@ HOMEPAGE = "http://www.alsa-project.org"
SECTION = "console/utils"
LICENSE = "GPL"
DEPENDS = "alsa-lib ncurses"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://ftp.alsa-project.org/pub/utils/alsa-utils-${PV}.tar.bz2"
+# lazy hack. needs proper fixing in gettext.m4, see
+# http://bugs.openembedded.org/show_bug.cgi?id=2348
+# please close bug and remove this comment when properly fixed
+#
+EXTRA_OECONF_linux-uclibc = "--disable-nls"
+EXTRA_OECONF_linux-uclibcgnueabi = "--disable-nls"
+
inherit autotools
# This are all packages that we need to make. Also, the now empty alsa-utils
diff --git a/packages/altboot/README.txt b/packages/altboot/README.txt
new file mode 100644
index 0000000000..bba16027ff
--- /dev/null
+++ b/packages/altboot/README.txt
@@ -0,0 +1,4 @@
+altboot_1.0.8.bb - Last known-working version for all Zauruses
+altboot_1.1.1+wip-20061123.bb - Last known-working version for neo1973
+altboot_svn.bb - Altboot developer snapshot - avoid ;)
+altboot_1.0.8+1.0.9_pre1 - Development version with new menu
diff --git a/packages/altboot/altboot.inc b/packages/altboot/altboot.inc
new file mode 100644
index 0000000000..9e0b3e3df9
--- /dev/null
+++ b/packages/altboot/altboot.inc
@@ -0,0 +1,19 @@
+DESCRIPTION = "The altboot bootmanager"
+HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
+LICENSE = "GPL"
+RDEPENDS_${PN} = "${PN}-conf"
+RDEPENDS_${PN}-conf = "${PN}"
+RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools kexec-tools"
+RRECOMMENDS_${PN}_spitz += " kernel-module-jffs2"
+
+S = "${WORKDIR}/trunk/"
+
+PACKAGE_ARCH_${PN} = "${MACHINE}"
+PACKAGE_ARCH_${PN}-doc = "all"
+PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
+PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
+
+FILES_${PN}-conf = "/etc/altboot*cfg"
+
+MACHINE_DIR = "${MACHINE}"
+MACHINE_DIR_nslu2be = "nslu2le"
diff --git a/packages/altboot/altboot_0.0.0.bb b/packages/altboot/altboot_0.0.0.bb
deleted file mode 100644
index 0df86ad794..0000000000
--- a/packages/altboot/altboot_0.0.0.bb
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: altboot_0.0.0.bb
-# Date: 07-May-06
-
-DESCRIPTION = "The altboot bootmanager"
-HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
-LICENSE = "GPL"
-
-######################################################################################
-
-RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools"
-RRECOMMENDS_${PN}_append_akita = " kexec-tools"
-RRECOMMENDS_${PN}_append_spitz = " kexec-tools"
-RRECOMMENDS_${PN}_append_c7x0 = " kexec-tools"
-
-RDEPENDS_${PN} = "${PN}-conf"
-
-######################################################################################
-
-PR = "r51"
-
-######################################################################################
-
-PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
-
-PACKAGE_ARCH_${PN} = "all"
-PACKAGE_ARCH_${PN}-doc = "all"
-PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-
-SRC_URI = "file://altboot-menu \
- file://altboot.rc \
- file://altboot.func \
- file://init.altboot \
- file://altboot*.cfg \
- file://altbootctl.conf \
- file://altbootctl \
- file://beep.raw"
-
-# S = "${WORKDIR}/altboot/"
-
-######################################################################################
-
-FILES_${PN}-conf = "/etc/altboot*.cfg"
-
-######################################################################################
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- install -m 0644 ${WORKDIR}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${WORKDIR}/altboot*.cfg ${D}/etc
- install -m 0644 ${WORKDIR}/altboot.func ${D}/etc
- install -m 0644 ${WORKDIR}/altbootctl.conf ${D}/etc
- install -m 0755 ${WORKDIR}/init.altboot ${D}/sbin
- install -m 0755 ${WORKDIR}/altbootctl ${D}/sbin
-
- install -m 0755 ${WORKDIR}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- install -m 0755 ${WORKDIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
-
- install -m 0755 ${WORKDIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${WORKDIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
-}
-
-######################################################################################
-
-do_configure() {
- cat ${WORKDIR}/init.altboot | sed "s/^VERSION=.*/VERSION=\"0.0.0 Developer Snapshot (${DATE})\"/" > ${WORKDIR}/init.altboot_
- mv ${WORKDIR}/init.altboot_ ${WORKDIR}/init.altboot
-}
-
-######################################################################################
-
-pkg_postinst_${PN}() {
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-######################################################################################
-
-pkg_postrm_${PN}() {
- update-alternatives --remove init /sbin/init.altboot
-}
-
diff --git a/packages/altboot/altboot_1.0.5.bb b/packages/altboot/altboot_1.0.5.bb
deleted file mode 100644
index 2762001dbd..0000000000
--- a/packages/altboot/altboot_1.0.5.bb
+++ /dev/null
@@ -1,154 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: altboot_1.0.5-rc2.bb
-# Date: 21-Feb-06
-
-DESCRIPTION = "The altboot bootmanager"
-HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
-LICENSE = "GPL"
-
-######################################################################################
-
-PR = "r0"
-
-######################################################################################
-
-PACKAGE_ARCH = "${MACHINE}"
-
-TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}"
-
-SRC_URI = "cvs://anonymous@hentges.net/hentgescvs;method=pserver;tag=${TAG};module=altboot"
-
-S = "${WORKDIR}/altboot/"
-
-######################################################################################
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
-
- if test -d ${WORKDIR}/altboot/${MACHINE}
- then
- install -m 0644 ${WORKDIR}/altboot/${MACHINE}/altboot*.cfg ${D}/etc
- else
- install -m 0644 ${WORKDIR}/altboot/altboot*.cfg ${D}/etc
- fi
-
- install -m 0644 ${WORKDIR}/altboot/altboot.func ${D}/etc
- install -m 0755 ${WORKDIR}/altboot/init.altboot ${D}/sbin
-
- if test -d ${WORKDIR}/altboot/${MACHINE}/altboot-menu/
- then
- install -m 0755 ${WORKDIR}/altboot/${MACHINE}/altboot-menu/*-* ${D}/etc/altboot-menu
- else
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/*-* ${D}/etc/altboot-menu
- fi
-
- if test -d ${WORKDIR}/altboot/${MACHINE}/altboot-menu/Advanced/
- then
- install -m 0755 ${WORKDIR}/altboot/${MACHINE}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- else
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
-
- install -m 0755 ${WORKDIR}/altboot/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${WORKDIR}/altboot/altboot.rc/*.txt ${D}/etc/altboot.rc
-}
-
-######################################################################################
-
-do_configure() {
- cat ${WORKDIR}/altboot/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${WORKDIR}/altboot/init.altboot_
- mv ${WORKDIR}/altboot/init.altboot_ ${WORKDIR}/altboot/init.altboot
-}
-
-######################################################################################
-
-pkg_postinst() {
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postinst_spitz() {
- # Note: Spitz support is a royal pain in the ass.
- # Since Spitz pivot_roots by default, there is no real way
- # a user can install an altboot.ipk into the flash FS.
- # So we need to do that manually (*SIGH*)
-
- # the 2.6 kernel for spitz boots from HDD, no need to copy to flash
- if cat /proc/version | awk '{print $3}' | grep -q '^2.6'; then
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
- # no need to copy to flash if we're installing to flash already
- elif mount | grep ' / ' | grep -q mtdblock; then
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
- else
- # /l/m only exists on the HDD on spitz
- if test -d /lib/modules
- then
- if [ -e /media/realroot/sbin/init ]; then
- ROOT_MOUNT_POINT="/media/realroot"
- elif [ -e /media/ROM/sbin/init ]; then
- ROOT_MOUNT_POINT="/media/ROM"
- fi
- if [ ! "$ROOT_MOUNT_POINT" = "" ]; then
- ROOT_MOUNT_DEVICE=`cat /proc/mounts | grep $ROOT_MOUNT_POINT | grep jffs2 | cut -d " " -f 1`
- if [ ! "$ROOT_MOUNT_DEVICE" = "" ]; then
- mount -oremount,rw $ROOT_MOUNT_DEVICE $ROOT_MOUNT_POINT
- cp -R /etc/altboot* $ROOT_MOUNT_POINT/etc
- cp /sbin/init.altboot $ROOT_MOUNT_POINT/sbin
- if [ -f $ROOT_MOUNT_POINT/sbin/init ]; then
- mv $ROOT_MOUNT_POINT/sbin/init $ROOT_MOUNT_POINT/sbin/init.orig
- fi
- ln -s /sbin/init.altboot $ROOT_MOUNT_POINT/sbin/init
- fi
- fi
- fi
- fi
-}
-
-######################################################################################
-
-pkg_postrm() {
- update-alternatives --remove init /sbin/init.altboot
-}
-
-pkg_postrm_spitz() {
- # the 2.6 kernel for spitz boots from HDD, no need to remove from flash
- if cat /proc/version | awk '{print $3}' | grep -q '^2.6'; then
- update-alternatives --remove init /sbin/init.altboot
- # no need to copy to flash if we're removing from flash already
- elif mount | grep ' / ' | grep -q mtdblock; then
- update-alternatives --remove init /sbin/init.altboot
- else
- if test -d /lib/modules
- then
- if [ -e /media/realroot/sbin/init ]; then
- ROOT_MOUNT_POINT="/media/realroot"
- elif [ -e /media/ROM/sbin/init ]; then
- ROOT_MOUNT_POINT="/media/ROM"
- fi
- if [ ! "$ROOT_MOUNT_POINT" = "" ]; then
- ROOT_MOUNT_DEVICE=`cat /proc/mounts | grep $ROOT_MOUNT_POINT | grep jffs2 | cut -d " " -f 1`
- if [ ! "$ROOT_MOUNT_DEVICE" = "" ]; then
- mount -oremount,rw $ROOT_MOUNT_DEVICE $ROOT_MOUNT_POINT
- if [ -f $ROOT_MOUNT_POINT/sbin/init.orig ]; then
- rm $ROOT_MOUNT_POINT/sbin/init
- rm $ROOT_MOUNT_POINT/sbin/init.altboot
- mv $ROOT_MOUNT_POINT/sbin/init.orig $ROOT_MOUNT_POINT/sbin/init
- else
- echo "$ROOT_MOUNT_POINT/sbin/init.orig not found, not uninstalling altboot!"
- fi
- fi
- fi
- fi
- fi
-}
-
-
-
-
diff --git a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb
new file mode 100644
index 0000000000..4611d345e2
--- /dev/null
+++ b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb
@@ -0,0 +1,76 @@
+require altboot.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+## Laibsch: The following DEPENDS lines seem broken in light of the fact that
+## they have circular dependencies and depend on stuff that is recommended
+## elsewhere. Let's activate them only after further discussion
+#RDEPENDS_${PN} = "${PN}-conf kexec-tools ncurses"
+#RDEPENDS_${PN}_append_poodle = " kexec-tools"
+#RDEPENDS_${PN}-conf = "${PN}"
+
+PR = "r0"
+
+SVN_REV="65"
+#TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}"
+TAG = '1.0.x'
+SRC_URI = "svn://hentges.net/public/altboot/branches/;module=${TAG};rev=${SVN_REV};proto=svn"
+
+LDFLAGS += "-lncurses -lmenu"
+
+S = "${WORKDIR}/${TAG}/"
+
+do_configure() {
+ cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${S}/init.altboot_
+ mv ${S}/init.altboot_ ${S}/init.altboot
+}
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} ${S}curses_menu/altboot_menu.c -o altboot_menu
+}
+
+do_install() {
+ install -d ${D}/sbin
+ install -d ${D}/etc/altboot-menu
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -d ${D}/etc/altboot.rc
+ install -d ${D}/usr/share/doc/altboot
+ install -d ${D}/usr/share/sounds
+
+ if test -d ${S}/${MACHINE}
+ then
+ install -m 0644 ${S}/${MACHINE}/altboot*.cfg ${D}/etc
+ else
+ install -m 0644 ${S}/altboot*.cfg ${D}/etc
+ fi
+
+ install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
+ install -m 0644 ${S}/altboot.func ${D}/etc
+ install -m 0755 ${S}/init.altboot ${D}/sbin
+ install -m 0755 ${S}/altboot_menu ${D}/sbin
+
+ install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+
+ install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
+}
+
+pkg_postinst_${PN}() {
+ update-alternatives --install /sbin/init init /sbin/init.altboot 55
+}
+
+pkg_postrm_${PN}() {
+ update-alternatives --remove init /sbin/init.altboot
+}
+
+do_rm_work() {
+}
+
+PACKAGE_ARCH_${PN} = "all"
+PACKAGE_ARCH_${PN}-doc = "all"
+PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
+PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
+
+FILES_${PN}-conf = "/etc/altboot*.cfg"
diff --git a/packages/altboot/altboot_1.0.8.bb b/packages/altboot/altboot_1.0.8.bb
index c52c0972a3..96758871f9 100644
--- a/packages/altboot/altboot_1.0.8.bb
+++ b/packages/altboot/altboot_1.0.8.bb
@@ -1,48 +1,10 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: altboot_1.0.5-rc2.bb
-# Date: 21-Feb-06
+require altboot.inc
-DESCRIPTION = "The altboot bootmanager"
-HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
-LICENSE = "GPL"
-
-######################################################################################
-
-RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools"
-RRECOMMENDS_${PN}_append_akita = " kexec-tools"
-RRECOMMENDS_${PN}_append_spitz = " kexec-tools"
-RRECOMMENDS_${PN}_append_c7x0 = " kexec-tools"
-
-RDEPENDS_${PN} = "${PN}-conf"
-RDEPENDS_${PN}-conf = "${PN}"
-
-######################################################################################
-
-PR = "r1"
-
-######################################################################################
-
-PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
-
-PACKAGE_ARCH_${PN} = "all"
-PACKAGE_ARCH_${PN}-doc = "all"
-PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
+PR = "r2"
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-')}"
-
-SRC_URI = "cvs://anonymous@hentges.net/hentgescvs;method=pserver;tag=${TAG};module=altboot"
-
-S = "${WORKDIR}/altboot/"
-
-######################################################################################
-
-FILES_${PN}-conf = "/etc/altboot*.cfg"
-
-######################################################################################
+SRC_URI = "svn://hentges.net/public/altboot/tags/;module=${TAG};proto=svn"
+S = "${WORKDIR}/${TAG}/"
do_install() {
install -d ${D}/sbin
@@ -52,41 +14,36 @@ do_install() {
install -d ${D}/usr/share/doc/altboot
install -d ${D}/usr/share/sounds
- if test -d ${WORKDIR}/altboot/${MACHINE}
+ if test -d ${S}/${MACHINE}
then
- install -m 0644 ${WORKDIR}/altboot/${MACHINE}/altboot*.cfg ${D}/etc
+ install -m 0644 ${S}/${MACHINE}/altboot*.cfg ${D}/etc
else
- install -m 0644 ${WORKDIR}/altboot/altboot*.cfg ${D}/etc
+ install -m 0644 ${S}/altboot*.cfg ${D}/etc
fi
- install -m 0644 ${WORKDIR}/altboot/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${WORKDIR}/altboot/altboot.func ${D}/etc
- install -m 0755 ${WORKDIR}/altboot/init.altboot ${D}/sbin
+ install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
+ install -m 0644 ${S}/altboot.func ${D}/etc
+ install -m 0755 ${S}/init.altboot ${D}/sbin
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/*-* ${D}/etc/altboot-menu
+ install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- install -m 0755 ${WORKDIR}/altboot/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${WORKDIR}/altboot/altboot.rc/*.txt ${D}/etc/altboot.rc
+ install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
}
-######################################################################################
-
do_configure() {
- cat ${WORKDIR}/altboot/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${WORKDIR}/altboot/init.altboot_
- mv ${WORKDIR}/altboot/init.altboot_ ${WORKDIR}/altboot/init.altboot
+ cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}\"/" > ${S}/init.altboot_
+ mv ${S}/init.altboot_ ${S}/init.altboot
}
-######################################################################################
-
pkg_postinst_${PN}() {
update-alternatives --install /sbin/init init /sbin/init.altboot 55
}
-######################################################################################
-
pkg_postrm_${PN}() {
update-alternatives --remove init /sbin/init.altboot
}
+PACKAGE_ARCH_${PN} = "all"
diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR66.bb b/packages/altboot/altboot_1.1.1+wip-SVNR66.bb
new file mode 100644
index 0000000000..912082c70f
--- /dev/null
+++ b/packages/altboot/altboot_1.1.1+wip-SVNR66.bb
@@ -0,0 +1,75 @@
+require altboot.inc
+
+PR = "r0"
+
+SVN_REV = "66"
+SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV}"
+
+do_install() {
+ install -d ${D}/sbin
+ install -d ${D}/etc/altboot-menu
+ install -d ${D}/etc/altboot.rc
+ install -d ${D}/usr/share/doc/altboot
+ install -d ${D}/usr/share/sounds
+
+ if test -d ${S}/${MACHINE_DIR}
+ then
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
+ else
+ install -m 0644 ${S}/altboot*.cfg ${D}/etc/
+ fi
+
+ install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
+ install -m 0644 ${S}/altboot.func ${D}/etc
+ install -m 0644 ${S}/altboot.sbin ${D}/etc
+ install -m 0644 ${S}/altbootctl.conf ${D}/etc
+ install -m 0755 ${S}/init.altboot ${D}/sbin
+ install -m 0755 ${S}/altbootctl ${D}/sbin
+
+ ln -s /sbin/init.altboot ${D}/sbin/altboot
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
+ then
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ else
+ install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/altboot-menu/Advanced
+ then
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ fi
+
+ if test -d ${S}/${MACHINE_DIR}/altboot.rc
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ else
+ install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ fi
+}
+
+do_configure() {
+ cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
+ mv ${S}/init.altboot_ ${S}/init.altboot
+}
+
+pkg_postinst_${PN}() {
+ test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
+
+ update-alternatives --install /sbin/init init /sbin/init.altboot 55
+}
+
+pkg_postrm_${PN}() {
+ test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
+
+ update-alternatives --remove init /sbin/init.altboot
+}
diff --git a/packages/altboot/altboot_svn.bb b/packages/altboot/altboot_svn.bb
new file mode 100644
index 0000000000..0d3c869482
--- /dev/null
+++ b/packages/altboot/altboot_svn.bb
@@ -0,0 +1,75 @@
+require altboot.inc
+
+PV = "1.1.1+wip-${SRCDATE}"
+PR = "r2"
+
+SRC_URI = "svn://hentges.net/public/altboot;module=trunk;proto=svn"
+
+do_install() {
+ install -d ${D}/sbin
+ install -d ${D}/etc/altboot-menu
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -d ${D}/etc/altboot.rc
+ install -d ${D}/usr/share/doc/altboot
+ install -d ${D}/usr/share/sounds
+
+ if test -d ${S}/${MACHINE_DIR}
+ then
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
+ else
+ install -m 0644 ${S}/altboot*.cfg ${D}/etc/
+ fi
+
+ install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
+ install -m 0644 ${S}/altboot.func ${D}/etc
+ install -m 0644 ${S}/altboot.sbin ${D}/etc
+ install -m 0644 ${S}/altbootctl.conf ${D}/etc
+ install -m 0755 ${S}/init.altboot ${D}/sbin
+ install -m 0755 ${S}/altbootctl ${D}/sbin
+
+ ln -s /sbin/init.altboot ${D}/sbin/altboot
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ else
+ install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/altboot-menu/Advanced
+ then
+ install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ fi
+
+ if test -d ${S}/${MACHINE_DIR}/altboot.rc
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ else
+ install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ fi
+}
+
+do_configure() {
+ cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
+ mv ${S}/init.altboot_ ${S}/init.altboot
+}
+
+pkg_postinst_${PN}() {
+ test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
+
+ update-alternatives --install /sbin/init init /sbin/init.altboot 55
+}
+
+pkg_postrm_${PN}() {
+ test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
+
+ update-alternatives --remove init /sbin/init.altboot
+}
+
diff --git a/packages/altboot/altboot_wip.bb b/packages/altboot/altboot_wip.bb
deleted file mode 100644
index 2de4c812b9..0000000000
--- a/packages/altboot/altboot_wip.bb
+++ /dev/null
@@ -1,99 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: altboot_1.0.5-rc2.bb
-# Date: 21-Feb-06
-
-DESCRIPTION = "The altboot bootmanager"
-MAINTAINER = "Matthias 'CoreDump' Hentges <oe@hentges.net>"
-HOMEPAGE = "http://www.hentges.net/misc/openzaurus/index.shtml"
-LICENSE = "GPL"
-
-######################################################################################
-
-RRECOMMENDS_${PN} = "e2fsprogs-e2fsck dosfstools"
-RRECOMMENDS_${PN}_append_akita = " kexec-tools"
-RRECOMMENDS_${PN}_append_spitz = " kexec-tools"
-RRECOMMENDS_${PN}_append_c7x0 = " kexec-tools"
-
-RDEPENDS_${PN} = "${PN}-conf"
-RDEPENDS_${PN}-conf = "${PN}"
-
-######################################################################################
-
-WIP_DATE = "20061123"
-
-PV = "1.1.1+wip-${WIP_DATE}"
-PR = "r0"
-
-######################################################################################
-
-PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
-
-PACKAGE_ARCH_${PN} = "all"
-PACKAGE_ARCH_${PN}-doc = "all"
-PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-
-TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '-').replace('+', '-')}"
-
-SRC_URI = "cvs://anonymous@hentges.net/hentgescvs;method=pserver;tag=${TAG};module=altboot"
-
-S = "${WORKDIR}/altboot/"
-
-######################################################################################
-
-FILES_${PN}-conf = "/etc/altboot*cfg"
-
-######################################################################################
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot-menu/Advanced
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
- install -d ${D}/etc/skel/altboot
-
- if test -d ${WORKDIR}/altboot/${MACHINE}
- then
- install -m 0644 ${WORKDIR}/altboot/${MACHINE}/altboot*.cfg ${D}/etc/
- else
- install -m 0644 ${WORKDIR}/altboot/altboot*.cfg ${D}/etc/
- fi
-
- install -m 0644 ${WORKDIR}/altboot/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${WORKDIR}/altboot/altboot.func ${D}/etc
- install -m 0644 ${WORKDIR}/altboot/altbootctl.conf ${D}/etc
- install -m 0755 ${WORKDIR}/altboot/init.altboot ${D}/sbin
- install -m 0755 ${WORKDIR}/altboot/altbootctl ${D}/sbin
-
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/*-* ${D}/etc/altboot-menu
-
- install -m 0755 ${WORKDIR}/altboot/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
-
- install -m 0755 ${WORKDIR}/altboot/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${WORKDIR}/altboot/altboot.rc/*.txt ${D}/etc/altboot.rc
-}
-
-######################################################################################
-
-do_configure() {
- cat ${WORKDIR}/altboot/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${WORKDIR}/altboot/init.altboot_
- mv ${WORKDIR}/altboot/init.altboot_ ${WORKDIR}/altboot/init.altboot
-}
-
-######################################################################################
-
-pkg_postinst_${PN}() {
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-######################################################################################
-
-pkg_postrm_${PN}() {
- update-alternatives --remove init /sbin/init.altboot
-}
-
diff --git a/packages/altboot/files/akita/altboot-2.4.cfg b/packages/altboot/files/akita/altboot-2.4.cfg
deleted file mode 100644
index 4ea84ce32d..0000000000
--- a/packages/altboot/files/akita/altboot-2.4.cfg
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Altboot machine configuration for: Akita / Kernel 2.4
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-
-SD_DEVICE="/dev/mmcda1"
-SD_KERNEL_MODULE="/lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o"
-
-USB_HOST_AVAILABLE="yes"
-USB_STORAGE_MODULES="usb_ohci_pxa27x usb-storage"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/akita/altboot-2.6.cfg b/packages/altboot/files/akita/altboot-2.6.cfg
deleted file mode 100644
index 62e8ea2434..0000000000
--- a/packages/altboot/files/akita/altboot-2.6.cfg
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Altboot machine configuration for: Akita / Kernel 2.6
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-ENABLE_SOUND="yes"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcblk0p1"
-SD_KERNEL_MODULE=""
-
-USB_HOST_AVAILABLE="yes"
-USB_STORAGE_MODULES="ohci_hcd usb_storage sd_mod"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-USB_NETWORKING_AVAILABLE="yes"
-USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
-USB_NW_DEVICE="usb0"
-
-KEXEC_KERNEL_DIR="/boot"
-KEXEC_BIN="/usr/sbin/kexec"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/altboot-menu/00-Default b/packages/altboot/files/altboot-menu/00-Default
deleted file mode 100644
index 9d29fdae2a..0000000000
--- a/packages/altboot/files/altboot-menu/00-Default
+++ /dev/null
@@ -1,14 +0,0 @@
-# !/bin/sh
-M_TITLE="Normal Boot"
-
-
-run_module() {
- exec $REAL_INIT "$INIT_RUNLEVEL"
- exit 0
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/10-noGui b/packages/altboot/files/altboot-menu/10-noGui
deleted file mode 100644
index 57141d498d..0000000000
--- a/packages/altboot/files/altboot-menu/10-noGui
+++ /dev/null
@@ -1,14 +0,0 @@
-# !/bin/sh
-M_TITLE="Don't launch GUI"
-
-
-run_module() {
- clear ; exec $REAL_INIT "$NO_GUI_RL"
- exit 0
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/15-bootSD b/packages/altboot/files/altboot-menu/15-bootSD
deleted file mode 100644
index 3cf49deea5..0000000000
--- a/packages/altboot/files/altboot-menu/15-bootSD
+++ /dev/null
@@ -1,32 +0,0 @@
-# !/bin/sh
-#
-# Copyright Matthias Hentges (c) 2005
-#
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)
-
-
-M_TITLE="Boot SD card"
-
-test "$DISABLE_SD_BOOT" = yes && exit 0
-
-# This function is activated by init.altboot by calling this script with the "run" option
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- # Mount /proc, etc
- init_rootfs
-
- mount_sd
-
- # Check for a real fs and loop-images.
- check_target "$SD_MOUNTPOINT" >/dev/tty0
-
-}
-
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module "$2";;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/20-bootCF b/packages/altboot/files/altboot-menu/20-bootCF
deleted file mode 100644
index 4add6e6631..0000000000
--- a/packages/altboot/files/altboot-menu/20-bootCF
+++ /dev/null
@@ -1,32 +0,0 @@
-# !/bin/sh
-#
-# Copyright Matthias Hentges (c) 2005
-#
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)
-
-
-M_TITLE="Boot CF card"
-
-test "$DISABLE_CF_BOOT" = yes && exit 0
-
-# This function is activated by init.altboot by calling this script with the "run" option
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- # Mount /proc, etc
- init_rootfs
-
- mount_cf
-
- # Check for a real fs and loop-images.
- check_target "$CF_MOUNTPOINT"
-
-}
-
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module "$2";;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/99-ownScripts-example b/packages/altboot/files/altboot-menu/99-ownScripts-example
deleted file mode 100644
index 7566416b87..0000000000
--- a/packages/altboot/files/altboot-menu/99-ownScripts-example
+++ /dev/null
@@ -1,68 +0,0 @@
-# !/bin/sh
-#
-# Copyright Matthias Hentges (c) 2005
-#
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)
-
-
-# This file will teach you how to implement your own scripts while using existing altboot
-# code.
-
-# /sbin/init.altboot searches /etc/altboot-menu for scripts. It will only list scripts which
-# return a title when run with the "title" parameter.
-# Script which do not return a title will never be shown in the boot menu!
-#
-M_TITLE="altboot sample"
-
-# We can use that to deactivate certain scripts:
-exit 0
-
-# The "title" parameter is implemented at the end of this script so it will never be reached
-# and the script will simply be ignored by altboot.
-
-# This function is activated by init.altboot by calling this script with the "run" option
-run_module() {
-
- # altboot.func contains re-useable code. If you intend to use check_target (see below)
- # you must keep this line. If not, delete it.
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
-
- # The only thing you'll have to do is get your medium mounted.
- # The following lines mount a SD card on 2.4-series kernels on a Zaurus
-
- ##########################################
-
- # Mount /proc, etc
- init_rootfs
-
- echo -n "Loading SD kernel module..."
- /sbin/insmod $SD_KERNEL_MODULE >/dev/null 2>&1 && echo ok || die "insmod failed"
-
- echo -n "Mounting $SD_MOUNTPOINT..." >/dev/tty0
- /bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT >/dev/null 2>&1 && echo ok >/dev/tty0|| die "/bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT failed"
-
- echo ""
-
- # Give the SD and CF mounting some time. This is a must for SD
- sleep 2
- ##########################################
-
- # Once the medium (be it a CF or SD card, or even a NFS drive) is mounted somewhere,
- # just call check_target with the mountpoint as parameter.
- # check_target searches the medium for a real filesystem and loop-images and
- # asks the user what to boot if there are several choices.
-
- # Check for a real fs and loop-images.
- check_target "$SD_MOUNTPOINT" >/dev/tty0
-
- # Done :)
-
-}
-
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module "$2";;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/30-bootUSB-Stick b/packages/altboot/files/altboot-menu/Advanced/30-bootUSB-Stick
deleted file mode 100644
index b573e7a10c..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/30-bootUSB-Stick
+++ /dev/null
@@ -1,47 +0,0 @@
-# !/bin/sh
-#
-# Copyright Matthias Hentges (c) 2005
-#
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)
-
-
-M_TITLE="Boot USB Storage"
-
-test "$USB_HOST_AVAILABLE" = "yes" || exit 0
-
-# This function is activated by init.altboot by calling this script with the "run" option
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- # Mount /proc, etc
- init_rootfs
-
- echo "Starting USB..."
-
- for module in $USB_STORAGE_MODULES
- do
- echo -en "\t - $module: "
- modprobe "$module" >/dev/null 2>&1 && echo ok || die "Failed to modprobe [$module]"
- done
-
- echo -n "Mounting $USB_STORAGE_PARTITION..." >/dev/tty0
-
- mkdir -p /media/usb-storage >/dev/null 2>&1
-
- sleep "$USB_STORAGE_WAIT"
-
- /bin/mount -t auto -o defaults,noatime $USB_STORAGE_PARTITION /media/usb-storage >/dev/null 2>&1 && echo ok >/dev/tty0|| die "/bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT failed"
-
- echo ""
-
- # Check for a real fs and loop-images.
- check_target "/media/usb-storage" >/dev/tty0
-}
-
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module "$2";;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/40-bootNFS b/packages/altboot/files/altboot-menu/Advanced/40-bootNFS
deleted file mode 100644
index 4f5c195be2..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/40-bootNFS
+++ /dev/null
@@ -1,110 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: 40-bootNFS
-# Date: 14-Apr-06
-
-
-M_TITLE="Boot from NFS"
-
-test "$DISABLE_NFS_BOOT" = yes && exit 0
-
-# This function is activated by init.altboot by calling this script with the "run" option
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- # Mount /proc, etc
- init_rootfs
-
- nfs_host="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'|sed -n "s/\(.*\)\:\(.*\)/\1/p" `"
- nfs_mounts="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $1}'`"
- nfs_mountpoints="`cat /etc/fstab | grep -v ^# | grep nfs | awk '{print $2}'`"
-
- start_networking "$nfs_host"
-
- if test -z "$nfs_host"
- then
- mdie "${C_RED}No configured NFS drives found in /etc/fstab$C_RESET"
-
- fi
-
-
- if test "` echo "$nfs_mountpoints" |wc -l | tr -d " "`" -gt 1
- then
- echo -e "Please select your NFS root:\n"
-
- cnt=1
- for nfs_mount in $nfs_mountpoints
- do
- echo -e "\t[$cnt] $nfs_mount"
- let cnt=$cnt+1
- done
-
- echo ""
-
- while test -z "$selection"
- do
- stty echo
- echo -n "Boot NFS root: "
-
- if test "$AUTOBOOT" != "yes"
- then
- read junk < /dev/tty1
- else
- if test -e /etc/.altboot-bootNFS-source.last
- then
- junk="`cat /etc/.altboot-bootNFS-source.last`"
- test -z "$junk" && read junk < /dev/tty1 || echo "$junk (autoboot)"
- else
- read junk < /dev/tty1
- fi
- fi
-
-
- cnt=1
- for nfs_mount in $nfs_mounts
- do
- if test "$junk" = "$cnt"
- then
- selection="$nfs_mount"
- echo "$junk" > /etc/.altboot-bootNFS-source.last
- fi
- let cnt=$cnt+1
- done
-
- done
- else
- test -z "$nfs_mounts" && die "No NFS mounts configured in /etc/fstab!"
- selection="$nfs_mounts"
- fi
-
- mkdir -p /media/nfsroot || mdie "mkdir -p /media/nfsroot failed!"
-
- echo -n "Mounting NFS root..."
-
- if ( mount | grep -q "/media/nfsroot" )
- then
- echo "/media/nfsroot already used, tying to umount..."
- umount /media/image
- losetup -d /dev/loop0
- umount /media/nfsroot || die "umount failed!"
- fi
-
- mount -t nfs "$selection" /media/nfsroot && echo ok || mdie "mount -t nfs "$selection" /media/nfsroot failed!"
-
- # Use configured resolv.conf in the pivoted rootfs
- #echo -n "Copying resolv.conf..."
- #cp /etc/resolv.conf /media/nfsroot/etc && echo ok || echo "FAILED"
-
- check_target "/media/nfsroot" bootNFS
-
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module "$2";;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/55-bin-sh b/packages/altboot/files/altboot-menu/Advanced/55-bin-sh
deleted file mode 100644
index 6c9aef3f3e..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/55-bin-sh
+++ /dev/null
@@ -1,27 +0,0 @@
-# !/bin/sh
-M_TITLE="init=/bin/sh"
-
-test "$DISABLE_BINSH_BOOT" = yes && exit 0
-
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- test "$ASK_PW_ON_BOOT" != "yes" && verify_master_pw >/dev/tty0
-
- # Mount /proc, etc
- init_rootfs
-
- echo -e "\nBoot system with 'exec /sbin/init 5'\n"
- while true
- do
- exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
- echo "WARNING: Shell was killed!"
- done
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/60-orig-init b/packages/altboot/files/altboot-menu/Advanced/60-orig-init
deleted file mode 100644
index ad9f2c78e1..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/60-orig-init
+++ /dev/null
@@ -1,20 +0,0 @@
-# !/bin/sh
-M_TITLE="Boot original INIT"
-
-exit 0
-
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- echo "altboot: Using real init [$REAL_INIT] [$INIT_RUNLEVEL] *" >/dev/tty1
- exec $REAL_INIT $INIT_RUNLEVEL
- exit 0
-
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/70-install-tgz b/packages/altboot/files/altboot-menu/Advanced/70-install-tgz
deleted file mode 100644
index aca0d047c6..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/70-install-tgz
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/bin/sh
-M_TITLE="Install RootFS from tar.gz"
-M_FLAGS="noRemember"
-
-run_module(){
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- # Mount /proc, etc
- init_rootfs
-
- # Mount
- mount_sd ingore_errors
- mount_cf
- mount_home
-
- for source in /home /media/card /media/cf
- do
- #echo "source: [$source]"
- rootfs_files="`ls -1 $source | grep "rootfs.tar.gz"`"
-
- #echo "rootfs_file: [$rootfs_files]"
- if test "`echo "$rootfs_files" | wc -l | tr -d " "`" -gt 1
- then
- echo "Multiple rootfs files not supported, yet"
- else
- if test -n "$rootfs_files"
- then
- rootfs_source="$source/$rootfs_files"
- echo "Using [$rootfs_source]"
- break
- fi
- fi
- done
-
- test -z "$rootfs_source" && die "No rootfs.tar.gz found"
-
- echo -e "\nPlease choose the target of this installation:\n"
-
- echo -e "\t [1] SD / MMC"
- echo -e "\t [2] Compact Flash"
-
- echo ""
- while true
- do
- echo -n "Your target: "
- read junk
-
- case "$junk" in
- 1) if (mount | grep -q "/media/card ")
- then
- rootfs_target="/media/card"; break
- else
- echo -e "\nInstallation target [/media/card] not mounted\n"
- fi ;;
- 2) if (mount | grep -q "/media/cf ")
- then
- rootfs_target="/media/cf"; break
- else
- echo -e "\nInstallation target [/media/cf] not mounted\n"
- fi ;;
- esac
- done
-
- echo -e "\nPlease choose the type of this installation:\n"
-
- echo -e "\t [1] Imagefile (loopfile)"
- echo -e "\t [2] Direct Install"
-
- echo ""
- while true
- do
- echo -n "Install type: "
- read junk
-
- case "$junk" in
- 1) if test -x /sbin/mkfs.ext2
- then
- rootfs_type="image"
- break
- else
- echo -e "\nNOTE: mkfs.ext2 (from e2fsprogs-mke2fs) not found, loop-images not supported\n"
- fi ;;
- 2) rootfs_type="direct" ; break ;;
- esac
- done
-
- case "$rootfs_type" in
- image) install_rootfs_image "$rootfs_target";;
- direct) install_rootfs_direct "$rootfs_target";;
- esac
-}
-
-clear_directories(){
- test "$1" = "/" -o "$1" = "/ " && die "clear_directories(): You don't want to do that."
-
- ! test -d "$1" && die "clear_directories(): [$1] not found."
-
- for d in bin dev media proc sys usr boot etc lib mnt sbin tmp var
- do
- if test -d "$1/$d"
- then
- echo "Removing [$1/$d]..."
- rm -rf "$1/$d"
- fi
- done
-
-}
-
-
-install_rootfs_direct(){
-
- mount | grep -q "$1 " || die "Installation target [$1] not mounted"
-
- echo -e "Do you want to remove existing directories from [$1]\n before installing the new rootfs?"
- echo ""
-
- while true
- do
- echo -n "Remove old directories? [Y|n] "
- read junk </dev/tty0 >/dev/tty0 2>&1
-
- case "$junk" in
- Y|y|"") clear_directories "$1"; break ;;
- esac
- done
-
- echo "Please press <ENTER> to begin the installation"
- read junk </dev/tty0 >/dev/tty0 2>&1
-
- test -d "$1" || die "Directory [$1] not found"
-
- echo -n "Installing rootfs, please wait..."
- tar -xzf "$rootfs_source" -C "$1" >/dev/null 2>&1 && echo ok || die "tar -xzf \"$rootfs_source\" -C \"$1\" failed!"
-
- echo -n "Syncing drives..."
- sync
- echo "done"
-
-# umount "$1"
-
- echo "Press <ENTER> to bring up the altboot menu"
- read junk </dev/tty0 >/dev/tty0 2>&1
- exec /sbin/init.altboot -force
-
-}
-
-install_rootfs_image(){
-
- mount | grep -q "$1 " || die "Installation target [$1] not mounted"
-
- echo ""
- echo "Please enter a name for the image file."
- echo "Do not use the <space> character"
- echo ""
-
-
- while true
- do
- echo -n "Image name: "
- read junk
-
- if test -n "$junk"
- then
- if test -e "$1/boot-images/${junk}-rootfs.bin"
- then
- echo -e "\nFile [$1/boot-images/${junk}-rootfs.bin] already exists."
-
- while true
- do
- echo -n "Overwrite? [y|N] "
- read junk2
-
- case "$junk2" in
- Y|y) break;;
- n|N|"") install_rootfs_image "$1"
- exit 0;;
- esac
- done
- rootfs_image_name="${junk}-rootfs.bin"
- break
- else
- echo -n "Use [$junk] as name? [Y|n] "
- read junk2
-
- case "$junk2" in
- "Y"|"y"|"") rootfs_image_name="${junk}-rootfs.bin"
- break ;;
- *) echo "err ]$junk]";;
- esac
- fi
- fi
- done
-
- echo ""
- echo "Please enter the image size in MegaBytes"
- echo "Must be at least 30Mb"
- echo ""
-
- while true
- do
- echo -n "Image size: "
- read junk
-
- junk="`echo "$junk" | sed "s/[a-zA-Z]//g"`"
-
- if test -n "$junk"
- then
- if test "$junk" -gt 29
- then
- echo -n "Is [${junk}Mb] correct? [Y|n] "
- read junk2
-
- case "$junk2" in
- Y|y|"") rootfs_image_size="$junk"
- break ;;
- esac
-
- else
- echo "Image size of [${junk}Mb] is too small!"
- fi
- fi
- done
-
- test -z "$rootfs_image_name" -o -z "$rootfs_image_size" && die "DEBUG: Empty VAR in install_rootfs_image()"
-
- echo ""
- echo "Creating [$rootfs_image_name] (${rootfs_image_size}Mb) on [$1]"
- echo "Please wait..."
- mkdir -p "$1/boot-images"
-
- dd if=/dev/zero of="$1/boot-images/$rootfs_image_name" bs=1024k count=$rootfs_image_size >/dev/null
-
- echo -n "Creating an ext2 filesystem on $rootfs_image_name..."
- losetup /dev/loop0 "$1/boot-images/$rootfs_image_name" || die "losetup /dev/loop0 \"$1/boot-images/$rootfs_image_name\" failed!"
- mkfs.ext2 -m0 /dev/loop0 >/dev/null 2>&1 && echo done || die "mkfs.ext2 -m0 /dev/loop0 failed!"
-
- echo -n "Mounting loopfile..."
- mkdir -p /media/image
- mount /dev/loop0 /media/image && echo ok || die "mount /dev/loop0 /media/image failed!"
-
- echo -n "Installing rootfs, please wait..."
- tar -xzf "$rootfs_source" -C "/media/image" >/dev/null 2>&1 && echo ok || die "tar -xzf \"$rootfs_source\" -C \"$1\" failed!"
-
- echo -n "Syncing drives..."
- sync
- echo "done"
-
- umount "/media/image" && losetup -d /dev/loop0
-
- echo "Press <ENTER> to bring up the altboot menu"
- read junk </dev/tty0 >/dev/tty0 2>&1
- exec /sbin/init.altboot -force
-
-}
-
-
-
-#run_module
-
-case "$1" in
-title) echo "$M_TITLE";;
-flags) echo "$M_FLAGS";;
-run) run_module "$2";;
-esac
diff --git a/packages/altboot/files/altboot-menu/Advanced/70-setKernel b/packages/altboot/files/altboot-menu/Advanced/70-setKernel
deleted file mode 100644
index 50f61d034f..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/70-setKernel
+++ /dev/null
@@ -1,68 +0,0 @@
-# !/bin/sh
-M_TITLE="Choose kernel for next boot"
-
-# Deprecated due to altbootctl
-exit 0
-
-# Only kernel 2.6 offers kexec support
-uname -r | grep -q "^2.6" || exit 0
-
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- test -z "$KEXEC_KERNEL_DIR" && KEXEC_KERNEL_DIR="/boot"
- test -x "$KEXEC_BIN" || mdie "kexec-tools not found [$KEXEC_BIN]"
-
- # Mount /proc, etc
- # init_rootfs
-
- if test `ls -1 $KEXEC_KERNEL_DIR | grep -v "kexec.cfg" | wc -l | tr -d " "` -gt 1
- then
- echo -e "\nSelect the kernel for use of the next boot:\n"
-
- cnt=1 ; reset_pref "kexec_klist"
- for k in `ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `
- do
- echo -e "\t[$cnt] $k"
- set_pref "kexec_klist" "$cnt" "$k"
-
- let cnt=$cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -n "Select a kernel: "
- read junk
-
- #echo_pref kexec_klist
-
- get_pref "kexec_klist" "$junk" KEXEC_SELECTED_KERNEL && break
-
- done
- else
- KEXEC_SELECTED_KERNEL="`ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `"
- fi
-
- echo -e "\nUsing [$KEXEC_SELECTED_KERNEL]"
-
- if ! test -e "$KEXEC_SELECTED_KERNEL.kexec.cfg"
- then
- echo -e "\nWARNING: This kernel has not been configured."
- echo -e "It will only boot correctly if CMDLINE is compiled in.\n"
- fi
-
- export USE_KEXEC_ON_NEXT_BOOT=yes
- export KEXEC_SELECTED_KERNEL
- show_menu
-}
-
-
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec b/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
deleted file mode 100644
index 1b8fc6e547..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
+++ /dev/null
@@ -1,248 +0,0 @@
-# !/bin/sh
-M_TITLE="Configure kexec CMDLINE"
-
-# Deprecated due to altbootctl
-exit 0
-
-
-# Only kernel 2.6 offers kexec support
-uname -r | grep -q "^2.6" || exit 0
-
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- test -z "$KEXEC_KERNEL_DIR" && KEXEC_KERNEL_DIR="/boot"
- test -x "$KEXEC_BIN" || mdie "kexec-tools not found [$KEXEC_BIN]"
-
- # Mount /proc, etc
- init_rootfs
-
- if test `ls -1 $KEXEC_KERNEL_DIR | grep -v "kexec.cfg" | wc -l | tr -d " "` -gt 1
- then
- echo -e "\nPlease select the kernel you want to configure:\n"
-
- cnt=1 ; reset_pref "kexec_klist"
- for k in `ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `
- do
- echo -e "\t[$cnt] $k"
- set_pref "kexec_klist" "$cnt" "$k"
-
- let cnt=$cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -n "Select a kernel: "
- read junk
-
- get_pref "kexec_klist" "$junk" KEXEC_KERNEL && break
-
- done
- else
- KEXEC_KERNEL="`ls -1 $KEXEC_KERNEL_DIR/zImage* | grep -v "kexec.cfg" `"
- fi
-
- echo -e "\nUsing [$KEXEC_KERNEL]"
-
- configure_rootdev
- configure_roottype
- configure_verbose
- configure_custom
-
- CMDLINE="console=ttyS0,115200n8 console=tty1 dyntick=enable fbcon=rotate:1 noinitrd root=$KERNEL_ROOTDEV rootfstype=$KERNEL_ROOTFSTYPE $KERNEL_VERBOSE $KERNEL_CUSTOM"
-
- echo -en "\nWriting CMDLINE to $KEXEC_KERNEL.kexec.cfg..."
- echo "$CMDLINE" > $KEXEC_KERNEL.kexec.cfg && echo ok || mdie FAILED
-
- show_menu
-}
-
-configure_rootdev() {
-
- echo -e "\nPlease choose a root device (root=*):\n"
-
- cnt=1 ; reset_pref "kexec_rootdev"
- for root in /dev/mtdblock2 /dev/hda1 "Manual Entry"
- do
- echo -e "\t[$cnt] $root"
- set_pref kexec_rootdev "$cnt" "$root"
- let cnt=cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -n "Select a root device: "
- read junk
-
- get_pref kexec_rootdev "$junk" KERNEL_ROOTDEV && break
- done
-
- if test "$KERNEL_ROOTDEV" = "Manual Entry"
- then
- echo ""
-
- KERNEL_ROOTDEV=""
-
- while test -z "$KERNEL_ROOTDEV"
- do
- while true
- do
- echo -n "Enter the root device: "
- read junk
- test -n "$junk" && break
- done
-
- echo -en "\nIs [$junk] correct? [Y|n] "
- read junk2
- while true
- do
- if test "$junk2" = y -o "$junk2" = Y -o -z "$junk2"
- then
- KERNEL_ROOTDEV="$junk"
- break
- fi
-
- break
- done
- done
- fi
-
- echo "Using [$KERNEL_ROOTDEV] as root device"
-}
-
-configure_roottype() {
-
- echo -e "\nPlease choose a rootfs type (rootfs=*):\n"
-
- cnt=1 ; reset_pref "kexec_rootfstype"
- for root in jffs2 ext2 ext3 "Manual Entry"
- do
- echo -e "\t[$cnt] $root"
- set_pref kexec_rootfstype "$cnt" "$root"
- let cnt=cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -n "Select a rootfs type: "
- read junk
-
- get_pref kexec_rootfstype "$junk" KERNEL_ROOTFSTYPE && break
- done
-
- if test "$KERNEL_ROOTFSTYPE" = "Manual Entry"
- then
- echo ""
-
- KERNEL_ROOTFSTYPE=""
-
- while test -z "$KERNEL_ROOTFSTYPE"
- do
- while true
- do
- echo -n "Enter the rootfs type: "
- read junk
- test -n "$junk" && break
- done
-
- echo -en "\nIs [$junk] correct? [Y|n] "
- read junk2
- while true
- do
- if test "$junk2" = y -o "$junk2" = Y -o -z "$junk2"
- then
- KERNEL_ROOTFSTYPE="$junk"
- break
- fi
-
- break
- done
- done
- fi
-
- echo "Using [$KERNEL_ROOTFSTYPE] as rootfs type"
-}
-
-configure_verbose() {
- echo -e "\nDo you want to see kernel messages? ([quiet | debug]):\n"
-
- echo -e "\t[1] Yes"
- echo -e "\t[2] No"
-
- echo ""
-
- while true
- do
- echo -n "Select one of the above: "
- read junk
-
- test "$junk" = 1 -o "$junk" = 2 && break
- done
-
- test "$junk" = 1 && KERNEL_VERBOSE="debug" || KERNEL_VERBOSE="quiet"
-
-}
-
-configure_custom() {
- echo -e "\nDo you want to set custom kernel options?\n"
-
- echo -e "\t[1] Yes"
- echo -e "\t[2] No"
-
- echo ""
-
- while true
- do
- echo -n "Select one of the above: "
- read junk
-
- test "$junk" = 1 -o "$junk" = 2 && break
- done
-
- if test "$junk" = 1
- then
-
- echo ""
-
- KERNEL_CUSTOM=""
-
- while test -z "$KERNEL_CUSTOM"
- do
- while true
- do
- echo -n "Enter kernel options: "
- read junk
- test -n "$junk" && break
- done
-
- echo -en "\nIs [$junk] correct? [Y|n] "
- read junk2
- while true
- do
- if test "$junk2" = y -o "$junk2" = Y -o -z "$junk2"
- then
- KERNEL_CUSTOM="$junk"
- break
- fi
-
- break
- done
- done
- fi
-
- echo "Using [$KERNEL_CUSTOM] as custom kernel options"
-
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-run) run_module;;
-esac
-
diff --git a/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs b/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
deleted file mode 100644
index 2d305e349f..0000000000
--- a/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
+++ /dev/null
@@ -1,323 +0,0 @@
-# !/bin/sh
-M_TITLE="Copy rootfs to SD/CF"
-M_FLAGS="noRemember"
-
-# Unfinished script.
-exit 0
-
-ask_target() {
- available_disks="`mount | grep "/media" | grep -v ram | awk '{print $3}'`"
-
- if test -z "$available_disks"
- then
- die "No mounted targets found!"
- fi
-
- cnt=1
- for d in $available_disks
- do
- echo -e "\t[$cnt] $d"
- let cnt=$cnt+1
- done
-
- while test -z "$ROOTFS_TARGET"
- do
- echo -n "Target: "
- read junk </dev/tty1
-
- x=1
- for d in $available_disks
- do
- if test "$junk" = "$x"
- then
- ROOTFS_TARGET="$d"
- break
- fi
- let x=$x+1
- done
-
-
- done
-
- ROOTFS_TARGET_DEV="`mount | grep "$ROOTFS_TARGET " | awk '{print $1}'`"
- ROOTFS_TARGET_FS="`mount | grep "$ROOTFS_TARGET " | awk '{print $5}'`"
-
- echo "Using [$ROOTFS_TARGET] on [$ROOTFS_TARGET_DEV] with [$ROOTFS_TARGET_FS] filesystem"
-}
-
-ask_format() {
- if test "$ROOTFS_TARGET_FS" != ext2
- then
- echo -e "\nYou are not using the ext2 filesystem on your target ($ROOTFS_TARGET_FS)$.\nYou now have two choices:"
- echo -e "\t[1] Reformat to ext2"
- echo -e "\t[2] Use an image-file ontop of the existing filesystem"
-
- while true
- do
- echo -n "Your choice: "
- read junk </dev/tty1
-
- case "$junk" in
- 1) ROOTFS_TARGET_TYPE="ext2"
- break ;;
- 2) ROOTFS_TARGET_TYPE="image"
- break ;;
- esac
- done
-
- echo "Mode: [$ROOTFS_TARGET_TYPE]"
- else
- echo -e "\nYou are using the ext2 filesystem on your target.\nYou now have two choices:"
- echo -e "\t[1] Install to the target directly"
- echo -e "\t[2] Use an image-file ontop of the existing filesystem\n"
-
- while true
- do
- echo -n "Your choice: "
- read junk </dev/tty1
-
- case "$junk" in
- 1) ROOTFS_TARGET_TYPE="direct"
- break ;;
- 2) ROOTFS_TARGET_TYPE="image"
- break ;;
- esac
- done
-
- echo "Mode: [$ROOTFS_TARGET_TYPE]"
-
- fi
-}
-
-ask_confirm() {
- echo -e "\nYour choices are:"
- echo -e "\tTarget:\t$ROOTFS_TARGET_DEV (currently mounted as $ROOTFS_TARGET)"
- case "$ROOTFS_TARGET_TYPE" in
- direct) echo -e "\tType:\t${C_RED}direct install, reformat if required${C_RESET}";;
- image) echo -e "\tType:\tinstall into image-file";;
- esac
-
- while true
- do
- echo -n "Continue? [y|n] "
- read junk </dev/tty1
-
- case "$junk" in
- y) break ;;
- n) exit 1
- esac
- done
-}
-
-direct_install() {
-
- #format_target
-
- echo -n "Creating temporary directory..."
- mkdir -p /media/temp && echo ok || die "mkdir -p /media/temp failed!"
-
- echo -n "Mounting [$ROOTFS_TARGET_DEV] as /media/temp..."
- mount "$ROOTFS_TARGET_DEV" /media/temp && echo "ok" || die "mount "$ROOTFS_TARGET_DEV" /media/temp FAILED"
-
- copy_files
-}
-
-format_target() {
- echo -e "\n\nI'm about to format your target ($ROOTFS_TARGET_DEV) to the ext2 filesystem\n"
- echo -e "${C_RED}YOU WILL LOSE ALL DATA ON YOUR TARGET IF YOU CONTINUE${C_RESET}\n"
-
- while true
- do
- echo -n "Continue? [y|n] "
- read junk </dev/tty1
-
- case "$junk" in
- y) break ;;
- n) die "User aborted mkfs"
- break ;;
- esac
- done
-
- echo -n "Umounting $ROOTFS_TARGET_DEV..."
- umount "$ROOTFS_TARGET_DEV" && echo "ok" || die "umount $ROOTFS_TARGET_DEV failed!"
-
-
- echo "Formatting..."
- /sbin/mkfs.ext2 -m0 "$ROOTFS_TARGET_DEV" && echo -e "\nmkfs.ext2 finished" || die "\nmkfs.ext2 FAILED"
- }
-
-image_install() {
- flash_size="` df -h | grep "/"$| awk '{print $3}'| sed s/M//`"
-
- echo -e "\nHow many MB do you want to configure for the image file?"
- echo -e "It is generally a good idea to use 2.5x the used flash size ($flash_size)\n"
-
- while test -z "$ROOTFS_IMAGE_SIZE"
- do
- echo -n "Size in MegaBytes: "
- read junk
-
- # test fails if $junk isn't a number
- if test "$junk" -gt 0 >/dev/null 2>&1
- then
- echo -n "Use [$junk]MB? [y|n] "
- read junk2
- if test "$junk2" = y
- then
- ROOTFS_IMAGE_SIZE="$junk"
- fi
- fi
- done
-
- echo -e "\nPlease enter a name for the image file."
- echo "The name must _not_ contain whitespaces or the '-' sign."
-
- while test -z "$ROOTFS_IMAGE_NAME"
- do
- echo -n "File name: "
- read junk
-
- if ! test -z "$junk"
- then
- echo -n "Use [$junk] as image name? [y|n] "
- read junk2
-
- if test "$junk2" = y
- then
- ROOTFS_IMAGE_NAME="$junk"
- fi
- fi
- done
-
- echo -e "\nDo you want to format [$ROOTFS_TARGET_DEV] to the ext2 filesystem?"
-
- while true
- do
- echo -n "Format to ext2? [y|n] "
- read junk
- case "$junk" in
- y) format_target
- break ;;
- n) break ;;
- esac
- done
-
- /etc/init.d/devices start
-
- echo -en "\nCreating image file [$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin] (${ROOTFS_IMAGE_SIZE}MB)..."
- mkdir -p "$ROOTFS_TARGET/$IMAGE_PATH"
-
- dd if=/dev/zero of="$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin" bs=1024k count=$ROOTFS_IMAGE_SIZE >/dev/null 2>&1 && echo ok || die "FAILED"
- losetup /dev/loop1 "$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin"
-
- echo -n "Creating filesystem..."
- mkfs.ext2 -m0 /dev/loop1 >/dev/null 2>&1 && echo ok || die FAILED
-
- mkdir -p /media/temp
- mount /dev/loop1 /media/temp || die "mount /dev/loop1 /media/temo FAILED!"
-
- copy_files
-
-}
-
-copy_files() {
- echo -e "\nCopying files..."
-
- exclude_list="tmp sys proc var dev media root"
- mkdir_list="var proc sys dev media/card media/cf /media/hdd"
-
- if (cat /etc/fstab | grep -q "/home")
- then
- echo "Note: /home appears to be mounted on a different flash partition: not copying /home"
- exclude_list="$exclude_list home"
- mkdir_list="$mkdir_list home/root"
-
- fi
-
-
-
- source_dirs="`ls -1 /`"
-
- echo -n "Excluding ["
- for d in $exclude_list
- do
- echo -n "$d "
- source_dirs="`echo "$source_dirs" | grep -v "$d"`"
- done
- echo "] from copy"
-
-
- cd /
- for dir in $source_dirs
- do
- if test -d "$dir"
- then
- echo -n "Copying [$dir]..."
- cp -a $dir /media/temp && echo ok || echo FAILED
- fi
- done
-
- for dir in $mkdir_list
- do
- mkdir -p /media/temp/$dir
- done
-
- rm /media/temp/etc/rcS.s/S39sd
-
-}
-run_module() {
-
- test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
- echo -e "${C_RED}* * * * * WARNING * * * * *${C_RESET}"
- echo -e "${C_RED}Continueing will delete the content of the selected target device.\nTHIS IS NO JOKE. If you do now know what this menu-item does, exit NOW${C_RESET}"
-
- mount -o remount,rw /
-
- while true
- do
- echo -en "\nContinue? [y|n] "
- read junk </dev/tty1
-
- if test "$junk" = n
- then
- exit 0
- fi
-
- if test "$junk" = y
- then
- break
- fi
- done
-
-# echo -n "Trying to activate PCMCIA..."
-# cardmgr -o >/dev/null 2>&1 && echo ok || echo "FAILED"
-#
-# echo -n "Trying to mount SD card..."
-# /etc/init.d/sd start >/dev/null 2>&1
-# sleep 3
-# /etc/sdcontrol insert >/dev/null 2>&1 && echo ok || echo "FAILED"
-
- #exit 0
- echo -e "\nPlease select the target device:"
-
- # Sets ROOTFS_TARGET*
- ask_target
-
- # Sets ROOTFS_TARGET_TYPE ([direct | image]
- ask_format
-
- # Ask confirmation
- ask_confirm
-
- case "$ROOTFS_TARGET_TYPE" in
- direct) direct_install;;
- image) image_install;;
- esac
-}
-
-case "$1" in
-title) echo "$M_TITLE";;
-flags) echo "$M_FLAGS";;
-run) run_module;;
-esac
diff --git a/packages/altboot/files/altboot.func b/packages/altboot/files/altboot.func
deleted file mode 100644
index 75808090ba..0000000000
--- a/packages/altboot/files/altboot.func
+++ /dev/null
@@ -1,828 +0,0 @@
-#! /bin/sh
-
-C_RED="\033[31m"
-C_YELLOW="\033[35m"
-C_BLUE="\033[34m"
-C_WHITE="\033[38m"
-C_RESET="\033[0m"
-
-
-# This function checks for the presence of a real filesystem and loop-images on the target
-# $1 = folder of rootfs, $2 = runlevel (defaults to 5)
-# $2 = name of calling module
-check_target() {
- # Check if there is a /sbin/init or /sbin/init.sysvinit on the card
- if test -x $1/sbin/init -o -x $1/$REAL_INIT
- then
- real_fs_found=1
- else
- echo -e "Note: No INIT [$REAL_INIT] found on target"
- fi
-
- # Check for loop-images
- if (ls $1/$IMAGE_PATH/*rootfs.bin) >/dev/null 2>&1
- then
- image_found=1
- else
- echo "Note: No boot-images found in [$1/$IMAGE_PATH]"
- fi
-
- # Check if we have both, a real fs and boot-images. If so, ask the user what to boot
- if test "$real_fs_found" = 1 -a "$image_found" = 1
- then
- echo -e "\nI have found a real filesystem and boot-images on the target"
- echo -e "What do you want to boot?\n"
-
- echo -e "\t[1] The real filesystem"
- echo -e "\t[2] A loop-image"
- echo ""
-
- while test -z "$ans"
- do
- echo -n "Your choice: "
-
- if test "$AUTOBOOT" != "yes"
- then
- read junk < "$OUT_TTY"
- else
- if test -e /etc/.altboot-real-or-loop.last
- then
- junk="`cat /etc/.altboot-real-or-loop.last`"
- test -z "$junk" && read junk < "$OUT_TTY" || echo "$junk (autoboot)"
- else
- read junk < "$OUT_TTY"
- fi
- fi
-
- if test "$junk" = 1 -o "$junk" = 2
- then
- ans="$junk"
- echo "$junk" > /etc/.altboot-real-or-loop.last
- fi
- done
-
- case "$ans" in
- 1) pivot_realfs "$1" "$2">"$OUT_TTY";;
- 2) pivot_image "$1" "$2">"$OUT_TTY";;
- esac
-
- exit 0
- fi
-
- # Boot a real filesystem
- test "$real_fs_found" = 1 && pivot_realfs "$1" >"$OUT_TTY"
-
- # Boot a loop-image
- test "$image_found" = 1 && pivot_image "$1" >"$OUT_TTY"
-
- if test "$real_fs_found" != 1 -a "$image_found" != 1
- then
- mdie "No direct-install or loop-images found. Nothing to do!"
- fi
-}
-
-boot_new_rootfs_splash() {
-C_RED="\033[37;44m"
-C_RESET="\033[0m"
-
- echo -e "${C_RED}+----------------------------------------------------------+${C_RESET}"
- echo -e "${C_RED}| |${C_RESET}"
- echo -e "${C_RED}| Booting the selected rootfs... |${C_RESET}"
- echo -e "${C_RED}| |${C_RESET}"
- echo -e "${C_RED}+----------------------------------------------------------+${C_RESET}"
-
-}
-
-# This function pivot_root's into a real filesystem calling $newrootfs/sbin/init
-# $1 = The new rootfs
-pivot_realfs() {
- #test -z "$2" && RL="5" || RL="$2"
- mkdir -p $1/media/ROM || die "mkdir -p $1/media/ROM failed"
-
- mount -o remount,ro / >/dev/null 2>&1
-
- test "$ENABLE_IMAGECONF" = yes && image_conf $1
-
- do_pivot "$1" "$RL"
-}
-
-# This function loop-mounts an image-file and pivot_root's into it
-# $1: The new rootfs
-pivot_image() {
- #test -z "$2" && RL="5" || RL="$2"
- cd $1/$IMAGE_PATH
-
- # Check for rootfs images on the card
- if test "`ls *rootfs.bin | wc -l | tr -d " "`" -gt 1
- then
- echo -e "\n\nPlease select a rootfs:\n"
-
- # Show all available images
- x=0
- for file in `ls *rootfs.bin`
- do
- let x=$x+1
- echo -e "\t\t[$x] $file"
- done
-
- echo ""
-
- IMAGE_NAME=""
- while test -z "$IMAGE_NAME"
- do
- echo -en "Please choose one of the above: "
- if test "$AUTOBOOT" != "yes"
- then
- read junk < "$OUT_TTY"
- else
- if test -e /etc/.altboot-loopimage.last
- then
- junk="`cat /etc/.altboot-loopimage.last`"
- test -z "$junk" && read junk < "$OUT_TTY" || echo "$junk (autoboot)"
- else
- read junk < "$OUT_TTY"
- fi
- fi
-
- x=0
- for file in `ls *rootfs.bin`
- do
- let x=$x+1
- if test "$x" = "$junk"
- then
- IMAGE_NAME="$file"
- echo "$junk" > /etc/.altboot-loopimage.last
- fi
- done
- done
- else
- IMAGE_NAME="`ls *rootfs.bin`"
- test -z "$IMAGE_NAME" && die "No rootfs found (*rootfs.bin) in $1/$IMAGE_PATH"
- fi
-
-
- echo ""
-
- mkdir -p /media/image || die "mkdir -p /media/image failed"
-
- losetup /dev/loop0 $1/$IMAGE_PATH/$IMAGE_NAME || die "losetup /dev/loop0 $1/$IMAGE_PATH/$IMAGE_NAME failed!"
- check_fs /dev/loop0 $IMAGE_TYPE
-
- echo -e "\n* * * Mounting rootfs image * * *\n"
-
- # Busybox's "mount" doesn't seem to like "-o loop" for some reason
- # It works on collie and b0rks on poodle.
- if [ "$IMAGE_TYPE" = "" ]; then
- IMAGE_TYPE="auto"
- fi
-
- # If mount fails it has the tendency to spew out a _lot_ of error messages.
- # We direct the output to /dev/null so the user can see which step actually failed.
- mount /dev/loop0 -t $IMAGE_TYPE /media/image >/dev/null 2>&1 || die "mount -t $IMAGE_TYPE /dev/loop0 /media/image failed!"
-
- mkdir -p /media/image/media/ROM || die "mkdir -p /media/image/media/ROM failed"
-
- test "$ENABLE_IMAGECONF" = yes && image_conf /media/image
-
- do_pivot /media/image "$RL"
-}
-
-#$1=mountpoint of the soon-to-be rootfs, $2=Runlevel
-do_pivot(){
-
- if test "$USE_KEXEC_ON_NEXT_BOOT" = yes
- then
- if test -e "$KEXEC_SELECTED_KERNEL.kexec.cfg"
- then
- CMDLINE="--append=\"`cat $KEXEC_SELECTED_KERNEL.kexec.cfg`\""
- else
- CMDLINE=""
- echo "WARNING: This kernel has not been configured!"
- echo "Trying to boot anyway..."
- fi
-
- echo "$KEXEC_BIN -l $KEXEC_SELECTED_KERNEL $CMDLINE"
- $KEXEC_BIN -l $KEXEC_SELECTED_KERNEL $CMDLINE
- sync
-
- read junk
- $KEXEC_BIN -e
- exit 0
- fi
-
-
- echo -n "Pivoting root..."
- if (/sbin/pivot_root "$1" "$1/media/ROM")
- then
- echo "Success"
-
- # This is important since we are still cd'ed into the old root
- cd /
-
- ! test -d "$1" && mkdir -p "$1"
-
- # Move mountpoints from the old rootfs into the new one.
- # The *real* mount is kinda touchy feely about that
- /bin/busybox mount -o move /media/ROM/proc /proc >/dev/null 2>&1
-
- for mpt in ` mount | grep "/media/ROM/" | awk '{print $3}'`
- do
- new_mpt="`echo "$mpt" | sed -n "s/\/media\/ROM//p"`"
-
- echo "Moving mountpoint [$mpt] -> [$new_mpt]" >"$OUT_TTY" 2>&1
-
- ! test -d "$new_mpt" && mkdir -p "$new_mpt"
- /bin/busybox mount -o move "$mpt" "$new_mpt"
- done
-
- clear
- boot_new_rootfs_splash
- echo "Calling INIT"
-
- exec /usr/sbin/chroot . $REAL_INIT $2 >"$OUT_TTY" 2>&1
- #exec /usr/sbin/chroot . /sbin/init $2 >/dev/tty0 2>&1
- else
- echo "FAILED"
- die "* * * pivot_root failed! * * *"
- fi
-
-}
-
-# $1: Path to mounted rootfs
-image_conf(){
- ! test -d "$1" && die "image_conf: [$1] not found / no directory"
-
- test -e "$1/etc/.image_conf.done" && return
-
- echo -e "\n\n* * * rootfs configuration * * *\n"
- echo -e "This setup lets you reconfigure your new rootfs."
- echo "Most probably the rootfs is configured with"
- echo "defaults based on a flash installation."
- echo "If unsure, go with the defaults by pressing <ENTER>."
- echo ""
-
- if ( cat $1/etc/fstab | grep -v "^#" | grep -q "/home " )
- then
- while true
- do
- echo "Usually your /home directory is located on another flash partition."
- echo -n "Do you want me to move /home inside the loop-image? [N|y] "
- read junk
-
- if test "$junk" = "y" -o "$junk" = "Y"
- then
- cat $1/etc/fstab | sed "/.*\/home.*/s/\/home/\/home.flash/" > $1/etc/fstab_
- mv $1/etc/fstab_ $1/etc/fstab
-
- mkdir -p $1/home.flash
- break
- fi
-
- test "$junk" = "" -o "$junk" = n -o "$junk" = N && break
- done
-
- fi
-
- echo ""
-
- if ( cat $1/etc/ipkg.conf | grep -q ^lists_dir )
- then
- while true
- do
- echo -e "Wasting RAM is never a good idea.\nOnly say Y if your rootfs is very small in size"
- echo -en "Do you want to store ipkg package data\nin RAM? [N|y] "
- read junk
-
- if test "$junk" = "" -o "$junk" = n -o "$junk" = N
- then
- cat $1/etc/ipkg.conf | sed "/^lists_dir.*/s/\(.*\)/#\ \1/"> $1/etc/ipkg.conf_
- mv $1/etc/ipkg.conf_ $1/etc/ipkg.conf
- break
- fi
-
- test "$junk" = "y" -o "$junk" = "Y" && break
- done
- fi
-
- echo ""
-
- if ( cat $1/etc/ipkg.conf | grep -q "^dest sd" )
- then
- while true
- do
- echo -en "Do you want to keep the SD, CF and /home\nipkg install targets? [N|y] "
- read junk
-
- if test "$junk" = "" -o "$junk" = n -o "$junk" = N
- then
- cat $1/etc/ipkg.conf | sed "/^dest\ \(sd\|cf\|home\).*/s/\(.*\)/#\ \1/" > $1/etc/ipkg.conf_
- mv $1/etc/ipkg.conf_ $1/etc/ipkg.conf
- break
- fi
-
- test "$junk" = "y" -o "$junk" = "Y" && break
- done
- fi
-
-
- touch "$1/etc/.image_conf.done"
-}
-
-# This functions configures the master password for altboot if none is set
-set_password() {
-
- test -e /etc/altboot.pwd && . /etc/altboot.pwd
-
- mount -o remount,rw /
- if test -z "$MASTER_PASSWORD" -a "$ENABLE_DEBUG" != yes
- then
- echo -e "\nAltboot is a boot-manager which allows to boot from SD,\nCF, USB-Storage and NFS"
- echo -e "\nFor security reasons altboot requires a password\nto boot into init=/bin/sh."
- echo -e "${C_RED}This is *not* your root password!\nIt is used by altboot alone!${C_RESET}\n"
-
- while true
- do
- echo -en "\nNew password: "
-
- stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- read junk1 < "$OUT_TTY"
- stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
-
- if ! test -z "$junk1"
- then
- echo -en "\nRepeat: "
-
- stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- read junk2 < "$OUT_TTY"
- stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- echo ""
-
- if test "$junk1" = "$junk2"
- then
- crypt_pw="`echo "$junk1" | md5sum | awk '{print $1}'`"
-
- if test -e "/etc/altboot.pwd"
- then
- sed "/^MASTER_PASSWORD/s/\(.*\=\).*/\1\"$crypt_pw\"/" "${ALTBOOT_CFG_FILE}" > ${ALTBOOT_CFG_FILE}_
- mv ${ALTBOOT_CFG_FILE}_ ${ALTBOOT_CFG_FILE}
- MASTER_PASSWORD="$crypt_pw"
- echo "Password changed."
- else
- echo "MASTER_PASSWORD=\"$crypt_pw\"" > /etc/altboot.pwd
- echo "Password installed"
- fi
-
- break
- else
- echo -e "Passwords didn't match, try again\n"
- fi
- fi
- done
- fi
-
-}
-
-# This function asks for altboots master password. It only returns if the correct password was supplied
-verify_master_pw() {
-
- test -e /etc/altboot.pwd && . /etc/altboot.pwd
-
- if ! test -z "$MASTER_PASSWORD"
- then
- auth_timeout="3"
-
- echo -e "\nPlease enter your altboot master password"
-
- cnt=0
- while true
- do
- let cnt=$cnt+$auth_timeout
- echo -n "Password: "
- stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- read junk < "$OUT_TTY"
- stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
-
- if test "`echo "$junk" | md5sum | awk '{print $1}'`" = "$MASTER_PASSWORD"
- then
- break
- else
- echo "[`echo "$junk" | md5sum | awk '{print $1}'`]"
- echo "[$MASTER_PASSWORD]"
- echo "Wrong password, sleeping $cnt seconds..."
- sleep $cnt
-
-# if test "$cnt" -gt 10
-# then
-# break
-# fi
- fi
- done
-
- echo ""
- fi
-}
-
-
-check_fs() {
- if [ "$FSCK_IMAGES" = "yes" ]
- then
- FSCK=""
- if [ "$2" = "" ]; then
- FSTYPE="ext2"
- else
- FSTYPE="$2"
- fi
- case "$FSTYPE" in
- ext2 | ext3)
- if [ -e /sbin/fsck.ext3 ]; then
- FSCK="/sbin/fsck.ext3"
- elif [ -e /sbin/e3fsck ]; then
- FSCK="/sbin/e3fsck"
- elif [ -e /sbin/fsck.ext2 ]; then
- FSCK="/sbin/fsck.ext2"
- elif [ -e /sbin/e2fsck ]; then
- FSCK="/sbin/e2fsck"
- fi
- test -n "$FSCK" && FSCK="$FSCK -p"
- ;;
- vfat)
- if [ -e /sbin/dosfsck ]; then
- FSCK="/sbin/dosfsck -a"
- fi
- ;;
- esac
- if [ "$FSCK" = "" ]; then
- echo "Could not find fsck for $FSTYPE!"
- else
- echo "Checking file system on $1"
- $FSCK $1 || sleep 2
- fi
- fi
-}
-
-# Make the initial rootfs a bit more usable
-init_rootfs(){
-# echo -n "Mounting rootfs rw..."
- mount -o remount,rw / || die "mount -o remount,rw / failed"
-
- mount | grep -q "/proc " >/dev/null 2>&1 || mount proc -t proc /proc >"$OUT_TTY" 2>&1
-
- if ( uname -r | grep -q "2.6." )
- then
- mount | grep -q "/sys " >/dev/null 2>&1 || mount sys -t sysfs /sys >"$OUT_TTY" 2>&1
- fi
-
- /etc/init.d/devices start || die "FAILED"
-}
-
-mount_sd(){
- if mount | grep -q "/media/card"
- then
- echo "Note: /media/card is already mounted"
- else
- # We can't trust that the SD device file is there when running kernel 2.6 w/ udev
- # and starting udev at this point may not be the best idea...
- if `uname -r | grep -q "2.6"`
- then
- #Let's just assume the device file name never changes...
- dev_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\1/p"`"
- part_no="`echo "$SD_DEVICE" | sed -n "s/\/dev\/mmcblk\(.*\)p\(.*\)/\2/p"`"
- ! test -e /dev/mmcblk${dev_no} && mknod /dev/mmcblk${dev_no} b 254 0
- ! test -e /dev/mmcblk${dev_no}p${part_no} && mknod /dev/mmcblk${dev_no}p${part_no} b 254 $part_no
- fi
-
- # Kernel 2.6 has the SD driver compiled into the kernel
- if test -n "$SD_KERNEL_MODULE"
- then
- echo -n "Loading SD kernel module..."
- /sbin/insmod $SD_KERNEL_MODULE >/dev/null 2>&1 && echo ok || die "insmod failed"
- fi
-
- check_fs "$SD_DEVICE"
-
- echo -n "Mounting $SD_MOUNTPOINT..." >"$OUT_TTY"
-
- if test "$1" = ingore_errors
- then
- /bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT >/dev/null 2>&1 && echo ok >"$OUT_TTY" || echo "Could not mount SD card"
- else
- /bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT >/dev/null 2>&1 && echo ok >"$OUT_TTY"|| die "/bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT failed"
- fi
- fi
- echo ""
-
- # Give the SD and CF mounting some time. This is a must for SD
- sleep 2
-}
-
-mount_cf(){
- if mount | grep -q "/media/cf "
- then
- echo "Note: /media/cf is already mounted"
- else
- if ( cat /etc/fstab | grep -v "^#" | grep -q "/media/cf" )
- then
- # As of kernel 2.6.16, /e/i/pcmcia is replaced by udev
- if test -x /etc/init.d/pcmcia
- then
- /etc/init.d/pcmcia status | grep -q running || /etc/init.d/pcmcia start && echo "Note: cardmgr is already active"
- else
- for n in 1 2 3
- do
- ! test -e "/dev/hda$n" && mknod /dev/hda$n b 3 $n
- done
- fi
-
- # Give the SD and CF mounting some time. This is a must for SD
- sleep 2
-
- mount /media/cf -o async
- else
- echo "Note: Your system's fstab does not include an entry for /media/cf"
- fi
- fi
-}
-
-mount_home(){
- if mount | grep -q "/home "
- then
- echo "Note: /home is already mounted"
- else
-
- if ( cat /etc/fstab | grep -v "^#" | grep -q "/home " )
- then
- echo "Mounting /home"
- home_fstab="`grep "/home " /etc/fstab`"
- home_dev="`echo "$home_fstab" | awk '{print $1}'`"
- home_fs="`echo "$home_fstab" | awk '{print $3}'`"
- home_options="`echo "$home_fstab" | awk '{print $4}'`"
-
- mount -t "$home_fs" -o $home_options "$home_dev" /home
- else
- echo "Note: Your system's fstab does not include an entry for /home"
- fi
- fi
-}
-
-show_menu() {
-
- echo -e "\nPress <ENTER> to return to the menu"
- read junk
-
- test "$junk" = x && exec /bin/sh || exec /sbin/init.altboot -force<"$OUT_TTY" >"$OUT_TTY" 2>&1
-}
-
-mdie() {
- echo -e "${C_RED}ERROR:${C_RESET}${C_WHITE} $1${C_RESET}" >"$OUT_TTY"
-
- echo -e "\nPress <ENTER> to return to the menu"
- read junk
-
- test "$junk" = x && exec /bin/sh || exec /sbin/init.altboot -force<"$OUT_TTY" >"$OUT_TTY" 2>&1
-}
-
-# $1: uniq name, $2 identifier, $3 value
-set_pref() {
- data_name="$1"
- data_id="$2"
- data_value="$3"
-
- #debug_echo "[$1] [$2] [$3]"
- #export "${data_name}"="`eval echo -e \\$${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // | sed s/^$data_id.*//`"
-
- if test -z "$3"
- then
- debug_echo "set_pref(): WARNING, writing empty value to $data_name / $data_id! THIS WILL BREAK THINGS"
- #data_value=" "
- fi
- export "${data_name}"="`eval echo -e \\$${data_name} `$data_id##$data_value###"
-}
-
-# $1: uniq name
-reset_pref() {
- data_name="$1"
- export "${data_name}"=""
-}
-
-echo_pref() {
- data_name="$1"
- echo "****** $1 ******"
- echo "`eval echo -e \\$${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // `"
- echo "******"
-}
-
-dump_pref() {
- data_name="$1"
- echo "`eval echo -e \\$${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // `"
-
- #echo "-- `eval echo ${data_name}` --"
- #debug_echo "[$menu_fileflags]"
-}
-
-# $1 = name, $2 = cache_file
-export_pref() {
- data_name="$1"
- echo "`eval echo -e ${data_name}`" > "$2"
-}
-
-# $1 = name, $2 = cache_file
-import_pref() {
- data_name="$1"
- data_id="$2"
-
- #debug_echo "[$1] [$2] [$3]"
-
- if test -z "$3"
- then
- debug_echo "set_pref(): WARNING, writing empty value to $data_name / $data_id! THIS WILL BREAK THINGS"
- #data_value=" "
- fi
- export "${data_name}"="`cat "$2"`"
-
-}
-
-# $1: uniq name, $2 identifier, $3 out var
-get_pref() {
- data_name="$1"
- data_id="$2"
- data_out="$3"
- data_list="`eval echo -e \\$${data_name}`"
-
- #echo "data_list: [$data_list]"
- #data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g"|sed s/^\ // | grep "^$data_id##" | sed -n "s/.*\#\(.*\)$/\1/p"`"
- #data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g"|sed s/^\ // | sed -n "/^$data_id/s/.*\#\(.*\)$/\1/p"`"
- data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g" | sed -n "s/^\ //;/^$data_id\#/s/.*\#\(.*\)$/\1/p"`"
- #echo "WERT: [$data_value]"
-
- export "${data_out}"="$data_value"
- test -n "$data_value" && return 0
-}
-
-debug_echo() {
- test "$ENABLE_DEBUG" = "yes" && echo -e "${C_YELLOW}DEBUG:${C_RESET}${C_WHITE} $1 ${C_RESET}" >"$OUT_TTY" 2>&1
-}
-
-start_networking() {
-
- test -z "$1" && mdie "No remote host configured, check /etc/fstab for NFS hosts"
-
- if test "$USB_NETWORKING_AVAILABLE" = "yes"
- then
- echo ""
- echo "Select the type of your network connection:"
- echo ""
- echo -e "\t[1] LAN or WLAN NIC"
- echo -e "\t[2] USB Connection"
- echo ""
-
- if test "$AUTOBOOT" != "yes" -o ! -e /etc/.altboot-lanselect.last
- then
- while true
- do
- echo -n "Connection Type: "
- read junk
-
- test "$junk" = 1 -o "$junk" = 2 && break
- done
- else
- junk="`cat /etc/.altboot-lanselect.last`"
- test -z "$junk" && junk=1
-
- echo "Connection Type: $junk (autoboot)"
- fi
-
- case "$junk" in
- 1) NW_TYPE="NIC"
- ;;
- 2) NW_TYPE="USB"
- ;;
- esac
-
- echo "$junk" > /etc/.altboot-lanselect.last
- else
- NW_TYPE=NIC
- fi
-
-
-
- # Needed for NFS
- /etc/init.d/portmap start >/dev/null 2>&1 || die "/etc/init.d/portmap start failed!"
-
- # For some reason NFS mounts hang if /e/i/networking is not run.
- # For the time beeing I'm too lazy to investigate ;)
- /etc/init.d/networking start >/dev/null 2>&1 || die "/etc/init.d/networking start failed!"
-
- sleep 2
-
- if test "$NW_TYPE" = "NIC"
- then
- # After the PCMCIA service is started, an inserted WLAN card should automatically
- # activate itself.
-
- if test -x /etc/init.d/pcmcia
- then
- echo -e "\nRunning cardctl to setup networking..."
- /etc/init.d/pcmcia start >/dev/null 2>&1 || die "/etc/init.d/pcmcia start failed!"
- sleep 3
- else
- # With kernel 2.6.16+ udev is used
- echo -e "\nRunning udevd to setup networking..."
- ps ax | grep -v grep | grep -q udevd || /etc/init.d/udev start >/dev/null 2>&1 || die "/etc/init.d/udev start failed!"
-
- # Stop udev to work around some very ugly (yet harmless) error messages on boot
- /etc/init.d/udev stop >/dev/null 2>&1
- fi
- fi
-
- if test "$NW_TYPE" = "USB"
- then
- echo ""
- for module in $USB_NW_MODULES
- do
- echo "modprobing [$module]"
- modprobe $module || die "modprobe $module FAILED"
- done
-
- ifdown "$USB_NW_DEVICE" >/dev/null 2>&1
-
-
- echo -e "\nPlease make sure that usb0 is up on your PC and hit <ENTER>."
- read junk
-
- ifup "$USB_NW_DEVICE"
- fi
-
- WLAN_NIC="`iwconfig 2>/dev/null | grep ESSID | grep -v wifi | awk '{print $1}'`"
-
- if test -z "$WLAN_NIC"
- then
- # cardctl needs some time....
- echo -n "Waiting for WLAN card.."
- timeout=0
- while test "$timeout" -lt 10
- do
- WLAN_NIC="`iwconfig 2>/dev/null | grep ESSID | grep -v wifi | awk '{print $1}'`"
- test -n "$WLAN_NIC" && break
- echo -n "."
- let timeout=$timeout+1
- sleep 1
- done
-
- if test -z "$WLAN_NIC"
- then
- debug_echo "WARNING: WLAN_NIC is empty!\n"
- debug_echo "Filter result: [$WLAN_NIC]"
- debug_echo "iwconfig: [`iwconfig`]"
- mdie "No network interface found"
- fi
- fi
-
- # WLAN with DHCP needs some time to get a lease, set up the routing, etc.
- echo -n "Waiting for host [$1] on [$WLAN_NIC]."
- cnt=0
- while true
- do
- if (ping -c 1 $1) >/dev/null 2>&1
- then
- echo " found"
- break
- else
- if test "$cnt" = 30 -o "$cnt" = 60
- then
- echo ""
- echo "WARNING: $NW_TYPE didn't activate in $cnt seconds!"
-
- if test "$cnt" = 30
- then
- let cnt=$cnt+1
-
- if test "$NW_TYPE" = "NIC"
- then
- echo "Restarting udhcpc for [$WLAN_NIC]"
- killall udhcpc
-
- udhcpc -i "$WLAN_NIC" -H `cat /etc/hostname` >"$OUT_TTY" 2>&1
- fi
-
- if test "$NW_TYPE" = "USB"
- then
- echo "ifdown/up $USB_NW_DEVICE..."
- ifdown "$USB_NW_DEVICE"
- sleep 1
- ifup "$USB_NW_DEVICE"
- fi
-
- else
- mdie "Failed to activate $NW_TYPE!"
- break
- fi
- else
- echo -n "."
- let cnt=$cnt+1
- fi
- fi
- sleep 1
- done
-
-
-}
diff --git a/packages/altboot/files/altboot.rc/Readme.txt b/packages/altboot/files/altboot.rc/Readme.txt
deleted file mode 100644
index 985e1fe7d0..0000000000
--- a/packages/altboot/files/altboot.rc/Readme.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Scripts (*.sh) in this folder are run by altboot before printing the menu.
-Note: The rootfs is still mounted ro at this point.
diff --git a/packages/altboot/files/altboot.rc/disable_printk.sh b/packages/altboot/files/altboot.rc/disable_printk.sh
deleted file mode 100644
index af15adec44..0000000000
--- a/packages/altboot/files/altboot.rc/disable_printk.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-mount proc -t proc /proc >/dev/null 2>&1
-
-echo 0 > /proc/sys/kernel/printk
-
diff --git a/packages/altboot/files/altboot.rc/loadkeymap.sh b/packages/altboot/files/altboot.rc/loadkeymap.sh
deleted file mode 100644
index 97cff13dbb..0000000000
--- a/packages/altboot/files/altboot.rc/loadkeymap.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-# Note: With kernel 2.6 the standard keymap is unusable
-test -x /etc/init.d/keymap && /etc/init.d/keymap start >/dev/null 2>&1
-
-# Do not exit w/ errorcode when the if above fails
-/bin/true
-
diff --git a/packages/altboot/files/altboot.rc/playbeep.sh b/packages/altboot/files/altboot.rc/playbeep.sh
deleted file mode 100644
index b41f098630..0000000000
--- a/packages/altboot/files/altboot.rc/playbeep.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: playbeep.sh
-# Date: 12-Apr-06
-
-if test -x /usr/sbin/alsactl -a -e /etc/modules -a "$ENABLE_SOUND" = yes
-then
- for module in `cat /etc/modules | grep snd | grep -v ^#`
- do
- #echo "loading $module"
- modprobe $module >/dev/null 2>&1
- done
-
- mount -o remount,rw /
-
- init_rootfs >/dev/null 2>&1
-
- ! test -e /dev/audio && mknod /dev/audio c 14 4
- ! test -e /dev/dsp && mknod /dev/dsp c 14 3
-
- mkdir /dev/snd >/dev/null 2>&1
- mknod /dev/snd/controlC0 c 116 0 >/dev/null 2>&1
- mknod /dev/snd/pcmC0D0c c 116 24 >/dev/null 2>&1
- mknod /dev/snd/pcmC0D0p c 116 16 >/dev/null 2>&1
- mknod /dev/snd/timer c 116 33 >/dev/null 2>&1
- /usr/sbin/alsactl restore >/dev/null 2>&1
-
- test -e /usr/share/sounds/beep.raw && cat /usr/share/sounds/beep.raw > /dev/dsp
-fi
-
-/bin/true
diff --git a/packages/altboot/files/altbootctl b/packages/altboot/files/altbootctl
deleted file mode 100755
index 58976afd0d..0000000000
--- a/packages/altboot/files/altbootctl
+++ /dev/null
@@ -1,311 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: hentges-setup.sh
-# Date: 03-Jun-06
-
-die() {
- echo -e "$*"
- exit 1
-}
-
-
-PERMANENT_CFG="/etc/altboot-`uname -r | cut -c1-3`.cfg"
-TEMPORARY_CFG="/etc/altboot-`uname -r | cut -c1-3`.cfg.next-reboot"
-
-CFG="$PERMANENT_CFG"
-SCRIPT_CONFIG="/etc/altbootctl.conf"
-
-test -e "$SCRIPT_CONFIG" && . "$SCRIPT_CONFIG" || die "$SCRIPT_CONFIG not found"
-
-# $1= Setting, $2 = new value
-set_pref() {
-
- if ( cat "$CFG" | grep -q "$1" )
- then
- cat "$CFG" | sed "/^$1/s/\(.*\)\=\(.*\)/\1\=\"$2\"/" > ${CFG}_
- mv ${CFG}_ ${CFG}
- else
- echo "$1=\"$2\"" >> "${CFG}"
- fi
-}
-
-# $1= Setting
-get_pref() {
- n="$1"
- value="`cat "${CFG}" | sed -n "/^$n/s/\(.*\)\=\\"\(.*\)\\"/\2/p"`"
- #echo "cat "${CFG}" | sed -n "/^$n/s/\(.*\)\=\"\(.*\)\"/\2/p""
- test -z "$value" && die "Couldn't get value for [$n]"
- echo "$value"
-}
-
-ask_pref() {
- SETTING_NAME="$1"
-
- SETTING_TEXT_="${SETTING_NAME}_TEXT"
- SETTING_TEXT="`eval echo -e \\$${SETTING_TEXT_}`"
-
- SETTING_VALUES_="${SETTING_NAME}_VALUES"
- SETTING_VALUES="`eval echo -e \\$${SETTING_VALUES_}`"
-
- SETTING_OLD_VALUE="`get_pref "$SETTING_NAME"`"
- test -z "$SETTING_TEXT" -o -z "$SETTING_VALUES" && die "ask_pref: [$1] -> [$SETTING_TEXT] [$SETTING_VALUES]"
-
- #echo "[$1] -> $SETTING_OLD_VALUE"
- #echo -e "$SETTING_TEXT"
-
-
- if test "$SETTING_VALUES" = "<STRING>"
- then
- while true
- do
- echo -e "\nPlease enter a new value [$SETTING_OLD_VALUE]"
- echo -en "Your Choice: "
- read junk
-
- echo ""
-
- while true
- do
- echo -n "Is the new value of [$junk] correct? [Y|n] "
- read junk2
-
- case "$junk2" in
- y|Y|"") END_LOOP=true
- break ;;
- *) END_LOOP=false
- break ;;
- esac
- done
-
- if test "$END_LOOP" = "true"
- then
- SETTING_NEW_VALUE="$junk"
- break
- fi
-
- done
-
- else
- # If it's not a string, it's a fixed list of possible settings
- echo -e "\nSelect one of the following:\n"
- cnt=1
-
- echo " $SETTING_VALUES"
- for val in $SETTING_VALUES
- do
- if test "$val" != "$SETTING_OLD_VALUE"
- then
- echo -e "\t[$cnt] $val"
- else
- echo -e "\t[$cnt] $val *"
- SETTING_OLD_VALUE_NUM="$cnt"
- fi
- let cnt=$cnt+1
- done
-
- echo ""
- while true
- do
- echo -en "Your choice [$SETTING_OLD_VALUE_NUM]: "
- read junk
-
- if test -n "$junk"
- then
- cnt=1 ; SETTING_NEW_VALUE=""
- for val in $SETTING_VALUES
- do
- if test "$junk" = "$cnt"
- then
- SETTING_NEW_VALUE="$val"
- break
- fi
-
- let cnt=$cnt+1
- done
- else
- SETTING_NEW_VALUE="$SETTING_OLD_VALUE"
- fi
-
- test -n "$SETTING_NEW_VALUE" && break
- done
-
- fi
-
-
- if test "$SETTING_NEW_VALUE" != "$SETTING_OLD_VALUE"
- then
- set_pref "$SETTING_NAME" "$SETTING_NEW_VALUE"
- echo "Changed $SETTING_NAME to $SETTING_NEW_VALUE"
- else
- echo "$SETTING_NAME remains unchanged"
- fi
- echo -e "\n"
-}
-
-build_menu() {
- for setting in $TARGETS
- do
- # SETTING_MENUPOS contains $setting_MENUPOS
- SETTING_MENUPOS_="${setting}_MENUPOS"
- SETTING_MENUPOS="`eval echo -e \\$${SETTING_MENUPOS_}`"
-
- # Store all entries in variables named after the menu name
- MENU_NAME="SUBMENU_${SETTING_MENUPOS}"
- export "${MENU_NAME}"="`eval echo -e \\$${MENU_NAME} ` $setting"
-
-
- echo "$AVAILABLE_MENUES" | grep -q "$SETTING_MENUPOS" || AVAILABLE_MENUES="$SETTING_MENUPOS $AVAILABLE_MENUES"
-
- done
-
- #echo "[$AVAILABLE_MENUES]"
-
- while true
- do
- echo -e "\nSelect a menu:\n"
- cnt=1
- for menu in $AVAILABLE_MENUES Exit
- do
- MENU_NAME="SUBMENU_$menu"
- echo -e "\t[$cnt] $menu"
- let cnt=$cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -n "Your Choice: "
- read junk
-
- cnt=1 ; GET_MENU=""
- for menu in $AVAILABLE_MENUES Exit
- do
- if test "$cnt" = "$junk"
- then
- GET_MENU="$menu"
- break
- fi
- let cnt=$cnt+1
- done
-
- if test "$GET_MENU" = "Exit"
- then
- EXIT_PROG=true
- break
- else
- EXIT_PROG=false
- fi
-
- if test -n "$GET_MENU"
- then
- show_menu "$menu"
- break
- fi
- done
- test "$EXIT_PROG" = true && break
- done
-}
-
-show_menu() {
- MENU_NAME="SUBMENU_$1"
-
-
- while true
- do
- echo -e "\nEntries in this menu:\n"
- cnt=1
- for entry in `eval echo -e \\$${MENU_NAME}` Back
- do
- MENU_NAME_TEXT="${entry}_TEXT" || MENU_NAME_TEXT="${entry}"
-
- test "$entry" != Back && tmp_="`eval echo -e \\$${MENU_NAME_TEXT}`" || tmp_="Back"
-
- echo -e "\t[$cnt] $tmp_"
- let cnt=$cnt+1
- done
-
- echo ""
-
- while true
- do
- echo -en "Your Choice: "
- read junk
-
- cnt=1 ; GET_ENTRY=""
- for entry in `eval echo -e \\$${MENU_NAME}` Back
- do
- if test "$cnt" = "$junk"
- then
- GET_ENTRY="$entry"
- break
- fi
- let cnt=$cnt+1
- done
-
- if test "$GET_ENTRY" = "Back"
- then
- EXIT_MENU=true
- break
- else
- EXIT_MENU=false
- fi
-
-
- # At this point the user has selected a menuitem != "Back"
- if test -n "$GET_ENTRY"
- then
- select_config
- ask_pref "$GET_ENTRY"
- break
- fi
- done
-
- test "$EXIT_MENU" = true && break
- done
-}
-
-select_config() {
- echo -e "\nChange this setting only for the next reboot or permanently?\n"
-
- echo -e "Select one of the following:\n"
-
- echo -e "\t[1] Only for the next reboot"
- echo -e "\t[2] Permanently"
- echo ""
-
- while true
- do
- echo -en "Your Choice: "
- read junk
-
- case "$junk" in
- 2) CFG="$PERMANENT_CFG"
- break ;;
- 1) CFG="$TEMPORARY_CFG"
- break ;;
- esac
- done
-
- # Supress error message about missing config
- ! test -e "$CFG" && touch "$CFG"
-
-}
-
-go() {
- build_menu
-
- exit 0
- for setting in $TARGETS
- do
- ask_pref "$setting"
- done
-
-}
-
-
-! test -e "$CFG" && die "[$CFG] not found, exiting"
-go
diff --git a/packages/altboot/files/altbootctl.conf b/packages/altboot/files/altbootctl.conf
deleted file mode 100644
index 13f22b7e91..0000000000
--- a/packages/altboot/files/altbootctl.conf
+++ /dev/null
@@ -1,98 +0,0 @@
-#! /bin/sh
-#
-# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
-#
-# Filename: hentges-setup.conf
-# Date: 04-Jun-06
-
-
-TARGETS="REMEMBER_LAST_SELECTION ENABLE_ALTBOOT FSCK_IMAGES TIMEOUT INIT_RUNLEVEL NO_GUI_RL \
- USB_HOST_AVAILABLE USB_NETWORKING_AVAILABLE ASK_PW_ON_BOOT SD_DEVICE SD_KERNEL_MODULE \
- IMAGE_PATH IMAGE_TYPE ENABLE_IMAGECONF USB_STORAGE_MODULES USB_STORAGE_PARTITION \
- USB_STORAGE_WAIT SD_MOUNTPOINT ENABLE_DEBUGGING ENABLE_DEBUG_SHELL ENABLE_SOUND"
-
-
-REMEMBER_LAST_SELECTION_VALUES="yes no"
-REMEMBER_LAST_SELECTION_TEXT="Remember the last selected menu item for next boot"
-REMEMBER_LAST_SELECTION_MENUPOS="Core"
-
-ENABLE_ALTBOOT_VALUES="yes no"
-ENABLE_ALTBOOT_TEXT="Enable or disable the altboot boot-manager"
-ENABLE_ALTBOOT_MENUPOS="Core"
-
-TIMEOUT_VALUES="<STRING>"
-TIMEOUT_TEXT="Altboot boot-menu timeout in seconds"
-TIMEOUT_MENUPOS="Core"
-
-INIT_RUNLEVEL_VALUES="<STRING>"
-INIT_RUNLEVEL_TEXT="Default runlevel"
-INIT_RUNLEVEL_MENUPOS="Core"
-
-NO_GUI_RL_VALUES="<STRING>"
-NO_GUI_RL_TEXT="GUI-less runlevel"
-NO_GUI_RL_MENUPOS="Core"
-
-ENABLE_DEBUGGING_VALUES="auto yes no"
-ENABLE_DEBUGGING_TEXT="Enable debugging output"
-ENABLE_DEBUGGING_MENUPOS="Core"
-
-ENABLE_DEBUG_SHELL_VALUES="yes no"
-ENABLE_DEBUG_SHELL_TEXT="Enable a shell prompt after kernel init"
-ENABLE_DEBUG_SHELL_MENUPOS="Core"
-
-ENABLE_SOUND_VALUES="yes no"
-ENABLE_SOUND_TEXT="Emmit a beep on boot"
-ENABLE_SOUND_MENUPOS="Core"
-
-FSCK_IMAGES_VALUES="yes no"
-FSCK_IMAGES_TEXT="Automatically fsck loop-images"
-FSCK_IMAGES_MENUPOS="LoopImages"
-
-IMAGE_PATH_VALUES="<STRING>"
-IMAGE_PATH_TEXT="Subdirectory for loop-files"
-IMAGE_PATH_MENUPOS="LoopImages"
-
-IMAGE_TYPE_VALUES="<STRING>"
-IMAGE_TYPE_TEXT="Image FS type"
-IMAGE_TYPE_MENUPOS="LoopImages"
-
-ENABLE_IMAGECONF_VALUES="yes no"
-ENABLE_IMAGECONF_TEXT="Configure new loop-images on 1st boot"
-ENABLE_IMAGECONF_MENUPOS="LoopImages"
-
-USB_HOST_AVAILABLE_VALUES="yes no"
-USB_HOST_AVAILABLE_TEXT="Device supports full USB *HOST* mode"
-USB_HOST_AVAILABLE_MENUPOS="USB"
-
-USB_NETWORKING_AVAILABLE_VALUES="yes no"
-USB_NETWORKING_AVAILABLE_TEXT="USB networking is available"
-USB_NETWORKING_AVAILABLE_MENUPOS="USB"
-
-USB_STORAGE_MODULES_VALUES="<STRING>"
-USB_STORAGE_MODULES_TEXT="Kernelmodules required for USB"
-USB_STORAGE_MODULES_MENUPOS="USB"
-
-USB_STORAGE_PARTITION_VALUES="<STRING>"
-USB_STORAGE_PARTITION_TEXT="USB storage device file"
-USB_STORAGE_PARTITION_MENUPOS="USB"
-
-USB_STORAGE_WAIT_VALUES="<STRING>"
-USB_STORAGE_WAIT_TEXT="Wait x seconds before mount USB storage"
-USB_STORAGE_WAIT_MENUPOS="USB"
-
-ASK_PW_ON_BOOT_VALUES="yes no"
-ASK_PW_ON_BOOT_TEXT="Alway ask altboot password on boot"
-ASK_PW_ON_BOOT_MENUPOS="Core"
-
-SD_DEVICE_VALUES="<STRING>"
-SD_DEVICE_TEXT="The device-file for the SD card"
-SD_DEVICE_MENUPOS="SD_MMC"
-
-SD_KERNEL_MODULE_VALUES="<STRING>"
-SD_KERNEL_MODULE_TEXT="Kernelmodule required for SD operation"
-SD_KERNEL_MODULE_MENUPOS="SD_MMC"
-
-SD_MOUNTPOINT_VALUES="<STRING>"
-SD_MOUNTPOINT_TEXT="Mointpoint for the SD card"
-SD_MOUNTPOINT_MENUPOS="SD_MMC"
diff --git a/packages/altboot/files/beep.raw b/packages/altboot/files/beep.raw
deleted file mode 100644
index f76112185c..0000000000
--- a/packages/altboot/files/beep.raw
+++ /dev/null
@@ -1 +0,0 @@
-€~€~~~~€~€~€~€~~€~€~€~€~€~~€€~v…ok›”[l©‘Sp¯ŒMx³‚L‚³xM°nS’ªlT”®gOž°ZQ«©O\´œHj¸ŽFx¸€H…µuM°mR–«gVš¨dXœ¦aZŸ¤^[£¤Z\§¢U^­ Ob³›Jg·”Fo»ŒCx¼ƒC€»{Eˆ¸tIŽ´nM”¯iR—ªfX›¥b]žŸ_b¢š\h¥”Xo¨Vvª…T~«~T…«vUŒ©oX’¥j\—¡g`šœde›—cjœ’božŽasŸ‰_x¡…]|¢€\‚¤{Z‡¥uY¥pZ’¤k[–¢g^šŸcb›afŸ—_j¡“^o¢Ž]t£‰[y¤ƒ[¤~[„¤x\Š£r] l`•hc™™dh•al ^q¢‹]w£†\|£€\£{\†£v]Œ¡q_‘Ÿla•œgeš™chž•`m¡]r£‹[w¤†Z|¥€Z¥{[‡¤v\Œ¢q^Ÿma”œid˜™fhš•dlœbqžŒavŸ‡`{Ÿ‚a€}c…›xe‰™ugŒ—ri•oj’•kk–”flœ’`o¢ŽZt§ˆW{ªUªzV‡¨uXŒ¦qZ£m]“ j`–gcššcg•amŸ_r¡Š^x¢…]|¢€]¢|]…¡x^Š¡s_ŽŸoa’kd–™hh˜•fk™’eo›Žcr‹awŸ†_| €_‚ z`‡žvcŠšvhˆ“yq…Š|y‚‚€~ƒ~|ƒ~}€‚€~~‚~|‚„}{‚„}|‚ƒ}}~€}‚}€‚}€~~‚~|ƒ}|‚‚}~€~€€~€‚}€‚}€€~€€~~‚‚||„ƒz|…ƒz|„ƒ||‚„~z‡}w…‡ty’ƒe¡{Y‰§pY”£fa˜_m¡\w¤„Z~¦Wƒ©zUˆªtUŽ©nW”¦g[›¢a` œ]f¤–Zm¦Ys¦ŠYw¦…X|§W¨|W…¨xW‰§tYŒ¦pZ‘¥j\˜¢c` œ\g¥”Yn§Xu¦ˆZy¥„Z|¥€Z¥|[…£x\‰¢u^Œ¡r^ m_•Ÿga›œbe —]k£’[p¥ŒZu¦‡Y{¦‚Y€¦|Y†¥w[‹£r]¡m_”žib™›efœ—akŸ’^o¢]t£ˆ[y¤ƒ[~¤[ƒ£z\ˆ¢u^Œ¡q`‘žlb•›hf˜˜eiœ”bnž`r ‹^w¢†]|£\£{\†¢v]‹¡r_Ÿma”œhd™™ehœ•am ^r¢‹\w¤…Z}¥€Y‚¦zZˆ¥u[£p]’¡k_–žgcššdg–alŸ‘_q¡‹^v¢†]{¢]¢|^…¡w_Š s`Žžpb‘œme”™jh–•hk˜’fpšet›‰cx…b|€až|a…žxb‰tcœpd‘šlf”˜ii—•flš‘doœbtž‰axž…`}ž€až|b…œxcˆ›ue‹™rf˜nh’•jk—’fo›buž‡a{ž‚a~b‚{b†wcŠ›te™qh–nk’“mm“‘lo”jq–hu—‰lx…u{…ƒ~}…x€ˆw‡~z„~}‚€€€€€€|„z…~{„|€ƒ|ƒ~}‚}~‚~}ƒ}{‚…|zƒ„|{ƒƒ}|‚ƒ}|‚ƒ|{„„{{…„z|…‚{~ƒ}}‚‚~|ƒ~}€‚€}~ƒ€{‚…vy‘†ex¡†Yz©ƒT~«}T…ªvV§nZ”¢h_™žcdž˜_i¢“\n¥Ys¨ŠVwª…T|­€Q‚°zN‰±qN“¯gRœ«_W£¥Z]§ŸWcª™Ui«’Tp«ŒTvª…U}©V‚¨zXˆ¦tZ£p]‘¡l`•hc˜šeg›–ck’aoŸŽ`s ‰_x¡…^}¡€_‚ {_‡ v`ŒŸqamc”›ie—˜fi›”cmž`r ‹^w¢†]|£\£{\‡£v]Œ¡q_Ÿla•œhd™™dhœ•alŸ_q¡‹]v£†\{¤[€¤|[…£w\Š¢s^ n`“žjc—šffš—cj“`o Ž^s¢Š]x£…\}£€\‚£{]†¢v^‹ r`žnc“›jf——giš“dnœbržŠ`wŸ†_| _€ |`…Ÿxa‰žtbœpd‘™lg•–hj˜“fn›cqŒbvž‡azŸƒ`Ÿ~`„Ÿx`Šžsbnd“šjf—˜ghš•dkœ’bnž`r ‹^v¡†^{¡‚^ ~`ƒžzc‡›ve‹˜rh–nk““in˜dqœŒau ˆ^y¡„^}¡€^ |_…Ÿx`‰Ÿsažnb”œheš™chž•`l ‘_q¡Œ^u¡ˆ^y¢…]}£€[‚¤z[ˆ¤t\¡m`”œif–•jn“ŒoxŒƒv€†||…y€‡~y†~z„}‚~~‚~}‚}~ƒ{„{„~{‚ƒ||ƒ‚|~ƒ€{€„{„~{„}{‚„}|ƒƒ|}ƒ{€„|ƒ}}‚‚}}‚~~~~‚~~~€€~‚{~‡v„Œuo”hfœ^b¥Vd¬—Ql¯ŽPu¯…P}®~R„¬wT‹ªqV‘¨kX—¥e\œ¡`a ›]g£–\l¤[r¥‹Yw§†X|¨€V‚©zVˆ¨tW¦oZ“£j]˜ eaœ_e£—Yk¨Ts­‡P|°~O…°vPŒ®rR«pU©nW‘¨lW”¨iX˜¦e[¡`a¡›\h¥“Yp¦‹Xw§…X}¦Yƒ¥yZˆ¤t\¢p^’ ka–œhe™™ehœ•bmž`q Œ^u¢‡]z¢‚]¢~]„¢y^ˆ¡t_Ÿpa‘lc•›hf™—djœ“anŸ_r¡Š^w¢†]|¢]¢|]†¡w_ŠŸranc“šjg——gjš“dnœbsžŠ`wŸ…_| €_ |`†Ÿwa‹žrbœne“™jg—–fkš“cnarŸŠ_w †^{¡‚^€¡}^… x_‰ŸsaŽžoc’›ke•™hh˜•el›‘cpbužˆazŸƒ`~Ÿ~`ƒžyaˆucŒ›pe‘™mg”–ik—“fnšdrœ‹bwž†a{Ÿ`€Ÿ}`…Ÿxa‰žtbpc‘›ld•™if——fiš•dk’aoŸŽ_s¡Š]x¢„]~¢}_…žxc‰šug‹–sj”ql’on‘mq“ks”‹ju–‰hw˜‡fz™ƒh”}p„Šz{…€zƒ…y{ˆ„u{‹ƒu|Š‚w~‡z~…{~„€{€ƒ|€ƒ|€ƒ|€‚~}‚~}‚}}ƒ‚|~„€{€ƒ~}€}€‚}€‚~}~~€€~‚€|„{€„{€„~{ƒ~|‚„}z‚†}xƒˆ|w„ˆ{w„Šzp†–xcˆ¢uZŒ¦qY‘¥k\—¡daœ_f¢–\l¤‘Zq¦ŒXu¨‡Wz¨ƒW~¨Vƒ©yV‰¨rX¦kZ˜£d_Ÿ]e¥–Xm¨Vs©‰Uy«ƒT~«~TƒªyVˆ¨tX¦p[’£k^–Ÿgbš›cf—`k ’^o¢\t£ˆ[z¤ƒ[¤}\„£x]‰¢s^Ž n`“jc—›ff›—cjž“`n ^r¢‹\w¤†[|¥Z€¥|Z…¥x[‰¤s\Ž¢o^’Ÿka–œgdš™dh•alŸ‘_p¡Œ^u¢‡]z¢‚]¢}]„¡x^‰ t`Žžoc’›kf–˜giš”dmœaqŸ‹_v †^{¡]€¢}]…¡x^Š s_Žžnb“œjd—™ghš•cl‘apŸ_t¡ˆ^y¡„]~¢^‚¡z_‡ v`‹žrbœne“™kh––gk™’eo›ŽbsžŠawŸ…`| _€Ÿ|`…Ÿxa‰žtbœpd‘šlg•—ik—’go™Žfs™‹fv™‡eyš„e}›d‚›ze‡™ugŒ–rj“om‘‘mn“jo–gqšŒcu‡azžƒ`ž~a‚{b…xbˆœucŒ›qe™mh”•im˜frš‹cw†a|ž€až{a†vb‹œqd›me•šhfš˜ciž“_o¡_wžƒe€–{nˆŒuxŒ„sŒu‚‰~x†€z~…‚{|„„|zƒ…|zƒ†|yƒ†|y„†{y……z{„ƒ{}ƒ€}€€~€}~ƒ{~„{~„{}„‚{|„ƒ{{„„{z……yz‡„w{‰ƒu}Š€u€Š~w‚‡}{‚‚~~ƒ‚y}ˆv‚‹wrimœ•^j¦”Vn¬Rw¯‚Pƒ¯vQ¬kV™¦b\ŸŸ]c¤˜Yi¨“Vo«ŽSs­ŠQw¯…O}°Nƒ±yO‰¯sQ­lT•©gXš¥d]œ abŸš_h¡”]n£ŽZt¦ˆXz§‚W¨~Wƒ¨zX‡¦wZŠ¤t]¡p_‘žlc–šgg›–bl ]r¤‰Yy§ƒX€¨|W†§wYŠ¥s[Ž£p^ n`“žkb•œhd™šef˜ai •]l¤‘Zp¦Xu§ˆXz§‚Y€¥|[…¢w^‹Ÿramd“™jg—–fkš’což`t¡ˆ\z¤‚Y€§|X†§vX‹¦q[¢m_“ke“˜nkrtŠ‡x}…~|…‚x~‰€u€Šu€‰w€‡z€„|€‚}‚~}‚}}‚‚}}‚‚}}~~~€€€€~€~€~€~€~€~€€~€~€~€~€~€~€~€~€~€€~€~€~€~€~€~~€~€~€~€~~~~€~€€€€€€€€~€~€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ \ No newline at end of file
diff --git a/packages/altboot/files/c7x0/altboot-2.4.cfg b/packages/altboot/files/c7x0/altboot-2.4.cfg
deleted file mode 100644
index 557730fa9f..0000000000
--- a/packages/altboot/files/c7x0/altboot-2.4.cfg
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Altboot machine configuration for: C7x0 / Kernel 2.4
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-
-SD_DEVICE="/dev/mmcda1"
-SD_KERNEL_MODULE="/lib/modules/2.4.28/kernel/drivers/block/sharp_mmcsd_m.o"
-
-USB_STORAGE_MODULES="usb_ohci_pxa27x usb-storage"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/c7x0/altboot-2.6.cfg b/packages/altboot/files/c7x0/altboot-2.6.cfg
deleted file mode 100644
index 8d91602b25..0000000000
--- a/packages/altboot/files/c7x0/altboot-2.6.cfg
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Altboot machine configuration for: c7x0 / Kernel 2.6
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-ENABLE_SOUND="yes"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-
-SD_DEVICE="/dev/mmcblk0p1"
-SD_KERNEL_MODULE=""
-
-USB_STORAGE_MODULES="usb_ohci_pxa27x usb-storage"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-USB_NETWORKING_AVAILABLE="yes"
-USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
-USB_NW_DEVICE="usb0"
-
-KEXEC_KERNEL_DIR="/boot"
-KEXEC_BIN="/usr/sbin/kexec"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/collie/altboot-2.4.cfg b/packages/altboot/files/collie/altboot-2.4.cfg
deleted file mode 100644
index 702902c9d0..0000000000
--- a/packages/altboot/files/collie/altboot-2.4.cfg
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Altboot machine configuration for: Collie / Kernel 2.4
-#
-
-#
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="3"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcda1"
-SD_KERNEL_MODULE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/init.altboot b/packages/altboot/files/init.altboot
deleted file mode 100644
index 033fb2124f..0000000000
--- a/packages/altboot/files/init.altboot
+++ /dev/null
@@ -1,504 +0,0 @@
-#!/bin/sh
-#
-# altboot provides a simple bootmenu before init is beeing run.
-# There are two default menu entries: "Normal boot" and "Single user mode"
-# New menu entries can be created be putting files into /etc/altboot-menu.
-#
-
-test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
-
-CURRENT_ENV="`set`"
-VERSION="DEVELOPER SNAPSHOT"
-
-# Set some defaults in case altboot.cfg is missing
-REAL_INIT="/sbin/init.sysvinit"
-
-# Read default runlevel from inittab
-INIT_RUNLEVEL="`cat /etc/inittab | sed -n "/^id\:/s/id\:\([0-9]\)\:.*$/\1/p"`"
-test -z "$INIT_RUNLEVEL" && INIT_RUNLEVEL=5
-
-# If this step fails the results are fatal. Seen on Collie / kernel 2.4 (where else...)
-OUT_TTY="`tty`" ; test -z "$OUT_TTY" && OUT_TTY="/dev/tty1"
-
-if test -z "$OUT_TTY"
-then
- OUT_TTY="/dev/tty1"
- echo "WARNING: Assgnment of OUT_TTY failed!" > "$OUT_TTY"
-fi
-
-if ( echo "$OUT_TTY" | grep -q "not" )
-then
- OUT_TTY="/dev/tty1"
- echo "WARNING: Assignment of OUT_TTY failed (2)!" > "$OUT_TTY"
-fi
-
-case "`uname -r`" in
-2.6*) ALTBOOT_CFG_FILE="/etc/altboot-2.6.cfg";;
-2.4*) ALTBOOT_CFG_FILE="/etc/altboot-2.4.cfg";;
-*) echo "Warning: Unknown kernel [`uname -r`], using kernel 2.6 configuration!"
- ALTBOOT_CFG_FILE="/etc/altboot-2.6.cfg";;
-esac
-
-test -e "$ALTBOOT_CFG_FILE" && . "$ALTBOOT_CFG_FILE" || echo "WARNING: No $ALTBOOT_CFG_FILE found! Check your installation of Altboot!" > "$OUT_TTY"
-
-if test -e "${ALTBOOT_CFG_FILE}.next-reboot"
-then
- . "${ALTBOOT_CFG_FILE}.next-reboot"
- rm "${ALTBOOT_CFG_FILE}.next-reboot"
-fi
-
-test "$ENABLE_DEBUGGING" = "yes" && ENABLE_DEBUG="yes"
-
-C_RED="\033[31m"
-C_YELLOW="\033[33m"
-C_BLUE="\033[34m"
-C_WHITE="\033[37m"
-C_RESET="\033[0m"
-
-
-die() {
- echo -e "${C_RED}ERROR: $1${C_RESET}" >"$OUT_TTY"
- exec $SH_SHELL <"$OUT_TTY" >"$OUT_TTY" 2>&1
-}
-
-debug_shell() {
- # VT 2 = Opie, VT 3 = GPE
- test -z "$1" && VT=4 || VT=$1
-
- echo -e "\033c" > /dev/tty$VT
-
- echo -en "\nPress <ENTER> to activate the debug shell." > /dev/tty$VT
- read junk </dev/tty$VT
-
- echo "" > /dev/tty$VT
- /bin/sh </dev/tty$VT >/dev/tty$VT 2>&1
-
- #openvt -lf -c$VT -- /bin/sh </dev/tty$VT >/dev/tty$VT 2>&1
-}
-
-# This function prints the boot-menu
-# $1: Directory containing the scripts for the menu-items
-show_menu() {
- test -z "$1" && die "DEBUG: Parameter 1 is empty in show_menu"
- ! test -d "$1" && die "show_menu: [$1] not found or no directory."
-
- echo ""
- echo -e "altboot v$VERSION\n"
-
-
- m_entry=""
-
- cd $1
-
- cnt=0 ; reset_pref "menu_filelist"
- for file in `ls -1`
- do
- if ! test -d "$1/$file"
- then
- # NOTE: It is important to use "." here so that the script inherits
- # the shell environment / all set variables!
- M_TITLE="`. $1/$file title`"
- FLAGS="`$1/$file flags`"
-
- if ! test -z "$M_TITLE"
- then
- let cnt=$cnt+1
- # Keep a list of existing "modules" together with an index number
- # This sure is ugly, but Busybox sh doesn't do arrays....
- #m_entry="`echo -e "$m_entry\n$cnt:$file\n"`"
-
- set_pref "menu_filelist" "$cnt" "$file"
- test -n "$FLAGS" && set_pref "menu_fileflags" "$cnt" "$FLAGS"
- echo -e "\t\t[$cnt] $M_TITLE"
- fi
- M_TITLE=""
- fi
- done
-
- # Display directories below /etc/altboot-menu as menu-item
- # and add all scripts inside the directory to m_entry
- for dir in `ls -1`
- do
- if test -d "$1/$dir"
- then
- M_TITLE="`basename "$1/$dir"`"
- if ! test -z "$M_TITLE"
- then
- let cnt=$cnt+1
- # Keep a list of existing "modules" together with an index number
- # This sure is ugly, but Busybox sh doesn't do arrays....
-
- set_pref "menu_filelist" "$cnt" "$dir:DIR"
-
- # Set noRemember flag for directories
- set_pref "menu_fileflags" "$cnt" "noRemember"
-
- echo -e "\t\t[$cnt] $M_TITLE"
-
- OLD_PWD="$PWD"
- cd "$1/$dir"
- for file in `ls -1`
- do
- if ! test -d "$1/$dir/$file"
- then
- M_TITLE="`$1/$dir/$file title`"
- FLAGS="`$1/$dir/$file flags`"
-
- if ! test -z "$M_TITLE"
- then
- let cnt=$cnt+1
- # Keep a list of existing "modules" together with an index number
- # This sure is ugly, but Busybox sh doesn't do arrays....
-
- set_pref "menu_filelist" "$cnt" "$dir/$file"
- test -n "$FLAGS" && set_pref "menu_fileflags" "$cnt" "$FLAGS"
- fi
- M_TITLE=""
- fi
- done
- cd "$OLD_PWD"
-
- else
- debug_echo "show_menu(): \$M_TITLE is empty"
- fi
- M_TITLE=""
- fi
- done
-
- echo ""
-
-# export_pref "$menu_filelist" /tmp/menu_filelist.cache
-# export_pref "$menu_fileflags" /tmp/menu_fileflags.cache
-
-}
-
-# This function is used to display the content of directories below
-# /etc/altboot-menu as menu-items
-show_sub_menu() {
- dirname="`basename "$1"`"
-
- d_entries="`dump_pref "menu_filelist" | grep "$dirname/"`"
-
- #dump_pref "menu_filelist"
- #dump_pref "menu_fileflags"
- #echo "[$d_entries]"
-
- echo -e "\naltboot v$VERSION: $dirname menu\n"
-
- for d_entry in $d_entries
- do
- d_entry_number="`echo "$d_entry"| sed -n "s/\(.*\)\#\#\(.*\)\#\#\#/\1/p"`"
- d_entry_file="`echo "$d_entry"| sed -n "s/\(.*\)\#\#\(.*\)\#\#\#/\2/p"`"
- d_entry_title="`$d_entry_file title`"
-
-# echo "number: [$d_entry_number]"
-# echo "file: [$d_entry_file]"
-# echo "title: [$d_entry_title]"
-
- echo -e "\t\t[$d_entry_number] $d_entry_title"
- done
-
- echo ""
-
-}
-
-get_kbd_ints(){
- if ( uname -r | grep -q ^2.6 )
- then
- if test -z "$KBD_INT"
- then
- # find out how the keyboard is called
- for kbd in Spitzkbd corgikbd locomokbd tosakbd
- do
- if ( cat /proc/interrupts | grep -q "$kbd" )
- then
- debug_echo "run_timer(): Using [$kbd] as keyboard interrupt"
- KBD_INT="$kbd"
- break
- fi
- done
- fi
- key_ints="`cat /proc/interrupts | grep "$KBD_INT"`"
- #debug_echo "run_timer(): key_ints = [$key_ints]"
- else
- KBD_INT="$kbd"
- debug_echo "\nrun_timer(): Using [keyboard] as keyboard interrupt in kernel-2.4 mode"
- key_ints="`cat /proc/interrupts | grep keyboard | awk '{print $2}'`"
- fi
-
- test -z "$KBD_INT" && debug_echo "Couldn't read keyboard ints!"
-}
-
-# Shows the timer and sets $launch_altboot to yes if a keypress was detected
-run_timer() {
- if test "$TIMEOUT" != 0
- then
-
- mount -t proc proc /proc >/dev/null 2>&1
-
- get_kbd_ints
- kbd_ints_old="$key_ints"
-
- #debug_echo "run_timer() old:`echo $key_ints | md5sum`"
-
- stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- echo -en "\n\nPlease press any key to launch altboot." > "$OUT_TTY"
-
- test -z "$TIMEOUT" && TIMEOUT="3"
-
- cnt=0
- while test "$cnt" != "$TIMEOUT"
- do
- sleep 1
-
- get_kbd_ints
- kbd_ints_new="$key_ints"
-
- if test "$kbd_ints_new" != "$kbd_ints_old" -o -z "$kbd_ints_new"
- then
- launch_altboot=yes
- stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- break
- fi
- echo -n "." >"$OUT_TTY"
- let cnt=$cnt+1
- done
-
- if test "$launch_altboot" != "yes"
- then
- AUTOBOOT=yes
- else
- rm -f /etc/.altboot*.last
- fi
-
- else
- launch_altboot=yes
- fi
-}
-
-# $1 = ID
-parse_module_flags() {
- if test -n "$1"
- then
- # Each module can set "flags" to influence handling of the module
- get_pref "menu_fileflags" "$1" flags
-
- test -n "$flags" && debug_echo "parse_module_flags(): [$1] has flags [$flags]"
-
- for flag in $flags
- do
- case "$flag" in
- noRemember) REMEMBER_LAST_SELECTION=no;;
- esac
- done
- else
- debug_echo "parse_module_flags(): Empty \$1"
- fi
-}
-
-# This function launches the selected menu item / script
-# $1: Directory containing the scripts for the menu-items
-launch_selection() {
- test -z "$1" && die "Parameter 1 of launch_selection is empty!"
-
- case "$junk" in
- *) #file="`echo "$m_entry"| sed -n "/$junk\:/s/^.*\:\(.*\)/\1/p"`"
-
- get_pref "menu_filelist" "$junk" file_
- type="`echo "$file_" | sed -n "s/\(.*\)\:\(.*\)/\2/p"`"
- file="`echo "$file_" | sed -n "s/\(.*\)\:\(.*\)/\1/p"`"
- test -z "$file" && file="$file_"
-
- #echo "[$file_]: [$type] : [$flags] / [$file] ($junk)"
-
- # The selected menu-item points to a directory
- if test "$type" = DIR
- then
- show_sub_menu /etc/altboot-menu/$file >"$OUT_TTY"
- wait_for_input >"$OUT_TTY"
- launch_selection /etc/altboot-menu >"$OUT_TTY"
- fi
-
- if test "$type" = MAIN
- then
- show_sub_menu /etc/altboot-menu >"$OUT_TTY"
- wait_for_input >"$OUT_TTY"
- launch_selection /etc/altboot-menu >"$OUT_TTY"
- fi
-
-
-
- . $1/$file run "$file" >"$OUT_TTY"
- die "WARNING: Using failsafe shell" >"$OUT_TTY"
-
- ;;
- esac
-}
-
-
-wait_for_input() {
- while true
- do
-
-
- # Do _not_ change the next few lines!
- #
- # This is required to work around an annoying busybox bug.
- # Every key you press while this script runs will be
- # picked up by the next "read $junk".
- # So the next read would pick up the "any" key the user pressed
- # above to launch the altboot menu.
-
-
- # Bash throws an ugly error on kill
- if ! (readlink /bin/sh | grep -q bash)
- then
- # This filters an "<ENTER>" from the user as "any key"
- ( while :; do read x< "$OUT_TTY" 2>&1; done; ) > /dev/null 2>&1 &
- sleep 1; kill $! >/dev/null 2>&1
- fi
-
- echo -n "Please choose one of the above [$last_selection]: " <"$OUT_TTY" > "$OUT_TTY" 2>&1
- stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- read junk< "$OUT_TTY" 2>&1
-
- # This filters other chars the user may have used
-
- junk="`echo "$junk" | sed "s/[a-zA-Z]//g"`"
-
- if test "$junk" -lt "$cnt" -o "$junk" -eq "$cnt"
- then
- if test ! -z "$junk"
- then
- parse_module_flags "$junk"
-
- if test "$REMEMBER_LAST_SELECTION" != no
- then
- # Don't remount rw if the drive is already mounted rw
- # Only helpful for testing / debugging
- if test "`mount|sed -n "/\/dev\/root/s/.*(\(.*\))/\1/p"`" != "rw"
- then
- mount -o remount,rw / >/dev/null 2>&1
- echo "$junk" > /etc/altboot.conf
- mount -o remount,ro / >/dev/null 2>&1
- else
- echo "$junk" > /etc/altboot.conf
- fi
- fi
- else
- junk="$last_selection"
- parse_module_flags "$junk"
- break
- fi
- break
- fi
- done
-}
-
-# * * * * * * This is the main function * * * * * *
-
-if ( echo "$VERSION" | egrep -iq "(snapshot|-rc)" )
-then
- if test "$ENABLE_DEBUGGING" = "auto" -o -z "$ENABLE_DEBUGGING"
- then
- ENABLE_DEBUG="yes"
- fi
-fi
-
-test "$ENABLE_DEBUG_SHELL" = "yes" && debug_shell 4 >/dev/null 2>&1 &
-
-if test "$ENABLE_DEBUGGING" = "yes"
-then
- ENABLE_DEBUG="yes"
- debug_shell 4 >/dev/null 2>&1 &
-fi
-
-# Note: this is positively ugly. If someone knows a better way to detect whether
-# we are already booted into a runlevel _without_ reading /var and / or using `runlevel`
-# PLEASE let me know.
-
-if test -f /proc/cmdline -a "`ps ax|wc -l|tr -d " "`" -gt 30 -a "$1" != "-force" -a "$1" != "+force"
-then
- echo "altboot: Using real init [$REAL_INIT] [$*] [`ps ax|wc -l|tr -d " "`] *" >"$OUT_TTY"
- exec $REAL_INIT $*
-# exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
- exit 0
-else
- # Boot original init if altboot is turned off
- if test "$ENABLE_ALTBOOT" != "yes"
- then
- echo "altboot: Using real init [$REAL_INIT] **" >"$OUT_TTY"
- exec $REAL_INIT $INIT_RUNLEVEL
- exit 0
- fi
-
- # Execute scripts in /etc/altboot.rc before doing anything else.
- # Required in special situations, like booting spitz
- RC_FILES=`ls /etc/altboot.rc | grep \.sh$`
-
- for file in $RC_FILES
- do
- . /etc/altboot.rc/$file >"$OUT_TTY" 2>&1 || echo "/etc/altboot.rc/$file failed!"
- done
-
- # Make sure altboots master password is set
- set_password >"$OUT_TTY"
-
- test "$ASK_PW_ON_BOOT" = "yes" && verify_master_pw >"$OUT_TTY"
-
- # When started with -force, always print the menu
- echo "$*" | grep -q -- "-force" && TIMEOUT=0
-
- # This timeout works by reading /proc/interrupts to see if the keyboard interrupt
- # increases while the timer is running. A TIMEOUT of 0 will always launch altboot.
- run_timer >"$OUT_TTY"
-
- echo "" >"$OUT_TTY"
-
- # launch_altboot is set to "yes" by run_timer when the user presses the button during the timeout
- if test "$launch_altboot" != yes
- then
- # last_selection is the previously selected menu item by the user
- last_selection="`cat /etc/altboot.conf`" >/dev/null 2>&1
- test -z "$last_selection" && last_selection="1"
-
- echo "Booting last selection: [$last_selection]" >"$OUT_TTY"
-
- # Set up the wanna-be array of available menu entries and their numbers
- show_menu /etc/altboot-menu >/dev/null
- junk="$last_selection"
- launch_selection /etc/altboot-menu >"$OUT_TTY"
- fi
-
- # Anything after this point will never be reached if $launch_altboot != yes
-
- # Show the altboot menu
- stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
- show_menu /etc/altboot-menu >"$OUT_TTY"
-
- # Load last selection for use as default if <ENTER> is pressed at the prompt
- last_selection="`cat /etc/altboot.conf`" >/dev/null 2>&1
- test -z "$last_selection" && last_selection="1"
-
- # Ask the user which menu-item to use
- wait_for_input >"$OUT_TTY"
-
- # This should _never_ happen.
- if test -z "$junk"
- then
- echo "WARNING: Trying failsafe mode" >"$OUT_TTY"
- mount -o remount,rw / >"$OUT_TTY" 2>&1
- echo "Dumping environment to /altboot.env"
- echo "$CURRENT_ENV" > /altboot.env
- mount -o remount,ro / >"$OUT_TTY" 2>&1
- junk=1
- fi
-
- launch_selection /etc/altboot-menu >"$OUT_TTY"
-
- # Uhoh, something went terribly wrong if we reach this point!
- die "WARNING: Failsafe fall-through activated. Spawning emergency shell"
-
-fi
-
-
diff --git a/packages/altboot/files/poodle/altboot-2.4.cfg b/packages/altboot/files/poodle/altboot-2.4.cfg
deleted file mode 100644
index 1bce54015c..0000000000
--- a/packages/altboot/files/poodle/altboot-2.4.cfg
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Altboot machine configuration for: Poodle / Kernel 2.4
-#
-
-#
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="3"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="no"
-SD_DEVICE="/dev/mmcda1"
-SD_KERNEL_MODULE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-ENABLE_IMAGECONF="yes"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/poodle/altboot-2.6.cfg b/packages/altboot/files/poodle/altboot-2.6.cfg
deleted file mode 100644
index f867db6b05..0000000000
--- a/packages/altboot/files/poodle/altboot-2.6.cfg
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Altboot machine configuration for: Poodle / Kernel 2.6
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-ENABLE_SOUND="yes"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcblk0p1"
-SD_KERNEL_MODULE=""
-
-USB_HOST_AVAILABLE="no"
-USB_STORAGE_MODULES="ohci_hcd usb_storage sd_mod"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-USB_NETWORKING_AVAILABLE="yes"
-USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
-USB_NW_DEVICE="usb0"
-
-KEXEC_KERNEL_DIR="/boot"
-KEXEC_BIN="/usr/sbin/kexec"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
-
-# Poodle already boots off SD natively!
-DISABLE_SD_BOOT="yes"
-
diff --git a/packages/altboot/files/spitz/altboot-2.6.cfg b/packages/altboot/files/spitz/altboot-2.6.cfg
deleted file mode 100644
index 0a2b643b76..0000000000
--- a/packages/altboot/files/spitz/altboot-2.6.cfg
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Altboot machine configuration for: Spitz / Kernel 2.6
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-ENABLE_SOUND="yes"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcblk0p1"
-SD_KERNEL_MODULE=""
-
-USB_HOST_AVAILABLE="no"
-USB_STORAGE_MODULES="usb_ohci_pxa27x usb-storage"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-USB_NETWORKING_AVAILABLE="yes"
-USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
-USB_NW_DEVICE="usb0"
-
-KEXEC_KERNEL_DIR="/boot"
-KEXEC_BIN="/usr/sbin/kexec"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/tosa/altboot-2.4.cfg b/packages/altboot/files/tosa/altboot-2.4.cfg
deleted file mode 100644
index f84e2d57b9..0000000000
--- a/packages/altboot/files/tosa/altboot-2.4.cfg
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Altboot machine configuration for: Tosa / Kernel 2.4
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcda1"
-SD_KERNEL_MODULE="/lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/block/sharp_mmcsd_m.o"
-
-USB_HOST_AVAILABLE="yes"
-USB_STORAGE_MODULES="usb_ohci_tc6393 usb-storage"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/altboot/files/tosa/altboot-2.6.cfg b/packages/altboot/files/tosa/altboot-2.6.cfg
deleted file mode 100644
index 62e8ea2434..0000000000
--- a/packages/altboot/files/tosa/altboot-2.6.cfg
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Altboot machine configuration for: Akita / Kernel 2.6
-#
-
-# Handled by /sbin/init.altboot
-# Allow booting images from SD or CF instead of booting
-# the ROM.
-ENABLE_ALTBOOT="yes"
-TIMEOUT="4"
-REAL_INIT="/sbin/init.sysvinit"
-SH_SHELL="/bin/sh"
-
-ENABLE_SOUND="yes"
-
-IMAGE_PATH="boot-images"
-IMAGE_TYPE="ext2"
-FSCK_IMAGES="yes"
-ENABLE_IMAGECONF="yes"
-
-SD_DEVICE="/dev/mmcblk0p1"
-SD_KERNEL_MODULE=""
-
-USB_HOST_AVAILABLE="yes"
-USB_STORAGE_MODULES="ohci_hcd usb_storage sd_mod"
-USB_STORAGE_PARTITION="/dev/sda1"
-USB_STORAGE_WAIT="4"
-
-USB_NETWORKING_AVAILABLE="yes"
-USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
-USB_NW_DEVICE="usb0"
-
-KEXEC_KERNEL_DIR="/boot"
-KEXEC_BIN="/usr/sbin/kexec"
-
-INIT_RUNLEVEL="5"
-NO_GUI_RL="2"
-MASTER_PASSWORD=""
-ASK_PW_ON_BOOT="no"
-
-SD_MOUNTPOINT="/media/card"
-CF_MOUNTPOINT="/media/cf"
diff --git a/packages/angstrom/angstrom-altboot-console-image.bb b/packages/angstrom/angstrom-altboot-console-image.bb
new file mode 100644
index 0000000000..32a1564afe
--- /dev/null
+++ b/packages/angstrom/angstrom-altboot-console-image.bb
@@ -0,0 +1,6 @@
+require angstrom-console-image.bb
+
+ANGSTROM_EXTRA_INSTALL += " altboot "
+
+export IMAGE_BASENAME = "altboot-console-image"
+
diff --git a/packages/angstrom/angstrom-altboot-x11-image.bb b/packages/angstrom/angstrom-altboot-x11-image.bb
new file mode 100644
index 0000000000..ce3fd820c3
--- /dev/null
+++ b/packages/angstrom/angstrom-altboot-x11-image.bb
@@ -0,0 +1,4 @@
+require angstrom-x11-image.bb
+
+ANGSTROM_EXTRA_INSTALL += " altboot "
+export IMAGE_BASENAME = "altboot-x11-image"
diff --git a/packages/angstrom/angstrom-console-image.bb b/packages/angstrom/angstrom-console-image.bb
index 8bd0fe07e7..b662109a3c 100644
--- a/packages/angstrom/angstrom-console-image.bb
+++ b/packages/angstrom/angstrom-console-image.bb
@@ -1,13 +1,16 @@
#Angstrom bootstrap image
LICENSE = "MIT"
-PR = "r4"
+PR = "r8"
ANGSTROM_EXTRA_INSTALL ?= ""
-DEPENDS = "task-base"
-RDEPENDS = "task-base-core-default \
- task-base \
+DEPENDS = "task-base-extended \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)} \
+ "
+
+RDEPENDS = "task-base-extended \
${ANGSTROM_EXTRA_INSTALL} \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash-zap", "",d)} \
"
export IMAGE_BASENAME = "console-image"
diff --git a/packages/angstrom/angstrom-gateway-image.bb b/packages/angstrom/angstrom-gateway-image.bb
new file mode 100644
index 0000000000..aeca221d3d
--- /dev/null
+++ b/packages/angstrom/angstrom-gateway-image.bb
@@ -0,0 +1,23 @@
+#Angstrom gateway image
+#gives you a gateway with SMB, ssh and dnsmasqs
+LICENSE = "MIT"
+PR = "r0"
+
+ANGSTROM_EXTRA_INSTALL ?= ""
+DISTRO_SSH_DAEMON ?= "dropbear"
+
+RDEPENDS = "task-boot \
+ ${DISTRO_SSH_DAEMON} \
+ iptables \
+ samba swat \
+ dnsmasq \
+# vsftpd \
+ angstrom-version \
+ "
+
+export IMAGE_BASENAME = "gateway-image"
+export IMAGE_LINGUAS = ""
+export PACKAGE_INSTALL = "${RDEPENDS}"
+
+inherit image
+
diff --git a/packages/angstrom/angstrom-gpe-task-apps.bb b/packages/angstrom/angstrom-gpe-task-apps.bb
new file mode 100644
index 0000000000..37a6ed98c3
--- /dev/null
+++ b/packages/angstrom/angstrom-gpe-task-apps.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RDEPENDS = "\
+ gpe-edit \
+ gpe-gallery \
+ gpe-calculator \
+ gpe-clock \
+ gpe-plucker \
+ gpe-terminal \
+ gpe-watch \
+ gpe-what \
+ matchbox-panel-hacks \
+ ${@base_contains("COMBINED_FEATURES", "wifi", "gpe-aerial", "",d)} \
+ gpe-soundbite \
+ ${@base_contains("MACHINE_FEATURES", "touchscreen", "rosetta", "",d)} \
+ gpe-scap \
+ gpe-windowlist"
+
diff --git a/packages/angstrom/angstrom-gpe-task-base.bb b/packages/angstrom/angstrom-gpe-task-base.bb
new file mode 100644
index 0000000000..c931d9d1e4
--- /dev/null
+++ b/packages/angstrom/angstrom-gpe-task-base.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RDEPENDS = "\
+ matchbox \
+ matchbox-panel-hacks \
+ xcursor-transparent-theme \
+ rxvt-unicode \
+ gpe-terminal \
+ matchbox-keyboard \
+ gpe-theme-clearlooks \
+ xst \
+ xhost \
+ xrdb \
+ gpe-soundserver \
+ gpe-dm \
+ gpe-login \
+ gpe-session-scripts \
+ gpe-icons \
+ gpe-confd \
+ gpe-autostarter \
+ ${@base_contains("MACHINE_FEATURES", "touchscreen", "libgtkstylus", "",d)} \
+ ${@base_contains("MACHINE_FEATURES", "keyboard", "", "libgtkinput",d)} \
+ suspend-desktop \
+ teleport \
+ xauth \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-xpm \
+ gdk-pixbuf-loader-jpeg \
+ pango-module-basic-x \
+ pango-module-basic-fc \
+ ${@base_contains("COMBINED_FEATURES", "bluetooth", "gpe-bluetooth", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "bluetooth", "bluez-gnome", "",d)} \
+ "
+
diff --git a/packages/angstrom/angstrom-gpe-task-game.bb b/packages/angstrom/angstrom-gpe-task-game.bb
new file mode 100644
index 0000000000..09a47f6a26
--- /dev/null
+++ b/packages/angstrom/angstrom-gpe-task-game.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-go \
+ gpe-lights \
+ gpe-othello \
+ gpe-tetris \
+ gsoko \
+# xdemineur \
+"
diff --git a/packages/angstrom/angstrom-gpe-task-pim.bb b/packages/angstrom/angstrom-gpe-task-pim.bb
new file mode 100644
index 0000000000..8e9d0d4f31
--- /dev/null
+++ b/packages/angstrom/angstrom-gpe-task-pim.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-timesheet \
+ gpe-todo \
+ gpe-calendar \
+ gpe-contacts \
+ gpesyncd"
+
+
diff --git a/packages/angstrom/angstrom-gpe-task-settings.bb b/packages/angstrom/angstrom-gpe-task-settings.bb
new file mode 100644
index 0000000000..c79c068cbd
--- /dev/null
+++ b/packages/angstrom/angstrom-gpe-task-settings.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ matchbox-panel-manager \
+ gpe-su \
+ gpe-conf \
+ gpe-package \
+ gpe-shield \
+ gpe-taskmanager \
+ keylaunch \
+ minilite \
+ minimix \
+ xmonobut"
diff --git a/packages/angstrom/angstrom-mokogateway-image.bb b/packages/angstrom/angstrom-mokogateway-image.bb
index 80673f61ec..624274de37 100644
--- a/packages/angstrom/angstrom-mokogateway-image.bb
+++ b/packages/angstrom/angstrom-mokogateway-image.bb
@@ -1,32 +1,17 @@
#Angstrom moko gateway image
# tries to be a companion for openmoko based phones
LICENSE = "MIT"
-PR = "r0"
+PR = "r2"
ANGSTROM_EXTRA_INSTALL ?= ""
DEPENDS = "task-base"
-RDEPENDS = "task-base-core-default \
- task-base \
+RDEPENDS = " \
+ task-boot \
+ task-base-bluetooth \
bluez-utils \
- blue-probe \
+ blueprobe \
"
-RRECOMMENDS = " \
- kernel-module-bluetooth \
- kernel-module-l2cap \
- kernel-module-rfcomm \
- kernel-module-hci-vhci \
- kernel-module-bnep \
- kernel-module-hidp \
- kernel-module-hci-uart \
- kernel-module-sco \
- ${@base_contains("COMBINED_FEATURES", "usbhost", "kernel-module-hci-usb", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetooth3c-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluecard-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetoothuart-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-dtl1-cs", "",d)} \
- "
-
export IMAGE_BASENAME = "mokogateway-image"
export IMAGE_LINGUAS = ""
export PACKAGE_INSTALL = "${RDEPENDS}"
diff --git a/packages/angstrom/angstrom-ohand-task-pim.bb b/packages/angstrom/angstrom-ohand-task-pim.bb
new file mode 100644
index 0000000000..70d52c922f
--- /dev/null
+++ b/packages/angstrom/angstrom-ohand-task-pim.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ dates \
+ contacts \
+ tasks \
+"
+
diff --git a/packages/angstrom/angstrom-task-office.bb b/packages/angstrom/angstrom-task-office.bb
new file mode 100644
index 0000000000..364924995a
--- /dev/null
+++ b/packages/angstrom/angstrom-task-office.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gnumeric \
+ abiword \
+ imposter \
+ evince \
+ gqview"
+
diff --git a/packages/angstrom/angstrom-task-printing.bb b/packages/angstrom/angstrom-task-printing.bb
new file mode 100644
index 0000000000..2954667192
--- /dev/null
+++ b/packages/angstrom/angstrom-task-printing.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ cups \
+# gnome-cups-manager \
+ "
diff --git a/packages/angstrom/angstrom-task-sectest.bb b/packages/angstrom/angstrom-task-sectest.bb
new file mode 100644
index 0000000000..3142f280f3
--- /dev/null
+++ b/packages/angstrom/angstrom-task-sectest.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r31"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ nmap \
+ ettercap \
+ stunnel \
+ curl \
+# dsniff \
+ prismstumbler \
+# tcpdump \
+ kismet \
+ hydra \
+# thcrut \
+# driftnet \
+ miniclipboard"
diff --git a/packages/angstrom/angstrom-x11-base-depends.bb b/packages/angstrom/angstrom-x11-base-depends.bb
new file mode 100644
index 0000000000..2eb3a36804
--- /dev/null
+++ b/packages/angstrom/angstrom-x11-base-depends.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r34"
+ALLOW_EMPTY = "1"
+
+XSERVER ?= "xserver-kdrive-fbdev"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+DEPENDS = "virtual/xserver"
+
+RDEPENDS = "\
+ ${XSERVER} \
+ ttf-dejavu-sans \
+ ttf-dejavu-sans-mono \
+ "
+
diff --git a/packages/angstrom/angstrom-x11-image.bb b/packages/angstrom/angstrom-x11-image.bb
index dbb986ae65..83f00cce66 100644
--- a/packages/angstrom/angstrom-x11-image.bb
+++ b/packages/angstrom/angstrom-x11-image.bb
@@ -1,6 +1,6 @@
#Angstrom X11 image
LICENSE = "MIT"
-PR = "r5"
+PR = "r11"
PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
PREFERRED_PROVIDER_tslib ?= "tslib"
@@ -8,7 +8,9 @@ PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
PREFERRED_PROVIDER_virtual/libxine ?= "libxine-x11"
PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
-ANGSTROM_EXTRA_INSTALL ?= ""
+ANGSTROM_EXTRA_INSTALL += " \
+ ${@base_contains("MACHINE_FEATURES", "phone", "openmoko-dialer2", "",d)} \
+ "
XSERVER ?= "xserver-kdrive-fbdev"
export IMAGE_BASENAME = "x11-image"
@@ -16,8 +18,7 @@ export IMAGE_BASENAME = "x11-image"
DEPENDS = "task-base"
RDEPENDS = "\
${XSERVER} \
- task-base-core-default \
- task-base \
+ task-base-extended \
angstrom-x11-base-depends \
angstrom-gpe-task-base \
angstrom-gpe-task-settings \
diff --git a/packages/angstrom/task-angstrom-e.bb b/packages/angstrom/task-angstrom-e.bb
new file mode 100644
index 0000000000..eb9f025743
--- /dev/null
+++ b/packages/angstrom/task-angstrom-e.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r0"
+ALLOW_EMPTY = "1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+PACKAGES = "\
+ angstrom-e-base-depends \
+ angstrom-e-depends"
+
+RDEPENDS_angstrom-e-base-depends := "\
+ angstrom-x11-base-depends \
+ rxvt-unicode xstroke xtscal xrandr xmodmap xdpyinfo \
+ ttf-bitstream-vera \
+ entrance e-wm \
+ glibc-charmap-utf-8 glibc-localedata-i18n"
+#xserver-kdrive-fbdev
+
+RDEPENDS_angstrom-e-depends := "\
+ pango-module-basic-fc \
+ gdk-pixbuf-loader-bmp \
+ gdk-pixbuf-loader-gif \
+ gdk-pixbuf-loader-jpeg \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-pnm \
+ gdk-pixbuf-loader-xbm \
+ gdk-pixbuf-loader-xpm"
diff --git a/packages/angstrom/task-angstrom-x11.bb b/packages/angstrom/task-angstrom-x11.bb
deleted file mode 100644
index 490955af9c..0000000000
--- a/packages/angstrom/task-angstrom-x11.bb
+++ /dev/null
@@ -1,130 +0,0 @@
-DESCRIPTION = "Task packages for the Angstrom distribution"
-PR = "r29"
-ALLOW_EMPTY = "1"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-PACKAGES = "\
- angstrom-x11-base-depends \
- angstrom-gpe-task-base \
- angstrom-gpe-task-settings \
- angstrom-gpe-task-pim \
- angstrom-gpe-task-apps \
- angstrom-gpe-task-games \
- angstrom-ohand-task-pim \
- angstrom-task-office \
- angstrom-task-printing \
- angstrom-task-sectest"
-
-RDEPENDS_angstrom-x11-base-depends := "\
- virtual/libx11 \
- virtual/xserver \
- ttf-dejavu-sans \
- ttf-dejavu-sans-mono \
- "
-
-RDEPENDS_angstrom-gpe-task-base := "\
- matchbox \
- matchbox-panel-hacks \
- xcursor-transparent-theme \
- rxvt-unicode \
- gpe-terminal \
- matchbox-keyboard \
- gpe-theme-clearlooks \
- xst \
- xhost \
- xrdb \
- gpe-soundserver \
- gpe-dm \
- gpe-login \
- gpe-session-scripts \
- gpe-icons \
- gpe-confd \
- gpe-autostarter \
- ${@base_contains("MACHINE_FEATURES", "touchscreen", "libgtkstylus", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "keyboard", "", "libgtkinput",d)} \
- suspend-desktop \
- teleport \
- xauth \
- gdk-pixbuf-loader-png \
- gdk-pixbuf-loader-xpm \
- gdk-pixbuf-loader-jpeg \
- pango-module-basic-x \
- pango-module-basic-fc \
- ${@base_contains("COMBINED_FEATURES", "bluetooth", "gpe-bluetooth", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "bluetooth", "bluez-gnome", "",d)} \
- "
-
-RDEPENDS_angstrom-gpe-task-pim := "\
- gpe-timesheet \
- gpe-todo \
- gpe-calendar \
- gpe-contacts \
- gpesyncd"
-
-RDEPENDS_angstrom-ohand-task-pim := "\
- dates \
- contacts \
- tasks \
-"
-
-RDEPENDS_angstrom-gpe-task-settings := "\
- matchbox-panel-manager \
- gpe-su \
- gpe-conf \
- gpe-package \
- gpe-shield \
- gpe-taskmanager \
- minilite \
- minimix \
- xmonobut"
-
-RDEPENDS_angstrom-gpe-task-apps := "\
- gpe-edit \
- gpe-gallery \
- gpe-calculator \
- gpe-clock \
- gpe-plucker \
- gpe-terminal \
- gpe-watch \
- gpe-what \
- matchbox-panel-hacks \
- ${@base_contains("COMBINED_FEATURES", "wifi", "gpe-aerial", "",d)} \
- gpe-soundbite \
- ${@base_contains("MACHINE_FEATURES", "touchscreen", "rosetta", "",d)} \
- gpe-scap \
- gpe-windowlist"
-
-RDEPENDS_angstrom-gpe-task-games := "\
- gpe-go \
- gpe-lights \
- gpe-othello \
- gpe-tetris \
- gsoko \
-# xdemineur \
-"
-
-RDEPENDS_angstrom-task-office := "\
- gnumeric \
- abiword \
- imposter \
-# evince \
- gqview"
-
-RDEPENDS_angstrom-task-printing := "\
- cups \
- gnome-cups-manager"
-
-RDEPENDS_angstrom-task-sectest := "\
- nmap \
- ettercap \
- stunnel \
- curl \
-# dsniff \
- prismstumbler \
-# tcpdump \
- kismet \
- hydra \
-# thcrut \
-# driftnet \
- miniclipboard"
diff --git a/packages/anthy/anthy-native_7811.bb b/packages/anthy/anthy-native_7811.bb
index 138abe87c8..38305ddf84 100644
--- a/packages/anthy/anthy-native_7811.bb
+++ b/packages/anthy/anthy-native_7811.bb
@@ -1,4 +1,9 @@
require anthy_${PV}.bb
-PACKAGES = ""
+
DEPENDS = ""
+PACKAGES = ""
+PR = "r1"
+
+S = "${WORKDIR}/anthy-${PV}"
+
inherit native
diff --git a/packages/anthy/anthy_7811.bb b/packages/anthy/anthy_7811.bb
index 5ac651223b..9f5bf8d1e6 100644
--- a/packages/anthy/anthy_7811.bb
+++ b/packages/anthy/anthy_7811.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://anthy.sourceforge.jp"
LICENSE = "GPL"
DEPENDS = "anthy-native"
SECTION = "inputmethods"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://osdn.dl.sourceforge.jp/anthy/20510/anthy-7811.tar.gz \
file://not_build_elc.patch;patch=1 \
@@ -14,8 +14,6 @@ SRC_URI = "http://osdn.dl.sourceforge.jp/anthy/20510/anthy-7811.tar.gz \
inherit autotools pkgconfig
-PACKAGES = "${PN} ${PN}-el libanthy0 libanthy-dev"
-
DESCRIPTION_anthy = "A Japanese input method (backend, dictionary and utility)"
DESCRIPTION_libanthy0 = "Anthy runtime library"
DESCRIPTION_libanthy-dev = "Anthy static library, headers and documets for developers"
@@ -27,6 +25,12 @@ SECTION_libanthy-dev = "devel/libs"
LEAD_SONAME = "libanthy.so.0"
RDEPENDS_anthy = "libanthy0"
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES += "${PN}-el libanthy0 libanthy-dev"
+FILES_${PN}-dbg += "${libdir}/.debug"
FILES_libanthy0 = "${libdir}/libanthy.so.* \
${libdir}/libanthydic.so.* \
${libdir}/libanthyinput.so.*"
@@ -39,8 +43,3 @@ FILES_${PN}-el = "${datadir}/emacs/*"
FILES_${PN} = "${datadir}/* \
${bindir}/* \
${sysconfdir}/anthy-conf"
-
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/apex/apex_1.2.19.bb b/packages/apex/apex_1.2.19.bb
deleted file mode 100644
index 027dfaa194..0000000000
--- a/packages/apex/apex_1.2.19.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "APEX Boot Loader"
-SECTION = ""
-PRIORITY = "optional"
-HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
- file://defconfig"
-
-EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
-
-oe_runmake() {
- #FIXME: /home/slug/openslug/tmp/cross/bin/armeb-linux- is incorrect, but
- # the cross bin directory should be on the PATH
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=/home/slug/openslug/tmp/cross/bin/armeb-linux- "$@"
- make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=/home/slug/openslug/tmp/cross/bin/armeb-linux- "$@" || die "oe_runmake failed"
-}
-
-do_configure() {
- install -m 0644 ${WORKDIR}/defconfig ${S}/.config
- oe_runmake oldconfig
-}
-
-do_populate_staging() {
- install -d ${STAGING_LOADER_DIR}
- install -m 0755 src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex.bin
-}
diff --git a/packages/apex/apex_1.4.11.bb b/packages/apex/apex_1.4.11.bb
deleted file mode 100644
index 713cc833fd..0000000000
--- a/packages/apex/apex_1.4.11.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-DESCRIPTION = "APEX Boot Loader"
-SECTION = ""
-PRIORITY = "optional"
-HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
- file://defconfig"
-
-EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
-
-oe_runmake() {
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
- make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
-}
-
-# FIXME - make this the same as the distro kernel compilation
-CMDLINE="console=ttyS0,115200 rootfstype=jffs2 root=/dev/mtdblock4 rw init=/linuxrc noirqdebug"
-
-# Set the correct CONFIG_USER_xxx_ENDIAN and CONFIG_CMDLINE at the head
-# of the .config file and remove any settings in defconfig then append
-# defconfig to .config
-do_configure() {
- rm -f ${S}/.config
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
- -e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
- -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE}\"|' \
- ${WORKDIR}/defconfig > ${S}/.config
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
- -e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
- -e 's/.*CONFIG_ENV_REGION_KERNEL_SWAP.*/CONFIG_ENV_REGION_KERNEL_SWAP=y/' \
- -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE}\"|' \
- ${WORKDIR}/defconfig > ${S}/.config
- else
- oefatal do_configure cannot determine endianess
- fi
- oe_runmake oldconfig
-}
-
-DEPENDS += "devio-native"
-
-do_populate_staging() {
- install -d ${STAGING_LOADER_DIR}
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- # FIXME - arch-arm should not be hard-coded
- cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex.bin
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- # FIXME - arch-arm should not be hard-coded
- devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex.bin 'xp $,4'
- else
- oefatal do_populate_staging cannot determine endianess
- fi
-}
diff --git a/packages/apex/apex_1.4.7.bb b/packages/apex/apex_1.4.7.bb
deleted file mode 100644
index 713cc833fd..0000000000
--- a/packages/apex/apex_1.4.7.bb
+++ /dev/null
@@ -1,58 +0,0 @@
-DESCRIPTION = "APEX Boot Loader"
-SECTION = ""
-PRIORITY = "optional"
-HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
- file://defconfig"
-
-EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
-
-oe_runmake() {
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
- make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
-}
-
-# FIXME - make this the same as the distro kernel compilation
-CMDLINE="console=ttyS0,115200 rootfstype=jffs2 root=/dev/mtdblock4 rw init=/linuxrc noirqdebug"
-
-# Set the correct CONFIG_USER_xxx_ENDIAN and CONFIG_CMDLINE at the head
-# of the .config file and remove any settings in defconfig then append
-# defconfig to .config
-do_configure() {
- rm -f ${S}/.config
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
- -e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
- -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE}\"|' \
- ${WORKDIR}/defconfig > ${S}/.config
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
- -e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
- -e 's/.*CONFIG_ENV_REGION_KERNEL_SWAP.*/CONFIG_ENV_REGION_KERNEL_SWAP=y/' \
- -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE}\"|' \
- ${WORKDIR}/defconfig > ${S}/.config
- else
- oefatal do_configure cannot determine endianess
- fi
- oe_runmake oldconfig
-}
-
-DEPENDS += "devio-native"
-
-do_populate_staging() {
- install -d ${STAGING_LOADER_DIR}
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- # FIXME - arch-arm should not be hard-coded
- cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex.bin
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- # FIXME - arch-arm should not be hard-coded
- devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex.bin 'xp $,4'
- else
- oefatal do_populate_staging cannot determine endianess
- fi
-}
diff --git a/packages/apex/apex_1.5.8.bb b/packages/apex/apex_1.5.8.bb
new file mode 100644
index 0000000000..ccf08ca9a0
--- /dev/null
+++ b/packages/apex/apex_1.5.8.bb
@@ -0,0 +1,68 @@
+DESCRIPTION = "APEX Boot Loader"
+SECTION = ""
+PRIORITY = "optional"
+HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
+LICENSE = "GPL"
+# PR = "r1"
+
+# Note that this recipe only works for the NSLU2 at the moment.
+# Patches to make it more generic are welcome.
+
+SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
+ file://defconfig"
+
+CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
+
+CMDLINE_ROOT = "root=/dev/mtdblock2 rootfstype=jffs2 rw"
+
+CMDLINE_ROOT_nslu2 = "root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc"
+CMDLINE_ROOT_dsmg600 = "root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc"
+CMDLINE_ROOT_nas100d = "root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc"
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
+
+oe_runmake() {
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
+ make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
+}
+
+# Set the correct CONFIG_USER_xxx_ENDIAN and CONFIG_CMDLINE at the head
+# of the .config file and remove any settings in defconfig then append
+# defconfig to .config
+do_configure() {
+ rm -f ${S}/.config
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2 (big endian)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_ENV_REGION_KERNEL_SWAP.*/CONFIG_ENV_REGION_KERNEL_SWAP=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2 (little endian)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ else
+ oefatal do_configure cannot determine endianess
+ fi
+ oe_runmake oldconfig
+}
+
+DEPENDS += "devio-native"
+
+do_populate_staging() {
+ install -d ${STAGING_LOADER_DIR}
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ # FIXME - arch-arm should not be hard-coded
+ cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex.bin
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ # FIXME - arch-arm should not be hard-coded
+ devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex.bin 'xp $,4'
+ else
+ oefatal do_populate_staging cannot determine endianess
+ fi
+}
diff --git a/packages/apex/nslu2/defconfig b/packages/apex/nslu2/defconfig
index ccec463e98..9bdbef2f6b 100644
--- a/packages/apex/nslu2/defconfig
+++ b/packages/apex/nslu2/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version:
-# Tue Jan 9 22:31:18 2007
+# Fri Jun 1 17:35:34 2007
#
CONFIG_ARM=y
CONFIG_CPU_ARMV5=y
@@ -17,7 +17,9 @@ CONFIG_EXPERIMENTAL=y
#
# General Setup
#
+CONFIG_TARGET_DESCRIPTION="SlugOS NSLU2 (bigendian)"
CONFIG_CROSS_COMPILE=""
+CONFIG_AEABI=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_CC_OPTIMIZE_FOR_SPEED is not set
# CONFIG_CC_NO_OPTIMIZATION is not set
@@ -70,6 +72,7 @@ CONFIG_DEL_IS_BS=y
CONFIG_ANSI_KEYS=y
CONFIG_COMMAND_HISTORY=y
CONFIG_COMMAND_EDITING=y
+# CONFIG_TIME_COMMANDS is not set
CONFIG_CMD_ALIAS=y
CONFIG_CMD_CHECKSUM=y
CONFIG_CMD_COPY=y
@@ -85,7 +88,8 @@ CONFIG_CMD_INFO=y
# CONFIG_CMD_PAUSE is not set
CONFIG_CMD_WAIT=y
CONFIG_CMD_XRECEIVE=y
-# CONFIG_CMD_MEMLIMIT is not set
+CONFIG_CMD_MEMLIMIT=y
+CONFIG_CMD_MEMSCAN=y
#
# Generic Drivers
@@ -97,6 +101,10 @@ CONFIG_DRIVER_FIS=y
CONFIG_DRIVER_FIS_BLOCKDEVICE="nor:0x7e0000+4k"
CONFIG_DRIVER_NOR_CFI=y
# CONFIG_DRIVER_NOR_CFI_NO_BUFFERED is not set
+# CONFIG_DRIVER_NOR_CFI_USE_CACHE is not set
+CONFIG_DRIVER_NOR_CFI_TYPE_INTEL=y
+# CONFIG_DRIVER_NOR_CFI_TYPE_SPANSION is not set
+# CONFIG_DRIVER_ONENAND is not set
# CONFIG_DRIVER_IXP4XX_NPE_ETH is not set
CONFIG_USES_NOR_CFI=y
CONFIG_USES_PATHNAME_PARSER=y
@@ -106,15 +114,16 @@ CONFIG_USES_IXP4XX_NPE_ETH=y
# Environment
#
CONFIG_ENV=y
-CONFIG_ENV_MUTABLE=y
CONFIG_ENV_LINK=y
-CONFIG_ENV_REGION="nor:0x7fc000+15k"
+CONFIG_ENV_MUTABLE=y
+CONFIG_ENV_REGION="nor:0x7f8000+16k"
+# CONFIG_ENV_SAVEATONCE is not set
CONFIG_ENV_CHECK_LEN=1024
-CONFIG_VARIATIONS=y
-CONFIG_VARIATION_SUFFIX="-alt"
+# CONFIG_VARIATIONS is not set
# CONFIG_NO_BOOTSTRAP is not set
CONFIG_NOR_BOOT=y
# CONFIG_NAND_BOOT is not set
+# CONFIG_ONENAND_BOOT is not set
# CONFIG_COMPANION_EVT1_BOOT is not set
# CONFIG_COMPANION_EVT2_BOOT is not set
@@ -125,21 +134,24 @@ CONFIG_AUTOBOOT=y
CONFIG_AUTOBOOT_DELAY=10
CONFIG_ENV_STARTUP_KERNEL_COPY=y
# CONFIG_ENV_REGION_KERNEL_SWAP is not set
+# CONFIG_ENV_STARTUP_PREFIX_P is not set
#
# Regions
#
CONFIG_ENV_REGION_KERNEL="fis://kernel"
-# CONFIG_ENV_REGION_KERNEL_ALT_P is not set
#
# Overrides
#
CONFIG_ENV_DEFAULT_CMDLINE_OVERRIDE=y
-CONFIG_ENV_DEFAULT_CMDLINE="console=ttyS0,115200 rootfstype=jffs2 root=/dev/mtdblock4 rw init=/linuxrc noirqdebug"
-# CONFIG_ENV_DEFAULT_CMDLINE_ALT_P is not set
+CONFIG_ENV_DEFAULT_CMDLINE="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200"
# CONFIG_ENV_DEFAULT_STARTUP_OVERRIDE is not set
-# CONFIG_ENV_DEFAULT_STARTUP_ALT_P is not set
CONFIG_USES_NOR_BOOTFLASH=y
+CONFIG_RELOCATE_SIMPLE=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION_SDRAM_PRE_OVERRIDE=y
+# CONFIG_BIGENDIAN is not set
+# CONFIG_LITTLEENDIAN is not set
CONFIG_CLEAR_STACKS=y
CONFIG_ALIASES=y
diff --git a/packages/apmd/apmd-3.2.2/unlinux.patch b/packages/apmd/apmd-3.2.2/unlinux.patch
new file mode 100644
index 0000000000..f7eec6eb03
--- /dev/null
+++ b/packages/apmd/apmd-3.2.2/unlinux.patch
@@ -0,0 +1,12 @@
+--- apmd-3.2.2.orig/Makefile
++++ apmd-3.2.2/Makefile
+@@ -43,8 +43,7 @@
+
+ CC=gcc
+ CFLAGS=-O -g
+-XTRACFLAGS=-Wall -pipe -I. -I/usr/src/linux/include \
+- -I/usr/src/linux-2.2/include -I /usr/src/linux-2.0/include \
++XTRACFLAGS=-Wall -pipe -I. \
+ -DVERSION=\"$(VERSION)\" \
+ -DDEFAULT_PROXY_NAME=\"$(PROXY_DIR)/apmd_proxy\"
+ LDFLAGS=
diff --git a/packages/apmd/apmd_3.2.2.bb b/packages/apmd/apmd_3.2.2.bb
index 4313115c91..5402e67632 100644
--- a/packages/apmd/apmd_3.2.2.bb
+++ b/packages/apmd/apmd_3.2.2.bb
@@ -9,6 +9,7 @@ SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.orig.tar.gz; \
file://debian.patch;patch=1 \
file://workaround.patch;patch=1 \
file://zaurus24.patch;patch=1 \
+ file://unlinux.patch;patch=1 \
file://init \
file://default \
file://apmd_proxy \
diff --git a/packages/altboot/files/collie/.mtn2git_empty b/packages/apt/apt-0.7.3/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/collie/.mtn2git_empty
+++ b/packages/apt/apt-0.7.3/.mtn2git_empty
diff --git a/packages/apt/apt-native.inc b/packages/apt/apt-native.inc
index de9426bf70..b615693e64 100644
--- a/packages/apt/apt-native.inc
+++ b/packages/apt/apt-native.inc
@@ -1,7 +1,7 @@
require apt.inc
inherit native
-DEPENDS += "dpkg-native"
+DEPENDS += "dpkg-native curl-native"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/apt-${PV}"
PACKAGES = ""
USE_NLS = "no"
diff --git a/packages/apt/apt-native_0.7.2.bb b/packages/apt/apt-native_0.7.2.bb
new file mode 100644
index 0000000000..43f73889f7
--- /dev/null
+++ b/packages/apt/apt-native_0.7.2.bb
@@ -0,0 +1,4 @@
+require apt-native.inc
+
+SRC_URI += "file://nodoc.patch;patch=1 \
+ file://noconfigure.patch;patch=1"
diff --git a/packages/apt/apt-package.inc b/packages/apt/apt-package.inc
index 43f54cadab..5a5d56930e 100644
--- a/packages/apt/apt-package.inc
+++ b/packages/apt/apt-package.inc
@@ -77,11 +77,18 @@ do_install () {
install -m 0755 bin/apt-sortpkgs ${D}${bindir}/
install -m 0755 bin/apt-extracttemplates ${D}${bindir}/
+ install -d ${D}${libdir}
eval `cat environment.mak | grep ^GLIBC_VER | sed -e's, = ,=,'`
- oe_libinstall -so -C bin libapt-pkg$GLIBC_VER-6 ${D}${libdir}/
- ln -sf libapt-pkg$GLIBC_VER-6.so ${D}${libdir}/libapt-pkg.so
- oe_libinstall -so -C bin libapt-inst$GLIBC_VER-6 ${D}${libdir}/
- ln -sf libapt-inst$GLIBC_VER-6.so ${D}${libdir}/libapt-inst.so
+ eval `cat apt-pkg/makefile | grep ^MAJOR | sed -e's, = ,=,'`
+ eval `cat apt-pkg/makefile | grep ^MINOR | sed -e's, = ,=,'`
+ install bin/libapt-pkg$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/
+ ln -sf libapt-pkg$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/libapt-pkg$GLIBC_VER-6.so.$MAJOR
+ ln -sf libapt-pkg$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/libapt-pkg.so
+ eval `cat apt-inst/makefile | grep ^MAJOR | sed -e's, = ,=,'`
+ eval `cat apt-inst/makefile | grep ^MINOR | sed -e's, = ,=,'`
+ install bin/libapt-inst$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/
+ ln -sf libapt-inst$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/libapt-inst$GLIBC_VER-6.so.$MAJOR
+ ln -sf libapt-inst$GLIBC_VER-6.so.$MAJOR.$MINOR ${D}${libdir}/libapt-inst.so
install -d ${D}${libdir}/apt/methods
install -m 0755 bin/methods/* ${D}${libdir}/apt/methods/
diff --git a/packages/apt/apt.inc b/packages/apt/apt.inc
index b18ed93782..2644866c5b 100644
--- a/packages/apt/apt.inc
+++ b/packages/apt/apt.inc
@@ -2,9 +2,18 @@ DESCRIPTION = "Advanced front-end for dpkg."
LICENSE = "GPL"
SECTION = "base"
-SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/apt_${PV}.tar.gz"
+SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/apt_${PV}.tar.gz \
+ file://environment.patch;patch=1"
S = "${WORKDIR}/apt-${PV}"
inherit autotools gettext
EXTRA_AUTORECONF = "--exclude=autopoint,autoheader"
+
+# Apt wants to know the glibc version by running a binary file, which will fail, so we have to tell configure which version to use
+# Since I don't know the impliations of setting a wrong value I only provide one for angstrom, which uses glibc 2.5 (which claims to be 2.4)
+# Koen - 20070327
+EXTRA_OECONF_append_angstrom = " ac_cv_glibc_ver=libc6.4"
+
+FILES_${PN}-dbg += "${libdir}/apt/methods/.debug"
+
diff --git a/packages/apt/apt_0.6.46.2.bb b/packages/apt/apt_0.6.46.2.bb
index 1cd8eb270e..24023f2a58 100644
--- a/packages/apt/apt_0.6.46.2.bb
+++ b/packages/apt/apt_0.6.46.2.bb
@@ -1,9 +1,11 @@
require apt.inc
-SRC_URI += "file://autofoo.patch;patch=1 \
- file://nodoc.patch;patch=1"
+SRC_URI += "file://nodoc.patch;patch=1"
require apt-package.inc
FILES_${PN} += "${bindir}/apt-key"
apt-manpages += "doc/apt-key.8"
+
+PR = "r1"
+
diff --git a/packages/apt/apt_0.7.3.bb b/packages/apt/apt_0.7.3.bb
new file mode 100644
index 0000000000..24023f2a58
--- /dev/null
+++ b/packages/apt/apt_0.7.3.bb
@@ -0,0 +1,11 @@
+require apt.inc
+
+SRC_URI += "file://nodoc.patch;patch=1"
+
+require apt-package.inc
+
+FILES_${PN} += "${bindir}/apt-key"
+apt-manpages += "doc/apt-key.8"
+
+PR = "r1"
+
diff --git a/packages/apt/files/apt.conf b/packages/apt/files/apt.conf
index fc19018533..6fd653dfcd 100644
--- a/packages/apt/files/apt.conf
+++ b/packages/apt/files/apt.conf
@@ -21,6 +21,10 @@ Dir "${STAGING_DIR}/"
apt-get "apt-get";
apt-cache "apt-cache";
};
+ Etc "etc/apt/"
+ {
+ Preferences "preferences";
+ };
};
APT
diff --git a/packages/apt/files/environment.patch b/packages/apt/files/environment.patch
new file mode 100644
index 0000000000..5bea1a0130
--- /dev/null
+++ b/packages/apt/files/environment.patch
@@ -0,0 +1,13 @@
+Index: apt-0.6.46.2/buildlib/environment.mak.in
+===================================================================
+--- apt-0.6.46.2.orig/buildlib/environment.mak.in 2007-03-29 11:38:58.000000000 +0100
++++ apt-0.6.46.2/buildlib/environment.mak.in 2007-03-29 11:39:12.000000000 +0100
+@@ -62,7 +62,7 @@
+
+ # Shared library things
+ HOST_OS = @host_os@
+-ifneq ($(words $(filter linux-gnu gnu% %gnu,$(HOST_OS))),0)
++ifneq ($(words $(filter linux-gnu linux-gnueabi gnu% %gnu,$(HOST_OS))),0)
+ SONAME_MAGIC=-Wl,-soname -Wl,
+ LFLAGS_SO=
+ else
diff --git a/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb b/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb
deleted file mode 100644
index 4014d9e866..0000000000
--- a/packages/arm-kernel-shim/arm-kernel-shim_1.3.bb
+++ /dev/null
@@ -1,77 +0,0 @@
-DESCRIPTION = "ARM Kernel Shim"
-SECTION = ""
-PRIORITY = "optional"
-HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
-LICENSE = "GPL"
-PR = "r4"
-
-COMPATIBLE_MACHINE = "(ixp4xx|nslu2)"
-
-SRC_URI = "ftp://ftp.buici.com/pub/arm/arm-kernel-shim/arm-kernel-shim-${PV}.tar.gz \
- file://passthrough-atags.patch;patch=1 \
- file://cmdline_if_none.patch;patch=1 \
- file://config-nslu2.h \
- file://config-nas100d.h \
- file://config-dsmg600.h \
- file://config-fsg3.h"
-
-S = ${WORKDIR}/arm-kernel-shim-${PV}/${PV}
-
-EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
-
-oe_runmake() {
- mv ${S}/config.h ${S}/config.h.orig
- # NSLU2
- if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
- sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
- ${WORKDIR}/config-nslu2.h > ${S}/config.h
- else
- sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
- ${WORKDIR}/config-nslu2.h > ${S}/config.h
- fi
- rm -f ${S}/main.o
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nslu2
- make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nslu2 || die "oe_runmake failed"
- # NAS100d
- if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
- sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
- ${WORKDIR}/config-nas100d.h > ${S}/config.h
- else
- sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
- ${WORKDIR}/config-nas100d.h > ${S}/config.h
- fi
- rm -f ${S}/main.o
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nas100d
- make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nas100d || die "oe_runmake failed"
- # DSMG-600
- if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
- sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
- ${WORKDIR}/config-dsmg600.h > ${S}/config.h
- else
- sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
- ${WORKDIR}/config-dsmg600.h > ${S}/config.h
- fi
- rm -f ${S}/main.o
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-dsmg600
- make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-dsmg600 || die "oe_runmake failed"
- # FSG-3
- if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
- sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
- ${WORKDIR}/config-fsg3.h > ${S}/config.h
- else
- sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
- ${WORKDIR}/config-fsg3.h > ${S}/config.h
- fi
- rm -f ${S}/main.o
- oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-fsg3
- make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-fsg3 || die "oe_runmake failed"
- mv ${S}/config.h.orig ${S}/config.h
-}
-
-do_populate_staging() {
- install -d ${STAGING_LOADER_DIR}
- cp ${S}/arm-kernel-shim-nslu2.bin ${STAGING_LOADER_DIR}/
- cp ${S}/arm-kernel-shim-nas100d.bin ${STAGING_LOADER_DIR}/
- cp ${S}/arm-kernel-shim-dsmg600.bin ${STAGING_LOADER_DIR}/
- cp ${S}/arm-kernel-shim-fsg3.bin ${STAGING_LOADER_DIR}/
-}
diff --git a/packages/arm-kernel-shim/arm-kernel-shim_1.5.bb b/packages/arm-kernel-shim/arm-kernel-shim_1.5.bb
new file mode 100644
index 0000000000..fee3691c3c
--- /dev/null
+++ b/packages/arm-kernel-shim/arm-kernel-shim_1.5.bb
@@ -0,0 +1,85 @@
+DESCRIPTION = "ARM Kernel Shim"
+SECTION = ""
+PRIORITY = "optional"
+HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
+LICENSE = "GPL"
+PR = "r2"
+
+COMPATIBLE_MACHINE = "(ixp4xx|nslu2|fsg3)"
+
+SRC_URI = "ftp://ftp.buici.com/pub/arm/arm-kernel-shim/arm-kernel-shim-${PV}.tar.gz \
+ file://config-nslu2.h \
+ file://config-nas100d.h \
+ file://config-dsmg600.h \
+ file://config-fsg3.h"
+
+S = ${WORKDIR}/arm-kernel-shim-${PV}
+
+CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
+
+CMDLINE_ROOT_DSMG600 = "root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc"
+CMDLINE_ROOT_NAS100D = "root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc"
+CMDLINE_ROOT_NSLU2 = "root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc"
+# CMDLINE is passed correctly on the Freecom FSG-3 from the bootloader.
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
+
+oe_runmake() {
+ mv ${S}/config.h ${S}/config.h.orig
+ # NSLU2
+ if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
+ sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
+ ${WORKDIR}/config-nslu2.h > ${S}/config.h
+ else
+ sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
+ ${WORKDIR}/config-nslu2.h > ${S}/config.h
+ fi
+ echo "#define COMMANDLINE \"${CMDLINE_CONSOLE} ${CMDLINE_ROOT_NSLU2} ${CMDLINE_DEBUG}\"" >> ${S}/config.h
+ rm -f ${S}/main.o
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nslu2
+ make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nslu2 || die "oe_runmake failed"
+ # NAS100d
+ if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
+ sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
+ ${WORKDIR}/config-nas100d.h > ${S}/config.h
+ else
+ sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
+ ${WORKDIR}/config-nas100d.h > ${S}/config.h
+ fi
+ echo "#define COMMANDLINE \"${CMDLINE_CONSOLE} ${CMDLINE_ROOT_NAS100D} ${CMDLINE_DEBUG}\"" >> ${S}/config.h
+ rm -f ${S}/main.o
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nas100d
+ make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-nas100d || die "oe_runmake failed"
+ # DSMG-600
+ if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
+ sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
+ ${WORKDIR}/config-dsmg600.h > ${S}/config.h
+ else
+ sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
+ ${WORKDIR}/config-dsmg600.h > ${S}/config.h
+ fi
+ echo "#define COMMANDLINE \"${CMDLINE_CONSOLE} ${CMDLINE_ROOT_DSMG600} ${CMDLINE_DEBUG}\"" >> ${S}/config.h
+ rm -f ${S}/main.o
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-dsmg600
+ make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-dsmg600 || die "oe_runmake failed"
+ # FSG-3
+ if [ ${SITEINFO_ENDIANESS} == "be" ] ; then
+ sed -e 's|//#define FORCE_BIGENDIAN|#define FORCE_BIGENDIAN|' \
+ ${WORKDIR}/config-fsg3.h > ${S}/config.h
+ else
+ sed -e 's|//#define FORCE_LITTLEENDIAN|#define FORCE_LITTLEENDIAN|' \
+ ${WORKDIR}/config-fsg3.h > ${S}/config.h
+ fi
+ rm -f ${S}/main.o
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-fsg3
+ make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} PACKAGE=arm-kernel-shim-fsg3 || die "oe_runmake failed"
+ mv ${S}/config.h.orig ${S}/config.h
+}
+
+do_populate_staging() {
+ install -d ${STAGING_LOADER_DIR}
+ cp ${S}/arm-kernel-shim-nslu2.bin ${STAGING_LOADER_DIR}/
+ cp ${S}/arm-kernel-shim-nas100d.bin ${STAGING_LOADER_DIR}/
+ cp ${S}/arm-kernel-shim-dsmg600.bin ${STAGING_LOADER_DIR}/
+ cp ${S}/arm-kernel-shim-fsg3.bin ${STAGING_LOADER_DIR}/
+}
diff --git a/packages/arm-kernel-shim/files/cmdline_if_none.patch b/packages/arm-kernel-shim/files/cmdline_if_none.patch
deleted file mode 100644
index 460f7be090..0000000000
--- a/packages/arm-kernel-shim/files/cmdline_if_none.patch
+++ /dev/null
@@ -1,45 +0,0 @@
---- arm-kernel-shim-1.3/main.c.orig 2007-02-14 19:05:35.000000000 -0600
-+++ arm-kernel-shim-1.3/main.c 2007-02-14 22:48:06.000000000 -0600
-@@ -153,6 +153,42 @@
- p->hdr.tag = ATAG_NONE;
- p->hdr.size = 0;
-
-+#else
-+
-+#ifdef CMDLINE_IF_NONE
-+
-+ /* Walk over the ATAG list, we need to find the end of the list.
-+ * If we find a command line tag, stash away the pointer to the
-+ * actual command line itself. Note that the implementation
-+ * below assumes a single ATAG_CMDLINE passed in from the
-+ * bootloader, which may not be a good assumption in all cases.
-+ */
-+ {
-+ char *c = 0;
-+ for_each_tag(p, (struct tag*) PHYS_PARAMS)
-+ if (p->hdr.tag == ATAG_CMDLINE) c = p->u.cmdline.cmdline;
-+
-+ /* p -> final tag (ATAG_NONE), and c -> command line if found */
-+ /* if no ATAG_CMDLINE, or command line is empty, add the default one. */
-+
-+ if ((c == 0) || (*c == 0)) {
-+ p->hdr.tag = ATAG_CMDLINE;
-+ p->hdr.size = tag_size (tag_cmdline)
-+ + (sizeof (cmdline)+3)/4 - 1;
-+ {
-+ const char* sz = cmdline + offset;
-+ int i;
-+ for (i = 0; i < sizeof (cmdline); ++i)
-+ p->u.cmdline.cmdline[i] = sz[i];
-+ }
-+ p = tag_next (p);
-+ p->hdr.tag = ATAG_NONE;
-+ p->hdr.size = 0;
-+ }
-+ }
-+
-+#endif
-+
- #endif
-
- /* Pass control to the kernel */
diff --git a/packages/arm-kernel-shim/files/config-dsmg600.h b/packages/arm-kernel-shim/files/config-dsmg600.h
index 3203052d51..ebe53901b8 100644
--- a/packages/arm-kernel-shim/files/config-dsmg600.h
+++ b/packages/arm-kernel-shim/files/config-dsmg600.h
@@ -16,25 +16,11 @@
#define PHYS_PARAMS 0x00000100 /* Address for the parameter list */
-//#define RAM_BANK0_START 0x00000000
-//#define RAM_BANK0_LENGTH 0x04000000
-
-//#define RAM_BANK1_START 0xd0000000
-//#define RAM_BANK1_LENGTH 0x10000000
-
-#define COMMANDLINE \
- "init=/linuxrc root=/dev/mtdblock2 rootfstype=jffs2 rw noirqdebug console=ttyS0,115200n8"
-
#define MACH_TYPE 964
-/* The DSM-G600 RedBoot sets up the ATAGs correctly */
-#define PASSTHROUGH_ATAGS
-
-/* but if the command line passed in is empty, use the default above. */
-#define CMDLINE_IF_NONE
+#define GUARANTEE_ATAG_CMDLINE
-/* Uncomment one of these if you need to switch the CPU into a
- specific mode. */
+/* Uncomment one of these to switch the CPU into a specific mode. */
//#define FORCE_LITTLEENDIAN
//#define FORCE_BIGENDIAN
diff --git a/packages/arm-kernel-shim/files/config-fsg3.h b/packages/arm-kernel-shim/files/config-fsg3.h
index 08684d708e..fa894e89ac 100644
--- a/packages/arm-kernel-shim/files/config-fsg3.h
+++ b/packages/arm-kernel-shim/files/config-fsg3.h
@@ -19,16 +19,9 @@
#define RAM_BANK0_START 0x00000000
#define RAM_BANK0_LENGTH 0x04000000
-//#define RAM_BANK1_START 0xd0000000
-//#define RAM_BANK1_LENGTH 0x10000000
-
-//#define COMMANDLINE\
-// "console=ttyAMA0 root=/dev/memblk0 rootfstype=jffs"
-
#define MACH_TYPE 1091
-/* Uncomment one of these if you need to switch the CPU into a
- specific mode. */
+/* Uncomment one of these to switch the CPU into a specific mode. */
//#define FORCE_LITTLEENDIAN
//#define FORCE_BIGENDIAN
diff --git a/packages/arm-kernel-shim/files/config-nas100d.h b/packages/arm-kernel-shim/files/config-nas100d.h
index 846161d016..99bc91fb7a 100644
--- a/packages/arm-kernel-shim/files/config-nas100d.h
+++ b/packages/arm-kernel-shim/files/config-nas100d.h
@@ -19,16 +19,13 @@
#define RAM_BANK0_START 0x00000000
#define RAM_BANK0_LENGTH 0x04000000
-//#define RAM_BANK1_START 0xd0000000
-//#define RAM_BANK1_LENGTH 0x10000000
+#define MACH_TYPE 865
-#define COMMANDLINE\
- "init=/linuxrc root=/dev/mtdblock2 rootfstype=jffs2 rw noirqdebug console=ttyS0,115200n8"
+#define CREATE_ATAGS
-#define MACH_TYPE 865
+#define GUARANTEE_ATAG_CMDLINE
-/* Uncomment one of these if you need to switch the CPU into a
- specific mode. */
+/* Uncomment one of these to switch the CPU into a specific mode. */
//#define FORCE_LITTLEENDIAN
//#define FORCE_BIGENDIAN
diff --git a/packages/arm-kernel-shim/files/config-nslu2.h b/packages/arm-kernel-shim/files/config-nslu2.h
index d641523841..c751d84a44 100644
--- a/packages/arm-kernel-shim/files/config-nslu2.h
+++ b/packages/arm-kernel-shim/files/config-nslu2.h
@@ -19,16 +19,13 @@
#define RAM_BANK0_START 0x00000000
#define RAM_BANK0_LENGTH 0x02000000
-//#define RAM_BANK1_START 0xd0000000
-//#define RAM_BANK1_LENGTH 0x10000000
+#define MACH_TYPE 597
-#define COMMANDLINE\
- "init=/linuxrc root=/dev/mtdblock4 rootfstype=jffs2 rw noirqdebug console=ttyS0,115200n8"
+#define CREATE_ATAGS
-#define MACH_TYPE 597
+#define GUARANTEE_ATAG_CMDLINE
-/* Uncomment one of these if you need to switch the CPU into a
- specific mode. */
+/* Uncomment one of these to switch the CPU into a specific mode. */
//#define FORCE_LITTLEENDIAN
//#define FORCE_BIGENDIAN
diff --git a/packages/arm-kernel-shim/files/passthrough-atags.patch b/packages/arm-kernel-shim/files/passthrough-atags.patch
deleted file mode 100644
index 194279df89..0000000000
--- a/packages/arm-kernel-shim/files/passthrough-atags.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- arm-kernel-shim-1.3/main.c~ 2007-02-11 05:52:32.000000000 +1030
-+++ arm-kernel-shim-1.3/main.c 2007-02-14 16:39:40.000000000 +1030
-@@ -100,6 +100,8 @@
- : "+r" (offset)
- :: "lr", "cc");
-
-+#if !defined (PASSTHROUGH_ATAGS)
-+
- p = (struct tag*) PHYS_PARAMS;
-
- /* Always start with the CORE tag */
-@@ -151,6 +153,8 @@
- p->hdr.tag = ATAG_NONE;
- p->hdr.size = 0;
-
-+#endif
-+
- /* Pass control to the kernel */
- boot (0, MACH_TYPE, PHYS_PARAMS);
- }
diff --git a/packages/aspell/aspell-0.50.5/makefile.patch b/packages/aspell/aspell-0.50.5/makefile.patch
deleted file mode 100644
index c16a32e3b9..0000000000
--- a/packages/aspell/aspell-0.50.5/makefile.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- aspell-0.50.5/common/Makefile.am~ 2002-11-05 00:24:14.000000000 +0000
-+++ aspell-0.50.5/common/Makefile.am 2004-06-27 14:33:37.000000000 +0100
-@@ -4,7 +4,7 @@
- pkgdatadir = @pkgdatadir@
- pkglibdir = @pkglibdir@
-
--noinst_PROGRAMS = mk-dirs_h
-+#noinst_PROGRAMS = mk-dirs_h
-
- dirs.h: mk-dirs_h
- echo '#define PREFIX "${prefix}"' > dirs.h
-@@ -12,7 +12,7 @@
- ./mk-dirs_h ${prefix} DATA_DIR ${pkgdatadir} >> dirs.h
- ./mk-dirs_h ${prefix} CONF_DIR ${sysconfdir} >> dirs.h
-
--mk_dirs_h_SOURCES = mk-dirs_h.cpp
-+#mk_dirs_h_SOURCES = mk-dirs_h.cpp
-
- config.cpp: dirs.h
-
diff --git a/packages/aspell/aspell-0.50.5/mk-dirs_h.py b/packages/aspell/aspell-0.50.5/mk-dirs_h.py
deleted file mode 100755
index a487751e81..0000000000
--- a/packages/aspell/aspell-0.50.5/mk-dirs_h.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-
-prefix=sys.argv[1]
-key=sys.argv[2]
-value=sys.argv[3]
-
-while prefix[-1] == '/':
- prefix = prefix[:-2]
-
-plen = len(prefix)
-
-if value[:plen] == prefix:
- value = value[plen:]
- while value[0] == '/':
- value = value[1:]
- print "#define " + key + " \"<prefix:" + value + ">\"\n"
-else:
- print "#define " + key + " \"" + value + "\"\n"
diff --git a/packages/aspell/aspell-lang.inc b/packages/aspell/aspell-lang.inc
index 709183b428..8c58136f0e 100644
--- a/packages/aspell/aspell-lang.inc
+++ b/packages/aspell/aspell-lang.inc
@@ -1,23 +1,20 @@
-FILES_${PN} = "/usr/lib/aspell/* /usr/share/aspell/*"
+FILES_${PN} = "/usr/lib/aspell* /usr/share/aspell*"
DEPENDS = "aspell-native"
do_configure() {
cd ${S}
- export dictdir=/usr/lib/aspell/
- export datadir=/usr/share/aspell/
- DESTDIR=${D} ./configure
+ DESTDIR=${D} ./configure --vars ASPELL=${STAGING_BINDIR_NATIVE}/aspell
}
do_compile() {
- export dictdir=/usr/lib/aspell/
- export datadir=/usr/share/aspell/
- dictdir=/usr/lib/aspell oe_runmake
+ sed -i -e "s|dictdir.*lib|dictdir = ${libdir}|" Makefile
+ sed -i -e "s|datadir.*lib|datadir = ${libdir}|" Makefile
+ oe_runmake
}
do_install() {
- export dictdir=/usr/lib/aspell/
- export datadir=/usr/share/aspell/
+ unset datadir
oe_runmake install
}
diff --git a/packages/aspell/aspell-native_0.50.5.bb b/packages/aspell/aspell-native_0.50.5.bb
deleted file mode 100644
index e87c6c6fd5..0000000000
--- a/packages/aspell/aspell-native_0.50.5.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/aspell-${PV}.tar.gz \
- file://mk-dirs_h.py \
- file://makefile.patch;patch=1"
-DESCRIPTION = "GNU Aspell spell-checker"
-SECTION = "console/utils"
-LICENSE="LGPL"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/aspell-${PV}"
-
-inherit autotools native
-
-S = "${WORKDIR}/aspell-${PV}"
-
-do_compile_prepend() {
- install ${WORKDIR}/mk-dirs_h.py ${S}/common/mk-dirs_h
-}
-
diff --git a/packages/aspell/aspell-native_0.60.5.bb b/packages/aspell/aspell-native_0.60.5.bb
new file mode 100644
index 0000000000..174821ce46
--- /dev/null
+++ b/packages/aspell/aspell-native_0.60.5.bb
@@ -0,0 +1,6 @@
+require aspell_${PV}.bb
+
+inherit native
+
+S = "${WORKDIR}/aspell-${PV}"
+
diff --git a/packages/aspell/aspell5-en_6.0-0.bb b/packages/aspell/aspell5-en_6.0-0.bb
deleted file mode 100644
index 568e692ab9..0000000000
--- a/packages/aspell/aspell5-en_6.0-0.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-LICENSE = "Copyright file"
-SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell5-en-${PV}.tar.bz2"
-PR="r1"
-
-require aspell-lang.inc
-
-FILES_${PN} += "${docdir}/Copyright"
-FILES_${PN}-doc = ""
-
-do_install_append() {
- install -d ${D}${docdir}
- install ${S}/Copyright ${D}${docdir}
-}
-
diff --git a/packages/aspell/aspell6-en_6.0-0.bb b/packages/aspell/aspell6-en_6.0-0.bb
new file mode 100644
index 0000000000..6c013eb546
--- /dev/null
+++ b/packages/aspell/aspell6-en_6.0-0.bb
@@ -0,0 +1,14 @@
+LICENSE = "Copyright file"
+SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/dict/en/aspell6-en-${PV}.tar.bz2"
+PR="r1"
+
+require aspell-lang.inc
+
+FILES_${PN} += "${docdir}/Copyright"
+FILES_${PN}-doc = ""
+
+do_install_append() {
+ install -d ${D}${docdir}
+ install ${S}/Copyright ${D}${docdir}
+}
+
diff --git a/packages/aspell/aspell6-pl_6.0-20061121-0.bb b/packages/aspell/aspell6-pl_6.0-20061121-0.bb
new file mode 100644
index 0000000000..ef6802d2e8
--- /dev/null
+++ b/packages/aspell/aspell6-pl_6.0-20061121-0.bb
@@ -0,0 +1,17 @@
+LICENSE = "GPLv2"
+SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/dict/pl/aspell6-pl-6.0_20061121-0.tar.bz2"
+PR="r1"
+
+require aspell-lang.inc
+
+S = "${WORKDIR}/aspell6-pl-6.0_20061121-0"
+
+FILES_${PN} += "${docdir}/Copyright"
+FILES_${PN}-doc = ""
+
+do_install_append() {
+ install -d ${D}${docdir}
+ install ${S}/Copyright ${D}${docdir}
+}
+
+
diff --git a/packages/aspell/aspell_0.50.5.bb b/packages/aspell/aspell_0.50.5.bb
deleted file mode 100644
index f685133121..0000000000
--- a/packages/aspell/aspell_0.50.5.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/aspell-${PV}.tar.gz \
- file://mk-dirs_h.py \
- file://makefile.patch;patch=1"
-DESCRIPTION = "GNU Aspell spell-checker"
-SECTION = "console/utils"
-LICENSE="LGPL"
-
-PACKAGES =+ "libaspell libpspell libpspell-dev aspell-utils"
-
-FILES_libaspell = "${libdir}/libaspell.so.* ${datadir}/aspell"
-FILES_aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell"
-FILES_${PN} = "${bindir}/aspell"
-FILES_libpspell = "${libdir}/libpspell.so.*"
-FILES_libpspell-dev = "${libdir}/libpspell* ${bindir}/pspell-config ${includedir}/pspell"
-
-inherit autotools
-
-export CXXFLAGS += "-lstdc++"
-
-do_compile_prepend() {
- install ${WORKDIR}/mk-dirs_h.py ${S}/common/mk-dirs_h
-}
-
-do_stage() {
- oe_libinstall -C lib -so libaspell ${STAGING_LIBDIR}
- install -m 0644 interfaces/cc/aspell.h ${STAGING_INCDIR}
- oe_libinstall -C lib -so libpspell ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/pspell
- install -m 0644 interfaces/cc/pspell.h ${STAGING_INCDIR}/pspell
-}
diff --git a/packages/aspell/aspell_0.60.5.bb b/packages/aspell/aspell_0.60.5.bb
new file mode 100644
index 0000000000..66b21f9e52
--- /dev/null
+++ b/packages/aspell/aspell_0.60.5.bb
@@ -0,0 +1,19 @@
+SRC_URI = "ftp://ftp.gnu.org/gnu/aspell/aspell-${PV}.tar.gz"
+DESCRIPTION = "GNU Aspell spell-checker"
+SECTION = "console/utils"
+LICENSE="LGPL"
+
+PACKAGES += "libaspell libpspell libpspell-dev aspell-utils"
+
+FILES_${PN}-dbg += "${libdir}/aspell-0.60/.debu*"
+FILES_libaspell = "${libdir}/libaspell.so.* ${libdir}/aspell*"
+FILES_aspell-utils = "${bindir}/word-list-compress ${bindir}/aspell-import ${bindir}/run-with-aspell ${bindir}/pre*"
+FILES_${PN} = "${bindir}/aspell"
+FILES_libpspell = "${libdir}/libpspell.so.*"
+FILES_libpspell-dev = "${libdir}/libpspell* ${bindir}/pspell-config ${includedir}/pspell"
+
+inherit autotools
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/asterisk/asterisk-1.0.9/gsm.patch b/packages/asterisk/asterisk-1.0.9/gsm.patch
deleted file mode 100644
index c59aa80bba..0000000000
--- a/packages/asterisk/asterisk-1.0.9/gsm.patch
+++ /dev/null
@@ -1,71 +0,0 @@
---- asterisk-1.0.9.org/codecs/gsm/Makefile 2005-06-21 16:27:28.000000000 +0200
-+++ asterisk-1.0.9/codecs/gsm/Makefile 2005-08-14 21:47:10.000000000 +0200
-@@ -37,26 +37,6 @@
- ######### ppro's, etc, as well as the AMD K6 and K7. The compile will
- ######### probably require gcc.
-
--ifneq (${OSARCH},Darwin)
--ifneq (${PROC},x86_64)
--ifneq (${PROC},ultrasparc)
--ifneq ($(shell uname -m),ppc)
--ifneq ($(shell uname -m),alpha)
--ifneq ($(shell uname -m),armv4l)
--ifneq (${PROC},sparc64)
--ifneq (${PROC},ppc)
--ifneq (${PROC},ppc64)
--OPTIMIZE+=-march=$(PROC)
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--
- #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
- #This works for even old (2.96) versions of gcc and provides a small boost either way.
- #A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn't support it.
-@@ -218,19 +198,6 @@
- $(SRC)/gsm_option.c \
- $(SRC)/short_term.c \
- $(SRC)/table.c
--ifeq (${OSARCH},Linux)
--ifneq ($(shell uname -m),x86_64)
--ifneq ($(shell uname -m),ppc)
--ifneq ($(shell uname -m),alpha)
--ifneq ($(shell uname -m),armv4l)
--ifneq ($(shell uname -m),sparc64)
--GSM_SOURCES+= $(SRC)/k6opt.s
--endif
--endif
--endif
--endif
--endif
--endif
-
- TOAST_SOURCES = $(SRC)/toast.c \
- $(SRC)/toast_lin.c \
-@@ -276,20 +243,6 @@
- $(SRC)/short_term.o \
- $(SRC)/table.o
-
--ifeq (${OSARCH},Linux)
--ifneq ($(shell uname -m), x86_64)
--ifneq ($(shell uname -m), ppc)
--ifneq ($(shell uname -m), alpha)
--ifneq ($(shell uname -m), armv4l)
--ifneq ($(shell uname -m), sparc64)
--GSM_OBJECTS+= $(SRC)/k6opt.o
--endif
--endif
--endif
--endif
--endif
--endif
--
- TOAST_OBJECTS = $(SRC)/toast.o \
- $(SRC)/toast_lin.o \
- $(SRC)/toast_ulaw.o \
-
diff --git a/packages/asterisk/asterisk-1.0.9/makefile.patch b/packages/asterisk/asterisk-1.0.9/makefile.patch
deleted file mode 100644
index 6684d8696e..0000000000
--- a/packages/asterisk/asterisk-1.0.9/makefile.patch
+++ /dev/null
@@ -1,311 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- asterisk-1.0.7/Makefile~makefile.patch
-+++ asterisk-1.0.7/Makefile
-@@ -127,64 +127,67 @@
- AGI_DIR=$(ASTVARLIBDIR)/agi-bin
-
- INCLUDE=-Iinclude -I../include
--CFLAGS=-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
--CFLAGS+=$(OPTIMIZE)
-+my_CFLAGS=-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
-+my_CFLAGS+=$(OPTIMIZE)
-
- ifneq ($(PROC),ultrasparc)
--CFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
-+my_CFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
- endif
-
--CFLAGS+=$(shell if uname -m | grep -q ppc; then echo "-fsigned-char"; fi)
--CFLAGS+=$(shell if [ -f /usr/include/osp/osp.h ]; then echo "-DOSP_SUPPORT -I/usr/include/osp" ; fi)
-+my_CFLAGS+=$(shell if uname -m | grep -q ppc; then echo "-fsigned-char"; fi)
-+my_CFLAGS+=$(shell if [ -f /usr/include/osp/osp.h ]; then echo "-DOSP_SUPPORT -I/usr/include/osp" ; fi)
-
- ifeq (${OSARCH},FreeBSD)
- OSVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
--CFLAGS+=$(shell if test ${OSVERSION} -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
-+my_CFLAGS+=$(shell if test ${OSVERSION} -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
- LIBS+=$(shell if test ${OSVERSION} -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi)
- INCLUDE+=-I/usr/local/include
--CFLAGS+=$(shell if [ -d /usr/local/include/spandsp ]; then echo "-I/usr/local/include/spandsp"; fi)
-+my_CFLAGS+=$(shell if [ -d /usr/local/include/spandsp ]; then echo "-I/usr/local/include/spandsp"; fi)
- MPG123TARG=freebsd
- endif # FreeBSD
-
- ifeq (${OSARCH},NetBSD)
--CFLAGS+=-pthread
-+my_CFLAGS+=-pthread
- INCLUDE+=-I/usr/local/include -I/usr/pkg/include
- MPG123TARG=netbsd
- endif
-
- ifeq (${OSARCH},OpenBSD)
--CFLAGS+=-pthread
-+my_CFLAGS+=-pthread
- endif
-
- #Uncomment this to use the older DSP routines
- #CFLAGS+=-DOLD_DSP_ROUTINES
-
--CFLAGS+=$(shell if [ -f /usr/include/linux/zaptel.h ]; then echo "-DZAPTEL_OPTIMIZATIONS"; fi)
--CFLAGS+=$(shell if [ -f /usr/local/include/zaptel.h ]; then echo "-DZAPTEL_OPTIMIZATIONS"; fi)
-+my_CFLAGS+=$(shell if [ -f /usr/include/linux/zaptel.h ]; then echo "-DZAPTEL_OPTIMIZATIONS"; fi)
-+my_CFLAGS+=$(shell if [ -f /usr/local/include/zaptel.h ]; then echo "-DZAPTEL_OPTIMIZATIONS"; fi)
-
- LIBEDIT=editline/libedit.a
-
- ASTERISKVERSION=$(shell if [ -f .version ]; then cat .version; else if [ -d CVS ]; then if [ -f CVS/Tag ] ; then echo "CVS-`sed 's/^T//g' CVS/Tag`-`date +"%D-%T"`"; else echo "CVS-HEAD-`date +"%D-%T"`"; fi; fi; fi)
- HTTPDIR=$(shell if [ -d /var/www ]; then echo "/var/www"; else echo "/home/httpd"; fi)
- RPMVERSION=$(shell if [ -f .version ]; then sed 's/[-\/:]/_/g' .version; else echo "unknown" ; fi)
--CFLAGS+=-DASTERISK_VERSION=\"$(ASTERISKVERSION)\"
--CFLAGS+=-DINSTALL_PREFIX=\"$(INSTALL_PREFIX)\"
--CFLAGS+=-DASTETCDIR=\"$(ASTETCDIR)\"
--CFLAGS+=-DASTLIBDIR=\"$(ASTLIBDIR)\"
--CFLAGS+=-DASTVARLIBDIR=\"$(ASTVARLIBDIR)\"
--CFLAGS+=-DASTVARRUNDIR=\"$(ASTVARRUNDIR)\"
--CFLAGS+=-DASTSPOOLDIR=\"$(ASTSPOOLDIR)\"
--CFLAGS+=-DASTLOGDIR=\"$(ASTLOGDIR)\"
--CFLAGS+=-DASTCONFPATH=\"$(ASTCONFPATH)\"
--CFLAGS+=-DASTMODDIR=\"$(MODULES_DIR)\"
--CFLAGS+=-DASTAGIDIR=\"$(AGI_DIR)\"
-+my_CFLAGS+=-DASTERISK_VERSION=\"$(ASTERISKVERSION)\"
-+my_CFLAGS+=-DINSTALL_PREFIX=\"$(INSTALL_PREFIX)\"
-+my_CFLAGS+=-DASTETCDIR=\"$(ASTETCDIR)\"
-+my_CFLAGS+=-DASTLIBDIR=\"$(ASTLIBDIR)\"
-+my_CFLAGS+=-DASTVARLIBDIR=\"$(ASTVARLIBDIR)\"
-+my_CFLAGS+=-DASTVARRUNDIR=\"$(ASTVARRUNDIR)\"
-+my_CFLAGS+=-DASTSPOOLDIR=\"$(ASTSPOOLDIR)\"
-+my_CFLAGS+=-DASTLOGDIR=\"$(ASTLOGDIR)\"
-+my_CFLAGS+=-DASTCONFPATH=\"$(ASTCONFPATH)\"
-+my_CFLAGS+=-DASTMODDIR=\"$(MODULES_DIR)\"
-+my_CFLAGS+=-DASTAGIDIR=\"$(AGI_DIR)\"
-+
-+my_CFLAGS+= $(DEBUG_THREADS)
-+my_CFLAGS+= $(TRACE_FRAMES)
-+my_CFLAGS+= $(MALLOC_DEBUG)
-+my_CFLAGS+= $(BUSYDETECT)
-+my_CFLAGS+= $(OPTIONS)
-+my_CFLAGS+=# -fomit-frame-pointer
-+
-+override CFLAGS += $(my_CFLAGS)
-
--CFLAGS+= $(DEBUG_THREADS)
--CFLAGS+= $(TRACE_FRAMES)
--CFLAGS+= $(MALLOC_DEBUG)
--CFLAGS+= $(BUSYDETECT)
--CFLAGS+= $(OPTIONS)
--CFLAGS+=# -fomit-frame-pointer
- SUBDIRS=res channels pbx apps codecs formats agi cdr astman stdtime
- ifeq (${OSARCH},Linux)
- LIBS=-ldl -lpthread
-@@ -296,7 +299,7 @@
- fi
-
- asterisk: editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
-- $(CC) $(DEBUG) -o asterisk $(ASTLINK) $(OBJS) $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LIBS)
-+ $(CC) $(DEBUG) -o asterisk $(ASTLINK) $(OBJS) $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LDFLAGS) $(LIBS)
-
- muted: muted.o
- $(CC) -o muted muted.o
---- asterisk-1.0.7/res/Makefile~makefile.patch
-+++ asterisk-1.0.7/res/Makefile
-@@ -13,15 +13,13 @@
-
- MODS=res_adsi.so res_features.so res_crypto.so res_musiconhold.so res_indications.so res_monitor.so \
- res_agi.so
--MODS+=$(shell if [ -f "/usr/include/odbcinst.h" ]; then echo "res_odbc.so res_config_odbc.so"; fi)
--MODS+=$(shell if [ -f "/usr/local/include/odbcinst.h" ]; then echo "res_odbc.so res_config_odbc.so"; fi)
--MODS+=$(shell if [ -f "/usr/include/osp/osp.h" ]; then echo "res_osp.so"; fi)
-+MODS+=$(shell if [ -f "${STAGING_INCDIR}/odbcinst.h" ]; then echo "res_odbc.so res_config_odbc.so"; fi)
-+MODS+=$(shell if [ -f "${STAGING_INCDIR}/osp/osp.h" ]; then echo "res_osp.so"; fi)
-
- CRYPTO_LIBS=-lssl -lcrypto
-
- CFLAGS+=
--CFLAGS+=$(shell [ -f /usr/include/linux/zaptel.h ] && echo " -DZAPATA_MOH")
--CFLAGS+=$(shell [ -f /usr/local/include/zaptel.h ] && echo " -DZAPATA_MOH")
-+CFLAGS+=$(shell [ -f ${STAGING_INCDIR}/linux/zaptel.h ] && echo " -DZAPATA_MOH")
- #
- # Work around buggy RedHat 9.0
- #
-@@ -37,7 +35,7 @@
- for x in $(MODS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
-
- res_crypto.so: res_crypto.o
-- $(CC) $(SOLINK) -o $@ $< $(CRYPTO_LIBS)
-+ $(CC) $(SOLINK) -o $@ $< $(LDFLAGS) $(CRYPTO_LIBS)
-
- clean:
- rm -f *.so *.o .depend
---- asterisk-1.0.7/channels/Makefile~makefile.patch
-+++ asterisk-1.0.7/channels/Makefile
-@@ -71,22 +71,20 @@
- CHANNEL_LIBS+=chan_oss.so
- endif
-
--CHANNEL_LIBS+=$(shell [ -f /usr/include/linux/ixjuser.h ] && echo chan_phone.so)
--CHANNEL_LIBS+=$(shell [ -f /usr/local/include/ixjuser.h ] && echo chan_phone.so)
-+CHANNEL_LIBS+=$(shell [ -f ${STAGING_INCDIR}/linux/ixjuser.h ] && echo chan_phone.so)
- CHANNEL_LIBS+=$(shell [ -f h323/libchanh323.a ] && echo chan_h323.so)
-
- CFLAGS+=-Wno-missing-prototypes -Wno-missing-declarations
--CFLAGS+=$(shell [ ! -f /usr/include/linux/if_wanpipe.h ] && echo " -DOLD_SANGOMA_API")
--CHANNEL_LIBS+=$(shell [ -f /usr/include/alsa/asoundlib.h ] && echo "chan_alsa.so")
--CFLAGS+=$(shell [ -f /usr/lib/libpri.so.1 ] && echo " -DZAPATA_PRI")
--CFLAGS+=$(shell [ -f /usr/lib/libmfcr2.so.1 ] && echo " -DZAPATA_R2")
-+CFLAGS+=$(shell [ ! -f ${STAGING_INCDIR}/linux/if_wanpipe.h ] && echo " -DOLD_SANGOMA_API")
-+CHANNEL_LIBS+=$(shell [ -f ${STAGING_INCDIR}/alsa/asoundlib.h ] && echo "chan_alsa.so")
-+CFLAGS+=$(shell [ -f ${STAGING_LIBDIR}/libpri.so.1 ] && echo " -DZAPATA_PRI")
-+CFLAGS+=$(shell [ -f ${STAGING_LIBDIR}/libmfcr2.so.1 ] && echo " -DZAPATA_R2")
- CFLAGS+=$(shell [ -f alsa-monitor.h ] && echo " -DALSA_MONITOR")
--ZAPPRI=$(shell [ -f /usr/lib/libpri.so.1 ] && echo "-lpri")
--ZAPR2=$(shell [ -f /usr/lib/libmfcr2.so.1 ] && echo "-lmfcr2")
--CFLAGS+=$(shell [ -f /usr/include/linux/zaptel.h ] && echo "-DIAX_TRUNKING")
--CFLAGS+=$(shell [ -f /usr/local/include/zaptel.h ] && echo "-DIAX_TRUNKING")
--CHANNEL_LIBS+=$(shell [ -f /usr/include/vpbapi.h ] && echo "chan_vpb.so" )
--CFLAGS+=$(shell [ -f /usr/include/vpbapi.h ] && echo " -DLINUX")
-+ZAPPRI=$(shell [ -f ${STAGING_LIBDIR}/libpri.so.1 ] && echo "-lpri")
-+ZAPR2=$(shell [ -f ${STAGING_LIBDIR}/libmfcr2.so.1 ] && echo "-lmfcr2")
-+CFLAGS+=$(shell [ -f ${STAGING_INCDIR}/linux/zaptel.h ] && echo "-DIAX_TRUNKING")
-+CHANNEL_LIBS+=$(shell [ -f ${STAGING_INCDIR}/vpbapi.h ] && echo "chan_vpb.so" )
-+CFLAGS+=$(shell [ -f ${STAGING_INCDIR}/vpbapi.h ] && echo " -DLINUX")
-
- ALSA_SRC=chan_alsa.c
- ALSA_SRC+=$(shell [ -f alsa-monitor.h ] && echo "alsa-monitor.h")
-@@ -106,10 +104,9 @@
-
- ZAPDIR=/usr/lib
-
--CHANNEL_LIBS+=$(shell [ -f /usr/include/linux/zaptel.h ] && echo "chan_zap.so")
--CHANNEL_LIBS+=$(shell [ -f /usr/local/include/zaptel.h ] && echo "chan_zap.so")
-+CHANNEL_LIBS+=$(shell [ -f ${STAGING_INCDIR}/linux/zaptel.h ] && echo "chan_zap.so")
-
--CHANNEL_LIBS+=$(shell [ -f /usr/include/nbs.h ] && echo "chan_nbs.so" )
-+CHANNEL_LIBS+=$(shell [ -f ${STAGING_INCDIR}/nbs.h ] && echo "chan_nbs.so" )
-
- ifndef OPENH323DIR
- OPENH323DIR=$(HOME)/openh323
-@@ -135,10 +132,10 @@
- endif
-
- gentone: gentone.c
-- $(CC) -o gentone gentone.c -lm
-+ $(BUILD_CC) -o gentone gentone.c -lm
-
- gentone-ulaw: gentone-ulaw.c
-- $(CC) -o gentone-ulaw gentone-ulaw.c -lm
-+ $(BUILD_CC) -o gentone-ulaw gentone-ulaw.c -lm
-
- busy.h: gentone
- ./gentone busy 480 620
---- asterisk-1.0.7/pbx/Makefile~makefile.patch
-+++ asterisk-1.0.7/pbx/Makefile
-@@ -16,7 +16,7 @@
- PBX_LIBS=pbx_config.so pbx_wilcalu.so pbx_spool.so # pbx_gtkconsole.so pbx_kdeconsole.so
-
- # Add GTK console if appropriate
--PBX_LIBS+=$(shell gtk-config --cflags >/dev/null 2>/dev/null && echo "pbx_gtkconsole.so")
-+PBX_LIBS+=$(shell ${STAGING_BINDIR_CROSS}/gtk-config --cflags >/dev/null 2>/dev/null && echo "pbx_gtkconsole.so")
- # Add KDE Console if appropriate
- #PBX_LIBS+=$(shell [ "$$QTDIR" != "" ] && echo "pbx_kdeconsole.so")
-
---- asterisk-1.0.7/codecs/lpc10/Makefile~makefile.patch
-+++ asterisk-1.0.7/codecs/lpc10/Makefile
-@@ -25,28 +25,6 @@
- CFLAGS += $(OPTIMIZE) -I$(LIB_TARGET_DIR) $(WARNINGS) -fPIC
- #CFLAGS+= $(shell if uname -m | grep -q 86; then echo "-mpentium" ; fi)
-
--#fix for PPC processors and ALPHA, And UltraSparc too
--ifneq ($(OSARCH),Darwin)
--ifneq ($(findstring BSD,${OSARCH}),BSD)
--ifneq ($(PROC),ppc)
--ifneq ($(PROC),x86_64)
--ifneq ($(PROC),alpha)
--#The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
--#This works for even old (2.96) versions of gcc and provides a small boost either way.
--#A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn.t support it.
--#So we go lowest common available by gcc and go a step down, still a step up from
--#the default as we now have a better instruction set to work with. - Belgarath
--ifeq ($(PROC),ultrasparc)
-- CFLAGS+= -mtune=$(PROC) -mcpu=v8 -O3 -fomit-frame-pointer
--else
-- CFLAGS+= -march=$(PROC)
--endif
--endif
--endif
--endif
--endif
--endif
--
- LIB = $(LIB_TARGET_DIR)/liblpc10.a
-
- .PHONY: all clean
---- asterisk-1.0.7/cdr/Makefile~makefile.patch
-+++ asterisk-1.0.7/cdr/Makefile
-@@ -37,36 +37,25 @@
- #
- # unixODBC stuff...
- #
--MODS+=$(shell if [ -f "/usr/include/odbcinst.h" ]; then echo "cdr_odbc.so"; fi)
--MODS+=$(shell if [ -f "/usr/local/include/odbcinst.h" ]; then echo "cdr_odbc.so"; fi)
-+MODS+=$(shell if [ -f "${STAGING_INCDIR}/odbcinst.h" ]; then echo "cdr_odbc.so"; fi)
-
- #
- # FreeTDS stuff...
- #
--MODS+=$(shell if [ -f "/usr/include/tds.h" ]; then echo "cdr_tds.so"; fi)
--MODS+=$(shell if [ -f "/usr/local/include/tds.h" ]; then echo "cdr_tds.so"; fi)
-+MODS+=$(shell if [ -f "${STAGING_INCDIR}/tds.h" ]; then echo "cdr_tds.so"; fi)
-
- #
- # PGSQL stuff... Autoconf anyone??
- #
--MODS+=$(shell if [ -d /usr/local/pgsql/include ] || [ -d /usr/include/pgsql ] || [ -d /usr/local/include/pgsql ] || [ -d /opt/pgsql/include ] || [ -f /usr/include/libpq-fe.h ] ; then echo "cdr_pgsql.so"; fi)
--CFLAGS+=$(shell if [ -d /usr/local/pgsql/include ]; then echo "-I/usr/local/pgsql/include"; fi)
--CFLAGS+=$(shell if [ -d /usr/include/pgsql ]; then echo "-I/usr/include/pgsql"; fi)
--CFLAGS+=$(shell if [ -d /usr/include/postgresql ]; then echo "-I/usr/include/postgresql"; fi)
--CFLAGS+=$(shell if [ -d /usr/local/include/pgsql ]; then echo "-I/usr/local/include/pgsql"; fi)
--CFLAGS+=$(shell if [ -d /opt/pgsql/include ]; then echo "-I/opt/pgsql/include"; fi)
--#CFLAGS+=$(shell if [ -f /usr/include/libpq-fe.h ]; then echo "-I/usr/include"; fi)
-+CFLAGS+=$(shell if [ -d ${STAGING_INCDIR}/pgsql ]; then echo "-I${STAGING_INCDIR}/pgsql"; fi)
-+CFLAGS+=$(shell if [ -d ${STAGING_INCDIR}/postgresql ]; then echo "-I${STAGING_INCDIR}/postgresql"; fi)
- MLFLAGS=
--MLFLAGS+=$(shell if [ -d /usr/lib/pgsql ]; then echo "-L/usr/lib/pgsql"; fi)
--MLFLAGS+=$(shell if [ -d /usr/local/pgsql/lib ]; then echo "-L/usr/local/pgsql/lib"; fi)
--MLFLAGS+=$(shell if [ -d /usr/local/lib/pgsql ]; then echo "-L/usr/local/lib/pgsql"; fi)
--MLFLAGS+=$(shell if [ -d /opt/pgsql/lib ]; then echo "-L/opt/pgsql/lib"; fi)
--MLFLAGS+=$(shell if [ -f /usr/lib/libpq.so ]; then echo "-L/usr/lib"; fi)
-+MLFLAGS+=$(shell if [ -d ${STAGING_LIBDIR}/pgsql ]; then echo "-L${STAGING_LIBDIR}/pgsql"; fi)
-
- #
- # SQLIte stuff...
- #
--MODS+=$(shell if [ -f "/usr/include/sqlite.h" ]; then echo "cdr_sqlite.so"; fi)
-+MODS+=$(shell if [ -f "${STAGING_INCDIR}/sqlite.h" ]; then echo "cdr_sqlite.so"; fi)
-
- all: depend $(MODS)
-
-@@ -84,16 +73,16 @@
- endif
-
- cdr_odbc.so: cdr_odbc.o
-- $(CC) $(SOLINK) -o $@ $< -lodbc $(MLFLAGS)
-+ $(CC) $(SOLINK) -o $@ $< -lodbc $(LDFLAGS) $$(MLFLAGS)
-
- cdr_tds.so: cdr_tds.o
-- $(CC) $(SOLINK) -o $@ $< -ltds $(MLFLAGS)
-+ $(CC) $(SOLINK) -o $@ $< -ltds $(LDFLAGS) $$(MLFLAGS)
-
- cdr_pgsql.so: cdr_pgsql.o
-- $(CC) $(SOLINK) -o $@ $< -lpq -lz $(MLFLAGS)
-+ $(CC) $(SOLINK) -o $@ $< -lpq -lz $(LDFLAGS) $$(MLFLAGS)
-
- cdr_sqlite.so: cdr_sqlite.o
-- $(CC) $(SOLINK) -o $@ $< -lsqlite $(MLFLAGS)
-+ $(CC) $(SOLINK) -o $@ $< -lsqlite $(LDFLAGS) $(MLFLAGS)
-
- depend: .depend
-
diff --git a/packages/asterisk/asterisk-1.2.13/uclibc-dsn.patch b/packages/asterisk/asterisk-1.2.13/uclibc-dsn.patch
deleted file mode 100644
index 23657bcc76..0000000000
--- a/packages/asterisk/asterisk-1.2.13/uclibc-dsn.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ruN asterisk-1.0.7-old/dns.c asterisk-1.0.7-new/dns.c
---- asterisk-1.0.7-old/dns.c 2004-06-22 22:11:15.000000000 +0200
-+++ asterisk-1.0.7-new/dns.c 2005-03-19 17:38:06.000000000 +0100
-@@ -153,7 +153,13 @@
-
- #if defined(res_ninit)
- #define HAS_RES_NINIT
--#else
-+#endif
-+
-+#ifdef __UCLIBC__
-+#undef HAS_RES_NINIT
-+#endif
-+
-+#ifndef HAS_RES_NINIT
- AST_MUTEX_DEFINE_STATIC(res_lock);
- #if 0
- #warning "Warning, res_ninit is missing... Could have reentrancy issues"
diff --git a/packages/asterisk/asterisk-1.2.14/uclibc-dsn.patch b/packages/asterisk/asterisk-1.2.14/uclibc-dsn.patch
deleted file mode 100644
index 23657bcc76..0000000000
--- a/packages/asterisk/asterisk-1.2.14/uclibc-dsn.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ruN asterisk-1.0.7-old/dns.c asterisk-1.0.7-new/dns.c
---- asterisk-1.0.7-old/dns.c 2004-06-22 22:11:15.000000000 +0200
-+++ asterisk-1.0.7-new/dns.c 2005-03-19 17:38:06.000000000 +0100
-@@ -153,7 +153,13 @@
-
- #if defined(res_ninit)
- #define HAS_RES_NINIT
--#else
-+#endif
-+
-+#ifdef __UCLIBC__
-+#undef HAS_RES_NINIT
-+#endif
-+
-+#ifndef HAS_RES_NINIT
- AST_MUTEX_DEFINE_STATIC(res_lock);
- #if 0
- #warning "Warning, res_ninit is missing... Could have reentrancy issues"
diff --git a/packages/altboot/files/poodle/.mtn2git_empty b/packages/asterisk/asterisk-1.2.18/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/poodle/.mtn2git_empty
+++ b/packages/asterisk/asterisk-1.2.18/.mtn2git_empty
diff --git a/packages/asterisk/asterisk-1.2.12.1/asterisk.patch b/packages/asterisk/asterisk-1.2.18/asterisk.patch
index 006b8e9291..006b8e9291 100644
--- a/packages/asterisk/asterisk-1.2.12.1/asterisk.patch
+++ b/packages/asterisk/asterisk-1.2.18/asterisk.patch
diff --git a/packages/asterisk/asterisk-1.2.18/enable-speex.patch b/packages/asterisk/asterisk-1.2.18/enable-speex.patch
new file mode 100644
index 0000000000..0f5c578bd9
--- /dev/null
+++ b/packages/asterisk/asterisk-1.2.18/enable-speex.patch
@@ -0,0 +1,21 @@
+--- /codecs/orig-Makefile 2005-11-29 13:24:39.000000000 -0500
++++ /codecs/Makefile 2007-02-28 09:54:42.000000000 -0500
+@@ -29,7 +29,7 @@
+ endif
+
+ UI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex.h)
+-UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex/speex.h)
++UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/include/speex/speex.h)
+ ULI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex.h)
+ ULIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex/speex.h)
+ ifneq (${UI_SPEEX},)
+@@ -38,7 +38,8 @@
+ endif
+ ifneq (${UIS_SPEEX},)
+ MODSPEEX=codec_speex.so
+- CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/speex
++ CFLAGS+=-I$(CROSS_COMPILE_TARGET)/include/speex
++ LIBSPEEX=-L$(CROSS_COMPILE_TARGET)/lib
+ LIBSPEEX+=-lspeex -lm
+ endif
+ ifneq (${ULI_SPEEX},)
diff --git a/packages/asterisk/asterisk-1.2.12.1/uclibc-compat-getloadavg.patch b/packages/asterisk/asterisk-1.2.18/uclibc-compat-getloadavg.patch
index a909513b1c..a909513b1c 100644
--- a/packages/asterisk/asterisk-1.2.12.1/uclibc-compat-getloadavg.patch
+++ b/packages/asterisk/asterisk-1.2.18/uclibc-compat-getloadavg.patch
diff --git a/packages/asterisk/asterisk-1.2.12.1/uclibc-dsn.patch b/packages/asterisk/asterisk-1.2.18/uclibc-dsn.patch
index 23657bcc76..23657bcc76 100644
--- a/packages/asterisk/asterisk-1.2.12.1/uclibc-dsn.patch
+++ b/packages/asterisk/asterisk-1.2.18/uclibc-dsn.patch
diff --git a/packages/altboot/files/spitz/.mtn2git_empty b/packages/asterisk/asterisk-1.2.23/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/spitz/.mtn2git_empty
+++ b/packages/asterisk/asterisk-1.2.23/.mtn2git_empty
diff --git a/packages/asterisk/asterisk-1.2.13/asterisk.patch b/packages/asterisk/asterisk-1.2.23/asterisk.patch
index 006b8e9291..006b8e9291 100644
--- a/packages/asterisk/asterisk-1.2.13/asterisk.patch
+++ b/packages/asterisk/asterisk-1.2.23/asterisk.patch
diff --git a/packages/asterisk/asterisk-1.2.23/enable-speex.patch b/packages/asterisk/asterisk-1.2.23/enable-speex.patch
new file mode 100644
index 0000000000..0f5c578bd9
--- /dev/null
+++ b/packages/asterisk/asterisk-1.2.23/enable-speex.patch
@@ -0,0 +1,21 @@
+--- /codecs/orig-Makefile 2005-11-29 13:24:39.000000000 -0500
++++ /codecs/Makefile 2007-02-28 09:54:42.000000000 -0500
+@@ -29,7 +29,7 @@
+ endif
+
+ UI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex.h)
+-UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex/speex.h)
++UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/include/speex/speex.h)
+ ULI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex.h)
+ ULIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex/speex.h)
+ ifneq (${UI_SPEEX},)
+@@ -38,7 +38,8 @@
+ endif
+ ifneq (${UIS_SPEEX},)
+ MODSPEEX=codec_speex.so
+- CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/speex
++ CFLAGS+=-I$(CROSS_COMPILE_TARGET)/include/speex
++ LIBSPEEX=-L$(CROSS_COMPILE_TARGET)/lib
+ LIBSPEEX+=-lspeex -lm
+ endif
+ ifneq (${ULI_SPEEX},)
diff --git a/packages/asterisk/asterisk-1.2.13/uclibc-compat-getloadavg.patch b/packages/asterisk/asterisk-1.2.23/uclibc-compat-getloadavg.patch
index a909513b1c..a909513b1c 100644
--- a/packages/asterisk/asterisk-1.2.13/uclibc-compat-getloadavg.patch
+++ b/packages/asterisk/asterisk-1.2.23/uclibc-compat-getloadavg.patch
diff --git a/packages/asterisk/asterisk-1.2.23/uclibc-dns.patch b/packages/asterisk/asterisk-1.2.23/uclibc-dns.patch
new file mode 100644
index 0000000000..4ba8b6205b
--- /dev/null
+++ b/packages/asterisk/asterisk-1.2.23/uclibc-dns.patch
@@ -0,0 +1,18 @@
+--- /orig-dns.c 2007-07-16 23:46:58.000000000 +0300
++++ /dns.c 2007-07-26 16:29:44.000000000 +0300
+@@ -237,7 +237,14 @@
+ #if defined(res_ndestroy)
+ #define HAS_RES_NDESTROY
+ #endif
+-#else
++#endif
++
++#ifdef __UCLIBC__
++#undef HAS_RES_NINIT
++#undef HAS_RES_NDESTROY
++#endif
++
++#ifndef HAS_RES_NINIT
+ AST_MUTEX_DEFINE_STATIC(res_lock);
+ #if 0
+ #warning "Warning, res_ninit is missing... Could have reentrancy issues"
diff --git a/packages/altboot/files/tosa/.mtn2git_empty b/packages/asterisk/asterisk-1.2.24/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/altboot/files/tosa/.mtn2git_empty
+++ b/packages/asterisk/asterisk-1.2.24/.mtn2git_empty
diff --git a/packages/asterisk/asterisk-1.2.14/asterisk.patch b/packages/asterisk/asterisk-1.2.24/asterisk.patch
index 006b8e9291..006b8e9291 100644
--- a/packages/asterisk/asterisk-1.2.14/asterisk.patch
+++ b/packages/asterisk/asterisk-1.2.24/asterisk.patch
diff --git a/packages/asterisk/asterisk-1.2.24/enable-speex.patch b/packages/asterisk/asterisk-1.2.24/enable-speex.patch
new file mode 100644
index 0000000000..0f5c578bd9
--- /dev/null
+++ b/packages/asterisk/asterisk-1.2.24/enable-speex.patch
@@ -0,0 +1,21 @@
+--- /codecs/orig-Makefile 2005-11-29 13:24:39.000000000 -0500
++++ /codecs/Makefile 2007-02-28 09:54:42.000000000 -0500
+@@ -29,7 +29,7 @@
+ endif
+
+ UI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex.h)
+-UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/include/speex/speex.h)
++UIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/include/speex/speex.h)
+ ULI_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex.h)
+ ULIS_SPEEX=$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/speex/speex.h)
+ ifneq (${UI_SPEEX},)
+@@ -38,7 +38,8 @@
+ endif
+ ifneq (${UIS_SPEEX},)
+ MODSPEEX=codec_speex.so
+- CFLAGS+=-I$(CROSS_COMPILE_TARGET)/usr/include/speex
++ CFLAGS+=-I$(CROSS_COMPILE_TARGET)/include/speex
++ LIBSPEEX=-L$(CROSS_COMPILE_TARGET)/lib
+ LIBSPEEX+=-lspeex -lm
+ endif
+ ifneq (${ULI_SPEEX},)
diff --git a/packages/asterisk/asterisk-1.2.14/uclibc-compat-getloadavg.patch b/packages/asterisk/asterisk-1.2.24/uclibc-compat-getloadavg.patch
index a909513b1c..a909513b1c 100644
--- a/packages/asterisk/asterisk-1.2.14/uclibc-compat-getloadavg.patch
+++ b/packages/asterisk/asterisk-1.2.24/uclibc-compat-getloadavg.patch
diff --git a/packages/asterisk/asterisk-1.2.24/uclibc-dns.patch b/packages/asterisk/asterisk-1.2.24/uclibc-dns.patch
new file mode 100644
index 0000000000..4ba8b6205b
--- /dev/null
+++ b/packages/asterisk/asterisk-1.2.24/uclibc-dns.patch
@@ -0,0 +1,18 @@
+--- /orig-dns.c 2007-07-16 23:46:58.000000000 +0300
++++ /dns.c 2007-07-26 16:29:44.000000000 +0300
+@@ -237,7 +237,14 @@
+ #if defined(res_ndestroy)
+ #define HAS_RES_NDESTROY
+ #endif
+-#else
++#endif
++
++#ifdef __UCLIBC__
++#undef HAS_RES_NINIT
++#undef HAS_RES_NDESTROY
++#endif
++
++#ifndef HAS_RES_NINIT
+ AST_MUTEX_DEFINE_STATIC(res_lock);
+ #if 0
+ #warning "Warning, res_ninit is missing... Could have reentrancy issues"
diff --git a/packages/asterisk/asterisk-1.2.8/makefile.patch b/packages/asterisk/asterisk-1.2.8/makefile.patch
deleted file mode 100644
index 780868b91e..0000000000
--- a/packages/asterisk/asterisk-1.2.8/makefile.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- asterisk-1.2.8/Makefile~makefile
-+++ asterisk-1.2.8/Makefile
-@@ -16,6 +16,9 @@
- # Create OPTIONS variable
- OPTIONS=
- # If cross compiling, define these to suit
-+CROSS_COMPILE=$(CROSS_DIR)
-+CROSS_COMPILE_TARGET=$(STAGING_DIR)
-+CROSS_COMPILE_BIN=$(STAGING_BINDIR_CROSS)
- # CROSS_COMPILE=/opt/montavista/pro/devkit/arm/xscale_be/bin/xscale_be-
- # CROSS_COMPILE_BIN=/opt/montavista/pro/devkit/arm/xscale_be/bin/
- # CROSS_COMPILE_TARGET=/opt/montavista/pro/devkit/arm/xscale_be/target
-@@ -327,13 +330,13 @@
- endif
- endif
-
--ASTCFLAGS+= $(DEBUG_THREADS)
--ASTCFLAGS+= $(TRACE_FRAMES)
--ASTCFLAGS+= $(MALLOC_DEBUG)
--ASTCFLAGS+= $(BUSYDETECT)
--ASTCFLAGS+= $(OPTIONS)
-+#ASTCFLAGS+= $(DEBUG_THREADS)
-+#ASTCFLAGS+= $(TRACE_FRAMES)
-+#ASTCFLAGS+= $(MALLOC_DEBUG)
-+#ASTCFLAGS+= $(BUSYDETECT)
-+#ASTCFLAGS+= $(OPTIONS)
- ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
--ASTCFLAGS+= -fomit-frame-pointer
-+#ASTCFLAGS+= -fomit-frame-pointer
- endif
- SUBDIRS=res channels pbx apps codecs formats agi cdr funcs utils stdtime
-
-@@ -397,7 +400,7 @@
- endif
-
- ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
-- CFLAGS+=$(ASTCFLAGS)
-+override CFLAGS+=$(ASTCFLAGS)
- endif
-
- # This is used when generating the doxygen documentation
-@@ -519,7 +522,7 @@
- fi
- rm -f include/asterisk/build.h.tmp
- $(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
-- $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LIBS)
-+ $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LDFLAGS) $(LIBS)
-
- muted: muted.o
- $(CC) $(AUDIO_LIBS) -o muted muted.o
---- asterisk-1.2.8/codecs/gsm/Makefile~makefile
-+++ asterisk-1.2.8/codecs/gsm/Makefile
-@@ -51,7 +51,7 @@
- ifneq (${PROC},ppc)
- ifneq (${PROC},ppc64)
- ifneq (${PROC},s390)
--OPTIMIZE+=-march=$(PROC)
-+#OPTIMIZE+=-march=$(PROC)
- endif
- endif
- endif
-@@ -243,7 +243,7 @@
- ifneq (${PROC},arm)
- ifneq ($(shell uname -m), parisc)
- ifneq (${PROC}, s390)
--GSM_SOURCES+= $(SRC)/k6opt.s
-+#GSM_SOURCES+= $(SRC)/k6opt.s
- endif
- endif
- endif
-@@ -309,7 +309,7 @@
- ifneq ($(shell uname -m), sparc64)
- ifneq ($(shell uname -m), armv4l)
- ifneq ($(shell uname -m), parisc)
--GSM_OBJECTS+= $(SRC)/k6opt.o
-+#GSM_OBJECTS+= $(SRC)/k6opt.o
- endif
- endif
- endif
---- asterisk-1.2.8/res/Makefile~makefile
-+++ asterisk-1.2.8/res/Makefile
-@@ -89,7 +89,7 @@
- fi
-
- res_crypto.so: res_crypto.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(CRYPTO_LIBS)
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< $(LDFLAGS) ${CYGSOLIB} $(CRYPTO_LIBS)
-
- clean:
- rm -f *.so *.o .depend
---- asterisk-1.2.8/channels/Makefile~makefile
-+++ asterisk-1.2.8/channels/Makefile
-@@ -73,7 +73,7 @@
- SOLINK+=-lrt
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/ixjuser.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/ixjuser.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/linux/ixjuser.h),)
- CHANNEL_LIBS+=chan_phone.so
- endif
-
-@@ -88,16 +88,16 @@
-
- CFLAGS+=-Wno-missing-prototypes -Wno-missing-declarations
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/alsa/asoundlib.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/alsa/asoundlib.h),)
- CHANNEL_LIBS+=chan_alsa.so
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libpri.so.1)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/libpri.so.1),)
-+ifneq ($(wildcard $(STAGING_LIBDIR)/libpri.so.1),)
- CFLAGS+=-DZAPATA_PRI
- ZAPPRI=-lpri
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libmfcr2.so.1)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/libmfcr2.so.1),)
-+ifneq ($(wildcard $(STAGING_LIBDIR)/libmfcr2.so.1),)
- CFLAGS+=-DZAPATA_R2
- ZAPR2=-lmfcr2
- endif
-@@ -110,7 +110,7 @@
- endif
-
- ifndef WITHOUT_ZAPTEL
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/pkg/include/zaptel.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/linux/zaptel.h),)
- ifeq (${OSARCH},NetBSD)
- SOLINK+=-L$(CROSS_COMPILE_TARGET)/usr/pkg/lib
- endif
-@@ -122,7 +122,7 @@
- endif
- endif # WITHOUT_ZAPTEL
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/vpbapi.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/vpbapi.h),)
- CHANNEL_LIBS+=chan_vpb.so
- CFLAGS+=-DLINUX
- endif
-@@ -137,7 +137,7 @@
-
- ZAPDIR=/usr/lib
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/nbs.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/nbs.h),)
- CHANNEL_LIBS+=chan_nbs.so
- endif
-
-@@ -158,7 +158,7 @@
- rm -f busy.h ringtone.h gentone gentone-ulaw
-
- %.so : %.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} ${LIBS}
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< $(LDFLAGS) ${CYGSOLIB} ${LIBS}
-
- ifneq ($(wildcard .depend),)
- include .depend
---- asterisk-1.2.8/pbx/Makefile~makefile
-+++ asterisk-1.2.8/pbx/Makefile
-@@ -59,7 +59,7 @@
- $(CC) $(SOLINK) -o $@ $(KDE_CONSOLE_OBJS) $(KDE_LIBS)
-
- pbx_dundi.so: dundi-parser.o pbx_dundi.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} pbx_dundi.o dundi-parser.o -lz ${CYGSOLIB}
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} pbx_dundi.o dundi-parser.o -lz ${CYGSOLIB} $(LDFLAGS)
-
- %.moc : %.h
- $(MOC) $< -o $@
---- asterisk-1.2.8/formats/Makefile~makefile
-+++ asterisk-1.2.8/formats/Makefile
-@@ -25,7 +25,7 @@
- #
- # OGG/Vorbis format
- #
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/vorbis/codec.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/vorbis/codec.h),)
- FORMAT_LIBS+=format_ogg_vorbis.so
- endif
-
---- asterisk-1.2.8/utils/Makefile~makefile
-+++ asterisk-1.2.8/utils/Makefile
-@@ -22,11 +22,11 @@
-
- TARGET=stereorize streamplayer
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/popt.h)$(wildcard -f $(CROSS_COMPILE_TARGET)/usr/local/include/popt.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/popt.h),)
- TARGET+=smsq
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/newt.h)$(wildcard -f $(CROSS_COMPILE_TARGET)/usr/local/include/newt.h),)
-+ifneq ($(wildcard $(STAGING_INCDIR)/newt.h),)
- TARGET+=astman
- endif
-
diff --git a/packages/asterisk/asterisk-1.2.9.1/asterisk.patch b/packages/asterisk/asterisk-1.2.9.1/asterisk.patch
deleted file mode 100644
index 9e93f9d5d7..0000000000
--- a/packages/asterisk/asterisk-1.2.9.1/asterisk.patch
+++ /dev/null
@@ -1,221 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- asterisk-1.2.9.1/./Makefile~asterisk
-+++ asterisk-1.2.9.1/./Makefile
-@@ -331,7 +331,7 @@
- ASTCFLAGS+= $(TRACE_FRAMES)
- ASTCFLAGS+= $(MALLOC_DEBUG)
- ASTCFLAGS+= $(BUSYDETECT)
--ASTCFLAGS+= $(OPTIONS)
-+#ASTCFLAGS+= $(OPTIONS)
- ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
- ASTCFLAGS+= -fomit-frame-pointer
- endif
-@@ -347,12 +347,12 @@
- netsock.o slinfactory.o ast_expr2.o ast_expr2f.o \
- cryptostub.o
-
--ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/sys/poll.h),)
-+ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/include/sys/poll.h),)
- OBJS+= poll.o
- ASTCFLAGS+=-DPOLLCOMPAT
- endif
-
--ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/dlfcn.h),)
-+ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/include/dlfcn.h),)
- OBJS+= dlfcn.o
- ASTCFLAGS+=-DDLFCNCOMPAT
- endif
-@@ -397,7 +397,7 @@
- endif
-
- ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
-- CFLAGS+=$(ASTCFLAGS)
-+override CFLAGS+=$(ASTCFLAGS)
- endif
-
- # This is used when generating the doxygen documentation
-@@ -519,7 +519,7 @@
- fi
- rm -f include/asterisk/build.h.tmp
- $(CC) -c -o buildinfo.o $(CFLAGS) buildinfo.c
-- $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LIBS)
-+ $(CC) $(DEBUG) $(ASTOBJ) $(ASTLINK) $(OBJS) buildinfo.o $(LIBEDIT) db1-ast/libdb1.a stdtime/libtime.a $(LDFLAGS) $(LIBS)
-
- muted: muted.o
- $(CC) $(AUDIO_LIBS) -o muted muted.o
---- asterisk-1.2.9.1/codecs/gsm/Makefile~asterisk
-+++ asterisk-1.2.9.1/codecs/gsm/Makefile
-@@ -51,7 +51,7 @@
- ifneq (${PROC},ppc)
- ifneq (${PROC},ppc64)
- ifneq (${PROC},s390)
--OPTIMIZE+=-march=$(PROC)
-+#OPTIMIZE+=-march=$(PROC)
- endif
- endif
- endif
-@@ -243,7 +243,7 @@
- ifneq (${PROC},arm)
- ifneq ($(shell uname -m), parisc)
- ifneq (${PROC}, s390)
--GSM_SOURCES+= $(SRC)/k6opt.s
-+#GSM_SOURCES+= $(SRC)/k6opt.s
- endif
- endif
- endif
-@@ -309,7 +309,7 @@
- ifneq ($(shell uname -m), sparc64)
- ifneq ($(shell uname -m), armv4l)
- ifneq ($(shell uname -m), parisc)
--GSM_OBJECTS+= $(SRC)/k6opt.o
-+#GSM_OBJECTS+= $(SRC)/k6opt.o
- endif
- endif
- endif
---- asterisk-1.2.9.1/res/Makefile~asterisk
-+++ asterisk-1.2.9.1/res/Makefile
-@@ -89,7 +89,7 @@
- fi
-
- res_crypto.so: res_crypto.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} $(CRYPTO_LIBS)
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< $(LDFLAGS) ${CYGSOLIB} $(CRYPTO_LIBS)
-
- clean:
- rm -f *.so *.o .depend
---- asterisk-1.2.9.1/channels/Makefile~asterisk
-+++ asterisk-1.2.9.1/channels/Makefile
-@@ -73,7 +73,7 @@
- SOLINK+=-lrt
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/ixjuser.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/ixjuser.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/linux/ixjuser.h),)
- CHANNEL_LIBS+=chan_phone.so
- endif
-
-@@ -88,16 +88,16 @@
-
- CFLAGS+=-Wno-missing-prototypes -Wno-missing-declarations
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/alsa/asoundlib.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/alsa/asoundlib.h),)
- CHANNEL_LIBS+=chan_alsa.so
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libpri.so.1)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/libpri.so.1),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/lib/libpri.so.1),)
- CFLAGS+=-DZAPATA_PRI
- ZAPPRI=-lpri
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libmfcr2.so.1)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/lib/libmfcr2.so.1),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/lib/libmfcr2.so.1),)
- CFLAGS+=-DZAPATA_R2
- ZAPR2=-lmfcr2
- endif
-@@ -110,7 +110,7 @@
- endif
-
- ifndef WITHOUT_ZAPTEL
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/pkg/include/zaptel.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/linux/zaptel.h),)
- ifeq (${OSARCH},NetBSD)
- SOLINK+=-L$(CROSS_COMPILE_TARGET)/usr/pkg/lib
- endif
-@@ -122,7 +122,7 @@
- endif
- endif # WITHOUT_ZAPTEL
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/vpbapi.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/vpbapi.h),)
- CHANNEL_LIBS+=chan_vpb.so
- CFLAGS+=-DLINUX
- endif
-@@ -137,7 +137,7 @@
-
- ZAPDIR=/usr/lib
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/nbs.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/nbs.h),)
- CHANNEL_LIBS+=chan_nbs.so
- endif
-
-@@ -158,7 +158,7 @@
- rm -f busy.h ringtone.h gentone gentone-ulaw
-
- %.so : %.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} ${LIBS}
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< $(LDFLAGS) ${CYGSOLIB} ${LIBS}
-
- ifneq ($(wildcard .depend),)
- include .depend
-@@ -215,7 +215,7 @@
- chan_alsa.o: $(ALSA_SRC)
-
- chan_alsa.so: chan_alsa.o
-- $(CC) $(SOLINK) -o $@ $< -lasound -lm -ldl
-+ $(CC) $(SOLINK) -o $@ $< -lasound -lm -ldl $(LDFLAGS)
-
- chan_nbs.so: chan_nbs.o
- $(CC) $(SOLINK) -o $@ $< -lnbs
---- asterisk-1.2.9.1/pbx/Makefile~asterisk
-+++ asterisk-1.2.9.1/pbx/Makefile
-@@ -59,7 +59,7 @@
- $(CC) $(SOLINK) -o $@ $(KDE_CONSOLE_OBJS) $(KDE_LIBS)
-
- pbx_dundi.so: dundi-parser.o pbx_dundi.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} pbx_dundi.o dundi-parser.o -lz ${CYGSOLIB}
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} pbx_dundi.o dundi-parser.o -lz ${CYGSOLIB} $(LDFLAGS)
-
- %.moc : %.h
- $(MOC) $< -o $@
---- asterisk-1.2.9.1/formats/Makefile~asterisk
-+++ asterisk-1.2.9.1/formats/Makefile
-@@ -25,7 +25,7 @@
- #
- # OGG/Vorbis format
- #
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/vorbis/codec.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/vorbis/codec.h),)
- FORMAT_LIBS+=format_ogg_vorbis.so
- endif
-
-@@ -57,7 +57,7 @@
- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -lm
-
- format_ogg_vorbis.so : format_ogg_vorbis.o
-- $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -logg -lvorbis -lvorbisenc -lm
-+ $(CC) $(SOLINK) -o $@ ${CYGSOLINK} $< ${CYGSOLIB} -logg -lvorbis -lvorbisenc -lm $(LDFLAGS)
-
- install: all
- for x in $(FORMAT_LIBS); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
---- asterisk-1.2.9.1/utils/Makefile~asterisk
-+++ asterisk-1.2.9.1/utils/Makefile
-@@ -22,11 +22,11 @@
-
- TARGET=stereorize streamplayer
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/popt.h)$(wildcard -f $(CROSS_COMPILE_TARGET)/usr/local/include/popt.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/popt.h),)
- TARGET+=smsq
- endif
-
--ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/newt.h)$(wildcard -f $(CROSS_COMPILE_TARGET)/usr/local/include/newt.h),)
-+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/include/newt.h),)
- TARGET+=astman
- endif
-
-@@ -64,7 +64,7 @@
- $(CC) $(CFLAGS) -o $@ $^
-
- smsq: smsq.o
-- $(CC) $(CFLAGS) -o smsq ${SOL} smsq.o -lpopt
-+ $(CC) $(CFLAGS) -o smsq ${SOL} smsq.o -lpopt $(LDFLAGS)
-
- streamplayer: streamplayer.o
- $(CC) $(CFLAGS) -o streamplayer ${SOL} streamplayer.o ${SOLLIBS}
diff --git a/packages/asterisk/asterisk-1.2.9.1/uclibc-compat-getloadavg.patch b/packages/asterisk/asterisk-1.2.9.1/uclibc-compat-getloadavg.patch
deleted file mode 100644
index a909513b1c..0000000000
--- a/packages/asterisk/asterisk-1.2.9.1/uclibc-compat-getloadavg.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ruN asterisk-1.2.0-old/include/asterisk/compat.h asterisk-1.2.0-new/include/asterisk/compat.h
---- asterisk-1.2.0-old/include/asterisk/compat.h 2005-11-08 05:13:19.000000000 +0100
-+++ asterisk-1.2.0-new/include/asterisk/compat.h 2005-12-04 05:32:31.000000000 +0100
-@@ -75,7 +75,9 @@
- #define HAVE_STRTOQ
-
- #ifdef _BSD_SOURCE
-+#ifndef __UCLIBC__
- #define HAVE_GETLOADAVG
-+#endif /* __UCLIBC__ */
- #endif
-
- #ifdef __linux__
diff --git a/packages/asterisk/asterisk-1.2.9.1/uclibc-dsn.patch b/packages/asterisk/asterisk-1.2.9.1/uclibc-dsn.patch
deleted file mode 100644
index 23657bcc76..0000000000
--- a/packages/asterisk/asterisk-1.2.9.1/uclibc-dsn.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ruN asterisk-1.0.7-old/dns.c asterisk-1.0.7-new/dns.c
---- asterisk-1.0.7-old/dns.c 2004-06-22 22:11:15.000000000 +0200
-+++ asterisk-1.0.7-new/dns.c 2005-03-19 17:38:06.000000000 +0100
-@@ -153,7 +153,13 @@
-
- #if defined(res_ninit)
- #define HAS_RES_NINIT
--#else
-+#endif
-+
-+#ifdef __UCLIBC__
-+#undef HAS_RES_NINIT
-+#endif
-+
-+#ifndef HAS_RES_NINIT
- AST_MUTEX_DEFINE_STATIC(res_lock);
- #if 0
- #warning "Warning, res_ninit is missing... Could have reentrancy issues"
diff --git a/packages/aspell/aspell-0.50.5/.mtn2git_empty b/packages/asterisk/asterisk-1.4.7/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/aspell/aspell-0.50.5/.mtn2git_empty
+++ b/packages/asterisk/asterisk-1.4.7/.mtn2git_empty
diff --git a/packages/asterisk/asterisk-1.4.7/Makefile.patch b/packages/asterisk/asterisk-1.4.7/Makefile.patch
new file mode 100644
index 0000000000..a6d630949e
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.7/Makefile.patch
@@ -0,0 +1,20 @@
+--- asterisk-1.4.5/Makefile 2007-05-24 15:05:08.000000000 -0400
++++ asterisk-1.4.5/Makefile.new 2007-06-17 05:36:44.000000000 -0400
+@@ -115,7 +115,7 @@ else
+ ASTSBINDIR=$(sbindir)
+ ASTSPOOLDIR=$(localstatedir)/spool/asterisk
+ ASTLOGDIR=$(localstatedir)/log/asterisk
+- ASTVARRUNDIR=$(localstatedir)/run
++ ASTVARRUNDIR=$(localstatedir)/run/asterisk
+ ASTMANDIR=$(mandir)
+ ifeq ($(OSARCH),FreeBSD)
+ ASTVARLIBDIR=$(prefix)/share/asterisk
+@@ -468,7 +468,7 @@ oldmodcheck:
+ echo " WARNING WARNING WARNING" ;\
+ fi
+
+-install: datafiles bininstall $(SUBDIRS_INSTALL)
++install: datafiles bininstall $(SUBDIRS_INSTALL) samples
+ @if [ -x /usr/sbin/asterisk-post-install ]; then \
+ /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
+ fi
diff --git a/packages/asterisk/asterisk-1.4.7/init b/packages/asterisk/asterisk-1.4.7/init
new file mode 100644
index 0000000000..f26ad38db3
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.7/init
@@ -0,0 +1,77 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/openpbx and type
+# > update-rc.d asterisk defaults 60
+#
+asterisk=/usr/sbin/asterisk
+pidfile=/var/run/asterisk/asterisk.pid
+asterisk_args="-npqT -U asterisk -G asterisk"
+
+test -x "$asterisk" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Asterisk"
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop gracefully"
+ sleep 4
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ force-stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop now"
+ sleep 2
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart gracefully"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ force-restart)
+ echo -n "Forcibly Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart now"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ reload)
+ echo -n "Reloading Asterisk Configuration"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "reload"
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ logger-reload)
+ if [ -f $pidfile ]; then
+ $asterisk -rx "logger reload"
+ fi
+ ;;
+ *)
+ echo "Usage: /etc/init.d/asterisk {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
+ exit 1
+esac
+
+exit 0
+
diff --git a/packages/asterisk/asterisk-1.4.7/logrotate b/packages/asterisk/asterisk-1.4.7/logrotate
new file mode 100644
index 0000000000..dfd25ee55c
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.7/logrotate
@@ -0,0 +1,12 @@
+/var/log/asterisk/cdr-csv/Master.csv /var/log/asterisk/cdr-custom/Master.csv /var/log/asterisk/queue_log /var/log/asterisk/event_log /var/log/asterisk/messages {
+ daily
+ missingok
+ compress
+ delaycompress
+ rotate 30
+ sharedscripts
+ postrotate
+ /etc/init.d/asterisk logger-reload
+ endscript
+}
+
diff --git a/packages/asterisk/asterisk-1.4.7/sounds.xml.patch b/packages/asterisk/asterisk-1.4.7/sounds.xml.patch
new file mode 100644
index 0000000000..b549fea132
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.7/sounds.xml.patch
@@ -0,0 +1,18 @@
+--- asterisk-1.4.4/sounds/sounds.xml 2007-05-24 17:00:45.000000000 -0400
++++ asterisk-1.4.4/sounds/sounds.xml.new 2007-05-25 13:23:41.000000000 -0400
+@@ -6,7 +6,6 @@
+ <member name="CORE-SOUNDS-EN-ALAW" displayname="English, a-Law format">
+ </member>
+ <member name="CORE-SOUNDS-EN-GSM" displayname="English, GSM format" >
+- <defaultenabled>yes</defaultenabled>
+ </member>
+ <member name="CORE-SOUNDS-EN-G729" displayname="English, G.729 format">
+ </member>
+@@ -39,7 +38,6 @@
+ </category>
+ <category name="MENUSELECT_MOH" displayname="Music On Hold File Packages" positive_output="yes">
+ <member name="MOH-FREEPLAY-WAV" displayname="FreePlay Music On Hold Files, WAV format" >
+- <defaultenabled>yes</defaultenabled>
+ </member>
+ <member name="MOH-FREEPLAY-ULAW" displayname="FreePlay Music On Hold Files, mu-Law format" >
+ </member>
diff --git a/packages/asterisk/asterisk-1.4.7/volatiles b/packages/asterisk/asterisk-1.4.7/volatiles
new file mode 100644
index 0000000000..c68e786c90
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.7/volatiles
@@ -0,0 +1,7 @@
+d asterisk asterisk 0775 /var/run/asterisk none
+d asterisk asterisk 0775 /var/lib/asterisk none
+d asterisk asterisk 0775 /var/log/asterisk none
+d asterisk asterisk 0775 /var/log/asterisk/cdr-csv none
+d asterisk asterisk 0775 /var/log/asterisk/cdr-custom none
+d asterisk asterisk 0775 /var/spool/asterisk/outgoing none
+d asterisk asterisk 0775 /var/spool/asterisk/voicemail none
diff --git a/packages/asterisk/asterisk_1.0.9.bb b/packages/asterisk/asterisk_1.0.9.bb
deleted file mode 100644
index 5e1bf87b06..0000000000
--- a/packages/asterisk/asterisk_1.0.9.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION="The Astersisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl"
-PR = "r2"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://gsm.patch;patch=1 \
- file://makefile.patch;patch=1"
-
-
-# Doh - they use 'L'inux intead of linux
-# FIXME: Do the sed here
-
-export OSARCH="Linux"
-export PROC="${TARGET_ARCH}"
-
-# We will probably have to edit the CFLAG in teh Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
diff --git a/packages/asterisk/asterisk_1.2.12.1.bb b/packages/asterisk/asterisk_1.2.12.1.bb
deleted file mode 100644
index c0b7fc2ed9..0000000000
--- a/packages/asterisk/asterisk_1.2.12.1.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-DESCRIPTION="The Asterisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis popt"
-PR = "r0"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://uclibc-compat-getloadavg.patch;patch=1 \
- file://uclibc-dsn.patch;patch=1 \
- file://asterisk.patch;patch=1"
-
-
-export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
-export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
-export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
-
-export CROSS_ARCH="Linux"
-
-export CROSS_PROC="${TARGET_ARCH}"
-
-export MAKECMDGOALS="dont-optimize"
-
-# We will probably have to edit the CFLAG in the Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
diff --git a/packages/asterisk/asterisk_1.2.13.bb b/packages/asterisk/asterisk_1.2.13.bb
deleted file mode 100644
index 3378f6e48b..0000000000
--- a/packages/asterisk/asterisk_1.2.13.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-DESCRIPTION="The Asterisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis popt"
-PR = "r2"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://uclibc-compat-getloadavg.patch;patch=1 \
- file://uclibc-dsn.patch;patch=1 \
- file://asterisk.patch;patch=1"
-
-
-export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
-export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
-export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
-
-export CROSS_ARCH="Linux"
-export CROSS_PROC="${TARGET_ARCH}"
-
-export MAKECMDGOALS="dont-optimize"
-
-# We will probably have to edit the CFLAG in the Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
diff --git a/packages/asterisk/asterisk_1.2.14.bb b/packages/asterisk/asterisk_1.2.14.bb
deleted file mode 100644
index 0ec55f8e42..0000000000
--- a/packages/asterisk/asterisk_1.2.14.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION="The Asterisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis popt"
-SECTION = "console/telephony"
-PR = "r4"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://uclibc-compat-getloadavg.patch;patch=1 \
- file://uclibc-dsn.patch;patch=1 \
- file://asterisk.patch;patch=1"
-
-S = "${WORKDIR}/asterisk-${PV}"
-
-
-export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
-export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
-export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
-
-export CROSS_ARCH="Linux"
-export CROSS_PROC="${TARGET_ARCH}"
-
-export MAKECMDGOALS="dont-optimize"
-
-# We will probably have to edit the CFLAG in the Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
-FILES_${PN}-dbg += "${libdir}/asterisk/modules/.debug"
-FILES_${PN}-dbg += "/var/lib/asterisk/agi-bin/.debug"
-
diff --git a/packages/asterisk/asterisk_1.2.18.bb b/packages/asterisk/asterisk_1.2.18.bb
new file mode 100644
index 0000000000..20d20a09b6
--- /dev/null
+++ b/packages/asterisk/asterisk_1.2.18.bb
@@ -0,0 +1,44 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="www.asterisk.org"
+LICENSE="GPL"
+DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis speex"
+SECTION = "console/telephony"
+PR = "r5"
+
+SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
+ file://uclibc-compat-getloadavg.patch;patch=1 \
+ file://uclibc-dsn.patch;patch=1 \
+ file://asterisk.patch;patch=1 \
+ file://enable-speex.patch;patch=1"
+
+S = "${WORKDIR}/asterisk-${PV}"
+
+
+export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
+export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
+export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
+
+export CROSS_ARCH="Linux"
+export CROSS_PROC="${TARGET_ARCH}"
+
+export MAKECMDGOALS="dont-optimize"
+
+# We will probably have to edit the CFLAG in the Makefile
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/asterisk
+ install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
+}
+
+
+FILES_${PN}-dbg += "${libdir}/asterisk/modules/.debug"
+FILES_${PN}-dbg += "/var/lib/asterisk/agi-bin/.debug"
+
diff --git a/packages/asterisk/asterisk_1.2.23.bb b/packages/asterisk/asterisk_1.2.23.bb
new file mode 100644
index 0000000000..3d91637dba
--- /dev/null
+++ b/packages/asterisk/asterisk_1.2.23.bb
@@ -0,0 +1,44 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="www.asterisk.org"
+LICENSE="GPL"
+DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis speex"
+SECTION = "console/telephony"
+PR = "r0"
+
+SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
+ file://uclibc-compat-getloadavg.patch;patch=1 \
+ file://uclibc-dns.patch;patch=1 \
+ file://asterisk.patch;patch=1 \
+ file://enable-speex.patch;patch=1"
+
+S = "${WORKDIR}/asterisk-${PV}"
+
+
+export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
+export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
+export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
+
+export CROSS_ARCH="Linux"
+export CROSS_PROC="${TARGET_ARCH}"
+
+export MAKECMDGOALS="dont-optimize"
+
+# We will probably have to edit the CFLAG in the Makefile
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/asterisk
+ install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
+}
+
+
+FILES_${PN}-dbg += "${libdir}/asterisk/modules/.debug"
+FILES_${PN}-dbg += "/var/lib/asterisk/agi-bin/.debug"
+
diff --git a/packages/asterisk/asterisk_1.2.24.bb b/packages/asterisk/asterisk_1.2.24.bb
new file mode 100644
index 0000000000..01b825d19e
--- /dev/null
+++ b/packages/asterisk/asterisk_1.2.24.bb
@@ -0,0 +1,46 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="www.asterisk.org"
+LICENSE="GPL"
+DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis speex"
+SECTION = "console/telephony"
+PR = "r0"
+
+SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
+ file://uclibc-compat-getloadavg.patch;patch=1 \
+ file://uclibc-dns.patch;patch=1 \
+ file://asterisk.patch;patch=1 \
+ file://enable-speex.patch;patch=1"
+
+S = "${WORKDIR}/asterisk-${PV}"
+
+
+export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
+export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
+export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
+
+export CROSS_ARCH="Linux"
+export CROSS_PROC="${TARGET_ARCH}"
+
+export MAKECMDGOALS="dont-optimize"
+
+# We will probably have to edit the CFLAG in the Makefile
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/asterisk
+ install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
+}
+
+
+FILES_${PN}-dbg += "${libdir}/asterisk/modules/.debug"
+FILES_${PN}-dbg += "/var/lib/asterisk/agi-bin/.debug"
+
diff --git a/packages/asterisk/asterisk_1.2.8.bb b/packages/asterisk/asterisk_1.2.8.bb
deleted file mode 100644
index a9917c6e62..0000000000
--- a/packages/asterisk/asterisk_1.2.8.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION="The Astersisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl curl"
-PR = "r0"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://makefile.patch;patch=1"
-
-
-# Doh - they use 'L'inux intead of linux
-# FIXME: Do the sed here
-
-export OSARCH="Linux"
-export PROC="${TARGET_ARCH}"
-
-# We will probably have to edit the CFLAG in the Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
diff --git a/packages/asterisk/asterisk_1.2.9.1.bb b/packages/asterisk/asterisk_1.2.9.1.bb
deleted file mode 100644
index c1cedf67f6..0000000000
--- a/packages/asterisk/asterisk_1.2.9.1.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-DESCRIPTION="The Asterisk open source software PBX"
-HOMEPAGE="www.asterisk.org"
-LICENSE="GPL"
-DEPENDS="ncurses zlib openssl curl alsa-lib libogg libvorbis popt"
-PR = "r6"
-
-SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz \
- file://uclibc-compat-getloadavg.patch;patch=1 \
- file://uclibc-dsn.patch;patch=1 \
- file://asterisk.patch;patch=1"
-
-
-export CROSS_COMPILE="${CCACHE}${HOST_PREFIX}"
-export CROSS_COMPILE_BIN="${STAGING_BINDIR_CROSS}"
-export CROSS_COMPILE_TARGET="${STAGING_DIR}/${HOST_SYS}"
-
-export CROSS_ARCH="Linux"
-
-export CROSS_PROC="${TARGET_ARCH}"
-
-export MAKECMDGOALS="dont-optimize"
-
-# We will probably have to edit the CFLAG in the Makefile
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/asterisk
- install -m 0644 ${S}/include/asterisk/*.h ${STAGING_INCDIR}/asterisk/
-}
-
-
diff --git a/packages/asterisk/asterisk_1.4.7.bb b/packages/asterisk/asterisk_1.4.7.bb
new file mode 100644
index 0000000000..3973ff41dd
--- /dev/null
+++ b/packages/asterisk/asterisk_1.4.7.bb
@@ -0,0 +1,142 @@
+DESCRIPTION = "The Asterisk open source software PBX"
+HOMEPAGE = "http://www.asterisk.org"
+SECTION = "voip"
+LICENSE = "GPLv2"
+PRIORITY = "optional"
+DEPENDS = "ncurses readline zlib openssl curl popt gnutls sqlite libogg libvorbis"
+RRECOMMENDS_${PN} = "logrotate"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz\
+ file://sounds.xml.patch;patch=1\
+ file://Makefile.patch;patch=1\
+ file://logrotate \
+ file://volatiles \
+ file://init"
+
+
+INITSCRIPT_NAME = "asterisk"
+INITSCRIPT_PARAMS = "defaults 60"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "--with-ssl=${STAGING_DIR}/${HOST_SYS}\
+ --with-z=${STAGING_DIR}/${HOST_SYS}\
+ --with-curl=${STAGING_DIR}/${HOST_SYS}\
+ --with-termcap=${STAGING_DIR}/${HOST_SYS}\
+ --with-ogg=${STAGING_DIR}/${HOST_SYS}\
+ --with-vorbis=${STAGING_DIR}/${HOST_SYS}\
+ --with-sqlite=${STAGING_DIR}/${HOST_SYS}\
+ --with-popt=${STAGING_DIR}/${HOST_SYS}\
+ --with-gnutls=${STAGING_DIR}/${HOST_SYS}\
+ --without-curses\
+ --with-ncurses=${STAGING_DIR}/${HOST_SYS}\
+ --without-imap\
+ --without-netsnmp\
+ --without-odbc\
+ --without-osptk\
+ --without-nbs\
+ --without-pwlib\
+ --without-radius\
+ --without-tds\
+ --without-postgres\
+ --without-zaptel\
+ "
+
+#export NOISY_BUILD=yes
+
+export ASTCFLAGS = "-fsigned-char -I${STAGING_INCDIR} -DPATH_MAX=4096"
+export ASTLDFLAGS="${LDFLAGS}"
+
+do_configure_prepend () {
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/logrotate
+ sed -i 's:/etc/init.d:${sysconfdir}/init.d:' ${WORKDIR}/logrotate
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/volatiles
+}
+
+do_configure () {
+ # Looks like rebuilding configure doesn't work, so we are skipping
+ # that and are just using the shipped one
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_install_append() {
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/asterisk
+ install -c -D -m 644 ${WORKDIR}/logrotate ${D}${sysconfdir}/logrotate.d/asterisk
+ install -c -D -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/asterisk
+}
+
+pkg_postinst_prepend() {
+ grep -q asterisk ${sysconfdir}/group || addgroup --system asterisk
+ grep -q asterisk ${sysconfdir}/passwd || adduser --system --home ${localstatedir}/run/asterisk --no-create-home --disabled-password --ingroup asterisk -s ${base_bindir}/false asterisk
+ chown -R asterisk:asterisk ${libdir}/asterisk ${localstatedir}/lib/asterisk ${localstatedir}/spool/asterisk ${localstatedir}/log/asterisk ${localstatedir}/run/asterisk ${sysconfdir}/asterisk
+}
+
+FILES_${PN} += "${libdir}/asterisk/modules/*"
+
+CONFFILES_${PN} += "${sysconfdir}/asterisk/adsi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/adtranvofr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/agents.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/alarmreceiver.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/alsa.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/amd.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/asterisk.adsi"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/asterisk.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_custom.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_pgsql.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_tds.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/codecs.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/dnsmgr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/dundi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/enum.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extconfig.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extensions.ael"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extensions.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/features.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/festival.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/followme.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/func_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/gtalk.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/h323.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/http.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/iax.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/iaxprov.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/indications.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/jabber.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/logger.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/meetme.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/mgcp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/misdn.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/modem.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/modules.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/musiconhold.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/muted.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/osp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/oss.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/phone.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/privacy.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/queues.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/res_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/res_snmp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/rpt.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/rtp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/say.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sip.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sip_notify.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/skinny.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sla.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/smdi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/telcordia-1.adsi"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/udptl.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/users.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/voicemail.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/vpb.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/zapata.conf"
+
diff --git a/packages/asterisk/asterisk-1.0.9/.mtn2git_empty b/packages/asterisk/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.0.9/.mtn2git_empty
+++ b/packages/asterisk/files/.mtn2git_empty
diff --git a/packages/asterisk/files/init b/packages/asterisk/files/init
new file mode 100644
index 0000000000..1ece638c22
--- /dev/null
+++ b/packages/asterisk/files/init
@@ -0,0 +1,77 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/openpbx and type
+# > update-rc.d asterisk14 defaults 60
+#
+asterisk=/usr/sbin/asterisk
+pidfile=/var/run/asterisk/asterisk.pid
+asterisk_args="-npqT -U asterisk -G asterisk"
+
+test -x "$asterisk" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Asterisk"
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop gracefully"
+ sleep 4
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ force-stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop now"
+ sleep 2
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart gracefully"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ force-restart)
+ echo -n "Forcibly Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart now"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ reload)
+ echo -n "Reloading Asterisk Configuration"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "reload"
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ logger-reload)
+ if [ -f $pidfile ]; then
+ $asterisk -rx "logger reload"
+ fi
+ ;;
+ *)
+ echo "Usage: /etc/init.d/asterisk {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
+ exit 1
+esac
+
+exit 0
+
diff --git a/packages/atk/atk_1.19.3.bb b/packages/atk/atk_1.19.3.bb
new file mode 100644
index 0000000000..beef4ce97a
--- /dev/null
+++ b/packages/atk/atk_1.19.3.bb
@@ -0,0 +1,10 @@
+require atk.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/atk/1.19/atk-${PV}.tar.bz2"
+
+do_stage () {
+ oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
+ autotools_stage_includes
+}
diff --git a/packages/aumix/aumix_2.8.bb b/packages/aumix/aumix_2.8.bb
index 3edd51ddd9..50f2cec07a 100644
--- a/packages/aumix/aumix_2.8.bb
+++ b/packages/aumix/aumix_2.8.bb
@@ -1,7 +1,7 @@
-DEPENDS = "ncurses"
DESCRIPTION = "A mixer for the terminal or X11, with mouse support."
SECTION = "console/multimedia"
LICENSE = "GPLV2"
+DEPENDS = "ncurses"
SRC_URI = "http://jpj.net/~trevor/aumix/aumix-${PV}.tar.bz2 \
file://configure.patch;patch=1"
diff --git a/packages/autoconf/autoconf-2.61/config-site.patch b/packages/autoconf/autoconf-2.61/config-site.patch
new file mode 100644
index 0000000000..0fa49720c1
--- /dev/null
+++ b/packages/autoconf/autoconf-2.61/config-site.patch
@@ -0,0 +1,13 @@
+Index: autoconf-2.61/lib/autoconf/general.m4
+===================================================================
+--- autoconf-2.61.orig/lib/autoconf/general.m4 2007-07-10 15:09:01.000000000 +0100
++++ autoconf-2.61/lib/autoconf/general.m4 2007-07-10 15:09:17.000000000 +0100
+@@ -1767,7 +1767,7 @@
+ m4_define([AC_SITE_LOAD],
+ [# Prefer explicitly selected file to automatically selected ones.
+ if test -n "$CONFIG_SITE"; then
+- set x "$CONFIG_SITE"
++ set x $CONFIG_SITE
+ elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+ else
diff --git a/packages/autoconf/autoconf-native_2.61.bb b/packages/autoconf/autoconf-native_2.61.bb
index 3efa04bdd2..e992de97b7 100644
--- a/packages/autoconf/autoconf-native_2.61.bb
+++ b/packages/autoconf/autoconf-native_2.61.bb
@@ -9,9 +9,8 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/autoconf-${PV}"
inherit native
#
-# without it build break:
+# without it the build breaks:
# | make[1]: *** No rule to make target `../bin/autom4te', needed by `autoconf.in'. Stop.
#
PARALLEL_MAKE = ""
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/autoconf/autoconf_2.61.bb b/packages/autoconf/autoconf_2.61.bb
index 370315f041..525e8d0f92 100644
--- a/packages/autoconf/autoconf_2.61.bb
+++ b/packages/autoconf/autoconf_2.61.bb
@@ -1,5 +1,7 @@
require autoconf.inc
+PARALLEL_MAKE = ""
+
DEPENDS += "m4-native"
RDEPENDS_${PN} = "m4 gnu-config"
@@ -8,6 +10,6 @@ SRC_URI += "file://autoreconf-include.patch;patch=1 \
file://autoreconf-foreign.patch;patch=1 \
file://autoreconf-gnuconfigize.patch;patch=1 \
file://autoheader-nonfatal-warnings.patch;patch=1 \
+ file://config-site.patch;patch=1 \
${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}"
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/autofs/autofs-4.1.4/auto.net-sort-option-fix.patch b/packages/autofs/autofs-4.1.4/auto.net-sort-option-fix.patch
new file mode 100644
index 0000000000..680e6ce4fc
--- /dev/null
+++ b/packages/autofs/autofs-4.1.4/auto.net-sort-option-fix.patch
@@ -0,0 +1,11 @@
+--- autofs-4.1.4/samples/auto.net~ 2005-04-05 08:02:09.000000000 -0500
++++ autofs-4.1.4/samples/auto.net 2007-04-07 14:41:19.000000000 -0500
+@@ -37,7 +37,7 @@
+ # Newer distributions get this right
+ SHOWMOUNT="$SMNT --no-headers -e $key"
+
+-$SHOWMOUNT | LC_ALL=C sort +0 | \
++$SHOWMOUNT | LC_ALL=C sort | \
+ awk -v key="$key" -v opts="$opts" -- '
+ BEGIN { ORS=""; first=1 }
+ { if (first) { print opts; first=0 }; print " \\\n\t" $1, key ":" $1 }
diff --git a/packages/autofs/autofs-4.1.4/autofs-additional-distros.patch b/packages/autofs/autofs-4.1.4/autofs-additional-distros.patch
new file mode 100644
index 0000000000..2b1af584b3
--- /dev/null
+++ b/packages/autofs/autofs-4.1.4/autofs-additional-distros.patch
@@ -0,0 +1,12 @@
+--- autofs-4.1.4/samples/rc.autofs.in~ 2005-04-11 06:30:54.000000000 -0500
++++ autofs-4.1.4/samples/rc.autofs.in 2007-04-07 13:18:44.000000000 -0500
+@@ -43,6 +43,9 @@
+ system=debian
+ elif [ -f /etc/redhat-release ]; then
+ system=redhat
++elif [ -f /etc/issue ] && grep -q "^SlugOS" /etc/issue ; then
++ # SlugOS behaves like Debian, at least for autofs purposes.
++ system=debian
+ else
+ echo "$0: Unknown system, please port and contact autofs@linux.kernel.org" 1>&2
+ exit 1
diff --git a/packages/autofs/autofs_4.1.4.bb b/packages/autofs/autofs_4.1.4.bb
index 128c24e296..ab2bacedb7 100644
--- a/packages/autofs/autofs_4.1.4.bb
+++ b/packages/autofs/autofs_4.1.4.bb
@@ -2,13 +2,17 @@ DESCRIPTION = "Kernel based automounter for linux."
SECTION = "base"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/daemons/autofs/v4/autofs-${PV}.tar.bz2 \
${KERNELORG_MIRROR}/pub/linux/daemons/autofs/v4/autofs-4.1.4-misc-fixes.patch;patch=1 \
${KERNELORG_MIRROR}/pub/linux/daemons/autofs/v4/autofs-4.1.4-multi-parse-fix.patch;patch=1 \
${KERNELORG_MIRROR}/pub/linux/daemons/autofs/v4/autofs-4.1.4-non-replicated-ping.patch;patch=1 \
file://cross.patch;patch=1 \
file://Makefile.rules-cross.patch;patch=1 \
- file://install.patch;patch=1"
+ file://install.patch;patch=1 \
+ file://auto.net-sort-option-fix.patch;patch=1 \
+ file://autofs-additional-distros.patch;patch=1"
inherit autotools
diff --git a/packages/automake/automake-native_1.10.bb b/packages/automake/automake-native_1.10.bb
new file mode 100644
index 0000000000..92c861f49c
--- /dev/null
+++ b/packages/automake/automake-native_1.10.bb
@@ -0,0 +1,3 @@
+PV := "${PV}"
+
+require automake-native.inc
diff --git a/packages/automake/automake_1.10.bb b/packages/automake/automake_1.10.bb
new file mode 100644
index 0000000000..eef69f4e4a
--- /dev/null
+++ b/packages/automake/automake_1.10.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "A tool for automatically generating Makefiles."
+LICENSE = "GPL"
+HOMEPAGE = "http://www.gnu.org/software/automake/"
+SECTION = "devel"
+
+SRC_URI = "${GNU_MIRROR}/automake/automake-${PV}.tar.bz2 \
+ ${@['file://path_prog_fixes.patch;patch=1', ''][bb.data.inherits_class('native', d)]}"
+
+S = "${WORKDIR}/automake-${PV}"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/automake-${PV}"
+
+inherit autotools
+
+export AUTOMAKE = "${@bb.which('automake', bb.data.getVar('PATH', d, 1))}"
+FILES_${PN} += "${datadir}/automake* ${datadir}/aclocal*"
+
+require automake.inc
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}${datadir}
+ if [ ! -e ${D}${datadir}/aclocal ]; then
+ ln -sf aclocal-1.9 ${D}${datadir}/aclocal
+ fi
+ if [ ! -e ${D}${datadir}/automake ]; then
+ ln -sf automake-1.9 ${D}${datadir}/automake
+ fi
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/avahi/avahi.inc b/packages/avahi/avahi.inc
index adb1356906..2171cbd6d5 100644
--- a/packages/avahi/avahi.inc
+++ b/packages/avahi/avahi.inc
@@ -4,12 +4,17 @@ HOMEPAGE = "http://avahi.org"
SECTION = "network"
PRIORITY = "optional"
LICENSE = "GPL"
+PR="r4"
-DEPENDS = "expat libdaemon dbus"
-RRECOMMENDS = "libnss-mdns"
-RRECOMMENDS_avahi-daemon = "libnss-mdns"
+DEPENDS = "expat libdaemon dbus glib-2.0"
-SRC_URI = "http://avahi.org/download/avahi-${PV}.tar.gz"
+# uclibc has no nss
+RRECOMMENDS_append_linux = "libnss-mdns"
+RRECOMMENDS_avahi-daemon_append_linux = "libnss-mdns"
+RDEPENDS_avahi-daemon = "sysvinit-pidof"
+
+SRC_URI = "http://avahi.org/download/avahi-${PV}.tar.gz \
+ file://00avahi-autoipd file://99avahi-autoipd"
inherit autotools pkgconfig update-rc.d
@@ -35,7 +40,8 @@ FILES_avahi-dnsconfd = "${sbindir}/avahi-dnsconfd \
FILES_libavahi-glib = "${libdir}/libavahi-glib.so.*"
FILES_avahi-utils = "${bindir}/avahi-*"
FILES_avahi-autoipd = "${sbindir}/avahi-autoipd \
- ${sysconfdir}/avahi/avahi-autoipd.action"
+ ${sysconfdir}/avahi/avahi-autoipd.action \
+ ${sysconfdir}/udhcpc.d/*avahi-autoipd"
CONFFILES_avahi-daemon = "${sysconfdir}/avahi/avahi-daemon.conf"
@@ -52,8 +58,8 @@ pkg_postinst_avahi-daemon () {
if [ "x$D" != "x" ]; then
exit 1
fi
- grep avahi /etc/group || addgroup avahi
- grep avahi /etc/passwd || adduser --disabled-password --system --home /var/run/avahi-daemon --no-create-home avahi --ingroup avahi -g Avahi
+ grep "^avahi:" /etc/group > /dev/null || addgroup avahi
+ grep "^avahi:" /etc/passwd > /dev/null || adduser --disabled-password --system --home /var/run/avahi-daemon --no-create-home avahi --ingroup avahi -g Avahi
DBUSPID=`pidof dbus-daemon`
@@ -62,11 +68,32 @@ pkg_postinst_avahi-daemon () {
fi
}
+pkg_postinst_avahi-autoipd () {
+ # can't do this offline
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ grep "^avahi-autoipd:" /etc/group > /dev/null || addgroup avahi-autoipd
+ grep "^avahi-autoipd:" /etc/passwd > /dev/null || adduser --disabled-password --system --home /var/lib/avahi-autoipd --no-create-home avahi-autoipd --ingroup avahi-autoipd -g "Avahi autoip daemon"
+}
+
pkg_postrm_avahi-daemon () {
deluser avahi || true
delgroup avahi || true
}
+pkg_postrm_avahi-autoipd () {
+ deluser avahi-autoipd || true
+ delgroup avahi-autoipd || true
+}
+
+do_install() {
+ autotools_do_install
+ install -d ${D}${sysconfdir}/udhcpc.d
+ install ${WORKDIR}/00avahi-autoipd ${D}${sysconfdir}/udhcpc.d
+ install ${WORKDIR}/99avahi-autoipd ${D}${sysconfdir}/udhcpc.d
+}
+
do_stage() {
autotools_stage_all
}
diff --git a/packages/avahi/avahi_0.6.18.bb b/packages/avahi/avahi_0.6.18.bb
new file mode 100644
index 0000000000..9189734dfa
--- /dev/null
+++ b/packages/avahi/avahi_0.6.18.bb
@@ -0,0 +1 @@
+require avahi.inc
diff --git a/packages/avahi/avahi_0.6.19.bb b/packages/avahi/avahi_0.6.19.bb
new file mode 100644
index 0000000000..27dcdcffcb
--- /dev/null
+++ b/packages/avahi/avahi_0.6.19.bb
@@ -0,0 +1,3 @@
+require avahi.inc
+
+PR = "r1"
diff --git a/packages/avahi/avahi_0.6.20.bb b/packages/avahi/avahi_0.6.20.bb
new file mode 100644
index 0000000000..59de20446c
--- /dev/null
+++ b/packages/avahi/avahi_0.6.20.bb
@@ -0,0 +1,3 @@
+require avahi.inc
+
+PR = "r0"
diff --git a/packages/asterisk/asterisk-1.2.12.1/.mtn2git_empty b/packages/avahi/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.2.12.1/.mtn2git_empty
+++ b/packages/avahi/files/.mtn2git_empty
diff --git a/packages/avahi/files/00avahi-autoipd b/packages/avahi/files/00avahi-autoipd
new file mode 100755
index 0000000000..a0ab814603
--- /dev/null
+++ b/packages/avahi/files/00avahi-autoipd
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
+
+case "$1" in
+
+ deconfig|renew|bound)
+ /usr/sbin/avahi-autoipd -k $interface 2> /dev/null
+ ;;
+esac
diff --git a/packages/avahi/files/99avahi-autoipd b/packages/avahi/files/99avahi-autoipd
new file mode 100755
index 0000000000..234cdaa3eb
--- /dev/null
+++ b/packages/avahi/files/99avahi-autoipd
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
+
+case "$1" in
+
+ leasefail)
+ /usr/sbin/avahi-autoipd -wD $interface 2> /dev/null
+ ;;
+esac
diff --git a/packages/base-files/base-files/akita/fstab b/packages/base-files/base-files/akita/fstab
index 0b64a3bc80..ba53cd6fd4 100644
--- a/packages/base-files/base-files/akita/fstab
+++ b/packages/base-files/base-files/akita/fstab
@@ -3,7 +3,7 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
# SD/MMC in kernel 2.4
diff --git a/packages/base-files/base-files/amsdelta/fstab b/packages/base-files/base-files/amsdelta/fstab
index bf87f5f11b..0285a1f7e7 100644
--- a/packages/base-files/base-files/amsdelta/fstab
+++ b/packages/base-files/base-files/amsdelta/fstab
@@ -1,6 +1,6 @@
/dev/mtdblock4 / jffs2 defaults 1 1
proc /proc proc defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
# we use a non-volatile ramdisk, see /etc/init.d/ramdisk
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/armzone-qt2410/fstab b/packages/base-files/base-files/armzone-qt2410/fstab
index d339f800d3..88d057c40d 100644
--- a/packages/base-files/base-files/armzone-qt2410/fstab
+++ b/packages/base-files/base-files/armzone-qt2410/fstab
@@ -6,7 +6,7 @@ proc /proc proc defaults 0 0
# usb?
# Temporary
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
# SD/MMC
diff --git a/packages/base-files/base-files/c7x0/fstab b/packages/base-files/base-files/c7x0/fstab
index fb37e07aec..03945ca81b 100644
--- a/packages/base-files/base-files/c7x0/fstab
+++ b/packages/base-files/base-files/c7x0/fstab
@@ -3,7 +3,7 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
# SD/MMC in kernel 2.4
diff --git a/packages/base-files/base-files/collie/fstab b/packages/base-files/base-files/collie/fstab
index ce5bc3bac5..cbb38d1831 100644
--- a/packages/base-files/base-files/collie/fstab
+++ b/packages/base-files/base-files/collie/fstab
@@ -2,7 +2,7 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto,noatime,user,exec,suid,gid=100,umask=0002 0 0
/dev/mmcda1 /media/card auto defaults,sync,noauto,noatime,user,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
# we use a non-volatile ramdisk, see /etc/init.d/ramdisk
#tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/efika/fstab b/packages/base-files/base-files/efika/fstab
index ac92724dbc..8c79a60df9 100644
--- a/packages/base-files/base-files/efika/fstab
+++ b/packages/base-files/base-files/efika/fstab
@@ -2,4 +2,4 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbfs /proc/bus/usb usbfs auto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
diff --git a/packages/base-files/base-files/ep93xx/fstab b/packages/base-files/base-files/ep93xx/fstab
index ac92724dbc..8c79a60df9 100644
--- a/packages/base-files/base-files/ep93xx/fstab
+++ b/packages/base-files/base-files/ep93xx/fstab
@@ -2,4 +2,4 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbfs /proc/bus/usb usbfs auto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
diff --git a/packages/base-files/base-files/epia/fstab b/packages/base-files/base-files/epia/fstab
index 70f0b07353..83d673c8b5 100644
--- a/packages/base-files/base-files/epia/fstab
+++ b/packages/base-files/base-files/epia/fstab
@@ -1,4 +1,4 @@
/dev/ram0 / ext2 rw 1 1
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/fic-gta01/fstab b/packages/base-files/base-files/fic-gta01/fstab
index 3837178c9a..2f4a38e703 100644
--- a/packages/base-files/base-files/fic-gta01/fstab
+++ b/packages/base-files/base-files/fic-gta01/fstab
@@ -6,7 +6,8 @@ proc /proc proc defaults 0 0
# usb?
# Temporary
-tmpfs /var tmpfs defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
# microSD slot
diff --git a/packages/base-files/base-files/fstab b/packages/base-files/base-files/fstab
index 00d0072a41..0720daf432 100644
--- a/packages/base-files/base-files/fstab
+++ b/packages/base-files/base-files/fstab
@@ -4,7 +4,7 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbfs /proc/bus/usb usbfs defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
tmpfs /media/ram tmpfs defaults 0 0
# uncomment this if your device has a SD/MMC/Transflash slot
diff --git a/packages/base-files/base-files/h2200/fstab b/packages/base-files/base-files/h2200/fstab
index 397da6c123..6b008b3834 100644
--- a/packages/base-files/base-files/h2200/fstab
+++ b/packages/base-files/base-files/h2200/fstab
@@ -1,6 +1,6 @@
/dev/mtdblock3 / jffs2 defaults 1 1
proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto,noatime,exec,suid 0 0
/dev/mmcblk0p1 /media/card auto defaults,sync,noauto,noatime,exec,suid 0 0
diff --git a/packages/base-files/base-files/h3600/fstab b/packages/base-files/base-files/h3600/fstab
index 4228c15c00..d300b02566 100644
--- a/packages/base-files/base-files/h3600/fstab
+++ b/packages/base-files/base-files/h3600/fstab
@@ -2,5 +2,5 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
/dev/mmc/part1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/h3900/fstab b/packages/base-files/base-files/h3900/fstab
index 2a3929fd17..afa028bf90 100644
--- a/packages/base-files/base-files/h3900/fstab
+++ b/packages/base-files/base-files/h3900/fstab
@@ -4,5 +4,5 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
/dev/mmc/part1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/h5000/fstab b/packages/base-files/base-files/h5000/fstab
index 63711f989e..4ae3ad1344 100644
--- a/packages/base-files/base-files/h5000/fstab
+++ b/packages/base-files/base-files/h5000/fstab
@@ -4,5 +4,5 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
/dev/mmcblk0p1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/h6300/fstab b/packages/base-files/base-files/h6300/fstab
index 6884b4cc6d..f2eeb25b36 100644
--- a/packages/base-files/base-files/h6300/fstab
+++ b/packages/base-files/base-files/h6300/fstab
@@ -1,7 +1,7 @@
rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
#The devpts file system provides an interface to pseudo terminal (pty) devices.
devpts /dev/pts devpts mode=0620,gid=5 0 0
#Mount first partition from the mmc card.
diff --git a/packages/base-files/base-files/htcuniversal/fstab b/packages/base-files/base-files/htcuniversal/fstab
index 21b2bb1360..1ec129e366 100644
--- a/packages/base-files/base-files/htcuniversal/fstab
+++ b/packages/base-files/base-files/htcuniversal/fstab
@@ -2,7 +2,7 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbfs /proc/bus/usb usbfs defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
# uncomment this if your device has a SD/MMC/Transflash slot
diff --git a/packages/base-files/base-files/hx4700/fstab b/packages/base-files/base-files/hx4700/fstab
index 3dfde917e6..1c90d577ac 100644
--- a/packages/base-files/base-files/hx4700/fstab
+++ b/packages/base-files/base-files/hx4700/fstab
@@ -5,5 +5,5 @@ proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0
/dev/hda1 /media/cf auto defaults,noauto,noatime,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/jornada56x/fstab b/packages/base-files/base-files/jornada56x/fstab
index 07ccff0fe6..65db0c94a3 100644
--- a/packages/base-files/base-files/jornada56x/fstab
+++ b/packages/base-files/base-files/jornada56x/fstab
@@ -1,6 +1,6 @@
/dev/mtdblock1 / jffs2 rw,noatime 1 1
proc /proc proc defaults 0 0
/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /mnt/ram tmpfs defaults 0 0
devpts /dev/pts devpts defaults 0 0 \ No newline at end of file
diff --git a/packages/base-files/base-files/jornada6xx/fstab b/packages/base-files/base-files/jornada6xx/fstab
index 504a1a2f4e..22a3d30e71 100644
--- a/packages/base-files/base-files/jornada6xx/fstab
+++ b/packages/base-files/base-files/jornada6xx/fstab
@@ -2,6 +2,6 @@ proc /proc proc defaults 0 0
/dev/hda2 / ext2 defaults 0 0
/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
/dev/hda3 none swap sw 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatiles tmpfs defaults 0 0
tmpfs /mnt/ram tmpfs defaults 0 0
-devpts /dev/pts devpts defaults 0 0 \ No newline at end of file
+devpts /dev/pts devpts defaults 0 0
diff --git a/packages/base-files/base-files/jornada7xx/fstab b/packages/base-files/base-files/jornada7xx/fstab
index 504a1a2f4e..22a3d30e71 100644
--- a/packages/base-files/base-files/jornada7xx/fstab
+++ b/packages/base-files/base-files/jornada7xx/fstab
@@ -2,6 +2,6 @@ proc /proc proc defaults 0 0
/dev/hda2 / ext2 defaults 0 0
/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
/dev/hda3 none swap sw 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatiles tmpfs defaults 0 0
tmpfs /mnt/ram tmpfs defaults 0 0
-devpts /dev/pts devpts defaults 0 0 \ No newline at end of file
+devpts /dev/pts devpts defaults 0 0
diff --git a/packages/base-files/base-files/mtx-1/fstab b/packages/base-files/base-files/mtx-1/fstab
index ffab21cf68..06ba41dbb8 100644
--- a/packages/base-files/base-files/mtx-1/fstab
+++ b/packages/base-files/base-files/mtx-1/fstab
@@ -2,7 +2,7 @@
#
# <file system> <mount pt> <type> <options> <dump> <pass>
rootfs / auto defaults 1 1
-tmpfs /var tmpfs size=10m 0 0
+tmpfs /var/volatile tmpfs mode=0755,size=10m 0 0
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
diff --git a/packages/base-files/base-files/mtx-2/fstab b/packages/base-files/base-files/mtx-2/fstab
index f6f23ac2aa..a8f96f81b0 100644
--- a/packages/base-files/base-files/mtx-2/fstab
+++ b/packages/base-files/base-files/mtx-2/fstab
@@ -2,7 +2,7 @@
#
# <file system> <mount pt> <type> <options> <dump> <pass>
rootfs / auto defaults 1 1
-tmpfs /var tmpfs size=10m 0 0
+tmpfs /var/volatile tmpfs mode=0755,size=10m 0 0
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
diff --git a/packages/base-files/base-files/netbook-pro/fstab b/packages/base-files/base-files/netbook-pro/fstab
index ac92724dbc..8c79a60df9 100644
--- a/packages/base-files/base-files/netbook-pro/fstab
+++ b/packages/base-files/base-files/netbook-pro/fstab
@@ -2,4 +2,4 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbfs /proc/bus/usb usbfs auto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
diff --git a/packages/base-files/base-files/netvista/fstab b/packages/base-files/base-files/netvista/fstab
index e235acaa27..f26a57d2cd 100644
--- a/packages/base-files/base-files/netvista/fstab
+++ b/packages/base-files/base-files/netvista/fstab
@@ -1,5 +1,5 @@
/dev/hdc2 / ext2 rw,noatime 1 1
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
devfs /dev/devfs devfs defaults 0 0
diff --git a/packages/base-files/base-files/nokia770/fstab b/packages/base-files/base-files/nokia770/fstab
index 40823df5fa..c68c4d4b43 100644
--- a/packages/base-files/base-files/nokia770/fstab
+++ b/packages/base-files/base-files/nokia770/fstab
@@ -1,6 +1,6 @@
rootfs / rootfs defaults,errors=remount-ro,noatime 0 0
/dev/mmcblk0p1 /media/card auto defaults,noauto,noatime,exec,suid 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
proc /proc proc defaults 0 0
usbfs /proc/bus/usb usbfs defaults 0 0
diff --git a/packages/base-files/base-files/omap5912osk/fstab b/packages/base-files/base-files/omap5912osk/fstab
index 77331c0dac..988cf717b0 100644
--- a/packages/base-files/base-files/omap5912osk/fstab
+++ b/packages/base-files/base-files/omap5912osk/fstab
@@ -4,6 +4,6 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
sysfs /sysfs sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/openmn/fstab b/packages/base-files/base-files/openmn/fstab
index a2e78a2011..c3629a4887 100644
--- a/packages/base-files/base-files/openmn/fstab
+++ b/packages/base-files/base-files/openmn/fstab
@@ -2,5 +2,5 @@ devfs /dev devfs defaults 0 0
proc /proc proc defaults 0 0
none /sys sysfs defaults 0 0
rootfs / rootfs rw 1 1
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /tmp tmpfs defaults 0 0
diff --git a/packages/asterisk/asterisk-1.2.13/.mtn2git_empty b/packages/base-files/base-files/openmoko/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.2.13/.mtn2git_empty
+++ b/packages/base-files/base-files/openmoko/.mtn2git_empty
diff --git a/packages/base-files/base-files/openmoko/issue b/packages/base-files/base-files/openmoko/issue
new file mode 100644
index 0000000000..fb0d224f9f
--- /dev/null
+++ b/packages/base-files/base-files/openmoko/issue
@@ -0,0 +1,11 @@
+.-------.
+| | .-.
+| | |-----.-----.-----.| | .----..-----.-----.
+| | | __ | ---'| '--.| .-'| | |
+| | | | | |--- || --'| | | ' | | | |
+'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
+ -' |
+ '---'
+
+The OpenMoko Distribution -- powered by Angstrom \n \l
+
diff --git a/packages/base-files/base-files/openmoko/issue.net b/packages/base-files/base-files/openmoko/issue.net
new file mode 100644
index 0000000000..1f19e8da8f
--- /dev/null
+++ b/packages/base-files/base-files/openmoko/issue.net
@@ -0,0 +1,12 @@
+.-------.
+| | .-.
+| | |-----.-----.-----.| | .----..-----.-----.
+| | | __ | ---'| '--.| .-'| | |
+| | | | | |--- || --'| | | ' | | | |
+'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
+ -' |
+ '---'
+
+The OpenMoko Distribution -- powered by Angstrom %h
+
+
diff --git a/packages/base-files/base-files/openzaurus/issue b/packages/base-files/base-files/openzaurus/issue
deleted file mode 100644
index 1983c15318..0000000000
--- a/packages/base-files/base-files/openzaurus/issue
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenZaurus Unofficial Snapshot Version \n \l
-
diff --git a/packages/base-files/base-files/openzaurus/issue.net b/packages/base-files/base-files/openzaurus/issue.net
deleted file mode 100644
index 17bc7423f9..0000000000
--- a/packages/base-files/base-files/openzaurus/issue.net
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenZaurus Unofficial Snapshot %h
-
diff --git a/packages/asterisk/asterisk-1.2.14/.mtn2git_empty b/packages/base-files/base-files/oplinux-uclibc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.2.14/.mtn2git_empty
+++ b/packages/base-files/base-files/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/base-files/base-files/oplinux-uclibc/issue b/packages/base-files/base-files/oplinux-uclibc/issue
new file mode 100644
index 0000000000..9d0ef9c636
--- /dev/null
+++ b/packages/base-files/base-files/oplinux-uclibc/issue
@@ -0,0 +1,14 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+ .--.--.-----.--. .--.-----.-----.
+ | | | __| | | | -- | __|
+ | | | '-| | -- | |
+ '-----'-----'----'--'-----'-----'
+
+The OPLinux-uclibc distribution \l
+
diff --git a/packages/base-files/base-files/oplinux-uclibc/issue.net b/packages/base-files/base-files/oplinux-uclibc/issue.net
new file mode 100644
index 0000000000..b74869dba1
--- /dev/null
+++ b/packages/base-files/base-files/oplinux-uclibc/issue.net
@@ -0,0 +1,16 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+ .--.--.-----.--. .--.-----.-----.
+ | | | __| | | | -- | __|
+ | | | '-| | -- | |
+ '-----'-----'----'--'-----'-----'
+
+
+The OPLinux-uclibc distribution %h
+
+
diff --git a/packages/base-files/base-files/oplinux-uclibc/motd b/packages/base-files/base-files/oplinux-uclibc/motd
new file mode 100644
index 0000000000..5fad7d5707
--- /dev/null
+++ b/packages/base-files/base-files/oplinux-uclibc/motd
@@ -0,0 +1,12 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+ .--.--.-----.--. .--.-----.-----.
+ | | | __| | | | -- | __|
+ | | | '-| | -- | |
+ '-----'-----'----'--'-----'-----'
+
diff --git a/packages/base-files/base-files/oplinux-uclibc/profile b/packages/base-files/base-files/oplinux-uclibc/profile
new file mode 100644
index 0000000000..f6ae329b57
--- /dev/null
+++ b/packages/base-files/base-files/oplinux-uclibc/profile
@@ -0,0 +1,32 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/usr/bin/nano" # needed for packages like cron
+TERM="linux" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
diff --git a/packages/asterisk/asterisk-1.2.8/.mtn2git_empty b/packages/base-files/base-files/oplinux/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.2.8/.mtn2git_empty
+++ b/packages/base-files/base-files/oplinux/.mtn2git_empty
diff --git a/packages/base-files/base-files/oplinux/issue b/packages/base-files/base-files/oplinux/issue
new file mode 100644
index 0000000000..9b9c437510
--- /dev/null
+++ b/packages/base-files/base-files/oplinux/issue
@@ -0,0 +1,10 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+
+The OPLinux distribution \l
+
diff --git a/packages/base-files/base-files/oplinux/issue.net b/packages/base-files/base-files/oplinux/issue.net
new file mode 100644
index 0000000000..93a6f8a7d5
--- /dev/null
+++ b/packages/base-files/base-files/oplinux/issue.net
@@ -0,0 +1,11 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+
+The OPLinux distribution %h
+
+
diff --git a/packages/base-files/base-files/oplinux/motd b/packages/base-files/base-files/oplinux/motd
new file mode 100644
index 0000000000..10e458b9b5
--- /dev/null
+++ b/packages/base-files/base-files/oplinux/motd
@@ -0,0 +1,8 @@
+.-------.-------. .---. .---. .---. .---.
+| | __ | | | '---' \ \/ /
+| | | | | | .---.-----.--.--.\ /
+| | | .---' | '--| | | | |/ \
+| | | | | | | | | /\ \
+'-------'---' '------'---'--'--'-----'--' '---'
+=====================================================
+
diff --git a/packages/base-files/base-files/oplinux/profile b/packages/base-files/base-files/oplinux/profile
new file mode 100644
index 0000000000..f6ae329b57
--- /dev/null
+++ b/packages/base-files/base-files/oplinux/profile
@@ -0,0 +1,32 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/usr/bin/nano" # needed for packages like cron
+TERM="linux" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
diff --git a/packages/base-files/base-files/poodle/fstab b/packages/base-files/base-files/poodle/fstab
index 06b9672504..81de333ba7 100644
--- a/packages/base-files/base-files/poodle/fstab
+++ b/packages/base-files/base-files/poodle/fstab
@@ -9,5 +9,5 @@ proc /proc proc defaults 0 0
# SD/MMC in kernel 2.4
/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
diff --git a/packages/base-files/base-files/profile b/packages/base-files/base-files/profile
index a4c16944b9..3dc22f316a 100644
--- a/packages/base-files/base-files/profile
+++ b/packages/base-files/base-files/profile
@@ -2,8 +2,8 @@
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
PATH="/usr/local/bin:/usr/bin:/bin"
-EDITOR="/bin/vi" # needed for packages like cron
-TERM="vt100" # Basic terminal capab. For screen etc.
+EDITOR="/bin/vi" # needed for packages like cron
+test -z "$TERM" && TERM="vt100" # Basic terminal capab. For screen etc.
if [ ! -e /etc/localtime ]; then
TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
diff --git a/packages/base-files/base-files/simpad/fstab b/packages/base-files/base-files/simpad/fstab
index 51aaaf9256..c9f82ca2e8 100644
--- a/packages/base-files/base-files/simpad/fstab
+++ b/packages/base-files/base-files/simpad/fstab
@@ -2,7 +2,7 @@ rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
/dev/mtdblock/2 /home jffs2 defaults 1 1
/dev/hda1 /media/cf auto noauto,owner 0 0
diff --git a/packages/base-files/base-files/slugos/fstab b/packages/base-files/base-files/slugos/fstab
index 0ac6b1460c..3f35e7a3a7 100644
--- a/packages/base-files/base-files/slugos/fstab
+++ b/packages/base-files/base-files/slugos/fstab
@@ -1,5 +1,5 @@
rootfs / jffs2 defaults 1 1
proc /proc proc defaults 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
usbfs /proc/bus/usb usbfs defaults 0 0
diff --git a/packages/base-files/base-files/spitz/fstab b/packages/base-files/base-files/spitz/fstab
index a1fb3d4da1..8e667b63a5 100644
--- a/packages/base-files/base-files/spitz/fstab
+++ b/packages/base-files/base-files/spitz/fstab
@@ -4,7 +4,7 @@
rootfs / auto defaults 1 1
proc /proc proc defaults 0 0
# we can use a normal var filesystem with a microdrive
-# tmpfs /var tmpfs defaults 0 0
+# tmpfs /var/volatiles tmpfs defaults 0 0
tmpfs /media/ram tmpfs defaults 0 0
# Compact Flash memory cards
diff --git a/packages/base-files/base-files/tosa/fstab b/packages/base-files/base-files/tosa/fstab
index 4a784180ca..b439abeb2c 100644
--- a/packages/base-files/base-files/tosa/fstab
+++ b/packages/base-files/base-files/tosa/fstab
@@ -3,7 +3,7 @@
proc /proc proc defaults 0 0
/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
-tmpfs /var tmpfs defaults 0 0
+tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /media/ram tmpfs defaults 0 0
usbfs /proc/bus/usb usbfs auto 0 0
diff --git a/packages/base-files/base-files/wrt54/fstab b/packages/base-files/base-files/wrt54/fstab
index c1e52f8927..3dce9b3ed1 100644
--- a/packages/base-files/base-files/wrt54/fstab
+++ b/packages/base-files/base-files/wrt54/fstab
@@ -2,6 +2,6 @@
#
# <file system> <mount pt> <type> <options> <dump> <pass>
rootfs / auto defaults 1 1
-tmpfs /var tmpfs size=50% 0 0
+tmpfs /var/volatile tmpfs mode=0755,size=50% 0 0
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
diff --git a/packages/base-files/base-files/xxs1500/fstab b/packages/base-files/base-files/xxs1500/fstab
index 7007ab021b..d4e2eff592 100644
--- a/packages/base-files/base-files/xxs1500/fstab
+++ b/packages/base-files/base-files/xxs1500/fstab
@@ -2,7 +2,7 @@
#
# <file system> <mount pt> <type> <options> <dump> <pass>
rootfs / auto defaults 1 1
-tmpfs /var tmpfs size=10m 0 0
+tmpfs /var/volatile tmpfs mode=0755,size=10m 0 0
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
diff --git a/packages/base-files/base-files_3.0.14.bb b/packages/base-files/base-files_3.0.14.bb
index db06b92471..d8335f7abb 100644
--- a/packages/base-files/base-files_3.0.14.bb
+++ b/packages/base-files/base-files_3.0.14.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Miscellaneous files for the base system."
SECTION = "base"
PRIORITY = "required"
-PR = "r61"
+PR = "r69"
LICENSE = "GPL"
SRC_URI = " \
@@ -11,7 +11,7 @@ SRC_URI = " \
file://host.conf \
file://profile \
file://fstab \
- file://filesystems \
+ file://filesystems \
file://issue.net \
file://issue \
file://usbd \
@@ -25,7 +25,7 @@ SRC_URI = " \
S = "${WORKDIR}"
docdir_append = "/${P}"
-dirs1777 = "/tmp ${localstatedir}/lock ${localstatedir}/tmp"
+dirs1777 = "/tmp ${localstatedir}/volatile/lock ${localstatedir}/volatile/tmp"
dirs2775 = "/home ${prefix}/src ${localstatedir}/local"
dirs755 = "/bin /boot /dev ${sysconfdir} ${sysconfdir}/default \
${sysconfdir}/skel /lib /mnt /proc /home/root /sbin \
@@ -33,13 +33,16 @@ dirs755 = "/bin /boot /dev ${sysconfdir} ${sysconfdir}/default \
${libdir} ${sbindir} ${datadir} \
${datadir}/common-licenses ${datadir}/dict ${infodir} \
${mandir} ${datadir}/misc ${localstatedir} \
- ${localstatedir}/backups ${localstatedir}/cache \
- ${localstatedir}/lib /sys ${localstatedir}/lib/misc \
- ${localstatedir}/lock/subsys ${localstatedir}/log \
- ${localstatedir}/run ${localstatedir}/spool \
+ ${localstatedir}/backups ${localstatedir}/lib \
+ /sys ${localstatedir}/lib/misc ${localstatedir}/spool \
+ ${localstatedir}/volatile ${localstatedir}/volatile/cache \
+ ${localstatedir}/volatile/lock/subsys \
+ ${localstatedir}/volatile/log \
+ ${localstatedir}/volatile/run \
/mnt /media /media/card /media/cf /media/net /media/ram \
/media/union /media/realroot /media/hdd \
- /media/mmc1"
+ /media/mmc1"
+volatiles = "cache run log lock tmp"
conffiles = "${sysconfdir}/debian_version ${sysconfdir}/host.conf \
${sysconfdir}/inputrc ${sysconfdir}/issue /${sysconfdir}/issue.net \
${sysconfdir}/nsswitch.conf ${sysconfdir}/profile \
@@ -64,6 +67,9 @@ do_install () {
for d in ${dirs2775}; do
install -m 2755 -d ${D}$d
done
+ for d in ${volatiles}; do
+ ln -sf volatile/$d ${D}/${localstatedir}/$d
+ done
for d in card cf net ram; do
ln -sf /media/$d ${D}/mnt/$d
done
@@ -74,9 +80,11 @@ do_install () {
echo ${hostname} > ${D}${sysconfdir}/hostname
fi
+ install -m 644 ${WORKDIR}/issue* ${D}${sysconfdir}
+
if [ -n "${DISTRO_NAME}" ]; then
- echo -n "${DISTRO_NAME} " > ${D}${sysconfdir}/issue
- echo -n "${DISTRO_NAME} " > ${D}${sysconfdir}/issue.net
+ echo -n "${DISTRO_NAME} " >> ${D}${sysconfdir}/issue
+ echo -n "${DISTRO_NAME} " >> ${D}${sysconfdir}/issue.net
if [ -n "${DISTRO_VERSION}" ]; then
echo -n "${DISTRO_VERSION} " >> ${D}${sysconfdir}/issue
echo -n "${DISTRO_VERSION} " >> ${D}${sysconfdir}/issue.net
@@ -111,7 +119,6 @@ do_install () {
do_install_append_mnci () {
rmdir ${D}/tmp
- mkdir -p ${D}${localstatedir}/tmp
ln -s var/tmp ${D}/tmp
}
diff --git a/packages/asterisk/asterisk-1.2.9.1/.mtn2git_empty b/packages/billiardz/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/asterisk/asterisk-1.2.9.1/.mtn2git_empty
+++ b/packages/billiardz/files/.mtn2git_empty
diff --git a/packages/billiardz/files/gcc4.patch b/packages/billiardz/files/gcc4.patch
new file mode 100644
index 0000000000..30d7eda9e8
--- /dev/null
+++ b/packages/billiardz/files/gcc4.patch
@@ -0,0 +1,45 @@
+diff -Naur billiardz-0.1.4-orig/src/ButtonListener.h billiardz-0.1.4/src/ButtonListener.h
+--- billiardz-0.1.4-orig/src/ButtonListener.h 2002-11-05 07:01:51.000000000 +0100
++++ billiardz-0.1.4/src/ButtonListener.h 2007-03-26 21:10:11.000000000 +0200
+@@ -9,6 +9,7 @@
+ {
+ public:
+ virtual void buttonClicked(Button *button) = 0;
++ virtual ~ButtonListener() {}
+ };
+
+ #endif /* _BUTTONLISTENER_H_ */
+diff -Naur billiardz-0.1.4-orig/src/CueStickListener.h billiardz-0.1.4/src/CueStickListener.h
+--- billiardz-0.1.4-orig/src/CueStickListener.h 2002-09-13 02:02:23.000000000 +0200
++++ billiardz-0.1.4/src/CueStickListener.h 2007-03-26 21:11:14.000000000 +0200
+@@ -12,6 +12,7 @@
+ virtual bool cueBallHit(CueStick *stick, Ball *ball) = 0;
+ virtual void stickMoved(CueStick *stick, Fixed oldAngle,
+ Fixed newAngle) = 0;
++ virtual ~CueStickListener() {}
+ };
+
+ #endif /* _CUESTICKLISTENER_H_ */
+diff -Naur billiardz-0.1.4-orig/src/PoolGame.h billiardz-0.1.4/src/PoolGame.h
+--- billiardz-0.1.4-orig/src/PoolGame.h 2002-11-05 07:01:36.000000000 +0100
++++ billiardz-0.1.4/src/PoolGame.h 2007-03-26 21:40:58.000000000 +0200
+@@ -6,6 +6,7 @@
+
+ class Player;
+ class PoolTable;
++class PoolRoom;
+ class Physics;
+ class Rules;
+ class Sprite;
+diff -Naur billiardz-0.1.4-orig/src/main.cpp billiardz-0.1.4/src/main.cpp
+--- billiardz-0.1.4-orig/src/main.cpp 2003-11-03 07:56:29.000000000 +0100
++++ billiardz-0.1.4/src/main.cpp 2007-03-26 23:27:11.000000000 +0200
+@@ -51,7 +51,7 @@
+
+ return interval;
+ }
+-
++#define SDL_main main
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
diff --git a/packages/base-files/base-files/openzaurus/.mtn2git_empty b/packages/binutils/binutils-2.17.50.0.12/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/base-files/base-files/openzaurus/.mtn2git_empty
+++ b/packages/binutils/binutils-2.17.50.0.12/.mtn2git_empty
diff --git a/packages/binutils/binutils-2.17.50.0.12/110-arm-eabi-conf.patch b/packages/binutils/binutils-2.17.50.0.12/110-arm-eabi-conf.patch
new file mode 100644
index 0000000000..be85ceb109
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/110-arm-eabi-conf.patch
@@ -0,0 +1,24 @@
+diff -urN binutils-2.16.91.0.7.orig/configure binutils-2.16.91.0.7/configure
+--- binutils-2.16.91.0.7.orig/configure 2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure 2006-05-31 14:55:53.000000000 +0300
+@@ -1299,7 +1299,7 @@
+ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ ;;
+diff -urN binutils-2.16.91.0.7.orig/configure.in binutils-2.16.91.0.7/configure.in
+--- binutils-2.16.91.0.7.orig/configure.in 2006-05-31 14:54:24.000000000 +0300
++++ binutils-2.16.91.0.7/configure.in 2006-05-31 14:55:53.000000000 +0300
+@@ -497,7 +497,7 @@
+ arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ ;;
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ noconfigdirs="$noconfigdirs target-libffi target-qthreads"
+ noconfigdirs="$noconfigdirs target-libjava target-libobjc"
+ ;;
diff --git a/packages/binutils/binutils-2.17.50.0.12/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/packages/binutils/binutils-2.17.50.0.12/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
new file mode 100644
index 0000000000..4461bedd4e
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
@@ -0,0 +1,31 @@
+# strip (and objcopy) fail to set the error code if there is no
+# output file name and the rename of the stripped (or copied) file
+# fails, yet the command fails to do anything. This fixes both
+# objcopy and strip.
+#
+# modification by bero: Ported to 2.16.91.0.6
+#
+#Signed-off-by: John Bowler <jbowler@acm.org>
+#Signed-off-by: Bernhard Rosenkraenzer <bero@arklinux.org>
+--- binutils-2.16.91.0.6/binutils/objcopy.c.ark 2006-03-11 15:59:07.000000000 +0100
++++ binutils-2.16.91.0.6/binutils/objcopy.c 2006-03-11 15:59:45.000000000 +0100
+@@ -2593,7 +2593,8 @@
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+ if (output_file == NULL)
+- smart_rename (tmpname, argv[i], preserve_dates);
++ if(smart_rename (tmpname, argv[i], preserve_dates))
++ hold_status = 1;
+ status = hold_status;
+ }
+ else
+@@ -3184,7 +3185,8 @@
+ {
+ if (preserve_dates)
+ set_times (tmpname, &statbuf);
+- smart_rename (tmpname, input_filename, preserve_dates);
++ if (smart_rename (tmpname, input_filename, preserve_dates))
++ status = 1;
+ }
+ else
+ unlink (tmpname);
diff --git a/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-100-uclibc-conf.patch b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-100-uclibc-conf.patch
new file mode 100644
index 0000000000..25222e5df2
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-100-uclibc-conf.patch
@@ -0,0 +1,139 @@
+--- binutils-2.16.91.0.7/bfd/configure
++++ binutils-2.16.91.0.7/bfd/configure
+@@ -3576,7 +3576,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/binutils/configure
++++ binutils-2.16.91.0.7/binutils/configure
+@@ -3411,7 +3411,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/configure
++++ binutils-2.16.91.0.7/configure
+@@ -1270,7 +1270,7 @@
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -1578,7 +1578,7 @@
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[3456789]86-*-vsta) ;; # don't add gprof back in
+ i[3456789]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.16.91.0.7/configure.in
++++ binutils-2.16.91.0.7/configure.in
+@@ -468,7 +468,7 @@
+ am33_2.0-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+- sh-*-linux*)
++ sh*-*-linux*)
+ noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss"
+ ;;
+ sh*-*-pe|mips*-*-pe|*arm-wince-pe)
+@@ -776,7 +776,7 @@
+ romp-*-*)
+ noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${host}" in
+ i[[3456789]]86-*-vsta) ;; # don't add gprof back in
+ i[[3456789]]86-*-go32*) ;; # don't add gprof back in
+--- binutils-2.16.91.0.7/gas/configure
++++ binutils-2.16.91.0.7/gas/configure
+@@ -3411,7 +3411,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/gprof/configure
++++ binutils-2.16.91.0.7/gprof/configure
+@@ -3419,6 +3419,11 @@
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+--- binutils-2.16.91.0.7/ld/configure
++++ binutils-2.16.91.0.7/ld/configure
+@@ -3413,7 +3413,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/libtool.m4
++++ binutils-2.16.91.0.7/libtool.m4
+@@ -739,7 +739,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- binutils-2.16.91.0.7/ltconfig
++++ binutils-2.16.91.0.7/ltconfig
+@@ -602,6 +602,7 @@
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
++linux-uclibc*) ;;
+ linux-gnu*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+@@ -1247,7 +1248,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+--- binutils-2.16.91.0.7/opcodes/configure
++++ binutils-2.16.91.0.7/opcodes/configure
+@@ -3579,7 +3579,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux-gnu*|linux-uclibc*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
diff --git a/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-001_ld_makefile_patch.patch b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000000..04a7e61e25
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-001_ld_makefile_patch.patch
@@ -0,0 +1,50 @@
+#!/bin/sh -e
+## 001_ld_makefile_patch.dpatch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Description: correct where ld scripts are installed
+## DP: Author: Chris Chimelis <chris@debian.org>
+## DP: Upstream status: N/A
+## DP: Date: ??
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+--- binutils-2.16.91.0.1/ld/Makefile.am
++++ binutils-2.16.91.0.1/ld/Makefile.am
+@@ -20,7 +20,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- binutils-2.16.91.0.1/ld/Makefile.in
++++ binutils-2.16.91.0.1/ld/Makefile.in
+@@ -268,7 +268,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-006_better_file_error.patch b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-006_better_file_error.patch
new file mode 100644
index 0000000000..f337611edf
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-006_better_file_error.patch
@@ -0,0 +1,43 @@
+#!/bin/sh -e
+## 006_better_file_error.dpatch by David Kimdon <dwhedon@gordian.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Specify which filename is causing an error if the filename is a
+## DP: directory. (#45832)
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c binutils-2.14.90.0.6/bfd/opncls.c
+--- /home/james/debian/packages/binutils/binutils-2.14.90.0.6/bfd/opncls.c 2003-07-23 16:08:09.000000000 +0100
++++ binutils-2.14.90.0.6/bfd/opncls.c 2003-09-10 22:35:00.000000000 +0100
+@@ -150,6 +150,13 @@
+ {
+ bfd *nbfd;
+ const bfd_target *target_vec;
++ struct stat s;
++
++ if (stat (filename, &s) == 0)
++ if (S_ISDIR(s.st_mode)) {
++ bfd_set_error (bfd_error_file_not_recognized);
++ return NULL;
++ }
+
+ nbfd = _bfd_new_bfd ();
+ if (nbfd == NULL)
diff --git a/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-012_check_ldrunpath_length.patch b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000000..498651a90c
--- /dev/null
+++ b/packages/binutils/binutils-2.17.50.0.12/binutils-uclibc-300-012_check_ldrunpath_length.patch
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 012_check_ldrunpath_length.dpatch by Chris Chimelis <chris@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+## DP: cases where -rpath isn't specified. (#151024)
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em binutils-2.15/ld/emultempl/elf32.em
+--- /home/james/debian/packages/binutils/new/binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:58.000000000 +0100
++++ binutils-2.15/ld/emultempl/elf32.em 2004-05-21 23:12:59.000000000 +0100
+@@ -692,6 +692,8 @@
+ && command_line.rpath == NULL)
+ {
+ lib_path = (const char *) getenv ("LD_RUN_PATH");
++ if ((lib_path) && (strlen (lib_path) == 0))
++ lib_path = NULL;
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ force))
+ break;
+@@ -871,6 +873,8 @@
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
++ if ((rpath) && (strlen (rpath) == 0))
++ rpath = NULL;
+ if (! (bfd_elf_size_dynamic_sections
+ (output_bfd, command_line.soname, rpath,
+ command_line.filter_shlib,
diff --git a/packages/binutils/binutils-2.17/avr32-config.sub.patch b/packages/binutils/binutils-2.17/avr32-config.sub.patch
new file mode 100644
index 0000000000..f4166e9423
--- /dev/null
+++ b/packages/binutils/binutils-2.17/avr32-config.sub.patch
@@ -0,0 +1,11 @@
+--- /tmp/config.sub 2007-06-01 15:29:41.000000000 +0200
++++ binutils-2.17/config.sub 2007-06-01 15:37:19.885251000 +0200
+@@ -305,7 +305,7 @@
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+- | avr-* \
++ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
diff --git a/packages/binutils/binutils-cross-sdk_2.17.50.0.5.bb b/packages/binutils/binutils-cross-sdk_2.17.50.0.5.bb
new file mode 100644
index 0000000000..7d3bb6c09c
--- /dev/null
+++ b/packages/binutils/binutils-cross-sdk_2.17.50.0.5.bb
@@ -0,0 +1,20 @@
+SECTION = "devel"
+require binutils_${PV}.bb
+inherit sdk
+DEPENDS += "flex-native bison-native"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+EXTRA_OECONF = "--with-sysroot=${CROSS_DIR}/${TARGET_SYS} \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_stage() {
+ :
+}
+
+do_install () {
+ autotools_do_install
+
+ # Install the libiberty header
+ install -d ${D}${includedir}
+ install -m 644 ${S}/include/ansidecl.h ${D}${includedir}
+ install -m 644 ${S}/include/libiberty.h ${D}${includedir}
+}
diff --git a/packages/binutils/binutils-cross_2.17.50.0.12.bb b/packages/binutils/binutils-cross_2.17.50.0.12.bb
new file mode 100644
index 0000000000..1f2f43ecf8
--- /dev/null
+++ b/packages/binutils/binutils-cross_2.17.50.0.12.bb
@@ -0,0 +1,32 @@
+SECTION = "devel"
+require binutils_${PV}.bb
+inherit cross
+DEPENDS += "flex-native bison-native"
+PROVIDES = "virtual/${TARGET_PREFIX}binutils"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
+PACKAGES = ""
+EXTRA_OECONF = "--with-sysroot=${CROSS_DIR}/${TARGET_SYS} \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_stage () {
+ oe_runmake install
+
+ # We don't really need these, so we'll remove them...
+ rm -rf ${CROSS_DIR}/lib/ldscripts
+ rm -rf ${CROSS_DIR}/share/info
+ rm -rf ${CROSS_DIR}/share/locale
+ rm -rf ${CROSS_DIR}/share/man
+ rmdir ${CROSS_DIR}/share || :
+ rmdir ${CROSS_DIR}/${libdir}/gcc-lib || :
+ rmdir ${CROSS_DIR}/${libdir} || :
+ rmdir ${CROSS_DIR}/${prefix} || :
+
+ # We want to move this into the target specific location
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/lib
+ mv -f ${CROSS_DIR}/lib/libiberty.a ${CROSS_DIR}/${TARGET_SYS}/lib
+ rmdir ${CROSS_DIR}/lib || :
+}
+
+do_install () {
+ :
+}
diff --git a/packages/binutils/binutils_2.17.50.0.12.bb b/packages/binutils/binutils_2.17.50.0.12.bb
new file mode 100644
index 0000000000..f832d97cd1
--- /dev/null
+++ b/packages/binutils/binutils_2.17.50.0.12.bb
@@ -0,0 +1,12 @@
+require binutils.inc
+
+
+SRC_URI = \
+ "${KERNELORG_MIRROR}/pub/linux/devel/binutils/binutils-${PV}.tar.bz2 \
+ file://binutils-2.16.91.0.6-objcopy-rename-errorcode.patch;patch=1 \
+ file://binutils-uclibc-100-uclibc-conf.patch;patch=1 \
+ file://110-arm-eabi-conf.patch;patch=1 \
+ file://binutils-uclibc-300-001_ld_makefile_patch.patch;patch=1 \
+ file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
+ file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
+ "
diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb
index 9610634959..8d38f3a459 100644
--- a/packages/binutils/binutils_2.17.bb
+++ b/packages/binutils/binutils_2.17.bb
@@ -1,6 +1,6 @@
require binutils.inc
-PR = "r0"
+PR = "r1"
SRC_URI = \
"http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \
@@ -18,6 +18,9 @@ SRC_URI += "\
file://300-012_check_ldrunpath_length.patch;patch=1 \
file://300-001_ld_makefile_patch.patch;patch=1 \
file://400-mips-ELF_MAXPAGESIZE-4K.patch;patch=1 \
+ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \
+ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \
+ http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \
"
# Zecke's OSX fixes
diff --git a/packages/bitbake/bitbake.inc b/packages/bitbake/bitbake.inc
index 2c5f523d4f..4669006979 100644
--- a/packages/bitbake/bitbake.inc
+++ b/packages/bitbake/bitbake.inc
@@ -1,10 +1,10 @@
DESCRIPTION = "BitBake is a simple tool for the execution of tasks. It is \
derived from Portage, which is the package management system used by the \
Gentoo Linux distribution. It is most commonly used to build packages, as it \
-can easily use its rudamentary inheritence to abstract common operations, such \
+can easily use its rudimentary inheritence to abstract common operations, such \
as fetching sources, unpacking them, patching them, compiling them, and so on. \
It is the basis of the OpenEmbedded project, which is being used for \
-OpenZaurus, Familiar, and a number of other Linux distributions."
+Angstrom and a number of other embedded Linux distributions."
HOMEPAGE = "http://developer.berlios.de/projects/bitbake/"
LICENSE = "GPL MIT"
SECTION = "devel"
diff --git a/packages/bitbake/bitbake_1.8.6.bb b/packages/bitbake/bitbake_1.8.6.bb
new file mode 100644
index 0000000000..a2cd3899a1
--- /dev/null
+++ b/packages/bitbake/bitbake_1.8.6.bb
@@ -0,0 +1,7 @@
+require bitbake.inc
+
+PR = "r0"
+
+SRC_URI = "http://download.berlios.de/bitbake/bitbake-${PV}.tar.gz"
+
+S = "${WORKDIR}/bitbake-${PV}"
diff --git a/packages/bitbake/bitbake_svn.bb b/packages/bitbake/bitbake_svn.bb
index d16471d405..247140b6c6 100644
--- a/packages/bitbake/bitbake_svn.bb
+++ b/packages/bitbake/bitbake_svn.bb
@@ -1,7 +1,7 @@
require bitbake.inc
-PV = "1.7.2+svn${SRCDATE}"
-PR = "r1"
+PV = "1.9.0+svn${SRCDATE}"
+PR = "r0"
# Don't use the tip of svn by default
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/bluez/files/openzaurus/.mtn2git_empty b/packages/blassic/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/bluez/files/openzaurus/.mtn2git_empty
+++ b/packages/blassic/.mtn2git_empty
diff --git a/packages/blassic/blassic_0.10.1.bb b/packages/blassic/blassic_0.10.1.bb
new file mode 100644
index 0000000000..52b5ae4644
--- /dev/null
+++ b/packages/blassic/blassic_0.10.1.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "classic basic interpreter"
+LICENSE = "GPLv2"
+DEPENDS = "ncurses"
+
+SRC_URI = "http://www.blassic.org/bin/blassic-${PV}.tgz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-graphics=yes"
+
+
diff --git a/packages/blueprobe/blueprobe-0.18/uclibc-fix.patch b/packages/blueprobe/blueprobe-0.18/uclibc-fix.patch
new file mode 100644
index 0000000000..34a1711e60
--- /dev/null
+++ b/packages/blueprobe/blueprobe-0.18/uclibc-fix.patch
@@ -0,0 +1,30 @@
+Uclibc doesn't define or support speeds above 115200. So check the existence
+of the defines before allowing them to actually be used.
+
+Index: blueprobe-0.18/blueprobe.c
+===================================================================
+--- blueprobe-0.18.orig/blueprobe.c 2006-10-12 20:33:01.000000000 +1000
++++ blueprobe-0.18/blueprobe.c 2007-05-17 12:29:20.000000000 +1000
+@@ -25,14 +25,22 @@
+ return B57600;
+ case 115200:
+ return B115200;
++#ifdef B230400
+ case 230400:
+ return B230400;
++#endif
++#ifdef B460800
+ case 460800:
+ return B460800;
++#endif
++#ifdef B921600
+ case 921600:
+ return B921600;
++#endif
++#ifdef B1000000
+ case 1000000:
+ return B1000000;
++#endif
+ default:
+ return B57600;
+ }
diff --git a/packages/blueprobe/blueprobe_0.18.bb b/packages/blueprobe/blueprobe_0.18.bb
index ca455401e0..5db1bc4337 100644
--- a/packages/blueprobe/blueprobe_0.18.bb
+++ b/packages/blueprobe/blueprobe_0.18.bb
@@ -1,5 +1,6 @@
require blueprobe.inc
-PR = "r1"
+PR = "r2"
-SRC_URI += "file://h4000.patch;patch=1"
+SRC_URI += "file://h4000.patch;patch=1 \
+ file://uclibc-fix.patch;patch=1"
diff --git a/packages/busybox/busybox-1.01/openzaurus/.mtn2git_empty b/packages/bluez/bcm2035-tool/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.01/openzaurus/.mtn2git_empty
+++ b/packages/bluez/bcm2035-tool/.mtn2git_empty
diff --git a/packages/bluez/bcm2035-tool/addr-as-arg.patch b/packages/bluez/bcm2035-tool/addr-as-arg.patch
new file mode 100644
index 0000000000..28618c5bbb
--- /dev/null
+++ b/packages/bluez/bcm2035-tool/addr-as-arg.patch
@@ -0,0 +1,104 @@
+--- bcm2035-tool/bcm2035-tool.c 2007/05/07 12:48:06 2000
++++ bcm2035-tool/bcm2035-tool.c 2007/05/07 12:55:47 2001
+@@ -1,6 +1,8 @@
+-/* bcm2035-tool - bcm2035 tool for Motorola EZX phones
++/* bcm2035-tool
+ *
+ * (C) 2007 by Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ * MAC address as argument extension by: Jan Herman <2hp@seznam.cz>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+@@ -17,10 +19,10 @@
+ *
+ */
+
++/* Default MAC address */
++#define BDADDR "\x06\x05\x04\x03\x02\x01"
+
+ //#define PATCH_FIRMWARE
+-#define BDADDR "\xab\x89\x67\x45\x23\x01"
+-
+
+ #include <stdio.h>
+ #include <string.h>
+@@ -33,6 +35,7 @@
+ #include <sys/ioctl.h>
+ #include <termios.h>
+ #include "bcm2035-tool.h"
++//#include "bluetooth.h"
+
+ #ifdef PATCH_FIRMWARE
+ #include "motorola_patches.h"
+@@ -180,18 +183,51 @@
+
+ }
+
++void mac2hex(const char *mac, u_char *dst)
++{
++
++ int i;
++ long l;
++ char *pp;
++
++ while (isspace(*mac))
++ mac++;
++
++ /* expect 6 hex octets separated by ':' or space/NUL if last octet */
++ for (i = 0; i < 6; i++) {
++ l = strtol(mac, &pp, 16);
++ if (pp == mac || l > 0xFF || l < 0)
++ return;
++ if (!(*pp == ':' || (i == 5 && (isspace(*pp) || *pp == '\0'))))
++ return;
++ /* 5-i swaps hex chars */
++ dst[5-i] = (u_char) l;
++ mac = pp + 1;
++ }
++ }
++
++char bdaddr[6];
++
+ int main(int argc, char **argv)
+ {
+ int fd, i;
+ struct termios term;
+ char buf[1024];
+- char bdaddr[6];
+-
+- if (argc < 2) {
+- printf("use: %s <device>\n", argv[0]);
++
++ if (argc < 3) {
++ printf("BCM2035 Tool:\n");
++ printf("Usage: %s <device> <bdaddr>\n", argv[0]);
+ exit(1);
+ }
+
++ if (strlen(argv[2]) < 17) {
++ printf("invalid argument %s!\n", argv[2]);
++ exit(1);
++ }
++
++ /* Converts MAC address to swapped HEX */
++ mac2hex(argv[2], bdaddr);
++
+ fd = open (argv[1], O_RDWR | O_NOCTTY );
+
+ if(fd < 0) exit(-1);
+@@ -212,7 +248,7 @@
+ #endif
+ set_baud(fd, 460800);
+
+- send_cmd(fd, CMD_SET_BDADDR, BDADDR, 6);
++ send_cmd(fd, CMD_SET_BDADDR, bdaddr, 6);
+
+ i = N_HCI;
+ if (ioctl(fd, TIOCSETD, &i) < 0) {
+@@ -228,5 +264,3 @@
+ while (1) sleep(999999999);
+ return 0;
+ }
+-
+-
diff --git a/packages/bluez/bcm2035-tool_0.0.bb b/packages/bluez/bcm2035-tool_0.0.bb
new file mode 100644
index 0000000000..636841de6f
--- /dev/null
+++ b/packages/bluez/bcm2035-tool_0.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Bluetooth firmware poker for bccm2035 chips (motorola phones and palms)"
+LICENSE = "GPLv2"
+
+PR = "r1"
+
+SRC_URI = "http://people.openezx.org/wyrm/bcm2035-tool.tgz \
+ file://addr-as-arg.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/${PN}"
+
+do_compile() {
+ ${CC} bcm2035-tool.c -o bcm2035-tool
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 755 bcm2035-tool ${D}${sbindir}
+}
diff --git a/packages/bluez/bluez-dtl1-workaround_1.0.bb b/packages/bluez/bluez-dtl1-workaround_1.0.bb
new file mode 100644
index 0000000000..413d220508
--- /dev/null
+++ b/packages/bluez/bluez-dtl1-workaround_1.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "A nasty hack for for dtl1-cs driver to workaround suspend/resume."
+SECTION = "console"
+PRIORITY = "optional"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "file://02dtl1_cs.sh"
+
+do_install() {
+ install -d ${D}${sysconfdir}/apm/event.d/
+ install -m 0755 ${WORKDIR}/02dtl1_cs.sh ${D}${sysconfdir}/apm/event.d/
+}
+
+#Package 02dtl1_cs.sh, which is a nasty hack to get dtl1c_cs cards working with suspend/resume
+FILES_${PN} += "${sysconfdir}/apm/"
+
+PACKAGE_ARCH = "all"
diff --git a/packages/bluez/bluez-gnome_0.10.bb b/packages/bluez/bluez-gnome_0.10.bb
new file mode 100644
index 0000000000..d50e8e5fde
--- /dev/null
+++ b/packages/bluez/bluez-gnome_0.10.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "BLuetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+
+SRC_URI = "http://bluez.sourceforge.net/download/${P}.tar.gz"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-gnome_0.6.bb b/packages/bluez/bluez-gnome_0.6.bb
index 481a383019..d50e8e5fde 100644
--- a/packages/bluez/bluez-gnome_0.6.bb
+++ b/packages/bluez/bluez-gnome_0.6.bb
@@ -1,10 +1,11 @@
DESCRIPTION = "BLuetooth configuration applet"
LICENSE = "GPL+LGPL"
-DEPENDS = "bluez-libs dbus-glib gconf libnotify gtk+ openobex"
+DEPENDS = "dbus-glib gconf libnotify gtk+"
SRC_URI = "http://bluez.sourceforge.net/download/${P}.tar.gz"
-inherit autotools pkgconfig
+inherit autotools pkgconfig gconf
+FILES_${PN} += "${datadir}/gconf"
diff --git a/packages/bluez/bluez-gnome_0.7.bb b/packages/bluez/bluez-gnome_0.7.bb
new file mode 100644
index 0000000000..d50e8e5fde
--- /dev/null
+++ b/packages/bluez/bluez-gnome_0.7.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "BLuetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+
+SRC_URI = "http://bluez.sourceforge.net/download/${P}.tar.gz"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-gnome_0.9.bb b/packages/bluez/bluez-gnome_0.9.bb
new file mode 100644
index 0000000000..d50e8e5fde
--- /dev/null
+++ b/packages/bluez/bluez-gnome_0.9.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "BLuetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+
+SRC_URI = "http://bluez.sourceforge.net/download/${P}.tar.gz"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-gnome_cvs.bb b/packages/bluez/bluez-gnome_cvs.bb
new file mode 100644
index 0000000000..ea5bbe6c2f
--- /dev/null
+++ b/packages/bluez/bluez-gnome_cvs.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "BLuetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+DEFAULT_PREFERENCE = "-1"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+
+SRC_URI = "cvs://anonymous@cvs.bluez.org/cvsroot/bluez;module=gnome \
+ "
+
+PV = "0.10+cvs${SRCDATE}"
+S = "${WORKDIR}/gnome"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-gnome_git.bb b/packages/bluez/bluez-gnome_git.bb
new file mode 100644
index 0000000000..e16fee109d
--- /dev/null
+++ b/packages/bluez/bluez-gnome_git.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "BLuetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+DEFAULT_PREFERENCE = "-2"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+
+SRC_URI = "git://people.freedesktop.org/~hadess/bluez-gnome;protocol=git \
+ file://pkgconfig-add-gthread.patch;patch=1 "
+
+PV = "0.10+git${SRCDATE}"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-hcidump_1.37.bb b/packages/bluez/bluez-hcidump_1.37.bb
new file mode 100644
index 0000000000..877c8db33c
--- /dev/null
+++ b/packages/bluez/bluez-hcidump_1.37.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Linux Bluetooth Stack HCI Debugger Tool."
+SECTION = "console"
+PRIORITY = "optional"
+DEPENDS = "bluez-libs"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-hcidump-${PV}.tar.gz"
+S = "${WORKDIR}/bluez-hcidump-${PV}"
+
+EXTRA_OECONF = "--with-bluez-libs=${STAGING_LIBDIR} --with-bluez-includes=${STAGING_INCDIR}"
+
+inherit autotools
diff --git a/packages/bluez/bluez-hcidump_1.38.bb b/packages/bluez/bluez-hcidump_1.38.bb
new file mode 100644
index 0000000000..877c8db33c
--- /dev/null
+++ b/packages/bluez/bluez-hcidump_1.38.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Linux Bluetooth Stack HCI Debugger Tool."
+SECTION = "console"
+PRIORITY = "optional"
+DEPENDS = "bluez-libs"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-hcidump-${PV}.tar.gz"
+S = "${WORKDIR}/bluez-hcidump-${PV}"
+
+EXTRA_OECONF = "--with-bluez-libs=${STAGING_LIBDIR} --with-bluez-includes=${STAGING_INCDIR}"
+
+inherit autotools
diff --git a/packages/bluez/bluez-libs_3.10.bb b/packages/bluez/bluez-libs_3.10.bb
new file mode 100644
index 0000000000..6ddf62a4fb
--- /dev/null
+++ b/packages/bluez/bluez-libs_3.10.bb
@@ -0,0 +1 @@
+require bluez-libs.inc
diff --git a/packages/bluez/bluez-libs_3.11.bb b/packages/bluez/bluez-libs_3.11.bb
new file mode 100644
index 0000000000..6ddf62a4fb
--- /dev/null
+++ b/packages/bluez/bluez-libs_3.11.bb
@@ -0,0 +1 @@
+require bluez-libs.inc
diff --git a/packages/bluez/bluez-libs_3.12.bb b/packages/bluez/bluez-libs_3.12.bb
new file mode 100644
index 0000000000..6ddf62a4fb
--- /dev/null
+++ b/packages/bluez/bluez-libs_3.12.bb
@@ -0,0 +1 @@
+require bluez-libs.inc
diff --git a/packages/bluez/bluez-libs_3.13.bb b/packages/bluez/bluez-libs_3.13.bb
new file mode 100644
index 0000000000..6ddf62a4fb
--- /dev/null
+++ b/packages/bluez/bluez-libs_3.13.bb
@@ -0,0 +1 @@
+require bluez-libs.inc
diff --git a/packages/bluez/bluez-utils.inc b/packages/bluez/bluez-utils.inc
index a22431eaf9..097b8eba13 100644
--- a/packages/bluez/bluez-utils.inc
+++ b/packages/bluez/bluez-utils.inc
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux Bluetooth Stack Userland Utilities."
SECTION = "console"
PRIORITY = "optional"
-DEPENDS = "bluez-libs-${PV} dbus"
+DEPENDS = "bluez-libs-${PV} libusb dbus cups"
PROVIDES = "bluez-utils-dbus"
RPROVIDES_${PN} = "bluez-pan bluez-sdp bluez-utils-dbus"
RREPLACES = "bluez-utils-dbus"
@@ -10,9 +10,8 @@ LICENSE = "GPL"
SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
file://hcid.conf \
- file://02dtl1_cs.sh \
file://hciattach-ti-bts.patch;patch=1 \
- file://handle-eintr.patch;patch=1"
+ file://handle-eintr.patch;patch=1;status=applied"
# Almost all serial CF cards w/ manfid 0x0000,0x0000 seem to use the bcs protocol
# Let's default to that instead of 'any' until further notice...
@@ -20,7 +19,7 @@ SRC_URI += " file://default-manfid-0x0-to-bcps.patch;patch=1"
S = "${WORKDIR}/bluez-utils-${PV}"
-EXTRA_OECONF = "--enable-initscripts --enable-bcm203x --enable-hid2hci"
+EXTRA_OECONF = "--enable-initscripts --enable-bccmd --enable-bcm203x --enable-hid2hci --enable-cups"
# --enable-obex enable OBEX support
# --enable-alsa enable ALSA support
# --enable-cups install CUPS backend support
@@ -41,14 +40,16 @@ do_install_append() {
rmdir ${D}${bindir} ${D}${sbindir}
chmod u+s ${D}${base_sbindir}/hciattach ${D}${base_sbindir}/hciconfig
install -m 0644 ${WORKDIR}/hcid.conf ${D}${sysconfdir}/bluetooth/
- install -m 0755 ${WORKDIR}/02dtl1_cs.sh ${D}${sysconfdir}/apm/event.d/
install -m 0755 ${S}/daemon/.libs/passkey-agent ${D}${base_bindir}/
}
CONFFILES_${PN} = "${sysconfdir}/bluetooth/hcid.conf ${sysconfdir}/bluetooth/rfcomm.conf \
${sysconfdir}/default/bluetooth"
-PACKAGES =+ "${PN}-ciptool"
-FILES_${PN}-ciptool = "/bin/ciptool"
-RREPLACES_${PN}-ciptool = "bluez-utils-dbus-ciptool"
-RCONFLICTS_${PN}-ciptool = "bluez-utils-dbus-ciptool bluez-utils-nodbus"
+PACKAGES =+ " bluez-cups-backend"
+
+FILES_${PN} += " ${libdir}/alsa-lib/*.so "
+FILES_${PN}-dev += " ${libdir}/alsa-lib/*.la "
+
+FILES_bluez-cups-backend = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_bluez-cups-backend = "cups"
diff --git a/packages/bluez/bluez-utils/02dtl1_cs.sh b/packages/bluez/bluez-utils/02dtl1_cs.sh
deleted file mode 100644
index fd81508010..0000000000
--- a/packages/bluez/bluez-utils/02dtl1_cs.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-
-case "$1" in
- suspend)
- if [ "`/bin/hciconfig`" != "" ]; then
- #If hciconfig outputs anything then there's probably a Bluetooth
- # CF card in the slot so shut it down.
- hcitool dc `hcitool con | grep ACL | sed 's/^.*\([0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}\).*$/\1/'`
- hciconfig hci0 down
- killall hciattach > /dev/null 2>&1
- fi
- ;;
-
- resume)
- #check for kernel version
- if [ "`uname -r | grep 2.4.`" != "" ]; then
- k="o"
- elif [ "`uname -r | grep 2.6.`" != "" ]; then
- k="ko"
- else
- exit 0
- fi
-
- if test -e /sbin/cardctl; then
- CARDCTL=/sbin/cardctl
- elif test -e /sbin/pccardctl; then
- CARDCTL=/sbin/pccardctl
- else
- exit 0
- fi
-
- if [ "`lsmod | grep hci_uart`" != "" ]; then
- #If the hci_usb module is still loaded then there's a serial based
- # Bluetooth CF card in the slot, which only needs a resume to get it going
- # again.
- rfcomm bind all
- $CARDCTL resume
- hciconfig hci0 up
- else
- # only works for nokia dtl1 cards
- for f in /lib/modules/`uname -r`/kernel/drivers/bluetooth/dtl1_cs.$k
- do
- #Enumerate all the self-contained Bluetooth CF card drivers
- f=`echo $f | sed 's/\.'$k'$//'`
- f=`basename $f`
- if [ "`lsmod | grep $f`" != "" ]; then
- #If one of these drivers is still loaded, then there is probably
- #a non-serial based Bluetooth CF card in the slot that needs
- #ejecting and reinserting to get it going again
- rfcomm bind all
- $CARDCTL eject
- $CARDCTL insert
- hciconfig hci0 up
- fi
- done
- fi
-esac
diff --git a/packages/bluez/bluez-utils/ppoll-uclibc-arm-r0.patch b/packages/bluez/bluez-utils/ppoll-uclibc-arm-r0.patch
new file mode 100644
index 0000000000..391a7ae3de
--- /dev/null
+++ b/packages/bluez/bluez-utils/ppoll-uclibc-arm-r0.patch
@@ -0,0 +1,14 @@
+Index: bluez-utils-3.9/common/ppoll.h
+===================================================================
+--- bluez-utils-3.9.orig/common/ppoll.h 2007-05-17 17:42:23.000000000 +0200
++++ bluez-utils-3.9/common/ppoll.h 2007-05-17 17:43:18.000000000 +0200
+@@ -1,4 +1,8 @@
+-static inline int ppoll(struct pollfd *fds, nfds_t nfds,
++#ifdef ppoll
++#undef ppoll
++#endif
++#define ppoll bluez_ppoll
++static inline int bluez_ppoll(struct pollfd *fds, nfds_t nfds,
+ const struct timespec *timeout, const sigset_t *sigmask)
+ {
+ return poll(fds, nfds, timeout ? timeout->tv_sec * 1000 : 500);
diff --git a/packages/bluez/bluez-utils/uclibc-fix.patch b/packages/bluez/bluez-utils/uclibc-fix.patch
new file mode 100644
index 0000000000..6d4753c2e5
--- /dev/null
+++ b/packages/bluez/bluez-utils/uclibc-fix.patch
@@ -0,0 +1,46 @@
+Uclibc doesn't define or support speeds above 115200. So check the existence
+of the defines before allowing them to actually be used.
+
+Index: bluez-utils-3.9/tools/hciattach.c
+===================================================================
+--- bluez-utils-3.9.orig/tools/hciattach.c 2007-05-17 12:34:28.000000000 +1000
++++ bluez-utils-3.9/tools/hciattach.c 2007-05-17 12:40:20.000000000 +1000
+@@ -105,22 +105,38 @@
+ return B57600;
+ case 115200:
+ return B115200;
++#ifdef B230400
+ case 230400:
+ return B230400;
++#endif
++#ifdef B460800
+ case 460800:
+ return B460800;
++#endif
++#ifdef B500000
+ case 500000:
+ return B500000;
++#endif
++#ifdef B576000
+ case 576000:
+ return B576000;
++#endif
++#ifdef B921600
+ case 921600:
+ return B921600;
++#endif
++#ifdef B1000000
+ case 1000000:
+ return B1000000;
++#endif
++#ifdef B1152000
+ case 1152000:
+ return B1152000;
++#endif
++#ifdef B1500000
+ case 1500000:
+ return B1500000;
++#endif
+ default:
+ return B57600;
+ }
diff --git a/packages/bluez/bluez-utils_3.11.bb b/packages/bluez/bluez-utils_3.11.bb
new file mode 100644
index 0000000000..6cadfc1a53
--- /dev/null
+++ b/packages/bluez/bluez-utils_3.11.bb
@@ -0,0 +1,111 @@
+require bluez-utils.inc
+
+DEPENDS += "glib-2.0"
+
+#DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
+ file://hcid.conf \
+ "
+PR = "r1"
+
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --disable-hid2hci \
+ --disable-alsa \
+ --enable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+# The config options are explained below:
+
+# --enable-obex enable OBEX support
+# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1
+# --enable-cups install CUPS backend support
+# --enable-bccmd install BCCMD interface utility
+# --enable-avctrl install Audio/Video control utility
+# --enable-hid2hci install HID mode switching utility
+# --enable-dfutool install DFU firmware upgrade utility
+
+# --enable-glib For systems that use and install GLib anyway
+# --disable-sdpd The sdpd is obsolete and should no longer be used. This of course requires that hcid will be started with -s to enable the SDP server
+
+#Following services can be enabled so far:
+# --enable-network
+# --enable-serial
+# --enable-input
+# --enable-audio
+# --enable-echo
+
+#There is no need to modify any init script. They will be started
+#automatically or on demand. Only /etc/bluetooth/*.service files should
+#be patched to change name or the autostart value.
+# --enable-configfile
+# --enable-initscripts
+
+#For even smaller -doc packages
+# --disable-manpages
+# --disable-pcmciarules
+
+#I haven't seen any embedded device with HID proxy support. So simply
+#disable it:
+# --disable-hid2hci
+
+
+PACKAGES =+ "${PN}-compat"
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default/bluetooth \
+ "
+
+CONFFILES_${PN}-compat = " \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_${PN} = " \
+ ${base_sbindir}/hcid \
+ ${libdir}/bluetooth \
+ ${sysconfdir}/init.d/bluetooth \
+ ${sysconfdir}/bluetooth/*.service \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default \
+ ${sysconfdir}/dbus-1 \
+ ${base_sbindir}/hciattach \
+ "
+
+FILES_${PN}-dbg += " \
+ ${libdir}/bluetooth/.debug \
+ "
+
+FILES_${PN}-compat = " \
+ ${base_bindir}/sdptool \
+ ${base_bindir}/dund \
+ ${base_bindir}/rctest \
+ ${base_bindir}/ciptool \
+ ${base_bindir}/l2test \
+ ${base_bindir}/rfcomm \
+ ${base_bindir}/hcitool \
+ ${base_bindir}/pand \
+ ${base_bindir}/hidd \
+ ${base_bindir}/l2ping \
+ ${base_sbindir}/hciconfig \
+ ${base_sbindir}/bccmd \
+ ${base_sbindir}/hciemu \
+ ${base_bindir}/passkey-agent \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_bluez-cups-backend = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_bluez-cups-backend = "cups"
+
+
diff --git a/packages/bluez/bluez-utils_3.12.bb b/packages/bluez/bluez-utils_3.12.bb
new file mode 100644
index 0000000000..754097acce
--- /dev/null
+++ b/packages/bluez/bluez-utils_3.12.bb
@@ -0,0 +1,114 @@
+require bluez-utils.inc
+
+DEPENDS += "glib-2.0"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
+ file://hcid.conf \
+ "
+PR = "r4"
+
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --enable-alsa \
+ --enable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+# The config options are explained below:
+
+# --enable-obex enable OBEX support
+# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1
+# --enable-cups install CUPS backend support
+# --enable-bccmd install BCCMD interface utility
+# --enable-avctrl install Audio/Video control utility
+# --enable-hid2hci install HID mode switching utility
+# --enable-dfutool install DFU firmware upgrade utility
+
+# --enable-glib For systems that use and install GLib anyway
+# --disable-sdpd The sdpd is obsolete and should no longer be used. This of course requires that hcid will be started with -s to enable the SDP server
+
+#Following services can be enabled so far:
+# --enable-network
+# --enable-serial
+# --enable-input
+# --enable-audio
+# --enable-echo
+
+#There is no need to modify any init script. They will be started
+#automatically or on demand. Only /etc/bluetooth/*.service files should
+#be patched to change name or the autostart value.
+# --enable-configfile
+# --enable-initscripts
+
+#For even smaller -doc packages
+# --disable-manpages
+# --disable-pcmciarules
+
+#I haven't seen any embedded device with HID proxy support. So simply
+#disable it:
+# --disable-hid2hci
+
+
+PACKAGES =+ "${PN}-compat ${PN}-alsa"
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default/bluetooth \
+ "
+
+CONFFILES_${PN}-compat = " \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_${PN} = " \
+ ${base_sbindir}/hcid \
+ ${libdir}/bluetooth \
+ ${sysconfdir}/init.d/bluetooth \
+ ${sysconfdir}/bluetooth/*.service \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default \
+ ${sysconfdir}/dbus-1 \
+ ${base_sbindir}/hciattach \
+ "
+
+FILES_${PN}-dbg += " \
+ ${libdir}/bluetooth/.debug \
+ ${libdir}/cups/backend/.debug \
+ ${libdir}/alsa-lib/.debug \
+ "
+
+FILES_${PN}-compat = " \
+ ${base_bindir}/sdptool \
+ ${base_bindir}/dund \
+ ${base_bindir}/rctest \
+ ${base_bindir}/ciptool \
+ ${base_bindir}/l2test \
+ ${base_bindir}/rfcomm \
+ ${base_bindir}/hcitool \
+ ${base_bindir}/pand \
+ ${base_bindir}/hidd \
+ ${base_bindir}/l2ping \
+ ${base_sbindir}/hciconfig \
+ ${base_sbindir}/bccmd \
+ ${base_sbindir}/hciemu \
+ ${base_sbindir}/hid2hci \
+ ${base_bindir}/passkey-agent \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_${PN}-alsa = "${libdir}/alsa-lib/libasound*"
+
+FILES_bluez-cups-backend = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_bluez-cups-backend = "cups"
+
+
diff --git a/packages/bluez/bluez-utils_3.13.bb b/packages/bluez/bluez-utils_3.13.bb
new file mode 100644
index 0000000000..5ea1429641
--- /dev/null
+++ b/packages/bluez/bluez-utils_3.13.bb
@@ -0,0 +1,114 @@
+require bluez-utils.inc
+
+DEPENDS += "glib-2.0"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
+ file://hcid.conf \
+ "
+PR = "r0"
+
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --enable-alsa \
+ --enable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+# The config options are explained below:
+
+# --enable-obex enable OBEX support
+# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1
+# --enable-cups install CUPS backend support
+# --enable-bccmd install BCCMD interface utility
+# --enable-avctrl install Audio/Video control utility
+# --enable-hid2hci install HID mode switching utility
+# --enable-dfutool install DFU firmware upgrade utility
+
+# --enable-glib For systems that use and install GLib anyway
+# --disable-sdpd The sdpd is obsolete and should no longer be used. This of course requires that hcid will be started with -s to enable the SDP server
+
+#Following services can be enabled so far:
+# --enable-network
+# --enable-serial
+# --enable-input
+# --enable-audio
+# --enable-echo
+
+#There is no need to modify any init script. They will be started
+#automatically or on demand. Only /etc/bluetooth/*.service files should
+#be patched to change name or the autostart value.
+# --enable-configfile
+# --enable-initscripts
+
+#For even smaller -doc packages
+# --disable-manpages
+# --disable-pcmciarules
+
+#I haven't seen any embedded device with HID proxy support. So simply
+#disable it:
+# --disable-hid2hci
+
+
+PACKAGES =+ "${PN}-compat ${PN}-alsa"
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default/bluetooth \
+ "
+
+CONFFILES_${PN}-compat = " \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_${PN} = " \
+ ${base_sbindir}/hcid \
+ ${libdir}/bluetooth \
+ ${sysconfdir}/init.d/bluetooth \
+ ${sysconfdir}/bluetooth/*.service \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default \
+ ${sysconfdir}/dbus-1 \
+ ${base_sbindir}/hciattach \
+ "
+
+FILES_${PN}-dbg += " \
+ ${libdir}/bluetooth/.debug \
+ ${libdir}/cups/backend/.debug \
+ ${libdir}/alsa-lib/.debug \
+ "
+
+FILES_${PN}-compat = " \
+ ${base_bindir}/sdptool \
+ ${base_bindir}/dund \
+ ${base_bindir}/rctest \
+ ${base_bindir}/ciptool \
+ ${base_bindir}/l2test \
+ ${base_bindir}/rfcomm \
+ ${base_bindir}/hcitool \
+ ${base_bindir}/pand \
+ ${base_bindir}/hidd \
+ ${base_bindir}/l2ping \
+ ${base_sbindir}/hciconfig \
+ ${base_sbindir}/bccmd \
+ ${base_sbindir}/hciemu \
+ ${base_sbindir}/hid2hci \
+ ${base_bindir}/passkey-agent \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
+FILES_${PN}-alsa = "${libdir}/alsa-lib/libasound*"
+
+FILES_bluez-cups-backend = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_bluez-cups-backend = "cups"
+
+
diff --git a/packages/bluez/bluez-utils_3.4.bb b/packages/bluez/bluez-utils_3.4.bb
index 49e6ded250..f2bbd15507 100644
--- a/packages/bluez/bluez-utils_3.4.bb
+++ b/packages/bluez/bluez-utils_3.4.bb
@@ -11,7 +11,6 @@ PR = "r1"
SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
file://hcid.conf \
- file://02dtl1_cs.sh \
file://hciattach-ti-bts.patch;patch=1"
# Almost all serial CF cards w/ manfid 0x0000,0x0000 seem to use the bcs protocol
@@ -41,7 +40,6 @@ do_install_append() {
rmdir ${D}${bindir} ${D}${sbindir}
chmod u+s ${D}${base_sbindir}/hciattach ${D}${base_sbindir}/hciconfig
install -m 0644 ${WORKDIR}/hcid.conf ${D}${sysconfdir}/bluetooth/
- install -m 0755 ${WORKDIR}/02dtl1_cs.sh ${D}${sysconfdir}/apm/event.d/
}
CONFFILES_${PN} = "${sysconfdir}/bluetooth/hcid.conf ${sysconfdir}/bluetooth/rfcomm.conf \
diff --git a/packages/bluez/bluez-utils_3.7.bb b/packages/bluez/bluez-utils_3.7.bb
new file mode 100644
index 0000000000..7a76cb3200
--- /dev/null
+++ b/packages/bluez/bluez-utils_3.7.bb
@@ -0,0 +1,54 @@
+DESCRIPTION = "Linux Bluetooth Stack Userland Utilities."
+SECTION = "console"
+PRIORITY = "optional"
+DEPENDS = "bluez-libs-${PV} dbus cups alsa-lib openobex"
+PROVIDES = "bluez-utils-dbus"
+RPROVIDES_${PN} = "bluez-pan bluez-sdp bluez-utils-dbus"
+RREPLACES = "bluez-utils-dbus"
+RCONFLICTS_${PN} = "bluez-utils-nodbus"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
+ file://hcid.conf \
+ file://hciattach-ti-bts.patch;patch=1"
+
+# Almost all serial CF cards w/ manfid 0x0000,0x0000 seem to use the bcs protocol
+# Let's default to that instead of 'any' until further notice...
+SRC_URI += " file://default-manfid-0x0-to-bcps.patch;patch=1"
+
+S = "${WORKDIR}/bluez-utils-${PV}"
+
+EXTRA_OECONF = "--enable-initscripts --enable-bcm203x --enable-hid2hci --enable-obex --enable-alsa --enable-cups"
+# --enable-obex enable OBEX support
+# --enable-alsa enable ALSA support
+# --enable-cups install CUPS backend support
+# --enable-bccmd install BCCMD interface utility
+# --enable-avctrl install Audio/Video control utility
+# --enable-hid2hci install HID mode switching utility
+# --enable-dfutool install DFU firmware upgrade utility
+
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "bluetooth"
+INITSCRIPT_PARAMS = "defaults 23 19"
+
+do_install_append() {
+ install -d ${D}${base_sbindir} ${D}${base_bindir}/ ${D}${sysconfdir}/apm/event.d/
+ mv ${D}${sbindir}/* ${D}${base_sbindir}/
+ mv ${D}${bindir}/* ${D}${base_bindir}/
+ rmdir ${D}${bindir} ${D}${sbindir}
+ chmod u+s ${D}${base_sbindir}/hciattach ${D}${base_sbindir}/hciconfig
+ install -m 0644 ${WORKDIR}/hcid.conf ${D}${sysconfdir}/bluetooth/
+}
+
+CONFFILES_${PN} = "${sysconfdir}/bluetooth/hcid.conf ${sysconfdir}/bluetooth/rfcomm.conf \
+ ${sysconfdir}/default/bluetooth"
+
+PACKAGES =+ "${PN}-ciptool bluez-cups-backend"
+FILES_${PN}-ciptool = "/bin/ciptool"
+RREPLACES_${PN}-ciptool = "bluez-utils-dbus-ciptool"
+RCONFLICTS_${PN}-ciptool = "bluez-utils-dbus-ciptool bluez-utils-nodbus"
+
+FILES_bluez-cups-backend = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_bluez-cups-backend = "cups"
diff --git a/packages/bluez/bluez-utils_3.8.bb b/packages/bluez/bluez-utils_3.8.bb
index d549d12d30..f2bbd15507 100644
--- a/packages/bluez/bluez-utils_3.8.bb
+++ b/packages/bluez/bluez-utils_3.8.bb
@@ -7,11 +7,10 @@ RPROVIDES_${PN} = "bluez-pan bluez-sdp bluez-utils-dbus"
RREPLACES = "bluez-utils-dbus"
RCONFLICTS_${PN} = "bluez-utils-nodbus"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
file://hcid.conf \
- file://02dtl1_cs.sh \
file://hciattach-ti-bts.patch;patch=1"
# Almost all serial CF cards w/ manfid 0x0000,0x0000 seem to use the bcs protocol
@@ -41,7 +40,6 @@ do_install_append() {
rmdir ${D}${bindir} ${D}${sbindir}
chmod u+s ${D}${base_sbindir}/hciattach ${D}${base_sbindir}/hciconfig
install -m 0644 ${WORKDIR}/hcid.conf ${D}${sysconfdir}/bluetooth/
- install -m 0755 ${WORKDIR}/02dtl1_cs.sh ${D}${sysconfdir}/apm/event.d/
}
CONFFILES_${PN} = "${sysconfdir}/bluetooth/hcid.conf ${sysconfdir}/bluetooth/rfcomm.conf \
diff --git a/packages/bluez/bluez-utils_3.9.bb b/packages/bluez/bluez-utils_3.9.bb
index 36410ee2ec..29c472fbbd 100644
--- a/packages/bluez/bluez-utils_3.9.bb
+++ b/packages/bluez/bluez-utils_3.9.bb
@@ -1,3 +1,13 @@
require bluez-utils.inc
-PR = "r2"
+PACKAGES =+ "${PN}-ciptool"
+
+SRC_URI += "file://uclibc-fix.patch;patch=1 \
+ file://ppoll-uclibc-arm-r0.patch;patch=1 "
+
+FILES_${PN}-ciptool = "/bin/ciptool"
+RREPLACES_${PN}-ciptool = "bluez-utils-dbus-ciptool"
+RCONFLICTS_${PN}-ciptool = "bluez-utils-dbus-ciptool bluez-utils-nodbus"
+
+
+PR = "r5"
diff --git a/packages/bluez/files/openzaurus/bluetooth.default b/packages/bluez/files/openzaurus/bluetooth.default
deleted file mode 100644
index e63ab137cc..0000000000
--- a/packages/bluez/files/openzaurus/bluetooth.default
+++ /dev/null
@@ -1,37 +0,0 @@
-# Bluetooth configuraton file
-
-# Start of hcid (allowed values are "true" and "false")
-HCID_ENABLE=true
-
-# Config file for hcid
-HCID_CONFIG="/etc/bluetooth/hcid.conf"
-
-# Start sdpd (allowed values are "true" and "false")
-SDPD_ENABLE=true
-
-# Start hidd (allowed values are "true" and "false")
-HIDD_ENABLE=false
-
-# Arguments to hidd
-HIDD_OPTIONS=""
-
-# Run hid2hci (allowed values are "true" and "false")
-HID2HCI_ENABLE=true
-
-# Bind rfcomm devices (allowed values are "true" and "false")
-RFCOMM_ENABLE=true
-
-# Config file for rfcomm
-RFCOMM_CONFIG="/etc/bluetooth/rfcomm.conf"
-
-# Start dund (allowed values are "true" and "false")
-DUND_ENABLE=false
-
-# Arguments to dund
-DUND_OPTIONS="--listen --persist"
-
-# Start pand (allowed values are "true" and "false")
-PAND_ENABLE=false
-
-# Arguments to pand
-PAND_OPTIONS="--listen --role NAP"
diff --git a/packages/bluez/files/pkgconfig-add-gthread.patch b/packages/bluez/files/pkgconfig-add-gthread.patch
new file mode 100644
index 0000000000..2dde6b81f5
--- /dev/null
+++ b/packages/bluez/files/pkgconfig-add-gthread.patch
@@ -0,0 +1,50 @@
+Index: git/configure.in
+===================================================================
+--- git.orig/configure.in 2007-07-17 17:25:52.000000000 +0100
++++ git/configure.in 2007-07-17 17:25:52.000000000 +0100
+@@ -75,6 +75,10 @@
+ AC_SUBST(OPENOBEX_CFLAGS)
+ AC_SUBST(OPENOBEX_LIBS)
+
++PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.10, dummy=yes, dummy=no)
++AC_SUBST(GTHREAD_CFLAGS)
++AC_SUBST(GTHREAD_LIBS)
++
+ AC_ARG_BLUEZ
+
+ AC_OUTPUT(Makefile compat/Makefile common/Makefile applet/Makefile properties/Makefile sendto/Makefile wizard/Makefile proximity/Makefile po/Makefile.in)
+Index: git/applet/Makefile.am
+===================================================================
+--- git.orig/applet/Makefile.am 2007-07-17 17:25:52.000000000 +0100
++++ git/applet/Makefile.am 2007-07-17 17:25:52.000000000 +0100
+@@ -4,12 +4,12 @@
+ bluetooth_applet_SOURCES = main.c
+
+ bluetooth_applet_LDADD = $(top_builddir)/compat/libcompat.a $(top_builddir)/common/libcommon.a \
+- @NOTIFY_LIBS@ @GCONF_LIBS@ @GTK_LIBS@ @HAL_LIBS@ @DBUS_LIBS@
++ @NOTIFY_LIBS@ @GCONF_LIBS@ @GTK_LIBS@ @HAL_LIBS@ @DBUS_LIBS@ @GTHREAD_LIBS@
+
+ nodist_bluetooth_applet_SOURCES = $(top_builddir)/common/passkey-agent-glue.h \
+ $(top_builddir)/common/auth-agent-glue.h
+
+-AM_CFLAGS = @DBUS_CFLAGS@ @HAL_CFLAGS@ @GTK_CFLAGS@ @GCONF_CFLAGS@ @NOTIFY_CFLAGS@ -DSYSCONFDIR=\"$(sysconfdir)\"
++AM_CFLAGS = @DBUS_CFLAGS@ @HAL_CFLAGS@ @GTK_CFLAGS@ @GCONF_CFLAGS@ @NOTIFY_CFLAGS@ @GTHREAD_CFLAGS@ -DSYSCONFDIR=\"$(sysconfdir)\"
+
+ INCLUDES = -I$(top_builddir)/common -I$(top_srcdir)/compat
+
+Index: git/properties/Makefile.am
+===================================================================
+--- git.orig/properties/Makefile.am 2007-07-17 17:28:11.000000000 +0100
++++ git/properties/Makefile.am 2007-07-17 17:28:44.000000000 +0100
+@@ -4,9 +4,9 @@
+ bluetooth_properties_SOURCES = main.c
+
+ bluetooth_properties_LDADD = $(top_builddir)/common/libcommon.a \
+- @GCONF_LIBS@ @GTK_LIBS@ @HAL_LIBS@ @DBUS_LIBS@
++ @GCONF_LIBS@ @GTK_LIBS@ @HAL_LIBS@ @DBUS_LIBS@ @GTHREAD_LIBS@
+
+-AM_CFLAGS = @DBUS_CFLAGS@ @HAL_CFLAGS@ @GTK_CFLAGS@ @GCONF_CFLAGS@
++AM_CFLAGS = @DBUS_CFLAGS@ @HAL_CFLAGS@ @GTK_CFLAGS@ @GCONF_CFLAGS@ @GTHREAD_CFLAGS@
+
+ INCLUDES = -I$(top_srcdir)/common
+
diff --git a/packages/boost-asio/boost-asio_0.3.7.bb b/packages/boost-asio/boost-asio_0.3.7.bb
index 45b7e22eb1..947f89cae2 100644
--- a/packages/boost-asio/boost-asio_0.3.7.bb
+++ b/packages/boost-asio/boost-asio_0.3.7.bb
@@ -1,6 +1,5 @@
DESCRIPTION = "Asio 0.3.7 for work with boost, should be moved into boost package once integrated into the boost distribution."
HOMEPAGE = "http://asio.sf.net/"
-MAINTAINER = "Martin Dietze <dietze@4g-systems.com>"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "Boost Software License"
diff --git a/packages/bridge-utils/bridge-utils_1.2.bb b/packages/bridge-utils/bridge-utils_1.2.bb
new file mode 100644
index 0000000000..3f1f25dc3f
--- /dev/null
+++ b/packages/bridge-utils/bridge-utils_1.2.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Tools for ethernet bridging."
+HOMEPAGE = "http://bridge.sourceforge.net/"
+SECTION = "console/network"
+LICENSE = "GPL"
+DEPENDS = "sysfsutils"
+RRECOMMENDS = "kernel-module-bridge"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/bridge/bridge-utils-${PV}.tar.gz"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-linux-headers=${STAGING_INCDIR}"
diff --git a/packages/busybox/busybox-1.2.0/sparc/.mtn2git_empty b/packages/brutefir/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.0/sparc/.mtn2git_empty
+++ b/packages/brutefir/.mtn2git_empty
diff --git a/packages/brutefir/brutefir_1.0i.bb b/packages/brutefir/brutefir_1.0i.bb
new file mode 100644
index 0000000000..52e56aca20
--- /dev/null
+++ b/packages/brutefir/brutefir_1.0i.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "BruteFIR is a software convolution engine, a program for applying long FIR filters to multi-channel digital audio, either offline or in realtime."
+LICENSE = "GPLv2"
+
+DEPENDS = "alsa-lib fftw fftwf fftwl"
+
+PR = "r1"
+
+# The unbreak-makefile disables the SSE2, MMX and jack support, feel free
+# to add back SSE and MMX after fixing the makefile to not use uname to check for cpu
+
+SRC_URI = "http://www.ludd.luth.se/~torger/files/brutefir-${PV}.tar.gz \
+ file://unbreak-makefile.patch;patch=1 \
+ "
+
+do_configure() {
+ sed -i -e s:-L/usr/local/lib:-L${STAGING_LIBDIR}:g Makefile
+ sed -i -e s:-I/usr/local/include:-I${STAGING_INCDIR}:g Makefile
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 755 *.bf* ${D}${bindir}
+ install -m 755 brutefir ${D}${bindir}
+}
+
diff --git a/packages/busybox/busybox-1.2.0/wrt54/.mtn2git_empty b/packages/brutefir/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.0/wrt54/.mtn2git_empty
+++ b/packages/brutefir/files/.mtn2git_empty
diff --git a/packages/brutefir/files/unbreak-makefile.patch b/packages/brutefir/files/unbreak-makefile.patch
new file mode 100644
index 0000000000..2a437a2308
--- /dev/null
+++ b/packages/brutefir/files/unbreak-makefile.patch
@@ -0,0 +1,38 @@
+--- /tmp/Makefile 2007-07-19 18:54:47.000000000 +0200
++++ brutefir-1.0i/Makefile 2007-07-19 18:55:44.775215000 +0200
+@@ -36,8 +36,6 @@
+ BRUTEFIR_LIBS = $(FFTW_LIB) -lm
+ BRUTEFIR_OBJS = brutefir.o fftw_convolver.o bfconf.o bfrun.o firwindow.o \
+ emalloc.o shmalloc.o dai.o bfconf_lexical.o inout.o dither.o delay.o
+-BRUTEFIR_IA32_OBJS = convolver_sse2.o convolver_sse.o \
+-convolver_3dnow.o convolver_x87.o
+
+ BFIO_FILE_OBJS = bfio_file.fpic.o
+
+@@ -46,8 +44,6 @@
+
+ BFIO_OSS_OBJS = bfio_oss.fpic.o emalloc.fpic.o
+
+-BFIO_JACK_LIBS = -ljack
+-BFIO_JACK_OBJS = bfio_jack.fpic.o emalloc.fpic.o inout.fpic.o
+
+ BFLOGIC_CLI_OBJS = bflogic_cli.fpic.o inout.fpic.o
+ BFLOGIC_EQ_OBJS = bflogic_eq.fpic.o emalloc.fpic.o shmalloc.fpic.o
+@@ -78,7 +74,6 @@
+ # assume that we have alsa, osss and jack
+ LIB_TARGETS += alsa.bfio
+ LIB_TARGETS += oss.bfio
+-LIB_TARGETS += jack.bfio
+ endif
+
+ # Solaris
+@@ -133,9 +128,6 @@
+ oss.bfio: $(BFIO_OSS_OBJS)
+ $(LD) $(LD_SHARED) $(CC_FPIC) $(LIBPATHS) -o $@ $(BFIO_OSS_OBJS) -lc
+
+-jack.bfio: $(BFIO_JACK_OBJS)
+- $(LD) $(LD_SHARED) $(CC_FPIC) $(LIBPATHS) -o $@ $(BFIO_JACK_OBJS) $(BFIO_JACK_LIBS) -lc
+-
+ file.bfio: $(BFIO_FILE_OBJS)
+ $(LD) $(LD_SHARED) $(CC_FPIC) $(LIBPATHS) -o $@ $(BFIO_FILE_OBJS) -lc
+
diff --git a/packages/btscanner/btscanner_2.0.bb b/packages/btscanner/btscanner_2.0.bb
index ac991ef078..0478577320 100644
--- a/packages/btscanner/btscanner_2.0.bb
+++ b/packages/btscanner/btscanner_2.0.bb
@@ -2,11 +2,13 @@ DESCRIPTION = "Extract information from Bluetooth devices in range."
SECTION = "libs"
PRIORITY = "optional"
HOMEPAGE = "http://www.pentest.co.uk/cgi-bin/viewcat.cgi?cat=downloads&section=01_bluetooth"
-DEPENDS = "bluez-libs gdbm ncurses"
-PR = "r0"
+DEPENDS = "bluez-libs gdbm ncurses libxml2"
+PR = "r1"
LICENSE = "GPLv2"
-SRC_URI = "http://www.pentest.co.uk/src/btscanner-${PV}.tar.bz2"
+SRC_URI = "http://www.pentest.co.uk/src/btscanner-${PV}.tar.bz2 \
+ file://gcc-4.patch;patch=1 \
+ "
#Yes, the packages uses this ugly hardcoded path instead of ${sysconfdir}
FILES_${PN} += "/usr/share/oui.txt"
diff --git a/packages/busybox/busybox-1.2.1/openmn/.mtn2git_empty b/packages/btscanner/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.1/openmn/.mtn2git_empty
+++ b/packages/btscanner/files/.mtn2git_empty
diff --git a/packages/btscanner/files/gcc-4.patch b/packages/btscanner/files/gcc-4.patch
new file mode 100644
index 0000000000..dab2bfa2ff
--- /dev/null
+++ b/packages/btscanner/files/gcc-4.patch
@@ -0,0 +1,12 @@
+diff -Naur btscanner-2.0.orig/configure.in btscanner-2.0/configure.in
+--- btscanner-2.0.orig/configure.in 2004-11-01 12:56:02.000000000 +0100
++++ btscanner-2.0/configure.in 2007-03-11 14:58:09.000000000 +0100
+@@ -64,7 +64,7 @@
+
+ # CFLAGS
+ CFLAGS="$CFLAGS -Wall -pthread -Wshadow -Wbad-function-cast \
+- -Wformat -Wimplicit-function-dec -Wparentheses -Wsign-compare \
++ -Wformat -Wparentheses -Wsign-compare \
+ -Wstrict-prototypes -Wtrigraphs -Wundef -Wuninitialized \
+ -W -Wunused -Wformat-security -Wmissing-braces -Wbad-function-cast \
+ -Wcast-qual -falign-functions -falign-labels -falign-loops\
diff --git a/packages/btxml/btxml.bb b/packages/btxml/btxml.bb
index b48ebb79f6..d072b85bac 100644
--- a/packages/btxml/btxml.bb
+++ b/packages/btxml/btxml.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "Bluetooh Download Data from remote phones"
-PRIORITY = "optional"
-SECTIONS = "apps"
-DEPENDS = "bluez-libs"
HOMEPAGE = "http://www.saftware.de"
+SECTION = "apps"
+PRIORITY = "optional"
LICENSE = "GPL"
+DEPENDS = "bluez-libs"
SRC_URI = "http://www.saftware.de/bluetooth/btxml.c"
S = "${WORKDIR}"
diff --git a/packages/busybox/busybox-1.00/nylon/defconfig b/packages/busybox/busybox-1.00/nylon/defconfig
index 3e4257ef04..7efd042cdc 100644
--- a/packages/busybox/busybox-1.00/nylon/defconfig
+++ b/packages/busybox/busybox-1.00/nylon/defconfig
@@ -41,8 +41,8 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
CONFIG_CPIO=y
-CONFIG_DPKG=y
-CONFIG_DPKG_DEB=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
diff --git a/packages/busybox/busybox-1.01/nylon/defconfig b/packages/busybox/busybox-1.01/nylon/defconfig
index 3e4257ef04..7efd042cdc 100644
--- a/packages/busybox/busybox-1.01/nylon/defconfig
+++ b/packages/busybox/busybox-1.01/nylon/defconfig
@@ -41,8 +41,8 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
CONFIG_CPIO=y
-CONFIG_DPKG=y
-CONFIG_DPKG_DEB=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
diff --git a/packages/busybox/busybox-1.01/openzaurus/defconfig b/packages/busybox/busybox-1.01/openzaurus/defconfig
deleted file mode 100644
index 34a5804a4d..0000000000
--- a/packages/busybox/busybox-1.01/openzaurus/defconfig
+++ /dev/null
@@ -1,475 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-HAVE_DOT_CONFIG=y
-
-#
-# General Configuration
-#
-# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
-CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y
-# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
-# CONFIG_FEATURE_VERBOSE_USAGE is not set
-# CONFIG_FEATURE_INSTALLER is not set
-# CONFIG_LOCALE_SUPPORT is not set
-# CONFIG_FEATURE_DEVFS is not set
-CONFIG_FEATURE_DEVPTS=y
-# CONFIG_FEATURE_CLEAN_UP is not set
-# CONFIG_FEATURE_SUID is not set
-# CONFIG_SELINUX is not set
-
-#
-# Build Options
-#
-# CONFIG_STATIC is not set
-CONFIG_LFS=y
-# USING_CROSS_COMPILER is not set
-EXTRA_CFLAGS_OPTIONS=""
-
-#
-# Installation Options
-#
-# CONFIG_INSTALL_NO_USR is not set
-PREFIX="./_install"
-
-#
-# Archival Utilities
-#
-CONFIG_AR=y
-# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
-CONFIG_BUNZIP2=y
-CONFIG_CPIO=y
-# CONFIG_DPKG is not set
-# CONFIG_DPKG_DEB is not set
-CONFIG_GUNZIP=y
-# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
-CONFIG_GZIP=y
-# CONFIG_RPM2CPIO is not set
-# CONFIG_RPM is not set
-CONFIG_TAR=y
-CONFIG_FEATURE_TAR_CREATE=y
-CONFIG_FEATURE_TAR_BZIP2=y
-CONFIG_FEATURE_TAR_FROM=y
-CONFIG_FEATURE_TAR_GZIP=y
-# CONFIG_FEATURE_TAR_COMPRESS is not set
-CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY=y
-CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-# CONFIG_UNCOMPRESS is not set
-# CONFIG_UNZIP is not set
-
-#
-# Common options for cpio and tar
-#
-# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
-
-#
-# Coreutils
-#
-CONFIG_BASENAME=y
-# CONFIG_CAL is not set
-CONFIG_CAT=y
-CONFIG_CHGRP=y
-CONFIG_CHMOD=y
-CONFIG_CHOWN=y
-CONFIG_CHROOT=y
-# CONFIG_CMP is not set
-CONFIG_CP=y
-CONFIG_CUT=y
-CONFIG_DATE=y
-
-#
-# date (forced enabled for use with watch)
-#
-# CONFIG_FEATURE_DATE_ISOFMT is not set
-CONFIG_DD=y
-CONFIG_DF=y
-CONFIG_DIRNAME=y
-# CONFIG_DOS2UNIX is not set
-CONFIG_DU=y
-CONFIG_FEATURE_DU_DEFALT_BLOCKSIZE_1K=y
-CONFIG_ECHO=y
-CONFIG_FEATURE_FANCY_ECHO=y
-CONFIG_ENV=y
-CONFIG_EXPR=y
-CONFIG_FALSE=y
-# CONFIG_FOLD is not set
-CONFIG_HEAD=y
-# CONFIG_FEATURE_FANCY_HEAD is not set
-# CONFIG_HOSTID is not set
-CONFIG_ID=y
-# CONFIG_INSTALL is not set
-# CONFIG_LENGTH is not set
-CONFIG_LN=y
-CONFIG_LOGNAME=y
-CONFIG_LS=y
-CONFIG_FEATURE_LS_FILETYPES=y
-CONFIG_FEATURE_LS_FOLLOWLINKS=y
-# CONFIG_FEATURE_LS_RECURSIVE is not set
-CONFIG_FEATURE_LS_SORTFILES=y
-CONFIG_FEATURE_LS_TIMESTAMPS=y
-CONFIG_FEATURE_LS_USERNAME=y
-CONFIG_FEATURE_LS_COLOR=y
-CONFIG_MD5SUM=y
-CONFIG_MKDIR=y
-CONFIG_MKFIFO=y
-CONFIG_MKNOD=y
-CONFIG_MV=y
-CONFIG_OD=y
-CONFIG_PRINTF=y
-CONFIG_PWD=y
-# CONFIG_REALPATH is not set
-CONFIG_RM=y
-CONFIG_RMDIR=y
-CONFIG_SEQ=y
-# CONFIG_SHA1SUM is not set
-CONFIG_SLEEP=y
-# CONFIG_FEATURE_FANCY_SLEEP is not set
-CONFIG_SORT=y
-CONFIG_STTY=y
-CONFIG_SYNC=y
-CONFIG_TAIL=y
-CONFIG_FEATURE_FANCY_TAIL=y
-CONFIG_TEE=y
-# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
-CONFIG_TEST=y
-
-#
-# test (forced enabled for use with shell)
-#
-# CONFIG_FEATURE_TEST_64 is not set
-CONFIG_TOUCH=y
-CONFIG_TR=y
-CONFIG_TRUE=y
-CONFIG_TTY=y
-CONFIG_UNAME=y
-CONFIG_UNIQ=y
-# CONFIG_USLEEP is not set
-# CONFIG_UUDECODE is not set
-# CONFIG_UUENCODE is not set
-CONFIG_WATCH=y
-CONFIG_WC=y
-CONFIG_WHO=y
-CONFIG_WHOAMI=y
-CONFIG_YES=y
-
-#
-# Common options for cp and mv
-#
-# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
-
-#
-# Common options for ls and more
-#
-CONFIG_FEATURE_AUTOWIDTH=y
-
-#
-# Common options for df, du, ls
-#
-CONFIG_FEATURE_HUMAN_READABLE=y
-
-#
-# Common options for md5sum, sha1sum
-#
-# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set
-
-#
-# Console Utilities
-#
-CONFIG_CHVT=y
-CONFIG_CLEAR=y
-CONFIG_DEALLOCVT=y
-# CONFIG_DUMPKMAP is not set
-CONFIG_GETKEY=y
-# CONFIG_LOADFONT is not set
-# CONFIG_LOADKMAP is not set
-CONFIG_OPENVT=y
-CONFIG_RESET=y
-# CONFIG_SETKEYCODES is not set
-
-#
-# Debian Utilities
-#
-CONFIG_MKTEMP=y
-# CONFIG_PIPE_PROGRESS is not set
-CONFIG_READLINK=y
-CONFIG_FEATURE_READLINK_FOLLOW=y
-CONFIG_RUN_PARTS=y
-CONFIG_START_STOP_DAEMON=y
-CONFIG_WHICH=y
-
-#
-# Editors
-#
-CONFIG_AWK=y
-CONFIG_FEATURE_AWK_MATH=y
-# CONFIG_PATCH is not set
-CONFIG_SED=y
-CONFIG_VI=y
-CONFIG_FEATURE_VI_COLON=y
-CONFIG_FEATURE_VI_YANKMARK=y
-CONFIG_FEATURE_VI_SEARCH=y
-CONFIG_FEATURE_VI_USE_SIGNALS=y
-# CONFIG_FEATURE_VI_DOT_CMD is not set
-# CONFIG_FEATURE_VI_READONLY is not set
-# CONFIG_FEATURE_VI_SETOPTS is not set
-# CONFIG_FEATURE_VI_SET is not set
-CONFIG_FEATURE_VI_WIN_RESIZE=y
-CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
-
-#
-# Finding Utilities
-#
-CONFIG_FIND=y
-CONFIG_FEATURE_FIND_MTIME=y
-CONFIG_FEATURE_FIND_PERM=y
-CONFIG_FEATURE_FIND_TYPE=y
-CONFIG_FEATURE_FIND_XDEV=y
-CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_FEATURE_FIND_INUM is not set
-CONFIG_GREP=y
-CONFIG_FEATURE_GREP_EGREP_ALIAS=y
-CONFIG_FEATURE_GREP_FGREP_ALIAS=y
-CONFIG_FEATURE_GREP_CONTEXT=y
-CONFIG_XARGS=y
-# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
-# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
-# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
-# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
-
-#
-# Init Utilities
-#
-# CONFIG_INIT is not set
-# CONFIG_HALT is not set
-# CONFIG_POWEROFF is not set
-# CONFIG_REBOOT is not set
-# CONFIG_MESG is not set
-
-#
-# Login/Password Management Utilities
-#
-# CONFIG_USE_BB_PWD_GRP is not set
-# CONFIG_ADDGROUP is not set
-# CONFIG_DELGROUP is not set
-# CONFIG_ADDUSER is not set
-# CONFIG_DELUSER is not set
-# CONFIG_GETTY is not set
-CONFIG_FEATURE_U_W_TMP=y
-# CONFIG_LOGIN is not set
-# CONFIG_PASSWD is not set
-# CONFIG_SU is not set
-# CONFIG_SULOGIN is not set
-# CONFIG_VLOCK is not set
-
-#
-# Miscellaneous Utilities
-#
-# CONFIG_ADJTIMEX is not set
-# CONFIG_CROND is not set
-# CONFIG_CRONTAB is not set
-CONFIG_DC=y
-# CONFIG_DEVFSD is not set
-# CONFIG_LAST is not set
-# CONFIG_HDPARM is not set
-# CONFIG_MAKEDEVS is not set
-# CONFIG_MT is not set
-# CONFIG_RX is not set
-CONFIG_STRINGS=y
-# CONFIG_TIME is not set
-# CONFIG_WATCHDOG is not set
-
-#
-# Linux Module Utilities
-#
-CONFIG_INSMOD=y
-CONFIG_FEATURE_2_4_MODULES=y
-CONFIG_FEATURE_2_6_MODULES=y
-# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
-CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS=y
-# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
-CONFIG_FEATURE_INSMOD_LOAD_MAP=y
-CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL=y
-CONFIG_LSMOD=y
-CONFIG_MODPROBE=y
-CONFIG_RMMOD=y
-CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
-
-#
-# Networking Utilities
-#
-CONFIG_FEATURE_IPV6=y
-# CONFIG_ARPING is not set
-# CONFIG_FTPGET is not set
-# CONFIG_FTPPUT is not set
-CONFIG_HOSTNAME=y
-# CONFIG_HTTPD is not set
-CONFIG_IFCONFIG=y
-CONFIG_FEATURE_IFCONFIG_STATUS=y
-# CONFIG_FEATURE_IFCONFIG_SLIP is not set
-# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
-CONFIG_FEATURE_IFCONFIG_HW=y
-# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
-CONFIG_IFUPDOWN=y
-# CONFIG_FEATURE_IFUPDOWN_IP is not set
-CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
-CONFIG_FEATURE_IFUPDOWN_IPV4=y
-CONFIG_FEATURE_IFUPDOWN_IPV6=y
-# CONFIG_FEATURE_IFUPDOWN_IPX is not set
-CONFIG_FEATURE_IFUPDOWN_MAPPING=y
-# CONFIG_INETD is not set
-CONFIG_IP=y
-CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_FEATURE_IP_LINK=y
-CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_FEATURE_IP_TUNNEL=y
-# CONFIG_IPCALC is not set
-# CONFIG_IPADDR is not set
-# CONFIG_IPLINK is not set
-# CONFIG_IPROUTE is not set
-# CONFIG_IPTUNNEL is not set
-# CONFIG_NAMEIF is not set
-CONFIG_NC=y
-CONFIG_NETSTAT=y
-CONFIG_NSLOOKUP=y
-CONFIG_PING=y
-CONFIG_FEATURE_FANCY_PING=y
-CONFIG_PING6=y
-CONFIG_FEATURE_FANCY_PING6=y
-CONFIG_ROUTE=y
-CONFIG_TELNET=y
-# CONFIG_FEATURE_TELNET_TTYPE is not set
-CONFIG_FEATURE_TELNET_AUTOLOGIN=y
-# CONFIG_TELNETD is not set
-CONFIG_TFTP=y
-CONFIG_FEATURE_TFTP_GET=y
-CONFIG_FEATURE_TFTP_PUT=y
-# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
-# CONFIG_FEATURE_TFTP_DEBUG is not set
-CONFIG_TRACEROUTE=y
-# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
-# CONFIG_VCONFIG is not set
-CONFIG_WGET=y
-CONFIG_FEATURE_WGET_STATUSBAR=y
-CONFIG_FEATURE_WGET_AUTHENTICATION=y
-CONFIG_FEATURE_WGET_IP6_LITERAL=y
-
-#
-# udhcp Server/Client
-#
-# CONFIG_UDHCPD is not set
-CONFIG_UDHCPC=y
-CONFIG_FEATURE_UDHCP_SYSLOG=y
-# CONFIG_FEATURE_UDHCP_DEBUG is not set
-
-#
-# Process Utilities
-#
-CONFIG_FREE=y
-CONFIG_KILL=y
-CONFIG_KILLALL=y
-# CONFIG_PIDOF is not set
-CONFIG_PS=y
-CONFIG_RENICE=y
-CONFIG_TOP=y
-FEATURE_CPU_USAGE_PERCENTAGE=y
-CONFIG_UPTIME=y
-# CONFIG_SYSCTL is not set
-
-#
-# Another Bourne-like Shell
-#
-CONFIG_FEATURE_SH_IS_ASH=y
-# CONFIG_FEATURE_SH_IS_HUSH is not set
-# CONFIG_FEATURE_SH_IS_LASH is not set
-# CONFIG_FEATURE_SH_IS_MSH is not set
-# CONFIG_FEATURE_SH_IS_NONE is not set
-CONFIG_ASH=y
-
-#
-# Ash Shell Options
-#
-CONFIG_ASH_JOB_CONTROL=y
-CONFIG_ASH_ALIAS=y
-CONFIG_ASH_MATH_SUPPORT=y
-# CONFIG_ASH_MATH_SUPPORT_64 is not set
-CONFIG_ASH_GETOPTS=y
-# CONFIG_ASH_CMDCMD is not set
-# CONFIG_ASH_MAIL is not set
-CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
-# CONFIG_ASH_RANDOM_SUPPORT is not set
-# CONFIG_HUSH is not set
-# CONFIG_LASH is not set
-# CONFIG_MSH is not set
-
-#
-# Bourne Shell Options
-#
-CONFIG_FEATURE_SH_EXTRA_QUIET=y
-# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
-CONFIG_FEATURE_COMMAND_EDITING=y
-CONFIG_FEATURE_COMMAND_HISTORY=63
-# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
-CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
-# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
-CONFIG_FEATURE_SH_FANCY_PROMPT=y
-
-#
-# System Logging Utilities
-#
-CONFIG_SYSLOGD=y
-# CONFIG_FEATURE_ROTATE_LOGFILE is not set
-CONFIG_FEATURE_REMOTE_LOG=y
-CONFIG_FEATURE_IPC_SYSLOG=y
-CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
-CONFIG_LOGREAD=y
-# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
-CONFIG_KLOGD=y
-CONFIG_LOGGER=y
-
-#
-# Linux System Utilities
-#
-CONFIG_DMESG=y
-CONFIG_FBSET=y
-CONFIG_FEATURE_FBSET_FANCY=y
-# CONFIG_FEATURE_FBSET_READMODE is not set
-# CONFIG_FDFLUSH is not set
-# CONFIG_FDFORMAT is not set
-CONFIG_FDISK=y
-FDISK_SUPPORT_LARGE_DISKS=y
-CONFIG_FEATURE_FDISK_WRITABLE=y
-# CONFIG_FEATURE_AIX_LABEL is not set
-# CONFIG_FEATURE_SGI_LABEL is not set
-# CONFIG_FEATURE_SUN_LABEL is not set
-# CONFIG_FEATURE_OSF_LABEL is not set
-# CONFIG_FEATURE_FDISK_ADVANCED is not set
-# CONFIG_FREERAMDISK is not set
-# CONFIG_FSCK_MINIX is not set
-# CONFIG_MKFS_MINIX is not set
-# CONFIG_GETOPT is not set
-CONFIG_HEXDUMP=y
-CONFIG_HWCLOCK=y
-CONFIG_FEATURE_HWCLOCK_LONGOPTIONS=y
-CONFIG_LOSETUP=y
-CONFIG_MKSWAP=y
-CONFIG_MORE=y
-CONFIG_FEATURE_USE_TERMIOS=y
-CONFIG_PIVOT_ROOT=y
-# CONFIG_RDATE is not set
-CONFIG_SWAPONOFF=y
-CONFIG_MOUNT=y
-CONFIG_NFSMOUNT=y
-CONFIG_UMOUNT=y
-CONFIG_FEATURE_MOUNT_FORCE=y
-
-#
-# Common options for mount/umount
-#
-CONFIG_FEATURE_MOUNT_LOOP=y
-# CONFIG_FEATURE_MTAB_SUPPORT is not set
-
-#
-# Debugging Options
-#
-# CONFIG_DEBUG is not set
diff --git a/packages/busybox/busybox-1.2.0/nylon/defconfig b/packages/busybox/busybox-1.2.0/nylon/defconfig
index 4d61408bf8..ee3373a62c 100644
--- a/packages/busybox/busybox-1.2.0/nylon/defconfig
+++ b/packages/busybox/busybox-1.2.0/nylon/defconfig
@@ -54,8 +54,8 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
CONFIG_CPIO=y
-CONFIG_DPKG=y
-CONFIG_DPKG_DEB=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
diff --git a/packages/busybox/busybox-1.2.1/angstrom/defconfig b/packages/busybox/busybox-1.2.1/angstrom/defconfig
index 7308eead76..eb0b8d7c64 100644
--- a/packages/busybox/busybox-1.2.1/angstrom/defconfig
+++ b/packages/busybox/busybox-1.2.1/angstrom/defconfig
@@ -421,7 +421,7 @@ CONFIG_RDATE=y
# CONFIG_READPROFILE is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
-# CONFIG_SWITCH_ROOT is not set
+CONFIG_SWITCH_ROOT=y
CONFIG_UMOUNT=y
# CONFIG_FEATURE_UMOUNT_ALL is not set
diff --git a/packages/busybox/busybox-1.2.1/angstrom/syslog.conf b/packages/busybox/busybox-1.2.1/angstrom/syslog.conf
new file mode 100644
index 0000000000..047e82419e
--- /dev/null
+++ b/packages/busybox/busybox-1.2.1/angstrom/syslog.conf
@@ -0,0 +1,9 @@
+DESTINATION="file" # log destinations (buffer file remote)
+MARKINT=20 # interval between --mark-- entries [min]
+REDUCE=no # reduced-size logging
+BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
+LOGFILE=/var/log/messages # file: where to log
+ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
+ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
+REMOTE=loghost:514 # remote: where to log
+FOREGROUND=no # run in foreground (don't use!)
diff --git a/packages/busybox/busybox-1.2.1/sparc/.mtn2git_empty b/packages/busybox/busybox-1.2.1/foonas/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.1/sparc/.mtn2git_empty
+++ b/packages/busybox/busybox-1.2.1/foonas/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.2.1/foonas/defconfig b/packages/busybox/busybox-1.2.1/foonas/defconfig
new file mode 100644
index 0000000000..322ccd7740
--- /dev/null
+++ b/packages/busybox/busybox-1.2.1/foonas/defconfig
@@ -0,0 +1,643 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+CONFIG_NITPICK=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+CONFIG_FEATURE_INSTALLER=y
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="powerpc-linux-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=1
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+CONFIG_CKSUM=y
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_FEATURE_DIFF_MINIMAL=y
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+CONFIG_INSTALL=y
+CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+CONFIG_FEATURE_MV_LONG_OPTIONS=y
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+# CONFIG_DUMPKMAP is not set
+# CONFIG_LOADFONT is not set
+# CONFIG_LOADKMAP is not set
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+CONFIG_INIT=y
+# CONFIG_DEBUG_INIT is not set
+CONFIG_FEATURE_USE_INITTAB=y
+CONFIG_FEATURE_INIT_SCTTY=y
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+CONFIG_FEATURE_INITRD=y
+CONFIG_HALT=y
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+CONFIG_ADDGROUP=y
+CONFIG_DELGROUP=y
+CONFIG_ADDUSER=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+CONFIG_FEATURE_UTMP=y
+CONFIG_FEATURE_WTMP=y
+CONFIG_LOGIN=y
+# CONFIG_FEATURE_SECURETTY is not set
+CONFIG_PASSWD=y
+CONFIG_SU=y
+CONFIG_SULOGIN=y
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+CONFIG_LSATTR=y
+CONFIG_MKE2FS=y
+CONFIG_TUNE2FS=y
+CONFIG_E2LABEL=y
+CONFIG_FINDFS=y
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+# CONFIG_FBSET is not set
+# CONFIG_FEATURE_FBSET_FANCY is not set
+# CONFIG_FEATURE_FBSET_READMODE is not set
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+CONFIG_GETOPT=y
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+CONFIG_READPROFILE=y
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+CONFIG_CROND=y
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_CRONTAB=y
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+CONFIG_LAST=y
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+CONFIG_RX=y
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+CONFIG_ARPING=y
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+CONFIG_FEATURE_IFCONFIG_SLIP=y
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+CONFIG_NAMEIF=y
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+# CONFIG_APP_UDHCPD is not set
+CONFIG_APP_UDHCPC=y
+# CONFIG_APP_DUMPLEASES is not set
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_BUILTIN_ECHO=y
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
+CONFIG_ASH_RANDOM_SUPPORT=y
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION=y
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.2.1/nylon/defconfig b/packages/busybox/busybox-1.2.1/nylon/defconfig
index 67c5408ada..8a7aa8b00f 100644
--- a/packages/busybox/busybox-1.2.1/nylon/defconfig
+++ b/packages/busybox/busybox-1.2.1/nylon/defconfig
@@ -54,8 +54,8 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
CONFIG_CPIO=y
-CONFIG_DPKG=y
-CONFIG_DPKG_DEB=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
diff --git a/packages/busybox/busybox-1.2.1/slugos/defconfig b/packages/busybox/busybox-1.2.1/slugos/defconfig
index c35b4f7f70..c76954e711 100644
--- a/packages/busybox/busybox-1.2.1/slugos/defconfig
+++ b/packages/busybox/busybox-1.2.1/slugos/defconfig
@@ -37,7 +37,7 @@ CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
CONFIG_LFS=y
USING_CROSS_COMPILER=y
-CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CROSS_COMPILER_PREFIX="armeb-linux-"
CONFIG_BUILD_AT_ONCE=y
#
@@ -133,8 +133,8 @@ CONFIG_FEATURE_DIFF_BINARY=y
CONFIG_FEATURE_DIFF_DIR=y
# CONFIG_FEATURE_DIFF_MINIMAL is not set
CONFIG_DIRNAME=y
-# CONFIG_DOS2UNIX is not set
-# CONFIG_UNIX2DOS is not set
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
CONFIG_DU=y
CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
CONFIG_ECHO=y
@@ -287,12 +287,24 @@ CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
# Finding Utilities
#
# CONFIG_FIND is not set
-CONFIG_FEATURE_FIND_EXEC=y
+# CONFIG_FEATURE_FIND_PRINT0 is not set
+# CONFIG_FEATURE_FIND_MTIME is not set
+# CONFIG_FEATURE_FIND_MMIN is not set
+# CONFIG_FEATURE_FIND_PERM is not set
+# CONFIG_FEATURE_FIND_TYPE is not set
+# CONFIG_FEATURE_FIND_XDEV is not set
+# CONFIG_FEATURE_FIND_NEWER is not set
+# CONFIG_FEATURE_FIND_INUM is not set
+# CONFIG_FEATURE_FIND_EXEC is not set
CONFIG_GREP=y
CONFIG_FEATURE_GREP_EGREP_ALIAS=y
CONFIG_FEATURE_GREP_FGREP_ALIAS=y
CONFIG_FEATURE_GREP_CONTEXT=y
# CONFIG_XARGS is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
#
# Init Utilities
@@ -331,10 +343,10 @@ CONFIG_FEATURE_UTMP=y
# Linux Ext2 FS Progs
#
CONFIG_CHATTR=y
-CONFIG_E2FSCK=y
-CONFIG_FSCK=y
+# CONFIG_E2FSCK is not set
+# CONFIG_FSCK is not set
# CONFIG_LSATTR is not set
-CONFIG_MKE2FS=y
+# CONFIG_MKE2FS is not set
# CONFIG_TUNE2FS is not set
# CONFIG_E2LABEL is not set
# CONFIG_FINDFS is not set
@@ -343,16 +355,19 @@ CONFIG_MKE2FS=y
# Linux Module Utilities
#
# CONFIG_INSMOD is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
# CONFIG_RMMOD is not set
# CONFIG_LSMOD is not set
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
# CONFIG_MODPROBE is not set
-
-#
-# Options common to multiple modutils
-#
-CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
# CONFIG_FEATURE_2_4_MODULES is not set
-CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_2_6_MODULES is not set
# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
#
@@ -360,6 +375,8 @@ CONFIG_FEATURE_2_6_MODULES=y
#
CONFIG_DMESG=y
# CONFIG_FBSET is not set
+# CONFIG_FEATURE_FBSET_FANCY is not set
+# CONFIG_FEATURE_FBSET_READMODE is not set
# CONFIG_FDFLUSH is not set
# CONFIG_FDFORMAT is not set
CONFIG_FDISK=y
@@ -373,6 +390,7 @@ CONFIG_FEATURE_OSF_LABEL=y
# CONFIG_FREERAMDISK is not set
# CONFIG_FSCK_MINIX is not set
# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
# CONFIG_GETOPT is not set
CONFIG_HEXDUMP=y
CONFIG_HWCLOCK=y
@@ -388,16 +406,22 @@ CONFIG_MKSWAP=y
# CONFIG_FEATURE_MKSWAP_V0 is not set
CONFIG_MORE=y
CONFIG_FEATURE_USE_TERMIOS=y
-# CONFIG_MOUNT is not set
-# CONFIG_FEATURE_MOUNT_NFS is not set
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
CONFIG_PIVOT_ROOT=y
CONFIG_RDATE=y
# CONFIG_READPROFILE is not set
# CONFIG_SETARCH is not set
# CONFIG_SWAPONOFF is not set
# CONFIG_SWITCH_ROOT is not set
-# CONFIG_UMOUNT is not set
-# CONFIG_FEATURE_UMOUNT_ALL is not set
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
#
# Miscellaneous Utilities
@@ -486,6 +510,11 @@ CONFIG_FEATURE_IFUPDOWN_IPV6=y
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
# CONFIG_FEATURE_INETD_RPC is not set
# CONFIG_IP is not set
+# CONFIG_FEATURE_IP_ADDRESS is not set
+# CONFIG_FEATURE_IP_LINK is not set
+# CONFIG_FEATURE_IP_ROUTE is not set
+# CONFIG_FEATURE_IP_TUNNEL is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
# CONFIG_IPADDR is not set
# CONFIG_IPLINK is not set
# CONFIG_IPROUTE is not set
@@ -523,7 +552,7 @@ CONFIG_TRACEROUTE=y
#
# CONFIG_APP_UDHCPD is not set
CONFIG_APP_UDHCPC=y
-CONFIG_APP_DUMPLEASES=y
+# CONFIG_APP_DUMPLEASES is not set
CONFIG_FEATURE_UDHCP_SYSLOG=y
# CONFIG_FEATURE_UDHCP_DEBUG is not set
# CONFIG_VCONFIG is not set
diff --git a/packages/busybox/busybox-1.2.2/angstrom/defconfig b/packages/busybox/busybox-1.2.2/angstrom/defconfig
index 7308eead76..eb0b8d7c64 100644
--- a/packages/busybox/busybox-1.2.2/angstrom/defconfig
+++ b/packages/busybox/busybox-1.2.2/angstrom/defconfig
@@ -421,7 +421,7 @@ CONFIG_RDATE=y
# CONFIG_READPROFILE is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
-# CONFIG_SWITCH_ROOT is not set
+CONFIG_SWITCH_ROOT=y
CONFIG_UMOUNT=y
# CONFIG_FEATURE_UMOUNT_ALL is not set
diff --git a/packages/busybox/busybox-1.2.2/nylon/defconfig b/packages/busybox/busybox-1.2.2/nylon/defconfig
index 67c5408ada..8a7aa8b00f 100644
--- a/packages/busybox/busybox-1.2.2/nylon/defconfig
+++ b/packages/busybox/busybox-1.2.2/nylon/defconfig
@@ -54,8 +54,8 @@ CONFIG_AR=y
CONFIG_FEATURE_AR_LONG_FILENAMES=y
CONFIG_BUNZIP2=y
CONFIG_CPIO=y
-CONFIG_DPKG=y
-CONFIG_DPKG_DEB=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
CONFIG_GUNZIP=y
CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
diff --git a/packages/busybox/busybox-1.3.1/angstrom/defconfig b/packages/busybox/busybox-1.3.1/angstrom/defconfig
index 7308eead76..eb0b8d7c64 100644
--- a/packages/busybox/busybox-1.3.1/angstrom/defconfig
+++ b/packages/busybox/busybox-1.3.1/angstrom/defconfig
@@ -421,7 +421,7 @@ CONFIG_RDATE=y
# CONFIG_READPROFILE is not set
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
-# CONFIG_SWITCH_ROOT is not set
+CONFIG_SWITCH_ROOT=y
CONFIG_UMOUNT=y
# CONFIG_FEATURE_UMOUNT_ALL is not set
diff --git a/packages/busybox/busybox-1.2.1/wrt54/.mtn2git_empty b/packages/busybox/busybox-1.5.0/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.1/wrt54/.mtn2git_empty
+++ b/packages/busybox/busybox-1.5.0/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.2.2/openmn/.mtn2git_empty b/packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.2/openmn/.mtn2git_empty
+++ b/packages/busybox/busybox-1.5.0/angstrom/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.5.0/angstrom/defconfig b/packages/busybox/busybox-1.5.0/angstrom/defconfig
new file mode 100644
index 0000000000..eb0b8d7c64
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/angstrom/defconfig
@@ -0,0 +1,647 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.5.0/busybox-mdev.sh b/packages/busybox/busybox-1.5.0/busybox-mdev.sh
new file mode 100755
index 0000000000..9744322fa9
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/busybox-mdev.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+MDEV=/sbin/mdev
+DESC="Busybox mdev setup"
+
+# Complain if thing's aren't right
+if [ ! -e /proc/filesystems ]; then
+ echo "mdev requires a mounted procfs, not started."
+ exit 1
+fi
+
+if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
+ echo "mdev requires tmpfs support, not started."
+ exit 1
+fi
+
+if [ ! -d /sys/class/ ]; then
+ echo "mdev requires a mounted sysfs, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "mdev requires hotplug support, not started."
+ exit 1
+fi
+
+# We need to unmount /dev/pts/ and remount it later over the tmpfs
+if mountpoint -q /dev/pts/; then
+ umount -l /dev/pts/
+fi
+
+if mountpoint -q /dev/shm/; then
+ umount -l /dev/shm/
+fi
+
+# Create tmpfs for /dev
+echo "Creating tmpfs at /dev"
+mount -t tmpfs tmpfs /dev -o size=800k
+
+# Register mdev as hotplug event helper
+echo "$MDEV" > /proc/sys/kernel/hotplug
+
+# Populate /dev from /sys info
+echo "Populating /dev using mdev"
+$MDEV -s
+
+# Touch .udev to inform scripts that /dev needs no further setup
+touch /dev/.udev
+
+# Mount devpts
+TTYGRP=5
+TTYMODE=620
+mkdir -m 755 -p /dev/pts
+if [ ! -e /dev/ptmx ]; then
+ mknod -m 666 /dev/ptmx c 5 2
+fi
+mount -t devpts devpts /dev/pts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
+
+# Make shm directory
+mkdir -m 755 -p /dev/shm
+
+# Make extraneous links
+ln -sf /proc/self/fd /dev/fd
+ln -sf /proc/self/fd/0 /dev/stdin
+ln -sf /proc/self/fd/1 /dev/stdout
+ln -sf /proc/self/fd/2 /dev/stderr
+ln -sf /proc/kcore /dev/core
+ln -sf /proc/asound/oss/sndstat /dev/sndstat
+
+exit 0
diff --git a/packages/busybox/busybox-1.5.0/defconfig b/packages/busybox/busybox-1.5.0/defconfig
new file mode 100644
index 0000000000..7308eead76
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/defconfig
@@ -0,0 +1,647 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_SWITCH_ROOT is not set
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.5.0/df_rootfs.patch b/packages/busybox/busybox-1.5.0/df_rootfs.patch
new file mode 100644
index 0000000000..3819b59106
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/df_rootfs.patch
@@ -0,0 +1,44 @@
+--- busybox-1.3.1.orig/coreutils/df.c 2006-12-26 22:54:50.000000000 -0600
++++ busybox-1.3.1/coreutils/df.c 2006-12-30 00:45:10.000000000 -0600
+@@ -47,6 +47,7 @@
+ struct statfs s;
+ static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
+ const char *disp_units_hdr = hdr_1k;
++ int root_done = 0;
+
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ opt_complementary = "h-km:k-hm:m-hk";
+@@ -77,7 +78,7 @@
+
+ do {
+ const char *device;
+- const char *mount_point;
++ char *mount_point;
+
+ if (mount_table) {
+ mount_entry = getmntent(mount_table);
+@@ -116,17 +117,20 @@
+ ) / (blocks_used + s.f_bavail);
+ }
+
+- if (strcmp(device, "rootfs") == 0) {
+- continue;
+- } else if (strcmp(device, "/dev/root") == 0) {
++ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) {
+ /* Adjusts device to be the real root device,
+ * or leaves device alone if it can't find it */
+- device = find_block_device("/");
++ device = find_block_device(mount_point);
+ if (!device) {
+ goto SET_ERROR;
+ }
+ }
+
++ if (strcmp(mount_point, "/") == 0) {
++ if (root_done) continue;
++ root_done = 1;
++ }
++
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ printf("%-20s %9s ", device,
+ make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
diff --git a/packages/busybox/busybox-1.5.0/dhcp-hostname.patch b/packages/busybox/busybox-1.5.0/dhcp-hostname.patch
new file mode 100644
index 0000000000..8e7e68a4c9
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/dhcp-hostname.patch
@@ -0,0 +1,20 @@
+--- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-03-22 15:21:23.000000000 -0500
++++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 08:42:41.000000000 -0500
+@@ -136,6 +136,7 @@
+ int retval;
+ int len;
+ int no_clientid = 0;
++ char hostbuf[256]; /* (default hostname patch) */
+ fd_set rfds;
+ struct timeval tv;
+ struct dhcpMessage packet;
+@@ -214,6 +215,9 @@
+ client_config.background_if_no_lease = 1;
+ if (opt & OPT_h)
+ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0);
++ else /* (default hostname patch) default hostname is our hostname as set */
++ if (gethostname(hostbuf, sizeof(hostbuf)) == 0)
++ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, hostbuf, 0);
+ if (opt & OPT_F) {
+ client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3);
+ /* Flags: 0000NEOS
diff --git a/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch b/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch
new file mode 100644
index 0000000000..f49aa16580
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/dhcp-increase-retries.patch
@@ -0,0 +1,11 @@
+--- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-04-01 08:42:41.000000000 -0500
++++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 21:03:42.000000000 -0500
+@@ -188,7 +188,7 @@
+ /* Default options. */
+ client_config.interface = "eth0";
+ client_config.script = DEFAULT_SCRIPT;
+- client_config.retries = 3;
++ client_config.retries = 5;
+ client_config.timeout = 3;
+
+ /* Parse command line */
diff --git a/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch
new file mode 100644
index 0000000000..812a0b3ee8
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/ifupdown-spurious-environ.patch
@@ -0,0 +1,16 @@
+--- busybox-1.5.0/networking/ifupdown.c~ 2007-03-22 15:21:23.000000000 -0500
++++ busybox-1.5.0/networking/ifupdown.c 2007-04-01 08:52:25.000000000 -0500
+@@ -83,6 +83,13 @@
+ struct mapping_defn_t *mappings;
+ };
+
++/* XXX - ifupdown-spurious-environ.patch -- appears to be long obsolete,
++ * but is carried forward because it doesn't seem to hurt anything and
++ * it's non-obvious how to remove the patch from OE without breaking
++ * old builds. MJW
++ */
++#define environ local_environ
++
+ #define OPTION_STR "anvf" USE_FEATURE_IFUPDOWN_MAPPING("m") "i:"
+ enum {
+ OPT_do_all = 0x1,
diff --git a/packages/busybox/busybox-1.2.2/sparc/.mtn2git_empty b/packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.2/sparc/.mtn2git_empty
+++ b/packages/busybox/busybox-1.5.0/mnci/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.5.0/mnci/defconfig b/packages/busybox/busybox-1.5.0/mnci/defconfig
new file mode 100644
index 0000000000..6a04803f18
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/mnci/defconfig
@@ -0,0 +1,643 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+# CONFIG_SHOW_USAGE is not set
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_LOCALE_SUPPORT is not set
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SUID=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+# CONFIG_LFS is not set
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-linux-"
+# CONFIG_BUILD_AT_ONCE is not set
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+CONFIG_CMP=y
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_DD=y
+# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+# CONFIG_DIFF is not set
+# CONFIG_FEATURE_DIFF_BINARY is not set
+# CONFIG_FEATURE_DIFF_DIR is not set
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+# CONFIG_LOGNAME is not set
+CONFIG_LS=y
+# CONFIG_FEATURE_LS_FILETYPES is not set
+# CONFIG_FEATURE_LS_FOLLOWLINKS is not set
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+# CONFIG_FEATURE_LS_COLOR is not set
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+# CONFIG_FEATURE_FANCY_SLEEP is not set
+CONFIG_SORT=y
+# CONFIG_FEATURE_SORT_BIG is not set
+CONFIG_STAT=y
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+# CONFIG_FEATURE_FANCY_TAIL is not set
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+# CONFIG_FEATURE_TR_CLASSES is not set
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+# CONFIG_WATCH is not set
+CONFIG_WC=y
+# CONFIG_WHO is not set
+# CONFIG_WHOAMI is not set
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+# CONFIG_PATCH is not set
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
+# CONFIG_FEATURE_GREP_CONTEXT is not set
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+CONFIG_FEATURE_SHADOWPASSWDS=y
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+CONFIG_ADDGROUP=y
+CONFIG_DELGROUP=y
+CONFIG_ADDUSER=y
+CONFIG_DELUSER=y
+CONFIG_GETTY=y
+# CONFIG_FEATURE_UTMP is not set
+# CONFIG_FEATURE_WTMP is not set
+CONFIG_LOGIN=y
+# CONFIG_FEATURE_SECURETTY is not set
+CONFIG_PASSWD=y
+CONFIG_SU=y
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+# CONFIG_CHATTR is not set
+# CONFIG_E2FSCK is not set
+# CONFIG_FSCK is not set
+# CONFIG_LSATTR is not set
+# CONFIG_MKE2FS is not set
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+# CONFIG_FBSET is not set
+# CONFIG_FEATURE_FBSET_FANCY is not set
+# CONFIG_FEATURE_FBSET_READMODE is not set
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+# CONFIG_FDISK is not set
+# FDISK_SUPPORT_LARGE_DISKS is not set
+# CONFIG_FEATURE_FDISK_WRITABLE is not set
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+CONFIG_GETOPT=y
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
+# CONFIG_IPCRM is not set
+CONFIG_IPCS=y
+# CONFIG_LOSETUP is not set
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_MKSWAP is not set
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+# CONFIG_RDATE is not set
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+# CONFIG_SWAPONOFF is not set
+# CONFIG_SWITCH_ROOT is not set
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+CONFIG_ADJTIMEX=y
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+CONFIG_FEATURE_DEVFS=y
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+# CONFIG_FEATURE_LESS_BRACKETS is not set
+# CONFIG_FEATURE_LESS_FLAGS is not set
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+# CONFIG_FEATURE_IPV6 is not set
+CONFIG_ARPING=y
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+# CONFIG_IP is not set
+# CONFIG_FEATURE_IP_ADDRESS is not set
+# CONFIG_FEATURE_IP_LINK is not set
+# CONFIG_FEATURE_IP_ROUTE is not set
+# CONFIG_FEATURE_IP_TUNNEL is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_PING6 is not set
+# CONFIG_FEATURE_FANCY_PING6 is not set
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+# CONFIG_TFTP is not set
+# CONFIG_FEATURE_TFTP_GET is not set
+# CONFIG_FEATURE_TFTP_PUT is not set
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+# CONFIG_APP_UDHCPD is not set
+CONFIG_APP_UDHCPC=y
+# CONFIG_APP_DUMPLEASES is not set
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+# CONFIG_FEATURE_WGET_STATUSBAR is not set
+# CONFIG_FEATURE_WGET_AUTHENTICATION is not set
+# CONFIG_FEATURE_WGET_IP6_LITERAL is not set
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+CONFIG_ZCIP=y
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+# CONFIG_FUSER is not set
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_PIDOF is not set
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+# CONFIG_UPTIME is not set
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_BUILTIN_ECHO=y
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+# CONFIG_ASH_EXPAND_PRMT is not set
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=15
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+# CONFIG_FEATURE_ROTATE_LOGFILE is not set
+# CONFIG_FEATURE_REMOTE_LOG is not set
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.2.2/wrt54/.mtn2git_empty b/packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.2.2/wrt54/.mtn2git_empty
+++ b/packages/busybox/busybox-1.5.0/nylon/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.5.0/nylon/defconfig b/packages/busybox/busybox-1.5.0/nylon/defconfig
new file mode 100644
index 0000000000..67c5408ada
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/nylon/defconfig
@@ -0,0 +1,568 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_FEATURE_VERBOSE_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_LOCALE_SUPPORT is not set
+CONFIG_FEATURE_DEVFS=y
+# CONFIG_EJECT is not set
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SUID_CONFIG=y
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_LFS is not set
+# USING_CROSS_COMPILER is not set
+EXTRA_CFLAGS_OPTIONS=""
+# CONFIG_BUILD_AT_ONCE is not set
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+CONFIG_FEATURE_AR_LONG_FILENAMES=y
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+CONFIG_DPKG=y
+CONFIG_DPKG_DEB=y
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+CONFIG_FEATURE_GUNZIP_UNCOMPRESS=y
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+# CONFIG_FEATURE_TAR_BZIP2 is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+CONFIG_FEATURE_TAR_COMPRESS=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_UNCOMPRESS=y
+# CONFIG_UNLZMA is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Common options for dpkg and dpkg_deb
+#
+CONFIG_FEATURE_DEB_TAR_GZ=y
+CONFIG_FEATURE_DEB_TAR_BZ2=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAL=y
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+CONFIG_DIFF=y
+# CONFIG_FEATURE_DIFF_BINARY is not set
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+# CONFIG_COMM is not set
+# CONFIG_CKSUM is not set
+# CONFIG_FEATURE_DD_SIGNAL_HANDLING is not set
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_CMP=y
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+
+#
+# date (forced enabled for use with watch)
+#
+CONFIG_FEATURE_DATE_ISOFMT=y
+CONFIG_DD=y
+CONFIG_DF=y
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+CONFIG_FOLD=y
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+CONFIG_HOSTID=y
+CONFIG_ID=y
+CONFIG_INSTALL=y
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+CONFIG_LENGTH=y
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+# CONFIG_FEATURE_SORT_BIG is not set
+CONFIG_STAT=y
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+# CONFIG_TEST is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+# CONFIG_FEATURE_TR_CLASSES is not set
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls and more
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+# CONFIG_CHVT is not set
+CONFIG_CLEAR=y
+# CONFIG_DEALLOCVT is not set
+CONFIG_DUMPKMAP=y
+CONFIG_GETKEY=y
+# CONFIG_LOADFONT is not set
+CONFIG_LOADKMAP=y
+# CONFIG_OPENVT is not set
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=n
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+CONFIG_PIPE_PROGRESS=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+# CONFIG_VI is not set
+#CONFIG_FEATURE_VI_COLON=y
+#CONFIG_FEATURE_VI_YANKMARK=y
+#CONFIG_FEATURE_VI_SEARCH=y
+#CONFIG_FEATURE_VI_USE_SIGNALS=y
+#CONFIG_FEATURE_VI_DOT_CMD=y
+#CONFIG_FEATURE_VI_READONLY=y
+#CONFIG_FEATURE_VI_SETOPTS=y
+#CONFIG_FEATURE_VI_SET=y
+#CONFIG_FEATURE_VI_WIN_RESIZE=y
+#CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_HALT is not set
+# CONFIG_POWEROFF is not set
+# CONFIG_REBOOT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_U_W_TMP=y
+# CONFIG_LOGIN is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+# CONFIG_CHATTR is not set
+# CONFIG_E2FSCK is not set
+# CONFIG_FSCK is not set
+# CONFIG_LSATTR is not set
+# CONFIG_MKE2FS is not set
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+CONFIG_CROND=y
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_CRONTAB=y
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+# CONFIG_FEATURE_LESS_BRACKETS is not set
+# CONFIG_FEATURE_LESS_FLAGS is not set
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+CONFIG_WATCHDOG=y
+
+#
+# Linux Module Utilities
+#
+# CONFIG_INSMOD is not set
+# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE is not set
+# CONFIG_RMMOD is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+CONFIG_ARPING=y
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+CONFIG_HOSTNAME=y
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_WITHOUT_INETD=y
+CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y
+# CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY is not set
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+CONFIG_FEATURE_HTTPD_AUTH_MD5=y
+CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES=y
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+CONFIG_INETD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y
+CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y
+# CONFIG_FEATURE_INETD_RPC is not set
+# CONFIG_IP is not set
+CONFIG_IPCALC=y
+CONFIG_FEATURE_IPCALC_FANCY=y
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+CONFIG_NAMEIF=y
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+CONFIG_VCONFIG=y
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
+CONFIG_ZCIP=y
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+# CONFIG_FUSER is not set
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+# CONFIG_FEATURE_PS_WIDE is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+FEATURE_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+CONFIG_SYSCTL=y
+
+#
+# Another Bourne-like Shell
+#
+# CONFIG_FEATURE_SH_IS_ASH is not set
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+CONFIG_FEATURE_SH_IS_NONE=y
+# CONFIG_ASH is not set
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+# CONFIG_HWCLOCK is not set
+# CONFIG_IPCRM is not set
+CONFIG_IPCS=y
+CONFIG_LOSETUP=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+# CONFIG_MORE is not set
+CONFIG_PIVOT_ROOT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+# CONFIG_RDATE is not set
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_SWITCH_ROOT is not set
+CONFIG_MOUNT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_MOUNT_FORCE=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+CONFIG_DEBUG_YANK_SUSv2=y
diff --git a/packages/busybox/busybox-1.3.1/openmn/.mtn2git_empty b/packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.3.1/openmn/.mtn2git_empty
+++ b/packages/busybox/busybox-1.5.0/slugos/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.5.0/slugos/defconfig b/packages/busybox/busybox-1.5.0/slugos/defconfig
new file mode 100644
index 0000000000..8c61fedfdb
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/slugos/defconfig
@@ -0,0 +1,686 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.5.0
+# Mon Apr 2 17:38:36 2007
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_DESKTOP is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SYSLOG=y
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+CONFIG_FEATURE_HAVE_RPC=y
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_EXEC_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_WERROR is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_INCLUDE_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_FANCY_KEYS=y
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=15
+# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
+CONFIG_FEATURE_TAB_COMPLETION=y
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+# CONFIG_CPIO is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+CONFIG_CMP=y
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+# CONFIG_NOHUP is not set
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+# CONFIG_CHVT is not set
+CONFIG_CLEAR=y
+# CONFIG_DEALLOCVT is not set
+# CONFIG_DUMPKMAP is not set
+# CONFIG_LOADFONT is not set
+# CONFIG_LOADKMAP is not set
+# CONFIG_OPENVT is not set
+CONFIG_RESET=y
+# CONFIG_RESIZE is not set
+# CONFIG_FEATURE_RESIZE_PRINT is not set
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_INIT_SYSLOG is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+# CONFIG_FSCK is not set
+# CONFIG_LSATTR is not set
+
+#
+# Linux Module Utilities
+#
+# CONFIG_INSMOD is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+# CONFIG_RMMOD is not set
+# CONFIG_LSMOD is not set
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+# CONFIG_MODPROBE is not set
+# CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS is not set
+# CONFIG_FEATURE_MODPROBE_FANCY_ALIAS is not set
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_2_6_MODULES is not set
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+# CONFIG_FBSET is not set
+# CONFIG_FEATURE_FBSET_FANCY is not set
+# CONFIG_FEATURE_FBSET_READMODE is not set
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+CONFIG_FEATURE_OSF_LABEL=y
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+# CONFIG_LOSETUP is not set
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+# CONFIG_FEATURE_MOUNT_CIFS is not set
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+# CONFIG_SWAPONOFF is not set
+# CONFIG_SWITCH_ROOT is not set
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CHRT is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+# CONFIG_DC is not set
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_NMETER is not set
+# CONFIG_RAIDAUTORUN is not set
+# CONFIG_READAHEAD is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_ARP is not set
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+# CONFIG_IP is not set
+# CONFIG_FEATURE_IP_ADDRESS is not set
+# CONFIG_FEATURE_IP_LINK is not set
+# CONFIG_FEATURE_IP_ROUTE is not set
+# CONFIG_FEATURE_IP_TUNNEL is not set
+# CONFIG_FEATURE_IP_RULE is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPRULE is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_SERVER is not set
+# CONFIG_NC_EXTRA is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+# CONFIG_APP_UDHCPD is not set
+# CONFIG_APP_DHCPRELAY is not set
+# CONFIG_APP_DUMPLEASES is not set
+CONFIG_APP_UDHCPC=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_FEATURE_RFC3397 is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_KILLALL5 is not set
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
+
+#
+# Runit Utilities
+#
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_SV is not set
+# CONFIG_SVLOGD is not set
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
diff --git a/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch b/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch
new file mode 100644
index 0000000000..dec6c18994
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/slugos/udhcpscript.patch
@@ -0,0 +1,133 @@
+--- busybox-1.00/.pc/udhcpscript.patch/examples/udhcp/simple.script 2004-10-13 00:18:05.000000000 -0700
++++ busybox-1.00/examples/udhcp/simple.script 2005-06-05 15:08:28.432605118 -0700
+@@ -1,40 +1,101 @@
+ #!/bin/sh
++# openslug UDHCP client script
++# this must set the HW address (MAC) on the interface
++#
++. /etc/default/functions
+
+-# udhcpc script edited by Tim Riker <Tim@Rikers.org>
+
+-[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
++echodns(){
++ local dns
++ if test $# -gt 0
++ then
++ for dns in "$@"
++ do
++ echo "nameserver $dns"
++ done
++ fi
++}
++
++# Output the correct contents for resolv.conf
++mkresolv() {
++ test -n "$domain" && echo "search $domain"
++ echodns $dns
++}
++
++# checksum of a file (or stdin if -)
++md5strm() {
++ md5sum $1 2>/dev/null | sed -n 's/^\([0-9A-Za-z]*\).*$/\1/p'
++}
++
++bind() {
++ local B N metric i olddomain
++ B=
++ test -n "$broadcast" && B="broadcast $broadcast"
++ N=
++ test -n "$subnet" && N="netmask $subnet"
++ ifconfig "$interface" "$ip" $B $N up
++
++ # If given router information delete the old information and
++ # enter new stuff, routers get metrics incremented by 1
++ # between each (this is somewhat arbitrary)
++ if test -n "$router"
++ then
++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null
++ do
++ :
++ done
+
+-RESOLV_CONF="/etc/resolv.conf"
+-[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
+-[ -n "$subnet" ] && NETMASK="netmask $subnet"
++ metric=0
++ for i in $router
++ do
++ route add default gw "$i" dev "$interface" metric $((metric++))
++ done
++ fi
++
++ olddomain=
++ test -r /etc/defaultdomain && olddomain="$(cat /etc/defaultdomain)"
++ if test -n "$domain" -a "$domain" != "$olddomain"
++ then
++ echo "$domain" >/etc/defaultdomain
++ # and update the kernel view too
++ echo "$domain" >/proc/sys/kernel/domainname
++ fi
++
++ # Update /etc/resolv.conf to reflect domain and dns information,
++ # this always clears resolv.conf if none is given
++ md5old="$(md5strm /etc/resolv.conf)"
++ md5new="$(mkresolv | md5strm -)"
++ test "$md5old" != "$md5new" && mkresolv >/etc/resolv.conf
++}
+
+ case "$1" in
+- deconfig)
+- /sbin/ifconfig $interface 0.0.0.0
+- ;;
+-
+- renew|bound)
+- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+-
+- if [ -n "$router" ] ; then
+- echo "deleting routers"
+- while route del default gw 0.0.0.0 dev $interface ; do
+- :
+- done
+-
+- metric=0
+- for i in $router ; do
+- route add default gw $i dev $interface metric $((metric++))
+- done
++deconfig)
++ # Bring the interface up (without inet at this point)
++ ifconfig "$interface" 0.0.0.0;;
++
++renew|bound)
++ bind;;
++
++leasefail)
++ # Pull the values from the config data if (only only if) this
++ # is the config interface
++ if test "$interface" = "$(config iface)"
++ then
++ ip="$(config ip)"
++ if test -n "$ip"
++ then
++ router="$(config gateway)"
++ subnet="$(config netmask)"
++ broadcast="$(config broadcast)"
++ domain="$(config domain)"
++ dns="$(config dns)"
++
++ bind
+ fi
++ fi;;
+
+- echo -n > $RESOLV_CONF
+- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
+- for i in $dns ; do
+- echo adding dns $i
+- echo nameserver $i >> $RESOLV_CONF
+- done
+- ;;
++*) echo "udhcpc: $*: unknown command" >&2
++ exit 1;;
+ esac
+
+ exit 0
diff --git a/packages/busybox/busybox-1.5.0/udhcpscript.patch b/packages/busybox/busybox-1.5.0/udhcpscript.patch
new file mode 100644
index 0000000000..fc21d440cd
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/udhcpscript.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript
++++ busybox-1.00-rc3/examples/udhcp/simple.script
+@@ -17,8 +17,7 @@
+ /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+
+ if [ -n "$router" ] ; then
+- echo "deleting routers"
+- while route del default gw 0.0.0.0 dev $interface ; do
++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
+ :
+ done
+
diff --git a/packages/busybox/busybox-1.5.0/xargs-double-size.patch b/packages/busybox/busybox-1.5.0/xargs-double-size.patch
new file mode 100644
index 0000000000..df64554ffc
--- /dev/null
+++ b/packages/busybox/busybox-1.5.0/xargs-double-size.patch
@@ -0,0 +1,13 @@
+--- busybox-1.2.1/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200
++++ busybox-1.2.1/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200
+@@ -466,8 +466,8 @@
+ have it at 1 meg). Things will work fine with a large ARG_MAX but it
+ will probably hurt the system more than it needs to; an array of this
+ size is allocated. */
+- if (orig_arg_max > 20 * 1024)
+- orig_arg_max = 20 * 1024;
++ if (orig_arg_max > 40 * 1024)
++ orig_arg_max = 40 * 1024;
+ n_max_chars = orig_arg_max;
+ }
+ max_chars = xmalloc(n_max_chars);
diff --git a/packages/busybox/busybox-1.3.1/sparc/.mtn2git_empty b/packages/busybox/busybox-1.6.0/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.3.1/sparc/.mtn2git_empty
+++ b/packages/busybox/busybox-1.6.0/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.3.1/wrt54/.mtn2git_empty b/packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/busybox/busybox-1.3.1/wrt54/.mtn2git_empty
+++ b/packages/busybox/busybox-1.6.0/angstrom/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.6.0/angstrom/defconfig b/packages/busybox/busybox-1.6.0/angstrom/defconfig
new file mode 100644
index 0000000000..eb0b8d7c64
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/angstrom/defconfig
@@ -0,0 +1,647 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.6.0/busybox-mdev.sh b/packages/busybox/busybox-1.6.0/busybox-mdev.sh
new file mode 100755
index 0000000000..9744322fa9
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/busybox-mdev.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+MDEV=/sbin/mdev
+DESC="Busybox mdev setup"
+
+# Complain if thing's aren't right
+if [ ! -e /proc/filesystems ]; then
+ echo "mdev requires a mounted procfs, not started."
+ exit 1
+fi
+
+if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
+ echo "mdev requires tmpfs support, not started."
+ exit 1
+fi
+
+if [ ! -d /sys/class/ ]; then
+ echo "mdev requires a mounted sysfs, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "mdev requires hotplug support, not started."
+ exit 1
+fi
+
+# We need to unmount /dev/pts/ and remount it later over the tmpfs
+if mountpoint -q /dev/pts/; then
+ umount -l /dev/pts/
+fi
+
+if mountpoint -q /dev/shm/; then
+ umount -l /dev/shm/
+fi
+
+# Create tmpfs for /dev
+echo "Creating tmpfs at /dev"
+mount -t tmpfs tmpfs /dev -o size=800k
+
+# Register mdev as hotplug event helper
+echo "$MDEV" > /proc/sys/kernel/hotplug
+
+# Populate /dev from /sys info
+echo "Populating /dev using mdev"
+$MDEV -s
+
+# Touch .udev to inform scripts that /dev needs no further setup
+touch /dev/.udev
+
+# Mount devpts
+TTYGRP=5
+TTYMODE=620
+mkdir -m 755 -p /dev/pts
+if [ ! -e /dev/ptmx ]; then
+ mknod -m 666 /dev/ptmx c 5 2
+fi
+mount -t devpts devpts /dev/pts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
+
+# Make shm directory
+mkdir -m 755 -p /dev/shm
+
+# Make extraneous links
+ln -sf /proc/self/fd /dev/fd
+ln -sf /proc/self/fd/0 /dev/stdin
+ln -sf /proc/self/fd/1 /dev/stdout
+ln -sf /proc/self/fd/2 /dev/stderr
+ln -sf /proc/kcore /dev/core
+ln -sf /proc/asound/oss/sndstat /dev/sndstat
+
+exit 0
diff --git a/packages/busybox/busybox-1.6.0/defconfig b/packages/busybox/busybox-1.6.0/defconfig
new file mode 100644
index 0000000000..7308eead76
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/defconfig
@@ -0,0 +1,647 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+# CONFIG_SWITCH_ROOT is not set
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.6.0/df_rootfs.patch b/packages/busybox/busybox-1.6.0/df_rootfs.patch
new file mode 100644
index 0000000000..3819b59106
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/df_rootfs.patch
@@ -0,0 +1,44 @@
+--- busybox-1.3.1.orig/coreutils/df.c 2006-12-26 22:54:50.000000000 -0600
++++ busybox-1.3.1/coreutils/df.c 2006-12-30 00:45:10.000000000 -0600
+@@ -47,6 +47,7 @@
+ struct statfs s;
+ static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
+ const char *disp_units_hdr = hdr_1k;
++ int root_done = 0;
+
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ opt_complementary = "h-km:k-hm:m-hk";
+@@ -77,7 +78,7 @@
+
+ do {
+ const char *device;
+- const char *mount_point;
++ char *mount_point;
+
+ if (mount_table) {
+ mount_entry = getmntent(mount_table);
+@@ -116,17 +117,20 @@
+ ) / (blocks_used + s.f_bavail);
+ }
+
+- if (strcmp(device, "rootfs") == 0) {
+- continue;
+- } else if (strcmp(device, "/dev/root") == 0) {
++ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) {
+ /* Adjusts device to be the real root device,
+ * or leaves device alone if it can't find it */
+- device = find_block_device("/");
++ device = find_block_device(mount_point);
+ if (!device) {
+ goto SET_ERROR;
+ }
+ }
+
++ if (strcmp(mount_point, "/") == 0) {
++ if (root_done) continue;
++ root_done = 1;
++ }
++
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ printf("%-20s %9s ", device,
+ make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
diff --git a/packages/busybox/busybox-1.6.0/dhcp-hostname.patch b/packages/busybox/busybox-1.6.0/dhcp-hostname.patch
new file mode 100644
index 0000000000..8e7e68a4c9
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/dhcp-hostname.patch
@@ -0,0 +1,20 @@
+--- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-03-22 15:21:23.000000000 -0500
++++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 08:42:41.000000000 -0500
+@@ -136,6 +136,7 @@
+ int retval;
+ int len;
+ int no_clientid = 0;
++ char hostbuf[256]; /* (default hostname patch) */
+ fd_set rfds;
+ struct timeval tv;
+ struct dhcpMessage packet;
+@@ -214,6 +215,9 @@
+ client_config.background_if_no_lease = 1;
+ if (opt & OPT_h)
+ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0);
++ else /* (default hostname patch) default hostname is our hostname as set */
++ if (gethostname(hostbuf, sizeof(hostbuf)) == 0)
++ client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, hostbuf, 0);
+ if (opt & OPT_F) {
+ client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3);
+ /* Flags: 0000NEOS
diff --git a/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch b/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch
new file mode 100644
index 0000000000..f49aa16580
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/dhcp-increase-retries.patch
@@ -0,0 +1,11 @@
+--- busybox-1.5.0/networking/udhcp/dhcpc.c~ 2007-04-01 08:42:41.000000000 -0500
++++ busybox-1.5.0/networking/udhcp/dhcpc.c 2007-04-01 21:03:42.000000000 -0500
+@@ -188,7 +188,7 @@
+ /* Default options. */
+ client_config.interface = "eth0";
+ client_config.script = DEFAULT_SCRIPT;
+- client_config.retries = 3;
++ client_config.retries = 5;
+ client_config.timeout = 3;
+
+ /* Parse command line */
diff --git a/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch b/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch
new file mode 100644
index 0000000000..812a0b3ee8
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/ifupdown-spurious-environ.patch
@@ -0,0 +1,16 @@
+--- busybox-1.5.0/networking/ifupdown.c~ 2007-03-22 15:21:23.000000000 -0500
++++ busybox-1.5.0/networking/ifupdown.c 2007-04-01 08:52:25.000000000 -0500
+@@ -83,6 +83,13 @@
+ struct mapping_defn_t *mappings;
+ };
+
++/* XXX - ifupdown-spurious-environ.patch -- appears to be long obsolete,
++ * but is carried forward because it doesn't seem to hurt anything and
++ * it's non-obvious how to remove the patch from OE without breaking
++ * old builds. MJW
++ */
++#define environ local_environ
++
+ #define OPTION_STR "anvf" USE_FEATURE_IFUPDOWN_MAPPING("m") "i:"
+ enum {
+ OPT_do_all = 0x1,
diff --git a/packages/busybox/busybox-1.6.0/udhcpscript.patch b/packages/busybox/busybox-1.6.0/udhcpscript.patch
new file mode 100644
index 0000000000..fc21d440cd
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/udhcpscript.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript
++++ busybox-1.00-rc3/examples/udhcp/simple.script
+@@ -17,8 +17,7 @@
+ /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+
+ if [ -n "$router" ] ; then
+- echo "deleting routers"
+- while route del default gw 0.0.0.0 dev $interface ; do
++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
+ :
+ done
+
diff --git a/packages/busybox/busybox-1.6.0/xargs-double-size.patch b/packages/busybox/busybox-1.6.0/xargs-double-size.patch
new file mode 100644
index 0000000000..df64554ffc
--- /dev/null
+++ b/packages/busybox/busybox-1.6.0/xargs-double-size.patch
@@ -0,0 +1,13 @@
+--- busybox-1.2.1/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200
++++ busybox-1.2.1/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200
+@@ -466,8 +466,8 @@
+ have it at 1 meg). Things will work fine with a large ARG_MAX but it
+ will probably hurt the system more than it needs to; an array of this
+ size is allocated. */
+- if (orig_arg_max > 20 * 1024)
+- orig_arg_max = 20 * 1024;
++ if (orig_arg_max > 40 * 1024)
++ orig_arg_max = 40 * 1024;
+ n_max_chars = orig_arg_max;
+ }
+ max_chars = xmalloc(n_max_chars);
diff --git a/packages/clucene/.mtn2git_empty b/packages/busybox/busybox-static-1.2.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/clucene/.mtn2git_empty
+++ b/packages/busybox/busybox-static-1.2.1/.mtn2git_empty
diff --git a/packages/busybox/busybox-static-1.2.1/add-getkey-applet.patch b/packages/busybox/busybox-static-1.2.1/add-getkey-applet.patch
new file mode 100644
index 0000000000..a75cf823c7
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/add-getkey-applet.patch
@@ -0,0 +1,167 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: busybox-1.1.0/console-tools/getkey.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ busybox-1.1.0/console-tools/getkey.c 2006-03-14 17:17:28.000000000 +0100
+@@ -0,0 +1,94 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * getkey.c - Michael 'Mickey' Lauer
++ *
++ * Version 0.1
++ *
++ * A simple keygrapper. Displays a configurable message and waits a dedicated number
++ * of seconds for a keypress. Sets the exit code accordingly (SUCCESS on keypress).
++ */
++#include <stdio.h>
++#include <fcntl.h>
++#include <memory.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <errno.h>
++#include <sys/ioctl.h>
++#include <sys/kd.h>
++#include "busybox.h"
++
++extern int getkey_main(int argc, char **argv)
++{
++ int status = EXIT_FAILURE;
++
++ if ( argc < 2 )
++ {
++ bb_show_usage();
++ }
++
++ /*
++ * If no terminal is attached it is quite useless
++ * to treat it like one.
++ */
++ if( !isatty(STDIN_FILENO) )
++ {
++ goto error_hard;
++ }
++
++ //bb_printf( "DEBUG: time = '%s'\n", argv[1] );
++ //bb_printf( "DEBUG: mesg = '%s'\n", argv[2] );
++
++ struct termios orig;
++ struct termios attr;
++
++ if ( tcgetattr(STDIN_FILENO, &orig) == -1 )
++ {
++ goto error_hard;
++ }
++
++ attr = orig;
++ attr.c_cc[VMIN] = 0;
++ attr.c_cc[VTIME] = 0;
++ attr.c_iflag |= INLCR;
++ attr.c_oflag |= OPOST|ONLCR;
++ attr.c_cflag &= ~PARENB;
++ attr.c_lflag &= ~(ICANON/*|ECHO*/);
++ if ( tcsetattr(STDIN_FILENO,TCSANOW,&attr) == -1 )
++ {
++ goto error_hard;
++ }
++
++ fd_set rfds;
++ struct timeval tv;
++ int retval;
++
++ FD_ZERO(&rfds);
++ FD_SET(0, &rfds);
++
++ tv.tv_sec = atoi( argv[1] );
++ tv.tv_usec = 0;
++
++ if ( argc == 3 )
++ {
++ bb_printf( argv[2], tv.tv_sec );
++ bb_printf( "\n" );
++ fflush(stdout);
++ }
++ retval = select(1, &rfds, NULL, NULL, &tv);
++ if (retval > 0)
++ {
++ status = EXIT_SUCCESS;
++ }
++
++ if (tcsetattr(STDIN_FILENO,TCSANOW,&orig) == -1 )
++ {
++ goto error_hard;
++ }
++
++ return status;
++
++error_hard :
++ return EXIT_FAILURE;
++};
++
+Index: busybox-1.1.0/console-tools/Makefile.in
+===================================================================
+--- busybox-1.1.0.orig/console-tools/Makefile.in 2006-01-11 06:43:57.000000000 +0100
++++ busybox-1.1.0/console-tools/Makefile.in 2006-03-14 17:18:18.000000000 +0100
+@@ -21,6 +21,7 @@
+ CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o
+ CONSOLETOOLS_DIR-$(CONFIG_RESET) += reset.o
+ CONSOLETOOLS_DIR-$(CONFIG_SETKEYCODES) += setkeycodes.o
++CONSOLETOOLS_DIR-$(CONFIG_GETKEY) += getkey.o
+
+ libraries-y+=$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR)
+
+Index: busybox-1.1.0/console-tools/Config.in
+===================================================================
+--- busybox-1.1.0.orig/console-tools/Config.in 2006-01-11 06:43:57.000000000 +0100
++++ busybox-1.1.0/console-tools/Config.in 2006-03-14 17:17:28.000000000 +0100
+@@ -31,6 +31,14 @@
+ This program dumps the kernel's keyboard translation table to
+ stdout, in binary format. You can then use loadkmap to load it.
+
++config CONFIG_GETKEY
++ bool "getkey"
++ default n
++ help
++ This program displays a configurable message and waits
++ a dedicated number of seconds for a keypress. It sets
++ the exit code accordingly, i.e. SUCCESS if there was a keypress.
++
+ config CONFIG_LOADFONT
+ bool "loadfont"
+ default n
+Index: busybox-1.1.0/include/applets.h
+===================================================================
+--- busybox-1.1.0.orig/include/applets.h 2006-01-11 06:44:14.000000000 +0100
++++ busybox-1.1.0/include/applets.h 2006-03-14 17:17:28.000000000 +0100
+@@ -261,6 +261,9 @@
+ #ifdef CONFIG_FUSER
+ APPLET(fuser, fuser_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
+ #endif
++#ifdef CONFIG_GETKEY
++ APPLET(getkey, getkey_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
++#endif
+ #ifdef CONFIG_GETOPT
+ APPLET(getopt, getopt_main, _BB_DIR_BIN, _BB_SUID_NEVER)
+ #endif
+Index: busybox-1.1.0/include/usage.h
+===================================================================
+--- busybox-1.1.0.orig/include/usage.h 2006-01-11 06:44:14.000000000 +0100
++++ busybox-1.1.0/include/usage.h 2006-03-14 17:19:11.000000000 +0100
+@@ -841,6 +841,13 @@
+ "\t-p, --password Password to be used\n" \
+ "\t-P, --port Port number to be used"
+
++#define getkey_trivial_usage \
++ "time [message]"
++#define getkey_full_usage \
++ "Display a message and wait for a keypress."
++#define getkey_example_usage \
++ "$ getkey 5 'Press a key within %d seconds to interrupt autoboot.'"
++
+ #define fuser_trivial_usage \
+ "[options] file OR port/proto"
+ #define fuser_full_usage \
diff --git a/packages/busybox/busybox-static-1.2.1/angstrom-busybox-syslogd-conf.patch b/packages/busybox/busybox-static-1.2.1/angstrom-busybox-syslogd-conf.patch
new file mode 100644
index 0000000000..c0afe5a07a
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/angstrom-busybox-syslogd-conf.patch
@@ -0,0 +1,19 @@
+#
+# old_revision [fdb3a990f25607c7b10b3ace56859b837e3e6a99]
+#
+# add_file "packages/busybox/busybox-1.2.1/angstrom/syslog.conf"
+# content [96581f5fbde2e5e5109328e8b42d14d53a5c2119]
+#
+============================================================
+--- packages/busybox/busybox-1.2.1/angstrom/syslog.conf 96581f5fbde2e5e5109328e8b42d14d53a5c2119
++++ packages/busybox/busybox-1.2.1/angstrom/syslog.conf 96581f5fbde2e5e5109328e8b42d14d53a5c2119
+@@ -0,0 +1,9 @@
++DESTINATION="file" # log destinations (buffer file remote)
++MARKINT=20 # interval between --mark-- entries [min]
++REDUCE=no # reduced-size logging
++BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
++LOGFILE=/var/log/messages # file: where to log
++ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
++ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
++REMOTE=loghost:514 # remote: where to log
++FOREGROUND=no # run in foreground (don't use!)
diff --git a/packages/busybox/busybox-static-1.2.1/below.patch b/packages/busybox/busybox-static-1.2.1/below.patch
new file mode 100644
index 0000000000..95e8376e46
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/below.patch
@@ -0,0 +1,46 @@
+Index: busybox-1.1.0/modutils/modprobe.c
+===================================================================
+--- busybox-1.1.0.orig/modutils/modprobe.c 2006-01-11 06:43:56.000000000 +0100
++++ busybox-1.1.0/modutils/modprobe.c 2006-03-14 16:36:54.000000000 +0100
+@@ -509,6 +509,41 @@
+ }
+ }
+ }
++ else if ((strncmp (buffer, "below", 5) == 0) && isspace (buffer[5])) {
++ char *mod, *deps;
++ if (parse_tag_value (buffer + 6, &mod, &deps)) {
++ struct dep_t *dt;
++
++ for (dt = first; dt; dt = dt->m_next) {
++ if (strcmp (dt->m_name, mod) == 0)
++ break;
++ }
++ if (dt) {
++ char *pp;
++ char *name;
++
++ pp = name = deps;
++
++ for (;;) {
++ while (*pp != 0 && !isspace (*pp))
++ pp++;
++ if (isspace (*pp))
++ *(pp++) = 0;
++
++ dt->m_depcnt++;
++ dt->m_deparr = (char **) xrealloc (dt->m_deparr,
++ sizeof (char *) * dt->m_depcnt);
++ dt->m_deparr[dt->m_depcnt - 1] = bb_xstrdup (name);
++
++ while (isspace (*pp))
++ pp++;
++ name = pp;
++ if (*pp == 0)
++ break;
++ }
++ }
++ }
++ }
+ }
+ }
+ close ( fd );
diff --git a/packages/busybox/busybox-static-1.2.1/busybox-mdev.sh b/packages/busybox/busybox-static-1.2.1/busybox-mdev.sh
new file mode 100755
index 0000000000..9744322fa9
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/busybox-mdev.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+MDEV=/sbin/mdev
+DESC="Busybox mdev setup"
+
+# Complain if thing's aren't right
+if [ ! -e /proc/filesystems ]; then
+ echo "mdev requires a mounted procfs, not started."
+ exit 1
+fi
+
+if ! grep -q '[[:space:]]tmpfs$' /proc/filesystems; then
+ echo "mdev requires tmpfs support, not started."
+ exit 1
+fi
+
+if [ ! -d /sys/class/ ]; then
+ echo "mdev requires a mounted sysfs, not started."
+ exit 1
+fi
+
+if [ ! -e /proc/sys/kernel/hotplug ]; then
+ echo "mdev requires hotplug support, not started."
+ exit 1
+fi
+
+# We need to unmount /dev/pts/ and remount it later over the tmpfs
+if mountpoint -q /dev/pts/; then
+ umount -l /dev/pts/
+fi
+
+if mountpoint -q /dev/shm/; then
+ umount -l /dev/shm/
+fi
+
+# Create tmpfs for /dev
+echo "Creating tmpfs at /dev"
+mount -t tmpfs tmpfs /dev -o size=800k
+
+# Register mdev as hotplug event helper
+echo "$MDEV" > /proc/sys/kernel/hotplug
+
+# Populate /dev from /sys info
+echo "Populating /dev using mdev"
+$MDEV -s
+
+# Touch .udev to inform scripts that /dev needs no further setup
+touch /dev/.udev
+
+# Mount devpts
+TTYGRP=5
+TTYMODE=620
+mkdir -m 755 -p /dev/pts
+if [ ! -e /dev/ptmx ]; then
+ mknod -m 666 /dev/ptmx c 5 2
+fi
+mount -t devpts devpts /dev/pts -onoexec,nosuid,gid=$TTYGRP,mode=$TTYMODE
+
+# Make shm directory
+mkdir -m 755 -p /dev/shm
+
+# Make extraneous links
+ln -sf /proc/self/fd /dev/fd
+ln -sf /proc/self/fd/0 /dev/stdin
+ln -sf /proc/self/fd/1 /dev/stdout
+ln -sf /proc/self/fd/2 /dev/stderr
+ln -sf /proc/kcore /dev/core
+ln -sf /proc/asound/oss/sndstat /dev/sndstat
+
+exit 0
diff --git a/packages/busybox/busybox-static-1.2.1/defconfig b/packages/busybox/busybox-static-1.2.1/defconfig
new file mode 100644
index 0000000000..eb0b8d7c64
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/defconfig
@@ -0,0 +1,647 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="arm-angstrom-linux-gnueabi-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-static-1.2.1/df_rootfs.patch b/packages/busybox/busybox-static-1.2.1/df_rootfs.patch
new file mode 100644
index 0000000000..486318a2cf
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/df_rootfs.patch
@@ -0,0 +1,34 @@
+--- busybox-1.2.1/coreutils/df.c.orig 2006-11-11 13:25:00.000000000 -0600
++++ busybox-1.2.1/coreutils/df.c 2006-11-11 13:23:15.000000000 -0600
+@@ -47,6 +47,7 @@
+ struct statfs s;
+ static const char hdr_1k[] = "1k-blocks"; /* default display is kilobytes */
+ const char *disp_units_hdr = hdr_1k;
++ int root_done = 0;
+
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ bb_opt_complementally = "h-km:k-hm:m-hk";
+@@ -112,16 +113,19 @@
+ ) / (blocks_used + s.f_bavail);
+ }
+
+- if (strcmp(device, "rootfs") == 0) {
+- continue;
+- } else if (strcmp(device, "/dev/root") == 0) {
++ if (strcmp(device, "/dev/root") == 0 || strcmp(device, "rootfs") == 0) {
+ /* Adjusts device to be the real root device,
+ * or leaves device alone if it can't find it */
+- if ((device = find_block_device("/")) == NULL) {
++ if ((device = find_block_device(mount_point)) == NULL) {
+ goto SET_ERROR;
+ }
+ }
+
++ if (strcmp(mount_point, "/") == 0) {
++ if (root_done) continue;
++ root_done = 1;
++ }
++
+ #ifdef CONFIG_FEATURE_HUMAN_READABLE
+ bb_printf("%-20s %9s ", device,
+ make_human_readable_str(s.f_blocks, s.f_bsize, df_disp_hr));
diff --git a/packages/busybox/busybox-static-1.2.1/dhcp-hostname.patch b/packages/busybox/busybox-static-1.2.1/dhcp-hostname.patch
new file mode 100644
index 0000000000..e0adea662e
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/dhcp-hostname.patch
@@ -0,0 +1,30 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- busybox-1.01/networking/udhcp/dhcpc.c~dhcp-hostname
++++ busybox-1.01/networking/udhcp/dhcpc.c
+@@ -193,6 +193,7 @@
+ int max_fd;
+ int sig;
+ int no_clientid = 0;
++ char hostbuf[256]; /* SUSv2: hostnames are <= 255 bytes */
+
+ static const struct option arg_options[] = {
+ {"clientid", required_argument, 0, 'c'},
+@@ -211,6 +212,14 @@
+ {0, 0, 0, 0}
+ };
+
++ if (gethostname (hostbuf, sizeof (hostbuf)) == 0) {
++ len = strlen (hostbuf);
++ client_config.hostname = xmalloc (len + 2);
++ client_config.hostname[OPT_CODE] = DHCP_HOST_NAME;
++ client_config.hostname[OPT_LEN] = len;
++ strncpy(client_config.hostname + 2, hostbuf, len);
++ }
++
+ /* get options */
+ while (1) {
+ int option_index = 0;
diff --git a/packages/busybox/busybox-static-1.2.1/dhcpretrytime.patch b/packages/busybox/busybox-static-1.2.1/dhcpretrytime.patch
new file mode 100644
index 0000000000..893e346acf
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/dhcpretrytime.patch
@@ -0,0 +1,85 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: busybox-1.1.0/networking/udhcp/dhcpc.c
+===================================================================
+--- busybox-1.1.0.orig/networking/udhcp/dhcpc.c 2006-03-14 17:19:31.000000000 +0100
++++ busybox-1.1.0/networking/udhcp/dhcpc.c 2006-03-14 17:20:45.000000000 +0100
+@@ -48,6 +48,7 @@
+ static unsigned long requested_ip; /* = 0 */
+ static unsigned long server_addr;
+ static unsigned long timeout;
++static unsigned long retrytime = 60;
+ static int packet_num; /* = 0 */
+ static int fd = -1;
+
+@@ -95,6 +96,7 @@
+ " -r, --request=IP IP address to request (default: none)\n"
+ " -s, --script=file Run file at dhcp events (default:\n"
+ " " DEFAULT_SCRIPT ")\n"
++" -t, --retrytime time to retry DHCP request (default 60s)\n")
+ " -v, --version Display version\n"
+ );
+ exit(0);
+@@ -214,6 +216,7 @@
+ {"quit", no_argument, 0, 'q'},
+ {"request", required_argument, 0, 'r'},
+ {"script", required_argument, 0, 's'},
++ {"retrytime", required_argument, 0, 't'},
+ {"version", no_argument, 0, 'v'},
+ {0, 0, 0, 0}
+ };
+@@ -229,7 +232,7 @@
+ /* get options */
+ while (1) {
+ int option_index = 0;
+- c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
++ c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:t:v", arg_options, &option_index);
+ if (c == -1) break;
+
+ switch (c) {
+@@ -305,6 +308,9 @@
+ case 's':
+ client_config.script = optarg;
+ break;
++ case 't':
++ retrytime = atol(optarg);
++ break;
+ case 'v':
+ printf("udhcpcd, version %s\n\n", VERSION);
+ return 0;
+@@ -394,7 +400,7 @@
+ }
+ /* wait to try again */
+ packet_num = 0;
+- timeout = now + 60;
++ timeout = now + retrytime;
+ }
+ break;
+ case RENEW_REQUESTED:
+Index: busybox-1.1.0/networking/ifupdown.c
+===================================================================
+--- busybox-1.1.0.orig/networking/ifupdown.c 2006-01-11 06:43:51.000000000 +0100
++++ busybox-1.1.0/networking/ifupdown.c 2006-03-14 17:19:41.000000000 +0100
+@@ -506,7 +506,7 @@
+ static int dhcp_up(struct interface_defn_t *ifd, execfn *exec)
+ {
+ if (execable("/sbin/udhcpc")) {
+- return( execute("udhcpc -n -p /var/run/udhcpc.%iface%.pid -i "
++ return( execute("udhcpc -b -p /var/run/udhcpc.%iface%.pid -i "
+ "%iface% [[-H %hostname%]] [[-c %clientid%]]", ifd, exec));
+ } else if (execable("/sbin/pump")) {
+ return( execute("pump -i %iface% [[-h %hostname%]] [[-l %leasehours%]]", ifd, exec));
+@@ -526,8 +526,8 @@
+ /* SIGUSR2 forces udhcpc to release the current lease and go inactive,
+ * and SIGTERM causes udhcpc to exit. Signals are queued and processed
+ * sequentially so we don't need to sleep */
+- result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec);
+- result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null", ifd, exec);
++ result = execute("kill -USR2 `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec);
++ result += execute("kill -TERM `cat /var/run/udhcpc.%iface%.pid 2>/dev/null` 2>/dev/null", ifd, exec);
+ } else if (execable("/sbin/pump")) {
+ result = execute("pump -i %iface% -k", ifd, exec);
+ } else if (execable("/sbin/dhclient")) {
diff --git a/packages/busybox/busybox-static-1.2.1/fbset.patch b/packages/busybox/busybox-static-1.2.1/fbset.patch
new file mode 100644
index 0000000000..d0609ce6f7
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/fbset.patch
@@ -0,0 +1,24 @@
+--- busybox/util-linux/fbset.c~ 2004-07-03 16:24:23.000000000 +0100
++++ busybox/util-linux/fbset.c 2004-12-30 20:09:26.000000000 +0000
+@@ -337,7 +337,7 @@
+ {
+ struct fb_var_screeninfo var, varset;
+ int fh, i;
+- char *fbdev = DEFAULTFBDEV;
++ char *fbdev = NULL;
+ char *modefile = DEFAULTFBMODE;
+ char *thisarg, *mode = NULL;
+
+@@ -404,7 +404,12 @@
+ }
+ }
+
++ if (fbdev == NULL)
++ fbdev = DEFAULTFBDEV;
+ if ((fh = open(fbdev, O_RDONLY)) < 0)
++#ifdef CONFIG_FEATURE_DEVFS
++ if ((fh = open("/dev/fb0", O_RDONLY)) < 0)
++#endif
+ bb_perror_msg_and_die("fbset(open)");
+ if (ioctl(fh, FBIOGET_VSCREENINFO, &var))
+ bb_perror_msg_and_die("fbset(ioctl)");
diff --git a/packages/busybox/busybox-static-1.2.1/hdparm_M.patch b/packages/busybox/busybox-static-1.2.1/hdparm_M.patch
new file mode 100644
index 0000000000..9adcd36f92
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/hdparm_M.patch
@@ -0,0 +1,47 @@
+Index: busybox-1.1.0/miscutils/hdparm.c
+===================================================================
+--- busybox-1.1.0.orig/miscutils/hdparm.c 2006-01-11 06:44:13.000000000 +0100
++++ busybox-1.1.0/miscutils/hdparm.c 2006-03-14 17:22:22.000000000 +0100
+@@ -1255,6 +1255,7 @@
+ static unsigned long set_sleepnow, get_sleepnow;
+ static unsigned long get_powermode;
+ static unsigned long set_apmmode, get_apmmode, apmmode;
++static unsigned long set_acoustic = 0, get_acoustic = 0, acoustic = 0;
+ #endif
+ #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
+ static int get_IDentity;
+@@ -2124,6 +2125,20 @@
+ }
+ bb_ioctl(fd, HDIO_DRIVE_CMD, &args,"HDIO_DRIVE_CMD");
+ }
++ if (set_acoustic)
++ {
++ no_scsi();
++ acoustic=check_if_min_and_set_val(acoustic,0);
++ acoustic=check_if_maj_and_set_val(acoustic,254);
++ if_printf(get_acoustic," setting AAM level to 0x%02lX (%ld)\n", acoustic, acoustic);
++ bb_ioctl(fd, HDIO_SET_ACOUSTIC, (int*)acoustic,"HDIO_SET_ACOUSTIC");
++ }
++ if (get_acoustic)
++ {
++ no_scsi();
++ bb_ioctl(fd, HDIO_GET_ACOUSTIC, (unsigned long*)&parm,"HDIO_GET_ACOUSTIC");
++ printf(" acoustic = %2ld (128=quiet ... 254=fast)\n", parm);
++ }
+ if (set_wcache)
+ {
+ #ifdef DO_FLUSHCACHE
+@@ -2832,6 +2847,13 @@
+ p = *argv++, --argc;
+ p=GET_NUMBER(p,&set_readahead,&Xreadahead);
+ break;
++ case 'M':
++ get_acoustic = noisy;
++ noisy = 1;
++ if (!*p && argc && isalnum(**argv))
++ p = *argv++, --argc;
++ p=GET_NUMBER(p,&set_acoustic,&acoustic);
++ break;
+ case 'B':
+ get_apmmode = noisy;
+ noisy = 1;
diff --git a/packages/busybox/busybox-static-1.2.1/ifupdown-spurious-environ.patch b/packages/busybox/busybox-static-1.2.1/ifupdown-spurious-environ.patch
new file mode 100644
index 0000000000..8753315f2c
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/ifupdown-spurious-environ.patch
@@ -0,0 +1,12 @@
+--- busybox-1.00/networking/ifupdown.c.old 2005-06-11 19:51:59.000000000 +0100
++++ busybox-1.00/networking/ifupdown.c 2005-06-11 19:52:19.000000000 +0100
+@@ -148,6 +148,9 @@
+ struct mapping_defn_t *mappings;
+ };
+
++/* XXX */
++#define environ local_environ
++
+ static char no_act = 0;
+ static char verbose = 0;
+ static char **environ = NULL;
diff --git a/packages/busybox/busybox-static-1.2.1/iproute-flush-cache.patch b/packages/busybox/busybox-static-1.2.1/iproute-flush-cache.patch
new file mode 100644
index 0000000000..f8becc3390
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/iproute-flush-cache.patch
@@ -0,0 +1,23 @@
+Index: networking/libiproute/iproute.c
+===================================================================
+RCS file: /var/cvs/busybox/networking/libiproute/iproute.c,v
+retrieving revision 1.14
+diff -u -r1.14 iproute.c
+--- networking/libiproute/iproute.c 11 Aug 2004 08:10:58 -0000 1.14
++++ networking/libiproute/iproute.c 30 Nov 2004 20:43:44 -0000
+@@ -537,6 +537,15 @@
+ } else if (matches(*argv, "match") == 0) {
+ NEXT_ARG();
+ get_prefix(&filter.mdst, *argv, do_ipv6);
++ } else if (matches(*argv, "table") == 0) {
++ NEXT_ARG();
++ if (matches(*argv, "cache") == 0) {
++ filter.tb = -1;
++ } else if (matches(*argv, "main") != 0) {
++ invarg("invalid \"table\"", *argv);
++ }
++ } else if (matches(*argv, "cache") == 0) {
++ filter.tb = -1;
+ } else {
+ if (matches(*argv, "exact") == 0) {
+ NEXT_ARG();
diff --git a/packages/busybox/busybox-static-1.2.1/mount-all-type.patch b/packages/busybox/busybox-static-1.2.1/mount-all-type.patch
new file mode 100644
index 0000000000..476094a804
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/mount-all-type.patch
@@ -0,0 +1,84 @@
+--- busybox-1.00/.pc/mount-all-type.patch/util-linux/mount.c 2004-08-02 17:14:02.000000000 -0700
++++ busybox-1.00/util-linux/mount.c 2005-05-13 00:17:19.054232796 -0700
+@@ -364,6 +364,56 @@
+ exit(EXIT_SUCCESS);
+ }
+
++/* Does this file system type, from /etc/fstab, match the given
++ * -t option value?
++ */
++static int match_fs(const char *option, const char *type)
++{
++ const int len = strlen(type);
++ const int no = option[0] == 'n' && option[1] == 'o';
++ const char *optp = option;
++
++ if (len > 0) do {
++ const char *match = strstr(optp, type);
++
++ if (match == NULL) {
++ /* No match, but if the option string starts 'no' no match
++ * means yes.
++ */
++ return no;
++ }
++
++ /* Match, may be partial, check for end-of-type in option string. */
++ if (match[len] == 0 || match[len] == ',') {
++ /* Ok, check for type or notype. */
++ if (match == option) {
++ /* Exact match at start (can't be 'no') */
++ return 1;
++ }
++ if (match > option+1) {
++ if (match[-1] == ',') {
++ /* Exact match in middle, might be 'no' */
++ return !no;
++ }
++ if (match == option+2 && no) {
++ /* Exact match to 'notype' at start. */
++ return 0;
++ }
++ if (match > option+2 && match[-3] == ',' &&
++ match[-2] == 'n' && match[-1] == 'o') {
++ return 0;
++ }
++ }
++ }
++
++ /* Look for another match. */
++ optp = match+1;
++ } while (1);
++
++ /* zero length type in fstab (impossible?), don't match it. */
++ return 0;
++}
++
+ extern int mount_main(int argc, char **argv)
+ {
+ struct stat statbuf;
+@@ -371,6 +421,7 @@
+ char *extra_opts;
+ int flags = 0;
+ char *filesystemType = "auto";
++ char *filesystemOption = 0;
+ int got_filesystemType = 0;
+ char *device = xmalloc(PATH_MAX);
+ char *directory = xmalloc(PATH_MAX);
+@@ -393,6 +444,7 @@
+ break;
+ case 't':
+ filesystemType = optarg;
++ filesystemOption = optarg;
+ got_filesystemType = 1;
+ break;
+ case 'w':
+@@ -460,6 +512,8 @@
+
+ strcpy(device, m->mnt_fsname);
+ strcpy(directory, m->mnt_dir);
++ if (all && filesystemOption != 0 && !match_fs(filesystemOption, m->mnt_type))
++ continue;
+ filesystemType = bb_xstrdup(m->mnt_type);
+ singlemount:
+ extra_opts = string_flags;
diff --git a/packages/busybox/busybox-static-1.2.1/readlink.patch b/packages/busybox/busybox-static-1.2.1/readlink.patch
new file mode 100644
index 0000000000..0c5431085a
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/readlink.patch
@@ -0,0 +1,85 @@
+diff -p -u -r1.7 Config.in
+--- busybox-1.00/debianutils/Config.in 15 Mar 2004 08:28:24 -0000 1.7
++++ busybox-1.00-patched/debianutils/Config.in 16 Nov 2004 11:46:41 -0000
+@@ -24,6 +24,13 @@ config CONFIG_READLINK
+ This program reads a symbolic link and returns the name
+ of the file it points to
+
++config CONFIG_FEATURE_READLINK_FOLLOW
++ bool " Enable canonicalization by following all symlinks (-f)"
++ default n
++ depends on CONFIG_READLINK
++ help
++ Enable the readlink option (-f).
++
+ config CONFIG_RUN_PARTS
+ bool "run-parts"
+ default n
+diff -p -u -r1.2 readlink.c
+--- busybox-1.00/debianutils/readlink.c 19 Mar 2003 09:11:41 -0000 1.2
++++ busybox-1.00-patched/debianutils/readlink.c 16 Nov 2004 11:46:41 -0000
+@@ -23,18 +23,38 @@
+ #include <errno.h>
+ #include <unistd.h>
+ #include <stdlib.h>
++#include <getopt.h>
+ #include "busybox.h"
+
++#ifdef CONFIG_FEATURE_READLINK_FOLLOW
++# define READLINK_FOLLOW "f"
++# define READLINK_FLAG_f (1 << 0)
++#else
++# define READLINK_FOLLOW ""
++#endif
++
++static const char readlink_options[] = READLINK_FOLLOW;
++
+ int readlink_main(int argc, char **argv)
+ {
+ char *buf = NULL;
++ unsigned long opt = bb_getopt_ulflags(argc, argv, readlink_options);
++#ifdef CONFIG_FEATURE_READLINK_FOLLOW
++ RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX);
++#endif
+
+ /* no options, no getopt */
+
+- if (argc != 2)
++ if (optind + 1 != argc)
+ bb_show_usage();
+
+- buf = xreadlink(argv[1]);
++#ifdef CONFIG_FEATURE_READLINK_FOLLOW
++ if (opt & READLINK_FLAG_f) {
++ buf = realpath(argv[optind], resolved_path);
++ } else
++#endif
++ buf = xreadlink(argv[optind]);
++
+ if (!buf)
+ return EXIT_FAILURE;
+ puts(buf);
+diff -p -u -r1.222 usage.h
+--- busybox-1.00/include/usage.h 14 Sep 2004 16:23:56 -0000 1.222
++++ busybox-1.00-patched/include/usage.h 16 Nov 2004 11:46:42 -0000
+@@ -1985,10 +1985,18 @@
+ "\t-s\tSet the system date and time (default).\n" \
+ "\t-p\tPrint the date and time."
+
++#ifdef CONFIG_FEATURE_READLINK_FOLLOW
++#define USAGE_READLINK_FOLLOW(a) a
++#else
++#define USAGE_READLINK_FOLLOW(a)
++#endif
++
+ #define readlink_trivial_usage \
+- ""
++ USAGE_READLINK_FOLLOW("[-f] ") "FILE"
+ #define readlink_full_usage \
+- "Displays the value of a symbolic link."
++ "Displays the value of a symbolic link." \
++ USAGE_READLINK_FOLLOW("\n\nOptions:\n" \
++ "\t-f\tcanonicalize by following all symlinks")
+
+ #define realpath_trivial_usage \
+ "pathname ..."
diff --git a/packages/busybox/busybox-static-1.2.1/rmmod.patch b/packages/busybox/busybox-static-1.2.1/rmmod.patch
new file mode 100644
index 0000000000..20770e0dc4
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/rmmod.patch
@@ -0,0 +1,40 @@
+Index: busybox-1.1.0/modutils/rmmod.c
+===================================================================
+--- busybox-1.1.0.orig/modutils/rmmod.c 2006-01-11 06:43:56.000000000 +0100
++++ busybox-1.1.0/modutils/rmmod.c 2006-03-14 16:42:14.000000000 +0100
+@@ -29,6 +29,7 @@
+ #include <string.h>
+ #include <sys/utsname.h>
+ #include <sys/syscall.h>
++#include <sys/utsname.h>
+ #include "busybox.h"
+
+ #ifdef CONFIG_FEATURE_2_6_MODULES
+@@ -64,6 +65,16 @@
+ but must get */
+ size_t bufsize = sizeof(bb_common_bufsiz1);
+ #endif
++#ifdef CONFIG_FEATURE_2_6_MODULES
++ int k_version = 0;
++ struct utsname myuname;
++
++ if (uname(&myuname) == 0) {
++ if (myuname.release[0] == '2') {
++ k_version = myuname.release[2] - '0';
++ }
++ }
++#endif
+
+ /* Parse command line. */
+ n = bb_getopt_ulflags(argc, argv, "wfa");
+@@ -109,6 +120,10 @@
+ afterslash++;
+ module_name = alloca(strlen(afterslash) + 1);
+ filename2modname(module_name, afterslash);
++ if (k_version != 4)
++ filename2modname(module_name, afterslash);
++ else
++ strcpy(module_name, afterslash);
+ #else
+ #define module_name argv[n]
+ #endif
diff --git a/packages/busybox/busybox-static-1.2.1/syslog.conf b/packages/busybox/busybox-static-1.2.1/syslog.conf
new file mode 100644
index 0000000000..047e82419e
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/syslog.conf
@@ -0,0 +1,9 @@
+DESTINATION="file" # log destinations (buffer file remote)
+MARKINT=20 # interval between --mark-- entries [min]
+REDUCE=no # reduced-size logging
+BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
+LOGFILE=/var/log/messages # file: where to log
+ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
+ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
+REMOTE=loghost:514 # remote: where to log
+FOREGROUND=no # run in foreground (don't use!)
diff --git a/packages/busybox/busybox-static-1.2.1/udhcppidfile-breakage.patch b/packages/busybox/busybox-static-1.2.1/udhcppidfile-breakage.patch
new file mode 100644
index 0000000000..031274908b
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/udhcppidfile-breakage.patch
@@ -0,0 +1,57 @@
+--- busybox-1.00/networking/udhcp/common.c~udhcppidfile2
++++ busybox-1.00/networking/udhcp/common.c
+@@ -74,7 +74,7 @@
+
+ if (pid > 0) {
+ /* parent */
+- if (pidfile_reassign(pidfile, pid) < 0) {
++ if (pidfile != NULL && pidfile_reassign(pidfile, pid) < 0) {
+ (void)kill(pid, SIGKILL);
+ exit(1);
+ } else
+@@ -119,7 +119,7 @@
+ sanitize_fds();
+
+ /* do some other misc startup stuff while we are here to save bytes */
+- if (pidfile_acquire(pidfile) < 0)
++ if (pidfile != NULL && pidfile_acquire(pidfile) < 0)
+ exit(1);
+
+ /* equivelent of doing a fflush after every \n */
+@@ -166,7 +166,7 @@
+ sanitize_fds();
+
+ /* do some other misc startup stuff while we are here to save bytes */
+- if (pidfile_acquire(pidfile) < 0)
++ if (pidfile != NULL && pidfile_acquire(pidfile) < 0)
+ exit(1);
+
+ /* equivelent of doing a fflush after every \n */
+--- busybox-1.00/networking/udhcp/pidfile.c~udhcppidfile2
++++ busybox-1.00/networking/udhcp/pidfile.c
+@@ -141,7 +141,11 @@
+ int pidfile_acquire(const char *pidfile)
+ {
+ int fd, result;
+- if (!pidfile) return (-1);
++
++ if (pidfile == NULL) {
++ LOG(LOG_ERR, "pidfile_acquire: filename is NULL\n");
++ return (-1);
++ }
+
+ if ((fd = pidfile_open(pidfile)) < 0)
+ return (-1);
+@@ -170,7 +174,11 @@
+ int pidfile_reassign(const char *pidfile, int pid)
+ {
+ int fd, result;
+- if (!pidfile) return (-1);
++
++ if (pidfile == NULL) {
++ LOG(LOG_ERR, "pidfile_reassign: filename is NULL\n");
++ return (-1);
++ }
+
+ if ((fd = pidfile_open(pidfile)) < 0)
+ return (-1);
diff --git a/packages/busybox/busybox-static-1.2.1/udhcppidfile.patch b/packages/busybox/busybox-static-1.2.1/udhcppidfile.patch
new file mode 100644
index 0000000000..b4b86b8775
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/udhcppidfile.patch
@@ -0,0 +1,274 @@
+Index: busybox-1.1.0/networking/udhcp/pidfile.h
+===================================================================
+--- busybox-1.1.0.orig/networking/udhcp/pidfile.h 2006-01-11 06:43:50.000000000 +0100
++++ busybox-1.1.0/networking/udhcp/pidfile.h 2006-03-14 17:15:45.000000000 +0100
+@@ -21,5 +21,5 @@
+
+
+ int pidfile_acquire(const char *pidfile);
+-void pidfile_write_release(int pid_fd);
++int pidfile_reassign(const char *pidfile, int newpid);
+
+Index: busybox-1.1.0/networking/udhcp/pidfile.c
+===================================================================
+--- busybox-1.1.0.orig/networking/udhcp/pidfile.c 2006-01-11 06:43:50.000000000 +0100
++++ busybox-1.1.0/networking/udhcp/pidfile.c 2006-03-14 17:15:45.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <unistd.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <errno.h>
+
+ #include "pidfile.h"
+ #include "common.h"
+@@ -37,39 +38,146 @@
+ }
+
+
+-int pidfile_acquire(const char *pidfile)
++static int pidfile_open(const char *pidfile)
+ {
+- int pid_fd;
+- if (!pidfile) return -1;
++ int fd;
+
+- pid_fd = open(pidfile, O_CREAT | O_WRONLY, 0644);
+- if (pid_fd < 0) {
+- LOG(LOG_ERR, "Unable to open pidfile %s: %m\n", pidfile);
+- } else {
+- lockf(pid_fd, F_LOCK, 0);
+- if (!saved_pidfile)
+- atexit(pidfile_delete);
+- saved_pidfile = (char *) pidfile;
++ if ((fd = open(pidfile, O_CREAT | O_RDWR, 0644)) < 0) {
++ LOG(LOG_ERR, "pidfile_open: open %s failed: %m\n", pidfile);
++ return (-1);
++ }
++
++ /* NOTE: lockf is not inherited by child after fork */
++ if (lockf(fd, F_LOCK, 0) < 0) {
++ LOG(LOG_ERR, "pidfile_open: lock %s failed: %m\n", pidfile);
++ close(fd);
++ return (-1);
++ }
++
++ return (fd);
++}
++
++
++static int pidfile_check(int fd, const char *pidfile)
++{
++ int len, pid;
++ char buf[20];
++
++ if (lseek(fd, 0L, SEEK_SET) < 0) {
++ LOG(LOG_ERR, "pidfile_check: lseek %s failed: %m\n", pidfile);
++ return (-1);
++ }
++
++ if ((len = read(fd, buf, sizeof buf - 1)) < 0) {
++ LOG(LOG_ERR, "pidfile_check: read %s failed: %m\n", pidfile);
++ return (-1);
++ }
++
++ if (len == 0)
++ return (0);
++
++ buf[len] = '\0';
++
++ if ((pid = atoi(buf)) <= 1) {
++ LOG(LOG_WARNING,
++ "pidfile_check: ignoring bogus pid (%s) in %s\n",
++ buf, pidfile);
++ return (0);
++ }
++
++ if (kill((pid_t)pid, 0) == 0) {
++ LOG(LOG_ERR, "pidfile_check: process %d exists (%s)\n",
++ pid, pidfile);
++ return (-1);
++ }
++
++ if (errno != ESRCH) {
++ LOG(LOG_ERR, "pidfile_check: kill %d failed (%s): %m\n",
++ pid, pidfile);
++ return (-1);
++ }
++
++ return (0);
++}
++
++
++static int pidfile_store(int fd, const char *pidfile, int pid)
++{
++ int len;
++ char buf[20];
++
++ if (lseek(fd, 0L, SEEK_SET) < 0) {
++ LOG(LOG_ERR, "pidfile_store: lseek %s failed: %m\n", pidfile);
++ return (-1);
++ }
++
++ len = snprintf(buf, sizeof buf - 1, "%d\n", pid);
++ buf[len] = '\0';
++
++ if (write(fd, buf, len) < 0) {
++ LOG(LOG_ERR, "pidfile_store: write %s failed: %m\n",
++ pidfile);
++ return (-1);
++ }
++
++ if (ftruncate(fd, len) < 0) {
++ LOG(LOG_ERR, "pidfile_store: ftruncate %d failed (%s): %m\n",
++ len, pidfile);
++ return (-1);
+ }
+
+- return pid_fd;
++ return (0);
+ }
+
+
+-void pidfile_write_release(int pid_fd)
++static void pidfile_close(int fd)
+ {
+- FILE *out;
++ (void)lseek(fd, 0L, SEEK_SET);
++ (void)lockf(fd, F_ULOCK, 0);
++ (void)close(fd);
++}
+
+- if (pid_fd < 0) return;
+
+- if ((out = fdopen(pid_fd, "w")) != NULL) {
+- fprintf(out, "%d\n", getpid());
+- fclose(out);
++int pidfile_acquire(const char *pidfile)
++{
++ int fd, result;
++ if (!pidfile) return (-1);
++
++ if ((fd = pidfile_open(pidfile)) < 0)
++ return (-1);
++
++ if ((result = pidfile_check(fd, pidfile)) == 0)
++ result = pidfile_store(fd, pidfile, getpid());
++
++ pidfile_close(fd);
++
++ if (result == 0) {
++ saved_pidfile = (char *) pidfile;
++ atexit(pidfile_delete);
+ }
+- lockf(pid_fd, F_UNLCK, 0);
+- close(pid_fd);
++
++ return (result);
+ }
+
+
++/*
++ * reassign the pid in a pidfile - used just after a fork so a parent
++ * can store the pid of its child into the file without any window
++ * where the pid in the file is a dead process (which might let another
++ * instance of the program start). Note the parent must use _exit() to
++ * avoid triggering the unlink scheduled above in pidfile_acquire()
++ */
++int pidfile_reassign(const char *pidfile, int pid)
++{
++ int fd, result;
++ if (!pidfile) return (-1);
++
++ if ((fd = pidfile_open(pidfile)) < 0)
++ return (-1);
+
++ result = pidfile_store(fd, pidfile, pid);
+
++ pidfile_close(fd);
++
++ return (result);
++}
+Index: busybox-1.1.0/networking/udhcp/common.c
+===================================================================
+--- busybox-1.1.0.orig/networking/udhcp/common.c 2006-01-11 06:43:50.000000000 +0100
++++ busybox-1.1.0/networking/udhcp/common.c 2006-03-14 17:15:45.000000000 +0100
+@@ -64,16 +64,34 @@
+ #ifdef __uClinux__
+ LOG(LOG_ERR, "Cannot background in uclinux (yet)");
+ #else /* __uClinux__ */
+- int pid_fd;
++ int pid, fd;
+
+- /* hold lock during fork. */
+- pid_fd = pidfile_acquire(pidfile);
+- if (daemon(0, 0) == -1) {
++ /* NOTE: lockf is not inherited by the child after fork */
++ if ((pid = fork()) < 0) {
+ perror("fork");
+ exit(1);
+ }
++
++ if (pid > 0) {
++ /* parent */
++ if (pidfile_reassign(pidfile, pid) < 0) {
++ (void)kill(pid, SIGKILL);
++ exit(1);
++ } else
++ _exit(0);
++ }
++
++ /* child */
++ (void)chdir("/");
++ if ((fd = open("/dev/null", O_RDWR)) >= 0) {
++ (void)dup2(fd, 0);
++ (void)dup2(fd, 1);
++ (void)dup2(fd, 2);
++ (void)close(fd);
++ }
++ (void)setsid();
++
+ daemonized++;
+- pidfile_write_release(pid_fd);
+ #endif /* __uClinux__ */
+ }
+
+@@ -97,14 +115,12 @@
+
+ void start_log_and_pid(const char *client_server, const char *pidfile)
+ {
+- int pid_fd;
+-
+ /* Make sure our syslog fd isn't overwritten */
+ sanitize_fds();
+
+ /* do some other misc startup stuff while we are here to save bytes */
+- pid_fd = pidfile_acquire(pidfile);
+- pidfile_write_release(pid_fd);
++ if (pidfile_acquire(pidfile) < 0)
++ exit(1);
+
+ /* equivelent of doing a fflush after every \n */
+ setlinebuf(stdout);
+@@ -150,8 +166,8 @@
+ sanitize_fds();
+
+ /* do some other misc startup stuff while we are here to save bytes */
+- pid_fd = pidfile_acquire(pidfile);
+- pidfile_write_release(pid_fd);
++ if (pidfile_acquire(pidfile) < 0)
++ exit(1);
+
+ /* equivelent of doing a fflush after every \n */
+ setlinebuf(stdout);
+Index: busybox-1.1.0/networking/udhcp/script.c
+===================================================================
+--- busybox-1.1.0.orig/networking/udhcp/script.c 2006-01-11 06:43:50.000000000 +0100
++++ busybox-1.1.0/networking/udhcp/script.c 2006-03-14 17:15:45.000000000 +0100
+@@ -229,6 +229,6 @@
+ execle(client_config.script, client_config.script,
+ name, NULL, envp);
+ LOG(LOG_ERR, "script %s failed: %m", client_config.script);
+- exit(1);
++ _exit(1);
+ }
+ }
diff --git a/packages/busybox/busybox-static-1.2.1/udhcpscript.patch b/packages/busybox/busybox-static-1.2.1/udhcpscript.patch
new file mode 100644
index 0000000000..fc21d440cd
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/udhcpscript.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- busybox-1.00-rc3/examples/udhcp/simple.script~udhcpscript
++++ busybox-1.00-rc3/examples/udhcp/simple.script
+@@ -17,8 +17,7 @@
+ /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
+
+ if [ -n "$router" ] ; then
+- echo "deleting routers"
+- while route del default gw 0.0.0.0 dev $interface ; do
++ while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
+ :
+ done
+
diff --git a/packages/busybox/busybox-static-1.2.1/wget-long-options.patch b/packages/busybox/busybox-static-1.2.1/wget-long-options.patch
new file mode 100644
index 0000000000..3c5920a3cb
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/wget-long-options.patch
@@ -0,0 +1,20 @@
+--- busybox-1.2.1.orig/networking/wget.c
++++ busybox-1.2.1/networking/wget.c
+@@ -136,7 +136,7 @@
+ #define WGET_OPT_PREFIX 32
+ #define WGET_OPT_PROXY 64
+
+-#if ENABLE_WGET_LONG_OPTIONS
++#if CONFIG_FEATURE_WGET_LONG_OPTIONS
+ static const struct option wget_long_options[] = {
+ { "continue", 0, NULL, 'c' },
+ { "quiet", 0, NULL, 'q' },
+@@ -180,7 +180,7 @@
+ * Crack command line.
+ */
+ bb_opt_complementally = "-1:\203::";
+-#if ENABLE_WGET_LONG_OPTIONS
++#if CONFIG_FEATURE_WGET_LONG_OPTIONS
+ bb_applet_long_options = wget_long_options;
+ #endif
+ opt = bb_getopt_ulflags(argc, argv, "cq\213O:\203:P:Y:",
diff --git a/packages/busybox/busybox-static-1.2.1/xargs-double-size.patch b/packages/busybox/busybox-static-1.2.1/xargs-double-size.patch
new file mode 100644
index 0000000000..df64554ffc
--- /dev/null
+++ b/packages/busybox/busybox-static-1.2.1/xargs-double-size.patch
@@ -0,0 +1,13 @@
+--- busybox-1.2.1/findutils/xargs.c.org 2006-09-19 18:18:17.084592997 +0200
++++ busybox-1.2.1/findutils/xargs.c 2006-09-19 18:18:09.820275793 +0200
+@@ -466,8 +466,8 @@
+ have it at 1 meg). Things will work fine with a large ARG_MAX but it
+ will probably hurt the system more than it needs to; an array of this
+ size is allocated. */
+- if (orig_arg_max > 20 * 1024)
+- orig_arg_max = 20 * 1024;
++ if (orig_arg_max > 40 * 1024)
++ orig_arg_max = 40 * 1024;
+ n_max_chars = orig_arg_max;
+ }
+ max_chars = xmalloc(n_max_chars);
diff --git a/packages/busybox/busybox-static_1.2.1.bb b/packages/busybox/busybox-static_1.2.1.bb
new file mode 100644
index 0000000000..f3bff07530
--- /dev/null
+++ b/packages/busybox/busybox-static_1.2.1.bb
@@ -0,0 +1,6 @@
+require busybox_${PV}.bb
+PR = "r0"
+
+S = "${WORKDIR}/busybox-1.2.1"
+
+export CFLAGS:="${CFLAGS} -static"
diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb
index fb26407cd6..054649e9df 100644
--- a/packages/busybox/busybox_1.2.1.bb
+++ b/packages/busybox/busybox_1.2.1.bb
@@ -1,6 +1,6 @@
require busybox.inc
-PR = "r11"
+PR = "r13"
SRC_URI += "file://wget-long-options.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
diff --git a/packages/busybox/busybox_1.5.0.bb b/packages/busybox/busybox_1.5.0.bb
new file mode 100644
index 0000000000..a8678602e7
--- /dev/null
+++ b/packages/busybox/busybox_1.5.0.bb
@@ -0,0 +1,104 @@
+require busybox.inc
+
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "file://dhcp-increase-retries.patch;patch=1 \
+ file://df_rootfs.patch;patch=1 \
+ file://defconfig"
+
+EXTRA_OEMAKE_append = " V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
+
+do_configure () {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ cml1_do_configure
+}
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ base_do_compile
+}
+
+do_install () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ install -d ${D}${sysconfdir}/init.d
+ oe_runmake "PREFIX=${D}" install
+ cp -pPR ${S}/_install/* ${D}/
+
+ # Move everything to /busybox (not supposed to end up in any package)
+ install -d ${D}/busybox
+ ls ${D} -R
+
+ cp -dPr ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/
+ # Move the busybox binary back to /bin
+ install -d ${D}${base_bindir}
+ mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/
+ # Move back the sh symlink
+ test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/
+
+ install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/
+ install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/
+ if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then
+ # Move crond back to /usr/sbin/crond
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then
+ # Move httpd back to /usr/sbin/httpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
+ install -d ${D}/srv/www
+ fi
+ if grep "CONFIG_APP_UDHCPD=y" ${WORKDIR}/defconfig; then
+ # Move udhcpd back to /usr/sbin/udhcpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then
+ # Move hwclock back to /sbin/hwclock
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/
+
+ install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_APP_UDHCPC=y" ${WORKDIR}/defconfig; then
+ # Move dhcpc back to /usr/sbin/udhcpc
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/
+
+ install -d ${D}${sysconfdir}/udhcpc.d
+ install -d ${D}${datadir}/udhcpc
+ install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default
+ install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
+ fi
+
+ install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
+}
+
+pkg_prerm_${PN} () {
+ # This is so you can make busybox commit suicide - removing busybox with no other packages
+ # providing its files, this will make update-alternatives work, but the update-rc.d part
+ # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
+ tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
+ ln -s /bin/busybox $tmpdir/[
+ ln -s /bin/busybox $tmpdir/test
+ ln -s /bin/busybox $tmpdir/head
+ ln -s /bin/busybox $tmpdir/sh
+ ln -s /bin/busybox $tmpdir/basename
+ ln -s /bin/busybox $tmpdir/echo
+ ln -s /bin/busybox $tmpdir/mv
+ ln -s /bin/busybox $tmpdir/ln
+ ln -s /bin/busybox $tmpdir/dirname
+ ln -s /bin/busybox $tmpdir/rm
+ ln -s /bin/busybox $tmpdir/sed
+ ln -s /bin/busybox $tmpdir/sort
+ export PATH=$PATH:$tmpdir
+ while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done </etc/busybox.links
+}
diff --git a/packages/busybox/busybox_1.6.0.bb b/packages/busybox/busybox_1.6.0.bb
new file mode 100644
index 0000000000..a8678602e7
--- /dev/null
+++ b/packages/busybox/busybox_1.6.0.bb
@@ -0,0 +1,104 @@
+require busybox.inc
+
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "file://dhcp-increase-retries.patch;patch=1 \
+ file://df_rootfs.patch;patch=1 \
+ file://defconfig"
+
+EXTRA_OEMAKE_append = " V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX}"
+
+do_configure () {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ cml1_do_configure
+}
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ base_do_compile
+}
+
+do_install () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ install -d ${D}${sysconfdir}/init.d
+ oe_runmake "PREFIX=${D}" install
+ cp -pPR ${S}/_install/* ${D}/
+
+ # Move everything to /busybox (not supposed to end up in any package)
+ install -d ${D}/busybox
+ ls ${D} -R
+
+ cp -dPr ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/
+ # Move the busybox binary back to /bin
+ install -d ${D}${base_bindir}
+ mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/
+ # Move back the sh symlink
+ test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/
+
+ install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/
+ install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/
+ if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then
+ # Move crond back to /usr/sbin/crond
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then
+ # Move httpd back to /usr/sbin/httpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
+ install -d ${D}/srv/www
+ fi
+ if grep "CONFIG_APP_UDHCPD=y" ${WORKDIR}/defconfig; then
+ # Move udhcpd back to /usr/sbin/udhcpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then
+ # Move hwclock back to /sbin/hwclock
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/
+
+ install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_APP_UDHCPC=y" ${WORKDIR}/defconfig; then
+ # Move dhcpc back to /usr/sbin/udhcpc
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/
+
+ install -d ${D}${sysconfdir}/udhcpc.d
+ install -d ${D}${datadir}/udhcpc
+ install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default
+ install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
+ fi
+
+ install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
+}
+
+pkg_prerm_${PN} () {
+ # This is so you can make busybox commit suicide - removing busybox with no other packages
+ # providing its files, this will make update-alternatives work, but the update-rc.d part
+ # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
+ tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
+ ln -s /bin/busybox $tmpdir/[
+ ln -s /bin/busybox $tmpdir/test
+ ln -s /bin/busybox $tmpdir/head
+ ln -s /bin/busybox $tmpdir/sh
+ ln -s /bin/busybox $tmpdir/basename
+ ln -s /bin/busybox $tmpdir/echo
+ ln -s /bin/busybox $tmpdir/mv
+ ln -s /bin/busybox $tmpdir/ln
+ ln -s /bin/busybox $tmpdir/dirname
+ ln -s /bin/busybox $tmpdir/rm
+ ln -s /bin/busybox $tmpdir/sed
+ ln -s /bin/busybox $tmpdir/sort
+ export PATH=$PATH:$tmpdir
+ while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done </etc/busybox.links
+}
diff --git a/packages/busybox/files/syslog.conf b/packages/busybox/files/syslog.conf
index d4a0e02f5b..fc7ff8b37a 100644
--- a/packages/busybox/files/syslog.conf
+++ b/packages/busybox/files/syslog.conf
@@ -1,9 +1,9 @@
DESTINATION="buffer" # log destinations (buffer file remote)
-MARKINT=20 # intervall between --mark-- entries
-LOGFILE=/var/log/messages # where to log (file)
-REMOTE=loghost:514 # where to log (syslog remote)
-REDUCE=no # reduce-size logging
-#ROTATESIZE=0 # rotate log if grown beyond X [kByte] (incompatible with busybox)
-#ROTATEGENS=3 # keep X generations of rotated logs (incompatible with busybox)
-BUFFERSIZE=64 # size of circular buffer [kByte]
+MARKINT=20 # interval between --mark-- entries [min]
+REDUCE=no # reduced-size logging
+BUFFERSIZE=64 # buffer: size of circular buffer [kByte]
+LOGFILE=/var/log/messages # file: where to log
+ROTATESIZE=32 # file: rotate log if grown beyond X [kByte] (busybox 1.2+)
+ROTATEGENS=1 # file: keep X generations of rotated logs (busybox 1.2+)
+REMOTE=loghost:514 # remote: where to log
FOREGROUND=no # run in foreground (don't use!)
diff --git a/packages/busybox/slingbox-1.3.1/fdisk-readhex.patch b/packages/busybox/slingbox-1.3.1/fdisk-readhex.patch
new file mode 100644
index 0000000000..d8e32c40e7
--- /dev/null
+++ b/packages/busybox/slingbox-1.3.1/fdisk-readhex.patch
@@ -0,0 +1,20 @@
+--- busybox-1.3.1/util-linux/fdisk.c.orig 2007-06-06 21:18:45.000000000 -0500
++++ busybox-1.3.1/util-linux/fdisk.c 2007-06-06 21:17:20.000000000 -0500
+@@ -331,13 +331,16 @@
+ read_hex(const struct systypes *sys)
+ {
+ unsigned long v;
++ char *e;
+ while (1) {
+ read_nonempty(_("Hex code (type L to list codes): "));
+ if (*line_ptr == 'l' || *line_ptr == 'L') {
+ list_types(sys);
+ continue;
+ }
+- v = bb_strtoul(line_ptr, NULL, 16);
++ v = bb_strtoul(line_ptr, &e, 16);
++ /* Clear out EINVAL code if it's because of the trailing \n */
++ if ((errno == EINVAL) && (*e == '\n')) errno = 0;
+ if (errno || v > 0xff) continue;
+ return v;
+ }
diff --git a/packages/busybox/slingbox_1.3.1.bb b/packages/busybox/slingbox_1.3.1.bb
index 89b189e325..62d150a9fe 100644
--- a/packages/busybox/slingbox_1.3.1.bb
+++ b/packages/busybox/slingbox_1.3.1.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.busybox.net"
LICENSE = "GPL"
SECTION = "base"
PRIORITY = "required"
-PR = "r0"
+PR = "r1"
COMPATIBLE_MACHINE = "nslu2"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
@@ -12,12 +12,11 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://shadow_h_is_required.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
file://lazy_umount.patch;patch=1 \
- file://halt.patch;patch=1" \
+ file://halt.patch;patch=1 \
+ file://fdisk-readhex.patch;patch=1 \
file://slingbox_name.patch;patch=1 \
file://slingbox.patch;patch=1"
-# file://wget-long-options.patch;patch=1 \
-
S = "${WORKDIR}/busybox-${PV}"
export EXTRA_CFLAGS = "${CFLAGS}"
diff --git a/packages/c3110x/cx3110x_1.1.bb b/packages/c3110x/cx3110x_1.1.bb
index b3a9ce87e3..15cf51427d 100644
--- a/packages/c3110x/cx3110x_1.1.bb
+++ b/packages/c3110x/cx3110x_1.1.bb
@@ -1,18 +1,30 @@
-DESCRIPTION = "cx3110x wifi support as found in the Nokia 770/800"
-SECTION = "kernel/modules"
-LICENSE = "GPL"
-PR = "r0"
-
-export KERNEL_SRC_DIR = ${STAGING_KERNEL_DIR}
-export LDFLAGS = ""
-
-SRC_URI = "https://garage.maemo.org/frs/download.php/939/cx3110x-1.1.tar.gz"
-
-S = "${WORKDIR}/cx3110x-${PV}"
-
-inherit module
-
-do_compile() {
- oe_runmake modules
-}
-
+DESCRIPTION = "cx3110x wifi support as found in the Nokia 770/800"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+PR = "r4"
+
+COMPATIBLE_MACHINE = "(nokia770|nokia800)"
+
+export KERNEL_SRC_DIR = ${STAGING_KERNEL_DIR}
+export LDFLAGS = ""
+
+SRC_URI = "https://garage.maemo.org/frs/download.php/939/cx3110x-1.1.tar.gz \
+ file://umac_binary.patch;patch=1 \
+ http://use.the.umac.ko.from.your.own.nokia800/umac.ko"
+
+S = "${WORKDIR}/cx3110x-${PV}"
+
+inherit module
+
+do_compile() {
+ cp ${WORKDIR}/umac.ko ${S}/src/binary_umac.o
+ ${OBJCOPY} ${S}/src/binary_umac.o -R __ksymtab
+ ${OBJCOPY} ${S}/src/binary_umac.o -R __ksymtab_strings
+ ${OBJCOPY} ${S}/src/binary_umac.o -R .gnu.linkonce.this_module
+ ${OBJCOPY} ${S}/src/binary_umac.o -R .modinfo
+ ${OBJCOPY} ${S}/src/binary_umac.o -R .init.text
+ ${OBJCOPY} ${S}/src/binary_umac.o -R .exit.text
+
+ oe_runmake modules
+}
+
diff --git a/packages/clucene/clucene-0.8.12-pre/.mtn2git_empty b/packages/c3110x/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/clucene/clucene-0.8.12-pre/.mtn2git_empty
+++ b/packages/c3110x/files/.mtn2git_empty
diff --git a/packages/c3110x/files/umac_binary.patch b/packages/c3110x/files/umac_binary.patch
new file mode 100644
index 0000000000..bffe69bca5
--- /dev/null
+++ b/packages/c3110x/files/umac_binary.patch
@@ -0,0 +1,69 @@
+ src/Makefile.k26 | 4 ++--
+ src/dummy_umac.c | 38 ++------------------------------------
+ 2 files changed, 4 insertions(+), 38 deletions(-)
+
+Index: cx3110x-1.1/src/Makefile.k26
+===================================================================
+--- cx3110x-1.1.orig/src/Makefile.k26 2007-05-25 17:51:15.000000000 +0100
++++ cx3110x-1.1/src/Makefile.k26 2007-05-25 22:44:36.000000000 +0100
+@@ -8,8 +8,8 @@ cx3110x-objs = $(SM_OBJECTS) $(SM_UMAC_O
+ #MTUM module
+ cx3110x_mt-objs = $(SM_OBJECTS) $(SM_MTUM_OBJECTS)
+
+-umac-objs = dummy_umac.o
+-mtum-objs = dummy_umac.o
++umac-objs = dummy_umac.o binary_umac.o
++mtum-objs = dummy_umac.o binary_umac.o
+
+ obj-$(CONFIG_CX3110X_STA) += cx3110x.o umac.o
+ obj-$(CONFIG_CX3110X_PROD) += cx3110x_mt.o mtum.o
+Index: cx3110x-1.1/src/dummy_umac.c
+===================================================================
+--- cx3110x-1.1.orig/src/dummy_umac.c 2007-05-25 17:51:15.000000000 +0100
++++ cx3110x-1.1/src/dummy_umac.c 2007-05-25 22:50:59.000000000 +0100
+@@ -15,43 +15,9 @@
+ */
+ #include <linux/module.h>
+ #include "softmac2.h"
++#include "sm_drv.h"
+
+-SM_API int32_t SM_FDECL prism_softmac_parse_bra(const uint8_t* bra,
+- struct s_sm_initdata *data) { return 0; }
+-
+-SM_API int32_t SM_FDECL prism_softmac_describe(struct s_sm_descr *descr,
+- struct s_sm_initdata *data) { return 0; }
+-
+-SM_API int32_t SM_FDECL prism_softmac_create(uint32_t *context,
+- struct s_sm_setup *setup,
+- struct s_pda *pda,
+- struct s_sm_initdata *data) { return 0; }
+-
+-SM_API int32_t SM_FDECL prism_softmac_destroy(uint32_t *context) { return 0; }
+-
+-SM_API int32_t SM_FDECL prism_softmac_conf( uint32_t *context, struct s_sm_conf *conf ){ return 0; }
+-SM_API int32_t SM_FDECL prism_softmac_trap( uint32_t *context, struct s_sm_conf *conf ){ return 0; }
+-
+-SM_API int32_t SM_FDECL prism_softmac_frame_tx(uint32_t *context, struct s_sm_frame *frame){ return 0; }
+-SM_API int32_t SM_FDECL prism_softmac_frame_tx_done(uint32_t *context, struct s_sm_frame **frame){ return 0; }
+-SM_API int32_t SM_FDECL prism_softmac_frame_rx(uint32_t *context, struct s_sm_frame **frame){ return 0; }
+-SM_API int32_t SM_FDECL prism_softmac_service(uint32_t *context) { return 0; }
+-
+-SM_API int32_t SM_FDECL prism_interconnect_message_query(uint32_t *context,
+- uint32_t mask,
+- struct s_ic_msg **msg){ return 0; }
+-SM_API int32_t SM_FDECL prism_interconnect_message_handle(uint32_t *context, struct s_ic_msg *msg){ return 0; }
+-SM_API int32_t SM_FDECL prism_interconnect_trigger(uint32_t *context){ return 0;}
+-
+-void prism_driver_free(uint32_t *context, void *buffer){}
+-void prism_driver_frame_free(uint32_t *context, struct s_sm_frame *frame){}
+-
+-int sm_net_device;
+-void sm_drv_get_device(void) {}
+-void frame_skb_alloc(void) {}
+-void frame_skb_free(void) {}
+-void frame_to_skb(void) {}
+-void skb_to_frame(void) {}
++extern int sm_net_device;
+
+ EXPORT_SYMBOL(prism_driver_free);
+ EXPORT_SYMBOL(prism_driver_frame_free);
diff --git a/packages/contacts/.mtn2git_empty b/packages/cacao/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/contacts/.mtn2git_empty
+++ b/packages/cacao/.mtn2git_empty
diff --git a/packages/cacao/cacao-cldc_0.98.bb b/packages/cacao/cacao-cldc_0.98.bb
new file mode 100644
index 0000000000..f7797206de
--- /dev/null
+++ b/packages/cacao/cacao-cldc_0.98.bb
@@ -0,0 +1,35 @@
+
+require cacao.inc
+
+SRC_URI +="file://midpath.patch;patch=1 \
+ file://offsets_make.patch;patch=1 \
+ file://classpath_var.patch;patch=1 \
+ file://libmath.patch;patch=1 \
+ file://arm_mmap.patch;patch=1 \
+ "
+SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
+
+DEPENDS = "cacaoh-cldc-native ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool zlib"
+RDEPENDS = "virtual/cldc-api-1.1"
+RPROVIDES = "virtual/java"
+
+EXTRA_OECONF += "--with-classpath-libdir=${STAGING_LIBDIR}/classpath-minimal \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
+ --enable-jni \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_LIBDIR}/java/cldc1.1.jar \
+ --with-target-classpath-classes=${libdir}/java/cldc1.1.jar \
+ --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh \
+ --disable-libjvm \
+ "
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
+
+FILES_${PN} = "${bindir}/cacao"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg = "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_PATH = "${bindir}/cacao"
+ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc
new file mode 100644
index 0000000000..1f783b8238
--- /dev/null
+++ b/packages/cacao/cacao.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "interpreters"
+
+inherit autotools
+
+SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-0.98/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346"
+
+S = "${WORKDIR}/cacao-${PV}"
+
+EXTRA_OECONF = "--disable-debug \
+ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+ "
diff --git a/packages/cacao/cacaoh-cldc-native_0.98.bb b/packages/cacao/cacaoh-cldc-native_0.98.bb
new file mode 100644
index 0000000000..e24225a042
--- /dev/null
+++ b/packages/cacao/cacaoh-cldc-native_0.98.bb
@@ -0,0 +1,16 @@
+
+require cacao.inc
+
+DEPENDS = "ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool-native zlib-native"
+
+inherit native
+
+EXTRA_OECONF += "--with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
+ --enable-jni \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_LIBDIR}/java/cldc1.1.jar \
+ "
+do_stage() {
+ install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/
+}
diff --git a/packages/contacts/files/.mtn2git_empty b/packages/cacao/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/contacts/files/.mtn2git_empty
+++ b/packages/cacao/files/.mtn2git_empty
diff --git a/packages/cacao/files/arm_mmap.patch b/packages/cacao/files/arm_mmap.patch
new file mode 100644
index 0000000000..e34c7b7802
--- /dev/null
+++ b/packages/cacao/files/arm_mmap.patch
@@ -0,0 +1,21 @@
+--- cacao-0.98/src/vm/exceptions.c 2007/06/27 09:04:17 8146
++++ cacao-0.98/src/vm/exceptions.c 2007/07/02 14:07:24 8175
+@@ -92,6 +92,10 @@
+
+ bool exceptions_init(void)
+ {
++#if !(defined(__ARM__) && defined(__LINUX__))
++ /* On arm-linux the first memory page can't be mmap'ed, as it
++ contains the exception vectors. */
++
+ int pagesize;
+
+ /* mmap a memory page at address 0x0, so our hardware-exceptions
+@@ -100,6 +104,7 @@
+ pagesize = getpagesize();
+
+ (void) memory_mmap_anon(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
++#endif
+
+ /* check if we get into trouble with our hardware-exceptions */
+
diff --git a/packages/cacao/files/classpath_var.patch b/packages/cacao/files/classpath_var.patch
new file mode 100644
index 0000000000..a2a69f9d1c
--- /dev/null
+++ b/packages/cacao/files/classpath_var.patch
@@ -0,0 +1,66 @@
+Index: cacao-0.98/configure.ac
+===================================================================
+--- cacao-0.98.orig/configure.ac 2007-06-06 11:24:23.000000000 +0200
++++ cacao-0.98/configure.ac 2007-07-18 23:26:43.000000000 +0200
+@@ -842,6 +842,7 @@
+ AC_CHECK_WITH_CLASSPATH
+ AC_CHECK_WITH_CLASSPATH_PREFIX
+ AC_CHECK_WITH_CLASSPATH_CLASSES
++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES
+ AC_CHECK_WITH_CLASSPATH_LIBDIR
+ AC_CHECK_WITH_CLASSPATH_INCLUDEDIR
+
+Index: cacao-0.98/src/vm/vm.c
+===================================================================
+--- cacao-0.98.orig/src/vm/vm.c 2007-06-05 09:44:38.000000000 +0200
++++ cacao-0.98/src/vm/vm.c 2007-07-18 23:26:43.000000000 +0200
+@@ -621,7 +621,7 @@
+ #if defined(WITH_CLASSPATH_GNU)
+ puts(" java.boot.class.path : "CACAO_VM_ZIP":"CLASSPATH_CLASSES"");
+ #else
+- puts(" java.boot.class.path : "CLASSPATH_CLASSES"");
++ puts(" java.boot.class.path : "TARGET_CLASSPATH_CLASSES"");
+ #endif
+ puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath\n");
+
+@@ -873,7 +873,7 @@
+ strlen(CACAO_VM_ZIP) +
+ strlen(":") +
+ # endif
+- strlen(CLASSPATH_CLASSES) +
++ strlen(TARGET_CLASSPATH_CLASSES) +
+ strlen("0");
+
+ _Jv_bootclasspath = MNEW(char, len);
+@@ -881,7 +881,7 @@
+ strcat(_Jv_bootclasspath, CACAO_VM_ZIP);
+ strcat(_Jv_bootclasspath, ":");
+ # endif
+- strcat(_Jv_bootclasspath, CLASSPATH_CLASSES);
++ strcat(_Jv_bootclasspath, TARGET_CLASSPATH_CLASSES);
+ #endif
+ }
+
+Index: cacao-0.98/m4/classpath.m4
+===================================================================
+--- cacao-0.98.orig/m4/classpath.m4 2007-04-23 22:06:07.000000000 +0200
++++ cacao-0.98/m4/classpath.m4 2007-07-18 23:38:06.000000000 +0200
+@@ -82,6 +82,18 @@
+ AC_SUBST(CLASSPATH_CLASSES)
+ ])
+
++dnl where are Java core library classes installed on the target
++
++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[
++AC_MSG_CHECKING(where Java core library classes are installed on the target)
++AC_ARG_WITH([target-classpath-classes],
++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])],
++ [TARGET_CLASSPATH_CLASSES=${withval}],
++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip])
++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES})
++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target])
++AC_SUBST(TARGET_CLASSPATH_CLASSES)
++])
+
+ dnl where are Java core library native libraries installed
+
diff --git a/packages/cacao/files/libmath.patch b/packages/cacao/files/libmath.patch
new file mode 100644
index 0000000000..f8a4e837e2
--- /dev/null
+++ b/packages/cacao/files/libmath.patch
@@ -0,0 +1,53 @@
+Index: cacao-0.98/configure.ac
+===================================================================
+--- cacao-0.98.orig/configure.ac 2007-07-21 12:11:47.000000000 +0200
++++ cacao-0.98/configure.ac 2007-07-21 13:36:40.000000000 +0200
+@@ -234,6 +234,48 @@
+ AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+ AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED, 1, [Define to 1 if you have BSD u_int32_t]))
+
++dnl The idea of this solutions comes from bochs-project configure.in
++dnl
++dnl Add the -lm library if math functions cannot be used without it.
++dnl This check is important on cygwin because of the bizarre way that they
++dnl have organized functions into libraries. On cygwin, both libc.a and
++dnl libm.a are symbolic links to a single lib libcygwin.a. This means that
++dnl 1) linking with -lm is not necessary, and
++dnl 2) linking with -lm is dangerous if the order of libraries is wrong
++dnl In particular, if you compile any program with -mno-cygwin and link with
++dnl -lm, it will crash instantly when it is run. This happens because the
++dnl linker incorrectly links the Cygwin libm.a (==libcygwin.a), which replaces
++dnl the ___main function instead of allowing it to be defined by
++dnl /usr/lib/mingw/libmingw32.a as it should be.
++dnl
++dnl On MacOS X, this test will find that -lm is unnecessary and leave it out.
++dnl
++dnl With uClibc and without libjvm cacao needs to be linked with -lm because of
++dnl the function scalbn
++dnl
++dnl Just check this math functions. If it is found without
++dnl -lm, then we must not need -lm.
++have_scalbn=0
++AC_CHECK_FUNCS(scalbn, have_scalbn=1)
++AC_MSG_CHECKING(if math functions link without -lm)
++if test "$have_scalbn" = 1; then
++ AC_MSG_RESULT(yes)
++else
++ AC_MSG_RESULT(no)
++ LIBS="$LIBS -lm"
++ # use different functions to bypass configure caching
++ have_scalbl=0
++ AC_CHECK_FUNCS(scalbl, have_scalbl=1)
++ AC_MSG_CHECKING(if math functions link with -lm)
++ if test "$have_scalbl" = 1; then
++ AC_MSG_RESULT(yes)
++ else
++ AC_MSG_RESULT(no)
++ # not sure we should warn the user, crash, etc.
++ # expect link failure
++ fi
++fi
++
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_C_CONST
+ AC_C_INLINE
diff --git a/packages/cacao/files/midpath.patch b/packages/cacao/files/midpath.patch
new file mode 100644
index 0000000000..b905f774af
--- /dev/null
+++ b/packages/cacao/files/midpath.patch
@@ -0,0 +1,372 @@
+Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c
+===================================================================
+--- cacao-0.98.orig/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-05-16 10:06:15.000000000 +0200
++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldc_io_ResourceInputStream.c 2007-07-22 00:15:55.000000000 +0200
+@@ -26,25 +26,53 @@
+
+ */
+
++#include <sys/stat.h>
++#include <stdlib.h>
+
+ #include "config.h"
+-#include "vm/types.h"
++
++#include "arch.h"
++#include "mm/memory.h"
+
+ #include "native/jni.h"
+ #include "native/native.h"
+
+ #include "native/include/java_lang_Object.h"
+ #include "native/include/java_lang_String.h"
+-
++#include "native/include/java_lang_Integer.h"
+ #include "native/include/com_sun_cldc_io_ResourceInputStream.h"
++#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h"
+
++#include "vm/types.h"
++#include "vm/builtin.h"
+ #include "vm/vm.h" /* REMOVE ME: temporarily */
++#include "vm/exceptions.h"
++#include "vm/initialize.h"
++#include "vm/stringlocal.h"
++#include "vm/properties.h"
++
++#include "vmcore/class.h"
++#include "vmcore/classcache.h"
++#include "vmcore/linker.h"
++#include "vmcore/loader.h"
++#include "vmcore/options.h"
++#include "vmcore/statistics.h"
++#include "vmcore/suck.h"
++#include "vmcore/zip.h"
++
++#include "toolbox/list.h"
++#include "toolbox/logging.h"
++#include "toolbox/util.h"
+
+
+ /* native methods implemented by this file ************************************/
+
+ static JNINativeMethod methods[] = {
+ { "open", "(Ljava/lang/String;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_open },
++ { "bytesRemain", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_bytesRemain },
++ { "readByte", "(Ljava/lang/Object;)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readByte },
++ { "readBytes", "(Ljava/lang/Object;[BII)I", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_readBytes },
++ { "clone", "(Ljava/lang/Object;)Ljava/lang/Object;", (void *) (ptrint) &Java_com_sun_cldc_io_ResourceInputStream_clone },
+ };
+
+ /* _Jv_com_sun_cldc_io_ResourceInputStream_init ********************************
+@@ -68,13 +96,209 @@
+ * Method: open
+ * Signature: (Ljava/lang/String;)Ljava/lang/Object;
+ */
+-JNIEXPORT java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
++JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_open(JNIEnv *env, jclass clazz, java_lang_String *name)
+ {
+- vm_abort("Java_com_sun_cldc_io_ResourceInputStream_open: IMPLEMENT ME!");
++
++ list_classpath_entry *lce;
++ char *filename;
++ s4 filenamelen;
++ char *path;
++ FILE *classfile;
++ /*struct stat statBuffer;
++ int bufferSize = -1;*/
++ utf *uname;
++ /*java_lang_Integer *fhandler;*/
++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++ classinfo *ci;
++
++
++ /* get the classname as char string (do it here for the warning at
++ the end of the function) */
++
++ uname = javastring_toutf((java_objectheader *)name, false);
++ filenamelen = utf_bytes(uname) + strlen("0");
++ filename = MNEW(char, filenamelen);
++ utf_copy(filename, uname);
++ classfile = NULL;
++
++
++ /* walk through all classpath entries */
++
++ for (lce = list_first(list_classpath_entries); lce != NULL;
++ lce = list_next(list_classpath_entries, lce)) {
++
++ path = MNEW(char, lce->pathlen + filenamelen);
++ strcpy(path, lce->path);
++ strcat(path, filename);
++
++ classfile = fopen(path, "r");
++
++ MFREE(path, char, lce->pathlen + filenamelen);
++
++ if (classfile) { /* file exists */
++ break;
++ }
++ }
++
++ MFREE(filename, char, filenamelen);
++
++ if (classfile) {
++ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor"));
++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci);
++ fileDescriptor->handle = (int) classfile;
++ fileDescriptor->valid = (int) 0;
++ return (java_lang_Object*) fileDescriptor;
++ } else {
++ return NULL;
++ }
++
++}
++
++
++/*
++ * Class: com_sun_cldc_io_ResourceInputStream
++ * Method: bytesRemain
++ * Signature: (Ljava/lang/Object;)I
++ */
++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_bytesRemain(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
++
++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++ struct stat statBuffer;
++ FILE *file;
++ int fd;
++ int position;
++ int hposition;
++
++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++ file = (FILE *)fileDescriptor->handle;
++
++ /* Change access position if needed */
++ hposition = fileDescriptor->valid;
++ position = ftell(file);
++ if (position != hposition) {
++ fseek(file, hposition, SEEK_SET);
++ }
++
++ fd = fileno(file);
++ if (fstat(fd, &statBuffer) != -1) {
++ return (statBuffer.st_size - hposition);
++ } else {
++ /* TODO Throw an IOException */
++ return 0;
++ }
+
+- return NULL;
+ }
+
++/*
++ * Class: com_sun_cldc_io_ResourceInputStream
++ * Method: readByte
++ * Signature: (Ljava/lang/Object;)I
++ */
++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readByte(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
++
++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++ int readBytes = -1;
++ char byte;
++ FILE * file;
++ int position;
++ int hposition;
++
++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++ file = (FILE *)fileDescriptor->handle;
++
++ /* Change access position if needed */
++ hposition = fileDescriptor->valid;
++ position = ftell(file);
++ if (position != hposition) {
++ fseek(file, hposition, SEEK_SET);
++ }
++
++ readBytes = fread(&byte, 1, 1, file);
++
++ /* Check if EOF or an error occurred */
++ if (readBytes != 1) {
++ if (feof(file)) {
++ return -1;
++ } else if (ferror(file)) {
++ /* TODO: throw an IOException */
++ }
++ }
++
++ /* Update access position */
++ fileDescriptor->valid = ftell(file);
++
++ return (byte & 0xFF);
++
++}
++
++/*
++ * Class: com_sun_cldc_io_ResourceInputStream
++ * Method: readBytes
++ * Signature: (Ljava/lang/Object;[BII)I
++ */
++JNIEXPORT s4 JNICALL Java_com_sun_cldc_io_ResourceInputStream_readBytes(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj, java_bytearray* byteArray, s4 off, s4 len) {
++
++ com_sun_cldchi_jvm_FileDescriptor *fileDescriptor;
++ int readBytes = -1;
++ FILE * file;
++ int position;
++ int hposition;
++ void *buf;
++
++ /* get pointer to the buffer */
++ buf = &(byteArray->data[off]);
++
++ fileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++ file = (FILE *)fileDescriptor->handle;
++
++ /* Change access position if needed */
++ hposition = fileDescriptor->valid;
++ position = ftell(file);
++ if (position != hposition) {
++ fseek(file, hposition, SEEK_SET);
++ }
++
++ readBytes = fread(buf, 1, len, file);
++
++ /* Check if EOF or an error occurred */
++ if (readBytes != len) {
++ if ((readBytes == 0) && feof(file)) {
++ return -1;
++ } else if (ferror(file)) {
++ /* TODO: throw an IOException */
++ }
++ }
++
++ /* Update access position */
++ fileDescriptor->valid = ftell(file);
++
++ return readBytes;
++}
++
++/*
++ * Class: com_sun_cldc_io_ResourceInputStream
++ * Method: clone
++ * Signature: (Ljava/lang/Object;)Ljava/lang/Object;
++ */
++JNIEXPORT struct java_lang_Object* JNICALL Java_com_sun_cldc_io_ResourceInputStream_clone(JNIEnv *env, jclass clazz, struct java_lang_Object* jobj) {
++
++ classinfo *ci;
++ com_sun_cldchi_jvm_FileDescriptor *srcFileDescriptor;
++ com_sun_cldchi_jvm_FileDescriptor *dstFileDescriptor;
++
++ srcFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) jobj;
++
++ ci = load_class_bootstrap(utf_new_char("com/sun/cldchi/jvm/FileDescriptor"));
++ dstFileDescriptor = (com_sun_cldchi_jvm_FileDescriptor *) native_new_and_init(ci);
++ dstFileDescriptor->handle = srcFileDescriptor->handle;
++ dstFileDescriptor->valid = srcFileDescriptor->valid;
++
++ return (java_lang_Object*) dstFileDescriptor;
++
++}
++
++
++
+
+ /*
+ * These are local overrides for various environment variables in Emacs.
+Index: cacao-0.98/src/native/vm/cldc1.1/Makefile.am
+===================================================================
+--- cacao-0.98.orig/src/native/vm/cldc1.1/Makefile.am 2007-04-02 13:23:24.000000000 +0200
++++ cacao-0.98/src/native/vm/cldc1.1/Makefile.am 2007-07-22 00:15:55.000000000 +0200
+@@ -38,6 +38,7 @@
+ com_sun_cldc_io_j2me_socket_Protocol.c \
+ com_sun_cldchi_io_ConsoleOutputStream.c \
+ com_sun_cldchi_jvm_JVM.c \
++ com_sun_cldchi_jvm_FileDescriptor.c \
+ java_lang_Class.c \
+ java_lang_Double.c \
+ java_lang_Float.c \
+Index: cacao-0.98/src/native/include/Makefile.am
+===================================================================
+--- cacao-0.98.orig/src/native/include/Makefile.am 2007-05-23 20:15:07.000000000 +0200
++++ cacao-0.98/src/native/include/Makefile.am 2007-07-22 00:15:55.000000000 +0200
+@@ -74,6 +74,7 @@
+ com_sun_cldc_io_j2me_socket_Protocol.h \
+ com_sun_cldchi_io_ConsoleOutputStream.h \
+ com_sun_cldchi_jvm_JVM.h \
++ com_sun_cldchi_jvm_FileDescriptor.h \
+ java_lang_Math.h \
+ java_lang_Runtime.h \
+ java_lang_System.h
+Index: cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cacao-0.98/src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c 2007-07-22 00:18:01.000000000 +0200
+@@ -0,0 +1,70 @@
++/* src/native/vm/cldc1.1/com_sun_cldchi_jvm_FileDescriptor.c
++
++ Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates,
++ R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
++ C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
++ Institut f. Computersprachen - TU Wien
++
++ This file is part of CACAO.
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License as
++ published by the Free Software Foundation; either version 2, or (at
++ your option) any later version.
++
++ This program is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ 02110-1301, USA.
++
++ $Id: java_lang_VMRuntime.c 5900 2006-11-04 17:30:44Z michi $
++
++*/
++
++#include "config.h"
++
++#include <stdio.h>
++
++#include "vm/types.h"
++
++#include "native/jni.h"
++#include "native/native.h"
++
++#include "native/include/com_sun_cldchi_jvm_FileDescriptor.h"
++
++/* native methods implemented by this file ************************************/
++
++static JNINativeMethod methods[] = {
++ { "finalize", "()V", (void *) (ptrint) &Java_com_sun_cldchi_jvm_FileDescriptor_finalize },
++};
++
++/* _Jv_com_sun_cldchi_jvm_FileDescriptor_init ******************************
++
++ Register native functions.
++
++*******************************************************************************/
++
++void _Jv_com_sun_cldchi_jvm_FileDescriptor_init(void)
++{
++ utf *u;
++
++ u = utf_new_char("com/sun/cldchi/jvm/FileDescriptor");
++
++ native_method_register(u, methods, NATIVE_METHODS_COUNT);
++}
++
++/*
++ * Class: com/sun/cldchi/jvm/FileDescriptor
++ * Method: finalize
++ * Signature: ()V
++ */
++JNIEXPORT void JNICALL Java_com_sun_cldchi_jvm_FileDescriptor_finalize(JNIEnv *env, struct com_sun_cldchi_jvm_FileDescriptor* this) {
++ /* printf("close\n"); */
++ fclose((FILE *)this->handle);
++
++}
diff --git a/packages/cacao/files/offset.h_arm.patch b/packages/cacao/files/offset.h_arm.patch
new file mode 100644
index 0000000000..7011527540
--- /dev/null
+++ b/packages/cacao/files/offset.h_arm.patch
@@ -0,0 +1,35 @@
+Index: cacao-0.98/src/vm/jit/arm/offsets.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ cacao-0.98/src/vm/jit/arm/offsets.h 2007-07-17 23:35:56.000000000 +0200
+@@ -0,0 +1,30 @@
++/* This file is machine generated, don't edit it! */
++
++/* define some sizeof()'s */
++
++#define sizevmarg 16
++
++
++/* define some offsets */
++
++#define offobjvftbl 0
++
++
++/* vftbl_t */
++
++#define offbaseval 20
++#define offdiffval 24
++
++
++/* classinfo */
++
++#define offclassvftbl 124
++
++
++#define offvmargtype 0
++#define offvmargdata 8
++
++
++#define offcast_super_baseval 0
++#define offcast_super_diffval 4
++#define offcast_sub_baseval 8
diff --git a/packages/cacao/files/offsets_make.patch b/packages/cacao/files/offsets_make.patch
new file mode 100644
index 0000000000..d6f9dbef3a
--- /dev/null
+++ b/packages/cacao/files/offsets_make.patch
@@ -0,0 +1,25 @@
+Index: cacao-0.98/src/vm/jit/arm/Makefile.am
+===================================================================
+--- cacao-0.98.orig/src/vm/jit/arm/Makefile.am 2007-04-02 13:23:22.000000000 +0200
++++ cacao-0.98/src/vm/jit/arm/Makefile.am 2007-07-17 23:26:33.000000000 +0200
+@@ -40,10 +40,6 @@
+ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir) -I$(top_builddir)/src
+ AM_CCASFLAGS = $(AM_CPPFLAGS)
+
+-BUILT_SOURCES = offsets.h
+-
+-CLEANFILES = offsets.h
+-
+ noinst_HEADERS = \
+ arch.h \
+ machine-instr.h \
+@@ -72,9 +68,6 @@
+
+ $(srcdir)/asmpart.S: $(top_builddir)/config.h offsets.h
+
+-offsets.h: $(top_builddir)/src/vm/jit/tools/genoffsets $(top_builddir)/config.h
+- $(top_builddir)/src/vm/jit/tools/genoffsets > offsets.h
+-
+
+ ## Local variables:
+ ## mode: Makefile
diff --git a/packages/dates/.mtn2git_empty b/packages/cairo/cairo-1.4.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/dates/.mtn2git_empty
+++ b/packages/cairo/cairo-1.4.4/.mtn2git_empty
diff --git a/packages/cairo/cairo-1.4.4/cairo-workqueue.patch b/packages/cairo/cairo-1.4.4/cairo-workqueue.patch
new file mode 100644
index 0000000000..4522e99e68
--- /dev/null
+++ b/packages/cairo/cairo-1.4.4/cairo-workqueue.patch
@@ -0,0 +1,2148 @@
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Wed, 18 Apr 2007 17:34:44 +0000 (+0100)
+Subject: Cache freed GCs
+X-Git-Url: http://gitweb.freedesktop.org/?p=users/ickle/cairo;a=commitdiff;h=3126c3948691cf7a6c0fc0f9cc6a7eca43c3553b
+
+Cache freed GCs
+
+Maintain a cache of freed GCs, one for each used depth.
+---
+
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -46,7 +46,11 @@ endif
+
+ if CAIRO_HAS_XLIB_SURFACE
+ libcairo_xlib_headers = cairo-xlib.h cairo-xlib-xrender.h
+-libcairo_xlib_sources = cairo-xlib-surface.c cairo-xlib-screen.c cairo-xlib-private.h cairo-xlib-test.h
++libcairo_xlib_sources = cairo-xlib-surface.c \
++ cairo-xlib-display.c \
++ cairo-xlib-screen.c \
++ cairo-xlib-private.h \
++ cairo-xlib-test.h
+ backend_pkgconfigs += cairo-xlib.pc
+ endif
+
+--- a/src/cairo-clip.c
++++ b/src/cairo-clip.c
+@@ -404,7 +404,8 @@ _cairo_clip_intersect_mask (cairo_clip_t
+ CAIRO_CONTENT_ALPHA,
+ surface_rect.width,
+ surface_rect.height,
+- CAIRO_COLOR_WHITE);
++ CAIRO_COLOR_WHITE,
++ NULL);
+ if (surface->status)
+ return CAIRO_STATUS_NO_MEMORY;
+
+--- a/src/cairo-debug.c
++++ b/src/cairo-debug.c
+@@ -59,10 +59,6 @@
+ void
+ cairo_debug_reset_static_data (void)
+ {
+-#if CAIRO_HAS_XLIB_SURFACE
+- _cairo_xlib_screen_reset_static_data ();
+-#endif
+-
+ _cairo_font_reset_static_data ();
+
+ #if CAIRO_HAS_FT_FONT
+--- a/src/cairo-directfb-surface.c
++++ b/src/cairo-directfb-surface.c
+@@ -1511,6 +1511,16 @@ _cairo_directfb_surface_show_glyphs ( vo
+ #endif /* DFB_SHOW_GLYPHS */
+
+
++static cairo_bool_t
++_cairo_directfb_surface_is_compatible (void *surface_a,
++ void *surface_b)
++{
++ cairo_directfb_surface_t *a = (cairo_directfb_surface_t *) surface_a;
++ cairo_directfb_surface_t *b = (cairo_directfb_surface_t *) surface_b;
++
++ return a->dfb == b->dfb;
++}
++
+ static cairo_surface_backend_t cairo_directfb_surface_backend = {
+ CAIRO_SURFACE_TYPE_DIRECTFB, /*type*/
+ _cairo_directfb_surface_create_similar,/*create_similar*/
+@@ -1560,7 +1570,8 @@ static cairo_surface_backend_t cairo_dir
+ #else
+ NULL, /* show_glyphs */
+ #endif
+- NULL /* snapshot */
++ NULL, /* snapshot */
++ _cairo_directfb_is_compatible
+ };
+
+
+--- a/src/cairo-glitz-surface.c
++++ b/src/cairo-glitz-surface.c
+@@ -1002,7 +1002,8 @@ _cairo_glitz_surface_fill_rectangles (vo
+ _cairo_surface_create_similar_solid (&dst->base,
+ CAIRO_CONTENT_COLOR_ALPHA,
+ 1, 1,
+- (cairo_color_t *) color);
++ (cairo_color_t *) color,
++ NULL);
+ if (src->base.status)
+ return CAIRO_STATUS_NO_MEMORY;
+
+@@ -2171,6 +2172,19 @@ _cairo_glitz_surface_flush (void *abstra
+ return CAIRO_STATUS_SUCCESS;
+ }
+
++static cairo_bool_t
++_cairo_glitz_surface_is_compatible (void *surface_a,
++ void *surface_b)
++{
++ cairo_glitz_surface_t *a = (cairo_glitz_surface_t *) surface_a;
++ cairo_glitz_surface_t *b = (cairo_glitz_surface_t *) surface_b;
++
++ glitz_drawable_t *drawable_a = glitz_surface_get_drawable (a->surface);
++ glitz_drawable_t *drawable_b = glitz_surface_get_drawable (b->surface);
++
++ return drawable_a == drawable_b;
++}
++
+ static const cairo_surface_backend_t cairo_glitz_surface_backend = {
+ CAIRO_SURFACE_TYPE_GLITZ,
+ _cairo_glitz_surface_create_similar,
+@@ -2193,7 +2207,16 @@ static const cairo_surface_backend_t cai
+ _cairo_glitz_surface_flush,
+ NULL, /* mark_dirty_rectangle */
+ _cairo_glitz_surface_scaled_font_fini,
+- _cairo_glitz_surface_scaled_glyph_fini
++ _cairo_glitz_surface_scaled_glyph_fini,
++
++ NULL, /* paint */
++ NULL, /* mask */
++ NULL, /* stroke */
++ NULL, /* fill */
++ NULL, /* show_glyphs */
++
++ NULL, /* snapshot */
++ _cairo_glitz_surface_is_compatible
+ };
+
+ static const cairo_surface_backend_t *
+--- a/src/cairo-mutex-list-private.h
++++ b/src/cairo-mutex-list-private.h
+@@ -34,7 +34,8 @@
+ #ifndef CAIRO_MUTEX_LIST_PRIVATE_H
+ #define CAIRO_MUTEX_LIST_PRIVATE_H
+
+-CAIRO_MUTEX_DECLARE (_cairo_pattern_solid_cache_lock);
++CAIRO_MUTEX_DECLARE (_cairo_pattern_solid_pattern_cache_lock);
++CAIRO_MUTEX_DECLARE (_cairo_pattern_solid_surface_cache_lock);
+
+ CAIRO_MUTEX_DECLARE (_cairo_font_face_mutex);
+ CAIRO_MUTEX_DECLARE (_cairo_scaled_font_map_mutex);
+@@ -44,7 +45,7 @@ CAIRO_MUTEX_DECLARE (_cairo_ft_unscaled_
+ #endif
+
+ #if CAIRO_HAS_XLIB_SURFACE
+-CAIRO_MUTEX_DECLARE (_cairo_xlib_screen_mutex);
++CAIRO_MUTEX_DECLARE (_cairo_xlib_display_mutex);
+ #endif
+
+ #endif
+--- a/src/cairo-pattern.c
++++ b/src/cairo-pattern.c
+@@ -282,7 +282,7 @@ _cairo_pattern_create_solid (const cairo
+ {
+ cairo_solid_pattern_t *pattern = NULL;
+
+- CAIRO_MUTEX_LOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_LOCK (_cairo_pattern_solid_pattern_cache_lock);
+
+ if (solid_pattern_cache.size) {
+ int i = --solid_pattern_cache.size %
+@@ -291,7 +291,7 @@ _cairo_pattern_create_solid (const cairo
+ solid_pattern_cache.patterns[i] = NULL;
+ }
+
+- CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_pattern_cache_lock);
+
+ if (pattern == NULL) {
+ /* None cached, need to create a new pattern. */
+@@ -306,12 +306,12 @@ _cairo_pattern_create_solid (const cairo
+ return &pattern->base;
+ }
+
+-void
+-_cairo_pattern_reset_static_data (void)
++static void
++_cairo_pattern_reset_solid_pattern_cache (void)
+ {
+ int i;
+
+- CAIRO_MUTEX_LOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_LOCK (_cairo_pattern_solid_pattern_cache_lock);
+
+ for (i = 0; i < MIN (ARRAY_LENGTH (solid_pattern_cache.patterns), solid_pattern_cache.size); i++) {
+ free (solid_pattern_cache.patterns[i]);
+@@ -319,7 +319,7 @@ _cairo_pattern_reset_static_data (void)
+ }
+ solid_pattern_cache.size = 0;
+
+- CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_pattern_cache_lock);
+ }
+
+ static const cairo_pattern_t *
+@@ -630,7 +630,7 @@ cairo_pattern_destroy (cairo_pattern_t *
+ if (pattern->type == CAIRO_PATTERN_TYPE_SOLID) {
+ int i;
+
+- CAIRO_MUTEX_LOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_LOCK (_cairo_pattern_solid_pattern_cache_lock);
+
+ i = solid_pattern_cache.size++ %
+ ARRAY_LENGTH (solid_pattern_cache.patterns);
+@@ -640,7 +640,7 @@ cairo_pattern_destroy (cairo_pattern_t *
+
+ solid_pattern_cache.patterns[i] = (cairo_solid_pattern_t *) pattern;
+
+- CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_cache_lock);
++ CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_pattern_cache_lock);
+ } else {
+ free (pattern);
+ }
+@@ -1235,6 +1235,17 @@ _cairo_pattern_acquire_surface_for_gradi
+ return status;
+ }
+
++/* We maintain a small cache here, because we don't want to constantly
++ * recreate surfaces for simple solid colors. */
++#define MAX_SURFACE_CACHE_SIZE 16
++static struct {
++ struct {
++ cairo_color_t color;
++ cairo_surface_t *surface;
++ } cache[MAX_SURFACE_CACHE_SIZE];
++ int size;
++} solid_surface_cache;
++
+ static cairo_int_status_t
+ _cairo_pattern_acquire_surface_for_solid (cairo_solid_pattern_t *pattern,
+ cairo_surface_t *dst,
+@@ -1245,12 +1256,54 @@ _cairo_pattern_acquire_surface_for_solid
+ cairo_surface_t **out,
+ cairo_surface_attributes_t *attribs)
+ {
+- *out = _cairo_surface_create_similar_solid (dst,
+- CAIRO_CONTENT_COLOR_ALPHA,
+- 1, 1,
+- &pattern->color);
+- if ((*out)->status)
+- return CAIRO_STATUS_NO_MEMORY;
++ static int i;
++
++ cairo_surface_t *surface;
++ cairo_status_t status;
++
++ CAIRO_MUTEX_LOCK (_cairo_pattern_solid_surface_cache_lock);
++
++ /* Check cache first */
++ if (i < solid_surface_cache.size &&
++ _cairo_color_equal (&solid_surface_cache.cache[i].color,
++ &pattern->color) &&
++ _cairo_surface_is_compatible (solid_surface_cache.cache[i].surface, dst))
++ goto DONE;
++
++ for (i = 0 ; i < solid_surface_cache.size; i++) {
++ if (_cairo_color_equal (&solid_surface_cache.cache[i].color,
++ &pattern->color) &&
++ _cairo_surface_is_compatible (solid_surface_cache.cache[i].surface, dst))
++ goto DONE;
++ }
++
++ /* Not cached, need to create new */
++ surface = _cairo_surface_create_similar_solid (dst,
++ CAIRO_CONTENT_COLOR_ALPHA,
++ 1, 1,
++ &pattern->color,
++ pattern);
++ assert (_cairo_surface_is_compatible (surface, dst));
++ if (surface->status) {
++ status = surface->status;
++ goto UNLOCK;
++ }
++
++ /* Cache new */
++ if (solid_surface_cache.size < MAX_SURFACE_CACHE_SIZE) {
++ solid_surface_cache.size++;
++ } else {
++ i = rand () % MAX_SURFACE_CACHE_SIZE;
++
++ /* Evict old */
++ cairo_surface_destroy (solid_surface_cache.cache[i].surface);
++ }
++
++ solid_surface_cache.cache[i].color = pattern->color;
++ solid_surface_cache.cache[i].surface = surface;
++
++DONE:
++ *out = cairo_surface_reference (solid_surface_cache.cache[i].surface);
+
+ attribs->x_offset = attribs->y_offset = 0;
+ cairo_matrix_init_identity (&attribs->matrix);
+@@ -1258,7 +1311,26 @@ _cairo_pattern_acquire_surface_for_solid
+ attribs->filter = CAIRO_FILTER_NEAREST;
+ attribs->acquired = FALSE;
+
+- return CAIRO_STATUS_SUCCESS;
++ status = CAIRO_STATUS_SUCCESS;
++
++UNLOCK:
++ CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_surface_cache_lock);
++
++ return status;
++}
++
++static void
++_cairo_pattern_reset_solid_surface_cache (void)
++{
++ int i;
++
++ CAIRO_MUTEX_LOCK (_cairo_pattern_solid_surface_cache_lock);
++
++ for (i = 0; i < solid_surface_cache.size; i++)
++ cairo_surface_destroy (solid_surface_cache.cache[i].surface);
++ solid_surface_cache.size = 0;
++
++ CAIRO_MUTEX_UNLOCK (_cairo_pattern_solid_surface_cache_lock);
+ }
+
+ /**
+@@ -2049,3 +2121,10 @@ cairo_pattern_get_radial_circles (cairo_
+
+ return CAIRO_STATUS_SUCCESS;
+ }
++
++void
++_cairo_pattern_reset_static_data (void)
++{
++ _cairo_pattern_reset_solid_pattern_cache ();
++ _cairo_pattern_reset_solid_surface_cache ();
++}
+--- a/src/cairo-surface.c
++++ b/src/cairo-surface.c
+@@ -288,7 +288,8 @@ cairo_surface_create_similar (cairo_surf
+
+ return _cairo_surface_create_similar_solid (other, content,
+ width, height,
+- CAIRO_COLOR_TRANSPARENT);
++ CAIRO_COLOR_TRANSPARENT,
++ NULL);
+ }
+ slim_hidden_def (cairo_surface_create_similar);
+
+@@ -297,7 +298,8 @@ _cairo_surface_create_similar_solid (cai
+ cairo_content_t content,
+ int width,
+ int height,
+- const cairo_color_t *color)
++ const cairo_color_t *color,
++ cairo_pattern_t *pattern)
+ {
+ cairo_status_t status;
+ cairo_surface_t *surface;
+@@ -310,19 +312,23 @@ _cairo_surface_create_similar_solid (cai
+ return (cairo_surface_t*) &_cairo_surface_nil;
+ }
+
+- source = _cairo_pattern_create_solid (color);
+- if (source->status) {
+- cairo_surface_destroy (surface);
+- _cairo_error (CAIRO_STATUS_NO_MEMORY);
+- return (cairo_surface_t*) &_cairo_surface_nil;
+- }
++ if (pattern == NULL) {
++ source = _cairo_pattern_create_solid (color);
++ if (source->status) {
++ cairo_surface_destroy (surface);
++ _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ return (cairo_surface_t*) &_cairo_surface_nil;
++ }
++ } else
++ source = pattern;
+
+ status = _cairo_surface_paint (surface,
+ color == CAIRO_COLOR_TRANSPARENT ?
+ CAIRO_OPERATOR_CLEAR :
+ CAIRO_OPERATOR_SOURCE, source);
+
+- cairo_pattern_destroy (source);
++ if (source != pattern)
++ cairo_pattern_destroy (source);
+
+ if (status) {
+ cairo_surface_destroy (surface);
+@@ -1056,6 +1062,32 @@ _cairo_surface_snapshot (cairo_surface_t
+ return _cairo_surface_fallback_snapshot (surface);
+ }
+
++/**
++ * _cairo_surface_is_compatible
++ * @surface_a: a #cairo_surface_t
++ * @surface_b: a #cairo_surface_t
++ *
++ * Find out whether the given surfaces share the same backend,
++ * and if so, whether they can be considered compatible.
++ *
++ * The definition of "compatible" depends on the backend. In the
++ * xlib case, it means the surface share the same display.
++ *
++ * Return value: TRUE if the surfaces are compatible.
++ **/
++cairo_bool_t
++_cairo_surface_is_compatible (cairo_surface_t *surface_a,
++ cairo_surface_t *surface_b)
++{
++ if (surface_a->backend != surface_b->backend)
++ return FALSE;
++
++ if (surface_a->backend->is_compatible != NULL)
++ return surface_a->backend->is_compatible (surface_a, surface_b);
++
++ return TRUE;
++}
++
+ cairo_status_t
+ _cairo_surface_composite (cairo_operator_t op,
+ cairo_pattern_t *src,
+--- a/src/cairo-win32-surface.c
++++ b/src/cairo-win32-surface.c
+@@ -1854,6 +1854,16 @@ cairo_win32_surface_get_image (cairo_sur
+ return ((cairo_win32_surface_t*)surface)->image;
+ }
+
++static cairo_bool_t
++_cairo_win32_surface_is_compatible (void *surface_a,
++ void *surface_b)
++{
++ cairo_win32_surface_t *a = (cairo_win32_surface_t *) surface_a;
++ cairo_win32_surface_t *b = (cairo_win32_surface_t *) surface_b;
++
++ return a->dc == b->dc;
++}
++
+ static const cairo_surface_backend_t cairo_win32_surface_backend = {
+ CAIRO_SURFACE_TYPE_WIN32,
+ _cairo_win32_surface_create_similar,
+@@ -1884,7 +1894,8 @@ static const cairo_surface_backend_t cai
+ NULL, /* fill */
+ _cairo_win32_surface_show_glyphs,
+
+- NULL /* snapshot */
++ NULL, /* snapshot */
++ _cairo_win32_surface_is_compatible
+ };
+
+ /* Notes:
+--- a/src/cairo-xcb-surface.c
++++ b/src/cairo-xcb-surface.c
+@@ -1577,6 +1577,16 @@ _cairo_xcb_surface_show_glyphs (void
+ int num_glyphs,
+ cairo_scaled_font_t *scaled_font);
+
++static cairo_bool_t
++_cairo_xcb_surface_is_compatible (void *surface_a,
++ void *surface_b)
++{
++ cairo_xcb_surface_t *a = (cairo_xcb_surface_t *) surface_a;
++ cairo_xcb_surface_t *b = (cairo_xcb_surface_t *) surface_b;
++
++ return _cairo_xcb_surface_same_screen (dst, src);
++}
++
+ /* XXX: move this to the bottom of the file, XCB and Xlib */
+
+ static const cairo_surface_backend_t cairo_xcb_surface_backend = {
+@@ -1608,7 +1618,8 @@ static const cairo_surface_backend_t cai
+ NULL, /* stroke */
+ NULL, /* fill */
+ _cairo_xcb_surface_show_glyphs,
+- NULL /* snapshot */
++ NULL, /* snapshot */
++ _cairo_xcb_surface_is_compatible
+ };
+
+ /**
+--- /dev/null
++++ b/src/cairo-xlib-display.c
+@@ -0,0 +1,490 @@
++/* Cairo - a vector graphics library with display and print output
++ *
++ * Copyright © 2007 Chris Wilson
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it either under the terms of the GNU Lesser General Public
++ * License version 2.1 as published by the Free Software Foundation
++ * (the "LGPL") or, at your option, under the terms of the Mozilla
++ * Public License Version 1.1 (the "MPL"). If you do not alter this
++ * notice, a recipient may use your version of this file under either
++ * the MPL or the LGPL.
++ *
++ * You should have received a copy of the LGPL along with this library
++ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ * You should have received a copy of the MPL along with this library
++ * in the file COPYING-MPL-1.1
++ *
++ * The contents of this file are subject to the Mozilla Public License
++ * Version 1.1 (the "License"); you may not use this file except in
++ * compliance with the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
++ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
++ * the specific language governing rights and limitations.
++ *
++ * The Original Code is the cairo graphics library.
++ *
++ * The Initial Developer of the Original Code is Chris Wilson.
++ *
++ */
++
++#include "cairoint.h"
++
++#include "cairo-xlib-private.h"
++
++#include <fontconfig/fontconfig.h>
++
++#include <X11/Xlibint.h> /* For XESetCloseDisplay */
++#include <X11/extensions/Xrender.h>
++
++typedef int (*cairo_xlib_error_func_t) (Display *display,
++ XErrorEvent *event);
++
++struct _cairo_xlib_job {
++ cairo_xlib_job_t *next;
++ enum {
++ RESOURCE,
++ WORK
++ } type;
++ union {
++ struct {
++ cairo_xlib_notify_resource_func notify;
++ XID xid;
++ } resource;
++ struct {
++ cairo_xlib_notify_func notify;
++ void *data;
++ void (*destroy) (void *);
++ } work;
++ } func;
++};
++
++static cairo_xlib_display_t *_cairo_xlib_display_list = NULL;
++
++static void
++_cairo_xlib_call_close_display_hooks (cairo_xlib_display_t *info)
++{
++ cairo_xlib_screen_info_t *screen;
++ cairo_xlib_hook_t *hooks;
++
++ /* call all registered shutdown routines */
++ CAIRO_MUTEX_LOCK (info->mutex);
++
++ for (screen = info->screens; screen != NULL; screen = screen->next)
++ _cairo_xlib_screen_info_close_display (screen);
++
++ hooks = info->close_display_hooks;
++ while (hooks != NULL) {
++ info->close_display_hooks = NULL;
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++
++ do {
++ cairo_xlib_hook_t *hook = hooks;
++ hooks = hook->next;
++
++ hook->func (info->display, hook->data);
++
++ free (hook);
++ } while (hooks != NULL);
++
++ CAIRO_MUTEX_LOCK (info->mutex);
++ hooks = info->close_display_hooks;
++ }
++ info->closed = TRUE;
++
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++}
++
++cairo_xlib_display_t *
++_cairo_xlib_display_reference (cairo_xlib_display_t *info)
++{
++ if (info == NULL)
++ return NULL;
++
++ /* use our mutex until we get a real atomic inc */
++ CAIRO_MUTEX_LOCK (info->mutex);
++
++ assert (info->ref_count > 0);
++ info->ref_count++;
++
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++
++ return info;
++}
++
++void
++_cairo_xlib_display_destroy (cairo_xlib_display_t *info)
++{
++ if (info == NULL)
++ return;
++
++ CAIRO_MUTEX_LOCK (info->mutex);
++ assert (info->ref_count > 0);
++ if (--info->ref_count == 0) {
++ assert (info->closed == TRUE);
++ assert (info->screens == NULL);
++
++ /* destroy all outstanding notifies */
++ while (info->workqueue != NULL) {
++ cairo_xlib_job_t *job = info->workqueue;
++ info->workqueue = job->next;
++
++ if (job->type == WORK && job->func.work.destroy != NULL)
++ job->func.work.destroy (job->func.work.data);
++
++ _cairo_freelist_free (&info->wq_freelist, job);
++ }
++ _cairo_freelist_fini (&info->wq_freelist);
++
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++
++ free (info);
++ } else
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++}
++
++static int
++_noop_error_handler (Display *display,
++ XErrorEvent *event)
++{
++ return False; /* return value is ignored */
++}
++static int
++_cairo_xlib_close_display (Display *dpy, XExtCodes *codes)
++{
++ cairo_xlib_display_t *info, **prev, *next;
++
++ /*
++ * Unhook from the global list
++ */
++ CAIRO_MUTEX_LOCK (_cairo_xlib_display_mutex);
++ prev = &_cairo_xlib_display_list;
++ for (info = _cairo_xlib_display_list; info; info = next) {
++ next = info->next;
++ if (info->display == dpy) {
++ cairo_xlib_error_func_t old_handler;
++
++ /* drop the list mutex whilst triggering the hooks */
++ CAIRO_MUTEX_UNLOCK (_cairo_xlib_display_mutex);
++
++ /* protect the notifies from triggering XErrors */
++ old_handler = XSetErrorHandler (_noop_error_handler);
++
++ _cairo_xlib_display_notify (info);
++ _cairo_xlib_call_close_display_hooks (info);
++
++ /* catch any that arrived before marking the display as closed */
++ _cairo_xlib_display_notify (info);
++
++ XSync (dpy, False);
++ XSetErrorHandler (old_handler);
++
++ CAIRO_MUTEX_LOCK (_cairo_xlib_display_mutex);
++ _cairo_xlib_display_destroy (info);
++ *prev = next;
++ break;
++ } else
++ prev = &info->next;
++ }
++ CAIRO_MUTEX_UNLOCK (_cairo_xlib_display_mutex);
++
++ /* Return value in accordance with requirements of
++ * XESetCloseDisplay */
++ return 0;
++}
++
++cairo_xlib_display_t *
++_cairo_xlib_display_get (Display *dpy)
++{
++ cairo_xlib_display_t *info;
++ cairo_xlib_display_t **prev;
++ XExtCodes *codes;
++
++ /* There is an apparent deadlock between this mutex and the
++ * mutex for the display, but it's actually safe. For the
++ * app to call XCloseDisplay() while any other thread is
++ * inside this function would be an error in the logic
++ * app, and the CloseDisplay hook is the only other place we
++ * acquire this mutex.
++ */
++ CAIRO_MUTEX_LOCK (_cairo_xlib_display_mutex);
++
++ for (prev = &_cairo_xlib_display_list; (info = *prev); prev = &(*prev)->next)
++ {
++ if (info->display == dpy) {
++ /*
++ * MRU the list
++ */
++ if (prev != &_cairo_xlib_display_list) {
++ *prev = info->next;
++ info->next = _cairo_xlib_display_list;
++ _cairo_xlib_display_list = info;
++ }
++ break;
++ }
++ }
++
++ if (info != NULL) {
++ info = _cairo_xlib_display_reference (info);
++ goto UNLOCK;
++ }
++
++ info = malloc (sizeof (cairo_xlib_display_t));
++ if (info == NULL)
++ goto UNLOCK;
++
++ codes = XAddExtension (dpy);
++ if (codes == NULL) {
++ free (info);
++ info = NULL;
++ goto UNLOCK;
++ }
++
++ XESetCloseDisplay (dpy, codes->extension, _cairo_xlib_close_display);
++
++ _cairo_freelist_init (&info->wq_freelist, sizeof (cairo_xlib_job_t));
++ info->ref_count = 2; /* add one for the CloseDisplay */
++ CAIRO_MUTEX_INIT (&info->mutex);
++ info->display = dpy;
++ info->screens = NULL;
++ info->workqueue = NULL;
++ info->close_display_hooks = NULL;
++ info->closed = FALSE;
++
++ info->next = _cairo_xlib_display_list;
++ _cairo_xlib_display_list = info;
++
++UNLOCK:
++ CAIRO_MUTEX_UNLOCK (_cairo_xlib_display_mutex);
++ return info;
++}
++
++cairo_bool_t
++_cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void *), void *data, const void *key)
++{
++ cairo_xlib_display_t *info;
++ cairo_xlib_hook_t *hook;
++ cairo_bool_t ret = FALSE;
++
++ info = _cairo_xlib_display_get (dpy);
++ if (info == NULL)
++ return FALSE;
++
++ hook = malloc (sizeof (cairo_xlib_hook_t));
++ if (hook != NULL) {
++ hook->func = func;
++ hook->data = data;
++ hook->key = key;
++
++ CAIRO_MUTEX_LOCK (info->mutex);
++ if (info->closed == FALSE) {
++ hook->next = info->close_display_hooks;
++ info->close_display_hooks = hook;
++ ret = TRUE;
++ }
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++ }
++
++ _cairo_xlib_display_destroy (info);
++
++ return ret;
++}
++
++void
++_cairo_xlib_remove_close_display_hooks (Display *dpy, const void *key)
++{
++ cairo_xlib_display_t *info;
++ cairo_xlib_hook_t *hook, *next, **prev;
++
++ info = _cairo_xlib_display_get (dpy);
++ if (info == NULL)
++ return;
++
++ CAIRO_MUTEX_LOCK (info->mutex);
++ prev = &info->close_display_hooks;
++ for (hook = info->close_display_hooks; hook != NULL; hook = next) {
++ next = hook->next;
++ if (hook->key == key) {
++ *prev = hook->next;
++ free (hook);
++ } else
++ prev = &hook->next;
++ }
++ *prev = NULL;
++ CAIRO_MUTEX_UNLOCK (info->mutex);
++
++ _cairo_xlib_display_destroy (info);
++}
++
++void
++_cairo_xlib_display_cancel_resource (cairo_xlib_display_t *display,
++ XID xid)
++{
++ cairo_xlib_job_t *job, *next, **prev;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ prev = &display->workqueue;
++ for (job = display->workqueue; job != NULL; job = next) {
++ next = job->next;
++ if (job->type == RESOURCE && job->func.resource.xid == xid) {
++ _cairo_freelist_free (&display->wq_freelist, job);
++
++ *prev = next;
++ break;
++ }
++ prev = &job->next;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++}
++
++static cairo_xlib_job_t *
++_cairo_xlib_display_find_resource (cairo_xlib_display_t *display, XID xid)
++{
++ cairo_xlib_job_t *job;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ for (job = display->workqueue; job != NULL; job = job->next) {
++ if (job->type == RESOURCE && job->func.resource.xid == xid)
++ break;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++
++ return job;
++}
++
++cairo_status_t
++_cairo_xlib_display_queue_resource (cairo_xlib_display_t *display,
++ cairo_xlib_notify_resource_func notify,
++ XID xid)
++{
++ cairo_xlib_job_t *job;
++ cairo_status_t status = CAIRO_STATUS_SUCCESS;
++
++ assert (_cairo_xlib_display_find_resource (display, xid) == NULL);
++
++ job = _cairo_freelist_alloc (&display->wq_freelist);
++ if (job == NULL)
++ return CAIRO_STATUS_NO_MEMORY;
++
++ job->type = RESOURCE;
++ job->func.resource.xid = xid;
++ job->func.resource.notify = notify;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ if (display->closed == FALSE) {
++ job->next = display->workqueue;
++ display->workqueue = job;
++ } else {
++ _cairo_freelist_free (&display->wq_freelist, job);
++ job = NULL;
++ status = CAIRO_STATUS_NO_MEMORY;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++
++ return status;
++}
++
++void
++_cairo_xlib_display_cancel_work (cairo_xlib_display_t *display,
++ void *data)
++{
++ cairo_xlib_job_t *job, *next, **prev;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ prev = &display->workqueue;
++ for (job = display->workqueue; job != NULL; job = next) {
++ next = job->next;
++ if (job->type == WORK && job->func.work.data == data) {
++ if (job->func.work.destroy != NULL)
++ job->func.work.destroy (job->func.work.data);
++ _cairo_freelist_free (&display->wq_freelist, job);
++
++ *prev = next;
++ break;
++ }
++ prev = &job->next;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++}
++
++cairo_status_t
++_cairo_xlib_display_queue_work (cairo_xlib_display_t *display,
++ cairo_xlib_notify_func notify,
++ void *data,
++ void (*destroy) (void *))
++{
++ cairo_xlib_job_t *job;
++ cairo_status_t status = CAIRO_STATUS_SUCCESS;
++
++ job = _cairo_freelist_alloc (&display->wq_freelist);
++ if (job == NULL)
++ return CAIRO_STATUS_NO_MEMORY;
++
++ job->type = WORK;
++ job->func.work.data = data;
++ job->func.work.notify = notify;
++ job->func.work.destroy = destroy;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ if (display->closed == FALSE) {
++ job->next = display->workqueue;
++ display->workqueue = job;
++ } else {
++ _cairo_freelist_free (&display->wq_freelist, job);
++ job = NULL;
++ status = CAIRO_STATUS_NO_MEMORY;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++
++ return status;
++}
++
++void
++_cairo_xlib_display_notify (cairo_xlib_display_t *display)
++{
++ cairo_xlib_job_t *jobs, *job;
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ jobs = display->workqueue;
++ while (jobs != NULL) {
++ display->workqueue = NULL;
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++
++ /* reverse the list to obtain FIFO order */
++ job = NULL;
++ do {
++ cairo_xlib_job_t *next = jobs->next;
++ jobs->next = job;
++ job = jobs;
++ jobs = next;
++ } while (jobs != NULL);
++ jobs = job;
++
++ do {
++ job = jobs;
++ jobs = job->next;
++
++ switch (job->type){
++ case WORK:
++ job->func.work.notify (display->display, job->func.work.data);
++ if (job->func.work.destroy != NULL)
++ job->func.work.destroy (job->func.work.data);
++ break;
++
++ case RESOURCE:
++ job->func.resource.notify (display->display,
++ job->func.resource.xid);
++ break;
++ }
++
++ _cairo_freelist_free (&display->wq_freelist, job);
++ } while (jobs != NULL);
++
++ CAIRO_MUTEX_LOCK (display->mutex);
++ jobs = display->workqueue;
++ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++}
+--- a/src/cairo-xlib-private.h
++++ b/src/cairo-xlib-private.h
+@@ -35,30 +35,82 @@
+
+ #include "cairoint.h"
+ #include "cairo-xlib.h"
++#include "cairo-freelist-private.h"
+
++typedef struct _cairo_xlib_display cairo_xlib_display_t;
+ typedef struct _cairo_xlib_screen_info cairo_xlib_screen_info_t;
+ typedef struct _cairo_xlib_hook cairo_xlib_hook_t;
++typedef struct _cairo_xlib_job cairo_xlib_job_t;
++typedef void (*cairo_xlib_notify_func) (Display *, void *);
++typedef void (*cairo_xlib_notify_resource_func) (Display *, XID);
+
+ struct _cairo_xlib_hook {
+ cairo_xlib_hook_t *next;
+ void (*func) (Display *display, void *data);
+ void *data;
+- void *key;
++ const void *key;
++};
++
++struct _cairo_xlib_display {
++ cairo_xlib_display_t *next;
++ unsigned int ref_count;
++ cairo_mutex_t mutex;
++
++ Display *display;
++ cairo_xlib_screen_info_t *screens;
++
++ cairo_xlib_job_t *workqueue;
++ cairo_freelist_t wq_freelist;
++
++ cairo_xlib_hook_t *close_display_hooks;
++ unsigned int closed :1;
+ };
+
+ struct _cairo_xlib_screen_info {
+ cairo_xlib_screen_info_t *next;
+ unsigned int ref_count;
+
+- Display *display;
++ cairo_xlib_display_t *display;
+ Screen *screen;
+ cairo_bool_t has_render;
+
+ cairo_font_options_t font_options;
+
+- cairo_xlib_hook_t *close_display_hooks;
++ GC gc[6];
+ };
+
++cairo_private cairo_xlib_display_t *
++_cairo_xlib_display_get (Display *display);
++
++cairo_private cairo_xlib_display_t *
++_cairo_xlib_display_reference (cairo_xlib_display_t *info);
++cairo_private void
++_cairo_xlib_display_destroy (cairo_xlib_display_t *info);
++
++cairo_private cairo_bool_t
++_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data, const void *key);
++cairo_private void
++_cairo_xlib_remove_close_display_hooks (Display *display, const void *key);
++
++cairo_private cairo_status_t
++_cairo_xlib_display_queue_work (cairo_xlib_display_t *display,
++ cairo_xlib_notify_func notify,
++ void *data,
++ void (*destroy)(void *));
++cairo_private cairo_status_t
++_cairo_xlib_display_queue_resource (cairo_xlib_display_t *display,
++ cairo_xlib_notify_resource_func notify,
++ XID resource);
++cairo_private void
++_cairo_xlib_display_cancel_work (cairo_xlib_display_t *display,
++ void *data);
++cairo_private void
++_cairo_xlib_display_cancel_resource (cairo_xlib_display_t *display,
++ XID resource);
++
++cairo_private void
++_cairo_xlib_display_notify (cairo_xlib_display_t *display);
++
+ cairo_private cairo_xlib_screen_info_t *
+ _cairo_xlib_screen_info_get (Display *display, Screen *screen);
+
+@@ -67,10 +119,14 @@ _cairo_xlib_screen_info_reference (cairo
+ cairo_private void
+ _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info);
+
+-cairo_private cairo_bool_t
+-_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data, void *key);
+ cairo_private void
+-_cairo_xlib_remove_close_display_hook (Display *display, void *key);
++_cairo_xlib_screen_info_close_display (cairo_xlib_screen_info_t *info);
++
++
++cairo_private GC
++_cairo_xlib_screen_get_gc (cairo_xlib_screen_info_t *info, int depth);
++cairo_private void
++_cairo_xlib_screen_put_gc (cairo_xlib_screen_info_t *info, int depth, GC gc);
+
+ #if CAIRO_HAS_XLIB_XRENDER_SURFACE
+
+--- a/src/cairo-xlib-screen.c
++++ b/src/cairo-xlib-screen.c
+@@ -58,7 +58,6 @@
+
+ #include <fontconfig/fontconfig.h>
+
+-#include <X11/Xlibint.h> /* For XESetCloseDisplay */
+ #include <X11/extensions/Xrender.h>
+
+ static int
+@@ -133,7 +132,7 @@ get_integer_default (Display *dpy,
+ #endif
+
+ static void
+-_cairo_xlib_init_screen_font_options (cairo_xlib_screen_info_t *info)
++_cairo_xlib_init_screen_font_options (Display *dpy, cairo_xlib_screen_info_t *info)
+ {
+ cairo_bool_t xft_hinting;
+ cairo_bool_t xft_antialias;
+@@ -143,23 +142,23 @@ _cairo_xlib_init_screen_font_options (ca
+ cairo_subpixel_order_t subpixel_order;
+ cairo_hint_style_t hint_style;
+
+- if (!get_boolean_default (info->display, "antialias", &xft_antialias))
++ if (!get_boolean_default (dpy, "antialias", &xft_antialias))
+ xft_antialias = TRUE;
+
+- if (!get_boolean_default (info->display, "hinting", &xft_hinting))
++ if (!get_boolean_default (dpy, "hinting", &xft_hinting))
+ xft_hinting = TRUE;
+
+- if (!get_integer_default (info->display, "hintstyle", &xft_hintstyle))
++ if (!get_integer_default (dpy, "hintstyle", &xft_hintstyle))
+ xft_hintstyle = FC_HINT_FULL;
+
+- if (!get_integer_default (info->display, "rgba", &xft_rgba))
++ if (!get_integer_default (dpy, "rgba", &xft_rgba))
+ {
+ xft_rgba = FC_RGBA_UNKNOWN;
+
+ #if RENDER_MAJOR > 0 || RENDER_MINOR >= 6
+ if (info->has_render)
+ {
+- int render_order = XRenderQuerySubpixelOrder (info->display,
++ int render_order = XRenderQuerySubpixelOrder (dpy,
+ XScreenNumberOfScreen (info->screen));
+
+ switch (render_order)
+@@ -243,285 +242,165 @@ _cairo_xlib_init_screen_font_options (ca
+ cairo_font_options_set_hint_metrics (&info->font_options, CAIRO_HINT_METRICS_ON);
+ }
+
+-static cairo_xlib_screen_info_t *_cairo_xlib_screen_list = NULL;
+-
+-/* NOTE: This function must be called with _cairo_xlib_screen_mutex held. */
+-static void
+-_cairo_xlib_call_close_display_hooks (cairo_xlib_screen_info_t *info)
+-{
+- /* call all registered shutdown routines */
+- while (info->close_display_hooks != NULL) {
+- cairo_xlib_hook_t *hooks = info->close_display_hooks;
+- info->close_display_hooks = NULL;
+-
+- /* drop the list mutex whilst calling the hooks */
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+- do {
+- cairo_xlib_hook_t *hook = hooks;
+- hooks = hook->next;
+-
+- hook->func (info->display, hook->data);
+-
+- free (hook);
+- } while (hooks != NULL);
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
+- }
+-}
+-
+-static void
+-_cairo_xlib_screen_info_reference_lock_held (cairo_xlib_screen_info_t *info)
+-{
+- assert (info->ref_count > 0);
+- info->ref_count++;
+-}
+-
+ cairo_xlib_screen_info_t *
+ _cairo_xlib_screen_info_reference (cairo_xlib_screen_info_t *info)
+ {
+ if (info == NULL)
+ return NULL;
+
+- /* use our global mutex until we get a real atomic inc */
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
+-
+- _cairo_xlib_screen_info_reference_lock_held (info);
+-
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
++ assert (info->ref_count > 0);
++ info->ref_count++;
+
+ return info;
+ }
+
+-static void
+-_cairo_xlib_screen_info_destroy_lock_held (cairo_xlib_screen_info_t *info)
++void
++_cairo_xlib_screen_info_close_display (cairo_xlib_screen_info_t *info)
+ {
+- assert (info->ref_count > 0);
+- if (--info->ref_count)
+- return;
++ int i;
+
+- _cairo_xlib_call_close_display_hooks (info);
+- free (info);
++ for (i = 0; i < ARRAY_LENGTH (info->gc); i++) {
++ if (info->gc[i] != NULL) {
++ XFreeGC (info->display->display, info->gc[i]);
++ info->gc[i] = NULL;
++ }
++ }
+ }
+
+ void
+ _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info)
+ {
++ cairo_xlib_screen_info_t **prev;
++ cairo_xlib_screen_info_t *list;
++
+ if (info == NULL)
+ return;
+
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
+-
+- _cairo_xlib_screen_info_destroy_lock_held (info);
+-
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+-}
+-
+-static int
+-_cairo_xlib_close_display (Display *dpy, XExtCodes *codes)
+-{
+- cairo_xlib_screen_info_t *info, **prev, *next;
++ assert (info->ref_count > 0);
++ if (--info->ref_count)
++ return;
+
+- /*
+- * Unhook from the global list
+- */
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
+-
+- prev = &_cairo_xlib_screen_list;
+- for (info = _cairo_xlib_screen_list; info; info = next) {
+- next = info->next;
+- if (info->display == dpy) {
+- /* trigger the hooks explicitly as we know the display is closing */
+- _cairo_xlib_call_close_display_hooks (info);
+- _cairo_xlib_screen_info_destroy_lock_held (info);
+- *prev = next;
+- } else {
+- prev = &info->next;
++ CAIRO_MUTEX_LOCK (info->display->mutex);
++ for (prev = &info->display->screens; (list = *prev); prev = &list->next) {
++ if (list == info) {
++ *prev = info->next;
++ break;
+ }
+ }
+- *prev = NULL;
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+-
+- /* Return value in accordance with requirements of
+- * XESetCloseDisplay */
+- return 0;
+-}
+-
+-static void
+-_cairo_xlib_screen_info_reset (void)
+-{
+- /*
+- * Delete everything in the list.
+- */
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
++ assert (list != NULL);
++ CAIRO_MUTEX_UNLOCK (info->display->mutex);
+
+- while (_cairo_xlib_screen_list != NULL) {
+- cairo_xlib_screen_info_t *info = _cairo_xlib_screen_list;
+- _cairo_xlib_screen_list = info->next;
+- _cairo_xlib_screen_info_destroy_lock_held (info);
+- }
++ _cairo_xlib_screen_info_close_display (info);
+
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
++ _cairo_xlib_display_destroy (info->display);
+
++ free (info);
+ }
+
+-static cairo_xlib_screen_info_t *
+-_cairo_xlib_screen_info_get_lock_held (Display *dpy, Screen *screen)
++cairo_xlib_screen_info_t *
++_cairo_xlib_screen_info_get (Display *dpy, Screen *screen)
+ {
+- cairo_xlib_screen_info_t *info;
+- cairo_xlib_screen_info_t **prev;
+- int event_base, error_base;
+- XExtCodes *codes;
+- cairo_bool_t seen_display = FALSE;
++ cairo_xlib_display_t *display;
++ cairo_xlib_screen_info_t *info = NULL, **prev;
+
+- for (prev = &_cairo_xlib_screen_list; (info = *prev); prev = &(*prev)->next)
+- {
+- if (info->display == dpy) {
+- seen_display = TRUE;
+- if (info->screen == screen) {
+- /*
+- * MRU the list
+- */
+- if (prev != &_cairo_xlib_screen_list) {
+- *prev = info->next;
+- info->next = _cairo_xlib_screen_list;
+- _cairo_xlib_screen_list = info;
+- }
+- break;
+- }
+- }
+- }
+-
+- if (info)
+- return info;
+-
+- info = malloc (sizeof (cairo_xlib_screen_info_t));
+- if (!info)
++ display = _cairo_xlib_display_get (dpy);
++ if (display == NULL)
+ return NULL;
+
+- if (!seen_display) {
+- codes = XAddExtension (dpy);
+- if (!codes) {
+- free (info);
+- return NULL;
+- }
++ CAIRO_MUTEX_LOCK (display->mutex);
++ if (display->closed) {
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++ goto DONE;
++ }
+
+- XESetCloseDisplay (dpy, codes->extension, _cairo_xlib_close_display);
++ for (prev = &display->screens; (info = *prev); prev = &(*prev)->next) {
++ if (info->screen == screen) {
++ /*
++ * MRU the list
++ */
++ if (prev != &display->screens) {
++ *prev = info->next;
++ info->next = display->screens;
++ display->screens = info;
++ }
++ break;
++ }
+ }
++ CAIRO_MUTEX_UNLOCK (display->mutex);
+
+- info->ref_count = 1;
+- info->display = dpy;
+- info->screen = screen;
+- info->close_display_hooks = NULL;
+- info->has_render = FALSE;
+- _cairo_font_options_init_default (&info->font_options);
++ if (info != NULL) {
++ info = _cairo_xlib_screen_info_reference (info);
++ } else {
++ info = malloc (sizeof (cairo_xlib_screen_info_t));
++ if (info != NULL) {
++ info->ref_count = 1;
++ info->display = _cairo_xlib_display_reference (display);
++ info->screen = screen;
++ info->has_render = FALSE;
++ _cairo_font_options_init_default (&info->font_options);
++ memset (info->gc, 0, sizeof (info->gc));
++
++ if (screen) {
++ int event_base, error_base;
++ info->has_render = (XRenderQueryExtension (dpy, &event_base, &error_base) &&
++ (XRenderFindVisualFormat (dpy, DefaultVisual (dpy, DefaultScreen (dpy))) != 0));
++ _cairo_xlib_init_screen_font_options (dpy, info);
++ }
+
+- if (screen) {
+- info->has_render = (XRenderQueryExtension (dpy, &event_base, &error_base) &&
+- (XRenderFindVisualFormat (dpy, DefaultVisual (dpy, DefaultScreen (dpy))) != 0));
+- _cairo_xlib_init_screen_font_options (info);
++ CAIRO_MUTEX_LOCK (display->mutex);
++ info->next = display->screens;
++ display->screens = info;
++ CAIRO_MUTEX_UNLOCK (display->mutex);
++ }
+ }
+
+- info->next = _cairo_xlib_screen_list;
+- _cairo_xlib_screen_list = info;
++DONE:
++ _cairo_xlib_display_destroy (display);
+
+ return info;
+ }
+-cairo_xlib_screen_info_t *
+-_cairo_xlib_screen_info_get (Display *dpy, Screen *screen)
+-{
+- cairo_xlib_screen_info_t *info;
+
+- /* There is an apparent deadlock between this mutex and the
+- * mutex for the display, but it's actually safe. For the
+- * app to call XCloseDisplay() while any other thread is
+- * inside this function would be an error in the logic
+- * app, and the CloseDisplay hook is the only other place we
+- * acquire this mutex.
+- */
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
+-
+- info = _cairo_xlib_screen_info_get_lock_held (dpy, screen);
+- if (info != NULL)
+- _cairo_xlib_screen_info_reference_lock_held (info);
+-
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+-
+- return info;
++static int
++depth_to_index (int depth)
++{
++ switch(depth){
++ case 1: return 0;
++ case 8: return 1;
++ case 15: return 2;
++ case 16: return 3;
++ case 24: return 4;
++ case 32: return 5;
++ }
++ return 0;
+ }
+
+-cairo_bool_t
+-_cairo_xlib_add_close_display_hook (Display *dpy, void (*func) (Display *, void *), void *data, void *key)
++GC
++_cairo_xlib_screen_get_gc (cairo_xlib_screen_info_t *info, int depth)
+ {
+- cairo_xlib_screen_info_t *info;
+- cairo_xlib_hook_t *hook;
+- cairo_xlib_hook_t **prev;
+- cairo_bool_t success = FALSE;
+
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
++ GC gc;
+
+- info = _cairo_xlib_screen_info_get_lock_held (dpy, NULL);
+- if (!info)
+- goto unlock;
++ depth = depth_to_index (depth);
+
+- for (prev = &info->close_display_hooks; (hook = *prev); prev = &hook->next)
+- {
+- if (hook->key == key) {
+- /*
+- * MRU the list
+- */
+- if (prev != &info->close_display_hooks) {
+- *prev = hook->next;
+- hook->next = info->close_display_hooks;
+- info->close_display_hooks = hook;
+- }
+- break;
+- }
+- }
++ gc = info->gc[depth];
++ info->gc[depth] = NULL;
+
+- if (!hook) {
+- hook = malloc (sizeof (cairo_xlib_hook_t));
+- if (!hook)
+- goto unlock;
+- hook->func = func;
+- hook->data = data;
+- hook->key = key;
+- hook->next = info->close_display_hooks;
+- info->close_display_hooks = hook;
+- }
+-
+- success = TRUE;
+- unlock:
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+- return success;
++ return gc;
+ }
+
+ void
+-_cairo_xlib_remove_close_display_hook (Display *dpy, void *key)
++_cairo_xlib_screen_put_gc (cairo_xlib_screen_info_t *info, int depth, GC gc)
+ {
+- cairo_xlib_screen_info_t *info;
+- cairo_xlib_hook_t *hook;
+- cairo_xlib_hook_t **prev;
+-
+- CAIRO_MUTEX_LOCK (_cairo_xlib_screen_mutex);
++ depth = depth_to_index (depth);
+
+- info = _cairo_xlib_screen_info_get_lock_held (dpy, NULL);
+- if (!info)
+- goto unlock;
+-
+- for (prev = &info->close_display_hooks; (hook = *prev); prev = &hook->next)
+- {
+- if (hook->key == key) {
+- *prev = hook->next;
+- free (hook);
+- break;
+- }
++ if (info->gc[depth] != NULL) {
++ cairo_status_t status;
++ status = _cairo_xlib_display_queue_work (info->display,
++ (cairo_xlib_notify_func) XFreeGC,
++ info->gc[depth],
++ NULL);
++ (void) status;
+ }
+
+-unlock:
+- CAIRO_MUTEX_UNLOCK (_cairo_xlib_screen_mutex);
+-}
+-
+-void
+-_cairo_xlib_screen_reset_static_data (void)
+-{
+- _cairo_xlib_screen_info_reset ();
++ info->gc[depth] = gc;
+ }
+--- a/src/cairo-xlib-surface.c
++++ b/src/cairo-xlib-surface.c
+@@ -127,8 +127,17 @@ struct _cairo_xlib_surface {
+ int num_clip_rects;
+
+ XRenderPictFormat *xrender_format;
++ cairo_filter_t filter;
++ int repeat;
++ XTransform xtransform;
+ };
+
++static const XTransform identity = { {
++ { 1 << 16, 0x00000, 0x00000 },
++ { 0x00000, 1 << 16, 0x00000 },
++ { 0x00000, 0x00000, 1 << 16 },
++} };
++
+ #define CAIRO_SURFACE_RENDER_AT_LEAST(surface, major, minor) \
+ (((surface)->render_major > major) || \
+ (((surface)->render_major == major) && ((surface)->render_minor >= minor)))
+@@ -281,6 +290,8 @@ _cairo_xlib_surface_create_similar (void
+ cairo_xlib_surface_t *surface;
+ Pixmap pix;
+
++ _cairo_xlib_display_notify (src->screen_info->display);
++
+ /* Start by examining the surface's XRenderFormat, or if it
+ * doesn't have one, then look one up through its visual (in the
+ * case of a bitmap, it won't even have that). */
+@@ -322,21 +333,75 @@ _cairo_xlib_surface_create_similar (void
+ return &surface->base;
+ }
+
++static void
++_cairo_xlib_reset_clip_mask (Display *dpy, GC gc)
++{
++ XSetClipMask(dpy, gc, None);
++}
++
+ static cairo_status_t
+ _cairo_xlib_surface_finish (void *abstract_surface)
+ {
+ cairo_xlib_surface_t *surface = abstract_surface;
+- if (surface->dst_picture != None)
+- XRenderFreePicture (surface->dpy, surface->dst_picture);
+-
+- if (surface->src_picture != None)
+- XRenderFreePicture (surface->dpy, surface->src_picture);
+-
+- if (surface->owns_pixmap)
+- XFreePixmap (surface->dpy, surface->drawable);
+-
+- if (surface->gc != NULL)
+- XFreeGC (surface->dpy, surface->gc);
++ cairo_xlib_display_t *display = surface->screen_info ?
++ surface->screen_info->display :
++ NULL;
++ cairo_status_t status = CAIRO_STATUS_SUCCESS;
++
++ if (surface->dst_picture != None) {
++ cairo_status_t status2;
++ assert (display != NULL);
++ status2 = _cairo_xlib_display_queue_resource (display,
++ XRenderFreePicture,
++ surface->dst_picture);
++ if (status2 == CAIRO_STATUS_SUCCESS)
++ surface->dst_picture = None;
++ else if (status == CAIRO_STATUS_SUCCESS)
++ status = status2;
++ }
++
++ if (surface->src_picture != None) {
++ cairo_status_t status2;
++ assert (display != NULL);
++ status2 = _cairo_xlib_display_queue_resource (display,
++ XRenderFreePicture,
++ surface->src_picture);
++ if (status2 == CAIRO_STATUS_SUCCESS)
++ surface->src_picture = None;
++ else if (status == CAIRO_STATUS_SUCCESS)
++ status = status2;
++ }
++
++ if (surface->owns_pixmap) {
++ cairo_status_t status2;
++ assert (display != NULL);
++ status2 = _cairo_xlib_display_queue_resource (display,
++ (cairo_xlib_notify_resource_func) XFreePixmap,
++ surface->drawable);
++ if (status2 == CAIRO_STATUS_SUCCESS) {
++ surface->owns_pixmap = FALSE;
++ surface->drawable = None;
++ } else if (status == CAIRO_STATUS_SUCCESS)
++ status = status2;
++ }
++
++ if (surface->gc != NULL) {
++ _cairo_xlib_screen_put_gc (surface->screen_info,
++ surface->depth,
++ surface->gc);
++ if (surface->have_clip_rects) {
++ cairo_status_t status2;
++ assert (display != NULL);
++ status2 = _cairo_xlib_display_queue_work (display,
++ (cairo_xlib_notify_func) _cairo_xlib_reset_clip_mask,
++ surface->gc,
++ NULL);
++ if (status2 == CAIRO_STATUS_SUCCESS)
++ surface->gc = NULL;
++ else if (status == CAIRO_STATUS_SUCCESS)
++ status = status2;
++ }
++ }
+
+ if (surface->clip_rects != NULL)
+ free (surface->clip_rects);
+@@ -344,9 +409,12 @@ _cairo_xlib_surface_finish (void *abstra
+ if (surface->screen_info != NULL)
+ _cairo_xlib_screen_info_destroy (surface->screen_info);
+
+- surface->dpy = NULL;
++ if (surface->dpy != NULL) {
++ _cairo_xlib_remove_close_display_hooks (surface->dpy, surface);
++ surface->dpy = NULL;
++ }
+
+- return CAIRO_STATUS_SUCCESS;
++ return status;
+ }
+
+ static int
+@@ -747,11 +815,15 @@ _cairo_xlib_surface_ensure_gc (cairo_xli
+ if (surface->gc)
+ return CAIRO_STATUS_SUCCESS;
+
+- gcv.graphics_exposures = False;
+- surface->gc = XCreateGC (surface->dpy, surface->drawable,
+- GCGraphicsExposures, &gcv);
+- if (!surface->gc)
+- return CAIRO_STATUS_NO_MEMORY;
++ surface->gc = _cairo_xlib_screen_get_gc (surface->screen_info,
++ surface->depth);
++ if (surface->gc == NULL) {
++ gcv.graphics_exposures = False;
++ surface->gc = XCreateGC (surface->dpy, surface->drawable,
++ GCGraphicsExposures, &gcv);
++ if (!surface->gc)
++ return CAIRO_STATUS_NO_MEMORY;
++ }
+
+ _cairo_xlib_surface_set_gc_clip_rects (surface);
+
+@@ -814,6 +886,8 @@ _cairo_xlib_surface_acquire_source_image
+ cairo_image_surface_t *image;
+ cairo_status_t status;
+
++ _cairo_xlib_display_notify (surface->screen_info->display);
++
+ status = _get_image_surface (surface, NULL, &image, NULL);
+ if (status)
+ return status;
+@@ -843,6 +917,8 @@ _cairo_xlib_surface_acquire_dest_image (
+ cairo_image_surface_t *image;
+ cairo_status_t status;
+
++ _cairo_xlib_display_notify (surface->screen_info->display);
++
+ status = _get_image_surface (surface, interest_rect, &image, image_rect_out);
+ if (status)
+ return status;
+@@ -894,6 +970,8 @@ _cairo_xlib_surface_clone_similar (void
+ cairo_xlib_surface_t *clone;
+ cairo_status_t status;
+
++ _cairo_xlib_display_notify (surface->screen_info->display);
++
+ if (src->backend == surface->base.backend ) {
+ cairo_xlib_surface_t *xlib_src = (cairo_xlib_surface_t *)src;
+
+@@ -952,19 +1030,17 @@ _cairo_xlib_surface_set_matrix (cairo_xl
+
+ if (!CAIRO_SURFACE_RENDER_HAS_PICTURE_TRANSFORM (surface))
+ {
+- static const XTransform identity = { {
+- { 1 << 16, 0x00000, 0x00000 },
+- { 0x00000, 1 << 16, 0x00000 },
+- { 0x00000, 0x00000, 1 << 16 },
+- } };
+-
+ if (memcmp (&xtransform, &identity, sizeof (XTransform)) == 0)
+ return CAIRO_STATUS_SUCCESS;
+
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+ }
+
++ if (memcmp (&xtransform, &surface->xtransform, sizeof (XTransform)) == 0)
++ return CAIRO_STATUS_SUCCESS;
++
+ XRenderSetPictureTransform (surface->dpy, surface->src_picture, &xtransform);
++ surface->xtransform = xtransform;
+
+ return CAIRO_STATUS_SUCCESS;
+ }
+@@ -978,6 +1054,9 @@ _cairo_xlib_surface_set_filter (cairo_xl
+ if (!surface->src_picture)
+ return CAIRO_STATUS_SUCCESS;
+
++ if (surface->filter == filter)
++ return CAIRO_STATUS_SUCCESS;
++
+ if (!CAIRO_SURFACE_RENDER_HAS_FILTERS (surface))
+ {
+ if (filter == CAIRO_FILTER_FAST || filter == CAIRO_FILTER_NEAREST)
+@@ -1015,6 +1094,7 @@ _cairo_xlib_surface_set_filter (cairo_xl
+
+ XRenderSetPictureFilter (surface->dpy, surface->src_picture,
+ (char *) render_filter, NULL, 0);
++ surface->filter = filter;
+
+ return CAIRO_STATUS_SUCCESS;
+ }
+@@ -1028,10 +1108,14 @@ _cairo_xlib_surface_set_repeat (cairo_xl
+ if (!surface->src_picture)
+ return CAIRO_STATUS_SUCCESS;
+
++ if (surface->repeat == repeat)
++ return CAIRO_STATUS_SUCCESS;
++
+ mask = CPRepeat;
+ pa.repeat = repeat;
+
+ XRenderChangePicture (surface->dpy, surface->src_picture, mask, &pa);
++ surface->repeat = repeat;
+
+ return CAIRO_STATUS_SUCCESS;
+ }
+@@ -1327,6 +1411,8 @@ _cairo_xlib_surface_composite (cairo_ope
+ int itx, ity;
+ cairo_bool_t is_integer_translation;
+
++ _cairo_xlib_display_notify (dst->screen_info->display);
++
+ if (!CAIRO_SURFACE_RENDER_HAS_COMPOSITE (dst))
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+
+@@ -1466,6 +1552,8 @@ _cairo_xlib_surface_fill_rectangles (voi
+ cairo_xlib_surface_t *surface = abstract_surface;
+ XRenderColor render_color;
+
++ _cairo_xlib_display_notify (surface->screen_info->display);
++
+ if (!CAIRO_SURFACE_RENDER_HAS_FILL_RECTANGLE (surface))
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+
+@@ -1598,6 +1686,8 @@ _cairo_xlib_surface_composite_trapezoids
+ int render_src_x, render_src_y;
+ XRenderPictFormat *pict_format;
+
++ _cairo_xlib_display_notify (dst->screen_info->display);
++
+ if (!CAIRO_SURFACE_RENDER_HAS_TRAPEZOIDS (dst))
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+
+@@ -1707,6 +1797,8 @@ _cairo_xlib_surface_set_clip_region (voi
+ {
+ cairo_xlib_surface_t *surface = (cairo_xlib_surface_t *) abstract_surface;
+
++ _cairo_xlib_display_notify (surface->screen_info->display);
++
+ if (surface->clip_rects) {
+ free (surface->clip_rects);
+ surface->clip_rects = NULL;
+@@ -1793,6 +1885,16 @@ static void
+ _cairo_xlib_surface_scaled_glyph_fini (cairo_scaled_glyph_t *scaled_glyph,
+ cairo_scaled_font_t *scaled_font);
+
++static cairo_bool_t
++_cairo_xlib_surface_is_compatible (void *surface_a,
++ void *surface_b)
++{
++ cairo_xlib_surface_t *a = (cairo_xlib_surface_t *) surface_a;
++ cairo_xlib_surface_t *b = (cairo_xlib_surface_t *) surface_b;
++
++ return _cairo_xlib_surface_same_screen (a, b);
++}
++
+ static const cairo_surface_backend_t cairo_xlib_surface_backend = {
+ CAIRO_SURFACE_TYPE_XLIB,
+ _cairo_xlib_surface_create_similar,
+@@ -1822,7 +1924,8 @@ static const cairo_surface_backend_t cai
+ NULL, /* stroke */
+ NULL, /* fill */
+ _cairo_xlib_surface_show_glyphs,
+- NULL /* snapshot */
++ NULL, /* snapshot */
++ _cairo_xlib_surface_is_compatible,
+ };
+
+ /**
+@@ -1839,6 +1942,44 @@ _cairo_surface_is_xlib (cairo_surface_t
+ return surface->backend == &cairo_xlib_surface_backend;
+ }
+
++static void
++_cairo_xlib_surface_detach_display (Display *dpy, void *data)
++{
++ cairo_xlib_surface_t *surface = data;
++
++ surface->dpy = NULL;
++
++ if (surface->dst_picture != None) {
++ XRenderFreePicture (dpy, surface->dst_picture);
++ _cairo_xlib_display_cancel_resource (surface->screen_info->display,
++ surface->dst_picture);
++ surface->dst_picture = None;
++ }
++
++ if (surface->src_picture != None) {
++ XRenderFreePicture (dpy, surface->src_picture);
++ _cairo_xlib_display_cancel_resource (surface->screen_info->display,
++ surface->src_picture);
++ surface->src_picture = None;
++ }
++
++ if (surface->owns_pixmap) {
++ XFreePixmap (dpy, surface->drawable);
++ _cairo_xlib_display_cancel_resource (surface->screen_info->display,
++ surface->drawable);
++ surface->drawable = None;
++ surface->owns_pixmap = FALSE;
++ }
++
++ if (surface->gc != NULL) {
++ assert (surface->screen_info != NULL);
++ XFreeGC (dpy, surface->gc);
++ _cairo_xlib_display_cancel_work (surface->screen_info->display,
++ surface->gc);
++ surface->gc = NULL;
++ }
++}
++
+ static cairo_surface_t *
+ _cairo_xlib_surface_create_internal (Display *dpy,
+ Drawable drawable,
+@@ -1865,6 +2006,14 @@ _cairo_xlib_surface_create_internal (Dis
+ return (cairo_surface_t*) &_cairo_surface_nil;
+ }
+
++ if (! _cairo_xlib_add_close_display_hook (dpy,
++ _cairo_xlib_surface_detach_display, surface, surface)) {
++ free (surface);
++ _cairo_xlib_screen_info_destroy (screen_info);
++ _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ return (cairo_surface_t*) &_cairo_surface_nil;
++ }
++
+ if (xrender_format) {
+ depth = xrender_format->depth;
+ } else if (visual) {
+@@ -1935,6 +2084,9 @@ _cairo_xlib_surface_create_internal (Dis
+ surface->visual = visual;
+ surface->xrender_format = xrender_format;
+ surface->depth = depth;
++ surface->filter = (cairo_filter_t) -1; /* XXX XRender default? */
++ surface->repeat = FALSE;
++ surface->xtransform = identity;
+
+ surface->have_clip_rects = FALSE;
+ surface->clip_rects = NULL;
+@@ -2125,14 +2277,26 @@ cairo_xlib_surface_set_drawable (cairo_s
+ return;
+
+ if (surface->drawable != drawable) {
+- if (surface->dst_picture)
+- XRenderFreePicture (surface->dpy, surface->dst_picture);
++ if (surface->dst_picture != None) {
++ cairo_status_t status;
++ status = _cairo_xlib_display_queue_resource (
++ surface->screen_info->display,
++ XRenderFreePicture,
++ surface->dst_picture);
++ (void) status;
++ surface->dst_picture = None;
++ }
++
++ if (surface->src_picture != None) {
++ cairo_status_t status;
++ status = _cairo_xlib_display_queue_resource (
++ surface->screen_info->display,
++ XRenderFreePicture,
++ surface->src_picture);
++ (void) status;
+
+- if (surface->src_picture)
+- XRenderFreePicture (surface->dpy, surface->src_picture);
+-
+- surface->dst_picture = None;
+- surface->src_picture = None;
++ surface->src_picture = None;
++ }
+
+ surface->drawable = drawable;
+ }
+@@ -2310,7 +2474,7 @@ typedef struct _cairo_xlib_surface_font_
+
+ static void
+ _cairo_xlib_surface_remove_scaled_font (Display *dpy,
+- void *data)
++ void *data)
+ {
+ cairo_scaled_font_t *scaled_font = data;
+ cairo_xlib_surface_font_private_t *font_private;
+@@ -2322,8 +2486,18 @@ _cairo_xlib_surface_remove_scaled_font (
+ _cairo_scaled_font_reset_cache (scaled_font);
+ CAIRO_MUTEX_UNLOCK (scaled_font->mutex);
+
+- if (font_private) {
++ if (font_private != NULL) {
++ cairo_xlib_display_t *display;
++
+ XRenderFreeGlyphSet (font_private->dpy, font_private->glyphset);
++
++ display = _cairo_xlib_display_get (dpy);
++ if (display != NULL) {
++ _cairo_xlib_display_cancel_resource (display,
++ font_private->glyphset);
++ _cairo_xlib_display_destroy (display);
++ }
++
+ free (font_private);
+ }
+ }
+@@ -2363,12 +2537,34 @@ _cairo_xlib_surface_scaled_font_fini (ca
+ cairo_xlib_surface_font_private_t *font_private = scaled_font->surface_private;
+
+ if (font_private) {
+- _cairo_xlib_remove_close_display_hook (font_private->dpy, scaled_font);
+- XRenderFreeGlyphSet (font_private->dpy, font_private->glyphset);
++ cairo_xlib_display_t *display;
++
++ _cairo_xlib_remove_close_display_hooks (font_private->dpy, scaled_font);
++
++ display = _cairo_xlib_display_get (font_private->dpy);
++ if (display != NULL) {
++ cairo_status_t status = _cairo_xlib_display_queue_resource (display,
++ XRenderFreeGlyphSet,
++ font_private->glyphset);
++ (void) status; /* cannot propagate failure */
++ _cairo_xlib_display_destroy (display);
++ }
++
+ free (font_private);
+ }
+ }
+
++struct _cairo_xlib_render_free_glyphs {
++ GlyphSet glyphset;
++ unsigned long glyph_index;
++};
++static void _cairo_xlib_render_free_glyphs (Display *dpy, struct _cairo_xlib_render_free_glyphs *arg)
++{
++ XRenderFreeGlyphs (dpy,
++ arg->glyphset,
++ &arg->glyph_index, 1);
++}
++
+ static void
+ _cairo_xlib_surface_scaled_glyph_fini (cairo_scaled_glyph_t *scaled_glyph,
+ cairo_scaled_font_t *scaled_font)
+@@ -2376,10 +2572,23 @@ _cairo_xlib_surface_scaled_glyph_fini (c
+ cairo_xlib_surface_font_private_t *font_private = scaled_font->surface_private;
+
+ if (font_private != NULL && scaled_glyph->surface_private != NULL) {
+- unsigned long glyph_index = _cairo_scaled_glyph_index(scaled_glyph);
+- XRenderFreeGlyphs (font_private->dpy,
+- font_private->glyphset,
+- &glyph_index, 1);
++ cairo_xlib_display_t *display = _cairo_xlib_display_get (font_private->dpy);
++ if (display != NULL) {
++ struct _cairo_xlib_render_free_glyphs *arg = malloc (sizeof (*arg));
++ if (arg != NULL) {
++ cairo_status_t status;
++ arg->glyphset = font_private->glyphset;
++ arg->glyph_index = _cairo_scaled_glyph_index (scaled_glyph);
++ status = _cairo_xlib_display_queue_work (display,
++ (cairo_xlib_notify_func) _cairo_xlib_render_free_glyphs,
++ arg,
++ free);
++ (void) status; /* cannot propagate failure */
++ }
++
++ _cairo_xlib_display_destroy (display);
++
++ }
+ }
+ }
+
+@@ -2990,6 +3199,7 @@ _cairo_xlib_surface_show_glyphs (void
+ _cairo_pattern_fini (&solid_pattern.base);
+ BAIL0:
+ _cairo_scaled_font_thaw_cache (scaled_font);
++ _cairo_xlib_display_notify (dst->screen_info->display);
+
+ return status;
+ }
+--- a/src/cairoint.h
++++ b/src/cairoint.h
+@@ -172,6 +172,11 @@ do { \
+ assert (NOT_REACHED); \
+ } while (0)
+
++/* Performs a compile time assert */
++#define CAIRO_STATIC_ASSERT(condition) _CAIRO_STATIC_ASSERT_IMPL(condition, __LINE__)
++#define _CAIRO_STATIC_ASSERT_IMPL(condition, line) _CAIRO_STATIC_ASSERT_IMPL2(condition, line)
++#define _CAIRO_STATIC_ASSERT_IMPL2(condition, line) typedef int _cairo_static_assert_line_##line[(condition) ? 1 : -1]
++
+ #define CAIRO_REF_COUNT_INVALID ((unsigned int) -1)
+
+ #include "cairo-mutex-private.h"
+@@ -591,12 +596,6 @@ _cairo_font_reset_static_data (void);
+ cairo_private void
+ _cairo_ft_font_reset_static_data (void);
+
+-cairo_private void
+-_cairo_xlib_surface_reset_static_data (void);
+-
+-cairo_private void
+-_cairo_xlib_screen_reset_static_data (void);
+-
+ /* the font backend interface */
+
+ struct _cairo_unscaled_font_backend {
+@@ -974,6 +973,10 @@ struct _cairo_surface_backend {
+
+ cairo_surface_t *
+ (*snapshot) (void *surface);
++
++ cairo_bool_t
++ (*is_compatible) (void *surface_a,
++ void *surface_b);
+ };
+
+ typedef struct _cairo_format_masks {
+@@ -1848,7 +1851,8 @@ _cairo_surface_create_similar_solid (cai
+ cairo_content_t content,
+ int width,
+ int height,
+- const cairo_color_t *color);
++ const cairo_color_t *color,
++ cairo_pattern_t *pattern);
+
+ cairo_private void
+ _cairo_surface_init (cairo_surface_t *surface,
+@@ -1993,6 +1997,10 @@ _cairo_surface_clone_similar (cairo_surf
+ cairo_private cairo_surface_t *
+ _cairo_surface_snapshot (cairo_surface_t *surface);
+
++cairo_private cairo_bool_t
++_cairo_surface_is_compatible (cairo_surface_t *surface_a,
++ cairo_surface_t *surface_b);
++
+ cairo_private unsigned int
+ _cairo_surface_get_current_clip_serial (cairo_surface_t *surface);
+
+--- a/test/create-for-stream.c
++++ b/test/create-for-stream.c
+@@ -177,12 +177,14 @@ test_surface (const char *filename,
+ if (fread (file_contents, 1, wc.index, fp) != wc.index) {
+ cairo_test_log ("Failed to read %s: %s\n",
+ filename, strerror (errno));
++ fclose (fp);
+ return CAIRO_TEST_FAILURE;
+ }
+
+ if (memcmp (file_contents, wc.buffer, wc.index) != 0) {
+ cairo_test_log ("Stream based output differ from file output for %s\n",
+ filename);
++ fclose (fp);
+ return CAIRO_TEST_FAILURE;
+ }
+
+@@ -195,35 +197,36 @@ test_surface (const char *filename,
+ int
+ main (void)
+ {
+- cairo_test_status_t status;
++ cairo_test_status_t status = CAIRO_TEST_SUCCESS;
++ cairo_test_status_t test_status;
+
+ cairo_test_init ("create-for-stream");
+
+ #if CAIRO_HAS_PS_SURFACE
+- status = test_surface ("create-for-stream.ps",
+- cairo_ps_surface_create,
+- cairo_ps_surface_create_for_stream);
+- if (status != CAIRO_TEST_SUCCESS)
+- return status;
++ test_status = test_surface ("create-for-stream.ps",
++ cairo_ps_surface_create,
++ cairo_ps_surface_create_for_stream);
++ if (status == CAIRO_TEST_SUCCESS)
++ status = test_status;
+ #endif
+
+ #if CAIRO_HAS_PDF_SURFACE
+- status = test_surface ("create-for-stream.pdf",
+- cairo_pdf_surface_create,
+- cairo_pdf_surface_create_for_stream);
+- if (status != CAIRO_TEST_SUCCESS)
+- return status;
++ test_status = test_surface ("create-for-stream.pdf",
++ cairo_pdf_surface_create,
++ cairo_pdf_surface_create_for_stream);
++ if (status == CAIRO_TEST_SUCCESS)
++ status = test_status;
+ #endif
+
+ #if CAIRO_HAS_SVG_SURFACE
+- status = test_surface ("create-for-stream.svg",
+- cairo_svg_surface_create,
+- cairo_svg_surface_create_for_stream);
+- if (status != CAIRO_TEST_SUCCESS)
+- return status;
++ test_status = test_surface ("create-for-stream.svg",
++ cairo_svg_surface_create,
++ cairo_svg_surface_create_for_stream);
++ if (status == CAIRO_TEST_SUCCESS)
++ status = test_status;
+ #endif
+
+ cairo_test_fini ();
+
+- return CAIRO_TEST_SUCCESS;
++ return status;
+ }
diff --git a/packages/cairo/cairo_1.2.2.bb b/packages/cairo/cairo_1.2.2.bb
deleted file mode 100644
index f6667eae1b..0000000000
--- a/packages/cairo/cairo_1.2.2.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libx11 libsm libpng fontconfig libxrender"
-DESCRIPTION = "Cairo graphics library"
-LICENSE = "MPL LGPL"
-
-SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage () {
-autotools_stage_all
-}
diff --git a/packages/cairo/cairo_1.3.14.bb b/packages/cairo/cairo_1.3.14.bb
deleted file mode 100644
index 6bc0cb37f7..0000000000
--- a/packages/cairo/cairo_1.3.14.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-#This is a development snapshot, so lets hint OE to use the releases
-DEFAULT_PREFERENCE = "-1"
-
-require cairo.inc
-
-SRC_URI = "http://cairographics.org/snapshots/cairo-${PV}.tar.gz \
- file://cairo-surface-cache-3.patch;patch=1"
-
-PR = "r0"
-
diff --git a/packages/cairo/cairo_1.3.4.bb b/packages/cairo/cairo_1.3.4.bb
deleted file mode 100644
index 19e3f7a872..0000000000
--- a/packages/cairo/cairo_1.3.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-#This is a development snapshot, so lets hint OE to use the releases
-DEFAULT_PREFERENCE = "-1"
-
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libx11 libsm libpng fontconfig libxrender"
-DESCRIPTION = "Cairo graphics library"
-LICENSE = "MPL LGPL"
-
-SRC_URI = "http://cairographics.org/snapshots/cairo-${PV}.tar.gz \
- file://configure.in_requires_pkg-config-0.15.diff;patch=1;pnum=2"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/cairo/cairo_1.4.0.bb b/packages/cairo/cairo_1.4.0.bb
deleted file mode 100644
index 3e5d2fdb15..0000000000
--- a/packages/cairo/cairo_1.4.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require cairo.inc
-
-SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz \
- file://cairo-surface-cache-3.patch;patch=1"
-
-PR = "r0"
-
diff --git a/packages/cairo/cairo_1.4.10.bb b/packages/cairo/cairo_1.4.10.bb
new file mode 100644
index 0000000000..845e14fc29
--- /dev/null
+++ b/packages/cairo/cairo_1.4.10.bb
@@ -0,0 +1,6 @@
+require cairo.inc
+
+SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz"
+
+PR = "r0"
+
diff --git a/packages/cairo/cairo_1.4.8.bb b/packages/cairo/cairo_1.4.8.bb
new file mode 100644
index 0000000000..845e14fc29
--- /dev/null
+++ b/packages/cairo/cairo_1.4.8.bb
@@ -0,0 +1,6 @@
+require cairo.inc
+
+SRC_URI = "http://cairographics.org/releases/cairo-${PV}.tar.gz"
+
+PR = "r0"
+
diff --git a/packages/cairo/cairo_git.bb b/packages/cairo/cairo_git.bb
index a2a6448565..6c527988a9 100644
--- a/packages/cairo/cairo_git.bb
+++ b/packages/cairo/cairo_git.bb
@@ -3,11 +3,11 @@ DEFAULT_PREFERENCE = "-1"
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = "virtual/libx11 libsm libpng fontconfig libxrender"
+DEPENDS = "pixman virtual/libx11 libsm libpng fontconfig libxrender"
DESCRIPTION = "Cairo graphics library"
LICENSE = "MPL LGPL"
-PV = "1.3.17+git${SRCDATE}"
+PV = "1.5.1+git${SRCDATE}"
SRC_URI = "git://git.cairographics.org/git/cairo;protocol=git \
"
@@ -15,10 +15,6 @@ inherit autotools pkgconfig
S = "${WORKDIR}/git"
-do_configure_prepend() {
- sed -i s:PKGCONFIG_REQUIRED=0.19:PKGCONFIG_REQUIRED=0.15: configure.in
-}
-
do_compile_append() {
cd ${S}/perf ; oe_runmake
}
diff --git a/packages/cairo/cairomm_1.2.4.bb b/packages/cairo/cairomm_1.2.4.bb
new file mode 100644
index 0000000000..7796a44016
--- /dev/null
+++ b/packages/cairo/cairomm_1.2.4.bb
@@ -0,0 +1,9 @@
+require cairo.inc
+
+DEPENDS = "cairo"
+DESCRIPTION = "C++ bindings for Cairo graphics library"
+PR = "r0"
+
+SRC_URI = "http://cairographics.org/releases/cairomm-${PV}.tar.gz"
+
+#EXTRA_OECONF = "--disable-docs"
diff --git a/packages/e17/e17-gpe-menu-convert/.mtn2git_empty b/packages/chrpath/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/e17/e17-gpe-menu-convert/.mtn2git_empty
+++ b/packages/chrpath/.mtn2git_empty
diff --git a/packages/chrpath/chrpath-native_0.13.bb b/packages/chrpath/chrpath-native_0.13.bb
new file mode 100644
index 0000000000..6ba8feb5e6
--- /dev/null
+++ b/packages/chrpath/chrpath-native_0.13.bb
@@ -0,0 +1,3 @@
+require chrpath.inc
+
+inherit native
diff --git a/packages/chrpath/chrpath.inc b/packages/chrpath/chrpath.inc
new file mode 100644
index 0000000000..1858d47d2c
--- /dev/null
+++ b/packages/chrpath/chrpath.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "chrpath allows you to change the rpath (where the application looks for libraries) in an application. It does not (yet) allow you to add an rpath if there isn't one already."
+LICENSE = "GPL"
+
+SRC_URI = "http://ftp.debian.org/debian/pool/main/c/chrpath/chrpath_${PV}.orig.tar.gz"
+
+inherit autotools
+
+S = "${WORKDIR}/chrpath-${PV}"
+
+
diff --git a/packages/chrpath/chrpath_0.13.bb b/packages/chrpath/chrpath_0.13.bb
new file mode 100644
index 0000000000..15392d9ac2
--- /dev/null
+++ b/packages/chrpath/chrpath_0.13.bb
@@ -0,0 +1 @@
+require chrpath.inc
diff --git a/packages/clamav/clamav.inc b/packages/clamav/clamav.inc
index b18cd06c24..6bdd36c7d2 100644
--- a/packages/clamav/clamav.inc
+++ b/packages/clamav/clamav.inc
@@ -10,21 +10,21 @@ DESCRIPTION_${PN}-daemon = "An on-demand file scanning service for Clam AntiViru
HOMEPAGE = "http://www.clamav.net/"
SECTION = "network"
LICENSE = "GPL"
-DEPENDS = "zlib bzip2 gmp"
+DEPENDS = "zlib bzip2 gmp curl virtual/libintl"
RDEPENDS_${PN} = "${PN}-data"
-RDEPENDS_${PN}-daemon = "${PN}-data"
+RDEPENDS_${PN}-daemon = "${PN}-data ${PN}-conf"
+RDEPENDS_${PN}-freshclam = "${PN}-conf"
RRECOMMENDS_${PN} = "${PN}-freshclam"
RRECOMMENDS_${PN}-daemon = "${PN}-freshclam"
+RPROVIDES_${PN}-freshclam = "${PN}-data"
SRC_URI = "${SOURCEFORGE_MIRROR}/clamav/clamav-${PV}.tar.gz \
file://cross-compile-fix.patch;patch=1 \
- file://libtool-fix.patch;patch=1 \
file://clamav-daemon.init \
file://clamav-freshclam.init \
- file://clamav-daemon.default \
file://clamd.conf \
file://freshclam.conf \
- file://volatiles.02_clamav-data \
+ file://volatiles.03_clamav-data \
file://volatiles.03_clamav-daemon \
file://volatiles.03_clamav-freshclam"
@@ -33,6 +33,8 @@ inherit autotools update-rc.d binconfig
# Don't check for clamav uid/gid - they don't exist on the host
# Put virus definitions in /var/lib not /usr/lib
EXTRA_OECONF = "--disable-clamav \
+ --with-zlib=${STAGING_DIR}/${HOST_SYS} \
+ --with-libcurl \
--with-dbdir=${localstatedir}/lib/clamav"
do_install_append() {
@@ -48,20 +50,13 @@ do_install_append() {
# Install our config files and init scripts
install -m 0755 ${WORKDIR}/freshclam.conf ${D}${sysconfdir}/freshclam.conf
- install -m 0755 ${WORKDIR}/clamav-daemon.default ${D}${sysconfdir}/default/clamav-daemon
install -m 0755 ${WORKDIR}/clamav-daemon.init ${D}${sysconfdir}/init.d/clamav-daemon
install -m 0755 ${WORKDIR}/clamav-freshclam.init ${D}${sysconfdir}/init.d/clamav-freshclam
# We need some /var directories
- for i in 02_clamav-data 03_clamav-daemon 03_clamav-freshclam; do
+ for i in 03_clamav-daemon 03_clamav-freshclam 03_clamav-data; do
install -m 0644 ${WORKDIR}/volatiles.$i ${D}${sysconfdir}/default/volatiles/$i
done
-
- # Move the clamav data to a non-volatile location, we'll symlink back
- # If freshclam is running it'll break the link to this static data
- # once it has succesfully downloaded an update
- install -m 0755 -d ${D}${libdir}
- mv ${D}${localstatedir}/lib/clamav ${D}${libdir}
}
do_stage () {
oe_libinstall -a -so libclamav ${STAGING_LIBDIR}
@@ -69,22 +64,25 @@ do_stage () {
install -m 0644 libclamav/clamav.h ${STAGING_INCDIR}
}
-PACKAGES += "${PN}-freshclam ${PN}-daemon ${PN}-data ${PN}-lib"
+PACKAGES += "${PN}-freshclam ${PN}-daemon ${PN}-conf ${PN}-data ${PN}-lib \
+ ${PN}-clamconf"
-FILES_${PN} = "${bindir}/clamscan ${bindir}/sigtool ${bindir}/clamdscan"
+FILES_${PN} = "${bindir}/clamscan \
+ ${bindir}/sigtool \
+ ${bindir}/clamdscan"
FILES_${PN}-lib = "${libdir}/libclamav.so.*"
+FILES_${PN}-conf = "${sysconfdir}/clamd.conf"
+FILES_${PN}-clamconf = "${bindir}/clamconf"
FILES_${PN}-freshclam = "${bindir}/freshclam \
${sysconfdir}/freshclam.conf \
${sysconfdir}/init.d/clamav-freshclam \
${sysconfdir}/default/volatiles/03_clamav-freshclam"
-FILES_${PN}-daemon = "${sysconfdir}/clamd.conf \
- ${sbindir}/clamd \
+FILES_${PN}-daemon = "${sbindir}/clamd \
${sysconfdir}/init.d/clamav-daemon \
- ${sysconfdir}/default/clamav-daemon \
${sysconfdir}/default/volatiles/03_clamav-daemon"
-FILES_${PN}-data = "${libdir}/clamav/main.cvd \
- ${libdir}/clamav/daily.cvd \
- ${sysconfdir}/default/volatiles/02_clamav-data"
+FILES_${PN}-data = "${localstatedir}/lib/clamav/main.cvd \
+ ${localstatedir}/lib/clamav/daily.cvd \
+ ${sysconfdir}/default/volatiles/03_clamav-data"
FILES_${PN}-dev += "${bindir}/clamav-config"
# Add clamav's user and groups
@@ -111,9 +109,10 @@ pkg_postinst_${PN}-data () {
}
# Indicate that the default files are configuration files
-CONFFILES_${PN}-daemon = "${sysconfdir}/clamd.conf \
- ${sysconfdir}/default/clamav-daemon"
+CONFFILES_${PN}-conf = "${sysconfdir}/clamd.conf"
CONFFILES_${PN}-freshclam = "${sysconfdir}/freshclam.conf"
+CONFFILES_${PN}-data = "${localstatedir}/lib/clamav/main.cvd \
+ ${localstatedir}/lib/clamav/daily.cvd"
INITSCRIPT_PACKAGES = "${PN}-daemon ${PN}-freshclam"
INITSCRIPT_NAME_${PN}-daemon = "clamav-daemon"
diff --git a/packages/clamav/clamav_0.88.6.bb b/packages/clamav/clamav_0.90.2.bb
index e721558efe..e721558efe 100644
--- a/packages/clamav/clamav_0.88.6.bb
+++ b/packages/clamav/clamav_0.90.2.bb
diff --git a/packages/clamav/clamav_0.88.7.bb b/packages/clamav/clamav_0.90.3.bb
index fec4ae59d8..fec4ae59d8 100644
--- a/packages/clamav/clamav_0.88.7.bb
+++ b/packages/clamav/clamav_0.90.3.bb
diff --git a/packages/clamav/files/clamav-daemon.default b/packages/clamav/files/clamav-daemon.default
deleted file mode 100644
index bc19984183..0000000000
--- a/packages/clamav/files/clamav-daemon.default
+++ /dev/null
@@ -1 +0,0 @@
-# Options for clamav-daemon (clamd process)
diff --git a/packages/clamav/files/clamav-daemon.init b/packages/clamav/files/clamav-daemon.init
index bab7a184d7..6fd07146ea 100644
--- a/packages/clamav/files/clamav-daemon.init
+++ b/packages/clamav/files/clamav-daemon.init
@@ -3,18 +3,20 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/clamd
NAME="clamd"
DESC="ClamAV daemon"
-CLAMAVCONF=/etc/clamd.conf
+CLAMAV_CONF=/etc/clamd.conf
+PID=/var/run/clamav/clamd.pid
set -e
-test -r /etc/default/clamav-daemon && . /etc/default/clamav-daemon
test -x "$DAEMON" || exit 0
-test ! -r "$CLAMAVCONF" && exit 0
-if [ `grep -q "^Example" $CLAMAVCONF` ]; then
+if [ ! -r "$CLAMAV_CONF" ]; then
+ echo "ClamAV configuration file $CLAMAV_CONF not found. Exiting"
+ exit 0
+fi
+if [ `grep -q "^Example" $CLAMAV_CONF` ]; then
echo "$DESC is not configured."
exit 0
fi
-pidfile="`grep ^PidFile $CLAMAVCONF | awk '{print $2}'`"
case "$1" in
start)
@@ -25,7 +27,7 @@ case "$1" in
stop)
echo -n "Stopping $DESC: "
- start-stop-daemon -K -p $pidfile
+ start-stop-daemon -K -p $PID
;;
restart|force-reload)
diff --git a/packages/clamav/files/clamav-freshclam.init b/packages/clamav/files/clamav-freshclam.init
index 490a41e31f..21f02008f5 100644
--- a/packages/clamav/files/clamav-freshclam.init
+++ b/packages/clamav/files/clamav-freshclam.init
@@ -3,70 +3,38 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/freshclam
NAME=freshclam
DESC="ClamAV virus database updater"
-CLAMAV_CONF_FILE=/etc/clamd.conf
-FRESHCLAM_CONF_FILE=/etc/freshclam.conf
-pidfile=/var/run/clamav/freshclam.pid
+FRESHCLAM_CONF=/etc/freshclam.conf
+CLAMAV_CONF=/etc/clamd.conf
+PID=/var/run/clamav/freshclam.pid
set -e
-test -r /etc/default/clamav-freshclam && . /etc/default/clamav-freshclam
test -x "$DAEMON" || exit 0
-test ! -r "$CLAMAV_CONF_FILE" && exit 0
-
-slurp_config()
-{
- CLAMAVCONF="$1"
-
- if [ -e "$CLAMAVCONF" ]; then
- for variable in `egrep -v '^[[:space:]]*(#|$)' "$CLAMAVCONF" | awk '{print $1}'`; do
- if [ "$variable" = 'DatabaseMirror' ]; then
- if [ -z "$DatabaseMirror" ]; then
- for i in `grep ^$variable $CLAMAVCONF | awk '{print $2}'`; do
- value="$i $value"
- done
- else
- continue
- fi
- elif [ "$variable" = 'VirusEvent' -o "$variable" = 'OnUpdateExecute' -o "$variable" = 'OnErrorExecute' ]; then
- value=`grep ^$variable $CLAMAVCONF | head -n1 | sed -e s/$variable\ //`
- else
- value=`grep ^$variable $CLAMAVCONF | head -n1 | awk '{print $2}'`
- fi
- if ! [ "$value" = "$variable" -o "$value" = "" ]; then
- export "$variable"="$value"
- else
- export "$variable"="true"
- fi
- unset value
- done
- fi
-}
-
-slurp_config "$FRESHCLAM_CONF_FILE"
-
-[ -z "$UpdateLogFile" ] && UpdateLogFile=/var/log/clamav/freshclam.log
-
-if [ -z "$DatabaseDirectory" ]; then
- [ -r "$CLAMAV_CONF_FILE" ] && DatabaseDirectory=$(grep 'DataDirectory' "$CLAMAV_CONF_FILE" | awk '{print $2}')
- [ -z "$DatabaseDirectory" ] && DatabaseDirectory=/var/lib/clamav/
+if [ ! -r "$CLAMAV_CONF" ]; then
+ echo "ClamAV configuration file $CLAMAV_CONF not found. Exiting"
+ exit 0
+fi
+if [ ! -r "$FRESHCLAM_CONF" ]; then
+ echo "Freshclam configuration file $FRESHCLAM_CONF not found. Exiting"
+ exit 0
fi
case "$1" in
no-daemon)
echo "It takes freshclam ~3min to timeout and try the next mirror in the list"
- freshclam -l "$UpdateLogFile" --datadir "$DatabaseDirectory"
+ freshclam
;;
start)
echo -n "Starting $DESC: "
- start-stop-daemon -S -x $DAEMON -- -d --quiet -p $pidfile
+ start-stop-daemon -S -x $DAEMON -- -d --quiet -p $PID
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
- start-stop-daemon -K -p $pidfile
+ start-stop-daemon -K -p $PID
;;
restart|force-reload)
diff --git a/packages/clamav/files/clamd.conf b/packages/clamav/files/clamd.conf
index 485c80d420..74ebcf5c3f 100644
--- a/packages/clamav/files/clamd.conf
+++ b/packages/clamav/files/clamd.conf
@@ -1,25 +1,27 @@
## Please read the clamd.conf(5) manual before editing this file.
+LogFile /var/log/clamav/clamav.log
+LogFileMaxSize 0
+LogTime yes
+PidFile /var/run/clamav/clamd.pid
+DatabaseDirectory /var/lib/clamav
LocalSocket /var/run/clamav/clamd.ctl
-FixStaleSocket
+FixStaleSocket yes
+MaxConnectionQueueLength 15
+MaxThreads 10
+ReadTimeout 180
+SelfCheck 1800
User clamav
-AllowSupplementaryGroups
-ScanMail
-ScanArchive
-ArchiveMaxRecursion 5
+AllowSupplementaryGroups yes
+ScanPE yes
+ScanELF yes
+DetectBrokenExecutables yes
+ScanOLE2 yes
+ScanMail yes
+PhishingSignatures yes
+ScanHTML yes
+ScanArchive yes
+ArchiveMaxRecursion 8
ArchiveMaxFiles 1000
ArchiveMaxFileSize 10M
ArchiveMaxCompressionRatio 250
-ReadTimeout 180
-MaxThreads 12
-MaxConnectionQueueLength 15
-LogFile /var/log/clamav/clamav.log
-LogTime
-LogFileMaxSize 0
-PidFile /var/run/clamav/clamd.pid
-DatabaseDirectory /var/lib/clamav
-SelfCheck 3600
-ScanOLE2
-ScanPE
-DetectBrokenExecutables
-ScanHTML
-ArchiveBlockMax
+ArchiveBlockMax yes
diff --git a/packages/clamav/files/cross-compile-fix.patch b/packages/clamav/files/cross-compile-fix.patch
index 690d680c66..f7ab4aa69f 100644
--- a/packages/clamav/files/cross-compile-fix.patch
+++ b/packages/clamav/files/cross-compile-fix.patch
@@ -1,22 +1,24 @@
Add some caching of values which can't be determined when
cross-compiling. This lets us define the values via the site files.
---- clamav-0.88.4/configure.in 2006/09/12 05:49:09 1.1
-+++ clamav-0.88.4/configure.in 2006/09/12 06:24:27
-@@ -56,19 +56,18 @@
+Also check for libintl and add it to ldflags if required.
+
+Index: clamav-0.90.2/configure.in
+===================================================================
+--- clamav-0.90.2.orig/configure.in 2007-04-13 09:10:37.000000000 +1000
++++ clamav-0.90.2/configure.in 2007-05-16 14:19:01.000000000 +1000
+@@ -60,19 +60,21 @@
dnl Check for broken snprintf (code by Phil Oleson <oz*nixil.net>)
if test "x$ac_cv_func_snprintf" = "xyes" ; then
- AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
-- AC_TRY_RUN(
-- [
-+ AC_CACHE_CHECK([whether snprintf correctly terminates long strings],
-+ [clamav_av_func_working_snprintf_long], [
-+ AC_TRY_RUN(
-+ [
++ AC_CACHE_CHECK([whether snprintf correctly terminates long strings],
++ [ac_cv_have_broken_snprintf], [
+ AC_TRY_RUN(
+ [
#include <stdio.h>
int main(void){char b[5];snprintf(b,5,"123456789");return(b[4]!='\0');}
-- ],
+ ],
- [AC_MSG_RESULT(yes)],
- [
- AC_MSG_RESULT(no)
@@ -24,51 +26,108 @@ cross-compiling. This lets us define the values via the site files.
- AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
- ]
- )
-+ ])
++ [ ac_cv_have_broken_snprintf="no" ],
++ [ ac_cv_have_broken_snprintf="yes" ]
++ )
+ ])
-+ if test "x$clamav_av_func_working_snprintf_long" = "xno"; then
++ if test "$ac_cv_have_broken_snprintf" = "yes"; then
+ AC_DEFINE(BROKEN_SNPRINTF,1,[Define if your snprintf is busted])
+ AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
+ fi
fi
have_pthreads=no
-@@ -331,18 +330,28 @@
+@@ -370,18 +372,28 @@
AC_DEFINE_UNQUOTED(CONFDIR,"$cfg_dir",[where to look for the config file])
dnl check for in_port_t definition
--AC_TRY_RUN([
--#include <sys/types.h>
--#include <netinet/in.h>
--int main(int argc, char **argv) { in_port_t pt; pt = 0; return pt; }
--], AC_DEFINE(HAVE_IN_PORT_T,1,[in_port_t is defined]), AC_MSG_RESULT(in_port_t is not defined))
+AC_CACHE_CHECK([for in_port_t], [clamav_av_have_in_port_t], [
-+ AC_TRY_RUN([
-+ #include <sys/types.h>
-+ #include <netinet/in.h>
-+ int main(int argc, char **argv) { in_port_t pt; pt = 0; return pt; }
-+ ])
-+ ])
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ int main(int argc, char **argv) { in_port_t pt; pt = 0; return pt; }
+-], AC_DEFINE(HAVE_IN_PORT_T,1,[in_port_t is defined]), AC_MSG_RESULT(in_port_t is not defined))
++], [ clamav_av_have_in_port_t="yes" ], [ clamav_av_have_in_port_t="no" ])
++])
+if test "$clamav_av_have_in_port_t" = "yes"; then
+ AC_DEFINE(HAVE_IN_PORT_T,1,[in_port_t is defined])
+fi
dnl check for in_addr_t definition
--AC_TRY_RUN([
--#include <sys/types.h>
--#include <netinet/in.h>
--int main(int argc, char **argv) { in_addr_t pt; pt = 0; return pt; }
--], AC_DEFINE(HAVE_IN_ADDR_T,1,[in_addr_t is defined]), AC_MSG_RESULT(in_addr_t is not defined))
+AC_CACHE_CHECK([for in_addr_t], [clamav_av_have_in_addr_t], [
-+ AC_TRY_RUN([
-+ #include <sys/types.h>
-+ #include <netinet/in.h>
-+ int main(int argc, char **argv) { in_addr_t pt; pt = 0; return pt; }
-+ ])
-+ ])
+ AC_TRY_RUN([
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ int main(int argc, char **argv) { in_addr_t pt; pt = 0; return pt; }
+-], AC_DEFINE(HAVE_IN_ADDR_T,1,[in_addr_t is defined]), AC_MSG_RESULT(in_addr_t is not defined))
++], [ clamav_av_have_in_addr_t="yes" ], [ clamav_av_have_in_addr_t="no" ])
++])
+if test "$clamav_av_have_in_addr_t" = "yes"; then
+ AC_DEFINE(HAVE_IN_ADDR_T,1,[in_addr_t is defined])
+fi
case "$target_os" in
linux*)
+@@ -1100,6 +1112,10 @@
+ AC_MSG_RESULT($DEFAULT_FD_SETSIZE)
+ AC_DEFINE_UNQUOTED(DEFAULT_FD_SETSIZE, $DEFAULT_FD_SETSIZE, "default FD_SETSIZE value")
+
++dnl Do we need to link with -lintl?
++AM_GNU_GETTEXT([external])
++AM_GNU_GETTEXT_VERSION([0.14.1])
++
+ AC_OUTPUT([
+ libclamav/Makefile
+ clamscan/Makefile
+Index: clamav-0.90.2/clamd/Makefile.am
+===================================================================
+--- clamav-0.90.2.orig/clamd/Makefile.am 2007-05-16 14:22:46.000000000 +1000
++++ clamav-0.90.2/clamd/Makefile.am 2007-05-16 14:23:08.000000000 +1000
+@@ -60,5 +60,5 @@
+
+ endif
+
+-LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@
++LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@ @LIBINTL@
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+Index: clamav-0.90.2/clamdscan/Makefile.am
+===================================================================
+--- clamav-0.90.2.orig/clamdscan/Makefile.am 2007-05-16 14:24:02.000000000 +1000
++++ clamav-0.90.2/clamdscan/Makefile.am 2007-05-16 14:24:18.000000000 +1000
+@@ -40,4 +40,4 @@
+
+ DEFS = @DEFS@ -DCL_NOTHREADS
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/clamscan -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+-LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@
++LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@ @LIBINTL@
+Index: clamav-0.90.2/clamscan/Makefile.am
+===================================================================
+--- clamav-0.90.2.orig/clamscan/Makefile.am 2007-05-16 14:20:23.000000000 +1000
++++ clamav-0.90.2/clamscan/Makefile.am 2007-05-16 14:20:39.000000000 +1000
+@@ -41,5 +41,5 @@
+ treewalk.h
+
+ DEFS = @DEFS@ -DCL_NOTHREADS
+-LIBS = $(top_builddir)/libclamav/libclamav.la @THREAD_LIBS@
++LIBS = $(top_builddir)/libclamav/libclamav.la @THREAD_LIBS@ @LIBINTL@
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+Index: clamav-0.90.2/freshclam/Makefile.am
+===================================================================
+--- clamav-0.90.2.orig/freshclam/Makefile.am 2007-05-16 14:25:10.000000000 +1000
++++ clamav-0.90.2/freshclam/Makefile.am 2007-05-16 14:25:25.000000000 +1000
+@@ -48,4 +48,4 @@
+
+ DEFS = @DEFS@ -DCL_NOTHREADS
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+-LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@
++LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@ @LIBINTL@
+Index: clamav-0.90.2/sigtool/Makefile.am
+===================================================================
+--- clamav-0.90.2.orig/sigtool/Makefile.am 2007-05-16 14:26:18.000000000 +1000
++++ clamav-0.90.2/sigtool/Makefile.am 2007-05-16 14:26:29.000000000 +1000
+@@ -39,4 +39,4 @@
+
+ DEFS = @DEFS@ -DCL_NOTHREADS
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav
+-LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@
++LIBS = $(top_builddir)/libclamav/libclamav.la @FRESHCLAM_LIBS@ @THREAD_LIBS@ @LIBINTL@
diff --git a/packages/clamav/files/freshclam.conf b/packages/clamav/files/freshclam.conf
index 770490b3ab..fd45b0dd85 100644
--- a/packages/clamav/files/freshclam.conf
+++ b/packages/clamav/files/freshclam.conf
@@ -9,11 +9,13 @@ Example
#DatabaseMirror db.XY.clamav.net
DatabaseMirror database.clamav.net
-DatabaseOwner clamav
+
+DatabaseDirectory /var/lib/clamav/
UpdateLogFile /var/log/clamav/freshclam.log
-LogFileMaxSize 0
+PidFile /var/run/clamav/freshclam.pid
+DatabaseOwner clamav
+AllowSupplementaryGroups yes
+DNSDatabaseInfo current.cvd.clamav.net
MaxAttempts 5
Checks 24
-DatabaseDirectory /var/lib/clamav/
-NotifyClamd
-DNSDatabaseInfo current.cvd.clamav.net
+NotifyClamd /etc/clamd.conf
diff --git a/packages/clamav/files/libtool-fix.patch b/packages/clamav/files/libtool-fix.patch
deleted file mode 100644
index 05a4876dd0..0000000000
--- a/packages/clamav/files/libtool-fix.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Use our own libtool that knows about cross compiling, not the libtool
-that is included.
-
---- clamav-0.88.4/acinclude.m4 2006/09/12 08:07:27 1.1
-+++ clamav-0.88.4/acinclude.m4 2006/09/12 08:16:31
-@@ -520,7 +520,7 @@
- LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
- # Always use our own libtool.
--LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+LIBTOOL="$host_alias-libtool"
- AC_SUBST(LIBTOOL)dnl
-
- # Prevent multiple expansion
-@@ -1238,7 +1238,7 @@
- rm="rm -f"
-
- # Global variables:
--default_ofile=libtool
-+default_ofile=${host_alias}-libtool
- can_build_shared=yes
-
- # All known linkers require a `.a' archive for static linking (except M$VC,
diff --git a/packages/clamav/files/volatiles.02_clamav-data b/packages/clamav/files/volatiles.02_clamav-data
deleted file mode 100644
index 99dc98b323..0000000000
--- a/packages/clamav/files/volatiles.02_clamav-data
+++ /dev/null
@@ -1,4 +0,0 @@
-# <type> <owner> <group> <mode> <path> <linksource>
-d clamav clamav 0755 /var/lib/clamav none
-l clamav clamav 0644 /var/lib/clamav/main.cvd /usr/lib/clamav/main.cvd
-l clamav clamav 0644 /var/lib/clamav/daily.cvd /usr/lib/clamav/daily.cvd
diff --git a/packages/clamav/files/volatiles.03_clamav-data b/packages/clamav/files/volatiles.03_clamav-data
new file mode 100644
index 0000000000..8fdb0a742a
--- /dev/null
+++ b/packages/clamav/files/volatiles.03_clamav-data
@@ -0,0 +1,4 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d clamav clamav 0755 /var/lib/clamav none
+f clamav clamav 0644 /var/lib/clamav/main.cvd none
+f clamav clamav 0644 /var/lib/clamav/daily.cvd none
diff --git a/packages/classpath/classpath-gtk_0.90.bb b/packages/classpath/classpath-gtk_0.90.bb
deleted file mode 100644
index b83d23d9c0..0000000000
--- a/packages/classpath/classpath-gtk_0.90.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PBN}-gtk = "${PBN}-common (>= ${PV})"
-RCONFLICTS_${PBN}-gtk = "${PBN}-minimal"
-
-EXTRA_OECONF = "--with-jikes"
-
-PACKAGES = "${PBN}-dev ${PBN}-doc ${PBN}-common ${PBN}-examples ${PBN}-tools ${PN}"
-
-FILES_${PBN}-doc = "${datadir}/info"
-FILES_${PBN}-dev = "${includedir}"
-FILES_${PN} = "${libdir}"
-FILES_${PBN}-common = "${datadir}/${PBN}/glibj.zip"
-FILES_${PBN}-examples = "${datadir}/${PBN}/examples"
-FILES_${PBN}-tools = "${datadir}/${PBN}/tools"
diff --git a/packages/classpath/classpath-gtk_0.93.bb b/packages/classpath/classpath-gtk_0.93.bb
new file mode 100644
index 0000000000..a3b39d92f8
--- /dev/null
+++ b/packages/classpath/classpath-gtk_0.93.bb
@@ -0,0 +1,9 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ cairo gconf libart-lgpl pango libxtst jikes-native zip-native"
+RDEPENDS_${PN} = "classpath-common (>= ${PV})"
+RCONFLICTS_${PN} = "classpath-minimal"
+
+SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes --disable-plugin --disable-dssi"
diff --git a/packages/classpath/classpath-gtk_cvs.bb b/packages/classpath/classpath-gtk_cvs.bb
new file mode 100644
index 0000000000..18d79decae
--- /dev/null
+++ b/packages/classpath/classpath-gtk_cvs.bb
@@ -0,0 +1,30 @@
+require classpath.inc
+
+PR = "r2"
+
+SRCDATE_${PN} ?= "20070501"
+PV = "0.93+cvs${SRCDATE}"
+
+### note from Laibsch: bug 2523 has information on how to build this package
+DEPENDS = "glib-2.0 gtk+ cairo gconf ecj-native zip-native virtual/java-native libxtst"
+RDEPENDS_${PN} = "classpath-common (>= ${PV})"
+RCONFLICTS_${PN} = "classpath-minimal"
+
+SRC_URI = "cvs://anonymous@cvs.savannah.gnu.org/sources/classpath;module=classpath \
+ file://disable-automake-checks-v2.patch;patch=1"
+
+S = "${WORKDIR}/classpath"
+
+EXTRA_OECONF = "--with-ecj=${STAGING_BINDIR_NATIVE}/ecj --with-ecj-jar=${STAGING_BINDIR_NATIVE}/ecj.jar --disable-plugin --disable-dssi --disable-alsa"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
+}
+
+do_install() {
+ autotools_do_install
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
+}
diff --git a/packages/classpath/classpath-minimal-native_0.93.bb b/packages/classpath/classpath-minimal-native_0.93.bb
new file mode 100644
index 0000000000..83cb60142c
--- /dev/null
+++ b/packages/classpath/classpath-minimal-native_0.93.bb
@@ -0,0 +1,23 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 libart-lgpl pango libxtst jikes-native zip-native"
+PR = "r1"
+
+SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
+
+S = "${WORKDIR}/classpath-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "--with-jikes --disable-gconf-peer --disable-gtk-peer --disable-plugin --disable-dssi --disable-examples"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
+}
+
+do_install() {
+ :
+}
diff --git a/packages/classpath/classpath-minimal-native_0.95.bb b/packages/classpath/classpath-minimal-native_0.95.bb
new file mode 100644
index 0000000000..c7716ed639
--- /dev/null
+++ b/packages/classpath/classpath-minimal-native_0.95.bb
@@ -0,0 +1,8 @@
+
+# classpath-minimal-native has no packages
+# primary goal is to speed up building of java virtual machines
+
+inherit native
+
+require classpath-minimal.inc
+
diff --git a/packages/classpath/classpath-minimal.inc b/packages/classpath/classpath-minimal.inc
new file mode 100644
index 0000000000..5a2587b56c
--- /dev/null
+++ b/packages/classpath/classpath-minimal.inc
@@ -0,0 +1,39 @@
+DESCRIPTION = "GNU Classpath standard Java libraries"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Classpath"
+PROVIDES = "classpath"
+RPROVIDES = "classpath"
+
+S = "${WORKDIR}/classpath-${PV}"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
+
+DEPENDS = "ecj-native zip-native"
+
+inherit autotools
+
+
+EXTRA_OECONF = "--with-glibj \
+ --with-ecj=${STAGING_BINDIR_NATIVE}/ecj \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --disable-examples \
+ "
+do_install() {
+ :
+}
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath-minimal/
+ install -m 0644 include/jni.h ${STAGING_INCDIR}/classpath-minimal/
+ install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath-minimal/
+ install -d ${STAGING_LIBDIR}/java/classpath-minimal/
+ install -m 0644 lib/glibj.zip ${STAGING_LIBDIR}/java/classpath-minimal/
+}
+
+PACKAGES = " "
diff --git a/packages/classpath/classpath-minimal_0.90.bb b/packages/classpath/classpath-minimal_0.90.bb
index 1339b2dbc8..8d9554c999 100644
--- a/packages/classpath/classpath-minimal_0.90.bb
+++ b/packages/classpath/classpath-minimal_0.90.bb
@@ -4,13 +4,6 @@ DEPENDS = "jikes-native zip-native"
RDEPENDS_${PBN}-minimal = "${PBN}-common (>= ${PV})"
RCONFLICTS_${PBN}-minimal = "${PBN}-gtk"
-EXTRA_OECONF = "--with-jikes --without-x --with-glibj --disable-gtk-peer --disable-alsa"
-
-PACKAGES = "${PBN}-dev ${PBN}-doc ${PBN}-common ${PBN}-examples ${PBN}-tools ${PN}"
+SRC_URI += "file://disable-automake-checks.patch;patch=1"
-FILES_${PBN}-doc = "${datadir}/info"
-FILES_${PBN}-dev = "${includedir}"
-FILES_${PN} = "${libdir}"
-FILES_${PBN}-common = "${datadir}/${PBN}/glibj.zip"
-FILES_${PBN}-examples = "${datadir}/${PBN}/examples"
-FILES_${PBN}-tools = "${datadir}/${PBN}/tools"
+EXTRA_OECONF = "--with-jikes --without-x --with-glibj --disable-gtk-peer --disable-alsa"
diff --git a/packages/classpath/classpath-minimal_0.95.bb b/packages/classpath/classpath-minimal_0.95.bb
new file mode 100644
index 0000000000..e489a4efc9
--- /dev/null
+++ b/packages/classpath/classpath-minimal_0.95.bb
@@ -0,0 +1,5 @@
+
+# classpath-minimal-native has no packages
+# primary goal is to speed up building of java virtual machines
+
+require classpath-minimal.inc
diff --git a/packages/classpath/classpath.inc b/packages/classpath/classpath.inc
index 303c286d4e..d9498c99d5 100644
--- a/packages/classpath/classpath.inc
+++ b/packages/classpath/classpath.inc
@@ -1,17 +1,15 @@
DESCRIPTION = "GNU Classpath standard Java libraries"
HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Classpath"
+PROVIDES = "classpath"
+RPROVIDES = "classpath"
-PBN = "classpath"
-
-SRC_URI = "${GNU_MIRROR}/classpath/${PBN}-${PV}.tar.gz \
- file://disable-automake-checks.patch;patch=1 \
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \
+ file://gconf_version.patch;patch=1 \
file://fix-endian-arm-floats.patch;patch=1"
-S = "${WORKDIR}/${PBN}-${PV}"
-
inherit autotools
do_stage() {
@@ -21,8 +19,12 @@ do_stage() {
do_install() {
autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PBN}
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
}
-PROVIDES = "classpath"
-RPROVIDES = "classpath"
+PACKAGES =+ "classpath-common classpath-examples classpath-tools"
+FILES_classpath-common += "${datadir}/classpath/glibj.zip"
+FILES_classpath-examples += "${datadir}/classpath/examples"
+FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools"
+FILES_classpath-dev += "${libdir}/*.so"
+FILES_classpath-dbg += "${libdir}/classpath/.debug"
diff --git a/packages/classpath/classpath_0.14.bb b/packages/classpath/classpath_0.14.bb
index 439d973cc8..e4d73bbd3a 100644
--- a/packages/classpath/classpath_0.14.bb
+++ b/packages/classpath/classpath_0.14.bb
@@ -1,32 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
-PR = "r1"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath_0.15.bb b/packages/classpath/classpath_0.15.bb
index 439d973cc8..e4d73bbd3a 100644
--- a/packages/classpath/classpath_0.15.bb
+++ b/packages/classpath/classpath_0.15.bb
@@ -1,32 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
-PR = "r1"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath_0.17.bb b/packages/classpath/classpath_0.17.bb
index a28591ac0d..e4d73bbd3a 100644
--- a/packages/classpath/classpath_0.17.bb
+++ b/packages/classpath/classpath_0.17.bb
@@ -1,32 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
-PR = "r1"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath_0.18.bb b/packages/classpath/classpath_0.18.bb
index a9a2b2cd2d..9b9e8c3451 100644
--- a/packages/classpath/classpath_0.18.bb
+++ b/packages/classpath/classpath_0.18.bb
@@ -1,31 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath_0.19.bb b/packages/classpath/classpath_0.19.bb
index a9a2b2cd2d..9b9e8c3451 100644
--- a/packages/classpath/classpath_0.19.bb
+++ b/packages/classpath/classpath_0.19.bb
@@ -1,31 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath_0.20.bb b/packages/classpath/classpath_0.20.bb
index a9a2b2cd2d..9b9e8c3451 100644
--- a/packages/classpath/classpath_0.20.bb
+++ b/packages/classpath/classpath_0.20.bb
@@ -1,31 +1,10 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
+require classpath.inc
DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
-inherit autotools
-
EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/files/disable-automake-checks-v2.patch b/packages/classpath/files/disable-automake-checks-v2.patch
new file mode 100644
index 0000000000..0c1df1acae
--- /dev/null
+++ b/packages/classpath/files/disable-automake-checks-v2.patch
@@ -0,0 +1,11 @@
+--- sablevm-classpath-1.1.7/configure.ac.orig 2004-11-26 00:23:01.000000000 +0100
++++ sablevm-classpath-1.1.7/configure.ac 2004-11-26 00:23:46.000000000 +0100
+@@ -34,7 +34,7 @@
+ AC_SUBST(CLASSPATH_MODULE)
+
+ AC_PREREQ(2.59)
+-AM_INIT_AUTOMAKE([1.9.0 gnu std-options tar-ustar -Wno-portability])
++AM_INIT_AUTOMAKE
+ AC_CONFIG_HEADERS([include/config.h])
+ AC_PREFIX_DEFAULT(/usr/local)
+
diff --git a/packages/classpath/files/gconf_version.patch b/packages/classpath/files/gconf_version.patch
new file mode 100644
index 0000000000..b1be1209a2
--- /dev/null
+++ b/packages/classpath/files/gconf_version.patch
@@ -0,0 +1,11 @@
+--- classpath-0.93/configure.ac~ 2007-03-29 15:52:30.000000000 -0500
++++ classpath-0.93/configure.ac 2007-03-29 15:52:30.000000000 -0500
+@@ -496,7 +496,7 @@
+
+ dnl gconf-peer
+ if test "x${COMPILE_GCONF_PEER}" = xyes; then
+- PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.11.2)
++ PKG_CHECK_MODULES(GCONF, gconf-2.0 >= 2.6.0)
+ AC_SUBST(GCONF_CFLAGS)
+ AC_SUBST(GCONF_LIBS)
+ dnl we also need gdk for locking
diff --git a/packages/e17/engage/.mtn2git_empty b/packages/clish/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/e17/engage/.mtn2git_empty
+++ b/packages/clish/.mtn2git_empty
diff --git a/packages/clish/clish_0.7.1.bb b/packages/clish/clish_0.7.1.bb
new file mode 100644
index 0000000000..90757de6dc
--- /dev/null
+++ b/packages/clish/clish_0.7.1.bb
@@ -0,0 +1,17 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+DESCRIPTION = "modular framework for implementing a CISCO-like CLI on a *NIX system"
+LICENSE = "GPL"
+SECTION = "console/utils"
+PR="r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/clish/clish-0.7.1.tar.gz"
+
+PARALLEL_MAKE=""
+
+S = "${WORKDIR}/clish-${PV}"
+
+inherit autotools
+
+
+LEAD_SONAME="libclish.so.*"
diff --git a/packages/clutter/clutter-glx_svn.bb b/packages/clutter/clutter-glx_svn.bb
new file mode 100644
index 0000000000..8a2a1fa1ed
--- /dev/null
+++ b/packages/clutter/clutter-glx_svn.bb
@@ -0,0 +1,9 @@
+require clutter.inc
+
+PV = "0.3.1+svn${SRCDATE}"
+
+SRC_URI = "svn://svn.o-hand.com/repos/clutter/trunk;module=clutter;proto=http"
+
+S = "${WORKDIR}/clutter"
+
+
diff --git a/packages/clutter/clutter_svn.bb b/packages/clutter/clutter_svn.bb
deleted file mode 100644
index 9939221d8d..0000000000
--- a/packages/clutter/clutter_svn.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require clutter.inc
-
-PV = "0.2.0+svn${SRCDATE}"
-
-SRC_URI = "svn://svn.o-hand.com/repos/clutter/trunk;module=clutter;proto=http"
-
-S = "${WORKDIR}/clutter"
-
-
diff --git a/packages/efl++/.mtn2git_empty b/packages/confuse/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl++/.mtn2git_empty
+++ b/packages/confuse/.mtn2git_empty
diff --git a/packages/confuse/confuse-native_2.5.bb b/packages/confuse/confuse-native_2.5.bb
new file mode 100644
index 0000000000..6a5dd797b5
--- /dev/null
+++ b/packages/confuse/confuse-native_2.5.bb
@@ -0,0 +1,3 @@
+require confuse_${PV}.bb
+
+inherit native
diff --git a/packages/confuse/confuse_2.5.bb b/packages/confuse/confuse_2.5.bb
new file mode 100644
index 0000000000..572bcd334c
--- /dev/null
+++ b/packages/confuse/confuse_2.5.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Library for parsing configuration files."
+HOMEPAGE = "http://www.nongnu.org/confuse/"
+LICENSE = "LGPL"
+SECTION = "libs"
+
+SRC_URI = "http://download.savannah.gnu.org/releases/confuse/confuse-${PV}.tar.gz \
+ file://build-only-library.patch;patch=1"
+S = "${WORKDIR}/confuse-${PV}"
+
+inherit autotools binconfig pkgconfig lib_package
+
+EXTRA_OECONF = "--enable-shared"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/efl++/files/.mtn2git_empty b/packages/confuse/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl++/files/.mtn2git_empty
+++ b/packages/confuse/files/.mtn2git_empty
diff --git a/packages/confuse/files/build-only-library.patch b/packages/confuse/files/build-only-library.patch
new file mode 100644
index 0000000000..43c46e0bf8
--- /dev/null
+++ b/packages/confuse/files/build-only-library.patch
@@ -0,0 +1,13 @@
+Index: confuse-2.5/Makefile.am
+===================================================================
+--- confuse-2.5.orig/Makefile.am
++++ confuse-2.5/Makefile.am
+@@ -4,7 +4,7 @@
+ AUTOMAKE_OPTIONS = foreign
+ CLEANFILES=*~ '\#*\#'
+ EXTRA_DIST=libconfuse.spec.in libconfuse.spec
+-SUBDIRS = m4 po src examples tests doc
++SUBDIRS = m4 po src
+
+ if HAVE_PKGCONFIG
+ pkgconfigdir = $(libdir)/pkgconfig
diff --git a/packages/contacts/contacts_0.3.bb b/packages/contacts/contacts_0.3.bb
deleted file mode 100644
index 799698b7a0..0000000000
--- a/packages/contacts/contacts_0.3.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-LICENSE = "LGPL"
-SECTION = "x11"
-DEPENDS = "glib-2.0 gtk+ eds-dbus"
-RDEPENDS = "libedata-book"
-DESCRIPTION = "Contacts is an address-book application."
-
-PR = "r1"
-
-SRC_URI = "http://projects.o-hand.com/sources/${PN}/${PN}-${PV}.tar.gz \
- file://stock_contact.png \
- file://stock_person.png"
-
-inherit autotools pkgconfig
-
-S = "${WORKDIR}/${PN}-${PV}"
-
-do_install_append () {
- install -d ${D}/${datadir}/pixmaps
- install -m 0644 ${WORKDIR}/stock_contact.png ${D}/${datadir}/pixmaps
- install -m 0644 ${WORKDIR}/stock_person.png ${D}/${datadir}/pixmaps
-}
-
-FILES_${PN} += "${datadir}/pixmaps/stock_contact.png \
- ${datadir}/pixmaps/stock_person.png"
-
diff --git a/packages/contacts/contacts_svn.bb b/packages/contacts/contacts_svn.bb
deleted file mode 100644
index bffa1832fd..0000000000
--- a/packages/contacts/contacts_svn.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-LICENSE = "LGPL"
-SECTION = "x11"
-DEPENDS = "glib-2.0 gtk+ libglade eds-dbus gnome-vfs"
-RDEPENDS = "gnome-vfs-plugin-file"
-RRECOMMENDS = "gnome-vfs-plugin-http"
-DESCRIPTION = "Contacts is an address-book application."
-PR = "r5"
-
-PV = "0.1+svn${SRCDATE}"
-
-SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http \
- file://stock_contact.png \
- file://stock_person.png"
-
-inherit autotools pkgconfig
-
-S = "${WORKDIR}/trunk"
-
-EXTRA_OECONF = "--enable-gnome-vfs"
-
-do_install_append () {
- install -d ${D}/${datadir}/pixmaps
- install -m 0644 ${WORKDIR}/stock_contact.png ${D}/${datadir}/pixmaps
- install -m 0644 ${WORKDIR}/stock_person.png ${D}/${datadir}/pixmaps
-}
-
-FILES_${PN} += "${datadir}/pixmaps/stock_contact.png \
- ${datadir}/pixmaps/stock_person.png"
-
diff --git a/packages/coreutils/coreutils-5.3.0/futimens.patch b/packages/coreutils/coreutils-5.3.0/futimens.patch
new file mode 100644
index 0000000000..3cb2b6ab32
--- /dev/null
+++ b/packages/coreutils/coreutils-5.3.0/futimens.patch
@@ -0,0 +1,44 @@
+Index: coreutils-5.3.0/lib/utimens.c
+===================================================================
+--- coreutils-5.3.0.orig/lib/utimens.c 2005-01-03 22:19:15.000000000 +0000
++++ coreutils-5.3.0/lib/utimens.c 2007-07-01 19:12:32.000000000 +0000
+@@ -55,8 +55,8 @@
+ If TIMESPEC is null, set the time stamps to the current time. */
+
+ int
+-futimens (int fd ATTRIBUTE_UNUSED,
+- char const *file, struct timespec const timespec[2])
++gl_futimens (int fd ATTRIBUTE_UNUSED,
++ char const *file, struct timespec const timespec[2])
+ {
+ /* There's currently no interface to set file timestamps with
+ nanosecond resolution, so do the best we can, discarding any
+@@ -117,5 +117,5 @@
+ int
+ utimens (char const *file, struct timespec const timespec[2])
+ {
+- return futimens (-1, file, timespec);
++ return gl_futimens (-1, file, timespec);
+ }
+Index: coreutils-5.3.0/lib/utimens.h
+===================================================================
+--- coreutils-5.3.0.orig/lib/utimens.h 2004-11-23 20:54:33.000000000 +0000
++++ coreutils-5.3.0/lib/utimens.h 2007-07-01 19:12:37.000000000 +0000
+@@ -1,3 +1,3 @@
+ #include "timespec.h"
+-int futimens (int, char const *, struct timespec const [2]);
++int gl_futimens (int, char const *, struct timespec const [2]);
+ int utimens (char const *, struct timespec const [2]);
+Index: coreutils-5.3.0/src/touch.c
+===================================================================
+--- coreutils-5.3.0.orig/src/touch.c 2004-11-23 20:54:35.000000000 +0000
++++ coreutils-5.3.0/src/touch.c 2007-07-01 19:11:52.000000000 +0000
+@@ -191,7 +191,7 @@
+ t = timespec;
+ }
+
+- ok = (futimens (fd, file, t) == 0);
++ ok = (gl_futimens (fd, file, t) == 0);
+ if (fd != -1)
+ ok &= (close (fd) == 0);
+
diff --git a/packages/efl/.mtn2git_empty b/packages/coreutils/coreutils-6.0/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/.mtn2git_empty
+++ b/packages/coreutils/coreutils-6.0/.mtn2git_empty
diff --git a/packages/coreutils/coreutils-6.0/man.patch b/packages/coreutils/coreutils-6.0/man.patch
new file mode 100644
index 0000000000..5060e4fdff
--- /dev/null
+++ b/packages/coreutils/coreutils-6.0/man.patch
@@ -0,0 +1,42 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- coreutils-5.3.0/configure.ac~man
++++ coreutils-5.3.0/configure.ac
+@@ -237,6 +237,20 @@
+ AM_GNU_GETTEXT([external], [need-ngettext])
+ AM_GNU_GETTEXT_VERSION(0.13.1)
+
++AC_MSG_CHECKING([whether to build man pages])
++AC_ARG_WITH(manpages,
++ AS_HELP_STRING([--with-manpages],
++ [Enable building of manpages (default=yes)]),
++ [cu_cv_build_manpages=$enableval],
++ [cu_cv_build_manpages=yes])
++# help2man doesn't work when crosscompiling, as it needs to run the
++# binary that was built.
++if test x"$cross_compiling" = x"yes"; then
++ cu_cv_build_manpages=no
++fi
++AC_MSG_RESULT($cu_cv_build_manpages)
++AM_CONDITIONAL(ENABLE_MANPAGES, test x"$cu_cv_build_manpages" = x"yes")
++
+ AC_CONFIG_FILES(
+ Makefile
+ doc/Makefile
+--- coreutils-5.3.0/Makefile.am~man
++++ coreutils-5.3.0/Makefile.am
+@@ -1,6 +1,11 @@
+ ## Process this file with automake to produce Makefile.in -*-Makefile-*-
+
++if ENABLE_MANPAGES
+ SUBDIRS = lib src doc man po tests
++else
++SUBDIRS = lib src doc po tests
++endif
++
+ EXTRA_DIST = Makefile.cfg Makefile.maint GNUmakefile \
+ .kludge-stamp .prev-version THANKS-to-translators THANKStt.in \
+ .x-sc_space_tab .x-sc_sun_os_names \
diff --git a/packages/coreutils/coreutils-6.0/oe-old-tools.patch b/packages/coreutils/coreutils-6.0/oe-old-tools.patch
new file mode 100644
index 0000000000..495da36cf7
--- /dev/null
+++ b/packages/coreutils/coreutils-6.0/oe-old-tools.patch
@@ -0,0 +1,26 @@
+Index: coreutils-6.0/configure.ac
+===================================================================
+--- coreutils-6.0.orig/configure.ac 2007-04-02 11:21:27.000000000 +0200
++++ coreutils-6.0/configure.ac 2007-04-02 11:21:36.000000000 +0200
+@@ -26,7 +26,7 @@
+ AC_CONFIG_HEADERS([config.h:config.hin])
+
+ AB_INIT()
+-AM_INIT_AUTOMAKE([1.9.6 gnits dist-bzip2])
++AM_INIT_AUTOMAKE([1.9.3 gnits dist-bzip2])
+
+ gl_DEFAULT_POSIX2_VERSION
+ gl_USE_SYSTEM_EXTENSIONS
+Index: coreutils-6.0/m4/jm-macros.m4
+===================================================================
+--- coreutils-6.0.orig/m4/jm-macros.m4 2007-04-02 11:21:54.000000000 +0200
++++ coreutils-6.0/m4/jm-macros.m4 2007-04-02 11:22:02.000000000 +0200
+@@ -23,7 +23,7 @@
+
+ AC_DEFUN([gl_MACROS],
+ [
+- AC_PREREQ(2.60)
++ AC_PREREQ(2.59)
+
+ GNU_PACKAGE="GNU $PACKAGE"
+ AC_DEFINE_UNQUOTED(GNU_PACKAGE, "$GNU_PACKAGE",
diff --git a/packages/coreutils/coreutils-6.0/onceonly.m4 b/packages/coreutils/coreutils-6.0/onceonly.m4
new file mode 100644
index 0000000000..f6fec37cbf
--- /dev/null
+++ b/packages/coreutils/coreutils-6.0/onceonly.m4
@@ -0,0 +1,63 @@
+# onceonly.m4 serial 3
+dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License. As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl This file defines some "once only" variants of standard autoconf macros.
+dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS
+dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS
+dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS
+dnl AC_REQUIRE([AC_HEADER_STDC]) like AC_HEADER_STDC
+dnl The advantage is that the check for each of the headers/functions/decls
+dnl will be put only once into the 'configure' file. It keeps the size of
+dnl the 'configure' file down, and avoids redundant output when 'configure'
+dnl is run.
+dnl The drawback is that the checks cannot be conditionalized. If you write
+dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
+dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
+dnl empty, and the check will be inserted before the body of the AC_DEFUNed
+dnl function.
+
+dnl Autoconf version 2.57 or newer is recommended.
+AC_PREREQ(2.54)
+
+# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
+# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
+AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
+ :
+ AC_FOREACH([gl_HEADER_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(defn([gl_HEADER_NAME]),
+ [-./], [___])), [
+ AC_CHECK_HEADERS(gl_HEADER_NAME)
+ ])
+ AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
+ [-./], [___])))
+ ])
+])
+
+# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
+# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
+AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
+ :
+ AC_FOREACH([gl_FUNC_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]), [
+ AC_CHECK_FUNCS(defn([gl_FUNC_NAME]))
+ ])
+ AC_REQUIRE([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]))
+ ])
+])
+
+# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
+# AC_CHECK_DECLS(DECL1, DECL2, ...).
+AC_DEFUN([AC_CHECK_DECLS_ONCE], [
+ :
+ AC_FOREACH([gl_DECL_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_DECL_]defn([gl_DECL_NAME]), [
+ AC_CHECK_DECLS(defn([gl_DECL_NAME]))
+ ])
+ AC_REQUIRE([gl_CHECK_DECL_]defn([gl_DECL_NAME]))
+ ])
+])
diff --git a/packages/coreutils/coreutils-6.0/uptime-pow-lib.patch b/packages/coreutils/coreutils-6.0/uptime-pow-lib.patch
new file mode 100644
index 0000000000..5eb3fca676
--- /dev/null
+++ b/packages/coreutils/coreutils-6.0/uptime-pow-lib.patch
@@ -0,0 +1,11 @@
+--- coreutils-5.3.0/src/Makefile.am.orig 2005-09-27 22:34:35.659272058 -0700
++++ coreutils-5.3.0/src/Makefile.am 2005-09-27 22:34:39.403507668 -0700
+@@ -74,7 +74,7 @@
+ sleep_LDADD = $(nanosec_libs)
+ tail_LDADD = $(nanosec_libs)
+
+-uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
++uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
+
+ su_LDADD = $(LDADD) $(LIB_CRYPT)
+
diff --git a/packages/coreutils/coreutils-native_6.0.bb b/packages/coreutils/coreutils-native_6.0.bb
new file mode 100644
index 0000000000..ee90981895
--- /dev/null
+++ b/packages/coreutils/coreutils-native_6.0.bb
@@ -0,0 +1,7 @@
+SECTION = "base"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/coreutils-${PV}"
+S = "${WORKDIR}/coreutils-${PV}"
+
+require coreutils_${PV}.bb
+inherit native
diff --git a/packages/coreutils/coreutils_5.3.0.bb b/packages/coreutils/coreutils_5.3.0.bb
index 61d25543ab..42ac2c15af 100644
--- a/packages/coreutils/coreutils_5.3.0.bb
+++ b/packages/coreutils/coreutils_5.3.0.bb
@@ -1,12 +1,13 @@
require coreutils.inc
-PR = "r1"
+PR = "r2"
SRC_URI = "ftp://alpha.gnu.org/gnu/coreutils/coreutils-${PV}.tar.bz2 \
file://install-cross.patch;patch=1;pnum=0 \
file://man.patch;patch=1 \
file://rename-tee-for-glibc2.5.patch;patch=1 \
- file://uptime-pow-lib.patch;patch=1"
+ file://uptime-pow-lib.patch;patch=1 \
+ file://futimens.patch;patch=1"
# [ gets a special treatment and is not included in this
bindir_progs = "basename cksum comm csplit cut dir dircolors dirname du \
diff --git a/packages/coreutils/coreutils_6.0.bb b/packages/coreutils/coreutils_6.0.bb
new file mode 100644
index 0000000000..59afd67bfb
--- /dev/null
+++ b/packages/coreutils/coreutils_6.0.bb
@@ -0,0 +1,85 @@
+require coreutils.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "ftp://alpha.gnu.org/gnu/coreutils/coreutils-${PV}.tar.bz2 \
+ file://man.patch;patch=1 \
+ file://oe-old-tools.patch;patch=1 \
+ file://onceonly.m4"
+
+# [ gets a special treatment and is not included in this
+bindir_progs = "basename cksum comm csplit cut dir dircolors dirname du \
+ env expand expr factor fmt fold groups head hostid id install \
+ join link logname md5sum mkfifo nice nl nohup od paste pathchk \
+ pinky pr printenv printf ptx readlink seq sha1sum shred sort \
+ split stat sum tac tail tee test tr tsort tty unexpand uniq \
+ unlink users vdir wc who whoami yes \
+ "
+
+# hostname gets a special treatment and is not included in this
+base_bindir_progs = "cat chgrp chmod chown cp date dd echo false kill \
+ ln ls mkdir mknod mv pwd rm rmdir sleep stty sync touch \
+ true uname \
+ "
+
+sbindir_progs= "chroot"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/onceonly.m4 ${S}/m4
+}
+
+do_install () {
+ autotools_do_install
+
+ # Renaming the utilities that should go in /usr/bin
+ for i in ${bindir_progs}; do mv ${D}${bindir}/$i ${D}${bindir}/$i.${PN}; done
+
+ # Renaming and moving the utilities that should go in /bin (FHS)
+ install -d ${D}${base_bindir}
+ for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i.${PN}; done
+
+ # Renaming and moving the utilities that should go in /usr/sbin (FHS)
+ install -d ${D}${sbindir}
+ for i in ${sbindir_progs}; do mv ${D}${bindir}/$i ${D}${sbindir}/$i.${PN}; done
+
+ # [ requires special handling because [.coreutils will cause the sed stuff
+ # in update-alternatives to fail, therefore use lbracket - the name used
+ # for the actual source file.
+ mv ${D}${bindir}/[ ${D}${bindir}/lbracket.${PN}
+ # hostname and uptime separated. busybox's versions are preferred
+ mv ${D}${bindir}/hostname ${D}${base_bindir}/hostname.${PN}
+ mv ${D}${bindir}/uptime ${D}${bindir}/uptime.${PN}
+
+}
+
+pkg_postinst_${PN} () {
+ # The utilities in /usr/bin
+ for i in ${bindir_progs}; do update-alternatives --install ${bindir}/$i $i $i.${PN} 100; done
+
+ # The utilities in /bin
+ for i in ${base_bindir_progs}; do update-alternatives --install ${base_bindir}/$i $i $i.${PN} 100; done
+
+ # The utilities in /usr/sbin
+ for i in ${sbindir_progs}; do update-alternatives --install ${sbindir}/$i $i $i.${PN} 100; done
+
+ # Special cases. uptime and hostname is broken, prefer busybox's version. [ needs to be treated separately.
+ update-alternatives --install ${bindir}/uptime uptime uptime.${PN} 10
+ update-alternatives --install ${base_bindir}/hostname hostname hostname.${PN} 10
+ update-alternatives --install '${bindir}/[' '[' 'lbracket.${PN}' 100
+}
+
+pkg_prerm_${PN} () {
+ # The utilities in /usr/bin
+ for i in ${bindir_progs}; do update-alternatives --remove $i $i.${PN}; done
+
+ # The utilities in /bin
+ for i in ${base_bindir_progs}; do update-alternatives --remove $i $i.${PN}; done
+
+ # The utilities in /usr/sbin
+ for i in ${sbindir_progs}; do update-alternatives --remove $i $i.${PN}; done
+
+ # The special cases
+ update-alternatives --remove hostname hostname.${PN}
+ update-alternatives --remove uptime uptime.${PN}
+ update-alternatives --remove '[' 'lbracket.${PN}'
+}
diff --git a/packages/cpio/cpio_2.5.bb b/packages/cpio/cpio_2.5.bb
index 9762b2e764..c21a59a44a 100644
--- a/packages/cpio/cpio_2.5.bb
+++ b/packages/cpio/cpio_2.5.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "GNU cpio is a program to manage archives of files."
HOMEPAGE = "http://www.gnu.org/software/cpio/"
SECTION = "console"
LICENSE = "GPL"
-PR = "r3"
+PR = "r4"
DEPENDS += " texinfo-native "
@@ -14,16 +14,20 @@ inherit autotools
do_install () {
autotools_do_install
+ install -d ${D}${base_bindir}/
+ mv ${D}${bindir}/cpio ${D}${base_bindir}/cpio.${PN}
mv ${D}${libexecdir}/rmt ${D}${libexecdir}/rmt.${PN}
}
pkg_postinst_${PN} () {
+ update-alternatives --install ${base_bindir}/cpio cpio cpio.${PN} 100
update-alternatives --install ${libexecdir}/rmt rmt rmt.${PN} 50
}
pkg_prerm_${PN} () {
+ update-alternatives --remove cpio cpio.${PN}
update-alternatives --remove rmt rmt.${PN}
}
diff --git a/packages/cups/cups.inc b/packages/cups/cups.inc
new file mode 100644
index 0000000000..20cc8c39c3
--- /dev/null
+++ b/packages/cups/cups.inc
@@ -0,0 +1,83 @@
+DESCRIPTION = "An Internet printing system for Unix."
+SECTION = "console/utils"
+LICENSE = "GPL LGPL"
+DEPENDS = "gnutls jpeg dbus dbus-glib libpng zlib install-native fakeroot-native"
+
+SRC_URI = "ftp://ftp.easysw.com/pub/cups/${PV}/cups-${PV}-source.tar.bz2 \
+ "
+
+inherit autotools binconfig
+
+LDFLAGS += " -L${STAGING_LIBDIR} "
+
+EXTRA_OECONF = " \
+ --enable-gnutls \
+ --enable-dbus \
+ --enable-browsing \
+ --disable-openssl \
+ --disable-tiff \
+ --without-php \
+ --without-perl \
+ --without-python \
+ --without-java \
+ "
+
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_compile () {
+ sed -i s:STRIP:NOSTRIP: Makedefs
+ sed -i s:serial:: backend/Makefile
+
+ echo "all:" > man/Makefile
+ echo "install:" >> man/Makefile
+
+ oe_runmake "SSLLIBS=-lgnutls -L${STAGING_LIBDIR}" \
+ "LIBPNG=-lpng -lm -L${STAGING_LIBDIR}" \
+ "LIBJPEG=-ljpeg -L${STAGING_LIBDIR}" \
+ "LIBZ=-lz -L${STAGING_LIBDIR}" \
+ "-I."
+}
+
+fakeroot do_install () {
+ oe_runmake "DSTROOT=${D}" install
+
+ # This directory gets installed with perms 511, which makes packaging fail
+ chmod 0711 "${D}/${localstatedir}/run/cups/certs"
+}
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/cups
+ install ${S}/cups/*.h ${STAGING_INCDIR}/cups/
+ install ${S}/filter/*.h ${STAGING_INCDIR}/cups/
+ oe_libinstall -C cups -so libcups ${STAGING_LIBDIR}
+ oe_libinstall -C filter -so libcupsimage ${STAGING_LIBDIR}
+}
+
+python do_package_append() {
+ # Change permissions back the way they were, they probably had a reason...
+ workdir = bb.data.getVar('WORKDIR', d, 1)
+ os.system('chmod 0511 %s/install/cups/var/run/cups/certs' % workdir)
+}
+
+FILES_${PN}-dbg += "${libdir}/cups/backend/.debug \
+ ${libdir}/cups/cgi-bin/.debug \
+ ${libdir}/cups/filter/.debug \
+ ${libdir}/cups/monitor/.debug \
+ ${libdir}/cups/notifier/.debug \
+ ${libdir}/cups/daemon/.debug \
+ "
+#package the html for the webgui inside the main packages (~1MB uncompressed)
+
+FILES_${PN} += "${datadir}/doc/cups/images \
+ ${datadir}/doc/cups/*html \
+ ${datadir}/doc/cups/*.css \
+ ${datadir}/icons/ \
+ "
+
+LEAD_SONAME = "libcups.so.*"
+
diff --git a/packages/cups/cups_1.2.10.bb b/packages/cups/cups_1.2.10.bb
new file mode 100644
index 0000000000..125fc51caf
--- /dev/null
+++ b/packages/cups/cups_1.2.10.bb
@@ -0,0 +1,4 @@
+require cups.inc
+
+PR = "r2"
+
diff --git a/packages/cups/cups_1.2.12.bb b/packages/cups/cups_1.2.12.bb
new file mode 100644
index 0000000000..4a4512d790
--- /dev/null
+++ b/packages/cups/cups_1.2.12.bb
@@ -0,0 +1,5 @@
+require cups.inc
+
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/cups/cups_1.2.7.bb b/packages/cups/cups_1.2.7.bb
index 22034f9a23..24249fa3b1 100644
--- a/packages/cups/cups_1.2.7.bb
+++ b/packages/cups/cups_1.2.7.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "An Internet printing system for Unix."
SECTION = "console/utils"
LICENSE = "GPL LGPL"
DEPENDS = "gnutls jpeg dbus dbus-glib libpng zlib install-native fakeroot-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://ftp3.easysw.com/pub/cups/${PV}/cups-${PV}-source.tar.bz2 \
"
@@ -17,6 +17,10 @@ EXTRA_OECONF = " \
--enable-browsing \
--disable-openssl \
--disable-tiff \
+ --without-php \
+ --without-perl \
+ --without-python \
+ --without-java \
"
diff --git a/packages/curl/curl-native_7.16.2.bb b/packages/curl/curl-native_7.16.2.bb
new file mode 100644
index 0000000000..e056ec10c3
--- /dev/null
+++ b/packages/curl/curl-native_7.16.2.bb
@@ -0,0 +1,14 @@
+require curl_${PV}.bb
+inherit native
+DEPENDS = "zlib-native"
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/curl
+ install -m 0644 ${S}/include/curl/*.h ${STAGING_INCDIR}/curl/
+ oe_libinstall -so -a -C lib libcurl ${STAGING_LIBDIR}
+}
+
+do_install() {
+ :
+}
+
diff --git a/packages/curl/curl_7.15.1.bb b/packages/curl/curl_7.15.1.bb
index 38050a71f1..5af2dfa7e1 100644
--- a/packages/curl/curl_7.15.1.bb
+++ b/packages/curl/curl_7.15.1.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Command line tool and library for client-side URL transfers."
LICENSE = "MIT"
-DEPENDS = "zlib"
+DEPENDS = "zlib gnutls"
SECTION = "console/network"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2"
S = "${WORKDIR}/curl-${PV}"
@@ -12,7 +12,9 @@ inherit autotools pkgconfig binconfig
EXTRA_OECONF = "--with-zlib=${STAGING_LIBDIR}/../ \
--without-ssl \
--with-random=/dev/urandom \
- --without-idn"
+ --without-idn \
+ --enable-crypto-auth \
+ "
do_stage () {
install -d ${STAGING_INCDIR}/curl
diff --git a/packages/curl/curl_7.16.2.bb b/packages/curl/curl_7.16.2.bb
new file mode 100644
index 0000000000..f59d32d17a
--- /dev/null
+++ b/packages/curl/curl_7.16.2.bb
@@ -0,0 +1,51 @@
+DESCRIPTION = "Command line tool and library for client-side URL transfers."
+LICENSE = "MIT"
+DEPENDS = "zlib gnutls"
+SECTION = "console/network"
+PR = "r0"
+
+SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2"
+S = "${WORKDIR}/curl-${PV}"
+
+inherit autotools pkgconfig binconfig
+
+EXTRA_OECONF = "--with-zlib=${STAGING_LIBDIR}/../ \
+ --with-gnutls=${STAGING_BINDIR_CROSS}/ \
+ --without-ssl \
+ --with-random=/dev/urandom \
+ --without-idn \
+ --enable-crypto-auth \
+ "
+
+do_configure_prepend() {
+ sed -i s:OPT_GNUTLS/bin:OPT_GNUTLS:g configure.ac
+}
+
+do_stage () {
+ install -d ${STAGING_INCDIR}/curl
+ install -m 0644 ${S}/include/curl/*.h ${STAGING_INCDIR}/curl/
+ oe_libinstall -so -a -C lib libcurl ${STAGING_LIBDIR}
+}
+
+PACKAGES += "${PN}-certs libcurl libcurl-dev libcurl-doc"
+
+FILES_${PN} = "${bindir}/curl"
+
+FILES_${PN}-certs = "${datadir}/curl/curl-*"
+PACKAGE_ARCH_${PN}-certs = "all"
+
+FILES_${PN}-doc = "${mandir}/man1/curl.1"
+
+FILES_lib${PN} = "${libdir}/lib*.so.*"
+RRECOMMENDS_lib${PN} += "${PN}-certs"
+FILES_lib${PN}-dev = "${includedir} \
+ ${libdir}/lib*.so \
+ ${libdir}/lib*.a \
+ ${libdir}/lib*.la \
+ ${libdir}/pkgconfig \
+ ${datadir}/aclocal \
+ ${bindir}/*-config"
+
+FILES_lib${PN}-doc = "${mandir}/man3 \
+ ${mandir}/man1/curl-config.1"
+
diff --git a/packages/dates/dates_0.3.1.bb b/packages/dates/dates_0.3.1.bb
deleted file mode 100644
index 8dab1db54b..0000000000
--- a/packages/dates/dates_0.3.1.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Dates is a calendar application."
-SECTION = "x11"
-LICENSE = "LGPL"
-PR = "r1"
-
-DEPENDS = "glib-2.0 gtk+ libglade eds-dbus"
-
-SRC_URI = "http://projects.o-hand.com/sources/dates/${P}.tar.gz"
-
-inherit autotools pkgconfig gtk-icon-cache
-
-FILES_${PN} += "${datadir}/pixmaps/dates.png"
-
diff --git a/packages/dates/dates_svn.bb b/packages/dates/dates_svn.bb
deleted file mode 100644
index 162e6f61a1..0000000000
--- a/packages/dates/dates_svn.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-LICENSE = "LGPL"
-SECTION = "x11"
-DEPENDS = "glib-2.0 gtk+ libglade eds-dbus"
-DESCRIPTION = "Dates is a calendar application."
-
-PV = "0.1+svn${SRCDATE}"
-S = "${WORKDIR}/trunk"
-
-SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http"
-
-inherit autotools pkgconfig gtk-icon-cache
-
-FILES_${PN} += "${datadir}/pixmaps/dates.png"
-
-do_install_append () {
- install -d ${D}/${datadir}/pixmaps
- install -m 0644 ${D}/${datadir}/icons/hicolor/48x48/apps/dates.png ${D}/${datadir}/pixmaps/
-}
diff --git a/packages/db/db3_3.2.9.bb b/packages/db/db3_3.2.9.bb
index 335d83c173..a130d89bd5 100644
--- a/packages/db/db3_3.2.9.bb
+++ b/packages/db/db3_3.2.9.bb
@@ -11,7 +11,7 @@ CONFLICTS = "db"
# a build to select the desired one.
PROVIDES += "${VIRTUAL_NAME}"
-SRC_URI = "ftp://sleepycat1.inetu.net/releases/db-${PV}.tar.gz \
+SRC_URI = "http://download-west.oracle.com/berkeley-db/db-${PV}.tar.gz \
file://autofoo.patch;patch=1"
S = "${WORKDIR}/db-${PV}/dist"
B = "${WORKDIR}/db-${PV}/build_unix"
diff --git a/packages/db/db_4.2.52.bb b/packages/db/db_4.2.52.bb
index 05565287f5..a0c394f7a4 100644
--- a/packages/db/db_4.2.52.bb
+++ b/packages/db/db_4.2.52.bb
@@ -91,7 +91,7 @@ do_install_append() {
if test -d "${D}/${prefix}/docs"
then
mkdir -p "${D}/${datadir}"
- test ! -d "${D}/${docdir}" || rmdir "${D}/${docdir}"
+ test ! -d "${D}/${docdir}" || rm -rf "${D}/${docdir}"
mv "${D}/${prefix}/docs" "${D}/${docdir}"
fi
}
diff --git a/packages/db/db_4.3.29.bb b/packages/db/db_4.3.29.bb
index 3c14b9eb96..750822fafe 100644
--- a/packages/db/db_4.3.29.bb
+++ b/packages/db/db_4.3.29.bb
@@ -14,7 +14,7 @@ HOMEPAGE = "http://www.sleepycat.com"
LICENSE = "BSD Sleepycat"
VIRTUAL_NAME ?= "virtual/db"
CONFLICTS = "db3"
-PR = "r7"
+PR = "r8"
SRC_URI = "http://downloads.sleepycat.com/db-${PV}.tar.gz"
#SRC_URI_MD5 = "http://downloads.sleepycat.com/db-${PV}.tar.gz.md5"
@@ -71,6 +71,7 @@ EXTRA_OECONF += "${MUTEX}"
# configure.
CONFIG_SITE = ""
do_configure() {
+ ( cd ${WORKDIR}/db-${PV}/dist ; gnu-configize )
oe_runconf
}
@@ -92,7 +93,7 @@ do_install_append() {
if test -d "${D}/${prefix}/docs"
then
mkdir -p "${D}/${datadir}"
- test ! -d "${D}/${docdir}" || rmdir "${D}/${docdir}"
+ test ! -d "${D}/${docdir}" || rm -rf "${D}/${docdir}"
mv "${D}/${prefix}/docs" "${D}/${docdir}"
fi
}
diff --git a/packages/dbus/dbus-c++-native_svn.bb b/packages/dbus/dbus-c++-native_svn.bb
new file mode 100644
index 0000000000..96eb2f3227
--- /dev/null
+++ b/packages/dbus/dbus-c++-native_svn.bb
@@ -0,0 +1,6 @@
+require dbus-c++_${PV}.bb
+inherit native
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-c++"
+# actually dbus-native and expat-native, but even the bearest build machine should have that nowadays...
+DEPENDS = ""
diff --git a/packages/efl/e/.mtn2git_empty b/packages/dbus/dbus-c++/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/e/.mtn2git_empty
+++ b/packages/dbus/dbus-c++/.mtn2git_empty
diff --git a/packages/dbus/dbus-c++/fix-linking.patch b/packages/dbus/dbus-c++/fix-linking.patch
new file mode 100644
index 0000000000..822216916b
--- /dev/null
+++ b/packages/dbus/dbus-c++/fix-linking.patch
@@ -0,0 +1,13 @@
+Index: dbus/tools/Makefile.am
+===================================================================
+--- dbus.orig/tools/Makefile.am
++++ dbus/tools/Makefile.am
+@@ -16,7 +16,7 @@ endif
+ bin_PROGRAMS = dbusxx-xml2cpp dbusxx-introspect
+
+ dbusxx_xml2cpp_SOURCES = xml.h xml.cpp xml2cpp.h xml2cpp.cpp
+-dbusxx_xml2cpp_LDADD = $(libdbus_cxx_la)
++dbusxx_xml2cpp_LDADD = $(libdbus_cxx_la) -lexpat
+
+ dbusxx_introspect_SOURCES = introspect.h introspect.cpp
+ dbusxx_introspect_LDADD = $(libdbus_cxx_la)
diff --git a/packages/dbus/dbus-c++_svn.bb b/packages/dbus/dbus-c++_svn.bb
new file mode 100644
index 0000000000..ea6c0fa8ea
--- /dev/null
+++ b/packages/dbus/dbus-c++_svn.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "C++ bindings for dbus"
+LICENSE = "LGPL"
+SECTION = "libs"
+DEPENDS = "dbus dbus-c++-native expat"
+
+SRC_URI = "svn://dev.openwengo.org/svn/openwengo/wengophone-ng/branches/wengophone-dbus-api/libs;module=dbus;proto=http \
+ file://fix-linking.patch;patch=1"
+S = "${WORKDIR}/dbus"
+
+inherit autotools pkgconfig
+
+do_compile_prepend() {
+ find . -name "Makefile.am" |xargs sed -i -e 's,$(top_builddir)/tools/dbusxx-xml2cpp,dbusxx-xml2cpp,'
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN}-dbg += "${bindir}/dbusxx-xml2cpp ${bindir}/dbusxx-introspect"
+FILES_${PN}-dev += "${bindir}/.dev"
+FILES_${PN} = "${libdir}/*.so.*"
+
diff --git a/packages/debianutils/debianutils_2.19.bb b/packages/debianutils/debianutils_2.19.bb
new file mode 100644
index 0000000000..30beb5d4ed
--- /dev/null
+++ b/packages/debianutils/debianutils_2.19.bb
@@ -0,0 +1,5 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+require debianutils.inc
+PR="r0"
diff --git a/packages/efl/ecore/.mtn2git_empty b/packages/dfu-util/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/ecore/.mtn2git_empty
+++ b/packages/dfu-util/.mtn2git_empty
diff --git a/packages/dfu-util/dfu-util-native_svn.bb b/packages/dfu-util/dfu-util-native_svn.bb
new file mode 100644
index 0000000000..9bfe4bae2c
--- /dev/null
+++ b/packages/dfu-util/dfu-util-native_svn.bb
@@ -0,0 +1,17 @@
+require dfu-util_${PV}.bb
+
+inherit native
+
+DEPENDS = "libusb-native"
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 src/dfu-util ${STAGING_BINDIR_NATIVE}/
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 src/dfu-util_static ${DEPLOY_DIR_IMAGE}/dfu-util
+}
+
+addtask deploy before do_package after do_install
diff --git a/packages/dfu-util/dfu-util_svn.bb b/packages/dfu-util/dfu-util_svn.bb
new file mode 100644
index 0000000000..6f2e050569
--- /dev/null
+++ b/packages/dfu-util/dfu-util_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "USB Device Firmware Upgrade utility"
+SECTION = "devel"
+AUTHOR = "Harald Welte"
+LICENSE = "GPL"
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+DEPENDS = "libusb"
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=dfu-util;proto=http"
+S = "${WORKDIR}/dfu-util"
+
+inherit autotools
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/dillo/dillo_0.8.6.bb b/packages/dillo/dillo_0.8.6.bb
index 8eff692026..925583d6f7 100644
--- a/packages/dillo/dillo_0.8.6.bb
+++ b/packages/dillo/dillo_0.8.6.bb
@@ -1,23 +1,22 @@
-SECTION = "x11/network"
DESCRIPTION = "Lightweight gtk+ browser, enhanced version, with support for SSL, frames, tabs and much more..."
+HOMEPAGE = "http://www.dillo.org"
+SECTION = "x11/network"
+PRIORITY = "optional"
LICENSE = "GPL"
-PR = "r1"
DEPENDS = "gtk+-1.2 libpng openssl"
+RCONFLICTS = "dillo2"
+PR = "r2"
SRC_URI="http://www.dillo.org/download/dillo-${PV}.tar.bz2 \
file://dillo-i18n.diff;patch=1 \
file://dillo.desktop \
file://dillo.png"
-
-PRIORITY = "optional"
-
-RCONFLICTS = "dillo2"
-
S = "${WORKDIR}/dillo-${PV}/"
inherit autotools pkgconfig
FILES_${PN} += " /usr/lib/dillo/ /usr/bin/dpid /usr/bin/dpidc "
+FILES_${PN}-dbg += " ${libdir}/dillo/dpi/*/.debug/"
export PNG_CONFIG = "${STAGING_BINDIR_CROSS}/libpng-config"
diff --git a/packages/directfb/++dfb_0.9.25.bb b/packages/directfb/++dfb_1.0.0.bb
index f440e117ff..f440e117ff 100644
--- a/packages/directfb/++dfb_0.9.25.bb
+++ b/packages/directfb/++dfb_1.0.0.bb
diff --git a/packages/directfb/directfb-examples_0.9.25.bb b/packages/directfb/directfb-examples_0.9.25.bb
deleted file mode 100644
index 28de29c4a6..0000000000
--- a/packages/directfb/directfb-examples_0.9.25.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "DirectFB examples"
-DEPENDS = "directfb"
-SECTION = "devel/examples"
-LICENSE = "GPL"
-
-SRC_URI = "http://www.directfb.org/downloads/Extras/DirectFB-examples-${PV}.tar.gz"
-S = "${WORKDIR}/DirectFB-examples-${PV}"
-
-inherit autotools
-
-do_configure_append() {
-# find ${S} -type f | xargs sed -i 's:/usr/lib:${STAGING_LIBDIR}:'
- find ${S} -type f | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
-}
-
diff --git a/packages/directfb/directfb-examples_1.0.0.bb b/packages/directfb/directfb-examples_1.0.0.bb
new file mode 100644
index 0000000000..8a792b4ae4
--- /dev/null
+++ b/packages/directfb/directfb-examples_1.0.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "DirectFB extra providers"
+DEPENDS = "directfb"
+SECTION = "libs"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.directfb.org/downloads/Extras/DirectFB-extra-${PV}.tar.gz"
+S = "${WORKDIR}/DirectFB-extra-${PV}"
+
+inherit autotools
+
+do_configure_append() {
+# find ${S} -type f | xargs sed -i 's:/usr/lib:${STAGING_LIBDIR}:'
+ find ${S} -type f | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/directfb/directfb_0.9.99+1.0.0rc3.bb b/packages/directfb/directfb_0.9.99+1.0.0rc3.bb
deleted file mode 100644
index 5bb6aa362e..0000000000
--- a/packages/directfb/directfb_0.9.99+1.0.0rc3.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-DESCRIPTION = "DirectFB is a thin library that provides developers \
-with hardware graphics acceleration, input device handling and \
-abstraction, an integrated windowing system with support for \
-translucent windows and multiple display layers on top of the \
-Linux framebuffer device."
-SECTION = "libs"
-LICENSE = "LGPL"
-HOMEPAGE = "http://directfb.org"
-DEPENDS = "jpeg libpng freetype zlib tslib"
-PR = "r1"
-RV = "1.0-0"
-
-SRC_URI = "http://www.directfb.org/download/DirectFB/DirectFB-1.0.0-rc3.tar.gz \
- file://fix-pkgconfig-specs.patch;patch=1 \
- file://mkdfiff.patch;patch=1"
-
-S = "${WORKDIR}/DirectFB-1.0.0-rc3"
-
-LDFLAGS_append =" -lts -lm"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-gfxdrivers=none --enable-libmpeg3=no --enable-freetype=yes --enable-sdl=no"
-PARALLEL_MAKE = ""
-
-do_stage() {
- autotools_stage_all
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
-
-FILES_directfb-dbg_append = " ${libdir}/directfb-${RV}/*/*/.debug/*.so \
- ${libdir}/directfb-${RV}/*/.debug/*.so \
- "
-
-FILES_directfb-dev_append = " ${libdir}/directfb-${RV}/systems/*.la \
- ${libdir}/directfb-${RV}/inputdrivers/*.la \
- ${libdir}/directfb-${RV}/interfaces/*/*.la \
- ${libdir}/directfb-${RV}/wm/*.la"
-
-
-FILES_directfb_append = " ${libdir}/directfb-${RV}/systems/*.so \
- ${libdir}/directfb-${RV}/inputdrivers/*.so \
- ${libdir}/directfb-${RV}/interfaces/*/*.so \
- ${libdir}/directfb-${RV}/wm/*.so \
- ${datadir}/directfb-1.0.0-rc3 \
- "
diff --git a/packages/directfb/directfb_1.0.0.bb b/packages/directfb/directfb_1.0.0.bb
new file mode 100644
index 0000000000..c2d249e978
--- /dev/null
+++ b/packages/directfb/directfb_1.0.0.bb
@@ -0,0 +1,56 @@
+DESCRIPTION = "DirectFB is a thin library that provides developers \
+with hardware graphics acceleration, input device handling and \
+abstraction, an integrated windowing system with support for \
+translucent windows and multiple display layers on top of the \
+Linux framebuffer device."
+SECTION = "libs"
+LICENSE = "LGPL"
+HOMEPAGE = "http://directfb.org"
+DEPENDS = "jpeg libpng freetype zlib tslib"
+PR = "r5"
+RV = "1.0-0"
+
+SRC_URI = "http://www.directfb.org/download/DirectFB/DirectFB-${PV}.tar.gz \
+ file://fix-pkgconfig-specs.patch;patch=1 \
+ file://mkdfiff.patch;patch=1 \
+ file://getpagesize.patch;patch=1 \
+ file://fix-includes.patch;patch=1"
+S = "${WORKDIR}/DirectFB-1.0.0"
+
+LDFLAGS_append =" -lts -lm"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --with-gfxdrivers=none \
+ --enable-libmpeg3=no \
+ --enable-freetype=yes \
+ --enable-sdl=no \
+ --enable-vnc=no \
+ "
+
+do_stage() {
+ autotools_stage_all
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+
+FILES_directfb-dbg_append = " ${libdir}/directfb-${RV}/*/*/.debug/*.so \
+ ${libdir}/directfb-${RV}/*/.debug/*.so \
+"
+
+FILES_directfb-dev_append = " ${libdir}/directfb-${RV}/systems/*.la \
+ ${libdir}/directfb-${RV}/inputdrivers/*.la \
+ ${libdir}/directfb-${RV}/interfaces/*/*.la \
+ ${libdir}/directfb-${RV}/wm/*.la \
+"
+
+FILES_directfb_append = " ${libdir}/directfb-${RV}/systems/*.so \
+ ${libdir}/directfb-${RV}/inputdrivers/*.so \
+ ${libdir}/directfb-${RV}/interfaces/*/*.so \
+ ${libdir}/directfb-${RV}/wm/*.so \
+ ${datadir}/directfb-1.0.0 \
+"
diff --git a/packages/directfb/files/fix-includes.patch b/packages/directfb/files/fix-includes.patch
new file mode 100644
index 0000000000..7b4a112582
--- /dev/null
+++ b/packages/directfb/files/fix-includes.patch
@@ -0,0 +1,24 @@
+#
+# pkgconfig points to STAGING_INCDIR, hence
+# we need to make this a local include
+# or else it doesn't find its own header files
+#
+# Signed-Off: mickey@openmoko.org
+#
+Index: DirectFB-1.0.0/include/directfb.h
+===================================================================
+--- DirectFB-1.0.0.orig/include/directfb.h
++++ DirectFB-1.0.0/include/directfb.h
+@@ -29,10 +29,10 @@
+ #ifndef __DIRECTFB_H__
+ #define __DIRECTFB_H__
+
+-#include <dfb_types.h>
++#include "dfb_types.h"
+ #include <sys/time.h> /* struct timeval */
+
+-#include <directfb_keyboard.h>
++#include "directfb_keyboard.h"
+
+ #ifdef __cplusplus
+ extern "C"
diff --git a/packages/directfb/files/fix-pkgconfig-specs.patch b/packages/directfb/files/fix-pkgconfig-specs.patch
index 401d7fa443..c252dc1792 100644
--- a/packages/directfb/files/fix-pkgconfig-specs.patch
+++ b/packages/directfb/files/fix-pkgconfig-specs.patch
@@ -1,13 +1,50 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- DirectFB-0.9.25.1/directfb.pc.in~fix-pkgconfig-specs 2005-10-19 01:14:04.000000000 +0200
-+++ DirectFB-0.9.25.1/directfb.pc.in 2006-05-20 01:02:37.000000000 +0200
-@@ -8,4 +8,4 @@
+Index: DirectFB-1.0.0/directfb-internal.pc.in
+===================================================================
+--- DirectFB-1.0.0.orig/directfb-internal.pc.in
++++ DirectFB-1.0.0/directfb-internal.pc.in
+@@ -8,4 +8,4 @@ Name: DirectFB-Internal
+ Description: Third party module support package for DirectFB.
+ Version: @VERSION@
+ Requires: directfb = @VERSION@
+-Cflags: @DFB_INTERNAL_CFLAGS@ -I@INTERNALINCLUDEDIR@
++Cflags: @DFB_INTERNAL_CFLAGS@ -I${includedir} -I${includedir}/../directfb
+Index: DirectFB-1.0.0/directfb.pc.in
+===================================================================
+--- DirectFB-1.0.0.orig/directfb.pc.in
++++ DirectFB-1.0.0/directfb.pc.in
+@@ -8,4 +8,4 @@ Description: Graphics and windowing libr
Version: @VERSION@
Requires: fusion direct
Libs: -L${libdir} -ldirectfb @THREADLIB@ @DYNLIB@ @ZLIB_LIBS@ @OSX_LIBS@
-Cflags: @THREADFLAGS@ -I@INCLUDEDIR@
-+Cflags: @THREADFLAGS@ -I${includedir}/directfb
++Cflags: @THREADFLAGS@ -I${includedir}
+Index: DirectFB-1.0.0/lib/direct/direct.pc.in
+===================================================================
+--- DirectFB-1.0.0.orig/lib/direct/direct.pc.in
++++ DirectFB-1.0.0/lib/direct/direct.pc.in
+@@ -7,4 +7,4 @@ Name: Direct
+ Description: DirectFB base development library
+ Version: @VERSION@
+ Libs: -L${libdir} -ldirect @THREADLIB@ @DYNLIB@
+-Cflags: @THREADFLAGS@ -I@INCLUDEDIR@
++Cflags: @THREADFLAGS@ -I${includedir}
+Index: DirectFB-1.0.0/lib/fusion/fusion.pc.in
+===================================================================
+--- DirectFB-1.0.0.orig/lib/fusion/fusion.pc.in
++++ DirectFB-1.0.0/lib/fusion/fusion.pc.in
+@@ -8,4 +8,4 @@ Description: High Level IPC Mechanisms
+ Version: @VERSION@
+ Requires: direct
+ Libs: -L${libdir} -lfusion
+-Cflags: -I@INCLUDEDIR@
++Cflags: -I${includedir}
+Index: DirectFB-1.0.0/lib/voodoo/voodoo.pc.in
+===================================================================
+--- DirectFB-1.0.0.orig/lib/voodoo/voodoo.pc.in
++++ DirectFB-1.0.0/lib/voodoo/voodoo.pc.in
+@@ -8,4 +8,4 @@ Description: Interface based network tra
+ Version: @VERSION@
+ Requires: direct
+ Libs: -L${libdir} -lvoodoo
+-Cflags: -I@INCLUDEDIR@
++Cflags: -I${includedir}
diff --git a/packages/directfb/files/getpagesize.patch b/packages/directfb/files/getpagesize.patch
new file mode 100644
index 0000000000..256b8db290
--- /dev/null
+++ b/packages/directfb/files/getpagesize.patch
@@ -0,0 +1,16 @@
+diff --git a/lib/direct/system.c b/lib/direct/system.c
+index 8dd3f12..0731fa2 100644
+--- a/lib/direct/system.c
++++ b/lib/direct/system.c
+@@ -36,8 +36,9 @@
+
+ #if HAVE_ASM_PAGE_H
+ #include <asm/page.h>
+-#else
+-#define PAGE_SIZE sysconf( _SC_PAGESIZE )
++#endif
++#ifndef PAGE_SIZE
++# define PAGE_SIZE (getpagesize())
+ #endif
+
+
diff --git a/packages/directfb/fusionsound_0.9.26+cvs20070207.bb b/packages/directfb/fusionsound_0.9.26+cvs20070207.bb
deleted file mode 100644
index fe04a195c1..0000000000
--- a/packages/directfb/fusionsound_0.9.26+cvs20070207.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-DESCRIPTION = "FusionSound for DirectFB"
-DEPENDS = "directfb"
-SECTION = "libs"
-LICENSE = "LGPL"
-
-# this is a CVS only release
-
-SRC_URI = "cvs://anonymous@cvs.directfb.org/cvs/directfb;method=pserver;module=FusionSound;date=${@bb.data.getVar('PV', d, 1)[9:]}"
-
-S = "${WORKDIR}/FusionSound"
-
-inherit autotools pkgconfig
-
-do_configure_append() {
- find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
-}
-
-do_stage() {
- autotools_stage_all
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
-
-FILES_fusionsound-dbg_append = " ${libdir}/directfb-1.0-0/*/*/.debug/*.so \
- ${libdir}/directfb-1.0-0/*/.debug/*.so \
- "
-
-FILES_fusionsound-dev_append = " ${libdir}/directfb-1.0-0/interfaces/*/*.la \
- ${libdir}/directfb-1.0-0/snddrivers/*.la \
- "
-
-FILES_fusionsound_append = " ${libdir}/directfb-1.0-0/interfaces/*/*.so \
- ${libdir}/directfb-1.0-0/snddrivers/*.so \
- "
-
diff --git a/packages/directfb/fusionsound_1.0.0.bb b/packages/directfb/fusionsound_1.0.0.bb
new file mode 100644
index 0000000000..3cd4a385f6
--- /dev/null
+++ b/packages/directfb/fusionsound_1.0.0.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "FusionSound for DirectFB"
+DEPENDS = "directfb libmad libvorbis"
+SECTION = "libs"
+LICENSE = "LGPL"
+
+SRC_URI = "http://www.directfb.org/downloads/Core/FusionSound-${PV}.tar.gz"
+S = "${WORKDIR}/FusionSound-${PV}"
+
+inherit autotools pkgconfig
+
+do_configure_append() {
+ find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}/directfb:g'
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+FILES_${PN} += "\
+ ${libdir}/directfb-1.0-0/interfaces/*/*.so \
+ ${libdir}/directfb-1.0-0/snddrivers/*.so \
+"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/directfb-1.0-0/*/*/.debug/*.so \
+ ${libdir}/directfb-1.0-0/*/.debug/*.so \
+"
+
+FILES_${PN}-dev += "\
+ ${libdir}/directfb-1.0-0/interfaces/*/*.la \
+ ${libdir}/directfb-1.0-0/snddrivers/*.la \
+"
+
diff --git a/packages/display-brightness/display-brightness.sh b/packages/display-brightness/display-brightness.sh
index 5e1a0e97d4..a82c748309 100644
--- a/packages/display-brightness/display-brightness.sh
+++ b/packages/display-brightness/display-brightness.sh
@@ -28,6 +28,8 @@ if [ "$1" = "up" ]; then
if [ $ACTUAL_BRIGHTNESS -eq $MAX_BRIGHTNESS ]; then
exit 0
else
+
+ test -x /usr/bin/bl && bl on
test "$STEP" -gt "$MAX_BRIGHTNESS" -o "$STEP" -eq "$MAX_BRIGHTNESS" && STEP=1
let CURRENT_BRIGHTNESS=$ACTUAL_BRIGHTNESS+$STEP
echo $CURRENT_BRIGHTNESS >> $BRIGHTNESS_FILE
diff --git a/packages/display-brightness/display-brightness_1.0.0.bb b/packages/display-brightness/display-brightness_1.0.0.bb
index aa3c0995e9..bc46c16631 100644
--- a/packages/display-brightness/display-brightness_1.0.0.bb
+++ b/packages/display-brightness/display-brightness_1.0.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "display brightness utility"
AUTHOR = "Patrick Steiner <patrick.steiner@a1.net>"
DEPENDS = ""
PRIORITY = "optional"
-PR = "r2"
+PR = "r3"
LICENSE = "GPLv2"
SRC_URI = "file://display-brightness.sh"
diff --git a/packages/distcc/distcc_2.18.3.bb b/packages/distcc/distcc_2.18.3.bb
index 124f87fc7f..7f557c41d1 100644
--- a/packages/distcc/distcc_2.18.3.bb
+++ b/packages/distcc/distcc_2.18.3.bb
@@ -2,23 +2,34 @@ DESCRIPTION = "distcc is a parallel build system that distributes \
compilation of C/C++/ObjC code across machines on a network."
SECTION = "devel"
LICENSE = "GPLv2"
+PR = "r1"
DEPENDS = "avahi gtk+"
RRECOMMENDS = "avahi-daemon"
SRC_URI = "http://distcc.samba.org/ftp/distcc/distcc-${PV}.tar.bz2 \
- http://0pointer.de/public/distcc-avahi.patch;patch=1"
+ http://0pointer.de/public/distcc-avahi.patch;patch=1 \
+ file://default \
+ file://distcc"
-inherit autotools pkgconfig
+inherit autotools pkgconfig update-rc.d
+
+INITSCRIPT_NAME = "distcc"
EXTRA_OECONF = " --with-gtk "
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -d ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/distcc ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/distcc
+}
+
PACKAGES += "distcc-distmon-gnome"
-FILES_${PN} = " ${bindir}/distcc \
+FILES_${PN} = " ${sysconfdir} \
+ ${bindir}/distcc \
${bindir}/distccd \
${bindir}/distccmon-text"
FILES_distcc-distmon-gnome = " ${bindir}/distccmon-gnome \
${datadir}/distcc"
-
-
diff --git a/packages/efl/edb-native/.mtn2git_empty b/packages/distcc/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/edb-native/.mtn2git_empty
+++ b/packages/distcc/files/.mtn2git_empty
diff --git a/packages/distcc/files/default b/packages/distcc/files/default
new file mode 100644
index 0000000000..600e8cab45
--- /dev/null
+++ b/packages/distcc/files/default
@@ -0,0 +1,19 @@
+# Defaults for distcc initscript
+# sourced by /etc/init.d/distcc
+
+#
+# should distcc be started on boot?
+#
+# STARTDISTCC="true"
+
+STARTDISTCC="true"
+
+#
+# Which networks/hosts should be allowed to connect to the daemon?
+# You can list multiple hosts/networks separated by spaces.
+# Networks have to be in CIDR notation, f.e. 192.168.1.0/24
+# Hosts are represented by a single IP Adress
+#
+# ALLOWEDNETS="127.0.0.1"
+
+ALLOWEDNETS="192.168.0.0/24"
diff --git a/packages/distcc/files/distcc b/packages/distcc/files/distcc
new file mode 100644
index 0000000000..bbd4707497
--- /dev/null
+++ b/packages/distcc/files/distcc
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# distccd Debian init.d script contributed by Jason Thomas. (Debian #161136)
+#
+# skeleton example file to build /etc/init.d/ scripts.
+# This file should be used to construct scripts for /etc/init.d.
+#
+# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
+# Modified for Debian GNU/Linux
+# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
+#
+# Version: @(#)skeleton 1.9.1 08-Apr-2002 miquels@cistron.nl
+#
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/distccd
+NAME=distcc
+DESC="Distributed Compiler Daemon"
+DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --daemon"
+# please change those variables by overriding them in /etc/defaults/distcc
+ALLOWEDNETS="127.0.0.1"
+
+# Reads config file (will override defaults above)
+[ -r /etc/default/distcc ] && . /etc/default/distcc
+
+test -x $DAEMON || exit 0
+
+set -e
+
+# construct access list
+ALLOW=""
+for net in $ALLOWEDNETS
+do
+ ALLOW="$ALLOW --allow $net"
+done
+
+should_start() {
+ if [ "$STARTDISTCC" != "true" ] && [ "$STARTDISTCC" != "YES" ]; then
+ echo "STARTDISTCC is set to false in /etc/default/distcc"
+ echo "$DAEMON not starting"
+ exit 0
+ fi
+}
+
+case "$1" in
+ start)
+ should_start
+ echo -n "Starting $DESC: $NAME"
+ start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON -- $DAEMON_ARGS $ALLOW ||
+ {
+ code=$?
+ echo "$0: start failed with error code $code" >&2
+ exit $code
+ }
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: $NAME"
+ start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON ||
+ {
+ code=$?
+ echo "$0: stop failed with error code $code" >&2
+ exit $code
+ }
+ echo "."
+ ;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented, move the "force-reload"
+ # option to the "reload" entry above. If not, "force-reload" is
+ # just the same as "restart".
+ #
+ echo -n "Restarting $DESC: $NAME"
+ start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON
+ sleep 1
+ should_start
+ start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
+ --exec $DAEMON -- $DAEMON_ARGS $ALLOW ||
+ {
+ code=$?
+ echo "$0: restart failed with error code $code" >&2
+ exit $code
+ }
+ echo "."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+
diff --git a/packages/dnsmasq/dnsmasq_2.38.bb b/packages/dnsmasq/dnsmasq_2.38.bb
new file mode 100644
index 0000000000..83aea1d299
--- /dev/null
+++ b/packages/dnsmasq/dnsmasq_2.38.bb
@@ -0,0 +1 @@
+require dnsmasq.inc
diff --git a/packages/dosbox/dosbox_0.70.bb b/packages/dosbox/dosbox_0.70.bb
new file mode 100644
index 0000000000..9d68e27515
--- /dev/null
+++ b/packages/dosbox/dosbox_0.70.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Dos Emulator based on SDL"
+SECTION = "base"
+PRIORITY = "optional"
+DEPENDS = "virtual/libsdl"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/dosbox/dosbox-${PV}.tar.gz \
+ file://nocdrom.patch;patch=1"
+CXXFLAGS_append = " -DC_SDL_NOCDROM"
+
+inherit autotools
+
diff --git a/packages/dri/drm_cvs.bb b/packages/dri/drm_cvs.bb
deleted file mode 100644
index 8e219880d0..0000000000
--- a/packages/dri/drm_cvs.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SECTION = "x11/base"
-LICENSE = "MIT"
-SRC_URI = "${FREEDESKTOP_CVS}/dri;module=drm;method=pserver"
-
-PV = "0.0+cvs${SRCDATE}"
-PR = "r3"
-
-S = "${WORKDIR}/drm"
-
-inherit autotools pkgconfig
-
-do_compile() {
- oe_runmake -C libdrm
-}
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/efl/epsilon/.mtn2git_empty b/packages/dtc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/epsilon/.mtn2git_empty
+++ b/packages/dtc/.mtn2git_empty
diff --git a/packages/dtc/dtc-native_20070216.bb b/packages/dtc/dtc-native_20070216.bb
new file mode 100644
index 0000000000..8d8cf517a0
--- /dev/null
+++ b/packages/dtc/dtc-native_20070216.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "dtc tool"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.jdl.com/pub/software/dtc-${PV}.tgz"
+
+S = "${WORKDIR}/dtc"
+
+inherit autotools native
+
+do_stage() {
+ install -m 755 dtc ${STAGING_BINDIR}/dtc
+}
diff --git a/packages/dtc/dtc-native_git.bb b/packages/dtc/dtc-native_git.bb
new file mode 100644
index 0000000000..9ef9292e92
--- /dev/null
+++ b/packages/dtc/dtc-native_git.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "dtc tool"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "git://www.jdl.com/software/dtc.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools native
+
+do_stage() {
+ install -m 755 dtc ${STAGING_BINDIR}/dtc
+}
diff --git a/packages/dtc/dtc_20070216.bb b/packages/dtc/dtc_20070216.bb
new file mode 100644
index 0000000000..476a84eba8
--- /dev/null
+++ b/packages/dtc/dtc_20070216.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "dtc tool"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.jdl.com/pub/software/dtc-${PV}.tgz"
+
+S = "${WORKDIR}/dtc"
+
+inherit autotools
+
+do_install() {
+ install -m 0755 -d ${D}${bindir}
+ install -m 755 dtc ${D}${bindir}/dtc
+}
diff --git a/packages/dtc/dtc_git.bb b/packages/dtc/dtc_git.bb
new file mode 100644
index 0000000000..e8523173a1
--- /dev/null
+++ b/packages/dtc/dtc_git.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "dtc tool"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "git://www.jdl.com/software/dtc.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+do_install() {
+ install -m 0755 -d ${D}${bindir}
+ install -m 755 dtc ${D}${bindir}/dtc
+}
diff --git a/packages/e17/e-iconbar_20060128.bb b/packages/e17/e-iconbar_20060128.bb
deleted file mode 100644
index de639bfd3f..0000000000
--- a/packages/e17/e-iconbar_20060128.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "An Iconbar for the Enlightenment Window Manager"
-DEPENDS = "edb eet evas-x11 ecore-x11 edje esmart-x11 imlib2-x11"
-LICENSE = "MIT"
-PR = "r1"
-
-inherit e
-
-SRC_URI = "${E_CVS};module=e17/apps/iconbar;date=${PV}"
-S = "${WORKDIR}/iconbar"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/e-utils_20060501.bb b/packages/e17/e-utils_20060501.bb
deleted file mode 100644
index fc94cd106f..0000000000
--- a/packages/e17/e-utils_20060501.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Enlightenment Window Manager Utilities"
-DEPENDS = "virtual/ecore virtual/evas virtual/esmart edje eet ewl engrave virtual/imlib2 epsilon"
-LICENSE = "MIT"
-PR = "r1"
-
-inherit e
-
-SRC_URI = "${E_CVS};module=e17/apps/e_utils;date=${PV}"
-S = "${WORKDIR}/e_utils"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir}"
diff --git a/packages/e17/e-utils_cvs.bb b/packages/e17/e-utils_cvs.bb
new file mode 100644
index 0000000000..ea27040ab2
--- /dev/null
+++ b/packages/e17/e-utils_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Enlightenment Window Manager Utilities"
+DEPENDS = "eet evas ecore edje esmart ewl engrave"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=e17/apps/e_utils"
+S = "${WORKDIR}/e_utils"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir}"
diff --git a/packages/e17/e-wm/Xsession.d/98enlightenment b/packages/e17/e-wm/Xsession.d/98enlightenment
index 65f46284a9..7913888438 100644
--- a/packages/e17/e-wm/Xsession.d/98enlightenment
+++ b/packages/e17/e-wm/Xsession.d/98enlightenment
@@ -1,3 +1,3 @@
#!/bin/sh
-exec enlightenment \ No newline at end of file
+exec enlightenment_start
diff --git a/packages/e17/e-wm/applications.menu b/packages/e17/e-wm/applications.menu
new file mode 100644
index 0000000000..e163864acf
--- /dev/null
+++ b/packages/e17/e-wm/applications.menu
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://standards.freedesktop.org/menu-spec/menu-1.0.dtd">
+<Menu>
+ <Name>Applications</Name>
+ <!-- <Directory>Applications.directory</Directory> -->
+
+ <!-- Read standard .directory and .desktop file locations -->
+ <DefaultAppDirs>/usr/share/applications</DefaultAppDirs>
+ <DefaultDirectoryDirs/>
+
+ <Menu>
+ <Name>Office</Name>
+ <Directory>Office.directory</Directory>
+ <Include>
+ <And>
+ <Category>Office</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Multimedia</Name>
+ <Directory>Multimedia.directory</Directory>
+ <Include>
+ <And>
+ <Category>AudioVideo</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Graphics</Name>
+ <Directory>Graphics.directory</Directory>
+ <Include>
+ <And>
+ <Category>Graphics</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Games</Name>
+ <Directory>Games.directory</Directory>
+ <Include>
+ <And>
+ <Category>Games</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Internet</Name>
+ <Directory>Internet.directory</Directory>
+ <Include>
+ <And>
+ <Category>Network</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Settings</Name>
+ <Directory>Settings.directory</Directory>
+ <Include>
+ <And>
+ <Category>SystemSettings</Category>
+ </And>
+ </Include>
+ </Menu>
+
+ <Menu>
+ <Name>Accessories</Name>
+ <Directory>Accessories.directory</Directory>
+ <Include>
+ <And>
+ <Or>
+ <Category>Applications</Category>
+ <Category>Utility</Category>
+ </Or>
+ <Not>
+ <Category>System</Category>
+ <Category>Office</Category>
+ <Category>Internet</Category>
+ <Category>AudioVideo</Category>
+ <Category>Graphics</Category>
+ <Category>Games</Category>
+ </Not>
+ </And>
+ </Include>
+ </Menu>
+
+</Menu>
+
diff --git a/packages/e17/e-wm_0.16.999.037.bb b/packages/e17/e-wm_0.16.999.037.bb
deleted file mode 100644
index 3084fd99bc..0000000000
--- a/packages/e17/e-wm_0.16.999.037.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-DESCRIPTION = "E17 - the Enlightenment Window Mananger"
-DEPENDS = "evas-x11 ecore-x11 edje eet embryo"
-LICENSE = "MIT"
-PR = "r4"
-
-inherit e update-alternatives
-
-SRC_URI = "${E_URI}/enlightenment-${PV}.tar.gz \
- file://fix-configure.patch;patch=1 \
- file://set-autoscroll-defaults.patch;patch=1 \
- file://Xsession.d/98enlightenment"
-
-S = "${WORKDIR}/enlightenment-${PV}"
-
-PROFILE = "LOWRES_PDA"
-PROFILE_c7x0 = "HIRES_PDA"
-PROFILE_tosa = "HIRES_PDA"
-PROFILE_spitz = "HIRES_PDA"
-PROFILE_akita = "HIRES_PDA"
-
-EXTRA_OECONF = "--with-profile=${PROFILE} \
- --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
- --x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR}"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir}"
-
-do_compile_prepend() {
- find ${S} -name Makefile | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
- find ${S} -name Makefile | xargs sed -i 's:/usr/X11R6/include:${STAGING_INCDIR}:'
-}
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/X11/Xsession.d
- install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d
-}
-
-ALTERNATIVE_PATH = "${bindir}/enlightenment"
-ALTERNATIVE_NAME = "x-window-manager"
-ALTERNATIVE_LINK = "${bindir}/x-window-manager"
-ALTERNATIVE_PRIORITY = "16"
diff --git a/packages/e17/e-wm_0.16.999.038.bb b/packages/e17/e-wm_0.16.999.038.bb
new file mode 100644
index 0000000000..12784ea18f
--- /dev/null
+++ b/packages/e17/e-wm_0.16.999.038.bb
@@ -0,0 +1,48 @@
+DESCRIPTION = "E17 - the Enlightenment Window Mananger"
+DEPENDS = "eet evas ecore edje efreet"
+LICENSE = "MIT"
+PR = "r7"
+
+inherit e update-alternatives
+
+SRC_URI = "${E_URI}/enlightenment-${PV}.tar.gz \
+ file://fix-configure.patch;patch=1 \
+ file://set-autoscroll-defaults.patch;patch=1 \
+ file://Xsession.d/98enlightenment \
+ file://applications.menu \
+ "
+
+S = "${WORKDIR}/enlightenment-${PV}"
+
+PROFILE = "LOWRES_PDA"
+PROFILE_c7x0 = "HIRES_PDA"
+PROFILE_tosa = "HIRES_PDA"
+PROFILE_spitz = "HIRES_PDA"
+PROFILE_akita = "HIRES_PDA"
+
+EXTRA_OECONF = "--with-profile=${PROFILE} \
+ --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR}"
+
+FILES_${PN} = "${bindir}/* ${libdir}/enlightenment/modules/*/*.edj ${libdir}/enlightenment/modules/*/*.desktop ${libdir}/enlightenment/modules/*/*/*.so ${libdir}/enlightenment/preload/*.so ${datadir} ${sysconfdir} ${libdir}/enlightenment/modules/cpufreq/*/freqset"
+FILES_${PN}-dev += "${libdir}/enlightenment/modules/*/*/*.a ${libdir}/enlightenment/modules/*/*/*.la ${libdir}/enlightenment/preload/*.a ${libdir}/enlightenment/preload/*.la"
+FILES_${PN}-dbg += "${libdir}/enlightenment/modules/*/*/.debug/ ${libdir}/enlightenment/preload/.debug/"
+
+do_compile_prepend() {
+ find ${S} -name Makefile | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
+ find ${S} -name Makefile | xargs sed -i 's:/usr/X11R6/include:${STAGING_INCDIR}:'
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/X11/Xsession.d
+ install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d
+
+ install -d ${D}/${sysconfdir}/xdg/menus
+ install -m 644 ${WORKDIR}/applications.menu ${D}/${sysconfdir}/xdg/menus/
+}
+
+ALTERNATIVE_PATH = "${bindir}/enlightenment_start"
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PRIORITY = "16"
diff --git a/packages/e17/e17-gpe-menu-convert/e17-gpe-menu-convert.sh b/packages/e17/e17-gpe-menu-convert/e17-gpe-menu-convert.sh
deleted file mode 100644
index bbb5e12211..0000000000
--- a/packages/e17/e17-gpe-menu-convert/e17-gpe-menu-convert.sh
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/bin/sh
-
-setVar() {
- if [ ! "$value" = "" ]; then
- name=`echo "$name" | sed 'y:-\[\]:_____:'`
- value=`echo "$value" | sed 's:":\\\":g'`
- export $name="$value"
- fi
-}
-
-#convert true/false to 1/0
-bool() {
- if [ ! "$1" = "" ]; then
- if [ "$1" = "True" ]; then
- cmd="$cmd $2 1"
- else
- cmd="$cmd $2 0"
- fi
- fi
-}
-
-str() {
- if [ ! "$1" = "" ]; then
- cmd="$cmd $2 \"$1"\"
- fi
-}
-
-convert_desktop_to_eap() {
- echo "Adding $1 to e menu"
- for l in `cat $1`; do
- #on empty line clear vars
- if [ "$l" = "" ]; then
-
- #grab previous var if it exists
- setVar
-
- name=""
- value=""
- else
- #if an = is in the line it's a name/value pair
- if echo "$l" | grep -q "="; then
-
- #grab previous var if it exists
- setVar
-
- name=`echo "$l" | cut -d "=" -f 1`
- value=`echo "$l" | cut -d "=" -f 2-`
- else
-
- #if previous value assume this is a continuation
- if [ ! "$value" = "" ]; then
- value="$value $l"
- fi
- fi
- fi
- done
- setVar
-
- cmd=""
-
- #set up options
- bool "$StartupNotify" -set-startup-notify
- str "$Name" -set-name
- str "$Comment" -set-comment
- str "$Exec" -set-exe
-
- if [ ! "$cmd" = "" ]; then
- eapFile="$PATH_TO_EAP/$2"
- if [ -e $eapFile ]; then
- echo "EAP file for $2 already created";
- else
- echo "Converting $1 to $2"
- #cp ~/.e/e/applications/all/aterm.eap gpe-othello.eap
- ##empty out eap file
- ##enlightenment_eapp | grep -- -set- | cut -d " " -f 3 | xargs -iCMD enlightenment_eapp gpe-othello.eap CMD \"\"
- #enlightenment_eapp gpe-othello.eap -del-all
-
- cat <<EOF > /tmp/gpeEap.edc
-images {
- image: "$Icon" COMP;
-}
-collections {
- group {
- name: "icon";
- max: 48 48;
- parts {
- part {
- name: "image";
- mouse_events: 0;
- description {
- state: "default" 0.0;
- aspect: 1.0 1.0;
- image.normal: "$Icon";
- }
- }
- }
- }
-}
-EOF
-
- edje_cc --image_dir "$PATH_TO_PIXMAPS" /tmp/gpeEap.edc "$eapFile"
- rm /tmp/gpeEap.edc
-
- cmd="enlightenment_eapp \"$eapFile\" $cmd"
-
- #pipe command in sh to allow it to re-interpret quotes
- echo $cmd | /bin/sh -s
- fi
-
- if `echo "$Categories" | grep -q "SystemSettings"`; then
- dir="Settings"
- elif `echo "$Categories" | grep -q "PIM"`; then
- dir="PIM"
- elif `echo "$Categories" | grep -q "Network"`; then
- dir="Network"
- elif `echo "$Categories" | grep -q "Games"`; then
- dir="Games"
- elif `echo "$Categories" | grep -q "Game"`; then
- dir="Games"
- elif `echo "$Categories" | grep -q "AudioVideo"`; then
- dir="Multimedia"
- elif `echo "$Categories" | grep -q "Panel"`; then
- dir="Utility/Panel"
- elif `echo "$Categories" | grep -q "Utility"`; then
- dir="Utlity"
- else
- dir=""
- fi
-
- #dir=`echo "$Categories" | sed 'y:;:/:'`
- mkdir -p "$PATH_TO_E_GPE/$dir"
- orderFile="$PATH_TO_E_GPE/$dir"/.order
- add=1
- if [ -e "$orderFile" ]; then
- if grep -q "$2" "$orderFile"; then
- echo "$2 is already in the $dir menu"
- add=0
- fi
- fi
- if [ "$add" -eq 1 ]; then
- echo "Adding $2 to $dir menu"
- echo "$2" >> "$orderFile"
- fi
- fi
-}
-
-PATH_TO_DESKTOP="/usr/share/applications"
-PATH_TO_PIXMAPS="/usr/share/pixmaps"
-PATH_TO_EAP="/home/root/.e/e/applications/all"
-PATH_TO_E_GPE="/home/root/.e/e/applications/favorite/GPE"
-
-if [ ! -d $PATH_TO_E_GPE ]; then
- mkdir -p $PATH_TO_E_GPE
-fi
-if [ ! -d $PATH_TO_EAP ]; then
- mkdir -p $PATH_TO_EAP
-fi
-cd "$PATH_TO_DESKTOP"
-for f in `ls *.desktop`; do
- eap=`echo "$f" | cut -d . -f 1`
- convert_desktop_to_eap "$PATH_TO_DESKTOP/$f" "$eap.eap"
-done
diff --git a/packages/e17/e17-gpe-menu-convert_0.2.bb b/packages/e17/e17-gpe-menu-convert_0.2.bb
deleted file mode 100644
index 5ec40cd761..0000000000
--- a/packages/e17/e17-gpe-menu-convert_0.2.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Shell script to convert GPE .desktop files into e17 eap files and menus"
-DEPENDS = "edje-utils e-wm"
-RDEPENDS += "edje-utils e-wm"
-LICENSE = "MIT"
-SECTION = "e/apps"
-PR = "r4"
-
-#this is a shell script
-PACKAGE_ARCH = "all"
-
-SRC_URI = "file://e17-gpe-menu-convert.sh"
-
-do_install() {
- install -d ${D}/usr/bin/
- install -m 755 ${WORKDIR}/e17-gpe-menu-convert.sh ${D}/usr/bin/e17-gpe-menu-convert.sh
-}
-
-pkg_postinst() {
- /usr/bin/e17-gpe-menu-convert.sh
-}
diff --git a/packages/e17/e17genmenu_4.2.0.bb b/packages/e17/e17genmenu_4.2.0.bb
deleted file mode 100644
index baf399864d..0000000000
--- a/packages/e17/e17genmenu_4.2.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Convert Gnome or KDE menus to e17 menus"
-DEPENDS = "virtual/ecore virtual/evas eet engrave"
-LICENSE = "GPL"
-HOMEPAGE = "http://sourceforge.net/projects/e17genmenu"
-PR = "r0"
-
-inherit e
-
-SECTION = "e/utils"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/e17genmenu/e17genmenu-${PV}.tar.gz"
-S = "${WORKDIR}/${PN}"
-
-PACKAGES += "${PN}-doc"
-
-FILES_${PN} = "${bindir} ${datadir}"
-FILES_${PN}-doc = "/usr/doc" \ No newline at end of file
diff --git a/packages/e17/eclair_20060128.bb b/packages/e17/eclair_20060128.bb
deleted file mode 100644
index d78e1322c2..0000000000
--- a/packages/e17/eclair_20060128.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Eclair is the E17 multi media player"
-DEPENDS = "evas-x11 ecore-x11 embryo imlib2-x11 edje-native edje libxine-x11 emotion esmart-x11 libxml2 sqlite3 taglibc"
-LICENSE = "MIT"
-PR = "r1"
-
-inherit e
-
-SRC_URI = "${E_CVS};module=e17/apps/eclair;date=${PV}"
-S = "${WORKDIR}/eclair"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
-
diff --git a/packages/e17/edje-editor_cvs.bb b/packages/e17/edje-editor_cvs.bb
new file mode 100644
index 0000000000..b2483f2bfb
--- /dev/null
+++ b/packages/e17/edje-editor_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Edje-Editor is just that."
+LICENSE = "MIT"
+DEPENDS = "etk"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=e17/proto/edje_editor"
+S = "${WORKDIR}/edje_editor"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/edje-viewer_cvs.bb b/packages/e17/edje-viewer_cvs.bb
new file mode 100644
index 0000000000..1a15746ca4
--- /dev/null
+++ b/packages/e17/edje-viewer_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Edje_Viewer is just that."
+DEPENDS = "etk"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=e17/apps/edje_viewer"
+S = "${WORKDIR}/edje_viewer"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/engage/no-local-includes.patch b/packages/e17/engage/no-local-includes.patch
deleted file mode 100644
index 09cc8da98d..0000000000
--- a/packages/e17/engage/no-local-includes.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- engage/src/module/Makefile.am~no-local-includes
-+++ engage/src/module/Makefile.am
-@@ -10,8 +10,7 @@
-
- # the module .so file
- INCLUDES = -I. \
-- -I$(top_srcdir) \
-- -I$(includedir) \
-+ -I$(top_srcdir) \
- @e_cflags@
- pkgdir = @e_modules@/engage/$(MODULE_ARCH)
- pkg_LTLIBRARIES = module.la
diff --git a/packages/e17/engage_20060128.bb b/packages/e17/engage_20060128.bb
deleted file mode 100644
index ee71e1a0bb..0000000000
--- a/packages/e17/engage_20060128.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "Engage is the E17 icon dock"
-DEPENDS = "evas-x11 ecore-x11 esmart-x11 imlib2-x11 edje ewl e-wm"
-LICENSE = "MIT"
-PR = "r2"
-
-inherit e
-
-SRC_URI = "${E_CVS};module=misc/engage;date=${PV} \
- file://no-local-includes.patch;patch=1"
-S = "${WORKDIR}/engage"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
-
diff --git a/packages/efl/esmart/.mtn2git_empty b/packages/e17/enna/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/esmart/.mtn2git_empty
+++ b/packages/e17/enna/.mtn2git_empty
diff --git a/packages/e17/enna/locale-is-broken.patch b/packages/e17/enna/locale-is-broken.patch
new file mode 100644
index 0000000000..40904e14dd
--- /dev/null
+++ b/packages/e17/enna/locale-is-broken.patch
@@ -0,0 +1,13 @@
+Index: enna/Makefile.am
+===================================================================
+--- enna.orig/Makefile.am
++++ enna/Makefile.am
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in
+ ## Created by Anjuta
+
+-SUBDIRS = src po data
++SUBDIRS = src data
+
+ EXTRA_DIST = config.rpath $(ennadoc_DATA)
+
diff --git a/packages/e17/enna_svn.bb b/packages/e17/enna_svn.bb
new file mode 100644
index 0000000000..49e1caeab0
--- /dev/null
+++ b/packages/e17/enna_svn.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Enna is a media center application based on EFL"
+LICENSE = "GPL"
+DEPENDS = "curl dbus eet evas edje ecore edbus emotion libmusicbrainz libxml2 taglibc"
+SECTION = "x11/multimedia"
+PV = "0.2.0+svn${SRCDATE}"
+
+inherit e
+
+SRC_URI = "svn://enna.svn.sourceforge.net/svnroot/enna/trunk;module=enna;proto=http \
+ file://locale-is-broken.patch;patch=1"
+S = "${WORKDIR}/enna"
+
+do_configure_prepend() {
+ touch po/Makefile.in.in
+}
+
diff --git a/packages/e17/entice_20060128.bb b/packages/e17/entice_20060128.bb
deleted file mode 100644
index 776f652b96..0000000000
--- a/packages/e17/entice_20060128.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Entice is the E17 picture viewer"
-# can also depend on GIMP for editing
-DEPENDS = "edb evas-x11 ecore-x11 edje epsilon esmart-x11"
-LICENSE = "MIT"
-PR = "r3"
-
-inherit e
-
-RDEPENDS += "libesmart-container-plugins libesmart-thumb0 libesmart-trans-x11-0 libesmart-file-dialog0"
-
-SRC_URI = "${E_CVS};module=e17/apps/entice;date=${PV}"
-S = "${WORKDIR}/entice"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
-
diff --git a/packages/e17/entice_20060416.bb b/packages/e17/entice_20060416.bb
deleted file mode 100644
index 87434e3d3b..0000000000
--- a/packages/e17/entice_20060416.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Entice is the E17 picture viewer"
-# can also depend on GIMP for editing
-DEPENDS = "edb evas-x11 ecore-x11 edje epsilon esmart-x11"
-LICENSE = "MIT"
-PR = "r0"
-
-inherit e
-
-RDEPENDS += "libesmart-container-plugins libesmart-thumb libesmart-trans-x11-0 libesmart-file-dialog"
-
-SRC_URI = "${E_CVS};module=e17/apps/entice;date=${PV}"
-S = "${WORKDIR}/entice"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
-
diff --git a/packages/e17/entice_cvs.bb b/packages/e17/entice_cvs.bb
new file mode 100644
index 0000000000..62a80ead47
--- /dev/null
+++ b/packages/e17/entice_cvs.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Entice is the E17 picture viewer"
+# can also depend on GIMP for editing
+LICENSE = "MIT"
+DEPENDS = "edb evas ecore edje epsilon esmart"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=e17/apps/entice"
+S = "${WORKDIR}/entice"
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/entrance/allow-missing-xsession.patch b/packages/e17/entrance/allow-missing-xsession.patch
index c475e46fe2..74289ad3c8 100644
--- a/packages/e17/entrance/allow-missing-xsession.patch
+++ b/packages/e17/entrance/allow-missing-xsession.patch
@@ -1,18 +1,18 @@
---- entrance/configure.in.~1.42.~ 2005-07-29 23:15:58.000000000 -0700
-+++ entrance/configure.in 2005-08-13 03:11:41.000000000 -0700
-@@ -190,11 +190,11 @@
+Index: entrance-0.9.0.009/configure.in
+===================================================================
+--- entrance-0.9.0.009.orig/configure.in
++++ entrance-0.9.0.009/configure.in
+@@ -184,10 +184,10 @@ AC_ARG_WITH(xsession,
fi
]
)
--if test ! -x $xsession ; then
-- AC_MSG_WARN([** no $xsession file on this system **])
-- AC_MSG_WARN([** Perhaps you need to specify --with-xsession **])
-- xsession="You should reconfigure --with-xsession"
+-if test ! -x "$xsession" ; then
+- AC_MSG_WARN([** $xsession does not exist or is not executable **])
+- AC_MSG_WARN([** Please consider overriding with --with-xsession **])
-fi
-+#if test ! -x $xsession ; then
-+# AC_MSG_WARN([** no $xsession file on this system **])
-+# AC_MSG_WARN([** Perhaps you need to specify --with-xsession **])
-+# xsession="You should reconfigure --with-xsession"
++#if test ! -x "$xsession" ; then
++# AC_MSG_WARN([** $xsession does not exist or is not executable **])
++# AC_MSG_WARN([** Please consider overriding with --with-xsession **])
+#fi
AC_DEFINE_UNQUOTED(ENTRANCE_XSESSION, "$xsession", [Xsession script])
diff --git a/packages/e17/entrance/config-db.patch b/packages/e17/entrance/config-db.patch
index 83ed3acf84..aecbfb6867 100644
--- a/packages/e17/entrance/config-db.patch
+++ b/packages/e17/entrance/config-db.patch
@@ -1,43 +1,119 @@
---- entrance/data/config/build_config.sh.in.~1.18.~ 2006-01-11 18:46:48.000000000 -0800
-+++ entrance/data/config/build_config.sh.in 2006-01-11 21:52:54.000000000 -0800
-@@ -18,29 +18,14 @@
+Index: entrance-0.9.0.009/data/config/build_config.sh.in
+===================================================================
+--- entrance-0.9.0.009.orig/data/config/build_config.sh.in
++++ entrance-0.9.0.009/data/config/build_config.sh.in
+@@ -1,45 +1,45 @@
+ #!/bin/sh -e
+
+-usage() {
+- cat <<-EOF
+- Usage: $0 [options]
+-
+- Options:
+- -d, --dir Session directory to scan
+- -c, --file Config file (default: $DB)
+- -h, --help This help output :p
+- EOF
+-
+- if [ "$1" = "1" ] ; then
+- echo ""
+- echo "ERROR: $2"
+- fi
+-
+- exit $1
+-}
+-
+-SESSION_DIR=""
+-DB="./entrance_config.cfg"
+-
+-while [ -n "$1" ] ; do
+- case $1 in
+- -d) shift; SESSION_DIR=$1;;
+- -c) shift; DB=$1;;
+- -h) usage 0;;
+- *) usage 1 "Unknown option: $1";;
+- esac
+- shift
+-done
+-
+-if [ -z "$DB" ] || [ -d "$DB" ] ; then
+- usage 1 "Invalid DB argument"
+-fi
+-
+-FROM=$SESSION_DIR
+-if [ -z "$FROM" ] ; then
+- FROM="defaults"
+-fi
+-echo "Generating config file '$DB' from '$FROM' ..."
++#usage() {
++# cat <<-EOF
++# Usage: $0 [options]
++#
++# Options:
++# -d, --dir Session directory to scan
++# -c, --file Config file (default: $DB)
++# -h, --help This help output :p
++# EOF
++#
++# if [ "$1" = "1" ] ; then
++# echo ""
++# echo "ERROR: $2"
++# fi
++#
++# exit $1
++#}
++#
++#SESSION_DIR=""
++#DB="./entrance_config.cfg"
++#
++#while [ -n "$1" ] ; do
++# case $1 in
++# -d) shift; SESSION_DIR=$1;;
++# -c) shift; DB=$1;;
++# -h) usage 0;;
++# *) usage 1 "Unknown option: $1";;
++# esac
++# shift
++#done
++#
++#if [ -z "$DB" ] || [ -d "$DB" ] ; then
++# usage 1 "Invalid DB argument"
++#fi
++#
++#FROM=$SESSION_DIR
++#if [ -z "$FROM" ] ; then
++# FROM="defaults"
++#fi
++#echo "Generating config file '$DB' from '$FROM' ..."
+
+ rm -f $DB || exit 1
+
+@@ -59,10 +59,10 @@ ecore_config -c $DB -k /entrance/time_fo
#ecore_config -c $DB -k /entrance/fonts/0/-s -s "/usr/share/fonts/truetype/"
#ecore_config -c $DB -k /entrance/fonts/1/-s -s "/usr/X11R6/lib/X11/fonts/Truetype/"
ecore_config -c $DB -k /entrance/greeting/before -s "Welcome to"
-ecore_config -c $DB -k /entrance/greeting/after -s ""
--ecore_config -c $DB -k /entrance/session/count -i 7
--ecore_config -c $DB -k /entrance/session/0/session -s "default"
+ecore_config -c $DB -k /entrance/greeting/after -s " e17/OE"
-+ecore_config -c $DB -k /entrance/session/count -i 2
+
+ count=0
+-ecore_config -c $DB -k /entrance/session/0/session -s "default"
+ecore_config -c $DB -k /entrance/session/0/session -s "/etc/X11/Sessions/Enlightenment"
ecore_config -c $DB -k /entrance/session/0/title -s "Default"
ecore_config -c $DB -k /entrance/session/0/icon -s "default.png"
- ecore_config -c $DB -k /entrance/session/1/icon -s "enlightenment.png"
- ecore_config -c $DB -k /entrance/session/1/title -s "E17"
--ecore_config -c $DB -k /entrance/session/1/session -s "@prefix@/bin/enlightenment"
--ecore_config -c $DB -k /entrance/session/2/session -s "kde"
--ecore_config -c $DB -k /entrance/session/2/title -s "KDE"
--ecore_config -c $DB -k /entrance/session/2/icon -s "kde.png"
--ecore_config -c $DB -k /entrance/session/3/session -s "gnome"
--ecore_config -c $DB -k /entrance/session/3/title -s "Gnome"
--ecore_config -c $DB -k /entrance/session/3/icon -s "gnome.png"
--ecore_config -c $DB -k /entrance/session/4/session -s "Enlightenment"
--ecore_config -c $DB -k /entrance/session/4/title -s "E16"
--ecore_config -c $DB -k /entrance/session/4/icon -s "enlightenment.png"
--ecore_config -c $DB -k /entrance/session/5/session -s "xfce"
--ecore_config -c $DB -k /entrance/session/5/title -s "XFce"
--ecore_config -c $DB -k /entrance/session/5/icon -s "xfce.png"
--ecore_config -c $DB -k /entrance/session/6/session -s "failsafe"
--ecore_config -c $DB -k /entrance/session/6/title -s "Failsafe"
--ecore_config -c $DB -k /entrance/session/6/icon -s "failsafe.png"
-+ecore_config -c $DB -k /entrance/session/1/session -s "/etc/X11/Sessions/Enlightenment"
- ecore_config -c $DB -k /entrance/system/reboot -i 1
- ecore_config -c $DB -k /entrance/system/halt -i 1
- ecore_config -c $DB -k /entrance/user/remember -i 1
-@@ -50,5 +35,5 @@
+ #if [ -z "$SESSION_DIR" ] ; then
+@@ -92,7 +92,7 @@ ecore_config -c $DB -k /entrance/session
+ # done
+ #fi
+ count=`(expr $count + 1)`
+-ecore_config -c $DB -k /entrance/session/$count/session -s "failsafe"
++ecore_config -c $DB -k /entrance/session/$count/session -s "/etc/X11/Sessions/Enlightenment"
+ ecore_config -c $DB -k /entrance/session/$count/title -s "Failsafe"
+ ecore_config -c $DB -k /entrance/session/$count/icon -s "failsafe.png"
+ count=`(expr $count + 1)`
+@@ -107,5 +107,5 @@ ecore_config -c $DB -k /entrance/autolog
ecore_config -c $DB -k /entrance/presel/mode -i 1
# for Entranced
--ecore_config -c $DB -k /entranced/xserver -s "/usr/X11R6/bin/X -quiet -nolisten tcp"
+-ecore_config -c $DB -k /entranced/xserver -s "@xbin@/X -quiet -nolisten tcp@ENTRANCE_VT_ARG@"
+ecore_config -c $DB -k /entranced/xserver -s "/etc/X11/Xserver"
ecore_config -c $DB -k /entranced/attempts -i 5
diff --git a/packages/e17/entrance/fix-auth-mode.patch b/packages/e17/entrance/fix-auth-mode.patch
index 1ec520f768..46e530b256 100644
--- a/packages/e17/entrance/fix-auth-mode.patch
+++ b/packages/e17/entrance/fix-auth-mode.patch
@@ -1,7 +1,9 @@
---- entrance/data/config/build_config.sh.in~ 2006-01-30 07:01:47.000000000 -0800
-+++ entrance/data/config/build_config.sh.in 2006-02-01 22:22:04.000000000 -0800
-@@ -3,7 +3,7 @@
- rm -f $DB
+Index: entrance-0.9.0.009/data/config/build_config.sh.in
+===================================================================
+--- entrance-0.9.0.009.orig/data/config/build_config.sh.in
++++ entrance-0.9.0.009/data/config/build_config.sh.in
+@@ -44,7 +44,7 @@
+ rm -f $DB || exit 1
# set auth to 1 for pam, 2 for shadow
-ecore_config -c $DB -k /entrance/auth -i @auth_mode@
diff --git a/packages/e17/entrance/use-bash.patch b/packages/e17/entrance/use-bash.patch
index 58ef8f556f..7dfab83711 100644
--- a/packages/e17/entrance/use-bash.patch
+++ b/packages/e17/entrance/use-bash.patch
@@ -1,19 +1,33 @@
-diff -Nur entrance~/src/client/entrance_session.c entrance/src/client/entrance_session.c
---- entrance~/src/client/entrance_session.c 2006-02-02 19:51:40.000000000 -0800
-+++ entrance/src/client/entrance_session.c 2006-02-02 19:59:24.000000000 -0800
-@@ -495,7 +495,7 @@
- entrance_session_free(e);
- /* replace this process with a clean small one that just waits for its */
- /* child to exit.. passed on the cmd-line */
-- execl("/bin/sh", "/bin/sh", "-l", "-c", buf, NULL);
-+ execl("/bin/bash", "/bin/bash", "-l", "-c", buf, NULL);
- }
+Index: entrance-0.9.0.009/src/client/entrance_session.c
+===================================================================
+--- entrance-0.9.0.009.orig/src/client/entrance_session.c
++++ entrance-0.9.0.009/src/client/entrance_session.c
+@@ -854,7 +854,7 @@ _entrance_session_execute_in_shell(char
+ if (shell && (strlen(shell) > 0))
+ shell_cmd = shell;
+ else
+- shell_cmd = strdup("/bin/sh");
++ shell_cmd = strdup("/bin/bash");
+ if (session_name)
+ snprintf(buf, sizeof(buf), "%s %s", session_cmd, session_name);
+@@ -869,9 +869,9 @@ _entrance_session_execute_in_shell(char
+ if (res == -1)
+ /* TODO: should actually hit the user in the face with this message */
+ syslog(LOG_NOTICE,
+- "Neither '%s' or '/bin/sh' are working login shells for user '%s'. Your session may not function properly. ",
++ "Neither '%s' or '/bin/bash' are working login shells for user '%s'. Your session may not function properly. ",
+ shell, user);
+- shell_cmd = strdup("/bin/sh");
++ shell_cmd = strdup("/bin/bash");
+
+ res = execlp(shell_cmd, shell_cmd, "-c", buf, NULL);
-diff -Nur entrance~/src/client/main.c entrance/src/client/main.c
---- entrance~/src/client/main.c 2006-02-02 19:51:40.000000000 -0800
-+++ entrance/src/client/main.c 2006-02-02 19:57:24.000000000 -0800
-@@ -392,7 +392,7 @@
+Index: entrance-0.9.0.009/src/client/main.c
+===================================================================
+--- entrance-0.9.0.009.orig/src/client/main.c
++++ entrance-0.9.0.009/src/client/main.c
+@@ -453,7 +453,7 @@ reboot_cb(void *data, Evas_Object * o, c
{
case 0:
if (execl
@@ -22,7 +36,7 @@ diff -Nur entrance~/src/client/main.c entrance/src/client/main.c
{
syslog(LOG_CRIT,
"Reboot failed: Unable to execute /sbin/shutdown");
-@@ -434,7 +434,7 @@
+@@ -495,7 +495,7 @@ shutdown_cb(void *data, Evas_Object * o,
{
case 0:
if (execl
@@ -31,24 +45,13 @@ diff -Nur entrance~/src/client/main.c entrance/src/client/main.c
{
syslog(LOG_CRIT,
"Shutdown failed: Unable to execute /sbin/shutdown");
-diff -Nur entrance~/src/daemon/entrance_wrapper.in entrance/src/daemon/entrance_wrapper.in
---- entrance~/src/daemon/entrance_wrapper.in 2006-02-02 19:51:40.000000000 -0800
-+++ entrance/src/daemon/entrance_wrapper.in 2006-02-02 19:56:43.000000000 -0800
+Index: entrance-0.9.0.009/src/daemon/entrance_wrapper.in
+===================================================================
+--- entrance-0.9.0.009.orig/src/daemon/entrance_wrapper.in
++++ entrance-0.9.0.009/src/daemon/entrance_wrapper.in
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# Wrapper script to set up login environment:
# Load up all the junk in /etc/profile first, and then
# pass control to entrance proper.
-diff -Nur entrance~/src/daemon/spawner.c entrance/src/daemon/spawner.c
---- entrance~/src/daemon/spawner.c 2006-02-02 19:51:40.000000000 -0800
-+++ entrance/src/daemon/spawner.c 2006-02-02 19:57:10.000000000 -0800
-@@ -162,7 +162,7 @@
- sigaction(SIGUSR1, &_entrance_x_sa, NULL);
- /* FIXME: need to parse command and NOT go thru /bin/sh!!!! */
- /* why? some /bin/sh's wont pass on this SIGUSR1 thing... */
-- execl("/bin/sh", "/bin/sh", "-c", x_cmd, NULL);
-+ execl("/bin/bash", "/bin/bash", "-c", x_cmd, NULL);
- syslog(LOG_WARNING, "Could not execute X server.");
- exit(1);
- default:
diff --git a/packages/e17/entrance_0.9.0.007.bb b/packages/e17/entrance_0.9.0.007.bb
deleted file mode 100644
index 50126cb5a9..0000000000
--- a/packages/e17/entrance_0.9.0.007.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-DESCRIPTION = "Entrance is the Enlightenment login manager"
-LICENSE = "MIT"
-# can also use pam and crypt
-DEPENDS = "evas-x11 ecore-x11 edje esmart-x11 bash keylaunch xserver-common login-manager"
-RDEPENDS += "bash keylaunch xserver-common glibc-gconv-iso8859-1 login-manager entrance-themes"
-HOMEPAGE = "http://www.enlightenment.org"
-PR = "r14"
-
-inherit e
-
-SRC_URI = "${E_URI}/entrance-${PV}.tar.gz \
- file://config-db.patch;patch=1 \
- file://allow-missing-xsession.patch;patch=1 \
- file://run-Xinit.patch;patch=1 \
- file://set-display-env.patch;patch=1 \
- file://fix-auth-mode.patch;patch=1 \
- file://use-bash.patch;patch=1 \
- file://disable-autodetect.patch;patch=1 \
- file://Sessions"
-
-S = "${WORKDIR}/entrance-${PV}"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
- --with-xsession=/etc/X11/Xsession \
- --with-auth-mode=0"
-
-FILES_${PN} += "${bindir} ${sbindir} /etc ${datadir}"
-
-do_install_append() {
- install -d ${D}/etc/X11/Xsession.d
- install -d ${D}/etc/X11/Sessions
-
- install -m 755 ${WORKDIR}/Sessions/* ${D}/etc/X11/Sessions
-
- install -d ${D}/etc/X11/login-managers/
- mv ${D}/etc/init.d/entrance ${D}/etc/X11/login-managers/entrance
-}
diff --git a/packages/e17/entrance_0.9.0.010.bb b/packages/e17/entrance_0.9.0.010.bb
new file mode 100644
index 0000000000..4c47f1d2ab
--- /dev/null
+++ b/packages/e17/entrance_0.9.0.010.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "Entrance is the Enlightenment login manager"
+LICENSE = "MIT"
+# can also use pam and crypt
+DEPENDS = "evas ecore edje esmart bash keylaunch xserver-common login-manager"
+RDEPENDS += "glibc-gconv-iso8859-1 entrance-themes"
+PR = "r0"
+
+inherit e
+
+SRC_URI += "\
+ file://config-db.patch;patch=1 \
+ file://allow-missing-xsession.patch;patch=1 \
+ file://run-Xinit.patch;patch=1 \
+ file://fix-auth-mode.patch;patch=1 \
+ file://use-bash.patch;patch=1 \
+ file://Sessions"
+
+S = "${WORKDIR}/entrance-${PV}"
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
+ --with-xsession=/etc/X11/Xsession \
+ --with-auth-mode=0"
+
+FILES_${PN}-dbg += "${libexecdir}/entrance/.debug/*"
+
+do_install_append() {
+ install -d ${D}/etc/X11/Xsession.d
+ install -d ${D}/etc/X11/Sessions
+
+ install -m 755 ${WORKDIR}/Sessions/* ${D}/etc/X11/Sessions
+
+ install -d ${D}/etc/X11/login-managers/
+ mv ${D}/etc/init.d/entrance ${D}/etc/X11/login-managers/entrance
+}
diff --git a/packages/e17/examine_20060128.bb b/packages/e17/examine_20060128.bb
deleted file mode 100644
index b406ea3b5f..0000000000
--- a/packages/e17/examine_20060128.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "examine, the program configurator"
-DEPENDS = "virtual/ecore ewl"
-LICENSE = "MIT"
-PR = "r0"
-
-inherit e
-
-SRC_URI = "${E_CVS};module=e17/apps/examine;date=${PV}"
-S = "${WORKDIR}/examine"
-
-EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
-
-FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/examine_cvs.bb b/packages/e17/examine_cvs.bb
new file mode 100644
index 0000000000..89d0dd5755
--- /dev/null
+++ b/packages/e17/examine_cvs.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Examine, the program configurator"
+DEPENDS = "ewl"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=e17/apps/examine"
+S = "${WORKDIR}/examine"
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/exhibit_cvs.bb b/packages/e17/exhibit_cvs.bb
new file mode 100644
index 0000000000..1c3c836955
--- /dev/null
+++ b/packages/e17/exhibit_cvs.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Exhibit is the ETK picture viewer"
+DEPENDS = "evas ecore edje etk epsilon engrave"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "cvs://anonymous@anoncvs.enlightenment.org/var/cvs/e;module=e17/apps/exhibit"
+S = "${WORKDIR}/${PN}"
diff --git a/packages/e17/expedite_cvs.bb b/packages/e17/expedite_cvs.bb
new file mode 100644
index 0000000000..ea376c2442
--- /dev/null
+++ b/packages/e17/expedite_cvs.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Expedite is a comprehensive benchmarking suite for evas"
+DEPENDS = "evas"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e
+
+SRC_URI = "cvs://anonymous@anoncvs.enlightenment.org/var/cvs/e;module=e17/apps/expedite"
+S = "${WORKDIR}/${PN}"
+
+do_configure_append() {
+ find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+}
+
diff --git a/packages/e17/rage_0.2.0.003.bb b/packages/e17/rage_0.2.0.003.bb
new file mode 100644
index 0000000000..ab527e214b
--- /dev/null
+++ b/packages/e17/rage_0.2.0.003.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "rage is a media center application based on EFL"
+AUTHOR = "Carsten 'The Rasterman' Heitzler"
+HOMEPAGE = "http://www.rasterman.com"
+LICENSE = "GPL"
+DEPENDS = "evas ecore edje"
+SECTION = "x11/multimedia"
+
+SRC_URI = "http://download.enlightenment.org/snapshots/2007-06-17/rage-${PV}.tar.gz"
+
+inherit e
diff --git a/packages/efl/evas/.mtn2git_empty b/packages/ecj/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/evas/.mtn2git_empty
+++ b/packages/ecj/.mtn2git_empty
diff --git a/packages/ecj/ecj-native_3.2.2.bb b/packages/ecj/ecj-native_3.2.2.bb
new file mode 100644
index 0000000000..8afa2653ca
--- /dev/null
+++ b/packages/ecj/ecj-native_3.2.2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "JDT Core Batch Compiler"
+HOMEPAGE = "http://www.eclipse.org/"
+PRIORITY = "optional"
+SECTION = "devel"
+LICENSE = "EPL"
+PR = "r0"
+
+inherit native
+
+SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.2.2-200702121330/ecj.jar \
+ file://ecj.sh"
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
+ install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
+}
diff --git a/packages/ecj/ecj-native_3.3.bb b/packages/ecj/ecj-native_3.3.bb
new file mode 100644
index 0000000000..ff2eb5f49e
--- /dev/null
+++ b/packages/ecj/ecj-native_3.3.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "JDT Core Batch Compiler"
+HOMEPAGE = "http://www.eclipse.org/"
+PRIORITY = "optional"
+SECTION = "devel"
+LICENSE = "EPL"
+PR = "r0"
+
+inherit native
+
+SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.3-200706251500/ecj.jar \
+ file://ecj.sh"
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
+ install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
+}
diff --git a/packages/efl/ewl/.mtn2git_empty b/packages/ecj/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/ewl/.mtn2git_empty
+++ b/packages/ecj/files/.mtn2git_empty
diff --git a/packages/ecj/files/ecj.sh b/packages/ecj/files/ecj.sh
new file mode 100644
index 0000000000..75aa2c2287
--- /dev/null
+++ b/packages/ecj/files/ecj.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+java -Xmx512m -jar $0.jar "$@"
diff --git a/packages/efl++/efl++-fb_cvs.bb b/packages/efl++/efl++-fb_cvs.bb
deleted file mode 100644
index 8706a32033..0000000000
--- a/packages/efl++/efl++-fb_cvs.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require efl++.inc
-
-PV = "0.1.0+cvs${SRCDATE}"
-
-SRC_URI = "cvs://anonymous@projects.linuxtogo.org/cvsroot/eflpp;module=efl++"
-S = "${WORKDIR}/efl++"
-
-
-
diff --git a/packages/efl++/efl++-x11_cvs.bb b/packages/efl++/efl++-x11_cvs.bb
deleted file mode 100644
index 4beb8c555e..0000000000
--- a/packages/efl++/efl++-x11_cvs.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require efl++.inc
-
-EXTRA_QMAKEVARS_POST += "CONFIG+=eflecorex11"
-PV = "0.1.0+cvs${SRCDATE}"
-
-SRC_URI = "cvs://anonymous@projects.linuxtogo.org/cvsroot/eflpp;module=efl++"
-S = "${WORKDIR}/efl++"
-
-
-
diff --git a/packages/efl++/efl++.inc b/packages/efl++/efl++.inc
deleted file mode 100644
index 52cea6e2aa..0000000000
--- a/packages/efl++/efl++.inc
+++ /dev/null
@@ -1,57 +0,0 @@
-DESCRIPTION = "C++ Bindings for the Enlightenment Foundation Libraries"
-SECTION = "e/libs"
-LICENSE = "LGPL"
-AUTHOR = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
-HOMEPAGE = "http://www.Vanille.de/projects/efl++.html"
-DEPENDS = "virtual/evas virtual/ecore etk edje libsigc++-2.0"
-PROVIDES = "virtual/efl++"
-
-SRC_URI = "http://www.Vanille.de/download/efl/efl++_${PV}.tar.bz2 \
- file://fix-src.pro.patch;patch=1 \
- file://disable-smart.patch;patch=1"
-S = "${WORKDIR}/efl++-${PV}"
-
-inherit qmake qt4x11
-
-PARALLEL_MAKE = ""
-QMAKE_PROFILES = "efl++.pro"
-EXTRA_QMAKEVARS_POST = "DESTDIR=${S}"
-export OE_QMAKE_LINK="${CXX}"
-export EDIR="${S}"
-
-do_configure_prepend() {
- rm include.pro
- cat <<EOF >include.pro
-include ( common.pro )
-
-LIBS += -L${EDIR}
-
-EFLCONFIG = console release eflbasic angstrom
-INCLUDEPATH += ${EDIR}/src/common ${EDIR}/src/extra ${EDIR}/src/misc
-INCLUDEPATH += ${EDIR}/src/evas ${EDIR}/src/ecore ${EDIR}/src/edje
-INCLUDEPATH += ${EDIR}/src/esmart ${EDIR}/src/ewl
-
-DEFINES += DATADIR=\"${datadir}/efl++/\"
-
-EOF
-}
-
-do_stage() {
- for i in src/common/*.h src/evas/*.h src/ecore/*.h src/edje/*.h
- do
- install -m 0644 $i ${STAGING_INCDIR}
- done
- oe_libinstall -so -C ${S} libefl++ ${STAGING_LIBDIR}
-}
-
-do_install() {
- oe_libinstall -so -C ${S} libefl++ ${D}${libdir}
- install -d ${D}${bindir}
- install *-* ${D}${bindir}
- install -d ${D}${datadir}/efl++
- cp -pPR data/* ${D}${datadir}/efl++
-}
-
-PACKAGES =+ "efl++-examples"
-FILES_${PN} = "${libdir}"
-FILES_efl++-examples = "${bindir} ${datadir}"
diff --git a/packages/efl++/files/disable-smart.patch b/packages/efl++/files/disable-smart.patch
deleted file mode 100644
index cdb157cdef..0000000000
--- a/packages/efl++/files/disable-smart.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- efl++-0.1.0/src/evas/evas.cpp~disable-smart
-+++ efl++-0.1.0/src/evas/evas.cpp
-@@ -7,9 +7,13 @@
- /* EFL */
- extern "C" {
- #include <Edje.h>
-+#ifdef EFL_SUPPORT_ESMART
- #include <Esmart/Esmart_Container.h>
- #include <Esmart/Esmart_Text_Entry.h>
-+#endif
-+#ifdef EFL_SUPPORT_EMOTION
- #include <Emotion.h>
-+#endif
- }
-
- /* STD */
diff --git a/packages/efl++/files/fix-src.pro.patch b/packages/efl++/files/fix-src.pro.patch
deleted file mode 100644
index 234d38af3d..0000000000
--- a/packages/efl++/files/fix-src.pro.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- efl++-0.1.0/src/src.pro~fix-src.pro
-+++ efl++-0.1.0/src/src.pro
-@@ -30,6 +30,7 @@
- include ( emotion/emotion.pro )
- LIBS += -lemotion
- DEFINES += EFL_SUPPORT_EMOTION
-+}
-
- eflesmart {
- include ( esmart/esmart.pro )
diff --git a/packages/efl/ecore.inc b/packages/efl/ecore.inc
deleted file mode 100644
index 7d89435598..0000000000
--- a/packages/efl/ecore.inc
+++ /dev/null
@@ -1,45 +0,0 @@
-DESCRIPTION = "Ecore is the core event abstraction layer for the enlightenment \
-foundation libraries. It makes makes doing selections, drag and drop, event loops, \
-timeouts and idle handlers fast, optimized, and convenient."
-LEAD_SONAME = "libecore.so"
-LICENSE = "MIT"
-# can also have openssl, dbus, iconv
-DEPENDS += "virtual/evas curl eet"
-PROVIDES += "virtual/ecore"
-
-inherit efl
-
-SRC_URI = "http://enlightenment.freedesktop.org/files/ecore-${PV}.tar.gz \
- file://configure.patch;patch=1 \
- file://fix-tslib-configure.patch;patch=1 \
- file://ecore_kernel_input_header.patch;patch=1 \
- ${E_CVS};module=e17/libs/ecore/m4;date=20060101"
-
-S = "${WORKDIR}/ecore-${PV}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ecore"
-
-EXTRA_OECONF = "<override me>"
-
-libraries = ""
-headers = ""
-parts = "<override me>"
-
-do_configure_prepend() {
- if [ -e "${WORKDIR}/m4" ]; then
- install -d "${S}/m4"
- install "${WORKDIR}/m4/"*.m4 "${S}/m4"
- aclocal -I m4
- fi
-}
-
-do_stage_append() {
- for p in ${parts}; do
- dir=`echo $p|tr A-Z a-z`
- install -m 0644 ${S}/src/lib/$dir/$p*.h ${STAGING_INCDIR}/
- oe_libinstall -C src/lib/$dir lib$dir ${STAGING_LIBDIR}/
- done
- install -m 0644 ${S}/src/lib/ecore/Ecore_Data.h ${STAGING_INCDIR}/
- install -m 0644 ${S}/ecore.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-FILES_${PN} += "${libdir}/libecore*.so* ${libdir}/ecore_config_ipc_ecore.so"
diff --git a/packages/efl/ecore/configure-abstract-sockets.patch b/packages/efl/ecore/configure-abstract-sockets.patch
deleted file mode 100644
index cdd30695e1..0000000000
--- a/packages/efl/ecore/configure-abstract-sockets.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- ecore-0.9.9.036/configure.in~ 2006-11-13 14:05:24.000000000 -0800
-+++ ecore-0.9.9.036/configure.in 2006-11-13 14:18:22.000000000 -0800
-@@ -886,10 +886,7 @@
- )
- fi
-
--AC_ABSTRACT_SOCKET_TEST(
-- [AC_DEFINE(HAVE_ABSTRACT_SOCKETS, 1, [Have abstract socket namespace])],
-- []
--)
-+HAVE_ABSTRACT_SOCKETS = 1
-
- want_ecore_ipc="yes";
- have_ecore_ipc="no";
diff --git a/packages/efl/edje-native_0.5.0.037.bb b/packages/efl/edje-native_0.5.0.037.bb
deleted file mode 100644
index c66639d25e..0000000000
--- a/packages/efl/edje-native_0.5.0.037.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-require edje_${PV}.bb
-PR = "r3"
-
-inherit native
-
-DEPENDS = "evas-native ecore-native eet-native embryo-native"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/edje"
-
-do_configure_prepend() {
- sed -i 's:EMBRYO_PREFIX"/bin:"${STAGING_BINDIR}:' ${S}/src/bin/edje_cc_out.c
- sed -i 's:cpp -I:/usr/bin/cpp -I:' ${S}/src/bin/edje_cc_parse.c
- sed -i 's:gcc -I:/usr/bin/gcc -I:' ${S}/src/bin/edje_cc_parse.c
-}
-
-do_stage_append() {
- edje_data_dir=`${STAGING_BINDIR}/edje-config-native --datadir`
- # could also use ${STAGING_DATADIR}/edje/include
- install -d $edje_data_dir/include
- install -m 0644 data/include/edje.inc $edje_data_dir/include
-}
diff --git a/packages/efl/epsilon_0.3.0.007.bb b/packages/efl/epsilon_0.3.0.007.bb
deleted file mode 100644
index efadecbf90..0000000000
--- a/packages/efl/epsilon_0.3.0.007.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "Epsilon is a flexable and powerful image thumbnailing library \
-that is complient with the freedesktop.org Thumbnail Managing Standard."
-LICENSE = "GPL"
-DEPENDS = "virtual/imlib2 epeg libpng virtual/evas virtual/ecore perl-native edje"
-
-inherit efl
-
-PR = "r1"
-
-SRC_URI += "file://compile-fix.patch;patch=1 \
- file://server-is-not-client.patch;patch=1 \
- ${E_CVS};module=e17/libs/epsilon/m4;date=20060101"
-
-do_configure_prepend() {
- install -d "${S}/m4"
- install "${WORKDIR}/m4/"*.m4 "${S}/m4"
- aclocal -I m4
-}
diff --git a/packages/efl/etk_20060418.bb b/packages/efl/etk_20060418.bb
deleted file mode 100644
index bf1f98d497..0000000000
--- a/packages/efl/etk_20060418.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
-DEPENDS = "evas-x11 ecore-x11 edje"
-LICENSE = "MIT"
-PR = "r1"
-
-inherit efl
-
-SRC_URI = "${E_CVS};module=e17/proto/etk;date=${PV}"
-S = "${WORKDIR}/etk"
-
-do_stage_append() {
- for i in src/lib/etk_*.h
- do
- install -m 0644 $i ${STAGING_INCDIR}
- done
-}
diff --git a/packages/efl/evas-fb_0.9.9.037.bb b/packages/efl/evas-fb_0.9.9.037.bb
deleted file mode 100644
index 3e29b80cc0..0000000000
--- a/packages/efl/evas-fb_0.9.9.037.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-require evas.inc
-PR = "r5"
-
-EXTRA_OECONF = "--enable-fb \
- --disable-directfb \
- --enable-buffer \
- --disable-software-qtopia \
- --disable-software-x11 \
- --disable-gl-x11 \
- --disable-xrender-x11 \
- --enable-image-loader-eet \
- --disable-image-loader-edb \
- --enable-image-loader-png \
- --enable-image-loader-jpeg \
- --enable-small-dither-mask \
- --enable-cpu-c \
- --enable-font-loader-eet \
- --enable-scale-sample \
- --enable-scale-smooth \
- --enable-convert-yuv \
- --enable-convert-8-rgb-332 \
- --enable-convert-8-rgb-666 \
- --enable-convert-8-rgb-232 \
- --enable-convert-8-rgb-222 \
- --enable-convert-8-rgb-221 \
- --enable-convert-8-rgb-121 \
- --enable-convert-8-rgb-111 \
- --enable-convert-16-rgb-565 \
- --enable-convert-16-rgb-555 \
- --enable-convert-16-rgb-444 \
- --enable-convert-16-rgb-ipq \
- --enable-convert-16-rgb-rot-0 \
- --enable-convert-16-rgb-rot-90 \
- --enable-convert-16-rgb-rot-270 \
- --enable-convert-24-rgb-888 \
- --enable-convert-24-bgr-888 \
- --enable-convert-32-rgb-8888 \
- --enable-convert-32-rgbx-8888 \
- --enable-convert-32-bgr-8888 \
- --enable-convert-32-bgrx-8888 \
- --enable-convert-32-rgb-rot-0 \
- --enable-convert-32-rgb-rot-90 \
- --enable-convert-32-rgb-rot-270"
-
-headers = "../modules/engines/buffer/Evas_Engine_Buffer.h \
- ../modules/engines/fb/Evas_Engine_FB.h \
- Evas.h"
diff --git a/packages/efl/evas-x11_0.9.9.037.bb b/packages/efl/evas-x11_0.9.9.037.bb
deleted file mode 100644
index 121922591e..0000000000
--- a/packages/efl/evas-x11_0.9.9.037.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-require evas.inc
-DEPENDS += "edb virtual/libx11 libxext freetype"
-PR = "r7"
-
-EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR} \
- --enable-fb \
- --disable-directfb \
- --enable-buffer \
- --disable-software-qtopia \
- --enable-software-x11 \
- --disable-gl-x11 \
- --enable-image-loader-eet \
- --enable-image-loader-edb \
- --enable-image-loader-png \
- --enable-image-loader-jpeg \
- --enable-small-dither-mask \
- --enable-cpu-c \
- --enable-font-loader-eet \
- --enable-scale-sample \
- --enable-scale-smooth \
- --enable-convert-yuv \
- --disable-image-loader-svg \
- --disable-convert-8-rgb-332 \
- --disable-convert-8-rgb-666 \
- --disable-convert-8-rgb-232 \
- --disable-convert-8-rgb-222 \
- --disable-convert-8-rgb-221 \
- --disable-convert-8-rgb-121 \
- --disable-convert-8-rgb-111 \
- --enable-convert-16-rgb-565 \
- --disable-convert-16-rgb-555 \
- --disable-convert-16-rgb-444 \
- --disable-convert-16-rgb-ipq \
- --enable-convert-16-rgb-rot-0 \
- --disable-convert-16-rgb-rot-90 \
- --enable-convert-16-rgb-rot-270 \
- --disable-convert-24-rgb-888 \
- --disable-convert-24-bgr-888 \
- --disable-convert-32-rgb-8888 \
- --disable-convert-32-rgbx-8888 \
- --disable-convert-32-bgr-8888 \
- --disable-convert-32-bgrx-8888 \
- --disable-convert-32-rgb-rot-0 \
- --disable-convert-32-rgb-rot-90 \
- --disable-convert-32-rgb-rot-270"
-
-headers = "../modules/engines/software_x11/Evas_Engine_Software_X11.h \
- ../modules/engines/xrender_x11/Evas_Engine_XRender_X11.h \
- ../modules/engines/buffer/Evas_Engine_Buffer.h \
- ../modules/engines/fb/Evas_Engine_FB.h \
- Evas.h"
-
diff --git a/packages/efl/evas.inc b/packages/efl/evas.inc
deleted file mode 100644
index f065d944f8..0000000000
--- a/packages/efl/evas.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION = "Evas is a hardware-accelerated canvas API that can draw \
-anti-aliased text, smooth super and sub-images, alpha-blend, as well as drop \
-down to using normal X11 primitives such as pixmaps, lines and rectangles if \
-your CPU or graphics hardware are too slow."
-LICENSE = "MIT"
-# can also depend on valgrind (?)
-DEPENDS = "freetype libpng jpeg eet"
-PROVIDES += "virtual/evas"
-
-inherit efl
-
-export FREETYPE_CONFIG = "${STAGING_BINDIR_CROSS}/freetype-config"
-
-SRC_URI = "http://enlightenment.freedesktop.org/files/evas-${PV}.tar.gz \
- file://fix-configure.patch;patch=1 \
- ${E_CVS};module=e17/libs/evas/m4;date=20060101"
-
-S = "${WORKDIR}/evas-${PV}"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/evas"
-
-EXTRA_OECONF = "<override me>"
-
-do_configure_prepend() {
- if [ -e "${WORKDIR}/m4" ]; then
- install -d "${S}/m4"
- install "${WORKDIR}/m4/"*.m4 "${S}/m4"
- aclocal -I m4
- fi
-}
-
-do_stage_append() {
- cd src
- modules=`find modules -name ".libs"`
- for module in $modules
- do
- install -d ${STAGING_LIBDIR}/evas/`dirname $module`/${TARGET_OS}-gnu-${TARGET_ARCH}
- install -m 0755 $module/module.so ${STAGING_LIBDIR}/evas/`dirname $module`/${TARGET_OS}-gnu-${TARGET_ARCH}/module.so
- done
-}
-
-headers = "<override me>"
-libraries = "libevas"
-FILES_${PN} += "/usr/lib/evas/"
diff --git a/packages/efl/imlib2-fb_1.2.2.001.bb b/packages/efl/imlib2-fb_1.2.2.001.bb
deleted file mode 100644
index 776acb43f6..0000000000
--- a/packages/efl/imlib2-fb_1.2.2.001.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require imlib2.inc
-
-EXTRA_OECONF = "--without-x \
- --disable-mmx"
-
diff --git a/packages/efl/imlib2-native_1.2.2.001.bb b/packages/efl/imlib2-native_1.2.2.001.bb
deleted file mode 100644
index da75e8f439..0000000000
--- a/packages/efl/imlib2-native_1.2.2.001.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require imlib2.inc
-inherit native
-PROVIDES = "imlib2-native"
-DEPENDS = "freetype-native libpng-native jpeg-native"
-
-EXTRA_OECONF = "--disable-mmx \
- --without-x"
diff --git a/packages/efl/imlib2-x11_1.2.2.001.bb b/packages/efl/imlib2-x11_1.2.2.001.bb
deleted file mode 100644
index e7814971c3..0000000000
--- a/packages/efl/imlib2-x11_1.2.2.001.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require imlib2.inc
-DEPENDS += "virtual/libx11 libxext"
-PR = "r1"
-
-EXTRA_OECONF = "--disable-mmx \
- --with-x \
- --x-includes=${STAGING_INCDIR} \
- --x-libraries=${STAGING_LIBDIR}"
diff --git a/packages/efl/imlib2.inc b/packages/efl/imlib2.inc
deleted file mode 100644
index 4691bf2ce0..0000000000
--- a/packages/efl/imlib2.inc
+++ /dev/null
@@ -1,54 +0,0 @@
-DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation."
-LICENSE = "BSD"
-# can also depend on tiff34, ungif or gif, z, bz2, id3tag
-DEPENDS = "freetype libpng jpeg"
-PROVIDES += "virtual/imlib2"
-
-inherit efl
-
-SRC_URI = "http://enlightenment.freedesktop.org/files/imlib2-${PV}.tar.gz"
-S = "${WORKDIR}/imlib2-${PV}"
-
-libraries = ""
-headers = ""
-
-do_stage_append() {
- oe_libinstall -C src/lib libImlib2 ${STAGING_LIBDIR}/
- install -m 0644 ${S}/src/lib/Imlib2.h ${STAGING_INCDIR}/
-
- install -d ${STAGING_LIBDIR}/imlib2/loaders
- for i in src/modules/loaders/.libs/*.so
- do
- install -m 0755 $i ${STAGING_LIBDIR}/imlib2/loaders
- done
-
- install -d ${STAGING_LIBDIR}/imlib2/filters
- for i in src/modules/filters/.libs/*.so
- do
- install -m 0755 $i ${STAGING_LIBDIR}/imlib2/filters
- done
-}
-
-do_install() {
- oe_libinstall -C src/lib libImlib2 ${D}${libdir}/
- install -m 0644 ${S}/src/lib/Imlib2.h ${D}${incdir}/
-
- install -d ${D}${libdir}/imlib2/loaders
- for i in src/modules/loaders/.libs/*.so
- do
- install -m 0755 $i ${D}${libdir}/imlib2/loaders
- done
-
- install -d ${D}${libdir}/imlib2/filters
- for i in src/modules/filters/.libs/*.so
- do
- install -m 0755 $i ${D}${libdir}/imlib2/filters
- done
-}
-
-PACKAGES =+ "imlib2-loaders imlib2-filters"
-FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2"
-FILES_${PN}-dev += "${bindir}/imlib2-config"
-FILES_imlib2-bin = "${bindir}"
-FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
-FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so"
diff --git a/packages/efl/files/.mtn2git_empty b/packages/efl1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl/files/.mtn2git_empty
+++ b/packages/efl1/.mtn2git_empty
diff --git a/packages/efl1/ecore-native_cvs.bb b/packages/efl1/ecore-native_cvs.bb
new file mode 100644
index 0000000000..92a30397e1
--- /dev/null
+++ b/packages/efl1/ecore-native_cvs.bb
@@ -0,0 +1,29 @@
+require ecore.inc
+inherit native
+DEPENDS = "eet-native evas-native"
+PR = "r2"
+
+EXTRA_OECONF = "\
+ --enable-ecore-txt \
+ --disable-ecore-x-xcb \
+ --disable-ecore-x \
+ --enable-ecore-job \
+ --disable-ecore-directfb \
+ --disable-ecore-sdl \
+ --enable-ecore-fb \
+ --enable-ecore-evas \
+ --disable-ecore-evas-gl \
+ --disable-ecore-evas-xrender \
+ --disable-ecore-evas-dfb \
+ --disable-openssl \
+ --enable-abstract-sockets \
+ --enable-ecore-con \
+ --enable-ecore-ipc \
+ --enable-ecore-file \
+ --enable-inotify \
+ --disable-poll \
+ --disable-curl \
+ --disable-ecore-desktop \
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} "
+
diff --git a/packages/efl1/ecore.inc b/packages/efl1/ecore.inc
new file mode 100644
index 0000000000..9e1bc18f5c
--- /dev/null
+++ b/packages/efl1/ecore.inc
@@ -0,0 +1,45 @@
+DESCRIPTION = "Ecore is the core event abstraction layer for the enlightenment \
+foundation libraries. It makes makes doing selections, drag and drop, event loops, \
+timeouts and idle handlers fast, optimized, and convenient."
+LICENSE = "MIT"
+DEPENDS = "curl directfb eet evas tslib"
+# optional
+# DEPENDS += "openssl virtual/libiconv"
+PV = "0.9.9+cvs${SRCDATE}"
+
+inherit efl_library
+
+SRC_URI += "\
+ file://fix-tslib-configure.patch;patch=1 \
+ file://fix-directfb-include.patch;patch=1 \
+"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ecore"
+
+PACKAGES += "\
+ ${PN}-con \
+ ${PN}-config \
+ ${PN}-desktop \
+ ${PN}-directfb \
+ ${PN}-sdl \
+ ${PN}-evas \
+ ${PN}-fb \
+ ${PN}-file \
+ ${PN}-ipc \
+ ${PN}-job \
+ ${PN}-txt \
+ ${PN}-x \
+ "
+FILES_${PN} = "${libdir}/libecore.so.*"
+FILES_${PN}-con = "${libdir}/libecore_con.so.*"
+FILES_${PN}-config = "${libdir}/libecore_config.so.*"
+FILES_${PN}-desktop = "${libdir}/libecore_desktop.so.*"
+FILES_${PN}-directfb = "${libdir}/libecore_directfb.so.*"
+FILES_${PN}-sdl = "${libdir}/libecore_sdl.so.*"
+FILES_${PN}-evas = "${libdir}/libecore_evas.so.*"
+FILES_${PN}-fb = "${libdir}/libecore_fb.so.*"
+FILES_${PN}-file = "${libdir}/libecore_file.so.*"
+FILES_${PN}-ipc = "${libdir}/libecore_ipc.so.*"
+FILES_${PN}-job = "${libdir}/libecore_job.so.*"
+FILES_${PN}-txt = "${libdir}/libecore_txt.so.*"
+FILES_${PN}-x = "${libdir}/libecore_x.so.*"
diff --git a/packages/elfutils/elfutils-0.108/.mtn2git_empty b/packages/efl1/ecore/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/elfutils/elfutils-0.108/.mtn2git_empty
+++ b/packages/efl1/ecore/.mtn2git_empty
diff --git a/packages/efl/ecore/add-tslib-support.patch b/packages/efl1/ecore/add-tslib-support.patch
index c125122a91..c125122a91 100644
--- a/packages/efl/ecore/add-tslib-support.patch
+++ b/packages/efl1/ecore/add-tslib-support.patch
diff --git a/packages/efl/ecore/configure.patch b/packages/efl1/ecore/configure.patch
index 23d8193b44..23d8193b44 100644
--- a/packages/efl/ecore/configure.patch
+++ b/packages/efl1/ecore/configure.patch
diff --git a/packages/efl/ecore/ecore_kernel_input_header.patch b/packages/efl1/ecore/ecore_kernel_input_header.patch
index 99f57ddcff..99f57ddcff 100644
--- a/packages/efl/ecore/ecore_kernel_input_header.patch
+++ b/packages/efl1/ecore/ecore_kernel_input_header.patch
diff --git a/packages/efl1/ecore/fix-directfb-include.patch b/packages/efl1/ecore/fix-directfb-include.patch
new file mode 100644
index 0000000000..b1c06f7f43
--- /dev/null
+++ b/packages/efl1/ecore/fix-directfb-include.patch
@@ -0,0 +1,13 @@
+Index: ecore-0.9.9.038/src/lib/ecore_directfb/Ecore_DirectFB.h
+===================================================================
+--- ecore-0.9.9.038.orig/src/lib/ecore_directfb/Ecore_DirectFB.h
++++ ecore-0.9.9.038/src/lib/ecore_directfb/Ecore_DirectFB.h
+@@ -23,7 +23,7 @@
+ #endif
+
+ #include <Ecore_Data.h>
+-#include <directfb.h>
++#include <directfb/directfb.h>
+
+
+ #ifdef __cplusplus
diff --git a/packages/efl1/ecore/fix-tslib-configure.patch b/packages/efl1/ecore/fix-tslib-configure.patch
new file mode 100644
index 0000000000..a1fbb21326
--- /dev/null
+++ b/packages/efl1/ecore/fix-tslib-configure.patch
@@ -0,0 +1,19 @@
+Index: ecore-0.9.9.038/configure.in
+===================================================================
+--- ecore-0.9.9.038.orig/configure.in
++++ ecore-0.9.9.038/configure.in
+@@ -1,4 +1,4 @@
+-dnl Process this file with autoconf to produce a configure script.
++<dnl Process this file with autoconf to produce a configure script.
+
+ AC_INIT(configure.in)
+ AC_CANONICAL_BUILD
+@@ -321,7 +321,7 @@ tslib_libs=""
+ if test "x$have_ecore_fb" = "xyes" ; then
+ AC_CHECK_HEADER(tslib.h,
+ [
+- tslib_libs="-ltslib"
++ tslib_libs="-lts"
+ AC_DEFINE(HAVE_TSLIB, 1, [Build Ecore_FB Touchscreen Code])
+ ]
+ )
diff --git a/packages/efl/ecore/remove-bad-code.patch b/packages/efl1/ecore/remove-bad-code.patch
index 87a8d16bd6..87a8d16bd6 100644
--- a/packages/efl/ecore/remove-bad-code.patch
+++ b/packages/efl1/ecore/remove-bad-code.patch
diff --git a/packages/efl1/ecore_cvs.bb b/packages/efl1/ecore_cvs.bb
new file mode 100644
index 0000000000..dd6c467c54
--- /dev/null
+++ b/packages/efl1/ecore_cvs.bb
@@ -0,0 +1,26 @@
+require ecore.inc
+PR = "r5"
+
+EXTRA_OECONF = "\
+ --enable-ecore-txt \
+ --disable-ecore-x-xcb \
+ --enable-ecore-x \
+ --enable-ecore-job \
+ --enable-ecore-directfb \
+ --enable-ecore-sdl \
+ --enable-ecore-fb \
+ --enable-ecore-evas \
+ --disable-ecore-evas-gl \
+ --enable-ecore-evas-xrender \
+ --enable-ecore-evas-dfb \
+ --disable-openssl \
+ --enable-abstract-sockets \
+ --enable-ecore-con \
+ --enable-ecore-ipc \
+ --enable-ecore-file \
+ --enable-inotify \
+ --disable-poll \
+ --enable-curl \
+ --enable-ecore-desktop \
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} "
diff --git a/packages/efl1/edb_cvs.bb b/packages/efl1/edb_cvs.bb
new file mode 100644
index 0000000000..b7c85e8663
--- /dev/null
+++ b/packages/efl1/edb_cvs.bb
@@ -0,0 +1,5 @@
+DESCRIPTION = "Edb is a database library"
+LICENSE = "MIT"
+PV = "0.0.0+cvs${SRCDATE}"
+
+inherit efl_library
diff --git a/packages/efl1/edbus_cvs.bb b/packages/efl1/edbus_cvs.bb
new file mode 100644
index 0000000000..db1547c3d4
--- /dev/null
+++ b/packages/efl1/edbus_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "DBus and HAL convenience wrappers for EFL"
+DEPENDS = "dbus ecore"
+LICENSE = "MIT"
+PR = "r0"
+
+inherit efl_library
+
+SRC_URI = "${E_CVS};module=e17/proto/e_dbus"
+S = "${WORKDIR}/e_dbus"
+
+# TODO increase package granularity
+
diff --git a/packages/efl1/edje-native_cvs.bb b/packages/efl1/edje-native_cvs.bb
new file mode 100644
index 0000000000..2c52b69a0c
--- /dev/null
+++ b/packages/efl1/edje-native_cvs.bb
@@ -0,0 +1,12 @@
+require edje_${PV}.bb
+inherit native
+PR = "r0"
+
+DEPENDS = "evas-native ecore-native eet-native embryo-native"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/edje"
+
+do_configure_prepend() {
+ sed -i 's:EMBRYO_PREFIX"/bin:"${STAGING_BINDIR}:' ${S}/src/bin/edje_cc_out.c
+ sed -i 's:cpp -I:/usr/bin/cpp -I:' ${S}/src/bin/edje_cc_parse.c
+ sed -i 's:gcc -I:/usr/bin/gcc -I:' ${S}/src/bin/edje_cc_parse.c
+}
diff --git a/packages/efl1/edje_cvs.bb b/packages/efl1/edje_cvs.bb
new file mode 100644
index 0000000000..79336b74b5
--- /dev/null
+++ b/packages/efl1/edje_cvs.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Edje is a complex graphical design & layout library."
+# can also install vim data files
+DEPENDS = "eet evas ecore embryo edje-native"
+LICENSE = "MIT"
+PV = "0.5.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
+
+# NOTE: Packaging needs work. edje_cc should actually be in the -dev package etc.
+
diff --git a/packages/efl1/eet-native_cvs.bb b/packages/efl1/eet-native_cvs.bb
new file mode 100644
index 0000000000..de162df5d5
--- /dev/null
+++ b/packages/efl1/eet-native_cvs.bb
@@ -0,0 +1,3 @@
+require eet_cvs.bb
+inherit native
+DEPENDS = "zlib-native jpeg-native"
diff --git a/packages/efl1/eet_cvs.bb b/packages/efl1/eet_cvs.bb
new file mode 100644
index 0000000000..2c9c641b6c
--- /dev/null
+++ b/packages/efl1/eet_cvs.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "EET is a tiny library designed to write an \
+arbitary set of chunks of data to a file and optionally compress \
+each chunk (very much like a zip file) and allow fast \
+random-access reading of the file later on."
+DEPENDS = "zlib jpeg"
+LICENSE = "BSD"
+PV = "0.9.10+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
diff --git a/packages/efl1/eflpp_cvs.bb b/packages/efl1/eflpp_cvs.bb
new file mode 100644
index 0000000000..ce01d89112
--- /dev/null
+++ b/packages/efl1/eflpp_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "EFLpp are C++ bindings to the EFL"
+AUTHOR = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+HOMEPAGE = "http://www.vanille-media.de/site/index.php/projects/efl/"
+LICENSE = "LGPL"
+DEPENDS = "evas ecore edje emotion esmart etk ewl libsigc++-2.0"
+PV = "0.1.0+cvs${SRCDATE}"
+
+inherit efl_library
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+SRC_URI = "${E_CVS};module=e17/proto/${SRCNAME}"
diff --git a/packages/efl1/efreet_cvs.bb b/packages/efl1/efreet_cvs.bb
new file mode 100644
index 0000000000..dba9a3c9fb
--- /dev/null
+++ b/packages/efl1/efreet_cvs.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "An implementation of freedesktop.org specs for the \
+Enlightenment Foundation Libraries"
+DEPENDS = "ecore"
+LICENSE = "BSD"
+PV = "0.0.3+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
+
+PACKAGES =+ "${PN}-mime"
+FILES_${PN}-mime = "${libdir}/libefreet_mime.so.*"
+
diff --git a/packages/efl1/embryo-native_cvs.bb b/packages/efl1/embryo-native_cvs.bb
new file mode 100644
index 0000000000..2fc3faddfd
--- /dev/null
+++ b/packages/efl1/embryo-native_cvs.bb
@@ -0,0 +1,3 @@
+require embryo_${PV}.bb
+inherit native
+
diff --git a/packages/efl1/embryo_cvs.bb b/packages/efl1/embryo_cvs.bb
new file mode 100644
index 0000000000..45b75f503d
--- /dev/null
+++ b/packages/efl1/embryo_cvs.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Embryo implements a C like scripting language used in various parts \
+of the Enlightenment project, namely Edje. Embryo's scripting language is based on \
+CompuPhase's Small language that was introduced in Dr Dobb's Journal in 1999. \
+Embryo allows scripting capabilities in places that otherwise wouldn't support \
+basic programming structures such as in Edje EDCs."
+LICENSE = "MIT"
+PV = "0.9.1+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
diff --git a/packages/efl1/emotion_cvs.bb b/packages/efl1/emotion_cvs.bb
new file mode 100644
index 0000000000..84302e4793
--- /dev/null
+++ b/packages/efl1/emotion_cvs.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Emotion is a multimedia library with backends: gstreamer and libxine"
+LICENSE = "MIT"
+# we no longer build the libxine backend, since the gstreamer backend seems more promising
+DEPENDS = "eet evas ecore edje gstreamer gst-plugins-base"
+RRECOMMENDS_${PN} = "emotion-backend-gstreamer"
+PV = "0.0.1+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
+
+EXTRA_OECONF = "--disable-xine --enable-gstreamer"
+
+PACKAGES =+ "emotion-backend-gstreamer emotion-test"
+FILES_emotion-backend-gstreamer = "${libdir}/emotion/*.so"
+FILES_emotion-test = "${bindir}/emotion_test ${datadir}"
diff --git a/packages/efl1/engrave_cvs.bb b/packages/efl1/engrave_cvs.bb
new file mode 100644
index 0000000000..689e254fc1
--- /dev/null
+++ b/packages/efl1/engrave_cvs.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "Engrave is an Edje Editing Library"
+LICENSE = "MIT"
+# also requires yacc and lex on host
+DEPENDS = "evas ecore"
+PV = "0.0.0+cvs${SRCDATE}"
+
+inherit efl_library
diff --git a/packages/efl1/enhance_cvs.bb b/packages/efl1/enhance_cvs.bb
new file mode 100644
index 0000000000..728beb61ec
--- /dev/null
+++ b/packages/efl1/enhance_cvs.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Enhance translates between glade .xml files and ETK"
+LICENSE = "MIT"
+DEPENDS = "exml"
+PV = "0.0.0+cvs${SRCDATE}"
+
+inherit efl_library
diff --git a/packages/elitaire/.mtn2git_empty b/packages/efl1/epdf/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/elitaire/.mtn2git_empty
+++ b/packages/efl1/epdf/.mtn2git_empty
diff --git a/packages/efl1/epdf/fix-plugin-path-check.patch b/packages/efl1/epdf/fix-plugin-path-check.patch
new file mode 100644
index 0000000000..dd5469c286
--- /dev/null
+++ b/packages/efl1/epdf/fix-plugin-path-check.patch
@@ -0,0 +1,24 @@
+Index: epdf/configure.in
+===================================================================
+--- epdf.orig/configure.in
++++ epdf/configure.in
+@@ -27,8 +27,8 @@ PKG_CHECK_MODULES(EWL,
+ [
+ have_ewl="yes"
+ requirements="$requirements ewl"
+- EWL_TEST_LIBS_DIR="`$PKG_CONFIG --variable=testsdir ewl`"
+- EWL_TEST_SOURCE_DIR="`$PKG_CONFIG --variable=testssrcdir ewl`"
++ EWL_TEST_LIBS_DIR="/usr/lib/ewl/tests/"
++ EWL_TEST_SOURCE_DIR="/usr/share/ewl/examples/"
+ AC_SUBST(EWL_TEST_LIBS_DIR)
+ AC_SUBST(EWL_TEST_SOURCE_DIR)
+ ],
+@@ -55,7 +55,7 @@ PKG_CHECK_MODULES(EPSILON,
+ [
+ have_epsilon="yes"
+ requirements="$requirements epsilon imlib2"
+- EPSILON_PLUGINS_DIR="`$PKG_CONFIG --variable=pluginsdir epsilon`"
++ EPSILON_PLUGINS_DIR="/usr/lib/epsilon/plugins/"
+ AC_SUBST(EPSILON_PLUGINS_DIR)
+ ],
+ [
diff --git a/packages/efl1/epdf_cvs.bb b/packages/efl1/epdf_cvs.bb
new file mode 100644
index 0000000000..2681b941d2
--- /dev/null
+++ b/packages/efl1/epdf_cvs.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Epdf is the glue between EFL and libpoppler"
+LICENSE = "BSD"
+DEPENDS = "poppler0.6 evas ecore etk ewl"
+PV = "0.1.0+cvs${SRCDATE}"
+
+inherit efl_library
+
+SRC_URI = "${E_CVS};module=e17/proto/${SRCNAME} \
+ file://fix-plugin-path-check.patch;HACK=1;patch=1"
+
+# add ewl additions
+FILES_${PN}-dev += "${libdir}/ewl/tests/*.a ${libdir}/ewl/tests/*.la"
+FILES_${PN}-dbg += "${libdir}/ewl/tests/.debug"
+
+# add epsilon additions
+FILES_${PN}-dev += "${libdir}/epsilon/plugins/epdf_thumbnailer.a ${libdir}/epsilon/plugins/epdf_thumbnailer.la"
+FILES_${PN}-dbg += "${libdir}/epsilon/plugins/.debug"
+
+PACKAGES += "${PN}-ewl-widget epsilon-plugin-${PN}"
+FILES_${PN}-ewl-widget = "${libdir}/ewl/tests/libewl_pdf*.so*"
+FILES_epsilon-plugin-${PN} = "${libdir}/epsilon/plugins/epdf_thumbnailer.so*"
+
diff --git a/packages/efl1/epeg_cvs.bb b/packages/efl1/epeg_cvs.bb
new file mode 100644
index 0000000000..3991dd3d21
--- /dev/null
+++ b/packages/efl1/epeg_cvs.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "Epeg is a small library for handling thumbnails."
+LICENSE = "MIT"
+DEPENDS = "jpeg"
+PV = "0.9.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
diff --git a/packages/elitaire/files/.mtn2git_empty b/packages/efl1/epsilon/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/elitaire/files/.mtn2git_empty
+++ b/packages/efl1/epsilon/.mtn2git_empty
diff --git a/packages/efl/epsilon/compile-fix.patch b/packages/efl1/epsilon/compile-fix.patch
index 1c42cc59c4..1c42cc59c4 100644
--- a/packages/efl/epsilon/compile-fix.patch
+++ b/packages/efl1/epsilon/compile-fix.patch
diff --git a/packages/efl/epsilon/server-is-not-client.patch b/packages/efl1/epsilon/server-is-not-client.patch
index e96e528b9e..e96e528b9e 100644
--- a/packages/efl/epsilon/server-is-not-client.patch
+++ b/packages/efl1/epsilon/server-is-not-client.patch
diff --git a/packages/efl1/epsilon_cvs.bb b/packages/efl1/epsilon_cvs.bb
new file mode 100644
index 0000000000..be2934dec8
--- /dev/null
+++ b/packages/efl1/epsilon_cvs.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Epsilon is a flexible and powerful image thumbnailing library \
+that is compliant with the freedesktop.org Thumbnail Managing Standard."
+LICENSE = "BSD"
+# can also depend on xine for movie thumbnails
+DEPENDS = "imlib2 epeg libpng evas ecore edje perl-native"
+PV = "0.3.0+cvs${SRCDATE}"
+
+inherit efl_library
+
+# a gstreamer thumbnailer would be nice now that we have emotion using gstreamer as well
+EXTRA_OECONF = "--disable-xine"
+
+FILES_${PN}-dev += "${libdir}/${PN}/*/*.a ${libdir}/${PN}/*/*.la"
+FILES_${PN}-dbg += "${libdir}/${PN}/plugins/.debug/*.so"
diff --git a/packages/efl1/esmart_cvs.bb b/packages/efl1/esmart_cvs.bb
new file mode 100644
index 0000000000..17e1f42b95
--- /dev/null
+++ b/packages/efl1/esmart_cvs.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "ESmart is a collection of smart Evas objects"
+LICENSE = "MIT"
+DEPENDS = "evas ecore edje imlib2 epsilon libtool"
+PV = "0.9.0+cvs${SRCDATE}"
+
+inherit efl_library
+
+EXTRA_OECONF = "--with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc"
+
+PACKAGES =+ "${PN}-textentry \
+ ${PN}-thumb \
+ ${PN}-container \
+ ${PN}-container-plugins \
+ ${PN}-file-dialog \
+ ${PN}-draggies \
+ ${PN}-trans-x11"
+
+FILES_${PN}-dbg += "${libdir}/.debug/ ${libdir}/esmart/*/.debug/"
+FILES_${PN}-textentry = "${libdir}/libesmart_text_entry*.so*"
+FILES_${PN}-thumb = "${libdir}/libesmart_thumb*.so*"
+FILES_${PN}-container = "${libdir}/libesmart_container*"
+DEPENDS_${PN}-container += "${PN}-container-plugins"
+FILES_${PN}-container-plugins = "${libdir}/esmart/layout/*.so"
+FILES_${PN}-file-dialog = "${libdir}/libesmart_file_dialog*.so*"
+FILES_${PN}-draggies = "${libdir}/libesmart_draggies*.so*"
+FILES_${PN}-trans-x11 = "${libdir}/libesmart_trans_x11*.so*"
diff --git a/packages/esound/esound-gpe/.mtn2git_empty b/packages/efl1/etk-native/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/esound/esound-gpe/.mtn2git_empty
+++ b/packages/efl1/etk-native/.mtn2git_empty
diff --git a/packages/efl1/etk-native_cvs.bb b/packages/efl1/etk-native_cvs.bb
new file mode 100644
index 0000000000..6770be4ab3
--- /dev/null
+++ b/packages/efl1/etk-native_cvs.bb
@@ -0,0 +1,10 @@
+require etk_cvs.bb
+inherit native
+DEPENDS = "evas-native ecore-native edje-native"
+
+SRC_URI += "file://no-tests.patch;patch=1"
+
+do_stage_append() {
+ mv ${STAGING_DIR}/include/etk ${STAGING_INCDIR}
+}
+
diff --git a/packages/efl1/etk_cvs.bb b/packages/efl1/etk_cvs.bb
new file mode 100644
index 0000000000..ad959edef6
--- /dev/null
+++ b/packages/efl1/etk_cvs.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
+DEPENDS = "evas ecore edje"
+LICENSE = "MIT"
+PV = "0.1.0+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
+
+# TODO package engines seperatly (do_split_packages)
+
+PACKAGES =+ "etk-engines"
+FILES_${PN} = "${libdir}/libetk.so*"
+FILES_${PN}-examples += "${bindir}"
+FILES_${PN}-engines = "${libdir}/etk/engines/*.so ${datadir}"
+FILES_${PN}-dev += "${libdir}/etk/engines/*.a ${libdir}/etk/engines/*.la"
+FILES_${PN}-dbg += "${libdir}/etk/engines/.debug/"
+
diff --git a/packages/efl1/evas-native_cvs.bb b/packages/efl1/evas-native_cvs.bb
new file mode 100644
index 0000000000..8b8694899e
--- /dev/null
+++ b/packages/efl1/evas-native_cvs.bb
@@ -0,0 +1,61 @@
+require evas.inc
+inherit native
+DEPENDS = "freetype-native libpng-native jpeg-native eet-native"
+PR = "r0"
+
+EXTRA_OECONF = "\
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --disable-fb \
+ --disable-directfb \
+ --disable-sdl \
+ --enable-buffer \
+ --disable-software-ddraw \
+ --disable-software-qtopia \
+ --disable-software-x11 \
+ --disable-software-16-x11 \
+ --disable-software-xcb \
+ --disable-gl-x11 \
+ --disable-xrender-x11 \
+ --disable-xrender-xcb \
+ --disable-glitz-x11 \
+ --enable-image-loader-eet \
+ --disable-image-loader-edb \
+ --disable-image-loader-gif \
+ --enable-image-loader-png \
+ --enable-image-loader-jpeg \
+ --enable-image-loader-tiff \
+ --enable-image-loader-xpm \
+ --disable-image-loader-svg \
+ --enable-cpu-c \
+ --enable-fontconfig \
+ --enable-font-loader-eet \
+ --enable-scale-sample \
+ --enable-scale-smooth \
+ --enable-convert-yuv \
+ --enable-small-dither-mask \
+ --disable-no-dither-mask \
+ --disable-convert-8-rgb-332 \
+ --disable-convert-8-rgb-666 \
+ --disable-convert-8-rgb-232 \
+ --disable-convert-8-rgb-222 \
+ --disable-convert-8-rgb-221 \
+ --disable-convert-8-rgb-121 \
+ --disable-convert-8-rgb-111 \
+ --enable-convert-16-rgb-565 \
+ --disable-convert-16-rgb-555 \
+ --disable-convert-16-rgb-444 \
+ --disable-convert-16-rgb-ipq \
+ --enable-convert-16-rgb-rot-0 \
+ --disable-convert-16-rgb-rot-90 \
+ --enable-convert-16-rgb-rot-270 \
+ --disable-convert-24-rgb-888 \
+ --disable-convert-24-bgr-888 \
+ --disable-convert-32-rgb-8888 \
+ --disable-convert-32-rgbx-8888 \
+ --disable-convert-32-bgr-8888 \
+ --disable-convert-32-bgrx-8888 \
+ --disable-convert-32-rgb-rot-0 \
+ --disable-convert-32-rgb-rot-90 \
+ --disable-convert-32-rgb-rot-270"
+
diff --git a/packages/efl1/evas.inc b/packages/efl1/evas.inc
new file mode 100644
index 0000000000..6fb6d7f60e
--- /dev/null
+++ b/packages/efl1/evas.inc
@@ -0,0 +1,36 @@
+DESCRIPTION = "Evas is a hardware-accelerated canvas API that can draw \
+anti-aliased text, smooth super and sub-images, alpha-blend, as well as drop \
+down to using normal X11 primitives such as pixmaps, lines and rectangles if \
+your CPU or graphics hardware are too slow."
+LICENSE = "MIT"
+# can also depend on valgrind (?)
+DEPENDS = "libsdl-x11 directfb eet freetype jpeg virtual/libx11 libxext"
+PV = "0.9.9+cvs${SRCDATE}"
+
+inherit efl_library
+
+export FREETYPE_CONFIG = "${STAGING_BINDIR_CROSS}/freetype-config"
+
+SRC_URI += "file://fix-configure.patch;patch=1"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/evas"
+
+EXTRA_OECONF = "<override me>"
+
+python populate_packages_prepend () {
+ for plugin_type in "engines loaders savers".split():
+ bb.note( "splitting packages for evas %s..." % plugin_type )
+ basedir = bb.data.expand( '${libdir}/evas/modules/%s' % plugin_type, d )
+
+ do_split_packages(d, basedir, '^(.*)',
+ output_pattern = 'evas-' + plugin_type[:-1] + "-%s",
+ description = 'Evas module %s',
+ allow_dirs=True, recursive=False, extra_depends="" )
+}
+
+do_install_append() {
+ find "${D}" -name .debug -type d | xargs -iBLAH rm -rf "BLAH"
+}
+
+FILES_${PN}-dev += "${libdir}/evas/modules/*/*/*/*.a ${libdir}/evas/modules/*/*/*/*.la"
+FILES_${PN}-dbg += "${libdir}/evas/modules/*/*/*/.debug/"
+FILES_${PN} = "${libdir}/libevas*.so*"
diff --git a/packages/esound/old/.mtn2git_empty b/packages/efl1/evas/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/esound/old/.mtn2git_empty
+++ b/packages/efl1/evas/.mtn2git_empty
diff --git a/packages/efl/evas/fix-configure.patch b/packages/efl1/evas/fix-configure.patch
index abf9b94bdf..abf9b94bdf 100644
--- a/packages/efl/evas/fix-configure.patch
+++ b/packages/efl1/evas/fix-configure.patch
diff --git a/packages/efl1/evas/pagesize.patch b/packages/efl1/evas/pagesize.patch
new file mode 100644
index 0000000000..5efd16a96e
--- /dev/null
+++ b/packages/efl1/evas/pagesize.patch
@@ -0,0 +1,13 @@
+diff --git a/src/modules/engines/fb/evas_fb_main.c b/src/modules/engines/fb/evas_fb_main.c
+index e26c171..75e0743 100644
+--- a/src/modules/engines/fb/evas_fb_main.c
++++ b/src/modules/engines/fb/evas_fb_main.c
+@@ -530,7 +530,7 @@ fb_postinit(FB_Mode *mode)
+ fb_cleanup();
+ exit(1);
+ }
+- mode->mem_offset = (unsigned)(fb_fix.smem_start) & (~PAGE_MASK);
++ mode->mem_offset = (unsigned)(fb_fix.smem_start) & (getpagesize()-1);
+ mode->mem = (unsigned char *)mmap(NULL, fb_fix.smem_len + mode->mem_offset,
+ PROT_WRITE | PROT_READ, MAP_SHARED, fb, 0);
+ if ((int)mode->mem == -1)
diff --git a/packages/efl1/evas_cvs.bb b/packages/efl1/evas_cvs.bb
new file mode 100644
index 0000000000..b80ff8bcba
--- /dev/null
+++ b/packages/efl1/evas_cvs.bb
@@ -0,0 +1,59 @@
+require evas.inc
+PR = "r0"
+
+EXTRA_OECONF = "\
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-fb \
+ --enable-directfb \
+ --enable-sdl \
+ --enable-buffer \
+ --disable-software-ddraw \
+ --disable-software-qtopia \
+ --enable-software-x11 \
+ --disable-software-16-x11 \
+ --disable-software-xcb \
+ --disable-gl-x11 \
+ --enable-xrender-x11 \
+ --disable-xrender-xcb \
+ --disable-glitz-x11 \
+ --enable-image-loader-eet \
+ --disable-image-loader-edb \
+ --disable-image-loader-gif \
+ --enable-image-loader-png \
+ --enable-image-loader-jpeg \
+ --enable-image-loader-tiff \
+ --enable-image-loader-xpm \
+ --enable-image-loader-svg \
+ --enable-cpu-c \
+ --enable-fontconfig \
+ --enable-font-loader-eet \
+ --enable-scale-sample \
+ --enable-scale-smooth \
+ --enable-convert-yuv \
+ --enable-small-dither-mask \
+ --disable-no-dither-mask \
+ --disable-convert-8-rgb-332 \
+ --disable-convert-8-rgb-666 \
+ --disable-convert-8-rgb-232 \
+ --disable-convert-8-rgb-222 \
+ --disable-convert-8-rgb-221 \
+ --disable-convert-8-rgb-121 \
+ --disable-convert-8-rgb-111 \
+ --enable-convert-16-rgb-565 \
+ --disable-convert-16-rgb-555 \
+ --disable-convert-16-rgb-444 \
+ --disable-convert-16-rgb-ipq \
+ --enable-convert-16-rgb-rot-0 \
+ --disable-convert-16-rgb-rot-90 \
+ --enable-convert-16-rgb-rot-270 \
+ --disable-convert-24-rgb-888 \
+ --disable-convert-24-bgr-888 \
+ --disable-convert-32-rgb-8888 \
+ --disable-convert-32-rgbx-8888 \
+ --disable-convert-32-bgr-8888 \
+ --disable-convert-32-bgrx-8888 \
+ --disable-convert-32-rgb-rot-0 \
+ --disable-convert-32-rgb-rot-90 \
+ --disable-convert-32-rgb-rot-270"
+
diff --git a/packages/efl1/evolve-native_cvs.bb b/packages/efl1/evolve-native_cvs.bb
new file mode 100644
index 0000000000..8478b6b0d8
--- /dev/null
+++ b/packages/efl1/evolve-native_cvs.bb
@@ -0,0 +1,6 @@
+require evolve_cvs.bb
+inherit native
+DEPENDS = "etk-native"
+
+# needs ecore-x :/
+BROKEN = "1"
diff --git a/packages/efl1/evolve_cvs.bb b/packages/efl1/evolve_cvs.bb
new file mode 100644
index 0000000000..272d90002e
--- /dev/null
+++ b/packages/efl1/evolve_cvs.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Evolve allows you to write ETK designs using a C-like language"
+LICENSE = "MIT"
+DEPENDS = "etk evolve-native"
+PV = "0.0.0+cvs${SRCDATE}"
+
+inherit efl_library
diff --git a/packages/efl1/ewl_cvs.bb b/packages/efl1/ewl_cvs.bb
new file mode 100644
index 0000000000..2ac7c65279
--- /dev/null
+++ b/packages/efl1/ewl_cvs.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "The Enlightened Widget Library, \
+a simple-to-use general purpose widget library \
+based on the enlightenment foundation libraries."
+DEPENDS = "evas ecore edje emotion efreet"
+RSUGGESTS_${PN} += "ewl-themes"
+LICENSE = "MIT"
+PV = "0.5.1+cvs${SRCDATE}"
+PR = "r0"
+
+inherit efl_library
+
+# TODO package engines more granular
+PACKAGES += "${PN}-plugins ${PN}-engines"
+
+FILES_${PN} += "${sysconfdir}/ewl/*"
+FILES_${PN}-tests += "${libdir}/ewl/tests/*.so*"
+FILES_${PN}-dev += "${libdir}/ewl/*/*.a ${libdir}/ewl/*/*.la"
+FILES_${PN}-dbg += "${libdir}/ewl/*/.debug"
+
+FILES_${PN}-engines = "${libdir}/ewl/engines/*.so*"
+FILES_${PN}-plugins = "${libdir}/ewl/plugins/*.so*"
diff --git a/packages/efl1/exml_cvs.bb b/packages/efl1/exml_cvs.bb
new file mode 100644
index 0000000000..add3053a02
--- /dev/null
+++ b/packages/efl1/exml_cvs.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Exml is a generic XML parser wrapper."
+LICENSE = "MIT"
+DEPENDS = "libxml2 libxslt ecore"
+
+inherit efl_library
+
diff --git a/packages/efl1/imlib2_1.4.0.002.bb b/packages/efl1/imlib2_1.4.0.002.bb
new file mode 100644
index 0000000000..a50eca9623
--- /dev/null
+++ b/packages/efl1/imlib2_1.4.0.002.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation."
+LICENSE = "BSD"
+# can also depend on tiff34, ungif or gif, z, bz2, id3tag
+DEPENDS = "freetype libpng jpeg"
+PR = "r0"
+
+inherit efl_library
+
+PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters"
+FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so"
+FILES_${PN}-dbg = "${libdir}/.debug/ ${bindir}/.debug/"
+FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}"
+FILES_${PN}-bin = "${bindir}"
+FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
+FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so"
+FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug"
+FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug"
diff --git a/packages/elfutils/elfutils-0.108/warnings.patch b/packages/elfutils/elfutils-0.108/warnings.patch
deleted file mode 100644
index 9de027ee26..0000000000
--- a/packages/elfutils/elfutils-0.108/warnings.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Index: elfutils-0.108/configure.ac
-===================================================================
---- elfutils-0.108.orig/configure.ac 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/configure.ac 2006-04-10 19:19:33.000000000 +0100
-@@ -49,6 +49,10 @@
- dnl Add all the languages for which translations are available.
- ALL_LINGUAS=
-
-+if test X"$CFLAGS" = X; then
-+ CFLAGS="-Wall -Werror -g -O2"
-+fi
-+
- AC_PROG_CC
- AC_PROG_RANLIB
- AC_PROG_YACC
-Index: elfutils-0.108/lib/Makefile.am
-===================================================================
---- elfutils-0.108.orig/lib/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/lib/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -21,7 +21,7 @@
- else
- AM_CFLAGS =
- endif
--AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra $($(*F)_CFLAGS)
-+AM_CFLAGS += -fpic -Wshadow -Wunused $($(*F)_CFLAGS)
- INCLUDES = -I$(srcdir)/../libelf -I..
-
- noinst_LIBRARIES = libeu.a
-Index: elfutils-0.108/libasm/Makefile.am
-===================================================================
---- elfutils-0.108.orig/libasm/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/libasm/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -18,7 +18,7 @@
- else
- AM_CFLAGS =
- endif
--AM_CFLAGS += -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2
-+AM_CFLAGS += -Wshadow -Wunused -Wformat=2
- INCLUDES = -I. -I$(srcdir) -I.. -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl \
- -I$(top_srcdir)/lib
- GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-Index: elfutils-0.108/libcpu/Makefile.am
-===================================================================
---- elfutils-0.108.orig/libcpu/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/libcpu/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -13,7 +13,7 @@
- ## 3001 King Ranch Road, Ukiah, CA 95482.
- ##
- DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
--AM_CFLAGS = -Wall -Wshadow -Werror -Wextra -Wformat=2 -Wunused
-+AM_CFLAGS = -Wshadow -Wformat=2 -Wunused
- INCLUDES = -I$(srcdir)
-
- noinst_LIBRARIES = libcpu_i386.a
-Index: elfutils-0.108/libdw/Makefile.am
-===================================================================
---- elfutils-0.108.orig/libdw/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/libdw/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -18,7 +18,7 @@
- else
- AM_CFLAGS =
- endif
--AM_CFLAGS += -Wall -Werror -Wshadow -Wunused -Wformat=2 -Wextra -std=gnu99
-+AM_CFLAGS += -Wshadow -Wunused -Wformat=2 -std=gnu99
- INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib
- VERSION = 1
-
-Index: elfutils-0.108/libebl/Makefile.am
-===================================================================
---- elfutils-0.108.orig/libebl/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/libebl/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -18,7 +18,7 @@
- else
- AM_CFLAGS =
- endif
--AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 \
-+AM_CFLAGS += -fpic -Wshadow -Wunused -Wformat=2 \
- -std=gnu99
-
- INCLUDES = -I$(srcdir) -I$(top_srcdir)/libelf -I$(top_srcdir)/lib -I..
-Index: elfutils-0.108/libelf/Makefile.am
-===================================================================
---- elfutils-0.108.orig/libelf/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/libelf/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -21,7 +21,7 @@
- else
- AM_CFLAGS =
- endif
--AM_CFLAGS += -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 -std=gnu99 \
-+AM_CFLAGS += -Wshadow -Wunused -Wformat=2 -std=gnu99 \
- $($(*F)_CFLAGS)
- INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I..
- GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
-Index: elfutils-0.108/src/Makefile.am
-===================================================================
---- elfutils-0.108.orig/src/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/src/Makefile.am 2006-04-10 19:20:19.000000000 +0100
-@@ -15,14 +15,12 @@
- DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H $(YYDEBUG) \
- -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\"
- if MUDFLAP
--AM_CFLAGS = -Wall -Wshadow -Wunused -Wextra -std=gnu99 -fmudflap \
-+AM_CFLAGS = -Wshadow -Wunused -std=gnu99 -fmudflap \
- $(native_ld_cflags) $(if $($(*F)_no_Wunused),,-Wunused) \
- $(if $($(*F)_no_Wformat),,-Wformat=2)
- else
--AM_CFLAGS = -Wall -Wshadow -std=gnu99 $(native_ld_cflags) \
-- $(if $($(*F)_no_Werror),,-Werror) \
-- $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
-- $(if $($(*F)_no_Wformat),,-Wformat=2)
-+AM_CFLAGS = -Wshadow -std=gnu99 $(native_ld_cflags) \
-+ $(if $($(*F)_no_Werror),,-Werror)
- endif
- if MUDFLAP
- libmudflap = -lmudflap
-Index: elfutils-0.108/tests/Makefile.am
-===================================================================
---- elfutils-0.108.orig/tests/Makefile.am 2006-04-10 19:18:34.000000000 +0100
-+++ elfutils-0.108/tests/Makefile.am 2006-04-10 19:19:33.000000000 +0100
-@@ -14,10 +14,10 @@
- ##
- DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE
- if MUDFLAP
--AM_CFLAGS = -Wall -Werror -std=gnu99 -fmudflap\
-+AM_CFLAGS = -std=gnu99 -fmudflap\
- $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
- else
--AM_CFLAGS = -Wall -Werror -std=gnu99 \
-+AM_CFLAGS = -std=gnu99 \
- $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
- AM_LDFLAGS = -Wl,-rpath,\$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../libebl:\$$ORIGIN/../libelf
- endif
diff --git a/packages/familiar/.mtn2git_empty b/packages/elfutils/elfutils-0.127/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/familiar/.mtn2git_empty
+++ b/packages/elfutils/elfutils-0.127/.mtn2git_empty
diff --git a/packages/elfutils/elfutils-0.127/warnings.patch b/packages/elfutils/elfutils-0.127/warnings.patch
new file mode 100644
index 0000000000..c2e7fc2f3d
--- /dev/null
+++ b/packages/elfutils/elfutils-0.127/warnings.patch
@@ -0,0 +1,112 @@
+Index: elfutils-0.108/configure.ac
+===================================================================
+--- elfutils-0.108.orig/configure.ac 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/configure.ac 2006-04-10 19:19:33.000000000 +0100
+@@ -55,6 +55,10 @@
+ dnl Add all the languages for which translations are available.
+ ALL_LINGUAS=
+
++if test X"$CFLAGS" = X; then
++ CFLAGS="-Wall -Werror -g -O2"
++fi
++
+ AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_PROG_YACC
+Index: elfutils-0.108/lib/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/lib/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/lib/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -30,7 +30,7 @@
+ else
+ AM_CFLAGS =
+ endif
+-AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra $($(*F)_CFLAGS)
++AM_CFLAGS += -fpic -Wshadow -Wunused $($(*F)_CFLAGS)
+ INCLUDES = -I$(srcdir)/../libelf -I..
+
+ noinst_LIBRARIES = libeu.a
+Index: elfutils-0.108/libasm/Makefile.am
+===================================================================
+--- elfutils-0.127.orig/libasm/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.127/libasm/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -30,7 +30,7 @@
+ else
+ AM_CFLAGS =
+ endif
+-AM_CFLAGS += -std=gnu99 -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2
++AM_CFLAGS += -std=gnu99 -Wshadow -Wunused -Wformat=2
+ INCLUDES = -I. -I$(srcdir) -I.. \
+ -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw\
+ -I$(top_srcdir)/lib
+ GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
+Index: elfutils-0.108/libcpu/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/libcpu/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/libcpu/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -13,7 +13,7 @@
+ ## 3001 King Ranch Road, Ukiah, CA 95482.
+ ##
+ DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H
+-AM_CFLAGS = -Wall -Wshadow -Werror -Wextra -Wformat=2 -Wunused
++AM_CFLAGS = -Wshadow -Wformat=2 -Wunused
+ INCLUDES = -I$(srcdir)
+
+ noinst_LIBRARIES = libcpu_i386.a
+Index: elfutils-0.108/libdw/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/libdw/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/libdw/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -18,7 +18,7 @@
+ else
+ AM_CFLAGS =
+ endif
+-AM_CFLAGS += -Wall -Werror -Wshadow -Wunused -Wformat=2 -Wextra -std=gnu99
++AM_CFLAGS += -Wshadow -Wunused -Wformat=2 -std=gnu99
+ INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../libelf -I.. -I$(srcdir)/../lib
+ VERSION = 1
+
+Index: elfutils-0.108/libebl/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/libebl/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/libebl/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -18,7 +18,7 @@
+ else
+ AM_CFLAGS =
+ endif
+-AM_CFLAGS += -fpic -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 \
++AM_CFLAGS += -fpic -Wshadow -Wunused -Wformat=2 \
+ -std=gnu99
+
+ INCLUDES = -I$(srcdir) -I$(top_srcdir)/libelf -I$(top_srcdir)/lib -I..
+Index: elfutils-0.108/libelf/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/libelf/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/libelf/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -21,7 +21,7 @@
+ else
+ AM_CFLAGS =
+ endif
+-AM_CFLAGS += -Wall -Wshadow -Werror -Wunused -Wextra -Wformat=2 -std=gnu99 \
++AM_CFLAGS += -Wshadow -Wunused -Wformat=2 -std=gnu99 \
+ $($(*F)_CFLAGS)
+ INCLUDES = -I$(srcdir) -I$(top_srcdir)/lib -I..
+ GCC_INCLUDE = -I$(shell $(CC) -print-file-name=include)
+Index: elfutils-0.108/tests/Makefile.am
+===================================================================
+--- elfutils-0.108.orig/tests/Makefile.am 2006-04-10 19:18:34.000000000 +0100
++++ elfutils-0.108/tests/Makefile.am 2006-04-10 19:19:33.000000000 +0100
+@@ -14,10 +14,10 @@
+ ##
+ DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE
+ if MUDFLAP
+-AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 -fmudflap\
++AM_CFLAGS = -std=gnu99 -fmudflap\
+ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
+ BUILD_RPATH = \$$ORIGIN/../backends
+ else
+-AM_CFLAGS = -Wall -Werror -Wextra -std=gnu99 \
++AM_CFLAGS = -std=gnu99 \
+ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2)
+ BUILT_RPATH = \$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../backends:\$$ORIGIN/../libelf
+ endif
diff --git a/packages/elfutils/elfutils_0.108.bb b/packages/elfutils/elfutils_0.108.bb
deleted file mode 100644
index 83acc7dccb..0000000000
--- a/packages/elfutils/elfutils_0.108.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SECTION = "base"
-LICENSE = "OSL"
-DESCRIPTION = "A collection of utilities and DSOs to handle compiled objects."
-DEPENDS = "libtool"
-
-SRC_URI = "http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/elfutils-${PV}.tar.gz \
- file://warnings.patch;patch=1"
-
-inherit autotools
-
-SOV = "${PV}"
-do_stage () {
- install -m 0644 libelf/libelf.a ${STAGING_LIBDIR}/libelf.a
- install -m 0755 libelf/libelf.so.1 ${STAGING_LIBDIR}/libelf-${SOV}.so
- ln -sf libelf-${SOV}.so ${STAGING_LIBDIR}/libelf.so.1
- ln -sf libelf.so.1 ${STAGING_LIBDIR}/libelf.so
- install -m 0644 libasm/libasm.a ${STAGING_LIBDIR}/libasm.a
- install -m 0755 libasm/libasm.so.1 ${STAGING_LIBDIR}/libasm-${SOV}.so
- ln -sf libasm-${SOV}.so ${STAGING_LIBDIR}/libasm.so.1
- ln -sf libasm.so.1 ${STAGING_LIBDIR}/libasm.so
- install -m 0644 libdw/libdw.a ${STAGING_LIBDIR}/libdw.a
- install -m 0755 libdw/libdw.so.1 ${STAGING_LIBDIR}/libdw-${SOV}.so
- ln -sf libdw-${SOV}.so ${STAGING_LIBDIR}/libdw.so.1
- ln -sf libdw.so.1 ${STAGING_LIBDIR}/libdw.so
- install -m 0644 libebl/libebl.a ${STAGING_LIBDIR}/libebl.a
- install -d ${STAGING_LIBDIR}/elfutils/
- install -m 0755 libebl/libebl_*.so ${STAGING_LIBDIR}/elfutils/
-
- install -m 0644 ${S}/libelf/libelf.h ${STAGING_INCDIR}/
- install -m 0644 ${S}/libelf/gelf.h ${STAGING_INCDIR}/
- install -m 0644 ${S}/libelf/nlist.h ${STAGING_INCDIR}/
- install -d ${STAGING_INCDIR}/elfutils
- install -m 0644 ${S}/libebl/libebl.h ${STAGING_INCDIR}/elfutils/
- install -m 0644 ${S}/libdw/libdw.h ${STAGING_INCDIR}/elfutils/
- install -m 0644 ${S}/libasm/libasm.h ${STAGING_INCDIR}/elfutils/
-}
diff --git a/packages/elfutils/elfutils_0.127.bb b/packages/elfutils/elfutils_0.127.bb
new file mode 100644
index 0000000000..22f3b0ae46
--- /dev/null
+++ b/packages/elfutils/elfutils_0.127.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "A collection of utilities and DSOs to handle compiled objects."
+SECTION = "base"
+LICENSE = "OSL"
+DEPENDS = "libtool"
+
+SRC_URI = "http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/elfutils-${PV}.tar.gz \
+ file://warnings.patch;patch=1"
+
+inherit autotools
+
+do_stage () {
+ autotools_stage_all
+}
+
+
diff --git a/packages/elitaire/elitaire_0.0.5.bb b/packages/elitaire/elitaire_0.0.5.bb
deleted file mode 100644
index b33e9fa014..0000000000
--- a/packages/elitaire/elitaire_0.0.5.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "EFL-based solitaire"
-DEPENDS = "evas-x11 ecore-x11 edje esmart-x11 ewl"
-LICENSE = "MIT"
-SECTION = "e/apps"
-PR = "r0"
-
-SRC_URI = "http://www.mowem.de/elitaire/elitaire-${PV}.tar.bz2 \
- file://fix-ewl-and-gettext.patch;patch=1 \
- file://math.patch;patch=1"
-
-inherit autotools pkgconfig binconfig
-
diff --git a/packages/elitaire/files/fix-ewl-and-gettext.patch b/packages/elitaire/files/fix-ewl-and-gettext.patch
deleted file mode 100644
index f572124f94..0000000000
--- a/packages/elitaire/files/fix-ewl-and-gettext.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -Nur elitaire-0.0.4~/src/intl.h elitaire-0.0.4/src/intl.h
---- elitaire-0.0.4~/src/intl.h 2005-08-18 19:02:30.000000000 -0700
-+++ elitaire-0.0.4/src/intl.h 2005-08-18 19:06:05.000000000 -0700
-@@ -13,8 +13,12 @@
-
- inline char * sgettext(const char *msgid)
- {
-+#ifdef ENABLE_NLS
- char *msgval = gettext (msgid);
- if (msgval == msgid)
-+#else
-+ char *msgval;
-+#endif
- msgval = strrchr (msgid, '|') + 1;
- return msgval;
- }
diff --git a/packages/elitaire/files/math.patch b/packages/elitaire/files/math.patch
deleted file mode 100644
index 550507f370..0000000000
--- a/packages/elitaire/files/math.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- elitaire-0.0.4/src/Elitaire.h~ 2005-08-15 06:32:32.000000000 -0700
-+++ elitaire-0.0.4/src/Elitaire.h 2005-09-29 19:19:25.000000000 -0700
-@@ -3,6 +3,11 @@
- #include<Evas.h>
- #include<Edje.h>
- #include"intl.h"
-+#include<tgmath.h>
-+
-+#ifndef ABS
-+#define ABS(x) ((x) >= 0 ? (x) : -(x))
-+#endif
-
- struct Elitaire{
-
diff --git a/packages/elvis/elvis_2.2.0.bb b/packages/elvis/elvis_2.2.0.bb
index 3f1ff12e65..738822b139 100644
--- a/packages/elvis/elvis_2.2.0.bb
+++ b/packages/elvis/elvis_2.2.0.bb
@@ -4,7 +4,8 @@ PRIORITY = "optional"
LICENSE = "Perl Clarified Artistic License"
DEPENDS = "ncurses"
-SRC_URI = "ftp://ftp.cs.pdx.edu/pub/elvis/elvis-2.2_0.tar.gz"
+#SRC_URI = "ftp://ftp.cs.pdx.edu/pub/elvis/elvis-2.2_0.tar.gz"
+SRC_URI = "http://www.fh-wedel.de/pub/elvis/elvis-2.2_0.tar.gz"
S = "${WORKDIR}/elvis-2.2_0"
CFLAGS_prepend = " -I. -Iosunix -L${STAGING_LIBDIR} "
diff --git a/packages/enchant/enchant_1.3.0.bb b/packages/enchant/enchant_1.3.0.bb
new file mode 100644
index 0000000000..f1544336af
--- /dev/null
+++ b/packages/enchant/enchant_1.3.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Enchant Spell checker API Library"
+PRIORITY = "optional"
+SECTION = "libs"
+LICENSE = "LGPL"
+DEPENDS = "aspell"
+RDEPENDS = "aspell"
+
+inherit autotools pkgconfig
+
+PR = "r0"
+
+S = "${WORKDIR}/enchant-${PV}"
+
+SRC_URI = "http://www.abisource.com/downloads/enchant/${PV}/enchant-${PV}.tar.gz"
+
+EXTRA_OECONF = "--with-aspell-prefix=${STAGING_DIR}/${HOST_SYS} --enable-aspell --disable-binreloc"
+
+FILES_${PN} = "/usr/bin/* /usr/lib/enchant/*.so /usr/share/enchant /usr/lib/libenchant*.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/epdfview/epdfview_0.1.6.bb b/packages/epdfview/epdfview_0.1.6.bb
new file mode 100644
index 0000000000..14966601c2
--- /dev/null
+++ b/packages/epdfview/epdfview_0.1.6.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "A minimal PDF viewer based on gtk and poppler"
+HOMEPAGE = "http://www.emma-soft.com/projects/epdfview/"
+LICENSE = "GPLv2"
+SECTION = "x11/applications"
+DEPENDS = "poppler gtk+ cups"
+PR="r1"
+
+SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2"
+
+inherit autotools
+
+do_compile_append () {
+ sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop
+}
+
diff --git a/packages/esound/esound-gpe/audiofile-please.patch b/packages/esound/esound-gpe/audiofile-please.patch
deleted file mode 100644
index 0bfb629040..0000000000
--- a/packages/esound/esound-gpe/audiofile-please.patch
+++ /dev/null
@@ -1,40 +0,0 @@
---- esound/esd.h~ 2002-07-19 13:36:44.000000000 +0100
-+++ esound/esd.h 2004-05-16 11:04:29.000000000 +0100
-@@ -1,6 +1,8 @@
- #ifndef ESD_H
- #define ESD_H
-
-+#define SUPPORT_AUDIOFILE
-+
- #ifdef SUPPORT_AUDIOFILE
- #include <audiofile.h>
- #endif
---- esound/Makefile.am~ 2002-07-19 13:36:44.000000000 +0100
-+++ esound/Makefile.am 2004-05-16 10:56:35.000000000 +0100
-@@ -26,8 +26,8 @@
- lib_LTLIBRARIES = libesd.la $(libesddsp_la)
-
- libesd_la_LDFLAGS = -version-info $(ESD_VERSION_INFO)
--#libesd_la_LIBADD = $(AUDIOFILE_LIBS) $(SOUND_LIBS)
--libesd_la_LIBADD = $(SOUND_LIBS)
-+libesd_la_LIBADD = $(AUDIOFILE_LIBS) $(SOUND_LIBS)
-+#libesd_la_LIBADD = $(SOUND_LIBS)
-
- libesd_la_SOURCES = \
- esdlib.c \
-@@ -36,6 +36,7 @@
- audio.c \
- genrand.c \
- genrand.h \
-+ esdfile.c \
- util.c
-
- # one of these gets included by audio.c
-@@ -79,7 +80,6 @@
- proto.c \
- samples.c \
- $(getopt_src) \
-- util.c \
- esd-server.h
-
- esdcat_SOURCES = \
diff --git a/packages/esound/esound-gpe/configure.patch b/packages/esound/esound-gpe/configure.patch
deleted file mode 100644
index c6c33df11c..0000000000
--- a/packages/esound/esound-gpe/configure.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- esound/configure.in~ 2002-07-19 13:14:01.000000000 +0100
-+++ esound/configure.in 2004-05-16 10:51:48.000000000 +0100
-@@ -352,17 +352,5 @@
- esound.spec
- esound.pc
- esddsp
--docs/Makefile
--docs/esd.1
--docs/esdcat.1
--docs/esd-config.1
--docs/esdctl.1
--docs/esddsp.1
--docs/esdfilt.1
--docs/esdloop.1
--docs/esdmon.1
--docs/esdplay.1
--docs/esdrec.1
--docs/esdsample.1
- ])
- dnl , [case "$CONFIG_FILES" in *esd-config*) chmod +x esd-config;; esac])
diff --git a/packages/esound/esound_0.2.36.bb b/packages/esound/esound_0.2.36.bb
index a260882bae..4f068113d5 100644
--- a/packages/esound/esound_0.2.36.bb
+++ b/packages/esound/esound_0.2.36.bb
@@ -1,17 +1,20 @@
-DESCRIPTION = "Enlightened Sound Daemon - GPE version"
+DESCRIPTION = "Enlightened Sound Daemon"
SECTION = "gpe/base"
LICENSE = "GPL"
DEPENDS = "audiofile"
+PE = "1"
+PR = "r2"
inherit gnome binconfig
-SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/esound/0.2/esound-0.2.36.tar.bz2"
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/esound/0.2/esound-0.2.36.tar.bz2 \
+ file://no-docs.patch;patch=1"
EXTRA_OECONF = " \
- --disable-alsa \
- --disable-arts \
- --disable-artstest \
- "
+ --disable-alsa \
+ --disable-arts \
+ --disable-artstest \
+"
do_configure_prepend() {
sed -i -e 's:/usr/include/mme:${STAGING_INCDIR}/mme:g' configure.ac
}
diff --git a/packages/gcc/gcc-4.2-20060513/.mtn2git_empty b/packages/esound/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gcc/gcc-4.2-20060513/.mtn2git_empty
+++ b/packages/esound/files/.mtn2git_empty
diff --git a/packages/esound/files/no-docs.patch b/packages/esound/files/no-docs.patch
new file mode 100644
index 0000000000..fc69f1a038
--- /dev/null
+++ b/packages/esound/files/no-docs.patch
@@ -0,0 +1,11 @@
+Index: esound-0.2.36/Makefile.am
+===================================================================
+--- esound-0.2.36.orig/Makefile.am
++++ esound-0.2.36/Makefile.am
+@@ -1,5 +1,5 @@
+
+-SUBDIRS = docs
++SUBDIRS =
+
+ ACLOCAL_FLAGS = -I m4
+
diff --git a/packages/esound/old/esound-gpe_20020817.bb b/packages/esound/old/esound-gpe_20020817.bb
deleted file mode 100644
index a698211f7d..0000000000
--- a/packages/esound/old/esound-gpe_20020817.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-DESCRIPTION = "Enlightened Sound Daemon - GPE version"
-SECTION = "gpe/base"
-LICENSE = "GPL"
-DEPENDS = "audiofile"
-PR = "r5"
-PROVIDES += "esound"
-RPROVIDES += "esound"
-
-SRCDATE := "${PV}"
-SRC_URI = "svn://projects.linuxtogo.org/svn/gpe/trunk/base/;module=esound;date=20061119 \
- file://audiofile-please.patch;patch=1 \
- file://configure.patch;patch=1"
-
-S = "${WORKDIR}/esound"
-
-inherit autotools binconfig pkgconfig
-
-EXTRA_OECONF = "--disable-alsa"
-
-SOV = "0.2.28"
-PV = "${SOV}+cvs${SRCDATE}"
-
-
-do_stage () {
- install -m 0644 esd.h ${STAGING_INCDIR}/esd.h
- oe_soinstall .libs/libesd.so.${SOV} ${STAGING_LIBDIR}
- install -m 0644 .libs/libesd.lai ${STAGING_LIBDIR}/libesd.la
- install -m 0644 esd.m4 ${STAGING_DATADIR}/aclocal
-}
-
-PACKAGES =+ "esddsp esd esd-utils"
-
-FILES_esddsp = "${bindir}/esddsp ${libdir}/libesddsp.so.*"
-FILES_esd = "${bindir}/esd"
-FILES_esd-utils = "${bindir}/*"
diff --git a/packages/esound/old/esound-gpe_20070109.bb b/packages/esound/old/esound-gpe_20070109.bb
deleted file mode 100644
index 850def76a0..0000000000
--- a/packages/esound/old/esound-gpe_20070109.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-DESCRIPTION = "Enlightened Sound Daemon - GPE version"
-SECTION = "gpe/base"
-LICENSE = "GPL"
-DEPENDS = "audiofile"
-PR = "r0"
-PROVIDES += "esound"
-RPROVIDES += "esound"
-
-SRCDATE = "${PV}"
-SRC_URI = "svn://projects.linuxtogo.org/svn/gpe/trunk/;module=extra/esound;rev=8935 \
- file://audiofile-please.patch;patch=1 \
- file://configure.patch;patch=1"
-
-S = "${WORKDIR}/esound"
-
-inherit autotools binconfig pkgconfig
-
-EXTRA_OECONF = "--disable-alsa"
-
-SOV = "0.2.28"
-PV = "${SOV}+cvs${SRCDATE}"
-
-do_stage () {
- install -m 0644 esd.h ${STAGING_INCDIR}/esd.h
- oe_soinstall .libs/libesd.so.${SOV} ${STAGING_LIBDIR}
- install -m 0644 .libs/libesd.lai ${STAGING_LIBDIR}/libesd.la
- install -m 0644 esd.m4 ${STAGING_DATADIR}/aclocal
-}
-
-PACKAGES =+ "esddsp esd esd-utils"
-
-FILES_esddsp = "${bindir}/esddsp ${libdir}/libesddsp.so.*"
-FILES_esd = "${bindir}/esd"
-FILES_esd-utils = "${bindir}/*"
diff --git a/packages/ethtool/ethtool_5.bb b/packages/ethtool/ethtool_5.bb
new file mode 100644
index 0000000000..c1d30c678d
--- /dev/null
+++ b/packages/ethtool/ethtool_5.bb
@@ -0,0 +1,2 @@
+require ethtool.inc
+PR="r0"
diff --git a/packages/evince/evince/no-help-dir.patch b/packages/evince/evince/no-help-dir.patch
new file mode 100644
index 0000000000..b242b65f76
--- /dev/null
+++ b/packages/evince/evince/no-help-dir.patch
@@ -0,0 +1,12 @@
+Index: evince-0.9.0/Makefile.am
+===================================================================
+--- evince-0.9.0.orig/Makefile.am 2007-05-30 21:17:51.000000000 +0100
++++ evince-0.9.0/Makefile.am 2007-05-30 21:17:58.000000000 +0100
+@@ -6,7 +6,6 @@
+ properties \
+ shell \
+ po \
+- help \
+ test
+
+ if ENABLE_THUMBNAILER
diff --git a/packages/evince/evince/no-icon-theme.diff b/packages/evince/evince/no-icon-theme.diff
new file mode 100644
index 0000000000..7b7771ba06
--- /dev/null
+++ b/packages/evince/evince/no-icon-theme.diff
@@ -0,0 +1,13 @@
+Index: configure.ac
+===================================================================
+--- configure.ac (revision 2436)
++++ configure.ac (working copy)
+@@ -57,7 +57,7 @@
+ PKG_CHECK_MODULES(LIB, gtk+-2.0 >= $GTK_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED)
+ PKG_CHECK_MODULES(BACKEND, gtk+-2.0 >= $GTK_REQUIRED gnome-vfs-2.0)
+ PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 gnome-vfs-2.0)
+-PKG_CHECK_MODULES(SHELL_CORE, libxml-2.0 >= $LIBXML_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED gnome-vfs-2.0 libglade-2.0 gconf-2.0 gnome-keyring-1 >= $KEYRING_REQUIRED)
++PKG_CHECK_MODULES(SHELL_CORE, libxml-2.0 >= $LIBXML_REQUIRED gtk+-2.0 >= $GTK_REQUIRED gnome-vfs-2.0 libglade-2.0 gconf-2.0 gnome-keyring-1 >= $KEYRING_REQUIRED)
+
+ AC_ARG_WITH(libgnome,
+ AC_HELP_STRING([--without-libgnome],[disable the use of libgnome]),
diff --git a/packages/evince/evince_0.9.0.bb b/packages/evince/evince_0.9.0.bb
new file mode 100644
index 0000000000..64e2e41275
--- /dev/null
+++ b/packages/evince/evince_0.9.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Evince is a document viewer for document formats like pdf, ps, djvu."
+LICENSE = "GPL"
+SECTION = "x11/office"
+DEPENDS = "tiff libxt espgs gnome-doc-utils poppler libxml2 gtk+ gnome-vfs gconf libglade gnome-keyring "
+RDEPENDS = "espgs "
+RRECOMMENDS = "gnome-vfs-plugin-file"
+PR = "r1"
+
+inherit gnome pkgconfig gtk-icon-cache
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/evince/0.9/${PN}-${PV}.tar.bz2 \
+ file://no-icon-theme.diff;patch=1;pnum=0 \
+ file://no-help-dir.patch;patch=1"
+
+EXTRA_OECONF = "--without-libgnome --disable-thumbnailer --disable-scrollkeeper"
+
diff --git a/packages/evince/evince_0.9.2.bb b/packages/evince/evince_0.9.2.bb
new file mode 100644
index 0000000000..64e2e41275
--- /dev/null
+++ b/packages/evince/evince_0.9.2.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Evince is a document viewer for document formats like pdf, ps, djvu."
+LICENSE = "GPL"
+SECTION = "x11/office"
+DEPENDS = "tiff libxt espgs gnome-doc-utils poppler libxml2 gtk+ gnome-vfs gconf libglade gnome-keyring "
+RDEPENDS = "espgs "
+RRECOMMENDS = "gnome-vfs-plugin-file"
+PR = "r1"
+
+inherit gnome pkgconfig gtk-icon-cache
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/evince/0.9/${PN}-${PV}.tar.bz2 \
+ file://no-icon-theme.diff;patch=1;pnum=0 \
+ file://no-help-dir.patch;patch=1"
+
+EXTRA_OECONF = "--without-libgnome --disable-thumbnailer --disable-scrollkeeper"
+
diff --git a/packages/glib-2.0/glib-2.0-2.12.0/.mtn2git_empty b/packages/exmap-console/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/glib-2.0/glib-2.0-2.12.0/.mtn2git_empty
+++ b/packages/exmap-console/.mtn2git_empty
diff --git a/packages/exmap-console/exmap-console.inc b/packages/exmap-console/exmap-console.inc
new file mode 100644
index 0000000000..6744aed49f
--- /dev/null
+++ b/packages/exmap-console/exmap-console.inc
@@ -0,0 +1,61 @@
+DESCRIPTION = "Console based version of exmap, a memory usage analysis tool"
+HOMEPAGE = "http://projects.o-hand.com/exmap-console"
+SECTION = "devel"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel readline"
+
+SRC_URI = "http://projects.o-hand.com/sources/exmap-console/exmap-console-${PV}.tgz"
+
+TEMPPACKAGE_ARCH := "${PACKAGE_ARCH}"
+
+inherit module-base
+inherit autotools
+
+MYPV := "${PV}"
+PACKAGE_ARCH = "${TEMPPACKAGE_ARCH}"
+
+PACKAGES =+ "exmap-server kernel-module-exmap"
+
+FILES_exmap-console = "${bindir}/exmap ${bindir}/exmapd"
+RDEPENDS_exmap-console += "kernel-module-exmap"
+
+FILES_exmap-server = "${bindir}/exmapserver"
+RDEPENDS_exmap-server += "kernel-module-exmap"
+
+FILES_kernel-module-exmap = "${base_libdir}"
+PACKAGE_ARCH_kernel-module-exmap = "${MACHINE_ARCH}"
+PV_kernel-module-exmap = "${MYPV}-${KERNEL_VERSION}"
+RDEPENDS_kernel-module-exmap += "update-modules kernel-image-${KERNEL_VERSION}"
+
+S = "${WORKDIR}/exmap-console-${PV}"
+
+export MODULE_PATH="${D}${base_libdir}/modules/${KERNEL_VERSION}"
+
+do_compile() {
+ cd ${S}/src
+ make
+
+ cd ${S}/kernel
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
+ KERNEL_SRC=${STAGING_KERNEL_DIR} \
+ KERNEL_VERSION=${KERNEL_VERSION} \
+ CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+ ${MAKE_TARGETS}
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' 'DEPMOD=/bin/true' install
+}
+
+pkg_postinst_append_kernel-module-exmap () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ depmod -a
+ update-modules || true
+}
+
+pkg_postrm_append_kernel-module-exmap () {
+ update-modules || true
+}
diff --git a/packages/exmap-console/exmap-console_0.4.1.bb b/packages/exmap-console/exmap-console_0.4.1.bb
new file mode 100644
index 0000000000..17703321e8
--- /dev/null
+++ b/packages/exmap-console/exmap-console_0.4.1.bb
@@ -0,0 +1,3 @@
+require exmap-console.inc
+
+PR = "r4"
diff --git a/packages/exmap-console/exmap-console_svn.bb b/packages/exmap-console/exmap-console_svn.bb
new file mode 100644
index 0000000000..7c21222d84
--- /dev/null
+++ b/packages/exmap-console/exmap-console_svn.bb
@@ -0,0 +1,11 @@
+require exmap-console.inc
+
+PV = "0.4+svn${SRCDATE}"
+PR = "r14"
+
+SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=exmap-console;proto=http"
+
+S = "${WORKDIR}/exmap-console"
+
+MYPV := "${PV}"
+PV_kernel-module-exmap = "${MYPV}-${KERNEL_VERSION}"
diff --git a/packages/familiar/familiar-version.bb b/packages/familiar/familiar-version.bb
deleted file mode 100644
index 98048605f4..0000000000
--- a/packages/familiar/familiar-version.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-PV = "${DISTRO_VERSION}"
-
-do_compile() {
- mkdir -p ${D}${sysconfdir}
- echo "Familiar ${DISTRO_VERSION}" > ${D}${sysconfdir}/familiar-version
-
-}
diff --git a/packages/fbgrab/fbgrab-viewer-native_1.0.bb b/packages/fbgrab/fbgrab-viewer-native_1.0.bb
new file mode 100644
index 0000000000..2494918c31
--- /dev/null
+++ b/packages/fbgrab/fbgrab-viewer-native_1.0.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "Viewer for a network enabled fbgrab"
+HOMEPAGE = "http://svn.openezx.org/trunk/src/userspace/fbgrab/"
+LICENSE = "GPL"
+SECTION = "console/network"
+DEPENDS = "libpng-native"
+PV = "0.0+svn${SRCDATE}"
+PR = "r30"
+
+SRC_URI = "svn://svn.openezx.org/trunk/src/userspace;module=fbgrab;proto=http"
+S = "${WORKDIR}/fbgrab"
+
+inherit native
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -g -Wall -lpng -lX11 -o fbgrab-viewer fbgrab-viewer.c
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 fbgrab-viewer ${DEPLOY_DIR_IMAGE}/fbgrab-viewer
+}
+
+do_stage() {
+ :
+}
+
+do_install() {
+ :
+}
+
+addtask deploy before do_install after do_compile
diff --git a/packages/glib-2.0/glib-2.0-2.12.1/.mtn2git_empty b/packages/fbreader/fbreader-0.8.2a/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/glib-2.0/glib-2.0-2.12.1/.mtn2git_empty
+++ b/packages/fbreader/fbreader-0.8.2a/.mtn2git_empty
diff --git a/packages/fbreader/fbreader-0.8.2a/480x640-buildfix.patch b/packages/fbreader/fbreader-0.8.2a/480x640-buildfix.patch
new file mode 100644
index 0000000000..fba1f614db
--- /dev/null
+++ b/packages/fbreader/fbreader-0.8.2a/480x640-buildfix.patch
@@ -0,0 +1,44 @@
+diff -Nurd fbreader-0.7.4q.orig/fbreader/data/default/styles.gpe480x640.xml fbreader-0.7.4q/fbreader/data/default/styles.gpe480x640.xml
+--- fbreader-0.7.4q.orig/fbreader/data/default/styles.gpe480x640.xml 1970-01-01 00:00:00.000000000 +0000
++++ fbreader-0.7.4q/fbreader/data/default/styles.gpe480x640.xml 2007-04-24 00:02:38.000000000 +0000
+@@ -0,0 +1,40 @@
++<DefaultStyles>
++ <base family="Sans" fontSize="16"/>
++ <style id="0" name="Regular Paragraph" firstLineIndentDelta="15" allowHyphenations="true"/>
++ <style id="1" name="Title" fontSizeDelta="10" bold="true" spaceBefore="2" spaceAfter="7" alignment="center" allowHyphenations="false"/>
++ <style id="3" name="Poem Title" fontSizeDelta="2" bold="true" spaceBefore="6" spaceAfter="6" leftIndent="40" allowHyphenations="false"/>
++ <style id="2" name="Section Title" fontSizeDelta="6" bold="true" spaceAfter="5" alignment="center" allowHyphenations="false"/>
++ <style id="31" name="Header 1" fontSizeDelta="6" bold="true" spaceAfter="5" alignment="center" allowHyphenations="false"/>
++ <style id="32" name="Header 2" fontSizeDelta="6" bold="true" spaceAfter="5" alignment="center" allowHyphenations="false"/>
++ <style id="5" name="Annotation" fontSizeDelta="-2" firstLineIndentDelta="15" allowHyphenations="true"/>
++ <style id="6" name="Epigraph" fontSizeDelta="-2" italic="true" leftIndent="80" allowHyphenations="true"/>
++ <style id="4" name="Subtitle" bold="true" allowHyphenations="true"/>
++ <style id="33" name="Header 3" bold="true" allowHyphenations="true"/>
++ <style id="34" name="Header 4" bold="true" allowHyphenations="true"/>
++ <style id="13" name="Author" leftIndent="20" allowHyphenations="false"/>
++ <style id="14" name="Date" leftIndent="40" allowHyphenations="false"/>
++ <style id="7" name="Stanza" spaceBefore="6" spaceAfter="6" alignment="left" allowHyphenations="false"/>
++ <style id="8" name="Verse" leftIndent="20" alignment="left" allowHyphenations="false"/>
++ <style id="10" name="Image" spaceBefore="8" alignment="center"/>
++ <style id="23" name="Contents Table" spaceAfter="7" leftIndent="15" firstLineIndentDelta="-15" alignment="left"/>
++ <style id="24" name="Author in Library" fontSizeDelta="-2" alignment="left" allowHyphenations="false"/>
++ <style id="25" name="Book in Library" fontSizeDelta="-2" alignment="left" allowHyphenations="false"/>
++ <style id="26" name="Recent Book List" spaceAfter="3" leftIndent="15" firstLineIndentDelta="-15" alignment="left" lineSpacing="1.2"/>
++ <style id="9" name="Preformatted text" italic="true" alignment="left" allowHyphenations="false"/>
++
++ <style id="12" partial="true" name="Cite" italic="true"/>
++ <style id="15" partial="true" name="Hyperlink" allowHyphenations="false" isHyperlink="true"/>
++ <style id="16" partial="true" name="Footnote" fontSizeDelta="-6" vShift="10" allowHyphenations="false" isHyperlink="true"/>
++ <style id="17" partial="true" name="Emphasis" italic="true"/>
++ <style id="18" partial="true" name="Strong" bold="true"/>
++ <style id="35" name="Header 5" bold="true"/>
++ <style id="36" name="Header 6" bold="true"/>
++ <style id="19" partial="true" name="Subscript" fontSizeDelta="-4" vShift="-4" allowHyphenations="false"/>
++ <style id="20" partial="true" name="Superscript" fontSizeDelta="-4" vShift="10" allowHyphenations="false"/>
++ <style id="21" partial="true" name="Code" italic="true" allowHyphenations="false"/>
++ <style id="22" partial="true" name="StrikeThrough"/>
++ <style id="27" partial="true" name="Italic" italic="true"/>
++ <style id="28" partial="true" name="Bold" bold="true"/>
++ <style id="29" partial="true" name="Definition" italic="true"/>
++ <style id="30" partial="true" name="Definition Description" italic="true"/>
++</DefaultStyles>
diff --git a/packages/fbreader/fbreader-0.8.2a/fbreader-0.8.2a_buildsys_oe.patch b/packages/fbreader/fbreader-0.8.2a/fbreader-0.8.2a_buildsys_oe.patch
new file mode 100644
index 0000000000..858a713125
--- /dev/null
+++ b/packages/fbreader/fbreader-0.8.2a/fbreader-0.8.2a_buildsys_oe.patch
@@ -0,0 +1,50 @@
+diff -Nur fbreader-0.8.2a.orig/makefiles/arch/openzaurus.mk fbreader-0.8.2a/makefiles/arch/openzaurus.mk
+--- fbreader-0.8.2a.orig/makefiles/arch/openzaurus.mk 2007-04-17 18:53:46.000000000 +0000
++++ fbreader-0.8.2a/makefiles/arch/openzaurus.mk 2007-04-24 00:57:17.000000000 +0000
+@@ -17,7 +17,7 @@
+ RM = rm -rvf
+ RM_QUIET = rm -rf
+ QTINCLUDE = -I $(INCPATH)/qt2
+-GTKINCLUDE = -I$(LIBPATH)/glib-2.0/include -I$(LIBPATH)/gtk-2.0/include -I$(INCPATH)/glib-2.0 -I$(INCPATH)/gtk-2.0 -I$(INCPATH)/pango-1.0 -I$(INCPATH)/atk-1.0
++GTKINCLUDE = -I$(LIBPATH)/glib-2.0/include -I$(LIBPATH)/gtk-2.0/include -I$(INCPATH)/cairo -I$(INCPATH)/glib-2.0 -I$(INCPATH)/gtk-2.0 -I$(INCPATH)/pango-1.0 -I$(INCPATH)/atk-1.0
+ MOC = $(TOOLSPATH)/moc
+ CC = $(TOOLSPATH)/arm-linux-gcc
+ AR = $(TOOLSPATH)/arm-linux-ar rsu
+@@ -28,10 +28,10 @@
+ ARCHIVER_LIB = -lbz2
+
+ ifeq "$(UI_TYPE)" "opie"
+- UILIBS = -lqte -lqpe
++ UILIBS = -lqt-mt
+ else
+- UILIBS = -lgpewidget -lgtk-x11-2.0 -lgdk-x11-2.0 -lgdk_pixbuf-2.0
++ UILIBS = $(shell pkg-config --libs gtk+-2.0) -lgpewidget
+ endif
+
+-CFLAGS = -pipe -DOPIE_NO_DEBUG -DQT_NO_DEBUG -DQWS -fno-exceptions -fno-rtti -march=armv4 -mtune=xscale --param large-function-growth=2000 --param inline-unit-growth=200 -Wall -Wno-ctor-dtor-privacy -W -Winline
+-LDFLAGS = -Wl,-rpath,$(LIBDIR)
++CFLAGS = -pipe -DOPIE_NO_DEBUG -DQT_NO_DEBUG -DQWS -fno-exceptions -fno-rtti $(OE_CFLAGS)
++LDFLAGS = -Wl,-rpath,$(LIBDIR) -Wl,-rpath,$(LIBPATH)
+diff -Nur fbreader-0.8.2a.orig/makefiles/target.mk fbreader-0.8.2a/makefiles/target.mk
+--- fbreader-0.8.2a.orig/makefiles/target.mk 2007-04-17 18:53:46.000000000 +0000
++++ fbreader-0.8.2a/makefiles/target.mk 2007-04-24 00:58:30.000000000 +0000
+@@ -1,6 +1,5 @@
+-#TARGET_ARCH = openzaurus
+-#UI_TYPE = opie
+-#UI_TYPE = gpe
++TARGET_ARCH = openzaurus
++UI_TYPE = gpe
+
+ #TARGET_ARCH = opensimpad-0.9.0
+ #UI_TYPE = opie
+@@ -17,8 +16,8 @@
+ #UI_TYPE = qt
+ #UI_TYPE = qt4
+
+-TARGET_ARCH = win32
+-UI_TYPE = win32
++#TARGET_ARCH = win32
++#UI_TYPE = win32
+
+ #TARGET_ARCH = pocketpc
+ #UI_TYPE = win32
diff --git a/packages/fbreader/fbreader_0.7.4q.bb b/packages/fbreader/fbreader_0.7.4q.bb
index b209370f19..bcea83a4a1 100644
--- a/packages/fbreader/fbreader_0.7.4q.bb
+++ b/packages/fbreader/fbreader_0.7.4q.bb
@@ -3,10 +3,10 @@ LICENSE = "GPL2"
HOMEPAGE = "http://only.mawhrin.net/fbreader/"
SECTION = "x11/utils"
PRIORITY = "optional"
-DEPENDS = "gtk+ enca expat bzip2"
-PR = "r0"
+DEPENDS = "gtk+ enca expat bzip2 libgpewidget"
+PR = "r1"
-SRC_URI = "http://only.mawhrin.net/fbreader/fbreader-sources-${PV}.tgz \
+SRC_URI = "http://only.mawhrin.net/fbreader/obsolete/fbreader-sources-${PV}.tgz \
file://fbreader-0.7.4q_buildsys_oe.patch;patch=1"
FILES_${PN} += "${datadir}/FBReader ${datadir}/zlibrary"
diff --git a/packages/fbreader/fbreader_0.8.2a.bb b/packages/fbreader/fbreader_0.8.2a.bb
new file mode 100644
index 0000000000..2419ccf4ae
--- /dev/null
+++ b/packages/fbreader/fbreader_0.8.2a.bb
@@ -0,0 +1,58 @@
+DESCRIPTION = "FBreader is an ebook reader"
+LICENSE = "GPL2"
+HOMEPAGE = "http://only.mawhrin.net/fbreader/"
+SECTION = "x11/utils"
+PRIORITY = "optional"
+DEPENDS = "gtk+ enca expat bzip2 libgpewidget"
+PR = "r4"
+
+# The RESOLUTION is defined at compile time which makes
+# this package MACHINE specific.
+PACKAGE_ARCH_${PN} = "${MACHINE_ARCH}"
+
+SRC_URI = "http://only.mawhrin.net/fbreader/fbreader-sources-${PV}.tgz \
+ file://fbreader-0.8.2a_buildsys_oe.patch;patch=1 \
+ file://480x640-buildfix.patch;patch=1"
+
+SRC_URI_append_spitz = "\
+ file://zaurus-VGA.patch;patch=1"
+
+SRC_URI_append_akita = "\
+ file://zaurus-VGA.patch;patch=1"
+
+# Set the defaults
+READER_RESOLUTION = "240x320"
+READER_ARCH = "openzaurus"
+READER_GUI = "gpe"
+READER_STATUS = "release"
+
+# Set device specific overrides
+READER_RESOLUTION_fic-gta01 = "480x640"
+READER_RESOLUTION_spitz = "640x480"
+READER_RESOLUTION_akita = "640x480"
+
+FILES_${PN} += "${datadir}/FBReader ${datadir}/zlibrary"
+
+CFLAGS_append = " RESOLUTION=${READER_RESOLUTION} INSTALLDIR=/usr"
+EXTRA_OEMAKE = "CC='${CXX}' LD='${CXX}' OE_CFLAGS='${CXXFLAGS}' INCPATH='${STAGING_INCDIR}' LIBPATH='${STAGING_LIBDIR}'"
+
+inherit pkgconfig
+
+do_configure() {
+ cd ${WORKDIR}/${PN}-${PV}
+ mv makefiles/target.mk makefiles/target.mk.orig
+
+ echo "TARGET_ARCH = ${READER_ARCH}" > makefiles/target.mk
+ echo "UI_TYPE = ${READER_GUI}" >> makefiles/target.mk
+ echo "TARGET_STATUS = ${READER_STATUS}" >> makefiles/target.mk
+
+ cd fbreader/data/help
+
+ # FIXME: Add native _480x640 file with propper linebreaks
+ ln -s MiniHelp.240x320.fb2 MiniHelp.openzaurus_480x640.fb2
+}
+
+do_install () {
+ cd fbreader/${READER_ARCH}; oe_runmake .builddir RESOLUTION=${READER_RESOLUTION}
+ cp -r data/* ${D}
+}
diff --git a/packages/fbreader/files/zaurus-VGA.patch b/packages/fbreader/files/zaurus-VGA.patch
new file mode 100644
index 0000000000..5ba7d91b9d
--- /dev/null
+++ b/packages/fbreader/files/zaurus-VGA.patch
@@ -0,0 +1,13 @@
+--- fbreader-0.8.2a/fbreader/data/default/styles.gpe640x480.xml.orig 2007-06-24 23:55:56.000000000 +0000
++++ fbreader-0.8.2a/fbreader/data/default/styles.gpe640x480.xml 2007-06-24 23:56:22.000000000 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <DefaultStyles>
+- <base family="Sans" fontSize="16"/>
++ <base family="Sans" fontSize="8"/>
+ <style id="0" name="Regular Paragraph" firstLineIndentDelta="22" allowHyphenations="true"/>
+- <style id="1" name="Title" fontSizeDelta="10" bold="true" spaceBefore="2" spaceAfter="7" alignment="center" allowHyphenations="false"/>
++ <style id="1" name="Title" fontSizeDelta="5" bold="true" spaceBefore="2" spaceAfter="7" alignment="center" allowHyphenations="false"/>
+ <style id="3" name="Poem Title" fontSizeDelta="2" bold="true" spaceBefore="6" spaceAfter="6" leftIndent="40" allowHyphenations="false"/>
+ <style id="2" name="Section Title" fontSizeDelta="6" bold="true" spaceAfter="5" alignment="center" allowHyphenations="false"/>
+ <style id="31" name="Header 1" fontSizeDelta="6" bold="true" spaceAfter="5" alignment="center" allowHyphenations="false"/>
diff --git a/packages/ffmpeg/ffmpeg_svn.bb b/packages/ffmpeg/ffmpeg_svn.bb
index 4098d721f9..b8bd365d51 100644
--- a/packages/ffmpeg/ffmpeg_svn.bb
+++ b/packages/ffmpeg/ffmpeg_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "ffmpeg"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "zlib libvorbis faac liba52 lame"
+DEPENDS = "libogg zlib libvorbis faac liba52 lame"
PV = "0.4.9+svn${SRCDATE}"
DEFAULT_PREFERENCE = "-1"
@@ -11,17 +11,18 @@ SRC_URI = "svn://svn.mplayerhq.hu/ffmpeg/;module=trunk"
S = "${WORKDIR}/trunk"
-inherit autotools
+inherit autotools pkgconfig
TARGET_LDFLAGS_append = " -lm -la52 "
EXTRA_OECONF = " \
- --enable-mp3lame \
- --enable-vorbis \
- --enable-faad \
- --enable-a52 \
- --enable-a52bin \
- --enable-pp \
+ --enable-libmp3lame \
+ --enable-libvorbis \
+ --disable-libfaad \
+ --enable-liba52 \
+ --enable-liba52bin \
+ --enable-libogg \
+ --enable-pp \
--enable-shared \
--enable-pthreads \
--enable-gpl \
@@ -32,10 +33,12 @@ EXTRA_OECONF = " \
--disable-debug \
--disable-ffserver \
--disable-ffplay \
+ --disable-strip \
\
--cross-prefix=${TARGET_PREFIX} \
\
--cpu=${PACKAGE_ARCH} \
+ --arch=${PACKAGE_ARCH} \
"
@@ -48,6 +51,8 @@ do_configure_prepend() {
}
oe_runconf () {
+ # make ffmpeg detect arm targets that don't end in 'l'
+ sed -i -e s:'armv\[4567\]\*l':'armv\[4567\]\*':g ${S}/configure
if [ -x ${S}/configure ] ; then
cfgcmd="${S}/configure \
--prefix=${prefix} \
diff --git a/packages/fftw/benchfft_3.1.bb b/packages/fftw/benchfft_3.1.bb
new file mode 100644
index 0000000000..8d2d8b7f34
--- /dev/null
+++ b/packages/fftw/benchfft_3.1.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "FFTW benchmarks"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+
+SRC_URI = "http://www.fftw.org/benchfft/benchfft-${PV}.tar.gz"
+
+EXTRA_OECONF = "--disable-fortran --enable-single --enable-shared"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/packages/fftw/fftw.inc b/packages/fftw/fftw.inc
new file mode 100644
index 0000000000..88c946b1d4
--- /dev/null
+++ b/packages/fftw/fftw.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "FFTW"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+PR = "r1"
+
+SRC_URI = "http://www.fftw.org/fftw-${PV}.tar.gz"
+
+S = "${WORKDIR}/fftw-${PV}"
+
+inherit autotools pkgconfig
+
+do_configure_prepend() {
+ echo 'AM_PROG_AS' >> ${S}/configure.ac
+}
+
+do_stage () {
+ autotools_stage_all
+}
+
+
+PACKAGES =+ "lib${PN}"
+
+FILES_lib${PN} = "${libdir}/lib*.so.*"
+
+# rename binary in /bin and use u-a tpo choose between different precision implementations?
diff --git a/packages/fftw/fftw_3.1.2.bb b/packages/fftw/fftw_3.1.2.bb
index 58603ef24c..bb58aac8e1 100644
--- a/packages/fftw/fftw_3.1.2.bb
+++ b/packages/fftw/fftw_3.1.2.bb
@@ -1,15 +1,5 @@
-DESCRIPTION = "FFTW"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "GPL"
+require fftw.inc
-SRC_URI = "http://www.fftw.org/fftw-${PV}.tar.gz"
+EXTRA_OECONF = "--disable-fortran --enable-shared"
-EXTRA_OECONF = "--disable-fortran --enable-single --enable-shared"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/fftw/fftwf_3.1.2.bb b/packages/fftw/fftwf_3.1.2.bb
new file mode 100644
index 0000000000..a0bba2c968
--- /dev/null
+++ b/packages/fftw/fftwf_3.1.2.bb
@@ -0,0 +1,4 @@
+require fftw.inc
+
+EXTRA_OECONF = "--disable-fortran --enable-single --enable-shared"
+
diff --git a/packages/fftw/fftwl_3.1.2.bb b/packages/fftw/fftwl_3.1.2.bb
new file mode 100644
index 0000000000..9097d5f1bc
--- /dev/null
+++ b/packages/fftw/fftwl_3.1.2.bb
@@ -0,0 +1,5 @@
+require fftw.inc
+
+EXTRA_OECONF = "--disable-fortran --enable-long-double --enable-shared"
+
+
diff --git a/packages/file/file-native_4.20.bb b/packages/file/file-native_4.20.bb
deleted file mode 100644
index b797cff8ad..0000000000
--- a/packages/file/file-native_4.20.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require file_${PV}.bb
-inherit native
-
-# avoid dependency loop
-DEPENDS = ""
-PR = "r0"
-
-SRC_URI += "file://native-fix.diff;patch=1"
diff --git a/packages/file/file-native_4.21.bb b/packages/file/file-native_4.21.bb
new file mode 100644
index 0000000000..734891d18d
--- /dev/null
+++ b/packages/file/file-native_4.21.bb
@@ -0,0 +1,6 @@
+require file_${PV}.bb
+inherit native
+DEPENDS = "zlib-native"
+PR = "r0"
+
+SRC_URI += "file://native-fix.diff;patch=1"
diff --git a/packages/file/file_4.20.bb b/packages/file/file_4.20.bb
deleted file mode 100644
index 2b37d2515c..0000000000
--- a/packages/file/file_4.20.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "File attempts to classify files depending \
-on their contents and prints a description if a match is found."
-SECTION = "console/utils"
-LICENSE = "BSD-ADV"
-DEPENDS = "file-native"
-
-SRC_URI = "ftp://ftp.astron.com/pub/file/file-${PV}.tar.gz"
-S = "${WORKDIR}/file-${PV}"
-
-inherit autotools
-
-do_configure_prepend() {
- sed -i -e 's,$(top_builddir)/src/file,file,' ${S}/magic/Makefile.am
-}
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/file/file_4.21.bb b/packages/file/file_4.21.bb
new file mode 100644
index 0000000000..758f7f36fa
--- /dev/null
+++ b/packages/file/file_4.21.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "File attempts to classify files depending \
+on their contents and prints a description if a match is found."
+SECTION = "console/utils"
+LICENSE = "BSD-ADV"
+DEPENDS = "file-native"
+
+SRC_URI = "ftp://ftp.fi.debian.org/pub/gentoo/distfiles/file-${PV}.tar.gz"
+S = "${WORKDIR}/file-${PV}"
+
+inherit autotools
+
+do_configure_prepend() {
+ sed -i -e 's,$(top_builddir)/src/file,file,' ${S}/magic/Makefile.am
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/fltk/fltk_1.1.4.bb b/packages/fltk/fltk_1.1.4.bb
index 39e3279a4f..66c4b214ec 100644
--- a/packages/fltk/fltk_1.1.4.bb
+++ b/packages/fltk/fltk_1.1.4.bb
@@ -4,8 +4,7 @@ SECTION = "libs"
PRIORITY = "optional"
LICENSE = "LGPL"
DEPENDS = "jpeg libpng mesa zlib"
-
-PR = "FLDevice-r0"
+PR = "r1"
SRC_URI = "ftp://ftp-fourier.ujf-grenoble.fr/xcas/devel/sources/fltk-${PV}-device.tar.gz"
diff --git a/packages/fltk/fltk_1.1.7.bb b/packages/fltk/fltk_1.1.7.bb
index dca48837a8..3e095b45a3 100644
--- a/packages/fltk/fltk_1.1.7.bb
+++ b/packages/fltk/fltk_1.1.7.bb
@@ -3,9 +3,8 @@ HOMEPAGE = "http://www.fltk.org"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "LGPL"
-PR= "r1"
-
DEPENDS = "zlib jpeg libpng libxext libxft"
+PR = "r2"
SRC_URI = "ftp://ftp.rz.tu-bs.de/pub/mirror/ftp.easysw.com/ftp/pub/fltk/${PV}/fltk-${PV}-source.tar.bz2"
diff --git a/packages/glib-2.0/glib-2.0-2.12.3/.mtn2git_empty b/packages/flumotion/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/glib-2.0/glib-2.0-2.12.3/.mtn2git_empty
+++ b/packages/flumotion/.mtn2git_empty
diff --git a/packages/gnupg/gnupg-1.4.0/.mtn2git_empty b/packages/flumotion/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gnupg/gnupg-1.4.0/.mtn2git_empty
+++ b/packages/flumotion/files/.mtn2git_empty
diff --git a/packages/flumotion/files/no-check-for-python-stuff.patch b/packages/flumotion/files/no-check-for-python-stuff.patch
new file mode 100644
index 0000000000..08503c82e0
--- /dev/null
+++ b/packages/flumotion/files/no-check-for-python-stuff.patch
@@ -0,0 +1,68 @@
+Index: flumotion-0.4.1/configure.ac
+===================================================================
+--- flumotion-0.4.1.orig/configure.ac 2007-03-05 17:16:48.121264330 +0100
++++ flumotion-0.4.1/configure.ac 2007-03-05 17:20:40.343837320 +0100
+@@ -73,13 +73,6 @@
+ AC_MSG_ERROR([PyGTK 2.5.2 contains known bugs, please install other version])
+ fi
+
+-if test "x$DISPLAY" != "x"; then
+- AS_PYTHON_IMPORT([gtk.glade],,
+- AC_MSG_ERROR([You need to have python libglade bindings installed]))
+-else
+- AC_MSG_NOTICE([Not trying to import gtk.glade because DISPLAY is unset])
+-fi
+-
+ if test $GST_010_SUPPORTED = "no"; then
+ AC_MSG_ERROR([No appropriate version of PyGTK installed. Correct the above
+ errors and try again.])
+@@ -94,16 +87,6 @@
+ [AC_MSG_RESULT([$PYGST_010_PKG_ERRORS])
+ GST_010_SUPPORTED=no])
+
+- if test $GST_010_SUPPORTED = "yes"; then
+- saved_PYTHONPATH=$PYTHONPATH
+- export PYTHONPATH=$PYGST_010_DIR:$PYTHONPATH
+- AS_PYTHON_IMPORT([gst],,
+- [AC_MSG_NOTICE([Unable to import gst-python 0.10 -- check your PYTHONPATH?])
+- GST_010_SUPPORTED=no],
+- [import pygst; pygst.require('0.10')],
+- [assert gst.pygst_version[[1]] == 10 or (gst.pygst_version[[1]] == 9 and gst.pygst_version[[2]] >= 7)])
+-
+- fi
+ fi
+
+ if test $GST_010_SUPPORTED = "no"; then
+@@ -158,32 +141,7 @@
+ AC_CHECK_PROG(PYCHECKER, pychecker, yes, no)
+ AM_CONDITIONAL(HAVE_PYCHECKER, test "x$PYCHECKER" = "xyes")
+
+-dnl check for Twisted
+-AS_PYTHON_IMPORT(twisted,
+- [
+- AC_MSG_CHECKING(for Twisted >= 2.0.1)
+- prog="
+-import sys
+-import twisted.copyright
+-minver = '2.0.1'
+-if twisted.copyright.version < minver:
+- sys.exit(1)
+-sys.exit(0)
+-"
+- if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+- then
+- AC_MSG_RESULT(found)
+- else
+- AC_MSG_RESULT(too old)
+- AC_MSG_ERROR([You need at least version 2.0.1 of Twisted])
+- fi
+- ]
+- ,
+- AC_MSG_ERROR([You need at least version 2.0.1 of Twisted])
+-)
+
+-TWISTED_MODULE([twisted.names])
+-TWISTED_MODULE([twisted.web])
+
+ AC_CONFIG_FILES([env], [chmod +x env])
+ AC_CONFIG_FILES([bin/flumotion], [chmod +x bin/flumotion])
diff --git a/packages/flumotion/files/python-path.patch b/packages/flumotion/files/python-path.patch
new file mode 100644
index 0000000000..377994e729
--- /dev/null
+++ b/packages/flumotion/files/python-path.patch
@@ -0,0 +1,25 @@
+Index: flumotion-0.3.1/common/as-python.m4
+===================================================================
+--- flumotion-0.3.1.orig/common/as-python.m4 2007-03-02 15:26:46.704717964 +0100
++++ flumotion-0.3.1/common/as-python.m4 2007-03-02 15:27:28.601326374 +0100
+@@ -199,6 +199,12 @@
+ AC_MSG_CHECKING(for headers required to compile python extensions)
+
+ dnl deduce PYTHON_INCLUDES
++
++ AC_ARG_WITH(python-includes,
++ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
++ if test x$py_exec_prefix != x; then
++ PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
++ else
+ py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+ py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+@@ -206,6 +212,7 @@
+ if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+ fi
++ fi
+ AC_SUBST(PYTHON_INCLUDES)
+
+ dnl check if the headers exist:
diff --git a/packages/flumotion/flumotion_0.4.1.bb b/packages/flumotion/flumotion_0.4.1.bb
new file mode 100644
index 0000000000..aad4eb3382
--- /dev/null
+++ b/packages/flumotion/flumotion_0.4.1.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Fluendo Streaming Server"
+LICENSE = "GPL"
+DEPENDS = "gstreamer python-imaging python-gst twisted python-pygtk2"
+RDEPENDS = " python-resource python-pprint python-threading python-imaging python-xml python-curses python-compression python-fcntl python-pygobject python-pickle python-netclient python-datetime python-crypt python-twisted-core python-twisted-web python-lang python-zopeinterface python-textutils python-core python-gst python-misc"
+RDEPENDS_${PN}-gui = "${PN} python-pygtk2 python-pycairo "
+PR = "r7"
+
+SRC_URI = "http://www.flumotion.net/src/flumotion/flumotion-${PV}.tar.bz2 \
+ file://python-path.patch;patch=1 \
+ file://no-check-for-python-stuff.patch;patch=1"
+
+inherit autotools distutils-base pkgconfig
+
+export EPYDOC = "no"
+
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+
+#Yes, we know:
+#ERROR: flumotion-dbg is listed in PACKAGES mutliple times, this leads to packaging errors.
+#ERROR: Please fix the metadata/report this as bug to OE bugtracker.
+
+PACKAGES =+ "${PN}-dbg flumotion-gui"
+
+FILES_${PN}-dbg += "${libdir}/flumotion/python/flumotion/extern/*/.debug/*"
+FILES_${PN} = "${bindir} ${sbindir} ${libdir}/flumotion"
+FILES_${PN}-dev += "${libdir}/pkgconfig"
+FILES_${PN}-gui = "${bindir}/flumotion-admin ${bindir}/flumotion-tester \
+ ${libdir}/flumotion/python/flumotion/admin/gtk \
+ ${libdir}/flumotion/python/flumotion/component/*/admin_gtk* \
+ ${libdir}/flumotion/python/flumotion/component/*/*/admin_gtk* \
+ ${libdir}/flumotion/python/flumotion/extern \
+ ${libdir}/flumotion/python/flumotion/manager \
+ ${libdir}/flumotion/python/flumotion/ui \
+ ${libdir}/flumotion/python/flumotion/wizard \
+ ${datadir}/pixmaps ${datadir}/flumotion ${datadir}/applications"
diff --git a/packages/fluxbox/fluxbox_0.99+1.0rc.bb b/packages/fluxbox/fluxbox_0.99+1.0rc.bb
index 3f271a57a4..68eeeb04b8 100644
--- a/packages/fluxbox/fluxbox_0.99+1.0rc.bb
+++ b/packages/fluxbox/fluxbox_0.99+1.0rc.bb
@@ -9,7 +9,7 @@ DESCRIPTION = "The Fluxbox WindowManager"
HOMEPAGE = "http://fluxbox.sourceforge.net"
LICENSE = "MIT"
REALPV = "1.0rc"
-PR = "r4"
+PR = "r5"
######################################################################################
@@ -29,7 +29,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/fluxbox/fluxbox-${REALPV}.tar.gz \
######################################################################################
-PACKAGES = "${PN}-gpe ${PN}-styles ${PN}-doc ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-gpe ${PN}-styles ${PN}-doc ${PN}"
DESCRIPTION_${PN}-styles = "The default styles for fluxbox"
DESCRIPTION_${PN}-gpe = "The Fluxbox WindowManager for use with GPE"
diff --git a/packages/fluxbox/fluxbox_svn.bb b/packages/fluxbox/fluxbox_svn.bb
index ffaa7da5b4..1034c386c4 100644
--- a/packages/fluxbox/fluxbox_svn.bb
+++ b/packages/fluxbox/fluxbox_svn.bb
@@ -10,7 +10,7 @@ HOMEPAGE = "http://fluxbox.sourceforge.net"
LICENSE = "MIT"
PV = "1.0+svn${SRCDATE}"
-PR = "r2"
+PR = "r3"
######################################################################################
@@ -30,7 +30,7 @@ SRC_URI = "svn://svn.berlios.de/fluxbox;module=trunk \
######################################################################################
-PACKAGES = "${PN}-gpe ${PN}-styles ${PN}-doc ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-gpe ${PN}-styles ${PN}-doc ${PN}"
DESCRIPTION_${PN}-styles = "The default styles for fluxbox"
DESCRIPTION_${PN}-gpe = "The Fluxbox WindowManager for use with GPE"
diff --git a/packages/gpe-dm/files/.mtn2git_empty b/packages/foonas-init/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gpe-dm/files/.mtn2git_empty
+++ b/packages/foonas-init/.mtn2git_empty
diff --git a/packages/gpe-mileage/.mtn2git_empty b/packages/foonas-init/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gpe-mileage/.mtn2git_empty
+++ b/packages/foonas-init/files/.mtn2git_empty
diff --git a/packages/foonas-init/files/conffiles b/packages/foonas-init/files/conffiles
new file mode 100644
index 0000000000..e1408a3227
--- /dev/null
+++ b/packages/foonas-init/files/conffiles
@@ -0,0 +1,55 @@
+# conffiles
+# Known SlugOS configuration files. These files are preserved on
+# a flash upgrade. Other configuration files, found from:
+#
+# /usr/lib/ipkg/*.conffiles
+# /etc/*.conf
+#
+# are preserved too with an operation of 'diff' if they have been
+# changed since /etc/.configured was created.
+#
+# Lines starting with # are comments, other lines have
+# two fields:
+#
+# operation file
+#
+# The file must *NOT* have a leading /
+#
+# operation may be:
+# ignore Do not preserve this file
+# preserve Preserve this file unconditionally
+# diff Compare file with the new version, ask if different
+#
+preserve linuxrc
+preserve etc/.configured
+preserve etc/TZ
+diff etc/default/conffiles
+diff etc/default/devpts
+preserve etc/default/rcS
+preserve etc/default/sysconf
+diff etc/default/usbd
+preserve etc/defaultdomain
+preserve etc/dropbear/dropbear_dss_host_key
+preserve etc/dropbear/dropbear_rsa_host_key
+preserve etc/ssh/ssh_host_dsa_key
+preserve etc/ssh/ssh_host_dsa_key.pub
+preserve etc/ssh/ssh_host_rsa_key
+preserve etc/ssh/ssh_host_rsa_key.pub
+preserve etc/fstab
+preserve etc/group
+preserve etc/gshadow
+preserve etc/hostname
+preserve etc/hosts
+preserve etc/localtime
+ignore etc/modules
+ignore etc/modules.conf
+preserve etc/motd
+preserve etc/network/interfaces
+preserve etc/ntp.drift
+preserve etc/passwd
+preserve etc/profile
+preserve etc/resolv.conf
+preserve etc/shadow
+preserve etc/syslog.conf
+preserve etc/timezone
+preserve root/.ssh/authorized_keys
diff --git a/packages/foonas-init/files/functions b/packages/foonas-init/files/functions
new file mode 100644
index 0000000000..2108288ab5
--- /dev/null
+++ b/packages/foonas-init/files/functions
@@ -0,0 +1,413 @@
+#!/bin/sh
+# . this file to load the following utility functions
+#
+# hardware
+# the 'Hardware' string from cpuinfo, or, if not found
+# try a little harder with 'machine'
+hardware(){
+ local hdw
+ hdw=`sed -n 's!^Hardware *: !!p' /proc/cpuinfo`
+ test -n "$hdw" || {
+ hdw=`sed -n 's!^machine *: !!p' /proc/cpuinfo`
+ }
+ echo $hdw
+}
+#
+# machine
+# outputs an identifier of the current machine - i.e. the board
+# slugos is running on.
+machine(){
+ case "$(hardware)" in
+ *Coyote*) echo coyote;;
+ *IXDPG425*) echo ixdpg425;;
+ *WRV54G*) echo wrv54g;;
+ *IXDP425*) echo ixdp425;;
+ *IXDP465*) echo ixdp465;;
+ *IXCDP1100*) echo ixcdp1100*;;
+ *Avila*) echo avila;;
+ *Loft*) echo loft;;
+ *NAS?100d*) echo nas100d;;
+ *NSLU2*) echo nslu2;;
+ *StorCenter*) echo storcenter;;
+ *) echo unknown;;
+ esac
+}
+#
+# single_user_ok
+# if the machine is capable of single user interaction return
+# true, else return false. The result of this function is
+# preempted by setting SULOGIN to 'yes' or 'ok' in /etc/default/rcS
+single_user_ok() {
+ # list known good machines in the 'case'
+ test "$SULOGIN" = yes -o "$SULOGIN" = ok ||
+ case "$(machine)" in
+ ixdp*|avila|loft)
+ test "$SULOGIN" != never;;
+ *) return 1;;
+ esac
+}
+#
+# load_functions "source"
+# load the functions in '/sbin/source' - relies on /sbin/source being
+# a shell script and having support for this function.
+load_functions(){
+ test -n "$1" -a -x "/sbin/$1" && . "/sbin/$1" || {
+ echo "$0: /sbin/$1: script not found" >&2
+ return 1
+ }
+}
+#
+# mtdev "name"
+# return (output) the character device name for flash parition "name"
+# /proc/mtd has the general form:
+# dev: size erasesize name
+# mtd5: 00020000 00020000 "FIS directory"
+# use this rather than hard-wiring the device because the partition
+# table can change - looking in /proc/mtd is more reliable.
+mtdev(){
+ if test $(machine) = storcenter ; then
+ sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtd/\1!p' /proc/mtd
+ else
+ sed -n 's!^\(mtd[0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/\1!p' /proc/mtd
+ fi
+}
+#
+# mtblockdev "name"
+# as mtdev but output the name of the block (not character) device
+mtblockdev(){
+ if test "$(machine)" = storcenter ; then
+ sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock/\1!p' /proc/mtd
+ else
+ sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock\1!p' /proc/mtd
+ fi
+}
+#
+# mtsize "name"
+# the size of the partition as a hexadecimal value (with 0x at the front)
+mtsize(){
+ sed -n 's!^mtd[0-9][0-9]*: \([^ ]*\)[^"]*"'"$1"'"$!0x\1!p' /proc/mtd
+}
+#
+# sysvalmatch "section" "name" 'pattern' "configuration file"
+# sysvalof "section" "name" "configuration file"
+# sysval "section" "name"
+# outputs the value of the SysConf variable 'name' from section 'section',
+# if there are multiple definitions only the last is output
+# NOTE: these functions should only be used internally, add entries to 'config'
+# below if necessary. This is because 'config' does the defaulting.
+sysvalmatch(){
+ sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^'"$2"'=\('"$3"'\)$/\1/p' "$4" | sed -n '$p'
+}
+sysvalof(){
+ sysvalmatch "$1" "$2" '.*' "$3"
+}
+sysval(){
+ test -r "$config_root/etc/default/sysconf" &&
+ sysvalof "$1" "$2" "$config_root/etc/default/sysconf"
+}
+#
+# syssection "section"
+# outputs all the values from the given section changed to the format "name value"
+# (i.e. the '=' is dropped).
+syssection(){
+ test -r "$config_root/etc/default/sysconf" &&
+ sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^\([^=]*\)=\(.*\)$/\1 \2/p' "$config_root/etc/default/sysconf"
+}
+#
+# config "value"
+# convenience callers for specific values to avoid mis-typing in scripts
+# NOTE: this function does the defaulting, 'sysval' does not!
+# config_root: if set this will override the root where config/sysval
+# looks for /etc/default/sysconf
+config(){
+ local mac
+ mac="$(test -r /proc/net/maclist &&
+ sed -n '/^[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]:[0-9A-Za-z][0-9A-Za-z]$/p' /proc/net/maclist |
+ sed -n 1p)"
+ #
+ case "$1" in
+ mac) test -n "$mac" && echo "$mac";;
+ host) if test -n "$(sysval network disk_server_name)"
+ then
+ sysval network disk_server_name
+ elif test -n "$(sysval network default_server_name)"
+ then
+ sysval network default_server_name
+ elif test -n "$mac"
+ then
+ echo "$mac" | sed -n 's/^\(..\):\(..\):\(..\):\(..\):\(..\):\(..\)$/slug\1\2\3\4\5\6/p'
+ else
+ # because we want the name to remain constant:
+ echo "turbostation"
+ fi;;
+ domain) sysval network w_d_name;;
+ iface) if test -n "$(sysval network lan_interface)"
+ then
+ sysval network lan_interface
+ else
+ echo eth0
+ fi;;
+ ip) if test -n "$(sysval network ip_addr)"
+ then
+ sysval network ip_addr
+ else
+ echo 192.168.1.16
+ fi;;
+ netmask)sysval network netmask;;
+ gateway)sysval network gateway;;
+ dns) sysval network dns_server1;;
+ dns2) sysval network dns_server2;;
+ dns3) sysval network dns_server3;;
+ boot) if test -n "$(sysval network bootproto)"
+ then
+ sysval network bootproto
+ else
+ echo dhcp
+ fi;;
+ valid) test -r "$config_root/etc/default/sysconf" -a -n "$mac";;
+ *) return 1;;
+ esac
+}
+#
+# checkif "iface"
+# Validate an interface name by making sure that it exists
+# in /proc/net/dev (and is not lo). The listing outputs the
+# interface followed by a :, the check function looks for
+# something of the form '$1[a-zA-Z0-9]*:' and outputs the
+# part preceding the ':'
+checkif(){
+ sed -n '/^[ ]*lo:/d;s/^[ ]*\('"$1"'[a-zA-Z0-9]*\):.*$/\1/p;tE;d;:E;q' /proc/net/dev
+}
+#
+# checkmount "mountpoint"
+# tests an already mounted mountpoint to see whether to attempt to
+# boot with this as root. Returns success if it appears ok.
+checkmount(){
+ # basic test for init (the kernel will try to load this)
+ # but require a shell in bin/sh too
+ test \( -d "$1/mnt" \) -a \
+ \( -x "$1/bin/sh" -o -h "$1/bin/sh" \) -a \
+ \( -x "$1/usr/sbin/chroot" -o -h "$1/usr/sbin/chroot" -o \
+ -x "$1/sbin/chroot" -o -h "$1/sbin/chroot" \) -a \
+ \( -x "$1/sbin/init" -o -h "$1/sbin/init" -o \
+ -x "$1/etc/init" -o -h "$1/etc/init" -o \
+ -x "$1/bin/init" -o -h "$1/bin/init" \)
+}
+#
+# swivel "new root" "old root"
+# NOTE: the arguments must be paths relative to /, bad things
+# will happen if the arguments themselves start with /
+# Pivot to a new root. This does all the fancy pivot_root stuff
+# including closing streams and does a umount /proc - it doesn't
+# matter if this fails (failure codes are ignored), but if /proc
+# was mounted it must be restored by the caller on return.
+# Normally this function never returns!
+# On return 0,1,2 are connected to /dev/console - this may not
+# have been true before!
+swivel(){
+ cd "$1"
+ exec <&- >&- 2>&-
+ # This is just-in-case the called mounted /proc and was
+ # unable to close it because of the streams
+ umount /proc 2>/dev/null
+ if pivot_root . "$2"
+ then
+ # everything must move out of the old root, this process
+ # is $2/bin/sh so it must die, IO is redirected
+ # just in case - typically it will be to a device so it
+ # won't hold the old root open.
+ # the exec here is the first point at which the old root
+ # is unused - before the exec regardless of the close of
+ # 0,1,2 above ash still has *this* shell script open!
+ # (it's on fd 10).
+ # init closes all file descriptors, there's no point
+ # supplying it with fds.
+ # NOTE: this used to use $2/usr/sbin/chroot, however on
+ # linux / is already . when the command is executed
+ # therefore it is essential to use the local (new root)
+ # chroot to ensure it gets the correct shared libraries.
+ if test -x usr/sbin/chroot -o -h usr/sbin/chroot
+ then
+ chroot=usr/sbin/chroot
+ elif test -x sbin/chroot -o -h sbin/chroot
+ then
+ chroot=sbin/chroot
+ else
+ chroot=chroot
+ fi
+ #
+ exec "$chroot" . bin/sh -c "\
+ test -x sbin/init && exec sbin/init
+ test -x etc/init && exec etc/init
+ test -x bin/init && exec bin/init
+ mount -t sysfs sysfs /mnt
+ umount /mnt
+ sync;sync;sync
+ exit 1"
+ fi
+ #
+ # recovery - must restore the old root
+ cd "$2"
+ sbin/pivot_root . "$1"
+ # cd is back to $1 - either pivot_root doesn't change it and the
+ # chroot above was not executed, or pivot_root does change it and
+ # has just changed it back!
+ exec <>/dev/console >&0 2>&0
+}
+#
+# ifup "interface"
+# bring that interface up with the configured ip and other
+# information
+ifup(){
+ local ip hostname router subnet iface HOSTNAME NETMASK BROADCAST
+
+ iface="$1"
+ ip="$(config ip)"
+ hostname="$(config host)"
+ router="$(config gateway)"
+ broadcast=
+
+ if test -n "$ip"
+ then
+ # only if an ip was specified
+ subnet="$(config netmask)"
+ else
+ ip=192.168.1.77
+ fi
+
+ # First try udhcpc - note that the /boot/udhcpc.script
+ # simply records the values returned and the udhcpc
+ # is not left running so this will only work for
+ # the lease length time!
+ ifconfig "$iface" up
+ if test "$(config boot)" != static
+ then
+ test -n "$hostname" && HOSTNAME="-H $hostname"
+ # The script writes the required shell variable assignments
+ # to file descriptor 9
+ eval $(udhcpc -i "$iface" -n -q -r "$ip" $HOSTNAME -s /boot/udhcpc.script 9>&1 >/dev/null)
+ fi
+
+ test -n "$broadcast" && BROADCAST="broadcast $broadcast"
+ test -n "$subnet" && NETMASK="netmask $subnet"
+
+ if ifconfig "$iface" "$ip" $NETMASK $BROADCAST
+ then
+ for route in $router
+ do
+ route add default gw "$route" dev "$iface"
+ done
+ return 0
+ else
+ ifconfig "$iface" down
+ return 1
+ fi
+}
+#
+# ifdown "interface"
+# take the interface down
+ifdown(){
+ ifconfig "$1" down
+}
+#
+# mountflash "flash device" "flash root directory" {mount options}
+# Finds and mounts the flash file system on the given directory
+mountflash(){
+ local ffsdev ffsdir
+
+ ffsdev="$1"
+ test -n "$ffsdev" -a -b "$ffsdev" || {
+ echo "$0: unable to find flash file system to copy ($ffsdev)" >&2
+ return 1
+ }
+ shift
+
+ ffsdir="$1"
+ test -n "$ffsdir" -a -d "$ffsdir" || {
+ echo "$0: mountflash $ffsdir: not a directory (internal error)" >&2
+ return 1
+ }
+ shift
+
+ mount -t jffs2 "$@" "$ffsdev" "$ffsdir" || {
+ echo "$0: $ffsdev: unable to mount flash file system on $ffsdir" >&2
+ return 1
+ }
+ return 0
+}
+#
+# umountflash [-r] "flash device"
+# unmount any instance of the given flash device, if -r is specified a mount on
+# root is an error, otherwise a mount on root is ignored (and remains).
+umountflash(){
+ local rootok ffsno ffsdev
+ rootok=1
+ case "$1" in
+ -r) rootok=
+ shift;;
+ esac
+ #
+ # The argument is ffsdev
+ ffsdev="$1"
+ ffsno="$(devio "<<$ffsdev" prd)"
+ test -n "$ffsno" -a "$ffsno" -ge 0 || {
+ echo "$0: $ffsdev: device number $ffsno is not valid, cannot continue." >&2
+ return 1
+ }
+ #
+ # Make sure that Flashdisk isn't mounted on /
+ if test -z "$rootok" -a "$(devio "<</etc/init.d/sysconfsetup" prd)" -eq "$ffsno"
+ then
+ echo "$0: $ffsdev is mounted on /, use turnup ram" >&2
+ return 1
+ fi
+ #
+ # The function is currently always used interactively, so output
+ echo "$0: umounting any existing mount of $ffsdev" >&2
+ #
+ # check each mount point, do this last first because otherwise nested
+ # mounts of ffsdev cannot be umounted.
+ ffs_umount() {
+ local device mp type options stuff
+
+ read device mp type options stuff
+ test -z "$device" && return 0
+
+ # handle following entries first
+ ffs_umount || return 1
+
+ # handle this entry, since this is currently only used for unmounting
+ # the flash root partition we know a file which must exist...
+ case "$mp/$type" in
+ //jffs2);; # skip /
+ */jffs2)test "$(devio "<<$mp/etc/init.d/sysconfsetup" prd 2>/dev/null)" -ne "$ffsno" ||
+ umount "$mp" || {
+ echo "$0: $mp: unable to umount $ffsdev" >&2
+ return 1
+ };;
+ esac
+
+ return 0
+ }
+ #
+ ffs_umount </proc/mounts || {
+ echo "$0: umount $ffsdev from all mount points then re-run $0" >&2
+ return 1
+ }
+
+ return 0
+}
+
+#
+# uuid_by_partition
+# output a list of partitions and their UUIDs
+uuid_by_partition() {
+ blkid -c /dev/null -s UUID | sed -n 's/^\([^:]*\): .*UUID="\([^"]*\)".*$/\1 \2/p'
+}
+
+#
+# partition_of uuid
+# return the partition corresponding to the UUID
+partition_of() {
+ sed -n 's/^\([^ ]*\) '"$1"'$/\1/p'
+}
diff --git a/packages/foonas-init/files/links.conf b/packages/foonas-init/files/links.conf
new file mode 100644
index 0000000000..fdd1f3ce23
--- /dev/null
+++ b/packages/foonas-init/files/links.conf
@@ -0,0 +1,6 @@
+# This file does not exist. Please do not ask the debian maintainer about it.
+# You may use it to do strange and wonderful things, at your risk.
+
+# The new RTC class does not create the /dev/rtc symlink, and udev rules don't get run for built-in modules.
+# So it looks like we have to do this here for the moment, until someone comes up with a better idea ...
+L rtc rtc0
diff --git a/packages/foonas-init/files/modulefunctions b/packages/foonas-init/files/modulefunctions
new file mode 100644
index 0000000000..430e376ad8
--- /dev/null
+++ b/packages/foonas-init/files/modulefunctions
@@ -0,0 +1,39 @@
+#!/bin/sh
+# "." this file, then call the appropriate routines to load modules
+# you might need. This is run from /etc/rcS.d/S21loadmodules.sh
+# at boot time. Possible examples are commented out, none of which
+# are needed on openprotium since they are already in the kernel.
+
+. /etc/default/functions
+
+
+loaddiskmods(){
+ :
+# modprobe scsi_mod
+# modprobe sd_mod
+# modprobe usbcore
+# case "$(machine)" in
+# nslu2)
+# modprobe ehci-hcd
+# modprobe ohci-hcd
+# ;;
+# esac
+# modprobe usb-storage
+}
+
+loadnetmods(){
+ :
+# modprobe af_packet
+# case "$(machine)" in
+# ixdp425|nslu2|nas100d)
+# modprobe ixp4xx_mac
+# ;;
+# esac
+}
+
+loadmiscmods(){
+ :
+# modprobe ixp4xx_rng
+# modprobe i2c_dev
+}
+
diff --git a/packages/foonas-init/files/reflash b/packages/foonas-init/files/reflash
new file mode 100644
index 0000000000..f2947822f6
--- /dev/null
+++ b/packages/foonas-init/files/reflash
@@ -0,0 +1,163 @@
+#!/bin/sh
+#
+# Open Protium Reflash. This script will take a firmware image consisting
+# of a compressed linux kernel image, concatentated with a jffs2 root
+# filesystem image. The kernel MTD device is discovered by locating
+# the MTD partition with the tag "kernel" and the filesystem MTD device
+# is dicovered by locating the MTD partition with the tag "filesystem."
+# There is no TOC inside the firmware images so there is no direct way
+# to validate that the sizes of the parts in the firmware match the
+# existing MTD partitions. So there could be a mismatch. However, a
+# a mismatch size will be detect as this script mounts the newly laid
+# done filesystem, a mismatch guarantees this to fail. That being said
+# the script does validate the total size to prevent overwriting
+# uboot. Furthermore the script makes sure the fsdev is not in use and
+# that the various images are block aligned.
+
+flimg=$1
+if [ -z "$flimg" ]; then
+ echo "Usage: reflash <image file>"
+ exit 1
+fi
+
+if [ \! -f $flimg -o \! -r $flimg ]; then
+ #
+ # not a file or not readable
+ #
+ echo "error: Image file [$flimg] not available"
+ exit 1
+fi
+
+dmesg | grep StorCenter >/dev/null 2>&1
+if [ $? -ne 0 ]; then
+ exit 0
+fi
+
+blksize=512
+mtd=/proc/mtd
+mtab=/proc/mounts
+mntdir=/tmp/fs.$$
+
+ktag=kernel
+fstag=filesystem
+
+kdev=` grep $ktag $mtd | awk -F: '{print $1}' | sed -e 's?mtd?/dev/mtdblock/?g'`
+fsdev=`grep $fstag $mtd | awk -F: '{print $1}' | sed -e 's?mtd?/dev/mtdblock/?g'`
+
+flsize=`ls -l $flimg | awk '{print $5}'`
+ksize=`grep $ktag $mtd | awk '{print "0x" $2}'`
+fssize=`grep $fstag $mtd | awk '{print "0x" $2}'`
+
+#
+# Size comes out of dc in exp notation and test wont accept a hex number
+# so dumo it in hex then use awk to convert to decimal
+#
+size=0x`dc 16 o $ksize $fssize + p`
+size=`echo $size | awk '{printf ("%d",$1)}'`
+
+#
+# Make sure we are block aligned
+#
+kblks=`dc $ksize $blksize / p`
+r=`dc $ksize $blksize % p`
+if [ $r -ne 0 ]; then
+ echo "error: Kernel partition is not block aligned."
+ exit 1
+fi
+
+#
+# Make sure we are block aligned
+#
+fsblks=`dc $fssize $blksize / p`
+r=`dc $fssize $blksize % p`
+if [ $r -ne 0 ]; then
+ echo "error: Filesystem partition is not block aligned."
+ exit 1
+fi
+
+#
+# Check to see that we have enough room
+#
+if [ $flsize -gt $size ]; then
+ echo "error: Image size is bigger then available space."
+ exit 1
+fi
+
+#
+# Is fsdev mounted?
+#
+grep $fsdev $mtab > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+ echo "error: $fsdev mounted"
+ exit 1
+fi
+
+#
+# If root is a jffs2 then close enough, im out
+#
+grep jffs2 $mtab > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+ echo "error: $fsdev may be mounted"
+ exit 1
+fi
+
+
+#
+# Mount fsdev and save fsdev/linuxrc
+#
+mkdir $mntdir /tmp/$$
+mount -t jffs2 $fsdev $mntdir
+if [ $? -ne 0 ]; then
+ echo "error: Unable to mount $fsdev"
+ exit 1
+fi
+echo "Preserving /linuxrc in /tmp/$$"
+cp $mntdir/linuxrc* /tmp/$$
+umount $mntdir
+
+echo "Image:"
+echo " Name : $flimg"
+echo " Length: $flsize"
+echo
+echo "Kernel:"
+echo " Device: $kdev"
+echo " Length: $ksize"
+echo " Blocks: $kblks"
+echo
+echo "Filesystem:"
+echo " Device: $fsdev"
+echo " Length: $fssize"
+echo " Blocks: $fsblks"
+echo
+echo 'Ready to flash, Continue? (yes/no)'
+read continue
+if [ "z$continue" != "zyes" ]; then
+ rm -rf $mntdir /tmp/$$
+ exit 0
+fi
+
+#
+# Lets do the flash
+#
+echo Preserving existing flash in: $flimg.sav.$$
+dd of=$flimg.sav.$$ if=$kdev bs=$blksize count=$kblks
+dd of=$flimg.sav.$$ if=$fsdev bs=$blksize count=$fsblks seek=$kblks
+
+echo Flashing new firmware....
+dd if=$flimg of=$kdev bs=$blksize count=$kblks
+dd if=$flimg of=$fsdev bs=$blksize count=$fsblks skip=$kblks
+sync
+sleep 5
+
+#
+# Mount fsdev and restore fsdev/linuxrc
+#
+mount -t jffs2 $fsdev $mntdir
+if [ $? -ne 0 ]; then
+ echo "error: Unable to re-mount $fsdev"
+ exit 1
+fi
+echo "Restoring /linuxrc"
+cp /tmp/$$/linuxrc* $mntdir
+umount $mntdir
+rm -rf $mntdir /tmp/$$
diff --git a/packages/foonas-init/files/sysconf b/packages/foonas-init/files/sysconf
new file mode 100644
index 0000000000..8866c076b8
--- /dev/null
+++ b/packages/foonas-init/files/sysconf
@@ -0,0 +1,793 @@
+#!/bin/sh
+# sysconf
+#
+# utility to manipulate system configuration information help
+# in a RedBoot SysConf partition
+#
+# load the utility functions (unless this is being called just
+# to load these functions!)
+test "$1" != sysconf && . /etc/default/functions
+
+# NSLU2 flash layout is non-standard.
+case "$(machine)" in
+nslu2)
+ kpart="Kernel"
+ syspart="SysConf"
+ ffspart="Flashdisk";;
+*)
+ kpart="kernel"
+ syspart="sysconfig"
+ ffspart="filesystem";;
+esac
+#
+# sysconf_valid
+# return true if the SysConf partition exists and seems to be
+# potentially valid (it starts with a reasonable length).
+sysconf_valid(){
+ local sysdev
+ sysdev="$(mtblockdev $syspart)"
+ test -n "$sysdev" -a -b "$sysdev" &&
+ devio "<<$sysdev" '!! b.10>s32768<&!'
+}
+
+#
+# sysconf_read [prefix]
+# read the $syspart partition (if present) writing the result into
+# /etc/default/sysconf, if the result is empty it will be removed.
+sysconf_read(){
+ local sysdev sedcmd mac config_root
+ config_root="$1"
+ rm -f /tmp/sysconf.new
+ sysdev="$(mtblockdev $syspart)"
+ if sysconf_valid
+ then
+ # Read the defined part of $syspart into /etc/default/sysconf.
+ # $syspart has lines of two forms:
+ #
+ # [section]
+ # name=value
+ #
+ # In practice $syspart also contains other stuff, use the command:
+ #
+ # devio '<</dev/mtd1;cpb'
+ #
+ # to examine the current settings. The badly formatted stuff
+ # is removed (to be exact, the sed script selects only lines
+ # which match one of the two above). The lan interface, which
+ # on NSLU2 defaults to ixp0, is changed to the correct value for
+ # slugos, eth0. The bootproto, which LinkSys sets to static in
+ # manufacturing, is reset to dhcp if the IP is still the
+ # original (192.168.1.77)
+ sedcmd='/^\[[^][]*\]$/p;'
+ # only do the ip_addr and lan_interface fixups on NSLU2
+ if test "$(machine)" = nslu2
+ then
+ sedcmd="$sedcmd"'
+ s/^lan_interface=ixp0$/lan_interface=eth0/;
+ /^ip_addr=192\.168\.1\.77$/,/^bootproto/s/^bootproto=static$/bootproto=dhcp/;'
+ fi
+ # always fix up the hardware addr if it is present
+ mac="$(config mac)"
+ if test -n "$mac"
+ then
+ sedcmd="$sedcmd"'
+ s/^hw_addr=.*$/hw_addr='"$mac"'/;'
+ fi
+ # and only print lines of the correct form
+ sedcmd="$sedcmd"'
+ /^[-a-zA-Z0-9_][-a-zA-Z0-9_]*=/p'
+
+ devio "<<$sysdev" cpb fb1,10 | sed -n "$sedcmd" >/tmp/sysconf.new
+ fi
+ #
+ # test the result - sysconf must be non-empty
+ if test -s /tmp/sysconf.new
+ then
+ mv /tmp/sysconf.new "$config_root/etc/default/sysconf"
+ else
+ rm -f /tmp/sysconf.new
+ return 1
+ fi
+}
+
+#
+# sysconf_default [prefix]
+# Provde a default /etc/default/sysconf when there is no $syspart partition,
+# or when it is invalid, this function will read from an existing sysconf,
+# copying the values into the new one.
+# sysconf_line tag config-tag
+# write an appropriate line if the config value is non-empty
+sysconf_line(){
+ config "$2" | {
+ local value
+ read value
+ test -n "$value" && echo "$1"="$value"
+ }
+}
+#
+sysconf_default(){
+ local config_root
+ config_root="$1"
+ { echo '[network]'
+ sysconf_line hw_addr mac
+ sysconf_line disk_server_name host
+ sysconf_line w_d_name domain
+ sysconf_line lan_interface iface
+ sysconf_line ip_addr ip
+ sysconf_line netmask netmask
+ sysconf_line gateway gateway
+ sysconf_line dns_server1 dns
+ sysconf_line dns_server2 dns2
+ sysconf_line dns_server3 dns3
+ sysconf_line bootproto boot
+ } >/tmp/sysconf.new
+ mv /tmp/sysconf.new "$config_root/etc/default/sysconf"
+}
+
+#
+# sysconf_reload [prefix]
+# read the values from /etc/default/sysconf and use these values to set
+# up the following system files:
+#
+# /etc/hostname
+# /etc/defaultdomain
+# /etc/resolv.conf
+# /etc/network/interfaces
+# /etc/motd
+#
+sysconf_reload(){
+ local config_root host domain iface boot ip netmask gateway ifname iftype
+ config_root="$1"
+ host="$(config host)"
+ test -n "$host" && echo "$host" >"$config_root/etc/hostname"
+ domain="$(config domain)"
+ test -n "$domain" && echo "$domain" >"$config_root/etc/defaultdomain"
+ #
+ # The DNS server information gives up to three nameservers,
+ # but this currently only binds in the first.
+ {
+ test -n "$domain" && echo "search $domain"
+ test -n "$(config dns)" && echo "nameserver $(config dns)"
+ test -n "$(config dns2)" && echo "nameserver $(config dns2)"
+ test -n "$(config dns3)" && echo "nameserver $(config dns3)"
+ } >"$config_root/etc/resolv.conf"
+ #
+ # Ethernet information. This goes into /etc/network/interfaces,
+ # however this is only used for static setup (and this is not
+ # the default). With dhcp the slugos udhcp script,
+ # /etc/udhcpc.d/50default, loads the values from sysconf.
+ iface="$(config iface)"
+ boot="$(config boot)"
+ # Only dhcp and static are supported at present - bootp
+ # support requires installation of appropriate packages
+ # dhcp is the fail-safe
+ case "$boot" in
+ dhcp|static) ;;
+ *) boot=dhcp;;
+ esac
+ #
+ ip="$(config ip)"
+ netmask="$(config netmask)"
+ gateway="$(config gateway)"
+ {
+ echo "# /etc/network/interfaces"
+ echo "# configuration file for ifup(8), ifdown(8)"
+ echo "#"
+ echo "# The loopback interface"
+ echo "auto lo"
+ echo "iface lo inet loopback"
+ echo "#"
+ echo "# The interface used by default during boot"
+ echo "auto $iface"
+ echo "# Automatically generated from /etc/default/sysconf"
+ echo "# address, netmask and gateway are ignored for 'dhcp'"
+ echo "# but required for 'static'"
+ echo "iface $iface inet $boot"
+ # The following are ignored for DHCP but are harmless
+ test -n "$ip" && echo " address $ip"
+ test -n "$netmask" && echo " netmask $netmask"
+ test -n "$gateway" && echo " gateway $gateway"
+ #
+ # Now read all the other ARPHRD_ETHER (type=1) interfaces
+ # and add an entry for each.
+ for ifname in $(test -d /sys/class/net && ls /sys/class/net)
+ do
+ if test -r "/sys/class/net/$ifname/type" -a "$ifname" != "$iface"
+ then
+ read iftype <"/sys/class/net/$ifname/type"
+ case "$iftype" in
+ 1) echo "#"
+ echo "# /sys/class/net/$ifname:"
+ echo "auto $ifname"
+ echo "iface $ifname inet dhcp";;
+ esac
+ fi
+ done
+ } >"$config_root/etc/network/interfaces"
+ #
+ # Finally rewrite /etc/motd
+ { echo "Host name: $host"
+ echo "Domain name: $domain"
+ echo "Host MAC: $(config mac)"
+ echo "Network boot method: $boot"
+ case "$boot" in
+ static) echo "Host IP address: $ip";;
+ esac
+ echo "Use 'turnup init' to reset the configuration"
+ echo "Use 'turnup preserve' to save the configuration permanently"
+ echo "Use 'turnup restore' to restore a previously saved configuration"
+ echo "Use 'turnup disk|nfs -i <device> options to initialise a non-flash root"
+ echo "Use 'turnup help' for more information"
+ } >"$config_root/etc/motd"
+}
+
+#
+# sysconf_save_conffiles <flash-directory> <dest> <list>
+# preserve the configuration files in a directory or in a CPIO archive
+# (which is *not* compressed). If <dest> is a directory the files are
+# copied, otherwise a CPIO archive is made with that name. <list> is
+# the listing file giving the preserved files and the processing option.
+sysconf_save_conffiles(){
+ local ffsdir dest list file
+ ffsdir="$1"
+ saved="$2"
+ list="$3"
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -n "$saved" -a -n "$list" || {
+ echo "sysconf_save_conffiles: invalid arguments: '$*'" >&2
+ echo " usage sysconf_save_conffiles <flash-directory> <dest> <list>" >&2
+ return 1
+ }
+ #
+ ( cd "$ffsdir"
+ find etc/*.conf $(sed 's!^/!!' usr/lib/ipkg/info/*.conffiles) ! -type d -newer etc/.configured -print |
+ sed 's/^/diff /'
+ exec sed 's/#.*$//;/^[ ]*$/d' etc/default/conffiles
+ ) | sed 's!^/*!!' |
+ awk '{ op=$1; $1=""; file[$0]=op }
+ END{ for (f in file) if (file[f] != "ignore") print file[f] f }' |
+ while read op file
+ do
+ if test -e "$ffsdir/$file"
+ then
+ echo "$op $file" >&3
+ echo "$file"
+ fi
+ done 3>"$list" | (
+ cd "$ffsdir"
+ if test -d "$saved"
+ then
+ exec cpio -p -d -m -u "$saved"
+ else
+ exec cpio -o -H crc >"$saved"
+ fi
+ )
+}
+
+#
+# sysconf_verify file
+# this is called with the name of a 'diff' file which is, indeed,
+# different and with all the std streams connected to the tty. It
+# returns a status code to say whether (0) or not (1) to copy the
+# file over.
+#
+# globals: the following must be defined in the calling context!
+# saved: the directory containing the unpacked saved files
+# ffsdir: the flash directory to which the files are being restored (/)
+#
+sysconf_verify_help() {
+ echo "Please specify how to handle this file or link, the options are as follows,"
+ echo "two character abbreviations may be used:"
+ echo
+ echo " keep: retain the old file, overwrite the new flash image file"
+ echo " upgrade: retain the new file, the old (saved) file is not used"
+ echo " diff: display the differences between the old and the new using diff -u"
+ echo " shell: temporarily start an interactive shell (sh -i), exit to continue"
+ echo " skip: ignore this file for the moment. The file is left in the directory"
+ echo " $saved and many be handled after this script has completed"
+}
+#
+sysconf_verify() {
+ local command file
+
+ # return 1 here causes the file not to be overwritten,
+ # control should never get here!
+ test -n "$sysconf_noninteractive" && {
+ echo "$0: $*: changed file cannot be handled non-interactively" >&2
+ return 1
+ }
+
+ file="$1"
+ echo "$0: $file: configuration file changed."
+ sysconf_verify_help "$file"
+ while :
+ do
+ echo -n "option: "
+ read command
+ case "$command" in
+ ke*) return 0;;
+ up*) rm "$saved/$file"
+ return 1;;
+ di*) echo "DIFF OLD($saved) NEW($ffsdir)"
+ diff -u "$saved/$file" "$ffsdir/$file";;
+ sh*) PS1="$file: " sh -i;;
+ sk*) return 1;;
+ *) sysconf_verify_help "$file";;
+ esac
+ done
+}
+# the same, but for a link
+sysconf_verify_link() {
+ local command link
+
+ # return 1 here causes the file not to be overwritten,
+ # control should never get here!
+ test -n "$sysconf_noninteractive" && {
+ echo "$0: $*: changed link cannot be handled non-interactively" >&2
+ return 1
+ }
+
+ link="$1"
+ echo "reflash: $link: configuration link changed."
+ sysconf_verify_help "$link"
+ while :
+ do
+ echo -n "option: "
+ read command
+ case "$command" in
+ ke*) return 0;;
+ up*) rm "$saved/$link"
+ return 1;;
+ di*) echo "DIFF:"
+ echo "OLD($saved): $link -> $(readlink "$saved/$link")"
+ echo "NEW($ffsdir): $link -> $(readlink "$ffsdir/$link")";;
+ sh*) PS1="$link: " sh -i;;
+ sk*) return 1;;
+ *) sysconf_verify_help "$link";;
+ esac
+ done
+}
+
+#
+# sysconf_restore_conffiles <flash-directory> <source-dir> <restore>
+# restore the configuration files from a directory. 'source-dir'
+# If <source> is a directory of files from sysconf_save_conffiles. The
+# list of files restored is written to the third argument (restore),
+# but is not required (/dev/null would be ok).
+#
+# the list of files to restore is read from stdin, along with the
+# processing option for each file (the format is as produced by
+# sysconf_save_conffiles in the 'list' output).
+sysconf_restore_conffiles(){
+ local ffsdir saved restore
+ # these are the globals used by the above function
+ ffsdir="$1"
+ saved="$2"
+ restore="$3"
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -d "$saved" -a -n "$restore" || {
+ echo "restore_conffiles: invalid arguments: '$*'" >&2
+ echo " usage sysconf_restore_conffiles <flash-directory> <source-dir> <list>" >&2
+ return 1
+ }
+ #
+ # read the list and process each given file
+ while read op file
+ do
+ # handle .configured specially (to preserve the original datestamp)
+ if test "$file" = "etc/.configured"
+ then
+ # this should definately not fail because of the test above!
+ if cp -a "$saved/$file" "$ffsdir/$file"
+ then
+ echo "$file" >&3
+ else
+ echo "sysconf_restore_conffiles: $file: timestamp copy failed (ignored)" >&2
+ fi
+ elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ then
+ # new or old symbolic link
+ if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
+ test "$(readlink "$saved/$file")" = "$(readlink "$ffsdir/$file")"
+ then
+ # no change
+ echo "$file" >&3
+ else
+ # assume a change regardless
+ case "$op" in
+ preserve)
+ echo "$file"
+ echo "$file" >&3;;
+ diff) # need user input
+ if sysconf_verify_link "$file" <>/dev/tty >&0 2>&0
+ then
+ echo "$file"
+ echo "$file" >&3
+ fi;;
+ esac
+ fi
+ else
+ # only overwrite if necessary
+ if test -e "$ffsdir/$file" && cmp -s "$saved/$file" "$ffsdir/$file"
+ then
+ # do not overwrite
+ echo "$file" >&3
+ elif test ! -e "$ffsdir/$file"
+ then
+ # always preserve
+ echo "$file"
+ echo "$file" >&3
+ else
+ case "$op" in
+ preserve)
+ echo "$file"
+ echo "$file" >&3;;
+ diff) # the files are different, get user input
+ if sysconf_verify "$file" <>/dev/tty >&0 2>&0
+ then
+ echo "$file"
+ echo "$file" >&3
+ fi;;
+ esac
+ fi
+ fi
+ done 3>"$restore" | (cd "$saved"; exec cpio -p -d -u "$ffsdir")
+}
+
+#
+# sysconf_test_restore <flash-directory> <source-dir>
+# return true only if the restore does not need to do an interactive
+# compare
+sysconf_test_restore(){
+ local ffsdir saved
+ # these are the globals used by the above function
+ ffsdir="$1"
+ saved="$2"
+ # this is an error case, but return 0 so that the error is
+ # detected later
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -d "$saved" ||
+ return 0
+ #
+ # read the list and check each diff file (this is just a copy of the
+ # logic above with all the work removed!)
+ while read op file
+ do
+ # handle .configured specially (to preserve the original datestamp)
+ if test "$op" != diff
+ then
+ : # no diff required
+ elif test "$file" = "etc/.configured"
+ then
+ : # special handling
+ elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ then
+ # new or old symbolic link
+ if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
+ test "$(readlink "$saved/$file")" = "$(readlink "$ffsdir/$file")"
+ then
+ : # no change
+ else
+ # assume a change regardless
+ return 1
+ fi
+ else
+ # only overwrite if necessary
+ if test -e "$ffsdir/$file" && cmp -s "$saved/$file" "$ffsdir/$file"
+ then
+ : # do not overwrite
+ elif test ! -e "$ffsdir/$file"
+ then
+ : # always preserve
+ else
+ # a change
+ return 1
+ fi
+ fi
+ done
+
+ return 0
+}
+
+#
+# sysconf_save
+# save the system configuration to $syspart - $syspart must exist and
+# there must be a writeable device for it.
+sysconf_save(){
+ local sysdev ffsdev ffsdir saved list size status
+ ffsdev="$(mtblockdev $ffspart)"
+ sysdev="$(mtblockdev $syspart)"
+ status=1
+ if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev"
+ then
+ # this will succeed silently if the flash device is on /
+ umountflash "$ffsdev" || exit 1
+ #
+ # Everything is umounted, now remount on a temporary directory.
+ ffsdir="/tmp/flashdisk.$$"
+ mkdir "$ffsdir" || {
+ echo "$0: $ffsdir: failed to create temporary directory" >&2
+ exit 1
+ }
+ #
+ mountflash "$ffsdev" "$ffsdir" -o ro || {
+ rmdir "$ffsdir"
+ exit 1
+ }
+ # need temporary files for the cpio output and the listing
+ saved=/tmp/cpio.$$
+ list=/tmp/preserve.$$
+ rm -rf "$saved" "$list"
+ sysconf_save_conffiles "$ffsdir" "$saved" "$list" || {
+ echo "$0: $saved: archive of saved configuration files failed" >&2
+ rm -rf "$saved"
+ rm "$list"
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ return 1
+ }
+ # ignore the error in this case:
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ #
+ # we now have:
+ # /etc/default/sysconf the basic config
+ # /tmp/preserve.$$ the list of saved files
+ # /tmp/cpio.$$ the CPIO archive of those files
+ #
+ # make one big file with the sysconf data followed by the
+ # compressed archive in /tmp/sysconf.$$
+ { { cat /etc/default/sysconf
+ echo '[preserve]'
+ } | sed -n '1,/^\[preserve\]^/p'
+ while read op file
+ do
+ echo "$op"="$file"
+ done <"$list"
+ } >/tmp/sysconf.$$
+ size="$(devio "<</tmp/sysconf.$$" 'pr$')"
+ gzip -9 <"$saved" >>/tmp/sysconf.$$
+ #
+ # more cleanup, then try to write the new sysconf to $syspart
+ # the format is a 4 byte big-endian length then the text data
+ # if the data won't fit exit with error code 7
+ rm "$saved" "$list"
+ devio -p "<</tmp/sysconf.$$" ">>$sysdev" '
+ $( $4+ # >
+ !! 7
+ $) 0
+ wb '"$size"',4
+ cp $'
+ case $? in
+ 0) echo " done" >&2
+ status=0;;
+ 1) echo " failed" >&2
+ echo " $syspart could not be written (no changes made)" >&2;;
+ 3) echo " failed" >&2
+ echo " $syspart partially written, you may want to reset it" >&2;;
+ 7) echo " failed" >&2
+ echo " $syspart is too small: $size bytes required" >&2
+ echo " No change made" >&2;;
+ *) echo " failed" >&2
+ echo " Internal error writing $syspart" >&2;;
+ esac
+ #
+ rm -f /tmp/sysconf.$$
+ else
+ echo "sysconf save: $syspart or $ffspart partition not found" >&2
+ echo " A RedBoot partition named '$syspart' must exist in the system" >&2
+ echo " flash memory for this command to work, and there must be a" >&2
+ echo " block device to access this partition (udev will normally" >&2
+ echo " create this automatically. The flash partition contents must" >&2
+ echo " also be accessible in a partition called '$ffspart'" >&2
+ echo
+ echo " To create the $syspart partition use the 'fis create' command" >&2
+ echo " in the RedBoot boot loader, it is sufficient to make the" >&2
+ echo " partition one erase block in size unless you have substantially" >&2
+ echo " increased the size of the files listed in /etc/default/conffiles" >&2
+ fi
+
+ return $status
+}
+
+#
+# sysconf_restore [auto]
+# restore previously saved configuration information from $syspart
+sysconf_restore_error(){
+ local root
+ root="$1"
+ shift
+ # -------------------------------------------------------------------------------
+ { echo " WARNING: saved configuration files not restored"
+ test -n "$1" && echo "$*"
+ echo
+ echo "The configuration of this machine has been reinitialised using the values"
+ echo "from /etc/default/sysconf, however configuration files saved in the $syspart"
+ echo "partition have not been restored."
+ echo
+ echo "You can restore these files by correcting any reported errors then running"
+ echo
+ echo " sysconf restore"
+ echo
+ echo "from the command line. This will completely reinitialise the configuration"
+ echo "using the information in the $syspart partition."
+ } >"$root/etc/motd"
+ cat "$root/etc/motd" >&2
+}
+#
+sysconf_restore(){
+ local sysdev ffsdev ffsdir saved restore size status sysconf_noninteractive config_root
+
+ # if set this means 'do no diff' - this avoids the code above which
+ # would open /dev/tty and therefore allows this stuff to be done from
+ # an init script
+ sysconf_noninteractive=
+ test "$1" = auto && sysconf_noninteractive=1
+
+ ffsdev="$(mtblockdev $ffspart)"
+ sysdev="$(mtblockdev $syspart)"
+ status=1
+ if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev" &&
+ sysconf_valid
+ then
+ # this will succeed silently if the flash device is on /
+ umountflash "$ffsdev" || exit 1
+ #
+ # Everything is umounted, now remount on a temporary directory.
+ ffsdir="/tmp/flashdisk.$$"
+ config_root="$ffsdir"
+ mkdir "$ffsdir" || {
+ echo "$0: $ffsdir: failed to create temporary directory" >&2
+ exit 1
+ }
+ #
+ mountflash "$ffsdev" "$ffsdir" || {
+ rmdir "$ffsdir"
+ exit 1
+ }
+ #
+ # first restore the $syspart section
+ sysconf_read "$ffsdir" || sysconf_default "$ffsdir"
+ #
+ # now use this to regenerate the system files
+ sysconf_reload "$ffsdir"
+ #
+ # now examine the [preserve] section, if it is there restore
+ # it if possible.
+ if test -n "$(syssection preserve)"
+ then
+ # 'saved' is a directory, 'restore' is a file (which is
+ # used to detect unrestored files). The directory needs
+ # to be populated with files.
+ saved=/tmp/cpio.$$
+ restore=/tmp/restore.$$
+ rm -rf "$saved" "$restore"
+ #
+ mkdir "$saved" || {
+ sysconf_restore_error "$ffsdir" "$saved: failed to create temporary directory"
+ return 1
+ }
+ #
+ # the CPIO archive is gzip compressed after the text part
+ # of sysconf, gzip will handle the LZ stream termination
+ # correctly (and break the pipe) so we don't need to know
+ # the real length of the data
+ devio "<<$sysdev" '<=b4+.' 'cp $s-' | gunzip | (
+ cd "$saved"
+ exec cpio -i -d -m -u
+ ) || {
+ rm -rf "$saved"
+ sysconf_restore_error "$ffsdir" "$saved: cpio -i failed"
+ return 1
+ }
+ # either there must be no 'diff' files or it must
+ # be possible to interact with a real user.
+ if test -z "$sysconf_noninteractive" ||
+ syssection preserve | sysconf_test_restore "$ffsdir" "$saved"
+ then
+ #
+ # remove the 'init' motd from sysconf_reload
+ rm "$ffsdir/etc/motd"
+ #
+ # now restore from the directory, using the information in
+ # the preserve section, if this fails in a non-interactive
+ # setting the system might not reboot
+ syssection preserve |
+ sysconf_restore_conffiles "$ffsdir" "$saved" "$restore" || {
+ # there is a chance of the user cleaning this up
+#------------------------------------------------------------------------------
+ sysconf_restore_error "$ffsdir" \
+"$0: $saved: restore of saved configuration files failed.
+ The flash file system is mounted on $ffsdir.
+ The saved files are in $saved and the list of files selected for
+ restore is in $restore.
+ You should restore any required configuration from $saved, then umount
+ $ffsdir and reboot."
+ # this prevents cleanup/umount
+ return 1
+ }
+ #
+ # remove the copied files (i.e. the ones which were preserved)
+ ( cd "$saved"
+ exec rm $(cat "$restore")
+ )
+ rm "$restore"
+ #
+ # clean up, files left in $saved need to be handled by the user
+ files="$(find "$saved" ! -type d -print)"
+ if test -n "$files"
+ then
+#------------------------------------------------------------------------------
+ sysconf_restore_error "$ffsdir" \
+"$0: some saved configuration files have not been handled:
+
+$files
+
+These files can be examined in $saved and restored to
+$ffsdir if required. The saved files are in a temporary
+directory and will not be retained across a reboot - copy then elsewhere if
+you are unsure whether they are needed."
+ return 1
+ fi
+ #
+ # so this is safe now (no files, links etc)
+ rm -rf "$saved"
+ else
+ rm -rf "$saved"
+ # non-interactive and some changed diff files
+ sysconf_restore_error "$ffsdir" \
+"$0: some of the saved configuration files must be
+examined before restoration"
+ # but continue to the umount
+ fi
+ fi
+ #
+ # ignore the error in this case:
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ status=0
+ else
+ echo "sysconf restore: $syspart or $ffspart partition not found" >&2
+ echo " You must have used 'sysconf save' to save configuration data" >&2
+ echo " into the $syspart partition before using this command. The command" >&2
+ echo " will restore the configuration data to the flash root partition" >&2
+ echo " named '$ffspart' - this must also be accessible." >&2
+ fi
+
+ return $status
+}
+
+#
+# sysconf_help
+# help text
+sysconf_help(){
+ # -------------------------------------------------------------------------------
+ echo "sysconf: usage: sysconf read|default|reload|save|restore" >&2
+ echo " read: the current $syspart partition is read into /etc/default/sysconf" >&2
+ echo " default: a default /etc/default/sysconf is created" >&2
+ echo " reload: system configuration files are recreated from /etc/default/sysconf" >&2
+ echo " save: /etc/default/sysconf and the files listed in /etc/default/conffiles" >&2
+ echo " are written to the $syspart partition" >&2
+ echo " restore: the configuration information in the $syspart partition saved by" >&2
+ echo " 'sysconf save' is restored" >&2
+}
+
+#
+# the real commands
+#if [ "$(machine)" = "storcenter" ]; then
+# echo "sysconf not (yet) supported on storcenter"
+# exit 0
+#fi
+sysconf_command="$1"
+test $# -gt 0 && shift
+case "$sysconf_command" in
+read) sysconf_read "$@";;
+default)sysconf_default "$@";;
+reload) sysconf_reload "$@";;
+save) sysconf_save "$@";;
+restore)sysconf_restore "$@";;
+valid) sysconf_valid "$@";;
+
+sysconf)# just load the functions
+ ;;
+
+*) # help text
+ sysconf_help "$@";;
+esac
diff --git a/packages/foonas-init/files/turnup b/packages/foonas-init/files/turnup
new file mode 100644
index 0000000000..73befd26c9
--- /dev/null
+++ b/packages/foonas-init/files/turnup
@@ -0,0 +1,861 @@
+#!/bin/sh
+# turnup
+# See the help block at the end for documentation.
+#
+. /etc/default/functions
+
+#
+# configuration
+# The following variables control which directories in /var end
+# up on the rootfs and which end up in a temporary file system.
+INRAM_MEMSTICK="/var/cache /var/lock /var/log /var/run /var/tmp /var/lib/ipkg"
+INRAM_NFS="/var/cache /var/lock /var/run /var/tmp"
+INRAM_DISK=""
+
+#
+# force: override certain checks
+force=
+
+#
+# pfile: the uuid/partition file
+pfile=/etc/uuid_by_partition
+
+#
+# fstype new
+# The type of the file system mounted on "new" Outputs the last
+# piece of information found, which should be the one for the
+# currently visible mount!
+fstype() {
+ local cwd dev mp type options pass freq result
+ cwd="$(cd "$1"; /bin/pwd)"
+ result=
+ while read dev mp type options pass freq
+ do
+ case "$mp" in
+ "$cwd") result="$type";;
+ esac
+ done </proc/mounts
+ echo "$result"
+}
+
+#
+# fsoptions arguments
+# Collapses the mount (-o) options into a single list which is
+# printed on stdout. Accepts an arbitrary list of options and
+# just joins them together.
+fsoptions() {
+ local options
+ options=
+ while test $# -gt 1
+ do
+ case "$1" in
+ -t) shift;;
+ -o) if test -n "$2"
+ then
+ if test -n "$options"
+ then
+ options="$options,$2"
+ else
+ options="$2"
+ fi
+ fi
+ shift;;
+ esac
+ shift
+ done
+ if test -n "$options"
+ then
+ echo "$options"
+ else
+ echo defaults
+ fi
+}
+
+#
+# get_flash <directory> {mount options}
+# mount the flash device, writeable, on the given directory
+get_flash() {
+ local ffsdir ffsdev
+
+ ffsdir="$1"
+ shift
+ test -n "$ffsdir" -a -d "$ffsdir" || {
+ echo "$0: $ffsdir: internal error, flash mount point not a directory" >&2
+ return 1
+ }
+
+ case "$(machine)" in
+ nslu2) ffsdev="$(mtblockdev Flashdisk)";;
+ *) ffsdev="$(mtblockdev filesystem)";;
+ esac
+ umountflash "$ffsdev" &&
+ mountflash "$ffsdev" "$ffsdir" "$@"
+}
+
+#
+# check_rootfs [-i] <root fs directory>
+# Make sure the candidate rootfs is empty
+# Environment: rootdev=device or NFS root path
+check_rootfs() {
+ local fcount
+
+ case "$1" in
+ -i) shift
+ case "$force" in
+ -f) return 0;;
+ esac
+
+ fcount="$(find "$1" ! -type d -print | wc -l)"
+ test "$fcount" -eq 0 && return 0
+
+ echo "turnup: $rootdev: partition contains existing files, specify -f to overwrite" >&2
+ return 1;;
+ *) checkmount "$1" && return 0
+
+ echo "turnup: $rootdev: partition does not seem to be a valid root partition" >&2
+ echo " The partition must contain a full operating system. To ensure that" >&2
+ echo " this is the case it is checked for the following, all of which must" >&2
+ echo " exist for the bootstrap to work:" >&2
+ echo
+ echo " 1) A directory /mnt." >&2
+ echo " 2) A command line interpreter program in /bin/sh." >&2
+ echo " 3) The program chroot in /sbin or /usr/sbin." >&2
+ echo " 4) The program init in /sbin, /etc or /bin." >&2
+ echo
+ echo " One or more of these items is missing. Mount $rootdev on /mnt" >&2
+ echo " and examine its contents. You can use turnup disk|nfs -i -f" >&2
+ echo " to copy this operating system onto the disk, but it may overwrite" >&2
+ echo " files on the disk." >&2
+ return 1;;
+ esac
+}
+
+#
+# copy_rootfs old new
+# Make a copy of the given root file system, copying only the
+# directories needed. The root must be the flash file system
+copy_rootfs() {
+ local old new
+ old="$1"
+ new="$2"
+ test -d "$old" -a -d "$new" || {
+ echo "turnup: rootfs: copy $old $new: not a directory" >&2
+ return 1
+ }
+ #
+ # There are no problem file names in the flash file system, so
+ # it is possible to use -print, not -print0. The following
+ # files and directories are not copied:
+ #
+ # /dev/*
+ # /boot, /boot/*
+ # /linuxrc*
+ # /var/*
+ echo "turnup: copying root file system" >&2
+ ( cd "$1"
+ find . -mount -print |
+ sed '\@^./dev/@d;\@^./boot/@d;\@^./boot$@d;\@^./linuxrc@d;\@^./var/@d' |
+ cpio -p -d -m -u "$2"
+ ) || {
+ echo "turnup: rootfs: cpio $old $new failed" >&2
+ return 1
+ }
+ echo "done" >&2
+}
+
+#
+# setup_dev new device_table
+# In flash file systems /dev is in ramfs, in disk systems /dev
+# can be populated permanently. This is done by creating a
+# single entry '.noram' in /dev - the devices init script will
+# then populate the directory without overmounting it. The
+# devices in the passed in device table are also created, but
+# note that this is insufficient, /etc/init.d/devices must
+# also run.
+setup_dev() {
+ test -n "$1" -a -d "$1"/dev -a -r "$2" || {
+ echo "turnup: setup_dev($1,$2): expected a directory and a file" >&2
+ return 1
+ }
+ echo "turnup: initialising dev file system" >&2
+ # init tries to open the following devices:
+ # /dev/console
+ # /dev/tty0
+ # /dev/null
+ # syslog, and maybe other things, only work if fd 1 is valid, therefore
+ # we must create these devices here...
+ makedevs --root="$1" --devtable="$2"
+ :>"$1"/dev/.noram
+ return 0
+}
+
+#
+# setup_bootdev new device_table
+# As above but actually uses the supplied device table - this is possible if
+# the table is just used for boot because the extra setup is not required.
+setup_bootdev() {
+ test -n "$1" -a -d "$1"/dev -a -r "$2" || {
+ echo "turnup: setup_bootdev($1,$2): expected a directory and a file" >&2
+ return 1
+ }
+ # NOTE: this fails silently with 0 return code(!) when a directory
+ # does not exist yet things are created within it.
+ makedevs -r "$1" -D "$2"
+}
+
+#
+# setup_var new type
+# Populates /var.
+# Removes the /var tmpfs entry from /etc/fstab.
+# Creates links from /var into /media/ram for NFS and Memstick.
+setup_var() {
+ local ram_targets directory
+
+ test -n "$1" -a -d "$1"/var || {
+ echo "turnup: setup_var($1,$2): expected a directory" >&2
+ return 1
+ }
+ case "$2" in
+ disk|nfs|memstick);;
+ *) echo "turnup: setup_var($1,$2): expected 'disk', 'nfs' or 'memstick'" >&2
+ return 1;;
+ esac
+ #
+ # populate /var, there is a shell script to do this, but it uses
+ # absolute path names
+ chroot "$1" /bin/busybox sh /etc/init.d/populate-volatile.sh || {
+ echo "turnup: /var: could not populate directory" >&2
+ return 1
+ }
+
+ case "$2" in
+ disk) ram_targets="$INRAM_DISK";;
+ nfs) ram_targets="$INRAM_NFS";;
+ memstick)
+ ram_targets="$INRAM_MEMSTICK";;
+ esac
+
+ for directory in $ram_targets
+ do
+ rm -rf "$1/$directory"
+ ln -s "/media/ram/$directory" "$1/$directory"
+ done
+ # the startup link is left for the moment, this seems safer
+ #rm "$1"/etc/rc?.d/[KS]??populate-var.sh
+ # remove the /var tmpfs entry from the new /etc/fstab
+ sed -i '\@[ ]/var[ ][ ]*tmpfs[ ]@d' "$1"/etc/fstab
+ echo "turnup: tmpfs will no longer be mounted on /var" >&2
+ #
+ # Previous versions of turnup removed populate-var.sh from the
+ # startup links, this one doesn't, so /var can be made back into
+ # a tmpfs just by a change to /etc/fstab.
+ return 0
+}
+
+#
+# setup_syslog new
+# Moves the syslog to a file - appropriate for disk and nfs types, not
+# otherwise.
+setup_syslog() {
+ test -n "$1" -a -d "$1"/etc || {
+ echo "turnup: setup_syslog($1): expected a directory" >&2
+ return 1
+ }
+ #
+ # if the syslog is to the buffer redirect it to a file
+ if egrep -q '^DESTINATION="buffer"' "$1"/etc/syslog.conf
+ then
+ if cp "$1"/etc/syslog.conf "$1"/etc/syslog.conf.sav
+ then
+ # the busybox syslog will fail with ROTATESIZE and ROTATEGENS
+ sed -i 's!DESTINATION="buffer"!DESTINATION="file"!
+ /^ROTATESIZE=/d
+ /^ROTATEGENS=/d' "$1"/etc/syslog.conf
+ echo "turnup: /etc/syslog.conf: changed to file buffering" >&2
+ echo " Old (buffer) version in /etc/syslog.conf.sav" >&2
+ echo " Log messages will be in /var/log/messages" >&2
+ else
+ echo "turnup: /etc/syslog.conf: failed to make a copy" >&2
+ echo " syslog will log to a buffer" >&2
+ fi
+ fi
+ return 0
+}
+
+#
+# setup_rootfs type new device_table
+# Populates the /dev and /var directories, alters the startup to
+# not mount or populate them further. Does the right thing according
+# to the given $type
+setup_rootfs() {
+ local type new table
+ type="$1"
+ new="$2"
+ table="$3"
+
+ test -n "$new" -a -d "$new" -a -f "$table" || {
+ echo "turnup: setup_rootfs($type,$new,$table): expected a directory and a file" >&2
+ return 1
+ }
+
+ case "$type" in
+ flash) return 0;;
+ disk) setup_dev "$new" "$table" &&
+ setup_var "$new" "$type" &&
+ setup_syslog "$new";;
+ memstick)
+ setup_bootdev "$new" "$table" &&
+ setup_var "$new" "$type" ;;
+ nfs) setup_dev "$new" "$table" &&
+ setup_var "$new" "$type" &&
+ setup_syslog "$new";;
+ *) echo "turnup: setup_rootfs: $type: unknown rootfs type" >&2
+ return 1;;
+ esac
+ # return code of last setup function
+}
+
+#
+# setup_fstab new fsdev fstype fsoptions
+# Alters the /etc/fstab entry for / to refer to the correct device and
+# have the correct type and options. Essential for checkroot to remount
+# / with the correct options. Writes the initial uuid file.
+# bad, since sed won't fail even if it changes nothing.
+setup_fstab() {
+ sed -i '\@^[^ ]*[ ][ ]*/[ ]@s@^.*$@'"$2 / $3 $4 1 1"'@' "$1"/etc/fstab
+ egrep -q "^$2 / $3 $4 1 1\$" "$1"/etc/fstab || {
+ echo "turnup: /etc/fstab: root(/) entry not changed" >&2
+ echo " you probably need to check the options in /etc/fstab" >&2
+ echo " to ensure that the root partition is mounted correctly" >&2
+ return 1
+ }
+ #
+ # build $pfile
+ uuid_by_partition >"$1""$pfile" ||
+ echo "turnup: $pfile: blkid failed (ignored)" >&2
+ return 0
+}
+
+#
+# boot_rootfs <boot type> <flash file system> <sleep time> (<device> <uuid>|<nfsroot>) [options]
+# Change the flash partition (not the current root!) to boot off
+# the new root file system
+boot_rootfs() {
+ local type ffs sleep device uuid opt
+
+ type="$1"
+ ffs="$2"
+ sleep="$3"
+ device="$4"
+ uuid=
+
+ # test this first as the test does not depend on the correctness
+ # of the other arguments
+ test -n "$ffs" -a -d "$ffs" || {
+ echo "turnup: boot_rootfs($type, $ffs, $device): expected directory" >&2
+ return 1
+ }
+ test -x "$ffs"/boot/"$type" || {
+ echo "turnup: boot_rootfs($type, $ffs, $device): invalid boot type $type" >&2
+ return 1
+ }
+ shift
+ shift
+
+ case "$type" in
+ disk) test -n "$device" -a -b "$device" || {
+ echo "turnup: boot_rootfs($ffs, $type, $device): expected block device" >&2
+ return 1
+ }
+ uuid="$3"
+ shift 3;;
+ nfs) shift 2;;
+ flash) ;;
+ ram) ;;
+ *) echo "turnup: boot_rootfs($type, $ffs, $device): unknown type" >&2
+ return 1;;
+ esac
+
+ #
+ # The /linuxrc records the correct options to mount the device,
+ # since we have already mounted if correctly with these options
+ # we can be sure (maybe) that the boot will work. If not /boot/disk
+ # falls back to flash.
+ #
+ # This modifies the boot process, until this point no harm has been
+ # done to the system, but at this point the boot rootfs will change
+ rm -f "$ffs"/linuxrc.new || {
+ echo "turnup: boot_rootfs: failed to remove $ffs/linuxrc.new" >&2
+ return 1
+ }
+ case "$type" in
+ flash) ln -s "boot/flash" "$ffs"/linuxrc.new || {
+ echo "turnup: boot_rootfs: failed to create $ffs/linuxrc.new" >&2
+ return 1
+ };;
+ ram) { echo '#!/bin/sh'
+ echo 'rm -f /linuxrc.new'
+ echo 'ln -s boot/flash /linuxrc.new'
+ echo 'mv /linuxrc.new /linuxrc'
+ echo 'exec /boot/ram /dev/ram0'
+ echo 'exec /boot/flash'
+ } >"$ffs"/linuxrc.new &&
+ chmod 744 "$ffs"/linuxrc.new || {
+ echo "turnup: boot_rootfs: failed to write $ffs/linuxrc.new" >&2
+ return 1
+ };;
+ *) { echo '#!/bin/sh'
+ test "$sleep" -gt 0 && echo -n "sleep='$sleep' "
+ test -n "$uuid" && echo -n "UUID='$uuid' "
+ echo -n "exec '/boot/$type' '$device'"
+ for opt in "$@"
+ do
+ echo -n " '$opt'"
+ done
+ echo
+ echo 'exec /boot/flash'
+ } >"$ffs"/linuxrc.new &&
+ chmod 744 "$ffs"/linuxrc.new || {
+ echo "turnup: boot_rootfs: failed to write $ffs/linuxrc.new" >&2
+ return 1
+ };;
+ esac
+ rm -f "$ffs"/linuxrc.sav || {
+ echo "turnup: boot_rootfs: failed to remove $ffs/linuxrc.sav" >&2
+ return 1
+ }
+ ln "$ffs"/linuxrc "$ffs"/linuxrc.sav || {
+ echo "turnup: boot_rootfs: failed to save /linuxrc.sav" >&2
+ return 1
+ }
+ mv -f "$ffs"/linuxrc.new "$ffs"/linuxrc || {
+ echo "turnup: boot_rootfs: failed to install new /linuxrc" >&2
+ return 1
+ }
+ return 0
+}
+
+#
+# disk [-m] [-i] [-s<time>] <device> {options}
+# Carefully copy the flash file system to the named device.
+disk() {
+ local setup_type sleep init device uuid new ffs fst fso
+
+ setup_type=disk
+ sleep=0
+ init=
+ while test $# -gt 0
+ do
+ case "$1" in
+ -f) force="$1"
+ shift;;
+ -m) setup_type=memstick
+ shift;;
+ -i) init="$1"
+ shift;;
+ -s*) sleep="${1#-s}"
+ sleep="${sleep:-10}"
+ shift;;
+ *) break;;
+ esac
+ done
+
+ device="$1"
+ test -n "$device" -a -b "$device" || {
+ echo "turnup disk: $device: block device required" >&2
+ return 1
+ }
+ shift
+
+ # find the uuid if available
+ uuid="$(blkid -c /dev/null -s UUID -o value "$device")"
+ # XXX nasty hack - using the UUID fails on storcenter, for now,
+ # probably due to various devfs problems. fix later.
+ if [ $(machine) = storcenter ]; then
+ uuid=
+ fi
+
+ # make temporary directories for the mount points
+ new="/tmp/rootfs.$$"
+ ffs="/tmp/flashdisk.$$"
+ mkdir "$new" "$ffs" || {
+ echo "turnup: disk: failed to create temporary directories" >&2
+ return 1
+ }
+
+ # make sure we can get to the flash file system first
+ get_flash "$ffs" || {
+ rmdir "$new" "$ffs"
+ return 1
+ }
+
+ # Now mount the device with the given options, note that specifying
+ # read only is *not* an option, this is important because the boot/disk
+ # script needs a rw file system
+ status=1
+ fst=
+ fso="$(fsoptions "$@")"
+ if if test -n "$uuid"
+ then
+ mount "$@" -U "$uuid" "$new"
+ else
+ mount "$@" "$device" "$new"
+ fi
+ then
+ fst="$(fstype "$new")"
+ umount "$new" ||
+ echo "turnup disk: $device($new): umount does not seem to work" >&2
+ fi
+
+ if test -n "$fst" &&
+ if test -n "$uuid"
+ then
+ mount -t "$fst" -o "$fso" -U "$uuid" "$new"
+ else
+ mount -t "$fst" -o "$fso" "$device" "$new"
+ fi
+ then
+ if rootdev="$device" check_rootfs $init "$new" && {
+ test -z "$init" || {
+ copy_rootfs "$ffs" "$new" &&
+ setup_rootfs "$setup_type" "$new" "$ffs"/etc/device_table
+ }
+ }
+ then
+ setup_fstab "$new" "$device" "$fst" "$fso"
+ status=0
+ fi
+
+ # clean up the disk. It is worrying if this umount fails!
+ umount "$new" || test "$force" = "-f" || {
+ echo "turnup disk: $device: umount failed" >&2
+ echo " you must unmount this device cleanly yourself, then use" >&2
+ if test -z "$init"
+ then
+ echo " turnup with the -f option to boot from the device" >&2
+ else
+ echo " turnup without the -i option to boot from the device" >&2
+ fi
+ status=1
+ }
+
+ # if everything went ok boot from this disk
+ if test $status -eq 0
+ then
+ # memsticks boot like disks, so ignore the -m
+ boot_rootfs disk "$ffs" "$sleep" "$device" "$uuid" -t "$fst" -o "$fso"
+ fi
+ else
+ echo "turnup disk: $device($*): unable to mount device on $new" >&2
+ # If it worked first time
+ if test -n "$fst"
+ then
+ echo " options used: -t $fst -o $fso [error in this script]" >&2
+ test -n "$uuid" &&
+ echo " uuid: $uuid (passed with -U)" >&2
+ fi
+ fi
+
+ # clean up the flash file system
+ umount "$ffs"
+ rmdir "$new" "$ffs"
+ return $status
+}
+
+#
+# boot_reset <type>
+# Resets the boot type to flash or ram, as appropriate
+boot_reset() {
+ local ffs typ status
+
+ case "$1" in
+ flash|ram)type="$1"
+ shift;;
+ *) echo "turnup: boot_reset($1): invalid type" >&2
+ return 1;;
+ esac
+
+ ffs="/tmp/flashdisk.$$"
+ mkdir "$ffs" || {
+ echo "turnup: $1: failed to create temporary directory" >&2
+ return 1
+ }
+
+ get_flash "$ffs" || {
+ rmdir "$ffs"
+ return 1
+ }
+
+ # now try to set the /linuxrc appropriately
+ boot_rootfs "$type" "$ffs"
+ status=$?
+
+ # clean up
+ umount "$ffs"
+ rmdir "$ffs"
+ return $status
+}
+
+#
+# nfs [-i] <root partition> {options}
+# Copy the flash file system to the given NFS root partition.
+nfs() {
+ local init nfsroot new ffs
+
+ init=
+ while test $# -gt 0
+ do
+ case "$1" in
+ -i) init="$1"
+ shift;;
+ -f) force="$1"
+ shift;;
+ *) break;;
+ esac
+ done
+
+ nfsroot="$1"
+ test -n "$nfsroot" || {
+ echo "turnup nfs: $nfsroot: NFS root file system required" >&2
+ return 1
+ }
+ shift
+
+ # make temporary directories for the mount points
+ new="/tmp/rootfs.$$"
+ ffs="/tmp/flashdisk.$$"
+ mkdir "$new" "$ffs" || {
+ echo "turnup nfs: failed to create temporary directories" >&2
+ return 1
+ }
+
+ # make sure we can get to the flash file system first
+ get_flash "$ffs" || {
+ rmdir "$new" "$ffs"
+ return 1
+ }
+
+ # Now mount the device with the given options, note that specifying
+ # read only is *not* an option, this is important because the boot/disk
+ # script needs a rw file system
+ status=1
+ fst=
+ # These settings for for NFS, something better will probably have to
+ # be done to support other network file systems.
+ nfsopt="nolock,noatime,hard,intr,rsize=1024,wsize=1024"
+ fso="$(fsoptions -o "$nfsopt" "$@")"
+ if mount -o "$nfsopt" "$@" "$nfsroot" "$new"
+ then
+ fst="$(fstype "$new")"
+ umount "$new" ||
+ echo "turnup nfs: $nfsroot($new): umount does not seem to work" >&2
+ fi
+
+ if test -n "$fst" && mount -t "$fst" -o "$fso" "$nfsroot" "$new"
+ then
+ if :>"$new"/ttt && test -O "$new"/ttt && rm "$new"/ttt
+ then
+ if rootdev="$nfsroot" check_rootfs $init "$new" && {
+ test -z "$init" || {
+ copy_rootfs "$ffs" "$new" &&
+ setup_rootfs nfs "$new" "$ffs"/etc/device_table
+ }
+ }
+ then
+ setup_fstab "$new" "$nfsroot" "$fst" "$fso"
+ status=0
+ fi
+ else
+ echo "turnup nfs: $nfsroot: partition must be exported no_root_squash" >&2
+ fi
+
+ # clean up the disk. It is worrying if this umount fails!
+ umount "$new" || test "$force" = "-f" || {
+ echo "turnup nfs: $nfsroot: umount failed" >&2
+ if test $status -eq 0
+ then
+ echo " you must unmount this partition cleanly yourself, then use" >&2
+ if test -z "$init"
+ then
+ echo " turnup with the -f option to boot from the NFS root" >&2
+ else
+ echo " turnup without the -i option to boot from the NFS root" >&2
+ fi
+ status=1
+ fi
+ }
+
+ # if everything went ok boot from this disk
+ if test $status -eq 0
+ then
+ # the options used are exactly those which worked before.
+ boot_rootfs nfs "$ffs" 0 "$nfsroot" -t nfs -o "$fso"
+ fi
+ else
+ echo "turnup nfs: $nfsroot($*): unable to mount device on $new" >&2
+ # If it worked first time
+ if test -n "$fst"
+ then
+ echo " options obtained: -t $fst -o $fso" >&2
+ fi
+ fi
+
+ # clean up the flash file system
+ umount "$ffs"
+ rmdir "$new" "$ffs"
+ return $status
+}
+
+#
+# read_one 'prompt' 'group' 'name'
+# read a single value
+read_one() {
+ local n o
+ o="$(sysval "$2" "$3")"
+ echo -n "$1 [$o]: " >/dev/tty
+ read n </dev/tty
+ test -z "$n" && n="$o"
+ eval "$3='$n'"
+}
+
+#
+# init_network
+# Change the network initialisation
+init_network() {
+ # fix the root password
+ echo "Please enter a new password for 'root'." >/dev/tty
+ echo "The password must be non-empty for ssh login to succeed!" >/dev/tty
+ passwd
+ # now the network configuration
+ read_one "Host name" network disk_server_name
+ read_one "Domain name" network w_d_name
+ read_one "Boot protocol (dhcp|static)" network bootproto
+ case "$bootproto" in
+ static) read_one "IP address" network ip_addr
+ read_one "IP netmask" network netmask
+ read_one "IP gateway" network gateway
+ read_one "First DNS server" network dns_server1
+ read_one "Second DNS server" network dns_server2
+ read_one "Third DNS server" network dns_server3
+ echo "$ip_addr $disk_server_name" >> /etc/hosts
+ ;;
+ dhcp) sed -i -e "s/localhost\$/localhost $disk_server_name/" /etc/hosts
+ ;;
+ *) bootproto=dhcp;;
+ esac
+ #
+ # The other stuff which cannot be changed
+ hw_addr="$(config mac)"
+ lan_interface="$(config iface)"
+ #
+ # Write this out to a new sysconf
+ { echo "[network]"
+ echo "hw_addr=$hw_addr"
+ echo "lan_interface=$lan_interface"
+ test -n "$disk_server_name" && echo "disk_server_name=$disk_server_name"
+ test -n "$w_d_name" && echo "w_d_name=$w_d_name"
+ echo "bootproto=$bootproto"
+ case "$bootproto" in
+ static) echo "ip_addr=$ip_addr"
+ test -n "$netmask" && echo "netmask=$netmask"
+ test -n "$gateway" && echo "gateway=$gateway"
+ test -n "$dns_server1" && echo "dns_server1=$dns_server1"
+ test -n "$dns_server2" && echo "dns_server2=$dns_server2"
+ test -n "$dns_server3" && echo "dns_server3=$dns_server3"
+ ;;
+ esac
+ } >/etc/default/sysconf
+ #
+ # And reload the result
+ sysconf reload
+ #
+ # The remove the spurious 'init' motd
+ rm /etc/motd
+}
+
+#
+# Basic command switch (this should be the only thing in this
+# script which actually does anything!)
+case "$1" in
+init) shift
+ if init_network "$@"
+ then
+ echo "turnup init: you must reboot for the changes to take effect" >&2
+ echo " You may want to run 'turnup preserve' to save these settings," >&2
+ echo " after making any additional configuration changes which you" >&2
+ echo " require." >&2
+ else
+ exit 1
+ fi;;
+disk) shift
+ disk "$@";;
+memstick)
+ shift
+ disk -m "$@" -o noatime;;
+nfs) shift
+ nfs "$@";;
+flash) boot_reset flash;;
+ram) boot_reset ram;;
+preserve)
+ shift
+ sysconf save "$@";;
+restore)
+ shift
+ sysconf restore "$@";;
+*) echo "\
+usage: turnup command [options]
+ commands:
+ help
+ output this help
+ init
+ correct errors in network information
+ initialise network information when DHCP is not available
+ change network information
+ disk [-i] [-s<seconds>] <device>|<uuid> [mount options]
+ With -i make <device> a bootable file system then (with or
+ without -i) arrange for the next reboot to use that device.
+ The device must already be formatted as a file system, with
+ -i it must be completely empty, without it must contain an
+ apparently bootable file system. -s (for example -s5)
+ specifies a delay in seconds to wait at boot time before
+ mounting the device.
+ memstick [-i] <device>|<uuid> [mount options]
+ Behaves as disk however options appropriate to a flash memory
+ stick are automatically added
+ nfs [-i] <nfs mount path> [mount options]
+ <nfs mount path> must be a mountable NFS file system. With
+ -i the partition must be empty and is initialised with a
+ bootable file system. Without -i the partition must already
+ contain a bootable file system. In either case the NFS
+ partition must be available to be mounted without root id
+ sqashing (i.e. root must be root) and it will be selected
+ as the root file system for subsequent reboots.
+ A default set of -o options are provided, additional options
+ may be given on the command line (multiple -o options will
+ be combined into a single -o).
+ flash
+ Revert to booting from the flash disk on next reboot.
+ ram
+ Boot (once) into a ramdisk, subsequent boots will be to
+ the flash file system.
+ preserve
+ Save the system configuration to the SysConf partition, you
+ will need to create the SysConf partition from the boot loader
+ before using this if SysConf does not already exist. This
+ just runs 'sysconf save'.
+ restore
+ Restore a previously saved system configuration. This just
+ runs 'sysconf restore'.
+ disk formatting:
+ The argument to 'nfs' or 'disk' must be an empty partition
+ of sufficient size to hold the root file system (at least
+ 16MByte but more is recommended to allow package installation).
+ An appropriate ext3 partition can be made using the command:
+
+ mke2fs -j <device> # for example: /dev/sda1
+
+ An appropriate NFS partition can be emptied using 'rm', but
+ must be set up (exported) on the NFS server." >&2
+ exit 0;;
+esac
+# Exit with return code from command.
diff --git a/packages/foonas-init/foonas-init_0.10.bb b/packages/foonas-init/foonas-init_0.10.bb
new file mode 100644
index 0000000000..c8a1b05232
--- /dev/null
+++ b/packages/foonas-init/foonas-init_0.10.bb
@@ -0,0 +1,122 @@
+DESCRIPTION = "FooNAS initial boot and config"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "GPL"
+DEPENDS = "base-files devio"
+RDEPENDS = "busybox devio"
+PR = "r1"
+
+SRC_URI = "file://initscripts/fixfstab \
+ file://initscripts/syslog.buffer \
+ file://initscripts/syslog.file \
+ file://initscripts/syslog.network \
+ file://initscripts/rmrecovery \
+ file://initscripts/sysconfsetup \
+ file://initscripts/umountinitrd.sh \
+ file://initscripts/loadmodules.sh \
+ file://functions \
+ file://modulefunctions \
+ file://conffiles \
+ file://sysconf \
+ file://turnup \
+ file://reflash \
+ file://links.conf \
+ "
+
+SBINPROGS = ""
+USRSBINPROGS = ""
+CPROGS = "${USRSBINPROGS} ${SBINPROGS}"
+SCRIPTS = "turnup reflash sysconf"
+INITSCRIPTS = "syslog.buffer syslog.file syslog.network \
+ rmrecovery sysconfsetup umountinitrd.sh \
+ fixfstab loadmodules.sh"
+
+# This just makes things easier...
+
+S="${WORKDIR}"
+
+do_compile() {
+ set -ex
+ for p in ${CPROGS}
+ do
+ ${CC} ${CFLAGS} -o $p $p.c
+ done
+ set +ex
+}
+
+do_install() {
+ set -ex
+
+ # Directories
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/modutils \
+ ${D}${sysconfdir}/udev \
+ ${D}${sbindir} \
+ ${D}${base_sbindir} \
+ ${D}/initrd \
+
+ # C programs
+ for p in ${USRSBINPROGS}
+ do
+ install -m 0755 $p ${D}${sbindir}/$p
+ done
+ for p in ${SBINPROGS}
+ do
+ install -m 0755 $p ${D}${base_sbindir}/$p
+ done
+
+ # Shell scripts
+ for p in ${SCRIPTS}
+ do
+ install -m 0755 $p ${D}${base_sbindir}/$p
+ done
+
+ #
+ # Init scripts
+ install -m 0644 functions ${D}${sysconfdir}/default
+ install -m 0644 modulefunctions ${D}${sysconfdir}/default
+ for s in ${INITSCRIPTS}
+ do
+ install -m 0755 initscripts/$s ${D}${sysconfdir}/init.d/
+ done
+
+ #
+ # Udev configuration files
+ install -m 0644 links.conf ${D}${sysconfdir}/udev
+
+ # Configuration files
+ install -m 0644 conffiles ${D}${sysconfdir}/default
+
+ set +ex
+}
+
+# NB: do not use '08' (etc) for the first argument after start/stop,
+# the value is interpreted as an octal number if there is a leading
+# zero.
+pkg_postinst_foonas-init() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt hwclock.sh start 8 S . start 45 0 6 .
+ update-rc.d $opt umountinitrd.sh start 9 S .
+ update-rc.d $opt fixfstab start 10 S .
+ update-rc.d $opt syslog.buffer start 11 S . start 49 0 6 .
+ update-rc.d $opt sysconfsetup start 12 S .
+ update-rc.d $opt loadmodules.sh start 21 S .
+ update-rc.d $opt syslog.file start 39 S . start 47 0 6 .
+ update-rc.d $opt syslog.network start 44 S . start 39 0 6 .
+ update-rc.d $opt rmrecovery start 99 1 2 3 4 5 .
+}
+
+pkg_postrm_foonas-init() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ for s in ${INITSCRIPTS}
+ do
+ update-rc.d $opt "$s" remove
+ done
+}
+
+PACKAGES = "${PN}"
+FILES_${PN} = "/"
diff --git a/packages/gpephone/libim-0.1/.mtn2git_empty b/packages/freetype/freetype-2.3.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gpephone/libim-0.1/.mtn2git_empty
+++ b/packages/freetype/freetype-2.3.1/.mtn2git_empty
diff --git a/packages/freetype/freetype-2.3.1/fix-x86_64-build.patch b/packages/freetype/freetype-2.3.1/fix-x86_64-build.patch
new file mode 100644
index 0000000000..ae504dcb0b
--- /dev/null
+++ b/packages/freetype/freetype-2.3.1/fix-x86_64-build.patch
@@ -0,0 +1,26 @@
+Index: freetype-2.3.1/builds/unix/configure.raw
+===================================================================
+--- freetype-2.3.1.orig/builds/unix/configure.raw
++++ freetype-2.3.1/builds/unix/configure.raw
+@@ -40,7 +40,7 @@ AC_SUBST(EXEEXT)
+ # checks for native programs to generate building tool
+
+ if test ${cross_compiling} = yes; then
+- AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build-gcc})
++ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
+Index: freetype-2.3.1/builds/unix/configure.ac
+===================================================================
+--- freetype-2.3.1.orig/builds/unix/configure.ac
++++ freetype-2.3.1/builds/unix/configure.ac
+@@ -40,7 +40,7 @@ AC_SUBST(EXEEXT)
+ # checks for native programs to generate building tool
+
+ if test ${cross_compiling} = yes; then
+- AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build-gcc})
++ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
diff --git a/packages/gstreamer/gst-plugins/.mtn2git_empty b/packages/freetype/freetype-2.3.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gstreamer/gst-plugins/.mtn2git_empty
+++ b/packages/freetype/freetype-2.3.4/.mtn2git_empty
diff --git a/packages/freetype/freetype-2.3.4/fix-x86_64-build.patch b/packages/freetype/freetype-2.3.4/fix-x86_64-build.patch
new file mode 100644
index 0000000000..ae504dcb0b
--- /dev/null
+++ b/packages/freetype/freetype-2.3.4/fix-x86_64-build.patch
@@ -0,0 +1,26 @@
+Index: freetype-2.3.1/builds/unix/configure.raw
+===================================================================
+--- freetype-2.3.1.orig/builds/unix/configure.raw
++++ freetype-2.3.1/builds/unix/configure.raw
+@@ -40,7 +40,7 @@ AC_SUBST(EXEEXT)
+ # checks for native programs to generate building tool
+
+ if test ${cross_compiling} = yes; then
+- AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build-gcc})
++ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
+Index: freetype-2.3.1/builds/unix/configure.ac
+===================================================================
+--- freetype-2.3.1.orig/builds/unix/configure.ac
++++ freetype-2.3.1/builds/unix/configure.ac
+@@ -40,7 +40,7 @@ AC_SUBST(EXEEXT)
+ # checks for native programs to generate building tool
+
+ if test ${cross_compiling} = yes; then
+- AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build-gcc})
++ AC_CHECK_PROG(CC_BUILD, ${build}-gcc, ${build}-gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, gcc, gcc)
+ test -z "${CC_BUILD}" && AC_CHECK_PROG(CC_BUILD, cc, cc, , , /usr/ucb/cc)
+ test -z "${CC_BUILD}" && AC_MSG_ERROR([cannot find native C compiler])
diff --git a/packages/freetype/freetype-native_2.1.10.bb b/packages/freetype/freetype-native_2.1.10.bb
index b5e8b307cd..6f99f7ee84 100644
--- a/packages/freetype/freetype-native_2.1.10.bb
+++ b/packages/freetype/freetype-native_2.1.10.bb
@@ -1,5 +1,5 @@
require freetype_${PV}.bb
-inherit native
+inherit pkgconfig native
DEPENDS = ""
FILESPATH = "${FILE_DIRNAME}/freetype-${PV}:${FILE_DIRNAME}/freetype:${FILE_DIRNAME}/files"
@@ -11,8 +11,7 @@ do_configure() {
}
do_stage() {
- autotools_stage_includes
- oe_libinstall -so -a -C objs libfreetype ${STAGING_LIBDIR}
+ autotools_stage_all
}
do_install() {
diff --git a/packages/freetype/freetype_2.3.1.bb b/packages/freetype/freetype_2.3.1.bb
new file mode 100644
index 0000000000..79633a3d7f
--- /dev/null
+++ b/packages/freetype/freetype_2.3.1.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Freetype font rendering library"
+SECTION = "libs"
+LICENSE = "freetype"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/freetype/freetype-${PV}.tar.bz2 \
+ file://fix-x86_64-build.patch;patch=1"
+# file://no-hardcode.patch;patch=1"
+# file://configure.patch;patch=1 \
+S = "${WORKDIR}/freetype-${PV}"
+
+inherit autotools pkgconfig binconfig
+
+DEFAULT_PREFERENCE = "-1"
+
+LIBTOOL = "${S}/builds/unix/${HOST_SYS}-libtool"
+EXTRA_OEMAKE = "'LIBTOOL=${LIBTOOL}'"
+EXTRA_OECONF = "--without-zlib"
+
+do_configure() {
+ cd builds/unix
+ gnu-configize
+ aclocal -I .
+ autoconf
+ cd ${S}
+ oe_runconf
+}
+
+do_compile_prepend() {
+ ${BUILD_CC} -o objs/apinames src/tools/apinames.c
+}
+
+do_stage() {
+ export LIBTOOL='${LIBTOOL}'
+ autotools_stage_includes
+ oe_libinstall -so -a -C objs libfreetype ${STAGING_LIBDIR}
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}"
diff --git a/packages/freetype/freetype_2.3.4.bb b/packages/freetype/freetype_2.3.4.bb
new file mode 100644
index 0000000000..c1febe8a90
--- /dev/null
+++ b/packages/freetype/freetype_2.3.4.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Freetype font rendering library"
+SECTION = "libs"
+LICENSE = "freetype"
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/freetype/freetype-${PV}.tar.bz2 \
+ file://fix-x86_64-build.patch;patch=1 \
+ file://no-hardcode.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/freetype-${PV}"
+
+inherit autotools pkgconfig binconfig
+
+DEFAULT_PREFERENCE = "-1"
+
+LIBTOOL = "${S}/builds/unix/${HOST_SYS}-libtool"
+EXTRA_OEMAKE = "'LIBTOOL=${LIBTOOL}'"
+EXTRA_OECONF = "--without-zlib"
+
+do_configure() {
+ cd builds/unix
+ gnu-configize
+ aclocal -I .
+ autoconf
+ cd ${S}
+ oe_runconf
+}
+
+do_compile_prepend() {
+ ${BUILD_CC} -o objs/apinames src/tools/apinames.c
+}
+
+do_stage() {
+ export LIBTOOL='${LIBTOOL}'
+ autotools_stage_all
+ oe_libinstall -so -a -C objs libfreetype ${STAGING_LIBDIR}
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}"
diff --git a/packages/ftpd-topfield/ftpd-topfield_0.7.1.bb b/packages/ftpd-topfield/ftpd-topfield_0.7.1.bb
deleted file mode 100755
index 5ba92e0930..0000000000
--- a/packages/ftpd-topfield/ftpd-topfield_0.7.1.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-# This package builds the ftpd-topfield program
-PR = "r0"
-DESCRIPTION = "ftpd-topfield - FTP access to TopField PVR"
-HOMEPAGE = "http://sourceforge.net/projects/puppy"
-SECTION = "net"
-LICENSE = "MIT"
-
-SRC_URI = "cvs://anonymous@puppy.cvs.sourceforge.net/cvsroot/puppy;method=pserver;module=ftpd-topfield;tag=FTPD_TOPFIELD_0_7_1 \
- cvs://anonymous@puppy.cvs.sourceforge.net/cvsroot/puppy;method=pserver;module=libtopfield;tag=FTPD_TOPFIELD_0_7_1 \
- file://init"
-
-# The source will end up in the subdirectory 'ftpd-topfield' - no release name
-S = "${WORKDIR}/ftpd-topfield"
-
-inherit update-rc.d
-
-INITSCRIPT_NAME = "ftpd-topfield"
-INITSCRIPT_PARAMS = "defaults"
-
-# Just the one package at present
-PACKAGES = "${PN}"
-
-inherit autotools
-
-do_compile() {
- oe_runmake
-}
-
-do_install() {
- install -d ${D}${sbindir}
- install -m 0755 ${S}/ftpd ${D}${sbindir}/ftpd-topfield
- install -d ${D}${sysconfdir}/ ${D}${sysconfdir}/init.d
- install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ftpd-topfield
-}
diff --git a/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb
new file mode 100755
index 0000000000..75d963f6da
--- /dev/null
+++ b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb
@@ -0,0 +1,33 @@
+# This package builds the ftpd-topfield program
+DESCRIPTION = "ftpd-topfield - FTP access to TopField PVR"
+HOMEPAGE = "http://sourceforge.net/projects/puppy"
+SECTION = "net"
+LICENSE = "MIT"
+
+SRC_URI = "cvs://anonymous@puppy.cvs.sourceforge.net/cvsroot/puppy;method=pserver;module=ftpd-topfield;tag=FTPD_TOPFIELD_0_7_4 \
+ cvs://anonymous@puppy.cvs.sourceforge.net/cvsroot/puppy;method=pserver;module=libtopfield;tag=FTPD_TOPFIELD_0_7_4 \
+ file://init"
+
+# The source will end up in the subdirectory 'ftpd-topfield' - no release name
+S = "${WORKDIR}/ftpd-topfield"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "ftpd-topfield"
+INITSCRIPT_PARAMS = "defaults"
+
+# Just the one package at present
+PACKAGES = "${PN}"
+
+inherit autotools
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${S}/ftpd ${D}${sbindir}/ftpd-topfield
+ install -d ${D}${sysconfdir}/ ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ftpd-topfield
+}
diff --git a/packages/gtk+/gtk+-2.10.3/.mtn2git_empty b/packages/fuse/fuse-2.6.5/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.10.3/.mtn2git_empty
+++ b/packages/fuse/fuse-2.6.5/.mtn2git_empty
diff --git a/packages/fuse/fuse-2.6.5/not-run-updaterc.d-on-host.patch b/packages/fuse/fuse-2.6.5/not-run-updaterc.d-on-host.patch
new file mode 100644
index 0000000000..2496b77f70
--- /dev/null
+++ b/packages/fuse/fuse-2.6.5/not-run-updaterc.d-on-host.patch
@@ -0,0 +1,21 @@
+--- fuse-2.6.3/util/Makefile.am~ 2007-02-27 22:50:15.000000000 -0600
++++ fuse-2.6.3/util/Makefile.am 2007-02-27 22:53:31.000000000 -0600
+@@ -29,10 +29,6 @@
+ $(INSTALL_PROGRAM) $(srcdir)/mount.fuse $(DESTDIR)$(MOUNT_FUSE_PATH)/mount.fuse
+ $(mkdir_p) $(DESTDIR)$(INIT_D_PATH)
+ $(INSTALL_PROGRAM) $(srcdir)/init_script $(DESTDIR)$(INIT_D_PATH)/fuse
+- @if test -x /usr/sbin/update-rc.d; then \
+- echo "/usr/sbin/update-rc.d fuse start 34 S . start 41 0 6 . || true"; \
+- /usr/sbin/update-rc.d fuse start 34 S . start 41 0 6 . || true; \
+- fi
+
+ install-data-local:
+ $(mkdir_p) $(DESTDIR)$(UDEV_RULES_PATH)
+@@ -42,7 +38,3 @@
+ rm -f $(DESTDIR)$(MOUNT_FUSE_PATH)/mount.fuse
+ rm -f $(DESTDIR)$(UDEV_RULES_PATH)/99-fuse.rules
+ rm -f $(DESTDIR)$(INIT_D_PATH)/fuse
+- @if test -x /usr/sbin/update-rc.d; then \
+- echo "/usr/sbin/update-rc.d fuse remove || true"; \
+- /usr/sbin/update-rc.d fuse remove || true; \
+- fi
diff --git a/packages/fuse/fuse-module_2.5.3.bb b/packages/fuse/fuse-module_2.5.3.bb
deleted file mode 100644
index 4c71b0b9f9..0000000000
--- a/packages/fuse/fuse-module_2.5.3.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-require fuse.inc
-
-RRECOMMENDS = "fuse"
-PR = "r1"
-
-S = "${WORKDIR}/fuse-${PV}"
-FILES_${PN} = "/dev ${base_libdir}/modules ${sysconfdir}"
-EXTRA_OECONF = " --with-kernel=${STAGING_KERNEL_DIR}"
-
-inherit module
-
-do_configure() {
- cd ${S} ; oe_runconf
-}
-
-do_compile(){
- LDFLAGS=""
- cd ${S}/kernel
- oe_runmake
-}
-
-fakeroot do_install() {
- LDFLAGS=""
- install -d ${D}${sysconfdir}/udev/rules.d/
- install -m 644 util/udev.rules ${D}${sysconfdir}/udev/rules.d/
- cd ${S}/kernel
- oe_runmake install DESTDIR=${D}
-}
-
diff --git a/packages/fuse/fuse-module_2.6.5.bb b/packages/fuse/fuse-module_2.6.5.bb
new file mode 100644
index 0000000000..6d516185be
--- /dev/null
+++ b/packages/fuse/fuse-module_2.6.5.bb
@@ -0,0 +1,29 @@
+require fuse.inc
+
+RRECOMMENDS = "fuse"
+PR = "r1"
+
+S = "${WORKDIR}/fuse-${PV}"
+FILES_${PN} = "/dev ${base_libdir}/modules ${sysconfdir}"
+EXTRA_OECONF = " --enable-kernel-module --with-kernel=${STAGING_KERNEL_DIR}"
+
+inherit module
+
+do_configure() {
+ cd ${S} ; oe_runconf
+}
+
+do_compile(){
+ LDFLAGS=""
+ cd ${S}/kernel
+ oe_runmake
+}
+
+fakeroot do_install() {
+ LDFLAGS=""
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ install -m 644 util/udev.rules ${D}${sysconfdir}/udev/rules.d/
+ cd ${S}/kernel
+ oe_runmake install DESTDIR=${D}
+}
+
diff --git a/packages/fuse/fuse.inc b/packages/fuse/fuse.inc
index abc408561a..41952050a4 100644
--- a/packages/fuse/fuse.inc
+++ b/packages/fuse/fuse.inc
@@ -4,7 +4,7 @@ LICENSE = "GPL"
DEPENDS = "fakeroot-native"
RRECOMMENDS_fuse = "fuse-module kernel-module-fuse"
-SRC_URI = "${SOURCEFORGE_MIRROR}/fuse/${P}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/fuse/fuse-${PV}.tar.gz"
inherit autotools pkgconfig
diff --git a/packages/fuse/fuse_2.5.3.bb b/packages/fuse/fuse_2.5.3.bb
index 5f5ce701d3..b3f45381a0 100644
--- a/packages/fuse/fuse_2.5.3.bb
+++ b/packages/fuse/fuse_2.5.3.bb
@@ -1,10 +1,10 @@
require fuse.inc
-PR = "r1"
+PR = "r2"
#package utils in a sperate package and stop debian.bbclass renaming it to libfuse-utils, we want it to be fuse-utils
PACKAGES += "fuse-utils"
-FILES_${PN} = "${libdir}/*.so*"
+FILES_${PN} = "${libdir}/*.so.*"
FILES_${PN}-dev += "${libdir}/*.la"
FILES_fuse-utils = "${bindir} ${base_sbindir}"
DEBIAN_NOAUTONAME_fuse-utils = "1"
diff --git a/packages/fuse/fuse_2.6.5.bb b/packages/fuse/fuse_2.6.5.bb
new file mode 100644
index 0000000000..a1795e7f0c
--- /dev/null
+++ b/packages/fuse/fuse_2.6.5.bb
@@ -0,0 +1,27 @@
+require fuse.inc
+
+PR = "r0"
+
+SRC_URI += "file://not-run-updaterc.d-on-host.patch;patch=1"
+
+EXTRA_OECONF = " --disable-kernel-module"
+
+#package utils in a sperate package and stop debian.bbclass renaming it to libfuse-utils, we want it to be fuse-utils
+PACKAGES =+ "fuse-utils-dbg fuse-utils libulockmgr libulockmgr-dev libulockmgr-dbg"
+FILES_${PN} += "${libdir}/libfuse.so.*"
+FILES_${PN}-dev += "${libdir}/libfuse*.la"
+
+FILES_libulockmgr = "${libdir}/libulockmgr.so.*"
+FILES_libulockmgr-dev += "${libdir}/libulock*.la"
+FILES_libulockmgr-dbg += "${libdir}/.debug/libulock*"
+
+FILES_fuse-utils = "${bindir} ${base_sbindir}"
+FILES_fuse-utils-dbg = "${bindir}/.debug ${base_sbindir}/.debug"
+DEBIAN_NOAUTONAME_fuse-utils = "1"
+DEBIAN_NOAUTONAME_fuse-utils-dbg = "1"
+
+fakeroot do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/fuse/gmailfs_0.7.2.bb b/packages/fuse/gmailfs_0.7.2.bb
deleted file mode 100644
index 6f286ad4cf..0000000000
--- a/packages/fuse/gmailfs_0.7.2.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "GmailFS provides a mountable Linux filesystem which uses your Gmail account as its storage medium."
-HOMEPAGE = "http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html"
-LICENSE = "GPL"
-
-DEPENDS = "fuse python-libgmail python-fuse"
-RDEPENDS = "fuse python-libgmail python-fuse python-unixadmin python-lang python-textutils python-core"
-
-SRC_URI = "http://richard.jones.name/google-hacks/gmail-filesystem/gmailfs-0.7.2.tar.gz"
-
-
-do_install() {
-
-install -d ${D}${datadir}/gmailfs
-install -d ${D}${bindir}
-install -d ${D}${sysconfdir}
-
-install -m 755 ${S}/gmailfs.py ${D}${datadir}/gmailfs/
-install -m 755 ${S}/mount.gmailfs ${D}${bindir}
-install -m 644 ${S}/*.conf ${D}${sysconfdir}
-
-}
-
diff --git a/packages/fuse/gmailfs_0.7.3.bb b/packages/fuse/gmailfs_0.7.3.bb
new file mode 100644
index 0000000000..9f1c676c87
--- /dev/null
+++ b/packages/fuse/gmailfs_0.7.3.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "GmailFS provides a mountable Linux filesystem which uses your Gmail account as its storage medium."
+HOMEPAGE = "http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html"
+LICENSE = "GPLv2"
+
+DEPENDS = "fuse python-libgmail python-fuse"
+RDEPENDS = "fuse python-libgmail python-fuse python-unixadmin python-lang python-textutils python-core"
+
+SRC_URI = "http://richard.jones.name/google-hacks/gmail-filesystem/${PN}-${PV}.tar.gz"
+
+
+do_install() {
+
+install -d ${D}${datadir}/gmailfs
+install -d ${D}${bindir}
+install -d ${D}${sysconfdir}
+
+install -m 755 ${S}/gmailfs.py ${D}${datadir}/gmailfs/
+install -m 755 ${S}/mount.gmailfs ${D}${bindir}
+install -m 644 ${S}/*.conf ${D}${sysconfdir}
+
+}
+
diff --git a/packages/fuse/sshfs-fuse_1.7.bb b/packages/fuse/sshfs-fuse_1.7.bb
new file mode 100644
index 0000000000..1f40ac8c8c
--- /dev/null
+++ b/packages/fuse/sshfs-fuse_1.7.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "This is a filesystem client based on the SSH File Transfer Protocol using FUSE."
+AUTHOR = "Miklos Szeredi <miklos@szeredi.hu>"
+HOMEPAGE = "http://fuse.sourceforge.net/sshfs.html"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "glib-2.0 fuse"
+
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/fuse/${P}.tar.gz"
+
+S = "${WORKDIR}/${P}"
+
+inherit autotools
+
+FILES_${PN} += "${libdir}/sshnodelay.so"
diff --git a/packages/gaim/files/purple-OE-branding.patch b/packages/gaim/files/purple-OE-branding.patch
new file mode 100644
index 0000000000..99c61375ce
--- /dev/null
+++ b/packages/gaim/files/purple-OE-branding.patch
@@ -0,0 +1,14 @@
+--- /tmp/irc.h 2007-08-04 20:27:10.000000000 +0200
++++ pidgin-2.1.0/libpurple/protocols/irc/irc.h 2007-08-04 20:28:15.318400000 +0200
+@@ -35,9 +35,9 @@
+ #define IRC_DEFAULT_SSL_PORT 994
+
+ #define IRC_DEFAULT_CHARSET "UTF-8"
+-#define IRC_DEFAULT_ALIAS "purple"
++#define IRC_DEFAULT_ALIAS "OE-user"
+
+-#define IRC_DEFAULT_QUIT "Leaving."
++#define IRC_DEFAULT_QUIT "Powered by OE: www.openembedded.org"
+
+ #define IRC_INITIAL_BUFSIZE 1024
+
diff --git a/packages/gaim/gaim_2.0.0-cvs-mco1.bb b/packages/gaim/gaim_2.0.0-cvs-mco1.bb
index c201f7a0f7..bf8591920c 100644
--- a/packages/gaim/gaim_2.0.0-cvs-mco1.bb
+++ b/packages/gaim/gaim_2.0.0-cvs-mco1.bb
@@ -3,6 +3,8 @@ SRCDATE_${PN} = "20050904"
#Change to x.y.z+cvs${SRCDATE}-mco1 when 2.0.0 changes
PV = "2.0.0-cvs-mco1-${SRCDATE}"
+DEFAULT_PREFERENCE = "-1"
+
WEBCVSURL = "http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/gaim"
SRC_URI = "cvs://anonymous@gaim.cvs.sourceforge.net/cvsroot/gaim;module=gaim \
diff --git a/packages/gaim/gaim_svn.bb b/packages/gaim/gaim_svn.bb
deleted file mode 100644
index 8ef83c4b50..0000000000
--- a/packages/gaim/gaim_svn.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-PR = "r0"
-#Remove the dash below when 2.0 changes in PV
-DEFAULT_PREFERENCE = "-100000"
-PV = "1.9+2.0beta3cvs-${SRCDATE}"
-
-SRC_URI = "svn://svn.sourceforge.net/svnroot/gaim;module=trunk;proto=https \
- file://no-superimposed-version-on-logo.patch;patch=1 \
- file://gtk-deprecated-2.0.0.patch;patch=1 \
- file://gevolution-eds-dbus.patch;patch=1 \
- "
-
-require gaim.inc
-
-S = "${WORKDIR}/trunk"
-
-CFLAGS += "-D_GNU_SOURCE"
-
-
-DEPENDS += "startup-notification"
-
-#include autopoint (gettext)
-EXTRA_AUTORECONF = ""
-
-#disable "X Session Management"... It is EVIL
-EXTRA_OECONF += "--disable-sm --enable-startup-notification"
diff --git a/packages/gaim/pidgin.inc b/packages/gaim/pidgin.inc
new file mode 100644
index 0000000000..bb2daf2314
--- /dev/null
+++ b/packages/gaim/pidgin.inc
@@ -0,0 +1,85 @@
+SECTION = "x11/network"
+DESCRIPTION = "multi-protocol instant messaging client"
+LICENSE = "GPL"
+
+DEPENDS = "gtk+ ncurses gnutls virtual/libintl gstreamer dbus"
+RRECOMMENDS_${PN} = "libpurple-plugin-ssl-gnutls libpurple-protocol-irc libpurple-protocol-xmpp"
+
+EXTRA_OECONF = " \
+ --disable-audio \
+ --disable-perl \
+ --disable-tcl \
+ --disable-deprecated \
+ --disable-gevolution \
+ --x-includes=${STAGING_INCDIR} \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-gnutls=yes \
+ --with-ncurses-headers=${STAGING_INCDIR} \
+ --with-gnutls-includes=${STAGING_INCDIR} \
+ --with-gnutls-libs=${STAGING_LIBDIR} \
+ "
+
+OE_LT_RPATH_ALLOW=":${libdir}/purple-2:"
+OE_LT_RPATH_ALLOW[export]="1"
+
+PACKAGES =+ "libpurple libpurple-dev libpurple-dbg libpurple-liboscar libpurple-libjabber libpurple-logreader finch finch-dev finch-dbg"
+
+
+LEAD_SONAME = "libpurple.so.0"
+FILES_libpurple = "${libdir}/libpurple*.so.* /usr/bin/purple-* /etc/gconf/schemas/purple*"
+FILES_libpurple-dev = "${libdir}/libpurple* \
+ ${libdir}/purple-2/*.la "
+FILES_libpurple-dbg = "${libdir}/.debug/libpurple* \
+ ${libdir}/purple-2/.debug"
+FILES_libpurple-liboscar = "${libdir}/purple-2/liboscar.so.*"
+FILES_libpurple-libjabber = "${libdir}/purple-2/libjabber.so.*"
+FILES_libpurple-logreader = "${libdir}/purple-2/log_reader.so"
+FILES_finch = "${bindir}/finch /usr/lib/libgnt.so.*"
+FILES_finch-dev = "${libdir}/finch/*.la"
+FILES_finch-dbg = "${bindir}/.debug/finch \
+ ${libdir}/finch/.debug"
+
+FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \
+ ${sysconfdir} ${sharedstatedir} ${localstatedir} \
+ /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/*.so \
+ ${datadir}/pixmaps ${datadir}/applications \
+ ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
+ ${libdir}/bonobo/servers ${datadir}/icons"
+FILES_${PN}-dev += "${libdir}/pidgin/*.la"
+
+inherit autotools gettext pkgconfig gconf
+
+PACKAGES_DYNAMIC = "libpurple-protocol-* libpurple-plugin-* pidgin-plugin-* finch-plugin-*"
+
+python populate_packages_prepend () {
+ root = bb.data.expand('${libdir}/pidgin', d)
+ purple = bb.data.expand('${libdir}/purple-2', d)
+ finch = bb.data.expand('${libdir}/finch', d)
+
+ do_split_packages(d, root, '^([^l][^i][^b].*)\.so$',
+ output_pattern='pidgin-plugin-%s',
+ description='Pidgin plugin %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, purple, '^lib(.*)\.so$',
+ output_pattern='libpurple-protocol-%s',
+ description='Libpurple protocol plugin for %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, purple, '^(ssl-.*)\.so$',
+ output_pattern='libpurple-plugin-%s',
+ description='libpurple plugin %s',
+ prepend=True, extra_depends='libpurple-plugin-ssl')
+
+ do_split_packages(d, purple, '^([^l][^i][^b].*)\.so$',
+ output_pattern='libpurple-plugin-%s',
+ description='libpurple plugin %s',
+ prepend=True, extra_depends='')
+
+ do_split_packages(d, finch, '^([^l][^i][^b].*)\.so$',
+ output_pattern='finch-plugin-%s',
+ description='Finch plugin %s',
+ prepend=True, extra_depends='')
+
+
+}
diff --git a/packages/gtk+/gtk+-2.10.6/.mtn2git_empty b/packages/gaim/pidgin/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.10.6/.mtn2git_empty
+++ b/packages/gaim/pidgin/.mtn2git_empty
diff --git a/packages/gaim/pidgin/gconf-no-errors.patch b/packages/gaim/pidgin/gconf-no-errors.patch
new file mode 100644
index 0000000000..9a95175ac9
--- /dev/null
+++ b/packages/gaim/pidgin/gconf-no-errors.patch
@@ -0,0 +1,12 @@
+--- /tmp/Makefile.am 2007-05-08 18:39:49.000000000 +0200
++++ pidgin-2.0.0/libpurple/gconf/Makefile.am 2007-05-08 18:40:13.755251000 +0200
+@@ -8,8 +8,7 @@
+
+ if GCONF_SCHEMAS_INSTALL
+ install-data-local:
+- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1 | \
+- grep -v "^WARNING: failed to install schema" | grep -v "^Attached schema" 1>&2
++ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA) 2>&1
+ else
+ install-data-local:
+ endif
diff --git a/packages/gaim/pidgin/pidgin.desktop-set-icon.patch b/packages/gaim/pidgin/pidgin.desktop-set-icon.patch
new file mode 100644
index 0000000000..05f76895ba
--- /dev/null
+++ b/packages/gaim/pidgin/pidgin.desktop-set-icon.patch
@@ -0,0 +1,11 @@
+--- pidgin-2.0.1/pidgin.desktop.in.orig 2007-06-20 23:50:44.000000000 +0000
++++ pidgin-2.0.1/pidgin.desktop.in 2007-06-20 23:51:05.000000000 +0000
+@@ -4,7 +4,7 @@
+ _GenericName=Internet Messenger
+ _Comment=Send instant messages over multiple protocols
+ Exec=pidgin
+-Icon=pidgin
++Icon=/usr/share/icons/hicolor/48x48/apps/pidgin.png
+ StartupNotify=true
+ Terminal=false
+ Type=Application
diff --git a/packages/gaim/pidgin/sanitize-configure.ac.patch b/packages/gaim/pidgin/sanitize-configure.ac.patch
new file mode 100644
index 0000000000..a77d64f40b
--- /dev/null
+++ b/packages/gaim/pidgin/sanitize-configure.ac.patch
@@ -0,0 +1,33 @@
+--- /tmp/configure.ac 2007-05-08 17:29:02.000000000 +0200
++++ pidgin-2.0.0/configure.ac 2007-05-08 17:30:30.325251000 +0200
+@@ -472,7 +472,7 @@
+ if test "x$enable_consoleui" = "xyes"; then
+ dnl # Some distros put the headers in ncursesw/, some don't
+ found_ncurses_h=no
+- for location in $ac_ncurses_includes $NCURSES_HEADERS /usr/include/ncursesw /usr/include
++ for location in $ac_ncurses_includes $NCURSES_HEADERS
+ do
+ f="$location/ncurses.h"
+ AC_CHECK_HEADER($f,[
+@@ -1860,10 +1860,6 @@
+ KRB4_CFLAGS="$KRB4_CFLAGS -I${kerberos}/include/kerberosIV"
+ fi
+ KRB4_LDFLAGS="-L${kerberos}/lib"
+- elif test -d /usr/local/include/kerberosIV ; then
+- KRB4_CFLAGS="-I/usr/local/include/kerberosIV"
+- elif test -d /usr/include/kerberosIV ; then
+- KRB4_CFLAGS="-I/usr/include/kerberosIV"
+ fi
+ AC_DEFINE(ZEPHYR_USES_KERBEROS, 1, [Define if kerberos should be used in Zephyr.])
+
+@@ -1896,10 +1892,6 @@
+ ZEPHYR_LDFLAGS="-L${zephyr}/lib"
+ elif test -d /usr/athena/include/zephyr ; then
+ ZEPHYR_CFLAGS="-I/usr/athena/include"
+- elif test -d /usr/include/zephyr ; then
+- ZEPHYR_CFLAGS="-I/usr/include"
+- elif test -d /usr/local/include/zephyr ; then
+- ZEPHYR_CFLAGS="-I/usr/local/include"
+ fi
+ AC_DEFINE(LIBZEPHYR_EXT, 1 , [Define if external libzephyr should be used.])
+ AM_CONDITIONAL(EXTERNAL_LIBZEPHYR, test "x$zephyr" != "xno")
diff --git a/packages/gaim/pidgin_2.0.2.bb b/packages/gaim/pidgin_2.0.2.bb
new file mode 100644
index 0000000000..2cc02c5072
--- /dev/null
+++ b/packages/gaim/pidgin_2.0.2.bb
@@ -0,0 +1,9 @@
+require pidgin.inc
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \
+ file://sanitize-configure.ac.patch;patch=1 \
+ file://gconf-no-errors.patch;patch=1 \
+ file://pidgin.desktop-set-icon.patch;patch=1 \
+ "
+
+PR = "r1"
diff --git a/packages/gaim/pidgin_2.1.0.bb b/packages/gaim/pidgin_2.1.0.bb
new file mode 100644
index 0000000000..c01db89c04
--- /dev/null
+++ b/packages/gaim/pidgin_2.1.0.bb
@@ -0,0 +1,10 @@
+require pidgin.inc
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pidgin/pidgin-${PV}.tar.bz2 \
+ file://sanitize-configure.ac.patch;patch=1 \
+ file://gconf-no-errors.patch;patch=1 \
+ file://pidgin.desktop-set-icon.patch;patch=1 \
+ file://purple-OE-branding.patch;patch=1 \
+ "
+
+PR = "r1"
diff --git a/packages/gtk+/gtk+-2.10.7/.mtn2git_empty b/packages/gamin/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.10.7/.mtn2git_empty
+++ b/packages/gamin/.mtn2git_empty
diff --git a/packages/gtk+/gtk+-2.10.9/.mtn2git_empty b/packages/gamin/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.10.9/.mtn2git_empty
+++ b/packages/gamin/files/.mtn2git_empty
diff --git a/packages/gamin/files/no-abstract-sockets.patch b/packages/gamin/files/no-abstract-sockets.patch
new file mode 100644
index 0000000000..b8aacfb23c
--- /dev/null
+++ b/packages/gamin/files/no-abstract-sockets.patch
@@ -0,0 +1,54 @@
+--- /tmp/configure.in 2007-04-30 13:08:49.000000000 +0200
++++ gamin-0.1.8/configure.in 2007-04-30 13:10:53.285251000 +0200
+@@ -354,51 +354,6 @@
+ AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
+ fi
+
+-#### Abstract sockets
+-
+-AC_MSG_CHECKING(abstract socket namespace)
+-AC_LANG_PUSH(C)
+-AC_RUN_IFELSE([AC_LANG_PROGRAM(
+-[[
+-#include <sys/types.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <stdio.h>
+-#include <sys/socket.h>
+-#include <sys/un.h>
+-#include <errno.h>
+-]],
+-[[
+- int listen_fd;
+- struct sockaddr_un addr;
+-
+- listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
+-
+- if (listen_fd < 0)
+- {
+- fprintf (stderr, "socket() failed: %s\n", strerror (errno));
+- exit (1);
+- }
+-
+- memset (&addr, '\0', sizeof (addr));
+- addr.sun_family = AF_UNIX;
+- strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
+- addr.sun_path[0] = '\0'; /* this is what makes it abstract */
+-
+- if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
+- {
+- fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
+- strerror (errno));
+- exit (1);
+- }
+- else
+- exit (0);
+-]])],
+- [have_abstract_sockets=yes],
+- [have_abstract_sockets=no])
+-AC_LANG_POP(C)
+-AC_MSG_RESULT($have_abstract_sockets)
+-
+ if test x$enable_abstract_sockets = xyes; then
+ if test x$have_abstract_sockets = xno; then
+ AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
diff --git a/packages/gamin/gamin_0.1.8.bb b/packages/gamin/gamin_0.1.8.bb
new file mode 100644
index 0000000000..c4da068c34
--- /dev/null
+++ b/packages/gamin/gamin_0.1.8.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Gamin is a file and directory monitoring system defined to be a subset of the FAM (File Alteration Monitor) system."
+LICENSE = "LGPL"
+
+SRC_URI = "http://www.gnome.org/~veillard/gamin/sources/gamin-${PV}.tar.gz \
+ file://no-abstract-sockets.patch;patch=1"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/icewm/icewm-1.2.26/.mtn2git_empty b/packages/gammu/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/icewm/icewm-1.2.26/.mtn2git_empty
+++ b/packages/gammu/files/.mtn2git_empty
diff --git a/packages/gammu/files/ldflags-again.patch b/packages/gammu/files/ldflags-again.patch
new file mode 100644
index 0000000000..90311e5f39
--- /dev/null
+++ b/packages/gammu/files/ldflags-again.patch
@@ -0,0 +1,13 @@
+Index: gammu-1.10.0/cfg/Makefile.glo
+===================================================================
+--- gammu-1.10.0.orig/cfg/Makefile.glo 2007-03-30 17:55:18.000000000 +0200
++++ gammu-1.10.0/cfg/Makefile.glo 2007-03-30 17:55:46.000000000 +0200
+@@ -152,7 +152,7 @@
+
+ $(TOPDIR)/gammu/gammu-shared: $(COMMON) $(GAMMU) $(TOPDIR)/common/$(LIBGAMMU_FULLNAME)
+ @echo Linking gammu-shared
+- @$(CC) -L$(TOPDIR)/common -lGammu $(GAMMU_CFLAGS) $(GAMMU_LIBS) $(SMSD_LIBS) $(GAMMU) -o $(TOPDIR)/gammu/gammu-shared
++ @$(CC) -L$(TOPDIR)/common -lGammu $(LDLIBS) $(GAMMU_CFLAGS) $(GAMMU_LIBS) $(SMSD_LIBS) $(GAMMU) -o $(TOPDIR)/gammu/gammu-shared
+
+ shared: $(TOPDIR)/common/$(LIBGAMMU_FULLNAME) $(TOPDIR)/common/$(LIBGAMMU_STATIC) $(TOPDIR)/gammu/gammu-shared
+
diff --git a/packages/gammu/gammu_1.07.00.bb b/packages/gammu/gammu_1.07.00.bb
deleted file mode 100644
index 49a2f21399..0000000000
--- a/packages/gammu/gammu_1.07.00.bb
+++ /dev/null
@@ -1,75 +0,0 @@
-DESCRIPTION = "GNU All Mobile Managment Utilities"
-SECTION = "console/network"
-DEPENDS = "bluez-libs"
-LICENSE = "GPL"
-HOMEPAGE = "http://mwiacek.com/gsm/soft/gammu.html"
-AUTHOR = "Marcin Wiacek <marcin@mwiacek.com>"
-
-SRC_URI = "http://www.mwiacek.com/zips/gsm/gammu/stable/1_0x/gammu-${PV}.tar.gz "
-
-EXTRA_OECONF = "--disable-mysql"
-
-inherit autotools
-
-do_compile () {
- oe_runmake shared
-}
-
-do_stage() {
- install -d ${STAGING_INCDIR}/gammu/misc ${STAGING_INCDIR}/gammu/misc/coding \
- ${STAGING_INCDIR}/gammu/phone ${STAGING_INCDIR}/gammu/phone/at \
- ${STAGING_INCDIR}/gammu/phone/obex ${STAGING_INCDIR}/gammu/phone/nokia \
- ${STAGING_INCDIR}/gammu/phone/nokia/dct3 ${STAGING_INCDIR}/gammu/phone/nokia/dct4tiku \
- ${STAGING_INCDIR}/gammu/phone/symbian ${STAGING_INCDIR}/gammu/phone/alcatel \
- ${STAGING_INCDIR}/gammu/service ${STAGING_INCDIR}/gammu/service/sms \
- ${STAGING_INCDIR}/gammu/service/backup ${STAGING_INCDIR}/gammu/device \
- ${STAGING_INCDIR}/gammu/device/irda ${STAGING_INCDIR}/gammu/device/bluetoth \
- ${STAGING_INCDIR}/gammu/device/serial ${STAGING_INCDIR}/gammu/protocol \
- ${STAGING_INCDIR}/gammu/protocol/at ${STAGING_INCDIR}/gammu/protocol/obex \
- ${STAGING_INCDIR}/gammu/protocol/nokia ${STAGING_INCDIR}/gammu/protocol/symbian \
- ${STAGING_INCDIR}/gammu/protocol/alcatel
-
- oe_libinstall -so -C common libGammu ${STAGING_LIBDIR}
-
- install -m 0644 common/*.h ${STAGING_INCDIR}/gammu/
- install -m 0644 common/misc/*.h ${STAGING_INCDIR}/gammu/misc
- install -m 0644 common/misc/coding/*.h ${STAGING_INCDIR}/gammu/misc/coding
- install -m 0644 common/phone/*.h ${STAGING_INCDIR}/gammu/phone
- install -m 0644 common/phone/at/*.h ${STAGING_INCDIR}/gammu/phone/at
- install -m 0644 common/phone/obex/*.h ${STAGING_INCDIR}/gammu/phone/obex
- install -m 0644 common/phone/nokia/*.h ${STAGING_INCDIR}/gammu/phone/nokia
- install -m 0644 common/phone/nokia/dct3/*.h ${STAGING_INCDIR}/gammu/phone/nokia/dct3
- install -m 0644 common/phone/nokia/dct4tiku/*.h ${STAGING_INCDIR}/gammu/phone/nokia/dct4tiku
- install -m 0644 common/phone/symbian/*.h ${STAGING_INCDIR}/gammu/phone/symbian
- install -m 0644 common/phone/alcatel/*.h ${STAGING_INCDIR}/gammu/phone/alcatel
- install -m 0644 common/service/*.h ${STAGING_INCDIR}/gammu/service
- install -m 0644 common/service/sms/*.h ${STAGING_INCDIR}/gammu/service/sms
- install -m 0644 common/service/backup/*.h ${STAGING_INCDIR}/gammu/service/backup
- install -m 0644 common/device/*.h ${STAGING_INCDIR}/gammu/device
- install -m 0644 common/device/irda/*.h ${STAGING_INCDIR}/gammu/device/irda
- install -m 0644 common/device/bluetoth/*.h ${STAGING_INCDIR}/gammu/device/bluetoth
- install -m 0644 common/device/serial/*.h ${STAGING_INCDIR}/gammu/device/serial
- install -m 0644 common/protocol/*.h ${STAGING_INCDIR}/gammu/protocol
- install -m 0644 common/protocol/at/*.h ${STAGING_INCDIR}/gammu/protocol/at
- install -m 0644 common/protocol/obex/*.h ${STAGING_INCDIR}/gammu/protocol/obex
- install -m 0644 common/protocol/nokia/*.h ${STAGING_INCDIR}/gammu/protocol/nokia
- install -m 0644 common/protocol/symbian/*.h ${STAGING_INCDIR}/gammu/protocol/symbian
- install -m 0644 common/protocol/alcatel/*.h ${STAGING_INCDIR}/gammu/protocol/alcatel
-}
-
-do_install () {
- oe_runmake 'DESTDIR=${D}' installshared
-}
-
-PACKAGES =+ "libgammu"
-
-FILES_${PN} = "${bindir}/gammu"
-FILES_libgammu = "${libdir}/libGammu.so*"
-
-PACKAGES_DYNAMIC = "gammu-locale-*"
-
-python populate_packages_prepend () {
- help_dir = bb.data.expand('${datadir}/gammu/', d)
-
- do_split_packages(d, help_dir, file_regex='^gammu_(.*)\.txt$', output_pattern='gammu-locale-%s', description='%s translation for Gammu')
-}
diff --git a/packages/gammu/gammu_1.10.0.bb b/packages/gammu/gammu_1.10.0.bb
new file mode 100644
index 0000000000..9e3f611697
--- /dev/null
+++ b/packages/gammu/gammu_1.10.0.bb
@@ -0,0 +1,77 @@
+DESCRIPTION = "GNU All Mobile Managment Utilities"
+SECTION = "console/network"
+DEPENDS = "bluez-libs"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.gammu.org/"
+
+SRC_URI = "http://dl.cihar.com/gammu/releases/gammu-${PV}.tar.bz2 \
+ file://ldflags-again.patch;patch=1"
+
+EXTRA_OECONF = "--disable-mysql --with-bluedir=${STAGING_DIR}"
+
+EXTRA_LDFLAGS = "-lbluetooth2"
+
+inherit autotools
+
+do_compile () {
+ oe_runmake shared LDFLAGS='-L${STAGING_LIBDIR} -lbluetooth'
+}
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/gammu/misc ${STAGING_INCDIR}/gammu/misc/coding \
+ ${STAGING_INCDIR}/gammu/phone ${STAGING_INCDIR}/gammu/phone/at \
+ ${STAGING_INCDIR}/gammu/phone/obex ${STAGING_INCDIR}/gammu/phone/nokia \
+ ${STAGING_INCDIR}/gammu/phone/nokia/dct3 ${STAGING_INCDIR}/gammu/phone/nokia/dct4s40 \
+ ${STAGING_INCDIR}/gammu/phone/symbian ${STAGING_INCDIR}/gammu/phone/alcatel \
+ ${STAGING_INCDIR}/gammu/service ${STAGING_INCDIR}/gammu/service/sms \
+ ${STAGING_INCDIR}/gammu/service/backup ${STAGING_INCDIR}/gammu/device \
+ ${STAGING_INCDIR}/gammu/device/irda ${STAGING_INCDIR}/gammu/device/bluetoth \
+ ${STAGING_INCDIR}/gammu/device/serial ${STAGING_INCDIR}/gammu/protocol \
+ ${STAGING_INCDIR}/gammu/protocol/at ${STAGING_INCDIR}/gammu/protocol/obex \
+ ${STAGING_INCDIR}/gammu/protocol/nokia ${STAGING_INCDIR}/gammu/protocol/symbian \
+ ${STAGING_INCDIR}/gammu/protocol/alcatel
+
+ oe_libinstall -so -C common libGammu ${STAGING_LIBDIR}
+
+ install -m 0644 common/*.h ${STAGING_INCDIR}/gammu/
+ install -m 0644 common/misc/*.h ${STAGING_INCDIR}/gammu/misc
+ install -m 0644 common/misc/coding/*.h ${STAGING_INCDIR}/gammu/misc/coding
+ install -m 0644 common/phone/*.h ${STAGING_INCDIR}/gammu/phone
+ install -m 0644 common/phone/at/*.h ${STAGING_INCDIR}/gammu/phone/at
+ install -m 0644 common/phone/obex/*.h ${STAGING_INCDIR}/gammu/phone/obex
+ install -m 0644 common/phone/nokia/*.h ${STAGING_INCDIR}/gammu/phone/nokia
+ install -m 0644 common/phone/nokia/dct3/*.h ${STAGING_INCDIR}/gammu/phone/nokia/dct3
+ install -m 0644 common/phone/nokia/dct4s40/*.h ${STAGING_INCDIR}/gammu/phone/nokia/dct4s40
+ install -m 0644 common/phone/symbian/*.h ${STAGING_INCDIR}/gammu/phone/symbian
+ install -m 0644 common/phone/alcatel/*.h ${STAGING_INCDIR}/gammu/phone/alcatel
+ install -m 0644 common/service/*.h ${STAGING_INCDIR}/gammu/service
+ install -m 0644 common/service/sms/*.h ${STAGING_INCDIR}/gammu/service/sms
+ install -m 0644 common/service/backup/*.h ${STAGING_INCDIR}/gammu/service/backup
+ install -m 0644 common/device/*.h ${STAGING_INCDIR}/gammu/device
+ install -m 0644 common/device/irda/*.h ${STAGING_INCDIR}/gammu/device/irda
+ install -m 0644 common/device/bluetoth/*.h ${STAGING_INCDIR}/gammu/device/bluetoth
+ install -m 0644 common/device/serial/*.h ${STAGING_INCDIR}/gammu/device/serial
+ install -m 0644 common/protocol/*.h ${STAGING_INCDIR}/gammu/protocol
+ install -m 0644 common/protocol/at/*.h ${STAGING_INCDIR}/gammu/protocol/at
+ install -m 0644 common/protocol/obex/*.h ${STAGING_INCDIR}/gammu/protocol/obex
+ install -m 0644 common/protocol/nokia/*.h ${STAGING_INCDIR}/gammu/protocol/nokia
+ install -m 0644 common/protocol/symbian/*.h ${STAGING_INCDIR}/gammu/protocol/symbian
+ install -m 0644 common/protocol/alcatel/*.h ${STAGING_INCDIR}/gammu/protocol/alcatel
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' installshared
+}
+
+PACKAGES =+ "libgammu"
+
+FILES_${PN} = "${bindir}/gammu"
+FILES_libgammu = "${libdir}/libGammu.so*"
+
+PACKAGES_DYNAMIC = "gammu-locale-*"
+
+python populate_packages_prepend () {
+ help_dir = bb.data.expand('${datadir}/gammu/', d)
+
+ do_split_packages(d, help_dir, file_regex='^gammu_(.*)\.txt$', output_pattern='gammu-locale-%s', description='%s translation for Gammu')
+}
diff --git a/packages/gcc/gcc-4.0.2/gcc-4.0.2-atmel.0.99.2.patch b/packages/gcc/gcc-4.0.2/gcc-4.0.2-atmel.0.99.2.patch
new file mode 100644
index 0000000000..273846f565
--- /dev/null
+++ b/packages/gcc/gcc-4.0.2/gcc-4.0.2-atmel.0.99.2.patch
@@ -0,0 +1,21330 @@
+diff -Nrup --ignore-space-change gcc-4.0.2/config.sub gcc-4.0.2-atmel.0.99.2/config.sub
+--- gcc-4.0.2/config.sub 2005-04-25 12:36:56.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/config.sub 2005-06-07 14:59:22.000000000 +0200
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+-timestamp='2005-04-22'
++timestamp='2005-06-07'
+
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+@@ -70,7 +70,7 @@ Report bugs and patches to <config-patch
+ version="\
+ GNU config.sub ($timestamp)
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+@@ -230,8 +230,7 @@ case $basic_machine in
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+- | bfin \
++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+@@ -263,8 +262,7 @@ case $basic_machine in
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+- | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+- | sparcv8 | sparcv9 | sparcv9b \
++ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+@@ -299,8 +297,8 @@ case $basic_machine in
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+- | avr-* \
+- | bfin-* | bs2000-* \
++ | avr-* | avr32-* \
++ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+@@ -338,8 +336,7 @@ case $basic_machine in
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+- | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+- | sparclite-* \
++ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+diff -Nrup --ignore-space-change gcc-4.0.2/configure gcc-4.0.2-atmel.0.99.2/configure
+--- gcc-4.0.2/configure 2005-09-13 09:01:28.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/configure 2006-01-20 14:31:15.000000000 +0100
+@@ -1284,6 +1284,9 @@ case "${target}" in
+ arm-*-riscix*)
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
++ avr32-*-*)
++ noconfigdirs="$noconfigdirs target-libiberty target-libmudflap target-libffi ${libgcj}"
++ ;;
+ avr-*-*)
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+@@ -1804,7 +1807,7 @@ else
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:1808: checking for $ac_word" >&5
++echo "configure:1811: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1834,7 +1837,7 @@ if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:1838: checking for $ac_word" >&5
++echo "configure:1841: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1885,7 +1888,7 @@ fi
+ # Extract the first word of "cl", so it can be a program name with args.
+ set dummy cl; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:1889: checking for $ac_word" >&5
++echo "configure:1892: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1917,7 +1920,7 @@ fi
+ fi
+
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+-echo "configure:1921: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
++echo "configure:1924: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ ac_ext=c
+ # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+@@ -1928,12 +1931,12 @@ cross_compiling=$ac_cv_prog_cc_cross
+
+ cat > conftest.$ac_ext << EOF
+
+-#line 1932 "configure"
++#line 1935 "configure"
+ #include "confdefs.h"
+
+ main(){return(0);}
+ EOF
+-if { (eval echo configure:1937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:1940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+@@ -1959,12 +1962,12 @@ if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+-echo "configure:1963: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
++echo "configure:1966: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+ cross_compiling=$ac_cv_prog_cc_cross
+
+ echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+-echo "configure:1968: checking whether we are using GNU C" >&5
++echo "configure:1971: checking whether we are using GNU C" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -1973,7 +1976,7 @@ else
+ yes;
+ #endif
+ EOF
+-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1977: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
++if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+ else
+ ac_cv_prog_gcc=no
+@@ -1992,7 +1995,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+-echo "configure:1996: checking whether ${CC-cc} accepts -g" >&5
++echo "configure:1999: checking whether ${CC-cc} accepts -g" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2059,7 +2062,7 @@ fi
+ # Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2063: checking for $ac_word" >&5
++echo "configure:2066: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2091,7 +2094,7 @@ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "gnatbind", so it can be a program name with args.
+ set dummy gnatbind; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2095: checking for $ac_word" >&5
++echo "configure:2098: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2124,7 +2127,7 @@ fi
+ fi
+
+ echo $ac_n "checking whether compiler driver understands Ada""... $ac_c" 1>&6
+-echo "configure:2128: checking whether compiler driver understands Ada" >&5
++echo "configure:2131: checking whether compiler driver understands Ada" >&5
+ if eval "test \"`echo '$''{'acx_cv_cc_gcc_supports_ada'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2156,7 +2159,7 @@ else
+ fi
+
+ echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6
+-echo "configure:2160: checking how to compare bootstrapped objects" >&5
++echo "configure:2163: checking how to compare bootstrapped objects" >&5
+ if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2254,9 +2257,9 @@ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $gmpinc"
+ # Check GMP actually works
+ echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6
+-echo "configure:2258: checking for correct version of gmp.h" >&5
++echo "configure:2261: checking for correct version of gmp.h" >&5
+ cat > conftest.$ac_ext <<EOF
+-#line 2260 "configure"
++#line 2263 "configure"
+ #include "confdefs.h"
+ #include "gmp.h"
+ int main() {
+@@ -2267,7 +2270,7 @@ choke me
+
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
++if { (eval echo configure:2274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ else
+@@ -2280,12 +2283,12 @@ rm -f conftest*
+
+ if test x"$have_gmp" = xyes; then
+ echo $ac_n "checking for MPFR""... $ac_c" 1>&6
+-echo "configure:2284: checking for MPFR" >&5
++echo "configure:2287: checking for MPFR" >&5
+
+ saved_LIBS="$LIBS"
+ LIBS="$LIBS $gmplibs"
+ cat > conftest.$ac_ext <<EOF
+-#line 2289 "configure"
++#line 2292 "configure"
+ #include "confdefs.h"
+ #include <gmp.h>
+ #include <mpfr.h>
+@@ -2293,7 +2296,7 @@ int main() {
+ mpfr_t n; mpfr_init(n);
+ ; return 0; }
+ EOF
+-if { (eval echo configure:2297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:2300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ else
+@@ -2789,7 +2792,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2793: checking for $ac_word" >&5
++echo "configure:2796: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_BISON'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2824,7 +2827,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2828: checking for $ac_word" >&5
++echo "configure:2831: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_YACC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2859,7 +2862,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2863: checking for $ac_word" >&5
++echo "configure:2866: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_M4'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2894,7 +2897,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2898: checking for $ac_word" >&5
++echo "configure:2901: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_FLEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2929,7 +2932,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2933: checking for $ac_word" >&5
++echo "configure:2936: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -2964,7 +2967,7 @@ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:2968: checking for $ac_word" >&5
++echo "configure:2971: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_MAKEINFO'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3611,7 +3614,7 @@ test -n "$target_alias" && ncn_target_to
+ # Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}ar; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3615: checking for $ac_word" >&5
++echo "configure:3618: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3644,7 +3647,7 @@ if test -z "$ac_cv_prog_AR" ; then
+ # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3648: checking for $ac_word" >&5
++echo "configure:3651: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3683,7 +3686,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}as; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3687: checking for $ac_word" >&5
++echo "configure:3690: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3716,7 +3719,7 @@ if test -z "$ac_cv_prog_AS" ; then
+ # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3720: checking for $ac_word" >&5
++echo "configure:3723: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3755,7 +3758,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3759: checking for $ac_word" >&5
++echo "configure:3762: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3788,7 +3791,7 @@ if test -z "$ac_cv_prog_DLLTOOL" ; then
+ # Extract the first word of "dlltool", so it can be a program name with args.
+ set dummy dlltool; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3792: checking for $ac_word" >&5
++echo "configure:3795: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3827,7 +3830,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}ld; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3831: checking for $ac_word" >&5
++echo "configure:3834: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3860,7 +3863,7 @@ if test -z "$ac_cv_prog_LD" ; then
+ # Extract the first word of "ld", so it can be a program name with args.
+ set dummy ld; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3864: checking for $ac_word" >&5
++echo "configure:3867: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3899,7 +3902,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}nm; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3903: checking for $ac_word" >&5
++echo "configure:3906: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3932,7 +3935,7 @@ if test -z "$ac_cv_prog_NM" ; then
+ # Extract the first word of "nm", so it can be a program name with args.
+ set dummy nm; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3936: checking for $ac_word" >&5
++echo "configure:3939: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -3971,7 +3974,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:3975: checking for $ac_word" >&5
++echo "configure:3978: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4004,7 +4007,7 @@ if test -z "$ac_cv_prog_RANLIB" ; then
+ # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4008: checking for $ac_word" >&5
++echo "configure:4011: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4043,7 +4046,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}windres; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4047: checking for $ac_word" >&5
++echo "configure:4050: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4076,7 +4079,7 @@ if test -z "$ac_cv_prog_WINDRES" ; then
+ # Extract the first word of "windres", so it can be a program name with args.
+ set dummy windres; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4080: checking for $ac_word" >&5
++echo "configure:4083: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4115,7 +4118,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4119: checking for $ac_word" >&5
++echo "configure:4122: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4148,7 +4151,7 @@ if test -z "$ac_cv_prog_OBJCOPY" ; then
+ # Extract the first word of "objcopy", so it can be a program name with args.
+ set dummy objcopy; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4152: checking for $ac_word" >&5
++echo "configure:4155: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4187,7 +4190,7 @@ fi
+ # Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
+ set dummy ${ncn_tool_prefix}objdump; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4191: checking for $ac_word" >&5
++echo "configure:4194: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4220,7 +4223,7 @@ if test -z "$ac_cv_prog_OBJDUMP" ; then
+ # Extract the first word of "objdump", so it can be a program name with args.
+ set dummy objdump; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4224: checking for $ac_word" >&5
++echo "configure:4227: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4266,7 +4269,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4270: checking for $ac_word" >&5
++echo "configure:4273: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4299,7 +4302,7 @@ if test -z "$ac_cv_prog_CONFIGURED_AR_FO
+ # Extract the first word of "ar", so it can be a program name with args.
+ set dummy ar; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4303: checking for $ac_word" >&5
++echo "configure:4306: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AR_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4338,7 +4341,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}as; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4342: checking for $ac_word" >&5
++echo "configure:4345: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4371,7 +4374,7 @@ if test -z "$ac_cv_prog_CONFIGURED_AS_FO
+ # Extract the first word of "as", so it can be a program name with args.
+ set dummy as; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4375: checking for $ac_word" >&5
++echo "configure:4378: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_AS_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4410,7 +4413,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4414: checking for $ac_word" >&5
++echo "configure:4417: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4443,7 +4446,7 @@ if test -z "$ac_cv_prog_CONFIGURED_DLLTO
+ # Extract the first word of "dlltool", so it can be a program name with args.
+ set dummy dlltool; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4447: checking for $ac_word" >&5
++echo "configure:4450: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4482,7 +4485,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4486: checking for $ac_word" >&5
++echo "configure:4489: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4515,7 +4518,7 @@ if test -z "$ac_cv_prog_CONFIGURED_LD_FO
+ # Extract the first word of "ld", so it can be a program name with args.
+ set dummy ld; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4519: checking for $ac_word" >&5
++echo "configure:4522: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_LD_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4554,7 +4557,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4558: checking for $ac_word" >&5
++echo "configure:4561: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4587,7 +4590,7 @@ if test -z "$ac_cv_prog_CONFIGURED_NM_FO
+ # Extract the first word of "nm", so it can be a program name with args.
+ set dummy nm; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4591: checking for $ac_word" >&5
++echo "configure:4594: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_NM_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4626,7 +4629,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4630: checking for $ac_word" >&5
++echo "configure:4633: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4659,7 +4662,7 @@ if test -z "$ac_cv_prog_CONFIGURED_RANLI
+ # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4663: checking for $ac_word" >&5
++echo "configure:4666: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_RANLIB_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4698,7 +4701,7 @@ fi
+ # Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
+ set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4702: checking for $ac_word" >&5
++echo "configure:4705: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4731,7 +4734,7 @@ if test -z "$ac_cv_prog_CONFIGURED_WINDR
+ # Extract the first word of "windres", so it can be a program name with args.
+ set dummy windres; ac_word=$2
+ echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+-echo "configure:4735: checking for $ac_word" >&5
++echo "configure:4738: checking for $ac_word" >&5
+ if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_CONFIGURED_WINDRES_FOR_TARGET'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4816,7 +4819,7 @@ RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${
+ NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
+
+ echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
+-echo "configure:4820: checking whether to enable maintainer-specific portions of Makefiles" >&5
++echo "configure:4823: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+ if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+@@ -4863,7 +4866,7 @@ esac
+ # gcc for stageN-gcc and stagePREV-gcc for stage(N-1). In case this is not
+ # possible, however, we can resort to mv.
+ echo $ac_n "checking if symbolic links between directories work""... $ac_c" 1>&6
+-echo "configure:4867: checking if symbolic links between directories work" >&5
++echo "configure:4870: checking if symbolic links between directories work" >&5
+ if eval "test \"`echo '$''{'gcc_cv_prog_ln_s_dir'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+@@ -4997,15 +5000,34 @@ trap 'rm -f $CONFIG_STATUS conftest*; ex
+ # Transform confdefs.h into DEFS.
+ # Protect against shell expansion while executing Makefile rules.
+ # Protect against Makefile macro expansion.
+-cat > conftest.defs <<\EOF
+-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+-s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+-s%\[%\\&%g
+-s%\]%\\&%g
+-s%\$%$$%g
+-EOF
+-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+-rm -f conftest.defs
++#
++# If the first sed substitution is executed (which looks for macros that
++# take arguments), then we branch to the quote section. Otherwise,
++# look for a macro that doesn't take arguments.
++cat >confdef2opt.sed <<\_ACEOF
++t clear
++: clear
++s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
++t quote
++s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
++t quote
++d
++: quote
++s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
++s,\[,\\&,g
++s,\],\\&,g
++s,\$,$$,g
++p
++_ACEOF
++# We use echo to avoid assuming a particular line-breaking character.
++# The extra dot is to prevent the shell from consuming trailing
++# line-breaks from the sub-command output. A line-break within
++# single-quotes doesn't work because, if this script is created in a
++# platform that uses two characters for line-breaks (e.g., DOS), tr
++# would break.
++ac_LF_and_DOT=`echo; echo .`
++DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
++rm -f confdef2opt.sed
+
+
+ # Without the "./", some shells look in PATH for config.status.
+diff -Nrup --ignore-space-change gcc-4.0.2/configure.in gcc-4.0.2-atmel.0.99.2/configure.in
+--- gcc-4.0.2/configure.in 2005-09-13 09:01:28.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/configure.in 2006-01-20 14:31:15.000000000 +0100
+@@ -493,6 +493,9 @@ case "${target}" in
+ arm-*-riscix*)
+ noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
+ ;;
++ avr32-*-*)
++ noconfigdirs="$noconfigdirs target-libiberty target-libmudflap target-libffi ${libgcj}"
++ ;;
+ avr-*-*)
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
+ ;;
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/ada/s-tpopsp-rtems.adb gcc-4.0.2-atmel.0.99.2/gcc/ada/s-tpopsp-rtems.adb
+--- gcc-4.0.2/gcc/ada/s-tpopsp-rtems.adb 2005-01-27 12:56:57.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/ada/s-tpopsp-rtems.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -7,7 +7,7 @@
+ -- --
+ -- B o d y --
+ -- --
+--- $Revision: 1.2 $
++-- $Revision: 3484 $
+ -- --
+ -- Copyright (C) 1991-2003, Florida State University --
+ -- --
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/builtins.c gcc-4.0.2-atmel.0.99.2/gcc/builtins.c
+--- gcc-4.0.2/gcc/builtins.c 2005-08-28 13:08:55.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/builtins.c 2006-03-23 13:29:00.000000000 +0100
+@@ -8387,7 +8387,7 @@ validate_arglist (tree arglist, ...)
+
+ do
+ {
+- code = va_arg (ap, enum tree_code);
++ code = va_arg (ap, int);
+ switch (code)
+ {
+ case 0:
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/calls.c gcc-4.0.2-atmel.0.99.2/gcc/calls.c
+--- gcc-4.0.2/gcc/calls.c 2005-07-25 18:36:33.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/calls.c 2006-03-23 13:29:00.000000000 +0100
+@@ -3353,7 +3353,7 @@ emit_library_call_value_1 (int retval, r
+ for (; count < nargs; count++)
+ {
+ rtx val = va_arg (p, rtx);
+- enum machine_mode mode = va_arg (p, enum machine_mode);
++ enum machine_mode mode = va_arg (p, int);
+
+ /* We cannot convert the arg value to the mode the library wants here;
+ must do it earlier where we know the signedness of the arg. */
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32.c gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.c
+--- gcc-4.0.2/gcc/config/avr32/avr32.c 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.c 2006-11-24 17:13:09.000000000 +0100
+@@ -0,0 +1,7276 @@
++/*
++ Target hooks and helper functions for AVR32.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++ Initial porting by Anders Ådland.
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include "rtl.h"
++#include "tree.h"
++#include "obstack.h"
++#include "regs.h"
++#include "hard-reg-set.h"
++#include "real.h"
++#include "insn-config.h"
++#include "conditions.h"
++#include "output.h"
++#include "insn-attr.h"
++#include "flags.h"
++#include "reload.h"
++#include "function.h"
++#include "expr.h"
++#include "optabs.h"
++#include "toplev.h"
++#include "recog.h"
++#include "ggc.h"
++#include "except.h"
++#include "c-pragma.h"
++#include "integrate.h"
++#include "tm_p.h"
++#include "langhooks.h"
++
++#include "target.h"
++#include "target-def.h"
++
++#include <ctype.h>
++
++/* Forward definitions of types. */
++typedef struct minipool_node Mnode;
++typedef struct minipool_fixup Mfix;
++
++/* Obstack for minipool constant handling. */
++static struct obstack minipool_obstack;
++static char *minipool_startobj;
++static rtx minipool_vector_label;
++
++/* True if we are currently building a constant table. */
++int making_const_table;
++
++/* Some forward function declarations */
++static unsigned long avr32_isr_value (tree);
++static unsigned long avr32_compute_func_type (void);
++static tree avr32_handle_isr_attribute (tree *, tree, tree, int, bool *);
++static tree avr32_handle_acall_attribute (tree *, tree, tree, int, bool *);
++static tree avr32_handle_fndecl_attribute (tree * node, tree name, tree args,
++ int flags, bool * no_add_attrs);
++static void avr32_reorg (void);
++bool avr32_return_in_msb (tree type);
++bool avr32_vector_mode_supported (enum machine_mode mode);
++static void avr32_init_libfuncs (void);
++void avr32_load_pic_register (void);
++
++
++static void
++avr32_add_gc_roots (void)
++{
++ gcc_obstack_init (&minipool_obstack);
++ minipool_startobj = (char *) obstack_alloc (&minipool_obstack, 0);
++}
++
++
++/* List of all known AVR32 parts */
++static const struct part_type_s avr32_part_types[] = {
++ /* name, part_type, architecture type, macro */
++ {"none", PART_TYPE_AVR32_NONE, ARCH_TYPE_AVR32_AP, "__AVR32__"},
++ {"ap7000", PART_TYPE_AVR32_AP7000, ARCH_TYPE_AVR32_AP, "__AVR32_AP7000__"},
++ {"ap7010", PART_TYPE_AVR32_AP7010, ARCH_TYPE_AVR32_AP, "__AVR32_AP7010__"},
++ {"ap7020", PART_TYPE_AVR32_AP7020, ARCH_TYPE_AVR32_AP, "__AVR32_AP7020__"},
++ {"uc3a0256", PART_TYPE_AVR32_UC3A0256, ARCH_TYPE_AVR32_UC, "__AVR32_UC3A0256__"},
++ {"uc3a0512", PART_TYPE_AVR32_UC3A0512, ARCH_TYPE_AVR32_UC, "__AVR32_UC3A0512__"},
++ {"uc3a1128", PART_TYPE_AVR32_UC3A1128, ARCH_TYPE_AVR32_UC, "__AVR32_UC3A1128__"},
++ {"uc3a1256", PART_TYPE_AVR32_UC3A1256, ARCH_TYPE_AVR32_UC, "__AVR32_UC3A1256__"},
++ {"uc3a1512", PART_TYPE_AVR32_UC3A1512, ARCH_TYPE_AVR32_UC, "__AVR32_UC3A1512__"},
++ {NULL, 0, 0, NULL}
++};
++
++/* List of all known AVR32 architectures */
++static const struct arch_type_s avr32_arch_types[] = {
++ /* name, architecture type, microarchitecture type, feature flags, macro */
++ {"ap", ARCH_TYPE_AVR32_AP, UARCH_TYPE_AVR32B, FLAG_AVR32_HAS_DSP |
++ FLAG_AVR32_HAS_SIMD | FLAG_AVR32_HAS_UNALIGNED_WORD |
++ FLAG_AVR32_HAS_BRANCH_PRED, "__AVR32_AP__"},
++ {"uc", ARCH_TYPE_AVR32_UC, UARCH_TYPE_AVR32A,
++ FLAG_AVR32_HAS_DSP | FLAG_AVR32_HAS_RMW, "__AVR32_UC__"},
++ {NULL, 0, 0, 0, NULL}
++};
++
++/* Default arch name */
++const char *avr32_arch_name = "ap";
++const char *avr32_part_name = "none";
++
++const struct part_type_s *avr32_part;
++const struct arch_type_s *avr32_arch;
++
++
++/* Override command line options */
++void
++avr32_override_options (void)
++{
++ const struct part_type_s *part;
++ const struct arch_type_s *arch;
++
++ /* Check if part type is set. */
++ for (part = avr32_part_types; part->name; part++)
++ if (strcmp (part->name, avr32_part_name) == 0)
++ break;
++
++ avr32_part = part;
++
++ if (!part->name)
++ {
++ fprintf (stderr, "Unknown part `%s' specified\nKnown part names:\n",
++ avr32_part_name);
++ for (part = avr32_part_types; part->name; part++)
++ fprintf (stderr, "\t%s\n", part->name);
++ avr32_part = &avr32_part_types[PART_TYPE_AVR32_NONE];
++ }
++
++ avr32_arch = &avr32_arch_types[avr32_part->arch_type];
++
++ /* If part was set to "none" then check if arch was set. */
++ if (strcmp (avr32_part->name, "none") == 0)
++ {
++ /* Check if arch type is set. */
++ for (arch = avr32_arch_types; arch->name; arch++)
++ if (strcmp (arch->name, avr32_arch_name) == 0)
++ break;
++
++ avr32_arch = arch;
++
++ if (!arch->name)
++ {
++ fprintf (stderr, "Unknown arch `%s' specified\nKnown arch names:\n",
++ avr32_arch_name);
++ for (arch = avr32_arch_types; arch->name; arch++)
++ fprintf (stderr, "\t%s\n", arch->name);
++ avr32_arch = &avr32_arch_types[ARCH_TYPE_AVR32_AP];
++ }
++ }
++
++ /* If optimization level is two or greater, then align start of loops to a
++ word boundary since this will allow folding the first insn of the loop.
++ Do this only for targets supporting branch prediction. */
++ if (optimize >= 2 && TARGET_BRANCH_PRED)
++ align_loops = 2;
++
++ if (AVR32_ALWAYS_PIC)
++ flag_pic = 1;
++
++ if (target_flags & AVR32_FLAG_NO_PIC)
++ flag_pic = 0;
++
++ avr32_add_gc_roots ();
++}
++
++
++/*
++If defined, a function that outputs the assembler code for entry to a
++function. The prologue is responsible for setting up the stack frame,
++initializing the frame pointer register, saving registers that must be
++saved, and allocating size additional bytes of storage for the
++local variables. size is an integer. file is a stdio
++stream to which the assembler code should be output.
++
++The label for the beginning of the function need not be output by this
++macro. That has already been done when the macro is run.
++
++To determine which registers to save, the macro can refer to the array
++regs_ever_live: element r is nonzero if hard register
++r is used anywhere within the function. This implies the function
++prologue should save register r, provided it is not one of the
++call-used registers. (TARGET_ASM_FUNCTION_EPILOGUE must likewise use
++regs_ever_live.)
++
++On machines that have ``register windows'', the function entry code does
++not save on the stack the registers that are in the windows, even if
++they are supposed to be preserved by function calls; instead it takes
++appropriate steps to ``push'' the register stack, if any non-call-used
++registers are used in the function.
++
++On machines where functions may or may not have frame-pointers, the
++function entry code must vary accordingly; it must set up the frame
++pointer if one is wanted, and not otherwise. To determine whether a
++frame pointer is in wanted, the macro can refer to the variable
++frame_pointer_needed. The variable's value will be 1 at run
++time in a function that needs a frame pointer. (see Elimination).
++
++The function entry code is responsible for allocating any stack space
++required for the function. This stack space consists of the regions
++listed below. In most cases, these regions are allocated in the
++order listed, with the last listed region closest to the top of the
++stack (the lowest address if STACK_GROWS_DOWNWARD is defined, and
++the highest address if it is not defined). You can use a different order
++for a machine if doing so is more convenient or required for
++compatibility reasons. Except in cases where required by standard
++or by a debugger, there is no reason why the stack layout used by GCC
++need agree with that used by other compilers for a machine.
++*/
++
++#undef TARGET_ASM_FUNCTION_PROLOGUE
++#define TARGET_ASM_FUNCTION_PROLOGUE avr32_target_asm_function_prologue
++
++
++#undef TARGET_DEFAULT_SHORT_ENUMS
++#define TARGET_DEFAULT_SHORT_ENUMS hook_bool_void_false
++
++#undef TARGET_PROMOTE_FUNCTION_ARGS
++#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_tree_true
++
++#undef TARGET_PROMOTE_FUNCTION_RETURN
++#define TARGET_PROMOTE_FUNCTION_RETURN hook_bool_tree_true
++
++#undef TARGET_PROMOTE_PROTOTYPES
++#define TARGET_PROMOTE_PROTOTYPES hook_bool_tree_true
++
++#undef TARGET_MUST_PASS_IN_STACK
++#define TARGET_MUST_PASS_IN_STACK avr32_must_pass_in_stack
++
++#undef TARGET_PASS_BY_REFERENCE
++#define TARGET_PASS_BY_REFERENCE avr32_pass_by_reference
++
++#undef TARGET_STRICT_ARGUMENT_NAMING
++#define TARGET_STRICT_ARGUMENT_NAMING avr32_strict_argument_naming
++
++#undef TARGET_VECTOR_MODE_SUPPORTED_P
++#define TARGET_VECTOR_MODE_SUPPORTED_P avr32_vector_mode_supported
++
++#undef TARGET_RETURN_IN_MEMORY
++#define TARGET_RETURN_IN_MEMORY avr32_return_in_memory
++
++#undef TARGET_RETURN_IN_MSB
++#define TARGET_RETURN_IN_MSB avr32_return_in_msb
++
++#undef TARGET_ARG_PARTIAL_BYTES
++#define TARGET_ARG_PARTIAL_BYTES avr32_arg_partial_bytes
++
++#undef TARGET_STRIP_NAME_ENCODING
++#define TARGET_STRIP_NAME_ENCODING avr32_strip_name_encoding
++
++#define streq(string1, string2) (strcmp (string1, string2) == 0)
++
++#undef TARGET_ATTRIBUTE_TABLE
++#define TARGET_ATTRIBUTE_TABLE avr32_attribute_table
++
++#undef TARGET_COMP_TYPE_ATTRIBUTES
++#define TARGET_COMP_TYPE_ATTRIBUTES avr32_comp_type_attributes
++
++
++#undef TARGET_RTX_COSTS
++#define TARGET_RTX_COSTS avr32_rtx_costs
++
++#undef TARGET_CANNOT_FORCE_CONST_MEM
++#define TARGET_CANNOT_FORCE_CONST_MEM avr32_cannot_force_const_mem
++
++#undef TARGET_ASM_INTEGER
++#define TARGET_ASM_INTEGER avr32_assemble_integer
++
++/*
++ * Switches to the appropriate section for output of constant pool
++ * entry x in mode. You can assume that x is some kind of constant in
++ * RTL. The argument mode is redundant except in the case of a
++ * const_int rtx. Select the section by calling readonly_data_ section
++ * or one of the alternatives for other sections. align is the
++ * constant alignment in bits.
++ *
++ * The default version of this function takes care of putting symbolic
++ * constants in flag_ pic mode in data_section and everything else in
++ * readonly_data_section.
++ */
++#undef TARGET_ASM_SELECT_RTX_SECTION
++#define TARGET_ASM_SELECT_RTX_SECTION avr32_select_rtx_section
++
++
++/*
++ * If non-null, this hook performs a target-specific pass over the
++ * instruction stream. The compiler will run it at all optimization
++ * levels, just before the point at which it normally does
++ * delayed-branch scheduling.
++ *
++ * The exact purpose of the hook varies from target to target. Some
++ * use it to do transformations that are necessary for correctness,
++ * such as laying out in-function constant pools or avoiding hardware
++ * hazards. Others use it as an opportunity to do some
++ * machine-dependent optimizations.
++ *
++ * You need not implement the hook if it has nothing to do. The
++ * default definition is null.
++ */
++#undef TARGET_MACHINE_DEPENDENT_REORG
++#define TARGET_MACHINE_DEPENDENT_REORG avr32_reorg
++
++/* Target hook for assembling integer objects.
++ Need to handle integer vectors */
++static bool
++avr32_assemble_integer (rtx x, unsigned int size, int aligned_p)
++{
++ if (avr32_vector_mode_supported (GET_MODE (x)))
++ {
++ int i, units;
++
++ if (GET_CODE (x) != CONST_VECTOR)
++ abort ();
++
++ units = CONST_VECTOR_NUNITS (x);
++
++ switch (GET_MODE (x))
++ {
++ case V2HImode:
++ size = 2;
++ break;
++ case V4QImode:
++ size = 1;
++ break;
++ default:
++ abort ();
++ }
++
++ for (i = 0; i < units; i++)
++ {
++ rtx elt;
++
++ elt = CONST_VECTOR_ELT (x, i);
++ assemble_integer (elt, size, i == 0 ? 32 : size * BITS_PER_UNIT, 1);
++ }
++
++ return true;
++ }
++
++ return default_assemble_integer (x, size, aligned_p);
++}
++
++/*
++ * This target hook describes the relative costs of RTL expressions.
++ *
++ * The cost may depend on the precise form of the expression, which is
++ * available for examination in x, and the rtx code of the expression
++ * in which it is contained, found in outer_code. code is the
++ * expression code--redundant, since it can be obtained with GET_CODE
++ * (x).
++ *
++ * In implementing this hook, you can use the construct COSTS_N_INSNS
++ * (n) to specify a cost equal to n fast instructions.
++ *
++ * On entry to the hook, *total contains a default estimate for the
++ * cost of the expression. The hook should modify this value as
++ * necessary. Traditionally, the default costs are COSTS_N_INSNS (5)
++ * for multiplications, COSTS_N_INSNS (7) for division and modulus
++ * operations, and COSTS_N_INSNS (1) for all other operations.
++ *
++ * When optimizing for code size, i.e. when optimize_size is non-zero,
++ * this target hook should be used to estimate the relative size cost
++ * of an expression, again relative to COSTS_N_INSNS.
++ *
++ * The hook returns true when all subexpressions of x have been
++ * processed, and false when rtx_cost should recurse.
++ */
++
++/* Worker routine for avr32_rtx_costs. */
++static inline int
++avr32_rtx_costs_1 (rtx x, enum rtx_code code ATTRIBUTE_UNUSED,
++ enum rtx_code outer ATTRIBUTE_UNUSED)
++{
++ enum machine_mode mode = GET_MODE (x);
++
++ switch (GET_CODE (x))
++ {
++ case MEM:
++ /* Using pre decrement / post increment memory operations on the
++ avr32_uc architecture means that two writebacks must be performed
++ and hence two cycles are needed. */
++ if (!optimize_size
++ && GET_MODE_SIZE (mode) <= 2 * UNITS_PER_WORD
++ && avr32_arch->arch_type == ARCH_TYPE_AVR32_UC
++ && (GET_CODE (XEXP (x, 0)) == PRE_DEC
++ || GET_CODE (XEXP (x, 0)) == POST_INC))
++ return COSTS_N_INSNS (4);
++
++ /* Memory costs quite a lot for the first word, but subsequent words
++ load at the equivalent of a single insn each. */
++ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
++ return COSTS_N_INSNS (2 + (GET_MODE_SIZE (mode) / UNITS_PER_WORD));
++
++ return COSTS_N_INSNS (3);
++ case SYMBOL_REF:
++ case CONST:
++ /* These are valid for the pseudo insns: lda.w and call which operates
++ on direct addresses. We assume that the cost of a lda.w is the same
++ as the cost of a ld.w insn. */
++ return (outer == SET) ? COSTS_N_INSNS (3) : COSTS_N_INSNS (1);
++ case DIV:
++ case MOD:
++ case UDIV:
++ case UMOD:
++ return optimize_size ? COSTS_N_INSNS (1) : COSTS_N_INSNS (16);
++
++ case ROTATE:
++ case ROTATERT:
++ if (mode == TImode)
++ return COSTS_N_INSNS (100);
++
++ if (mode == DImode)
++ return COSTS_N_INSNS (10);
++ return COSTS_N_INSNS (4);
++ case ASHIFT:
++ case LSHIFTRT:
++ case ASHIFTRT:
++ case NOT:
++ if (mode == TImode)
++ return COSTS_N_INSNS (10);
++
++ if (mode == DImode)
++ return COSTS_N_INSNS (4);
++ return COSTS_N_INSNS (1);
++ case PLUS:
++ case MINUS:
++ case NEG:
++ case COMPARE:
++ case ABS:
++ if (GET_MODE_CLASS (mode) == MODE_FLOAT)
++ return COSTS_N_INSNS (100);
++
++ if (mode == TImode)
++ return COSTS_N_INSNS (50);
++
++ if (mode == DImode)
++ return COSTS_N_INSNS (2);
++ return COSTS_N_INSNS (1);
++
++ case MULT:
++ {
++ if (GET_MODE_CLASS (mode) == MODE_FLOAT)
++ return COSTS_N_INSNS (300);
++
++ if (mode == TImode)
++ return COSTS_N_INSNS (16);
++
++ if (mode == DImode)
++ return COSTS_N_INSNS (4);
++
++ if (mode == HImode)
++ return COSTS_N_INSNS (2);
++
++ return COSTS_N_INSNS (3);
++ }
++ case IF_THEN_ELSE:
++ if (GET_CODE (XEXP (x, 1)) == PC || GET_CODE (XEXP (x, 2)) == PC)
++ return COSTS_N_INSNS (4);
++ return COSTS_N_INSNS (1);
++ case SIGN_EXTEND:
++ case ZERO_EXTEND:
++ /* Sign/Zero extensions of registers cost quite much since these
++ instrcutions only take one register operand which means that gcc
++ often must insert some move instrcutions */
++ if (mode == QImode || mode == HImode)
++ return (COSTS_N_INSNS (GET_CODE (XEXP (x, 0)) == MEM ? 0 : 1));
++ return COSTS_N_INSNS (4);
++ case UNSPEC:
++ /* divmod operations */
++ if (XINT (x, 1) == UNSPEC_UDIVMODSI4_INTERNAL
++ || XINT (x, 1) == UNSPEC_DIVMODSI4_INTERNAL)
++ {
++ return optimize_size ? COSTS_N_INSNS (1) : COSTS_N_INSNS (16);
++ }
++ /* Fallthrough */
++ default:
++ return COSTS_N_INSNS (1);
++ }
++}
++
++static bool
++avr32_rtx_costs (rtx x, int code, int outer_code, int *total)
++{
++ *total = avr32_rtx_costs_1 (x, code, outer_code);
++ return true;
++}
++
++
++bool
++avr32_cannot_force_const_mem (rtx x ATTRIBUTE_UNUSED)
++{
++ /* Do not want symbols in the constant pool when compiling pic or if using
++ address pseudo instructions. */
++ return ((flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS)
++ && avr32_find_symbol (x) != NULL_RTX);
++}
++
++
++/* Table of machine attributes. */
++const struct attribute_spec avr32_attribute_table[] = {
++ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
++ /* Interrupt Service Routines have special prologue and epilogue
++ requirements. */
++ {"isr", 0, 1, false, false, false, avr32_handle_isr_attribute},
++ {"interrupt", 0, 1, false, false, false, avr32_handle_isr_attribute},
++ {"acall", 0, 1, false, true, true, avr32_handle_acall_attribute},
++ {"naked", 0, 0, true, false, false, avr32_handle_fndecl_attribute},
++ {NULL, 0, 0, false, false, false, NULL}
++};
++
++
++typedef struct
++{
++ const char *const arg;
++ const unsigned long return_value;
++}
++isr_attribute_arg;
++
++static const isr_attribute_arg isr_attribute_args[] = {
++ {"FULL", AVR32_FT_ISR_FULL},
++ {"full", AVR32_FT_ISR_FULL},
++ {"HALF", AVR32_FT_ISR_HALF},
++ {"half", AVR32_FT_ISR_HALF},
++ {"NONE", AVR32_FT_ISR_NONE},
++ {"none", AVR32_FT_ISR_NONE},
++ {"UNDEF", AVR32_FT_ISR_NONE},
++ {"undef", AVR32_FT_ISR_NONE},
++ {"SWI", AVR32_FT_ISR_NONE},
++ {"swi", AVR32_FT_ISR_NONE},
++ {NULL, AVR32_FT_ISR_NONE}
++};
++
++/* Returns the (interrupt) function type of the current
++ function, or AVR32_FT_UNKNOWN if the type cannot be determined. */
++
++static unsigned long
++avr32_isr_value (tree argument)
++{
++ const isr_attribute_arg *ptr;
++ const char *arg;
++
++ /* No argument - default to ISR_NONE. */
++ if (argument == NULL_TREE)
++ return AVR32_FT_ISR_NONE;
++
++ /* Get the value of the argument. */
++ if (TREE_VALUE (argument) == NULL_TREE
++ || TREE_CODE (TREE_VALUE (argument)) != STRING_CST)
++ return AVR32_FT_UNKNOWN;
++
++ arg = TREE_STRING_POINTER (TREE_VALUE (argument));
++
++ /* Check it against the list of known arguments. */
++ for (ptr = isr_attribute_args; ptr->arg != NULL; ptr++)
++ if (streq (arg, ptr->arg))
++ return ptr->return_value;
++
++ /* An unrecognized interrupt type. */
++ return AVR32_FT_UNKNOWN;
++}
++
++
++
++/*
++These hooks specify assembly directives for creating certain kinds
++of integer object. The TARGET_ASM_BYTE_OP directive creates a
++byte-sized object, the TARGET_ASM_ALIGNED_HI_OP one creates an
++aligned two-byte object, and so on. Any of the hooks may be
++NULL, indicating that no suitable directive is available.
++
++The compiler will print these strings at the start of a new line,
++followed immediately by the object's initial value. In most cases,
++the string should contain a tab, a pseudo-op, and then another tab.
++*/
++#undef TARGET_ASM_BYTE_OP
++#define TARGET_ASM_BYTE_OP "\t.byte\t"
++#undef TARGET_ASM_ALIGNED_HI_OP
++#define TARGET_ASM_ALIGNED_HI_OP "\t.align 1\n\t.short\t"
++#undef TARGET_ASM_ALIGNED_SI_OP
++#define TARGET_ASM_ALIGNED_SI_OP "\t.align 2\n\t.int\t"
++#undef TARGET_ASM_ALIGNED_DI_OP
++#define TARGET_ASM_ALIGNED_DI_OP NULL
++#undef TARGET_ASM_ALIGNED_TI_OP
++#define TARGET_ASM_ALIGNED_TI_OP NULL
++#undef TARGET_ASM_UNALIGNED_HI_OP
++#define TARGET_ASM_UNALIGNED_HI_OP "\t.short\t"
++#undef TARGET_ASM_UNALIGNED_SI_OP
++#define TARGET_ASM_UNALIGNED_SI_OP "\t.int\t"
++#undef TARGET_ASM_UNALIGNED_DI_OP
++#define TARGET_ASM_UNALIGNED_DI_OP NULL
++#undef TARGET_ASM_UNALIGNED_TI_OP
++#define TARGET_ASM_UNALIGNED_TI_OP NULL
++
++#undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE
++#define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE avr32_sched_use_dfa_pipeline_interface
++
++#undef TARGET_ASM_OUTPUT_MI_THUNK
++#define TARGET_ASM_OUTPUT_MI_THUNK avr32_output_mi_thunk
++
++
++static void
++avr32_output_mi_thunk (FILE * file,
++ tree thunk ATTRIBUTE_UNUSED,
++ HOST_WIDE_INT delta,
++ HOST_WIDE_INT vcall_offset, tree function)
++{
++ int mi_delta = delta;
++ int this_regno =
++ (avr32_return_in_memory (DECL_RESULT (function), TREE_TYPE (function)) ?
++ INTERNAL_REGNUM (11) : INTERNAL_REGNUM (12));
++
++
++ if (!avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21")
++ || vcall_offset)
++ {
++ fprintf (file, "\tpushm\tr10\n");
++ }
++
++
++ if (mi_delta != 0)
++ {
++ if (avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21"))
++ {
++ fprintf (file, "\tsub\t%s, -0x%x\n", reg_names[this_regno],
++ mi_delta);
++ }
++ else
++ {
++ /* Immediate is larger than k21 we must make us a temp register by
++ pushing a register to the stack. */
++ fprintf (file, "\tmov\tr10, lo(%x)\n", mi_delta);
++ fprintf (file, "\torh\tr10, hi(%x)\n", mi_delta);
++ fprintf (file, "\tadd\t%s, r10\n", reg_names[this_regno]);
++ }
++ }
++
++
++ if (vcall_offset != 0)
++ {
++ fprintf (file, "\tld.w\tr10, %s[0]\n", reg_names[this_regno]);
++ fprintf (file, "\tld.w\tr10, r10[%i]\n", (int) vcall_offset);
++ fprintf (file, "\tadd\t%s, r10\n", reg_names[this_regno]);
++ }
++
++
++ if (!avr32_const_ok_for_constraint_p (mi_delta, 'I', "Is21")
++ || vcall_offset)
++ {
++ fprintf (file, "\tpopm\tr10\n");
++ }
++
++ if (flag_pic)
++ {
++ /* Don't know how we should do this!!! For now we'll just use an
++ extended branch instruction and hope that the function will be
++ reached. */
++ fprintf (file, "\tbral\t");
++ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
++ fputc ('\n', file);
++ }
++ else
++ {
++ fprintf (file, "\tlddpc\tpc, 0f\n");
++ fprintf (file, "\t.align 2\n");
++ fputs ("0:\t.long\t", file);
++ assemble_name (file, XSTR (XEXP (DECL_RTL (function), 0), 0));
++ fputc ('\n', file);
++ }
++}
++
++/* Implements target hook vector_mode_supported. */
++bool
++avr32_vector_mode_supported (enum machine_mode mode)
++{
++ if ((mode == V2HImode) || (mode == V4QImode))
++ return true;
++
++ return false;
++}
++
++
++#undef TARGET_INIT_LIBFUNCS
++#define TARGET_INIT_LIBFUNCS avr32_init_libfuncs
++
++#undef TARGET_INIT_BUILTINS
++#define TARGET_INIT_BUILTINS avr32_init_builtins
++
++#undef TARGET_EXPAND_BUILTIN
++#define TARGET_EXPAND_BUILTIN avr32_expand_builtin
++
++tree int_ftype_int, int_ftype_void, short_ftype_short, void_ftype_int_int,
++ void_ftype_ptr_int;
++tree void_ftype_int, void_ftype_void, int_ftype_ptr_int;
++tree short_ftype_short, int_ftype_int_short, int_ftype_short_short,
++ short_ftype_short_short;
++tree int_ftype_int_int, longlong_ftype_int_short, longlong_ftype_short_short;
++tree void_ftype_int_int_int_int_int, void_ftype_int_int_int;
++tree longlong_ftype_int_int, void_ftype_int_int_longlong;
++tree int_ftype_int_int_int, longlong_ftype_longlong_int_short;
++tree longlong_ftype_longlong_short_short, int_ftype_int_short_short;
++
++#define def_builtin(NAME, TYPE, CODE) \
++ lang_hooks.builtin_function ((NAME), (TYPE), (CODE), \
++ BUILT_IN_MD, NULL, NULL_TREE)
++
++#define def_mbuiltin(MASK, NAME, TYPE, CODE) \
++ do \
++ { \
++ if ((MASK)) \
++ lang_hooks.builtin_function ((NAME), (TYPE), (CODE), \
++ BUILT_IN_MD, NULL, NULL_TREE); \
++ } \
++ while (0)
++
++struct builtin_description
++{
++ const unsigned int mask;
++ const enum insn_code icode;
++ const char *const name;
++ const int code;
++ const enum rtx_code comparison;
++ const unsigned int flag;
++ const tree *ftype;
++};
++
++static const struct builtin_description bdesc_2arg[] = {
++#define DSP_BUILTIN(code, builtin, ftype) \
++ { 1, CODE_FOR_##code, "__builtin_" #code , \
++ AVR32_BUILTIN_##builtin, 0, 0, ftype }
++
++ DSP_BUILTIN (mulsathh_h, MULSATHH_H, &short_ftype_short_short),
++ DSP_BUILTIN (mulsathh_w, MULSATHH_W, &int_ftype_short_short),
++ DSP_BUILTIN (mulsatrndhh_h, MULSATRNDHH_H, &short_ftype_short_short),
++ DSP_BUILTIN (mulsatrndwh_w, MULSATRNDWH_W, &int_ftype_int_short),
++ DSP_BUILTIN (mulsatwh_w, MULSATWH_W, &int_ftype_int_short),
++ DSP_BUILTIN (satadd_h, SATADD_H, &short_ftype_short_short),
++ DSP_BUILTIN (satsub_h, SATSUB_H, &short_ftype_short_short),
++ DSP_BUILTIN (satadd_w, SATADD_W, &int_ftype_int_int),
++ DSP_BUILTIN (satsub_w, SATSUB_W, &int_ftype_int_int),
++ DSP_BUILTIN (mulwh_d, MULWH_D, &longlong_ftype_int_short),
++ DSP_BUILTIN (mulnwh_d, MULNWH_D, &longlong_ftype_int_short)
++};
++
++
++void
++avr32_init_builtins (void)
++{
++ unsigned int i;
++ const struct builtin_description *d;
++ tree endlink = void_list_node;
++ tree int_endlink = tree_cons (NULL_TREE, integer_type_node, endlink);
++ tree longlong_endlink =
++ tree_cons (NULL_TREE, long_long_integer_type_node, endlink);
++ tree short_endlink =
++ tree_cons (NULL_TREE, short_integer_type_node, endlink);
++ tree void_endlink = tree_cons (NULL_TREE, void_type_node, endlink);
++
++ /* int func (int) */
++ int_ftype_int = build_function_type (integer_type_node, int_endlink);
++
++ /* short func (short) */
++ short_ftype_short
++ = build_function_type (short_integer_type_node, short_endlink);
++
++ /* short func (short, short) */
++ short_ftype_short_short
++ = build_function_type (short_integer_type_node,
++ tree_cons (NULL_TREE, short_integer_type_node,
++ short_endlink));
++
++ /* long long func (long long, short, short) */
++ longlong_ftype_longlong_short_short
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, long_long_integer_type_node,
++ tree_cons (NULL_TREE,
++ short_integer_type_node,
++ short_endlink)));
++
++ /* long long func (short, short) */
++ longlong_ftype_short_short
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, short_integer_type_node,
++ short_endlink));
++
++ /* int func (int, int) */
++ int_ftype_int_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ int_endlink));
++
++ /* long long func (int, int) */
++ longlong_ftype_int_int
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ int_endlink));
++
++ /* long long int func (long long, int, short) */
++ longlong_ftype_longlong_int_short
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, long_long_integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ short_endlink)));
++
++ /* long long int func (int, short) */
++ longlong_ftype_int_short
++ = build_function_type (long_long_integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ short_endlink));
++
++ /* int func (int, short, short) */
++ int_ftype_int_short_short
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ short_integer_type_node,
++ short_endlink)));
++
++ /* int func (short, short) */
++ int_ftype_short_short
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, short_integer_type_node,
++ short_endlink));
++
++ /* int func (int, short) */
++ int_ftype_int_short
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ short_endlink));
++
++ /* void func (int, int) */
++ void_ftype_int_int
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ int_endlink));
++
++ /* void func (int, int, int) */
++ void_ftype_int_int_int
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ int_endlink)));
++
++ /* void func (int, int, long long) */
++ void_ftype_int_int_longlong
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ longlong_endlink)));
++
++ /* void func (int, int, int, int, int) */
++ void_ftype_int_int_int_int_int
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE,
++ integer_type_node,
++ tree_cons
++ (NULL_TREE,
++ integer_type_node,
++ int_endlink)))));
++
++ /* void func (void *, int) */
++ void_ftype_ptr_int
++ = build_function_type (void_type_node,
++ tree_cons (NULL_TREE, ptr_type_node, int_endlink));
++
++ /* void func (int) */
++ void_ftype_int = build_function_type (void_type_node, int_endlink);
++
++ /* void func (void) */
++ void_ftype_void = build_function_type (void_type_node, void_endlink);
++
++ /* int func (void) */
++ int_ftype_void = build_function_type (integer_type_node, void_endlink);
++
++ /* int func (void *, int) */
++ int_ftype_ptr_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, ptr_type_node, int_endlink));
++
++ /* int func (int, int, int) */
++ int_ftype_int_int_int
++ = build_function_type (integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ tree_cons (NULL_TREE, integer_type_node,
++ int_endlink)));
++
++ /* Initialize avr32 builtins. */
++ def_builtin ("__builtin_mfsr", int_ftype_int, AVR32_BUILTIN_MFSR);
++ def_builtin ("__builtin_mtsr", void_ftype_int_int, AVR32_BUILTIN_MTSR);
++ def_builtin ("__builtin_mfdr", int_ftype_int, AVR32_BUILTIN_MFDR);
++ def_builtin ("__builtin_mtdr", void_ftype_int_int, AVR32_BUILTIN_MTDR);
++ def_builtin ("__builtin_cache", void_ftype_ptr_int, AVR32_BUILTIN_CACHE);
++ def_builtin ("__builtin_sync", void_ftype_int, AVR32_BUILTIN_SYNC);
++ def_builtin ("__builtin_tlbr", void_ftype_void, AVR32_BUILTIN_TLBR);
++ def_builtin ("__builtin_tlbs", void_ftype_void, AVR32_BUILTIN_TLBS);
++ def_builtin ("__builtin_tlbw", void_ftype_void, AVR32_BUILTIN_TLBW);
++ def_builtin ("__builtin_breakpoint", void_ftype_void,
++ AVR32_BUILTIN_BREAKPOINT);
++ def_builtin ("__builtin_xchg", int_ftype_ptr_int, AVR32_BUILTIN_XCHG);
++ def_builtin ("__builtin_ldxi", int_ftype_ptr_int, AVR32_BUILTIN_LDXI);
++ def_builtin ("__builtin_bswap_16", short_ftype_short,
++ AVR32_BUILTIN_BSWAP16);
++ def_builtin ("__builtin_bswap_32", int_ftype_int, AVR32_BUILTIN_BSWAP32);
++ def_builtin ("__builtin_cop", void_ftype_int_int_int_int_int,
++ AVR32_BUILTIN_COP);
++ def_builtin ("__builtin_mvcr_w", int_ftype_int_int, AVR32_BUILTIN_MVCR_W);
++ def_builtin ("__builtin_mvrc_w", void_ftype_int_int_int,
++ AVR32_BUILTIN_MVRC_W);
++ def_builtin ("__builtin_mvcr_d", longlong_ftype_int_int,
++ AVR32_BUILTIN_MVCR_D);
++ def_builtin ("__builtin_mvrc_d", void_ftype_int_int_longlong,
++ AVR32_BUILTIN_MVRC_D);
++ def_builtin ("__builtin_sats", int_ftype_int_int_int, AVR32_BUILTIN_SATS);
++ def_builtin ("__builtin_satu", int_ftype_int_int_int, AVR32_BUILTIN_SATU);
++ def_builtin ("__builtin_satrnds", int_ftype_int_int_int,
++ AVR32_BUILTIN_SATRNDS);
++ def_builtin ("__builtin_satrndu", int_ftype_int_int_int,
++ AVR32_BUILTIN_SATRNDU);
++ def_builtin ("__builtin_musfr", void_ftype_int, AVR32_BUILTIN_MUSFR);
++ def_builtin ("__builtin_mustr", int_ftype_void, AVR32_BUILTIN_MUSTR);
++ def_builtin ("__builtin_macsathh_w", int_ftype_int_short_short,
++ AVR32_BUILTIN_MACSATHH_W);
++ def_builtin ("__builtin_macwh_d", longlong_ftype_longlong_int_short,
++ AVR32_BUILTIN_MACWH_D);
++ def_builtin ("__builtin_machh_d", longlong_ftype_longlong_short_short,
++ AVR32_BUILTIN_MACHH_D);
++
++ /* Add all builtins that are more or less simple operations on two
++ operands. */
++ for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
++ {
++ /* Use one of the operands; the target can have a different mode for
++ mask-generating compares. */
++
++ if (d->name == 0)
++ continue;
++
++ def_mbuiltin (d->mask, d->name, *(d->ftype), d->code);
++ }
++}
++
++
++/* Subroutine of avr32_expand_builtin to take care of binop insns. */
++
++static rtx
++avr32_expand_binop_builtin (enum insn_code icode, tree arglist, rtx target)
++{
++ rtx pat;
++ tree arg0 = TREE_VALUE (arglist);
++ tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ rtx op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ rtx op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ enum machine_mode tmode = insn_data[icode].operand[0].mode;
++ enum machine_mode mode0 = insn_data[icode].operand[1].mode;
++ enum machine_mode mode1 = insn_data[icode].operand[2].mode;
++
++ if (!target
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++ /* In case the insn wants input operands in modes different from the
++ result, abort. */
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ /* If op0 is already a reg we must cast it to the correct mode. */
++ if (REG_P (op0))
++ op0 = convert_to_mode (mode0, op0, 1);
++ else
++ op0 = copy_to_mode_reg (mode0, op0);
++ }
++ if (!(*insn_data[icode].operand[2].predicate) (op1, mode1))
++ {
++ /* If op1 is already a reg we must cast it to the correct mode. */
++ if (REG_P (op1))
++ op1 = convert_to_mode (mode1, op1, 1);
++ else
++ op1 = copy_to_mode_reg (mode1, op1);
++ }
++ pat = GEN_FCN (icode) (target, op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++}
++
++/* Expand an expression EXP that calls a built-in function,
++ with result going to TARGET if that's convenient
++ (and in mode MODE if that's convenient).
++ SUBTARGET may be used as the target for computing one of EXP's operands.
++ IGNORE is nonzero if the value is to be ignored. */
++
++rtx
++avr32_expand_builtin (tree exp,
++ rtx target,
++ rtx subtarget ATTRIBUTE_UNUSED,
++ enum machine_mode mode ATTRIBUTE_UNUSED,
++ int ignore ATTRIBUTE_UNUSED)
++{
++ const struct builtin_description *d;
++ unsigned int i;
++ enum insn_code icode;
++ tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
++ tree arglist = TREE_OPERAND (exp, 1);
++ tree arg0, arg1, arg2;
++ rtx op0, op1, op2, pat;
++ enum machine_mode tmode, mode0, mode1;
++ enum machine_mode arg0_mode;
++ int fcode = DECL_FUNCTION_CODE (fndecl);
++
++ switch (fcode)
++ {
++ default:
++ break;
++
++ case AVR32_BUILTIN_SATS:
++ case AVR32_BUILTIN_SATU:
++ case AVR32_BUILTIN_SATRNDS:
++ case AVR32_BUILTIN_SATRNDU:
++ {
++ const char *fname;
++ switch (fcode)
++ {
++ default:
++ case AVR32_BUILTIN_SATS:
++ icode = CODE_FOR_sats;
++ fname = "sats";
++ break;
++ case AVR32_BUILTIN_SATU:
++ icode = CODE_FOR_satu;
++ fname = "satu";
++ break;
++ case AVR32_BUILTIN_SATRNDS:
++ icode = CODE_FOR_satrnds;
++ fname = "satrnds";
++ break;
++ case AVR32_BUILTIN_SATRNDU:
++ icode = CODE_FOR_satrndu;
++ fname = "satrndu";
++ break;
++ }
++
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
++
++ tmode = insn_data[icode].operand[0].mode;
++
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, GET_MODE (op0)))
++ {
++ op0 = copy_to_mode_reg (insn_data[icode].operand[0].mode, op0);
++ }
++
++ if (!(*insn_data[icode].operand[1].predicate) (op1, SImode))
++ {
++ error ("Parameter 2 to __builtin_%s should be a constant number.",
++ fname);
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[1].predicate) (op2, SImode))
++ {
++ error ("Parameter 3 to __builtin_%s should be a constant number.",
++ fname);
++ return NULL_RTX;
++ }
++
++ emit_move_insn (target, op0);
++ pat = GEN_FCN (icode) (target, op1, op2);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return target;
++ }
++ case AVR32_BUILTIN_MUSTR:
++ icode = CODE_FOR_mustr;
++ tmode = insn_data[icode].operand[0].mode;
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++ pat = GEN_FCN (icode) (target);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++
++ case AVR32_BUILTIN_MFSR:
++ icode = CODE_FOR_mfsr;
++ arg0 = TREE_VALUE (arglist);
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ error ("Parameter 1 to __builtin_mfsr must be a constant number");
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++ pat = GEN_FCN (icode) (target, op0);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++ case AVR32_BUILTIN_MTSR:
++ icode = CODE_FOR_mtsr;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ mode0 = insn_data[icode].operand[0].mode;
++ mode1 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))
++ {
++ error ("Parameter 1 to __builtin_mtsr must be a constant number");
++ return gen_reg_rtx (mode0);
++ }
++ if (!(*insn_data[icode].operand[1].predicate) (op1, mode1))
++ op1 = copy_to_mode_reg (mode1, op1);
++ pat = GEN_FCN (icode) (op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_MFDR:
++ icode = CODE_FOR_mfdr;
++ arg0 = TREE_VALUE (arglist);
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ error ("Parameter 1 to __builtin_mfdr must be a constant number");
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++ pat = GEN_FCN (icode) (target, op0);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++ case AVR32_BUILTIN_MTDR:
++ icode = CODE_FOR_mtdr;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ mode0 = insn_data[icode].operand[0].mode;
++ mode1 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))
++ {
++ error ("Parameter 1 to __builtin_mtdr must be a constant number");
++ return gen_reg_rtx (mode0);
++ }
++ if (!(*insn_data[icode].operand[1].predicate) (op1, mode1))
++ op1 = copy_to_mode_reg (mode1, op1);
++ pat = GEN_FCN (icode) (op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_CACHE:
++ icode = CODE_FOR_cache;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ mode0 = insn_data[icode].operand[0].mode;
++ mode1 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[1].predicate) (op1, mode1))
++ {
++ error ("Parameter 2 to __builtin_cache must be a constant number");
++ return gen_reg_rtx (mode1);
++ }
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))
++ op0 = copy_to_mode_reg (mode0, op0);
++
++ pat = GEN_FCN (icode) (op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_SYNC:
++ case AVR32_BUILTIN_MUSFR:
++ {
++ const char *fname;
++ switch (fcode)
++ {
++ default:
++ case AVR32_BUILTIN_SYNC:
++ icode = CODE_FOR_sync;
++ fname = "sync";
++ break;
++ case AVR32_BUILTIN_MUSFR:
++ icode = CODE_FOR_musfr;
++ fname = "musfr";
++ break;
++ }
++
++ arg0 = TREE_VALUE (arglist);
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ mode0 = insn_data[icode].operand[0].mode;
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, mode0))
++ {
++ if (icode == CODE_FOR_musfr)
++ op0 = copy_to_mode_reg (mode0, op0);
++ else
++ {
++ error ("Parameter to __builtin_%s is illegal.", fname);
++ return gen_reg_rtx (mode0);
++ }
++ }
++ pat = GEN_FCN (icode) (op0);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ }
++ case AVR32_BUILTIN_TLBR:
++ icode = CODE_FOR_tlbr;
++ pat = GEN_FCN (icode) (NULL_RTX);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_TLBS:
++ icode = CODE_FOR_tlbs;
++ pat = GEN_FCN (icode) (NULL_RTX);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_TLBW:
++ icode = CODE_FOR_tlbw;
++ pat = GEN_FCN (icode) (NULL_RTX);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_BREAKPOINT:
++ icode = CODE_FOR_breakpoint;
++ pat = GEN_FCN (icode) (NULL_RTX);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return NULL_RTX;
++ case AVR32_BUILTIN_XCHG:
++ icode = CODE_FOR_xchg;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++ mode1 = insn_data[icode].operand[3].mode;
++
++ if (!(*insn_data[icode].operand[3].predicate) (op1, mode1))
++ {
++ op1 = copy_to_mode_reg (mode1, op1);
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op0, mode0))
++ {
++ op0 = copy_to_mode_reg (mode0, op0);
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++ pat = GEN_FCN (icode) (target, op0, op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++ case AVR32_BUILTIN_LDXI:
++ icode = CODE_FOR_ldxi;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++ mode1 = insn_data[icode].operand[2].mode;
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ op0 = copy_to_mode_reg (mode0, op0);
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op1, mode1))
++ {
++ op1 = copy_to_mode_reg (mode1, op1);
++ }
++
++ if (!(*insn_data[icode].operand[3].predicate) (op2, SImode))
++ {
++ error
++ ("Parameter 3 to __builtin_ldxi must be a valid extract shift operand: (0|8|16|24)");
++ return gen_reg_rtx (mode0);
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++ pat = GEN_FCN (icode) (target, op0, op1, op2);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++ case AVR32_BUILTIN_BSWAP16:
++ {
++ icode = CODE_FOR_bswap_16;
++ arg0 = TREE_VALUE (arglist);
++ arg0_mode = TYPE_MODE (TREE_TYPE (arg0));
++ mode0 = insn_data[icode].operand[1].mode;
++ if (arg0_mode != mode0)
++ arg0 = build1 (NOP_EXPR,
++ (*lang_hooks.types.type_for_mode) (mode0, 0), arg0);
++
++ op0 = expand_expr (arg0, NULL_RTX, HImode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ op0 = copy_to_mode_reg (mode0, op0);
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ {
++ target = gen_reg_rtx (tmode);
++ }
++
++
++ pat = GEN_FCN (icode) (target, op0);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return target;
++ }
++ case AVR32_BUILTIN_BSWAP32:
++ {
++ icode = CODE_FOR_bswap_32;
++ arg0 = TREE_VALUE (arglist);
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, mode0))
++ {
++ op0 = copy_to_mode_reg (mode0, op0);
++ }
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++
++ pat = GEN_FCN (icode) (target, op0);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return target;
++ }
++ case AVR32_BUILTIN_MVCR_W:
++ case AVR32_BUILTIN_MVCR_D:
++ {
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++
++ if (fcode == AVR32_BUILTIN_MVCR_W)
++ icode = CODE_FOR_mvcrsi;
++ else
++ icode = CODE_FOR_mvcrdi;
++
++ tmode = insn_data[icode].operand[0].mode;
++
++ if (target == 0
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++ if (!(*insn_data[icode].operand[1].predicate) (op0, SImode))
++ {
++ error
++ ("Parameter 1 to __builtin_cop is not a valid coprocessor number.");
++ error ("Number should be between 0 and 7.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op1, SImode))
++ {
++ error
++ ("Parameter 2 to __builtin_cop is not a valid coprocessor register number.");
++ error ("Number should be between 0 and 15.");
++ return NULL_RTX;
++ }
++
++ pat = GEN_FCN (icode) (target, op0, op1);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return target;
++ }
++ case AVR32_BUILTIN_MACSATHH_W:
++ case AVR32_BUILTIN_MACWH_D:
++ case AVR32_BUILTIN_MACHH_D:
++ {
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
++
++ icode = ((fcode == AVR32_BUILTIN_MACSATHH_W) ? CODE_FOR_macsathh_w :
++ (fcode == AVR32_BUILTIN_MACWH_D) ? CODE_FOR_macwh_d :
++ CODE_FOR_machh_d);
++
++ tmode = insn_data[icode].operand[0].mode;
++ mode0 = insn_data[icode].operand[1].mode;
++ mode1 = insn_data[icode].operand[2].mode;
++
++
++ if (!target
++ || GET_MODE (target) != tmode
++ || !(*insn_data[icode].operand[0].predicate) (target, tmode))
++ target = gen_reg_rtx (tmode);
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, tmode))
++ {
++ /* If op0 is already a reg we must cast it to the correct mode. */
++ if (REG_P (op0))
++ op0 = convert_to_mode (tmode, op0, 1);
++ else
++ op0 = copy_to_mode_reg (tmode, op0);
++ }
++
++ if (!(*insn_data[icode].operand[1].predicate) (op1, mode0))
++ {
++ /* If op1 is already a reg we must cast it to the correct mode. */
++ if (REG_P (op1))
++ op1 = convert_to_mode (mode0, op1, 1);
++ else
++ op1 = copy_to_mode_reg (mode0, op1);
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op2, mode1))
++ {
++ /* If op1 is already a reg we must cast it to the correct mode. */
++ if (REG_P (op2))
++ op2 = convert_to_mode (mode1, op2, 1);
++ else
++ op2 = copy_to_mode_reg (mode1, op2);
++ }
++
++ emit_move_insn (target, op0);
++
++ pat = GEN_FCN (icode) (target, op1, op2);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++ return target;
++ }
++ case AVR32_BUILTIN_MVRC_W:
++ case AVR32_BUILTIN_MVRC_D:
++ {
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
++
++ if (fcode == AVR32_BUILTIN_MVRC_W)
++ icode = CODE_FOR_mvrcsi;
++ else
++ icode = CODE_FOR_mvrcdi;
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, SImode))
++ {
++ error ("Parameter 1 is not a valid coprocessor number.");
++ error ("Number should be between 0 and 7.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[1].predicate) (op1, SImode))
++ {
++ error ("Parameter 2 is not a valid coprocessor register number.");
++ error ("Number should be between 0 and 15.");
++ return NULL_RTX;
++ }
++
++ if (GET_CODE (op2) == CONST_INT
++ || GET_CODE (op2) == CONST
++ || GET_CODE (op2) == SYMBOL_REF || GET_CODE (op2) == LABEL_REF)
++ {
++ op2 = force_const_mem (insn_data[icode].operand[2].mode, op2);
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op2, GET_MODE (op2)))
++ op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2);
++
++
++ pat = GEN_FCN (icode) (op0, op1, op2);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return NULL_RTX;
++ }
++ case AVR32_BUILTIN_COP:
++ {
++ rtx op3, op4;
++ tree arg3, arg4;
++ icode = CODE_FOR_cop;
++ arg0 = TREE_VALUE (arglist);
++ arg1 = TREE_VALUE (TREE_CHAIN (arglist));
++ arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
++ arg3 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arglist))));
++ arg4 =
++ TREE_VALUE (TREE_CHAIN
++ (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arglist)))));
++ op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
++ op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
++ op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
++ op3 = expand_expr (arg3, NULL_RTX, VOIDmode, 0);
++ op4 = expand_expr (arg4, NULL_RTX, VOIDmode, 0);
++
++ if (!(*insn_data[icode].operand[0].predicate) (op0, SImode))
++ {
++ error
++ ("Parameter 1 to __builtin_cop is not a valid coprocessor number.");
++ error ("Number should be between 0 and 7.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[1].predicate) (op1, SImode))
++ {
++ error
++ ("Parameter 2 to __builtin_cop is not a valid coprocessor register number.");
++ error ("Number should be between 0 and 15.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[2].predicate) (op2, SImode))
++ {
++ error
++ ("Parameter 3 to __builtin_cop is not a valid coprocessor register number.");
++ error ("Number should be between 0 and 15.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[3].predicate) (op3, SImode))
++ {
++ error
++ ("Parameter 4 to __builtin_cop is not a valid coprocessor register number.");
++ error ("Number should be between 0 and 15.");
++ return NULL_RTX;
++ }
++
++ if (!(*insn_data[icode].operand[4].predicate) (op4, SImode))
++ {
++ error
++ ("Parameter 5 to __builtin_cop is not a valid coprocessor operation.");
++ error ("Number should be between 0 and 127.");
++ return NULL_RTX;
++ }
++
++ pat = GEN_FCN (icode) (op0, op1, op2, op3, op4);
++ if (!pat)
++ return 0;
++ emit_insn (pat);
++
++ return target;
++ }
++ }
++
++ for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
++ if (d->code == fcode)
++ return avr32_expand_binop_builtin (d->icode, arglist, target);
++
++
++ /* @@@ Should really do something sensible here. */
++ return NULL_RTX;
++}
++
++
++/* Handle an "interrupt" or "isr" attribute;
++ arguments as in struct attribute_spec.handler. */
++
++static tree
++avr32_handle_isr_attribute (tree * node, tree name, tree args,
++ int flags, bool * no_add_attrs)
++{
++ if (DECL_P (*node))
++ {
++ if (TREE_CODE (*node) != FUNCTION_DECL)
++ {
++ warning ("`%s' attribute only applies to functions",
++ IDENTIFIER_POINTER (name));
++ *no_add_attrs = true;
++ }
++ /* FIXME: the argument if any is checked for type attributes; should it
++ be checked for decl ones? */
++ }
++ else
++ {
++ if (TREE_CODE (*node) == FUNCTION_TYPE
++ || TREE_CODE (*node) == METHOD_TYPE)
++ {
++ if (avr32_isr_value (args) == AVR32_FT_UNKNOWN)
++ {
++ warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
++ *no_add_attrs = true;
++ }
++ }
++ else if (TREE_CODE (*node) == POINTER_TYPE
++ && (TREE_CODE (TREE_TYPE (*node)) == FUNCTION_TYPE
++ || TREE_CODE (TREE_TYPE (*node)) == METHOD_TYPE)
++ && avr32_isr_value (args) != AVR32_FT_UNKNOWN)
++ {
++ *node = build_variant_type_copy (*node);
++ TREE_TYPE (*node) = build_type_attribute_variant
++ (TREE_TYPE (*node),
++ tree_cons (name, args, TYPE_ATTRIBUTES (TREE_TYPE (*node))));
++ *no_add_attrs = true;
++ }
++ else
++ {
++ /* Possibly pass this attribute on from the type to a decl. */
++ if (flags & ((int) ATTR_FLAG_DECL_NEXT
++ | (int) ATTR_FLAG_FUNCTION_NEXT
++ | (int) ATTR_FLAG_ARRAY_NEXT))
++ {
++ *no_add_attrs = true;
++ return tree_cons (name, args, NULL_TREE);
++ }
++ else
++ {
++ warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
++ }
++ }
++ }
++
++ return NULL_TREE;
++}
++
++/* Handle an attribute requiring a FUNCTION_DECL;
++ arguments as in struct attribute_spec.handler. */
++static tree
++avr32_handle_fndecl_attribute (tree * node, tree name,
++ tree args ATTRIBUTE_UNUSED,
++ int flags ATTRIBUTE_UNUSED,
++ bool * no_add_attrs)
++{
++ if (TREE_CODE (*node) != FUNCTION_DECL)
++ {
++ warning ("%qs attribute only applies to functions",
++ IDENTIFIER_POINTER (name));
++ *no_add_attrs = true;
++ }
++
++ return NULL_TREE;
++}
++
++
++/* Handle an acall attribute;
++ arguments as in struct attribute_spec.handler. */
++
++static tree
++avr32_handle_acall_attribute (tree * node, tree name,
++ tree args ATTRIBUTE_UNUSED,
++ int flags ATTRIBUTE_UNUSED, bool * no_add_attrs)
++{
++ if (TREE_CODE (*node) == FUNCTION_TYPE || TREE_CODE (*node) == METHOD_TYPE)
++ {
++ warning ("`%s' attribute not yet supported...",
++ IDENTIFIER_POINTER (name));
++ *no_add_attrs = true;
++ return NULL_TREE;
++ }
++
++ warning ("`%s' attribute only applies to functions",
++ IDENTIFIER_POINTER (name));
++ *no_add_attrs = true;
++ return NULL_TREE;
++}
++
++
++/* Return 0 if the attributes for two types are incompatible, 1 if they
++ are compatible, and 2 if they are nearly compatible (which causes a
++ warning to be generated). */
++
++static int
++avr32_comp_type_attributes (tree type1, tree type2)
++{
++ int acall1, acall2, isr1, isr2, naked1, naked2;
++
++ /* Check for mismatch of non-default calling convention. */
++ if (TREE_CODE (type1) != FUNCTION_TYPE)
++ return 1;
++
++ /* Check for mismatched call attributes. */
++ acall1 = lookup_attribute ("acall", TYPE_ATTRIBUTES (type1)) != NULL;
++ acall2 = lookup_attribute ("acall", TYPE_ATTRIBUTES (type2)) != NULL;
++ naked1 = lookup_attribute ("naked", TYPE_ATTRIBUTES (type1)) != NULL;
++ naked2 = lookup_attribute ("naked", TYPE_ATTRIBUTES (type2)) != NULL;
++ isr1 = lookup_attribute ("isr", TYPE_ATTRIBUTES (type1)) != NULL;
++ if (!isr1)
++ isr1 = lookup_attribute ("interrupt", TYPE_ATTRIBUTES (type1)) != NULL;
++
++ isr2 = lookup_attribute ("isr", TYPE_ATTRIBUTES (type2)) != NULL;
++ if (!isr2)
++ isr2 = lookup_attribute ("interrupt", TYPE_ATTRIBUTES (type2)) != NULL;
++
++ if ((acall1 && isr2)
++ || (acall2 && isr1) || (naked1 && isr2) || (naked2 && isr1))
++ return 0;
++
++ return 1;
++}
++
++
++/* Computes the type of the current function. */
++
++static unsigned long
++avr32_compute_func_type (void)
++{
++ unsigned long type = AVR32_FT_UNKNOWN;
++ tree a;
++ tree attr;
++
++ if (TREE_CODE (current_function_decl) != FUNCTION_DECL)
++ abort ();
++
++ /* Decide if the current function is volatile. Such functions never
++ return, and many memory cycles can be saved by not storing register
++ values that will never be needed again. This optimization was added to
++ speed up context switching in a kernel application. */
++ if (optimize > 0
++ && TREE_NOTHROW (current_function_decl)
++ && TREE_THIS_VOLATILE (current_function_decl))
++ type |= AVR32_FT_VOLATILE;
++
++ if (cfun->static_chain_decl != NULL)
++ type |= AVR32_FT_NESTED;
++
++ attr = DECL_ATTRIBUTES (current_function_decl);
++
++ a = lookup_attribute ("isr", attr);
++ if (a == NULL_TREE)
++ a = lookup_attribute ("interrupt", attr);
++
++ if (a == NULL_TREE)
++ type |= AVR32_FT_NORMAL;
++ else
++ type |= avr32_isr_value (TREE_VALUE (a));
++
++
++ a = lookup_attribute ("acall", attr);
++ if (a != NULL_TREE)
++ type |= AVR32_FT_ACALL;
++
++ a = lookup_attribute ("naked", attr);
++ if (a != NULL_TREE)
++ type |= AVR32_FT_NAKED;
++
++ return type;
++}
++
++/* Returns the type of the current function. */
++
++static unsigned long
++avr32_current_func_type (void)
++{
++ if (AVR32_FUNC_TYPE (cfun->machine->func_type) == AVR32_FT_UNKNOWN)
++ cfun->machine->func_type = avr32_compute_func_type ();
++
++ return cfun->machine->func_type;
++}
++
++/*
++ This target hook should return true if we should not pass type solely
++ in registers. The file expr.h defines a definition that is usually appropriate,
++ refer to expr.h for additional documentation.
++*/
++bool
++avr32_must_pass_in_stack (enum machine_mode mode ATTRIBUTE_UNUSED, tree type)
++{
++ if (type && AGGREGATE_TYPE_P (type)
++ /* If the alignment is less than the size then pass in the struct on
++ the stack. */
++ && ((unsigned int) TYPE_ALIGN_UNIT (type) <
++ (unsigned int) int_size_in_bytes (type))
++ /* If we support unaligned word accesses then structs of size 4 and 8
++ can have any alignment and still be passed in registers. */
++ && !(TARGET_UNALIGNED_WORD
++ && (int_size_in_bytes (type) == 4
++ || int_size_in_bytes (type) == 8))
++ /* Double word structs need only a word alignment. */
++ && !(int_size_in_bytes (type) == 8 && TYPE_ALIGN_UNIT (type) >= 4))
++ return true;
++
++ if (type && AGGREGATE_TYPE_P (type)
++ /* Structs of size 3,5,6,7 are always passed in registers. */
++ && (int_size_in_bytes (type) == 3
++ || int_size_in_bytes (type) == 5
++ || int_size_in_bytes (type) == 6 || int_size_in_bytes (type) == 7))
++ return true;
++
++
++ return (type && TREE_ADDRESSABLE (type));
++}
++
++
++bool
++avr32_strict_argument_naming (CUMULATIVE_ARGS * ca ATTRIBUTE_UNUSED)
++{
++ return true;
++}
++
++/*
++ This target hook should return true if an argument at the position indicated
++ by cum should be passed by reference. This predicate is queried after target
++ independent reasons for being passed by reference, such as TREE_ADDRESSABLE (type).
++
++ If the hook returns true, a copy of that argument is made in memory and a
++ pointer to the argument is passed instead of the argument itself. The pointer
++ is passed in whatever way is appropriate for passing a pointer to that type.
++*/
++bool
++avr32_pass_by_reference (CUMULATIVE_ARGS * cum ATTRIBUTE_UNUSED,
++ enum machine_mode mode ATTRIBUTE_UNUSED,
++ tree type, bool named ATTRIBUTE_UNUSED)
++{
++ return (type && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST));
++}
++
++static int
++avr32_arg_partial_bytes (CUMULATIVE_ARGS * pcum ATTRIBUTE_UNUSED,
++ enum machine_mode mode ATTRIBUTE_UNUSED,
++ tree type ATTRIBUTE_UNUSED,
++ bool named ATTRIBUTE_UNUSED)
++{
++ return 0;
++}
++
++
++struct gcc_target targetm = TARGET_INITIALIZER;
++
++/*
++ Table used to convert from register number in the assembler instructions and
++ the register numbers used in gcc.
++*/
++const int avr32_function_arg_reglist[] =
++{
++ INTERNAL_REGNUM (12),
++ INTERNAL_REGNUM (11),
++ INTERNAL_REGNUM (10),
++ INTERNAL_REGNUM (9),
++ INTERNAL_REGNUM (8)
++};
++
++rtx avr32_compare_op0 = NULL_RTX;
++rtx avr32_compare_op1 = NULL_RTX;
++rtx avr32_compare_operator = NULL_RTX;
++rtx avr32_acc_cache = NULL_RTX;
++
++/*
++ Returns nonzero if it is allowed to store a value of mode mode in hard
++ register number regno.
++*/
++int
++avr32_hard_regno_mode_ok (int regnr, enum machine_mode mode)
++{
++ /* We allow only float modes in the fp-registers */
++ if (regnr >= FIRST_FP_REGNUM
++ && regnr <= LAST_FP_REGNUM && GET_MODE_CLASS (mode) != MODE_FLOAT)
++ {
++ return 0;
++ }
++
++ switch (mode)
++ {
++ case DImode: /* long long */
++ case DFmode: /* double */
++ case SCmode: /* __complex__ float */
++ case CSImode: /* __complex__ int */
++ if (regnr < 4)
++ { /* long long int not supported in r12, sp, lr
++ or pc. */
++ return 0;
++ }
++ else
++ {
++ if (regnr % 2) /* long long int has to be refered in even
++ registers. */
++ return 0;
++ else
++ return 1;
++ }
++ case CDImode: /* __complex__ long long */
++ case DCmode: /* __complex__ double */
++ case TImode: /* 16 bytes */
++ if (regnr < 7)
++ return 0;
++ else if (regnr % 2)
++ return 0;
++ else
++ return 1;
++ default:
++ return 1;
++ }
++}
++
++
++int
++avr32_rnd_operands (rtx add, rtx shift)
++{
++ if (GET_CODE (shift) == CONST_INT &&
++ GET_CODE (add) == CONST_INT && INTVAL (shift) > 0)
++ {
++ if ((1 << (INTVAL (shift) - 1)) == INTVAL (add))
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++
++
++int
++avr32_const_ok_for_constraint_p (HOST_WIDE_INT value, char c, const char *str)
++{
++ switch (c)
++ {
++ case 'K':
++ case 'I':
++ {
++ HOST_WIDE_INT min_value = 0, max_value = 0;
++ char size_str[3];
++ int const_size;
++
++ size_str[0] = str[2];
++ size_str[1] = str[3];
++ size_str[2] = '\0';
++ const_size = atoi (size_str);
++
++ if (toupper (str[1]) == 'U')
++ {
++ min_value = 0;
++ max_value = (1 << const_size) - 1;
++ }
++ else if (toupper (str[1]) == 'S')
++ {
++ min_value = -(1 << (const_size - 1));
++ max_value = (1 << (const_size - 1)) - 1;
++ }
++
++ if (c == 'I')
++ {
++ value = -value;
++ }
++
++ if (value >= min_value && value <= max_value)
++ {
++ return 1;
++ }
++ break;
++ }
++ case 'M':
++ return avr32_mask_upper_bits_operand (GEN_INT (value), VOIDmode);
++ }
++
++ return 0;
++}
++
++
++/*Compute mask of which floating-point registers needs saving upon
++ entry to this function*/
++static unsigned long
++avr32_compute_save_fp_reg_mask (void)
++{
++ unsigned long func_type = avr32_current_func_type ();
++ unsigned int save_reg_mask = 0;
++ unsigned int reg;
++ unsigned int max_reg = 7;
++ int save_all_call_used_regs = FALSE;
++
++ /* This only applies for hardware floating-point implementation. */
++ if (!TARGET_HARD_FLOAT)
++ return 0;
++
++ if (IS_INTERRUPT (func_type))
++ {
++
++ /* Interrupt functions must not corrupt any registers, even call
++ clobbered ones. If this is a leaf function we can just examine the
++ registers used by the RTL, but otherwise we have to assume that
++ whatever function is called might clobber anything, and so we have
++ to save all the call-clobbered registers as well. */
++ max_reg = 13;
++ save_all_call_used_regs = !current_function_is_leaf;
++ }
++
++ /* All used registers used must be saved */
++ for (reg = 0; reg <= max_reg; reg++)
++ if (regs_ever_live[INTERNAL_FP_REGNUM (reg)]
++ || (save_all_call_used_regs
++ && call_used_regs[INTERNAL_FP_REGNUM (reg)]))
++ save_reg_mask |= (1 << reg);
++
++ return save_reg_mask;
++}
++
++/*Compute mask of registers which needs saving upon function entry */
++static unsigned long
++avr32_compute_save_reg_mask (int push)
++{
++ unsigned long func_type;
++ unsigned int save_reg_mask = 0;
++ unsigned int reg;
++
++ func_type = avr32_current_func_type ();
++
++ if (IS_INTERRUPT (func_type))
++ {
++ unsigned int max_reg = 12;
++
++
++ /* Get the banking scheme for the interrupt */
++ switch (func_type)
++ {
++ case AVR32_FT_ISR_FULL:
++ max_reg = 0;
++ break;
++ case AVR32_FT_ISR_HALF:
++ max_reg = 7;
++ break;
++ case AVR32_FT_ISR_NONE:
++ max_reg = 12;
++ break;
++ }
++
++ /* Interrupt functions must not corrupt any registers, even call
++ clobbered ones. If this is a leaf function we can just examine the
++ registers used by the RTL, but otherwise we have to assume that
++ whatever function is called might clobber anything, and so we have
++ to save all the call-clobbered registers as well. */
++
++ /* Need not push the registers r8-r12 for AVR32A architectures, as this
++ is automatially done in hardware. We also do not have any shadow
++ registers. */
++ if (avr32_arch->uarch_type == UARCH_TYPE_AVR32A)
++ {
++ max_reg = 7;
++ func_type = AVR32_FT_ISR_NONE;
++ }
++
++ /* All registers which are used and is not shadowed must be saved */
++ for (reg = 0; reg <= max_reg; reg++)
++ if (regs_ever_live[INTERNAL_REGNUM (reg)]
++ || (!current_function_is_leaf
++ && call_used_regs[INTERNAL_REGNUM (reg)]))
++ save_reg_mask |= (1 << reg);
++
++ /* Check LR */
++ if ((regs_ever_live[LR_REGNUM] || !current_function_is_leaf || frame_pointer_needed) && (func_type == AVR32_FT_ISR_NONE) /* Only
++ non-shadowed
++ register
++ models
++ */ )
++ save_reg_mask |= (1 << ASM_REGNUM (LR_REGNUM));
++
++ /* Make sure that the GOT register is pushed. */
++ if (max_reg >= ASM_REGNUM (PIC_OFFSET_TABLE_REGNUM)
++ && current_function_uses_pic_offset_table)
++ save_reg_mask |= (1 << ASM_REGNUM (PIC_OFFSET_TABLE_REGNUM));
++
++ }
++ else
++ {
++ int use_pushm = optimize_size;
++
++ /* In the normal case we only need to save those registers which are
++ call saved and which are used by this function. */
++ for (reg = 0; reg <= 7; reg++)
++ if (regs_ever_live[INTERNAL_REGNUM (reg)]
++ && !call_used_regs[INTERNAL_REGNUM (reg)])
++ save_reg_mask |= (1 << reg);
++
++ /* Make sure that the GOT register is pushed. */
++ if (current_function_uses_pic_offset_table)
++ save_reg_mask |= (1 << ASM_REGNUM (PIC_OFFSET_TABLE_REGNUM));
++
++
++ /* If we optimize for size and do not have anonymous arguments: use
++ popm/pushm always */
++ if (use_pushm)
++ {
++ if ((save_reg_mask & (1 << 0))
++ || (save_reg_mask & (1 << 1))
++ || (save_reg_mask & (1 << 2)) || (save_reg_mask & (1 << 3)))
++ save_reg_mask |= 0xf;
++
++ if ((save_reg_mask & (1 << 4))
++ || (save_reg_mask & (1 << 5))
++ || (save_reg_mask & (1 << 6)) || (save_reg_mask & (1 << 7)))
++ save_reg_mask |= 0xf0;
++
++ if ((save_reg_mask & (1 << 8)) || (save_reg_mask & (1 << 9)))
++ save_reg_mask |= 0x300;
++ }
++
++
++ /* Check LR */
++ if ((regs_ever_live[LR_REGNUM] || !current_function_is_leaf ||
++ (optimize_size && save_reg_mask) || frame_pointer_needed))
++ {
++ if (push)
++ {
++ /* Push/Pop LR */
++ save_reg_mask |= (1 << ASM_REGNUM (LR_REGNUM));
++ }
++ else
++ {
++ /* Pop PC */
++ save_reg_mask |= (1 << ASM_REGNUM (PC_REGNUM));
++ }
++ }
++ }
++
++ return save_reg_mask;
++}
++
++/*Compute total size in bytes of all saved registers */
++static int
++avr32_get_reg_mask_size (int reg_mask)
++{
++ int reg, size;
++ size = 0;
++
++ for (reg = 0; reg <= 15; reg++)
++ if (reg_mask & (1 << reg))
++ size += 4;
++
++ return size;
++}
++
++/*Get a register from one of the registers which are saved onto the stack
++ upon function entry */
++
++static int
++avr32_get_saved_reg (int save_reg_mask)
++{
++ unsigned int reg;
++
++ /* Find the first register which is saved in the saved_reg_mask */
++ for (reg = 0; reg <= 15; reg++)
++ if (save_reg_mask & (1 << reg))
++ return reg;
++
++ return -1;
++}
++
++/* Return 1 if it is possible to return using a single instruction. */
++int
++avr32_use_return_insn (int iscond)
++{
++ unsigned int func_type = avr32_current_func_type ();
++ unsigned long saved_int_regs;
++ unsigned long saved_fp_regs;
++
++ /* Never use a return instruction before reload has run. */
++ if (!reload_completed)
++ return 0;
++
++ /* Must adjust the stack for vararg functions. */
++ if (current_function_args_info.uses_anonymous_args)
++ return 0;
++
++ /* If there a stack adjstment. */
++ if (get_frame_size ())
++ return 0;
++
++ saved_int_regs = avr32_compute_save_reg_mask (TRUE);
++ saved_fp_regs = avr32_compute_save_fp_reg_mask ();
++
++ /* Functions which have saved fp-regs on the stack can not be performed in
++ one instruction */
++ if (saved_fp_regs)
++ return 0;
++
++ /* Conditional returns can not be performed in one instruction if we need
++ to restore registers from the stack */
++ if (iscond && saved_int_regs)
++ return 0;
++
++ /* Conditional return can not be used for interrupt handlers. */
++ if (iscond && IS_INTERRUPT (func_type))
++ return 0;
++
++ /* For interrupt handlers which needs to pop registers */
++ if (saved_int_regs && IS_INTERRUPT (func_type))
++ return 0;
++
++
++ /* If there are saved registers but the LR isn't saved, then we need two
++ instructions for the return. */
++ if (saved_int_regs && !(saved_int_regs & (1 << ASM_REGNUM (LR_REGNUM))))
++ return 0;
++
++
++ return 1;
++}
++
++
++/*Generate some function prologue info in the assembly file*/
++
++void
++avr32_target_asm_function_prologue (FILE * f, HOST_WIDE_INT frame_size)
++{
++ if (IS_NAKED (avr32_current_func_type ()))
++ fprintf (f,
++ "\t# Function is naked: Prologue and epilogue provided by programmer\n");
++
++ if (IS_INTERRUPT (avr32_current_func_type ()))
++ {
++ switch (avr32_current_func_type ())
++ {
++ case AVR32_FT_ISR_FULL:
++ fprintf (f,
++ "\t# Interrupt Function: Fully shadowed register file\n");
++ break;
++ case AVR32_FT_ISR_HALF:
++ fprintf (f,
++ "\t# Interrupt Function: Half shadowed register file\n");
++ break;
++ default:
++ case AVR32_FT_ISR_NONE:
++ fprintf (f, "\t# Interrupt Function: No shadowed register file\n");
++ break;
++ }
++ }
++
++
++ fprintf (f, "\t# args = %i, frame = %li, pretend = %i\n",
++ current_function_args_size, frame_size,
++ current_function_pretend_args_size);
++
++ fprintf (f, "\t# frame_needed = %i, leaf_function = %i\n",
++ frame_pointer_needed, current_function_is_leaf);
++
++ fprintf (f, "\t# uses_anonymous_args = %i\n",
++ current_function_args_info.uses_anonymous_args);
++}
++
++
++/* Generate and emit an insn that we will recognize as a pushm or stm.
++ Unfortunately, since this insn does not reflect very well the actual
++ semantics of the operation, we need to annotate the insn for the benefit
++ of DWARF2 frame unwind information. */
++
++int avr32_convert_to_reglist16 (int reglist8_vect);
++
++static rtx
++emit_multi_reg_push (int reglist, int usePUSHM)
++{
++ rtx insn;
++ rtx dwarf;
++ rtx tmp;
++ rtx reg;
++ int i;
++ int nr_regs;
++ int index = 0;
++
++ if (usePUSHM)
++ {
++ insn = emit_insn (gen_pushm (gen_rtx_CONST_INT (SImode, reglist)));
++ reglist = avr32_convert_to_reglist16 (reglist);
++ }
++ else
++ {
++ insn = emit_insn (gen_stm (stack_pointer_rtx,
++ gen_rtx_CONST_INT (SImode, reglist),
++ gen_rtx_CONST_INT (SImode, 1)));
++ }
++
++ nr_regs = avr32_get_reg_mask_size (reglist) / 4;
++ dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (nr_regs + 1));
++
++ for (i = 15; i >= 0; i--)
++ {
++ if (reglist & (1 << i))
++ {
++ reg = gen_rtx_REG (SImode, INTERNAL_REGNUM (i));
++ tmp = gen_rtx_SET (VOIDmode,
++ gen_rtx_MEM (SImode,
++ plus_constant (stack_pointer_rtx,
++ 4 * index)), reg);
++ RTX_FRAME_RELATED_P (tmp) = 1;
++ XVECEXP (dwarf, 0, 1 + index++) = tmp;
++ }
++ }
++
++ tmp = gen_rtx_SET (SImode,
++ stack_pointer_rtx,
++ gen_rtx_PLUS (SImode,
++ stack_pointer_rtx,
++ GEN_INT (-4 * nr_regs)));
++ RTX_FRAME_RELATED_P (tmp) = 1;
++ XVECEXP (dwarf, 0, 0) = tmp;
++ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf,
++ REG_NOTES (insn));
++ return insn;
++}
++
++
++static rtx
++emit_multi_fp_reg_push (int reglist)
++{
++ rtx insn;
++ rtx dwarf;
++ rtx tmp;
++ rtx reg;
++ int i;
++ int nr_regs;
++ int index = 0;
++
++ insn = emit_insn (gen_stm_fp (stack_pointer_rtx,
++ gen_rtx_CONST_INT (SImode, reglist),
++ gen_rtx_CONST_INT (SImode, 1)));
++
++ nr_regs = avr32_get_reg_mask_size (reglist) / 4;
++ dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (nr_regs + 1));
++
++ for (i = 15; i >= 0; i--)
++ {
++ if (reglist & (1 << i))
++ {
++ reg = gen_rtx_REG (SImode, INTERNAL_FP_REGNUM (i));
++ tmp = gen_rtx_SET (VOIDmode,
++ gen_rtx_MEM (SImode,
++ plus_constant (stack_pointer_rtx,
++ 4 * index)), reg);
++ RTX_FRAME_RELATED_P (tmp) = 1;
++ XVECEXP (dwarf, 0, 1 + index++) = tmp;
++ }
++ }
++
++ tmp = gen_rtx_SET (SImode,
++ stack_pointer_rtx,
++ gen_rtx_PLUS (SImode,
++ stack_pointer_rtx,
++ GEN_INT (-4 * nr_regs)));
++ RTX_FRAME_RELATED_P (tmp) = 1;
++ XVECEXP (dwarf, 0, 0) = tmp;
++ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf,
++ REG_NOTES (insn));
++ return insn;
++}
++
++rtx
++avr32_gen_load_multiple (rtx * regs, int count, rtx from,
++ int write_back, int in_struct_p, int scalar_p)
++{
++
++ rtx result;
++ int i = 0, j;
++
++ result =
++ gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count + (write_back ? 1 : 0)));
++
++ if (write_back)
++ {
++ XVECEXP (result, 0, 0)
++ = gen_rtx_SET (GET_MODE (from), from,
++ plus_constant (from, count * 4));
++ i = 1;
++ count++;
++ }
++
++
++ for (j = 0; i < count; i++, j++)
++ {
++ rtx unspec;
++ rtx mem = gen_rtx_MEM (SImode, plus_constant (from, j * 4));
++ MEM_IN_STRUCT_P (mem) = in_struct_p;
++ MEM_SCALAR_P (mem) = scalar_p;
++ unspec = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, mem), UNSPEC_LDM);
++ XVECEXP (result, 0, i) = gen_rtx_SET (VOIDmode, regs[j], unspec);
++ }
++
++ return result;
++}
++
++
++rtx
++avr32_gen_store_multiple (rtx * regs, int count, rtx to,
++ int in_struct_p, int scalar_p)
++{
++ rtx result;
++ int i = 0, j;
++
++ result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count));
++
++ for (j = 0; i < count; i++, j++)
++ {
++ rtx mem = gen_rtx_MEM (SImode, plus_constant (to, j * 4));
++ MEM_IN_STRUCT_P (mem) = in_struct_p;
++ MEM_SCALAR_P (mem) = scalar_p;
++ XVECEXP (result, 0, i)
++ = gen_rtx_SET (VOIDmode, mem,
++ gen_rtx_UNSPEC (VOIDmode,
++ gen_rtvec (1, regs[j]),
++ UNSPEC_STORE_MULTIPLE));
++ }
++
++ return result;
++}
++
++
++/* Move a block of memory if it is word aligned or we support unaligned
++ word memory accesses. The size must be maximum 64 bytes. */
++
++int
++avr32_gen_movmemsi (rtx * operands)
++{
++ HOST_WIDE_INT bytes_to_go;
++ rtx src, dst;
++ rtx st_src, st_dst;
++ int ptr_offset = 0;
++ int block_size;
++ int dst_in_struct_p, src_in_struct_p;
++ int dst_scalar_p, src_scalar_p;
++ int unaligned;
++
++ if (GET_CODE (operands[2]) != CONST_INT
++ || GET_CODE (operands[3]) != CONST_INT
++ || INTVAL (operands[2]) > 64
++ || ((INTVAL (operands[3]) & 3) && !TARGET_UNALIGNED_WORD))
++ return 0;
++
++ unaligned = (INTVAL (operands[3]) & 3) != 0;
++
++ block_size = 4;
++
++ st_dst = XEXP (operands[0], 0);
++ st_src = XEXP (operands[1], 0);
++
++ dst_in_struct_p = MEM_IN_STRUCT_P (operands[0]);
++ dst_scalar_p = MEM_SCALAR_P (operands[0]);
++ src_in_struct_p = MEM_IN_STRUCT_P (operands[1]);
++ src_scalar_p = MEM_SCALAR_P (operands[1]);
++
++ dst = copy_to_mode_reg (SImode, st_dst);
++ src = copy_to_mode_reg (SImode, st_src);
++
++ bytes_to_go = INTVAL (operands[2]);
++
++ while (bytes_to_go)
++ {
++ enum machine_mode move_mode;
++ /* Seems to be a problem with reloads for the movti pattern so this is
++ disabled until that problem is resolved */
++
++ /* if ( bytes_to_go >= GET_MODE_SIZE(TImode) ) move_mode = TImode; else
++ */
++ if ((bytes_to_go >= GET_MODE_SIZE (DImode)) && !unaligned)
++ move_mode = DImode;
++ else if (bytes_to_go >= GET_MODE_SIZE (SImode))
++ move_mode = SImode;
++ else
++ move_mode = QImode;
++
++ {
++ rtx dst_mem = gen_rtx_MEM (move_mode,
++ gen_rtx_PLUS (SImode, dst,
++ GEN_INT (ptr_offset)));
++ rtx src_mem = gen_rtx_MEM (move_mode,
++ gen_rtx_PLUS (SImode, src,
++ GEN_INT (ptr_offset)));
++ ptr_offset += GET_MODE_SIZE (move_mode);
++ bytes_to_go -= GET_MODE_SIZE (move_mode);
++
++ MEM_IN_STRUCT_P (dst_mem) = dst_in_struct_p;
++ MEM_SCALAR_P (dst_mem) = dst_scalar_p;
++
++ MEM_IN_STRUCT_P (src_mem) = src_in_struct_p;
++ MEM_SCALAR_P (src_mem) = src_scalar_p;
++ emit_move_insn (dst_mem, src_mem);
++
++ }
++ }
++
++ return 1;
++}
++
++
++
++/*Expand the prologue instruction*/
++void
++avr32_expand_prologue (void)
++{
++ rtx insn, dwarf;
++ unsigned long saved_reg_mask, saved_fp_reg_mask;
++ int reglist8 = 0;
++
++ /* Naked functions does not have a prologue */
++ if (IS_NAKED (avr32_current_func_type ()))
++ return;
++
++ saved_reg_mask = avr32_compute_save_reg_mask (TRUE);
++
++ if (saved_reg_mask)
++ {
++ /* Must push used registers */
++
++ /* Should we use POPM or LDM? */
++ int usePUSHM = TRUE;
++ reglist8 = 0;
++ if (((saved_reg_mask & (1 << 0)) ||
++ (saved_reg_mask & (1 << 1)) ||
++ (saved_reg_mask & (1 << 2)) || (saved_reg_mask & (1 << 3))))
++ {
++ /* One of R0-R3 should at least be pushed */
++ if (((saved_reg_mask & (1 << 0)) &&
++ (saved_reg_mask & (1 << 1)) &&
++ (saved_reg_mask & (1 << 2)) && (saved_reg_mask & (1 << 3))))
++ {
++ /* All should be pushed */
++ reglist8 |= 0x01;
++ }
++ else
++ {
++ usePUSHM = FALSE;
++ }
++ }
++
++ if (((saved_reg_mask & (1 << 4)) ||
++ (saved_reg_mask & (1 << 5)) ||
++ (saved_reg_mask & (1 << 6)) || (saved_reg_mask & (1 << 7))))
++ {
++ /* One of R4-R7 should at least be pushed */
++ if (((saved_reg_mask & (1 << 4)) &&
++ (saved_reg_mask & (1 << 5)) &&
++ (saved_reg_mask & (1 << 6)) && (saved_reg_mask & (1 << 7))))
++ {
++ if (usePUSHM)
++ /* All should be pushed */
++ reglist8 |= 0x02;
++ }
++ else
++ {
++ usePUSHM = FALSE;
++ }
++ }
++
++ if (((saved_reg_mask & (1 << 8)) || (saved_reg_mask & (1 << 9))))
++ {
++ /* One of R8-R9 should at least be pushed */
++ if (((saved_reg_mask & (1 << 8)) && (saved_reg_mask & (1 << 9))))
++ {
++ if (usePUSHM)
++ /* All should be pushed */
++ reglist8 |= 0x04;
++ }
++ else
++ {
++ usePUSHM = FALSE;
++ }
++ }
++
++ if (saved_reg_mask & (1 << 10))
++ reglist8 |= 0x08;
++
++ if (saved_reg_mask & (1 << 11))
++ reglist8 |= 0x10;
++
++ if (saved_reg_mask & (1 << 12))
++ reglist8 |= 0x20;
++
++ if (saved_reg_mask & (1 << ASM_REGNUM (LR_REGNUM)))
++ {
++ /* Push LR */
++ reglist8 |= 0x40;
++ }
++
++ if (usePUSHM)
++ {
++ insn = emit_multi_reg_push (reglist8, TRUE);
++ }
++ else
++ {
++ insn = emit_multi_reg_push (saved_reg_mask, FALSE);
++ }
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ /* Prevent this instruction from being scheduled after any other
++ instructions. */
++ emit_insn (gen_blockage ());
++ }
++
++ saved_fp_reg_mask = avr32_compute_save_fp_reg_mask ();
++ if (saved_fp_reg_mask)
++ {
++ insn = emit_multi_fp_reg_push (saved_fp_reg_mask);
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ /* Prevent this instruction from being scheduled after any other
++ instructions. */
++ emit_insn (gen_blockage ());
++ }
++
++ /* Set frame pointer */
++ if (frame_pointer_needed)
++ {
++ insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++
++ if (get_frame_size () > 0)
++ {
++ if (avr32_const_ok_for_constraint_p (get_frame_size (), 'K', "Ks21"))
++ {
++ insn = emit_insn (gen_rtx_SET (SImode,
++ stack_pointer_rtx,
++ gen_rtx_PLUS (SImode,
++ stack_pointer_rtx,
++ gen_rtx_CONST_INT
++ (SImode,
++ -get_frame_size
++ ()))));
++ RTX_FRAME_RELATED_P (insn) = 1;
++ }
++ else
++ {
++ /* Immediate is larger than k21 We must either check if we can use
++ one of the pushed reegisters as temporary storage or we must
++ make us a temp register by pushing a register to the stack. */
++ rtx temp_reg, const_pool_entry, insn;
++ if (saved_reg_mask)
++ {
++ temp_reg =
++ gen_rtx_REG (SImode,
++ INTERNAL_REGNUM (avr32_get_saved_reg
++ (saved_reg_mask)));
++ }
++ else
++ {
++ temp_reg = gen_rtx_REG (SImode, INTERNAL_REGNUM (7));
++ emit_move_insn (gen_rtx_MEM
++ (SImode,
++ gen_rtx_PRE_DEC (SImode, stack_pointer_rtx)),
++ temp_reg);
++ }
++
++ const_pool_entry =
++ force_const_mem (SImode,
++ gen_rtx_CONST_INT (SImode, get_frame_size ()));
++ emit_move_insn (temp_reg, const_pool_entry);
++
++ insn = emit_insn (gen_rtx_SET (SImode,
++ stack_pointer_rtx,
++ gen_rtx_MINUS (SImode,
++ stack_pointer_rtx,
++ temp_reg)));
++
++ dwarf = gen_rtx_SET (VOIDmode, stack_pointer_rtx,
++ gen_rtx_PLUS (SImode, stack_pointer_rtx,
++ GEN_INT (-get_frame_size ())));
++ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
++ dwarf, REG_NOTES (insn));
++ RTX_FRAME_RELATED_P (insn) = 1;
++
++ if (!saved_reg_mask)
++ {
++ insn =
++ emit_move_insn (temp_reg,
++ gen_rtx_MEM (SImode,
++ gen_rtx_POST_INC (SImode,
++ gen_rtx_REG
++ (SImode,
++ 13))));
++ }
++
++ /* Mark the temp register as dead */
++ REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_DEAD, temp_reg,
++ REG_NOTES (insn));
++
++
++ }
++
++ /* Prevent the the stack adjustment to be scheduled after any
++ instructions using the frame pointer. */
++ emit_insn (gen_blockage ());
++ }
++
++ /* Load GOT */
++ if (flag_pic)
++ {
++ avr32_load_pic_register ();
++
++ /* gcc does not know that load or call instructions might use the pic
++ register so it might schedule these instructions before the loading
++ of the pic register. To avoid this emit a barrier for now. TODO!
++ Find out a better way to let gcc know which instructions might use
++ the pic register. */
++ emit_insn (gen_blockage ());
++ }
++ return;
++}
++
++void
++avr32_set_return_address (rtx source)
++{
++ rtx addr;
++ unsigned long saved_regs;
++
++ saved_regs = avr32_compute_save_reg_mask (TRUE);
++
++ if (!(saved_regs & (1 << ASM_REGNUM (LR_REGNUM))))
++ emit_move_insn (gen_rtx_REG (Pmode, LR_REGNUM), source);
++ else
++ {
++ if (frame_pointer_needed)
++ addr = gen_rtx_REG (Pmode, FRAME_POINTER_REGNUM);
++ else
++ /* FIXME: Need to use scratch register if frame is large */
++ addr = plus_constant (stack_pointer_rtx, get_frame_size ());
++
++ emit_move_insn (gen_rtx_MEM (Pmode, addr), source);
++ }
++}
++
++
++
++/* Return the length of INSN. LENGTH is the initial length computed by
++ attributes in the machine-description file. */
++
++int
++avr32_adjust_insn_length (rtx insn ATTRIBUTE_UNUSED,
++ int length ATTRIBUTE_UNUSED)
++{
++ return length;
++}
++
++void
++avr32_output_return_instruction (int single_ret_inst ATTRIBUTE_UNUSED,
++ int iscond ATTRIBUTE_UNUSED,
++ rtx cond ATTRIBUTE_UNUSED, rtx r12_imm)
++{
++
++ unsigned long saved_reg_mask, saved_fp_reg_mask;
++ int insert_ret = TRUE;
++ int reglist8 = 0;
++ int stack_adjustment = get_frame_size ();
++ unsigned int func_type = avr32_current_func_type ();
++ FILE *f = asm_out_file;
++
++ /* Naked functions does not have an epilogue */
++ if (IS_NAKED (func_type))
++ return;
++
++ saved_fp_reg_mask = avr32_compute_save_fp_reg_mask ();
++
++ saved_reg_mask = avr32_compute_save_reg_mask (FALSE);
++
++ /* Reset frame pointer */
++ if (stack_adjustment > 0)
++ {
++ if (avr32_const_ok_for_constraint_p (stack_adjustment, 'I', "Is21"))
++ {
++ fprintf (f, "\tsub sp, %i # Reset Frame Pointer\n",
++ -stack_adjustment);
++ }
++ else
++ {
++ /* TODO! Is it safe to use r8 as scratch?? */
++ fprintf (f, "\tmov r8, lo(%i) # Reset Frame Pointer\n",
++ -stack_adjustment);
++ fprintf (f, "\torh r8, hi(%i) # Reset Frame Pointer\n",
++ -stack_adjustment);
++ fprintf (f, "\tadd sp,r8 # Reset Frame Pointer\n");
++ }
++ }
++
++ if (saved_fp_reg_mask)
++ {
++ char reglist[64]; /* 64 bytes should be enough... */
++ avr32_make_fp_reglist_w (saved_fp_reg_mask, (char *) reglist);
++ fprintf (f, "\tldcm.w\tcp0, sp++, %s\n", reglist);
++ if (saved_fp_reg_mask & ~0xff)
++ {
++ saved_fp_reg_mask &= ~0xff;
++ avr32_make_fp_reglist_d (saved_fp_reg_mask, (char *) reglist);
++ fprintf (f, "\tldcm.d\tcp0, sp++, %s\n", reglist);
++ }
++ }
++
++ if (saved_reg_mask)
++ {
++ /* Must pop used registers */
++
++ /* Should we use POPM or LDM? */
++ int usePOPM = TRUE;
++ if (((saved_reg_mask & (1 << 0)) ||
++ (saved_reg_mask & (1 << 1)) ||
++ (saved_reg_mask & (1 << 2)) || (saved_reg_mask & (1 << 3))))
++ {
++ /* One of R0-R3 should at least be popped */
++ if (((saved_reg_mask & (1 << 0)) &&
++ (saved_reg_mask & (1 << 1)) &&
++ (saved_reg_mask & (1 << 2)) && (saved_reg_mask & (1 << 3))))
++ {
++ /* All should be popped */
++ reglist8 |= 0x01;
++ }
++ else
++ {
++ usePOPM = FALSE;
++ }
++ }
++
++ if (((saved_reg_mask & (1 << 4)) ||
++ (saved_reg_mask & (1 << 5)) ||
++ (saved_reg_mask & (1 << 6)) || (saved_reg_mask & (1 << 7))))
++ {
++ /* One of R0-R3 should at least be popped */
++ if (((saved_reg_mask & (1 << 4)) &&
++ (saved_reg_mask & (1 << 5)) &&
++ (saved_reg_mask & (1 << 6)) && (saved_reg_mask & (1 << 7))))
++ {
++ if (usePOPM)
++ /* All should be popped */
++ reglist8 |= 0x02;
++ }
++ else
++ {
++ usePOPM = FALSE;
++ }
++ }
++
++ if (((saved_reg_mask & (1 << 8)) || (saved_reg_mask & (1 << 9))))
++ {
++ /* One of R8-R9 should at least be pushed */
++ if (((saved_reg_mask & (1 << 8)) && (saved_reg_mask & (1 << 9))))
++ {
++ if (usePOPM)
++ /* All should be pushed */
++ reglist8 |= 0x04;
++ }
++ else
++ {
++ usePOPM = FALSE;
++ }
++ }
++
++ if (saved_reg_mask & (1 << 10))
++ reglist8 |= 0x08;
++
++ if (saved_reg_mask & (1 << 11))
++ reglist8 |= 0x10;
++
++ if (saved_reg_mask & (1 << 12))
++ reglist8 |= 0x20;
++
++ if (saved_reg_mask & (1 << ASM_REGNUM (LR_REGNUM)))
++ /* Pop LR */
++ reglist8 |= 0x40;
++
++ if (saved_reg_mask & (1 << ASM_REGNUM (PC_REGNUM)))
++ /* Pop LR into PC. */
++ reglist8 |= 0x80;
++
++ if (usePOPM)
++ {
++ char reglist[64]; /* 64 bytes should be enough... */
++ avr32_make_reglist8 (reglist8, (char *) reglist);
++
++ if (reglist8 & 0x80)
++ /* This instruction is also a return */
++ insert_ret = FALSE;
++
++ if (r12_imm && !insert_ret)
++ fprintf (f, "\tpopm %s, r12=%li\n", reglist, INTVAL (r12_imm));
++ else
++ fprintf (f, "\tpopm %s\n", reglist);
++
++ }
++ else
++ {
++ char reglist[64]; /* 64 bytes should be enough... */
++ avr32_make_reglist16 (saved_reg_mask, (char *) reglist);
++ if (saved_reg_mask & (1 << ASM_REGNUM (PC_REGNUM)))
++ /* This instruction is also a return */
++ insert_ret = FALSE;
++
++ if (r12_imm && !insert_ret)
++ fprintf (f, "\tldm sp++, %s, r12=%li\n", reglist,
++ INTVAL (r12_imm));
++ else
++ fprintf (f, "\tldm sp++, %s\n", reglist);
++
++ }
++
++ }
++
++ if (IS_INTERRUPT (func_type))
++ {
++ fprintf (f, "\trete\n");
++ }
++ else if (insert_ret)
++ {
++ if (r12_imm)
++ fprintf (f, "\tretal %li\n", INTVAL (r12_imm));
++ else
++ fprintf (f, "\tretal r12\n");
++ }
++}
++
++/* Function for converting a fp-register mask to a
++ reglistCPD8 register list string. */
++void
++avr32_make_fp_reglist_d (int reglist_mask, char *reglist_string)
++{
++ int i;
++
++ /* Make sure reglist_string is empty */
++ reglist_string[0] = '\0';
++
++ for (i = 0; i < NUM_FP_REGS; i += 2)
++ {
++ if (reglist_mask & (1 << i))
++ {
++ strlen (reglist_string) ?
++ sprintf (reglist_string, "%s, %s-%s", reglist_string,
++ reg_names[INTERNAL_FP_REGNUM (i)],
++ reg_names[INTERNAL_FP_REGNUM (i + 1)]) :
++ sprintf (reglist_string, "%s-%s",
++ reg_names[INTERNAL_FP_REGNUM (i)],
++ reg_names[INTERNAL_FP_REGNUM (i + 1)]);
++ }
++ }
++}
++
++/* Function for converting a fp-register mask to a
++ reglistCP8 register list string. */
++void
++avr32_make_fp_reglist_w (int reglist_mask, char *reglist_string)
++{
++ int i;
++
++ /* Make sure reglist_string is empty */
++ reglist_string[0] = '\0';
++
++ for (i = 0; i < NUM_FP_REGS; ++i)
++ {
++ if (reglist_mask & (1 << i))
++ {
++ strlen (reglist_string) ?
++ sprintf (reglist_string, "%s, %s", reglist_string,
++ reg_names[INTERNAL_FP_REGNUM (i)]) :
++ sprintf (reglist_string, "%s", reg_names[INTERNAL_FP_REGNUM (i)]);
++ }
++ }
++}
++
++void
++avr32_make_reglist16 (int reglist16_vect, char *reglist16_string)
++{
++ int i;
++
++ /* Make sure reglist16_string is empty */
++ reglist16_string[0] = '\0';
++
++ for (i = 0; i < 16; ++i)
++ {
++ if (reglist16_vect & (1 << i))
++ {
++ strlen (reglist16_string) ?
++ sprintf (reglist16_string, "%s, %s", reglist16_string,
++ reg_names[INTERNAL_REGNUM (i)]) :
++ sprintf (reglist16_string, "%s", reg_names[INTERNAL_REGNUM (i)]);
++ }
++ }
++}
++
++int
++avr32_convert_to_reglist16 (int reglist8_vect)
++{
++ int reglist16_vect = 0;
++ if (reglist8_vect & 0x1)
++ reglist16_vect |= 0xF;
++ if (reglist8_vect & 0x2)
++ reglist16_vect |= 0xF0;
++ if (reglist8_vect & 0x4)
++ reglist16_vect |= 0x300;
++ if (reglist8_vect & 0x8)
++ reglist16_vect |= 0x400;
++ if (reglist8_vect & 0x10)
++ reglist16_vect |= 0x800;
++ if (reglist8_vect & 0x20)
++ reglist16_vect |= 0x1000;
++ if (reglist8_vect & 0x40)
++ reglist16_vect |= 0x4000;
++ if (reglist8_vect & 0x80)
++ reglist16_vect |= 0x8000;
++
++ return reglist16_vect;
++}
++
++void
++avr32_make_reglist8 (int reglist8_vect, char *reglist8_string)
++{
++ /* Make sure reglist8_string is empty */
++ reglist8_string[0] = '\0';
++
++ if (reglist8_vect & 0x1)
++ sprintf (reglist8_string, "r0-r3");
++ if (reglist8_vect & 0x2)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, r4-r7",
++ reglist8_string) :
++ sprintf (reglist8_string, "r4-r7");
++ if (reglist8_vect & 0x4)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, r8-r9",
++ reglist8_string) :
++ sprintf (reglist8_string, "r8-r9");
++ if (reglist8_vect & 0x8)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, r10",
++ reglist8_string) :
++ sprintf (reglist8_string, "r10");
++ if (reglist8_vect & 0x10)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, r11",
++ reglist8_string) :
++ sprintf (reglist8_string, "r11");
++ if (reglist8_vect & 0x20)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, r12",
++ reglist8_string) :
++ sprintf (reglist8_string, "r12");
++ if (reglist8_vect & 0x40)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, lr",
++ reglist8_string) :
++ sprintf (reglist8_string, "lr");
++ if (reglist8_vect & 0x80)
++ strlen (reglist8_string) ? sprintf (reglist8_string, "%s, pc",
++ reglist8_string) :
++ sprintf (reglist8_string, "pc");
++}
++
++int
++avr32_eh_return_data_regno (int n)
++{
++ if (n >= 0 && n <= 3)
++ return 8 + n;
++ else
++ return INVALID_REGNUM;
++}
++
++/* Compute the distance from register FROM to register TO.
++ These can be the arg pointer, the frame pointer or
++ the stack pointer.
++ Typical stack layout looks like this:
++
++ old stack pointer -> | |
++ ----
++ | | \
++ | | saved arguments for
++ | | vararg functions
++ arg_pointer -> | | /
++ --
++ | | \
++ | | call saved
++ | | registers
++ | | /
++ frame ptr -> --
++ | | \
++ | | local
++ | | variables
++ stack ptr --> | | /
++ --
++ | | \
++ | | outgoing
++ | | arguments
++ | | /
++ --
++
++ For a given funciton some or all of these stack compomnents
++ may not be needed, giving rise to the possibility of
++ eliminating some of the registers.
++
++ The values returned by this function must reflect the behaviour
++ of avr32_expand_prologue() and avr32_compute_save_reg_mask().
++
++ The sign of the number returned reflects the direction of stack
++ growth, so the values are positive for all eliminations except
++ from the soft frame pointer to the hard frame pointer. */
++
++
++int
++avr32_initial_elimination_offset (int from, int to)
++{
++ int i;
++ int call_saved_regs = 0;
++ unsigned long saved_reg_mask, saved_fp_reg_mask;
++ unsigned int local_vars = get_frame_size ();
++
++ saved_reg_mask = avr32_compute_save_reg_mask (TRUE);
++ saved_fp_reg_mask = avr32_compute_save_fp_reg_mask ();
++
++ for (i = 0; i < 16; ++i)
++ {
++ if (saved_reg_mask & (1 << i))
++ call_saved_regs += 4;
++ }
++
++ for (i = 0; i < NUM_FP_REGS; ++i)
++ {
++ if (saved_fp_reg_mask & (1 << i))
++ call_saved_regs += 4;
++ }
++
++ switch (from)
++ {
++ case ARG_POINTER_REGNUM:
++ switch (to)
++ {
++ case STACK_POINTER_REGNUM:
++ return call_saved_regs + local_vars;
++ case FRAME_POINTER_REGNUM:
++ return call_saved_regs;
++ default:
++ abort ();
++ }
++ case FRAME_POINTER_REGNUM:
++ switch (to)
++ {
++ case STACK_POINTER_REGNUM:
++ return local_vars;
++ default:
++ abort ();
++ }
++ default:
++ abort ();
++ }
++}
++
++
++/*
++ Returns a rtx used when passing the next argument to a function.
++ avr32_init_cumulative_args() and avr32_function_arg_advance() sets witch
++ register to use.
++*/
++rtx
++avr32_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
++ tree type, int named)
++{
++ int index = -1;
++
++ HOST_WIDE_INT arg_size, arg_rsize;
++ if (type)
++ {
++ arg_size = int_size_in_bytes (type);
++ }
++ else
++ {
++ arg_size = GET_MODE_SIZE (mode);
++ }
++ arg_rsize = PUSH_ROUNDING (arg_size);
++
++ /*
++ The last time this macro is called, it is called with mode == VOIDmode,
++ and its result is passed to the call or call_value pattern as operands 2
++ and 3 respectively. */
++ if (mode == VOIDmode)
++ {
++ return gen_rtx_CONST_INT (SImode, 22); /* ToDo: fixme. */
++ }
++
++ if ((*targetm.calls.must_pass_in_stack) (mode, type) || !named)
++ {
++ return NULL_RTX;
++ }
++
++ if (arg_rsize == 8)
++ {
++ /* use r11:r10 or r9:r8. */
++ if (!(GET_USED_INDEX (cum, 1) || GET_USED_INDEX (cum, 2)))
++ index = 1;
++ else if (!(GET_USED_INDEX (cum, 3) || GET_USED_INDEX (cum, 4)))
++ index = 3;
++ else
++ index = -1;
++ }
++ else if (arg_rsize == 4)
++ { /* Use first available register */
++ index = 0;
++ while (index <= LAST_CUM_REG_INDEX && GET_USED_INDEX (cum, index))
++ index++;
++ if (index > LAST_CUM_REG_INDEX)
++ index = -1;
++ }
++
++ SET_REG_INDEX (cum, index);
++
++ if (GET_REG_INDEX (cum) >= 0)
++ return gen_rtx_REG (mode,
++ avr32_function_arg_reglist[GET_REG_INDEX (cum)]);
++
++ return NULL_RTX;
++}
++
++/*
++ Set the register used for passing the first argument to a function.
++*/
++void
++avr32_init_cumulative_args (CUMULATIVE_ARGS * cum, tree fntype,
++ rtx libname ATTRIBUTE_UNUSED,
++ tree fndecl ATTRIBUTE_UNUSED)
++{
++ /* Set all registers as unused. */
++ SET_INDEXES_UNUSED (cum);
++
++ /* Reset uses_anonymous_args */
++ cum->uses_anonymous_args = 0;
++
++ /* Reset size of stack pushed arguments */
++ cum->stack_pushed_args_size = 0;
++
++ /* If the function is returning a value passed in memory r12 is used as a
++ Return Value Pointer. */
++
++ if (fntype != 0 && avr32_return_in_memory (TREE_TYPE (fntype), fntype))
++ {
++ SET_REG_INDEX (cum, 0);
++ SET_USED_INDEX (cum, GET_REG_INDEX (cum));
++ }
++}
++
++/*
++ Set register used for passing the next argument to a function. Only the
++ Scratch Registers are used.
++
++ number name
++ 15 r15 PC
++ 14 r14 LR
++ 13 r13 _SP_________
++ FIRST_CUM_REG 12 r12 _||_
++ 10 r11 ||
++ 11 r10 _||_ Scratch Registers
++ 8 r9 ||
++ LAST_SCRATCH_REG 9 r8 _\/_________
++ 6 r7 /\
++ 7 r6 ||
++ 4 r5 ||
++ 5 r4 ||
++ 2 r3 ||
++ 3 r2 ||
++ 0 r1 ||
++ 1 r0 _||_________
++
++*/
++void
++avr32_function_arg_advance (CUMULATIVE_ARGS * cum, enum machine_mode mode,
++ tree type, int named ATTRIBUTE_UNUSED)
++{
++ HOST_WIDE_INT arg_size, arg_rsize;
++
++ if (type)
++ {
++ arg_size = int_size_in_bytes (type);
++ }
++ else
++ {
++ arg_size = GET_MODE_SIZE (mode);
++ }
++ arg_rsize = PUSH_ROUNDING (arg_size);
++
++ /* It the argument had to be passed in stack, no register is used. */
++ if ((*targetm.calls.must_pass_in_stack) (mode, type))
++ {
++ cum->stack_pushed_args_size += PUSH_ROUNDING (int_size_in_bytes (type));
++ return;
++ }
++
++ /* Mark the used registers as "used". */
++ if (GET_REG_INDEX (cum) >= 0)
++ {
++ SET_USED_INDEX (cum, GET_REG_INDEX (cum));
++ if (arg_rsize == 8)
++ {
++ SET_USED_INDEX (cum, (GET_REG_INDEX (cum) + 1));
++ }
++ }
++ else
++ {
++ /* Had to use stack */
++ cum->stack_pushed_args_size += arg_rsize;
++ }
++}
++
++/*
++ Defines witch direction to go to find the next register to use if the
++ argument is larger then one register or for arguments shorter than an
++ int which is not promoted, such as the last part of structures with
++ size not a multiple of 4. */
++enum direction
++avr32_function_arg_padding (enum machine_mode mode ATTRIBUTE_UNUSED,
++ tree type)
++{
++ /* Pad upward for all aggregates except byte and halfword sized aggregates
++ which can be passed in registers. */
++ if (type
++ && AGGREGATE_TYPE_P (type)
++ && (int_size_in_bytes (type) != 1)
++ && !((int_size_in_bytes (type) == 2)
++ && TYPE_ALIGN_UNIT (type) >= 2)
++ && (int_size_in_bytes (type) & 0x3))
++ {
++ return upward;
++ }
++
++ return downward;
++}
++
++/*
++ Return a rtx used for the return value from a function call.
++*/
++rtx
++avr32_function_value (tree type, tree func)
++{
++ if (avr32_return_in_memory (type, func))
++ return NULL_RTX;
++
++ if (int_size_in_bytes (type) <= 4)
++ if (avr32_return_in_msb (type))
++ /* Aggregates of size less than a word which does align the data in the
++ MSB must use SImode for r12. */
++ return gen_rtx_REG (SImode, RET_REGISTER);
++ else
++ return gen_rtx_REG (TYPE_MODE (type), RET_REGISTER);
++ else if (int_size_in_bytes (type) <= 8)
++ return gen_rtx_REG (TYPE_MODE (type), INTERNAL_REGNUM (11));
++
++ return NULL_RTX;
++}
++
++/*
++ Return a rtx used for the return value from a library function call.
++*/
++rtx
++avr32_libcall_value (enum machine_mode mode)
++{
++
++ if (GET_MODE_SIZE (mode) <= 4)
++ return gen_rtx_REG (mode, RET_REGISTER);
++ else if (GET_MODE_SIZE (mode) <= 8)
++ return gen_rtx_REG (mode, INTERNAL_REGNUM (11));
++ else
++ return NULL_RTX;
++}
++
++/* Return TRUE if X references a SYMBOL_REF. */
++int
++symbol_mentioned_p (rtx x)
++{
++ const char *fmt;
++ int i;
++
++ if (GET_CODE (x) == SYMBOL_REF)
++ return 1;
++
++ fmt = GET_RTX_FORMAT (GET_CODE (x));
++
++ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
++ {
++ if (fmt[i] == 'E')
++ {
++ int j;
++
++ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
++ if (symbol_mentioned_p (XVECEXP (x, i, j)))
++ return 1;
++ }
++ else if (fmt[i] == 'e' && symbol_mentioned_p (XEXP (x, i)))
++ return 1;
++ }
++
++ return 0;
++}
++
++/* Return TRUE if X references a LABEL_REF. */
++int
++label_mentioned_p (rtx x)
++{
++ const char *fmt;
++ int i;
++
++ if (GET_CODE (x) == LABEL_REF)
++ return 1;
++
++ fmt = GET_RTX_FORMAT (GET_CODE (x));
++ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
++ {
++ if (fmt[i] == 'E')
++ {
++ int j;
++
++ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
++ if (label_mentioned_p (XVECEXP (x, i, j)))
++ return 1;
++ }
++ else if (fmt[i] == 'e' && label_mentioned_p (XEXP (x, i)))
++ return 1;
++ }
++
++ return 0;
++}
++
++
++int
++avr32_legitimate_pic_operand_p (rtx x)
++{
++
++ /* We can't have const, this must be broken down to a symbol. */
++ if (GET_CODE (x) == CONST)
++ return FALSE;
++
++ /* Can't access symbols or labels via the constant pool either */
++ if ((GET_CODE (x) == SYMBOL_REF
++ && CONSTANT_POOL_ADDRESS_P (x)
++ && (symbol_mentioned_p (get_pool_constant (x))
++ || label_mentioned_p (get_pool_constant (x)))))
++ return FALSE;
++
++ return TRUE;
++}
++
++
++rtx
++legitimize_pic_address (rtx orig, enum machine_mode mode ATTRIBUTE_UNUSED,
++ rtx reg)
++{
++
++ if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
++ {
++ int subregs = 0;
++
++ if (reg == 0)
++ {
++ if (no_new_pseudos)
++ abort ();
++ else
++ reg = gen_reg_rtx (Pmode);
++
++ subregs = 1;
++ }
++
++ emit_move_insn (reg, orig);
++
++ /* Only set current function as using pic offset table if flag_pic is
++ set. This is because this function is also used if
++ TARGET_HAS_ASM_ADDR_PSEUDOS is set. */
++ if (flag_pic)
++ current_function_uses_pic_offset_table = 1;
++
++ /* Put a REG_EQUAL note on this insn, so that it can be optimized by
++ loop. */
++ return reg;
++ }
++ else if (GET_CODE (orig) == CONST)
++ {
++ rtx base, offset;
++
++ if (flag_pic
++ && GET_CODE (XEXP (orig, 0)) == PLUS
++ && XEXP (XEXP (orig, 0), 0) == pic_offset_table_rtx)
++ return orig;
++
++ if (reg == 0)
++ {
++ if (no_new_pseudos)
++ abort ();
++ else
++ reg = gen_reg_rtx (Pmode);
++ }
++
++ if (GET_CODE (XEXP (orig, 0)) == PLUS)
++ {
++ base =
++ legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode, reg);
++ offset =
++ legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
++ base == reg ? 0 : reg);
++ }
++ else
++ abort ();
++
++ if (GET_CODE (offset) == CONST_INT)
++ {
++ /* The base register doesn't really matter, we only want to test
++ the index for the appropriate mode. */
++ if (!avr32_const_ok_for_constraint_p (INTVAL (offset), 'I', "Is21"))
++ {
++ if (!no_new_pseudos)
++ offset = force_reg (Pmode, offset);
++ else
++ abort ();
++ }
++
++ if (GET_CODE (offset) == CONST_INT)
++ return plus_constant (base, INTVAL (offset));
++ }
++
++ return gen_rtx_PLUS (Pmode, base, offset);
++ }
++
++ return orig;
++}
++
++/* Generate code to load the PIC register. */
++void
++avr32_load_pic_register (void)
++{
++ rtx l1, pic_tmp;
++ rtx global_offset_table;
++
++ if ((current_function_uses_pic_offset_table == 0) || TARGET_NO_INIT_GOT)
++ return;
++
++ if (!flag_pic)
++ abort ();
++
++ l1 = gen_label_rtx ();
++
++ global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
++ pic_tmp =
++ gen_rtx_CONST (Pmode,
++ gen_rtx_MINUS (SImode, gen_rtx_LABEL_REF (Pmode, l1),
++ global_offset_table));
++ emit_insn (gen_pic_load_addr
++ (pic_offset_table_rtx, force_const_mem (SImode, pic_tmp)));
++ emit_insn (gen_pic_compute_got_from_pc (pic_offset_table_rtx, l1));
++
++ /* Need to emit this whether or not we obey regdecls, since setjmp/longjmp
++ can cause life info to screw up. */
++ emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
++}
++
++
++
++/* This hook should return true if values of type type are returned at the most
++ significant end of a register (in other words, if they are padded at the
++ least significant end). You can assume that type is returned in a register;
++ the caller is required to check this. Note that the register provided by
++ FUNCTION_VALUE must be able to hold the complete return value. For example,
++ if a 1-, 2- or 3-byte structure is returned at the most significant end of a
++ 4-byte register, FUNCTION_VALUE should provide an SImode rtx. */
++bool
++avr32_return_in_msb (tree type ATTRIBUTE_UNUSED)
++{
++ /* if ( AGGREGATE_TYPE_P (type) ) if ((int_size_in_bytes(type) == 1) ||
++ ((int_size_in_bytes(type) == 2) && TYPE_ALIGN_UNIT(type) >= 2)) return
++ false; else return true; */
++
++ return false;
++}
++
++
++/*
++ Returns one if a certain function value is going to be returned in memory
++ and zero if it is going to be returned in a register.
++
++ BLKmode and all other modes that is larger than 64 bits are returned in
++ memory.
++*/
++bool
++avr32_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED)
++{
++ if (TYPE_MODE (type) == VOIDmode)
++ return false;
++
++ if (int_size_in_bytes (type) > (2 * UNITS_PER_WORD)
++ || int_size_in_bytes (type) == -1)
++ {
++ return true;
++ }
++
++ /* If we have an aggregate then use the same mechanism as when checking if
++ it should be passed on the stack. */
++ if (type
++ && AGGREGATE_TYPE_P (type)
++ && (*targetm.calls.must_pass_in_stack) (TYPE_MODE (type), type))
++ return true;
++
++ return false;
++}
++
++
++/* Output the constant part of the trampoline.
++ lddpc r0, pc[0x8:e] ; load static chain register
++ lddpc pc, pc[0x8:e] ; jump to subrutine
++ .long 0 ; Address to static chain,
++ ; filled in by avr32_initialize_trampoline()
++ .long 0 ; Address to subrutine,
++ ; filled in by avr32_initialize_trampoline()
++*/
++void
++avr32_trampoline_template (FILE * file)
++{
++ fprintf (file, "\tlddpc r0, pc[8]\n");
++ fprintf (file, "\tlddpc pc, pc[8]\n");
++ /* make room for the address of the static chain. */
++ fprintf (file, "\t.long\t0\n");
++ /* make room for the address to the subrutine. */
++ fprintf (file, "\t.long\t0\n");
++}
++
++
++/*
++ Initialize the variable parts of a trampoline.
++*/
++void
++avr32_initialize_trampoline (rtx addr, rtx fnaddr, rtx static_chain)
++{
++ /* Store the address to the static chain. */
++ emit_move_insn (gen_rtx_MEM
++ (SImode, plus_constant (addr, TRAMPOLINE_SIZE - 4)),
++ static_chain);
++
++ /* Store the address to the function. */
++ emit_move_insn (gen_rtx_MEM (SImode, plus_constant (addr, TRAMPOLINE_SIZE)),
++ fnaddr);
++
++ emit_insn (gen_cache (gen_rtx_REG (SImode, 13),
++ gen_rtx_CONST_INT (SImode,
++ AVR32_CACHE_INVALIDATE_ICACHE)));
++}
++
++/* Return nonzero if X is valid as an addressing register. */
++int
++avr32_address_register_rtx_p (rtx x, int strict_p)
++{
++ int regno;
++
++ if (GET_CODE (x) != REG)
++ return 0;
++
++ regno = REGNO (x);
++
++ if (strict_p)
++ return REGNO_OK_FOR_BASE_P (regno);
++
++ return (regno <= LAST_REGNUM || regno >= FIRST_PSEUDO_REGISTER);
++}
++
++/* Return nonzero if INDEX is valid for an address index operand. */
++int
++avr32_legitimate_index_p (enum machine_mode mode, rtx index, int strict_p)
++{
++ enum rtx_code code = GET_CODE (index);
++
++ if (mode == TImode)
++ return 0;
++
++ /* Standard coprocessor addressing modes. */
++ if (code == CONST_INT)
++ {
++ if (TARGET_HARD_FLOAT && GET_MODE_CLASS (mode) == MODE_FLOAT)
++ /* Coprocessor mem insns has a smaller reach than ordinary mem insns */
++ return CONST_OK_FOR_CONSTRAINT_P (INTVAL (index), 'K', "Ku14");
++ else
++ return CONST_OK_FOR_CONSTRAINT_P (INTVAL (index), 'K', "Ks16");
++ }
++
++ if (avr32_address_register_rtx_p (index, strict_p))
++ return 1;
++
++ if (code == MULT)
++ {
++ rtx xiop0 = XEXP (index, 0);
++ rtx xiop1 = XEXP (index, 1);
++ return ((avr32_address_register_rtx_p (xiop0, strict_p)
++ && power_of_two_operand (xiop1, SImode)
++ && (INTVAL (xiop1) <= 8))
++ || (avr32_address_register_rtx_p (xiop1, strict_p)
++ && power_of_two_operand (xiop0, SImode)
++ && (INTVAL (xiop0) <= 8)));
++ }
++ else if (code == ASHIFT)
++ {
++ rtx op = XEXP (index, 1);
++
++ return (avr32_address_register_rtx_p (XEXP (index, 0), strict_p)
++ && GET_CODE (op) == CONST_INT
++ && INTVAL (op) > 0 && INTVAL (op) <= 3);
++ }
++
++ return 0;
++}
++
++/*
++ Used in the GO_IF_LEGITIMATE_ADDRESS macro. Returns a nonzero value if
++ the RTX x is a legitimate memory address.
++
++ Returns NO_REGS if the address is not legatime, GENERAL_REGS or ALL_REGS
++ if it is.
++*/
++
++/* Forward declaration*/
++int is_minipool_label (rtx label);
++
++int
++avr32_legitimate_address (enum machine_mode mode ATTRIBUTE_UNUSED,
++ rtx x, int strict)
++{
++
++ switch (GET_CODE (x))
++ {
++ case REG:
++ return avr32_address_register_rtx_p (x, strict);
++ case CONST:
++ {
++ rtx label = avr32_find_symbol (x);
++ if (label
++ &&
++ ( (CONSTANT_POOL_ADDRESS_P (label)
++ && !(flag_pic
++ && (symbol_mentioned_p (get_pool_constant (label))
++ || label_mentioned_p (get_pool_constant(label)))))
++ /* TODO! Can this ever happen??? */
++ || ((GET_CODE (label) == LABEL_REF)
++ && GET_CODE (XEXP (label, 0)) == CODE_LABEL
++ && is_minipool_label (XEXP (label, 0)))))
++ {
++ return TRUE;
++ }
++ }
++ break;
++ case LABEL_REF:
++ if (GET_CODE (XEXP (x, 0)) == CODE_LABEL
++ && is_minipool_label (XEXP (x, 0)))
++ {
++ return TRUE;
++ }
++ break;
++ case SYMBOL_REF:
++ {
++ if (CONSTANT_POOL_ADDRESS_P (x)
++ && !(flag_pic
++ && (symbol_mentioned_p (get_pool_constant (x))
++ || label_mentioned_p (get_pool_constant (x)))))
++ return TRUE;
++ /*
++ A symbol_ref is only legal if it is a function. If all of them are
++ legal, a pseudo reg that is a constant will be replaced by a
++ symbol_ref and make illegale code. SYMBOL_REF_FLAG is set by
++ ENCODE_SECTION_INFO. */
++ else if (SYMBOL_REF_RCALL_FUNCTION_P (x))
++ return TRUE;
++ break;
++ }
++ case PRE_DEC: /* (pre_dec (...)) */
++ case POST_INC: /* (post_inc (...)) */
++ return avr32_address_register_rtx_p (XEXP (x, 0), strict);
++ case PLUS: /* (plus (...) (...)) */
++ {
++ rtx xop0 = XEXP (x, 0);
++ rtx xop1 = XEXP (x, 1);
++
++ return ((avr32_address_register_rtx_p (xop0, strict)
++ && avr32_legitimate_index_p (mode, xop1, strict))
++ || (avr32_address_register_rtx_p (xop1, strict)
++ && avr32_legitimate_index_p (mode, xop0, strict)));
++ }
++ default:
++ break;
++ }
++
++ return FALSE;
++}
++
++
++int
++avr32_const_double_immediate (rtx value)
++{
++ HOST_WIDE_INT hi, lo;
++
++ if (GET_CODE (value) != CONST_DOUBLE)
++ return FALSE;
++
++ if (GET_MODE (value) == DImode)
++ {
++ hi = CONST_DOUBLE_HIGH (value);
++ lo = CONST_DOUBLE_LOW (value);
++ }
++ else
++ {
++ HOST_WIDE_INT target_float[2];
++ hi = lo = 0;
++ real_to_target (target_float, CONST_DOUBLE_REAL_VALUE (value),
++ GET_MODE (value));
++ lo = target_float[0];
++ hi = target_float[1];
++ }
++ if (avr32_const_ok_for_constraint_p (lo, 'K', "Ks21")
++ && ((GET_MODE (value) == SFmode)
++ || avr32_const_ok_for_constraint_p (hi, 'K', "Ks21")))
++ {
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++
++int
++avr32_legitimate_constant_p (rtx x)
++{
++ switch (GET_CODE (x))
++ {
++ case CONST_INT:
++ return avr32_const_ok_for_constraint_p (INTVAL (x), 'K', "Ks21");
++ case CONST_DOUBLE:
++ if (GET_MODE (x) == SFmode
++ || GET_MODE (x) == DFmode || GET_MODE (x) == DImode)
++ return avr32_const_double_immediate (x);
++ else
++ return 0;
++ case LABEL_REF:
++ return flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS;
++ case SYMBOL_REF:
++ return flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS;
++ case CONST:
++ /* We must handle this one in the movsi expansion in order for gcc not
++ to put it in the constant pool. */
++ return 0 /* flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS */ ;
++ case HIGH:
++ case CONST_VECTOR:
++ return 0;
++ default:
++ printf ("%s():\n", __FUNCTION__);
++ debug_rtx (x);
++ return 1;
++ }
++}
++
++
++/* Strip any special encoding from labels */
++const char *
++avr32_strip_name_encoding (const char *name)
++{
++ const char *stripped = name;
++
++ while (1)
++ {
++ switch (stripped[0])
++ {
++ case '#':
++ stripped = strchr (name + 1, '#') + 1;
++ break;
++ case '*':
++ stripped = &stripped[1];
++ break;
++ default:
++ return stripped;
++ }
++ }
++}
++
++
++
++/* Do anything needed before RTL is emitted for each function. */
++static struct machine_function *
++avr32_init_machine_status (void)
++{
++ struct machine_function *machine;
++ machine =
++ (machine_function *) ggc_alloc_cleared (sizeof (machine_function));
++
++#if AVR32_FT_UNKNOWN != 0
++ machine->func_type = AVR32_FT_UNKNOWN;
++#endif
++
++ machine->minipool_label_head = 0;
++ machine->minipool_label_tail = 0;
++ return machine;
++}
++
++void
++avr32_init_expanders (void)
++{
++ /* Arrange to initialize and mark the machine per-function status. */
++ init_machine_status = avr32_init_machine_status;
++}
++
++
++/* Return an RTX indicating where the return address to the
++ calling function can be found. */
++
++rtx
++avr32_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
++{
++ if (count != 0)
++ return NULL_RTX;
++
++ return get_hard_reg_initial_val (Pmode, LR_REGNUM);
++}
++
++
++void
++avr32_encode_section_info (tree decl, rtx rtl, int first)
++{
++
++ if (first && DECL_P (decl))
++ {
++ /* Set SYMBOL_REG_FLAG for local functions */
++ if (!TREE_PUBLIC (decl) && TREE_CODE (decl) == FUNCTION_DECL)
++ {
++ if ((*targetm.binds_local_p) (decl))
++ {
++ SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
++ }
++ }
++ }
++}
++
++
++void
++avr32_asm_output_ascii (FILE * stream, char *ptr, int len)
++{
++ int i, i_new = 0;
++ char *new_ptr = xmalloc (4 * len);
++ if (new_ptr == NULL)
++ internal_error ("Out of memory.");
++
++ for (i = 0; i < len; i++)
++ {
++ if (ptr[i] == '\n')
++ {
++ new_ptr[i_new++] = '\\';
++ new_ptr[i_new++] = '0';
++ new_ptr[i_new++] = '1';
++ new_ptr[i_new++] = '2';
++ }
++ else if (ptr[i] == '\"')
++ {
++ new_ptr[i_new++] = '\\';
++ new_ptr[i_new++] = '\"';
++ }
++ else if (ptr[i] == '\\')
++ {
++ new_ptr[i_new++] = '\\';
++ new_ptr[i_new++] = '\\';
++ }
++ else if (ptr[i] == '\0' && i + 1 < len)
++ {
++ new_ptr[i_new++] = '\\';
++ new_ptr[i_new++] = '0';
++ }
++ else
++ {
++ new_ptr[i_new++] = ptr[i];
++ }
++ }
++
++ /* Terminate new_ptr. */
++ new_ptr[i_new] = '\0';
++ fprintf (stream, "\t.ascii\t\"%s\"\n", new_ptr);
++ free (new_ptr);
++}
++
++
++void
++avr32_asm_output_label (FILE * stream, const char *name)
++{
++ name = avr32_strip_name_encoding (name);
++
++ /* Print the label. */
++ assemble_name (stream, name);
++ fprintf (stream, ":\n");
++}
++
++
++
++void
++avr32_asm_weaken_label (FILE * stream, const char *name)
++{
++ fprintf (stream, "\t.weak ");
++ assemble_name (stream, name);
++ fprintf (stream, "\n");
++}
++
++/*
++ Checks if a labelref is equal to a reserved word in the assembler. If it is,
++ insert a '_' before the label name.
++*/
++void
++avr32_asm_output_labelref (FILE * stream, const char *name)
++{
++ int verbatim = FALSE;
++ const char *stripped = name;
++ int strip_finished = FALSE;
++
++ while (!strip_finished)
++ {
++ switch (stripped[0])
++ {
++ case '#':
++ stripped = strchr (name + 1, '#') + 1;
++ break;
++ case '*':
++ stripped = &stripped[1];
++ verbatim = TRUE;
++ break;
++ default:
++ strip_finished = TRUE;
++ break;
++ }
++ }
++
++ if (verbatim)
++ fputs (stripped, stream);
++ else
++ asm_fprintf (stream, "%U%s", stripped);
++}
++
++
++
++/*
++ Check if the comparison in compare_exp is redundant
++ for the condition given in next_cond given that the
++ needed flags are already set by an earlier instruction.
++ Uses cc_prev_status to check this.
++
++ Returns NULL_RTX if the compare is not redundant
++ or the new condition to use in the conditional
++ instruction if the compare is redundant.
++*/
++static rtx
++is_compare_redundant (rtx compare_exp, rtx next_cond)
++{
++ int z_flag_valid = FALSE;
++ int n_flag_valid = FALSE;
++ rtx new_cond;
++
++ if (GET_CODE (compare_exp) != COMPARE)
++ return NULL_RTX;
++
++
++ if (GET_MODE (compare_exp) != SImode)
++ return NULL_RTX;
++
++ if (rtx_equal_p (cc_prev_status.mdep.value, compare_exp))
++ {
++ /* cc0 already contains the correct comparison -> delete cmp insn */
++ return next_cond;
++ }
++
++ switch (cc_prev_status.mdep.flags)
++ {
++ case CC_SET_VNCZ:
++ case CC_SET_NCZ:
++ n_flag_valid = TRUE;
++ case CC_SET_CZ:
++ case CC_SET_Z:
++ z_flag_valid = TRUE;
++ }
++
++ if (cc_prev_status.mdep.value
++ && REG_P (XEXP (compare_exp, 0))
++ && REGNO (XEXP (compare_exp, 0)) == REGNO (cc_prev_status.mdep.value)
++ && GET_CODE (XEXP (compare_exp, 1)) == CONST_INT
++ && next_cond != NULL_RTX)
++ {
++ if (INTVAL (XEXP (compare_exp, 1)) == 0
++ && z_flag_valid
++ && (GET_CODE (next_cond) == EQ || GET_CODE (next_cond) == NE))
++ /* We can skip comparison Z flag is already reflecting ops[0] */
++ return next_cond;
++ else if (n_flag_valid
++ && ((INTVAL (XEXP (compare_exp, 1)) == 0
++ && (GET_CODE (next_cond) == GE
++ || GET_CODE (next_cond) == LT))
++ || (INTVAL (XEXP (compare_exp, 1)) == -1
++ && (GET_CODE (next_cond) == GT
++ || GET_CODE (next_cond) == LE))))
++ {
++ /* We can skip comparison N flag is already reflecting ops[0],
++ which means that we can use the mi/pl conditions to check if
++ ops[0] is GE or LT 0. */
++ if ((GET_CODE (next_cond) == GE) || (GET_CODE (next_cond) == GT))
++ new_cond =
++ gen_rtx_UNSPEC (CCmode, gen_rtvec (2, cc0_rtx, const0_rtx),
++ UNSPEC_COND_PL);
++ else
++ new_cond =
++ gen_rtx_UNSPEC (CCmode, gen_rtvec (2, cc0_rtx, const0_rtx),
++ UNSPEC_COND_MI);
++ return new_cond;
++ }
++ }
++ return NULL_RTX;
++}
++
++/* Updates cc_status. */
++void
++avr32_notice_update_cc (rtx exp, rtx insn)
++{
++ switch (get_attr_cc (insn))
++ {
++ case CC_CALL_SET:
++ CC_STATUS_INIT;
++ FPCC_STATUS_INIT;
++ /* Check if the function call returns a value in r12 */
++ if (REG_P (recog_data.operand[0])
++ && REGNO (recog_data.operand[0]) == RETVAL_REGNUM)
++ {
++ cc_status.flags = 0;
++ cc_status.mdep.value =
++ gen_rtx_COMPARE (SImode, recog_data.operand[0], const0_rtx);
++ cc_status.mdep.flags = CC_SET_VNCZ;
++
++ }
++ break;
++ case CC_COMPARE:
++ /* Check that compare will not be optimized away if so nothing should
++ be done */
++ if (is_compare_redundant (SET_SRC (exp), get_next_insn_cond (insn))
++ == NULL_RTX)
++ {
++
++ /* Reset the nonstandard flag */
++ CC_STATUS_INIT;
++ cc_status.flags = 0;
++ cc_status.mdep.value = SET_SRC (exp);
++ cc_status.mdep.flags = CC_SET_VNCZ;
++ }
++ break;
++ case CC_FPCOMPARE:
++ /* Check that floating-point compare will not be optimized away if so
++ nothing should be done */
++ if (!rtx_equal_p (cc_prev_status.mdep.fpvalue, SET_SRC (exp)))
++ {
++ /* cc0 already contains the correct comparison -> delete cmp insn */
++ /* Reset the nonstandard flag */
++ cc_status.mdep.fpvalue = SET_SRC (exp);
++ cc_status.mdep.fpflags = CC_SET_CZ;
++ }
++ break;
++ case CC_FROM_FPCC:
++ /* Flags are updated with flags from Floating-point coprocessor, set
++ CC_NOT_SIGNED flag since the flags are set so that unsigned
++ condidion codes can be used directly. */
++ CC_STATUS_INIT;
++ cc_status.flags = CC_NOT_SIGNED;
++ cc_status.mdep.value = cc_status.mdep.fpvalue;
++ cc_status.mdep.flags = cc_status.mdep.fpflags;
++ break;
++ case CC_BLD:
++ /* Bit load is kind of like an inverted testsi, because the Z flag is
++ inverted */
++ CC_STATUS_INIT;
++ cc_status.flags = CC_INVERTED;
++ cc_status.mdep.value = SET_SRC (exp);
++ cc_status.mdep.flags = CC_SET_Z;
++ break;
++ case CC_NONE:
++ /* Insn does not affect CC at all. Check if the instruction updates
++ some of the register currently reflected in cc0 */
++
++ if ((GET_CODE (exp) == SET)
++ && (cc_status.value1 || cc_status.value2 || cc_status.mdep.value)
++ && (reg_mentioned_p (SET_DEST (exp), cc_status.value1)
++ || reg_mentioned_p (SET_DEST (exp), cc_status.value2)
++ || reg_mentioned_p (SET_DEST (exp), cc_status.mdep.value)))
++ {
++ CC_STATUS_INIT;
++ }
++
++ /* If this is a parallel we must step through each of the parallel
++ expressions */
++ if (GET_CODE (exp) == PARALLEL)
++ {
++ int i;
++ for (i = 0; i < XVECLEN (exp, 0); ++i)
++ {
++ rtx vec_exp = XVECEXP (exp, 0, i);
++ if ((GET_CODE (vec_exp) == SET)
++ && (cc_status.value1 || cc_status.value2
++ || cc_status.mdep.value)
++ && (reg_mentioned_p (SET_DEST (vec_exp), cc_status.value1)
++ || reg_mentioned_p (SET_DEST (vec_exp),
++ cc_status.value2)
++ || reg_mentioned_p (SET_DEST (vec_exp),
++ cc_status.mdep.value)))
++ {
++ CC_STATUS_INIT;
++ }
++ }
++ }
++
++ /* Check if we have memory opartions with post_inc or pre_dec on the
++ register currently reflected in cc0 */
++ if (GET_CODE (exp) == SET
++ && GET_CODE (SET_SRC (exp)) == MEM
++ && (GET_CODE (XEXP (SET_SRC (exp), 0)) == POST_INC
++ || GET_CODE (XEXP (SET_SRC (exp), 0)) == PRE_DEC)
++ &&
++ (reg_mentioned_p
++ (XEXP (XEXP (SET_SRC (exp), 0), 0), cc_status.value1)
++ || reg_mentioned_p (XEXP (XEXP (SET_SRC (exp), 0), 0),
++ cc_status.value2)
++ || reg_mentioned_p (XEXP (XEXP (SET_SRC (exp), 0), 0),
++ cc_status.mdep.value)))
++ CC_STATUS_INIT;
++
++ if (GET_CODE (exp) == SET
++ && GET_CODE (SET_DEST (exp)) == MEM
++ && (GET_CODE (XEXP (SET_DEST (exp), 0)) == POST_INC
++ || GET_CODE (XEXP (SET_DEST (exp), 0)) == PRE_DEC)
++ &&
++ (reg_mentioned_p
++ (XEXP (XEXP (SET_DEST (exp), 0), 0), cc_status.value1)
++ || reg_mentioned_p (XEXP (XEXP (SET_DEST (exp), 0), 0),
++ cc_status.value2)
++ || reg_mentioned_p (XEXP (XEXP (SET_DEST (exp), 0), 0),
++ cc_status.mdep.value)))
++ CC_STATUS_INIT;
++ break;
++
++ case CC_SET_VNCZ:
++ CC_STATUS_INIT;
++ cc_status.mdep.value = recog_data.operand[0];
++ cc_status.mdep.flags = CC_SET_VNCZ;
++ break;
++
++ case CC_SET_NCZ:
++ CC_STATUS_INIT;
++ cc_status.mdep.value = recog_data.operand[0];
++ cc_status.mdep.flags = CC_SET_NCZ;
++ break;
++
++ case CC_SET_CZ:
++ CC_STATUS_INIT;
++ cc_status.mdep.value = recog_data.operand[0];
++ cc_status.mdep.flags = CC_SET_CZ;
++ break;
++
++ case CC_SET_Z:
++ CC_STATUS_INIT;
++ cc_status.mdep.value = recog_data.operand[0];
++ cc_status.mdep.flags = CC_SET_Z;
++ break;
++
++ case CC_CLOBBER:
++ CC_STATUS_INIT;
++ break;
++
++ default:
++ CC_STATUS_INIT;
++ }
++}
++
++
++/*
++ Outputs to stdio stream stream the assembler syntax for an instruction
++ operand x. x is an RTL expression.
++*/
++void
++avr32_print_operand (FILE * stream, rtx x, int code)
++{
++ int error = 0;
++
++ switch (GET_CODE (x))
++ {
++ case UNSPEC:
++ switch (XINT (x, 1))
++ {
++ case UNSPEC_COND_PL:
++ if (code == 'i')
++ fputs ("mi", stream);
++ else
++ fputs ("pl", stream);
++ break;
++ case UNSPEC_COND_MI:
++ if (code == 'i')
++ fputs ("pl", stream);
++ else
++ fputs ("mi", stream);
++ break;
++ default:
++ error = 1;
++ }
++ break;
++ case EQ:
++ if (code == 'i')
++ fputs ("ne", stream);
++ else
++ fputs ("eq", stream);
++ break;
++ case NE:
++ if (code == 'i')
++ fputs ("eq", stream);
++ else
++ fputs ("ne", stream);
++ break;
++ case GT:
++ if (code == 'i')
++ fputs ("le", stream);
++ else
++ fputs ("gt", stream);
++ break;
++ case GTU:
++ if (code == 'i')
++ fputs ("ls", stream);
++ else
++ fputs ("hi", stream);
++ break;
++ case LT:
++ if (code == 'i')
++ fputs ("ge", stream);
++ else
++ fputs ("lt", stream);
++ break;
++ case LTU:
++ if (code == 'i')
++ fputs ("hs", stream);
++ else
++ fputs ("lo", stream);
++ break;
++ case GE:
++ if (code == 'i')
++ fputs ("lt", stream);
++ else
++ fputs ("ge", stream);
++ break;
++ case GEU:
++ if (code == 'i')
++ fputs ("lo", stream);
++ else
++ fputs ("hs", stream);
++ break;
++ case LE:
++ if (code == 'i')
++ fputs ("gt", stream);
++ else
++ fputs ("le", stream);
++ break;
++ case LEU:
++ if (code == 'i')
++ fputs ("hi", stream);
++ else
++ fputs ("ls", stream);
++ break;
++ case CONST_INT:
++ {
++ int value = INTVAL (x);
++
++ if (code == 'i')
++ {
++ value++;
++ }
++
++ if (code == 'p')
++ {
++ /* Set to bit position of first bit set in immediate */
++ int i, bitpos = 32;
++ for (i = 0; i < 32; i++)
++ if (value & (1 << i))
++ {
++ bitpos = i;
++ break;
++ }
++ value = bitpos;
++ }
++
++ if (code == 'r')
++ {
++ /* Reglist 8 */
++ char op[50];
++ op[0] = '\0';
++
++ if (value & 0x01)
++ sprintf (op, "r0-r3");
++ if (value & 0x02)
++ strlen (op) ? sprintf (op, "%s, r4-r7", op) : sprintf (op,
++ "r4-r7");
++ if (value & 0x04)
++ strlen (op) ? sprintf (op, "%s, r8-r9", op) : sprintf (op,
++ "r8-r9");
++ if (value & 0x08)
++ strlen (op) ? sprintf (op, "%s, r10", op) : sprintf (op, "r10");
++ if (value & 0x10)
++ strlen (op) ? sprintf (op, "%s, r11", op) : sprintf (op, "r11");
++ if (value & 0x20)
++ strlen (op) ? sprintf (op, "%s, r12", op) : sprintf (op, "r12");
++ if (value & 0x40)
++ strlen (op) ? sprintf (op, "%s, lr", op) : sprintf (op, "lr");
++ if (value & 0x80)
++ strlen (op) ? sprintf (op, "%s, pc", op) : sprintf (op, "pc");
++
++ fputs (op, stream);
++ }
++ else if (code == 's')
++ {
++ /* Reglist 16 */
++ char reglist16_string[100];
++ int i;
++ reglist16_string[0] = '\0';
++
++ for (i = 0; i < 16; ++i)
++ {
++ if (value & (1 << i))
++ {
++ strlen (reglist16_string) ? sprintf (reglist16_string,
++ "%s, %s",
++ reglist16_string,
++ reg_names
++ [INTERNAL_REGNUM
++ (i)]) :
++ sprintf (reglist16_string, "%s",
++ reg_names[INTERNAL_REGNUM (i)]);
++ }
++ }
++ fputs (reglist16_string, stream);
++ }
++ else if (code == 'C')
++ {
++ /* RegListCP8 */
++ char reglist_string[100];
++ avr32_make_fp_reglist_w (value, (char *) reglist_string);
++ fputs (reglist_string, stream);
++ }
++ else if (code == 'D')
++ {
++ /* RegListCPD8 */
++ char reglist_string[100];
++ avr32_make_fp_reglist_d (value, (char *) reglist_string);
++ fputs (reglist_string, stream);
++ }
++ else if (code == 'd')
++ {
++ /* Print in decimal format */
++ fprintf (stream, "%d", value);
++ }
++ else if (code == 'h')
++ {
++ /* Print halfword part of word */
++ fputs (value ? "b" : "t", stream);
++ }
++ else
++ {
++ /* Normal constant */
++ fprintf (stream, "%d", value);
++ }
++ break;
++ }
++ case CONST_DOUBLE:
++ {
++ HOST_WIDE_INT hi, lo;
++ if (GET_MODE (x) == DImode)
++ {
++ hi = CONST_DOUBLE_HIGH (x);
++ lo = CONST_DOUBLE_LOW (x);
++ }
++ else
++ {
++ HOST_WIDE_INT target_float[2];
++ hi = lo = 0;
++ real_to_target (target_float, CONST_DOUBLE_REAL_VALUE (x),
++ GET_MODE (x));
++ /* For doubles the most significant part starts at index 0. */
++ if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
++ {
++ hi = target_float[0];
++ lo = target_float[1];
++ }
++ else
++ {
++ lo = target_float[0];
++ }
++ }
++
++ if (avr32_const_ok_for_constraint_p (lo, 'K', "Ks21")
++ && ((GET_MODE (x) == SFmode)
++ || avr32_const_ok_for_constraint_p (hi, 'K', "Ks21")))
++ {
++ if (code == 'm')
++ fprintf (stream, "%ld", hi);
++ else
++ fprintf (stream, "%ld", lo);
++ }
++ else
++ {
++ fprintf (stream, "value too large");
++ }
++ break;
++ }
++ case CONST:
++ output_addr_const (stream, XEXP (XEXP (x, 0), 0));
++ fprintf (stream, "+%ld", INTVAL (XEXP (XEXP (x, 0), 1)));
++ break;
++ case REG:
++ /* Swap register name if the register is DImode or DFmode. */
++ if (GET_MODE (x) == DImode || GET_MODE (x) == DFmode)
++ {
++ /* Double register must have an even numbered address */
++ gcc_assert (!(REGNO (x) % 2));
++ if (code == 'm')
++ fputs (reg_names[true_regnum (x)], stream);
++ else
++ fputs (reg_names[true_regnum (x) + 1], stream);
++ }
++ else if (GET_MODE (x) == TImode)
++ {
++ switch (code)
++ {
++ case 'T':
++ fputs (reg_names[true_regnum (x)], stream);
++ break;
++ case 'U':
++ fputs (reg_names[true_regnum (x) + 1], stream);
++ break;
++ case 'L':
++ fputs (reg_names[true_regnum (x) + 2], stream);
++ break;
++ case 'B':
++ fputs (reg_names[true_regnum (x) + 3], stream);
++ break;
++ default:
++ fprintf (stream, "%s, %s, %s, %s",
++ reg_names[true_regnum (x) + 3],
++ reg_names[true_regnum (x) + 2],
++ reg_names[true_regnum (x) + 1],
++ reg_names[true_regnum (x)]);
++ break;
++ }
++ }
++ else
++ {
++ fputs (reg_names[true_regnum (x)], stream);
++ }
++ break;
++ case CODE_LABEL:
++ case LABEL_REF:
++ case SYMBOL_REF:
++ output_addr_const (stream, x);
++ break;
++ case MEM:
++ switch (GET_CODE (XEXP (x, 0)))
++ {
++ case LABEL_REF:
++ case SYMBOL_REF:
++ output_addr_const (stream, XEXP (x, 0));
++ break;
++ case MEM:
++ switch (GET_CODE (XEXP (XEXP (x, 0), 0)))
++ {
++ case SYMBOL_REF:
++ output_addr_const (stream, XEXP (XEXP (x, 0), 0));
++ break;
++ default:
++ error = 1;
++ break;
++ }
++ break;
++ case REG:
++ avr32_print_operand (stream, XEXP (x, 0), 0);
++ if (code != 'p')
++ fputs ("[0]", stream);
++ break;
++ case PRE_DEC:
++ fputs ("--", stream);
++ avr32_print_operand (stream, XEXP (XEXP (x, 0), 0), 0);
++ break;
++ case POST_INC:
++ avr32_print_operand (stream, XEXP (XEXP (x, 0), 0), 0);
++ fputs ("++", stream);
++ break;
++ case PLUS:
++ {
++ rtx op0 = XEXP (XEXP (x, 0), 0);
++ rtx op1 = XEXP (XEXP (x, 0), 1);
++ rtx base = NULL_RTX, offset = NULL_RTX;
++
++ if (avr32_address_register_rtx_p (op0, 1))
++ {
++ base = op0;
++ offset = op1;
++ }
++ else if (avr32_address_register_rtx_p (op1, 1))
++ {
++ /* Operands are switched. */
++ base = op1;
++ offset = op0;
++ }
++
++ gcc_assert (base && offset
++ && avr32_address_register_rtx_p (base, 1)
++ && avr32_legitimate_index_p (GET_MODE (x), offset,
++ 1));
++
++ avr32_print_operand (stream, base, 0);
++ fputs ("[", stream);
++ avr32_print_operand (stream, offset, 0);
++ fputs ("]", stream);
++ break;
++ }
++ case CONST:
++ output_addr_const (stream, XEXP (XEXP (XEXP (x, 0), 0), 0));
++ fprintf (stream, " + %ld",
++ INTVAL (XEXP (XEXP (XEXP (x, 0), 0), 1)));
++ break;
++ default:
++ error = 1;
++ }
++ break;
++ case MULT:
++ {
++ int value = INTVAL (XEXP (x, 1));
++
++ /* Convert immediate in multiplication into a shift immediate */
++ switch (value)
++ {
++ case 2:
++ value = 1;
++ break;
++ case 4:
++ value = 2;
++ break;
++ case 8:
++ value = 3;
++ break;
++ default:
++ value = 0;
++ }
++ fprintf (stream, "%s << %i", reg_names[true_regnum (XEXP (x, 0))],
++ value);
++ break;
++ }
++ case ASHIFT:
++ if (GET_CODE (XEXP (x, 1)) == CONST_INT)
++ fprintf (stream, "%s << %i", reg_names[true_regnum (XEXP (x, 0))],
++ (int) INTVAL (XEXP (x, 1)));
++ else if (REG_P (XEXP (x, 1)))
++ fprintf (stream, "%s << %s", reg_names[true_regnum (XEXP (x, 0))],
++ reg_names[true_regnum (XEXP (x, 1))]);
++ else
++ {
++ error = 1;
++ }
++ break;
++ case LSHIFTRT:
++ if (GET_CODE (XEXP (x, 1)) == CONST_INT)
++ fprintf (stream, "%s >> %i", reg_names[true_regnum (XEXP (x, 0))],
++ (int) INTVAL (XEXP (x, 1)));
++ else if (REG_P (XEXP (x, 1)))
++ fprintf (stream, "%s >> %s", reg_names[true_regnum (XEXP (x, 0))],
++ reg_names[true_regnum (XEXP (x, 1))]);
++ else
++ {
++ error = 1;
++ }
++ fprintf (stream, ">>");
++ break;
++ case PARALLEL:
++ {
++ /* Load store multiple */
++ int i;
++ int count = XVECLEN (x, 0);
++ int reglist16 = 0;
++ char reglist16_string[100];
++
++ for (i = 0; i < count; ++i)
++ {
++ rtx vec_elm = XVECEXP (x, 0, i);
++ if (GET_MODE (vec_elm) != SET)
++ {
++ debug_rtx (vec_elm);
++ internal_error ("Unknown element in parallel expression!");
++ }
++ if (GET_MODE (XEXP (vec_elm, 0)) == REG)
++ {
++ /* Load multiple */
++ reglist16 |= 1 << ASM_REGNUM (REGNO (XEXP (vec_elm, 0)));
++ }
++ else
++ {
++ /* Store multiple */
++ reglist16 |= 1 << ASM_REGNUM (REGNO (XEXP (vec_elm, 1)));
++ }
++ }
++
++ avr32_make_reglist16 (reglist16, reglist16_string);
++ fputs (reglist16_string, stream);
++
++ break;
++ }
++
++ default:
++ error = 1;
++ }
++
++ if (error)
++ {
++ debug_rtx (x);
++ internal_error ("Illegal expression for avr32_print_operand");
++ }
++}
++
++rtx
++avr32_get_note_reg_equiv (rtx insn)
++{
++ rtx note;
++
++ note = find_reg_note (insn, REG_EQUIV, NULL_RTX);
++
++ if (note != NULL_RTX)
++ return XEXP (note, 0);
++ else
++ return NULL_RTX;
++}
++
++/*
++ Outputs to stdio stream stream the assembler syntax for an instruction
++ operand that is a memory reference whose address is x. x is an RTL
++ expression.
++
++ ToDo: fixme.
++*/
++void
++avr32_print_operand_address (FILE * stream, rtx x)
++{
++ fprintf (stream, "(%d) /* address */", REGNO (x));
++}
++
++/* Return true if _GLOBAL_OFFSET_TABLE_ symbol is mentioned. */
++bool
++avr32_got_mentioned_p (rtx addr)
++{
++ if (GET_CODE (addr) == MEM)
++ addr = XEXP (addr, 0);
++ while (GET_CODE (addr) == CONST)
++ addr = XEXP (addr, 0);
++ if (GET_CODE (addr) == SYMBOL_REF)
++ {
++ return streq (XSTR (addr, 0), "_GLOBAL_OFFSET_TABLE_");
++ }
++ if (GET_CODE (addr) == PLUS || GET_CODE (addr) == MINUS)
++ {
++ bool l1, l2;
++
++ l1 = avr32_got_mentioned_p (XEXP (addr, 0));
++ l2 = avr32_got_mentioned_p (XEXP (addr, 1));
++ return l1 || l2;
++ }
++ return false;
++}
++
++
++/* Find the symbol in an address expression. */
++
++rtx
++avr32_find_symbol (rtx addr)
++{
++ if (GET_CODE (addr) == MEM)
++ addr = XEXP (addr, 0);
++
++ while (GET_CODE (addr) == CONST)
++ addr = XEXP (addr, 0);
++
++ if (GET_CODE (addr) == SYMBOL_REF || GET_CODE (addr) == LABEL_REF)
++ return addr;
++ if (GET_CODE (addr) == PLUS)
++ {
++ rtx l1, l2;
++
++ l1 = avr32_find_symbol (XEXP (addr, 0));
++ l2 = avr32_find_symbol (XEXP (addr, 1));
++ if (l1 != NULL_RTX && l2 == NULL_RTX)
++ return l1;
++ else if (l1 == NULL_RTX && l2 != NULL_RTX)
++ return l2;
++ }
++
++ return NULL_RTX;
++}
++
++
++/* Routines for manipulation of the constant pool. */
++
++/* AVR32 instructions cannot load a large constant directly into a
++ register; they have to come from a pc relative load. The constant
++ must therefore be placed in the addressable range of the pc
++ relative load. Depending on the precise pc relative load
++ instruction the range is somewhere between 256 bytes and 4k. This
++ means that we often have to dump a constant inside a function, and
++ generate code to branch around it.
++
++ It is important to minimize this, since the branches will slow
++ things down and make the code larger.
++
++ Normally we can hide the table after an existing unconditional
++ branch so that there is no interruption of the flow, but in the
++ worst case the code looks like this:
++
++ lddpc rn, L1
++ ...
++ rjmp L2
++ align
++ L1: .long value
++ L2:
++ ...
++
++ lddpc rn, L3
++ ...
++ rjmp L4
++ align
++ L3: .long value
++ L4:
++ ...
++
++ We fix this by performing a scan after scheduling, which notices
++ which instructions need to have their operands fetched from the
++ constant table and builds the table.
++
++ The algorithm starts by building a table of all the constants that
++ need fixing up and all the natural barriers in the function (places
++ where a constant table can be dropped without breaking the flow).
++ For each fixup we note how far the pc-relative replacement will be
++ able to reach and the offset of the instruction into the function.
++
++ Having built the table we then group the fixes together to form
++ tables that are as large as possible (subject to addressing
++ constraints) and emit each table of constants after the last
++ barrier that is within range of all the instructions in the group.
++ If a group does not contain a barrier, then we forcibly create one
++ by inserting a jump instruction into the flow. Once the table has
++ been inserted, the insns are then modified to reference the
++ relevant entry in the pool.
++
++ Possible enhancements to the algorithm (not implemented) are:
++
++ 1) For some processors and object formats, there may be benefit in
++ aligning the pools to the start of cache lines; this alignment
++ would need to be taken into account when calculating addressability
++ of a pool. */
++
++/* These typedefs are located at the start of this file, so that
++ they can be used in the prototypes there. This comment is to
++ remind readers of that fact so that the following structures
++ can be understood more easily.
++
++ typedef struct minipool_node Mnode;
++ typedef struct minipool_fixup Mfix; */
++
++struct minipool_node
++{
++ /* Doubly linked chain of entries. */
++ Mnode *next;
++ Mnode *prev;
++ /* The maximum offset into the code that this entry can be placed. While
++ pushing fixes for forward references, all entries are sorted in order of
++ increasing max_address. */
++ HOST_WIDE_INT max_address;
++ /* Similarly for an entry inserted for a backwards ref. */
++ HOST_WIDE_INT min_address;
++ /* The number of fixes referencing this entry. This can become zero if we
++ "unpush" an entry. In this case we ignore the entry when we come to
++ emit the code. */
++ int refcount;
++ /* The offset from the start of the minipool. */
++ HOST_WIDE_INT offset;
++ /* The value in table. */
++ rtx value;
++ /* The mode of value. */
++ enum machine_mode mode;
++ /* The size of the value. */
++ int fix_size;
++};
++
++struct minipool_fixup
++{
++ Mfix *next;
++ rtx insn;
++ HOST_WIDE_INT address;
++ rtx *loc;
++ enum machine_mode mode;
++ int fix_size;
++ rtx value;
++ Mnode *minipool;
++ HOST_WIDE_INT forwards;
++ HOST_WIDE_INT backwards;
++};
++
++
++/* Fixes less than a word need padding out to a word boundary. */
++#define MINIPOOL_FIX_SIZE(mode, value) \
++ (IS_FORCE_MINIPOOL(value) ? 0 : \
++ (GET_MODE_SIZE ((mode)) >= 4 ? GET_MODE_SIZE ((mode)) : 4))
++
++#define IS_FORCE_MINIPOOL(x) \
++ (GET_CODE(x) == UNSPEC && \
++ XINT(x, 1) == UNSPEC_FORCE_MINIPOOL)
++
++static Mnode *minipool_vector_head;
++static Mnode *minipool_vector_tail;
++
++/* The linked list of all minipool fixes required for this function. */
++Mfix *minipool_fix_head;
++Mfix *minipool_fix_tail;
++/* The fix entry for the current minipool, once it has been placed. */
++Mfix *minipool_barrier;
++
++/* Determines if INSN is the start of a jump table. Returns the end
++ of the TABLE or NULL_RTX. */
++static rtx
++is_jump_table (rtx insn)
++{
++ rtx table;
++
++ if (GET_CODE (insn) == JUMP_INSN
++ && JUMP_LABEL (insn) != NULL
++ && ((table = next_real_insn (JUMP_LABEL (insn)))
++ == next_real_insn (insn))
++ && table != NULL
++ && GET_CODE (table) == JUMP_INSN
++ && (GET_CODE (PATTERN (table)) == ADDR_VEC
++ || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
++ return table;
++
++ return NULL_RTX;
++}
++
++static HOST_WIDE_INT
++get_jump_table_size (rtx insn)
++{
++ /* ADDR_VECs only take room if read-only data does into the text section. */
++ if (JUMP_TABLES_IN_TEXT_SECTION
++#if !defined(READONLY_DATA_SECTION) && !defined(READONLY_DATA_SECTION_ASM_OP)
++ || 1
++#endif
++ )
++ {
++ rtx body = PATTERN (insn);
++ int elt = GET_CODE (body) == ADDR_DIFF_VEC ? 1 : 0;
++
++ return GET_MODE_SIZE (GET_MODE (body)) * XVECLEN (body, elt);
++ }
++
++ return 0;
++}
++
++/* Move a minipool fix MP from its current location to before MAX_MP.
++ If MAX_MP is NULL, then MP doesn't need moving, but the addressing
++ constraints may need updating. */
++static Mnode *
++move_minipool_fix_forward_ref (Mnode * mp, Mnode * max_mp,
++ HOST_WIDE_INT max_address)
++{
++ /* This should never be true and the code below assumes these are
++ different. */
++ if (mp == max_mp)
++ abort ();
++
++ if (max_mp == NULL)
++ {
++ if (max_address < mp->max_address)
++ mp->max_address = max_address;
++ }
++ else
++ {
++ if (max_address > max_mp->max_address - mp->fix_size)
++ mp->max_address = max_mp->max_address - mp->fix_size;
++ else
++ mp->max_address = max_address;
++
++ /* Unlink MP from its current position. Since max_mp is non-null,
++ mp->prev must be non-null. */
++ mp->prev->next = mp->next;
++ if (mp->next != NULL)
++ mp->next->prev = mp->prev;
++ else
++ minipool_vector_tail = mp->prev;
++
++ /* Re-insert it before MAX_MP. */
++ mp->next = max_mp;
++ mp->prev = max_mp->prev;
++ max_mp->prev = mp;
++
++ if (mp->prev != NULL)
++ mp->prev->next = mp;
++ else
++ minipool_vector_head = mp;
++ }
++
++ /* Save the new entry. */
++ max_mp = mp;
++
++ /* Scan over the preceding entries and adjust their addresses as required.
++ */
++ while (mp->prev != NULL
++ && mp->prev->max_address > mp->max_address - mp->prev->fix_size)
++ {
++ mp->prev->max_address = mp->max_address - mp->prev->fix_size;
++ mp = mp->prev;
++ }
++
++ return max_mp;
++}
++
++/* Add a constant to the minipool for a forward reference. Returns the
++ node added or NULL if the constant will not fit in this pool. */
++static Mnode *
++add_minipool_forward_ref (Mfix * fix)
++{
++ /* If set, max_mp is the first pool_entry that has a lower constraint than
++ the one we are trying to add. */
++ Mnode *max_mp = NULL;
++ HOST_WIDE_INT max_address = fix->address + fix->forwards;
++ Mnode *mp;
++
++ /* If this fix's address is greater than the address of the first entry,
++ then we can't put the fix in this pool. We subtract the size of the
++ current fix to ensure that if the table is fully packed we still have
++ enough room to insert this value by suffling the other fixes forwards. */
++ if (minipool_vector_head &&
++ fix->address >= minipool_vector_head->max_address - fix->fix_size)
++ return NULL;
++
++ /* Scan the pool to see if a constant with the same value has already been
++ added. While we are doing this, also note the location where we must
++ insert the constant if it doesn't already exist. */
++ for (mp = minipool_vector_head; mp != NULL; mp = mp->next)
++ {
++ if (GET_CODE (fix->value) == GET_CODE (mp->value)
++ && fix->mode == mp->mode
++ && (GET_CODE (fix->value) != CODE_LABEL
++ || (CODE_LABEL_NUMBER (fix->value)
++ == CODE_LABEL_NUMBER (mp->value)))
++ && rtx_equal_p (fix->value, mp->value))
++ {
++ /* More than one fix references this entry. */
++ mp->refcount++;
++ return move_minipool_fix_forward_ref (mp, max_mp, max_address);
++ }
++
++ /* Note the insertion point if necessary. */
++ if (max_mp == NULL && mp->max_address > max_address)
++ max_mp = mp;
++
++ }
++
++ /* The value is not currently in the minipool, so we need to create a new
++ entry for it. If MAX_MP is NULL, the entry will be put on the end of
++ the list since the placement is less constrained than any existing
++ entry. Otherwise, we insert the new fix before MAX_MP and, if
++ necessary, adjust the constraints on the other entries. */
++ mp = xmalloc (sizeof (*mp));
++ mp->fix_size = fix->fix_size;
++ mp->mode = fix->mode;
++ mp->value = fix->value;
++ mp->refcount = 1;
++ /* Not yet required for a backwards ref. */
++ mp->min_address = -65536;
++
++ if (max_mp == NULL)
++ {
++ mp->max_address = max_address;
++ mp->next = NULL;
++ mp->prev = minipool_vector_tail;
++
++ if (mp->prev == NULL)
++ {
++ minipool_vector_head = mp;
++ minipool_vector_label = gen_label_rtx ();
++ }
++ else
++ mp->prev->next = mp;
++
++ minipool_vector_tail = mp;
++ }
++ else
++ {
++ if (max_address > max_mp->max_address - mp->fix_size)
++ mp->max_address = max_mp->max_address - mp->fix_size;
++ else
++ mp->max_address = max_address;
++
++ mp->next = max_mp;
++ mp->prev = max_mp->prev;
++ max_mp->prev = mp;
++ if (mp->prev != NULL)
++ mp->prev->next = mp;
++ else
++ minipool_vector_head = mp;
++ }
++
++ /* Save the new entry. */
++ max_mp = mp;
++
++ /* Scan over the preceding entries and adjust their addresses as required.
++ */
++ while (mp->prev != NULL
++ && mp->prev->max_address > mp->max_address - mp->prev->fix_size)
++ {
++ mp->prev->max_address = mp->max_address - mp->prev->fix_size;
++ mp = mp->prev;
++ }
++
++ return max_mp;
++}
++
++static Mnode *
++move_minipool_fix_backward_ref (Mnode * mp, Mnode * min_mp,
++ HOST_WIDE_INT min_address)
++{
++ HOST_WIDE_INT offset;
++
++ /* This should never be true, and the code below assumes these are
++ different. */
++ if (mp == min_mp)
++ abort ();
++
++ if (min_mp == NULL)
++ {
++ if (min_address > mp->min_address)
++ mp->min_address = min_address;
++ }
++ else
++ {
++ /* We will adjust this below if it is too loose. */
++ mp->min_address = min_address;
++
++ /* Unlink MP from its current position. Since min_mp is non-null,
++ mp->next must be non-null. */
++ mp->next->prev = mp->prev;
++ if (mp->prev != NULL)
++ mp->prev->next = mp->next;
++ else
++ minipool_vector_head = mp->next;
++
++ /* Reinsert it after MIN_MP. */
++ mp->prev = min_mp;
++ mp->next = min_mp->next;
++ min_mp->next = mp;
++ if (mp->next != NULL)
++ mp->next->prev = mp;
++ else
++ minipool_vector_tail = mp;
++ }
++
++ min_mp = mp;
++
++ offset = 0;
++ for (mp = minipool_vector_head; mp != NULL; mp = mp->next)
++ {
++ mp->offset = offset;
++ if (mp->refcount > 0)
++ offset += mp->fix_size;
++
++ if (mp->next && mp->next->min_address < mp->min_address + mp->fix_size)
++ mp->next->min_address = mp->min_address + mp->fix_size;
++ }
++
++ return min_mp;
++}
++
++/* Add a constant to the minipool for a backward reference. Returns the
++ node added or NULL if the constant will not fit in this pool.
++
++ Note that the code for insertion for a backwards reference can be
++ somewhat confusing because the calculated offsets for each fix do
++ not take into account the size of the pool (which is still under
++ construction. */
++static Mnode *
++add_minipool_backward_ref (Mfix * fix)
++{
++ /* If set, min_mp is the last pool_entry that has a lower constraint than
++ the one we are trying to add. */
++ Mnode *min_mp = NULL;
++ /* This can be negative, since it is only a constraint. */
++ HOST_WIDE_INT min_address = fix->address - fix->backwards;
++ Mnode *mp;
++
++ /* If we can't reach the current pool from this insn, or if we can't insert
++ this entry at the end of the pool without pushing other fixes out of
++ range, then we don't try. This ensures that we can't fail later on. */
++ if (min_address >= minipool_barrier->address
++ || (minipool_vector_tail->min_address + fix->fix_size
++ >= minipool_barrier->address))
++ return NULL;
++
++ /* Scan the pool to see if a constant with the same value has already been
++ added. While we are doing this, also note the location where we must
++ insert the constant if it doesn't already exist. */
++ for (mp = minipool_vector_tail; mp != NULL; mp = mp->prev)
++ {
++ if (GET_CODE (fix->value) == GET_CODE (mp->value)
++ && fix->mode == mp->mode
++ && (GET_CODE (fix->value) != CODE_LABEL
++ || (CODE_LABEL_NUMBER (fix->value)
++ == CODE_LABEL_NUMBER (mp->value)))
++ && rtx_equal_p (fix->value, mp->value)
++ /* Check that there is enough slack to move this entry to the end
++ of the table (this is conservative). */
++ && (mp->max_address
++ > (minipool_barrier->address
++ + minipool_vector_tail->offset
++ + minipool_vector_tail->fix_size)))
++ {
++ mp->refcount++;
++ return move_minipool_fix_backward_ref (mp, min_mp, min_address);
++ }
++
++ if (min_mp != NULL)
++ mp->min_address += fix->fix_size;
++ else
++ {
++ /* Note the insertion point if necessary. */
++ if (mp->min_address < min_address)
++ {
++ min_mp = mp;
++ }
++ else if (mp->max_address
++ < minipool_barrier->address + mp->offset + fix->fix_size)
++ {
++ /* Inserting before this entry would push the fix beyond its
++ maximum address (which can happen if we have re-located a
++ forwards fix); force the new fix to come after it. */
++ min_mp = mp;
++ min_address = mp->min_address + fix->fix_size;
++ }
++ }
++ }
++
++ /* We need to create a new entry. */
++ mp = xmalloc (sizeof (*mp));
++ mp->fix_size = fix->fix_size;
++ mp->mode = fix->mode;
++ mp->value = fix->value;
++ mp->refcount = 1;
++ mp->max_address = minipool_barrier->address + 65536;
++
++ mp->min_address = min_address;
++
++ if (min_mp == NULL)
++ {
++ mp->prev = NULL;
++ mp->next = minipool_vector_head;
++
++ if (mp->next == NULL)
++ {
++ minipool_vector_tail = mp;
++ minipool_vector_label = gen_label_rtx ();
++ }
++ else
++ mp->next->prev = mp;
++
++ minipool_vector_head = mp;
++ }
++ else
++ {
++ mp->next = min_mp->next;
++ mp->prev = min_mp;
++ min_mp->next = mp;
++
++ if (mp->next != NULL)
++ mp->next->prev = mp;
++ else
++ minipool_vector_tail = mp;
++ }
++
++ /* Save the new entry. */
++ min_mp = mp;
++
++ if (mp->prev)
++ mp = mp->prev;
++ else
++ mp->offset = 0;
++
++ /* Scan over the following entries and adjust their offsets. */
++ while (mp->next != NULL)
++ {
++ if (mp->next->min_address < mp->min_address + mp->fix_size)
++ mp->next->min_address = mp->min_address + mp->fix_size;
++
++ if (mp->refcount)
++ mp->next->offset = mp->offset + mp->fix_size;
++ else
++ mp->next->offset = mp->offset;
++
++ mp = mp->next;
++ }
++
++ return min_mp;
++}
++
++static void
++assign_minipool_offsets (Mfix * barrier)
++{
++ HOST_WIDE_INT offset = 0;
++ Mnode *mp;
++
++ minipool_barrier = barrier;
++
++ for (mp = minipool_vector_head; mp != NULL; mp = mp->next)
++ {
++ mp->offset = offset;
++
++ if (mp->refcount > 0
++ /* If the value is (const_int 0) then this is a fake entry so don't
++ add an offset for it since it will not be output. */
++ && !(GET_CODE (mp->value) == CONST_INT && INTVAL (mp->value) == 0))
++ offset += mp->fix_size;
++ }
++}
++
++/* Print a symbolic form of X to the debug file, F. */
++static void
++avr32_print_value (FILE * f, rtx x)
++{
++ switch (GET_CODE (x))
++ {
++ case CONST_INT:
++ fprintf (f, "0x%x", (int) INTVAL (x));
++ return;
++
++ case CONST_DOUBLE:
++ fprintf (f, "<0x%lx,0x%lx>", (long) XWINT (x, 2), (long) XWINT (x, 3));
++ return;
++
++ case CONST_VECTOR:
++ {
++ int i;
++
++ fprintf (f, "<");
++ for (i = 0; i < CONST_VECTOR_NUNITS (x); i++)
++ {
++ fprintf (f, "0x%x", (int) INTVAL (CONST_VECTOR_ELT (x, i)));
++ if (i < (CONST_VECTOR_NUNITS (x) - 1))
++ fputc (',', f);
++ }
++ fprintf (f, ">");
++ }
++ return;
++
++ case CONST_STRING:
++ fprintf (f, "\"%s\"", XSTR (x, 0));
++ return;
++
++ case SYMBOL_REF:
++ fprintf (f, "`%s'", XSTR (x, 0));
++ return;
++
++ case LABEL_REF:
++ fprintf (f, "L%d", INSN_UID (XEXP (x, 0)));
++ return;
++
++ case CONST:
++ avr32_print_value (f, XEXP (x, 0));
++ return;
++
++ case PLUS:
++ avr32_print_value (f, XEXP (x, 0));
++ fprintf (f, "+");
++ avr32_print_value (f, XEXP (x, 1));
++ return;
++
++ case PC:
++ fprintf (f, "pc");
++ return;
++
++ default:
++ fprintf (f, "????");
++ return;
++ }
++}
++
++int
++is_minipool_label (rtx label)
++{
++ minipool_labels *cur_mp_label = cfun->machine->minipool_label_head;
++
++ if (GET_CODE (label) != CODE_LABEL)
++ return FALSE;
++
++ while (cur_mp_label)
++ {
++ if (CODE_LABEL_NUMBER (label)
++ == CODE_LABEL_NUMBER (cur_mp_label->label))
++ return TRUE;
++ cur_mp_label = cur_mp_label->next;
++ }
++ return FALSE;
++}
++
++static void
++new_minipool_label (rtx label)
++{
++ if (!cfun->machine->minipool_label_head)
++ {
++ cfun->machine->minipool_label_head =
++ ggc_alloc (sizeof (minipool_labels));
++ cfun->machine->minipool_label_tail = cfun->machine->minipool_label_head;
++ cfun->machine->minipool_label_head->label = label;
++ cfun->machine->minipool_label_head->next = 0;
++ cfun->machine->minipool_label_head->prev = 0;
++ }
++ else
++ {
++ cfun->machine->minipool_label_tail->next =
++ ggc_alloc (sizeof (minipool_labels));
++ cfun->machine->minipool_label_tail->next->label = label;
++ cfun->machine->minipool_label_tail->next->next = 0;
++ cfun->machine->minipool_label_tail->next->prev =
++ cfun->machine->minipool_label_tail;
++ cfun->machine->minipool_label_tail =
++ cfun->machine->minipool_label_tail->next;
++ }
++}
++
++/* Output the literal table */
++static void
++dump_minipool (rtx scan)
++{
++ Mnode *mp;
++ Mnode *nmp;
++
++ if (dump_file)
++ fprintf (dump_file,
++ ";; Emitting minipool after insn %u; address %ld; align %d (bytes)\n",
++ INSN_UID (scan), (unsigned long) minipool_barrier->address, 4);
++
++ scan = emit_insn_after (gen_consttable_start (), scan);
++ scan = emit_insn_after (gen_align_4 (), scan);
++ scan = emit_label_after (minipool_vector_label, scan);
++ new_minipool_label (minipool_vector_label);
++
++ for (mp = minipool_vector_head; mp != NULL; mp = nmp)
++ {
++ if (mp->refcount > 0)
++ {
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; Offset %u, min %ld, max %ld ",
++ (unsigned) mp->offset, (unsigned long) mp->min_address,
++ (unsigned long) mp->max_address);
++ avr32_print_value (dump_file, mp->value);
++ fputc ('\n', dump_file);
++ }
++
++ switch (mp->fix_size)
++ {
++#ifdef HAVE_consttable_4
++ case 4:
++ scan = emit_insn_after (gen_consttable_4 (mp->value), scan);
++ break;
++
++#endif
++#ifdef HAVE_consttable_8
++ case 8:
++ scan = emit_insn_after (gen_consttable_8 (mp->value), scan);
++ break;
++
++#endif
++ case 0:
++ /* This can happen for force-minipool entries which just are
++ there to force the minipool to be generate. */
++ break;
++ default:
++ abort ();
++ break;
++ }
++ }
++
++ nmp = mp->next;
++ free (mp);
++ }
++
++ minipool_vector_head = minipool_vector_tail = NULL;
++ scan = emit_insn_after (gen_consttable_end (), scan);
++ scan = emit_barrier_after (scan);
++}
++
++/* Return the cost of forcibly inserting a barrier after INSN. */
++static int
++avr32_barrier_cost (rtx insn)
++{
++ /* Basing the location of the pool on the loop depth is preferable, but at
++ the moment, the basic block information seems to be corrupt by this
++ stage of the compilation. */
++ int base_cost = 50;
++ rtx next = next_nonnote_insn (insn);
++
++ if (next != NULL && GET_CODE (next) == CODE_LABEL)
++ base_cost -= 20;
++
++ switch (GET_CODE (insn))
++ {
++ case CODE_LABEL:
++ /* It will always be better to place the table before the label, rather
++ than after it. */
++ return 50;
++
++ case INSN:
++ case CALL_INSN:
++ return base_cost;
++
++ case JUMP_INSN:
++ return base_cost - 10;
++
++ default:
++ return base_cost + 10;
++ }
++}
++
++/* Find the best place in the insn stream in the range
++ (FIX->address,MAX_ADDRESS) to forcibly insert a minipool barrier.
++ Create the barrier by inserting a jump and add a new fix entry for
++ it. */
++static Mfix *
++create_fix_barrier (Mfix * fix, HOST_WIDE_INT max_address)
++{
++ HOST_WIDE_INT count = 0;
++ rtx barrier;
++ rtx from = fix->insn;
++ rtx selected = from;
++ int selected_cost;
++ HOST_WIDE_INT selected_address;
++ Mfix *new_fix;
++ HOST_WIDE_INT max_count = max_address - fix->address;
++ rtx label = gen_label_rtx ();
++
++ selected_cost = avr32_barrier_cost (from);
++ selected_address = fix->address;
++
++ while (from && count < max_count)
++ {
++ rtx tmp;
++ int new_cost;
++
++ /* This code shouldn't have been called if there was a natural barrier
++ within range. */
++ if (GET_CODE (from) == BARRIER)
++ abort ();
++
++ /* Count the length of this insn. */
++ count += get_attr_length (from);
++
++ /* If there is a jump table, add its length. */
++ tmp = is_jump_table (from);
++ if (tmp != NULL)
++ {
++ count += get_jump_table_size (tmp);
++
++ /* Jump tables aren't in a basic block, so base the cost on the
++ dispatch insn. If we select this location, we will still put
++ the pool after the table. */
++ new_cost = avr32_barrier_cost (from);
++
++ if (count < max_count && new_cost <= selected_cost)
++ {
++ selected = tmp;
++ selected_cost = new_cost;
++ selected_address = fix->address + count;
++ }
++
++ /* Continue after the dispatch table. */
++ from = NEXT_INSN (tmp);
++ continue;
++ }
++
++ new_cost = avr32_barrier_cost (from);
++
++ if (count < max_count && new_cost <= selected_cost)
++ {
++ selected = from;
++ selected_cost = new_cost;
++ selected_address = fix->address + count;
++ }
++
++ from = NEXT_INSN (from);
++ }
++
++ /* Create a new JUMP_INSN that branches around a barrier. */
++ from = emit_jump_insn_after (gen_jump (label), selected);
++ JUMP_LABEL (from) = label;
++ barrier = emit_barrier_after (from);
++ emit_label_after (label, barrier);
++
++ /* Create a minipool barrier entry for the new barrier. */
++ new_fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (*new_fix));
++ new_fix->insn = barrier;
++ new_fix->address = selected_address;
++ new_fix->next = fix->next;
++ fix->next = new_fix;
++
++ return new_fix;
++}
++
++/* Record that there is a natural barrier in the insn stream at
++ ADDRESS. */
++static void
++push_minipool_barrier (rtx insn, HOST_WIDE_INT address)
++{
++ Mfix *fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (*fix));
++
++ fix->insn = insn;
++ fix->address = address;
++
++ fix->next = NULL;
++ if (minipool_fix_head != NULL)
++ minipool_fix_tail->next = fix;
++ else
++ minipool_fix_head = fix;
++
++ minipool_fix_tail = fix;
++}
++
++/* Record INSN, which will need fixing up to load a value from the
++ minipool. ADDRESS is the offset of the insn since the start of the
++ function; LOC is a pointer to the part of the insn which requires
++ fixing; VALUE is the constant that must be loaded, which is of type
++ MODE. */
++static void
++push_minipool_fix (rtx insn, HOST_WIDE_INT address, rtx * loc,
++ enum machine_mode mode, rtx value)
++{
++ Mfix *fix = (Mfix *) obstack_alloc (&minipool_obstack, sizeof (*fix));
++ rtx body = PATTERN (insn);
++
++ fix->insn = insn;
++ fix->address = address;
++ fix->loc = loc;
++ fix->mode = mode;
++ fix->fix_size = MINIPOOL_FIX_SIZE (mode, value);
++ fix->value = value;
++
++ if (GET_CODE (body) == PARALLEL)
++ {
++ /* Mcall : Ks16 << 2 */
++ fix->forwards = ((1 << 15) - 1) << 2;
++ fix->backwards = (1 << 15) << 2;
++ }
++ else if (GET_CODE (body) == SET
++ && GET_MODE_SIZE (GET_MODE (SET_DEST (body))) == 4)
++ {
++ /* Word Load */
++ if (TARGET_HARD_FLOAT
++ && GET_MODE_CLASS (GET_MODE (SET_DEST (body))) == MODE_FLOAT)
++ {
++ /* Ldc0.w : Ku12 << 2 */
++ fix->forwards = ((1 << 12) - 1) << 2;
++ fix->backwards = 0;
++ }
++ else
++ {
++ if (optimize_size)
++ {
++ /* Lddpc : Ku7 << 2 */
++ fix->forwards = ((1 << 7) - 1) << 2;
++ fix->backwards = 0;
++ }
++ else
++ {
++ /* Ld.w : Ks16 */
++ fix->forwards = ((1 << 15) - 4);
++ fix->backwards = (1 << 15);
++ }
++ }
++ }
++ else if (GET_CODE (body) == SET
++ && GET_MODE_SIZE (GET_MODE (SET_DEST (body))) == 8)
++ {
++ /* Double word load */
++ if (TARGET_HARD_FLOAT
++ && GET_MODE_CLASS (GET_MODE (SET_DEST (body))) == MODE_FLOAT)
++ {
++ /* Ldc0.d : Ku12 << 2 */
++ fix->forwards = ((1 << 12) - 1) << 2;
++ fix->backwards = 0;
++ }
++ else
++ {
++ /* Ld.d : Ks16 */
++ fix->forwards = ((1 << 15) - 4);
++ fix->backwards = (1 << 15);
++ }
++ }
++ else if (GET_CODE (body) == UNSPEC_VOLATILE
++ && XINT (body, 1) == VUNSPEC_MVRC)
++ {
++ /* Coprocessor load */
++ /* Ldc : Ku8 << 2 */
++ fix->forwards = ((1 << 8) - 1) << 2;
++ fix->backwards = 0;
++ }
++ else
++ {
++ /* Assume worst case which is lddpc insn. */
++ fix->forwards = ((1 << 7) - 1) << 2;
++ fix->backwards = 0;
++ }
++
++ fix->minipool = NULL;
++
++ /* If an insn doesn't have a range defined for it, then it isn't expecting
++ to be reworked by this code. Better to abort now than to generate duff
++ assembly code. */
++ if (fix->forwards == 0 && fix->backwards == 0)
++ abort ();
++
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; %smode fixup for i%d; addr %lu, range (%ld,%ld): ",
++ GET_MODE_NAME (mode),
++ INSN_UID (insn), (unsigned long) address,
++ -1 * (long) fix->backwards, (long) fix->forwards);
++ avr32_print_value (dump_file, fix->value);
++ fprintf (dump_file, "\n");
++ }
++
++ /* Add it to the chain of fixes. */
++ fix->next = NULL;
++
++ if (minipool_fix_head != NULL)
++ minipool_fix_tail->next = fix;
++ else
++ minipool_fix_head = fix;
++
++ minipool_fix_tail = fix;
++}
++
++/* Scan INSN and note any of its operands that need fixing.
++ If DO_PUSHES is false we do not actually push any of the fixups
++ needed. The function returns TRUE is any fixups were needed/pushed.
++ This is used by avr32_memory_load_p() which needs to know about loads
++ of constants that will be converted into minipool loads. */
++static bool
++note_invalid_constants (rtx insn, HOST_WIDE_INT address, int do_pushes)
++{
++ bool result = false;
++ int opno;
++
++ extract_insn (insn);
++
++ if (!constrain_operands (1))
++ fatal_insn_not_found (insn);
++
++ if (recog_data.n_alternatives == 0)
++ return false;
++
++ /* Fill in recog_op_alt with information about the constraints of this
++ insn. */
++ preprocess_constraints ();
++
++ for (opno = 0; opno < recog_data.n_operands; opno++)
++ {
++ rtx op;
++
++ /* Things we need to fix can only occur in inputs. */
++ if (recog_data.operand_type[opno] != OP_IN)
++ continue;
++
++ op = recog_data.operand[opno];
++
++ if (avr32_const_pool_ref_operand (op, GET_MODE (op)))
++ {
++ if (do_pushes)
++ {
++ rtx cop = avoid_constant_pool_reference (op);
++
++ /* Casting the address of something to a mode narrower than a
++ word can cause avoid_constant_pool_reference() to return the
++ pool reference itself. That's no good to us here. Lets
++ just hope that we can use the constant pool value directly.
++ */
++ if (op == cop)
++ cop = get_pool_constant (XEXP (op, 0));
++
++ push_minipool_fix (insn, address,
++ recog_data.operand_loc[opno],
++ recog_data.operand_mode[opno], cop);
++ }
++
++ result = true;
++ }
++ else if (TARGET_HAS_ASM_ADDR_PSEUDOS
++ && avr32_address_operand (op, GET_MODE (op)))
++ {
++ /* Handle pseudo instructions using a direct address. These pseudo
++ instructions might need entries in the constant pool and we must
++ therefor create a constant pool for them, in case the
++ assembler/linker needs to insert entries. */
++ if (do_pushes)
++ {
++ /* Push a dummy constant pool entry so that the .cpool
++ directive should be inserted on the appropriate place in the
++ code even if there are no real constant pool entries. This
++ is used by the assembler and linker to know where to put
++ generated constant pool entries. */
++ push_minipool_fix (insn, address,
++ recog_data.operand_loc[opno],
++ recog_data.operand_mode[opno],
++ gen_rtx_UNSPEC (VOIDmode,
++ gen_rtvec (1, const0_rtx),
++ UNSPEC_FORCE_MINIPOOL));
++ result = true;
++ }
++ }
++ }
++ return result;
++}
++
++
++static int
++avr32_insn_is_cast (rtx insn)
++{
++
++ if (NONJUMP_INSN_P (insn)
++ && GET_CODE (PATTERN (insn)) == SET
++ && (GET_CODE (SET_SRC (PATTERN (insn))) == ZERO_EXTEND
++ || GET_CODE (SET_SRC (PATTERN (insn))) == SIGN_EXTEND)
++ && REG_P (XEXP (SET_SRC (PATTERN (insn)), 0))
++ && REG_P (SET_DEST (PATTERN (insn))))
++ return true;
++ return false;
++}
++
++/* FIXME: The level of nesting in this function is way too deep. It needs to be
++ torn apart. */
++static void
++avr32_reorg_optimization (void)
++{
++ rtx first = get_insns ();
++ rtx insn;
++
++ if (TARGET_MD_REORG_OPTIMIZATION && (optimize_size || (optimize > 0)))
++ {
++
++ /* Scan through all insns looking for cast operations. */
++ if (dump_file)
++ {
++ fprintf (dump_file, ";; Deleting redundant cast operations:\n");
++ }
++ for (insn = first; insn; insn = NEXT_INSN (insn))
++ {
++ rtx reg, src_reg, scan;
++ enum machine_mode mode;
++ int unused_cast;
++ rtx label_ref;
++
++ if (avr32_insn_is_cast (insn)
++ && (GET_MODE (XEXP (SET_SRC (PATTERN (insn)), 0)) == QImode
++ || GET_MODE (XEXP (SET_SRC (PATTERN (insn)), 0)) == HImode))
++ {
++ mode = GET_MODE (XEXP (SET_SRC (PATTERN (insn)), 0));
++ reg = SET_DEST (PATTERN (insn));
++ src_reg = XEXP (SET_SRC (PATTERN (insn)), 0);
++ }
++ else
++ {
++ continue;
++ }
++
++ unused_cast = false;
++ label_ref = NULL_RTX;
++ for (scan = NEXT_INSN (insn); scan; scan = NEXT_INSN (scan))
++ {
++ /* Check if we have reached the destination of a simple
++ conditional jump which we have already scanned past. If so,
++ we can safely continue scanning. */
++ if (LABEL_P (scan) && label_ref != NULL_RTX)
++ {
++ if (CODE_LABEL_NUMBER (scan) ==
++ CODE_LABEL_NUMBER (XEXP (label_ref, 0)))
++ label_ref = NULL_RTX;
++ else
++ break;
++ }
++
++ if (!INSN_P (scan))
++ continue;
++
++ /* For conditional jumps we can manage to keep on scanning if
++ we meet the destination label later on before any new jump
++ insns occure. */
++ if (GET_CODE (scan) == JUMP_INSN)
++ {
++ if (any_condjump_p (scan) && label_ref == NULL_RTX)
++ label_ref = condjump_label (scan);
++ else
++ break;
++ }
++
++ if (!reg_mentioned_p (reg, PATTERN (scan)))
++ continue;
++
++ /* Check if casted register is used in this insn */
++ if ((regno_use_in (REGNO (reg), PATTERN (scan)) != NULL_RTX)
++ && (GET_MODE (regno_use_in (REGNO (reg), PATTERN (scan))) ==
++ GET_MODE (reg)))
++ {
++ /* If not used in the source to the set or in a memory
++ expression in the destiantion then the register is used
++ as a destination and is really dead. */
++ if (single_set (scan)
++ && GET_CODE (PATTERN (scan)) == SET
++ && REG_P (SET_DEST (PATTERN (scan)))
++ && !regno_use_in (REGNO (reg), SET_SRC (PATTERN (scan)))
++ && label_ref == NULL_RTX)
++ {
++ unused_cast = true;
++ }
++ break;
++ }
++
++ /* Check if register is dead or set in this insn */
++ if (dead_or_set_p (scan, reg))
++ {
++ unused_cast = true;
++ break;
++ }
++ }
++
++ /* Check if we have unresolved conditional jumps */
++ if (label_ref != NULL_RTX)
++ continue;
++
++ if (unused_cast)
++ {
++ if (REGNO (reg) == REGNO (XEXP (SET_SRC (PATTERN (insn)), 0)))
++ {
++ /* One operand cast, safe to delete */
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; INSN %i removed, casted register %i value not used.\n",
++ INSN_UID (insn), REGNO (reg));
++ }
++ SET_INSN_DELETED (insn);
++ /* Force the instruction to be recognized again */
++ INSN_CODE (insn) = -1;
++ }
++ else
++ {
++ /* Two operand cast, which really could be substituted with
++ a move, if the source register is dead after the cast
++ insn and then the insn which sets the source register
++ could instead directly set the destination register for
++ the cast. As long as there are no insns in between which
++ uses the register. */
++ rtx link = NULL_RTX;
++ rtx set;
++ rtx src_reg = XEXP (SET_SRC (PATTERN (insn)), 0);
++ unused_cast = false;
++
++ if (!find_reg_note (insn, REG_DEAD, src_reg))
++ continue;
++
++ /* Search for the insn which sets the source register */
++ for (link = LOG_LINKS (insn); link; link = XEXP (link, 1))
++ {
++ if (REG_NOTE_KIND (link) != 0)
++ continue;
++ set = single_set (XEXP (link, 0));
++ if (set && rtx_equal_p (src_reg, SET_DEST (set)))
++ {
++ link = XEXP (link, 0);
++ break;
++ }
++ }
++
++ /* Found no link or link is a call insn where we can not
++ change the destination register */
++ if (link == NULL_RTX || CALL_P (link))
++ continue;
++
++ /* Scan through all insn between link and insn */
++ for (scan = NEXT_INSN (link); scan; scan = NEXT_INSN (scan))
++ {
++ /* Don't try to trace forward past a CODE_LABEL if we
++ haven't seen INSN yet. Ordinarily, we will only
++ find the setting insn in LOG_LINKS if it is in the
++ same basic block. However, cross-jumping can insert
++ code labels in between the load and the call, and
++ can result in situations where a single call insn
++ may have two targets depending on where we came
++ from. */
++
++ if (GET_CODE (scan) == CODE_LABEL)
++ break;
++
++ if (!INSN_P (scan))
++ continue;
++
++ /* Don't try to trace forward past a JUMP. To optimize
++ safely, we would have to check that all the
++ instructions at the jump destination did not use REG.
++ */
++
++ if (GET_CODE (scan) == JUMP_INSN)
++ {
++ break;
++ }
++
++ if (!reg_mentioned_p (src_reg, PATTERN (scan)))
++ continue;
++
++ /* We have reached the cast insn */
++ if (scan == insn)
++ {
++ /* We can remove cast and replace the destination
++ register of the link insn with the destination
++ of the cast */
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; INSN %i removed, casted value unused. "
++ "Destination of removed cast operation: register %i, folded into INSN %i.\n",
++ INSN_UID (insn), REGNO (reg),
++ INSN_UID (link));
++ }
++ /* Update link insn */
++ SET_DEST (PATTERN (link)) =
++ gen_rtx_REG (mode, REGNO (reg));
++ /* Force the instruction to be recognized again */
++ INSN_CODE (link) = -1;
++
++ /* Delete insn */
++ SET_INSN_DELETED (insn);
++ /* Force the instruction to be recognized again */
++ INSN_CODE (insn) = -1;
++ break;
++ }
++ }
++ }
++ }
++ }
++ }
++
++ if (TARGET_MD_REORG_OPTIMIZATION && (optimize_size || (optimize > 0)))
++ {
++
++ /* Scan through all insns looking for shifted add operations */
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; Deleting redundant shifted add operations:\n");
++ }
++ for (insn = first; insn; insn = NEXT_INSN (insn))
++ {
++ rtx reg, mem_expr, scan, op0, op1;
++ int add_only_used_as_pointer;
++
++ if (INSN_P (insn)
++ && GET_CODE (PATTERN (insn)) == SET
++ && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
++ && (GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 0)) == MULT
++ || GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 0)) == ASHIFT)
++ && GET_CODE (XEXP (XEXP (SET_SRC (PATTERN (insn)), 0), 1)) ==
++ CONST_INT && REG_P (SET_DEST (PATTERN (insn)))
++ && REG_P (XEXP (SET_SRC (PATTERN (insn)), 1))
++ && REG_P (XEXP (XEXP (SET_SRC (PATTERN (insn)), 0), 0)))
++ {
++ reg = SET_DEST (PATTERN (insn));
++ mem_expr = SET_SRC (PATTERN (insn));
++ op0 = XEXP (XEXP (mem_expr, 0), 0);
++ op1 = XEXP (mem_expr, 1);
++ }
++ else
++ {
++ continue;
++ }
++
++ /* Scan forward the check if the result of the shifted add
++ operation is only used as an address in memory operations and
++ that the operands to the shifted add are not clobbered. */
++ add_only_used_as_pointer = false;
++ for (scan = NEXT_INSN (insn); scan; scan = NEXT_INSN (scan))
++ {
++ if (!INSN_P (scan))
++ continue;
++
++ /* Don't try to trace forward past a JUMP or CALL. To optimize
++ safely, we would have to check that all the instructions at
++ the jump destination did not use REG. */
++
++ if (GET_CODE (scan) == JUMP_INSN)
++ {
++ break;
++ }
++
++ /* If used in a call insn then we cannot optimize it away */
++ if (CALL_P (scan) && find_regno_fusage (scan, USE, REGNO (reg)))
++ break;
++
++ /* If any of the operands of the shifted add are clobbered we
++ cannot optimize the shifted adda away */
++ if ((reg_set_p (op0, scan) && (REGNO (op0) != REGNO (reg)))
++ || (reg_set_p (op1, scan) && (REGNO (op1) != REGNO (reg))))
++ break;
++
++ if (!reg_mentioned_p (reg, PATTERN (scan)))
++ continue;
++
++ /* If used any other place than as a pointer or as the
++ destination register we failed */
++ if (!(single_set (scan)
++ && GET_CODE (PATTERN (scan)) == SET
++ && ((MEM_P (SET_DEST (PATTERN (scan)))
++ && REG_P (XEXP (SET_DEST (PATTERN (scan)), 0))
++ && REGNO (XEXP (SET_DEST (PATTERN (scan)), 0)) ==
++ REGNO (reg)) || (MEM_P (SET_SRC (PATTERN (scan)))
++ &&
++ REG_P (XEXP
++ (SET_SRC (PATTERN (scan)),
++ 0))
++ &&
++ REGNO (XEXP
++ (SET_SRC (PATTERN (scan)),
++ 0)) == REGNO (reg))))
++ && !(GET_CODE (PATTERN (scan)) == SET
++ && REG_P (SET_DEST (PATTERN (scan)))
++ && !regno_use_in (REGNO (reg),
++ SET_SRC (PATTERN (scan)))))
++ break;
++
++ /* Check if register is dead or set in this insn */
++ if (dead_or_set_p (scan, reg))
++ {
++ add_only_used_as_pointer = true;
++ break;
++ }
++ }
++
++ if (add_only_used_as_pointer)
++ {
++ /* Lets delete the add insn and replace all memory references
++ which uses the pointer with the full expression. */
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; Deleting INSN %i since address expression can be folded into all "
++ "memory references using this expression\n",
++ INSN_UID (insn));
++ }
++ SET_INSN_DELETED (insn);
++ /* Force the instruction to be recognized again */
++ INSN_CODE (insn) = -1;
++
++ for (scan = NEXT_INSN (insn); scan; scan = NEXT_INSN (scan))
++ {
++ if (!INSN_P (scan))
++ continue;
++
++ if (!reg_mentioned_p (reg, PATTERN (scan)))
++ continue;
++
++ /* If used any other place than as a pointer or as the
++ destination register we failed */
++ if ((single_set (scan)
++ && GET_CODE (PATTERN (scan)) == SET
++ && ((MEM_P (SET_DEST (PATTERN (scan)))
++ && REG_P (XEXP (SET_DEST (PATTERN (scan)), 0))
++ && REGNO (XEXP (SET_DEST (PATTERN (scan)), 0)) ==
++ REGNO (reg)) || (MEM_P (SET_SRC (PATTERN (scan)))
++ &&
++ REG_P (XEXP
++ (SET_SRC (PATTERN (scan)),
++ 0))
++ &&
++ REGNO (XEXP
++ (SET_SRC (PATTERN (scan)),
++ 0)) == REGNO (reg)))))
++ {
++ if (dump_file)
++ {
++ fprintf (dump_file,
++ ";; Register %i replaced by indexed address in INSN %i\n",
++ REGNO (reg), INSN_UID (scan));
++ }
++ if (MEM_P (SET_DEST (PATTERN (scan))))
++ XEXP (SET_DEST (PATTERN (scan)), 0) = mem_expr;
++ else
++ XEXP (SET_SRC (PATTERN (scan)), 0) = mem_expr;
++ }
++
++ /* Check if register is dead or set in this insn */
++ if (dead_or_set_p (scan, reg))
++ {
++ break;
++ }
++
++ }
++ }
++ }
++ }
++}
++
++/* Exported to toplev.c.
++
++ Do a final pass over the function, just before delayed branch
++ scheduling. */
++
++static void
++avr32_reorg (void)
++{
++ rtx insn;
++ HOST_WIDE_INT address = 0;
++ Mfix *fix;
++
++ minipool_fix_head = minipool_fix_tail = NULL;
++
++ /* The first insn must always be a note, or the code below won't scan it
++ properly. */
++ insn = get_insns ();
++ if (GET_CODE (insn) != NOTE)
++ abort ();
++
++ /* Scan all the insns and record the operands that will need fixing. */
++ for (insn = next_nonnote_insn (insn); insn; insn = next_nonnote_insn (insn))
++ {
++ if (GET_CODE (insn) == BARRIER)
++ push_minipool_barrier (insn, address);
++ else if (INSN_P (insn))
++ {
++ rtx table;
++
++ note_invalid_constants (insn, address, true);
++ address += get_attr_length (insn);
++
++ /* If the insn is a vector jump, add the size of the table and skip
++ the table. */
++ if ((table = is_jump_table (insn)) != NULL)
++ {
++ address += get_jump_table_size (table);
++ insn = table;
++ }
++ }
++ }
++
++ fix = minipool_fix_head;
++
++ /* Now scan the fixups and perform the required changes. */
++ while (fix)
++ {
++ Mfix *ftmp;
++ Mfix *fdel;
++ Mfix *last_added_fix;
++ Mfix *last_barrier = NULL;
++ Mfix *this_fix;
++
++ /* Skip any further barriers before the next fix. */
++ while (fix && GET_CODE (fix->insn) == BARRIER)
++ fix = fix->next;
++
++ /* No more fixes. */
++ if (fix == NULL)
++ break;
++
++ last_added_fix = NULL;
++
++ for (ftmp = fix; ftmp; ftmp = ftmp->next)
++ {
++ if (GET_CODE (ftmp->insn) == BARRIER)
++ {
++ if (ftmp->address >= minipool_vector_head->max_address)
++ break;
++
++ last_barrier = ftmp;
++ }
++ else if ((ftmp->minipool = add_minipool_forward_ref (ftmp)) == NULL)
++ break;
++
++ last_added_fix = ftmp; /* Keep track of the last fix added.
++ */
++ }
++
++ /* If we found a barrier, drop back to that; any fixes that we could
++ have reached but come after the barrier will now go in the next
++ mini-pool. */
++ if (last_barrier != NULL)
++ {
++ /* Reduce the refcount for those fixes that won't go into this pool
++ after all. */
++ for (fdel = last_barrier->next;
++ fdel && fdel != ftmp; fdel = fdel->next)
++ {
++ fdel->minipool->refcount--;
++ fdel->minipool = NULL;
++ }
++
++ ftmp = last_barrier;
++ }
++ else
++ {
++ /* ftmp is first fix that we can't fit into this pool and there no
++ natural barriers that we could use. Insert a new barrier in the
++ code somewhere between the previous fix and this one, and
++ arrange to jump around it. */
++ HOST_WIDE_INT max_address;
++
++ /* The last item on the list of fixes must be a barrier, so we can
++ never run off the end of the list of fixes without last_barrier
++ being set. */
++ if (ftmp == NULL)
++ abort ();
++
++ max_address = minipool_vector_head->max_address;
++ /* Check that there isn't another fix that is in range that we
++ couldn't fit into this pool because the pool was already too
++ large: we need to put the pool before such an instruction. */
++ if (ftmp->address < max_address)
++ max_address = ftmp->address;
++
++ last_barrier = create_fix_barrier (last_added_fix, max_address);
++ }
++
++ assign_minipool_offsets (last_barrier);
++
++ while (ftmp)
++ {
++ if (GET_CODE (ftmp->insn) != BARRIER
++ && ((ftmp->minipool = add_minipool_backward_ref (ftmp))
++ == NULL))
++ break;
++
++ ftmp = ftmp->next;
++ }
++
++ /* Scan over the fixes we have identified for this pool, fixing them up
++ and adding the constants to the pool itself. */
++ for (this_fix = fix; this_fix && ftmp != this_fix;
++ this_fix = this_fix->next)
++ if (GET_CODE (this_fix->insn) != BARRIER
++ /* Do nothing for entries present just to force the insertion of
++ a minipool. */
++ && !IS_FORCE_MINIPOOL (this_fix->value))
++ {
++ rtx addr = plus_constant (gen_rtx_LABEL_REF (VOIDmode,
++ minipool_vector_label),
++ this_fix->minipool->offset);
++ *this_fix->loc = gen_rtx_MEM (this_fix->mode, addr);
++ }
++
++ dump_minipool (last_barrier->insn);
++ fix = ftmp;
++ }
++
++ /* Free the minipool memory. */
++ obstack_free (&minipool_obstack, minipool_startobj);
++
++ avr32_reorg_optimization ();
++}
++
++
++/*
++ Hook for doing some final scanning of instructions. Does nothing yet...*/
++void
++avr32_final_prescan_insn (rtx insn ATTRIBUTE_UNUSED,
++ rtx * opvec ATTRIBUTE_UNUSED,
++ int noperands ATTRIBUTE_UNUSED)
++{
++ return;
++}
++
++
++
++int
++avr32_expand_movcc (enum machine_mode mode, rtx operands[])
++{
++ rtx operator;
++ rtx compare_op0 = avr32_compare_op0;
++ rtx compare_op1 = avr32_compare_op1;
++
++ /* Only allow certain compare operations */
++ if (GET_MODE (compare_op0) != DImode
++ && GET_MODE (compare_op0) != SImode
++ && GET_MODE (compare_op0) != HImode && GET_MODE (compare_op0) != QImode)
++ return FALSE;
++
++ if (GET_CODE (compare_op0) == MEM)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (GET_MODE (compare_op0), compare_op0);
++ }
++
++ if (GET_CODE (compare_op1) == MEM)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (GET_MODE (compare_op1), compare_op1);
++ }
++
++ /* For DI, HI and QI mode force comparison operands to registers */
++ if (GET_MODE (compare_op0) == DImode
++ || GET_MODE (compare_op0) == HImode || GET_MODE (compare_op0) == QImode)
++ {
++ if (GET_CODE (compare_op0) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (GET_MODE (compare_op0), compare_op0);
++ }
++
++ if (GET_CODE (compare_op1) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (GET_MODE (compare_op0), compare_op1);
++ }
++ }
++
++ /* Force any immediate compare operands for SI, larger than the L
++ constraint, to a register */
++ if (GET_MODE (compare_op0) == SImode)
++ {
++ if ((GET_CODE (compare_op0) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (compare_op0), 'K',
++ "Ks21")))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (SImode, compare_op0);
++ }
++
++ if ((GET_CODE (compare_op1) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (compare_op1), 'K',
++ "Ks21")))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (SImode, compare_op1);
++ }
++ }
++
++ /* If we have immediates larger than can be allowed in conditional mov
++ instructions, force them to registers */
++ if (GET_CODE (operands[2]) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (operands[2]), 'K', "Ks08"))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[2] = force_reg (mode, operands[2]);
++ }
++
++ if (GET_CODE (operands[3]) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (operands[3]), 'K', "Ks08"))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[3] = force_reg (mode, operands[3]);
++ }
++
++ /* Emit the actual instruction */
++ operator = gen_rtx_EQ (VOIDmode, const0_rtx, const0_rtx);
++ PUT_CODE (operator, GET_CODE (operands[1]));
++ switch (mode)
++ {
++ case SImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_movsicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_movsicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_movsicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_movsicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ case HImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_movhicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_movhicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_movhicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_movhicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ case QImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_movqicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_movqicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_movqicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_movqicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ default:
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++
++int
++avr32_expand_addcc (enum machine_mode mode, rtx operands[])
++{
++ rtx operator;
++ rtx compare_op0 = avr32_compare_op0;
++ rtx compare_op1 = avr32_compare_op1;
++
++ /* Check if we have an add/sub with an k8 immediate */
++ if (!(GET_CODE (operands[3]) == CONST_INT
++ && avr32_const_ok_for_constraint_p (-INTVAL (operands[3]), 'K',
++ "Ks08")))
++ return FALSE;
++ else
++ /* Flip sign */
++ operands[3] = GEN_INT (-INTVAL (operands[3]));
++
++ /* Only allow certain compare operations */
++ if (GET_MODE (compare_op0) != DImode
++ && GET_MODE (compare_op0) != SImode
++ && GET_MODE (compare_op0) != HImode && GET_MODE (compare_op0) != QImode)
++ return FALSE;
++
++ if (GET_CODE (compare_op0) == MEM)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (GET_MODE (compare_op0), compare_op0);
++ }
++
++ if (GET_CODE (compare_op1) == MEM)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (GET_MODE (compare_op1), compare_op1);
++ }
++
++ /* For DI, HI and QI mode force comparison operands to registers */
++ if (GET_MODE (compare_op0) == DImode
++ || GET_MODE (compare_op0) == HImode || GET_MODE (compare_op0) == QImode)
++ {
++ if (GET_CODE (compare_op0) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (GET_MODE (compare_op0), compare_op0);
++ }
++
++ if (GET_CODE (compare_op1) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (GET_MODE (compare_op0), compare_op1);
++ }
++ }
++
++ /* Force any immediate compare operands for SI, larger than the L
++ constraint, to a register */
++ if (GET_MODE (compare_op0) == SImode)
++ {
++ if ((GET_CODE (compare_op0) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (compare_op0), 'K',
++ "Ks21")))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op0 = force_reg (SImode, compare_op0);
++ }
++
++ if ((GET_CODE (compare_op1) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (compare_op1), 'K',
++ "Ks21")))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ compare_op1 = force_reg (SImode, compare_op1);
++ }
++ }
++
++ /* If we have immediates larger than can be allowed in conditional mov
++ instructions, force them to registers */
++ if (GET_CODE (operands[2]) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (operands[2]), 'K', "Ks08"))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[2] = force_reg (mode, operands[2]);
++ }
++
++ if (GET_CODE (operands[3]) == CONST_INT
++ && !avr32_const_ok_for_constraint_p (INTVAL (operands[3]), 'K', "Ks08"))
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[3] = force_reg (mode, operands[3]);
++ }
++
++ if (GET_CODE (operands[0]) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[0] = force_reg (GET_MODE (operands[0]), operands[0]);
++ }
++
++ if (GET_CODE (operands[2]) != REG)
++ {
++ if (no_new_pseudos)
++ return FALSE;
++ else
++ operands[2] = force_reg (GET_MODE (operands[2]), operands[2]);
++ }
++
++ /* Check if operands[0] and operands[2] are different */
++ if (REGNO (operands[0]) != REGNO (operands[2]))
++ {
++ emit_move_insn (operands[0], operands[2]);
++ operands[2] = operands[0];
++ }
++
++ /* Emit the actual instruction */
++ operator = gen_rtx_EQ (VOIDmode, const0_rtx, const0_rtx);
++ PUT_CODE (operator, GET_CODE (operands[1]));
++ switch (mode)
++ {
++ case SImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_addsicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_addsicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_addsicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_addsicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ case HImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_addhicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_addhicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_addhicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_addhicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ case QImode:
++ switch (GET_MODE (compare_op0))
++ {
++ case SImode:
++ emit_insn (gen_addqicc_cmpsi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case DImode:
++ emit_insn (gen_addqicc_cmpdi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case HImode:
++ emit_insn (gen_addqicc_cmphi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ case QImode:
++ emit_insn (gen_addqicc_cmpqi
++ (operands[0], operator, operands[2], operands[3],
++ compare_op0, compare_op1));
++ break;
++ default:
++ return FALSE;
++ }
++ break;
++ default:
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++/* Function for changing the condition on the next instruction,
++ should be used when emmiting compare instructions and
++ the condition of the next instruction needs to change.
++*/
++int
++set_next_insn_cond (rtx cur_insn, rtx new_cond)
++{
++ rtx next_insn = next_nonnote_insn (cur_insn);
++ if ((next_insn != NULL_RTX)
++ && (INSN_P (next_insn))
++ && (GET_CODE (PATTERN (next_insn)) == SET)
++ && (GET_CODE (SET_SRC (PATTERN (next_insn))) == IF_THEN_ELSE))
++ {
++ /* Branch instructions */
++ XEXP (SET_SRC (PATTERN (next_insn)), 0) = new_cond;
++ /* Force the instruction to be recognized again */
++ INSN_CODE (next_insn) = -1;
++ return TRUE;
++ }
++ else if ((next_insn != NULL_RTX)
++ && (INSN_P (next_insn))
++ && (GET_CODE (PATTERN (next_insn)) == SET)
++ && comparison_operator (SET_SRC (PATTERN (next_insn)),
++ GET_MODE (SET_SRC (PATTERN (next_insn)))))
++ {
++ /* scc with no compare */
++ SET_SRC (PATTERN (next_insn)) = new_cond;
++ /* Force the instruction to be recognized again */
++ INSN_CODE (next_insn) = -1;
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++/* Function for obtaining the condition for the next instruction
++ after cur_insn.
++*/
++rtx
++get_next_insn_cond (rtx cur_insn)
++{
++ rtx next_insn = next_nonnote_insn (cur_insn);
++ rtx cond = NULL_RTX;
++ if ((next_insn != NULL_RTX)
++ && (INSN_P (next_insn))
++ && (GET_CODE (PATTERN (next_insn)) == SET)
++ && (GET_CODE (SET_SRC (PATTERN (next_insn))) == IF_THEN_ELSE))
++ {
++ /* Branch instructions */
++ cond = XEXP (SET_SRC (PATTERN (next_insn)), 0);
++ }
++ else if ((next_insn != NULL_RTX)
++ && (INSN_P (next_insn))
++ && (GET_CODE (PATTERN (next_insn)) == SET)
++ && comparison_operator (SET_SRC (PATTERN (next_insn)),
++ GET_MODE (SET_SRC (PATTERN (next_insn)))))
++ {
++ /* scc with no compare */
++ cond = SET_SRC (PATTERN (next_insn));
++ }
++
++ return cond;
++}
++
++int
++avr32_expand_scc (enum rtx_code cond, rtx * operands)
++{
++
++ rtx comparation;
++ /* Only allow certain compare operations */
++ if (GET_MODE (avr32_compare_op0) != DImode
++ && GET_MODE (avr32_compare_op0) != SImode
++ && GET_MODE (avr32_compare_op0) != HImode
++ && GET_MODE (avr32_compare_op0) != QImode)
++ return FALSE;
++
++ /* Delete compare instruction as it is merged into this instruction */
++ remove_insn (get_last_insn_anywhere ());
++
++ if (!REG_P (avr32_compare_op0))
++ avr32_compare_op0 =
++ force_reg (GET_MODE (avr32_compare_op0), avr32_compare_op0);
++
++ if (GET_MODE (avr32_compare_op0) != SImode && !REG_P (avr32_compare_op1))
++ {
++ avr32_compare_op1 =
++ force_reg (GET_MODE (avr32_compare_op0), avr32_compare_op1);
++ }
++ else if (GET_MODE (avr32_compare_op0) == SImode
++ && !REG_P (avr32_compare_op1)
++ && (GET_CODE (avr32_compare_op1) != CONST_INT
++ || (GET_CODE (avr32_compare_op1) == CONST_INT
++ &&
++ !avr32_const_ok_for_constraint_p (INTVAL
++ (avr32_compare_op1), 'K',
++ "Ks21"))))
++ avr32_compare_op1 =
++ force_reg (GET_MODE (avr32_compare_op0), avr32_compare_op1);
++
++
++ comparation =
++ gen_rtx_EQ (SImode,
++ gen_rtx_COMPARE (GET_MODE (avr32_compare_op0),
++ avr32_compare_op0, avr32_compare_op1),
++ const0_rtx);
++ /* Set correct condition */
++ PUT_CODE (comparation, cond);
++ emit_insn (gen_rtx_SET (VOIDmode, operands[0], comparation));
++ return TRUE;
++}
++
++rtx
++avr32_output_cmp (rtx cond, enum machine_mode mode, rtx op0, rtx op1)
++{
++
++ rtx new_cond = NULL_RTX;
++ rtx ops[2];
++ rtx compare_pattern;
++ ops[0] = op0;
++ ops[1] = op1;
++
++ compare_pattern = gen_rtx_COMPARE (mode, op0, op1);
++
++ new_cond = is_compare_redundant (compare_pattern, cond);
++
++ if (new_cond != NULL_RTX)
++ return new_cond;
++
++ /* Insert compare */
++ switch (mode)
++ {
++ case QImode:
++ output_asm_insn ("cp.b\t%0, %1", ops);
++ break;
++ case HImode:
++ output_asm_insn ("cp.h\t%0, %1", ops);
++ break;
++ case SImode:
++ output_asm_insn ("cp.w\t%0, %1", ops);
++ break;
++ case DImode:
++ if (rtx_equal_p (op1, const0_rtx))
++ output_asm_insn ("cp.w\t%0, %1\ncpc\t%m0", ops);
++ else
++ output_asm_insn ("cp.w\t%0, %1\ncpc\t%m0, %m1", ops);
++ break;
++ default:
++ internal_error ("Unknown comparison mode");
++ break;
++ }
++
++ return cond;
++}
++
++int
++avr32_load_multiple_operation (rtx op,
++ enum machine_mode mode ATTRIBUTE_UNUSED)
++{
++ int count = XVECLEN (op, 0);
++ unsigned int dest_regno;
++ rtx src_addr;
++ rtx elt;
++ int i = 1, base = 0;
++
++ if (count <= 1 || GET_CODE (XVECEXP (op, 0, 0)) != SET)
++ return 0;
++
++ /* Check to see if this might be a write-back. */
++ if (GET_CODE (SET_SRC (elt = XVECEXP (op, 0, 0))) == PLUS)
++ {
++ i++;
++ base = 1;
++
++ /* Now check it more carefully. */
++ if (GET_CODE (SET_DEST (elt)) != REG
++ || GET_CODE (XEXP (SET_SRC (elt), 0)) != REG
++ || GET_CODE (XEXP (SET_SRC (elt), 1)) != CONST_INT
++ || INTVAL (XEXP (SET_SRC (elt), 1)) != (count - 1) * 4)
++ return 0;
++ }
++
++ /* Perform a quick check so we don't blow up below. */
++ if (count <= 1
++ || GET_CODE (XVECEXP (op, 0, i - 1)) != SET
++ || GET_CODE (SET_DEST (XVECEXP (op, 0, i - 1))) != REG
++ || GET_CODE (SET_SRC (XVECEXP (op, 0, i - 1))) != UNSPEC)
++ return 0;
++
++ dest_regno = REGNO (SET_DEST (XVECEXP (op, 0, i - 1)));
++ src_addr = XEXP (SET_SRC (XVECEXP (op, 0, i - 1)), 0);
++
++ for (; i < count; i++)
++ {
++ elt = XVECEXP (op, 0, i);
++
++ if (GET_CODE (elt) != SET
++ || GET_CODE (SET_DEST (elt)) != REG
++ || GET_MODE (SET_DEST (elt)) != SImode
++ || GET_CODE (SET_SRC (elt)) != UNSPEC)
++ return 0;
++ }
++
++ return 1;
++}
++
++int
++avr32_store_multiple_operation (rtx op,
++ enum machine_mode mode ATTRIBUTE_UNUSED)
++{
++ int count = XVECLEN (op, 0);
++ int src_regno;
++ rtx dest_addr;
++ rtx elt;
++ int i = 1;
++
++ if (count <= 1 || GET_CODE (XVECEXP (op, 0, 0)) != SET)
++ return 0;
++
++ /* Perform a quick check so we don't blow up below. */
++ if (count <= i
++ || GET_CODE (XVECEXP (op, 0, i - 1)) != SET
++ || GET_CODE (SET_DEST (XVECEXP (op, 0, i - 1))) != MEM
++ || GET_CODE (SET_SRC (XVECEXP (op, 0, i - 1))) != UNSPEC)
++ return 0;
++
++ src_regno = REGNO (SET_SRC (XVECEXP (op, 0, i - 1)));
++ dest_addr = XEXP (SET_DEST (XVECEXP (op, 0, i - 1)), 0);
++
++ for (; i < count; i++)
++ {
++ elt = XVECEXP (op, 0, i);
++
++ if (GET_CODE (elt) != SET
++ || GET_CODE (SET_DEST (elt)) != MEM
++ || GET_MODE (SET_DEST (elt)) != SImode
++ || GET_CODE (SET_SRC (elt)) != UNSPEC)
++ return 0;
++ }
++
++ return 1;
++}
++
++int
++avr32_valid_macmac_bypass (rtx insn_out, rtx insn_in)
++{
++ /* Check if they use the same accumulator */
++ if (rtx_equal_p
++ (SET_DEST (PATTERN (insn_out)), SET_DEST (PATTERN (insn_in))))
++ {
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++int
++avr32_valid_mulmac_bypass (rtx insn_out, rtx insn_in)
++{
++ /*
++ Check if the mul instruction produces the accumulator for the mac
++ instruction. */
++ if (rtx_equal_p
++ (SET_DEST (PATTERN (insn_out)), SET_DEST (PATTERN (insn_in))))
++ {
++ return TRUE;
++ }
++ return FALSE;
++}
++
++int
++avr32_store_bypass (rtx insn_out, rtx insn_in)
++{
++ /* Only valid bypass if the output result is used as an src in the store
++ instruction, NOT if used as a pointer or base. */
++ if (rtx_equal_p
++ (SET_DEST (PATTERN (insn_out)), SET_SRC (PATTERN (insn_in))))
++ {
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++int
++avr32_mul_waw_bypass (rtx insn_out, rtx insn_in)
++{
++ /* Check if the register holding the result from the mul instruction is
++ used as a result register in the input instruction. */
++ if (rtx_equal_p
++ (SET_DEST (PATTERN (insn_out)), SET_DEST (PATTERN (insn_in))))
++ {
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++int
++avr32_valid_load_double_bypass (rtx insn_out, rtx insn_in)
++{
++ /* Check if the first loaded word in insn_out is used in insn_in. */
++ rtx dst_reg;
++ rtx second_loaded_reg;
++
++ /* If this is a double alu operation then the bypass is not valid */
++ if ((get_attr_type (insn_in) == TYPE_ALU
++ || get_attr_type (insn_in) == TYPE_ALU2)
++ && (GET_MODE_SIZE (GET_MODE (SET_DEST (PATTERN (insn_out)))) > 4))
++ return FALSE;
++
++ /* Get the destination register in the load */
++ if (!REG_P (SET_DEST (PATTERN (insn_out))))
++ return FALSE;
++
++ dst_reg = SET_DEST (PATTERN (insn_out));
++ second_loaded_reg = gen_rtx_REG (SImode, REGNO (dst_reg) + 1);
++
++ if (!reg_mentioned_p (second_loaded_reg, PATTERN (insn_in)))
++ return TRUE;
++
++ return FALSE;
++}
++
++
++int
++avr32_valid_load_quad_bypass (rtx insn_out, rtx insn_in)
++{
++ /*
++ Check if the two first loaded word in insn_out are used in insn_in. */
++ rtx dst_reg;
++ rtx third_loaded_reg, fourth_loaded_reg;
++
++ /* Get the destination register in the load */
++ if (!REG_P (SET_DEST (PATTERN (insn_out))))
++ return FALSE;
++
++ dst_reg = SET_DEST (PATTERN (insn_out));
++ third_loaded_reg = gen_rtx_REG (SImode, REGNO (dst_reg) + 2);
++ fourth_loaded_reg = gen_rtx_REG (SImode, REGNO (dst_reg) + 3);
++
++ if (!reg_mentioned_p (third_loaded_reg, PATTERN (insn_in))
++ && !reg_mentioned_p (fourth_loaded_reg, PATTERN (insn_in)))
++ {
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++int
++avr32_sched_use_dfa_pipeline_interface (void)
++{
++ /* No need to scedule on avr32_uc architecture. */
++ return (avr32_arch->arch_type != ARCH_TYPE_AVR32_UC);
++}
++
++void
++avr32_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED,
++ rtx x ATTRIBUTE_UNUSED,
++ unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED)
++{
++ /* Let ASM_OUTPUT_POOL_PROLOGUE take care of this */
++}
++
++/* Set up library functions to comply to AVR32 ABI */
++
++static void
++avr32_init_libfuncs (void)
++{
++ /* Convert gcc run-time function names to AVR32 ABI names */
++
++ /* Double-precision floating-point arithmetic. */
++ set_optab_libfunc (add_optab, DFmode, "__avr32_f64_add");
++ set_optab_libfunc (sdiv_optab, DFmode, "__avr32_f64_div");
++ set_optab_libfunc (smul_optab, DFmode, "__avr32_f64_mul");
++ set_optab_libfunc (neg_optab, DFmode, NULL);
++ set_optab_libfunc (sub_optab, DFmode, "__avr32_f64_sub");
++
++ /* Double-precision comparisons. */
++ set_optab_libfunc (eq_optab, DFmode, "__avr32_f64_cmp_eq");
++ set_optab_libfunc (ne_optab, DFmode, NULL);
++ set_optab_libfunc (lt_optab, DFmode, "__avr32_f64_cmp_lt");
++ set_optab_libfunc (le_optab, DFmode, NULL);
++ set_optab_libfunc (ge_optab, DFmode, "__avr32_f64_cmp_ge");
++ set_optab_libfunc (gt_optab, DFmode, NULL);
++
++ /* Single-precision floating-point arithmetic. */
++ set_optab_libfunc (add_optab, SFmode, "__avr32_f32_add");
++ set_optab_libfunc (sdiv_optab, SFmode, "__avr32_f32_div");
++ set_optab_libfunc (smul_optab, SFmode, "__avr32_f32_mul");
++ set_optab_libfunc (neg_optab, SFmode, NULL);
++ set_optab_libfunc (sub_optab, SFmode, "__avr32_f32_sub");
++
++ /* Single-precision comparisons. */
++ set_optab_libfunc (eq_optab, SFmode, "__avr32_f32_cmp_eq");
++ set_optab_libfunc (ne_optab, SFmode, NULL);
++ set_optab_libfunc (lt_optab, SFmode, "__avr32_f32_cmp_lt");
++ set_optab_libfunc (le_optab, SFmode, NULL);
++ set_optab_libfunc (ge_optab, SFmode, "__avr32_f32_cmp_ge");
++ set_optab_libfunc (gt_optab, SFmode, NULL);
++
++ /* Floating-point to integer conversions. */
++ set_conv_libfunc (sfix_optab, SImode, DFmode, "__avr32_f64_to_s32");
++ set_conv_libfunc (ufix_optab, SImode, DFmode, "__avr32_f64_to_u32");
++ set_conv_libfunc (sfix_optab, DImode, DFmode, "__avr32_f64_to_s64");
++ set_conv_libfunc (ufix_optab, DImode, DFmode, "__avr32_f64_to_u64");
++ set_conv_libfunc (sfix_optab, SImode, SFmode, "__avr32_f32_to_s32");
++ set_conv_libfunc (ufix_optab, SImode, SFmode, "__avr32_f32_to_u32");
++ set_conv_libfunc (sfix_optab, DImode, SFmode, "__avr32_f32_to_s64");
++ set_conv_libfunc (ufix_optab, DImode, SFmode, "__avr32_f32_to_u64");
++
++ /* Conversions between floating types. */
++ set_conv_libfunc (trunc_optab, SFmode, DFmode, "__avr32_f64_to_f32");
++ set_conv_libfunc (sext_optab, DFmode, SFmode, "__avr32_f32_to_f64");
++
++ /* Integer to floating-point conversions. Table 8. */
++ set_conv_libfunc (sfloat_optab, DFmode, SImode, "__avr32_s32_to_f64");
++ set_conv_libfunc (sfloat_optab, DFmode, DImode, "__avr32_s64_to_f64");
++ set_conv_libfunc (sfloat_optab, SFmode, SImode, "__avr32_s32_to_f32");
++ set_conv_libfunc (sfloat_optab, SFmode, DImode, "__avr32_s64_to_f32");
++ set_conv_libfunc (ufloat_optab, DFmode, SImode, "__avr32_u32_to_f64");
++ set_conv_libfunc (ufloat_optab, SFmode, SImode, "__avr32_u32_to_f32");
++ /* TODO: Add these to gcc library functions */
++
++ set_conv_libfunc (ufloat_optab, DFmode, DImode, NULL);
++ set_conv_libfunc (ufloat_optab, SFmode, DImode, NULL);
++
++ /* Long long. Table 9. */
++ set_optab_libfunc (smul_optab, DImode, "__avr32_mul64");
++ set_optab_libfunc (sdiv_optab, DImode, "__avr32_sdiv64");
++ set_optab_libfunc (udiv_optab, DImode, "__avr32_udiv64");
++ set_optab_libfunc (smod_optab, DImode, "__avr32_smod64");
++ set_optab_libfunc (umod_optab, DImode, "__avr32_umod64");
++ set_optab_libfunc (ashl_optab, DImode, "__avr32_lsl64");
++ set_optab_libfunc (lshr_optab, DImode, "__avr32_lsr64");
++ set_optab_libfunc (ashr_optab, DImode, "__avr32_asr64");
++}
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32-elf.h gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-elf.h
+--- gcc-4.0.2/gcc/config/avr32/avr32-elf.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-elf.h 2006-11-17 10:38:10.000000000 +0100
+@@ -0,0 +1,82 @@
++/*
++ Elf specific definitions.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++
++/*****************************************************************************
++ * Controlling the Compilator Driver, 'gcc'
++ *****************************************************************************/
++
++/* Run-time Target Specification. */
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (AVR32 GNU with ELF)", stderr);
++
++/*
++Another C string constant used much like LINK_SPEC. The
++difference between the two is that STARTFILE_SPEC is used at
++the very beginning of the command given to the linker.
++
++If this macro is not defined, a default is provided that loads the
++standard C startup file from the usual place. See gcc.c.
++*/
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s"
++
++#undef LINK_SPEC
++#define LINK_SPEC "%{muse-oscall:--defsym __do_not_use_oscall_coproc__=0} %{mrelax|O*:%{mno-relax|O0|O1: ;:--relax}} %{mpart=*:-mavr32elf_%*} %{mcpu=*:-mavr32elf_%*}"
++
++
++/*
++Another C string constant used much like LINK_SPEC. The
++difference between the two is that ENDFILE_SPEC is used at
++the very end of the command given to the linker.
++
++Do not define this macro if it does not need to do anything.
++*/
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC "crtend%O%s crtn%O%s"
++
++
++/* Target CPU builtins. */
++#define TARGET_CPU_CPP_BUILTINS() \
++ do \
++ { \
++ builtin_define ("__avr32__"); \
++ builtin_define ("__AVR32__"); \
++ builtin_define ("__AVR32_ELF__"); \
++ builtin_define (avr32_part->macro); \
++ builtin_define (avr32_arch->macro); \
++ if (avr32_arch->uarch_type == UARCH_TYPE_AVR32A) \
++ builtin_define ("__AVR32_AVR32A__"); \
++ else \
++ builtin_define ("__AVR32_AVR32B__"); \
++ if (TARGET_UNALIGNED_WORD) \
++ builtin_define ("__AVR32_HAS_UNALIGNED_WORD__"); \
++ if (TARGET_SIMD) \
++ builtin_define ("__AVR32_HAS_SIMD__"); \
++ if (TARGET_DSP) \
++ builtin_define ("__AVR32_HAS_DSP__"); \
++ if (TARGET_RMW) \
++ builtin_define ("__AVR32_HAS_RMW__"); \
++ if (TARGET_BRANCH_PRED) \
++ builtin_define ("__AVR32_HAS_BRANCH_PRED__"); \
++ } \
++ while (0)
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32.h gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.h
+--- gcc-4.0.2/gcc/config/avr32/avr32.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.h 2006-11-10 15:14:06.000000000 +0100
+@@ -0,0 +1,3374 @@
++/*
++ Definitions of target machine for AVR32.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++ Initial porting by Anders Ådland.
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#ifndef GCC_AVR32_H
++#define GCC_AVR32_H
++
++
++#ifndef OBJECT_FORMAT_ELF
++#error avr32.h included before elfos.h
++#endif
++
++#ifndef LOCAL_LABEL_PREFIX
++#define LOCAL_LABEL_PREFIX "."
++#endif
++
++#ifndef SUBTARGET_CPP_SPEC
++#define SUBTARGET_CPP_SPEC "-D__ELF__"
++#endif
++
++
++extern struct rtx_def *avr32_compare_op0;
++extern struct rtx_def *avr32_compare_op1;
++
++
++extern struct rtx_def *avr32_acc_cache;
++
++/* cache instruction op5 codes */
++#define AVR32_CACHE_INVALIDATE_ICACHE 1
++
++/* These bits describe the different types of function supported
++ by the AVR32 backend. They are exclusive. ie a function cannot be both a
++ normal function and an interworked function, for example. Knowing the
++ type of a function is important for determining its prologue and
++ epilogue sequences.
++ Note value 7 is currently unassigned. Also note that the interrupt
++ function types all have bit 2 set, so that they can be tested for easily.
++ Note that 0 is deliberately chosen for AVR32_FT_UNKNOWN so that when the
++ machine_function structure is initialized (to zero) func_type will
++ default to unknown. This will force the first use of avr32_current_func_type
++ to call avr32_compute_func_type. */
++#define AVR32_FT_UNKNOWN 0 /* Type has not yet been determined.
++ */
++#define AVR32_FT_NORMAL 1 /* Your normal, straightforward
++ function. */
++#define AVR32_FT_ACALL 2 /* An acall function. */
++#define AVR32_FT_EXCEPTION_HANDLER 3 /* A C++ exception handler. */
++#define AVR32_FT_ISR_FULL 4 /* A fully shadowed interrupt mode. */
++#define AVR32_FT_ISR_HALF 5 /* A half shadowed interrupt mode. */
++#define AVR32_FT_ISR_NONE 6 /* No shadow registers. */
++
++#define AVR32_FT_TYPE_MASK ((1 << 3) - 1)
++
++/* In addition functions can have several type modifiers,
++ outlined by these bit masks: */
++#define AVR32_FT_INTERRUPT (1 << 2) /* Note overlap with FT_ISR
++ and above. */
++#define AVR32_FT_NAKED (1 << 3) /* No prologue or epilogue. */
++#define AVR32_FT_VOLATILE (1 << 4) /* Does not return. */
++#define AVR32_FT_NESTED (1 << 5) /* Embedded inside another
++ func. */
++
++/* Some macros to test these flags. */
++#define AVR32_FUNC_TYPE(t) (t & AVR32_FT_TYPE_MASK)
++#define IS_INTERRUPT(t) (t & AVR32_FT_INTERRUPT)
++#define IS_VOLATILE(t) (t & AVR32_FT_VOLATILE)
++#define IS_NAKED(t) (t & AVR32_FT_NAKED)
++#define IS_NESTED(t) (t & AVR32_FT_NESTED)
++
++
++typedef struct minipool_labels
++GTY ((chain_next ("%h.next"), chain_prev ("%h.prev")))
++{
++ rtx label;
++ struct minipool_labels *prev;
++ struct minipool_labels *next;
++} minipool_labels;
++
++/* A C structure for machine-specific, per-function data.
++ This is added to the cfun structure. */
++
++typedef struct machine_function
++GTY (())
++{
++ /* Records the type of the current function. */
++ unsigned long func_type;
++ /* List of minipool labels, use for checking if code label is valid in a
++ memory expression */
++ minipool_labels *minipool_label_head;
++ minipool_labels *minipool_label_tail;
++} machine_function;
++
++/* Initialize data used by insn expanders. This is called from insn_emit,
++ once for every function before code is generated. */
++#define INIT_EXPANDERS avr32_init_expanders ()
++
++/******************************************************************************
++ * SPECS
++ *****************************************************************************/
++
++#ifndef ASM_SPEC
++#define ASM_SPEC "%{fpic:--pic} %{mrelax|O*:%{mno-relax|O0|O1: ;:--linkrelax}} %{march=*:-march=%*} %{mpart=*:-mpart=%*}"
++#endif
++
++#ifndef MULTILIB_DEFAULTS
++#define MULTILIB_DEFAULTS { "march=ap" }
++#endif
++
++
++/******************************************************************************
++ * Run-time Target Specification
++ *****************************************************************************/
++extern int target_flags;
++
++/* Part types. Keep this in sync with the order of avr32_part_types in avr32.c*/
++enum part_type
++{
++ PART_TYPE_AVR32_NONE,
++ PART_TYPE_AVR32_AP7000,
++ PART_TYPE_AVR32_AP7010,
++ PART_TYPE_AVR32_AP7020,
++ PART_TYPE_AVR32_UC3A0256,
++ PART_TYPE_AVR32_UC3A0512,
++ PART_TYPE_AVR32_UC3A1128,
++ PART_TYPE_AVR32_UC3A1256,
++ PART_TYPE_AVR32_UC3A1512
++};
++
++/* Microarchitectures. */
++enum microarchitecture_type
++{
++ UARCH_TYPE_AVR32A,
++ UARCH_TYPE_AVR32B
++};
++
++/* Architectures types which specifies the pipeline.
++ Keep this in sync with avr32_arch_types in avr32.c*/
++enum architecture_type
++{
++ ARCH_TYPE_AVR32_AP,
++ ARCH_TYPE_AVR32_UC
++};
++
++/* Flag specifying if the cpu has support for DSP instructions.*/
++#define FLAG_AVR32_HAS_DSP (1 << 0)
++/* Flag specifying if the cpu has support for Read-Modify-Write
++ instructions.*/
++#define FLAG_AVR32_HAS_RMW (1 << 1)
++/* Flag specifying if the cpu has support for SIMD instructions. */
++#define FLAG_AVR32_HAS_SIMD (1 << 2)
++/* Flag specifying if the cpu has support for unaligned memory word access. */
++#define FLAG_AVR32_HAS_UNALIGNED_WORD (1 << 3)
++/* Flag specifying if the cpu has support for branch prediction. */
++#define FLAG_AVR32_HAS_BRANCH_PRED (1 << 4)
++
++/* Structure for holding information about different avr32 CPUs/parts */
++struct part_type_s
++{
++ const char *const name;
++ enum part_type part_type;
++ enum architecture_type arch_type;
++ /* Must lie outside user's namespace. NULL == no macro. */
++ const char *const macro;
++};
++
++/* Structure for holding information about different avr32 pipeline
++ architectures. */
++struct arch_type_s
++{
++ const char *const name;
++ enum architecture_type arch_type;
++ enum microarchitecture_type uarch_type;
++ const unsigned long feature_flags;
++ /* Must lie outside user's namespace. NULL == no macro. */
++ const char *const macro;
++};
++
++extern const struct part_type_s *avr32_part;
++extern const struct arch_type_s *avr32_arch;
++
++#define USE_RODATA_SECTION (1 << 0)
++#define AVR32_FLAG_HARD_FLOAT (1 << 1)
++#define AVR32_FLAG_FORCE_DOUBLE_ALIGN (1 << 2)
++#define AVR32_FLAG_RELAX (1 << 4)
++#define AVR32_FLAG_NO_INIT_GOT (1 << 5)
++#define AVR32_FLAG_NO_REORG_OPT (1 << 6)
++#define AVR32_FLAG_NO_ASM_ADDR_PSEUDOS (1 << 7)
++#define AVR32_FLAG_NO_PIC (1 << 8)
++
++#define TARGET_HARD_FLOAT (target_flags & AVR32_FLAG_HARD_FLOAT)
++#define TARGET_SOFT_FLOAT (!TARGET_HARD_FLOAT)
++#define TARGET_FORCE_DOUBLE_ALIGN (target_flags & AVR32_FLAG_FORCE_DOUBLE_ALIGN)
++#define TARGET_RELAX (target_flags & AVR32_FLAG_RELAX)
++#define TARGET_NO_INIT_GOT (target_flags & AVR32_FLAG_NO_INIT_GOT)
++#define TARGET_MD_REORG_OPTIMIZATION (!(target_flags & AVR32_FLAG_NO_REORG_OPT))
++#define TARGET_HAS_ASM_ADDR_PSEUDOS (!(target_flags & AVR32_FLAG_NO_ASM_ADDR_PSEUDOS))
++
++#define TARGET_SIMD (avr32_arch->feature_flags & FLAG_AVR32_HAS_SIMD)
++#define TARGET_DSP (avr32_arch->feature_flags & FLAG_AVR32_HAS_DSP)
++#define TARGET_RMW (avr32_arch->feature_flags & FLAG_AVR32_HAS_RMW)
++#define TARGET_UNALIGNED_WORD (avr32_arch->feature_flags & FLAG_AVR32_HAS_UNALIGNED_WORD)
++#define TARGET_BRANCH_PRED (avr32_arch->feature_flags & FLAG_AVR32_HAS_BRANCH_PRED)
++
++
++#define TARGET_SWITCHES { \
++ { "use-rodata-section", USE_RODATA_SECTION, \
++ N_("Do not put readonly-data in .text section, but in .rodata.") }, \
++ { "hard-float", AVR32_FLAG_HARD_FLOAT, \
++ N_("Use floating point coprocessor instructions.") }, \
++ { "soft-float", -AVR32_FLAG_HARD_FLOAT, \
++ N_("Use software floating-point library for floating-point operations.") }, \
++ { "force-double-align", AVR32_FLAG_FORCE_DOUBLE_ALIGN, \
++ N_("Force double-word alignment for double-word memory accesses.") }, \
++ { "no-init-got", AVR32_FLAG_NO_INIT_GOT, \
++ N_("Do not initialize GOT register before using it when compiling PIC code.") }, \
++ { "relax", AVR32_FLAG_RELAX, \
++ N_("Let invoked assembler and linker do relaxing (Enabled by default when optimization level is >1).") }, \
++ { "no-relax", -AVR32_FLAG_RELAX, \
++ N_("Don't let invoked assembler and linker do relaxing.") }, \
++ { "no-reorg-opt", AVR32_FLAG_NO_REORG_OPT, \
++ N_("Do not perform machine dependent optimizations in reorg stage.") }, \
++ { "asm-addr-pseudos", -AVR32_FLAG_NO_ASM_ADDR_PSEUDOS, \
++ N_("Use assembler pseudo-instructions lda.w and call for handling direct addresses. (Enabled by default)") }, \
++ { "no-asm-addr-pseudos", AVR32_FLAG_NO_ASM_ADDR_PSEUDOS, \
++ N_("Do not use assembler pseudo-instructions lda.w and call for handling direct addresses.") }, \
++ { "no-pic", AVR32_FLAG_NO_PIC, \
++ N_("Do not emit position-independent code (will break dynamic linking.)") }, \
++ { "", 0, NULL } \
++}
++
++
++extern const char *avr32_part_name;
++extern const char *avr32_arch_name;
++
++#define TARGET_OPTIONS { \
++ { "part=", &avr32_part_name, N_("Specify the AVR32 part name"), 0}, \
++ { "cpu=", &avr32_part_name, N_("Specify the AVR32 part name (deprecated)"), 0}, \
++ { "arch=", &avr32_arch_name, N_("Specify the AVR32 architecture name"), 0} }
++
++#define CAN_DEBUG_WITHOUT_FP
++
++/******************************************************************************
++ * Storage Layout
++ *****************************************************************************/
++
++/*
++Define this macro to have the value 1 if the most significant bit in a
++byte has the lowest number; otherwise define it to have the value zero.
++This means that bit-field instructions count from the most significant
++bit. If the machine has no bit-field instructions, then this must still
++be defined, but it doesn't matter which value it is defined to. This
++macro need not be a constant.
++
++This macro does not affect the way structure fields are packed into
++bytes or words; that is controlled by BYTES_BIG_ENDIAN.
++*/
++#define BITS_BIG_ENDIAN 0
++
++/*
++Define this macro to have the value 1 if the most significant byte in a
++word has the lowest number. This macro need not be a constant.
++*/
++/*
++ Data is stored in an big-endian way.
++*/
++#define BYTES_BIG_ENDIAN 1
++
++/*
++Define this macro to have the value 1 if, in a multiword object, the
++most significant word has the lowest number. This applies to both
++memory locations and registers; GCC fundamentally assumes that the
++order of words in memory is the same as the order in registers. This
++macro need not be a constant.
++*/
++/*
++ Data is stored in an bin-endian way.
++*/
++#define WORDS_BIG_ENDIAN 1
++
++/*
++Define this macro if WORDS_BIG_ENDIAN is not constant. This must be a
++constant value with the same meaning as WORDS_BIG_ENDIAN, which will be
++used only when compiling libgcc2.c. Typically the value will be set
++based on preprocessor defines.
++*/
++#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
++
++/*
++Define this macro to have the value 1 if DFmode, XFmode or
++TFmode floating point numbers are stored in memory with the word
++containing the sign bit at the lowest address; otherwise define it to
++have the value 0. This macro need not be a constant.
++
++You need not define this macro if the ordering is the same as for
++multi-word integers.
++*/
++/* #define FLOAT_WORDS_BIG_ENDIAN 1 */
++
++/*
++Define this macro to be the number of bits in an addressable storage
++unit (byte); normally 8.
++*/
++#define BITS_PER_UNIT 8
++
++/*
++Number of bits in a word; normally 32.
++*/
++#define BITS_PER_WORD 32
++
++/*
++Maximum number of bits in a word. If this is undefined, the default is
++BITS_PER_WORD. Otherwise, it is the constant value that is the
++largest value that BITS_PER_WORD can have at run-time.
++*/
++/* MAX_BITS_PER_WORD not defined*/
++
++/*
++Number of storage units in a word; normally 4.
++*/
++#define UNITS_PER_WORD 4
++
++/*
++Minimum number of units in a word. If this is undefined, the default is
++UNITS_PER_WORD. Otherwise, it is the constant value that is the
++smallest value that UNITS_PER_WORD can have at run-time.
++*/
++/* MIN_UNITS_PER_WORD not defined */
++
++/*
++Width of a pointer, in bits. You must specify a value no wider than the
++width of Pmode. If it is not equal to the width of Pmode,
++you must define POINTERS_EXTEND_UNSIGNED.
++*/
++#define POINTER_SIZE 32
++
++/*
++A C expression whose value is greater than zero if pointers that need to be
++extended from being POINTER_SIZE bits wide to Pmode are to
++be zero-extended and zero if they are to be sign-extended. If the value
++is less then zero then there must be an "ptr_extend" instruction that
++extends a pointer from POINTER_SIZE to Pmode.
++
++You need not define this macro if the POINTER_SIZE is equal
++to the width of Pmode.
++*/
++/* #define POINTERS_EXTEND_UNSIGNED */
++
++/*
++A Macro to update M and UNSIGNEDP when an object whose type
++is TYPE and which has the specified mode and signedness is to be
++stored in a register. This macro is only called when TYPE is a
++scalar type.
++
++On most RISC machines, which only have operations that operate on a full
++register, define this macro to set M to word_mode if
++M is an integer mode narrower than BITS_PER_WORD. In most
++cases, only integer modes should be widened because wider-precision
++floating-point operations are usually more expensive than their narrower
++counterparts.
++
++For most machines, the macro definition does not change UNSIGNEDP.
++However, some machines, have instructions that preferentially handle
++either signed or unsigned quantities of certain modes. For example, on
++the DEC Alpha, 32-bit loads from memory and 32-bit add instructions
++sign-extend the result to 64 bits. On such machines, set
++UNSIGNEDP according to which kind of extension is more efficient.
++
++Do not define this macro if it would never modify M.
++*/
++#define PROMOTE_MODE(M, UNSIGNEDP, TYPE) \
++ do \
++ { \
++ if (GET_MODE_CLASS (M) == MODE_INT \
++ && GET_MODE_SIZE (M) < 4) \
++ { \
++ (M) = SImode; \
++ } \
++ } \
++ while (0)
++
++/* Define if operations between registers always perform the operation
++ on the full register even if a narrower mode is specified. */
++#define WORD_REGISTER_OPERATIONS
++
++/* Define if loading in MODE, an integral mode narrower than BITS_PER_WORD
++ will either zero-extend or sign-extend. The value of this macro should
++ be the code that says which one of the two operations is implicitly
++ done, UNKNOWN if not known. */
++#define LOAD_EXTEND_OP(MODE) \
++ (((MODE) == QImode) ? ZERO_EXTEND \
++ : ((MODE) == HImode) ? SIGN_EXTEND : UNKNOWN)
++
++
++/*
++Define this macro if the promotion described by PROMOTE_MODE
++should only be performed for outgoing function arguments or
++function return values, as specified by PROMOTE_FUNCTION_ARGS
++and PROMOTE_FUNCTION_RETURN, respectively.
++*/
++/* #define PROMOTE_FOR_CALL_ONLY */
++
++/*
++Normal alignment required for function parameters on the stack, in
++bits. All stack parameters receive at least this much alignment
++regardless of data type. On most machines, this is the same as the
++size of an integer.
++*/
++#define PARM_BOUNDARY 32
++
++/*
++Define this macro to the minimum alignment enforced by hardware for the
++stack pointer on this machine. The definition is a C expression for the
++desired alignment (measured in bits). This value is used as a default
++if PREFERRED_STACK_BOUNDARY is not defined. On most machines,
++this should be the same as PARM_BOUNDARY.
++*/
++#define STACK_BOUNDARY 32
++
++/*
++Define this macro if you wish to preserve a certain alignment for the
++stack pointer, greater than what the hardware enforces. The definition
++is a C expression for the desired alignment (measured in bits). This
++macro must evaluate to a value equal to or larger than
++STACK_BOUNDARY.
++*/
++#define PREFERRED_STACK_BOUNDARY (TARGET_FORCE_DOUBLE_ALIGN ? 64 : 32 )
++
++/*
++Alignment required for a function entry point, in bits.
++*/
++#define FUNCTION_BOUNDARY 16
++
++/*
++Biggest alignment that any data type can require on this machine, in bits.
++*/
++#define BIGGEST_ALIGNMENT (TARGET_FORCE_DOUBLE_ALIGN ? 64 : 32 )
++
++/*
++If defined, the smallest alignment, in bits, that can be given to an
++object that can be referenced in one operation, without disturbing any
++nearby object. Normally, this is BITS_PER_UNIT, but may be larger
++on machines that don't have byte or half-word store operations.
++*/
++#define MINIMUM_ATOMIC_ALIGNMENT BITS_PER_UNIT
++
++
++/*
++An integer expression for the size in bits of the largest integer machine mode that
++should actually be used. All integer machine modes of this size or smaller can be
++used for structures and unions with the appropriate sizes. If this macro is undefined,
++GET_MODE_BITSIZE (DImode) is assumed.*/
++#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
++
++
++/*
++If defined, a C expression to compute the alignment given to a constant
++that is being placed in memory. CONSTANT is the constant and
++BASIC_ALIGN is the alignment that the object would ordinarily
++have. The value of this macro is used instead of that alignment to
++align the object.
++
++If this macro is not defined, then BASIC_ALIGN is used.
++
++The typical use of this macro is to increase alignment for string
++constants to be word aligned so that strcpy calls that copy
++constants can be done inline.
++*/
++#define CONSTANT_ALIGNMENT(CONSTANT, BASIC_ALIGN) \
++ ((TREE_CODE(CONSTANT) == STRING_CST) ? BITS_PER_WORD : BASIC_ALIGN)
++
++/* Try to align string to a word. */
++#define DATA_ALIGNMENT(TYPE, ALIGN) \
++ ({(TREE_CODE (TYPE) == ARRAY_TYPE \
++ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
++ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN));})
++
++/* Try to align local store strings to a word. */
++#define LOCAL_ALIGNMENT(TYPE, ALIGN) \
++ ({(TREE_CODE (TYPE) == ARRAY_TYPE \
++ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \
++ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN));})
++
++/*
++Define this macro to be the value 1 if instructions will fail to work
++if given data not on the nominal alignment. If instructions will merely
++go slower in that case, define this macro as 0.
++*/
++#define STRICT_ALIGNMENT 1
++
++/*
++Define this if you wish to imitate the way many other C compilers handle
++alignment of bit-fields and the structures that contain them.
++
++The behavior is that the type written for a bit-field (int,
++short, or other integer type) imposes an alignment for the
++entire structure, as if the structure really did contain an ordinary
++field of that type. In addition, the bit-field is placed within the
++structure so that it would fit within such a field, not crossing a
++boundary for it.
++
++Thus, on most machines, a bit-field whose type is written as int
++would not cross a four-byte boundary, and would force four-byte
++alignment for the whole structure. (The alignment used may not be four
++bytes; it is controlled by the other alignment parameters.)
++
++If the macro is defined, its definition should be a C expression;
++a nonzero value for the expression enables this behavior.
++
++Note that if this macro is not defined, or its value is zero, some
++bit-fields may cross more than one alignment boundary. The compiler can
++support such references if there are insv, extv, and
++extzv insns that can directly reference memory.
++
++The other known way of making bit-fields work is to define
++STRUCTURE_SIZE_BOUNDARY as large as BIGGEST_ALIGNMENT.
++Then every structure can be accessed with fullwords.
++
++Unless the machine has bit-field instructions or you define
++STRUCTURE_SIZE_BOUNDARY that way, you must define
++PCC_BITFIELD_TYPE_MATTERS to have a nonzero value.
++
++If your aim is to make GCC use the same conventions for laying out
++bit-fields as are used by another compiler, here is how to investigate
++what the other compiler does. Compile and run this program:
++
++struct foo1
++{
++ char x;
++ char :0;
++ char y;
++};
++
++struct foo2
++{
++ char x;
++ int :0;
++ char y;
++};
++
++main ()
++{
++ printf ("Size of foo1 is %d\n",
++ sizeof (struct foo1));
++ printf ("Size of foo2 is %d\n",
++ sizeof (struct foo2));
++ exit (0);
++}
++
++If this prints 2 and 5, then the compiler's behavior is what you would
++get from PCC_BITFIELD_TYPE_MATTERS.
++*/
++#define PCC_BITFIELD_TYPE_MATTERS 1
++
++
++/******************************************************************************
++ * Layout of Source Language Data Types
++ *****************************************************************************/
++
++/*
++A C expression for the size in bits of the type int on the
++target machine. If you don't define this, the default is one word.
++*/
++#define INT_TYPE_SIZE 32
++
++/*
++A C expression for the size in bits of the type short on the
++target machine. If you don't define this, the default is half a word. (If
++this would be less than one storage unit, it is rounded up to one unit.)
++*/
++#define SHORT_TYPE_SIZE 16
++
++/*
++A C expression for the size in bits of the type long on the
++target machine. If you don't define this, the default is one word.
++*/
++#define LONG_TYPE_SIZE 32
++
++
++/*
++A C expression for the size in bits of the type long long on the
++target machine. If you don't define this, the default is two
++words. If you want to support GNU Ada on your machine, the value of this
++macro must be at least 64.
++*/
++#define LONG_LONG_TYPE_SIZE 64
++
++/*
++A C expression for the size in bits of the type char on the
++target machine. If you don't define this, the default is
++BITS_PER_UNIT.
++*/
++#define CHAR_TYPE_SIZE 8
++
++
++/*
++A C expression for the size in bits of the C++ type bool and
++C99 type _Bool on the target machine. If you don't define
++this, and you probably shouldn't, the default is CHAR_TYPE_SIZE.
++*/
++#define BOOL_TYPE_SIZE 8
++
++
++/*
++An expression whose value is 1 or 0, according to whether the type
++char should be signed or unsigned by default. The user can
++always override this default with the options -fsigned-char
++and -funsigned-char.
++*/
++/* We are using unsigned char */
++#define DEFAULT_SIGNED_CHAR 0
++
++
++/*
++A C expression for a string describing the name of the data type to use
++for size values. The typedef name size_t is defined using the
++contents of the string.
++
++The string can contain more than one keyword. If so, separate them with
++spaces, and write first any length keyword, then unsigned if
++appropriate, and finally int. The string must exactly match one
++of the data type names defined in the function
++init_decl_processing in the file c-decl.c. You may not
++omit int or change the order - that would cause the compiler to
++crash on startup.
++
++If you don't define this macro, the default is "long unsigned int".
++*/
++#define SIZE_TYPE "long unsigned int"
++
++/*
++A C expression for a string describing the name of the data type to use
++for the result of subtracting two pointers. The typedef name
++ptrdiff_t is defined using the contents of the string. See
++SIZE_TYPE above for more information.
++
++If you don't define this macro, the default is "long int".
++*/
++#define PTRDIFF_TYPE "long int"
++
++
++/*
++A C expression for the size in bits of the data type for wide
++characters. This is used in cpp, which cannot make use of
++WCHAR_TYPE.
++*/
++#define WCHAR_TYPE_SIZE 32
++
++
++/*
++A C expression for a string describing the name of the data type to
++use for wide characters passed to printf and returned from
++getwc. The typedef name wint_t is defined using the
++contents of the string. See SIZE_TYPE above for more
++information.
++
++If you don't define this macro, the default is "unsigned int".
++*/
++#define WINT_TYPE "unsigned int"
++
++/*
++A C expression for a string describing the name of the data type that
++can represent any value of any standard or extended signed integer type.
++The typedef name intmax_t is defined using the contents of the
++string. See SIZE_TYPE above for more information.
++
++If you don't define this macro, the default is the first of
++"int", "long int", or "long long int" that has as
++much precision as long long int.
++*/
++#define INTMAX_TYPE "long long int"
++
++/*
++A C expression for a string describing the name of the data type that
++can represent any value of any standard or extended unsigned integer
++type. The typedef name uintmax_t is defined using the contents
++of the string. See SIZE_TYPE above for more information.
++
++If you don't define this macro, the default is the first of
++"unsigned int", "long unsigned int", or "long long unsigned int"
++that has as much precision as long long unsigned int.
++*/
++#define UINTMAX_TYPE "long long unsigned int"
++
++
++/******************************************************************************
++ * Register Usage
++ *****************************************************************************/
++
++/* Convert from gcc internal register number to register number
++ used in assembly code */
++#define ASM_REGNUM(reg) (LAST_REGNUM - (reg))
++#define ASM_FP_REGNUM(reg) (LAST_FP_REGNUM - (reg))
++
++/* Convert between register number used in assembly to gcc
++ internal register number */
++#define INTERNAL_REGNUM(reg) (LAST_REGNUM - (reg))
++#define INTERNAL_FP_REGNUM(reg) (LAST_FP_REGNUM - (reg))
++
++/** Basic Characteristics of Registers **/
++
++/*
++Number of hardware registers known to the compiler. They receive
++numbers 0 through FIRST_PSEUDO_REGISTER-1; thus, the first
++pseudo register's number really is assigned the number
++FIRST_PSEUDO_REGISTER.
++*/
++#define FIRST_PSEUDO_REGISTER (LAST_FP_REGNUM + 1)
++
++#define FIRST_REGNUM 0
++#define LAST_REGNUM 15
++#define NUM_FP_REGS 16
++#define FIRST_FP_REGNUM 16
++#define LAST_FP_REGNUM (16+NUM_FP_REGS-1)
++
++/*
++An initializer that says which registers are used for fixed purposes
++all throughout the compiled code and are therefore not available for
++general allocation. These would include the stack pointer, the frame
++pointer (except on machines where that can be used as a general
++register when no frame pointer is needed), the program counter on
++machines where that is considered one of the addressable registers,
++and any other numbered register with a standard use.
++
++This information is expressed as a sequence of numbers, separated by
++commas and surrounded by braces. The nth number is 1 if
++register n is fixed, 0 otherwise.
++
++The table initialized from this macro, and the table initialized by
++the following one, may be overridden at run time either automatically,
++by the actions of the macro CONDITIONAL_REGISTER_USAGE, or by
++the user with the command options -ffixed-[reg],
++-fcall-used-[reg] and -fcall-saved-[reg].
++*/
++
++/* The internal gcc register numbers are reversed
++ compared to the real register numbers since
++ gcc expects data types stored over multiple
++ registers in the register file to be big endian
++ if the memory layout is big endian. But this
++ is not the case for avr32 so we fake a big
++ endian register file. */
++
++#define FIXED_REGISTERS { \
++ 1, /* Program Counter */ \
++ 0, /* Link Register */ \
++ 1, /* Stack Pointer */ \
++ 0, /* r12 */ \
++ 0, /* r11 */ \
++ 0, /* r10 */ \
++ 0, /* r9 */ \
++ 0, /* r8 */ \
++ 0, /* r7 */ \
++ 0, /* r6 */ \
++ 0, /* r5 */ \
++ 0, /* r4 */ \
++ 0, /* r3 */ \
++ 0, /* r2 */ \
++ 0, /* r1 */ \
++ 0, /* r0 */ \
++ 0, /* f15 */ \
++ 0, /* f14 */ \
++ 0, /* f13 */ \
++ 0, /* f12 */ \
++ 0, /* f11 */ \
++ 0, /* f10 */ \
++ 0, /* f9 */ \
++ 0, /* f8 */ \
++ 0, /* f7 */ \
++ 0, /* f6 */ \
++ 0, /* f5 */ \
++ 0, /* f4 */ \
++ 0, /* f3 */ \
++ 0, /* f2*/ \
++ 0, /* f1 */ \
++ 0 /* f0 */ \
++}
++
++/*
++Like FIXED_REGISTERS but has 1 for each register that is
++clobbered (in general) by function calls as well as for fixed
++registers. This macro therefore identifies the registers that are not
++available for general allocation of values that must live across
++function calls.
++
++If a register has 0 in CALL_USED_REGISTERS, the compiler
++automatically saves it on function entry and restores it on function
++exit, if the register is used within the function.
++*/
++#define CALL_USED_REGISTERS { \
++ 1, /* Program Counter */ \
++ 0, /* Link Register */ \
++ 1, /* Stack Pointer */ \
++ 1, /* r12 */ \
++ 1, /* r11 */ \
++ 1, /* r10 */ \
++ 1, /* r9 */ \
++ 1, /* r8 */ \
++ 0, /* r7 */ \
++ 0, /* r6 */ \
++ 0, /* r5 */ \
++ 0, /* r4 */ \
++ 0, /* r3 */ \
++ 0, /* r2 */ \
++ 0, /* r1 */ \
++ 0, /* r0 */ \
++ 1, /* f15 */ \
++ 1, /* f14 */ \
++ 1, /* f13 */ \
++ 1, /* f12 */ \
++ 1, /* f11 */ \
++ 1, /* f10 */ \
++ 1, /* f9 */ \
++ 1, /* f8 */ \
++ 0, /* f7 */ \
++ 0, /* f6 */ \
++ 0, /* f5 */ \
++ 0, /* f4 */ \
++ 0, /* f3 */ \
++ 0, /* f2*/ \
++ 0, /* f1*/ \
++ 0, /* f0 */ \
++}
++
++/* Interrupt functions can only use registers that have already been
++ saved by the prologue, even if they would normally be
++ call-clobbered. */
++#define HARD_REGNO_RENAME_OK(SRC, DST) \
++ (! IS_INTERRUPT (cfun->machine->func_type) || \
++ regs_ever_live[DST])
++
++
++/*
++Zero or more C statements that may conditionally modify five variables
++fixed_regs, call_used_regs, global_regs,
++reg_names, and reg_class_contents, to take into account
++any dependence of these register sets on target flags. The first three
++of these are of type char [] (interpreted as Boolean vectors).
++global_regs is a const char *[], and
++reg_class_contents is a HARD_REG_SET. Before the macro is
++called, fixed_regs, call_used_regs,
++reg_class_contents, and reg_names have been initialized
++from FIXED_REGISTERS, CALL_USED_REGISTERS,
++REG_CLASS_CONTENTS, and REGISTER_NAMES, respectively.
++global_regs has been cleared, and any -ffixed-[reg],
++-fcall-used-[reg] and -fcall-saved-[reg]
++command options have been applied.
++
++You need not define this macro if it has no work to do.
++
++If the usage of an entire class of registers depends on the target
++flags, you may indicate this to GCC by using this macro to modify
++fixed_regs and call_used_regs to 1 for each of the
++registers in the classes which should not be used by GCC. Also define
++the macro REG_CLASS_FROM_LETTER to return NO_REGS if it
++is called with a letter for a class that shouldn't be used.
++
++ (However, if this class is not included in GENERAL_REGS and all
++of the insn patterns whose constraints permit this class are
++controlled by target switches, then GCC will automatically avoid using
++these registers when the target switches are opposed to them.)
++*/
++#define CONDITIONAL_REGISTER_USAGE \
++ do \
++ { \
++ int regno; \
++ \
++ if (TARGET_SOFT_FLOAT) \
++ { \
++ for (regno = FIRST_FP_REGNUM; \
++ regno <= LAST_FP_REGNUM; ++regno) \
++ fixed_regs[regno] = call_used_regs[regno] = 1; \
++ } \
++ if (flag_pic) \
++ { \
++ fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
++ call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
++ } \
++ } \
++ while (0)
++
++
++/*
++If the program counter has a register number, define this as that
++register number. Otherwise, do not define it.
++*/
++
++#define LAST_AVR32_REGNUM 16
++
++
++/** Order of Allocation of Registers **/
++
++/*
++If defined, an initializer for a vector of integers, containing the
++numbers of hard registers in the order in which GCC should prefer
++to use them (from most preferred to least).
++
++If this macro is not defined, registers are used lowest numbered first
++(all else being equal).
++
++One use of this macro is on machines where the highest numbered
++registers must always be saved and the save-multiple-registers
++instruction supports only sequences of consecutive registers. On such
++machines, define REG_ALLOC_ORDER to be an initializer that lists
++the highest numbered allocable register first.
++*/
++#define REG_ALLOC_ORDER \
++{ \
++ INTERNAL_REGNUM(8), \
++ INTERNAL_REGNUM(9), \
++ INTERNAL_REGNUM(10), \
++ INTERNAL_REGNUM(11), \
++ INTERNAL_REGNUM(12), \
++ LR_REGNUM, \
++ INTERNAL_REGNUM(7), \
++ INTERNAL_REGNUM(6), \
++ INTERNAL_REGNUM(5), \
++ INTERNAL_REGNUM(4), \
++ INTERNAL_REGNUM(3), \
++ INTERNAL_REGNUM(2), \
++ INTERNAL_REGNUM(1), \
++ INTERNAL_REGNUM(0), \
++ INTERNAL_FP_REGNUM(15), \
++ INTERNAL_FP_REGNUM(14), \
++ INTERNAL_FP_REGNUM(13), \
++ INTERNAL_FP_REGNUM(12), \
++ INTERNAL_FP_REGNUM(11), \
++ INTERNAL_FP_REGNUM(10), \
++ INTERNAL_FP_REGNUM(9), \
++ INTERNAL_FP_REGNUM(8), \
++ INTERNAL_FP_REGNUM(7), \
++ INTERNAL_FP_REGNUM(6), \
++ INTERNAL_FP_REGNUM(5), \
++ INTERNAL_FP_REGNUM(4), \
++ INTERNAL_FP_REGNUM(3), \
++ INTERNAL_FP_REGNUM(2), \
++ INTERNAL_FP_REGNUM(1), \
++ INTERNAL_FP_REGNUM(0), \
++ SP_REGNUM, \
++ PC_REGNUM \
++}
++
++
++/** How Values Fit in Registers **/
++
++/*
++A C expression for the number of consecutive hard registers, starting
++at register number REGNO, required to hold a value of mode
++MODE.
++
++On a machine where all registers are exactly one word, a suitable
++definition of this macro is
++
++#define HARD_REGNO_NREGS(REGNO, MODE) \
++ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
++ / UNITS_PER_WORD)
++*/
++#define HARD_REGNO_NREGS(REGNO, MODE) \
++ ((unsigned int)((GET_MODE_SIZE(MODE) + UNITS_PER_WORD -1 ) / UNITS_PER_WORD))
++
++/*
++A C expression that is nonzero if it is permissible to store a value
++of mode MODE in hard register number REGNO (or in several
++registers starting with that one). For a machine where all registers
++are equivalent, a suitable definition is
++
++ #define HARD_REGNO_MODE_OK(REGNO, MODE) 1
++
++You need not include code to check for the numbers of fixed registers,
++because the allocation mechanism considers them to be always occupied.
++
++On some machines, double-precision values must be kept in even/odd
++register pairs. You can implement that by defining this macro to reject
++odd register numbers for such modes.
++
++The minimum requirement for a mode to be OK in a register is that the
++mov[mode] instruction pattern support moves between the
++register and other hard register in the same class and that moving a
++value into the register and back out not alter it.
++
++Since the same instruction used to move word_mode will work for
++all narrower integer modes, it is not necessary on any machine for
++HARD_REGNO_MODE_OK to distinguish between these modes, provided
++you define patterns movhi, etc., to take advantage of this. This
++is useful because of the interaction between HARD_REGNO_MODE_OK
++and MODES_TIEABLE_P; it is very desirable for all integer modes
++to be tieable.
++
++Many machines have special registers for floating point arithmetic.
++Often people assume that floating point machine modes are allowed only
++in floating point registers. This is not true. Any registers that
++can hold integers can safely hold a floating point machine
++mode, whether or not floating arithmetic can be done on it in those
++registers. Integer move instructions can be used to move the values.
++
++On some machines, though, the converse is true: fixed-point machine
++modes may not go in floating registers. This is true if the floating
++registers normalize any value stored in them, because storing a
++non-floating value there would garble it. In this case,
++HARD_REGNO_MODE_OK should reject fixed-point machine modes in
++floating registers. But if the floating registers do not automatically
++normalize, if you can store any bit pattern in one and retrieve it
++unchanged without a trap, then any machine mode may go in a floating
++register, so you can define this macro to say so.
++
++The primary significance of special floating registers is rather that
++they are the registers acceptable in floating point arithmetic
++instructions. However, this is of no concern to
++HARD_REGNO_MODE_OK. You handle it by writing the proper
++constraints for those instructions.
++
++On some machines, the floating registers are especially slow to access,
++so that it is better to store a value in a stack frame than in such a
++register if floating point arithmetic is not being done. As long as the
++floating registers are not in class GENERAL_REGS, they will not
++be used unless some pattern's constraint asks for one.
++*/
++#define HARD_REGNO_MODE_OK(REGNO, MODE) avr32_hard_regno_mode_ok(REGNO, MODE)
++
++/*
++A C expression that is nonzero if a value of mode
++MODE1 is accessible in mode MODE2 without copying.
++
++If HARD_REGNO_MODE_OK(R, MODE1) and
++HARD_REGNO_MODE_OK(R, MODE2) are always the same for
++any R, then MODES_TIEABLE_P(MODE1, MODE2)
++should be nonzero. If they differ for any R, you should define
++this macro to return zero unless some other mechanism ensures the
++accessibility of the value in a narrower mode.
++
++You should define this macro to return nonzero in as many cases as
++possible since doing so will allow GCC to perform better register
++allocation.
++*/
++#define MODES_TIEABLE_P(MODE1, MODE2) \
++ (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
++
++
++
++/******************************************************************************
++ * Register Classes
++ *****************************************************************************/
++
++/*
++An enumeral type that must be defined with all the register class names
++as enumeral values. NO_REGS must be first. ALL_REGS
++must be the last register class, followed by one more enumeral value,
++LIM_REG_CLASSES, which is not a register class but rather
++tells how many classes there are.
++
++Each register class has a number, which is the value of casting
++the class name to type int. The number serves as an index
++in many of the tables described below.
++*/
++enum reg_class
++{
++ NO_REGS,
++ GENERAL_REGS,
++ FP_REGS,
++ ALL_REGS,
++ LIM_REG_CLASSES
++};
++
++/*
++The number of distinct register classes, defined as follows:
++ #define N_REG_CLASSES (int) LIM_REG_CLASSES
++*/
++#define N_REG_CLASSES (int)LIM_REG_CLASSES
++
++/*
++An initializer containing the names of the register classes as C string
++constants. These names are used in writing some of the debugging dumps.
++*/
++#define REG_CLASS_NAMES \
++{ \
++ "NO_REGS", \
++ "GENERAL_REGS", \
++ "FLOATING_POINT_REGS", \
++ "ALL_REGS" \
++}
++
++/*
++An initializer containing the contents of the register classes, as integers
++which are bit masks. The nth integer specifies the contents of class
++n. The way the integer mask is interpreted is that
++register r is in the class if mask & (1 << r) is 1.
++
++When the machine has more than 32 registers, an integer does not suffice.
++Then the integers are replaced by sub-initializers, braced groupings containing
++several integers. Each sub-initializer must be suitable as an initializer
++for the type HARD_REG_SET which is defined in hard-reg-set.h.
++In this situation, the first integer in each sub-initializer corresponds to
++registers 0 through 31, the second integer to registers 32 through 63, and
++so on.
++*/
++#define REG_CLASS_CONTENTS { \
++ {0x00000000}, /* NO_REGS */ \
++ {0x0000FFFF}, /* GENERAL_REGS */ \
++ {0xFFFF0000}, /* FP_REGS */ \
++ {0x7FFFFFFF}, /* ALL_REGS */ \
++}
++
++
++/*
++A C expression whose value is a register class containing hard register
++REGNO. In general there is more than one such class; choose a class
++which is minimal, meaning that no smaller class also contains the
++register.
++*/
++#define REGNO_REG_CLASS(REGNO) ((REGNO < 16) ? GENERAL_REGS : FP_REGS)
++
++/*
++A macro whose definition is the name of the class to which a valid
++base register must belong. A base register is one used in an address
++which is the register value plus a displacement.
++*/
++#define BASE_REG_CLASS GENERAL_REGS
++
++/*
++This is a variation of the BASE_REG_CLASS macro which allows
++the selection of a base register in a mode depenedent manner. If
++mode is VOIDmode then it should return the same value as
++BASE_REG_CLASS.
++*/
++#define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS
++
++/*
++A macro whose definition is the name of the class to which a valid
++index register must belong. An index register is one used in an
++address where its value is either multiplied by a scale factor or
++added to another register (as well as added to a displacement).
++*/
++#define INDEX_REG_CLASS BASE_REG_CLASS
++
++/*
++A C expression which defines the machine-dependent operand constraint
++letters for register classes. If CHAR is such a letter, the
++value should be the register class corresponding to it. Otherwise,
++the value should be NO_REGS. The register letter r,
++corresponding to class GENERAL_REGS, will not be passed
++to this macro; you do not need to handle it.
++*/
++#define REG_CLASS_FROM_LETTER(CHAR) ((CHAR) == 'f' ? FP_REGS : NO_REGS)
++
++
++/* These assume that REGNO is a hard or pseudo reg number.
++ They give nonzero only if REGNO is a hard reg of the suitable class
++ or a pseudo reg currently allocated to a suitable hard reg.
++ Since they use reg_renumber, they are safe only once reg_renumber
++ has been allocated, which happens in local-alloc.c. */
++#define TEST_REGNO(R, TEST, VALUE) \
++ ((R TEST VALUE) || ((unsigned) reg_renumber[R] TEST VALUE))
++
++/*
++A C expression which is nonzero if register number num is suitable for use as a base
++register in operand addresses. It may be either a suitable hard register or a pseudo
++register that has been allocated such a hard register.
++*/
++#define REGNO_OK_FOR_BASE_P(NUM) TEST_REGNO(NUM, <=, LAST_REGNUM)
++
++/*
++A C expression which is nonzero if register number NUM is
++suitable for use as an index register in operand addresses. It may be
++either a suitable hard register or a pseudo register that has been
++allocated such a hard register.
++
++The difference between an index register and a base register is that
++the index register may be scaled. If an address involves the sum of
++two registers, neither one of them scaled, then either one may be
++labeled the ``base'' and the other the ``index''; but whichever
++labeling is used must fit the machine's constraints of which registers
++may serve in each capacity. The compiler will try both labelings,
++looking for one that is valid, and will reload one or both registers
++only if neither labeling works.
++*/
++#define REGNO_OK_FOR_INDEX_P(NUM) TEST_REGNO(NUM, <=, LAST_REGNUM)
++
++/*
++A C expression that places additional restrictions on the register class
++to use when it is necessary to copy value X into a register in class
++CLASS. The value is a register class; perhaps CLASS, or perhaps
++another, smaller class. On many machines, the following definition is
++safe: #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS
++
++Sometimes returning a more restrictive class makes better code. For
++example, on the 68000, when X is an integer constant that is in range
++for a 'moveq' instruction, the value of this macro is always
++DATA_REGS as long as CLASS includes the data registers.
++Requiring a data register guarantees that a 'moveq' will be used.
++
++If X is a const_double, by returning NO_REGS
++you can force X into a memory constant. This is useful on
++certain machines where immediate floating values cannot be loaded into
++certain kinds of registers.
++*/
++#define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
++
++
++
++/*
++A C expression for the maximum number of consecutive registers
++of class CLASS needed to hold a value of mode MODE.
++
++This is closely related to the macro HARD_REGNO_NREGS. In fact,
++the value of the macro CLASS_MAX_NREGS(CLASS, MODE)
++should be the maximum value of HARD_REGNO_NREGS(REGNO, MODE)
++for all REGNO values in the class CLASS.
++
++This macro helps control the handling of multiple-word values
++in the reload pass.
++*/
++#define CLASS_MAX_NREGS(CLASS, MODE) /* ToDo:fixme */ \
++ (unsigned int)((GET_MODE_SIZE(MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
++
++
++/*
++ Using CONST_OK_FOR_CONSTRAINT_P instead of CONS_OK_FOR_LETTER_P
++ in order to support constraints with more than one letter.
++ Only two letters are then used for constant constraints,
++ the letter 'K' and the letter 'I'. The constraint starting with
++ these letters must consist of four characters. The character following
++ 'K' or 'I' must be either 'u' (unsigned) or 's' (signed) to specify
++ if the constant is zero or sign extended. The last two characters specify
++ the length in bits of the constant. The base constraint letter 'I' means
++ that this is an negated constant, meaning that actually -VAL should be
++ checked to lie withing the valid range instead of VAL which is used when
++ 'K' is the base constraint letter.
++
++*/
++
++#define CONSTRAINT_LEN(C, STR) \
++ ( ((C) == 'K' || (C) == 'I') ? 4 : \
++ ((C) == 'R') ? 5 : \
++ ((C) == 'N' || (C) == 'O' || \
++ (C) == 'P' || (C) == 'L' || (C) == 'J') ? -1 : \
++ DEFAULT_CONSTRAINT_LEN((C), (STR)) )
++
++#define CONST_OK_FOR_CONSTRAINT_P(VALUE, C, STR) \
++ avr32_const_ok_for_constraint_p(VALUE, C, STR)
++
++/*
++A C expression that defines the machine-dependent operand constraint
++letters that specify particular ranges of const_double values ('G' or 'H').
++
++If C is one of those letters, the expression should check that
++VALUE, an RTX of code const_double, is in the appropriate
++range and return 1 if so, 0 otherwise. If C is not one of those
++letters, the value should be 0 regardless of VALUE.
++
++const_double is used for all floating-point constants and for
++DImode fixed-point constants. A given letter can accept either
++or both kinds of values. It can use GET_MODE to distinguish
++between these kinds.
++*/
++#define CONST_DOUBLE_OK_FOR_LETTER_P(OP, C) \
++ ((C) == 'G' ? avr32_const_double_immediate(OP) : 0)
++
++/*
++A C expression that defines the optional machine-dependent constraint
++letters that can be used to segregate specific types of operands, usually
++memory references, for the target machine. Any letter that is not
++elsewhere defined and not matched by REG_CLASS_FROM_LETTER
++may be used. Normally this macro will not be defined.
++
++If it is required for a particular target machine, it should return 1
++if VALUE corresponds to the operand type represented by the
++constraint letter C. If C is not defined as an extra
++constraint, the value returned should be 0 regardless of VALUE.
++
++For example, on the ROMP, load instructions cannot have their output
++in r0 if the memory reference contains a symbolic address. Constraint
++letter 'Q' is defined as representing a memory address that does
++not contain a symbolic address. An alternative is specified with
++a 'Q' constraint on the input and 'r' on the output. The next
++alternative specifies 'm' on the input and a register class that
++does not include r0 on the output.
++*/
++#define EXTRA_CONSTRAINT_STR(OP, C, STR) \
++ ((C) == 'W' ? avr32_address_operand(OP, GET_MODE(OP)) : \
++ (C) == 'R' ? (avr32_indirect_register_operand(OP, GET_MODE(OP)) || \
++ (avr32_imm_disp_memory_operand(OP, GET_MODE(OP)) \
++ && avr32_const_ok_for_constraint_p( \
++ INTVAL(XEXP(XEXP(OP, 0), 1)), \
++ (STR)[1], &(STR)[1]))) : \
++ (C) == 'S' ? avr32_indexed_memory_operand(OP, GET_MODE(OP)) : \
++ (C) == 'T' ? avr32_const_pool_ref_operand(OP, GET_MODE(OP)) : \
++ (C) == 'U' ? SYMBOL_REF_RCALL_FUNCTION_P(OP) : \
++ (C) == 'Z' ? avr32_cop_memory_operand(OP, GET_MODE(OP)) : \
++ 0)
++
++
++#define EXTRA_MEMORY_CONSTRAINT(C, STR) ( ((C) == 'R') || \
++ ((C) == 'S') || \
++ ((C) == 'Z') )
++
++
++/* Returns nonzero if op is a function SYMBOL_REF which
++ can be called using an rcall instruction */
++#define SYMBOL_REF_RCALL_FUNCTION_P(op) \
++ ( GET_CODE(op) == SYMBOL_REF \
++ && SYMBOL_REF_FUNCTION_P(op) \
++ && SYMBOL_REF_LOCAL_P(op) \
++ && !SYMBOL_REF_EXTERNAL_P(op) \
++ && !TARGET_HAS_ASM_ADDR_PSEUDOS )
++
++/******************************************************************************
++ * Stack Layout and Calling Conventions
++ *****************************************************************************/
++
++/** Basic Stack Layout **/
++
++/*
++Define this macro if pushing a word onto the stack moves the stack
++pointer to a smaller address.
++
++When we say, ``define this macro if ...,'' it means that the
++compiler checks this macro only with #ifdef so the precise
++definition used does not matter.
++*/
++/* pushm decrece SP: *(--SP) <-- Rx */
++#define STACK_GROWS_DOWNWARD
++
++/*
++This macro defines the operation used when something is pushed
++on the stack. In RTL, a push operation will be
++(set (mem (STACK_PUSH_CODE (reg sp))) ...)
++
++The choices are PRE_DEC, POST_DEC, PRE_INC,
++and POST_INC. Which of these is correct depends on
++the stack direction and on whether the stack pointer points
++to the last item on the stack or whether it points to the
++space for the next item on the stack.
++
++The default is PRE_DEC when STACK_GROWS_DOWNWARD is
++defined, which is almost always right, and PRE_INC otherwise,
++which is often wrong.
++*/
++/* pushm: *(--SP) <-- Rx */
++#define STACK_PUSH_CODE PRE_DEC
++
++/*
++Define this macro if the addresses of local variable slots are at negative
++offsets from the frame pointer.
++*/
++#define FRAME_GROWS_DOWNWARD
++
++
++/*
++Offset from the frame pointer to the first local variable slot to be allocated.
++
++If FRAME_GROWS_DOWNWARD, find the next slot's offset by
++subtracting the first slot's length from STARTING_FRAME_OFFSET.
++Otherwise, it is found by adding the length of the first slot to the
++value STARTING_FRAME_OFFSET.
++ (i'm not sure if the above is still correct.. had to change it to get
++ rid of an overfull. --mew 2feb93 )
++*/
++#define STARTING_FRAME_OFFSET 0
++
++/*
++Offset from the stack pointer register to the first location at which
++outgoing arguments are placed. If not specified, the default value of
++zero is used. This is the proper value for most machines.
++
++If ARGS_GROW_DOWNWARD, this is the offset to the location above
++the first location at which outgoing arguments are placed.
++*/
++#define STACK_POINTER_OFFSET 0
++
++/*
++Offset from the argument pointer register to the first argument's
++address. On some machines it may depend on the data type of the
++function.
++
++If ARGS_GROW_DOWNWARD, this is the offset to the location above
++the first argument's address.
++*/
++#define FIRST_PARM_OFFSET(FUNDECL) 0
++
++
++/*
++A C expression whose value is RTL representing the address in a stack
++frame where the pointer to the caller's frame is stored. Assume that
++FRAMEADDR is an RTL expression for the address of the stack frame
++itself.
++
++If you don't define this macro, the default is to return the value
++of FRAMEADDR - that is, the stack frame address is also the
++address of the stack word that points to the previous frame.
++*/
++#define DYNAMIC_CHAIN_ADDRESS(FRAMEADDR) plus_constant ((FRAMEADDR), 4)
++
++
++/*
++A C expression whose value is RTL representing the value of the return
++address for the frame COUNT steps up from the current frame, after
++the prologue. FRAMEADDR is the frame pointer of the COUNT
++frame, or the frame pointer of the COUNT - 1 frame if
++RETURN_ADDR_IN_PREVIOUS_FRAME is defined.
++
++The value of the expression must always be the correct address when
++COUNT is zero, but may be NULL_RTX if there is not way to
++determine the return address of other frames.
++*/
++#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) avr32_return_addr(COUNT, FRAMEADDR)
++
++
++/*
++A C expression whose value is RTL representing the location of the
++incoming return address at the beginning of any function, before the
++prologue. This RTL is either a REG, indicating that the return
++value is saved in 'REG', or a MEM representing a location in
++the stack.
++
++You only need to define this macro if you want to support call frame
++debugging information like that provided by DWARF 2.
++
++If this RTL is a REG, you should also define
++DWARF_FRAME_RETURN_COLUMN to DWARF_FRAME_REGNUM (REGNO).
++*/
++#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LR_REGNUM)
++
++
++
++/*
++A C expression whose value is an integer giving the offset, in bytes,
++from the value of the stack pointer register to the top of the stack
++frame at the beginning of any function, before the prologue. The top of
++the frame is defined to be the value of the stack pointer in the
++previous frame, just before the call instruction.
++
++You only need to define this macro if you want to support call frame
++debugging information like that provided by DWARF 2.
++*/
++#define INCOMING_FRAME_SP_OFFSET 0
++
++
++/** Exception Handling Support **/
++
++#define DWARF2_UNWIND_INFO 1
++
++/*
++A C expression whose value is the Nth register number used for
++data by exception handlers, or INVALID_REGNUM if fewer than
++N registers are usable.
++
++The exception handling library routines communicate with the exception
++handlers via a set of agreed upon registers. Ideally these registers
++should be call-clobbered; it is possible to use call-saved registers,
++but may negatively impact code size. The target must support at least
++2 data registers, but should define 4 if there are enough free registers.
++
++You must define this macro if you want to support call frame exception
++handling like that provided by DWARF 2.
++*/
++/*
++ Use r8-r11
++*/
++#define EH_RETURN_DATA_REGNO(N) \
++ ((N) < 4 ? INTERNAL_REGNUM((N) + 8U) : INVALID_REGNUM)
++
++/*
++A C expression whose value is RTL representing a location in which
++to store a stack adjustment to be applied before function return.
++This is used to unwind the stack to an exception handler's call frame.
++It will be assigned zero on code paths that return normally.
++
++Typically this is a call-clobbered hard register that is otherwise
++untouched by the epilogue, but could also be a stack slot.
++
++You must define this macro if you want to support call frame exception
++handling like that provided by DWARF 2.
++*/
++/*
++ I don't think functions that may throw exceptions can ever be leaf
++ functions, so we may safely use LR for this.
++*/
++#define EH_RETURN_STACKADJ_REGNO LR_REGNUM
++#define EH_RETURN_STACKADJ_RTX gen_rtx_REG(SImode, EH_RETURN_STACKADJ_REGNO)
++
++/*
++A C expression whose value is RTL representing a location in which
++to store the address of an exception handler to which we should
++return. It will not be assigned on code paths that return normally.
++
++Typically this is the location in the call frame at which the normal
++return address is stored. For targets that return by popping an
++address off the stack, this might be a memory address just below
++the target call frame rather than inside the current call
++frame. EH_RETURN_STACKADJ_RTX will have already been assigned,
++so it may be used to calculate the location of the target call frame.
++
++Some targets have more complex requirements than storing to an
++address calculable during initial code generation. In that case
++the eh_return instruction pattern should be used instead.
++
++If you want to support call frame exception handling, you must
++define either this macro or the eh_return instruction pattern.
++*/
++/*
++ We define the eh_return instruction pattern, so this isn't needed.
++*/
++/* #define EH_RETURN_HANDLER_RTX gen_rtx_REG(Pmode, RET_REGISTER) */
++
++/*
++ This macro chooses the encoding of pointers embedded in the
++ exception handling sections. If at all possible, this should be
++ defined such that the exception handling section will not require
++ dynamic relocations, and so may be read-only.
++
++ code is 0 for data, 1 for code labels, 2 for function
++ pointers. global is true if the symbol may be affected by dynamic
++ relocations. The macro should return a combination of the DW_EH_PE_*
++ defines as found in dwarf2.h.
++
++ If this macro is not defined, pointers will not be encoded but
++ represented directly.
++*/
++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
++ ((flag_pic && (GLOBAL) ? DW_EH_PE_indirect : 0) \
++ | (flag_pic ? DW_EH_PE_pcrel : DW_EH_PE_absptr) \
++ | DW_EH_PE_sdata4)
++
++/* ToDo: The rest of this subsection */
++
++/** Specifying How Stack Checking is Done **/
++/* ToDo: All in this subsection */
++
++/** Registers That Address the Stack Frame **/
++
++/*
++The register number of the stack pointer register, which must also be a
++fixed register according to FIXED_REGISTERS. On most machines,
++the hardware determines which register this is.
++*/
++/* Using r13 as stack pointer. */
++#define STACK_POINTER_REGNUM INTERNAL_REGNUM(13)
++
++/*
++The register number of the frame pointer register, which is used to
++access automatic variables in the stack frame. On some machines, the
++hardware determines which register this is. On other machines, you can
++choose any register you wish for this purpose.
++*/
++/* Use r7 */
++#define FRAME_POINTER_REGNUM INTERNAL_REGNUM(7)
++
++
++
++/*
++The register number of the arg pointer register, which is used to access
++the function's argument list. On some machines, this is the same as the
++frame pointer register. On some machines, the hardware determines which
++register this is. On other machines, you can choose any register you
++wish for this purpose. If this is not the same register as the frame
++pointer register, then you must mark it as a fixed register according to
++FIXED_REGISTERS, or arrange to be able to eliminate it (see Section
++10.10.5 [Elimination], page 224).
++*/
++/* Using r5 */
++#define ARG_POINTER_REGNUM INTERNAL_REGNUM(4)
++
++
++/*
++Register numbers used for passing a function's static chain pointer. If
++register windows are used, the register number as seen by the called
++function is STATIC_CHAIN_INCOMING_REGNUM, while the register
++number as seen by the calling function is STATIC_CHAIN_REGNUM. If
++these registers are the same, STATIC_CHAIN_INCOMING_REGNUM need
++not be defined.
++
++The static chain register need not be a fixed register.
++
++If the static chain is passed in memory, these macros should not be
++defined; instead, the next two macros should be defined.
++*/
++/* Using r0 */
++#define STATIC_CHAIN_REGNUM INTERNAL_REGNUM(0)
++
++
++/** Eliminating Frame Pointer and Arg Pointer **/
++
++/*
++A C expression which is nonzero if a function must have and use a frame
++pointer. This expression is evaluated in the reload pass. If its value is
++nonzero the function will have a frame pointer.
++
++The expression can in principle examine the current function and decide
++according to the facts, but on most machines the constant 0 or the
++constant 1 suffices. Use 0 when the machine allows code to be generated
++with no frame pointer, and doing so saves some time or space. Use 1
++when there is no possible advantage to avoiding a frame pointer.
++
++In certain cases, the compiler does not know how to produce valid code
++without a frame pointer. The compiler recognizes those cases and
++automatically gives the function a frame pointer regardless of what
++FRAME_POINTER_REQUIRED says. You don't need to worry about
++them.
++
++In a function that does not require a frame pointer, the frame pointer
++register can be allocated for ordinary usage, unless you mark it as a
++fixed register. See FIXED_REGISTERS for more information.
++*/
++/* We need the frame pointer when compiling for profiling */
++#define FRAME_POINTER_REQUIRED (current_function_profile)
++
++/*
++A C statement to store in the variable DEPTH_VAR the difference
++between the frame pointer and the stack pointer values immediately after
++the function prologue. The value would be computed from information
++such as the result of get_frame_size () and the tables of
++registers regs_ever_live and call_used_regs.
++
++If ELIMINABLE_REGS is defined, this macro will be not be used and
++need not be defined. Otherwise, it must be defined even if
++FRAME_POINTER_REQUIRED is defined to always be true; in that
++case, you may set DEPTH_VAR to anything.
++*/
++#define INITIAL_FRAME_POINTER_OFFSET(DEPTH_VAR) ((DEPTH_VAR) = get_frame_size())
++
++/*
++If defined, this macro specifies a table of register pairs used to
++eliminate unneeded registers that point into the stack frame. If it is not
++defined, the only elimination attempted by the compiler is to replace
++references to the frame pointer with references to the stack pointer.
++
++The definition of this macro is a list of structure initializations, each
++of which specifies an original and replacement register.
++
++On some machines, the position of the argument pointer is not known until
++the compilation is completed. In such a case, a separate hard register
++must be used for the argument pointer. This register can be eliminated by
++replacing it with either the frame pointer or the argument pointer,
++depending on whether or not the frame pointer has been eliminated.
++
++In this case, you might specify:
++ #define ELIMINABLE_REGS \
++ {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
++ {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
++ {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
++
++Note that the elimination of the argument pointer with the stack pointer is
++specified first since that is the preferred elimination.
++*/
++#define ELIMINABLE_REGS \
++{ \
++ { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
++ { ARG_POINTER_REGNUM, STACK_POINTER_REGNUM }, \
++ { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM } \
++}
++
++/*
++A C expression that returns nonzero if the compiler is allowed to try
++to replace register number FROM with register number
++TO. This macro need only be defined if ELIMINABLE_REGS
++is defined, and will usually be the constant 1, since most of the cases
++preventing register elimination are things that the compiler already
++knows about.
++*/
++#define CAN_ELIMINATE(FROM, TO) 1
++
++/*
++This macro is similar to INITIAL_FRAME_POINTER_OFFSET. It
++specifies the initial difference between the specified pair of
++registers. This macro must be defined if ELIMINABLE_REGS is
++defined.
++*/
++#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
++ ((OFFSET) = avr32_initial_elimination_offset(FROM, TO))
++
++/** Passing Function Arguments on the Stack **/
++
++
++/*
++A C expression. If nonzero, push insns will be used to pass
++outgoing arguments.
++If the target machine does not have a push instruction, set it to zero.
++That directs GCC to use an alternate strategy: to
++allocate the entire argument block and then store the arguments into
++it. When PUSH_ARGS is nonzero, PUSH_ROUNDING must be defined too.
++*/
++#define PUSH_ARGS 1
++
++
++/*
++A C expression that is the number of bytes actually pushed onto the
++stack when an instruction attempts to push NPUSHED bytes.
++
++On some machines, the definition
++
++ #define PUSH_ROUNDING(BYTES) (BYTES)
++
++will suffice. But on other machines, instructions that appear
++to push one byte actually push two bytes in an attempt to maintain
++alignment. Then the definition should be
++
++ #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
++*/
++/* Push 4 bytes at the time. */
++#define PUSH_ROUNDING(NPUSHED) (((NPUSHED) + 3) & ~3)
++
++/*
++A C expression. If nonzero, the maximum amount of space required for
++outgoing arguments will be computed and placed into the variable
++current_function_outgoing_args_size. No space will be pushed
++onto the stack for each call; instead, the function prologue should
++increase the stack frame size by this amount.
++
++Setting both PUSH_ARGS and ACCUMULATE_OUTGOING_ARGS is not proper.
++*/
++#define ACCUMULATE_OUTGOING_ARGS 0
++
++
++
++
++/*
++A C expression that should indicate the number of bytes of its own
++arguments that a function pops on returning, or 0 if the
++function pops no arguments and the caller must therefore pop them all
++after the function returns.
++
++FUNDECL is a C variable whose value is a tree node that describes
++the function in question. Normally it is a node of type
++FUNCTION_DECL that describes the declaration of the function.
++From this you can obtain the DECL_ATTRIBUTES of the function.
++
++FUNTYPE is a C variable whose value is a tree node that
++describes the function in question. Normally it is a node of type
++FUNCTION_TYPE that describes the data type of the function.
++From this it is possible to obtain the data types of the value and
++arguments (if known).
++
++When a call to a library function is being considered, FUNDECL
++will contain an identifier node for the library function. Thus, if
++you need to distinguish among various library functions, you can do so
++by their names. Note that ``library function'' in this context means
++a function used to perform arithmetic, whose name is known specially
++in the compiler and was not mentioned in the C code being compiled.
++
++STACK_SIZE is the number of bytes of arguments passed on the
++stack. If a variable number of bytes is passed, it is zero, and
++argument popping will always be the responsibility of the calling function.
++
++On the VAX, all functions always pop their arguments, so the definition
++of this macro is STACK_SIZE. On the 68000, using the standard
++calling convention, no functions pop their arguments, so the value of
++the macro is always 0 in this case. But an alternative calling
++convention is available in which functions that take a fixed number of
++arguments pop them but other functions (such as printf) pop
++nothing (the caller pops all). When this convention is in use,
++FUNTYPE is examined to determine whether a function takes a fixed
++number of arguments.
++*/
++#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
++
++
++/*Return true if this function can we use a single return instruction*/
++#define USE_RETURN_INSN(ISCOND) avr32_use_return_insn(ISCOND)
++
++/*
++A C expression that should indicate the number of bytes a call sequence
++pops off the stack. It is added to the value of RETURN_POPS_ARGS
++when compiling a function call.
++
++CUM is the variable in which all arguments to the called function
++have been accumulated.
++
++On certain architectures, such as the SH5, a call trampoline is used
++that pops certain registers off the stack, depending on the arguments
++that have been passed to the function. Since this is a property of the
++call site, not of the called function, RETURN_POPS_ARGS is not
++appropriate.
++*/
++#define CALL_POPS_ARGS(CUM) 0
++
++/* Passing Arguments in Registers */
++
++/*
++A C expression that controls whether a function argument is passed
++in a register, and which register.
++
++The arguments are CUM, which summarizes all the previous
++arguments; MODE, the machine mode of the argument; TYPE,
++the data type of the argument as a tree node or 0 if that is not known
++(which happens for C support library functions); and NAMED,
++which is 1 for an ordinary argument and 0 for nameless arguments that
++correspond to '...' in the called function's prototype.
++TYPE can be an incomplete type if a syntax error has previously
++occurred.
++
++The value of the expression is usually either a reg RTX for the
++hard register in which to pass the argument, or zero to pass the
++argument on the stack.
++
++For machines like the VAX and 68000, where normally all arguments are
++pushed, zero suffices as a definition.
++
++The value of the expression can also be a parallel RTX. This is
++used when an argument is passed in multiple locations. The mode of the
++of the parallel should be the mode of the entire argument. The
++parallel holds any number of expr_list pairs; each one
++describes where part of the argument is passed. In each
++expr_list the first operand must be a reg RTX for the hard
++register in which to pass this part of the argument, and the mode of the
++register RTX indicates how large this part of the argument is. The
++second operand of the expr_list is a const_int which gives
++the offset in bytes into the entire argument of where this part starts.
++As a special exception the first expr_list in the parallel
++RTX may have a first operand of zero. This indicates that the entire
++argument is also stored on the stack.
++
++The last time this macro is called, it is called with MODE == VOIDmode,
++and its result is passed to the call or call_value
++pattern as operands 2 and 3 respectively.
++
++The usual way to make the ISO library 'stdarg.h' work on a machine
++where some arguments are usually passed in registers, is to cause
++nameless arguments to be passed on the stack instead. This is done
++by making FUNCTION_ARG return 0 whenever NAMED is 0.
++
++You may use the macro MUST_PASS_IN_STACK (MODE, TYPE)
++in the definition of this macro to determine if this argument is of a
++type that must be passed in the stack. If REG_PARM_STACK_SPACE
++is not defined and FUNCTION_ARG returns nonzero for such an
++argument, the compiler will abort. If REG_PARM_STACK_SPACE is
++defined, the argument will be computed in the stack and then loaded into
++a register. */
++
++#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
++ avr32_function_arg(&(CUM), MODE, TYPE, NAMED)
++
++
++
++
++/*
++A C type for declaring a variable that is used as the first argument of
++FUNCTION_ARG and other related values. For some target machines,
++the type int suffices and can hold the number of bytes of
++argument so far.
++
++There is no need to record in CUMULATIVE_ARGS anything about the
++arguments that have been passed on the stack. The compiler has other
++variables to keep track of that. For target machines on which all
++arguments are passed on the stack, there is no need to store anything in
++CUMULATIVE_ARGS; however, the data structure must exist and
++should not be empty, so use int.
++*/
++typedef struct avr32_args
++{
++ /* Index representing the argument register the current function argument
++ will occupy */
++ int index;
++ /* A mask with bits representing the argument registers: if a bit is set
++ then this register is used for an arguemnt */
++ int used_index;
++ /* TRUE if this function has anonymous arguments */
++ int uses_anonymous_args;
++ /* The size in bytes of the named arguments pushed on the stack */
++ int stack_pushed_args_size;
++ /* Set to true if this function needs a Return Value Pointer */
++ int use_rvp;
++
++} CUMULATIVE_ARGS;
++
++
++#define FIRST_CUM_REG_INDEX 0
++#define LAST_CUM_REG_INDEX 4
++#define GET_REG_INDEX(CUM) ((CUM)->index)
++#define SET_REG_INDEX(CUM, INDEX) ((CUM)->index = (INDEX));
++#define GET_USED_INDEX(CUM, INDEX) ((CUM)->used_index & (1 << (INDEX)))
++#define SET_USED_INDEX(CUM, INDEX) \
++ do \
++ { \
++ if (INDEX >= 0) \
++ (CUM)->used_index |= (1 << (INDEX)); \
++ } \
++ while (0)
++#define SET_INDEXES_UNUSED(CUM) ((CUM)->used_index = 0)
++
++
++/*
++ A C statement (sans semicolon) for initializing the variable cum for the
++ state at the beginning of the argument list. The variable has type
++ CUMULATIVE_ARGS. The value of FNTYPE is the tree node for the data type of
++ the function which will receive the args, or 0 if the args are to a compiler
++ support library function. For direct calls that are not libcalls, FNDECL
++ contain the declaration node of the function. FNDECL is also set when
++ INIT_CUMULATIVE_ARGS is used to find arguments for the function being
++ compiled. N_NAMED_ARGS is set to the number of named arguments, including a
++ structure return address if it is passed as a parameter, when making a call.
++ When processing incoming arguments, N_NAMED_ARGS is set to -1.
++
++ When processing a call to a compiler support library function, LIBNAME
++ identifies which one. It is a symbol_ref rtx which contains the name of the
++ function, as a string. LIBNAME is 0 when an ordinary C function call is
++ being processed. Thus, each time this macro is called, either LIBNAME or
++ FNTYPE is nonzero, but never both of them at once.
++*/
++#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
++ avr32_init_cumulative_args(&(CUM), FNTYPE, LIBNAME, FNDECL)
++
++
++/*
++A C statement (sans semicolon) to update the summarizer variable
++CUM to advance past an argument in the argument list. The
++values MODE, TYPE and NAMED describe that argument.
++Once this is done, the variable CUM is suitable for analyzing
++the following argument with FUNCTION_ARG, etc.
++
++This macro need not do anything if the argument in question was passed
++on the stack. The compiler knows how to track the amount of stack space
++used for arguments without any special help.
++*/
++#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
++ avr32_function_arg_advance(&(CUM), MODE, TYPE, NAMED)
++
++/*
++If defined, a C expression which determines whether, and in which direction,
++to pad out an argument with extra space. The value should be of type
++enum direction: either 'upward' to pad above the argument,
++'downward' to pad below, or 'none' to inhibit padding.
++
++The amount of padding is always just enough to reach the next
++multiple of FUNCTION_ARG_BOUNDARY; this macro does not control
++it.
++
++This macro has a default definition which is right for most systems.
++For little-endian machines, the default is to pad upward. For
++big-endian machines, the default is to pad downward for an argument of
++constant size shorter than an int, and upward otherwise.
++*/
++#define FUNCTION_ARG_PADDING(MODE, TYPE) \
++ avr32_function_arg_padding(MODE, TYPE)
++
++/*
++ Specify padding for the last element of a block move between registers
++ and memory. First is nonzero if this is the only element. Defining
++ this macro allows better control of register function parameters on
++ big-endian machines, without using PARALLEL rtl. In particular,
++ MUST_PASS_IN_STACK need not test padding and mode of types in registers,
++ as there is no longer a "wrong" part of a register; For example, a three
++ byte aggregate may be passed in the high part of a register if so required.
++*/
++#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
++ avr32_function_arg_padding(MODE, TYPE)
++
++/*
++If defined, a C expression which determines whether the default
++implementation of va_arg will attempt to pad down before reading the
++next argument, if that argument is smaller than its aligned space as
++controlled by PARM_BOUNDARY. If this macro is not defined, all such
++arguments are padded down if BYTES_BIG_ENDIAN is true.
++*/
++#define PAD_VARARGS_DOWN \
++ (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward)
++
++
++/*
++A C expression that is nonzero if REGNO is the number of a hard
++register in which function arguments are sometimes passed. This does
++not include implicit arguments such as the static chain and
++the structure-value address. On many machines, no registers can be
++used for this purpose since all function arguments are pushed on the
++stack.
++*/
++/*
++ Use r8 - r12 for function arguments.
++*/
++#define FUNCTION_ARG_REGNO_P(REGNO) \
++ (REGNO >= 3 && REGNO <= 7)
++
++/* Number of registers used for passing function arguments */
++#define NUM_ARG_REGS 5
++
++/*
++If defined, the order in which arguments are loaded into their
++respective argument registers is reversed so that the last
++argument is loaded first. This macro only affects arguments
++passed in registers.
++*/
++/* #define LOAD_ARGS_REVERSED */
++
++/** How Scalar Function Values Are Returned **/
++
++/* AVR32 is using r12 as return register. */
++#define RET_REGISTER (15 - 12)
++
++/*
++Define this macro if -traditional should not cause functions
++declared to return float to convert the value to double.
++*/
++/* #define TRADITIONAL_RETURN_FLOAT */
++
++/*
++A C expression to create an RTX representing the place where a
++function returns a value of data type VALTYPE. VALTYPE is
++a tree node representing a data type. Write TYPE_MODE(VALTYPE)
++to get the machine mode used to represent that type.
++On many machines, only the mode is relevant. (Actually, on most
++machines, scalar values are returned in the same place regardless of
++mode).
++
++The value of the expression is usually a reg RTX for the hard
++register where the return value is stored. The value can also be a
++parallel RTX, if the return value is in multiple places. See
++FUNCTION_ARG for an explanation of the parallel form.
++
++If PROMOTE_FUNCTION_RETURN is defined, you must apply the same
++promotion rules specified in PROMOTE_MODE if VALTYPE is a
++scalar type.
++
++If the precise function being called is known, FUNC is a tree
++node (FUNCTION_DECL) for it; otherwise, FUNC is a null
++pointer. This makes it possible to use a different value-returning
++convention for specific functions when all their calls are
++known.
++
++FUNCTION_VALUE is not used for return vales with aggregate data
++types, because these are returned in another way. See
++STRUCT_VALUE_REGNUM and related macros, below.
++*/
++#define FUNCTION_VALUE(VALTYPE, FUNC) avr32_function_value(VALTYPE, FUNC)
++
++
++/*
++A C expression to create an RTX representing the place where a library
++function returns a value of mode MODE. If the precise function
++being called is known, FUNC is a tree node
++(FUNCTION_DECL) for it; otherwise, func is a null
++pointer. This makes it possible to use a different value-returning
++convention for specific functions when all their calls are
++known.
++
++Note that "library function" in this context means a compiler
++support routine, used to perform arithmetic, whose name is known
++specially by the compiler and was not mentioned in the C code being
++compiled.
++
++The definition of LIBRARY_VALUE need not be concerned aggregate
++data types, because none of the library functions returns such types.
++*/
++#define LIBCALL_VALUE(MODE) avr32_libcall_value(MODE)
++
++/*
++A C expression that is nonzero if REGNO is the number of a hard
++register in which the values of called function may come back.
++
++A register whose use for returning values is limited to serving as the
++second of a pair (for a value of type double, say) need not be
++recognized by this macro. So for most machines, this definition
++suffices:
++ #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
++
++If the machine has register windows, so that the caller and the called
++function use different registers for the return value, this macro
++should recognize only the caller's register numbers.
++*/
++/*
++ When returning a value of mode DImode, r11:r10 is used, else r12 is used.
++*/
++#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RET_REGISTER \
++ || (REGNO) == INTERNAL_REGNUM(11))
++
++
++/** How Large Values Are Returned **/
++
++
++/*
++Define this macro to be 1 if all structure and union return values must be
++in memory. Since this results in slower code, this should be defined
++only if needed for compatibility with other compilers or with an ABI.
++If you define this macro to be 0, then the conventions used for structure
++and union return values are decided by the RETURN_IN_MEMORY macro.
++
++If not defined, this defaults to the value 1.
++*/
++#define DEFAULT_PCC_STRUCT_RETURN 0
++
++
++
++
++/** Generating Code for Profiling **/
++
++/*
++A C statement or compound statement to output to FILE some
++assembler code to call the profiling subroutine mcount.
++
++The details of how mcount expects to be called are determined by
++your operating system environment, not by GCC. To figure them out,
++compile a small program for profiling using the system's installed C
++compiler and look at the assembler code that results.
++
++Older implementations of mcount expect the address of a counter
++variable to be loaded into some register. The name of this variable is
++'LP' followed by the number LABELNO, so you would generate
++the name using 'LP%d' in a fprintf.
++*/
++/* ToDo: fixme */
++#ifndef FUNCTION_PROFILER
++#define FUNCTION_PROFILER(FILE, LABELNO) \
++ fprintf((FILE), "/* profiler %d */", (LABELNO))
++#endif
++
++
++/*****************************************************************************
++ * Trampolines for Nested Functions *
++ *****************************************************************************/
++
++/*
++A C statement to output, on the stream FILE, assembler code for a
++block of data that contains the constant parts of a trampoline. This
++code should not include a label - the label is taken care of
++automatically.
++
++If you do not define this macro, it means no template is needed
++for the target. Do not define this macro on systems where the block move
++code to copy the trampoline into place would be larger than the code
++to generate it on the spot.
++*/
++/* ToDo: correct? */
++#define TRAMPOLINE_TEMPLATE(FILE) avr32_trampoline_template(FILE);
++
++
++/*
++A C expression for the size in bytes of the trampoline, as an integer.
++*/
++/* ToDo: fixme */
++#define TRAMPOLINE_SIZE 0x0C
++
++/*
++Alignment required for trampolines, in bits.
++
++If you don't define this macro, the value of BIGGEST_ALIGNMENT
++is used for aligning trampolines.
++*/
++#define TRAMPOLINE_ALIGNMENT 16
++
++/*
++A C statement to initialize the variable parts of a trampoline.
++ADDR is an RTX for the address of the trampoline; FNADDR is
++an RTX for the address of the nested function; STATIC_CHAIN is an
++RTX for the static chain value that should be passed to the function
++when it is called.
++*/
++#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) \
++ avr32_initialize_trampoline(ADDR, FNADDR, STATIC_CHAIN)
++
++
++/******************************************************************************
++ * Implicit Calls to Library Routines
++ *****************************************************************************/
++
++/* Tail calling. */
++
++/* A C expression that evaluates to true if it is ok to perform a sibling
++ call to DECL. */
++#define FUNCTION_OK_FOR_SIBCALL(DECL) 0
++
++#define OVERRIDE_OPTIONS avr32_override_options ()
++
++
++
++/******************************************************************************
++ * Addressing Modes
++ *****************************************************************************/
++
++/*
++A C expression that is nonzero if the machine supports pre-increment,
++pre-decrement, post-increment, or post-decrement addressing respectively.
++*/
++/*
++ AVR32 supports Rp++ and --Rp
++*/
++#define HAVE_PRE_INCREMENT 0
++#define HAVE_PRE_DECREMENT 1
++#define HAVE_POST_INCREMENT 1
++#define HAVE_POST_DECREMENT 0
++
++/*
++A C expression that is nonzero if the machine supports pre- or
++post-address side-effect generation involving constants other than
++the size of the memory operand.
++*/
++#define HAVE_PRE_MODIFY_DISP 0
++#define HAVE_POST_MODIFY_DISP 0
++
++/*
++A C expression that is nonzero if the machine supports pre- or
++post-address side-effect generation involving a register displacement.
++*/
++#define HAVE_PRE_MODIFY_REG 0
++#define HAVE_POST_MODIFY_REG 0
++
++/*
++A C expression that is 1 if the RTX X is a constant which
++is a valid address. On most machines, this can be defined as
++CONSTANT_P (X), but a few machines are more restrictive
++in which constant addresses are supported.
++
++CONSTANT_P accepts integer-values expressions whose values are
++not explicitly known, such as symbol_ref, label_ref, and
++high expressions and const arithmetic expressions, in
++addition to const_int and const_double expressions.
++*/
++#define CONSTANT_ADDRESS_P(X) CONSTANT_P(X)
++
++/*
++A number, the maximum number of registers that can appear in a valid
++memory address. Note that it is up to you to specify a value equal to
++the maximum number that GO_IF_LEGITIMATE_ADDRESS would ever
++accept.
++*/
++#define MAX_REGS_PER_ADDRESS 2
++
++/*
++A C compound statement with a conditional goto LABEL;
++executed if X (an RTX) is a legitimate memory address on the
++target machine for a memory operand of mode MODE.
++
++It usually pays to define several simpler macros to serve as
++subroutines for this one. Otherwise it may be too complicated to
++understand.
++
++This macro must exist in two variants: a strict variant and a
++non-strict one. The strict variant is used in the reload pass. It
++must be defined so that any pseudo-register that has not been
++allocated a hard register is considered a memory reference. In
++contexts where some kind of register is required, a pseudo-register
++with no hard register must be rejected.
++
++The non-strict variant is used in other passes. It must be defined to
++accept all pseudo-registers in every context where some kind of
++register is required.
++
++Compiler source files that want to use the strict variant of this
++macro define the macro REG_OK_STRICT. You should use an
++#ifdef REG_OK_STRICT conditional to define the strict variant
++in that case and the non-strict variant otherwise.
++
++Subroutines to check for acceptable registers for various purposes (one
++for base registers, one for index registers, and so on) are typically
++among the subroutines used to define GO_IF_LEGITIMATE_ADDRESS.
++Then only these subroutine macros need have two variants; the higher
++levels of macros may be the same whether strict or not.
++
++Normally, constant addresses which are the sum of a symbol_ref
++and an integer are stored inside a const RTX to mark them as
++constant. Therefore, there is no need to recognize such sums
++specifically as legitimate addresses. Normally you would simply
++recognize any const as legitimate.
++
++Usually PRINT_OPERAND_ADDRESS is not prepared to handle constant
++sums that are not marked with const. It assumes that a naked
++plus indicates indexing. If so, then you must reject such
++naked constant sums as illegitimate addresses, so that none of them will
++be given to PRINT_OPERAND_ADDRESS.
++
++On some machines, whether a symbolic address is legitimate depends on
++the section that the address refers to. On these machines, define the
++macro ENCODE_SECTION_INFO to store the information into the
++symbol_ref, and then check for it here. When you see a
++const, you will have to look inside it to find the
++symbol_ref in order to determine the section.
++
++The best way to modify the name string is by adding text to the
++beginning, with suitable punctuation to prevent any ambiguity. Allocate
++the new name in saveable_obstack. You will have to modify
++ASM_OUTPUT_LABELREF to remove and decode the added text and
++output the name accordingly, and define STRIP_NAME_ENCODING to
++access the original name string.
++
++You can check the information stored here into the symbol_ref in
++the definitions of the macros GO_IF_LEGITIMATE_ADDRESS and
++PRINT_OPERAND_ADDRESS.
++*/
++#ifdef REG_OK_STRICT
++# define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
++ do \
++ { \
++ if (avr32_legitimate_address(MODE, X, 1)) \
++ goto LABEL; \
++ } \
++ while (0)
++#else
++# define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
++ do \
++ { \
++ if (avr32_legitimate_address(MODE, X, 0)) \
++ goto LABEL; \
++ } \
++ while (0)
++#endif
++
++/*
++A C expression that is nonzero if X (assumed to be a reg
++RTX) is valid for use as a base register. For hard registers, it
++should always accept those which the hardware permits and reject the
++others. Whether the macro accepts or rejects pseudo registers must be
++controlled by REG_OK_STRICT as described above. This usually
++requires two variant definitions, of which REG_OK_STRICT
++controls the one actually used.
++*/
++#ifdef REG_OK_STRICT
++# define REG_OK_FOR_BASE_P(X) \
++ REGNO_OK_FOR_BASE_P(REGNO(X))
++#else
++# define REG_OK_FOR_BASE_P(X) \
++ ((REGNO(X) <= LAST_REGNUM) || (REGNO(X) >= FIRST_PSEUDO_REGISTER))
++#endif
++
++
++/*
++A C expression that is nonzero if X (assumed to be a reg
++RTX) is valid for use as an index register.
++
++The difference between an index register and a base register is that
++the index register may be scaled. If an address involves the sum of
++two registers, neither one of them scaled, then either one may be
++labeled the "base" and the other the "index"; but whichever
++labeling is used must fit the machine's constraints of which registers
++may serve in each capacity. The compiler will try both labelings,
++looking for one that is valid, and will reload one or both registers
++only if neither labeling works.
++*/
++#define REG_OK_FOR_INDEX_P(X) \
++ REG_OK_FOR_BASE_P(X)
++
++
++/*
++A C compound statement that attempts to replace X with a valid
++memory address for an operand of mode MODE. win will be a
++C statement label elsewhere in the code; the macro definition may use
++
++ GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN);
++
++to avoid further processing if the address has become legitimate.
++
++X will always be the result of a call to break_out_memory_refs,
++and OLDX will be the operand that was given to that function to produce
++X.
++
++The code generated by this macro should not alter the substructure of
++X. If it transforms X into a more legitimate form, it
++should assign X (which will always be a C variable) a new value.
++
++It is not necessary for this macro to come up with a legitimate
++address. The compiler has standard ways of doing so in all cases. In
++fact, it is safe for this macro to do nothing. But often a
++machine-dependent strategy can generate better code.
++*/
++#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
++ do \
++ { \
++ if (GET_CODE(X) == PLUS \
++ && GET_CODE(XEXP(X, 0)) == REG \
++ && GET_CODE(XEXP(X, 1)) == CONST_INT \
++ && !CONST_OK_FOR_CONSTRAINT_P(INTVAL(XEXP(X, 1)), \
++ 'K', "Ks16")) \
++ { \
++ rtx index = force_reg(SImode, XEXP(X, 1)); \
++ X = gen_rtx_PLUS( SImode, XEXP(X, 0), index); \
++ } \
++ GO_IF_LEGITIMATE_ADDRESS(MODE, X, WIN); \
++ } \
++ while(0)
++
++
++/*
++A C statement or compound statement with a conditional
++goto LABEL; executed if memory address X (an RTX) can have
++different meanings depending on the machine mode of the memory
++reference it is used for or if the address is valid for some modes
++but not others.
++
++Autoincrement and autodecrement addresses typically have mode-dependent
++effects because the amount of the increment or decrement is the size
++of the operand being addressed. Some machines have other mode-dependent
++addresses. Many RISC machines have no mode-dependent addresses.
++
++You may assume that ADDR is a valid address for the machine.
++*/
++#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
++ do \
++ { \
++ if (GET_CODE (ADDR) == POST_INC \
++ || GET_CODE (ADDR) == PRE_DEC) \
++ goto LABEL; \
++ } \
++ while (0)
++
++/*
++A C expression that is nonzero if X is a legitimate constant for
++an immediate operand on the target machine. You can assume that
++X satisfies CONSTANT_P, so you need not check this. In fact,
++'1' is a suitable definition for this macro on machines where
++anything CONSTANT_P is valid.
++*/
++#define LEGITIMATE_CONSTANT_P(X) avr32_legitimate_constant_p(X)
++
++
++/******************************************************************************
++ * Condition Code Status
++ *****************************************************************************/
++
++#define HAVE_conditional_move 1
++
++/*
++C code for a data type which is used for declaring the mdep
++component of cc_status. It defaults to int.
++
++This macro is not used on machines that do not use cc0.
++*/
++
++typedef struct
++{
++ int flags;
++ rtx value;
++ int fpflags;
++ rtx fpvalue;
++} avr32_status_reg;
++
++
++#define CC_STATUS_MDEP avr32_status_reg
++
++/*
++A C expression to initialize the mdep field to "empty".
++The default definition does nothing, since most machines don't use
++the field anyway. If you want to use the field, you should probably
++define this macro to initialize it.
++
++This macro is not used on machines that do not use cc0.
++*/
++
++#define CC_STATUS_MDEP_INIT \
++ (cc_status.mdep.flags = CC_NONE , cc_status.mdep.value = 0)
++
++#define FPCC_STATUS_INIT \
++ (cc_status.mdep.fpflags = CC_NONE , cc_status.mdep.fpvalue = 0)
++
++/*
++A C compound statement to set the components of cc_status
++appropriately for an insn INSN whose body is EXP. It is
++this macro's responsibility to recognize insns that set the condition
++code as a byproduct of other activity as well as those that explicitly
++set (cc0).
++
++This macro is not used on machines that do not use cc0.
++
++If there are insns that do not set the condition code but do alter
++other machine registers, this macro must check to see whether they
++invalidate the expressions that the condition code is recorded as
++reflecting. For example, on the 68000, insns that store in address
++registers do not set the condition code, which means that usually
++NOTICE_UPDATE_CC can leave cc_status unaltered for such
++insns. But suppose that the previous insn set the condition code
++based on location 'a4@@(102)' and the current insn stores a new
++value in 'a4'. Although the condition code is not changed by
++this, it will no longer be true that it reflects the contents of
++'a4@@(102)'. Therefore, NOTICE_UPDATE_CC must alter
++cc_status in this case to say that nothing is known about the
++condition code value.
++
++The definition of NOTICE_UPDATE_CC must be prepared to deal
++with the results of peephole optimization: insns whose patterns are
++parallel RTXs containing various reg, mem or
++constants which are just the operands. The RTL structure of these
++insns is not sufficient to indicate what the insns actually do. What
++NOTICE_UPDATE_CC should do when it sees one is just to run
++CC_STATUS_INIT.
++
++A possible definition of NOTICE_UPDATE_CC is to call a function
++that looks at an attribute (see Insn Attributes) named, for example,
++'cc'. This avoids having detailed information about patterns in
++two places, the 'md' file and in NOTICE_UPDATE_CC.
++*/
++
++#define NOTICE_UPDATE_CC(EXP, INSN) avr32_notice_update_cc(EXP, INSN)
++
++
++
++
++/******************************************************************************
++ * Describing Relative Costs of Operations
++ *****************************************************************************/
++
++
++
++/*
++A C expression for the cost of moving data of mode MODE from a
++register in class FROM to one in class TO. The classes are
++expressed using the enumeration values such as GENERAL_REGS. A
++value of 2 is the default; other values are interpreted relative to
++that.
++
++It is not required that the cost always equal 2 when FROM is the
++same as TO; on some machines it is expensive to move between
++registers if they are not general registers.
++
++If reload sees an insn consisting of a single set between two
++hard registers, and if REGISTER_MOVE_COST applied to their
++classes returns a value of 2, reload does not check to ensure that the
++constraints of the insn are met. Setting a cost of other than 2 will
++allow reload to verify that the constraints are met. You should do this
++if the movm pattern's constraints do not allow such copying.
++*/
++#define REGISTER_MOVE_COST(MODE, FROM, TO) \
++ ((GET_MODE_SIZE(MODE) <= 4) ? 2: \
++ (GET_MODE_SIZE(MODE) <= 8) ? 3: \
++ 4)
++
++/*
++A C expression for the cost of moving data of mode MODE between a
++register of class CLASS and memory; IN is zero if the value
++is to be written to memory, nonzero if it is to be read in. This cost
++is relative to those in REGISTER_MOVE_COST. If moving between
++registers and memory is more expensive than between two registers, you
++should define this macro to express the relative cost.
++
++If you do not define this macro, GCC uses a default cost of 4 plus
++the cost of copying via a secondary reload register, if one is
++needed. If your machine requires a secondary reload register to copy
++between memory and a register of CLASS but the reload mechanism is
++more complex than copying via an intermediate, define this macro to
++reflect the actual cost of the move.
++
++GCC defines the function memory_move_secondary_cost if
++secondary reloads are needed. It computes the costs due to copying via
++a secondary register. If your machine copies from memory using a
++secondary register in the conventional way but the default base value of
++4 is not correct for your machine, define this macro to add some other
++value to the result of that function. The arguments to that function
++are the same as to this macro.
++*/
++/*
++ Memory moves are costly
++*/
++#define MEMORY_MOVE_COST(MODE, CLASS, IN) 10
++/*
++ (((IN) ? ((GET_MODE_SIZE(MODE) < 4) ? 4 : \
++ (GET_MODE_SIZE(MODE) > 8) ? 6 : \
++ 3) \
++ : ((GET_MODE_SIZE(MODE) > 8) ? 4 : 2)))
++*/
++
++/*
++A C expression for the cost of a branch instruction. A value of 1 is
++the default; other values are interpreted relative to that.
++*/
++ /* Try to use conditionals as much as possible */
++#define BRANCH_COST (TARGET_BRANCH_PRED ? 3 : 5)
++
++/*A C expression for the maximum number of instructions to execute via conditional
++ execution instructions instead of a branch. A value of BRANCH_COST+1 is the default
++ if the machine does not use cc0, and 1 if it does use cc0.*/
++#define MAX_CONDITIONAL_EXECUTE 3
++
++/*
++Define this macro as a C expression which is nonzero if accessing less
++than a word of memory (i.e.: a char or a short) is no
++faster than accessing a word of memory, i.e., if such access
++require more than one instruction or if there is no difference in cost
++between byte and (aligned) word loads.
++
++When this macro is not defined, the compiler will access a field by
++finding the smallest containing object; when it is defined, a fullword
++load will be used if alignment permits. Unless bytes accesses are
++faster than word accesses, using word accesses is preferable since it
++may eliminate subsequent memory access if subsequent accesses occur to
++other fields in the same word of the structure, but to different bytes.
++*/
++#define SLOW_BYTE_ACCESS 1
++
++
++/*
++Define this macro if it is as good or better to call a constant
++function address than to call an address kept in a register.
++*/
++#define NO_FUNCTION_CSE
++
++
++/******************************************************************************
++ * Adjusting the Instruction Scheduler
++ *****************************************************************************/
++
++/*****************************************************************************
++ * Dividing the Output into Sections (Texts, Data, ...) *
++ *****************************************************************************/
++
++/*
++A C expression whose value is a string, including spacing, containing the
++assembler operation that should precede instructions and read-only data.
++Normally "\t.text" is right.
++*/
++#define TEXT_SECTION_ASM_OP "\t.text"
++/*
++A C statement that switches to the default section containing instructions.
++Normally this is not needed, as simply defining TEXT_SECTION_ASM_OP
++is enough. The MIPS port uses this to sort all functions after all data
++declarations.
++*/
++/* #define TEXT_SECTION */
++
++/*
++A C expression whose value is a string, including spacing, containing the
++assembler operation to identify the following data as writable initialized
++data. Normally "\t.data" is right.
++*/
++#define DATA_SECTION_ASM_OP "\t.data"
++
++/*
++If defined, a C expression whose value is a string, including spacing,
++containing the assembler operation to identify the following data as
++shared data. If not defined, DATA_SECTION_ASM_OP will be used.
++*/
++
++/*
++A C expression whose value is a string, including spacing, containing
++the assembler operation to identify the following data as read-only
++initialized data.
++*/
++#undef READONLY_DATA_SECTION_ASM_OP
++#define READONLY_DATA_SECTION_ASM_OP \
++ ((target_flags & USE_RODATA_SECTION) ? \
++ "\t.section\t.rodata" : \
++ TEXT_SECTION_ASM_OP )
++
++
++/*
++If defined, a C expression whose value is a string, including spacing,
++containing the assembler operation to identify the following data as
++uninitialized global data. If not defined, and neither
++ASM_OUTPUT_BSS nor ASM_OUTPUT_ALIGNED_BSS are defined,
++uninitialized global data will be output in the data section if
++-fno-common is passed, otherwise ASM_OUTPUT_COMMON will be
++used.
++*/
++#define BSS_SECTION_ASM_OP "\t.section\t.bss"
++
++/*
++If defined, a C expression whose value is a string, including spacing,
++containing the assembler operation to identify the following data as
++uninitialized global shared data. If not defined, and
++BSS_SECTION_ASM_OP is, the latter will be used.
++*/
++/*#define SHARED_BSS_SECTION_ASM_OP "\trseg\tshared_bbs_section:data:noroot(0)\n"*/
++/*
++If defined, a C expression whose value is a string, including spacing,
++containing the assembler operation to identify the following data as
++initialization code. If not defined, GCC will assume such a section does
++not exist.
++*/
++#undef INIT_SECTION_ASM_OP
++#define INIT_SECTION_ASM_OP "\t.section\t.init"
++
++/*
++If defined, a C expression whose value is a string, including spacing,
++containing the assembler operation to identify the following data as
++finalization code. If not defined, GCC will assume such a section does
++not exist.
++*/
++#undef FINI_SECTION_ASM_OP
++#define FINI_SECTION_ASM_OP "\t.section\t.fini"
++
++/*
++If defined, an ASM statement that switches to a different section
++via SECTION_OP, calls FUNCTION, and switches back to
++the text section. This is used in crtstuff.c if
++INIT_SECTION_ASM_OP or FINI_SECTION_ASM_OP to calls
++to initialization and finalization functions from the init and fini
++sections. By default, this macro uses a simple function call. Some
++ports need hand-crafted assembly code to avoid dependencies on
++registers initialized in the function prologue or to ensure that
++constant pools don't end up too far way in the text section.
++*/
++#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
++ asm ( SECTION_OP "\n" \
++ "mcall r6[" USER_LABEL_PREFIX #FUNC "@got]\n" \
++ TEXT_SECTION_ASM_OP);
++
++
++/*
++Define this macro to be an expression with a nonzero value if jump
++tables (for tablejump insns) should be output in the text
++section, along with the assembler instructions. Otherwise, the
++readonly data section is used.
++
++This macro is irrelevant if there is no separate readonly data section.
++*/
++#define JUMP_TABLES_IN_TEXT_SECTION 1
++
++
++/******************************************************************************
++ * Position Independent Code (PIC)
++ *****************************************************************************/
++
++#ifndef AVR32_ALWAYS_PIC
++#define AVR32_ALWAYS_PIC 0
++#endif
++
++/* GOT is set to r6 */
++#define PIC_OFFSET_TABLE_REGNUM INTERNAL_REGNUM(6)
++
++/*
++A C expression that is nonzero if X is a legitimate immediate
++operand on the target machine when generating position independent code.
++You can assume that X satisfies CONSTANT_P, so you need not
++check this. You can also assume flag_pic is true, so you need not
++check it either. You need not define this macro if all constants
++(including SYMBOL_REF) can be immediate operands when generating
++position independent code.
++*/
++/* We can't directly access anything that contains a symbol,
++ nor can we indirect via the constant pool. */
++#define LEGITIMATE_PIC_OPERAND_P(X) avr32_legitimate_pic_operand_p(X)
++
++
++/* We need to know when we are making a constant pool; this determines
++ whether data needs to be in the GOT or can be referenced via a GOT
++ offset. */
++extern int making_const_table;
++
++/******************************************************************************
++ * Defining the Output Assembler Language
++ *****************************************************************************/
++
++
++/*
++A C string constant describing how to begin a comment in the target
++assembler language. The compiler assumes that the comment will end at
++the end of the line.
++*/
++#define ASM_COMMENT_START "# "
++
++/*
++A C string constant for text to be output before each asm
++statement or group of consecutive ones. Normally this is
++"#APP", which is a comment that has no effect on most
++assemblers but tells the GNU assembler that it must check the lines
++that follow for all valid assembler constructs.
++*/
++#undef ASM_APP_ON
++#define ASM_APP_ON "#APP\n"
++
++/*
++A C string constant for text to be output after each asm
++statement or group of consecutive ones. Normally this is
++"#NO_APP", which tells the GNU assembler to resume making the
++time-saving assumptions that are valid for ordinary compiler output.
++*/
++#undef ASM_APP_OFF
++#define ASM_APP_OFF "#NO_APP\n"
++
++
++
++#define FILE_ASM_OP "\t.file\n"
++#define IDENT_ASM_OP "\t.ident\t"
++#define SET_ASM_OP "\t.set\t"
++
++
++/*
++ * Output assembly directives to switch to section name. The section
++ * should have attributes as specified by flags, which is a bit mask
++ * of the SECTION_* flags defined in 'output.h'. If align is nonzero,
++ * it contains an alignment in bytes to be used for the section,
++ * otherwise some target default should be used. Only targets that
++ * must specify an alignment within the section directive need pay
++ * attention to align -- we will still use ASM_OUTPUT_ALIGN.
++ *
++ * NOTE: This one must not be moved to avr32.c
++ */
++#undef TARGET_ASM_NAMED_SECTION
++#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
++
++
++/*
++You may define this macro as a C expression. You should define the
++expression to have a nonzero value if GCC should output the constant
++pool for a function before the code for the function, or a zero value if
++GCC should output the constant pool after the function. If you do
++not define this macro, the usual case, GCC will output the constant
++pool before the function.
++*/
++#define CONSTANT_POOL_BEFORE_FUNCTION 0
++
++
++/*
++Define this macro as a C expression which is nonzero if the constant
++EXP, of type tree, should be output after the code for a
++function. The compiler will normally output all constants before the
++function; you need not define this macro if this is OK.
++*/
++#define CONSTANT_AFTER_FUNCTION_P(EXP) 1
++
++
++/*
++Define this macro as a C expression which is nonzero if C is
++used as a logical line separator by the assembler.
++
++If you do not define this macro, the default is that only
++the character ';' is treated as a logical line separator.
++*/
++#define IS_ASM_LOGICAL_LINE_SEPARATOR(C) ((C) == '\n')
++
++
++/** Output of Uninitialized Variables **/
++
++/*
++A C statement (sans semicolon) to output to the stdio stream
++STREAM the assembler definition of a common-label named
++NAME whose size is SIZE bytes. The variable ROUNDED
++is the size rounded up to whatever alignment the caller wants.
++
++Use the expression assemble_name(STREAM, NAME) to
++output the name itself; before and after that, output the additional
++assembler syntax for defining the name, and a newline.
++
++This macro controls how the assembler definitions of uninitialized
++common global variables are output.
++*/
++/*
++#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
++ avr32_asm_output_common(STREAM, NAME, SIZE, ROUNDED)
++*/
++
++#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
++ do \
++ { \
++ fputs ("\t.comm ", (FILE)); \
++ assemble_name ((FILE), (NAME)); \
++ fprintf ((FILE), ",%d\n", (SIZE)); \
++ } \
++ while (0)
++
++/*
++ * Like ASM_OUTPUT_BSS except takes the required alignment as a
++ * separate, explicit argument. If you define this macro, it is used
++ * in place of ASM_OUTPUT_BSS, and gives you more flexibility in
++ * handling the required alignment of the variable. The alignment is
++ * specified as the number of bits.
++ *
++ * Try to use function asm_output_aligned_bss defined in file varasm.c
++ * when defining this macro.
++ */
++#define ASM_OUTPUT_ALIGNED_BSS(STREAM, DECL, NAME, SIZE, ALIGNMENT) \
++ asm_output_aligned_bss (STREAM, DECL, NAME, SIZE, ALIGNMENT)
++
++/*
++A C statement (sans semicolon) to output to the stdio stream
++STREAM the assembler definition of a local-common-label named
++NAME whose size is SIZE bytes. The variable ROUNDED
++is the size rounded up to whatever alignment the caller wants.
++
++Use the expression assemble_name(STREAM, NAME) to
++output the name itself; before and after that, output the additional
++assembler syntax for defining the name, and a newline.
++
++This macro controls how the assembler definitions of uninitialized
++static variables are output.
++*/
++#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
++ do \
++ { \
++ fputs ("\t.lcomm ", (FILE)); \
++ assemble_name ((FILE), (NAME)); \
++ fprintf ((FILE), ",%d, %d\n", (SIZE), 2); \
++ } \
++ while (0)
++
++
++/*
++A C statement (sans semicolon) to output to the stdio stream
++STREAM the assembler definition of a label named NAME.
++Use the expression assemble_name(STREAM, NAME) to
++output the name itself; before and after that, output the additional
++assembler syntax for defining the name, and a newline.
++*/
++#define ASM_OUTPUT_LABEL(STREAM, NAME) avr32_asm_output_label(STREAM, NAME)
++
++/* A C string containing the appropriate assembler directive to
++ * specify the size of a symbol, without any arguments. On systems
++ * that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"';
++ * on other systems, the default is not to define this macro.
++ *
++ * Define this macro only if it is correct to use the default
++ * definitions of ASM_ OUTPUT_SIZE_DIRECTIVE and
++ * ASM_OUTPUT_MEASURED_SIZE for your system. If you need your own
++ * custom definitions of those macros, or if you do not need explicit
++ * symbol sizes at all, do not define this macro.
++ */
++#define SIZE_ASM_OP "\t.size\t"
++
++
++/*
++A C statement (sans semicolon) to output to the stdio stream
++STREAM some commands that will make the label NAME global;
++that is, available for reference from other files. Use the expression
++assemble_name(STREAM, NAME) to output the name
++itself; before and after that, output the additional assembler syntax
++for making that name global, and a newline.
++*/
++#define GLOBAL_ASM_OP "\t.globl\t"
++
++
++
++/*
++A C expression which evaluates to true if the target supports weak symbols.
++
++If you don't define this macro, defaults.h provides a default
++definition. If either ASM_WEAKEN_LABEL or ASM_WEAKEN_DECL
++is defined, the default definition is '1'; otherwise, it is
++'0'. Define this macro if you want to control weak symbol support
++with a compiler flag such as -melf.
++*/
++#define SUPPORTS_WEAK 1
++
++/*
++A C statement (sans semicolon) to output to the stdio stream
++STREAM a reference in assembler syntax to a label named
++NAME. This should add '_' to the front of the name, if that
++is customary on your operating system, as it is in most Berkeley Unix
++systems. This macro is used in assemble_name.
++*/
++#define ASM_OUTPUT_LABELREF(STREAM, NAME) \
++ avr32_asm_output_labelref(STREAM, NAME)
++
++
++
++/*
++A C expression to assign to OUTVAR (which is a variable of type
++char *) a newly allocated string made from the string
++NAME and the number NUMBER, with some suitable punctuation
++added. Use alloca to get space for the string.
++
++The string will be used as an argument to ASM_OUTPUT_LABELREF to
++produce an assembler label for an internal static variable whose name is
++NAME. Therefore, the string must be such as to result in valid
++assembler code. The argument NUMBER is different each time this
++macro is executed; it prevents conflicts between similarly-named
++internal static variables in different scopes.
++
++Ideally this string should not be a valid C identifier, to prevent any
++conflict with the user's own symbols. Most assemblers allow periods
++or percent signs in assembler symbols; putting at least one of these
++between the name and the number will suffice.
++*/
++#define ASM_FORMAT_PRIVATE_NAME(OUTVAR, NAME, NUMBER) \
++ do \
++ { \
++ (OUTVAR) = (char *) alloca (strlen ((NAME)) + 10); \
++ sprintf ((OUTVAR), "%s.%d", (NAME), (NUMBER)); \
++ } \
++ while (0)
++
++
++/** Macros Controlling Initialization Routines **/
++
++
++/*
++If defined, main will not call __main as described above.
++This macro should be defined for systems that control start-up code
++on a symbol-by-symbol basis, such as OSF/1, and should not
++be defined explicitly for systems that support INIT_SECTION_ASM_OP.
++*/
++/*
++ __main is not defined when debugging.
++*/
++#define HAS_INIT_SECTION
++
++
++/** Output of Assembler Instructions **/
++
++/*
++A C initializer containing the assembler's names for the machine
++registers, each one as a C string constant. This is what translates
++register numbers in the compiler into assembler language.
++*/
++
++#define REGISTER_NAMES \
++{ \
++ "pc", "lr", \
++ "sp", "r12", \
++ "r11", "r10", \
++ "r9", "r8", \
++ "r7", "r6", \
++ "r5", "r4", \
++ "r3", "r2", \
++ "r1", "r0", \
++ "f15","f14", \
++ "f13","f12", \
++ "f11","f10", \
++ "f9", "f8", \
++ "f7", "f6", \
++ "f5", "f4", \
++ "f3", "f2", \
++ "f1", "f0" \
++}
++
++/*
++A C compound statement to output to stdio stream STREAM the
++assembler syntax for an instruction operand X. X is an
++RTL expression.
++
++CODE is a value that can be used to specify one of several ways
++of printing the operand. It is used when identical operands must be
++printed differently depending on the context. CODE comes from
++the '%' specification that was used to request printing of the
++operand. If the specification was just '%digit' then
++CODE is 0; if the specification was '%ltr digit'
++then CODE is the ASCII code for ltr.
++
++If X is a register, this macro should print the register's name.
++The names can be found in an array reg_names whose type is
++char *[]. reg_names is initialized from REGISTER_NAMES.
++
++When the machine description has a specification '%punct'
++(a '%' followed by a punctuation character), this macro is called
++with a null pointer for X and the punctuation character for
++CODE.
++*/
++#define PRINT_OPERAND(STREAM, X, CODE) avr32_print_operand(STREAM, X, CODE)
++
++/* A C statement to be executed just prior to the output of
++ assembler code for INSN, to modify the extracted operands so
++ they will be output differently.
++
++ Here the argument OPVEC is the vector containing the operands
++ extracted from INSN, and NOPERANDS is the number of elements of
++ the vector which contain meaningful data for this insn.
++ The contents of this vector are what will be used to convert the insn
++ template into assembler code, so you can change the assembler output
++ by changing the contents of the vector. */
++#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
++ avr32_final_prescan_insn ((INSN), (OPVEC), (NOPERANDS))
++
++/*
++A C expression which evaluates to true if CODE is a valid
++punctuation character for use in the PRINT_OPERAND macro. If
++PRINT_OPERAND_PUNCT_VALID_P is not defined, it means that no
++punctuation characters (except for the standard one, '%') are used
++in this way.
++*/
++/*
++ 'm' refers to the most significant word in a two-register mode.
++*/
++#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == 'm' || (CODE) == 'e')
++
++/*
++A C compound statement to output to stdio stream STREAM the
++assembler syntax for an instruction operand that is a memory reference
++whose address is X. X is an RTL expression.
++
++On some machines, the syntax for a symbolic address depends on the
++section that the address refers to. On these machines, define the macro
++ENCODE_SECTION_INFO to store the information into the
++symbol_ref, and then check for it here. (see Assembler Format.)
++*/
++#define PRINT_OPERAND_ADDRESS(STREAM, X) avr32_print_operand_address(STREAM, X)
++
++
++/** Output of Dispatch Tables **/
++
++/*
++ * A C statement to output to the stdio stream stream an assembler
++ * pseudo-instruction to generate a difference between two
++ * labels. value and rel are the numbers of two internal labels. The
++ * definitions of these labels are output using
++ * (*targetm.asm_out.internal_label), and they must be printed in the
++ * same way here. For example,
++ *
++ * fprintf (stream, "\t.word L%d-L%d\n",
++ * value, rel)
++ *
++ * You must provide this macro on machines where the addresses in a
++ * dispatch table are relative to the table's own address. If defined,
++ * GCC will also use this macro on all machines when producing
++ * PIC. body is the body of the ADDR_DIFF_VEC; it is provided so that
++ * the mode and flags can be read.
++ */
++#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
++ fprintf(STREAM, "\tbral\t%sL%d\n", LOCAL_LABEL_PREFIX, VALUE)
++
++/*
++This macro should be provided on machines where the addresses
++in a dispatch table are absolute.
++
++The definition should be a C statement to output to the stdio stream
++STREAM an assembler pseudo-instruction to generate a reference to
++a label. VALUE is the number of an internal label whose
++definition is output using ASM_OUTPUT_INTERNAL_LABEL.
++For example,
++
++fprintf(STREAM, "\t.word L%d\n", VALUE)
++*/
++
++#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
++ fprintf(STREAM, "\t.long %sL%d\n", LOCAL_LABEL_PREFIX, VALUE)
++
++/** Assembler Commands for Exception Regions */
++
++/* ToDo: All of this subsection */
++
++/** Assembler Commands for Alignment */
++
++
++/*
++A C statement to output to the stdio stream STREAM an assembler
++command to advance the location counter to a multiple of 2 to the
++POWER bytes. POWER will be a C expression of type int.
++*/
++#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
++ do \
++ { \
++ if ((POWER) != 0) \
++ fprintf(STREAM, "\t.align\t%d\n", POWER); \
++ } \
++ while (0)
++
++/*
++Like ASM_OUTPUT_ALIGN, except that the \nop" instruction is used for padding, if
++necessary.
++*/
++#define ASM_OUTPUT_ALIGN_WITH_NOP(STREAM, POWER) \
++ fprintf(STREAM, "\t.balignw\t%d, 0xd703\n", (1 << POWER))
++
++
++
++/******************************************************************************
++ * Controlling Debugging Information Format
++ *****************************************************************************/
++
++/* How to renumber registers for dbx and gdb. */
++#define DBX_REGISTER_NUMBER(REGNO) ASM_REGNUM (REGNO)
++
++/* The DWARF 2 CFA column which tracks the return address. */
++#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM(LR_REGNUM)
++
++/*
++Define this macro if GCC should produce dwarf version 2 format
++debugging output in response to the -g option.
++
++To support optional call frame debugging information, you must also
++define INCOMING_RETURN_ADDR_RTX and either set
++RTX_FRAME_RELATED_P on the prologue insns if you use RTL for the
++prologue, or call dwarf2out_def_cfa and dwarf2out_reg_save
++as appropriate from TARGET_ASM_FUNCTION_PROLOGUE if you don't.
++*/
++#define DWARF2_DEBUGGING_INFO 1
++
++
++#define DWARF2_ASM_LINE_DEBUG_INFO 1
++#define DWARF2_FRAME_INFO 1
++
++
++/******************************************************************************
++ * Miscellaneous Parameters
++ *****************************************************************************/
++
++/* ToDo: a lot */
++
++/*
++An alias for a machine mode name. This is the machine mode that
++elements of a jump-table should have.
++*/
++#define CASE_VECTOR_MODE SImode
++
++/*
++Define this macro to be a C expression to indicate when jump-tables
++should contain relative addresses. If jump-tables never contain
++relative addresses, then you need not define this macro.
++*/
++#define CASE_VECTOR_PC_RELATIVE 0
++
++/*
++The maximum number of bytes that a single instruction can move quickly
++between memory and registers or between two memory locations.
++*/
++#define MOVE_MAX (2*UNITS_PER_WORD)
++
++
++/* A C expression that is nonzero if on this machine the number of bits actually used
++ for the count of a shift operation is equal to the number of bits needed to represent
++ the size of the object being shifted. When this macro is nonzero, the compiler will
++ assume that it is safe to omit a sign-extend, zero-extend, and certain bitwise 'and'
++ instructions that truncates the count of a shift operation. On machines that have
++ instructions that act on bit-fields at variable positions, which may include 'bit test'
++ 378 GNU Compiler Collection (GCC) Internals
++ instructions, a nonzero SHIFT_COUNT_TRUNCATED also enables deletion of truncations
++ of the values that serve as arguments to bit-field instructions.
++ If both types of instructions truncate the count (for shifts) and position (for bit-field
++ operations), or if no variable-position bit-field instructions exist, you should define
++ this macro.
++ However, on some machines, such as the 80386 and the 680x0, truncation only applies
++ to shift operations and not the (real or pretended) bit-field operations. Define SHIFT_
++ COUNT_TRUNCATED to be zero on such machines. Instead, add patterns to the 'md' file
++ that include the implied truncation of the shift instructions.
++ You need not de ne this macro if it would always have the value of zero. */
++#define SHIFT_COUNT_TRUNCATED 1
++
++/*
++A C expression which is nonzero if on this machine it is safe to
++convert an integer of INPREC bits to one of OUTPREC
++bits (where OUTPREC is smaller than INPREC) by merely
++operating on it as if it had only OUTPREC bits.
++
++On many machines, this expression can be 1.
++
++When TRULY_NOOP_TRUNCATION returns 1 for a pair of sizes for
++modes for which MODES_TIEABLE_P is 0, suboptimal code can result.
++If this is the case, making TRULY_NOOP_TRUNCATION return 0 in
++such cases may improve things.
++*/
++#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
++
++/*
++An alias for the machine mode for pointers. On most machines, define
++this to be the integer mode corresponding to the width of a hardware
++pointer; SImode on 32-bit machine or DImode on 64-bit machines.
++On some machines you must define this to be one of the partial integer
++modes, such as PSImode.
++
++The width of Pmode must be at least as large as the value of
++POINTER_SIZE. If it is not equal, you must define the macro
++POINTERS_EXTEND_UNSIGNED to specify how pointers are extended
++to Pmode.
++*/
++#define Pmode SImode
++
++/*
++An alias for the machine mode used for memory references to functions
++being called, in call RTL expressions. On most machines this
++should be QImode.
++*/
++#define FUNCTION_MODE SImode
++
++
++#define REG_S_P(x) \
++ (REG_P (x) || (GET_CODE (x) == SUBREG && REG_P (XEXP (x, 0))))
++
++
++/* If defined, modifies the length assigned to instruction INSN as a
++ function of the context in which it is used. LENGTH is an lvalue
++ that contains the initially computed length of the insn and should
++ be updated with the correct length of the insn. */
++#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
++ ((LENGTH) = avr32_adjust_insn_length ((INSN), (LENGTH)))
++
++
++#define CLZ_DEFINED_VALUE_AT_ZERO(mode, value) \
++ (value = 32, (mode == SImode))
++
++#define CTZ_DEFINED_VALUE_AT_ZERO(mode, value) \
++ (value = 32, (mode == SImode))
++
++#define UNITS_PER_SIMD_WORD UNITS_PER_WORD
++
++#define STORE_FLAG_VALUE 1
++
++enum avr32_builtins
++{
++ AVR32_BUILTIN_MTSR,
++ AVR32_BUILTIN_MFSR,
++ AVR32_BUILTIN_MTDR,
++ AVR32_BUILTIN_MFDR,
++ AVR32_BUILTIN_CACHE,
++ AVR32_BUILTIN_SYNC,
++ AVR32_BUILTIN_TLBR,
++ AVR32_BUILTIN_TLBS,
++ AVR32_BUILTIN_TLBW,
++ AVR32_BUILTIN_BREAKPOINT,
++ AVR32_BUILTIN_XCHG,
++ AVR32_BUILTIN_LDXI,
++ AVR32_BUILTIN_BSWAP16,
++ AVR32_BUILTIN_BSWAP32,
++ AVR32_BUILTIN_COP,
++ AVR32_BUILTIN_MVCR_W,
++ AVR32_BUILTIN_MVRC_W,
++ AVR32_BUILTIN_MVCR_D,
++ AVR32_BUILTIN_MVRC_D,
++ AVR32_BUILTIN_MULSATHH_H,
++ AVR32_BUILTIN_MULSATHH_W,
++ AVR32_BUILTIN_MULSATRNDHH_H,
++ AVR32_BUILTIN_MULSATRNDWH_W,
++ AVR32_BUILTIN_MULSATWH_W,
++ AVR32_BUILTIN_MACSATHH_W,
++ AVR32_BUILTIN_SATADD_H,
++ AVR32_BUILTIN_SATSUB_H,
++ AVR32_BUILTIN_SATADD_W,
++ AVR32_BUILTIN_SATSUB_W,
++ AVR32_BUILTIN_MULWH_D,
++ AVR32_BUILTIN_MULNWH_D,
++ AVR32_BUILTIN_MACWH_D,
++ AVR32_BUILTIN_MACHH_D,
++ AVR32_BUILTIN_MUSFR,
++ AVR32_BUILTIN_MUSTR,
++ AVR32_BUILTIN_SATS,
++ AVR32_BUILTIN_SATU,
++ AVR32_BUILTIN_SATRNDS,
++ AVR32_BUILTIN_SATRNDU
++};
++
++
++#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) \
++ ((MODE == SFmode) || (MODE == DFmode))
++
++#define RENAME_LIBRARY_SET ".set"
++
++/* Make ABI_NAME an alias for __GCC_NAME. */
++#define RENAME_LIBRARY(GCC_NAME, ABI_NAME) \
++ __asm__ (".globl\t__avr32_" #ABI_NAME "\n" \
++ ".set\t__avr32_" #ABI_NAME \
++ ", __" #GCC_NAME "\n");
++
++/* Give libgcc functions avr32 ABI name. */
++#ifdef L_muldi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (muldi3, mul64)
++#endif
++#ifdef L_divdi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (divdi3, sdiv64)
++#endif
++#ifdef L_udivdi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (udivdi3, udiv64)
++#endif
++#ifdef L_moddi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (moddi3, smod64)
++#endif
++#ifdef L_umoddi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (umoddi3, umod64)
++#endif
++#ifdef L_ashldi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashldi3, lsl64)
++#endif
++#ifdef L_lshrdi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (lshrdi3, lsr64)
++#endif
++#ifdef L_ashrdi3
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (ashrdi3, asr64)
++#endif
++
++#ifdef L_fixsfdi
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixsfdi, f32_to_s64)
++#endif
++#ifdef L_fixunssfdi
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (fixunssfdi, f32_to_u64)
++#endif
++#ifdef L_floatdidf
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdidf, s64_to_f64)
++#endif
++#ifdef L_floatdisf
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, s64_to_f32)
++#endif
++
++#ifdef L_addsub_sf
++#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (addsf3, f32_add); RENAME_LIBRARY (subsf3, f32_sub)
++#endif
++
++#endif
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32.md gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.md
+--- gcc-4.0.2/gcc/config/avr32/avr32.md 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32.md 2006-11-09 15:04:35.000000000 +0100
+@@ -0,0 +1,4694 @@
++;; AVR32 machine description file.
++;; Copyright 2003-2006 Atmel Corporation.
++;;
++;; Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++;;
++;; This file is part of GCC.
++;;
++;; This program is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2 of the License, or
++;; (at your option) any later version.
++;;
++;; This program is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with this program; if not, write to the Free Software
++;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++;; -*- Mode: Scheme -*-
++
++(define_attr "type" "alu,alu2,alu_sat,mulhh,mulwh,mulww_w,mulww_d,div,machh_w,macww_w,macww_d,branch,call,load,load_rm,store,load2,load4,store2,store4,fmul,fcmps,fcmpd,fcast,fmv,fmvcpu,fldd,fstd,flds,fsts,fstm"
++ (const_string "alu"))
++
++
++(define_attr "cc" "none,set_vncz,set_ncz,set_cz,set_z,bld,compare,clobber,call_set,fpcompare,from_fpcc"
++ (const_string "none"))
++
++
++(define_attr "pipeline" "ap,uc"
++ (const_string "ap"))
++
++(define_attr "length" ""
++ (const_int 4))
++
++
++;; Uses of UNSPEC in this file:
++(define_constants
++ [(UNSPEC_PUSHM 0)
++ (UNSPEC_POPM 1)
++ (UNSPEC_UDIVMODSI4_INTERNAL 2)
++ (UNSPEC_DIVMODSI4_INTERNAL 3)
++ (UNSPEC_STM 4)
++ (UNSPEC_LDM 5)
++ (UNSPEC_MOVSICC 6)
++ (UNSPEC_ADDSICC 7)
++ (UNSPEC_COND_MI 8)
++ (UNSPEC_COND_PL 9)
++ (UNSPEC_PIC_SYM 10)
++ (UNSPEC_PIC_BASE 11)
++ (UNSPEC_STORE_MULTIPLE 12)
++ (UNSPEC_STMFP 13)
++ (UNSPEC_FPCC_TO_REG 14)
++ (UNSPEC_REG_TO_CC 15)
++ (UNSPEC_FORCE_MINIPOOL 16)
++ (UNSPEC_SATS 17)
++ (UNSPEC_SATU 18)
++ (UNSPEC_SATRNDS 19)
++ (UNSPEC_SATRNDU 20)
++ ])
++
++(define_constants
++ [(VUNSPEC_EPILOGUE 0)
++ (VUNSPEC_CACHE 1)
++ (VUNSPEC_MTSR 2)
++ (VUNSPEC_MFSR 3)
++ (VUNSPEC_BLOCKAGE 4)
++ (VUNSPEC_SYNC 5)
++ (VUNSPEC_TLBR 6)
++ (VUNSPEC_TLBW 7)
++ (VUNSPEC_TLBS 8)
++ (VUNSPEC_BREAKPOINT 9)
++ (VUNSPEC_MTDR 10)
++ (VUNSPEC_MFDR 11)
++ (VUNSPEC_MVCR 12)
++ (VUNSPEC_MVRC 13)
++ (VUNSPEC_COP 14)
++ (VUNSPEC_ALIGN 15)
++ (VUNSPEC_POOL_START 16)
++ (VUNSPEC_POOL_END 17)
++ (VUNSPEC_POOL_4 18)
++ (VUNSPEC_POOL_8 19)
++ (VUNSPEC_MUSFR 20)
++ (VUNSPEC_MUSTR 21)
++ ])
++
++(define_constants
++ [
++ ;; R7 = 15-7 = 8
++ (FP_REGNUM 8)
++ ;; Return Register = R12 = 15 - 12 = 3
++ (RETVAL_REGNUM 3)
++ ;; SP = R13 = 15 - 13 = 2
++ (SP_REGNUM 2)
++ ;; LR = R14 = 15 - 14 = 1
++ (LR_REGNUM 1)
++ ;; PC = R15 = 15 - 15 = 0
++ (PC_REGNUM 0)
++ ;; FPSR = GENERAL_REGS + 1 = 17
++ (FPCC_REGNUM 17)
++ ])
++
++
++
++
++;;******************************************************************************
++;; Macros
++;;******************************************************************************
++
++;; Integer Modes for basic alu insns
++(define_mode_macro INTM [SI HI QI])
++(define_mode_attr alu_cc_attr [(SI "set_vncz") (HI "clobber") (QI "clobber")])
++
++;; Move word modes
++(define_mode_macro MOVM [SI V2HI V4QI])
++
++;; For mov/addcc insns
++(define_mode_macro ADDCC [SI HI QI])
++(define_mode_macro MOVCC [SI HI QI])
++(define_mode_macro CMP [DI SI HI QI])
++(define_mode_attr cmp_constraint [(DI "r") (SI "rKs21") (HI "r") (QI "r")])
++(define_mode_attr cmp_predicate [(DI "register_operand")
++ (SI "register_immediate_operand")
++ (HI "register_operand")
++ (QI "register_operand")])
++
++;; For all conditional insns
++(define_code_macro any_cond [eq ne gt ge lt le gtu geu ltu leu])
++(define_code_attr cond [(eq "eq") (ne "ne") (gt "gt") (ge "ge") (lt "lt") (le "le")
++ (gtu "hi") (geu "hs") (ltu "lo") (leu "ls")])
++(define_code_attr invcond [(eq "ne") (ne "eq") (gt "le") (ge "lt") (lt "ge") (le "gt")
++ (gtu "ls") (geu "lo") (ltu "hs") (leu "hi")])
++
++;; For logical operations
++(define_code_macro logical [and ior xor])
++(define_code_attr logical_insn [(and "and") (ior "or") (xor "eor")])
++
++;; Load the predicates
++(include "predicates.md")
++
++
++;;******************************************************************************
++;; Automaton pipeline description for avr32
++;;******************************************************************************
++
++(define_automaton "avr32_ap")
++
++
++(define_cpu_unit "is" "avr32_ap")
++(define_cpu_unit "a1,m1,da" "avr32_ap")
++(define_cpu_unit "a2,m2,d" "avr32_ap")
++
++;;Alu instructions
++(define_insn_reservation "alu_op" 1
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "alu"))
++ "is,a1,a2")
++
++(define_insn_reservation "alu2_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "alu2"))
++ "is,is+a1,a1+a2,a2")
++
++(define_insn_reservation "alu_sat_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "alu_sat"))
++ "is,a1,a2")
++
++
++;;Mul instructions
++(define_insn_reservation "mulhh_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "mulhh,mulwh"))
++ "is,m1,m2")
++
++(define_insn_reservation "mulww_w_op" 3
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "mulww_w"))
++ "is,m1,m1+m2,m2")
++
++(define_insn_reservation "mulww_d_op" 5
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "mulww_d"))
++ "is,m1,m1+m2,m1+m2,m2,m2")
++
++(define_insn_reservation "div_op" 33
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "div"))
++ "is,m1,m1*31 + m2*31,m2")
++
++(define_insn_reservation "machh_w_op" 3
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "machh_w"))
++ "is*2,m1,m2")
++
++
++(define_insn_reservation "macww_w_op" 4
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "macww_w"))
++ "is*2,m1,m1,m2")
++
++
++(define_insn_reservation "macww_d_op" 6
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "macww_d"))
++ "is*2,m1,m1+m2,m1+m2,m2")
++
++;;Bypasses for Mac instructions, because of accumulator cache.
++;;Set latency as low as possible in order to let the compiler let
++;;mul -> mac and mac -> mac combinations which use the same
++;;accumulator cache be placed close together to avoid any
++;;instructions which can ruin the accumulator cache come inbetween.
++(define_bypass 4 "machh_w_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++(define_bypass 5 "macww_w_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++(define_bypass 7 "macww_d_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++
++(define_bypass 3 "mulhh_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++(define_bypass 4 "mulww_w_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++(define_bypass 6 "mulww_d_op" "alu_op,alu2_op,alu_sat_op,load_op" "avr32_mul_waw_bypass")
++
++
++;;Bypasses for all mul/mac instructions followed by an instruction
++;;which reads the output AND writes the result to the same register.
++;;This will generate an Write After Write hazard which gives an
++;;extra cycle before the result is ready.
++(define_bypass 0 "machh_w_op" "machh_w_op" "avr32_valid_macmac_bypass")
++(define_bypass 0 "macww_w_op" "macww_w_op" "avr32_valid_macmac_bypass")
++(define_bypass 0 "macww_d_op" "macww_d_op" "avr32_valid_macmac_bypass")
++
++(define_bypass 0 "mulhh_op" "machh_w_op" "avr32_valid_mulmac_bypass")
++(define_bypass 0 "mulww_w_op" "macww_w_op" "avr32_valid_mulmac_bypass")
++(define_bypass 0 "mulww_d_op" "macww_d_op" "avr32_valid_mulmac_bypass")
++
++;;Branch and call instructions
++;;We assume that all branches and rcalls are predicted correctly :-)
++;;while calls use a lot of cycles.
++(define_insn_reservation "branch_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "branch"))
++ "nothing")
++
++(define_insn_reservation "call_op" 10
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "call"))
++ "nothing")
++
++
++;;Load store instructions
++(define_insn_reservation "load_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "load"))
++ "is,da,d")
++
++(define_insn_reservation "load_rm_op" 3
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "load_rm"))
++ "is,da,d")
++
++
++(define_insn_reservation "store_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "store"))
++ "is,da,d")
++
++
++(define_insn_reservation "load_double_op" 3
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "load2"))
++ "is,da,da+d,d")
++
++(define_insn_reservation "load_quad_op" 4
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "load4"))
++ "is,da,da+d,da+d,d")
++
++(define_insn_reservation "store_double_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "store2"))
++ "is,da,da+d,d")
++
++
++(define_insn_reservation "store_quad_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "store4"))
++ "is,da,da+d,da+d,d")
++
++;;For store the operand to write to memory is read in d and
++;;the real latency between any instruction and a store is therefore
++;;one less than for the instructions which reads the operands in the first
++;;excecution stage
++(define_bypass 2 "load_double_op" "store_double_op" "avr32_store_bypass")
++(define_bypass 3 "load_quad_op" "store_quad_op" "avr32_store_bypass")
++(define_bypass 1 "load_op" "store_op" "avr32_store_bypass")
++(define_bypass 2 "load_rm_op" "store_op" "avr32_store_bypass")
++(define_bypass 1 "alu_sat_op" "store_op" "avr32_store_bypass")
++(define_bypass 1 "alu2_op" "store_op" "avr32_store_bypass")
++(define_bypass 1 "mulhh_op" "store_op" "avr32_store_bypass")
++(define_bypass 2 "mulww_w_op" "store_op" "avr32_store_bypass")
++(define_bypass 4 "mulww_d_op" "store_op" "avr32_store_bypass" )
++(define_bypass 2 "machh_w_op" "store_op" "avr32_store_bypass")
++(define_bypass 3 "macww_w_op" "store_op" "avr32_store_bypass")
++(define_bypass 5 "macww_d_op" "store_op" "avr32_store_bypass")
++
++
++; Bypass for load double operation. If only the first loaded word is needed
++; then the latency is 2
++(define_bypass 2 "load_double_op"
++ "load_op,load_rm_op,alu_sat_op, alu2_op, alu_op, mulhh_op, mulww_w_op,
++ mulww_d_op, machh_w_op, macww_w_op, macww_d_op"
++ "avr32_valid_load_double_bypass")
++
++; Bypass for load quad operation. If only the first or second loaded word is needed
++; we set the latency to 2
++(define_bypass 2 "load_quad_op"
++ "load_op,load_rm_op,alu_sat_op, alu2_op, alu_op, mulhh_op, mulww_w_op,
++ mulww_d_op, machh_w_op, macww_w_op, macww_d_op"
++ "avr32_valid_load_quad_bypass")
++
++
++;;******************************************************************************
++;; End of Automaton pipeline description for avr32
++;;******************************************************************************
++
++
++
++;;=============================================================================
++;; move
++;;-----------------------------------------------------------------------------
++
++;;== char - 8 bits ============================================================
++(define_expand "movqi"
++ [(set (match_operand:QI 0 "nonimmediate_operand" "")
++ (match_operand:QI 1 "general_operand" ""))]
++ ""
++ {
++ if ( !no_new_pseudos ){
++ if (GET_CODE (operands[1]) == MEM && optimize){
++ rtx reg = gen_reg_rtx (SImode);
++
++ emit_insn (gen_zero_extendqisi2 (reg, operands[1]));
++ operands[1] = gen_lowpart (QImode, reg);
++ }
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (QImode, operands[1]);
++ }
++
++ })
++
++(define_insn "*movqi_internal"
++ [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r")
++ (match_operand:QI 1 "general_operand" "rKs08,m,r,i"))]
++ ""
++ "@
++ mov\t%0, %1
++ ld.ub\t%0, %1
++ st.b\t%0, %1
++ mov\t%0, %1"
++ [(set_attr "length" "2,4,4,4")
++ (set_attr "type" "alu,load_rm,store,alu")])
++
++
++
++;;== short - 16 bits ==========================================================
++(define_expand "movhi"
++ [(set (match_operand:HI 0 "nonimmediate_operand" "")
++ (match_operand:HI 1 "general_operand" ""))]
++ ""
++ {
++ if ( !no_new_pseudos ){
++ if (GET_CODE (operands[1]) == MEM && optimize){
++ rtx reg = gen_reg_rtx (SImode);
++
++ emit_insn (gen_extendhisi2 (reg, operands[1]));
++ operands[1] = gen_lowpart (HImode, reg);
++ }
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (HImode, operands[1]);
++ }
++
++ })
++
++(define_insn "*movhi_internal"
++ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r")
++ (match_operand:HI 1 "general_operand" "rKs08,m,r,i"))]
++ ""
++ "@
++ mov\t%0, %1
++ ld.sh\t%0, %1
++ st.h\t%0, %1
++ mov\t%0, %1"
++ [(set_attr "length" "2,4,4,4")
++ (set_attr "type" "alu,load_rm,store,alu")])
++
++
++;;== int - 32 bits ============================================================
++
++(define_expand "movmisalignsi"
++ [(set (match_operand:SI 0 "nonimmediate_operand" "")
++ (match_operand:SI 1 "nonimmediate_operand" ""))]
++ "TARGET_UNALIGNED_WORD"
++ {
++ }
++)
++
++(define_expand "mov<mode>"
++ [(set (match_operand:MOVM 0 "nonimmediate_operand" "")
++ (match_operand:MOVM 1 "general_operand" ""))]
++ ""
++ {
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++
++
++ /* Check for out of range immediate constants as these may
++ occur during reloading, since it seems like reload does
++ not check if the immediate is legitimate. Don't know if
++ this is a bug? */
++ if ( reload_in_progress
++ && GET_CODE(operands[1]) == CONST_INT
++ && !avr32_const_ok_for_constraint_p(INTVAL(operands[1]), 'K', "Ks21") ){
++ operands[1] = force_const_mem(SImode, operands[1]);
++ }
++
++ if ( (flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS)
++ && !avr32_legitimate_pic_operand_p(operands[1]) )
++ operands[1] = legitimize_pic_address (operands[1], <MODE>mode,
++ (no_new_pseudos ? operands[0] : 0));
++ else if ( flag_pic && avr32_address_operand(operands[1], GET_MODE(operands[1])) )
++ /* If we have an address operand then this function uses the pic register. */
++ current_function_uses_pic_offset_table = 1;
++ })
++
++
++(define_insn "mov<mode>_internal"
++ [(set (match_operand:MOVM 0 "nonimmediate_operand" "=r,r,r,m,r")
++ (match_operand:MOVM 1 "general_operand" "rKs08,Ks21,m,r,W"))]
++ ""
++ {
++ switch (which_alternative) {
++ case 0:
++ case 1: return "mov\t%0, %1";
++ case 2:
++ if ( (REG_P(XEXP(operands[1], 0))
++ && REGNO(XEXP(operands[1], 0)) == SP_REGNUM)
++ || (GET_CODE(XEXP(operands[1], 0)) == PLUS
++ && REGNO(XEXP(XEXP(operands[1], 0), 0)) == SP_REGNUM
++ && GET_CODE(XEXP(XEXP(operands[1], 0), 1)) == CONST_INT
++ && INTVAL(XEXP(XEXP(operands[1], 0), 1)) % 4 == 0
++ && INTVAL(XEXP(XEXP(operands[1], 0), 1)) <= 0x1FC) )
++ return "lddsp\t%0, %1";
++ else if ( avr32_const_pool_ref_operand(operands[1], GET_MODE(operands[1])) )
++ return "lddpc\t%0, %1";
++ else
++ return "ld.w\t%0, %1";
++ case 3:
++ if ( (REG_P(XEXP(operands[0], 0))
++ && REGNO(XEXP(operands[0], 0)) == SP_REGNUM)
++ || (GET_CODE(XEXP(operands[0], 0)) == PLUS
++ && REGNO(XEXP(XEXP(operands[0], 0), 0)) == SP_REGNUM
++ && GET_CODE(XEXP(XEXP(operands[0], 0), 1)) == CONST_INT
++ && INTVAL(XEXP(XEXP(operands[0], 0), 1)) % 4 == 0
++ && INTVAL(XEXP(XEXP(operands[0], 0), 1)) <= 0x1FC) )
++ return "stdsp\t%0, %1";
++ else
++ return "st.w\t%0, %1";
++ case 4:
++ if ( TARGET_HAS_ASM_ADDR_PSEUDOS )
++ return "lda.w\t%0, %1";
++ else
++ return "ld.w\t%0, r6[%1@got]";
++ default:
++ abort();
++ }
++ }
++
++ [(set_attr "length" "2,4,4,4,8")
++ (set_attr "type" "alu,alu,load,store,load")
++ (set_attr "cc" "none,none,none,none,clobber")])
++
++
++;; These instructions are for loading constants which cannot be loaded
++;; directly from the constant pool because the offset is too large
++;; high and lo_sum are used even tough for our case it should be
++;; low and high sum :-)
++(define_insn "mov_symbol_lo"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (high:SI (match_operand:SI 1 "immediate_operand" "i" )))]
++ ""
++ "mov\t%0, lo(%1)"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")]
++)
++
++(define_insn "add_symbol_hi"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (lo_sum:SI (match_dup 0)
++ (match_operand:SI 1 "immediate_operand" "i" )))]
++ ""
++ "orh\t%0, hi(%1)"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")]
++)
++
++
++
++;; When generating pic, we need to load the symbol offset into a register.
++;; So that the optimizer does not confuse this with a normal symbol load
++;; we use an unspec. The offset will be loaded from a constant pool entry,
++;; since that is the only type of relocation we can use.
++(define_insn "pic_load_addr"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (unspec:SI [(match_operand:SI 1 "" "")] UNSPEC_PIC_SYM))]
++ "flag_pic && CONSTANT_POOL_ADDRESS_P(XEXP(operands[1], 0))"
++ "lddpc\t%0, %1"
++ [(set_attr "type" "load")
++ (set_attr "length" "4")]
++)
++
++(define_insn "pic_compute_got_from_pc"
++ [(set (match_operand:SI 0 "register_operand" "+r")
++ (unspec:SI [(minus:SI (pc)
++ (match_dup 0))] UNSPEC_PIC_BASE))
++ (use (label_ref (match_operand 1 "" "")))]
++ "flag_pic"
++ {
++ (*targetm.asm_out.internal_label) (asm_out_file, "L",
++ CODE_LABEL_NUMBER (operands[1]));
++ return \"rsub\t%0, pc\";
++ }
++ [(set_attr "cc" "clobber")
++ (set_attr "length" "2")]
++)
++
++;;== long long int - 64 bits ==================================================
++(define_expand "movdi"
++ [(set (match_operand:DI 0 "nonimmediate_operand" "")
++ (match_operand:DI 1 "general_operand" ""))]
++ ""
++ {
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (DImode, operands[1]);
++
++ })
++
++
++(define_insn_and_split "*movdi_internal"
++ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,m")
++ (match_operand:DI 1 "general_operand" "r,Ks08,Ks21,G,m,r"))]
++ ""
++ {
++ switch (which_alternative ){
++ case 1:
++ case 2:
++ if ( INTVAL(operands[1]) < 0 )
++ return "mov\t%0, %1\;mov\t%m0, -1";
++ else
++ return "mov\t%0, %1\;mov\t%m0, 0";
++ case 0:
++ case 3:
++ return "mov\t%0, %1\;mov\t%m0, %m1";
++ case 4:
++ if ( avr32_const_pool_ref_operand(operands[1], GET_MODE(operands[1])))
++ return "ld.d\t%0, pc[%1 - .]";
++ else
++ return "ld.d\t%0, %1";
++ case 5:
++ return "st.d\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ "reload_completed &&
++ (REG_P(operands[0]) &&
++ (REG_P(operands[1]) || avr32_const_double_immediate(operands[1]) ||
++ ((GET_CODE(operands[1]) == CONST_INT) && avr32_const_ok_for_constraint_p(INTVAL(operands[1]), 'K', \"Ks21\")) ))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))]
++ {
++ operands[2] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ if ( REG_P(operands[1]) ){
++ operands[3] = gen_highpart(SImode, operands[1]);
++ operands[1] = gen_lowpart(SImode, operands[1]);
++ } else if ( GET_CODE(operands[1]) == CONST_DOUBLE ){
++ operands[3] = GEN_INT(CONST_DOUBLE_LOW(operands[1]));
++ operands[1] = GEN_INT(CONST_DOUBLE_HIGH(operands[1]));
++ } else if ( GET_CODE(operands[1]) == CONST_INT ){
++ operands[3] = GEN_INT((INTVAL(operands[1]) < 0) ? -1 : 0);
++ operands[1] = operands[1];
++ } else {
++ internal_error("Illegal operand[1] for movdi split!");
++ }
++ }
++
++ [(set_attr "length" "4,6,8,8,4,4")
++ (set_attr "type" "alu2,alu2,alu2,alu2,load2,store2")])
++
++
++;;== 128 bits ==================================================
++(define_expand "movti"
++ [(set (match_operand:TI 0 "nonimmediate_operand" "")
++ (match_operand:TI 1 "general_operand" ""))]
++ ""
++ {
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (TImode, operands[1]);
++
++ /* We must fix any pre_dec for loads and post_inc stores */
++ if ( GET_CODE (operands[0]) == MEM
++ && GET_CODE (XEXP(operands[0],0)) == POST_INC ){
++ emit_move_insn(gen_rtx_MEM(TImode, XEXP(XEXP(operands[0],0),0)), operands[1]);
++ emit_insn(gen_addsi3(XEXP(XEXP(operands[0],0),0), XEXP(XEXP(operands[0],0),0), GEN_INT(GET_MODE_SIZE(TImode))));
++ DONE;
++ }
++
++ if ( GET_CODE (operands[1]) == MEM
++ && GET_CODE (XEXP(operands[1],0)) == PRE_DEC ){
++ emit_insn(gen_addsi3(XEXP(XEXP(operands[1],0),0), XEXP(XEXP(operands[1],0),0), GEN_INT(-GET_MODE_SIZE(TImode))));
++ emit_move_insn(operands[0], gen_rtx_MEM(TImode, XEXP(XEXP(operands[1],0),0)));
++ DONE;
++ }
++
++ if (GET_CODE (operands[1]) == CONST_INT){
++ unsigned int sign_extend = (INTVAL(operands[1]) < 0) ? 0xFFFFFFFF : 0;
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 12), operands[1]);
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 8), GEN_INT(sign_extend));
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 4), GEN_INT(sign_extend));
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 0), GEN_INT(sign_extend));
++ DONE;
++ }
++
++ if (GET_CODE (operands[0]) == REG
++ && GET_CODE (operands[1]) == REG){
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 12), gen_rtx_SUBREG(SImode, operands[1], 12));
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 8), gen_rtx_SUBREG(SImode, operands[1], 8));
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 4), gen_rtx_SUBREG(SImode, operands[1], 4));
++ emit_move_insn(gen_rtx_SUBREG(SImode, operands[0], 0), gen_rtx_SUBREG(SImode, operands[1], 0));
++ DONE;
++ }
++ })
++
++
++(define_insn "*movti_internal"
++ [(set (match_operand:TI 0 "nonimmediate_operand" "=r,r, <RKu00,r")
++ (match_operand:TI 1 "loadti_operand" " r,RKu00>,r,m"))]
++ ""
++ "@
++ mov\t%T0, %T1\;mov\t%U0, %U1\;mov\t%L0, %L1\;mov\t%B0, %B1
++ ldm\t%p1, %0
++ stm\t%p0, %1
++ ldm\t%p1, %0"
++ [(set_attr "length" "8,4,4,4")
++ (set_attr "type" "alu,load4,store4,load4")])
++
++
++;;== float - 32 bits ==========================================================
++(define_expand "movsf"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "")
++ (match_operand:SF 1 "general_operand" ""))]
++ ""
++ {
++
++
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (SFmode, operands[1]);
++
++ })
++
++(define_insn "*movsf_internal"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,m")
++ (match_operand:SF 1 "general_operand" "r,G,m,r"))]
++ "TARGET_SOFT_FLOAT"
++ {
++ switch (which_alternative) {
++ case 0:
++ case 1: return "mov\t%0, %1";
++ case 2:
++ if ( (REG_P(XEXP(operands[1], 0))
++ && REGNO(XEXP(operands[1], 0)) == SP_REGNUM)
++ || (GET_CODE(XEXP(operands[1], 0)) == PLUS
++ && REGNO(XEXP(XEXP(operands[1], 0), 0)) == SP_REGNUM
++ && GET_CODE(XEXP(XEXP(operands[1], 0), 1)) == CONST_INT
++ && INTVAL(XEXP(XEXP(operands[1], 0), 1)) % 4 == 0
++ && INTVAL(XEXP(XEXP(operands[1], 0), 1)) <= 0x1FC) )
++ return "lddsp\t%0, %1";
++ else if ( avr32_const_pool_ref_operand(operands[1], GET_MODE(operands[1])) )
++ return "lddpc\t%0, %1";
++ else
++ return "ld.w\t%0, %1";
++ case 3:
++ if ( (REG_P(XEXP(operands[0], 0))
++ && REGNO(XEXP(operands[0], 0)) == SP_REGNUM)
++ || (GET_CODE(XEXP(operands[0], 0)) == PLUS
++ && REGNO(XEXP(XEXP(operands[0], 0), 0)) == SP_REGNUM
++ && GET_CODE(XEXP(XEXP(operands[0], 0), 1)) == CONST_INT
++ && INTVAL(XEXP(XEXP(operands[0], 0), 1)) % 4 == 0
++ && INTVAL(XEXP(XEXP(operands[0], 0), 1)) <= 0x1FC) )
++ return "stdsp\t%0, %1";
++ else
++ return "st.w\t%0, %1";
++ default:
++ abort();
++ }
++ }
++
++ [(set_attr "length" "2,4,4,4")
++ (set_attr "type" "alu,alu,load,store")])
++
++
++
++;;== double - 64 bits =========================================================
++(define_expand "movdf"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "")
++ (match_operand:DF 1 "general_operand" ""))]
++ ""
++ {
++ /* One of the ops has to be in a register. */
++ if (GET_CODE (operands[0]) != REG){
++ operands[1] = force_reg (DFmode, operands[1]);
++ }
++ })
++
++
++(define_insn_and_split "*movdf_internal"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,r,m")
++ (match_operand:DF 1 "general_operand" "r,G,m,r"))]
++ "TARGET_SOFT_FLOAT"
++ {
++ switch (which_alternative ){
++ case 0:
++ case 1:
++ return "mov\t%0, %1\;mov\t%m0, %m1";
++ case 2:
++ if ( avr32_const_pool_ref_operand(operands[1], GET_MODE(operands[1])))
++ return "ld.d\t%0, pc[%1 - .]";
++ else
++ return "ld.d\t%0, %1";
++ case 3:
++ return "st.d\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ "TARGET_SOFT_FLOAT
++ && reload_completed
++ && (REG_P(operands[0]) && REG_P(operands[1]))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))]
++ "
++ {
++ operands[2] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[3] = gen_highpart(SImode, operands[1]);
++ operands[1] = gen_lowpart(SImode, operands[1]);
++ }
++ "
++
++ [(set_attr "length" "4,8,4,4")
++ (set_attr "type" "alu2,alu2,load2,store2")])
++
++
++
++
++;;=============================================================================
++;; Move chunks of memory
++;;=============================================================================
++
++(define_expand "movmemsi"
++ [(match_operand:BLK 0 "general_operand" "")
++ (match_operand:BLK 1 "general_operand" "")
++ (match_operand:SI 2 "const_int_operand" "")
++ (match_operand:SI 3 "const_int_operand" "")]
++ ""
++ "
++ if (avr32_gen_movmemsi (operands))
++ DONE;
++ FAIL;
++ "
++ )
++
++
++
++
++;;=============================================================================
++;; Bit field instructions
++;;-----------------------------------------------------------------------------
++;; Instructions to insert or extract bit-fields
++;;=============================================================================
++
++(define_insn "insv"
++ [ (set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
++ (match_operand:SI 1 "immediate_operand" "Ku05")
++ (match_operand:SI 2 "immediate_operand" "Ku05"))
++ (match_operand 3 "register_operand" "r"))]
++ ""
++ "bfins\t%0, %3, %2, %1"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "set_ncz")])
++
++
++
++
++(define_insn "extv"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (sign_extract:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "Ku05")
++ (match_operand:SI 3 "immediate_operand" "Ku05")))]
++ ""
++ "bfexts\t%0, %1, %3, %2"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "set_ncz")])
++
++
++(define_insn "extzv"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "Ku05")
++ (match_operand:SI 3 "immediate_operand" "Ku05")))]
++ ""
++ "bfextu\t%0, %1, %3, %2"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "set_ncz")])
++
++
++
++;;=============================================================================
++;; Some peepholes for avoiding unnecessary cast instructions
++;; followed by bfins.
++;;-----------------------------------------------------------------------------
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (zero_extend:SI (match_operand:QI 1 "register_operand" "")))
++ (set (zero_extract:SI (match_operand 2 "register_operand" "")
++ (match_operand:SI 3 "immediate_operand" "")
++ (match_operand:SI 4 "immediate_operand" ""))
++ (match_dup 0))]
++ "((peep2_reg_dead_p(2, operands[0]) &&
++ (INTVAL(operands[3]) <= 8)))"
++ [(set (zero_extract:SI (match_dup 2)
++ (match_dup 3)
++ (match_dup 4))
++ (match_dup 1))]
++ )
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (zero_extend:SI (match_operand:HI 1 "register_operand" "")))
++ (set (zero_extract:SI (match_operand 2 "register_operand" "")
++ (match_operand:SI 3 "immediate_operand" "")
++ (match_operand:SI 4 "immediate_operand" ""))
++ (match_dup 0))]
++ "((peep2_reg_dead_p(2, operands[0]) &&
++ (INTVAL(operands[3]) <= 16)))"
++ [(set (zero_extract:SI (match_dup 2)
++ (match_dup 3)
++ (match_dup 4))
++ (match_dup 1))]
++ )
++
++;;=============================================================================
++;; push bytes
++;;-----------------------------------------------------------------------------
++;; Implements the push instruction
++;;=============================================================================
++(define_insn "pushm"
++ [(set (mem:BLK (pre_dec:BLK (reg:SI SP_REGNUM)))
++ (unspec:BLK [(match_operand 0 "const_int_operand" "")]
++ UNSPEC_PUSHM))]
++ ""
++ {
++ if (INTVAL(operands[0])) {
++ return "pushm\t%r0";
++ } else {
++ return "";
++ }
++ }
++ [(set_attr "type" "store")
++ (set_attr "length" "2")
++ (set_attr "cc" "none")])
++
++(define_insn "stm"
++ [(unspec [(match_operand 0 "register_operand" "r")
++ (match_operand 1 "const_int_operand" "")
++ (match_operand 2 "const_int_operand" "")]
++ UNSPEC_STM)]
++ ""
++ {
++ if (INTVAL(operands[1])) {
++ if (INTVAL(operands[2]) != 0)
++ return "stm\t--%0, %s1";
++ else
++ return "stm\t%0, %s1";
++ } else {
++ return "";
++ }
++ }
++ [(set_attr "type" "store")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++
++
++(define_insn "popm"
++ [(unspec [(match_operand 0 "const_int_operand" "")]
++ UNSPEC_POPM)]
++ ""
++ {
++ if (INTVAL(operands[0])) {
++ return "popm %r0";
++ } else {
++ return "";
++ }
++ }
++ [(set_attr "type" "load")
++ (set_attr "length" "2")])
++
++
++
++;;=============================================================================
++;; add
++;;-----------------------------------------------------------------------------
++;; Adds reg1 with reg2 and puts the result in reg0.
++;;=============================================================================
++(define_insn "add<mode>3"
++ [(set (match_operand:INTM 0 "register_operand" "=r,r,r,r,r")
++ (plus:INTM (match_operand:INTM 1 "register_operand" "%0,r,0,r,0")
++ (match_operand:INTM 2 "avr32_add_operand" "r,r,Is08,Is16,Is21")))]
++ ""
++ "@
++ add %0, %2
++ add %0, %1, %2
++ sub %0, %n2
++ sub %0, %1, %n2
++ sub %0, %n2"
++
++ [(set_attr "length" "2,4,2,4,4")
++ (set_attr "cc" "<INTM:alu_cc_attr>")])
++
++(define_insn "*addsi3_lsl"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (ashift:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 3 "avr32_add_shift_immediate_operand" "Ku02"))
++ (match_operand:SI 2 "register_operand" "r")))]
++ ""
++ "add %0, %2, %1 << %3"
++ [(set_attr "length" "4")
++ (set_attr "cc" "set_vncz")])
++
++
++(define_insn "*addsi3_mul"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 3 "immediate_operand" "Ku04" ))
++ (match_operand:SI 2 "register_operand" "r")))]
++ "(INTVAL(operands[3]) == 0) || (INTVAL(operands[3]) == 2) ||
++ (INTVAL(operands[3]) == 4) || (INTVAL(operands[3]) == 8)"
++ "add %0, %2, %1 << %p3"
++ [(set_attr "length" "4")
++ (set_attr "cc" "set_vncz")])
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (ashift:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (plus:SI (match_dup 0)
++ (match_operand:SI 4 "register_operand" "")))]
++ "(peep2_reg_dead_p(2, operands[0]) &&
++ (INTVAL(operands[2]) < 4 && INTVAL(operands[2]) > 0))"
++ [(set (match_dup 3)
++ (plus:SI (ashift:SI (match_dup 1)
++ (match_dup 2))
++ (match_dup 4)))]
++ )
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (ashift:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (plus:SI (match_operand:SI 4 "register_operand" "")
++ (match_dup 0)))]
++ "(peep2_reg_dead_p(2, operands[0]) &&
++ (INTVAL(operands[2]) < 4 && INTVAL(operands[2]) > 0))"
++ [(set (match_dup 3)
++ (plus:SI (ashift:SI (match_dup 1)
++ (match_dup 2))
++ (match_dup 4)))]
++ )
++
++(define_insn "adddi3"
++ [(set (match_operand:DI 0 "register_operand" "=r,r")
++ (plus:DI (match_operand:DI 1 "register_operand" "%r,0")
++ (match_operand:DI 2 "register_operand" "r,r")))]
++ ""
++ "@
++ add %0, %1, %2\;adc %m0, %m1, %m2
++ add %0, %2\;adc %m0, %m0, %m2"
++ [(set_attr "length" "8,6")
++ (set_attr "type" "alu2")
++ (set_attr "cc" "set_vncz")])
++
++
++
++;;=============================================================================
++;; subtract
++;;-----------------------------------------------------------------------------
++;; Subtract reg2 or immediate value from reg0 and puts the result in reg0.
++;;=============================================================================
++
++(define_peephole2
++ [(set (match_operand:QI 0 "register_operand" "")
++ (minus:QI (match_operand:QI 1 "general_operand" "")
++ (match_operand:QI 2 "general_operand" "")))
++ (set (match_operand:QI 3 "register_operand" "")
++ (match_dup 0))]
++ "peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (minus:QI (match_dup 1) (match_dup 2)))]
++ )
++
++(define_peephole
++ [(set (match_operand:QI 0 "register_operand" "")
++ (minus:QI (match_operand:QI 1 "immediate_operand" "Ks08")
++ (match_operand:QI 2 "register_operand" "r")))
++ (set (match_operand:QI 3 "register_operand" "r")
++ (match_dup 0))]
++ "dead_or_set_p(insn, operands[0])"
++ "rsub %3, %2, %1"
++ [(set_attr "length" "4")
++ (set_attr "cc" "clobber")]
++ )
++
++
++
++(define_insn "sub<mode>3"
++ [(set (match_operand:INTM 0 "general_operand" "=r,r,r,r,r,r,r")
++ (minus:INTM (match_operand:INTM 1 "nonmemory_operand" "0,r,0,r,0,r,Ks08")
++ (match_operand:INTM 2 "nonmemory_operand" "r,r,Ks08,Ks16,Ks21,0,r")))]
++ ""
++ "@
++ sub %0, %2
++ sub %0, %1, %2
++ sub %0, %2
++ sub %0, %1, %2
++ sub %0, %2
++ rsub %0, %1
++ rsub %0, %2, %1"
++ [(set_attr "length" "2,4,2,4,4,2,4")
++ (set_attr "cc" "<INTM:alu_cc_attr>")])
++
++(define_insn "*sub<mode>3_mul"
++ [(set (match_operand:INTM 0 "register_operand" "=r,r,r")
++ (minus:INTM (match_operand:INTM 1 "register_operand" "r,0,r")
++ (mult:INTM (match_operand:INTM 2 "register_operand" "r,r,0")
++ (match_operand:SI 3 "immediate_operand" "Ku04,Ku04,Ku04" ))))]
++ "(INTVAL(operands[3]) == 0) || (INTVAL(operands[3]) == 2) ||
++ (INTVAL(operands[3]) == 4) || (INTVAL(operands[3]) == 8)"
++ "@
++ sub %0, %1, %2 << %p3
++ sub %0, %0, %2 << %p3
++ sub %0, %1, %0 << %p3"
++ [(set_attr "length" "4,4,4")
++ (set_attr "cc" "<INTM:alu_cc_attr>")])
++
++(define_insn "*sub<mode>3_lsl"
++ [(set (match_operand:INTM 0 "register_operand" "=r")
++ (minus:INTM (ashift:INTM (match_operand:INTM 1 "register_operand" "r")
++ (match_operand:SI 3 "avr32_add_shift_immediate_operand" "Ku02"))
++ (match_operand:INTM 2 "register_operand" "r")))]
++ ""
++ "sub %0, %2, %1 << %3"
++ [(set_attr "length" "4")
++ (set_attr "cc" "<INTM:alu_cc_attr>")])
++
++
++(define_insn "subdi3"
++ [(set (match_operand:DI 0 "register_operand" "=r,r")
++ (minus:DI (match_operand:DI 1 "register_operand" "%r,0")
++ (match_operand:DI 2 "register_operand" "r,r")))]
++ ""
++ "@
++ sub %0, %1, %2\;sbc %m0, %m1, %m2
++ sub %0, %2\;sbc %m0, %m0, %m2"
++ [(set_attr "length" "8,6")
++ (set_attr "type" "alu2")
++ (set_attr "cc" "set_vncz")])
++
++
++
++;;=============================================================================
++;; multiply
++;;-----------------------------------------------------------------------------
++;; Multiply op1 and op2 and put the value in op0.
++;;=============================================================================
++
++
++(define_insn "mulqi3"
++ [(set (match_operand:QI 0 "register_operand" "=r,r,r")
++ (mult:QI (match_operand:QI 1 "register_operand" "%0,r,r")
++ (match_operand:QI 2 "avr32_mul_operand" "r,r,Ks08")))]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "mul %0, %2";
++ case 1:
++ return "mul %0, %1, %2";
++ case 2:
++ return "mul %0, %1, %2";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "type" "mulww_w,mulww_w,mulwh")
++ (set_attr "length" "2,4,4")
++ (set_attr "cc" "none")])
++
++(define_insn "mulsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (mult:SI (match_operand:SI 1 "register_operand" "%0,r,r")
++ (match_operand:SI 2 "avr32_mul_operand" "r,r,Ks08")))]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "mul %0, %2";
++ case 1:
++ return "mul %0, %1, %2";
++ case 2:
++ return "mul %0, %1, %2";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "type" "mulww_w,mulww_w,mulwh")
++ (set_attr "length" "2,4,4")
++ (set_attr "cc" "none")])
++
++
++(define_insn "mulhisi3"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (mult:SI
++ (sign_extend:SI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
++ "TARGET_DSP"
++ "mulhh.w %0, %1:b, %2:b"
++ [(set_attr "type" "mulhh")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_peephole2
++ [(match_scratch:DI 6 "r")
++ (set (match_operand:SI 0 "register_operand" "")
++ (mult:SI
++ (sign_extend:SI (match_operand:HI 1 "register_operand" ""))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" ""))))
++ (set (match_operand:SI 3 "register_operand" "")
++ (ashiftrt:SI (match_dup 0)
++ (const_int 16)))]
++ "TARGET_DSP
++ && (peep2_reg_dead_p(1, operands[0]) || (REGNO(operands[0]) == REGNO(operands[3])))"
++ [(set (match_dup 4) (sign_extend:SI (match_dup 1)))
++ (set (match_dup 6)
++ (ashift:DI (mult:DI (sign_extend:DI (match_dup 4))
++ (sign_extend:DI (match_dup 2)))
++ (const_int 16)))
++ (set (match_dup 3) (match_dup 5))]
++
++ "{
++ operands[4] = gen_rtx_REG(SImode, REGNO(operands[1]));
++ operands[5] = gen_highpart (SImode, operands[4]);
++ }"
++ )
++
++(define_insn "mulnhisi3"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (mult:SI
++ (sign_extend:SI (neg:HI (match_operand:HI 1 "register_operand" "r")))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
++ "TARGET_DSP"
++ "mulnhh.w %0, %1:b, %2:b"
++ [(set_attr "type" "mulhh")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_insn "machisi3"
++ [(set (match_operand:SI 0 "register_operand" "+r")
++ (plus:SI (mult:SI
++ (sign_extend:SI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))
++ (match_dup 0)))]
++ "TARGET_DSP"
++ "machh.w %0, %1:b, %2:b"
++ [(set_attr "type" "machh_w")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++
++
++(define_insn "mulsidi3"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (mult:DI
++ (sign_extend:DI (match_operand:SI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
++ ""
++ "muls.d %0, %1, %2"
++ [(set_attr "type" "mulww_d")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_insn "umulsidi3"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (mult:DI
++ (zero_extend:DI (match_operand:SI 1 "register_operand" "%r"))
++ (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
++ ""
++ "mulu.d %0, %1, %2"
++ [(set_attr "type" "mulww_d")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_insn "*mulaccsi3"
++ [(set (match_operand:SI 0 "register_operand" "+r")
++ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "%r")
++ (match_operand:SI 2 "register_operand" "r"))
++ (match_dup 0)))]
++ ""
++ "mac %0, %1, %2"
++ [(set_attr "type" "macww_w")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_insn "mulaccsidi3"
++ [(set (match_operand:DI 0 "register_operand" "+r")
++ (plus:DI (mult:DI
++ (sign_extend:DI (match_operand:SI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (match_dup 0)))]
++ ""
++ "macs.d %0, %1, %2"
++ [(set_attr "type" "macww_d")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++(define_insn "umulaccsidi3"
++ [(set (match_operand:DI 0 "register_operand" "+r")
++ (plus:DI (mult:DI
++ (zero_extend:DI (match_operand:SI 1 "register_operand" "%r"))
++ (zero_extend:DI (match_operand:SI 2 "register_operand" "r")))
++ (match_dup 0)))]
++ ""
++ "macu.d %0, %1, %2"
++ [(set_attr "type" "macww_d")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++
++
++;; Try to avoid Write-After-Write hazards for mul operations
++;; if it can be done
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (mult:SI
++ (sign_extend:SI (match_operand 1 "general_operand" ""))
++ (sign_extend:SI (match_operand 2 "general_operand" ""))))
++ (set (match_dup 0)
++ (match_operator:SI 3 "alu_operator" [(match_dup 0)
++ (match_operand 4 "general_operand" "")]))]
++ "peep2_reg_dead_p(1, operands[2])"
++ [(set (match_dup 5)
++ (mult:SI
++ (sign_extend:SI (match_dup 1))
++ (sign_extend:SI (match_dup 2))))
++ (set (match_dup 0)
++ (match_op_dup 3 [(match_dup 5)
++ (match_dup 4)]))]
++ "{operands[5] = gen_rtx_REG(SImode, REGNO(operands[2]));}"
++ )
++
++
++
++;;=============================================================================
++;; DSP instructions
++;;=============================================================================
++(define_insn "mulsathh_h"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (ss_truncate:HI (ashiftrt:SI (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 15))))]
++ "TARGET_DSP"
++ "mulsathh.h\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulhh")])
++
++(define_insn "mulsatrndhh_h"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (ss_truncate:HI (ashiftrt:SI
++ (plus:SI (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:SI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 1073741824))
++ (const_int 15))))]
++ "TARGET_DSP"
++ "mulsatrndhh.h\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulhh")])
++
++(define_insn "mulsathh_w"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ss_truncate:SI (ashift:DI (mult:DI (sign_extend:DI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 1))))]
++ "TARGET_DSP"
++ "mulsathh.w\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulhh")])
++
++(define_insn "mulsatwh_w"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ss_truncate:SI (ashiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 15))))]
++ "TARGET_DSP"
++ "mulsatwh.w\t%0, %1, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++(define_insn "mulsatrndwh_w"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ss_truncate:SI (ashiftrt:DI (plus:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 1073741824))
++ (const_int 15))))]
++ "TARGET_DSP"
++ "mulsatrndwh.w\t%0, %1, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++(define_insn "macsathh_w"
++ [(set (match_operand:SI 0 "register_operand" "+r")
++ (plus:SI (match_dup 0)
++ (ss_truncate:SI (ashift:DI (mult:DI (sign_extend:DI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 1)))))]
++ "TARGET_DSP"
++ "macsathh.w\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulhh")])
++
++
++(define_insn "mulwh_d"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (ashift:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 16)))]
++ "TARGET_DSP"
++ "mulwh.d\t%0, %1, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++
++(define_insn "mulnwh_d"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (ashift:DI (mult:DI (not:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r")))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 16)))]
++ "TARGET_DSP"
++ "mulnwh.d\t%0, %1, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++(define_insn "macwh_d"
++ [(set (match_operand:DI 0 "register_operand" "+r")
++ (plus:DI (match_dup 0)
++ (ashift:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))
++ (const_int 16))))]
++ "TARGET_DSP"
++ "macwh.d\t%0, %1, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++(define_insn "machh_d"
++ [(set (match_operand:DI 0 "register_operand" "+r")
++ (plus:DI (match_dup 0)
++ (mult:DI (sign_extend:DI (match_operand:HI 1 "register_operand" "%r"))
++ (sign_extend:DI (match_operand:HI 2 "register_operand" "r")))))]
++ "TARGET_DSP"
++ "machh.d\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "mulwh")])
++
++(define_insn "satadd_w"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ss_plus:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))]
++ "TARGET_DSP"
++ "satadd.w\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "alu_sat")])
++
++(define_insn "satsub_w"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ss_minus:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))]
++ "TARGET_DSP"
++ "satsub.w\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "alu_sat")])
++
++(define_insn "satadd_h"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (ss_plus:HI (match_operand:HI 1 "register_operand" "r")
++ (match_operand:HI 2 "register_operand" "r")))]
++ "TARGET_DSP"
++ "satadd.h\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "alu_sat")])
++
++(define_insn "satsub_h"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (ss_minus:HI (match_operand:HI 1 "register_operand" "r")
++ (match_operand:HI 2 "register_operand" "r")))]
++ "TARGET_DSP"
++ "satsub.h\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")
++ (set_attr "type" "alu_sat")])
++
++
++;;=============================================================================
++;; smin
++;;-----------------------------------------------------------------------------
++;; Set reg0 to the smallest value of reg1 and reg2. It is used for signed
++;; values in the registers.
++;;=============================================================================
++(define_insn "sminsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (smin:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))]
++ ""
++ "min %0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++;;=============================================================================
++;; smax
++;;-----------------------------------------------------------------------------
++;; Set reg0 to the largest value of reg1 and reg2. It is used for signed
++;; values in the registers.
++;;=============================================================================
++(define_insn "smaxsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (smax:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))]
++ ""
++ "max %0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++
++;;=============================================================================
++;; Logical operations
++;;-----------------------------------------------------------------------------
++
++;; Split up simple DImode logical operations. Simply perform the logical
++;; operation on the upper and lower halves of the registers.
++(define_split
++ [(set (match_operand:DI 0 "register_operand" "")
++ (match_operator:DI 6 "logical_binary_operator"
++ [(match_operand:DI 1 "register_operand" "")
++ (match_operand:DI 2 "register_operand" "")]))]
++ "reload_completed"
++ [(set (match_dup 0) (match_op_dup:SI 6 [(match_dup 1) (match_dup 2)]))
++ (set (match_dup 3) (match_op_dup:SI 6 [(match_dup 4) (match_dup 5)]))]
++ "
++ {
++ operands[3] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[4] = gen_highpart (SImode, operands[1]);
++ operands[1] = gen_lowpart (SImode, operands[1]);
++ operands[5] = gen_highpart (SImode, operands[2]);
++ operands[2] = gen_lowpart (SImode, operands[2]);
++ }"
++)
++
++;;=============================================================================
++;; Logical operations with shifted operand
++;;=============================================================================
++(define_insn "<code>si_lshift"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (logical:SI (match_operator:SI 4 "logical_shift_operator"
++ [(match_operand:SI 2 "register_operand" "r")
++ (match_operand:SI 3 "immediate_operand" "Ku05")])
++ (match_operand:SI 1 "register_operand" "r")))]
++ ""
++ {
++ if ( GET_CODE(operands[4]) == ASHIFT )
++ return "<logical_insn>\t%0, %1, %2 << %3";
++ else
++ return "<logical_insn>\t%0, %1, %2 >> %3";
++ }
++
++ [(set_attr "cc" "set_z")]
++)
++
++
++;;************************************************
++;; Peepholes for detecting logical operantions
++;; with shifted operands
++;;************************************************
++
++(define_peephole
++ [(set (match_operand:SI 3 "register_operand" "")
++ (match_operator:SI 5 "logical_shift_operator"
++ [(match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")]))
++ (set (match_operand:SI 0 "register_operand" "")
++ (logical:SI (match_operand:SI 4 "register_operand" "")
++ (match_dup 3)))]
++ "(dead_or_set_p(insn, operands[3])) || (REGNO(operands[3]) == REGNO(operands[0]))"
++ {
++ if ( GET_CODE(operands[5]) == ASHIFT )
++ return "<logical_insn>\t%0, %4, %1 << %2";
++ else
++ return "<logical_insn>\t%0, %4, %1 >> %2";
++ }
++ [(set_attr "cc" "set_z")]
++ )
++
++(define_peephole
++ [(set (match_operand:SI 3 "register_operand" "")
++ (match_operator:SI 5 "logical_shift_operator"
++ [(match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")]))
++ (set (match_operand:SI 0 "register_operand" "")
++ (logical:SI (match_dup 3)
++ (match_operand:SI 4 "register_operand" "")))]
++ "(dead_or_set_p(insn, operands[3])) || (REGNO(operands[3]) == REGNO(operands[0]))"
++ {
++ if ( GET_CODE(operands[5]) == ASHIFT )
++ return "<logical_insn>\t%0, %4, %1 << %2";
++ else
++ return "<logical_insn>\t%0, %4, %1 >> %2";
++ }
++ [(set_attr "cc" "set_z")]
++ )
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (match_operator:SI 5 "logical_shift_operator"
++ [(match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")]))
++ (set (match_operand:SI 3 "register_operand" "")
++ (logical:SI (match_operand:SI 4 "register_operand" "")
++ (match_dup 0)))]
++ "(peep2_reg_dead_p(2, operands[0])) || (REGNO(operands[3]) == REGNO(operands[0]))"
++
++ [(set (match_dup 3)
++ (logical:SI (match_op_dup:SI 5 [(match_dup 1) (match_dup 2)])
++ (match_dup 4)))]
++
++ ""
++)
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (match_operator:SI 5 "logical_shift_operator"
++ [(match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")]))
++ (set (match_operand:SI 3 "register_operand" "")
++ (logical:SI (match_dup 0)
++ (match_operand:SI 4 "register_operand" "")))]
++ "(peep2_reg_dead_p(2, operands[0])) || (REGNO(operands[3]) == REGNO(operands[0]))"
++
++ [(set (match_dup 3)
++ (logical:SI (match_op_dup:SI 5 [(match_dup 1) (match_dup 2)])
++ (match_dup 4)))]
++
++ ""
++)
++
++
++;;=============================================================================
++;; and
++;;-----------------------------------------------------------------------------
++;; Store the result after a bitwise logical-and between reg0 and reg2 in reg0.
++;;=============================================================================
++
++(define_insn "andnsi"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (and:SI (match_operand:SI 1 "register_operand" "0")
++ (not:SI (match_operand:SI 2 "register_operand" "r"))))]
++ ""
++ "andn %0, %2"
++ [(set_attr "cc" "set_z")
++ (set_attr "length" "2")]
++)
++
++
++
++
++(define_insn "andsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r, r, r, r")
++ (and:SI (match_operand:SI 1 "register_operand" "%0, r, 0, r")
++ (match_operand:SI 2 "nonmemory_operand" "r, M, i, r")))]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "and\t%0, %2";
++ case 1:
++ {
++ int i, first_set = -1;
++ /* Search for first bit set in mask */
++ for ( i = 31; i >= 0; --i )
++ if ( INTVAL(operands[2]) & (1 << i) ){
++ first_set = i;
++ break;
++ }
++ operands[2] = gen_rtx_CONST_INT(SImode, first_set + 1);
++ return "bfextu\t%0, %1, 0, %2";
++ }
++ case 2:
++ if ( one_bit_cleared_operand(operands[2], VOIDmode) ){
++ int bitpos;
++ for ( bitpos = 0; bitpos < 32; bitpos++ )
++ if ( !(INTVAL(operands[2]) & (1 << bitpos)) )
++ break;
++ operands[2] = gen_rtx_CONST_INT(SImode, bitpos);
++ return "cbr\t%0, %2";
++ } else if ( (INTVAL(operands[2]) >= 0) &&
++ (INTVAL(operands[2]) <= 65535) )
++ return "andl\t%0, %2, COH";
++ else if ( (INTVAL(operands[2]) < 0) &&
++ (INTVAL(operands[2]) >= -65536 ) )
++ return "andl\t%0, lo(%2)";
++ else if ( ((INTVAL(operands[2]) & 0xffff) == 0xffff) )
++ return "andh\t%0, hi(%2)";
++ else if ( ((INTVAL(operands[2]) & 0xffff) == 0x0) )
++ return "andh\t%0, hi(%2), COH";
++ else
++ return "andh\t%0, hi(%2)\;andl\t%0, lo(%2)";
++ case 3:
++ return "and\t%0, %1, %2";
++ default:
++ abort();
++ }
++ }
++
++ [(set_attr "length" "2,4,8,4")
++ (set_attr "cc" "set_z")])
++
++
++(define_insn "anddi3"
++ [(set (match_operand:DI 0 "register_operand" "=&r,&r")
++ (and:DI (match_operand:DI 1 "register_operand" "%0,r")
++ (match_operand:DI 2 "register_operand" "r,r")))]
++ ""
++ "#"
++ [(set_attr "length" "8")
++ (set_attr "cc" "clobber")]
++)
++
++;;=============================================================================
++;; or
++;;-----------------------------------------------------------------------------
++;; Store the result after a bitwise inclusive-or between reg0 and reg2 in reg0.
++;;=============================================================================
++
++(define_insn "iorsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (ior:SI (match_operand:SI 1 "register_operand" "%0,0,r" )
++ (match_operand:SI 2 "nonmemory_operand" "r ,i,r")))]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "or\t%0, %2";
++ case 1:
++ if ( one_bit_set_operand(operands[2], VOIDmode) ){
++ int bitpos;
++ for (bitpos = 0; bitpos < 32; bitpos++)
++ if (INTVAL(operands[2]) & (1 << bitpos))
++ break;
++ operands[2] = gen_rtx_CONST_INT( SImode, bitpos);
++ return "sbr\t%0, %2";
++ } else if ( (INTVAL(operands[2]) >= 0) &&
++ (INTVAL(operands[2]) <= 65535) )
++ return "orl\t%0, %2";
++ else if ( ((INTVAL(operands[2]) & 0xffff) == 0x0) )
++ return "orh\t%0, hi(%2)";
++ else
++ return "orh\t%0, hi(%2)\;orl\t%0, lo(%2)";
++ case 2:
++ return "or\t%0, %1, %2";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,8,4")
++ (set_attr "cc" "set_z")])
++
++
++;(define_insn "iorsi3"
++; [(set (match_operand:SI 0 "register_operand" "=r, r, r")
++; (ior:SI (match_operand:SI 1 "avr32_logical_insn_operand" "r, r, rA" )
++; (match_operand:SI 2 "register_operand" "0, i, r")))]
++; ""
++; {
++; switch (which_alternative){
++; case 0:
++; return "or %0, %2";
++; case 1:
++; if ( one_bit_set_operand(operands[2], VOIDmode) ){
++; int i, bitpos;
++; for ( i = 0; i < 32; i++ )
++; if ( INTVAL(operands[2]) & (1 << i) ){
++; bitpos = i;
++; break;
++; }
++; operands[2] = gen_rtx_CONST_INT( SImode, bitpos);
++; return "sbr %0, %2";
++; } else if ( (INTVAL(operands[2]) >= 0) &&
++; (INTVAL(operands[2]) <= 65535) )
++; return "orl %0, %2";
++; else if ( ((INTVAL(operands[2]) & 0xffff) == 0x0) )
++; return "orh %0, hi(%2)";
++; else
++; return "orh %0, hi(%2)\;orl %0, lo(%2)";
++; case 2:
++; return "or %0, %2, %1";
++; }
++; }
++; [(set_attr "length" "2,8,4")
++; (set_attr "cc" "set_z")])
++
++(define_insn "iordi3"
++ [(set (match_operand:DI 0 "register_operand" "=&r,&r")
++ (ior:DI (match_operand:DI 1 "register_operand" "%0,r")
++ (match_operand:DI 2 "register_operand" "r,r")))]
++ ""
++ "#"
++ [(set_attr "length" "8")
++ (set_attr "cc" "clobber")]
++)
++
++;;=============================================================================
++;; xor bytes
++;;-----------------------------------------------------------------------------
++;; Store the result after a bitwise exclusive-or between reg0 and reg2 in reg0.
++;;=============================================================================
++
++(define_insn "xorsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (xor:SI (match_operand:SI 1 "register_operand" "0,0,r")
++ (match_operand:SI 2 "nonmemory_operand" "r,i,r")))]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "eor %0, %2";
++ case 1:
++ if ( (INTVAL(operands[2]) >= 0) &&
++ (INTVAL(operands[2]) <= 65535) )
++ return "eorl %0, %2";
++ else if ( ((INTVAL(operands[2]) & 0xffff) == 0x0) )
++ return "eorh %0, hi(%2)";
++ else
++ return "eorh %0, hi(%2)\;eorl %0, lo(%2)";
++ case 2:
++ return "eor %0, %1, %2";
++ default:
++ abort();
++ }
++ }
++
++ [(set_attr "length" "2,8,4")
++ (set_attr "cc" "set_z")])
++
++(define_insn "xordi3"
++ [(set (match_operand:DI 0 "register_operand" "=&r,&r")
++ (xor:DI (match_operand:DI 1 "register_operand" "%0,r")
++ (match_operand:DI 2 "register_operand" "r,r")))]
++ ""
++ "#"
++ [(set_attr "length" "8")
++ (set_attr "cc" "clobber")]
++)
++
++;;=============================================================================
++;; divmod
++;;-----------------------------------------------------------------------------
++;; Signed division that produces both a quotient and a remainder.
++;;=============================================================================
++(define_expand "divmodsi4"
++ [(parallel [
++ (parallel [
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (div:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))
++ (set (match_operand:SI 3 "register_operand" "=r")
++ (mod:SI (match_dup 1)
++ (match_dup 2)))])
++ (use (match_dup 4))])]
++ ""
++ {
++ if (! no_new_pseudos) {
++ operands[4] = gen_reg_rtx (DImode);
++
++ emit_insn(gen_divmodsi4_internal(operands[4],operands[1],operands[2]));
++ emit_move_insn(operands[0], gen_rtx_SUBREG( SImode, operands[4], 4));
++ emit_move_insn(operands[3], gen_rtx_SUBREG( SImode, operands[4], 0));
++
++ DONE;
++ } else {
++ FAIL;
++ }
++
++ })
++
++
++(define_insn "divmodsi4_internal"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (unspec:DI [(match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")]
++ UNSPEC_DIVMODSI4_INTERNAL))]
++ ""
++ "divs %0, %1, %2"
++ [(set_attr "type" "div")
++ (set_attr "cc" "none")])
++
++
++;;=============================================================================
++;; udivmod
++;;-----------------------------------------------------------------------------
++;; Unsigned division that produces both a quotient and a remainder.
++;;=============================================================================
++(define_expand "udivmodsi4"
++ [(parallel [
++ (parallel [
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (udiv:SI (match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")))
++ (set (match_operand:SI 3 "register_operand" "=r")
++ (umod:SI (match_dup 1)
++ (match_dup 2)))])
++ (use (match_dup 4))])]
++ ""
++ {
++ if (! no_new_pseudos) {
++ operands[4] = gen_reg_rtx (DImode);
++
++ emit_insn(gen_udivmodsi4_internal(operands[4],operands[1],operands[2]));
++ emit_move_insn(operands[0], gen_rtx_SUBREG( SImode, operands[4], 4));
++ emit_move_insn(operands[3], gen_rtx_SUBREG( SImode, operands[4], 0));
++
++ DONE;
++ } else {
++ FAIL;
++ }
++ })
++
++(define_insn "udivmodsi4_internal"
++ [(set (match_operand:DI 0 "register_operand" "=r")
++ (unspec:DI [(match_operand:SI 1 "register_operand" "r")
++ (match_operand:SI 2 "register_operand" "r")]
++ UNSPEC_UDIVMODSI4_INTERNAL))]
++ ""
++ "divu %0, %1, %2"
++ [(set_attr "type" "div")
++ (set_attr "cc" "none")])
++
++
++;;=============================================================================
++;; Arithmetic-shift left
++;;-----------------------------------------------------------------------------
++;; Arithmetic-shift reg0 left by reg2 or immediate value.
++;;=============================================================================
++
++(define_insn "ashlsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (ashift:SI (match_operand:SI 1 "register_operand" "r,0,r")
++ (match_operand:SI 2 "nonmemory_operand" "r,Ku05,Ku05")))]
++ ""
++ "@
++ lsl %0, %1, %2
++ lsl %0, %2
++ lsl %0, %1, %2"
++ [(set_attr "length" "4,2,4")
++ (set_attr "cc" "set_ncz")])
++
++;;=============================================================================
++;; Arithmetic-shift right
++;;-----------------------------------------------------------------------------
++;; Arithmetic-shift reg0 right by an immediate value.
++;;=============================================================================
++
++(define_insn "ashrsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (ashiftrt:SI (match_operand:SI 1 "register_operand" "r,0,r")
++ (match_operand:SI 2 "nonmemory_operand" "r,Ku05,Ku05")))]
++ ""
++ "@
++ asr %0, %1, %2
++ asr %0, %2
++ asr %0, %1, %2"
++ [(set_attr "length" "4,2,4")
++ (set_attr "cc" "set_ncz")])
++
++;;=============================================================================
++;; Logical shift right
++;;-----------------------------------------------------------------------------
++;; Logical shift reg0 right by an immediate value.
++;;=============================================================================
++
++(define_insn "lshrsi3"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++ (lshiftrt:SI (match_operand:SI 1 "register_operand" "r,0,r")
++ (match_operand:SI 2 "nonmemory_operand" "r,Ku05,Ku05")))]
++ ""
++ "@
++ lsr %0, %1, %2
++ lsr %0, %2
++ lsr %0, %1, %2"
++ [(set_attr "length" "4,2,4")
++ (set_attr "cc" "set_ncz")])
++
++
++;;=============================================================================
++;; neg
++;;-----------------------------------------------------------------------------
++;; Negate operand 1 and store the result in operand 0.
++;;=============================================================================
++(define_insn "negsi2"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (neg:SI (match_operand:SI 1 "register_operand" "0")))]
++ ""
++ "neg %0"
++ [(set_attr "length" "2")
++ (set_attr "cc" "set_vncz")])
++
++;;=============================================================================
++;; abs
++;;-----------------------------------------------------------------------------
++;; Store the absolute value of operand 1 into operand 0.
++;;=============================================================================
++(define_insn "abssi2"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (abs:SI (match_operand:SI 1 "register_operand" "0")))]
++ ""
++ "abs %0"
++ [(set_attr "length" "2")
++ (set_attr "cc" "set_z")])
++
++
++;;=============================================================================
++;; one_cmpl
++;;-----------------------------------------------------------------------------
++;; Store the bitwise-complement of operand 1 into operand 0.
++;;=============================================================================
++
++(define_insn "one_cmplsi2"
++ [(set (match_operand:SI 0 "register_operand" "=r,r")
++ (not:SI (match_operand:SI 1 "register_operand" "r,0")))]
++ ""
++ "@
++ rsub %0, %1, -1
++ com %0"
++ [(set_attr "length" "4,2")
++ (set_attr "cc" "set_z")])
++
++
++;;=============================================================================
++;; Bit load
++;;-----------------------------------------------------------------------------
++;; Load a bit into Z and C flags
++;;=============================================================================
++(define_insn "bldsi"
++ [(set (cc0)
++ (and:SI (match_operand:SI 0 "register_operand" "r")
++ (match_operand:SI 1 "one_bit_set_operand" "i")))]
++ ""
++ "bld\t%0, %p1"
++ [(set_attr "length" "4")
++ (set_attr "cc" "bld")]
++ )
++
++
++;;=============================================================================
++;; Compare
++;;-----------------------------------------------------------------------------
++;; Compare reg0 with reg1 or an immediate value.
++;;=============================================================================
++
++(define_expand "cmpqi"
++ [(set (cc0)
++ (compare:QI
++ (match_operand:QI 0 "general_operand" "")
++ (match_operand:QI 1 "general_operand" "")))]
++ ""
++ "{
++
++ if ( GET_CODE(operands[0]) != REG
++ && GET_CODE(operands[0]) != SUBREG)
++ operands[0] = force_reg(QImode, operands[0]);
++
++
++ if ( GET_CODE(operands[1]) != REG
++ && GET_CODE(operands[1]) != SUBREG )
++ operands[1] = force_reg(QImode, operands[1]);
++
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++ emit_insn(gen_cmpqi_internal(operands[0], operands[1]));
++ DONE;
++ }"
++)
++
++(define_insn "cmpqi_internal"
++ [(set (cc0)
++ (compare:QI
++ (match_operand:QI 0 "register_operand" "r")
++ (match_operand:QI 1 "register_operand" "r")))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), QImode, operands[0], operands[1]));
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "cc" "compare")])
++
++(define_expand "cmphi"
++ [(set (cc0)
++ (compare:HI
++ (match_operand:HI 0 "general_operand" "")
++ (match_operand:HI 1 "general_operand" "")))]
++ ""
++ "{
++ if ( GET_CODE(operands[0]) != REG
++ && GET_CODE(operands[0]) != SUBREG )
++ operands[0] = force_reg(HImode, operands[0]);
++
++
++ if ( GET_CODE(operands[1]) != REG
++ && GET_CODE(operands[1]) != SUBREG)
++ operands[1] = force_reg(HImode, operands[1]);
++
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++ emit_insn(gen_cmphi_internal(operands[0], operands[1]));
++ DONE;
++ }"
++)
++
++
++(define_insn "cmphi_internal"
++ [(set (cc0)
++ (compare:HI
++ (match_operand:HI 0 "register_operand" "r")
++ (match_operand:HI 1 "register_operand" "r")))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), HImode, operands[0], operands[1]));
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "cc" "compare")])
++
++
++(define_expand "cmpsi"
++ [(set (cc0)
++ (compare:SI
++ (match_operand:SI 0 "general_operand" "")
++ (match_operand:SI 1 "general_operand" "")))]
++ ""
++ "{
++ if ( GET_CODE(operands[0]) != REG
++ && GET_CODE(operands[0]) != SUBREG )
++ operands[0] = force_reg(SImode, operands[0]);
++
++ if ( GET_CODE(operands[1]) != REG
++ && GET_CODE(operands[1]) != SUBREG
++ && GET_CODE(operands[1]) != CONST_INT )
++ operands[1] = force_reg(SImode, operands[1]);
++
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++
++
++ emit_insn(gen_cmpsi_internal(operands[0], operands[1]));
++ DONE;
++ }"
++)
++
++
++
++
++(define_insn "cmpsi_internal"
++ [(set (cc0)
++ (compare:SI
++ (match_operand:SI 0 "register_operand" "r, r, r")
++ (match_operand:SI 1 "nonmemory_operand" "r, Ks06, Ks21")))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), SImode, operands[0], operands[1]));
++ return "";
++ }
++
++ [(set_attr "length" "2,2,4")
++ (set_attr "cc" "compare")])
++
++
++(define_expand "cmpdi"
++ [(set (cc0)
++ (compare:DI
++ (match_operand:DI 0 "register_operand" "")
++ (match_operand:DI 1 "register_operand" "")))]
++ ""
++ {
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++ emit_insn(gen_cmpdi_internal(operands[0], operands[1]));
++ DONE;
++ }
++)
++
++(define_insn "cmpdi_internal"
++ [(set (cc0)
++ (compare:DI
++ (match_operand:DI 0 "register_operand" "r")
++ (match_operand:DI 1 "register_operand" "r")))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), DImode, operands[0], operands[1]));
++ return "";
++ }
++
++ [(set_attr "length" "6")
++ (set_attr "type" "alu2")
++ (set_attr "cc" "compare")])
++
++
++
++;;=============================================================================
++;; Test if zero
++;;-----------------------------------------------------------------------------
++;; Compare reg against zero and set the condition codes.
++;;=============================================================================
++
++
++(define_expand "tstsi"
++ [(set (cc0)
++ (match_operand:SI 0 "register_operand" ""))]
++ ""
++ {
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = gen_rtx_CONST_INT(SImode, 0);
++ emit_insn(gen_tstsi_internal(operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "tstsi_internal"
++ [(set (cc0)
++ (match_operand:SI 0 "register_operand" "r"))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), SImode, operands[0], const0_rtx));
++
++ return "";
++ }
++ [(set_attr "length" "2")
++ (set_attr "cc" "compare")])
++
++
++(define_expand "tstdi"
++ [(set (cc0)
++ (match_operand:DI 0 "register_operand" ""))]
++ ""
++ {
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = gen_rtx_CONST_INT(DImode, 0);
++ emit_insn(gen_tstdi_internal(operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "tstdi_internal"
++ [(set (cc0)
++ (match_operand:DI 0 "register_operand" "r"))]
++ ""
++ {
++ set_next_insn_cond(insn,
++ avr32_output_cmp(get_next_insn_cond(insn), DImode, operands[0], const0_rtx));
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "type" "alu2")
++ (set_attr "cc" "compare")])
++
++
++
++;;=============================================================================
++;; Convert operands
++;;-----------------------------------------------------------------------------
++;;
++;;=============================================================================
++(define_insn "truncdisi2"
++ [(set (match_operand:SI 0 "general_operand" "")
++ (truncate:SI (match_operand:DI 1 "general_operand" "")))]
++ ""
++ "truncdisi2")
++
++;;=============================================================================
++;; Extend
++;;-----------------------------------------------------------------------------
++;;
++;;=============================================================================
++
++
++(define_insn "extendhisi2"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
++ (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "0,r,<RKu00>,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "casts.h\t%0";
++ case 1:
++ return "bfexts\t%0, %1, 0, 16";
++ case 2:
++ case 3:
++ return "ld.sh\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz,set_ncz,none,none")
++ (set_attr "type" "alu,alu,load_rm,load_rm")])
++
++(define_insn "extendqisi2"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
++ (sign_extend:SI (match_operand:QI 1 "extendqi_operand" "0,r,RKu00,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "casts.b\t%0";
++ case 1:
++ return "bfexts\t%0, %1, 0, 8";
++ case 2:
++ case 3:
++ return "ld.sb\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz,set_ncz,none,none")
++ (set_attr "type" "alu,alu,load_rm,load_rm")])
++
++(define_insn "extendqihi2"
++ [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
++ (sign_extend:HI (match_operand:QI 1 "extendqi_operand" "0,r,RKu00,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "casts.b\t%0";
++ case 1:
++ return "bfexts\t%0, %1, 0, 8";
++ case 2:
++ case 3:
++ return "ld.sb\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz,set_ncz,none,none")
++ (set_attr "type" "alu,alu,load_rm,load_rm")])
++
++
++;;=============================================================================
++;; Zero-extend
++;;-----------------------------------------------------------------------------
++;;
++;;=============================================================================
++
++(define_insn "zero_extendhisi2"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
++ (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "0,r,<RKu00>,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "castu.h\t%0";
++ case 1:
++ return "bfextu\t%0, %1, 0, 16";
++ case 2:
++ case 3:
++ return "ld.uh\t%0, %1";
++ default:
++ abort();
++ }
++ }
++
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz,set_ncz,none,none")
++ (set_attr "type" "alu,alu,load_rm,load_rm")])
++
++(define_insn "zero_extendqisi2"
++ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
++ (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0,r,<RKu00>,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "castu.b\t%0";
++ case 1:
++ return "bfextu\t%0, %1, 0, 8";
++ case 2:
++ case 3:
++ return "ld.ub\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz, set_ncz, none, none")
++ (set_attr "type" "alu, alu, load_rm, load_rm")])
++
++(define_insn "zero_extendqihi2"
++ [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
++ (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0,r,<RKu00>,m")))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ return "castu.b\t%0";
++ case 1:
++ return "bfextu\t%0, %1, 0, 8";
++ case 2:
++ case 3:
++ return "ld.ub\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,2,4")
++ (set_attr "cc" "set_ncz, set_ncz, none, none")
++ (set_attr "type" "alu, alu, load_rm, load_rm")])
++
++
++
++;;=============================================================================
++;; Conditional set register
++;; sr{cond4} rd
++;;-----------------------------------------------------------------------------
++
++;;Because of the same issue as with conditional moves and adds we must
++;;not separate the compare instrcution from the scc instruction as
++;;they might be sheduled "badly".
++
++(define_expand "s<code>"
++ [(set (match_operand:SI 0 "register_operand" "")
++ (any_cond (cc0)
++ (const_int 0)))]
++ ""
++ {
++ if ( !avr32_expand_scc(<CODE>, operands) ){
++ FAIL;
++ }
++ DONE;
++ }
++ )
++
++
++(define_insn "comparesi_and_set"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (match_operator 1 "avr32_comparison_operator"
++ [ (compare (match_operand:SI 2 "register_operand" "r")
++ (match_operand:SI 3 "general_operand" "rKs06Ks21"))
++ (const_int 0)]))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[2]), operands[2], operands[3]);
++ return "sr%1\t%0";
++ }
++ [(set_attr "length" "6")
++ (set_attr "cc" "clobber")])
++
++(define_insn "comparehi_and_set"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (match_operator 1 "avr32_comparison_operator"
++ [ (compare (match_operand:HI 2 "register_operand" "r")
++ (match_operand:HI 3 "register_operand" "r"))
++ (const_int 0)]))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[2]), operands[2], operands[3]);
++ return "sr%1\t%0";
++ }
++ [(set_attr "length" "6")
++ (set_attr "cc" "clobber")])
++
++(define_insn "compareqi_and_set"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (match_operator 1 "avr32_comparison_operator"
++ [ (compare (match_operand:QI 2 "register_operand" "r")
++ (match_operand:QI 3 "register_operand" "r"))
++ (const_int 0)]))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[2]), operands[2], operands[3]);
++ return "sr%1\t%0";
++ }
++ [(set_attr "length" "6")
++ (set_attr "cc" "clobber")])
++
++(define_insn "*comparedi_and_set"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (match_operator 1 "avr32_comparison_operator"
++ [ (compare (match_operand:DI 2 "register_operand" "r")
++ (match_operand:DI 3 "register_operand" "r"))
++ (const_int 0)]))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[2]), operands[2], operands[3]);
++ return "sr%1\t%0";
++ }
++ [(set_attr "length" "6")
++ (set_attr "cc" "clobber")])
++
++(define_insn "*tstdi_and_set"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (match_operator 1 "avr32_comparison_operator"
++ [ (compare (match_operand:DI 2 "register_operand" "r")
++ (const_int 0))
++ (const_int 0)]))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[2]), operands[2], const0_rtx);
++ return "sr%1\t%0";
++ }
++ [(set_attr "length" "6")
++ (set_attr "cc" "clobber")])
++
++
++
++;;=============================================================================
++;; Conditional branch
++;;-----------------------------------------------------------------------------
++;; Branch to label if the specified condition codes are set.
++;;=============================================================================
++; branch if negative
++(define_insn "bmi"
++ [(set (pc)
++ (if_then_else (unspec:CC [(cc0) (const_int 0)] UNSPEC_COND_MI)
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "brmi %0"
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++(define_insn "*bmi-reverse"
++ [(set (pc)
++ (if_then_else (unspec:CC [(cc0) (const_int 0)] UNSPEC_COND_MI)
++ (pc)
++ (label_ref (match_operand 0 "" ""))))]
++ ""
++ "brpl %0"
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++; branch if positive
++(define_insn "bpl"
++ [(set (pc)
++ (if_then_else (unspec:CC [(cc0) (const_int 0)] UNSPEC_COND_PL)
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "brpl %0"
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++(define_insn "*bpl-reverse"
++ [(set (pc)
++ (if_then_else (unspec:CC [(cc0) (const_int 0)] UNSPEC_COND_PL)
++ (pc)
++ (label_ref (match_operand 0 "" ""))))]
++ ""
++ "brmi %0"
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++; branch if equal
++(define_insn "b<code>"
++ [(set (pc)
++ (if_then_else (any_cond:CC (cc0)
++ (const_int 0))
++ (label_ref (match_operand 0 "" ""))
++ (pc)))]
++ ""
++ "br<cond> %0 "
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++
++(define_insn "*b<code>-reverse"
++ [(set (pc)
++ (if_then_else (any_cond:CC (cc0)
++ (const_int 0))
++ (pc)
++ (label_ref (match_operand 0 "" ""))))]
++ ""
++ "br<invcond> %0 "
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 254))
++ (le (minus (pc) (match_dup 0)) (const_int 256)))
++ (const_int 2)] ; use compact branch
++ (const_int 4))) ; use extended branch
++ (set_attr "cc" "none")])
++
++
++
++;=============================================================================
++; Conditional Add/Subtract
++;-----------------------------------------------------------------------------
++; sub{cond4} Rd, imm
++;=============================================================================
++
++
++(define_expand "add<mode>cc"
++ [(set (match_operand:ADDCC 0 "register_operand" "")
++ (if_then_else:ADDCC (match_operand 1 "avr32_comparison_operator" "")
++ (match_operand:ADDCC 2 "register_immediate_operand" "")
++ (match_operand:ADDCC 3 "register_immediate_operand" "")))]
++ ""
++ {
++ if ( avr32_expand_addcc(<MODE>mode, operands ) )
++ DONE;
++ else
++ FAIL;
++ }
++ )
++
++
++(define_insn "add<ADDCC:mode>cc_cmp<CMP:mode>"
++ [(set (match_operand:ADDCC 0 "register_operand" "=&r")
++ (unspec:ADDCC [(match_operand 1 "avr32_comparison_operator" "")
++ (match_operand:ADDCC 2 "register_operand" "0")
++ (match_operand:ADDCC 3 "immediate_operand" "Ks08")
++ (match_operand:CMP 4 "register_operand" "r")
++ (match_operand:CMP 5 "<CMP:cmp_predicate>" "<CMP:cmp_constraint>")
++ ]
++ UNSPEC_ADDSICC ))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[4]), operands[4], operands[5]);
++
++ return "sub%1\t%0, %3";
++ }
++ [(set_attr "length" "8")
++ (set_attr "cc" "clobber")])
++
++
++;=============================================================================
++; Conditional Move
++;-----------------------------------------------------------------------------
++; mov{cond4} Rd, (Rs/imm)
++;=============================================================================
++(define_expand "mov<mode>cc"
++ [(set (match_operand:ADDCC 0 "register_operand" "")
++ (if_then_else:ADDCC (match_operand 1 "avr32_comparison_operator" "")
++ (match_operand:ADDCC 2 "register_immediate_operand" "")
++ (match_operand:ADDCC 3 "register_immediate_operand" "")))]
++ ""
++ {
++ if ( avr32_expand_movcc(<MODE>mode, operands ) )
++ DONE;
++ else
++ FAIL;
++ }
++ )
++
++(define_insn "mov<MOVCC:mode>cc_cmp<CMP:mode>"
++ [(set (match_operand:MOVCC 0 "register_operand" "=r,r,r")
++ (unspec:MOVCC [(match_operand 1 "avr32_comparison_operator" "")
++ (match_operand:MOVCC 2 "register_immediate_operand" "0,rKs08,rKs08")
++ (match_operand:MOVCC 3 "register_immediate_operand" "rKs08,0,rKs08")
++ (match_operand:CMP 4 "register_operand" "r, r, r")
++ (match_operand:CMP 5 "<CMP:cmp_predicate>" "<CMP:cmp_constraint>, <CMP:cmp_constraint>, <CMP:cmp_constraint>")
++ ]
++ UNSPEC_MOVSICC ))]
++ ""
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[4]), operands[4], operands[5]);
++
++ switch( which_alternative ){
++ case 0:
++ return "mov%i1 %0, %3";
++ case 1:
++ return "mov%1 %0, %2";
++ case 2:
++ return "mov%1 %0, %2\;mov%i1 %0, %3";
++ default:
++ abort();
++ }
++
++
++ }
++ [(set_attr "length" "8,8,12")
++ (set_attr "cc" "clobber")])
++
++
++;;=============================================================================
++;; jump
++;;-----------------------------------------------------------------------------
++;; Jump inside a function; an unconditional branch to a label.
++;;=============================================================================
++(define_insn "jump"
++ [(set (pc)
++ (label_ref (match_operand 0 "" "")))]
++ ""
++ {
++ if (get_attr_length(insn) > 4)
++ return "Can't jump this far";
++ return (get_attr_length(insn) == 2 ?
++ "rjmp %0" : "bral %0");
++ }
++ [(set_attr "type" "branch")
++ (set (attr "length")
++ (cond [(and (le (minus (match_dup 0) (pc)) (const_int 1022))
++ (le (minus (pc) (match_dup 0)) (const_int 1024)))
++ (const_int 2) ; use rjmp
++ (le (match_dup 0) (const_int 1048575))
++ (const_int 4)] ; use bral
++ (const_int 8))) ; do something else
++ (set_attr "cc" "none")])
++
++;;=============================================================================
++;; call
++;;-----------------------------------------------------------------------------
++;; Subroutine call instruction returning no value.
++;;=============================================================================
++(define_insn "call_internal"
++ [(parallel [(call (mem:SI (match_operand:SI 0 "avr32_call_operand" "r,U,T,W"))
++ (match_operand 1 "" ""))
++ (clobber (reg:SI LR_REGNUM))])]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "icall\t%0";
++ case 1:
++ return "rcall\t%0";
++ case 2:
++ return "mcall\t%0";
++ case 3:
++ if ( TARGET_HAS_ASM_ADDR_PSEUDOS )
++ return "call\t%0";
++ else
++ return "mcall\tr6[%0@got]";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "type" "call")
++ (set_attr "length" "2,4,4,10")
++ (set_attr "cc" "clobber")])
++
++
++(define_expand "call"
++ [(parallel [(call (match_operand:SI 0 "" "")
++ (match_operand 1 "" ""))
++ (clobber (reg:SI LR_REGNUM))])]
++ ""
++ {
++ rtx call_address;
++ if ( GET_CODE(operands[0]) != MEM )
++ FAIL;
++
++ call_address = XEXP(operands[0], 0);
++
++ /* If assembler supports call pseudo insn and the call
++ address is a symbol then nothing special needs to be done. */
++ if ( TARGET_HAS_ASM_ADDR_PSEUDOS
++ && (GET_CODE(call_address) == SYMBOL_REF) ){
++ /* We must however mark the function as using the GOT if
++ flag_pic is set, since the call insn might turn into
++ a mcall using the GOT ptr register. */
++ if ( flag_pic ){
++ current_function_uses_pic_offset_table = 1;
++ emit_call_insn(gen_call_internal(call_address, operands[1]));
++ DONE;
++ }
++ } else {
++ if ( flag_pic &&
++ GET_CODE(call_address) == SYMBOL_REF ){
++ current_function_uses_pic_offset_table = 1;
++ emit_call_insn(gen_call_internal(call_address, operands[1]));
++ DONE;
++ }
++
++ if ( !SYMBOL_REF_RCALL_FUNCTION_P(operands[0]) ){
++ if ( optimize_size &&
++ GET_CODE(call_address) == SYMBOL_REF ){
++ call_address = force_const_mem(SImode, call_address);
++ } else {
++ call_address = force_reg(SImode, call_address);
++ }
++ }
++ }
++ emit_call_insn(gen_call_internal(call_address, operands[1]));
++ DONE;
++ }
++)
++
++;;=============================================================================
++;; call_value
++;;-----------------------------------------------------------------------------
++;; Subrutine call instruction returning a value.
++;;=============================================================================
++(define_expand "call_value"
++ [(parallel [(set (match_operand:SI 0 "" "")
++ (call (match_operand:SI 1 "" "")
++ (match_operand 2 "" "")))
++ (clobber (reg:SI LR_REGNUM))])]
++ ""
++ {
++ rtx call_address;
++ if ( GET_CODE(operands[1]) != MEM )
++ FAIL;
++
++ call_address = XEXP(operands[1], 0);
++
++ /* If assembler supports call pseudo insn and the call
++ address is a symbol then nothing special needs to be done. */
++ if ( TARGET_HAS_ASM_ADDR_PSEUDOS
++ && (GET_CODE(call_address) == SYMBOL_REF) ){
++ /* We must however mark the function as using the GOT if
++ flag_pic is set, since the call insn might turn into
++ a mcall using the GOT ptr register. */
++ if ( flag_pic ) {
++ current_function_uses_pic_offset_table = 1;
++ emit_call_insn(gen_call_value_internal(operands[0], call_address, operands[2]));
++ DONE;
++ }
++ } else {
++ if ( flag_pic &&
++ GET_CODE(call_address) == SYMBOL_REF ){
++ current_function_uses_pic_offset_table = 1;
++ emit_call_insn(gen_call_value_internal(operands[0], call_address, operands[2]));
++ DONE;
++ }
++
++ if ( !SYMBOL_REF_RCALL_FUNCTION_P(operands[1]) ){
++ if ( optimize_size &&
++ GET_CODE(call_address) == SYMBOL_REF){
++ call_address = force_const_mem(SImode, call_address);
++ } else {
++ call_address = force_reg(SImode, call_address);
++ }
++ }
++ }
++ emit_call_insn(gen_call_value_internal(operands[0], call_address,
++ operands[2]));
++ DONE;
++
++ })
++
++(define_insn "call_value_internal"
++ [(parallel [(set (match_operand 0 "register_operand" "=r,r,r,r")
++ (call (mem:SI (match_operand:SI 1 "avr32_call_operand" "r,U,T,W"))
++ (match_operand 2 "" "")))
++ (clobber (reg:SI LR_REGNUM))])]
++ ;; Operand 2 not used on the AVR32.
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "icall\t%1";
++ case 1:
++ return "rcall\t%1";
++ case 2:
++ return "mcall\t%1";
++ case 3:
++ if ( TARGET_HAS_ASM_ADDR_PSEUDOS )
++ return "call\t%1";
++ else
++ return "mcall\tr6[%1@got]";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "type" "call")
++ (set_attr "length" "2,4,4,10")
++ (set_attr "cc" "call_set")])
++
++
++;;=============================================================================
++;; untyped_call
++;;-----------------------------------------------------------------------------
++;; Subrutine call instruction returning a value of any type.
++;; The code is copied from m68k.md (except gen_blockage is removed)
++;; Fixme!
++;;=============================================================================
++(define_expand "untyped_call"
++ [(parallel [(call (match_operand 0 "avr32_call_operand" "")
++ (const_int 0))
++ (match_operand 1 "" "")
++ (match_operand 2 "" "")])]
++ ""
++ {
++ int i;
++
++ emit_call_insn (GEN_CALL (operands[0], const0_rtx, NULL, const0_rtx));
++
++ for (i = 0; i < XVECLEN (operands[2], 0); i++) {
++ rtx set = XVECEXP (operands[2], 0, i);
++ emit_move_insn (SET_DEST (set), SET_SRC (set));
++ }
++
++ /* The optimizer does not know that the call sets the function value
++ registers we stored in the result block. We avoid problems by
++ claiming that all hard registers are used and clobbered at this
++ point. */
++ emit_insn (gen_blockage ());
++
++ DONE;
++ })
++
++
++;;=============================================================================
++;; return
++;;=============================================================================
++
++(define_insn "return"
++ [(return)]
++ "USE_RETURN_INSN (FALSE)"
++ {
++ avr32_output_return_instruction(TRUE, FALSE, NULL, NULL);
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++ )
++
++(define_insn "*return_value_imm"
++ [(parallel [(set (reg RETVAL_REGNUM) (match_operand 0 "immediate_operand" "i"))
++ (use (reg RETVAL_REGNUM))
++ (return)])]
++ "USE_RETURN_INSN (FALSE) &&
++ ((INTVAL(operands[0]) == -1) || (INTVAL(operands[0]) == 0) || (INTVAL(operands[0]) == 1))"
++ {
++ avr32_output_return_instruction(TRUE, FALSE, NULL, operands[0]);
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "type" "call")]
++ )
++
++(define_insn "*return_value_si"
++ [(set (reg RETVAL_REGNUM) (match_operand:SI 0 "register_operand" "r"))
++ (use (reg RETVAL_REGNUM))
++ (return)]
++ "USE_RETURN_INSN (TRUE)"
++ "retal %0";
++ [(set_attr "type" "call")]
++ )
++
++(define_insn "*return_value_hi"
++ [(parallel [(set (reg RETVAL_REGNUM) (match_operand:HI 0 "register_operand" "r"))
++ (use (reg RETVAL_REGNUM))
++ (return)])]
++ "USE_RETURN_INSN (TRUE)"
++ "retal %0"
++ [(set_attr "type" "call")]
++ )
++
++(define_insn "*return_value_qi"
++ [(parallel [(set (reg RETVAL_REGNUM) (match_operand:QI 0 "register_operand" "r"))
++ (use (reg RETVAL_REGNUM))
++ (return)])]
++ "USE_RETURN_INSN (TRUE)"
++ "retal %0"
++ [(set_attr "type" "call")]
++ )
++
++;;=============================================================================
++;; nop
++;;-----------------------------------------------------------------------------
++;; No-op instruction.
++;;=============================================================================
++(define_insn "nop"
++ [(const_int 0)]
++ ""
++ "nop"
++ [(set_attr "length" "2")
++ (set_attr "type" "alu")
++ (set_attr "cc" "none")])
++
++;;=============================================================================
++;; nonlocal_goto
++;;-----------------------------------------------------------------------------
++;; Jump from one function to a label in an outer function.
++;; Must invalidate return stack, since the function will be exited without
++;; a return
++;;=============================================================================
++(define_expand "nonlocal_goto"
++ [(use (match_operand 0 "" ""))
++ (use (match_operand 1 "" ""))
++ (use (match_operand 2 "" ""))
++ (use (match_operand 3 "" ""))]
++ ""
++ {
++ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__nonlocal_goto"),
++ 0, VOIDmode, 3,
++ operands[0], SImode,
++ operands[1], Pmode,
++ operands[2], SImode);
++
++ DONE;
++ }
++)
++
++
++(define_expand "builtin_longjmp"
++ [(use (match_operand 0 "" ""))]
++ ""
++ {
++ rtx ops[3];
++
++ ops[0] = gen_rtx_MEM (Pmode, gen_rtx_PLUS(SImode, operands[0], gen_rtx_CONST_INT(SImode,0)));
++ ops[1] = gen_rtx_MEM (Pmode, gen_rtx_PLUS(SImode, operands[0], gen_rtx_CONST_INT(SImode,4)));
++ ops[2] = gen_rtx_MEM (Pmode, gen_rtx_PLUS(SImode, operands[0], gen_rtx_CONST_INT(SImode,8)));
++
++
++ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__nonlocal_goto"),
++ 0, VOIDmode, 3,
++ ops[0], SImode,
++ ops[1], Pmode,
++ ops[2], SImode);
++
++ DONE;
++ }
++ )
++
++
++;;=============================================================================
++;; indirect_jump
++;;-----------------------------------------------------------------------------
++;; Jump to an address in reg or memory.
++;;=============================================================================
++(define_expand "indirect_jump"
++ [(set (pc)
++ (match_operand:SI 0 "general_operand" "r,m"))]
++ ""
++ {
++ /* One of the ops has to be in a register. */
++ if ( (flag_pic || TARGET_HAS_ASM_ADDR_PSEUDOS )
++ && !avr32_legitimate_pic_operand_p(operands[0]) )
++ operands[0] = legitimize_pic_address (operands[0], SImode, 0);
++ else if ( flag_pic && avr32_address_operand(operands[0], GET_MODE(operands[0])) )
++ /* If we have an address operand then this function uses the pic register. */
++ current_function_uses_pic_offset_table = 1;
++ })
++
++
++(define_insn "indirect_jump_internal"
++ [(set (pc)
++ (match_operand:SI 0 "general_operand" "r,m,W"))]
++ ""
++ {
++ switch( which_alternative ){
++ case 0:
++ return "mov\tpc, %0";
++ case 1:
++ if ( avr32_const_pool_ref_operand(operands[0], GET_MODE(operands[0])) )
++ return "lddpc\tpc, %0";
++ else
++ return "ld.w\tpc, %0";
++ case 2:
++ if ( flag_pic )
++ return "ld.w\tpc, r6[%0@got]";
++ else
++ return "lda.w\tpc, %0";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "2,4,8")
++ (set_attr "type" "call,call,call")
++ (set_attr "cc" "none,none,clobber")])
++
++
++;;=============================================================================
++;; casesi
++;;=============================================================================
++
++
++(define_expand "casesi"
++ [(match_operand:SI 0 "register_operand" "") ; index to jump on
++ (match_operand:SI 1 "const_int_operand" "") ; lower bound
++ (match_operand:SI 2 "const_int_operand" "") ; total range
++ (match_operand:SI 3 "" "") ; table label
++ (match_operand:SI 4 "" "")] ; Out of range label
++ ""
++ "
++ {
++ rtx reg;
++ if (operands[1] != const0_rtx)
++ {
++ if (!avr32_const_ok_for_constraint_p(INTVAL (operands[1]), 'I', \"Is21\")){
++ reg = force_reg(SImode, GEN_INT (INTVAL (operands[1])));
++ emit_insn (gen_subsi3 (reg, operands[0],
++ reg));
++ } else {
++ reg = gen_reg_rtx (SImode);
++ emit_insn (gen_addsi3 (reg, operands[0],
++ GEN_INT (-INTVAL (operands[1]))));
++ }
++ operands[0] = reg;
++ }
++
++ if (!avr32_const_ok_for_constraint_p(INTVAL (operands[2]), 'K', \"Ks21\"))
++ operands[2] = force_reg (SImode, operands[2]);
++
++ emit_jump_insn (gen_casesi_internal (operands[0], operands[2], operands[3],
++ operands[4], gen_reg_rtx(SImode)));
++ DONE;
++ }"
++)
++
++;; The USE in this pattern is needed to tell flow analysis that this is
++;; a CASESI insn. It has no other purpose.
++(define_insn "casesi_internal"
++ [(parallel [(set (pc)
++ (if_then_else
++ (leu (match_operand:SI 0 "register_operand" "r")
++ (match_operand:SI 1 "register_immediate_operand" "rKu03"))
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (label_ref (match_operand 2 "" ""))))
++ (label_ref (match_operand 3 "" ""))))
++ (clobber (match_operand:SI 4 "register_operand" "=r"))
++ (use (label_ref (match_dup 2)))])]
++ ""
++ {
++ if (flag_pic)
++ return "cp.w\t%0, %1\;brhi\t%3\;sub\t%4, pc, -(%2 - .)\;add\tpc, %4, %0 << 2";
++ return "cp.w\t%0, %1\;brhi\t%3\;sub\t%4, pc, -(%2 - .)\;ld.w\tpc, %4[%0 << 2]";
++ }
++ [(set_attr "cc" "clobber")
++ (set_attr "length" "16")]
++)
++
++
++(define_insn "prefetch"
++ [(prefetch (match_operand:SI 0 "register_operand" "r")
++ (match_operand 1 "const_int_operand" "")
++ (match_operand 2 "const_int_operand" ""))]
++ ""
++ {
++ return "pref\t%0[0]";
++ }
++
++ [(set_attr "length" "4")
++ (set_attr "type" "load")
++ (set_attr "cc" "none")])
++
++
++
++;;=============================================================================
++;; prologue
++;;-----------------------------------------------------------------------------
++;; This pattern, if defined, emits RTL for entry to a function. The function
++;; entry i responsible for setting up the stack frame, initializing the frame
++;; pointer register, saving callee saved registers, etc.
++;;=============================================================================
++(define_expand "prologue"
++ [(clobber (const_int 0))]
++ ""
++ "
++ avr32_expand_prologue();
++ DONE;
++ "
++ )
++
++;;=============================================================================
++;; eh_return
++;;-----------------------------------------------------------------------------
++;; This pattern, if defined, affects the way __builtin_eh_return, and
++;; thence the call frame exception handling library routines, are
++;; built. It is intended to handle non-trivial actions needed along
++;; the abnormal return path.
++;;
++;; The address of the exception handler to which the function should
++;; return is passed as operand to this pattern. It will normally need
++;; to copied by the pattern to some special register or memory
++;; location. If the pattern needs to determine the location of the
++;; target call frame in order to do so, it may use
++;; EH_RETURN_STACKADJ_RTX, if defined; it will have already been
++;; assigned.
++;;
++;; If this pattern is not defined, the default action will be to
++;; simply copy the return address to EH_RETURN_HANDLER_RTX. Either
++;; that macro or this pattern needs to be defined if call frame
++;; exception handling is to be used.
++(define_expand "eh_return"
++ [(use (match_operand 0 "general_operand" ""))]
++ ""
++ "
++ avr32_set_return_address (operands[0]);
++ DONE;
++ "
++ )
++
++;;=============================================================================
++;; ffssi2
++;;-----------------------------------------------------------------------------
++(define_insn "ffssi2"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (ffs:SI (match_operand:SI 1 "register_operand" "r"))) ]
++ ""
++ "mov %0, %1
++ brev %0
++ clz %0, %0
++ sub %0, -1
++ cp %0, 33
++ moveq %0, 0"
++ [(set_attr "length" "18")
++ (set_attr "cc" "clobber")]
++ )
++
++
++
++;;=============================================================================
++;; swap_h
++;;-----------------------------------------------------------------------------
++(define_insn "*swap_h"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (ior:SI (ashift:SI (match_dup 0) (const_int 16))
++ (lshiftrt:SI (match_dup 0) (const_int 16))))]
++ ""
++ "swap.h %0"
++ [(set_attr "length" "2")]
++ )
++
++(define_insn_and_split "bswap_16"
++ [ (set (match_operand:HI 0 "avr32_bswap_operand" "=r,RKs13,r")
++ (ior:HI (and:HI (lshiftrt:HI (match_operand:HI 1 "avr32_bswap_operand" "r,r,RKs13")
++ (const_int 8))
++ (const_int 255))
++ (ashift:HI (and:HI (match_dup 1)
++ (const_int 255))
++ (const_int 8))))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ if ( REGNO(operands[0]) == REGNO(operands[1]))
++ return "swap.bh\t%0";
++ else
++ return "mov\t%0, %1\;swap.bh\t%0";
++ case 1:
++ return "stswp.h\t%0, %1";
++ case 2:
++ return "ldswp.sh\t%0, %1";
++ default:
++ abort();
++ }
++ }
++
++ "(reload_completed &&
++ REG_P(operands[0]) && REG_P(operands[1])
++ && (REGNO(operands[0]) != REGNO(operands[1])))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 0)
++ (ior:HI (and:HI (lshiftrt:HI (match_dup 0)
++ (const_int 8))
++ (const_int 255))
++ (ashift:HI (and:HI (match_dup 0)
++ (const_int 255))
++ (const_int 8))))]
++ ""
++
++ [(set_attr "length" "4,4,4")
++ (set_attr "type" "alu,store,load_rm")]
++ )
++
++(define_insn_and_split "bswap_32"
++ [ (set (match_operand:SI 0 "avr32_bswap_operand" "=r,RKs14,r")
++ (ior:SI (ior:SI (lshiftrt:SI (and:SI (match_operand:SI 1 "avr32_bswap_operand" "=r,r,RKs14")
++ (const_int 4278190080))
++ (const_int 24))
++ (lshiftrt:SI (and:SI (match_dup 1)
++ (const_int 16711680))
++ (const_int 8)))
++ (ior:SI (ashift:SI (and:SI (match_dup 1)
++ (const_int 65280))
++ (const_int 8))
++ (ashift:SI (and:SI (match_dup 1)
++ (const_int 255))
++ (const_int 24)))))]
++ ""
++ {
++ switch ( which_alternative ){
++ case 0:
++ if ( REGNO(operands[0]) == REGNO(operands[1]))
++ return "swap.b\t%0";
++ else
++ return "mov\t%0, %1\;swap.b\t%0";
++ case 1:
++ return "stswp.w\t%0, %1";
++ case 2:
++ return "ldswp.w\t%0, %1";
++ default:
++ abort();
++ }
++ }
++ "(reload_completed &&
++ REG_P(operands[0]) && REG_P(operands[1])
++ && (REGNO(operands[0]) != REGNO(operands[1])))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 0)
++ (ior:SI (ior:SI (lshiftrt:SI (and:SI (match_dup 0)
++ (const_int 4278190080))
++ (const_int 24))
++ (lshiftrt:SI (and:SI (match_dup 0)
++ (const_int 16711680))
++ (const_int 8)))
++ (ior:SI (ashift:SI (and:SI (match_dup 0)
++ (const_int 65280))
++ (const_int 8))
++ (ashift:SI (and:SI (match_dup 0)
++ (const_int 255))
++ (const_int 24)))))]
++ ""
++
++ [(set_attr "length" "4,4,4")
++ (set_attr "type" "alu,store,load_rm")]
++ )
++
++
++;;=============================================================================
++;; blockage
++;;-----------------------------------------------------------------------------
++;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
++;; all of memory. This blocks insns from being moved across this point.
++
++(define_insn "blockage"
++ [(unspec_volatile [(const_int 0)] VUNSPEC_BLOCKAGE)]
++ ""
++ ""
++ [(set_attr "length" "0")]
++)
++
++;;=============================================================================
++;; clzsi2
++;;-----------------------------------------------------------------------------
++(define_insn "clzsi2"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (clz:SI (match_operand:SI 1 "register_operand" "r"))) ]
++ ""
++ "clz %0, %1"
++ [(set_attr "length" "4")
++ (set_attr "cc" "set_z")]
++ )
++
++;;=============================================================================
++;; ctzsi2
++;;-----------------------------------------------------------------------------
++(define_insn "ctzsi2"
++ [ (set (match_operand:SI 0 "register_operand" "=r,r")
++ (ctz:SI (match_operand:SI 1 "register_operand" "0,r"))) ]
++ ""
++ "@
++ brev\t%0\;clz\t%0, %0
++ mov\t%0, %1\;brev\t%0\;clz\t%0, %0"
++ [(set_attr "length" "8")
++ (set_attr "cc" "set_z")]
++ )
++
++;;=============================================================================
++;; cache instructions
++;;-----------------------------------------------------------------------------
++(define_insn "cache"
++ [ (unspec_volatile [(match_operand:SI 0 "register_operand" "r")
++ (match_operand:SI 1 "immediate_operand" "Ku05")] VUNSPEC_CACHE)]
++ ""
++ "cache %0[0], %1"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "sync"
++ [ (unspec_volatile [(match_operand:SI 0 "immediate_operand" "Ku08")] VUNSPEC_SYNC)]
++ ""
++ "sync %0"
++ [(set_attr "length" "4")]
++ )
++
++;;=============================================================================
++;; TLB instructions
++;;-----------------------------------------------------------------------------
++(define_insn "tlbr"
++ [ (unspec_volatile [(const_int 0)] VUNSPEC_TLBR)]
++ ""
++ "tlbr"
++ [(set_attr "length" "2")]
++ )
++
++(define_insn "tlbw"
++ [ (unspec_volatile [(const_int 0)] VUNSPEC_TLBW)]
++ ""
++ "tlbw"
++ [(set_attr "length" "2")]
++ )
++
++(define_insn "tlbs"
++ [ (unspec_volatile [(const_int 0)] VUNSPEC_TLBS)]
++ ""
++ "tlbs"
++ [(set_attr "length" "2")]
++ )
++
++;;=============================================================================
++;; Breakpoint instruction
++;;-----------------------------------------------------------------------------
++(define_insn "breakpoint"
++ [ (unspec_volatile [(const_int 0)] VUNSPEC_BREAKPOINT)]
++ ""
++ "breakpoint"
++ [(set_attr "length" "2")]
++ )
++
++;;=============================================================================
++;; Xchg instruction
++;;-----------------------------------------------------------------------------
++(define_insn "xchg"
++ [ (parallel [(set (match_operand:SI 0 "register_operand" "=&r")
++ (mem:SI (match_operand:SI 1 "register_operand" "r")))
++ (set (mem:SI (match_operand:SI 2 "register_operand" "=1"))
++ (match_operand:SI 3 "register_operand" "r"))])]
++ ""
++ "xchg\t%0, %1, %3"
++ [(set_attr "length" "4")]
++ )
++
++;;=============================================================================
++;; mtsr/mfsr instruction
++;;-----------------------------------------------------------------------------
++(define_insn "mtsr"
++ [ (unspec_volatile [(match_operand 0 "immediate_operand" "i")
++ (match_operand:SI 1 "register_operand" "r")] VUNSPEC_MTSR)]
++ ""
++ "mtsr\t%0, %1"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mfsr"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (unspec_volatile:SI [(match_operand 1 "immediate_operand" "i")] VUNSPEC_MFSR)) ]
++ ""
++ "mfsr\t%0, %1"
++ [(set_attr "length" "4")]
++ )
++
++;;=============================================================================
++;; mtdr/mfdr instruction
++;;-----------------------------------------------------------------------------
++(define_insn "mtdr"
++ [ (unspec_volatile [(match_operand 0 "immediate_operand" "i")
++ (match_operand:SI 1 "register_operand" "r")] VUNSPEC_MTDR)]
++ ""
++ "mtdr\t%0, %1"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mfdr"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (unspec_volatile:SI [(match_operand 1 "immediate_operand" "i")] VUNSPEC_MFDR)) ]
++ ""
++ "mfdr\t%0, %1"
++ [(set_attr "length" "4")]
++ )
++
++;;=============================================================================
++;; musfr
++;;-----------------------------------------------------------------------------
++(define_insn "musfr"
++ [ (unspec_volatile [(match_operand:SI 0 "register_operand" "r")] VUNSPEC_MUSFR)]
++ ""
++ "musfr\t%0"
++ [(set_attr "length" "2")
++ (set_attr "cc" "clobber")]
++ )
++
++(define_insn "mustr"
++ [ (set (match_operand:SI 0 "register_operand" "=r")
++ (unspec_volatile:SI [(const_int 0)] VUNSPEC_MUSTR)) ]
++ ""
++ "mustr\t%0"
++ [(set_attr "length" "2")]
++ )
++
++;;=============================================================================
++;; Saturation Round Scale instruction
++;;-----------------------------------------------------------------------------
++(define_insn "sats"
++ [ (set (match_operand:SI 0 "register_operand" "+r")
++ (unspec:SI [(match_dup 0)
++ (match_operand 1 "immediate_operand" "Ku05")
++ (match_operand 2 "immediate_operand" "Ku05")]
++ UNSPEC_SATS)) ]
++ "TARGET_DSP"
++ "sats\t%0 >> %1, %2"
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")]
++ )
++
++(define_insn "satu"
++ [ (set (match_operand:SI 0 "register_operand" "+r")
++ (unspec:SI [(match_dup 0)
++ (match_operand 1 "immediate_operand" "Ku05")
++ (match_operand 2 "immediate_operand" "Ku05")]
++ UNSPEC_SATU)) ]
++ "TARGET_DSP"
++ "satu\t%0 >> %1, %2"
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")]
++ )
++
++(define_insn "satrnds"
++ [ (set (match_operand:SI 0 "register_operand" "+r")
++ (unspec:SI [(match_dup 0)
++ (match_operand 1 "immediate_operand" "Ku05")
++ (match_operand 2 "immediate_operand" "Ku05")]
++ UNSPEC_SATRNDS)) ]
++ "TARGET_DSP"
++ "satrnds\t%0 >> %1, %2"
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")]
++ )
++
++(define_insn "satrndu"
++ [ (set (match_operand:SI 0 "register_operand" "+r")
++ (unspec:SI [(match_dup 0)
++ (match_operand 1 "immediate_operand" "Ku05")
++ (match_operand 2 "immediate_operand" "Ku05")]
++ UNSPEC_SATRNDU)) ]
++ "TARGET_DSP"
++ "sats\t%0 >> %1, %2"
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")]
++ )
++
++;; Special patterns for dealing with the constant pool
++
++(define_insn "align_4"
++ [(unspec_volatile [(const_int 0)] VUNSPEC_ALIGN)]
++ ""
++ {
++ assemble_align (32);
++ return "";
++ }
++ [(set_attr "length" "2")]
++)
++
++(define_insn "consttable_start"
++ [(unspec_volatile [(const_int 0)] VUNSPEC_POOL_START)]
++ ""
++ {
++ return ".cpool";
++ }
++ [(set_attr "length" "0")]
++ )
++
++(define_insn "consttable_end"
++ [(unspec_volatile [(const_int 0)] VUNSPEC_POOL_END)]
++ ""
++ {
++ making_const_table = FALSE;
++ return "";
++ }
++ [(set_attr "length" "0")]
++)
++
++
++(define_insn "consttable_4"
++ [(unspec_volatile [(match_operand 0 "" "")] VUNSPEC_POOL_4)]
++ ""
++ {
++ making_const_table = TRUE;
++ switch (GET_MODE_CLASS (GET_MODE (operands[0])))
++ {
++ case MODE_FLOAT:
++ {
++ REAL_VALUE_TYPE r;
++ char real_string[1024];
++ REAL_VALUE_FROM_CONST_DOUBLE (r, operands[0]);
++ real_to_decimal(real_string, &r, 1024, 0, 1);
++ asm_fprintf (asm_out_file, "\t.float\t%s\n", real_string);
++ break;
++ }
++ default:
++ assemble_integer (operands[0], 4, 0, 1);
++ break;
++ }
++ return "";
++ }
++ [(set_attr "length" "4")]
++)
++
++(define_insn "consttable_8"
++ [(unspec_volatile [(match_operand 0 "" "")] VUNSPEC_POOL_8)]
++ ""
++ {
++ making_const_table = TRUE;
++ switch (GET_MODE_CLASS (GET_MODE (operands[0])))
++ {
++ case MODE_FLOAT:
++ {
++ REAL_VALUE_TYPE r;
++ char real_string[1024];
++ REAL_VALUE_FROM_CONST_DOUBLE (r, operands[0]);
++ real_to_decimal(real_string, &r, 1024, 0, 1);
++ asm_fprintf (asm_out_file, "\t.double\t%s\n", real_string);
++ break;
++ }
++ default:
++ assemble_integer(operands[0], 8, 0, 1);
++ break;
++ }
++ return "";
++ }
++ [(set_attr "length" "8")]
++)
++
++;;=============================================================================
++;; coprocessor instructions
++;;-----------------------------------------------------------------------------
++(define_insn "cop"
++ [ (unspec_volatile [(match_operand 0 "immediate_operand" "Ku03")
++ (match_operand 1 "immediate_operand" "Ku04")
++ (match_operand 2 "immediate_operand" "Ku04")
++ (match_operand 3 "immediate_operand" "Ku04")
++ (match_operand 4 "immediate_operand" "Ku07")] VUNSPEC_COP)]
++ ""
++ "cop\tcp%0, cr%1, cr%2, cr%3, %4"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mvcrsi"
++ [ (set (match_operand:SI 0 "avr32_cop_move_operand" "=r,<,Z")
++ (unspec_volatile:SI [(match_operand 1 "immediate_operand" "Ku03,Ku03,Ku03")
++ (match_operand 2 "immediate_operand" "Ku04,Ku04,Ku04")]
++ VUNSPEC_MVCR)) ]
++ ""
++ "@
++ mvcr.w\tcp%1, %0, cr%2
++ stcm.w\tcp%1, %0, cr%2
++ stc.w\tcp%1, %0, cr%2"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mvcrdi"
++ [ (set (match_operand:DI 0 "avr32_cop_move_operand" "=r,<,Z")
++ (unspec_volatile:DI [(match_operand 1 "immediate_operand" "Ku03,Ku03,Ku03")
++ (match_operand 2 "immediate_operand" "Ku04,Ku04,Ku04")]
++ VUNSPEC_MVCR)) ]
++ ""
++ "@
++ mvcr.d\tcp%1, %0, cr%2
++ stcm.d\tcp%1, %0, cr%2-cr%i2
++ stc.d\tcp%1, %0, cr%2"
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mvrcsi"
++ [ (unspec_volatile:SI [(match_operand 0 "immediate_operand" "Ku03,Ku03,Ku03")
++ (match_operand 1 "immediate_operand" "Ku04,Ku04,Ku04")
++ (match_operand:SI 2 "avr32_cop_move_operand" "r,>,Z")]
++ VUNSPEC_MVRC)]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "mvrc.w\tcp%0, cr%1, %2";
++ case 1:
++ return "ldcm.w\tcp%0, %2, cr%1";
++ case 2:
++ return "ldc.w\tcp%0, cr%1, %2";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "4")]
++ )
++
++(define_insn "mvrcdi"
++ [ (unspec_volatile:DI [(match_operand 0 "immediate_operand" "Ku03,Ku03,Ku03")
++ (match_operand 1 "immediate_operand" "Ku04,Ku04,Ku04")
++ (match_operand:DI 2 "avr32_cop_move_operand" "r,>,Z")]
++ VUNSPEC_MVRC)]
++ ""
++ {
++ switch (which_alternative){
++ case 0:
++ return "mvrc.d\tcp%0, cr%1, %2";
++ case 1:
++ return "ldcm.d\tcp%0, %2, cr%1-cr%i1";
++ case 2:
++ return "ldc.d\tcp%0, cr%1, %2";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "length" "4")]
++ )
++
++;;=============================================================================
++;; epilogue
++;;-----------------------------------------------------------------------------
++;; This pattern emits RTL for exit from a function. The function exit is
++;; responsible for deallocating the stack frame, restoring callee saved
++;; registers and emitting the return instruction.
++;; ToDo: using TARGET_ASM_FUNCTION_PROLOGUE instead.
++;;=============================================================================
++(define_expand "epilogue"
++ [(unspec_volatile [(return)] VUNSPEC_EPILOGUE)]
++ ""
++ "
++ if (USE_RETURN_INSN (FALSE)){
++ emit_jump_insn (gen_return ());
++ DONE;
++ }
++ emit_jump_insn (gen_rtx_UNSPEC_VOLATILE (VOIDmode,
++ gen_rtvec (1,
++ gen_rtx_RETURN (VOIDmode)),
++ VUNSPEC_EPILOGUE));
++ DONE;
++ "
++ )
++
++(define_insn "*epilogue_insns"
++ [(unspec_volatile [(return)] VUNSPEC_EPILOGUE)]
++ ""
++ {
++ avr32_output_return_instruction (FALSE, FALSE, NULL, NULL);
++ return "";
++ }
++ ; Length is absolute worst case
++ [(set_attr "type" "branch")
++ (set_attr "length" "12")]
++ )
++
++(define_insn "*epilogue_insns_ret_imm"
++ [(parallel [(set (reg RETVAL_REGNUM) (match_operand 0 "immediate_operand" "i"))
++ (use (reg RETVAL_REGNUM))
++ (unspec_volatile [(return)] VUNSPEC_EPILOGUE)])]
++ "((INTVAL(operands[0]) == -1) || (INTVAL(operands[0]) == 0) || (INTVAL(operands[0]) == 1))"
++ {
++ avr32_output_return_instruction (FALSE, FALSE, NULL, operands[0]);
++ return "";
++ }
++ ; Length is absolute worst case
++ [(set_attr "type" "branch")
++ (set_attr "length" "12")]
++ )
++
++(define_insn "sibcall_epilogue"
++ [(unspec_volatile [(const_int 0)] VUNSPEC_EPILOGUE)]
++ ""
++ {
++ avr32_output_return_instruction (FALSE, FALSE, NULL, NULL);
++ return "";
++ }
++;; Length is absolute worst case
++ [(set_attr "type" "branch")
++ (set_attr "length" "12")]
++ )
++
++(define_insn "*sibcall_epilogue_insns_ret_imm"
++ [(parallel [(set (reg RETVAL_REGNUM) (match_operand 0 "immediate_operand" "i"))
++ (use (reg RETVAL_REGNUM))
++ (unspec_volatile [(const_int 0)] VUNSPEC_EPILOGUE)])]
++ "((INTVAL(operands[0]) == -1) || (INTVAL(operands[0]) == 0) || (INTVAL(operands[0]) == 1))"
++ {
++ avr32_output_return_instruction (FALSE, FALSE, NULL, operands[0]);
++ return "";
++ }
++ ; Length is absolute worst case
++ [(set_attr "type" "branch")
++ (set_attr "length" "12")]
++ )
++
++(define_insn "ldxi"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (mem:SI (plus:SI
++ (match_operand:SI 1 "register_operand" "r")
++ (mult:SI (zero_extract:SI (match_operand:SI 2 "register_operand" "r")
++ (const_int 8)
++ (match_operand:SI 3 "immediate_operand" "Ku05"))
++ (const_int 4)))))]
++ "(INTVAL(operands[3]) == 24 || INTVAL(operands[3]) == 16 || INTVAL(operands[3]) == 8
++ || INTVAL(operands[3]) == 0)"
++ {
++ switch ( INTVAL(operands[3]) ){
++ case 0:
++ return "ld.w %0, %1[%2:b << 2]";
++ case 8:
++ return "ld.w %0, %1[%2:l << 2]";
++ case 16:
++ return "ld.w %0, %1[%2:u << 2]";
++ case 24:
++ return "ld.w %0, %1[%2:t << 2]";
++ default:
++ internal_error("illegal operand for ldxi");
++ }
++ }
++ [(set_attr "type" "load")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
++
++
++
++
++
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; sub r8, r7, 8
++;; st.w r8[0x0], r12
++;; to
++;; sub r8, r7, 8
++;; st.w r7[-0x8], r12
++;;=============================================================================
++; (set (reg:SI 9 r8)
++; (plus:SI (reg/f:SI 6 r7)
++; (const_int ...)))
++; (set (mem:SI (reg:SI 9 r8))
++; (reg:SI 12 r12))
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (plus:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (mem:SI (match_dup 0))
++ (match_operand:SI 3 "register_operand" ""))]
++ "REGNO(operands[0]) != REGNO(operands[1])"
++ [(set (match_dup 0)
++ (plus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (mem:SI (plus:SI (match_dup 1)
++ (match_dup 2)))
++ (match_dup 3))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; sub r6, r7, 4
++;; ld.w r6, r6[0x0]
++;; to
++;; sub r6, r7, 4
++;; ld.w r6, r7[-0x4]
++;;=============================================================================
++; (set (reg:SI 7 r6)
++; (plus:SI (reg/f:SI 6 r7)
++; (const_int -4 [0xfffffffc])))
++; (set (reg:SI 7 r6)
++; (mem:SI (reg:SI 7 r6)))
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (plus:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (mem:SI (match_dup 0)))]
++ "REGNO(operands[0]) != REGNO(operands[1])"
++ [(set (match_dup 0)
++ (plus:SI (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 3)
++ (mem:SI (plus:SI (match_dup 1)
++ (match_dup 2))))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; ld.sb r0, r7[-0x6]
++;; cashs.b r0
++;; to
++;; ld.sb r0, r7[-0x6]
++;;=============================================================================
++(define_peephole2
++ [(set (match_operand:QI 0 "register_operand" "")
++ (match_operand:QI 1 "load_sb_memory_operand" ""))
++ (set (match_operand:SI 2 "register_operand" "")
++ (sign_extend:SI (match_dup 0)))]
++ "(REGNO(operands[0]) == REGNO(operands[2]) || peep2_reg_dead_p(2, operands[0]))"
++ [(set (match_dup 2)
++ (sign_extend:SI (match_dup 1)))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; ld.ub r0, r7[-0x6]
++;; cashu.b r0
++;; to
++;; ld.ub r0, r7[-0x6]
++;;=============================================================================
++(define_peephole2
++ [(set (match_operand:QI 0 "register_operand" "")
++ (match_operand:QI 1 "memory_operand" ""))
++ (set (match_operand:SI 2 "register_operand" "")
++ (zero_extend:SI (match_dup 0)))]
++ "(REGNO(operands[0]) == REGNO(operands[2])) || peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 2)
++ (zero_extend:SI (match_dup 1)))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; ld.sh r0, r7[-0x6]
++;; casts.h r0
++;; to
++;; ld.sh r0, r7[-0x6]
++;;=============================================================================
++(define_peephole2
++ [(set (match_operand:HI 0 "register_operand" "")
++ (match_operand:HI 1 "memory_operand" ""))
++ (set (match_operand:SI 2 "register_operand" "")
++ (sign_extend:SI (match_dup 0)))]
++ "(REGNO(operands[0]) == REGNO(operands[2])) || peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 2)
++ (sign_extend:SI (match_dup 1)))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; ld.uh r0, r7[-0x6]
++;; castu.h r0
++;; to
++;; ld.uh r0, r7[-0x6]
++;;=============================================================================
++(define_peephole2
++ [(set (match_operand:HI 0 "register_operand" "")
++ (match_operand:HI 1 "memory_operand" ""))
++ (set (match_operand:SI 2 "register_operand" "")
++ (zero_extend:SI (match_dup 0)))]
++ "(REGNO(operands[0]) == REGNO(operands[2])) || peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 2)
++ (zero_extend:SI (match_dup 1)))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; mul rd, rx, ry
++;; add rd2, rd
++;; to
++;; mac rd2, rx, ry
++;;=============================================================================
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (mult:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "register_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (plus:SI (match_dup 3)
++ (match_dup 0)))]
++ "peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (plus:SI (mult:SI (match_dup 1)
++ (match_dup 2))
++ (match_dup 3)))]
++ "")
++
++
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Changing
++;; bfextu rd, rs, k5, 1 or and(h/l) rd, one_bit_set_mask
++;; to
++;; bld rs, k5
++;;
++;; If rd is dead after the operation.
++;;=============================================================================
++(define_peephole2
++ [ (set (match_operand:SI 0 "register_operand" "")
++ (zero_extract:SI (match_operand:SI 1 "register_operand" "")
++ (const_int 1)
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (cc0)
++ (match_dup 0))]
++ "peep2_reg_dead_p(2, operands[0])"
++ [(set (cc0)
++ (and:SI (match_dup 1)
++ (match_dup 2)))]
++ "operands[2] = GEN_INT(1 << INTVAL(operands[2]));")
++
++(define_peephole2
++ [ (set (match_operand:SI 0 "register_operand" "")
++ (and:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "one_bit_set_operand" "")))
++ (set (cc0)
++ (match_dup 0))]
++ "peep2_reg_dead_p(2, operands[0])"
++ [(set (cc0)
++ (and:SI (match_dup 1)
++ (match_dup 2)))]
++ "")
++
++;;=============================================================================
++;; Peephole optimizing
++;;-----------------------------------------------------------------------------
++;; Load with extracted index: ld.w Rd, Rb[Ri:{t/u/b/l} << 2]
++;;
++;;=============================================================================
++
++
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "")
++ (zero_extract:SI (match_operand:SI 1 "register_operand" "")
++ (const_int 8)
++ (match_operand:SI 2 "avr32_extract_shift_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 4 "register_operand" ""))))]
++
++ "(dead_or_set_p(insn, operands[0]))"
++ {
++ switch ( INTVAL(operands[2]) ){
++ case 0:
++ return "ld.w %3, %4[%1:b << 2]";
++ case 8:
++ return "ld.w %3, %4[%1:l << 2]";
++ case 16:
++ return "ld.w %3, %4[%1:u << 2]";
++ case 24:
++ return "ld.w %3, %4[%1:t << 2]";
++ default:
++ internal_error("illegal operand for ldxi");
++ }
++ }
++ [(set_attr "type" "load")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")]
++ )
++
++
++
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "")
++ (and:SI (match_operand:SI 1 "register_operand" "") (const_int 255)))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 3 "register_operand" ""))))]
++
++ "(dead_or_set_p(insn, operands[0]))"
++
++ "ld.w %2, %3[%1:b << 2]"
++ [(set_attr "type" "load")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")]
++ )
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (zero_extract:SI (match_operand:SI 1 "register_operand" "")
++ (const_int 8)
++ (match_operand:SI 2 "avr32_extract_shift_operand" "")))
++ (set (match_operand:SI 3 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 4 "register_operand" ""))))]
++
++ "(peep2_reg_dead_p(2, operands[0]))
++ || (REGNO(operands[0]) == REGNO(operands[3]))"
++ [(set (match_dup 3)
++ (mem:SI (plus:SI
++ (match_dup 4)
++ (mult:SI (zero_extract:SI (match_dup 1)
++ (const_int 8)
++ (match_dup 2))
++ (const_int 4)))))]
++ )
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (zero_extend:SI (match_operand:QI 1 "register_operand" "")))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 3 "register_operand" ""))))]
++
++ "(peep2_reg_dead_p(2, operands[0]))
++ || (REGNO(operands[0]) == REGNO(operands[2]))"
++ [(set (match_dup 2)
++ (mem:SI (plus:SI
++ (match_dup 3)
++ (mult:SI (zero_extract:SI (match_dup 1)
++ (const_int 8)
++ (const_int 0))
++ (const_int 4)))))]
++ "operands[1] = gen_rtx_REG(SImode, REGNO(operands[1]));"
++ )
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (and:SI (match_operand:SI 1 "register_operand" "")
++ (const_int 255)))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 3 "register_operand" ""))))]
++
++ "(peep2_reg_dead_p(2, operands[0]))
++ || (REGNO(operands[0]) == REGNO(operands[2]))"
++ [(set (match_dup 2)
++ (mem:SI (plus:SI
++ (match_dup 3)
++ (mult:SI (zero_extract:SI (match_dup 1)
++ (const_int 8)
++ (const_int 0))
++ (const_int 4)))))]
++ ""
++ )
++
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
++ (const_int 24)))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4))
++ (match_operand:SI 3 "register_operand" ""))))]
++
++ "(peep2_reg_dead_p(2, operands[0]))
++ || (REGNO(operands[0]) == REGNO(operands[2]))"
++ [(set (match_dup 2)
++ (mem:SI (plus:SI
++ (match_dup 3)
++ (mult:SI (zero_extract:SI (match_dup 1)
++ (const_int 8)
++ (const_int 24))
++ (const_int 4)))))]
++ ""
++ )
++
++
++;;************************************************
++;; ANDN
++;;
++;;************************************************
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (not:SI (match_operand:SI 1 "register_operand" "")))
++ (set (match_operand:SI 2 "register_operand" "")
++ (and:SI (match_dup 2)
++ (match_dup 0)))]
++ "peep2_reg_dead_p(2, operands[0])"
++
++ [(set (match_dup 2)
++ (and:SI (match_dup 2)
++ (not:SI (match_dup 1))
++ ))]
++ ""
++)
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (not:SI (match_operand:SI 1 "register_operand" "")))
++ (set (match_operand:SI 2 "register_operand" "")
++ (and:SI (match_dup 0)
++ (match_dup 2)
++ ))]
++ "peep2_reg_dead_p(2, operands[0])"
++
++ [(set (match_dup 2)
++ (and:SI (match_dup 2)
++ (not:SI (match_dup 1))
++ ))]
++
++ ""
++)
++
++
++;;=================================================================
++;; Addabs peephole
++;;=================================================================
++
++(define_peephole
++ [(set (match_operand:SI 2 "register_operand" "=r")
++ (abs:SI (match_operand:SI 1 "register_operand" "r")))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (match_operand:SI 3 "register_operand" "r")
++ (match_dup 2)))]
++ "dead_or_set_p(insn, operands[2])"
++ "addabs %0, %3, %1"
++ [(set_attr "length" "4")
++ (set_attr "cc" "set_z")])
++
++(define_peephole
++ [(set (match_operand:SI 2 "register_operand" "=r")
++ (abs:SI (match_operand:SI 1 "register_operand" "r")))
++ (set (match_operand:SI 0 "register_operand" "=r")
++ (plus:SI (match_dup 2)
++ (match_operand:SI 3 "register_operand" "r")))]
++ "dead_or_set_p(insn, operands[2])"
++ "addabs %0, %3, %1"
++ [(set_attr "length" "4")
++ (set_attr "cc" "set_z")])
++
++
++;;=================================================================
++;; Detect roundings
++;;=================================================================
++
++(define_insn "*round"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (ashiftrt:SI (plus:SI (match_operand:SI 1 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i"))
++ (match_operand:SI 3 "immediate_operand" "i")))]
++ "avr32_rnd_operands(operands[2], operands[3])"
++
++ "satrnds %0 >> %3, 31"
++
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")]
++
++ )
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (plus:SI (match_dup 0)
++ (match_operand:SI 1 "immediate_operand" "")))
++ (set (match_dup 0)
++ (ashiftrt:SI (match_dup 0)
++ (match_operand:SI 2 "immediate_operand" "")))]
++ "avr32_rnd_operands(operands[1], operands[2])"
++
++ [(set (match_dup 0)
++ (ashiftrt:SI (plus:SI (match_dup 0)
++ (match_dup 1))
++ (match_dup 2)))]
++ )
++
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "r")
++ (plus:SI (match_dup 0)
++ (match_operand:SI 1 "immediate_operand" "i")))
++ (set (match_dup 0)
++ (ashiftrt:SI (match_dup 0)
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "avr32_rnd_operands(operands[1], operands[2])"
++
++ "satrnds %0 >> %2, 31"
++
++ [(set_attr "type" "alu_sat")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")]
++
++ )
++
++
++
++
++;;=================================================================
++;; Conditional Subtract
++;;=================================================================
++
++
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "")
++ (minus:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (match_dup 1)
++ (unspec:SI [(match_operand 5 "avr32_comparison_operator" "")
++ (match_dup 0)
++ (match_dup 1)
++ (match_operand 3 "general_operand" "")
++ (match_operand 4 "general_operand" "")]
++ UNSPEC_MOVSICC))]
++
++ "(dead_or_set_p(insn, operands[0])) && avr32_const_ok_for_constraint_p(INTVAL(operands[2]), 'K', \"Ks08\")"
++
++ {
++
++ operands[5] = avr32_output_cmp(operands[5], GET_MODE(operands[3]), operands[3], operands[4]);
++
++ return "sub%5 %1, %2";
++ }
++
++ [(set_attr "length" "10")
++ (set_attr "cc" "clobber")]
++ )
++
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "")
++ (plus:SI (match_operand:SI 1 "register_operand" "")
++ (match_operand:SI 2 "immediate_operand" "")))
++ (set (match_dup 1)
++ (unspec:SI [(match_operand 5 "avr32_comparison_operator" "")
++ (match_dup 0)
++ (match_dup 1)
++ (match_operand 3 "general_operand" "")
++ (match_operand 4 "general_operand" "")]
++ UNSPEC_MOVSICC))]
++
++ "(dead_or_set_p(insn, operands[0]) && avr32_const_ok_for_constraint_p(INTVAL(operands[2]), 'I', \"Is08\"))"
++
++ {
++ operands[5] = avr32_output_cmp(operands[5], GET_MODE(operands[3]), operands[3], operands[4]);
++
++ return "sub%5 %1, %n2";
++ }
++ [(set_attr "length" "10")
++ (set_attr "cc" "clobber")]
++ )
++
++;;=================================================================
++;; mcall
++;;=================================================================
++(define_peephole
++ [(set (match_operand:SI 0 "register_operand" "")
++ (match_operand 1 "avr32_const_pool_ref_operand" ""))
++ (parallel [(call (mem:SI (match_dup 0))
++ (match_operand 2 "" ""))
++ (clobber (reg:SI LR_REGNUM))])]
++ "dead_or_set_p(insn, operands[0])"
++ "mcall %1"
++ [(set_attr "type" "call")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")]
++)
++
++(define_peephole
++ [(set (match_operand:SI 2 "register_operand" "")
++ (match_operand 1 "avr32_const_pool_ref_operand" ""))
++ (parallel [(set (match_operand 0 "register_operand" "")
++ (call (mem:SI (match_dup 2))
++ (match_operand 3 "" "")))
++ (clobber (reg:SI LR_REGNUM))])]
++ "dead_or_set_p(insn, operands[2])"
++ "mcall %1"
++ [(set_attr "type" "call")
++ (set_attr "length" "4")
++ (set_attr "cc" "call_set")]
++)
++
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (match_operand 1 "avr32_const_pool_ref_operand" ""))
++ (parallel [(call (mem:SI (match_dup 0))
++ (match_operand 2 "" ""))
++ (clobber (reg:SI LR_REGNUM))])]
++ "peep2_reg_dead_p(2, operands[0])"
++ [(parallel [(call (mem:SI (match_dup 1))
++ (match_dup 2))
++ (clobber (reg:SI LR_REGNUM))])]
++ ""
++)
++
++(define_peephole2
++ [(set (match_operand:SI 0 "register_operand" "")
++ (match_operand 1 "avr32_const_pool_ref_operand" ""))
++ (parallel [(set (match_operand 2 "register_operand" "")
++ (call (mem:SI (match_dup 0))
++ (match_operand 3 "" "")))
++ (clobber (reg:SI LR_REGNUM))])]
++ "(peep2_reg_dead_p(2, operands[0]) || (REGNO(operands[2]) == REGNO(operands[0])))"
++ [(parallel [(set (match_dup 2)
++ (call (mem:SI (match_dup 1))
++ (match_dup 3)))
++ (clobber (reg:SI LR_REGNUM))])]
++ ""
++)
++
++;;=================================================================
++;; Returning a value
++;;=================================================================
++
++
++(define_peephole
++ [(set (match_operand 0 "register_operand" "")
++ (match_operand 1 "register_operand" ""))
++ (return)]
++ "USE_RETURN_INSN (TRUE) && (REGNO(operands[0]) == RETVAL_REGNUM)
++ && (REGNO(operands[1]) != LR_REGNUM)
++ && (REGNO_REG_CLASS(REGNO(operands[1])) == GENERAL_REGS)"
++ "retal %1"
++ [(set_attr "type" "call")
++ (set_attr "length" "2")]
++ )
++
++
++(define_peephole
++ [(set (match_operand 0 "register_operand" "r")
++ (match_operand 1 "immediate_operand" "i"))
++ (return)]
++ "(USE_RETURN_INSN (FALSE) && (REGNO(operands[0]) == RETVAL_REGNUM) &&
++ ((INTVAL(operands[1]) == -1) || (INTVAL(operands[1]) == 0) || (INTVAL(operands[1]) == 1)))"
++ {
++ avr32_output_return_instruction (TRUE, FALSE, NULL, operands[1]);
++ return "";
++ }
++ [(set_attr "type" "call")
++ (set_attr "length" "4")]
++ )
++
++(define_peephole
++ [(set (match_operand 0 "register_operand" "r")
++ (match_operand 1 "immediate_operand" "i"))
++ (unspec_volatile [(return)] VUNSPEC_EPILOGUE)]
++ "(REGNO(operands[0]) == RETVAL_REGNUM) &&
++ ((INTVAL(operands[1]) == -1) || (INTVAL(operands[1]) == 0) || (INTVAL(operands[1]) == 1))"
++ {
++ avr32_output_return_instruction (FALSE, FALSE, NULL, operands[1]);
++ return "";
++ }
++ ; Length is absolute worst case
++ [(set_attr "type" "branch")
++ (set_attr "length" "12")]
++ )
++
++(define_peephole
++ [(set (match_operand 0 "register_operand" "r")
++ (unspec [(match_operand 1 "avr32_comparison_operator" "")
++ (match_operand 2 "register_immediate_operand" "rKs08")
++ (match_operand 3 "register_immediate_operand" "rKs08")
++ (match_operand 4 "register_immediate_operand" "r")
++ (match_operand 5 "register_immediate_operand" "rKs21")
++ ]
++ UNSPEC_MOVSICC ))
++ (return)]
++ "USE_RETURN_INSN (TRUE) && (REGNO(operands[0]) == RETVAL_REGNUM) &&
++ ((GET_MODE(operands[4]) == SImode) ||
++ ((GET_MODE(operands[4]) != SImode) && (GET_CODE(operands[5]) == REG)))"
++ {
++ operands[1] = avr32_output_cmp(operands[1], GET_MODE(operands[4]), operands[4], operands[5]);
++
++ if ( GET_CODE(operands[2]) == REG
++ && GET_CODE(operands[3]) == REG
++ && REGNO(operands[2]) != LR_REGNUM
++ && REGNO(operands[3]) != LR_REGNUM ){
++ return "ret%1 %2\;ret%i1 %3";
++ } else if ( GET_CODE(operands[2]) == REG
++ && GET_CODE(operands[3]) == CONST_INT ){
++ if ( INTVAL(operands[3]) == -1
++ || INTVAL(operands[3]) == 0
++ || INTVAL(operands[3]) == 1 ){
++ return "ret%1 %2\;ret%i1 %d3";
++ } else {
++ return "mov%1 r12, %2\;mov%i1 r12, %3\;retal r12";
++ }
++ } else if ( GET_CODE(operands[2]) == CONST_INT
++ && GET_CODE(operands[3]) == REG ){
++ if ( INTVAL(operands[2]) == -1
++ || INTVAL(operands[2]) == 0
++ || INTVAL(operands[2]) == 1 ){
++ return "ret%1 %d2\;ret%i1 %3";
++ } else {
++ return "mov%1 r12, %2\;mov%i1 r12, %3\;retal r12";
++ }
++ } else {
++ if ( (INTVAL(operands[2]) == -1
++ || INTVAL(operands[2]) == 0
++ || INTVAL(operands[2]) == 1 )
++ && (INTVAL(operands[3]) == -1
++ || INTVAL(operands[3]) == 0
++ || INTVAL(operands[3]) == 1 )){
++ return "ret%1 %d2\;ret%i1 %d3";
++ } else {
++ return "mov%1 r12, %2\;mov%i1 r12, %3\;retal r12";
++ }
++ }
++ }
++
++ [(set_attr "length" "14")
++ (set_attr "cc" "clobber")
++ (set_attr "type" "call")])
++
++
++;;=================================================================
++;; mulnhh.w
++;;=================================================================
++
++(define_peephole2
++ [(set (match_operand:HI 0 "register_operand" "")
++ (neg:HI (match_operand:HI 1 "register_operand" "")))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mult:SI
++ (sign_extend:SI (match_dup 0))
++ (sign_extend:SI (match_operand:HI 3 "register_operand" ""))))]
++ "(peep2_reg_dead_p(2, operands[0])) || (REGNO(operands[2]) == REGNO(operands[0]))"
++ [ (set (match_dup 2)
++ (mult:SI
++ (sign_extend:SI (neg:HI (match_dup 1)))
++ (sign_extend:SI (match_dup 3))))]
++ ""
++ )
++
++(define_peephole2
++ [(set (match_operand:HI 0 "register_operand" "")
++ (neg:HI (match_operand:HI 1 "register_operand" "")))
++ (set (match_operand:SI 2 "register_operand" "")
++ (mult:SI
++ (sign_extend:SI (match_operand:HI 3 "register_operand" ""))
++ (sign_extend:SI (match_dup 0))))]
++ "(peep2_reg_dead_p(2, operands[0])) || (REGNO(operands[2]) == REGNO(operands[0]))"
++ [ (set (match_dup 2)
++ (mult:SI
++ (sign_extend:SI (neg:HI (match_dup 1)))
++ (sign_extend:SI (match_dup 3))))]
++ ""
++ )
++
++
++
++;;=================================================================
++;; sthh.w
++;;=================================================================
++(define_insn "vec_setv2hi"
++ [(set (match_operand:V2HI 0 "register_operand" "=r")
++ (vec_merge:V2HI
++ (match_dup 0)
++ (vec_duplicate:V2HI
++ (match_operand:HI 1 "register_operand" "r"))
++ (const_int 1)))]
++ ""
++ "bfins\t%0, %1, 16, 16"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")])
++
++(define_insn "vec_setv2lo"
++ [(set (match_operand:V2HI 0 "register_operand" "+r")
++ (vec_merge:V2HI
++ (match_dup 0)
++ (vec_duplicate:V2HI
++ (match_operand:HI 1 "register_operand" "r"))
++ (const_int 2)))]
++ ""
++ "bfins\t%0, %1, 0, 16"
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")])
++
++(define_expand "vec_setv2"
++ [(set (match_operand:V2HI 0 "register_operand" "")
++ (vec_merge:V2HI
++ (match_dup 0)
++ (vec_duplicate:V2HI
++ (match_operand:HI 1 "register_operand" ""))
++ (match_operand 2 "immediate_operand" "")))]
++ ""
++ { operands[2] = GEN_INT(INTVAL(operands[2]) + 1); }
++ )
++
++(define_insn "vec_extractv2hi"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (vec_select:HI
++ (match_operand:V2HI 1 "register_operand" "r")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
++ ""
++ {
++ if ( INTVAL(operands[2]) == 0 )
++ return "bfextu\t%0, %1, 16, 16";
++ else
++ return "bfextu\t%0, %1, 0, 16";
++ }
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")])
++
++(define_insn "vec_extractv4qi"
++ [(set (match_operand:QI 0 "register_operand" "=r")
++ (vec_select:QI
++ (match_operand:V4QI 1 "register_operand" "r")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
++ ""
++ {
++ switch ( INTVAL(operands[2]) ){
++ case 0:
++ return "bfextu\t%0, %1, 24, 8";
++ case 1:
++ return "bfextu\t%0, %1, 16, 8";
++ case 2:
++ return "bfextu\t%0, %1, 8, 8";
++ case 3:
++ return "bfextu\t%0, %1, 0, 8";
++ default:
++ abort();
++ }
++ }
++ [(set_attr "type" "alu")
++ (set_attr "length" "4")
++ (set_attr "cc" "clobber")])
++
++
++(define_insn "concatv2hi"
++ [(set (match_operand:V2HI 0 "register_operand" "=r, r, r")
++ (vec_concat:V2HI
++ (match_operand:HI 1 "register_operand" "r, r, 0")
++ (match_operand:HI 2 "register_operand" "r, 0, r")))]
++ ""
++ "@
++ mov\t%0, %1\;bfins\t%0, %2, 0, 16
++ bfins\t%0, %2, 0, 16
++ bfins\t%0, %1, 16, 16"
++ [(set_attr "length" "6, 4, 4")
++ (set_attr "type" "alu")])
++
++;(define_peephole2
++; [(set (match_operand:HI 0 "register_operand" "r")
++; (plus:HI (match_operand:HI 3 "register_operand" "r")
++; (match_operand:HI 4 "register_operand" "r")))
++; (set (match_operand:HI 1 "register_operand" "r")
++; (minus:HI (match_dup 3)
++; (match_dup 4)))]
++; "REGNO(operands[0]) != REGNO(operands[3])"
++; [(set (match_dup 2)
++; (vec_concat:V2HI
++; (minus:HI (match_dup 3)
++; (match_dup 4))
++; (plus:HI (match_dup 3) (match_dup 4))))
++; (set (match_dup 1) (vec_select:HI (match_dup 2)
++; (parallel [(const_int 0)])))]
++;
++; "operands[2] = gen_rtx_REG(V2HImode, REGNO(operands[0]));"
++; )
++;
++;(define_peephole2
++; [(set (match_operand:HI 0 "register_operand" "r")
++; (minus:HI (match_operand:HI 3 "register_operand" "r")
++; (match_operand:HI 4 "register_operand" "r")))
++; (set (match_operand:HI 1 "register_operand" "r")
++; (plus:HI (match_dup 3)
++; (match_dup 4)))]
++; "REGNO(operands[0]) != REGNO(operands[3])"
++; [(set (match_dup 2)
++; (vec_concat:V2HI
++; (plus:HI (match_dup 3)
++; (match_dup 4))
++; (minus:HI (match_dup 3) (match_dup 4))))
++; (set (match_dup 1) (vec_select:HI (match_dup 2)
++; (parallel [(const_int 0)])))]
++;
++; "operands[2] = gen_rtx_REG(V2HImode, REGNO(operands[0]));"
++; )
++
++
++;(define_peephole2
++; [(match_scratch:V2HI 5 "r")
++; (set (mem:HI (plus:SI (match_operand:SI 0 "register_operand" "")
++; (match_operand:HI 1 "immediate_operand" "")))
++; (match_operand:HI 2 "register_operand" "r"))
++; (set (mem:HI (plus:SI (match_dup 0)
++; (match_operand:HI 3 "immediate_operand" "")))
++; (match_operand:HI 4 "register_operand" "r"))]
++; "(GET_CODE(operands[1]) == CONST_INT) && (GET_CODE(operands[3]) == CONST_INT)
++; && (INTVAL(operands[3]) == (INTVAL(operands[1]) + 2))"
++;
++; [(set (match_dup 5)
++; (vec_concat:V2HI
++; (match_dup 2)
++; (match_dup 4)))
++; (set (mem:V2HI (plus:SI (match_dup 0) (match_dup 1)))
++; (match_dup 5))]
++; ""
++; )
++;
++
++;(define_insn "sthh_w"
++; [(set (match_operand:V2HI 0 "avr32_sthh_w_memory_operand" "m")
++; (vec_concat:V2HI
++; (vec_select:HI (match_operand:V2HI 1 "register_operand" "r")
++; (parallel [(match_operand 3 "immediate_operand" "i")]))
++; (vec_select:HI (match_operand:V2HI 2 "register_operand" "r")
++; (parallel [(match_operand 4 "immediate_operand" "i")]))))]
++; "MEM_ALIGN(operands[0]) >= 32"
++; "sthh.w\t%0, %1:%h3, %2:%h4"
++; [(set_attr "length" "4")
++; (set_attr "type" "store")])
++;
++;(define_peephole2
++; [(set (mem:HI (plus:SI (match_operand:SI 0 "register_operand" "")
++; (match_operand:HI 1 "immediate_operand" "")))
++; (match_operand:HI 2 "register_operand" "r"))
++; (set (mem:HI (plus:SI (match_dup 0)
++; (match_operand:HI 3 "avr32_sthh_operand" "")))
++; (match_operand:HI 4 "register_operand" "r"))]
++; "(GET_CODE(operands[1]) == CONST_INT) && (GET_CODE(operands[3]) == CONST_INT)
++; && (INTVAL(operands[3]) == (INTVAL(operands[1]) - 2))"
++;
++; [(paralell [(set (mem:HI (plus:SI (match_dup 0)
++; (match_dup 3)))
++; (match_dup 4))
++; (set (mem:HI (plus:SI (match_dup 0)
++; (plus:SI (match_dup 3) (const_int 2))))
++; (match_dup 2))])]
++; ""
++; )
++
++
++;; Load the SIMD description
++(include "simd.md")
++
++;; Load the FP coprocessor patterns
++(include "fpcp.md")
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32-modes.def gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-modes.def
+--- gcc-4.0.2/gcc/config/avr32/avr32-modes.def 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-modes.def 2005-08-19 14:17:15.000000000 +0200
+@@ -0,0 +1 @@
++VECTOR_MODES (INT, 4); /* V4QI V2HI */
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/avr32-protos.h gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-protos.h
+--- gcc-4.0.2/gcc/config/avr32/avr32-protos.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/avr32-protos.h 2006-10-10 13:03:42.000000000 +0200
+@@ -0,0 +1,175 @@
++/*
++ Prototypes for exported functions defined in avr32.c
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++ Initial porting by Anders Ådland.
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++
++#ifndef AVR32_PROTOS_H
++#define AVR32_PROTOS_H
++
++extern const int swap_reg[];
++
++extern int avr32_valid_macmac_bypass (rtx, rtx);
++extern int avr32_valid_mulmac_bypass (rtx, rtx);
++
++extern int avr32_decode_lcomm_symbol_offset (rtx, int *);
++extern void avr32_encode_lcomm_symbol_offset (tree, char *, int);
++
++extern const char *avr32_strip_name_encoding (const char *);
++
++extern rtx avr32_get_note_reg_equiv (rtx insn);
++
++extern int avr32_use_return_insn (int iscond);
++
++extern void avr32_make_reglist16 (int reglist16_vect, char *reglist16_string);
++
++extern void avr32_make_reglist8 (int reglist8_vect, char *reglist8_string);
++extern void avr32_make_fp_reglist_w (int reglist_mask, char *reglist_string);
++extern void avr32_make_fp_reglist_d (int reglist_mask, char *reglist_string);
++
++extern void avr32_output_return_instruction (int single_ret_inst,
++ int iscond, rtx cond,
++ rtx r12_imm);
++extern void avr32_expand_prologue (void);
++extern void avr32_set_return_address (rtx source);
++
++extern int avr32_hard_regno_mode_ok (int regno, enum machine_mode mode);
++extern int avr32_extra_constraint_s (rtx value, const int strict);
++extern int avr32_eh_return_data_regno (const int n);
++extern int avr32_initial_elimination_offset (const int from, const int to);
++extern rtx avr32_function_arg (CUMULATIVE_ARGS * cum, enum machine_mode mode,
++ tree type, int named);
++extern void avr32_init_cumulative_args (CUMULATIVE_ARGS * cum, tree fntype,
++ rtx libname, tree fndecl);
++extern void avr32_function_arg_advance (CUMULATIVE_ARGS * cum,
++ enum machine_mode mode,
++ tree type, int named);
++#ifdef ARGS_SIZE_RTX
++/* expr.h defines ARGS_SIZE_RTX and `enum direction'. */
++extern enum direction avr32_function_arg_padding (enum machine_mode mode,
++ tree type);
++#endif /* ARGS_SIZE_RTX */
++extern rtx avr32_function_value (tree valtype, tree func);
++extern rtx avr32_libcall_value (enum machine_mode mode);
++extern int avr32_sched_use_dfa_pipeline_interface (void);
++extern bool avr32_return_in_memory (tree type, tree fntype);
++extern void avr32_regs_to_save (char *operand);
++extern void avr32_target_asm_function_prologue (FILE * file,
++ HOST_WIDE_INT size);
++extern void avr32_target_asm_function_epilogue (FILE * file,
++ HOST_WIDE_INT size);
++extern void avr32_trampoline_template (FILE * file);
++extern void avr32_initialize_trampoline (rtx addr, rtx fnaddr,
++ rtx static_chain);
++extern int avr32_legitimate_address (enum machine_mode mode, rtx x,
++ int strict);
++extern int avr32_legitimate_constant_p (rtx x);
++
++extern int avr32_legitimate_pic_operand_p (rtx x);
++
++extern rtx avr32_find_symbol (rtx x);
++extern void avr32_select_section (rtx exp, int reloc, int align);
++extern void avr32_encode_section_info (tree decl, rtx rtl, int first);
++extern void avr32_asm_file_end (FILE * stream);
++extern void avr32_asm_output_ascii (FILE * stream, char *ptr, int len);
++extern void avr32_asm_output_common (FILE * stream, const char *name,
++ int size, int rounded);
++extern void avr32_asm_output_label (FILE * stream, const char *name);
++extern void avr32_asm_declare_object_name (FILE * stream, char *name,
++ tree decl);
++extern void avr32_asm_globalize_label (FILE * stream, const char *name);
++extern void avr32_asm_weaken_label (FILE * stream, const char *name);
++extern void avr32_asm_output_external (FILE * stream, tree decl,
++ const char *name);
++extern void avr32_asm_output_external_libcall (FILE * stream, rtx symref);
++extern void avr32_asm_output_labelref (FILE * stream, const char *name);
++extern void avr32_notice_update_cc (rtx exp, rtx insn);
++extern void avr32_print_operand (FILE * stream, rtx x, int code);
++extern void avr32_print_operand_address (FILE * stream, rtx x);
++
++extern int avr32_symbol (rtx x);
++
++extern void avr32_select_rtx_section (enum machine_mode mode, rtx x,
++ unsigned HOST_WIDE_INT align);
++
++extern int avr32_load_multiple_operation (rtx op, enum machine_mode mode);
++extern int avr32_store_multiple_operation (rtx op, enum machine_mode mode);
++
++extern int avr32_const_ok_for_constraint_p (HOST_WIDE_INT value, char c,
++ const char *str);
++
++extern bool avr32_cannot_force_const_mem (rtx x);
++
++extern void avr32_init_builtins (void);
++
++extern rtx avr32_expand_builtin (tree exp, rtx target, rtx subtarget,
++ enum machine_mode mode, int ignore);
++
++extern bool avr32_must_pass_in_stack (enum machine_mode mode, tree type);
++
++extern bool avr32_strict_argument_naming (CUMULATIVE_ARGS * ca);
++
++extern bool avr32_pass_by_reference (CUMULATIVE_ARGS * cum,
++ enum machine_mode mode,
++ tree type, bool named);
++
++extern rtx avr32_gen_load_multiple (rtx * regs, int count, rtx from,
++ int write_back, int in_struct_p,
++ int scalar_p);
++extern rtx avr32_gen_store_multiple (rtx * regs, int count, rtx to,
++ int in_struct_p, int scalar_p);
++extern int avr32_gen_movmemsi (rtx * operands);
++
++extern int avr32_rnd_operands (rtx add, rtx shift);
++extern int avr32_adjust_insn_length (rtx insn, int length);
++
++extern int symbol_mentioned_p (rtx x);
++extern int label_mentioned_p (rtx x);
++extern rtx legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg);
++extern int avr32_address_register_rtx_p (rtx x, int strict_p);
++extern int avr32_legitimate_index_p (enum machine_mode mode, rtx index,
++ int strict_p);
++
++extern int avr32_const_double_immediate (rtx value);
++extern void avr32_init_expanders (void);
++extern rtx avr32_return_addr (int count, rtx frame);
++extern bool avr32_got_mentioned_p (rtx addr);
++
++extern void avr32_final_prescan_insn (rtx insn, rtx * opvec, int noperands);
++
++extern int avr32_expand_movcc (enum machine_mode mode, rtx operands[]);
++extern int avr32_expand_addcc (enum machine_mode mode, rtx operands[]);
++#ifdef RTX_CODE
++extern int avr32_expand_scc (RTX_CODE cond, rtx * operands);
++#endif
++
++extern int avr32_store_bypass (rtx insn_out, rtx insn_in);
++extern int avr32_mul_waw_bypass (rtx insn_out, rtx insn_in);
++extern int avr32_valid_load_double_bypass (rtx insn_out, rtx insn_in);
++extern int avr32_valid_load_quad_bypass (rtx insn_out, rtx insn_in);
++extern rtx avr32_output_cmp (rtx cond, enum machine_mode mode,
++ rtx op0, rtx op1);
++
++rtx get_next_insn_cond (rtx cur_insn);
++int set_next_insn_cond (rtx cur_insn, rtx cond);
++void avr32_override_options (void);
++
++#endif /* AVR32_PROTOS_H */
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/crti.asm gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/crti.asm
+--- gcc-4.0.2/gcc/config/avr32/crti.asm 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/crti.asm 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,64 @@
++/*
++ Init/fini stuff for AVR32.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++
++/* The code in sections .init and .fini is supposed to be a single
++ regular function. The function in .init is called directly from
++ start in crt1.asm. The function in .fini is atexit()ed in crt1.asm
++ too.
++
++ crti.asm contributes the prologue of a function to these sections,
++ and crtn.asm comes up the epilogue. STARTFILE_SPEC should list
++ crti.o before any other object files that might add code to .init
++ or .fini sections, and ENDFILE_SPEC should list crtn.o after any
++ such object files. */
++
++ .file "crti.asm"
++
++ .section ".init"
++/* Just load the GOT */
++ .align 2
++ .global _init
++_init:
++ stm --sp, r6, lr
++ lddpc r6, 1f
++0:
++ rsub r6, pc
++ rjmp 2f
++ .align 2
++1: .long 0b - _GLOBAL_OFFSET_TABLE_
++2:
++
++ .section ".fini"
++/* Just load the GOT */
++ .align 2
++ .global _fini
++_fini:
++ stm --sp, r6, lr
++ lddpc r6, 1f
++0:
++ rsub r6, pc
++ rjmp 2f
++ .align 2
++1: .long 0b - _GLOBAL_OFFSET_TABLE_
++2:
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/crtn.asm gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/crtn.asm
+--- gcc-4.0.2/gcc/config/avr32/crtn.asm 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/crtn.asm 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,44 @@
++/* Copyright (C) 2001 Free Software Foundation, Inc.
++ Written By Nick Clifton
++
++ This file is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by the
++ Free Software Foundation; either version 2, or (at your option) any
++ later version.
++
++ In addition to the permissions in the GNU General Public License, the
++ Free Software Foundation gives you unlimited permission to link the
++ compiled version of this file with other programs, and to distribute
++ those programs without any restriction coming from the use of this
++ file. (The General Public License restrictions do apply in other
++ respects; for example, they cover modification of the file, and
++ distribution when not linked into another program.)
++
++ This file is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; see the file COPYING. If not, write to
++ the Free Software Foundation, 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA.
++
++ As a special exception, if you link this library with files
++ compiled with GCC to produce an executable, this does not cause
++ the resulting executable to be covered by the GNU General Public License.
++ This exception does not however invalidate any other reasons why
++ the executable file might be covered by the GNU General Public License.
++*/
++
++
++
++
++ .file "crtn.asm"
++
++ .section ".init"
++ ldm sp++, r6, pc
++
++ .section ".fini"
++ ldm sp++, r6, pc
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/fpcp.md gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/fpcp.md
+--- gcc-4.0.2/gcc/config/avr32/fpcp.md 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/fpcp.md 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,551 @@
++;; AVR32 machine description file for Floating-Point instructions.
++;; Copyright 2003-2006 Atmel Corporation.
++;;
++;; Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++;;
++;; This file is part of GCC.
++;;
++;; This program is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2 of the License, or
++;; (at your option) any later version.
++;;
++;; This program is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with this program; if not, write to the Free Software
++;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++;; -*- Mode: Scheme -*-
++
++;;******************************************************************************
++;; Automaton pipeline description for floating-point coprocessor insns
++;;******************************************************************************
++(define_cpu_unit "fid,fm1,fm2,fm3,fm4,fwb,fcmp,fcast" "avr32_ap")
++
++(define_insn_reservation "fmv_op" 1
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fmv"))
++ "is,da,d,fid,fwb")
++
++(define_insn_reservation "fmul_op" 5
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fmul"))
++ "is,da,d,fid,fm1,fm2,fm3,fm4,fwb")
++
++(define_insn_reservation "fcmps_op" 1
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fcmps"))
++ "is,da,d,fid,fcmp")
++
++(define_insn_reservation "fcmpd_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fcmpd"))
++ "is,da,d,fid*2,fcmp")
++
++(define_insn_reservation "fcast_op" 3
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fcast"))
++ "is,da,d,fid,fcmp,fcast,fwb")
++
++(define_insn_reservation "fmvcpu_op" 2
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fmvcpu"))
++ "is,da,d")
++
++(define_insn_reservation "fldd_op" 1
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fldd"))
++ "is,da,d,fwb")
++
++(define_insn_reservation "flds_op" 1
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "flds"))
++ "is,da,d,fwb")
++
++(define_insn_reservation "fsts_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fsts"))
++ "is,da*2,d")
++
++(define_insn_reservation "fstd_op" 0
++ (and (eq_attr "pipeline" "ap")
++ (eq_attr "type" "fstd"))
++ "is,da*2,d")
++
++
++(define_insn "*movsf_fpcp"
++ [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,r,f,m,r,r,r,m")
++ (match_operand:SF 1 "general_operand" " f,r,f,m,f,r,G,m,r"))]
++ "TARGET_HARD_FLOAT"
++ "@
++ fmov.s\t%0, %1
++ fmov.s\t%0, %1
++ fmov.s\t%0, %1
++ fld.s\t%0, %1
++ fst.s\t%0, %1
++ mov\t%0, %1
++ mov\t%0, %1
++ ld.w\t%0, %1
++ st.w\t%0, %1"
++ [(set_attr "length" "4,4,4,4,4,2,4,4,4")
++ (set_attr "type" "fmv,flds,fmvcpu,flds,fsts,alu,alu,load,store")])
++
++(define_insn_and_split "*movdf_fpcp"
++ [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,r,f,m,r,r,m")
++ (match_operand:DF 1 "general_operand" " f,r,f,m,f,r,m,r"))]
++ "TARGET_HARD_FLOAT"
++ "@
++ fmov.d\t%0, %1
++ fmov.d\t%0, %1
++ fmov.d\t%0, %1
++ fld.d\t%0, %1
++ fst.d\t%0, %1
++ mov\t%0, %1\;mov\t%m0, %m1
++ ld.d\t%0, %1
++ st.d\t%0, %1"
++
++ "TARGET_HARD_FLOAT
++ && reload_completed
++ && (REG_P(operands[0]) && (REGNO_REG_CLASS(REGNO(operands[0])) == GENERAL_REGS))
++ && (REG_P(operands[1]) && (REGNO_REG_CLASS(REGNO(operands[1])) == GENERAL_REGS))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))]
++ "
++ {
++ operands[2] = gen_highpart (SImode, operands[0]);
++ operands[0] = gen_lowpart (SImode, operands[0]);
++ operands[3] = gen_highpart(SImode, operands[1]);
++ operands[1] = gen_lowpart(SImode, operands[1]);
++ }
++ "
++
++ [(set_attr "length" "4,4,4,4,4,4,4,4")
++ (set_attr "type" "fmv,fldd,fmvcpu,fldd,fstd,alu2,load2,store2")])
++
++
++(define_insn "mulsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fmul.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "nmulsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (neg:SF (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f"))))]
++ "TARGET_HARD_FLOAT"
++ "fnmul.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "")
++ (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "")
++ (match_operand:SF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:SF 3 "avr32_fp_register_operand" "")
++ (neg:SF (match_dup 0)))]
++ "TARGET_HARD_FLOAT &&
++ (peep2_reg_dead_p(2, operands[0]) || (REGNO(operands[3]) == REGNO(operands[0])))"
++ [(set (match_dup 3)
++ (neg:SF (mult:SF (match_dup 1)
++ (match_dup 2))))]
++)
++
++
++(define_insn "macsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (plus:SF (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f"))
++ (match_operand:SF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fmac.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "nmacsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (plus:SF (neg:SF (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f")))
++ (match_operand:SF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fnmac.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "")
++ (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "")
++ (match_operand:SF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:SF 3 "avr32_fp_register_operand" "")
++ (minus:SF
++ (match_dup 3)
++ (match_dup 0)))]
++ "TARGET_HARD_FLOAT && peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (plus:SF (neg:SF (mult:SF (match_dup 1)
++ (match_dup 2)))
++ (match_dup 3)))]
++)
++
++
++(define_insn "msubacsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (minus:SF (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f"))
++ (match_operand:SF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fmsc.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "")
++ (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "")
++ (match_operand:SF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:SF 3 "avr32_fp_register_operand" "")
++ (minus:SF
++ (match_dup 0)
++ (match_dup 3)))]
++ "TARGET_HARD_FLOAT && peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (minus:SF (mult:SF (match_dup 1)
++ (match_dup 2))
++ (match_dup 3)))]
++)
++
++(define_insn "nmsubacsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (minus:SF (neg:SF (mult:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f")))
++ (match_operand:SF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fnmsc.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++
++
++(define_insn "addsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (plus:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fadd.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "subsf3"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (minus:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")
++ (match_operand:SF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fsub.s\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++
++(define_insn "negsf2"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (neg:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fneg.s\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmv")])
++
++(define_insn "abssf2"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (abs:SF (match_operand:SF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fabs.s\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmv")])
++
++(define_insn "truncdfsf2"
++ [(set (match_operand:SF 0 "avr32_fp_register_operand" "=f")
++ (float_truncate:SF
++ (match_operand:DF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fcastd.s\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fcast")])
++
++(define_insn "extendsfdf2"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (float_extend:DF
++ (match_operand:SF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fcasts.d\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fcast")])
++
++(define_insn "muldf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fmul.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "nmuldf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (neg:DF (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f"))))]
++ "TARGET_HARD_FLOAT"
++ "fnmul.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "")
++ (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "")
++ (match_operand:DF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:DF 3 "avr32_fp_register_operand" "")
++ (neg:DF (match_dup 0)))]
++ "TARGET_HARD_FLOAT &&
++ (peep2_reg_dead_p(2, operands[0]) || (REGNO(operands[3]) == REGNO(operands[0])))"
++ [(set (match_dup 3)
++ (neg:DF (mult:DF (match_dup 1)
++ (match_dup 2))))]
++)
++
++(define_insn "macdf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (plus:DF (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f"))
++ (match_operand:DF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fmac.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "msubacdf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (minus:DF (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f"))
++ (match_operand:DF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fmsc.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "")
++ (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "")
++ (match_operand:DF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:DF 3 "avr32_fp_register_operand" "")
++ (minus:DF
++ (match_dup 0)
++ (match_dup 3)))]
++ "TARGET_HARD_FLOAT && peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (minus:DF (mult:DF (match_dup 1)
++ (match_dup 2))
++ (match_dup 3)))]
++ )
++
++(define_insn "nmsubacdf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (minus:DF (neg:DF (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f")))
++ (match_operand:DF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fnmsc.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "nmacdf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (plus:DF (neg:DF (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f")))
++ (match_operand:DF 3 "avr32_fp_register_operand" "0")))]
++ "TARGET_HARD_FLOAT"
++ "fnmac.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_peephole2
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "")
++ (mult:DF (match_operand:DF 1 "avr32_fp_register_operand" "")
++ (match_operand:DF 2 "avr32_fp_register_operand" "")))
++ (set (match_operand:DF 3 "avr32_fp_register_operand" "")
++ (minus:DF
++ (match_dup 3)
++ (match_dup 0)))]
++ "TARGET_HARD_FLOAT && peep2_reg_dead_p(2, operands[0])"
++ [(set (match_dup 3)
++ (plus:DF (neg:DF (mult:DF (match_dup 1)
++ (match_dup 2)))
++ (match_dup 3)))]
++)
++
++(define_insn "adddf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (plus:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fadd.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "subdf3"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (minus:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")
++ (match_operand:DF 2 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fsub.d\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmul")])
++
++(define_insn "negdf2"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (neg:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fneg.d\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmv")])
++
++(define_insn "absdf2"
++ [(set (match_operand:DF 0 "avr32_fp_register_operand" "=f")
++ (abs:DF (match_operand:DF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ "fabs.d\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmv")])
++
++
++(define_expand "cmpdf"
++ [(set (cc0)
++ (compare:DF
++ (match_operand:DF 0 "general_operand" "")
++ (match_operand:DF 1 "general_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "{
++ rtx tmpreg;
++ if ( !REG_P(operands[0]) )
++ operands[0] = force_reg(DFmode, operands[0]);
++
++ if ( !REG_P(operands[1]) )
++ operands[1] = force_reg(DFmode, operands[1]);
++
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++
++ emit_insn(gen_cmpdf_internal(operands[0], operands[1]));
++
++ tmpreg = gen_reg_rtx(SImode);
++ emit_insn(gen_fpcc_to_reg(tmpreg));
++ emit_insn(gen_reg_to_cc(tmpreg));
++
++ DONE;
++ }"
++)
++
++(define_insn "cmpdf_internal"
++ [(set (reg:CC FPCC_REGNUM)
++ (compare:CC
++ (match_operand:DF 0 "avr32_fp_register_operand" "f")
++ (match_operand:DF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ {
++ if (!rtx_equal_p(cc_prev_status.mdep.fpvalue, SET_SRC(PATTERN (insn))) )
++ return "fcmp.d\t%0, %1";
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "type" "fcmpd")
++ (set_attr "cc" "fpcompare")])
++
++(define_expand "cmpsf"
++ [(set (cc0)
++ (compare:SF
++ (match_operand:SF 0 "general_operand" "")
++ (match_operand:SF 1 "general_operand" "")))]
++ "TARGET_HARD_FLOAT"
++ "{
++ rtx tmpreg;
++ if ( !REG_P(operands[0]) )
++ operands[0] = force_reg(SFmode, operands[0]);
++
++ if ( !REG_P(operands[1]) )
++ operands[1] = force_reg(SFmode, operands[1]);
++
++ avr32_compare_op0 = operands[0];
++ avr32_compare_op1 = operands[1];
++
++ emit_insn(gen_cmpsf_internal(operands[0], operands[1]));
++
++ tmpreg = gen_reg_rtx(SImode);
++ emit_insn(gen_fpcc_to_reg(tmpreg));
++ emit_insn(gen_reg_to_cc(tmpreg));
++
++ DONE;
++ }"
++)
++
++(define_insn "cmpsf_internal"
++ [(set (reg:CC FPCC_REGNUM)
++ (compare:CC
++ (match_operand:SF 0 "avr32_fp_register_operand" "f")
++ (match_operand:SF 1 "avr32_fp_register_operand" "f")))]
++ "TARGET_HARD_FLOAT"
++ {
++ if (!rtx_equal_p(cc_prev_status.mdep.fpvalue, SET_SRC(PATTERN (insn))) )
++ return "fcmp.s\t%0, %1";
++ return "";
++ }
++ [(set_attr "length" "4")
++ (set_attr "type" "fcmps")
++ (set_attr "cc" "fpcompare")])
++
++(define_insn "fpcc_to_reg"
++ [(set (match_operand:SI 0 "register_operand" "=r")
++ (unspec:SI [(reg:CC FPCC_REGNUM)]
++ UNSPEC_FPCC_TO_REG))]
++ "TARGET_HARD_FLOAT"
++ "fmov.s\t%0, fsr"
++ [(set_attr "length" "4")
++ (set_attr "type" "fmvcpu")])
++
++(define_insn "reg_to_cc"
++ [(set (cc0)
++ (unspec:SI [(match_operand:SI 0 "register_operand" "r")]
++ UNSPEC_REG_TO_CC))]
++ "TARGET_HARD_FLOAT"
++ "musfr\t%0"
++ [(set_attr "length" "2")
++ (set_attr "type" "alu")
++ (set_attr "cc" "from_fpcc")])
++
++(define_insn "stm_fp"
++ [(unspec [(match_operand 0 "register_operand" "r")
++ (match_operand 1 "const_int_operand" "")
++ (match_operand 2 "const_int_operand" "")]
++ UNSPEC_STMFP)]
++ "TARGET_HARD_FLOAT"
++ {
++ int cop_reglist = INTVAL(operands[1]);
++
++ if (INTVAL(operands[2]) != 0)
++ return "stcm.w\tcp0, --%0, %C1";
++ else
++ return "stcm.w\tcp0, %0, %C1";
++
++ if ( cop_reglist & ~0xff ){
++ operands[1] = GEN_INT(cop_reglist & ~0xff);
++ if (INTVAL(operands[2]) != 0)
++ return "stcm.d\tcp0, --%0, %D1";
++ else
++ return "stcm.d\tcp0, %0, %D1";
++ }
++ }
++ [(set_attr "type" "fstm")
++ (set_attr "length" "4")
++ (set_attr "cc" "none")])
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/lib1funcs.S gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/lib1funcs.S
+--- gcc-4.0.2/gcc/config/avr32/lib1funcs.S 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/lib1funcs.S 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,1678 @@
++/*#define __IEEE_LARGE_FLOATS__*/
++
++/* Adjust the unpacked double number if it is a subnormal number.
++ The exponent and mantissa pair are stored
++ in [mant_hi,mant_lo] and [exp]. A register with the correct sign bit in
++ the MSB is passed in [sign]. Needs two scratch
++ registers [scratch1] and [scratch2]. An adjusted and packed double float
++ is present in [mant_hi,mant_lo] after macro has executed */
++.macro adjust_subnormal_df exp, mant_lo, mant_hi, sign, scratch1, scratch2
++ /* We have an exponent which is <=0 indicating a subnormal number
++ As it should be stored as if the exponent was 1 (although the
++ exponent field is all zeros to indicate a subnormal number)
++ we have to shift down the mantissa to its correct position. */
++ neg \exp
++ sub \exp,-1 /* amount to shift down */
++ cp.w \exp,54
++ brlo 50f /* if more than 53 shift steps, the
++ entire mantissa will disappear
++ without any rounding to occur */
++ mov \mant_hi, 0
++ mov \mant_lo, 0
++ rjmp 52f
++50:
++ sub \exp,-10 /* do the shift to position the
++ mantissa at the same time
++ note! this does not include the
++ final 1 step shift to add the sign */
++
++ /* when shifting, save all shifted out bits in [scratch2]. we may need to
++ look at them to make correct rounding. */
++
++ rsub \scratch1,\exp,32 /* get inverted shift count */
++ cp.w \exp,32 /* handle shifts >= 32 separately */
++ brhs 51f
++
++ /* small (<32) shift amount, both words are part of the shift */
++ lsl \scratch2,\mant_lo,\scratch1 /* save bits to shift out from lsw*/
++ lsl \scratch1,\mant_hi,\scratch1 /* get bits from msw destined for lsw*/
++ lsr \mant_lo,\mant_lo,\exp /* shift down lsw */
++ lsr \mant_hi,\mant_hi,\exp /* shift down msw */
++ or \mant_hi,\scratch1 /* add bits from msw with prepared lsw */
++ rjmp 50f
++
++ /* large (>=32) shift amount, only lsw will have bits left after shift.
++ note that shift operations will use ((shift count) mod 32) so
++ we do not need to subtract 32 from shift count. */
++51:
++ lsl \scratch2,\mant_hi,\scratch1 /* save bits to shift out from msw */
++ or \scratch2,\mant_lo /* also save all bits from lsw */
++ mov \mant_lo,\mant_hi /* msw -> lsw (i.e. "shift 32 first") */
++ mov \mant_hi,0 /* clear msw */
++ lsr \mant_lo,\mant_lo,\exp /* make rest of shift inside lsw */
++
++50:
++ /* result is almost ready to return, except that least significant bit
++ and the part we already shifted out may cause the result to be
++ rounded */
++ bld \mant_lo,0 /* get bit to be shifted out */
++ brcc 51f /* if bit was 0, no rounding */
++
++ /* msb of part to remove is 1, so rounding depends on rest of bits */
++ tst \scratch2,\scratch2 /* get shifted out tail */
++ brne 50f /* if rest > 0, do round */
++ bld \mant_lo,1 /* we have to look at lsb in result */
++ brcc 51f /* if lsb is 0, don't round */
++
++50:
++ /* subnormal result requires rounding
++ rounding may cause subnormal to become smallest normal number
++ luckily, smallest normal number has exactly the representation
++ we got by rippling a one bit up from mantissa into exponent field. */
++ sub \mant_lo,-1
++ subcc \mant_hi,-1
++
++51:
++ /* shift and return packed double with correct sign */
++ rol \sign
++ ror \mant_hi
++ ror \mant_lo
++52:
++.endm
++
++
++/* Adjust subnormal single float number with exponent [exp]
++ and mantissa [mant] and round. */
++.macro adjust_subnormal_sf sf, exp, mant, sign, scratch
++ /* subnormal number */
++ rsub \exp,\exp, 1 /* shift amount */
++ cp.w \exp, 25
++ movhs \mant, 0
++ brhs 90f /* Return zero */
++ rsub \scratch, \exp, 32
++ lsl \scratch, \mant,\scratch/* Check if there are any bits set
++ in the bits discarded in the mantissa */
++ srne \scratch /* If so set the lsb of the shifted mantissa */
++ lsr \mant,\mant,\exp /* Shift the mantissa */
++ or \mant, \scratch /* Round lsb if any bits were shifted out */
++ /* Rounding : For explaination, see round_sf. */
++ mov \scratch, 0x7f /* Set rounding constant */
++ bld \mant, 8
++ subeq \scratch, -1 /* For odd numbers use rounding constant 0x80 */
++ add \mant, \scratch /* Add rounding constant to mantissa */
++ /* We can't overflow because mantissa is at least shifted one position
++ to the right so the implicit bit is zero. We can however get the implicit
++ bit set after rounding which means that we have the lowest normal number
++ but this is ok since this bit has the same position as the LSB of the
++ exponent */
++ lsr \sf, \mant, 7
++ /* Rotate in sign */
++ lsl \sign, 1
++ ror \sf
++90:
++.endm
++
++
++/* Round the unpacked df number with exponent [exp] and
++ mantissa [mant_hi, mant_lo]. Uses scratch register
++ [scratch] */
++.macro round_df exp, mant_lo, mant_hi, scratch
++ mov \scratch, 0x3ff /* Rounding constant */
++ bld \mant_lo,11 /* Check if lsb in the final result is
++ set */
++ subeq \scratch, -1 /* Adjust rounding constant to 0x400
++ if rounding 0.5 upwards */
++ add \mant_lo, \scratch /* Round */
++ acr \mant_hi /* If overflowing we know that
++ we have all zeros in the bits not
++ scaled out so we can leave them
++ but we must increase the exponent with
++ two since we had an implicit bit
++ which is lost + the extra overflow bit */
++ subcs \exp, -2 /* Update exponent */
++.endm
++
++/* Round single float number stored in [mant] and [exp] */
++.macro round_sf exp, mant, scratch
++ /* Round:
++ For 0.5 we round to nearest even integer
++ for all other cases we round to nearest integer.
++ This means that if the digit left of the "point" (.)
++ is 1 we can add 0x80 to the mantissa since the
++ corner case 0x180 will round up to 0x200. If the
++ digit left of the "point" is 0 we will have to
++ add 0x7f since this will give 0xff and hence a
++ truncation/rounding downwards for the corner
++ case when the 9 lowest bits are 0x080 */
++ mov \scratch, 0x7f /* Set rounding constant */
++ /* Check if the mantissa is even or odd */
++ bld \mant, 8
++ subeq \scratch, -1 /* Rounding constant should be 0x80 */
++ add \mant, \scratch
++ subcs \exp, -2 /* Adjust exponent if we overflowed */
++.endm
++
++/* Scale mantissa [mant_hi, mant_lo] with amount [shift_count].
++ Uses scratch registers [scratch1] and [scratch2] */
++.macro scale_df shift_count, mant_lo, mant_hi, scratch1, scratch2
++ /* Scale [mant_hi, mant_lo] with shift_amount.
++ Must not forget the sticky bits we intend to shift out. */
++
++ rsub \scratch1,\shift_count,32/* get (32 - shift count)
++ (if shift count > 32 we get a
++ negative value, but that will
++ work as well in the code below.) */
++
++ cp.w \shift_count,32 /* handle shifts >= 32 separately */
++ brhs 70f
++
++ /* small (<32) shift amount, both words are part of the shift
++ first remember whether part that is lost contains any 1 bits ... */
++ lsl \scratch2,\mant_lo,\scratch1 /*shift away bits that are part of
++ final mantissa. only part that goes
++ to scratch2 are bits that will be lost */
++
++ /* ... and now to the actual shift */
++ lsl \scratch1,\mant_hi,\scratch1 /* get bits from msw destined for lsw*/
++ lsr \mant_lo,\mant_lo,\shift_count /* shift down lsw of mantissa */
++ lsr \mant_hi,\mant_hi,\shift_count /* shift down msw of mantissa */
++ or \mant_lo,\scratch1 /* combine these bits with prepared lsw*/
++ rjmp 71f
++
++ /* large (>=32) shift amount, only lsw will have bits left after shift.
++ note that shift operations will use ((shift count) mod 32) so
++ we do not need to subtract 32 from shift count. */
++70:
++ /* first remember whether part that is lost contains any 1 bits ... */
++ lsl \scratch2,\mant_hi,\scratch1 /* save all lost bits from msw */
++ or \scratch2,\mant_lo /* also save lost bits (all) from lsw
++ now scratch2<>0 if we lose any bits */
++
++ /* ... and now to the actual shift */
++ mov \mant_lo,\mant_hi /* msw -> lsw (i.e. "shift 32 first")*/
++ mov \mant_hi,0 /* clear msw */
++ lsr \mant_lo,\mant_lo,\shift_count /* make rest of shift inside lsw*/
++
++71:
++ cp.w \scratch2,0 /* if any '1' bit in part we lost ...*/
++ breq 70f
++
++ sbr \mant_lo,0 /* ... we need to set sticky bit*/
++70:
++.endm
++
++/* Unpack exponent and mantissa from the double number
++ stored in [df_hi,df_lo]. The exponent is stored in [exp]
++ while the mantissa is stored in [df_hi,df_lo]. */
++
++.macro unpack_df exp, df_lo, df_hi
++ lsr \exp, \df_hi,21 /* Extract exponent */
++ lsl \df_hi,10 /* Get mantissa */
++ or \df_hi,\df_hi,\df_lo>>21
++ lsl \df_lo,11
++
++ neg \exp /* Fix implicit bit */
++ bst \df_hi,31
++ subeq \exp,1
++ neg \exp /* negate back exponent */
++ .endm
++
++/* Unpack exponent and mantissa from the single float number
++ stored in [sf]. The exponent is stored in [exp]
++ while the mantissa is stored in [sf]. */
++.macro unpack_sf exp, sf
++ lsr \exp, \sf, 24
++ brne 80f
++ /* Fix subnormal number */
++ lsl \sf,7
++ clz \exp,\sf
++ lsl \sf,\sf,\exp
++ rsub \exp,\exp,1
++ rjmp 81f
++80:
++ lsl \sf,7
++ sbr \sf, 31 /*Implicit bit*/
++81:
++.endm
++
++
++
++/* Pack a single float number stored in [mant] and [exp]
++ into a single float number in [sf] */
++.macro pack_sf sf, exp, mant
++ bld \mant,31 /* implicit bit to z */
++ subne \exp,1 /* if subnormal (implicit bit 0)
++ adjust exponent to storage format */
++
++ lsr \sf, \mant, 7
++ bfins \sf, \exp, 24, 8
++.endm
++
++/* Pack exponent [exp] and mantissa [mant_hi, mant_lo]
++ into [df_hi, df_lo]. [df_hi] is shifted
++ one bit up so the sign bit can be shifted into it */
++
++.macro pack_df exp, mant_lo, mant_hi, df_lo, df_hi
++ bld \mant_hi,31 /* implicit bit to z */
++ subne \exp,1 /* if subnormal (implicit bit 0)
++ adjust exponent to storage format */
++
++ lsr \mant_lo,11 /* shift back lsw */
++ or \df_lo,\mant_lo,\mant_hi<<21 /* combine with low bits from msw */
++ lsl \mant_hi,1 /* get rid of implicit bit */
++ lsr \mant_hi,11 /* shift back msw except for one step*/
++ or \df_hi,\mant_hi,\exp<<21 /* combine msw with exponent */
++.endm
++
++/* Normalize single float number stored in [mant] and [exp]
++ using scratch register [scratch] */
++.macro normalize_sf exp, mant, scratch
++ /* Adjust exponent and mantissa */
++ clz \scratch, \mant
++ sub \exp, \scratch
++ lsl \mant, \mant, \scratch
++.endm
++
++/* Normalize the exponent and mantissa pair stored
++ in [mant_hi,mant_lo] and [exp]. Needs two scratch
++ registers [scratch1] and [scratch2]. */
++.macro normalize_df exp, mant_lo, mant_hi, scratch1, scratch2
++ clz \scratch1,\mant_hi /* Check if we have zeros in high bits */
++ breq 80f /* No need for scaling if no zeros in high bits */
++ cp.w \scratch1,32 /* Check for all zeros */
++ breq 81f
++
++ /* shift amount is smaller than 32, and involves both msw and lsw*/
++ rsub \scratch2,\scratch1,32 /* shift mantissa */
++ lsl \mant_hi,\mant_hi,\scratch1
++ lsr \scratch2,\mant_lo,\scratch2
++ or \mant_hi,\scratch2
++ lsl \mant_lo,\mant_lo,\scratch1
++ sub \exp,\scratch1 /* adjust exponent */
++ rjmp 80f /* Finished */
++81:
++ /* shift amount is greater than 32 */
++ clz \scratch1,\mant_lo /* shift mantissa */
++ sub \scratch1,-32
++ mov \mant_hi,\mant_lo
++ lsl \mant_hi,\mant_hi,\scratch1
++ mov \mant_lo,0
++ sub \exp,\scratch1 /* adjust exponent */
++80:
++.endm
++
++
++#ifdef L_avr32_f64_mul
++ .align 2
++ .global __avr32_f64_mul
++ .type __avr32_f64_mul,@function
++
++__avr32_f64_mul:
++ pushm r0-r3,r4-r7,lr
++
++ /* Unpack */
++ eor r12, r11, r9 /* Sign op1 ^ Sign op2 is MSB of r12*/
++ lsl r11,1 /* Unpack op1 */
++ lsl r9,1 /* Unpack op2 */
++
++ /* Sort operands op1 >= op2 */
++ lddpc r5, .Linf
++ cp.w r10,r8
++ cpc r11,r9
++ brhs 0f
++
++ mov r7,r11 /* swap operands if op2 was larger */
++ mov r6,r10
++ mov r11,r9
++ mov r10,r8
++ mov r9,r7
++ mov r8,r6
++
++0:
++ /* Check against infinity */
++ cp.w r11,r5
++ brlo 1f
++ /* infinity or nan */
++ /* we have to check low word as well as nan mantissa may be 0 in msw*/
++ cpc r10
++ /* we know that op1 is inf or nan. if z != 1 then we have nan.
++ in this case, also return nan. */
++ breq 0f
++ /* Return NaN */
++ mov r11, -1
++ rjmp __dfmul_return_op1
++0:
++
++ /* op1 is infinity. op2 is smaller or same so it cannot be nan.
++ it can be infinity or a (sub-)normal number.
++ we should return op1 (infinity) except when op2 is zero when
++ result should be nan. */
++ or r5,r9,r8
++ brne __dfmul_return_op1 /* op2 is not zero. return op1.*/
++ /* Return NaN */
++ mov r11, -1
++ rjmp __dfmul_return_op1
++
++1:
++ /* no operand is inf/nan, and operands have been arranged in order
++ with op1 >= op2, implying that if we have a zero, it is found in
++ op2. in this case, result should be zero (with sign from both ops). */
++
++ or r5,r9,r8 /* check the smaller value for zero */
++ brne 0f
++ mov r10, 0
++ mov r11, 0
++ rjmp __dfmul_return_op1 /* Early exit */
++0:
++
++ /* we have two "normal" (can be subnormal) nonzero numbers in r11:r10
++ and r9:r8. sign of result is already calculated in r12.
++ perform a normal multiplication. */
++
++ /* Unpack and normalize*/
++ unpack_df r7 /*exp*/, r10, r11 /* mantissa */
++ normalize_df r7 /*exp*/, r10, r11 /* mantissa */, r4, r5 /* scratch */
++
++
++ /* Unpack and normalize*/
++ unpack_df r6 /*exp*/, r8, r9 /* mantissa */
++ normalize_df r6 /*exp*/, r8, r9 /* mantissa */, r4, r5 /* scratch */
++
++ /* Multiply */
++
++ mulu.d r0,r10,r8
++ add lr,r7,r6 /* calculate new exponent after mul */
++ mulu.d r2,r11,r8
++ sub lr,(1023-1) /* remove exponent bias as we have
++ included bias from both op1 and op2
++ sub one less, or in other words
++ add one to exponent. see below why. */
++ mulu.d r6,r11,r9
++ add r2,r1
++ mulu.d r4,r10,r9
++
++
++ adc r6,r6,r3
++ acr r7
++
++ add r4,r2
++ adc r6,r6,r5
++ acr r7
++
++ // r7:r6 is now in range [0x4000...0000 - 0xffff...fffe]
++ // remaining bits in r0 and r4 are of no interest, except that we have
++ // to add a sticky bit to r10 in case we had a 1 bit in r4 or r0.
++
++ or r4,r0
++ movne r0, 1 /* If we have bits in r4 or r0 */
++ or r6,r0 /* set lsb of result to 1 */
++
++
++ // if msb is set, it was because multiplication gave an "overflow"
++ // of one bit so exponent should be incremented.
++ // we already did that above so we are done.
++ // if msb is *not* set it will be normalized and exponent will be
++ // decremented (which will compensate the one we added above).
++
++ normalize_df lr /*exp*/, r6, r7 /* mantissa */, r8, r9 /* scratch */
++
++ /* Check if a subnormal result was created */
++ cp.w lr, 0
++ brgt 0f
++
++ adjust_subnormal_df lr, r6, r7, r12, r8, r9
++ mov r10, r6
++ mov r11, r7
++ popm r0-r3,r4-r7, pc
++0:
++
++ /* Round result */
++ round_df lr /*exp*/, r6, r7 /* Mantissa */, r4 /*scratch*/
++ cp.w lr,0x7ff
++ brlt 0f
++ /*Return infinity */
++ lddpc r11, .Linf
++ mov r10, 0
++ rjmp __dfmul_return_op1
++
++0:
++
++ /* Pack */
++ pack_df lr /*exp*/, r6, r7 /* mantissa */, r10, r11 /* Output df number*/
++__dfmul_return_op1:
++ lsl r12,1 /* shift in sign bit */
++ ror r11
++
++ popm r0-r3,r4-r7, pc
++
++#endif
++
++
++#ifdef L_avr32_f64_addsub
++ .align 2
++ .global __avr32_f64_sub
++ .type __avr32_f64_sub,@function
++
++__avr32_f64_sub:
++ pushm r4-r7,lr
++
++ eor r12,r11,r9 // compare signs of operands
++ bld r12,31
++ brcc __dfsub // same sign => subtract
++
++ eorh r9,0x8000
++ rjmp __dfadd // different signs => op1 + (-op2)
++__dfsub:
++
++ lsl r11,1 // unpack op1 msw and get sign in c
++ or r4,r11,r10 // check if all bits zero
++ brne 1f
++
++ // op1 is zero, negate op2 and handle as add
++ eorh r9,0x8000
++ // op1 is +/-0, and is unpacked with sign in c. add to op2.
++ // also used by sub, but op2 has been negated in this case
++ ror r12 // save sign of op1 in msb of r12
++ lsl r9,1 // unpack msw and get sign of op2
++ or r4,r9,r8 // check all bits in op2
++ breq 0f
++
++ // if op2 != 0, then return op2 unchanged.
++ ror r9 // pack op2 msw again with sign from c
++ mov r11,r9
++ mov r10,r8
++ popm r4-r7,pc
++
++0:
++ // both op1 and op2 zero, but sign unknown. result should and signs.
++ ror r9 // pack op2 msw again with sign from c
++ lsl r12,1 // get back sign of op1 into c ...
++ ror r11 // and back in original op1
++ and r11,r9 // and sign bits. as op1 is zero, the
++ // only bit which can be 1 is sign bit
++ popm r4-r7,pc
++
++1:
++ ror r12 // save op1 sign in msb of r12
++
++ lsl r9,1 // unpack op2 msw
++ or r4,r8,r9
++ brne 0f
++ // op2 is zero, return op1
++ // whatever it is. the only case
++ // requiring special handling is if
++ // op1 is zero, but that was handled
++ // above.
++ lsl r12, 1
++ ror r11
++ popm r4-r7,pc
++
++0:
++ // make sure that op1 >= op2, flip sign if we swap ops
++ cp.w r10,r8
++ cpc r11,r9
++ brhs 0f
++
++ com r12 // sign of op1 and result in lsb(r12)
++ mov r7,r11 // swap operands if op2 was larger
++ mov r6,r10
++ mov r11,r9
++ mov r10,r8
++ mov r9,r7
++ mov r8,r6
++
++0:
++ // check if op1 is nan or inf.
++ lddpc r5,.Linf
++ cp.w r11,r5
++ brlo 1f
++ /* Op 1 is nan or inf */
++ // we have to check low word as well as nan mantissa may be 0 in msw
++ cpc r10
++ // we know that op1 is inf or nan. if z != 1 then we have nan.
++ // if we have nan, return nan.
++ breq 0f
++ mov r11, -1
++ rjmp __dfsub_return_op1
++0:
++
++ // op1 is infinity. check if op2 is nan, infinty or a normal number.
++ cp.w r9,r5
++ movhs r11, -1 // op2 is a normal number. return op1.
++
++ // op2 can be infinity (of the same sign as op1) or nan.
++ // in both cases we should return nan.
++ rjmp __dfsub_return_op1
++1:
++ // if op1 is not inf or nan, then op2 cannot be since op1 >= op2
++
++ // now prepare the operands by expanding them and shifting op2
++ // to the correct position for the subtract. note! if op2 is
++ // insignificant compared to op1, the function will take care of
++ // this and return op1 directly to the application.
++
++ /* Unpack operands */
++ unpack_df r7 /* exp op1*/, r10, r11 /* Mantissa op1 */
++ unpack_df r6 /* exp op2*/, r8, r9 /* Mantissa op2 */
++
++ /* Get shift amount required for aligning op1 and op2 */
++ rsub r6, r7
++ breq __perform_dfsub /* No shift needed */
++
++ cp.w r6, 63
++ brhs __dfsub_pack_result /* Op 2 insignificant compared to op1 */
++
++ /* Shift mantissa of op2 so that op1 and op2 are aligned */
++ scale_df r6 /* shift_count*/, r8, r9 /* Mantissa */, r4, r5 /*Scratch*/
++
++__perform_dfsub:
++ sub r10,r8 /* subtract mantissa of op2 from op1 */
++ sbc r11,r11,r9
++ or r4,r11,r10 /* check if result is all zeroes */
++ brne 0f
++ popm r4-r7,pc /* Early return */
++0:
++
++ normalize_df r7 /*exp*/, r10, r11 /* mantissa */, r8, r9 /* scratch */
++
++ /* Check if a subnormal result was created */
++ cp.w r7, 0
++ brgt 0f
++
++ adjust_subnormal_df r7 /*exp*/, r10, r11 /* Mantissa */, r12 /*sign*/, r8, r9 /*scratch*/
++ popm r4-r7,pc
++0:
++
++ /* Round result */
++ round_df r7 /*exp*/, r10, r11 /* Mantissa */, r9 /*scratch*/
++ cp.w r7,0x7ff
++ brlt __dfsub_pack_result
++ /*Return infinity */
++ lddpc r11, .Linf
++ mov r10, 0
++ rjmp __dfsub_return_op1
++
++__dfsub_pack_result:
++ /* Pack */
++ pack_df r7 /*exp*/, r10, r11 /* mantissa */, r10, r11 /* Output df number*/
++
++__dfsub_return_op1:
++ lsl r12,1
++ ror r11
++ popm r4-r7,pc
++
++ .align 2
++ .global __avr32_f64_add
++ .type __avr32_f64_add,@function
++__avr32_f64_add:
++ pushm r4-r7,lr
++ eor r12,r11,r9 // compare signs of operands
++ lsl r12,1
++ brcc __dfadd // same sign => add
++
++ eorh r9,0x8000
++ rjmp __dfsub // different signs => op1 - (-op2)
++__dfadd:
++
++ lsl r11,1 // unpack op1 msw and get sign in c
++ or r4,r11,r10 // check if all bits zero
++ brne 1f
++
++ // op1 is +/-0, and is unpacked with sign in c. add to op2.
++ // also used by sub, but op2 has been negated in this case
++ ror r12 // save sign of op1 in msb of r12
++ lsl r9,1 // unpack msw and get sign of op2
++ or r4,r9,r8 // check all bits in op2
++ breq 0f
++
++ // if op2 != 0, then return op2 unchanged.
++ ror r9 // pack op2 msw again with sign from c
++ mov r11,r9
++ mov r10,r8
++ popm r4-r7,pc
++
++0:
++ // both op1 and op2 zero, but sign unknown. result should and signs.
++ ror r9 // pack op2 msw again with sign from c
++ lsl r12,1 // get back sign of op1 into c ...
++ ror r11 // and back in original op1
++ and r11,r9 // and sign bits. as op1 is zero, the
++ // only bit which can be 1 is sign bit
++ popm r4-r7,pc
++1:
++ ror r12 // save op1 sign in msb of r12
++
++ lsl r9,1 // unpack op2 msw
++ or r4,r8,r9
++ brne 0f
++ // op2 is zero, return op1
++ // whatever it is. the only case
++ // requiring special handling is if
++ // op1 is zero, but that was handled
++ // above.
++ lsl r12, 1
++ ror r11
++ popm r4-r7,pc
++0:
++ // make sure that exp[op1] >= exp[op2]
++ cp.w r11,r9
++ brhs 0f
++
++ mov r7,r11 // swap operands if op2 was larger
++ mov r6,r10
++ mov r11,r9
++ mov r10,r8
++ mov r9,r7
++ mov r8,r6
++
++0:
++ // check if op1 is nan or inf.
++ lddpc r5,.Linf
++ cp.w r11,r5
++ brlo 1f
++ /* Op 1 is nan or inf */
++ // we have to check low word as well as nan mantissa may be 0 in msw
++ cpc r10
++ // we know that op1 is inf or nan. if z != 1 then we have nan.
++ // if we have nan, return nan.
++ breq 0f
++ mov r11, -1
++ rjmp __dfadd_return_op1
++0:
++
++ // op1 is infinity. check if op2 is nan, infinty or a normal number.
++ cp.w r9,r5
++ // Op2 is NaN of Inf. Return op2 but with sign of result.
++ // If Op2 is NaN, sign doesn't matter but no need to separate NaN
++ movhs r11, r9
++ movhs r10, r8
++
++ // op2 can be infinity (of the same sign as op1) or nan.
++ // in both cases we should return nan.
++ rjmp __dfadd_return_op1
++1:
++ // if op1 is not inf or nan, then op2 cannot be since exp[op1] >=
++ // exp[op2]
++
++ // now prepare the operands by expanding them and shifting op2
++ // to the correct position for the add. note! if op2 is
++ // insignificant compared to op1, the function will take care of
++ // this and return op1 directly to the application.
++
++ /* Unpack operands */
++ unpack_df r7 /* exp op1*/, r10, r11 /* Mantissa op1 */
++ unpack_df r6 /* exp op2*/, r8, r9 /* Mantissa op2 */
++
++ /* Get shift amount required for aligning op1 and op2 */
++ rsub r6, r7
++ breq __perform_dfadd /* No shift needed */
++
++ cp.w r6, 63
++ brhs __dfadd_pack_result /* Op 2 insignificant compared to op1 */
++
++ /* Shift mantissa of op2 so that op1 and op2 are aligned */
++ scale_df r6 /* shift_count*/, r8, r9 /* Mantissa */, r4, r5 /*Scratch*/
++
++__perform_dfadd:
++ add r10,r8 // add mantissas
++ adc r11,r11,r9
++ brcc 0f
++ ror r11 // overflow => shift down mantissa
++ ror r10
++ brcc 1f // sticky bit shifted out?
++ sbr r10,0 // if so, merge it into result again
++1:
++ sub r7,-1 // increase exponent with 1
++0:
++ normalize_df r7 /*exp*/, r10, r11 /* mantissa */, r8, r9 /* scratch */
++
++ /* Check if a subnormal result was created */
++ cp.w r7, 0
++ brgt 0f
++
++ adjust_subnormal_df r7 /*exp*/, r10, r11 /* Mantissa */, r12 /*sign*/, r8, r9 /*scratch*/
++ popm r4-r7,pc
++0:
++
++ /* Round result */
++ round_df r7 /*exp*/, r10, r11 /* Mantissa */, r9 /*scratch*/
++ cp.w r7,0x7ff
++ brlt __dfadd_pack_result
++ /*Return infinity */
++ lddpc r11, .Linf
++ mov r10, 0
++ rjmp __dfadd_return_op1
++
++__dfadd_pack_result:
++ /* Pack */
++ pack_df r7 /*exp*/, r10, r11 /* mantissa */, r10, r11 /* Output df number*/
++
++__dfadd_return_op1:
++ lsl r12,1
++ ror r11
++ popm r4-r7,pc
++#endif
++
++#ifdef L_avr32_f64_to_u32
++ /* This goes into L_fixdfsi */
++#endif
++
++
++#ifdef L_avr32_f64_to_s32
++ .global __avr32_f64_to_u32
++ .type __avr32_f64_to_u32,@function
++__avr32_f64_to_u32:
++ cp.w r11, 0
++ retmi 0 /* Negative returns 0 */
++#ifdef __LARGE_FLOATS__
++ lsl r12,r11,1
++ lsr r12,21 /* extract exponent*/
++ sub r12,1023 /* convert to unbiased exponent.*/
++ retlo 0 /* too small exponent implies zero. */
++ cp.w r12,32
++ brcc 0f
++ rjmp 1f
++#endif
++
++ /* Fallthrough to df to signed si conversion */
++ .global __avr32_f64_to_s32
++ .type __avr32_f64_to_s32,@function
++__avr32_f64_to_s32:
++ lsl r12,r11,1
++ lsr r12,21 /* extract exponent*/
++ sub r12,1023 /* convert to unbiased exponent.*/
++ retlo 0 /* too small exponent implies zero. */
++
++#ifdef __LARGE_FLOATS__
++ cp.w r12,31
++ brcc 0f
++#endif
++1:
++ rsub r12,r12,31 /* shift count = 31 - exponent */
++ mov r9,r11 /* save sign for later...*/
++ lsl r11,11 /* remove exponent and sign*/
++ sbr r11,31 /* add implicit bit*/
++ or r11,r11,r10>>21 /* get rest of bits from lsw of double */
++ lsr r11,r11,r12 /* shift down mantissa to final place */
++ lsl r9,1 /* sign -> carry */
++ retcc r11 /* if positive, we are done */
++ neg r11 /* if negative float, negate result */
++ ret r11
++
++#ifdef __LARGE_FLOATS__
++0:
++ mov r12,-1 /* r11 = 0xffffffff */
++ lsr r12,1 /* r11 = 0x7fffffff */
++ lsl r11,1 /* sign -> carry */
++ acr r12 /* r11 = signed ? 0x80000000
++ : 0x7fffffff */
++ ret r12
++#endif
++#endif /* L_fixdfsi*/
++
++#ifdef L_avr32_f64_to_u64
++ /* Actual function is in L_fixdfdi */
++#endif
++
++#ifdef L_avr32_f64_to_s64
++ .global __avr32_f64_to_u64
++ .type __avr32_f64_to_u64,@function
++__avr32_f64_to_u64:
++ cp.w r11,0
++ /* Negative numbers return zero */
++ movmi r10, 0
++ movmi r11, 0
++ retmi r11
++#ifdef __LARGE_FLOATS__
++ lsl r9,r11,1
++ lsr r9,21 /* get exponent*/
++ sub r9,1023 /* convert to correct range*/
++ /* Return zero if exponent to small */
++ movlo r10, 0
++ movlo r11, 0
++ retlo r11
++ cp.w r9,64
++ mov r8,r11 /* save sign for later...*/
++ brcs 1f
++ rjmp 2f /* Number to large */
++
++#endif
++
++
++
++ /* Fallthrough */
++ .global __avr32_f64_to_s64
++ .type __avr32_f64_to_s64,@function
++__avr32_f64_to_s64:
++ lsl r9,r11,1
++ lsr r9,21 /* get exponent*/
++ sub r9,1023 /* convert to correct range*/
++ /* Return zero if exponent to small */
++ movlo r10, 0
++ movlo r11, 0
++ retlo r11
++
++#ifdef __LARGE_FLOATS__
++ cp.w r9,63
++ mov r8,r11 /* save sign for later...*/
++ brcc 2f
++#else
++ mov r8,r11 /* save sign for later...*/
++#endif
++1:
++ lsl r11,11 /* remove exponent */
++ sbr r11,31 /* add implicit bit*/
++ or r11,r11,r10>>21 /* get rest of bits from lsw of double*/
++ lsl r10,11 /* align lsw correctly as well */
++ rsub r9,r9,63 /* shift count = 63 - exponent */
++ breq 1f
++
++ cp.w r9,32 /* is shift count more than one reg? */
++ brhs 0f
++
++ mov r12,r11 /* save msw */
++ lsr r10,r10,r9 /* small shift count, shift down lsw */
++ lsr r11,r11,r9 /* small shift count, shift down msw */
++ rsub r9,r9,32 /* get 32-size of shifted out tail */
++ lsl r12,r12,r9 /* align part to move from msw to lsw */
++ or r10,r12 /* combine to get new lsw */
++ rjmp 1f
++
++0:
++ lsr r10,r11,r9 /* large shift count,only lsw get bits
++ note that shift count is modulo 32*/
++ mov r11,0 /* msw will be 0 */
++
++1:
++ lsl r8,1 /* sign -> carry */
++ retcc r11 /* if positive, we are done */
++
++ neg r11 /* if negative float, negate result */
++ neg r10
++ scr r11
++ ret r11
++
++
++#ifdef __LARGE_FLOATS__
++2:
++ mov r11,-1 /* r11 = 0xffffffff */
++ lsr r11,1 /* r11 = 0x7fffffff */
++ lsl r8,1 /* sign -> carry */
++ acr r11 /* r11 = signed ? 0x80000000 */
++ /* : 0x7fffffff */
++ lsl r10,r11,31 /* extend last bit of msw*/
++ asr r10,31
++ ret r11
++#endif
++#endif
++
++#ifdef L_avr32_u32_to_f64
++ /* Code located in L_floatsidf */
++#endif
++
++#ifdef L_avr32_s32_to_f64
++ .global __avr32_u32_to_f64
++ .type __avr32_u32_to_f64,@function
++__avr32_u32_to_f64:
++ sub r11, r12, 0 /* Move to r11 and force Z flag to be updated */
++ mov r12, 0 /* always positive */
++ rjmp 0f /* Jump to common code for floatsidf */
++
++ .global __avr32_s32_to_f64
++ .type __avr32_s32_to_f64,@function
++__avr32_s32_to_f64:
++ mov r11, r12 /* Keep original value in r12 for sign */
++ abs r11 /* Absolute value if r12 */
++0:
++ mov r10,0 /* let remaining bits be zero */
++ reteq r11 /* zero long will return zero float */
++
++ pushm lr
++ mov r9,31+1023 /* set exponent */
++
++ normalize_df r9 /*exp*/, r10, r11 /* mantissa */, r8, lr /* scratch */
++
++ /* Check if a subnormal result was created */
++ cp.w r9, 0
++ brgt 0f
++
++ adjust_subnormal_df r9 /* exp */, r10, r11 /* Mantissa */, r12 /*sign*/, r8, lr /* scratch */
++ popm pc
++0:
++
++ /* Round result */
++ round_df r9 /*exp*/, r10, r11 /* Mantissa */, r8 /*scratch*/
++ cp.w r9,0x7ff
++ brlt 0f
++ /*Return infinity */
++ lddpc r11, .Linf
++ mov r10, 0
++ rjmp __floatsidf_return_op1
++
++0:
++
++ /* Pack */
++ pack_df r9 /*exp*/, r10, r11 /* mantissa */, r10, r11 /* Output df number*/
++__floatsidf_return_op1:
++ lsl r12,1 /* shift in sign bit */
++ ror r11
++
++ popm pc
++#endif
++
++
++#ifdef L_avr32_f32_cmp_eq
++ .global __avr32_f32_cmp_eq
++ .type __avr32_f32_cmp_eq,@function
++__avr32_f32_cmp_eq:
++ cp.w r12, r11
++ brne 0f /* If not equal check for +/-0 */
++
++ /* Check for NaN or Inf */
++ lddpc r11,.Linf_sf
++ lsl r12, 1
++ cp.w r12, r11
++ srls r12 /* 0 if NaN, 1 otherwise */
++ ret r12
++0:
++ /* Or together the two values and shift out the sign bit.
++ If the result is zero, then the two values are both zero. */
++ or r12, r11
++ lsl r12, 1
++ sreq r12
++ ret r12
++#endif
++
++#if defined(L_avr32_f32_cmp_ge) || defined(L_avr32_f32_cmp_lt)
++#ifdef L_avr32_f32_cmp_ge
++ .global __avr32_f32_cmp_ge
++ .type __avr32_f32_cmp_ge,@function
++__avr32_f32_cmp_ge:
++#endif
++#ifdef L_avr32_f32_cmp_lt
++ .global __avr32_f32_cmp_lt
++ .type __avr32_f32_cmp_lt,@function
++__avr32_f32_cmp_lt:
++#endif
++ lsl r10, r12, 1 /* Remove sign bits */
++ lsl r9, r11, 1
++ lddpc r8, .Linf_sf
++ cp.w r10, r8
++ rethi 0 /* Op0 is NaN */
++ cp.w r9, r8
++ rethi 0 /* Op1 is Nan */
++
++ eor r8, r11, r12
++ bld r12, 31
++#ifdef L_avr32_f32_cmp_ge
++ srcc r8 /* Set result to true if op0 is positive*/
++#endif
++#ifdef L_avr32_f32_cmp_lt
++ srcs r8 /* Set result to true if op0 is negative*/
++#endif
++ retmi r8 /* Return if signs are different */
++ brcs 0f /* Both signs negative? */
++
++ /* Both signs positive */
++ cp.w r12, r11
++#ifdef L_avr32_f32_cmp_ge
++ srhs r12
++#endif
++#ifdef L_avr32_f32_cmp_lt
++ srlo r12
++#endif
++ retal r12
++0:
++ /* Both signs negative */
++ cp.w r11, r12
++#ifdef L_avr32_f32_cmp_ge
++ srhs r12
++#endif
++#ifdef L_avr32_f32_cmp_lt
++ srlo r12
++#endif
++ retal r12
++#endif
++
++
++#ifdef L_avr32_f64_cmp_eq
++ .global __avr32_f64_cmp_eq
++ .type __avr32_f64_cmp_eq,@function
++__avr32_f64_cmp_eq:
++ cp.w r10,r8
++ cpc r11,r9
++ brne 0f /* Both args could be zero with different sign bits */
++
++ /* check for NaN */
++ lsl r11,1
++ lddpc r12,.Linf
++ cp.w r10,0
++ cpc r11,r12 /* check if nan or inf */
++ srls r12 /* If Arg is NaN return 0 else 1*/
++ ret r12 /* Return */
++
++0:
++ lsl r11,1 /* get rid of sign bits */
++ lsl r9,1
++ or r11,r10 /* Check if all bits are zero */
++ or r11,r9
++ or r11,r8
++ sreq r12 /* If all zeros the arguments are equal
++ so return 1 else return 0 */
++ ret r12
++#endif
++
++
++#if defined(L_avr32_f64_cmp_ge) || defined(L_avr32_f64_cmp_lt)
++
++#ifdef L_avr32_f64_cmp_ge
++ .global __avr32_f64_cmp_ge
++ .type __avr32_f64_cmp_ge,@function
++__avr32_f64_cmp_ge:
++#endif
++#ifdef L_avr32_f64_cmp_lt
++ .global __avr32_f64_cmp_lt
++ .type __avr32_f64_cmp_lt,@function
++__avr32_f64_cmp_lt:
++#endif
++
++ /* compare magnitude of op1 and op2 */
++ pushm lr
++
++ lsl r11,1 /* Remove sign bit of op1 */
++ srcs lr /* Sign op1 to lsb of lr*/
++ lsl r9,1 /* Remove sign bit of op2 */
++ rol lr /* Sign op2 to lsb of lr, sign bit op1 bit 1 of lr*/
++
++ /* Check for Nan */
++ lddpc r12,.Linf
++ cp.w r10,0
++ cpc r11,r12
++ movhi r12, 0 /* Return false for NaN */
++ brhi 0f /* We have NaN */
++ cp.w r8,0
++ cpc r9,r12
++ movhi r12, 0 /* Return false for NaN */
++ brhi 0f /* We have NaN */
++
++ cp.w lr,3 /* both operands negative ?*/
++ breq 1f
++
++ cp.w lr,1 /* both operands positive? */
++ brlo 2f
++
++ /* Different signs. If sign of op1 is negative the difference
++ between op1 and op2 will always be negative, and if op1 is
++ positive the difference will always be positive */
++#ifdef L_avr32_f64_cmp_ge
++ sreq r12
++#endif
++#ifdef L_avr32_f64_cmp_lt
++ srne r12
++#endif
++ popm pc
++
++
++2:
++ /* Both operands positive. Just compute the difference */
++ cp.w r10,r8
++ cpc r11,r9
++#ifdef L_avr32_f64_cmp_ge
++ srhs r12
++#endif
++#ifdef L_avr32_f64_cmp_lt
++ srlo r12
++#endif
++ popm pc
++
++1:
++ /* Both operands negative. Compute the difference with operands switched */
++ cp r8,r10
++ cpc r9,r11
++#ifdef L_avr32_f64_cmp_ge
++ srhs r12
++#endif
++#ifdef L_avr32_f64_cmp_lt
++ srlo r12
++#endif
++0:
++ popm pc
++#endif
++
++
++
++#ifdef L_avr32_f64_div
++ .global __avr32_f64_div
++ .type __avr32_f64_div,@function
++__avr32_f64_div:
++ stm --sp, r2-r7,lr
++ eor r12, r11, r9 /* Sign(op1) ^ Sign(op2) to msb of r12*/
++ lsl r11,1 /* unpack op1*/
++ lddpc lr,.Linf
++ lsl r9,1 /* unpack op2*/
++
++ cp.w r11,lr
++ brhs 0f /* op1 is NaN or infinity */
++ cp.w r9,lr
++ brhs 1f /* op2 is NaN or infinity */
++ or r5,r9,r8
++ breq 2f /* op2 is zero */
++ or r5,r11,r10
++ breq __dfdiv_return_op1 /* op1 is zero return zero*/
++
++ /* Unpack and normalize */
++ /* op1 */
++ unpack_df r7 /*exp*/, r10, r11 /*df number*/
++ normalize_df r7 /*exp*/, r10, r11 /*Mantissa*/, r4, r5 /*scratch*/
++
++ /* op1 */
++ unpack_df r6 /*exp*/, r8, r9 /*df number*/
++ normalize_df r6 /*exp*/, r8, r9 /*Mantissa*/, r4, r5 /*scratch*/
++
++ /* Compute new exponent */
++ sub r7,r6
++ sub r7,-1023
++
++ /* Do fixed point division of mantissas*/
++ mov r6,55
++ lsr r11,1
++ ror r10
++ lsr r9,1
++ ror r8
++
++3:
++ /* Check if dividend is higher or same than divisor */
++ sub r2,r10,r8
++ sbc r3,r11,r9
++ /* If so move the difference back into the dividend */
++ movhs r10, r2
++ movhs r11, r3
++ /* Update the Quotient */
++ rol r4
++ rol r5
++ eorl r4,1
++
++ /* Shift the dividend */
++ lsl r10,1
++ rol r11
++
++ sub r6,1
++ brne 3b
++
++ /* Check if we have a remainder which will the propagate into
++ the last bit */
++
++ or r11,r11,r10
++ neg r11
++ rol r4
++ rol r5
++
++ /* Adjust mantissa into correct alignment */
++ lsl r11, r5,(64-56)
++ or r11,r11,r4>>(32-64+56)
++ lsl r10,r4, (64-56)
++
++ /* Normalize result */
++ normalize_df r7 /*exp*/, r10, r11 /* mantissa */, r8, r9 /* scratch */
++
++ /* Check if a subnormal result was created */
++ cp.w r7, 0
++ brgt 3f
++
++ adjust_subnormal_df r7 /*exp*/, r10, r11 /* Mantissa */, r12 /*sign*/, r8, r9 /*scratch*/
++ ldm sp++, r2-r7,pc
++3:
++
++ /* Round result */
++ round_df r7 /*exp*/, r10, r11 /* Mantissa */, r9 /*scratch*/
++ cp.w r7,0x7ff
++ brlt __dfdiv_pack_result
++ /*Return infinity */
++ lddpc r11, .Linf
++ mov r10, 0
++ rjmp __dfdiv_return_op1
++
++__dfdiv_pack_result:
++ /* Pack */
++ pack_df r7 /*exp*/, r10, r11 /* mantissa */, r10, r11 /* Output df number*/
++
++__dfdiv_return_op1:
++ lsl r12,1
++ ror r11
++ ldm sp++, r2-r7,pc
++
++0:
++ /* Op1 is NaN or Inf */
++ cpc r10
++ /* If op1 is a NaN the we should return a NaN */
++ brne __dfdiv_return_op1
++
++ /* Op1 is infinity, check op2*/
++ cp.w r9,lr
++ brlo __dfdiv_return_op1 /* Op2 is a normal number return inf */
++ /* Other combinations: return NaN */
++ mov r11, -1
++ ldm sp++, r2-r7,pc
++
++1:
++ /* Op2 is NaN or Inf */
++ cpc r8
++ /* If inf return zero else return NaN*/
++ mov r10, 0
++ moveq r11, 0
++ movne r11, -1
++ ldm sp++, r2-r7,pc
++
++2:
++ /* Op2 is zero */
++ or r6,r11,r10 /* 0.0/0.0 yields NaN */
++ mov r10, 0
++ moveq r11, -1 /* Return NaN */
++ movne r11, lr /* Return inf */
++ rjmp __dfdiv_return_op1
++
++#endif
++
++
++#ifdef L_avr32_f32_div
++ .global __avr32_f32_div
++ .type __avr32_f32_div,@function
++__avr32_f32_div:
++ eor r8, r11, r12 /* MSB(r8) = Sign(op1) ^ Sign(op2) */
++ /* Unpack */
++ lsl r12,1
++ reteq 0 /* Return zero if op1 is zero */
++ lddpc r9, .Linf_sf
++ lsl r11,1
++
++ /* Check op1 for NaN or Inf */
++ cp r12,r9
++ brhs 2f
++
++ /* Check op2 for NaN or Inf */
++ cp r11,r9
++ brhs 3f
++ /* Check op2 for zero */
++ tst r11,r11
++ breq 4f
++
++ /* If op1 is zero return zero */
++ tst r12, r12
++ reteq 0
++
++ /* Unpack op1*/
++ unpack_sf r9 /*exp*/, r12 /*sf*/
++
++ /* Unpack op2*/
++ unpack_sf r10 /*exp*/, r11 /*sf*/
++
++ /* Calculate new exponent */
++ stm --sp,r7,lr
++ sub r9, r10
++ sub r9,-127
++
++ /* Divide */
++ mov r7,26
++
++ lsr r12,1 /* Make room for one more bit in mantissas */
++ lsr r11,1
++
++0:
++ sub r10,r12,r11
++ movcc r12, r10 /* update dividend if divisor smaller */
++ rol lr /* shift result into lr */
++ eorl lr,1 /* flip bit. */
++ lsl r12,1 /* Shift dividend */
++ sub r7,1
++ brne 0b
++
++ /* round and scale*/
++ neg r12 /* c = 1 iff r12 != 0 */
++ rol lr
++ lsl r10,lr,(32-27) /* Adjust mantissa */
++ ldm sp++, r7, lr
++
++
++ normalize_sf r9 /*exp*/, r10 /*mant*/, r11 /*scratch*/
++
++ /* Check for subnormal result */
++ cp.w r9, 0
++ brgt 0f
++
++ /* Adjust a subnormal result */
++ adjust_subnormal_sf r12 /*sf*/, r9 /*exp*/, r10 /*mant*/, r8 /*sign*/,r11 /*scratch*/
++ ret r12
++0:
++ round_sf r9 /*exp*/, r10 /*mant*/, r11 /*scratch*/
++ pack_sf r12 /*sf*/, r9 /*exp*/, r10 /*mant*/
++__divsf_return_op1:
++ lsl r8, 1
++ ror r12
++ ret r12
++
++2:
++ /* Op1 is NaN or inf */
++ retne -1 /* Return NaN if op1 is NaN */
++ /* Op1 is inf check op2 */
++ cp r11, r9
++ brlo __divsf_return_op1 /* inf/number gives inf */
++ ret -1 /* The rest gives NaN*/
++3:
++ /* Op1 is NaN or inf */
++ reteq 0 /* Return zero if number/inf*/
++ ret -1 /* Return NaN*/
++4:
++ /* Op2 is zero ? */
++ tst r12,r12
++ reteq -1 /* 0.0/0.0 is NaN */
++ lddpc r12, .Linf_sf
++ rjmp __divsf_return_op1
++
++#endif
++
++#ifdef L_avr32_f32_mul
++ .global __avr32_f32_mul
++ .type __avr32_f32_mul,@function
++__avr32_f32_mul:
++ eor r8, r11, r12 /* MSB(r8) = Sign(op1) ^ Sign(op2) */
++ lsl r12,1 /* unpack op1 */
++ lsl r11,1 /* unpack op2 */
++
++ /* arrange operands so that that op1 >= op2 */
++ sub r9,r12,r11
++ brcc 0f
++
++ sub r12,r9 /* swap operands if op2 was larger */
++ add r11,r9
++
++0:
++ lddpc r9,.Linf_sf
++ cp r12,r9
++ brhs 2f
++
++ /* Check op2 for zero */
++ tst r11,r11
++ reteq 0 /* Return zero */
++
++ /* Unpack op1 */
++ unpack_sf r9 /*exp*/, r12 /*sf*/
++ /* Unpack op2 */
++ unpack_sf r10 /*exp*/, r11 /*sf*/
++
++ /* Calculate new exponent */
++ add r9,r10
++
++ /* Do the multiplication */
++ mulu.d r10,r12,r11
++
++ sub r9,(127-1) /* remove extra exponent bias */
++
++ /* Check if we have any bits in r10 which
++ means a rounding bit should be inserted in LSB of result */
++ tst r10,r10
++ srne r10
++ or r12,r11,r10
++
++ /* Normalize */
++ normalize_sf r9 /*exp*/, r12 /*mant*/, r11 /*scratch*/
++
++ /* Check for subnormal result */
++ cp.w r9, 0
++ brgt 0f
++
++ /* Adjust a subnormal result */
++ adjust_subnormal_sf r12/*sf*/, r9 /*exp*/, r12 /*mant*/, r8 /*sign*/, r11 /*scratch */
++ ret r12
++0:
++ round_sf r9 /*exp*/, r12 /*mant*/, r11 /*scratch*/
++ cp.w r9, 0xff
++ brlo 1f
++ lddpc r12,.Linf_sf
++ rjmp __mulsf_return_op1
++1:
++ pack_sf r12 /*sf*/, r9 /*exp*/, r12 /*mant*/
++__mulsf_return_op1:
++ lsl r8, 1
++ ror r12
++ ret r12
++
++2:
++ /* Op1 is inf or NaN */
++ retne -1 /* Op1 is NaN return NaN */
++
++ /* Op1 is inf and op2 is smaller so it is either infinity
++ or a subnormal number */
++ cp r11,0
++ brne __mulsf_return_op1 /* op2 is not zero. return op1.*/
++ ret -1 /* inf * 0 return NaN */
++#endif
++
++
++#ifdef L_avr32_s32_to_f32
++ .global __avr32_s32_to_f32
++ .type __avr32_s32_to_f32,@function
++__avr32_s32_to_f32:
++ cp r12, 0
++ reteq r12 /* If zero then return zero float */
++ mov r11, r12 /* Keep the sign */
++ abs r12 /* Compute the absolute value */
++ mov r10, 31 + 127 /* Set the correct exponent */
++
++ /* Normalize */
++ normalize_sf r10 /*exp*/, r12 /*mant*/, r9 /*scratch*/
++
++ /* Check for subnormal result */
++ cp.w r10, 0
++ brgt 0f
++
++ /* Adjust a subnormal result */
++ adjust_subnormal_sf r12/*sf*/, r10 /*exp*/, r12 /*mant*/, r11/*sign*/, r9 /*scratch*/
++ ret r12
++0:
++ round_sf r10 /*exp*/, r12 /*mant*/, r9 /*scratch*/
++ pack_sf r12 /*sf*/, r10 /*exp*/, r12 /*mant*/
++__floatsisf_return_op1:
++ lsl r11, 1
++ ror r12
++ ret r12
++#endif
++
++#ifdef L_avr32_u32_to_f32
++ .global __avr32_u32_to_f32
++ .type __avr32_u32_to_f32,@function
++__avr32_u32_to_f32:
++ cp r12, 0
++ reteq r12 /* If zero then return zero float */
++ mov r10, 31 + 127 /* Set the correct exponent */
++
++ /* Normalize */
++ normalize_sf r10 /*exp*/, r12 /*mant*/, r9 /*scratch*/
++
++ /* Check for subnormal result */
++ cp.w r10, 0
++ brgt 0f
++
++ /* Adjust a subnormal result */
++ mov r8, 0
++ adjust_subnormal_sf r12/*sf*/,r10 /*exp*/, r12 /*mant*/,r8/*sign*/, r9 /*scratch*/
++ ret r12
++0:
++ round_sf r10 /*exp*/, r12 /*mant*/, r9 /*scratch*/
++ pack_sf r12 /*sf*/, r10 /*exp*/, r12 /*mant*/
++__floatunsisf_return_op1:
++ lsr r12,1 /* Sign bit is 0 for unsigned int */
++ ret r12
++#endif
++
++
++#ifdef L_avr32_f32_to_s32
++ .global __avr32_f32_to_s32
++ .type __avr32_f32_to_s32,@function
++__avr32_f32_to_s32:
++ lsr r11,r12,23 /* Extract exponent */
++ castu.b r11
++ sub r11,127 /* Fix bias */
++ retlo 0 /* Negative exponent yields zero integer */
++
++#ifdef __IEEE_LARGE_FLOATS__
++ cp r11,31
++ brcc 0f
++#endif
++ /* Shift mantissa into correct position */
++ rsub r11,r11,31 /* Shift amount */
++ lsl r10,r12,8 /* Get mantissa */
++ sbr r10,31 /* Add implicit bit */
++ lsr r10,r10,r11 /* Perform shift */
++ lsl r12,1 /* Check sign */
++ retcc r10 /* if positive, we are done */
++ neg r10 /* if negative float, negate result */
++ ret r10
++
++#ifdef __IEEE_LARGE_FLOATS__
++0:
++ mov r11,-1
++ lsr r11,1
++ lsl r12,1
++ acr r11
++
++ ret r11
++#endif
++#endif
++
++#ifdef L_avr32_f32_to_u32
++ .global __avr32_f32_to_u32
++ .type __avr32_f32_to_u32,@function
++__avr32_f32_to_u32:
++ cp r12,0
++ retmi 0 /* Negative numbers gives 0 */
++ bfextu r11, r12, 23, 8 /* Extract exponent */
++ sub r11,127 /* Fix bias */
++ retlo 0 /* Negative exponent yields zero integer */
++
++#ifdef __IEEE_LARGE_FLOATS__
++ cp r11,32
++ brcc 0f
++#endif
++ /* Shift mantissa into correct position */
++ rsub r11,r11,31 /* Shift amount */
++ lsl r12,8 /* Get mantissa */
++ sbr r12,31 /* Add implicit bit */
++ lsr r12,r12,r11 /* Perform shift */
++ ret r12
++
++#ifdef __IEEE_LARGE_FLOATS__
++0:
++ mov r11,-1
++ lsr r11,1
++ lsl r12,1
++ acr r11
++
++ ret r11
++#endif
++#endif
++
++#ifdef L_avr32_f32_to_f64
++ .global __avr32_f32_to_f64
++ .type __avr32_f32_to_f64,@function
++
++__avr32_f32_to_f64:
++ lsl r11,r12,1 /* Remove sign bit, keep original value in r12*/
++ moveq r10, 0
++ reteq r11 /* Return zero if input is zero */
++
++ bfextu r9,r11,24,8 /* Get exponent */
++ cp.w r9,0xff /* check for NaN or inf */
++ breq 0f
++
++ lsl r11,7 /* Convert sf mantissa to df format */
++ mov r10,0
++
++ /* Check if implicit bit should be set */
++ cp.w r9, 0
++ subeq r9,-1 /* Adjust exponent if it was 0 */
++ srne r8
++ or r11, r11, r8 << 31 /* Set implicit bit if needed */
++ sub r9,(127-0x3ff) /* Convert exponent to df format exponent */
++
++ pushm lr
++ normalize_df r9 /*exp*/, r10, r11 /*mantissa*/, r8, lr /*scratch*/
++ popm lr
++ pack_df r9 /*exp*/, r10, r11 /*mantissa*/, r10, r11 /*df*/
++
++__extendsfdf_return_op1:
++ /* Rotate in sign bit */
++ lsl r12, 1
++ ror r11
++ ret r11
++
++0:
++ /* Inf or NaN*/
++ lddpc r10, .Linf
++ lsl r11,8 /* check mantissa */
++ movne r11, -1 /* Return NaN */
++ moveq r11, r10 /* Return inf */
++ rjmp __extendsfdf_return_op1
++#endif
++
++
++#ifdef L_avr32_f64_to_f32
++ .global __avr32_f64_to_f32
++ .type __avr32_f64_to_f32,@function
++
++__avr32_f64_to_f32:
++ /* Unpack */
++ lsl r9,r11,1 /* Unpack exponent */
++ lsr r9,21
++
++ reteq 0 /* If exponent is 0 the number is so small
++ that the conversion to single float gives
++ zero */
++
++ lsl r8,r11,10 /* Adjust mantissa */
++ or r12,r8,r10>>22
++
++ lsl r10,10 /* Check if there are any remaining bits
++ in the low part of the mantissa.*/
++ neg r10
++ rol r12 /* If there were remaining bits then set lsb
++ of mantissa to 1 */
++
++ cp r9,0x7ff
++ breq 2f /* Check for NaN or inf */
++
++ sub r9,(0x3ff-127) /* Adjust bias of exponent */
++ sbr r12,31 /* set the implicit bit.*/
++
++ cp.w r9, 0 /* Check for subnormal number */
++ brgt 0f
++
++ /* Adjust a subnormal result */
++ adjust_subnormal_sf r12/*sf*/,r9 /*exp*/, r12 /*mant*/, r11/*sign*/, r10 /*scratch*/
++ ret r12
++0:
++ round_sf r9 /*exp*/, r12 /*mant*/, r10 /*scratch*/
++ pack_sf r12 /*sf*/, r9 /*exp*/, r12 /*mant*/
++__truncdfsf_return_op1:
++ /* Rotate in sign bit */
++ lsl r11, 1
++ ror r12
++ ret r12
++
++
++2:
++ /* NaN or inf */
++ cbr r12,31 /* clear implicit bit */
++ retne -1 /* Return NaN if mantissa not zero */
++ lddpc r12,.Linf_sf
++ ret r12 /* Return inf */
++#endif
++
++
++ .align 2
++.Linf:
++ .long 0xffe00000
++
++ .align 2
++.Linf_sf:
++ .long 0xff000000
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/lib2funcs.S gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/lib2funcs.S
+--- gcc-4.0.2/gcc/config/avr32/lib2funcs.S 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/lib2funcs.S 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,21 @@
++ .align 4
++ .global __nonlocal_goto
++ .type __nonlocal_goto,@function
++
++/* __nonlocal_goto: This function handles nonlocal_goto's in gcc.
++
++ parameter 0 (r12) = New Frame Pointer
++ parameter 1 (r11) = Address to goto
++ parameter 2 (r10) = New Stack Pointer
++
++ This function invalidates the return stack, since it returns from a
++ function without using a return instruction.
++*/
++__nonlocal_goto:
++ mov r7, r12
++ mov sp, r10
++ frs # Flush return stack
++ mov pc, r11
++
++
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/linux-elf.h gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/linux-elf.h
+--- gcc-4.0.2/gcc/config/avr32/linux-elf.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/linux-elf.h 2006-11-10 15:14:06.000000000 +0100
+@@ -0,0 +1,154 @@
++/*
++ Linux/Elf specific definitions.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++ and Håvard Skinnemoen, Atmel Norway, <hskinnemoen@atmel.com>
++
++ This file is part of GCC.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++
++
++/* elfos.h should have already been included. Now just override
++ any conflicting definitions and add any extras. */
++
++/* Run-time Target Specification. */
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (AVR32 GNU/Linux with ELF)", stderr);
++
++/* Do not assume anything about header files. */
++#define NO_IMPLICIT_EXTERN_C
++
++/* The GNU C++ standard library requires that these macros be defined. */
++#undef CPLUSPLUS_CPP_SPEC
++#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)"
++
++/* Now we define the strings used to build the spec file. */
++#undef LIB_SPEC
++#define LIB_SPEC \
++ "%{pthread:-lpthread} \
++ %{shared:-lc} \
++ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
++
++/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
++ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
++ provides part of the support for getting C++ file-scope static
++ object constructed before entering `main'. */
++
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC \
++ "%{!shared: \
++ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
++ %{!p:%{profile:gcrt1.o%s} \
++ %{!profile:crt1.o%s}}}} \
++ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
++
++/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on
++ the GNU/Linux magical crtend.o file (see crtstuff.c) which
++ provides part of the support for getting C++ file-scope static
++ object constructed before entering `main', followed by a normal
++ GNU/Linux "finalizer" file, `crtn.o'. */
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC \
++ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
++
++#undef ASM_SPEC
++#define ASM_SPEC "%{!mno-pic:--pic} %{mrelax|O*:%{mno-relax|O0|O1: ;:--linkrelax}} %{mcpu=*:-mcpu=%*}"
++
++#undef LINK_SPEC
++#define LINK_SPEC "%{version:-v} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
++ %{mrelax|O*:%{mno-relax|O0|O1: ;:--relax}}"
++
++#define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
++
++/* This is how we tell the assembler that two symbols have the same value. */
++#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
++ do \
++ { \
++ assemble_name (FILE, NAME1); \
++ fputs (" = ", FILE); \
++ assemble_name (FILE, NAME2); \
++ fputc ('\n', FILE); \
++ } \
++ while (0)
++
++
++
++#undef CC1_SPEC
++#define CC1_SPEC "%{profile:-p}"
++
++/* Target CPU builtins. */
++#define TARGET_CPU_CPP_BUILTINS() \
++ do \
++ { \
++ builtin_define ("__avr32__"); \
++ builtin_define ("__AVR32__"); \
++ builtin_define ("__AVR32_LINUX__"); \
++ builtin_define (avr32_part->macro); \
++ builtin_define (avr32_arch->macro); \
++ if (avr32_arch->uarch_type == UARCH_TYPE_AVR32A) \
++ builtin_define ("__AVR32_AVR32A__"); \
++ else \
++ builtin_define ("__AVR32_AVR32B__"); \
++ if (TARGET_UNALIGNED_WORD) \
++ builtin_define ("__AVR32_HAS_UNALIGNED_WORD__"); \
++ if (TARGET_SIMD) \
++ builtin_define ("__AVR32_HAS_SIMD__"); \
++ if (TARGET_DSP) \
++ builtin_define ("__AVR32_HAS_DSP__"); \
++ if (TARGET_RMW) \
++ builtin_define ("__AVR32_HAS_RMW__"); \
++ if (TARGET_BRANCH_PRED) \
++ builtin_define ("__AVR32_HAS_BRANCH_PRED__"); \
++ if (flag_pic) \
++ { \
++ builtin_define ("__PIC__"); \
++ builtin_define ("__pic__"); \
++ } \
++ } \
++ while (0)
++
++
++
++/* Call the function profiler with a given profile label. */
++#undef FUNCTION_PROFILER
++#define FUNCTION_PROFILER(STREAM, LABELNO) \
++ do \
++ { \
++ fprintf (STREAM, "\tmov\tlr, lo(mcount)\n\torh\tlr, hi(mcount)\n"); \
++ fprintf (STREAM, "\ticall lr\n"); \
++ } \
++ while (0)
++
++#define NO_PROFILE_COUNTERS 1
++
++/* For dynamic libraries to work */
++/* #define PLT_REG_CALL_CLOBBERED 1 */
++#define AVR32_ALWAYS_PIC 1
++
++/* uclibc does not implement sinf, cosf etc. */
++#undef TARGET_C99_FUNCTIONS
++#define TARGET_C99_FUNCTIONS 0
++
++#define LINK_GCC_C_SEQUENCE_SPEC \
++ "%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}"
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/predicates.md gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/predicates.md
+--- gcc-4.0.2/gcc/config/avr32/predicates.md 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/predicates.md 2006-11-09 15:01:19.000000000 +0100
+@@ -0,0 +1,303 @@
++;; AVR32 predicates file.
++;; Copyright 2003-2006 Atmel Corporation.
++;;
++;; Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++;;
++;; This file is part of GCC.
++;;
++;; This program is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2 of the License, or
++;; (at your option) any later version.
++;;
++;; This program is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with this program; if not, write to the Free Software
++;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++
++;; True if the operand is a memory reference which contains an
++;; Address consisting of a single pointer register
++(define_predicate "avr32_indirect_register_operand"
++ (and (match_code "mem")
++ (match_test "register_operand(XEXP(op, 0), SImode)")))
++
++
++
++;; Address expression with a base pointer offset with
++;; a register displacement
++(define_predicate "avr32_indexed_memory_operand"
++ (and (match_code "mem")
++ (match_test "GET_CODE(XEXP(op, 0)) == PLUS"))
++ {
++
++ rtx op0 = XEXP(XEXP(op, 0), 0);
++ rtx op1 = XEXP(XEXP(op, 0), 1);
++
++ return ((avr32_address_register_rtx_p (op0, 0)
++ && avr32_legitimate_index_p (GET_MODE(op), op1, 0))
++ || (avr32_address_register_rtx_p (op1, 0)
++ && avr32_legitimate_index_p (GET_MODE(op), op0, 0)));
++
++ })
++
++;; Operand suitable for the ld.sb instruction
++(define_predicate "load_sb_memory_operand"
++ (ior (match_operand 0 "avr32_indirect_register_operand")
++ (match_operand 0 "avr32_indexed_memory_operand")))
++
++
++;; Operand suitable as operand to insns sign extending QI values
++(define_predicate "extendqi_operand"
++ (ior (match_operand 0 "load_sb_memory_operand")
++ (match_operand 0 "register_operand")))
++
++(define_predicate "post_inc_memory_operand"
++ (and (match_code "mem")
++ (match_test "(GET_CODE(XEXP(op, 0)) == POST_INC)
++ && REG_P(XEXP(XEXP(op, 0), 0))")))
++
++;; Operand suitable for loading TImode values
++(define_predicate "loadti_operand"
++ (ior (ior (match_operand 0 "register_operand")
++ (match_operand 0 "avr32_indirect_register_operand"))
++ (match_operand 0 "post_inc_memory_operand")))
++
++;; Operand suitable for add instructions
++(define_predicate "avr32_add_operand"
++ (ior (match_operand 0 "register_operand")
++ (and (match_operand 0 "immediate_operand")
++ (match_test "CONST_OK_FOR_CONSTRAINT_P(INTVAL(op), 'I', \"Is21\")"))))
++
++;; Operand is a power of two immediate
++(define_predicate "power_of_two_operand"
++ (match_code "const_int")
++{
++ HOST_WIDE_INT value = INTVAL (op);
++
++ return value != 0 && (value & (value - 1)) == 0;
++})
++
++;; Operand is a multiple of 8 immediate
++(define_predicate "multiple_of_8_operand"
++ (match_code "const_int")
++{
++ HOST_WIDE_INT value = INTVAL (op);
++
++ return (value & 0x7) == 0 ;
++})
++
++;; Operand is a multiple of 16 immediate
++(define_predicate "multiple_of_16_operand"
++ (match_code "const_int")
++{
++ HOST_WIDE_INT value = INTVAL (op);
++
++ return (value & 0xf) == 0 ;
++})
++
++;; Operand is a mask used for masking away upper bits of a reg
++(define_predicate "avr32_mask_upper_bits_operand"
++ (match_code "const_int")
++{
++ HOST_WIDE_INT value = INTVAL (op) + 1;
++
++ return value != 1 && value != 0 && (value & (value - 1)) == 0;
++})
++
++
++;; Operand suitable for mul instructions
++(define_predicate "avr32_mul_operand"
++ (ior (match_operand 0 "register_operand")
++ (and (match_operand 0 "immediate_operand")
++ (match_test "CONST_OK_FOR_CONSTRAINT_P(INTVAL(op), 'K', \"Ks08\")"))))
++
++;; True for logical binary operators.
++(define_predicate "logical_binary_operator"
++ (match_code "ior,xor,and"))
++
++;; True for logical shift operators
++(define_predicate "logical_shift_operator"
++ (match_code "ashift,lshiftrt"))
++
++;; True for shift operand for logical and, or and eor insns
++(define_predicate "avr32_logical_shift_operand"
++ (and (match_code "ashift,lshiftrt")
++ (ior (and (match_test "GET_CODE(XEXP(op, 1)) == CONST_INT")
++ (match_test "register_operand(XEXP(op, 0), GET_MODE(XEXP(op, 0)))"))
++ (and (match_test "GET_CODE(XEXP(op, 0)) == CONST_INT")
++ (match_test "register_operand(XEXP(op, 1), GET_MODE(XEXP(op, 1)))"))))
++ {
++ return 1;
++ }
++ )
++
++
++;; Predicate for second operand to and, ior and xor insn patterns
++(define_predicate "avr32_logical_insn_operand"
++ (ior (match_operand 0 "register_operand")
++ (match_operand 0 "avr32_logical_shift_operand"))
++ {
++ return 1;
++ }
++)
++
++
++;; True for avr32 comparison operators
++(define_predicate "avr32_comparison_operator"
++ (ior (match_code "eq, ne, gt, ge, lt, le, gtu, geu, ltu, leu")
++ (and (match_code "unspec")
++ (match_test "(XINT(op, 1) == UNSPEC_COND_MI)
++ || (XINT(op, 1) == UNSPEC_COND_PL)"))))
++
++;; True if this is a const_int with one bit set
++(define_predicate "one_bit_set_operand"
++ (match_code "const_int")
++ {
++ int i;
++ int value;
++ int ones = 0;
++
++ value = INTVAL(op);
++ for ( i = 0 ; i < 32; i++ ){
++ if ( value & ( 1 << i ) ){
++ ones++;
++ }
++ }
++
++ return ( ones == 1 );
++ })
++
++
++;; True if this is a const_int with one bit cleared
++(define_predicate "one_bit_cleared_operand"
++ (match_code "const_int")
++ {
++ int i;
++ int value;
++ int zeroes = 0;
++
++ value = INTVAL(op);
++ for ( i = 0 ; i < 32; i++ ){
++ if ( !(value & ( 1 << i )) ){
++ zeroes++;
++ }
++ }
++
++ return ( zeroes == 1 );
++ })
++
++
++;; True if this is a register or immediate operand
++(define_predicate "register_immediate_operand"
++ (ior (match_operand 0 "register_operand")
++ (match_operand 0 "immediate_operand")))
++
++
++;; True is this is an operand containing a label_ref
++(define_predicate "avr32_label_ref_operand"
++ (and (match_code "mem")
++ (match_test "avr32_find_symbol(op)
++ && (GET_CODE(avr32_find_symbol(op)) == LABEL_REF)")))
++
++;; True is this is a valid symbol pointing to the constant pool
++(define_predicate "avr32_const_pool_operand"
++ (and (match_code "symbol_ref")
++ (match_test "CONSTANT_POOL_ADDRESS_P(op)"))
++ {
++ return (flag_pic ? (!(symbol_mentioned_p (get_pool_constant (op))
++ || label_mentioned_p (get_pool_constant (op)))
++ || avr32_got_mentioned_p(get_pool_constant (op)))
++ : true);
++ }
++)
++
++;; True is this is a memory reference to the constant or mini pool
++(define_predicate "avr32_const_pool_ref_operand"
++ (ior (match_operand 0 "avr32_label_ref_operand")
++ (and (match_code "mem")
++ (match_test "avr32_const_pool_operand(XEXP(op,0), GET_MODE(XEXP(op,0)))"))))
++
++
++
++;; True is this is a k12 offseted memory operand
++(define_predicate "avr32_k12_memory_operand"
++ (and (match_code "mem")
++ (ior (match_test "REG_P(XEXP(op, 0))")
++ (match_test "GET_CODE(XEXP(op, 0)) == PLUS
++ && REG_P(XEXP(XEXP(op, 0), 0))
++ && (GET_CODE(XEXP(XEXP(op, 0), 1)) == CONST_INT)
++ && (CONST_OK_FOR_CONSTRAINT_P(INTVAL(XEXP(XEXP(op, 0), 0)),
++ 'K', (mode == SImode) ? \"Ks14\" : ((mode == HImode) ? \"Ks13\" : \"Ks12\")))"))))
++
++;; True is this is a memory operand with an immediate displacement
++(define_predicate "avr32_imm_disp_memory_operand"
++ (and (match_code "mem")
++ (match_test "GET_CODE(XEXP(op, 0)) == PLUS
++ && REG_P(XEXP(XEXP(op, 0), 0))
++ && (GET_CODE(XEXP(XEXP(op, 0), 1)) == CONST_INT)")))
++
++;; True is this is a bswap operand
++(define_predicate "avr32_bswap_operand"
++ (ior (match_operand 0 "avr32_k12_memory_operand")
++ (match_operand 0 "register_operand")))
++
++;; True is this is a valid coprocessor insn memory operand
++(define_predicate "avr32_cop_memory_operand"
++ (and (match_operand 0 "memory_operand")
++ (not (match_test "GET_CODE(XEXP(op, 0)) == PLUS
++ && REG_P(XEXP(XEXP(op, 0), 0))
++ && (GET_CODE(XEXP(XEXP(op, 0), 1)) == CONST_INT)
++ && !(CONST_OK_FOR_CONSTRAINT_P(INTVAL(XEXP(XEXP(op, 0), 0)), 'K', \"Ku10\"))"))))
++
++;; True is this is a valid source/destination operand
++;; for moving values to/from a coprocessor
++(define_predicate "avr32_cop_move_operand"
++ (ior (match_operand 0 "register_operand")
++ (match_operand 0 "avr32_cop_memory_operand")))
++
++
++;; True is this is a valid extract byte offset for use in
++;; load extracted index insns
++(define_predicate "avr32_extract_shift_operand"
++ (and (match_operand 0 "const_int_operand")
++ (match_test "(INTVAL(op) == 0) || (INTVAL(op) == 8)
++ || (INTVAL(op) == 16) || (INTVAL(op) == 24)")))
++
++;; True is this is a floating-point register
++(define_predicate "avr32_fp_register_operand"
++ (and (match_operand 0 "register_operand")
++ (match_test "REGNO_REG_CLASS(REGNO(op)) == FP_REGS")))
++
++;; True is this is valid avr32 symbol operand
++(define_predicate "avr32_symbol_operand"
++ (ior (match_code "label_ref, symbol_ref")
++ (and (match_code "const")
++ (match_test "avr32_find_symbol(op)"))))
++
++;; True is this is valid operand for the lda.w and call pseudo insns
++(define_predicate "avr32_address_operand"
++ (and (match_code "label_ref, symbol_ref")
++ (ior (match_test "TARGET_HAS_ASM_ADDR_PSEUDOS")
++ (match_test "flag_pic")) ))
++
++;; True if this is a avr32 call operand
++(define_predicate "avr32_call_operand"
++ (ior (ior (match_operand 0 "register_operand")
++ (ior (match_operand 0 "avr32_const_pool_ref_operand")
++ (match_operand 0 "avr32_address_operand")))
++ (match_test "SYMBOL_REF_RCALL_FUNCTION_P(op)")))
++
++;; Return true for operators performing ALU operations
++
++(define_predicate "alu_operator"
++ (match_code "ior, xor, and, plus, minus, ashift, lshiftrt, ashiftrt"))
++
++(define_predicate "avr32_add_shift_immediate_operand"
++ (and (match_operand 0 "immediate_operand")
++ (match_test "CONST_OK_FOR_CONSTRAINT_P(INTVAL(op), 'K', \"Ku02\")")))
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/simd.md gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/simd.md
+--- gcc-4.0.2/gcc/config/avr32/simd.md 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/simd.md 2006-10-10 12:36:34.000000000 +0200
+@@ -0,0 +1,145 @@
++;; AVR32 machine description file for SIMD instructions.
++;; Copyright 2003-2006 Atmel Corporation.
++;;
++;; Written by Ronny Pedersen, Atmel Norway, <rpedersen@atmel.com>
++;;
++;; This file is part of GCC.
++;;
++;; This program is free software; you can redistribute it and/or modify
++;; it under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 2 of the License, or
++;; (at your option) any later version.
++;;
++;; This program is distributed in the hope that it will be useful,
++;; but WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++;; GNU General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with this program; if not, write to the Free Software
++;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++;; -*- Mode: Scheme -*-
++
++
++;; Vector modes
++(define_mode_macro VECM [V2HI V4QI])
++(define_mode_attr size [(V2HI "h") (V4QI "b")])
++
++(define_insn "add<mode>3"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (plus:VECM (match_operand:VECM 1 "register_operand" "r")
++ (match_operand:VECM 2 "register_operand" "r")))]
++ "TARGET_SIMD"
++ "padd.<size>\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++
++(define_insn "sub<mode>3"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (minus:VECM (match_operand:VECM 1 "register_operand" "r")
++ (match_operand:VECM 2 "register_operand" "r")))]
++ "TARGET_SIMD"
++ "psub.<size>\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++
++(define_insn "abs<mode>2"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (abs:VECM (match_operand:VECM 1 "register_operand" "r")))]
++ "TARGET_SIMD"
++ "pabs.s<size>\t%0, %1"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "ashl<mode>3"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (ashift:VECM (match_operand:VECM 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "Ku04")))]
++ "TARGET_SIMD"
++ "plsl.<size>\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "ashr<mode>3"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (ashiftrt:VECM (match_operand:VECM 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "Ku04")))]
++ "TARGET_SIMD"
++ "pasr.<size>\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "lshr<mode>3"
++ [(set (match_operand:VECM 0 "register_operand" "=r")
++ (lshiftrt:VECM (match_operand:VECM 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "Ku04")))]
++ "TARGET_SIMD"
++ "plsr.<size>\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "smaxv2hi3"
++ [(set (match_operand:V2HI 0 "register_operand" "=r")
++ (smax:V2HI (match_operand:V2HI 1 "register_operand" "r")
++ (match_operand:V2HI 2 "register_operand" "r")))]
++
++ "TARGET_SIMD"
++ "pmax.sh\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "sminv2hi3"
++ [(set (match_operand:V2HI 0 "register_operand" "=r")
++ (smin:V2HI (match_operand:V2HI 1 "register_operand" "r")
++ (match_operand:V2HI 2 "register_operand" "r")))]
++
++ "TARGET_SIMD"
++ "pmin.sh\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "umaxv4qi3"
++ [(set (match_operand:V4QI 0 "register_operand" "=r")
++ (umax:V4QI (match_operand:V4QI 1 "register_operand" "r")
++ (match_operand:V4QI 2 "register_operand" "r")))]
++
++ "TARGET_SIMD"
++ "pmax.ub\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "uminv4qi3"
++ [(set (match_operand:V4QI 0 "register_operand" "=r")
++ (umin:V4QI (match_operand:V4QI 1 "register_operand" "r")
++ (match_operand:V4QI 2 "register_operand" "r")))]
++
++ "TARGET_SIMD"
++ "pmin.ub\t%0, %1, %2"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++
++(define_insn "addsubv2hi"
++ [(set (match_operand:V2HI 0 "register_operand" "=r")
++ (vec_concat:V2HI
++ (plus:HI (match_operand:HI 1 "register_operand" "r")
++ (match_operand:HI 2 "register_operand" "r"))
++ (minus:HI (match_dup 1) (match_dup 2))))]
++ "TARGET_SIMD"
++ "paddsub.h\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
++
++(define_insn "subaddv2hi"
++ [(set (match_operand:V2HI 0 "register_operand" "=r")
++ (vec_concat:V2HI
++ (minus:HI (match_operand:HI 1 "register_operand" "r")
++ (match_operand:HI 2 "register_operand" "r"))
++ (plus:HI (match_dup 1) (match_dup 2))))]
++ "TARGET_SIMD"
++ "psubadd.h\t%0, %1:b, %2:b"
++ [(set_attr "length" "4")
++ (set_attr "type" "alu")])
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/t-avr32 gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/t-avr32
+--- gcc-4.0.2/gcc/config/avr32/t-avr32 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/t-avr32 2006-11-24 17:10:48.000000000 +0100
+@@ -0,0 +1,63 @@
++
++MD_INCLUDES= $(srcdir)/config/avr32/avr32.md \
++ $(srcdir)/config/avr32/fpcp.md \
++ $(srcdir)/config/avr32/simd.md \
++ $(srcdir)/config/avr32/predicates.md
++
++s-config s-conditions s-flags s-codes s-constants s-emit s-recog s-preds \
++ s-opinit s-extract s-peep s-attr s-attrtab s-output: $(MD_INCLUDES)
++
++# We want fine grained libraries, so use the new code
++# to build the floating point emulation libraries.
++FPBIT = fp-bit.c
++DPBIT = dp-bit.c
++
++LIB1ASMSRC = avr32/lib1funcs.S
++LIB1ASMFUNCS = _avr32_f64_mul _avr32_f64_addsub _avr32_f64_to_u32 _avr32_f64_to_s32 \
++ _avr32_f64_to_u64 _avr32_f64_to_s64 _avr32_u32_to_f64 _avr32_s32_to_f64 \
++ _avr32_f64_cmp_eq _avr32_f64_cmp_ge _avr32_f64_cmp_lt \
++ _avr32_f32_cmp_eq _avr32_f32_cmp_ge _avr32_f32_cmp_lt \
++ _avr32_f64_div _avr32_f32_div\
++ _avr32_f32_mul _avr32_s32_to_f32 _avr32_u32_to_f32 _avr32_f32_to_s32 \
++ _avr32_f32_to_u32 _avr32_f32_to_f64 _avr32_f64_to_f32
++
++LIB2FUNCS_EXTRA += $(srcdir)/config/avr32/lib2funcs.S
++
++MULTILIB_OPTIONS = march=ap/march=uc
++MULTILIB_DIRNAMES = ap uc
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = march?ap=mcpu?ap7000
++MULTILIB_MATCHES += march?ap=mcpu?ap7010
++MULTILIB_MATCHES += march?ap=mcpu?ap7020
++MULTILIB_MATCHES += march?uc=mcpu?uc3a0256
++MULTILIB_MATCHES += march?uc=mcpu?uc3a0512
++MULTILIB_MATCHES += march?uc=mcpu?uc3a1128
++MULTILIB_MATCHES += march?uc=mcpu?uc3a1256
++MULTILIB_MATCHES += march?uc=mcpu?uc3a1512
++MULTILIB_MATCHES += march?ap=mpart?ap7000
++MULTILIB_MATCHES += march?ap=mpart?ap7010
++MULTILIB_MATCHES += march?ap=mpart?ap7020
++MULTILIB_MATCHES += march?uc=mpart?uc3a0256
++MULTILIB_MATCHES += march?uc=mpart?uc3a0512
++MULTILIB_MATCHES += march?uc=mpart?uc3a1128
++MULTILIB_MATCHES += march?uc=mpart?uc3a1256
++MULTILIB_MATCHES += march?uc=mpart?uc3a1512
++
++EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o
++
++CRTSTUFF_T_CFLAGS = -mrelax
++CRTSTUFF_T_CFLAGS_S = -mrelax -fPIC
++TARGET_LIBGCC2_CFLAGS += -mrelax
++
++LIBGCC = stmp-multilib
++INSTALL_LIBGCC = install-multilib
++
++fp-bit.c: $(srcdir)/config/fp-bit.c
++ echo '#define FLOAT' > fp-bit.c
++ cat $(srcdir)/config/fp-bit.c >> fp-bit.c
++
++dp-bit.c: $(srcdir)/config/fp-bit.c
++ cat $(srcdir)/config/fp-bit.c > dp-bit.c
++
++
++
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/t-elf gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/t-elf
+--- gcc-4.0.2/gcc/config/avr32/t-elf 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/t-elf 2006-03-20 13:59:57.000000000 +0100
+@@ -0,0 +1,16 @@
++
++# Assemble startup files.
++$(T)crti.o: $(srcdir)/config/avr32/crti.asm $(GCC_PASSES)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) $(INCLUDES) \
++ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/avr32/crti.asm
++
++$(T)crtn.o: $(srcdir)/config/avr32/crtn.asm $(GCC_PASSES)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) $(INCLUDES) \
++ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/avr32/crtn.asm
++
++
++# Build the libraries for both hard and soft floating point
++EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o
++
++LIBGCC = stmp-multilib
++INSTALL_LIBGCC = install-multilib
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/avr32/uclinux-elf.h gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/uclinux-elf.h
+--- gcc-4.0.2/gcc/config/avr32/uclinux-elf.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/avr32/uclinux-elf.h 2006-01-04 10:57:09.000000000 +0100
+@@ -0,0 +1,20 @@
++
++/* Run-time Target Specification. */
++#undef TARGET_VERSION
++#define TARGET_VERSION fputs (" (AVR32 uClinux with ELF)", stderr)
++
++/* We don't want a .jcr section on uClinux. As if this makes a difference... */
++#define TARGET_USE_JCR_SECTION 0
++
++/* Here we go. Drop the crtbegin/crtend stuff completely. */
++#undef STARTFILE_SPEC
++#define STARTFILE_SPEC \
++ "%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s}" \
++ " %{!p:%{profile:gcrt1.o%s}" \
++ " %{!profile:crt1.o%s}}}} crti.o%s"
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC "crtn.o%s"
++
++#undef TARGET_DEFAULT
++#define TARGET_DEFAULT (AVR32_FLAG_NO_INIT_GOT)
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config/host-linux.c gcc-4.0.2-atmel.0.99.2/gcc/config/host-linux.c
+--- gcc-4.0.2/gcc/config/host-linux.c 2005-08-01 20:00:10.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/config/host-linux.c 2006-03-23 13:33:12.000000000 +0100
+@@ -26,6 +26,9 @@
+ #include "hosthooks.h"
+ #include "hosthooks-def.h"
+
++#ifndef SSIZE_MAX
++#define SSIZE_MAX LONG_MAX
++#endif
+
+ /* Linux has a feature called exec-shield-randomize that perturbs the
+ address of non-fixed mapped segments by a (relatively) small amount.
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/config.gcc gcc-4.0.2-atmel.0.99.2/gcc/config.gcc
+--- gcc-4.0.2/gcc/config.gcc 2005-08-09 12:57:04.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/config.gcc 2006-02-08 17:33:56.000000000 +0100
+@@ -189,9 +189,6 @@ case ${target} in
+ | ip2k-*-elf \
+ | ns32k-*-netbsdelf* \
+ | ns32k-*-netbsd* \
+- | c4x-* \
+- | tic4x-* \
+- | hppa1.1-*-rtems* \
+ )
+ if test "x$enable_obsolete" != xyes; then
+ echo "*** Configuration ${target} is obsolete." >&2
+@@ -251,9 +248,6 @@ arm*-*-*)
+ cpu_type=arm
+ extra_headers="mmintrin.h"
+ ;;
+-bfin*-*)
+- cpu_type=bfin
+- ;;
+ ep9312*-*-*)
+ cpu_type=arm
+ ;;
+@@ -735,6 +729,24 @@ avr-*-*)
+ tm_file="avr/avr.h dbxelf.h"
+ use_fixproto=yes
+ ;;
++avr32*-*-linux*)
++ tm_file="dbxelf.h elfos.h linux.h avr32/linux-elf.h avr32/avr32.h "
++ tmake_file="t-linux avr32/t-avr32 avr32/t-elf"
++ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
++ extra_modes=avr32/avr32-modes.def
++ gnu_ld=yes
++ ;;
++avr32*-*-uclinux*)
++ tm_file="dbxelf.h elfos.h linux.h avr32/linux-elf.h avr32/uclinux-elf.h avr32/avr32.h"
++ tmake_file="t-linux avr32/t-avr32 avr32/t-elf"
++ extra_modes=avr32/avr32-modes.def
++ gnu_ld=yes
++ ;;
++avr32-*-*)
++ tm_file="dbxelf.h elfos.h avr32/avr32.h avr32/avr32-elf.h"
++ tmake_file="avr32/t-avr32 avr32/t-elf"
++ extra_modes=avr32/avr32-modes.def
++ ;;
+ bfin*-elf*)
+ tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h"
+ tmake_file=bfin/t-bfin-elf
+@@ -792,14 +804,10 @@ frv-*-*linux*)
+ linux.h frv/linux.h frv/frv-abi.h"
+ tmake_file="${tmake_file} frv/t-frv frv/t-linux"
+ ;;
+-h8300-*-rtemscoff*)
++h8300-*-rtems*)
+ tmake_file="h8300/t-h8300 t-rtems h8300/t-rtems"
+ tm_file="h8300/h8300.h dbxcoff.h h8300/coff.h h8300/rtems.h rtems.h"
+ ;;
+-h8300-*-rtems*)
+- tmake_file="h8300/t-h8300 h8300/t-elf t-rtems h8300/t-rtems"
+- tm_file="h8300/h8300.h dbxelf.h elfos.h h8300/elf.h h8300/rtems.h rtems.h"
+- ;;
+ h8300-*-elf*)
+ tmake_file="h8300/t-h8300 h8300/t-elf"
+ tm_file="h8300/h8300.h dbxelf.h elfos.h h8300/elf.h"
+@@ -1560,6 +1568,9 @@ pdp11-*-bsd)
+ pdp11-*-*)
+ use_fixproto=yes
+ ;;
++avr-*-*)
++ use_fixproto=yes
++ ;;
+ # port not yet contributed
+ #powerpc-*-openbsd*)
+ # tmake_file="${tmake_file} rs6000/t-fprules "
+@@ -2471,6 +2482,21 @@ case "${target}" in
+ fi
+ ;;
+
++ avr32*-*-*)
++ supported_defaults="cpu"
++
++ case "$with_cpu" in
++ "" \
++ | morgan | ap7000 )
++ # OK
++ ;;
++ *)
++ echo "Unknown arch used in --with-arch=$with_arch" 1>&2
++ exit 1
++ ;;
++ esac
++ ;;
++
+ fr*-*-*linux*)
+ supported_defaults=cpu
+ case "$with_cpu" in
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/cp/decl.c gcc-4.0.2-atmel.0.99.2/gcc/cp/decl.c
+--- gcc-4.0.2/gcc/cp/decl.c 2005-09-09 02:51:56.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/cp/decl.c 2006-10-03 15:32:50.000000000 +0200
+@@ -6128,6 +6128,7 @@ compute_array_index_type (tree name, tre
+ name);
+ else
+ error ("size of array is not an integral constant-expression");
++ size = integer_one_node;
+ }
+ else if (pedantic)
+ {
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/c-typeck.c gcc-4.0.2-atmel.0.99.2/gcc/c-typeck.c
+--- gcc-4.0.2/gcc/c-typeck.c 2005-09-06 22:10:50.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/c-typeck.c 2006-10-03 15:32:50.000000000 +0200
+@@ -2742,8 +2742,13 @@ build_unary_op (enum tree_code code, tre
+ when we have proper support for integer constant expressions. */
+ val = get_base_address (arg);
+ if (val && TREE_CODE (val) == INDIRECT_REF
+- && integer_zerop (TREE_OPERAND (val, 0)))
+- return fold_convert (argtype, fold_offsetof (arg));
++ && TREE_CONSTANT (TREE_OPERAND (val, 0)))
++ {
++ tree op0 = fold_convert (argtype, fold_offsetof (arg)), op1;
++
++ op1 = fold_convert (argtype, TREE_OPERAND (val, 0));
++ return fold (build2 (PLUS_EXPR, argtype, op0, op1));
++ }
+
+ val = build1 (ADDR_EXPR, argtype, arg);
+
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/doc/extend.texi gcc-4.0.2-atmel.0.99.2/gcc/doc/extend.texi
+--- gcc-4.0.2/gcc/doc/extend.texi 2005-07-20 12:36:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/doc/extend.texi 2006-06-19 13:14:00.000000000 +0200
+@@ -1723,13 +1723,6 @@ on data in the eight bit data area. Not
+ You must use GAS and GLD from GNU binutils version 2.7 or later for
+ this attribute to work correctly.
+
+-@item exception_handler
+-@cindex exception handler functions on the Blackfin processor
+-Use this attribute on the Blackfin to indicate that the specified function
+-is an exception handler. The compiler will generate function entry and
+-exit sequences suitable for use in an exception handler when this
+-attribute is present.
+-
+ @item far
+ @cindex functions which handle memory bank switching
+ On 68HC11 and 68HC12 the @code{far} attribute causes the compiler to
+@@ -1873,13 +1866,13 @@ this attribute to work correctly.
+
+ @item interrupt
+ @cindex interrupt handler functions
+-Use this attribute on the ARM, AVR, C4x, M32R/D and Xstormy16 ports to indicate
++Use this attribute on the ARM, AVR, AVR32, C4x, M32R/D and Xstormy16 ports to indicate
+ that the specified function is an interrupt handler. The compiler will
+ generate function entry and exit sequences suitable for use in an
+ interrupt handler when this attribute is present.
+
+-Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H, H8S, and
+-SH processors can be specified via the @code{interrupt_handler} attribute.
++Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and SH processors
++can be specified via the @code{interrupt_handler} attribute.
+
+ Note, on the AVR, interrupts will be enabled inside the function.
+
+@@ -1892,18 +1885,21 @@ void f () __attribute__ ((interrupt ("IR
+
+ Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT and UNDEF@.
+
+-@item interrupt_handler
+-@cindex interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors
+-Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S, and SH to
+-indicate that the specified function is an interrupt handler. The compiler
+-will generate function entry and exit sequences suitable for use in an
+-interrupt handler when this attribute is present.
++Note, for the AVR32, you can specify which banking scheme is used for
++the interrupt mode this interrupt handler is used in like this:
++
++@smallexample
++void f () __attribute__ ((interrupt ("FULL")));
++@end smallexample
+
+-@item kspisusp
+-@cindex User stack pointer in interrupts on the Blackfin
+-When used together with @code{interrupt_handler}, @code{exception_handler}
+-or @code{nmi_handler}, code will be generated to load the stack pointer
+-from the USP register in the function prologue.
++Permissible values for this parameter are: FULL, HALF, NONE and UNDEF.
++
++@item interrupt_handler
++@cindex interrupt handler functions on the m68k, H8/300 and SH processors
++Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to indicate that
++the specified function is an interrupt handler. The compiler will generate
++function entry and exit sequences suitable for use in an interrupt
++handler when this attribute is present.
+
+ @item long_call/short_call
+ @cindex indirect calls on ARM
+@@ -1983,19 +1979,6 @@ use the normal calling convention based
+ This attribute can be used to cancel the effect of the @option{-mlong-calls}
+ option.
+
+-@item nesting
+-@cindex Allow nesting in an interrupt handler on the Blackfin processor.
+-Use this attribute together with @code{interrupt_handler},
+-@code{exception_handler} or @code{nmi_handler} to indicate that the function
+-entry code should enable nested interrupts or exceptions.
+-
+-@item nmi_handler
+-@cindex NMI handler functions on the Blackfin processor
+-Use this attribute on the Blackfin to indicate that the specified function
+-is an NMI handler. The compiler will generate function entry and
+-exit sequences suitable for use in an NMI handler when this
+-attribute is present.
+-
+ @item no_instrument_function
+ @cindex @code{no_instrument_function} function attribute
+ @opindex finstrument-functions
+@@ -2140,8 +2123,8 @@ disabled with the linker or the loader i
+ problem.)
+
+ @item saveall
+-@cindex save all registers on the Blackfin, H8/300, H8/300H, and H8S
+-Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to indicate that
++@cindex save all registers on the H8/300, H8/300H, and H8S
++Use this attribute on the H8/300, H8/300H, and H8S to indicate that
+ all registers except the stack pointer should be saved in the prologue
+ regardless of whether they are used or not.
+
+@@ -3221,7 +3204,7 @@ struct my_unpacked_struct
+ int i;
+ @};
+
+-struct __attribute__ ((__packed__)) my_packed_struct
++struct my_packed_struct __attribute__ ((__packed__))
+ @{
+ char c;
+ int i;
+@@ -5449,6 +5432,7 @@ instructions, but allow the compiler to
+ @menu
+ * Alpha Built-in Functions::
+ * ARM Built-in Functions::
++* AVR32 Built-in Functions::
+ * Blackfin Built-in Functions::
+ * FR-V Built-in Functions::
+ * X86 Built-in Functions::
+@@ -5686,6 +5670,54 @@ long long __builtin_arm_wxor (long long,
+ long long __builtin_arm_wzero ()
+ @end smallexample
+
++@node AVR32 Built-in Functions
++@subsection AVR32 Built-in Functions
++
++
++@smallexample
++
++int __builtin_sats (int /*Rd*/,int /*sa*/, int /*bn*/)
++int __builtin_satu (int /*Rd*/,int /*sa*/, int /*bn*/)
++int __builtin_satrnds (int /*Rd*/,int /*sa*/, int /*bn*/)
++int __builtin_satrndu (int /*Rd*/,int /*sa*/, int /*bn*/)
++short __builtin_mulsathh_h (short, short)
++int __builtin_mulsathh_w (short, short)
++short __builtin_mulsatrndhh_h (short, short)
++int __builtin_mulsatrndwh_w (int, short)
++int __builtin_mulsatwh_w (int, short)
++int __builtin_macsathh_w (int, short, short)
++short __builtin_satadd_h (short, short)
++short __builtin_satsub_h (short, short)
++int __builtin_satadd_w (int, int)
++int __builtin_satsub_w (int, int)
++long long __builtin_mulwh_d(int, short)
++long long __builtin_mulnwh_d(int, short)
++long long __builtin_macwh_d(long long, int, short)
++long long __builtin_machh_d(long long, short, short)
++
++void __builtin_musfr(int);
++int __builtin_mustr(void);
++int __builtin_mfsr(int /*Status Register Address*/)
++void __builtin_mtsr(int /*Status Register Address*/, int /*Value*/)
++int __builtin_mfdr(int /*Debug Register Address*/)
++void __builtin_mtdr(int /*Debug Register Address*/, int /*Value*/)
++void __builtin_cache(void * /*Address*/, int /*Cache Operation*/)
++void __builtin_sync(int /*Sync Operation*/)
++void __builtin_tlbr(void)
++void __builtin_tlbs(void)
++void __builtin_tlbw(void)
++void __builtin_breakpoint(void)
++int __builtin_xchg(void * /*Address*/, int /*Value*/ )
++short __builtin_bswap_16(short)
++int __builtin_bswap_32(int)
++void __builtin_cop(int/*cpnr*/, int/*crd*/, int/*crx*/, int/*cry*/, int/*op*/)
++int __builtin_mvcr_w(int/*cpnr*/, int/*crs*/)
++void __builtin_mvrc_w(int/*cpnr*/, int/*crd*/, int/*value*/)
++long long __builtin_mvcr_d(int/*cpnr*/, int/*crs*/)
++void __builtin_mvrc_d(int/*cpnr*/, int/*crd*/, long long/*value*/)
++
++@end smallexample
++
+ @node Blackfin Built-in Functions
+ @subsection Blackfin Built-in Functions
+
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/doc/invoke.texi gcc-4.0.2-atmel.0.99.2/gcc/doc/invoke.texi
+--- gcc-4.0.2/gcc/doc/invoke.texi 2005-09-02 10:12:30.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/doc/invoke.texi 2006-02-08 17:33:56.000000000 +0100
+@@ -185,7 +185,7 @@ in the following sections.
+ -fno-default-inline -fvisibility-inlines-hidden @gol
+ -Wabi -Wctor-dtor-privacy @gol
+ -Wnon-virtual-dtor -Wreorder @gol
+--Weffc++ -Wno-deprecated -Wstrict-null-sentinel @gol
++-Weffc++ -Wno-deprecated @gol
+ -Wno-non-template-friend -Wold-style-cast @gol
+ -Woverloaded-virtual -Wno-pmf-conversions @gol
+ -Wsign-promo}
+@@ -542,6 +542,10 @@ Objective-C and Objective-C++ Dialects}.
+ -mauto-incdec -minmax -mlong-calls -mshort @gol
+ -msoft-reg-count=@var{count}}
+
++@emph{AVR32 Options}
++@gccoptlist{-muse-rodata-section -mhard-float -msoft-float -mrelax @gol
++-muse-oscall -mforce-double-align -mno-init-got -mcpu=@var{cpu}}
++
+ @emph{MCore Options}
+ @gccoptlist{-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates @gol
+ -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields @gol
+@@ -1738,14 +1742,6 @@ to filter out those warnings.
+ @opindex Wno-deprecated
+ Do not warn about usage of deprecated features. @xref{Deprecated Features}.
+
+-@item -Wstrict-null-sentinel @r{(C++ only)}
+-@opindex Wstrict-null-sentinel
+-Warn also about the use of an uncasted @code{NULL} as sentinel. When
+-compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
+-to @code{__null}. Although it is a null pointer constant not a null pointer,
+-it is guaranteed to of the same size as a pointer. But this use is
+-not portable across different compilers.
+-
+ @item -Wno-non-template-friend @r{(C++ only)}
+ @opindex Wno-non-template-friend
+ Disable warnings when non-templatized friend functions are declared
+@@ -2549,13 +2545,11 @@ get these warnings.
+ If you want to warn about code which uses the uninitialized value of the
+ variable in its own initializer, use the @option{-Winit-self} option.
+
+-These warnings occur for individual uninitialized or clobbered
+-elements of structure, union or array variables as well as for
+-variables which are uninitialized or clobbered as a whole. They do
+-not occur for variables or elements declared @code{volatile}. Because
+-these warnings depend on optimization, the exact variables or elements
+-for which there are warnings will depend on the precise optimization
+-options and version of GCC used.
++These warnings occur only for variables that are candidates for
++register allocation. Therefore, they do not occur for a variable that
++is declared @code{volatile}, or whose address is taken, or whose size
++is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
++structures, unions or arrays, even when they are in registers.
+
+ Note that there may be no warning about a variable that is used only
+ to compute a value that itself is never used, because such
+@@ -5584,10 +5578,6 @@ If number of candidates in the set is sm
+ we always try to remove unnecessary ivs from the set during its
+ optimization when a new iv is added to the set.
+
+-@item scev-max-expr-size
+-Bound on size of expressions used in the scalar evolutions analyzer.
+-Large expressions slow the analyzer.
+-
+ @item max-iterations-to-track
+
+ The maximum number of iterations of a loop the brute force algorithm
+@@ -6695,7 +6685,7 @@ that macro, which enables you to change
+ * ARC Options::
+ * ARM Options::
+ * AVR Options::
+-* Blackfin Options::
++* AVR32 Options::
+ * CRIS Options::
+ * Darwin Options::
+ * DEC Alpha Options::
+@@ -7147,81 +7137,55 @@ comply to the C standards, but it will p
+ size.
+ @end table
+
+-@node Blackfin Options
+-@subsection Blackfin Options
+-@cindex Blackfin Options
++@node AVR32 Options
++@subsection AVR32 Options
++@cindex AVR32 Options
+
+-@table @gcctabopt
+-@item -momit-leaf-frame-pointer
+-@opindex momit-leaf-frame-pointer
+-Don't keep the frame pointer in a register for leaf functions. This
+-avoids the instructions to save, set up and restore frame pointers and
+-makes an extra register available in leaf functions. The option
+-@option{-fomit-frame-pointer} removes the frame pointer for all functions
+-which might make debugging harder.
++These options are defined for AVR32 implementations:
+
+-@item -mspecld-anomaly
+-@opindex mspecld-anomaly
+-When enabled, the compiler will ensure that the generated code does not
+-contain speculative loads after jump instructions. This option is enabled
+-by default.
+-
+-@item -mno-specld-anomaly
+-@opindex mno-specld-anomaly
+-Don't generate extra code to prevent speculative loads from occurring.
+-
+-@item -mcsync-anomaly
+-@opindex mcsync-anomaly
+-When enabled, the compiler will ensure that the generated code does not
+-contain CSYNC or SSYNC instructions too soon after conditional branches.
+-This option is enabled by default.
+-
+-@item -mno-csync-anomaly
+-@opindex mno-csync-anomaly
+-Don't generate extra code to prevent CSYNC or SSYNC instructions from
+-occurring too soon after a conditional branch.
+-
+-@item -mlow-64k
+-@opindex mlow-64k
+-When enabled, the compiler is free to take advantage of the knowledge that
+-the entire program fits into the low 64k of memory.
+-
+-@item -mno-low-64k
+-@opindex mno-low-64k
+-Assume that the program is arbitrarily large. This is the default.
++@table @gcctabopt
++@item -muse-rodata-section
++@opindex muse-rodata-section
++Use section @samp{.rodata} for read-only data instead of @samp{.text}.
+
+-@item -mid-shared-library
+-@opindex mid-shared-library
+-Generate code that supports shared libraries via the library ID method.
+-This allows for execute in place and shared libraries in an environment
+-without virtual memory management. This option implies @option{-fPIC}.
++@item -mhard-float
++@opindex mhard-float
++Use floating-point coprocessor instructions.
+
+-@item -mno-id-shared-library
+-@opindex mno-id-shared-library
+-Generate code that doesn't assume ID based shared libraries are being used.
+-This is the default.
++@item -msoft-float
++@opindex msoft-float
++Use software floating-point library.
+
+-@item -mshared-library-id=n
+-@opindex mshared-library-id
+-Specified the identification number of the ID based shared library being
+-compiled. Specifying a value of 0 will generate more compact code, specifying
+-other values will force the allocation of that number to the current
+-library but is no more space or time efficient than omitting this option.
++@item -mrelax
++@opindex mrelax
++Enable relaxing in linker. This means that when the address of symbols
++are known at link time, the linker can optimize @samp{icall} and @samp{mcall}
++instructions into a @samp{rcall} instruction if possible. Loading the address
++of a symbol can also be optimized.
++
++@item -muse-oscall
++@opindex muse-oscall
++When using gcc as a frontend for linking this switch forces the use of
++@samp{fake} system calls in the newlib c-library. These fake system
++calls are handled by some AVR32 simulators which redirects these calls
++to the OS in which the simulator is running. This is practical for
++being able to perform file I/O when running programs in a simulator.
++
++@item -mforce-double-align
++@opindex mforce-double-align
++Force double-word alignment for double-word memory accesses.
++
++@item -mno-init-got
++@opindex mno-init-got
++Do not initialize the GOT register before using it when compiling PIC
++code.
+
+-@item -mlong-calls
+-@itemx -mno-long-calls
+-@opindex mlong-calls
+-@opindex mno-long-calls
+-Tells the compiler to perform function calls by first loading the
+-address of the function into a register and then performing a subroutine
+-call on this register. This switch is needed if the target function
+-will lie outside of the 24 bit addressing range of the offset based
+-version of subroutine call instruction.
++@item -mcpu=@var{cpu-type}
++@opindex mcpu
++Generate code for the specified cpu. Permissible names are: @samp{morgan},
++@samp{ap7000} and @samp{default}. @samp{default} is a dummy cpu which
++allows all avr32 instructions.
+
+-This feature is not enabled by default. Specifying
+-@option{-mno-long-calls} will restore the default behavior. Note these
+-switches have no effect on how the compiler generates code to handle
+-function calls via function pointers.
+ @end table
+
+ @node CRIS Options
+@@ -10853,6 +10817,7 @@ conventions that adheres to the March 19
+ Application Binary Interface, PowerPC processor supplement. This is the
+ default unless you configured GCC using @samp{powerpc-*-eabiaix}.
+
++
+ @item -mcall-sysv-eabi
+ @opindex mcall-sysv-eabi
+ Specify both @option{-mcall-sysv} and @option{-meabi} options.
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/doc/md.texi gcc-4.0.2-atmel.0.99.2/gcc/doc/md.texi
+--- gcc-4.0.2/gcc/doc/md.texi 2005-08-14 01:56:45.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/doc/md.texi 2006-07-13 09:53:31.000000000 +0200
+@@ -3,6 +3,7 @@
+ @c This is part of the GCC manual.
+ @c For copying conditions, see the file gcc.texi.
+
++
+ @ifset INTERNALS
+ @node Machine Desc
+ @chapter Machine Descriptions
+@@ -1683,6 +1684,59 @@ A memory reference suitable for iWMMXt l
+ A memory reference suitable for the ARMv4 ldrsb instruction.
+ @end table
+
++@item AVR32 family---@file{avr32.h}
++@table @code
++@item f
++Floating-point registers (f0 to f15)
++
++@item Ku@var{bits}
++Unsigned constant representable with @var{bits} number of bits (Must be
++two digits). I.e: An unsigned 8-bit constant is written as @samp{Ku08}
++
++@item Ks@var{bits}
++Signed constant representable with @var{bits} number of bits (Must be
++two digits). I.e: A signed 12-bit constant is written as @samp{Ks12}
++
++@item Is@var{bits}
++The negated range of a signed constant representable with @var{bits}
++number of bits. The same as @samp{Ks@var{bits}} with a negated range.
++This means that the constant must be in the range @math{-2^{bits-1}-1} to @math{2^{bits-1}}
++
++@item G
++A single/double precision floating-point immediate or 64-bit integer
++immediate where the least and most significant words both can be
++loaded with a move instruction. That is the the integer form of the
++values in the least and most significant words both are in the range
++@math{-2^{20}} to @math{2^{20}-1}.
++
++@item RKs@var{bits}
++A memory reference where the address consists of a base register
++plus a signed immediate displacement with range given by @samp{Ks@var{bits}}
++which has the same format as for the signed immediate integer constraint
++given above.
++
++@item RKu@var{bits}
++A memory reference where the address consists of a base register
++plus an unsigned immediate displacement with range given by @samp{Ku@var{bits}}
++which has the same format as for the unsigned immediate integer constraint
++given above.
++
++@item S
++A memory reference with an immediate or register offset
++
++@item T
++A memory reference to a constant pool entry
++
++@item W
++A valid operand for use in the @samp{lda.w} instruction macro when
++relaxing is enabled
++
++@item Z
++A memory reference valid for coprocessor memory instructions
++
++@end table
++
++
+ @item AVR family---@file{avr.h}
+ @table @code
+ @item l
+@@ -2069,102 +2123,6 @@ range of 1 to 2047.
+
+ @end table
+
+-@item Blackfin family---@file{bfin.h}
+-@table @code
+-@item a
+-P register
+-
+-@item d
+-D register
+-
+-@item z
+-A call clobbered P register.
+-
+-@item D
+-Even-numbered D register
+-
+-@item W
+-Odd-numbered D register
+-
+-@item e
+-Accumulator register.
+-
+-@item A
+-Even-numbered accumulator register.
+-
+-@item B
+-Odd-numbered accumulator register.
+-
+-@item b
+-I register
+-
+-@item B
+-B register
+-
+-@item f
+-M register
+-
+-@item c
+-Registers used for circular buffering, i.e. I, B, or L registers.
+-
+-@item C
+-The CC register.
+-
+-@item x
+-Any D, P, B, M, I or L register.
+-
+-@item y
+-Additional registers typically used only in prologues and epilogues: RETS,
+-RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP.
+-
+-@item w
+-Any register except accumulators or CC.
+-
+-@item Ksh
+-Signed 16 bit integer (in the range -32768 to 32767)
+-
+-@item Kuh
+-Unsigned 16 bit integer (in the range 0 to 65535)
+-
+-@item Ks7
+-Signed 7 bit integer (in the range -64 to 63)
+-
+-@item Ku7
+-Unsigned 7 bit integer (in the range 0 to 127)
+-
+-@item Ku5
+-Unsigned 5 bit integer (in the range 0 to 31)
+-
+-@item Ks4
+-Signed 4 bit integer (in the range -8 to 7)
+-
+-@item Ks3
+-Signed 3 bit integer (in the range -3 to 4)
+-
+-@item Ku3
+-Unsigned 3 bit integer (in the range 0 to 7)
+-
+-@item P@var{n}
+-Constant @var{n}, where @var{n} is a single-digit constant in the range 0 to 4.
+-
+-@item M1
+-Constant 255.
+-
+-@item M2
+-Constant 65535.
+-
+-@item J
+-An integer constant with exactly a single bit set.
+-
+-@item L
+-An integer constant with all bits set except exactly one.
+-
+-@item H
+-
+-@item Q
+-Any SYMBOL_REF.
+-@end table
+-
+ @item IP2K---@file{ip2k.h}
+ @table @code
+ @item a
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/expr.c gcc-4.0.2-atmel.0.99.2/gcc/expr.c
+--- gcc-4.0.2/gcc/expr.c 2005-09-10 03:03:28.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/expr.c 2006-10-10 12:40:42.000000000 +0200
+@@ -3314,16 +3314,17 @@ emit_single_push_insn (enum machine_mode
+ }
+ else
+ {
++ emit_move_insn (stack_pointer_rtx,
++ expand_binop (Pmode,
+ #ifdef STACK_GROWS_DOWNWARD
+- /* ??? This seems wrong if STACK_PUSH_CODE == POST_DEC. */
+- dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+- GEN_INT (-(HOST_WIDE_INT) rounded_size));
++ sub_optab,
+ #else
+- /* ??? This seems wrong if STACK_PUSH_CODE == POST_INC. */
+- dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+- GEN_INT (rounded_size));
++ add_optab,
+ #endif
+- dest_addr = gen_rtx_PRE_MODIFY (Pmode, stack_pointer_rtx, dest_addr);
++ stack_pointer_rtx,
++ GEN_INT (rounded_size),
++ NULL_RTX, 0, OPTAB_LIB_WIDEN));
++ dest_addr = stack_pointer_rtx;
+ }
+
+ dest = gen_rtx_MEM (mode, dest_addr);
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/genemit.c gcc-4.0.2-atmel.0.99.2/gcc/genemit.c
+--- gcc-4.0.2/gcc/genemit.c 2004-09-09 15:22:33.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/genemit.c 2006-03-23 13:26:49.000000000 +0100
+@@ -122,6 +122,24 @@ max_operand_vec (rtx insn, int arg)
+ }
+
+ static void
++gen_vararg_prologue(int operands)
++{
++ int i;
++
++ if (operands > 1)
++ {
++ for (i = 1; i < operands; i++)
++ printf(" rtx operand%d ATTRIBUTE_UNUSED;\n", i);
++
++ printf(" va_list args;\n\n");
++ printf(" va_start(args, operand0);\n");
++ for (i = 1; i < operands; i++)
++ printf(" operand%d = va_arg(args, rtx);\n", i);
++ printf(" va_end(args);\n\n");
++ }
++}
++
++static void
+ print_code (RTX_CODE code)
+ {
+ const char *p1;
+@@ -406,18 +424,16 @@ gen_insn (rtx insn, int lineno)
+ fatal ("match_dup operand number has no match_operand");
+
+ /* Output the function name and argument declarations. */
+- printf ("rtx\ngen_%s (", XSTR (insn, 0));
++ printf ("rtx\ngen_%s ", XSTR (insn, 0));
++
+ if (operands)
+- for (i = 0; i < operands; i++)
+- if (i)
+- printf (",\n\trtx operand%d ATTRIBUTE_UNUSED", i);
++ printf("(rtx operand0 ATTRIBUTE_UNUSED, ...)\n");
+ else
+- printf ("rtx operand%d ATTRIBUTE_UNUSED", i);
+- else
+- printf ("void");
+- printf (")\n");
++ printf("(void)\n");
+ printf ("{\n");
+
++ gen_vararg_prologue(operands);
++
+ /* Output code to construct and return the rtl for the instruction body. */
+
+ if (XVECLEN (insn, 1) == 1)
+@@ -457,16 +473,12 @@ gen_expand (rtx expand)
+ operands = max_operand_vec (expand, 1);
+
+ /* Output the function name and argument declarations. */
+- printf ("rtx\ngen_%s (", XSTR (expand, 0));
++ printf ("rtx\ngen_%s ", XSTR (expand, 0));
+ if (operands)
+- for (i = 0; i < operands; i++)
+- if (i)
+- printf (",\n\trtx operand%d", i);
+- else
+- printf ("rtx operand%d", i);
++ printf("(rtx operand0 ATTRIBUTE_UNUSED, ...)\n");
+ else
+- printf ("void");
+- printf (")\n");
++ printf("(void)\n");
++
+ printf ("{\n");
+
+ /* If we don't have any C code to write, only one insn is being written,
+@@ -476,6 +488,8 @@ gen_expand (rtx expand)
+ && operands > max_dup_opno
+ && XVECLEN (expand, 1) == 1)
+ {
++ gen_vararg_prologue(operands);
++
+ printf (" return ");
+ gen_exp (XVECEXP (expand, 1, 0), DEFINE_EXPAND, NULL);
+ printf (";\n}\n\n");
+@@ -489,6 +503,7 @@ gen_expand (rtx expand)
+ for (; i <= max_scratch_opno; i++)
+ printf (" rtx operand%d ATTRIBUTE_UNUSED;\n", i);
+ printf (" rtx _val = 0;\n");
++ gen_vararg_prologue(operands);
+ printf (" start_sequence ();\n");
+
+ /* The fourth operand of DEFINE_EXPAND is some code to be executed
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/genflags.c gcc-4.0.2-atmel.0.99.2/gcc/genflags.c
+--- gcc-4.0.2/gcc/genflags.c 2004-09-09 15:22:33.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/genflags.c 2006-10-10 12:40:42.000000000 +0200
+@@ -128,7 +128,6 @@ static void
+ gen_proto (rtx insn)
+ {
+ int num = num_operands (insn);
+- int i;
+ const char *name = XSTR (insn, 0);
+ int truth = maybe_eval_c_test (XSTR (insn, 2));
+
+@@ -159,12 +158,7 @@ gen_proto (rtx insn)
+ if (num == 0)
+ fputs ("void", stdout);
+ else
+- {
+- for (i = 1; i < num; i++)
+- fputs ("rtx, ", stdout);
+-
+- fputs ("rtx", stdout);
+- }
++ fputs("rtx, ...", stdout);
+
+ puts (");");
+
+@@ -174,12 +168,7 @@ gen_proto (rtx insn)
+ {
+ printf ("static inline rtx\ngen_%s", name);
+ if (num > 0)
+- {
+- putchar ('(');
+- for (i = 0; i < num-1; i++)
+- printf ("rtx ARG_UNUSED (%c), ", 'a' + i);
+- printf ("rtx ARG_UNUSED (%c))\n", 'a' + i);
+- }
++ puts("(rtx ARG_UNUSED(a), ...)");
+ else
+ puts ("(void)");
+ puts ("{\n return 0;\n}");
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/genoutput.c gcc-4.0.2-atmel.0.99.2/gcc/genoutput.c
+--- gcc-4.0.2/gcc/genoutput.c 2004-09-09 15:22:34.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/genoutput.c 2006-03-23 13:26:49.000000000 +0100
+@@ -383,7 +383,7 @@ output_insn_data (void)
+ }
+
+ if (d->name && d->name[0] != '*')
+- printf (" (insn_gen_fn) gen_%s,\n", d->name);
++ printf (" gen_%s,\n", d->name);
+ else
+ printf (" 0,\n");
+
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/longlong.h gcc-4.0.2-atmel.0.99.2/gcc/longlong.h
+--- gcc-4.0.2/gcc/longlong.h 2004-06-15 12:40:44.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/longlong.h 2005-06-07 14:59:22.000000000 +0200
+@@ -227,6 +227,39 @@ UDItype __umulsidi3 (USItype, USItype);
+ #define UDIV_TIME 100
+ #endif /* __arm__ */
+
++#if defined (__avr32__) && W_TYPE_SIZE == 32
++#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
++ __asm__ ("add\t%1, %4, %5\n\tadc\t%0, %2, %3" \
++ : "=r" ((USItype) (sh)), \
++ "=&r" ((USItype) (sl)) \
++ : "r" ((USItype) (ah)), \
++ "r" ((USItype) (bh)), \
++ "r" ((USItype) (al)), \
++ "r" ((USItype) (bl)) __CLOBBER_CC)
++#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
++ __asm__ ("sub\t%1, %4, %5\n\tsbc\t%0, %2, %3" \
++ : "=r" ((USItype) (sh)), \
++ "=&r" ((USItype) (sl)) \
++ : "r" ((USItype) (ah)), \
++ "r" ((USItype) (bh)), \
++ "r" ((USItype) (al)), \
++ "r" ((USItype) (bl)) __CLOBBER_CC)
++
++#define __umulsidi3(a,b) ((UDItype)(a) * (UDItype)(b))
++
++#define umul_ppmm(w1, w0, u, v) \
++{ \
++ DWunion __w; \
++ __w.ll = __umulsidi3 (u, v); \
++ w1 = __w.s.high; \
++ w0 = __w.s.low; \
++}
++
++#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
++#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
++#define COUNT_LEADING_ZEROS_0 32
++#endif
++
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/optabs.h gcc-4.0.2-atmel.0.99.2/gcc/optabs.h
+--- gcc-4.0.2/gcc/optabs.h 2005-02-12 12:34:21.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/optabs.h 2006-10-10 12:40:42.000000000 +0200
+@@ -389,7 +389,7 @@ extern enum insn_code reload_out_optab[N
+ extern GTY(()) optab code_to_optab[NUM_RTX_CODE + 1];
+
+
+-typedef rtx (*rtxfun) (rtx);
++typedef rtx (*rtxfun) (rtx, ...);
+
+ /* Indexed by the rtx-code for a conditional (e.g. EQ, LT,...)
+ gives the gen_function to make a branch to test that condition. */
+Binary files gcc-4.0.2/gcc/po/be.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/be.gmo differ
+Binary files gcc-4.0.2/gcc/po/ca.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/ca.gmo differ
+Binary files gcc-4.0.2/gcc/po/da.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/da.gmo differ
+Binary files gcc-4.0.2/gcc/po/de.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/de.gmo differ
+Binary files gcc-4.0.2/gcc/po/el.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/el.gmo differ
+Binary files gcc-4.0.2/gcc/po/es.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/es.gmo differ
+Binary files gcc-4.0.2/gcc/po/fr.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/fr.gmo differ
+Binary files gcc-4.0.2/gcc/po/ja.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/ja.gmo differ
+Binary files gcc-4.0.2/gcc/po/nl.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/nl.gmo differ
+Binary files gcc-4.0.2/gcc/po/sv.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/sv.gmo differ
+Binary files gcc-4.0.2/gcc/po/tr.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/tr.gmo differ
+Binary files gcc-4.0.2/gcc/po/zh_CN.gmo and gcc-4.0.2-atmel.0.99.2/gcc/po/zh_CN.gmo differ
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/testsuite/gcc.dg/cpp/mac-eol-at-eof.c gcc-4.0.2-atmel.0.99.2/gcc/testsuite/gcc.dg/cpp/mac-eol-at-eof.c
+--- gcc-4.0.2/gcc/testsuite/gcc.dg/cpp/mac-eol-at-eof.c 2005-02-19 20:48:02.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/gcc/testsuite/gcc.dg/cpp/mac-eol-at-eof.c 2005-06-07 14:06:28.000000000 +0200
+@@ -1 +1,3 @@
+-/* Test no newline at eof warning when Mac line ending is used*/ /* { dg-do compile } */ int main() { return 0; }
+\ No newline at end of file
++/* Test no newline at eof warning when Mac line ending is used*/
++/* { dg-do compile } */
++int main() { return 0; }
+diff -Nrup --ignore-space-change gcc-4.0.2/gcc/tree-ssa-operands.c gcc-4.0.2-atmel.0.99.2/gcc/tree-ssa-operands.c
+--- gcc-4.0.2/gcc/tree-ssa-operands.c 2005-06-24 15:23:42.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/gcc/tree-ssa-operands.c 2005-07-15 16:06:29.000000000 +0200
+@@ -1135,7 +1135,7 @@ get_expr_operands (tree stmt, tree *expr
+
+ if (code == COMPONENT_REF)
+ {
+- if (s_ann && TREE_THIS_VOLATILE (TREE_OPERAND (expr, 1)))
++ if (TREE_THIS_VOLATILE (TREE_OPERAND (expr, 1)))
+ s_ann->has_volatile_ops = true;
+ get_expr_operands (stmt, &TREE_OPERAND (expr, 2), opf_none);
+ }
+diff -Nrup --ignore-space-change gcc-4.0.2/libcpp/po/sv.po gcc-4.0.2-atmel.0.99.2/libcpp/po/sv.po
+--- gcc-4.0.2/libcpp/po/sv.po 2005-09-04 14:30:22.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libcpp/po/sv.po 2006-01-20 10:54:31.000000000 +0100
+@@ -2,7 +2,7 @@
+ # Copyright © 2000, 2005 Free Software Foundation, Inc.
+ # Dennis Björklund <db@zigo.dhs.org>, 2000, 2001, 2002.
+ # Göran Uddeborg <goeran@uddeborg.se>, 2005.
+-# $Revision: 1.2 $
++# $Revision: 3550 $
+ #
+ msgid ""
+ msgstr ""
+Binary files gcc-4.0.2/libcpp/po/tr.gmo and gcc-4.0.2-atmel.0.99.2/libcpp/po/tr.gmo differ
+Binary files gcc-4.0.2/libcpp/po/vi.gmo and gcc-4.0.2-atmel.0.99.2/libcpp/po/vi.gmo differ
+diff -Nrup --ignore-space-change gcc-4.0.2/libffi/src/frv/eabi.S gcc-4.0.2-atmel.0.99.2/libffi/src/frv/eabi.S
+--- gcc-4.0.2/libffi/src/frv/eabi.S 2004-08-30 17:43:03.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libffi/src/frv/eabi.S 2005-07-15 16:26:03.000000000 +0200
+@@ -3,7 +3,7 @@
+
+ FR-V Assembly glue.
+
+- $Id: sysv.S,v 1.1.1.1 1998/11/29 16:48:16 green Exp $
++ $Id: eabi.S 3484 2005-07-15 14:26:03Z rpedersen $
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/AttributeList.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/AttributeList.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/AttributeList.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/AttributeList.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX Attribute List Interface.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: AttributeList.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: AttributeList.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/Attributes.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Attributes.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/Attributes.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Attributes.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: Attributes.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Attributes.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ContentHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ContentHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ContentHandler.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ContentHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: ContentHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: ContentHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/DocumentHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/DocumentHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/DocumentHandler.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/DocumentHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX document handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: DocumentHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: DocumentHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/DTDHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/DTDHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/DTDHandler.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/DTDHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX DTD handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: DTDHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: DTDHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/EntityResolver.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/EntityResolver.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/EntityResolver.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/EntityResolver.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX entity resolver.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: EntityResolver.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: EntityResolver.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ErrorHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ErrorHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ErrorHandler.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ErrorHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX error handler.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: ErrorHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: ErrorHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Attributes2Impl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // Attributes2Impl.java - extended AttributesImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: Attributes2Impl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Attributes2Impl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Attributes2.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Attributes2.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Attributes2.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Attributes2.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // Attributes2.java - extended Attributes
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: Attributes2.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Attributes2.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/DeclHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/DeclHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/DeclHandler.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/DeclHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // DeclHandler.java - Optional handler for DTD declaration events.
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: DeclHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: DeclHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/DefaultHandler2.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // DefaultHandler2.java - extended DefaultHandler
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: DefaultHandler2.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: DefaultHandler2.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/EntityResolver2.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // EntityResolver2.java - Extended SAX entity resolver.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: EntityResolver2.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: EntityResolver2.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/LexicalHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // LexicalHandler.java - optional handler for lexical parse events.
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: LexicalHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: LexicalHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Locator2Impl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // Locator2Impl.java - extended LocatorImpl
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: Locator2Impl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Locator2Impl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Locator2.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Locator2.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/Locator2.java 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/Locator2.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // Locator2.java - extended Locator
+ // http://www.saxproject.org
+ // Public Domain: no warranty.
+-// $Id: Locator2.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Locator2.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.ext;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/package.html gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/package.html
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/ext/package.html 2005-02-02 01:41:52.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/ext/package.html 2005-07-15 16:26:03.000000000 +0200
+@@ -1,5 +1,5 @@
+ <HTML><HEAD>
+-<!-- $Id: package.html,v 1.1 2004/12/23 22:38:42 mark Exp $ -->
++<!-- $Id: package.html 3484 2005-07-15 14:26:03Z rpedersen $ -->
+ </HEAD><BODY>
+
+ <p>
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/HandlerBase.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/HandlerBase.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/HandlerBase.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/HandlerBase.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX default handler base class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: HandlerBase.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: HandlerBase.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java 2005-02-02 01:41:53.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/AttributeListImpl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX default implementation for AttributeList.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: AttributeListImpl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: AttributeListImpl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/AttributesImpl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: AttributesImpl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: AttributesImpl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/DefaultHandler.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: DefaultHandler.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: DefaultHandler.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/LocatorImpl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX default implementation for Locator.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: LocatorImpl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: LocatorImpl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java 2005-04-06 23:38:28.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/NamespaceSupport.java 2005-06-07 14:06:28.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // This class is in the Public Domain. NO WARRANTY!
+-// $Id: NamespaceSupport.java,v 1.2 2005/03/24 00:04:07 tromey Exp $
++// $Id: NamespaceSupport.java 3462 2005-06-07 12:06:28Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/NewInstance.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/NewInstance.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/NewInstance.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/NewInstance.java 2005-07-15 16:26:03.000000000 +0200
+@@ -3,7 +3,7 @@
+ // Written by Edwin Goei, edwingo@apache.org
+ // and by David Brownell, dbrownell@users.sourceforge.net
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: NewInstance.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: NewInstance.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/package.html gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/package.html
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/package.html 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/package.html 2005-07-15 16:26:03.000000000 +0200
+@@ -1,5 +1,5 @@
+ <HTML><HEAD>
+-<!-- $Id: package.html,v 1.1 2004/12/23 22:38:42 mark Exp $ -->
++<!-- $Id: package.html 3484 2005-07-15 14:26:03Z rpedersen $ -->
+ </HEAD><BODY>
+
+ <p>This package contains "helper" classes, including
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/ParserAdapter.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: ParserAdapter.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: ParserAdapter.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/ParserFactory.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX parser factory.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: ParserFactory.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: ParserFactory.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLFilterImpl.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: XMLFilterImpl.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: XMLFilterImpl.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderAdapter.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the public domain.
+-// $Id: XMLReaderAdapter.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: XMLReaderAdapter.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java 2005-02-02 01:41:54.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/helpers/XMLReaderFactory.java 2005-07-15 16:26:03.000000000 +0200
+@@ -3,7 +3,7 @@
+ // Written by David Megginson
+ // and by David Brownell
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: XMLReaderFactory.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: XMLReaderFactory.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax.helpers;
+ import java.io.BufferedReader;
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/InputSource.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/InputSource.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/InputSource.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/InputSource.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX input source.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: InputSource.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: InputSource.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/Locator.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Locator.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/Locator.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Locator.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX locator interface for document events.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: Locator.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Locator.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/package.html gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/package.html
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/package.html 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/package.html 2005-07-15 16:26:03.000000000 +0200
+@@ -1,5 +1,5 @@
+ <html><head>
+-<!-- $Id: package.html,v 1.1 2004/12/23 22:38:42 mark Exp $ -->
++<!-- $Id: package.html 3484 2005-07-15 14:26:03Z rpedersen $ -->
+ </head><body>
+
+ <p> This package provides the core SAX APIs.
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/Parser.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Parser.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/Parser.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/Parser.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX parser interface.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: Parser.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: Parser.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXException.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXException.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXException.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXException.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX exception class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: SAXException.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: SAXException.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXNotRecognizedException.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: SAXNotRecognizedException.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: SAXNotRecognizedException.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXNotSupportedException.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: SAXNotSupportedException.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: SAXNotSupportedException.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXParseException.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXParseException.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/SAXParseException.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/SAXParseException.java 2005-07-15 16:26:03.000000000 +0200
+@@ -1,7 +1,7 @@
+ // SAX exception class.
+ // http://www.saxproject.org
+ // No warranty; no copyright -- use this as you will.
+-// $Id: SAXParseException.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: SAXParseException.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/XMLFilter.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/XMLFilter.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/XMLFilter.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/XMLFilter.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: XMLFilter.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: XMLFilter.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/libjava/external/sax/org/xml/sax/XMLReader.java gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/XMLReader.java
+--- gcc-4.0.2/libjava/external/sax/org/xml/sax/XMLReader.java 2005-02-02 01:41:51.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libjava/external/sax/org/xml/sax/XMLReader.java 2005-07-15 16:26:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ // http://www.saxproject.org
+ // Written by David Megginson
+ // NO WARRANTY! This class is in the Public Domain.
+-// $Id: XMLReader.java,v 1.1 2004/12/23 22:38:42 mark Exp $
++// $Id: XMLReader.java 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package org.xml.sax;
+
+Binary files gcc-4.0.2/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png and gcc-4.0.2-atmel.0.99.2/libjava/gnu/java/awt/doc-files/BitwiseXORComposite-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/Area-1.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/Area-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/CubicCurve2D-1.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/CubicCurve2D-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/CubicCurve2D-2.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/CubicCurve2D-2.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/CubicCurve2D-3.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/CubicCurve2D-3.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/CubicCurve2D-4.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/CubicCurve2D-4.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/CubicCurve2D-5.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/CubicCurve2D-5.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/Ellipse-1.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/Ellipse-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/GeneralPath-1.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/GeneralPath-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/QuadCurve2D-1.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/QuadCurve2D-1.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/QuadCurve2D-2.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/QuadCurve2D-2.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/QuadCurve2D-3.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/QuadCurve2D-3.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/QuadCurve2D-4.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/QuadCurve2D-4.png differ
+Binary files gcc-4.0.2/libjava/java/awt/geom/doc-files/QuadCurve2D-5.png and gcc-4.0.2-atmel.0.99.2/libjava/java/awt/geom/doc-files/QuadCurve2D-5.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/BevelBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/BevelBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/BevelBorder-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/BevelBorder-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/BevelBorder-3.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/BevelBorder-3.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/EmptyBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/EmptyBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/EtchedBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/EtchedBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/EtchedBorder-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/EtchedBorder-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/LineBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/LineBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-3.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-3.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-4.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-4.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-5.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-5.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/MatteBorder-6.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/MatteBorder-6.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-3.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/border/doc-files/SoftBevelBorder-3.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/doc-files/ComponentUI-1.dia differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/doc-files/ComponentUI-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/doc-files/ComponentUI-1.png differ
+Binary files gcc-4.0.2/libjava/javax/swing/plaf/doc-files/TreeUI-1.png and gcc-4.0.2-atmel.0.99.2/libjava/javax/swing/plaf/doc-files/TreeUI-1.png differ
+Binary files gcc-4.0.2/libjava/testsuite/libjava.jar/simple.jar and gcc-4.0.2-atmel.0.99.2/libjava/testsuite/libjava.jar/simple.jar differ
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/acinclude.m4 gcc-4.0.2-atmel.0.99.2/libstdc++-v3/acinclude.m4
+--- gcc-4.0.2/libstdc++-v3/acinclude.m4 2005-06-23 11:23:59.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/acinclude.m4 2006-03-28 10:54:09.000000000 +0200
+@@ -139,6 +139,15 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
+ #enable_symvers=no
+ #enable_hosted_libstdcxx=yes
+
++ # Check for uClibc since Linux platforms use different configuration
++ # directories depending on the C library in use.
++ AC_EGREP_CPP([_using_uclibc], [
++ #include <stdio.h>
++ #if __UCLIBC__
++ _using_uclibc
++ #endif
++ ], uclibc=yes, uclibc=no)
++
+ # Find platform-specific directories containing configuration info.
+ # Also possibly modify flags used elsewhere, as needed by the platform.
+ GLIBCXX_CHECK_HOST
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/configure.host gcc-4.0.2-atmel.0.99.2/libstdc++-v3/configure.host
+--- gcc-4.0.2/libstdc++-v3/configure.host 2005-06-17 02:22:20.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/configure.host 2006-03-28 10:54:09.000000000 +0200
+@@ -193,8 +193,15 @@ case "${host_os}" in
+ freebsd*)
+ os_include_dir="os/bsd/freebsd"
+ ;;
++ linux-uclibc*)
++ os_include_dir="os/uclibc-linux"
++ ;;
+ gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
++ if [ "$uclibc" = "yes" ]; then
++ os_include_dir="os/uclibc"
++ else
+ os_include_dir="os/gnu-linux"
++ fi
+ ;;
+ hpux*)
+ os_include_dir="os/hpux"
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/crossconfig.m4 gcc-4.0.2-atmel.0.99.2/libstdc++-v3/crossconfig.m4
+--- gcc-4.0.2/libstdc++-v3/crossconfig.m4 2005-02-01 07:56:19.000000000 +0100
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/crossconfig.m4 2006-03-28 10:54:09.000000000 +0200
+@@ -148,9 +148,13 @@ case "${host}" in
+ fp.h float.h endian.h inttypes.h locale.h float.h stdint.h])
+ SECTION_FLAGS='-ffunction-sections -fdata-sections'
+ AC_SUBST(SECTION_FLAGS)
++ GLIBCXX_CHECK_COMPILER_FEATURES
+ GLIBCXX_CHECK_LINKER_FEATURES
++ GLIBCXX_CHECK_MATH_SUPPORT
++ GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
+ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
+- GLIBCXX_CHECK_WCHAR_T_SUPPORT
++ GLIBCXX_CHECK_ICONV_SUPPORT
++ GLIBCXX_CHECK_STDLIB_SUPPORT
+
+ # For LFS.
+ AC_DEFINE(HAVE_INT64_T)
+Binary files gcc-4.0.2/libstdc++-v3/docs/html/17_intro/confdeps.png and gcc-4.0.2-atmel.0.99.2/libstdc++-v3/docs/html/17_intro/confdeps.png differ
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/include/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/include/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/include/Makefile.in 2005-06-22 22:39:09.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/include/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -36,6 +36,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/fragment.am
+ subdir = include
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/libmath/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/libmath/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/libmath/Makefile.in 2005-06-22 22:39:18.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/libmath/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,8 +14,6 @@
+
+ @SET_MAKE@
+
+-SOURCES = $(libmath_la_SOURCES)
+-
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+@@ -39,6 +37,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ subdir = libmath
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/libsupc++/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/libsupc++/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/libsupc++/Makefile.in 2005-06-22 22:39:21.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/libsupc++/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -15,8 +15,6 @@
+ @SET_MAKE@
+
+
+-SOURCES = $(libsupc___la_SOURCES) $(libsupc__convenience_la_SOURCES)
+-
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+@@ -40,6 +38,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = $(glibcxxinstall_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/fragment.am
+ subdir = libsupc++
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/Makefile.in 2005-06-22 22:37:12.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -36,6 +36,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
+ $(srcdir)/../config.sub $(srcdir)/../install-sh \
+ $(srcdir)/../ltmain.sh $(srcdir)/../missing \
+@@ -408,7 +409,13 @@ uninstall-info-am:
+ # (which will cause the Makefiles to be regenerated when you run `make');
+ # (2) otherwise, pass the desired values on the `make' command line.
+ $(RECURSIVE_TARGETS):
+- @set fnord $$MAKEFLAGS; amf=$$2; \
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+@@ -420,7 +427,7 @@ $(RECURSIVE_TARGETS):
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
++ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+@@ -428,7 +435,13 @@ $(RECURSIVE_TARGETS):
+
+ mostlyclean-recursive clean-recursive distclean-recursive \
+ maintainer-clean-recursive:
+- @set fnord $$MAKEFLAGS; amf=$$2; \
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+@@ -449,7 +462,7 @@ maintainer-clean-recursive:
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
++ || eval $$failcom; \
+ done && test -z "$$fail"
+ tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/po/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/po/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/po/Makefile.in 2005-06-22 22:39:24.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/po/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -36,6 +36,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/fragment.am
+ subdir = po
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/src/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/src/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/src/Makefile.in 2005-06-22 22:39:26.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/src/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,8 +14,6 @@
+
+ @SET_MAKE@
+
+-SOURCES = $(libstdc___la_SOURCES)
+-
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ pkgdatadir = $(datadir)/@PACKAGE@
+@@ -38,6 +36,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/fragment.am
+ subdir = src
+diff -Nrup --ignore-space-change gcc-4.0.2/libstdc++-v3/testsuite/Makefile.in gcc-4.0.2-atmel.0.99.2/libstdc++-v3/testsuite/Makefile.in
+--- gcc-4.0.2/libstdc++-v3/testsuite/Makefile.in 2005-06-22 22:39:30.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/libstdc++-v3/testsuite/Makefile.in 2006-03-28 10:54:09.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.9.3 from Makefile.am.
++# Makefile.in generated by automake 1.9.6 from Makefile.am.
+ # @configure_input@
+
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004 Free Software Foundation, Inc.
++# 2003, 2004, 2005 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,8 +14,6 @@
+
+ @SET_MAKE@
+
+-SOURCES = $(libv3test_a_SOURCES)
+-
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+@@ -39,6 +37,7 @@ POST_UNINSTALL = :
+ build_triplet = @build@
+ host_triplet = @host@
+ target_triplet = @target@
++LIBOBJDIR =
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/fragment.am
+ subdir = testsuite
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/mtest.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/mtest.adb
+--- gcc-4.0.2/zlib/contrib/ada/mtest.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/mtest.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -8,7 +8,7 @@
+ -- Continuous test for ZLib multithreading. If the test is fail
+ -- Wou should provide thread safe allocation routines for the Z_Stream.
+ --
+--- $Id: mtest.adb,v 1.2 2003/08/12 12:11:05 vagul Exp $
++-- $Id: mtest.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ with ZLib;
+ with Ada.Streams;
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/read.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/read.adb
+--- gcc-4.0.2/zlib/contrib/ada/read.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/read.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: read.adb,v 1.7 2003/08/12 12:12:35 vagul Exp $
++-- $Id: read.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ -- Test/demo program for the generic read interface.
+
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/test.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/test.adb
+--- gcc-4.0.2/zlib/contrib/ada/test.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/test.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $
++-- $Id: test.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ -- The program has a few aims.
+ -- 1. Test ZLib.Ada95 thick binding functionality.
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib.adb
+--- gcc-4.0.2/zlib/contrib/ada/zlib.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: zlib.adb,v 1.19 2003/07/13 16:02:19 vagul Exp $
++-- $Id: zlib.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ with Ada.Exceptions;
+ with Ada.Unchecked_Conversion;
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib.ads gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib.ads
+--- gcc-4.0.2/zlib/contrib/ada/zlib.ads 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib.ads 2005-07-15 16:26:03.000000000 +0200
+@@ -25,7 +25,7 @@
+ -- covered by the GNU Public License. --
+ ------------------------------------------------------------------------------
+
+--- $Id: zlib.ads,v 1.17 2003/08/12 13:19:07 vagul Exp $
++-- $Id: zlib.ads 3484 2005-07-15 14:26:03Z rpedersen $
+
+ with Ada.Streams;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib-streams.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-streams.adb
+--- gcc-4.0.2/zlib/contrib/ada/zlib-streams.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-streams.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: zlib-streams.adb,v 1.9 2003/08/12 13:15:31 vagul Exp $
++-- $Id: zlib-streams.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ with Ada.Unchecked_Deallocation;
+
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib-streams.ads gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-streams.ads
+--- gcc-4.0.2/zlib/contrib/ada/zlib-streams.ads 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-streams.ads 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: zlib-streams.ads,v 1.11 2003/08/12 13:15:31 vagul Exp $
++-- $Id: zlib-streams.ads 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package ZLib.Streams is
+
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib-thin.adb gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-thin.adb
+--- gcc-4.0.2/zlib/contrib/ada/zlib-thin.adb 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-thin.adb 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: zlib-thin.adb,v 1.6 2003/01/21 15:26:37 vagul Exp $
++-- $Id: zlib-thin.adb 3484 2005-07-15 14:26:03Z rpedersen $
+
+ package body ZLib.Thin is
+
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/contrib/ada/zlib-thin.ads gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-thin.ads
+--- gcc-4.0.2/zlib/contrib/ada/zlib-thin.ads 2004-10-11 19:44:23.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/contrib/ada/zlib-thin.ads 2005-07-15 16:26:03.000000000 +0200
+@@ -6,7 +6,7 @@
+ -- Open source license information is in the zlib.ads file. --
+ ----------------------------------------------------------------
+
+--- $Id: zlib-thin.ads,v 1.8 2003/08/12 13:16:51 vagul Exp $
++-- $Id: zlib-thin.ads 3484 2005-07-15 14:26:03Z rpedersen $
+
+ with Interfaces.C.Strings;
+ with System.Address_To_Access_Conversions;
+diff -Nrup --ignore-space-change gcc-4.0.2/zlib/zconf.in.h gcc-4.0.2-atmel.0.99.2/zlib/zconf.in.h
+--- gcc-4.0.2/zlib/zconf.in.h 2004-10-11 19:44:14.000000000 +0200
++++ gcc-4.0.2-atmel.0.99.2/zlib/zconf.in.h 2005-07-15 16:26:03.000000000 +0200
+@@ -3,7 +3,7 @@
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+-/* @(#) $Id$ */
++/* @(#) $Id: zconf.in.h 3484 2005-07-15 14:26:03Z rpedersen $ */
+
+ #ifndef ZCONF_H
+ #define ZCONF_H
diff --git a/packages/gcc/gcc-4.0.2/libstdc++-configure.patch b/packages/gcc/gcc-4.0.2/libstdc++-configure.patch
new file mode 100644
index 0000000000..8dc613104d
--- /dev/null
+++ b/packages/gcc/gcc-4.0.2/libstdc++-configure.patch
@@ -0,0 +1,10 @@
+--- /tmp/configure 2007-06-02 09:26:29.000000000 +0200
++++ gcc-4.0.2/libstdc++-v3/configure 2007-06-02 09:26:40.135215000 +0200
+@@ -101472,7 +101472,6 @@
+ _ACEOF
+
+ fi
+-done
+
+ fi
+
diff --git a/packages/gcc/gcc-4.1.1/gcc-ignore-cache.patch b/packages/gcc/gcc-4.1.1/gcc-ignore-cache.patch
new file mode 100644
index 0000000000..396b4b2345
--- /dev/null
+++ b/packages/gcc/gcc-4.1.1/gcc-ignore-cache.patch
@@ -0,0 +1,15 @@
+--- /gcc/orig-configure 2007-03-11 21:50:28.000000000 +0200
++++ /gcc/configure 2007-03-11 21:53:27.000000000 +0200
+@@ -12272,9 +12272,11 @@
+ esac
+ saved_CFLAGS="${CFLAGS}"
+ CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
++ CONFIG_SITE=""
+ ${realsrcdir}/configure \
+ --enable-languages=${enable_languages-all} \
+- --target=$target_alias --host=$build_alias --build=$build_alias
++ --target=$target_alias --host=$build_alias --build=$build_alias \
++ --cache-file=./tmp-cache
+ CFLAGS="${saved_CFLAGS}"
+
+ # We just finished tests for the build machine, so rename
diff --git a/packages/gcc/gcc-4.1.1/ppc-gcc-41-20060515.patch b/packages/gcc/gcc-4.1.1/ppc-gcc-41-20060515.patch
new file mode 100644
index 0000000000..166e79c7e9
--- /dev/null
+++ b/packages/gcc/gcc-4.1.1/ppc-gcc-41-20060515.patch
@@ -0,0 +1,2225 @@
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/ChangeLog gcc-41-20060515/gcc/ChangeLog
+--- gcc-41-20060515.orig/gcc/ChangeLog 2006-05-15 11:14:20.000000000 -0500
++++ gcc-41-20060515/gcc/ChangeLog 2006-05-15 14:00:27.693964000 -0500
+@@ -724,6 +724,51 @@
+ * reload1.c (choose_reload_regs): Added call of regno_clobbered_p
+ with new meaning of SETS.
+
++2006-02-14 Jakub Jelinek <jakub@redhat.com>
++ Aldy Hernandez <aldyh@redhat.com>
++
++ PR target/25864
++ * configure.ac: Add --with{out}-long-double-128 configure option.
++ (TARGET_DEFAULT_LONG_DOUBLE_128): New test.
++ * configure: Rebuilt.
++ * config.in: Rebuilt.
++ * doc/install.texi (Options specification): Document
++ --with-long-double-128.
++
++ * config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file.
++ (sparc64-*-linux*): Likewise.
++ * config/sparc/t-linux64 (SHLIB_MAPFILES): Removed.
++ * config/sparc/t-linux: New file.
++ * config/sparc/libgcc-sparc-glibc.ver (__fixtfdi, __fixunstfdi,
++ __floatditf): Export at GCC_LDBL_3.0 if -m32 -mlong-double-128.
++ (__divtc3, __multc3, __powitf2): Export at GCC_LDBL_4.0.0 if
++ -m32 -mlong-double-128.
++
++ * config.gcc (alpha*-*-linux*): Add alpha/t-linux to tmake_file.
++ * config/alpha/t-linux: New file.
++ * config/alpha/libgcc-alpha-ldbl.ver: New file.
++
++ * config/sparc/linux.h (TARGET_OS_CPP_BUILTINS): Define
++ __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128.
++ (CPP_SUBTARGET_SPEC): Don't add -D__LONG_DOUBLE_128__ here.
++ * config/sparc/linux64.h (TARGET_OS_CPP_BUILTINS): Define
++ __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128 and TARGET_ARCH32.
++ (CPP_ARCH32_SPEC): Remove.
++
++ * config/s390/s390.c (override_options): Handle
++ TARGET_DEFAULT_LONG_DOUBLE_128.
++
++ * config/alpha/alpha.c (override_options): Handle
++ TARGET_DEFAULT_LONG_DOUBLE_128.
++
++ * config/sparc/sparc.c (sparc_override_options): Handle
++ TARGET_DEFAULT_LONG_DOUBLE_128.
++
++ * config/rs6000/linux.h [TARGET_DEFAULT_LONG_DOUBLE_128]
++ (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
++ * config/rs6000/linux64.h [TARGET_DEFAULT_LONG_DOUBLE_128]
++ (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
++
+ 2006-02-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * doc/install.texi: Add missing `@samp'.
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/alpha/alpha.c gcc-41-20060515/gcc/config/alpha/alpha.c
+--- gcc-41-20060515.orig/gcc/config/alpha/alpha.c 2006-05-15 11:13:49.000000000 -0500
++++ gcc-41-20060515/gcc/config/alpha/alpha.c 2006-05-15 13:47:27.566272961 -0500
+@@ -516,6 +516,11 @@ override_options (void)
+ REAL_MODE_FORMAT (DFmode) = &vax_g_format;
+ REAL_MODE_FORMAT (TFmode) = NULL;
+ }
++
++#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
++ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
++ target_flags |= MASK_LONG_DOUBLE_128;
++#endif
+ }
+
+ /* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/alpha/libgcc-alpha-ldbl.ver gcc-41-20060515/gcc/config/alpha/libgcc-alpha-ldbl.ver
+--- gcc-41-20060515.orig/gcc/config/alpha/libgcc-alpha-ldbl.ver 1969-12-31 18:00:00.000000000 -0600
++++ gcc-41-20060515/gcc/config/alpha/libgcc-alpha-ldbl.ver 2006-05-15 13:47:27.566272961 -0500
+@@ -0,0 +1,32 @@
++%ifdef __LONG_DOUBLE_128__
++
++# long double 128 bit support in libgcc_s.so.1 is only available
++# when configured with --with-long-double-128. Make sure all the
++# symbols are available at @@GCC_LDBL_* versions to make it clear
++# there is a configurable symbol set.
++
++%exclude {
++ __fixtfdi
++ __fixunstfdi
++ __floatditf
++
++ __divtc3
++ __multc3
++ __powitf2
++}
++
++%inherit GCC_LDBL_3.0 GCC_3.0
++GCC_LDBL_3.0 {
++ __fixtfdi
++ __fixunstfdi
++ __floatditf
++}
++
++%inherit GCC_LDBL_4.0.0 GCC_4.0.0
++GCC_LDBL_4.0.0 {
++ __divtc3
++ __multc3
++ __powitf2
++}
++
++%endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/alpha/t-linux gcc-41-20060515/gcc/config/alpha/t-linux
+--- gcc-41-20060515.orig/gcc/config/alpha/t-linux 1969-12-31 18:00:00.000000000 -0600
++++ gcc-41-20060515/gcc/config/alpha/t-linux 2006-05-15 13:47:27.567272807 -0500
+@@ -0,0 +1 @@
++SHLIB_MAPFILES += $(srcdir)/config/alpha/libgcc-alpha-ldbl.ver
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/rs6000/linux64.h gcc-41-20060515/gcc/config/rs6000/linux64.h
+--- gcc-41-20060515.orig/gcc/config/rs6000/linux64.h 2006-05-15 11:14:02.000000000 -0500
++++ gcc-41-20060515/gcc/config/rs6000/linux64.h 2006-05-15 13:47:27.568272653 -0500
+@@ -570,3 +570,8 @@ while (0)
+ #endif
+
+ #define POWERPC_LINUX
++
++/* ppc{32,64} linux has 128-bit long double support in glibc 2.4 and later. */
++#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
++#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
++#endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/rs6000/linux.h gcc-41-20060515/gcc/config/rs6000/linux.h
+--- gcc-41-20060515.orig/gcc/config/rs6000/linux.h 2006-05-15 11:14:02.000000000 -0500
++++ gcc-41-20060515/gcc/config/rs6000/linux.h 2006-05-15 13:47:27.567272807 -0500
+@@ -120,3 +120,8 @@
+ #endif
+
+ #define POWERPC_LINUX
++
++/* ppc linux has 128-bit long double support in glibc 2.4 and later. */
++#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
++#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
++#endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/s390/s390.c gcc-41-20060515/gcc/config/s390/s390.c
+--- gcc-41-20060515.orig/gcc/config/s390/s390.c 2006-05-15 11:13:50.000000000 -0500
++++ gcc-41-20060515/gcc/config/s390/s390.c 2006-05-15 13:47:27.574271730 -0500
+@@ -1415,6 +1415,11 @@ override_options (void)
+ }
+ else if (s390_stack_guard)
+ error ("-mstack-guard implies use of -mstack-size");
++
++#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
++ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
++ target_flags |= MASK_LONG_DOUBLE_128;
++#endif
+ }
+
+ /* Map for smallest class containing reg regno. */
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/libgcc-sparc-glibc.ver gcc-41-20060515/gcc/config/sparc/libgcc-sparc-glibc.ver
+--- gcc-41-20060515.orig/gcc/config/sparc/libgcc-sparc-glibc.ver 2006-05-15 11:13:55.000000000 -0500
++++ gcc-41-20060515/gcc/config/sparc/libgcc-sparc-glibc.ver 2006-05-15 13:47:27.574271730 -0500
+@@ -26,3 +26,36 @@ GLIBC_VER {
+ __frame_state_for
+ __register_frame_info_table
+ }
++
++%if !defined (__arch64__) && defined (__LONG_DOUBLE_128__)
++
++# long double 128 bit support from 32-bit libgcc_s.so.1 is only available
++# when configured with --with-long-double-128. Make sure all the
++# symbols are available at @@GCC_LDBL_* versions to make it clear
++# there is a configurable symbol set.
++
++%exclude {
++ __fixtfdi
++ __fixunstfdi
++ __floatditf
++
++ __divtc3
++ __multc3
++ __powitf2
++}
++
++%inherit GCC_LDBL_3.0 GCC_3.0
++GCC_LDBL_3.0 {
++ __fixtfdi
++ __fixunstfdi
++ __floatditf
++}
++
++%inherit GCC_LDBL_4.0.0 GCC_4.0.0
++GCC_LDBL_4.0.0 {
++ __divtc3
++ __multc3
++ __powitf2
++}
++
++%endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/linux64.h gcc-41-20060515/gcc/config/sparc/linux64.h
+--- gcc-41-20060515.orig/gcc/config/sparc/linux64.h 2006-05-15 11:13:55.000000000 -0500
++++ gcc-41-20060515/gcc/config/sparc/linux64.h 2006-05-15 13:47:27.576271422 -0500
+@@ -20,22 +20,24 @@ along with GCC; see the file COPYING. I
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+-#define TARGET_OS_CPP_BUILTINS() \
+- do \
+- { \
+- builtin_define_std ("unix"); \
+- builtin_define_std ("linux"); \
+- builtin_define ("_LONGLONG"); \
+- builtin_define ("__gnu_linux__"); \
+- builtin_assert ("system=linux"); \
+- builtin_assert ("system=unix"); \
+- builtin_assert ("system=posix"); \
+- if (flag_pic) \
+- { \
+- builtin_define ("__PIC__"); \
+- builtin_define ("__pic__"); \
+- } \
+- } \
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ builtin_define_std ("unix"); \
++ builtin_define_std ("linux"); \
++ builtin_define ("_LONGLONG"); \
++ builtin_define ("__gnu_linux__"); \
++ builtin_assert ("system=linux"); \
++ builtin_assert ("system=unix"); \
++ builtin_assert ("system=posix"); \
++ if (flag_pic) \
++ { \
++ builtin_define ("__PIC__"); \
++ builtin_define ("__pic__"); \
++ } \
++ if (TARGET_ARCH32 && TARGET_LONG_DOUBLE_128) \
++ builtin_define ("__LONG_DOUBLE_128__"); \
++ } \
+ while (0)
+
+ /* Don't assume anything about the header files. */
+@@ -59,13 +61,6 @@ Boston, MA 02110-1301, USA. */
+ #undef ASM_CPU_DEFAULT_SPEC
+ #define ASM_CPU_DEFAULT_SPEC "-Av9a"
+
+-#ifdef SPARC_BI_ARCH
+-
+-#undef CPP_ARCH32_SPEC
+-#define CPP_ARCH32_SPEC "%{mlong-double-128:-D__LONG_DOUBLE_128__}"
+-
+-#endif
+-
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
+ the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+ provides part of the support for getting C++ file-scope static
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/linux.h gcc-41-20060515/gcc/config/sparc/linux.h
+--- gcc-41-20060515.orig/gcc/config/sparc/linux.h 2006-05-15 11:13:55.000000000 -0500
++++ gcc-41-20060515/gcc/config/sparc/linux.h 2006-05-15 13:47:27.575271576 -0500
+@@ -23,17 +23,19 @@ Boston, MA 02110-1301, USA. */
+ #define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+- builtin_define_std ("unix"); \
+- builtin_define_std ("linux"); \
+- builtin_define ("__gnu_linux__"); \
+- builtin_assert ("system=linux"); \
+- builtin_assert ("system=unix"); \
+- builtin_assert ("system=posix"); \
+- if (flag_pic) \
+- { \
+- builtin_define ("__PIC__"); \
+- builtin_define ("__pic__"); \
+- } \
++ builtin_define_std ("unix"); \
++ builtin_define_std ("linux"); \
++ builtin_define ("__gnu_linux__"); \
++ builtin_assert ("system=linux"); \
++ builtin_assert ("system=unix"); \
++ builtin_assert ("system=posix"); \
++ if (flag_pic) \
++ { \
++ builtin_define ("__PIC__"); \
++ builtin_define ("__pic__"); \
++ } \
++ if (TARGET_LONG_DOUBLE_128) \
++ builtin_define ("__LONG_DOUBLE_128__"); \
+ } \
+ while (0)
+
+@@ -100,8 +102,7 @@ Boston, MA 02110-1301, USA. */
+
+ #undef CPP_SUBTARGET_SPEC
+ #define CPP_SUBTARGET_SPEC \
+-"%{posix:-D_POSIX_SOURCE} \
+-%{pthread:-D_REENTRANT} %{mlong-double-128:-D__LONG_DOUBLE_128__}"
++"%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
+
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/sparc.c gcc-41-20060515/gcc/config/sparc/sparc.c
+--- gcc-41-20060515.orig/gcc/config/sparc/sparc.c 2006-05-15 11:13:55.000000000 -0500
++++ gcc-41-20060515/gcc/config/sparc/sparc.c 2006-05-15 13:47:27.581270653 -0500
+@@ -790,6 +790,11 @@ sparc_override_options (void)
+ sparc_costs = &ultrasparc3_costs;
+ break;
+ };
++
++#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
++ if (!(target_flags_explicit & MASK_LONG_DOUBLE_128))
++ target_flags |= MASK_LONG_DOUBLE_128;
++#endif
+ }
+
+ #ifdef SUBTARGET_ATTRIBUTE_TABLE
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/t-linux gcc-41-20060515/gcc/config/sparc/t-linux
+--- gcc-41-20060515.orig/gcc/config/sparc/t-linux 1969-12-31 18:00:00.000000000 -0600
++++ gcc-41-20060515/gcc/config/sparc/t-linux 2006-05-15 13:47:27.582270499 -0500
+@@ -0,0 +1,5 @@
++# Override t-slibgcc-elf-ver to export some libgcc symbols with
++# the symbol versions that glibc used.
++# Avoid the t-linux version file.
++SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
++ $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config/sparc/t-linux64 gcc-41-20060515/gcc/config/sparc/t-linux64
+--- gcc-41-20060515.orig/gcc/config/sparc/t-linux64 2006-05-15 11:13:55.000000000 -0500
++++ gcc-41-20060515/gcc/config/sparc/t-linux64 2006-05-15 13:47:27.582270499 -0500
+@@ -8,12 +8,6 @@ INSTALL_LIBGCC = install-multilib
+ EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
+ crtfastmath.o
+
+-# Override t-slibgcc-elf-ver to export some libgcc symbols with
+-# the symbol versions that glibc used.
+-# Avoid the t-linux version file.
+-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \
+- $(srcdir)/config/sparc/libgcc-sparc-glibc.ver
+-
+ CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \
+ -print-multi-os-directory) \
+ = x../lib64; then echo -mcmodel=medany; fi`
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config.gcc gcc-41-20060515/gcc/config.gcc
+--- gcc-41-20060515.orig/gcc/config.gcc 2006-05-15 11:14:20.000000000 -0500
++++ gcc-41-20060515/gcc/config.gcc 2006-05-15 13:47:27.555274654 -0500
+@@ -568,7 +568,7 @@ alpha*-*-unicosmk*)
+ alpha*-*-linux*)
+ tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
+ target_cpu_default="MASK_GAS"
+- tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
++ tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee alpha/t-linux"
+ ;;
+ alpha*-*-gnu*)
+ target_cpu_default="MASK_GAS"
+@@ -2056,7 +2056,7 @@ sparc-*-elf*)
+ sparc-*-linux*) # SPARC's running GNU/Linux, libc6
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
+ extra_options="${extra_options} sparc/long-double-switch.opt"
+- tmake_file="${tmake_file} sparc/t-crtfm"
++ tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm"
+ ;;
+ sparc-*-rtems*)
+ tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h"
+@@ -2175,7 +2175,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
+ sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
+ tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
+ extra_options="${extra_options} sparc/long-double-switch.opt"
+- tmake_file="${tmake_file} sparc/t-linux64 sparc/t-crtfm"
++ tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
+ ;;
+ sparc64-*-netbsd*)
+ tm_file="sparc/biarch64.h ${tm_file}"
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/config.in gcc-41-20060515/gcc/config.in
+--- gcc-41-20060515.orig/gcc/config.in 2006-05-15 11:14:20.000000000 -0500
++++ gcc-41-20060515/gcc/config.in 2006-05-15 13:47:27.559274038 -0500
+@@ -1277,6 +1277,12 @@
+ #endif
+
+
++/* Define if TFmode long double should be the default */
++#ifndef USED_FOR_TARGET
++#undef TARGET_DEFAULT_LONG_DOUBLE_128
++#endif
++
++
+ /* Define if your target C library provides stack protector support */
+ #ifndef USED_FOR_TARGET
+ #undef TARGET_LIBC_PROVIDES_SSP
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/configure gcc-41-20060515/gcc/configure
+--- gcc-41-20060515.orig/gcc/configure 2006-05-15 11:14:19.000000000 -0500
++++ gcc-41-20060515/gcc/configure 2006-05-15 13:47:27.594268652 -0500
+@@ -931,6 +931,7 @@ Optional Packages:
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-system-libunwind use installed libunwind
++ --with-long-double-128 Use 128-bit long double by default.
+ --with-gc={page,zone} choose the garbage collection mechanism to use
+ with the compiler
+ --with-system-zlib use installed libz
+@@ -7492,7 +7493,7 @@ if test "${gcc_cv_prog_makeinfo_modern+s
+ else
+ ac_prog_version=`$MAKEINFO --version 2>&1 |
+ sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+- echo "configure:7495: version of makeinfo is $ac_prog_version" >&5
++ echo "configure:7496: version of makeinfo is $ac_prog_version" >&5
+ case $ac_prog_version in
+ '') gcc_cv_prog_makeinfo_modern=no;;
+ 4.[2-9]*)
+@@ -16213,6 +16214,46 @@ _ACEOF
+
+ fi
+
++# Check if TFmode long double should be used by default or not.
++# Some glibc targets used DFmode long double, but with glibc 2.4
++# and later they can use TFmode.
++case "$target" in
++ powerpc*-*-*gnu* | \
++ sparc*-*-linux* | \
++ s390*-*-linux* | \
++ alpha*-*-linux*)
++
++# Check whether --with-long-double-128 or --without-long-double-128 was given.
++if test "${with_long_double_128+set}" = set; then
++ withval="$with_long_double_128"
++ gcc_cv_target_ldbl128="$with_long_double_128"
++else
++ gcc_cv_target_ldbl128=no
++ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
++ if test "x$with_sysroot" = x; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
++ elif test "x$with_sysroot" = xyes; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
++ else
++ glibc_header_dir="${with_sysroot}/usr/include"
++ fi
++ else
++ glibc_header_dir=/usr/include
++ fi
++ grep '^ *#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
++ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
++ && gcc_cv_target_ldbl128=yes
++fi;
++ ;;
++esac
++if test x$gcc_cv_target_ldbl128 = xyes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define TARGET_DEFAULT_LONG_DOUBLE_128 1
++_ACEOF
++
++fi
++
+ # Find out what GC implementation we want, or may, use.
+
+ # Check whether --with-gc or --without-gc was given.
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/configure.ac gcc-41-20060515/gcc/configure.ac
+--- gcc-41-20060515.orig/gcc/configure.ac 2006-05-15 11:14:20.000000000 -0500
++++ gcc-41-20060515/gcc/configure.ac 2006-05-15 13:47:27.597400000 -0500
+@@ -3130,6 +3130,39 @@ if test x$gcc_cv_libc_provides_ssp = xye
+ [Define if your target C library provides stack protector support])
+ fi
+
++# Check if TFmode long double should be used by default or not.
++# Some glibc targets used DFmode long double, but with glibc 2.4
++# and later they can use TFmode.
++case "$target" in
++ powerpc*-*-*gnu* | \
++ sparc*-*-linux* | \
++ s390*-*-linux* | \
++ alpha*-*-linux*)
++ AC_ARG_WITH(long-double-128,
++[ --with-long-double-128 Use 128-bit long double by default.],
++ gcc_cv_target_ldbl128="$with_long_double_128",
++ [gcc_cv_target_ldbl128=no
++ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
++ if test "x$with_sysroot" = x; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
++ elif test "x$with_sysroot" = xyes; then
++ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
++ else
++ glibc_header_dir="${with_sysroot}/usr/include"
++ fi
++ else
++ glibc_header_dir=/usr/include
++ fi
++ grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
++ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
++ && gcc_cv_target_ldbl128=yes])
++ ;;
++esac
++if test x$gcc_cv_target_ldbl128 = xyes; then
++ AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
++ [Define if TFmode long double should be the default])
++fi
++
+ # Find out what GC implementation we want, or may, use.
+ AC_ARG_WITH(gc,
+ [ --with-gc={page,zone} choose the garbage collection mechanism to use
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/gcc/doc/install.texi gcc-41-20060515/gcc/doc/install.texi
+--- gcc-41-20060515.orig/gcc/doc/install.texi 2006-05-15 11:10:10.000000000 -0500
++++ gcc-41-20060515/gcc/doc/install.texi 2006-05-15 13:47:27.600399538 -0500
+@@ -1224,6 +1224,14 @@ error message.
+ All support for systems which have been obsoleted in one release of GCC
+ is removed entirely in the next major release, unless someone steps
+ forward to maintain the port.
++
++@item --with-long-double-128
++Specify if @code{long double} type should be 128-bit by default on selected
++GNU/Linux architectures. If using @code{--without-long-double-128},
++@code{long double} will be by default 64-bit, the same as @code{double} type.
++When neither of these configure options are used, the default will be
++128-bit @code{long double} when built against GNU C Library 2.4 and later,
++64-bit @code{long double} otherwise.
+ @end table
+
+ @subheading Cross-Compiler-Specific Options
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/ChangeLog gcc-41-20060515/libstdc++-v3/ChangeLog
+--- gcc-41-20060515.orig/libstdc++-v3/ChangeLog 2006-05-15 11:15:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/ChangeLog 2006-05-15 14:02:07.401662657 -0500
+@@ -153,6 +153,64 @@
+ Likewise.
+ * docs/html/ext/pb_assoc/tree_assoc_cntnr_node_iterator.html: Likewise.
+
++2006-02-07 Jakub Jelinek <jakub@redhat.com>
++ Benjamin Kosnik <bkoz@redhat.com>
++
++ PR target/25864
++ * configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
++ If true, set also port_specific_symbol_files and create
++ as_symver_specs.
++ (GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
++ * configure: Rebuilt.
++ * config.h.in: Rebuilt.
++ * config/os/gnu-linux/ldbl-extra.ver: New file.
++ * config/linker-map.gnu: Make sure no __float128 symbols are
++ exported.
++ * include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
++ _GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
++ _GLIBCXX_END_LDBL_NAMESPACE): Define.
++ * include/bits/localefwd.h: Use them to conditionally scope facets.
++ * include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
++ with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
++ [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
++ [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
++ [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
++ [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
++ * include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
++ with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
++ (std::money_get::__do_get, std::money_put::__do_put,
++ std::num_get::__do_get, std::num_put::__do_put): New
++ specializations.
++ * include/Makefile.am: Conditionally define
++ _GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
++ * include/Makefile.in: Regenerate.
++ * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
++ _GLIBCXX_SYNC_ID): Define, use them.
++ * src/compatibility-ldbl.cc: New file.
++ * src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
++ symbols.
++ * src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
++ * config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
++ Likewise.
++ * config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
++ Likewise.
++ * src/Makefile.am (libstdc++-symbol.ver): Append instead of
++ insert in the middle if port specific symbol file requests it.
++ (ldbl_compat_sources): New variable.
++ (sources): Use it.
++ (compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
++ * src/Makefile.in: Rebuilt.
++ * testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
++ GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
++
+ 2006-02-07 Paolo Carlini <pcarlini@suse.de>
+
+ * include/tr1/hashtable: Trivial formatting fixes.
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/config/linker-map.gnu gcc-41-20060515/libstdc++-v3/config/linker-map.gnu
+--- gcc-41-20060515.orig/libstdc++-v3/config/linker-map.gnu 2006-05-15 11:15:41.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/config/linker-map.gnu 2006-05-15 13:47:27.603399076 -0500
+@@ -1,6 +1,6 @@
+ ## Linker script for GNU ld 2.13.91+ only.
+ ##
+-## Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++## Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ ##
+ ## This file is part of the libstdc++ version 3 distribution.
+ ##
+@@ -44,7 +44,10 @@ GLIBCXX_3.4 {
+ std::basic_[j-n]*;
+ std::basic_o[a-e]*;
+ # std::basic_ofstream;
+- std::basic_o[g-z]*;
++# std::basic_o[g-z]*;
++ std::basic_o[g-r]*;
++ std::basic_ostr[a-d]*;
++ std::basic_ostr[f-z]*;
+ std::basic_[p-r]*;
+ std::basic_streambuf*;
+ # std::basic_string
+@@ -88,7 +91,14 @@ GLIBCXX_3.4 {
+ std::locale::_[J-Ra-z]*;
+ std::locale::_S_normalize_category*;
+ std::locale::_[T-Za-z]*;
+- std::[A-Zm-r]*;
++# std::[A-Zm-r]*;
++ std::[A-Zmp-r]*;
++ std::n[^u]*;
++ std::nu[^m]*;
++ std::num[^e]*;
++ std::ostrstream*;
++ std::out_of_range*;
++ std::overflow_error*;
+ std::set_new_handler*;
+ std::set_terminate*;
+ std::set_unexpected*;
+@@ -256,7 +266,7 @@ GLIBCXX_3.4 {
+ _ZNSi[0-9][a-h]*;
+ _ZNSi[0-9][j-z]*;
+ _ZNSi6ignoreE[il][il];
+- _ZNSirsE*;
++ _ZNSirsE*[^g];
+
+ # std::basic_istream<wchar_t>
+ _ZNSt13basic_istreamIwSt11char_traitsIwEEC*;
+@@ -265,7 +275,7 @@ GLIBCXX_3.4 {
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][a-h]*;
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][j-z]*;
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][ijlm];
+- _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*;
++ _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*[^g];
+
+ # std::istream operators and inserters
+ _ZSt7getlineI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_istream*;
+@@ -277,6 +287,37 @@ GLIBCXX_3.4 {
+ _ZStrsIe[cw]St11char_traitsI[cw]EERSt13basic_istream*;
+ _ZStrsIf[cw]St11char_traitsI[cw]EERSt13basic_istream*;
+
++ # std::basic_ostream<char>
++ _ZNSoC*;
++ _ZNSoD*;
++ _ZNKSo6sentrycvbEv;
++ _ZNSo8_M_write*;
++ _ZNSo[0-9][a-z]*;
++ _ZNSolsE*[^g];
++
++ # std::basic_ostream<wchar_t>
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEED*;
++ _ZNKSt13basic_ostreamIwSt11char_traitsIwEE[0-9][a-z]*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpE*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKw*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentry*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_write*;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^g];
++
++ # std::ostream operators and inserters
++ _ZSt4end[ls]I[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZSt5flushI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZStlsI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZStlsI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_ostream*;
++ _ZStlsISt11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZStlsId[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZStlsIe[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++ _ZStlsIf[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
++
+ # std::locale destructors
+ _ZNSt6localeD*;
+
+@@ -292,14 +333,23 @@ GLIBCXX_3.4 {
+ _ZNSt8ios_base4InitD*;
+
+ # bool std::has_facet
+- _ZSt9has_facet*;
++ _ZSt9has_facetIS*;
+
+ # std::num_get
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+
++ # std::num_put
++ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
++
+ # std::money_get
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+
++ # std::money_put
++ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
++
++ # std::numeric_limits
++ _ZNSt14numeric_limitsI[^g]*;
++
+ # std::_Rb_tree
+ _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
+ _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base;
+@@ -327,7 +377,7 @@ GLIBCXX_3.4 {
+ _ZNSt12__basic_fileIcED*;
+
+ # std::__convert_to_v
+- _ZSt14__convert_to_v*;
++ _ZSt14__convert_to_vI[^g]*;
+
+ # __gnu_cxx::stdio_sync_filebuf
+ _ZTVN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE;
+@@ -399,7 +449,8 @@ GLIBCXX_3.4 {
+ _ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE;
+
+ # function-scope static objects requires a guard variable.
+- _ZGVNSt*;
++ _ZGVNSt[^1]*;
++ _ZGVNSt1[^7]*;
+
+ # virtual function thunks
+ _ZThn8_NS*;
+@@ -665,9 +716,9 @@ CXXABI_1.3 {
+ _ZTVN10__cxxabiv121__vmi_class_type_infoE;
+
+ # typeinfo structure (and some names)
+- _ZTI[a-z];
+- _ZTIP[a-z];
+- _ZTIPK[a-z];
++ _ZTI[a-fh-z];
++ _ZTIP[a-fh-z];
++ _ZTIPK[a-fh-z];
+ _ZTIN10__cxxabiv117__array_type_infoE;
+ _ZTIN10__cxxabiv117__class_type_infoE;
+ _ZTIN10__cxxabiv116__enum_type_infoE;
+@@ -680,9 +731,9 @@ CXXABI_1.3 {
+ _ZTIN10__cxxabiv121__vmi_class_type_infoE;
+
+ # typeinfo name
+- _ZTS[a-z];
+- _ZTSP[a-z];
+- _ZTSPK[a-z];
++ _ZTS[a-fh-z];
++ _ZTSP[a-fh-z];
++ _ZTSPK[a-fh-z];
+ _ZTSN10__cxxabiv117__array_type_infoE;
+ _ZTSN10__cxxabiv117__class_type_infoE;
+ _ZTSN10__cxxabiv116__enum_type_infoE;
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/config/locale/generic/c_locale.cc gcc-41-20060515/libstdc++-v3/config/locale/generic/c_locale.cc
+--- gcc-41-20060515.orig/libstdc++-v3/config/locale/generic/c_locale.cc 2006-05-15 11:15:39.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/config/locale/generic/c_locale.cc 2006-05-15 13:47:27.605398768 -0500
+@@ -1,6 +1,6 @@
+ // Wrapper for underlying C-language localization -*- C++ -*-
+
+-// Copyright (C) 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -168,3 +168,10 @@ namespace std
+ {
+ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi);
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/config/locale/gnu/c_locale.cc gcc-41-20060515/libstdc++-v3/config/locale/gnu/c_locale.cc
+--- gcc-41-20060515.orig/libstdc++-v3/config/locale/gnu/c_locale.cc 2006-05-15 11:15:39.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/config/locale/gnu/c_locale.cc 2006-05-15 13:47:27.606398615 -0500
+@@ -1,6 +1,6 @@
+ // Wrapper for underlying C-language localization -*- C++ -*-
+
+-// Copyright (C) 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -132,3 +132,10 @@ namespace std
+ {
+ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl)))
++_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct);
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver gcc-41-20060515/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver
+--- gcc-41-20060515.orig/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver 1969-12-31 18:00:00.000000000 -0600
++++ gcc-41-20060515/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver 2006-05-15 13:47:27.606398615 -0500
+@@ -0,0 +1,19 @@
++# Appended to version file.
++
++GLIBCXX_LDBL_3.4 {
++ _ZNSt14numeric_limitsIg*;
++ _ZNSirsERg;
++ _ZNSolsEg;
++ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg;
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg;
++ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP*;
++ _ZStlsIg[cw]St11char_traitsI[cw]EERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E;
++ _ZStrsIg[cw]St11char_traitsI[cw]EERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E;
++ *__gnu_cxx_ldbl128*;
++};
++
++CXXABI_LDBL_1.3 {
++ _ZT[IS]g;
++ _ZT[IS]Pg;
++ _ZT[IS]PKg;
++};
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/config.h.in gcc-41-20060515/libstdc++-v3/config.h.in
+--- gcc-41-20060515.orig/libstdc++-v3/config.h.in 2006-05-15 11:15:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/config.h.in 2006-05-15 13:47:27.601399384 -0500
+@@ -658,6 +658,9 @@
+ /* Define to 1 if a full hosted library is built, or 0 if freestanding. */
+ #undef _GLIBCXX_HOSTED
+
++/* Define if compatibility should be provided for -mlong-double-64. */
++#undef _GLIBCXX_LONG_DOUBLE_COMPAT
++
+ /* Define if ptrdiff_t is int. */
+ #undef _GLIBCXX_PTRDIFF_T_IS_INT
+
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/configure gcc-41-20060515/libstdc++-v3/configure
+--- gcc-41-20060515.orig/libstdc++-v3/configure 2006-05-15 11:15:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/configure 2006-05-15 13:47:27.664389689 -0500
+@@ -309,7 +309,7 @@ ac_includes_default="\
+ # include <unistd.h>
+ #endif"
+
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_DARWIN_EXPORT_TRUE ENABLE_SYMVERS_DARWIN_EXPORT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_DARWIN_EXPORT_TRUE ENABLE_SYMVERS_DARWIN_EXPORT_FALSE GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+
+ # Initialize some variables set by options.
+@@ -87959,6 +87959,72 @@ echo "${ECHO_T}$glibcxx_ptrdiff_t_is_i"
+ echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;}
+
+
++ac_ldbl_compat=no
++case "$target" in
++ powerpc*-*-*gnu* | \
++ sparc*-*-linux* | \
++ s390*-*-linux* | \
++ alpha*-*-linux*)
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
++#error no need for long double compatibility
++#endif
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_ldbl_compat=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_ldbl_compat=no
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ if test "$ac_ldbl_compat" = yes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define _GLIBCXX_LONG_DOUBLE_COMPAT 1
++_ACEOF
++
++ port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
++ fi
++esac
++
++
+ # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
+
+ if $GLIBCXX_IS_NATIVE ; then
+@@ -88811,6 +88877,17 @@ fi
+
+
+
++if test $ac_ldbl_compat = yes; then
++ GLIBCXX_LDBL_COMPAT_TRUE=
++ GLIBCXX_LDBL_COMPAT_FALSE='#'
++else
++ GLIBCXX_LDBL_COMPAT_TRUE='#'
++ GLIBCXX_LDBL_COMPAT_FALSE=
++fi
++
++
++
++
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -89166,6 +89243,13 @@ echo "$as_me: error: conditional \"ENABL
+ Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
++if test -z "${GLIBCXX_LDBL_COMPAT_TRUE}" && test -z "${GLIBCXX_LDBL_COMPAT_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
+
+ : ${CONFIG_STATUS=./config.status}
+ ac_clean_files_save=$ac_clean_files
+@@ -89836,6 +89920,8 @@ s,@ENABLE_SYMVERS_GNU_TRUE@,$ENABLE_SYMV
+ s,@ENABLE_SYMVERS_GNU_FALSE@,$ENABLE_SYMVERS_GNU_FALSE,;t t
+ s,@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@,$ENABLE_SYMVERS_DARWIN_EXPORT_TRUE,;t t
+ s,@ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@,$ENABLE_SYMVERS_DARWIN_EXPORT_FALSE,;t t
++s,@GLIBCXX_LDBL_COMPAT_TRUE@,$GLIBCXX_LDBL_COMPAT_TRUE,;t t
++s,@GLIBCXX_LDBL_COMPAT_FALSE@,$GLIBCXX_LDBL_COMPAT_FALSE,;t t
+ s,@baseline_dir@,$baseline_dir,;t t
+ s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t
+ s,@ATOMIC_WORD_SRCDIR@,$ATOMIC_WORD_SRCDIR,;t t
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/configure.ac gcc-41-20060515/libstdc++-v3/configure.ac
+--- gcc-41-20060515.orig/libstdc++-v3/configure.ac 2006-05-15 11:15:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/configure.ac 2006-05-15 13:47:27.665389535 -0500
+@@ -281,6 +281,25 @@ fi
+ # This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
+ GLIBCXX_ENABLE_SYMVERS([yes])
+
++ac_ldbl_compat=no
++case "$target" in
++ powerpc*-*-*gnu* | \
++ sparc*-*-linux* | \
++ s390*-*-linux* | \
++ alpha*-*-linux*)
++ AC_TRY_COMPILE(, [
++#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
++#error no need for long double compatibility
++#endif
++ ], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
++ if test "$ac_ldbl_compat" = yes; then
++ AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
++ [Define if compatibility should be provided for -mlong-double-64.])
++ port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
++ fi
++esac
++GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes)
++
+ # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
+ GLIBCXX_CONFIGURE_TESTSUITE
+
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/bits/c++config gcc-41-20060515/libstdc++-v3/include/bits/c++config
+--- gcc-41-20060515.orig/libstdc++-v3/include/bits/c++config 2006-05-15 11:14:38.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/bits/c++config 2006-05-15 13:47:27.668389073 -0500
+@@ -1,6 +1,6 @@
+ // Predefined symbols and macros -*- C++ -*-
+
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -65,6 +65,26 @@ namespace std
+ # define _GLIBCXX_STD std
+ #endif
+
++/* Define if compatibility should be provided for -mlong-double-64. */
++#undef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++// XXX GLIBCXX_ABI Deprecated
++// Namespace associations for long double 128 mode.
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++# define _GLIBCXX_LDBL_NAMESPACE __gnu_cxx_ldbl128::
++# define _GLIBCXX_BEGIN_LDBL_NAMESPACE namespace __gnu_cxx_ldbl128 {
++# define _GLIBCXX_END_LDBL_NAMESPACE }
++namespace std
++{
++ namespace __gnu_cxx_ldbl128 { }
++ using namespace __gnu_cxx_ldbl128 __attribute__((__strong__));
++}
++#else
++# define _GLIBCXX_LDBL_NAMESPACE
++# define _GLIBCXX_BEGIN_LDBL_NAMESPACE
++# define _GLIBCXX_END_LDBL_NAMESPACE
++#endif
++
+ // Allow use of "export template." This is currently not a feature
+ // that g++ supports.
+ // #define _GLIBCXX_EXPORT_TEMPLATE 1
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/bits/locale_facets.h gcc-41-20060515/libstdc++-v3/include/bits/locale_facets.h
+--- gcc-41-20060515.orig/libstdc++-v3/include/bits/locale_facets.h 2006-05-15 11:14:38.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/bits/locale_facets.h 2006-05-15 13:47:27.673388304 -0500
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -1910,6 +1910,7 @@ namespace std
+ ~numpunct_byname() { }
+ };
+
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ /**
+ * @brief Facet for parsing number strings.
+ *
+@@ -2176,13 +2177,27 @@ namespace std
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ double&) const;
+
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ __do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
++ double&) const;
++#else
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ long double&) const;
++#endif
+
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ void*&) const;
++
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
++ long double&) const;
++#endif
+ //@}
+ };
+
+@@ -2438,17 +2453,30 @@ namespace std
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ __do_put(iter_type, ios_base&, char_type __fill, double __v) const;
++#else
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
++#endif
+
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
++
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ do_put(iter_type, ios_base&, char_type __fill, long double __v) const;
++#endif
+ //@}
+ };
+
+ template <typename _CharT, typename _OutIter>
+ locale::id num_put<_CharT, _OutIter>::id;
+
++_GLIBCXX_END_LDBL_NAMESPACE
+
+ /**
+ * @brief Facet for localized string comparison.
+@@ -3953,6 +3981,7 @@ namespace std
+ template<typename _CharT, bool _Intl>
+ const bool moneypunct_byname<_CharT, _Intl>::intl;
+
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ /**
+ * @brief Facet for parsing monetary amounts.
+ *
+@@ -4064,9 +4093,16 @@ namespace std
+ * value. This function is a hook for derived classes to change the
+ * value returned. @see get() for details.
+ */
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
++ ios_base::iostate& __err, double& __units) const;
++#else
+ virtual iter_type
+ do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+ ios_base::iostate& __err, long double& __units) const;
++#endif
+
+ /**
+ * @brief Read and parse a monetary value.
+@@ -4079,6 +4115,13 @@ namespace std
+ do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+ ios_base::iostate& __err, string_type& __digits) const;
+
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
++ ios_base::iostate& __err, long double& __units) const;
++#endif
++
+ template<bool _Intl>
+ iter_type
+ _M_extract(iter_type __s, iter_type __end, ios_base& __io,
+@@ -4191,9 +4234,16 @@ namespace std
+ * @param units Place to store result of parsing.
+ * @return Iterator after writing.
+ */
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++ double __units) const;
++#else
+ virtual iter_type
+ do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+ long double __units) const;
++#endif
+
+ /**
+ * @brief Format and output a monetary value.
+@@ -4217,6 +4267,13 @@ namespace std
+ do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+ const string_type& __digits) const;
+
++ // XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ virtual iter_type
++ do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++ long double __units) const;
++#endif
++
+ template<bool _Intl>
+ iter_type
+ _M_insert(iter_type __s, ios_base& __io, char_type __fill,
+@@ -4226,6 +4283,8 @@ namespace std
+ template<typename _CharT, typename _OutIter>
+ locale::id money_put<_CharT, _OutIter>::id;
+
++_GLIBCXX_END_LDBL_NAMESPACE
++
+ /**
+ * @brief Messages facet base class providing catalog typedef.
+ */
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/bits/locale_facets.tcc gcc-41-20060515/libstdc++-v3/include/bits/locale_facets.tcc
+--- gcc-41-20060515.orig/libstdc++-v3/include/bits/locale_facets.tcc 2006-05-15 11:14:38.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/bits/locale_facets.tcc 2006-05-15 13:47:27.676387842 -0500
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -272,6 +272,8 @@ namespace std
+ __verify_grouping(const char* __grouping, size_t __grouping_size,
+ const string& __grouping_tmp);
+
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+ template<typename _CharT, typename _InIter>
+ _InIter
+ num_get<_CharT, _InIter>::
+@@ -446,6 +448,8 @@ namespace std
+ return __beg;
+ }
+
++_GLIBCXX_END_LDBL_NAMESPACE
++
+ template<typename _ValueT>
+ struct __to_unsigned_type
+ { typedef _ValueT __type; };
+@@ -460,6 +464,8 @@ namespace std
+ { typedef unsigned long long __type; };
+ #endif
+
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+ template<typename _CharT, typename _InIter>
+ template<typename _ValueT>
+ _InIter
+@@ -772,6 +778,21 @@ namespace std
+ return __beg;
+ }
+
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ template<typename _CharT, typename _InIter>
++ _InIter
++ num_get<_CharT, _InIter>::
++ __do_get(iter_type __beg, iter_type __end, ios_base& __io,
++ ios_base::iostate& __err, double& __v) const
++ {
++ string __xtrc;
++ __xtrc.reserve(32);
++ __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
++ std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
++ return __beg;
++ }
++#endif
++
+ template<typename _CharT, typename _InIter>
+ _InIter
+ num_get<_CharT, _InIter>::
+@@ -822,6 +843,8 @@ namespace std
+ __len = static_cast<int>(__w);
+ }
+
++_GLIBCXX_END_LDBL_NAMESPACE
++
+ // Forwarding functions to peel signed from unsigned integer types and
+ // either cast or compute the absolute value for the former, depending
+ // on __basefield.
+@@ -911,6 +934,8 @@ namespace std
+ return __bufend - __buf;
+ }
+
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
++
+ template<typename _CharT, typename _OutIter>
+ void
+ num_put<_CharT, _OutIter>::
+@@ -1233,6 +1258,14 @@ namespace std
+ do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+ { return _M_insert_float(__s, __io, __fill, char(), __v); }
+
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ template<typename _CharT, typename _OutIter>
++ _OutIter
++ num_put<_CharT, _OutIter>::
++ __do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
++ { return _M_insert_float(__s, __io, __fill, char(), __v); }
++#endif
++
+ template<typename _CharT, typename _OutIter>
+ _OutIter
+ num_put<_CharT, _OutIter>::
+@@ -1474,6 +1507,23 @@ namespace std
+ return __beg;
+ }
+
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ template<typename _CharT, typename _InIter>
++ _InIter
++ money_get<_CharT, _InIter>::
++ __do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
++ ios_base::iostate& __err, double& __units) const
++ {
++ string __str;
++ if (__intl)
++ __beg = _M_extract<true>(__beg, __end, __io, __err, __str);
++ else
++ __beg = _M_extract<false>(__beg, __end, __io, __err, __str);
++ std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale());
++ return __beg;
++ }
++#endif
++
+ template<typename _CharT, typename _InIter>
+ _InIter
+ money_get<_CharT, _InIter>::
+@@ -1678,7 +1728,18 @@ namespace std
+ __io.width(0);
+ return __s;
+ }
+-
++
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
++ template<typename _CharT, typename _OutIter>
++ _OutIter
++ money_put<_CharT, _OutIter>::
++ __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
++ double __units) const
++ {
++ return this->do_put(__s, __intl, __io, __fill, (long double) __units);
++ }
++#endif
++
+ template<typename _CharT, typename _OutIter>
+ _OutIter
+ money_put<_CharT, _OutIter>::
+@@ -1726,6 +1787,7 @@ namespace std
+ { return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
+ : _M_insert<false>(__s, __io, __fill, __digits); }
+
++_GLIBCXX_END_LDBL_NAMESPACE
+
+ // NB: Not especially useful. Without an ios_base object or some
+ // kind of locale reference, we are left clawing at the air where
+@@ -2511,12 +2573,12 @@ namespace std
+ extern template class moneypunct<char, true>;
+ extern template class moneypunct_byname<char, false>;
+ extern template class moneypunct_byname<char, true>;
+- extern template class money_get<char>;
+- extern template class money_put<char>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE money_get<char>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE money_put<char>;
+ extern template class numpunct<char>;
+ extern template class numpunct_byname<char>;
+- extern template class num_get<char>;
+- extern template class num_put<char>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE num_get<char>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE num_put<char>;
+ extern template class __timepunct<char>;
+ extern template class time_put<char>;
+ extern template class time_put_byname<char>;
+@@ -2638,12 +2700,12 @@ namespace std
+ extern template class moneypunct<wchar_t, true>;
+ extern template class moneypunct_byname<wchar_t, false>;
+ extern template class moneypunct_byname<wchar_t, true>;
+- extern template class money_get<wchar_t>;
+- extern template class money_put<wchar_t>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE money_get<wchar_t>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE money_put<wchar_t>;
+ extern template class numpunct<wchar_t>;
+ extern template class numpunct_byname<wchar_t>;
+- extern template class num_get<wchar_t>;
+- extern template class num_put<wchar_t>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE num_get<wchar_t>;
++ extern template class _GLIBCXX_LDBL_NAMESPACE num_put<wchar_t>;
+ extern template class __timepunct<wchar_t>;
+ extern template class time_put<wchar_t>;
+ extern template class time_put_byname<wchar_t>;
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/bits/localefwd.h gcc-41-20060515/libstdc++-v3/include/bits/localefwd.h
+--- gcc-41-20060515.orig/libstdc++-v3/include/bits/localefwd.h 2006-05-15 11:14:38.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/bits/localefwd.h 2006-05-15 13:47:27.676387842 -0500
+@@ -129,10 +129,12 @@ namespace std
+ class codecvt_byname;
+
+ // 22.2.2 and 22.2.3 numeric
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+ class num_get;
+ template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+ class num_put;
++_GLIBCXX_END_LDBL_NAMESPACE
+ template<typename _CharT> class numpunct;
+ template<typename _CharT> class numpunct_byname;
+
+@@ -155,10 +157,12 @@ namespace std
+
+ // 22.2.6 money
+ class money_base;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+ class money_get;
+ template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+ class money_put;
++_GLIBCXX_END_LDBL_NAMESPACE
+ template<typename _CharT, bool _Intl = false>
+ class moneypunct;
+ template<typename _CharT, bool _Intl = false>
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/Makefile.am gcc-41-20060515/libstdc++-v3/include/Makefile.am
+--- gcc-41-20060515.orig/libstdc++-v3/include/Makefile.am 2006-05-15 11:14:39.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/Makefile.am 2006-05-15 13:47:27.666389381 -0500
+@@ -825,13 +825,18 @@ ${host_builddir}/c++config.h: ${top_buil
+ ${glibcxx_srcdir}/include/bits/c++config \
+ stamp-${host_alias} \
+ ${toplevel_srcdir}/gcc/DATESTAMP
+- @cat ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
++ @ldbl_compat='' ;\
++ grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \
++ ${CONFIG_HEADER} > /dev/null 2>&1 \
++ && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
++ sed -e "$$ldbl_compat" ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ sed -e 's/^/#define __GLIBCXX__ /' \
+- < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
++ < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
+ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+ -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
+ -e 's/VERSION/_GLIBCXX_VERSION/g' \
+ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \
++ -e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
+ < ${CONFIG_HEADER} >> $@ ;\
+ echo "#endif // _CXXCONFIG_" >>$@
+
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/include/Makefile.in gcc-41-20060515/libstdc++-v3/include/Makefile.in
+--- gcc-41-20060515.orig/libstdc++-v3/include/Makefile.in 2006-05-15 11:14:39.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/include/Makefile.in 2006-05-15 13:47:27.668389073 -0500
+@@ -1203,13 +1203,18 @@ ${host_builddir}/c++config.h: ${top_buil
+ ${glibcxx_srcdir}/include/bits/c++config \
+ stamp-${host_alias} \
+ ${toplevel_srcdir}/gcc/DATESTAMP
+- @cat ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
++ @ldbl_compat='' ;\
++ grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \
++ ${CONFIG_HEADER} > /dev/null 2>&1 \
++ && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
++ sed -e "$$ldbl_compat" ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ sed -e 's/^/#define __GLIBCXX__ /' \
+- < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
++ < ${toplevel_srcdir}/gcc/DATESTAMP >> $@ ;\
+ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+ -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
+ -e 's/VERSION/_GLIBCXX_VERSION/g' \
+ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \
++ -e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
+ < ${CONFIG_HEADER} >> $@ ;\
+ echo "#endif // _CXXCONFIG_" >>$@
+
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/compatibility.cc gcc-41-20060515/libstdc++-v3/src/compatibility.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/compatibility.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/compatibility.cc 2006-05-15 13:47:27.681387073 -0500
+@@ -1,6 +1,6 @@
+ // Compatibility symbols for previous versions -*- C++ -*-
+
+-// Copyright (C) 2005
++// Copyright (C) 2005, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -49,6 +49,7 @@
+ #include <istream>
+ #include <fstream>
+ #include <sstream>
++#include <cmath>
+
+ namespace std
+ {
+@@ -362,6 +363,107 @@ namespace std
+
+ #endif
+
++// gcc-4.1.0
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \
++extern "C" double \
++__ ## name ## l_wrapper argdecl \
++{ \
++ return name args; \
++} \
++asm (".symver __" #name "l_wrapper, " #name "l@" #ver)
++
++#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \
++ _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver)
++
++#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \
++ _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver)
++
++#ifdef _GLIBCXX_HAVE_ACOSL
++_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_ASINL
++_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_ATAN2L
++_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_ATANL
++_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_CEILL
++_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_COSHL
++_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_COSL
++_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_EXPL
++_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_FLOORL
++_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_FMODL
++_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_FREXPL
++_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_HYPOTL
++_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_LDEXPL
++_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_LOG10L
++_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_LOGL
++_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_MODFL
++_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3);
++#endif
++#ifdef _GLIBCXX_HAVE_POWL
++_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SINHL
++_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SINL
++_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_SQRTL
++_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_TANHL
++_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4);
++#endif
++#ifdef _GLIBCXX_HAVE_TANL
++_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4);
++#endif
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[];
++extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[];
++extern __attribute__((used, weak)) const char _ZTSe[2] = "e";
++extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
++extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
++extern __attribute__((used, weak)) const void *_ZTIe[2]
++ = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
++ (void *) _ZTSe };
++extern __attribute__((used, weak)) const void *_ZTIPe[4]
++ = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
++ (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
++extern __attribute__((used, weak)) const void *_ZTIPKe[4]
++ = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
++ (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
++
+ #ifdef __APPLE__
+ #if (defined(__ppc__) || defined (__ppc64__)) && defined (PIC)
+ /* __eprintf shouldn't have been made visible from libstdc++, or
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/compatibility-ldbl.cc gcc-41-20060515/libstdc++-v3/src/compatibility-ldbl.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/compatibility-ldbl.cc 1969-12-31 18:00:00.000000000 -0600
++++ gcc-41-20060515/libstdc++-v3/src/compatibility-ldbl.cc 2006-05-15 13:47:27.680387227 -0500
+@@ -0,0 +1,73 @@
++// Compatibility symbols for -mlong-double-64 compatibility -*- C++ -*-
++
++// Copyright (C) 2006
++// Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++#include <locale>
++
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#ifdef __LONG_DOUBLE_128__
++#error "compatibility-ldbl.cc must be compiled with -mlong-double-64"
++#endif
++
++namespace std
++{
++#define C char
++ template class num_get<C, istreambuf_iterator<C> >;
++ template class num_put<C, ostreambuf_iterator<C> >;
++ template class money_get<C, istreambuf_iterator<C> >;
++ template class money_put<C, ostreambuf_iterator<C> >;
++ template const num_put<C>& use_facet<num_put<C> >(const locale&);
++ template const num_get<C>& use_facet<num_get<C> >(const locale&);
++ template const money_put<C>& use_facet<money_put<C> >(const locale&);
++ template const money_get<C>& use_facet<money_get<C> >(const locale&);
++ template bool has_facet<num_put<C> >(const locale&);
++ template bool has_facet<num_get<C> >(const locale&);
++ template bool has_facet<money_put<C> >(const locale&);
++ template bool has_facet<money_get<C> >(const locale&);
++#undef C
++#ifdef _GLIBCXX_USE_WCHAR_T
++#define C wchar_t
++ template class num_get<C, istreambuf_iterator<C> >;
++ template class num_put<C, ostreambuf_iterator<C> >;
++ template class money_get<C, istreambuf_iterator<C> >;
++ template class money_put<C, ostreambuf_iterator<C> >;
++ template const num_put<C>& use_facet<num_put<C> >(const locale&);
++ template const num_get<C>& use_facet<num_get<C> >(const locale&);
++ template const money_put<C>& use_facet<money_put<C> >(const locale&);
++ template const money_get<C>& use_facet<money_get<C> >(const locale&);
++ template bool has_facet<num_put<C> >(const locale&);
++ template bool has_facet<num_get<C> >(const locale&);
++ template bool has_facet<money_put<C> >(const locale&);
++ template bool has_facet<money_get<C> >(const locale&);
++#undef C
++#endif
++}
++
++#endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/complex_io.cc gcc-41-20060515/libstdc++-v3/src/complex_io.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/complex_io.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/complex_io.cc 2006-05-15 13:47:27.681387073 -0500
+@@ -1,6 +1,6 @@
+ // The template and inlines for the -*- C++ -*- complex number classes.
+
+-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
++// Copyright (C) 2000, 2001, 2006 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -91,3 +91,20 @@ namespace std
+ const complex<long double>&);
+ #endif //_GLIBCXX_USE_WCHAR_T
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT (_ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E,
++ _ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E,
++ _ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E,
++ _ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E);
++_GLIBCXX_LDBL_COMPAT (_ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E,
++ _ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/istream-inst.cc gcc-41-20060515/libstdc++-v3/src/istream-inst.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/istream-inst.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/istream-inst.cc 2006-05-15 13:47:27.682386919 -0500
+@@ -1,6 +1,6 @@
+ // Explicit instantiation file.
+
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -68,3 +68,19 @@ namespace std
+ template wistream& operator>>(wistream&, _Setw);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++_GLIBCXX_LDBL_COMPAT (_ZNSirsERd, _ZNSirsERe);
++_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEErsERd,
++ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERe);
++// These 2 are in GCC 4.2+ only so far
++// _GLIBCXX_LDBL_COMPAT (_ZNSi10_M_extractIdEERSiRT_,
++// _ZNSi10_M_extractIeEERSiRT_);
++// _GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_,
++// _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/limits.cc gcc-41-20060515/libstdc++-v3/src/limits.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/limits.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/limits.cc 2006-05-15 13:47:27.683386765 -0500
+@@ -1,6 +1,6 @@
+ // Static data members of -*- C++ -*- numeric_limits classes
+
+-// Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -447,3 +447,34 @@ namespace std
+ const bool numeric_limits<long double>::tinyness_before;
+ const float_round_style numeric_limits<long double>::round_style;
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \
++ extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \
++ __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E")))
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14);
++_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6);
++_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8);
++_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5);
++_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12);
++_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14);
++_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12);
++_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17);
++_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10);
++_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9);
++_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5);
++_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15);
++_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/locale.cc gcc-41-20060515/libstdc++-v3/src/locale.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/locale.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/locale.cc 2006-05-15 14:06:44.932155273 -0500
+@@ -41,6 +41,21 @@ namespace __gnu_internal
+ static __glibcxx_mutex_define_initialized(locale_cache_mutex);
+ }
+
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++# define _GLIBCXX_LOC_ID(mangled) extern std::locale::id mangled
++_GLIBCXX_LOC_ID (_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++# ifdef _GLIBCXX_USE_WCHAR_T
++_GLIBCXX_LOC_ID (_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++_GLIBCXX_LOC_ID (_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++# endif
++#endif
++
+ namespace std
+ {
+ // Definitions for static const data members of locale.
+@@ -397,9 +412,29 @@ namespace std
+ locale::id::_M_id() const
+ {
+ if (!_M_index)
+- _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1);
++ {
++ // XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++ locale::id *f = 0;
++# define _GLIBCXX_SYNC_ID(facet, mangled) \
++ if (this == &::mangled) \
++ f = &facet::id
++ _GLIBCXX_SYNC_ID (num_get<char>, _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++ _GLIBCXX_SYNC_ID (num_put<char>, _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++ _GLIBCXX_SYNC_ID (money_get<char>, _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++ _GLIBCXX_SYNC_ID (money_put<char>, _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE);
++# ifdef _GLIBCXX_USE_WCHAR_T
++ _GLIBCXX_SYNC_ID (num_get<wchar_t>, _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++ _GLIBCXX_SYNC_ID (num_put<wchar_t>, _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++ _GLIBCXX_SYNC_ID (money_get<wchar_t>, _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++ _GLIBCXX_SYNC_ID (money_put<wchar_t>, _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE);
++# endif
++ if (f)
++ _M_index = 1 + f->_M_id();
++ else
++#endif
++ _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1);
++ }
+ return _M_index - 1;
+ }
+ } // namespace std
+-
+-
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/locale-inst.cc gcc-41-20060515/libstdc++-v3/src/locale-inst.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/locale-inst.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/locale-inst.cc 2006-05-15 13:47:27.684386611 -0500
+@@ -1,6 +1,6 @@
+ // Locale support -*- C++ -*-
+
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -37,6 +37,7 @@
+ // Instantiation configuration.
+ #ifndef C
+ # define C char
++# define C_is_char
+ #endif
+
+ namespace std
+@@ -48,6 +49,7 @@ namespace std
+ template struct __moneypunct_cache<C, true>;
+ template class moneypunct_byname<C, false>;
+ template class moneypunct_byname<C, true>;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ template class money_get<C, istreambuf_iterator<C> >;
+ template class money_put<C, ostreambuf_iterator<C> >;
+ template
+@@ -73,11 +75,13 @@ namespace std
+ money_put<C, ostreambuf_iterator<C> >::
+ _M_insert<false>(ostreambuf_iterator<C>, ios_base&, C,
+ const string_type&) const;
++_GLIBCXX_END_LDBL_NAMESPACE
+
+ // numpunct, numpunct_byname, num_get, and num_put
+ template class numpunct<C>;
+ template struct __numpunct_cache<C>;
+ template class numpunct_byname<C>;
++_GLIBCXX_BEGIN_LDBL_NAMESPACE
+ template class num_get<C, istreambuf_iterator<C> >;
+ template class num_put<C, ostreambuf_iterator<C> >;
+ template
+@@ -161,7 +165,8 @@ namespace std
+ num_put<C, ostreambuf_iterator<C> >::
+ _M_insert_float(ostreambuf_iterator<C>, ios_base&, C, char,
+ long double) const;
+-
++_GLIBCXX_END_LDBL_NAMESPACE
++
+ // time_get and time_put
+ template class __timepunct<C>;
+ template struct __timepunct_cache<C>;
+@@ -314,3 +319,44 @@ namespace std
+ ios_base::fmtflags, bool);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined C_is_char
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_,
++ _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++ _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs,
++ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs,
++ _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/locale-misc-inst.cc gcc-41-20060515/libstdc++-v3/src/locale-misc-inst.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/locale-misc-inst.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/locale-misc-inst.cc 2006-05-15 13:47:27.685386457 -0500
+@@ -1,6 +1,7 @@
+ // Locale support -*- C++ -*-
+
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -45,3 +46,19 @@ namespace std
+ __convert_from_v(char*, const int, const char*, long double,
+ const __c_locale&, int);
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++# if _GLIBCXX_C_LOCALE_GNU
++_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKP15__locale_structi,
++ _ZSt16__convert_from_vIeEiPciPKcT_RKP15__locale_structi);
++# else
++_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKPii,
++ _ZSt16__convert_from_vIeEiPciPKcT_RKPii);
++# endif
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/Makefile.am gcc-41-20060515/libstdc++-v3/src/Makefile.am
+--- gcc-41-20060515.orig/libstdc++-v3/src/Makefile.am 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/Makefile.am 2006-05-15 13:47:27.677387688 -0500
+@@ -35,10 +35,15 @@ libstdc++-symbol.ver: ${glibcxx_srcdir}
+ $(port_specific_symbol_files)
+ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+ if test "x$(port_specific_symbol_files)" != x; then \
+- sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
+- sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
+- cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+- rm tmp.top tmp.bottom; \
++ if grep '^# Appended to version file.' \
++ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
++ cat $(port_specific_symbol_files) >> $@; \
++ else \
++ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
++ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
++ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
++ rm tmp.top tmp.bottom; \
++ fi; \
+ fi
+
+ if ENABLE_SYMVERS_GNU
+@@ -113,6 +118,12 @@ c++locale.cc: ${glibcxx_srcdir}/$(CLOCAL
+ basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC)
+ $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true
+
++if GLIBCXX_LDBL_COMPAT
++ldbl_compat_sources = compatibility-ldbl.cc
++else
++ldbl_compat_sources =
++endif
++
+ # Sources present in the src directory.
+ sources = \
+ bitmap_allocator.cc \
+@@ -160,7 +171,8 @@ sources = \
+ wlocale-inst.cc \
+ wstring-inst.cc \
+ ${host_sources} \
+- ${host_sources_extra}
++ ${host_sources_extra} \
++ ${ldbl_compat_sources}
+
+ VPATH = $(top_srcdir)/src:$(top_srcdir)
+
+@@ -191,6 +203,15 @@ concept-inst.lo: concept-inst.cc
+ concept-inst.o: concept-inst.cc
+ $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+
++if GLIBCXX_LDBL_COMPAT
++# Use special rules for compatibility-ldbl.cc compilation, as we need to
++# pass -mlong-double-64.
++compatibility-ldbl.lo: compatibility-ldbl.cc
++ $(LTCXXCOMPILE) -mlong-double-64 -c $<
++compatibility-ldbl.o: compatibility-ldbl.cc
++ $(CXXCOMPILE) -mlong-double-64 -c $<
++endif
++
+ # AM_CXXFLAGS needs to be in each subdirectory so that it can be
+ # modified in a per-library or per-sub-library way. Need to manually
+ # set this option because CONFIG_CXXFLAGS has to be after
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/Makefile.in gcc-41-20060515/libstdc++-v3/src/Makefile.in
+--- gcc-41-20060515.orig/libstdc++-v3/src/Makefile.in 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/Makefile.in 2006-05-15 13:47:27.679387380 -0500
+@@ -59,11 +59,27 @@ am__strip_dir = `echo $$p | sed -e 's|^.
+ am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
+ toolexeclibLTLIBRARIES_INSTALL = $(INSTALL)
+ LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
++am__libstdc___la_SOURCES_DIST = bitmap_allocator.cc pool_allocator.cc \
++ mt_allocator.cc codecvt.cc compatibility.cc complex_io.cc \
++ ctype.cc debug.cc debug_list.cc functexcept.cc \
++ globals_locale.cc globals_io.cc ios.cc ios_failure.cc \
++ ios_init.cc ios_locale.cc limits.cc list.cc locale.cc \
++ locale_init.cc locale_facets.cc localename.cc stdexcept.cc \
++ strstream.cc tree.cc allocator-inst.cc concept-inst.cc \
++ fstream-inst.cc ext-inst.cc ios-inst.cc iostream-inst.cc \
++ istream-inst.cc istream.cc locale-inst.cc locale-misc-inst.cc \
++ misc-inst.cc ostream-inst.cc sstream-inst.cc streambuf-inst.cc \
++ streambuf.cc string-inst.cc valarray-inst.cc wlocale-inst.cc \
++ wstring-inst.cc atomicity.cc codecvt_members.cc \
++ collate_members.cc ctype_members.cc messages_members.cc \
++ monetary_members.cc numeric_members.cc time_members.cc \
++ basic_file.cc c++locale.cc compatibility-ldbl.cc
+ am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
+ ctype_members.lo messages_members.lo monetary_members.lo \
+ numeric_members.lo time_members.lo
+ am__objects_2 = basic_file.lo c++locale.lo
+-am__objects_3 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
++@GLIBCXX_LDBL_COMPAT_TRUE@am__objects_3 = compatibility-ldbl.lo
++am__objects_4 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
+ codecvt.lo compatibility.lo complex_io.lo ctype.lo debug.lo \
+ debug_list.lo functexcept.lo globals_locale.lo globals_io.lo \
+ ios.lo ios_failure.lo ios_init.lo ios_locale.lo limits.lo \
+@@ -74,8 +90,9 @@ am__objects_3 = bitmap_allocator.lo pool
+ locale-inst.lo locale-misc-inst.lo misc-inst.lo \
+ ostream-inst.lo sstream-inst.lo streambuf-inst.lo streambuf.lo \
+ string-inst.lo valarray-inst.lo wlocale-inst.lo \
+- wstring-inst.lo $(am__objects_1) $(am__objects_2)
+-am_libstdc___la_OBJECTS = $(am__objects_3)
++ wstring-inst.lo $(am__objects_1) $(am__objects_2) \
++ $(am__objects_3)
++am_libstdc___la_OBJECTS = $(am__objects_4)
+ libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+ depcomp =
+@@ -84,7 +101,7 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_IN
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+ CXXLD = $(CXX)
+ SOURCES = $(libstdc___la_SOURCES)
+-DIST_SOURCES = $(libstdc___la_SOURCES)
++DIST_SOURCES = $(am__libstdc___la_SOURCES_DIST)
+ ETAGS = etags
+ CTAGS = ctags
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+@@ -152,6 +169,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HE
+ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@
+ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@
+ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@
++GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@
++GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@
+ INSTALL_DATA = @INSTALL_DATA@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+@@ -302,6 +321,8 @@ host_sources_extra = \
+ basic_file.cc \
+ c++locale.cc
+
++@GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources =
++@GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc
+
+ # Sources present in the src directory.
+ sources = \
+@@ -350,7 +371,8 @@ sources = \
+ wlocale-inst.cc \
+ wstring-inst.cc \
+ ${host_sources} \
+- ${host_sources_extra}
++ ${host_sources_extra} \
++ ${ldbl_compat_sources}
+
+ libstdc___la_SOURCES = $(sources)
+ libstdc___la_LIBADD = \
+@@ -677,10 +699,15 @@ libstdc++-symbol.ver: ${glibcxx_srcdir}
+ $(port_specific_symbol_files)
+ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver
+ if test "x$(port_specific_symbol_files)" != x; then \
+- sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
+- sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
+- cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
+- rm tmp.top tmp.bottom; \
++ if grep '^# Appended to version file.' \
++ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \
++ cat $(port_specific_symbol_files) >> $@; \
++ else \
++ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
++ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
++ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \
++ rm tmp.top tmp.bottom; \
++ fi; \
+ fi
+ @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@libstdc++-symbol.explist : libstdc++-symbol.ver \
+ @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ ${glibcxx_srcdir}/scripts/make_exports.pl \
+@@ -733,6 +760,13 @@ concept-inst.lo: concept-inst.cc
+ concept-inst.o: concept-inst.cc
+ $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+
++# Use special rules for compatibility-ldbl.cc compilation, as we need to
++# pass -mlong-double-64.
++@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
++@GLIBCXX_LDBL_COMPAT_TRUE@ $(LTCXXCOMPILE) -mlong-double-64 -c $<
++@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc
++@GLIBCXX_LDBL_COMPAT_TRUE@ $(CXXCOMPILE) -mlong-double-64 -c $<
++
+ # Added bits to build debug library.
+ @GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
+ @GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/ostream-inst.cc gcc-41-20060515/libstdc++-v3/src/ostream-inst.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/ostream-inst.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/ostream-inst.cc 2006-05-15 13:47:27.685386457 -0500
+@@ -1,6 +1,6 @@
+ // Explicit instantiation file.
+
+-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
++// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2006
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -74,3 +74,19 @@ namespace std
+ template wostream& operator<<(wostream&, _Setw);
+ #endif
+ } // namespace std
++
++// XXX GLIBCXX_ABI Deprecated
++#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++_GLIBCXX_LDBL_COMPAT (_ZNSolsEd, _ZNSolsEe);
++_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd,
++ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe);
++// These 2 are in GCC 4.2+ only so far
++// _GLIBCXX_LDBL_COMPAT (_ZNSo9_M_insertIdEERSoT_,
++// _ZNSo9_M_insertIeEERSoT_);
++// _GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_,
++// _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/src/wlocale-inst.cc gcc-41-20060515/libstdc++-v3/src/wlocale-inst.cc
+--- gcc-41-20060515.orig/libstdc++-v3/src/wlocale-inst.cc 2006-05-15 11:14:42.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/src/wlocale-inst.cc 2006-05-15 13:47:27.686386303 -0500
+@@ -1,6 +1,7 @@
+ // Locale support -*- C++ -*-
+
+-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -36,4 +37,45 @@
+ #ifdef _GLIBCXX_USE_WCHAR_T
+ #define C wchar_t
+ #include "locale-inst.cc"
++
++// XXX GLIBCXX_ABI Deprecated
++#if defined _GLIBCXX_LONG_DOUBLE_COMPAT
++
++#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \
++ extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak))
++
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_,
++ _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_,
++ _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs,
++ _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE,
++ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE);
++_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE,
++ _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE);
++
++#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+ #endif
+diff -urpN -X /home/bergner/cvs/dontdiff gcc-41-20060515.orig/libstdc++-v3/testsuite/testsuite_abi.cc gcc-41-20060515/libstdc++-v3/testsuite/testsuite_abi.cc
+--- gcc-41-20060515.orig/libstdc++-v3/testsuite/testsuite_abi.cc 2006-05-15 11:15:38.000000000 -0500
++++ gcc-41-20060515/libstdc++-v3/testsuite/testsuite_abi.cc 2006-05-15 14:14:57.231341148 -0500
+@@ -187,8 +187,11 @@ check_version(symbol& test, bool added)
+ known_versions.push_back("GLIBCXX_3.4.6");
+ known_versions.push_back("GLIBCXX_3.4.7");
+ known_versions.push_back("GLIBCXX_3.4.8");
++ known_versions.push_back("GLIBCXX_LDBL_3.4");
++ known_versions.push_back("GLIBCXX_LDBL_3.4.7");
+ known_versions.push_back("CXXABI_1.3");
+ known_versions.push_back("CXXABI_1.3.1");
++ known_versions.push_back("CXXABI_LDBL_1.3");
+ }
+ compat_list::iterator begin = known_versions.begin();
+ compat_list::iterator end = known_versions.end();
+@@ -224,9 +227,7 @@ check_version(symbol& test, bool added)
+ // New version labels are ok. The rest are not.
+ compat_list::iterator it2 = find(begin, end, test.name);
+ if (it2 != end)
+- {
+- test.version_status = symbol::compatible;
+- }
++ test.version_status = symbol::compatible;
+ else
+ test.version_status = symbol::incompatible;
+ }
+@@ -370,7 +371,7 @@ compare_symbols(const char* baseline_fil
+ added_names.erase(it);
+ }
+ else
+- missing_names.push_back(what);
++ missing_names.push_back(what);
+ }
+
+ // Check missing names for compatibility.
diff --git a/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch b/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch
new file mode 100644
index 0000000000..e3a87c87d0
--- /dev/null
+++ b/packages/gcc/gcc-4.1.1/ppc-sfp-long-double-gcc411-7.patch
@@ -0,0 +1,4271 @@
+ * config/rs6000/darwin-ldouble.c: Build file for SOFT_FLOAT.
+ (strong_alias): Define.
+ (__gcc_qmul): Provide non-FMA for soft-float.
+ (__gcc_qdiv): Same.
+ (__gcc_qneg): New.
+ (__gcc_qeq): New.
+ (__gcc_qle): New.
+ (__gcc_qge): New.
+ (__gcc_qunord): New.
+ (__gcc_stoq): New.
+ (__gcc_dtoq): New.
+ (__gcc_qtos): New.
+ (__gcc_qtod): New.
+ (__gcc_qtoi): New.
+ (__gcc_qtou): New.
+ (__gcc_itoq): New.
+ (__gcc_utoq): New.
+ (fmsub): New.
+ * config/rs6000/rs6000.c (rs6000_emit_move): Handle TFmode
+ constant for soft-float.
+ (rs6000_init_libfuncs): Initialize soft-float functions.
+ * config/rs6000/libgcc-ppc-glibc.ver: Version soft-float symbols.
+ * config/rs6000/rs6000.md (movtf): Allow soft-float.
+ (movtf_softfloat): New.
+ * config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS): Add
+ -mlong-double-128.
+ (ldblspecs): Remove.
+ * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Do not warn
+ about long double soft float.
+
+diff -urN gcc-4.1.1/gcc/config/rs6000/darwin-ldouble.c gcc-4.1.1-patched/gcc/config/rs6000/darwin-ldouble.c
+--- gcc-4.1.1/gcc/config/rs6000/darwin-ldouble.c 2006-03-23 16:23:58.000000000 -0600
++++ gcc-4.1.1-patched/gcc/config/rs6000/darwin-ldouble.c 2006-09-12 14:30:16.000000000 -0500
+@@ -49,7 +49,8 @@
+
+ This code currently assumes big-endian. */
+
+-#if (!defined (__NO_FPRS__) && !defined (__LITTLE_ENDIAN__) \
++#if ((!defined (__NO_FPRS__) || defined (_SOFT_FLOAT)) \
++ && !defined (__LITTLE_ENDIAN__) \
+ && (defined (__MACH__) || defined (__powerpc__) || defined (_AIX)))
+
+ #define fabs(x) __builtin_fabs(x)
+@@ -60,14 +61,19 @@
+
+ #define nonfinite(a) unlikely (! isless (fabs (a), inf ()))
+
++/* Define ALIASNAME as a strong alias for NAME. */
++# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
++# define _strong_alias(name, aliasname) \
++ extern __typeof (name) aliasname __attribute__ ((alias (#name)));
++
+ /* All these routines actually take two long doubles as parameters,
+ but GCC currently generates poor code when a union is used to turn
+ a long double into a pair of doubles. */
+
+-extern long double __gcc_qadd (double, double, double, double);
+-extern long double __gcc_qsub (double, double, double, double);
+-extern long double __gcc_qmul (double, double, double, double);
+-extern long double __gcc_qdiv (double, double, double, double);
++long double __gcc_qadd (double, double, double, double);
++long double __gcc_qsub (double, double, double, double);
++long double __gcc_qmul (double, double, double, double);
++long double __gcc_qdiv (double, double, double, double);
+
+ #if defined __ELF__ && defined SHARED \
+ && (defined __powerpc64__ || !(defined __linux__ || defined __gnu_hurd__))
+@@ -139,6 +145,10 @@
+ return __gcc_qadd (a, b, -c, -d);
+ }
+
++#ifdef _SOFT_FLOAT
++static double fmsub (double, double, double);
++#endif
++
+ long double
+ __gcc_qmul (double a, double b, double c, double d)
+ {
+@@ -154,7 +164,11 @@
+ /* Sum terms of two highest orders. */
+
+ /* Use fused multiply-add to get low part of a * c. */
++#ifndef _SOFT_FLOAT
+ asm ("fmsub %0,%1,%2,%3" : "=f"(tau) : "f"(a), "f"(c), "f"(t));
++#else
++ tau = fmsub (a, c, t);
++#endif
+ v = a*d;
+ w = b*c;
+ tau += v + w; /* Add in other second-order terms. */
+@@ -187,7 +201,11 @@
+ numerically necessary. */
+
+ /* Use fused multiply-add to get low part of c * t. */
++#ifndef _SOFT_FLOAT
+ asm ("fmsub %0,%1,%2,%3" : "=f"(sigma) : "f"(c), "f"(t), "f"(s));
++#else
++ sigma = fmsub (c, t, s);
++#endif
+ v = a - s;
+
+ tau = ((v-sigma)+w)/c; /* Correction to t. */
+@@ -201,4 +219,3959 @@
+ return z.ldval;
+ }
+
++#ifdef _SOFT_FLOAT
++
++long double __gcc_qneg (double, double);
++int __gcc_qeq (double, double, double, double);
++int __gcc_qne (double, double, double, double);
++int __gcc_qge (double, double, double, double);
++int __gcc_qle (double, double, double, double);
++int __gcc_qunord (double, double, double, double);
++long double __gcc_stoq (float);
++long double __gcc_dtoq (double);
++float __gcc_qtos (double, double);
++double __gcc_qtod (double, double);
++int __gcc_qtoi (double, double);
++unsigned int __gcc_qtou (double, double);
++long double __gcc_itoq (int);
++long double __gcc_utoq (unsigned int);
++
++extern int __eqdf2 (double, double);
++extern int __ledf2 (double, double);
++extern int __gedf2 (double, double);
++extern int __unorddf2 (double, double);
++
++/* Negate 'long double' value and return the result. */
++long double
++__gcc_qneg (double a, double aa)
++{
++ longDblUnion x;
++
++ x.dval[0] = -a;
++ x.dval[1] = -aa;
++ return x.ldval;
++}
++
++/* Compare two 'long double' values for equality. */
++int
++__gcc_qeq (double a, double aa, double c, double cc)
++{
++ if (__eqdf2 (a, c) == 0)
++ return __eqdf2 (aa, cc);
++ return 1;
++}
++
++strong_alias (__gcc_qeq, __gcc_qne);
++
++/* Compare two 'long double' values for less than or equal. */
++int
++__gcc_qle (double a, double aa, double c, double cc)
++{
++ if (__eqdf2 (a, c) == 0)
++ return __ledf2 (aa, cc);
++ return __ledf2 (a, c);
++}
++
++strong_alias (__gcc_qle, __gcc_qlt);
++
++/* Compare two 'long double' values for greater than or equal. */
++int
++__gcc_qge (double a, double aa, double c, double cc)
++{
++ if (__eqdf2 (a, c) == 0)
++ return __gedf2 (aa, cc);
++ return __gedf2 (a, c);
++}
++
++strong_alias (__gcc_qge, __gcc_qgt);
++
++/* Compare two 'long double' values for unordered. */
++int
++__gcc_qunord (double a, double aa, double c, double cc)
++{
++ if (__eqdf2 (a, c) == 0)
++ return __unorddf2 (aa, cc);
++ return __unorddf2 (a, c);
++}
++
++/* Convert single to long double. */
++long double
++__gcc_stoq (float a)
++{
++ longDblUnion x;
++
++ x.dval[0] = (double) a;
++ x.dval[1] = 0.0;
++
++ return x.ldval;
++}
++
++/* Convert double to long double. */
++long double
++__gcc_dtoq (double a)
++{
++ longDblUnion x;
++
++ x.dval[0] = a;
++ x.dval[1] = 0.0;
++
++ return x.ldval;
++}
++
++/* Convert long double to single. */
++float
++__gcc_qtos (double a, double aa __attribute__ ((__unused__)))
++{
++ return (float) a;
++}
++
++/* Convert long double to double. */
++double
++__gcc_qtod (double a, double aa __attribute__ ((__unused__)))
++{
++ return a;
++}
++
++/* Convert long double to int. */
++int
++__gcc_qtoi (double a, double aa)
++{
++ double z = a + aa;
++ return (int) z;
++}
++
++/* Convert long double to unsigned int. */
++unsigned int
++__gcc_qtou (double a, double aa)
++{
++ double z = a + aa;
++ return (unsigned int) z;
++}
++
++/* Convert int to long double. */
++long double
++__gcc_itoq (int a)
++{
++ return __gcc_dtoq ((double) a);
++}
++
++/* Convert unsigned int to long double. */
++long double
++__gcc_utoq (unsigned int a)
++{
++ return __gcc_dtoq ((double) a);
++}
++
++typedef int QItype __attribute__ ((mode (QI)));
++typedef int SItype __attribute__ ((mode (SI)));
++typedef int DItype __attribute__ ((mode (DI)));
++typedef unsigned int UQItype __attribute__ ((mode (QI)));
++typedef unsigned int USItype __attribute__ ((mode (SI)));
++typedef unsigned int UDItype __attribute__ ((mode (DI)));
++
++typedef unsigned int UHWtype __attribute__ ((mode (HI)));
++extern const UQItype __clz_tab[256];
++extern void abort (void);
++typedef float DFtype __attribute__ ((mode (DF)));
++
++union _FP_UNION_D
++{
++ DFtype flt;
++ struct
++ {
++
++ unsigned sign:1;
++ unsigned exp:11;
++ unsigned frac1:53 - (((unsigned long) 1 << (53 - 1) % 32) != 0) - 32;
++ unsigned frac0:32;
++ } bits __attribute__ ((packed));
++};
++typedef float TFtype __attribute__ ((mode (TF)));
++
++union _FP_UNION_Q
++{
++ TFtype flt;
++ struct
++ {
++
++ unsigned sign:1;
++ unsigned exp:15;
++ unsigned long frac3:113 - (((unsigned long) 1 << (113 - 1) % 32) !=
++ 0) - (32 * 3);
++ unsigned long frac2:32;
++ unsigned long frac1:32;
++ unsigned long frac0:32;
++ } bits __attribute__ ((packed));
++};
++
++static double
++fmsub (double a, double b, double c)
++{
++ int _fex = 0;
++ long A_c __attribute__ ((unused)), A_s, A_e;
++ unsigned long A_f0, A_f1;
++ long B_c __attribute__ ((unused)), B_s, B_e;
++ unsigned long B_f0, B_f1;
++ long C_c __attribute__ ((unused)), C_s, C_e;
++ unsigned long C_f0, C_f1;
++ long X_c __attribute__ ((unused)), X_s, X_e;
++ unsigned long X_f[4];
++ long Y_c __attribute__ ((unused)), Y_s, Y_e;
++ unsigned long Y_f[4];
++ long Z_c __attribute__ ((unused)), Z_s, Z_e;
++ unsigned long Z_f[4];
++ long U_c __attribute__ ((unused)), U_s, U_e;
++ unsigned long U_f[4];
++ long V_c __attribute__ ((unused)), V_s, V_e;
++ unsigned long V_f[4];
++ long R_c __attribute__ ((unused)), R_s, R_e;
++ unsigned long R_f0, R_f1;
++ double r;
++ long double u, v, x, y, z;
++
++/* FP_INIT_ROUNDMODE */
++ do
++ {
++ }
++ while (0);
++
++/* FP_UNPACK_RAW_D (A, a) */
++ do
++ {
++ union _FP_UNION_D _flo;
++ _flo.flt = (a);
++ A_f0 = _flo.bits.frac0;
++ A_f1 = _flo.bits.frac1;
++ A_e = _flo.bits.exp;
++ A_s = _flo.bits.sign;
++ }
++ while (0);
++
++/* FP_UNPACK_RAW_D (B, b) */
++ do
++ {
++ union _FP_UNION_D _flo;
++ _flo.flt = (b);
++ B_f0 = _flo.bits.frac0;
++ B_f1 = _flo.bits.frac1;
++ B_e = _flo.bits.exp;
++ B_s = _flo.bits.sign;
++ }
++ while (0);
++
++/* FP_UNPACK_RAW_D (C, c) */
++ do
++ {
++ union _FP_UNION_D _flo;
++ _flo.flt = (c);
++ C_f0 = _flo.bits.frac0;
++ C_f1 = _flo.bits.frac1;
++ C_e = _flo.bits.exp;
++ C_s = _flo.bits.sign;
++ }
++ while (0);
++
++ /* Extend double to quad. */
++/* FP_EXTEND(Q,D,4,2,X,A) */
++ do
++ {
++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1)
++ abort ();
++ X_s = A_s;
++ do
++ {
++ X_f[0] = A_f0;
++ X_f[1] = A_f1;
++ X_f[2] = X_f[3] = 0;
++ }
++ while (0);
++ if ((((A_e + 1) & 2047) > 1))
++ {
++ X_e = A_e + 16383 - 1023;
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ X_f[_i] = X_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ X_f[_i] =
++ X_f[_i - _skip] << _up | X_f[_i - _skip - 1] >> _down;
++ X_f[_i--] = X_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ X_f[_i] = 0;
++ }
++ while (0);
++ }
++ else
++ {
++ if (A_e == 0)
++ {
++ if (((A_f1 | A_f0) == 0))
++ X_e = 0;
++ else
++ {
++ int _lz;
++ _fex |= (0);
++ do
++ {
++ if (A_f1)
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (A_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (A_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (A_f1);
++ else
++ abort ();
++ }
++ while (0);
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (A_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (A_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (A_f0);
++ else
++ abort ();
++ }
++ while (0);
++ _lz += 32;
++ }
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (_lz + 113 - (2 * 32)) / 32;
++ _up = (_lz + 113 - (2 * 32)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ X_f[_i] = X_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ X_f[_i] =
++ X_f[_i - _skip] << _up | X_f[_i - _skip -
++ 1] >> _down;
++ X_f[_i--] = X_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ X_f[_i] = 0;
++ }
++ while (0);
++ X_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz);
++ }
++ }
++ else
++ {
++ X_e = 32767;
++ if (!((A_f1 | A_f0) == 0))
++ {
++ if (!((A_f1) & ((unsigned long) 1 << (53 - 2) % 32)))
++ _fex |= (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ X_f[_i] = X_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ X_f[_i] =
++ X_f[_i - _skip] << _up | X_f[_i - _skip -
++ 1] >> _down;
++ X_f[_i--] = X_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ X_f[_i] = 0;
++ }
++ while (0);
++ }
++ }
++ }
++ }
++ while (0);
++
++/* FP_EXTEND(Q,D,4,2,Y,B) */
++ do
++ {
++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1)
++ abort ();
++ Y_s = B_s;
++ do
++ {
++ Y_f[0] = B_f0;
++ Y_f[1] = B_f1;
++ Y_f[2] = Y_f[3] = 0;
++ }
++ while (0);
++ if ((((B_e + 1) & 2047) > 1))
++ {
++ Y_e = B_e + 16383 - 1023;
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Y_f[_i] = Y_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Y_f[_i] =
++ Y_f[_i - _skip] << _up | Y_f[_i - _skip - 1] >> _down;
++ Y_f[_i--] = Y_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Y_f[_i] = 0;
++ }
++ while (0);
++ }
++ else
++ {
++ if (B_e == 0)
++ {
++ if (((B_f1 | B_f0) == 0))
++ Y_e = 0;
++ else
++ {
++ int _lz;
++ _fex |= (0);
++ do
++ {
++ if (B_f1)
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (B_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (B_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (B_f1);
++ else
++ abort ();
++ }
++ while (0);
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (B_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (B_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (B_f0);
++ else
++ abort ();
++ }
++ while (0);
++ _lz += 32;
++ }
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (_lz + 113 - (2 * 32)) / 32;
++ _up = (_lz + 113 - (2 * 32)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Y_f[_i] = Y_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Y_f[_i] =
++ Y_f[_i - _skip] << _up | Y_f[_i - _skip -
++ 1] >> _down;
++ Y_f[_i--] = Y_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Y_f[_i] = 0;
++ }
++ while (0);
++ Y_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz);
++ }
++ }
++ else
++ {
++ Y_e = 32767;
++ if (!((B_f1 | B_f0) == 0))
++ {
++ if (!((B_f1) & ((unsigned long) 1 << (53 - 2) % 32)))
++ _fex |= (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Y_f[_i] = Y_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Y_f[_i] =
++ Y_f[_i - _skip] << _up | Y_f[_i - _skip -
++ 1] >> _down;
++ Y_f[_i--] = Y_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Y_f[_i] = 0;
++ }
++ while (0);
++ }
++ }
++ }
++ }
++ while (0);
++
++/* FP_EXTEND(Q,D,4,2,Z,C) */
++ do
++ {
++ if (113 < 53 || (32767 - 16383 < 2047 - 1023) || 16383 < 1023 + 53 - 1)
++ abort ();
++ Z_s = C_s;
++ do
++ {
++ Z_f[0] = C_f0;
++ Z_f[1] = C_f1;
++ Z_f[2] = Z_f[3] = 0;
++ }
++ while (0);
++ if ((((C_e + 1) & 2047) > 1))
++ {
++ Z_e = C_e + 16383 - 1023;
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Z_f[_i] = Z_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Z_f[_i] =
++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - 1] >> _down;
++ Z_f[_i--] = Z_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ }
++ else
++ {
++ if (C_e == 0)
++ {
++ if (((C_f1 | C_f0) == 0))
++ Z_e = 0;
++ else
++ {
++ int _lz;
++ _fex |= (0);
++ do
++ {
++ if (C_f1)
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (C_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (C_f1);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (C_f1);
++ else
++ abort ();
++ }
++ while (0);
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _lz = __builtin_clz (C_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _lz = __builtin_clzl (C_f0);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _lz = __builtin_clzll (C_f0);
++ else
++ abort ();
++ }
++ while (0);
++ _lz += 32;
++ }
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (_lz + 113 - (2 * 32)) / 32;
++ _up = (_lz + 113 - (2 * 32)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Z_f[_i] = Z_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Z_f[_i] =
++ Z_f[_i - _skip] << _up | Z_f[_i - _skip -
++ 1] >> _down;
++ Z_f[_i--] = Z_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ Z_e = (16383 - 1023 + 1 + ((2 * 32) - 53) - _lz);
++ }
++ }
++ else
++ {
++ Z_e = 32767;
++ if (!((C_f1 | C_f0) == 0))
++ {
++ if (!((C_f1) & ((unsigned long) 1 << (53 - 2) % 32)))
++ _fex |= (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((113 - 53)) / 32;
++ _up = ((113 - 53)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Z_f[_i] = Z_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Z_f[_i] =
++ Z_f[_i - _skip] << _up | Z_f[_i - _skip -
++ 1] >> _down;
++ Z_f[_i--] = Z_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ }
++ }
++ }
++ }
++ while (0);
++
++/* FP_PACK_RAW_Q(x,X) */
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.bits.frac0 = X_f[0];
++ _flo.bits.frac1 = X_f[1];
++ _flo.bits.frac2 = X_f[2];
++ _flo.bits.frac3 = X_f[3];
++ _flo.bits.exp = X_e;
++ _flo.bits.sign = X_s;
++ (x) = _flo.flt;
++ }
++ while (0);
++
++/* FP_PACK_RAW_Q(y,Y) */
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.bits.frac0 = Y_f[0];
++ _flo.bits.frac1 = Y_f[1];
++ _flo.bits.frac2 = Y_f[2];
++ _flo.bits.frac3 = Y_f[3];
++ _flo.bits.exp = Y_e;
++ _flo.bits.sign = Y_s;
++ (y) = _flo.flt;
++ }
++ while (0);
++
++/* FP_PACK_RAW_Q(z,Z) */
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.bits.frac0 = Z_f[0];
++ _flo.bits.frac1 = Z_f[1];
++ _flo.bits.frac2 = Z_f[2];
++ _flo.bits.frac3 = Z_f[3];
++ _flo.bits.exp = Z_e;
++ _flo.bits.sign = Z_s;
++ (z) = _flo.flt;
++ }
++ while (0);
++
++/* FP_HANDLE_EXCEPTIONS */
++ do
++ {
++ }
++ while (0);
++
++ /* Multiply. */
++/* FP_INIT_ROUNDMODE */
++ do
++ {
++ }
++ while (0);
++
++/* FP_UNPACK_Q(X,x) */
++ do
++ {
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.flt = (x);
++ X_f[0] = _flo.bits.frac0;
++ X_f[1] = _flo.bits.frac1;
++ X_f[2] = _flo.bits.frac2;
++ X_f[3] = _flo.bits.frac3;
++ X_e = _flo.bits.exp;
++ X_s = _flo.bits.sign;
++ }
++ while (0);
++ do
++ {
++ switch (X_e)
++ {
++ default:
++ (X_f[3]) |= ((unsigned long) 1 << (113 - 1) % 32);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ X_f[_i] = X_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ X_f[_i] =
++ X_f[_i - _skip] << _up | X_f[_i - _skip -
++ 1] >> _down;
++ X_f[_i--] = X_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ X_f[_i] = 0;
++ }
++ while (0);
++ X_e -= 16383;
++ X_c = 0;
++ break;
++ case 0:
++ if (((X_f[0] | X_f[1] | X_f[2] | X_f[3]) == 0))
++ X_c = 1;
++ else
++ {
++ long _shift;
++ do
++ {
++ if (X_f[3])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (X_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (X_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (X_f[3]);
++ else
++ abort ();
++ }
++ while (0);
++ }
++ else if (X_f[2])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (X_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (X_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (X_f[2]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32;
++ }
++ else if (X_f[1])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (X_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (X_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (X_f[1]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32 * 2;
++ }
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (X_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (X_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (X_f[0]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32 * 3;
++ }
++ }
++ while (0);
++ _shift -= ((4 * 32) - 113);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((_shift + 3)) / 32;
++ _up = ((_shift + 3)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ X_f[_i] = X_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ X_f[_i] =
++ X_f[_i - _skip] << _up | X_f[_i - _skip -
++ 1] >> _down;
++ X_f[_i--] = X_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ X_f[_i] = 0;
++ }
++ while (0);
++ X_e -= 16383 - 1 + _shift;
++ X_c = 0;
++ _fex |= (0);
++ }
++ break;
++ case 32767:
++ if (((X_f[0] | X_f[1] | X_f[2] | X_f[3]) == 0))
++ X_c = 2;
++ else
++ {
++ X_c = 3;
++ if (!((X_f[3]) & ((unsigned long) 1 << (113 - 2) % 32)))
++ _fex |= (0);
++ } break;
++ }
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_UNPACK_Q(Y,y) */
++ do
++ {
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.flt = (y);
++ Y_f[0] = _flo.bits.frac0;
++ Y_f[1] = _flo.bits.frac1;
++ Y_f[2] = _flo.bits.frac2;
++ Y_f[3] = _flo.bits.frac3;
++ Y_e = _flo.bits.exp;
++ Y_s = _flo.bits.sign;
++ }
++ while (0);
++ do
++ {
++ switch (Y_e)
++ {
++ default:
++ (Y_f[3]) |= ((unsigned long) 1 << (113 - 1) % 32);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Y_f[_i] = Y_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Y_f[_i] =
++ Y_f[_i - _skip] << _up | Y_f[_i - _skip -
++ 1] >> _down;
++ Y_f[_i--] = Y_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Y_f[_i] = 0;
++ }
++ while (0);
++ Y_e -= 16383;
++ Y_c = 0;
++ break;
++ case 0:
++ if (((Y_f[0] | Y_f[1] | Y_f[2] | Y_f[3]) == 0))
++ Y_c = 1;
++ else
++ {
++ long _shift;
++ do
++ {
++ if (Y_f[3])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (Y_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (Y_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (Y_f[3]);
++ else
++ abort ();
++ }
++ while (0);
++ }
++ else if (Y_f[2])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (Y_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (Y_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (Y_f[2]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32;
++ }
++ else if (Y_f[1])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (Y_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (Y_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (Y_f[1]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32 * 2;
++ }
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ _shift = __builtin_clz (Y_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ _shift = __builtin_clzl (Y_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ _shift = __builtin_clzll (Y_f[0]);
++ else
++ abort ();
++ }
++ while (0);
++ _shift += 32 * 3;
++ }
++ }
++ while (0);
++ _shift -= ((4 * 32) - 113);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = ((_shift + 3)) / 32;
++ _up = ((_shift + 3)) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Y_f[_i] = Y_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Y_f[_i] =
++ Y_f[_i - _skip] << _up | Y_f[_i - _skip -
++ 1] >> _down;
++ Y_f[_i--] = Y_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Y_f[_i] = 0;
++ }
++ while (0);
++ Y_e -= 16383 - 1 + _shift;
++ Y_c = 0;
++ _fex |= (0);
++ }
++ break;
++ case 32767:
++ if (((Y_f[0] | Y_f[1] | Y_f[2] | Y_f[3]) == 0))
++ Y_c = 2;
++ else
++ {
++ Y_c = 3;
++ if (!((Y_f[3]) & ((unsigned long) 1 << (113 - 2) % 32)))
++ _fex |= (0);
++ } break;
++ }
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_MUL_Q(U,X,Y) */
++ do
++ {
++ U_s = X_s ^ Y_s;
++ switch ((((X_c) << 2) | (Y_c)))
++ {
++ case (((0) << 2) | (0)):
++ U_c = 0;
++ U_e = X_e + Y_e + 1;
++ do
++ {
++ unsigned long _z_f[8];
++ unsigned long _b_f0, _b_f1;
++ unsigned long _c_f0, _c_f1;
++ unsigned long _d_f0, _d_f1;
++ unsigned long _e_f0, _e_f1;
++ unsigned long _f_f0, _f_f1;
++ do
++ {
++ USItype __m0 = (X_f[0]), __m1 = (Y_f[0]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" ((_z_f[1])):"%r" (X_f[0]),
++ "r" (Y_f
++ [0]));
++ ((_z_f[0])) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[0]), __m1 = (Y_f[1]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[0]),
++ "r" (Y_f
++ [1]));
++ (_b_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[1]), __m1 = (Y_f[0]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[1]),
++ "r" (Y_f
++ [0]));
++ (_c_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[1]), __m1 = (Y_f[1]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[1]),
++ "r" (Y_f
++ [1]));
++ (_d_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[0]), __m1 = (Y_f[2]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[0]),
++ "r" (Y_f
++ [2]));
++ (_e_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[2]), __m1 = (Y_f[0]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_f_f1):"%r" (X_f[2]),
++ "r" (Y_f
++ [0]));
++ (_f_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[1]) = _b_f0 + (_z_f[1]);
++ _c1 = (_z_f[1]) < _b_f0;
++ (_z_f[2]) = _b_f1 + 0;
++ _c2 = (_z_f[2]) < _b_f1;
++ (_z_f[2]) += _c1;
++ _c2 |= (_z_f[2]) < _c1;
++ (_z_f[3]) = 0 + 0 + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[1]) = _c_f0 + (_z_f[1]);
++ _c1 = (_z_f[1]) < _c_f0;
++ (_z_f[2]) = _c_f1 + (_z_f[2]);
++ _c2 = (_z_f[2]) < _c_f1;
++ (_z_f[2]) += _c1;
++ _c2 |= (_z_f[2]) < _c1;
++ (_z_f[3]) = 0 + (_z_f[3]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[2]) = _d_f0 + (_z_f[2]);
++ _c1 = (_z_f[2]) < _d_f0;
++ (_z_f[3]) = _d_f1 + (_z_f[3]);
++ _c2 = (_z_f[3]) < _d_f1;
++ (_z_f[3]) += _c1;
++ _c2 |= (_z_f[3]) < _c1;
++ (_z_f[4]) = 0 + 0 + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[2]) = _e_f0 + (_z_f[2]);
++ _c1 = (_z_f[2]) < _e_f0;
++ (_z_f[3]) = _e_f1 + (_z_f[3]);
++ _c2 = (_z_f[3]) < _e_f1;
++ (_z_f[3]) += _c1;
++ _c2 |= (_z_f[3]) < _c1;
++ (_z_f[4]) = 0 + (_z_f[4]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[2]) = _f_f0 + (_z_f[2]);
++ _c1 = (_z_f[2]) < _f_f0;
++ (_z_f[3]) = _f_f1 + (_z_f[3]);
++ _c2 = (_z_f[3]) < _f_f1;
++ (_z_f[3]) += _c1;
++ _c2 |= (_z_f[3]) < _c1;
++ (_z_f[4]) = 0 + (_z_f[4]) + _c2;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[0]), __m1 = (Y_f[3]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[0]),
++ "r" (Y_f
++ [3]));
++ (_b_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[3]), __m1 = (Y_f[0]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[3]),
++ "r" (Y_f
++ [0]));
++ (_c_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[1]), __m1 = (Y_f[2]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[1]),
++ "r" (Y_f
++ [2]));
++ (_d_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[2]), __m1 = (Y_f[1]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[2]),
++ "r" (Y_f
++ [1]));
++ (_e_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[3]) = _b_f0 + (_z_f[3]);
++ _c1 = (_z_f[3]) < _b_f0;
++ (_z_f[4]) = _b_f1 + (_z_f[4]);
++ _c2 = (_z_f[4]) < _b_f1;
++ (_z_f[4]) += _c1;
++ _c2 |= (_z_f[4]) < _c1;
++ (_z_f[5]) = 0 + 0 + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[3]) = _c_f0 + (_z_f[3]);
++ _c1 = (_z_f[3]) < _c_f0;
++ (_z_f[4]) = _c_f1 + (_z_f[4]);
++ _c2 = (_z_f[4]) < _c_f1;
++ (_z_f[4]) += _c1;
++ _c2 |= (_z_f[4]) < _c1;
++ (_z_f[5]) = 0 + (_z_f[5]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[3]) = _d_f0 + (_z_f[3]);
++ _c1 = (_z_f[3]) < _d_f0;
++ (_z_f[4]) = _d_f1 + (_z_f[4]);
++ _c2 = (_z_f[4]) < _d_f1;
++ (_z_f[4]) += _c1;
++ _c2 |= (_z_f[4]) < _c1;
++ (_z_f[5]) = 0 + (_z_f[5]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[3]) = _e_f0 + (_z_f[3]);
++ _c1 = (_z_f[3]) < _e_f0;
++ (_z_f[4]) = _e_f1 + (_z_f[4]);
++ _c2 = (_z_f[4]) < _e_f1;
++ (_z_f[4]) += _c1;
++ _c2 |= (_z_f[4]) < _c1;
++ (_z_f[5]) = 0 + (_z_f[5]) + _c2;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[2]), __m1 = (Y_f[2]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[2]),
++ "r" (Y_f
++ [2]));
++ (_b_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[1]), __m1 = (Y_f[3]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_c_f1):"%r" (X_f[1]),
++ "r" (Y_f
++ [3]));
++ (_c_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[3]), __m1 = (Y_f[1]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_d_f1):"%r" (X_f[3]),
++ "r" (Y_f
++ [1]));
++ (_d_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[2]), __m1 = (Y_f[3]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_e_f1):"%r" (X_f[2]),
++ "r" (Y_f
++ [3]));
++ (_e_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[3]), __m1 = (Y_f[2]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_f_f1):"%r" (X_f[3]),
++ "r" (Y_f
++ [2]));
++ (_f_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[4]) = _b_f0 + (_z_f[4]);
++ _c1 = (_z_f[4]) < _b_f0;
++ (_z_f[5]) = _b_f1 + (_z_f[5]);
++ _c2 = (_z_f[5]) < _b_f1;
++ (_z_f[5]) += _c1;
++ _c2 |= (_z_f[5]) < _c1;
++ (_z_f[6]) = 0 + 0 + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[4]) = _c_f0 + (_z_f[4]);
++ _c1 = (_z_f[4]) < _c_f0;
++ (_z_f[5]) = _c_f1 + (_z_f[5]);
++ _c2 = (_z_f[5]) < _c_f1;
++ (_z_f[5]) += _c1;
++ _c2 |= (_z_f[5]) < _c1;
++ (_z_f[6]) = 0 + (_z_f[6]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[4]) = _d_f0 + (_z_f[4]);
++ _c1 = (_z_f[4]) < _d_f0;
++ (_z_f[5]) = _d_f1 + (_z_f[5]);
++ _c2 = (_z_f[5]) < _d_f1;
++ (_z_f[5]) += _c1;
++ _c2 |= (_z_f[5]) < _c1;
++ (_z_f[6]) = 0 + (_z_f[6]) + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[5]) = _e_f0 + (_z_f[5]);
++ _c1 = (_z_f[5]) < _e_f0;
++ (_z_f[6]) = _e_f1 + (_z_f[6]);
++ _c2 = (_z_f[6]) < _e_f1;
++ (_z_f[6]) += _c1;
++ _c2 |= (_z_f[6]) < _c1;
++ (_z_f[7]) = 0 + 0 + _c2;
++ }
++ while (0);
++ do
++ {
++ unsigned long _c1, _c2;
++ (_z_f[5]) = _f_f0 + (_z_f[5]);
++ _c1 = (_z_f[5]) < _f_f0;
++ (_z_f[6]) = _f_f1 + (_z_f[6]);
++ _c2 = (_z_f[6]) < _f_f1;
++ (_z_f[6]) += _c1;
++ _c2 |= (_z_f[6]) < _c1;
++ (_z_f[7]) = 0 + (_z_f[7]) + _c2;
++ }
++ while (0);
++ do
++ {
++ USItype __m0 = (X_f[3]), __m1 = (Y_f[3]);
++ __asm__ ("mulhwu %0,%1,%2": "=r" (_b_f1):"%r" (X_f[3]),
++ "r" (Y_f
++ [3]));
++ (_b_f0) = __m0 * __m1;
++ }
++ while (0);
++ do
++ {
++ if (__builtin_constant_p ((_z_f[7])) && ((_z_f[7])) == 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"r" (_b_f1), "%r" (_b_f0),
++ "rI" ((_z_f
++ [6])));
++ else if (__builtin_constant_p ((_z_f[7]))
++ && ((_z_f[7])) == ~(USItype) 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"r" (_b_f1), "%r" (_b_f0),
++ "rI" ((_z_f
++ [6])));
++ else
++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" ((_z_f[7])), "=&r" ((_z_f[6])):"%r" (_b_f1), "r" ((_z_f[7])), "%r" (_b_f0),
++ "rI" ((_z_f
++ [6])));
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = ((3 + 113) - 1) / 32;
++ _down = ((3 + 113) - 1) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= _z_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 7 - _skip; ++_i)
++ _z_f[_i] = _z_f[_i + _skip];
++ else
++ {
++ _s |= _z_f[_i] << _up;
++ for (_i = 0; _i < 7 - _skip; ++_i)
++ _z_f[_i] =
++ _z_f[_i + _skip] >> _down | _z_f[_i + _skip +
++ 1] << _up;
++ _z_f[_i++] = _z_f[7] >> _down;
++ }
++ for (; _i < 8; ++_i)
++ _z_f[_i] = 0;
++ _z_f[0] |= (_s != 0);
++ }
++ while (0);
++ (U_f[3] = (_z_f[3]), U_f[2] = (_z_f[2]), U_f[1] =
++ (_z_f[1]), U_f[0] = (_z_f[0]));
++ }
++ while (0);
++ if (((U_f[3]) & ((unsigned long) 1 << ((3 + 113) % 32))))
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (1) / 32;
++ _down = (1) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= U_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ _s |= U_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i + _skip +
++ 1] << _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ U_f[0] |= _sticky;
++ }
++ while (0);
++ else
++ U_e--;
++ break;
++ case (((3) << 2) | (3)):
++ do
++ {
++ if (((X_f[3]) & ((unsigned long) 1 << (113 - 2) % 32))
++ && !((Y_f[3]) & ((unsigned long) 1 << (113 - 2) % 32)))
++ {
++ U_s = Y_s;
++ (U_f[0] = Y_f[0], U_f[1] = Y_f[1], U_f[2] = Y_f[2], U_f[3] =
++ Y_f[3]);
++ }
++ else
++ {
++ U_s = X_s;
++ (U_f[0] = X_f[0], U_f[1] = X_f[1], U_f[2] = X_f[2], U_f[3] =
++ X_f[3]);
++ }
++ U_c = 3;
++ }
++ while (0);
++ break;
++ case (((3) << 2) | (0)):
++ case (((3) << 2) | (2)):
++ case (((3) << 2) | (1)):
++ U_s = X_s;
++ case (((2) << 2) | (2)):
++ case (((2) << 2) | (0)):
++ case (((1) << 2) | (0)):
++ case (((1) << 2) | (1)):
++ (U_f[0] = X_f[0], U_f[1] = X_f[1], U_f[2] = X_f[2], U_f[3] =
++ X_f[3]);
++ U_c = X_c;
++ break;
++ case (((0) << 2) | (3)):
++ case (((2) << 2) | (3)):
++ case (((1) << 2) | (3)):
++ U_s = Y_s;
++ case (((0) << 2) | (2)):
++ case (((0) << 2) | (1)):
++ (U_f[0] = Y_f[0], U_f[1] = Y_f[1], U_f[2] = Y_f[2], U_f[3] =
++ Y_f[3]);
++ U_c = Y_c;
++ break;
++ case (((2) << 2) | (1)):
++ case (((1) << 2) | (2)):
++ U_s = 0;
++ U_c = 3;
++ (U_f[3] =
++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1), U_f[2] =
++ -1, U_f[1] = -1, U_f[0] = -1);
++ _fex |= (0);
++ break;
++ default:
++ abort ();
++ }
++ }
++ while (0);
++
++/* FP_PACK_Q(u,U) */
++ do
++ {
++ do
++ {
++ switch (U_c)
++ {
++ case 0:
++ U_e += 16383;
++ if (U_e > 0)
++ {
++ do
++ {
++ if ((U_f[0]) & 7)
++ _fex |= (0);
++ switch (0)
++ {
++ case 0:
++ do
++ {
++ if (((U_f[0]) & 15) != ((unsigned long) 1 << 2))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 2)) <
++ ((unsigned long) 1 << 2));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 1:
++ (void) 0;
++ break;
++ case 2:
++ do
++ {
++ if (!U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 3:
++ do
++ {
++ if (U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ }
++ }
++ while (0);
++ if (((U_f[3]) & ((unsigned long) 1 << ((3 + 113) % 32))))
++ {
++ ((U_f[3]) &= ~((unsigned long) 1 << ((3 + 113) % 32)));
++ U_e++;
++ }
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i + _skip +
++ 1] << _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ }
++ while (0);
++ if (U_e >= 32767)
++ {
++ switch (0)
++ {
++ case 0:
++ U_c = 2;
++ break;
++ case 2:
++ if (!U_s)
++ U_c = 2;
++ break;
++ case 3:
++ if (U_s)
++ U_c = 2;
++ break;
++ }
++ if (U_c == 2)
++ {
++ U_e = 32767;
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0);
++ }
++ else
++ {
++ U_e = 32767 - 1;
++ (U_f[3] = (~(signed long) 0), U_f[2] =
++ (~(signed long) 0), U_f[1] =
++ (~(signed long) 0), U_f[0] = (~(signed long) 0));
++ } _fex |= (0);
++ _fex |= (0);
++ }
++ }
++ else
++ {
++ U_e = -U_e + 1;
++ if (U_e <= (3 + 113))
++ {
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (U_e) / 32;
++ _down = (U_e) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= U_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ _s |= U_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ U_f[0] |= _sticky;
++ }
++ while (0);
++ do
++ {
++ if ((U_f[0]) & 7)
++ _fex |= (0);
++ switch (0)
++ {
++ case 0:
++ do
++ {
++ if (((U_f[0]) & 15) !=
++ ((unsigned long) 1 << 2))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 2)) <
++ ((unsigned long) 1 << 2));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 1:
++ (void) 0;
++ break;
++ case 2:
++ do
++ {
++ if (!U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 3:
++ do
++ {
++ if (U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ }
++ }
++ while (0);
++ if ((U_f[3]) &
++ (((unsigned long) 1 << ((3 + 113) % 32)) >> 1))
++ {
++ U_e = 1;
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0);
++ }
++ else
++ {
++ U_e = 0;
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ }
++ while (0);
++ _fex |= (0);
++ }
++ }
++ else
++ {
++ U_e = 0;
++ if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1);
++ do
++ {
++ if ((U_f[0]) & 7)
++ _fex |= (0);
++ switch (0)
++ {
++ case 0:
++ do
++ {
++ if (((U_f[0]) & 15) !=
++ ((unsigned long) 1 << 2))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 2)) <
++ ((unsigned long) 1 << 2));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 1:
++ (void) 0;
++ break;
++ case 2:
++ do
++ {
++ if (!U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 3:
++ do
++ {
++ if (U_s && ((U_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((U_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ U_f[1] += _t;
++ _t = (U_f[1] < _t);
++ U_f[2] += _t;
++ _t = (U_f[2] < _t);
++ U_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ }
++ }
++ while (0);
++ (U_f[0]) >>= (3);
++ }
++ _fex |= (0);
++ }
++ }
++ break;
++ case 1:
++ U_e = 0;
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0);
++ break;
++ case 2:
++ U_e = 32767;
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 0);
++ break;
++ case 3:
++ U_e = 32767;
++ if (!1)
++ {
++ (U_f[3] =
++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1),
++ U_f[2] = -1, U_f[1] = -1, U_f[0] = -1);
++ U_s = 0;
++ }
++ else
++ (U_f[3]) |= ((unsigned long) 1 << (113 - 2) % 32);
++ break;
++ }
++ }
++ while (0);
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.bits.frac0 = U_f[0];
++ _flo.bits.frac1 = U_f[1];
++ _flo.bits.frac2 = U_f[2];
++ _flo.bits.frac3 = U_f[3];
++ _flo.bits.exp = U_e;
++ _flo.bits.sign = U_s;
++ (u) = _flo.flt;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_HANDLE_EXCEPTIONS */
++ do
++ {
++ }
++ while (0);
++
++ /* Subtract. */
++/* FP_INIT_ROUNDMODE */
++ do
++ {
++ }
++ while (0);
++
++/* FP_UNPACK_SEMIRAW_Q(U,u) */
++ do
++ {
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.flt = (u);
++ U_f[0] = _flo.bits.frac0;
++ U_f[1] = _flo.bits.frac1;
++ U_f[2] = _flo.bits.frac2;
++ U_f[3] = _flo.bits.frac3;
++ U_e = _flo.bits.exp;
++ U_s = _flo.bits.sign;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ U_f[_i] = U_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ U_f[_i] =
++ U_f[_i - _skip] << _up | U_f[_i - _skip - 1] >> _down;
++ U_f[_i--] = U_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ U_f[_i] = 0;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_UNPACK_SEMIRAW_Q(Z,z) */
++ do
++ {
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.flt = (z);
++ Z_f[0] = _flo.bits.frac0;
++ Z_f[1] = _flo.bits.frac1;
++ Z_f[2] = _flo.bits.frac2;
++ Z_f[3] = _flo.bits.frac3;
++ Z_e = _flo.bits.exp;
++ Z_s = _flo.bits.sign;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ Z_f[_i] = Z_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ Z_f[_i] =
++ Z_f[_i - _skip] << _up | Z_f[_i - _skip - 1] >> _down;
++ Z_f[_i--] = Z_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_SUB_Q(V,U,Z) */
++ do
++ {
++ if (!(Z_e == 32767 && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)))
++ Z_s ^= 1;
++ do
++ {
++ if (U_s == Z_s)
++ {
++ V_s = U_s;
++ int ediff = U_e - Z_e;
++ if (ediff > 0)
++ {
++ V_e = U_e;
++ if (Z_e == 0)
++ {
++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ==
++ 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto add_done;
++ }
++ else
++ {
++ _fex |= (0);
++ ediff--;
++ if (ediff == 0)
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] + Z_f[0];
++ _c1 = V_f[0] < U_f[0];
++ V_f[1] = U_f[1] + Z_f[1];
++ _c2 = V_f[1] < U_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = U_f[2] + Z_f[2];
++ _c3 = V_f[2] < U_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = U_f[3] + Z_f[3] + _c3;
++ }
++ while (0);
++ goto add3;
++ }
++ if (U_e == 32767)
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3])
++ == 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3)
++ % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto add_done;
++ }
++ goto add1;
++ }
++ }
++ else if (U_e == 32767)
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto add_done;
++ }
++ (Z_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32);
++ add1:if (ediff <= (3 + 113))
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (ediff) / 32;
++ _down = (ediff) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= Z_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ Z_f[_i] = Z_f[_i + _skip];
++ else
++ {
++ _s |= Z_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ Z_f[_i] =
++ Z_f[_i + _skip] >> _down | Z_f[_i +
++ _skip +
++ 1] << _up;
++ Z_f[_i++] = Z_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ Z_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ Z_f[0] |= _sticky;
++ }
++ while (0);
++ else if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ (Z_f[3] = 0, Z_f[2] = 0, Z_f[1] = 0, Z_f[0] = 1);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] + Z_f[0];
++ _c1 = V_f[0] < U_f[0];
++ V_f[1] = U_f[1] + Z_f[1];
++ _c2 = V_f[1] < U_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = U_f[2] + Z_f[2];
++ _c3 = V_f[2] < U_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = U_f[3] + Z_f[3] + _c3;
++ }
++ while (0);
++ }
++ else if (ediff < 0)
++ {
++ ediff = -ediff;
++ V_e = Z_e;
++ if (U_e == 0)
++ {
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ==
++ 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto add_done;
++ }
++ else
++ {
++ _fex |= (0);
++ ediff--;
++ if (ediff == 0)
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] + U_f[0];
++ _c1 = V_f[0] < Z_f[0];
++ V_f[1] = Z_f[1] + U_f[1];
++ _c2 = V_f[1] < Z_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = Z_f[2] + U_f[2];
++ _c3 = V_f[2] < Z_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = Z_f[3] + U_f[3] + _c3;
++ }
++ while (0);
++ goto add3;
++ }
++ if (Z_e == 32767)
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3])
++ == 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3)
++ % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto add_done;
++ }
++ goto add2;
++ }
++ }
++ else if (Z_e == 32767)
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto add_done;
++ }
++ (U_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32);
++ add2:if (ediff <= (3 + 113))
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (ediff) / 32;
++ _down = (ediff) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= U_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ _s |= U_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i +
++ _skip +
++ 1] << _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ U_f[0] |= _sticky;
++ }
++ while (0);
++ else if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] + U_f[0];
++ _c1 = V_f[0] < Z_f[0];
++ V_f[1] = Z_f[1] + U_f[1];
++ _c2 = V_f[1] < Z_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = Z_f[2] + U_f[2];
++ _c3 = V_f[2] < Z_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = Z_f[3] + U_f[3] + _c3;
++ }
++ while (0);
++ }
++ else
++ {
++ if (!(((U_e + 1) & 32767) > 1))
++ {
++ if (U_e == 0)
++ {
++ V_e = 0;
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ _fex |= (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto add_done;
++ }
++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ _fex |= (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto add_done;
++ }
++ else
++ {
++ _fex |= (0);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] + Z_f[0];
++ _c1 = V_f[0] < U_f[0];
++ V_f[1] = U_f[1] + Z_f[1];
++ _c2 = V_f[1] < U_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = U_f[2] + Z_f[2];
++ _c3 = V_f[2] < U_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = U_f[3] + Z_f[3] + _c3;
++ }
++ while (0);
++ if ((V_f[3]) &
++ ((unsigned long) 1 << (113 - 1 + 3) % 32))
++ {
++ (V_f[3]) &=
++ ~(unsigned long) ((unsigned long) 1 <<
++ (113 - 1 + 3) % 32);
++ V_e = 1;
++ }
++ goto add_done;
++ }
++ }
++ else
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ==
++ 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ==
++ 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ V_e = 32767;
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ else
++ do
++ {
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i +
++ _skip] >> _down | U_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ Z_f[_i] = Z_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ Z_f[_i] =
++ Z_f[_i +
++ _skip] >> _down | Z_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ Z_f[_i++] = Z_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ do
++ {
++ if (((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2) %
++ 32))
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2) %
++ 32)))
++ {
++ V_s = Z_s;
++ (V_f[0] = Z_f[0], V_f[1] =
++ Z_f[1], V_f[2] = Z_f[2], V_f[3] =
++ Z_f[3]);
++ }
++ else
++ {
++ V_s = U_s;
++ (V_f[0] = U_f[0], V_f[1] =
++ U_f[1], V_f[2] = U_f[2], V_f[3] =
++ U_f[3]);
++ }
++ V_c = 3;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ V_f[_i] = V_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ V_f[_i] =
++ V_f[_i - _skip] << _up | V_f[_i -
++ _skip
++ -
++ 1] >>
++ _down;
++ V_f[_i--] = V_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ }
++ while (0);
++ goto add_done;
++ }
++ }
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] + Z_f[0];
++ _c1 = V_f[0] < U_f[0];
++ V_f[1] = U_f[1] + Z_f[1];
++ _c2 = V_f[1] < U_f[1];
++ V_f[1] += _c1;
++ _c2 |= V_f[1] < _c1;
++ V_f[2] = U_f[2] + Z_f[2];
++ _c3 = V_f[2] < U_f[2];
++ V_f[2] += _c2;
++ _c3 |= V_f[2] < _c2;
++ V_f[3] = U_f[3] + Z_f[3] + _c3;
++ }
++ while (0);
++ V_e = U_e + 1;
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (1) / 32;
++ _down = (1) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= V_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ _s |= V_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i + _skip +
++ 1] << _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ V_f[0] |= _sticky;
++ }
++ while (0);
++ if (V_e == 32767)
++ do
++ {
++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s))
++ {
++ V_e = 32767;
++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0);
++ }
++ else
++ {
++ V_e = 32767 - 1;
++ _fex |= (0);
++ _fex |= (0);
++ (V_f[3] = (~(signed long) 0), V_f[2] =
++ (~(signed long) 0), V_f[1] =
++ (~(signed long) 0), V_f[0] = (~(signed long) 0));
++ }
++ }
++ while (0);
++ goto add_done;
++ }
++ add3:if ((V_f[3]) &
++ ((unsigned long) 1 << (113 - 1 + 3) % 32))
++ {
++ (V_f[3]) &=
++ ~(unsigned long) ((unsigned long) 1 << (113 - 1 + 3) %
++ 32);
++ V_e++;
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (1) / 32;
++ _down = (1) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= V_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ _s |= V_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i + _skip +
++ 1] << _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ V_f[0] |= _sticky;
++ }
++ while (0);
++ if (V_e == 32767)
++ do
++ {
++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s))
++ {
++ V_e = 32767;
++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0);
++ }
++ else
++ {
++ V_e = 32767 - 1;
++ _fex |= (0);
++ _fex |= (0);
++ (V_f[3] = (~(signed long) 0), V_f[2] =
++ (~(signed long) 0), V_f[1] =
++ (~(signed long) 0), V_f[0] = (~(signed long) 0));
++ }
++ }
++ while (0);
++ }
++ add_done:;
++ }
++ else
++ {
++ int ediff = U_e - Z_e;
++ if (ediff > 0)
++ {
++ V_e = U_e;
++ V_s = U_s;
++ if (Z_e == 0)
++ {
++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ==
++ 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto sub_done;
++ }
++ else
++ {
++ _fex |= (0);
++ ediff--;
++ if (ediff == 0)
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] - Z_f[0];
++ _c1 = V_f[0] > U_f[0];
++ V_f[1] = U_f[1] - Z_f[1];
++ _c2 = V_f[1] > U_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (Z_f[1] == U_f[1]);
++ V_f[2] = U_f[2] - Z_f[2];
++ _c3 = V_f[2] > U_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (Z_f[2] == U_f[2]);
++ V_f[3] = U_f[3] - Z_f[3] - _c3;
++ }
++ while (0);
++ goto sub3;
++ }
++ if (U_e == 32767)
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3])
++ == 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3)
++ % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto sub_done;
++ }
++ goto sub1;
++ }
++ }
++ else if (U_e == 32767)
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ goto sub_done;
++ }
++ (Z_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32);
++ sub1:if (ediff <= (3 + 113))
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (ediff) / 32;
++ _down = (ediff) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= Z_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ Z_f[_i] = Z_f[_i + _skip];
++ else
++ {
++ _s |= Z_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ Z_f[_i] =
++ Z_f[_i + _skip] >> _down | Z_f[_i +
++ _skip +
++ 1] << _up;
++ Z_f[_i++] = Z_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ Z_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ Z_f[0] |= _sticky;
++ }
++ while (0);
++ else if (!((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ (Z_f[3] = 0, Z_f[2] = 0, Z_f[1] = 0, Z_f[0] = 1);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] - Z_f[0];
++ _c1 = V_f[0] > U_f[0];
++ V_f[1] = U_f[1] - Z_f[1];
++ _c2 = V_f[1] > U_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (Z_f[1] == U_f[1]);
++ V_f[2] = U_f[2] - Z_f[2];
++ _c3 = V_f[2] > U_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (Z_f[2] == U_f[2]);
++ V_f[3] = U_f[3] - Z_f[3] - _c3;
++ }
++ while (0);
++ }
++ else if (ediff < 0)
++ {
++ ediff = -ediff;
++ V_e = Z_e;
++ V_s = Z_s;
++ if (U_e == 0)
++ {
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ==
++ 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto sub_done;
++ }
++ else
++ {
++ _fex |= (0);
++ ediff--;
++ if (ediff == 0)
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] - U_f[0];
++ _c1 = V_f[0] > Z_f[0];
++ V_f[1] = Z_f[1] - U_f[1];
++ _c2 = V_f[1] > Z_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (U_f[1] == Z_f[1]);
++ V_f[2] = Z_f[2] - U_f[2];
++ _c3 = V_f[2] > Z_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (U_f[2] == Z_f[2]);
++ V_f[3] = Z_f[3] - U_f[3] - _c3;
++ }
++ while (0);
++ goto sub3;
++ }
++ if (Z_e == 32767)
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3])
++ == 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3)
++ % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto sub_done;
++ }
++ goto sub2;
++ }
++ }
++ else if (Z_e == 32767)
++ {
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ goto sub_done;
++ }
++ (U_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32);
++ sub2:if (ediff <= (3 + 113))
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (ediff) / 32;
++ _down = (ediff) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= U_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ _s |= U_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ U_f[_i] =
++ U_f[_i + _skip] >> _down | U_f[_i +
++ _skip +
++ 1] << _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ U_f[0] |= _sticky;
++ }
++ while (0);
++ else if (!((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ (U_f[3] = 0, U_f[2] = 0, U_f[1] = 0, U_f[0] = 1);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] - U_f[0];
++ _c1 = V_f[0] > Z_f[0];
++ V_f[1] = Z_f[1] - U_f[1];
++ _c2 = V_f[1] > Z_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (U_f[1] == Z_f[1]);
++ V_f[2] = Z_f[2] - U_f[2];
++ _c3 = V_f[2] > Z_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (U_f[2] == Z_f[2]);
++ V_f[3] = Z_f[3] - U_f[3] - _c3;
++ }
++ while (0);
++ }
++ else
++ {
++ if (!(((U_e + 1) & 32767) > 1))
++ {
++ if (U_e == 0)
++ {
++ V_e = 0;
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ V_s = (0 == 3);
++ else
++ {
++ _fex |= (0);
++ V_s = Z_s;
++ }
++ goto sub_done;
++ }
++ else if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ _fex |= (0);
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ V_s = U_s;
++ goto sub_done;
++ }
++ else
++ {
++ _fex |= (0);
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] - Z_f[0];
++ _c1 = V_f[0] > U_f[0];
++ V_f[1] = U_f[1] - Z_f[1];
++ _c2 = V_f[1] > U_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (Z_f[1] == U_f[1]);
++ V_f[2] = U_f[2] - Z_f[2];
++ _c3 = V_f[2] > U_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (Z_f[2] == U_f[2]);
++ V_f[3] = U_f[3] - Z_f[3] - _c3;
++ }
++ while (0);
++ V_s = U_s;
++ if ((V_f[3]) &
++ ((unsigned long) 1 << (113 - 1 + 3) % 32))
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] - U_f[0];
++ _c1 = V_f[0] > Z_f[0];
++ V_f[1] = Z_f[1] - U_f[1];
++ _c2 = V_f[1] > Z_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (U_f[1] == Z_f[1]);
++ V_f[2] = Z_f[2] - U_f[2];
++ _c3 = V_f[2] > Z_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (U_f[2] == Z_f[2]);
++ V_f[3] = Z_f[3] - U_f[3] - _c3;
++ }
++ while (0);
++ V_s = Z_s;
++ }
++ else
++ if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) ==
++ 0))
++ V_s = (0 == 3);
++ goto sub_done;
++ }
++ }
++ else
++ {
++ do
++ {
++ if (U_e == 32767
++ && !((U_f[0] | U_f[1] | U_f[2] | U_f[3]) ==
++ 0)
++ && !((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ do
++ {
++ if (Z_e == 32767
++ && !((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) ==
++ 0)
++ && !((Z_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) %
++ 32)))
++ _fex |= (0);
++ }
++ while (0);
++ V_e = 32767;
++ if (((U_f[0] | U_f[1] | U_f[2] | U_f[3]) == 0))
++ {
++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ V_s = 0;
++ (V_f[3] =
++ ((((unsigned long) 1 << (113 - 2) %
++ 32) << 1) - 1), V_f[2] = -1, V_f[1] =
++ -1, V_f[0] = -1);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ V_f[_i] = V_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ V_f[_i] =
++ V_f[_i -
++ _skip] << _up | V_f[_i -
++ _skip -
++ 1] >>
++ _down;
++ V_f[_i--] = V_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ _fex |= (0);
++ }
++ else
++ {
++ V_s = Z_s;
++ (V_f[0] = Z_f[0], V_f[1] = Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ }
++ }
++ else
++ {
++ if (((Z_f[0] | Z_f[1] | Z_f[2] | Z_f[3]) == 0))
++ {
++ V_s = U_s;
++ (V_f[0] = U_f[0], V_f[1] = U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ }
++ else
++ {
++ do
++ {
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip;
++ ++_i)
++ U_f[_i] = U_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip;
++ ++_i)
++ U_f[_i] =
++ U_f[_i +
++ _skip] >> _down | U_f[_i
++ +
++ _skip
++ +
++ 1]
++ << _up;
++ U_f[_i++] = U_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ U_f[_i] = 0;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip;
++ ++_i)
++ Z_f[_i] = Z_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip;
++ ++_i)
++ Z_f[_i] =
++ Z_f[_i +
++ _skip] >> _down | Z_f[_i
++ +
++ _skip
++ +
++ 1]
++ << _up;
++ Z_f[_i++] = Z_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ Z_f[_i] = 0;
++ }
++ while (0);
++ do
++ {
++ if (((U_f[3]) &
++ ((unsigned long) 1 << (113 - 2)
++ % 32))
++ && !((Z_f[3]) &
++ ((unsigned long) 1 <<
++ (113 - 2) % 32)))
++ {
++ V_s = Z_s;
++ (V_f[0] = Z_f[0], V_f[1] =
++ Z_f[1], V_f[2] =
++ Z_f[2], V_f[3] = Z_f[3]);
++ }
++ else
++ {
++ V_s = U_s;
++ (V_f[0] = U_f[0], V_f[1] =
++ U_f[1], V_f[2] =
++ U_f[2], V_f[3] = U_f[3]);
++ }
++ V_c = 3;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ V_f[_i] = V_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ V_f[_i] =
++ V_f[_i -
++ _skip] << _up | V_f[_i -
++ _skip
++ -
++ 1]
++ >> _down;
++ V_f[_i--] = V_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ }
++ while (0);
++ }
++ }
++ goto sub_done;
++ }
++ }
++ V_e = U_e;
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = U_f[0] - Z_f[0];
++ _c1 = V_f[0] > U_f[0];
++ V_f[1] = U_f[1] - Z_f[1];
++ _c2 = V_f[1] > U_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (Z_f[1] == U_f[1]);
++ V_f[2] = U_f[2] - Z_f[2];
++ _c3 = V_f[2] > U_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (Z_f[2] == U_f[2]);
++ V_f[3] = U_f[3] - Z_f[3] - _c3;
++ }
++ while (0);
++ V_s = U_s;
++ if ((V_f[3]) & ((unsigned long) 1 << (113 - 1 + 3) % 32))
++ {
++ do
++ {
++ unsigned long _c1, _c2, _c3;
++ V_f[0] = Z_f[0] - U_f[0];
++ _c1 = V_f[0] > Z_f[0];
++ V_f[1] = Z_f[1] - U_f[1];
++ _c2 = V_f[1] > Z_f[1];
++ V_f[1] -= _c1;
++ _c2 |= _c1 && (U_f[1] == Z_f[1]);
++ V_f[2] = Z_f[2] - U_f[2];
++ _c3 = V_f[2] > Z_f[2];
++ V_f[2] -= _c2;
++ _c3 |= _c2 && (U_f[2] == Z_f[2]);
++ V_f[3] = Z_f[3] - U_f[3] - _c3;
++ }
++ while (0);
++ V_s = Z_s;
++ }
++ else if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0))
++ {
++ V_e = 0;
++ V_s = (0 == 3);
++ goto sub_done;
++ }
++ goto norm;
++ }
++ sub3:if ((V_f[3]) &
++ ((unsigned long) 1 << (113 - 1 + 3) % 32))
++ {
++ int diff;
++ (V_f[3]) &= ((unsigned long) 1 << (113 - 1 + 3) % 32) - 1;
++ norm:do
++ {
++ if (V_f[3])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ diff = __builtin_clz (V_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ diff = __builtin_clzl (V_f[3]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ diff = __builtin_clzll (V_f[3]);
++ else
++ abort ();
++ }
++ while (0);
++ }
++ else if (V_f[2])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ diff = __builtin_clz (V_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ diff = __builtin_clzl (V_f[2]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ diff = __builtin_clzll (V_f[2]);
++ else
++ abort ();
++ }
++ while (0);
++ diff += 32;
++ }
++ else if (V_f[1])
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ diff = __builtin_clz (V_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ diff = __builtin_clzl (V_f[1]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ diff = __builtin_clzll (V_f[1]);
++ else
++ abort ();
++ }
++ while (0);
++ diff += 32 * 2;
++ }
++ else
++ {
++ do
++ {
++ if (sizeof (unsigned long) ==
++ sizeof (unsigned int))
++ diff = __builtin_clz (V_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long))
++ diff = __builtin_clzl (V_f[0]);
++ else if (sizeof (unsigned long) ==
++ sizeof (unsigned long long))
++ diff = __builtin_clzll (V_f[0]);
++ else
++ abort ();
++ }
++ while (0);
++ diff += 32 * 3;
++ }
++ }
++ while (0);
++ diff -= ((4 * 32) - (3 + 113));
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (diff) / 32;
++ _up = (diff) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ V_f[_i] = V_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ V_f[_i] =
++ V_f[_i - _skip] << _up | V_f[_i - _skip -
++ 1] >> _down;
++ V_f[_i--] = V_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ if (V_e <= diff)
++ {
++ diff = diff - V_e + 1;
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (diff) / 32;
++ _down = (diff) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= V_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ _s |= V_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ V_f[0] |= _sticky;
++ }
++ while (0);
++ V_e = 0;
++ }
++ else
++ {
++ V_e -= diff;
++ (V_f[3]) &=
++ ~(unsigned long) ((unsigned long) 1 << (113 - 1 + 3) %
++ 32);
++ }
++ }
++ sub_done:;
++ }
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_PACK_SEMIRAW_Q(v,V) */
++ do
++ {
++ do
++ {
++ do
++ {
++ if ((V_f[0]) & 7)
++ _fex |= (0);
++ switch (0)
++ {
++ case 0:
++ do
++ {
++ if (((V_f[0]) & 15) != ((unsigned long) 1 << 2))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((V_f[0] +=
++ ((unsigned long) 1 << 2)) <
++ ((unsigned long) 1 << 2));
++ V_f[1] += _t;
++ _t = (V_f[1] < _t);
++ V_f[2] += _t;
++ _t = (V_f[2] < _t);
++ V_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 1:
++ (void) 0;
++ break;
++ case 2:
++ do
++ {
++ if (!V_s && ((V_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((V_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ V_f[1] += _t;
++ _t = (V_f[1] < _t);
++ V_f[2] += _t;
++ _t = (V_f[2] < _t);
++ V_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 3:
++ do
++ {
++ if (V_s && ((V_f[0]) & 7))
++ do
++ {
++ unsigned long _t;
++ _t =
++ ((V_f[0] +=
++ ((unsigned long) 1 << 3)) <
++ ((unsigned long) 1 << 3));
++ V_f[1] += _t;
++ _t = (V_f[1] < _t);
++ V_f[2] += _t;
++ _t = (V_f[2] < _t);
++ V_f[3] += _t;
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ }
++ }
++ while (0);
++ if ((V_f[3]) & (((unsigned long) 1 << ((3 + 113) % 32)) >> 1))
++ {
++ (V_f[3]) &= ~(((unsigned long) 1 << ((3 + 113) % 32)) >> 1);
++ V_e++;
++ if (V_e == 32767)
++ do
++ {
++ if (0 == 0 || (0 == 2 && !V_s) || (0 == 3 && V_s))
++ {
++ V_e = 32767;
++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0);
++ }
++ else
++ {
++ V_e = 32767 - 1;
++ _fex |= (0);
++ _fex |= (0);
++ (V_f[3] = (~(signed long) 0), V_f[2] =
++ (~(signed long) 0), V_f[1] =
++ (~(signed long) 0), V_f[0] = (~(signed long) 0));
++ }
++ }
++ while (0);
++ }
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _down = (3) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i + _skip + 1] << _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ if (!(((V_e + 1) & 32767) > 1)
++ && !((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0))
++ {
++ if (V_e == 0)
++ _fex |= (0);
++ else
++ {
++ if (!1)
++ {
++ (V_f[3] =
++ ((((unsigned long) 1 << (113 - 2) % 32) << 1) - 1),
++ V_f[2] = -1, V_f[1] = -1, V_f[0] = -1);
++ V_s = 0;
++ }
++ else
++ (V_f[3]) |= ((unsigned long) 1 << (113 - 2) % 32);
++ }
++ }
++ }
++ while (0);
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.bits.frac0 = V_f[0];
++ _flo.bits.frac1 = V_f[1];
++ _flo.bits.frac2 = V_f[2];
++ _flo.bits.frac3 = V_f[3];
++ _flo.bits.exp = V_e;
++ _flo.bits.sign = V_s;
++ (v) = _flo.flt;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_HANDLE_EXCEPTIONS */
++ do
++ {
++ }
++ while (0);
++
++ /* Truncate quad to double. */
++/* FP_INIT_ROUNDMODE */
++ do
++ {
++ }
++ while (0);
++
++/* FP_UNPACK_SEMIRAW_Q(V,v) */
++ do
++ {
++ do
++ {
++ union _FP_UNION_Q _flo;
++ _flo.flt = (v);
++ V_f[0] = _flo.bits.frac0;
++ V_f[1] = _flo.bits.frac1;
++ V_f[2] = _flo.bits.frac2;
++ V_f[3] = _flo.bits.frac3;
++ V_e = _flo.bits.exp;
++ V_s = _flo.bits.sign;
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (3) / 32;
++ _up = (3) % 32;
++ _down = 32 - _up;
++ if (!_up)
++ for (_i = 3; _i >= _skip; --_i)
++ V_f[_i] = V_f[_i - _skip];
++ else
++ {
++ for (_i = 3; _i > _skip; --_i)
++ V_f[_i] =
++ V_f[_i - _skip] << _up | V_f[_i - _skip - 1] >> _down;
++ V_f[_i--] = V_f[0] << _up;
++ }
++ for (; _i >= 0; --_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_TRUNC(D,Q,2,4,R,V) */
++ do
++ {
++ if (113 < 53 || 16383 < 1023 + 53 - 1)
++ abort ();
++ R_s = V_s;
++ if ((((V_e + 1) & 32767) > 1))
++ {
++ R_e = V_e + 1023 - 16383;
++ if (R_e >= 2047)
++ do
++ {
++ if (0 == 0 || (0 == 2 && !R_s) || (0 == 3 && R_s))
++ {
++ R_e = 2047;
++ (R_f0 = 0, R_f1 = 0);
++ }
++ else
++ {
++ R_e = 2047 - 1;
++ _fex |= (0);
++ _fex |= (0);
++ (R_f0 = (~(signed long) 0), R_f1 = (~(signed long) 0));
++ }
++ }
++ while (0);
++ else
++ {
++ if (R_e <= 0)
++ {
++ if (R_e <= 1 - 53)
++ (V_f[3] = 0, V_f[2] = 0, V_f[1] = 0, V_f[0] = 0);
++ else
++ {
++ (V_f[3]) |= ((unsigned long) 1 << (113 - 1 + 3) % 32);
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (((3 + 113) - (3 + 53) + 1 - R_e)) / 32;
++ _down = (((3 + 113) - (3 + 53) + 1 - R_e)) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= V_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ _s |= V_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i +
++ _skip +
++ 1] <<
++ _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ V_f[0] |= _sticky;
++ }
++ while (0);
++ }
++ R_e = 0;
++ }
++ else
++ do
++ {
++ int _sticky;
++ do
++ {
++ long _up, _down, _skip, _i;
++ unsigned long _s;
++ _skip = (((3 + 113) - (3 + 53))) / 32;
++ _down = (((3 + 113) - (3 + 53))) % 32;
++ _up = 32 - _down;
++ for (_s = _i = 0; _i < _skip; ++_i)
++ _s |= V_f[_i];
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ _s |= V_f[_i] << _up;
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i + _skip +
++ 1] << _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ _sticky = (_s != 0);
++ }
++ while (0);
++ V_f[0] |= _sticky;
++ }
++ while (0);
++ do
++ {
++ R_f0 = V_f[0];
++ R_f1 = V_f[1];
++ }
++ while (0);
++ }
++ }
++ else
++ {
++ if (V_e == 0)
++ {
++ R_e = 0;
++ (R_f0 = 0, R_f1 = 0);
++ if (!((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0))
++ {
++ _fex |= (0);
++ _fex |= (0);
++ }
++ }
++ else
++ {
++ R_e = 2047;
++ if (((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0))
++ (R_f0 = 0, R_f1 = 0);
++ else
++ {
++ do
++ {
++ if (V_e == 32767
++ && !((V_f[0] | V_f[1] | V_f[2] | V_f[3]) == 0)
++ && !((V_f[3]) &
++ ((unsigned long) 1 << (113 - 2 + 3) % 32)))
++ _fex |= (0);
++ }
++ while (0);
++ do
++ {
++ long _up, _down, _skip, _i;
++ _skip = (((3 + 113) - (3 + 53))) / 32;
++ _down = (((3 + 113) - (3 + 53))) % 32;
++ _up = 32 - _down;
++ if (!_down)
++ for (_i = 0; _i <= 3 - _skip; ++_i)
++ V_f[_i] = V_f[_i + _skip];
++ else
++ {
++ for (_i = 0; _i < 3 - _skip; ++_i)
++ V_f[_i] =
++ V_f[_i + _skip] >> _down | V_f[_i + _skip +
++ 1] << _up;
++ V_f[_i++] = V_f[3] >> _down;
++ }
++ for (; _i < 4; ++_i)
++ V_f[_i] = 0;
++ }
++ while (0);
++ do
++ {
++ R_f0 = V_f[0];
++ R_f1 = V_f[1];
++ }
++ while (0);
++ (R_f1) |= ((unsigned long) 1 << (53 - 2 + 3) % 32);
++ }
++ }
++ }
++ }
++ while (0);
++
++/* FP_PACK_SEMIRAW_D(r,R) */
++ do
++ {
++ do
++ {
++ do
++ {
++ if ((R_f0) & 7)
++ _fex |= (0);
++ switch (0)
++ {
++ case 0:
++ do
++ {
++ if (((R_f0) & 15) != ((unsigned long) 1 << 2))
++ do
++ {
++ if (__builtin_constant_p (0) && (0) == 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 2)));
++ else if (__builtin_constant_p (0)
++ && (0) == ~(USItype) 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 2)));
++ else
++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 2)));
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 1:
++ (void) 0;
++ break;
++ case 2:
++ do
++ {
++ if (!R_s && ((R_f0) & 7))
++ do
++ {
++ if (__builtin_constant_p (0) && (0) == 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ else if (__builtin_constant_p (0)
++ && (0) == ~(USItype) 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ else
++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ case 3:
++ do
++ {
++ if (R_s && ((R_f0) & 7))
++ do
++ {
++ if (__builtin_constant_p (0) && (0) == 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ else if (__builtin_constant_p (0)
++ && (0) == ~(USItype) 0)
++ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2": "=r" (R_f1), "=&r" (R_f0):"r" (R_f1), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ else
++ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3": "=r" (R_f1), "=&r" (R_f0):"%r" (R_f1), "r" (0), "%r" (R_f0),
++ "rI" (((unsigned long) 1 <<
++ 3)));
++ }
++ while (0);
++ }
++ while (0);
++ break;
++ }
++ }
++ while (0);
++ if ((R_f1) & (((unsigned long) 1 << (3 + 53) % 32) >> 1))
++ {
++ (R_f1) &= ~(((unsigned long) 1 << (3 + 53) % 32) >> 1);
++ R_e++;
++ if (R_e == 2047)
++ do
++ {
++ if (0 == 0 || (0 == 2 && !R_s) || (0 == 3 && R_s))
++ {
++ R_e = 2047;
++ (R_f0 = 0, R_f1 = 0);
++ }
++ else
++ {
++ R_e = 2047 - 1;
++ _fex |= (0);
++ _fex |= (0);
++ (R_f0 = (~(signed long) 0), R_f1 =
++ (~(signed long) 0));
++ }
++ }
++ while (0);
++ }
++ (void) (((3) < 32) ? (
++ {
++ R_f0 = R_f0 >> (3) | R_f1 << (32 - (3)); R_f1 >>= (3);}):(
++ {
++ R_f0 = R_f1 >> ((3) - 32); R_f1 = 0;}));
++ if (!(((R_e + 1) & 2047) > 1) && !((R_f1 | R_f0) == 0))
++ {
++ if (R_e == 0)
++ _fex |= (0);
++ else
++ {
++ if (!1)
++ {
++ (R_f0 = -1, R_f1 =
++ ((((unsigned long) 1 << (53 - 2) % 32) << 1) - 1));
++ R_s = 0;
++ }
++ else
++ (R_f1) |= ((unsigned long) 1 << (53 - 2) % 32);
++ }
++ }
++ }
++ while (0);
++ do
++ {
++ union _FP_UNION_D _flo;
++ _flo.bits.frac0 = R_f0;
++ _flo.bits.frac1 = R_f1;
++ _flo.bits.exp = R_e;
++ _flo.bits.sign = R_s;
++ (r) = _flo.flt;
++ }
++ while (0);
++ }
++ while (0);
++
++/* FP_HANDLE_EXCEPTIONS */
++ do
++ {
++ }
++ while (0);
++
++ return r;
++}
++
++
++#endif
++
+ #endif
+diff -urN gcc42-trunc-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver gcc42-patched-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver
+--- gcc42-trunc-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver 2006-08-02 11:07:16.000000000 -0500
++++ gcc42-patched-20060802/gcc/config/rs6000/libgcc-ppc-glibc.ver 2006-09-01 08:28:29.000000000 -0500
+@@ -21,11 +21,32 @@
+ %else
+ GCC_3.4.4 {
+ %endif
++%else
++GCC_4.2.0 {
++%endif
+
+ # long double support
+ __gcc_qadd
+ __gcc_qsub
+ __gcc_qmul
+ __gcc_qdiv
+-}
++
++%ifdef _SOFT_FLOAT
++ __gcc_qneg
++ __gcc_qeq
++ __gcc_qne
++ __gcc_ggt
++ __gcc_qge
++ __gcc_qlt
++ __gcc_qle
++ __gcc_qunord
++ __gcc_stoq
++ __gcc_dtoq
++ __gcc_qtos
++ __gcc_qtod
++ __gcc_qtoi
++ __gcc_qtou
++ __gcc_itoq
++ __gcc_utoq
+ %endif
++}
+diff -urN gcc42-trunc-20060802/gcc/config/rs6000/rs6000.c gcc42-patched-20060802/gcc/config/rs6000/rs6000.c
+--- gcc42-trunc-20060802/gcc/config/rs6000/rs6000.c 2006-08-02 11:07:16.000000000 -0500
++++ gcc42-patched-20060802/gcc/config/rs6000/rs6000.c 2006-09-01 08:28:29.000000000 -0500
+@@ -4016,8 +4016,7 @@
+
+ /* 128-bit constant floating-point values on Darwin should really be
+ loaded as two parts. */
+- if (!TARGET_IEEEQUAD
+- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128
++ if (!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128
+ && mode == TFmode && GET_CODE (operands[1]) == CONST_DOUBLE)
+ {
+ /* DImode is used, not DFmode, because simplify_gen_subreg doesn't
+@@ -9175,9 +9174,6 @@
+ static void
+ rs6000_init_libfuncs (void)
+ {
+- if (!TARGET_HARD_FLOAT)
+- return;
+-
+ if (DEFAULT_ABI != ABI_V4 && TARGET_XCOFF
+ && !TARGET_POWER2 && !TARGET_POWERPC)
+ {
+@@ -9196,6 +9192,27 @@
+ set_optab_libfunc (sub_optab, TFmode, "__gcc_qsub");
+ set_optab_libfunc (smul_optab, TFmode, "__gcc_qmul");
+ set_optab_libfunc (sdiv_optab, TFmode, "__gcc_qdiv");
++
++ if (TARGET_SOFT_FLOAT)
++ {
++ set_optab_libfunc (neg_optab, TFmode, "__gcc_qneg");
++ set_optab_libfunc (eq_optab, TFmode, "__gcc_qeq");
++ set_optab_libfunc (ne_optab, TFmode, "__gcc_qne");
++ set_optab_libfunc (gt_optab, TFmode, "__gcc_qgt");
++ set_optab_libfunc (ge_optab, TFmode, "__gcc_qge");
++ set_optab_libfunc (lt_optab, TFmode, "__gcc_qlt");
++ set_optab_libfunc (le_optab, TFmode, "__gcc_qle");
++ set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord");
++
++ set_conv_libfunc (sext_optab, TFmode, SFmode, "__gcc_stoq");
++ set_conv_libfunc (sext_optab, TFmode, DFmode, "__gcc_dtoq");
++ set_conv_libfunc (trunc_optab, SFmode, TFmode, "__gcc_qtos");
++ set_conv_libfunc (trunc_optab, DFmode, TFmode, "__gcc_qtod");
++ set_conv_libfunc (sfix_optab, SImode, TFmode, "__gcc_qtoi");
++ set_conv_libfunc (ufix_optab, SImode, TFmode, "__gcc_qtou");
++ set_conv_libfunc (sfloat_optab, TFmode, SImode, "__gcc_itoq");
++ set_conv_libfunc (ufloat_optab, TFmode, SImode, "__gcc_utoq");
++ }
+ }
+ else
+ {
+diff -urN gcc42-trunc-20060802/gcc/config/rs6000/rs6000.md gcc42-patched-20060802/gcc/config/rs6000/rs6000.md
+--- gcc42-trunc-20060802/gcc/config/rs6000/rs6000.md 2006-08-02 11:07:16.000000000 -0500
++++ gcc42-patched-20060802/gcc/config/rs6000/rs6000.md 2006-09-01 08:28:29.000000000 -0500
+@@ -7920,42 +7920,44 @@
+ "")
+
+ (define_insn "*movcc_internal1"
+- [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,r,r,r,r,q,cl,r,m")
+- (match_operand:CC 1 "nonimmediate_operand" "y,r,r,x,y,r,h,r,r,m,r"))]
++ [(set (match_operand:CC 0 "nonimmediate_operand" "=y,x,?y,y,r,r,r,r,r,q,cl,r,m")
++ (match_operand:CC 1 "general_operand" "y,r,r,O,x,y,r,I,h,r,r,m,r"))]
+ "register_operand (operands[0], CCmode)
+ || register_operand (operands[1], CCmode)"
+ "@
+ mcrf %0,%1
+ mtcrf 128,%1
+ {rlinm|rlwinm} %1,%1,%F0,0xffffffff\;mtcrf %R0,%1\;{rlinm|rlwinm} %1,%1,%f0,0xffffffff
++ crxor %0,%0,%0
+ mfcr %0%Q1
+ mfcr %0%Q1\;{rlinm|rlwinm} %0,%0,%f1,0xf0000000
+ mr %0,%1
++ {lil|li} %0,%1
+ mf%1 %0
+ mt%0 %1
+ mt%0 %1
+ {l%U1%X1|lwz%U1%X1} %0,%1
+ {st%U0%U1|stw%U0%U1} %1,%0"
+ [(set (attr "type")
+- (cond [(eq_attr "alternative" "0")
++ (cond [(eq_attr "alternative" "0,3")
+ (const_string "cr_logical")
+ (eq_attr "alternative" "1,2")
+ (const_string "mtcr")
+- (eq_attr "alternative" "5,7")
++ (eq_attr "alternative" "6,7,9")
+ (const_string "integer")
+- (eq_attr "alternative" "6")
+- (const_string "mfjmpr")
+ (eq_attr "alternative" "8")
++ (const_string "mfjmpr")
++ (eq_attr "alternative" "10")
+ (const_string "mtjmpr")
+- (eq_attr "alternative" "9")
++ (eq_attr "alternative" "11")
+ (const_string "load")
+- (eq_attr "alternative" "10")
++ (eq_attr "alternative" "12")
+ (const_string "store")
+ (ne (symbol_ref "TARGET_MFCRF") (const_int 0))
+ (const_string "mfcrf")
+ ]
+ (const_string "mfcr")))
+- (set_attr "length" "4,4,12,4,8,4,4,4,4,4,4")])
++ (set_attr "length" "4,4,12,4,4,8,4,4,4,4,4,4,4")])
+
+ ;; For floating-point, we normally deal with the floating-point registers
+ ;; unless -msoft-float is used. The sole exception is that parameter passing
+@@ -8313,8 +8315,7 @@
+ (define_expand "movtf"
+ [(set (match_operand:TF 0 "general_operand" "")
+ (match_operand:TF 1 "any_operand" ""))]
+- "!TARGET_IEEEQUAD
+- && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
++ "!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128"
+ "{ rs6000_emit_move (operands[0], operands[1], TFmode); DONE; }")
+
+ ; It's important to list the o->f and f->o moves before f->f because
+@@ -8333,6 +8334,19 @@
+ { rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
+ [(set_attr "length" "8,8,8,20,20,16")])
+
++(define_insn_and_split "*movtf_softfloat"
++ [(set (match_operand:TF 0 "nonimmediate_operand" "=r,Y,r")
++ (match_operand:TF 1 "input_operand" "YGHF,r,r"))]
++ "!TARGET_IEEEQUAD
++ && (TARGET_SOFT_FLOAT || !TARGET_FPRS) && TARGET_LONG_DOUBLE_128
++ && (gpc_reg_operand (operands[0], TFmode)
++ || gpc_reg_operand (operands[1], TFmode))"
++ "#"
++ "&& reload_completed"
++ [(pc)]
++{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }
++ [(set_attr "length" "20,20,16")])
++
+ (define_expand "extenddftf2"
+ [(parallel [(set (match_operand:TF 0 "nonimmediate_operand" "")
+ (float_extend:TF (match_operand:DF 1 "input_operand" "")))
+diff -urN gcc42-trunc-20060802/gcc/config/rs6000/sysv4.h gcc42-patched-20060802/gcc/config/rs6000/sysv4.h
+--- gcc42-trunc-20060802/gcc/config/rs6000/sysv4.h 2006-08-02 11:07:16.000000000 -0500
++++ gcc42-patched-20060802/gcc/config/rs6000/sysv4.h 2006-09-01 08:28:29.000000000 -0500
+@@ -215,10 +215,6 @@
+ error ("-msecure-plt not supported by your assembler"); \
+ } \
+ \
+- if (TARGET_SOFT_FLOAT && TARGET_LONG_DOUBLE_128 \
+- && rs6000_explicit_options.long_double) \
+- warning (0, "-msoft-float and -mlong-double-128 not supported"); \
+- \
+ /* Treat -fPIC the same as -mrelocatable. */ \
+ if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \
+ { \
+diff -urN gcc42-trunc-20060802/gcc/config/rs6000/t-ppccomm gcc42-patched-20060802/gcc/config/rs6000/t-ppccomm
+--- gcc42-trunc-20060802/gcc/config/rs6000/t-ppccomm 2006-08-02 11:07:16.000000000 -0500
++++ gcc42-patched-20060802/gcc/config/rs6000/t-ppccomm 2006-09-01 08:28:29.000000000 -0500
+@@ -12,15 +12,8 @@
+ cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
+
+ ifneq (,$findstring gnu,$(target))
+-TARGET_LIBGCC2_CFLAGS += -specs=ldblspecs
+-
++TARGET_LIBGCC2_CFLAGS += -mlong-double-128
+ SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc-glibc.ver
+-
+-# Hack to use -mlong-double-128 only when not compiling nof libgcc
+-mklibgcc: ldblspecs
+-
+-ldblspecs: specs
+- sed -e '/cc1_options/{ n; s/$$/ %{!msoft-float:-mlong-double-128}/; }' < specs > $@
+ endif
+
+ # Switch synonyms
diff --git a/packages/gcc/gcc-4.1.2/200-uclibc-locale.patch b/packages/gcc/gcc-4.1.2/200-uclibc-locale.patch
index 9d65a6234e..e5d712e723 100644
--- a/packages/gcc/gcc-4.1.2/200-uclibc-locale.patch
+++ b/packages/gcc/gcc-4.1.2/200-uclibc-locale.patch
@@ -1,6 +1,5 @@
-diff -urN gcc-4.1.0-dist/libstdc++-v3/acinclude.m4 gcc-4.1.0/libstdc++-v3/acinclude.m4
---- gcc-4.1.0-dist/libstdc++-v3/acinclude.m4 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/acinclude.m4 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/acinclude.m4
++++ gcc-4.1.0/libstdc++-v3/acinclude.m4
@@ -1071,7 +1071,7 @@
AC_MSG_CHECKING([for C locale to use])
GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
@@ -61,9 +60,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/acinclude.m4 gcc-4.1.0/libstdc++-v3/acincl
esac
# This is where the testsuite looks for locale catalogs, using the
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
@@ -0,0 +1,63 @@
+// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
+
@@ -128,9 +126,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+#endif
+
+#endif // GLIBC 2.3 and later
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.cc
@@ -0,0 +1,152 @@
+// Wrapper for underlying C-language localization -*- C++ -*-
+
@@ -284,9 +281,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-4.1.0
+{
+ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
+} // namespace std
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h 2006-03-26 13:03:42.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/c_locale.h
@@ -0,0 +1,117 @@
+// Wrapper for underlying C-language localization -*- C++ -*-
+
@@ -405,9 +401,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-4.1.0/
+}
+
+#endif
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
@@ -0,0 +1,306 @@
+// std::codecvt implementation details, GNU version -*- C++ -*-
+
@@ -715,9 +710,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gc
+ }
+#endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/collate_members.cc
@@ -0,0 +1,80 @@
+// std::collate implementation details, GNU version -*- C++ -*-
+
@@ -799,9 +793,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/collate_members.cc gc
+ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
+#endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/ctype_members.cc
@@ -0,0 +1,314 @@
+// std::ctype implementation details, GNU version -*- C++ -*-
+
@@ -1117,9 +1110,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/ctype_members.cc gcc-
+ }
+#endif // _GLIBCXX_USE_WCHAR_T
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.cc
@@ -0,0 +1,100 @@
+// std::messages implementation details, GNU version -*- C++ -*-
+
@@ -1221,9 +1213,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.cc g
+ }
+#endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/messages_members.h
@@ -0,0 +1,121 @@
+// std::messages implementation details, GNU version -*- C++ -*-
+
@@ -1346,9 +1337,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/messages_members.h gc
+ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
+ }
+ }
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/monetary_members.cc
@@ -0,0 +1,692 @@
+// std::moneypunct implementation details, GNU version -*- C++ -*-
+
@@ -1757,7 +1747,7 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc g
+# ifdef __UCLIBC_HAS_XLOCALE__
+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
-+# else
++# elif defined __UCLIBC_HAS_LOCALE__
+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
+# endif
@@ -1912,7 +1902,7 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc g
+# ifdef __UCLIBC_HAS_XLOCALE__
+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
-+# else
++# elif defined __UCLIBC_HAS_LOCALE__
+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
+# endif
@@ -2042,9 +2032,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/monetary_members.cc g
+ }
+#endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/numeric_members.cc
@@ -0,0 +1,173 @@
+// std::numpunct implementation details, GNU version -*- C++ -*-
+
@@ -2185,7 +2174,7 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gc
+# ifdef __UCLIBC_HAS_XLOCALE__
+ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
+ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
-+# else
++# elif defined __UCLIBC_HAS_LOCALE__
+ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
+ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
+# endif
@@ -2219,9 +2208,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/numeric_members.cc gc
+ { delete _M_data; }
+ #endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc 2006-03-25 22:18:37.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.cc
@@ -0,0 +1,406 @@
+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
+
@@ -2629,9 +2617,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.cc gcc-4
+ }
+#endif
+}
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h
---- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h 2005-10-21 02:34:06.000000000 -0600
+--- gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h
++++ gcc-4.1.0/libstdc++-v3/config/locale/uclibc/time_members.h
@@ -0,0 +1,76 @@
+// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
+
@@ -2709,9 +2696,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/locale/uclibc/time_members.h gcc-4.
+ delete _M_data;
+ _S_destroy_c_locale(_M_c_locale_timepunct);
+ }
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h
---- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_base.h
@@ -0,0 +1,64 @@
+// Locale support -*- C++ -*-
+
@@ -2777,9 +2763,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_base.h gcc-4.1.0/li
+ static const mask punct = _ISpunct;
+ static const mask alnum = _ISalpha | _ISdigit;
+ };
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
---- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_inline.h
@@ -0,0 +1,69 @@
+// Locale support -*- C++ -*-
+
@@ -2850,9 +2835,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_inline.h gcc-4.1.0/
+ ++__low;
+ return __low;
+ }
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
---- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/ctype_noninline.h
@@ -0,0 +1,92 @@
+// Locale support -*- C++ -*-
+
@@ -2946,9 +2930,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/ctype_noninline.h gcc-4.1
+ }
+ return __high;
+ }
-diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h
---- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h 1969-12-31 17:00:00.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h
++++ gcc-4.1.0/libstdc++-v3/config/os/uclibc/os_defines.h
@@ -0,0 +1,44 @@
+// Specific definitions for GNU/Linux -*- C++ -*-
+
@@ -2994,9 +2977,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/config/os/uclibc/os_defines.h gcc-4.1.0/li
+#define __NO_STRING_INLINES
+
+#endif
-diff -urN gcc-4.1.0-dist/libstdc++-v3/configure gcc-4.1.0/libstdc++-v3/configure
---- gcc-4.1.0-dist/libstdc++-v3/configure 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/configure 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/configure
++++ gcc-4.1.0/libstdc++-v3/configure
@@ -4005,6 +4005,11 @@
lt_cv_deplibs_check_method=pass_all
;;
@@ -3105,9 +3087,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/configure gcc-4.1.0/libstdc++-v3/configure
esac
# This is where the testsuite looks for locale catalogs, using the
-diff -urN gcc-4.1.0-dist/libstdc++-v3/configure.host gcc-4.1.0/libstdc++-v3/configure.host
---- gcc-4.1.0-dist/libstdc++-v3/configure.host 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/configure.host 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/configure.host
++++ gcc-4.1.0/libstdc++-v3/configure.host
@@ -261,6 +261,12 @@
;;
esac
@@ -3121,9 +3102,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/configure.host gcc-4.1.0/libstdc++-v3/conf
# Set any OS-dependent and CPU-dependent bits.
# THIS TABLE IS SORTED. KEEP IT THAT WAY.
-diff -urN gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4 gcc-4.1.0/libstdc++-v3/crossconfig.m4
---- gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/crossconfig.m4 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4
++++ gcc-4.1.0/libstdc++-v3/crossconfig.m4
@@ -143,6 +143,99 @@
;;
esac
@@ -3233,9 +3213,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/crossconfig.m4 gcc-4.1.0/libstdc++-v3/cros
;;
*)
AC_DEFINE(_GLIBCXX_USE_LFS)
-diff -urN gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h
---- gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_compatibility/wchar.h
@@ -101,7 +101,9 @@
using std::wmemcpy;
using std::wmemmove;
@@ -3246,9 +3225,8 @@ diff -urN gcc-4.1.0-dist/libstdc++-v3/include/c_compatibility/wchar.h gcc-4.1.0/
#if _GLIBCXX_USE_C99
using std::wcstold;
-diff -urN gcc-4.1.0-dist/libstdc++-v3/include/c_std/std_cwchar.h gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h
---- gcc-4.1.0-dist/libstdc++-v3/include/c_std/std_cwchar.h 2006-03-26 12:08:28.000000000 -0700
-+++ gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h 2006-03-25 22:06:30.000000000 -0700
+--- gcc-4.1.0-dist/libstdc++-v3/include/c_std/std_cwchar.h
++++ gcc-4.1.0/libstdc++-v3/include/c_std/std_cwchar.h
@@ -180,7 +180,9 @@
using ::wcscoll;
using ::wcscpy;
diff --git a/packages/gcc/gcc-4.1.2/800-arm-bigendian.patch b/packages/gcc/gcc-4.1.2/800-arm-bigendian.patch
index 1fa5ae1cd2..0a9417419e 100644
--- a/packages/gcc/gcc-4.1.2/800-arm-bigendian.patch
+++ b/packages/gcc/gcc-4.1.2/800-arm-bigendian.patch
@@ -3,8 +3,10 @@ Adds support for arm*b-linux* big-endian ARM targets
See http://gcc.gnu.org/PR16350
---- gcc-4.1.0/gcc/config/arm/linux-elf.h
-+++ gcc-4.1.0/gcc/config/arm/linux-elf.h
+Index: gcc-4.1.1/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-elf.h
++++ gcc-4.1.1/gcc/config/arm/linux-elf.h
@@ -28,19 +28,33 @@
#undef TARGET_VERSION
#define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr);
@@ -51,9 +53,11 @@ See http://gcc.gnu.org/PR16350
SUBTARGET_EXTRA_LINK_SPEC
#undef LINK_SPEC
---- gcc-4.1.0/gcc/config.gcc
-+++ gcc-4.1.0/gcc/config.gcc
-@@ -672,6 +672,11 @@
+Index: gcc-4.1.1/gcc/config.gcc
+===================================================================
+--- gcc-4.1.1.orig/gcc/config.gcc
++++ gcc-4.1.1/gcc/config.gcc
+@@ -672,6 +672,11 @@ arm*-*-netbsd*)
;;
arm*-*-linux*) # ARM GNU/Linux with ELF
tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
@@ -65,3 +69,59 @@ See http://gcc.gnu.org/PR16350
tmake_file="${tmake_file} t-linux arm/t-arm"
case ${target} in
arm*-*-linux-gnueabi)
+Index: gcc-4.1.1/gcc/config/arm/linux-eabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-eabi.h
++++ gcc-4.1.1/gcc/config/arm/linux-eabi.h
+@@ -20,6 +20,17 @@
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#undef TARGET_LINKER_EMULATION
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_LINKER_EMULATION "armelfb_linux_eabi"
++#else
++#define TARGET_LINKER_EMULATION "armelf_linux_eabi"
++#endif
++
+ /* On EABI GNU/Linux, we want both the BPABI builtins and the
+ GNU/Linux builtins. */
+ #undef TARGET_OS_CPP_BUILTINS
+@@ -48,7 +59,7 @@
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
+
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION
+
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
+Index: gcc-4.1.1/gcc/config/arm/bpabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/bpabi.h
++++ gcc-4.1.1/gcc/config/arm/bpabi.h
+@@ -33,9 +33,19 @@
+ #undef FPUTYPE_DEFAULT
+ #define FPUTYPE_DEFAULT FPUTYPE_VFP
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#endif
++
+ /* EABI targets should enable interworking by default. */
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT MASK_INTERWORK
++#define TARGET_DEFAULT (MASK_INTERWORK | TARGET_ENDIAN_DEFAULT)
+
+ /* The ARM BPABI functions return a boolean; they use no special
+ calling convention. */
diff --git a/packages/gcc/gcc-4.1.2/cache-amnesia.patch b/packages/gcc/gcc-4.1.2/cache-amnesia.patch
new file mode 100644
index 0000000000..ef7cd111c5
--- /dev/null
+++ b/packages/gcc/gcc-4.1.2/cache-amnesia.patch
@@ -0,0 +1,13 @@
+diff --git a/gcc/configure b/gcc/configure
+index 44620ab..6e1830c 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -12272,7 +12272,7 @@ else
+ esac
+ saved_CFLAGS="${CFLAGS}"
+ CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+- ${realsrcdir}/configure \
++ CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
+ --enable-languages=${enable_languages-all} \
+ --target=$target_alias --host=$build_alias --build=$build_alias
+ CFLAGS="${saved_CFLAGS}"
diff --git a/packages/gcc/gcc-4.2-20060513/armeb-fix.patch b/packages/gcc/gcc-4.2-20060513/armeb-fix.patch
deleted file mode 100644
index 42bb4ea9ab..0000000000
--- a/packages/gcc/gcc-4.2-20060513/armeb-fix.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- gcc-4.0-20050305/gcc/config/arm/linux-elf.h.orig 2005-03-23 18:44:54.822707377 +0100
-+++ gcc-4.0-20050305/gcc/config/arm/linux-elf.h 2005-03-23 18:46:18.228560206 +0100
-@@ -31,19 +31,33 @@
- /* Do not assume anything about header files. */
- #define NO_IMPLICIT_EXTERN_C
-
-+/*
-+ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for
-+ * arm*b-*-linux* (big endian) configurations.
-+ */
-+#if TARGET_BIG_ENDIAN_DEFAULT
-+#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
-+#define TARGET_ENDIAN_OPTION "mbig-endian"
-+#define TARGET_LINKER_EMULATION "armelfb_linux"
-+#else
-+#define TARGET_ENDIAN_DEFAULT 0
-+#define TARGET_ENDIAN_OPTION "mlittle-endian"
-+#define TARGET_LINKER_EMULATION "armelf_linux"
-+#endif
-+
- #undef TARGET_DEFAULT_FLOAT_ABI
- #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
-
- #undef TARGET_DEFAULT
--#define TARGET_DEFAULT (0)
-+#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
-
- #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
-
--#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
-+#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
-
- #undef MULTILIB_DEFAULTS
- #define MULTILIB_DEFAULTS \
-- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
-+ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
-
- /* The GNU C++ standard library requires that these macros be defined. */
- #undef CPLUSPLUS_CPP_SPEC
-@@ -90,7 +104,7 @@
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
- -X \
-- %{mbig-endian:-EB}" \
-+ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
- SUBTARGET_EXTRA_LINK_SPEC
-
- #define TARGET_OS_CPP_BUILTINS() \
---- gcc-4.0-20050305/gcc/config.gcc.orig 2005-03-23 18:46:23.318105335 +0100
-+++ gcc-4.0-20050305/gcc/config.gcc 2005-03-23 18:47:41.592546386 +0100
-@@ -650,6 +650,11 @@
- ;;
- arm*-*-linux*) # ARM GNU/Linux with ELF
- tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
-+ case $target in
-+ arm*b-*-linux*)
-+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
-+ ;;
-+ esac
- tmake_file="${tmake_file} arm/t-arm arm/t-linux"
- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- gnu_ld=yes
diff --git a/packages/gcc/gcc-4.2-20060513/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.2-20060513/zecke-xgcc-cpp.patch
deleted file mode 100644
index ba7d7257d9..0000000000
--- a/packages/gcc/gcc-4.2-20060513/zecke-xgcc-cpp.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: gcc-4.0.2/Makefile.in
-===================================================================
---- gcc-4.0.2.orig/Makefile.in 2006-08-06 13:17:09.000000000 +0200
-+++ gcc-4.0.2/Makefile.in 2006-08-06 13:18:35.000000000 +0200
-@@ -197,6 +197,7 @@
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
-+ CPP="$(CC_FOR_TARGET) -E"; export CCP; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
diff --git a/packages/initscripts/initscripts-1.0/angstrom/.mtn2git_empty b/packages/gcc/gcc-4.2.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/initscripts/initscripts-1.0/angstrom/.mtn2git_empty
+++ b/packages/gcc/gcc-4.2.1/.mtn2git_empty
diff --git a/packages/gcc/gcc-4.2.1/100-uclibc-conf.patch b/packages/gcc/gcc-4.2.1/100-uclibc-conf.patch
new file mode 100644
index 0000000000..4243ff7b91
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/100-uclibc-conf.patch
@@ -0,0 +1,200 @@
+--- gcc/libgomp/configure
++++ gcc/libgomp/configure
+@@ -3771,7 +3771,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/gcc/config/cris/linux.h
++++ gcc/gcc/config/cris/linux.h
+@@ -74,7 +74,11 @@
+ #define CRIS_DEFAULT_CPU_VERSION CRIS_CPU_NG
+
+ #undef CRIS_SUBTARGET_VERSION
+-#define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
++#if UCLIBC_DEFAULT
++# define CRIS_SUBTARGET_VERSION " - cris-axis-linux-uclibc"
++#else
++# define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
++#endif
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
+--- gcc/libstdc++-v3/configure
++++ gcc/libstdc++-v3/configure
+@@ -4276,7 +4276,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/zlib/configure
++++ gcc/zlib/configure
+@@ -3422,7 +3422,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libobjc/configure
++++ gcc/libobjc/configure
+@@ -3309,7 +3309,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libgfortran/configure
++++ gcc/libgfortran/configure
+@@ -3695,7 +3695,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libmudflap/configure
++++ gcc/libmudflap/configure
+@@ -5378,7 +5378,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/boehm-gc/configure
++++ gcc/boehm-gc/configure
+@@ -4316,7 +4316,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libffi/configure
++++ gcc/libffi/configure
+@@ -3453,7 +3453,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libssp/configure
++++ gcc/libssp/configure
+@@ -4409,7 +4409,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/contrib/regression/objs-gcc.sh
++++ gcc/contrib/regression/objs-gcc.sh
+@@ -105,6 +105,10 @@
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++ make all-gdb all-dejagnu all-ld || exit 1
++ make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+--- gcc/libjava/classpath/ltconfig
++++ gcc/libjava/classpath/ltconfig
+@@ -603,7 +603,7 @@
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+
+@@ -1251,7 +1251,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+--- gcc/libjava/classpath/configure
++++ gcc/libjava/classpath/configure
+@@ -4665,7 +4665,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libjava/configure
++++ gcc/libjava/configure
+@@ -5212,7 +5212,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/libtool.m4
++++ gcc/libtool.m4
+@@ -739,7 +739,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+--- gcc/ltconfig
++++ gcc/ltconfig
+@@ -603,7 +603,7 @@
+
+ # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+ case $host_os in
+-linux-gnu*) ;;
++linux-gnu*|linux-uclibc*) ;;
+ linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+ esac
+
+@@ -1251,7 +1251,7 @@
+ ;;
+
+ # This must be Linux ELF.
+-linux-gnu*)
++linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
diff --git a/packages/gcc/gcc-4.2.1/110-arm-eabi.patch b/packages/gcc/gcc-4.2.1/110-arm-eabi.patch
new file mode 100644
index 0000000000..acebe5308f
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/110-arm-eabi.patch
@@ -0,0 +1,27 @@
+--- gcc-2005q3-1.orig/gcc/config.gcc 2005-10-31 19:02:54.000000000 +0300
++++ gcc-2005q3-1/gcc/config.gcc 2006-01-27 01:09:09.000000000 +0300
+@@ -674,7 +674,7 @@
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+ tmake_file="t-slibgcc-elf-ver t-linux arm/t-arm"
+ case ${target} in
+- arm*-*-linux-gnueabi)
++ arm*-*-linux-gnueabi | arm*-*-linux-uclibcgnueabi)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
+ # The BPABI long long divmod functions return a 128-bit value in
+
+diff -urN gcc-2005q3-2/gcc/config/arm/linux-eabi.h gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h
+--- gcc-2005q3-2/gcc/config/arm/linux-eabi.h 2005-12-07 23:14:16.000000000 +0300
++++ gcc-2005q3-2.new/gcc/config/arm/linux-eabi.h 2006-03-29 19:02:34.000000000 +0400
+@@ -53,7 +53,11 @@
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
+ #undef LINUX_TARGET_INTERPRETER
++#ifdef USE_UCLIBC
++#define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"
++#else
+ #define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3"
++#endif
+
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
diff --git a/packages/gcc/gcc-4.2.1/200-uclibc-locale.patch b/packages/gcc/gcc-4.2.1/200-uclibc-locale.patch
new file mode 100644
index 0000000000..ea21388b75
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/200-uclibc-locale.patch
@@ -0,0 +1,2790 @@
+--- gcc/libstdc++-v3/acinclude.m4
++++ gcc/libstdc++-v3/acinclude.m4
+@@ -1369,7 +1369,7 @@
+ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
+ GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@],
+ [use MODEL for target locale package],
+- [permit generic|gnu|ieee_1003.1-2001|yes|no|auto])
++ [permit generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto])
+
+ # Deal with gettext issues. Default to not using it (=no) until we detect
+ # support for it later. Let the user turn it off via --e/d, but let that
+@@ -1385,6 +1385,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ *-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ AC_EGREP_CPP([_GLIBCXX_ok], [
+ #include <features.h>
+@@ -1528,6 +1531,40 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ AC_MSG_RESULT(uclibc)
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ AC_CHECK_PROG(check_msgfmt, msgfmt, yes, no)
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++ AC_SUBST(glibcxx_MOFILES)
++ AC_SUBST(glibcxx_POFILES)
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+--- gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
++++ gcc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
+@@ -0,0 +1,63 @@
++// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
++
++// Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// Written by Jakub Jelinek <jakub@redhat.com>
++
++#include <bits/c++config.h>
++#include <clocale>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning clean this up
++#endif
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++
++extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
++extern "C" __typeof(strcoll_l) __strcoll_l;
++extern "C" __typeof(strftime_l) __strftime_l;
++extern "C" __typeof(strtod_l) __strtod_l;
++extern "C" __typeof(strtof_l) __strtof_l;
++extern "C" __typeof(strtold_l) __strtold_l;
++extern "C" __typeof(strxfrm_l) __strxfrm_l;
++extern "C" __typeof(newlocale) __newlocale;
++extern "C" __typeof(freelocale) __freelocale;
++extern "C" __typeof(duplocale) __duplocale;
++extern "C" __typeof(uselocale) __uselocale;
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++extern "C" __typeof(iswctype_l) __iswctype_l;
++extern "C" __typeof(towlower_l) __towlower_l;
++extern "C" __typeof(towupper_l) __towupper_l;
++extern "C" __typeof(wcscoll_l) __wcscoll_l;
++extern "C" __typeof(wcsftime_l) __wcsftime_l;
++extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
++extern "C" __typeof(wctype_l) __wctype_l;
++#endif
++
++#endif // GLIBC 2.3 and later
+--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.cc
+@@ -0,0 +1,160 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <cerrno> // For errno
++#include <locale>
++#include <stdexcept>
++#include <langinfo.h>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
++#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
++#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
++#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
++#define __strtof_l(S, E, L) strtof((S), (E))
++#define __strtod_l(S, E, L) strtod((S), (E))
++#define __strtold_l(S, E, L) strtold((S), (E))
++#warning should dummy __newlocale check for C|POSIX ?
++#define __newlocale(a, b, c) NULL
++#define __freelocale(a) ((void)0)
++#define __duplocale(a) __c_locale()
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ float __f = __strtof_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __f;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ double __d = __strtod_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __d;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ template<>
++ void
++ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
++ const __c_locale& __cloc)
++ {
++ if (!(__err & ios_base::failbit))
++ {
++ char* __sanity;
++ errno = 0;
++ long double __ld = __strtold_l(__s, &__sanity, __cloc);
++ if (__sanity != __s && errno != ERANGE)
++ __v = __ld;
++ else
++ __err |= ios_base::failbit;
++ }
++ }
++
++ void
++ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
++ __c_locale __old)
++ {
++ __cloc = __newlocale(1 << LC_ALL, __s, __old);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ if (!__cloc)
++ {
++ // This named locale is not supported by the underlying OS.
++ __throw_runtime_error(__N("locale::facet::_S_create_c_locale "
++ "name not valid"));
++ }
++#endif
++ }
++
++ void
++ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
++ {
++ if (_S_get_c_locale() != __cloc)
++ __freelocale(__cloc);
++ }
++
++ __c_locale
++ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
++ { return __duplocale(__cloc); }
++} // namespace std
++
++namespace __gnu_cxx
++{
++ const char* const category_names[6 + _GLIBCXX_NUM_CATEGORIES] =
++ {
++ "LC_CTYPE",
++ "LC_NUMERIC",
++ "LC_TIME",
++ "LC_COLLATE",
++ "LC_MONETARY",
++ "LC_MESSAGES",
++#if _GLIBCXX_NUM_CATEGORIES != 0
++ "LC_PAPER",
++ "LC_NAME",
++ "LC_ADDRESS",
++ "LC_TELEPHONE",
++ "LC_MEASUREMENT",
++ "LC_IDENTIFICATION"
++#endif
++ };
++}
++
++namespace std
++{
++ const char* const* const locale::_S_categories = __gnu_cxx::category_names;
++} // namespace std
+--- gcc/libstdc++-v3/config/locale/uclibc/c_locale.h
++++ gcc/libstdc++-v3/config/locale/uclibc/c_locale.h
+@@ -0,0 +1,117 @@
++// Wrapper for underlying C-language localization -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.8 Standard locale categories.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifndef _C_LOCALE_H
++#define _C_LOCALE_H 1
++
++#pragma GCC system_header
++
++#include <cstring> // get std::strlen
++#include <cstdio> // get std::snprintf or std::sprintf
++#include <clocale>
++#include <langinfo.h> // For codecvt
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this
++#endif
++#ifdef __UCLIBC_HAS_LOCALE__
++#include <iconv.h> // For codecvt using iconv, iconv_t
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++#include <libintl.h> // For messages
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning what is _GLIBCXX_C_LOCALE_GNU for
++#endif
++#define _GLIBCXX_C_LOCALE_GNU 1
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix categories
++#endif
++// #define _GLIBCXX_NUM_CATEGORIES 6
++#define _GLIBCXX_NUM_CATEGORIES 0
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++namespace __gnu_cxx
++{
++ extern "C" __typeof(uselocale) __uselocale;
++}
++#endif
++
++namespace std
++{
++#ifdef __UCLIBC_HAS_XLOCALE__
++ typedef __locale_t __c_locale;
++#else
++ typedef int* __c_locale;
++#endif
++
++ // Convert numeric value of type _Tv to string and return length of
++ // string. If snprintf is available use it, otherwise fall back to
++ // the unsafe sprintf which, in general, can be dangerous and should
++ // be avoided.
++ template<typename _Tv>
++ int
++ __convert_from_v(char* __out,
++ const int __size __attribute__ ((__unused__)),
++ const char* __fmt,
++#ifdef __UCLIBC_HAS_XCLOCALE__
++ _Tv __v, const __c_locale& __cloc, int __prec)
++ {
++ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
++#else
++ _Tv __v, const __c_locale&, int __prec)
++ {
++# ifdef __UCLIBC_HAS_LOCALE__
++ char* __old = std::setlocale(LC_ALL, NULL);
++ char* __sav = new char[std::strlen(__old) + 1];
++ std::strcpy(__sav, __old);
++ std::setlocale(LC_ALL, "C");
++# endif
++#endif
++
++ const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
++
++#ifdef __UCLIBC_HAS_XCLOCALE__
++ __gnu_cxx::__uselocale(__old);
++#elif defined __UCLIBC_HAS_LOCALE__
++ std::setlocale(LC_ALL, __sav);
++ delete [] __sav;
++#endif
++ return __ret;
++ }
++}
++
++#endif
+--- gcc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
+@@ -0,0 +1,306 @@
++// std::codecvt implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.5 - Template class codecvt
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++namespace std
++{
++ // Specializations.
++#ifdef _GLIBCXX_USE_WCHAR_T
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_out(state_type& __state, const intern_type* __from,
++ const intern_type* __from_end, const intern_type*& __from_next,
++ extern_type* __to, extern_type* __to_end,
++ extern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // wcsnrtombs is *very* fast but stops if encounters NUL characters:
++ // in case we fall back to wcrtomb and then continue, in a loop.
++ // NB: wcsnrtombs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const intern_type* __from_chunk_end = wmemchr(__from_next, L'\0',
++ __from_end - __from_next);
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ const size_t __conv = wcsnrtombs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // wcrtomb.
++ for (; __from < __from_next; ++__from)
++ __to_next += wcrtomb(__to_next, *__from, &__tmp_state);
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ extern_type __buf[MB_LEN_MAX];
++ __tmp_state = __state;
++ const size_t __conv = wcrtomb(__buf, *__from_next, &__tmp_state);
++ if (__conv > static_cast<size_t>(__to_end - __to_next))
++ __ret = partial;
++ else
++ {
++ memcpy(__to_next, __buf, __conv);
++ __state = __tmp_state;
++ __to_next += __conv;
++ ++__from_next;
++ }
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ codecvt_base::result
++ codecvt<wchar_t, char, mbstate_t>::
++ do_in(state_type& __state, const extern_type* __from,
++ const extern_type* __from_end, const extern_type*& __from_next,
++ intern_type* __to, intern_type* __to_end,
++ intern_type*& __to_next) const
++ {
++ result __ret = ok;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we store a L'\0' and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++ for (__from_next = __from, __to_next = __to;
++ __from_next < __from_end && __to_next < __to_end
++ && __ret == ok;)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from_next, '\0',
++ __from_end
++ - __from_next));
++ if (!__from_chunk_end)
++ __from_chunk_end = __from_end;
++
++ __from = __from_next;
++ size_t __conv = mbsnrtowcs(__to_next, &__from_next,
++ __from_chunk_end - __from_next,
++ __to_end - __to_next, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (;; ++__to_next, __from += __conv)
++ {
++ __conv = mbrtowc(__to_next, __from, __from_end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __from_next = __from;
++ __state = __tmp_state;
++ __ret = error;
++ }
++ else if (__from_next && __from_next < __from_chunk_end)
++ {
++ // It is unclear what to return in this case (see DR 382).
++ __to_next += __conv;
++ __ret = partial;
++ }
++ else
++ {
++ __from_next = __from_chunk_end;
++ __to_next += __conv;
++ }
++
++ if (__from_next < __from_end && __ret == ok)
++ {
++ if (__to_next < __to_end)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from_next;
++ *__to_next++ = L'\0';
++ }
++ else
++ __ret = partial;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_encoding() const throw()
++ {
++ // XXX This implementation assumes that the encoding is
++ // stateless and is either single-byte or variable-width.
++ int __ret = 0;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ if (MB_CUR_MAX == 1)
++ __ret = 1;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_max_length() const throw()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++ // XXX Probably wrong for stateful encodings.
++ int __ret = MB_CUR_MAX;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __ret;
++ }
++
++ int
++ codecvt<wchar_t, char, mbstate_t>::
++ do_length(state_type& __state, const extern_type* __from,
++ const extern_type* __end, size_t __max) const
++ {
++ int __ret = 0;
++ state_type __tmp_state(__state);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_codecvt);
++#endif
++
++ // mbsnrtowcs is *very* fast but stops if encounters NUL characters:
++ // in case we advance past it and then continue, in a loop.
++ // NB: mbsnrtowcs is a GNU extension
++
++ // A dummy internal buffer is needed in order for mbsnrtocws to consider
++ // its fourth parameter (it wouldn't with NULL as first parameter).
++ wchar_t* __to = static_cast<wchar_t*>(__builtin_alloca(sizeof(wchar_t)
++ * __max));
++ while (__from < __end && __max)
++ {
++ const extern_type* __from_chunk_end;
++ __from_chunk_end = static_cast<const extern_type*>(memchr(__from, '\0',
++ __end
++ - __from));
++ if (!__from_chunk_end)
++ __from_chunk_end = __end;
++
++ const extern_type* __tmp_from = __from;
++ size_t __conv = mbsnrtowcs(__to, &__from,
++ __from_chunk_end - __from,
++ __max, &__state);
++ if (__conv == static_cast<size_t>(-1))
++ {
++ // In case of error, in order to stop at the exact place we
++ // have to start again from the beginning with a series of
++ // mbrtowc.
++ for (__from = __tmp_from;; __from += __conv)
++ {
++ __conv = mbrtowc(NULL, __from, __end - __from,
++ &__tmp_state);
++ if (__conv == static_cast<size_t>(-1)
++ || __conv == static_cast<size_t>(-2))
++ break;
++ }
++ __state = __tmp_state;
++ __ret += __from - __tmp_from;
++ break;
++ }
++ if (!__from)
++ __from = __from_chunk_end;
++
++ __ret += __from - __tmp_from;
++ __max -= __conv;
++
++ if (__from < __end && __max)
++ {
++ // XXX Probably wrong for stateful encodings
++ __tmp_state = __state;
++ ++__from;
++ ++__ret;
++ --__max;
++ }
++ }
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++
++ return __ret;
++ }
++#endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/collate_members.cc
+@@ -0,0 +1,80 @@
++// std::collate implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __strcoll_l(S1, S2, L) strcoll((S1), (S2))
++#define __strxfrm_l(S1, S2, N, L) strxfrm((S1), (S2), (N))
++#define __wcscoll_l(S1, S2, L) wcscoll((S1), (S2))
++#define __wcsxfrm_l(S1, S2, N, L) wcsxfrm((S1), (S2), (N))
++#endif
++
++namespace std
++{
++ // These are basically extensions to char_traits, and perhaps should
++ // be put there instead of here.
++ template<>
++ int
++ collate<char>::_M_compare(const char* __one, const char* __two) const
++ {
++ int __cmp = __strcoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<char>::_M_transform(char* __to, const char* __from,
++ size_t __n) const
++ { return __strxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ int
++ collate<wchar_t>::_M_compare(const wchar_t* __one,
++ const wchar_t* __two) const
++ {
++ int __cmp = __wcscoll_l(__one, __two, _M_c_locale_collate);
++ return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
++ }
++
++ template<>
++ size_t
++ collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
++ size_t __n) const
++ { return __wcsxfrm_l(__to, __from, __n, _M_c_locale_collate); }
++#endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/ctype_members.cc
+@@ -0,0 +1,300 @@
++// std::ctype implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.1.1.2 ctype virtual functions.
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __wctype_l(S, L) wctype((S))
++#define __towupper_l(C, L) towupper((C))
++#define __towlower_l(C, L) towlower((C))
++#define __iswctype_l(C, M, L) iswctype((C), (M))
++#endif
++
++namespace std
++{
++ // NB: The other ctype<char> specializations are in src/locale.cc and
++ // various /config/os/* files.
++ template<>
++ ctype_byname<char>::ctype_byname(const char* __s, size_t __refs)
++ : ctype<char>(0, false, __refs)
++ {
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_ctype);
++ this->_S_create_c_locale(this->_M_c_locale_ctype, __s);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ this->_M_toupper = this->_M_c_locale_ctype->__ctype_toupper;
++ this->_M_tolower = this->_M_c_locale_ctype->__ctype_tolower;
++ this->_M_table = this->_M_c_locale_ctype->__ctype_b;
++#endif
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ ctype<wchar_t>::__wmask_type
++ ctype<wchar_t>::_M_convert_to_wmask(const mask __m) const
++ {
++ __wmask_type __ret;
++ switch (__m)
++ {
++ case space:
++ __ret = __wctype_l("space", _M_c_locale_ctype);
++ break;
++ case print:
++ __ret = __wctype_l("print", _M_c_locale_ctype);
++ break;
++ case cntrl:
++ __ret = __wctype_l("cntrl", _M_c_locale_ctype);
++ break;
++ case upper:
++ __ret = __wctype_l("upper", _M_c_locale_ctype);
++ break;
++ case lower:
++ __ret = __wctype_l("lower", _M_c_locale_ctype);
++ break;
++ case alpha:
++ __ret = __wctype_l("alpha", _M_c_locale_ctype);
++ break;
++ case digit:
++ __ret = __wctype_l("digit", _M_c_locale_ctype);
++ break;
++ case punct:
++ __ret = __wctype_l("punct", _M_c_locale_ctype);
++ break;
++ case xdigit:
++ __ret = __wctype_l("xdigit", _M_c_locale_ctype);
++ break;
++ case alnum:
++ __ret = __wctype_l("alnum", _M_c_locale_ctype);
++ break;
++ case graph:
++ __ret = __wctype_l("graph", _M_c_locale_ctype);
++ break;
++ default:
++ __ret = __wmask_type();
++ }
++ return __ret;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_toupper(wchar_t __c) const
++ { return __towupper_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_toupper(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towupper_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ wchar_t
++ ctype<wchar_t>::do_tolower(wchar_t __c) const
++ { return __towlower_l(__c, _M_c_locale_ctype); }
++
++ const wchar_t*
++ ctype<wchar_t>::do_tolower(wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi)
++ {
++ *__lo = __towlower_l(*__lo, _M_c_locale_ctype);
++ ++__lo;
++ }
++ return __hi;
++ }
++
++ bool
++ ctype<wchar_t>::
++ do_is(mask __m, wchar_t __c) const
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ bool __ret = false;
++ const size_t __bitmasksize = 11;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__m & _M_bit[__bitcur]
++ && __iswctype_l(__c, _M_wmask[__bitcur], _M_c_locale_ctype))
++ {
++ __ret = true;
++ break;
++ }
++ return __ret;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const
++ {
++ for (; __lo < __hi; ++__vec, ++__lo)
++ {
++ // Highest bitmask in ctype_base == 10, but extra in "C"
++ // library for blank.
++ const size_t __bitmasksize = 11;
++ mask __m = 0;
++ for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur)
++ if (__iswctype_l(*__lo, _M_wmask[__bitcur], _M_c_locale_ctype))
++ __m |= _M_bit[__bitcur];
++ *__vec = __m;
++ }
++ return __hi;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const
++ {
++ while (__lo < __hi && !this->do_is(__m, *__lo))
++ ++__lo;
++ return __lo;
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
++ {
++ while (__lo < __hi && this->do_is(__m, *__lo) != 0)
++ ++__lo;
++ return __lo;
++ }
++
++ wchar_t
++ ctype<wchar_t>::
++ do_widen(char __c) const
++ { return _M_widen[static_cast<unsigned char>(__c)]; }
++
++ const char*
++ ctype<wchar_t>::
++ do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
++ {
++ while (__lo < __hi)
++ {
++ *__dest = _M_widen[static_cast<unsigned char>(*__lo)];
++ ++__lo;
++ ++__dest;
++ }
++ return __hi;
++ }
++
++ char
++ ctype<wchar_t>::
++ do_narrow(wchar_t __wc, char __dfault) const
++ {
++ if (__wc >= 0 && __wc < 128 && _M_narrow_ok)
++ return _M_narrow[__wc];
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ const int __c = wctob(__wc);
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++
++ const wchar_t*
++ ctype<wchar_t>::
++ do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
++ char* __dest) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ if (_M_narrow_ok)
++ while (__lo < __hi)
++ {
++ if (*__lo >= 0 && *__lo < 128)
++ *__dest = _M_narrow[*__lo];
++ else
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ }
++ ++__lo;
++ ++__dest;
++ }
++ else
++ while (__lo < __hi)
++ {
++ const int __c = wctob(*__lo);
++ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
++ ++__lo;
++ ++__dest;
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ return __hi;
++ }
++
++ void
++ ctype<wchar_t>::_M_initialize_ctype()
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_ctype);
++#endif
++ wint_t __i;
++ for (__i = 0; __i < 128; ++__i)
++ {
++ const int __c = wctob(__i);
++ if (__c == EOF)
++ break;
++ else
++ _M_narrow[__i] = static_cast<char>(__c);
++ }
++ if (__i == 128)
++ _M_narrow_ok = true;
++ else
++ _M_narrow_ok = false;
++ for (size_t __j = 0;
++ __j < sizeof(_M_widen) / sizeof(wint_t); ++__j)
++ _M_widen[__j] = btowc(__j);
++
++ for (size_t __k = 0; __k <= 11; ++__k)
++ {
++ _M_bit[__k] = static_cast<mask>(_ISbit(__k));
++ _M_wmask[__k] = _M_convert_to_wmask(_M_bit[__k]);
++ }
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#endif
++ }
++#endif // _GLIBCXX_USE_WCHAR_T
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.cc
+@@ -0,0 +1,100 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix gettext stuff
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__dcgettext(const char *domainname,
++ const char *msgid, int category);
++#undef gettext
++#define gettext(msgid) __dcgettext(NULL, msgid, LC_MESSAGES)
++#else
++#undef gettext
++#define gettext(msgid) (msgid)
++#endif
++
++namespace std
++{
++ // Specializations.
++ template<>
++ string
++ messages<char>::do_get(catalog, int, int, const string& __dfault) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ const char* __msg = const_cast<const char*>(gettext(__dfault.c_str()));
++ __uselocale(__old);
++ return string(__msg);
++#elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ const char* __msg = gettext(__dfault.c_str());
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return string(__msg);
++#else
++ const char* __msg = gettext(__dfault.c_str());
++ return string(__msg);
++#endif
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ wstring
++ messages<wchar_t>::do_get(catalog, int, int, const wstring& __dfault) const
++ {
++# ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(_M_c_locale_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ __uselocale(__old);
++ return _M_convert_from_char(__msg);
++# elif defined __UCLIBC_HAS_LOCALE__
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_messages);
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ setlocale(LC_ALL, __old);
++ free(__old);
++ return _M_convert_from_char(__msg);
++# else
++ char* __msg = gettext(_M_convert_to_char(__dfault));
++ return _M_convert_from_char(__msg);
++# endif
++ }
++#endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/messages_members.h
++++ gcc/libstdc++-v3/config/locale/uclibc/messages_members.h
+@@ -0,0 +1,118 @@
++// std::messages implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.7.1.2 messages functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix prototypes for *textdomain funcs
++#endif
++#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
++extern "C" char *__textdomain(const char *domainname);
++extern "C" char *__bindtextdomain(const char *domainname,
++ const char *dirname);
++#else
++#undef __textdomain
++#undef __bindtextdomain
++#define __textdomain(D) ((void)0)
++#define __bindtextdomain(D,P) ((void)0)
++#endif
++
++ // Non-virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::messages(size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
++ _M_name_messages(_S_get_c_name())
++ { }
++
++ template<typename _CharT>
++ messages<_CharT>::messages(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_c_locale_messages(_S_clone_c_locale(__cloc)),
++ _M_name_messages(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_messages = __tmp;
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
++ const char* __dir) const
++ {
++ __bindtextdomain(__s.c_str(), __dir);
++ return this->do_open(__s, __loc);
++ }
++
++ // Virtual member functions.
++ template<typename _CharT>
++ messages<_CharT>::~messages()
++ {
++ if (_M_name_messages != _S_get_c_name())
++ delete [] _M_name_messages;
++ _S_destroy_c_locale(_M_c_locale_messages);
++ }
++
++ template<typename _CharT>
++ typename messages<_CharT>::catalog
++ messages<_CharT>::do_open(const basic_string<char>& __s,
++ const locale&) const
++ {
++ // No error checking is done, assume the catalog exists and can
++ // be used.
++ __textdomain(__s.c_str());
++ return 0;
++ }
++
++ template<typename _CharT>
++ void
++ messages<_CharT>::do_close(catalog) const
++ { }
++
++ // messages_byname
++ template<typename _CharT>
++ messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
++ : messages<_CharT>(__refs)
++ {
++ if (this->_M_name_messages != locale::facet::_S_get_c_name())
++ delete [] this->_M_name_messages;
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ this->_M_name_messages = __tmp;
++
++ if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0)
++ {
++ this->_S_destroy_c_locale(this->_M_c_locale_messages);
++ this->_S_create_c_locale(this->_M_c_locale_messages, __s);
++ }
++ }
+--- gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/monetary_members.cc
+@@ -0,0 +1,692 @@
++// std::moneypunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.6.3.2 moneypunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning optimize this for uclibc
++#warning tailor for stub locale support
++#endif
++
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ // Construct and return valid pattern consisting of some combination of:
++ // space none symbol sign value
++ money_base::pattern
++ money_base::_S_construct_pattern(char __precedes, char __space, char __posn)
++ {
++ pattern __ret;
++
++ // This insanely complicated routine attempts to construct a valid
++ // pattern for use with monyepunct. A couple of invariants:
++
++ // if (__precedes) symbol -> value
++ // else value -> symbol
++
++ // if (__space) space
++ // else none
++
++ // none == never first
++ // space never first or last
++
++ // Any elegant implementations of this are welcome.
++ switch (__posn)
++ {
++ case 0:
++ case 1:
++ // 1 The sign precedes the value and symbol.
++ __ret.field[0] = sign;
++ if (__space)
++ {
++ // Pattern starts with sign.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[3] = symbol;
++ }
++ __ret.field[2] = space;
++ }
++ else
++ {
++ // Pattern starts with sign and ends with none.
++ if (__precedes)
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[1] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[3] = none;
++ }
++ break;
++ case 2:
++ // 2 The sign follows the value and symbol.
++ if (__space)
++ {
++ // Pattern either ends with sign.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[2] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[2] = symbol;
++ }
++ __ret.field[1] = space;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ // Pattern ends with sign then none.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = value;
++ }
++ else
++ {
++ __ret.field[0] = value;
++ __ret.field[1] = symbol;
++ }
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ break;
++ case 3:
++ // 3 The sign immediately precedes the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = sign;
++ __ret.field[1] = symbol;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = sign;
++ __ret.field[3] = symbol;
++ }
++ else
++ {
++ __ret.field[1] = sign;
++ __ret.field[2] = symbol;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ case 4:
++ // 4 The sign immediately follows the symbol.
++ if (__precedes)
++ {
++ __ret.field[0] = symbol;
++ __ret.field[1] = sign;
++ if (__space)
++ {
++ __ret.field[2] = space;
++ __ret.field[3] = value;
++ }
++ else
++ {
++ __ret.field[2] = value;
++ __ret.field[3] = none;
++ }
++ }
++ else
++ {
++ __ret.field[0] = value;
++ if (__space)
++ {
++ __ret.field[1] = space;
++ __ret.field[2] = symbol;
++ __ret.field[3] = sign;
++ }
++ else
++ {
++ __ret.field[1] = symbol;
++ __ret.field[2] = sign;
++ __ret.field[3] = none;
++ }
++ }
++ break;
++ default:
++ ;
++ }
++ return __ret;
++ }
++
++ template<>
++ void
++ moneypunct<char, true>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == true
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ void
++ moneypunct<char, false>::_M_initialize_moneypunct(__c_locale __cloc,
++ const char*)
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<char, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = "";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = "";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = "";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] = money_base::_S_atoms[__i];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(__MON_DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(__MON_THOUSANDS_SEP,
++ __cloc));
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ _M_data->_M_positive_sign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ _M_data->_M_positive_sign_size = strlen(_M_data->_M_positive_sign);
++
++ char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ if (!__nposn)
++ _M_data->_M_negative_sign = "()";
++ else
++ _M_data->_M_negative_sign = __nl_langinfo_l(__NEGATIVE_SIGN,
++ __cloc);
++ _M_data->_M_negative_sign_size = strlen(_M_data->_M_negative_sign);
++
++ // _Intl == false
++ _M_data->_M_curr_symbol = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++ _M_data->_M_curr_symbol_size = strlen(_M_data->_M_curr_symbol);
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++ }
++ }
++
++ template<>
++ moneypunct<char, true>::~moneypunct()
++ { delete _M_data; }
++
++ template<>
++ moneypunct<char, false>::~moneypunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, true>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__INT_CURR_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__INT_N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__INT_FRAC_DIGITS,
++ __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__INT_P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__INT_P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__INT_P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__INT_N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__INT_N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ void
++ moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale __cloc,
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const char*)
++#else
++ const char* __name)
++#endif
++ {
++ if (!_M_data)
++ _M_data = new __moneypunct_cache<wchar_t, false>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = 0;
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = 0;
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = 0;
++ _M_data->_M_frac_digits = 0;
++ _M_data->_M_pos_format = money_base::_S_default_pattern;
++ _M_data->_M_neg_format = money_base::_S_default_pattern;
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < money_base::_S_end; ++__i)
++ _M_data->_M_atoms[__i] =
++ static_cast<wchar_t>(money_base::_S_atoms[__i]);
++ }
++ else
++ {
++ // Named locale.
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __c_locale __old = __uselocale(__cloc);
++#else
++ // Switch to named locale so that mbsrtowcs will work.
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, __name);
++#endif
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning fix this... should be monetary
++#endif
++#ifdef __UCLIBC__
++# ifdef __UCLIBC_HAS_XLOCALE__
++ _M_data->_M_decimal_point = __cloc->decimal_point_wc;
++ _M_data->_M_thousands_sep = __cloc->thousands_sep_wc;
++# else
++ _M_data->_M_decimal_point = __global_locale->decimal_point_wc;
++ _M_data->_M_thousands_sep = __global_locale->thousands_sep_wc;
++# endif
++#else
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_MONETARY_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++#endif
++ _M_data->_M_grouping = __nl_langinfo_l(__MON_GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++
++ const char* __cpossign = __nl_langinfo_l(__POSITIVE_SIGN, __cloc);
++ const char* __cnegsign = __nl_langinfo_l(__NEGATIVE_SIGN, __cloc);
++ const char* __ccurr = __nl_langinfo_l(__CURRENCY_SYMBOL, __cloc);
++
++ wchar_t* __wcs_ps = 0;
++ wchar_t* __wcs_ns = 0;
++ const char __nposn = *(__nl_langinfo_l(__N_SIGN_POSN, __cloc));
++ try
++ {
++ mbstate_t __state;
++ size_t __len;
++ __len = strlen(__cpossign);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ps = new wchar_t[__len];
++ mbsrtowcs(__wcs_ps, &__cpossign, __len, &__state);
++ _M_data->_M_positive_sign = __wcs_ps;
++ }
++ else
++ _M_data->_M_positive_sign = L"";
++ _M_data->_M_positive_sign_size = wcslen(_M_data->_M_positive_sign);
++
++ __len = strlen(__cnegsign);
++ if (!__nposn)
++ _M_data->_M_negative_sign = L"()";
++ else if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ __wcs_ns = new wchar_t[__len];
++ mbsrtowcs(__wcs_ns, &__cnegsign, __len, &__state);
++ _M_data->_M_negative_sign = __wcs_ns;
++ }
++ else
++ _M_data->_M_negative_sign = L"";
++ _M_data->_M_negative_sign_size = wcslen(_M_data->_M_negative_sign);
++
++ // _Intl == true.
++ __len = strlen(__ccurr);
++ if (__len)
++ {
++ ++__len;
++ memset(&__state, 0, sizeof(mbstate_t));
++ wchar_t* __wcs = new wchar_t[__len];
++ mbsrtowcs(__wcs, &__ccurr, __len, &__state);
++ _M_data->_M_curr_symbol = __wcs;
++ }
++ else
++ _M_data->_M_curr_symbol = L"";
++ _M_data->_M_curr_symbol_size = wcslen(_M_data->_M_curr_symbol);
++ }
++ catch (...)
++ {
++ delete _M_data;
++ _M_data = 0;
++ delete __wcs_ps;
++ delete __wcs_ns;
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ __throw_exception_again;
++ }
++
++ _M_data->_M_frac_digits = *(__nl_langinfo_l(__FRAC_DIGITS, __cloc));
++ char __pprecedes = *(__nl_langinfo_l(__P_CS_PRECEDES, __cloc));
++ char __pspace = *(__nl_langinfo_l(__P_SEP_BY_SPACE, __cloc));
++ char __pposn = *(__nl_langinfo_l(__P_SIGN_POSN, __cloc));
++ _M_data->_M_pos_format = _S_construct_pattern(__pprecedes, __pspace,
++ __pposn);
++ char __nprecedes = *(__nl_langinfo_l(__N_CS_PRECEDES, __cloc));
++ char __nspace = *(__nl_langinfo_l(__N_SEP_BY_SPACE, __cloc));
++ _M_data->_M_neg_format = _S_construct_pattern(__nprecedes, __nspace,
++ __nposn);
++
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __uselocale(__old);
++#else
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ }
++ }
++
++ template<>
++ moneypunct<wchar_t, true>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++
++ template<>
++ moneypunct<wchar_t, false>::~moneypunct()
++ {
++ if (_M_data->_M_positive_sign_size)
++ delete [] _M_data->_M_positive_sign;
++ if (_M_data->_M_negative_sign_size
++ && wcscmp(_M_data->_M_negative_sign, L"()") != 0)
++ delete [] _M_data->_M_negative_sign;
++ if (_M_data->_M_curr_symbol_size)
++ delete [] _M_data->_M_curr_symbol;
++ delete _M_data;
++ }
++#endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/numeric_members.cc
+@@ -0,0 +1,160 @@
++// std::numpunct implementation details, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.3.1.2 numpunct virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#define _LIBC
++#include <locale>
++#undef _LIBC
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ numpunct<char>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = '.';
++ _M_data->_M_thousands_sep = ',';
++
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] = __num_base::_S_atoms_out[__i];
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] = __num_base::_S_atoms_in[__j];
++ }
++ else
++ {
++ // Named locale.
++ _M_data->_M_decimal_point = *(__nl_langinfo_l(DECIMAL_POINT,
++ __cloc));
++ _M_data->_M_thousands_sep = *(__nl_langinfo_l(THOUSANDS_SEP,
++ __cloc));
++
++ // Check for NULL, which implies no grouping.
++ if (_M_data->_M_thousands_sep == '\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = "true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = "false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<char>::~numpunct()
++ { delete _M_data; }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __numpunct_cache<wchar_t>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_data->_M_grouping = "";
++ _M_data->_M_grouping_size = 0;
++ _M_data->_M_use_grouping = false;
++
++ _M_data->_M_decimal_point = L'.';
++ _M_data->_M_thousands_sep = L',';
++
++ // Use ctype::widen code without the facet...
++ for (size_t __i = 0; __i < __num_base::_S_oend; ++__i)
++ _M_data->_M_atoms_out[__i] =
++ static_cast<wchar_t>(__num_base::_S_atoms_out[__i]);
++
++ for (size_t __j = 0; __j < __num_base::_S_iend; ++__j)
++ _M_data->_M_atoms_in[__j] =
++ static_cast<wchar_t>(__num_base::_S_atoms_in[__j]);
++ }
++ else
++ {
++ // Named locale.
++ // NB: In the GNU model wchar_t is always 32 bit wide.
++ union { char *__s; wchar_t __w; } __u;
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_DECIMAL_POINT_WC, __cloc);
++ _M_data->_M_decimal_point = __u.__w;
++
++ __u.__s = __nl_langinfo_l(_NL_NUMERIC_THOUSANDS_SEP_WC, __cloc);
++ _M_data->_M_thousands_sep = __u.__w;
++
++ if (_M_data->_M_thousands_sep == L'\0')
++ _M_data->_M_grouping = "";
++ else
++ _M_data->_M_grouping = __nl_langinfo_l(GROUPING, __cloc);
++ _M_data->_M_grouping_size = strlen(_M_data->_M_grouping);
++ }
++
++ // NB: There is no way to extact this info from posix locales.
++ // _M_truename = __nl_langinfo_l(YESSTR, __cloc);
++ _M_data->_M_truename = L"true";
++ _M_data->_M_truename_size = 4;
++ // _M_falsename = __nl_langinfo_l(NOSTR, __cloc);
++ _M_data->_M_falsename = L"false";
++ _M_data->_M_falsename_size = 5;
++ }
++
++ template<>
++ numpunct<wchar_t>::~numpunct()
++ { delete _M_data; }
++ #endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/time_members.cc
++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.cc
+@@ -0,0 +1,406 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++#include <locale>
++#include <bits/c++locale_internal.h>
++
++#ifdef __UCLIBC_MJN3_ONLY__
++#warning tailor for stub locale support
++#endif
++#ifndef __UCLIBC_HAS_XLOCALE__
++#define __nl_langinfo_l(N, L) nl_langinfo((N))
++#endif
++
++namespace std
++{
++ template<>
++ void
++ __timepunct<char>::
++ _M_put(char* __s, size_t __maxlen, const char* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = strftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = '\0';
++ }
++
++ template<>
++ void
++ __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<char>;
++
++ if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = "%m/%d/%y";
++ _M_data->_M_date_era_format = "%m/%d/%y";
++ _M_data->_M_time_format = "%H:%M:%S";
++ _M_data->_M_time_era_format = "%H:%M:%S";
++ _M_data->_M_date_time_format = "";
++ _M_data->_M_date_time_era_format = "";
++ _M_data->_M_am = "AM";
++ _M_data->_M_pm = "PM";
++ _M_data->_M_am_pm_format = "";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = "Sunday";
++ _M_data->_M_day2 = "Monday";
++ _M_data->_M_day3 = "Tuesday";
++ _M_data->_M_day4 = "Wednesday";
++ _M_data->_M_day5 = "Thursday";
++ _M_data->_M_day6 = "Friday";
++ _M_data->_M_day7 = "Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = "Sun";
++ _M_data->_M_aday2 = "Mon";
++ _M_data->_M_aday3 = "Tue";
++ _M_data->_M_aday4 = "Wed";
++ _M_data->_M_aday5 = "Thu";
++ _M_data->_M_aday6 = "Fri";
++ _M_data->_M_aday7 = "Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = "January";
++ _M_data->_M_month02 = "February";
++ _M_data->_M_month03 = "March";
++ _M_data->_M_month04 = "April";
++ _M_data->_M_month05 = "May";
++ _M_data->_M_month06 = "June";
++ _M_data->_M_month07 = "July";
++ _M_data->_M_month08 = "August";
++ _M_data->_M_month09 = "September";
++ _M_data->_M_month10 = "October";
++ _M_data->_M_month11 = "November";
++ _M_data->_M_month12 = "December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = "Jan";
++ _M_data->_M_amonth02 = "Feb";
++ _M_data->_M_amonth03 = "Mar";
++ _M_data->_M_amonth04 = "Apr";
++ _M_data->_M_amonth05 = "May";
++ _M_data->_M_amonth06 = "Jun";
++ _M_data->_M_amonth07 = "Jul";
++ _M_data->_M_amonth08 = "Aug";
++ _M_data->_M_amonth09 = "Sep";
++ _M_data->_M_amonth10 = "Oct";
++ _M_data->_M_amonth11 = "Nov";
++ _M_data->_M_amonth12 = "Dec";
++ }
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
++ _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
++ _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
++ _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
++ __cloc);
++ _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
++ _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
++ _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
++ _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
++ _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
++ _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
++ _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
++ _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
++ _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
++ _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
++ _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
++ _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
++ _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
++ _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
++ _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
++ _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
++ _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
++ _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
++ _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
++ _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
++ _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
++ _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
++ _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
++ _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
++ _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
++ _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
++ _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
++ _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
++ _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
++ _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
++ _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
++ _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
++ _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
++ _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
++ _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
++ _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
++ _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
++ }
++ }
++
++#ifdef _GLIBCXX_USE_WCHAR_T
++ template<>
++ void
++ __timepunct<wchar_t>::
++ _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format,
++ const tm* __tm) const
++ {
++#ifdef __UCLIBC_HAS_XLOCALE__
++ __wcsftime_l(__s, __maxlen, __format, __tm, _M_c_locale_timepunct);
++ const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
++ _M_c_locale_timepunct);
++#else
++ char* __old = strdup(setlocale(LC_ALL, NULL));
++ setlocale(LC_ALL, _M_name_timepunct);
++ const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
++ setlocale(LC_ALL, __old);
++ free(__old);
++#endif
++ // Make sure __s is null terminated.
++ if (__len == 0)
++ __s[0] = L'\0';
++ }
++
++ template<>
++ void
++ __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
++ {
++ if (!_M_data)
++ _M_data = new __timepunct_cache<wchar_t>;
++
++#warning wide time stuff
++// if (!__cloc)
++ {
++ // "C" locale
++ _M_c_locale_timepunct = _S_get_c_locale();
++
++ _M_data->_M_date_format = L"%m/%d/%y";
++ _M_data->_M_date_era_format = L"%m/%d/%y";
++ _M_data->_M_time_format = L"%H:%M:%S";
++ _M_data->_M_time_era_format = L"%H:%M:%S";
++ _M_data->_M_date_time_format = L"";
++ _M_data->_M_date_time_era_format = L"";
++ _M_data->_M_am = L"AM";
++ _M_data->_M_pm = L"PM";
++ _M_data->_M_am_pm_format = L"";
++
++ // Day names, starting with "C"'s Sunday.
++ _M_data->_M_day1 = L"Sunday";
++ _M_data->_M_day2 = L"Monday";
++ _M_data->_M_day3 = L"Tuesday";
++ _M_data->_M_day4 = L"Wednesday";
++ _M_data->_M_day5 = L"Thursday";
++ _M_data->_M_day6 = L"Friday";
++ _M_data->_M_day7 = L"Saturday";
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ _M_data->_M_aday1 = L"Sun";
++ _M_data->_M_aday2 = L"Mon";
++ _M_data->_M_aday3 = L"Tue";
++ _M_data->_M_aday4 = L"Wed";
++ _M_data->_M_aday5 = L"Thu";
++ _M_data->_M_aday6 = L"Fri";
++ _M_data->_M_aday7 = L"Sat";
++
++ // Month names, starting with "C"'s January.
++ _M_data->_M_month01 = L"January";
++ _M_data->_M_month02 = L"February";
++ _M_data->_M_month03 = L"March";
++ _M_data->_M_month04 = L"April";
++ _M_data->_M_month05 = L"May";
++ _M_data->_M_month06 = L"June";
++ _M_data->_M_month07 = L"July";
++ _M_data->_M_month08 = L"August";
++ _M_data->_M_month09 = L"September";
++ _M_data->_M_month10 = L"October";
++ _M_data->_M_month11 = L"November";
++ _M_data->_M_month12 = L"December";
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ _M_data->_M_amonth01 = L"Jan";
++ _M_data->_M_amonth02 = L"Feb";
++ _M_data->_M_amonth03 = L"Mar";
++ _M_data->_M_amonth04 = L"Apr";
++ _M_data->_M_amonth05 = L"May";
++ _M_data->_M_amonth06 = L"Jun";
++ _M_data->_M_amonth07 = L"Jul";
++ _M_data->_M_amonth08 = L"Aug";
++ _M_data->_M_amonth09 = L"Sep";
++ _M_data->_M_amonth10 = L"Oct";
++ _M_data->_M_amonth11 = L"Nov";
++ _M_data->_M_amonth12 = L"Dec";
++ }
++#if 0
++ else
++ {
++ _M_c_locale_timepunct = _S_clone_c_locale(__cloc);
++
++ union { char *__s; wchar_t *__w; } __u;
++
++ __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
++ _M_data->_M_date_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
++ _M_data->_M_date_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
++ _M_data->_M_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
++ _M_data->_M_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
++ _M_data->_M_date_time_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
++ _M_data->_M_date_time_era_format = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
++ _M_data->_M_am = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
++ _M_data->_M_pm = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
++ _M_data->_M_am_pm_format = __u.__w;
++
++ // Day names, starting with "C"'s Sunday.
++ __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
++ _M_data->_M_day1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
++ _M_data->_M_day2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
++ _M_data->_M_day3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
++ _M_data->_M_day4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
++ _M_data->_M_day5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
++ _M_data->_M_day6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
++ _M_data->_M_day7 = __u.__w;
++
++ // Abbreviated day names, starting with "C"'s Sun.
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
++ _M_data->_M_aday1 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
++ _M_data->_M_aday2 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
++ _M_data->_M_aday3 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
++ _M_data->_M_aday4 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
++ _M_data->_M_aday5 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
++ _M_data->_M_aday6 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
++ _M_data->_M_aday7 = __u.__w;
++
++ // Month names, starting with "C"'s January.
++ __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
++ _M_data->_M_month01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
++ _M_data->_M_month02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
++ _M_data->_M_month03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
++ _M_data->_M_month04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
++ _M_data->_M_month05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
++ _M_data->_M_month06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
++ _M_data->_M_month07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
++ _M_data->_M_month08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
++ _M_data->_M_month09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
++ _M_data->_M_month10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
++ _M_data->_M_month11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
++ _M_data->_M_month12 = __u.__w;
++
++ // Abbreviated month names, starting with "C"'s Jan.
++ __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
++ _M_data->_M_amonth01 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
++ _M_data->_M_amonth02 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
++ _M_data->_M_amonth03 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
++ _M_data->_M_amonth04 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
++ _M_data->_M_amonth05 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
++ _M_data->_M_amonth06 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
++ _M_data->_M_amonth07 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
++ _M_data->_M_amonth08 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
++ _M_data->_M_amonth09 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
++ _M_data->_M_amonth10 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
++ _M_data->_M_amonth11 = __u.__w;
++ __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
++ _M_data->_M_amonth12 = __u.__w;
++ }
++#endif // 0
++ }
++#endif
++}
+--- gcc/libstdc++-v3/config/locale/uclibc/time_members.h
++++ gcc/libstdc++-v3/config/locale/uclibc/time_members.h
+@@ -0,0 +1,68 @@
++// std::time_get, std::time_put implementation, GNU version -*- C++ -*-
++
++// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING. If not, write to the Free
++// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction. Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License. This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++//
++// ISO C++ 14882: 22.2.5.1.2 - time_get functions
++// ISO C++ 14882: 22.2.5.3.2 - time_put functions
++//
++
++// Written by Benjamin Kosnik <bkoz@redhat.com>
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
++ : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(_S_get_c_name())
++ { _M_initialize_timepunct(); }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
++ size_t __refs)
++ : facet(__refs), _M_data(NULL), _M_c_locale_timepunct(NULL),
++ _M_name_timepunct(__s)
++ {
++ char* __tmp = new char[std::strlen(__s) + 1];
++ std::strcpy(__tmp, __s);
++ _M_name_timepunct = __tmp;
++ _M_initialize_timepunct(__cloc);
++ }
++
++ template<typename _CharT>
++ __timepunct<_CharT>::~__timepunct()
++ {
++ if (_M_name_timepunct != _S_get_c_name())
++ delete [] _M_name_timepunct;
++ delete _M_data;
++ _S_destroy_c_locale(_M_c_locale_timepunct);
++ }
+--- gcc/libstdc++-v3/configure
++++ gcc/libstdc++-v3/configure
+@@ -5764,7 +5764,7 @@
+ enableval="$enable_clocale"
+
+ case "$enableval" in
+- generic|gnu|ieee_1003.1-2001|yes|no|auto) ;;
++ generic|gnu|ieee_1003.1-2001|uclibc|yes|no|auto) ;;
+ *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable clocale" >&5
+ echo "$as_me: error: Unknown argument to enable/disable clocale" >&2;}
+ { (exit 1); exit 1; }; } ;;
+@@ -5789,6 +5789,9 @@
+ # Default to "generic".
+ if test $enable_clocale_flag = auto; then
+ case ${target_os} in
++ linux-uclibc*)
++ enable_clocale_flag=uclibc
++ ;;
+ linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -6019,6 +6022,76 @@
+ CTIME_CC=config/locale/generic/time_members.cc
+ CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
+ ;;
++ uclibc)
++ echo "$as_me:$LINENO: result: uclibc" >&5
++echo "${ECHO_T}uclibc" >&6
++
++ # Declare intention to use gettext, and add support for specific
++ # languages.
++ # For some reason, ALL_LINGUAS has to be before AM-GNU-GETTEXT
++ ALL_LINGUAS="de fr"
++
++ # Don't call AM-GNU-GETTEXT here. Instead, assume glibc.
++ # Extract the first word of "msgfmt", so it can be a program name with args.
++set dummy msgfmt; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_prog_check_msgfmt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if test -n "$check_msgfmt"; then
++ ac_cv_prog_check_msgfmt="$check_msgfmt" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_prog_check_msgfmt="yes"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_prog_check_msgfmt" && ac_cv_prog_check_msgfmt="no"
++fi
++fi
++check_msgfmt=$ac_cv_prog_check_msgfmt
++if test -n "$check_msgfmt"; then
++ echo "$as_me:$LINENO: result: $check_msgfmt" >&5
++echo "${ECHO_T}$check_msgfmt" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ if test x"$check_msgfmt" = x"yes" && test x"$enable_nls" = x"yes"; then
++ USE_NLS=yes
++ fi
++ # Export the build objects.
++ for ling in $ALL_LINGUAS; do \
++ glibcxx_MOFILES="$glibcxx_MOFILES $ling.mo"; \
++ glibcxx_POFILES="$glibcxx_POFILES $ling.po"; \
++ done
++
++
++
++ CLOCALE_H=config/locale/uclibc/c_locale.h
++ CLOCALE_CC=config/locale/uclibc/c_locale.cc
++ CCODECVT_CC=config/locale/uclibc/codecvt_members.cc
++ CCOLLATE_CC=config/locale/uclibc/collate_members.cc
++ CCTYPE_CC=config/locale/uclibc/ctype_members.cc
++ CMESSAGES_H=config/locale/uclibc/messages_members.h
++ CMESSAGES_CC=config/locale/uclibc/messages_members.cc
++ CMONEY_CC=config/locale/uclibc/monetary_members.cc
++ CNUMERIC_CC=config/locale/uclibc/numeric_members.cc
++ CTIME_H=config/locale/uclibc/time_members.h
++ CTIME_CC=config/locale/uclibc/time_members.cc
++ CLOCALE_INTERNAL_H=config/locale/uclibc/c++locale_internal.h
++ ;;
+ esac
+
+ # This is where the testsuite looks for locale catalogs, using the
+--- gcc/libstdc++-v3/include/c_compatibility/wchar.h
++++ gcc/libstdc++-v3/include/c_compatibility/wchar.h
+@@ -101,7 +101,9 @@
+ using std::wmemcpy;
+ using std::wmemmove;
+ using std::wmemset;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using std::wcsftime;
++#endif
+
+ #if _GLIBCXX_USE_C99
+ using std::wcstold;
+--- gcc/libstdc++-v3/include/c_std/std_cwchar.h
++++ gcc/libstdc++-v3/include/c_std/std_cwchar.h
+@@ -182,7 +182,9 @@
+ using ::wcscoll;
+ using ::wcscpy;
+ using ::wcscspn;
++#if _GLIBCXX_HAVE_WCSFTIME
+ using ::wcsftime;
++#endif
+ using ::wcslen;
+ using ::wcsncat;
+ using ::wcsncmp;
diff --git a/packages/gcc/gcc-4.2.1/300-libstdc++-pic.patch b/packages/gcc/gcc-4.2.1/300-libstdc++-pic.patch
new file mode 100644
index 0000000000..89d03a85e5
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/300-libstdc++-pic.patch
@@ -0,0 +1,46 @@
+# DP: Build and install libstdc++_pic.a library.
+
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.am 2004-11-15 17:33:05.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.am 2005-04-25 20:05:59.186930896 -0500
+@@ -214,6 +214,10 @@
+ $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+
+
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Added bits to build debug library.
+ if GLIBCXX_BUILD_DEBUG
+ all-local: build_debug
+--- gcc-4.1.0/libstdc++-v3/src/Makefile.in 2005-04-11 19:13:08.000000000 -0500
++++ gcc-4.1.0-patched/libstdc++-v3/src/Makefile.in 2005-04-25 20:12:33.284316275 -0500
+@@ -627,7 +627,7 @@
+
+ install-data-am: install-data-local
+
+-install-exec-am: install-toolexeclibLTLIBRARIES
++install-exec-am: install-toolexeclibLTLIBRARIES install-exec-local
+
+ install-info: install-info-am
+
+@@ -660,6 +660,7 @@
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-data-local install-exec \
++ install-exec-local \
+ install-exec-am install-info install-info-am install-man \
+ install-strip install-toolexeclibLTLIBRARIES installcheck \
+ installcheck-am installdirs maintainer-clean \
+@@ -745,6 +746,11 @@
+ install_debug:
+ (cd ${debugdir} && $(MAKE) \
+ toolexeclibdir=$(glibcxx_toolexeclibdir)/debug install)
++
++install-exec-local:
++ $(AR) cru libstdc++_pic.a .libs/*.o $(top_builddir)/libsupc++/*.o
++ $(INSTALL_DATA) libstdc++_pic.a $(DESTDIR)$(toolexeclibdir)
++
+ # Tell versions [3.59,3.63) of GNU make to not export all variables.
+ # Otherwise a system limit (for SysV at least) may be exceeded.
+ .NOEXPORT:
diff --git a/packages/gcc/gcc-4.2.1/301-missing-execinfo_h.patch b/packages/gcc/gcc-4.2.1/301-missing-execinfo_h.patch
new file mode 100644
index 0000000000..0e2092f3fb
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/301-missing-execinfo_h.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/boehm-gc/include/gc.h-orig 2005-04-28 22:28:57.000000000 -0500
++++ gcc-4.0.0/boehm-gc/include/gc.h 2005-04-28 22:30:38.000000000 -0500
+@@ -500,7 +500,7 @@
+ #ifdef __linux__
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+- && !defined(__ia64__)
++ && !defined(__ia64__) && !defined(__UCLIBC__)
+ # ifndef GC_HAVE_BUILTIN_BACKTRACE
+ # define GC_HAVE_BUILTIN_BACKTRACE
+ # endif
diff --git a/packages/gcc/gcc-4.2.1/302-c99-snprintf.patch b/packages/gcc/gcc-4.2.1/302-c99-snprintf.patch
new file mode 100644
index 0000000000..dfb22d681b
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/302-c99-snprintf.patch
@@ -0,0 +1,11 @@
+--- gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h-orig 2005-04-29 00:08:41.000000000 -0500
++++ gcc-4.0.0/libstdc++-v3/include/c_std/std_cstdio.h 2005-04-29 00:08:45.000000000 -0500
+@@ -142,7 +142,7 @@
+ using ::vsprintf;
+ }
+
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined(__UCLIBC__)
+
+ #undef snprintf
+ #undef vfscanf
diff --git a/packages/gcc/gcc-4.2.1/303-c99-complex-ugly-hack.patch b/packages/gcc/gcc-4.2.1/303-c99-complex-ugly-hack.patch
new file mode 100644
index 0000000000..2ccc80d9bb
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/303-c99-complex-ugly-hack.patch
@@ -0,0 +1,12 @@
+--- gcc-4.0.0/libstdc++-v3/configure-old 2005-04-30 22:04:48.061603912 -0500
++++ gcc-4.0.0/libstdc++-v3/configure 2005-04-30 22:06:13.678588152 -0500
+@@ -7194,6 +7194,9 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <complex.h>
++#ifdef __UCLIBC__
++#error ugly hack to make sure configure test fails here for cross until uClibc supports the complex funcs
++#endif
+ int
+ main ()
+ {
diff --git a/packages/gcc/gcc-4.2.1/304-index_macro.patch b/packages/gcc/gcc-4.2.1/304-index_macro.patch
new file mode 100644
index 0000000000..d8e476555d
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/304-index_macro.patch
@@ -0,0 +1,24 @@
+--- gcc-4.1.0/libstdc++-v3/include/ext/rope.mps 2006-03-24 01:49:51 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/rope 2006-03-24 01:49:37 +0100
+@@ -59,6 +59,9 @@
+ #include <bits/allocator.h>
+ #include <ext/hash_fun.h>
+
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ # ifdef __GC
+ # define __GC_CONST const
+ # else
+--- gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h.mps 2006-03-24 01:50:04 +0100
++++ gcc-4.1.0/libstdc++-v3/include/ext/ropeimpl.h 2006-03-24 01:50:28 +0100
+@@ -53,6 +53,9 @@
+ #include <ext/memory> // For uninitialized_copy_n
+ #include <ext/numeric> // For power
+
++/* cope w/ index defined as macro, SuSv3 proposal */
++#undef index
++
+ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
+
+ using std::size_t;
diff --git a/packages/gcc/gcc-4.2.1/602-sdk-libstdc++-includes.patch b/packages/gcc/gcc-4.2.1/602-sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..23fce7544d
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/602-sdk-libstdc++-includes.patch
@@ -0,0 +1,20 @@
+--- gcc-4.1.0/libstdc++-v3/fragment.am 2005-03-21 11:40:14.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/fragment.am 2005-04-25 20:14:39.856251785 -0500
+@@ -21,5 +21,5 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+--- gcc-4.1.0/libstdc++-v3/libmath/Makefile.am 2005-03-21 11:40:18.000000000 -0600
++++ gcc-4.1.0-patched/libstdc++-v3/libmath/Makefile.am 2005-04-25 20:14:39.682280735 -0500
+@@ -35,7 +35,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
diff --git a/packages/gcc/gcc-4.2.1/740-sh-pr24836.patch b/packages/gcc/gcc-4.2.1/740-sh-pr24836.patch
new file mode 100644
index 0000000000..7992282cff
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/740-sh-pr24836.patch
@@ -0,0 +1,25 @@
+http://sourceforge.net/mailarchive/forum.php?thread_id=8959304&forum_id=5348
+http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24836
+
+--- gcc/gcc/configure.ac (revision 106699)
++++ gcc/gcc/configure.ac (working copy)
+@@ -2446,7 +2446,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
+--- gcc/gcc/configure
++++ gcc/gcc/configure
+@@ -14846,7 +14846,7 @@
+ tls_first_minor=14
+ tls_as_opt="-m64 -Aesame --fatal-warnings"
+ ;;
+- sh-*-* | sh[34]-*-*)
++ sh-*-* | sh[34]*-*-*)
+ conftest_s='
+ .section ".tdata","awT",@progbits
+ foo: .long 25
diff --git a/packages/gcc/gcc-4.2.1/800-arm-bigendian.patch b/packages/gcc/gcc-4.2.1/800-arm-bigendian.patch
new file mode 100644
index 0000000000..07c6093379
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/800-arm-bigendian.patch
@@ -0,0 +1,67 @@
+By Lennert Buytenhek <buytenh@wantstofly.org>
+Adds support for arm*b-linux* big-endian ARM targets
+
+See http://gcc.gnu.org/PR16350
+
+--- gcc-4.2.0/gcc/config/arm/linux-elf.h
++++ gcc-4.2.0/gcc/config/arm/linux-elf.h
+@@ -28,19 +28,33 @@
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr);
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+
+ /* Now we define the strings used to build the spec file. */
+ #undef LIB_SPEC
+@@ -61,7 +75,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
+ #undef LINK_SPEC
+--- gcc-4.2.0/gcc/config.gcc.orig 2006-09-22 14:53:41.000000000 +0200
++++ gcc-4.2.0/gcc/config.gcc 2006-09-25 10:45:21.000000000 +0200
+@@ -696,6 +696,11 @@
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
+ tmake_file="${tmake_file} t-linux arm/t-arm"
+ case ${target} in
++ arm*b-*)
++ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
++ ;;
++ esac
++ case ${target} in
+ arm*-*-linux-*eabi)
+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
+ tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
diff --git a/packages/gcc/gcc-4.2.1/801-arm-bigendian-eabi.patch b/packages/gcc/gcc-4.2.1/801-arm-bigendian-eabi.patch
new file mode 100644
index 0000000000..54490fc24f
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/801-arm-bigendian-eabi.patch
@@ -0,0 +1,14 @@
+Index: gcc-4.1.1/gcc/config/arm/linux-eabi.h
+===================================================================
+--- gcc-4.1.1.orig/gcc/config/arm/linux-eabi.h 2007-02-20 14:51:33.416193250 +0100
++++ gcc-4.1.1/gcc/config/arm/linux-eabi.h 2007-02-20 14:52:11.622581000 +0100
+@@ -48,7 +48,8 @@
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
++#define SUBTARGET_EXTRA_LINK_SPEC \
++ " %{mbig-endian:-m armelfb_linux_eabi} %{mlittle-endian:-m armelf_linux_eabi} "
+
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
diff --git a/packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch b/packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch
new file mode 100644
index 0000000000..8fac37c4df
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/904-flatten-switch-stmt-00.patch
@@ -0,0 +1,153 @@
+Hi,
+
+The attached patch makes sure that we create smaller object code for
+simple switch statements. We just make sure to flatten the switch
+statement into an if-else chain, basically.
+
+This fixes a size-regression as compared to gcc-3.4, as can be seen
+below.
+
+2007-04-15 Bernhard Fischer <..>
+
+ * stmt.c (expand_case): Do not create a complex binary tree when
+ optimizing for size but rather use the simple ordered list.
+ (emit_case_nodes): do not emit jumps to the default_label when
+ optimizing for size.
+
+Not regtested so far.
+Comments?
+
+Attached is the test switch.c mentioned below.
+
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i -DCHAIN -Os -o switch-CHAIN-$i.o -c switch.c ;done
+$ for i in 2.95 3.3 3.4 4.0 4.1 4.2.orig-HEAD 4.3.orig-HEAD 4.3-HEAD;do
+gcc-$i -UCHAIN -Os -o switch-$i.o -c switch.c ;done
+
+$ size switch-*.o
+ text data bss dec hex filename
+ 169 0 0 169 a9 switch-2.95.o
+ 115 0 0 115 73 switch-3.3.o
+ 103 0 0 103 67 switch-3.4.o
+ 124 0 0 124 7c switch-4.0.o
+ 124 0 0 124 7c switch-4.1.o
+ 124 0 0 124 7c switch-4.2.orig-HEAD.o
+ 95 0 0 95 5f switch-4.3-HEAD.o
+ 124 0 0 124 7c switch-4.3.orig-HEAD.o
+ 166 0 0 166 a6 switch-CHAIN-2.95.o
+ 111 0 0 111 6f switch-CHAIN-3.3.o
+ 95 0 0 95 5f switch-CHAIN-3.4.o
+ 95 0 0 95 5f switch-CHAIN-4.0.o
+ 95 0 0 95 5f switch-CHAIN-4.1.o
+ 95 0 0 95 5f switch-CHAIN-4.2.orig-HEAD.o
+ 95 0 0 95 5f switch-CHAIN-4.3-HEAD.o
+ 95 0 0 95 5f switch-CHAIN-4.3.orig-HEAD.o
+
+
+Content-Type: text/x-diff; charset=us-ascii
+Content-Disposition: attachment; filename="gcc-4.3.gcc-flatten-switch-stmt.00.diff"
+
+Index: gcc-4.2.0/gcc/stmt.c
+===================================================================
+--- gcc-4.2.0.orig/gcc/stmt.c (revision 123843)
++++ gcc-4.2.0/gcc/stmt.c (working copy)
+@@ -2517,7 +2517,11 @@ expand_case (tree exp)
+ use_cost_table
+ = (TREE_CODE (orig_type) != ENUMERAL_TYPE
+ && estimate_case_costs (case_list));
+- balance_case_nodes (&case_list, NULL);
++ /* When optimizing for size, we want a straight list to avoid
++ jumps as much as possible. This basically creates an if-else
++ chain. */
++ if (!optimize_size)
++ balance_case_nodes (&case_list, NULL);
+ emit_case_nodes (index, case_list, default_label, index_type);
+ emit_jump (default_label);
+ }
+@@ -3075,6 +3079,7 @@ emit_case_nodes (rtx index, case_node_pt
+ {
+ if (!node_has_low_bound (node, index_type))
+ {
++ if (!optimize_size) /* don't jl to the .default_label. */
+ emit_cmp_and_jump_insns (index,
+ convert_modes
+ (mode, imode,
+
+
+Content-Type: text/x-csrc; charset=us-ascii
+Content-Disposition: attachment; filename="switch.c"
+
+int
+commutative_tree_code (int code)
+{
+#define CASE(val, ret) case val:/* __asm__("# val="#val ",ret="#ret);*/ return ret;
+#ifndef CHAIN
+ switch (code)
+ {
+# if 1
+ CASE(1,3)
+ CASE(3,2)
+ CASE(5,8)
+ CASE(7,1)
+ CASE(33,4)
+ CASE(44,9)
+ CASE(55,10)
+ CASE(66,-1)
+ CASE(77,99)
+ CASE(666,0)
+# else
+ case 1:
+ return 3;
+ case 3:
+ return 2;
+ case 5:
+ return 8;
+ case 7:
+ return 1;
+ case 33:
+ return 4;
+ case 44:
+ return 9;
+ case 55:
+ return 10;
+ case 66:
+ return -1;
+ case 77:
+ return 99;
+ case 666:
+ return 0;
+# endif
+ default:
+ break;
+ }
+ return 4711;
+
+#else
+ if (code == 1)
+ return 3;
+ else if (code == 3)
+ return 2;
+ else if (code == 5)
+ return 8;
+ else if (code == 7)
+ return 1;
+ else if (code == 33)
+ return 4;
+ else if (code == 44)
+ return 9;
+ else if (code == 55)
+ return 10;
+ else if (code == 66)
+ return -1;
+ else if (code == 77)
+ return 99;
+ else if (code == 666)
+ return 0;
+ else
+ return 4711;
+#endif
+}
+
+
+--AhhlLboLdkugWU4S--
+
diff --git a/packages/gcc/gcc-4.2.1/README b/packages/gcc/gcc-4.2.1/README
new file mode 100644
index 0000000000..b85840dc20
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/README
@@ -0,0 +1,4 @@
+The numbered patches come from
+http://www.uclibc.org/cgi-bin/viewcvs.cgi/trunk/buildroot/toolchain/gcc/4.1.1/
+Other patches are locally added to fix things (mostly inherited and reapplied
+from gcc 3.4.4 where applicable)
diff --git a/packages/gcc/gcc-4.2-20060513/arm-nolibfloat.patch b/packages/gcc/gcc-4.2.1/arm-nolibfloat.patch
index c4897c0330..c4897c0330 100644
--- a/packages/gcc/gcc-4.2-20060513/arm-nolibfloat.patch
+++ b/packages/gcc/gcc-4.2.1/arm-nolibfloat.patch
diff --git a/packages/gcc/gcc-4.2-20060513/arm-softfloat.patch b/packages/gcc/gcc-4.2.1/arm-softfloat.patch
index c86c83ed15..c86c83ed15 100644
--- a/packages/gcc/gcc-4.2-20060513/arm-softfloat.patch
+++ b/packages/gcc/gcc-4.2.1/arm-softfloat.patch
diff --git a/packages/gcc/gcc-4.2.1/arm-thumb-cache.patch b/packages/gcc/gcc-4.2.1/arm-thumb-cache.patch
new file mode 100644
index 0000000000..fa63846c8c
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/arm-thumb-cache.patch
@@ -0,0 +1,29 @@
+--- gcc-4.1.1/gcc/config/arm/linux-gas.h- 2005-06-25 03:22:41.000000000 +0200
++++ gcc-4.1.1/gcc/config/arm/linux-gas.h 2006-06-18 10:23:46.000000000 +0200
+@@ -44,6 +44,7 @@
+
+ /* Clear the instruction cache from `beg' to `end'. This makes an
+ inline system call to SYS_cacheflush. */
++#if !defined(__thumb__)
+ #define CLEAR_INSN_CACHE(BEG, END) \
+ { \
+ register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \
+@@ -53,3 +54,18 @@
+ : "=r" (_beg) \
+ : "0" (_beg), "r" (_end), "r" (_flg)); \
+ }
++#else
++#define CLEAR_INSN_CACHE(BEG, END) \
++{ \
++ register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \
++ register unsigned long _end __asm ("a2") = (unsigned long) (END); \
++ register unsigned long _flg __asm ("a3") = 0; \
++ register unsigned long _swi __asm ("a4") = 0xf0002; \
++ __asm __volatile ("push {r7}\n" \
++ " mov r7,a4\n" \
++ " swi 0 @ sys_cacheflush\n" \
++ " pop {r7}\n" \
++ : "=r" (_beg) \
++ : "0" (_beg), "r" (_end), "r" (_flg), "r" (_swi)); \
++}
++#endif
diff --git a/packages/gcc/gcc-4.2.1/arm-thumb.patch b/packages/gcc/gcc-4.2.1/arm-thumb.patch
new file mode 100644
index 0000000000..69e2f68cf2
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/arm-thumb.patch
@@ -0,0 +1,64 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gcc-4.1.1/gcc/config/arm/lib1funcs.asm~gcc
++++ gcc-4.1.1/gcc/config/arm/lib1funcs.asm
+@@ -995,10 +995,24 @@
+ .code 32
+ FUNC_START div0
+
++#if ! defined __thumb__
+ stmfd sp!, {r1, lr}
+ mov r0, #SIGFPE
+ bl SYM(raise) __PLT__
+ RETLDM r1
++#else
++ push {r1, lr}
++ mov r0, #SIGFPE
++ bl SYM(raise) __PLT__
++#if __ARM_ARCH__ > 4
++ pop {r1, pc}
++#else
++ @ on 4T that won't work
++ pop {r1}
++ pop {r3}
++ bx r3
++#endif
++#endif
+
+ FUNC_END div0
+
+@@ -1141,11 +1155,12 @@
+ code here switches to the correct mode before executing the function. */
+
+ .text
+- .align 0
++ .align 1
+ .force_thumb
+
+ .macro call_via register
+ THUMB_FUNC_START _call_via_\register
++ .hidden SYM (_call_via_\register)
+
+ bx \register
+ nop
+@@ -1242,6 +1257,7 @@
+ .code 16
+
+ THUMB_FUNC_START _interwork_call_via_\register
++ .hidden SYM (_interwork_call_via_\register)
+
+ bx pc
+ nop
+--- gcc-4.1.1/gcc/config/arm/t-linux~gcc
++++ gcc-4.1.1/gcc/config/arm/t-linux
+@@ -7,6 +7,7 @@
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
++ _call_via_rX \
+ _fixsfsi _fixunssfsi _floatdidf _floatdisf
+
+ # MULTILIB_OPTIONS = mhard-float/msoft-float
diff --git a/packages/gcc/gcc-4.2.1/cache-amnesia.patch b/packages/gcc/gcc-4.2.1/cache-amnesia.patch
new file mode 100644
index 0000000000..ef7cd111c5
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/cache-amnesia.patch
@@ -0,0 +1,13 @@
+diff --git a/gcc/configure b/gcc/configure
+index 44620ab..6e1830c 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -12272,7 +12272,7 @@ else
+ esac
+ saved_CFLAGS="${CFLAGS}"
+ CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+- ${realsrcdir}/configure \
++ CONFIG_SITE= ${realsrcdir}/configure --cache-file=./other.cache \
+ --enable-languages=${enable_languages-all} \
+ --target=$target_alias --host=$build_alias --build=$build_alias
+ CFLAGS="${saved_CFLAGS}"
diff --git a/packages/gcc/gcc-4.2.1/fix-ICE-in-arm_unwind_emit_set.diff b/packages/gcc/gcc-4.2.1/fix-ICE-in-arm_unwind_emit_set.diff
new file mode 100644
index 0000000000..568e15abff
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/fix-ICE-in-arm_unwind_emit_set.diff
@@ -0,0 +1,18 @@
+--- trunk/gcc/config/arm/arm.c 2006/09/19 13:18:27 117055
++++ trunk/gcc/config/arm/arm.c 2006/09/19 13:19:24 117056
+@@ -15415,6 +15415,15 @@
+ /* Move from sp to reg. */
+ asm_fprintf (asm_out_file, "\t.movsp %r\n", REGNO (e0));
+ }
++ else if (GET_CODE (e1) == PLUS
++ && GET_CODE (XEXP (e1, 0)) == REG
++ && REGNO (XEXP (e1, 0)) == SP_REGNUM
++ && GET_CODE (XEXP (e1, 1)) == CONST_INT)
++ {
++ /* Set reg to offset from sp. */
++ asm_fprintf (asm_out_file, "\t.movsp %r, #%d\n",
++ REGNO (e0), (int)INTVAL(XEXP (e1, 1)));
++ }
+ else
+ abort ();
+ break;
diff --git a/packages/gcc/gcc-4.2.1/gcc41-configure.in.patch b/packages/gcc/gcc-4.2.1/gcc41-configure.in.patch
new file mode 100644
index 0000000000..3d33bcb978
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/gcc41-configure.in.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.4/configure.in.orig 2005-08-09 19:57:51.504323183 -0700
++++ gcc-3.4.4/configure.in 2005-08-09 20:00:12.073168623 -0700
+@@ -1907,7 +1907,7 @@
+ *) gxx_include_dir=${with_gxx_include_dir} ;;
+ esac
+
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+ *" newlib "*)
+ case " $target_configargs " in
+--- gcc-3.4.4/configure.orig 2005-08-09 21:02:29.668360660 -0700
++++ gcc-3.4.4/configure 2005-08-09 21:02:50.157649970 -0700
+@@ -2669,7 +2669,7 @@
+ *) gxx_include_dir=${with_gxx_include_dir} ;;
+ esac
+
+-FLAGS_FOR_TARGET=
++FLAGS_FOR_TARGET="$ARCH_FLAGS_FOR_TARGET"
+ case " $target_configdirs " in
+ *" newlib "*)
+ case " $target_configargs " in
diff --git a/packages/gcc/gcc-4.2-20060513/ldflags.patch b/packages/gcc/gcc-4.2.1/ldflags.patch
index 9576f60778..9576f60778 100644
--- a/packages/gcc/gcc-4.2-20060513/ldflags.patch
+++ b/packages/gcc/gcc-4.2.1/ldflags.patch
diff --git a/packages/gcc/gcc-4.2.1/sdk-libstdc++-includes.patch b/packages/gcc/gcc-4.2.1/sdk-libstdc++-includes.patch
new file mode 100644
index 0000000000..4377c2143b
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/sdk-libstdc++-includes.patch
@@ -0,0 +1,22 @@
+--- gcc-3.4.1/libstdc++-v3/libmath/Makefile.am~ 2003-08-27 22:29:42.000000000 +0100
++++ gcc-3.4.1/libstdc++-v3/libmath/Makefile.am 2004-07-22 16:41:45.152130128 +0100
+@@ -32,7 +32,7 @@
+
+ libmath_la_SOURCES = stubs.c
+
+-AM_CPPFLAGS = $(CANADIAN_INCLUDES)
++AM_CPPFLAGS = $(CANADIAN_INCLUDES) -I$(toplevel_srcdir)/include
+
+ # Only compiling "C" sources in this directory.
+ LIBTOOL = @LIBTOOL@ --tag CC
+--- gcc-3.4.1/libstdc++-v3/fragment.am.old 2004-07-22 18:24:58.024083656 +0100
++++ gcc-3.4.1/libstdc++-v3/fragment.am 2004-07-22 18:24:59.019932264 +0100
+@@ -18,7 +18,7 @@
+ $(WARN_FLAGS) $(WERROR) -fdiagnostics-show-location=once
+
+ # -I/-D flags to pass when compiling.
+-AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
++AM_CPPFLAGS = $(GLIBCXX_INCLUDES) -I$(toplevel_srcdir)/include
+
+
+
diff --git a/packages/gcc/gcc-4.2.1/sh3-installfix-fixheaders.patch b/packages/gcc/gcc-4.2.1/sh3-installfix-fixheaders.patch
new file mode 100644
index 0000000000..a06cd2e075
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/sh3-installfix-fixheaders.patch
@@ -0,0 +1,11 @@
+--- gcc-4.1.1/gcc/Makefile.in_orig 2007-01-31 21:24:23.000000000 +0000
++++ gcc-4.1.1/gcc/Makefile.in 2007-01-31 21:24:43.000000000 +0000
+@@ -3772,8 +3772,6 @@
+ $(INSTALL_SCRIPT) $(mkinstalldirs) \
+ $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
+ $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
+- $(INSTALL_PROGRAM) build/fix-header$(build_exeext) \
+- $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
+ else :; fi
+ echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
+ > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
diff --git a/packages/gcc/gcc-4.2.1/unbreak-armv4t.patch b/packages/gcc/gcc-4.2.1/unbreak-armv4t.patch
new file mode 100644
index 0000000000..b3399abfdb
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/unbreak-armv4t.patch
@@ -0,0 +1,12 @@
+diff -urN gcc-4.1.1/gcc/config/arm/linux-eabi.h gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h
+--- gcc-4.1.1/gcc/config/arm/linux-eabi.h 2006-10-22 11:11:49.000000000 -0700
++++ gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h 2006-10-24 21:34:01.000000000 -0700
+@@ -45,7 +45,7 @@
+ The ARM10TDMI core is the default for armv5t, so set
+ SUBTARGET_CPU_DEFAULT to achieve this. */
+ #undef SUBTARGET_CPU_DEFAULT
+-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+ #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
diff --git a/packages/gcc/gcc-4.2-20060513/zecke-no-host-includes.patch b/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch
index 6afb10d6ef..6afb10d6ef 100644
--- a/packages/gcc/gcc-4.2-20060513/zecke-no-host-includes.patch
+++ b/packages/gcc/gcc-4.2.1/zecke-no-host-includes.patch
diff --git a/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch b/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch
new file mode 100644
index 0000000000..42ec190600
--- /dev/null
+++ b/packages/gcc/gcc-4.2.1/zecke-xgcc-cpp.patch
@@ -0,0 +1,12 @@
+Index: gcc-4.1.1/Makefile.in
+===================================================================
+--- gcc-4.1.1.orig/Makefile.in 2006-08-06 13:32:44.000000000 +0200
++++ gcc-4.1.1/Makefile.in 2006-08-06 13:32:46.000000000 +0200
+@@ -194,6 +194,7 @@
+ AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
++ CPP="$(CC_FOR_TARGET) -E"; export CCP; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
diff --git a/packages/gcc/gcc-cross-initial_3.3.3.bb b/packages/gcc/gcc-cross-initial_3.3.3.bb
index c650e4fe57..4fccaf3888 100644
--- a/packages/gcc/gcc-cross-initial_3.3.3.bb
+++ b/packages/gcc/gcc-cross-initial_3.3.3.bb
@@ -4,6 +4,7 @@ require gcc-cross_${PV}.bb
DEPENDS = "virtual/${TARGET_PREFIX}binutils"
DEPENDS += "${@['virtual/${TARGET_PREFIX}libc-initial',''][bb.data.getVar('TARGET_ARCH', d, 1) in ['arm', 'armeb', 'mips', 'mipsel']]}"
PROVIDES = "virtual/${TARGET_PREFIX}gcc-initial"
+PACKAGES = ""
# This is intended to be a -very- basic config
EXTRA_OECONF = "--with-local-prefix=${CROSS_DIR}/${TARGET_SYS} \
diff --git a/packages/gcc/gcc-cross-initial_4.1.2.bb b/packages/gcc/gcc-cross-initial_4.1.2.bb
new file mode 100644
index 0000000000..1e23ef9330
--- /dev/null
+++ b/packages/gcc/gcc-cross-initial_4.1.2.bb
@@ -0,0 +1,30 @@
+require gcc-cross_${PV}.bb
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils"
+DEPENDS += "${@['virtual/${TARGET_PREFIX}libc-initial',''][bb.data.getVar('TARGET_ARCH', d, 1) in ['arm', 'armeb', 'mips', 'mipsel']]}"
+PROVIDES = "virtual/${TARGET_PREFIX}gcc-initial"
+PACKAGES = ""
+
+# This is intended to be a -very- basic config
+EXTRA_OECONF = "--with-local-prefix=${CROSS_DIR}/${TARGET_SYS} \
+ --with-newlib \
+ --disable-shared \
+ --disable-threads \
+ --disable-multilib \
+ --disable-__cxa_atexit \
+ --disable-libmudflap \
+ --disable-libssp \
+ --enable-languages=c \
+ --enable-target-optspace \
+ --program-prefix=${TARGET_PREFIX} \
+ ${@get_gcc_fpu_setting(bb, d)}"
+
+do_stage_prepend () {
+ mkdir -p ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}
+ ln -sf libgcc.a ${CROSS_DIR}/lib/gcc/${TARGET_SYS}/${BINV}/libgcc_eh.a
+}
+
+# Override the method from gcc-cross so we don't try to install libgcc
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+}
diff --git a/packages/gcc/gcc-cross-kernel-3.4.4_csl-arm-2005q3.bb b/packages/gcc/gcc-cross-kernel-3.4.4_csl-arm-2005q3.bb
new file mode 100644
index 0000000000..4b7e7b715c
--- /dev/null
+++ b/packages/gcc/gcc-cross-kernel-3.4.4_csl-arm-2005q3.bb
@@ -0,0 +1,25 @@
+# This kernel compiler is required by the Freecom FSG-3 machine
+# Please talk to Rod Whitby before considering removing this file.
+
+DEFAULT_PREFERENCE = "-1"
+
+SECTION = "devel"
+# cut-down gcc for kernel builds
+# only installs ${TARGET_PREFIX}gcc-${PV}, not ${TARGET_PREFIX}gcc.
+
+require gcc-cross-initial_${PV}.bb
+
+PROVIDES = "virtual/${TARGET_PREFIX}gcc-${PV}"
+
+SRC_URI += "file://gcc-3.4.4-makefile-fix.patch;patch=1"
+
+do_install () {
+ :
+}
+
+do_stage () {
+ cd gcc
+ oe_runmake install-common install-headers install-libgcc
+ install -m 0755 xgcc ${CROSS_DIR}/bin/${TARGET_PREFIX}gcc-${PV}
+}
+
diff --git a/packages/gcc/gcc-cross-sdk_4.1.2.bb b/packages/gcc/gcc-cross-sdk_4.1.2.bb
new file mode 100644
index 0000000000..5bfb454452
--- /dev/null
+++ b/packages/gcc/gcc-cross-sdk_4.1.2.bb
@@ -0,0 +1,38 @@
+PR = "r3"
+
+inherit sdk
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc"
+PACKAGES = "${PN}"
+
+require gcc_${PV}.bb
+require gcc4-build-sdk.inc
+require gcc-package-sdk.inc
+
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \
+ file://100-uclibc-conf.patch;patch=1 \
+ file://110-arm-eabi.patch;patch=1 \
+ file://200-uclibc-locale.patch;patch=1 \
+ file://300-libstdc++-pic.patch;patch=1 \
+ file://301-missing-execinfo_h.patch;patch=1 \
+ file://302-c99-snprintf.patch;patch=1 \
+ file://303-c99-complex-ugly-hack.patch;patch=1 \
+ file://304-index_macro.patch;patch=1 \
+ file://602-sdk-libstdc++-includes.patch;patch=1 \
+ file://740-sh-pr24836.patch;patch=1 \
+ file://800-arm-bigendian.patch;patch=1 \
+ file://arm-nolibfloat.patch;patch=1 \
+ file://arm-softfloat.patch;patch=1 \
+ file://gcc41-configure.in.patch;patch=1 \
+ file://arm-thumb.patch;patch=1 \
+ file://arm-thumb-cache.patch;patch=1 \
+ file://ldflags.patch;patch=1 \
+ file://unbreak-armv4t.patch;patch=1 \
+ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
+ "
+
+SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
+
+
diff --git a/packages/gcc/gcc-cross_4.0.2.bb b/packages/gcc/gcc-cross_4.0.2.bb
index d2dc240126..59da2080e8 100644
--- a/packages/gcc/gcc-cross_4.0.2.bb
+++ b/packages/gcc/gcc-cross_4.0.2.bb
@@ -5,7 +5,7 @@ inherit cross
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
# NOTE: split PR. If the main .oe changes something that affects its *build*
# remember to increment this one too.
-PR = "r1"
+PR = "r7"
DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
diff --git a/packages/gcc/gcc-cross_4.1.1.bb b/packages/gcc/gcc-cross_4.1.1.bb
index 42e9d151b1..08bc3a836e 100644
--- a/packages/gcc/gcc-cross_4.1.1.bb
+++ b/packages/gcc/gcc-cross_4.1.1.bb
@@ -5,7 +5,7 @@ inherit cross
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
# NOTE: split PR. If the main .oe changes something that affects its *build*
# remember to increment this one too.
-PR = "r11"
+PR = "r12"
DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
@@ -15,4 +15,6 @@ require gcc3-build-cross.inc
# cross packaging
require gcc-package-cross.inc
-EXTRA_OECONF += "--with-mpfr=${STAGING_DIR}/${BUILD_SYS}"
+SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
+
+EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR}/${BUILD_SYS}"
diff --git a/packages/gcc/gcc-cross_4.1.2.bb b/packages/gcc/gcc-cross_4.1.2.bb
new file mode 100644
index 0000000000..a9e4a0ddc2
--- /dev/null
+++ b/packages/gcc/gcc-cross_4.1.2.bb
@@ -0,0 +1,20 @@
+require gcc_${PV}.bb
+# path mangling, needed by the cross packaging
+require gcc-paths-cross.inc
+inherit cross
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+# NOTE: split PR. If the main .oe changes something that affects its *build*
+# remember to increment this one too.
+PR = "r4"
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
+PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
+
+# cross build
+require gcc3-build-cross.inc
+# cross packaging
+require gcc-package-cross.inc
+
+SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
+
+EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR}/${BUILD_SYS}"
diff --git a/packages/gcc/gcc-cross_4.2-20060513.bb b/packages/gcc/gcc-cross_4.2-20060513.bb
deleted file mode 100644
index 4e380c5f66..0000000000
--- a/packages/gcc/gcc-cross_4.2-20060513.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-require gcc_${PV}.bb
-# path mangling, needed by the cross packaging
-require gcc-paths-cross.inc
-inherit cross
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
-# NOTE: split PR. If the main .oe changes something that affects its *build*
-# remember to increment this one too.
-PR = "r1"
-
-DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
-PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
-
-# cross build
-require gcc3-build-cross.inc
-# cross packaging
-require gcc-package-cross.inc
-
-EXTRA_OECONF += "--with-mpfr=${STAGING_DIR}/${BUILD_SYS}"
diff --git a/packages/gcc/gcc-cross_4.2.1.bb b/packages/gcc/gcc-cross_4.2.1.bb
new file mode 100644
index 0000000000..9025a98f3c
--- /dev/null
+++ b/packages/gcc/gcc-cross_4.2.1.bb
@@ -0,0 +1,20 @@
+require gcc_${PV}.bb
+# path mangling, needed by the cross packaging
+require gcc-paths-cross.inc
+inherit cross
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+# NOTE: split PR. If the main .oe changes something that affects its *build*
+# remember to increment this one too.
+PR = "r1"
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
+PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
+
+# cross build
+require gcc3-build-cross.inc
+# cross packaging
+require gcc-package-cross.inc
+
+SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
+
+EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR}/${BUILD_SYS}"
diff --git a/packages/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch b/packages/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch
new file mode 100644
index 0000000000..e6cc42bb65
--- /dev/null
+++ b/packages/gcc/gcc-csl-arm/gcc-3.4.4-eabi-bigendian.patch
@@ -0,0 +1,12 @@
+--- gcc-2005q3/gcc/config/arm/linux-eabi.h~ 2007-07-10 09:19:47.000000000 +0930
++++ gcc-2005q3/gcc/config/arm/linux-eabi.h 2007-07-10 10:42:37.000000000 +0930
+@@ -48,7 +48,8 @@
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
+
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
++#define SUBTARGET_EXTRA_LINK_SPEC \
++ " %{mbig-endian:-m armelfb_linux_eabi} %{mlittle-endian:-m armelf_linux_eabi} "
+
+ /* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc
index d9fe3bef4f..a7a4908120 100644
--- a/packages/gcc/gcc-package-cross.inc
+++ b/packages/gcc/gcc-package-cross.inc
@@ -7,7 +7,6 @@ OLD_INHIBIT_PACKAGE_STRIP := "${INHIBIT_PACKAGE_STRIP}"
INHIBIT_PACKAGE_STRIP = "1"
PACKAGES = "libgcc libgcc-dev libstdc++ libg2c libg2c-dev libgfortran libgfortran-dev"
-PACKAGES_DYNAMIC = "libgcc* libstdc* libg2c* libgfortran*"
# Called from within gcc-cross, so libdir is set wrong
FILES_libg2c = "${target_libdir}/libg2c.so.*"
diff --git a/packages/gcc/gcc-package-sdk.inc b/packages/gcc/gcc-package-sdk.inc
index 9d44fb51ab..1e5f2aaa5d 100644
--- a/packages/gcc/gcc-package-sdk.inc
+++ b/packages/gcc/gcc-package-sdk.inc
@@ -41,7 +41,7 @@ do_install () {
# the packaging.
if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then
${TARGET_PREFIX}strip ${D}${libdir}/libstdc++.so.*
- ${TARGET_PREFIX}strip ${D}${libdir}/libg2c.so.*
+ ${TARGET_PREFIX}strip ${D}${libdir}/libg2c.so.* || true
${TARGET_PREFIX}strip ${D}${base_libdir}/libgcc_s.so.*
fi
}
diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc
index 1deaf3d94a..82bf78db80 100644
--- a/packages/gcc/gcc-package.inc
+++ b/packages/gcc/gcc-package.inc
@@ -67,6 +67,12 @@ FILES_${PN}-doc = "${infodir} \
${mandir} \
${gcclibdir}/${TARGET_SYS}/${BINV}/include/README"
+python do_package() {
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_libgcc', 'libgcc1', d)
+ bb.build.exec_func('package_do_package', d)
+}
+
do_install () {
autotools_do_install
diff --git a/packages/gcc/gcc4-build-sdk.inc b/packages/gcc/gcc4-build-sdk.inc
index 86aa566e5c..b75e8a57c9 100644
--- a/packages/gcc/gcc4-build-sdk.inc
+++ b/packages/gcc/gcc4-build-sdk.inc
@@ -1,4 +1,6 @@
USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibc", "no", "", d )}'
+USE_NLS = '${@base_conditional( "TARGET_OS", "linux-uclibcgnueabi", "no", "", d )}'
+
STAGING_TARGET_INCDIR = "${STAGING_DIR}/${TARGET_SYS}/include"
STAGING_TARGET_LIBDIR = "${STAGING_DIR}/${TARGET_SYS}/lib"
diff --git a/packages/gcc/gcc_4.0.2.bb b/packages/gcc/gcc_4.0.2.bb
index f812897786..0541ddfe96 100644
--- a/packages/gcc/gcc_4.0.2.bb
+++ b/packages/gcc/gcc_4.0.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
LICENSE = "GPL"
DEPENDS = "mpfr gmp"
-PR = "r3"
+PR = "r5"
inherit autotools gettext
@@ -23,7 +23,9 @@ SRC_URI_append = " file://100-uclibc-conf.patch;patch=1 \
file://302-c99-snprintf.patch;patch=1 \
file://303-c99-complex-ugly-hack.patch;patch=1 \
file://800-arm-bigendian.patch;patch=1 \
- file://zecke-host-cpp-ac-hack.patch;patch=1 "
+ file://zecke-host-cpp-ac-hack.patch;patch=1 \
+ file://gcc-4.0.2-atmel.0.99.2.patch;patch=1 \
+ "
SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
diff --git a/packages/gcc/gcc_4.1.1.bb b/packages/gcc/gcc_4.1.1.bb
index 104a8abb76..9135daca18 100644
--- a/packages/gcc/gcc_4.1.1.bb
+++ b/packages/gcc/gcc_4.1.1.bb
@@ -1,4 +1,4 @@
-PR = "r10"
+PR = "r14"
DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
@@ -32,11 +32,17 @@ SRC_URI = "http://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.1/gcc-4.1.1.tar.bz2 \
file://unbreak-armv4t.patch;patch=1 \
file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
file://gcc-4.1.1-pr13685-1.patch;patch=1 \
+ file://gcc-ignore-cache.patch;patch=1 \
"
-SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
+#This is a dirty hack to get gcc 4.1.1 to compile for glibc AND uclibc on ppc
+#the patch that is need it to get gcc support soft-floats with glibc, makes gcc fail with uclibc
+SRC_URI_append_linux = " file://ppc-gcc-41-20060515.patch;patch=1 \
+ file://ppc-sfp-long-double-gcc411-7.patch;patch=1 "
+
+
#Set the fortran bits
# 'fortran' or '', not 'f77' like gcc3 had
FORTRAN = ""
diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb
index 91f6624aa1..2557a2694e 100644
--- a/packages/gcc/gcc_4.1.2.bb
+++ b/packages/gcc/gcc_4.1.2.bb
@@ -1,4 +1,4 @@
-PR = "r0"
+PR = "r3"
DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
@@ -20,7 +20,6 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \
file://602-sdk-libstdc++-includes.patch;patch=1 \
file://740-sh-pr24836.patch;patch=1 \
file://800-arm-bigendian.patch;patch=1 \
- file://801-arm-bigendian-eabi.patch;patch=1 \
file://arm-nolibfloat.patch;patch=1 \
file://arm-softfloat.patch;patch=1 \
file://gcc41-configure.in.patch;patch=1 \
@@ -30,9 +29,9 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \
file://zecke-xgcc-cpp.patch;patch=1 \
file://unbreak-armv4t.patch;patch=1 \
file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
+ file://cache-amnesia.patch;patch=1 \
"
-SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
#Set the fortran bits
@@ -47,6 +46,7 @@ JAVA = ""
LANGUAGES = "c,c++${FORTRAN}${JAVA}"
require gcc3-build.inc
+ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR}
EXTRA_OECONF += " --disable-libssp "
diff --git a/packages/gcc/gcc_4.2-20060513.bb b/packages/gcc/gcc_4.2-20060513.bb
deleted file mode 100644
index 85fe468bc0..0000000000
--- a/packages/gcc/gcc_4.2-20060513.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-PR = "r0"
-DESCRIPTION = "The GNU cc and gcc C compilers."
-HOMEPAGE = "http://www.gnu.org/software/gcc/"
-SECTION = "devel"
-LICENSE = "GPL"
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools gettext
-
-require gcc-package.inc
-
-SRC_URI = "http://ftp.nluug.nl/languages/gcc/snapshots/${PV}/gcc-${PV}.tar.bz2 \
- file://arm-nolibfloat.patch;patch=1 \
- file://arm-softfloat.patch;patch=1 \
- file://zecke-xgcc-cpp.patch;patch=1 \
- file://ldflags.patch;patch=1"
-
-SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
-
-require gcc4-build.inc
-EXTRA_OECONF += "--disable-libssp"
-
-FORTRAN = ""
-HAS_GFORTRAN = ""
-HAS_G2C = "no"
-
-
diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb
new file mode 100644
index 0000000000..79d32d45ce
--- /dev/null
+++ b/packages/gcc/gcc_4.2.1.bb
@@ -0,0 +1,53 @@
+PR = "r0"
+DESCRIPTION = "The GNU cc and gcc C compilers."
+HOMEPAGE = "http://www.gnu.org/software/gcc/"
+SECTION = "devel"
+LICENSE = "GPL"
+
+inherit autotools gettext
+
+require gcc-package.inc
+
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
+ file://100-uclibc-conf.patch;patch=1 \
+ file://200-uclibc-locale.patch;patch=1 \
+ file://300-libstdc++-pic.patch;patch=1 \
+ file://301-missing-execinfo_h.patch;patch=1 \
+ file://302-c99-snprintf.patch;patch=1 \
+ file://303-c99-complex-ugly-hack.patch;patch=1 \
+ file://304-index_macro.patch;patch=1 \
+ file://602-sdk-libstdc++-includes.patch;patch=1 \
+ file://740-sh-pr24836.patch;patch=1 \
+ file://800-arm-bigendian.patch;patch=1 \
+ file://904-flatten-switch-stmt-00.patch;patch=1 \
+ file://arm-nolibfloat.patch;patch=1 \
+ file://arm-softfloat.patch;patch=1 \
+ file://gcc41-configure.in.patch;patch=1 \
+ file://arm-thumb.patch;patch=1 \
+ file://arm-thumb-cache.patch;patch=1 \
+ file://ldflags.patch;patch=1 \
+ file://zecke-xgcc-cpp.patch;patch=1 \
+ file://unbreak-armv4t.patch;patch=1 \
+ file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
+ file://cache-amnesia.patch;patch=1 \
+ "
+
+SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
+
+#Set the fortran bits
+# 'fortran' or '', not 'f77' like gcc3 had
+FORTRAN = ""
+HAS_GFORTRAN = "no"
+HAS_G2C = "no"
+
+#Set the java bits
+JAVA_arm = ""
+JAVA = ""
+
+LANGUAGES = "c,c++${FORTRAN}${JAVA}"
+require gcc3-build.inc
+ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR}
+
+
+EXTRA_OECONF += " --disable-libssp --disable-bootstrap "
+
diff --git a/packages/gcc/gcc_csl-arm-2005q3.bb b/packages/gcc/gcc_csl-arm-2005q3.bb
index d1053dad1d..4f41ca06af 100644
--- a/packages/gcc/gcc_csl-arm-2005q3.bb
+++ b/packages/gcc/gcc_csl-arm-2005q3.bb
@@ -13,7 +13,8 @@ inherit autotools gettext
require gcc-package.inc
SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm/2005q3-2/arm-2005q3-2-arm-none-linux-gnueabi.src.tar.bz2 \
- file://gcc_optab_arm.patch;patch=1"
+ file://gcc_optab_arm.patch;patch=1 \
+ file://gcc-3.4.4-eabi-bigendian.patch;patch=1"
do_unpack2() {
cd ${WORKDIR}
diff --git a/packages/gd/gd_2.0.33.bb b/packages/gd/gd_2.0.33.bb
index 78500bbcbd..7c1f7c3d19 100644
--- a/packages/gd/gd_2.0.33.bb
+++ b/packages/gd/gd_2.0.33.bb
@@ -2,7 +2,7 @@ SECTION = "libs"
LICENSE = "GD"
DESCRIPTION = "gd is a library used to create PNG, JPEG, or WBMP images."
DEPENDS = "libpng jpeg zlib"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.boutell.com/gd/http/gd-${PV}.tar.gz"
S = "${WORKDIR}/gd-${PV}"
@@ -12,6 +12,8 @@ inherit autotools binconfig gettext
EXTRA_OECONF += " --with-zlib=${STAGING_LIBDIR}/.. \
--with-png=${STAGING_LIBDIR}/.. \
--with-jpeg=${STAGING_LIBDIR}/.. \
+ --without-freetype \
+ --without-fontconfig \
--without-xpm \
--without-x"
diff --git a/packages/initscripts/initscripts-1.0/openzaurus/.mtn2git_empty b/packages/gdado/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/initscripts/initscripts-1.0/openzaurus/.mtn2git_empty
+++ b/packages/gdado/.mtn2git_empty
diff --git a/packages/gdado/gdado_2.2.bb b/packages/gdado/gdado_2.2.bb
new file mode 100644
index 0000000000..feaa6ed991
--- /dev/null
+++ b/packages/gdado/gdado_2.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "gtk+ based dice roller for RPG games"
+HOMEPAGE = "http://gdado.sf.net"
+SECTION = "x11/games"
+LICENSE = "GPLv2"
+DEPENDS = "libgnomeui gtk+"
+PR = "r1"
+SRC_URI = "${SOURCEFORGE_MIRROR}/gdado/gdado-${PV}.tar.gz"
+
+inherit autotools
+
+do_install_prepend() {
+ sed -i -e "s|Icon=gdado.png|Icon=${datadir}/pixmaps/gdado/gdado.png|" \
+ gdado.desktop
+}
+
diff --git a/packages/gdal/gdal_1.3.2.bb b/packages/gdal/gdal_1.3.2.bb
index 2a97cfe81d..60f86b165a 100644
--- a/packages/gdal/gdal_1.3.2.bb
+++ b/packages/gdal/gdal_1.3.2.bb
@@ -5,7 +5,7 @@ DEPENDS = "zlib"
SRC_URI = "http://www.gdal.org/dl/${P}.tar.gz"
-inherit autotools pkgconfig
+inherit autotools pkgconfig binconfig
PARALLEL_MAKE = ""
@@ -36,3 +36,7 @@ do_package_prepend() {
os.system('cp -pPR ${D}${D}* ${D}../')
}
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/gdb/gdb-cross.inc b/packages/gdb/gdb-cross.inc
new file mode 100644
index 0000000000..33ca380464
--- /dev/null
+++ b/packages/gdb/gdb-cross.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "gdb - GNU debugger"
+HOMEPAGE = "http://www.gnu.org/software/gdb/"
+LICENSE="GPL"
+SECTION = "base"
+PRIORITY = "optional"
+DEPENDS = "ncurses-native"
+
+SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz"
+
+S = "${WORKDIR}/gdb-${PV}"
+
+inherit autotools sdk
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gdb-${PV}"
+
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CXX_FOR_BUILD = "${BUILD_CXX}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
+export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
+
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
+
+EXTRA_OECONF = "--with-curses --with-readline"
diff --git a/packages/gdb/gdb-cross_6.3.bb b/packages/gdb/gdb-cross_6.3.bb
index 5dd5cf5ac5..5419872bc9 100644
--- a/packages/gdb/gdb-cross_6.3.bb
+++ b/packages/gdb/gdb-cross_6.3.bb
@@ -1,30 +1,10 @@
-require gdb.inc
-
-SECTION = "base"
-DEPENDS = "ncurses-native"
-
-inherit autotools sdk
+require gdb-cross.inc
PR = "r1"
-S = "${WORKDIR}/gdb-${PV}"
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz \
- file://sim-install-makefile.patch;patch=1 \
+SRC_URI += "file://sim-install-makefile.patch;patch=1 \
file://sim-install-makefile-common.patch;patch=1"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gdb-${PV}"
-
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
-
-EXTRA_OECONF = "--with-curses --with-readline"
-
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
# calls for now
diff --git a/packages/gdb/gdb-cross_6.4.bb b/packages/gdb/gdb-cross_6.4.bb
index 3a108d568b..2f93e6b28e 100644
--- a/packages/gdb/gdb-cross_6.4.bb
+++ b/packages/gdb/gdb-cross_6.4.bb
@@ -1,26 +1,4 @@
-require gdb.inc
-
-SECTION = "base"
-DEPENDS = "ncurses-native"
-
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz"
-
-S = "${WORKDIR}/gdb-${PV}"
-
-inherit autotools sdk
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gdb-${PV}"
-
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
-
-EXTRA_OECONF = "--with-curses --with-readline"
+require gdb-cross.inc
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
diff --git a/packages/gdb/gdb-cross_6.6.bb b/packages/gdb/gdb-cross_6.6.bb
index 03d9cda12c..f32ee32a5d 100644
--- a/packages/gdb/gdb-cross_6.6.bb
+++ b/packages/gdb/gdb-cross_6.6.bb
@@ -1,29 +1,8 @@
-LICENSE = "GPL"
-DESCRIPTION = "gdb - GNU debugger"
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "ncurses-native"
-
-inherit autotools sdk
+require gdb-cross.inc
PR = "r1"
-S = "${WORKDIR}/gdb-${PV}"
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz \
- file://sim-install-makefile.patch;patch=1"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gdb-${PV}"
-
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils' LDFLAGS='${BUILD_LDFLAGS}'"
-
-EXTRA_OECONF = "--with-curses --with-readline"
+SRC_URI += "file://sim-install-makefile.patch;patch=1"
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
diff --git a/packages/gdb/gdb.inc b/packages/gdb/gdb.inc
index 168e85f5ba..7eeda45081 100644
--- a/packages/gdb/gdb.inc
+++ b/packages/gdb/gdb.inc
@@ -3,3 +3,46 @@ HOMEPAGE = "http://www.gnu.org/software/gdb/"
LICENSE="GPL"
SECTION = "devel"
PRIORITY = "optional"
+
+DEPENDS = "ncurses readline"
+
+PACKAGES =+ 'gdbserver '
+FILES_gdbserver = '${bindir}/gdbserver'
+
+inherit autotools gettext
+
+SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.bz2 \
+#FIXME file://uclibc.patch;patch=1 \
+ file://kill_arm_map_symbols.patch;patch=1 \
+ file://gdbserver-cflags-last.diff;patch=1;pnum=0"
+
+LDFLAGS_append = " -s"
+export CC_FOR_BUILD = "${BUILD_CC}"
+export CXX_FOR_BUILD = "${BUILD_CXX}"
+export CPP_FOR_BUILD = "${BUILD_CPP}"
+export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
+export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
+export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
+export CFLAGS_append=" -L${STAGING_LIBDIR}"
+EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
+
+EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
+ --with-curses --disable-multilib --with-readline --disable-sim \
+ --program-prefix=''"
+
+S = "${WORKDIR}/gdb-${PV}"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+ CPPFLAGS="" oe_runconf
+}
+
+do_install () {
+ make -C bfd/doc chew LDFLAGS= CFLAGS=-O2
+ oe_runmake DESTDIR='${D}' install
+ install -d ${D}${bindir}
+ install -m 0755 gdb/gdbserver/gdbserver ${D}${bindir}
+}
diff --git a/packages/gdb/gdb_6.3.bb b/packages/gdb/gdb_6.3.bb
index a1c9f9ede4..e5b055299a 100644
--- a/packages/gdb/gdb_6.3.bb
+++ b/packages/gdb/gdb_6.3.bb
@@ -1,46 +1,4 @@
require gdb.inc
-DEPENDS = "ncurses readline"
RDEPENDS_openmn = "libthread-db1"
PR = "r2"
-
-PACKAGES =+ 'gdbserver '
-FILES_gdbserver = '${bindir}/gdbserver'
-
-inherit autotools gettext
-
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz \
- file://uclibc.patch;patch=1 \
- file://kill_arm_map_symbols.patch;patch=1 \
- file://gdbserver-cflags-last.diff;patch=1;pnum=0"
-
-LDFLAGS_append = " -s"
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-export CFLAGS_append=" -L${STAGING_LIBDIR}"
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
-
-EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
- --with-curses --disable-multilib --with-readline --disable-sim \
- --program-prefix=''"
-
-S = "${WORKDIR}/gdb-${PV}"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
- (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
- CPPFLAGS="" oe_runconf
-}
-
-do_install () {
- make -C bfd/doc chew LDFLAGS= CFLAGS=-O2
- oe_runmake DESTDIR='${D}' install
- install -d ${D}${bindir}
- install -m 0755 gdb/gdbserver/gdbserver ${D}${bindir}
-}
diff --git a/packages/gdb/gdb_6.4.bb b/packages/gdb/gdb_6.4.bb
index 0452fda1a1..e5d2b2af60 100644
--- a/packages/gdb/gdb_6.4.bb
+++ b/packages/gdb/gdb_6.4.bb
@@ -1,45 +1,3 @@
require gdb.inc
-DEPENDS = "ncurses readline"
RDEPENDS_openmn = "libthread-db1"
-
-PACKAGES =+ 'gdbserver '
-FILES_gdbserver = '${bindir}/gdbserver'
-
-inherit autotools gettext
-
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.bz2 \
-#FIXME: file://uclibc.patch;patch=1 \
- file://kill_arm_map_symbols.patch;patch=1 \
- file://gdbserver-cflags-last.diff;patch=1;pnum=0"
-
-LDFLAGS_append = " -s"
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-export CFLAGS_append=" -L${STAGING_LIBDIR}"
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
-
-EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
- --with-curses --disable-multilib --with-readline --disable-sim \
- --program-prefix=''"
-
-S = "${WORKDIR}/gdb-${PV}"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
- (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
- CPPFLAGS="" oe_runconf
-}
-
-do_install () {
- make -C bfd/doc chew LDFLAGS= CFLAGS=-O2
- oe_runmake DESTDIR='${D}' install
- install -d ${D}${bindir}
- install -m 0755 gdb/gdbserver/gdbserver ${D}${bindir}
-}
diff --git a/packages/gdb/gdb_6.6.bb b/packages/gdb/gdb_6.6.bb
index 1bfe3dfecf..3650b927da 100644
--- a/packages/gdb/gdb_6.6.bb
+++ b/packages/gdb/gdb_6.6.bb
@@ -1,50 +1,7 @@
-DESCRIPTION = "gdb - GNU debugger"
-HOMEPAGE = "http://www.gnu.org/software/gdb/"
-LICENSE="GPL"
-SECTION = "devel"
-PRIORITY = "optional"
-DEPENDS = "ncurses readline"
-PR = "r0"
+require gdb.inc
-PACKAGES =+ 'gdbserver '
-FILES_gdbserver = '${bindir}/gdbserver'
+PR = "r2"
-RRECOMMENDS_gdb = "glibc-thread-db"
-
-inherit autotools gettext
-
-SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.gz \
-#FIXME file://uclibc.patch;patch=1 \
- file://kill_arm_map_symbols.patch;patch=1 \
- file://gdbserver-cflags-last.diff;patch=1;pnum=0"
-
-LDFLAGS_append = " -s"
-export CC_FOR_BUILD = "${BUILD_CC}"
-export CXX_FOR_BUILD = "${BUILD_CXX}"
-export CPP_FOR_BUILD = "${BUILD_CPP}"
-export CFLAGS_FOR_BUILD = "${BUILD_CFLAGS}"
-export CXXFLAGS_FOR_BUILD = "${BUILD_CXXFLAGS}"
-export CPPFLAGS_FOR_BUILD = "${BUILD_CPPFLAGS}"
-export CFLAGS_append=" -L${STAGING_LIBDIR}"
-EXTRA_OEMAKE = "'SUBDIRS=intl mmalloc libiberty opcodes bfd sim gdb etc utils'"
-
-EXTRA_OECONF = "--disable-gdbtk --disable-tui --disable-x \
- --with-curses --disable-multilib --with-readline --disable-sim \
- --program-prefix=''"
-
-S = "${WORKDIR}/gdb-${PV}"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
- (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
- CPPFLAGS="" oe_runconf
-}
-
-do_install () {
- make -C bfd/doc chew LDFLAGS= CFLAGS=-O2
- oe_runmake DESTDIR='${D}' install
- install -d ${D}${bindir}
- install -m 0755 gdb/gdbserver/gdbserver ${D}${bindir}
-}
+#only append it for glib, not for uclibc
+RRECOMMENDS_gdb_append_linux = " glibc-thread-db "
+RRECOMMENDS_gdb_append_linux-gnueabi = " glibc-thread-db "
diff --git a/packages/geoclue/geoclue_git.bb b/packages/geoclue/geoclue_git.bb
new file mode 100644
index 0000000000..515cfdab1c
--- /dev/null
+++ b/packages/geoclue/geoclue_git.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "GeoClue is a project that provide all kinds of geography information to an application"
+HOMEPAGE = "http://live.gnome.org/GeoClue"
+
+DEPENDS = "libgpsmgr libgpsbt gtk+ gpsd libxml2 gconf-dbus libsoup dbus-glib"
+
+PV = "0.0+git${SRCDATE}"
+PR = "r0"
+PE = "1"
+
+inherit autotools pkgconfig
+
+SRC_URI = "git://anongit.freedesktop.org/git/geoclue;protocol=git"
+
+S = "${WORKDIR}/git"
+
+
+LDFLAGS_append = " -lgthread-2.0 "
+
+EXTRA_OECONF = " --enable-applet=no "
+
+do_install_append() {
+ mkdir -p ${D}/usr/share/
+ cp -pPr ${D}${STAGING_DATADIR}/* ${D}/usr/share
+ rm -rf ${D}${STAGING_DATADIR}/
+}
+
+PACKAGES =+ "geoclue-applet"
+
+FILES_geoclue-applet += " \
+ ${libdir}/bonobo/servers/* \
+ ${libdir}/gnome-panel/*"
+
+
+FILES_${PN} += " \
+ ${libdir}/gnome-panel/* \
+ ${datadir}/dbus-1"
diff --git a/packages/geoclue/geoclue_svn.bb b/packages/geoclue/geoclue_svn.bb
deleted file mode 100644
index f0d8bc16d8..0000000000
--- a/packages/geoclue/geoclue_svn.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-DESCRIPTION = "GeoClue is a project that provide all kinds of geography information to an application"
-HOMEPAGE = "http://live.gnome.org/GeoClue"
-
-DEPENDS = "gpsd gnome-panel libsoup dbus-glib"
-
-PV = "0.0+svn${SRCDATE}"
-
-inherit autotools pkgconfig
-
-SRC_URI = "svn://svn.foinse-project.org/geoclue;module=trunk;proto=http"
-
-S = "${WORKDIR}/trunk"
-
-do_install_append() {
- mkdir -p ${D}/usr/share/
- cp -pPr ${D}${STAGING_DATADIR}/* ${D}/usr/share
- rm -rf ${D}${STAGING_DATADIR}/
-}
-
-PACKAGES =+ "geoclue-applet"
-
-FILES_geoclue-applet += " \
- ${libdir}/bonobo/servers/* \
- ${libdir}/gnome-panel/*"
-
-
-FILES_${PN} += " \
- ${libdir}/gnome-panel/* \
- ${datadir}/dbus-1"
diff --git a/packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty b/packages/geos/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty
+++ b/packages/geos/.mtn2git_empty
diff --git a/packages/geos/geos_2.2.3+3.0.0rc4.bb b/packages/geos/geos_2.2.3+3.0.0rc4.bb
new file mode 100644
index 0000000000..90bcc4b384
--- /dev/null
+++ b/packages/geos/geos_2.2.3+3.0.0rc4.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS)."
+HOMEPAGE = "http://geos.refractions.net/"
+LICENSE = "GPLv2""
+
+DEPENDS = "boost"
+
+PR = "r1"
+
+SRC_URI = "http://geos.refractions.net/geos-3.0.0rc4.tar.bz2"
+
+S = "${WORKDIR}/geos-3.0.0rc4"
+
+inherit autotools pkgconfig lib_package binconfig
+
+EXTRA_OECONF = "--disable-swig"
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/gettext/gettext-0.14.1/gettext-error_print_progname.patch b/packages/gettext/gettext-0.14.1/gettext-error_print_progname.patch
new file mode 100644
index 0000000000..615a53edd5
--- /dev/null
+++ b/packages/gettext/gettext-0.14.1/gettext-error_print_progname.patch
@@ -0,0 +1,12 @@
+diff -ur gettext-0.14.6/gettext-tools/lib/error.h gettext-0.14.6-patched/gettext-tools/lib/error.h
+--- gettext-0.14.6/gettext-tools/lib/error.h 2005-05-20 16:03:42.000000000 -0500
++++ gettext-0.14.6-patched/gettext-tools/lib/error.h 2007-01-13 20:57:24.422168053 -0600
+@@ -50,7 +50,7 @@
+ /* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+-extern DLL_VARIABLE void (*error_print_progname) (void);
++void (*error_print_progname) (void);
+
+ /* This variable is incremented each time `error' is called. */
+ extern DLL_VARIABLE unsigned int error_message_count;
diff --git a/packages/gettext/gettext_0.14.1.bb b/packages/gettext/gettext_0.14.1.bb
index 906aba8d53..4e25c0e829 100644
--- a/packages/gettext/gettext_0.14.1.bb
+++ b/packages/gettext/gettext_0.14.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The GNU internationalization library."
HOMEPAGE = "http://www.gnu.org/software/gettext/gettext.html"
SECTION = "libs"
LICENSE = "GPL"
-PR = "r4"
+PR = "r5"
PROVIDES = "virtual/libintl"
SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
@@ -10,11 +10,14 @@ SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
file://fixchicken.patch;patch=1;pnum=1 \
file://getline.m4.patch;patch=1"
+SRC_URI_append_linux-uclibc = " file://gettext-error_print_progname.patch;patch=1"
+SRC_URI_append_linux-uclibcgnueabi = " file://gettext-error_print_progname.patch;patch=1"
+
PARALLEL_MAKE = ""
inherit autotools
-EXTRA_OECONF += "--without-lisp"
+EXTRA_OECONF += "--without-lisp --disable-csharp"
acpaths = '-I ${S}/autoconf-lib-link/m4/ \
-I ${S}/gettext-runtime/m4 \
-I ${S}/gettext-tools/m4'
diff --git a/packages/gift/gift_0.11.5.bb b/packages/gift/gift_0.11.5.bb
index 6446398311..23ba2378ca 100644
--- a/packages/gift/gift_0.11.5.bb
+++ b/packages/gift/gift_0.11.5.bb
@@ -1,9 +1,10 @@
SECTION = "console/network"
LICENSE = "GPL"
-DEPENDS = "libvorbis libogg"
+DEPENDS = "libvorbis libogg libtool"
DESCRIPTION = "giFT is a framework for bridging multiple \
backend peer-to-peer protocols and the user interface \
associated with them."
+PR="r1"
FILES_gift_append = " ${datadir}/giFT"
SRC_URI = "${SOURCEFORGE_MIRROR}/gift/gift-${PV}.tar.bz2"
diff --git a/packages/gimp/babl_svn.bb b/packages/gimp/babl_svn.bb
new file mode 100644
index 0000000000..a32d6ce31a
--- /dev/null
+++ b/packages/gimp/babl_svn.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Babl is a dynamic, any to any, pixel format conversion library."
+LICENSE = "LGPL"
+
+PV = "0.0.14+svn${SRCDATE}"
+PR = "r1"
+
+inherit gnome
+
+SRC_URI = "svn://svn.gnome.org/svn/${PN};module=trunk"
+
+S = "${WORKDIR}/trunk"
+
+do_stage() {
+ autotools_stage_all
+}
+
+
+FILES_${PN} += "${libdir}/babl-0.0/"
+FILES_${PN}-dbg = "${libdir}/babl-0.0/.debug/"
+
+
diff --git a/packages/gimp/gegl_svn.bb b/packages/gimp/gegl_svn.bb
new file mode 100644
index 0000000000..91d654d43a
--- /dev/null
+++ b/packages/gimp/gegl_svn.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "GEGL (Generic Graphics Library) is a graph based image processing framework."
+LICENSE = "LGPL"
+DEPENDS = "babl glib-2.0 gtk+ pango cairo expat zlib libpng jpeg virtual/libsdl"
+
+PV = "0.0.12+svn${SRCDATE}"
+
+inherit gnome
+
+SRC_URI = "svn://svn.gnome.org/svn/${PN};module=trunk"
+
+S = "${WORKDIR}/trunk"
+
+do_configure_prepend() {
+ sed -i -e s:tools\ docs:tools:g Makefile.am
+}
+
+FILES_${PN} += "${libdir}/gegl-1.0"
+FILES_${PN}-dbg += "${libdir}/gegl-1.0/.debug"
+
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/gimp/gimp_2.3.10.bb b/packages/gimp/gimp_2.3.10.bb
index eec0be6fd8..f43140eca4 100644
--- a/packages/gimp/gimp_2.3.10.bb
+++ b/packages/gimp/gimp_2.3.10.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The GIMP is the GNU Image Manipulation Program."
HOMEPAGE = "http://www.gimp.org"
SECTION = "x11/graphics"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
DEPENDS = "sed-native libart-lgpl gtk+ jpeg libpng libexif tiff"
@@ -11,6 +11,9 @@ SRC_URI = "ftp://ftp.gimp.org/pub/gimp/v2.3/gimp-${PV}.tar.bz2 \
inherit autotools pkgconfig
+FILES_gimp-dbg =+ "${libdir}/gimp/2.0/modules/.debug \
+ ${libdir}/gimp/2.0/plug-ins/.debug"
+
#Don't laugh, this just builds a threaded gimp
EXTRA_OECONF = " --disable-gtktest \
--disable-print \
@@ -22,3 +25,11 @@ do_configure_append() {
find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
}
+
+FILES_${PN} += "${datadir}/icons \
+ ${datadir}/mime-info \
+ ${datadir}/application-registry "
+
+FILES_${PN}-dbg += "${libdir}/gimp/2.0/plug-ins/.debug \
+ ${libdir}/gimp/2.0/modules/.debug"
+
diff --git a/packages/git/files/autotools.patch b/packages/git/files/autotools.patch
new file mode 100644
index 0000000000..0666118cde
--- /dev/null
+++ b/packages/git/files/autotools.patch
@@ -0,0 +1,26 @@
+Index: git-1.5.2.3/configure.ac
+===================================================================
+--- git-1.5.2.3.orig/configure.ac 2007-07-02 10:11:39.000000000 +0200
++++ git-1.5.2.3/configure.ac 2007-08-04 00:02:13.000000000 +0200
+@@ -235,7 +235,8 @@
+ else if (strcmp(buf, "12345"))
+ exit(2);]])],
+ [ac_cv_c_c99_format=yes],
+- [ac_cv_c_c99_format=no])
++ [ac_cv_c_c99_format=no],
++ [ac_cv_c_c99_format=yes])
+ ])
+ if test $ac_cv_c_c99_format = no; then
+ NO_C99_FORMAT=YesPlease
+Index: git-1.5.2.3/config.mak.in
+===================================================================
+--- git-1.5.2.3.orig/config.mak.in 2007-07-02 10:11:39.000000000 +0200
++++ git-1.5.2.3/config.mak.in 2007-08-04 00:07:04.000000000 +0200
+@@ -3,6 +3,7 @@
+
+ CC = @CC@
+ CFLAGS = @CFLAGS@
++LDFLAGS = @LDFLAGS@
+ AR = @AR@
+ TAR = @TAR@
+ #INSTALL = @INSTALL@ # needs install-sh or install.sh in sources
diff --git a/packages/git/git-native_1.4.4.2.bb b/packages/git/git-native_1.4.4.2.bb
deleted file mode 100644
index f91fd03ab1..0000000000
--- a/packages/git/git-native_1.4.4.2.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require git.inc
-inherit native
-DEPENDS = "openssl-native curl-native"
diff --git a/packages/git/git-native_1.5.2.3.bb b/packages/git/git-native_1.5.2.3.bb
new file mode 100644
index 0000000000..7ddfee0d08
--- /dev/null
+++ b/packages/git/git-native_1.5.2.3.bb
@@ -0,0 +1,6 @@
+
+inherit native
+require git_${PV}.bb
+
+DEPENDS = "openssl-native curl-native zlib-native expat-native"
+RDEPENDS = ""
diff --git a/packages/git/git.inc b/packages/git/git.inc
deleted file mode 100644
index 384dfaaeec..0000000000
--- a/packages/git/git.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "The git revision control system used by the Linux kernel developers"
-SECTION = "console/utils"
-LICENSE = "GPL"
-
-SRC_URI = "http://www.kernel.org/pub/software/scm/git/git-${PV}.tar.bz2"
-S = "${WORKDIR}/git-${PV}"
-
-do_install () {
- oe_runmake install prefix=${D} bindir=${D}${bindir} \
- template_dir=${D}${datadir}/git-core/templates \
- GIT_PYTHON_DIR=${D}${datadir}/git-core/python
-}
-
-FILES_${PN} += "${datadir}/git-core"
-
diff --git a/packages/git/git_1.4.4.2.bb b/packages/git/git_1.4.4.2.bb
deleted file mode 100644
index 37f71cfb04..0000000000
--- a/packages/git/git_1.4.4.2.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require git.inc
-DEPENDS = "openssl curl"
-RDEPENDS = "perl perl-module-file-path"
diff --git a/packages/git/git_1.5.2.3.bb b/packages/git/git_1.5.2.3.bb
new file mode 100644
index 0000000000..db43aa71fd
--- /dev/null
+++ b/packages/git/git_1.5.2.3.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "The git revision control system used by the Linux kernel developers"
+SECTION = "console/utils"
+LICENSE = "GPL"
+PR="r4"
+
+inherit autotools
+
+SRC_URI = "http://www.kernel.org/pub/software/scm/git/git-${PV}.tar.bz2 \
+ file://autotools.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/git-${PV}"
+
+DEPENDS = "openssl curl zlib expat"
+RDEPENDS = "perl perl-module-file-path cpio findutils sed"
+
+EXTRA_OEMAKE = "NO_TCLTK=1"
+
+do_install() {
+ oe_runmake install DESTDIR="${D}" bindir="${bindir}" \
+ template_dir="${datadir}/git-core/templates" \
+ GIT_PYTHON_DIR="${datadir}/git-core/python"
+}
+
+FILES_${PN} += "${datadir}/git-core"
+
diff --git a/packages/gizmod/gizmod_2.3.bb b/packages/gizmod/gizmod_2.3.bb
index c00293b64c..bc70aa0414 100644
--- a/packages/gizmod/gizmod_2.3.bb
+++ b/packages/gizmod/gizmod_2.3.bb
@@ -1,9 +1,8 @@
DESCRIPTION = "Gizmo Daemon"
HOMEPAGE = "http://gizmod.sourceforge.net"
LICENSE = "GPLv2"
-MAINTAINER = "Justin Patrin <papercrane@reversefold.com>"
SECTION = "console/multimedia"
-DEPENDS = "python virtual/libx11 xf86vidmodeproto"
+DEPENDS = "python virtual/libx11 xf86vidmodeproto alsa-lib"
SRC_URI = "${SOURCEFORGE_MIRROR}/gizmod/gizmod-${PV}.tar.bz2 \
file://disable-xmms.patch;patch=1 \
file://fix-python-configure.patch;patch=1 \
diff --git a/packages/ipkg/ipkg-0.99.153/.mtn2git_empty b/packages/gkrellm/gkrellm/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipkg/ipkg-0.99.153/.mtn2git_empty
+++ b/packages/gkrellm/gkrellm/.mtn2git_empty
diff --git a/packages/gkrellm/gkrellm/destdir.patch b/packages/gkrellm/gkrellm/destdir.patch
new file mode 100644
index 0000000000..3800fb7868
--- /dev/null
+++ b/packages/gkrellm/gkrellm/destdir.patch
@@ -0,0 +1,24 @@
+diff -Naur gkrellm-2.2.7-orig/server/Makefile gkrellm-2.2.7/server/Makefile
+--- gkrellm-2.2.7-orig/server/Makefile 2004-04-12 15:30:48.000000000 +0200
++++ gkrellm-2.2.7/server/Makefile 2007-04-06 12:48:08.000000000 +0200
+@@ -129,7 +129,7 @@
+
+ install:
+ $(INSTALL) -d -m $(INSTALLDIRMODE) $(SINSTALLDIR)
+- $(INSTALL) -c $(STRIP) -m $(BINMODE) gkrellmd $(SINSTALLDIR)/$(PACKAGE_D)
++ $(INSTALL) -c $(STRIP) -m $(BINMODE) gkrellmd $(SINSTALLDIR)
+ $(INSTALL) -d -m $(INCLUDEDIRMODE) $(INCLUDEDIR)/gkrellm2
+ $(INSTALL) -c -m $(INCLUDEMODE) $(GKRELLMD_INCLUDES) $(INCLUDEDIR)/gkrellm2
+ $(INSTALL) -d -m $(MANDIRMODE) $(SMANDIR)
+diff -Naur gkrellm-2.2.7-orig/src/Makefile gkrellm-2.2.7/src/Makefile
+--- gkrellm-2.2.7-orig/src/Makefile 2005-05-09 18:54:03.000000000 +0200
++++ gkrellm-2.2.7/src/Makefile 2007-04-06 12:48:24.000000000 +0200
+@@ -144,7 +144,7 @@
+
+ install:
+ $(INSTALL) -d -m $(INSTALLDIRMODE) $(INSTALLDIR)
+- $(INSTALL) -c $(STRIP) -m $(BINMODE) gkrellm $(INSTALLDIR)/$(PACKAGE)
++ $(INSTALL) -c $(STRIP) -m $(BINMODE) gkrellm $(INSTALLDIR)
+ $(INSTALL) -d -m $(INCLUDEDIRMODE) $(INCLUDEDIR)/gkrellm2
+ $(INSTALL) -c -m $(INCLUDEMODE) $(GKRELLM_INCLUDES) $(INCLUDEDIR)/gkrellm2
+ $(INSTALL) -d -m $(MANDIRMODE) $(MANDIR)
diff --git a/packages/gkrellm/gkrellm_2.2.10.bb b/packages/gkrellm/gkrellm_2.2.10.bb
new file mode 100644
index 0000000000..ca13f4732e
--- /dev/null
+++ b/packages/gkrellm/gkrellm_2.2.10.bb
@@ -0,0 +1,24 @@
+SECTION = "x11/utils"
+DESCRIPTION = "GKrellM is a GTK-based stacked monitor program."
+LICENSE = "GPL"
+DEPENDS = "gtk+ glib-2.0 libsm libice"
+
+SRC_URI = "http://members.dslextreme.com/users/billw/gkrellm/gkrellm-${PV}.tar.bz2 \
+ file://destdir.patch;patch=1"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE = "'glib12=0' 'STRIP=/bin/true'"
+export LINK_FLAGS = "${LDFLAGS}"
+export SMC_LIBS = "-lSM -lICE"
+
+do_install () {
+ oe_runmake 'INSTALLDIR=${D}${bindir}' \
+ 'SINSTALLDIR=${D}${bindir}' \
+ 'MANDIR=${D}${mandir}/man1' \
+ 'SMANDIR=${D}${mandir}/man1' \
+ 'INCLUDEDIR=${D}${includedir}' \
+ 'PKGCONFIGDIR=${D}${libdir}/pkgconfig' \
+ 'LOCALEDIR=${D}${datadir}/locale' \
+ install
+}
diff --git a/packages/gkrellm/gkrellm_2.2.7.bb b/packages/gkrellm/gkrellm_2.2.7.bb
deleted file mode 100644
index 5fd83e6923..0000000000
--- a/packages/gkrellm/gkrellm_2.2.7.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SECTION = "x11/utils"
-DESCRIPTION = "GKrellM is a GTK-based stacked monitor program."
-LICENSE = "GPL"
-DEPENDS = "gtk+ glib-2.0 libsm libice"
-
-SRC_URI = "http://members.dslextreme.com/users/billw/gkrellm/gkrellm-${PV}.tar.bz2"
-
-inherit pkgconfig
-
-EXTRA_OEMAKE = "'glib12=0' 'STRIP=/bin/true'"
-export LINK_FLAGS = "${LDFLAGS}"
-export SMC_LIBS = "-lSM -lICE"
-
-do_install () {
- oe_runmake 'INSTALLDIR=${D}${bindir}' \
- 'SINSTALLDIR=${D}${bindir}' \
- 'MANDIR=${D}${mandir}/man1' \
- 'SMANDIR=${D}${mandir}/man1' \
- 'INCLUDEDIR=${D}${includedir}' \
- 'PKGCONFIGDIR=${D}${libdir}/pkgconfig' \
- 'LOCALEDIR=${D}${datadir}/locale' \
- install
-}
diff --git a/packages/glib-2.0/glib-2.0-2.12.0/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.0/configure-libtool.patch
deleted file mode 100644
index 478ef132af..0000000000
--- a/packages/glib-2.0/glib-2.0-2.12.0/configure-libtool.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- glib-2.12.0/configure.in.orig 2006-07-07 09:21:56.000000000 +0100
-+++ glib-2.12.0/configure.in 2006-07-07 09:25:44.000000000 +0100
-@@ -1169,7 +1169,7 @@
- dnl No use for this on Win32
- G_MODULE_LDFLAGS=
- else
-- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- fi
- dnl G_MODULE_IMPL= don't reset, so cmd-line can override
- G_MODULE_NEED_USCORE=0
-@@ -1234,7 +1234,7 @@
- LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
- dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
- echo "void glib_plugin_test(void) { }" > plugin.c
-- ${SHELL} ./libtool --mode=compile ${CC} -shared \
-+ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
- -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
- AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
- glib_cv_rtldglobal_broken,[
diff --git a/packages/glib-2.0/glib-2.0-2.12.1/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.1/configure-libtool.patch
deleted file mode 100644
index 478ef132af..0000000000
--- a/packages/glib-2.0/glib-2.0-2.12.1/configure-libtool.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- glib-2.12.0/configure.in.orig 2006-07-07 09:21:56.000000000 +0100
-+++ glib-2.12.0/configure.in 2006-07-07 09:25:44.000000000 +0100
-@@ -1169,7 +1169,7 @@
- dnl No use for this on Win32
- G_MODULE_LDFLAGS=
- else
-- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- fi
- dnl G_MODULE_IMPL= don't reset, so cmd-line can override
- G_MODULE_NEED_USCORE=0
-@@ -1234,7 +1234,7 @@
- LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
- dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
- echo "void glib_plugin_test(void) { }" > plugin.c
-- ${SHELL} ./libtool --mode=compile ${CC} -shared \
-+ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
- -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
- AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
- glib_cv_rtldglobal_broken,[
diff --git a/packages/ipkg/ipkg-0.99.155/.mtn2git_empty b/packages/glib-2.0/glib-2.0-2.12.10/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipkg/ipkg-0.99.155/.mtn2git_empty
+++ b/packages/glib-2.0/glib-2.0-2.12.10/.mtn2git_empty
diff --git a/packages/glib-2.0/glib-2.0-2.12.10/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.10/configure-libtool.patch
new file mode 100644
index 0000000000..50ffc628db
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0-2.12.10/configure-libtool.patch
@@ -0,0 +1,20 @@
+--- /tmp/configure.in 2007-02-04 12:07:05.000000000 +0100
++++ glib-2.12.9/configure.in 2007-02-04 12:08:04.655251000 +0100
+@@ -1174,7 +1174,7 @@
+ G_MODULE_LDFLAGS=
+ else
+ export SED
+- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
++ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+ fi
+ dnl G_MODULE_IMPL= don't reset, so cmd-line can override
+ G_MODULE_NEED_USCORE=0
+@@ -1239,7 +1239,7 @@
+ LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
+ dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
+ echo "void glib_plugin_test(void) { }" > plugin.c
+- ${SHELL} ./libtool --mode=compile ${CC} -shared \
++ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
+ -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
+ AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
+ glib_cv_rtldglobal_broken,[
diff --git a/packages/ipsec-tools/ipsec-tools-0.6.6/.mtn2git_empty b/packages/glib-2.0/glib-2.0-2.12.11/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ipsec-tools/ipsec-tools-0.6.6/.mtn2git_empty
+++ b/packages/glib-2.0/glib-2.0-2.12.11/.mtn2git_empty
diff --git a/packages/glib-2.0/glib-2.0-2.12.11/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.11/configure-libtool.patch
new file mode 100644
index 0000000000..50ffc628db
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0-2.12.11/configure-libtool.patch
@@ -0,0 +1,20 @@
+--- /tmp/configure.in 2007-02-04 12:07:05.000000000 +0100
++++ glib-2.12.9/configure.in 2007-02-04 12:08:04.655251000 +0100
+@@ -1174,7 +1174,7 @@
+ G_MODULE_LDFLAGS=
+ else
+ export SED
+- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
++ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+ fi
+ dnl G_MODULE_IMPL= don't reset, so cmd-line can override
+ G_MODULE_NEED_USCORE=0
+@@ -1239,7 +1239,7 @@
+ LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
+ dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
+ echo "void glib_plugin_test(void) { }" > plugin.c
+- ${SHELL} ./libtool --mode=compile ${CC} -shared \
++ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
+ -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
+ AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
+ glib_cv_rtldglobal_broken,[
diff --git a/packages/ixp4xx/ixp4xx-npe-native-2.3/.mtn2git_empty b/packages/glib-2.0/glib-2.0-2.12.12/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ixp4xx/ixp4xx-npe-native-2.3/.mtn2git_empty
+++ b/packages/glib-2.0/glib-2.0-2.12.12/.mtn2git_empty
diff --git a/packages/glib-2.0/glib-2.0-2.12.12/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.12/configure-libtool.patch
new file mode 100644
index 0000000000..50ffc628db
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0-2.12.12/configure-libtool.patch
@@ -0,0 +1,20 @@
+--- /tmp/configure.in 2007-02-04 12:07:05.000000000 +0100
++++ glib-2.12.9/configure.in 2007-02-04 12:08:04.655251000 +0100
+@@ -1174,7 +1174,7 @@
+ G_MODULE_LDFLAGS=
+ else
+ export SED
+- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
++ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+ fi
+ dnl G_MODULE_IMPL= don't reset, so cmd-line can override
+ G_MODULE_NEED_USCORE=0
+@@ -1239,7 +1239,7 @@
+ LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
+ dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
+ echo "void glib_plugin_test(void) { }" > plugin.c
+- ${SHELL} ./libtool --mode=compile ${CC} -shared \
++ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
+ -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
+ AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
+ glib_cv_rtldglobal_broken,[
diff --git a/packages/glib-2.0/glib-2.0-2.12.3/configure-libtool.patch b/packages/glib-2.0/glib-2.0-2.12.3/configure-libtool.patch
deleted file mode 100644
index 478ef132af..0000000000
--- a/packages/glib-2.0/glib-2.0-2.12.3/configure-libtool.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- glib-2.12.0/configure.in.orig 2006-07-07 09:21:56.000000000 +0100
-+++ glib-2.12.0/configure.in 2006-07-07 09:25:44.000000000 +0100
-@@ -1169,7 +1169,7 @@
- dnl No use for this on Win32
- G_MODULE_LDFLAGS=
- else
-- G_MODULE_LDFLAGS=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+ G_MODULE_LDFLAGS=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- fi
- dnl G_MODULE_IMPL= don't reset, so cmd-line can override
- G_MODULE_NEED_USCORE=0
-@@ -1234,7 +1234,7 @@
- LDFLAGS="$LDFLAGS $G_MODULE_LDFLAGS"
- dnl *** check for OSF1/5.0 RTLD_GLOBAL brokenness
- echo "void glib_plugin_test(void) { }" > plugin.c
-- ${SHELL} ./libtool --mode=compile ${CC} -shared \
-+ ${SHELL} ./$host_alias-libtool --mode=compile ${CC} -shared \
- -export-dynamic -o plugin.o plugin.c 2>&1 >/dev/null
- AC_CACHE_CHECK([for RTLD_GLOBAL brokenness],
- glib_cv_rtldglobal_broken,[
diff --git a/packages/glib-2.0/glib-2.0_2.12.10.bb b/packages/glib-2.0/glib-2.0_2.12.10.bb
new file mode 100644
index 0000000000..4d8e59b355
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0_2.12.10.bb
@@ -0,0 +1,6 @@
+require glib.inc
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.12/glib-${PV}.tar.bz2 \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1"
+
diff --git a/packages/glib-2.0/glib-2.0_2.12.11.bb b/packages/glib-2.0/glib-2.0_2.12.11.bb
new file mode 100644
index 0000000000..4d8e59b355
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0_2.12.11.bb
@@ -0,0 +1,6 @@
+require glib.inc
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.12/glib-${PV}.tar.bz2 \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1"
+
diff --git a/packages/glib-2.0/glib-2.0_2.12.12.bb b/packages/glib-2.0/glib-2.0_2.12.12.bb
new file mode 100644
index 0000000000..2e5259073a
--- /dev/null
+++ b/packages/glib-2.0/glib-2.0_2.12.12.bb
@@ -0,0 +1,8 @@
+require glib.inc
+
+PR = "r2"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glib/2.12/glib-${PV}.tar.bz2 \
+ file://glibconfig-sysdefs.h \
+ file://configure-libtool.patch;patch=1"
+
diff --git a/packages/glib-2.0/glib.inc b/packages/glib-2.0/glib.inc
index 6a33291d52..3fa6fe26ab 100644
--- a/packages/glib-2.0/glib.inc
+++ b/packages/glib-2.0/glib.inc
@@ -8,12 +8,19 @@ SECTION = "libs"
PRIORITY = "optional"
DEPENDS += "glib-2.0-native gtk-doc"
DEPENDS += "virtual/libiconv virtual/libintl"
-PACKAGES =+ "glib-2.0-utils "
+PACKAGES =+ " glib-2.0-utils "
+
+PR = "r2"
LEAD_SONAME = "libglib-2.0.*"
FILES_glib-2.0-utils = "${bindir}/*"
+FILES_${PN} = "${libdir}/lib*so.*"
+FILES_${PN}-dev += "${libdir}/glib-2.0 ${datadir}/glib-2.0"
+
+EXTRA_OECONF = "--disable-debug "
-EXTRA_OECONF = "--disable-debug"
+# Add and entry for your favourite arch if your (g)libc has a sane printf
+EXTRA_OECONF_append_glibc_arm = " --enable-included-printf=no "
S = "${WORKDIR}/glib-${PV}"
diff --git a/packages/glibc/eglibc-initial_svn.bb b/packages/glibc/eglibc-initial_svn.bb
new file mode 100644
index 0000000000..02ba4c6273
--- /dev/null
+++ b/packages/glibc/eglibc-initial_svn.bb
@@ -0,0 +1,46 @@
+require eglibc_${PV}.bb
+
+DEPENDS = "linux-libc-headers"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-2.4', '${FILE_DIRNAME}/glibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+
+PACKAGES = ""
+
+do_configure () {
+ sed -ie 's,{ (exit 1); exit 1; }; },{ (exit 0); }; },g' ${S}/configure
+ chmod +x ${S}/configure
+ unset CFLAGS
+ CC="${BUILD_CC}" CPP="${BUILD_CPP}" LD="${BUILD_LD}" ${S}/configure --host=${TARGET_SYS} --build=${BUILD_SYS} \
+ --without-cvs --disable-sanity-checks \
+ --with-headers=${CROSS_DIR}/${TARGET_SYS}/include \
+ --enable-hacker-mode
+ if grep -q GLIBC_2.3 ${S}/ChangeLog; then
+ # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c, which fails without a real cross-compiler.
+ # Fortunately, we don't need errlist-compat.c, since we just need .h files,
+ # so work around this by creating a fake errlist-compat.c and satisfying its dependencies.
+ # Another workaround might be to tell configure to not use any cross options to $(CC).
+ # The real fix would be to get install-headers to not generate errlist-compat.c.
+ make sysdeps/gnu/errlist.c
+ mkdir -p stdio-common
+ touch stdio-common/errlist-compat.c
+ fi
+}
+
+do_compile () {
+ :
+}
+
+do_stage () {
+ oe_runmake cross-compiling=yes install_root=${CROSS_DIR}/${TARGET_SYS} prefix="" install-headers
+
+ # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
+ # so do them by hand. We can tolerate an empty stubs.h for the moment.
+ # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/include/gnu
+ touch ${CROSS_DIR}/${TARGET_SYS}/include/gnu/stubs.h
+ cp ${S}/include/features.h ${CROSS_DIR}/${TARGET_SYS}/include/features.h
+}
+
+do_install () {
+ :
+}
diff --git a/packages/glibc/eglibc-intermediate_svn.bb b/packages/glibc/eglibc-intermediate_svn.bb
new file mode 100644
index 0000000000..c26f649031
--- /dev/null
+++ b/packages/glibc/eglibc-intermediate_svn.bb
@@ -0,0 +1,19 @@
+require eglibc_${PV}.bb
+
+do_install () {
+ :
+}
+
+# gcc uses -Werror which break on a "you have no thumb interwork" _warning_
+do_configure_prepend() {
+ sed -i s:-Werror:: ${S}/configure
+}
+
+
+
+PACKAGES = ""
+PACKAGES_DYNAMIC = ""
+PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
+DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers"
+GLIBC_ADDONS = "nptl,ports"
+GLIBC_EXTRA_OECONF = ""
diff --git a/packages/glibc/eglibc-package.bbclass b/packages/glibc/eglibc-package.bbclass
new file mode 100644
index 0000000000..0f88227cdf
--- /dev/null
+++ b/packages/glibc/eglibc-package.bbclass
@@ -0,0 +1,319 @@
+#
+# For now, we will skip building of a gcc package if it is a uclibc one
+# and our build is not a uclibc one, and we skip a eglibc one if our build
+# is a uclibc build.
+#
+# See the note in gcc/gcc_3.4.0.oe
+#
+
+python __anonymous () {
+ import bb, re
+ uc_os = (re.match('.*uclibc*', bb.data.getVar('TARGET_OS', d, 1)) != None)
+ if uc_os:
+ raise bb.parse.SkipPackage("incompatible with target %s" %
+ bb.data.getVar('TARGET_OS', d, 1))
+}
+
+
+# Binary locales are generated at build time if ENABLE_BINARY_LOCALE_GENERATION
+# is set. The idea is to avoid running localedef on the target (at first boot)
+# to decrease initial boot time and avoid localedef being killed by the OOM
+# killer which used to effectively break i18n on machines with < 128MB RAM.
+
+# default to disabled until qemu works for everyone
+ENABLE_BINARY_LOCALE_GENERATION ?= "0"
+
+# BINARY_LOCALE_ARCHES is a space separated list of regular expressions
+BINARY_LOCALE_ARCHES ?= "arm.*"
+
+PACKAGES = "eglibc-dbg eglibc catchsegv sln nscd ldd localedef eglibc-utils eglibc-dev eglibc-doc eglibc-locale libsegfault eglibc-extra-nss eglibc-thread-db eglibc-pcprofile"
+PACKAGES_DYNAMIC = "eglibc-gconv-* eglibc-charmap-* eglibc-localedata-*"
+
+libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*"
+
+FILES_${PN} = "${sysconfdir} ${libc_baselibs} /sbin/ldconfig ${libexecdir}/* ${datadir}/zoneinfo"
+FILES_ldd = "${bindir}/ldd"
+FILES_libsegfault = "/lib/libSegFault*"
+FILES_eglibc-extra-nss = "/lib/libnss*"
+FILES_sln = "/sbin/sln"
+FILES_eglibc-dev_append = " ${libdir}/*.o ${bindir}/rpcgen"
+FILES_nscd = "${sbindir}/nscd*"
+FILES_eglibc-utils = "${bindir}/* ${sbindir}/*"
+FILES_eglibc-gconv = "${libdir}/gconv/*"
+FILES_${PN}-dbg += "${libexecdir}/getconf/.debug ${libdir}/gconv/.debug"
+FILES_catchsegv = "${bindir}/catchsegv"
+RDEPENDS_catchsegv = "libsegfault"
+FILES_eglibc-pcprofile = "/lib/libpcprofile.so"
+FILES_eglibc-thread-db = "/lib/libthread_db*"
+FILES_localedef = "${bindir}/localedef"
+RPROVIDES_eglibc-dev += "libc-dev"
+
+DESCRIPTION_sln = "eglibc: create symbolic links between files"
+DESCRIPTION_nscd = "eglibc: name service cache daemon for passwd, group, and hosts"
+DESCRIPTION_eglibc-extra-nss = "eglibc: nis, nisplus and hesiod search services"
+DESCRIPTION_ldd = "eglibc: print shared library dependencies"
+DESCRIPTION_localedef = "eglibc: compile locale definition files"
+DESCRIPTION_eglibc-utils = "eglibc: misc utilities like iconf, local, gencat, tzselect, rpcinfo, ..."
+
+def get_eglibc_fpu_setting(bb, d):
+ if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]:
+ return "--without-fp"
+ return ""
+
+EXTRA_OECONF += "${@get_eglibc_fpu_setting(bb, d)}"
+
+OVERRIDES_append = ":${TARGET_ARCH}-${TARGET_OS}"
+
+do_install() {
+ oe_runmake install_root=${D} install
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ install -m 0644 ${S}/sunrpc/rpcsvc/$h ${D}/${includedir}/rpcsvc/
+ done
+ install -m 0644 ${WORKDIR}/etc/ld.so.conf ${D}/${sysconfdir}/
+ install -d ${D}${libdir}/locale
+ make -f ${WORKDIR}/generate-supported.mk IN="${S}/localedata/SUPPORTED" OUT="${WORKDIR}/SUPPORTED"
+ # get rid of some broken files...
+ for i in ${GLIBC_BROKEN_LOCALES}; do
+ grep -v $i ${WORKDIR}/SUPPORTED > ${WORKDIR}/SUPPORTED.tmp
+ mv ${WORKDIR}/SUPPORTED.tmp ${WORKDIR}/SUPPORTED
+ done
+ rm -f ${D}/etc/rpc
+}
+
+TMP_LOCALE="/tmp/locale${libdir}/locale"
+
+locale_base_postinst() {
+#!/bin/sh
+
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+rm -rf ${TMP_LOCALE}
+mkdir -p ${TMP_LOCALE}
+if [ -f ${libdir}/locale/locale-archive ]; then
+ cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
+fi
+localedef --inputfile=${datadir}/i18n/locales/%s --charmap=%s --prefix=/tmp/locale %s
+mkdir -p ${libdir}/locale/
+mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
+rm -rf ${TMP_LOCALE}
+}
+
+locale_base_postrm() {
+#!/bin/sh
+
+rm -rf ${TMP_LOCALE}
+mkdir -p ${TMP_LOCALE}
+if [ -f ${libdir}/locale/locale-archive ]; then
+ cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
+fi
+localedef --delete-from-archive --inputfile=${datadir}/locales/%s --charmap=%s --prefix=/tmp/locale %s
+mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
+rm -rf ${TMP_LOCALE}
+}
+
+python __anonymous () {
+ enabled = bb.data.getVar("ENABLE_BINARY_LOCALE_GENERATION", d, 1)
+
+ if enabled and int(enabled):
+ import re
+
+ target_arch = bb.data.getVar("TARGET_ARCH", d, 1)
+ binary_arches = bb.data.getVar("BINARY_LOCALE_ARCHES", d, 1) or ""
+
+ for regexp in binary_arches.split(" "):
+ r = re.compile(regexp)
+
+ if r.match(target_arch):
+ depends = bb.data.getVar("DEPENDS", d, 1)
+ depends = "%s qemu-native" % depends
+ bb.data.setVar("DEPENDS", depends, d)
+ bb.data.setVar("GLIBC_INTERNAL_USE_BINARY_LOCALE", "1", d)
+ break
+}
+
+do_prep_locale_tree() {
+ treedir=${WORKDIR}/locale-tree
+ rm -rf $treedir
+ mkdir -p $treedir/bin $treedir/lib $treedir/${datadir} $treedir/${libdir}/locale
+ cp -a ${D}${datadir}/i18n $treedir/${datadir}/i18n
+ # unzip to avoid parsing errors
+ for i in $treedir/${datadir}/i18n/charmaps/*gz; do
+ gunzip $i
+ done
+ ls ${D}/lib/* | xargs -iBLAH cp -a BLAH $treedir/lib
+ if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* ]; then
+ cp -a ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* $treedir/lib
+ fi
+ install -m 0755 ${D}${bindir}/localedef $treedir/bin
+}
+
+do_collect_bins_from_locale_tree() {
+ treedir=${WORKDIR}/locale-tree
+
+ mkdir -p ${D}${libdir}
+ cp -a $treedir/${libdir}/locale ${D}${libdir}
+}
+
+python package_do_split_gconvs () {
+ import os, re
+ if (bb.data.getVar('PACKAGE_NO_GCONV', d, 1) == '1'):
+ bb.note("package requested not splitting gconvs")
+ return
+
+ if not bb.data.getVar('PACKAGES', d, 1):
+ return
+
+ libdir = bb.data.getVar('libdir', d, 1)
+ if not libdir:
+ bb.error("libdir not defined")
+ return
+ datadir = bb.data.getVar('datadir', d, 1)
+ if not datadir:
+ bb.error("datadir not defined")
+ return
+
+ gconv_libdir = base_path_join(libdir, "gconv")
+ charmap_dir = base_path_join(datadir, "i18n", "charmaps")
+ locales_dir = base_path_join(datadir, "i18n", "locales")
+ binary_locales_dir = base_path_join(libdir, "locale")
+
+ do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='eglibc-gconv-%s', description='gconv module for character set %s', extra_depends='eglibc-gconv')
+
+ do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='eglibc-charmap-%s', description='character map for %s encoding', extra_depends='')
+
+ def calc_locale_deps(fn, pkg, file_regex, output_pattern, group):
+ deps = []
+ f = open(fn, "r")
+ c_re = re.compile('^copy "(.*)"')
+ i_re = re.compile('^include "(\w+)".*')
+ for l in f.readlines():
+ m = c_re.match(l) or i_re.match(l)
+ if m:
+ dp = legitimize_package_name('eglibc-localedata-%s' % m.group(1))
+ if not dp in deps:
+ deps.append(dp)
+ f.close()
+ if deps != []:
+ bb.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d)
+
+ do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='eglibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps, extra_depends='')
+ bb.data.setVar('PACKAGES', bb.data.getVar('PACKAGES', d) + ' eglibc-gconv', d)
+
+ supported = bb.data.getVar('GLIBC_GENERATE_LOCALES', d, 1)
+ if not supported or supported == "all":
+ f = open(base_path_join(bb.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r")
+ supported = f.readlines()
+ f.close()
+ else:
+ supported = supported.split()
+ supported = map(lambda s:s.replace(".", " ") + "\n", supported)
+
+ dot_re = re.compile("(.*)\.(.*)")
+
+ # Collate the locales by base and encoding
+ encodings = {}
+ for l in supported:
+ l = l[:-1]
+ (locale, charset) = l.split(" ")
+ m = dot_re.match(locale)
+ if m:
+ locale = m.group(1)
+ if not encodings.has_key(locale):
+ encodings[locale] = []
+ encodings[locale].append(charset)
+
+ def output_locale_source(name, locale, encoding):
+ pkgname = 'locale-base-' + legitimize_package_name(name)
+
+ bb.data.setVar('RDEPENDS_%s' % pkgname, 'localedef eglibc-localedata-%s eglibc-charmap-%s' % (legitimize_package_name(locale), legitimize_package_name(encoding)), d)
+ rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
+ m = re.match("(.*)_(.*)", name)
+ if m:
+ rprovides += ' virtual-locale-%s' % m.group(1)
+ bb.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d)
+ bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d)
+ bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
+ bb.data.setVar('pkg_postinst_%s' % pkgname, bb.data.getVar('locale_base_postinst', d, 1) % (locale, encoding, locale), d)
+ bb.data.setVar('pkg_postrm_%s' % pkgname, bb.data.getVar('locale_base_postrm', d, 1) % (locale, encoding, locale), d)
+
+ def output_locale_binary(name, locale, encoding):
+ target_arch = bb.data.getVar("TARGET_ARCH", d, 1)
+ qemu = "qemu-%s -r 2.6.16" % target_arch
+ pkgname = 'locale-base-' + legitimize_package_name(name)
+ m = re.match("(.*)\.(.*)", name)
+ if m:
+ eglibc_name = "%s.%s" % (m.group(1), m.group(2).lower().replace("-",""))
+ else:
+ eglibc_name = name
+ bb.data.setVar('RDEPENDS_%s' % pkgname, legitimize_package_name('eglibc-binary-localedata-%s' % eglibc_name), d)
+ rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
+ m = re.match("(.*)_(.*)", name)
+ if m:
+ rprovides += ' virtual-locale-%s' % m.group(1)
+ bb.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d)
+ bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
+ bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d)
+
+ treedir = base_path_join(bb.data.getVar("WORKDIR", d, 1), "locale-tree")
+ path = bb.data.getVar("PATH", d, 1)
+ i18npath = base_path_join(treedir, datadir, "i18n")
+
+ localedef_opts = "--force --old-style --no-archive --prefix=%s --inputfile=%s/i18n/locales/%s --charmap=%s %s" % (treedir, datadir, locale, encoding, name)
+ cmd = "PATH=\"%s\" I18NPATH=\"%s\" %s -L %s %s/bin/localedef %s" % (path, i18npath, qemu, treedir, treedir, localedef_opts)
+ bb.note("generating locale %s (%s)" % (locale, encoding))
+ if os.system(cmd):
+ raise bb.build.FuncFailed("localedef returned an error (command was %s)." % cmd)
+
+ def output_locale(name, locale, encoding):
+ use_bin = bb.data.getVar("GLIBC_INTERNAL_USE_BINARY_LOCALE", d, 1)
+ if use_bin:
+ output_locale_binary(name, locale, encoding)
+ else:
+ output_locale_source(name, locale, encoding)
+
+ use_bin = bb.data.getVar("GLIBC_INTERNAL_USE_BINARY_LOCALE", d, 1)
+ if use_bin:
+ bb.note("preparing tree for binary locale generation")
+ bb.build.exec_func("do_prep_locale_tree", d)
+
+ # Reshuffle names so that UTF-8 is preferred over other encodings
+ non_utf8 = []
+ for l in encodings.keys():
+ if len(encodings[l]) == 1:
+ output_locale(l, l, encodings[l][0])
+ if encodings[l][0] != "UTF-8":
+ non_utf8.append(l)
+ else:
+ if "UTF-8" in encodings[l]:
+ output_locale(l, l, "UTF-8")
+ encodings[l].remove("UTF-8")
+ else:
+ non_utf8.append(l)
+ for e in encodings[l]:
+ output_locale('%s.%s' % (l, e), l, e)
+
+ if non_utf8 != []:
+ bb.note("the following locales are supported only in legacy encodings:")
+ bb.note(" " + " ".join(non_utf8))
+
+ use_bin = bb.data.getVar("GLIBC_INTERNAL_USE_BINARY_LOCALE", d, 1)
+ if use_bin:
+ bb.note("collecting binary locales from locale tree")
+ bb.build.exec_func("do_collect_bins_from_locale_tree", d)
+ do_split_packages(d, binary_locales_dir, file_regex='(.*)', output_pattern='eglibc-binary-localedata-%s', description='binary locale definition for %s', extra_depends='', allow_dirs=True)
+ else:
+ bb.note("generation of binary locales disabled. this may break i18n!")
+
+}
+
+# We want to do this indirection so that we can safely 'return'
+# from the called function even though we're prepending
+python populate_packages_prepend () {
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_eglibc', 'libc6', d)
+ bb.data.setVar('PKG_eglibc-dev', 'libc6-dev', d)
+ bb.build.exec_func('package_do_split_gconvs', d)
+}
diff --git a/packages/kismet/kismet-2006-04-R1/.mtn2git_empty b/packages/glibc/eglibc-svn/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/kismet/kismet-2006-04-R1/.mtn2git_empty
+++ b/packages/glibc/eglibc-svn/.mtn2git_empty
diff --git a/packages/glibc/eglibc-svn/export-fcntl2.patch b/packages/glibc/eglibc-svn/export-fcntl2.patch
new file mode 100644
index 0000000000..0bf6c57852
--- /dev/null
+++ b/packages/glibc/eglibc-svn/export-fcntl2.patch
@@ -0,0 +1,11 @@
+--- libc/io/Makefile.orig 2007-08-07 17:41:33.000000000 -0700
++++ libc/io/Makefile 2007-08-07 17:42:25.000000000 -0700
+@@ -23,7 +23,7 @@ subdir := io
+
+ headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \
+ sys/statvfs.h bits/statvfs.h fcntl.h sys/fcntl.h bits/fcntl.h \
+- poll.h sys/poll.h bits/poll.h \
++ poll.h sys/poll.h bits/poll.h bits/fcntl2.h \
+ utime.h ftw.h fts.h sys/sendfile.h
+
+ routines := \
diff --git a/packages/glibc/eglibc_svn.bb b/packages/glibc/eglibc_svn.bb
new file mode 100644
index 0000000000..21079bb895
--- /dev/null
+++ b/packages/glibc/eglibc_svn.bb
@@ -0,0 +1,135 @@
+require glibc.inc
+
+DEFAULT_PREFERENCE = "-1"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/eglibc-svn"
+PV = "2.6+svn${SRCDATE}"
+SRC_URI = "svn://svn.eglibc.org;module=trunk \
+ file://export-fcntl2.patch;patch=1 \
+ file://etc/ld.so.conf \
+ file://generate-supported.mk"
+S = "${WORKDIR}/trunk/libc"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
+#PACKAGES_DYNAMIC = "libc6*"
+#RPROVIDES_${PN}-dev = "libc6-dev"
+
+# the -isystem in bitbake.conf screws up glibc do_stage
+BUILD_CPPFLAGS = "-I${STAGING_DIR}/${BUILD_SYS}/include"
+TARGET_CPPFLAGS = "-I${STAGING_DIR}/${TARGET_SYS}/include"
+
+GLIBC_ADDONS ?= "ports,nptl,libidn"
+
+GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
+
+#
+# For now, we will skip building of a gcc package if it is a uclibc one
+# and our build is not a uclibc one, and we skip a glibc one if our build
+# is a uclibc build.
+#
+# See the note in gcc/gcc_3.4.0.oe
+#
+
+python __anonymous () {
+ import bb, re
+ uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
+ if uc_os:
+ raise bb.parse.SkipPackage("incompatible with target %s" %
+ bb.data.getVar('TARGET_OS', d, 1))
+}
+
+
+EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
+ --without-cvs --disable-profile --disable-debug --without-gd \
+ --enable-clocale=gnu \
+ --enable-add-ons=${GLIBC_ADDONS} \
+ --with-headers=${STAGING_INCDIR} \
+ --without-selinux \
+ ${GLIBC_EXTRA_OECONF}"
+
+EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
+
+do_configure_prepend() {
+ if test -d ${WORKDIR}/trunk/ports ; then
+ mv ${WORKDIR}/trunk/ports ${S}/
+ fi
+}
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
+# version check and doesn't really help with anything
+ if [ -z "`which rpcgen`" ]; then
+ echo "rpcgen not found. Install glibc-devel."
+ exit 1
+ fi
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+ find ${WORKDIR} -name "configure" | xargs touch
+ CPPFLAGS="" oe_runconf
+}
+
+rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
+ yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
+ rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
+
+do_compile () {
+ # -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
+ unset LDFLAGS
+ base_do_compile
+ (
+ cd ${S}/sunrpc/rpcsvc
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
+ done
+ )
+}
+
+do_stage() {
+ rm -f ${STAGING_LIBDIR}/libc.so.6
+ oe_runmake 'install_root=${STAGING_DIR}/${HOST_SYS}' \
+ 'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+ '${STAGING_LIBDIR}/libc.so.6' \
+ install-headers install-lib
+
+ install -d ${STAGING_INCDIR}/gnu \
+ ${STAGING_INCDIR}/bits \
+ ${STAGING_INCDIR}/rpcsvc
+ install -m 0644 ${S}/include/gnu/stubs.h ${STAGING_INCDIR}/gnu/
+ install -m 0644 ${B}/bits/stdio_lim.h ${STAGING_INCDIR}/bits/
+ install -m 0644 misc/syscall-list.h ${STAGING_INCDIR}/bits/syscall.h
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ install -m 0644 ${S}/sunrpc/rpcsvc/$h ${STAGING_INCDIR}/rpcsvc/
+ done
+ for i in libc.a libc_pic.a libc_nonshared.a; do
+ install -m 0644 ${B}/$i ${STAGING_LIBDIR}/ || die "failed to install $i"
+ done
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${STAGING_LIBDIR}/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${STAGING_LIBDIR}/libc.so
+
+ rm -f ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6
+ oe_runmake 'install_root=${CROSS_DIR}/${TARGET_SYS}' \
+ 'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+ '${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6' \
+ install-headers install-lib
+
+ install -d ${CROSS_DIR}/${TARGET_SYS}/include/gnu \
+ ${CROSS_DIR}/${TARGET_SYS}/include/bits \
+ ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc
+ install -m 0644 ${S}/include/gnu/stubs.h ${CROSS_DIR}/${TARGET_SYS}/include/gnu/
+ install -m 0644 ${B}/bits/stdio_lim.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/
+ install -m 0644 misc/syscall-list.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/syscall.h
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ install -m 0644 ${S}/sunrpc/rpcsvc/$h ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc/
+ done
+
+ for i in libc.a libc_pic.a libc_nonshared.a; do
+ install -m 0644 ${B}/$i ${CROSS_DIR}/${TARGET_SYS}/lib/ || die "failed to install $i"
+ done
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so
+}
+
+require eglibc-package.bbclass
diff --git a/packages/glibc/files/etc/ld.so.conf b/packages/glibc/files/etc/ld.so.conf
index fb1aab516d..dfa65edb85 100644
--- a/packages/glibc/files/etc/ld.so.conf
+++ b/packages/glibc/files/etc/ld.so.conf
@@ -1,3 +1,2 @@
/usr/local/lib
-/opt/QtPalmtop/lib
/usr/X11R6/lib
diff --git a/packages/glibc/files/ppc-ld-nofpu-20070104.patch b/packages/glibc/files/ppc-ld-nofpu-20070104.patch
new file mode 100644
index 0000000000..d5b1d31774
--- /dev/null
+++ b/packages/glibc/files/ppc-ld-nofpu-20070104.patch
@@ -0,0 +1,190 @@
+2007-01-12 Steven Munroe <sjmunroe@us.ibm.com>
+ Joe Kerian <jkerian@us.us.ibm.com>
+
+ [BZ #2749]
+ * sysdeps/ieee754/ldbl-128ibm/s_copysignl.c:
+ Include <math_ldbl_opt.h>.
+ Remove weak_alias. Use long_double_symbol macro.
+ (__copysignl): Use signbit() for comparison.
+ * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c: Correct parms for
+ SET_LDOUBLE_WORDS64.
+
+ [BZ #2423, #2749]
+ * sysdeps/ieee754/ldbl-128ibm/s_ceill.c: Don't include <fenv_libc.h>.
+ (__ceill): Remove calls to fegetround(), fesetround().
+ * sysdeps/ieee754/ldbl-128ibm/s_floorl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_roundl.c: Likewise.
+ * sysdeps/ieee754/ldbl-128ibm/s_truncl.c: Likewise.
+
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_ceill.c libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_ceill.c 2006-03-16 05:46:37.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_ceill.c 2007-01-11 10:30:12.856890432 -0600
+@@ -19,7 +19,6 @@
+ 02111-1307 USA. */
+
+ #include <math.h>
+-#include <fenv_libc.h>
+ #include <math_ldbl_opt.h>
+ #include <float.h>
+ #include <ieee754.h>
+@@ -44,11 +43,9 @@
+ __builtin_inf ()), 1))
+ {
+ double orig_xh;
+- int save_round = fegetround ();
+
+ /* Long double arithmetic, including the canonicalisation below,
+ only works in round-to-nearest mode. */
+- fesetround (FE_TONEAREST);
+
+ /* Convert the high double to integer. */
+ orig_xh = xh;
+@@ -81,8 +78,6 @@
+ /* Ensure we return -0 rather than +0 when appropriate. */
+ if (orig_xh < 0.0)
+ xh = -__builtin_fabs (xh);
+-
+- fesetround (save_round);
+ }
+
+ return ldbl_pack (xh, xl);
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c 2006-01-27 18:07:25.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_copysignl.c 2007-01-11 10:30:12.857890280 -0600
+@@ -25,6 +25,7 @@
+
+ #include "math.h"
+ #include "math_private.h"
++#include <math_ldbl_opt.h>
+
+ #ifdef __STDC__
+ long double __copysignl(long double x, long double y)
+@@ -33,13 +34,13 @@
+ long double x,y;
+ #endif
+ {
+- if (y < 0.0)
+- {
+- if (x >= 0.0)
+- x = -x;
+- }
+- else if (x < 0.0)
++ if( signbit(x) != signbit(y) )
+ x = -x;
+ return x;
+ }
+-weak_alias (__copysignl, copysignl)
++
++#ifdef IS_IN_libm
++long_double_symbol (libm, __copysignl, copysignl);
++#else
++long_double_symbol (libc, __copysignl, copysignl);
++#endif
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c 2006-01-27 18:07:25.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c 2007-01-11 10:30:12.857890280 -0600
+@@ -37,7 +37,7 @@
+ GET_LDOUBLE_WORDS64(hx,lx,x);
+ lx = lx ^ ( hx & 0x8000000000000000LL );
+ hx = hx & 0x7fffffffffffffffLL;
+- SET_LDOUBLE_WORDS64(hx,lx,x);
++ SET_LDOUBLE_WORDS64(x,hx,lx);
+ return x;
+ }
+ long_double_symbol (libm, __fabsl, fabsl);
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_floorl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_floorl.c 2006-03-16 05:46:37.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_floorl.c 2007-01-11 10:30:12.858890128 -0600
+@@ -19,7 +19,6 @@
+ 02111-1307 USA. */
+
+ #include <math.h>
+-#include <fenv_libc.h>
+ #include <math_ldbl_opt.h>
+ #include <float.h>
+ #include <ieee754.h>
+@@ -43,11 +42,8 @@
+ && __builtin_isless (__builtin_fabs (xh),
+ __builtin_inf ()), 1))
+ {
+- int save_round = fegetround ();
+-
+ /* Long double arithmetic, including the canonicalisation below,
+ only works in round-to-nearest mode. */
+- fesetround (FE_TONEAREST);
+
+ /* Convert the high double to integer. */
+ hi = ldbl_nearbyint (xh);
+@@ -75,8 +71,6 @@
+ xh = hi;
+ xl = lo;
+ ldbl_canonicalize (&xh, &xl);
+-
+- fesetround (save_round);
+ }
+
+ return ldbl_pack (xh, xl);
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_roundl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_roundl.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_roundl.c 2006-03-16 05:46:37.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_roundl.c 2007-01-11 10:30:12.859889976 -0600
+@@ -22,7 +22,6 @@
+ when it's coded in C. */
+
+ #include <math.h>
+-#include <fenv_libc.h>
+ #include <math_ldbl_opt.h>
+ #include <float.h>
+ #include <ieee754.h>
+@@ -47,11 +46,9 @@
+ __builtin_inf ()), 1))
+ {
+ double orig_xh;
+- int save_round = fegetround ();
+
+ /* Long double arithmetic, including the canonicalisation below,
+ only works in round-to-nearest mode. */
+- fesetround (FE_TONEAREST);
+
+ /* Convert the high double to integer. */
+ orig_xh = xh;
+@@ -88,8 +85,6 @@
+ xh = hi;
+ xl = lo;
+ ldbl_canonicalize (&xh, &xl);
+-
+- fesetround (save_round);
+ }
+
+ return ldbl_pack (xh, xl);
+diff -urN libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_truncl.c libc24/sysdeps/ieee754/ldbl-128ibm/s_truncl.c
+--- libc25-cvstip-20070104/sysdeps/ieee754/ldbl-128ibm/s_truncl.c 2006-03-16 05:46:37.000000000 -0600
++++ libc24/sysdeps/ieee754/ldbl-128ibm/s_truncl.c 2007-01-11 10:30:12.860889824 -0600
+@@ -22,7 +22,6 @@
+ when it's coded in C. */
+
+ #include <math.h>
+-#include <fenv_libc.h>
+ #include <math_ldbl_opt.h>
+ #include <float.h>
+ #include <ieee754.h>
+@@ -47,11 +46,9 @@
+ __builtin_inf ()), 1))
+ {
+ double orig_xh;
+- int save_round = fegetround ();
+
+ /* Long double arithmetic, including the canonicalisation below,
+ only works in round-to-nearest mode. */
+- fesetround (FE_TONEAREST);
+
+ /* Convert the high double to integer. */
+ orig_xh = xh;
+@@ -92,8 +89,6 @@
+ /* Ensure we return -0 rather than +0 when appropriate. */
+ if (orig_xh < 0.0)
+ xh = -__builtin_fabs (xh);
+-
+- fesetround (save_round);
+ }
+
+ return ldbl_pack (xh, xl);
diff --git a/packages/glibc/files/ppc-ports-ld-nofpu-20070114.patch b/packages/glibc/files/ppc-ports-ld-nofpu-20070114.patch
new file mode 100644
index 0000000000..b4d99592f6
--- /dev/null
+++ b/packages/glibc/files/ppc-ports-ld-nofpu-20070114.patch
@@ -0,0 +1,38 @@
+2007-01-14 Steven Munroe <sjmunroe@us.ibm.com>
+
+ [BZ #2749]
+ * sysdeps/powerpc/nofpu/fenv_libc.h: New file.
+
+diff -urN dummy-libc/ports-cvstip-20070104/sysdeps/powerpc/nofpu/fenv_libc.h libc25/ports/sysdeps/powerpc/nofpu/fenv_libc.h
+--- dummy-libc/ports-cvstip-20070104/sysdeps/powerpc/nofpu/fenv_libc.h Wed Dec 31 18:00:00 1969
++++ libc25/ports/sysdeps/powerpc/nofpu/fenv_libc.h Thu Jan 11 11:00:53 2007
+@@ -0,0 +1,29 @@
++/* Internal libc stuff for floating point environment routines.
++ Copyright (C) 2007 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _FENV_LIBC_H
++#define _FENV_LIBC_H 1
++
++/* fenv_libc.h is used in libm implementations of ldbl-128ibm. So we
++ need this version in the soft-fp to at minimum include fenv.h to
++ get the fegetround definition. */
++
++#include <fenv.h>
++
++#endif /* fenv_libc.h */
diff --git a/packages/glibc/files/ppc-sfp-machine.patch b/packages/glibc/files/ppc-sfp-machine.patch
new file mode 100644
index 0000000000..6171a03411
--- /dev/null
+++ b/packages/glibc/files/ppc-sfp-machine.patch
@@ -0,0 +1,297 @@
+This patch combined with the other patches from Bugzilla #2749 allows
+powerpc32 to build. The Subdirs pulls in the soft-fp directory from
+libc, The Implies pulls in the ports powerpc/soft-fp directory which
+includes sfp-machine.h
+
+The get/set/swapcontext changes overide the common implimentation in
+libc to avoid using hardware FP instructions.
+
+
+
+2006-06-01 Steven Munroe <sjmunroe@us.ibm.com>
+
+ [BZ #2749]
+ * sysdeps/powerpc/soft-fp/Subdirs: New file.
+ * sysdeps/powerpc/soft-fp/sfp-machine.h: New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies: New file.
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S:
+ New file.
+
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/powerpc/soft-fp/Subdirs
+libc24/ports/sysdeps/powerpc/soft-fp/Subdirs
+--- dummy-libc/ports-cvstip-20060512/sysdeps/powerpc/soft-fp/Subdirs Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/powerpc/soft-fp/Subdirs Wed May 31 16:58:44 2006
+@@ -0,0 +1,1 @@
++soft-fp
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/powerpc/soft-fp/sfp-machine.h
+libc24/ports/sysdeps/powerpc/soft-fp/sfp-machine.h
+--- dummy-libc/ports-cvstip-20060512/sysdeps/powerpc/soft-fp/sfp-machine.h Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/powerpc/soft-fp/sfp-machine.h Wed May 31 13:57:07 2006
+@@ -0,0 +1,63 @@
++#define _FP_W_TYPE_SIZE 32
++#define _FP_W_TYPE unsigned long
++#define _FP_WS_TYPE signed long
++#define _FP_I_TYPE long
++
++#define _FP_MUL_MEAT_S(R,X,Y) \
++ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
++#define _FP_MUL_MEAT_D(R,X,Y) \
++ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
++#define _FP_MUL_MEAT_Q(R,X,Y) \
++ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
++
++#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
++#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
++#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
++
++#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
++#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
++#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
++#define _FP_NANSIGN_S 0
++#define _FP_NANSIGN_D 0
++#define _FP_NANSIGN_Q 0
++
++#define _FP_KEEPNANFRACP 1
++
++/* Someone please check this. */
++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
++ do { \
++ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \
++ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \
++ { \
++ R##_s = Y##_s; \
++ _FP_FRAC_COPY_##wc(R,Y); \
++ } \
++ else \
++ { \
++ R##_s = X##_s; \
++ _FP_FRAC_COPY_##wc(R,X); \
++ } \
++ R##_c = FP_CLS_NAN; \
++ } while (0)
++
++/* Exception flags. We use the bit positions of the appropriate bits
++ in the FPSCR, which also correspond to the FE_* bits. This makes
++ everything easier ;-). */
++#define FP_EX_INVALID (1 << (31 - 2))
++#define FP_EX_OVERFLOW (1 << (31 - 3))
++#define FP_EX_UNDERFLOW (1 << (31 - 4))
++#define FP_EX_DENORM FP_EX_UNDERFLOW
++#define FP_EX_DIVZERO (1 << (31 - 5))
++#define FP_EX_INEXACT (1 << (31 - 6))
++
++#define FP_HANDLE_EXCEPTIONS __simulate_exceptions (_fex)
++#define FP_ROUNDMODE __sim_round_mode
++
++extern int __sim_exceptions;
++libc_hidden_proto (__sim_exceptions);
++extern int __sim_disabled_exceptions;
++libc_hidden_proto (__sim_disabled_exceptions);
++extern int __sim_round_mode;
++libc_hidden_proto (__sim_round_mode);
++
++extern void __simulate_exceptions (int x) attribute_hidden;
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies
+libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies
+--- dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/Implies Wed May 31 15:46:44 2006
+@@ -0,0 +1,1 @@
++powerpc/soft-fp
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S
+libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S
+--- dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/getcontext.S Thu Jun 01 15:31:03 2006
+@@ -0,0 +1,59 @@
++/* Save current context.
++ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <sysdep.h>
++#include <rtld-global-offsets.h>
++#include <shlib-compat.h>
++
++#define __ASSEMBLY__
++#include <asm/ptrace.h>
++#include "ucontext_i.h"
++
++#define __CONTEXT_FUNC_NAME __getcontext
++#undef __CONTEXT_ENABLE_FPRS
++#undef __CONTEXT_ENABLE_VRS
++
++#include "getcontext-common.S"
++
++versioned_symbol (libc, __getcontext, getcontext, GLIBC_2_3_4)
++
++#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4)
++
++/* For the nofpu case the old/new versions are the same function. */
++strong_alias (__getcontext, __novec_getcontext)
++
++compat_symbol (libc, __novec_getcontext, getcontext, GLIBC_2_3_3)
++
++#endif
++
++#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3)
++
++#define _ERRNO_H 1
++#include <bits/errno.h>
++
++ compat_text_section
++ENTRY (__getcontext_stub)
++ li r3,ENOSYS
++ b __syscall_error@local
++END (__getcontext_stub)
++ .previous
++
++compat_symbol (libc, __getcontext_stub, getcontext, GLIBC_2_1)
++
++#endif
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S
+libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S
+--- dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/setcontext.S Thu Jun 01 15:31:03 2006
+@@ -0,0 +1,59 @@
++/* Jump to a new context.
++ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <sysdep.h>
++#include <rtld-global-offsets.h>
++#include <shlib-compat.h>
++
++#define __ASSEMBLY__
++#include <asm/ptrace.h>
++#include "ucontext_i.h"
++
++#define __CONTEXT_FUNC_NAME __setcontext
++#undef __CONTEXT_ENABLE_FPRS
++#undef __CONTEXT_ENABLE_VRS
++
++#include "setcontext-common.S"
++
++versioned_symbol (libc, __setcontext, setcontext, GLIBC_2_3_4)
++
++#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4)
++
++/* For the nofpu case the old/new versions are the same function. */
++strong_alias (__setcontext, __novec_setcontext)
++
++compat_symbol (libc, __novec_setcontext, setcontext, GLIBC_2_3_3)
++
++#endif
++
++#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_3)
++
++#define _ERRNO_H 1
++#include <bits/errno.h>
++
++ compat_text_section
++ENTRY (__setcontext_stub)
++ li r3,ENOSYS
++ b __syscall_error@local
++END (__setcontext_stub)
++ .previous
++
++compat_symbol (libc, __setcontext_stub, setcontext, GLIBC_2_0)
++
++#endif
+diff -urN dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S
+libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S
+--- dummy-libc/ports-cvstip-20060512/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S Wed Dec 31 18:00:00 1969
++++ libc24/ports/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/swapcontext.S Thu Jun 01 15:31:03 2006
+@@ -0,0 +1,59 @@
++/* Save current context and jump to a new context.
++ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <sysdep.h>
++#include <rtld-global-offsets.h>
++#include <shlib-compat.h>
++
++#define __ASSEMBLY__
++#include <asm/ptrace.h>
++#include "ucontext_i.h"
++
++#define __CONTEXT_FUNC_NAME __swapcontext
++#undef __CONTEXT_ENABLE_FPRS
++#undef __CONTEXT_ENABLE_VRS
++
++# include "swapcontext-common.S"
++
++versioned_symbol (libc, __swapcontext, swapcontext, GLIBC_2_3_4)
++
++#if SHLIB_COMPAT (libc, GLIBC_2_3_3, GLIBC_2_3_4)
++
++/* For the nofpu case the old/new versions are the same function. */
++strong_alias (__swapcontext, __novec_swapcontext)
++
++compat_symbol (libc, __novec_swapcontext, swapcontext, GLIBC_2_3_3)
++
++#endif
++
++#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3)
++
++#define _ERRNO_H 1
++#include <bits/errno.h>
++
++ compat_text_section
++ENTRY (__swapcontext_stub)
++ li r3,ENOSYS
++ b __syscall_error@local
++END (__swapcontext_stub)
++ .previous
++
++compat_symbol (libc, __swapcontext_stub, swapcontext, GLIBC_2_1)
++
++#endif
+
diff --git a/packages/glibc/files/ppc-soft-fp-20070115.patch b/packages/glibc/files/ppc-soft-fp-20070115.patch
new file mode 100644
index 0000000000..a84bc2f7cb
--- /dev/null
+++ b/packages/glibc/files/ppc-soft-fp-20070115.patch
@@ -0,0 +1,182 @@
+2007-01-14 Steven Munroe <sjmunroe@us.ibm.com>
+ Joe Kerian <jkerian@us.us.ibm.com>
+
+ [BZ #2749]
+ * soft-fp/op-4.h (__FP_FRAC_SUB_3, __FP_FRAC_SUB_4): Correct borrow
+ handling for high words.
+ * soft-fp/op-common.h (_FP_OVERFLOW_SEMIRAW): Always set inexact
+ and overflow for infinity.
+ (_FP_PACK_SEMIRAW): Update comment. Do not round if NaN or Inf.
+
+ * math/basic-test.c (truncdfsf_test): New function.
+ [!NO_LONG_DOUBLE] (trunctfsf_test): New function.
+ [!NO_LONG_DOUBLE] (trunctfdf_test): New function.
+ Change main() to do_test. Define TEST_FUNCTION. Include test-skeleton.c.
+ (do_test): Run new tests.
+
+2007-01-15 Jakub Jelinek <jakub@redhat.com>
+
+ * soft-fp/op-common.h (FP_TRUNC): When truncating a NaN, clear
+ workbits in semi-raw fraction.
+
+
+diff -urN libc25-cvstip-20070104/math/basic-test.c libc24/math/basic-test.c
+--- libc25-cvstip-20070104/math/basic-test.c 2001-07-05 23:55:35.000000000 -0500
++++ libc24/math/basic-test.c 2007-01-15 11:41:17.260963824 -0600
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1999 Free Software Foundation, Inc.
++/* Copyright (C) 1999, 2007 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 1999.
+
+@@ -107,17 +107,90 @@
+ TEST_FUNC (double_test, double, nan, DBL_EPSILON, HUGE_VAL)
+ #ifndef NO_LONG_DOUBLE
+ TEST_FUNC (ldouble_test, long double, nanl, LDBL_EPSILON, HUGE_VALL)
++
++void
++trunctfsf_test(void)
++{
++ volatile long double Inf_var, NaN_var, zero_var, one_var;
++ float x1, x2;
++
++ zero_var = 0.0;
++ one_var = 1.0;
++ NaN_var = zero_var/zero_var;
++ Inf_var = one_var / zero_var;
++
++ (void) &zero_var;
++ (void) &one_var;
++ (void) &NaN_var;
++ (void) &Inf_var;
++
++ x1 = (float)NaN_var;
++ check (" float x = (float)((long double)NaN))", isnan (x1) != 0);
++ x2 = (float)Inf_var;
++ check (" float x = (float)((long double)Inf))", isinf (x2) != 0);
++}
++
++void
++trunctfdf_test(void)
++{
++ volatile long double Inf_var, NaN_var, zero_var, one_var;
++ double x1, x2;
++
++ zero_var = 0.0;
++ one_var = 1.0;
++ NaN_var = zero_var/zero_var;
++ Inf_var = one_var / zero_var;
++
++ (void) &zero_var;
++ (void) &one_var;
++ (void) &NaN_var;
++ (void) &Inf_var;
++
++ x1 = (double)NaN_var;
++ check (" double x = (double)((long double)NaN))", isnan (x1) != 0);
++ x2 = (double)Inf_var;
++ check (" double x = (double)((long double)Inf))", isinf (x2) != 0);
++}
++
+ #endif
+
++void
++truncdfsf_test(void)
++{
++ volatile double Inf_var, NaN_var, zero_var, one_var;
++ float x1, x2;
++
++ zero_var = 0.0;
++ one_var = 1.0;
++ NaN_var = zero_var/zero_var;
++ Inf_var = one_var / zero_var;
++
++ (void) &zero_var;
++ (void) &one_var;
++ (void) &NaN_var;
++ (void) &Inf_var;
++
++ x1 = (float)NaN_var;
++ check (" float x = (float)((double)NaN))", isnan (x1) != 0);
++ x2 = (float)Inf_var;
++ check (" float x = (float)((double)Inf))", isinf (x2) != 0);
++}
++
+ int
+-main (void)
++do_test (void)
+ {
+ float_test ();
+ double_test ();
++ truncdfsf_test();
+
+ #ifndef NO_LONG_DOUBLE
+ ldouble_test ();
++ trunctfsf_test();
++ trunctfdf_test();
+ #endif
+
+ return errors != 0;
+ }
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -urN libc25-cvstip-20070104/soft-fp/op-4.h libc24/soft-fp/op-4.h
+--- libc25-cvstip-20070104/soft-fp/op-4.h 2006-04-04 03:24:47.000000000 -0500
++++ libc24/soft-fp/op-4.h 2007-01-11 11:00:53.000000000 -0600
+@@ -564,7 +564,7 @@
+ r1 = x1 - y1; \
+ _c2 = r1 > x1; \
+ r1 -= _c1; \
+- _c2 |= r1 > _c1; \
++ _c2 |= _c1 && (y1 == x1); \
+ r2 = x2 - y2 - _c2; \
+ } while (0)
+ #endif
+@@ -578,11 +578,11 @@
+ r1 = x1 - y1; \
+ _c2 = r1 > x1; \
+ r1 -= _c1; \
+- _c2 |= r1 > _c1; \
++ _c2 |= _c1 && (y1 == x1); \
+ r2 = x2 - y2; \
+ _c3 = r2 > x2; \
+ r2 -= _c2; \
+- _c3 |= r2 > _c2; \
++ _c3 |= _c2 && (y2 == x2); \
+ r3 = x3 - y3 - _c3; \
+ } while (0)
+ #endif
+diff -urN libc25-cvstip-20070104/soft-fp/op-common.h libc24/soft-fp/op-common.h
+--- libc25-cvstip-20070104/soft-fp/op-common.h 2006-04-04 03:24:47.000000000 -0500
++++ libc24/soft-fp/op-common.h 2007-01-15 11:46:17.290882288 -0600
+@@ -1,5 +1,5 @@
+ /* Software floating-point emulation. Common operations.
+- Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
++ Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson (rth@cygnus.com),
+ Jakub Jelinek (jj@ultra.linux.cz),
+@@ -99,10 +99,10 @@
+ else \
+ { \
+ X##_e = _FP_EXPMAX_##fs - 1; \
+- FP_SET_EXCEPTION(FP_EX_OVERFLOW); \
+- FP_SET_EXCEPTION(FP_EX_INEXACT); \
+ _FP_FRAC_SET_##wc(X, _FP_MAXFRAC_##wc); \
+ } \
++ FP_SET_EXCEPTION(FP_EX_INEXACT); \
++ FP_SET_EXCEPTION(FP_EX_OVERFLOW); \
+ } while (0)
+
+ /* Check for a semi-raw value being a signaling NaN and raise the
+@@ -1252,6 +1252,9 @@
+ _FP_FRAC_SRL_##swc(S, (_FP_WFRACBITS_##sfs \
+ - _FP_WFRACBITS_##dfs)); \
+ _FP_FRAC_COPY_##dwc##_##swc(D, S); \
++ /* Semi-raw NaN must have all workbits cleared. */ \
++ _FP_FRAC_LOW_##dwc(D) \
++ &= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1); \
+ _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs; \
+ } \
+ } \
diff --git a/packages/glibc/glibc-2.2.5/etc/ld.so.conf b/packages/glibc/glibc-2.2.5/etc/ld.so.conf
index 3f9b41aabb..46e06d3f0a 100644
--- a/packages/glibc/glibc-2.2.5/etc/ld.so.conf
+++ b/packages/glibc/glibc-2.2.5/etc/ld.so.conf
@@ -1,3 +1,2 @@
/usr/local/lib
-/opt/QtPalmtop/lib
diff --git a/packages/glibc/glibc-2.3.2/etc/ld.so.conf b/packages/glibc/glibc-2.3.2/etc/ld.so.conf
index 3f9b41aabb..46e06d3f0a 100644
--- a/packages/glibc/glibc-2.3.2/etc/ld.so.conf
+++ b/packages/glibc/glibc-2.3.2/etc/ld.so.conf
@@ -1,3 +1,2 @@
/usr/local/lib
-/opt/QtPalmtop/lib
diff --git a/packages/glibc/glibc-2.4/etc/ld.so.conf b/packages/glibc/glibc-2.4/etc/ld.so.conf
index 3f9b41aabb..46e06d3f0a 100644
--- a/packages/glibc/glibc-2.4/etc/ld.so.conf
+++ b/packages/glibc/glibc-2.4/etc/ld.so.conf
@@ -1,3 +1,2 @@
/usr/local/lib
-/opt/QtPalmtop/lib
diff --git a/packages/glibc/glibc-2.4/ldd-unbash.patch b/packages/glibc/glibc-2.4/ldd-unbash.patch
new file mode 100644
index 0000000000..2fb8854b49
--- /dev/null
+++ b/packages/glibc/glibc-2.4/ldd-unbash.patch
@@ -0,0 +1,11 @@
+--- glibc-2.5/elf/ldd.bash.in.org 2006-04-30 16:06:20.000000000 +0000
++++ glibc-2.5/elf/ldd.bash.in 2007-03-30 19:18:57.000000000 +0000
+@@ -110,7 +110,7 @@
+ # environments where the executed program might not have permissions
+ # to write to the console/tty. But only bash 3.x supports the pipefail
+ # option, and we don't bother to handle the case for older bash versions.
+-if set -o pipefail 2> /dev/null; then
++if false; then
+ try_trace() {
+ eval $add_env '"$@"' | cat
+ }
diff --git a/packages/glibc/glibc-cvs/etc/ld.so.conf b/packages/glibc/glibc-cvs/etc/ld.so.conf
index 3f9b41aabb..46e06d3f0a 100644
--- a/packages/glibc/glibc-cvs/etc/ld.so.conf
+++ b/packages/glibc/glibc-cvs/etc/ld.so.conf
@@ -1,3 +1,2 @@
/usr/local/lib
-/opt/QtPalmtop/lib
diff --git a/packages/glibc/glibc-initial_2.6.bb b/packages/glibc/glibc-initial_2.6.bb
new file mode 100644
index 0000000000..0d4a79f2a4
--- /dev/null
+++ b/packages/glibc/glibc-initial_2.6.bb
@@ -0,0 +1,46 @@
+require glibc_${PV}.bb
+
+DEPENDS = "linux-libc-headers"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/glibc-2.4', '${FILE_DIRNAME}/glibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+
+PACKAGES = ""
+
+do_configure () {
+ sed -ie 's,{ (exit 1); exit 1; }; },{ (exit 0); }; },g' ${S}/configure
+ chmod +x ${S}/configure
+ unset CFLAGS
+ CC="${BUILD_CC}" CPP="${BUILD_CPP}" LD="${BUILD_LD}" ${S}/configure --host=${TARGET_SYS} --build=${BUILD_SYS} \
+ --without-cvs --disable-sanity-checks \
+ --with-headers=${CROSS_DIR}/${TARGET_SYS}/include \
+ --enable-hacker-mode
+ if grep -q GLIBC_2.3 ${S}/ChangeLog; then
+ # glibc-2.3.x passes cross options to $(CC) when generating errlist-compat.c, which fails without a real cross-compiler.
+ # Fortunately, we don't need errlist-compat.c, since we just need .h files,
+ # so work around this by creating a fake errlist-compat.c and satisfying its dependencies.
+ # Another workaround might be to tell configure to not use any cross options to $(CC).
+ # The real fix would be to get install-headers to not generate errlist-compat.c.
+ make sysdeps/gnu/errlist.c
+ mkdir -p stdio-common
+ touch stdio-common/errlist-compat.c
+ fi
+}
+
+do_compile () {
+ :
+}
+
+do_stage () {
+ oe_runmake cross-compiling=yes install_root=${CROSS_DIR}/${TARGET_SYS} prefix="" install-headers
+
+ # Two headers -- stubs.h and features.h -- aren't installed by install-headers,
+ # so do them by hand. We can tolerate an empty stubs.h for the moment.
+ # See e.g. http://gcc.gnu.org/ml/gcc/2002-01/msg00900.html
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/include/gnu
+ touch ${CROSS_DIR}/${TARGET_SYS}/include/gnu/stubs.h
+ cp ${S}/include/features.h ${CROSS_DIR}/${TARGET_SYS}/include/features.h
+}
+
+do_install () {
+ :
+}
diff --git a/packages/glibc/glibc-intermediate_2.4.bb b/packages/glibc/glibc-intermediate_2.4.bb
index 75dae48532..e6aad1cc63 100644
--- a/packages/glibc/glibc-intermediate_2.4.bb
+++ b/packages/glibc/glibc-intermediate_2.4.bb
@@ -7,6 +7,7 @@ do_install () {
}
PACKAGES = ""
+PACKAGES_DYNAMIC = ""
PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers"
GLIBC_ADDONS = "nptl,ports"
diff --git a/packages/glibc/glibc-intermediate_2.5.bb b/packages/glibc/glibc-intermediate_2.5.bb
index 7f34af2b0d..7610f560a7 100644
--- a/packages/glibc/glibc-intermediate_2.5.bb
+++ b/packages/glibc/glibc-intermediate_2.5.bb
@@ -12,6 +12,7 @@ do_configure_prepend() {
PACKAGES = ""
+PACKAGES_DYNAMIC = ""
PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers"
GLIBC_ADDONS = "nptl,ports"
diff --git a/packages/glibc/glibc-intermediate_2.6.bb b/packages/glibc/glibc-intermediate_2.6.bb
new file mode 100644
index 0000000000..7610f560a7
--- /dev/null
+++ b/packages/glibc/glibc-intermediate_2.6.bb
@@ -0,0 +1,19 @@
+require glibc_${PV}.bb
+
+do_install () {
+ :
+}
+
+# gcc uses -Werror which break on a "you have no thumb interwork" _warning_
+do_configure_prepend() {
+ sed -i s:-Werror:: ${S}/configure
+}
+
+
+
+PACKAGES = ""
+PACKAGES_DYNAMIC = ""
+PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
+DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial linux-libc-headers"
+GLIBC_ADDONS = "nptl,ports"
+GLIBC_EXTRA_OECONF = ""
diff --git a/packages/glibc/glibc-intermediate_cvs.bb b/packages/glibc/glibc-intermediate_cvs.bb
index 2283037c87..4f9d58ee6f 100644
--- a/packages/glibc/glibc-intermediate_cvs.bb
+++ b/packages/glibc/glibc-intermediate_cvs.bb
@@ -8,6 +8,7 @@ do_install () {
}
PACKAGES = ""
+PACKAGES_DYNAMIC = ""
PROVIDES = "virtual/${TARGET_PREFIX}libc-for-gcc"
DEPENDS = "virtual/${TARGET_PREFIX}gcc-initial"
GLIBC_ADDONS = "linuxthreads"
diff --git a/packages/glibc/glibc-package.bbclass b/packages/glibc/glibc-package.bbclass
index 4cad10fd73..ae6a085e74 100644
--- a/packages/glibc/glibc-package.bbclass
+++ b/packages/glibc/glibc-package.bbclass
@@ -40,7 +40,7 @@ FILES_glibc-dev_append = " ${libdir}/*.o ${bindir}/rpcgen"
FILES_nscd = "${sbindir}/nscd*"
FILES_glibc-utils = "${bindir}/* ${sbindir}/*"
FILES_glibc-gconv = "${libdir}/gconv/*"
-FILES_${PN}-dbg += " ${libdir}/gconv/.debug"
+FILES_${PN}-dbg += "${libexecdir}/getconf/.debug ${libdir}/gconv/.debug"
FILES_catchsegv = "${bindir}/catchsegv"
RDEPENDS_catchsegv = "libsegfault"
FILES_glibc-pcprofile = "/lib/libpcprofile.so"
@@ -175,10 +175,10 @@ python package_do_split_gconvs () {
bb.error("datadir not defined")
return
- gconv_libdir = os.path.join(libdir, "gconv")
- charmap_dir = os.path.join(datadir, "i18n", "charmaps")
- locales_dir = os.path.join(datadir, "i18n", "locales")
- binary_locales_dir = os.path.join(libdir, "locale")
+ gconv_libdir = base_path_join(libdir, "gconv")
+ charmap_dir = base_path_join(datadir, "i18n", "charmaps")
+ locales_dir = base_path_join(datadir, "i18n", "locales")
+ binary_locales_dir = base_path_join(libdir, "locale")
do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='glibc-gconv-%s', description='gconv module for character set %s', extra_depends='glibc-gconv')
@@ -202,9 +202,14 @@ python package_do_split_gconvs () {
do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='glibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps, extra_depends='')
bb.data.setVar('PACKAGES', bb.data.getVar('PACKAGES', d) + ' glibc-gconv', d)
- f = open(os.path.join(bb.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r")
- supported = f.readlines()
- f.close()
+ supported = bb.data.getVar('GLIBC_GENERATE_LOCALES', d, 1)
+ if not supported or supported == "all":
+ f = open(base_path_join(bb.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r")
+ supported = f.readlines()
+ f.close()
+ else:
+ supported = supported.split()
+ supported = map(lambda s:s.replace(".", " ") + "\n", supported)
dot_re = re.compile("(.*)\.(.*)")
@@ -252,9 +257,9 @@ python package_do_split_gconvs () {
bb.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
bb.data.setVar('PACKAGES', '%s %s' % (pkgname, bb.data.getVar('PACKAGES', d, 1)), d)
- treedir = os.path.join(bb.data.getVar("WORKDIR", d, 1), "locale-tree")
+ treedir = base_path_join(bb.data.getVar("WORKDIR", d, 1), "locale-tree")
path = bb.data.getVar("PATH", d, 1)
- i18npath = os.path.join(treedir, datadir, "i18n")
+ i18npath = base_path_join(treedir, datadir, "i18n")
localedef_opts = "--force --old-style --no-archive --prefix=%s --inputfile=%s/i18n/locales/%s --charmap=%s %s" % (treedir, datadir, locale, encoding, name)
cmd = "PATH=\"%s\" I18NPATH=\"%s\" %s -L %s %s/bin/localedef %s" % (path, i18npath, qemu, treedir, treedir, localedef_opts)
diff --git a/packages/glibc/glibc.inc b/packages/glibc/glibc.inc
index 7078a1c09f..10c2796825 100644
--- a/packages/glibc/glibc.inc
+++ b/packages/glibc/glibc.inc
@@ -3,7 +3,16 @@ HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
SECTION = "libs"
PRIORITY = "required"
LICENSE = "LGPL"
-PACKAGES = "glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-doc glibc-locale libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile"
-
+# nptl needs unwind support in gcc, which can't be built without glibc.
+DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
#this leads to circular deps, so lets not add it yet
#RDEPENDS_ldd += " bash"
+PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
+PROVIDES += "virtual/libintl virtual/libiconv"
+
+inherit autotools
+
+GLIBC_EXTRA_OECONF ?= ""
+INHIBIT_DEFAULT_DEPS = "1"
+
+PACKAGES = "glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-doc glibc-locale libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile"
diff --git a/packages/glibc/glibc_2.2.5.bb b/packages/glibc/glibc_2.2.5.bb
index 75f08be942..82ab193073 100644
--- a/packages/glibc/glibc_2.2.5.bb
+++ b/packages/glibc/glibc_2.2.5.bb
@@ -6,7 +6,6 @@ PR = "r10"
DEFAULT_PREFERENCE_sh3 = "-99"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
#
# For now, we will skip building of a gcc package if it is a uclibc one
@@ -24,12 +23,7 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES_unslung = "virtual/libc virtual/${TARGET_PREFIX}libc-for-gcc"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
+PROVIDES_unslung = "virtual/libc virtual/${TARGET_PREFIX}libc-for-gcc libc6-unslung"
libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*"
@@ -113,8 +107,6 @@ SRC_URI = "${GNU_MIRROR}/glibc/glibc-${PV}.tar.gz \
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.2+cvs20040726.bb b/packages/glibc/glibc_2.3.2+cvs20040726.bb
index 40fef7bed4..85f64371a8 100644
--- a/packages/glibc/glibc_2.3.2+cvs20040726.bb
+++ b/packages/glibc/glibc_2.3.2+cvs20040726.bb
@@ -6,13 +6,6 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
PR = "r22"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
-
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
@@ -38,8 +31,6 @@ SRC_URI_append_openmn = " file://ldsocache-varrun.patch;patch=1"
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.2.bb b/packages/glibc/glibc_2.3.2.bb
index 1dba326201..87a6906915 100644
--- a/packages/glibc/glibc_2.3.2.bb
+++ b/packages/glibc/glibc_2.3.2.bb
@@ -5,7 +5,6 @@ PR = "r11"
DEFAULT_PREFERENCE_sh3 = "-99"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
#
# For now, we will skip building of a gcc package if it is a uclibc one
@@ -23,13 +22,6 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-PROVIDES += "virtual/libintl virtual/libiconv"
-
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
-
libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*"
FILES_${PN} = "${sysconfdir} ${libc_baselibs} /sbin/ldconfig ${libexecdir} ${datadir}/zoneinfo"
@@ -114,8 +106,6 @@ SRC_URI = "ftp://ftp.gnu.org/gnu/glibc/glibc-${PV}.tar.gz \
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.3+cvs20041128.bb b/packages/glibc/glibc_2.3.3+cvs20041128.bb
index 9286fce398..6bbc8ec8af 100644
--- a/packages/glibc/glibc_2.3.3+cvs20041128.bb
+++ b/packages/glibc/glibc_2.3.3+cvs20041128.bb
@@ -6,7 +6,6 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
PR = "r7"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_i686 = "0"
@@ -29,12 +28,6 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
-
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
@@ -57,8 +50,6 @@ SRC_URI_append_openmn = " file://ldsocache-varrun.patch;patch=1"
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.3+cvs20050221.bb b/packages/glibc/glibc_2.3.3+cvs20050221.bb
index 6382d12e57..576047ce1e 100644
--- a/packages/glibc/glibc_2.3.3+cvs20050221.bb
+++ b/packages/glibc/glibc_2.3.3+cvs20050221.bb
@@ -6,19 +6,12 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
PR = "r7"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_i686 = "0"
DEFAULT_PREFERENCE_sh3 = "0"
DEFAULT_PREFERENCE_sh4 = "0"
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
-
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
@@ -42,8 +35,6 @@ SRC_URI_append_openmn = " file://ldsocache-varrun.patch;patch=1"
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.3+cvs20050420.bb b/packages/glibc/glibc_2.3.3+cvs20050420.bb
index f955a6e0a0..4a548fa9bc 100644
--- a/packages/glibc/glibc_2.3.3+cvs20050420.bb
+++ b/packages/glibc/glibc_2.3.3+cvs20050420.bb
@@ -8,16 +8,9 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
PR = "r5"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
DEFAULT_PREFERENCE = "-1"
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
-
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
@@ -43,8 +36,6 @@ SRC_URI_append_openmn = " file://ldsocache-varrun.patch;patch=1"
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.3.bb b/packages/glibc/glibc_2.3.3.bb
index 0db2616a75..3f3690a73c 100644
--- a/packages/glibc/glibc_2.3.3.bb
+++ b/packages/glibc/glibc_2.3.3.bb
@@ -8,7 +8,6 @@ DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_mipsel = "0"
GLIBC_ADDONS ?= "linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
#
# For now, we will skip building of a gcc package if it is a uclibc one
@@ -26,12 +25,6 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
-
libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*"
FILES_${PN} = "${sysconfdir} ${libc_baselibs} /sbin/ldconfig ${libexecdir} ${datadir}/zoneinfo"
@@ -58,8 +51,6 @@ SRC_URI = "ftp://ftp.gnu.org/gnu/glibc/glibc-${PV}.tar.gz \
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.3.5+cvs20050627.bb b/packages/glibc/glibc_2.3.5+cvs20050627.bb
index 985df1dfaa..1319fb33d3 100644
--- a/packages/glibc/glibc_2.3.5+cvs20050627.bb
+++ b/packages/glibc/glibc_2.3.5+cvs20050627.bb
@@ -8,7 +8,6 @@ PR = "r13"
DEFAULT_PREFERENCE_sh3="-1"
GLIBC_ADDONS ?= "ports,linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN"
@@ -28,12 +27,7 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-INHIBIT_DEFAULT_DEPS = "1"
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
@@ -71,8 +65,6 @@ SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1 \
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.4.bb b/packages/glibc/glibc_2.4.bb
index 4cf0b82b92..3752da1040 100644
--- a/packages/glibc/glibc_2.4.bb
+++ b/packages/glibc/glibc_2.4.bb
@@ -14,7 +14,6 @@ TARGET_CPPFLAGS = "-I${STAGING_DIR}/${TARGET_SYS}/include"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
GLIBC_ADDONS ?= "ports,nptl,libidn"
-GLIBC_EXTRA_OECONF ?= ""
GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
@@ -34,12 +33,7 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-INHIBIT_DEFAULT_DEPS = "1"
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
@@ -76,8 +70,6 @@ SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"
S = "${WORKDIR}/glibc-2.4"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.5.bb b/packages/glibc/glibc_2.5.bb
index f9f24bbe7f..f14ce45a94 100644
--- a/packages/glibc/glibc_2.5.bb
+++ b/packages/glibc/glibc_2.5.bb
@@ -5,7 +5,7 @@ ARM_INSTRUCTION_SET = "arm"
PACKAGES_DYNAMIC = "libc6*"
RPROVIDES_${PN}-dev = "libc6-dev"
-PR = "r4"
+PR = "r6"
# the -isystem in bitbake.conf screws up glibc do_stage
BUILD_CPPFLAGS = "-I${STAGING_DIR}/${BUILD_SYS}/include"
@@ -15,7 +15,6 @@ TARGET_CPPFLAGS = "-I${STAGING_DIR}/${TARGET_SYS}/include"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
GLIBC_ADDONS ?= "ports,nptl,libidn"
-GLIBC_EXTRA_OECONF ?= ""
GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
@@ -35,12 +34,7 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-INHIBIT_DEFAULT_DEPS = "1"
# file://noinfo.patch;patch=1
# file://ldconfig.patch;patch=1;pnum=0
@@ -62,6 +56,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
# file://glibc-2.4-openat-3.patch;patch=1 \
# file://fixup-aeabi-syscalls.patch;patch=1 \
file://zecke-sane-readelf.patch;patch=1 \
+ file://ldd-unbash.patch;patch=1 \
file://generic-bits_select.h \
file://generic-bits_types.h \
file://generic-bits_typesizes.h \
@@ -74,13 +69,16 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1"
SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"
-SRC_URI_append_powerpc = " file://powerpc-sqrt-hack.diff;patch=1"
+#powerpc patches to add support for soft-float
+SRC_URI_append_powerpc= " file://ppc-sfp-machine.patch;patch=1 \
+ file://ppc-soft-fp-20070115.patch;patch=1 \
+ file://ppc-ld-nofpu-20070104.patch;patch=1 \
+ file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \
+ file://powerpc-sqrt-hack.diff;patch=1""
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibc/glibc_2.6.bb b/packages/glibc/glibc_2.6.bb
new file mode 100644
index 0000000000..b3880df613
--- /dev/null
+++ b/packages/glibc/glibc_2.6.bb
@@ -0,0 +1,204 @@
+require glibc.inc
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES_DYNAMIC = "libc6*"
+RPROVIDES_${PN}-dev = "libc6-dev"
+
+PR = "r0"
+
+# the -isystem in bitbake.conf screws up glibc do_stage
+BUILD_CPPFLAGS = "-I${STAGING_DIR}/${BUILD_SYS}/include"
+TARGET_CPPFLAGS = "-I${STAGING_DIR}/${TARGET_SYS}/include"
+
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
+
+GLIBC_ADDONS ?= "ports,nptl,libidn"
+
+GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
+
+#
+# For now, we will skip building of a gcc package if it is a uclibc one
+# and our build is not a uclibc one, and we skip a glibc one if our build
+# is a uclibc build.
+#
+# See the note in gcc/gcc_3.4.0.oe
+#
+
+python __anonymous () {
+ import bb, re
+ uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
+ if uc_os:
+ raise bb.parse.SkipPackage("incompatible with target %s" %
+ bb.data.getVar('TARGET_OS', d, 1))
+}
+
+RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
+
+# file://noinfo.patch;patch=1
+# file://ldconfig.patch;patch=1;pnum=0
+# file://arm-machine-gmon.patch;patch=1;pnum=0 \
+# \
+# file://arm-ioperm.patch;patch=1;pnum=0 \
+# file://ldd.patch;patch=1;pnum=0 \
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \
+ file://arm-memcpy.patch;patch=1 \
+ file://arm-longlong.patch;patch=1 \
+ file://fhs-linux-paths.patch;patch=1 \
+ file://dl-cache-libcmp.patch;patch=1 \
+ file://ldsocache-varrun.patch;patch=1 \
+ file://nptl-crosscompile.patch;patch=1 \
+ file://glibc-check_pf.patch;patch=1;pnum=0 \
+# file://glibc-2.4-compile.patch;patch=1 \
+# file://glibc-2.4-openat-3.patch;patch=1 \
+# file://fixup-aeabi-syscalls.patch;patch=1 \
+ file://zecke-sane-readelf.patch;patch=1 \
+ file://ldd-unbash.patch;patch=1 \
+ file://generic-bits_select.h \
+ file://generic-bits_types.h \
+ file://generic-bits_typesizes.h \
+ file://generic-bits_time.h \
+ file://etc/ld.so.conf \
+ file://generate-supported.mk"
+
+
+# Build fails on sh3 and sh4 without additional patches
+SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1"
+SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"
+
+#powerpc patches to add support for soft-float
+SRC_URI_append_powerpc= " file://ppc-sfp-machine.patch;patch=1 \
+ file://ppc-soft-fp-20070115.patch;patch=1 \
+ file://ppc-ld-nofpu-20070104.patch;patch=1 \
+ file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \
+ file://powerpc-sqrt-hack.diff;patch=1""
+
+S = "${WORKDIR}/glibc-${PV}"
+B = "${WORKDIR}/build-${TARGET_SYS}"
+
+EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
+ --without-cvs --disable-profile --disable-debug --without-gd \
+ --enable-clocale=gnu \
+ --enable-add-ons=${GLIBC_ADDONS} \
+ --with-headers=${STAGING_INCDIR} \
+ --without-selinux \
+ ${GLIBC_EXTRA_OECONF}"
+
+EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
+
+do_munge() {
+ # Integrate ports and libidn into tree
+ mv ${WORKDIR}/glibc-ports-${PV} ${S}/ports
+ mv ${WORKDIR}/glibc-libidn-${PV} ${S}/libidn
+
+ # Ports isn't really working... Fix it
+ # Some of this is rather dirty, but it seems to be the only
+ # quick way to get this cruft to compile
+ rm -rf ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
+ ln -s nptl ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
+ cp ${S}/nptl/sysdeps/pthread/bits/sigthread.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+ cp ${S}/sysdeps/unix/sysv/linux/i386/bits/wchar.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+ cp ${S}/sysdeps/wordsize-32/bits/wordsize.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+ cp ${WORKDIR}/generic-bits_select.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/select.h
+ cp ${WORKDIR}/generic-bits_types.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/types.h
+ cp ${WORKDIR}/generic-bits_typesizes.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/typesizes.h
+ cp ${WORKDIR}/generic-bits_time.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/time.h
+ # Copy in generic stuff for not yet implemented headers
+ for i in ${S}/bits/*.h; do
+ F=`basename $i`
+ [ "$F" = "local_lim.h" ] && continue
+ [ "$F" = "errno.h" ] && continue
+ test -e ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/$F || test -e ${S}/ports/sysdeps/arm/bits/$F || test -e ${S}/sysdeps/unix/sysv/linux/bits/$F || test -e ${S}/sysdeps/ieee754/bits/$F || cp $i ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
+ done
+ # This is harmful; we need to get the one from nptl/sysdeps/pthreads
+ rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/libc-lock.h
+ # Obsoleted by sysdeps/arm/{fpu,eabi}/bits/fenv.h
+ rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/fenv.h
+ # Obsoleted by sysdeps/gnu/bits/utmp.h
+ rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/utmp.h
+}
+
+addtask munge before do_patch after do_unpack
+
+
+do_configure () {
+# override this function to avoid the autoconf/automake/aclocal/autoheader
+# calls for now
+# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
+# version check and doesn't really help with anything
+ if [ -z "`which rpcgen`" ]; then
+ echo "rpcgen not found. Install glibc-devel."
+ exit 1
+ fi
+ (cd ${S} && gnu-configize) || die "failure in running gnu-configize"
+ CPPFLAGS="" oe_runconf
+}
+
+rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
+ yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
+ rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
+
+do_compile () {
+ # -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
+ unset LDFLAGS
+ base_do_compile
+ (
+ cd ${S}/sunrpc/rpcsvc
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
+ done
+ )
+}
+
+do_stage() {
+ rm -f ${STAGING_LIBDIR}/libc.so.6
+ oe_runmake 'install_root=${STAGING_DIR}/${HOST_SYS}' \
+ 'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+ '${STAGING_LIBDIR}/libc.so.6' \
+ install-headers install-lib
+
+ install -d ${STAGING_INCDIR}/gnu \
+ ${STAGING_INCDIR}/bits \
+ ${STAGING_INCDIR}/rpcsvc
+ install -m 0644 ${S}/include/gnu/stubs.h ${STAGING_INCDIR}/gnu/
+ install -m 0644 ${B}/bits/stdio_lim.h ${STAGING_INCDIR}/bits/
+ install -m 0644 misc/syscall-list.h ${STAGING_INCDIR}/bits/syscall.h
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ install -m 0644 ${S}/sunrpc/rpcsvc/$h ${STAGING_INCDIR}/rpcsvc/
+ done
+ for i in libc.a libc_pic.a libc_nonshared.a; do
+ install -m 0644 ${B}/$i ${STAGING_LIBDIR}/ || die "failed to install $i"
+ done
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${STAGING_LIBDIR}/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${STAGING_LIBDIR}/libc.so
+
+ rm -f ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6
+ oe_runmake 'install_root=${CROSS_DIR}/${TARGET_SYS}' \
+ 'includedir=/include' 'libdir=/lib' 'slibdir=/lib' \
+ '${CROSS_DIR}/${TARGET_SYS}/lib/libc.so.6' \
+ install-headers install-lib
+
+ install -d ${CROSS_DIR}/${TARGET_SYS}/include/gnu \
+ ${CROSS_DIR}/${TARGET_SYS}/include/bits \
+ ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc
+ install -m 0644 ${S}/include/gnu/stubs.h ${CROSS_DIR}/${TARGET_SYS}/include/gnu/
+ install -m 0644 ${B}/bits/stdio_lim.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/
+ install -m 0644 misc/syscall-list.h ${CROSS_DIR}/${TARGET_SYS}/include/bits/syscall.h
+ for r in ${rpcsvc}; do
+ h=`echo $r|sed -e's,\.x$,.h,'`
+ install -m 0644 ${S}/sunrpc/rpcsvc/$h ${CROSS_DIR}/${TARGET_SYS}/include/rpcsvc/
+ done
+
+ for i in libc.a libc_pic.a libc_nonshared.a; do
+ install -m 0644 ${B}/$i ${CROSS_DIR}/${TARGET_SYS}/lib/ || die "failed to install $i"
+ done
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${CROSS_DIR}/${TARGET_SYS}/lib/libc.so
+}
+
+require glibc-package.bbclass
diff --git a/packages/glibc/glibc_cvs.bb b/packages/glibc/glibc_cvs.bb
index c85aa500f1..0ddcb8a447 100644
--- a/packages/glibc/glibc_cvs.bb
+++ b/packages/glibc/glibc_cvs.bb
@@ -5,7 +5,6 @@ PR = "r5"
PV = "2.3.5+cvs${SRCDATE}"
GLIBC_ADDONS ?= "ports,linuxthreads"
-GLIBC_EXTRA_OECONF ?= ""
DEFAULT_PREFERENCE = "-1"
@@ -25,11 +24,6 @@ python __anonymous () {
bb.data.getVar('TARGET_OS', d, 1))
}
-# nptl needs unwind support in gcc, which can't be built without glibc.
-PROVIDES = "virtual/libc ${@['virtual/${TARGET_PREFIX}libc-for-gcc', '']['nptl' in '${GLIBC_ADDONS}']}"
-PROVIDES += "virtual/libintl virtual/libiconv"
-DEPENDS = "${@['virtual/${TARGET_PREFIX}gcc-initial', 'virtual/${TARGET_PREFIX}gcc']['nptl' in '${GLIBC_ADDONS}']} linux-libc-headers"
-INHIBIT_DEFAULT_DEPS = "1"
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
# file://noinfo.patch;patch=1
@@ -58,8 +52,6 @@ SRC_URI_append_arm = " file://dyn-ldconfig-20041128.patch;patch=1"
S = "${WORKDIR}/libc"
B = "${WORKDIR}/build-${TARGET_SYS}"
-inherit autotools
-
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
--without-cvs --disable-profile --disable-debug --without-gd \
--enable-clocale=gnu \
diff --git a/packages/glibmm/glibmm_2.12.10.bb b/packages/glibmm/glibmm_2.12.10.bb
new file mode 100644
index 0000000000..a62d4eb145
--- /dev/null
+++ b/packages/glibmm/glibmm_2.12.10.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "C++ bindings for the glib library."
+HOMEPAGE = "http://www.gtkmm.org/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "glib-2.0 libsigc++-2.0"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/2.12/glibmm-${PV}.tar.bz2"
+
+inherit autotools pkgconfig flow-lossage
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
+
+LIBV = "2.4.0"
+
+do_stage () {
+ autotools_stage_all
+
+ install -m 0644 glib/glibmmconfig.h ${STAGING_INCDIR}/glibmm-2.4
+ install -m 0644 scripts/glibmm_check_perl.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/glibmm/glibmm_2.8.4.bb b/packages/glibmm/glibmm_2.8.4.bb
deleted file mode 100644
index a1235ae563..0000000000
--- a/packages/glibmm/glibmm_2.8.4.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "C++ bindings for the glib library."
-HOMEPAGE = "http://www.gtkmm.org/"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-DEPENDS = "gtk+ libsigc++-2.0"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/2.8/glibmm-${PV}.tar.bz2"
-
-inherit autotools pkgconfig flow-lossage
-
-FILES_${PN} = "${libdir}/lib*.so.*"
-FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
-
-LIBV = "2.4.0"
-
-do_stage () {
- autotools_stage_all
-
- install -m 0644 glib/glibmmconfig.h ${STAGING_INCDIR}/glibmm-2.4
-
- install -m 0644 scripts/glibmm_check_perl.m4 ${STAGING_DATADIR}/aclocal/
-}
diff --git a/packages/libmikey/.mtn2git_empty b/packages/gloox/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmikey/.mtn2git_empty
+++ b/packages/gloox/.mtn2git_empty
diff --git a/packages/gpephone/gloox_0.8.1.bb b/packages/gloox/gloox_0.8.1.bb
index 09004a8182..09004a8182 100644
--- a/packages/gpephone/gloox_0.8.1.bb
+++ b/packages/gloox/gloox_0.8.1.bb
diff --git a/packages/gmp/gmp-4.2.1/x86-fat.diff b/packages/gmp/gmp-4.2.1/x86-fat.diff
new file mode 100644
index 0000000000..2a54622a26
--- /dev/null
+++ b/packages/gmp/gmp-4.2.1/x86-fat.diff
@@ -0,0 +1,122 @@
+See:
+
+ http://gmplib.org/patches/x86-fat.diff
+ http://gmplib.org/list-archives/gmp-bugs/2006-October/000579.html
+ http://gmplib.org/#BUGREPORTS
+
+Removed the configure part of the patch since we patch configure.in. It was
+only needed for FAT binaries anyway and this is being included to fix
+linking errors.
+
+Index: mpn/generic/addsub_n.c
+===================================================================
+RCS file: /home/cvsfiles/gmp42/mpn/generic/addsub_n.c,v
+retrieving revision 1.1
+retrieving revision 1.2
+diff -p -2 -r1.1 -r1.2
+*** mpn/generic/addsub_n.c 14 Mar 2006 15:57:54 -0000 1.1
+--- mpn/generic/addsub_n.c 15 May 2006 22:38:42 -0000 1.2
+***************
+*** 1,5 ****
+ /* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
+
+! Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is part of the GNU MP Library.
+--- 1,5 ----
+ /* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length.
+
+! Copyright 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
+
+ This file is part of the GNU MP Library.
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 59,63 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 59,63 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 65,69 ****
+ acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 65,69 ----
+ acyo = acyn + mpn_add_1 (r1p + off, r1p + off, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 82,86 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 82,86 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 88,92 ****
+ scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
+ #endif
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 88,92 ----
+ scyo = scyn + mpn_sub_1 (r2p + off, r2p + off, this_n, scyo);
+ #endif
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (r1p + off, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 98,102 ****
+ else
+ {
+! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2=s2 or vice versa)
+ Need temporary storage. */
+ mp_limb_t tp[PART_SIZE];
+--- 98,102 ----
+ else
+ {
+! /* r1 and r2 are identical to s1 and s2 (r1==s1 and r2==s2 or vice versa)
+ Need temporary storage. */
+ mp_limb_t tp[PART_SIZE];
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 106,110 ****
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc || !HAVE_NATIVE_mpn_add_n
+ acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
+ #else
+--- 106,110 ----
+ {
+ this_n = MIN (n - off, PART_SIZE);
+! #if HAVE_NATIVE_mpn_add_nc
+ acyo = mpn_add_nc (tp, s1p + off, s2p + off, this_n, acyo);
+ #else
+*************** mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp
+*** 112,116 ****
+ acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc || !HAVE_NATIVE_mpn_sub_n
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
+--- 112,116 ----
+ acyo = acyn + mpn_add_1 (tp, tp, this_n, acyo);
+ #endif
+! #if HAVE_NATIVE_mpn_sub_nc
+ scyo = mpn_sub_nc (r2p + off, s1p + off, s2p + off, this_n, scyo);
+ #else
diff --git a/packages/gmp/gmp_4.2.1.bb b/packages/gmp/gmp_4.2.1.bb
index 8ad8e29ad1..452553beda 100644
--- a/packages/gmp/gmp_4.2.1.bb
+++ b/packages/gmp/gmp_4.2.1.bb
@@ -1,9 +1,6 @@
-PR = "r1"
+PR = "r2"
-SRC_URI += "file://sh4-asmfix.patch;patch=1"
+SRC_URI_append += "file://sh4-asmfix.patch;patch=1 \
+ file://x86-fat.diff;patch=1;pnum=0 "
require gmp.inc
-
-# Builds on sh but can't be used due to not compiling in some functions
-DEFAULT_PREFERENCE_sh3 = "-1"
-DEFAULT_PREFERENCE_sh4 = "-1"
diff --git a/packages/libmnetutil/.mtn2git_empty b/packages/gnash/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmnetutil/.mtn2git_empty
+++ b/packages/gnash/.mtn2git_empty
diff --git a/packages/gnash/gnash_0.8.0.bb b/packages/gnash/gnash_0.8.0.bb
new file mode 100644
index 0000000000..197cea06b6
--- /dev/null
+++ b/packages/gnash/gnash_0.8.0.bb
@@ -0,0 +1,79 @@
+DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features"
+
+LICENSE = "GPL-2"
+HOMEPAGE = "http://www.gnu.org/software/gnash"
+
+DEPENDS = "gtk+ cairo libxml2 libmad libsdl-mixer zlib boost jpeg pango curl"
+
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gnash/${PV}/gnash-${PV}.tar.bz2"
+
+
+EXTRA_OECONF = "--enable-gui=gtk \
+ --enable-renderer=cairo \
+ --enable-media=none \
+ --disable-klash \
+ --enable-z \
+ --enable-jpeg \
+ --disable-glext \
+ --enable-Xft \
+ --enable-expat \
+ --enable-mad \
+ --enable-cairo \
+ --disable-plugin \
+ --disable-cygnal \
+ --with-boost-incl=${STAGING_INCDIR} \
+ --with-boost-lib=${STAGING_LIBDIR} \
+ --with-libxml-incl=${STAGING_INCDIR}/libxml2 \
+ --with-libxml-lib=${STAGING_LIBDIR} \
+ --with-glib-incl=${STAGING_INCDIR}/glib-2.0 \
+# --with-glib-lib=${STAGING_LIBDIR} \
+ --with-gtk2-incl=${STAGING_INCDIR}/gtk-2.0 \
+ --with-pango-incl=${STAGING_INCDIR}/pango-1.0 \
+# --with-pango-lib=${STAGING_LIBDIR} \
+ --with-sdl-incl=${STAGING_INCDIR}/SDL \
+ --with-atk-incl=${STAGING_INCDIR}/atk-1.0 \
+ --with-Xft-incl=${STAGING_INCDIR}/X11 \
+ --with-expat-incl=${STAGING_INCDIR} \
+ --with-mad-incl=${STAGING_INCDIR} \
+ --with-cairo-incl=${STAGING_INCDIR}/cairo \
+ --with-curl-incl=${STAGING_INCDIR} \
+ --with-curl-lib=${STAGING_LIBDIR} \
+ "
+
+inherit autotools pkgconfig
+
+LDFLAGS += " -L${STAGING_LIBDIR} -lcurl -lboost_date_time -lboost_filesystem -lboost_iostreams -lboost_signals -lboost_thread-mt "
+CFLAGS += " -I${STAGING_INCDIR} -I${STAGING_LIBDIR}/gtk-2.0/include/ "
+
+do_configure_append() {
+ for i in `find . -name Makefile` ; do
+ sed -i s:I/usr/include:I${STAGING_INCDIR}:g $i
+ done
+}
+
+
+PARALLEL_MAKE = ""
+
+do_compile() {
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'CFLAGS=${CFLAGS}' \
+ 'ZLIB_INCLUDE=${STAGING_INCDIR}' \
+ 'ZLIB_LIBS=${STAGING_LIBDIR}' \
+ 'PNG_INCLUDE=${STAGING_INCDIR}' \
+ 'PNG_LIBS=${STAGING_LIBDIR}'
+}
+
+
+PACKAGES =+ " libgnashamf libgnashbackend libgnashbase libgnashgeo libgnashgui libgnashplayer libgnashserver "
+
+FILES_libgnashamf = "${libdir}/libgnashamf-${PV}.so"
+FILES_libgnashbackend = "${libdir}/libgnashbackend-${PV}.so"
+FILES_libgnashbase = "${libdir}/libgnashbase-${PV}.so"
+FILES_libgnashgeo = "${libdir}/libgnashgeo-${PV}.so"
+FILES_libgnashgui = "${libdir}/libgnashgui-${PV}.so"
+FILES_libgnashplayer = "${libdir}/libgnashplayer-${PV}.so"
+FILES_libgnashserver = "${libdir}/libgnashserver-${PV}.so"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/gnet/gnet_svn.bb b/packages/gnet/gnet_svn.bb
new file mode 100644
index 0000000000..c09b7f8b9c
--- /dev/null
+++ b/packages/gnet/gnet_svn.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "GNet is a simple network library. It is written in C, object-oriented, and built upon GLib."
+LICENSE = "LGPL"
+SECTION = "libs/network"
+HOMEPAGE = "http://www.gnetlibrary.org"
+DEPENDS = "glib-2.0"
+PV = "2.0.7+svn${SRCDATE}"
+
+SRC_URI = "svn://svn.gnome.org/svn/${PN}/;module=trunk \
+ file://buildfix.patch;patch=1"
+
+S = "${WORKDIR}/trunk"
+
+EXTRA_OECONF = "--disable-pthreads"
+
+FILES_${PN}-dev += "${libdir}/gnet-2.0"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/gnome/gconf-dbus_svn.bb b/packages/gnome/gconf-dbus_svn.bb
index 87daa1d227..3647059de1 100644
--- a/packages/gnome/gconf-dbus_svn.bb
+++ b/packages/gnome/gconf-dbus_svn.bb
@@ -1,18 +1,15 @@
SECTION = "x11/utils"
-DEPENDS = "gtk+ glib-2.0 dbus dbus-glib libxml2 popt"
+DEPENDS = "gtk+ glib-2.0 dbus dbus-glib libxml2 popt intltool-native"
DESCRIPTION = "Settings daemon using DBUS for communication."
LICENSE = "GPL"
PROVIDES = "gconf"
RPROVIDES_${PN} = "gconf"
RPROVIDES_${PN}-dev = "gconf-dev"
-PV = "2.10.0+svn${SRCDATE}"
+PV = "2.16.0+svn${SRCDATE}"
PR = "r0"
SRC_URI = "svn://developer.imendio.com/svn/gconf-dbus;module=trunk;proto=http \
- file://gconf-dbus-update.patch;patch=1;pnum=0 \
- file://xml-backend-locks-compile-fix.patch;patch=1 \
- file://xml-backend-oldxml-Makefile.patch \
file://69gconfd-dbus"
inherit pkgconfig autotools
@@ -20,23 +17,22 @@ S = "${WORKDIR}/trunk"
PARALLEL_MAKE = ""
-FILES_${PN} += " ${libdir}/gconf-dbus/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus*"
-FILES_${PN}-dbg += "${libdir}/gconf-dbus/2/.debug"
+FILES_${PN} += " ${libdir}/gconf-dbus/2/*.so \
+ ${libdir}/GConf-dbus/2/*.so \
+ ${libdir}/dbus-1.0 \
+ ${sysconfdir} \
+ ${datadir}/dbus*"
+FILES_${PN}-dbg += "${libdir}/gconf-dbus/2/.debug \
+ ${libdir}/GConf-dbus/2/.debug ""
EXTRA_OECONF = " --with-ipc=dbus --disable-gtk-doc --enable-gtk --host=${HOST_SYS} --enable-shared --disable-static"
-HEADERS = "gconf.h gconf-changeset.h gconf-listeners.h gconf-schema.h gconf-value.h gconf-error.h gconf-engine.h gconf-client.h gconf-enum-types.h"
-
-do_compile_prepend() {
- cd ${S}
- patch -p1 < ../xml-backend-oldxml-Makefile.patch
+do_configure_prepend() {
+ touch ${S}/gtk-doc.make
}
do_stage() {
- oe_libinstall -so -C gconf libgconf-2 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/gconf/2/gconf/
- ( cd gconf; for i in ${HEADERS}; do install -m 0644 $i ${STAGING_INCDIR}/gconf/2/gconf/$i; done )
- install -m 0644 gconf.m4 ${STAGING_DATADIR}/aclocal/gconf-2.m4
+ autotools_stage_all
}
do_install_append () {
@@ -45,3 +41,4 @@ do_install_append () {
install -d ${D}/${datadir}/dbus-1.0/services/
install -m 644 gconf/gconf.service ${D}${datadir}/dbus-1.0/services/
}
+
diff --git a/packages/gnome/gnome-cups-manager_0.31.bb b/packages/gnome/gnome-cups-manager_0.31.bb
index 2023cdac5d..4f8cd1de7b 100644
--- a/packages/gnome/gnome-cups-manager_0.31.bb
+++ b/packages/gnome/gnome-cups-manager_0.31.bb
@@ -6,6 +6,9 @@ DEPENDS="glib-2.0 gtk+ pango libgnomecups"
inherit gnome pkgconfig
+FILES += "${datadir}/icons/hicolor/48x48/stock/data/emblem-*.png \
+ ${datadir}/icons/hicolor/48x48/devices/gnome-dev-printer-new.png"
+
SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gnome-cups-manager/0.31/gnome-cups-manager-0.31.tar.bz2"
do_stage() {
diff --git a/packages/libmpeg2/.mtn2git_empty b/packages/gnome/gnome-desktop/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmpeg2/.mtn2git_empty
+++ b/packages/gnome/gnome-desktop/.mtn2git_empty
diff --git a/packages/gnome/gnome-desktop/no-desktop-docs.patch b/packages/gnome/gnome-desktop/no-desktop-docs.patch
new file mode 100644
index 0000000000..c132341728
--- /dev/null
+++ b/packages/gnome/gnome-desktop/no-desktop-docs.patch
@@ -0,0 +1,10 @@
+--- Makefile.am~ 2007-05-22 16:50:35.000000000 +0200
++++ Makefile.am 2007-05-22 16:50:35.000000000 +0200
+@@ -3,7 +3,6 @@
+ libgnome-desktop \
+ gnome-about \
+ pixmaps \
+- desktop-docs \
+ docs \
+ man
+
diff --git a/packages/gnome/gnome-desktop/scrollkeeper.patch b/packages/gnome/gnome-desktop/scrollkeeper.patch
new file mode 100644
index 0000000000..c1b7f3b44a
--- /dev/null
+++ b/packages/gnome/gnome-desktop/scrollkeeper.patch
@@ -0,0 +1,17 @@
+Index: gnome-desktop-2.16.1/configure.in
+===================================================================
+--- gnome-desktop-2.16.1.orig/configure.in 2006-10-02 19:00:52.000000000 +0000
++++ gnome-desktop-2.16.1/configure.in 2007-04-12 21:12:36.000000000 +0000
+@@ -113,9 +113,9 @@
+ dnl scrollkeeper checks
+
+ AC_PATH_PROG(SCROLLKEEPER_CONFIG, scrollkeeper-config,no)
+-if test x$SCROLLKEEPER_CONFIG = xno; then
+- AC_MSG_ERROR(Couldn't find scrollkeeper-config. Please install the scrollkeeper package)
+-fi
++dnl if test x$SCROLLKEEPER_CONFIG = xno; then
++dnl AC_MSG_ERROR(Couldn't find scrollkeeper-config. Please install the scrollkeeper package)
++dnl fi
+
+ dnl Language Support
+
diff --git a/packages/gnome/gnome-desktop_2.16.1.bb b/packages/gnome/gnome-desktop_2.16.1.bb
index 647e751c57..4d4b80efbc 100644
--- a/packages/gnome/gnome-desktop_2.16.1.bb
+++ b/packages/gnome/gnome-desktop_2.16.1.bb
@@ -1,11 +1,16 @@
LICENSE = "GPL"
SECTION = "x11/gnome"
-PR = "r1"
+PR = "r2"
DESCRIPTION = "GNOME library for reading .desktop files"
inherit gnome pkgconfig
DEPENDS = "gnome-common gnome-doc-utils libgnomeui"
+SRC_URI += "file://scrollkeeper.patch;patch=1 \
+ file://no-desktop-docs.patch;patch=1;pnum=0"
+
+EXTRA_OECONF = "--disable-scrollkeeper"
+
EXTRA_AUTORECONF = "-I ${STAGING_DIR}/${HOST_SYS}/share/aclocal/gnome2-macros"
do_configure_prepend () {
diff --git a/packages/gnome/gnome-desktop_2.18.3.bb b/packages/gnome/gnome-desktop_2.18.3.bb
new file mode 100644
index 0000000000..02beafa044
--- /dev/null
+++ b/packages/gnome/gnome-desktop_2.18.3.bb
@@ -0,0 +1,25 @@
+LICENSE = "GPL"
+SECTION = "x11/gnome"
+PR = "r2"
+DESCRIPTION = "GNOME library for reading .desktop files"
+inherit gnome pkgconfig
+
+DEPENDS = "gnome-common gnome-doc-utils gnome-vfs libgnomeui"
+
+SRC_URI += "file://scrollkeeper.patch;patch=1 \
+ file://no-desktop-docs.patch;patch=1;pnum=0"
+
+EXTRA_OECONF = "--disable-scrollkeeper"
+
+EXTRA_AUTORECONF = "-I ${STAGING_DIR}/${HOST_SYS}/share/aclocal/gnome2-macros"
+
+do_configure_prepend () {
+ cp ${STAGING_DIR}/${HOST_SYS}/share/gnome-common/data/omf.make ${S}
+}
+
+FILES_${PN} += "${datadir}/gnome-about"
+
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gnome/gnome-doc-utils_0.10.3.bb b/packages/gnome/gnome-doc-utils_0.10.3.bb
new file mode 100644
index 0000000000..315cdbd160
--- /dev/null
+++ b/packages/gnome/gnome-doc-utils_0.10.3.bb
@@ -0,0 +1,16 @@
+LICENSE = "GPL LGPL"
+DEPENDS = "libxml2 libxslt"
+
+PR = "r0"
+
+inherit gnome
+
+EXTRA_OECONF = "--disable-scrollkeeper"
+
+FILES_${PN} += "${datadir}/xml*"
+
+do_stage() {
+ mkdir -p ${STAGING_DATADIR}/xml/gnome/xslt/
+ cp -pPr ${S}/xslt/* ${STAGING_DATADIR}/xml/gnome/xslt/
+ autotools_stage_all
+}
diff --git a/packages/gnome/gnome-doc-utils_0.7.1.bb b/packages/gnome/gnome-doc-utils_0.7.1.bb
index 18d6d3012a..86a36c4bd7 100644
--- a/packages/gnome/gnome-doc-utils_0.7.1.bb
+++ b/packages/gnome/gnome-doc-utils_0.7.1.bb
@@ -1,10 +1,12 @@
-LICENSE = "GPL/LGPL"
+LICENSE = "GPL LGPL"
DEPENDS = "libxml2 libxslt"
PR = "r1"
inherit gnome
+EXTRA_OECONF = "--disable-scrollkeeper"
+
FILES_${PN} += "${datadir}/xml*"
do_stage() {
diff --git a/packages/gnome/gnome-keyring_0.6.0.bb b/packages/gnome/gnome-keyring_0.6.0.bb
new file mode 100644
index 0000000000..dd6235263d
--- /dev/null
+++ b/packages/gnome/gnome-keyring_0.6.0.bb
@@ -0,0 +1,13 @@
+LICENSE = "GPL"
+SECTION = "x11/gnome"
+
+inherit gnome
+
+DEPENDS = "gtk+"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/gnome/gnome-menus_2.16.1.bb b/packages/gnome/gnome-menus_2.16.1.bb
index 30e0abc14f..1307c026f2 100644
--- a/packages/gnome/gnome-menus_2.16.1.bb
+++ b/packages/gnome/gnome-menus_2.16.1.bb
@@ -1,6 +1,7 @@
DEPENDS = "python gnome-vfs libxml2 gconf popt gtk+"
LICENSE = "GPL"
+PR = "r1"
inherit gnome pkgconfig
@@ -11,4 +12,6 @@ autotools_stage_all
PACKAGES += "${PN}-python"
FILES_${PN} += "${datadir}/desktop-directories/"
FILES_${PN}-python = "${libdir}/python*"
+FILES_${PN}-dbg += "${libdir}/python*/site-packages/*/.debug \
+ ${libdir}/python*/site-packages/.debug"
diff --git a/packages/gnome/gnome-panel_2.18.1.bb b/packages/gnome/gnome-panel_2.18.1.bb
new file mode 100644
index 0000000000..349951143b
--- /dev/null
+++ b/packages/gnome/gnome-panel_2.18.1.bb
@@ -0,0 +1,17 @@
+LICENSE = "GPL"
+DEPENDS = "libwnck orbit2 gtk+ libgnome libgnomeui gnome-desktop libglade gnome-menus"
+
+inherit gnome pkgconfig
+
+
+do_configure_prepend() {
+ sed -i -e s:help:: ${S}/Makefile.am
+}
+
+
+PACKAGES =+ "libpanel-applet"
+FILES_libpanel-applet = "${libdir}/libpanel-applet-2.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/gnome/gnome-power-manager_2.18.3.bb b/packages/gnome/gnome-power-manager_2.18.3.bb
new file mode 100644
index 0000000000..3963da3912
--- /dev/null
+++ b/packages/gnome/gnome-power-manager_2.18.3.bb
@@ -0,0 +1,29 @@
+LICENSE = "GPLv2"
+DEPENDS = "libnotify libgnomeui gnome-panel gnome-doc-utils libwnck gtk+ gnome-keyring libglade hal dbus-glib "
+
+PR = "r1"
+
+inherit gnome
+
+EXTRA_OECONF = " --disable-scrollkeeper \
+ --disable-keyring \
+ "
+
+do_configure_append() {
+ rm config.log
+}
+
+PACKAGES =+ "${PN}-applets"
+
+FILES_${PN}-applets = "${bindir}/*applet* \
+ ${libdir}/bonobo/servers \
+ ${datadir}/gnome-2.0/ui"
+
+FILES_${PN} += "${datadir}/icons \
+ ${datadir}/dbus-1 \
+ ${datadir}/gnome/autostart \
+ "
+
+FILE_{PN}-doc += "${datadir}/omf \
+ ${datadir}/gnome/help "
+
diff --git a/packages/libmpeg2/libmpeg2-0.4.0b/.mtn2git_empty b/packages/gnome/gnome-vfs-2.18.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmpeg2/libmpeg2-0.4.0b/.mtn2git_empty
+++ b/packages/gnome/gnome-vfs-2.18.1/.mtn2git_empty
diff --git a/packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch b/packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch
new file mode 100644
index 0000000000..3dbc130ddc
--- /dev/null
+++ b/packages/gnome/gnome-vfs-2.18.1/gconftool-lossage.patch
@@ -0,0 +1,11 @@
+--- gnome-vfs-2.6.0/configure.in~ 2004-03-22 12:36:23.000000000 +0000
++++ gnome-vfs-2.6.0/configure.in 2004-06-07 16:04:34.000000000 +0100
+@@ -154,7 +154,7 @@
+ AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
+
+ if test x"$GCONFTOOL" = xno; then
+- AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
++ AC_MSG_WARN([gconftool-2 executable not found in your path - should be installed with GConf])
+ fi
+
+ AM_GCONF_SOURCE_2
diff --git a/packages/gnome/gnome-vfs-2.18.1/gnome-vfs-no-kerberos.patch b/packages/gnome/gnome-vfs-2.18.1/gnome-vfs-no-kerberos.patch
new file mode 100644
index 0000000000..e25ecdd66f
--- /dev/null
+++ b/packages/gnome/gnome-vfs-2.18.1/gnome-vfs-no-kerberos.patch
@@ -0,0 +1,51 @@
+removes kerberos completely to avoid conflicts with installed kerberos
+--- configure.in.orig 2007-01-05 19:42:26.418541610 +0200
++++ configure.in 2007-01-05 19:42:56.604261797 +0200
+@@ -436,47 +436,6 @@
+ ])
+ AM_CONDITIONAL(HAVE_CDDA, test $have_cdda = yes)
+ AC_SUBST(CDDA_LIBS)
+-
+-dnl GSSAPI
+-dnl Check for Kerberos installation
+-have_gssapi=no
+-AC_PATH_PROG([KRB5_CONFIG], krb5-config, none, $PATH:/usr/kerberos/bin)
+-
+-if test "x$KRB5_CONFIG" != "xnone"; then
+- GSSAPI_LIBS="`${KRB5_CONFIG} --libs gssapi`"
+- GSSAPI_CFLAGS="`${KRB5_CONFIG} --cflags gssapi`"
+-
+- saved_CPPFLAGS="$CPPFLAGS"
+- saved_LIBS="$LIBS"
+- LIBS="$LIBS $GSSAPI_LIBS"
+- CPPFLAGS="$CPPFLAGS $GSSAPI_CFLAGS"
+- # MIT and Heimdal put gssapi.h in different places
+- AC_CHECK_HEADERS(gssapi/gssapi.h gssapi.h, [
+- AC_CHECK_FUNCS(gss_init_sec_context, [
+- AC_MSG_NOTICE([GSSAPI authentication support enabled])
+- AC_DEFINE(HAVE_GSSAPI, 1, [Define if GSSAPI support is enabled])
+- AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
+- have_gssapi=yes
+-
+- # MIT Kerberos lacks GSS_C_NT_HOSTBASED_SERVICE
+- AC_CHECK_DECL([GSS_C_NT_HOSTBASED_SERVICE],,
+- [AC_DEFINE([GSS_C_NT_HOSTBASED_SERVICE], gss_nt_service_name,
+- [Define if GSS_C_NT_HOSTBASED_SERVICE is not defined otherwise])
+- ], [
+- #ifdef HAVE_GSSAPI_GSSAPI_H
+- #include <gssapi/gssapi.h>
+- #else
+- #include <gssapi.h>
+- #endif
+- ])
+- ])
+- break
+- ])
+- LIBS="$saved_LIBS"
+- CPPFLAGS="$saved_CPPFLAGS"
+-fi
+-AC_SUBST(GSSAPI_LIBS)
+-AC_SUBST(GSSAPI_CFLAGS)
+
+ dnl ******************************
+ dnl http-method (neon checks)
diff --git a/packages/gnome/gnome-vfs-obexftp_0.4.bb b/packages/gnome/gnome-vfs-obexftp_0.4.bb
new file mode 100644
index 0000000000..3035e8f020
--- /dev/null
+++ b/packages/gnome/gnome-vfs-obexftp_0.4.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "obex plugin for gnome-vfs"
+LICENSE = "GPLv2"
+DEPENDS = "openobex gnome-vfs bluez-utils"
+
+PR = "r1"
+
+inherit gnome
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/gnome-vfs-obexftp/${PV}/${PN}-${PV}.tar.bz2"
+
+FILES_${PN}-dbg += "${libdir}/gnome-vfs-2.0/modules/.debug"
+FILES_${PN} += "${libdir}/gnome-vfs-2.0/modules/*.so"
+
diff --git a/packages/gnome/gnome-vfs_2.18.1.bb b/packages/gnome/gnome-vfs_2.18.1.bb
new file mode 100644
index 0000000000..4ae7406a46
--- /dev/null
+++ b/packages/gnome/gnome-vfs_2.18.1.bb
@@ -0,0 +1,38 @@
+LICENSE = "GPL"
+DEPENDS = "libxml2 gconf gnutls avahi dbus bzip2 gnome-mime-data zlib"
+RRECOMMENDS = "gnome-vfs-plugin-file gnome-mime-data shared-mime-info"
+
+PR = "r0"
+
+inherit gnome
+
+# This is to provide compatibility with the gnome-vfs DBus fork
+PROVIDES = "gnome-vfs-plugin-dbus"
+RREPLACES = "gnome-vfs-dbus"
+
+SRC_URI += "file://gconftool-lossage.patch;patch=1;pnum=1 \
+ file://gnome-vfs-no-kerberos.patch;patch=1;pnum=0"
+
+EXTRA_OECONF = " \
+ --disable-openssl \
+ --enable-gnutls \
+ --enable-avahi \
+ --with-samba-includes=${STAGING_INCDIR} \
+ "
+
+FILES_${PN} += " ${libdir}/vfs"
+FILES_${PN}-dev += " ${libdir}/gnome-vfs-2.0/include"
+FILES_${PN}-doc += " ${datadir}/gtk-doc"
+
+do_stage () {
+autotools_stage_all
+}
+
+PACKAGES_DYNAMIC = "gnome-vfs-plugin-*"
+
+python populate_packages_prepend () {
+ print bb.data.getVar('FILES_gnome-vfs', d, 1)
+
+ plugindir = bb.data.expand('${libdir}/gnome-vfs-2.0/modules/', d)
+ do_split_packages(d, plugindir, '^lib(.*)\.so$', 'gnome-vfs-plugin-%s', 'GNOME VFS plugin for %s')
+}
diff --git a/packages/gnome/goffice_0.2.1.bb b/packages/gnome/goffice_0.2.1.bb
index 59372fa5ec..2048cdd34d 100644
--- a/packages/gnome/goffice_0.2.1.bb
+++ b/packages/gnome/goffice_0.2.1.bb
@@ -1,9 +1,11 @@
DESCRIPTION="Gnome Office Library"
LICENSE="GPLv2"
-PR="r0"
+PR="r1"
DEPENDS="glib-2.0 gtk+ pango libgnomeprint libgsf libglade libxml2 libart-lgpl"
+FILES_${PN}-dbg += "${libdir}/goffice/${PV}/plugins/*/.debug"
+
inherit gnome pkgconfig
do_stage() {
diff --git a/packages/gnome/goffice_0.3.2.bb b/packages/gnome/goffice_0.3.2.bb
index 90586ffbd6..a81f96910c 100644
--- a/packages/gnome/goffice_0.3.2.bb
+++ b/packages/gnome/goffice_0.3.2.bb
@@ -1,11 +1,13 @@
DESCRIPTION="Gnome Office Library"
LICENSE="GPLv2"
-PR="r0"
+PR="r1"
DEFAULT_PREFERENCE = "-1"
DEPENDS="glib-2.0 gtk+ pango cairo libgnomeprint libgsf libglade libxml2 libart-lgpl"
+FILES_${PN}-dbg += "${libdir}/goffice/${PV}/plugins/*/.debug"
+
inherit gnome pkgconfig
do_stage() {
diff --git a/packages/libmsip/.mtn2git_empty b/packages/gnome/libart-lgpl/i486/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmsip/.mtn2git_empty
+++ b/packages/gnome/libart-lgpl/i486/.mtn2git_empty
diff --git a/packages/gnome/libart-lgpl/i486/art_config.h b/packages/gnome/libart-lgpl/i486/art_config.h
new file mode 100644
index 0000000000..b0e74ad6ae
--- /dev/null
+++ b/packages/gnome/libart-lgpl/i486/art_config.h
@@ -0,0 +1,10 @@
+/* Automatically generated by gen_art_config.c */
+
+#define ART_SIZEOF_CHAR 1
+#define ART_SIZEOF_SHORT 2
+#define ART_SIZEOF_INT 4
+#define ART_SIZEOF_LONG 4
+
+typedef unsigned char art_u8;
+typedef unsigned short art_u16;
+typedef unsigned int art_u32;
diff --git a/packages/gnome/libbonoboui_2.18.0.bb b/packages/gnome/libbonoboui_2.18.0.bb
new file mode 100644
index 0000000000..53380c6fa0
--- /dev/null
+++ b/packages/gnome/libbonoboui_2.18.0.bb
@@ -0,0 +1,59 @@
+LICENSE = "GPL"
+SECTION = "x11/gnome/libs"
+PR = "r1"
+
+inherit gnome pkgconfig
+
+FILES_${PN} += "${libdir}/libglade/2.0/*.so"
+FILES_${PN}-dev += "${libdir}/libglade/2.0/* ${datadir}/gnome-2.0/ui \
+ ${libdir}/bonobo-2.0/samples"
+FILES_${PN}-dbg += "${libdir}/bonobo-2.0/samples/.debug \
+ ${libdir}/libglade/2.0/.debug"
+
+DEPENDS = "libgnomecanvas libbonobo libgnome glib-2.0 gtk-doc gconf libxml2 libglade"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+HEADERS = " \
+bonobo/bonobo-zoomable.h \
+bonobo/bonobo-ui-component.h \
+bonobo/bonobo-dock-layout.h \
+bonobo/bonobo-ui-type-builtins.h \
+bonobo/bonobo-canvas-component.h \
+bonobo/bonobo-widget.h \
+bonobo/bonobo-ui-engine.h \
+bonobo/bonobo-window.h \
+bonobo/bonobo-ui-toolbar.h \
+bonobo/bonobo-dock-band.h \
+bonobo/bonobo-ui-toolbar-item.h \
+bonobo/bonobo-control.h \
+bonobo/bonobo-dock-item.h \
+bonobo/bonobo-ui-config-widget.h \
+bonobo/bonobo-zoomable-frame.h \
+bonobo/bonobo-control-frame.h \
+bonobo/bonobo-dock.h \
+bonobo/bonobo-ui-main.h \
+bonobo/bonobo-canvas-item.h \
+bonobo/bonobo-ui-node.h \
+bonobo/bonobo-socket.h \
+bonobo/bonobo-selector.h \
+bonobo/bonobo-ui-sync.h \
+bonobo/bonobo-ui-util.h \
+bonobo/bonobo-plug.h \
+bonobo/bonobo-ui-toolbar-button-item.h \
+bonobo/bonobo-ui-toolbar-toggle-button-item.h \
+bonobo/bonobo-ui-container.h \
+bonobo/bonobo-file-selector-util.h \
+bonobo/bonobo-property-control.h \
+bonobo/bonobo-selector-widget.h \
+libbonoboui.h \
+bonobo.h \
+"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/libbonoboui-2.0/bonobo
+ for i in ${HEADERS}; do
+ install -m 0644 $i ${STAGING_INCDIR}/libbonoboui-2.0/$i
+ done
+ oe_libinstall -C bonobo -a -so libbonoboui-2 ${STAGING_LIBDIR}
+}
diff --git a/packages/gnome/libgnome_2.18.0.bb b/packages/gnome/libgnome_2.18.0.bb
new file mode 100644
index 0000000000..5eaa9a084e
--- /dev/null
+++ b/packages/gnome/libgnome_2.18.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Gnome application programming libraries"
+LICENSE = "GPL"
+SECTION = "x11/gnome/libs"
+PR = "r0"
+
+inherit gnome lib_package
+
+DEPENDS = "gconf-native gnome-vfs libbonobo esound"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_stage() {
+autotools_stage_all
+}
diff --git a/packages/gnome/libgnomeui_2.12.0.bb b/packages/gnome/libgnomeui_2.12.0.bb
index 2465de03ca..9324676cec 100644
--- a/packages/gnome/libgnomeui_2.12.0.bb
+++ b/packages/gnome/libgnomeui_2.12.0.bb
@@ -1,6 +1,6 @@
LICENSE = "GPL"
SECTION = "x11/gnome/libs"
-PR = "r2"
+PR = "r3"
DEPENDS = "libgnome libgnomecanvas libbonoboui gnome-keyring"
DESCRIPTION = "GNOME User Interface Library"
@@ -9,6 +9,9 @@ FILES_${PN} += "${libdir}/gtk-2.0/*/filesystems/lib*.so \
inherit gnome
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/filesystems/*.la ${libdir}/gtk-2.0/*/filesystems/*.a ${libdir}/libglade/*/*.la ${libdir}/libglade/*/*.a"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/filesystems/.debug/ ${libdir}/libglade/*/.debug/"
+
SRC_URI += "file://gnome-stock-pixbufs.h file://no-pixbuf-csource.patch;patch=1"
EXTRA_OECONF = "--disable-gtk-doc"
diff --git a/packages/gnome/libgnomeui_2.16.1.bb b/packages/gnome/libgnomeui_2.16.1.bb
index 8f3e0a725c..ca299d8cac 100644
--- a/packages/gnome/libgnomeui_2.16.1.bb
+++ b/packages/gnome/libgnomeui_2.16.1.bb
@@ -1,14 +1,19 @@
LICENSE = "GPL"
SECTION = "x11/gnome/libs"
-PR = "r0"
+PR = "r1"
DEPENDS = "libgnome libgnomecanvas libbonoboui gnome-keyring"
DESCRIPTION = "GNOME User Interface Library"
+DEFAULT_PREFERENCE = "-1"
+
FILES_${PN} += "${libdir}/gtk-2.0/*/filesystems/lib*.so \
${libdir}/libglade/*/lib*.so"
inherit gnome
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/filesystems/*.la ${libdir}/gtk-2.0/*/filesystems/*.a ${libdir}/libglade/*/*.la ${libdir}/libglade/*/*.a"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/filesystems/.debug/ ${libdir}/libglade/*/.debug/"
+
SRC_URI += "file://gnome-stock-pixbufs.h file://no-pixbuf-csource.patch;patch=1"
EXTRA_OECONF = "--disable-gtk-doc"
@@ -18,5 +23,5 @@ do_configure_prepend() {
}
do_stage() {
-autotools_stage_all
+ autotools_stage_all
}
diff --git a/packages/gnome/libgnomeui_2.18.1.bb b/packages/gnome/libgnomeui_2.18.1.bb
new file mode 100644
index 0000000000..6cde2362d2
--- /dev/null
+++ b/packages/gnome/libgnomeui_2.18.1.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "GNOME User Interface Library"
+LICENSE = "GPL"
+SECTION = "x11/gnome/libs"
+DEPENDS = "libgnome libgnomecanvas libbonoboui gnome-keyring"
+
+inherit gnome
+
+FILES_${PN} += "${libdir}/gtk-2.0/*/filesystems/lib*.so \
+ ${libdir}/libglade/*/lib*.so \
+ ${datadir}/pixmaps/gnome-about-logo.png"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/filesystems/*.la ${libdir}/gtk-2.0/*/filesystems/*.a ${libdir}/libglade/*/*.la ${libdir}/libglade/*/*.a"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/filesystems/.debug/ ${libdir}/libglade/*/.debug/"
+
+SRC_URI += "file://gnome-stock-pixbufs.h file://no-pixbuf-csource.patch;patch=1"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/gnome-stock-pixbufs.h ${S}/libgnomeui/pixmaps/gnome-stock-pixbufs.h
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/gnome/libwnck_2.13.5.bb b/packages/gnome/libwnck_2.13.5.bb
new file mode 100644
index 0000000000..1830a7540a
--- /dev/null
+++ b/packages/gnome/libwnck_2.13.5.bb
@@ -0,0 +1,10 @@
+LICENSE = "LGPL"
+DEPENDS = "gtk+"
+DESCRIPTION = "Window navigation construction toolkit"
+HOMEPAGE = ""
+
+inherit gnome
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/gnu-config/gnu-config/avr32.patch b/packages/gnu-config/gnu-config/avr32.patch
new file mode 100644
index 0000000000..43efcd8a2e
--- /dev/null
+++ b/packages/gnu-config/gnu-config/avr32.patch
@@ -0,0 +1,20 @@
+--- /tmp/config.sub 2007-06-01 15:29:41.000000000 +0200
++++ config/config.sub 2007-06-01 15:58:50.005251000 +0200
+@@ -231,7 +231,7 @@
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+@@ -305,7 +305,7 @@
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+- | avr-* \
++ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
diff --git a/packages/gnu-config/gnu-config_20050701.bb b/packages/gnu-config/gnu-config_20050701.bb
index 2066014adf..2f1b6eb785 100644
--- a/packages/gnu-config/gnu-config_20050701.bb
+++ b/packages/gnu-config/gnu-config_20050701.bb
@@ -6,10 +6,11 @@ INHIBIT_DEFAULT_DEPS = "1"
FIXEDSRCDATE = "${@bb.data.getVar('FILE', d, 1).split('_')[-1].split('.')[0]}"
PV = "0.1+cvs${FIXEDSRCDATE}"
-PR = "r4"
+PR = "r5"
SRC_URI = "cvs://anonymous@cvs.sv.gnu.org/cvsroot/config;module=config;method=pserver;date=${FIXEDSRCDATE} \
file://config-guess-uclibc.patch;patch=1 \
+ file://avr32.patch;patch=1 \
file://gnu-configize.in"
S = "${WORKDIR}/config"
diff --git a/packages/libxfce4mcs/.mtn2git_empty b/packages/gnuchess/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libxfce4mcs/.mtn2git_empty
+++ b/packages/gnuchess/.mtn2git_empty
diff --git a/packages/gnuchess/gnuchess_5.05.bb b/packages/gnuchess/gnuchess_5.05.bb
new file mode 100644
index 0000000000..d0536c3f84
--- /dev/null
+++ b/packages/gnuchess/gnuchess_5.05.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Gnuchess is a chess playing engine."
+HOMEPAGE = "http://www.gnu.org/software/chess/"
+SECTION = "console"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "${GNU_MIRROR}/chess/${PN}-${PV}.tar.gz"
+S = "${WORKDIR}/chess"
+
+inherit autotools
diff --git a/packages/gnumeric/gnumeric_1.6.3.bb b/packages/gnumeric/gnumeric_1.6.3.bb
index c41b971530..9c757fb7ff 100644
--- a/packages/gnumeric/gnumeric_1.6.3.bb
+++ b/packages/gnumeric/gnumeric_1.6.3.bb
@@ -4,6 +4,8 @@ S = "${WORKDIR}/gnumeric-${PV}"
DEPENDS = "libgsf gtk+ libxml2 goffice libglade libart-lgpl intltool-native libgnomecanvas libgnomeprint libgnomeprintui libbonoboui"
DESCRIPTION = "Gnumeric spreadsheet for GNOME"
+PR = "r1"
+
inherit gnome flow-lossage
SRC_URI += "file://remove-docs.patch;patch=1"
@@ -12,6 +14,7 @@ EXTRA_OECONF=" --without-perl "
PACKAGES_DYNAMIC = "gnumeric-plugin-*"
+FILES_${PN}-dbg += "${libdir}/gnumeric/1.6.3/plugins/*/.debug"
FILES_gnumeric_append = " /usr/lib/libspreadsheet-${PV}.so "
python populate_packages_prepend () {
diff --git a/packages/gnupg/gnupg-1.4.0/15_free_caps.patch b/packages/gnupg/gnupg-1.4.0/15_free_caps.patch
deleted file mode 100644
index 20949a7d49..0000000000
--- a/packages/gnupg/gnupg-1.4.0/15_free_caps.patch
+++ /dev/null
@@ -1,93 +0,0 @@
---- /home/weasel/tmp/debian-gpg/gnupg-1.2.5/g10/status.c 2004-07-21 09:59:45.000000000 +0200
-+++ gnupg-1.2.5/g10/status.c 2004-08-01 20:07:42.071690680 +0200
-@@ -346,6 +346,9 @@
- {
- char buf[100];
- struct shmid_ds shmds;
-+#ifdef USE_CAPABILITIES
-+ cap_t caps;
-+#endif
-
- #ifndef IPC_RMID_DEFERRED_RELEASE
- atexit( remove_shmid );
-@@ -371,7 +374,9 @@
- (unsigned)shm_size/1024, shm_area, shm_id );
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- /* (need the cast for Solaris with Sun's workshop compilers) */
- if ( mlock ( (char*)shm_area, shm_size) )
-@@ -380,7 +385,9 @@
- else
- shm_is_locked = 1;
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- }
-
-@@ -407,7 +414,9 @@
-
- if( lock_mem ) {
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- #ifdef IPC_HAVE_SHM_LOCK
- if ( shmctl (shm_id, SHM_LOCK, 0) )
-@@ -419,7 +428,9 @@
- log_info("Locking shared memory %d failed: No way to do it\n", shm_id );
- #endif
- #ifdef USE_CAPABILITIES
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
- #endif
- }
-
---- /home/weasel/tmp/debian-gpg/gnupg-1.2.5/util/secmem.c 2004-02-24 17:06:58.000000000 +0100
-+++ gnupg-1.2.5/util/secmem.c 2004-08-01 20:08:10.873412378 +0200
-@@ -97,12 +97,18 @@
- {
- #if defined(USE_CAPABILITIES) && defined(HAVE_MLOCK)
- int err;
-+ cap_t caps;
-+
-+ caps = cap_from_text("cap_ipc_lock=ep");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
-- cap_set_proc( cap_from_text("cap_ipc_lock+ep") );
- err = mlock( p, n );
- if( err && errno )
- err = errno;
-- cap_set_proc( cap_from_text("cap_ipc_lock+p") );
-+ caps = cap_from_text("cap_ipc_lock=p");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
- if( err ) {
- if( errno != EPERM
-@@ -301,8 +307,12 @@
- if( !n ) {
- #ifndef __riscos__
- #ifdef USE_CAPABILITIES
-+ cap_t caps;
-+
- /* drop all capabilities */
-- cap_set_proc( cap_from_text("all-eip") );
-+ caps = cap_from_text("all-eip");
-+ cap_set_proc( caps );
-+ cap_free( caps );
-
- #elif !defined(HAVE_DOSISH_SYSTEM)
- uid_t uid;
diff --git a/packages/gnupg/gnupg-1.4.0/16_min_privileges.patch b/packages/gnupg/gnupg-1.4.0/16_min_privileges.patch
deleted file mode 100644
index b29233b33b..0000000000
--- a/packages/gnupg/gnupg-1.4.0/16_min_privileges.patch
+++ /dev/null
@@ -1,68 +0,0 @@
---- gnupg-1.4.0/g10/g10.c 2004-12-16 09:47:36.000000000 +0000
-+++ /tmp/dpep.O5S02c/gnupg-1.4.0/g10/g10.c 2005-02-03 23:31:40.645873299 +0000
-@@ -69,6 +69,11 @@
- #endif
-
-
-+#ifdef USE_CAPABILITIES
-+#include <sys/capability.h>
-+#include <sys/prctl.h>
-+#endif
-+
- enum cmd_and_opt_values
- {
- aNull = 0,
-@@ -1618,6 +1623,10 @@
- #ifdef USE_SHM_COPROCESSING
- ulong requested_shm_size=0;
- #endif
-+#ifdef USE_CAPABILITIES
-+ uid_t curr_uid;
-+ cap_t caps;
-+#endif
-
- #ifdef __riscos__
- opt.lock_once = 1;
-@@ -1629,6 +1638,33 @@
- * when adding any stuff between here and the call to
- * secmem_init() somewhere after the option parsing
- */
-+
-+ /* if we use capabilities and run as root, we can immediately setuid back
-+ * to the normal user and only keep CAP_IPC_LOCK until the shared memory is
-+ * set up.
-+ */
-+#ifdef USE_CAPABILITIES
-+ curr_uid = getuid();
-+ if( curr_uid && !geteuid() ) { /* we are setuid root */
-+ if( prctl( PR_SET_KEEPCAPS, 1, 0, 0, 0 ) ) {
-+ perror( "main(): could not keep capabilities" );
-+ return -100;
-+ }
-+
-+ if( setuid( curr_uid ) ) {
-+ perror( "main(): could not set user id" );
-+ return -100;
-+ }
-+
-+ caps = cap_from_text( "cap_ipc_lock=p" );
-+ if( cap_set_proc( caps ) ) {
-+ perror( "main(): could not install capabilities" );
-+ return -100;
-+ }
-+ cap_free( caps );
-+ }
-+#endif
-+
- log_set_name("gpg");
- secure_random_alloc(); /* put random number into secure memory */
- may_coredump = disable_core_dumps();
-@@ -1747,7 +1783,7 @@
- }
- #endif
- /* initialize the secure memory. */
-- got_secmem=secmem_init( 32768 );
-+ got_secmem=secmem_init( 32768 ); /* this will drop all remaining privileges */
- maybe_setuid = 0;
- /* Okay, we are now working under our real uid */
-
diff --git a/packages/gnupg/gnupg-1.4.0/18_ca_po_update.patch b/packages/gnupg/gnupg-1.4.0/18_ca_po_update.patch
deleted file mode 100644
index cb7d46b087..0000000000
--- a/packages/gnupg/gnupg-1.4.0/18_ca_po_update.patch
+++ /dev/null
@@ -1,6430 +0,0 @@
---- gnupg-1.4.0/po/ca.po 2004-12-16 09:57:09.000000000 +0000
-+++ /tmp/dpep.nbDh2k/gnupg-1.4.0/po/ca.po 2005-02-05 00:49:28.000000000 +0000
-@@ -1,44 +1,44 @@
--# Missatges de gnupg en catal�.
--# Copyright � 2001, 2002, 2003 Free Software Foundation, Inc.
--# Carles Sadurn� Anguita <sadurni@jazzfree.com>, 2001.
--# Jordi Mallach <jordi@gnu.org>, 2001, 2002, 2003.
-+# Missatges de gnupg en català.
-+# Copyright © 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-+# Carles Sadurní Anguita <sadurni@jazzfree.com>, 2001.
-+# Jordi Mallach <jordi@gnu.org>, 2001, 2002, 2003, 2005.
- #
- # Coses (jm):
--# ID d'usuari �s mascul�? Hi ha una mescla...
--# (ivb: ID == identificador -> mascul�)
-+# ID d'usuari és masculí? Hi ha una mescla...
-+# (ivb: ID == identificador -> masculí)
- # Canviar ID -> ID d'usuari
- # Xifratge vs. Xifrat
--# (ivb: xifratge -> acci�, xifrat -> adjectiu)
-+# (ivb: xifratge -> acció, xifrat -> adjectiu)
- # + coses (ivb):
--# - Algunes frases incompletes �x desconegut� -> �x �s desconegut�.
--# - �algoritme� o �algorisme�? (ambd�s s�n correctes)
-+# - Algunes frases incompletes «x desconegut» -> «x és desconegut».
-+# - «algoritme» o «algorisme»? (ambdós són correctes)
- # - digest -> resum
--# - �anell� o �clauer�? (key ring -> clauer)
-+# - «anell» o «clauer»? (key ring -> clauer)
- # - bug -> error? (del recull)
--# - Crec q uses m�s �signatura� q �firma�; unifique.
--# - Usar maj�scules x ressaltar (com original)?
-+# - Crec q uses més «signatura» q «firma»; unifique.
-+# - Usar majúscules x ressaltar (com original)?
- # - Hi ha cert desordre en les cometes ;)
--# - Frases �ndies completades.
--# - Algunes incoher�ncies: error {en la lectura,en llegir,mentre es llegia}
-+# - Frases índies completades.
-+# - Algunes incoherències: error {en la lectura,en llegir,mentre es llegia}
- # - Probablement he clavat la pota en tots els Photo ID :P
--# - Nom�s es maneja amb les mans.
--# - sapigueu -> sapieu? (x coher�ncia)
-+# - Només es maneja amb les mans.
-+# - sapigueu -> sapieu? (x coherència)
- msgid ""
- msgstr ""
--"Project-Id-Version: gnupg 1.2.4rc\n"
-+"Project-Id-Version: gnupg 1.4.0\n"
- "Report-Msgid-Bugs-To: gnupg-i18n@gnupg.org\n"
- "POT-Creation-Date: 2004-12-16 10:56+0100\n"
--"PO-Revision-Date: 2003-12-05 19:15+0100\n"
-+"PO-Revision-Date: 2005-02-04 02:04+0100\n"
- "Last-Translator: Jordi Mallach <jordi@gnu.org>\n"
- "Language-Team: Catalan <ca@dodds.net>\n"
- "MIME-Version: 1.0\n"
--"Content-Type: text/plain; charset=ISO-8859-1\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
-
- #: cipher/primegen.c:120
--#, fuzzy, c-format
-+#, c-format
- msgid "can't gen prime with pbits=%u qbits=%u\n"
--msgstr "no s'ha pogut generar un prim amb menys de %d bits\n"
-+msgstr "no s'ha pogut generar un prim amb pbits=%u qbits=%u\n"
-
- #: cipher/primegen.c:311
- #, c-format
-@@ -47,7 +47,7 @@
-
- #: cipher/random.c:163
- msgid "no entropy gathering module detected\n"
--msgstr "no s'ha trobat cap m�dul d'acumulaci� d'entropia\n"
-+msgstr "no s'ha trobat cap mòdul d'acumulació d'entropia\n"
-
- #: cipher/random.c:387 g10/card-util.c:613 g10/card-util.c:682
- #: g10/dearmor.c:60 g10/dearmor.c:109 g10/encode.c:181 g10/encode.c:488
-@@ -58,32 +58,31 @@
- #: g10/tdbio.c:600
- #, c-format
- msgid "can't open `%s': %s\n"
--msgstr "no s'ha pogut obrir �%s�: %s\n"
-+msgstr "no s'ha pogut obrir «%s»: %s\n"
-
- #: cipher/random.c:391
- #, c-format
- msgid "can't stat `%s': %s\n"
--msgstr "no es pot fer stat de �%s�: %s\n"
-+msgstr "no es pot fer stat de «%s»: %s\n"
-
--# Descartar, deixar passar... ignorar �s un anglicisme. ivb
-+# Descartar, deixar passar... ignorar és un anglicisme. ivb
- #: cipher/random.c:396
- #, c-format
- msgid "`%s' is not a regular file - ignored\n"
--msgstr "�%s� no �s un fitxer regular: es descarta\n"
-+msgstr "«%s» no és un fitxer regular: es descarta\n"
-
- #: cipher/random.c:401
- msgid "note: random_seed file is empty\n"
--msgstr "nota: el fitxer random_seed �s buit\n"
-+msgstr "nota: el fitxer random_seed és buit\n"
-
- #: cipher/random.c:407
- msgid "WARNING: invalid size of random_seed file - not used\n"
--msgstr ""
--"AV�S: el tamany del fitxer random_seed no �s v�lid - no s'usar�\n"
-+msgstr "AVÃS: el tamany del fitxer random_seed no és vàlid - no s'usarà\n"
-
- #: cipher/random.c:415
- #, c-format
- msgid "can't read `%s': %s\n"
--msgstr "no s'ha pogut llegir �%s�: %s\n"
-+msgstr "no s'ha pogut llegir «%s»: %s\n"
-
- #: cipher/random.c:453
- msgid "note: random_seed file not updated\n"
-@@ -94,22 +93,22 @@
- #: g10/openfile.c:348 g10/sign.c:779 g10/sign.c:1037 g10/tdbio.c:535
- #, c-format
- msgid "can't create `%s': %s\n"
--msgstr "no s'ha pogut crear �%s�: %s\n"
-+msgstr "no s'ha pogut crear «%s»: %s\n"
-
- #: cipher/random.c:480
- #, c-format
- msgid "can't write `%s': %s\n"
--msgstr "no s'ha pogut escriure �%s�: %s\n"
-+msgstr "no s'ha pogut escriure «%s»: %s\n"
-
- # No em passe! ;) ivb
- #: cipher/random.c:483
- #, c-format
- msgid "can't close `%s': %s\n"
--msgstr "no s'ha pogut tancar �%s�: %s\n"
-+msgstr "no s'ha pogut tancar «%s»: %s\n"
-
- #: cipher/random.c:728
- msgid "WARNING: using insecure random number generator!!\n"
--msgstr "AV�S: esteu usant un generador de nombres aleatoris insegur!!\n"
-+msgstr "AVÃS: esteu usant un generador de nombres aleatoris insegur!!\n"
-
- #: cipher/random.c:729
- msgid ""
-@@ -119,8 +118,8 @@
- "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
- "\n"
- msgstr ""
--"El generador de nombres aleatoris �s nom�s un peda�\n"
--"per a que funcioni - de cap manera �s un GNA fort!\n"
-+"El generador de nombres aleatoris és només un pedaç\n"
-+"per a que funcioni - de cap manera és un GNA fort!\n"
- "\n"
- "NO UTILITZEU CAP DADA GENERADA PER AQUEST PROGRAMA!!\n"
- "\n"
-@@ -132,7 +131,7 @@
- "of the entropy.\n"
- msgstr ""
- "Si us plau, espereu mentre es genera entropia. Feu alguna tasca si\n"
--"vos ajuda no avorrir-vos, ja que ajudar� a la qualitat de la entropia.\n"
-+"vos ajuda no avorrir-vos, ja que ajudarà a la qualitat de la entropia.\n"
-
- #: cipher/rndlinux.c:134
- #, c-format
-@@ -143,18 +142,17 @@
- msgstr ""
- "\n"
- "No hi ha prou bytes aleatoris. Per favor, feu alguna altra cosa per que el\n"
--"sistema tinga oportunitat de recollir m�s entropia. (Calen %d bytes "
--"m�s)\n"
-+"sistema tinga oportunitat de recollir més entropia. (Calen %d bytes més)\n"
-
- #: g10/app-openpgp.c:539
--#, fuzzy, c-format
-+#, c-format
- msgid "failed to store the fingerprint: %s\n"
--msgstr "no s'ha pogut inicialitzar la base de dades de confian�a: %s\n"
-+msgstr "no s'ha pogut emmagatzemar l'empremta digital: %s\n"
-
- #: g10/app-openpgp.c:552
- #, fuzzy, c-format
- msgid "failed to store the creation date: %s\n"
--msgstr "no s'ha pogut reconstruir la mem�ria cau de l'anell: %s\n"
-+msgstr "no s'ha pogut reconstruir la memòria cau de l'anell: %s\n"
-
- #: g10/app-openpgp.c:776 g10/app-openpgp.c:868 g10/app-openpgp.c:1379
- #, c-format
-@@ -204,22 +202,22 @@
- #: g10/app-openpgp.c:1025
- #, fuzzy, c-format
- msgid "error getting new PIN: %s\n"
--msgstr "error en la creaci� de la contrasenya: %s\n"
-+msgstr "error en crear «%s»: %s\n"
-
- #: g10/app-openpgp.c:1091 g10/app-openpgp.c:1233
- #, fuzzy
- msgid "error reading application data\n"
--msgstr "s'ha produ�t un error en llegir el bloc de claus: %s\n"
-+msgstr "s'ha produït un error en llegir el bloc de claus: %s\n"
-
- #: g10/app-openpgp.c:1098 g10/app-openpgp.c:1240
- #, fuzzy
- msgid "error reading fingerprint DO\n"
--msgstr "%s: error en llegir el registre lliure: %s\n"
-+msgstr "error: l'empremta digital és invàlida\n"
-
- #: g10/app-openpgp.c:1107
- #, fuzzy
- msgid "key already exists\n"
--msgstr "�%s� ja est� comprimida\n"
-+msgstr "«%s» ja està comprimida\n"
-
- #: g10/app-openpgp.c:1111
- msgid "existing key will be replaced\n"
-@@ -237,12 +235,12 @@
- #: g10/app-openpgp.c:1138
- #, fuzzy
- msgid "generating key failed\n"
--msgstr "no s'ha pogut eliminar el bloc de claus: %s\n"
-+msgstr "La generació de claus ha fallat: %s\n"
-
- #: g10/app-openpgp.c:1141
- #, fuzzy, c-format
- msgid "key generation completed (%d seconds)\n"
--msgstr "La generaci� de claus ha fallat: %s\n"
-+msgstr "La generació de claus ha fallat: %s\n"
-
- #: g10/app-openpgp.c:1147 g10/app-openpgp.c:1878
- msgid "response does not contain the public key data\n"
-@@ -271,19 +269,19 @@
- msgstr ""
-
- #: g10/app-openpgp.c:1653 g10/app-openpgp.c:1663
--#, fuzzy, c-format
-+#, c-format
- msgid "can't access %s - invalid OpenPGP card?\n"
--msgstr "no s'han trobat dades OpenPGP v�lides.\n"
-+msgstr ""
-
- #: g10/app-openpgp.c:1734
- #, fuzzy, c-format
- msgid "error getting serial number: %s\n"
--msgstr "error en la creaci� de la contrasenya: %s\n"
-+msgstr "error en la creació de la contrasenya: %s\n"
-
- #: g10/app-openpgp.c:1829
- #, fuzzy, c-format
- msgid "failed to store the key: %s\n"
--msgstr "no s'ha pogut inicialitzar la base de dades de confian�a: %s\n"
-+msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n"
-
- #: g10/app-openpgp.c:1871
- #, fuzzy
-@@ -297,18 +295,18 @@
-
- #: g10/armor.c:346
- msgid "invalid armor header: "
--msgstr "la cap�alera d'armadura �s inv�lida: "
-+msgstr "la capçalera d'armadura és invàlida: "
-
- #: g10/armor.c:353
- msgid "armor header: "
--msgstr "cap�alera d'armadura: "
-+msgstr "capçalera d'armadura: "
-
- #: g10/armor.c:364
- msgid "invalid clearsig header\n"
--msgstr "la cap�alera de signatura clara �s inv�lida\n"
-+msgstr "la capçalera de signatura clara és invàlida\n"
-
--# �s un missatge d'error? ivb
--# �Anidada� �s un castellanisme. Niuades? Imbricades (SC)?? ivb
-+# És un missatge d'error? ivb
-+# «Anidada» és un castellanisme. Niuades? Imbricades (SC)?? ivb
- #: g10/armor.c:416
- msgid "nested clear text signatures\n"
- msgstr "signatures en text pla imbricades\n"
-@@ -321,12 +319,12 @@
-
- #: g10/armor.c:563
- msgid "invalid dash escaped line: "
--msgstr "la l�nia escapada amb gui� �s inv�lida: "
-+msgstr "la línia escapada amb guió és invàlida: "
-
- #: g10/armor.c:715 g10/armor.c:1300
- #, fuzzy, c-format
- msgid "invalid radix64 character %02X skipped\n"
--msgstr "el car�cter radix64 %02x inv�lid s'ha om�s\n"
-+msgstr "el caràcter radix64 %02x invàlid s'ha omés\n"
-
- #: g10/armor.c:758
- msgid "premature eof (no CRC)\n"
-@@ -348,84 +346,79 @@
- #: g10/armor.c:824
- #, fuzzy
- msgid "premature eof (in trailer)\n"
--msgstr "f� de fitxer prematur (al final)\n"
-+msgstr "fí de fitxer prematur (al final)\n"
-
- #: g10/armor.c:828
- msgid "error in trailer line\n"
--msgstr "error en l'�ltima l�nia\n"
-+msgstr "error en l'última línia\n"
-
- #: g10/armor.c:1115
- msgid "no valid OpenPGP data found.\n"
--msgstr "no s'han trobat dades OpenPGP v�lides.\n"
-+msgstr "no s'han trobat dades OpenPGP vàlides.\n"
-
- #: g10/armor.c:1120
- #, c-format
- msgid "invalid armor: line longer than %d characters\n"
--msgstr ""
--"l'armadura �s inv�lida: la l�nia �s m�s llarga que %d car�cters\n"
-+msgstr "l'armadura és invàlida: la línia és més llarga que %d caràcters\n"
-
- #: g10/armor.c:1124
- msgid ""
- "quoted printable character in armor - probably a buggy MTA has been used\n"
- msgstr ""
--"hi ha un car�cter �quoted printable� en l'armadura - probablement s'ha "
-+"hi ha un caràcter «quoted printable» en l'armadura - probablement s'ha "
- "utilitzat un MTA amb errors\n"
-
- #: g10/card-util.c:58 g10/card-util.c:282
- #, fuzzy, c-format
- msgid "OpenPGP card not available: %s\n"
--msgstr "la clau secreta no est� disponible"
-+msgstr "la clau secreta no està disponible"
-
- #: g10/card-util.c:63
- #, c-format
- msgid "OpenPGP card no. %s detected\n"
- msgstr ""
-
--# Dest�s? ivb
--# Desat�s, s�. jm
-+# Destès? ivb
-+# Desatès, sí. jm
- #: g10/card-util.c:70 g10/card-util.c:1285 g10/delkey.c:120 g10/keyedit.c:1353
- #: g10/keygen.c:2432 g10/revoke.c:216 g10/revoke.c:417
- #, fuzzy
- msgid "can't do this in batch mode\n"
--msgstr "no es pot fet aix� en mode desat�s\n"
-+msgstr "no es pot fet això en mode desatès\n"
-
- #: g10/card-util.c:94 g10/card-util.c:1065 g10/card-util.c:1147
- #: g10/keyedit.c:412 g10/keyedit.c:433 g10/keyedit.c:447 g10/keygen.c:1298
- #: g10/keygen.c:1363
- msgid "Your selection? "
--msgstr "Seleccioneu: "
-+msgstr "La vostra selecció? "
-
- #: g10/card-util.c:194 g10/card-util.c:244
- msgid "[not set]"
--msgstr ""
-+msgstr "[no establert]"
-
- #: g10/card-util.c:378
--#, fuzzy
- msgid "male"
--msgstr "enable"
-+msgstr "home"
-
- #: g10/card-util.c:379
--#, fuzzy
- msgid "female"
--msgstr "enable"
-+msgstr "dóna"
-
- #: g10/card-util.c:379
--#, fuzzy
- msgid "unspecified"
--msgstr "No s'ha especificat cap ra�"
-+msgstr "no especificat"
-
--# G�nere? Nombre? Passat, futur? ivb
--# Probablement �s una clau, femen�. jm
-+# Gènere? Nombre? Passat, futur? ivb
-+# Probablement és una clau, femení. jm
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: g10/card-util.c:406
--#, fuzzy
- msgid "not forced"
--msgstr "no processat"
-+msgstr "no forçat"
-
- #: g10/card-util.c:406
- msgid "forced"
--msgstr ""
-+msgstr "forçat"
-
- #: g10/card-util.c:458
- msgid "Error: Only plain ASCII is currently allowed.\n"
-@@ -455,7 +448,7 @@
- #: g10/card-util.c:521
- #, fuzzy
- msgid "URL to retrieve public key: "
--msgstr "no hi ha cap clau p�blica corresponent: %s\n"
-+msgstr "no hi ha cap clau pública corresponent: %s\n"
-
- #: g10/card-util.c:529
- #, c-format
-@@ -465,7 +458,7 @@
- #: g10/card-util.c:622 g10/card-util.c:691 g10/import.c:263
- #, c-format
- msgid "error reading `%s': %s\n"
--msgstr "error en la lectura de �%s�: %s\n"
-+msgstr "error en la lectura de «%s»: %s\n"
-
- #: g10/card-util.c:630
- msgid "Login data (account name): "
-@@ -488,17 +481,17 @@
- #: g10/card-util.c:729
- #, fuzzy
- msgid "Language preferences: "
--msgstr "prefer�ncies actualitzades"
-+msgstr "preferències actualitzades"
-
- #: g10/card-util.c:737
- #, fuzzy
- msgid "Error: invalid length of preference string.\n"
--msgstr "hi ha un car�cter inv�lid en la cadena de prefer�ncia\n"
-+msgstr "hi ha un caràcter invàlid en la cadena de preferència\n"
-
- #: g10/card-util.c:746
- #, fuzzy
- msgid "Error: invalid characters in preference string.\n"
--msgstr "hi ha un car�cter inv�lid en la cadena de prefer�ncia\n"
-+msgstr "hi ha un caràcter invàlid en la cadena de preferència\n"
-
- #: g10/card-util.c:767
- msgid "Sex ((M)ale, (F)emale or space): "
-@@ -507,7 +500,7 @@
- #: g10/card-util.c:781
- #, fuzzy
- msgid "Error: invalid response.\n"
--msgstr "error: l'empremta digital �s inv�lida\n"
-+msgstr "error: l'empremta digital és invàlida\n"
-
- #: g10/card-util.c:802
- #, fuzzy
-@@ -517,23 +510,22 @@
- #: g10/card-util.c:825
- #, fuzzy
- msgid "Error: invalid formatted fingerprint.\n"
--msgstr "error: l'empremta digital �s inv�lida\n"
-+msgstr "error: l'empremta digital és invàlida\n"
-
- #: g10/card-util.c:873
- #, fuzzy, c-format
- msgid "key operation not possible: %s\n"
--msgstr "La generaci� de claus ha fallat: %s\n"
-+msgstr "La generació de claus ha fallat: %s\n"
-
- #: g10/card-util.c:874
- #, fuzzy
- msgid "not an OpenPGP card"
--msgstr "no s'han trobat dades OpenPGP v�lides.\n"
-+msgstr "no s'han trobat dades OpenPGP vàlides.\n"
-
- #: g10/card-util.c:883
- #, fuzzy, c-format
- msgid "error getting current key info: %s\n"
--msgstr ""
--"s'ha produ�t un error mentre s'escrivia l'anell secret �%s�: %s\n"
-+msgstr "s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s\n"
-
- #: g10/card-util.c:966
- msgid "Replace existing key? (y/N) "
-@@ -561,14 +553,13 @@
- msgstr "Seleccioneu quin tipus de clau voleu:\n"
-
- #: g10/card-util.c:1058 g10/card-util.c:1138
--#, fuzzy
- msgid " (1) Signature key\n"
--msgstr "Aquesta signatura va caducar el %s\n"
-+msgstr ""
-
- #: g10/card-util.c:1059 g10/card-util.c:1140
- #, fuzzy
- msgid " (2) Encryption key\n"
--msgstr " (%d) RSA (nom�s xifrar)\n"
-+msgstr " (%d) RSA (només xifrar)\n"
-
- #: g10/card-util.c:1060 g10/card-util.c:1142
- msgid " (3) Authentication key\n"
-@@ -577,39 +568,39 @@
- #: g10/card-util.c:1076 g10/card-util.c:1158 g10/keyedit.c:907
- #: g10/keygen.c:1402 g10/revoke.c:642
- msgid "Invalid selection.\n"
--msgstr "La selecci� �s inv�lida.\n"
-+msgstr "La selecció és invàlida.\n"
-
- #: g10/card-util.c:1135
- #, fuzzy
- msgid "Please select where to store the key:\n"
--msgstr "Seleccioneu la ra� de la revocaci�:\n"
-+msgstr "Seleccioneu la raó de la revocació:\n"
-
- #: g10/card-util.c:1170
- #, fuzzy
- msgid "unknown key protection algorithm\n"
--msgstr "l'algorisme de protecci� �s desconegut\n"
-+msgstr "l'algorisme de protecció és desconegut\n"
-
- #: g10/card-util.c:1175
- #, fuzzy
- msgid "secret parts of key are not available\n"
--msgstr "Les parts secretes de la clau prim�ria no estan disponibles.\n"
-+msgstr "Les parts secretes de la clau primària no estan disponibles.\n"
-
- #: g10/card-util.c:1180
- #, fuzzy
- msgid "secret key already stored on a card\n"
--msgstr "es descarta: la clau secreta ja �s present\n"
-+msgstr "es descarta: la clau secreta ja és present\n"
-
- #: g10/card-util.c:1250 g10/keyedit.c:1285
- msgid "quit this menu"
--msgstr "ix del men�"
-+msgstr "ix del menú"
-
- #: g10/card-util.c:1252
- #, fuzzy
- msgid "show admin commands"
- msgstr "les ordres entren en conflicte\n"
-
--# �pantalla� o �ajuda�? ivb
--# �ajuda�, evidentment. jm
-+# «pantalla» o «ajuda»? ivb
-+# «ajuda», evidentment. jm
- #: g10/card-util.c:1253 g10/keyedit.c:1288
- msgid "show this help"
- msgstr "mostra aquesta ajuda"
-@@ -617,7 +608,7 @@
- #: g10/card-util.c:1255
- #, fuzzy
- msgid "list all available data"
--msgstr "La clau �s disponible en: "
-+msgstr "La clau és disponible en: "
-
- #: g10/card-util.c:1258
- msgid "change card holder's name"
-@@ -639,7 +630,7 @@
- #: g10/card-util.c:1262
- #, fuzzy
- msgid "change the language preferences"
--msgstr "canvia la confian�a"
-+msgstr "canvia la confiança"
-
- #: g10/card-util.c:1263
- msgid "change card holder's sex"
-@@ -673,18 +664,16 @@
- msgstr "les ordres entren en conflicte\n"
-
- #: g10/card-util.c:1384
--#, fuzzy
- msgid "Admin commands are allowed\n"
--msgstr "les ordres entren en conflicte\n"
-+msgstr ""
-
- #: g10/card-util.c:1386
--#, fuzzy
- msgid "Admin commands are not allowed\n"
--msgstr "s'est� escrivint la clau secreta a �%s�\n"
-+msgstr ""
-
- #: g10/card-util.c:1455 g10/keyedit.c:1928
- msgid "Invalid command (try \"help\")\n"
--msgstr "L'ordre no �s v�lida (proveu �help�)\n"
-+msgstr "L'ordre no és vàlida (proveu «help»)\n"
-
- #: g10/cardglue.c:287
- msgid "Please insert the card and hit return or enter 'c' to cancel: "
-@@ -704,12 +693,12 @@
- #: g10/cardglue.c:687
- #, fuzzy
- msgid "Enter New Admin PIN: "
--msgstr "Introdu�u el nom d'usuari: "
-+msgstr "Introduïu el nom d'usuari: "
-
- #: g10/cardglue.c:688
- #, fuzzy
- msgid "Enter New PIN: "
--msgstr "Introdu�u el nom d'usuari: "
-+msgstr "Introduïu el nom d'usuari: "
-
- #: g10/cardglue.c:689
- msgid "Enter Admin PIN: "
-@@ -718,7 +707,7 @@
- #: g10/cardglue.c:690
- #, fuzzy
- msgid "Enter PIN: "
--msgstr "Introdu�u el nom d'usuari: "
-+msgstr "Introduïu el nom d'usuari: "
-
- #: g10/cardglue.c:704
- #, fuzzy
-@@ -734,7 +723,7 @@
- #: g10/keyring.c:662 g10/verify.c:101 g10/verify.c:154
- #, c-format
- msgid "can't open `%s'\n"
--msgstr "no s'ha pogut obrir �%s�\n"
-+msgstr "no s'ha pogut obrir «%s»\n"
-
- #: g10/decrypt.c:104 g10/encode.c:859
- msgid "--output doesn't work for this command\n"
-@@ -744,24 +733,24 @@
- #: g10/revoke.c:226
- #, fuzzy, c-format
- msgid "key \"%s\" not found: %s\n"
--msgstr "no s'ha trobat la clau �%s�: %s\n"
-+msgstr "no s'ha trobat la clau «%s»: %s\n"
-
- #: g10/delkey.c:82 g10/export.c:198 g10/keyserver.c:1435 g10/revoke.c:232
- #: g10/revoke.c:439
- #, c-format
- msgid "error reading keyblock: %s\n"
--msgstr "s'ha produ�t un error en llegir el bloc de claus: %s\n"
-+msgstr "s'ha produït un error en llegir el bloc de claus: %s\n"
-
- #: g10/delkey.c:121 g10/delkey.c:128
- msgid "(unless you specify the key by fingerprint)\n"
- msgstr "(a no ser que especifiqueu la clau per la empremta digital)\n"
-
--# Ah�! Abans �batch� est� tal qual. Cal unificar. ivb
-+# Ahà! Abans «batch» està tal qual. Cal unificar. ivb
- # Fet. jm
- #: g10/delkey.c:127
- #, fuzzy
- msgid "can't do this in batch mode without \"--yes\"\n"
--msgstr "no es pot fer aix� en el mode desat�s sense �--yes�\n"
-+msgstr "no es pot fer això en el mode desatès sense «--yes»\n"
-
- #: g10/delkey.c:139
- #, fuzzy
-@@ -771,7 +760,7 @@
- #: g10/delkey.c:147
- #, fuzzy
- msgid "This is a secret key! - really delete? (y/N) "
--msgstr "�s una clau secreta! Voleu esborrar-la? "
-+msgstr "És una clau secreta! Voleu esborrar-la? "
-
- #: g10/delkey.c:157
- #, c-format
-@@ -780,51 +769,50 @@
-
- #: g10/delkey.c:167
- msgid "ownertrust information cleared\n"
--msgstr "s'ha netejat la informaci� de la confian�a\n"
-+msgstr "s'ha netejat la informació de la confiança\n"
-
- #: g10/delkey.c:195
- #, c-format
- msgid "there is a secret key for public key \"%s\"!\n"
--msgstr "hi ha una clau secreta per a la clau p�blica �%s�!\n"
-+msgstr "hi ha una clau secreta per a la clau pública «%s»!\n"
-
- #: g10/delkey.c:197
- msgid "use option \"--delete-secret-keys\" to delete it first.\n"
--msgstr ""
--"utilitzeu l'opci� �--delete-secret-keys� per a eliminar-la primer.\n"
-+msgstr "utilitzeu l'opció «--delete-secret-keys» per a eliminar-la primer.\n"
-
- #: g10/encode.c:210 g10/sign.c:1186
- #, c-format
- msgid "error creating passphrase: %s\n"
--msgstr "error en la creaci� de la contrasenya: %s\n"
-+msgstr "error en la creació de la contrasenya: %s\n"
-
- #: g10/encode.c:215
- msgid "can't use a symmetric ESK packet due to the S2K mode\n"
--msgstr "no es pot usar un paquet asim�tric ESK al estar en mode S2K\n"
-+msgstr "no es pot usar un paquet asimètric ESK al estar en mode S2K\n"
-
- #: g10/encode.c:228
- #, fuzzy, c-format
- msgid "using cipher %s\n"
--msgstr "Ha fallat el proc�s de signatura: %s\n"
-+msgstr "Ha fallat el procés de signatura: %s\n"
-
- #: g10/encode.c:238 g10/encode.c:558
- #, c-format
- msgid "`%s' already compressed\n"
--msgstr "�%s� ja est� comprimida\n"
-+msgstr "«%s» ja està comprimida\n"
-
- #: g10/encode.c:308 g10/encode.c:604 g10/sign.c:551
- #, c-format
- msgid "WARNING: `%s' is an empty file\n"
--msgstr "AV�S: �%s� �s un fitxer buit\n"
-+msgstr "AVÃS: «%s» és un fitxer buit\n"
-
- #: g10/encode.c:472
- msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
- msgstr ""
--"nom�s podeu xifrar a claus RSA de 2048 bits o menys en el mode --pgp2\n"
-+"només podeu xifrar a claus RSA de 2048 bits o menys en el mode --pgp2\n"
-
- #: g10/encode.c:494
- #, c-format
- msgid "reading from `%s'\n"
--msgstr "s'est� llegint des de �%s�\n"
-+msgstr "s'està llegint des de «%s»\n"
-
- #: g10/encode.c:530
- msgid ""
-@@ -838,8 +826,7 @@
- msgid ""
- "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n"
- msgstr ""
--"for�ar el xifrat asim�tric %s (%d) viola les prefer�ncies del "
--"destinatari\n"
-+"forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n"
-
- #: g10/encode.c:648 g10/sign.c:877
- #, fuzzy, c-format
-@@ -847,15 +834,14 @@
- "WARNING: forcing compression algorithm %s (%d) violates recipient "
- "preferences\n"
- msgstr ""
--"for�ar l'algoritme de compressi� %s (%d) viola les prefer�ncies del "
-+"forçar l'algoritme de compressió %s (%d) viola les preferències del "
- "destinatari\n"
-
- #: g10/encode.c:735
- #, c-format
- msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
- msgstr ""
--"for�ar el xifrat asim�tric %s (%d) viola les prefer�ncies del "
--"destinatari\n"
-+"forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n"
-
- #: g10/encode.c:805 g10/pkclist.c:721 g10/pkclist.c:757
- #, c-format
-@@ -865,7 +851,7 @@
- #: g10/encode.c:832
- #, c-format
- msgid "%s/%s encrypted for: \"%s\"\n"
--msgstr "%s/%s xifrat per a: �%s�\n"
-+msgstr "%s/%s xifrat per a: «%s»\n"
-
- #: g10/encr-data.c:66 g10/mainproc.c:301
- #, c-format
-@@ -877,28 +863,28 @@
- msgid "encrypted with unknown algorithm %d\n"
- msgstr "xifrat amb l'algoritme %d (desconegut)\n"
-
--# �s no-wrap? ivb
-+# És no-wrap? ivb
- # Com? jm
- #: g10/encr-data.c:92
- msgid ""
- "WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
- msgstr ""
--"ATENCI�: el missatge s'ha xifrat amb una clau feble durant el xifratge\n"
--"sim�tric.\n"
-+"ATENCIÓ: el missatge s'ha xifrat amb una clau feble durant el xifratge\n"
-+"simètric.\n"
-
- #: g10/encr-data.c:103
- msgid "problem handling encrypted packet\n"
- msgstr "problema en tractar amb un paquet xifrat\n"
-
--# Execuci� de programes remots, o execuci� remota de programes? jm
-+# Execució de programes remots, o execució remota de programes? jm
- #: g10/exec.c:48
- msgid "no remote program execution supported\n"
--msgstr "no hi ha suport per a l'execuci� remota de programes\n"
-+msgstr "no hi ha suport per a l'execució remota de programes\n"
-
- #: g10/exec.c:184 g10/openfile.c:406
- #, c-format
- msgid "can't create directory `%s': %s\n"
--msgstr "no es pot crear el directori �%s�: %s\n"
-+msgstr "no es pot crear el directori «%s»: %s\n"
-
- #: g10/exec.c:325
- msgid ""
-@@ -917,21 +903,21 @@
- #: g10/exec.c:433
- #, fuzzy, c-format
- msgid "unable to execute program `%s': %s\n"
--msgstr "no s'ha pogut executar %s �%s�: %s\n"
-+msgstr "no s'ha pogut executar %s «%s»: %s\n"
-
- #: g10/exec.c:436
- #, fuzzy, c-format
- msgid "unable to execute shell `%s': %s\n"
--msgstr "no s'ha pogut executar %s �%s�: %s\n"
-+msgstr "no s'ha pogut executar %s «%s»: %s\n"
-
- #: g10/exec.c:521
- #, c-format
- msgid "system error while calling external program: %s\n"
--msgstr "s'ha produ�t un error del sistema en cridar el programa extern: %s\n"
-+msgstr "s'ha produït un error del sistema en cridar el programa extern: %s\n"
-
- #: g10/exec.c:532 g10/exec.c:598
- msgid "unnatural exit of external program\n"
--msgstr "s'ha produ�t una eixida no natural del programa extern\n"
-+msgstr "s'ha produït una eixida no natural del programa extern\n"
-
- #: g10/exec.c:547
- msgid "unable to execute external program\n"
-@@ -945,22 +931,22 @@
- #: g10/exec.c:609 g10/exec.c:616
- #, c-format
- msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n"
--msgstr "AV�S: no s'ha pogut eliminar el fitxer temporal (%s) �%s�: %s\n"
-+msgstr "AVÃS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n"
-
- #: g10/exec.c:621
- #, c-format
- msgid "WARNING: unable to remove temp directory `%s': %s\n"
--msgstr "AV�S: no s'ha pogut eliminar el directori temporal �%s�: %s\n"
-+msgstr "AVÃS: no s'ha pogut eliminar el directori temporal «%s»: %s\n"
-
- #: g10/export.c:182
- #, fuzzy
- msgid "exporting secret keys not allowed\n"
--msgstr "s'est� escrivint la clau secreta a �%s�\n"
-+msgstr "s'està escrivint la clau secreta a «%s»\n"
-
- #: g10/export.c:211
- #, fuzzy, c-format
- msgid "key %s: not protected - skipped\n"
--msgstr "clau %08lX: no est� protegida - es descarta\n"
-+msgstr "clau %08lX: no està protegida - es descarta\n"
-
- #: g10/export.c:219
- #, fuzzy, c-format
-@@ -970,12 +956,11 @@
- #: g10/export.c:384
- #, fuzzy, c-format
- msgid "WARNING: secret key %s does not have a simple SK checksum\n"
--msgstr ""
--"AV�S: la clau secreta %08lX no te una simple suma de comprovaci� SK\n"
-+msgstr "AVÃS: la clau secreta %08lX no te una simple suma de comprovació SK\n"
-
- #: g10/export.c:416
- msgid "WARNING: nothing exported\n"
--msgstr "AV�S: no s'ha exportat res\n"
-+msgstr "AVÃS: no s'ha exportat res\n"
-
- #: g10/g10.c:358
- msgid ""
-@@ -1003,7 +988,7 @@
-
- #: g10/g10.c:365
- msgid "encryption only with symmetric cipher"
--msgstr "xifra nom�s amb xifratge sim�tric"
-+msgstr "xifra només amb xifratge simètric"
-
- #: g10/g10.c:367
- msgid "decrypt data (default)"
-@@ -1021,13 +1006,13 @@
- msgid "list keys and signatures"
- msgstr "llista claus i signatures"
-
--# �de les claus� o �de la clau�? ivb
-+# «de les claus» o «de la clau»? ivb
- #: g10/g10.c:374
- #, fuzzy
- msgid "list and check key signatures"
- msgstr "comprova les signatures de la claus"
-
--# �dactilars� o �digitals�? ivb
-+# «dactilars» o «digitals»? ivb
- #: g10/g10.c:375
- msgid "list keys and fingerprints"
- msgstr "llista claus i empremtes digitals"
-@@ -1042,7 +1027,7 @@
-
- #: g10/g10.c:378
- msgid "remove keys from the public keyring"
--msgstr "elimina claus de l'anell p�blic"
-+msgstr "elimina claus de l'anell públic"
-
- #: g10/g10.c:380
- msgid "remove keys from the secret keyring"
-@@ -1062,7 +1047,7 @@
-
- #: g10/g10.c:384
- msgid "generate a revocation certificate"
--msgstr "genera un certificat de revocaci�"
-+msgstr "genera un certificat de revocació"
-
- #: g10/g10.c:386
- msgid "export keys"
-@@ -1102,7 +1087,7 @@
-
- #: g10/g10.c:408
- msgid "update the trust database"
--msgstr "actualitza la base de dades de confian�a"
-+msgstr "actualitza la base de dades de confiança"
-
- #: g10/g10.c:415
- msgid "|algo [files]|print message digests"
-@@ -1132,17 +1117,17 @@
-
- #: g10/g10.c:435
- msgid "|N|set compress level N (0 disables)"
--msgstr "|N|nivell de compressi� N (0 no comprimeix)"
-+msgstr "|N|nivell de compressió N (0 no comprimeix)"
-
- #: g10/g10.c:440
- msgid "use canonical text mode"
--msgstr "usa el mode de text can�nic"
-+msgstr "usa el mode de text canònic"
-
- #: g10/g10.c:450
- msgid "use as output file"
- msgstr "fitxer d'eixida"
-
--# Un dels dos �s en la llista d'opcions amb --help. Urgh. jm
-+# Un dels dos és en la llista d'opcions amb --help. Urgh. jm
- #: g10/g10.c:452 g10/gpgv.c:67
- msgid "verbose"
- msgstr "detall"
-@@ -1169,11 +1154,11 @@
- "(See the man page for a complete listing of all commands and options)\n"
- msgstr ""
- "@\n"
--"(En la p�gina del man hi ha una llista completa d'ordres i d'opcions)\n"
-+"(En la pàgina del man hi ha una llista completa d'ordres i d'opcions)\n"
-
--# Crec q (A)lice (orig.), (B)ob (dest.), etc. s�n noms usats pel Zimmerman
-+# Crec q (A)lice (orig.), (B)ob (dest.), etc. són noms usats pel Zimmerman
- # en el manual original de PGP. A, B, C... ivb
--# En efecte. Idem per a Mallory m�s endavant. Els deixe com a l'original. jm
-+# En efecte. Idem per a Mallory més endavant. Els deixe com a l'original. jm
- #: g10/g10.c:535
- msgid ""
- "@\n"
-@@ -1200,7 +1185,7 @@
-
- #: g10/g10.c:733
- msgid "Usage: gpg [options] [files] (-h for help)"
--msgstr "Forma d'�s: gpg [opcions] [fitxers] (-h per a veure l'ajuda)"
-+msgstr "Forma d'ús: gpg [opcions] [fitxers] (-h per a veure l'ajuda)"
-
- #: g10/g10.c:736
- msgid ""
-@@ -1210,12 +1195,12 @@
- msgstr ""
- "Sintaxi: gpg [opcions] [fitxers]\n"
- "signa, comprova, xifra o desxifra\n"
--"l'operaci� predeterminada dep�n de les dades introdu�des\n"
-+"l'operació predeterminada depén de les dades introduïdes\n"
-
- # Suportats? ivb
--# A Softcatal� diuen molt �implementat?. jm
--# Precissament acabem de parlar d'�implementat a la llista del GNOME
--# i s'ha dit que �s erroni, igual que �suportat� :) Les alternatives
-+# A Softcatalà diuen molt «implementat». jm
-+# Precissament acabem de parlar d'«implementat a la llista del GNOME
-+# i s'ha dit que és erroni, igual que «suportat» :) Les alternatives
- # encara no m'agraden massa... jm
- #: g10/g10.c:747
- msgid ""
-@@ -1227,7 +1212,7 @@
-
- #: g10/g10.c:750
- msgid "Pubkey: "
--msgstr "Clau p�blica: "
-+msgstr "Clau pública: "
-
- #: g10/g10.c:756 g10/keyedit.c:1965
- msgid "Cipher: "
-@@ -1235,191 +1220,183 @@
-
- #: g10/g10.c:762
- msgid "Hash: "
--msgstr "Dispersi�: "
-+msgstr "Dispersió: "
-
- #: g10/g10.c:768 g10/keyedit.c:2011
- msgid "Compression: "
--msgstr "Compressi�: "
-+msgstr "Compressió: "
-
- #: g10/g10.c:851
- msgid "usage: gpg [options] "
--msgstr "forma d'�s: gpg [opcions] "
-+msgstr "forma d'ús: gpg [opcions] "
-
- #: g10/g10.c:999
- msgid "conflicting commands\n"
- msgstr "les ordres entren en conflicte\n"
-
- #: g10/g10.c:1017
--#, fuzzy, c-format
-+#, c-format
- msgid "no = sign found in group definition `%s'\n"
--msgstr "no s'ha trobat cap signe = en la definici� de grup �%s�\n"
-+msgstr "no s'ha trobat cap signe = a la definició de grup «%s»\n"
-
- # Indi. ivb
- #: g10/g10.c:1214
- #, fuzzy, c-format
- msgid "WARNING: unsafe ownership on homedir `%s'\n"
--msgstr "AV�S: el propietari �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari és insegur en %s «%s»\n"
-
- # Indi. ivb
- #: g10/g10.c:1217
- #, fuzzy, c-format
- msgid "WARNING: unsafe ownership on configuration file `%s'\n"
--msgstr "AV�S: el propietari �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari és insegur en %s «%s»\n"
-
- # Indi. ivb
- #: g10/g10.c:1220
- #, fuzzy, c-format
- msgid "WARNING: unsafe ownership on extension `%s'\n"
--msgstr "AV�S: el propietari �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari és insegur en %s «%s»\n"
-
- #: g10/g10.c:1226
- #, fuzzy, c-format
- msgid "WARNING: unsafe permissions on homedir `%s'\n"
--msgstr "AV�S: els permissos s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1229
- #, fuzzy, c-format
- msgid "WARNING: unsafe permissions on configuration file `%s'\n"
--msgstr "AV�S: els permissos s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1232
- #, fuzzy, c-format
- msgid "WARNING: unsafe permissions on extension `%s'\n"
--msgstr "AV�S: els permissos s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1238
- #, fuzzy, c-format
- msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n"
--msgstr ""
--"AV�S: el propietari del directori envoltant �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari del directori envoltant és insegur en %s «%s»\n"
-
- #: g10/g10.c:1241
- #, fuzzy, c-format
- msgid ""
- "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n"
--msgstr ""
--"AV�S: el propietari del directori envoltant �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari del directori envoltant és insegur en %s «%s»\n"
-
- #: g10/g10.c:1244
- #, fuzzy, c-format
- msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n"
--msgstr ""
--"AV�S: el propietari del directori envoltant �s insegur en %s �%s�\n"
-+msgstr "AVÃS: el propietari del directori envoltant és insegur en %s «%s»\n"
-
- #: g10/g10.c:1250
- #, fuzzy, c-format
- msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n"
--msgstr ""
--"AV�S: els permissos del directori envoltant s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos del directori envoltant són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1253
- #, fuzzy, c-format
- msgid ""
- "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n"
--msgstr ""
--"AV�S: els permissos del directori envoltant s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos del directori envoltant són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1256
- #, fuzzy, c-format
- msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n"
--msgstr ""
--"AV�S: els permissos del directori envoltant s�n insegurs en %s �%s�\n"
-+msgstr "AVÃS: els permissos del directori envoltant són insegurs en %s «%s»\n"
-
- #: g10/g10.c:1397
- #, fuzzy, c-format
- msgid "unknown configuration item `%s'\n"
--msgstr "s'ha creat el nou fitxer d'opcions �%s�\n"
-+msgstr "s'ha creat el nou fitxer d'opcions «%s»\n"
-
- #: g10/g10.c:1798
- #, c-format
- msgid "NOTE: old default options file `%s' ignored\n"
--msgstr "NOTA: es descarta el fitxer d'opcions predeterminades antic �%s�\n"
-+msgstr "NOTA: es descarta el fitxer d'opcions predeterminades antic «%s»\n"
-
- #: g10/g10.c:1840
- #, c-format
- msgid "NOTE: no default option file `%s'\n"
--msgstr "NOTA: no existeix el fitxer d'opcions predeterminades �%s�\n"
-+msgstr "NOTA: no existeix el fitxer d'opcions predeterminades «%s»\n"
-
- #: g10/g10.c:1844
- #, c-format
- msgid "option file `%s': %s\n"
--msgstr "fitxer d'opcions �%s�: %s\n"
-+msgstr "fitxer d'opcions «%s»: %s\n"
-
- #: g10/g10.c:1851
- #, c-format
- msgid "reading options from `%s'\n"
--msgstr "s'estan llegint opcions de �%s�\n"
-+msgstr "s'estan llegint opcions de «%s»\n"
-
- #: g10/g10.c:2065 g10/g10.c:2583 g10/g10.c:2594
- #, c-format
- msgid "NOTE: %s is not for normal use!\n"
--msgstr "NOTA: %s no �s per a �s normal!\n"
-+msgstr "NOTA: %s no és per a ús normal!\n"
-
- #: g10/g10.c:2078
- #, fuzzy, c-format
- msgid "cipher extension `%s' not loaded due to unsafe permissions\n"
- msgstr ""
--"la extensi� de xifrat �%s� no s'ha carregat per tindre permissos "
--"insegurs\n"
-+"la extensió de xifrat «%s» no s'ha carregat per tindre permissos insegurs\n"
-
- #: g10/g10.c:2292
- #, fuzzy, c-format
- msgid "`%s' is not a valid character set\n"
--msgstr "%s no �s un joc de car�cters v�lid\n"
-+msgstr "%s no és un joc de caràcters vàlid\n"
-
- #: g10/g10.c:2311 g10/keyedit.c:3498
- #, fuzzy
- msgid "could not parse keyserver URL\n"
--msgstr ""
--"no s'ha pogut analitzar sint�cticament la URI del servidor de claus\n"
-+msgstr "no s'ha pogut analitzar sintàcticament la URI del servidor de claus\n"
-
- #: g10/g10.c:2317
- #, fuzzy, c-format
- msgid "%s:%d: invalid keyserver options\n"
--msgstr "%s:%d opcions d'exportaci� no v�lides\n"
-+msgstr "%s:%d opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2320
- #, fuzzy
- msgid "invalid keyserver options\n"
--msgstr "opcions d'exportaci� no v�lides\n"
-+msgstr "opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2327
- #, c-format
- msgid "%s:%d: invalid import options\n"
--msgstr "%s:%d: opcions d'importanci� no v�lides\n"
-+msgstr "%s:%d: opcions d'importanció no vàlides\n"
-
- #: g10/g10.c:2330
- msgid "invalid import options\n"
--msgstr "opcions d'importaci� no v�lides\n"
-+msgstr "opcions d'importació no vàlides\n"
-
- #: g10/g10.c:2337
- #, c-format
- msgid "%s:%d: invalid export options\n"
--msgstr "%s:%d opcions d'exportaci� no v�lides\n"
-+msgstr "%s:%d opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2340
- msgid "invalid export options\n"
--msgstr "opcions d'exportaci� no v�lides\n"
-+msgstr "opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2347
- #, fuzzy, c-format
- msgid "%s:%d: invalid list options\n"
--msgstr "%s:%d: opcions d'importanci� no v�lides\n"
-+msgstr "%s:%d: opcions d'importanció no vàlides\n"
-
- #: g10/g10.c:2350
- #, fuzzy
- msgid "invalid list options\n"
--msgstr "opcions d'importaci� no v�lides\n"
-+msgstr "opcions d'importació no vàlides\n"
-
- #: g10/g10.c:2372
- #, fuzzy, c-format
- msgid "%s:%d: invalid verify options\n"
--msgstr "%s:%d opcions d'exportaci� no v�lides\n"
-+msgstr "%s:%d opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2375
- #, fuzzy
- msgid "invalid verify options\n"
--msgstr "opcions d'exportaci� no v�lides\n"
-+msgstr "opcions d'exportació no vàlides\n"
-
- #: g10/g10.c:2382
- #, c-format
-@@ -1428,24 +1405,24 @@
-
- #: g10/g10.c:2572
- msgid "WARNING: program may create a core file!\n"
--msgstr "AV�S: el programa podria crear un fitxer core!\n"
-+msgstr "AVÃS: el programa podria crear un fitxer core!\n"
-
--# FIXME: prefer�ncia? jm
--# Ho discut�rem en la llista, segur. Deu ser als arxius. ivb
-+# FIXME: preferència? jm
-+# Ho discutírem en la llista, segur. Deu ser als arxius. ivb
- #: g10/g10.c:2576
- #, c-format
- msgid "WARNING: %s overrides %s\n"
--msgstr "AV�S: %s t� prefer�ncia sobre %s\n"
-+msgstr "AVÃS: %s té preferència sobre %s\n"
-
- #: g10/g10.c:2585
- #, c-format
- msgid "%s not allowed with %s!\n"
--msgstr "%s no �s perm�s amb %s!\n"
-+msgstr "%s no és permés amb %s!\n"
-
- #: g10/g10.c:2588
- #, c-format
- msgid "%s makes no sense with %s!\n"
--msgstr "%s no t� sentit amb %s!\n"
-+msgstr "%s no té sentit amb %s!\n"
-
- #: g10/g10.c:2602
- #, c-format
-@@ -1455,7 +1432,7 @@
- # clares -> en clar? ivb
- #: g10/g10.c:2616
- msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
--msgstr "nom�s podeu fer signatures separades o en clar en el mode --pgp2\n"
-+msgstr "només podeu fer signatures separades o en clar en el mode --pgp2\n"
-
- #: g10/g10.c:2622
- msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-@@ -1473,20 +1450,20 @@
-
- #: g10/g10.c:2711 g10/g10.c:2735
- msgid "selected cipher algorithm is invalid\n"
--msgstr "l'algorisme de xifratge triat no �s v�lid\n"
-+msgstr "l'algorisme de xifratge triat no és vàlid\n"
-
- #: g10/g10.c:2717 g10/g10.c:2741
- msgid "selected digest algorithm is invalid\n"
--msgstr "l'algorisme de resum seleccionat no �s v�lid\n"
-+msgstr "l'algorisme de resum seleccionat no és vàlid\n"
-
- #: g10/g10.c:2723
- #, fuzzy
- msgid "selected compression algorithm is invalid\n"
--msgstr "l'algorisme de xifratge triat no �s v�lid\n"
-+msgstr "l'algorisme de xifratge triat no és vàlid\n"
-
- #: g10/g10.c:2729
- msgid "selected certification digest algorithm is invalid\n"
--msgstr "l'algorisme de resum de certificaci� seleccionat no �s v�lid\n"
-+msgstr "l'algorisme de resum de certificació seleccionat no és vàlid\n"
-
- #: g10/g10.c:2744
- msgid "completes-needed must be greater than 0\n"
-@@ -1504,36 +1481,36 @@
- #: g10/g10.c:2750
- #, fuzzy
- msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n"
--msgstr "default-check-level �s inv�lid; ha de ser 0, 1, 2 o 3\n"
-+msgstr "default-check-level és invàlid; ha de ser 0, 1, 2 o 3\n"
-
- #: g10/g10.c:2752
- #, fuzzy
- msgid "invalid min-cert-level; must be 1, 2, or 3\n"
--msgstr "default-check-level �s inv�lid; ha de ser 0, 1, 2 o 3\n"
-+msgstr "default-check-level és invàlid; ha de ser 0, 1, 2 o 3\n"
-
- #: g10/g10.c:2755
- msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
--msgstr "NOTA: el mode S2K simple (0) no �s gens recomanable\n"
-+msgstr "NOTA: el mode S2K simple (0) no és gens recomanable\n"
-
- #: g10/g10.c:2759
- msgid "invalid S2K mode; must be 0, 1 or 3\n"
--msgstr "el mode S2K �s inv�lid; ha de ser 0, 1 o 3\n"
-+msgstr "el mode S2K és invàlid; ha de ser 0, 1 o 3\n"
-
- #: g10/g10.c:2766
- msgid "invalid default preferences\n"
--msgstr "les prefer�ncies per defecte s�n inv�lides\n"
-+msgstr "les preferències per defecte són invàlides\n"
-
- #: g10/g10.c:2775
- msgid "invalid personal cipher preferences\n"
--msgstr "les prefer�ncies personals de xifrat s�n inv�lides\n"
-+msgstr "les preferències personals de xifrat són invàlides\n"
-
- #: g10/g10.c:2779
- msgid "invalid personal digest preferences\n"
--msgstr "les prefer�ncies personals de digest s�n inv�lides\n"
-+msgstr "les preferències personals de digest són invàlides\n"
-
- #: g10/g10.c:2783
- msgid "invalid personal compress preferences\n"
--msgstr "les prefer�ncies personals de compressi� s�n inv�lides\n"
-+msgstr "les preferències personals de compressió són invàlides\n"
-
- #: g10/g10.c:2816
- #, c-format
-@@ -1543,8 +1520,7 @@
- #: g10/g10.c:2863
- #, fuzzy, c-format
- msgid "you may not use cipher algorithm `%s' while in %s mode\n"
--msgstr ""
--"no podeu usar l'algorisme de xifratge �%s� mentre esteu en mode %s\n"
-+msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n"
-
- #: g10/g10.c:2868
- #, fuzzy, c-format
-@@ -1554,17 +1530,17 @@
- #: g10/g10.c:2873
- #, fuzzy, c-format
- msgid "you may not use compression algorithm `%s' while in %s mode\n"
--msgstr "no podeu usar l'algorisme de compressi� %s mentre esteu en mode %s\n"
-+msgstr "no podeu usar l'algorisme de compressió %s mentre esteu en mode %s\n"
-
- #: g10/g10.c:2969
- #, c-format
- msgid "failed to initialize the TrustDB: %s\n"
--msgstr "no s'ha pogut inicialitzar la base de dades de confian�a: %s\n"
-+msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n"
-
- #: g10/g10.c:2980
- msgid "WARNING: recipients (-r) given without using public key encryption\n"
- msgstr ""
--"AV�S: s'han donat destinataris (-r) sense usar xifratge de clau p�blica\n"
-+"AVÃS: s'han donat destinataris (-r) sense usar xifratge de clau pública\n"
-
- #: g10/g10.c:2991
- msgid "--store [filename]"
-@@ -1655,12 +1631,12 @@
- #: g10/g10.c:3276
- #, c-format
- msgid "keyserver receive failed: %s\n"
--msgstr "la recepci� des del servidor de claus ha fallat: %s\n"
-+msgstr "la recepció des del servidor de claus ha fallat: %s\n"
-
- #: g10/g10.c:3278
- #, c-format
- msgid "key export failed: %s\n"
--msgstr "l'exportaci� de la clau ha fallat: %s\n"
-+msgstr "l'exportació de la clau ha fallat: %s\n"
-
- #: g10/g10.c:3289
- #, c-format
-@@ -1685,7 +1661,7 @@
- #: g10/g10.c:3435
- #, c-format
- msgid "invalid hash algorithm `%s'\n"
--msgstr "l'algoritme de dispersi� �s inv�lid �%s�\n"
-+msgstr "l'algoritme de dispersió és invàlid «%s»\n"
-
- #: g10/g10.c:3558
- msgid "[filename]"
-@@ -1700,34 +1676,34 @@
- "a notation name must have only printable characters or spaces, and end with "
- "an '='\n"
- msgstr ""
--"un nom de notaci� nom�s pot tenir car�cters imprimibles o espais i "
--"acabar amb el signe �=�\n"
-+"un nom de notació només pot tenir caràcters imprimibles o espais i acabar "
-+"amb el signe «=»\n"
-
- #: g10/g10.c:3860
- msgid "a user notation name must contain the '@' character\n"
--msgstr "un nom de notaci� d'usuari no pot contenir el car�cter �@�\n"
-+msgstr "un nom de notació d'usuari no pot contenir el caràcter «@»\n"
-
- #: g10/g10.c:3870
- msgid "a notation value must not use any control characters\n"
--msgstr "un valor de notaci� no pot utilitzar cap car�cter de control\n"
-+msgstr "un valor de notació no pot utilitzar cap caràcter de control\n"
-
- #: g10/g10.c:3904
- msgid "the given certification policy URL is invalid\n"
--msgstr "la URL de pol�tica de certificaci� donada no �s v�lida\n"
-+msgstr "la URL de política de certificació donada no és vàlida\n"
-
- #: g10/g10.c:3906
- msgid "the given signature policy URL is invalid\n"
--msgstr "la URL de pol�tica de signatura donada no �s v�lida\n"
-+msgstr "la URL de política de signatura donada no és vàlida\n"
-
- #: g10/g10.c:3939
- #, fuzzy
- msgid "the given preferred keyserver URL is invalid\n"
--msgstr "la URL de pol�tica de signatura donada no �s v�lida\n"
-+msgstr "la URL de política de signatura donada no és vàlida\n"
-
- #: g10/getkey.c:150
- msgid "too many entries in pk cache - disabled\n"
- msgstr ""
--"hi ha massa entrades en la mem�ria cau de claus p�bliques - desactivada\n"
-+"hi ha massa entrades en la memòria cau de claus públiques - desactivada\n"
-
- #: g10/getkey.c:186 g10/getkey.c:2711
- #, fuzzy
-@@ -1738,27 +1714,27 @@
- #, fuzzy, c-format
- msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
- msgstr ""
--"La clau inv�lida %08lX s'ha fet v�lida amb --allow-non-selfsigned-uid\n"
-+"La clau invàlida %08lX s'ha fet vàlida amb --allow-non-selfsigned-uid\n"
-
- #: g10/getkey.c:2189
- #, fuzzy, c-format
- msgid "no secret subkey for public subkey %s - ignoring\n"
- msgstr ""
--"no hi ha una clau secreta per a la subclau p�blica %08lX - es descarta\n"
-+"no hi ha una clau secreta per a la subclau pública %08lX - es descarta\n"
-
- #: g10/getkey.c:2420
- #, fuzzy, c-format
- msgid "using secondary key %s instead of primary key %s\n"
--msgstr "s'usar� la clau secund�ria %08lX en lloc de la prim�ria %08lX\n"
-+msgstr "s'usarà la clau secundària %08lX en lloc de la primària %08lX\n"
-
- #: g10/getkey.c:2467
- #, fuzzy, c-format
- msgid "key %s: secret key without public key - skipped\n"
--msgstr "clau %08lX: clau secreta sense clau p�blica - es descarta\n"
-+msgstr "clau %08lX: clau secreta sense clau pública - es descarta\n"
-
- #: g10/gpgv.c:68
- msgid "be somewhat more quiet"
--msgstr "una mica m�s silenci�s"
-+msgstr "una mica més silenciós"
-
- #: g10/gpgv.c:69
- msgid "take the keys from this keyring"
-@@ -1766,24 +1742,24 @@
-
- #: g10/gpgv.c:71
- msgid "make timestamp conflicts only a warning"
--msgstr "fes els conflictes de marques de temps nom�s un av�s"
-+msgstr "fes els conflictes de marques de temps només un avís"
-
- #: g10/gpgv.c:72
- msgid "|FD|write status info to this FD"
--msgstr "|FD|escriu informaci� d'estat en aquest FD"
-+msgstr "|FD|escriu informació d'estat en aquest FD"
-
- #: g10/gpgv.c:96
- msgid "Usage: gpgv [options] [files] (-h for help)"
--msgstr "Forma d'�s: gpgv [opcions] [fitxers] (-h per a veure l'ajuda)"
-+msgstr "Forma d'ús: gpgv [opcions] [fitxers] (-h per a veure l'ajuda)"
-
--# Werner FIXME: should it use �Usage�?
-+# Werner FIXME: should it use «Usage»?
- #: g10/gpgv.c:99
- msgid ""
- "Syntax: gpg [options] [files]\n"
- "Check signatures against known trusted keys\n"
- msgstr ""
- "Sintaxi: gpg [opcions] [fitxers]\n"
--"Comprova signatures amb claus conegudes amb confian�a\n"
-+"Comprova signatures amb claus conegudes amb confiança\n"
-
- #: g10/helptext.c:48
- msgid ""
-@@ -1791,11 +1767,9 @@
- "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n"
- "to do with the (implicitly created) web-of-certificates."
- msgstr ""
--"L'assignaci� d'un valor ac� �s cosa vostra; aquest valor mai "
--"s'exportar�\n"
--"a cap tercer. Ho necessitem per a implementar la xarxa de confian�a; no "
--"t�\n"
--"res a veure amb la xarxa de certificats (creada impl�citament)."
-+"L'assignació d'un valor ací és cosa vostra; aquest valor mai s'exportarà\n"
-+"a cap tercer. Ho necessitem per a implementar la xarxa de confiança; no té\n"
-+"res a veure amb la xarxa de certificats (creada implícitament)."
-
- #: g10/helptext.c:54
- msgid ""
-@@ -1804,26 +1778,22 @@
- "access to the secret key. Answer \"yes\" to set this key to\n"
- "ultimately trusted\n"
- msgstr ""
--"Per a construir la xarxa de confian�a, GnuPG necessita saber quines claus\n"
--"tenen confian�a absoluta - aquestes s�n normalment les claus per a les "
--"que\n"
--"teniu acc�s a la clau secreta. Contesteu �s�� per a donar a aquesta "
--"clau\n"
--"confian�a absoluta\n"
-+"Per a construir la xarxa de confiança, GnuPG necessita saber quines claus\n"
-+"tenen confiança absoluta - aquestes són normalment les claus per a les que\n"
-+"teniu accés a la clau secreta. Contesteu «sí» per a donar a aquesta clau\n"
-+"confiança absoluta\n"
-
- # "clau no confiable"? jm
--# No fiable, no de confian�a, no de fiar... ivb
-+# No fiable, no de confiança, no de fiar... ivb
- #: g10/helptext.c:61
- msgid "If you want to use this untrusted key anyway, answer \"yes\"."
- msgstr ""
--"Si voleu utilitzar aquesta clau no de confian�a de totes maneres, dieu "
--"�s��."
-+"Si voleu utilitzar aquesta clau no de confiança de totes maneres, dieu «sí»."
-
- #: g10/helptext.c:65
- msgid ""
- "Enter the user ID of the addressee to whom you want to send the message."
--msgstr ""
--"Introdu�u l'ID d'usuari de la persona a qui voleu enviar el missatge."
-+msgstr "Introduïu l'ID d'usuari de la persona a qui voleu enviar el missatge."
-
- #: g10/helptext.c:69
- msgid ""
-@@ -1845,18 +1815,18 @@
- "encryption. This algorithm should only be used in certain domains.\n"
- "Please consult your security expert first."
- msgstr ""
--"En general no �s bona idea utilitzar la mateixa clau per a signar i\n"
--"xifrar. Aquest algoritme nom�s s'hauria d'usar en tasques concretes.\n"
-+"En general no és bona idea utilitzar la mateixa clau per a signar i\n"
-+"xifrar. Aquest algoritme només s'hauria d'usar en tasques concretes.\n"
- "Si us plau, consulteu al vostre expert en seguretat primer."
-
- #: g10/helptext.c:90
- msgid "Enter the size of the key"
--msgstr "Introdu�u la grand�ria de la clau"
-+msgstr "Introduïu la grandària de la clau"
-
- #: g10/helptext.c:94 g10/helptext.c:99 g10/helptext.c:111 g10/helptext.c:143
- #: g10/helptext.c:171 g10/helptext.c:176 g10/helptext.c:181
- msgid "Answer \"yes\" or \"no\""
--msgstr "Contesteu �s�� o �no�"
-+msgstr "Contesteu «sí» o «no»"
-
- #: g10/helptext.c:104
- msgid ""
-@@ -1865,22 +1835,22 @@
- "get a good error response - instead the system tries to interpret\n"
- "the given value as an interval."
- msgstr ""
--"Introdu�u el valor requerit tal i com es mostra en l'indicatiu.\n"
--"�s possible introduir una data ISO (AAAA-MM-DD) per� no rebreu\n"
--"una bona resposta d'error - en canvi, el sistema tractar� d'interpretar\n"
-+"Introduïu el valor requerit tal i com es mostra en l'indicatiu.\n"
-+"És possible introduir una data ISO (AAAA-MM-DD) però no rebreu\n"
-+"una bona resposta d'error - en canvi, el sistema tractarà d'interpretar\n"
- "el valor donat com un interval."
-
- #: g10/helptext.c:116
- msgid "Enter the name of the key holder"
--msgstr "Introdu�u el nom del propietari de la clau"
-+msgstr "Introduïu el nom del propietari de la clau"
-
- #: g10/helptext.c:121
- msgid "please enter an optional but highly suggested email address"
--msgstr "introdu�u una adre�a de correu (opcional per� molt recomanable)"
-+msgstr "introduïu una adreça de correu (opcional però molt recomanable)"
-
- #: g10/helptext.c:125
- msgid "Please enter an optional comment"
--msgstr "Introdu�u un comentari opcional"
-+msgstr "Introduïu un comentari opcional"
-
- #: g10/helptext.c:130
- msgid ""
-@@ -1892,14 +1862,13 @@
- msgstr ""
- "N canvia el nom.\n"
- "C canvia el comentari.\n"
--"E canvia l'adre�a de correu electr�nic.\n"
--"O continua la generaci� de les claus.\n"
-+"E canvia l'adreça de correu electrònic.\n"
-+"O continua la generació de les claus.\n"
- "Q ix."
-
- #: g10/helptext.c:139
- msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
--msgstr ""
--"Contesteu �s�� (o nom�s �s�) si �s correcte generar la subclau."
-+msgstr "Contesteu «sí» (o només «s») si és correcte generar la subclau."
-
- #: g10/helptext.c:147
- msgid ""
-@@ -1941,66 +1910,61 @@
- "\n"
- "If you don't know what the right answer is, answer \"0\"."
- msgstr ""
--"Quan signeu un ID d'usuari d'una clau, primer haur?eu de verificar que la "
-+"Quan signeu un ID d'usuari d'una clau, primer hauríeu de verificar que la "
- "clau\n"
--"pertany a la persona esmentada en l'ID d'usuari. �s �til per a altres "
-+"pertany a la persona esmentada en l'ID d'usuari. És útil per a altres "
- "saber\n"
--"amb quanta cura heu verificat a��.\n"
-+"amb quanta cura heu verificat açò.\n"
- "\n"
--"�0� significa que no feu cap declaraci� de amb quanta cura heu "
--"verificat\n"
-+"«0» significa que no feu cap declaració de amb quanta cura heu verificat\n"
- " la clau.\n"
- "\n"
--"�1� significa que creieu que la clau �s de la persona que diu que �s "
--"la\n"
--" propiet�ria, per� no heu pogut, o no heu verificat la clau de cap "
-+"«1» significa que creieu que la clau és de la persona que diu que és la\n"
-+" propietària, però no heu pogut, o no heu verificat la clau de cap "
- "manera.\n"
--" A�� �s �til per a la verificaci� d'un �rol�, quan signeu "
--"la clau d'un\n"
--" usuari amb pseud�nim.\n"
-+" Açò és útil per a la verificació d'un «rol», quan signeu la clau d'un\n"
-+" usuari amb pseudònim.\n"
- "\n"
--"�2� significa que heu fet algunes comprovacions de la clau. Per exemple, "
--"a��\n"
-+"«2» significa que heu fet algunes comprovacions de la clau. Per exemple, "
-+"açò\n"
- " pot significar que heu verificat la emprenta digital de la clau i "
- "verificat\n"
- " l'ID d'usuari en la clau amb el photo ID.\n"
- "\n"
--"�3� significa que heu fet una verificaci� exhaustiva de la clau. Per "
-+"«3» significa que heu fet una verificació exhaustiva de la clau. Per "
- "exemple,\n"
--" a�� pot significar que heu verificat la emprenta digital amb el "
-+" açò pot significar que heu verificat la emprenta digital amb el "
- "propietari\n"
--" de la clau en persona, i que heu comprovat, mitjan�ant un document "
--"dif�cil\n"
-+" de la clau en persona, i que heu comprovat, mitjançant un document "
-+"difícil\n"
- " de falsificar amb photo ID (com un passaport) que el nom del propietari\n"
- " coincideix amb el nom de l'ID d'usuari en la clau, i finalment que heu\n"
--" verificat (per intercanvi de correu) que l'adre�a de correu en la "
--"clau\n"
-+" verificat (per intercanvi de correu) que l'adreça de correu en la clau\n"
- " pertany al propietari de la clau.\n"
- "\n"
- "Teniu en compte que els exemples donats anteriorment per als nivels 2 i 3 "
--"s�n\n"
--"*nom�s* exemples. Al final, �s cosa vostra decidir qu� significa "
--"�alguna� i\n"
--"�exhaustiva� per a vosaltres quan voleu signar altres claus.\n"
-+"són\n"
-+"*només* exemples. Al final, és cosa vostra decidir què significa «alguna» i\n"
-+"«exhaustiva» per a vosaltres quan voleu signar altres claus.\n"
- "\n"
--"Si no sabeu quina �s la resposta correcta, contesteu �0�."
-+"Si no sabeu quina és la resposta correcta, contesteu «0»."
-
- #: g10/helptext.c:185
- #, fuzzy
- msgid "Answer \"yes\" if you want to sign ALL the user IDs"
--msgstr "Contesteu �s�� si voleu signar TOTS els ID d'usuari"
-+msgstr "Contesteu «sí» si voleu signar TOTS els ID d'usuari"
-
- #: g10/helptext.c:189
- msgid ""
- "Answer \"yes\" if you really want to delete this user ID.\n"
- "All certificates are then also lost!"
- msgstr ""
--"Contesteu �s�� si realment voleu eliminar aquest ID d'usuari.\n"
--"Tots els certificats tamb� es perdran!"
-+"Contesteu «sí» si realment voleu eliminar aquest ID d'usuari.\n"
-+"Tots els certificats també es perdran!"
-
- #: g10/helptext.c:194
- msgid "Answer \"yes\" if it is okay to delete the subkey"
--msgstr "Contesteu �s�� si �s correcte eliminar la subclau"
-+msgstr "Contesteu «sí» si és correcte eliminar la subclau"
-
- #: g10/helptext.c:199
- msgid ""
-@@ -2008,9 +1972,9 @@
- "to delete this signature because it may be important to establish a\n"
- "trust connection to the key or another key certified by this key."
- msgstr ""
--"Aquesta �s una signatura v�lida en la clau; normalment no voldreu\n"
--"eliminar aquesta signatura perqu� pot ser important per a establir\n"
--"una connexi� de confian�a a la clau o a un altra clau certificada\n"
-+"Aquesta és una signatura vàlida en la clau; normalment no voldreu\n"
-+"eliminar aquesta signatura perquè pot ser important per a establir\n"
-+"una connexió de confiança a la clau o a un altra clau certificada\n"
- "per aquesta clau."
-
- #: g10/helptext.c:204
-@@ -2020,11 +1984,10 @@
- "know which key was used because this signing key might establish\n"
- "a trust connection through another already certified key."
- msgstr ""
--"Aquesta signatura no es pot comprovar perqu� no teniu la clau\n"
--"corresponent. Haur�eu de posposar la seua eliminaci� fins que\n"
-+"Aquesta signatura no es pot comprovar perquè no teniu la clau\n"
-+"corresponent. Hauríeu de posposar la seua eliminació fins que\n"
- "sapieu quina clau es va utilitzar ja que aquesta clau de signatura\n"
--"podria establir una connexi� de confian�a a trav�s d'una altra clau "
--"ja\n"
-+"podria establir una connexió de confiança a través d'una altra clau ja\n"
- "certificada."
-
- #: g10/helptext.c:210
-@@ -2032,7 +1995,7 @@
- "The signature is not valid. It does make sense to remove it from\n"
- "your keyring."
- msgstr ""
--"La signatura no �s v�lida. T� sentit que l'elimineu de l'anell\n"
-+"La signatura no és vàlida. Té sentit que l'elimineu de l'anell\n"
- "de claus."
-
- #: g10/helptext.c:214
-@@ -2043,11 +2006,10 @@
- "only if this self-signature is for some reason not valid and\n"
- "a second one is available."
- msgstr ""
--"Aquesta �s una signatura que enlla�a l'ID de l'usuari amb la clau.\n"
--"Normalment no �s una bona idea eliminar una signatura com aquesta.\n"
--"Actualment, GnuPG podria no poder utilitzar aquesta clau de nou, aix�\n"
--"que feu a�� nom�s si l'autosignatura no �s v�lida per alguna ra� "
--"i\n"
-+"Aquesta és una signatura que enllaça l'ID de l'usuari amb la clau.\n"
-+"Normalment no és una bona idea eliminar una signatura com aquesta.\n"
-+"Actualment, GnuPG podria no poder utilitzar aquesta clau de nou, així\n"
-+"que feu açò només si l'autosignatura no és vàlida per alguna raó i\n"
- "hi ha una segona disponible."
-
- #: g10/helptext.c:222
-@@ -2056,18 +2018,18 @@
- "to the current list of preferences. The timestamp of all affected\n"
- "self-signatures will be advanced by one second.\n"
- msgstr ""
--"Canvia les prefer�ncies de tots els ID d'usuari (o nom�s els dels "
-+"Canvia les preferències de tots els ID d'usuari (o només els dels "
- "seleccionats)\n"
--"a la llista actual de prefer�ncies. Les marques de temps de totes les\n"
--"autosignatures afectades s'avan�aran un segon.\n"
-+"a la llista actual de preferències. Les marques de temps de totes les\n"
-+"autosignatures afectades s'avançaran un segon.\n"
-
- #: g10/helptext.c:229
- msgid "Please enter the passhrase; this is a secret sentence \n"
--msgstr "Introdu�u la contrasenya; aquesta ha de ser una frase secreta \n"
-+msgstr "Introduïu la contrasenya; aquesta ha de ser una frase secreta \n"
-
- #: g10/helptext.c:235
- msgid "Please repeat the last passphrase, so you are sure what you typed in."
--msgstr "Per favor, repetiu l'�ltima contrasenya per confirmar-la."
-+msgstr "Per favor, repetiu l'última contrasenya per confirmar-la."
-
- #: g10/helptext.c:239
- msgid "Give the name of the file to which the signature applies"
-@@ -2075,15 +2037,15 @@
-
- #: g10/helptext.c:244
- msgid "Answer \"yes\" if it is okay to overwrite the file"
--msgstr "Contesteu �s�� si �s correcte sobreescriure el fitxer"
-+msgstr "Contesteu «sí» si és correcte sobreescriure el fitxer"
-
- #: g10/helptext.c:249
- msgid ""
- "Please enter a new filename. If you just hit RETURN the default\n"
- "file (which is shown in brackets) will be used."
- msgstr ""
--"Introdu�u un nom de fitxer. Si premeu RETORN s'hi usar� el fitxer\n"
--"predeterminat (apareix entre claud�tors)."
-+"Introduïu un nom de fitxer. Si premeu RETORN s'hi usarà el fitxer\n"
-+"predeterminat (apareix entre claudàtors)."
-
- #: g10/helptext.c:255
- msgid ""
-@@ -2100,21 +2062,19 @@
- " Use this to state that the user ID should not longer be used;\n"
- " this is normally used to mark an email address invalid.\n"
- msgstr ""
--"Haur�eu d'especificar una ra� per a la certificaci�. Depenent del\n"
-+"Hauríeu d'especificar una raó per a la certificació. Depenent del\n"
- "context teniu l'habilitat de triar d'aquesta llista:\n"
--" �La clau ha estat compromesa�\n"
--" Utilitzeu a�� si teniu alguna ra� per creure que persones no\n"
--" autoritzades han tingut acc�s a la vostra clau secreta.\n"
--" �La clau ha estat reempla�ada�\n"
--" Utilitzeu a�� si heu reempla�at aquesta clau amb una m�s "
--"nova.\n"
--" �La clau ja no est� en �s�\n"
--" Utilitzeu a�� si heu retirat aquesta clau.\n"
--" �L'ID de l'usuari ja no �s v�lid�\n"
--" Utilitzeu a�� per a constatar que l'ID de l'usuari no s'hauria\n"
--" d'utilitzar m�s; a�� s'utilitza normalment per a marcar una "
--"adre�a\n"
--" de correu com a inv�lida.\n"
-+" «La clau ha estat compromesa»\n"
-+" Utilitzeu açò si teniu alguna raó per creure que persones no\n"
-+" autoritzades han tingut accés a la vostra clau secreta.\n"
-+" «La clau ha estat reemplaçada»\n"
-+" Utilitzeu açò si heu reemplaçat aquesta clau amb una més nova.\n"
-+" «La clau ja no està en ús»\n"
-+" Utilitzeu açò si heu retirat aquesta clau.\n"
-+" «L'ID de l'usuari ja no és vàlid»\n"
-+" Utilitzeu açò per a constatar que l'ID de l'usuari no s'hauria\n"
-+" d'utilitzar més; açò s'utilitza normalment per a marcar una adreça\n"
-+" de correu com a invàlida.\n"
-
- #: g10/helptext.c:271
- msgid ""
-@@ -2122,9 +2082,9 @@
- "revocation certificate. Please keep this text concise.\n"
- "An empty line ends the text.\n"
- msgstr ""
--"Si voleu podeu introduir un text que descriga per qu� expediu aquest\n"
--"certificat de revocaci�. Per favor, sigueu concisos.\n"
--"Una l�nia buida indica el final del text.\n"
-+"Si voleu podeu introduir un text que descriga per què expediu aquest\n"
-+"certificat de revocació. Per favor, sigueu concisos.\n"
-+"Una línia buida indica el final del text.\n"
-
- #: g10/helptext.c:286
- msgid "No help available"
-@@ -2218,7 +2178,7 @@
- #: g10/import.c:547
- #, fuzzy
- msgid "algorithms on these user IDs:\n"
--msgstr "Heu signat els seg�ents ID d'usuari:\n"
-+msgstr "Heu signat els següents ID d'usuari:\n"
-
- #: g10/import.c:584
- #, c-format
-@@ -2256,26 +2216,26 @@
- #: g10/import.c:715
- #, fuzzy, c-format
- msgid "key %s: PKS subkey corruption repaired\n"
--msgstr "clau %08lX: corrupci� de la subclau HKP reparada\n"
-+msgstr "clau %08lX: corrupció de la subclau HKP reparada\n"
-
- #: g10/import.c:730
- #, fuzzy, c-format
- msgid "key %s: accepted non self-signed user ID \"%s\"\n"
--msgstr "clau %08lX: s'ha acceptat la ID d'usuari no autosignada �%s�\n"
-+msgstr "clau %08lX: s'ha acceptat la ID d'usuari no autosignada «%s»\n"
-
- #: g10/import.c:736
- #, fuzzy, c-format
- msgid "key %s: no valid user IDs\n"
--msgstr "clau %08lX: l'ID no �s v�lid\n"
-+msgstr "clau %08lX: l'ID no és vàlid\n"
-
- #: g10/import.c:738
- msgid "this may be caused by a missing self-signature\n"
--msgstr "a�� pot ser causat per l'abs�ncia d'autosignatura\n"
-+msgstr "açò pot ser causat per l'absència d'autosignatura\n"
-
- #: g10/import.c:748 g10/import.c:1170
- #, fuzzy, c-format
- msgid "key %s: public key not found: %s\n"
--msgstr "clau %08lX: no s'ha trobat la clau p�blica: %s\n"
-+msgstr "clau %08lX: no s'ha trobat la clau pública: %s\n"
-
- #: g10/import.c:754
- #, fuzzy, c-format
-@@ -2290,22 +2250,22 @@
- #: g10/import.c:768 g10/openfile.c:261 g10/sign.c:784 g10/sign.c:1042
- #, c-format
- msgid "writing to `%s'\n"
--msgstr "s'est� escrivint en �%s�\n"
-+msgstr "s'està escrivint en «%s»\n"
-
- #: g10/import.c:774 g10/import.c:864 g10/import.c:1089 g10/import.c:1231
- #, c-format
- msgid "error writing keyring `%s': %s\n"
--msgstr "error mentre s'escrivia l'anell �%s�: %s\n"
-+msgstr "error mentre s'escrivia l'anell «%s»: %s\n"
-
- #: g10/import.c:793
- #, fuzzy, c-format
- msgid "key %s: public key \"%s\" imported\n"
--msgstr "clau %08lX: s'ha importat la clau p�blica �%s�\n"
-+msgstr "clau %08lX: s'ha importat la clau pública «%s»\n"
-
- #: g10/import.c:817
- #, fuzzy, c-format
- msgid "key %s: doesn't match our copy\n"
--msgstr "clau %08lX: no correspon a la nostra c�pia\n"
-+msgstr "clau %08lX: no correspon a la nostra còpia\n"
-
- #: g10/import.c:834 g10/import.c:1188
- #, fuzzy, c-format
-@@ -2320,47 +2280,47 @@
- #: g10/import.c:874
- #, fuzzy, c-format
- msgid "key %s: \"%s\" 1 new user ID\n"
--msgstr "clau %08lX: �%s� 1 ID d'usuari nou\n"
-+msgstr "clau %08lX: «%s» 1 ID d'usuari nou\n"
-
- #: g10/import.c:877
- #, fuzzy, c-format
- msgid "key %s: \"%s\" %d new user IDs\n"
--msgstr "clau %08lX: �%s� %d ID d'usuari nous\n"
-+msgstr "clau %08lX: «%s» %d ID d'usuari nous\n"
-
- #: g10/import.c:880
- #, fuzzy, c-format
- msgid "key %s: \"%s\" 1 new signature\n"
--msgstr "clau %08lX: �%s� 1 signatura nova\n"
-+msgstr "clau %08lX: «%s» 1 signatura nova\n"
-
- #: g10/import.c:883
- #, fuzzy, c-format
- msgid "key %s: \"%s\" %d new signatures\n"
--msgstr "clau %08lX: �%s� %d signatures noves\n"
-+msgstr "clau %08lX: «%s» %d signatures noves\n"
-
- #: g10/import.c:886
- #, fuzzy, c-format
- msgid "key %s: \"%s\" 1 new subkey\n"
--msgstr "clau %08lX: �%s� 1 subclau nova\n"
-+msgstr "clau %08lX: «%s» 1 subclau nova\n"
-
- #: g10/import.c:889
- #, fuzzy, c-format
- msgid "key %s: \"%s\" %d new subkeys\n"
--msgstr "clau %08lX: �%s� %d subclaus noves\n"
-+msgstr "clau %08lX: «%s» %d subclaus noves\n"
-
- #: g10/import.c:910
- #, fuzzy, c-format
- msgid "key %s: \"%s\" not changed\n"
--msgstr "clau %08lX: �%s� no ha estat modificada\n"
-+msgstr "clau %08lX: «%s» no ha estat modificada\n"
-
- #: g10/import.c:1055
- #, fuzzy, c-format
- msgid "key %s: secret key with invalid cipher %d - skipped\n"
--msgstr "clau %08lX: clau secreta amb xifrat %d no v�lid - es descarta\n"
-+msgstr "clau %08lX: clau secreta amb xifrat %d no vàlid - es descarta\n"
-
- #: g10/import.c:1066
- #, fuzzy
- msgid "importing secret keys not allowed\n"
--msgstr "s'est� escrivint la clau secreta a �%s�\n"
-+msgstr "s'està escrivint la clau secreta a «%s»\n"
-
- #: g10/import.c:1083
- #, c-format
-@@ -2386,22 +2346,21 @@
- #, fuzzy, c-format
- msgid "key %s: no public key - can't apply revocation certificate\n"
- msgstr ""
--"clau %08lX: falta la clau p�blica: no es pot aplicar el certificat\n"
--"de revocaci�\n"
-+"clau %08lX: falta la clau pública: no es pot aplicar el certificat\n"
-+"de revocació\n"
-
--# O �rebutjara�? ivb
--# Per tots els canvis d'anglicisme �ignorat� -> �es descarta�,
--# �es rebutja� est� b�. jm
-+# O «rebutjara»? ivb
-+# Per tots els canvis d'anglicisme «ignorat» -> «es descarta»,
-+# «es rebutja» està bé. jm
- #: g10/import.c:1206
- #, fuzzy, c-format
- msgid "key %s: invalid revocation certificate: %s - rejected\n"
--msgstr ""
--"clau %08lX: el certificat de revocaci� �s inv�lid: %s: es rebutja\n"
-+msgstr "clau %08lX: el certificat de revocació és invàlid: %s: es rebutja\n"
-
- #: g10/import.c:1238
- #, fuzzy, c-format
- msgid "key %s: \"%s\" revocation certificate imported\n"
--msgstr "clau %08lX: s'ha importat el certificat de revocaci� �%s�\n"
-+msgstr "clau %08lX: s'ha importat el certificat de revocació «%s»\n"
-
- #: g10/import.c:1303
- #, fuzzy, c-format
-@@ -2412,50 +2371,49 @@
- #, fuzzy, c-format
- msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n"
- msgstr ""
--"clau %08lX: l'algoritme de clau p�blica no es suporta sobre l'id d'usuari "
--"�%s�\n"
-+"clau %08lX: l'algoritme de clau pública no es suporta sobre l'id d'usuari «%"
-+"s»\n"
- "\n"
-
- #: g10/import.c:1320
- #, fuzzy, c-format
- msgid "key %s: invalid self-signature on user ID \"%s\"\n"
--msgstr ""
--"clau %08lX: l'autosignatura no �s v�lida en l'id d'usuari �%s�\n"
-+msgstr "clau %08lX: l'autosignatura no és vàlida en l'id d'usuari «%s»\n"
-
- #: g10/import.c:1338
- #, fuzzy, c-format
- msgid "key %s: no subkey for key binding\n"
--msgstr "clau %08lX: no hi ha una subclau per a l'enlla� de la clau\n"
-+msgstr "clau %08lX: no hi ha una subclau per a l'enllaç de la clau\n"
-
- #: g10/import.c:1349 g10/import.c:1399
- #, fuzzy, c-format
- msgid "key %s: unsupported public key algorithm\n"
--msgstr "clau %08lX: l'algoritme de clau p�blica no �s suportat\n"
-+msgstr "clau %08lX: l'algoritme de clau pública no és suportat\n"
-
- #: g10/import.c:1351
- #, fuzzy, c-format
- msgid "key %s: invalid subkey binding\n"
--msgstr "clau %08lX: l'enlla� de subclau �s inv�lid\n"
-+msgstr "clau %08lX: l'enllaç de subclau és invàlid\n"
-
- #: g10/import.c:1366
- #, fuzzy, c-format
- msgid "key %s: removed multiple subkey binding\n"
--msgstr "clau %08lX: s'ha eliminat un enlla� de subclau m�ltiple\n"
-+msgstr "clau %08lX: s'ha eliminat un enllaç de subclau múltiple\n"
-
- #: g10/import.c:1388
- #, fuzzy, c-format
- msgid "key %s: no subkey for key revocation\n"
--msgstr "clau %08lX: no hi ha una subclau per a la clau de revocaci�\n"
-+msgstr "clau %08lX: no hi ha una subclau per a la clau de revocació\n"
-
- #: g10/import.c:1401
- #, fuzzy, c-format
- msgid "key %s: invalid subkey revocation\n"
--msgstr "clau %08lX: Subclau de revocaci� no v�lida\n"
-+msgstr "clau %08lX: Subclau de revocació no vàlida\n"
-
- #: g10/import.c:1416
- #, fuzzy, c-format
- msgid "key %s: removed multiple subkey revocation\n"
--msgstr "clau %08lX: s'han eliminat subclaus de revocaci� m�ltiples\n"
-+msgstr "clau %08lX: s'han eliminat subclaus de revocació múltiples\n"
-
- #: g10/import.c:1458
- #, fuzzy, c-format
-@@ -2470,34 +2428,32 @@
- #: g10/import.c:1506
- #, fuzzy, c-format
- msgid "key %s: non exportable signature (class 0x%02X) - skipped\n"
--msgstr ""
--"clau %08lX: la signatura �s inexportable (classe %02x) - es descarta\n"
-+msgstr "clau %08lX: la signatura és inexportable (classe %02x) - es descarta\n"
-
- #: g10/import.c:1516
- #, fuzzy, c-format
- msgid "key %s: revocation certificate at wrong place - skipped\n"
- msgstr ""
--"clau %08lX: el certificat de revocaci� �s en el lloc equivocat - es "
-+"clau %08lX: el certificat de revocació és en el lloc equivocat - es "
- "descarta\n"
-
- #: g10/import.c:1533
- #, fuzzy, c-format
- msgid "key %s: invalid revocation certificate: %s - skipped\n"
--msgstr ""
--"clau %08lX: el certificat de revocaci� �s inv�lid: %s - es descarta\n"
-+msgstr "clau %08lX: el certificat de revocació és invàlid: %s - es descarta\n"
-
- #: g10/import.c:1547
- #, fuzzy, c-format
- msgid "key %s: subkey signature in wrong place - skipped\n"
- msgstr ""
--"clau %08lX: la signatura de la subclau �s en el lloc equivocat - es "
-+"clau %08lX: la signatura de la subclau és en el lloc equivocat - es "
- "descarta\n"
-
- #: g10/import.c:1555
- #, fuzzy, c-format
- msgid "key %s: unexpected signature class (0x%02X) - skipped\n"
- msgstr ""
--"clau %08lX: la classe de signatura �s inesperada (0x%02x) - es descarta\n"
-+"clau %08lX: la classe de signatura és inesperada (0x%02x) - es descarta\n"
-
- #: g10/import.c:1655
- #, fuzzy, c-format
-@@ -2508,20 +2464,20 @@
- #, fuzzy, c-format
- msgid "WARNING: key %s may be revoked: fetching revocation key %s\n"
- msgstr ""
--"AV�S: la clau %08lX pot estar revocada: s'adquireix la clau de revocaci� "
--"%08lX\n"
-+"AVÃS: la clau %08lX pot estar revocada: s'adquireix la clau de revocació %"
-+"08lX\n"
-
- #: g10/import.c:1731
- #, fuzzy, c-format
- msgid "WARNING: key %s may be revoked: revocation key %s not present.\n"
- msgstr ""
--"AV�S: la clau %08lX pot estar revocada: la clau de revocaci� %08lX no "
--"est� present.\n"
-+"AVÃS: la clau %08lX pot estar revocada: la clau de revocació %08lX no està "
-+"present.\n"
-
- #: g10/import.c:1790
- #, fuzzy, c-format
- msgid "key %s: \"%s\" revocation certificate added\n"
--msgstr "clau %08lX: s'hi ha afegit el certificat de revocaci� �%s�\n"
-+msgstr "clau %08lX: s'hi ha afegit el certificat de revocació «%s»\n"
-
- #: g10/import.c:1824
- #, fuzzy, c-format
-@@ -2531,21 +2487,21 @@
- #: g10/keydb.c:167
- #, c-format
- msgid "error creating keyring `%s': %s\n"
--msgstr "error en crear l'anell �%s�: %s\n"
-+msgstr "error en crear l'anell «%s»: %s\n"
-
- #: g10/keydb.c:174
- #, c-format
- msgid "keyring `%s' created\n"
--msgstr "s'ha creat l'anell �%s?\n"
-+msgstr "s'ha creat l'anell «%s»\n"
-
- #: g10/keydb.c:685
- #, c-format
- msgid "failed to rebuild keyring cache: %s\n"
--msgstr "no s'ha pogut reconstruir la mem�ria cau de l'anell: %s\n"
-+msgstr "no s'ha pogut reconstruir la memòria cau de l'anell: %s\n"
-
- #: g10/keyedit.c:253
- msgid "[revocation]"
--msgstr "[revocaci�]"
-+msgstr "[revocació]"
-
- #: g10/keyedit.c:254
- msgid "[self-signature]"
-@@ -2553,12 +2509,12 @@
-
- #: g10/keyedit.c:332 g10/keylist.c:342
- msgid "1 bad signature\n"
--msgstr "1 signatura err�nia\n"
-+msgstr "1 signatura errònia\n"
-
- #: g10/keyedit.c:334 g10/keylist.c:344
- #, c-format
- msgid "%d bad signatures\n"
--msgstr "%d signatures err�nies\n"
-+msgstr "%d signatures errònies\n"
-
- #: g10/keyedit.c:336 g10/keylist.c:346
- msgid "1 signature not checked due to a missing key\n"
-@@ -2580,12 +2536,12 @@
-
- #: g10/keyedit.c:344
- msgid "1 user ID without valid self-signature detected\n"
--msgstr "Ha estat detectat 1 ID sense autosignatura v�lida\n"
-+msgstr "Ha estat detectat 1 ID sense autosignatura vàlida\n"
-
- #: g10/keyedit.c:346
- #, c-format
- msgid "%d user IDs without valid self-signatures detected\n"
--msgstr "Han estat detectats %d IDs sense autosignatura v�lida\n"
-+msgstr "Han estat detectats %d IDs sense autosignatura vàlida\n"
-
- #: g10/keyedit.c:402 g10/pkclist.c:262
- #, fuzzy
-@@ -2623,7 +2579,7 @@
- #: g10/keyedit.c:584
- #, c-format
- msgid "User ID \"%s\" is revoked."
--msgstr "L'ID d'usuari �%s� est� revocat."
-+msgstr "L'ID d'usuari «%s» està revocat."
-
- #: g10/keyedit.c:593 g10/keyedit.c:619 g10/keyedit.c:644 g10/keyedit.c:799
- #: g10/keyedit.c:857 g10/keyedit.c:1543
-@@ -2640,12 +2596,12 @@
- #: g10/keyedit.c:610
- #, c-format
- msgid "User ID \"%s\" is expired."
--msgstr "L'ID d'usuari �%s� ha caducat."
-+msgstr "L'ID d'usuari «%s» ha caducat."
-
- #: g10/keyedit.c:636
- #, c-format
- msgid "User ID \"%s\" is not self-signed."
--msgstr "L'ID d'usuari �%s� no est� autosignat."
-+msgstr "L'ID d'usuari «%s» no està autosignat."
-
- #: g10/keyedit.c:675
- #, c-format
-@@ -2653,8 +2609,8 @@
- "The self-signature on \"%s\"\n"
- "is a PGP 2.x-style signature.\n"
- msgstr ""
--"La vostra signatura en �%s�\n"
--"�s una signatura d'estil PGP 2.x.\n"
-+"La vostra signatura en «%s»\n"
-+"és una signatura d'estil PGP 2.x.\n"
-
- #: g10/keyedit.c:684
- msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
-@@ -2666,12 +2622,12 @@
- "Your current signature on \"%s\"\n"
- "has expired.\n"
- msgstr ""
--"La vostra signatura actual en �%s�\n"
-+"La vostra signatura actual en «%s»\n"
- "ha caducat.\n"
-
- #: g10/keyedit.c:702
- msgid "Do you want to issue a new signature to replace the expired one? (y/N) "
--msgstr "Voleu crear una nova signatura per a reempla�ar la caducada? (s/N) "
-+msgstr "Voleu crear una nova signatura per a reemplaçar la caducada? (s/N) "
-
- #: g10/keyedit.c:723
- #, c-format
-@@ -2679,8 +2635,8 @@
- "Your current signature on \"%s\"\n"
- "is a local signature.\n"
- msgstr ""
--"La vostra signatura en �%s�\n"
--"�s una signatura local.\n"
-+"La vostra signatura en «%s»\n"
-+"és una signatura local.\n"
-
- #: g10/keyedit.c:727
- msgid "Do you want to promote it to a full exportable signature? (y/N) "
-@@ -2689,12 +2645,12 @@
- #: g10/keyedit.c:748
- #, fuzzy, c-format
- msgid "\"%s\" was already locally signed by key %s\n"
--msgstr "�%s� ja estava signada localment amb la clau %08lX\n"
-+msgstr "«%s» ja estava signada localment amb la clau %08lX\n"
-
- #: g10/keyedit.c:751
- #, fuzzy, c-format
- msgid "\"%s\" was already signed by key %s\n"
--msgstr "�%s� ja estava signada amb la clau %08lX\n"
-+msgstr "«%s» ja estava signada amb la clau %08lX\n"
-
- #: g10/keyedit.c:756
- msgid "Do you want to sign it again anyway? (y/N) "
-@@ -2712,7 +2668,7 @@
- #: g10/keyedit.c:813
- #, c-format
- msgid "This key is due to expire on %s.\n"
--msgstr "Aquesta clau caducar� el %s.\n"
-+msgstr "Aquesta clau caducarà el %s.\n"
-
- #: g10/keyedit.c:817
- msgid "Do you want your signature to expire at the same time? (Y/n) "
-@@ -2727,7 +2683,7 @@
-
- #: g10/keyedit.c:852
- msgid "This would make the key unusable in PGP 2.x.\n"
--msgstr "A�� inutilitzaria la clau en PGP 2.x.\n"
-+msgstr "Açò inutilitzaria la clau en PGP 2.x.\n"
-
- #: g10/keyedit.c:877
- msgid ""
-@@ -2736,8 +2692,8 @@
- "to the person named above? If you don't know what to answer, enter \"0\".\n"
- msgstr ""
- "Amb quanta cura heu verificat que la clau que esteu a punt de signar \n"
--"pertany realment a la persona esmentada anteriorment? Si no sabeu qu� \n"
--"contestar, entreu �0�.\n"
-+"pertany realment a la persona esmentada anteriorment? Si no sabeu què \n"
-+"contestar, entreu «0».\n"
-
- #: g10/keyedit.c:882
- #, c-format
-@@ -2762,9 +2718,7 @@
- #: g10/keyedit.c:894
- #, fuzzy
- msgid "Your selection? (enter `?' for more information): "
--msgstr ""
--"Seleccioneu una opci� (introdu�u �?� per obtindre m�s "
--"informaci�):"
-+msgstr "Seleccioneu una opció (introduïu «?» per obtindre més informació):"
-
- #: g10/keyedit.c:918
- #, fuzzy, c-format
-@@ -2780,35 +2734,35 @@
- msgid "This will be a self-signature.\n"
- msgstr ""
- "\n"
--"A�� ser� una autosignatura.\n"
-+"Açò serà una autosignatura.\n"
-
- #: g10/keyedit.c:931
- #, fuzzy
- msgid "WARNING: the signature will not be marked as non-exportable.\n"
- msgstr ""
- "\n"
--"AV�S: la signatura no es marcar� com a inexportable.\n"
-+"AVÃS: la signatura no es marcarà com a inexportable.\n"
-
- #: g10/keyedit.c:939
- #, fuzzy
- msgid "WARNING: the signature will not be marked as non-revocable.\n"
- msgstr ""
- "\n"
--"AV�S: la signatura no es marcar� com a irrevocable.\n"
-+"AVÃS: la signatura no es marcarà com a irrevocable.\n"
-
- #: g10/keyedit.c:949
- #, fuzzy
- msgid "The signature will be marked as non-exportable.\n"
- msgstr ""
- "\n"
--"La signatura es marcar� com a inexportable.\n"
-+"La signatura es marcarà com a inexportable.\n"
-
- #: g10/keyedit.c:956
- #, fuzzy
- msgid "The signature will be marked as non-revocable.\n"
- msgstr ""
- "\n"
--"La signatura es marcar� com a irrevocable.\n"
-+"La signatura es marcarà com a irrevocable.\n"
-
- #: g10/keyedit.c:963
- #, fuzzy
-@@ -2840,19 +2794,19 @@
- #: g10/sign.c:369
- #, c-format
- msgid "signing failed: %s\n"
--msgstr "Ha fallat el proc�s de signatura: %s\n"
-+msgstr "Ha fallat el procés de signatura: %s\n"
-
- #: g10/keyedit.c:1084
- msgid "This key is not protected.\n"
--msgstr "Aquesta clau no est� protegida.\n"
-+msgstr "Aquesta clau no està protegida.\n"
-
- #: g10/keyedit.c:1088
- msgid "Secret parts of primary key are not available.\n"
--msgstr "Les parts secretes de la clau prim�ria no estan disponibles.\n"
-+msgstr "Les parts secretes de la clau primària no estan disponibles.\n"
-
- #: g10/keyedit.c:1092
- msgid "Key is protected.\n"
--msgstr "La clau est� protegida.\n"
-+msgstr "La clau està protegida.\n"
-
- #: g10/keyedit.c:1112
- #, c-format
-@@ -2864,7 +2818,7 @@
- "Enter the new passphrase for this secret key.\n"
- "\n"
- msgstr ""
--"Introdu�u la nova contrasenya per a la clau secreta.\n"
-+"Introduïu la nova contrasenya per a la clau secreta.\n"
- "\n"
-
- #: g10/keyedit.c:1127 g10/keygen.c:1818
-@@ -2876,18 +2830,18 @@
- "You don't want a passphrase - this is probably a *bad* idea!\n"
- "\n"
- msgstr ""
--"No voleu contrasenya: a�� �s probablement una *mala* idea!\n"
-+"No voleu contrasenya: açò és probablement una *mala* idea!\n"
- "\n"
-
- # No abusis dels pronoms! (Rowan Atkinson @ Llei i Desordre) ivb
- #: g10/keyedit.c:1135
- #, fuzzy
- msgid "Do you really want to do this? (y/N) "
--msgstr "Esteu segur de voler fer a��? "
-+msgstr "Esteu segur de voler fer açò? "
-
- #: g10/keyedit.c:1201
- msgid "moving a key signature to the correct place\n"
--msgstr "s'est� posant la signatura al lloc correcte\n"
-+msgstr "s'està posant la signatura al lloc correcte\n"
-
- #: g10/keyedit.c:1287
- msgid "save and quit"
-@@ -2902,14 +2856,14 @@
- msgstr "llista claus i ID"
-
- # Per aquesta zona (keyedit) hi ha un cacau d'infinitius i presents... ivb
--# Yeah, els vaig corregir abans de que enviares la teua correcci�. jm
-+# Yeah, els vaig corregir abans de que enviares la teua correcció. jm
- #: g10/keyedit.c:1293
- msgid "select user ID N"
- msgstr "tria l'ID d'usuari N"
-
- #: g10/keyedit.c:1294
- msgid "select secondary key N"
--msgstr "tria la clau secund�ria N"
-+msgstr "tria la clau secundària N"
-
- #: g10/keyedit.c:1295
- msgid "list signatures"
-@@ -2928,9 +2882,9 @@
- msgstr "afegeix un ID d'usuari"
-
- # Com estava escrit abans. ivb
--# Si et refereixes a Photo vs. photo, ho deixe en min�scules, que en tot
--# el men� est� tot en min�scules. Tb hi ha molts ID vs. id en els msgids
--# i no hem unificat en catal�. Potser li ho dir� a Werner. jm.
-+# Si et refereixes a Photo vs. photo, ho deixe en minúscules, que en tot
-+# el menú està tot en minúscules. Tb hi ha molts ID vs. id en els msgids
-+# i no hem unificat en català. Potser li ho diré a Werner. jm.
- #: g10/keyedit.c:1304
- msgid "add a photo ID"
- msgstr "afegeix un photo ID"
-@@ -2941,7 +2895,7 @@
-
- #: g10/keyedit.c:1308
- msgid "add a secondary key"
--msgstr "afegeix una clau secund�ria"
-+msgstr "afegeix una clau secundària"
-
- #: g10/keyedit.c:1310
- msgid "add a key to a smartcard"
-@@ -2953,11 +2907,11 @@
-
- #: g10/keyedit.c:1313
- msgid "delete a secondary key"
--msgstr "esborra una clau secund�ria"
-+msgstr "esborra una clau secundària"
-
- #: g10/keyedit.c:1314
- msgid "add a revocation key"
--msgstr "afegeix una clau de revocaci�"
-+msgstr "afegeix una clau de revocació"
-
- #: g10/keyedit.c:1315
- msgid "delete signatures"
-@@ -2973,29 +2927,28 @@
-
- #: g10/keyedit.c:1318
- msgid "toggle between secret and public key listing"
--msgstr "canvia entre el llistat de claus secretes i p�bliques"
-+msgstr "canvia entre el llistat de claus secretes i públiques"
-
- #: g10/keyedit.c:1320
- msgid "list preferences (expert)"
--msgstr "llista les prefer�ncies (expert)"
-+msgstr "llista les preferències (expert)"
-
- #: g10/keyedit.c:1321
- msgid "list preferences (verbose)"
--msgstr "llista les prefer�ncies (detallat)"
-+msgstr "llista les preferències (detallat)"
-
- #: g10/keyedit.c:1322
- msgid "set preference list"
--msgstr "estableix la llista de prefer�ncies"
-+msgstr "estableix la llista de preferències"
-
- #: g10/keyedit.c:1323
- msgid "updated preferences"
--msgstr "prefer�ncies actualitzades"
-+msgstr "preferències actualitzades"
-
- #: g10/keyedit.c:1324
- #, fuzzy
- msgid "set preferred keyserver URL"
--msgstr ""
--"no s'ha pogut analitzar sint�cticament la URI del servidor de claus\n"
-+msgstr "no s'ha pogut analitzar sintàcticament la URI del servidor de claus\n"
-
- #: g10/keyedit.c:1325
- msgid "change the passphrase"
-@@ -3003,7 +2956,7 @@
-
- #: g10/keyedit.c:1326
- msgid "change the ownertrust"
--msgstr "canvia la confian�a"
-+msgstr "canvia la confiança"
-
- #: g10/keyedit.c:1327
- msgid "revoke signatures"
-@@ -3015,7 +2968,7 @@
-
- #: g10/keyedit.c:1329
- msgid "revoke a secondary key"
--msgstr "revoca una clau secund�ria"
-+msgstr "revoca una clau secundària"
-
- #: g10/keyedit.c:1330
- msgid "disable a key"
-@@ -3034,23 +2987,23 @@
- #: g10/keyedit.c:1386
- #, fuzzy, c-format
- msgid "error reading secret keyblock \"%s\": %s\n"
--msgstr "error en llegir el bloc de claus secretes �%s�: %s\n"
-+msgstr "error en llegir el bloc de claus secretes «%s»: %s\n"
-
- #: g10/keyedit.c:1404
- msgid "Secret key is available.\n"
--msgstr "La clau secreta est� disponible.\n"
-+msgstr "La clau secreta està disponible.\n"
-
- #: g10/keyedit.c:1481
- msgid "Need the secret key to do this.\n"
--msgstr "Cal la clau secreta per a fer a��.\n"
-+msgstr "Cal la clau secreta per a fer açò.\n"
-
- #: g10/keyedit.c:1489
- msgid "Please use the command \"toggle\" first.\n"
--msgstr "Useu l'ordre �toggle� abans.\n"
-+msgstr "Useu l'ordre «toggle» abans.\n"
-
- #: g10/keyedit.c:1537
- msgid "Key is revoked."
--msgstr "La clau est� revocada."
-+msgstr "La clau està revocada."
-
- #: g10/keyedit.c:1557
- #, fuzzy
-@@ -3064,12 +3017,12 @@
- #: g10/keyedit.c:1568
- #, fuzzy, c-format
- msgid "Unknown signature type `%s'\n"
--msgstr "la classe de signatura �s desconeguda"
-+msgstr "la classe de signatura és desconeguda"
-
- #: g10/keyedit.c:1591
- #, c-format
- msgid "This command is not allowed while in %s mode.\n"
--msgstr "Aquesta ordre no est� permesa mentre s'est� en mode %s.\n"
-+msgstr "Aquesta ordre no està permesa mentre s'està en mode %s.\n"
-
- #: g10/keyedit.c:1613 g10/keyedit.c:1633 g10/keyedit.c:1736
- msgid "You must select at least one user ID.\n"
-@@ -3077,7 +3030,7 @@
-
- #: g10/keyedit.c:1615
- msgid "You can't delete the last user ID!\n"
--msgstr "No podeu esborrar l'�ltim ID d'usuari!\n"
-+msgstr "No podeu esborrar l'últim ID d'usuari!\n"
-
- #: g10/keyedit.c:1617
- #, fuzzy
-@@ -3092,16 +3045,16 @@
- #: g10/keyedit.c:1668
- #, fuzzy
- msgid "Really move the primary key? (y/N) "
--msgstr "Realment voleu eliminar aquest ID d'usuari? "
-+msgstr "Realment voleu esborrar aquesta autosignatura? (s/N)"
-
- #: g10/keyedit.c:1680
- #, fuzzy
- msgid "You must select exactly one key.\n"
--msgstr "Heu de seleccionar, si m�s no, una clau.\n"
-+msgstr "Heu de seleccionar, si més no, una clau.\n"
-
- #: g10/keyedit.c:1700 g10/keyedit.c:1755
- msgid "You must select at least one key.\n"
--msgstr "Heu de seleccionar, si m�s no, una clau.\n"
-+msgstr "Heu de seleccionar, si més no, una clau.\n"
-
- #: g10/keyedit.c:1703
- #, fuzzy
-@@ -3141,18 +3094,18 @@
- #: g10/keyedit.c:1831
- #, fuzzy
- msgid "Set preference list to:\n"
--msgstr "estableix la llista de prefer�ncies"
-+msgstr "estableix la llista de preferències"
-
- #: g10/keyedit.c:1837
- #, fuzzy
- msgid "Really update the preferences for the selected user IDs? (y/N) "
- msgstr ""
--"Voleu actualitzar les prefer�ncies per a les ID d'usuaris seleccionades?"
-+"Voleu actualitzar les preferències per a les ID d'usuaris seleccionades?"
-
- #: g10/keyedit.c:1839
- #, fuzzy
- msgid "Really update the preferences? (y/N) "
--msgstr "Realment voleu actualitzar les prefer�ncies? "
-+msgstr "Realment voleu actualitzar les preferències? "
-
- #: g10/keyedit.c:1889
- #, fuzzy
-@@ -3167,16 +3120,16 @@
- #: g10/keyedit.c:1902
- #, c-format
- msgid "update failed: %s\n"
--msgstr "ha fallat l'actualitzaci�: %s\n"
-+msgstr "ha fallat l'actualització: %s\n"
-
- #: g10/keyedit.c:1909
- #, c-format
- msgid "update secret failed: %s\n"
--msgstr "ha fallat l'actualitzaci� de la clau secreta: %s\n"
-+msgstr "ha fallat l'actualització de la clau secreta: %s\n"
-
- #: g10/keyedit.c:1916
- msgid "Key not changed so no update needed.\n"
--msgstr "La clau no ha canviat, per tant no cal actualitzaci�.\n"
-+msgstr "La clau no ha canviat, per tant no cal actualització.\n"
-
- #: g10/keyedit.c:1988
- msgid "Digest: "
-@@ -3194,8 +3147,8 @@
- msgid "Preferred keyserver: "
- msgstr ""
-
--# Potser %s haja d'anar darrere de �clau�. ivb
--# �s cert. Nova funcionalitat de 1.2.0, IIRC. jm
-+# Potser %s haja d'anar darrere de «clau». ivb
-+# És cert. Nova funcionalitat de 1.2.0, IIRC. jm
- #: g10/keyedit.c:2309
- #, fuzzy, c-format
- msgid "This key may be revoked by %s key %s"
-@@ -3230,14 +3183,14 @@
- msgstr " [caduca: %s]"
-
- #: g10/keyedit.c:2340
--#, fuzzy, c-format
-+#, c-format
- msgid "usage: %s"
--msgstr " confian�a: %c/%c"
-+msgstr ""
-
- #: g10/keyedit.c:2355
- #, fuzzy, c-format
- msgid "trust: %s"
--msgstr " confian�a: %c/%c"
-+msgstr " confiança: %c/%c"
-
- #: g10/keyedit.c:2359
- #, c-format
-@@ -3254,15 +3207,14 @@
-
- #: g10/keyedit.c:2461
- msgid "There are no preferences on a PGP 2.x-style user ID.\n"
--msgstr "No hi ha prefer�ncies en un ID d'usuari d'estil PGP 2.x.\n"
-+msgstr "No hi ha preferències en un ID d'usuari d'estil PGP 2.x.\n"
-
- #: g10/keyedit.c:2469
- msgid ""
- "Please note that the shown key validity is not necessarily correct\n"
- "unless you restart the program.\n"
- msgstr ""
--"Teniu en compte que la validesa de la clau mostrada no �s "
--"necess�riament\n"
-+"Teniu en compte que la validesa de la clau mostrada no és necessàriament\n"
- "correcta a no ser que torneu a executar el programa.\n"
-
- #: g10/keyedit.c:2533 g10/keyserver.c:376 g10/mainproc.c:1575
-@@ -3282,8 +3234,8 @@
- "WARNING: no user ID has been marked as primary. This command may\n"
- " cause a different user ID to become the assumed primary.\n"
- msgstr ""
--"AV�S: no s'ha marcat cap ID d'usuari com prim�ria. Aquesta ordre pot\n"
--" causar que una ID d'usuari diferent esdevinga en la prim�ria "
-+"AVÃS: no s'ha marcat cap ID d'usuari com primària. Aquesta ordre pot\n"
-+" causar que una ID d'usuari diferent esdevinga en la primària "
- "assumida.\n"
-
- # Photo ID com abans. ivb
-@@ -3293,7 +3245,7 @@
- "versions\n"
- " of PGP to reject this key.\n"
- msgstr ""
--"AV�S: Aquesta �s una clau d'estil PGP2. Afegir un photo ID pot fer que "
-+"AVÃS: Aquesta és una clau d'estil PGP2. Afegir un photo ID pot fer que "
- "algunes versions de PGP rebutgen aquesta clau.\n"
-
- #: g10/keyedit.c:2665 g10/keyedit.c:2943
-@@ -3304,15 +3256,15 @@
- msgid "You may not add a photo ID to a PGP2-style key.\n"
- msgstr "No podeu afegir un photo ID a una clau d'estil PGP2.\n"
-
--# Aquesta i les seg�ents no haurien de portar (s/N/q) i no (y/N/q)? ivb
--# Hmm. S�... (s/N/x) jm
-+# Aquesta i les següents no haurien de portar (s/N/q) i no (y/N/q)? ivb
-+# Hmm. Sí... (s/N/x) jm
- #: g10/keyedit.c:2811
- msgid "Delete this good signature? (y/N/q)"
- msgstr "Voleu esborrar aquesta signatura correcta? (s/N/x)"
-
- #: g10/keyedit.c:2821
- msgid "Delete this invalid signature? (y/N/q)"
--msgstr "Voleu esborrar aquesta signatura inv�lida? (s/N/x)"
-+msgstr "Voleu esborrar aquesta signatura invàlida? (s/N/x)"
-
- #: g10/keyedit.c:2825
- msgid "Delete this unknown signature? (y/N/q)"
-@@ -3344,8 +3296,7 @@
- "cause\n"
- " some versions of PGP to reject this key.\n"
- msgstr ""
--"AV�S: Aquesta �s una clau d'estil PGP 2.x. Afegir un revocador designat "
--"pot\n"
-+"AVÃS: Aquesta és una clau d'estil PGP 2.x. Afegir un revocador designat pot\n"
- "fer que algunes versions de PGP rebutjen aquesta clau.\n"
-
- #: g10/keyedit.c:2949
-@@ -3354,7 +3305,7 @@
-
- #: g10/keyedit.c:2969
- msgid "Enter the user ID of the designated revoker: "
--msgstr "Introdu�u l'ID d'usuari del revocador designat: "
-+msgstr "Introduïu l'ID d'usuari del revocador designat: "
-
- #: g10/keyedit.c:2992
- msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
-@@ -3368,13 +3319,12 @@
- #: g10/keyedit.c:3029
- #, fuzzy
- msgid "this key has already been designated as a revoker\n"
--msgstr "AV�S: Aquesta clau ha estat revocada pel propietari!\n"
-+msgstr "no podeu nominar una clau com el seu propi revocador designat\n"
-
- #: g10/keyedit.c:3048
- msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n"
- msgstr ""
--"AV�S: no es pot desfer la nominaci� d'una clau com a revocador "
--"designat!\n"
-+"AVÃS: no es pot desfer la nominació d'una clau com a revocador designat!\n"
-
- #: g10/keyedit.c:3054
- #, fuzzy
-@@ -3389,15 +3339,15 @@
-
- #: g10/keyedit.c:3121
- msgid "Please select at most one secondary key.\n"
--msgstr "Per favor, seleccioneu com a molt una clau secund�ria.\n"
-+msgstr "Per favor, seleccioneu com a molt una clau secundària.\n"
-
- #: g10/keyedit.c:3125
- msgid "Changing expiration time for a secondary key.\n"
--msgstr "S'est� canviant la data de caducitat per a una clau secund�ria.\n"
-+msgstr "S'està canviant la data de caducitat per a una clau secundària.\n"
-
- #: g10/keyedit.c:3128
- msgid "Changing expiration time for the primary key.\n"
--msgstr "S'est� canviant la data de caducitat per a una clau prim�ria.\n"
-+msgstr "S'està canviant la data de caducitat per a una clau primària.\n"
-
- #: g10/keyedit.c:3174
- msgid "You can't change the expiration date of a v3 key\n"
-@@ -3414,7 +3364,7 @@
- #: g10/keyedit.c:3309 g10/keyedit.c:3419 g10/keyedit.c:3538
- #, fuzzy, c-format
- msgid "skipping v3 self-signature on user ID \"%s\"\n"
--msgstr "es descarta l'autosignatura v3 en l'id d'usuari �%s�\n"
-+msgstr "es descarta l'autosignatura v3 en l'id d'usuari «%s»\n"
-
- #: g10/keyedit.c:3480
- msgid "Enter your preferred keyserver URL: "
-@@ -3433,22 +3383,24 @@
- #: g10/keyedit.c:3622
- #, c-format
- msgid "No user ID with index %d\n"
--msgstr "No hi ha cap ID amb l'�ndex %d\n"
-+msgstr "No hi ha cap ID amb l'índex %d\n"
-
- #: g10/keyedit.c:3668
- #, c-format
- msgid "No secondary key with index %d\n"
--msgstr "No hi ha cap clau secund�ria amb l'�ndex %d\n"
-+msgstr "No hi ha cap clau secundària amb l'índex %d\n"
-
- #: g10/keyedit.c:3785
- #, fuzzy, c-format
- msgid "user ID: \"%s\"\n"
--msgstr "ID d'usuari: �"
-+msgstr "ID d'usuari: «"
-
- #: g10/keyedit.c:3788 g10/keyedit.c:3852 g10/keyedit.c:3895
- #, fuzzy, c-format
- msgid "signed by your key %s on %s%s%s\n"
--msgstr " signat per %08lX el %s%s%s\n"
-+msgstr ""
-+"»\n"
-+"signat amb la vostra clau %08lX el %s\n"
-
- #: g10/keyedit.c:3790 g10/keyedit.c:3854 g10/keyedit.c:3897
- msgid " (non-exportable)"
-@@ -3467,13 +3419,12 @@
- # S! jm
- #: g10/keyedit.c:3802
- msgid "Create a revocation certificate for this signature? (y/N) "
--msgstr ""
--"Voleu crear un certificat de revocaci� per a aquesta signatura? (s/N) "
-+msgstr "Voleu crear un certificat de revocació per a aquesta signatura? (s/N) "
-
- #: g10/keyedit.c:3829
- #, fuzzy, c-format
- msgid "You have signed these user IDs on key %s:\n"
--msgstr "Heu signat els seg�ents ID d'usuari:\n"
-+msgstr "Heu signat els següents ID d'usuari:\n"
-
- #: g10/keyedit.c:3855
- #, fuzzy
-@@ -3492,7 +3443,7 @@
- # (s/N)? ivb
- #: g10/keyedit.c:3904
- msgid "Really create the revocation certificates? (y/N) "
--msgstr "Realment voleu crear els certificats de revocaci�? (s/N) "
-+msgstr "Realment voleu crear els certificats de revocació? (s/N) "
-
- #: g10/keyedit.c:3934
- msgid "no secret key\n"
-@@ -3501,61 +3452,60 @@
- #: g10/keyedit.c:4004
- #, c-format
- msgid "user ID \"%s\" is already revoked\n"
--msgstr "l'ID d'usuari �%s� ja est� revocat\n"
-+msgstr "l'ID d'usuari «%s» ja està revocat\n"
-
- #: g10/keyedit.c:4021
- #, c-format
- msgid "WARNING: a user ID signature is dated %d seconds in the future\n"
--msgstr ""
--"AV�S: una signatura d'ID d'usuari est� datada %d segons en el futur\n"
-+msgstr "AVÃS: una signatura d'ID d'usuari està datada %d segons en el futur\n"
-
- #: g10/keyedit.c:4190
- #, fuzzy, c-format
- msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n"
- msgstr ""
--"S'est� mostrant el photo ID %s de mida %ld per a la clau 0x%08lX (uid %d)\n"
-+"S'està mostrant el photo ID %s de mida %ld per a la clau 0x%08lX (uid %d)\n"
-
- #: g10/keygen.c:293
- #, fuzzy, c-format
- msgid "preference `%s' duplicated\n"
--msgstr "la prefer�ncia %c%lu �s duplicada\n"
-+msgstr "la preferència %c%lu és duplicada\n"
-
- #: g10/keygen.c:300
- #, fuzzy
- msgid "too many cipher preferences\n"
--msgstr "hi ha massa prefer�ncies �%c�\n"
-+msgstr "hi ha massa preferències «%c»\n"
-
- #: g10/keygen.c:302
- #, fuzzy
- msgid "too many digest preferences\n"
--msgstr "hi ha massa prefer�ncies �%c�\n"
-+msgstr "hi ha massa preferències «%c»\n"
-
- #: g10/keygen.c:304
- #, fuzzy
- msgid "too many compression preferences\n"
--msgstr "hi ha massa prefer�ncies �%c�\n"
-+msgstr "hi ha massa preferències «%c»\n"
-
- #: g10/keygen.c:401
- #, fuzzy, c-format
- msgid "invalid item `%s' in preference string\n"
--msgstr "hi ha un car�cter inv�lid en la cadena de prefer�ncia\n"
-+msgstr "hi ha un caràcter invàlid en la cadena de preferència\n"
-
- #: g10/keygen.c:827
- msgid "writing direct signature\n"
--msgstr "s'est� escrivint una signatura directa\n"
-+msgstr "s'està escrivint una signatura directa\n"
-
- #: g10/keygen.c:866
- msgid "writing self signature\n"
--msgstr "s'est� escrivint l'autosignatura\n"
-+msgstr "s'està escrivint l'autosignatura\n"
-
- #: g10/keygen.c:912
- msgid "writing key binding signature\n"
--msgstr "s'est� escrivint la signatura de comprovaci� de la clau\n"
-+msgstr "s'està escrivint la signatura de comprovació de la clau\n"
-
- #: g10/keygen.c:974 g10/keygen.c:1058 g10/keygen.c:1149 g10/keygen.c:2625
- #, c-format
- msgid "keysize invalid; using %u bits\n"
--msgstr "la mida de la clau �s inv�lida; s'hi usaran %u bits\n"
-+msgstr "la mida de la clau és invàlida; s'hi usaran %u bits\n"
-
- #: g10/keygen.c:979 g10/keygen.c:1063 g10/keygen.c:1154 g10/keygen.c:2631
- #, c-format
-@@ -3595,9 +3545,9 @@
- msgstr ""
-
- #: g10/keygen.c:1288
--#, fuzzy, c-format
-+#, c-format
- msgid " (%c) Toggle the encrypt capability\n"
--msgstr " (%d) ElGamal (nom�s xifrar)\n"
-+msgstr ""
-
- #: g10/keygen.c:1291
- #, c-format
-@@ -3621,32 +3571,32 @@
- #: g10/keygen.c:1351
- #, c-format
- msgid " (%d) DSA (sign only)\n"
--msgstr " (%d) DSA (nom�s signar)\n"
-+msgstr " (%d) DSA (només signar)\n"
-
- #: g10/keygen.c:1353
- #, fuzzy, c-format
- msgid " (%d) DSA (set your own capabilities)\n"
--msgstr " (%d) RSA (nom�s xifrar)\n"
-+msgstr " (%d) DSA (només signar)\n"
-
- #: g10/keygen.c:1355
- #, fuzzy, c-format
- msgid " (%d) Elgamal (encrypt only)\n"
--msgstr " (%d) ElGamal (nom�s xifrar)\n"
-+msgstr " (%d) ElGamal (només xifrar)\n"
-
- #: g10/keygen.c:1356
- #, c-format
- msgid " (%d) RSA (sign only)\n"
--msgstr " (%d) RSA (nom�s signar)\n"
-+msgstr " (%d) RSA (només signar)\n"
-
- #: g10/keygen.c:1358
- #, c-format
- msgid " (%d) RSA (encrypt only)\n"
--msgstr " (%d) RSA (nom�s xifrar)\n"
-+msgstr " (%d) RSA (només xifrar)\n"
-
- #: g10/keygen.c:1360
- #, fuzzy, c-format
- msgid " (%d) RSA (set your own capabilities)\n"
--msgstr " (%d) RSA (nom�s xifrar)\n"
-+msgstr " (%d) RSA (només xifrar)\n"
-
- #: g10/keygen.c:1429 g10/keygen.c:2502
- #, fuzzy, c-format
-@@ -3661,7 +3611,7 @@
- #: g10/keygen.c:1446
- #, fuzzy, c-format
- msgid "What keysize do you want? (%u) "
--msgstr "Quina grand�ria voleu? (1024) "
-+msgstr "Quina grandària voleu? (1024) "
-
- #: g10/keygen.c:1460
- #, c-format
-@@ -3671,7 +3621,7 @@
- #: g10/keygen.c:1466
- #, c-format
- msgid "Requested keysize is %u bits\n"
--msgstr "La grand�ria sol�licitada �s %u bits\n"
-+msgstr "La grandària sol·licitada és %u bits\n"
-
- #: g10/keygen.c:1471 g10/keygen.c:1476
- #, c-format
-@@ -3720,7 +3670,7 @@
-
- #: g10/keygen.c:1566
- msgid "invalid value\n"
--msgstr "el valor no �s v�lid\n"
-+msgstr "el valor no és vàlid\n"
-
- #: g10/keygen.c:1571
- #, c-format
-@@ -3732,20 +3682,20 @@
- msgid "%s expires at %s\n"
- msgstr "%s caduca el %s\n"
-
--# Amb �it� es refereix a les dates? ivb
--# Aix� vaig entendre jo. jm
-+# Amb «it» es refereix a les dates? ivb
-+# Això vaig entendre jo. jm
- #: g10/keygen.c:1584
- msgid ""
- "Your system can't display dates beyond 2038.\n"
- "However, it will be correctly handled up to 2106.\n"
- msgstr ""
- "El vostre sistema no pot representar dates posteriors a l'any 2038.\n"
--"Tanmateix, les tractar� b� fins l'any 2106.\n"
-+"Tanmateix, les tractarà bé fins l'any 2106.\n"
-
- #: g10/keygen.c:1589
- #, fuzzy
- msgid "Is this correct? (y/N) "
--msgstr "�s correcte? (s/n)"
-+msgstr "És correcte? (s/n)"
-
- #: g10/keygen.c:1632
- #, fuzzy
-@@ -3759,7 +3709,7 @@
- msgstr ""
- "\n"
- "Necessiteu un ID d'usuari per a identificar la vostra clau; el programa\n"
--"construeix l'id de l'usuari amb el Nom, Comentari i Adre�a electr�nica\n"
-+"construeix l'id de l'usuari amb el Nom, Comentari i Adreça electrònica\n"
- "d'aquesta forma:\n"
- " \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
- "\n"
-@@ -3770,23 +3720,23 @@
-
- #: g10/keygen.c:1652
- msgid "Invalid character in name\n"
--msgstr "Hi ha un car�cter inv�lid en el camp *nom*\n"
-+msgstr "Hi ha un caràcter invàlid en el camp *nom*\n"
-
- #: g10/keygen.c:1654
- msgid "Name may not start with a digit\n"
--msgstr "El nom no pot comen�ar amb un d�git\n"
-+msgstr "El nom no pot començar amb un dígit\n"
-
- #: g10/keygen.c:1656
- msgid "Name must be at least 5 characters long\n"
--msgstr "El nom ha de tenir, si m�s no, 5 car�cters\n"
-+msgstr "El nom ha de tenir, si més no, 5 caràcters\n"
-
- #: g10/keygen.c:1664
- msgid "Email address: "
--msgstr "Adre�a electr�nica: "
-+msgstr "Adreça electrònica: "
-
- #: g10/keygen.c:1675
- msgid "Not a valid email address\n"
--msgstr "No �s una adre�a v�lida\n"
-+msgstr "No és una adreça vàlida\n"
-
- #: g10/keygen.c:1683
- msgid "Comment: "
-@@ -3794,12 +3744,12 @@
-
- #: g10/keygen.c:1689
- msgid "Invalid character in comment\n"
--msgstr "Hi ha un car�cter inv�lid en el camp *comentari*\n"
-+msgstr "Hi ha un caràcter invàlid en el camp *comentari*\n"
-
- #: g10/keygen.c:1712
- #, c-format
- msgid "You are using the `%s' character set.\n"
--msgstr "Esteu usant el joc de car�cters `%s'.\n"
-+msgstr "Esteu usant el joc de caràcters `%s'.\n"
-
- #: g10/keygen.c:1718
- #, c-format
-@@ -3814,11 +3764,10 @@
-
- #: g10/keygen.c:1723
- msgid "Please don't put the email address into the real name or the comment\n"
--msgstr ""
--"No inclogueu l'adre�a ni en el camp *nom* ni en el camp *comentari*\n"
-+msgstr "No inclogueu l'adreça ni en el camp *nom* ni en el camp *comentari*\n"
-
- # xX? ivb
--# Hmm... s�. jm
-+# Hmm... sí. jm
- #: g10/keygen.c:1739
- msgid "NnCcEeOoQq"
- msgstr "NnCcEeOoXx"
-@@ -3855,9 +3804,9 @@
- "using this program with the option \"--edit-key\".\n"
- "\n"
- msgstr ""
--"No voleu contrasenya: �s una mala idea!\n"
--"B�. Si voleu canviar-la m�s endavant,\n"
--"useu aquest programa amb l'opci� \"--edit-key\".\n"
-+"No voleu contrasenya: és una mala idea!\n"
-+"Bé. Si voleu canviar-la més endavant,\n"
-+"useu aquest programa amb l'opció \"--edit-key\".\n"
- "\n"
-
- #: g10/keygen.c:1847
-@@ -3867,36 +3816,35 @@
- "disks) during the prime generation; this gives the random number\n"
- "generator a better chance to gain enough entropy.\n"
- msgstr ""
--"Cal generar molts bits aleat?riament. �s bona idea fer alguna altra cosa\n"
--"(teclejar, moure el ratol�, usar els discos) durant la generaci� de\n"
--"nombres primers; a�� d�na oportunitat al generador de nombres "
--"aleatoris\n"
-+"Cal generar molts bits aleatòriament. És bona idea fer alguna altra cosa\n"
-+"(teclejar, moure el ratolí, usar els discos) durant la generació de\n"
-+"nombres primers; açò dóna oportunitat al generador de nombres aleatoris\n"
- "d'aconseguir prou entropia.\n"
-
- #: g10/keygen.c:2571
- msgid "Key generation canceled.\n"
--msgstr "La generaci� de claus ha estat cancel�lada.\n"
-+msgstr "La generació de claus ha estat cancel·lada.\n"
-
- #: g10/keygen.c:2759 g10/keygen.c:2896
- #, c-format
- msgid "writing public key to `%s'\n"
--msgstr "s'est� escrivint la clau p�blica a �%s�\n"
-+msgstr "s'està escrivint la clau pública a «%s»\n"
-
- #: g10/keygen.c:2761 g10/keygen.c:2899
- #, fuzzy, c-format
- msgid "writing secret key stub to `%s'\n"
--msgstr "s'est� escrivint la clau secreta a �%s�\n"
-+msgstr "s'està escrivint la clau secreta a «%s»\n"
-
- #: g10/keygen.c:2764 g10/keygen.c:2902
- #, c-format
- msgid "writing secret key to `%s'\n"
--msgstr "s'est� escrivint la clau secreta a �%s�\n"
-+msgstr "s'està escrivint la clau secreta a «%s»\n"
-
- # Potser no hi haja cap anell! ivb
- #: g10/keygen.c:2885
- #, c-format
- msgid "no writable public keyring found: %s\n"
--msgstr "no s'ha trobat cap anell p�blic escrivible: %s\n"
-+msgstr "no s'ha trobat cap anell públic escrivible: %s\n"
-
- #: g10/keygen.c:2891
- #, c-format
-@@ -3908,18 +3856,16 @@
- #: g10/keygen.c:2909
- #, c-format
- msgid "error writing public keyring `%s': %s\n"
--msgstr ""
--"s'ha produ�t un error mentre s'escrivia l'anell p�blic �%s�: %s\n"
-+msgstr "s'ha produït un error mentre s'escrivia l'anell públic «%s»: %s\n"
-
- #: g10/keygen.c:2916
- #, c-format
- msgid "error writing secret keyring `%s': %s\n"
--msgstr ""
--"s'ha produ�t un error mentre s'escrivia l'anell secret �%s�: %s\n"
-+msgstr "s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s\n"
-
- #: g10/keygen.c:2939
- msgid "public and secret key created and signed.\n"
--msgstr "s'han creat i signat les claus p�blica i secreta.\n"
-+msgstr "s'han creat i signat les claus pública i secreta.\n"
-
- #: g10/keygen.c:2950
- msgid ""
-@@ -3927,12 +3873,12 @@
- "the command \"--edit-key\" to generate a secondary key for this purpose.\n"
- msgstr ""
- "Noteu que aquesta clau no serveix per a xifrar. Potser vulgueu usar l'ordre\n"
--"\"--edit-key\" per a generar una clau secund�ria per a tal prop�sit.\n"
-+"\"--edit-key\" per a generar una clau secundària per a tal propòsit.\n"
-
- #: g10/keygen.c:2962 g10/keygen.c:3077 g10/keygen.c:3192
- #, c-format
- msgid "Key generation failed: %s\n"
--msgstr "La generaci� de claus ha fallat: %s\n"
-+msgstr "La generació de claus ha fallat: %s\n"
-
- # Werner FIXME: Use ngettext. jm
- #: g10/keygen.c:3013 g10/keygen.c:3128 g10/sign.c:290
-@@ -3954,7 +3900,7 @@
-
- #: g10/keygen.c:3024 g10/keygen.c:3141
- msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
--msgstr "NOTA: crear subclaus per a claus v3 no �s conforme amb OpenPGP\n"
-+msgstr "NOTA: crear subclaus per a claus v3 no és conforme amb OpenPGP\n"
-
- #: g10/keygen.c:3052 g10/keygen.c:3174
- #, fuzzy
-@@ -3969,12 +3915,12 @@
- #: g10/keygen.c:3374
- #, fuzzy, c-format
- msgid "can't create backup file `%s': %s\n"
--msgstr "no s'ha pogut crear �%s�: %s\n"
-+msgstr "no s'ha pogut crear «%s»: %s\n"
-
- #: g10/keygen.c:3397
--#, fuzzy, c-format
-+#, c-format
- msgid "NOTE: backup of card key saved to `%s'\n"
--msgstr "NOTA: la clau secreta %08lX caduca el %s\n"
-+msgstr ""
-
- #: g10/keygen.c:3464
- #, c-format
-@@ -3996,11 +3942,11 @@
-
- #: g10/keylist.c:201
- msgid "Critical signature policy: "
--msgstr "Pol�tica de signatura cr�tica: "
-+msgstr "Política de signatura crítica: "
-
- #: g10/keylist.c:203
- msgid "Signature policy: "
--msgstr "Pol�tica de signatura: "
-+msgstr "Política de signatura: "
-
- #: g10/keylist.c:242
- msgid "Critical preferred keyserver: "
-@@ -4008,15 +3954,15 @@
-
- #: g10/keylist.c:291 g10/keylist.c:335
- msgid "WARNING: invalid notation data found\n"
--msgstr "AV�S: s'hi han trobat dades de notaci� inv�lides\n"
-+msgstr "AVÃS: s'hi han trobat dades de notació invàlides\n"
-
- #: g10/keylist.c:309
- msgid "Critical signature notation: "
--msgstr "Notaci� de signatura cr�tica: "
-+msgstr "Notació de signatura crítica: "
-
- #: g10/keylist.c:311
- msgid "Signature notation: "
--msgstr "Notaci� de signatura: "
-+msgstr "Notació de signatura: "
-
- #: g10/keylist.c:322
- msgid "not human readable"
-@@ -4033,7 +3979,7 @@
-
- #: g10/keylist.c:1425
- msgid "Primary key fingerprint:"
--msgstr "Empremtes digital de la clau prim�ria:"
-+msgstr "Empremtes digital de la clau primària:"
-
- #: g10/keylist.c:1427
- msgid " Subkey fingerprint:"
-@@ -4041,7 +3987,7 @@
-
- #: g10/keylist.c:1434
- msgid " Primary key fingerprint:"
--msgstr " Empremta digital de la clau prim�ria:"
-+msgstr " Empremta digital de la clau primària:"
-
- #: g10/keylist.c:1436
- msgid " Subkey fingerprint:"
-@@ -4063,17 +4009,17 @@
-
- #: g10/keyring.c:1251
- msgid "WARNING: 2 files with confidential information exists.\n"
--msgstr "AV�S: hi ha 2 fitxers amb informaci� confidencial.\n"
-+msgstr "AVÃS: hi ha 2 fitxers amb informació confidencial.\n"
-
- #: g10/keyring.c:1253
- #, c-format
- msgid "%s is the unchanged one\n"
--msgstr "%s �s el que no ha canviat\n"
-+msgstr "%s és el que no ha canviat\n"
-
- #: g10/keyring.c:1254
- #, c-format
- msgid "%s is the new one\n"
--msgstr "%s �s el nou\n"
-+msgstr "%s és el nou\n"
-
- #: g10/keyring.c:1255
- msgid "Please fix this possible security flaw\n"
-@@ -4082,7 +4028,7 @@
- #: g10/keyring.c:1375
- #, fuzzy, c-format
- msgid "caching keyring `%s'\n"
--msgstr "s'est� comprovant l'anell �%s�\n"
-+msgstr "s'està comprovant l'anell «%s»\n"
-
- #: g10/keyring.c:1421
- #, fuzzy, c-format
-@@ -4105,8 +4051,7 @@
- #, fuzzy, c-format
- msgid "WARNING: keyserver option `%s' is not used on this platform\n"
- msgstr ""
--"AV�S: les opcions en �%s� encara no estan actives durant aquesta "
--"execuci�\n"
-+"AVÃS: les opcions en «%s» encara no estan actives durant aquesta execució\n"
-
- #: g10/keyserver.c:378
- #, fuzzy
-@@ -4118,56 +4063,55 @@
- msgstr ""
-
- #: g10/keyserver.c:662 g10/keyserver.c:1147
--#, fuzzy, c-format
-+#, c-format
- msgid "invalid keyserver protocol (us %d!=handler %d)\n"
--msgstr "opcions d'exportaci� no v�lides\n"
-+msgstr ""
-
- #: g10/keyserver.c:752
- #, fuzzy, c-format
- msgid "key \"%s\" not found on keyserver\n"
--msgstr "no s'ha trobat la clau �%s�: %s\n"
-+msgstr "no s'ha trobat la clau «%s»: %s\n"
-
- #: g10/keyserver.c:754
- #, fuzzy
- msgid "key not found on keyserver\n"
--msgstr "no s'ha trobat la clau �%s�: %s\n"
-+msgstr "no s'ha trobat la clau «%s»: %s\n"
-
- #: g10/keyserver.c:901
- #, fuzzy, c-format
- msgid "requesting key %s from %s server %s\n"
--msgstr "s'est� sol�licitant la clau %08lX de %s\n"
-+msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
- #: g10/keyserver.c:905
- #, fuzzy, c-format
- msgid "requesting key %s from %s\n"
--msgstr "s'est� sol�licitant la clau %08lX de %s\n"
-+msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
- #: g10/keyserver.c:1050
- #, fuzzy, c-format
- msgid "sending key %s to %s server %s\n"
--msgstr "s'est� cercant �%s� al servidor HKP %s\n"
-+msgstr "s'està cercant «%s» al servidor HKP %s\n"
-
- #: g10/keyserver.c:1054
- #, fuzzy, c-format
- msgid "sending key %s to %s\n"
--msgstr ""
--"�\n"
--"signat amb la vostra clau %08lX el %s\n"
-+msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
- #: g10/keyserver.c:1097
- #, fuzzy, c-format
- msgid "searching for \"%s\" from %s server %s\n"
--msgstr "s'est� cercant �%s� al servidor HKP %s\n"
-+msgstr "s'està cercant «%s» al servidor HKP %s\n"
-
- #: g10/keyserver.c:1100
- #, fuzzy, c-format
- msgid "searching for \"%s\" from %s\n"
--msgstr "s'est� cercant �%s� al servidor HKP %s\n"
-+msgstr "s'està cercant «%s» al servidor HKP %s\n"
-
-+# «del servidor», «en el servidor»? ivb
- #: g10/keyserver.c:1107 g10/keyserver.c:1202
- #, fuzzy
- msgid "no keyserver action!\n"
--msgstr "opcions d'exportaci� no v�lides\n"
-+msgstr "error de servidor de claus"
-
- #: g10/keyserver.c:1155
- #, c-format
-@@ -4180,7 +4124,7 @@
-
- #: g10/keyserver.c:1223
- msgid "no keyserver known (use option --keyserver)\n"
--msgstr "no es coneix cap servidor de claus (useu l'opci� \"--keyserver\")\n"
-+msgstr "no es coneix cap servidor de claus (useu l'opció \"--keyserver\")\n"
-
- #: g10/keyserver.c:1229
- msgid "external keyserver calls are not supported in this build\n"
-@@ -4201,13 +4145,13 @@
- msgid "gpgkeys_%s does not support handler version %d\n"
- msgstr ""
-
--# �del servidor�, �en el servidor�? ivb
-+# «del servidor», «en el servidor»? ivb
- #: g10/keyserver.c:1261
- #, fuzzy
- msgid "keyserver timed out\n"
- msgstr "error de servidor de claus"
-
--# �del servidor�, �en el servidor�? ivb
-+# «del servidor», «en el servidor»? ivb
- #: g10/keyserver.c:1266
- #, fuzzy
- msgid "keyserver internal error\n"
-@@ -4216,44 +4160,43 @@
- #: g10/keyserver.c:1275
- #, fuzzy, c-format
- msgid "keyserver communications error: %s\n"
--msgstr "la recepci� des del servidor de claus ha fallat: %s\n"
-+msgstr "la recepció des del servidor de claus ha fallat: %s\n"
-
- #: g10/keyserver.c:1300 g10/keyserver.c:1334
- #, fuzzy, c-format
- msgid "\"%s\" not a key ID: skipping\n"
--msgstr "%s: no �s un ID v�lid\n"
-+msgstr "%s: no és un ID vàlid\n"
-
- #: g10/keyserver.c:1585
- #, fuzzy, c-format
- msgid "WARNING: unable to refresh key %s via %s: %s\n"
--msgstr "AV�S: no s'ha pogut eliminar el fitxer temporal (%s) �%s�: %s\n"
-+msgstr "AVÃS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n"
-
- #: g10/keyserver.c:1607
- #, fuzzy, c-format
- msgid "refreshing 1 key from %s\n"
--msgstr "s'est� sol�licitant la clau %08lX de %s\n"
-+msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
- #: g10/keyserver.c:1609
- #, fuzzy, c-format
- msgid "refreshing %d keys from %s\n"
--msgstr "s'est� sol�licitant la clau %08lX de %s\n"
-+msgstr "s'està sol·licitant la clau %08lX de %s\n"
-
- #: g10/mainproc.c:248
- #, c-format
- msgid "weird size for an encrypted session key (%d)\n"
--msgstr "mida extranya per a una clau de sessi� xifrada (%d)\n"
-+msgstr "mida extranya per a una clau de sessió xifrada (%d)\n"
-
- #: g10/mainproc.c:262
- #, c-format
- msgid "bad passphrase or unknown cipher algorithm (%d)\n"
- msgstr ""
--"la contrasenya �s incorrecta o l'algoritme de xifratge (%d) �s "
--"desconegut\n"
-+"la contrasenya és incorrecta o l'algoritme de xifratge (%d) és desconegut\n"
-
- #: g10/mainproc.c:299
- #, c-format
- msgid "%s encrypted session key\n"
--msgstr "clau de sessi� xifrada amb %s\n"
-+msgstr "clau de sessió xifrada amb %s\n"
-
- #: g10/mainproc.c:309
- #, fuzzy, c-format
-@@ -4263,11 +4206,11 @@
- #: g10/mainproc.c:373
- #, fuzzy, c-format
- msgid "public key is %s\n"
--msgstr "la clau p�blica �s %08lX\n"
-+msgstr "la clau pública és %08lX\n"
-
- #: g10/mainproc.c:428
- msgid "public key encrypted data: good DEK\n"
--msgstr "dades xifrades amb clau p�blica: bona clau de xifratge (DEK)\n"
-+msgstr "dades xifrades amb clau pública: bona clau de xifratge (DEK)\n"
-
- #: g10/mainproc.c:461
- #, fuzzy, c-format
-@@ -4275,9 +4218,9 @@
- msgstr "xifrat amb una clau %2$s de %1$u bits, ID %3$08lX, creada en %4$s\n"
-
- #: g10/mainproc.c:465 g10/pkclist.c:218
--#, fuzzy, c-format
-+#, c-format
- msgid " \"%s\"\n"
--msgstr " alias \""
-+msgstr ""
-
- #: g10/mainproc.c:469
- #, fuzzy, c-format
-@@ -4287,7 +4230,7 @@
- #: g10/mainproc.c:483
- #, c-format
- msgid "public key decryption failed: %s\n"
--msgstr "ha fallat el desxifratge amb la clau p�blica: %s\n"
-+msgstr "ha fallat el desxifratge amb la clau pública: %s\n"
-
- #: g10/mainproc.c:497
- #, c-format
-@@ -4299,20 +4242,20 @@
- msgid "encrypted with 1 passphrase\n"
- msgstr "xifrat amb 1 contrasenya\n"
-
--# I no ser� �dades xifrades amb %s�? ivb
--# Sembla que s�, ho marque per a mirar-ho m�s endavant. jm
-+# I no serà «dades xifrades amb %s»? ivb
-+# Sembla que sí, ho marque per a mirar-ho més endavant. jm
- #: g10/mainproc.c:527 g10/mainproc.c:549
- #, c-format
- msgid "assuming %s encrypted data\n"
- msgstr "s'assumeixen dades xifrades amb %s\n"
-
--# L'optim�stic �s aquell que t� una Fe Cega en que Tot Anir� B�! ivb
-+# L'optimístic és aquell que té una Fe Cega en que Tot Anirà Bé! ivb
- #: g10/mainproc.c:535
- #, c-format
- msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
- msgstr ""
--"El xifratge IDEA no est� disponible, s'intentar� utilitzar optimistament "
--"%s en el seu lloc\n"
-+"El xifratge IDEA no està disponible, s'intentarà utilitzar optimistament %s "
-+"en el seu lloc\n"
-
- #: g10/mainproc.c:567
- msgid "decryption okay\n"
-@@ -4320,11 +4263,11 @@
-
- #: g10/mainproc.c:571
- msgid "WARNING: message was not integrity protected\n"
--msgstr "AV�S: el missatge no tenia protecci� d'integritat\n"
-+msgstr "AVÃS: el missatge no tenia protecció d'integritat\n"
-
- #: g10/mainproc.c:584
- msgid "WARNING: encrypted message has been manipulated!\n"
--msgstr "AV�S: el missatge xifrat ha estat manipulat!\n"
-+msgstr "AVÃS: el missatge xifrat ha estat manipulat!\n"
-
- #: g10/mainproc.c:590
- #, c-format
-@@ -4333,7 +4276,7 @@
-
- #: g10/mainproc.c:610
- msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
--msgstr "NOTA: el remitent ha sol�licitat \"alt secret\"\n"
-+msgstr "NOTA: el remitent ha sol·licitat \"alt secret\"\n"
-
- #: g10/mainproc.c:612
- #, c-format
-@@ -4342,15 +4285,15 @@
-
- #: g10/mainproc.c:784
- msgid "standalone revocation - use \"gpg --import\" to apply\n"
--msgstr "revocaci� aut�noma: useu \"gpg --import\" per a aplicar-la\n"
-+msgstr "revocació autònoma: useu \"gpg --import\" per a aplicar-la\n"
-
- #: g10/mainproc.c:1288
- msgid "signature verification suppressed\n"
--msgstr "s'ha eliminat la verificaci� de signatura\n"
-+msgstr "s'ha eliminat la verificació de signatura\n"
-
- #: g10/mainproc.c:1330 g10/mainproc.c:1340
- msgid "can't handle these multiple signatures\n"
--msgstr "no es poden tractar aquestes signatures m�ltiples\n"
-+msgstr "no es poden tractar aquestes signatures múltiples\n"
-
- #: g10/mainproc.c:1350
- #, fuzzy, c-format
-@@ -4362,7 +4305,7 @@
- msgid " using %s key %s\n"
- msgstr " alias \""
-
--# �%.*s� no ser� una data? Caldr� �el� al davant. ivb
-+# «%.*s» no serà una data? Caldrà «el» al davant. ivb
- #: g10/mainproc.c:1355
- #, fuzzy, c-format
- msgid "Signature made %s using %s key ID %s\n"
-@@ -4370,7 +4313,7 @@
-
- #: g10/mainproc.c:1375
- msgid "Key available at: "
--msgstr "La clau �s disponible en: "
-+msgstr "La clau és disponible en: "
-
- #: g10/mainproc.c:1480 g10/mainproc.c:1528
- #, fuzzy, c-format
-@@ -4430,19 +4373,18 @@
-
- #: g10/mainproc.c:1760 g10/mainproc.c:1776 g10/mainproc.c:1862
- msgid "not a detached signature\n"
--msgstr "no �s una signatura separada\n"
-+msgstr "no és una signatura separada\n"
-
- #: g10/mainproc.c:1803
- msgid ""
- "WARNING: multiple signatures detected. Only the first will be checked.\n"
- msgstr ""
--"AV�S: s'han detectat m�ltiples signatures. Nom�s es comprovar� la "
--"primera.\n"
-+"AVÃS: s'han detectat múltiples signatures. Només es comprovarà la primera.\n"
-
- #: g10/mainproc.c:1811
- #, c-format
- msgid "standalone signature of class 0x%02x\n"
--msgstr "signatura aut�noma de classe 0x%02x\n"
-+msgstr "signatura autònoma de classe 0x%02x\n"
-
- #: g10/mainproc.c:1868
- msgid "old style (PGP 2.x) signature\n"
-@@ -4450,33 +4392,33 @@
-
- #: g10/mainproc.c:1878
- msgid "invalid root packet detected in proc_tree()\n"
--msgstr "s'ha detectat un paquet arrel inv�lid en proc_tree()\n"
-+msgstr "s'ha detectat un paquet arrel invàlid en proc_tree()\n"
-
--# bolcats de mem�ria? ivb
-+# bolcats de memòria? ivb
- #: g10/misc.c:105
- #, c-format
- msgid "can't disable core dumps: %s\n"
--msgstr "no s'han pogut desactivar els bolcats de mem�ria: %s\n"
-+msgstr "no s'han pogut desactivar els bolcats de memòria: %s\n"
-
- #: g10/misc.c:125 g10/misc.c:153 g10/misc.c:225
- #, fuzzy, c-format
- msgid "fstat of `%s' failed in %s: %s\n"
--msgstr "ha fallat l'actualitzaci� de la base de dades de confian�a: %s\n"
-+msgstr "ha fallat l'actualització de la base de dades de confiança: %s\n"
-
- #: g10/misc.c:190
- #, fuzzy, c-format
- msgid "fstat(%d) failed in %s: %s\n"
--msgstr "base de dades de confian�a: ha fallat la lectura (n=%d): %s\n"
-+msgstr "base de dades de confiança: ha fallat la lectura (n=%d): %s\n"
-
- #: g10/misc.c:299
- #, fuzzy, c-format
- msgid "WARNING: using experimental public key algorithm %s\n"
--msgstr "no es pot treballar amb l'algoritme de clau p�blica %d\n"
-+msgstr "no es pot treballar amb l'algoritme de clau pública %d\n"
-
- #: g10/misc.c:314
- #, fuzzy, c-format
- msgid "WARNING: using experimental cipher algorithm %s\n"
--msgstr "l'algoritme de xifratge no �s implementat"
-+msgstr "l'algoritme de xifratge no és implementat"
-
- #: g10/misc.c:329
- #, fuzzy, c-format
-@@ -4486,43 +4428,40 @@
- #: g10/misc.c:334
- #, fuzzy, c-format
- msgid "WARNING: digest algorithm %s is deprecated\n"
--msgstr ""
--"for�ar l'algoritme de digest %s (%d) viola les prefer�ncies del "
--"destinatari\n"
-+msgstr "AVÃS: %s és una opció desaconsellada.\n"
-
- #: g10/misc.c:430
- msgid "the IDEA cipher plugin is not present\n"
--msgstr "el m�dul de xifratge IDEA no est� present\n"
-+msgstr "el mòdul de xifratge IDEA no està present\n"
-
- #: g10/misc.c:431
- msgid ""
- "please see http://www.gnupg.org/why-not-idea.html for more information\n"
--msgstr ""
--"vegeu http://www.gnupg.org/why-not-idea.html per a m�s informaci�\n"
-+msgstr "vegeu http://www.gnupg.org/why-not-idea.html per a més informació\n"
-
- #: g10/misc.c:664
- #, c-format
- msgid "%s:%d: deprecated option \"%s\"\n"
--msgstr "%s:%d: l'opci� �%s� est� desaconsellada.\n"
-+msgstr "%s:%d: l'opció «%s» està desaconsellada.\n"
-
- #: g10/misc.c:668
- #, c-format
- msgid "WARNING: \"%s\" is a deprecated option\n"
--msgstr "AV�S: %s �s una opci� desaconsellada.\n"
-+msgstr "AVÃS: %s és una opció desaconsellada.\n"
-
- #: g10/misc.c:670
- #, c-format
- msgid "please use \"%s%s\" instead\n"
--msgstr "si us plau, utilitzeu �%s%s� en el seu lloc\n"
-+msgstr "si us plau, utilitzeu «%s%s» en el seu lloc\n"
-
--# G�nere? Nombre? Passat, futur? ivb
-+# Gènere? Nombre? Passat, futur? ivb
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: g10/misc.c:681
- msgid "Uncompressed"
- msgstr "No comprimit"
-
--# G�nere? Nombre? Passat, futur? ivb
-+# Gènere? Nombre? Passat, futur? ivb
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: g10/misc.c:706
-@@ -4538,17 +4477,17 @@
- #: g10/misc.c:973
- #, fuzzy, c-format
- msgid "ambiguous option `%s'\n"
--msgstr "s'estan llegint opcions de �%s�\n"
-+msgstr "s'estan llegint opcions de «%s»\n"
-
- #: g10/misc.c:998
- #, fuzzy, c-format
- msgid "unknown option `%s'\n"
--msgstr "el destinatari predeterminat �s desconegut �%s�\n"
-+msgstr "el destinatari predeterminat és desconegut «%s»\n"
-
- #: g10/openfile.c:84
- #, c-format
- msgid "File `%s' exists. "
--msgstr "El fitxer �%s� existeix. "
-+msgstr "El fitxer «%s» existeix. "
-
- #: g10/openfile.c:86
- #, fuzzy
-@@ -4558,33 +4497,32 @@
- #: g10/openfile.c:119
- #, c-format
- msgid "%s: unknown suffix\n"
--msgstr "%s: el sufix �s desconegut\n"
-+msgstr "%s: el sufix és desconegut\n"
-
- #: g10/openfile.c:141
- msgid "Enter new filename"
--msgstr "Introdu�u el nou nom del fitxer"
-+msgstr "Introduïu el nou nom del fitxer"
-
- # Indi? ivb
- #: g10/openfile.c:184
- msgid "writing to stdout\n"
--msgstr "s'est� escrivint en stdout\n"
-+msgstr "s'està escrivint en stdout\n"
-
- #: g10/openfile.c:296
- #, c-format
- msgid "assuming signed data in `%s'\n"
--msgstr "s'asumeix que hi ha dades signades en �%s�\n"
-+msgstr "s'asumeix que hi ha dades signades en «%s»\n"
-
- #: g10/openfile.c:375
- #, c-format
- msgid "new configuration file `%s' created\n"
--msgstr "s'ha creat el nou fitxer d'opcions �%s�\n"
-+msgstr "s'ha creat el nou fitxer d'opcions «%s»\n"
-
- #: g10/openfile.c:377
- #, c-format
- msgid "WARNING: options in `%s' are not yet active during this run\n"
- msgstr ""
--"AV�S: les opcions en �%s� encara no estan actives durant aquesta "
--"execuci�\n"
-+"AVÃS: les opcions en «%s» encara no estan actives durant aquesta execució\n"
-
- #: g10/openfile.c:409
- #, fuzzy, c-format
-@@ -4594,22 +4532,21 @@
- #: g10/parse-packet.c:119
- #, c-format
- msgid "can't handle public key algorithm %d\n"
--msgstr "no es pot treballar amb l'algoritme de clau p�blica %d\n"
-+msgstr "no es pot treballar amb l'algoritme de clau pública %d\n"
-
- #: g10/parse-packet.c:688
- msgid "WARNING: potentially insecure symmetrically encrypted session key\n"
- msgstr ""
--"AV�S: la clau de sessi� pot estar xifrada sim�tricament de forma "
--"insegura\n"
-+"AVÃS: la clau de sessió pot estar xifrada simètricament de forma insegura\n"
-
- #: g10/parse-packet.c:1112
- #, c-format
- msgid "subpacket of type %d has critical bit set\n"
--msgstr "el subpaquet de tipus %d t� el bit cr�tic activat\n"
-+msgstr "el subpaquet de tipus %d té el bit crític activat\n"
-
- #: g10/passphrase.c:478 g10/passphrase.c:525
- msgid "gpg-agent is not available in this session\n"
--msgstr "gpg-agent no est� disponible en aquesta sessi�\n"
-+msgstr "gpg-agent no està disponible en aquesta sessió\n"
-
- #: g10/passphrase.c:486
- msgid "can't set client pid for the agent\n"
-@@ -4626,25 +4563,25 @@
-
- #: g10/passphrase.c:534
- msgid "malformed GPG_AGENT_INFO environment variable\n"
--msgstr "la variable d'entorn GPG_AGENT_INFO �s malformada\n"
-+msgstr "la variable d'entorn GPG_AGENT_INFO és malformada\n"
-
- #: g10/passphrase.c:547
- #, c-format
- msgid "gpg-agent protocol version %d is not supported\n"
--msgstr "la versi� %d del protocol de gpg-agent no est� suportada\n"
-+msgstr "la versió %d del protocol de gpg-agent no està suportada\n"
-
- #: g10/passphrase.c:568
- #, c-format
- msgid "can't connect to `%s': %s\n"
--msgstr "no s'ha pogut connectar amb �%s�: %s\n"
-+msgstr "no s'ha pogut connectar amb «%s»: %s\n"
-
- #: g10/passphrase.c:590
- msgid "communication problem with gpg-agent\n"
--msgstr "hi ha un problema de comunicaci� amb el gpg-agent\n"
-+msgstr "hi ha un problema de comunicació amb el gpg-agent\n"
-
- #: g10/passphrase.c:597 g10/passphrase.c:932 g10/passphrase.c:1044
- msgid "problem with the agent - disabling agent use\n"
--msgstr "hi ha un problema amb l'agent: es deshabilitar� el seu �s\n"
-+msgstr "hi ha un problema amb l'agent: es deshabilitarà el seu ús\n"
-
- #: g10/passphrase.c:700 g10/passphrase.c:1205
- #, fuzzy, c-format
-@@ -4654,14 +4591,14 @@
- # Com es canvia l'ordre dels arguments? jm
- # Ah, bingo! jm
- # Uh, ara torna a donar error. FIXME
--# La idea �s ficar:
-+# La idea és ficar:
- # "Necessiteu la contrasenya per desblocar la clau secreta de l'usuari:\n"
--# "�%1$.*s�\n"
-+# "«%1$.*s»\n"
- # "clau %3$s de %2$u bits, ID %4$08lX, creada en %5$s%6$s\n"
- # jm
--# Se't passava l'argument �*�. printf(3), hieroglyph(7). ivb
-+# Se't passava l'argument «*». printf(3), hieroglyph(7). ivb
- # Ah! Prova-ho, no casque alguna cosa :P ivb
--# Ah, ja veig! Moltes gr�cies! Aquest msgstr ha quedat curi�s :) jm
-+# Ah, ja veig! Moltes gràcies! Aquest msgstr ha quedat curiós :) jm
- #: g10/passphrase.c:714
- #, fuzzy, c-format
- msgid ""
-@@ -4670,7 +4607,7 @@
- "%u-bit %s key, ID %s, created %s%s\n"
- msgstr ""
- "Necessiteu la contrasenya per desblocar la clau secreta de l'usuari:\n"
--"�%2$.*1$s�\n"
-+"«%2$.*1$s»\n"
- "clau %4$s de %3$u bits, ID %5$08lX, creada en %6$s%7$s\n"
-
- #: g10/passphrase.c:739
-@@ -4679,19 +4616,19 @@
-
- #: g10/passphrase.c:741
- msgid "Enter passphrase\n"
--msgstr "Introdu�u la contrasenya\n"
-+msgstr "Introduïu la contrasenya\n"
-
- #: g10/passphrase.c:779
- msgid "passphrase too long\n"
--msgstr "la contrasenya �s massa llarga\n"
-+msgstr "la contrasenya és massa llarga\n"
-
- #: g10/passphrase.c:792
- msgid "invalid response from agent\n"
--msgstr "la resposta de l'agent �s inv�lida\n"
-+msgstr "la resposta de l'agent és invàlida\n"
-
- #: g10/passphrase.c:807 g10/passphrase.c:926
- msgid "cancelled by user\n"
--msgstr "s'ha cancel�lat per l'usuari\n"
-+msgstr "s'ha cancel·lat per l'usuari\n"
-
- #: g10/passphrase.c:812 g10/passphrase.c:1015
- #, c-format
-@@ -4701,11 +4638,11 @@
- #: g10/passphrase.c:1096 g10/passphrase.c:1258
- #, fuzzy
- msgid "can't query passphrase in batch mode\n"
--msgstr "no es pot demanar la contrasenya en mode desat�s\n"
-+msgstr "no es pot demanar la contrasenya en mode desatès\n"
-
- #: g10/passphrase.c:1103 g10/passphrase.c:1263
- msgid "Enter passphrase: "
--msgstr "Introdu�u la contrasenya: "
-+msgstr "Introduïu la contrasenya: "
-
- #: g10/passphrase.c:1186
- #, fuzzy, c-format
-@@ -4742,19 +4679,18 @@
- "\n"
- "Seleccioneu una imatge per a utilitzarla en el vostre photo ID. La imatge\n"
- "ha de ser un fitxer JPEG. Recordeu que la imatge es desa dins de la vostra\n"
--"clau p�blica. Si utilitzeu una foto molt gran, la vostra clau tamb� es "
--"far�\n"
-+"clau pública. Si utilitzeu una foto molt gran, la vostra clau també es farà\n"
- "molt gran!\n"
- "Es recomana una imatge amb una mida aproximada de 240x288.\n"
-
- #: g10/photoid.c:80
- msgid "Enter JPEG filename for photo ID: "
--msgstr "Introdu�u el nom del fitxer JPEG per al photo ID: "
-+msgstr "Introduïu el nom del fitxer JPEG per al photo ID: "
-
- #: g10/photoid.c:94
- #, fuzzy, c-format
- msgid "unable to open JPEG file `%s': %s\n"
--msgstr "no es pot obrir el fitxer: %s\n"
-+msgstr "No s'ha pogut obrir la foto «%s»: %s\n"
-
- #: g10/photoid.c:102
- #, c-format
-@@ -4769,11 +4705,11 @@
- #: g10/photoid.c:119
- #, fuzzy, c-format
- msgid "`%s' is not a JPEG file\n"
--msgstr "�%s� no �s un fitxer JPEG\n"
-+msgstr "«%s» no és un fitxer JPEG\n"
-
- #: g10/photoid.c:136
- msgid "Is this photo correct (y/N/q)? "
--msgstr "�s aquesta foto correcta (s/N/x)? "
-+msgstr "És aquesta foto correcta (s/N/x)? "
-
- #: g10/photoid.c:338
- msgid "unable to display photo ID!\n"
-@@ -4781,11 +4717,11 @@
-
- #: g10/pkclist.c:61 g10/revoke.c:580
- msgid "No reason specified"
--msgstr "No s'ha especificat cap ra�"
-+msgstr "No s'ha especificat cap raó"
-
- #: g10/pkclist.c:63 g10/revoke.c:582
- msgid "Key is superseded"
--msgstr "La clau ha estat substitu�da"
-+msgstr "La clau ha estat substituïda"
-
- #: g10/pkclist.c:65 g10/revoke.c:581
- msgid "Key has been compromised"
-@@ -4797,15 +4733,15 @@
-
- #: g10/pkclist.c:69 g10/revoke.c:584
- msgid "User ID is no longer valid"
--msgstr "L'ID d'usuari ja no �s v�lid"
-+msgstr "L'ID d'usuari ja no és vàlid"
-
- #: g10/pkclist.c:73
- msgid "reason for revocation: "
--msgstr "ra� de la revocaci�: "
-+msgstr "raó de la revocació: "
-
- #: g10/pkclist.c:90
- msgid "revocation comment: "
--msgstr "comentari de la revocaci�: "
-+msgstr "comentari de la revocació: "
-
- #: g10/pkclist.c:205
- msgid "iImMqQsS"
-@@ -4815,24 +4751,25 @@
- #, fuzzy
- msgid "No trust value assigned to:\n"
- msgstr ""
--"No hi ha cap valor de confian�a assignat a:\n"
-+"No hi ha cap valor de confiança assignat a:\n"
- "%4u%c/%08lX %s \""
-
- #: g10/pkclist.c:245
--#, fuzzy, c-format
-+#, c-format
- msgid " aka \"%s\"\n"
--msgstr " alias \""
-+msgstr ""
-
- #: g10/pkclist.c:255
- #, fuzzy
- msgid ""
- "How much do you trust that this key actually belongs to the named user?\n"
--msgstr "Aquesta clau pertany probablement al seu propietari\n"
-+msgstr ""
-+"%08lX: No hi ha res que indique que la signatura pertany al seu propietari.\n"
-
- #: g10/pkclist.c:270
- #, fuzzy, c-format
- msgid " %d = I don't know or won't say\n"
--msgstr " %d = No ho s�\n"
-+msgstr " %d = No ho sé\n"
-
- #: g10/pkclist.c:272
- #, fuzzy, c-format
-@@ -4847,7 +4784,7 @@
- #: g10/pkclist.c:284
- #, fuzzy
- msgid " m = back to the main menu\n"
--msgstr " m = torna al men� principal\n"
-+msgstr " m = torna al menú principal\n"
-
- #: g10/pkclist.c:287
- #, fuzzy
-@@ -4868,16 +4805,16 @@
-
- #: g10/pkclist.c:298 g10/revoke.c:609
- msgid "Your decision? "
--msgstr "La vostra decisi�? "
-+msgstr "La vostra decisió? "
-
- #: g10/pkclist.c:319
- #, fuzzy
- msgid "Do you really want to set this key to ultimate trust? (y/N) "
--msgstr "Realment voleu assignar confian�a absoluta a aquesta clau? "
-+msgstr "Realment voleu assignar confiança absoluta a aquesta clau? "
-
- #: g10/pkclist.c:333
- msgid "Certificates leading to an ultimately trusted key:\n"
--msgstr "Certificats que duen a una clau de confian�a absoluta:\n"
-+msgstr "Certificats que duen a una clau de confiança absoluta:\n"
-
- #: g10/pkclist.c:418
- #, fuzzy, c-format
-@@ -4898,7 +4835,7 @@
-
- #: g10/pkclist.c:434
- msgid "This key belongs to us\n"
--msgstr "Aquesta clau �s nostra\n"
-+msgstr "Aquesta clau és nostra\n"
-
- #: g10/pkclist.c:460
- #, fuzzy
-@@ -4907,9 +4844,9 @@
- "in the user ID. If you *really* know what you are doing,\n"
- "you may answer the next question with yes.\n"
- msgstr ""
--"NO �s segur que la clau pertanya a la persona esmentada en\n"
--"l'ID d'usuari. Si *realment* sabeu qu� feu, podeu respondre\n"
--"�s�� a la seg�ent pregunta\n"
-+"NO és segur que la clau pertanya a la persona esmentada en\n"
-+"l'ID d'usuari. Si *realment* sabeu què feu, podeu respondre\n"
-+"«sí» a la següent pregunta\n"
- "\n"
-
- #: g10/pkclist.c:467
-@@ -4919,32 +4856,32 @@
-
- #: g10/pkclist.c:501
- msgid "WARNING: Using untrusted key!\n"
--msgstr "AV�S: S'est� usant una clau no fiable!\n"
-+msgstr "AVÃS: S'està usant una clau no fiable!\n"
-
- #: g10/pkclist.c:508
- #, fuzzy
- msgid "WARNING: this key might be revoked (revocation key not present)\n"
- msgstr ""
--"AV�S: la clau %08lX pot estar revocada: la clau de revocaci� %08lX no "
--"est� present.\n"
-+"AVÃS: la clau %08lX pot estar revocada: la clau de revocació %08lX no està "
-+"present.\n"
-
- #: g10/pkclist.c:517
- #, fuzzy
- msgid "WARNING: This key has been revoked by its designated revoker!\n"
--msgstr "AV�S: Aquesta clau ha estat revocada pel propietari!\n"
-+msgstr "AVÃS: Aquesta clau ha estat revocada pel propietari!\n"
-
- #: g10/pkclist.c:520
- msgid "WARNING: This key has been revoked by its owner!\n"
--msgstr "AV�S: Aquesta clau ha estat revocada pel propietari!\n"
-+msgstr "AVÃS: Aquesta clau ha estat revocada pel propietari!\n"
-
- #: g10/pkclist.c:521
- #, fuzzy
- msgid " This could mean that the signature is forged.\n"
--msgstr " A�� podria significar que la signatura �s falsificada.\n"
-+msgstr " Açò podria significar que la signatura és falsificada.\n"
-
- #: g10/pkclist.c:527
- msgid "WARNING: This subkey has been revoked by its owner!\n"
--msgstr "AV�S: Aquesta subclau ha estat revocada pel propietari!\n"
-+msgstr "AVÃS: Aquesta subclau ha estat revocada pel propietari!\n"
-
- #: g10/pkclist.c:532
- msgid "Note: This key has been disabled.\n"
-@@ -4956,8 +4893,7 @@
-
- #: g10/pkclist.c:548
- msgid "WARNING: This key is not certified with a trusted signature!\n"
--msgstr ""
--"AV�S: Aquesta clau no ve certificada per una signatura de confian�a!\n"
-+msgstr "AVÃS: Aquesta clau no ve certificada per una signatura de confiança!\n"
-
- #: g10/pkclist.c:550
- msgid ""
-@@ -4967,20 +4903,20 @@
-
- #: g10/pkclist.c:558
- msgid "WARNING: We do NOT trust this key!\n"
--msgstr "AV�S: La clau NO �s de confian�a!\n"
-+msgstr "AVÃS: La clau NO és de confiança!\n"
-
- #: g10/pkclist.c:559
- msgid " The signature is probably a FORGERY.\n"
--msgstr " Probablement la signatura �s FALSA.\n"
-+msgstr " Probablement la signatura és FALSA.\n"
-
- #: g10/pkclist.c:567
- msgid ""
- "WARNING: This key is not certified with sufficiently trusted signatures!\n"
--msgstr "AV�S: Aquesta clau no ve certificada per signatures prou fiables!\n"
-+msgstr "AVÃS: Aquesta clau no ve certificada per signatures prou fiables!\n"
-
- #: g10/pkclist.c:569
- msgid " It is not certain that the signature belongs to the owner.\n"
--msgstr "No �s segur que la signatura pertanya al seu propietari.\n"
-+msgstr "No és segur que la signatura pertanya al seu propietari.\n"
-
- #: g10/pkclist.c:734 g10/pkclist.c:767 g10/pkclist.c:936 g10/pkclist.c:996
- #, c-format
-@@ -4990,11 +4926,11 @@
- #: g10/pkclist.c:744 g10/pkclist.c:968
- #, c-format
- msgid "%s: skipped: public key already present\n"
--msgstr "%s: es descarta: la clau p�blica ja est� present\n"
-+msgstr "%s: es descarta: la clau pública ja està present\n"
-
- #: g10/pkclist.c:786
- msgid "You did not specify a user ID. (you may use \"-r\")\n"
--msgstr "No heu especificat un ID d'usuari. (podeu usar �-r�)\n"
-+msgstr "No heu especificat un ID d'usuari. (podeu usar «-r»)\n"
-
- #: g10/pkclist.c:802
- msgid "Current recipients:\n"
-@@ -5006,7 +4942,7 @@
- "Enter the user ID. End with an empty line: "
- msgstr ""
- "\n"
--"Introdu�u l'ID d'usuari. Finalitzeu amb una l�nia en blanc: "
-+"Introduïu l'ID d'usuari. Finalitzeu amb una línia en blanc: "
-
- #: g10/pkclist.c:844
- msgid "No such user ID.\n"
-@@ -5014,38 +4950,38 @@
-
- #: g10/pkclist.c:849 g10/pkclist.c:911
- msgid "skipped: public key already set as default recipient\n"
--msgstr "es descarta: la clau p�blica ja s'ha especificat com a destinatari\n"
-+msgstr "es descarta: la clau pública ja s'ha especificat com a destinatari\n"
-
- #: g10/pkclist.c:867
- msgid "Public key is disabled.\n"
--msgstr "La clau p�blica est� desactivada.\n"
-+msgstr "La clau pública està desactivada.\n"
-
- #: g10/pkclist.c:874
- msgid "skipped: public key already set\n"
--msgstr "es descarta: la clau p�blica ja est� establida\n"
-+msgstr "es descarta: la clau pública ja està establida\n"
-
- #: g10/pkclist.c:903
- #, fuzzy, c-format
- msgid "unknown default recipient \"%s\"\n"
--msgstr "el destinatari predeterminat �s desconegut �%s�\n"
-+msgstr "el destinatari predeterminat és desconegut «%s»\n"
-
- #: g10/pkclist.c:948
- #, c-format
- msgid "%s: skipped: public key is disabled\n"
--msgstr "%s: es descarta: la clau p�blica est� desactivada\n"
-+msgstr "%s: es descarta: la clau pública està desactivada\n"
-
- #: g10/pkclist.c:1003
- msgid "no valid addressees\n"
--msgstr "no hi ha adreces v�lides\n"
-+msgstr "no hi ha adreces vàlides\n"
-
- #: g10/plaintext.c:90
- msgid "data not saved; use option \"--output\" to save it\n"
--msgstr "les dades no s'han desat; useu l'opci� \"--output\" per desar-les\n"
-+msgstr "les dades no s'han desat; useu l'opció \"--output\" per desar-les\n"
-
- #: g10/plaintext.c:135 g10/plaintext.c:140 g10/plaintext.c:158
- #, c-format
- msgid "error creating `%s': %s\n"
--msgstr "error en crear �%s�: %s\n"
-+msgstr "error en crear «%s»: %s\n"
-
- # Indi? ivb
- # Em pense que no. jm
-@@ -5055,11 +4991,11 @@
-
- #: g10/plaintext.c:450
- msgid "Please enter name of data file: "
--msgstr "Introdu�u el nom del fitxer de dades: "
-+msgstr "Introduïu el nom del fitxer de dades: "
-
- #: g10/plaintext.c:478
- msgid "reading stdin ...\n"
--msgstr "s'est� llegint d'stdin...\n"
-+msgstr "s'està llegint d'stdin...\n"
-
- #: g10/plaintext.c:512
- msgid "no signed data\n"
-@@ -5075,26 +5011,25 @@
- #: g10/pubkey-enc.c:103
- #, fuzzy, c-format
- msgid "anonymous recipient; trying secret key %s ...\n"
--msgstr "el destinatari �s an�nim; es provar� la clau secreta %08lX ...\n"
-+msgstr "el destinatari és anònim; es provarà la clau secreta %08lX ...\n"
-
- #: g10/pubkey-enc.c:119
- msgid "okay, we are the anonymous recipient.\n"
--msgstr "d'acord, som el destinatari an�nim.\n"
-+msgstr "d'acord, som el destinatari anònim.\n"
-
- #: g10/pubkey-enc.c:207
- msgid "old encoding of the DEK is not supported\n"
--msgstr "la codificaci� antiga del DEK no est� suportada\n"
-+msgstr "la codificació antiga del DEK no està suportada\n"
-
- #: g10/pubkey-enc.c:228
- #, c-format
- msgid "cipher algorithm %d%s is unknown or disabled\n"
--msgstr "l'algoritme de xifratge %d%s �s desconegut o est� desactivat\n"
-+msgstr "l'algoritme de xifratge %d%s és desconegut o està desactivat\n"
-
- #: g10/pubkey-enc.c:266
- #, fuzzy, c-format
- msgid "WARNING: cipher algorithm %s not found in recipient preferences\n"
--msgstr ""
--"NOTA: no s'ha trobat l'algoritme de xifratge %d en les prefer�ncies\n"
-+msgstr "NOTA: no s'ha trobat l'algoritme de xifratge %d en les preferències\n"
-
- #: g10/pubkey-enc.c:286
- #, fuzzy, c-format
-@@ -5122,16 +5057,16 @@
-
- #: g10/revoke.c:276
- msgid "(This is a sensitive revocation key)\n"
--msgstr "(Aquesta �s una clau de revocaci� sensible)\n"
-+msgstr "(Aquesta és una clau de revocació sensible)\n"
-
- #: g10/revoke.c:280
- #, fuzzy
- msgid "Create a designated revocation certificate for this key? (y/N) "
--msgstr "Voleu crear un certificat de revocaci� per a aquesta clau? "
-+msgstr "Voleu crear un certificat de revocació per a aquesta clau? "
-
- #: g10/revoke.c:293 g10/revoke.c:511
- msgid "ASCII armored output forced.\n"
--msgstr "s'ha for�at l'eixida d'armadura ASCII.\n"
-+msgstr "s'ha forçat l'eixida d'armadura ASCII.\n"
-
- #: g10/revoke.c:307 g10/revoke.c:525
- #, c-format
-@@ -5140,39 +5075,39 @@
-
- #: g10/revoke.c:370
- msgid "Revocation certificate created.\n"
--msgstr "S'ha creat el certificat de revocaci�.\n"
-+msgstr "S'ha creat el certificat de revocació.\n"
-
- #: g10/revoke.c:376
- #, fuzzy, c-format
- msgid "no revocation keys found for \"%s\"\n"
--msgstr "no s'han ttrobat claus de revocaci� per a �%s�\n"
-+msgstr "no s'han ttrobat claus de revocació per a «%s»\n"
-
- #: g10/revoke.c:432
- #, fuzzy, c-format
- msgid "secret key \"%s\" not found: %s\n"
--msgstr "no s'ha trobat la clau secreta �%s�: %s\n"
-+msgstr "no s'ha trobat la clau secreta «%s»: %s\n"
-
- #: g10/revoke.c:461
- #, c-format
- msgid "no corresponding public key: %s\n"
--msgstr "no hi ha cap clau p�blica corresponent: %s\n"
-+msgstr "no hi ha cap clau pública corresponent: %s\n"
-
- #: g10/revoke.c:472
- msgid "public key does not match secret key!\n"
--msgstr "la clau p�blica no coincideix amb la clau secreta!\n"
-+msgstr "la clau pública no coincideix amb la clau secreta!\n"
-
- #: g10/revoke.c:479
- #, fuzzy
- msgid "Create a revocation certificate for this key? (y/N) "
--msgstr "Voleu crear un certificat de revocaci� per a aquesta clau? "
-+msgstr "Voleu crear un certificat de revocació per a aquesta clau? "
-
- #: g10/revoke.c:496
- msgid "unknown protection algorithm\n"
--msgstr "l'algorisme de protecci� �s desconegut\n"
-+msgstr "l'algorisme de protecció és desconegut\n"
-
- #: g10/revoke.c:500
- msgid "NOTE: This key is not protected!\n"
--msgstr "NOTA: Aquesta clau no est� protegida!\n"
-+msgstr "NOTA: Aquesta clau no està protegida!\n"
-
- #: g10/revoke.c:551
- msgid ""
-@@ -5184,47 +5119,46 @@
- "your media become unreadable. But have some caution: The print system of\n"
- "your machine might store the data and make it available to others!\n"
- msgstr ""
--"S'ha creat un certificat de revocaci�.\n"
-+"S'ha creat un certificat de revocació.\n"
- "\n"
- "Si us plau, mogueu-lo a un medi que pugueu amagar; si Mallory aconsegueix\n"
--"acc�s a aquest certificat pot utilitzar-lo per a fer la vostra clau\n"
--"inservible. �s intel�ligent imprimir aquest certificat i amagar-lo, per\n"
--"si el vostre medi es torna illegible. Per� aneu amb compte: el sistema\n"
--"d'impressi� de la vostra m�quina podria emmagatzemar les dades i fer-"
--"les\n"
-+"accés a aquest certificat pot utilitzar-lo per a fer la vostra clau\n"
-+"inservible. És intel·ligent imprimir aquest certificat i amagar-lo, per\n"
-+"si el vostre medi es torna illegible. Però aneu amb compte: el sistema\n"
-+"d'impressió de la vostra màquina podria emmagatzemar les dades i fer-les\n"
- "disponibles a altres!\n"
-
- #: g10/revoke.c:592
- msgid "Please select the reason for the revocation:\n"
--msgstr "Seleccioneu la ra� de la revocaci�:\n"
-+msgstr "Seleccioneu la raó de la revocació:\n"
-
- #: g10/revoke.c:602
- msgid "Cancel"
--msgstr "Cancel�la"
-+msgstr "Cancel·la"
-
- #: g10/revoke.c:604
- #, c-format
- msgid "(Probably you want to select %d here)\n"
--msgstr "(Segurament voleu seleccionar %d ac�)\n"
-+msgstr "(Segurament voleu seleccionar %d ací)\n"
-
- #: g10/revoke.c:645
- msgid "Enter an optional description; end it with an empty line:\n"
- msgstr ""
--"Introdu�u una descripci� opcional; finalitzeu amb una l�nia en blanc:\n"
-+"Introduïu una descripció opcional; finalitzeu amb una línia en blanc:\n"
-
- #: g10/revoke.c:673
- #, c-format
- msgid "Reason for revocation: %s\n"
--msgstr "Ra� de la revocaci�: %s\n"
-+msgstr "Raó de la revocació: %s\n"
-
- #: g10/revoke.c:675
- msgid "(No description given)\n"
--msgstr "(No es va donar una descripci�)\n"
-+msgstr "(No es va donar una descripció)\n"
-
- #: g10/revoke.c:680
- #, fuzzy
- msgid "Is this okay? (y/N) "
--msgstr "�s a�� correcte? "
-+msgstr "És açò correcte? "
-
- # Parts? Peces? ivb
- #: g10/seckey-cert.c:54
-@@ -5234,16 +5168,16 @@
- #: g10/seckey-cert.c:60
- #, c-format
- msgid "protection algorithm %d%s is not supported\n"
--msgstr "l'algoritme de protecci� %d%s no est� suportat\n"
-+msgstr "l'algoritme de protecció %d%s no està suportat\n"
-
- #: g10/seckey-cert.c:71
- #, fuzzy, c-format
- msgid "protection digest %d is not supported\n"
--msgstr "l'algoritme de protecci� %d%s no est� suportat\n"
-+msgstr "l'algoritme de protecció %d%s no està suportat\n"
-
- #: g10/seckey-cert.c:250
- msgid "Invalid passphrase; please try again"
--msgstr "La contrasenya no �s v�lida; torneu a intentar-ho"
-+msgstr "La contrasenya no és vàlida; torneu a intentar-ho"
-
- #: g10/seckey-cert.c:251
- #, c-format
-@@ -5252,33 +5186,33 @@
-
- #: g10/seckey-cert.c:311
- msgid "WARNING: Weak key detected - please change passphrase again.\n"
--msgstr "AV�S: la clau �s feble; per favor, canvieu la contrasenya.\n"
-+msgstr "AVÃS: la clau és feble; per favor, canvieu la contrasenya.\n"
-
- #: g10/seckey-cert.c:349
- msgid "generating the deprecated 16-bit checksum for secret key protection\n"
- msgstr ""
--"s'est� generant la suma de comprovaci� desaconsellada de 16-bits per a "
--"la protecci� de la clau secreta\n"
-+"s'està generant la suma de comprovació desaconsellada de 16-bits per a la "
-+"protecció de la clau secreta\n"
-
- #: g10/seskey.c:52
- msgid "weak key created - retrying\n"
- msgstr "s'hi ha creat una clau feble - reintent\n"
-
--# �s no-wrap? ivb
-+# És no-wrap? ivb
- #: g10/seskey.c:57
- #, c-format
- msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
- msgstr ""
--"no s'ha pogut evitar una clau feble per a xifratge sim�tric;\n"
-+"no s'ha pogut evitar una clau feble per a xifratge simètric;\n"
- "hi ha hagut %d intents!\n"
-
- #: g10/seskey.c:213
- msgid "DSA requires the use of a 160 bit hash algorithm\n"
--msgstr "DSA requereix l'�s d'un algoritme de dispersi� de 160 bits\n"
-+msgstr "DSA requereix l'ús d'un algoritme de dispersió de 160 bits\n"
-
- #: g10/sig-check.c:75
- msgid "WARNING: signature digest conflict in message\n"
--msgstr "AV�S: conflicte de signatures digest en el missatge\n"
-+msgstr "AVÃS: conflicte de signatures digest en el missatge\n"
-
- #: g10/sig-check.c:99
- #, c-format
-@@ -5289,18 +5223,17 @@
- #, fuzzy, c-format
- msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
- msgstr ""
--"AV�S: no es pot desfer la nominaci� d'una clau com a revocador "
--"designat!\n"
-+"AVÃS: no es pot desfer la nominació d'una clau com a revocador designat!\n"
-
- #: g10/sig-check.c:168
- #, fuzzy, c-format
- msgid "public key %s is %lu second newer than the signature\n"
--msgstr "la clau p�blica %08lX �s %lu segons anterior a la signatura\n"
-+msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n"
-
- #: g10/sig-check.c:169
- #, fuzzy, c-format
- msgid "public key %s is %lu seconds newer than the signature\n"
--msgstr "la clau p�blica %08lX �s %lu segons anterior a la signatura\n"
-+msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n"
-
- # Werner FIXME: Use ngettext. jm
- #: g10/sig-check.c:180
-@@ -5329,58 +5262,58 @@
- #, fuzzy, c-format
- msgid "assuming bad signature from key %s due to an unknown critical bit\n"
- msgstr ""
--"es supossa una signatura incorrecta de la clau %08lX a causa d'un bit "
--"cr�tic desconegut\n"
-+"es supossa una signatura incorrecta de la clau %08lX a causa d'un bit crític "
-+"desconegut\n"
-
- #: g10/sig-check.c:532
- #, fuzzy, c-format
- msgid "key %s: no subkey for subkey revocation signature\n"
- msgstr ""
--"clau %08lX: no hi ha una subclau per al paquet de la subclau de revocaci�\n"
-+"clau %08lX: no hi ha una subclau per al paquet de la subclau de revocació\n"
-
- #: g10/sig-check.c:558
- #, fuzzy, c-format
- msgid "key %s: no subkey for subkey binding signature\n"
- msgstr ""
--"clau %08lX: no hi ha una subclau per a la signatura de l'enlla� de la "
-+"clau %08lX: no hi ha una subclau per a la signatura de l'enllaç de la "
- "subclau\n"
-
- #: g10/sign.c:85
- msgid "can't put notation data into v3 (PGP 2.x style) signatures\n"
- msgstr ""
--"no es poden ficar dades de notaci� dins de signatures v3 (estil PGP 2.x)\n"
-+"no es poden ficar dades de notació dins de signatures v3 (estil PGP 2.x)\n"
-
- #: g10/sign.c:93
- msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n"
- msgstr ""
--"no es poden ficar dades de notaci� dins de signatures de clau v3 (estil "
--"PGP 2.x)\n"
-+"no es poden ficar dades de notació dins de signatures de clau v3 (estil PGP "
-+"2.x)\n"
-
- #: g10/sign.c:112
- #, c-format
- msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
- msgstr ""
--"AV�S: no s'ha pogut %%-expandir la notaci� (massa gran). S'utilitza no "
-+"AVÃS: no s'ha pogut %%-expandir la notació (massa gran). S'utilitza no "
- "expandida.\n"
-
- #: g10/sign.c:138
- msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n"
- msgstr ""
--"no es pot ficar una URL de pol�tica dins de signatures v3 (estil PGP 2.x)\n"
-+"no es pot ficar una URL de política dins de signatures v3 (estil PGP 2.x)\n"
-
- #: g10/sign.c:146
- msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n"
- msgstr ""
--"no es pot ficar una URL de pol�tica dins de signatures de clau v3 (estil "
--"PGP 2.x)\n"
-+"no es pot ficar una URL de política dins de signatures de clau v3 (estil PGP "
-+"2.x)\n"
-
- #: g10/sign.c:159
- #, fuzzy, c-format
- msgid ""
- "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n"
- msgstr ""
--"AV�S: no s'ha pogut %%-expandir l'url de pol�tica (massa gran). "
--"S'utilitza no expandida.\n"
-+"AVÃS: no s'ha pogut %%-expandir l'url de política (massa gran). S'utilitza "
-+"no expandida.\n"
-
- #: g10/sign.c:187
- #, fuzzy, c-format
-@@ -5388,8 +5321,8 @@
- "WARNING: unable to %%-expand preferred keyserver URL (too large). Using "
- "unexpanded.\n"
- msgstr ""
--"AV�S: no s'ha pogut %%-expandir l'url de pol�tica (massa gran). "
--"S'utilitza no expandida.\n"
-+"AVÃS: no s'ha pogut %%-expandir l'url de política (massa gran). S'utilitza "
-+"no expandida.\n"
-
- #: g10/sign.c:364
- #, c-format
-@@ -5399,21 +5332,20 @@
- #: g10/sign.c:373
- #, fuzzy, c-format
- msgid "%s/%s signature from: \"%s\"\n"
--msgstr "%s signatura de: �%s�\n"
-+msgstr "%s signatura de: «%s»\n"
-
- #: g10/sign.c:741
- msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
- msgstr ""
--"nom�s podeu fer signatures separades amb claus d'estil PGP 2.x mentre "
--"esteu en mode --pgp2\n"
-+"només podeu fer signatures separades amb claus d'estil PGP 2.x mentre esteu "
-+"en mode --pgp2\n"
-
- #: g10/sign.c:808
- #, fuzzy, c-format
- msgid ""
- "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n"
- msgstr ""
--"for�ar l'algoritme de digest %s (%d) viola les prefer�ncies del "
--"destinatari\n"
-+"forçar l'algoritme de digest %s (%d) viola les preferències del destinatari\n"
-
- #: g10/sign.c:900
- msgid "signing:"
-@@ -5422,44 +5354,44 @@
- #: g10/sign.c:1007
- msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
- msgstr ""
--"nom�s podeu signar en clar amb claus d'estil PGP 2.x en el mode --pgp2\n"
-+"només podeu signar en clar amb claus d'estil PGP 2.x en el mode --pgp2\n"
-
- #: g10/sign.c:1180
- #, c-format
- msgid "%s encryption will be used\n"
--msgstr "s'utilitzar� xifratge %s\n"
-+msgstr "s'utilitzarà xifratge %s\n"
-
- #: g10/skclist.c:126 g10/skclist.c:190
- msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
- msgstr ""
--"la clau no est� marcada com a insegura - no es pot utilitzar amb el GNA "
-+"la clau no està marcada com a insegura - no es pot utilitzar amb el GNA "
- "fals!\n"
-
- #: g10/skclist.c:157
- #, fuzzy, c-format
- msgid "skipped \"%s\": duplicated\n"
--msgstr "es descarta �%s�: duplicat\n"
-+msgstr "es descarta «%s»: duplicat\n"
-
- #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184
- #, fuzzy, c-format
- msgid "skipped \"%s\": %s\n"
--msgstr "es descarta �%s�: %s\n"
-+msgstr "es descarta «%s»: %s\n"
-
- #: g10/skclist.c:170
- msgid "skipped: secret key already present\n"
--msgstr "es descarta: la clau secreta ja �s present\n"
-+msgstr "es descarta: la clau secreta ja és present\n"
-
- #: g10/skclist.c:185
- #, fuzzy
- msgid "this is a PGP generated Elgamal key which is not secure for signatures!"
- msgstr ""
--"es descarta �%s�: �s una clau ElGamal generada per PGP que no �s "
--"segura per a signatures!\n"
-+"es descarta «%s»: és una clau ElGamal generada per PGP que no és segura per "
-+"a signatures!\n"
-
- #: g10/tdbdump.c:59 g10/trustdb.c:365
- #, c-format
- msgid "trust record %lu, type %d: write failed: %s\n"
--msgstr "registre de confian�a %lu, tipus %d: no s'ha pogut escriure: %s\n"
-+msgstr "registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s\n"
-
- #: g10/tdbdump.c:104
- #, c-format
-@@ -5467,18 +5399,18 @@
- "# List of assigned trustvalues, created %s\n"
- "# (Use \"gpg --import-ownertrust\" to restore them)\n"
- msgstr ""
--"# Llista de valors de confian�a assignats, creat el %s\n"
--"# (Utilitzeu �gpg --import-ownertrust� per a restaurar-les)\n"
-+"# Llista de valors de confiança assignats, creat el %s\n"
-+"# (Utilitzeu «gpg --import-ownertrust» per a restaurar-les)\n"
-
- #: g10/tdbdump.c:159 g10/tdbdump.c:167 g10/tdbdump.c:172 g10/tdbdump.c:177
- #, fuzzy, c-format
- msgid "error in `%s': %s\n"
--msgstr "error en la lectura de �%s�: %s\n"
-+msgstr "error en la lectura de «%s»: %s\n"
-
- #: g10/tdbdump.c:159
- #, fuzzy
- msgid "line too long"
--msgstr "la l�nia �s massa llarga\n"
-+msgstr "la línia és massa llarga\n"
-
- #: g10/tdbdump.c:167
- msgid "colon missing"
-@@ -5487,17 +5419,17 @@
- #: g10/tdbdump.c:173
- #, fuzzy
- msgid "invalid fingerprint"
--msgstr "error: l'empremta digital �s inv�lida\n"
-+msgstr "error: l'empremta digital és invàlida\n"
-
- #: g10/tdbdump.c:178
- #, fuzzy
- msgid "ownertrust value missing"
--msgstr "importa els valors de confian�a"
-+msgstr "importa els valors de confiança"
-
- #: g10/tdbdump.c:214
- #, fuzzy, c-format
- msgid "error finding trust record in `%s': %s\n"
--msgstr "error en trobar el registre de confian�a: %s\n"
-+msgstr "error en trobar el registre de confiança: %s\n"
-
- #: g10/tdbdump.c:218
- #, fuzzy, c-format
-@@ -5507,29 +5439,29 @@
- #: g10/tdbdump.c:227 g10/trustdb.c:380
- #, c-format
- msgid "trustdb: sync failed: %s\n"
--msgstr "base de dades de confian�a: no s'ha pogut sincronitzar: %s\n"
-+msgstr "base de dades de confiança: no s'ha pogut sincronitzar: %s\n"
-
- #: g10/tdbio.c:128 g10/tdbio.c:1440
- #, c-format
- msgid "trustdb rec %lu: lseek failed: %s\n"
--msgstr "reg de la base de dades de confian�a %lu: ha fallat lseek: %s\n"
-+msgstr "reg de la base de dades de confiança %lu: ha fallat lseek: %s\n"
-
- #: g10/tdbio.c:134 g10/tdbio.c:1447
- #, c-format
- msgid "trustdb rec %lu: write failed (n=%d): %s\n"
- msgstr ""
--"reg de la base de dades de confian�a %lu: ha fallat la escriptura (n=%d): %"
-+"reg de la base de dades de confiança %lu: ha fallat la escriptura (n=%d): %"
- "s\n"
-
- #: g10/tdbio.c:244
- msgid "trustdb transaction too large\n"
--msgstr "la transacci� de la base de dades de confian�a �s massa gran\n"
-+msgstr "la transacció de la base de dades de confiança és massa gran\n"
-
- # No em passe! ;) ivb
- #: g10/tdbio.c:497
- #, fuzzy, c-format
- msgid "can't access `%s': %s\n"
--msgstr "no s'ha pogut tancar �%s�: %s\n"
-+msgstr "no s'ha pogut tancar «%s»: %s\n"
-
- #: g10/tdbio.c:512
- #, c-format
-@@ -5539,82 +5471,82 @@
- #: g10/tdbio.c:522 g10/tdbio.c:545 g10/tdbio.c:588
- #, fuzzy, c-format
- msgid "can't create lock for `%s'\n"
--msgstr "no s'ha pogut crear �%s�: %s\n"
-+msgstr "no es pot crear el directori «%s»: %s\n"
-
- #: g10/tdbio.c:524 g10/tdbio.c:591
- #, fuzzy, c-format
- msgid "can't lock `%s'\n"
--msgstr "no s'ha pogut obrir �%s�\n"
-+msgstr "no s'ha pogut obrir «%s»\n"
-
- #: g10/tdbio.c:550
- #, c-format
- msgid "%s: failed to create version record: %s"
--msgstr "%s: no s'ha pogut crear un registre de versi�: %s"
-+msgstr "%s: no s'ha pogut crear un registre de versió: %s"
-
- #: g10/tdbio.c:554
- #, c-format
- msgid "%s: invalid trustdb created\n"
--msgstr "%s: s'ha creat una base de dades de confian�a inv�lida\n"
-+msgstr "%s: s'ha creat una base de dades de confiança invàlida\n"
-
- #: g10/tdbio.c:557
- #, c-format
- msgid "%s: trustdb created\n"
--msgstr "%s: s'ha creat la base de dades de confian�a\n"
-+msgstr "%s: s'ha creat la base de dades de confiança\n"
-
- #: g10/tdbio.c:597
- msgid "NOTE: trustdb not writable\n"
--msgstr "NOTA: no es pot escriure en la base de dades de confian�a\n"
-+msgstr "NOTA: no es pot escriure en la base de dades de confiança\n"
-
- #: g10/tdbio.c:614
- #, c-format
- msgid "%s: invalid trustdb\n"
--msgstr "%s: la base de dades de confian�a �s inv�lida\n"
-+msgstr "%s: la base de dades de confiança és invàlida\n"
-
- #: g10/tdbio.c:646
- #, c-format
- msgid "%s: failed to create hashtable: %s\n"
--msgstr "%s: no s'ha pogut crear la taula de dispersi�: %s\n"
-+msgstr "%s: no s'ha pogut crear la taula de dispersió: %s\n"
-
- #: g10/tdbio.c:654
- #, c-format
- msgid "%s: error updating version record: %s\n"
--msgstr "%s: error en actualitzar el registre de la versi�: %s\n"
-+msgstr "%s: error en actualitzar el registre de la versió: %s\n"
-
- #: g10/tdbio.c:671 g10/tdbio.c:691 g10/tdbio.c:707 g10/tdbio.c:721
- #: g10/tdbio.c:751 g10/tdbio.c:1373 g10/tdbio.c:1400
- #, c-format
- msgid "%s: error reading version record: %s\n"
--msgstr "%s: error en llegir el registre de la versi�: %s\n"
-+msgstr "%s: error en llegir el registre de la versió: %s\n"
-
- #: g10/tdbio.c:730
- #, c-format
- msgid "%s: error writing version record: %s\n"
--msgstr "%s: error en escriure el registre de la versi?: %s\n"
-+msgstr "%s: error en escriure el registre de la versió: %s\n"
-
- #: g10/tdbio.c:1169
- #, c-format
- msgid "trustdb: lseek failed: %s\n"
--msgstr "base de dades de confian�a: ha fallat lseek: %s\n"
-+msgstr "base de dades de confiança: ha fallat lseek: %s\n"
-
- #: g10/tdbio.c:1177
- #, c-format
- msgid "trustdb: read failed (n=%d): %s\n"
--msgstr "base de dades de confian�a: ha fallat la lectura (n=%d): %s\n"
-+msgstr "base de dades de confiança: ha fallat la lectura (n=%d): %s\n"
-
- #: g10/tdbio.c:1198
- #, c-format
- msgid "%s: not a trustdb file\n"
--msgstr "%s no �s un fitxer de base de dades de confian�a\n"
-+msgstr "%s no és un fitxer de base de dades de confiança\n"
-
- #: g10/tdbio.c:1216
- #, c-format
- msgid "%s: version record with recnum %lu\n"
--msgstr "%s: registre de versi� amb n�mero de registre %lu\n"
-+msgstr "%s: registre de versió amb número de registre %lu\n"
-
- #: g10/tdbio.c:1221
- #, c-format
- msgid "%s: invalid file version %d\n"
--msgstr "%s: la versi� de fitxer %d �s inv�lida\n"
-+msgstr "%s: la versió de fitxer %d és invàlida\n"
-
- #: g10/tdbio.c:1406
- #, c-format
-@@ -5639,23 +5571,23 @@
- #: g10/tdbio.c:1499
- msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
- msgstr ""
--"la base de dades de confian�a est� corrompuda; per favor, executeu "
--"�gpg --fix-trustdb�.\n"
-+"la base de dades de confiança està corrompuda; per favor, executeu «gpg --"
-+"fix-trustdb».\n"
-
- #: g10/textfilter.c:142
- #, c-format
- msgid "can't handle text lines longer than %d characters\n"
--msgstr "no es poden tractar l�nies m�s llargues de %d car�cters\n"
-+msgstr "no es poden tractar línies més llargues de %d caràcters\n"
-
- #: g10/textfilter.c:239
- #, c-format
- msgid "input line longer than %d characters\n"
--msgstr "la l�nia d'entrada �s superior a %d car�cters\n"
-+msgstr "la línia d'entrada és superior a %d caràcters\n"
-
- #: g10/trustdb.c:226
- #, c-format
- msgid "`%s' is not a valid long keyID\n"
--msgstr "�%s� no �s un ID de clau llarg v�lid\n"
-+msgstr "«%s» no és un ID de clau llarg vàlid\n"
-
- #: g10/trustdb.c:257
- #, fuzzy, c-format
-@@ -5666,28 +5598,28 @@
- #, fuzzy, c-format
- msgid "key %s occurs more than once in the trustdb\n"
- msgstr ""
--"la clau %08lX apareix m�s d'una vegada en la base de dades de confian�a\n"
-+"la clau %08lX apareix més d'una vegada en la base de dades de confiança\n"
-
- #: g10/trustdb.c:310
- #, fuzzy, c-format
- msgid "key %s: no public key for trusted key - skipped\n"
- msgstr ""
--"clau %08lX: no hi ha una clau p�blica per a la clau fiable - es descarta\n"
-+"clau %08lX: no hi ha una clau pública per a la clau fiable - es descarta\n"
-
- #: g10/trustdb.c:320
- #, fuzzy, c-format
- msgid "key %s marked as ultimately trusted\n"
--msgstr "s'ha marcat la clau com a de confian�a absoluta.\n"
-+msgstr "s'ha marcat la clau com a de confiança absoluta.\n"
-
- #: g10/trustdb.c:344
- #, c-format
- msgid "trust record %lu, req type %d: read failed: %s\n"
--msgstr "registre de confian�a %lu, tipus %d: no s'ha pogut llegir: %s\n"
-+msgstr "registre de confiança %lu, tipus %d: no s'ha pogut llegir: %s\n"
-
- #: g10/trustdb.c:350
- #, c-format
- msgid "trust record %lu is not of requested type %d\n"
--msgstr "el registre de confian�a %lu no �s del tipus demanat %d\n"
-+msgstr "el registre de confiança %lu no és del tipus demanat %d\n"
-
- #: g10/trustdb.c:446
- #, c-format
-@@ -5758,33 +5690,32 @@
- #: g10/trustdb.c:576
- msgid "no need for a trustdb check\n"
- msgstr ""
--"no �s necess�ria una comprovaci� de la base de dades de confian�a\n"
-+"no és necessària una comprovació de la base de dades de confiança\n"
- "\n"
-
- #: g10/trustdb.c:582 g10/trustdb.c:2143
- #, c-format
- msgid "next trustdb check due at %s\n"
--msgstr ""
--"la pr?xima comprovaci� de la base de dades de confian�a ser� el %s\n"
-+msgstr "la pròxima comprovació de la base de dades de confiança serà el %s\n"
-
- #: g10/trustdb.c:591
- #, fuzzy, c-format
- msgid "no need for a trustdb check with `%s' trust model\n"
- msgstr ""
--"no �s necess�ria una comprovaci� de la base de dades de confian�a\n"
-+"no és necessària una comprovació de la base de dades de confiança\n"
- "\n"
-
- #: g10/trustdb.c:606
- #, fuzzy, c-format
- msgid "no need for a trustdb update with `%s' trust model\n"
- msgstr ""
--"no �s necess�ria una comprovaci� de la base de dades de confian�a\n"
-+"no és necessària una comprovació de la base de dades de confiança\n"
- "\n"
-
- #: g10/trustdb.c:824 g10/trustdb.c:1262
- #, fuzzy, c-format
- msgid "public key %s not found: %s\n"
--msgstr "no s'ha trobat la clau p�blica %08lX: %s\n"
-+msgstr "no s'ha trobat la clau pública %08lX: %s\n"
-
- #: g10/trustdb.c:1019
- msgid "please do a --check-trustdb\n"
-@@ -5792,7 +5723,7 @@
-
- #: g10/trustdb.c:1023
- msgid "checking the trustdb\n"
--msgstr "s'est� comprovant la base de dades de confian�a\n"
-+msgstr "s'està comprovant la base de dades de confiança\n"
-
- #: g10/trustdb.c:1887
- #, c-format
-@@ -5801,13 +5732,13 @@
-
- #: g10/trustdb.c:1951
- msgid "no ultimately trusted keys found\n"
--msgstr "no s'han trobat claus amb confian�a absoluta\n"
-+msgstr "no s'han trobat claus amb confiança absoluta\n"
-
- #: g10/trustdb.c:1965
- #, fuzzy, c-format
- msgid "public key of ultimately trusted key %s not found\n"
- msgstr ""
--"no s'ha trobat la clau p�blica de la clau amb confian�a absoluta %08lX\n"
-+"no s'ha trobat la clau pública de la clau amb confiança absoluta %08lX\n"
-
- #: g10/trustdb.c:1988
- #, c-format
-@@ -5823,7 +5754,7 @@
- #: g10/trustdb.c:2149
- #, fuzzy, c-format
- msgid "unable to update trustdb version record: write failed: %s\n"
--msgstr "registre de confian�a %lu, tipus %d: no s'ha pogut escriure: %s\n"
-+msgstr "registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s\n"
-
- #: g10/verify.c:116
- msgid ""
-@@ -5833,14 +5764,13 @@
- msgstr ""
- "no s'ha pogut verificar la signatura.\n"
- "Recordeu que el fitxer de signatura (.sig o .asc)\n"
--"ha de ser el primer que figure en la l�nia d'ordres.\n"
-+"ha de ser el primer que figure en la línia d'ordres.\n"
-
--# LF -> fi de l�nia? ivb
-+# LF -> fi de línia? ivb
- #: g10/verify.c:189
- #, c-format
- msgid "input line %u too long or missing LF\n"
--msgstr ""
--"la l�nia d'entrada %u �s massa llarga o hi falta un f� de l�nia\n"
-+msgstr "la línia d'entrada %u és massa llarga o hi falta un fí de línia\n"
-
- #: util/errors.c:54
- msgid "general error"
-@@ -5848,47 +5778,47 @@
-
- #: util/errors.c:55
- msgid "unknown packet type"
--msgstr "el tipus de paquet �s desconegut"
-+msgstr "el tipus de paquet és desconegut"
-
- #: util/errors.c:56
- msgid "unknown version"
--msgstr "la versi� �s desconeguda"
-+msgstr "la versió és desconeguda"
-
- #: util/errors.c:57
- msgid "unknown pubkey algorithm"
--msgstr "l'algoritme de clau p�blica �s desconegut"
-+msgstr "l'algoritme de clau pública és desconegut"
-
- #: util/errors.c:58
- msgid "unknown digest algorithm"
--msgstr "l'algoritme de resum �s desconegut"
-+msgstr "l'algoritme de resum és desconegut"
-
- #: util/errors.c:59
- msgid "bad public key"
--msgstr "la clau p�blica �s err�nia"
-+msgstr "la clau pública és errònia"
-
- #: util/errors.c:60
- msgid "bad secret key"
--msgstr "la clau secreta �s err�nia"
-+msgstr "la clau secreta és errònia"
-
- #: util/errors.c:61
- msgid "bad signature"
--msgstr "la signatura �s err�nia"
-+msgstr "la signatura és errònia"
-
- #: util/errors.c:62
- msgid "checksum error"
--msgstr "la suma de control �s err�nia"
-+msgstr "la suma de control és errònia"
-
- #: util/errors.c:63
- msgid "bad passphrase"
--msgstr "la contrasenya �s err�nia"
-+msgstr "la contrasenya és errònia"
-
- #: util/errors.c:64
- msgid "public key not found"
--msgstr "no s'ha trobat la clau p�blica"
-+msgstr "no s'ha trobat la clau pública"
-
- #: util/errors.c:65
- msgid "unknown cipher algorithm"
--msgstr "l'algoritme de xifratge �s desconegut"
-+msgstr "l'algoritme de xifratge és desconegut"
-
- #: util/errors.c:66
- msgid "can't open the keyring"
-@@ -5896,11 +5826,11 @@
-
- #: util/errors.c:67
- msgid "invalid packet"
--msgstr "el paquet �s inv�lid"
-+msgstr "el paquet és invàlid"
-
- #: util/errors.c:68
- msgid "invalid armor"
--msgstr "l'armadura �s inv�lida"
-+msgstr "l'armadura és invàlida"
-
- #: util/errors.c:69
- msgid "no such user id"
-@@ -5908,22 +5838,22 @@
-
- #: util/errors.c:70
- msgid "secret key not available"
--msgstr "la clau secreta no est� disponible"
-+msgstr "la clau secreta no està disponible"
-
- #: util/errors.c:71
- msgid "wrong secret key used"
- msgstr "s'ha utilitzat una clau secreta incorrecta"
-
--# G�nere? Nombre? ivb
-+# Gènere? Nombre? ivb
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: util/errors.c:72
- msgid "not supported"
--msgstr "no �s suportat"
-+msgstr "no és suportat"
-
- #: util/errors.c:73
- msgid "bad key"
--msgstr "la clau �s incorrecta"
-+msgstr "la clau és incorrecta"
-
- #: util/errors.c:74
- msgid "file read error"
-@@ -5935,7 +5865,7 @@
-
- #: util/errors.c:76
- msgid "unknown compress algorithm"
--msgstr "l'algoritme de compressi� �s desconegut"
-+msgstr "l'algoritme de compressió és desconegut"
-
- #: util/errors.c:77
- msgid "file open error"
-@@ -5943,47 +5873,47 @@
-
- #: util/errors.c:78
- msgid "file create error"
--msgstr "error en la creaci� del fitxer"
-+msgstr "error en la creació del fitxer"
-
- #: util/errors.c:79
- msgid "invalid passphrase"
--msgstr "la contrasenya �s inv�lida"
-+msgstr "la contrasenya és invàlida"
-
- #: util/errors.c:80
- msgid "unimplemented pubkey algorithm"
--msgstr "l'algoritme de clau p�blica no �s implementat"
-+msgstr "l'algoritme de clau pública no és implementat"
-
- #: util/errors.c:81
- msgid "unimplemented cipher algorithm"
--msgstr "l'algoritme de xifratge no �s implementat"
-+msgstr "l'algoritme de xifratge no és implementat"
-
- #: util/errors.c:82
- msgid "unknown signature class"
--msgstr "la classe de signatura �s desconeguda"
-+msgstr "la classe de signatura és desconeguda"
-
- #: util/errors.c:83
- msgid "trust database error"
--msgstr "error de la base de dades de confian�a"
-+msgstr "error de la base de dades de confiança"
-
- #: util/errors.c:84
- msgid "bad MPI"
--msgstr "l'MPI �s erroni"
-+msgstr "l'MPI és erroni"
-
- #: util/errors.c:85
- msgid "resource limit"
--msgstr "l�mit de recursos"
-+msgstr "límit de recursos"
-
- #: util/errors.c:86
- msgid "invalid keyring"
--msgstr "l'anell no �s v�lid"
-+msgstr "l'anell no és vàlid"
-
- #: util/errors.c:87
- msgid "bad certificate"
--msgstr "el certificat �s incorrecte"
-+msgstr "el certificat és incorrecte"
-
- #: util/errors.c:88
- msgid "malformed user id"
--msgstr "l'id d'usuari �s malformat"
-+msgstr "l'id d'usuari és malformat"
-
- #: util/errors.c:89
- msgid "file close error"
-@@ -5995,7 +5925,7 @@
-
- #: util/errors.c:91
- msgid "file delete error"
--msgstr "error en l'eliminaci� del fitxer"
-+msgstr "error en l'eliminació del fitxer"
-
- #: util/errors.c:92
- msgid "unexpected data"
-@@ -6005,47 +5935,47 @@
- msgid "timestamp conflict"
- msgstr "conflicte de data"
-
--# Ac� veus pq jo pose �no �s v�lid� en comptes de ��s inv�lid�. ivb
-+# Ací veus pq jo pose «no és vàlid» en comptes de «és invàlid». ivb
- #: util/errors.c:94
- msgid "unusable pubkey algorithm"
--msgstr "l'algoritme de clau p�blica �s inusable"
-+msgstr "l'algoritme de clau pública és inusable"
-
- #: util/errors.c:95
- msgid "file exists"
- msgstr "el fitxer existeix"
-
--# Segons context: la clau �s feble? ivb
-+# Segons context: la clau és feble? ivb
- #: util/errors.c:96
- msgid "weak key"
- msgstr "clau feble"
-
- #: util/errors.c:97
- msgid "invalid argument"
--msgstr "l'argument �s inv�lid"
-+msgstr "l'argument és invàlid"
-
--# La �U� �s masculina o femenina? ivb
-+# La «U» és masculina o femenina? ivb
- #: util/errors.c:98
- msgid "bad URI"
--msgstr "l'URI �s err�nia"
-+msgstr "l'URI és errònia"
-
--# �dem. ivb
-+# Ãdem. ivb
- #: util/errors.c:99
- msgid "unsupported URI"
--msgstr "l'URI no �s suportada"
-+msgstr "l'URI no és suportada"
-
- #: util/errors.c:100
- msgid "network error"
- msgstr "error de la xarxa"
-
--# G�nere? Nombre? ivb
-+# Gènere? Nombre? ivb
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: util/errors.c:102
- msgid "not encrypted"
--msgstr "no �s xifrat"
-+msgstr "no és xifrat"
-
--# G�nere? Nombre? Passat, futur? ivb
--# Probablement �s una clau, femen�. jm
-+# Gènere? Nombre? Passat, futur? ivb
-+# Probablement és una clau, femení. jm
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: util/errors.c:103
-@@ -6054,13 +5984,13 @@
-
- #: util/errors.c:105
- msgid "unusable public key"
--msgstr "ls clau p�blica �s inusable"
-+msgstr "ls clau pública és inusable"
-
- #: util/errors.c:106
- msgid "unusable secret key"
--msgstr "la clau secreta �s inusable"
-+msgstr "la clau secreta és inusable"
-
--# �del servidor�, �en el servidor�? ivb
-+# «del servidor», «en el servidor»? ivb
- #: util/errors.c:107
- msgid "keyserver error"
- msgstr "error de servidor de claus"
-@@ -6068,15 +5998,15 @@
- #: util/errors.c:108
- #, fuzzy
- msgid "canceled"
--msgstr "Cancel�la"
-+msgstr "Cancel·la"
-
--# G�nere? Nombre? ivb
-+# Gènere? Nombre? ivb
- # Werner FIXME: please add translator comment saying *what* is
- # uncompressed so we know the gender. jm
- #: util/errors.c:109
- #, fuzzy
- msgid "no card"
--msgstr "no �s xifrat"
-+msgstr "no és xifrat"
-
- #: util/logger.c:157
- msgid "ERROR: "
-@@ -6089,7 +6019,7 @@
- #: util/logger.c:223
- #, c-format
- msgid "... this is a bug (%s:%d:%s)\n"
--msgstr "... a�� �s un bug (%s:%d:%s)\n"
-+msgstr "... açò és un bug (%s:%d:%s)\n"
-
- #: util/logger.c:229
- #, c-format
-@@ -6098,7 +6028,7 @@
-
- #: util/miscutil.c:307 util/miscutil.c:344
- msgid "yes"
--msgstr "s�|si"
-+msgstr "sí|si"
-
- #: util/miscutil.c:308 util/miscutil.c:349
- msgid "yY"
-@@ -6116,7 +6046,7 @@
- msgid "quit"
- msgstr "ix"
-
--# �xX�? ivb
-+# «xX»? ivb
- #: util/miscutil.c:351
- msgid "qQ"
- msgstr "xX"
-@@ -6140,409 +6070,36 @@
-
- #: util/secmem.c:90
- msgid "WARNING: using insecure memory!\n"
--msgstr "AV�S: esteu usant mem�ria insegura!\n"
-+msgstr "AVÃS: esteu usant memòria insegura!\n"
-
- #: util/secmem.c:91
- msgid "please see http://www.gnupg.org/faq.html for more information\n"
- msgstr ""
--"si us plau, visiteu http://www.gnupg.org/faq.html per a m�s informaci�\n"
-+"si us plau, visiteu http://www.gnupg.org/faq.html per a més informació\n"
-
--# �ltimament pense si �iniciar� no ser� millor que �inicialitzar�? ivb
--# Segons SC, hi ha difer�ncia. jm
-+# Últimament pense si «iniciar» no serà millor que «inicialitzar»? ivb
-+# Segons SC, hi ha diferència. jm
- #: util/secmem.c:343
- msgid "operation is not possible without initialized secure memory\n"
--msgstr "l'operaci� no �s possible sense mem�ria segura inicialitzada\n"
-+msgstr "l'operació no és possible sense memòria segura inicialitzada\n"
-
- #: util/secmem.c:344
- msgid "(you may have used the wrong program for this task)\n"
- msgstr "(potser heu utilitzat el programa erroni per a aquesta tasca)\n"
-
--#~ msgid "--nrsign-key user-id"
--#~ msgstr "--nrsign-key user-id"
--
--#~ msgid "--nrlsign-key user-id"
--#~ msgstr "--nrlsign-key user-id"
--
--#, fuzzy
--#~ msgid "make a trust signature"
--#~ msgstr "crea una signatura separada"
--
--#~ msgid "sign the key non-revocably"
--#~ msgstr "signa la clau irrevocablement"
--
--#~ msgid "sign the key locally and non-revocably"
--#~ msgstr "signa la clau localment i irrevocablement"
--
--#~ msgid "q"
--#~ msgstr "q"
--
--#~ msgid "help"
--#~ msgstr "ajuda"
--
--#~ msgid "list"
--#~ msgstr "llista"
--
--#~ msgid "l"
--#~ msgstr "l"
--
--#~ msgid "debug"
--#~ msgstr "depura"
--
--#, fuzzy
--#~ msgid "name"
--#~ msgstr "enable"
--
--#, fuzzy
--#~ msgid "login"
--#~ msgstr "lsign"
--
--#, fuzzy
--#~ msgid "cafpr"
--#~ msgstr "fpr"
--
--#, fuzzy
--#~ msgid "forcesig"
--#~ msgstr "revsig"
--
--#, fuzzy
--#~ msgid "generate"
--#~ msgstr "error general"
--
--#~ msgid "passwd"
--#~ msgstr "passwd"
--
--#~ msgid "save"
--#~ msgstr "desa"
--
--#~ msgid "fpr"
--#~ msgstr "fpr"
--
--#~ msgid "uid"
--#~ msgstr "uid"
--
--#~ msgid "key"
--#~ msgstr "clau"
--
--#~ msgid "check"
--#~ msgstr "comprova"
--
--#~ msgid "c"
--#~ msgstr "c"
--
--#~ msgid "sign"
--#~ msgstr "sign"
--
--#~ msgid "s"
--#~ msgstr "s"
--
--#, fuzzy
--#~ msgid "tsign"
--#~ msgstr "sign"
--
--#~ msgid "lsign"
--#~ msgstr "lsign"
--
--#~ msgid "nrsign"
--#~ msgstr "nrsign"
--
--#~ msgid "nrlsign"
--#~ msgstr "nrlsign"
--
--#~ msgid "adduid"
--#~ msgstr "adduid"
--
--#~ msgid "addphoto"
--#~ msgstr "addphoto"
--
--#~ msgid "deluid"
--#~ msgstr "deluid"
--
--#~ msgid "delphoto"
--#~ msgstr "delphoto"
--
--#~ msgid "addkey"
--#~ msgstr "addkey"
--
--#, fuzzy
--#~ msgid "addcardkey"
--#~ msgstr "addkey"
--
--#~ msgid "delkey"
--#~ msgstr "delkey"
--
--#~ msgid "addrevoker"
--#~ msgstr "addrevoker"
--
--#~ msgid "delsig"
--#~ msgstr "delsig"
--
--#~ msgid "expire"
--#~ msgstr "expire"
--
--#~ msgid "primary"
--#~ msgstr "primari"
--
--#~ msgid "toggle"
--#~ msgstr "toggle"
--
--#~ msgid "t"
--#~ msgstr "t"
--
--#~ msgid "pref"
--#~ msgstr "pref"
--
--#~ msgid "showpref"
--#~ msgstr "showpref"
--
--#~ msgid "setpref"
--#~ msgstr "setpref"
--
--#~ msgid "updpref"
--#~ msgstr "updpref"
--
--# �del servidor�, �en el servidor�? ivb
--#, fuzzy
--#~ msgid "keyserver"
--#~ msgstr "error de servidor de claus"
--
--#~ msgid "trust"
--#~ msgstr "trust"
--
--#~ msgid "revsig"
--#~ msgstr "revsig"
--
--#~ msgid "revuid"
--#~ msgstr "revuid"
--
--#~ msgid "revkey"
--#~ msgstr "revkey"
--
--#~ msgid "disable"
--#~ msgstr "disable"
--
--#~ msgid "enable"
--#~ msgstr "enable"
--
--#~ msgid "showphoto"
--#~ msgstr "showphoto"
--
- #~ msgid "digest algorithm `%s' is read-only in this release\n"
--#~ msgstr ""
--#~ "l'algorisme de resum �%s� es de nom�s lectura en aquesta versi�\n"
--
--#~ msgid ""
--#~ "About to generate a new %s keypair.\n"
--#~ " minimum keysize is 768 bits\n"
--#~ " default keysize is 1024 bits\n"
--#~ " highest suggested keysize is 2048 bits\n"
--#~ msgstr ""
--#~ "Preparat per a generar un nou parell de claus %s.\n"
--#~ " grand�ria m�nima: 768 bits\n"
--#~ " grand�ria predeterminada: 1024 bits\n"
--#~ " grand�ria m�xima aconsellada: 2048 bits\n"
--
--#~ msgid "DSA only allows keysizes from 512 to 1024\n"
--#~ msgstr "DSA nom�s permet claus entre 512 i 1024 bits\n"
--
--#~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
--#~ msgstr ""
--#~ "la clau �s massa petita; 1024 bits ?s el m�nim perm�s per a claus "
--#~ "RSA.\n"
--
--#~ msgid "keysize too small; 768 is smallest value allowed.\n"
--#~ msgstr "la clau �s massa petita; 768 bits �s el m�nim perm�s.\n"
--
--# Jo tinc Deep Thought MMX a casa i m'ho fa en 42 segons. ivb
--#~ msgid "keysize too large; %d is largest value allowed.\n"
--#~ msgstr "la clau �s massa llarga; %d �s el m�xim perm�s.\n"
--
--#~ msgid ""
--#~ "Keysizes larger than 2048 are not suggested because\n"
--#~ "computations take REALLY long!\n"
--#~ msgstr ""
--#~ "No es recomanen claus m�s llargues de 2048 bits perqu�\n"
--#~ "els c�lculs s�n VERITABLEMENT llargs!\n"
--
--#, fuzzy
--#~ msgid "Are you sure that you want this keysize? (y/N) "
--#~ msgstr "Segur que voleu aquesta grand�ria? "
--
--#~ msgid ""
--#~ "Okay, but keep in mind that your monitor and keyboard radiation is also "
--#~ "very vulnerable to attacks!\n"
--#~ msgstr ""
--#~ "D'acord, per� sapieu que la radiaci� del monitor i del teclat tamb� "
--#~ "son molt vulnerables als atacs!\n"
--
--#~ msgid "Experimental algorithms should not be used!\n"
--#~ msgstr "No haur�eu d'usar algoritmes experimentals!\n"
--
--#~ msgid ""
--#~ "this cipher algorithm is deprecated; please use a more standard one!\n"
--#~ msgstr ""
--#~ "aquest algoritme de xifratge est� desaconsellat; useu-ne un de m�s "
--#~ "est�ndard!\n"
--
--#, fuzzy
--#~ msgid "writing to file `%s'\n"
--#~ msgstr "s'est� escrivint en �%s�\n"
--
--#~ msgid "sorry, can't do this in batch mode\n"
--#~ msgstr "no es pot fet aix� en mode desat�s\n"
--
--#~ msgid "key `%s' not found: %s\n"
--#~ msgstr "no s'ha trobat la clau �%s�: %s\n"
--
--#, fuzzy
--#~ msgid "can't create file `%s': %s\n"
--#~ msgstr "no s'ha pogut crear �%s�: %s\n"
--
--#, fuzzy
--#~ msgid "can't open file `%s': %s\n"
--#~ msgstr "no es pot obrir el fitxer: %s\n"
--
--#, fuzzy
--#~ msgid " \""
--#~ msgstr " alias \""
--
--#~ msgid " i = please show me more information\n"
--#~ msgstr " i = mostra m�s informaci�\n"
--
--#~ msgid "key %08lX: key has been revoked!\n"
--#~ msgstr "clau %08lX: aquesta clau ha estat revocada!\n"
--
--#~ msgid "key %08lX: subkey has been revoked!\n"
--#~ msgstr "clau %08lX: aquesta subclau ha estat revocada!\n"
--
--#~ msgid "%08lX: key has expired\n"
--#~ msgstr "%08lX: la clau ha caducat\n"
--
--#~ msgid "%08lX: We do NOT trust this key\n"
--#~ msgstr "%08lX: La clau NO �s de confian�a\n"
--
--#~ msgid " (%d) RSA (sign and encrypt)\n"
--#~ msgstr " (%d) RSA (signar i xifrar)\n"
--
--#, fuzzy
--#~ msgid " (%d) RSA (auth only)\n"
--#~ msgstr " (%d) RSA (nom�s signar)\n"
--
--#, fuzzy
--#~ msgid " (%d) RSA (sign and auth)\n"
--#~ msgstr " (%d) RSA (signar i xifrar)\n"
--
--#, fuzzy
--#~ msgid " (%d) RSA (encrypt and auth)\n"
--#~ msgstr " (%d) RSA (nom�s xifrar)\n"
--
--#, fuzzy
--#~ msgid " (%d) RSA (sign, encrypt and auth)\n"
--#~ msgstr " (%d) RSA (signar i xifrar)\n"
--
--#~ msgid "%s: can't open: %s\n"
--#~ msgstr "%s: no s'ha pogut obrir: %s\n"
--
--#~ msgid "%s: WARNING: empty file\n"
--#~ msgstr "%s: AV�S: el fitxer �s buit\n"
--
--#~ msgid "can't open %s: %s\n"
--#~ msgstr "no s'ha pogut obrir %s: %s\n"
--
--#, fuzzy
--#~ msgid " (%d) I trust marginally\n"
--#~ msgstr " %d = Hi confie marginalment\n"
--
--#, fuzzy
--#~ msgid " (%d) I trust fully\n"
--#~ msgstr " %d = Hi confie plenament\n"
--
--#, fuzzy
--#~ msgid "expires"
--#~ msgstr "expire"
--
--#, fuzzy
--#~ msgid ""
--#~ "\"\n"
--#~ "locally signed with your key %s at %s\n"
--#~ msgstr ""
--#~ "�\n"
--#~ "signat localment amb la vostra clau %08lX el %s\n"
--
--#, fuzzy
--#~ msgid " signed by %s on %s%s\n"
--#~ msgstr " signat per %08lX el %s%s\n"
--
--#~ msgid "%s: can't access: %s\n"
--#~ msgstr "%s: no s'ha pogut accedir: %s\n"
--
--# blocatge? ivb
--# yep. jm
--#~ msgid "%s: can't create lock\n"
--#~ msgstr "%s: no s'ha pogut crear el blocatge\n"
--
--#~ msgid "%s: can't make lock\n"
--#~ msgstr "%s: no s'ha pogut crear el blocatge\n"
--
--#~ msgid "%s: can't create: %s\n"
--#~ msgstr "%s: no s'ha pogut crear: %s\n"
--
--#~ msgid "%s: can't create directory: %s\n"
--#~ msgstr "%s: no s'ha pogut crear el directori: %s\n"
--
--#~ msgid "If you want to use this revoked key anyway, answer \"yes\"."
--#~ msgstr ""
--#~ "Si voleu utilitzar aquesta clau revocada de totes maneres, dieu "
--#~ "�s��."
--
--#~ msgid "Unable to open photo \"%s\": %s\n"
--#~ msgstr "No s'ha pogut obrir la foto �%s�: %s\n"
--
--#~ msgid "can't open file: %s\n"
--#~ msgstr "no es pot obrir el fitxer: %s\n"
--
--#~ msgid "error: missing colon\n"
--#~ msgstr "error: falten dos punts\n"
--
--#~ msgid "error: no ownertrust value\n"
--#~ msgstr "error: no hi ha cap valor de confian�a\n"
--
--#~ msgid " (main key ID %08lX)"
--#~ msgstr " (ID de la clau principal %08lX)"
--
--#~ msgid "rev! subkey has been revoked: %s\n"
--#~ msgstr "rev! la subclau ha estat revocada: %s\n"
--
--#~ msgid "rev- faked revocation found\n"
--#~ msgstr "rev- s'ha trobat una revocaci� falsa\n"
--
--#~ msgid "rev? problem checking revocation: %s\n"
--#~ msgstr "rev? hi ha problemes en la comprovaci� de la revocaci�: %s\n"
--
--#, fuzzy
--#~ msgid " [expired: %s]"
--#~ msgstr " [caduca: %s]"
--
--#~ msgid " [expires: %s]"
--#~ msgstr " [caduca: %s]"
--
--#, fuzzy
--#~ msgid " [revoked: %s]"
--#~ msgstr "[revocada]"
--
--#~ msgid "can't create %s: %s\n"
--#~ msgstr "no s'ha pogut creat %s: %s\n"
-+#~ msgstr "l'algorisme de resum «%s» es de només lectura en aquesta versió\n"
-
- #~ msgid ""
- #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n"
- #~ msgstr ""
--#~ "AV�S: el resum �%s� no �s part d'OpenPGP. Utilitzeu-lo assumint "
--#~ "el risc!\n"
-+#~ "AVÃS: el resum «%s» no és part d'OpenPGP. Utilitzeu-lo assumint el risc!\n"
-
- #~ msgid "|[files]|encrypt files"
- #~ msgstr "|[fitxers]|xifra fitxers"
-
- #~ msgid "store only"
--#~ msgstr "nom�s emmagatzema"
-+#~ msgstr "només emmagatzema"
-
- #~ msgid "|[files]|decrypt files"
- #~ msgstr "|[fitxers]|desxifra fitxers"
-@@ -6550,21 +6107,21 @@
- #~ msgid "sign a key non-revocably"
- #~ msgstr "signa una clau irrevocablement"
-
--# D'altres formes o no queda clar o �s massa literari :P ivb
-+# D'altres formes o no queda clar o és massa literari :P ivb
- #~ msgid "sign a key locally and non-revocably"
- #~ msgstr "signa una clau de forma local i irrevocable"
-
- #~ msgid "list only the sequence of packets"
--#~ msgstr "llista nom�s la seq��ncia de paquets"
-+#~ msgstr "llista només la seqüència de paquets"
-
- #~ msgid "export the ownertrust values"
--#~ msgstr "exporta els valors de confian�a"
-+#~ msgstr "exporta els valors de confiança"
-
- #~ msgid "unattended trust database update"
--#~ msgstr "actualitzaci� no atesa de la base de dades de confian�a"
-+#~ msgstr "actualització no atesa de la base de dades de confiança"
-
- #~ msgid "fix a corrupted trust database"
--#~ msgstr "arregla una base de dades de confian�a corrompuda"
-+#~ msgstr "arregla una base de dades de confiança corrompuda"
-
- #~ msgid "De-Armor a file or stdin"
- #~ msgstr "lleva l'armadura a un fitxer o a stdin"
-@@ -6582,16 +6139,16 @@
- #~ msgstr "no usa el terminal en absolut"
-
- #~ msgid "force v3 signatures"
--#~ msgstr "for�a signatures v3"
-+#~ msgstr "força signatures v3"
-
- #~ msgid "do not force v3 signatures"
--#~ msgstr "no for�a signatures v3"
-+#~ msgstr "no força signatures v3"
-
- #~ msgid "force v4 key signatures"
--#~ msgstr "for�a signatures de clau v4"
-+#~ msgstr "força signatures de clau v4"
-
- #~ msgid "do not force v4 key signatures"
--#~ msgstr "no for�a signatures de clau v4"
-+#~ msgstr "no força signatures de clau v4"
-
- #~ msgid "always use a MDC for encryption"
- #~ msgstr "sempre utilitza un MDC per a xifrar"
-@@ -6602,15 +6159,15 @@
- #~ msgid "use the gpg-agent"
- #~ msgstr "utilitza el gpg-agent"
-
--# Mode desat�s (SC) ivb
-+# Mode desatès (SC) ivb
- #~ msgid "batch mode: never ask"
--#~ msgstr "mode desat�s: no pregunta mai"
-+#~ msgstr "mode desatès: no pregunta mai"
-
- #~ msgid "assume yes on most questions"
--#~ msgstr "suposa �s�� en la majoria de les preguntes"
-+#~ msgstr "suposa «sí» en la majoria de les preguntes"
-
- #~ msgid "assume no on most questions"
--#~ msgstr "suposa �no� en la majoria de les preguntes"
-+#~ msgstr "suposa «no» en la majoria de les preguntes"
-
- #~ msgid "add this keyring to the list of keyrings"
- #~ msgstr "afegeix aquest anell a la llista"
-@@ -6619,7 +6176,7 @@
- #~ msgstr "afegeix aquest anell secret a la llista"
-
- #~ msgid "show which keyring a listed key is on"
--#~ msgstr "mostra en quin anell de claus est� una clau llistada"
-+#~ msgstr "mostra en quin anell de claus està una clau llistada"
-
- #~ msgid "|NAME|use NAME as default secret key"
- #~ msgstr "|NOM|usa NOM com a clau secreta predeterminada"
-@@ -6628,19 +6185,19 @@
- #~ msgstr "|HOST|usa aquest servidor per a cercar claus"
-
- #~ msgid "|NAME|set terminal charset to NAME"
--#~ msgstr "|NOM|el joc de car�cters ser� NOM"
-+#~ msgstr "|NOM|el joc de caràcters serà NOM"
-
- #~ msgid "read options from file"
- #~ msgstr "llig opcions del fitxer"
-
- #~ msgid "|[file]|write status info to file"
--#~ msgstr "|fitxer|escriu informaci� d'estat en un fitxer"
-+#~ msgstr "|fitxer|escriu informació d'estat en un fitxer"
-
- #~ msgid "|KEYID|ultimately trust this key"
- #~ msgstr "|IDCLAU|confia absolutament en aquesta clau"
-
- #~ msgid "|FILE|load extension module FILE"
--#~ msgstr "|FITXER|carrega el m�dul d'extensi� especificat"
-+#~ msgstr "|FITXER|carrega el mòdul d'extensió especificat"
-
- #~ msgid "emulate the mode described in RFC1991"
- #~ msgstr "emula el mode descrit en RFC1991"
-@@ -6672,7 +6229,7 @@
- #~ msgstr "|NOM|usa l'algoritme de resum de missatges NOM"
-
- #~ msgid "|N|use compress algorithm N"
--#~ msgstr "|N|usa l'algoritme de compressi� N"
-+#~ msgstr "|N|usa l'algoritme de compressió N"
-
- # elimina o descarta? jm
- #~ msgid "throw keyid field of encrypted packets"
-@@ -6692,54 +6249,270 @@
-
- #~ msgid "compress algorithm `%s' is read-only in this release\n"
- #~ msgstr ""
--#~ "l'algorisme de compressi� �%s� es de nom�s lectura en aquesta "
--#~ "versi�\n"
-+#~ "l'algorisme de compressió «%s» es de només lectura en aquesta versió\n"
-
- #~ msgid "compress algorithm must be in range %d..%d\n"
--#~ msgstr "l'algoritme de compressi� ha d'estar en l'interval %d..%d\n"
-+#~ msgstr "l'algoritme de compressió ha d'estar en l'interval %d..%d\n"
-+
-+#~ msgid "--nrsign-key user-id"
-+#~ msgstr "--nrsign-key user-id"
-+
-+#~ msgid "--nrlsign-key user-id"
-+#~ msgstr "--nrlsign-key user-id"
-+
-+#~ msgid "can't open %s: %s\n"
-+#~ msgstr "no s'ha pogut obrir %s: %s\n"
-+
-+#~ msgid " i = please show me more information\n"
-+#~ msgstr " i = mostra més informació\n"
-+
-+#~ msgid "key %08lX: key has been revoked!\n"
-+#~ msgstr "clau %08lX: aquesta clau ha estat revocada!\n"
-+
-+#~ msgid "key %08lX: subkey has been revoked!\n"
-+#~ msgstr "clau %08lX: aquesta subclau ha estat revocada!\n"
-+
-+#~ msgid "%08lX: key has expired\n"
-+#~ msgstr "%08lX: la clau ha caducat\n"
-+
-+#~ msgid "%08lX: We do NOT trust this key\n"
-+#~ msgstr "%08lX: La clau NO és de confiança\n"
-
- #~ msgid ""
- #~ "%08lX: It is not sure that this key really belongs to the owner\n"
- #~ "but it is accepted anyway\n"
- #~ msgstr ""
- #~ "%08lX: No hi ha garanties que aquesta clau pertanya realment al seu\n"
--#~ "propietari per� s'accepta de tota manera\n"
-+#~ "propietari però s'accepta de tota manera\n"
-
- #~ msgid "preference %c%lu is not valid\n"
--#~ msgstr "la prefer�ncia %c%lu no �s v�lida\n"
-+#~ msgstr "la preferència %c%lu no és vàlida\n"
-+
-+#~ msgid " (%d) RSA (sign and encrypt)\n"
-+#~ msgstr " (%d) RSA (signar i xifrar)\n"
-+
-+#~ msgid ""
-+#~ "About to generate a new %s keypair.\n"
-+#~ " minimum keysize is 768 bits\n"
-+#~ " default keysize is 1024 bits\n"
-+#~ " highest suggested keysize is 2048 bits\n"
-+#~ msgstr ""
-+#~ "Preparat per a generar un nou parell de claus %s.\n"
-+#~ " grandària mínima: 768 bits\n"
-+#~ " grandària predeterminada: 1024 bits\n"
-+#~ " grandària màxima aconsellada: 2048 bits\n"
-+
-+#~ msgid "DSA only allows keysizes from 512 to 1024\n"
-+#~ msgstr "DSA només permet claus entre 512 i 1024 bits\n"
-+
-+#~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-+#~ msgstr ""
-+#~ "la clau és massa petita; 1024 bits és el mínim permés per a claus RSA.\n"
-+
-+#~ msgid "keysize too small; 768 is smallest value allowed.\n"
-+#~ msgstr "la clau és massa petita; 768 bits és el mínim permés.\n"
-+
-+# Jo tinc Deep Thought MMX a casa i m'ho fa en 42 segons. ivb
-+#~ msgid "keysize too large; %d is largest value allowed.\n"
-+#~ msgstr "la clau és massa llarga; %d és el màxim permés.\n"
-+
-+#~ msgid ""
-+#~ "Keysizes larger than 2048 are not suggested because\n"
-+#~ "computations take REALLY long!\n"
-+#~ msgstr ""
-+#~ "No es recomanen claus més llargues de 2048 bits perquè\n"
-+#~ "els càlculs són VERITABLEMENT llargs!\n"
-+
-+#~ msgid "Are you sure that you want this keysize? "
-+#~ msgstr "Segur que voleu aquesta grandària? "
-+
-+#~ msgid ""
-+#~ "Okay, but keep in mind that your monitor and keyboard radiation is also "
-+#~ "very vulnerable to attacks!\n"
-+#~ msgstr ""
-+#~ "D'acord, però sapieu que la radiació del monitor i del teclat també son "
-+#~ "molt vulnerables als atacs!\n"
-+
-+#~ msgid "%s: can't open: %s\n"
-+#~ msgstr "%s: no s'ha pogut obrir: %s\n"
-+
-+#~ msgid "%s: WARNING: empty file\n"
-+#~ msgstr "%s: AVÃS: el fitxer és buit\n"
-
- #~ msgid "key %08lX: not a rfc2440 key - skipped\n"
--#~ msgstr "clau %08lX: no �s una clau rfc2440 - es descarta\n"
-+#~ msgstr "clau %08lX: no és una clau rfc2440 - es descarta\n"
-
- #~ msgid ""
- #~ "NOTE: Elgamal primary key detected - this may take some time to import\n"
- #~ msgstr ""
--#~ "NOTA: s'ha detectat una clau prim�ria Elgamal - a�� pot trigar un "
--#~ "temps en importar-se\n"
-+#~ "NOTA: s'ha detectat una clau primària Elgamal - açò pot trigar un temps "
-+#~ "en importar-se\n"
-
- #~ msgid " (default)"
- #~ msgstr " (predeterminat)"
-
-+#~ msgid "q"
-+#~ msgstr "q"
-+
-+#~ msgid "save"
-+#~ msgstr "desa"
-+
-+#~ msgid "help"
-+#~ msgstr "ajuda"
-+
-+#~ msgid "fpr"
-+#~ msgstr "fpr"
-+
-+#~ msgid "list"
-+#~ msgstr "llista"
-+
-+#~ msgid "l"
-+#~ msgstr "l"
-+
-+#~ msgid "uid"
-+#~ msgstr "uid"
-+
-+#~ msgid "key"
-+#~ msgstr "clau"
-+
-+#~ msgid "check"
-+#~ msgstr "comprova"
-+
-+#~ msgid "s"
-+#~ msgstr "s"
-+
-+#~ msgid "lsign"
-+#~ msgstr "lsign"
-+
-+#~ msgid "nrsign"
-+#~ msgstr "nrsign"
-+
-+#~ msgid "sign the key non-revocably"
-+#~ msgstr "signa la clau irrevocablement"
-+
-+#~ msgid "nrlsign"
-+#~ msgstr "nrlsign"
-+
-+#~ msgid "sign the key locally and non-revocably"
-+#~ msgstr "signa la clau localment i irrevocablement"
-+
-+#~ msgid "debug"
-+#~ msgstr "depura"
-+
-+#~ msgid "adduid"
-+#~ msgstr "adduid"
-+
-+#~ msgid "addphoto"
-+#~ msgstr "addphoto"
-+
-+#~ msgid "deluid"
-+#~ msgstr "deluid"
-+
-+#~ msgid "delphoto"
-+#~ msgstr "delphoto"
-+
-+#~ msgid "addkey"
-+#~ msgstr "addkey"
-+
-+#~ msgid "delkey"
-+#~ msgstr "delkey"
-+
-+#~ msgid "addrevoker"
-+#~ msgstr "addrevoker"
-+
-+#~ msgid "delsig"
-+#~ msgstr "delsig"
-+
-+#~ msgid "primary"
-+#~ msgstr "primari"
-+
-+#~ msgid "toggle"
-+#~ msgstr "toggle"
-+
-+#~ msgid "t"
-+#~ msgstr "t"
-+
-+#~ msgid "pref"
-+#~ msgstr "pref"
-+
-+#~ msgid "showpref"
-+#~ msgstr "showpref"
-+
-+#~ msgid "setpref"
-+#~ msgstr "setpref"
-+
-+#~ msgid "updpref"
-+#~ msgstr "updpref"
-+
-+#~ msgid "passwd"
-+#~ msgstr "passwd"
-+
-+#~ msgid "trust"
-+#~ msgstr "trust"
-+
-+#~ msgid "revsig"
-+#~ msgstr "revsig"
-+
-+#~ msgid "revuid"
-+#~ msgstr "revuid"
-+
-+#~ msgid "revkey"
-+#~ msgstr "revkey"
-+
-+#~ msgid "showphoto"
-+#~ msgstr "showphoto"
-+
- #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
- #~ msgstr "%s%c %4u%c/%08lX creada: %s caduca: %s"
-
-+#~ msgid "rev! subkey has been revoked: %s\n"
-+#~ msgstr "rev! la subclau ha estat revocada: %s\n"
-+
-+#~ msgid "rev- faked revocation found\n"
-+#~ msgstr "rev- s'ha trobat una revocació falsa\n"
-+
-+#~ msgid "rev? problem checking revocation: %s\n"
-+#~ msgstr "rev? hi ha problemes en la comprovació de la revocació: %s\n"
-+
-+#~ msgid ""
-+#~ "\"\n"
-+#~ "locally signed with your key %08lX at %s\n"
-+#~ msgstr ""
-+#~ "»\n"
-+#~ "signat localment amb la vostra clau %08lX el %s\n"
-+
-+#~ msgid " signed by %08lX at %s%s%s\n"
-+#~ msgstr " signat per %08lX el %s%s%s\n"
-+
-+#~ msgid " signed by %08lX at %s%s\n"
-+#~ msgstr " signat per %08lX el %s%s\n"
-+
- #~ msgid "Notation: "
--#~ msgstr "Notaci�: "
-+#~ msgstr "Notació: "
-
- #~ msgid "Policy: "
--#~ msgstr "Pol�tica: "
-+#~ msgstr "Política: "
-+
-+#~ msgid "Experimental algorithms should not be used!\n"
-+#~ msgstr "No hauríeu d'usar algoritmes experimentals!\n"
-+
-+#~ msgid ""
-+#~ "this cipher algorithm is deprecated; please use a more standard one!\n"
-+#~ msgstr ""
-+#~ "aquest algoritme de xifratge està desaconsellat; useu-ne un de més "
-+#~ "estàndard!\n"
-
- #~ msgid "can't get key from keyserver: %s\n"
- #~ msgstr "no s'ha pogut obtenir del servidor la clau: %s\n"
-
- #~ msgid "error sending to `%s': %s\n"
--#~ msgstr "error mentre s'enviava a �%s�: %s\n"
-+#~ msgstr "error mentre s'enviava a «%s»: %s\n"
-
- #~ msgid "success sending to `%s' (status=%u)\n"
--#~ msgstr "l'enviament a �%s� ha tingut �xit (status=%u)\n"
-+#~ msgstr "l'enviament a «%s» ha tingut èxit (status=%u)\n"
-
- #~ msgid "failed sending to `%s': status=%u\n"
--#~ msgstr "l'enviament a �%s� ha fallat: status=%u\n"
-+#~ msgstr "l'enviament a «%s» ha fallat: status=%u\n"
-
- #~ msgid "this keyserver does not support --search-keys\n"
- #~ msgstr "aquest servidor de claus no suporta --search-keys\n"
-@@ -6752,7 +6525,7 @@
- #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
- #~ "signatures!\n"
- #~ msgstr ""
--#~ "clau %08lX: aquesta �s una clau ElGamal que NO �s segura per a "
-+#~ "clau %08lX: aquesta és una clau ElGamal que NO és segura per a "
- #~ "signatures!\n"
-
- #~ msgid ""
-@@ -6771,6 +6544,20 @@
- #~ "problemes\n"
- #~ "amb el rellotge)\n"
-
-+#~ msgid "%s: can't access: %s\n"
-+#~ msgstr "%s: no s'ha pogut accedir: %s\n"
-+
-+# blocatge? ivb
-+# yep. jm
-+#~ msgid "%s: can't create lock\n"
-+#~ msgstr "%s: no s'ha pogut crear el blocatge\n"
-+
-+#~ msgid "%s: can't make lock\n"
-+#~ msgstr "%s: no s'ha pogut crear el blocatge\n"
-+
-+#~ msgid "%s: can't create: %s\n"
-+#~ msgstr "%s: no s'ha pogut crear: %s\n"
-+
- #~ msgid "key %08lX marked as ultimately trusted\n"
- #~ msgstr "s'ha marcat la clau %08lX com confiada absolutament\n"
-
-@@ -6782,8 +6569,15 @@
-
- #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
- #~ msgstr ""
--#~ "s'est� comprovant en profunditat %d signat=%d ot(-/q/n/m/f/u)=%d/%d/%d/%"
--#~ "d/%d/%d\n"
-+#~ "s'està comprovant en profunditat %d signat=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/"
-+#~ "%d/%d\n"
-+
-+#~ msgid "%s: can't create directory: %s\n"
-+#~ msgstr "%s: no s'ha pogut crear el directori: %s\n"
-+
-+#~ msgid "If you want to use this revoked key anyway, answer \"yes\"."
-+#~ msgstr ""
-+#~ "Si voleu utilitzar aquesta clau revocada de totes maneres, dieu «sí»."
-
- #~ msgid ""
- #~ "Select the algorithm to use.\n"
-@@ -6810,30 +6604,27 @@
- #~ msgstr ""
- #~ "Seleccioneu l'algoritme a utilitzar.\n"
- #~ "\n"
--#~ "DSA (tamb� conegut com a DSS) �s el algorisme de signatura digital "
--#~ "que nom�s\n"
--#~ "pot ser utilitzat per a signatures. Aquest �s el algoritme suggerit "
--#~ "perqu�\n"
--#~ "la comprovaci� de signatures DSA �s molt m�s r�pida que les "
--#~ "d'ElGamal.\n"
-+#~ "DSA (també conegut com a DSS) és el algorisme de signatura digital que "
-+#~ "només\n"
-+#~ "pot ser utilitzat per a signatures. Aquest és el algoritme suggerit "
-+#~ "perquè\n"
-+#~ "la comprovació de signatures DSA és molt més ràpida que les d'ElGamal.\n"
- #~ "\n"
--#~ "ElGamal �s un algorisme que es pot utilitzar per a signatures i "
-+#~ "ElGamal és un algorisme que es pot utilitzar per a signatures i "
- #~ "xifratge.\n"
--#~ "OpenPGP distingueix entre 2 variants d'aquest algorisme: una de nom�s "
-+#~ "OpenPGP distingueix entre 2 variants d'aquest algorisme: una de només "
- #~ "xifratge\n"
--#~ "i una de signatura+xifratge; en veritat �s el mateix, per� alguns "
--#~ "par�metres\n"
--#~ "han de seleccionar-se d'una manera especial per a crear claus m�s "
-+#~ "i una de signatura+xifratge; en veritat és el mateix, però alguns "
-+#~ "paràmetres\n"
-+#~ "han de seleccionar-se d'una manera especial per a crear claus més "
- #~ "segures\n"
--#~ "per a signatures: aquest programa fa a��, per� altres "
--#~ "implementacions\n"
-+#~ "per a signatures: aquest programa fa açò, però altres implementacions\n"
- #~ "d'OpenPGP no estan obligades a entendre la variant signatura+xifratge.\n"
- #~ "\n"
--#~ "La primera clau (prim�ria) ha de ser sempre una clau que siga capa� "
--#~ "de signar;\n"
--#~ "aquesta �s la ra� per la qual la clau de nom�s xifratge ElGamal no "
--#~ "est�\n"
--#~ "disponible en aquest men�."
-+#~ "La primera clau (primària) ha de ser sempre una clau que siga capaç de "
-+#~ "signar;\n"
-+#~ "aquesta és la raó per la qual la clau de només xifratge ElGamal no està\n"
-+#~ "disponible en aquest menú."
-
- #~ msgid ""
- #~ "Although these keys are defined in RFC2440 they are not suggested\n"
-@@ -6841,8 +6632,8 @@
- #~ "with them are quite large and very slow to verify."
- #~ msgstr ""
- #~ "Encara que aquestes claus estan definides en RFC2440, no es recomanen\n"
--#~ "perqu� no tots els programes hi poden treballar i perqu� les\n"
--#~ "signatures que generen s�n molt llargues i lentes de verificar."
-+#~ "perquè no tots els programes hi poden treballar i perquè les\n"
-+#~ "signatures que generen són molt llargues i lentes de verificar."
-
- #~ msgid "%lu keys so far checked (%lu signatures)\n"
- #~ msgstr "fins ara s'han comprovat %lu claus (%lu signature)\n"
-@@ -6851,7 +6642,19 @@
- #~ msgstr "clau incompleta\n"
-
- #~ msgid "key %08lX incomplete\n"
--#~ msgstr "la clau %08lX �s incompleta\n"
-+#~ msgstr "la clau %08lX és incompleta\n"
-+
-+#~ msgid "sorry, can't do this in batch mode\n"
-+#~ msgstr "no es pot fet això en mode desatès\n"
-+
-+#~ msgid "can't open file: %s\n"
-+#~ msgstr "no es pot obrir el fitxer: %s\n"
-+
-+#~ msgid "error: missing colon\n"
-+#~ msgstr "error: falten dos punts\n"
-+
-+#~ msgid "error: no ownertrust value\n"
-+#~ msgstr "error: no hi ha cap valor de confiança\n"
-
- #~ msgid " (%d) ElGamal (sign and encrypt)\n"
- #~ msgstr " (%d) ElGamal (signar i xifrar)\n"
-@@ -6862,46 +6665,44 @@
- #~ "also\n"
- #~ "very slow, and may not be as secure as the other choices.\n"
- #~ msgstr ""
--#~ "L'�s d'aquest algorisme nom�s est� suportat per GnuPG. No podreu "
-+#~ "L'ús d'aquest algorisme només està suportat per GnuPG. No podreu "
- #~ "utilitzar aquesta clau per a comunicar-vos amb usuaris de PGP. Aquest "
--#~ "algorisme tamb� �s molt lent, i potser no �s tan segur com les "
--#~ "altres alternatives.\n"
-+#~ "algorisme també és molt lent, i potser no és tan segur com les altres "
-+#~ "alternatives.\n"
-
- #~ msgid "Create anyway? "
- #~ msgstr "Voleu crear la clau de tota manera? "
-
- #~ msgid "invalid symkey algorithm detected (%d)\n"
--#~ msgstr "algoritme de clau sim�tric inv�lid detectat (%d)\n"
-+#~ msgstr "algoritme de clau simètric invàlid detectat (%d)\n"
-
- #~ msgid "this keyserver is not fully HKP compatible\n"
--#~ msgstr "aquest servidor de clau no �s completament compatible amb HKP\n"
-+#~ msgstr "aquest servidor de clau no és completament compatible amb HKP\n"
-
- #~ msgid "The use of this algorithm is deprecated - create anyway? "
- #~ msgstr ""
--#~ "L'�s d'aquest algoritme est� desaconsellat - el voleu crear "
--#~ "igualment? "
-+#~ "L'ús d'aquest algoritme està desaconsellat - el voleu crear igualment? "
-
- #~ msgid "|NAME=VALUE|use this notation data"
--#~ msgstr "|NOM=VALOR|usa aquesta notaci� de dades"
-+#~ msgstr "|NOM=VALOR|usa aquesta notació de dades"
-
- #~ msgid ""
- #~ "the first character of a notation name must be a letter or an underscore\n"
- #~ msgstr ""
--#~ "el primer car�cter de la notaci� ha de ser una lletra o un "
--#~ "subratllat\n"
-+#~ "el primer caràcter de la notació ha de ser una lletra o un subratllat\n"
-
- #~ msgid "dots in a notation name must be surrounded by other characters\n"
--#~ msgstr "els punts han d'estar envoltats per altres car�cters\n"
-+#~ msgstr "els punts han d'estar envoltats per altres caràcters\n"
-
- #~ msgid ""
- #~ "WARNING: This key already has a photo ID.\n"
- #~ " Adding another photo ID may confuse some versions of PGP.\n"
- #~ msgstr ""
--#~ "AV�S: Aquesta clau ja te un photo ID.\n"
-+#~ "AVÃS: Aquesta clau ja te un photo ID.\n"
- #~ " Afegir un altre photo ID pot confondre algunes versions de PGP.\n"
-
- #~ msgid "You may only have one photo ID on a key.\n"
--#~ msgstr "Nom�s podeu tenir un photo ID en una clau.\n"
-+#~ msgstr "Només podeu tenir un photo ID en una clau.\n"
-
- #~ msgid " Fingerprint:"
- #~ msgstr " Empremta digital:"
-@@ -6911,13 +6712,13 @@
- #~ "heu d'executar GnuPG de nou per que puga llegir el nou fitxer d'opcions\n"
-
- #~ msgid "changing permission of `%s' failed: %s\n"
--#~ msgstr "no s'han pogut canviar els permissos de �%s�: %s\n"
-+#~ msgstr "no s'han pogut canviar els permissos de «%s»: %s\n"
-
- #~ msgid "too many random bits requested; the limit is %d\n"
--#~ msgstr "massa bits aleatoris sol�licitats; el l�mit �s %d\n"
-+#~ msgstr "massa bits aleatoris sol·licitats; el límit és %d\n"
-
- #~ msgid "|[NAMES]|check the trust database"
--#~ msgstr "|[NOMS]|comprova la base de dades de confian�a"
-+#~ msgstr "|[NOMS]|comprova la base de dades de confiança"
-
- #~ msgid "--delete-secret-key user-id"
- #~ msgstr "--delete-secret-key user-id"
-@@ -6929,7 +6730,7 @@
- #~ msgstr "--delete-secret-and-public-key user-id"
-
- #~ msgid "For info see http://www.gnupg.org"
--#~ msgstr "Si voleu m�s informaci� vegeu http://www.gnupg.org"
-+#~ msgstr "Si voleu més informació vegeu http://www.gnupg.org"
-
- #~ msgid "sSmMqQ"
- #~ msgstr "sSmMqQ"
-@@ -6939,43 +6740,40 @@
- #~ "can assign some missing owner trust values.\n"
- #~ "\n"
- #~ msgstr ""
--#~ "No s'ha trobat un cam� de confian�a v�lid a la clau. Vegem si "
--#~ "podem\n"
--#~ "assignar valors de confian�a no assignats.\n"
-+#~ "No s'ha trobat un camí de confiança vàlid a la clau. Vegem si podem\n"
-+#~ "assignar valors de confiança no assignats.\n"
- #~ "\n"
-
- #~ msgid ""
- #~ "No path leading to one of our keys found.\n"
- #~ "\n"
- #~ msgstr ""
--#~ "No s'ha trobat un cam� que condueixe a una de les nostres claus.\n"
-+#~ "No s'ha trobat un camí que condueixe a una de les nostres claus.\n"
- #~ "\n"
-
- #~ msgid ""
- #~ "No certificates with undefined trust found.\n"
- #~ "\n"
- #~ msgstr ""
--#~ "No s'han trobat certificats amb confian�a no definida.\n"
-+#~ "No s'han trobat certificats amb confiança no definida.\n"
- #~ "\n"
-
- #~ msgid ""
- #~ "No trust values changed.\n"
- #~ "\n"
- #~ msgstr ""
--#~ "No s'ha canviat cap valor de confian�a.\n"
-+#~ "No s'ha canviat cap valor de confiança.\n"
- #~ "\n"
-
- #~ msgid "%08lX: no info to calculate a trust probability\n"
- #~ msgstr ""
--#~ "%08lX: no hi ha informaci� per a calcular una probabilitat de "
--#~ "confian�a\n"
-+#~ "%08lX: no hi ha informació per a calcular una probabilitat de confiança\n"
-
- #~ msgid "skipped: public key already set with --encrypt-to\n"
--#~ msgstr ""
--#~ "es descarta: la clau p�blica ja s'ha especificat amb --encrypt-to\n"
-+#~ msgstr "es descarta: la clau pública ja s'ha especificat amb --encrypt-to\n"
-
- #~ msgid "%s: error checking key: %s\n"
--#~ msgstr "%s: error en la comprovaci� de la clau: %s\n"
-+#~ msgstr "%s: error en la comprovació de la clau: %s\n"
-
- #~ msgid "Do you really want to create a sign and encrypt key? "
- #~ msgstr "Segur que voleu crear una clau de signatura i xifratge? "
-@@ -6991,19 +6789,19 @@
-
- #~ msgid "too many entries in unk cache - disabled\n"
- #~ msgstr ""
--#~ "massa entrades en la mem�ria cau de claus desconegudes - desactivada\n"
-+#~ "massa entrades en la memòria cau de claus desconegudes - desactivada\n"
-
- #~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
- #~ msgstr "clau secreta %08lX no importada (utilitzeu %s per a permitir-ho)\n"
-
- #~ msgid "key %08lX: our copy has no self-signature\n"
--#~ msgstr "clau %08lX: la nostra c�pia no t� autosignatura\n"
-+#~ msgstr "clau %08lX: la nostra còpia no té autosignatura\n"
-
- #~ msgid "%s: user not found\n"
- #~ msgstr "%s: no s'ha trobat l'usuari\n"
-
- #~ msgid "assuming bad MDC due to an unknown critical bit\n"
--#~ msgstr "es suposa MDC erroni a causa d'un bit cr�tic desconegut\n"
-+#~ msgstr "es suposa MDC erroni a causa d'un bit crític desconegut\n"
-
- #~ msgid "error reading dir record for LID %lu: %s\n"
- #~ msgstr "error al llegir el registre de directori per al LID %lu: %s\n"
-@@ -7012,63 +6810,63 @@
- #~ msgstr "lid %lu: s'esperava registre de directori, s'ha obtingut %d\n"
-
- #~ msgid "no primary key for LID %lu\n"
--#~ msgstr "no hi ha una clau prim�ria per al LID %lu\n"
-+#~ msgstr "no hi ha una clau primària per al LID %lu\n"
-
- #~ msgid "error reading primary key for LID %lu: %s\n"
--#~ msgstr "error al llegir clau prim�ria per al LID %lu: %s\n"
-+#~ msgstr "error al llegir clau primària per al LID %lu: %s\n"
-
- #~ msgid "key %08lX: query record failed\n"
- #~ msgstr "clau %08lX: la consulta del registre ha fallat\n"
-
- #~ msgid "key %08lX: already in trusted key table\n"
--#~ msgstr "clau %08lX: ja es troba en la taula de claus de confian�a\n"
-+#~ msgstr "clau %08lX: ja es troba en la taula de claus de confiança\n"
-
- #~ msgid "NOTE: secret key %08lX is NOT protected.\n"
--#~ msgstr "NOTE: la clau secreta %08lX no est� protegida.\n"
-+#~ msgstr "NOTE: la clau secreta %08lX no està protegida.\n"
-
- #~ msgid "key %08lX: secret and public key don't match\n"
--#~ msgstr "clau %08lX: les claus p�blica i secreta no coincideixen\n"
-+#~ msgstr "clau %08lX: les claus pública i secreta no coincideixen\n"
-
- #~ msgid "key %08lX.%lu: Good subkey binding\n"
--#~ msgstr "clau %08lX.%lu: Enlla� de subclau correcta\n"
-+#~ msgstr "clau %08lX.%lu: Enllaç de subclau correcta\n"
-
- #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
--#~ msgstr "clau %08lX.%lu: Enlla� de subclau inv�lid: %s\n"
-+#~ msgstr "clau %08lX.%lu: Enllaç de subclau invàlid: %s\n"
-
- #~ msgid "key %08lX.%lu: Valid key revocation\n"
--#~ msgstr "clau %08lX.%lu: Revocaci� de clau v�lida\n"
-+#~ msgstr "clau %08lX.%lu: Revocació de clau vàlida\n"
-
- #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
--#~ msgstr "clau %08lX.%lu: Revocaci� de clau inv�lida: %s\n"
-+#~ msgstr "clau %08lX.%lu: Revocació de clau invàlida: %s\n"
-
- #~ msgid "Good self-signature"
- #~ msgstr "Auto-signatura correcta"
-
- #~ msgid "Invalid self-signature"
--#~ msgstr "Auto-signatura inv�lida"
-+#~ msgstr "Auto-signatura invàlida"
-
- #~ msgid "Valid user ID revocation skipped due to a newer self signature"
- #~ msgstr ""
--#~ "Es descarta una revocaci� d'ID d'usuari v�lida degut a una "
--#~ "autosignatura m�s recent"
-+#~ "Es descarta una revocació d'ID d'usuari vàlida degut a una autosignatura "
-+#~ "més recent"
-
- #~ msgid "Valid user ID revocation"
--#~ msgstr "Revocaci� d'ID d'usuari v�lida"
-+#~ msgstr "Revocació d'ID d'usuari vàlida"
-
- #~ msgid "Invalid user ID revocation"
--#~ msgstr "Revocaci� d'ID d'usuari inv�lida"
-+#~ msgstr "Revocació d'ID d'usuari invàlida"
-
- #~ msgid "Valid certificate revocation"
--#~ msgstr "Certificat de revocaci� v�lid"
-+#~ msgstr "Certificat de revocació vàlid"
-
- #~ msgid "Good certificate"
- #~ msgstr "Certificat correcte"
-
- #~ msgid "Invalid certificate revocation"
--#~ msgstr "Certificat de revocaci� inv�lid"
-+#~ msgstr "Certificat de revocació invàlid"
-
- #~ msgid "Invalid certificate"
--#~ msgstr "Certificat inv�lid"
-+#~ msgstr "Certificat invàlid"
-
- #~ msgid "sig record %lu[%d] points to wrong record.\n"
- #~ msgstr "el registre de signatura %lu[%d] apunta a un registre incorrecte.\n"
-@@ -7080,10 +6878,10 @@
- #~ msgstr "tdbio_search_dir ha fallat: %s\n"
-
- #~ msgid "lid ?: insert failed: %s\n"
--#~ msgstr "lid ?: la inserci� ha fallat: %s\n"
-+#~ msgstr "lid ?: la inserció ha fallat: %s\n"
-
- #~ msgid "lid %lu: insert failed: %s\n"
--#~ msgstr "lid %lu: la inserci� ha fallat: %s\n"
-+#~ msgstr "lid %lu: la inserció ha fallat: %s\n"
-
- #~ msgid "lid %lu: inserted\n"
- #~ msgstr "lid %lu: inserit\n"
-@@ -7098,7 +6896,7 @@
- #~ msgstr "lid %lu: registre de directori sense clau - es descarta\n"
-
- #~ msgid "\t%lu due to new pubkeys\n"
--#~ msgstr "\\t%lu degut a noves claus p�bliques\n"
-+#~ msgstr "\\t%lu degut a noves claus públiques\n"
-
- #~ msgid "\t%lu keys skipped\n"
- #~ msgstr "\t%lu claus es descarta\n"
-@@ -7117,11 +6915,10 @@
-
- #~ msgid "key %08lX: insert trust record failed: %s\n"
- #~ msgstr ""
--#~ "clau %08lX: ha fallat la inserci� en la base de dades de confian�a: %"
--#~ "s\n"
-+#~ "clau %08lX: ha fallat la inserció en la base de dades de confiança: %s\n"
-
- #~ msgid "key %08lX.%lu: inserted into trustdb\n"
--#~ msgstr "clau %08lX.%lu: inserida en la base de dades de confian�a\n"
-+#~ msgstr "clau %08lX.%lu: inserida en la base de dades de confiança\n"
-
- #~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
- #~ msgstr ""
-@@ -7132,30 +6929,26 @@
- #~ msgstr "clau %08lX.%lu: caducada el %s\n"
-
- #~ msgid "key %08lX.%lu: trust check failed: %s\n"
--#~ msgstr "clau %08lX.%lu: ha fallat la verificaci� de confian�a: %s\n"
-+#~ msgstr "clau %08lX.%lu: ha fallat la verificació de confiança: %s\n"
-
- #~ msgid "problem finding '%s' in trustdb: %s\n"
--#~ msgstr ""
--#~ "problema al cercar �%s� en la base de dades de confian�a: %s\n"
-+#~ msgstr "problema al cercar «%s» en la base de dades de confiança: %s\n"
-
- #~ msgid "user '%s' not in trustdb - inserting\n"
- #~ msgstr ""
--#~ "l'usuari �%s� no est� en la base de dades de confian�a - inserint-"
--#~ "lo\n"
-+#~ "l'usuari «%s» no està en la base de dades de confiança - inserint-lo\n"
-
- #~ msgid "failed to put '%s' into trustdb: %s\n"
--#~ msgstr ""
--#~ "no s'ha pogut posar �%s� en la base de dades de confian�a - %s\n"
-+#~ msgstr "no s'ha pogut posar «%s» en la base de dades de confiança - %s\n"
-
- #~ msgid "WARNING: can't yet handle long pref records\n"
--#~ msgstr ""
--#~ "AV�S: encara no es poden manejar registres de pref�ncies llargs\n"
-+#~ msgstr "AVÃS: encara no es poden manejar registres de prefències llargs\n"
-
- #~ msgid "%s: can't create keyring: %s\n"
- #~ msgstr "%s: no s'ha creat l'anell: %s\n"
-
- #~ msgid "RSA key cannot be used in this version\n"
--#~ msgstr "No es poden usar claus RSA en aquesta versi�\n"
-+#~ msgstr "No es poden usar claus RSA en aquesta versió\n"
-
- #~ msgid "No key for user ID\n"
- #~ msgstr "No hi ha clau per a l'usuari\n"
-@@ -7164,7 +6957,7 @@
- #~ msgstr "No hi ha usuari per a la clau\n"
-
- #~ msgid "invalid"
--#~ msgstr "inv�lida"
-+#~ msgstr "invàlida"
-
- #~ msgid "no secret key for decryption available\n"
- #~ msgstr "no hi ha clau secreta disponible per al desxifratge\n"
diff --git a/packages/gnupg/gnupg-1.4.0/21_strgutil_update.patch b/packages/gnupg/gnupg-1.4.0/21_strgutil_update.patch
deleted file mode 100644
index 8343fc0281..0000000000
--- a/packages/gnupg/gnupg-1.4.0/21_strgutil_update.patch
+++ /dev/null
@@ -1,200 +0,0 @@
---- gnupg-1.4.0/util/strgutil.c 2004-11-17 15:50:58.000000000 +0000
-+++ /tmp/dpep.GtChya/gnupg-1.4.0/util/strgutil.c 2005-02-05 00:53:22.921264222 +0000
-@@ -1,6 +1,6 @@
- /* strgutil.c - string utilities
- * Copyright (C) 1994, 1998, 1999, 2000, 2001,
-- * 2003 Free Software Foundation, Inc.
-+ * 2003, 2004, 2005 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
-@@ -144,6 +144,8 @@
- {
- log_info (_("error loading `%s': %s\n"),
- "iconv.dll", dlerror ());
-+ log_info(_("please see http://www.gnupg.org/download/iconv.html "
-+ "for more information\n"));
- iconv_open = NULL;
- iconv = NULL;
- iconv_close = NULL;
-@@ -451,10 +453,33 @@
- handle_iconv_error (const char *to, const char *from, int use_fallback)
- {
- if (errno == EINVAL)
-- log_error (_("conversion from `%s' to `%s' not available\n"),
-- from, to);
-+ {
-+ static int shown1, shown2;
-+ int x;
-+
-+ if (to && !strcmp (to, "utf-8"))
-+ {
-+ x = shown1;
-+ shown1 = 1;
-+ }
-+ else
-+ {
-+ x = shown2;
-+ shown2 = 1;
-+ }
-+
-+ if (!x)
-+ log_info (_("conversion from `%s' to `%s' not available\n"),
-+ from, to);
-+ }
- else
-- log_error (_("iconv_open failed: %s\n"), strerror (errno));
-+ {
-+ static int shown;
-+
-+ if (!shown)
-+ log_info (_("iconv_open failed: %s\n"), strerror (errno));
-+ shown = 1;
-+ }
-
- if (use_fallback)
- {
-@@ -479,28 +504,78 @@
- if (!newset) {
- #ifdef _WIN32
- static char codepage[30];
-+ unsigned int cpno;
-+ const char *aliases;
-
- /* We are a console program thus we need to use the
-- GetConsoleOutputCP fucntion and not the the GetACP which
-+ GetConsoleOutputCP function and not the the GetACP which
- would give the codepage for a GUI program. Note this is
- not a bulletproof detection because GetConsoleCP might
-- retrun a different one for console input. Not sure how to
-- cope with that. */
-- sprintf (codepage, "CP%u", (unsigned int)GetConsoleOutputCP ());
-- /* If it is the Windows name for Latin-1 we use the standard
-- name instead to avoid loading of iconv.dll. Unfortunately
-- it is often CP850 and we don't have a custom translation
-- for it. */
-- if (!strcmp (codepage, "CP1252"))
-- newset = "iso-8859-1";
-- else
-- newset = codepage;
-+ return a different one for console input. Not sure how to
-+ cope with that. If the console Code page is not known we
-+ fall back to the system code page. */
-+ cpno = GetConsoleOutputCP ();
-+ if (!cpno)
-+ cpno = GetACP ();
-+ sprintf (codepage, "CP%u", cpno );
-+ /* Resolve alias. We use a long string string and not the
-+ usual array to optimize if the code is taken to a DSO.
-+ Taken from libiconv 1.9.2. */
-+ newset = codepage;
-+ for (aliases = ("CP936" "\0" "GBK" "\0"
-+ "CP1361" "\0" "JOHAB" "\0"
-+ "CP20127" "\0" "ASCII" "\0"
-+ "CP20866" "\0" "KOI8-R" "\0"
-+ "CP21866" "\0" "KOI8-RU" "\0"
-+ "CP28591" "\0" "ISO-8859-1" "\0"
-+ "CP28592" "\0" "ISO-8859-2" "\0"
-+ "CP28593" "\0" "ISO-8859-3" "\0"
-+ "CP28594" "\0" "ISO-8859-4" "\0"
-+ "CP28595" "\0" "ISO-8859-5" "\0"
-+ "CP28596" "\0" "ISO-8859-6" "\0"
-+ "CP28597" "\0" "ISO-8859-7" "\0"
-+ "CP28598" "\0" "ISO-8859-8" "\0"
-+ "CP28599" "\0" "ISO-8859-9" "\0"
-+ "CP28605" "\0" "ISO-8859-15" "\0");
-+ *aliases;
-+ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-+ {
-+ if (!strcmp (codepage, aliases) ||(*aliases == '*' && !aliases[1]))
-+ {
-+ newset = aliases + strlen (aliases) + 1;
-+ break;
-+ }
-+ }
-+
- #else
- #ifdef HAVE_LANGINFO_CODESET
- newset = nl_langinfo (CODESET);
--#else
-- newset = "iso-8859-1";
--#endif
-+#else /* !HAVE_LANGINFO_CODESET */
-+ /* Try to get the used charset from environment variables. */
-+ static char codepage[30];
-+ const char *lc, *dot, *mod;
-+
-+ strcpy (codepage, "iso-8859-1");
-+ lc = getenv ("LC_ALL");
-+ if (!lc || !*lc) {
-+ lc = getenv ("LC_CTYPE");
-+ if (!lc || !*lc)
-+ lc = getenv ("LANG");
-+ }
-+ if (lc && *lc) {
-+ dot = strchr (lc, '.');
-+ if (dot) {
-+ mod = strchr (++dot, '@');
-+ if (!mod)
-+ mod = dot + strlen (dot);
-+ if (mod - dot < sizeof codepage && dot != mod) {
-+ memcpy (codepage, dot, mod - dot);
-+ codepage [mod - dot] = 0;
-+ }
-+ }
-+ }
-+ newset = codepage;
-+#endif /* !HAVE_LANGINFO_CODESET */
- #endif
- }
-
-@@ -511,9 +586,18 @@
- newset++;
- }
-
-+ /* Note that we silently assume that plain ASCII is actually meant
-+ as Latin-1. This makes sense because many Unix system don't
-+ have their locale set up properly and thus would get annoying
-+ error messages and we have to handle all the "bug"
-+ reports. Latin-1 has always been the character set used for 8
-+ bit characters on Unix systems. */
- if( !*newset
- || !ascii_strcasecmp (newset, "8859-1" )
-- || !ascii_strcasecmp (newset, "8859-15" ) ) {
-+ || !ascii_strcasecmp (newset, "646" )
-+ || !ascii_strcasecmp (newset, "ASCII" )
-+ || !ascii_strcasecmp (newset, "ANSI_X3.4-1968" )
-+ ) {
- active_charset_name = "iso-8859-1";
- no_translation = 0;
- active_charset = NULL;
-@@ -645,8 +729,12 @@
- if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes,
- &outptr, &outbytes) == (size_t)-1)
- {
-- log_error (_("conversion from `%s' to `%s' failed: %s\n"),
-- active_charset_name, "utf-8", strerror (errno));
-+ static int shown;
-+
-+ if (!shown)
-+ log_info (_("conversion from `%s' to `%s' failed: %s\n"),
-+ active_charset_name, "utf-8", strerror (errno));
-+ shown = 1;
- /* We don't do any conversion at all but use the strings as is. */
- strcpy (buffer, string);
- }
-@@ -919,8 +1007,12 @@
- outbuf = outptr = m_alloc (outbytes);
- if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes,
- &outptr, &outbytes) == (size_t)-1) {
-- log_error (_("conversion from `%s' to `%s' failed: %s\n"),
-- "utf-8", active_charset_name, strerror (errno));
-+ static int shown;
-+
-+ if (!shown)
-+ log_info (_("conversion from `%s' to `%s' failed: %s\n"),
-+ "utf-8", active_charset_name, strerror (errno));
-+ shown = 1;
- /* Didn't worked out. Temporary disable the use of
- * iconv and fall back to our old code. */
- m_free (buffer);
diff --git a/packages/gnupg/gnupg2.inc b/packages/gnupg/gnupg2.inc
deleted file mode 100644
index d362981f3c..0000000000
--- a/packages/gnupg/gnupg2.inc
+++ /dev/null
@@ -1,77 +0,0 @@
-SECTION = "console/utils"
-DESCRIPTION = "gnupg - GNU privacy guard - development version"
-HOMEPAGE = "http://www.gnupg.org/"
-LICENSE = "GPLv2"
-# DEPENDS = "zlib libgpg-error libgcrypt libassuan ksba opensc"
-DEPENDS = "zlib libgpg-error libgcrypt libassuan"
-
-inherit autotools gettext
-
-SRC_URI = "ftp://ftp.gnupg.org/gcrypt/alpha/gnupg/gnupg-${PV}.tar.bz2"
-S = "${WORKDIR}/gnupg-${PV}"
-libexecdir := "${libexecdir}/gnupg2"
-FILES_${PN} += "${datadir}/gnupg"
-
-# NOTE: gpgsm and scdaemon binaries aren't buildable if you dont have libksba. -CL
-# --with-ksba-prefix=${STAGING_LIBDIR}/..
-
-# NOTE: opensc is needed by the scdaemon binary. if you don't have opensc, it can
-# only build a limited scdaemon. -CL
-# --with-opensc-prefix=${STAGING_LIBDIR}/..
-
-# NOTE: given those facts, the current build will disable scdaemon and gpgsm.
-# Threads are disabled currently to avoid the pth dependency. -CL
-
-EXTRA_OECONF = "--disable-ldap \
- --with-zlib=${STAGING_LIBDIR}/.. \
- --disable-threads \
- --disable-gpgsm \
- --disable-scdaemon"
-
-# Bypass the tests
-EXTRA_OEMAKE += "'TESTS_ENVIRONMENT=/bin/true'"
-
-# --disable-gpg do not build the gpg program
-# --disable-gpgsm do not build the gpgsm program
-# --disable-agent do not build the agent program
-# --disable-scdaemon do not build the scdaemon program
-# --enable-agent-only build only the gpg-agent
-# --disable-exec disable all external program execution
-# --disable-photo-viewers disable photo ID viewers
-# --disable-keyserver-helpers disable all external keyserver support
-# --disable-ldap disable LDAP keyserver interface
-# --disable-hkp disable HKP keyserver interface
-# --disable-mailto disable email keyserver interface
-# --disable-keyserver-path disable the exec-path option for keyserver helpers
-# --disable-largefile omit support for large files
-# --disable-threads allow building without Pth support
-# --disable-dns-srv disable the use of DNS SRV in HKP
-# --disable-nls do not use Native Language Support
-# --disable-rpath do not hardcode runtime library paths
-# --disable-regex do not handle regular expressions in trust sigs
-# --with-agent-pgm=PATH Use PATH as the default for the agent)
-# --with-pinentry-pgm=PATH Use PATH as the default for the pinentry)
-# --with-scdaemon-pgm=PATH Use PATH as the default for the scdaemon)
-# --with-dirmngr-pgm=PATH Use PATH as the default for the dirmngr)
-# --with-protect-tool-pgm=PATH Use PATH as the default for the protect-tool)
-# --with-photo-viewer=FIXED_VIEWER set a fixed photo ID viewer
-# --with-capabilities use linux capabilities default=no
-# --with-gpg-error-prefix=PFX
-# prefix where GPG Error is installed (optional)
-# --with-libgcrypt-prefix=PFX
-# prefix where LIBGCRYPT is installed (optional)
-# --with-libassuan-prefix=PFX
-# prefix where LIBASSUAN is installed (optional)
-# --with-ksba-prefix=PFX prefix where KSBA is installed (optional)
-# --with-opensc-prefix=PFX
-# prefix where OpenSC is installed (optional)
-# --with-pth-prefix=PFX prefix where GNU Pth is installed (optional)
-# --with-mailprog=NAME use "NAME -t" for mail transport
-# --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
-# --without-libiconv-prefix don't search for libiconv in includedir and libdir
-# --with-included-gettext use the GNU gettext library included here
-# --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
-# --without-libintl-prefix don't search for libintl in includedir and libdir
-# --with-included-regex use the included GNU regex library
-# --with-zlib=DIR use libz in DIR
-# --with-pkits-tests run the PKITS based tests
diff --git a/packages/gnupg/gnupg2_1.9.15.bb b/packages/gnupg/gnupg2_1.9.15.bb
deleted file mode 100644
index 39de9c6d51..0000000000
--- a/packages/gnupg/gnupg2_1.9.15.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require gnupg2.inc
-
-PR = "r3"
diff --git a/packages/libxfce4util/.mtn2git_empty b/packages/gnuradio/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libxfce4util/.mtn2git_empty
+++ b/packages/gnuradio/.mtn2git_empty
diff --git a/packages/gnuradio/gnuradio.inc b/packages/gnuradio/gnuradio.inc
new file mode 100644
index 0000000000..4916411f0a
--- /dev/null
+++ b/packages/gnuradio/gnuradio.inc
@@ -0,0 +1,61 @@
+DESCRIPTION = "GNU Radio"
+SECTION = "apps"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = " guile-native fftwf python libusb virtual/libsdl alsa-lib jack boost cppunit sdcc-native swig-native"
+
+RDEPENDS_${PN} = "python-core python-audio python-codecs python-lang python-textutils"
+RDEPENDS_gnuradio-usrp = "python-core"
+
+inherit autotools pkgconfig
+
+CXXFLAGS_powerpc += "-lstdc++"
+
+export BUILD_SYS := "${BUILD_SYS}"
+export HOST_SYS := "${HOST_SYS}"
+
+EXTRA_OECONF = " \
+ --disable-gr-atsc \
+ --enable-gr-video-sdl \
+ --enable-gr-audio-alsa \
+ --enable-gr-audio-jack \
+ --enable-gr-audio-oss \
+ --enable-mblock \
+ "
+
+do_configure_append() {
+ find ${S} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
+}
+
+PACKAGES =+ "libpmt libpmt-qa \
+ libmblock libmblock-qa \
+ libgr-audio-alsa \
+ libusrp libusrp-inband libusrp-inband-qa \
+ libgromnithread \
+ libgnuradio-core libgnuradio-core-qa \
+ gnuradio-usrp-dbg gnuradio-usrp"
+
+FILES_libpmt = "${libdir}/libpmt.so"
+FILES_libpmt-qa = "${libdir}/libpmt-qa.so"
+FILES_libmblock = "${libdir}/libmblock.so"
+FILES_libmblock-qa = "${libdir}/libmblock-qa.so"
+FILES_libgr-audio-alsa = "${libdir}/libgr_audio_alsa.so"
+
+FILES_libusrp = "${libdir}/libusrp.so.*"
+FILES_libusrp-inband = "${libdir}/libusrp_inband.so.*"
+FILES_libusrp-inband-qa = "${libdir}/libusrp_inband-qa.so"
+FILES_libgnuradio-core = "${libdir}/libgnuradio-core.so.*"
+FILES_libgnuradio-core-qa = "${libdir}/libgnuradio-core-qa.so.*"
+FILES_libgromnithread = "${libdir}/libgromnithread.so*"
+
+FILES_${PN} += "${libdir}/python*/site-packages/gnuradio/*"
+FILES_${PN}-dbg += "${libdir}/python*/site-packages/gnuradio/.debug \
+ ${libdir}/python*/site-packages/gnuradio/*/.debug \
+ "
+
+FILES_gnuradio-usrp = "${libdir}/python*/site-packages/usrpm/* \
+ ${datadir}/usrp"
+FILES_gnuradio-usrp-dbg = "${libdir}/python*/site-packages/usrpm/.debug"
+
+
+
diff --git a/packages/libxfcegui4/.mtn2git_empty b/packages/gnuradio/gnuradio/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libxfcegui4/.mtn2git_empty
+++ b/packages/gnuradio/gnuradio/.mtn2git_empty
diff --git a/packages/gnuradio/gnuradio/no-trellis-doc.patch b/packages/gnuradio/gnuradio/no-trellis-doc.patch
new file mode 100644
index 0000000000..039aed9c8e
--- /dev/null
+++ b/packages/gnuradio/gnuradio/no-trellis-doc.patch
@@ -0,0 +1,20 @@
+--- /tmp/Makefile.am 2007-07-27 13:44:31.000000000 +0200
++++ trunk/gr-trellis/Makefile.am 2007-07-27 13:50:06.795215000 +0200
+@@ -21,5 +21,5 @@
+
+ include $(top_srcdir)/Makefile.common
+
+-SUBDIRS = src doc
++SUBDIRS = src
+
+--- /tmp/Makefile.am 2007-07-27 19:18:00.000000000 +0200
++++ trunk/usrp/Makefile.am 2007-07-27 19:18:20.995215000 +0200
+@@ -20,7 +20,7 @@
+ #
+
+ EXTRA_DIST = usrp.pc.in usrp.iss.in usrp.inf
+-SUBDIRS = host firmware fpga doc
++SUBDIRS = host firmware fpga
+
+ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = usrp.pc
diff --git a/packages/gnuradio/gnuradio_3.0.4.bb b/packages/gnuradio/gnuradio_3.0.4.bb
new file mode 100644
index 0000000000..30a6d0ab5e
--- /dev/null
+++ b/packages/gnuradio/gnuradio_3.0.4.bb
@@ -0,0 +1,8 @@
+require gnuradio.inc
+
+PR = "r0"
+
+SRC_URI = "ftp://ftp.gnu.org/gnu/gnuradio/gnuradio-${PV}.tar.gz \
+ file://no-trellis-doc.patch;patch=1 \
+ "
+
diff --git a/packages/gnuradio/gnuradio_svn.bb b/packages/gnuradio/gnuradio_svn.bb
new file mode 100644
index 0000000000..e40d151acb
--- /dev/null
+++ b/packages/gnuradio/gnuradio_svn.bb
@@ -0,0 +1,14 @@
+require gnuradio.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "3.0.4+svn${SRCDATE}"
+PR = "r2"
+
+SRC_URI = "svn://gnuradio.org/svn/gnuradio;module=trunk;proto=http \
+ file://no-trellis-doc.patch;patch=1 \
+ "
+
+S="${WORKDIR}/trunk"
+
+
diff --git a/packages/gnutls/gnutls.inc b/packages/gnutls/gnutls.inc
index 2fefe34ceb..ed96e3f588 100644
--- a/packages/gnutls/gnutls.inc
+++ b/packages/gnutls/gnutls.inc
@@ -9,7 +9,7 @@ SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2 \
file://onceonly.m4 \
file://gnutls-texinfo-euro.patch;patch=1"
-inherit autotools binconfig
+inherit autotools binconfig pkgconfig
EXTRA_OECONF="--with-included-opencdk --with-included-libtasn1"
@@ -25,6 +25,7 @@ do_stage() {
install -d ${STAGING_DATADIR}/aclocal
cp ${S}/lib/libgnutls.m4 ${STAGING_DATADIR}/aclocal/
+ cp ${S}/libextra/libgnutls-extra.m4 ${STAGING_DATADIR}/aclocal/
}
PACKAGES =+ "${PN}-openssl ${PN}-extra ${PN}-bin ${PN}-xx"
diff --git a/packages/gnutls/gnutls_1.4.4.bb b/packages/gnutls/gnutls_1.4.5.bb
index 3337e0b370..3337e0b370 100644
--- a/packages/gnutls/gnutls_1.4.4.bb
+++ b/packages/gnutls/gnutls_1.4.5.bb
diff --git a/packages/gnutls/gnutls_1.6.1.bb b/packages/gnutls/gnutls_1.6.1.bb
deleted file mode 100644
index a5fd4bb2d5..0000000000
--- a/packages/gnutls/gnutls_1.6.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require gnutls.inc
-
-do_configure_prepend() {
- sed -i "s/2.60/2.59/" ${S}/configure.in
-}
diff --git a/packages/gnutls/gnutls_1.6.2.bb b/packages/gnutls/gnutls_1.6.2.bb
new file mode 100644
index 0000000000..68077c0c5a
--- /dev/null
+++ b/packages/gnutls/gnutls_1.6.2.bb
@@ -0,0 +1,6 @@
+require gnutls.inc
+PR = "r1"
+
+do_configure_prepend() {
+ sed -i "s/2.60/2.59/" ${S}/configure.in
+}
diff --git a/packages/libxslt/libxslt-1.1.17/.mtn2git_empty b/packages/gparted/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libxslt/libxslt-1.1.17/.mtn2git_empty
+++ b/packages/gparted/.mtn2git_empty
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty b/packages/gparted/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty
+++ b/packages/gparted/files/.mtn2git_empty
diff --git a/packages/gparted/files/cross.patch b/packages/gparted/files/cross.patch
new file mode 100644
index 0000000000..08d4a29e5a
--- /dev/null
+++ b/packages/gparted/files/cross.patch
@@ -0,0 +1,12 @@
+diff -ur gparted-0.3.3.org/configure.in gparted-0.3.3/configure.in
+--- gparted-0.3.3.org/configure.in 2006-12-06 15:23:35.000000000 +0200
++++ gparted-0.3.3/configure.in 2007-07-10 02:10:59.000000000 +0300
+@@ -37,7 +37,7 @@
+ AC_MSG_CHECKING(for libparted >= $LIBPARTED_VERSION)
+ LIBS_save="$LIBS"
+ LIBS="-lparted -luuid -ldl"
+-AC_TRY_RUN(
++AC_TRY_LINK(
+ #include <stdio.h>
+ #include <parted/parted.h>
+
diff --git a/packages/gparted/files/gparted-0.3.3-llabs.patch b/packages/gparted/files/gparted-0.3.3-llabs.patch
new file mode 100644
index 0000000000..07c4020e57
--- /dev/null
+++ b/packages/gparted/files/gparted-0.3.3-llabs.patch
@@ -0,0 +1,72 @@
+--- src/GParted_Core.cc 2006/09/25 21:49:32 1.1
++++ src/GParted_Core.cc 2006/09/25 22:03:31
+@@ -1604,7 +1604,7 @@ bool GParted_Core::copy_filesystem( cons
+
+ while ( succes &&
+ timer .elapsed() <= smallest_time &&
+- std::llabs( done ) + N <= length &&
++ llabs( done ) + N <= length &&
+ optimal_blocksize * 2 < N )
+ {
+ if ( done != 0 )
+@@ -1648,7 +1648,7 @@ bool GParted_Core::copy_filesystem( cons
+ dst_device,
+ src_start + ( dst_start > src_start ? 0 : done ),
+ dst_start + ( dst_start > src_start ? 0 : done ),
+- length - std::llabs( done ),
++ length - llabs( done ),
+ optimal_blocksize,
+ operationdetail,
+ readonly,
+@@ -1822,7 +1822,7 @@ bool GParted_Core::copy_blocks( const Gl
+ if ( lp_device_src && lp_device_dst && ped_device_open( lp_device_src ) && ped_device_open( lp_device_dst ) )
+ {
+ Glib::ustring error_message ;
+- buf = static_cast<char *>( malloc( std::llabs( blocksize ) * 512 ) ) ;
++ buf = static_cast<char *>( malloc( llabs( blocksize ) * 512 ) ) ;
+ if ( buf )
+ {
+ ped_device_sync( lp_device_dst ) ;
+@@ -1843,7 +1843,7 @@ bool GParted_Core::copy_blocks( const Gl
+ operationdetail .get_last_child() .add_child( OperationDetail( "", STATUS_NONE ) ) ;
+
+ Glib::Timer timer_progress_timeout, timer_total ;
+- while( succes && std::llabs( done ) < length )
++ while( succes && llabs( done ) < length )
+ {
+ succes = copy_block( lp_device_src,
+ lp_device_dst,
+@@ -1858,7 +1858,7 @@ bool GParted_Core::copy_blocks( const Gl
+ if ( timer_progress_timeout .elapsed() >= 0.5 )
+ {
+ set_progress_info( length,
+- std::llabs( done + blocksize ),
++ llabs( done + blocksize ),
+ timer_total,
+ operationdetail .get_last_child() .get_last_child(),
+ readonly ) ;
+@@ -1877,13 +1877,13 @@ bool GParted_Core::copy_blocks( const Gl
+
+ //final description
+ operationdetail .get_last_child() .get_last_child() .set_description(
+- String::ucompose( readonly ? _("%1 of %2 read") : _("%1 of %2 copied"), std::llabs( done ), length ), FONT_ITALIC ) ;
++ String::ucompose( readonly ? _("%1 of %2 read") : _("%1 of %2 copied"), llabs( done ), length ), FONT_ITALIC ) ;
+
+ if ( ! succes && ! error_message .empty() )
+ operationdetail .get_last_child() .add_child(
+ OperationDetail( error_message, STATUS_NONE, FONT_ITALIC ) ) ;
+
+- total_done += std::llabs( done ) ;
++ total_done += llabs( done ) ;
+
+ //close and destroy the devices..
+ ped_device_close( lp_device_src ) ;
+@@ -1912,7 +1912,7 @@ bool GParted_Core::copy_block( PedDevice
+
+ if ( blocksize < 0 )
+ {
+- blocksize = std::llabs( blocksize ) ;
++ blocksize = llabs( blocksize ) ;
+ offset_src -= ( blocksize -1 ) ;
+ offset_dst -= ( blocksize -1 ) ;
+ }
diff --git a/packages/gparted/gparted_0.3.3.bb b/packages/gparted/gparted_0.3.3.bb
new file mode 100644
index 0000000000..43623d7348
--- /dev/null
+++ b/packages/gparted/gparted_0.3.3.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "GNOME Partition Manager"
+LICENSE = "GPL"
+DEPENDS = "gtkmm parted"
+PR = "r1"
+
+inherit autotools
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gparted/gparted-${PV}.tar.bz2 \
+ file://cross.patch;patch=1 \
+ file://gparted-0.3.3-llabs.patch;patch=1;pnum=0"
diff --git a/packages/gpe-aerial/gpe-aerial_0.3.0.bb b/packages/gpe-aerial/gpe-aerial_0.3.0.bb
new file mode 100644
index 0000000000..9158305a80
--- /dev/null
+++ b/packages/gpe-aerial/gpe-aerial_0.3.0.bb
@@ -0,0 +1,11 @@
+inherit gpe autotools
+
+PR = "r0"
+DESCRIPTION = "GPE wireless LAN communication applet"
+DEPENDS = "gtk+ libgpewidget prismstumbler"
+RDEPENDS = "prismstumbler"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+GPE_TARBALL_SUFFIX = "bz2"
diff --git a/packages/gpe-aerial/gpe-aerial_svn.bb b/packages/gpe-aerial/gpe-aerial_svn.bb
new file mode 100644
index 0000000000..faa8b5c813
--- /dev/null
+++ b/packages/gpe-aerial/gpe-aerial_svn.bb
@@ -0,0 +1,16 @@
+inherit gpe autotools
+
+DESCRIPTION = "GPE wireless LAN communication applet"
+DEPENDS = "gtk+ libgpewidget prismstumbler"
+RDEPENDS = "prismstumbler"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+PR = "r0"
+PV = "0.3.0+svn${SRCDATE}"
+
+SRC_URI = "${GPE_EXTRA_SVN}"
+
+S = "${WORKDIR}/gpe-aerial"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty b/packages/gpe-announce/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty
+++ b/packages/gpe-announce/files/.mtn2git_empty
diff --git a/packages/gpe-announce/files/fix-esound.diff b/packages/gpe-announce/files/fix-esound.diff
new file mode 100644
index 0000000000..71ff7e8f2c
--- /dev/null
+++ b/packages/gpe-announce/files/fix-esound.diff
@@ -0,0 +1,24 @@
+diff -ruN gpe-announce-0.13/callbacks.c gpe-announce-0.13-new/callbacks.c
+--- gpe-announce-0.13/callbacks.c 2007-06-14 20:56:15.000000000 +0400
++++ gpe-announce-0.13-new/callbacks.c 2005-08-24 23:04:31.000000000 +0400
+@@ -28,7 +28,7 @@
+ #include <linux/soundcard.h>
+ #include <pthread.h>
+
+-#include <gpe/soundgen.h>
++#include <soundgen.h>
+ #include <gpe/schedule.h>
+
+ #include <linux/types.h>
+diff -ruN gpe-announce-0.13/Makefile gpe-announce-0.13-new/Makefile
+--- gpe-announce-0.13/Makefile 2007-06-14 20:30:00.000000000 +0400
++++ gpe-announce-0.13-new/Makefile 2007-06-14 20:28:30.000000000 +0400
+@@ -43,7 +43,7 @@
+ all: $(PACKAGE)
+
+ $(PACKAGE): $(OBJS)
+- $(CC) -o $@ $^ $(LDFLAGS) $(PACKAGE_LDFLAGS) -lsoundgen -lschedule
++ $(CC) -o $@ $^ $(LDFLAGS) $(PACKAGE_LDFLAGS) -lsoundgen -lschedule -lesd
+
+ install-program: all
+ install -d $(DESTDIR)$(PREFIX)/bin
diff --git a/packages/gpe-announce/gpe-announce_0.13.bb b/packages/gpe-announce/gpe-announce_0.13.bb
index 6124b4c4a8..6ffe317a12 100644
--- a/packages/gpe-announce/gpe-announce_0.13.bb
+++ b/packages/gpe-announce/gpe-announce_0.13.bb
@@ -2,4 +2,6 @@ inherit gpe
DEPENDS = "libsoundgen libschedule gtk+ libgpewidget"
LICENSE = "GPL"
+PR = "r1"
+SRC_URI += "file://fix-esound.diff;patch=1"
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/.mtn2git_empty b/packages/gpe-autostarter/gpe-autostarter-0.12/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/.mtn2git_empty
+++ b/packages/gpe-autostarter/gpe-autostarter-0.12/.mtn2git_empty
diff --git a/packages/gpe-autostarter/gpe-autostarter-0.12/wireless.patch b/packages/gpe-autostarter/gpe-autostarter-0.12/wireless.patch
new file mode 100644
index 0000000000..b375507ca8
--- /dev/null
+++ b/packages/gpe-autostarter/gpe-autostarter-0.12/wireless.patch
@@ -0,0 +1,12 @@
+--- gpe-autostarter-0.12/net.c.orig 2007-04-30 21:26:40.000000000 +0200
++++ gpe-autostarter-0.12/net.c 2007-04-30 21:33:20.000000000 +0200
+@@ -18,7 +18,9 @@
+ #include <locale.h>
+ #include <signal.h>
+
++#include <linux/types.h>
+ #include <sys/socket.h>
++#include <linux/if.h>
+ #include <linux/wireless.h>
+ #include <sys/ioctl.h>
+
diff --git a/packages/gpe-autostarter/gpe-autostarter_0.12.bb b/packages/gpe-autostarter/gpe-autostarter_0.12.bb
index f92b5df16b..c47f75797e 100644
--- a/packages/gpe-autostarter/gpe-autostarter_0.12.bb
+++ b/packages/gpe-autostarter/gpe-autostarter_0.12.bb
@@ -4,3 +4,5 @@ DEPENDS = "glib-2.0 dbus-glib hotplug-dbus virtual/libx11"
RDEPENDS = "hotplug-dbus"
inherit gpe
+
+SRC_URI += "file://wireless.patch;patch=1"
diff --git a/packages/gpe-bluetooth/gpe-bluetooth.inc b/packages/gpe-bluetooth/gpe-bluetooth.inc
new file mode 100644
index 0000000000..c258832c8b
--- /dev/null
+++ b/packages/gpe-bluetooth/gpe-bluetooth.inc
@@ -0,0 +1,11 @@
+DESCRIPTION = "GPE bluetooth support user interface tool."
+SECTION = "gpe"
+LICENSE = "GPL"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libcontactsdb libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus"
+RDEPENDS = "bluez-utils-dbus blueprobe"
+
+GPE_TARBALL_SUFFIX= "bz2"
+inherit gpe autotools
+
+FILES_${PN} += '${datadir}/bluez-pin'
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.49.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.49.bb
index f3129fcf17..396beeb014 100644
--- a/packages/gpe-bluetooth/gpe-bluetooth_0.49.bb
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.49.bb
@@ -1,12 +1,3 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE bluetooth support"
-SECTION = "gpe"
-PRIORITY = "optional"
+require gpe-bluetooth.inc
DEPENDS = "gtk+ libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus libcontactsdb"
-RDEPENDS = "bluez-utils-dbus blueprobe"
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit gpe autotools
-
-FILES_${PN} += '${datadir}/bluez-pin'
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.51.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.51.bb
index 15d8ccafcc..98cdbc4b7f 100644
--- a/packages/gpe-bluetooth/gpe-bluetooth_0.51.bb
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.51.bb
@@ -1,16 +1,6 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE bluetooth support user interface tool."
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r1"
+require gpe-bluetooth.inc
-DEPENDS = "gtk+ libcontactsdb libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus"
-RDEPENDS = "bluez-utils-dbus blueprobe"
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit gpe autotools
-
-FILES_${PN} += '${datadir}/bluez-pin'
+PR = "r1"
do_configure () {
autotools_do_configure
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.52.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.52.bb
index b6dcfcca61..66bc3f0b24 100644
--- a/packages/gpe-bluetooth/gpe-bluetooth_0.52.bb
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.52.bb
@@ -1,13 +1 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE bluetooth support user interface tool."
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r0"
-
-DEPENDS = "gtk+ libcontactsdb libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus"
-RDEPENDS = "bluez-utils-dbus blueprobe"
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit gpe autotools
-
-FILES_${PN} += '${datadir}/bluez-pin'
+require gpe-bluetooth.inc
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.53.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.53.bb
index b6dcfcca61..66bc3f0b24 100644
--- a/packages/gpe-bluetooth/gpe-bluetooth_0.53.bb
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.53.bb
@@ -1,13 +1 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE bluetooth support user interface tool."
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r0"
-
-DEPENDS = "gtk+ libcontactsdb libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus"
-RDEPENDS = "bluez-utils-dbus blueprobe"
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit gpe autotools
-
-FILES_${PN} += '${datadir}/bluez-pin'
+require gpe-bluetooth.inc
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.54.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.54.bb
index e664f51959..9164cc4088 100644
--- a/packages/gpe-bluetooth/gpe-bluetooth_0.54.bb
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.54.bb
@@ -1,16 +1,6 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE bluetooth support user interface tool."
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r1"
+require gpe-bluetooth.inc
-DEPENDS = "gtk+ libcontactsdb libdisplaymigration libgpewidget openobex libgpevtype bluez-libs sqlite dbus-glib libglade blueprobe bluez-utils-dbus"
-RDEPENDS = "bluez-utils-dbus blueprobe"
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit gpe autotools
+PR = "r1"
SRC_URI += "file://hciattach-bts.patch;patch=1 \
file://include-sdp_lib.patch;patch=1"
-
-FILES_${PN} += '${datadir}/bluez-pin'
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_0.55.bb b/packages/gpe-bluetooth/gpe-bluetooth_0.55.bb
new file mode 100644
index 0000000000..e6ff0d6624
--- /dev/null
+++ b/packages/gpe-bluetooth/gpe-bluetooth_0.55.bb
@@ -0,0 +1,4 @@
+require gpe-bluetooth.inc
+
+PR = "r0"
+
diff --git a/packages/gpe-bluetooth/gpe-bluetooth_svn.bb b/packages/gpe-bluetooth/gpe-bluetooth_svn.bb
new file mode 100644
index 0000000000..956e82e0ad
--- /dev/null
+++ b/packages/gpe-bluetooth/gpe-bluetooth_svn.bb
@@ -0,0 +1,10 @@
+require gpe-bluetooth.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.54+svn${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "${GPE_SVN}"
+
+S = ${WORKDIR}/${PN}
diff --git a/packages/gpe-bootsplash/files/splash-l.svg b/packages/gpe-bootsplash/files/splash-l.svg
index fa5ca4805e..f488057c37 100644
--- a/packages/gpe-bootsplash/files/splash-l.svg
+++ b/packages/gpe-bootsplash/files/splash-l.svg
@@ -6,15 +6,17 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg1"
sodipodi:version="0.32"
- inkscape:version="0.42"
+ inkscape:version="0.45"
width="8.0000000cm"
height="6.0000000cm"
sodipodi:docname="splash-l.svg"
- sodipodi:docbase="/home/koen/Desktop">
+ sodipodi:docbase="/home/fuchs/Projekte/oe/dev/packages/gpe-bootsplash/files"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
<metadata
id="metadata27">
<rdf:RDF>
@@ -35,15 +37,15 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="2.0000000"
+ inkscape:zoom="2"
inkscape:cx="130.17183"
inkscape:cy="82.153473"
inkscape:window-width="1024"
inkscape:window-height="746"
showguides="true"
snaptoguides="true"
- inkscape:window-x="1171"
- inkscape:window-y="138"
+ inkscape:window-x="261"
+ inkscape:window-y="139"
inkscape:current-layer="svg1" />
<path
style="fill:#9ca3c2;fill-rule:evenodd;stroke:#000000;stroke-width:0.86250001;stroke-linecap:round;stroke-linejoin:round;"
@@ -157,8 +159,7 @@
sodipodi:nodetypes="cssssss" />
</g>
<path
- transform="scale(1.016596,0.983675)"
- style="font-size:24.295891px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
- d="M 32.449651,158.02394 L 32.449651,153.26679 L 28.534786,153.26679 L 28.534786,151.29749 L 34.822297,151.29749 L 34.822297,158.90182 C 33.896949,159.55826 32.876713,160.05651 31.761584,160.39659 C 30.646428,160.72876 29.456152,160.89485 28.190753,160.89485 C 25.422659,160.89485 23.255645,160.08815 21.689704,158.47475 C 20.131664,156.85344 19.352646,154.59943 19.352648,151.71271 C 19.352646,148.81809 20.131664,146.56408 21.689704,144.95067 C 23.255645,143.32938 25.422659,142.51872 28.190753,142.51871 C 29.345429,142.51872 30.440799,142.66108 31.476867,142.94578 C 32.520816,143.23052 33.481737,143.64968 34.359631,144.20328 L 34.359631,146.75388 C 33.473828,146.00255 32.532680,145.43707 31.536183,145.05744 C 30.539659,144.67783 29.491742,144.48802 28.392428,144.48800 C 26.225403,144.48802 24.596188,145.09304 23.504778,146.30308 C 22.421265,147.51314 21.879511,149.31635 21.879515,151.71271 C 21.879511,154.10118 22.421265,155.90043 23.504778,157.11048 C 24.596188,158.32053 26.225403,158.92555 28.392428,158.92555 C 29.238660,158.92555 29.993951,158.85437 30.658304,158.71201 C 31.322631,158.56175 31.919747,158.33239 32.449651,158.02394 M 41.608064,144.80831 L 41.608064,151.46358 L 44.621324,151.46358 C 45.736458,151.46359 46.598518,151.17492 47.207507,150.59756 C 47.816475,150.02023 48.120964,149.19771 48.120976,148.13001 C 48.120964,147.07024 47.816475,146.25168 47.207507,145.67432 C 46.598518,145.09700 45.736458,144.80832 44.621324,144.80831 L 41.608064,144.80831 M 39.211692,142.83901 L 44.621324,142.83901 C 46.606427,142.83903 48.105147,143.28983 49.117487,144.19142 C 50.137711,145.08513 50.647829,146.39799 50.647843,148.13001 C 50.647829,149.87787 50.137711,151.19864 49.117487,152.09233 C 48.105147,152.98603 46.606427,153.43288 44.621324,153.43288 L 41.608064,153.43288 L 41.608064,160.55081 L 39.211692,160.55081 L 39.211692,142.83901 M 53.874640,142.83901 L 65.073527,142.83901 L 65.073527,144.85576 L 56.271012,144.85576 L 56.271012,150.09931 L 64.705767,150.09931 L 64.705767,152.11606 L 56.271012,152.11606 L 56.271012,158.53406 L 65.287065,158.53406 L 65.287065,160.55081 L 53.874640,160.55081 L 53.874640,142.83901 M 79.261950,158.53406 L 87.625525,158.53406 L 87.625525,160.55081 L 76.379185,160.55081 L 76.379185,158.53406 C 77.288697,157.59292 78.526425,156.33146 80.092375,154.74969 C 81.666223,153.16003 82.654825,152.13584 83.058182,151.67712 C 83.825329,150.81507 84.359173,150.08746 84.659718,149.49428 C 84.968152,148.89322 85.122374,148.30402 85.122384,147.72666 C 85.122374,146.78553 84.790204,146.01837 84.125873,145.42520 C 83.469432,144.83205 82.611326,144.53547 81.551552,144.53545 C 80.800209,144.53547 80.005373,144.66597 79.167044,144.92694 C 78.336614,145.18795 77.446873,145.58339 76.497817,146.11326 L 76.497817,143.69316 C 77.462690,143.30565 78.364295,143.01302 79.202633,142.81529 C 80.040963,142.61758 80.808117,142.51872 81.504100,142.51871 C 83.338937,142.51872 84.802067,142.97743 85.893494,143.89484 C 86.984899,144.81228 87.530606,146.03814 87.530619,147.57244 C 87.530606,148.30006 87.392202,148.99208 87.115406,149.64851 C 86.846494,150.29704 86.352194,151.06419 85.632503,151.94997 C 85.434772,152.17934 84.806021,152.84368 83.746250,153.94299 C 82.686460,155.03442 81.191695,156.56477 79.261950,158.53406 M 92.667394,157.53755 L 95.170535,157.53755 L 95.170535,160.55081 L 92.667394,160.55081 L 92.667394,157.53755 M 99.797195,142.83901 L 111.18589,142.83901 L 111.18589,143.85925 L 104.75602,160.55081 L 102.25288,160.55081 L 108.30313,144.85576 L 99.797195,144.85576 L 99.797195,142.83901"
- id="text1432" />
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 33.285156,155.60233 L 33.285156,150.90311 L 29.417969,150.90311 L 29.417969,148.95779 L 35.628906,148.95779 L 35.628906,156.46951 C 34.714828,157.11795 33.707017,157.61014 32.605469,157.94608 C 31.503894,158.2742 30.328114,158.43826 29.078125,158.43826 C 26.343743,158.43826 24.20312,157.64139 22.65625,156.04764 C 21.117185,154.44608 20.347655,152.21952 20.347656,149.36795 C 20.347655,146.50859 21.117185,144.28203 22.65625,142.68826 C 24.20312,141.08672 26.343743,140.28594 29.078125,140.28592 C 30.218739,140.28594 31.300769,140.42656 32.324219,140.70779 C 33.355454,140.98906 34.304672,141.40312 35.171875,141.94998 L 35.171875,144.46951 C 34.29686,143.72734 33.367173,143.16875 32.382812,142.79373 C 31.398425,142.41875 30.36327,142.23125 29.277344,142.23123 C 27.136711,142.23125 25.527337,142.8289 24.449219,144.0242 C 23.378902,145.21953 22.843746,147.00077 22.84375,149.36795 C 22.843746,151.72733 23.378902,153.50467 24.449219,154.69998 C 25.527337,155.8953 27.136711,156.49295 29.277344,156.49295 C 30.11327,156.49295 30.859363,156.42264 31.515625,156.28201 C 32.171862,156.13358 32.761705,155.90702 33.285156,155.60233 M 42.332031,142.54764 L 42.332031,149.12186 L 45.308594,149.12186 C 46.410147,149.12187 47.261709,148.83671 47.863281,148.26639 C 48.464833,147.69609 48.765614,146.88359 48.765625,145.82889 C 48.765614,144.78203 48.464833,143.97343 47.863281,143.40311 C 47.261709,142.83281 46.410147,142.54765 45.308594,142.54764 L 42.332031,142.54764 M 39.964844,140.60233 L 45.308594,140.60233 C 47.269522,140.60234 48.749989,141.04765 49.75,141.93826 C 50.757799,142.82109 51.261705,144.11796 51.261719,145.82889 C 51.261705,147.55546 50.757799,148.86015 49.75,149.74295 C 48.749989,150.62577 47.269522,151.06718 45.308594,151.06717 L 42.332031,151.06717 L 42.332031,158.09842 L 39.964844,158.09842 L 39.964844,140.60233 M 54.449219,140.60233 L 65.511719,140.60233 L 65.511719,142.59451 L 56.816406,142.59451 L 56.816406,147.7742 L 65.148438,147.7742 L 65.148438,149.76639 L 56.816406,149.76639 L 56.816406,156.10623 L 65.722656,156.10623 L 65.722656,158.09842 L 54.449219,158.09842 L 54.449219,140.60233 M 79.527344,156.10623 L 87.789062,156.10623 L 87.789062,158.09842 L 76.679688,158.09842 L 76.679688,156.10623 C 77.578122,155.17655 78.800777,153.93045 80.347656,152.36795 C 81.902337,150.79765 82.878898,149.78593 83.277344,149.33279 C 84.035147,148.48124 84.56249,147.76249 84.859375,147.17654 C 85.164052,146.58281 85.316396,146.00078 85.316406,145.43045 C 85.316396,144.50078 84.988271,143.74296 84.332031,143.15701 C 83.683585,142.57109 82.83593,142.27812 81.789062,142.27811 C 81.046869,142.27812 80.261713,142.40703 79.433594,142.66483 C 78.613278,142.92265 77.734372,143.31328 76.796875,143.8367 L 76.796875,141.44608 C 77.749997,141.06328 78.640621,140.77422 79.46875,140.57889 C 80.29687,140.38359 81.054681,140.28594 81.742188,140.28592 C 83.554679,140.28594 84.99999,140.73906 86.078125,141.64529 C 87.156238,142.55156 87.6953,143.7625 87.695312,145.27811 C 87.6953,145.99687 87.558581,146.68046 87.285156,147.32889 C 87.019519,147.96952 86.531238,148.72733 85.820312,149.60233 C 85.624989,149.8289 85.003896,150.48515 83.957031,151.57108 C 82.910148,152.64921 81.433587,154.16092 79.527344,156.10623 M 92.769531,155.12186 L 95.242188,155.12186 L 95.242188,158.09842 L 92.769531,158.09842 L 92.769531,155.12186 M 105.47266,149.78983 C 104.34765,149.78983 103.46093,150.09061 102.8125,150.69217 C 102.17187,151.29374 101.85156,152.12186 101.85156,153.17654 C 101.85156,154.23124 102.17187,155.05936 102.8125,155.66092 C 103.46093,156.26248 104.34765,156.56326 105.47266,156.56326 C 106.59765,156.56326 107.48437,156.26248 108.13281,155.66092 C 108.78124,155.05155 109.10546,154.22342 109.10547,153.17654 C 109.10546,152.12186 108.78124,151.29374 108.13281,150.69217 C 107.49218,150.09061 106.60546,149.78983 105.47266,149.78983 M 103.10547,148.78201 C 102.08984,148.53202 101.29687,148.05937 100.72656,147.36404 C 100.16406,146.66874 99.88281,145.82109 99.882812,144.82108 C 99.88281,143.42265 100.3789,142.31718 101.37109,141.50467 C 102.37109,140.69219 103.73828,140.28594 105.47266,140.28592 C 107.21483,140.28594 108.58202,140.69219 109.57422,141.50467 C 110.56639,142.31718 111.06249,143.42265 111.0625,144.82108 C 111.06249,145.82109 110.77733,146.66874 110.20703,147.36404 C 109.64452,148.05937 108.85936,148.53202 107.85156,148.78201 C 108.99218,149.04765 109.87889,149.56718 110.51172,150.34061 C 111.15233,151.11405 111.47264,152.05936 111.47266,153.17654 C 111.47264,154.87186 110.95311,156.17264 109.91406,157.07889 C 108.8828,157.98514 107.40233,158.43826 105.47266,158.43826 C 103.54296,158.43826 102.05859,157.98514 101.01953,157.07889 C 99.988279,156.17264 99.472655,154.87186 99.472656,153.17654 C 99.472655,152.05936 99.792967,151.11405 100.43359,150.34061 C 101.07422,149.56718 101.96484,149.04765 103.10547,148.78201 M 102.23828,145.04373 C 102.23828,145.94999 102.51953,146.65702 103.08203,147.16483 C 103.65234,147.67265 104.44921,147.92655 105.47266,147.92654 C 106.48827,147.92655 107.28124,147.67265 107.85156,147.16483 C 108.42968,146.65702 108.71874,145.94999 108.71875,145.04373 C 108.71874,144.1375 108.42968,143.43047 107.85156,142.92264 C 107.28124,142.41484 106.48827,142.16094 105.47266,142.16092 C 104.44921,142.16094 103.65234,142.41484 103.08203,142.92264 C 102.51953,143.43047 102.23828,144.1375 102.23828,145.04373"
+ id="text2179" />
</svg>
diff --git a/packages/gpe-bootsplash/files/splash-p.svg b/packages/gpe-bootsplash/files/splash-p.svg
index ae93bed70f..dc534d2384 100644
--- a/packages/gpe-bootsplash/files/splash-p.svg
+++ b/packages/gpe-bootsplash/files/splash-p.svg
@@ -6,15 +6,17 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg1"
sodipodi:version="0.32"
- inkscape:version="0.42"
+ inkscape:version="0.45"
width="170.00000pt"
height="226.00000pt"
sodipodi:docname="splash-p.svg"
- sodipodi:docbase="/home/koen/Desktop">
+ sodipodi:docbase="/home/fuchs/Projekte/oe/dev/packages/gpe-bootsplash/files"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
<metadata
id="metadata1148">
<rdf:RDF>
@@ -52,14 +54,14 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="2.0000000"
+ inkscape:zoom="2"
inkscape:cx="123.79126"
- inkscape:cy="136.70730"
- inkscape:window-width="674"
+ inkscape:cy="146.29532"
+ inkscape:window-width="893"
inkscape:window-height="682"
showguides="true"
snaptoguides="true"
- inkscape:window-x="1066"
+ inkscape:window-x="697"
inkscape:window-y="190"
inkscape:current-layer="svg1"
showborder="true"
@@ -178,7 +180,7 @@
sodipodi:nodetypes="cssssss" />
</g>
<path
- style="font-size:24.000000px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
- d="M 70.932617,129.37206 L 70.932617,124.67284 L 67.065430,124.67284 L 67.065430,122.72753 L 73.276367,122.72753 L 73.276367,130.23925 C 72.362289,130.88769 71.354477,131.37988 70.252930,131.71581 C 69.151355,132.04394 67.975575,132.20800 66.725586,132.20800 C 63.991204,132.20800 61.850581,131.41113 60.303711,129.81738 C 58.764646,128.21582 57.995116,125.98926 57.995117,123.13769 C 57.995116,120.27832 58.764646,118.05176 60.303711,116.45800 C 61.850581,114.85645 63.991204,114.05567 66.725586,114.05566 C 67.866200,114.05567 68.948230,114.19630 69.971680,114.47753 C 71.002915,114.75880 71.952133,115.17286 72.819336,115.71972 L 72.819336,118.23925 C 71.944321,117.49708 71.014634,116.93848 70.030273,116.56347 C 69.045886,116.18848 68.010731,116.00098 66.924805,116.00097 C 64.784172,116.00098 63.174798,116.59864 62.096680,117.79394 C 61.026363,118.98926 60.491207,120.77051 60.491211,123.13769 C 60.491207,125.49707 61.026363,127.27441 62.096680,128.46972 C 63.174798,129.66503 64.784172,130.26269 66.924805,130.26269 C 67.760731,130.26269 68.506824,130.19238 69.163086,130.05175 C 69.819323,129.90331 70.409166,129.67675 70.932617,129.37206 M 79.979492,116.31738 L 79.979492,122.89159 L 82.956055,122.89159 C 84.057608,122.89160 84.909170,122.60645 85.510742,122.03613 C 86.112294,121.46582 86.413075,120.65332 86.413086,119.59863 C 86.413075,118.55176 86.112294,117.74317 85.510742,117.17284 C 84.909170,116.60255 84.057608,116.31739 82.956055,116.31738 L 79.979492,116.31738 M 77.612305,114.37206 L 82.956055,114.37206 C 84.916983,114.37208 86.397450,114.81739 87.397461,115.70800 C 88.405260,116.59083 88.909166,117.88770 88.909180,119.59863 C 88.909166,121.32520 88.405260,122.62988 87.397461,123.51269 C 86.397450,124.39551 84.916983,124.83691 82.956055,124.83691 L 79.979492,124.83691 L 79.979492,131.86816 L 77.612305,131.86816 L 77.612305,114.37206 M 92.096680,114.37206 L 103.15918,114.37206 L 103.15918,116.36425 L 94.463867,116.36425 L 94.463867,121.54394 L 102.79590,121.54394 L 102.79590,123.53613 L 94.463867,123.53613 L 94.463867,129.87597 L 103.37012,129.87597 L 103.37012,131.86816 L 92.096680,131.86816 L 92.096680,114.37206 M 117.17480,129.87597 L 125.43652,129.87597 L 125.43652,131.86816 L 114.32715,131.86816 L 114.32715,129.87597 C 115.22558,128.94628 116.44824,127.70019 117.99512,126.13769 C 119.54980,124.56738 120.52636,123.55566 120.92480,123.10253 C 121.68261,122.25098 122.20995,121.53223 122.50684,120.94628 C 122.81151,120.35254 122.96386,119.77051 122.96387,119.20019 C 122.96386,118.27051 122.63573,117.51270 121.97949,116.92675 C 121.33105,116.34083 120.48339,116.04786 119.43652,116.04784 C 118.69433,116.04786 117.90917,116.17677 117.08105,116.43456 C 116.26074,116.69239 115.38183,117.08301 114.44434,117.60644 L 114.44434,115.21581 C 115.39746,114.83302 116.28808,114.54396 117.11621,114.34863 C 117.94433,114.15333 118.70214,114.05567 119.38965,114.05566 C 121.20214,114.05567 122.64745,114.50880 123.72559,115.41503 C 124.80370,116.32130 125.34276,117.53223 125.34277,119.04784 C 125.34276,119.76661 125.20604,120.45020 124.93262,121.09863 C 124.66698,121.73926 124.17870,122.49707 123.46777,123.37206 C 123.27245,123.59863 122.65136,124.25488 121.60449,125.34081 C 120.55761,126.41894 119.08105,127.93066 117.17480,129.87597 M 130.41699,128.89159 L 132.88965,128.89159 L 132.88965,131.86816 L 130.41699,131.86816 L 130.41699,128.89159 M 137.45996,114.37206 L 148.70996,114.37206 L 148.70996,115.37988 L 142.35840,131.86816 L 139.88574,131.86816 L 145.86230,116.36425 L 137.45996,116.36425 L 137.45996,114.37206"
- id="text1326" />
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 66.166016,127.08789 L 66.166016,121.60547 L 61.654297,121.60547 L 61.654297,119.33594 L 68.900391,119.33594 L 68.900391,128.09961 C 67.833966,128.85612 66.658186,129.43034 65.373047,129.82227 C 64.087876,130.20508 62.716133,130.39648 61.257812,130.39648 C 58.0677,130.39648 55.570306,129.4668 53.765625,127.60742 C 51.97005,125.73894 51.072264,123.14128 51.072266,119.81445 C 51.072264,116.47853 51.97005,113.88088 53.765625,112.02148 C 55.570306,110.15301 58.0677,109.21877 61.257812,109.21875 C 62.588529,109.21877 63.850897,109.38283 65.044922,109.71094 C 66.24803,110.03908 67.355451,110.52215 68.367188,111.16016 L 68.367188,114.09961 C 67.346336,113.23374 66.261702,112.58205 65.113281,112.14453 C 63.964829,111.70705 62.757148,111.4883 61.490234,111.48828 C 58.992829,111.4883 57.115227,112.18556 55.857422,113.58008 C 54.608719,114.97462 53.984371,117.05275 53.984375,119.81445 C 53.984371,122.56706 54.608719,124.64063 55.857422,126.03516 C 57.115227,127.42969 58.992829,128.12695 61.490234,128.12695 C 62.465482,128.12695 63.335924,128.04492 64.101562,127.88086 C 64.867172,127.70768 65.555322,127.44336 66.166016,127.08789 M 76.720703,111.85742 L 76.720703,119.52734 L 80.193359,119.52734 C 81.478505,119.52735 82.471994,119.19467 83.173828,118.5293 C 83.875638,117.86394 84.226549,116.91603 84.226562,115.68555 C 84.226549,114.46421 83.875638,113.52085 83.173828,112.85547 C 82.471994,112.19012 81.478505,111.85744 80.193359,111.85742 L 76.720703,111.85742 M 73.958984,109.58789 L 80.193359,109.58789 C 82.481109,109.58791 84.20832,110.10744 85.375,111.14648 C 86.550766,112.17645 87.138656,113.68947 87.138672,115.68555 C 87.138656,117.69988 86.550766,119.22202 85.375,120.25195 C 84.20832,121.28191 82.481109,121.79688 80.193359,121.79688 L 76.720703,121.79688 L 76.720703,130 L 73.958984,130 L 73.958984,109.58789 M 90.857422,109.58789 L 103.76367,109.58789 L 103.76367,111.91211 L 93.619141,111.91211 L 93.619141,117.95508 L 103.33984,117.95508 L 103.33984,120.2793 L 93.619141,120.2793 L 93.619141,127.67578 L 104.00977,127.67578 L 104.00977,130 L 90.857422,130 L 90.857422,109.58789 M 120.11523,127.67578 L 129.75391,127.67578 L 129.75391,130 L 116.79297,130 L 116.79297,127.67578 C 117.84114,126.59115 119.26757,125.13737 121.07227,123.31445 C 122.88606,121.48243 124.02538,120.30209 124.49023,119.77344 C 125.37434,118.77996 125.98957,117.94142 126.33594,117.25781 C 126.69139,116.56512 126.86913,115.88608 126.86914,115.2207 C 126.86913,114.13608 126.48632,113.25197 125.7207,112.56836 C 124.96418,111.88478 123.97525,111.54299 122.75391,111.54297 C 121.88801,111.54299 120.972,111.69338 120.00586,111.99414 C 119.04882,112.29494 118.02343,112.75067 116.92969,113.36133 L 116.92969,110.57227 C 118.04166,110.12567 119.08072,109.78843 120.04688,109.56055 C 121.01301,109.3327 121.89713,109.21877 122.69922,109.21875 C 124.81379,109.21877 126.49999,109.74742 127.75781,110.80469 C 129.01561,111.862 129.64452,113.27476 129.64453,115.04297 C 129.64452,115.88152 129.48501,116.67905 129.16602,117.43555 C 128.85611,118.18295 128.28644,119.06707 127.45703,120.08789 C 127.22915,120.35222 126.50455,121.11785 125.2832,122.38477 C 124.06184,123.64258 122.33919,125.40625 120.11523,127.67578 M 135.56445,126.52734 L 138.44922,126.52734 L 138.44922,130 L 135.56445,130 L 135.56445,126.52734 M 150.38477,120.30664 C 149.07226,120.30665 148.03775,120.65756 147.28125,121.35938 C 146.53385,122.06121 146.16015,123.02735 146.16016,124.25781 C 146.16015,125.48829 146.53385,126.45443 147.28125,127.15625 C 148.03775,127.85808 149.07226,128.20899 150.38477,128.20898 C 151.69726,128.20899 152.73176,127.85808 153.48828,127.15625 C 154.24478,126.44532 154.62303,125.47917 154.62305,124.25781 C 154.62303,123.02735 154.24478,122.06121 153.48828,121.35938 C 152.74087,120.65756 151.70637,120.30665 150.38477,120.30664 M 147.62305,119.13086 C 146.43815,118.8392 145.51302,118.28777 144.84766,117.47656 C 144.1914,116.66538 143.86328,115.67645 143.86328,114.50977 C 143.86328,112.87827 144.44205,111.58856 145.59961,110.64062 C 146.76627,109.69273 148.36132,109.21877 150.38477,109.21875 C 152.41731,109.21877 154.01236,109.69273 155.16992,110.64062 C 156.32746,111.58856 156.90623,112.87827 156.90625,114.50977 C 156.90623,115.67645 156.57355,116.66538 155.9082,117.47656 C 155.25194,118.28777 154.33592,118.8392 153.16016,119.13086 C 154.49087,119.44077 155.52538,120.04688 156.26367,120.94922 C 157.01105,121.85157 157.38475,122.95443 157.38477,124.25781 C 157.38475,126.23568 156.77863,127.75326 155.56641,128.81055 C 154.36327,129.86784 152.63606,130.39648 150.38477,130.39648 C 148.13346,130.39648 146.40169,129.86784 145.18945,128.81055 C 143.98633,127.75326 143.38476,126.23568 143.38477,124.25781 C 143.38476,122.95443 143.75846,121.85157 144.50586,120.94922 C 145.25325,120.04688 146.29231,119.44077 147.62305,119.13086 M 146.61133,114.76953 C 146.61132,115.82684 146.93945,116.65171 147.5957,117.24414 C 148.26106,117.8366 149.19075,118.13282 150.38477,118.13281 C 151.56965,118.13282 152.49478,117.8366 153.16016,117.24414 C 153.83462,116.65171 154.17186,115.82684 154.17188,114.76953 C 154.17186,113.71226 153.83462,112.88739 153.16016,112.29492 C 152.49478,111.70249 151.56965,111.40627 150.38477,111.40625 C 149.19075,111.40627 148.26106,111.70249 147.5957,112.29492 C 146.93945,112.88739 146.61132,113.71226 146.61133,114.76953"
+ id="text2179" />
</svg>
diff --git a/packages/gpe-bootsplash/files/svn-build.patch b/packages/gpe-bootsplash/files/svn-build.patch
new file mode 100644
index 0000000000..83bb069a7c
--- /dev/null
+++ b/packages/gpe-bootsplash/files/svn-build.patch
@@ -0,0 +1,239 @@
+--- gpe-bootsplash.orig/Makefile 2007-04-08 02:00:43.064935587 +0300
++++ gpe-bootsplash/Makefile 2007-04-08 02:01:24.703308411 +0300
+@@ -1,6 +1,6 @@
+ PACKAGE = gpe-bootsplash
+ VERSION = 1.15
+-CVSBUILD = yes
++CVSBUILD = no
+
+ PACKAGE_CFLAGS = `pkg-config --cflags gdk-pixbuf-2.0 libsvg-cairo` `pkg-config --libs gdk-pixbuf-2.0 libsvg-cairo` -DGTK2
+ CFLAGS = -fomit-frame-pointer -Os
+diff -Naur gpe-bootsplash.orig/build/Makefile.dpkg_ipkg gpe-bootsplash/build/Makefile.dpkg_ipkg
+--- gpe-bootsplash.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-bootsplash/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-bootsplash.orig/build/Makefile.translation gpe-bootsplash/build/Makefile.translation
+--- gpe-bootsplash.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-bootsplash/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-bootsplash/gpe-bootsplash_1.15.bb b/packages/gpe-bootsplash/gpe-bootsplash_1.15.bb
index fdb73492db..8c4428cfc2 100644
--- a/packages/gpe-bootsplash/gpe-bootsplash_1.15.bb
+++ b/packages/gpe-bootsplash/gpe-bootsplash_1.15.bb
@@ -4,7 +4,7 @@ DEPENDS = "gtk+ libsvg-cairo"
SECTION = "gpe"
PRIORITY = "optional"
LICENSE = "GPL"
-PR = "r7"
+PR = "r8"
SRC_URI += "file://splash-p.svg \
file://splash-l.svg \
diff --git a/packages/gpe-bootsplash/gpe-bootsplash_svn.bb b/packages/gpe-bootsplash/gpe-bootsplash_svn.bb
new file mode 100644
index 0000000000..56267ce48a
--- /dev/null
+++ b/packages/gpe-bootsplash/gpe-bootsplash_svn.bb
@@ -0,0 +1,36 @@
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libsvg-cairo"
+PR = "r1"
+PV = "1.15+svn-${SRCDATE}"
+
+inherit autotools
+
+SRC_URI += "${GPE_SVN} \
+ file://splash-p.svg \
+ file://splash-l.svg \
+ file://init.patch;patch=1 \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+
+do_install_append() {
+ install -m 0644 ${WORKDIR}/splash-p.svg ${D}${datadir}/gpe/splash-gpe-portrait.svg
+ install -m 0644 ${WORKDIR}/splash-l.svg ${D}${datadir}/gpe/splash-gpe-landscape.svg
+ mv ${D}${sysconfdir}/rcS.d/S00bootsplash ${D}${sysconfdir}/rcS.d/S07bootsplash
+}
+
+FILES_${PN} += "${datadir}/gpe"
+
+pkg_postinst() {
+ update-alternatives --install /usr/share/gpe/splash-l.svg bootsplash-l /usr/share/gpe/splash-gpe-landscape.svg 10
+ update-alternatives --install /usr/share/gpe/splash-p.svg bootsplash-p /usr/share/gpe/splash-gpe-portrait.svg 10
+}
+pkg_postrm() {
+ update-alternatives --remove bootsplash-l /usr/share/gpe/splash-gpe-landscape.svg
+ update-alternatives --remove bootsplash-p /usr/share/gpe/splash-gpe-portrait.svg
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-buttonbox/gpe-buttonbox_cvs.bb b/packages/gpe-buttonbox/gpe-buttonbox_cvs.bb
deleted file mode 100644
index f982c4517f..0000000000
--- a/packages/gpe-buttonbox/gpe-buttonbox_cvs.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-LICENSE = "GPL"
-DESCRIPTION = "Buttonbox for gpe"
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/gpe-buttonbox"
-
-DEPENDS = "libgpewidget libgpelaunch"
-
-S = "${WORKDIR}/${PN}"
-#Remove the dash below when 0.5 changes in PV
-PV = "0.5+cvs-${SRCDATE}"
-PR = "r0"
-
-inherit autotools
-
-FILES_${PN} += "${datadir}/gpe"
-
diff --git a/packages/gpe-buttonbox/gpe-buttonbox_svn.bb b/packages/gpe-buttonbox/gpe-buttonbox_svn.bb
new file mode 100644
index 0000000000..f1a932f788
--- /dev/null
+++ b/packages/gpe-buttonbox/gpe-buttonbox_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Buttonbox for gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget libgpelaunch"
+PV = "0.5+svn-${SRCDATE}"
+PR = "r0"
+
+inherit autotools
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} += "${datadir}/gpe"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-calendar/gpe-calendar_0.90.bb b/packages/gpe-calendar/gpe-calendar_0.90.bb
new file mode 100644
index 0000000000..5b7c321fa9
--- /dev/null
+++ b/packages/gpe-calendar/gpe-calendar_0.90.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "GPE calendar is the calendar application of the GPE PIM suite."
+SECTION = "gpe"
+LICENSE = "GPL"
+
+DEPENDS = "libhandoff libsoup libeventdb libschedule libxsettings libxsettings-client libgpepimc libdisplaymigration libgpevtype"
+RDEPENDS = "gpe-icons"
+
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit autotools gpe
+
+do_configure () {
+ autotools_do_configure
+}
+
+
diff --git a/packages/gpe-calendar/gpe-calendar_0.91.bb b/packages/gpe-calendar/gpe-calendar_0.91.bb
new file mode 100644
index 0000000000..534721b0b8
--- /dev/null
+++ b/packages/gpe-calendar/gpe-calendar_0.91.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "GPE calendar is the calendar application of the GPE PIM suite."
+SECTION = "gpe"
+LICENSE = "GPL"
+
+DEPENDS = "libhandoff libsoup libeventdb libschedule libxsettings libxsettings-client libgpepimc libdisplaymigration libgpevtype libsoundgen"
+RDEPENDS = "gpe-icons"
+
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit autotools gpe
+
+do_configure () {
+ autotools_do_configure
+}
diff --git a/packages/gpe-calendar/gpe-calendar_svn.bb b/packages/gpe-calendar/gpe-calendar_svn.bb
index d6a232b225..3462ebf631 100644
--- a/packages/gpe-calendar/gpe-calendar_svn.bb
+++ b/packages/gpe-calendar/gpe-calendar_svn.bb
@@ -4,13 +4,13 @@ DESCRIPTION = "GPE calendar"
SECTION = "gpe"
LICENSE = "GPL"
-DEPENDS = "libhandoff libsoup libeventdb libschedule libxsettings libxsettings-client libgpepimc libdisplaymigration libgpevtype"
+DEPENDS = "libhandoff libsoup libeventdb libschedule libxsettings libxsettings-client libgpepimc libdisplaymigration libgpevtype libsoundgen"
RDEPENDS = "gpe-icons"
inherit autotools gpe
-PV = "0.72+svn${SRCDATE}"
+PV = "0.91+svn${SRCDATE}"
PR = "r0"
SRC_URI = "${GPE_SVN}"
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/.mtn2git_empty b/packages/gpe-clock/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/.mtn2git_empty
+++ b/packages/gpe-clock/files/.mtn2git_empty
diff --git a/packages/gpe-clock/files/svn-build.patch b/packages/gpe-clock/files/svn-build.patch
new file mode 100644
index 0000000000..69c6d6d07f
--- /dev/null
+++ b/packages/gpe-clock/files/svn-build.patch
@@ -0,0 +1,240 @@
+--- gpe-clock/Makefile.orig 2007-04-07 13:50:17.507459397 +0300
++++ gpe-clock/Makefile 2007-04-07 13:50:25.711926944 +0300
+@@ -2,7 +2,7 @@
+ PREFIX = /usr/local
+ DEBUG = no
+ GTK2 = yes
+-CVSBUILD = yes
++CVSBUILD = no
+ VERSION = 0.25
+
+ LINGUAS = nl pt cs fr de ro ru sr sk sv es
+diff -Naur gpe-clock.orig/build/Makefile.dpkg_ipkg gpe-clock/build/Makefile.dpkg_ipkg
+--- gpe-clock.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-clock/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-clock.orig/build/Makefile.translation gpe-clock/build/Makefile.translation
+--- gpe-clock.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-clock/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-clock/gpe-clock.inc b/packages/gpe-clock/gpe-clock.inc
new file mode 100644
index 0000000000..d4ae3da39c
--- /dev/null
+++ b/packages/gpe-clock/gpe-clock.inc
@@ -0,0 +1,8 @@
+DESCRIPTION = "GPE panel clock"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
+RDEPENDS = "gpe-announce"
+
+inherit gpe
diff --git a/packages/gpe-clock/gpe-clock_0.14.bb b/packages/gpe-clock/gpe-clock_0.14.bb
index 9dcb7a6fcb..8b888f5126 100644
--- a/packages/gpe-clock/gpe-clock_0.14.bb
+++ b/packages/gpe-clock/gpe-clock_0.14.bb
@@ -1,11 +1,5 @@
-inherit gpe
+require gpe-clock.inc
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
PR = "r1"
SRC_URI = "${GPE_MIRROR}/${PN}-${PV}.tar.gz \
diff --git a/packages/gpe-clock/gpe-clock_0.20.bb b/packages/gpe-clock/gpe-clock_0.20.bb
index 121db0c807..3ef23edcb2 100644
--- a/packages/gpe-clock/gpe-clock_0.20.bb
+++ b/packages/gpe-clock/gpe-clock_0.20.bb
@@ -1,10 +1,3 @@
-inherit gpe
-
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
+require gpe-clock.inc
SRC_URI += "file://default-time-24hrs.patch;patch=1"
diff --git a/packages/gpe-clock/gpe-clock_0.21.bb b/packages/gpe-clock/gpe-clock_0.21.bb
index 51b001208b..de509fda40 100644
--- a/packages/gpe-clock/gpe-clock_0.21.bb
+++ b/packages/gpe-clock/gpe-clock_0.21.bb
@@ -1,9 +1 @@
-inherit gpe
-
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
-
+require gpe-clock.inc
diff --git a/packages/gpe-clock/gpe-clock_0.23.bb b/packages/gpe-clock/gpe-clock_0.23.bb
index 51b001208b..de509fda40 100644
--- a/packages/gpe-clock/gpe-clock_0.23.bb
+++ b/packages/gpe-clock/gpe-clock_0.23.bb
@@ -1,9 +1 @@
-inherit gpe
-
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
-
+require gpe-clock.inc
diff --git a/packages/gpe-clock/gpe-clock_0.24.bb b/packages/gpe-clock/gpe-clock_0.24.bb
index 51b001208b..de509fda40 100644
--- a/packages/gpe-clock/gpe-clock_0.24.bb
+++ b/packages/gpe-clock/gpe-clock_0.24.bb
@@ -1,9 +1 @@
-inherit gpe
-
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
-
+require gpe-clock.inc
diff --git a/packages/gpe-clock/gpe-clock_0.25.bb b/packages/gpe-clock/gpe-clock_0.25.bb
index 51b001208b..de509fda40 100644
--- a/packages/gpe-clock/gpe-clock_0.25.bb
+++ b/packages/gpe-clock/gpe-clock_0.25.bb
@@ -1,9 +1 @@
-inherit gpe
-
-DESCRIPTION = "GPE panel clock"
-DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
-RDEPENDS = "gpe-announce atd"
-SECTION = "gpe"
-PRIORITY = "optional"
-LICENSE = "GPL"
-
+require gpe-clock.inc
diff --git a/packages/gpe-clock/gpe-clock_svn.bb b/packages/gpe-clock/gpe-clock_svn.bb
new file mode 100644
index 0000000000..a8bbb89e67
--- /dev/null
+++ b/packages/gpe-clock/gpe-clock_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "GPE panel clock"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libschedule libgpewidget gpe-announce atd libgpelaunch"
+RDEPENDS = "gpe-announce"
+
+inherit autotools
+
+SRC_URI = "${GPE_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/.mtn2git_empty b/packages/gpe-conf/gpe-conf-0.2.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/.mtn2git_empty
+++ b/packages/gpe-conf/gpe-conf-0.2.4/.mtn2git_empty
diff --git a/packages/gpe-conf/gpe-conf-0.2.4/scriptname.patch b/packages/gpe-conf/gpe-conf-0.2.4/scriptname.patch
new file mode 100644
index 0000000000..e66d509c9f
--- /dev/null
+++ b/packages/gpe-conf/gpe-conf-0.2.4/scriptname.patch
@@ -0,0 +1,13 @@
+Index: Makefile.am
+===================================================================
+--- Makefile.am (revision 9037)
++++ Makefile.am (working copy)
+@@ -178,7 +178,7 @@
+
+ install-data-hook:
+ chmod u+s $(DESTDIR)$(bindir)/gpe-conf
+- cd $(DESTDIR)/$(xscriptsdir) && mv soundsettings.sh S30soundsettings
++ cd $(DESTDIR)/$(xscriptsdir) && mv soundsettings.sh 30soundsettings
+
+ deb: dist
+ -mkdir $(top_builddir)/debian-build
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/.mtn2git_empty b/packages/gpe-conf/gpe-conf-0.2.5/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/.mtn2git_empty
+++ b/packages/gpe-conf/gpe-conf-0.2.5/.mtn2git_empty
diff --git a/packages/gpe-conf/gpe-conf-0.2.5/backlight-bugfix.patch b/packages/gpe-conf/gpe-conf-0.2.5/backlight-bugfix.patch
new file mode 100644
index 0000000000..7a953c25ec
--- /dev/null
+++ b/packages/gpe-conf/gpe-conf-0.2.5/backlight-bugfix.patch
@@ -0,0 +1,11 @@
+--- gpe-conf-0.2.5/modules/screen/brightness.c~brightness
++++ gpe-conf-0.2.5/modules/screen/brightness.c
+@@ -216,7 +216,7 @@
+ FILE *f_power;
+ gint value = SYS_STATE_ON;
+
+- f_power = fopen(SYS_BRIGHTNESS, "r");
++ f_power = fopen(SYS_POWER, "r");
+ if (f_power != NULL)
+ {
+ fscanf(f_power,"%i", &value);
diff --git a/packages/gpe-conf/gpe-conf-0.2.5/wireless.patch b/packages/gpe-conf/gpe-conf-0.2.5/wireless.patch
new file mode 100644
index 0000000000..4e52f8b092
--- /dev/null
+++ b/packages/gpe-conf/gpe-conf-0.2.5/wireless.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gpe-conf-0.2.5/modules/sysinfo.c~wireless
++++ gpe-conf-0.2.5/modules/sysinfo.c
+@@ -28,6 +28,8 @@
+ #include <sys/utsname.h>
+
+ #include <sys/socket.h>
++#include <linux/types.h>
++#include <linux/if.h>
+ #include <linux/wireless.h>
+ #include <sys/ioctl.h>
+
diff --git a/packages/gpe-conf/gpe-conf_0.2.3.bb b/packages/gpe-conf/gpe-conf_0.2.3.bb
index 3f8ae1e9d5..0cb645c5d4 100644
--- a/packages/gpe-conf/gpe-conf_0.2.3.bb
+++ b/packages/gpe-conf/gpe-conf_0.2.3.bb
@@ -4,10 +4,10 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client"
-RDEPENDS_${PN} = "xst xset ipaq-sleep ntpdate gpe-login gpe-icons timezones"
+RDEPENDS_${PN} = "xst xset ipaq-sleep ntpdate gpe-login gpe-icons tzdata"
RDEPENDS_gpe-conf-panel = "gpe-conf"
-PR = "r0"
+PR = "r1"
GPE_TARBALL_SUFFIX = "bz2"
diff --git a/packages/gpe-conf/gpe-conf_0.2.4.bb b/packages/gpe-conf/gpe-conf_0.2.4.bb
index 4a45b599a1..15a5bce0f3 100644
--- a/packages/gpe-conf/gpe-conf_0.2.4.bb
+++ b/packages/gpe-conf/gpe-conf_0.2.4.bb
@@ -3,16 +3,18 @@ SECTION = "gpe"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client"
-RDEPENDS_${PN} = "xst xset ntpdate gpe-login gpe-icons timezones"
+DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client libxrandr"
+RDEPENDS_${PN} = "xst xset ntpdate gpe-login gpe-icons tzdata xrandr"
RDEPENDS_gpe-conf-panel = "gpe-conf"
-PR = "r1"
+PR = "r2"
GPE_TARBALL_SUFFIX = "bz2"
inherit gpe autotools pkgconfig
+SRC_URI += "file://scriptname.patch;patch=1;pnum=0"
+
PACKAGES += "gpe-conf-panel"
FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \
diff --git a/packages/gpe-conf/gpe-conf_0.2.5.bb b/packages/gpe-conf/gpe-conf_0.2.5.bb
new file mode 100644
index 0000000000..8cb2d61f3d
--- /dev/null
+++ b/packages/gpe-conf/gpe-conf_0.2.5.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Configuration applets for GPE"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client libxrandr"
+RDEPENDS_${PN} = "xst xset ntpdate gpe-login gpe-icons tzdata xrandr"
+RDEPENDS_gpe-conf-panel = "gpe-conf"
+
+RPROVIDES_${PN} += " bl"
+RCONFLICTS_${PN} = "bl"
+
+PR = "r4"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools pkgconfig
+
+PACKAGES += "gpe-conf-panel"
+
+FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \
+ ${datadir}/applications/gpe-conf-* ${datadir}/gpe/pixmaps \
+ ${datadir}/gpe-conf"
+FILES_gpe-conf-panel = "${datadir}/applications/gpe-conf.desktop"
+
+SRC_URI += "file://backlight-bugfix.patch;patch=1 \
+ file://wireless.patch;patch=1"
diff --git a/packages/gpe-conf/gpe-conf_0.2.6.bb b/packages/gpe-conf/gpe-conf_0.2.6.bb
new file mode 100644
index 0000000000..1256ce5291
--- /dev/null
+++ b/packages/gpe-conf/gpe-conf_0.2.6.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Configuration applets for GPE"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+DEPENDS = "gtk+ esound audiofile libgpewidget libxsettings libxsettings-client libxrandr"
+RDEPENDS_${PN} = "xst xset ntpdate gpe-login gpe-icons tzdata xrandr"
+RDEPENDS_gpe-conf-panel = "gpe-conf"
+
+RPROVIDES_${PN} += " bl"
+RCONFLICTS_${PN} = "bl"
+
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools pkgconfig
+
+PACKAGES += "gpe-conf-panel"
+
+FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \
+ ${datadir}/applications/gpe-conf-* ${datadir}/gpe/pixmaps \
+ ${datadir}/gpe-conf"
+FILES_gpe-conf-panel = "${datadir}/applications/gpe-conf.desktop"
+
diff --git a/packages/gpe-conf/gpe-conf_svn.bb b/packages/gpe-conf/gpe-conf_svn.bb
index f3782ef0ac..266053073a 100644
--- a/packages/gpe-conf/gpe-conf_svn.bb
+++ b/packages/gpe-conf/gpe-conf_svn.bb
@@ -6,13 +6,13 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "gtk+ libgpewidget libxsettings libxsettings-client pcmcia-cs xst xset ntp gpe-login gpe-icons"
-RDEPENDS_${PN} = "xst xset ntpdate gpe-login gpe-icons"
+RDEPENDS_${PN} = "xst tzdata xset ntpdate gpe-login gpe-icons"
RDEPENDS_gpe-conf-panel = "gpe-conf"
inherit autotools gpe
PV = "0.2.5+svn${SRCDATE}"
-PR = "r0"
+PR = "r1"
SRC_URI = "${GPE_SVN}"
S = "${WORKDIR}/${PN}"
diff --git a/packages/gpe-contacts/gpe-contacts_0.47.bb b/packages/gpe-contacts/gpe-contacts_0.47.bb
new file mode 100644
index 0000000000..dadb085f06
--- /dev/null
+++ b/packages/gpe-contacts/gpe-contacts_0.47.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "GPE contacts manager"
+LICENSE = "GPL"
+SECTION = "gpe"
+
+DEPENDS = "libcontactsdb libgpewidget libgpepimc libdisplaymigration libgpevtype dbus-glib"
+RDEPENDS = "gpe-icons"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools
+
+FILES_${PN} += " ${datadir}/gpe ${datadir}/gpe-contacts"
+
diff --git a/packages/gpe-contacts/gpe-contacts_cvs.bb b/packages/gpe-contacts/gpe-contacts_cvs.bb
deleted file mode 100644
index d73b31ea3b..0000000000
--- a/packages/gpe-contacts/gpe-contacts_cvs.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-LICENSE = "GPL"
-DEFAULT_PREFERENCE = "-1"
-
-S = "${WORKDIR}/${PN}"
-PV = "0.43+cvs${SRCDATE}"
-PR = "r0"
-
-inherit autotools gpe
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/${PN}"
-
-
-DEPENDS = "libcontactsdb libgpewidget libgpepimc libdisplaymigration libgpevtype dbus"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
-DESCRIPTION = "GPE contacts manager"
-
-
-FILES_${PN} += " ${datadir}/gpe ${datadir}/gpe-contacts"
diff --git a/packages/gpe-contacts/gpe-contacts_svn.bb b/packages/gpe-contacts/gpe-contacts_svn.bb
new file mode 100644
index 0000000000..b5a22ebad2
--- /dev/null
+++ b/packages/gpe-contacts/gpe-contacts_svn.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "GPE contacts manager"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libcontactsdb libgpewidget libgpepimc libdisplaymigration libgpevtype dbus"
+RDEPENDS = "gpe-icons"
+PV = "0.43+svn${SRCDATE}"
+PR = "r0"
+
+inherit autotools gpe
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+
+FILES_${PN} += " ${datadir}/gpe ${datadir}/gpe-contacts"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/gpe-dm/files/Xserver-cxk.patch b/packages/gpe-dm/files/Xserver-cxk.patch
deleted file mode 100644
index 89187a0e31..0000000000
--- a/packages/gpe-dm/files/Xserver-cxk.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gpe-dm-0.47/Xserver~ 2005-07-29 11:58:59.000000000 -0700
-+++ gpe-dm-0.47/Xserver 2005-08-01 11:20:42.000000000 -0700
-@@ -62,6 +62,8 @@
- ;;
- "SHARP Shepherd" | "SHARP Husky" | "SHARP Corgi")
- ARGS="$ARGS -rgba rgb" ;;
-+ "SHARP Spitz" | "SHARP Akita" | "SHARP Borzoi")
-+ ARGS="$ARGS -rgba rgb -screen 640x480@270" ;;
- "Simpad")
- ARGS="$ARGS -rgba rgb" ;;
- "Generic OMAP1510/1610/1710")
diff --git a/packages/gpe-dm/files/collie-suspend-hack.patch b/packages/gpe-dm/files/collie-suspend-hack.patch
deleted file mode 100644
index 94fc287f4e..0000000000
--- a/packages/gpe-dm/files/collie-suspend-hack.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -urNd ../gpe-dm-0.44-r1/gpe-dm-0.44/Xserver gpe-dm-0.44/Xserver
---- ../gpe-dm-0.44-r1/gpe-dm-0.44/Xserver 2005-02-20 17:39:31 +00:00
-+++ gpe-dm-0.44/Xserver 2005-04-01 21:47:12 +01:00
-@@ -45,8 +45,14 @@
- "HP iPAQ H5400" | "HP iPAQ H2200")
- ARGS="$ARGS -rgba rgb" ;;
- # both 'Sharp-Collie' and just 'Collie' have been reported
-- *Collie | *Poodle)
-+ *Poodle)
- ARGS="$ARGS -screen 320x240@270 -rgba vrgb" ;;
-+ *Collie)
-+ ARGS="$ARGS -screen 320x240@270 -rgba vrgb"
-+ # Horrible hack required to enable resuming after suspend
-+ rm -f /dev/apm_bios
-+ killall -9 apmd
-+ ;;
- "SHARP Shepherd" | "SHARP Husky" | "SHARP Corgi")
- ARGS="$ARGS -rgba rgb" ;;
- "Simpad")
diff --git a/packages/gpe-dm/files/mnci.patch b/packages/gpe-dm/files/mnci.patch
deleted file mode 100644
index 8cd7358f36..0000000000
--- a/packages/gpe-dm/files/mnci.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- gpe-dm-0.44/gpe-dm.init~ramses
-+++ gpe-dm-0.44/gpe-dm.init
-@@ -19,7 +19,7 @@
- stop)
- echo "Stopping GPE display manager: gpe-dm"
- killproc /usr/bin/gpe-dm
-- dd if=/dev/zero of=/dev/fb0 2>/dev/null
-+ dd if=/dev/zero of=/dev/fb0 2>/dev/null || dd if=/dev/zero of=/dev/fb/0 2>/dev/null
- ;;
-
- *)
---- gpe-dm-0.44/Xserver~ramses
-+++ gpe-dm-0.44/Xserver
-@@ -44,6 +44,8 @@
- ARGS="$ARGS -screen 320x240@270 -rgba vbgr" ;;
- "HP iPAQ H5400" | "HP iPAQ H2200")
- ARGS="$ARGS -rgba rgb" ;;
-+ "Ramses")
-+ ARGS="$ARGS -screen 320x240@90 -rgba vrgb vt2" ;;
- # both 'Sharp-Collie' and just 'Collie' have been reported
- *Poodle)
- ARGS="$ARGS -screen 320x240@270 -rgba vrgb" ;;
diff --git a/packages/gpe-dm/files/remove-X-scripts.patch b/packages/gpe-dm/files/remove-X-scripts.patch
deleted file mode 100644
index b3c85be788..0000000000
--- a/packages/gpe-dm/files/remove-X-scripts.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -Nur gpe-dm-0.47~/Makefile gpe-dm-0.47/Makefile
---- gpe-dm-0.47~/Makefile 2005-08-19 18:27:54.000000000 -0700
-+++ gpe-dm-0.47/Makefile 2005-08-19 18:28:37.000000000 -0700
-@@ -31,10 +31,6 @@
- install -d $(DESTDIR)/etc/init.d
- install -d $(DESTDIR)/etc/rc2.d
- install gpe-dm.init $(DESTDIR)/etc/init.d/gpe-dm
-- install -d $(DESTDIR)/etc/X11
-- install Xsession $(DESTDIR)/etc/X11/Xsession
-- install Xinit $(DESTDIR)/etc/X11/Xinit
-- install Xserver $(DESTDIR)/etc/X11/Xserver
-
- clean: clean-po
- rm -f gpe-dm gpe-dm.o
diff --git a/packages/gpe-dm/files/source-xsession-scripts.patch b/packages/gpe-dm/files/source-xsession-scripts.patch
deleted file mode 100644
index c92f230618..0000000000
--- a/packages/gpe-dm/files/source-xsession-scripts.patch
+++ /dev/null
@@ -1,27 +0,0 @@
---- gpe-dm-0.43/Xsession.old 2005-02-23 11:39:23.000000000 +0000
-+++ gpe-dm-0.43/Xsession 2005-02-23 12:21:28.011314968 +0000
-@@ -25,4 +25,23 @@
- SYSSESSIONDIR=/etc/X11/Xsession.d
- fi
-
--exec run-parts $SYSSESSIONDIR
-+# Use run-parts to source every file in the session directory; we source
-+# instead of executing so that the variables and functions defined above
-+# are available to the scripts, and so that they can pass variables to each
-+# other.
-+
-+# Can't use run-parts like this, busybox doesn't support it. Use ls instead
-+#SESSIONFILES=$(run-parts --list $SYSSESSIONDIR)
-+
-+SESSIONFILES=`ls -X $SYSSESSIONDIR`
-+if [ -n "$SESSIONFILES" ]; then
-+ for SESSIONFILE in $SESSIONFILES; do
-+ # Test if script is executable first before sourcing it
-+ if [ -x "$SYSSESSIONDIR/$SESSIONFILE" ]; then
-+ . $SYSSESSIONDIR/$SESSIONFILE
-+ fi
-+ done
-+fi
-+
-+exit 0
-+
diff --git a/packages/gpe-dm/gpe-dm_0.50.bb b/packages/gpe-dm/gpe-dm_0.50.bb
new file mode 100644
index 0000000000..d9ac68c257
--- /dev/null
+++ b/packages/gpe-dm/gpe-dm_0.50.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "GPE Display Manager"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 xserver-common"
+RDEPENDS_${PN} += "procps xserver-common"
+
+GPE_TARBALL_SUFFIX ?= "bz2"
+
+inherit gpe autotools update-rc.d
+
+INITSCRIPT_NAME = "gpe-dm"
+INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
diff --git a/packages/gpe-dm/gpe-dm_0.51.bb b/packages/gpe-dm/gpe-dm_0.51.bb
new file mode 100644
index 0000000000..6cf1f002a0
--- /dev/null
+++ b/packages/gpe-dm/gpe-dm_0.51.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "GPE Display Manager"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 xserver-common"
+RDEPENDS_${PN} += " xserver-common"
+
+GPE_TARBALL_SUFFIX ?= "bz2"
+
+inherit gpe autotools update-rc.d
+
+INITSCRIPT_NAME = "gpe-dm"
+INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
diff --git a/packages/gpe-dm/gpe-dm_svn.bb b/packages/gpe-dm/gpe-dm_svn.bb
new file mode 100644
index 0000000000..1b1409f29a
--- /dev/null
+++ b/packages/gpe-dm/gpe-dm_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "GPE Display Manager"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 xserver-common"
+RDEPENDS_${PN} += "procps xserver-common"
+PV = "gpe-dm-0.50+svn-${SRCDATE}"
+
+inherit gpe autotools update-rc.d
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+INITSCRIPT_NAME = "gpe-dm"
+INITSCRIPT_PARAMS = "start 99 5 2 . stop 20 0 1 6 ."
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-edit/gpe-edit_0.40.bb b/packages/gpe-edit/gpe-edit_0.40.bb
new file mode 100644
index 0000000000..a3e9a8b71a
--- /dev/null
+++ b/packages/gpe-edit/gpe-edit_0.40.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Editor for the GPE Palmtop Environment"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget"
+
+GPE_TARBALL_SUFFIX ?= "bz2"
+
+inherit gpe autotools
diff --git a/packages/gpe-edit/gpe-edit_svn.bb b/packages/gpe-edit/gpe-edit_svn.bb
new file mode 100644
index 0000000000..780294bd13
--- /dev/null
+++ b/packages/gpe-edit/gpe-edit_svn.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Editor for the GPE Palmtop Environment"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget"
+
+inherit gpe autotools
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-expenses/gpe-expenses_0.0.6.bb b/packages/gpe-expenses/gpe-expenses_0.0.6.bb
index 90b189149c..29b09c7bab 100644
--- a/packages/gpe-expenses/gpe-expenses_0.0.6.bb
+++ b/packages/gpe-expenses/gpe-expenses_0.0.6.bb
@@ -1,7 +1,8 @@
-DESCRIPTION = "Equivalent for Expenses on the Palm. Supports payment types, categories, expense types (mileage, meals, parking, etc.), notes, currency selection etc."
+DESCRIPTION = "Simple expense record keeper for GPE. Equivalent for Expenses on the Palm."
+AUTHOR = "Neil Williams"
+HOMEPAGE = "http://gpe-expenses.sf.net"
LICENSE = "GPL"
-
-DEPENDS = "qof libgpewidget"
+DEPENDS = "qof libgpewidget popt-native libgpepimc"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \
"
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty b/packages/gpe-filemanager/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/.mtn2git_empty
+++ b/packages/gpe-filemanager/files/.mtn2git_empty
diff --git a/packages/gpe-filemanager/files/svn-build.patch b/packages/gpe-filemanager/files/svn-build.patch
new file mode 100644
index 0000000000..0e226459cf
--- /dev/null
+++ b/packages/gpe-filemanager/files/svn-build.patch
@@ -0,0 +1,240 @@
+--- gpe-filemanager.orig/Makefile 2007-04-03 15:33:07.466983913 +0300
++++ gpe-filemanager/Makefile 2007-04-03 15:33:28.216166345 +0300
+@@ -1,7 +1,7 @@
+ PREFIX = /usr/local
+ PACKAGE = gpe-filemanager
+ DEBUG = no
+-CVSBUILD = yes
++CVSBUILD = no
+ VERSION = 0.25
+ MIME_PIXMAPS = `cd pixmaps/document-icons && ls *.png`
+
+diff -Naur gpe-filemanager.orig/build/Makefile.dpkg_ipkg gpe-filemanager/build/Makefile.dpkg_ipkg
+--- gpe-filemanager.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-filemanager/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-filemanager.orig/build/Makefile.translation gpe-filemanager/build/Makefile.translation
+--- gpe-filemanager.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-filemanager/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-filemanager/gpe-filemanager_0.30.bb b/packages/gpe-filemanager/gpe-filemanager_0.30.bb
new file mode 100644
index 0000000000..84bf2d3d2f
--- /dev/null
+++ b/packages/gpe-filemanager/gpe-filemanager_0.30.bb
@@ -0,0 +1,13 @@
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit autotools gpe
+
+PR = "r0"
+LICENSE = "GPL"
+DESCRIPTION = "GPE file manager"
+DEPENDS = "libgpewidget gnome-vfs dbus-glib"
+SECTION = "gpe"
+RDEPENDS = "gpe-icons"
+RRECOMMENDS = "gnome-vfs-plugin-file gnome-vfs-plugin-smb gnome-vfs-plugin-ftp gnome-vfs-plugin-computer gnome-vfs-plugin-network gnome-vfs-plugin-sftp gnome-vfs-plugin-http"
+
+FILES_${PN} += " ${datadir}/gpe"
diff --git a/packages/gpe-filemanager/gpe-filemanager_svn.bb b/packages/gpe-filemanager/gpe-filemanager_svn.bb
new file mode 100644
index 0000000000..2c2d82d253
--- /dev/null
+++ b/packages/gpe-filemanager/gpe-filemanager_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "GPE file manager"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget gnome-vfs dbus-glib"
+RDEPENDS = "gpe-icons"
+RRECOMMENDS = "gnome-vfs-plugin-file gnome-vfs-plugin-smb gnome-vfs-plugin-ftp gnome-vfs-plugin-computer gnome-vfs-plugin-network gnome-vfs-plugin-sftp gnome-vfs-plugin-http"
+PR = "r1"
+PV = "0.25+svn-${SRCDATE}"
+
+inherit autotools
+
+SRC_URI = "${GPE_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} += " ${datadir}/gpe"
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-gallery/files/svn-build.patch b/packages/gpe-gallery/files/svn-build.patch
new file mode 100644
index 0000000000..5b6edf4893
--- /dev/null
+++ b/packages/gpe-gallery/files/svn-build.patch
@@ -0,0 +1,240 @@
+--- gpe-gallery.orig/Makefile 2007-04-07 13:34:54.581405005 +0300
++++ gpe-gallery/Makefile 2007-04-07 13:35:03.589918369 +0300
+@@ -1,7 +1,7 @@
+ PREFIX = /usr/local
+ PACKAGE = gpe-gallery
+ DEBUG = no
+-CVSBUILD = yes
++CVSBUILD = no
+ VERSION = 0.97
+
+ MEMBERS = main image_tools
+diff -Naur gpe-gallery.orig/build/Makefile.dpkg_ipkg gpe-gallery/build/Makefile.dpkg_ipkg
+--- gpe-gallery.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-gallery/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-gallery.orig/build/Makefile.translation gpe-gallery/build/Makefile.translation
+--- gpe-gallery.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-gallery/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-gallery/gpe-gallery_svn.bb b/packages/gpe-gallery/gpe-gallery_svn.bb
new file mode 100644
index 0000000000..863dfe5f93
--- /dev/null
+++ b/packages/gpe-gallery/gpe-gallery_svn.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "GPE image viewer application"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget"
+PV = "0.97+svn-${SRCDATE}"
+
+inherit autotools
+export CVSBUILD = "no"
+
+SRC_URI += "${GPE_EXTRA_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} += "${datadir}/gpe/pixmaps"
+FILES_${PN} += "${datadir}/application-registry"
+
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-login/files/brightness-adjust-keyluanchrc.patch b/packages/gpe-login/files/brightness-adjust-keyluanchrc.patch
new file mode 100644
index 0000000000..cfc73f4d56
--- /dev/null
+++ b/packages/gpe-login/files/brightness-adjust-keyluanchrc.patch
@@ -0,0 +1,10 @@
+--- gpe-login-0.88/gpe-login.keylaunchrc.orig 2007-06-05 00:50:27.000000000 +0000
++++ gpe-login-0.88/gpe-login.keylaunchrc 2007-06-05 00:52:03.000000000 +0000
+@@ -7,3 +7,7 @@
+ key=...*Right:-:~chvt 3
+ key=...*Escape:-:~/etc/init.d/gpe-dm stop
+
++# Brightness control
++key=...*3:-:~display-brightness.sh down
++key=...*4:-:~display-brightness.sh up
++
diff --git a/packages/gpe-login/files/busybox-bad-perms.patch b/packages/gpe-login/files/busybox-bad-perms.patch
deleted file mode 100644
index a422089167..0000000000
--- a/packages/gpe-login/files/busybox-bad-perms.patch
+++ /dev/null
@@ -1,39 +0,0 @@
---- gpe-login.pre-session.orig 2005-09-08 00:18:21.000000000 +0200
-+++ gpe-login-0.82/X11/gpe-login.pre-session 2005-09-08 00:18:13.000000000 +0200
-@@ -4,26 +4,28 @@
-
- # Sound devices on various devices #
-
-+if [ -e /dev/dsp ]; then
-+chown $USER /dev/dsp
-+fi
-+
-+if [ -e /dev/mixer ]; then
-+chown $USER /dev/mixer
-+fi
-+
- if [ -e /dev/sound/dsp ]; then
- chown $USER /dev/sound/dsp
-+chmod u+rw /dev/sound/dsp
- fi
-
- if [ -e /dev/sound/mixer ]; then
- chown $USER /dev/sound/mixer
-+chmod u+rw /dev/sound/mixer
- fi
-
- if [ -e /dev/misc/buzzer ]; then
- chown $USER /dev/misc/buzzer
- fi
-
--if [ -e /dev/dsp ]; then
--chown $USER /dev/dsp
--fi
--
--if [ -e /dev/mixer ]; then
--chown $USER /dev/mixer
--fi
--
- # touchscreen devices #
-
- if [ -e /dev/touchscreen/0raw ]; then
diff --git a/packages/gpe-login/files/highdpifontfix.patch b/packages/gpe-login/files/highdpifontfix.patch
deleted file mode 100644
index cc5a42dcfc..0000000000
--- a/packages/gpe-login/files/highdpifontfix.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- /tmp/gpe-login.gtkrc 2005-11-08 17:15:50.363302568 +0100
-+++ gpe-login-0.83/X11/gpe-login.gtkrc 2005-11-08 17:16:22.659392816 +0100
-@@ -1,9 +1,2 @@
--gtk-font-name = "Sans 8"
--include "/usr/share/themes/Angelistic/gtk-2.0/gtkrc"
--
--style "default"
--{
-- bg[NORMAL] = "#90d8ff"
--}
--
--widget "*" style "default"
-+gtk-font-name = "Sans 5"
-+include "/usr/share/themes/Industrial/gtk-2.0/gtkrc"
diff --git a/packages/gpe-login/files/pre-session.patch b/packages/gpe-login/files/pre-session.patch
deleted file mode 100644
index ac1629f08a..0000000000
--- a/packages/gpe-login/files/pre-session.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- /tmp/gpe-login.pre-session 2005-02-17 10:49:01.726436296 +0100
-+++ gpe-login-0.75/X11/gpe-login.pre-session 2005-02-17 10:48:42.297389960 +0100
-@@ -4,10 +4,22 @@
-
- if [ -e /dev/sound/dsp ]; then
- chown $USER /dev/sound/dsp
-+chmod u+rw /dev/sound/dsp
-+fi
-+
-+if [ -e /dev/dsp ]; then
-+chown $USER /dev/dsp
-+chmod u+rw /dev/dsp
- fi
-
- if [ -e /dev/sound/mixer ]; then
- chown $USER /dev/sound/mixer
-+chmod u+rw /dev/sound/mixer
-+fi
-+
-+if [ -e /dev/mixer ]; then
-+chown $USER /dev/mixer
-+chmod u+rw /dev/mixer
- fi
-
- if [ -e /dev/touchscreen/0raw ]; then
-@@ -18,13 +30,26 @@
- chown $USER /dev/touchscreen/0
- fi
-
-+if [ -e /dev/collie-fl ]; then
-+chown $USER /dev/sharp_fl
-+fi
-+
- if [ -e /dev/misc/buzzer ]; then
- chown $USER /dev/misc/buzzer
- fi
-
--mkdir -p /mnt/ramfs/home/$USER
--chown $USER /mnt/ramfs/home/$USER
-+# check for ramdisk location
-+if [ -d /mnt/ramfs ]; then
-+# old location as used in familiar <= 0.7.2
-+RAMDISK="/mnt/ramfs"
-+else
-+# default to new style location
-+RAMDISK="/mnt/ram"
-+fi
-+
-+mkdir -p $RAMDISK/home/$USER
-+chown $USER $RAMDISK/home/$USER
-
- # this location MUST be consistent with HOME_VOLATILE in /etc/X11/Xsession
--ln -s /mnt/ramfs/home/$USER /home/$USER/ramdisk
--ln -s /home/$USER/ramdisk/.xsession-errors /home/$USER/.xsession-errors
-+ln -sf $RAMDISK/home/$USER /home/$USER/ramdisk
-+ln -sf /home/$USER/ramdisk/.xsession-errors /home/$USER/.xsession-errors
diff --git a/packages/gpe-login/files/use-xtscal.patch b/packages/gpe-login/files/use-xtscal.patch
new file mode 100644
index 0000000000..dca1163505
--- /dev/null
+++ b/packages/gpe-login/files/use-xtscal.patch
@@ -0,0 +1,11 @@
+--- /tmp/gpe-login.c 2007-04-01 11:40:29.000000000 +0200
++++ gpe-login-0.88/gpe-login.c 2007-04-01 11:40:58.205251000 +0200
+@@ -59,7 +59,7 @@
+ #define GPE_OWNERINFO_DONTSHOW_FILE "/etc/gpe/gpe-ownerinfo.dontshow"
+ /* Number of milliseconds to hold the stylus down before recalibration is called */
+ #define RECALIBRATION_TIMEOUT 5000
+-#define XTSCAL_PATH "/usr/bin/gpe-xcalibrate.sh"
++#define XTSCAL_PATH "/usr/bin/xtscal"
+ #ifndef DEBUG
+ #define DEBUG 0
+ #endif
diff --git a/packages/gpe-login/files/user-own-collie-devs.patch b/packages/gpe-login/files/user-own-collie-devs.patch
deleted file mode 100644
index 3a0ce9b7b8..0000000000
--- a/packages/gpe-login/files/user-own-collie-devs.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -urNd ../gpe-login-0.76-r0/gpe-login-0.76/X11/gpe-login.pre-session gpe-login-0.76/X11/gpe-login.pre-session
---- ../gpe-login-0.76-r0/gpe-login-0.76/X11/gpe-login.pre-session 2005-04-01 21:58:46 +01:00
-+++ gpe-login-0.76/X11/gpe-login.pre-session 2005-04-01 22:04:04 +01:00
-@@ -30,13 +30,23 @@
- chown $USER /dev/touchscreen/0
- fi
-
--if [ -e /dev/collie-fl ]; then
-+if [ -e /dev/misc/buzzer ]; then
-+chown $USER /dev/misc/buzzer
-+fi
-+
-+# The following added for collie
-+if [ -e /dev/sharp_fl ]; then
- chown $USER /dev/sharp_fl
- fi
-
--if [ -e /dev/misc/buzzer ]; then
--chown $USER /dev/misc/buzzer
-+if [ -e /dev/fb0 ]; then
-+chown $USER /dev/fb0
-+fi
-+
-+if [ -e /dev/tty ]; then
-+chown $USER /dev/tty*
- fi
-+# collie bits finished
-
- # check for ramdisk location
- if [ -d /mnt/ramfs ]; then
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty b/packages/gpe-login/gpe-login-0.88/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/.mtn2git_empty
+++ b/packages/gpe-login/gpe-login-0.88/.mtn2git_empty
diff --git a/packages/gpe-login/gpe-login-0.88/chvt-keylaunch.patch b/packages/gpe-login/gpe-login-0.88/chvt-keylaunch.patch
new file mode 100644
index 0000000000..798c059ccc
--- /dev/null
+++ b/packages/gpe-login/gpe-login-0.88/chvt-keylaunch.patch
@@ -0,0 +1,12 @@
+--- /tmp/gpe-login.keylaunchrc 2006-05-29 23:46:42.806081576 +0200
++++ gpe-login-0.87/gpe-login.keylaunchrc 2006-05-29 23:48:18.476537456 +0200
+@@ -1,3 +1,9 @@
+ key=????XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh
+ key=????XF86PowerDown:-:/usr/bin/apm --suspend
+ key=????Held XF86PowerDown:-:bl toggle
++
++# VT changing
++key=...*Left:-:~chvt 1
++key=...*Right:-:~chvt 3
++key=...*Escape:-:~/etc/init.d/gpe-dm stop
++
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/.mtn2git_empty b/packages/gpe-login/gpe-login-0.90/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/ixp4xx-kernel/2.6.15/.mtn2git_empty
+++ b/packages/gpe-login/gpe-login-0.90/.mtn2git_empty
diff --git a/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch b/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch
new file mode 100644
index 0000000000..798c059ccc
--- /dev/null
+++ b/packages/gpe-login/gpe-login-0.90/chvt-keylaunch.patch
@@ -0,0 +1,12 @@
+--- /tmp/gpe-login.keylaunchrc 2006-05-29 23:46:42.806081576 +0200
++++ gpe-login-0.87/gpe-login.keylaunchrc 2006-05-29 23:48:18.476537456 +0200
+@@ -1,3 +1,9 @@
+ key=????XF86AudioRecord:xcalibrate:/usr/bin/gpe-xcalibrate.sh
+ key=????XF86PowerDown:-:/usr/bin/apm --suspend
+ key=????Held XF86PowerDown:-:bl toggle
++
++# VT changing
++key=...*Left:-:~chvt 1
++key=...*Right:-:~chvt 3
++key=...*Escape:-:~/etc/init.d/gpe-dm stop
++
diff --git a/packages/gpe-login/gpe-login_0.88.bb b/packages/gpe-login/gpe-login_0.88.bb
new file mode 100644
index 0000000000..6780add5c8
--- /dev/null
+++ b/packages/gpe-login/gpe-login_0.88.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "GPE user login screen"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd"
+RDEPENDS = "xkbd"
+RPROVIDES = "gpe-session-starter"
+PR = "r2"
+
+PACKAGE_ARCH_${PN} = "${MACHINE}"
+
+inherit gpe
+
+
+SRC_URI += "file://removeblue-fontsize8.patch;patch=1"
+SRC_URI += " file://chvt-keylaunch.patch;patch=1 "
+SRC_URI += " file://use-xtscal.patch;patch=1 "
+
+SRC_URI_append_spitz = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+SRC_URI_append_akita = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+SRC_URI_append_c7x0 = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+
diff --git a/packages/gpe-login/gpe-login_0.90.bb b/packages/gpe-login/gpe-login_0.90.bb
new file mode 100644
index 0000000000..6aeec56f12
--- /dev/null
+++ b/packages/gpe-login/gpe-login_0.90.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "GPE user login screen"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd"
+RDEPENDS = "xkbd gpe-theme-clearlooks"
+RPROVIDES = "gpe-session-starter"
+PR = "r1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools pkgconfig
+
+
+SRC_URI += "file://removeblue-fontsize8.patch;patch=1"
+SRC_URI += " file://chvt-keylaunch.patch;patch=1 "
+
+SRC_URI_append_spitz = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+SRC_URI_append_akita = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+SRC_URI_append_c7x0 = "file://brightness-adjust-keyluanchrc.patch;patch=1"
+
diff --git a/packages/gpe-login/gpe-login_svn.bb b/packages/gpe-login/gpe-login_svn.bb
new file mode 100644
index 0000000000..d38545fe57
--- /dev/null
+++ b/packages/gpe-login/gpe-login_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "GPE user login screen"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd"
+RDEPENDS = "xkbd"
+RPROVIDES = "gpe-session-starter"
+PV = "0.88+svn-${SRCDATE}"
+
+inherit autotools
+
+SRC_URI = "${GPE_SVN} \
+ file://removeblue-fontsize8.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-mini-browser/gpe-mini-browser_0.11.bb b/packages/gpe-mini-browser/gpe-mini-browser_0.11.bb
deleted file mode 100644
index faa6bca828..0000000000
--- a/packages/gpe-mini-browser/gpe-mini-browser_0.11.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-require gpe-mini-browser.inc
-
-PR = "r0"
-
-SRC_URI = "http://stag.mind.be/gpe-mini-browser-${PV}.tar.bz2"
-
-DEPENDS = "libgpelaunch libgpewidget osb-nrcit"
-
-S = "${WORKDIR}/gpe-mini-browser"
-
-inherit autotools
-
-do_install() {
- # install -d ${D}${docdir}/gpe
- # install -m 0644 ${S}/gpe-mini-browser.html ${D}${docdir}/gpe/
- install -d ${D}/usr/share/applications
- install -m 0644 ${S}/gpe-mini-browser.desktop ${D}/usr/share/applications/gpe-mini-browser.desktop
- install -d ${D}/usr/share/pixmaps
- install -m 0644 ${S}/gpe-mini-browser.png ${D}/usr/share/pixmaps/gpe-mini-browser.png
- autotools_do_install
-}
-
-pkg_postinst_${PN}-doc () {
- #!/bin/sh
- if [ "x$D" != "x" ]; then
- if [ -e /etc/gpe/gpe-help.conf ]; then
- echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
- else
- echo [Help] >> /etc/gpe/gpe-help.conf
- echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
- fi
- if [ -x /usr/bin/gpe-helpindex ]; then
- echo generating help-index
- gpe-helpindex
- else
- echo not generating index for gpe-mini-browser
- fi
- fi
-}
-
-pkg_postrm_${PN}-doc () {
- #!/bin/sh
- if [ -e /etc/gpe/gpe-help.conf ]; then
- sed '/^\<gpe-mini-browser\>/d' /etc/gpe/gpe-help.conf > /tmp/gpe-help.conf
- mv /tmp/gpe-help.conf /etc/gpe/gpe-help.conf
- fi
- if [ -x /usr/bin/gpe-helpindex ]; then
- echo generating help-index
- gpe-helpindex
- else
- echo not generating index for gpe-mini-browser
- fi
-}
-
diff --git a/packages/gpe-mini-browser/gpe-mini-browser_0.14.bb b/packages/gpe-mini-browser/gpe-mini-browser_0.14.bb
deleted file mode 100644
index 68d0fbfb98..0000000000
--- a/packages/gpe-mini-browser/gpe-mini-browser_0.14.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-require gpe-mini-browser.inc
-
-PR = "r0"
-
-SRC_URI = "http://handhelds.org/~philippe/gpe-mini-browser-${PV}.tar.bz2"
-DEPENDS = "osb-nrcit"
-
-S = "${WORKDIR}/gpe-mini-browser"
-
-inherit autotools
-
-do_install() {
- # install -d ${D}${docdir}/gpe
- # install -m 0644 ${S}/gpe-mini-browser.html ${D}${docdir}/gpe/
- install -d ${D}/usr/share/applications
- install -m 0644 ${S}/gpe-mini-browser.desktop ${D}/usr/share/applications/gpe-mini-browser.desktop
- install -d ${D}/usr/share/pixmaps
- install -m 0644 ${S}/gpe-mini-browser.png ${D}/usr/share/pixmaps/gpe-mini-browser.png
- autotools_do_install
-}
-
-pkg_postinst_${PN}-doc () {
- #!/bin/sh
- if [ "x$D" != "x" ]; then
- if [ -e /etc/gpe/gpe-help.conf ]; then
- echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
- else
- echo [Help] >> /etc/gpe/gpe-help.conf
- echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
- fi
- if [ -x /usr/bin/gpe-helpindex ]; then
- echo generating help-index
- gpe-helpindex
- else
- echo not generating index for gpe-mini-browser
- fi
- fi
-}
-
-pkg_postrm_${PN}-doc () {
- #!/bin/sh
- if [ -e /etc/gpe/gpe-help.conf ]; then
- sed '/^\<gpe-mini-browser\>/d' /etc/gpe/gpe-help.conf > /tmp/gpe-help.conf
- mv /tmp/gpe-help.conf /etc/gpe/gpe-help.conf
- fi
- if [ -x /usr/bin/gpe-helpindex ]; then
- echo generating help-index
- gpe-helpindex
- else
- echo not generating index for gpe-mini-browser
- fi
-}
-
-
diff --git a/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb b/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb
new file mode 100644
index 0000000000..20732ea5b2
--- /dev/null
+++ b/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb
@@ -0,0 +1,52 @@
+require gpe-mini-browser.inc
+
+SRC_URI = "http://gpe.linuxtogo.org/download/source/gpe-mini-browser-${PV}.tar.gz"
+DEPENDS = "osb-nrcit sqlite libgpewidget"
+RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg"
+
+PR = "r0"
+
+S = "${WORKDIR}/gpe-mini-browser-${PV}"
+
+inherit autotools
+
+do_install() {
+ install -d ${D}/usr/share/applications
+ install -m 0644 ${S}/gpe-mini-browser.desktop ${D}/usr/share/applications/gpe-mini-browser.desktop
+ install -d ${D}/usr/share/pixmaps
+ install -m 0644 ${S}/gpe-mini-browser.png ${D}/usr/share/pixmaps/gpe-mini-browser.png
+ autotools_do_install
+}
+
+pkg_postinst_${PN}-doc () {
+ #!/bin/sh
+ if [ "x$D" != "x" ]; then
+ if [ -e /etc/gpe/gpe-help.conf ]; then
+ echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
+ else
+ echo [Help] >> /etc/gpe/gpe-help.conf
+ echo gpe-mini-browser= /usr/share/doc/gpe/gpe-mini-browser.html >> /etc/gpe/gpe-help.conf
+ fi
+ if [ -x /usr/bin/gpe-helpindex ]; then
+ echo generating help-index
+ gpe-helpindex
+ else
+ echo not generating index for gpe-mini-browser
+ fi
+ fi
+}
+
+pkg_postrm_${PN}-doc () {
+ #!/bin/sh
+ if [ -e /etc/gpe/gpe-help.conf ]; then
+ sed '/^\<gpe-mini-browser\>/d' /etc/gpe/gpe-help.conf > /tmp/gpe-help.conf
+ mv /tmp/gpe-help.conf /etc/gpe/gpe-help.conf
+ fi
+ if [ -x /usr/bin/gpe-helpindex ]; then
+ echo generating help-index
+ gpe-helpindex
+ else
+ echo not generating index for gpe-mini-browser
+ fi
+}
+
diff --git a/packages/gpe-mini-browser/gpe-mini-browser_svn.bb b/packages/gpe-mini-browser/gpe-mini-browser_svn.bb
index 67c16862e8..30d9d83a49 100644
--- a/packages/gpe-mini-browser/gpe-mini-browser_svn.bb
+++ b/packages/gpe-mini-browser/gpe-mini-browser_svn.bb
@@ -50,4 +50,4 @@ pkg_postrm_${PN}-doc () {
require gpe-mini-browser.inc
-DEFAULT_PREFERENCE = "-1"
+#DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-mininet/gpe-mininet_svn.bb b/packages/gpe-mininet/gpe-mininet_svn.bb
new file mode 100644
index 0000000000..1acca052fd
--- /dev/null
+++ b/packages/gpe-mininet/gpe-mininet_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "GPE network connection checker"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget gpe-icons gpe-conf"
+RRECOMMENDS = "gpe-conf"
+PR = "r0"
+PV = "0.7+svn-${SRCDATE}"
+
+inherit autotools pkgconfig
+
+SRC_URI = "${GPE_EXTRA_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} = " ${bindir} ${datadir}/pixmaps ${datadir}/applications"
+FILES_${PN} += " ${datadir}/gpe/pixmaps"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-nmf/gpe-nmf.inc b/packages/gpe-nmf/gpe-nmf.inc
new file mode 100644
index 0000000000..d3b39abdcf
--- /dev/null
+++ b/packages/gpe-nmf/gpe-nmf.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "GPE audio player"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
+RDEPENDS = "esd gst-plugins gst-plugin-audio gst-plugin-audioconvert gst-plugin-audiofile gst-plugin-esd gst-plugin-typefindfunctions gst-plugin-volume"
+RRECOMMENDS = "gst-plugin-mad gst-plugin-tagedit"
+
+inherit gpe pkgconfig
+
+
+PARALLEL_MAKE=""
diff --git a/packages/gpe-nmf/gpe-nmf_0.17.bb b/packages/gpe-nmf/gpe-nmf_0.17.bb
index bf45dc5d56..93fd043e63 100644
--- a/packages/gpe-nmf/gpe-nmf_0.17.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.17.bb
@@ -1,9 +1,6 @@
-LICENSE = "GPL"
-inherit gpe pkgconfig
+require gpe-nmf.inc
-DESCRIPTION = "GPE audio player"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
-SECTION = "gpe"
-PRIORITY = "optional"
+RDEPENDS = ""
+RRECOMMENDS = ""
SRC_URI += "file://fix_makefiles.patch;patch=1"
diff --git a/packages/gpe-nmf/gpe-nmf_0.19.bb b/packages/gpe-nmf/gpe-nmf_0.19.bb
index 9f87e6abdc..6ee24032e0 100644
--- a/packages/gpe-nmf/gpe-nmf_0.19.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.19.bb
@@ -1,20 +1,3 @@
-LICENSE = "GPL"
-inherit gpe pkgconfig
+require gpe-nmf.inc
-DESCRIPTION = "GPE audio player"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
-RDEPENDS = "esd \
- gst-plugins \
- gst-plugin-audio \
- gst-plugin-audioconvert \
- gst-plugin-audiofile \
- gst-plugin-esd \
- gst-plugin-typefindfunctions \
- gst-plugin-volume"
-RRECOMMENDS = "gst-plugin-mad \
- gst-plugin-tagedit"
-SECTION = "gpe"
-PRIORITY = "optional"
PR = "r4"
-
-PARALLEL_MAKE=""
diff --git a/packages/gpe-nmf/gpe-nmf_0.20.bb b/packages/gpe-nmf/gpe-nmf_0.20.bb
index 875c38f950..bfbb7a487c 100644
--- a/packages/gpe-nmf/gpe-nmf_0.20.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.20.bb
@@ -1,21 +1,4 @@
-LICENSE = "GPL"
-inherit gpe pkgconfig
+require gpe-nmf.inc
-DESCRIPTION = "GPE audio player"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
-RDEPENDS = "esd \
- gst-plugins \
- gst-plugin-audio \
- gst-plugin-audioconvert \
- gst-plugin-audiofile \
- gst-plugin-esd \
- gst-plugin-typefindfunctions \
- gst-plugin-volume"
-RRECOMMENDS = "gst-plugin-mad \
- gst-plugin-tagedit \
- gst-plugin-tcp"
-SECTION = "gpe"
-PRIORITY = "optional"
+RRECOMMENDS += "gst-plugin-tcp"
PR = "r1"
-
-PARALLEL_MAKE=""
diff --git a/packages/gpe-nmf/gpe-nmf_0.21.bb b/packages/gpe-nmf/gpe-nmf_0.21.bb
index 4501cdf55d..f1292b93e2 100644
--- a/packages/gpe-nmf/gpe-nmf_0.21.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.21.bb
@@ -1,21 +1,3 @@
-LICENSE = "GPL"
-inherit gpe pkgconfig
+require gpe-nmf.inc
-DESCRIPTION = "GPE audio player"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
-RDEPENDS = "esd \
- gst-plugins \
- gst-plugin-audio \
- gst-plugin-audioconvert \
- gst-plugin-audiofile \
- gst-plugin-esd \
- gst-plugin-typefindfunctions \
- gst-plugin-volume"
-RRECOMMENDS = "gst-plugin-mad \
- gst-plugin-tagedit \
- gst-plugin-tcp"
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r0"
-
-PARALLEL_MAKE=""
+RRECOMMENDS += "gst-plugin-tcp"
diff --git a/packages/gpe-nmf/gpe-nmf_0.22.bb b/packages/gpe-nmf/gpe-nmf_0.22.bb
index c4b2ae7c2c..8b70d83c6b 100644
--- a/packages/gpe-nmf/gpe-nmf_0.22.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.22.bb
@@ -1,31 +1,12 @@
-LICENSE = "GPL"
-inherit gpe pkgconfig
+require gpe-nmf.inc
-DESCRIPTION = "GPE audio player"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
-RDEPENDS = "esd \
- gst-plugins \
- gst-plugin-audio \
- gst-plugin-audioconvert \
- gst-plugin-audiofile \
- gst-plugin-esd \
- gst-plugin-typefindfunctions \
- gst-plugin-decodebin \
- gst-plugin-volume"
-RRECOMMENDS = "gst-plugin-mad \
- gst-plugin-tagedit \
- gst-plugin-ivorbis \
- gst-plugin-tcp"
+RDEPENDS += "gst-plugin-decodebin"
+RRECOMMENDS += "gst-plugin-ivorbis gst-plugin-tcp"
+PR = "r2"
SRC_URI += " file://playlist-segfault.patch;patch=1;pnum=0 \
file://fix-includepath.patch;patch=1"
-SECTION = "gpe"
-PRIORITY = "optional"
-PR = "r2"
-
-PARALLEL_MAKE=""
-
do_compile() {
oe_runmake PREFIX=${prefix} GST_VERSION="0.8"
}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo.inc b/packages/gpe-ownerinfo/gpe-ownerinfo.inc
new file mode 100644
index 0000000000..704044f09b
--- /dev/null
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo.inc
@@ -0,0 +1,13 @@
+inherit gpe
+
+DESCRIPTION = "GPE owner information dialog"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget"
+
+do_stage () {
+ oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
+ install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
+}
+
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo/compile.patch b/packages/gpe-ownerinfo/gpe-ownerinfo/compile.patch
new file mode 100644
index 0000000000..3406481d66
--- /dev/null
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo/compile.patch
@@ -0,0 +1,13 @@
+Index: gpe-ownerinfo-0.28/Makefile
+===================================================================
+--- gpe-ownerinfo-0.28.orig/Makefile
++++ gpe-ownerinfo-0.28/Makefile
+@@ -40,7 +40,7 @@ all: $(PACKAGE) all-mo
+
+ $(LIB_TARGET): $(LIB_OBJS)
+ rm -f $@
+- ar cq $@ $^
++ $(AR) cq $@ $^
+
+ $(PACKAGE): $(OBJS) $(LIB_TARGET)
+ $(CC) -o $@ $^ $(LDFLAGS) $(PACKAGE_LDFLAGS) -L. -lgpe-ownerinfo
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo/svn-build.patch b/packages/gpe-ownerinfo/gpe-ownerinfo/svn-build.patch
new file mode 100644
index 0000000000..9c446edb94
--- /dev/null
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo/svn-build.patch
@@ -0,0 +1,238 @@
+--- gpe-ownerinfo.orig/Makefile 2007-04-08 02:00:43.064935587 +0300
++++ gpe-ownerinfo/Makefile 2007-04-08 02:01:24.703308411 +0300
+@@ -2,7 +2,7 @@
+ VERSION = 0.28
+ PREFIX = /usr/local
+ DEBUG = no
+-CVSBUILD = yes
++CVSBUILD = no
+ ENABLE_NLS = yes
+
+ LINGUAS = de hu id pt pt_BR fr zh_TW ro sv nl sk cs ru sr es zh_CN vi fi tr sl ko ja
++++ gpe-ownerinfo/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-ownerinfo.orig/build/Makefile.translation gpe-ownerinfo/build/Makefile.translation
+--- gpe-ownerinfo.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-ownerinfo/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.23.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.23.bb
index 2eb1b947a8..c5d8184cbf 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.23.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.23.bb
@@ -1,13 +1,3 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
-LICENSE = "GPL"
PR = "r1"
-
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.24.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.24.bb
index e0709fe1ed..e63a6172a2 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.24.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.24.bb
@@ -1,15 +1,5 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
PR = "r2"
-LICENSE = "GPL"
SRC_URI += "file://fixloop.patch;patch=1;pnum=0"
-
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.25.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.25.bb
index f04b9c19be..e7ef651bc4 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.25.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.25.bb
@@ -1,13 +1,3 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
-LICENSE = "GPL"
PR = "r0"
-
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.26.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.26.bb
index f04b9c19be..e7ef651bc4 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.26.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.26.bb
@@ -1,13 +1,3 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
-LICENSE = "GPL"
PR = "r0"
-
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.27.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.27.bb
index f04b9c19be..e7ef651bc4 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.27.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.27.bb
@@ -1,13 +1,3 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
-LICENSE = "GPL"
PR = "r0"
-
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb
index f04b9c19be..b00cc7cc66 100644
--- a/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_0.28.bb
@@ -1,13 +1,5 @@
-inherit gpe
+require gpe-ownerinfo.inc
-DESCRIPTION = "GPE owner information dialog"
-SECTION = "gpe"
-PRIORITY = "optional"
-DEPENDS = "gtk+ libgpewidget"
-LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
-do_stage () {
- oe_libinstall -a libgpe-ownerinfo ${STAGING_LIBDIR}
- install -m 0644 gpe-ownerinfo.h ${STAGING_INCDIR}/
-}
+SRC_URI += "file://compile.patch;patch=1"
diff --git a/packages/gpe-ownerinfo/gpe-ownerinfo_svn.bb b/packages/gpe-ownerinfo/gpe-ownerinfo_svn.bb
new file mode 100644
index 0000000000..036f70eaf1
--- /dev/null
+++ b/packages/gpe-ownerinfo/gpe-ownerinfo_svn.bb
@@ -0,0 +1,11 @@
+require gpe-ownerinfo.inc
+
+PR = "r1"
+PV = "0.28+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI += "${GPE_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
diff --git a/packages/gpe-package/gpe-package_0.4.bb b/packages/gpe-package/gpe-package_0.4.bb
new file mode 100644
index 0000000000..65b4ac138b
--- /dev/null
+++ b/packages/gpe-package/gpe-package_0.4.bb
@@ -0,0 +1,22 @@
+LICENSE = "GPL"
+PR = "r0"
+inherit gpe pkgconfig
+
+DESCRIPTION = "A package manager GUI for GPE"
+DEPENDS = "ipkg libpcre libgpewidget"
+RDEPENDS = "gpe-icons gpe-su"
+SECTION = "gpe"
+PRIORITY = "optional"
+
+SRC_URI += " file://sbin-and-no-suid-install.patch;patch=1 \
+ file://gpe-package"
+
+FILES_${PN} += " /usr/bin/gpe-package"
+
+CFLAGS += "-DENABLE_PCRE"
+LDFLAGS += "-lpcre"
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/gpe-package ${D}${bindir}
+}
diff --git a/packages/gpe-plucker/gpe-plucker_0.4.bb b/packages/gpe-plucker/gpe-plucker_0.4.bb
index 238b1c13d6..6e9f6b5d3b 100644
--- a/packages/gpe-plucker/gpe-plucker_0.4.bb
+++ b/packages/gpe-plucker/gpe-plucker_0.4.bb
@@ -1,12 +1,13 @@
inherit gpe pkgconfig
LICENSE = "GPL"
DESCRIPTION = "Plucker ebook reader"
-DEPENDS = "gtk+ libgpewidget"
+DEPENDS = "gtk+ libgpewidget gpe-icons"
+RDEPENDS = "gpe-icons"
SECTION = "gpe"
PRIORITY = "optional"
SRC_URI += " file://plucker-no-host-includes.patch;patch=1"
PARALLEL_MAKE=""
-PR = "r1"
+PR = "r2"
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/.mtn2git_empty b/packages/gpe-scap/gpe-scap-1.2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/ixp4xx-kernel/2.6.16/.mtn2git_empty
+++ b/packages/gpe-scap/gpe-scap-1.2/.mtn2git_empty
diff --git a/packages/gpe-scap/gpe-scap-1.2/deviceinfo.patch b/packages/gpe-scap/gpe-scap-1.2/deviceinfo.patch
new file mode 100644
index 0000000000..57e611d85e
--- /dev/null
+++ b/packages/gpe-scap/gpe-scap-1.2/deviceinfo.patch
@@ -0,0 +1,22 @@
+Index: src/scr-shot-common.c
+===================================================================
+--- src/scr-shot-common.c (.../base/gpe-scap/src/scr-shot-common.c) (Revision 8890)
++++ src/scr-shot-common.c (.../extra/gpe-scap/src/scr-shot-common.c) (Arbeitskopie)
+@@ -37,7 +37,7 @@
+ gchar *
+ get_device_model (void)
+ {
+- gchar *result;
++ gchar *result = NULL;
+ struct utsname uinfo;
+ gchar **strv;
+ gint i = 0;
+@@ -62,6 +62,8 @@
+ }
+ g_strfreev (strv);
+ }
++ if (result)
++ return result;
+ #ifdef __arm__
+ result = g_strdup_printf ("%s,%s",_("ARM"), uinfo.machine);
+ #endif
diff --git a/packages/gpe-scap/gpe-scap_1.2.bb b/packages/gpe-scap/gpe-scap_1.2.bb
index d53f041bbe..1fc8f9a57a 100644
--- a/packages/gpe-scap/gpe-scap_1.2.bb
+++ b/packages/gpe-scap/gpe-scap_1.2.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "GPE screenshot application"
LICENSE = "GPL"
PRIORITY = "optional"
SECTION = "gpe"
-PR = "r0"
+PR = "r1"
RREPLACES = "gpe-screenshot"
@@ -12,3 +12,4 @@ GPE_TARBALL_SUFFIX = "bz2"
inherit gpe autotools
+SRC_URI += " file://deviceinfo.patch;patch=1;pnum=0"
diff --git a/packages/gpe-scap/gpe-scap_1.3.bb b/packages/gpe-scap/gpe-scap_1.3.bb
new file mode 100644
index 0000000000..aec5819e6e
--- /dev/null
+++ b/packages/gpe-scap/gpe-scap_1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "GPE screenshot application"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "gpe"
+PR = "r0"
+
+RREPLACES = "gpe-screenshot"
+
+DEPENDS = "glib-2.0 gtk+ libgpewidget libglade libsoup"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools
diff --git a/packages/gpe-scap/gpe-scap_svn.bb b/packages/gpe-scap/gpe-scap_svn.bb
new file mode 100644
index 0000000000..3360189422
--- /dev/null
+++ b/packages/gpe-scap/gpe-scap_svn.bb
@@ -0,0 +1,12 @@
+DEPENDS = "glib-2.0 gtk+ libgpewidget libglade libsoup"
+RREPLACES = "gpe-screenshot"
+PV = "1.2+svn-${SRCDATE}"
+PR = "r1"
+
+inherit autotools
+
+SRC_URI += "${GPE_EXTRA_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-session-scripts/files/angstrom/matchbox-session b/packages/gpe-session-scripts/files/angstrom/matchbox-session
index ad2d9b6a78..b0bec8c742 100644
--- a/packages/gpe-session-scripts/files/angstrom/matchbox-session
+++ b/packages/gpe-session-scripts/files/angstrom/matchbox-session
@@ -5,5 +5,4 @@ XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
matchbox-desktop &
matchbox-panel --no-flip --orientation south &
-exec matchbox-window-manager $@
diff --git a/packages/gpe-session-scripts/files/matchbox-session b/packages/gpe-session-scripts/files/matchbox-session
index bffd69a244..e4c0e0c68e 100644
--- a/packages/gpe-session-scripts/files/matchbox-session
+++ b/packages/gpe-session-scripts/files/matchbox-session
@@ -5,5 +5,4 @@ XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
matchbox-desktop &
MB_MENU_PANEL_DISABLED=1 matchbox-panel --orientation south &
-exec matchbox-window-manager $@
diff --git a/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb b/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
index 3596e4e6cd..75b79ec870 100644
--- a/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
+++ b/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
@@ -4,14 +4,14 @@ DESCRIPTION = "GPE session startup scripts"
LICENSE = "GPL"
SECTION = "gpe"
PRIORITY = "optional"
-RDEPENDS_${PN} = "matchbox-panel (>= 0.9.2-r12) matchbox-desktop (>= 0.9.1-r1) matchbox-common (>= 0.9.1-r2) gpe-session-starter xtscal gpe-question matchbox-applet-inputmanager xmodmap xdpyinfo xserver-common ipaq-sleep"
+RDEPENDS_${PN} = "matchbox-panel matchbox-desktop matchbox-common gpe-session-starter xtscal gpe-question matchbox-applet-inputmanager xmodmap xdpyinfo xserver-common ipaq-sleep"
# more rdepends: keylaunch apmd blueprobe
DEPENDS = "matchbox-wm matchbox-panel xtscal gpe-question matchbox-applet-inputmanager xmodmap xdpyinfo xserver-common ipaq-sleep"
SRC_URI += "file://matchbox-session \
file://disable-composite.xsettings"
-PR = "r7"
+PR = "r10"
#apply a patch to set the fontsize for bigdpi (200+) devices to 5
SRC_URI_append_hx4700 = " file://highdpifontfix.patch;patch=1"
@@ -26,6 +26,8 @@ do_configure_append_angstrom() {
sed -i s:Industrial:Clearlooks:g X11/xsettings.default
}
+export CURSOR_HIDE = '${@base_contains("MACHINE_FEATURES","touchscreen","-use_cursor no","-use_cursor yes",d)}'
+
do_install_append() {
install -d ${D}${sysconfdir}/gpe/xsettings-default.d
if [ "${GUI_MACHINE_CLASS}" != "bigscreen" ]; then
@@ -33,6 +35,8 @@ do_install_append() {
fi
install -d ${D}${sysconfdir}/matchbox
install ${WORKDIR}/matchbox-session ${D}${sysconfdir}/matchbox/session
+ echo -e "exec matchbox-window-manager ${CURSOR_HIDE} \$@ \n" >> ${D}${sysconfdir}/matchbox/session
+
install -d ${D}${sysconfdir}/gpe/xsettings-default.d
install -m 0644 ${WORKDIR}/disable-composite.xsettings ${D}${sysconfdir}/gpe/xsettings-default.d/disable-composite
diff --git a/packages/linux/linux-dht-walnut-2.6.12.6/.mtn2git_empty b/packages/gpe-shield/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-dht-walnut-2.6.12.6/.mtn2git_empty
+++ b/packages/gpe-shield/files/.mtn2git_empty
diff --git a/packages/gpe-shield/files/uncrypt-startup-error.patch b/packages/gpe-shield/files/uncrypt-startup-error.patch
new file mode 100644
index 0000000000..a67532e7cb
--- /dev/null
+++ b/packages/gpe-shield/files/uncrypt-startup-error.patch
@@ -0,0 +1,13 @@
+diff -ur gpe-shield-0.9.org/interface.c gpe-shield-0.9/interface.c
+--- gpe-shield-0.9.org/interface.c 2006-02-04 23:53:45.000000000 +0000
++++ gpe-shield-0.9/interface.c 2007-06-18 01:50:02.000000000 +0000
+@@ -569,7 +569,8 @@
+ {
+ if (cmd == CMD_NO_IPTABLES)
+ show_message(GTK_MESSAGE_WARNING, _("This system does not " \
+- "support firewalling or you"\
++ "support firewalling (iptables " \
++ "command is not available) or you"\
+ " don't have the right to "\
+ "change firewall rules, this" \
+ " application will exit now."));
diff --git a/packages/gpe-shield/gpe-shield_0.9.bb b/packages/gpe-shield/gpe-shield_0.9.bb
index aac8899035..124f010105 100644
--- a/packages/gpe-shield/gpe-shield_0.9.bb
+++ b/packages/gpe-shield/gpe-shield_0.9.bb
@@ -6,8 +6,8 @@ DEPENDS = "libgpewidget iptables virtual/kernel"
RDEPENDS = "iptables"
RRECOMMENDS = "kernel-module-ipt-state"
-PR = "r0"
+PR = "r1"
inherit gpe pkgconfig
-
+SRC_URI += " file://uncrypt-startup-error.patch;patch=1 "
diff --git a/packages/linux/linux-dht-walnut-2.6.12/.mtn2git_empty b/packages/gpe-sketchbook/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-dht-walnut-2.6.12/.mtn2git_empty
+++ b/packages/gpe-sketchbook/files/.mtn2git_empty
diff --git a/packages/gpe-sketchbook/files/svn-build.patch b/packages/gpe-sketchbook/files/svn-build.patch
new file mode 100644
index 0000000000..026689a058
--- /dev/null
+++ b/packages/gpe-sketchbook/files/svn-build.patch
@@ -0,0 +1,229 @@
+diff -Naur gpe-sketchbook.orig/build/Makefile.dpkg_ipkg gpe-sketchbook/build/Makefile.dpkg_ipkg
+--- gpe-sketchbook.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-sketchbook/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-sketchbook.orig/build/Makefile.translation gpe-sketchbook/build/Makefile.translation
+--- gpe-sketchbook.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-sketchbook/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-sketchbook/gpe-sketchbook_svn.bb b/packages/gpe-sketchbook/gpe-sketchbook_svn.bb
new file mode 100644
index 0000000000..8884746136
--- /dev/null
+++ b/packages/gpe-sketchbook/gpe-sketchbook_svn.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "A GPE notebook to sketch your notes"
+SECTION = "gpe"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget"
+PV = "0.2.9+svn-${SRCDATE}"
+
+inherit pkgconfig autotools
+
+SRC_URI = "${GPE_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+do_compile () {
+ oe_runmake PREFIX=${prefix}
+ oe_runmake all-desktop PREFIX=${prefix}
+}
+do_install () {
+ oe_runmake PREFIX=${prefix} DESTDIR=${D} install-program
+}
+
+FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications"
+FILES_${PN} += " ${datadir}/gpe/pixmaps"
+
+export CVSBUILD = "no"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/gpe-snes/gpe-snes_0.1.bb b/packages/gpe-snes/gpe-snes_0.1.bb
deleted file mode 100644
index 13944f5a4a..0000000000
--- a/packages/gpe-snes/gpe-snes_0.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "gpe-snes is a gpe frontend for the snes9x SNES emulator"
-SECTION = "games"
-LICENSE = "GPLv2"
-PRIORITY = "optional"
-DEPENDS = "libgpe"
-
-inherit autotools
-
-PR = "r0"
-
-SRC_URI = "http://www.telefonica.net/web2/mteirap/gpe-snes-${PV}.tar.gz"
diff --git a/packages/gpe-snes/gpe-snes_0.2.bb b/packages/gpe-snes/gpe-snes_0.2.bb
new file mode 100644
index 0000000000..6d647cf160
--- /dev/null
+++ b/packages/gpe-snes/gpe-snes_0.2.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "gpe-snes is a gpe frontend for the snes9x SNES emulator"
+SECTION = "games"
+LICENSE = "GPLv2"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libgpewidget libxrandr"
+
+inherit autotools
+
+PR = "r0"
+
+SRC_URI = "http://www.telefonica.net/web2/mteirap/gpe-snes-${PV}.tar.gz"
diff --git a/packages/linux/linux-netvista-2.4.27/.mtn2git_empty b/packages/gpe-su/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-netvista-2.4.27/.mtn2git_empty
+++ b/packages/gpe-su/files/.mtn2git_empty
diff --git a/packages/gpe-su/files/svn-build.patch b/packages/gpe-su/files/svn-build.patch
new file mode 100644
index 0000000000..09a8dfb92f
--- /dev/null
+++ b/packages/gpe-su/files/svn-build.patch
@@ -0,0 +1,240 @@
+--- gpe-su/Makefile.orig 2007-04-07 13:50:17.507459397 +0300
++++ gpe-su/Makefile 2007-04-07 13:50:25.711926944 +0300
+@@ -1,7 +1,7 @@
+ PREFIX = /usr/local
+ PACKAGE = gpe-su
+ DEBUG = yes
+-CVSBUILD = yes
++CVSBUILD = no
+ VERSION = 0.19
+
+ LINGUAS = nl pt fr sk cs de sv ro ru sr es zh_CN
+diff -Naur gpe-su.orig/build/Makefile.dpkg_ipkg gpe-su/build/Makefile.dpkg_ipkg
+--- gpe-su.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-su/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-su.orig/build/Makefile.translation gpe-su/build/Makefile.translation
+--- gpe-su.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-su/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-su/gpe-su_svn.bb b/packages/gpe-su/gpe-su_svn.bb
new file mode 100644
index 0000000000..113fc4abd4
--- /dev/null
+++ b/packages/gpe-su/gpe-su_svn.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "GPE Graphical root-shell frontend"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget"
+
+inherit pkgconfig
+
+SRC_URI = "${GPE_SVN} \
+ file://svn-build.patch;patch=1"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/gpe-terminal/files/svn-build.patch b/packages/gpe-terminal/files/svn-build.patch
new file mode 100644
index 0000000000..477aadd99a
--- /dev/null
+++ b/packages/gpe-terminal/files/svn-build.patch
@@ -0,0 +1,238 @@
+--- gpe-terminal.orig/Makefile 2007-04-08 02:00:43.064935587 +0300
++++ gpe-terminal/Makefile 2007-04-08 02:01:24.703308411 +0300
+@@ -9,5 +9,5 @@
+ install -m 644 -D gpe-terminal.png $(DESTDIR)$(PREFIX)/share/pixmaps/gpe-terminal.png
+ install -m 644 -D gpe-terminal.desktop $(DESTDIR)$(PREFIX)/share/applications/gpe-terminal.desktop
+
+-include ../build/Makefile.dpkg_ipkg
++include build/Makefile.dpkg_ipkg
+
+diff -Naur gpe-terminal.orig/build/Makefile.dpkg_ipkg gpe-terminal/build/Makefile.dpkg_ipkg
+--- gpe-terminal.orig/build/Makefile.dpkg_ipkg 1970-01-01 02:00:00.000000000 +0200
++++ gpe-terminal/build/Makefile.dpkg_ipkg 2007-02-10 17:21:40.154584782 +0200
+@@ -0,0 +1,114 @@
++## Please read the README in this directory to see how to use this
++## Makefile snippet
++
++# Let's use whatever clean target the specific app provides
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# URL to source tarball
++SOURCE = http://gpe.linuxtogo.org/download/source/$(PACKAGE)-$(VERSION).tar.gz
++
++# can change this to e.g. /var/tmp/deb
++DEB_PATH = ../deb
++
++ifeq ($(CVSBUILD),yes)
++LIBGPEWIDGET_PC = libgpewidget-uninstalled
++PC_EXTRA=PKG_CONFIG_PATH=../../base/libgpewidget
++else
++LIBGPEWIDGET_PC = libgpewidget
++endif
++
++ifeq ($(IN_LIBGPEWIDGET),)
++GPECFLAGS = $(shell $(PC_EXTRA) pkg-config --cflags $(LIBGPEWIDGET_PC))
++GPELIBS = $(shell $(PC_EXTRA) pkg-config --libs $(LIBGPEWIDGET_PC))
++endif
++
++GTKCFLAGS = $(shell pkg-config --cflags gtk+-2.0)
++GTKLIBS = $(shell pkg-config --libs gtk+-2.0)
++
++STANDARD_CPPFLAGS = -D_GNU_SOURCE -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
++STANDARD_CFLAGS = -MD -Wall
++
++ifeq ($(DEBUG),yes)
++CFLAGS += -O2 -g
++LDFLAGS = -g
++else
++CFLAGS += -Os -fomit-frame-pointer
++endif
++
++dist: check-source clean dist-prep
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ mkdir ../$(PACKAGE)-$(VERSION)
++ ( tar cf - --exclude "*/CVS" --exclude CVS --exclude "*~" --exclude "#*#" --exclude "debian" --exclude ".*" --exclude "*.ipk" --exclude "*.ipk.*" --exclude "*.mo" --exclude "*.batch" --exclude "translation-ipkgs.txt" * ) | (cd ../$(PACKAGE)-$(VERSION); tar xf -)
++ ( if [ -f linguas ]; then LINGUAS=`cat linguas`; PATCH_LINGUAS="s:^LINGUAS =.*:LINGUAS = $${LINGUAS}:"; fi; cd ../$(PACKAGE)-$(VERSION) && mkdir build && cp $(BUILD)/Makefile.dpkg_ipkg $(BUILD)/Makefile.translation build/ && sed "s:^CVSBUILD =.*:CVSBUILD = no:;s:^DEBUG =.*:DEBUG = no:;s:Makefile.translation-auto-linguas:Makefile.translation:;$${PATCH_LINGUAS}" < Makefile > Makefile.new && mv Makefile.new Makefile )
++ ( cd .. ; tar cf - $(PACKAGE)-$(VERSION) | gzip -9 >$(PACKAGE)-$(VERSION).tar.gz )
++ rm -rf ../$(PACKAGE)-$(VERSION)
++ $(MAKE) printinfo
++
++dist-upload: dist
++ scp ../$(PACKAGE)-$(VERSION).tar.gz $(USER)@linuxtogo.org:/media/data/projects/gpe/source/
++
++dist-prep:
++ipkg-prep:
++install-mo:
++# empty, can be filled in Makefile.translation
++
++install: install-program install-mo
++
++clean-dist:
++ rm -rf familiar/dist familiar/dist.list
++
++clean: clean-dist
++
++check-source:
++ @if [ -f familiar/$(CONTROL) ] && ! grep -q '^Source:' familiar/$(CONTROL); then echo -e "\nNo Source: field in control file. Aborting.\n"; exit 1; fi
++
++ipkg: check-source ipkg-prep clean
++ rm -rf familiar/dist
++ mkdir -p familiar/dist/CONTROL
++ sed 's:VERSION:$(VERSION):;s$$SOURCE$$$(SOURCE)$$' < familiar/$(CONTROL) > familiar/dist/CONTROL/control
++ if test -e familiar/conffiles; then install -m 644 familiar/conffiles familiar/dist/CONTROL; fi
++ if test -e familiar/preinst; then install familiar/preinst familiar/dist/CONTROL; fi
++ if test -e familiar/postinst; then install familiar/postinst familiar/dist/CONTROL; fi
++ if test -e familiar/prerm; then install familiar/prerm familiar/dist/CONTROL; fi
++ if test -e familiar/postrm; then install familiar/postrm familiar/dist/CONTROL; fi
++ $(MAKE) DESTDIR=`pwd`/familiar/dist PREFIX=/usr prefix=/usr DEBUG=no install-program
++ rm -rf familiar/dist.list
++ ipkg-build -o 0 -g 0 familiar/dist | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> familiar/dist.list
++ if [ "x$(LINGUAS)" != "x" ]; then make translation-ipkg; tr ' ' '\n' < translation-ipkgs.txt >> familiar/dist.list; fi
++ md5sum `cat familiar/dist.list` > $(PACKAGE)_$(VERSION).batch
++ rm -rf familiar/dist familiar/dist.list
++ $(MAKE) printinfo
++
++dpkg: dist
++ mkdir -p $(DEB_PATH)
++ ( olddir=`pwd`; cd $(DEB_PATH); rm -rf $(PACKAGE)-$(VERSION); ln -s $$olddir/../$(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)_$(VERSION).orig.tar.gz ; tar xzf $(PACKAGE)_$(VERSION).orig.tar.gz )
++ mkdir -p $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian
++ for i in debian/*; do if test -f $$i; then cp $$i $(DEB_PATH)/$(PACKAGE)-$(VERSION)/debian/; fi; done
++
++CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
++printinfo:
++ @printf '-------------------------------------------------------------------------------\n'
++ @printf "If this becomes a package release, please add a CVS tag.\n"
++ @printf "You can use 'make tag' for that, it will execute\n"
++ @printf " cvs tag %s\n" $(CVSTAG)
++ @printf "Please upload a tarball (created with 'make dist') to\n"
++ @printf " ftp://ftp.handhelds.org/pub/projects/gpe/\n"
++ @printf " (handhelds.org:~ftp/pub/projects/gpe/source)\n"
++ @printf "You can use 'make dist-upload' to do that.\n"
++ @printf "You are currently known as USER %s.\n" $(USER)
++ @printf '-------------------------------------------------------------------------------\n'
++
++tag: check-source
++ cvs tag $(CVSTAG)
++
++retag: check-source
++ cvs tag -F $(CVSTAG)
++
++source: tag dist-upload
++
++%.pc: %.pc.in
++ sed 's:PREFIX:$(PREFIX):;s:BUILDDIR:$(shell pwd):;s:VERSION:$(VERSION):' < $< > $@
++
++.c.o:;
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(PACKAGE_CFLAGS) $(PACKAGE_CPPFLAGS) -c $< -o $@
+diff -Naur gpe-terminal.orig/build/Makefile.translation gpe-terminal/build/Makefile.translation
+--- gpe-terminal.orig/build/Makefile.translation 1970-01-01 02:00:00.000000000 +0200
++++ gpe-terminal/build/Makefile.translation 2007-02-10 17:21:46.170927636 +0200
+@@ -0,0 +1,107 @@
++.SUFFIXES: .mo .po .pot .po8
++
++CONTROL = `if test -e familiar/control1; then echo control1; else echo control; fi`
++
++# use ipkg-build or ipkg-deb-build
++IPKG_BUILD := ipkg-build
++
++TRANSLATION_SITE := http://www.iro.umontreal.ca/~gnutra/maint
++
++ifeq ($(DIR_PO),)
++DIR_PO := po
++endif
++
++ifeq ($(BINPACKAGE),)
++BINPACKAGE := $(PACKAGE)
++endif
++
++mo-files = $(patsubst %,$(DIR_PO)/%.mo,$(LINGUAS))
++po-files = $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++
++ifeq ($(shell if [ -f $(PACKAGE).desktop.in ]; then echo present; fi;),present)
++desktop-files += $(PACKAGE).desktop
++endif
++
++ifneq ($(EXTRA_DESKTOPS),)
++desktop-files += $(patsubst %.desktop.in,%.desktop,$(EXTRA_DESKTOPS))
++endif
++
++all-mo: $(mo-files)
++
++all-desktop: $(desktop-files)
++
++install-mo: all-mo
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ if [ "x$(LINGUAS)" != "x" ]; then \
++ for i in $(LINGUAS); do mkdir -p $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES; install -m 644 $(DIR_PO)/$$i.mo $(DESTDIR)$(PREFIX)/share/locale/$$i/LC_MESSAGES/$(PACKAGE).mo; done \
++ fi; \
++ fi;
++
++.po8.mo:;
++ if [ "$(ENABLE_NLS)" != "no" ]; then \
++ msgfmt -o $@ $<; \
++ fi;
++
++.po.po8:;
++ CTYPE=`grep "^\"Content-Type:" $< | sed 's/^.*charset=//;s/\\\\.*//'`; sed "s/\(Content-Type: .*=\)$$CTYPE/\1UTF-8/" < $< | iconv -f $${CTYPE} -t UTF-8 >$@
++
++update-po: $(po-files) extract-po
++
++dist-prep: update-po freshen-po
++# empty
++
++ifeq ($(CVSBUILD),yes)
++ipkg-prep: freshen-po
++# empty
++endif
++
++extract-po:
++ mkdir -p $(DIR_PO)
++ ( SOURCES="$(SOURCES)"; for DESK in $(PACKAGE).desktop.in $(EXTRA_DESKTOPS); do if [ -f $$DESK ]; then intltool-extract --type=gettext/ini $$DESK; SOURCES="$$SOURCES $${DESK}.h"; fi; done; if [ "x$$SOURCES" != "x" ]; then xgettext --add-comments=TRANSLATORS: -k_ -kN_ -o $(DIR_PO)/$(PACKAGE).pot.new $$SOURCES; fi )
++ if [ -f $(DIR_PO)/$(PACKAGE).pot.new ]; then if cmp -s $(DIR_PO)/$(PACKAGE).pot.new $(PACKAGE).pot; then rm $(DIR_PO)/$(PACKAGE).pot.new; else mv $(DIR_PO)/$(PACKAGE).pot.new $(DIR_PO)/$(PACKAGE).pot; fi; fi
++
++clean: clean-po clean-dist-translation
++
++clean-po:
++ rm -rf $(DIR_PO)/*.mo
++ for i in $(desktop-files); do if [ -f $$i.in ]; then rm -f $$i; rm -f $$i.in.h; fi; done
++
++%.desktop: %.desktop.in $(patsubst %,$(DIR_PO)/%.po,$(LINGUAS))
++ intltool-merge -u -d $(DIR_PO) $< $@
++
++freshen-po:
++ rm -rf tmp-po
++ mkdir tmp-po
++ cd tmp-po; for LANG in $(LINGUAS); do wget $(TRANSLATION_SITE)/$(PACKAGE)/$$LANG.po; done
++ for LANG in $(LINGUAS); do if [ ! -f $(DIR_PO)/$$LANG.po ] || ! cmp -s $(DIR_PO)/$$LANG.po tmp-po/$$LANG.po ; then mv tmp-po/$$LANG.po $(DIR_PO)/$$LANG.po; echo "Updated $$LANG translation"; fi; done
++ rm -rf tmp-po
++
++# ------------------------------------------------------------------------
++
++MAINTAINER = $(shell grep 'Maintainer: ' familiar/$(CONTROL) | cut -d ' ' -f 2-)
++
++ifndef BUILD
++BUILD = ../build
++endif
++
++transdist := familiar/dist-translation
++templates := $(BUILD)/familiar
++ipkglist := translation-ipkgs.txt
++
++clean-dist-translation:
++ rm -rf $(transdist) $(ipkglist)
++
++real-translation-package: all-mo
++ rm -rf $(transdist) $(ipkglist)
++ for LINGUA in $(LINGUAS); do \
++ i=$$(echo $$LINGUA | tr '[A-Z_]' '[a-z+]'); \
++ mkdir -p $(transdist)/$$i/CONTROL; \
++ mkdir -p $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES; \
++ install -m 644 po/$$LINGUA.mo $(transdist)/$$i$(PREFIX)/share/locale/$$LINGUA/LC_MESSAGES/$(PACKAGE).mo; \
++ sed -e "s/<maintainer>/$(MAINTAINER)/;s/<package>/$(BINPACKAGE)/;s/<version>/$(VERSION)/;s/<language>/$$i/;s!<source>!$(SOURCE)!" $(templates)/control.translation > $(transdist)/$$i/CONTROL/control; \
++ install $(templates)/postinst.translation $(transdist)/$$i/CONTROL/postinst; \
++ $(IPKG_BUILD) -g 0 -o 0 $(transdist)/$$i | sed 's/^Packaged .*into //; t 1; d; : 1; s:.*/::' >> $(ipkglist); \
++ done
++
++translation-ipkg:
++ make PREFIX=/usr real-translation-package
diff --git a/packages/gpe-terminal/gpe-terminal_1.1.bb b/packages/gpe-terminal/gpe-terminal_1.1.bb
index 578f02b712..3d89e355e9 100644
--- a/packages/gpe-terminal/gpe-terminal_1.1.bb
+++ b/packages/gpe-terminal/gpe-terminal_1.1.bb
@@ -1,8 +1,11 @@
-SECTION = "gpe"
-SRC_URI = "file://${PN}.desktop file://${PN}.png"
DESCRIPTION = "GPE terminal wrapper"
-PV = "1.1"
+SECTION = "gpe"
LICENSE = "GPL"
+RRECOMMENDS = "rxvt-unicode"
+PR = "r1"
+
+SRC_URI = "file://${PN}.desktop file://${PN}.png"
+
do_install() {
install -d ${D}${datadir}/applications
install -d ${D}${datadir}/pixmaps
diff --git a/packages/gpe-terminal/gpe-terminal_svn.bb b/packages/gpe-terminal/gpe-terminal_svn.bb
new file mode 100644
index 0000000000..875c675b2c
--- /dev/null
+++ b/packages/gpe-terminal/gpe-terminal_svn.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "GPE terminal wrapper"
+SECTION = "gpe"
+LICENSE = "GPL"
+RRECOMMENDS = "rxvt-unicode"
+PR = "r1"
+PV = "1.1+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${GPE_EXTRA_SVN} \
+ file://svn-build.patch;patch=1 \
+ file://${PN}.desktop \
+ file://${PN}.png"
+
+S = "${WORKDIR}/${PN}"
+
+do_install() {
+ install -d ${D}${datadir}/applications
+ install -d ${D}${datadir}/pixmaps
+ install -m 0644 ${WORKDIR}/${PN}.desktop ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/${PN}.png ${D}${datadir}/pixmaps/
+}
diff --git a/packages/gpe-timesheet/gpe-timesheet.inc b/packages/gpe-timesheet/gpe-timesheet.inc
new file mode 100644
index 0000000000..11c1327752
--- /dev/null
+++ b/packages/gpe-timesheet/gpe-timesheet.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "GPE time tracker"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget gtk+ sqlite libtododb"
+RDEPENDS = "gpe-icons"
+
+inherit autotools gpe
+
+GPE_TARBALL_SUFFIX = "bz2"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.18.bb b/packages/gpe-timesheet/gpe-timesheet_0.18.bb
deleted file mode 100644
index 0cd8b539f0..0000000000
--- a/packages/gpe-timesheet/gpe-timesheet_0.18.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-LICENSE = "GPL"
-inherit gpe
-
-DESCRIPTION = "GPE time tracker"
-DEPENDS = "libgpewidget gtk+ sqlite"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
-
-SRC_URI = "${GPE_MIRROR}/gpe-timesheet-${PV}.tar.gz"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.19.bb b/packages/gpe-timesheet/gpe-timesheet_0.19.bb
deleted file mode 100644
index 0cd8b539f0..0000000000
--- a/packages/gpe-timesheet/gpe-timesheet_0.19.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-LICENSE = "GPL"
-inherit gpe
-
-DESCRIPTION = "GPE time tracker"
-DEPENDS = "libgpewidget gtk+ sqlite"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
-
-SRC_URI = "${GPE_MIRROR}/gpe-timesheet-${PV}.tar.gz"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.20.bb b/packages/gpe-timesheet/gpe-timesheet_0.20.bb
deleted file mode 100644
index 0cd8b539f0..0000000000
--- a/packages/gpe-timesheet/gpe-timesheet_0.20.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-LICENSE = "GPL"
-inherit gpe
-
-DESCRIPTION = "GPE time tracker"
-DEPENDS = "libgpewidget gtk+ sqlite"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
-
-SRC_URI = "${GPE_MIRROR}/gpe-timesheet-${PV}.tar.gz"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.21.bb b/packages/gpe-timesheet/gpe-timesheet_0.21.bb
deleted file mode 100644
index 0cd8b539f0..0000000000
--- a/packages/gpe-timesheet/gpe-timesheet_0.21.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-LICENSE = "GPL"
-inherit gpe
-
-DESCRIPTION = "GPE time tracker"
-DEPENDS = "libgpewidget gtk+ sqlite"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
-
-SRC_URI = "${GPE_MIRROR}/gpe-timesheet-${PV}.tar.gz"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.30.bb b/packages/gpe-timesheet/gpe-timesheet_0.30.bb
index 1e995c2d81..c642bfacb5 100644
--- a/packages/gpe-timesheet/gpe-timesheet_0.30.bb
+++ b/packages/gpe-timesheet/gpe-timesheet_0.30.bb
@@ -1,9 +1,3 @@
-LICENSE = "GPL"
-inherit autotools gpe
+require gpe-timesheet.inc
-DESCRIPTION = "GPE time tracker"
-GPE_TARBALL_SUFFIX = "bz2"
-DEPENDS = "libgpewidget gtk+ sqlite libtododb"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
PR = "r1"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.31.bb b/packages/gpe-timesheet/gpe-timesheet_0.31.bb
index 1e995c2d81..c642bfacb5 100644
--- a/packages/gpe-timesheet/gpe-timesheet_0.31.bb
+++ b/packages/gpe-timesheet/gpe-timesheet_0.31.bb
@@ -1,9 +1,3 @@
-LICENSE = "GPL"
-inherit autotools gpe
+require gpe-timesheet.inc
-DESCRIPTION = "GPE time tracker"
-GPE_TARBALL_SUFFIX = "bz2"
-DEPENDS = "libgpewidget gtk+ sqlite libtododb"
-SECTION = "gpe"
-RDEPENDS = "gpe-icons"
PR = "r1"
diff --git a/packages/gpe-timesheet/gpe-timesheet_0.32.bb b/packages/gpe-timesheet/gpe-timesheet_0.32.bb
new file mode 100644
index 0000000000..9a3b61106c
--- /dev/null
+++ b/packages/gpe-timesheet/gpe-timesheet_0.32.bb
@@ -0,0 +1,3 @@
+require gpe-timesheet.inc
+
+PR = "r0"
diff --git a/packages/gpe-timesheet/gpe-timesheet_svn.bb b/packages/gpe-timesheet/gpe-timesheet_svn.bb
new file mode 100644
index 0000000000..28eb65d31b
--- /dev/null
+++ b/packages/gpe-timesheet/gpe-timesheet_svn.bb
@@ -0,0 +1,10 @@
+require gpe-timesheet.inc
+
+PR = "r1"
+PV = "0.31+svn-${SRCDATE}"
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-today/gpe-today_cvs.bb b/packages/gpe-today/gpe-today_cvs.bb
deleted file mode 100644
index 47e9c01a66..0000000000
--- a/packages/gpe-today/gpe-today_cvs.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-
-DESCRIPTION = "Displays a summary of appointments and tasks for the day ahead"
-DEPENDS = "gtk+ libxrandr libxsettings libxsettings-client libgpewidget libdisplaymigration libeventdb libgpepimc libtododb"
-SECTION = "gpe"
-PRIORITY = "optional"
-
-
-S = "${WORKDIR}/${PN}"
-#Remove the dash below when 0.10 changes in PV
-PV = "0.11+cvs-${SRCDATE}"
-PR = "r0"
-
-inherit gpe
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/${PN} \
- file://Makefile.dpkg_ipkg \
- file://Makefile.translation"
-
-
-do_compile () {
- sed -i 's:CVSBUILD = yes:CVSBUILD = no:' Makefile
- mkdir build
- cp ${WORKDIR}/Makefile.* build/
- oe_runmake PREFIX=${prefix}
- oe_runmake all-desktop PREFIX=${prefix}
-}
-
-
diff --git a/packages/gpe-today/gpe-today_svn.bb b/packages/gpe-today/gpe-today_svn.bb
new file mode 100644
index 0000000000..329e2271ea
--- /dev/null
+++ b/packages/gpe-today/gpe-today_svn.bb
@@ -0,0 +1,24 @@
+SECTION = "gpe"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libxrandr libxsettings libxsettings-client libgpewidget libdisplaymigration libeventdb libgpepimc libtododb"
+PV = "0.11+svn-${SRCDATE}"
+PR = "r0"
+
+inherit gpe
+
+SRC_URI = "${GPE_SVN} \
+ file://Makefile.dpkg_ipkg \
+ file://Makefile.translation"
+
+S = "${WORKDIR}/${PN}"
+
+
+do_compile () {
+ sed -i 's:CVSBUILD = yes:CVSBUILD = no:' Makefile
+ mkdir -p build
+ cp ${WORKDIR}/Makefile.* build/
+ oe_runmake PREFIX=${prefix}
+ oe_runmake all-desktop PREFIX=${prefix}
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-todo/gpe-todo_svn.bb b/packages/gpe-todo/gpe-todo_svn.bb
new file mode 100644
index 0000000000..1bde72df25
--- /dev/null
+++ b/packages/gpe-todo/gpe-todo_svn.bb
@@ -0,0 +1,14 @@
+LICENSE = "GPL"
+DESCRIPTION = "GPE to-do list"
+DEPENDS = "libgpewidget libgpepimc libtododb gtk+"
+SECTION = "gpe"
+PRIORITY = "optional"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+SRC_URI="${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
diff --git a/packages/gpe-what/gpe-what.inc b/packages/gpe-what/gpe-what.inc
new file mode 100644
index 0000000000..fd4307631e
--- /dev/null
+++ b/packages/gpe-what/gpe-what.inc
@@ -0,0 +1,8 @@
+DESCRIPTION = "GPE modal help"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "virtual/libx11 gtk+"
+
+inherit autotools gpe
+
+GPE_TARBALL_SUFFIX= "bz2"
diff --git a/packages/gpe-what/gpe-what_0.30.bb b/packages/gpe-what/gpe-what_0.30.bb
index 9c711a624d..165ea4cc3b 100644
--- a/packages/gpe-what/gpe-what_0.30.bb
+++ b/packages/gpe-what/gpe-what_0.30.bb
@@ -1,9 +1,4 @@
-LICENSE = "GPL"
-SECTION = "gpe"
-inherit gpe
-
-DESCRIPTION = "GPE modal help"
-DEPENDS = "virtual/libx11"
+require gpe-what.inc
do_compile_prepend() {
rm *.d
diff --git a/packages/gpe-what/gpe-what_0.31.bb b/packages/gpe-what/gpe-what_0.31.bb
index 362e573538..50a614bdd2 100644
--- a/packages/gpe-what/gpe-what_0.31.bb
+++ b/packages/gpe-what/gpe-what_0.31.bb
@@ -1,6 +1,3 @@
-LICENSE = "GPL"
-SECTION = "gpe"
-inherit gpe
+require gpe-what.inc
-DESCRIPTION = "GPE modal help"
DEPENDS = "virtual/libx11 libxpm libmatchbox"
diff --git a/packages/gpe-what/gpe-what_0.33.bb b/packages/gpe-what/gpe-what_0.33.bb
index ed7c7577ec..71ae7dac95 100644
--- a/packages/gpe-what/gpe-what_0.33.bb
+++ b/packages/gpe-what/gpe-what_0.33.bb
@@ -1,8 +1,5 @@
-LICENSE = "GPL"
-SECTION = "gpe"
-inherit gpe
+require gpe-what.inc
SRC_URI += "file://makefile-fix.patch;patch=1"
-DESCRIPTION = "GPE modal help"
DEPENDS = "virtual/libx11 libxpm libmatchbox"
diff --git a/packages/gpe-what/gpe-what_0.41.bb b/packages/gpe-what/gpe-what_0.41.bb
index 2cc0dc9c2f..853abec8aa 100644
--- a/packages/gpe-what/gpe-what_0.41.bb
+++ b/packages/gpe-what/gpe-what_0.41.bb
@@ -1,8 +1 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE modal help"
-DEPENDS = "virtual/libx11 gtk+"
-
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit autotools gpe
-
+require gpe-what.inc
diff --git a/packages/gpe-what/gpe-what_0.42.bb b/packages/gpe-what/gpe-what_0.42.bb
index 2cc0dc9c2f..853abec8aa 100644
--- a/packages/gpe-what/gpe-what_0.42.bb
+++ b/packages/gpe-what/gpe-what_0.42.bb
@@ -1,8 +1 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE modal help"
-DEPENDS = "virtual/libx11 gtk+"
-
-
-GPE_TARBALL_SUFFIX= "bz2"
-inherit autotools gpe
-
+require gpe-what.inc
diff --git a/packages/gpe-what/gpe-what_0.43.bb b/packages/gpe-what/gpe-what_0.43.bb
index b82da4ff7f..624f2e365e 100644
--- a/packages/gpe-what/gpe-what_0.43.bb
+++ b/packages/gpe-what/gpe-what_0.43.bb
@@ -1,9 +1,5 @@
-LICENSE = "GPL"
-DESCRIPTION = "GPE modal help"
-DEPENDS = "virtual/libx11 gtk+"
-PR = "r1"
+require gpe-what.inc
-GPE_TARBALL_SUFFIX= "bz2"
-inherit autotools gpe
+PR = "r1"
SRC_URI += " file://set-wm-hint.patch;patch=1;pnum=0"
diff --git a/packages/gpe-what/gpe-what_cvs.bb b/packages/gpe-what/gpe-what_cvs.bb
deleted file mode 100644
index 4572d467b6..0000000000
--- a/packages/gpe-what/gpe-what_cvs.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-LICENSE = "GPL"
-
-DEFAULT_PREFERENCE = "-1"
-S = "${WORKDIR}/${PN}"
-PV = "0.41+cvs${SRCDATE}"
-
-inherit autotools gpe
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/${PN}"
-
-DESCRIPTION = "GPE modal help"
-DEPENDS = "virtual/libx11 gtk+"
diff --git a/packages/gpe-what/gpe-what_svn.bb b/packages/gpe-what/gpe-what_svn.bb
new file mode 100644
index 0000000000..c448751096
--- /dev/null
+++ b/packages/gpe-what/gpe-what_svn.bb
@@ -0,0 +1,9 @@
+require gpe-what.inc
+
+PV = "0.41+svn${SRCDATE}"
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpe-windowlist/gpe-windowlist_cvs.bb b/packages/gpe-windowlist/gpe-windowlist_cvs.bb
deleted file mode 100644
index 245f5c0ff5..0000000000
--- a/packages/gpe-windowlist/gpe-windowlist_cvs.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DEPENDS = "libgpewidget libgpelaunch gtk+"
-SECTION = "gpe"
-DESCRIPTION = "GPE windowlist applet"
-LICENSE = "GPL"
-
-DEFAULT_PREFERENCE = "-1"
-
-PV = "0.1+cvs${SRCDATE}"
-PR = "r1"
-
-inherit autotools gpe
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/${PN}"
-S = "${WORKDIR}/${PN}"
-
-
-
diff --git a/packages/gpe-windowlist/gpe-windowlist_svn.bb b/packages/gpe-windowlist/gpe-windowlist_svn.bb
new file mode 100644
index 0000000000..2f9d18111e
--- /dev/null
+++ b/packages/gpe-windowlist/gpe-windowlist_svn.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "GPE windowlist applet"
+SECTION = "gpe"
+LICENSE = "GPL"
+DEPENDS = "libgpewidget libgpelaunch gtk+"
+PV = "0.1+svn${SRCDATE}"
+PR = "r1"
+
+inherit autotools
+
+SRC_URI = "${GPE_EXTRA_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/addressbook_svn.bb b/packages/gpephone/addressbook_svn.bb
new file mode 100644
index 0000000000..663c38c09c
--- /dev/null
+++ b/packages/gpephone/addressbook_svn.bb
@@ -0,0 +1,19 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS address book"
+SECTION = "gpe"
+PRIORITY = "optional"
+PR = "r0"
+PV = "0.1+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+DEPENDS = "gtk+ libgpewidget libgpephone dbus-glib libabenabler libiac libim"
+
+inherit gpephone autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+
+FILES_${PN} += "${datadir}/database"
diff --git a/packages/linux/linux-smdk2440-2.6.19/.mtn2git_empty b/packages/gpephone/cms92init-0.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-smdk2440-2.6.19/.mtn2git_empty
+++ b/packages/gpephone/cms92init-0.1/.mtn2git_empty
diff --git a/packages/gpephone/cms92init-0.1/oe-install.patch b/packages/gpephone/cms92init-0.1/oe-install.patch
new file mode 100644
index 0000000000..23e321c6bd
--- /dev/null
+++ b/packages/gpephone/cms92init-0.1/oe-install.patch
@@ -0,0 +1,9 @@
+--- cms92init-simple/Makefile~ 2007-05-24 12:14:31.000000000 +0200
++++ cms92init-simple/Makefile 2007-05-24 12:14:31.000000000 +0200
+@@ -12,5 +12,5 @@
+
+ install:
+ install -d $(DESTDIR)/$(PREFIX)/bin
+- install -m755 cms92init $(DESTDIR)/$(PREFIX)/bin
++ install -m 755 cms92init $(DESTDIR)/$(PREFIX)/bin
+
diff --git a/packages/gpephone/cms92init_0.1.bb b/packages/gpephone/cms92init_0.1.bb
index ab0388a45d..4b943f4a6d 100644
--- a/packages/gpephone/cms92init_0.1.bb
+++ b/packages/gpephone/cms92init_0.1.bb
@@ -7,7 +7,8 @@ PR = "r0"
inherit gpephone
-SRC_URI = "${GPEPHONE_MIRROR}/GPRS/GPRS-${PV}.tar.bz2"
+SRC_URI = "${GPEPHONE_MIRROR}/GPRS/GPRS-${PV}.tar.bz2 \
+ file://oe-install.patch;patch=1"
S = ${WORKDIR}/GPRS/cms92init-simple
diff --git a/packages/gpephone/connect_0.1.bb b/packages/gpephone/connect_0.1.bb
index c5ce0a0d54..a3171eef97 100644
--- a/packages/gpephone/connect_0.1.bb
+++ b/packages/gpephone/connect_0.1.bb
@@ -17,6 +17,6 @@ do_compile() {
do_install() {
install -d ${D}/${prefix}/bin
- install -m755 connect ${D}/${prefix}/bin
- install -m755 disconnect ${D}/${prefix}/bin
+ install -m 755 connect ${D}/${prefix}/bin
+ install -m 755 disconnect ${D}/${prefix}/bin
}
diff --git a/packages/gpephone/gpe-applauncher_0.8.bb b/packages/gpephone/gpe-applauncher_0.8.bb
new file mode 100644
index 0000000000..641511ad5b
--- /dev/null
+++ b/packages/gpephone/gpe-applauncher_0.8.bb
@@ -0,0 +1,12 @@
+LICENSE = "GPL"
+DESCRIPTION = "A cellphone application launcher."
+SECTION = "gpe"
+PRIORITY = "optional"
+PR = "r0"
+
+DEPENDS = "gtk+ libgpewidget libgpephone libgpelaunch dbus-glib libsettings"
+
+GPE_TARBALL_SUFFIX= "bz2"
+inherit gpephone autotools
+
+FILES_${PN} += '${datadir}/themes'
diff --git a/packages/gpephone/gpe-applauncher_0.9.bb b/packages/gpephone/gpe-applauncher_0.9.bb
new file mode 100644
index 0000000000..fbc47bd091
--- /dev/null
+++ b/packages/gpephone/gpe-applauncher_0.9.bb
@@ -0,0 +1,12 @@
+LICENSE = "GPL"
+DESCRIPTION = "A cellphone application launcher."
+SECTION = "gpe"
+PRIORITY = "optional"
+PR = "r0"
+
+DEPENDS = "gtk+ libgpewidget libgpephone libgpelaunch dbus-glib libsettings libxsettings-client"
+
+GPE_TARBALL_SUFFIX= "bz2"
+inherit gpephone autotools
+
+FILES_${PN} += '${datadir}/themes'
diff --git a/packages/gpephone/gpe-phonepanel_0.9.bb b/packages/gpephone/gpe-phonepanel_0.9.bb
new file mode 100644
index 0000000000..f9e2f04867
--- /dev/null
+++ b/packages/gpephone/gpe-phonepanel_0.9.bb
@@ -0,0 +1,12 @@
+LICENSE = "GPL"
+DESCRIPTION = "A cellphone status panel to be used with gpe-applauncher."
+SECTION = "gpe"
+PRIORITY = "optional"
+PR = "r0"
+
+DEPENDS = "gtk+ libgpephone dbus-glib libsettings"
+
+GPE_TARBALL_SUFFIX= "bz2"
+inherit gpephone autotools
+
+FILES_${PN} += "${datadir}/themes"
diff --git a/packages/gpephone/gpe-session-scripts-phone/phonesession b/packages/gpephone/gpe-session-scripts-phone/phonesession
index 8fb5065d67..2dacc4c4c9 100755
--- a/packages/gpephone/gpe-session-scripts-phone/phonesession
+++ b/packages/gpephone/gpe-session-scripts-phone/phonesession
@@ -30,12 +30,27 @@ export TINYMAIL_CACHE_DIR=$APP_PATH/share/tinymail.cache
# For Calendar
export CAL_RES_PATH=$APP_PATH/share/res
+# For GTK input engine
+if [ -d /usr/lib/gtk-2.0/2.10.0 ]; then
+ export PTIM_PATH=/usr/lib/gtk-2.0/2.10.0/immodules/ptim
+else
+ export PTIM_PATH=/usr/lib/gtk-2.0/2.4.0/immodules/ptim
+fi
+
+export PTIM_PIXMAPS_PATH=$PTIM_PATH/pixmaps
+export PTIM_CONFIG_FILE=$PTIM_PATH/imconfig
+export PTIM_HELPER_PATH=$PTIM_PATH/helper
+export PTIM_ENGINE_PATH=$PTIM_PATH/engine
+export GTK_IM_MODULE=ptim
+
# Start GPE Phone Edition apps through matchbox session
-gpe-applauncher&
-sleep 2
gpe-phonepanel&
+gpe-applauncher&
matchbox-window-manager -use_titlebar no&
+# start device support daemon
+machined
+
# Start E-Sound Server
esd -nobeeps -as 2&
esdplay /mnt/sd/sounds/startup.wav
@@ -48,5 +63,8 @@ soundserver &
#cms92init &
gsmMux -d -p /dev/ttyS0 -m cms92 -f 128 -b 115200 -c /dev/ptmx /dev/ptmx &
-# Start PhoneServer
-phoneserver
+#save session bus address to a file
+echo $DBUS_SESSION_BUS_ADDRESS > /tmp/dbusaddress
+
+# Start PhoneServer - do not stop, it keeps the session running
+exec phoneserver
diff --git a/packages/gpephone/gpe-session-scripts-phone/standard-apps.patch b/packages/gpephone/gpe-session-scripts-phone/standard-apps.patch
new file mode 100644
index 0000000000..3be47c03b2
--- /dev/null
+++ b/packages/gpephone/gpe-session-scripts-phone/standard-apps.patch
@@ -0,0 +1,23 @@
+--- gpe-session-scripts/X11/Xsession.d/98standard-apps~ 2007-04-18 18:54:59.000000000 +0200
++++ gpe-session-scripts/X11/Xsession.d/98standard-apps 2007-04-18 18:54:59.000000000 +0200
+@@ -7,20 +7,3 @@
+ else
+ time_set_already=no
+ fi
+-
+-# No action if .mbdock exists
+-if [ ! -f $HOME/.matchbox/mbdock.session ]; then
+- mkdir -p $HOME/.matchbox
+- cp /etc/gpe/gpe.mbdock $HOME/.matchbox/mbdock.session
+-
+- if [ "$time_set_already" = "no" ]; then
+- gpe-conf time user_only &
+- fi
+-
+- gpe-question --icon !gtk-dialog-info --question "<b>Welcome to GPE!</b>
+-
+-I have added some standard programs to the panel at the bottom of the screen.
+-
+-To remove these, or add more, tap and hold on an empty area of the panel." --buttons !gtk-ok &
+-fi
+-
diff --git a/packages/gpephone/gpe-session-scripts-phone_0.67.bb b/packages/gpephone/gpe-session-scripts-phone_0.67.bb
index afa4fb1683..730a549aef 100644
--- a/packages/gpephone/gpe-session-scripts-phone_0.67.bb
+++ b/packages/gpephone/gpe-session-scripts-phone_0.67.bb
@@ -11,9 +11,10 @@ SRC_URI = "${GPE_MIRROR}/gpe-session-scripts-${PV}.tar.gz \
file://matchbox-session \
file://matchbox-session.vm \
file://phonesession \
- file://disable-composite.xsettings"
+ file://disable-composite.xsettings \
+ file://standard-apps.patch;patch=1"
-PR = "r2"
+PR = "r7"
S = "${WORKDIR}/gpe-session-scripts-${PV}"
@@ -33,7 +34,7 @@ do_install_append() {
mv ${D}/usr/bin/gpe-logout ${D}/usr/bin/gpe-logout.matchbox
install -d ${D}${sysconfdir}/X11
- install -m755 ${WORKDIR}/phonesession ${D}${sysconfdir}/X11/phonesession
+ install -m 755 ${WORKDIR}/phonesession ${D}${sysconfdir}/X11/phonesession
}
do_install_append_x86() {
diff --git a/packages/gpephone/iksemel_1.2.bb b/packages/gpephone/iksemel_1.2.bb
deleted file mode 100644
index 40ad32ce0e..0000000000
--- a/packages/gpephone/iksemel_1.2.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "A simple, powerful XML-parsing library written in C."
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "glibc"
-PR = "r0"
-
-inherit pkgconfig autotools
-
-SRC_URI = "http://files.jabberstudio.org/iksemel/${P}.tar.gz"
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/gpephone/libabenabler_0.1.bb b/packages/gpephone/libabenabler_0.1.bb
index 7a8efb8382..c76d8f469b 100644
--- a/packages/gpephone/libabenabler_0.1.bb
+++ b/packages/gpephone/libabenabler_0.1.bb
@@ -1,5 +1,5 @@
LICENSE = "LGPL"
-DESCRIPTION = "LiPS event model library."
+DESCRIPTION = "LiPS address book library."
SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 librecord liblipsevent libim sqlite3"
diff --git a/packages/gpephone/libabenabler_svn.bb b/packages/gpephone/libabenabler_svn.bb
new file mode 100644
index 0000000000..f362c853d6
--- /dev/null
+++ b/packages/gpephone/libabenabler_svn.bb
@@ -0,0 +1,21 @@
+LICENSE = "LGPL"
+DESCRIPTION = "LiPS address book library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 librecord liblipsevent libim sqlite3"
+PR = "r0"
+PV = "0.1+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+LDFLAGS += " -L${STAGING_LIBDIR}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libcalenabler_1.0.bb b/packages/gpephone/libcalenabler_1.0.bb
index f4be78092e..c23e1b42a5 100644
--- a/packages/gpephone/libcalenabler_1.0.bb
+++ b/packages/gpephone/libcalenabler_1.0.bb
@@ -1,5 +1,5 @@
LICENSE = "LiPS"
-DESCRIPTION = "LiPS event model library."
+DESCRIPTION = "LiPS calendar database backend library."
SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 e2fsprogs-libs sqlite3"
diff --git a/packages/linux/linux-titan-sh4-2.6.17/.mtn2git_empty b/packages/gpephone/libgemwidget/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-titan-sh4-2.6.17/.mtn2git_empty
+++ b/packages/gpephone/libgemwidget/.mtn2git_empty
diff --git a/packages/gpephone/libgemwidget/gemfilechooser-NULL-callback.patch b/packages/gpephone/libgemwidget/gemfilechooser-NULL-callback.patch
new file mode 100644
index 0000000000..8b5b372ff6
--- /dev/null
+++ b/packages/gpephone/libgemwidget/gemfilechooser-NULL-callback.patch
@@ -0,0 +1,12 @@
+--- /tmp/gemfilechooser.c 2007-05-08 10:05:21.000000000 +0200
++++ libgemwidget-0.1/src/gemfilechooser.c 2007-05-08 10:13:59.015251000 +0200
+@@ -640,7 +640,8 @@
+ folder = gtk_file_system_get_folder(filechooser->file_system,
+ path,
+ GTK_FILE_INFO_ALL,
+- &error);
++ NULL,
++ &error);
+ if (folder == NULL)
+ {
+ g_print("%s(): get folder error: %s\n",
diff --git a/packages/gpephone/libgemwidget_0.1.bb b/packages/gpephone/libgemwidget_0.1.bb
index 40264b9bb2..0b670e485d 100644
--- a/packages/gpephone/libgemwidget_0.1.bb
+++ b/packages/gpephone/libgemwidget_0.1.bb
@@ -2,12 +2,16 @@ LICENSE = "LiPS"
DESCRIPTION = "Extended widget library for GPE phone environment."
SECTION = "gpe/libs"
PRIORITY = "optional"
-DEPENDS = "gtk+ libiac"
+DEPENDS = "gtk+ libiac libgpephone"
PR = "r1"
GPE_TARBALL_SUFFIX = "bz2"
inherit gpephone pkgconfig autotools
+# This really is not angstrom specific, but gtk 2.10 specific
+# for a better solution: "patches accepted"
+SRC_URI_append_angstrom = " file://gemfilechooser-NULL-callback.patch;patch=1"
+
do_stage () {
autotools_stage_all
}
diff --git a/packages/gpephone/libgpephone_0.4.bb b/packages/gpephone/libgpephone_0.4.bb
new file mode 100644
index 0000000000..690b3eded6
--- /dev/null
+++ b/packages/gpephone/libgpephone_0.4.bb
@@ -0,0 +1,13 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Base library for GPE phone environment."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ gtk-doc dbus-glib"
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit gpephone pkgconfig autotools
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libim_0.2.bb b/packages/gpephone/libim_0.2.bb
index 4d59957d79..a802aface5 100644
--- a/packages/gpephone/libim_0.2.bb
+++ b/packages/gpephone/libim_0.2.bb
@@ -1,5 +1,5 @@
LICENSE = "LGPL"
-DESCRIPTION = "LiPS event model library."
+DESCRIPTION = "LiPS instant messenger library."
SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 libgpg-error libgcrypt gnutls libidn iksemel gloox dbus-glib liblipsevent"
diff --git a/packages/gpephone/libmsgenabler_1.0.bb b/packages/gpephone/libmsgenabler_1.0.bb
index 385501c959..0522507db0 100644
--- a/packages/gpephone/libmsgenabler_1.0.bb
+++ b/packages/gpephone/libmsgenabler_1.0.bb
@@ -1,5 +1,5 @@
LICENSE = "LiPS"
-DESCRIPTION = "LiPS event model library."
+DESCRIPTION = "LiPS message backend library."
SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 dbus-glib librecord sqlite3"
diff --git a/packages/gpephone/librecord2_0.1.bb b/packages/gpephone/librecord2_0.1.bb
new file mode 100644
index 0000000000..532cc267ff
--- /dev/null
+++ b/packages/gpephone/librecord2_0.1.bb
@@ -0,0 +1,15 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS database API."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 e2fsprogs-libs sqlite3"
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit gpephone pkgconfig autotools
+
+LDFLAGS += " -L${STAGING_LIBDIR}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/librecord2_svn.bb b/packages/gpephone/librecord2_svn.bb
new file mode 100644
index 0000000000..6580f6566f
--- /dev/null
+++ b/packages/gpephone/librecord2_svn.bb
@@ -0,0 +1,27 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS database API."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 e2fsprogs-libs sqlite3"
+PR = "r0"
+PV = "0.1+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} += " ${libdir}/*.so.*"
+FILES_${PN}-dbg += "${libdir}/.debug/*.so.*"
+FILES_${PN}-dev += "${includedir} ${libdir}/*.la ${libdir}/*.so"
+
+
+LDFLAGS += " -L${STAGING_LIBDIR}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libsettings_svn.bb b/packages/gpephone/libsettings_svn.bb
new file mode 100644
index 0000000000..e436849d74
--- /dev/null
+++ b/packages/gpephone/libsettings_svn.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "G(PE)^2 settings API library"
+SECTION = "gpe/libs"
+PRIORITY = "required"
+LICENSE = "LiPS"
+DEPENDS = "glib-2.0 gconf-dbus"
+PV = "0.0+svn-${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+FILES_${PN} += " ${libdir}/*.so.*"
+FILES_${PN}-dbg += "${libdir}/.debug/*.so.*"
+FILES_${PN}-dev += "${includedir} ${libdir}/*.la ${libdir}/*.so"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libvocenabler_0.1.bb b/packages/gpephone/libvocenabler_0.1.bb
index 0b2d23747c..1dfa5068d0 100644
--- a/packages/gpephone/libvocenabler_0.1.bb
+++ b/packages/gpephone/libvocenabler_0.1.bb
@@ -9,6 +9,12 @@ GPE_TARBALL_SUFFIX = "gz"
inherit gpephone pkgconfig autotools
+do_compile_prepend() {
+ for i in `find . -name "Makefile"` ; do
+ sed -i -e s:I/usr/include:I${STAGING_INCDIR}:g $i
+ done
+}
+
do_stage () {
autotools_stage_all
}
diff --git a/packages/gpephone/linphone_1.5.0.bb b/packages/gpephone/linphone_1.5.0.bb
index bef090e22a..92e08e6183 100644
--- a/packages/gpephone/linphone_1.5.0.bb
+++ b/packages/gpephone/linphone_1.5.0.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "SIP-based IP phone"
HOMEPAGE = "http://www.linphone.org/?lang=us"
LICENSE = "GPLv2"
DEPENDS = "libosip2 speex libogg alsa-lib readline"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://download.savannah.nongnu.org/releases/linphone/1.5.x/source/linphone-${PV}.tar.gz \
file://linphone-1.5.0.patch;patch=1 \
@@ -26,7 +26,7 @@ do_configure () {
}
do_compile () {
- oe_runmake "LIBTOOL=${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool" LIBTOOL="${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool"
+ oe_runmake LIBTOOL="${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool" SPEEX_LIBS="-lspeex" SPEEX_CFLAGS=" "
}
do_install () {
@@ -41,7 +41,7 @@ do_install_append() {
do_stage() {
export LIBTOOL="${STAGING_BINDIR_NATIVE}/${TARGET_PREFIX}libtool"
autotools_stage_all
- cp ${S}/mediastreamer2/src/libquickstream.la ${STAGING_LIBDIR}
- cp ${S}/mediastreamer2/src/libmediastreamer.la ${STAGING_LIBDIR}
- cp ${S}/coreapi/liblinphone.la ${STAGING_LIBDIR}
+ rm ${STAGING_LIBDIR}/libquickstream.la
+ rm ${STAGING_LIBDIR}/libmediastreamer.la
+ rm ${STAGING_LIBDIR}/liblinphone.la
}
diff --git a/packages/gpephone/machined_svn.bb b/packages/gpephone/machined_svn.bb
new file mode 100644
index 0000000000..5c96cfa97c
--- /dev/null
+++ b/packages/gpephone/machined_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Device abstraction and support daemon"
+SECTION = "gpephone"
+PRIORITY = "required"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 dbus-glib gtk+"
+PV = "0.1+svn-${SRCDATE}"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/;module=${PN}"
+
+S = "${WORKDIR}/${PN}"
diff --git a/packages/gpephone/phoneserver/phoneserver-gta01.patch b/packages/gpephone/phoneserver/phoneserver-gta01.patch
new file mode 100644
index 0000000000..fc5968ef5a
--- /dev/null
+++ b/packages/gpephone/phoneserver/phoneserver-gta01.patch
@@ -0,0 +1,391 @@
+diff -u -r phoneserver-1.0/config.h phoneserver-1.0-mine/config.h
+--- phoneserver-1.0/config.h 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/config.h 2007-07-10 15:06:28.000000000 +0200
+@@ -21,8 +21,7 @@
+
+ /* serial port name */
+ #ifndef SERIAL_PORT
+-//#define SERIAL_PORT "/dev/pts/0" //ttyS1"
+-#define SERIAL_PORT "/dev/ttyS1" //ttyS1"
++#define SERIAL_PORT "/dev/ttySAC0" /* NEO1973 */
+ #endif /* */
+
+ /* serial port baudrate */
+@@ -30,6 +29,8 @@
+ #define SERIAL_BAUDRATE B115200
+ #endif /* */
+
++#define CRTSCTS 1 /* NEO needs RTS/CTS flow control */
++
+ /* buffer to hold AT command response */
+ #ifndef ATCOMMAND_BUFFER_SIZE
+ #define ATCOMMAND_BUFFER_SIZE 10240
+diff -u -r phoneserver-1.0/Makefile.am phoneserver-1.0-mine/Makefile.am
+--- phoneserver-1.0/Makefile.am 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/Makefile.am 2007-07-10 13:14:47.000000000 +0200
+@@ -3,7 +3,7 @@
+
+ INCLUDES = @DEPS_CFLAGS@ -DPREFIX=\"@prefix@\" -D_GNU_SOURCE -Wall \
+ -DDBUS_API_SUBJECT_TO_CHANGE \
+- -DDEBUG -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -DCELLON_PLATFORM
++ -DDEBUG -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -DT39_PLATFORM -DNEO1973
+ LDADD = @DEPS_LIBS@
+
+
+diff -u -r phoneserver-1.0/Makefile.in phoneserver-1.0-mine/Makefile.in
+--- phoneserver-1.0/Makefile.in 2007-02-02 13:25:43.000000000 +0100
++++ phoneserver-1.0-mine/Makefile.in 2007-07-10 13:07:16.000000000 +0200
+@@ -158,7 +158,7 @@
+ target_alias = @target_alias@
+ INCLUDES = @DEPS_CFLAGS@ -DPREFIX=\"@prefix@\" -D_GNU_SOURCE -Wall \
+ -DDBUS_API_SUBJECT_TO_CHANGE \
+- -DDEBUG -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -DCELLON_PLATFORM
++ -DDEBUG -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -DT39_PLATFORM
+
+ LDADD = @DEPS_LIBS@
+ phoneserver_SOURCES = phoneserver.c phone-server-voc.c phone-server-sms.c phone-server-mul.c phone-server-pbk.c \
+diff -u -r phoneserver-1.0/phoneserver.c phoneserver-1.0-mine/phoneserver.c
+--- phoneserver-1.0/phoneserver.c 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/phoneserver.c 2007-07-10 13:43:57.000000000 +0200
+@@ -324,22 +324,31 @@
+ phonebook_update_entry_handler);
+ #endif
+
++#ifdef NEO1973
++ system("echo 1 > /sys/devices/platform/gta01-pm-gsm.0/power_on");
++ sleep(1);
++#endif
++
+ // tapi begins
+ // Initialize
+ result = tapi_initialize ();
+
+ // Get file descripter
+- if (result == TEL_ERR_NONE)
+- {
++ if (result == TEL_ERR_NONE) {
+ result = tel_get_fd (sid, (UInt32 *) & g_fd);
++ } else {
++ /* without modem there is nothing we can do */
++ exit(1);
+ }
++
+ // Open session
+- if (result == TEL_ERR_NONE)
+- {
++ if (result == TEL_ERR_NONE) {
+ result = tel_open_session (&sid);
++ } else {
++ /* without fd we are as well useless */
++ exit(1);
+ }
+
+-
+ if (result == TEL_ERR_NONE)
+ {
+ /* pbk section */
+@@ -357,6 +366,9 @@
+ tel_evt_register (sid, TEL_EVENT_MTSMS, sms_incoming_cb, NULL);
+ tel_evt_register (sid, TEL_EVENT_STATUS_REPORT, sta_report_cb, NULL);
+
++ } else {
++ /* without session we are also lost */
++ exit(1);
+ }
+ // tapi ends
+ #if 1
+diff -u -r phoneserver-1.0/phone-server-voc.c phoneserver-1.0-mine/phone-server-voc.c
+--- phoneserver-1.0/phone-server-voc.c 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/phone-server-voc.c 2007-07-10 16:38:12.000000000 +0200
+@@ -1028,6 +1028,7 @@
+ g_print ("$$$$$$$$$$$$$$$$$$$notify VOC about the %s, and call_id = %d\n",
+ pmethod, call_id);
+
++#if 0
+ //0803
+
+ guint index;
+@@ -1038,7 +1039,7 @@
+ ("###The held call which is going to be hungup is equal to: %d, index=%d,cid=%d",
+ call_id, index, cid_dbus);
+ //0803
+-
++#endif
+
+ if (!strcmp (pmethod, "accept"))
+ {
+diff -u -r phoneserver-1.0/serial.c phoneserver-1.0-mine/serial.c
+--- phoneserver-1.0/serial.c 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/serial.c 2007-07-10 15:07:14.000000000 +0200
+@@ -124,7 +124,7 @@
+
+
+ /* Open a device with standard options.
+- *Use value (-1) for "with_hw_handshake" if its specification is required from the user.
++ * Use value (-1) for "with_hw_handshake" if its specification is required from the user.
+ */
+ int
+ serial_opendevice (const Int8 *file, Int32 with_odd_parity, Int32 with_async)
+@@ -148,8 +148,7 @@
+
+ /* Set port settings for canonical input processing */
+ tp.c_cflag = B0 | CS8 | CLOCAL | CREAD | HUPCL;
+- if (with_odd_parity)
+- {
++ if (with_odd_parity) {
+ tp.c_cflag |= (PARENB | PARODD);
+ tp.c_iflag = 0;
+ }
+@@ -157,35 +156,36 @@
+ tp.c_iflag = IGNPAR;
+
+ #ifdef CRTSCTS
++ tp.c_cflag |= CRTSCTS;
++#else
+ tp.c_cflag &= ~CRTSCTS;
+-
+-#endif /* */
++#endif
+ tp.c_oflag = 0;
+ tp.c_lflag = 0;
+ tp.c_cc[VMIN] = 1;
+ tp.c_cc[VTIME] = 0;
++
+ retcode = tcflush (fd, TCIFLUSH);
+- if (retcode == -1)
+- {
++ if (retcode == -1) {
+ perror ("Gnokii serial_opendevice: tcflush");
+ serial_close (fd);
+ return -1;
+ }
++
+ retcode = tcsetattr (fd, TCSANOW, &tp);
+- if (retcode == -1)
+- {
++ if (retcode == -1) {
+ perror ("Gnokii serial_opendevice: tcsetattr");
+ serial_close (fd);
+ return -1;
+ }
++
+ serial_changespeed (fd, 115200);
+
+ /* We need to turn off O_NONBLOCK now (we have CLOCAL set so it is safe).
+ *When we run some device script it really doesn't expect NONBLOCK!
+ */
+ retcode = fcntl (fd, F_SETFL, 0);
+- if (retcode == -1)
+- {
++ if (retcode == -1) {
+ perror ("Gnokii serial_opendevice: fnctl(F_SETFL)");
+ serial_close (fd);
+ return -1;
+@@ -195,8 +195,7 @@
+
+ #if !(__unices__)
+ retcode = fcntl (fd, F_SETOWN, getpid ());
+- if (retcode == -1)
+- {
++ if (retcode == -1) {
+ perror ("Gnokii serial_opendevice: fnctl(F_SETOWN)");
+ serial_close (fd);
+ return -1;
+@@ -223,12 +222,12 @@
+
+ # endif
+ #endif /* */
+- if (retcode == -1)
+- {
++ if (retcode == -1) {
+ perror ("Gnokii serial_opendevice: fnctl(F_SETFL)");
+ serial_close (fd);
+ return -1;
+ }
++
+ return fd;
+ }
+
+@@ -240,15 +239,16 @@
+ unsigned int flags;
+
+ flags = TIOCM_DTR;
++
+ if (dtr)
+ ioctl (fd, TIOCMBIS, &flags);
+-
+ else
+ ioctl (fd, TIOCMBIC, &flags);
++
+ flags = TIOCM_RTS;
++
+ if (rts)
+ ioctl (fd, TIOCMBIS, &flags);
+-
+ else
+ ioctl (fd, TIOCMBIC, &flags);
+ }
+@@ -262,6 +262,7 @@
+ FD_SET (fd, &readfds);
+ return select (fd + 1, &readfds, NULL, NULL, timeout);
+ }
++
+ static int
+ serial_wselect (int fd, struct timeval *timeout)
+ {
+@@ -361,12 +362,9 @@
+ {
+ bs = n;
+ got = write (fd, buf + r, bs);
+- if (got == 0)
+- {
+- g_print ("Serial write: oops, zero byte has written!\n");
+- }
+- else if (got < 0)
+- {
++ if (got == 0) {
++ g_print ("Serial write: oops, zero byte written!\n");
++ } else if (got < 0) {
+ if (errno == EINTR)
+ continue;
+ if (errno != EAGAIN)
+diff -u -r phoneserver-1.0/tapi.c phoneserver-1.0-mine/tapi.c
+--- phoneserver-1.0/tapi.c 2007-02-02 13:20:13.000000000 +0100
++++ phoneserver-1.0-mine/tapi.c 2007-07-10 16:51:22.000000000 +0200
+@@ -112,6 +112,7 @@
+ /************************************************************************/
+ /* Initialization Function Block */
+ /************************************************************************/
++tel_err_t tapi_Init_PowerOn ();
+ tel_err_t tapi_Init_SoftReset ();
+ tel_err_t tapi_Init_SetNoEcho ();
+ tel_err_t tapi_Init_SetCharset ();
+@@ -287,6 +288,7 @@
+
+ ****************/
+ static init_function init_func_table[] = {
++ tapi_Init_PowerOn,
+ tapi_Init_SoftReset,
+ tapi_Init_SetNoEcho,
+ tapi_Init_SetCharset,
+@@ -477,6 +479,18 @@
+
+
+ tel_err_t
++tapi_Init_PowerOn ()
++{
++ tel_err_t result;
++ Int8 *CommandStr;
++
++ /* AT+CFUN=1 */
++ CommandStr = AT_Builder_ExeCmd ((Int8 *) CMD_CFUN, (Int8 *) "=1", (Int8 *) NULL);
++ result = tapi_init_general (CommandStr);
++ return result;
++}
++
++tel_err_t
+ tapi_Init_SoftReset ()
+ {
+ tel_err_t result;
+@@ -516,7 +530,7 @@
+ //TODO: This phone does not support "HEX", we should set it to HEX
+ #ifdef T39_PLATFORM
+ CommandStr =
+- AT_Builder_SetCmd ((Int8 *) CMD_CSCS, (Int8 *) "\"UTF-8\"", (Int8 *) NULL);
++ AT_Builder_SetCmd ((Int8 *) CMD_CSCS, (Int8 *) "\"8859-1\"", (Int8 *) NULL);
+ #endif
+ #ifdef CELLON_PLATFORM
+ CommandStr =
+@@ -689,8 +703,8 @@
+ (Int8 *) "0", (Int8 *) "1", (Int8 *) "0", (Int8 *) NULL);
+ #else
+ CommandStr =
+- AT_Builder_SetCmd ((Int8 *) CMD_CNMI, (Int8 *) "3", (Int8 *) "1",
+- (Int8 *) "0", (Int8 *) "0", (Int8 *) "0", (Int8 *) NULL);
++ AT_Builder_SetCmd ((Int8 *) CMD_CNMI, (Int8 *) "2", (Int8 *) "1",
++ (Int8 *) "0", (Int8 *) "1", (Int8 *) "0", (Int8 *) NULL);
+ #endif
+ result = tapi_init_general (CommandStr);
+ return result;
+@@ -1737,7 +1751,7 @@
+ (*evt)->evt_data.async_data.cb = tel_ctx.cur_async_evt.cb;
+ (*evt)->evt_data.async_data.user_data = tel_ctx.cur_async_evt.user_data;
+ #ifdef DEBUG
+- //g_print("sms data is --> %s\n", data->user_data[0].text);
++ g_print("sms data is --> %s\n", data->user_data[0].text);
+ #endif
+ return TEL_ERR_NONE;
+ }
+@@ -1979,14 +1993,14 @@
+ sscanf (param_str, "%d", &index);
+ entry->index = index;
+ #ifdef DEBUG
+- //g_print("index -> %d\n", index);
++ g_print("index -> %d\n", index);
+ #endif
+ /* number */
+ param_str = (Int8 *) g_ptr_array_index (param, 1);
+ //exclude the quotation
+ memcpy (entry->number.number, param_str + 1, strlen (param_str) - 2);
+ #ifdef DEBUG
+- //g_print("number -> %s\n", entry->number.number);
++ g_print("number -> %s\n", entry->number.number);
+ #endif
+ /* type */
+ param_str = (Int8 *) g_ptr_array_index (param, 2);
+@@ -1994,7 +2008,7 @@
+ entry->number.npi = index & 0xF;
+ entry->number.ton = (index & 0x70) >> 4;
+ #ifdef DEBUG
+- //g_print("type -> %s\n", param_str);
++ g_print("type -> %s\n", param_str);
+ #endif
+ /* text */
+ param_str = (Int8 *) g_ptr_array_index (param, 3);
+@@ -2015,7 +2029,7 @@
+ char_unicode_decode (entry->text, entry_textbuffer, len);
+ #endif
+ #ifdef DEBUG
+- //g_print("text -> %s\n", entry->text);
++ g_print("text -> %s\n", entry->text);
+ #endif
+ AT_Parser_Free (param);
+ /* add the entry into array */
+@@ -2524,11 +2538,11 @@
+ tel_call_info_change_t *call_status = g_new0 (tel_call_info_change_t, 1);
+ at_command_buffer_t *cmd_buffer;
+
+- //g_print("AT_UNSO_PPURC_Handler called\n");
+-// cmd_buffer = tapi_get_cmd_buffer(in_buffer, CMD_PPURC, 0, NULL);
++ g_print("AT_UNSO_PPURC_Handler called\n");
++ cmd_buffer = tapi_get_cmd_buffer(in_buffer, CMD_PPURC, 0, NULL);
+ #ifdef DEBUG
+- //g_print("====cur parser pos is ---> %d\n", tel_ctx.cur_parser_pos);
+- //g_print("====total parser item is ---> %d\n", tel_ctx.cur_resp.cmd->len);
++ g_print("====cur parser pos is ---> %d\n", tel_ctx.cur_parser_pos);
++ g_print("====total parser item is ---> %d\n", tel_ctx.cur_resp.cmd->len);
+ #endif
+ cmd_buffer =
+ tapi_get_cmd_buffer (in_buffer, CMD_PPURC, tel_ctx.cur_parser_pos - 1,
+@@ -3749,8 +3763,10 @@
+ break;
+ case TEL_HANGUPALL:
+ /* +CHUP */
++ //CommandStr =
++ // AT_Builder_ExeCmd ((Int8 *) CMD_CHUP, (Int8 *) NULL, (Int8 *) NULL);
+ CommandStr =
+- AT_Builder_ExeCmd ((Int8 *) CMD_CHUP, (Int8 *) NULL, (Int8 *) NULL);
++ AT_Builder_ExeCmd ((Int8 *) "H", (Int8 *) NULL, (Int8 *) NULL);
+ break;
+ case TEL_HANGUPACTIVE_ACCEPTOTHER:
+ /* +CHLD=1 */
+@@ -3859,7 +3875,8 @@
+ break;
+ case TEL_HANGUPALL:
+ /* +CHUP */
+- AT_Builder_AppendCmd ((Int8 *) CMD_CHUP, (Int8 *) NULL, (Int8 *) NULL);
++ //AT_Builder_AppendCmd ((Int8 *) CMD_CHUP, (Int8 *) NULL, (Int8 *) NULL);
++ AT_Builder_AppendCmd ((Int8 *) "H", (Int8 *) NULL, (Int8 *) NULL);
+ break;
+ case TEL_HANGUPACTIVE_ACCEPTOTHER:
+ /* +CHLD=1 */
diff --git a/packages/gpephone/phoneserver_1.0.bb b/packages/gpephone/phoneserver_1.0.bb
index 522d31cee1..1415951473 100644
--- a/packages/gpephone/phoneserver_1.0.bb
+++ b/packages/gpephone/phoneserver_1.0.bb
@@ -2,12 +2,15 @@ LICENSE = "LiPS"
DESCRIPTION = "Phone services server"
SECTION = "gpe"
PRIORITY = "optional"
-PR = "r1"
+PR = "r3"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
DEPENDS = "dbus-glib glib-2.0 libmsgenabler libabenabler"
GPE_TARBALL_SUFFIX= "bz2"
inherit gpephone autotools
-SRC_URI += "file://changeport.patch;patch=1;pnum=0"
+SRC_URI_append_x86 = " file://changeport.patch;patch=1;pnum=0"
+SRC_URI_append_fic-gta01 = " file://phoneserver-gta01.patch;patch=1"
diff --git a/packages/linux/linux-turbostation/2.6.20.1/.mtn2git_empty b/packages/gpephone/ptim-engine/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-turbostation/2.6.20.1/.mtn2git_empty
+++ b/packages/gpephone/ptim-engine/.mtn2git_empty
diff --git a/packages/gpephone/ptim-engine/gtkmodule-location.patch b/packages/gpephone/ptim-engine/gtkmodule-location.patch
new file mode 100644
index 0000000000..6882f1239d
--- /dev/null
+++ b/packages/gpephone/ptim-engine/gtkmodule-location.patch
@@ -0,0 +1,11 @@
+--- src/Makefile.am~ 2007-04-05 16:49:43.000000000 +0200
++++ src/Makefile.am 2007-04-05 16:49:43.000000000 +0200
+@@ -3,7 +3,7 @@
+ GTK_PREFIX=`pkg-config gtk+-2.0 --variable=libdir`
+ GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version`
+
+-moduledir = $(GTK_PREFIX)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/engine
++moduledir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/engine
+
+ INCLUDES = -DPACKAGE_LOCALE_DIR=\"@datadir@/locale/@PACKAGE_NAME@\" -DSN_API_NOT_YET_FROZEN \
+ -I. $(IMENGINE_CFLAGS)
diff --git a/packages/gpephone/ptim-engine_svn.bb b/packages/gpephone/ptim-engine_svn.bb
new file mode 100644
index 0000000000..a2a38a0e2e
--- /dev/null
+++ b/packages/gpephone/ptim-engine_svn.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Phone input method engine"
+SECTION = "gpephone"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ ptim-headers"
+PV = "0.1+svn-${SRCDATE}"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/ptim;module=imengine"
+
+S = "${WORKDIR}/imengine"
+
+FILES_${PN} += " ${libdir}/gtk-2.0/*/immodules/ptim/engine/*.so "
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/immodules/ptim/engine/.debug/*.so"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/immodules/ptim/engine/*.la"
+
+do_stage () {
+ autotools_stage_all
+} \ No newline at end of file
diff --git a/packages/gpephone/ptim-headers_svn.bb b/packages/gpephone/ptim-headers_svn.bb
new file mode 100644
index 0000000000..304c103505
--- /dev/null
+++ b/packages/gpephone/ptim-headers_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Phone input method - shared headers"
+SECTION = "gpephone"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+"
+PV = "0.1+svn-${SRCDATE}"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/ptim;module=imheaders"
+
+S = "${WORKDIR}/imheaders"
+
+DEFAULT_PREFERENCE = "-1"
+
+do_stage () {
+ autotools_stage_all
+} \ No newline at end of file
diff --git a/packages/m4/m4/.mtn2git_empty b/packages/gpephone/ptim-helper/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/m4/m4/.mtn2git_empty
+++ b/packages/gpephone/ptim-helper/.mtn2git_empty
diff --git a/packages/gpephone/ptim-helper/gtkmodule-location.patch b/packages/gpephone/ptim-helper/gtkmodule-location.patch
new file mode 100644
index 0000000000..cd0e469608
--- /dev/null
+++ b/packages/gpephone/ptim-helper/gtkmodule-location.patch
@@ -0,0 +1,22 @@
+--- src/Makefile.am~ 2007-04-05 16:40:45.000000000 +0200
++++ src/Makefile.am 2007-04-05 16:40:45.000000000 +0200
+@@ -3,7 +3,7 @@
+ GTK_PREFIX=`pkg-config gtk+-2.0 --variable=libdir`
+ GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version`
+
+-moduledir = $(GTK_PREFIX)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/helper
++moduledir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/helper
+
+ INCLUDES = -DPACKAGE_LOCALE_DIR=\"@datadir@/locale/@PACKAGE_NAME@\" -DSN_API_NOT_YET_FROZEN \
+ -I. $(IMHELPER_CFLAGS)
+--- pixmaps/Makefile.am~ 2007-04-05 16:43:16.000000000 +0200
++++ pixmaps/Makefile.am 2007-04-05 16:43:16.000000000 +0200
+@@ -1,7 +1,7 @@
+ GTK_PREFIX=`pkg-config gtk+-2.0 --variable=libdir`
+ GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version`
+
+-pixmapsdir = $(GTK_PREFIX)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/pixmaps
++pixmapsdir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/pixmaps
+ pixmaps_DATA = \
+ next.png \
+ prev.png \
diff --git a/packages/gpephone/ptim-helper_svn.bb b/packages/gpephone/ptim-helper_svn.bb
new file mode 100644
index 0000000000..3461de6225
--- /dev/null
+++ b/packages/gpephone/ptim-helper_svn.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Phone input method helper module"
+SECTION = "gpephone"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ ptim-headers"
+PV = "0.1+svn-${SRCDATE}"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/ptim;module=imhelper"
+
+S = "${WORKDIR}/imhelper"
+
+FILES_${PN} += " ${libdir}/gtk-2.0/*/immodules/ptim/helper/*.so ${libdir}/gtk-2.0/*/immodules/ptim/pixmaps/*"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/immodules/ptim/helper/.debug/*.so"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/immodules/ptim/helper/*.la"
+
+do_stage () {
+ autotools_stage_all
+} \ No newline at end of file
diff --git a/packages/make/make-3.80/.mtn2git_empty b/packages/gpephone/ptim-manager/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/make/make-3.80/.mtn2git_empty
+++ b/packages/gpephone/ptim-manager/.mtn2git_empty
diff --git a/packages/gpephone/ptim-manager/gtkmodule-location.patch b/packages/gpephone/ptim-manager/gtkmodule-location.patch
new file mode 100644
index 0000000000..d02166e1ac
--- /dev/null
+++ b/packages/gpephone/ptim-manager/gtkmodule-location.patch
@@ -0,0 +1,21 @@
+--- src/Makefile.am~ 2007-04-05 16:01:29.000000000 +0200
++++ src/Makefile.am 2007-04-05 16:01:29.000000000 +0200
+@@ -3,7 +3,7 @@
+ GTK_PREFIX=`pkg-config gtk+-2.0 --variable=libdir`
+ GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version`
+
+-moduledir = $(GTK_PREFIX)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules
++moduledir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules
+
+ INCLUDES = -DPACKAGE_LOCALE_DIR=\"@datadir@/locale/@PACKAGE_NAME@\" -DSN_API_NOT_YET_FROZEN \
+ -I. $(IMMANAGER_CFLAGS)
+--- Makefile.am~ 2007-04-05 16:21:36.000000000 +0200
++++ Makefile.am 2007-04-05 16:21:36.000000000 +0200
+@@ -3,6 +3,6 @@
+ GTK_PREFIX=`pkg-config gtk+-2.0 --variable=libdir`
+ GTK_BINARY_VERSION=`pkg-config gtk+-2.0 --variable=gtk_binary_version`
+
+-confdir = $(GTK_PREFIX)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/
++confdir = $(libdir)/gtk-2.0/$(GTK_BINARY_VERSION)/immodules/ptim/
+ conf_DATA = \
+ conf/imconfig
diff --git a/packages/gpephone/ptim-manager_svn.bb b/packages/gpephone/ptim-manager_svn.bb
new file mode 100644
index 0000000000..5c8042c5d5
--- /dev/null
+++ b/packages/gpephone/ptim-manager_svn.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "Phone input method manager module"
+SECTION = "gpephone"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ ptim-headers libiac"
+PV = "0.1+svn-${SRCDATE}"
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source/ptim;module=immanager"
+
+S = "${WORKDIR}/immanager"
+
+FILES_${PN} += "${libdir}/gtk-2.0/*/immodules/*.so ${libdir}/gtk-2.0/*/immodules/ptim"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/immodules/.debug/*.so"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/immodules/*.la"
+
+
+do_install_append () {
+ # That's evil...
+ install -m 644 ${S}/conf/imconfig ${D}/${libdir}/gtk-2.0/*/immodules/ptim
+}
+
+
+
+do_stage () {
+ autotools_stage_all
+} \ No newline at end of file
diff --git a/packages/gpephone/xoo-vm_0.7-20070204.bb b/packages/gpephone/xoo-vm_0.7-20070204.bb
index b927269db2..0bdda47359 100644
--- a/packages/gpephone/xoo-vm_0.7-20070204.bb
+++ b/packages/gpephone/xoo-vm_0.7-20070204.bb
@@ -6,7 +6,7 @@ LICENSE = "GPL"
DEPENDS = "virtual/libx11 libxtst gtk+ libglade"
SRCDATE = 20070204
PV = "0.7+svn${SRCDATE}"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=Xoo;proto=http \
file://gpephone-vm.patch;patch=1;pnum=0"
@@ -14,3 +14,5 @@ SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=Xoo;proto=http \
S = "${WORKDIR}/Xoo"
inherit autotools
+
+FILES_${PN} += "${datadir}/xoo"
diff --git a/packages/micro-emacs/micro-emacs-20040301/.mtn2git_empty b/packages/gperf/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/micro-emacs/micro-emacs-20040301/.mtn2git_empty
+++ b/packages/gperf/.mtn2git_empty
diff --git a/packages/mozilla/firefox-1.5.0.6/.mtn2git_empty b/packages/gperf/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/mozilla/firefox-1.5.0.6/.mtn2git_empty
+++ b/packages/gperf/files/.mtn2git_empty
diff --git a/packages/gperf/files/autoreconf.patch b/packages/gperf/files/autoreconf.patch
new file mode 100644
index 0000000000..432023067b
--- /dev/null
+++ b/packages/gperf/files/autoreconf.patch
@@ -0,0 +1,435 @@
+Index: gperf-3.0.3/configure.ac
+===================================================================
+--- gperf-3.0.3.orig/configure.ac 2007-05-10 18:34:15.000000000 +0200
++++ gperf-3.0.3/configure.ac 2007-05-10 18:34:26.000000000 +0200
+@@ -21,7 +21,7 @@
+ dnl If not, write to the Free Software Foundation, Inc.,
+ dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+-AC_PREREQ([2.60])
++AC_PREREQ([2.59])
+ AC_INIT(doc/gperf.1)
+ AC_PROG_MAKE_SET
+ AC_OBJEXT
+Index: gperf-3.0.3/doc/configure.ac
+===================================================================
+--- gperf-3.0.3.orig/doc/configure.ac 2007-05-10 18:34:30.000000000 +0200
++++ gperf-3.0.3/doc/configure.ac 2007-05-10 18:34:37.000000000 +0200
+@@ -21,7 +21,7 @@
+ dnl If not, write to the Free Software Foundation, Inc.,
+ dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+-AC_PREREQ([2.60])
++AC_PREREQ([2.59])
+ AC_INIT(gperf.1)
+ PACKAGE=gperf
+ AC_SUBST(PACKAGE)
+Index: gperf-3.0.3/lib/configure.ac
+===================================================================
+--- gperf-3.0.3.orig/lib/configure.ac 2007-05-10 18:34:41.000000000 +0200
++++ gperf-3.0.3/lib/configure.ac 2007-05-10 18:34:46.000000000 +0200
+@@ -21,7 +21,7 @@
+ dnl If not, write to the Free Software Foundation, Inc.,
+ dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+-AC_PREREQ([2.60])
++AC_PREREQ([2.59])
+ AC_INIT(hash.cc)
+ AC_PROG_MAKE_SET
+ dnl
+Index: gperf-3.0.3/src/configure.ac
+===================================================================
+--- gperf-3.0.3.orig/src/configure.ac 2007-05-10 18:34:53.000000000 +0200
++++ gperf-3.0.3/src/configure.ac 2007-05-10 18:34:58.000000000 +0200
+@@ -21,7 +21,7 @@
+ dnl If not, write to the Free Software Foundation, Inc.,
+ dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+-AC_PREREQ([2.60])
++AC_PREREQ([2.59])
+ AC_INIT(main.cc)
+ AC_CONFIG_HEADER(config.h)
+ AC_PROG_MAKE_SET
+Index: gperf-3.0.3/tests/configure.ac
+===================================================================
+--- gperf-3.0.3.orig/tests/configure.ac 2007-05-10 18:35:03.000000000 +0200
++++ gperf-3.0.3/tests/configure.ac 2007-05-10 18:35:08.000000000 +0200
+@@ -21,7 +21,7 @@
+ dnl If not, write to the Free Software Foundation, Inc.,
+ dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+-AC_PREREQ([2.60])
++AC_PREREQ([2.59])
+ AC_INIT(c-parse.gperf)
+ AC_PROG_MAKE_SET
+ dnl
+Index: gperf-3.0.3/acinclude.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gperf-3.0.3/acinclude.m4 2007-05-10 18:36:09.000000000 +0200
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.12)
++
++AC_DEFUN(CL_PROG_INSTALL,
++[dnl This is mostly copied from AC_PROG_INSTALL.
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# ./install, which can be erroneously created by make from ./install.sh.
++AC_MSG_CHECKING(for a BSD compatible install)
++if test -z "$INSTALL"; then
++AC_CACHE_VAL(cl_cv_path_install,
++[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
++ for ac_dir in $PATH; do
++ # Account for people who put trailing slashes in PATH elements.
++ case "$ac_dir/" in
++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ for ac_prog in ginstall installbsd scoinst install; do
++ if test -f $ac_dir/$ac_prog; then
++ if test $ac_prog = install &&
++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ # OSF/1 installbsd also uses dspmsg, but is usable.
++ :
++ else
++ if test $ac_prog = installbsd &&
++ grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX installbsd doesn't work without option "-g".
++ :
++ else
++ cl_cv_path_install="$ac_dir/$ac_prog -c"
++ break 2
++ fi
++ fi
++ fi
++ done
++ ;;
++ esac
++ done
++ IFS="$ac_save_ifs"
++ # As a last resort, use cp.
++ test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
++])dnl
++ INSTALL="$cl_cv_path_install"
++fi
++dnl We do special magic for INSTALL instead of AC_SUBST, to get
++dnl relative paths right.
++AC_MSG_RESULT($INSTALL)
++AC_SUBST(INSTALL)dnl
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
++AC_SUBST(INSTALL_PROGRAM)dnl
++if test -z "$INSTALL_DATA"; then
++ case "$INSTALL" in
++ cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
++ * ) INSTALL_DATA='$(INSTALL) -m 644' ;;
++ esac
++fi
++AC_SUBST(INSTALL_DATA)dnl
++])
++
+Index: gperf-3.0.3/doc/acinclude.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gperf-3.0.3/doc/acinclude.m4 2007-05-10 18:36:11.000000000 +0200
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.12)
++
++AC_DEFUN(CL_PROG_INSTALL,
++[dnl This is mostly copied from AC_PROG_INSTALL.
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# ./install, which can be erroneously created by make from ./install.sh.
++AC_MSG_CHECKING(for a BSD compatible install)
++if test -z "$INSTALL"; then
++AC_CACHE_VAL(cl_cv_path_install,
++[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
++ for ac_dir in $PATH; do
++ # Account for people who put trailing slashes in PATH elements.
++ case "$ac_dir/" in
++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ for ac_prog in ginstall installbsd scoinst install; do
++ if test -f $ac_dir/$ac_prog; then
++ if test $ac_prog = install &&
++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ # OSF/1 installbsd also uses dspmsg, but is usable.
++ :
++ else
++ if test $ac_prog = installbsd &&
++ grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX installbsd doesn't work without option "-g".
++ :
++ else
++ cl_cv_path_install="$ac_dir/$ac_prog -c"
++ break 2
++ fi
++ fi
++ fi
++ done
++ ;;
++ esac
++ done
++ IFS="$ac_save_ifs"
++ # As a last resort, use cp.
++ test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
++])dnl
++ INSTALL="$cl_cv_path_install"
++fi
++dnl We do special magic for INSTALL instead of AC_SUBST, to get
++dnl relative paths right.
++AC_MSG_RESULT($INSTALL)
++AC_SUBST(INSTALL)dnl
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
++AC_SUBST(INSTALL_PROGRAM)dnl
++if test -z "$INSTALL_DATA"; then
++ case "$INSTALL" in
++ cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
++ * ) INSTALL_DATA='$(INSTALL) -m 644' ;;
++ esac
++fi
++AC_SUBST(INSTALL_DATA)dnl
++])
++
+Index: gperf-3.0.3/lib/acinclude.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gperf-3.0.3/lib/acinclude.m4 2007-05-10 18:36:14.000000000 +0200
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.12)
++
++AC_DEFUN(CL_PROG_INSTALL,
++[dnl This is mostly copied from AC_PROG_INSTALL.
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# ./install, which can be erroneously created by make from ./install.sh.
++AC_MSG_CHECKING(for a BSD compatible install)
++if test -z "$INSTALL"; then
++AC_CACHE_VAL(cl_cv_path_install,
++[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
++ for ac_dir in $PATH; do
++ # Account for people who put trailing slashes in PATH elements.
++ case "$ac_dir/" in
++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ for ac_prog in ginstall installbsd scoinst install; do
++ if test -f $ac_dir/$ac_prog; then
++ if test $ac_prog = install &&
++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ # OSF/1 installbsd also uses dspmsg, but is usable.
++ :
++ else
++ if test $ac_prog = installbsd &&
++ grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX installbsd doesn't work without option "-g".
++ :
++ else
++ cl_cv_path_install="$ac_dir/$ac_prog -c"
++ break 2
++ fi
++ fi
++ fi
++ done
++ ;;
++ esac
++ done
++ IFS="$ac_save_ifs"
++ # As a last resort, use cp.
++ test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
++])dnl
++ INSTALL="$cl_cv_path_install"
++fi
++dnl We do special magic for INSTALL instead of AC_SUBST, to get
++dnl relative paths right.
++AC_MSG_RESULT($INSTALL)
++AC_SUBST(INSTALL)dnl
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
++AC_SUBST(INSTALL_PROGRAM)dnl
++if test -z "$INSTALL_DATA"; then
++ case "$INSTALL" in
++ cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
++ * ) INSTALL_DATA='$(INSTALL) -m 644' ;;
++ esac
++fi
++AC_SUBST(INSTALL_DATA)dnl
++])
++
+Index: gperf-3.0.3/src/acinclude.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gperf-3.0.3/src/acinclude.m4 2007-05-10 18:36:12.000000000 +0200
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.12)
++
++AC_DEFUN(CL_PROG_INSTALL,
++[dnl This is mostly copied from AC_PROG_INSTALL.
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# ./install, which can be erroneously created by make from ./install.sh.
++AC_MSG_CHECKING(for a BSD compatible install)
++if test -z "$INSTALL"; then
++AC_CACHE_VAL(cl_cv_path_install,
++[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
++ for ac_dir in $PATH; do
++ # Account for people who put trailing slashes in PATH elements.
++ case "$ac_dir/" in
++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ for ac_prog in ginstall installbsd scoinst install; do
++ if test -f $ac_dir/$ac_prog; then
++ if test $ac_prog = install &&
++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ # OSF/1 installbsd also uses dspmsg, but is usable.
++ :
++ else
++ if test $ac_prog = installbsd &&
++ grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX installbsd doesn't work without option "-g".
++ :
++ else
++ cl_cv_path_install="$ac_dir/$ac_prog -c"
++ break 2
++ fi
++ fi
++ fi
++ done
++ ;;
++ esac
++ done
++ IFS="$ac_save_ifs"
++ # As a last resort, use cp.
++ test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
++])dnl
++ INSTALL="$cl_cv_path_install"
++fi
++dnl We do special magic for INSTALL instead of AC_SUBST, to get
++dnl relative paths right.
++AC_MSG_RESULT($INSTALL)
++AC_SUBST(INSTALL)dnl
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
++AC_SUBST(INSTALL_PROGRAM)dnl
++if test -z "$INSTALL_DATA"; then
++ case "$INSTALL" in
++ cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
++ * ) INSTALL_DATA='$(INSTALL) -m 644' ;;
++ esac
++fi
++AC_SUBST(INSTALL_DATA)dnl
++])
++
+Index: gperf-3.0.3/tests/acinclude.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gperf-3.0.3/tests/acinclude.m4 2007-05-10 18:36:16.000000000 +0200
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.12)
++
++AC_DEFUN(CL_PROG_INSTALL,
++[dnl This is mostly copied from AC_PROG_INSTALL.
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# ./install, which can be erroneously created by make from ./install.sh.
++AC_MSG_CHECKING(for a BSD compatible install)
++if test -z "$INSTALL"; then
++AC_CACHE_VAL(cl_cv_path_install,
++[ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
++ for ac_dir in $PATH; do
++ # Account for people who put trailing slashes in PATH elements.
++ case "$ac_dir/" in
++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ for ac_prog in ginstall installbsd scoinst install; do
++ if test -f $ac_dir/$ac_prog; then
++ if test $ac_prog = install &&
++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ # OSF/1 installbsd also uses dspmsg, but is usable.
++ :
++ else
++ if test $ac_prog = installbsd &&
++ grep src/bos $ac_dir/$ac_prog >/dev/null 2>&1; then
++ # AIX installbsd doesn't work without option "-g".
++ :
++ else
++ cl_cv_path_install="$ac_dir/$ac_prog -c"
++ break 2
++ fi
++ fi
++ fi
++ done
++ ;;
++ esac
++ done
++ IFS="$ac_save_ifs"
++ # As a last resort, use cp.
++ test -z "$cl_cv_path_install" && cl_cv_path_install="cp"
++])dnl
++ INSTALL="$cl_cv_path_install"
++fi
++dnl We do special magic for INSTALL instead of AC_SUBST, to get
++dnl relative paths right.
++AC_MSG_RESULT($INSTALL)
++AC_SUBST(INSTALL)dnl
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='$(INSTALL)'
++AC_SUBST(INSTALL_PROGRAM)dnl
++if test -z "$INSTALL_DATA"; then
++ case "$INSTALL" in
++ cp | */cp ) INSTALL_DATA='$(INSTALL)' ;;
++ * ) INSTALL_DATA='$(INSTALL) -m 644' ;;
++ esac
++fi
++AC_SUBST(INSTALL_DATA)dnl
++])
++
diff --git a/packages/gperf/gperf-native_3.0.3.bb b/packages/gperf/gperf-native_3.0.3.bb
new file mode 100644
index 0000000000..103d1aa3c2
--- /dev/null
+++ b/packages/gperf/gperf-native_3.0.3.bb
@@ -0,0 +1,10 @@
+require gperf_${PV}.bb
+
+S = "${WORKDIR}/gperf-${PV}"
+
+inherit native
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install ${S}/src/gperf ${STAGING_BINDIR_NATIVE}
+}
diff --git a/packages/gperf/gperf_3.0.3.bb b/packages/gperf/gperf_3.0.3.bb
new file mode 100644
index 0000000000..7abfb8fbfb
--- /dev/null
+++ b/packages/gperf/gperf_3.0.3.bb
@@ -0,0 +1,8 @@
+HOMEPAGE = "http://www.gnu.org/software/gperf"
+LICENSE = "GPL"
+SUMMARY = "Generate a perfect hash function from a set of keywords"
+
+SRC_URI = "${GNU_MIRROR}/gperf/gperf-${PV}.tar.gz \
+ file://autoreconf.patch;patch=1"
+
+inherit autotools
diff --git a/packages/gpesyncd/gpe-synctool_0.2.bb b/packages/gpesyncd/gpe-synctool_0.2.bb
new file mode 100644
index 0000000000..5db87ad995
--- /dev/null
+++ b/packages/gpesyncd/gpe-synctool_0.2.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Sync daemon for GPE and OpenSync"
+LICENSE = "GPL"
+DEPENDS = "gtk+ glib-2.0 libgpewidget"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools
+
diff --git a/packages/gpesyncd/gpe-synctool_svn.bb b/packages/gpesyncd/gpe-synctool_svn.bb
index 2fdc4c7e56..e85013c117 100644
--- a/packages/gpesyncd/gpe-synctool_svn.bb
+++ b/packages/gpesyncd/gpe-synctool_svn.bb
@@ -2,7 +2,9 @@ DESCRIPTION = "Sync daemon for GPE and OpenSync"
LICENSE = "GPL"
DEPENDS = "gtk+ glib-2.0 libgpewidget"
-PV = "0.0+svn${SRCDATE}"
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.2+svn${SRCDATE}"
PR = "r0"
SRC_URI = "${GPE_SVN}"
diff --git a/packages/gpesyncd/gpesyncd_2.0.bb b/packages/gpesyncd/gpesyncd_2.0.bb
new file mode 100644
index 0000000000..69e0a677ec
--- /dev/null
+++ b/packages/gpesyncd/gpesyncd_2.0.bb
@@ -0,0 +1,12 @@
+LICENSE = "GPL"
+DESCRIPTION = "Sync daemon for GPE and OpenSync"
+
+DEPENDS = "libgpevtype libtododb libcontactsdb libeventdb sqlite libmimedir glib-2.0"
+
+PR = "r0"
+
+GPE_TARBALL_SUFFIX="bz2"
+inherit autotools gpe
+
+FILES_${PN} += "${datadir}/gpe"
+
diff --git a/packages/gpgme/gpgme_1.1.4.bb b/packages/gpgme/gpgme_1.1.4.bb
new file mode 100644
index 0000000000..d78cc88cef
--- /dev/null
+++ b/packages/gpgme/gpgme_1.1.4.bb
@@ -0,0 +1,22 @@
+LICENSE = "GPL"
+SRC_URI = "ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-${PV}.tar.bz2"
+PR = "r1"
+
+DEPENDS = "libgpg-error pth libassuan"
+
+EXTRA_OECONF = "--with-pth=${STAGING_DIR}/${HOST_SYS} --without-pth-test --with-gpg=${bindir}/gpg --without-gpgsm"
+
+inherit autotools binconfig
+
+do_stage() {
+ autotools_stage_includes
+
+ install -d ${STAGING_LIBDIR}
+ oe_libinstall -C gpgme -so libgpgme ${STAGING_LIBDIR}
+ oe_libinstall -C gpgme -so libgpgme-pth ${STAGING_LIBDIR}
+ oe_libinstall -C gpgme -so libgpgme-pthread ${STAGING_LIBDIR}
+
+ install -d ${STAGING_DATADIR}/aclocal
+ install -m 0644 gpgme/gpgme.m4 ${STAGING_DATADIR}/aclocal/
+}
+
diff --git a/packages/gphoto2/gphoto2_2.1.4.bb b/packages/gphoto2/gphoto2_2.1.4.bb
index 5ebed8f8bf..80d0ee0f27 100644
--- a/packages/gphoto2/gphoto2_2.1.4.bb
+++ b/packages/gphoto2/gphoto2_2.1.4.bb
@@ -1,7 +1,8 @@
-LICENSE = "GPL"
+DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
SECTION = "console/utils"
+LICENSE = "GPL"
DEPENDS = "libgphoto2 popt"
-DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/gphoto2-${PV}.tar.bz2"
diff --git a/packages/gphoto2/gphoto2_2.1.5.bb b/packages/gphoto2/gphoto2_2.1.5.bb
index dc49ce74b0..0913b9743c 100644
--- a/packages/gphoto2/gphoto2_2.1.5.bb
+++ b/packages/gphoto2/gphoto2_2.1.5.bb
@@ -1,7 +1,8 @@
-LICENSE = "GPL"
+DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
SECTION = "console/utils"
+LICENSE = "GPL"
DEPENDS = "libgphoto2 popt"
-DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/gphoto2-${PV}.tar.gz"
diff --git a/packages/gphoto2/gphoto2_2.1.6.bb b/packages/gphoto2/gphoto2_2.1.6.bb
index ff6531a572..63dad91f14 100644
--- a/packages/gphoto2/gphoto2_2.1.6.bb
+++ b/packages/gphoto2/gphoto2_2.1.6.bb
@@ -1,8 +1,8 @@
-LICENSE = "GPL"
+DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
SECTION = "console/utils"
+LICENSE = "GPL"
DEPENDS = "libgphoto2 popt"
-DESCRIPTION = "gphoto2 is a command-line utility to fetch pictures from digital cameras"
-PR="r1"
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/gphoto/gphoto2-${PV}.tar.gz"
diff --git a/packages/gpsbabel/gpsbabel_1.2.5.bb b/packages/gpsbabel/gpsbabel_1.2.5.bb
index bd7e1246ca..987b000f10 100644
--- a/packages/gpsbabel/gpsbabel_1.2.5.bb
+++ b/packages/gpsbabel/gpsbabel_1.2.5.bb
@@ -1,15 +1,17 @@
SECTION = "console/utils"
DESCRIPTION = "GPS data converter"
-DEPENDS = "expat"
+DEPENDS = "expat libusb"
HOMEPAGE = "http://gpsbabel.sf.net"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/gpsbabel/gpsbabel-${PV}.tar.gz"
inherit autotools pkgconfig
do_compile () {
- oe_runmake EXTRA_CFLAGS="-I${STAGING_INCDIR} -L${STAGING_LIBDIR}" INHIBIT_USB=-DNO_USB LIBUSB=
+ oe_runmake EXTRA_CFLAGS="-I${STAGING_INCDIR} -L${STAGING_LIBDIR}"
}
do_install () {
diff --git a/packages/gpsbabel/gpsbabel_1.3.3.bb b/packages/gpsbabel/gpsbabel_1.3.3.bb
new file mode 100644
index 0000000000..f9a8d98d4e
--- /dev/null
+++ b/packages/gpsbabel/gpsbabel_1.3.3.bb
@@ -0,0 +1,20 @@
+SECTION = "console/utils"
+DESCRIPTION = "GPS data converter"
+DEPENDS = "expat libusb"
+HOMEPAGE = "http://gpsbabel.sf.net"
+LICENSE = "GPL"
+
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gpsbabel/gpsbabel-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_compile () {
+ oe_runmake EXTRA_CFLAGS="-I${STAGING_INCDIR} -L${STAGING_LIBDIR}"
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0744 gpsbabel ${D}${bindir}
+}
diff --git a/packages/gpsd/files/gpsd b/packages/gpsd/files/gpsd
index 289896fb47..2cf26c5f3a 100755
--- a/packages/gpsd/files/gpsd
+++ b/packages/gpsd/files/gpsd
@@ -16,6 +16,8 @@ GPS_DEV="/dev/ttyS3"
RETVAL=0
prog="gpsd"
+test -f /etc/default/$prog && . /etc/default/$prog
+
start() {
# Start daemons.
echo -n "Starting $prog: "
diff --git a/packages/gpsd/files/gpsd-default b/packages/gpsd/files/gpsd-default
new file mode 100644
index 0000000000..c345edf974
--- /dev/null
+++ b/packages/gpsd/files/gpsd-default
@@ -0,0 +1,3 @@
+# If you must specify a non-NMEA driver, uncomment and modify the next line
+#GPSD_OPTS=
+GPS_DEV="/dev/ttyS3"
diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc
index 1f48fe0052..b43c50b58c 100644
--- a/packages/gpsd/gpsd.inc
+++ b/packages/gpsd/gpsd.inc
@@ -2,13 +2,15 @@ DESCRIPTION = "A TCP/IP Daemon simplifying the communication with GPS devices"
SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "dbus-glib ncurses"
+DEPENDS = "dbus-glib ncurses python"
-EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR} \
- --enable-dbus"
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-dbus \
+ --disable-python"
SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz \
+ file://gpsd-default \
file://gpsd"
inherit autotools update-rc.d
@@ -18,6 +20,16 @@ INITSCRIPT_PARAMS = "defaults 35"
export LDFLAGS = "-L${STAGING_LIBDIR} -lm"
+do_compile_prepend() {
+ export BUILD_SYS="${BUILD_SYS}"
+ export HOST_SYS="${HOST_SYS}"
+}
+
+do_install_prepend() {
+ export BUILD_SYS="${BUILD_SYS}"
+ export HOST_SYS="${HOST_SYS}"
+}
+
do_stage() {
oe_libinstall -so -C ${S}/.libs libgps ${STAGING_LIBDIR}
install -m 0655 ${S}/libgps.la ${STAGING_LIBDIR}
@@ -29,9 +41,17 @@ do_install_append() {
install -d ${D}/${sysconfdir}/init.d
install -d ${D}/dev
install -m 0755 ${WORKDIR}/gpsd ${D}/${sysconfdir}/init.d/
+ install -d ${D}/${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd
}
-PACKAGES =+ "libgps"
+PACKAGES =+ "libgps python-pygps"
FILES_${PN} += "${sysconfdir}"
FILES_libgps = "${libdir}/*.so*"
+CONFFILES_${PN} = "${sysconfdir}/default/gpsd"
+
+DESCRIPTION_python-pygps = "Python bindings to gpsd"
+FILES_python-pygps = "${libdir}/*/site-packages/*"
+RDEPENDS_python-pygps = "python-core gpsd"
+
diff --git a/packages/gpsd/gpsd_2.28.bb b/packages/gpsd/gpsd_2.28.bb
index 1a5e608aa8..d51d088807 100644
--- a/packages/gpsd/gpsd_2.28.bb
+++ b/packages/gpsd/gpsd_2.28.bb
@@ -1,2 +1,2 @@
require gpsd.inc
-PR = "r1"
+PR = "r3"
diff --git a/packages/gpsd/gpsd_2.32.bb b/packages/gpsd/gpsd_2.32.bb
deleted file mode 100644
index 4d07974d6e..0000000000
--- a/packages/gpsd/gpsd_2.32.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gpsd.inc
-PR = "r0"
diff --git a/packages/gpsd/gpsd_2.33.bb b/packages/gpsd/gpsd_2.33.bb
deleted file mode 100644
index f61c613eb8..0000000000
--- a/packages/gpsd/gpsd_2.33.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require gpsd.inc
-
-DEPENDS = "ncurses"
-
-PR = "r0"
diff --git a/packages/gpsd/gpsd_2.34.bb b/packages/gpsd/gpsd_2.34.bb
index 58e9ebeee2..1399dba53b 100644
--- a/packages/gpsd/gpsd_2.34.bb
+++ b/packages/gpsd/gpsd_2.34.bb
@@ -1,3 +1,4 @@
require gpsd.inc
-PR = "r0"
+PR = "r4"
+
diff --git a/packages/mozilla/firefox-2.0.0.1/.mtn2git_empty b/packages/gpstk/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/mozilla/firefox-2.0.0.1/.mtn2git_empty
+++ b/packages/gpstk/.mtn2git_empty
diff --git a/packages/mozilla/firefox-2.0/.mtn2git_empty b/packages/gpstk/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/mozilla/firefox-2.0/.mtn2git_empty
+++ b/packages/gpstk/files/.mtn2git_empty
diff --git a/packages/gpstk/files/configure.patch b/packages/gpstk/files/configure.patch
new file mode 100644
index 0000000000..b975512131
--- /dev/null
+++ b/packages/gpstk/files/configure.patch
@@ -0,0 +1,10 @@
+--- gpstk-1.2/configure.ac~ 2006-12-21 06:59:41.000000000 +1030
++++ gpstk-1.2/configure.ac 2007-03-24 14:59:42.000000000 +1030
+@@ -53,6 +53,7 @@
+ apps/ionosphere/Makefile
+ apps/MDPtools/Makefile
+ apps/mergetools/Makefile
++ apps/multipath/Makefile
+ apps/reszilla/Makefile
+ apps/time/Makefile
+ apps/positioning/Makefile
diff --git a/packages/gpstk/gpstk_1.2.bb b/packages/gpstk/gpstk_1.2.bb
new file mode 100644
index 0000000000..64ed3e025f
--- /dev/null
+++ b/packages/gpstk/gpstk_1.2.bb
@@ -0,0 +1,72 @@
+DESCRIPTION = "Libraries and applications to facilitate working with GPS data for research and high accuracy uses."
+HOMEPAGE = "http://www.gpstk.org/"
+LICENSE = "LGPL"
+SECTION = "libs"
+
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gpstk/gpstk-${PV}-src.tar.gz \
+ file://configure.patch;patch=1"
+
+inherit autotools lib_package
+
+EXTRA_OECONF = "--enable-shared"
+
+do_stage() {
+ autotools_stage_all
+}
+
+
+# This is a handcrafted do_install because 'make install' isn't working.
+# This should install the same files as my native (x86) jam based build, but doesn't since the Makefiles
+# aren't up to date (e.g. bc2sp3 is missing).
+# Koen - 20070325
+do_install() {
+
+install -d ${D}${bindir}
+install -d ${D}${libdir}
+install -d ${D}${includedir}/
+
+for i in bc2sp3 calgps DDBase ddmerge DiscFix EditRinex ephdiff example1 example2 example3 example4 example5 \
+ fic2rin ficacheck ficafic ficcheck ficdiff ficfica findMoreThan12 IonoBias mergeFIC mergeRinMet \
+ mergeRinNav mergeRinObs mergeSRI mkord mpsolve navdmp NavMerge novaRinex ordClock ordEdit ordGen \
+ ordLinEs ordPlot ordStats poscvt posInterp PRSolve ResCor resplot reszilla RinexDump rinexpvt \
+ rinexthin RinSum rmwcheck rmwdiff rnwcheck rnwdiff rowcheck rowdiff rstats rtAshtech sp3version \
+ TECMaps timeconvert tnl tsrif tsrifsu tsriftu vecsol wheresat
+ do install -m 755 `find . -name $i` ${D}${bindir}/ || true
+done
+ cp -pPr src/.libs/libgps* ${D}${libdir}/
+
+for i in AlmanacStore.hpp AlmOrbit.hpp ANSITime.hpp Bancroft.hpp BasicFramework.hpp BCEphemerisStore.hpp \
+ BinexData.hpp BinexFilterOperators.hpp BinexStream.hpp BinUtils.hpp BivarStats.hpp CheckPRData.hpp \
+ CivilTime.hpp ClockModel.hpp CodeBuffer.hpp CommandOption.hpp CommandOptionParser.hpp \
+ CommandOptionWithCommonTimeArg.hpp CommandOptionWithPositionArg.hpp CommandOptionWithTimeArg.hpp \
+ CommonTime.hpp convhelp.hpp DayTime.hpp DOP.hpp ECEF.hpp EngAlmanac.hpp EngEphemeris.hpp EngNav.hpp \
+ EphemerisRange.hpp EphemerisStore.hpp EpochClockModel.hpp Exception.hpp Expression.hpp ExtractC1.hpp \
+ ExtractCombinationData.hpp ExtractD1.hpp ExtractD2.hpp ExtractData.hpp ExtractL1.hpp ExtractL2.hpp \
+ ExtractLC.hpp ExtractP1.hpp ExtractP2.hpp ExtractPC.hpp FFBinaryStream.hpp FFData.hpp FFStreamError.hpp \
+ FFStream.hpp FFTextStream.hpp FICAStream.hpp FICBase.hpp FICData109.hpp FICData162.hpp FICData62.hpp \
+ FICData9.hpp FICData.hpp FICFilterOperators.hpp FICHeader.hpp FICStreamBase.hpp FICStream.hpp \
+ FileFilterFrame.hpp FileFilterFrameWithHeader.hpp FileFilter.hpp FileHunter.hpp FileSpec.hpp \
+ FileStore.hpp FileUtils.hpp GenXSequence.hpp Geodetic.hpp GeoidModel.hpp geometry.hpp getopt.h \
+ gps_constants.hpp GPSEpochWeekSecond.hpp GPSGeoid.hpp gpstkplatform.h GPSWeekSecond.hpp GPSWeekZcount.hpp \
+ GPSZcount29.hpp GPSZcount32.hpp GPSZcount.hpp icd_200_constants.hpp IonoModel.hpp IonoModelStore.hpp \
+ JulianDate.hpp LinearClockModel.hpp LoopedFramework.hpp MathBase.hpp MatrixBase.hpp \
+ MatrixBaseOperators.hpp MatrixFunctors.hpp Matrix.hpp MatrixImplementation.hpp MatrixOperators.hpp \
+ mergePCodeWords.h MiscMath.hpp MJD.hpp ModeledPR.hpp ModeledPseudorangeBase.hpp ModeledReferencePR.hpp \
+ MOPSWeight.hpp MSCData.hpp MSCStream.hpp ObsClockModel.hpp ObsEpochMap.hpp ObsID.hpp ObsRngDev.hpp \
+ ORDEpoch.hpp PCodeConst.hpp PolyFit.hpp Position.hpp PRSolution.hpp RACRotation.hpp \
+ RinexEphemerisStore.hpp RinexMetBase.hpp RinexMetData.hpp RinexMetFilterOperators.hpp \
+ RinexMetHeader.hpp RinexMetStream.hpp RinexNavBase.hpp RinexNavData.hpp RinexNavFilterOperators.hpp \
+ RinexNavHeader.hpp RinexNavStream.hpp RinexObsBase.hpp RinexObsData.hpp RinexObsFilterOperators.hpp \
+ RinexObsHeader.hpp RinexObsID.hpp RinexObsStream.hpp RinexSatID.hpp RinexUtilities.hpp RTFileFrame.hpp \
+ RungeKutta4.hpp SatID.hpp SimpleIURAWeight.hpp SMODFData.hpp SMODFStream.hpp SolverBase.hpp SolverLMS.hpp \
+ SolverWMS.hpp SP3Base.hpp SP3Data.hpp SP3EphemerisStore.hpp SP3Header.hpp SP3SatID.hpp SP3Stream.hpp \
+ Stats.hpp stl_helpers.hpp StringUtils.hpp SVExclusionList.hpp SVPCodeGen.hpp SystemTime.hpp \
+ TabularEphemerisStore.hpp TimeConstants.hpp TimeConverters.hpp TimeString.hpp TimeTag.hpp Triple.hpp \
+ TropModel.hpp UnixTime.hpp ValidType.hpp VectorBase.hpp VectorBaseOperators.hpp \
+ Vector.hpp VectorOperators.hpp WeightBase.hpp WGS84Geoid.hpp WxObsMap.hpp X1Sequence.hpp \
+ X2Sequence.hpp Xvt.hpp YDSTime.hpp
+ do install -m 644 `find . -name $i` ${D}${includedir}/ || true
+done
+}
diff --git a/packages/granule/granule.inc b/packages/granule/granule.inc
index 4fa2db9b04..ba32d489f4 100644
--- a/packages/granule/granule.inc
+++ b/packages/granule/granule.inc
@@ -6,4 +6,16 @@ PRIORITY = "optional"
LICENSE = "GPLv2"
DEPENDS = "glib-2.0-native intltool-native gtkmm libxml2 libassa"
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz"
+
inherit autotools pkgconfig
+
+# enable small-screen mode for all sub-vga devices
+EXTRA_OECONF_append_h3600 = " --enable-pda=yes "
+EXTRA_OECONF_append_h3900 = " --enable-pda=yes "
+EXTRA_OECONF_append_h2200 = " --enable-pda=yes "
+EXTRA_OECONF_append_h4000 = " --enable-pda=yes "
+EXTRA_OECONF_append_collie = " --enable-pda=yes "
+EXTRA_OECONF_append_poodle = " --enable-pda=yes "
+EXTRA_OECONF_append_mnci = " --enable-pda=yes "
+EXTRA_OECONF_append_integral13 = " --enable-pda=yes "
diff --git a/packages/granule/granule_1.2.2.bb b/packages/granule/granule_1.2.2.bb
deleted file mode 100644
index 8e68118fa6..0000000000
--- a/packages/granule/granule_1.2.2.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require granule.inc
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz"
-
diff --git a/packages/granule/granule_1.2.4.bb b/packages/granule/granule_1.2.4.bb
new file mode 100644
index 0000000000..cb01eb0388
--- /dev/null
+++ b/packages/granule/granule_1.2.4.bb
@@ -0,0 +1,4 @@
+require granule.inc
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}-1.tar.gz"
+
diff --git a/packages/nano/nano-1.3.9/.mtn2git_empty b/packages/grep/grep-2.5.1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/nano/nano-1.3.9/.mtn2git_empty
+++ b/packages/grep/grep-2.5.1/.mtn2git_empty
diff --git a/packages/grep/grep-2.5.1/uclibc-fix.patch b/packages/grep/grep-2.5.1/uclibc-fix.patch
new file mode 100644
index 0000000000..f67177f6ab
--- /dev/null
+++ b/packages/grep/grep-2.5.1/uclibc-fix.patch
@@ -0,0 +1,52 @@
+Fix to use mempcpy instead of __mempcpy. This is needed for uclibc which
+doesn't define __mempcpy only mempcpy. Since both uclibc and glibc have
+mempcpy we'll just use that instead.
+
+Index: grep-2.5.1/intl/localealias.c
+===================================================================
+--- grep-2.5.1.orig/intl/localealias.c 2002-03-14 00:39:06.000000000 +1100
++++ grep-2.5.1/intl/localealias.c 2007-05-17 13:53:58.000000000 +1000
+@@ -65,7 +65,7 @@
+ # define strcasecmp __strcasecmp
+
+ # ifndef mempcpy
+-# define mempcpy __mempcpy
++# error "mempcpy not detected"
+ # endif
+ # define HAVE_MEMPCPY 1
+ # define HAVE___FSETLOCKING 1
+Index: grep-2.5.1/lib/getopt.c
+===================================================================
+--- grep-2.5.1.orig/lib/getopt.c 2001-03-04 16:33:12.000000000 +1100
++++ grep-2.5.1/lib/getopt.c 2007-05-17 13:51:44.000000000 +1000
+@@ -326,7 +326,7 @@
+ nonoption_flags_len = nonoption_flags_max_len = 0;
+ else
+ {
+- memset (__mempcpy (new_str, __getopt_nonoption_flags,
++ memset (mempcpy (new_str, __getopt_nonoption_flags,
+ nonoption_flags_max_len),
+ '\0', top + 1 - nonoption_flags_max_len);
+ nonoption_flags_max_len = top + 1;
+@@ -437,7 +437,7 @@
+ if (__getopt_nonoption_flags == NULL)
+ nonoption_flags_max_len = -1;
+ else
+- memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
++ memset (mempcpy (__getopt_nonoption_flags, orig_str, len),
+ '\0', nonoption_flags_max_len - len);
+ }
+ }
+Index: grep-2.5.1/lib/regex.c
+===================================================================
+--- grep-2.5.1.orig/lib/regex.c 2001-04-03 04:04:45.000000000 +1000
++++ grep-2.5.1/lib/regex.c 2007-05-17 13:51:48.000000000 +1000
+@@ -7842,7 +7842,7 @@
+ if (msg_size > errbuf_size)
+ {
+ #if defined HAVE_MEMPCPY || defined _LIBC
+- *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
++ *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
+ #else
+ memcpy (errbuf, msg, errbuf_size - 1);
+ errbuf[errbuf_size - 1] = 0;
diff --git a/packages/grep/grep-native_2.5.1.bb b/packages/grep/grep-native_2.5.1.bb
index cacd675928..abc2ea46cb 100644
--- a/packages/grep/grep-native_2.5.1.bb
+++ b/packages/grep/grep-native_2.5.1.bb
@@ -9,3 +9,5 @@ do_stage () {
install -m 755 src/egrep ${STAGING_BINDIR}
install -m 755 src/fgrep ${STAGING_BINDIR}
}
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/grep-${PV}"
diff --git a/packages/grep/grep_2.5.1.bb b/packages/grep/grep_2.5.1.bb
index 7bcabef167..6d184b8c4c 100644
--- a/packages/grep/grep_2.5.1.bb
+++ b/packages/grep/grep_2.5.1.bb
@@ -1,9 +1,10 @@
LICENSE = "GPL"
SECTION = "console/utils"
DESCRIPTION = "grep GNU utility"
-PR = "r1"
+PR = "r2"
-SRC_URI = "${GNU_MIRROR}/grep/grep-${PV}.tar.bz2"
+SRC_URI = "${GNU_MIRROR}/grep/grep-${PV}.tar.bz2 \
+ file://uclibc-fix.patch;patch=1"
inherit autotools
diff --git a/packages/groff/groff_1.19.2.bb b/packages/groff/groff_1.19.2.bb
index e6046ae189..62f56a8c27 100644
--- a/packages/groff/groff_1.19.2.bb
+++ b/packages/groff/groff_1.19.2.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "GNU roff"
SECTION = "base"
LICENSE = "GPL"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://ftp.gnu.org/gnu/groff/groff-${PV}.tar.gz \
file://Makefile.in.patch;patch=1 \
@@ -11,7 +11,7 @@ SRC_URI = "http://ftp.gnu.org/gnu/groff/groff-${PV}.tar.gz \
PARALLEL_MAKE = ""
# prefix and exec-prefix are broken and the .in file is broken too
# and can't be autoreconf'ed, so specify every dir
-EXTRA_OECONF="--prefix=${D} --exec-prefix=${D} --bindir=${D}${bindir} --datadir=${D}${datadir} --mandir=${D}${datadir}/man --infodir=${D}${datadir}/info"
+EXTRA_OECONF="--prefix=${D} --exec-prefix=${D} --bindir=${D}${bindir} --datadir=${D}${datadir} --mandir=${D}${datadir}/man --infodir=${D}${datadir}/info --with-appresdir=${D}${datadir}"
inherit autotools
do_configure() {
diff --git a/packages/nsqld/.mtn2git_empty b/packages/gsm/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/nsqld/.mtn2git_empty
+++ b/packages/gsm/files/.mtn2git_empty
diff --git a/packages/gsm/files/default b/packages/gsm/files/default
new file mode 100644
index 0000000000..161c97f5fb
--- /dev/null
+++ b/packages/gsm/files/default
@@ -0,0 +1,9 @@
+# gsmd This shell script configures for the gsmd init script.
+
+# If you must specify special options, uncomment and modify the next line
+#GSMD_OPTS="-s 115200 -F"
+
+# If your GSM device needs to be powered up, uncomment and modify the next line
+#GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
+
+#GSM_DEV="/dev/ttyS1"
diff --git a/packages/gsm/files/extreplychars.patch b/packages/gsm/files/extreplychars.patch
new file mode 100644
index 0000000000..8ebc343e27
--- /dev/null
+++ b/packages/gsm/files/extreplychars.patch
@@ -0,0 +1,70 @@
+Index: gsm/src/gsmd/atcmd.c
+===================================================================
+--- gsm.orig/src/gsmd/atcmd.c 2007-06-03 10:46:19.000000000 +0200
++++ gsm/src/gsmd/atcmd.c 2007-06-03 15:54:53.000000000 +0200
+@@ -208,7 +208,7 @@
+ * TBD
+ */
+
+- if (buf[0] == '+' || buf[0] == '%') {
++ if (buf[0] == '+' || strchr(g->vendorpl->ext_chars, buf[0])) {
+ /* an extended response */
+ const char *colon = strchr(buf, ':');
+ if (!colon) {
+@@ -255,7 +255,7 @@
+ }
+
+ if (cmd) {
+- if (cmd->buf[2] != '+' && cmd->buf[2] != '%') {
++ if (cmd->buf[2] != '+' && strchr(g->vendorpl->ext_chars, cmd->buf[2]) == NULL) {
+ gsmd_log(GSMD_ERROR, "extd reply to non-extd command?\n");
+ return -EINVAL;
+ }
+Index: gsm/src/gsmd/vendor_qc.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_qc.c 2007-06-03 10:46:19.000000000 +0200
++++ gsm/src/gsmd/vendor_qc.c 2007-06-03 11:45:58.000000000 +0200
+@@ -97,6 +97,7 @@
+
+ struct gsmd_vendor_plugin gsmd_vendor_plugin = {
+ .name = "Qualcomm msm6250",
++ .ext_chars = "@",
+ .num_unsolicit = ARRAY_SIZE(qc_unsolicit),
+ .unsolicit = qc_unsolicit,
+ .detect = &qc_detect,
+Index: gsm/src/gsmd/vendor_ti.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_ti.c 2007-06-03 10:46:19.000000000 +0200
++++ gsm/src/gsmd/vendor_ti.c 2007-06-03 11:45:58.000000000 +0200
+@@ -303,6 +303,7 @@
+
+ struct gsmd_vendor_plugin gsmd_vendor_plugin = {
+ .name = "TI Calypso",
++ .ext_chars = "%@",
+ .num_unsolicit = ARRAY_SIZE(ticalypso_unsolicit),
+ .unsolicit = ticalypso_unsolicit,
+ .detect = &ticalypso_detect,
+Index: gsm/include/gsmd/vendorplugin.h
+===================================================================
+--- gsm.orig/include/gsmd/vendorplugin.h 2007-02-16 15:12:40.000000000 +0100
++++ gsm/include/gsmd/vendorplugin.h 2007-06-03 11:45:58.000000000 +0200
+@@ -12,6 +12,7 @@
+ struct gsmd_vendor_plugin {
+ struct llist_head list;
+ unsigned char *name;
++ unsigned char *ext_chars;
+ unsigned int num_unsolicit;
+ const struct gsmd_unsolicit *unsolicit;
+ int (*detect)(struct gsmd *g);
+Index: gsm/src/gsmd/vendor_tihtc.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_tihtc.c 2007-06-03 15:55:31.000000000 +0200
++++ gsm/src/gsmd/vendor_tihtc.c 2007-06-03 15:55:43.000000000 +0200
+@@ -298,6 +298,7 @@
+
+ struct gsmd_vendor_plugin gsmd_vendor_plugin = {
+ .name = "TI Calypso / HTC firmware",
++ .ext_chars = "%",
+ .num_unsolicit = ARRAY_SIZE(tihtc_unsolicit),
+ .unsolicit = tihtc_unsolicit,
+ .detect = &tihtc_detect,
diff --git a/packages/obsolete/maemo/gconf-osso/.mtn2git_empty b/packages/gsm/files/fic-gta01/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/obsolete/maemo/gconf-osso/.mtn2git_empty
+++ b/packages/gsm/files/fic-gta01/.mtn2git_empty
diff --git a/packages/gsm/files/fic-gta01/default b/packages/gsm/files/fic-gta01/default
new file mode 100644
index 0000000000..1511376a6c
--- /dev/null
+++ b/packages/gsm/files/fic-gta01/default
@@ -0,0 +1,9 @@
+# gsmd This shell script configures for the gsmd init script.
+
+# If you must specify special options, uncomment and modify the next line
+GSMD_OPTS="-s 115200 -F"
+
+# If your GSM device needs to be powered up, uncomment and modify the next line
+GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
+
+GSM_DEV="/dev/ttySAC0"
diff --git a/packages/gsm/files/getopt-wait-interpreter-ready.patch b/packages/gsm/files/getopt-wait-interpreter-ready.patch
new file mode 100644
index 0000000000..52b0da1183
--- /dev/null
+++ b/packages/gsm/files/getopt-wait-interpreter-ready.patch
@@ -0,0 +1,57 @@
+Index: gsm/src/gsmd/gsmd.c
+===================================================================
+--- gsm.orig/src/gsmd/gsmd.c 2007-06-03 11:57:43.000000000 +0200
++++ gsm/src/gsmd/gsmd.c 2007-06-03 11:57:45.000000000 +0200
+@@ -311,6 +311,7 @@
+ { "leak-report", 0, NULL, 'L' },
+ { "vendor", 1, NULL, 'v' },
+ { "machine", 1, NULL, 'm' },
++ { "wait", 1, NULL, 'w' },
+ { 0, 0, 0, 0 }
+ };
+
+@@ -333,6 +334,7 @@
+ "\t-l file\t--logfile file\tSpecify a logfile to log to\n"
+ "\t-v\t--vendor v\tSpecify GSM modem vendor plugin\n"
+ "\t-m\t--machine m\tSpecify GSM modem machine plugin\n"
++ "\t-w\t--wait m\tWait for the AT Interpreter Ready message\n"
+ );
+ }
+
+@@ -362,6 +364,7 @@
+ char *logfile = "syslog";
+ char *vendor_name = NULL;
+ char *machine_name = NULL;
++ int wait = -1;
+
+ signal(SIGTERM, sig_handler);
+ signal(SIGINT, sig_handler);
+@@ -374,7 +377,7 @@
+ print_header();
+
+ /*FIXME: parse commandline, set daemonize, device, ... */
+- while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:", opts, NULL)) != -1) {
++ while ((argch = getopt_long(argc, argv, "FVLdhp:s:l:v:m:w:", opts, NULL)) != -1) {
+ switch (argch) {
+ case 'V':
+ /* FIXME */
+@@ -411,6 +414,9 @@
+ case 'm':
+ machine_name = optarg;
+ break;
++ case 'w':
++ wait = atoi(optarg);
++ break;
+ }
+ }
+
+@@ -455,6 +461,9 @@
+ exit(1);
+ }
+
++ if (wait >= 0)
++ g.interpreter_ready = !wait;
++
+ if (atcmd_init(&g, fd) < 0) {
+ fprintf(stderr, "can't initialize UART device\n");
+ exit(1);
diff --git a/packages/gsm/files/gsmd b/packages/gsm/files/gsmd
new file mode 100644
index 0000000000..5c78e8178a
--- /dev/null
+++ b/packages/gsm/files/gsmd
@@ -0,0 +1,106 @@
+#!/bin/sh
+#
+# gsmd This shell script starts and stops gsmd.
+#
+# chkconfig: 345 90 40
+# description: Gsmd manages access to a serial- or USB-connected GSM
+# processname: gsmd
+
+# Source configuration
+. /etc/default/gsmd
+
+# Source function library.
+#. /etc/rc.d/init.d/functions
+
+RETVAL=0
+prog="gsmd"
+
+start() {
+ # Hack for broken uboot and/or kernel on the neo1973
+ dmesg -n1
+
+ if [ -n "${GSM_POW}" ]
+ then
+ if [ -e "${GSM_POW}" ]
+ then
+ echo -n "Powering up GSM device..."
+ echo "1" > ${GSM_POW}
+ sleep 1
+ echo "done"
+ else
+ echo "GSM device not found. Aborting startup"
+ return false
+ fi
+ fi
+ # Start daemons.
+ echo -n "Starting $prog: "
+ # We don't use the daemon function here because of a known bug
+ # in initlog -- it spuriously returns a nonzero status when
+ # starting daemons that fork themselves. See
+ # http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=130629
+ # for discussion. Fortunately:
+ #
+ # 1. gsmd startup can't fail, or at least not in the absence of
+ # much larger resource-exhaustion problems that would be very obvious.
+ #
+ # 2. We don't need all the logging crud that daemon/initlog sets
+ # up -- gsmd does its own syslog calls.
+ #
+ if [ -e "${GSM_DEV}" ]
+ then
+ gsmd -p ${GSM_DEV} ${GSMD_OPTS} >/tmp/gsm.log 2>&1 &
+ echo "success"
+ else
+ # User needs to symlink ${GPS_DEV} to the right thing
+ echo "No ${GSM_DEV} device, aborting gsmd startup."
+ fi
+ RETVAL=$?
+ echo
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/gsmd
+ return $RETVAL
+}
+
+stop() {
+ # Stop daemons.
+ echo -n "Shutting down $prog: "
+ killall gsmd
+# killproc gsmd
+ RETVAL=$?
+ echo
+ if [ $RETVAL -eq 0 ]
+ then
+ rm -f /var/lock/subsys/gsmd;
+ fi
+ return $RETVAL
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ stop
+ start
+ RETVAL=$?
+ ;;
+ condrestart)
+ if [ -f /var/lock/subsys/gsmd ]; then
+ stop
+ start
+ RETVAL=$?
+ fi
+ ;;
+ status)
+# status gsmd
+# RETVAL=$?
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|condrestart|status}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/packages/ohand-tasks/.mtn2git_empty b/packages/gsm/files/htcuniversal/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ohand-tasks/.mtn2git_empty
+++ b/packages/gsm/files/htcuniversal/.mtn2git_empty
diff --git a/packages/gsm/files/htcuniversal/default b/packages/gsm/files/htcuniversal/default
new file mode 100644
index 0000000000..b09d433d1e
--- /dev/null
+++ b/packages/gsm/files/htcuniversal/default
@@ -0,0 +1,10 @@
+# gsmd This shell script configures for the gsmd init script.
+
+GSMD_OPTS="-s 115200 -F -w 1"
+
+# If your GSM device needs to be powered up, uncomment and modify the next line
+#GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
+
+# this should be in a common /etc/default/serial, together
+# with BT_DEV, and IR_DEV
+GSM_DEV="/dev/ttyS0"
diff --git a/packages/gsm/files/libgsmd-tool-fix.patch b/packages/gsm/files/libgsmd-tool-fix.patch
new file mode 100644
index 0000000000..8938f5a682
--- /dev/null
+++ b/packages/gsm/files/libgsmd-tool-fix.patch
@@ -0,0 +1,19 @@
+Index: gsm/src/util/atcmd.c
+===================================================================
+--- gsm.orig/src/util/atcmd.c 2007-07-31 11:44:32.000000000 +0200
++++ gsm/src/util/atcmd.c 2007-07-31 11:46:44.000000000 +0200
+@@ -91,9 +91,11 @@
+ continue;
+ }
+ printf("STR=`%s'\n", buf);
++
++ /* this is a synchronous call for a passthrough
++ * command */
++ lgsm_passthrough(lgsmh, buf, rbuf, &rlen);
++ printf("RSTR=`%s'\n", rbuf);
+ }
+- /* this is a synchronous call for a passthrough command */
+- lgsm_passthrough(lgsmh, buf, rbuf, &rlen);
+- printf("RSTR=`%s'\n", rbuf);
+ }
+ }
diff --git a/packages/openmoko-base/files/.mtn2git_empty b/packages/gsm/files/magician/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openmoko-base/files/.mtn2git_empty
+++ b/packages/gsm/files/magician/.mtn2git_empty
diff --git a/packages/gsm/files/magician/default b/packages/gsm/files/magician/default
new file mode 100644
index 0000000000..523d0b9479
--- /dev/null
+++ b/packages/gsm/files/magician/default
@@ -0,0 +1,10 @@
+# gsmd This shell script configures for the gsmd init script.
+
+GSMD_OPTS="-s 115200 -F"
+
+# If your GSM device needs to be powered up, uncomment and modify the next line
+#GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
+
+# this should be in a common /etc/default/serial, together
+# with BT_DEV, and IR_DEV
+GSM_DEV="/dev/ttyS1"
diff --git a/packages/gsm/files/mlbuf-in-gsmd-struct.patch b/packages/gsm/files/mlbuf-in-gsmd-struct.patch
new file mode 100644
index 0000000000..d46eae8bb3
--- /dev/null
+++ b/packages/gsm/files/mlbuf-in-gsmd-struct.patch
@@ -0,0 +1,102 @@
+Index: gsm/include/gsmd/gsmd.h
+===================================================================
+--- gsm.orig/include/gsmd/gsmd.h 2007-07-31 14:07:47.000000000 +0200
++++ gsm/include/gsmd/gsmd.h 2007-07-31 14:09:02.000000000 +0200
+@@ -74,6 +74,8 @@
+ struct gsmd_device_state dev_state;
+
+ struct llist_head operators; /* cached list of operator names */
++ unsigned int mlbuf_len;
++ unsigned char *mlbuf; /* ml_parse buffer */
+ };
+
+ struct gsmd_user {
+Index: gsm/src/gsmd/atcmd.c
+===================================================================
+--- gsm.orig/src/gsmd/atcmd.c 2007-07-31 14:06:49.000000000 +0200
++++ gsm/src/gsmd/atcmd.c 2007-07-31 14:12:33.000000000 +0200
+@@ -175,9 +175,7 @@
+ {
+ struct gsmd *g = ctx;
+ struct gsmd_atcmd *cmd = NULL;
+- static char mlbuf[MLPARSE_BUF_SIZE];
+ int rc = 0, final = 0;
+- int mlbuf_len;
+
+ DEBUGP("buf=`%s'(%d)\n", buf, len);
+
+@@ -273,15 +271,15 @@
+
+ /* it might be a multiline response, so if there's a previous
+ response, send out mlbuf and start afresh with an empty buffer */
+- if (mlbuf[0] != 0) {
++ if (g->mlbuf[0] != 0) {
+ if (!cmd->cb) {
+ gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
+ } else {
+ DEBUGP("Calling cmd->cb()\n");
+- cmd->resp = mlbuf;
++ cmd->resp = g->mlbuf;
+ rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+ DEBUGP("Clearing mlbuf\n");
+- mlbuf[0] = 0;
++ g->mlbuf[0] = 0;
+ }
+ }
+
+@@ -334,16 +332,16 @@
+ /* we reach here, if we are at an information response that needs to be
+ * passed on */
+
+- if (mlbuf[0] == 0) {
++ if (g->mlbuf[0] == 0) {
+ DEBUGP("Filling mlbuf\n");
+- strncat(mlbuf, buf, sizeof(mlbuf)-1);
++ strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-1);
+ } else {
+ DEBUGP("Appending buf to mlbuf\n");
+- mlbuf_len = strlen(mlbuf);
+- if (mlbuf_len+1 < sizeof(mlbuf)) {
+- mlbuf[mlbuf_len] = '\n';
+- mlbuf[mlbuf_len+1] = '\0';
+- strncat(mlbuf, buf, sizeof(mlbuf)-mlbuf_len-2);
++ g->mlbuf_len = strlen(g->mlbuf);
++ if (g->mlbuf_len+1 < MLPARSE_BUF_SIZE) {
++ g->mlbuf[g->mlbuf_len] = '\n';
++ g->mlbuf[g->mlbuf_len+1] = '\0';
++ strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-g->mlbuf_len-2);
+ } else {
+ DEBUGP("response too big for mlbuf!!!\n");
+ return -EFBIG;
+@@ -365,13 +363,13 @@
+ } else {
+ DEBUGP("Calling final cmd->cb()\n");
+ /* send final result code if there is no information response in mlbuf */
+- if (mlbuf[0] == 0)
++ if (g->mlbuf[0] == 0)
+ cmd->resp = buf;
+ else
+- cmd->resp = mlbuf;
++ cmd->resp = g->mlbuf;
+ rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+ DEBUGP("Clearing mlbuf\n");
+- mlbuf[0] = 0;
++ g->mlbuf[0] = 0;
+ }
+
+ /* remove from list of currently executing cmds */
+Index: gsm/src/gsmd/gsmd.c
+===================================================================
+--- gsm.orig/src/gsmd/gsmd.c 2007-07-31 14:06:47.000000000 +0200
++++ gsm/src/gsmd/gsmd.c 2007-07-31 14:06:50.000000000 +0200
+@@ -300,6 +300,10 @@
+ {
+ INIT_LLIST_HEAD(&g->users);
+
++ g->mlbuf = talloc_array(gsmd_tallocs, unsigned char, MLPARSE_BUF_SIZE);
++ if (!g->mlbuf)
++ return -ENOMEM;
++
+ return 0;
+ }
+
diff --git a/packages/gsm/files/sms-hacks.patch b/packages/gsm/files/sms-hacks.patch
new file mode 100644
index 0000000000..ba248449af
--- /dev/null
+++ b/packages/gsm/files/sms-hacks.patch
@@ -0,0 +1,820 @@
+From 3e5832569d3b29a90b29b5d5ac0ffad4765bcff3 Mon Sep 17 00:00:00 2001
+From: Andrzej Zaborowski <balrog@zabor.org>
+Date: Fri, 6 Jul 2007 06:55:12 +0200
+Subject: [PATCH] SMS hacks 2
+
+---
+ include/gsmd/gsmd.h | 8 ++-
+ include/gsmd/usock.h | 35 ++++++++-
+ include/gsmd/vendorplugin.h | 2 +-
+ include/libgsmd/sms.h | 2 +-
+ src/gsmd/atcmd.c | 130 +++++++++++++++++++-------------
+ src/gsmd/sms_cb.c | 19 ++++-
+ src/gsmd/usock.c | 175 +++++++++++++++++++++++++++++++++++++-----
+ src/gsmd/vendor_ti.c | 2 +-
+ src/libgsmd/libgsmd_sms.c | 26 +++++--
+ 11 files changed, 320 insertions(+), 91 deletions(-)
+
+Index: gsm/include/gsmd/gsmd.h
+===================================================================
+--- gsm.orig/include/gsmd/gsmd.h 2007-07-31 14:09:02.000000000 +0200
++++ gsm/include/gsmd/gsmd.h 2007-07-31 14:23:32.000000000 +0200
+@@ -27,6 +27,7 @@
+ u_int32_t buflen;
+ u_int16_t id;
+ u_int8_t flags;
++ char *cur;
+ char buf[];
+ };
+
+@@ -36,6 +37,8 @@
+ LLPARSE_STATE_IDLE_LF, /* LF before response (V1) */
+ LLPARSE_STATE_RESULT, /* within result payload */
+ LLPARSE_STATE_RESULT_CR, /* CR after result */
++ LLPARSE_STATE_PROMPT, /* within a "> " prompt */
++ LLPARSE_STATE_PROMPT_SPC, /* a complete "> " prompt */
+ LLPARSE_STATE_ERROR, /* something went wrong */
+ /* ... idle again */
+ };
+@@ -52,6 +55,7 @@
+ unsigned int flags;
+ void *ctx;
+ int (*cb)(const char *buf, int len, void *ctx);
++ int (*prompt_cb)(void *ctx);
+ char *cur;
+ char buf[LLPARSE_BUF_SIZE];
+ };
+@@ -59,6 +63,7 @@
+ struct gsmd;
+
+ #define GSMD_FLAG_V0 0x0001 /* V0 responses to be expected from TA */
++#define GSMD_FLAG_SMS_FMT 0x0002 /* Use TEXT rather than PDU mode */
+
+ struct gsmd {
+ unsigned int flags;
+@@ -94,7 +99,8 @@
+
+ extern int gsmdlog_init(const char *path);
+ /* write a message to the daemons' logfile */
+-void __gsmd_log(int level, const char *file, int line, const char *function, const char *message, ...);
++void __gsmd_log(int level, const char *file, int line, const char *function, const char *message, ...)
++ __attribute__ ((__format__ (__printf__, 5, 6)));
+ /* macro for logging including filename and line number */
+ #define gsmd_log(level, format, args ...) \
+ __gsmd_log(level, __FILE__, __LINE__, __FUNCTION__, format, ## args)
+Index: gsm/include/gsmd/usock.h
+===================================================================
+--- gsm.orig/include/gsmd/usock.h 2007-07-31 13:58:37.000000000 +0200
++++ gsm/include/gsmd/usock.h 2007-07-31 14:23:32.000000000 +0200
+@@ -139,7 +139,7 @@
+ /* for SMS-SUBMIT, SMS-DELIVER */
+ enum gsmd_sms_tp_udhi {
+ GSMD_SMS_TP_UDHI_NO_HEADER = (0<<6),
+- GSMD_SMS_TP_UDHI_WTIH_HEADER = (1<<6),
++ GSMD_SMS_TP_UDHI_WITH_HEADER = (1<<6),
+ };
+
+ /* SMS delflg from 3GPP TS 07.05, Clause 3.5.4 */
+@@ -160,6 +160,34 @@
+ GSMD_PHONEBOOK_GET_SUPPORT = 6,
+ };
+
++/* Type-of-Address, Numbering Plan Identification field */
++enum gsmd_toa_npi {
++ GSMD_TOA_NPI_UNKNOWN = 0x0,
++ GSMD_TOA_NPI_ISDN = 0x1,
++ GSMD_TOA_NPI_DATA = 0x3,
++ GSMD_TOA_NPI_TELEX = 0x4,
++ GSMD_TOA_NPI_NATIONAL = 0x8,
++ GSMD_TOA_NPI_PRIVATE = 0x9,
++ GSMD_TOA_NPI_ERMES = 0xa,
++ GSMD_TOA_NPI_RESERVED = 0xf,
++};
++
++/* Type-of-Address, Type-of-Number field */
++enum gsmd_toa_ton {
++ GSMD_TOA_TON_UNKNOWN = (0<<4),
++ GSMD_TOA_TON_INTERNATIONAL = (1<<4),
++ GSMD_TOA_TON_NATIONAL = (2<<4),
++ GSMD_TOA_TON_NETWORK = (3<<4),
++ GSMD_TOA_TON_SUBSCRIBER = (4<<4),
++ GSMD_TOA_TON_ALPHANUMERIC = (5<<4),
++ GSMD_TOA_TON_ABBREVIATED = (6<<4),
++};
++
++/* Type-of-Address, bit 7 always 1 */
++enum gsmd_toa_reserved {
++ GSMD_TOA_RESERVED = (1<<7),
++};
++
+ /* Length from 3GPP TS 04.08, Clause 10.5.4.7 */
+
+ #define GSMD_ADDR_MAXLEN 32
+@@ -269,6 +297,11 @@
+ char user_data[140];
+ } __attribute__ ((packed));
+
++struct gsmd_sms_send {
++ struct gsmd_addr addr;
++ struct gsmd_sms payload;
++};
++
+ /* Refer to GSM 07.07 subclause 8.12 */
+ struct gsmd_phonebook_readrg {
+ u_int8_t index1;
+Index: gsm/include/gsmd/vendorplugin.h
+===================================================================
+--- gsm.orig/include/gsmd/vendorplugin.h 2007-07-31 13:58:38.000000000 +0200
++++ gsm/include/gsmd/vendorplugin.h 2007-07-31 14:23:32.000000000 +0200
+@@ -12,7 +12,7 @@
+ struct gsmd_vendor_plugin {
+ struct llist_head list;
+ unsigned char *name;
+- unsigned char *ext_chars;
++ char *ext_chars;
+ unsigned int num_unsolicit;
+ const struct gsmd_unsolicit *unsolicit;
+ int (*detect)(struct gsmd *g);
+Index: gsm/include/libgsmd/sms.h
+===================================================================
+--- gsm.orig/include/libgsmd/sms.h 2007-07-31 13:58:38.000000000 +0200
++++ gsm/include/libgsmd/sms.h 2007-07-31 14:23:32.000000000 +0200
+@@ -83,7 +83,7 @@
+ extern int lgsmd_sms_send(struct lgsm_handle *lh, const struct lgsm_sms *sms);
+
+ /* Write Message to Memory */
+-extern int lgsmd_sms_write(struct lgsm_handle *lh,
++extern int lgsmd_sms_write(struct lgsm_handle *lh,
+ const struct lgsm_sms_write *sms_write);
+
+ /* Packing of 7-bit characters, refer to GSM 03.38 subclause 6.1.2.1.1 */
+Index: gsm/src/gsmd/atcmd.c
+===================================================================
+--- gsm.orig/src/gsmd/atcmd.c 2007-07-31 14:13:00.000000000 +0200
++++ gsm/src/gsmd/atcmd.c 2007-07-31 14:23:32.000000000 +0200
+@@ -82,9 +82,12 @@
+
+ switch (llp->state) {
+ case LLPARSE_STATE_IDLE:
++ case LLPARSE_STATE_PROMPT_SPC:
+ if (llp->flags & LGSM_ATCMD_F_EXTENDED) {
+ if (byte == '\r')
+ llp->state = LLPARSE_STATE_IDLE_CR;
++ else if (byte == '>')
++ llp->state = LLPARSE_STATE_PROMPT;
+ else {
+ #ifdef STRICT
+ llp->state = LLPARSE_STATE_ERROR;
+@@ -108,6 +111,8 @@
+ /* can we really go directly into result_cr ? */
+ if (byte == '\r')
+ llp->state = LLPARSE_STATE_RESULT_CR;
++ else if (byte == '>')
++ llp->state = LLPARSE_STATE_PROMPT;
+ else {
+ llp->state = LLPARSE_STATE_RESULT;
+ ret = llparse_append(llp, byte);
+@@ -127,6 +132,16 @@
+ memset(llp->buf, 0, LLPARSE_BUF_SIZE);
+ }
+ break;
++ case LLPARSE_STATE_PROMPT:
++ if (byte == ' ')
++ llp->state = LLPARSE_STATE_PROMPT_SPC;
++ else {
++ /* this was not a real "> " prompt */
++ llparse_append(llp, '>');
++ ret = llparse_append(llp, byte);
++ llp->state = LLPARSE_STATE_RESULT;
++ }
++ break;
+ case LLPARSE_STATE_ERROR:
+ break;
+ }
+@@ -147,6 +162,10 @@
+ /* FIXME: what to do with return value ? */
+ llp->cb(llp->buf, llp->cur - llp->buf, llp->ctx);
+ }
++
++ /* if a full SMS-style prompt was received, poke the select */
++ if (llp->state == LLPARSE_STATE_PROMPT_SPC)
++ llp->prompt_cb(llp->ctx);
+ }
+
+ return 0;
+@@ -175,7 +194,7 @@
+ {
+ struct gsmd *g = ctx;
+ struct gsmd_atcmd *cmd = NULL;
+- int rc = 0, final = 0;
++ int rc = 0;
+
+ DEBUGP("buf=`%s'(%d)\n", buf, len);
+
+@@ -229,7 +248,6 @@
+ DEBUGP("error number %lu\n", err_nr);
+ if (cmd)
+ cmd->ret = err_nr;
+- final = 1;
+ goto final_cb;
+ }
+ if (!strncmp(buf+1, "CMS ERROR", 9)) {
+@@ -239,7 +257,6 @@
+ DEBUGP("error number %lu\n", err_nr);
+ if (cmd)
+ cmd->ret = err_nr;
+- final = 1;
+ goto final_cb;
+ }
+
+@@ -271,7 +288,7 @@
+
+ /* it might be a multiline response, so if there's a previous
+ response, send out mlbuf and start afresh with an empty buffer */
+- if (g->mlbuf[0] != 0) {
++ if (g->mlbuf_len) {
+ if (!cmd->cb) {
+ gsmd_log(GSMD_NOTICE, "command without cb!!!\n");
+ } else {
+@@ -279,8 +296,8 @@
+ cmd->resp = g->mlbuf;
+ rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+ DEBUGP("Clearing mlbuf\n");
+- g->mlbuf[0] = 0;
+ }
++ g->mlbuf_len = 0;
+ }
+
+ /* the current buf will be appended to mlbuf below */
+@@ -299,7 +316,6 @@
+ DEBUGP("unspecified error\n");
+ if (cmd)
+ cmd->ret = 4;
+- final = 1;
+ goto final_cb;
+ }
+
+@@ -308,7 +324,6 @@
+ /* Part of Case 'C' */
+ if (cmd)
+ cmd->ret = 0;
+- final = 1;
+ goto final_cb;
+ }
+
+@@ -317,14 +332,12 @@
+ if (!strncmp(buf, "NO CARRIER", 11) ||
+ ((g->flags & GSMD_FLAG_V0) && buf[0] == '3')) {
+ /* Part of Case 'D' */
+- final = 1;
+ goto final_cb;
+ }
+
+ if (!strncmp(buf, "BUSY", 4) ||
+ ((g->flags & GSMD_FLAG_V0) && buf[0] == '7')) {
+ /* Part of Case 'D' */
+- final = 1;
+ goto final_cb;
+ }
+ }
+@@ -332,21 +345,13 @@
+ /* we reach here, if we are at an information response that needs to be
+ * passed on */
+
+- if (g->mlbuf[0] == 0) {
+- DEBUGP("Filling mlbuf\n");
+- strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-1);
+- } else {
+- DEBUGP("Appending buf to mlbuf\n");
+- g->mlbuf_len = strlen(g->mlbuf);
+- if (g->mlbuf_len+1 < MLPARSE_BUF_SIZE) {
+- g->mlbuf[g->mlbuf_len] = '\n';
+- g->mlbuf[g->mlbuf_len+1] = '\0';
+- strncat(g->mlbuf, buf, MLPARSE_BUF_SIZE-g->mlbuf_len-2);
+- } else {
+- DEBUGP("response too big for mlbuf!!!\n");
+- return -EFBIG;
+- }
+- }
++ if (g->mlbuf_len)
++ g->mlbuf[g->mlbuf_len ++] = '\n';
++ DEBUGP("Appending buf to mlbuf\n");
++ if (len > MLPARSE_BUF_SIZE - g->mlbuf_len)
++ len = MLPARSE_BUF_SIZE - g->mlbuf_len;
++ memcpy(g->mlbuf + g->mlbuf_len, buf, len);
++ g->mlbuf_len += len;
+ return 0;
+
+ final_cb:
+@@ -363,13 +368,16 @@
+ } else {
+ DEBUGP("Calling final cmd->cb()\n");
+ /* send final result code if there is no information response in mlbuf */
+- if (g->mlbuf[0] == 0)
+- cmd->resp = buf;
+- else
++ if (g->mlbuf_len) {
+ cmd->resp = g->mlbuf;
++ g->mlbuf[g->mlbuf_len] = 0;
++ gsmd_log(GSMD_NOTICE,
++ "the text discarded is %s\n", buf);
++ } else
++ cmd->resp = buf;
+ rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
+ DEBUGP("Clearing mlbuf\n");
+- g->mlbuf[0] = 0;
++ g->mlbuf_len = 0;
+ }
+
+ /* remove from list of currently executing cmds */
+@@ -382,7 +390,15 @@
+ g->gfd_uart.when |= GSMD_FD_WRITE;
+
+ return rc;
+-}
++}
++
++/* called when the modem asked for a new line of a multiline atcmd */
++static int atcmd_prompt(void *data)
++{
++ struct gsmd *g = data;
++
++ g->gfd_uart.when |= GSMD_FD_WRITE;
++}
+
+ /* callback to be called if [virtual] UART has some data for us */
+ static int atcmd_select_cb(int fd, unsigned int what, void *data)
+@@ -390,6 +406,7 @@
+ int len, rc;
+ static char rxbuf[1024];
+ struct gsmd *g = data;
++ char *cr;
+
+ if (what & GSMD_FD_READ) {
+ memset(rxbuf, 0, sizeof(rxbuf));
+@@ -413,8 +430,12 @@
+ if ((what & GSMD_FD_WRITE) && g->interpreter_ready) {
+ struct gsmd_atcmd *pos, *pos2;
+ llist_for_each_entry_safe(pos, pos2, &g->pending_atcmds, list) {
+- len = strlen(pos->buf);
+- rc = write(fd, pos->buf, strlen(pos->buf));
++ cr = strchr(pos->cur, '\n');
++ if (cr)
++ len = cr - pos->cur;
++ else
++ len = pos->buflen;
++ rc = write(fd, pos->cur, len);
+ if (rc == 0) {
+ gsmd_log(GSMD_ERROR, "write returns 0, aborting\n");
+ break;
+@@ -423,27 +444,32 @@
+ fd, rc);
+ return rc;
+ }
+- if (rc < len) {
+- gsmd_log(GSMD_FATAL, "short write!!! FIXME!\n");
+- exit(3);
+- }
++ if (cr && rc == len)
++ rc ++; /* Skip the \n */
++ pos->buflen -= rc;
++ pos->cur += rc;
+ write(fd, "\r", 1);
+- /* success: remove from global list of to-be-sent atcmds */
+- llist_del(&pos->list);
+- /* append to global list of executing atcmds */
+- llist_add_tail(&pos->list, &g->busy_atcmds);
++
++ if (!pos->buflen) {
++ /* success: remove from global list of
++ * to-be-sent atcmds */
++ llist_del(&pos->list);
++ /* append to global list of executing atcmds */
++ llist_add_tail(&pos->list, &g->busy_atcmds);
+
+ /* we only send one cmd at the moment */
+- g->gfd_uart.when &= ~GSMD_FD_WRITE;
+ break;
++ } else {
++ /* The write was short or the atcmd has more
++ * lines to send after a "> ". */
++ if (!(rc < len))
++ break;
++ }
+ }
+- }
+
+-#if 0
+- if (llist_empty(&g->pending_atcmds))
++ /* Either pending_atcmds is empty or a command has to wait */
+ g->gfd_uart.when &= ~GSMD_FD_WRITE;
+-#endif
+-
++ }
+
+ return 0;
+ }
+@@ -454,10 +480,10 @@
+ {
+ int buflen = strlen(cmd);
+ struct gsmd_atcmd *atcmd;
+-
++
+ if (rlen > buflen)
+ buflen = rlen;
+-
++
+ atcmd = talloc_size(__atcmd_ctx, sizeof(*atcmd)+ buflen);
+ if (!atcmd)
+ return NULL;
+@@ -468,6 +494,7 @@
+ atcmd->ret = -255;
+ atcmd->buflen = buflen;
+ atcmd->buf[buflen-1] = '\0';
++ atcmd->cur = atcmd->buf;
+ atcmd->cb = cb;
+ atcmd->resp = NULL;
+ strncpy(atcmd->buf, cmd, buflen-1);
+@@ -480,8 +507,9 @@
+ {
+ DEBUGP("submitting command `%s'\n", cmd->buf);
+
++ if (llist_empty(&g->pending_atcmds))
++ g->gfd_uart.when |= GSMD_FD_WRITE;
+ llist_add_tail(&cmd->list, &g->pending_atcmds);
+- g->gfd_uart.when |= GSMD_FD_WRITE;
+
+ return 0;
+ }
+@@ -517,9 +545,9 @@
+ g->llp.cur = g->llp.buf;
+ g->llp.len = sizeof(g->llp.buf);
+ g->llp.cb = &ml_parse;
++ g->llp.prompt_cb = &atcmd_prompt;
+ g->llp.ctx = g;
+ g->llp.flags = LGSM_ATCMD_F_EXTENDED;
+
+ return gsmd_register_fd(&g->gfd_uart);
+-}
+-
++}
+Index: gsm/src/gsmd/sms_cb.c
+===================================================================
+--- gsm.orig/src/gsmd/sms_cb.c 2007-07-31 13:58:37.000000000 +0200
++++ gsm/src/gsmd/sms_cb.c 2007-07-31 14:23:32.000000000 +0200
+@@ -91,9 +91,6 @@
+ if (!ucmd)
+ return -ENOMEM;
+
+-
+-
+-
+ ucmd->hdr.version = GSMD_PROTO_VERSION;
+ ucmd->hdr.msg_type = GSMD_MSG_SMS;
+ ucmd->hdr.msg_subtype = GSMD_SMS_GETMSG_STORAGE;
+@@ -188,14 +185,26 @@
+ int sms_cb_init(struct gsmd *gsmd)
+ {
+ struct gsmd_atcmd *atcmd;
++ char buffer[10];
+
+ atcmd = atcmd_fill("AT+CSMS=0", NULL, gu, 0);
+ if (!atcmd)
+ return -ENOMEM;
+ atcmd_submit(gsmd, atcmd);
+
+- /* Switch into "text mode" (Section 3.2.3) */
+- atcdm = atcmd_fill("AT+CMGF=1", 9, &sms_cb_init_cb, gu, 0);
++ /* If text mode, set the encoding */
++ if (gu->gsmd->flags & GSMD_FLAG_SMS_FMT) {
++ atcmd = atcmd_fill("AT+CSCS=\"IRA\"", 13, NULL, gu, 0);
++ if (!atcmd)
++ return -ENOMEM;
++ atcmd_submit(gsmd, atcmd);
++ }
++
++ /* Switch into desired mode (Section 3.2.3) */
++ snprintf(buffer, sizeof(buffer), "AT+CMGF=%i",
++ (gu->gsmd->flags & GSMD_FLAG_SMS_FMT) ?
++ GSMD_SMS_FMT_TEXT : GSMD_SMS_FMT_PDU);
++ atcmd = atcmd_fill(buffer, strlen(buffer), &sms_cb_init_cb, gu, 0);
+ if (!atcmd)
+ return -ENOMEM;
+
+Index: gsm/src/gsmd/usock.c
+===================================================================
+--- gsm.orig/src/gsmd/usock.c 2007-07-31 13:58:37.000000000 +0200
++++ gsm/src/gsmd/usock.c 2007-07-31 14:23:32.000000000 +0200
+@@ -75,7 +75,7 @@
+ ucmd->hdr.version = GSMD_PROTO_VERSION;
+ ucmd->hdr.msg_type = GSMD_MSG_PASSTHROUGH;
+ ucmd->hdr.msg_subtype = GSMD_PASSTHROUGH_RESP;
+- ucmd->hdr.len = strlen(resp)+1;
++ ucmd->hdr.len = rlen;
+ ucmd->hdr.id = cmd->id;
+ memcpy(ucmd->buf, resp, ucmd->hdr.len);
+
+@@ -100,7 +100,7 @@
+
+ static int usock_rcv_event(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, int len)
+ {
+- u_int32_t *evtmask = (u_int32_t *) ((char *)gph + sizeof(*gph), gph->id);
++ u_int32_t *evtmask = (u_int32_t *) ((char *)gph + sizeof(*gph));
+
+ if (len < sizeof(*gph) + sizeof(u_int32_t))
+ return -EINVAL;
+@@ -471,18 +471,15 @@
+
+ static int sms_send_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+ {
+- struct gsmd_user *gu = ctx;
++ struct gsmd_user *gu = (struct gsmd_user *) ctx;
+ struct gsmd_ucmd *ucmd;
+-
+- ucmd = gsmd_ucmd_fill(strlen(resp)+1, GSMD_MSG_SMS,
+- GSMD_SMS_SEND, 0);
++
++ ucmd = gsmd_ucmd_fill(strlen(resp) + 1,
++ GSMD_MSG_SMS, GSMD_SMS_SEND, cmd->id);
+ if (!ucmd)
+ return -ENOMEM;
+-
+ strcpy(ucmd->buf, resp);
+-
+ usock_cmd_enqueue(ucmd, gu);
+-
+ return 0;
+ }
+
+@@ -520,34 +517,142 @@
+ return 0;
+ }
+
++int packing_7bit_character(char *src, char *dest)
++{
++ int i,j = 0;
++ unsigned char ch1, ch2;
++ char tmp[2];
++ int shift = 0;
++
++ *dest = '\0';
++
++ for ( i=0; i<strlen(src); i++ ) {
++
++ ch1 = src[i] & 0x7F;
++ ch1 = ch1 >> shift;
++ ch2 = src[(i+1)] & 0x7F;
++ ch2 = ch2 << (7-shift);
++
++ ch1 = ch1 | ch2;
++
++ j = strlen(dest);
++ sprintf(tmp, "%X", (ch1 >> 4));
++ dest[j++] = tmp[0];
++ sprintf(tmp, "%X", (ch1 & 0x0F));
++ dest[j++] = tmp[0];
++ dest[j++] = '\0';
++
++ shift++;
++
++ if ( 7 == shift ) {
++ shift = 0;
++ i++;
++ }
++ }
++
++ return 0;
++}
++
++/* Refer to GSM 03.40 subclause 9.2.3.3, for SMS-SUBMIT */
++static int usock_pdu_make_smssubmit(char *dest, struct gsmd_sms_send *src)
++{
++ u_int8_t header[10 + GSMD_ADDR_MAXLEN];
++ int pos = 0, i, coding7bit = 1;
++
++ /* (Should be optional but some modems require it) SMSC Length octet
++ * is prepended. If omitted or zero, use SMSC stored in the phone. */
++ header[pos ++] = 0x00;
++
++ header[pos ++] =
++ GSMD_SMS_TP_MTI_SUBMIT |
++ (0 << 2) | /* Reject Duplicates: 0 */
++ GSMD_SMS_TP_VPF_NOT_PRESENT |
++ GSMD_SMS_TP_SRR_NOT_REQUEST |
++ GSMD_SMS_TP_UDHI_NO_HEADER |
++ GSMD_SMS_TP_RP_NOT_SET;
++
++ /* TP-Message-Reference - 00 lets the phone set the number itself */
++ header[pos ++] = 0x00;
++
++ header[pos ++] = strlen(src->addr.number);
++ header[pos ++] = src->addr.type;
++ for (i = 0; src->addr.number[i]; i ++) {
++ header[pos] = src->addr.number[i ++] - '0';
++ if (src->addr.number[i])
++ header[pos ++] |= (src->addr.number[i] - '0') << 4;
++ else {
++ header[pos ++] |= 0xf0;
++ break;
++ }
++ }
++
++ /* TP-Protocol-Identifier - 00 means implicit */
++ header[pos ++] = 0x00;
++
++ /* TP-Data-Coding-Scheme - 00 for 7-bit default alphabet */
++ header[pos ++] = coding7bit ? 0x00 : 0x04;
++
++ /* TP-Validity-Period, if present, would go here */
++
++ header[pos ++] = src->payload.length;
++
++ if (dest) {
++ for (i = 0; i < pos; i ++) {
++ sprintf(dest, "%02X", header[i]);
++ dest += 2;
++ }
++ if (coding7bit)
++ packing_7bit_character(src->payload.data, dest);
++ else
++ for (i = 0; i < src->payload.length; i ++) {
++ sprintf(dest, "%02X", src->payload.data[i]);
++ dest += 2;
++ }
++ }
++
++ if (coding7bit)
++ return ((src->payload.length * 7 + 7) >> 3) + pos;
++ else
++ return src->payload.length + pos;
++}
++
++static const char *gsmd_cmgl_stat[] = {
++ "REC UNREAD", "REC READ", "STO UNSENT", "STO SENT", "ALL",
++};
++
+ static int usock_rcv_sms(struct gsmd_user *gu, struct gsmd_msg_hdr *gph,
+ int len)
+ {
+ /* FIXME: TEXT mode support!! */
+ struct gsmd_atcmd *cmd = NULL;
+ struct gsmd_sms_delete *gsd;
+- struct gsmd_sms *gs;
++ struct gsmd_sms_send *gss;
+ struct gsmd_sms_write *gsw;
+ int *stat, *index;
+ int atcmd_len;
+ char buf[1024];
+-
++
+ switch (gph->msg_subtype) {
+ case GSMD_SMS_LIST:
+ /* FIXME: only support PDU mode!! */
+ if(len < sizeof(*gph) + sizeof(int))
+ return -EINVAL;
+- stat = (int *) ((void *)gph + sizeof(*gph));
++ stat = (int *) ((void *)gph + sizeof(*gph));
++ if (*stat < 0 || *stat > 4)
++ return -EINVAL;
+
+- sprintf(buf, "%d", *stat);
+-
+- atcmd_len = 1 + strlen("AT+CMGL=") + strlen(buf);
+- cmd = atcmd_fill("AT+CMGL=", atcmd_len,
+- &sms_list_cb, gu, gph->id);
++ if (gu->gsmd->flags & GSMD_FLAG_SMS_FMT)
++ atcmd_len = sprintf(buf, "AT+CMGL=\"%s\"",
++ gsmd_cmgl_stat[*stat]);
++ else
++ atcmd_len = sprintf(buf, "AT+CMGL=%i", *stat);
++
++ cmd = atcmd_fill(buf, atcmd_len + 1,
++ &sms_list_cb, gu, gph->id);
+ if (!cmd)
+ return -ENOMEM;
+- sprintf(cmd->buf, "AT+CMGL=%s", buf);
+ break;
++
+ case GSMD_SMS_READ:
+ /* FIXME: only support PDU mode!! */
+ if(len < sizeof(*gph) + sizeof(int))
+@@ -563,6 +668,34 @@
+ return -ENOMEM;
+ sprintf(cmd->buf, "AT+CMGR=%s", buf);
+ break;
++
++ case GSMD_SMS_SEND:
++ if (len < sizeof(*gph) + sizeof(*gss))
++ return -EINVAL;
++ gss = (struct gsmd_sms_send *) ((void *) gph + sizeof(*gph));
++
++ if (gu->gsmd->flags & GSMD_FLAG_SMS_FMT) {
++ atcmd_len = sprintf(buf, "AT+CMGS=\"%s\"\n%.*s",
++ gss->addr.number,
++ gss->payload.length,
++ gss->payload.data);
++ } else {
++ atcmd_len = sprintf(buf, "AT+CMGS=%i\n",
++ usock_pdu_make_smssubmit(NULL,
++ gss) - 1);
++ atcmd_len += usock_pdu_make_smssubmit(buf + atcmd_len,
++ gss) * 2;
++ }
++ buf[atcmd_len ++] = 26; /* ^Z ends the message */
++ buf[atcmd_len ++] = 0;
++
++ cmd = atcmd_fill(buf, atcmd_len, &sms_send_cb, gu, gph->id);
++ if (!cmd)
++ return -ENOMEM;
++ break;
++ case GSMD_SMS_WRITE:
++ gsmd_log(GSMD_DEBUG, "sms write\n");
++ break;
+ #if 0
+ case GSMD_SMS_SEND:
+ /* FIXME: only support PDU mode!! */
+@@ -610,8 +743,8 @@
+ default:
+ return -EINVAL;
+ }
+-
+- gsmd_log(GSMD_DEBUG, "%s\n", cmd->buf);
++
++ gsmd_log(GSMD_DEBUG, "%s\n", cmd ? cmd->buf : 0);
+ if (cmd)
+ return atcmd_submit(gu->gsmd, cmd);
+ else
+@@ -867,7 +1000,7 @@
+ [GSMD_MSG_PIN] = &usock_rcv_pin,
+ [GSMD_MSG_PHONE] = &usock_rcv_phone,
+ [GSMD_MSG_NETWORK] = &usock_rcv_network,
+- [GSMD_MSG_SMS] = &usock_rcv_sms,
++ [GSMD_MSG_SMS] = &usock_rcv_sms,
+ //[GSMD_MSG_PHONEBOOK] = &usock_rcv_phonebook,
+ };
+
+Index: gsm/src/gsmd/vendor_ti.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_ti.c 2007-07-31 13:58:37.000000000 +0200
++++ gsm/src/gsmd/vendor_ti.c 2007-07-31 14:23:32.000000000 +0200
+@@ -277,7 +277,7 @@
+
+ static int ticalypso_initsettings(struct gsmd *g)
+ {
+- int rc;
++ int rc = 0;
+ struct gsmd_atcmd *cmd;
+
+ /* use +CTZR: to report time zone changes */
+Index: gsm/src/libgsmd/libgsmd_sms.c
+===================================================================
+--- gsm.orig/src/libgsmd/libgsmd_sms.c 2007-07-31 13:58:37.000000000 +0200
++++ gsm/src/libgsmd/libgsmd_sms.c 2007-07-31 14:23:32.000000000 +0200
+@@ -83,19 +83,33 @@
+ return 0;
+ }
+
+-int lgsmd_sms_send(struct lgsm_handle *lh,
+- const struct lgsm_sms *sms)
++#ifndef MIN
++# define MIN(a,b) (((a) < (b)) ? (a) : (b))
++#endif
++
++int lgsmd_sms_send(struct lgsm_handle *lh,
++ const struct lgsm_sms *sms)
+ {
+ /* FIXME: only support PDU mode */
+ struct gsmd_msg_hdr *gmh;
+- struct gsmd_sms *gs;
++ struct gsmd_sms_send *gss;
+ int rc;
+
+ gmh = lgsm_gmh_fill(GSMD_MSG_SMS,
+- GSMD_SMS_SEND, sizeof(*gs));
++ GSMD_SMS_SEND, sizeof(*gss));
+ if (!gmh)
+ return -ENOMEM;
+- gs = (struct gsmd_sms *) gmh->data;
++ gss = (struct gsmd_sms_send *) gmh->data;
++
++ gss->addr.type =
++ GSMD_TOA_NPI_ISDN |
++ GSMD_TOA_TON_UNKNOWN |
++ GSMD_TOA_RESERVED;
++ strncpy(gss->addr.number, sms->addr, sizeof(gss->addr.number));
++
++ gss->payload.length =
++ MIN(strlen(sms->data), sizeof(gss->payload.data));
++ memcpy(gss->payload.data, sms->data, gss->payload.length);
+
+ rc = lgsm_send(lh, gmh);
+ if (rc < gmh->len + sizeof(*gmh)) {
+@@ -108,7 +122,7 @@
+ return 0;
+ }
+
+-int lgsmd_sms_write(struct lgsm_handle *lh,
++int lgsmd_sms_write(struct lgsm_handle *lh,
+ const struct lgsm_sms_write *sms_write)
+ {
+ /* FIXME: only support PDU mode */
diff --git a/packages/gsm/files/tihtc-csq-fix.patch b/packages/gsm/files/tihtc-csq-fix.patch
new file mode 100644
index 0000000000..3346d85809
--- /dev/null
+++ b/packages/gsm/files/tihtc-csq-fix.patch
@@ -0,0 +1,27 @@
+Index: gsm/src/gsmd/vendor_tihtc.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_tihtc.c 2007-06-03 16:26:39.000000000 +0200
++++ gsm/src/gsmd/vendor_tihtc.c 2007-06-03 16:26:41.000000000 +0200
+@@ -90,6 +90,8 @@
+ struct gsmd_evt_auxdata *aux;
+ struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_SIGNAL,
+ sizeof(*aux));
++ static int rssi_table[] = { 0,5,10,15,20,25,99 };
++ unsigned int i;
+
+ DEBUGP("entering htccsq_parse param=`%s'\n", param);
+ if (!ucmd)
+@@ -98,9 +100,10 @@
+
+ aux = (struct gsmd_evt_auxdata *) ucmd->buf;
+
+- /* FIXME: contains values 1-5, should be mapped to 0-31 somehow? */
+- /* 2 --> 11 */
+- aux->u.signal.sigq.rssi = atoi(buf);
++ i = atoi(buf);
++ if (i > 6)
++ i = 6;
++ aux->u.signal.sigq.rssi = rssi_table[atoi(buf)];
+ aux->u.signal.sigq.ber = 99;
+
+ DEBUGP("sending EVT_SIGNAL\n");
diff --git a/packages/gsm/files/universal-wcdma.patch b/packages/gsm/files/universal-wcdma.patch
new file mode 100644
index 0000000000..a162ce2326
--- /dev/null
+++ b/packages/gsm/files/universal-wcdma.patch
@@ -0,0 +1,29 @@
+Index: gsm/src/gsmd/vendor_qc.c
+===================================================================
+--- gsm.orig/src/gsmd/vendor_qc.c 2007-06-13 20:13:47.000000000 +0200
++++ gsm/src/gsmd/vendor_qc.c 2007-06-13 20:45:19.000000000 +0200
+@@ -69,8 +69,15 @@
+ return -EIO;
+ }
+
++static int wcdma_parse(char *buf, int len, const char *param,
++ struct gsmd *gsmd)
++{
++ return 0;
++}
++
+ static const struct gsmd_unsolicit qc_unsolicit[] = {
+ { "@HTCCSQ", &htccsq_parse }, /* Signal Quality */
++ { "[WCDMA]", &wcdma_parse }, /* ignore [WCDMA] messages */
+
+ /* FIXME: parse the below and generate the respective events */
+
+@@ -97,7 +109,7 @@
+
+ struct gsmd_vendor_plugin gsmd_vendor_plugin = {
+ .name = "Qualcomm msm6250",
+- .ext_chars = "@",
++ .ext_chars = "@[",
+ .num_unsolicit = ARRAY_SIZE(qc_unsolicit),
+ .unsolicit = qc_unsolicit,
+ .detect = &qc_detect,
diff --git a/packages/gsm/libgsmd_svn.bb b/packages/gsm/libgsmd_svn.bb
index 860adf3b0a..87b7dc090d 100644
--- a/packages/gsm/libgsmd_svn.bb
+++ b/packages/gsm/libgsmd_svn.bb
@@ -1,24 +1,44 @@
DESCRIPTION = "GSM libraries and daemons implementing the 07.10 specification"
HOMEPAGE = "http://www.openmoko.org"
-LICENSE = "GPL"
+LICENSE = "GPL LGPL"
SECTION = "libs/gsm"
PROVIDES += "gsmd"
-PV = "0.0+svn${SRCDATE}"
-PR = "r2"
+PV = "0.1+svn${SRCDATE}"
+PR = "r16"
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http"
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \
+ file://gsmd \
+ file://default \
+ file://extreplychars.patch;patch=1 \
+ file://getopt-wait-interpreter-ready.patch;patch=1 \
+ file://tihtc-csq-fix.patch;patch=1 \
+ file://universal-wcdma.patch;patch=1 \
+ file://mlbuf-in-gsmd-struct.patch;patch=1 \
+ file://libgsmd-tool-fix.patch;patch=1 \
+ file://sms-hacks.patch;patch=1"
S = "${WORKDIR}/gsm"
-inherit autotools pkgconfig
+inherit autotools pkgconfig update-rc.d
+
+INITSCRIPT_NAME = "gsmd"
+INITSCRIPT_PARAMS = "defaults 35"
do_stage() {
autotools_stage_all
}
-PACKAGES =+ "${PN}-tools gsmd"
+do_install_append() {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/gsmd ${D}/${sysconfdir}/init.d/
+ install -d ${D}/${sysconfdir}/default
+ install ${WORKDIR}/default ${D}/${sysconfdir}/default/gsmd
+}
+
+PACKAGES =+ "${PN}-tools gsmd gsmd-plugins"
RDEPENDS_${PN} = "gsmd"
+RRECOMMENDS_gsmd = "gsmd-plugins"
FILES_${PN}-tools = "${bindir}/*"
-FILES_gsmd = "${sbindir}/gsmd"
+FILES_gsmd = "${sbindir}/gsmd ${sysconfdir}"
+FILES_gsmd-plugins = "${libdir}/gsmd/*.so*"
PACKAGES_DYNAMIC = "libgsmd* gsmd"
-
diff --git a/packages/gsoap/gsoap_2.7.7.bb b/packages/gsoap/gsoap_2.7.7.bb
index 170c251aaf..799c4a13f3 100644
--- a/packages/gsoap/gsoap_2.7.7.bb
+++ b/packages/gsoap/gsoap_2.7.7.bb
@@ -22,5 +22,4 @@ do_install_append() {
done
}
-PACKAGES = "gsoap-dev"
FILES_gsoap-dev = "${bindir}/wsdl2h ${bindir}/soapcpp2 ${libdir}"
diff --git a/packages/openmoko-pim/openmoko-contacts/.mtn2git_empty b/packages/gspcav1/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openmoko-pim/openmoko-contacts/.mtn2git_empty
+++ b/packages/gspcav1/.mtn2git_empty
diff --git a/packages/openmoko-pim/openmoko-dates/.mtn2git_empty b/packages/gspcav1/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openmoko-pim/openmoko-dates/.mtn2git_empty
+++ b/packages/gspcav1/files/.mtn2git_empty
diff --git a/packages/gspcav1/files/MS.patch b/packages/gspcav1/files/MS.patch
new file mode 100644
index 0000000000..588a4bc3da
--- /dev/null
+++ b/packages/gspcav1/files/MS.patch
@@ -0,0 +1,29 @@
+--- gspcav1-20070110/gspca_core.c.orig 2007-03-16 23:24:37.000000000 +0000
++++ gspcav1-20070110/gspca_core.c 2007-03-16 23:24:43.000000000 +0000
+@@ -398,7 +398,7 @@
+ Sonyc002,
+ Vimicro0321,
+ Orbicam,
+- M$VX1000,
++ MSVX1000,
+ Trust610LCDPowerCamZoom,
+ Sonyc001,
+ LastCamera
+@@ -580,7 +580,7 @@
+ {Sonyc002,"Vc0321"},
+ {Vimicro0321,"Vc0321"},
+ {Orbicam,"Logitech Orbicam"},
+- {M$VX1000,"MicroSoft VX1000"},
++ {MSVX1000,"MicroSoft VX1000"},
+ {Trust610LCDPowerCamZoom, "Trust 610 LCD PowerC@m Zoom"},
+ {Sonyc001,"Sony Visual Communication VGP-VCC1"},
+ {-1, NULL}
+@@ -3124,7 +3124,7 @@
+ case 0x045e:
+ switch(product){
+ case 0x00f7:
+- spca50x->desc = M$VX1000;
++ spca50x->desc = MSVX1000;
+ spca50x->bridge = BRIDGE_SN9CXXX;
+ spca50x->sensor = SENSOR_OV7660;
+ spca50x->customid = SN9C105;
diff --git a/packages/gspcav1/files/Makefile.patch b/packages/gspcav1/files/Makefile.patch
new file mode 100644
index 0000000000..87262686cb
--- /dev/null
+++ b/packages/gspcav1/files/Makefile.patch
@@ -0,0 +1,11 @@
+--- gspcav1-20070110/Makefile.orig 2007-03-16 23:20:18.000000000 +0000
++++ gspcav1-20070110/Makefile 2007-03-16 23:20:44.000000000 +0000
+@@ -41,7 +41,7 @@
+ MODULE_INSTALLDIR2 = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/media/video/
+
+ default:
+- $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) modules
++ $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC="$(CC)" modules
+
+ install:
+ mkdir -p $(MODULE_INSTALLDIR)
diff --git a/packages/gspcav1/gspcav1_20070110.bb b/packages/gspcav1/gspcav1_20070110.bb
new file mode 100644
index 0000000000..40a99d9bd9
--- /dev/null
+++ b/packages/gspcav1/gspcav1_20070110.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "USB Webcam driver for spca5xx chipset family supporting \
+over 100 models of camera"
+PRIORITY = "optional"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+
+PR = "r2"
+
+RRECOMMENDS = "kernel-module-videodev kernel-module-v4l1-compat kernel-module-v4l2-common"
+
+SRC_URI = "http://mxhaard.free.fr/spca50x/Download/oldrelease/${PN}-${PV}.tar.gz \
+ file://Makefile.patch;patch=1 \
+ file://MS.patch;patch=1"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit module
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ oe_runmake 'KERNELDIR=${STAGING_KERNEL_DIR}' \
+ 'CC=${KERNEL_CC}' \
+ 'LD=${KERNEL_LD}'
+}
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/media
+ install -m 0644 *${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/media
+}
diff --git a/packages/gspcav1/gspcav1_20070508.bb b/packages/gspcav1/gspcav1_20070508.bb
new file mode 100644
index 0000000000..866d32b86a
--- /dev/null
+++ b/packages/gspcav1/gspcav1_20070508.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "USB Webcam driver for spca5xx chipset family supporting \
+over 100 models of camera"
+PRIORITY = "optional"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r2"
+
+RRECOMMENDS = "kernel-module-videodev kernel-module-v4l1-compat kernel-module-v4l2-common"
+
+SRC_URI = "http://mxhaard.free.fr/spca50x/Download/oldrelease/${PN}-${PV}.tar.gz \
+ file://Makefile.patch;patch=1 \
+ file://MS.patch;patch=1"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit module
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ oe_runmake 'KERNELDIR=${STAGING_KERNEL_DIR}' \
+ 'CC=${KERNEL_CC}' \
+ 'LD=${KERNEL_LD}'
+}
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/media
+ install -m 0644 *${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/usb/media
+}
diff --git a/packages/gstreamer/gst-common.inc b/packages/gstreamer/gst-common.inc
new file mode 100644
index 0000000000..31629d7572
--- /dev/null
+++ b/packages/gstreamer/gst-common.inc
@@ -0,0 +1,32 @@
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.gstreamer.net/"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake DESTDIR="${STAGE_TEMP}" install
+ if [ -d ${STAGE_TEMP}/${includedir} ]; then
+ cp -fpPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
+ fi
+ for i in $(find ${STAGE_TEMP}/${libdir} -name "*.la")
+ do
+
+ destdir=$(dirname $(echo $i | sed -e s,${STAGE_TEMP}/${libdir},${STAGING_LIBDIR},g))
+ oenote "Installing library $i to $destdir"
+ oe_libinstall -s -so $(basename $i .la) $destdir
+ done
+
+ if [ -d ${STAGE_TEMP}/${datadir}/aclocal ]; then
+ install -d ${STAGING_DATADIR}/aclocal
+ cp -fpPR ${STAGE_TEMP}/${datadir}/aclocal/* ${STAGING_DATADIR}/aclocal
+ fi
+ rm -rf ${STAGE_TEMP}
+}
+
+
diff --git a/packages/openzaurus/.mtn2git_empty b/packages/gstreamer/gst-ffmpeg/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openzaurus/.mtn2git_empty
+++ b/packages/gstreamer/gst-ffmpeg/.mtn2git_empty
diff --git a/packages/gstreamer/gst-ffmpeg/armv5.patch b/packages/gstreamer/gst-ffmpeg/armv5.patch
new file mode 100644
index 0000000000..794709cc5b
--- /dev/null
+++ b/packages/gstreamer/gst-ffmpeg/armv5.patch
@@ -0,0 +1,1509 @@
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/configure.ac 2006-09-23 15:35:21.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/configure.ac 2007-05-01 12:23:39.000000000 +0200
+@@ -190,7 +190,7 @@
+ ARCH_X86=yes
+ ;;
+ # armv4l is a subset of armv5tel
+- armv4l|armv5tel)
++ arm|armv4l|armv5tel|armv5te)
+ TARGET_ARCH="armv4l"
+ ARCH_ARMV4L=yes
+ ;;
+@@ -364,11 +364,8 @@
+ AC_FF_ALLOW_DISABLE(HAVE_IWMMXT, iwmmxt, use ARM/IWMMXT optimizations,[
+ if test x$TARGET_ARCH = xarmv4l; then
+ AC_MSG_CHECKING(for support of IWMMXT optimizations)
+- AC_TRY_RUN([
+- int main () {
++ AC_TRY_COMPILE(,[
+ __asm__ __volatile__ ("wunpckelub wr6, wr4");
+- return 0;
+- }
+ ],[ HAVE_IWMMXT=yes && AC_MSG_RESULT(yes) ],[
+ HAVE_IWMMXT=no && AC_MSG_RESULT(no) ])
+ else
+@@ -376,6 +373,19 @@
+ fi
+ ])
+
++dnl ARMV5TE
++AC_FF_ALLOW_DISABLE(HAVE_ARMV5TE, armv5te, use ARMV5TE optimizations,[
++ if test x$TARGET_ARCH = xarmv4l; then
++ AC_MSG_CHECKING(for support of ARMV5TE specific instructions)
++ AC_TRY_COMPILE(, [
++ __asm__ __volatile__ ("smulbb a4,ip,a3");
++ ],[ HAVE_ARMV5TE=yes && AC_MSG_RESULT(yes) ],[
++ HAVE_ARMV5TE=no && AC_MSG_RESULT(no) ])
++ else
++ HAVE_ARMV5TE=no
++ fi
++])
++
+ dnl GProf (-p)
+ AC_FF_ALLOW_ENABLE(HAVE_GPROF, gprof, profiling with gprof,[
+ GPROF_FLAGS="-p"
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c 2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm.c 2007-05-01 12:23:40.000000000 +0200
+ * ARMv4L optimized DSP utils
+ * Copyright (c) 2001 Lionel Ulmer.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "dsputil.h"
++#include "../dsputil.h"
+ #ifdef HAVE_IPP
+ #include "ipp.h"
+ #endif
+@@ -27,6 +29,12 @@
+ extern void j_rev_dct_ARM(DCTELEM *data);
+ extern void simple_idct_ARM(DCTELEM *data);
+
++extern void simple_idct_armv5te(DCTELEM *data);
++extern void simple_idct_put_armv5te(uint8_t *dest, int line_size,
++ DCTELEM *data);
++extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
++ DCTELEM *data);
++
+ /* XXX: local hack */
+ static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
+ static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
+@@ -196,8 +204,10 @@
+ ff_add_pixels_clamped = c->add_pixels_clamped;
+
+ if(idct_algo == FF_IDCT_AUTO){
+-#ifdef HAVE_IPP
++#if defined(HAVE_IPP)
+ idct_algo = FF_IDCT_IPP;
++#elif defined(HAVE_ARMV5TE)
++ idct_algo = FF_IDCT_SIMPLEARMV5TE;
+ #else
+ idct_algo = FF_IDCT_ARM;
+ #endif
+@@ -213,6 +223,13 @@
+ c->idct_add= simple_idct_ARM_add;
+ c->idct = simple_idct_ARM;
+ c->idct_permutation_type= FF_NO_IDCT_PERM;
++#ifdef HAVE_ARMV5TE
++ } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){
++ c->idct_put= simple_idct_put_armv5te;
++ c->idct_add= simple_idct_add_armv5te;
++ c->idct = simple_idct_armv5te;
++ c->idct_permutation_type = FF_NO_IDCT_PERM;
++#endif
+ #ifdef HAVE_IPP
+ } else if (idct_algo==FF_IDCT_IPP){
+ c->idct_put= simple_idct_ipp_put;
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S 2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_arm_s.S 2007-05-01 12:23:40.000000000 +0200
+@@ -2,20 +2,29 @@
+ @ ARMv4L optimized DSP utils
+ @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
+ @
+-@ This library is free software; you can redistribute it and/or
++@ This file is part of FFmpeg.
++@
++@ FFmpeg is free software; you can redistribute it and/or
+ @ modify it under the terms of the GNU Lesser General Public
+ @ License as published by the Free Software Foundation; either
+-@ version 2 of the License, or (at your option) any later version.
++@ version 2.1 of the License, or (at your option) any later version.
+ @
+-@ This library is distributed in the hope that it will be useful,
++@ FFmpeg is distributed in the hope that it will be useful,
+ @ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ @ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ @ Lesser General Public License for more details.
+ @
+ @ You should have received a copy of the GNU Lesser General Public
+-@ License along with this library; if not, write to the Free Software
++@ License along with FFmpeg; if not, write to the Free Software
+ @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ @
++#if defined(__ARM_ARCH_5__) || \
++ defined(__ARM_ARCH_5T__) || \
++ defined(__ARM_ARCH_5TE__)
++#define PLD(code...) code
++#else
++#define PLD(code...)
++#endif
+
+ .macro ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
+ mov \Rd0, \Rn0, lsr #(\shift * 8)
+@@ -74,7 +83,7 @@
+ put_pixels16_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r11, lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -85,7 +94,7 @@
+ ldmia r1, {r4-r7}
+ add r1, r1, r2
+ stmia r0, {r4-r7}
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ add r0, r0, r2
+ bne 1b
+@@ -95,7 +104,7 @@
+ ldmia r1, {r4-r8}
+ add r1, r1, r2
+ ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r9-r12}
+ add r0, r0, r2
+@@ -106,7 +115,7 @@
+ ldmia r1, {r4-r8}
+ add r1, r1, r2
+ ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r9-r12}
+ add r0, r0, r2
+@@ -117,7 +126,7 @@
+ ldmia r1, {r4-r8}
+ add r1, r1, r2
+ ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r9-r12}
+ add r0, r0, r2
+@@ -136,7 +145,7 @@
+ put_pixels8_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r5,lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -147,7 +156,7 @@
+ ldmia r1, {r4-r5}
+ add r1, r1, r2
+ subs r3, r3, #1
+- pld [r1]
++ PLD ( pld [r1] )
+ stmia r0, {r4-r5}
+ add r0, r0, r2
+ bne 1b
+@@ -157,7 +166,7 @@
+ ldmia r1, {r4-r5, r12}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+ add r0, r0, r2
+@@ -168,7 +177,7 @@
+ ldmia r1, {r4-r5, r12}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+ add r0, r0, r2
+@@ -179,7 +188,7 @@
+ ldmia r1, {r4-r5, r12}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12
+- pld [r1]
++ PLD ( pld [r1] )
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+ add r0, r0, r2
+@@ -198,7 +207,7 @@
+ put_pixels8_x2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r10,lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -210,7 +219,7 @@
+ ldmia r1, {r4-r5, r10}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -223,7 +232,7 @@
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+ ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+@@ -236,7 +245,7 @@
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
+ ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+@@ -248,7 +257,7 @@
+ ldmia r1, {r4-r5, r10}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r8, r9, r6, r7, r5, r10, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -267,7 +276,7 @@
+ put_no_rnd_pixels8_x2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r10,lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -279,7 +288,7 @@
+ ldmia r1, {r4-r5, r10}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -292,7 +301,7 @@
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10
+ ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+@@ -305,7 +314,7 @@
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10
+ ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12
+ subs r3, r3, #1
+ stmia r0, {r4-r5}
+@@ -317,7 +326,7 @@
+ ldmia r1, {r4-r5, r10}
+ add r1, r1, r2
+ ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -338,7 +347,7 @@
+ put_pixels8_y2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -352,13 +361,13 @@
+ add r1, r1, r2
+ 6: ldmia r1, {r6-r7}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+ ldmia r1, {r4-r5}
+ add r1, r1, r2
+ stmia r0, {r8-r9}
+ add r0, r0, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ RND_AVG32 r8, r9, r6, r7, r4, r5, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -369,18 +378,18 @@
+ 2:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
+ RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ subs r3, r3, #1
+ RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -392,18 +401,18 @@
+ 3:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
+ RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ subs r3, r3, #1
+ RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -415,18 +424,18 @@
+ 4:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
+ RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ subs r3, r3, #1
+ RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -447,7 +456,7 @@
+ put_no_rnd_pixels8_y2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+ adr r5, 5f
+ ands r4, r1, #3
+@@ -461,13 +470,13 @@
+ add r1, r1, r2
+ 6: ldmia r1, {r6-r7}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12
+ ldmia r1, {r4-r5}
+ add r1, r1, r2
+ stmia r0, {r8-r9}
+ add r0, r0, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12
+ subs r3, r3, #1
+ stmia r0, {r8-r9}
+@@ -478,18 +487,18 @@
+ 2:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9
+ NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6
+ subs r3, r3, #1
+ NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -501,18 +510,18 @@
+ 3:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9
+ NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6
+ subs r3, r3, #1
+ NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -524,18 +533,18 @@
+ 4:
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ 6: ldmia r1, {r7-r9}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9
+ NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12
+ stmia r0, {r10-r11}
+ add r0, r0, r2
+ ldmia r1, {r4-r6}
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6
+ subs r3, r3, #1
+ NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12
+@@ -562,7 +571,7 @@
+ ldmia r1, {r8-r10}
+ .endif
+ add r1, r1, r2
+- pld [r1]
++ PLD ( pld [r1] )
+ .if \align == 0
+ ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8
+ .elseif \align == 1
+@@ -624,7 +633,7 @@
+ put_pixels8_xy2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+ adrl r12, 5f
+ ands r4, r1, #3
+@@ -661,7 +670,7 @@
+ put_no_rnd_pixels8_xy2_arm:
+ @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+ @ block = word aligned, pixles = unaligned
+- pld [r1]
++ PLD ( pld [r1] )
+ stmfd sp!, {r4-r11,lr} @ R14 is also called LR
+ adrl r12, 5f
+ ands r4, r1, #3
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c 2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c 2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+ * iWMMXt optimized DSP utils
+ * Copyright (c) 2004 AGAWA Koji
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+ * iWMMXt optimized DSP utils
+ * copyright (c) 2004 AGAWA Koji
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am 2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/Makefile.am 2007-05-01 12:23:40.000000000 +0200
+@@ -7,9 +7,14 @@
+ iwmmxt_libs = libiwmmxt.la
+ endif
+
++if HAVE_ARMV5TE
++armv5te_libs = libarmv5te.la
++endif
++
+ noinst_LTLIBRARIES = \
+ libarmv4l.la \
+- $(iwmmxt_libs)
++ $(iwmmxt_libs) \
++ $(armv5te_libs)
+
+ libarmv4l_la_SOURCES = \
+ jrevdct_arm.S \
+@@ -18,6 +23,9 @@
+ dsputil_arm.c \
+ mpegvideo_arm.c
+
++libarmv5te_la_SOURCES = \
++ simple_idct_armv5te.S
++
+ libiwmmxt_la_SOURCES = \
+ dsputil_iwmmxt.c \
+ mpegvideo_iwmmxt.c
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h 2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mathops.h 2007-05-01 12:23:40.000000000 +0200
+@@ -2,18 +2,20 @@
+ * simple math operations
+ * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+@@ -39,9 +41,9 @@
+ # define MAC16(rt, ra, rb) \
+ asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
+ /* signed 16x16 -> 32 multiply */
+-# define MUL16(ra, rb) \
+- ({ int __rt;\
+- asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb));
++# define MUL16(ra, rb) \
++ ({ int __rt; \
++ asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); \
+ __rt; })
+
+ #endif
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c 2006-02-19 00:04:59.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_arm.c 2007-05-01 12:23:40.000000000 +0200
+@@ -1,25 +1,27 @@
+ /*
+ * Copyright (c) 2002 Michael Niedermayer
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+-#include "dsputil.h"
+-#include "mpegvideo.h"
+-#include "avcodec.h"
++#include "../dsputil.h"
++#include "../mpegvideo.h"
++#include "../avcodec.h"
+
+ extern void MPV_common_init_iwmmxt(MpegEncContext *s);
+
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c 2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c 2007-05-01 12:23:40.000000000 +0200
+@@ -1,18 +1,20 @@
+ /*
+ * copyright (c) 2004 AGAWA Koji
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S 2006-09-20 20:55:37.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_arm.S 2007-05-01 12:23:40.000000000 +0200
+@@ -5,18 +5,20 @@
+ *
+ * Author: Frederic Boulay <dilb@handhelds.org>
+ *
+- * This library is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 2 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+- * This library is distributed in the hope that it will be useful,
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library; if not, write to the Free Software
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The function defined in this file, is derived from the simple_idct function
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S 1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/armv4l/simple_idct_armv5te.S 2007-05-01 12:23:40.000000000 +0200
+@@ -0,0 +1,718 @@
++/*
++ * Simple IDCT
++ *
++ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
++ * Copyright (c) 2006 Mans Rullgard <mru@inprovide.com>
++ *
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * FFmpeg is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ */
++
++#define W1 22725 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W2 21407 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W3 19266 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W4 16383 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W5 12873 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W6 8867 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define W7 4520 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
++#define ROW_SHIFT 11
++#define COL_SHIFT 20
++
++#define W13 (W1 | (W3 << 16))
++#define W26 (W2 | (W6 << 16))
++#define W57 (W5 | (W7 << 16))
++
++ .text
++ .align
++w13: .long W13
++w26: .long W26
++w57: .long W57
++
++ .align
++ .func idct_row_armv5te
++idct_row_armv5te:
++ str lr, [sp, #-4]!
++
++ ldrd v1, [a1, #8]
++ ldrd a3, [a1] /* a3 = row[1:0], a4 = row[3:2] */
++ orrs v1, v1, v2
++ cmpeq v1, a4
++ cmpeq v1, a3, lsr #16
++ beq row_dc_only
++
++ mov v1, #(1<<(ROW_SHIFT-1))
++ mov ip, #16384
++ sub ip, ip, #1 /* ip = W4 */
++ smlabb v1, ip, a3, v1 /* v1 = W4*row[0]+(1<<(RS-1)) */
++ ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */
++ smultb a2, ip, a4
++ smulbb lr, ip, a4
++ add v2, v1, a2
++ sub v3, v1, a2
++ sub v4, v1, lr
++ add v1, v1, lr
++
++ ldr ip, [pc, #(w13-.-8)] /* ip = W1 | (W3 << 16) */
++ ldr lr, [pc, #(w57-.-8)] /* lr = W5 | (W7 << 16) */
++ smulbt v5, ip, a3
++ smultt v6, lr, a4
++ smlatt v5, ip, a4, v5
++ smultt a2, ip, a3
++ smulbt v7, lr, a3
++ sub v6, v6, a2
++ smulbt a2, ip, a4
++ smultt fp, lr, a3
++ sub v7, v7, a2
++ smulbt a2, lr, a4
++ ldrd a3, [a1, #8] /* a3=row[5:4] a4=row[7:6] */
++ sub fp, fp, a2
++
++ orrs a2, a3, a4
++ beq 1f
++
++ smlabt v5, lr, a3, v5
++ smlabt v6, ip, a3, v6
++ smlatt v5, lr, a4, v5
++ smlabt v6, lr, a4, v6
++ smlatt v7, lr, a3, v7
++ smlatt fp, ip, a3, fp
++ smulbt a2, ip, a4
++ smlatt v7, ip, a4, v7
++ sub fp, fp, a2
++
++ ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */
++ mov a2, #16384
++ sub a2, a2, #1 /* a2 = W4 */
++ smulbb a2, a2, a3 /* a2 = W4*row[4] */
++ smultb lr, ip, a4 /* lr = W6*row[6] */
++ add v1, v1, a2 /* v1 += W4*row[4] */
++ add v1, v1, lr /* v1 += W6*row[6] */
++ add v4, v4, a2 /* v4 += W4*row[4] */
++ sub v4, v4, lr /* v4 -= W6*row[6] */
++ smulbb lr, ip, a4 /* lr = W2*row[6] */
++ sub v2, v2, a2 /* v2 -= W4*row[4] */
++ sub v2, v2, lr /* v2 -= W2*row[6] */
++ sub v3, v3, a2 /* v3 -= W4*row[4] */
++ add v3, v3, lr /* v3 += W2*row[6] */
++
++1: add a2, v1, v5
++ mov a3, a2, lsr #11
++ bic a3, a3, #0x1f0000
++ sub a2, v2, v6
++ mov a2, a2, lsr #11
++ add a3, a3, a2, lsl #16
++ add a2, v3, v7
++ mov a4, a2, lsr #11
++ bic a4, a4, #0x1f0000
++ add a2, v4, fp
++ mov a2, a2, lsr #11
++ add a4, a4, a2, lsl #16
++ strd a3, [a1]
++
++ sub a2, v4, fp
++ mov a3, a2, lsr #11
++ bic a3, a3, #0x1f0000
++ sub a2, v3, v7
++ mov a2, a2, lsr #11
++ add a3, a3, a2, lsl #16
++ add a2, v2, v6
++ mov a4, a2, lsr #11
++ bic a4, a4, #0x1f0000
++ sub a2, v1, v5
++ mov a2, a2, lsr #11
++ add a4, a4, a2, lsl #16
++ strd a3, [a1, #8]
++
++ ldr pc, [sp], #4
++
++row_dc_only:
++ orr a3, a3, a3, lsl #16
++ bic a3, a3, #0xe000
++ mov a3, a3, lsl #3
++ mov a4, a3
++ strd a3, [a1]
++ strd a3, [a1, #8]
++
++ ldr pc, [sp], #4
++ .endfunc
++
++ .macro idct_col
++ ldr a4, [a1] /* a4 = col[1:0] */
++ mov ip, #16384
++ sub ip, ip, #1 /* ip = W4 */
++#if 0
++ mov v1, #(1<<(COL_SHIFT-1))
++ smlabt v2, ip, a4, v1 /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */
++ smlabb v1, ip, a4, v1 /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */
++ ldr a4, [a1, #(16*4)]
++#else
++ mov v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */
++ add v2, v1, a4, asr #16
++ rsb v2, v2, v2, lsl #14
++ mov a4, a4, lsl #16
++ add v1, v1, a4, asr #16
++ ldr a4, [a1, #(16*4)]
++ rsb v1, v1, v1, lsl #14
++#endif
++
++ smulbb lr, ip, a4
++ smulbt a3, ip, a4
++ sub v3, v1, lr
++ sub v5, v1, lr
++ add v7, v1, lr
++ add v1, v1, lr
++ sub v4, v2, a3
++ sub v6, v2, a3
++ add fp, v2, a3
++ ldr ip, [pc, #(w26-.-8)]
++ ldr a4, [a1, #(16*2)]
++ add v2, v2, a3
++
++ smulbb lr, ip, a4
++ smultb a3, ip, a4
++ add v1, v1, lr
++ sub v7, v7, lr
++ add v3, v3, a3
++ sub v5, v5, a3
++ smulbt lr, ip, a4
++ smultt a3, ip, a4
++ add v2, v2, lr
++ sub fp, fp, lr
++ add v4, v4, a3
++ ldr a4, [a1, #(16*6)]
++ sub v6, v6, a3
++
++ smultb lr, ip, a4
++ smulbb a3, ip, a4
++ add v1, v1, lr
++ sub v7, v7, lr
++ sub v3, v3, a3
++ add v5, v5, a3
++ smultt lr, ip, a4
++ smulbt a3, ip, a4
++ add v2, v2, lr
++ sub fp, fp, lr
++ sub v4, v4, a3
++ add v6, v6, a3
++
++ stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp}
++
++ ldr ip, [pc, #(w13-.-8)]
++ ldr a4, [a1, #(16*1)]
++ ldr lr, [pc, #(w57-.-8)]
++ smulbb v1, ip, a4
++ smultb v3, ip, a4
++ smulbb v5, lr, a4
++ smultb v7, lr, a4
++ smulbt v2, ip, a4
++ smultt v4, ip, a4
++ smulbt v6, lr, a4
++ smultt fp, lr, a4
++ rsb v4, v4, #0
++ ldr a4, [a1, #(16*3)]
++ rsb v3, v3, #0
++
++ smlatb v1, ip, a4, v1
++ smlatb v3, lr, a4, v3
++ smulbb a3, ip, a4
++ smulbb a2, lr, a4
++ sub v5, v5, a3
++ sub v7, v7, a2
++ smlatt v2, ip, a4, v2
++ smlatt v4, lr, a4, v4
++ smulbt a3, ip, a4
++ smulbt a2, lr, a4
++ sub v6, v6, a3
++ ldr a4, [a1, #(16*5)]
++ sub fp, fp, a2
++
++ smlabb v1, lr, a4, v1
++ smlabb v3, ip, a4, v3
++ smlatb v5, lr, a4, v5
++ smlatb v7, ip, a4, v7
++ smlabt v2, lr, a4, v2
++ smlabt v4, ip, a4, v4
++ smlatt v6, lr, a4, v6
++ ldr a3, [a1, #(16*7)]
++ smlatt fp, ip, a4, fp
++
++ smlatb v1, lr, a3, v1
++ smlabb v3, lr, a3, v3
++ smlatb v5, ip, a3, v5
++ smulbb a4, ip, a3
++ smlatt v2, lr, a3, v2
++ sub v7, v7, a4
++ smlabt v4, lr, a3, v4
++ smulbt a4, ip, a3
++ smlatt v6, ip, a3, v6
++ sub fp, fp, a4
++ .endm
++
++ .align
++ .func idct_col_armv5te
++idct_col_armv5te:
++ str lr, [sp, #-4]!
++
++ idct_col
++
++ ldmfd sp!, {a3, a4}
++ adds a2, a3, v1
++ mov a2, a2, lsr #20
++ orrmi a2, a2, #0xf000
++ add ip, a4, v2
++ mov ip, ip, asr #20
++ orr a2, a2, ip, lsl #16
++ str a2, [a1]
++ subs a3, a3, v1
++ mov a2, a3, lsr #20
++ orrmi a2, a2, #0xf000
++ sub a4, a4, v2
++ mov a4, a4, asr #20
++ orr a2, a2, a4, lsl #16
++ ldmfd sp!, {a3, a4}
++ str a2, [a1, #(16*7)]
++
++ subs a2, a3, v3
++ mov a2, a2, lsr #20
++ orrmi a2, a2, #0xf000
++ sub ip, a4, v4
++ mov ip, ip, asr #20
++ orr a2, a2, ip, lsl #16
++ str a2, [a1, #(16*1)]
++ adds a3, a3, v3
++ mov a2, a3, lsr #20
++ orrmi a2, a2, #0xf000
++ add a4, a4, v4
++ mov a4, a4, asr #20
++ orr a2, a2, a4, lsl #16
++ ldmfd sp!, {a3, a4}
++ str a2, [a1, #(16*6)]
++
++ adds a2, a3, v5
++ mov a2, a2, lsr #20
++ orrmi a2, a2, #0xf000
++ add ip, a4, v6
++ mov ip, ip, asr #20
++ orr a2, a2, ip, lsl #16
++ str a2, [a1, #(16*2)]
++ subs a3, a3, v5
++ mov a2, a3, lsr #20
++ orrmi a2, a2, #0xf000
++ sub a4, a4, v6
++ mov a4, a4, asr #20
++ orr a2, a2, a4, lsl #16
++ ldmfd sp!, {a3, a4}
++ str a2, [a1, #(16*5)]
++
++ adds a2, a3, v7
++ mov a2, a2, lsr #20
++ orrmi a2, a2, #0xf000
++ add ip, a4, fp
++ mov ip, ip, asr #20
++ orr a2, a2, ip, lsl #16
++ str a2, [a1, #(16*3)]
++ subs a3, a3, v7
++ mov a2, a3, lsr #20
++ orrmi a2, a2, #0xf000
++ sub a4, a4, fp
++ mov a4, a4, asr #20
++ orr a2, a2, a4, lsl #16
++ str a2, [a1, #(16*4)]
++
++ ldr pc, [sp], #4
++ .endfunc
++
++ .align
++ .func idct_col_put_armv5te
++idct_col_put_armv5te:
++ str lr, [sp, #-4]!
++
++ idct_col
++
++ ldmfd sp!, {a3, a4}
++ ldr lr, [sp, #32]
++ add a2, a3, v1
++ movs a2, a2, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add ip, a4, v2
++ movs ip, ip, asr #20
++ movmi ip, #0
++ cmp ip, #255
++ movgt ip, #255
++ orr a2, a2, ip, lsl #8
++ sub a3, a3, v1
++ movs a3, a3, asr #20
++ movmi a3, #0
++ cmp a3, #255
++ movgt a3, #255
++ sub a4, a4, v2
++ movs a4, a4, asr #20
++ movmi a4, #0
++ cmp a4, #255
++ ldr v1, [sp, #28]
++ movgt a4, #255
++ strh a2, [v1]
++ add a2, v1, #2
++ str a2, [sp, #28]
++ orr a2, a3, a4, lsl #8
++ rsb v2, lr, lr, lsl #3
++ ldmfd sp!, {a3, a4}
++ strh a2, [v2, v1]!
++
++ sub a2, a3, v3
++ movs a2, a2, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ sub ip, a4, v4
++ movs ip, ip, asr #20
++ movmi ip, #0
++ cmp ip, #255
++ movgt ip, #255
++ orr a2, a2, ip, lsl #8
++ strh a2, [v1, lr]!
++ add a3, a3, v3
++ movs a2, a3, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add a4, a4, v4
++ movs a4, a4, asr #20
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a2, a4, lsl #8
++ ldmfd sp!, {a3, a4}
++ strh a2, [v2, -lr]!
++
++ add a2, a3, v5
++ movs a2, a2, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add ip, a4, v6
++ movs ip, ip, asr #20
++ movmi ip, #0
++ cmp ip, #255
++ movgt ip, #255
++ orr a2, a2, ip, lsl #8
++ strh a2, [v1, lr]!
++ sub a3, a3, v5
++ movs a2, a3, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ sub a4, a4, v6
++ movs a4, a4, asr #20
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a2, a4, lsl #8
++ ldmfd sp!, {a3, a4}
++ strh a2, [v2, -lr]!
++
++ add a2, a3, v7
++ movs a2, a2, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add ip, a4, fp
++ movs ip, ip, asr #20
++ movmi ip, #0
++ cmp ip, #255
++ movgt ip, #255
++ orr a2, a2, ip, lsl #8
++ strh a2, [v1, lr]
++ sub a3, a3, v7
++ movs a2, a3, asr #20
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ sub a4, a4, fp
++ movs a4, a4, asr #20
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a2, a4, lsl #8
++ strh a2, [v2, -lr]
++
++ ldr pc, [sp], #4
++ .endfunc
++
++ .align
++ .func idct_col_add_armv5te
++idct_col_add_armv5te:
++ str lr, [sp, #-4]!
++
++ idct_col
++
++ ldr lr, [sp, #36]
++
++ ldmfd sp!, {a3, a4}
++ ldrh ip, [lr]
++ add a2, a3, v1
++ mov a2, a2, asr #20
++ sub a3, a3, v1
++ and v1, ip, #255
++ adds a2, a2, v1
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add v1, a4, v2
++ mov v1, v1, asr #20
++ adds v1, v1, ip, lsr #8
++ movmi v1, #0
++ cmp v1, #255
++ movgt v1, #255
++ orr a2, a2, v1, lsl #8
++ ldr v1, [sp, #32]
++ sub a4, a4, v2
++ rsb v2, v1, v1, lsl #3
++ ldrh ip, [v2, lr]!
++ strh a2, [lr]
++ mov a3, a3, asr #20
++ and a2, ip, #255
++ adds a3, a3, a2
++ movmi a3, #0
++ cmp a3, #255
++ movgt a3, #255
++ mov a4, a4, asr #20
++ adds a4, a4, ip, lsr #8
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ add a2, lr, #2
++ str a2, [sp, #28]
++ orr a2, a3, a4, lsl #8
++ strh a2, [v2]
++
++ ldmfd sp!, {a3, a4}
++ ldrh ip, [lr, v1]!
++ sub a2, a3, v3
++ mov a2, a2, asr #20
++ add a3, a3, v3
++ and v3, ip, #255
++ adds a2, a2, v3
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ sub v3, a4, v4
++ mov v3, v3, asr #20
++ adds v3, v3, ip, lsr #8
++ movmi v3, #0
++ cmp v3, #255
++ movgt v3, #255
++ orr a2, a2, v3, lsl #8
++ add a4, a4, v4
++ ldrh ip, [v2, -v1]!
++ strh a2, [lr]
++ mov a3, a3, asr #20
++ and a2, ip, #255
++ adds a3, a3, a2
++ movmi a3, #0
++ cmp a3, #255
++ movgt a3, #255
++ mov a4, a4, asr #20
++ adds a4, a4, ip, lsr #8
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a3, a4, lsl #8
++ strh a2, [v2]
++
++ ldmfd sp!, {a3, a4}
++ ldrh ip, [lr, v1]!
++ add a2, a3, v5
++ mov a2, a2, asr #20
++ sub a3, a3, v5
++ and v3, ip, #255
++ adds a2, a2, v3
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add v3, a4, v6
++ mov v3, v3, asr #20
++ adds v3, v3, ip, lsr #8
++ movmi v3, #0
++ cmp v3, #255
++ movgt v3, #255
++ orr a2, a2, v3, lsl #8
++ sub a4, a4, v6
++ ldrh ip, [v2, -v1]!
++ strh a2, [lr]
++ mov a3, a3, asr #20
++ and a2, ip, #255
++ adds a3, a3, a2
++ movmi a3, #0
++ cmp a3, #255
++ movgt a3, #255
++ mov a4, a4, asr #20
++ adds a4, a4, ip, lsr #8
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a3, a4, lsl #8
++ strh a2, [v2]
++
++ ldmfd sp!, {a3, a4}
++ ldrh ip, [lr, v1]!
++ add a2, a3, v7
++ mov a2, a2, asr #20
++ sub a3, a3, v7
++ and v3, ip, #255
++ adds a2, a2, v3
++ movmi a2, #0
++ cmp a2, #255
++ movgt a2, #255
++ add v3, a4, fp
++ mov v3, v3, asr #20
++ adds v3, v3, ip, lsr #8
++ movmi v3, #0
++ cmp v3, #255
++ movgt v3, #255
++ orr a2, a2, v3, lsl #8
++ sub a4, a4, fp
++ ldrh ip, [v2, -v1]!
++ strh a2, [lr]
++ mov a3, a3, asr #20
++ and a2, ip, #255
++ adds a3, a3, a2
++ movmi a3, #0
++ cmp a3, #255
++ movgt a3, #255
++ mov a4, a4, asr #20
++ adds a4, a4, ip, lsr #8
++ movmi a4, #0
++ cmp a4, #255
++ movgt a4, #255
++ orr a2, a3, a4, lsl #8
++ strh a2, [v2]
++
++ ldr pc, [sp], #4
++ .endfunc
++
++ .align
++ .global simple_idct_armv5te
++ .func simple_idct_armv5te
++simple_idct_armv5te:
++ stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++
++ sub a1, a1, #(16*7)
++
++ bl idct_col_armv5te
++ add a1, a1, #4
++ bl idct_col_armv5te
++ add a1, a1, #4
++ bl idct_col_armv5te
++ add a1, a1, #4
++ bl idct_col_armv5te
++
++ ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++ .endfunc
++
++ .align
++ .global simple_idct_add_armv5te
++ .func simple_idct_add_armv5te
++simple_idct_add_armv5te:
++ stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++ mov a1, a3
++
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++
++ sub a1, a1, #(16*7)
++
++ bl idct_col_add_armv5te
++ add a1, a1, #4
++ bl idct_col_add_armv5te
++ add a1, a1, #4
++ bl idct_col_add_armv5te
++ add a1, a1, #4
++ bl idct_col_add_armv5te
++
++ add sp, sp, #8
++ ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++ .endfunc
++
++ .align
++ .global simple_idct_put_armv5te
++ .func simple_idct_put_armv5te
++simple_idct_put_armv5te:
++ stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr}
++
++ mov a1, a3
++
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++ add a1, a1, #16
++ bl idct_row_armv5te
++
++ sub a1, a1, #(16*7)
++
++ bl idct_col_put_armv5te
++ add a1, a1, #4
++ bl idct_col_put_armv5te
++ add a1, a1, #4
++ bl idct_col_put_armv5te
++ add a1, a1, #4
++ bl idct_col_put_armv5te
++
++ add sp, sp, #8
++ ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc}
++ .endfunc
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/avcodec.h 2006-09-20 20:55:36.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/avcodec.h 2007-05-01 12:23:40.000000000 +0200
+@@ -1217,6 +1217,7 @@
+ #define FF_IDCT_IPP 13
+ #define FF_IDCT_XVIDMMX 14
+ #define FF_IDCT_CAVS 15
++#define FF_IDCT_SIMPLEARMV5TE 16
+
+ /**
+ * slice count.
+diff -Nur gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am
+--- gst-ffmpeg-0.10.2/gst-libs/ext/ffmpeg/libavcodec/Makefile.am 2006-09-22 06:07:23.000000000 +0200
++++ gst-ffmpeg-0.10.2.new/gst-libs/ext/ffmpeg/libavcodec/Makefile.am 2007-05-01 12:23:40.000000000 +0200
+@@ -19,7 +19,10 @@
+ if HAVE_IWMMXT
+ iwmmxt_libs = armv4l/libiwmmxt.la
+ endif
+-armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs)
++if HAVE_ARMV5TE
++armv5te_libs = armv4l/libarmv5te.la
++endif
++armv4l_libs = armv4l/libarmv4l.la $(iwmmxt_libs) $(armv5te_libs)
+ armv4l_dirs = armv4l
+ endif
+
diff --git a/packages/gstreamer/gst-ffmpeg_0.10.2.bb b/packages/gstreamer/gst-ffmpeg_0.10.2.bb
new file mode 100644
index 0000000000..e4dfb0b701
--- /dev/null
+++ b/packages/gstreamer/gst-ffmpeg_0.10.2.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "FFmpeg-based GStreamer plug-in"
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer zlib"
+PR = "r1"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2 \
+ file://armv5.patch;patch=1"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-sdltest --disable-ffplay --disable-freetypetest \
+ --disable-vorbis --disable-vorbistest --disable-encoders \
+ --disable-v4l --disable-audio-oss --disable-dv1394 \
+ --disable-vhook --disable-ffmpeg --disable-ffserver \
+ --enable-pp --disable-decoder-vorbis"
+
+# We do this because the install program is called with -s which causes it to
+# call "strip" and it then mangles cross compiled stuff..
+PATH_prepend="${CROSS_DIR}/${TARGET_SYS}/bin:"
+
+# Hack to get STAGING_LIBDIR into the linker path when building ffmpeg
+CC = "${CCACHE} ${HOST_PREFIX}gcc ${TARGET_CC_ARCH} -L${STAGING_LIBDIR}"
+
diff --git a/packages/gstreamer/gst-meta-base_0.10.bb b/packages/gstreamer/gst-meta-base_0.10.bb
new file mode 100644
index 0000000000..182790bdea
--- /dev/null
+++ b/packages/gstreamer/gst-meta-base_0.10.bb
@@ -0,0 +1,52 @@
+# Copyright (C) 2006,2007 OpenedHand LTD
+
+DESCRIPTION = "Gstreamer package groups"
+DEPENDS = "gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly"
+PR = "r4"
+
+PACKAGES = "\
+ gst-meta-base \
+ gst-meta-audio \
+ gst-meta-debug \
+ gst-meta-video"
+
+ALLOW_EMPTY = "1"
+
+RDEPENDS_gst-meta-base = "\
+ gstreamer \
+ gst-plugin-playbin \
+ gst-plugin-decodebin \
+# gst-plugin-gnomevfs \
+ gst-plugin-alsa \
+ gst-plugin-volume \
+ gst-plugin-ximagesink \
+ gst-plugin-audioconvert \
+ gst-plugin-audioresample \
+ gst-plugin-typefindfunctions \
+ gst-plugin-videoscale \
+ gst-plugin-ffmpegcolorspace \
+ gst-plugin-autodetect"
+
+
+RDEPENDS_gst-meta-audio = "\
+ gst-meta-base \
+ gst-plugin-ivorbis \
+ gst-plugin-ogg \
+ gst-plugin-mad"
+
+
+RDEPENDS_gst-meta-debug = "\
+ gst-meta-base \
+ gst-plugin-debug \
+ gst-plugin-audiotestsrc \
+ gst-plugin-videotestsrc"
+
+
+RDEPENDS_gst-meta-video = "\
+ gst-meta-base \
+ gst-plugin-avi \
+ gst-plugin-matroska \
+ gst-plugin-mpeg2dec"
+
+RRECOMMENDS_gst-meta-video = "\
+ gst-meta-audio"
diff --git a/packages/opie-taskbar/opie-taskbar/akita/.mtn2git_empty b/packages/gstreamer/gst-plugins-bad/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/akita/.mtn2git_empty
+++ b/packages/gstreamer/gst-plugins-bad/.mtn2git_empty
diff --git a/packages/gstreamer/gst-plugins-bad/cross-compile.patch b/packages/gstreamer/gst-plugins-bad/cross-compile.patch
new file mode 100644
index 0000000000..cc4d972f3e
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-bad/cross-compile.patch
@@ -0,0 +1,44 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gst-plugins-bad-0.10.3/configure.ac~cross-compile
++++ gst-plugins-bad-0.10.3/configure.ac
+@@ -398,35 +398,7 @@
+ GST_CHECK_FEATURE(FAAD, [AAC decoder plug-in], faad, [
+ HAVE_FAAD="yes"
+ GST_CHECK_LIBHEADER(FAAD, faad, faacDecOpen, -lm, faad.h,
+- FAAD_LIBS="-lfaad -lm", HAVE_FAAD="no")
+- if test $HAVE_FAAD = "yes"; then
+- AC_MSG_CHECKING([Checking for FAAD >= 2])
+- AC_TRY_RUN([
+-
+-#include <faad.h>
+-#if !defined(FAAD2_VERSION) || !defined(FAAD_FMT_DOUBLE)
+-#error Not faad2
+-#else
+-#include <string.h>
+-
+-int main()
+-{
+-char version[9] = FAAD2_VERSION;
+-// a release candidate of 2.0 is not enought for us
+-if ( strstr( version, "2.0 RC" ) ) { return 1; }
+-
+-return 0;
+-}
+-
+-#endif
+- ], [
+- HAVE_FAAD="yes"
+- AC_MSG_RESULT(yes)
+- ], [
+- HAVE_FAAD="no"
+- AC_MSG_RESULT(no)
+- ])
+- fi
++ FAAD_LIBS="-lfaad -lm")
+ AS_SCRUB_INCLUDE(FAAD_CFLAGS)
+ AC_SUBST(FAAD_LIBS)
+ ])
diff --git a/packages/gstreamer/gst-plugins-bad/vorbisdec.h b/packages/gstreamer/gst-plugins-bad/vorbisdec.h
new file mode 100644
index 0000000000..3bc29f22e6
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-bad/vorbisdec.h
@@ -0,0 +1,87 @@
+/* -*- c-basic-offset: 2 -*-
+ * GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * Tremor modifications <2006>:
+ * Chris Lord, OpenedHand Ltd. <chris@openedhand.com>, http://www.o-hand.com/
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __GST_IVORBIS_DEC_H__
+#define __GST_IVORBIS_DEC_H__
+
+
+#include <gst/gst.h>
+#include <tremor/ivorbiscodec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_IVORBIS_DEC \
+ (gst_ivorbis_dec_get_type())
+#define GST_IVORBIS_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_IVORBIS_DEC,GstIVorbisDec))
+#define GST_IVORBIS_DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_IVORBIS_DEC,GstIVorbisDecClass))
+#define GST_IS_IVORBIS_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_IVORBIS_DEC))
+#define GST_IS_IVORBIS_DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_IVORBIS_DEC))
+
+typedef struct _GstIVorbisDec GstIVorbisDec;
+typedef struct _GstIVorbisDecClass GstIVorbisDecClass;
+
+/**
+ * GstIVorbisDec:
+ *
+ * Opaque data structure.
+ */
+struct _GstIVorbisDec {
+ GstElement element;
+
+ GstPad * sinkpad;
+ GstPad * srcpad;
+
+ vorbis_dsp_state vd;
+ vorbis_info vi;
+ vorbis_comment vc;
+ vorbis_block vb;
+ guint64 granulepos;
+
+ gboolean initialized;
+
+ GList *queued;
+
+ GstSegment segment;
+ gboolean discont;
+
+ GstClockTime cur_timestamp; /* only used with non-ogg container formats */
+ GstClockTime prev_timestamp; /* only used with non-ogg container formats */
+
+ GList *pendingevents;
+ GstTagList *taglist;
+};
+
+struct _GstIVorbisDecClass {
+ GstElementClass parent_class;
+};
+
+GType gst_ivorbis_dec_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_IVORBIS_DEC_H__ */
diff --git a/packages/gstreamer/gst-plugins-bad/vorbisenc.h b/packages/gstreamer/gst-plugins-bad/vorbisenc.h
new file mode 100644
index 0000000000..7170baacd3
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-bad/vorbisenc.h
@@ -0,0 +1,101 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __VORBISENC_H__
+#define __VORBISENC_H__
+
+
+#include <config.h>
+#include <gst/gst.h>
+
+#include <tremor/codec.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define GST_TYPE_VORBISENC \
+ (vorbisenc_get_type())
+#define GST_VORBISENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VORBISENC,VorbisEnc))
+#define GST_VORBISENC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VORBISENC,VorbisEncClass))
+#define GST_IS_VORBISENC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VORBISENC))
+#define GST_IS_VORBISENC_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VORBISENC))
+
+typedef struct _VorbisEnc VorbisEnc;
+typedef struct _VorbisEncClass VorbisEncClass;
+
+struct _VorbisEnc {
+ GstElement element;
+
+ GstPad *sinkpad,
+ *srcpad;
+
+ ogg_stream_state os; /* take physical pages, weld into a logical
+ stream of packets */
+ ogg_page og; /* one Ogg bitstream page. Vorbis packets are inside */
+ ogg_packet op; /* one raw packet of data for decode */
+
+ vorbis_info vi; /* struct that stores all the static vorbis bitstream
+ settings */
+ vorbis_comment vc; /* struct that stores all the user comments */
+
+ vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+ vorbis_block vb; /* local working space for packet->PCM decode */
+
+ gboolean eos;
+
+ gboolean managed;
+ gint bitrate;
+ gint min_bitrate;
+ gint max_bitrate;
+ gfloat quality;
+ gboolean quality_set;
+ gint serial;
+
+ gint channels;
+ gint frequency;
+
+ guint64 samples_in;
+ guint64 bytes_out;
+
+ GstCaps *metadata;
+
+ gboolean setup;
+ gboolean flush_header;
+ gchar *last_message;
+};
+
+struct _VorbisEncClass {
+ GstElementClass parent_class;
+};
+
+GType vorbisenc_get_type(void);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __VORBISENC_H__ */
diff --git a/packages/gstreamer/gst-plugins-bad_0.10.1.bb b/packages/gstreamer/gst-plugins-bad_0.10.1.bb
deleted file mode 100644
index 7c548acf7d..0000000000
--- a/packages/gstreamer/gst-plugins-bad_0.10.1.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gst-plugins-bad_0.10.3.bb b/packages/gstreamer/gst-plugins-bad_0.10.3.bb
index 7c548acf7d..51ce56dc1f 100644
--- a/packages/gstreamer/gst-plugins-bad_0.10.3.bb
+++ b/packages/gstreamer/gst-plugins-bad_0.10.3.bb
@@ -1,2 +1,5 @@
require gst-plugins.inc
+
DEPENDS += "gst-plugins-base"
+SRC_URI += "file://cross-compile.patch;patch=1"
+PR = "r4"
diff --git a/packages/gstreamer/gst-plugins-bad_0.10.5.bb b/packages/gstreamer/gst-plugins-bad_0.10.5.bb
new file mode 100644
index 0000000000..4bd76f871c
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-bad_0.10.5.bb
@@ -0,0 +1,11 @@
+require gst-plugins.inc
+
+SRC_URI += "file://vorbisenc.h file://vorbisdec.h"
+DEPENDS += "gst-plugins-base"
+
+do_compile_prepend() {
+ # work around missing files in upstream tarball (upstream bug #454078)
+ install -m 0644 ${WORKDIR}/vorbis*.h ${S}/ext/ivorbis/
+}
+
+PR = "r0"
diff --git a/packages/gstreamer/gst-plugins-base_0.10.11.bb b/packages/gstreamer/gst-plugins-base_0.10.11.bb
deleted file mode 100644
index 4286a50c61..0000000000
--- a/packages/gstreamer/gst-plugins-base_0.10.11.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require gst-plugins.inc
-PROVIDES += "gst-plugins"
-
-do_stage() {
- autotools_stage_all
-}
-
diff --git a/packages/gstreamer/gst-plugins-base_0.10.12.bb b/packages/gstreamer/gst-plugins-base_0.10.12.bb
new file mode 100644
index 0000000000..33b189a0ff
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-base_0.10.12.bb
@@ -0,0 +1,12 @@
+require gst-plugins.inc
+
+PROVIDES += "gst-plugins"
+
+# gst-plugins-base only builds the alsa plugin
+# if alsa has been built and is present. You will
+# not get an error if this is not present, just
+# a missing alsa plugin
+DEPENDS += "alsa-lib"
+
+PR = "r2"
+
diff --git a/packages/gstreamer/gst-plugins-base_0.10.14.bb b/packages/gstreamer/gst-plugins-base_0.10.14.bb
new file mode 100644
index 0000000000..33b189a0ff
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-base_0.10.14.bb
@@ -0,0 +1,12 @@
+require gst-plugins.inc
+
+PROVIDES += "gst-plugins"
+
+# gst-plugins-base only builds the alsa plugin
+# if alsa has been built and is present. You will
+# not get an error if this is not present, just
+# a missing alsa plugin
+DEPENDS += "alsa-lib"
+
+PR = "r2"
+
diff --git a/packages/gstreamer/gst-plugins-base_0.10.5.bb b/packages/gstreamer/gst-plugins-base_0.10.5.bb
deleted file mode 100644
index 34b5504551..0000000000
--- a/packages/gstreamer/gst-plugins-base_0.10.5.bb
+++ /dev/null
@@ -1 +0,0 @@
-require gst-plugins.inc
diff --git a/packages/gstreamer/gst-plugins-base_0.10.6.bb b/packages/gstreamer/gst-plugins-base_0.10.6.bb
deleted file mode 100644
index 48e24bf756..0000000000
--- a/packages/gstreamer/gst-plugins-base_0.10.6.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-PROVIDES_${PN} += "gst-plugins"
diff --git a/packages/gstreamer/gst-plugins-base_0.10.7.bb b/packages/gstreamer/gst-plugins-base_0.10.7.bb
deleted file mode 100644
index 4286a50c61..0000000000
--- a/packages/gstreamer/gst-plugins-base_0.10.7.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require gst-plugins.inc
-PROVIDES += "gst-plugins"
-
-do_stage() {
- autotools_stage_all
-}
-
diff --git a/packages/gstreamer/gst-plugins-good_0.10.2.bb b/packages/gstreamer/gst-plugins-good_0.10.2.bb
deleted file mode 100644
index 7c548acf7d..0000000000
--- a/packages/gstreamer/gst-plugins-good_0.10.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gst-plugins-good_0.10.4.bb b/packages/gstreamer/gst-plugins-good_0.10.4.bb
deleted file mode 100644
index 7c548acf7d..0000000000
--- a/packages/gstreamer/gst-plugins-good_0.10.4.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gst-plugins-good_0.10.5.bb b/packages/gstreamer/gst-plugins-good_0.10.5.bb
new file mode 100644
index 0000000000..e009145ead
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-good_0.10.5.bb
@@ -0,0 +1,5 @@
+require gst-plugins.inc
+
+EXTRA_OECONF += "--with-check=no"
+DEPENDS += "gst-plugins-base"
+PR = "r3"
diff --git a/packages/gstreamer/gst-plugins-good_0.10.6.bb b/packages/gstreamer/gst-plugins-good_0.10.6.bb
new file mode 100644
index 0000000000..e009145ead
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-good_0.10.6.bb
@@ -0,0 +1,5 @@
+require gst-plugins.inc
+
+EXTRA_OECONF += "--with-check=no"
+DEPENDS += "gst-plugins-base"
+PR = "r3"
diff --git a/packages/opie-taskbar/opie-taskbar/c7x0/.mtn2git_empty b/packages/gstreamer/gst-plugins-ugly/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/c7x0/.mtn2git_empty
+++ b/packages/gstreamer/gst-plugins-ugly/.mtn2git_empty
diff --git a/packages/gstreamer/gst-plugins-ugly/cross-compile.patch b/packages/gstreamer/gst-plugins-ugly/cross-compile.patch
new file mode 100644
index 0000000000..41c412dcc4
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-ugly/cross-compile.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gst-plugins-ugly-0.10.4/configure.ac~cross-compile
++++ gst-plugins-ugly-0.10.4/configure.ac
+@@ -282,7 +282,7 @@
+ LAME_LIBS="-lmp3lame -lm"
+ dnl is lame presets available
+ LAME_CFLAGS=""
+- AC_TRY_RUN([
++ AC_TRY_COMPILE([
+ #include <lame/lame.h>
+ int main (int argc, char *argv[])
+ {
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.2.bb b/packages/gstreamer/gst-plugins-ugly_0.10.2.bb
deleted file mode 100644
index 7c548acf7d..0000000000
--- a/packages/gstreamer/gst-plugins-ugly_0.10.2.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.4.bb b/packages/gstreamer/gst-plugins-ugly_0.10.4.bb
deleted file mode 100644
index 7c548acf7d..0000000000
--- a/packages/gstreamer/gst-plugins-ugly_0.10.4.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require gst-plugins.inc
-DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.5.bb b/packages/gstreamer/gst-plugins-ugly_0.10.5.bb
new file mode 100644
index 0000000000..51ce56dc1f
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-ugly_0.10.5.bb
@@ -0,0 +1,5 @@
+require gst-plugins.inc
+
+DEPENDS += "gst-plugins-base"
+SRC_URI += "file://cross-compile.patch;patch=1"
+PR = "r4"
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.6.bb b/packages/gstreamer/gst-plugins-ugly_0.10.6.bb
new file mode 100644
index 0000000000..4caf56e522
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-ugly_0.10.6.bb
@@ -0,0 +1,6 @@
+require gst-plugins.inc
+
+DEPENDS += "gst-plugins-base"
+SRC_URI += "file://cross-compile.patch;patch=1"
+
+PR = "r0"
diff --git a/packages/gstreamer/gst-plugins.inc b/packages/gstreamer/gst-plugins.inc
index f0531dc570..2acf1997c8 100644
--- a/packages/gstreamer/gst-plugins.inc
+++ b/packages/gstreamer/gst-plugins.inc
@@ -1,21 +1,12 @@
+require gst-common.inc
DESCRIPTION = "Plugins for GStreamer"
-SECTION = "multimedia"
-PRIORITY = "optional"
DEPENDS = "gstreamer libmikmod libmad liboil libogg tremor libvorbis libid3tag esound"
-PR = "r1"
PACKAGES_DYNAMIC = "gst-plugin-*"
-# until we have decided for a final naming scheme,
-# keep using version 0.8
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools pkgconfig gconf
-
SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2"
-EXTRA_OECONF = "--disable-x --disable-aalib --disable-shout2 \
- --disable-sdl"
+EXTRA_OECONF = "--disable-aalib --disable-shout2 --disable-sdl"
acpaths = "-I ${S}/common/m4 -I ${S}/m4"
@@ -29,8 +20,4 @@ python populate_packages_prepend () {
do_split_packages(d, gst_libdir, '^libgst(.*)\.l?a$', 'gst-plugin-%s-dev', 'GStreamer plugin for %s (development files)')
}
-#do_stage() {
-# autotools_stage_all
-#}
-
ALLOW_EMPTY = "1"
diff --git a/packages/gstreamer/gst-plugins/gst-plugins-0.8.7-httpsrc1.patch b/packages/gstreamer/gst-plugins/gst-plugins-0.8.7-httpsrc1.patch
deleted file mode 100644
index 59b9ebbf73..0000000000
--- a/packages/gstreamer/gst-plugins/gst-plugins-0.8.7-httpsrc1.patch
+++ /dev/null
@@ -1,853 +0,0 @@
-diff -urN gst-plugins-0.8.7/gst/tcp/gsthttpclientsrc.c gst-plugins-0.8.7-httpsrc1/gst/tcp/gsthttpclientsrc.c
---- gst-plugins-0.8.7/gst/tcp/gsthttpclientsrc.c 1969-12-31 19:00:00.000000000 -0500
-+++ gst-plugins-0.8.7-httpsrc1/gst/tcp/gsthttpclientsrc.c 2005-03-02 11:08:24.546323513 -0500
-@@ -0,0 +1,655 @@
-+/* GStreamer
-+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
-+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <gst/gst-i18n-plugin.h>
-+#include "gsttcp.h"
-+#include "gsthttpclientsrc.h"
-+#include <string.h> /* memset */
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netinet/in.h>
-+#include <arpa/inet.h>
-+#include <sys/ioctl.h>
-+#include <netdb.h>
-+
-+#ifdef HAVE_FIONREAD_IN_SYS_FILIO
-+#include <sys/filio.h>
-+#endif
-+
-+GST_DEBUG_CATEGORY (httpclientsrc_debug);
-+#define GST_CAT_DEFAULT httpclientsrc_debug
-+
-+#define MAX_READ_SIZE 4 * 1024
-+
-+/* elementfactory information */
-+static GstElementDetails gst_httpclientsrc_details =
-+GST_ELEMENT_DETAILS ("HTTP Client source",
-+ "Source/Network",
-+ "Receive data as a client over the network via HTTP",
-+ "Jamey Hicks <jamey dot hicks at hp dot com> based on tcpclientsrc by Thomas Vander Stichele <thomas at apestaart dot org>");
-+
-+/* HttpclientSrc signals and args */
-+enum
-+{
-+ LAST_SIGNAL
-+};
-+
-+enum
-+{
-+ ARG_0,
-+ ARG_LOCATION,
-+ ARG_METHOD,
-+ ARG_PROTOCOL
-+};
-+
-+#define HTTP_DEFAULT_METHOD "GET"
-+
-+static void gst_httpclientsrc_base_init (gpointer g_class);
-+static void gst_httpclientsrc_class_init (GstHttpclientSrc * klass);
-+static void gst_httpclientsrc_init (GstHttpclientSrc * httpclientsrc);
-+
-+static GstCaps *gst_httpclientsrc_getcaps (GstPad * pad);
-+
-+static GstData *gst_httpclientsrc_get (GstPad * pad);
-+static GstElementStateReturn gst_httpclientsrc_change_state (GstElement *
-+ element);
-+
-+static void gst_httpclientsrc_set_property (GObject * object, guint prop_id,
-+ const GValue * value, GParamSpec * pspec);
-+static void gst_httpclientsrc_get_property (GObject * object, guint prop_id,
-+ GValue * value, GParamSpec * pspec);
-+static void gst_httpclientsrc_set_clock (GstElement * element, GstClock * clock);
-+
-+static GstElementClass *parent_class = NULL;
-+
-+/*static guint gst_httpclientsrc_signals[LAST_SIGNAL] = { 0 }; */
-+
-+GType
-+gst_httpclientsrc_get_type (void)
-+{
-+ static GType httpclientsrc_type = 0;
-+
-+
-+ if (!httpclientsrc_type) {
-+ static const GTypeInfo httpclientsrc_info = {
-+ sizeof (GstHttpclientSrcClass),
-+ gst_httpclientsrc_base_init,
-+ NULL,
-+ (GClassInitFunc) gst_httpclientsrc_class_init,
-+ NULL,
-+ NULL,
-+ sizeof (GstHttpclientSrc),
-+ 0,
-+ (GInstanceInitFunc) gst_httpclientsrc_init,
-+ NULL
-+ };
-+
-+ httpclientsrc_type =
-+ g_type_register_static (GST_TYPE_ELEMENT, "GstHttpclientSrc",
-+ &httpclientsrc_info, 0);
-+ }
-+ return httpclientsrc_type;
-+}
-+
-+static void
-+gst_httpclientsrc_base_init (gpointer g_class)
-+{
-+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-+
-+ gst_element_class_set_details (element_class, &gst_httpclientsrc_details);
-+}
-+
-+static void
-+gst_httpclientsrc_class_init (GstHttpclientSrc * klass)
-+{
-+ GObjectClass *gobject_class;
-+ GstElementClass *gstelement_class;
-+
-+ gobject_class = (GObjectClass *) klass;
-+ gstelement_class = (GstElementClass *) klass;
-+
-+ parent_class = g_type_class_ref (GST_TYPE_ELEMENT);
-+
-+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LOCATION,
-+ g_param_spec_string ("location", "Source Location (URL)",
-+ "URL of the data to read", NULL, G_PARAM_READWRITE));
-+ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_METHOD,
-+ g_param_spec_string ("method", "HTTP METHOD, defaults to GET",
-+ "Method of the read request", NULL, G_PARAM_READWRITE));
-+ g_object_class_install_property (gobject_class, ARG_PROTOCOL,
-+ g_param_spec_enum ("protocol", "Protocol", "The protocol to wrap data in",
-+ GST_TYPE_TCP_PROTOCOL_TYPE, GST_TCP_PROTOCOL_TYPE_NONE,
-+ G_PARAM_READWRITE));
-+
-+ gobject_class->set_property = gst_httpclientsrc_set_property;
-+ gobject_class->get_property = gst_httpclientsrc_get_property;
-+
-+ gstelement_class->change_state = gst_httpclientsrc_change_state;
-+ gstelement_class->set_clock = gst_httpclientsrc_set_clock;
-+
-+ GST_DEBUG_CATEGORY_INIT (httpclientsrc_debug, "httpclientsrc", 0,
-+ "HTTP Client Source");
-+}
-+
-+static void
-+gst_httpclientsrc_set_clock (GstElement * element, GstClock * clock)
-+{
-+ GstHttpclientSrc *httpclientsrc;
-+
-+ httpclientsrc = GST_HTTPCLIENTSRC (element);
-+
-+ httpclientsrc->clock = clock;
-+}
-+
-+static void
-+gst_httpclientsrc_init (GstHttpclientSrc * this)
-+{
-+ /* create the src pad */
-+ this->srcpad = gst_pad_new ("src", GST_PAD_SRC);
-+ gst_element_add_pad (GST_ELEMENT (this), this->srcpad);
-+ gst_pad_set_get_function (this->srcpad, gst_httpclientsrc_get);
-+ gst_pad_set_getcaps_function (this->srcpad, gst_httpclientsrc_getcaps);
-+
-+ this->port = TCP_DEFAULT_PORT;
-+ this->method = g_strdup(HTTP_DEFAULT_METHOD);
-+ this->location = NULL;
-+ this->host = NULL;
-+ this->clock = NULL;
-+ this->sock_fd = -1;
-+ this->protocol = GST_TCP_PROTOCOL_TYPE_NONE;
-+ this->curoffset = 0;
-+ this->caps = NULL;
-+
-+ GST_FLAG_UNSET (this, GST_HTTPCLIENTSRC_OPEN);
-+}
-+
-+static GstCaps *
-+gst_httpclientsrc_getcaps (GstPad * pad)
-+{
-+ GstHttpclientSrc *src;
-+ GstCaps *caps = NULL;
-+
-+ src = GST_HTTPCLIENTSRC (GST_OBJECT_PARENT (pad));
-+
-+ if (!GST_FLAG_IS_SET (src, GST_HTTPCLIENTSRC_OPEN))
-+ caps = gst_caps_new_any ();
-+ else if (src->caps)
-+ caps = gst_caps_copy (src->caps);
-+ else
-+ caps = gst_caps_new_any ();
-+ GST_DEBUG_OBJECT (src, "returning caps %" GST_PTR_FORMAT, caps);
-+ g_assert (GST_IS_CAPS (caps));
-+ return caps;
-+}
-+
-+static GstData *
-+gst_httpclientsrc_get (GstPad * pad)
-+{
-+ GstHttpclientSrc *src;
-+ size_t readsize;
-+ int ret;
-+
-+ GstData *data = NULL;
-+ GstBuffer *buf = NULL;
-+
-+ g_return_val_if_fail (pad != NULL, NULL);
-+ g_return_val_if_fail (GST_IS_PAD (pad), NULL);
-+ src = GST_HTTPCLIENTSRC (GST_OBJECT_PARENT (pad));
-+ g_return_val_if_fail (GST_FLAG_IS_SET (src, GST_HTTPCLIENTSRC_OPEN), NULL);
-+
-+ /* try to negotiate here */
-+ if (!gst_pad_is_negotiated (pad)) {
-+ if (GST_PAD_LINK_FAILED (gst_pad_renegotiate (pad))) {
-+ GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL), GST_ERROR_SYSTEM);
-+ gst_buffer_unref (buf);
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+ }
-+
-+ /* if we have a left over buffer after a discont, return that */
-+ if (src->buffer_after_discont) {
-+ buf = src->buffer_after_discont;
-+ GST_LOG_OBJECT (src,
-+ "Returning buffer after discont of size %d, ts %"
-+ GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
-+ ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
-+ GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
-+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
-+ GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf));
-+ src->buffer_after_discont = NULL;
-+ return GST_DATA (buf);
-+ }
-+
-+ /* read the buffer header if we're using a protocol */
-+ switch (src->protocol) {
-+ fd_set testfds;
-+
-+ case GST_TCP_PROTOCOL_TYPE_NONE:
-+ /* do a blocking select on the socket */
-+ FD_ZERO (&testfds);
-+ FD_SET (src->sock_fd, &testfds);
-+ ret = select (src->sock_fd + 1, &testfds, (fd_set *) 0, (fd_set *) 0, 0);
-+ /* no action (0) is an error too in our case */
-+ if (ret <= 0) {
-+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
-+ ("select failed: %s", g_strerror (errno)));
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+
-+ /* ask how much is available for reading on the socket */
-+ ret = ioctl (src->sock_fd, FIONREAD, &readsize);
-+ if (ret < 0) {
-+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
-+ ("ioctl failed: %s", g_strerror (errno)));
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+ GST_LOG_OBJECT (src, "ioctl says %d bytes available", readsize);
-+ buf = gst_buffer_new_and_alloc (readsize);
-+ break;
-+ case GST_TCP_PROTOCOL_TYPE_GDP:
-+ if (!(data = gst_tcp_gdp_read_header (GST_ELEMENT (src), src->sock_fd))) {
-+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
-+ ("Could not read data header through GDP"));
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+ if (GST_IS_EVENT (data))
-+ return data;
-+ buf = GST_BUFFER (data);
-+
-+ GST_LOG_OBJECT (src, "Going to read data from socket into buffer %p",
-+ buf);
-+ /* use this new buffer to read data into */
-+ readsize = GST_BUFFER_SIZE (buf);
-+ break;
-+ default:
-+ g_warning ("Unhandled protocol type");
-+ break;
-+ }
-+
-+ GST_LOG_OBJECT (src, "Reading %d bytes", readsize);
-+ ret = gst_tcp_socket_read (src->sock_fd, GST_BUFFER_DATA (buf), readsize);
-+ if (ret < 0) {
-+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), GST_ERROR_SYSTEM);
-+ gst_buffer_unref (buf);
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+
-+ /* if we read 0 bytes, and we're blocking, we hit eos */
-+ if (ret == 0) {
-+ GST_DEBUG ("blocking read returns 0, EOS");
-+ gst_buffer_unref (buf);
-+ gst_element_set_eos (GST_ELEMENT (src));
-+ return GST_DATA (gst_event_new (GST_EVENT_EOS));
-+ }
-+
-+ readsize = ret;
-+ GST_BUFFER_SIZE (buf) = readsize;
-+ GST_BUFFER_MAXSIZE (buf) = readsize;
-+
-+ /* FIXME: we could decide to set OFFSET and OFFSET_END for non-protocol
-+ * streams to mean the bytes processed */
-+
-+ /* if this is our first buffer, we need to send a discont with the
-+ * given timestamp or the current offset, and store the buffer for
-+ * the next iteration through the get loop */
-+ if (src->send_discont) {
-+ GstClockTime timestamp;
-+ GstEvent *event;
-+
-+ src->send_discont = FALSE;
-+ src->buffer_after_discont = buf;
-+ /* if the timestamp is valid, send a timed discont
-+ * taking into account the incoming buffer's timestamps */
-+ timestamp = GST_BUFFER_TIMESTAMP (buf);
-+ if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
-+ GST_DEBUG_OBJECT (src,
-+ "sending discontinuous with timestamp %" GST_TIME_FORMAT,
-+ GST_TIME_ARGS (timestamp));
-+ event =
-+ gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, timestamp, NULL);
-+ return GST_DATA (event);
-+ }
-+ /* otherwise, send an offset discont */
-+ GST_DEBUG_OBJECT (src, "sending discontinuous with offset %d",
-+ src->curoffset);
-+ event =
-+ gst_event_new_discontinuous (FALSE, GST_FORMAT_BYTES, src->curoffset,
-+ NULL);
-+ return GST_DATA (event);
-+ }
-+
-+ src->curoffset += readsize;
-+ GST_LOG_OBJECT (src,
-+ "Returning buffer from _get of size %d, ts %"
-+ GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
-+ ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
-+ GST_BUFFER_SIZE (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
-+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
-+ GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf));
-+ return GST_DATA (buf);
-+}
-+
-+static void
-+gst_httpclientsrc_set_property (GObject * object, guint prop_id,
-+ const GValue * value, GParamSpec * pspec)
-+{
-+ GstHttpclientSrc *httpclientsrc;
-+
-+
-+ /* it's not null if we got it, but it might not be ours */
-+ g_return_if_fail (GST_IS_HTTPCLIENTSRC (object));
-+ httpclientsrc = GST_HTTPCLIENTSRC (object);
-+
-+ GST_DEBUG_OBJECT (httpclientsrc, "setting property %d", prop_id);
-+
-+ switch (prop_id) {
-+ case ARG_LOCATION: {
-+ gchar *pathstart = NULL;
-+ gchar *location = NULL;
-+ gchar *hostport = NULL;
-+ gchar *portstart = NULL;
-+ int locationlen;
-+ g_free (httpclientsrc->location);
-+ g_free (httpclientsrc->host);
-+ g_free (httpclientsrc->path);
-+ httpclientsrc->location = location = g_strdup (g_value_get_string (value));
-+ GST_DEBUG_OBJECT (httpclientsrc, "setting location=%s", location);
-+
-+ if (strncmp(location, "http://", 7) != 0)
-+ return;
-+ locationlen = strlen(location);
-+ hostport = location + 7;
-+ GST_DEBUG_OBJECT (httpclientsrc, " hostport=%s", hostport);
-+
-+ pathstart = strchr(hostport, '/');
-+ GST_DEBUG_OBJECT (httpclientsrc, " pathstart=%s", pathstart);
-+
-+ if (pathstart) {
-+ httpclientsrc->path = g_strdup(pathstart);
-+ } else {
-+ httpclientsrc->path = g_strdup("/");
-+ pathstart = location+locationlen;
-+ }
-+ hostport = g_strndup(hostport, pathstart - hostport);
-+ portstart = strrchr(hostport, ':');
-+ GST_DEBUG_OBJECT (httpclientsrc, " hostport=%s portstart=%s", hostport, portstart);
-+ if (portstart != NULL) {
-+ httpclientsrc->host = g_strndup(hostport, portstart - hostport);
-+ httpclientsrc->port = strtoul(portstart+1, NULL, 0);
-+ g_free(hostport);
-+ } else {
-+ httpclientsrc->host = hostport;
-+ httpclientsrc->port = 80;
-+ }
-+ GST_DEBUG_OBJECT (httpclientsrc, " host=%s port=%d path=%s", httpclientsrc->host, httpclientsrc->port, httpclientsrc->path);
-+ } break;
-+ case ARG_METHOD:
-+ g_free (httpclientsrc->method);
-+ httpclientsrc->method = g_strdup (g_value_get_string (value));
-+ break;
-+ case ARG_PROTOCOL:
-+ httpclientsrc->protocol = g_value_get_enum (value);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+gst_httpclientsrc_get_property (GObject * object, guint prop_id, GValue * value,
-+ GParamSpec * pspec)
-+{
-+ GstHttpclientSrc *httpclientsrc;
-+
-+ g_return_if_fail (GST_IS_HTTPCLIENTSRC (object));
-+ httpclientsrc = GST_HTTPCLIENTSRC (object);
-+
-+ switch (prop_id) {
-+ case ARG_LOCATION:
-+ g_value_set_string (value, httpclientsrc->location);
-+ break;
-+ case ARG_METHOD:
-+ g_value_set_string (value, httpclientsrc->method);
-+ break;
-+ case ARG_PROTOCOL:
-+ g_value_set_enum (value, httpclientsrc->protocol);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+/* create a socket for connecting to remote server */
-+static gboolean
-+gst_httpclientsrc_init_receive (GstHttpclientSrc * this)
-+{
-+ int ret;
-+ gchar ip[256];
-+ struct addrinfo *addrinfo, *top_addrinfo;
-+ int addr_family;
-+ gchar *request = NULL;
-+
-+ GST_DEBUG_OBJECT (this, "getaddrinfo %s", this->host);
-+ ret = getaddrinfo(this->host, "http", NULL, &addrinfo);
-+ top_addrinfo = addrinfo;
-+
-+ retry:
-+ this->addr_family = addr_family = addrinfo->ai_family;
-+ this->server_addrlen = addrinfo->ai_addrlen;
-+ memset(&this->server_sockaddr, 0, sizeof(this->server_sockaddr));
-+ memcpy(&this->server_sockaddr, addrinfo->ai_addr, addrinfo->ai_addrlen);
-+
-+ /* create receiving client socket */
-+ GST_DEBUG_OBJECT (this, "opening receiving client socket to %s:%d\n",
-+ this->host, this->port);
-+ if ((this->sock_fd = socket (this->addr_family, SOCK_STREAM, 0)) == -1) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL), GST_ERROR_SYSTEM);
-+ return FALSE;
-+ }
-+ GST_DEBUG_OBJECT (this, "opened receiving client socket with fd %d",
-+ this->sock_fd);
-+
-+ /* look up name if we need to */
-+ GST_DEBUG_OBJECT (this, "IP address for host %s is %s", this->host, ip);
-+
-+ /* fill in port */
-+ switch (this->addr_family) {
-+ case AF_INET:
-+ ((struct sockaddr_in *)&this->server_sockaddr)->sin_port = htons(this->port);
-+ inet_ntop(this->addr_family, &(((struct sockaddr_in *)&this->server_sockaddr)->sin_addr), ip, sizeof(ip));
-+ break;
-+ case AF_INET6:
-+ ((struct sockaddr_in6 *)&this->server_sockaddr)->sin6_port = htons(this->port);
-+ inet_ntop(this->addr_family, &(((struct sockaddr_in6 *)&this->server_sockaddr)->sin6_addr), ip, sizeof(ip));
-+ break;
-+ }
-+ if (this->addr_family == AF_INET6) {
-+ int offset = 0;
-+ int i;
-+ struct in6_addr *in6_addr = &(((struct sockaddr_in6 *)&this->server_sockaddr)->sin6_addr);
-+ for (i = 0; i < sizeof(struct in6_addr); i++) {
-+ int b = in6_addr->s6_addr[i];
-+ offset += sprintf(ip+offset, ":%02x", b);
-+ }
-+ }
-+
-+ /* connect to server */
-+ GST_DEBUG_OBJECT (this, "connecting to server family=%d ip=%s port=%d sockaddrlen=%d",
-+ this->addr_family, ip, this->port, this->server_addrlen);
-+ ret = connect (this->sock_fd, (struct sockaddr *) &this->server_sockaddr, this->server_addrlen);
-+
-+ if (ret) {
-+ switch (errno) {
-+ case ECONNREFUSED:
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ,
-+ (_("Connection to %s:%d refused."), this->host, this->port),
-+ (NULL));
-+ if (addrinfo->ai_next == NULL)
-+ return FALSE;
-+ break;
-+ default:
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
-+ ("connect to %s:%d failed: %s", this->host, this->port,
-+ g_strerror (errno)));
-+ if (addrinfo->ai_next == NULL)
-+ return FALSE;
-+ break;
-+ }
-+ addrinfo = addrinfo->ai_next;
-+ if (addrinfo) {
-+ GST_DEBUG_OBJECT(this, "retrying with addrinfo %p", addrinfo);
-+ goto retry;
-+ }
-+ }
-+
-+ /* send request and headers */
-+ request = g_strdup_printf("%s %s HTTP/1.0\r\nHost: %s\r\n\r\n",
-+ this->method, this->path, this->host);
-+ GST_DEBUG_OBJECT(this, "sending request %s", request);
-+ if (gst_tcp_socket_write(this->sock_fd, request, strlen(request)) < 0) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
-+ ("sending HTTP request to %s failed: %s", this->location,
-+ g_strerror (errno)));
-+ return FALSE;
-+ }
-+ g_free(request);
-+
-+
-+ /* receive and discard headers */
-+ {
-+ char responseline[12];
-+ int rc;
-+ /* receive response line (HTTP/1.x NNN) */
-+ if ((rc = gst_tcp_socket_read(this->sock_fd, responseline, sizeof(responseline))) < 0) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
-+ ("reading HTTP response from %s failed: %s", this->location,
-+ g_strerror (errno)));
-+ return FALSE;
-+ }
-+ GST_DEBUG_OBJECT(this, "got %d byte response %s", rc, responseline);
-+
-+ enum response_state {
-+ RESPONSE_CHAR,
-+ RESPONSE_CR,
-+ RESPONSE_CRLF,
-+ RESPONSE_CRLFCR,
-+ RESPONSE_END_OF_HEADERS /* saw crlfcrlf */
-+ } response_state = RESPONSE_CHAR;
-+ while (response_state != RESPONSE_END_OF_HEADERS) {
-+ gchar ch;
-+ if (gst_tcp_socket_read(this->sock_fd, &ch, sizeof(ch)) < 0) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
-+ ("reading HTTP response from %s failed: %s", this->location,
-+ g_strerror (errno)));
-+ return FALSE;
-+ }
-+ switch (ch) {
-+ case '\n':
-+ switch (response_state) {
-+ case RESPONSE_CR: response_state = RESPONSE_CRLF; break;
-+ case RESPONSE_CRLFCR: response_state = RESPONSE_END_OF_HEADERS; break;
-+ default: response_state = RESPONSE_CHAR;
-+ } break;
-+ case '\r':
-+ switch (response_state) {
-+ case RESPONSE_CRLF: response_state = RESPONSE_CRLFCR; break;
-+ default: response_state = RESPONSE_CR;
-+ } break;
-+ default:
-+ response_state = RESPONSE_CHAR;
-+ }
-+ }
-+ }
-+
-+ this->send_discont = TRUE;
-+ this->buffer_after_discont = NULL;
-+ GST_FLAG_SET (this, GST_HTTPCLIENTSRC_OPEN);
-+
-+ /* get the caps if we're using GDP */
-+ if (this->protocol == GST_TCP_PROTOCOL_TYPE_GDP) {
-+ /* if we haven't received caps yet, we should get them first */
-+ if (!this->caps_received) {
-+ GstCaps *caps;
-+
-+ GST_DEBUG_OBJECT (this, "getting caps through GDP");
-+ if (!(caps = gst_tcp_gdp_read_caps (GST_ELEMENT (this), this->sock_fd))) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
-+ ("Could not read caps through GDP"));
-+ return FALSE;
-+ }
-+ if (!GST_IS_CAPS (caps)) {
-+ GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
-+ ("Could not read caps through GDP"));
-+ return FALSE;
-+ }
-+ GST_DEBUG_OBJECT (this, "Received caps through GDP: %" GST_PTR_FORMAT,
-+ caps);
-+ this->caps_received = TRUE;
-+ this->caps = caps;
-+ }
-+ }
-+ return TRUE;
-+}
-+
-+static void
-+gst_httpclientsrc_close (GstHttpclientSrc * this)
-+{
-+ if (this->sock_fd != -1) {
-+ close (this->sock_fd);
-+ this->sock_fd = -1;
-+ }
-+ this->caps_received = FALSE;
-+ if (this->caps) {
-+ gst_caps_free (this->caps);
-+ this->caps = NULL;
-+ }
-+ GST_FLAG_UNSET (this, GST_HTTPCLIENTSRC_OPEN);
-+}
-+
-+static GstElementStateReturn
-+gst_httpclientsrc_change_state (GstElement * element)
-+{
-+ g_return_val_if_fail (GST_IS_HTTPCLIENTSRC (element), GST_STATE_FAILURE);
-+
-+ if (GST_STATE_PENDING (element) == GST_STATE_NULL) {
-+ if (GST_FLAG_IS_SET (element, GST_HTTPCLIENTSRC_OPEN))
-+ gst_httpclientsrc_close (GST_HTTPCLIENTSRC (element));
-+ } else {
-+ if (!GST_FLAG_IS_SET (element, GST_HTTPCLIENTSRC_OPEN)) {
-+ if (!gst_httpclientsrc_init_receive (GST_HTTPCLIENTSRC (element)))
-+ return GST_STATE_FAILURE;
-+ }
-+ }
-+
-+ if (GST_ELEMENT_CLASS (parent_class)->change_state)
-+ return GST_ELEMENT_CLASS (parent_class)->change_state (element);
-+
-+ return GST_STATE_SUCCESS;
-+}
-diff -urN gst-plugins-0.8.7/gst/tcp/gsthttpclientsrc.h gst-plugins-0.8.7-httpsrc1/gst/tcp/gsthttpclientsrc.h
---- gst-plugins-0.8.7/gst/tcp/gsthttpclientsrc.h 1969-12-31 19:00:00.000000000 -0500
-+++ gst-plugins-0.8.7-httpsrc1/gst/tcp/gsthttpclientsrc.h 2005-03-02 09:47:01.640623151 -0500
-@@ -0,0 +1,98 @@
-+/* GStreamer
-+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
-+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Library General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Library General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Library General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+
-+#ifndef __GST_HTTPCLIENTSRC_H__
-+#define __GST_HTTPCLIENTSRC_H__
-+
-+#include <gst/gst.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif /* __cplusplus */
-+
-+#include <netdb.h> /* sockaddr_in */
-+#include <netinet/in.h> /* sockaddr_in */
-+#include <unistd.h>
-+#include "gsttcp.h"
-+
-+#define GST_TYPE_HTTPCLIENTSRC \
-+ (gst_httpclientsrc_get_type())
-+#define GST_HTTPCLIENTSRC(obj) \
-+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_HTTPCLIENTSRC,GstHttpclientSrc))
-+#define GST_HTTPCLIENTSRC_CLASS(klass) \
-+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_HTTPCLIENTSRC,GstHttpclientSrc))
-+#define GST_IS_HTTPCLIENTSRC(obj) \
-+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_HTTPCLIENTSRC))
-+#define GST_IS_HTTPCLIENTSRC_CLASS(obj) \
-+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_HTTPCLIENTSRC))
-+
-+typedef struct _GstHttpclientSrc GstHttpclientSrc;
-+typedef struct _GstHttpclientSrcClass GstHttpclientSrcClass;
-+
-+typedef enum GstHttpclientSrcFlags {
-+ GST_HTTPCLIENTSRC_OPEN = GST_ELEMENT_FLAG_LAST,
-+
-+ GST_HTTPCLIENTSRC_FLAG_LAST,
-+} GstHttpclientSrcFlags;
-+
-+struct _GstHttpclientSrc {
-+ GstElement element;
-+
-+ /* pad */
-+ GstPad *srcpad;
-+
-+ /* server information */
-+ int port;
-+ int addr_family;
-+ gchar *method;
-+ gchar *host;
-+ gchar *path;
-+ gchar *location; /* url */
-+ struct sockaddr_storage server_sockaddr;
-+ int server_addrlen;
-+
-+ /* socket */
-+ int sock_fd;
-+
-+ /* number of bytes we've gotten */
-+ off_t curoffset;
-+
-+ GstTCPProtocolType protocol; /* protocol used for reading data */
-+ gboolean caps_received; /* if we have received caps yet */
-+ GstCaps *caps;
-+ GstClock *clock;
-+
-+ gboolean send_discont; /* TRUE when we need to send a discont */
-+ GstBuffer *buffer_after_discont; /* temporary storage for buffer */
-+};
-+
-+struct _GstHttpclientSrcClass {
-+ GstElementClass parent_class;
-+};
-+
-+GType gst_httpclientsrc_get_type (void);
-+
-+
-+#ifdef __cplusplus
-+}
-+#endif /* __cplusplus */
-+
-+#endif /* __GST_HTTPCLIENTSRC_H__ */
-diff -urN gst-plugins-0.8.7/gst/tcp/gsttcpplugin.c gst-plugins-0.8.7-httpsrc1/gst/tcp/gsttcpplugin.c
---- gst-plugins-0.8.7/gst/tcp/gsttcpplugin.c 2004-11-05 12:15:10.000000000 -0500
-+++ gst-plugins-0.8.7-httpsrc1/gst/tcp/gsttcpplugin.c 2005-03-02 09:59:33.003801791 -0500
-@@ -23,6 +23,7 @@
-
- #include "gsttcpsrc.h"
- #include "gsttcpsink.h"
-+#include "gsthttpclientsrc.h"
- #include "gsttcpclientsrc.h"
- #include "gsttcpclientsink.h"
- #include "gsttcpserversrc.h"
-@@ -59,6 +60,9 @@
- if (!gst_element_register (plugin, "multifdsink", GST_RANK_NONE,
- GST_TYPE_MULTIFDSINK))
- return FALSE;
-+ if (!gst_element_register (plugin, "httpclientsrc", GST_RANK_NONE,
-+ GST_TYPE_HTTPCLIENTSRC))
-+ return FALSE;
-
- GST_DEBUG_CATEGORY_INIT (tcp_debug, "tcp", 0, "TCP calls");
-
-diff -urN gst-plugins-0.8.7/gst/tcp/Makefile.am gst-plugins-0.8.7-httpsrc1/gst/tcp/Makefile.am
---- gst-plugins-0.8.7/gst/tcp/Makefile.am 2004-11-02 02:41:44.000000000 -0500
-+++ gst-plugins-0.8.7-httpsrc1/gst/tcp/Makefile.am 2005-03-02 09:29:30.125528594 -0500
-@@ -18,6 +18,7 @@
- gsttcp.c \
- gstfdset.c \
- gstmultifdsink.c \
-+ gsthttpclientsrc.c \
- gsttcpclientsrc.c gsttcpclientsink.c \
- gsttcpserversrc.c gsttcpserversink.c
-
-@@ -35,6 +36,7 @@
- gsttcp.h \
- gstfdset.h \
- gstmultifdsink.h \
-+ gsthttpclientsrc.h \
- gsttcpclientsrc.h gsttcpclientsink.h \
- gsttcpserversrc.h gsttcpserversink.h
-
-diff -urN gst-plugins-0.8.7/gst/tcp/Makefile.in gst-plugins-0.8.7-httpsrc1/gst/tcp/Makefile.in
---- gst-plugins-0.8.7/gst/tcp/Makefile.in 2005-01-05 05:47:55.000000000 -0500
-+++ gst-plugins-0.8.7-httpsrc1/gst/tcp/Makefile.in 2005-03-02 09:33:30.515512648 -0500
-@@ -99,7 +99,8 @@
- am_libgsttcp_la_OBJECTS = libgsttcp_la-gsttcpplugin.lo \
- libgsttcp_la-gsttcpsrc.lo libgsttcp_la-gsttcpsink.lo \
- libgsttcp_la-gsttcp.lo libgsttcp_la-gstfdset.lo \
-- libgsttcp_la-gstmultifdsink.lo libgsttcp_la-gsttcpclientsrc.lo \
-+ libgsttcp_la-gstmultifdsink.lo libgsttcp_la-gsthttpclientsrc.lo \
-+ libgsttcp_la-gsttcpclientsrc.lo \
- libgsttcp_la-gsttcpclientsink.lo \
- libgsttcp_la-gsttcpserversrc.lo \
- libgsttcp_la-gsttcpserversink.lo
-@@ -730,6 +731,7 @@
- gsttcp.c \
- gstfdset.c \
- gstmultifdsink.c \
-+ gsthttpclientsrc.c \
- gsttcpclientsrc.c gsttcpclientsink.c \
- gsttcpserversrc.c gsttcpserversink.c
-
-@@ -747,7 +749,7 @@
- gsttcp.h \
- gstfdset.h \
- gstmultifdsink.h \
-- gsttcpclientsrc.h gsttcpclientsink.h \
-+ gsthttpclientsrc.h gsttcpclientsrc.h gsttcpclientsink.h \
- gsttcpserversrc.h gsttcpserversink.h
-
- CLEANFILES = $(BUILT_SOURCES)
-@@ -844,6 +846,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcp.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsink.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsthttpclientsrc.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpserversink.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpserversrc.Plo@am__quote@
-@@ -913,6 +916,13 @@
- @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- @am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gstmultifdsink.lo `test -f 'gstmultifdsink.c' || echo '$(srcdir)/'`gstmultifdsink.c
-
-+libgsttcp_la-gsthttpclientsrc.lo: gsthttpclientsrc.c
-+@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsthttpclientsrc.lo -MD -MP -MF "$(DEPDIR)/libgsttcp_la-gsthttpclientsrc.Tpo" -c -o libgsttcp_la-gsthttpclientsrc.lo `test -f 'gsthttpclientsrc.c' || echo '$(srcdir)/'`gsthttpclientsrc.c; \
-+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgsttcp_la-gsthttpclientsrc.Tpo" "$(DEPDIR)/libgsttcp_la-gsthttpclientsrc.Plo"; else rm -f "$(DEPDIR)/libgsttcp_la-gsthttpclientsrc.Tpo"; exit 1; fi
-+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gsthttpclientsrc.c' object='libgsttcp_la-gsthttpclientsrc.lo' libtool=yes @AMDEPBACKSLASH@
-+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gsthttpclientsrc.lo `test -f 'gsthttpclientsrc.c' || echo '$(srcdir)/'`gsthttpclientsrc.c
-+
- libgsttcp_la-gsttcpclientsrc.lo: gsttcpclientsrc.c
- @am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpclientsrc.lo -MD -MP -MF "$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Tpo" -c -o libgsttcp_la-gsttcpclientsrc.lo `test -f 'gsttcpclientsrc.c' || echo '$(srcdir)/'`gsttcpclientsrc.c; \
- @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Tpo" "$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo"; else rm -f "$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Tpo"; exit 1; fi
diff --git a/packages/gstreamer/gst-plugins/lame-autoconf.patch b/packages/gstreamer/gst-plugins/lame-autoconf.patch
deleted file mode 100644
index 3fb85e7d88..0000000000
--- a/packages/gstreamer/gst-plugins/lame-autoconf.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- gst-plugins-0.8.6.orig/configure.ac 2004-11-25 16:41:47.000000000 +0100
-+++ gst-plugins-0.8.6/configure.ac 2005-02-22 19:02:58.000000000 +0100
-@@ -1135,8 +1135,9 @@
- GST_CHECK_LIBHEADER(LAME, mp3lame, lame_init, -lm, lame/lame.h, HAVE_LAME="yes" LAME_LIBS="-lmp3lame -lm")
- ])
- dnl is lame presets available
-+if test "x$HAVE_LAME" = "xyes"; then
- LAME_CFLAGS=""
--AC_TRY_RUN([
-+AC_TRY_COMPILE([
- #include <lame/lame.h>
- int main (int argc, char *argv[])
- {
-@@ -1144,6 +1145,7 @@
- return 0;
- }
- ],[LAME_CFLAGS="-DGSTLAME_PRESET"],[LAME_CFLAGS=""])
-+fi
- AC_SUBST(LAME_CFLAGS)
- AC_SUBST(LAME_LIBS)
-
diff --git a/packages/gstreamer/gst-plugins/try-esdsink.patch b/packages/gstreamer/gst-plugins/try-esdsink.patch
deleted file mode 100644
index 9c6242663c..0000000000
--- a/packages/gstreamer/gst-plugins/try-esdsink.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- gst-plugins-0.8.1/gst-libs/gst/gconf/gconf.c~ 2004-08-17 17:55:46.000000000 +0100
-+++ gst-plugins-0.8.1/gst-libs/gst/gconf/gconf.c 2004-08-17 18:04:00.000000000 +0100
-@@ -204,10 +204,16 @@
- if (!ret) {
- ret = gst_element_factory_make ("osssink", NULL);
-
-- if (!ret)
-- g_warning ("No GConf default audio sink key and osssink doesn't work");
-- else
-+ if (!ret) {
-+ ret = gst_element_factory_make ("esdsink", NULL);
-+
-+ if (!ret)
-+ g_warning ("No GConf default audio sink key and osssink & esdsink don't work");
-+ else
-+ g_print ("GConf audio sink and osssink not found, using esdsink\n");
-+ } else {
- g_print ("GConf audio sink not found, using osssink\n");
-+ }
- }
-
- return ret;
diff --git a/packages/gstreamer/gstreamer.inc b/packages/gstreamer/gstreamer.inc
index 36c7dcfac7..a8bece92e3 100644
--- a/packages/gstreamer/gstreamer.inc
+++ b/packages/gstreamer/gstreamer.inc
@@ -1,29 +1,12 @@
+require gst-common.inc
+
DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
-SECTION = "multimedia"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-HOMEPAGE = "http://www.gstreamer.net/"
-DEPENDS = "libxml2 glib-2.0 gettext-native popt"
-
-# until we have decided a final naming scheme,
-# don't use 0.10.x package as a replacement for
-# version 0.8
-DEFAULT_PREFERENCE = "-1"
-inherit autotools pkgconfig
+DEPENDS = "libxml2 glib-2.0 gettext-native popt"
SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2"
EXTRA_OECONF = "--disable-docs-build --disable-dependency-tracking --with-check=no"
-do_stage() {
- oe_runmake install prefix=${STAGING_DIR} \
- bindir=${STAGING_BINDIR} \
- includedir=${STAGING_INCDIR} \
- libdir=${STAGING_LIBDIR} \
- datadir=${STAGING_DATADIR} \
- mandir=${STAGING_DIR}/share/man
-}
-
FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
diff --git a/packages/gstreamer/gstreamer_0.10.11.bb b/packages/gstreamer/gstreamer_0.10.11.bb
deleted file mode 100644
index 59e224eab5..0000000000
--- a/packages/gstreamer/gstreamer_0.10.11.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
-It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
-SECTION = "multimedia"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-HOMEPAGE = "http://www.gstreamer.net/"
-DEPENDS = "libxml2 glib-2.0 gettext-native popt"
-
-PR = "r0"
-# until we have decided a final naming scheme,
-# don't use this package as a replacement for
-# version 0.8
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools pkgconfig
-
-SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2"
-EXTRA_OECONF = "--disable-docs-build --disable-dependency-tracking --with-check=no"
-
-do_stage() {
- oe_runmake install prefix=${STAGING_DIR} \
- bindir=${STAGING_BINDIR} \
- includedir=${STAGING_INCDIR} \
- libdir=${STAGING_LIBDIR} \
- datadir=${STAGING_DATADIR} \
- mandir=${STAGING_DIR}/share/man
-}
-
-FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
-FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
diff --git a/packages/gstreamer/gstreamer_0.10.12.bb b/packages/gstreamer/gstreamer_0.10.12.bb
new file mode 100644
index 0000000000..49d7f37053
--- /dev/null
+++ b/packages/gstreamer/gstreamer_0.10.12.bb
@@ -0,0 +1,3 @@
+require gstreamer.inc
+
+PR = "r1" \ No newline at end of file
diff --git a/packages/gstreamer/gstreamer_0.10.14.bb b/packages/gstreamer/gstreamer_0.10.14.bb
new file mode 100644
index 0000000000..9e9ae62cb1
--- /dev/null
+++ b/packages/gstreamer/gstreamer_0.10.14.bb
@@ -0,0 +1,3 @@
+require gstreamer.inc
+
+PR = "r0"
diff --git a/packages/gstreamer/gstreamer_0.10.4.bb b/packages/gstreamer/gstreamer_0.10.4.bb
deleted file mode 100644
index fcb5ad79ba..0000000000
--- a/packages/gstreamer/gstreamer_0.10.4.bb
+++ /dev/null
@@ -1 +0,0 @@
-require gstreamer.inc
diff --git a/packages/gstreamer/gstreamer_0.10.5.bb b/packages/gstreamer/gstreamer_0.10.5.bb
deleted file mode 100644
index fcb5ad79ba..0000000000
--- a/packages/gstreamer/gstreamer_0.10.5.bb
+++ /dev/null
@@ -1 +0,0 @@
-require gstreamer.inc
diff --git a/packages/gstreamer/gstreamer_0.10.6.bb b/packages/gstreamer/gstreamer_0.10.6.bb
deleted file mode 100644
index fcb5ad79ba..0000000000
--- a/packages/gstreamer/gstreamer_0.10.6.bb
+++ /dev/null
@@ -1 +0,0 @@
-require gstreamer.inc
diff --git a/packages/gstreamer/gstreamer_0.10.8.bb b/packages/gstreamer/gstreamer_0.10.8.bb
deleted file mode 100644
index fcb5ad79ba..0000000000
--- a/packages/gstreamer/gstreamer_0.10.8.bb
+++ /dev/null
@@ -1 +0,0 @@
-require gstreamer.inc
diff --git a/packages/gtk+/composite-pixbuf_0.0.bb b/packages/gtk+/composite-pixbuf_0.0.bb
new file mode 100644
index 0000000000..729343fb44
--- /dev/null
+++ b/packages/gtk+/composite-pixbuf_0.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Pixbuf performance test"
+LICENSE = "Public domain"
+DEPENDS = "gtk+"
+
+SRC_URI = "http://amelang.net/composite_pixbuf.c"
+
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CC} ${CFLAGS} composite_pixbuf.c -o composite_pixbuf \
+ `pkg-config --cflags gdk-2.0` `pkg-config --libs gdk-2.0` `pkg-config --libs x11` `pkg-config --libs pango` \
+ -lxcb -lXext -lXinerama -lXrandr -lXcursor -lXfixes -lpangoft2-1.0 -lz -lexpat -lxcb-xlib -lXau -lXdmcp
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 755 composite_pixbuf ${D}${bindir}
+}
diff --git a/packages/gtk+/files/filesel-fix-segfault.patch b/packages/gtk+/files/filesel-fix-segfault.patch
new file mode 100644
index 0000000000..7b37d4bb2e
--- /dev/null
+++ b/packages/gtk+/files/filesel-fix-segfault.patch
@@ -0,0 +1,19 @@
+--- gtk+-2.10.12_/gtk/gtkfilesel.c 2007-06-12 14:00:38.000000000 +0200
++++ gtk+-2.10.12/gtk/gtkfilesel.c 2007-06-12 14:40:32.000000000 +0200
+@@ -2444,9 +2444,13 @@
+
+ if (!is_file)
+ {
+- gtk_file_selection_dir_activate (tree_view, path,
+- gtk_tree_view_get_column (tree_view, DIR_COLUMN),
+- user_data);
++ fs->last_selected = g_strdup (g_ptr_array_index (new_names, index));
++ gtk_file_selection_dir_activate (tree_view, path,
++ gtk_tree_view_get_column (tree_view, DIR_COLUMN),
++ user_data);
++ gtk_tree_path_free (path);
++ return;
++
+ }
+
+ gtk_tree_path_free (path);
diff --git a/packages/gtk+/files/lower-quality-scaling-in-pixbuf-engine.patch b/packages/gtk+/files/lower-quality-scaling-in-pixbuf-engine.patch
new file mode 100644
index 0000000000..6cf1c14991
--- /dev/null
+++ b/packages/gtk+/files/lower-quality-scaling-in-pixbuf-engine.patch
@@ -0,0 +1,13 @@
+Index: gtk+-2.6.10/modules/engines/pixbuf/pixbuf-render.c
+===================================================================
+--- gtk+-2.6.10.orig/modules/engines/pixbuf/pixbuf-render.c 2005-08-18 14:11:00.000000000 +0000
++++ gtk+-2.6.10/modules/engines/pixbuf/pixbuf-render.c 2007-05-24 11:16:50.000000000 +0000
+@@ -407,7 +407,7 @@
+ 0, 0, rect.width, rect.height,
+ dest_x - rect.x, dest_y - rect.y,
+ x_scale, y_scale,
+- GDK_INTERP_BILINEAR);
++ GDK_INTERP_NEAREST);
+
+ g_object_unref (partial_src);
+
diff --git a/packages/gtk+/gtk+-1.2_1.2.10.bb b/packages/gtk+/gtk+-1.2_1.2.10.bb
index 8025beb75c..b3d0a61bad 100644
--- a/packages/gtk+/gtk+-1.2_1.2.10.bb
+++ b/packages/gtk+/gtk+-1.2_1.2.10.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.gtk.org"
SECTION = "libs"
PRIORITY = "optional"
DEPENDS = "glib-1.2 jpeg libpng libxext"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v1.2/gtk+-${PV}.tar.gz \
file://timezone-fix.patch;patch=1 \
@@ -48,7 +48,7 @@ do_stage () {
mkdir -p ${STAGING_LIBDIR}/gtk-1.2/include
install -m 0644 gtk.m4 ${STAGING_DATADIR}/aclocal/
- install -m 0755 gtk-config ${STAGING_BINDIR_CROSS}
+ install -m 0755 gtk-config ${STAGING_BINDIR_CROSS}/
}
do_install_append () {
diff --git a/packages/opie-taskbar/opie-taskbar/htcuniversal/.mtn2git_empty b/packages/gtk+/gtk+-2.10.14/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/htcuniversal/.mtn2git_empty
+++ b/packages/gtk+/gtk+-2.10.14/.mtn2git_empty
diff --git a/packages/gtk+/gtk+-2.10.3/automake-lossage.patch b/packages/gtk+/gtk+-2.10.14/automake-lossage.patch
index 0d423ddbb9..0d423ddbb9 100644
--- a/packages/gtk+/gtk+-2.10.3/automake-lossage.patch
+++ b/packages/gtk+/gtk+-2.10.14/automake-lossage.patch
diff --git a/packages/gtk+/gtk+-2.10.14/combo-arrow-size.patch b/packages/gtk+/gtk+-2.10.14/combo-arrow-size.patch
new file mode 100644
index 0000000000..d44c454ce3
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/combo-arrow-size.patch
@@ -0,0 +1,67 @@
+Index: gtk/gtkcombobox.c
+===================================================================
+RCS file: /cvs/gnome/gtk+/gtk/gtkcombobox.c,v
+retrieving revision 1.185
+diff -u -p -r1.185 gtkcombobox.c
+--- gtk/gtkcombobox.c 12 Oct 2006 13:48:07 -0000 1.185
++++ gtk/gtkcombobox.c 1 Nov 2006 19:01:09 -0000
+@@ -756,6 +756,25 @@ gtk_combo_box_class_init (GtkComboBoxCla
+ FALSE,
+ GTK_PARAM_READABLE));
+
++ /**
++ * GtkComboBox:arrow-size:
++ *
++ * Sets the minimum size of the arrow in the combo box. Note
++ * that the arrow size is coupled to the font size, so in case
++ * a larger font is used, the arrow will be larger than set
++ * by arrow size.
++ *
++ * Since: 2.12
++ */
++ gtk_widget_class_install_style_property (widget_class,
++ g_param_spec_int ("arrow-size",
++ P_("Arrow Size"),
++ P_("The minimum size of the arrow in the combo box"),
++ 0,
++ G_MAXINT,
++ 15,
++ GTK_PARAM_READABLE));
++
+ g_type_class_add_private (object_class, sizeof (GtkComboBoxPrivate));
+ }
+
+@@ -1897,7 +1916,12 @@ gtk_combo_box_size_request (GtkWidget
+ {
+ gint width, height;
+ gint focus_width, focus_pad;
++ gint font_size;
++ gint arrow_size;
+ GtkRequisition bin_req;
++ PangoContext *context;
++ PangoFontMetrics *metrics;
++ PangoFontDescription *font_desc;
+
+ GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
+
+@@ -1910,7 +1934,20 @@ gtk_combo_box_size_request (GtkWidget
+ gtk_widget_style_get (GTK_WIDGET (widget),
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
++ "arrow-size", &arrow_size,
+ NULL);
++
++ font_desc = GTK_BIN (widget)->child->style->font_desc;
++ context = gtk_widget_get_pango_context (widget);
++ metrics = pango_context_get_metrics (context, font_desc,
++ pango_context_get_language (context));
++ font_size = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) +
++ pango_font_metrics_get_descent (metrics));
++ pango_font_metrics_unref (metrics);
++
++ arrow_size = MAX (arrow_size, font_size);
++
++ gtk_widget_set_size_request (combo_box->priv->arrow, arrow_size, arrow_size);
+
+ if (!combo_box->priv->tree_view)
+ {
diff --git a/packages/gtk+/gtk+-2.10.3/disable-print.patch b/packages/gtk+/gtk+-2.10.14/disable-print.patch
index 1067773f12..1067773f12 100644
--- a/packages/gtk+/gtk+-2.10.3/disable-print.patch
+++ b/packages/gtk+/gtk+-2.10.14/disable-print.patch
diff --git a/packages/gtk+/gtk+-2.10.3/disable-tooltips.patch b/packages/gtk+/gtk+-2.10.14/disable-tooltips.patch
index d71d839c3c..d71d839c3c 100644
--- a/packages/gtk+/gtk+-2.10.3/disable-tooltips.patch
+++ b/packages/gtk+/gtk+-2.10.14/disable-tooltips.patch
diff --git a/packages/gtk+/gtk+-2.10.7/gnome-bug-341177.patch b/packages/gtk+/gtk+-2.10.14/gnome-bug-341177.patch
index c31868462a..c31868462a 100644
--- a/packages/gtk+/gtk+-2.10.7/gnome-bug-341177.patch
+++ b/packages/gtk+/gtk+-2.10.14/gnome-bug-341177.patch
diff --git a/packages/gtk+/gtk+-2.10.6/gtk+-handhelds.patch b/packages/gtk+/gtk+-2.10.14/gtk+-handhelds.patch
index 1ea86ce6b2..1ea86ce6b2 100644
--- a/packages/gtk+/gtk+-2.10.6/gtk+-handhelds.patch
+++ b/packages/gtk+/gtk+-2.10.14/gtk+-handhelds.patch
diff --git a/packages/gtk+/gtk+-2.10.3/gtklabel-resize-patch b/packages/gtk+/gtk+-2.10.14/gtklabel-resize-patch
index df29656343..df29656343 100644
--- a/packages/gtk+/gtk+-2.10.3/gtklabel-resize-patch
+++ b/packages/gtk+/gtk+-2.10.14/gtklabel-resize-patch
diff --git a/packages/gtk+/gtk+-2.10.7/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.10.14/hardcoded_libtool.patch
index 6adb0cfef6..6adb0cfef6 100644
--- a/packages/gtk+/gtk+-2.10.7/hardcoded_libtool.patch
+++ b/packages/gtk+/gtk+-2.10.14/hardcoded_libtool.patch
diff --git a/packages/gtk+/gtk+-2.10.7/integer-pixops.patch b/packages/gtk+/gtk+-2.10.14/integer-pixops.patch
index 490a60dd8a..490a60dd8a 100644
--- a/packages/gtk+/gtk+-2.10.7/integer-pixops.patch
+++ b/packages/gtk+/gtk+-2.10.14/integer-pixops.patch
diff --git a/packages/gtk+/gtk+-2.10.3/menu-deactivate.patch b/packages/gtk+/gtk+-2.10.14/menu-deactivate.patch
index cfb8849e9f..cfb8849e9f 100644
--- a/packages/gtk+/gtk+-2.10.3/menu-deactivate.patch
+++ b/packages/gtk+/gtk+-2.10.14/menu-deactivate.patch
diff --git a/packages/gtk+/gtk+-2.10.6/migration.patch b/packages/gtk+/gtk+-2.10.14/migration.patch
index 4ee786e688..4ee786e688 100644
--- a/packages/gtk+/gtk+-2.10.6/migration.patch
+++ b/packages/gtk+/gtk+-2.10.14/migration.patch
diff --git a/packages/gtk+/gtk+-2.10.3/no-demos.patch b/packages/gtk+/gtk+-2.10.14/no-demos.patch
index 0fc4c48d1a..0fc4c48d1a 100644
--- a/packages/gtk+/gtk+-2.10.3/no-demos.patch
+++ b/packages/gtk+/gtk+-2.10.14/no-demos.patch
diff --git a/packages/gtk+/gtk+-2.10.3/no-xwc.patch b/packages/gtk+/gtk+-2.10.14/no-xwc.patch
index affb4a303e..affb4a303e 100644
--- a/packages/gtk+/gtk+-2.10.3/no-xwc.patch
+++ b/packages/gtk+/gtk+-2.10.14/no-xwc.patch
diff --git a/packages/gtk+/gtk+-2.10.14/plana-pixops.patch b/packages/gtk+/gtk+-2.10.14/plana-pixops.patch
new file mode 100644
index 0000000000..21fe4879c5
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/plana-pixops.patch
@@ -0,0 +1,569 @@
+diff -urN gtk+-2.10.9.orig/config.h.in gtk+-2.10.9-integer-pixops/config.h.in
+--- gtk+-2.10.9.orig/config.h.in 2007-01-22 09:01:23.000000000 -0700
++++ gtk+-2.10.9-integer-pixops/config.h.in 2007-02-10 12:15:39.000000000 -0700
+@@ -259,3 +259,7 @@
+
+ /* Define to `int' if <sys/types.h> doesn't define. */
+ #undef uid_t
++
++/* Define to use integer math rather than floating point where possible. */
++#undef ENABLE_INTEGER_PIXOPS
++
+diff -urN gtk+-2.10.9.orig/configure.in gtk+-2.10.9-integer-pixops/configure.in
+--- gtk+-2.10.9.orig/configure.in 2007-01-22 08:59:41.000000000 -0700
++++ gtk+-2.10.9-integer-pixops/configure.in 2007-02-10 12:15:39.000000000 -0700
+@@ -203,6 +203,15 @@
+ [AC_HELP_STRING([--disable-rebuilds],
+ [disable all source autogeneration rules])],,
+ [enable_rebuilds=yes])
++AC_ARG_ENABLE(integer-pixops,
++ [AC_HELP_STRING([--enable-integer-pixops],
++ [use integer math where possible])],,
++ [enable_integer_pixops=no])
++
++if test "x$enable_integer_pixops" = "xyes"; then
++ AC_DEFINE(ENABLE_INTEGER_PIXOPS)
++fi
++
+ AC_ARG_ENABLE(visibility,
+ [AC_HELP_STRING([--disable-visibility],
+ [don't use ELF visibility attributes])],,
+diff -urN gtk+-2.10.9.orig/gdk-pixbuf/pixops/pixops.c gtk+-2.10.9-integer-pixops/gdk-pixbuf/pixops/pixops.c
+--- gtk+-2.10.9.orig/gdk-pixbuf/pixops/pixops.c 2007-01-22 08:50:43.000000000 -0700
++++ gtk+-2.10.9-integer-pixops/gdk-pixbuf/pixops/pixops.c 2007-02-12 01:00:23.000000000 -0700
+@@ -28,21 +28,42 @@
+ #define SUBSAMPLE_MASK ((1 << SUBSAMPLE_BITS)-1)
+ #define SCALE_SHIFT 16
+
++/* TODO: Add a FLOOR() and CEIL() macro to handle normalized values) */
++/* TODO: Get rid of standard C numeric types (ie. int). Replace with glib types */
++#ifdef ENABLE_INTEGER_PIXOPS
++/* The bigger the value of FRAC is, the better the accuracy. Be wary of
++ overflows, though */
++#define FRAC 0x10000ULL
++#define NORMALIZE(d) (d * FRAC)
++#define UNNORMALIZE(t,i) ((t)(i) / FRAC)
++#define FLOOR(i) (int)((i) / FRAC)
++#define CEIL(i) (((i) - 1) / FRAC + 1)
++#define DOUBLE_TYPE gint32
++#define BIG_DOUBLE_TYPE gint64
++#else
++#define NORMALIZE(d) (d)
++#define UNNORMALIZE(t,i) (t)(i)
++#define FLOOR(i) floor(i)
++#define CEIL(i) ceil(i)
++#define DOUBLE_TYPE double
++#define BIG_DOUBLE_TYPE double
++#endif
++
+ typedef struct _PixopsFilter PixopsFilter;
+ typedef struct _PixopsFilterDimension PixopsFilterDimension;
+
+ struct _PixopsFilterDimension
+ {
+ int n;
+- double offset;
+- double *weights;
++ BIG_DOUBLE_TYPE offset;
++ DOUBLE_TYPE *weights;
+ };
+
+ struct _PixopsFilter
+ {
+ PixopsFilterDimension x;
+ PixopsFilterDimension y;
+- double overall_alpha;
++ gint32 overall_alpha; /* Normalized: alpha * 255; Not sure why original devs chose 255 */
+ };
+
+ typedef guchar *(*PixopsLineFunc) (int *weights, int n_x, int n_y,
+@@ -86,13 +107,13 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y)
++ DOUBLE_TYPE scale_x,
++ DOUBLE_TYPE scale_y)
+ {
+ int i;
+ int x;
+- int x_step = (1 << SCALE_SHIFT) / scale_x;
+- int y_step = (1 << SCALE_SHIFT) / scale_y;
++ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x;
++ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y;
+ int xmax, xstart, xstop, x_pos, y_pos;
+ const guchar *p;
+
+@@ -175,14 +196,14 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ DOUBLE_TYPE scale_x,
++ DOUBLE_TYPE scale_y,
+ int overall_alpha)
+ {
+ int i;
+ int x;
+- int x_step = (1 << SCALE_SHIFT) / scale_x;
+- int y_step = (1 << SCALE_SHIFT) / scale_y;
++ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x;
++ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y;
+ int xmax, xstart, xstop, x_pos, y_pos;
+ const guchar *p;
+ unsigned int a0;
+@@ -260,8 +281,8 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ DOUBLE_TYPE scale_x,
++ DOUBLE_TYPE scale_y,
+ int overall_alpha,
+ int check_x,
+ int check_y,
+@@ -271,8 +292,8 @@
+ {
+ int i, j;
+ int x;
+- int x_step = (1 << SCALE_SHIFT) / scale_x;
+- int y_step = (1 << SCALE_SHIFT) / scale_y;
++ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x;
++ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y;
+ int r1, g1, b1, r2, g2, b2;
+ int check_shift = get_check_shift (check_size);
+ int xmax, xstart, xstop, x_pos, y_pos;
+@@ -977,9 +998,9 @@
+ int n_x,
+ int n_y,
+ int total,
+- double overall_alpha)
++ gint32 overall_alpha)
+ {
+- int correction = (int)(0.5 + 65536 * overall_alpha) - total;
++ int correction = (int)(0.5 + 65536 / 255 * overall_alpha) - total;
+ int remaining, c, d, i;
+
+ if (correction != 0)
+@@ -1009,7 +1030,7 @@
+ for (i_offset=0; i_offset < SUBSAMPLE; i_offset++)
+ for (j_offset=0; j_offset < SUBSAMPLE; j_offset++)
+ {
+- double weight;
++ DOUBLE_TYPE weight;
+ int *pixel_weights = weights + ((i_offset*SUBSAMPLE) + j_offset) * n_x * n_y;
+ int total = 0;
+ int i, j;
+@@ -1017,13 +1038,15 @@
+ for (i=0; i < n_y; i++)
+ for (j=0; j < n_x; j++)
+ {
+- weight = filter->x.weights[(j_offset * n_x) + j] *
++ weight = UNNORMALIZE(DOUBLE_TYPE, filter->x.weights[(j_offset * n_x) + j] *
+ filter->y.weights[(i_offset * n_y) + i] *
+- filter->overall_alpha * 65536 + 0.5;
++ filter->overall_alpha * 65536 / 255) + NORMALIZE(0.5);
++ /* Wonder how I should treat the "+ 0.5" for scientific
++ rouding off */
+
+- total += (int)weight;
++ total += UNNORMALIZE(int, weight);
+
+- *(pixel_weights + n_x * i + j) = weight;
++ *(pixel_weights + n_x * i + j) = UNNORMALIZE(int, weight);
+ }
+
+ correct_total (pixel_weights, n_x, n_y, total, filter->overall_alpha);
+@@ -1047,8 +1070,8 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ DOUBLE_TYPE scale_x,
++ DOUBLE_TYPE scale_y,
+ int check_x,
+ int check_y,
+ int check_size,
+@@ -1064,12 +1087,13 @@
+ guchar **line_bufs = g_new (guchar *, filter->y.n);
+ int *filter_weights = make_filter_table (filter);
+
+- int x_step = (1 << SCALE_SHIFT) / scale_x; /* X step in source (fixed point) */
+- int y_step = (1 << SCALE_SHIFT) / scale_y; /* Y step in source (fixed point) */
++ int x_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_x; /* X step in source (fixed point) */
++ int y_step = NORMALIZE((1 << SCALE_SHIFT)) / scale_y; /* Y step in source (fixed point) */
+
+ int check_shift = check_size ? get_check_shift (check_size) : 0;
+
+- int scaled_x_offset = floor (filter->x.offset * (1 << SCALE_SHIFT));
++ /* Possible overflow when scale-shifting which is why offset is BIG_DOUBLE_TYPE */
++ int scaled_x_offset = FLOOR(filter->x.offset * (1 << SCALE_SHIFT));
+
+ /* Compute the index where we run off the end of the source buffer. The furthest
+ * source pixel we access at index i is:
+@@ -1087,7 +1111,7 @@
+ int run_end_index = MYDIV (run_end_x + x_step - 1, x_step) - render_x0;
+ run_end_index = MIN (run_end_index, render_x1 - render_x0);
+
+- y = render_y0 * y_step + floor (filter->y.offset * (1 << SCALE_SHIFT));
++ y = render_y0 * y_step + FLOOR(filter->y.offset * (1 << SCALE_SHIFT));
+ for (i = 0; i < (render_y1 - render_y0); i++)
+ {
+ int dest_x;
+@@ -1180,37 +1204,37 @@
+ */
+ static void
+ tile_make_weights (PixopsFilterDimension *dim,
+- double scale)
++ DOUBLE_TYPE scale)
+ {
+- int n = ceil (1 / scale + 1);
+- double *pixel_weights = g_new (double, SUBSAMPLE * n);
++ int n = CEIL(NORMALIZE(NORMALIZE(1)) / scale + NORMALIZE(1)); /* Another possible overflow */
++ DOUBLE_TYPE *pixel_weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n);
+ int offset;
+ int i;
+-
++
+ dim->n = n;
+- dim->offset = 0;
++ dim->offset = NORMALIZE(0);
+ dim->weights = pixel_weights;
+
+ for (offset = 0; offset < SUBSAMPLE; offset++)
+ {
+- double x = (double)offset / SUBSAMPLE;
+- double a = x + 1 / scale;
++ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE;
++ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale;
+
+ for (i = 0; i < n; i++)
+ {
+- if (i < x)
++ if (NORMALIZE(i) < x)
+ {
+- if (i + 1 > x)
+- *(pixel_weights++) = (MIN (i + 1, a) - x) * scale;
++ if (NORMALIZE(i + 1) > x)
++ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - x) * scale);
+ else
+- *(pixel_weights++) = 0;
++ *(pixel_weights++) = NORMALIZE(0);
+ }
+ else
+ {
+- if (a > i)
+- *(pixel_weights++) = (MIN (i + 1, a) - i) * scale;
++ if (a > NORMALIZE(i))
++ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - i) * scale);
+ else
+- *(pixel_weights++) = 0;
++ *(pixel_weights++) = NORMALIZE(0);
+ }
+ }
+ }
+@@ -1222,41 +1246,44 @@
+ */
+ static void
+ bilinear_magnify_make_weights (PixopsFilterDimension *dim,
+- double scale)
++ DOUBLE_TYPE scale)
+ {
+- double *pixel_weights;
++ DOUBLE_TYPE *pixel_weights;
+ int n;
+ int offset;
+ int i;
+
+- if (scale > 1.0) /* Linear */
++ if (scale > NORMALIZE(1.0)) /* Linear */
+ {
+ n = 2;
+- dim->offset = 0.5 * (1 / scale - 1);
++ dim->offset = NORMALIZE(NORMALIZE(0.5) / (scale - NORMALIZE(1)));
+ }
+ else /* Tile */
+ {
+- n = ceil (1.0 + 1.0 / scale);
+- dim->offset = 0.0;
++ n = CEIL(NORMALIZE(1.0) + NORMALIZE(NORMALIZE(1.0)) / scale);
++ dim->offset = NORMALIZE(0.0);
+ }
+-
++
+ dim->n = n;
+- dim->weights = g_new (double, SUBSAMPLE * n);
++ dim->weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n);
+
+ pixel_weights = dim->weights;
+
+ for (offset=0; offset < SUBSAMPLE; offset++)
+ {
+- double x = (double)offset / SUBSAMPLE;
++ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE;
+
+- if (scale > 1.0) /* Linear */
++ if (scale > NORMALIZE(1.0)) /* Linear */
+ {
+ for (i = 0; i < n; i++)
+- *(pixel_weights++) = (((i == 0) ? (1 - x) : x) / scale) * scale;
++ /* In the original, what is the point of dividing by scale then multiplying by scale? */
++ /* *(pixel_weights++) = (((i == 0) ? (1 - x) : x) / scale) * scale;*/
++ /* *(pixel_weights++) = i == 0 ? NORMALIZE(1) - x : x; */
++ *(pixel_weights++) = (((i == 0) ? NORMALIZE(1) - x : x) / scale) * scale;
+ }
+ else /* Tile */
+ {
+- double a = x + 1 / scale;
++ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale;
+
+ /* x
+ * ---------|--.-|----|--.-|------- SRC
+@@ -1264,19 +1291,19 @@
+ */
+ for (i = 0; i < n; i++)
+ {
+- if (i < x)
++ if (NORMALIZE(i) < x)
+ {
+- if (i + 1 > x)
+- *(pixel_weights++) = (MIN (i + 1, a) - x) * scale;
++ if (NORMALIZE(i + 1) > x)
++ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - x) * scale);
+ else
+- *(pixel_weights++) = 0;
++ *(pixel_weights++) = NORMALIZE(0);
+ }
+ else
+ {
+- if (a > i)
+- *(pixel_weights++) = (MIN (i + 1, a) - i) * scale;
++ if (a > NORMALIZE(i))
++ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, (MIN(NORMALIZE(i + 1), a) - i) * scale);
+ else
+- *(pixel_weights++) = 0;
++ *(pixel_weights++) = NORMALIZE(0);
+ }
+ }
+ }
+@@ -1291,14 +1318,14 @@
+ * We combine two of these to compute the convolution of
+ * a box filter with a triangular spike.
+ */
+-static double
+-linear_box_half (double b0, double b1)
++static DOUBLE_TYPE
++linear_box_half (DOUBLE_TYPE b0, DOUBLE_TYPE b1)
+ {
+- double a0, a1;
+- double x0, x1;
++ DOUBLE_TYPE a0, a1;
++ DOUBLE_TYPE x0, x1;
+
+- a0 = 0.;
+- a1 = 1.;
++ a0 = NORMALIZE(0.);
++ a1 = NORMALIZE(1.);
+
+ if (a0 < b0)
+ {
+@@ -1308,7 +1335,7 @@
+ x1 = MIN (a1, b1);
+ }
+ else
+- return 0;
++ return NORMALIZE(0);
+ }
+ else
+ {
+@@ -1318,10 +1345,10 @@
+ x1 = MIN (a1, b1);
+ }
+ else
+- return 0;
++ return NORMALIZE(0);
+ }
+
+- return 0.5 * (x1*x1 - x0*x0);
++ return UNNORMALIZE(DOUBLE_TYPE, NORMALIZE(0.5) * UNNORMALIZE(DOUBLE_TYPE, (x1*x1 - x0*x0)));
+ }
+
+ /* Compute weights for reconstructing with bilinear
+@@ -1329,28 +1356,28 @@
+ */
+ static void
+ bilinear_box_make_weights (PixopsFilterDimension *dim,
+- double scale)
++ DOUBLE_TYPE scale)
+ {
+- int n = ceil (1/scale + 3.0);
+- double *pixel_weights = g_new (double, SUBSAMPLE * n);
+- double w;
++ int n = CEIL(NORMALIZE(NORMALIZE(1))/scale + NORMALIZE(3.0));
++ DOUBLE_TYPE *pixel_weights = g_new (DOUBLE_TYPE, SUBSAMPLE * n);
++ DOUBLE_TYPE w;
+ int offset, i;
+
+- dim->offset = -1.0;
++ dim->offset = NORMALIZE(-1.0);
+ dim->n = n;
+ dim->weights = pixel_weights;
+
+ for (offset = 0; offset < SUBSAMPLE; offset++)
+ {
+- double x = (double)offset / SUBSAMPLE;
+- double a = x + 1 / scale;
++ DOUBLE_TYPE x = (DOUBLE_TYPE)NORMALIZE(offset) / SUBSAMPLE;
++ DOUBLE_TYPE a = x + NORMALIZE(NORMALIZE(1)) / scale;
+
+ for (i = 0; i < n; i++)
+ {
+- w = linear_box_half (0.5 + i - a, 0.5 + i - x);
+- w += linear_box_half (1.5 + x - i, 1.5 + a - i);
++ w = linear_box_half (NORMALIZE(0.5) + NORMALIZE(i) - a, NORMALIZE(0.5) + NORMALIZE(i) - x);
++ w += linear_box_half (NORMALIZE(1.5) - NORMALIZE(i) + x, NORMALIZE(1.5) - NORMALIZE(i) + a);
+
+- *(pixel_weights++) = w * scale;
++ *(pixel_weights++) = UNNORMALIZE(DOUBLE_TYPE, w * scale);
+ }
+ }
+ }
+@@ -1358,8 +1385,8 @@
+ static void
+ make_weights (PixopsFilter *filter,
+ PixopsInterpType interp_type,
+- double scale_x,
+- double scale_y)
++ DOUBLE_TYPE scale_x,
++ DOUBLE_TYPE scale_y)
+ {
+ switch (interp_type)
+ {
+@@ -1399,8 +1426,8 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ double scale_x_d,
++ double scale_y_d,
+ PixopsInterpType interp_type,
+ int overall_alpha,
+ int check_x,
+@@ -1409,6 +1436,8 @@
+ guint32 color1,
+ guint32 color2)
+ {
++ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d);
++ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d);
+ PixopsFilter filter;
+ PixopsLineFunc line_func;
+
+@@ -1419,7 +1448,7 @@
+ g_return_if_fail (!(dest_channels == 3 && dest_has_alpha));
+ g_return_if_fail (!(src_channels == 3 && src_has_alpha));
+
+- if (scale_x == 0 || scale_y == 0)
++ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0))
+ return;
+
+ if (!src_has_alpha && overall_alpha == 255)
+@@ -1427,7 +1456,7 @@
+ _pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1,
+ dest_rowstride, dest_channels, dest_has_alpha,
+ src_buf, src_width, src_height, src_rowstride, src_channels,
+- src_has_alpha, scale_x, scale_y, interp_type);
++ src_has_alpha, UNNORMALIZE(double, scale_x), UNNORMALIZE(double, scale_y), interp_type);
+ return;
+ }
+
+@@ -1441,7 +1470,8 @@
+ return;
+ }
+
+- filter.overall_alpha = overall_alpha / 255.;
++ /* filter.overall_alpha = overall_alpha / 255.; /* Why is it 255 instead of 256? */
++ filter.overall_alpha = overall_alpha;
+ make_weights (&filter, interp_type, scale_x, scale_y);
+
+ #ifdef USE_MMX
+@@ -1501,11 +1531,13 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ double scale_x_d,
++ double scale_y_d,
+ PixopsInterpType interp_type,
+ int overall_alpha)
+ {
++ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d);
++ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d);
+ PixopsFilter filter;
+ PixopsLineFunc line_func;
+
+@@ -1516,7 +1548,7 @@
+ g_return_if_fail (!(dest_channels == 3 && dest_has_alpha));
+ g_return_if_fail (!(src_channels == 3 && src_has_alpha));
+
+- if (scale_x == 0 || scale_y == 0)
++ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0))
+ return;
+
+ if (!src_has_alpha && overall_alpha == 255)
+@@ -1524,7 +1556,7 @@
+ _pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1,
+ dest_rowstride, dest_channels, dest_has_alpha,
+ src_buf, src_width, src_height, src_rowstride, src_channels,
+- src_has_alpha, scale_x, scale_y, interp_type);
++ src_has_alpha, UNNORMALIZE(double, scale_x), UNNORMALIZE(double, scale_y), interp_type);
+ return;
+ }
+
+@@ -1537,7 +1569,7 @@
+ return;
+ }
+
+- filter.overall_alpha = overall_alpha / 255.;
++ filter.overall_alpha = overall_alpha;
+ make_weights (&filter, interp_type, scale_x, scale_y);
+
+ if (filter.x.n == 2 && filter.y.n == 2 &&
+@@ -1578,10 +1610,12 @@
+ int src_rowstride,
+ int src_channels,
+ gboolean src_has_alpha,
+- double scale_x,
+- double scale_y,
++ double scale_x_d,
++ double scale_y_d,
+ PixopsInterpType interp_type)
+ {
++ DOUBLE_TYPE scale_x = NORMALIZE(scale_x_d);
++ DOUBLE_TYPE scale_y = NORMALIZE(scale_y_d);
+ PixopsFilter filter;
+ PixopsLineFunc line_func;
+
+@@ -1593,7 +1627,7 @@
+ g_return_if_fail (!(src_channels == 3 && src_has_alpha));
+ g_return_if_fail (!(src_has_alpha && !dest_has_alpha));
+
+- if (scale_x == 0 || scale_y == 0)
++ if (scale_x == NORMALIZE(0) || scale_y == NORMALIZE(0))
+ return;
+
+ if (interp_type == PIXOPS_INTERP_NEAREST)
+@@ -1605,7 +1639,7 @@
+ return;
+ }
+
+- filter.overall_alpha = 1.0;
++ filter.overall_alpha = 255;
+ make_weights (&filter, interp_type, scale_x, scale_y);
+
+ if (filter.x.n == 2 && filter.y.n == 2 && dest_channels == 3 && src_channels == 3)
diff --git a/packages/gtk+/gtk+-2.10.14/range-no-redraw.patch b/packages/gtk+/gtk+-2.10.14/range-no-redraw.patch
new file mode 100644
index 0000000000..e3603d7700
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/range-no-redraw.patch
@@ -0,0 +1,41 @@
+Index: gtk/gtkrange.c
+===================================================================
+--- gtk/gtkrange.c (revision 18523)
++++ gtk/gtkrange.c (working copy)
+@@ -99,6 +99,8 @@
+
+ GtkSensitivityType lower_sensitivity;
+ GtkSensitivityType upper_sensitivity;
++
++ guint motion_idle;
+ };
+
+
+@@ -1721,6 +1723,16 @@
+ &handled);
+ }
+
++static gboolean
++update_slider_position_idle (GtkRange *range)
++{
++ update_slider_position (range, range->layout->mouse_x,range->layout->mouse_y);
++
++ range->layout->motion_idle = 0;
++
++ return FALSE;
++}
++
+ static void
+ stop_scrolling (GtkRange *range)
+ {
+@@ -1860,8 +1872,8 @@
+ if (gtk_range_update_mouse_location (range))
+ gtk_widget_queue_draw (widget);
+
+- if (range->layout->grab_location == MOUSE_SLIDER)
+- update_slider_position (range, x, y);
++ if (range->layout->grab_location == MOUSE_SLIDER && !range->layout->motion_idle)
++ range->layout->motion_idle = g_idle_add ((GSourceFunc)update_slider_position_idle, range);
+
+ /* We handled the event if the mouse was in the range_rect */
+ return range->layout->mouse_location != MOUSE_OUTSIDE;
diff --git a/packages/gtk+/gtk+-2.10.7/run-iconcache.patch b/packages/gtk+/gtk+-2.10.14/run-iconcache.patch
index ac15e9ab24..ac15e9ab24 100644
--- a/packages/gtk+/gtk+-2.10.7/run-iconcache.patch
+++ b/packages/gtk+/gtk+-2.10.14/run-iconcache.patch
diff --git a/packages/gtk+/gtk+-2.10.3/scroll-timings.patch b/packages/gtk+/gtk+-2.10.14/scroll-timings.patch
index 3f823a7880..3f823a7880 100644
--- a/packages/gtk+/gtk+-2.10.3/scroll-timings.patch
+++ b/packages/gtk+/gtk+-2.10.14/scroll-timings.patch
diff --git a/packages/gtk+/gtk+-2.10.14/scrolled-placement.patch b/packages/gtk+/gtk+-2.10.14/scrolled-placement.patch
new file mode 100644
index 0000000000..09ded531ea
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/scrolled-placement.patch
@@ -0,0 +1,35 @@
+Index: gtk/gtkscrolledwindow.c
+===================================================================
+--- gtk/gtkscrolledwindow.c (revision 18493)
++++ gtk/gtkscrolledwindow.c (working copy)
+@@ -885,7 +885,7 @@
+ if (GTK_IS_SCROLLED_WINDOW (widget))
+ {
+ gtk_scrolled_window_update_real_placement (GTK_SCROLLED_WINDOW (widget));
+- gtk_widget_queue_draw (widget);
++ gtk_widget_queue_resize (widget);
+ }
+ else if (GTK_IS_CONTAINER (widget))
+ gtk_container_forall (GTK_CONTAINER (widget), traverse_container, NULL);
+Index: gdk/x11/gdksettings.c
+===================================================================
+--- gdk/x11/gdksettings.c (revision 18493)
++++ gdk/x11/gdksettings.c (working copy)
+@@ -65,7 +65,8 @@
+ "Xft/RGBA\0" "gtk-xft-rgba\0"
+ "Xft/DPI\0" "gtk-xft-dpi\0"
+ "Net/FallbackIconTheme\0" "gtk-fallback-icon-theme\0"
+- "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0";
++ "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0"
++ "Gtk/ScrolledWindowPlacement\0" "gtk-scrolled-window-placement\0";
+
+ static const struct
+ {
+@@ -107,5 +108,6 @@
+ { 1197, 1206 },
+ { 1219, 1227 },
+ { 1239, 1261 },
+- { 1285, 1305 }
++ { 1285, 1305 },
++ { 1326, 1354 }
+ };
diff --git a/packages/gtk+/gtk+-2.10.6/single-click.patch b/packages/gtk+/gtk+-2.10.14/single-click.patch
index 250f1629f5..250f1629f5 100644
--- a/packages/gtk+/gtk+-2.10.6/single-click.patch
+++ b/packages/gtk+/gtk+-2.10.14/single-click.patch
diff --git a/packages/gtk+/gtk+-2.10.3/small-gtkfilesel.patch b/packages/gtk+/gtk+-2.10.14/small-gtkfilesel.patch
index 20bf4cf366..20bf4cf366 100644
--- a/packages/gtk+/gtk+-2.10.3/small-gtkfilesel.patch
+++ b/packages/gtk+/gtk+-2.10.14/small-gtkfilesel.patch
diff --git a/packages/gtk+/gtk+-2.10.6/spinbutton.patch b/packages/gtk+/gtk+-2.10.14/spinbutton.patch
index c26dc6d93c..c26dc6d93c 100644
--- a/packages/gtk+/gtk+-2.10.6/spinbutton.patch
+++ b/packages/gtk+/gtk+-2.10.14/spinbutton.patch
diff --git a/packages/gtk+/gtk+-2.10.14/toggle-font.diff b/packages/gtk+/gtk+-2.10.14/toggle-font.diff
new file mode 100644
index 0000000000..928da72430
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/toggle-font.diff
@@ -0,0 +1,100 @@
+Index: gtk/gtkcellrenderertoggle.c
+===================================================================
+--- gtk/gtkcellrenderertoggle.c (revision 18523)
++++ gtk/gtkcellrenderertoggle.c (working copy)
+@@ -71,6 +71,8 @@
+ PROP_INDICATOR_SIZE
+ };
+
++/* This is a hard-coded default which promptly gets overridden by a size
++ calculated from the font size. */
+ #define TOGGLE_WIDTH 12
+
+ static guint toggle_cell_signals[LAST_SIGNAL] = { 0 };
+@@ -80,8 +82,9 @@
+ typedef struct _GtkCellRendererTogglePrivate GtkCellRendererTogglePrivate;
+ struct _GtkCellRendererTogglePrivate
+ {
+- gint indicator_size;
+-
++ gint indicator_size; /* This is the real size */
++ gint override_size; /* This is the size set from the indicator-size property */
++ GtkWidget *cached_widget;
+ guint inconsistent : 1;
+ };
+
+@@ -104,6 +107,7 @@
+ GTK_CELL_RENDERER (celltoggle)->ypad = 2;
+
+ priv->indicator_size = TOGGLE_WIDTH;
++ priv->override_size = 0;
+ priv->inconsistent = FALSE;
+ }
+
+@@ -210,7 +214,7 @@
+ g_value_set_boolean (value, celltoggle->radio);
+ break;
+ case PROP_INDICATOR_SIZE:
+- g_value_set_int (value, priv->indicator_size);
++ g_value_set_int (value, priv->override_size ? priv->override_size : priv->indicator_size);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+@@ -245,7 +249,7 @@
+ celltoggle->radio = g_value_get_boolean (value);
+ break;
+ case PROP_INDICATOR_SIZE:
+- priv->indicator_size = g_value_get_int (value);
++ priv->override_size = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+@@ -273,6 +277,27 @@
+ }
+
+ static void
++on_widget_style_set (GtkWidget *widget, GtkStyle *previous, gpointer user_data)
++{
++ GtkCellRendererTogglePrivate *priv = user_data;
++ PangoContext *context;
++ PangoFontMetrics *metrics;
++ int height;
++
++ context = gtk_widget_get_pango_context (widget);
++ metrics = pango_context_get_metrics (context,
++ widget->style->font_desc,
++ pango_context_get_language (context));
++
++ height = pango_font_metrics_get_ascent (metrics) +
++ pango_font_metrics_get_descent (metrics);
++
++ pango_font_metrics_unref (metrics);
++
++ priv->indicator_size = PANGO_PIXELS (height * 0.85);
++}
++
++static void
+ gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+@@ -287,6 +312,20 @@
+
+ priv = GTK_CELL_RENDERER_TOGGLE_GET_PRIVATE (cell);
+
++ if (priv->override_size) {
++ priv->indicator_size = priv->override_size;
++ } else if (priv->cached_widget != widget) {
++ if (priv->cached_widget) {
++ g_object_remove_weak_pointer (widget, &priv->cached_widget);
++ g_signal_handlers_disconnect_by_func (priv->cached_widget, on_widget_style_set, priv);
++ }
++ priv->cached_widget = widget;
++ g_object_add_weak_pointer (widget, &priv->cached_widget);
++ g_signal_connect (widget, "style-set", on_widget_style_set, priv);
++
++ on_widget_style_set (widget, NULL, priv);
++ }
++
+ calc_width = (gint) cell->xpad * 2 + priv->indicator_size;
+ calc_height = (gint) cell->ypad * 2 + priv->indicator_size;
+
diff --git a/packages/gtk+/gtk+-2.10.3/xsettings.patch b/packages/gtk+/gtk+-2.10.14/xsettings.patch
index b63e262d34..b63e262d34 100644
--- a/packages/gtk+/gtk+-2.10.3/xsettings.patch
+++ b/packages/gtk+/gtk+-2.10.14/xsettings.patch
diff --git a/packages/gtk+/gtk+-2.10.3/gtk+-handhelds.patch b/packages/gtk+/gtk+-2.10.3/gtk+-handhelds.patch
deleted file mode 100644
index 20481f059b..0000000000
--- a/packages/gtk+/gtk+-2.10.3/gtk+-handhelds.patch
+++ /dev/null
@@ -1,236 +0,0 @@
---- gtk+-2.4.1/gtk/gtkarrow.c 2004-03-13 09:51:13.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkarrow.c 2004-05-26 14:52:17.000000000 +1000
-@@ -29,7 +29,7 @@
- #include "gtkarrow.h"
- #include "gtkintl.h"
-
--#define MIN_ARROW_SIZE 15
-+#define MIN_ARROW_SIZE 7
-
- enum {
- PROP_0,
-@@ -53,6 +53,8 @@
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-+static void gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition);
-
- GType
- gtk_arrow_get_type (void)
-@@ -111,6 +113,7 @@
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
- widget_class->expose_event = gtk_arrow_expose;
-+ widget_class->size_request = gtk_arrow_size_request;
- }
-
- static void
-@@ -166,13 +169,18 @@
- }
-
- static void
-+gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition)
-+{
-+ requisition->width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-+ requisition->height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
-+}
-+
-+static void
- gtk_arrow_init (GtkArrow *arrow)
- {
- GTK_WIDGET_SET_FLAGS (arrow, GTK_NO_WINDOW);
-
-- GTK_WIDGET (arrow)->requisition.width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-- GTK_WIDGET (arrow)->requisition.height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
--
- arrow->arrow_type = GTK_ARROW_RIGHT;
- arrow->shadow_type = GTK_SHADOW_OUT;
- }
---- gtk+-2.4.1/gtk/gtkcalendar.c 2004-03-06 14:37:26.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkcalendar.c 2004-05-26 14:58:57.000000000 +1000
-@@ -340,6 +340,9 @@
- static void gtk_calendar_select_and_focus_day (GtkCalendar *calendar,
- guint day);
-
-+static void gtk_calendar_do_select_day (GtkCalendar *calendar,
-+ guint day);
-+
- static void gtk_calendar_paint_arrow (GtkWidget *widget,
- guint arrow);
- static void gtk_calendar_paint_day_num (GtkWidget *widget,
-@@ -861,13 +864,13 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
- {
- if (calendar->selected_day < 0)
- calendar->selected_day = calendar->selected_day + 1 + month_length[leap (calendar->year)][calendar->month + 1];
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
- }
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
-@@ -908,10 +911,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -939,10 +942,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -974,10 +977,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -2480,9 +2483,9 @@
- return TRUE;
- }
-
--void
--gtk_calendar_select_day (GtkCalendar *calendar,
-- guint day)
-+static void
-+gtk_calendar_do_select_day (GtkCalendar *calendar,
-+ guint day)
- {
- g_return_if_fail (GTK_IS_CALENDAR (calendar));
- g_return_if_fail (day <= 31);
-@@ -2499,6 +2502,13 @@
- if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
- gtk_calendar_paint_day_num (GTK_WIDGET (calendar), selected_day);
- }
-+}
-+
-+void
-+gtk_calendar_select_day (GtkCalendar *calendar,
-+ guint day)
-+{
-+ gtk_calendar_do_select_day (calendar, day);
-
- calendar->selected_day = day;
-
---- gtk+-2.4.1/gtk/gtkentry.c 2004-04-22 08:08:08.000000000 +1000
-+++ gtk+-2.4.1/gtk/gtkentry.c 2004-05-26 14:52:17.000000000 +1000
-@@ -557,6 +557,15 @@
- 0.0,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("min_width",
-+ _("Minimum width"),
-+ _("Minimum width of the entry field"),
-+ 0,
-+ G_MAXINT,
-+ MIN_ENTRY_WIDTH,
-+ G_PARAM_READABLE));
-+
- signals[POPULATE_POPUP] =
- g_signal_new ("populate_popup",
- G_OBJECT_CLASS_TYPE (gobject_class),
-@@ -1124,7 +1133,7 @@
- {
- GtkEntry *entry = GTK_ENTRY (widget);
- PangoFontMetrics *metrics;
-- gint xborder, yborder;
-+ gint xborder, yborder, min_width;
- PangoContext *context;
-
- gtk_widget_ensure_style (widget);
-@@ -1140,9 +1149,11 @@
-
- xborder += INNER_BORDER;
- yborder += INNER_BORDER;
--
-+
-+ gtk_widget_style_get (widget, "min_width", &min_width, NULL);
-+
- if (entry->width_chars < 0)
-- requisition->width = MIN_ENTRY_WIDTH + xborder * 2;
-+ requisition->width = min_width + xborder * 2;
- else
- {
- gint char_width = pango_font_metrics_get_approximate_char_width (metrics);
---- gtk+-2.4.1/gtk/gtkrange.c 2004-03-06 14:38:08.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkrange.c 2004-05-26 14:52:17.000000000 +1000
-@@ -180,6 +180,7 @@
- static GtkWidgetClass *parent_class = NULL;
- static guint signals[LAST_SIGNAL];
-
-+static GdkAtom recognize_protocols_atom, atom_atom;
-
- GType
- gtk_range_get_type (void)
-@@ -220,6 +221,9 @@
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
-
-+ recognize_protocols_atom = gdk_atom_intern ("RECOGNIZE_PROTOCOLS", FALSE);
-+ atom_atom = gdk_atom_intern ("ATOM", FALSE);
-+
- parent_class = g_type_class_peek_parent (class);
-
- gobject_class->set_property = gtk_range_set_property;
-@@ -815,6 +819,12 @@
- &attributes, attributes_mask);
- gdk_window_set_user_data (range->event_window, range);
-
-+ gdk_property_change (range->event_window,
-+ recognize_protocols_atom,
-+ atom_atom,
-+ 32, GDK_PROP_MODE_REPLACE,
-+ NULL, 0);
-+
- widget->style = gtk_style_attach (widget->style, widget->window);
- }
-
-@@ -1186,7 +1196,7 @@
-
- /* ignore presses when we're already doing something else. */
- if (range->layout->grab_location != MOUSE_OUTSIDE)
-- return FALSE;
-+ return TRUE;
-
- range->layout->mouse_x = event->x;
- range->layout->mouse_y = event->y;
-@@ -1364,7 +1374,7 @@
- return TRUE;
- }
-
-- return FALSE;
-+ return TRUE;
- }
-
- /**
diff --git a/packages/gtk+/gtk+-2.10.3/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.10.3/hardcoded_libtool.patch
deleted file mode 100644
index bdbdb32f97..0000000000
--- a/packages/gtk+/gtk+-2.10.3/hardcoded_libtool.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- gtk+-2.10.0/configure.in.orig 2006-07-07 09:31:34.000000000 +0100
-+++ gtk+-2.10.0/configure.in 2006-07-07 09:32:49.000000000 +0100
-@@ -370,7 +370,7 @@
- AC_MSG_CHECKING([Whether to write dependencies into .pc files])
- case $enable_explicit_deps in
- auto)
-- deplibs_check_method=`(./libtool --config; echo eval echo \\$deplibs_check_method) | sh`
-+ deplibs_check_method=`(./$host_alias-libtool --config; echo eval echo \\$deplibs_check_method) | sh`
- if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -768,7 +768,7 @@
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config"
- pixbuf_deplibs_check=`$pixbuf_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
-@@ -1600,7 +1600,7 @@
- #
- # We are using gmodule-no-export now, but I'm leaving the stripping
- # code in place for now, since pango and atk still require gmodule.
--export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- if test -n "$export_dynamic"; then
- GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"`
- GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"`
diff --git a/packages/gtk+/gtk+-2.10.3/migration.patch b/packages/gtk+/gtk+-2.10.3/migration.patch
deleted file mode 100644
index 4850f85e4f..0000000000
--- a/packages/gtk+/gtk+-2.10.3/migration.patch
+++ /dev/null
@@ -1,615 +0,0 @@
-Index: configure.in
-===================================================================
-RCS file: /cvs/gnome/gtk+/configure.in,v
-retrieving revision 1.419.2.4
-diff -u -r1.419.2.4 configure.in
---- configure.in 8 Feb 2005 21:39:42 -0000 1.419.2.4
-+++ configure.in 27 Feb 2005 13:10:16 -0000
-@@ -1495,6 +1495,16 @@
- GTK_DEP_LIBS="$GDK_EXTRA_LIBS $GTK_DEP_LIBS_FOR_X `$PKG_CONFIG --libs $GDK_PIXBUF_PACKAGES $GDK_PACKAGES $GTK_PACKAGES` $GTK_EXTRA_LIBS $GDK_PIXBUF_EXTRA_LIBS"
- GTK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PIXBUF_PACKAGES $GDK_PACKAGES $GTK_PACKAGES` $GDK_PIXBUF_EXTRA_CFLAGS $GDK_EXTRA_CFLAGS $GTK_EXTRA_CFLAGS"
-
-+AC_ARG_ENABLE(display-migration,
-+ [AC_HELP_STRING([--enable-display-migration],
-+ [include support for GPE_CHANGE_DISPLAY protocol])],
-+ enable_migration=yes, enable_migration=no)
-+if test "$enable_migration" = "yes"; then
-+ AC_DEFINE([ENABLE_MIGRATION], 1, [Define if display migration is enabled])
-+ GTK_DEP_LIBS="$GTK_DEP_LIBS -lgcrypt"
-+fi
-+AM_CONDITIONAL(ENABLE_MIGRATION, test $enable_migration = "yes")
-+
- AC_SUBST(GTK_PACKAGES)
- AC_SUBST(GTK_EXTRA_LIBS)
- AC_SUBST(GTK_EXTRA_CFLAGS)
-Index: gtk/Makefile.am
-===================================================================
-RCS file: /cvs/gnome/gtk+/gtk/Makefile.am,v
-retrieving revision 1.266.2.1
-diff -u -r1.266.2.1 Makefile.am
---- gtk/Makefile.am 13 Jan 2005 15:18:21 -0000 1.266.2.1
-+++ gtk/Makefile.am 27 Feb 2005 13:10:17 -0000
-@@ -520,6 +520,10 @@
- gtkwindow.c \
- xembed.h
-
-+if ENABLE_MIGRATION
-+gtk_c_sources += gtkmigration.c
-+endif
-+
- if OS_UNIX
- gtk_private_h_sources += gtkfilesystemunix.h
- gtk_c_sources += gtkfilesystemunix.c
-Index: gtk/gtkmain.c
-===================================================================
-RCS file: /cvs/gnome/gtk+/gtk/gtkmain.c,v
-retrieving revision 1.255
-diff -u -r1.255 gtkmain.c
---- gtk/gtkmain.c 27 Dec 2004 05:25:15 -0000 1.255
-+++ gtk/gtkmain.c 27 Feb 2005 13:10:19 -0000
-@@ -491,6 +491,10 @@
- _gtk_accel_map_init ();
- _gtk_rc_init ();
-
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_init ();
-+#endif
-+
- /* Set the 'initialized' flag.
- */
- gtk_initialized = TRUE;
---- /dev/null 2005-02-20 01:07:50.714416160 +0000
-+++ gtk/gtkmigration.c 2005-02-27 15:05:04.052757352 +0000
-@@ -0,0 +1,529 @@
-+/*
-+ * Copyright (C) 2003, 2005 Philip Blundell <philb@gnu.org>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version.
-+ */
-+
-+#include <stdlib.h>
-+#include <ctype.h>
-+#include <libintl.h>
-+#include <string.h>
-+#include <assert.h>
-+
-+#include <X11/X.h>
-+#include <X11/Xlib.h>
-+#include <X11/Xatom.h>
-+
-+#include <gcrypt.h>
-+
-+#include "gtk.h"
-+#include "gdk.h"
-+#include "x11/gdkx.h"
-+
-+#define _(x) gettext(x)
-+
-+static GdkAtom string_gdkatom, display_change_gdkatom;
-+static GdkAtom rsa_challenge_gdkatom;
-+
-+#define DISPLAY_CHANGE_SUCCESS 0
-+#define DISPLAY_CHANGE_UNABLE_TO_CONNECT 1
-+#define DISPLAY_CHANGE_NO_SUCH_SCREEN 2
-+#define DISPLAY_CHANGE_AUTHENTICATION_BAD 3
-+#define DISPLAY_CHANGE_INDETERMINATE_ERROR 4
-+
-+static gboolean no_auth;
-+
-+static GSList *all_widgets;
-+
-+static gboolean gtk_migration_initialised;
-+
-+#define CHALLENGE_LEN 64
-+
-+gchar *gtk_migration_auth_challenge_string;
-+
-+static unsigned char challenge_bytes[CHALLENGE_LEN];
-+static unsigned long challenge_seq;
-+
-+#define hexbyte(x) ((x) >= 10 ? (x) + 'a' - 10 : (x) + '0')
-+
-+struct rsa_key
-+{
-+ gcry_mpi_t n, e, d, p, q, u;
-+};
-+
-+static gcry_mpi_t
-+mpi_from_sexp (gcry_sexp_t r, char *tag)
-+{
-+ gcry_sexp_t s = gcry_sexp_find_token (r, tag, 0);
-+ return gcry_sexp_nth_mpi (s, 1, GCRYMPI_FMT_USG);
-+}
-+
-+static char *
-+hex_from_mpi (gcry_mpi_t m)
-+{
-+ char *buf;
-+ gcry_mpi_aprint (GCRYMPI_FMT_HEX, (void *)&buf, NULL, m);
-+ return buf;
-+}
-+
-+static void
-+gtk_migration_crypt_create_hash (char *display, char *challenge, size_t len, char *result)
-+{
-+ size_t dlen = strlen (display);
-+ gchar *buf = g_malloc (dlen + 1 + len);
-+ strcpy (buf, display);
-+ memcpy (buf + dlen + 1, challenge, len);
-+ gcry_md_hash_buffer (GCRY_MD_SHA1, result, buf, len + dlen + 1);
-+ g_free (buf);
-+}
-+
-+static int
-+do_encode_md (const unsigned char *digest, size_t digestlen, int algo,
-+ unsigned int nbits, gcry_mpi_t *r_val)
-+{
-+ int nframe = (nbits+7) / 8;
-+ unsigned char *frame;
-+ int i, n;
-+ unsigned char asn[100];
-+ size_t asnlen;
-+
-+ asnlen = sizeof(asn);
-+ if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
-+ return -1;
-+
-+ if (digestlen + asnlen + 4 > nframe )
-+ return -1;
-+
-+ /* We encode the MD in this way:
-+ *
-+ * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes)
-+ *
-+ * PAD consists of FF bytes.
-+ */
-+ frame = g_malloc (nframe);
-+ n = 0;
-+ frame[n++] = 0;
-+ frame[n++] = 1; /* block type */
-+ i = nframe - digestlen - asnlen -3 ;
-+ assert ( i > 1 );
-+ memset ( frame+n, 0xff, i ); n += i;
-+ frame[n++] = 0;
-+ memcpy ( frame+n, asn, asnlen ); n += asnlen;
-+ memcpy ( frame+n, digest, digestlen ); n += digestlen;
-+ assert ( n == nframe );
-+
-+ gcry_mpi_scan (r_val, GCRYMPI_FMT_USG, frame, nframe, &nframe);
-+ g_free (frame);
-+ return 0;
-+}
-+
-+static gboolean
-+gtk_migration_crypt_check_signature (struct rsa_key *k, char *hash, char *sigbuf)
-+{
-+ gcry_mpi_t mpi, mpi2;
-+ gcry_sexp_t data, sig, key;
-+ int rc;
-+
-+ do_encode_md (hash, 20, GCRY_MD_SHA1, 1024, &mpi);
-+
-+ gcry_sexp_build (&data, NULL, "(data (value %m))", mpi);
-+
-+ gcry_mpi_release (mpi);
-+
-+ gcry_sexp_build (&key, NULL, "(public-key (rsa (n %m) (e %m)))", k->n, k->e);
-+
-+ if (gcry_mpi_scan (&mpi2, GCRYMPI_FMT_HEX, sigbuf, 0, NULL))
-+ {
-+ gcry_sexp_release (data);
-+ return FALSE;
-+ }
-+
-+ gcry_sexp_build (&sig, NULL, "(sig-val (rsa (s %m)))", mpi2);
-+
-+ rc = gcry_pk_verify (sig, data, key);
-+
-+ gcry_sexp_release (data);
-+ gcry_sexp_release (key);
-+ gcry_sexp_release (sig);
-+ gcry_mpi_release (mpi2);
-+
-+ if (rc)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static void
-+gtk_migration_auth_update_challenge (void)
-+{
-+ int i;
-+ unsigned char *p;
-+
-+ if (gtk_migration_auth_challenge_string == NULL)
-+ gtk_migration_auth_challenge_string = g_malloc ((CHALLENGE_LEN * 2) + 9);
-+
-+ p = gtk_migration_auth_challenge_string;
-+
-+ for (i = 0; i < CHALLENGE_LEN; i++)
-+ {
-+ *p++ = hexbyte (challenge_bytes[i] >> 4);
-+ *p++ = hexbyte (challenge_bytes[i] & 15);
-+ }
-+
-+ sprintf (p, "%08lx", challenge_seq++);
-+}
-+
-+static void
-+gtk_migration_auth_generate_challenge (void)
-+{
-+ gcry_randomize (challenge_bytes, sizeof (challenge_bytes), GCRY_STRONG_RANDOM);
-+ gtk_migration_auth_update_challenge ();
-+}
-+
-+static struct rsa_key *
-+parse_pubkey (char *s)
-+{
-+ struct rsa_key *r;
-+ gcry_mpi_t n, e;
-+ gchar *sp;
-+
-+ sp = strtok (s, " \n");
-+ gcry_mpi_scan (&e, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+ sp = strtok (NULL, " \n");
-+ gcry_mpi_scan (&n, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+
-+ r = g_malloc0 (sizeof (struct rsa_key));
-+ r->e = e;
-+ r->n = n;
-+ return r;
-+}
-+
-+static struct rsa_key *
-+lookup_pubkey (u_int32_t id)
-+{
-+ const gchar *home_dir = g_get_home_dir ();
-+ gchar *filename = g_strdup_printf ("%s/.gpe/migrate/public", home_dir);
-+ FILE *fp = fopen (filename, "r");
-+ struct rsa_key *r = NULL;
-+
-+ if (fp)
-+ {
-+ while (!feof (fp))
-+ {
-+ char buffer[4096];
-+ if (fgets (buffer, 4096, fp))
-+ {
-+ char *p;
-+ u_int32_t this_id = strtoul (buffer, &p, 16);
-+ if (p != buffer && *p == ' ')
-+ {
-+#ifdef DEBUG
-+ fprintf (stderr, "found id %x\n", this_id);
-+#endif
-+ if (this_id == id)
-+ {
-+ r = parse_pubkey (++p);
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ fclose (fp);
-+ }
-+
-+ g_free (filename);
-+ return r;
-+}
-+
-+static void
-+free_pubkey (struct rsa_key *k)
-+{
-+ gcry_mpi_release (k->n);
-+ gcry_mpi_release (k->e);
-+
-+ g_free (k);
-+}
-+
-+static gboolean
-+gtk_migration_auth_validate_request (char *display, char *data)
-+{
-+ u_int32_t key_id;
-+ char *ep;
-+ char *p;
-+ struct rsa_key *k;
-+ char hash[20];
-+ gboolean rc;
-+
-+ p = strchr (data, ' ');
-+ if (p == NULL)
-+ return FALSE;
-+ *p++ = 0;
-+
-+ key_id = strtoul (data, &ep, 16);
-+ if (*ep)
-+ return FALSE;
-+
-+ k = lookup_pubkey (key_id);
-+ if (k == NULL)
-+ return FALSE;
-+
-+ gtk_migration_crypt_create_hash (display, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string), hash);
-+
-+ rc = gtk_migration_crypt_check_signature (k, hash, p);
-+
-+ free_pubkey (k);
-+
-+ return rc;
-+}
-+
-+static int
-+do_change_display (GtkWidget *w, char *display_name)
-+{
-+ GdkDisplay *newdisplay;
-+ guint screen_nr = 1;
-+ guint i;
-+
-+ if (display_name[0] == 0)
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+
-+ i = strlen (display_name) - 1;
-+ while (i > 0 && isdigit (display_name[i]))
-+ i--;
-+
-+ if (display_name[i] == '.')
-+ {
-+ screen_nr = atoi (display_name + i + 1);
-+ display_name[i] = 0;
-+ }
-+
-+ newdisplay = gdk_display_open (display_name);
-+ if (newdisplay)
-+ {
-+ GdkScreen *screen = gdk_display_get_screen (newdisplay, screen_nr);
-+ if (screen)
-+ {
-+ gtk_window_set_screen (GTK_WINDOW (w), screen);
-+ gdk_display_manager_set_default_display (gdk_display_manager_get (),
-+ newdisplay);
-+ return DISPLAY_CHANGE_SUCCESS;
-+ }
-+ else
-+ return DISPLAY_CHANGE_NO_SUCH_SCREEN;
-+ }
-+
-+ return DISPLAY_CHANGE_UNABLE_TO_CONNECT;
-+}
-+
-+static void
-+set_challenge_on_window (GdkWindow *window)
-+{
-+ gdk_property_change (window, rsa_challenge_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string));
-+}
-+
-+static void
-+update_challenge_on_windows (void)
-+{
-+ GSList *i;
-+
-+ gtk_migration_auth_update_challenge ();
-+
-+ for (i = all_widgets; i; i = i->next)
-+ {
-+ GtkWidget *w = GTK_WIDGET (i->data);
-+ if (w->window)
-+ set_challenge_on_window (w->window);
-+ }
-+}
-+
-+static void
-+reset_state (GdkWindow *window)
-+{
-+ gdk_property_change (window, display_change_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, NULL, 0);
-+}
-+
-+static void
-+generate_response (GdkDisplay *gdisplay, Display *dpy, Window window, int code)
-+{
-+ XClientMessageEvent ev;
-+ Atom atom = gdk_x11_atom_to_xatom_for_display (gdisplay,
-+ display_change_gdkatom);
-+
-+ memset (&ev, 0, sizeof (ev));
-+
-+ ev.type = ClientMessage;
-+ ev.window = window;
-+ ev.message_type = atom;
-+ ev.format = 32;
-+
-+ ev.data.l[0] = window;
-+ ev.data.l[1] = code;
-+
-+ XSendEvent (dpy, DefaultRootWindow (dpy), False, SubstructureNotifyMask, (XEvent *)&ev);
-+}
-+
-+static int
-+handle_request (GdkWindow *gwindow, char *prop)
-+{
-+ GtkWidget *widget;
-+ char *target, *auth_method, *auth_data;
-+ char *p;
-+
-+ target = prop;
-+ auth_method = "NULL";
-+ auth_data = NULL;
-+
-+ p = strchr (prop, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_method = ++p;
-+
-+ p = strchr (p, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_data = ++p;
-+ }
-+ }
-+
-+ if (no_auth == FALSE)
-+ {
-+ if (!strcasecmp (auth_method, "null"))
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ else if (!strcasecmp (auth_method, "rsa-sig"))
-+ {
-+ if (gtk_migration_auth_validate_request (target, auth_data) == FALSE)
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+ else
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+
-+ gdk_window_get_user_data (gwindow, (gpointer*) &widget);
-+
-+ if (widget)
-+ return do_change_display (widget, target);
-+
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+}
-+
-+static GdkFilterReturn
-+filter_func (GdkXEvent *xevp, GdkEvent *ev, gpointer p)
-+{
-+ XPropertyEvent *xev = (XPropertyEvent *)xevp;
-+
-+ if (xev->type == PropertyNotify)
-+ {
-+ GdkDisplay *gdisplay;
-+ Atom atom;
-+
-+ gdisplay = gdk_x11_lookup_xdisplay (xev->display);
-+ if (gdisplay)
-+ {
-+ atom = gdk_x11_atom_to_xatom_for_display (gdisplay, display_change_gdkatom);
-+
-+ if (xev->atom == atom)
-+ {
-+ GdkWindow *gwindow;
-+
-+ gwindow = gdk_window_lookup_for_display (gdisplay, xev->window);
-+
-+ if (gwindow)
-+ {
-+ GdkAtom actual_type;
-+ gint actual_format;
-+ gint actual_length;
-+ unsigned char *prop = NULL;
-+
-+ if (gdk_property_get (gwindow, display_change_gdkatom, string_gdkatom,
-+ 0, G_MAXLONG, FALSE, &actual_type, &actual_format,
-+ &actual_length, &prop))
-+ {
-+ if (actual_length != 0)
-+ {
-+ if (actual_type == string_gdkatom && actual_length > 8)
-+ {
-+ gchar *buf = g_malloc (actual_length + 1);
-+ int rc;
-+
-+ memcpy (buf, prop, actual_length);
-+ buf[actual_length] = 0;
-+
-+ rc = handle_request (gwindow, buf);
-+
-+ g_free (buf);
-+ generate_response (gdisplay, xev->display, xev->window, rc);
-+
-+ if (rc == DISPLAY_CHANGE_SUCCESS)
-+ update_challenge_on_windows ();
-+ }
-+
-+ reset_state (gwindow);
-+ }
-+ }
-+
-+ if (prop)
-+ g_free (prop);
-+ }
-+ }
-+
-+ return GDK_FILTER_REMOVE;
-+ }
-+ }
-+
-+ return GDK_FILTER_CONTINUE;
-+}
-+
-+static void
-+unrealize_window (GtkWidget *w)
-+{
-+ all_widgets = g_slist_remove (all_widgets, w);
-+}
-+
-+void
-+gtk_migration_mark_window (GtkWidget *w)
-+{
-+ if (! gtk_migration_initialised)
-+ {
-+ g_warning ("gtk_migration not initialised yet");
-+ return;
-+ }
-+
-+ if (GTK_WIDGET_REALIZED (w))
-+ {
-+ GdkWindow *window = w->window;
-+
-+ gdk_window_add_filter (window, filter_func, NULL);
-+
-+ reset_state (window);
-+ set_challenge_on_window (window);
-+
-+ all_widgets = g_slist_append (all_widgets, w);
-+
-+ g_signal_connect (G_OBJECT (w), "unrealize", G_CALLBACK (unrealize_window), NULL);
-+ }
-+ else
-+ g_signal_connect (G_OBJECT (w), "realize", G_CALLBACK (gtk_migration_mark_window), NULL);
-+}
-+
-+void
-+gtk_migration_init (void)
-+{
-+ if (getenv ("GPE_DISPLAY_MIGRATION_NO_AUTH") != NULL)
-+ no_auth = TRUE;
-+
-+ string_gdkatom = gdk_atom_intern ("STRING", FALSE);
-+ display_change_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE", FALSE);
-+ rsa_challenge_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE_RSA_CHALLENGE", FALSE);
-+
-+ gtk_migration_auth_generate_challenge ();
-+
-+ gtk_migration_initialised = TRUE;
-+}
---- gtk/gtkwindow.c~ 2006-07-05 13:07:08.000000000 +0200
-+++ gtk/gtkwindow.c 2006-07-05 13:07:08.000000000 +0200
-@@ -50,6 +50,9 @@
- #include "x11/gdkx.h"
- #endif
-
-+extern void gtk_migration_mark_window (GtkWidget *w);
-+
-+
- enum {
- SET_FOCUS,
- FRAME_EVENT,
-@@ -823,6 +826,10 @@
-
- g_signal_connect (window->screen, "composited_changed",
- G_CALLBACK (gtk_window_on_composited_changed), window);
-+
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_mark_window (window);
-+#endif
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.3/run-iconcache.patch b/packages/gtk+/gtk+-2.10.3/run-iconcache.patch
deleted file mode 100644
index f0bb6ba842..0000000000
--- a/packages/gtk+/gtk+-2.10.3/run-iconcache.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- gtk+-2.10.0/gtk/Makefile.am~ 2006-07-05 16:49:16.000000000 +0200
-+++ gtk+-2.10.0/gtk/Makefile.am 2006-07-05 16:49:16.000000000 +0200
-@@ -1088,11 +1088,11 @@
- done \
- && touch stamp-icons
-
--gtkbuiltincache.h: @REBUILD@ stamp-icons
-- $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache
-- GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders \
-- ./gtk-update-icon-cache --force --ignore-theme-index \
-- --source builtin_icons stock-icons > gtkbuiltincache.h
-+#gtkbuiltincache.h: @REBUILD@ stamp-icons
-+# $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache
-+# GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders \
-+# ./gtk-update-icon-cache --force --ignore-theme-index \
-+# --source builtin_icons stock-icons > gtkbuiltincache.h
-
- EXTRA_DIST += \
- $(STOCK_ICONS) \
diff --git a/packages/gtk+/gtk+-2.10.3/single-click.patch b/packages/gtk+/gtk+-2.10.3/single-click.patch
deleted file mode 100644
index 3bb208d4d6..0000000000
--- a/packages/gtk+/gtk+-2.10.3/single-click.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-diff -urNd ../gtk+-2.6.3-r0.old/gtk+-2.6.3/gtk/gtkcalendar.c gtk+-2.6.3/gtk/gtkcalendar.c
---- ../gtk+-2.6.3-r0.old/gtk+-2.6.3/gtk/gtkcalendar.c 2005-04-06 16:57:04 +01:00
-+++ gtk+-2.6.3/gtk/gtkcalendar.c 2005-04-06 20:05:18 +01:00
-@@ -1023,9 +1023,11 @@
- }
-
- gtk_calendar_select_and_focus_day (calendar, day);
-- }
-+
-+ // This change causes the calendar to disappear after choosing a day
-+/* }
- else if (event->type == GDK_2BUTTON_PRESS)
-- {
-+ {*/
- private_data->in_drag = 0;
- if (day_month == MONTH_CURRENT)
- g_signal_emit (calendar,
-diff -urNd ../gtk+-2.6.3-r0.old/gtk+-2.6.3/gtk/gtkfilesel.c gtk+-2.6.3/gtk/gtkfilesel.c
---- ../gtk+-2.6.3-r0.old/gtk+-2.6.3/gtk/gtkfilesel.c 2005-04-06 16:57:07 +01:00
-+++ gtk+-2.6.3/gtk/gtkfilesel.c 2005-04-07 13:40:32 +01:00
-@@ -2468,6 +2468,33 @@
- if (fs->last_selected != NULL)
- g_free (fs->last_selected);
-
-+ // Single-click directory entry
-+ if (new_names->len == 1)
-+ {
-+ GtkTreeView *tree_view;
-+ GtkTreeModel *model;
-+ GtkTreePath *path;
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ tree_view = gtk_tree_selection_get_tree_view (selection);
-+
-+ if (gtk_tree_selection_get_selected (selection, &model, &iter))
-+ {
-+ path = gtk_tree_model_get_path (model, &iter);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (!is_file)
-+ {
-+ gtk_file_selection_dir_activate (tree_view, path,
-+ gtk_tree_view_get_column (tree_view, DIR_COLUMN),
-+ user_data);
-+ }
-+
-+ gtk_tree_path_free (path);
-+ }
-+ }
-+
- fs->last_selected = g_strdup (g_ptr_array_index (new_names, index));
- filename = get_real_filename (fs->last_selected, FALSE);
-
diff --git a/packages/gtk+/gtk+-2.10.3/spinbutton.patch b/packages/gtk+/gtk+-2.10.3/spinbutton.patch
deleted file mode 100644
index 8ad7507af0..0000000000
--- a/packages/gtk+/gtk+-2.10.3/spinbutton.patch
+++ /dev/null
@@ -1,128 +0,0 @@
---- gtk+-2.4.3/gtk/gtkspinbutton.c.old 2004-04-22 14:49:27.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtkspinbutton.c 2004-06-30 21:48:18.000000000 +0100
-@@ -733,7 +733,7 @@
-
- spin = GTK_SPIN_BUTTON (widget);
- arrow_size = spin_button_get_arrow_size (spin);
-- panel_width = arrow_size + 2 * widget->style->xthickness;
-+ panel_width = (2 * arrow_size) + 4 * widget->style->xthickness;
-
- widget->allocation = *allocation;
-
-@@ -866,19 +866,16 @@
- {
- width = spin_button_get_arrow_size (spin_button) + 2 * widget->style->xthickness;
-
-+ y = widget->style->ythickness;
-+ height = widget->requisition.height - (2 * y);
-+
- if (arrow_type == GTK_ARROW_UP)
- {
- x = 0;
-- y = 0;
--
-- height = widget->requisition.height / 2;
- }
- else
- {
-- x = 0;
-- y = widget->requisition.height / 2;
--
-- height = (widget->requisition.height + 1) / 2;
-+ x = width;
- }
-
- if (spin_button_at_limit (spin_button, arrow_type))
-@@ -908,32 +905,17 @@
- shadow_type = GTK_SHADOW_OUT;
- }
- }
--
-+
- gtk_paint_box (widget->style, spin_button->panel,
- state_type, shadow_type,
- NULL, widget,
-- (arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
-+ NULL,
- x, y, width, height);
-
- height = widget->requisition.height;
-
-- if (arrow_type == GTK_ARROW_DOWN)
-- {
-- y = height / 2;
-- height = height - y - 2;
-- }
-- else
-- {
-- y = 2;
-- height = height / 2 - 2;
-- }
--
- width -= 3;
--
-- if (widget && gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-- x = 2;
-- else
-- x = 1;
-+ height -= 3;
-
- w = width / 2;
- w -= w % 2 - 1; /* force odd */
-@@ -1108,7 +1090,7 @@
- if (GTK_ENTRY (widget)->editable)
- gtk_spin_button_update (spin);
-
-- if (event->y <= widget->requisition.height / 2)
-+ if (event->x <= (spin_button_get_arrow_size (spin) + widget->style->xthickness))
- {
- if (event->button == 1)
- start_spinning (spin, GTK_ARROW_UP, spin->adjustment->step_increment);
-@@ -1143,44 +1125,11 @@
-
- arrow_size = spin_button_get_arrow_size (spin);
-
-- if (event->button == spin->button)
-- {
-- int click_child = spin->click_child;
-+ gtk_spin_button_stop_spinning (spin);
-
-- gtk_spin_button_stop_spinning (spin);
--
-- if (event->button == 3)
-- {
-- if (event->y >= 0 && event->x >= 0 &&
-- event->y <= widget->requisition.height &&
-- event->x <= arrow_size + 2 * widget->style->xthickness)
-- {
-- if (click_child == GTK_ARROW_UP &&
-- event->y <= widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->upper - spin->adjustment->value;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, diff);
-- }
-- else if (click_child == GTK_ARROW_DOWN &&
-- event->y > widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->value - spin->adjustment->lower;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, -diff);
-- }
-- }
-- }
-- spin_button_redraw (spin);
-+ spin_button_redraw (spin);
-
-- return TRUE;
-- }
-- else
-- return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event);
-+ return TRUE;
- }
-
- static gint
diff --git a/packages/gtk+/gtk+-2.10.6/automake-lossage.patch b/packages/gtk+/gtk+-2.10.6/automake-lossage.patch
deleted file mode 100644
index 0d423ddbb9..0000000000
--- a/packages/gtk+/gtk+-2.10.6/automake-lossage.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- gtk+-2.4.1/docs/tutorial/Makefile.am~ 2003-05-06 22:54:20.000000000 +0100
-+++ gtk+-2.4.1/docs/tutorial/Makefile.am 2004-05-08 12:31:41.000000000 +0100
-@@ -52,21 +52,5 @@
-
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
--else
--html:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--dist-hook:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "*** DISTRIBUTION IS INCOMPLETE"
-- echo "***"
- endif
-
diff --git a/packages/gtk+/gtk+-2.10.6/disable-print.patch b/packages/gtk+/gtk+-2.10.6/disable-print.patch
deleted file mode 100644
index 1067773f12..0000000000
--- a/packages/gtk+/gtk+-2.10.6/disable-print.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- gtk+-2.10.0/configure.in~ 2006-07-05 18:11:44.000000000 +0200
-+++ gtk+-2.10.0/configure.in 2006-07-05 18:11:44.000000000 +0200
-@@ -1539,26 +1539,27 @@
- # Printing system checks
- ################################################################
-
--AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
--if test "x$CUPS_CONFIG" != "xno"; then
-- CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-- CUPS_LIBS=`cups-config --libs`
--
-- CUPS_API_VERSION=`cups-config --api-version`
-- CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-- CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
--
-- if test $CUPS_API_MAJOR -gt 1 -o \
-- $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-- AC_DEFINE(HAVE_CUPS_API_1_2)
-- fi
--
-- AC_SUBST(CUPS_API_MAJOR)
-- AC_SUBST(CUPS_API_MINOR)
-- AC_SUBST(CUPS_CFLAGS)
-- AC_SUBST(CUPS_LIBS)
--fi
--AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+#AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
-+#if test "x$CUPS_CONFIG" != "xno"; then
-+# CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-+# CUPS_LIBS=`cups-config --libs`
-+#
-+# CUPS_API_VERSION=`cups-config --api-version`
-+# CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-+# CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
-+#
-+# if test $CUPS_API_MAJOR -gt 1 -o \
-+# $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-+# AC_DEFINE(HAVE_CUPS_API_1_2)
-+# fi
-+#
-+# AC_SUBST(CUPS_API_MAJOR)
-+# AC_SUBST(CUPS_API_MINOR)
-+# AC_SUBST(CUPS_CFLAGS)
-+# AC_SUBST(CUPS_LIBS)
-+#fi
-+#AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+AM_CONDITIONAL(HAVE_CUPS,false)
-
- gtk_save_cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS"
diff --git a/packages/gtk+/gtk+-2.10.6/disable-tooltips.patch b/packages/gtk+/gtk+-2.10.6/disable-tooltips.patch
deleted file mode 100644
index d71d839c3c..0000000000
--- a/packages/gtk+/gtk+-2.10.6/disable-tooltips.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.4.3/gtk/gtktooltips.c.old 2004-07-04 18:52:04.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtktooltips.c 2004-07-04 18:52:08.000000000 +0100
-@@ -118,7 +118,7 @@
- tooltips->tips_data_list = NULL;
-
- tooltips->delay = DEFAULT_DELAY;
-- tooltips->enabled = TRUE;
-+ tooltips->enabled = FALSE;
- tooltips->timer_tag = 0;
- tooltips->use_sticky_delay = FALSE;
- tooltips->last_popdown.tv_sec = -1;
diff --git a/packages/gtk+/gtk+-2.10.6/gtklabel-resize-patch b/packages/gtk+/gtk+-2.10.6/gtklabel-resize-patch
deleted file mode 100644
index df29656343..0000000000
--- a/packages/gtk+/gtk+-2.10.6/gtklabel-resize-patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtklabel.c 2004-07-05 13:33:57.000000000 +0100
-@@ -1623,6 +1623,7 @@
-
- /* We have to clear the layout, fonts etc. may have changed */
- gtk_label_clear_layout (label);
-+ gtk_widget_queue_resize (GTK_WIDGET (label));
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.6/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.10.6/hardcoded_libtool.patch
deleted file mode 100644
index bdbdb32f97..0000000000
--- a/packages/gtk+/gtk+-2.10.6/hardcoded_libtool.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- gtk+-2.10.0/configure.in.orig 2006-07-07 09:31:34.000000000 +0100
-+++ gtk+-2.10.0/configure.in 2006-07-07 09:32:49.000000000 +0100
-@@ -370,7 +370,7 @@
- AC_MSG_CHECKING([Whether to write dependencies into .pc files])
- case $enable_explicit_deps in
- auto)
-- deplibs_check_method=`(./libtool --config; echo eval echo \\$deplibs_check_method) | sh`
-+ deplibs_check_method=`(./$host_alias-libtool --config; echo eval echo \\$deplibs_check_method) | sh`
- if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -768,7 +768,7 @@
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config"
- pixbuf_deplibs_check=`$pixbuf_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
-@@ -1600,7 +1600,7 @@
- #
- # We are using gmodule-no-export now, but I'm leaving the stripping
- # code in place for now, since pango and atk still require gmodule.
--export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- if test -n "$export_dynamic"; then
- GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"`
- GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"`
diff --git a/packages/gtk+/gtk+-2.10.6/menu-deactivate.patch b/packages/gtk+/gtk+-2.10.6/menu-deactivate.patch
deleted file mode 100644
index cfb8849e9f..0000000000
--- a/packages/gtk+/gtk+-2.10.6/menu-deactivate.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- gtk+-2.10.0/gtk/gtkmenushell.c.orig 2006-07-05 17:17:34.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkmenushell.c 2006-07-05 17:19:01.000000000 +0200
-@@ -42,7 +42,7 @@
- #include "gtkintl.h"
- #include "gtkalias.h"
-
--#define MENU_SHELL_TIMEOUT 500
-+#define MENU_SHELL_TIMEOUT 2000
-
- #define PACK_DIRECTION(m) \
- (GTK_IS_MENU_BAR (m) \
-@@ -203,6 +203,8 @@
-
- G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER)
-
-+static int last_crossing_time;
-+
- static void
- gtk_menu_shell_class_init (GtkMenuShellClass *klass)
- {
-@@ -517,6 +519,7 @@
- gtk_grab_add (GTK_WIDGET (menu_shell));
- menu_shell->have_grab = TRUE;
- menu_shell->active = TRUE;
-+ last_crossing_time = 0;
- }
- }
-
-@@ -669,6 +672,13 @@
- menu_shell->activate_time = 0;
- deactivate = FALSE;
- }
-+
-+ if (last_crossing_time != 0
-+ && ((event->time - last_crossing_time) < 500))
-+ {
-+ last_crossing_time = 0;
-+ deactivate = FALSE;
-+ }
-
- if (deactivate)
- {
-@@ -716,6 +726,8 @@
- {
- menu_item = gtk_get_event_widget ((GdkEvent*) event);
-
-+ last_crossing_time = event->time;
-+
- if (!menu_item ||
- (GTK_IS_MENU_ITEM (menu_item) &&
- !_gtk_menu_item_is_selectable (menu_item)))
diff --git a/packages/gtk+/gtk+-2.10.6/no-demos.patch b/packages/gtk+/gtk+-2.10.6/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/packages/gtk+/gtk+-2.10.6/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.10.6/no-xwc.patch b/packages/gtk+/gtk+-2.10.6/no-xwc.patch
deleted file mode 100644
index affb4a303e..0000000000
--- a/packages/gtk+/gtk+-2.10.6/no-xwc.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2004-11-30 14:57:14 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2005-01-02 15:38:06 +00:00
-@@ -576,12 +576,14 @@
- GDK_GC_GET_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
- }
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
- XmbDrawString (xdisplay, impl->xid,
- fontset, GDK_GC_GET_XGC (gc), x, y, text, text_length);
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-@@ -613,6 +615,7 @@
- GDK_GC_GET_XGC (gc), x, y, text_8bit, text_length);
- g_free (text_8bit);
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- if (sizeof(GdkWChar) == sizeof(wchar_t))
-@@ -633,6 +636,7 @@
- g_free (text_wchar);
- }
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c gtk+-2.6.0/gdk/x11/gdkfont-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2004-08-26 01:23:46 +01:00
-+++ gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2005-01-02 15:45:39 +00:00
-@@ -525,10 +525,12 @@
- width = XTextWidth16 (xfont, (XChar2b *) text, text_length / 2);
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, text, text_length);
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -578,6 +580,7 @@
- width = 0;
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- if (sizeof(GdkWChar) == sizeof(wchar_t))
- {
-@@ -595,6 +598,7 @@
- g_free (text_wchar);
- }
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -667,6 +671,7 @@
- if (descent)
- *descent = overall.descent;
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &logical);
-@@ -681,6 +686,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-@@ -753,6 +759,7 @@
- *descent = overall.descent;
- break;
- }
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
-
-@@ -780,6 +787,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c gtk+-2.6.0/gdk/x11/gdkim-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c 2004-11-17 00:55:10 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkim-x11.c 2005-01-02 15:42:04 +00:00
-@@ -48,6 +48,7 @@
- void
- _gdk_x11_initialize_locale (void)
- {
-+#ifdef HAVE_XWC
- wchar_t result;
- gchar *current_locale;
- static char *last_locale = NULL;
-@@ -93,7 +94,8 @@
- GDK_NOTE (XIM,
- g_message ("%s multi-byte string functions.",
- gdk_use_mb ? "Using" : "Not using"));
--
-+#endif
-+
- return;
- }
-
-@@ -136,6 +138,7 @@
- {
- gchar *mbstr;
-
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -178,6 +181,7 @@
- XFree (tpr.value);
- }
- else
-+#endif
- {
- gint length = 0;
- gint i;
-@@ -210,6 +214,7 @@
- gint
- gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
- {
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -242,6 +247,7 @@
- return len_cpy;
- }
- else
-+#endif
- {
- gint i;
-
diff --git a/packages/gtk+/gtk+-2.10.6/pangoxft2.10.6.diff b/packages/gtk+/gtk+-2.10.6/pangoxft2.10.6.diff
deleted file mode 100644
index 63828cec63..0000000000
--- a/packages/gtk+/gtk+-2.10.6/pangoxft2.10.6.diff
+++ /dev/null
@@ -1,2456 +0,0 @@
-http://mail.gnome.org/archives/performance-list/2006-October/msg00063.html
-
-From: Xan Lópe
-To: ext Matt Hoosier
-Cc: performance-list gnome org
-Subject: Re: [patch] Remove pangocairo from Gtk+ 2.8.20
-Date: Mon, 30 Oct 2006 14:31:56 +0200
-Hi,
-
-I've upgraded your patch against GTK+ 2.10.6, and we are getting great
-performance figures compared to GTK+ 2.10.6 with pangocairo too
-(basically at the level of GTK+ 2.6.10 again). Right now I'm working on
-a python/cairo script to get some nice graphics from a torture test
-session with several GTK+s, hope to get it ready soon.
-
-Index: gtk+-2.10.6/configure.in
-===================================================================
---- gtk+-2.10.6.orig/configure.in 2006-10-30 12:59:28.000000000 +0000
-+++ gtk+-2.10.6/configure.in 2006-10-30 12:59:30.000000000 +0000
-@@ -1435,7 +1435,7 @@
- if test "x$gdktarget" = "xwin32"; then
- PANGO_PACKAGES="pangowin32 pangocairo"
- else
-- PANGO_PACKAGES="pango pangocairo"
-+ PANGO_PACKAGES="pango pangocairo pangoxft"
- fi
-
- AC_MSG_CHECKING(Pango flags)
-Index: gtk+-2.10.6/gdk/gdkaliasdef.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkaliasdef.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkaliasdef.c 2006-10-30 12:59:30.000000000 +0000
-@@ -1799,9 +1799,6 @@
- #undef gdk_pango_context_get
- extern __typeof (gdk_pango_context_get) gdk_pango_context_get __attribute((alias("IA__gdk_pango_context_get"), visibility("default")));
-
--#undef gdk_pango_context_get_for_screen
--extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
--
- #ifndef GDK_DISABLE_DEPRECATED
- #undef gdk_pango_context_set_colormap
- extern __typeof (gdk_pango_context_set_colormap) gdk_pango_context_set_colormap __attribute((alias("IA__gdk_pango_context_set_colormap"), visibility("default")));
-@@ -1836,6 +1833,13 @@
-
- #endif
- #endif
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+#undef gdk_pango_context_get_for_screen
-+extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
-+
-+#endif
-+#endif
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- #undef gdk_pixbuf_get_from_drawable
-Index: gtk+-2.10.6/gdk/gdkalias.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkalias.h 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkalias.h 2006-10-30 12:59:30.000000000 +0000
-@@ -1796,9 +1796,6 @@
- extern __typeof (gdk_pango_context_get) IA__gdk_pango_context_get __attribute((visibility("hidden")));
- #define gdk_pango_context_get IA__gdk_pango_context_get
-
--extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
--#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
--
- #ifndef GDK_DISABLE_DEPRECATED
- extern __typeof (gdk_pango_context_set_colormap) IA__gdk_pango_context_set_colormap __attribute((visibility("hidden")));
- #define gdk_pango_context_set_colormap IA__gdk_pango_context_set_colormap
-@@ -1833,6 +1830,13 @@
-
- #endif
- #endif
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
-+#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
-+
-+#endif
-+#endif
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- extern __typeof (gdk_pixbuf_get_from_drawable) IA__gdk_pixbuf_get_from_drawable __attribute((visibility("hidden")));
-Index: gtk+-2.10.6/gdk/gdkdraw.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkdraw.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkdraw.c 2006-10-30 12:59:30.000000000 +0000
-@@ -909,9 +909,9 @@
- {
- g_return_if_fail (GDK_IS_DRAWABLE (drawable));
- g_return_if_fail (GDK_IS_GC (gc));
--
-- real_draw_glyphs (drawable, gc, NULL, font,
-- x, y, glyphs);
-+
-+
-+ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs (drawable, gc, font, x, y, glyphs);
- }
-
- /**
-@@ -949,8 +949,9 @@
- g_return_if_fail (GDK_IS_DRAWABLE (drawable));
- g_return_if_fail (GDK_IS_GC (gc));
-
-- real_draw_glyphs (drawable, gc, matrix, font,
-- x / PANGO_SCALE, y / PANGO_SCALE, glyphs);
-+ if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed)
-+ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed (drawable, gc, matrix,
-+ font, x, y, glyphs);
- }
-
- /**
-@@ -974,28 +975,12 @@
- GdkTrapezoid *trapezoids,
- gint n_trapezoids)
- {
-- cairo_t *cr;
-- int i;
--
- g_return_if_fail (GDK_IS_DRAWABLE (drawable));
- g_return_if_fail (GDK_IS_GC (gc));
- g_return_if_fail (n_trapezoids == 0 || trapezoids != NULL);
-
-- cr = gdk_cairo_create (drawable);
-- _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE);
--
-- for (i = 0; i < n_trapezoids; i++)
-- {
-- cairo_move_to (cr, trapezoids[i].x11, trapezoids[i].y1);
-- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y1);
-- cairo_line_to (cr, trapezoids[i].x22, trapezoids[i].y2);
-- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y2);
-- cairo_close_path (cr);
-- }
--
-- cairo_fill (cr);
--
-- cairo_destroy (cr);
-+ GDK_DRAWABLE_GET_CLASS (drawable)->draw_trapezoids (drawable, gc,
-+ trapezoids, n_trapezoids);
- }
-
- /**
-Index: gtk+-2.10.6/gdk/gdkpango.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkpango.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkpango.c 2006-10-30 12:59:30.000000000 +0000
-@@ -50,19 +50,34 @@
- GdkBitmap *stipple[MAX_RENDER_PART + 1];
- gboolean embossed;
-
-- cairo_t *cr;
-- PangoRenderPart last_part;
-+ /* When switching between the normal and shadow copies when
-+ * drawing shadows we can get unexpected recursion into the
-+ * drawing functions; the 'in_emboss' flag guards against that.
-+ */
-+ gboolean in_emboss;
-
- /* Current target */
- GdkDrawable *drawable;
- GdkGC *base_gc;
-
- gboolean gc_changed;
-+
-+ /* Cached GC, derived from base_gc */
-+ GdkGC *gc;
-+ PangoColor gc_color;
-+ gboolean gc_color_set;
-+ GdkBitmap *gc_stipple;
-+
-+ /* we accumulate trapezoids for the same PangoRenderPart */
-+ GArray *trapezoids;
-+ PangoRenderPart trapezoid_part;
- };
-
- static PangoAttrType gdk_pango_attr_stipple_type;
- static PangoAttrType gdk_pango_attr_embossed_type;
-
-+static void flush_trapezoids (GdkPangoRenderer *gdk_renderer);
-+
- enum {
- PROP_0,
- PROP_SCREEN
-@@ -77,6 +92,10 @@
- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
- int i;
-
-+ if (priv->gc)
-+ g_object_unref (priv->gc);
-+ if (priv->gc_stipple)
-+ g_object_unref (priv->gc_stipple);
- if (priv->base_gc)
- g_object_unref (priv->base_gc);
- if (priv->drawable)
-@@ -86,6 +105,8 @@
- if (priv->stipple[i])
- g_object_unref (priv->stipple[i]);
-
-+ g_array_free (priv->trapezoids, TRUE);
-+
- G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->finalize (object);
- }
-
-@@ -112,25 +133,6 @@
- return object;
- }
-
--/* Adjusts matrix and color for the renderer to draw the secondary
-- * "shadow" copy for embossed text */
--static void
--emboss_context (cairo_t *cr)
--{
-- cairo_matrix_t tmp_matrix;
--
-- /* The gymnastics here to adjust the matrix are because we want
-- * to offset by +1,+1 in device-space, not in user-space,
-- * so we can't just draw the layout at x + 1, y + 1
-- */
-- cairo_get_matrix (cr, &tmp_matrix);
-- tmp_matrix.x0 += 1.0;
-- tmp_matrix.y0 += 1.0;
-- cairo_set_matrix (cr, &tmp_matrix);
--
-- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
--}
--
- static inline gboolean
- color_equal (PangoColor *c1, PangoColor *c2)
- {
-@@ -146,74 +148,154 @@
- return FALSE;
- }
-
--static cairo_t *
--get_cairo_context (GdkPangoRenderer *gdk_renderer,
-- PangoRenderPart part)
-+/* Adjusts matrix and color for the renderer to draw the secondar
-+ * "shadow" copy for embossed text */
-+static void
-+emboss_renderer (PangoRenderer *renderer,
-+ PangoRenderPart part,
-+ PangoMatrix **save_matrix,
-+ PangoColor **save_color)
-+{
-+ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
-+ static const PangoColor white = { 0xffff, 0xffff, 0xffff };
-+ PangoMatrix tmp_matrix = PANGO_MATRIX_INIT;
-+
-+ priv->in_emboss = TRUE;
-+
-+ *save_color = pango_renderer_get_color (renderer, part);
-+ if (*save_color)
-+ *save_color = pango_color_copy (*save_color);
-+
-+ *save_matrix = renderer->matrix;
-+ if (*save_matrix)
-+ {
-+ *save_matrix = pango_matrix_copy (*save_matrix);
-+ tmp_matrix = **save_matrix;
-+ }
-+
-+ /* The gymnastics here to adjust the matrix are because we want
-+ * to offset by +1,+1 in device-space, not in user-space,
-+ * so we can't just draw the layout at x + 1, y + 1
-+ */
-+ tmp_matrix.x0 += 1;
-+ tmp_matrix.y0 += 1;
-+
-+ pango_renderer_set_matrix (renderer, &tmp_matrix);
-+ pango_renderer_set_color (renderer, part, &white);
-+}
-+
-+/* Restores from emboss_renderer() */
-+static void
-+unemboss_renderer (PangoRenderer *renderer,
-+ PangoRenderPart part,
-+ PangoMatrix **save_matrix,
-+ PangoColor **save_color)
-+{
-+ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
-+ pango_renderer_set_matrix (renderer, *save_matrix);
-+ pango_renderer_set_color (renderer, part, *save_color);
-+
-+ if (*save_matrix)
-+ pango_matrix_free (*save_matrix);
-+ if (*save_color)
-+ pango_color_free (*save_color);
-+
-+ priv->in_emboss = FALSE;
-+}
-+
-+/* Gets the GC for drawing @part. This make involve copying the base GC
-+ * for the renderer, in which case we keep a one-GC cache. */
-+static GdkGC *
-+get_gc (GdkPangoRenderer *gdk_renderer,
-+ PangoRenderPart part)
- {
- PangoRenderer *renderer = PANGO_RENDERER (gdk_renderer);
-+ PangoColor *color;
-+ GdkBitmap *stipple;
- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-
-- if (!priv->cr)
-+ color = pango_renderer_get_color (renderer, part);
-+
-+ if (part <= MAX_RENDER_PART)
-+ stipple = priv->stipple[part];
-+ else
-+ stipple = NULL;
-+
-+ if (!color && !stipple) /* nothing override, use base_gc */
-+ return priv->base_gc;
-+ else
- {
-- const PangoMatrix *matrix;
-+ gboolean new_stipple = FALSE;
-+ gboolean new_color = FALSE;
-
-- priv->cr = gdk_cairo_create (priv->drawable);
-+ if (stipple != priv->gc_stipple)
-+ new_stipple = TRUE;
-
-- matrix = pango_renderer_get_matrix (renderer);
-- if (matrix)
-+ if ((priv->gc_color_set && !color) ||
-+ (!priv->gc_color_set && color) ||
-+ priv->gc_color.red != color->red ||
-+ priv->gc_color.green != color->green ||
-+ priv->gc_color.blue != color->blue)
-+ new_color = TRUE;
-+
-+ if (!priv->gc)
- {
-- cairo_matrix_t cairo_matrix;
--
-- cairo_matrix_init (&cairo_matrix,
-- matrix->xx, matrix->yx,
-- matrix->xy, matrix->yy,
-- matrix->x0, matrix->y0);
-- cairo_set_matrix (priv->cr, &cairo_matrix);
-+ priv->gc = gdk_gc_new (priv->drawable);
-+ gdk_gc_copy (priv->gc, priv->base_gc);
-+ }
-+ else if (new_color && priv->gc_color_set && !color)
-+ {
-+ /* We have to recopy the original GC onto the cached GC
-+ * to get the default color */
-+ new_stipple = TRUE;
-+ gdk_gc_copy (priv->gc, priv->base_gc);
-+ }
-+ else if (new_stipple && priv->gc_stipple && !stipple)
-+ {
-+ /* Similarly, we need to make a new copy to restore to the
-+ * default stipple state (the caller may have set a stipple
-+ * on the GC, and even if not, gdk_gc_set_stipple (gc, NULL)
-+ * doesn't work currently to restore to the default X stipple) */
-+ new_color = TRUE;
-+ gdk_gc_copy (priv->gc, priv->base_gc);
- }
-- }
--
-- if (part != priv->last_part)
-- {
-- PangoColor *pango_color;
-- GdkColor *color;
-- GdkColor tmp_color;
-- gboolean changed;
-
-- pango_color = pango_renderer_get_color (renderer, part);
--
-- if (priv->last_part != -1)
-- changed = priv->gc_changed ||
-- priv->stipple[priv->last_part] != priv->stipple[part] ||
-- !color_equal (pango_color,
-- pango_renderer_get_color (renderer, priv->last_part));
-- else
-- changed = TRUE;
--
-- if (changed)
-+ if (new_color)
- {
-- if (pango_color)
-+ if (color)
- {
-- tmp_color.red = pango_color->red;
-- tmp_color.green = pango_color->green;
-- tmp_color.blue = pango_color->blue;
-+ GdkColor gdk_color;
-+
-+ gdk_color.red = color->red;
-+ gdk_color.green = color->green;
-+ gdk_color.blue = color->blue;
-
-- color = &tmp_color;
-+ gdk_gc_set_rgb_fg_color (priv->gc, &gdk_color);
-+
-+ priv->gc_color = *color;
-+ priv->gc_color_set = TRUE;
- }
- else
-- color = NULL;
-+ priv->gc_color_set = FALSE;
-+ }
-
-- _gdk_gc_update_context (priv->base_gc,
-- priv->cr,
-- color,
-- priv->stipple[part],
-- priv->gc_changed);
-+ if (new_stipple)
-+ {
-+ if (priv->gc_stipple)
-+ g_object_unref (priv->gc_stipple);
-+
-+ if (stipple)
-+ {
-+ gdk_gc_set_stipple (priv->gc, stipple);
-+ gdk_gc_set_fill (priv->gc, GDK_STIPPLED);
-+ priv->gc_stipple = g_object_ref (stipple);
-+ }
-+ else
-+ priv->gc_stipple = NULL;
- }
-
-- priv->last_part = part;
-- priv->gc_changed = FALSE;
-+ return priv->gc;
- }
--
-- return priv->cr;
- }
-
- static void
-@@ -225,133 +307,78 @@
- {
- GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-- cairo_t *cr;
-
-- cr = get_cairo_context (gdk_renderer,
-- PANGO_RENDER_PART_FOREGROUND);
-+ flush_trapezoids (gdk_renderer);
-
-- if (priv->embossed)
-+ if (!priv->in_emboss && priv->embossed)
- {
-- cairo_save (cr);
-- emboss_context (cr);
-- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
-- pango_cairo_show_glyph_string (cr, font, glyphs);
-- cairo_restore (cr);
-- }
--
-- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
-- pango_cairo_show_glyph_string (cr, font, glyphs);
--}
--
--/* Draws an error underline that looks like one of:
-- * H E H
-- * /\ /\ /\ /\ /\ -
-- * A/ \ / \ / \ A/ \ / \ |
-- * \ \ / \ / /D \ \ / \ |
-- * \ \/ C \/ / \ \/ C \ | height = HEIGHT_SQUARES * square
-- * \ /\ F / \ F /\ \ |
-- * \ / \ / \ / \ \G |
-- * \ / \ / \ / \ / |
-- * \/ \/ \/ \/ -
-- * B B
-- * |----|
-- * unit_width = (HEIGHT_SQUARES - 1) * square
-- *
-- * The x, y, width, height passed in give the desired bounding box;
-- * x/width are adjusted to make the underline a integer number of units
-- * wide.
-- */
--#define HEIGHT_SQUARES 2.5
-+ PangoMatrix *save_matrix;
-+ PangoColor *save_color;
-
--/* Cut-and-pasted between here and pango/pango/pangocairo-render.c */
-+ emboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
-+ gdk_draw_glyphs_transformed (priv->drawable,
-+ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
-+ renderer->matrix, font, x, y, glyphs);
-+ unemboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
-+ }
-+
-+ gdk_draw_glyphs_transformed (priv->drawable,
-+ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
-+ renderer->matrix, font, x, y, glyphs);
-+}
-+
-+/* Outputs any pending trapezoids, we do this when the part or
-+ * part color changes, when we are about to draw text, etc. */
- static void
--draw_error_underline (cairo_t *cr,
-- double x,
-- double y,
-- double width,
-- double height)
--{
-- double square = height / HEIGHT_SQUARES;
-- double unit_width = (HEIGHT_SQUARES - 1) * square;
-- int width_units = (width + unit_width / 2) / unit_width;
-- double y_top, y_bottom;
-- int i;
-+flush_trapezoids (GdkPangoRenderer *gdk_renderer)
-+{
-+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-
-- x += (width - width_units * unit_width) / 2;
-- width = width_units * unit_width;
-+ if (!priv->trapezoids || priv->trapezoids->len == 0)
-+ return;
-
-- y_top = y;
-- y_bottom = y + height;
--
-- /* Bottom of squiggle */
-- cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */
-- for (i = 0; i < width_units; i += 2)
-- {
-- double x_middle = x + (i + 1) * unit_width;
-- double x_right = x + (i + 2) * unit_width;
--
-- cairo_line_to (cr, x_middle, y_bottom); /* B */
--
-- if (i + 1 == width_units)
-- /* Nothing */;
-- else if (i + 2 == width_units)
-- cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */
-- else
-- cairo_line_to (cr, x_right, y_top + square); /* C */
-- }
--
-- /* Top of squiggle */
-- for (i -= 2; i >= 0; i -= 2)
-- {
-- double x_left = x + i * unit_width;
-- double x_middle = x + (i + 1) * unit_width;
-- double x_right = x + (i + 2) * unit_width;
--
-- if (i + 1 == width_units)
-- cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */
-- else {
-- if (i + 2 == width_units)
-- cairo_line_to (cr, x_right, y_top); /* E */
-- cairo_line_to (cr, x_middle, y_bottom - square); /* F */
-- }
--
-- cairo_line_to (cr, x_left, y_top); /* H */
-- }
-+ gdk_draw_trapezoids (priv->drawable,
-+ get_gc (gdk_renderer, priv->trapezoid_part),
-+ (GdkTrapezoid *)priv->trapezoids->data,
-+ priv->trapezoids->len);
-
-- cairo_close_path (cr);
-- cairo_fill (cr);
-+ g_array_set_size (priv->trapezoids, 0);
- }
-
-+/* Draws a single trapezoid ... we don't draw it immediately, but rather
-+ * cache it to join together with other trapezoids that form part of the
-+ * same logical shape */
- static void
--gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
-- PangoRenderPart part,
-- int x,
-- int y,
-- int width,
-- int height)
-+gdk_pango_renderer_draw_trapezoid (PangoRenderer *renderer,
-+ PangoRenderPart part,
-+ double y1,
-+ double x11,
-+ double x21,
-+ double y2,
-+ double x12,
-+ double x22)
- {
- GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-- cairo_t *cr;
--
-- cr = get_cairo_context (gdk_renderer, part);
--
-- if (priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
-- {
-- cairo_save (cr);
-- emboss_context (cr);
-- cairo_rectangle (cr,
-- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
-- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-+ GdkTrapezoid trap;
-
-- cairo_fill (cr);
-- cairo_restore (cr);
-- }
-+ if (!gdk_renderer->priv->trapezoids)
-+ gdk_renderer->priv->trapezoids = g_array_new (FALSE, FALSE,
-+ sizeof (GdkTrapezoid));
-+
-+ if (gdk_renderer->priv->trapezoids->len > 0 &&
-+ gdk_renderer->priv->trapezoid_part != part)
-+ flush_trapezoids (gdk_renderer);
-+
-+ gdk_renderer->priv->trapezoid_part = part;
-+
-+ trap.y1 = y1;
-+ trap.x11 = x11 / 2;
-+ trap.x21 = x21;
-+ trap.y2 = y2;
-+ trap.x12 = x12;
-+ trap.x22 = x22;
-
-- cairo_rectangle (cr,
-- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
-- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-- cairo_fill (cr);
-+ g_array_append_val (gdk_renderer->priv->trapezoids, trap);
- }
-
- static void
-@@ -363,23 +390,51 @@
- {
- GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-- cairo_t *cr;
--
-- cr = get_cairo_context (gdk_renderer, PANGO_RENDER_PART_UNDERLINE);
--
-- if (priv->embossed)
-+
-+ if (!priv->in_emboss && priv->embossed)
- {
-- cairo_save (cr);
-- emboss_context (cr);
-- draw_error_underline (cr,
-- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
-- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-- cairo_restore (cr);
-+ PangoMatrix *save_matrix;
-+ PangoColor *save_color;
-+
-+ emboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
-+ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
-+ x, y, width, height);
-+ unemboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
- }
-
-- draw_error_underline (cr,
-- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
-- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
-+ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
-+ x, y, width, height);
-+}
-+
-+/* We can't handle embossing at the level of trapezoids, because when an
-+ * underline is split into multiple trapezoids, the normal and shadow
-+ * trapezoids will be drawn mixed together. Instead, we have to emboss
-+ * and entire rectangle or error underline
-+ */
-+static void
-+gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
-+ PangoRenderPart part,
-+ int x,
-+ int y,
-+ int width,
-+ int height)
-+{
-+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
-+
-+ if (!priv->in_emboss && priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
-+ {
-+ PangoMatrix *save_matrix;
-+ PangoColor *save_color;
-+
-+ emboss_renderer (renderer, part, &save_matrix, &save_color);
-+ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
-+ x, y, width, height);
-+ unemboss_renderer (renderer, part, &save_matrix, &save_color);
-+ }
-+
-+ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
-+ x, y, width, height);
- }
-
- static void
-@@ -388,8 +443,8 @@
- {
- GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
-
-- if (gdk_renderer->priv->last_part == part)
-- gdk_renderer->priv->last_part = (PangoRenderPart)-1;
-+ if (part == gdk_renderer->priv->trapezoid_part)
-+ flush_trapezoids (gdk_renderer);
- }
-
- static void
-@@ -410,13 +465,8 @@
- {
- GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
--
-- if (priv->cr)
-- {
-- cairo_destroy (priv->cr);
-- priv->cr = NULL;
-- }
-- priv->last_part = (PangoRenderPart)-1;
-+
-+ flush_trapezoids (gdk_renderer);
- }
-
- static void
-@@ -515,7 +565,6 @@
- GDK_TYPE_PANGO_RENDERER,
- GdkPangoRendererPrivate);
-
-- renderer->priv->last_part = (PangoRenderPart)-1;
- renderer->priv->gc_changed = TRUE;
- }
-
-@@ -527,6 +576,7 @@
- PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
-
- renderer_class->draw_glyphs = gdk_pango_renderer_draw_glyphs;
-+ renderer_class->draw_trapezoid = gdk_pango_renderer_draw_trapezoid;
- renderer_class->draw_rectangle = gdk_pango_renderer_draw_rectangle;
- renderer_class->draw_error_underline = gdk_pango_renderer_draw_error_underline;
- renderer_class->part_changed = gdk_pango_renderer_part_changed;
-@@ -647,6 +697,8 @@
-
- priv = gdk_renderer->priv;
-
-+ flush_trapezoids (gdk_renderer);
-+
- if (priv->drawable != drawable)
- {
- if (priv->drawable)
-@@ -681,6 +733,8 @@
-
- priv = gdk_renderer->priv;
-
-+ flush_trapezoids (gdk_renderer);
-+
- if (priv->base_gc != gc)
- {
- if (priv->base_gc)
-@@ -689,6 +743,20 @@
- if (priv->base_gc)
- g_object_ref (priv->base_gc);
-
-+ if (priv->gc)
-+ {
-+ g_object_unref (priv->gc);
-+ priv->gc = NULL;
-+ }
-+
-+ priv->gc_color_set = FALSE;
-+
-+ if (priv->gc_stipple)
-+ {
-+ g_object_unref (priv->gc_stipple);
-+ priv->gc_stipple = NULL;
-+ }
-+
- priv->gc_changed = TRUE;
- }
- }
-@@ -1414,50 +1482,5 @@
- return gdk_pango_context_get_for_screen (gdk_screen_get_default ());
- }
-
--/**
-- * gdk_pango_context_get_for_screen:
-- * @screen: the #GdkScreen for which the context is to be created.
-- *
-- * Creates a #PangoContext for @screen.
-- *
-- * The context must be freed when you're finished with it.
-- *
-- * When using GTK+, normally you should use gtk_widget_get_pango_context()
-- * instead of this function, to get the appropriate context for
-- * the widget you intend to render text onto.
-- *
-- * The newly created context will have the default font options
-- * (see #cairo_font_options_t) for the screen; if these options
-- * change it will not be updated. Using gtk_widget_get_pango_context()
-- * is more convenient if you want to keep a context around and track
-- * changes to the screen's font rendering settings.
-- *
-- * Return value: a new #PangoContext for @screen
-- *
-- * Since: 2.2
-- **/
--PangoContext *
--gdk_pango_context_get_for_screen (GdkScreen *screen)
--{
-- PangoFontMap *fontmap;
-- PangoContext *context;
-- const cairo_font_options_t *options;
-- double dpi;
--
-- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
--
-- fontmap = pango_cairo_font_map_get_default ();
--
-- context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
--
-- options = gdk_screen_get_font_options (screen);
-- pango_cairo_context_set_font_options (context, options);
--
-- dpi = gdk_screen_get_resolution (screen);
-- pango_cairo_context_set_resolution (context, dpi);
--
-- return context;
--}
--
- #define __GDK_PANGO_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/gdk.symbols
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdk.symbols 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdk.symbols 2006-10-30 12:59:30.000000000 +0000
-@@ -861,7 +861,6 @@
- gdk_pango_attr_embossed_new
- gdk_pango_attr_stipple_new
- gdk_pango_context_get
--gdk_pango_context_get_for_screen
- #ifndef GDK_DISABLE_DEPRECATED
- gdk_pango_context_set_colormap
- #endif
-@@ -877,6 +876,12 @@
- #endif
- #endif
-
-+#if IN_HEADER(__GDK_PANGO_H__)
-+#if IN_FILE(__GDK_PANGO_X11_C__)
-+gdk_pango_context_get_for_screen
-+#endif
-+#endif
-+
- #if IN_HEADER(__GDK_PIXBUF_H__)
- #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
- gdk_pixbuf_get_from_drawable
-Index: gtk+-2.10.6/gdk/gdkwindow.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/gdkwindow.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/gdkwindow.c 2006-10-30 12:59:30.000000000 +0000
-@@ -1834,9 +1834,14 @@
- }
- else
- {
-- method->cr = cairo_create (paint->surface);
-+ /*method->cr = cairo_create (paint->surface);
-
-- gdk_cairo_set_source_color (method->cr, &private->bg_color);
-+ gdk_cairo_set_source_color (method->cr, &private->bg_color);*/
-+ GdkGC *gc = _gdk_drawable_get_scratch_gc (paint->pixmap, FALSE);
-+
-+ gdk_gc_set_foreground (gc, &(private->bg_color));
-+
-+ method->gc = g_object_ref (gc);
- }
- }
-
-Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -190,7 +190,8 @@
- display_x11->leader_window_title_set = FALSE;
-
- display_x11->have_render = GDK_UNKNOWN;
--
-+ display_x11->have_render_with_trapezoids = GDK_UNKNOWN;
-+
- #ifdef HAVE_XFIXES
- if (XFixesQueryExtension (display_x11->xdisplay,
- &display_x11->xfixes_event_base,
-Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:58:29.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:59:30.000000000 +0000
-@@ -78,6 +78,7 @@
- gboolean use_xshm;
- gboolean have_shm_pixmaps;
- GdkTristate have_render;
-+ GdkTristate have_render_with_trapezoids;
- gboolean have_xfixes;
- gint xfixes_event_base;
-
-Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -26,6 +26,8 @@
-
- #include <config.h>
-
-+#include <pango/pangoxft.h>
-+
- #include "gdkx.h"
- #include "gdkregion-generic.h"
-
-@@ -106,7 +108,21 @@
- GdkGC *gc,
- GdkPoint *points,
- gint npoints);
--
-+
-+static void gdk_x11_draw_glyphs (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ PangoFont *font,
-+ gint x,
-+ gint y,
-+ PangoGlyphString *glyphs);
-+static void gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ PangoMatrix *matrix,
-+ PangoFont *font,
-+ gint x,
-+ gint y,
-+ PangoGlyphString *glyphs);
-+
- static void gdk_x11_draw_image (GdkDrawable *drawable,
- GdkGC *gc,
- GdkImage *image,
-@@ -129,6 +145,11 @@
- gint x_dither,
- gint y_dither);
-
-+static void gdk_x11_draw_trapezoids (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ GdkTrapezoid *trapezoids,
-+ gint n_trapezoids);
-+
- static cairo_surface_t *gdk_x11_ref_cairo_surface (GdkDrawable *drawable);
-
- static void gdk_x11_set_colormap (GdkDrawable *drawable,
-@@ -163,8 +184,11 @@
- drawable_class->draw_points = gdk_x11_draw_points;
- drawable_class->draw_segments = gdk_x11_draw_segments;
- drawable_class->draw_lines = gdk_x11_draw_lines;
-+ drawable_class->draw_glyphs = gdk_x11_draw_glyphs;
-+ drawable_class->draw_glyphs_transformed = gdk_x11_draw_glyphs_transformed;
- drawable_class->draw_image = gdk_x11_draw_image;
- drawable_class->draw_pixbuf = gdk_x11_draw_pixbuf;
-+ drawable_class->draw_trapezoids = gdk_x11_draw_trapezoids;
-
- drawable_class->ref_cairo_surface = gdk_x11_ref_cairo_surface;
-
-@@ -327,6 +351,72 @@
- return x11display->have_render == GDK_YES;
- }
-
-+gboolean
-+_gdk_x11_have_render_with_trapezoids (GdkDisplay *display)
-+{
-+ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
-+ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+
-+ if (x11display->have_render_with_trapezoids == GDK_UNKNOWN)
-+ {
-+ x11display->have_render_with_trapezoids = GDK_NO;
-+ if (_gdk_x11_have_render (display))
-+ {
-+ /*
-+ * Require protocol >= 0.4 for CompositeTrapezoids support.
-+ */
-+ int major_version, minor_version;
-+
-+#define XRENDER_TETRAPEZOIDS_MAJOR 0
-+#define XRENDER_TETRAPEZOIDS_MINOR 4
-+
-+ if (XRenderQueryVersion (xdisplay, &major_version,
-+ &minor_version))
-+ if ((major_version == XRENDER_TETRAPEZOIDS_MAJOR) &&
-+ (minor_version >= XRENDER_TETRAPEZOIDS_MINOR))
-+ x11display->have_render_with_trapezoids = GDK_YES;
-+ }
-+ }
-+
-+ return x11display->have_render_with_trapezoids == GDK_YES;
-+}
-+
-+static XftDraw *
-+gdk_x11_drawable_get_xft_draw (GdkDrawable *drawable)
-+{
-+ GdkDrawableImplX11 *impl = GDK_DRAWABLE_IMPL_X11 (drawable);
-+
-+ if (impl->xft_draw == NULL)
-+ {
-+ GdkColormap *colormap = gdk_drawable_get_colormap (drawable);
-+
-+ if (colormap)
-+ {
-+ GdkVisual *visual;
-+
-+ visual = gdk_colormap_get_visual (colormap);
-+
-+ impl->xft_draw = XftDrawCreate (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid,
-+ GDK_VISUAL_XVISUAL (visual), GDK_COLORMAP_XCOLORMAP (colormap));
-+ }
-+ else if (gdk_drawable_get_depth (drawable) == 1)
-+ {
-+ impl->xft_draw = XftDrawCreateBitmap (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid);
-+ }
-+ else
-+ {
-+ g_warning ("Using Xft rendering requires the drawable argument to\n"
-+ "have a specified colormap. All windows have a colormap,\n"
-+ "however, pixmaps only have colormap by default if they\n"
-+ "were created with a non-NULL window argument. Otherwise\n"
-+ "a colormap must be set on them with gdk_drawable_set_colormap");
-+ return NULL;
-+ }
-+ }
-+
-+ return impl->xft_draw;
-+}
-+
- static Picture
- gdk_x11_drawable_get_picture (GdkDrawable *drawable)
- {
-@@ -393,6 +483,57 @@
- }
- }
-
-+static void
-+gdk_x11_drawable_update_xft_clip (GdkDrawable *drawable,
-+ GdkGC *gc)
-+{
-+ XftDraw *xft_draw = gdk_x11_drawable_get_xft_draw (drawable);
-+ GdkRegion *clip_region = _gdk_gc_get_clip_region (gc);
-+
-+ if (gc && clip_region)
-+ {
-+ GdkRegionBox *boxes = clip_region->rects;
-+ gint n_boxes = clip_region->numRects;
-+#if 0 /* Until XftDrawSetClipRectangles is there */
-+ XRectangle *rects = g_new (XRectangle, n_boxes);
-+ int i;
-+
-+ for (i=0; i < n_boxes; i++)
-+ {
-+ rects[i].x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
-+ rects[i].y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
-+ rects[i].width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rects[i].x;
-+ rects[i].height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rects[i].y;
-+ }
-+ XftDrawSetClipRectangles (xft_draw, 0, 0, rects, n_boxes);
-+
-+ g_free (rects);
-+#else
-+ Region xregion = XCreateRegion ();
-+ int i;
-+
-+ for (i=0; i < n_boxes; i++)
-+ {
-+ XRectangle rect;
-+
-+ rect.x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
-+ rect.y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
-+ rect.width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rect.x;
-+ rect.height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rect.y;
-+
-+ XUnionRectWithRegion (&rect, xregion, xregion);
-+ }
-+
-+ XftDrawSetClip (xft_draw, xregion);
-+ XDestroyRegion (xregion);
-+#endif
-+ }
-+ else
-+ {
-+ XftDrawSetClip (xft_draw, NULL);
-+ }
-+}
-+
- /*****************************************************
- * X11 specific implementations of generic functions *
- *****************************************************/
-@@ -780,6 +921,45 @@
- }
-
- static void
-+gdk_x11_draw_glyphs (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ PangoFont *font,
-+ gint x,
-+ gint y,
-+ PangoGlyphString *glyphs)
-+{
-+ gdk_x11_draw_glyphs_transformed (drawable, gc, NULL,
-+ font,
-+ x * PANGO_SCALE,
-+ y * PANGO_SCALE,
-+ glyphs);
-+}
-+
-+static void
-+gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ PangoMatrix *matrix,
-+ PangoFont *font,
-+ gint x,
-+ gint y,
-+ PangoGlyphString *glyphs)
-+{
-+ GdkDrawableImplX11 *impl;
-+ PangoRenderer *renderer;
-+
-+ impl = GDK_DRAWABLE_IMPL_X11 (drawable);
-+
-+ g_return_if_fail (PANGO_XFT_IS_FONT (font));
-+
-+ renderer = _gdk_x11_renderer_get (drawable, gc);
-+ if (matrix)
-+ pango_renderer_set_matrix (renderer, matrix);
-+ pango_renderer_draw_glyphs (renderer, font, glyphs, x, y);
-+ if (matrix)
-+ pango_renderer_set_matrix (renderer, NULL);
-+}
-+
-+static void
- gdk_x11_draw_image (GdkDrawable *drawable,
- GdkGC *gc,
- GdkImage *image,
-@@ -1444,6 +1624,47 @@
- }
-
- static void
-+gdk_x11_draw_trapezoids (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ GdkTrapezoid *trapezoids,
-+ gint n_trapezoids)
-+{
-+ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+ GdkDisplay *display = gdk_screen_get_display (screen);
-+ XTrapezoid *xtrapezoids;
-+ gint i;
-+
-+ if (!_gdk_x11_have_render_with_trapezoids (display))
-+ {
-+ GdkDrawable *wrapper = GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper;
-+ GDK_DRAWABLE_CLASS (_gdk_drawable_impl_x11_parent_class)->draw_trapezoids (wrapper, gc,
-+ trapezoids, n_trapezoids);
-+ return;
-+ }
-+
-+ xtrapezoids = g_new (XTrapezoid, n_trapezoids);
-+
-+ for (i = 0; i < n_trapezoids; i++)
-+ {
-+ xtrapezoids[i].top = XDoubleToFixed (trapezoids[i].y1);
-+ xtrapezoids[i].bottom = XDoubleToFixed (trapezoids[i].y2);
-+ xtrapezoids[i].left.p1.x = XDoubleToFixed (trapezoids[i].x11);
-+ xtrapezoids[i].left.p1.y = XDoubleToFixed (trapezoids[i].y1);
-+ xtrapezoids[i].left.p2.x = XDoubleToFixed (trapezoids[i].x12);
-+ xtrapezoids[i].left.p2.y = XDoubleToFixed (trapezoids[i].y2);
-+ xtrapezoids[i].right.p1.x = XDoubleToFixed (trapezoids[i].x21);
-+ xtrapezoids[i].right.p1.y = XDoubleToFixed (trapezoids[i].y1);
-+ xtrapezoids[i].right.p2.x = XDoubleToFixed (trapezoids[i].x22);
-+ xtrapezoids[i].right.p2.y = XDoubleToFixed (trapezoids[i].y2);
-+ }
-+
-+ _gdk_x11_drawable_draw_xtrapezoids (drawable, gc,
-+ xtrapezoids, n_trapezoids);
-+
-+ g_free (xtrapezoids);
-+}
-+
-+static void
- gdk_x11_cairo_surface_destroy (void *data)
- {
- GdkDrawableImplX11 *impl = data;
-@@ -1498,5 +1719,89 @@
- return impl->cairo_surface;
- }
-
-+void
-+_gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ XTrapezoid *xtrapezoids,
-+ int n_trapezoids)
-+{
-+ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+ GdkDisplay *display = gdk_screen_get_display (screen);
-+ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+
-+ XftDraw *draw;
-+
-+ if (!_gdk_x11_have_render_with_trapezoids (display))
-+ {
-+ /* This is the case of drawing the borders of the unknown glyph box
-+ * without render on the display, we need to feed it back to
-+ * fallback code. Not efficient, but doesn't matter.
-+ */
-+ GdkTrapezoid *trapezoids = g_new (GdkTrapezoid, n_trapezoids);
-+ int i;
-+
-+ for (i = 0; i < n_trapezoids; i++)
-+ {
-+ trapezoids[i].y1 = XFixedToDouble (xtrapezoids[i].top);
-+ trapezoids[i].y2 = XFixedToDouble (xtrapezoids[i].bottom);
-+ trapezoids[i].x11 = XFixedToDouble (xtrapezoids[i].left.p1.x);
-+ trapezoids[i].x12 = XFixedToDouble (xtrapezoids[i].left.p2.x);
-+ trapezoids[i].x21 = XFixedToDouble (xtrapezoids[i].right.p1.x);
-+ trapezoids[i].x22 = XFixedToDouble (xtrapezoids[i].right.p2.x);
-+ }
-+
-+ gdk_x11_draw_trapezoids (drawable, gc, trapezoids, n_trapezoids);
-+ g_free (trapezoids);
-+
-+ return;
-+ }
-+
-+ gdk_x11_drawable_update_xft_clip (drawable, gc);
-+ draw = gdk_x11_drawable_get_xft_draw (drawable);
-+
-+ if (!x11display->mask_format)
-+ x11display->mask_format = XRenderFindStandardFormat (x11display->xdisplay,
-+ PictStandardA8);
-+
-+ XRenderCompositeTrapezoids (x11display->xdisplay, PictOpOver,
-+ _gdk_x11_gc_get_fg_picture (gc),
-+ XftDrawPicture (draw),
-+ x11display->mask_format,
-+ - gc->ts_x_origin, - gc->ts_y_origin,
-+ xtrapezoids, n_trapezoids);
-+}
-+
-+void
-+_gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ XftFont *xft_font,
-+ XftGlyphSpec *glyphs,
-+ gint n_glyphs)
-+{
-+ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+ GdkDisplay *display = gdk_screen_get_display (screen);
-+ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
-+ XftDraw *draw;
-+
-+ gdk_x11_drawable_update_xft_clip (drawable, gc);
-+ draw = gdk_x11_drawable_get_xft_draw (drawable);
-+
-+ if (_gdk_x11_have_render (display))
-+ {
-+ XftGlyphSpecRender (x11display->xdisplay, PictOpOver,
-+ _gdk_x11_gc_get_fg_picture (gc),
-+ xft_font,
-+ XftDrawPicture (draw),
-+ - gc->ts_x_origin, - gc->ts_y_origin,
-+ glyphs, n_glyphs);
-+ }
-+ else
-+ {
-+ XftColor color;
-+
-+ _gdk_gc_x11_get_fg_xft_color (gc, &color);
-+ XftDrawGlyphSpec (draw, &color, xft_font, glyphs, n_glyphs);
-+ }
-+}
- #define __GDK_DRAWABLE_X11_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:59:30.000000000 +0000
-@@ -33,6 +33,7 @@
-
- #include <X11/Xlib.h>
- #include <X11/extensions/Xrender.h>
-+#include <X11/Xft/Xft.h>
-
- G_BEGIN_DECLS
-
-@@ -68,6 +69,8 @@
- Window xid;
- GdkScreen *screen;
-
-+ XftDraw *xft_draw;
-+
- Picture picture;
- cairo_surface_t *cairo_surface;
- };
-@@ -92,7 +95,15 @@
- /* Note that the following take GdkDrawableImplX11, not the wrapper drawable */
- void _gdk_x11_drawable_finish (GdkDrawable *drawable);
- void _gdk_x11_drawable_update_size (GdkDrawable *drawable);
--
-+void _gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ XTrapezoid *xtrapezoids,
-+ int n_trapezoids);
-+void _gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable,
-+ GdkGC *gc,
-+ XftFont *xft_font,
-+ XftGlyphSpec *glyphs,
-+ gint n_glyphs);
- G_END_DECLS
-
- #endif /* __GDK_DRAWABLE_X11_H__ */
-Index: gtk+-2.10.6/gdk/x11/gdkgc-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkgc-x11.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkgc-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -80,7 +80,10 @@
- gdk_gc_x11_finalize (GObject *object)
- {
- GdkGCX11 *x11_gc = GDK_GC_X11 (object);
--
-+
-+ if (x11_gc->fg_picture != None)
-+ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
-+
- XFreeGC (GDK_GC_XDISPLAY (x11_gc), GDK_GC_XGC (x11_gc));
-
- G_OBJECT_CLASS (_gdk_gc_x11_parent_class)->finalize (object);
-@@ -110,7 +113,7 @@
-
- private->dirty_mask = 0;
- private->have_clip_mask = FALSE;
--
-+
- private->screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-
- private->depth = gdk_drawable_get_depth (drawable);
-@@ -339,6 +342,18 @@
- }
-
- static void
-+clear_fg_picture (GdkGC *gc)
-+{
-+ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+
-+ if (x11_gc->fg_picture != None)
-+ {
-+ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
-+ x11_gc->fg_picture = None;
-+ }
-+}
-+
-+static void
- gdk_x11_gc_set_values (GdkGC *gc,
- GdkGCValues *values,
- GdkGCValuesMask values_mask)
-@@ -367,6 +382,29 @@
- x11_gc->have_clip_mask = values->clip_mask != NULL;
- }
-
-+ if (values_mask & GDK_GC_BACKGROUND)
-+ {
-+ if (_gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
-+ clear_fg_picture (gc);
-+ }
-+
-+ if (values_mask & GDK_GC_FILL)
-+ {
-+ clear_fg_picture (gc);
-+ }
-+
-+ if (values_mask & GDK_GC_STIPPLE)
-+ {
-+ if (_gdk_gc_get_fill (gc) == GDK_STIPPLED || _gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
-+ clear_fg_picture (gc);
-+ }
-+
-+ if (values_mask & GDK_GC_TILE)
-+ {
-+ if (_gdk_gc_get_fill (gc) == GDK_TILED)
-+ clear_fg_picture (gc);
-+ }
-+
- gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask);
-
- XChangeGC (GDK_GC_XDISPLAY (gc),
-@@ -642,6 +680,8 @@
- x11_dst_gc->dirty_mask = x11_src_gc->dirty_mask;
- x11_dst_gc->have_clip_region = x11_src_gc->have_clip_region;
- x11_dst_gc->have_clip_mask = x11_src_gc->have_clip_mask;
-+
-+ clear_fg_picture (dst_gc);
- }
-
- /**
-@@ -701,5 +741,359 @@
- return gc_x11->xgc;
- }
-
-+/* Various bits of the below are roughly cribbed from XFree86
-+ * lib/Xft/xftdraw.c, Copyright 2000, Keith Packard
-+ */
-+
-+static XRenderPictFormat *
-+foreground_format (GdkGC *gc)
-+{
-+ XRenderPictFormat pf;
-+
-+ pf.type = PictTypeDirect;
-+ pf.depth = 32;
-+ pf.direct.redMask = 0xff;
-+ pf.direct.greenMask = 0xff;
-+ pf.direct.blueMask = 0xff;
-+ pf.direct.alphaMask = 0xff;
-+
-+ return XRenderFindFormat (GDK_GC_XDISPLAY (gc),
-+ (PictFormatType |
-+ PictFormatDepth |
-+ PictFormatRedMask |
-+ PictFormatGreenMask |
-+ PictFormatBlueMask |
-+ PictFormatAlphaMask),
-+ &pf,
-+ 0);
-+}
-+
-+static Picture
-+make_fg_tile_picture (GdkGC *gc)
-+{
-+ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+ GdkVisual *visual = gdk_drawable_get_visual (_gdk_gc_get_tile (gc));
-+ XRenderPictFormat *format = NULL;
-+
-+ if (visual)
-+ {
-+ format = XRenderFindVisualFormat (GDK_GC_XDISPLAY (gc),
-+ GDK_VISUAL_XVISUAL (visual));
-+ }
-+ else if (x11_gc->depth == 1)
-+ {
-+ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
-+ PictStandardA1);
-+ }
-+
-+ if (format)
-+ {
-+ XRenderPictureAttributes pa;
-+ pa.repeat = True;
-+
-+ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
-+ GDK_PIXMAP_XID (_gdk_gc_get_tile (gc)),
-+ format,
-+ CPRepeat, &pa);
-+ }
-+
-+ return None;
-+}
-+
-+static Picture
-+make_stipple_picture (GdkGC *gc)
-+{
-+ XRenderPictFormat *format = NULL;
-+ XRenderPictureAttributes pa;
-+
-+ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
-+ PictStandardA1);
-+
-+ pa.repeat = True;
-+ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
-+ GDK_PIXMAP_XID (_gdk_gc_get_stipple (gc)),
-+ format,
-+ CPRepeat, &pa);
-+}
-+
-+static Picture
-+make_color_picture (GdkGC *gc,
-+ XRenderColor *color)
-+{
-+ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
-+ XRenderPictureAttributes pa;
-+ XRenderPictFormat *pix_format = foreground_format (gc);
-+ Pixmap pix;
-+ Picture picture;
-+
-+ if (!pix_format)
-+ return None;
-+
-+ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc),
-+ GDK_SCREEN_XROOTWIN (x11_gc->screen),
-+ 1, 1, pix_format->depth);
-+ pa.repeat = True;
-+ picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
-+ pix,
-+ pix_format,
-+ CPRepeat, &pa);
-+ XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
-+
-+ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
-+ picture, color,
-+ 0, 0, 1, 1);
-+
-+ return picture;
-+}
-+
-+static void
-+get_bg_color (GdkGC *gc,
-+ XRenderColor *render_color)
-+{
-+ GdkColormap *cmap;
-+
-+ cmap = gdk_gc_get_colormap (gc);
-+
-+ if (cmap)
-+ {
-+ GdkColor color;
-+
-+ gdk_colormap_query_color (cmap, _gdk_gc_get_bg_pixel (gc), &color);
-+
-+ render_color->alpha = 0xffff;
-+ render_color->red = color.red;
-+ render_color->green = color.green;
-+ render_color->blue = color.blue;
-+ }
-+ else /* Not worth warning, just use black */
-+ {
-+ render_color->alpha = 0xffff;
-+ render_color->red = 0;
-+ render_color->green = 0;
-+ render_color->blue = 0;
-+ }
-+}
-+
-+/**
-+ * _gdk_x11_gc_get_fg_picture:
-+ * @gc: a #GdkGC
-+ *
-+ * Gets a Xrender Picture object suitable for being the source
-+ * drawable for drawing with the foreground the graphics context.
-+ *
-+ * Return value: a Picture, owned by the GC; this cannot be
-+ * used over subsequent modification of the GC.
-+ **/
-+Picture
-+_gdk_x11_gc_get_fg_picture (GdkGC *gc)
-+{
-+ GdkGCX11 *x11_gc;
-+ gboolean new = FALSE;
-+ XftColor xftcolor;
-+ GdkFill fill;
-+ int width, height;
-+
-+ g_return_val_if_fail (GDK_IS_GC_X11 (gc), None);
-+
-+ if (!_gdk_x11_have_render (GDK_GC_DISPLAY (gc)))
-+ return None;
-+
-+ x11_gc = GDK_GC_X11 (gc);
-+
-+ fill = GDK_SOLID;
-+ width = 1;
-+ height = 1;
-+
-+ switch (_gdk_gc_get_fill (gc))
-+ {
-+ case GDK_SOLID:
-+ break;
-+ case GDK_TILED:
-+ if (_gdk_gc_get_tile (gc))
-+ {
-+ if (!x11_gc->fg_picture)
-+ x11_gc->fg_picture = make_fg_tile_picture (gc);
-+
-+ if (x11_gc->fg_picture != None)
-+ return x11_gc->fg_picture;
-+ }
-+ break;
-+ case GDK_STIPPLED:
-+ case GDK_OPAQUE_STIPPLED:
-+ if (_gdk_gc_get_stipple (gc))
-+ {
-+ gdk_drawable_get_size (_gdk_gc_get_stipple (gc), &width, &height);
-+ fill = _gdk_gc_get_fill (gc);
-+ }
-+ break;
-+ }
-+
-+ if (x11_gc->fg_picture == None)
-+ {
-+ XRenderPictureAttributes pa;
-+ XRenderPictFormat *pix_format = foreground_format (gc);
-+ Pixmap pix;
-+
-+ if (!pix_format)
-+ return None;
-+
-+ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc),
-+ GDK_SCREEN_XROOTWIN (x11_gc->screen),
-+ width, height, pix_format->depth);
-+ pa.repeat = True;
-+ x11_gc->fg_picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
-+ pix,
-+ pix_format,
-+ CPRepeat, &pa);
-+ XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
-+
-+ new = TRUE;
-+ }
-+
-+ _gdk_gc_x11_get_fg_xft_color (gc, &xftcolor);
-+
-+ if (x11_gc->fg_picture_color.alpha != 0xffff ||
-+ x11_gc->fg_picture_color.red != xftcolor.color.red ||
-+ x11_gc->fg_picture_color.green != xftcolor.color.green ||
-+ x11_gc->fg_picture_color.blue != xftcolor.color.blue)
-+ {
-+ x11_gc->fg_picture_color.alpha = 0xffff;
-+ x11_gc->fg_picture_color.red = xftcolor.color.red;
-+ x11_gc->fg_picture_color.green = xftcolor.color.green;
-+ x11_gc->fg_picture_color.blue = xftcolor.color.blue;
-+
-+ new = TRUE;
-+ }
-+
-+ switch (fill)
-+ {
-+ case GDK_SOLID:
-+ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
-+ x11_gc->fg_picture, &x11_gc->fg_picture_color,
-+ 0, 0, width, height);
-+ break;
-+ case GDK_STIPPLED:
-+ {
-+ Picture stipple_picture = make_stipple_picture (gc);
-+
-+ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
-+ x11_gc->fg_picture, &x11_gc->fg_picture_color,
-+ 0, 0, width, height);
-+ XRenderComposite (GDK_GC_XDISPLAY (gc),
-+ PictOpInReverse,
-+ stipple_picture, None, x11_gc->fg_picture,
-+ 0, 0, 0, 0, 0, 0, width, height);
-+
-+ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
-+ }
-+ break;
-+ case GDK_OPAQUE_STIPPLED:
-+ {
-+ XRenderColor bg_color;
-+
-+ Picture stipple_picture = make_stipple_picture (gc);
-+ Picture fg_picture = make_color_picture (gc, &x11_gc->fg_picture_color);
-+
-+ get_bg_color (gc, &bg_color);
-+
-+ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
-+ x11_gc->fg_picture, &bg_color,
-+ 0, 0, width, height);
-+ XRenderComposite (GDK_GC_XDISPLAY (gc),
-+ PictOpOver,
-+ fg_picture, stipple_picture, x11_gc->fg_picture,
-+ 0, 0, 0, 0, 0, 0, width, height);
-+
-+ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
-+ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), fg_picture);
-+ }
-+ break;
-+ case GDK_TILED:
-+ g_assert_not_reached (); /* handled above */
-+ break;
-+ }
-+
-+ return x11_gc->fg_picture;
-+}
-+
-+/**
-+ * _gdk_gc_x11_get_fg_xft_color:
-+ * @gc: a #GdkGC
-+ * @xftcolor: location to store the color
-+ *
-+ * Gets the foreground color of the GC as a XftColor.
-+ **/
-+void
-+_gdk_gc_x11_get_fg_xft_color (GdkGC *gc,
-+ XftColor *xftcolor)
-+{
-+ GdkGCX11 *x11_gc;
-+ GdkColormap *cmap;
-+ GdkColor color;
-+
-+ g_return_if_fail (GDK_IS_GC_X11 (gc));
-+
-+ x11_gc = GDK_GC_X11 (gc);
-+
-+ cmap = gdk_gc_get_colormap (gc);
-+
-+ xftcolor->pixel = _gdk_gc_get_fg_pixel (gc);
-+
-+ if (cmap)
-+ {
-+ gdk_colormap_query_color (cmap, xftcolor->pixel, &color);
-+ xftcolor->color.alpha = 0xffff;
-+ xftcolor->color.red = color.red;
-+ xftcolor->color.green = color.green;
-+ xftcolor->color.blue = color.blue;
-+ }
-+ else if (x11_gc->depth == 1)
-+ {
-+ /* Drawing with Xft on a bitmap is a bit bizzare; it
-+ * takes alpha >= 0x8000 to mean 'set to 1' and
-+ * alpha < 0x8000 to mean 'set to 0'.
-+ */
-+ if (xftcolor->pixel)
-+ {
-+ xftcolor->color.red = 0xffff;
-+ xftcolor->color.green = 0xffff;
-+ xftcolor->color.blue = 0xffff;
-+ xftcolor->color.alpha = 0xffff;
-+ }
-+ else
-+ {
-+ xftcolor->color.red = 0;
-+ xftcolor->color.green = 0;
-+ xftcolor->color.blue = 0;
-+ xftcolor->color.alpha = 0;
-+ }
-+ }
-+ else
-+ {
-+ g_warning ("Using Xft rendering requires the GC argument to have a\n"
-+ "specified colormap. If the GC was created for a drawable\n"
-+ "with a colormap, the colormap will be set on the GC\n"
-+ "automatically. Otherwise, a colormap must be set on it with"
-+ "gdk_gc_set_colormap");
-+ }
-+}
-+
-+void
-+_gdk_windowing_gc_get_foreground (GdkGC *gc,
-+ GdkColor *color)
-+{
-+ GdkColormap *cmap;
-+
-+ g_return_if_fail (GDK_IS_GC_X11 (gc));
-+
-+ color->pixel = _gdk_gc_get_fg_pixel (gc);
-+
-+ cmap = gdk_gc_get_colormap (gc);
-+
-+ if (cmap)
-+ gdk_colormap_query_color (cmap, _gdk_gc_get_fg_pixel (gc), color);
-+ else
-+ g_warning ("No colormap in _gdk_windowing_gc_get_foreground");
-+}
- #define __GDK_GC_X11_C__
- #include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkprivate-x11.h
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkprivate-x11.h 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkprivate-x11.h 2006-10-30 12:59:30.000000000 +0000
-@@ -63,6 +63,9 @@
- guint have_clip_region : 1;
- guint have_clip_mask : 1;
- guint depth : 8;
-+
-+ Picture fg_picture;
-+ XRenderColor fg_picture_color;
- };
-
- struct _GdkGCX11Class
-@@ -102,6 +105,11 @@
- GType _gdk_gc_x11_get_type (void);
-
- gboolean _gdk_x11_have_render (GdkDisplay *display);
-+gboolean _gdk_x11_have_render_with_trapezoids (GdkDisplay *display);
-+
-+Picture _gdk_x11_gc_get_fg_picture (GdkGC *gc);
-+void _gdk_gc_x11_get_fg_xft_color (GdkGC *gc,
-+ XftColor *xftcolor);
-
- GdkGC *_gdk_x11_gc_new (GdkDrawable *drawable,
- GdkGCValues *values,
-Index: gtk+-2.10.6/gdk/x11/gdkwindow-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkwindow-x11.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkwindow-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -1114,7 +1114,8 @@
- {
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkToplevelX11 *toplevel;
--
-+ GdkDrawableImplX11 *draw_impl;
-+
- g_return_if_fail (GDK_IS_WINDOW (window));
-
- _gdk_selection_window_destroyed (window);
-@@ -1126,6 +1127,11 @@
- if (toplevel)
- gdk_toplevel_x11_free_contents (GDK_WINDOW_DISPLAY (window), toplevel);
-
-+ draw_impl = GDK_DRAWABLE_IMPL_X11 (private->impl);
-+
-+ if (draw_impl->xft_draw)
-+ XftDrawDestroy (draw_impl->xft_draw);
-+
- _gdk_x11_drawable_finish (private->impl);
-
- if (!recursing && !foreign_destroy)
-Index: gtk+-2.10.6/gdk/x11/Makefile.am
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/Makefile.am 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/Makefile.am 2006-10-30 12:59:30.000000000 +0000
-@@ -37,6 +37,7 @@
- gdkinput.c \
- gdkkeys-x11.c \
- gdkmain-x11.c \
-+ gdkpango-x11.c \
- gdkpixmap-x11.c \
- gdkpixmap-x11.h \
- gdkproperty-x11.c \
-Index: gtk+-2.10.6/gtk/gtkcalendar.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-10-30 12:59:30.000000000 +0000
-@@ -1821,7 +1821,7 @@
- }
- }
-
--
-+
- /****************************************
- * Repainting *
- ****************************************/
-@@ -1831,7 +1831,7 @@
- {
- GtkWidget *widget = GTK_WIDGET (calendar);
- GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
-- cairo_t *cr;
-+ GdkGC *gc;
- char buffer[255];
- int x, y;
- gint header_width;
-@@ -1849,7 +1849,7 @@
- else
- year_left = !priv->year_before;
-
-- cr = gdk_cairo_create (priv->header_win);
-+ gc = calendar->gc;
-
- header_width = widget->allocation.width - 2 * widget->style->xthickness;
-
-@@ -1902,9 +1902,9 @@
- - (max_year_width - logical_rect.width)/2);
-
-
-- gdk_cairo_set_source_color (cr, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
-- cairo_move_to (cr, x, y);
-- pango_cairo_show_layout (cr, layout);
-+ gdk_gc_set_foreground (gc, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
-+ gdk_draw_layout (priv->header_win, gc, x, y, layout);
-+
-
- /* Draw month */
- g_snprintf (buffer, sizeof (buffer), "%s", default_monthname[calendar->month]);
-@@ -1924,19 +1924,19 @@
- else
- x = 3 + priv->arrow_width + (max_month_width - logical_rect.width)/2;
-
-- cairo_move_to (cr, x, y);
-- pango_cairo_show_layout (cr, layout);
--
-+ gdk_draw_layout (priv->header_win, gc, x, y, layout);
-+
-+ gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
-+
- g_object_unref (layout);
-- cairo_destroy (cr);
- }
-
- static void
- calendar_paint_day_names (GtkCalendar *calendar)
- {
- GtkWidget *widget = GTK_WIDGET (calendar);
-+ GdkGC *gc;
- GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
-- cairo_t *cr;
- char buffer[255];
- int day,i;
- int day_width, cal_width;
-@@ -1946,8 +1946,7 @@
- gint focus_padding;
- gint focus_width;
-
-- cr = gdk_cairo_create (priv->day_name_win);
--
-+ gc = calendar->gc;
- gtk_widget_style_get (GTK_WIDGET (widget),
- "focus-line-width", &focus_width,
- "focus-padding", &focus_padding,
-@@ -1961,22 +1960,19 @@
- * Draw rectangles as inverted background for the labels.
- */
-
-- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
-- cairo_rectangle (cr,
-- CALENDAR_MARGIN, CALENDAR_MARGIN,
-- cal_width-CALENDAR_MARGIN * 2,
-- priv->day_name_h - CALENDAR_MARGIN);
-- cairo_fill (cr);
--
-+ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
-+ gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
-+ CALENDAR_MARGIN, CALENDAR_MARGIN,
-+ cal_width-CALENDAR_MARGIN * 2,
-+ priv->day_name_h - CALENDAR_MARGIN);
-+
- if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
-- {
-- cairo_rectangle (cr,
-- CALENDAR_MARGIN,
-- priv->day_name_h - CALENDAR_YSEP,
-- priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
-- CALENDAR_YSEP);
-- cairo_fill (cr);
-- }
-+ gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
-+ CALENDAR_MARGIN,
-+ priv->day_name_h - CALENDAR_YSEP,
-+ priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
-+ CALENDAR_YSEP);
-+
-
- /*
- * Write the labels
-@@ -1984,7 +1980,7 @@
-
- layout = gtk_widget_create_pango_layout (widget, NULL);
-
-- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
-+ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
- for (i = 0; i < 7; i++)
- {
- if (gtk_widget_get_direction (GTK_WIDGET (calendar)) == GTK_TEXT_DIR_RTL)
-@@ -1997,19 +1993,18 @@
- pango_layout_set_text (layout, buffer, -1);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-
-- cairo_move_to (cr,
-- (CALENDAR_MARGIN +
-- + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
-- (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
-- : 0)
-- + day_wid_sep * i
-- + (day_width - logical_rect.width)/2),
-- CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y);
-- pango_cairo_show_layout (cr, layout);
-+ gdk_draw_layout (priv->day_name_win, gc,
-+ (CALENDAR_MARGIN +
-+ + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
-+ (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
-+ : 0)
-+ + day_wid_sep * i
-+ + (day_width - logical_rect.width)/2),
-+ CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y,
-+ layout);
- }
-
- g_object_unref (layout);
-- cairo_destroy (cr);
- }
-
- static void
-@@ -2017,7 +2012,7 @@
- {
- GtkWidget *widget = GTK_WIDGET (calendar);
- GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
-- cairo_t *cr;
-+ GdkGC *gc;
- gint row, week = 0, year;
- gint x_loc;
- char buffer[32];
-@@ -2027,7 +2022,7 @@
- gint focus_padding;
- gint focus_width;
-
-- cr = gdk_cairo_create (priv->week_win);
-+ gc = calendar->gc;
-
- gtk_widget_style_get (GTK_WIDGET (widget),
- "focus-line-width", &focus_width,
-@@ -2038,20 +2033,20 @@
- * Draw a rectangle as inverted background for the labels.
- */
-
-- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
-+ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
- if (priv->day_name_win)
-- cairo_rectangle (cr,
-- CALENDAR_MARGIN,
-- 0,
-- priv->week_width - CALENDAR_MARGIN,
-- priv->main_h - CALENDAR_MARGIN);
-+ gdk_draw_rectangle (priv->week_win, gc, TRUE,
-+ CALENDAR_MARGIN,
-+ 0,
-+ priv->week_width - CALENDAR_MARGIN,
-+ priv->main_h - CALENDAR_MARGIN);
- else
-- cairo_rectangle (cr,
-- CALENDAR_MARGIN,
-- CALENDAR_MARGIN,
-- priv->week_width - CALENDAR_MARGIN,
-- priv->main_h - 2 * CALENDAR_MARGIN);
-- cairo_fill (cr);
-+ gdk_draw_rectangle (priv->week_win, gc, TRUE,
-+ CALENDAR_MARGIN,
-+ CALENDAR_MARGIN,
-+ priv->week_width - CALENDAR_MARGIN,
-+ priv->main_h - 2 * CALENDAR_MARGIN);
-+
-
- /*
- * Write the labels
-@@ -2059,7 +2054,7 @@
-
- layout = gtk_widget_create_pango_layout (widget, NULL);
-
-- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
-+ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
- day_height = calendar_row_height (calendar);
- for (row = 0; row < 6; row++)
- {
-@@ -2095,12 +2090,10 @@
- - logical_rect.width
- - CALENDAR_XSEP - focus_padding - focus_width);
-
-- cairo_move_to (cr, x_loc, y_loc);
-- pango_cairo_show_layout (cr, layout);
-+ gdk_draw_layout (priv->week_win, gc, x_loc, y_loc, layout);
- }
-
- g_object_unref (layout);
-- cairo_destroy (cr);
- }
-
- static void
-@@ -2149,7 +2142,7 @@
- {
- GtkWidget *widget = GTK_WIDGET (calendar);
- GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
-- cairo_t *cr;
-+ GdkGC *gc;
- GdkColor *text_color;
- gchar buffer[32];
- gint day;
-@@ -2162,7 +2155,7 @@
- g_return_if_fail (row < 6);
- g_return_if_fail (col < 7);
-
-- cr = gdk_cairo_create (priv->main_win);
-+ gc = calendar->gc;
-
- day = calendar->day[row][col];
-
-@@ -2170,11 +2163,11 @@
-
- if (calendar->day_month[row][col] == MONTH_PREV)
- {
-- text_color = PREV_MONTH_COLOR (widget);
-+ gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));
- }
- else if (calendar->day_month[row][col] == MONTH_NEXT)
- {
-- text_color = NEXT_MONTH_COLOR (widget);
-+ gdk_gc_set_foreground (gc, NEXT_MONTH_COLOR (GTK_WIDGET (calendar)));
- }
- else
- {
-@@ -2188,16 +2181,16 @@
- #endif
- if (calendar->selected_day == day)
- {
-- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
-- gdk_cairo_rectangle (cr, &day_rect);
-- cairo_fill (cr);
-+ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (GTK_WIDGET (calendar)));
-+ gdk_draw_rectangle (priv->main_win, gc, TRUE, day_rect.x, day_rect.y,
-+ day_rect.width, day_rect.height);
- }
- if (calendar->selected_day == day)
-- text_color = SELECTED_FG_COLOR (widget);
-+ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (GTK_WIDGET (calendar)));
- else if (calendar->marked_date[day-1])
-- text_color = MARKED_COLOR (widget);
-+ gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar)));
- else
-- text_color = NORMAL_DAY_COLOR (widget);
-+ gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
- }
-
- /* Translators: this defines whether the day numbers should use
-@@ -2219,16 +2212,13 @@
- x_loc -= logical_rect.width;
- y_loc = day_rect.y + (day_rect.height - logical_rect.height) / 2;
-
-- gdk_cairo_set_source_color (cr, text_color);
-- cairo_move_to (cr, x_loc, y_loc);
-- pango_cairo_show_layout (cr, layout);
-+ gdk_draw_layout (priv->main_win, gc,
-+ x_loc, y_loc, layout);
-
- if (calendar->marked_date[day-1]
- && calendar->day_month[row][col] == MONTH_CURRENT)
-- {
-- cairo_move_to (cr, x_loc - 1, y_loc);
-- pango_cairo_show_layout (cr, layout);
-- }
-+ gdk_draw_layout (priv->main_win, gc,
-+ x_loc-1, y_loc, layout);
-
- if (GTK_WIDGET_HAS_FOCUS (calendar)
- && calendar->focus_row == row && calendar->focus_col == col)
-@@ -2253,7 +2243,6 @@
- }
-
- g_object_unref (layout);
-- cairo_destroy (cr);
- }
-
- static void
-Index: gtk+-2.10.6/gtk/gtkentry.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkentry.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkentry.c 2006-10-30 12:59:30.000000000 +0000
-@@ -3333,7 +3333,6 @@
- if (GTK_WIDGET_DRAWABLE (entry))
- {
- PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE);
-- cairo_t *cr;
- gint x, y;
- gint start_pos, end_pos;
-
-@@ -3341,56 +3340,60 @@
-
- get_layout_position (entry, &x, &y);
-
-- cr = gdk_cairo_create (entry->text_area);
--
-- cairo_move_to (cr, x, y);
-- gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]);
-- pango_cairo_show_layout (cr, layout);
--
-+ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state],
-+ x, y,
-+ layout);
-+
- if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos))
- {
- gint *ranges;
- gint n_ranges, i;
- PangoRectangle logical_rect;
-- GdkColor *selection_color, *text_color;
-+ GdkGC *selection_gc, *text_gc;
- GtkBorder inner_border;
--
-+ GdkRegion *clip_region;
-+
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
- gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
-
- if (GTK_WIDGET_HAS_FOCUS (entry))
- {
-- selection_color = &widget->style->base [GTK_STATE_SELECTED];
-- text_color = &widget->style->text [GTK_STATE_SELECTED];
-+ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED];
-+ text_gc = widget->style->text_gc [GTK_STATE_SELECTED];
- }
- else
- {
-- selection_color = &widget->style->base [GTK_STATE_ACTIVE];
-- text_color = &widget->style->text [GTK_STATE_ACTIVE];
-+ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE];
-+ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE];
- }
--
-+
-+ clip_region = gdk_region_new ();
- _gtk_entry_effective_inner_border (entry, &inner_border);
-
- for (i = 0; i < n_ranges; ++i)
-- cairo_rectangle (cr,
-- inner_border.left - entry->scroll_offset + ranges[2 * i],
-- y,
-- ranges[2 * i + 1],
-- logical_rect.height);
-+ {
-+ GdkRectangle rect;
-
-- cairo_clip (cr);
--
-- gdk_cairo_set_source_color (cr, selection_color);
-- cairo_paint (cr);
-+ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i];
-+ rect.y = y;
-+ rect.width = ranges[2 * i + 1];
-+ rect.height = logical_rect.height;
-+
-+ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE,
-+ rect.x, rect.y, rect.width, rect.height);
-
-- cairo_move_to (cr, x, y);
-- gdk_cairo_set_source_color (cr, text_color);
-- pango_cairo_show_layout (cr, layout);
-+ gdk_region_union_with_rect (clip_region, &rect);
-+ }
-
-+ gdk_gc_set_clip_region (text_gc, clip_region);
-+ gdk_draw_layout (entry->text_area, text_gc,
-+ x, y,
-+ layout);
-+ gdk_gc_set_clip_region (text_gc, NULL);
-+
-+ gdk_region_destroy (clip_region);
- g_free (ranges);
- }
--
-- cairo_destroy (cr);
- }
- }
-
-Index: gtk+-2.10.6/gtk/gtkwidget.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkwidget.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkwidget.c 2006-10-30 12:59:30.000000000 +0000
-@@ -5445,7 +5445,8 @@
- GdkScreen *screen;
-
- update_pango_context (widget, context);
--
-+/* TODO: Figure out the proper way to handle this in a pangoxft setting
-+
- screen = gtk_widget_get_screen_unchecked (widget);
- if (screen)
- {
-@@ -5453,7 +5454,7 @@
- gdk_screen_get_resolution (screen));
- pango_cairo_context_set_font_options (context,
- gdk_screen_get_font_options (screen));
-- }
-+ }*/
- }
- }
-
-Index: gtk+-2.10.6/gdk/x11/gdkpango-x11.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkpango-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -0,0 +1,174 @@
-+/* GDK - The GIMP Drawing Kit
-+ * Copyright (C) 2000 Red Hat, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ */
-+
-+#include <config.h>
-+#include <stdlib.h>
-+
-+#include "gdkx.h"
-+#include "gdkdisplay-x11.h"
-+#include "gdkpango.h"
-+#include <pango/pangoxft.h>
-+#include <pango/pangoxft-render.h>
-+#include "gdkalias.h"
-+
-+#include <math.h>
-+
-+typedef struct _GdkX11Renderer GdkX11Renderer;
-+typedef struct _GdkX11RendererClass GdkX11RendererClass;
-+
-+#define GDK_TYPE_X11_RENDERER (_gdk_x11_renderer_get_type())
-+#define GDK_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_X11_RENDERER, GdkX11Renderer))
-+#define GDK_IS_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_X11_RENDERER))
-+#define GDK_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
-+#define GDK_IS_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_RENDERER))
-+#define GDK_X11_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
-+
-+#define MAX_RENDER_PART PANGO_RENDER_PART_STRIKETHROUGH
-+
-+struct _GdkX11Renderer
-+{
-+ PangoXftRenderer parent_instance;
-+
-+ XRenderPictFormat *mask_format;
-+
-+ GdkDrawable *drawable;
-+ GdkGC *gc;
-+};
-+
-+struct _GdkX11RendererClass
-+{
-+ PangoXftRendererClass parent_class;
-+};
-+
-+G_DEFINE_TYPE (GdkX11Renderer, _gdk_x11_renderer, PANGO_TYPE_XFT_RENDERER)
-+
-+static void
-+gdk_x11_renderer_finalize (GObject *object)
-+{
-+ G_OBJECT_CLASS (_gdk_x11_renderer_parent_class)->finalize (object);
-+}
-+
-+static void
-+gdk_x11_renderer_composite_trapezoids (PangoXftRenderer *xftrenderer,
-+ PangoRenderPart part,
-+ XTrapezoid *trapezoids,
-+ int n_trapezoids)
-+{
-+ /* Because we only use this renderer for "draw_glyphs()" calls, we
-+ * won't hit this code path much. However, it is hit for drawing
-+ * the "unknown glyph" hex squares. We can safely ignore the part,
-+ */
-+ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
-+
-+ _gdk_x11_drawable_draw_xtrapezoids (x11_renderer->drawable,
-+ x11_renderer->gc,
-+ trapezoids, n_trapezoids);
-+
-+}
-+
-+static void
-+gdk_x11_renderer_composite_glyphs (PangoXftRenderer *xftrenderer,
-+ XftFont *xft_font,
-+ XftGlyphSpec *glyphs,
-+ gint n_glyphs)
-+{
-+ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
-+
-+ _gdk_x11_drawable_draw_xft_glyphs (x11_renderer->drawable,
-+ x11_renderer->gc,
-+ xft_font, glyphs, n_glyphs);
-+}
-+
-+static void
-+_gdk_x11_renderer_init (GdkX11Renderer *renderer)
-+{
-+}
-+
-+static void
-+_gdk_x11_renderer_class_init (GdkX11RendererClass *klass)
-+{
-+ PangoXftRendererClass *xftrenderer_class = PANGO_XFT_RENDERER_CLASS (klass);
-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+
-+ xftrenderer_class->composite_glyphs = gdk_x11_renderer_composite_glyphs;
-+ xftrenderer_class->composite_trapezoids = gdk_x11_renderer_composite_trapezoids;
-+
-+ object_class->finalize = gdk_x11_renderer_finalize;
-+}
-+
-+PangoRenderer *
-+_gdk_x11_renderer_get (GdkDrawable *drawable,
-+ GdkGC *gc)
-+{
-+ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
-+ GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
-+ GdkX11Renderer *x11_renderer;
-+
-+ if (!screen_x11->renderer)
-+ {
-+ screen_x11->renderer = g_object_new (GDK_TYPE_X11_RENDERER,
-+ "display", GDK_SCREEN_XDISPLAY (screen),
-+ "screen", GDK_SCREEN_XNUMBER (screen),
-+ NULL);
-+ }
-+
-+ x11_renderer = GDK_X11_RENDERER (screen_x11->renderer);
-+
-+ x11_renderer->drawable = drawable;
-+ x11_renderer->gc = gc;
-+
-+ return screen_x11->renderer;
-+}
-+
-+/**
-+ * gdk_pango_context_get_for_screen:
-+ * @screen: the #GdkScreen for which the context is to be created.
-+ *
-+ * Creates a #PangoContext for @screen.
-+ *
-+ * The context must be freed when you're finished with it.
-+ *
-+ * When using GTK+, normally you should use gtk_widget_get_pango_context()
-+ * instead of this function, to get the appropriate context for
-+ * the widget you intend to render text onto.
-+ *
-+ * Return value: a new #PangoContext for @screen
-+ *
-+ * Since: 2.2
-+ **/
-+PangoContext *
-+gdk_pango_context_get_for_screen (GdkScreen *screen)
-+{
-+ PangoContext *context;
-+
-+ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-+
-+ if (screen->closed)
-+ return NULL;
-+
-+ context = pango_xft_get_context (GDK_SCREEN_XDISPLAY (screen),
-+ GDK_SCREEN_X11 (screen)->screen_num);
-+
-+ g_object_set_data (G_OBJECT (context), "gdk-pango-screen", screen);
-+
-+ return context;
-+}
-+
-+#define __GDK_PANGO_X11_C__
-+#include "gdkaliasdef.c"
-Index: gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c
-===================================================================
---- gtk+-2.10.6.orig/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:58:30.000000000 +0000
-+++ gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:59:30.000000000 +0000
-@@ -119,6 +119,9 @@
- {
- GdkDrawableImplX11 *draw_impl = GDK_DRAWABLE_IMPL_X11 (impl);
-
-+ if (draw_impl->xft_draw)
-+ XftDrawDestroy (draw_impl->xft_draw);
-+
- _gdk_x11_drawable_finish (GDK_DRAWABLE (draw_impl));
- }
-
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c.orig 2006-11-14 14:39:34.000000000 -0800
-+++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-11-14 14:37:34.000000000 -0800
-@@ -1495,6 +1495,10 @@ gtk_calendar_realize (GtkWidget *widget)
- BACKGROUND_COLOR ( GTK_WIDGET ( calendar)));
- gdk_window_show (priv->main_win);
- gdk_window_set_user_data (priv->main_win, widget);
-+
-+ /* Set widgets gc */
-+ calendar->gc = gdk_gc_new (widget->window);
-+
- gdk_window_set_background (widget->window, BACKGROUND_COLOR (widget));
- gdk_window_show (widget->window);
- gdk_window_set_user_data (widget->window, widget);
diff --git a/packages/gtk+/gtk+-2.10.6/run-iconcache.patch b/packages/gtk+/gtk+-2.10.6/run-iconcache.patch
deleted file mode 100644
index 5c114dbdda..0000000000
--- a/packages/gtk+/gtk+-2.10.6/run-iconcache.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: gtk+-2.10.6/gtk/Makefile.am
-===================================================================
---- gtk+-2.10.6.orig/gtk/Makefile.am 2006-10-30 12:56:34.000000000 +0000
-+++ gtk+-2.10.6/gtk/Makefile.am 2006-10-30 12:57:08.000000000 +0000
-@@ -1119,11 +1119,11 @@
- done \
- && touch stamp-icons
-
--gtkbuiltincache.h: @REBUILD@ stamp-icons
-- $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
-- GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders \
-- ./gtk-update-icon-cache --force --ignore-theme-index \
-- --source builtin_icons stock-icons > gtkbuiltincache.h
-+#gtkbuiltincache.h: @REBUILD@ stamp-icons
-+# $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
-+# GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders \
-+# ./gtk-update-icon-cache --force --ignore-theme-index \
-+# --source builtin_icons stock-icons > gtkbuiltincache.h
-
- EXTRA_DIST += \
- $(STOCK_ICONS) \
diff --git a/packages/gtk+/gtk+-2.10.6/scroll-timings.patch b/packages/gtk+/gtk+-2.10.6/scroll-timings.patch
deleted file mode 100644
index 3f823a7880..0000000000
--- a/packages/gtk+/gtk+-2.10.6/scroll-timings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.10.0/gtk/gtkrange.c.orig 2006-07-05 12:41:39.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkrange.c 2006-07-05 12:41:58.000000000 +0200
-@@ -39,7 +39,7 @@
- #include "gtkalias.h"
-
- #define SCROLL_DELAY_FACTOR 5 /* Scroll repeat multiplier */
--#define UPDATE_DELAY 300 /* Delay for queued update */
-+#define UPDATE_DELAY 1000 /* Delay for queued update */
-
- enum {
- PROP_0,
diff --git a/packages/gtk+/gtk+-2.10.6/small-gtkfilesel.patch b/packages/gtk+/gtk+-2.10.6/small-gtkfilesel.patch
deleted file mode 100644
index 20bf4cf366..0000000000
--- a/packages/gtk+/gtk+-2.10.6/small-gtkfilesel.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
---- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100
-@@ -68,6 +68,7 @@
- #include "gtkprivate.h"
- #include "gtkscrolledwindow.h"
- #include "gtkstock.h"
-+#include "gtksignal.h"
- #include "gtktreeselection.h"
- #include "gtktreeview.h"
- #include "gtkvbox.h"
-@@ -77,6 +78,7 @@
- #include "gtkmessagedialog.h"
- #include "gtkdnd.h"
- #include "gtkeventbox.h"
-+#include "gtkimage.h"
-
- #undef GTK_DISABLE_DEPRECATED
- #include "gtkoptionmenu.h"
-@@ -245,7 +247,8 @@
- };
-
- enum {
-- DIR_COLUMN
-+ DIR_COLUMN,
-+ ISFILE_COLUMN
- };
-
- enum {
-@@ -400,6 +403,12 @@
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data);
-+
-+static void gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data);
-+
- static void gtk_file_selection_file_changed (GtkTreeSelection *selection,
- gpointer user_data);
- static void gtk_file_selection_dir_activate (GtkTreeView *tree_view,
-@@ -419,6 +428,7 @@
- static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
-+static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style);
-
- static void free_selected_names (GPtrArray *names);
-
-@@ -578,6 +588,23 @@
- G_PARAM_WRITABLE));
- object_class->destroy = gtk_file_selection_destroy;
- widget_class->map = gtk_file_selection_map;
-+ widget_class->style_set = gtk_file_selection_style_set;
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_boolean ("show_fileops_default",
-+ _("Show fileop buttons by default"),
-+ _("Whether file operation buttons are shown by default"),
-+ TRUE,
-+ G_PARAM_READABLE));
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("border_width",
-+ _("Border width"),
-+ _("Width of border around the main dialog area"),
-+ 0,
-+ G_MAXINT,
-+ 10,
-+ G_PARAM_READABLE));
- }
-
- static void gtk_file_selection_set_property (GObject *object,
-@@ -649,7 +676,29 @@
- gtk_widget_grab_default (widget);
- return FALSE;
- }
--
-+
-+static void
-+gtk_file_selection_style_set (GtkWidget *filesel,
-+ GtkStyle *prev_style)
-+{
-+ gboolean show_fileops;
-+ gint border_width;
-+
-+ gtk_widget_style_get (filesel,
-+ "show_fileops_default",
-+ &show_fileops,
-+ "border_width",
-+ &border_width,
-+ NULL);
-+
-+ gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
-+
-+ if (show_fileops)
-+ gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+ else
-+ gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+}
-+
- static void
- gtk_file_selection_init (GtkFileSelection *filesel)
- {
-@@ -674,17 +723,15 @@
-
- /* The dialog-sized vertical box */
- filesel->main_vbox = dialog->vbox;
-- gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
-
- /* The horizontal box containing create, rename etc. buttons */
- filesel->button_area = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
-- gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area,
- FALSE, FALSE, 0);
- gtk_widget_show (filesel->button_area);
-
-- gtk_file_selection_show_fileop_buttons (filesel);
-+ gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
-
- /* hbox for pulldown menu */
- pulldown_hbox = gtk_hbox_new (TRUE, 5);
-@@ -723,25 +770,32 @@
-
- /* The directories list */
-
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
- filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
- g_object_unref (model);
-
-- column = gtk_tree_view_column_new_with_attributes (_("Folders"),
-+ column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
- gtk_cell_renderer_text_new (),
- "text", DIR_COLUMN,
- NULL);
- label = gtk_label_new_with_mnemonic (_("Fol_ders"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-+
-+ /* gtk_tree_view_column_set_widget (column, label); */
-+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
-+
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
-
- gtk_widget_set_size_request (filesel->dir_list,
- DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
- g_signal_connect (filesel->dir_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_dir_activate), filesel);
-+ G_CALLBACK (gtk_file_selection_activate), filesel);
-+
-+ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
-+ G_CALLBACK (gtk_file_selection_file_changed), filesel);
-+
-
- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
-
-@@ -758,41 +812,6 @@
- gtk_widget_show (filesel->dir_list);
- gtk_widget_show (scrolled_win);
-
-- /* The files list */
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-- filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
-- g_object_unref (model);
--
-- column = gtk_tree_view_column_new_with_attributes (_("Files"),
-- gtk_cell_renderer_text_new (),
-- "text", FILE_COLUMN,
-- NULL);
-- label = gtk_label_new_with_mnemonic (_("_Files"));
-- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
-- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
--
-- gtk_widget_set_size_request (filesel->file_list,
-- FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
-- g_signal_connect (filesel->file_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_file_activate), filesel);
-- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
-- G_CALLBACK (gtk_file_selection_file_changed), filesel);
--
-- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
--
-- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
-- gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
-- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-- gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
-- gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
-- gtk_widget_show (filesel->file_list);
-- gtk_widget_show (scrolled_win);
--
- /* action area for packing buttons into. */
- filesel->action_area = gtk_hbox_new (TRUE, 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area,
-@@ -2008,6 +2027,23 @@
- }
-
- static void
-+gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data)
-+{
-+ GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ gtk_tree_model_get_iter (model, &iter, path);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (! is_file)
-+ gtk_file_selection_dir_activate (tree_view, path, column, user_data);
-+}
-+
-+static void
- gtk_file_selection_file_activate (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
-@@ -2103,7 +2139,6 @@
- PossibleCompletion* poss;
- GtkTreeIter iter;
- GtkListStore *dir_model;
-- GtkListStore *file_model;
- gchar* filename;
- gchar* rem_path = rel_path;
- gchar* sel_text;
-@@ -2125,10 +2160,8 @@
- g_assert (cmpl_state->reference_dir);
-
- dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
-- file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
-
- gtk_list_store_clear (dir_model);
-- gtk_list_store_clear (file_model);
-
- /* Set the dir list to include ./ and ../ */
- gtk_list_store_append (dir_model, &iter);
-@@ -2150,13 +2183,17 @@
- strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
- {
- gtk_list_store_append (dir_model, &iter);
-- gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, FALSE, -1);
- }
- }
- else
- {
-- gtk_list_store_append (file_model, &iter);
-- gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_append (dir_model, &iter);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, TRUE, -1);
- }
- }
-
diff --git a/packages/gtk+/gtk+-2.10.6/xsettings.patch b/packages/gtk+/gtk+-2.10.6/xsettings.patch
deleted file mode 100644
index b63e262d34..0000000000
--- a/packages/gtk+/gtk+-2.10.6/xsettings.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- gtk+-2.4.4/gdk/x11/gdkevents-x11.c.old Sun Aug 22 17:14:00 2004
-+++ gtk+-2.4.4/gdk/x11/gdkevents-x11.c Sun Aug 22 17:14:00 2004
-@@ -2827,10 +2827,9 @@
- {
- GdkScreenX11 *screen = data;
-
-- if (xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent))
-- return GDK_FILTER_REMOVE;
-- else
-- return GDK_FILTER_CONTINUE;
-+ xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent);
-+
-+ return GDK_FILTER_CONTINUE;
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.7/automake-lossage.patch b/packages/gtk+/gtk+-2.10.7/automake-lossage.patch
deleted file mode 100644
index 0d423ddbb9..0000000000
--- a/packages/gtk+/gtk+-2.10.7/automake-lossage.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- gtk+-2.4.1/docs/tutorial/Makefile.am~ 2003-05-06 22:54:20.000000000 +0100
-+++ gtk+-2.4.1/docs/tutorial/Makefile.am 2004-05-08 12:31:41.000000000 +0100
-@@ -52,21 +52,5 @@
-
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
--else
--html:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--dist-hook:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "*** DISTRIBUTION IS INCOMPLETE"
-- echo "***"
- endif
-
diff --git a/packages/gtk+/gtk+-2.10.7/disable-print.patch b/packages/gtk+/gtk+-2.10.7/disable-print.patch
deleted file mode 100644
index 1067773f12..0000000000
--- a/packages/gtk+/gtk+-2.10.7/disable-print.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- gtk+-2.10.0/configure.in~ 2006-07-05 18:11:44.000000000 +0200
-+++ gtk+-2.10.0/configure.in 2006-07-05 18:11:44.000000000 +0200
-@@ -1539,26 +1539,27 @@
- # Printing system checks
- ################################################################
-
--AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
--if test "x$CUPS_CONFIG" != "xno"; then
-- CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-- CUPS_LIBS=`cups-config --libs`
--
-- CUPS_API_VERSION=`cups-config --api-version`
-- CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-- CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
--
-- if test $CUPS_API_MAJOR -gt 1 -o \
-- $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-- AC_DEFINE(HAVE_CUPS_API_1_2)
-- fi
--
-- AC_SUBST(CUPS_API_MAJOR)
-- AC_SUBST(CUPS_API_MINOR)
-- AC_SUBST(CUPS_CFLAGS)
-- AC_SUBST(CUPS_LIBS)
--fi
--AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+#AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
-+#if test "x$CUPS_CONFIG" != "xno"; then
-+# CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-+# CUPS_LIBS=`cups-config --libs`
-+#
-+# CUPS_API_VERSION=`cups-config --api-version`
-+# CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-+# CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
-+#
-+# if test $CUPS_API_MAJOR -gt 1 -o \
-+# $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-+# AC_DEFINE(HAVE_CUPS_API_1_2)
-+# fi
-+#
-+# AC_SUBST(CUPS_API_MAJOR)
-+# AC_SUBST(CUPS_API_MINOR)
-+# AC_SUBST(CUPS_CFLAGS)
-+# AC_SUBST(CUPS_LIBS)
-+#fi
-+#AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+AM_CONDITIONAL(HAVE_CUPS,false)
-
- gtk_save_cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS"
diff --git a/packages/gtk+/gtk+-2.10.7/disable-tooltips.patch b/packages/gtk+/gtk+-2.10.7/disable-tooltips.patch
deleted file mode 100644
index d71d839c3c..0000000000
--- a/packages/gtk+/gtk+-2.10.7/disable-tooltips.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.4.3/gtk/gtktooltips.c.old 2004-07-04 18:52:04.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtktooltips.c 2004-07-04 18:52:08.000000000 +0100
-@@ -118,7 +118,7 @@
- tooltips->tips_data_list = NULL;
-
- tooltips->delay = DEFAULT_DELAY;
-- tooltips->enabled = TRUE;
-+ tooltips->enabled = FALSE;
- tooltips->timer_tag = 0;
- tooltips->use_sticky_delay = FALSE;
- tooltips->last_popdown.tv_sec = -1;
diff --git a/packages/gtk+/gtk+-2.10.7/gtk+-handhelds.patch b/packages/gtk+/gtk+-2.10.7/gtk+-handhelds.patch
deleted file mode 100644
index 1ea86ce6b2..0000000000
--- a/packages/gtk+/gtk+-2.10.7/gtk+-handhelds.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkarrow.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkarrow.c 2006-05-14 05:25:28.000000000 +0100
-+++ gtk+-2.10.6/gtk/gtkarrow.c 2006-11-14 12:03:45.000000000 +0000
-@@ -31,7 +31,7 @@
- #include "gtkintl.h"
- #include "gtkalias.h"
-
--#define MIN_ARROW_SIZE 15
-+#define MIN_ARROW_SIZE 7
-
- enum {
- PROP_0,
-@@ -53,6 +53,8 @@
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-+static void gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition);
-
-
- G_DEFINE_TYPE (GtkArrow, gtk_arrow, GTK_TYPE_MISC)
-@@ -88,6 +90,7 @@
- GTK_PARAM_READWRITE));
-
- widget_class->expose_event = gtk_arrow_expose;
-+ widget_class->size_request = gtk_arrow_size_request;
- }
-
- static void
-@@ -143,13 +146,18 @@
- }
-
- static void
-+gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition)
-+{
-+ requisition->width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-+ requisition->height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
-+}
-+
-+static void
- gtk_arrow_init (GtkArrow *arrow)
- {
- GTK_WIDGET_SET_FLAGS (arrow, GTK_NO_WINDOW);
-
-- GTK_WIDGET (arrow)->requisition.width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-- GTK_WIDGET (arrow)->requisition.height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
--
- arrow->arrow_type = GTK_ARROW_RIGHT;
- arrow->shadow_type = GTK_SHADOW_OUT;
- }
-Index: gtk+-2.10.6/gtk/gtkentry.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkentry.c 2006-11-14 12:03:45.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkentry.c 2006-11-14 12:07:02.000000000 +0000
-@@ -577,6 +577,18 @@
- 0.0,
- GTK_PARAM_READWRITE));
-
-+ // Added by gtk+-handhelds.patch
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("min_width",
-+ P_("Minimum width"),
-+ P_("Minimum width of the entry field"),
-+ 0,
-+ G_MAXINT,
-+ MIN_ENTRY_WIDTH,
-+ G_PARAM_READABLE));
-+
-+
-+
- /**
- * GtkEntry:truncate-multiline:
- *
-@@ -1286,7 +1298,7 @@
- {
- GtkEntry *entry = GTK_ENTRY (widget);
- PangoFontMetrics *metrics;
-- gint xborder, yborder;
-+ gint xborder, yborder, min_width;
- GtkBorder inner_border;
- PangoContext *context;
-
-@@ -1302,8 +1314,10 @@
- _gtk_entry_get_borders (entry, &xborder, &yborder);
- _gtk_entry_effective_inner_border (entry, &inner_border);
-
-+ gtk_widget_style_get (widget, "min_width", &min_width, NULL);
-+
- if (entry->width_chars < 0)
-- requisition->width = MIN_ENTRY_WIDTH + xborder * 2 + inner_border.left + inner_border.right;
-+ requisition->width = min_width + xborder * 2 + inner_border.left + inner_border.right;
- else
- {
- gint char_width = pango_font_metrics_get_approximate_char_width (metrics);
-Index: gtk+-2.10.6/gtk/gtkrange.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkrange.c 2006-11-14 12:03:44.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkrange.c 2006-11-14 12:07:40.000000000 +0000
-@@ -197,6 +197,7 @@
- static gboolean gtk_range_key_press (GtkWidget *range,
- GdkEventKey *event);
-
-+static GdkAtom recognize_protocols_atom, atom_atom;
-
- static guint signals[LAST_SIGNAL];
-
-@@ -213,6 +214,9 @@
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
-
-+ recognize_protocols_atom = gdk_atom_intern ("RECOGNIZE_PROTOCOLS", FALSE);
-+ atom_atom = gdk_atom_intern ("ATOM", FALSE);
-+
- gobject_class->set_property = gtk_range_set_property;
- gobject_class->get_property = gtk_range_get_property;
- gobject_class->finalize = gtk_range_finalize;
-@@ -1020,6 +1024,12 @@
- &attributes, attributes_mask);
- gdk_window_set_user_data (range->event_window, range);
-
-+ gdk_property_change (range->event_window,
-+ recognize_protocols_atom,
-+ atom_atom,
-+ 32, GDK_PROP_MODE_REPLACE,
-+ NULL, 0);
-+
- widget->style = gtk_style_attach (widget->style, widget->window);
- }
-
-@@ -1569,7 +1579,7 @@
-
- /* ignore presses when we're already doing something else. */
- if (range->layout->grab_location != MOUSE_OUTSIDE)
-- return FALSE;
-+ return TRUE;
-
- range->layout->mouse_x = event->x;
- range->layout->mouse_y = event->y;
-@@ -1778,7 +1788,7 @@
- return TRUE;
- }
-
-- return FALSE;
-+ return TRUE;
- }
-
- /**
diff --git a/packages/gtk+/gtk+-2.10.7/gtklabel-resize-patch b/packages/gtk+/gtk+-2.10.7/gtklabel-resize-patch
deleted file mode 100644
index df29656343..0000000000
--- a/packages/gtk+/gtk+-2.10.7/gtklabel-resize-patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtklabel.c 2004-07-05 13:33:57.000000000 +0100
-@@ -1623,6 +1623,7 @@
-
- /* We have to clear the layout, fonts etc. may have changed */
- gtk_label_clear_layout (label);
-+ gtk_widget_queue_resize (GTK_WIDGET (label));
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.7/menu-deactivate.patch b/packages/gtk+/gtk+-2.10.7/menu-deactivate.patch
deleted file mode 100644
index cfb8849e9f..0000000000
--- a/packages/gtk+/gtk+-2.10.7/menu-deactivate.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- gtk+-2.10.0/gtk/gtkmenushell.c.orig 2006-07-05 17:17:34.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkmenushell.c 2006-07-05 17:19:01.000000000 +0200
-@@ -42,7 +42,7 @@
- #include "gtkintl.h"
- #include "gtkalias.h"
-
--#define MENU_SHELL_TIMEOUT 500
-+#define MENU_SHELL_TIMEOUT 2000
-
- #define PACK_DIRECTION(m) \
- (GTK_IS_MENU_BAR (m) \
-@@ -203,6 +203,8 @@
-
- G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER)
-
-+static int last_crossing_time;
-+
- static void
- gtk_menu_shell_class_init (GtkMenuShellClass *klass)
- {
-@@ -517,6 +519,7 @@
- gtk_grab_add (GTK_WIDGET (menu_shell));
- menu_shell->have_grab = TRUE;
- menu_shell->active = TRUE;
-+ last_crossing_time = 0;
- }
- }
-
-@@ -669,6 +672,13 @@
- menu_shell->activate_time = 0;
- deactivate = FALSE;
- }
-+
-+ if (last_crossing_time != 0
-+ && ((event->time - last_crossing_time) < 500))
-+ {
-+ last_crossing_time = 0;
-+ deactivate = FALSE;
-+ }
-
- if (deactivate)
- {
-@@ -716,6 +726,8 @@
- {
- menu_item = gtk_get_event_widget ((GdkEvent*) event);
-
-+ last_crossing_time = event->time;
-+
- if (!menu_item ||
- (GTK_IS_MENU_ITEM (menu_item) &&
- !_gtk_menu_item_is_selectable (menu_item)))
diff --git a/packages/gtk+/gtk+-2.10.7/migration.patch b/packages/gtk+/gtk+-2.10.7/migration.patch
deleted file mode 100644
index 4ee786e688..0000000000
--- a/packages/gtk+/gtk+-2.10.7/migration.patch
+++ /dev/null
@@ -1,611 +0,0 @@
-Index: configure.in
-===================================================================
---- configure.in.orig 2006-10-03 17:54:09.000000000 +0100
-+++ configure.in 2006-10-30 12:58:33.000000000 +0000
-@@ -1529,6 +1529,16 @@
- GTK_EXTRA_CFLAGS="$msnative_struct"
- fi
-
-+AC_ARG_ENABLE(display-migration,
-+ [AC_HELP_STRING([--enable-display-migration],
-+ [include support for GPE_CHANGE_DISPLAY protocol])],
-+ enable_migration=yes, enable_migration=no)
-+if test "$enable_migration" = "yes"; then
-+ AC_DEFINE([ENABLE_MIGRATION], 1, [Define if display migration is enabled])
-+ GTK_DEP_LIBS="$GTK_DEP_LIBS -lgcrypt"
-+fi
-+AM_CONDITIONAL(ENABLE_MIGRATION, test $enable_migration = "yes")
-+
- AC_SUBST(GTK_PACKAGES)
- AC_SUBST(GTK_EXTRA_LIBS)
- AC_SUBST(GTK_EXTRA_CFLAGS)
-Index: gtk/Makefile.am
-===================================================================
---- gtk/Makefile.am.orig 2006-10-02 18:27:53.000000000 +0100
-+++ gtk/Makefile.am 2006-10-30 12:59:14.000000000 +0000
-@@ -589,6 +589,11 @@
- gtkwindow-decorate.c \
- gtkwindow.c \
- $(gtk_clipboard_dnd_c_sources)
-+
-+if ENABLE_MIGRATION
-+gtk_base_c_sources += gtkmigration.c
-+endif
-+
- gtk_c_sources = $(gtk_base_c_sources)
- gtk_all_c_sources = $(gtk_base_c_sources)
-
-Index: gtk/gtkmain.c
-===================================================================
---- gtk/gtkmain.c.orig 2006-09-03 06:31:21.000000000 +0100
-+++ gtk/gtkmain.c 2006-10-30 12:56:34.000000000 +0000
-@@ -507,6 +507,10 @@
- _gtk_accel_map_init ();
- _gtk_rc_init ();
-
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_init ();
-+#endif
-+
- /* Set the 'initialized' flag.
- */
- gtk_initialized = TRUE;
-Index: gtk/gtkmigration.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gtk/gtkmigration.c 2006-10-30 12:56:34.000000000 +0000
-@@ -0,0 +1,529 @@
-+/*
-+ * Copyright (C) 2003, 2005 Philip Blundell <philb@gnu.org>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version.
-+ */
-+
-+#include <stdlib.h>
-+#include <ctype.h>
-+#include <libintl.h>
-+#include <string.h>
-+#include <assert.h>
-+
-+#include <X11/X.h>
-+#include <X11/Xlib.h>
-+#include <X11/Xatom.h>
-+
-+#include <gcrypt.h>
-+
-+#include "gtk.h"
-+#include "gdk.h"
-+#include "x11/gdkx.h"
-+
-+#define _(x) gettext(x)
-+
-+static GdkAtom string_gdkatom, display_change_gdkatom;
-+static GdkAtom rsa_challenge_gdkatom;
-+
-+#define DISPLAY_CHANGE_SUCCESS 0
-+#define DISPLAY_CHANGE_UNABLE_TO_CONNECT 1
-+#define DISPLAY_CHANGE_NO_SUCH_SCREEN 2
-+#define DISPLAY_CHANGE_AUTHENTICATION_BAD 3
-+#define DISPLAY_CHANGE_INDETERMINATE_ERROR 4
-+
-+static gboolean no_auth;
-+
-+static GSList *all_widgets;
-+
-+static gboolean gtk_migration_initialised;
-+
-+#define CHALLENGE_LEN 64
-+
-+gchar *gtk_migration_auth_challenge_string;
-+
-+static unsigned char challenge_bytes[CHALLENGE_LEN];
-+static unsigned long challenge_seq;
-+
-+#define hexbyte(x) ((x) >= 10 ? (x) + 'a' - 10 : (x) + '0')
-+
-+struct rsa_key
-+{
-+ gcry_mpi_t n, e, d, p, q, u;
-+};
-+
-+static gcry_mpi_t
-+mpi_from_sexp (gcry_sexp_t r, char *tag)
-+{
-+ gcry_sexp_t s = gcry_sexp_find_token (r, tag, 0);
-+ return gcry_sexp_nth_mpi (s, 1, GCRYMPI_FMT_USG);
-+}
-+
-+static char *
-+hex_from_mpi (gcry_mpi_t m)
-+{
-+ char *buf;
-+ gcry_mpi_aprint (GCRYMPI_FMT_HEX, (void *)&buf, NULL, m);
-+ return buf;
-+}
-+
-+static void
-+gtk_migration_crypt_create_hash (char *display, char *challenge, size_t len, char *result)
-+{
-+ size_t dlen = strlen (display);
-+ gchar *buf = g_malloc (dlen + 1 + len);
-+ strcpy (buf, display);
-+ memcpy (buf + dlen + 1, challenge, len);
-+ gcry_md_hash_buffer (GCRY_MD_SHA1, result, buf, len + dlen + 1);
-+ g_free (buf);
-+}
-+
-+static int
-+do_encode_md (const unsigned char *digest, size_t digestlen, int algo,
-+ unsigned int nbits, gcry_mpi_t *r_val)
-+{
-+ int nframe = (nbits+7) / 8;
-+ unsigned char *frame;
-+ int i, n;
-+ unsigned char asn[100];
-+ size_t asnlen;
-+
-+ asnlen = sizeof(asn);
-+ if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
-+ return -1;
-+
-+ if (digestlen + asnlen + 4 > nframe )
-+ return -1;
-+
-+ /* We encode the MD in this way:
-+ *
-+ * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes)
-+ *
-+ * PAD consists of FF bytes.
-+ */
-+ frame = g_malloc (nframe);
-+ n = 0;
-+ frame[n++] = 0;
-+ frame[n++] = 1; /* block type */
-+ i = nframe - digestlen - asnlen -3 ;
-+ assert ( i > 1 );
-+ memset ( frame+n, 0xff, i ); n += i;
-+ frame[n++] = 0;
-+ memcpy ( frame+n, asn, asnlen ); n += asnlen;
-+ memcpy ( frame+n, digest, digestlen ); n += digestlen;
-+ assert ( n == nframe );
-+
-+ gcry_mpi_scan (r_val, GCRYMPI_FMT_USG, frame, nframe, &nframe);
-+ g_free (frame);
-+ return 0;
-+}
-+
-+static gboolean
-+gtk_migration_crypt_check_signature (struct rsa_key *k, char *hash, char *sigbuf)
-+{
-+ gcry_mpi_t mpi, mpi2;
-+ gcry_sexp_t data, sig, key;
-+ int rc;
-+
-+ do_encode_md (hash, 20, GCRY_MD_SHA1, 1024, &mpi);
-+
-+ gcry_sexp_build (&data, NULL, "(data (value %m))", mpi);
-+
-+ gcry_mpi_release (mpi);
-+
-+ gcry_sexp_build (&key, NULL, "(public-key (rsa (n %m) (e %m)))", k->n, k->e);
-+
-+ if (gcry_mpi_scan (&mpi2, GCRYMPI_FMT_HEX, sigbuf, 0, NULL))
-+ {
-+ gcry_sexp_release (data);
-+ return FALSE;
-+ }
-+
-+ gcry_sexp_build (&sig, NULL, "(sig-val (rsa (s %m)))", mpi2);
-+
-+ rc = gcry_pk_verify (sig, data, key);
-+
-+ gcry_sexp_release (data);
-+ gcry_sexp_release (key);
-+ gcry_sexp_release (sig);
-+ gcry_mpi_release (mpi2);
-+
-+ if (rc)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static void
-+gtk_migration_auth_update_challenge (void)
-+{
-+ int i;
-+ unsigned char *p;
-+
-+ if (gtk_migration_auth_challenge_string == NULL)
-+ gtk_migration_auth_challenge_string = g_malloc ((CHALLENGE_LEN * 2) + 9);
-+
-+ p = gtk_migration_auth_challenge_string;
-+
-+ for (i = 0; i < CHALLENGE_LEN; i++)
-+ {
-+ *p++ = hexbyte (challenge_bytes[i] >> 4);
-+ *p++ = hexbyte (challenge_bytes[i] & 15);
-+ }
-+
-+ sprintf (p, "%08lx", challenge_seq++);
-+}
-+
-+static void
-+gtk_migration_auth_generate_challenge (void)
-+{
-+ gcry_randomize (challenge_bytes, sizeof (challenge_bytes), GCRY_STRONG_RANDOM);
-+ gtk_migration_auth_update_challenge ();
-+}
-+
-+static struct rsa_key *
-+parse_pubkey (char *s)
-+{
-+ struct rsa_key *r;
-+ gcry_mpi_t n, e;
-+ gchar *sp;
-+
-+ sp = strtok (s, " \n");
-+ gcry_mpi_scan (&e, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+ sp = strtok (NULL, " \n");
-+ gcry_mpi_scan (&n, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+
-+ r = g_malloc0 (sizeof (struct rsa_key));
-+ r->e = e;
-+ r->n = n;
-+ return r;
-+}
-+
-+static struct rsa_key *
-+lookup_pubkey (u_int32_t id)
-+{
-+ const gchar *home_dir = g_get_home_dir ();
-+ gchar *filename = g_strdup_printf ("%s/.gpe/migrate/public", home_dir);
-+ FILE *fp = fopen (filename, "r");
-+ struct rsa_key *r = NULL;
-+
-+ if (fp)
-+ {
-+ while (!feof (fp))
-+ {
-+ char buffer[4096];
-+ if (fgets (buffer, 4096, fp))
-+ {
-+ char *p;
-+ u_int32_t this_id = strtoul (buffer, &p, 16);
-+ if (p != buffer && *p == ' ')
-+ {
-+#ifdef DEBUG
-+ fprintf (stderr, "found id %x\n", this_id);
-+#endif
-+ if (this_id == id)
-+ {
-+ r = parse_pubkey (++p);
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ fclose (fp);
-+ }
-+
-+ g_free (filename);
-+ return r;
-+}
-+
-+static void
-+free_pubkey (struct rsa_key *k)
-+{
-+ gcry_mpi_release (k->n);
-+ gcry_mpi_release (k->e);
-+
-+ g_free (k);
-+}
-+
-+static gboolean
-+gtk_migration_auth_validate_request (char *display, char *data)
-+{
-+ u_int32_t key_id;
-+ char *ep;
-+ char *p;
-+ struct rsa_key *k;
-+ char hash[20];
-+ gboolean rc;
-+
-+ p = strchr (data, ' ');
-+ if (p == NULL)
-+ return FALSE;
-+ *p++ = 0;
-+
-+ key_id = strtoul (data, &ep, 16);
-+ if (*ep)
-+ return FALSE;
-+
-+ k = lookup_pubkey (key_id);
-+ if (k == NULL)
-+ return FALSE;
-+
-+ gtk_migration_crypt_create_hash (display, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string), hash);
-+
-+ rc = gtk_migration_crypt_check_signature (k, hash, p);
-+
-+ free_pubkey (k);
-+
-+ return rc;
-+}
-+
-+static int
-+do_change_display (GtkWidget *w, char *display_name)
-+{
-+ GdkDisplay *newdisplay;
-+ guint screen_nr = 1;
-+ guint i;
-+
-+ if (display_name[0] == 0)
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+
-+ i = strlen (display_name) - 1;
-+ while (i > 0 && isdigit (display_name[i]))
-+ i--;
-+
-+ if (display_name[i] == '.')
-+ {
-+ screen_nr = atoi (display_name + i + 1);
-+ display_name[i] = 0;
-+ }
-+
-+ newdisplay = gdk_display_open (display_name);
-+ if (newdisplay)
-+ {
-+ GdkScreen *screen = gdk_display_get_screen (newdisplay, screen_nr);
-+ if (screen)
-+ {
-+ gtk_window_set_screen (GTK_WINDOW (w), screen);
-+ gdk_display_manager_set_default_display (gdk_display_manager_get (),
-+ newdisplay);
-+ return DISPLAY_CHANGE_SUCCESS;
-+ }
-+ else
-+ return DISPLAY_CHANGE_NO_SUCH_SCREEN;
-+ }
-+
-+ return DISPLAY_CHANGE_UNABLE_TO_CONNECT;
-+}
-+
-+static void
-+set_challenge_on_window (GdkWindow *window)
-+{
-+ gdk_property_change (window, rsa_challenge_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string));
-+}
-+
-+static void
-+update_challenge_on_windows (void)
-+{
-+ GSList *i;
-+
-+ gtk_migration_auth_update_challenge ();
-+
-+ for (i = all_widgets; i; i = i->next)
-+ {
-+ GtkWidget *w = GTK_WIDGET (i->data);
-+ if (w->window)
-+ set_challenge_on_window (w->window);
-+ }
-+}
-+
-+static void
-+reset_state (GdkWindow *window)
-+{
-+ gdk_property_change (window, display_change_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, NULL, 0);
-+}
-+
-+static void
-+generate_response (GdkDisplay *gdisplay, Display *dpy, Window window, int code)
-+{
-+ XClientMessageEvent ev;
-+ Atom atom = gdk_x11_atom_to_xatom_for_display (gdisplay,
-+ display_change_gdkatom);
-+
-+ memset (&ev, 0, sizeof (ev));
-+
-+ ev.type = ClientMessage;
-+ ev.window = window;
-+ ev.message_type = atom;
-+ ev.format = 32;
-+
-+ ev.data.l[0] = window;
-+ ev.data.l[1] = code;
-+
-+ XSendEvent (dpy, DefaultRootWindow (dpy), False, SubstructureNotifyMask, (XEvent *)&ev);
-+}
-+
-+static int
-+handle_request (GdkWindow *gwindow, char *prop)
-+{
-+ GtkWidget *widget;
-+ char *target, *auth_method, *auth_data;
-+ char *p;
-+
-+ target = prop;
-+ auth_method = "NULL";
-+ auth_data = NULL;
-+
-+ p = strchr (prop, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_method = ++p;
-+
-+ p = strchr (p, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_data = ++p;
-+ }
-+ }
-+
-+ if (no_auth == FALSE)
-+ {
-+ if (!strcasecmp (auth_method, "null"))
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ else if (!strcasecmp (auth_method, "rsa-sig"))
-+ {
-+ if (gtk_migration_auth_validate_request (target, auth_data) == FALSE)
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+ else
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+
-+ gdk_window_get_user_data (gwindow, (gpointer*) &widget);
-+
-+ if (widget)
-+ return do_change_display (widget, target);
-+
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+}
-+
-+static GdkFilterReturn
-+filter_func (GdkXEvent *xevp, GdkEvent *ev, gpointer p)
-+{
-+ XPropertyEvent *xev = (XPropertyEvent *)xevp;
-+
-+ if (xev->type == PropertyNotify)
-+ {
-+ GdkDisplay *gdisplay;
-+ Atom atom;
-+
-+ gdisplay = gdk_x11_lookup_xdisplay (xev->display);
-+ if (gdisplay)
-+ {
-+ atom = gdk_x11_atom_to_xatom_for_display (gdisplay, display_change_gdkatom);
-+
-+ if (xev->atom == atom)
-+ {
-+ GdkWindow *gwindow;
-+
-+ gwindow = gdk_window_lookup_for_display (gdisplay, xev->window);
-+
-+ if (gwindow)
-+ {
-+ GdkAtom actual_type;
-+ gint actual_format;
-+ gint actual_length;
-+ unsigned char *prop = NULL;
-+
-+ if (gdk_property_get (gwindow, display_change_gdkatom, string_gdkatom,
-+ 0, G_MAXLONG, FALSE, &actual_type, &actual_format,
-+ &actual_length, &prop))
-+ {
-+ if (actual_length != 0)
-+ {
-+ if (actual_type == string_gdkatom && actual_length > 8)
-+ {
-+ gchar *buf = g_malloc (actual_length + 1);
-+ int rc;
-+
-+ memcpy (buf, prop, actual_length);
-+ buf[actual_length] = 0;
-+
-+ rc = handle_request (gwindow, buf);
-+
-+ g_free (buf);
-+ generate_response (gdisplay, xev->display, xev->window, rc);
-+
-+ if (rc == DISPLAY_CHANGE_SUCCESS)
-+ update_challenge_on_windows ();
-+ }
-+
-+ reset_state (gwindow);
-+ }
-+ }
-+
-+ if (prop)
-+ g_free (prop);
-+ }
-+ }
-+
-+ return GDK_FILTER_REMOVE;
-+ }
-+ }
-+
-+ return GDK_FILTER_CONTINUE;
-+}
-+
-+static void
-+unrealize_window (GtkWidget *w)
-+{
-+ all_widgets = g_slist_remove (all_widgets, w);
-+}
-+
-+void
-+gtk_migration_mark_window (GtkWidget *w)
-+{
-+ if (! gtk_migration_initialised)
-+ {
-+ g_warning ("gtk_migration not initialised yet");
-+ return;
-+ }
-+
-+ if (GTK_WIDGET_REALIZED (w))
-+ {
-+ GdkWindow *window = w->window;
-+
-+ gdk_window_add_filter (window, filter_func, NULL);
-+
-+ reset_state (window);
-+ set_challenge_on_window (window);
-+
-+ all_widgets = g_slist_append (all_widgets, w);
-+
-+ g_signal_connect (G_OBJECT (w), "unrealize", G_CALLBACK (unrealize_window), NULL);
-+ }
-+ else
-+ g_signal_connect (G_OBJECT (w), "realize", G_CALLBACK (gtk_migration_mark_window), NULL);
-+}
-+
-+void
-+gtk_migration_init (void)
-+{
-+ if (getenv ("GPE_DISPLAY_MIGRATION_NO_AUTH") != NULL)
-+ no_auth = TRUE;
-+
-+ string_gdkatom = gdk_atom_intern ("STRING", FALSE);
-+ display_change_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE", FALSE);
-+ rsa_challenge_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE_RSA_CHALLENGE", FALSE);
-+
-+ gtk_migration_auth_generate_challenge ();
-+
-+ gtk_migration_initialised = TRUE;
-+}
-Index: gtk/gtkwindow.c
-===================================================================
---- gtk/gtkwindow.c.orig 2006-10-03 16:51:46.000000000 +0100
-+++ gtk/gtkwindow.c 2006-10-30 12:56:34.000000000 +0000
-@@ -50,6 +50,9 @@
- #include "x11/gdkx.h"
- #endif
-
-+extern void gtk_migration_mark_window (GtkWidget *w);
-+
-+
- enum {
- SET_FOCUS,
- FRAME_EVENT,
-@@ -823,6 +826,10 @@
-
- g_signal_connect (window->screen, "composited_changed",
- G_CALLBACK (gtk_window_on_composited_changed), window);
-+
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_mark_window (window);
-+#endif
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.7/no-demos.patch b/packages/gtk+/gtk+-2.10.7/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/packages/gtk+/gtk+-2.10.7/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.10.7/no-xwc.patch b/packages/gtk+/gtk+-2.10.7/no-xwc.patch
deleted file mode 100644
index affb4a303e..0000000000
--- a/packages/gtk+/gtk+-2.10.7/no-xwc.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2004-11-30 14:57:14 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2005-01-02 15:38:06 +00:00
-@@ -576,12 +576,14 @@
- GDK_GC_GET_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
- }
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
- XmbDrawString (xdisplay, impl->xid,
- fontset, GDK_GC_GET_XGC (gc), x, y, text, text_length);
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-@@ -613,6 +615,7 @@
- GDK_GC_GET_XGC (gc), x, y, text_8bit, text_length);
- g_free (text_8bit);
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- if (sizeof(GdkWChar) == sizeof(wchar_t))
-@@ -633,6 +636,7 @@
- g_free (text_wchar);
- }
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c gtk+-2.6.0/gdk/x11/gdkfont-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2004-08-26 01:23:46 +01:00
-+++ gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2005-01-02 15:45:39 +00:00
-@@ -525,10 +525,12 @@
- width = XTextWidth16 (xfont, (XChar2b *) text, text_length / 2);
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, text, text_length);
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -578,6 +580,7 @@
- width = 0;
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- if (sizeof(GdkWChar) == sizeof(wchar_t))
- {
-@@ -595,6 +598,7 @@
- g_free (text_wchar);
- }
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -667,6 +671,7 @@
- if (descent)
- *descent = overall.descent;
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &logical);
-@@ -681,6 +686,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-@@ -753,6 +759,7 @@
- *descent = overall.descent;
- break;
- }
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
-
-@@ -780,6 +787,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c gtk+-2.6.0/gdk/x11/gdkim-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c 2004-11-17 00:55:10 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkim-x11.c 2005-01-02 15:42:04 +00:00
-@@ -48,6 +48,7 @@
- void
- _gdk_x11_initialize_locale (void)
- {
-+#ifdef HAVE_XWC
- wchar_t result;
- gchar *current_locale;
- static char *last_locale = NULL;
-@@ -93,7 +94,8 @@
- GDK_NOTE (XIM,
- g_message ("%s multi-byte string functions.",
- gdk_use_mb ? "Using" : "Not using"));
--
-+#endif
-+
- return;
- }
-
-@@ -136,6 +138,7 @@
- {
- gchar *mbstr;
-
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -178,6 +181,7 @@
- XFree (tpr.value);
- }
- else
-+#endif
- {
- gint length = 0;
- gint i;
-@@ -210,6 +214,7 @@
- gint
- gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
- {
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -242,6 +247,7 @@
- return len_cpy;
- }
- else
-+#endif
- {
- gint i;
-
diff --git a/packages/gtk+/gtk+-2.10.7/scroll-timings.patch b/packages/gtk+/gtk+-2.10.7/scroll-timings.patch
deleted file mode 100644
index 3f823a7880..0000000000
--- a/packages/gtk+/gtk+-2.10.7/scroll-timings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.10.0/gtk/gtkrange.c.orig 2006-07-05 12:41:39.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkrange.c 2006-07-05 12:41:58.000000000 +0200
-@@ -39,7 +39,7 @@
- #include "gtkalias.h"
-
- #define SCROLL_DELAY_FACTOR 5 /* Scroll repeat multiplier */
--#define UPDATE_DELAY 300 /* Delay for queued update */
-+#define UPDATE_DELAY 1000 /* Delay for queued update */
-
- enum {
- PROP_0,
diff --git a/packages/gtk+/gtk+-2.10.7/single-click.patch b/packages/gtk+/gtk+-2.10.7/single-click.patch
deleted file mode 100644
index 250f1629f5..0000000000
--- a/packages/gtk+/gtk+-2.10.7/single-click.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkcalendar.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c
-+++ gtk+-2.10.6/gtk/gtkcalendar.c
-@@ -2482,9 +2482,11 @@ calendar_main_button_press (GtkCalendar
- }
-
- calendar_select_and_focus_day (calendar, day);
-- }
-+
-+ // This change causes the calendar to disappear after choosing a day
-+/* }
- else if (event->type == GDK_2BUTTON_PRESS)
-- {
-+ {*/
- priv->in_drag = 0;
- if (day_month == MONTH_CURRENT)
- g_signal_emit (calendar,
-Index: gtk+-2.10.6/gtk/gtkfilesel.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkfilesel.c
-+++ gtk+-2.10.6/gtk/gtkfilesel.c
-@@ -2426,6 +2426,33 @@ gtk_file_selection_file_changed (GtkTree
- if (fs->last_selected != NULL)
- g_free (fs->last_selected);
-
-+ // Single-click directory entry
-+ if (new_names->len == 1)
-+ {
-+ GtkTreeView *tree_view;
-+ GtkTreeModel *model;
-+ GtkTreePath *path;
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ tree_view = gtk_tree_selection_get_tree_view (selection);
-+
-+ if (gtk_tree_selection_get_selected (selection, &model, &iter))
-+ {
-+ path = gtk_tree_model_get_path (model, &iter);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (!is_file)
-+ {
-+ gtk_file_selection_dir_activate (tree_view, path,
-+ gtk_tree_view_get_column (tree_view, DIR_COLUMN),
-+ user_data);
-+ }
-+
-+ gtk_tree_path_free (path);
-+ }
-+ }
-+
- fs->last_selected = g_strdup (g_ptr_array_index (new_names, index));
- filename = get_real_filename (fs->last_selected, FALSE);
-
diff --git a/packages/gtk+/gtk+-2.10.7/small-gtkfilesel.patch b/packages/gtk+/gtk+-2.10.7/small-gtkfilesel.patch
deleted file mode 100644
index 20bf4cf366..0000000000
--- a/packages/gtk+/gtk+-2.10.7/small-gtkfilesel.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
---- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100
-@@ -68,6 +68,7 @@
- #include "gtkprivate.h"
- #include "gtkscrolledwindow.h"
- #include "gtkstock.h"
-+#include "gtksignal.h"
- #include "gtktreeselection.h"
- #include "gtktreeview.h"
- #include "gtkvbox.h"
-@@ -77,6 +78,7 @@
- #include "gtkmessagedialog.h"
- #include "gtkdnd.h"
- #include "gtkeventbox.h"
-+#include "gtkimage.h"
-
- #undef GTK_DISABLE_DEPRECATED
- #include "gtkoptionmenu.h"
-@@ -245,7 +247,8 @@
- };
-
- enum {
-- DIR_COLUMN
-+ DIR_COLUMN,
-+ ISFILE_COLUMN
- };
-
- enum {
-@@ -400,6 +403,12 @@
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data);
-+
-+static void gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data);
-+
- static void gtk_file_selection_file_changed (GtkTreeSelection *selection,
- gpointer user_data);
- static void gtk_file_selection_dir_activate (GtkTreeView *tree_view,
-@@ -419,6 +428,7 @@
- static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
-+static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style);
-
- static void free_selected_names (GPtrArray *names);
-
-@@ -578,6 +588,23 @@
- G_PARAM_WRITABLE));
- object_class->destroy = gtk_file_selection_destroy;
- widget_class->map = gtk_file_selection_map;
-+ widget_class->style_set = gtk_file_selection_style_set;
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_boolean ("show_fileops_default",
-+ _("Show fileop buttons by default"),
-+ _("Whether file operation buttons are shown by default"),
-+ TRUE,
-+ G_PARAM_READABLE));
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("border_width",
-+ _("Border width"),
-+ _("Width of border around the main dialog area"),
-+ 0,
-+ G_MAXINT,
-+ 10,
-+ G_PARAM_READABLE));
- }
-
- static void gtk_file_selection_set_property (GObject *object,
-@@ -649,7 +676,29 @@
- gtk_widget_grab_default (widget);
- return FALSE;
- }
--
-+
-+static void
-+gtk_file_selection_style_set (GtkWidget *filesel,
-+ GtkStyle *prev_style)
-+{
-+ gboolean show_fileops;
-+ gint border_width;
-+
-+ gtk_widget_style_get (filesel,
-+ "show_fileops_default",
-+ &show_fileops,
-+ "border_width",
-+ &border_width,
-+ NULL);
-+
-+ gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
-+
-+ if (show_fileops)
-+ gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+ else
-+ gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+}
-+
- static void
- gtk_file_selection_init (GtkFileSelection *filesel)
- {
-@@ -674,17 +723,15 @@
-
- /* The dialog-sized vertical box */
- filesel->main_vbox = dialog->vbox;
-- gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
-
- /* The horizontal box containing create, rename etc. buttons */
- filesel->button_area = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
-- gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area,
- FALSE, FALSE, 0);
- gtk_widget_show (filesel->button_area);
-
-- gtk_file_selection_show_fileop_buttons (filesel);
-+ gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
-
- /* hbox for pulldown menu */
- pulldown_hbox = gtk_hbox_new (TRUE, 5);
-@@ -723,25 +770,32 @@
-
- /* The directories list */
-
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
- filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
- g_object_unref (model);
-
-- column = gtk_tree_view_column_new_with_attributes (_("Folders"),
-+ column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
- gtk_cell_renderer_text_new (),
- "text", DIR_COLUMN,
- NULL);
- label = gtk_label_new_with_mnemonic (_("Fol_ders"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-+
-+ /* gtk_tree_view_column_set_widget (column, label); */
-+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
-+
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
-
- gtk_widget_set_size_request (filesel->dir_list,
- DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
- g_signal_connect (filesel->dir_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_dir_activate), filesel);
-+ G_CALLBACK (gtk_file_selection_activate), filesel);
-+
-+ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
-+ G_CALLBACK (gtk_file_selection_file_changed), filesel);
-+
-
- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
-
-@@ -758,41 +812,6 @@
- gtk_widget_show (filesel->dir_list);
- gtk_widget_show (scrolled_win);
-
-- /* The files list */
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-- filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
-- g_object_unref (model);
--
-- column = gtk_tree_view_column_new_with_attributes (_("Files"),
-- gtk_cell_renderer_text_new (),
-- "text", FILE_COLUMN,
-- NULL);
-- label = gtk_label_new_with_mnemonic (_("_Files"));
-- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
-- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
--
-- gtk_widget_set_size_request (filesel->file_list,
-- FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
-- g_signal_connect (filesel->file_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_file_activate), filesel);
-- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
-- G_CALLBACK (gtk_file_selection_file_changed), filesel);
--
-- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
--
-- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
-- gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
-- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-- gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
-- gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
-- gtk_widget_show (filesel->file_list);
-- gtk_widget_show (scrolled_win);
--
- /* action area for packing buttons into. */
- filesel->action_area = gtk_hbox_new (TRUE, 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area,
-@@ -2008,6 +2027,23 @@
- }
-
- static void
-+gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data)
-+{
-+ GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ gtk_tree_model_get_iter (model, &iter, path);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (! is_file)
-+ gtk_file_selection_dir_activate (tree_view, path, column, user_data);
-+}
-+
-+static void
- gtk_file_selection_file_activate (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
-@@ -2103,7 +2139,6 @@
- PossibleCompletion* poss;
- GtkTreeIter iter;
- GtkListStore *dir_model;
-- GtkListStore *file_model;
- gchar* filename;
- gchar* rem_path = rel_path;
- gchar* sel_text;
-@@ -2125,10 +2160,8 @@
- g_assert (cmpl_state->reference_dir);
-
- dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
-- file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
-
- gtk_list_store_clear (dir_model);
-- gtk_list_store_clear (file_model);
-
- /* Set the dir list to include ./ and ../ */
- gtk_list_store_append (dir_model, &iter);
-@@ -2150,13 +2183,17 @@
- strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
- {
- gtk_list_store_append (dir_model, &iter);
-- gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, FALSE, -1);
- }
- }
- else
- {
-- gtk_list_store_append (file_model, &iter);
-- gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_append (dir_model, &iter);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, TRUE, -1);
- }
- }
-
diff --git a/packages/gtk+/gtk+-2.10.7/spinbutton.patch b/packages/gtk+/gtk+-2.10.7/spinbutton.patch
deleted file mode 100644
index c26dc6d93c..0000000000
--- a/packages/gtk+/gtk+-2.10.7/spinbutton.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkspinbutton.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkspinbutton.c
-+++ gtk+-2.10.6/gtk/gtkspinbutton.c
-@@ -682,7 +682,7 @@ gtk_spin_button_size_allocate (GtkWidget
-
- spin = GTK_SPIN_BUTTON (widget);
- arrow_size = spin_button_get_arrow_size (spin);
-- panel_width = arrow_size + 2 * widget->style->xthickness;
-+ panel_width = (2 * arrow_size) + 4 * widget->style->xthickness;
-
- widget->allocation = *allocation;
-
-@@ -815,19 +815,16 @@ gtk_spin_button_draw_arrow (GtkSpinButto
- {
- width = spin_button_get_arrow_size (spin_button) + 2 * widget->style->xthickness;
-
-+ y = widget->style->ythickness;
-+ height = widget->requisition.height - (2 * y);
-+
- if (arrow_type == GTK_ARROW_UP)
- {
- x = 0;
-- y = 0;
--
-- height = widget->requisition.height / 2;
- }
- else
- {
-- x = 0;
-- y = widget->requisition.height / 2;
--
-- height = (widget->requisition.height + 1) / 2;
-+ x = width;
- }
-
- if (spin_button_at_limit (spin_button, arrow_type))
-@@ -857,32 +854,17 @@ gtk_spin_button_draw_arrow (GtkSpinButto
- shadow_type = GTK_SHADOW_OUT;
- }
- }
--
-+
- gtk_paint_box (widget->style, spin_button->panel,
- state_type, shadow_type,
- NULL, widget,
-- (arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
-+ NULL,
- x, y, width, height);
-
- height = widget->requisition.height;
-
-- if (arrow_type == GTK_ARROW_DOWN)
-- {
-- y = height / 2;
-- height = height - y - 2;
-- }
-- else
-- {
-- y = 2;
-- height = height / 2 - 2;
-- }
--
- width -= 3;
--
-- if (widget && gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-- x = 2;
-- else
-- x = 1;
-+ height -= 3;
-
- w = width / 2;
- w -= w % 2 - 1; /* force odd */
-@@ -1062,7 +1044,7 @@ gtk_spin_button_button_press (GtkWidget
- if (GTK_ENTRY (widget)->editable)
- gtk_spin_button_update (spin);
-
-- if (event->y <= widget->requisition.height / 2)
-+ if (event->x <= (spin_button_get_arrow_size (spin) + widget->style->xthickness))
- {
- if (event->button == 1)
- start_spinning (spin, GTK_ARROW_UP, spin->adjustment->step_increment);
-@@ -1097,44 +1079,11 @@ gtk_spin_button_button_release (GtkWidge
-
- arrow_size = spin_button_get_arrow_size (spin);
-
-- if (event->button == spin->button)
-- {
-- int click_child = spin->click_child;
-+ gtk_spin_button_stop_spinning (spin);
-
-- gtk_spin_button_stop_spinning (spin);
--
-- if (event->button == 3)
-- {
-- if (event->y >= 0 && event->x >= 0 &&
-- event->y <= widget->requisition.height &&
-- event->x <= arrow_size + 2 * widget->style->xthickness)
-- {
-- if (click_child == GTK_ARROW_UP &&
-- event->y <= widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->upper - spin->adjustment->value;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, diff);
-- }
-- else if (click_child == GTK_ARROW_DOWN &&
-- event->y > widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->value - spin->adjustment->lower;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, -diff);
-- }
-- }
-- }
-- spin_button_redraw (spin);
-+ spin_button_redraw (spin);
-
-- return TRUE;
-- }
-- else
-- return GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->button_release_event (widget, event);
-+ return TRUE;
- }
-
- static gint
diff --git a/packages/gtk+/gtk+-2.10.7/xsettings.patch b/packages/gtk+/gtk+-2.10.7/xsettings.patch
deleted file mode 100644
index b63e262d34..0000000000
--- a/packages/gtk+/gtk+-2.10.7/xsettings.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- gtk+-2.4.4/gdk/x11/gdkevents-x11.c.old Sun Aug 22 17:14:00 2004
-+++ gtk+-2.4.4/gdk/x11/gdkevents-x11.c Sun Aug 22 17:14:00 2004
-@@ -2827,10 +2827,9 @@
- {
- GdkScreenX11 *screen = data;
-
-- if (xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent))
-- return GDK_FILTER_REMOVE;
-- else
-- return GDK_FILTER_CONTINUE;
-+ xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent);
-+
-+ return GDK_FILTER_CONTINUE;
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.9/automake-lossage.patch b/packages/gtk+/gtk+-2.10.9/automake-lossage.patch
deleted file mode 100644
index 0d423ddbb9..0000000000
--- a/packages/gtk+/gtk+-2.10.9/automake-lossage.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- gtk+-2.4.1/docs/tutorial/Makefile.am~ 2003-05-06 22:54:20.000000000 +0100
-+++ gtk+-2.4.1/docs/tutorial/Makefile.am 2004-05-08 12:31:41.000000000 +0100
-@@ -52,21 +52,5 @@
-
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
--else
--html:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--dist-hook:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "*** DISTRIBUTION IS INCOMPLETE"
-- echo "***"
- endif
-
diff --git a/packages/gtk+/gtk+-2.10.9/disable-print.patch b/packages/gtk+/gtk+-2.10.9/disable-print.patch
deleted file mode 100644
index 1067773f12..0000000000
--- a/packages/gtk+/gtk+-2.10.9/disable-print.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- gtk+-2.10.0/configure.in~ 2006-07-05 18:11:44.000000000 +0200
-+++ gtk+-2.10.0/configure.in 2006-07-05 18:11:44.000000000 +0200
-@@ -1539,26 +1539,27 @@
- # Printing system checks
- ################################################################
-
--AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
--if test "x$CUPS_CONFIG" != "xno"; then
-- CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-- CUPS_LIBS=`cups-config --libs`
--
-- CUPS_API_VERSION=`cups-config --api-version`
-- CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-- CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
--
-- if test $CUPS_API_MAJOR -gt 1 -o \
-- $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-- AC_DEFINE(HAVE_CUPS_API_1_2)
-- fi
--
-- AC_SUBST(CUPS_API_MAJOR)
-- AC_SUBST(CUPS_API_MINOR)
-- AC_SUBST(CUPS_CFLAGS)
-- AC_SUBST(CUPS_LIBS)
--fi
--AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+#AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
-+#if test "x$CUPS_CONFIG" != "xno"; then
-+# CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
-+# CUPS_LIBS=`cups-config --libs`
-+#
-+# CUPS_API_VERSION=`cups-config --api-version`
-+# CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
-+# CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
-+#
-+# if test $CUPS_API_MAJOR -gt 1 -o \
-+# $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
-+# AC_DEFINE(HAVE_CUPS_API_1_2)
-+# fi
-+#
-+# AC_SUBST(CUPS_API_MAJOR)
-+# AC_SUBST(CUPS_API_MINOR)
-+# AC_SUBST(CUPS_CFLAGS)
-+# AC_SUBST(CUPS_LIBS)
-+#fi
-+#AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
-+AM_CONDITIONAL(HAVE_CUPS,false)
-
- gtk_save_cppflags="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS"
diff --git a/packages/gtk+/gtk+-2.10.9/disable-tooltips.patch b/packages/gtk+/gtk+-2.10.9/disable-tooltips.patch
deleted file mode 100644
index d71d839c3c..0000000000
--- a/packages/gtk+/gtk+-2.10.9/disable-tooltips.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.4.3/gtk/gtktooltips.c.old 2004-07-04 18:52:04.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtktooltips.c 2004-07-04 18:52:08.000000000 +0100
-@@ -118,7 +118,7 @@
- tooltips->tips_data_list = NULL;
-
- tooltips->delay = DEFAULT_DELAY;
-- tooltips->enabled = TRUE;
-+ tooltips->enabled = FALSE;
- tooltips->timer_tag = 0;
- tooltips->use_sticky_delay = FALSE;
- tooltips->last_popdown.tv_sec = -1;
diff --git a/packages/gtk+/gtk+-2.10.9/gnome-bug-341177.patch b/packages/gtk+/gtk+-2.10.9/gnome-bug-341177.patch
deleted file mode 100644
index c31868462a..0000000000
--- a/packages/gtk+/gtk+-2.10.9/gnome-bug-341177.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-diff -uprN gtk+-2.8.13.org/gdk-pixbuf/pixops/pixops.c gtk+-2.8.13.INNER_LOOP/gdk-pixbuf/pixops/pixops.c
---- gtk+-2.8.13.org/gdk-pixbuf/pixops/pixops.c Tue Jul 12 18:58:57 2005
-+++ gtk+-2.8.13.INNER_LOOP/gdk-pixbuf/pixops/pixops.c Tue May 9 17:30:53 2006
-@@ -71,35 +71,24 @@ get_check_shift (int check_size)
- return check_shift;
- }
-
--static void
--pixops_scale_nearest (guchar *dest_buf,
-- int render_x0,
-- int render_y0,
-- int render_x1,
-- int render_y1,
-- int dest_rowstride,
-- int dest_channels,
-- gboolean dest_has_alpha,
-- const guchar *src_buf,
-- int src_width,
-- int src_height,
-- int src_rowstride,
-- int src_channels,
-- gboolean src_has_alpha,
-- double scale_x,
-- double scale_y)
--{
-- int i;
-- int x;
-- int x_step = (1 << SCALE_SHIFT) / scale_x;
-- int y_step = (1 << SCALE_SHIFT) / scale_y;
-- int xmax, xstart, xstop, x_pos, y_pos;
-- const guchar *p;
-+typedef struct { guchar a,b,c; } b3;
-+extern void BUG_bad_size_of_struct_b3(void);
-
--#define INNER_LOOP(SRC_CHANNELS,DEST_CHANNELS,ASSIGN_PIXEL) \
-+#define INNER_LOOP_PREP() \
-+ do { \
-+ x = render_x0 * x_step + x_step / 2; \
- xmax = x + (render_x1 - render_x0) * x_step; \
- xstart = MIN (0, xmax); \
- xstop = MIN (src_width << SCALE_SHIFT, xmax); \
-+ } while(0)
-+
-+#define INNER_LOOP_BODY(SRC_CHANNELS,DEST_CHANNELS,ASSIGN_PIXEL)\
-+ do { \
-+ y_pos = ((i + render_y0) * y_step + y_step / 2) >> SCALE_SHIFT; \
-+ y_pos = CLAMP (y_pos, 0, src_height - 1); \
-+ src = src_buf + y_pos * src_rowstride; \
-+ dest = dest_buf + i * dest_rowstride; \
-+ x = render_x0 * x_step + x_step / 2; \
- p = src + (CLAMP (x, xstart, xstop) >> SCALE_SHIFT) * SRC_CHANNELS; \
- while (x < xstart) \
- { \
-@@ -121,42 +110,58 @@ pixops_scale_nearest (guchar *des
- ASSIGN_PIXEL; \
- dest += DEST_CHANNELS; \
- x += x_step; \
-- }
-+ } \
-+ } while(0)
-
-- for (i = 0; i < (render_y1 - render_y0); i++)
-- {
-- const guchar *src;
-- guchar *dest;
-- y_pos = ((i + render_y0) * y_step + y_step / 2) >> SCALE_SHIFT;
-- y_pos = CLAMP (y_pos, 0, src_height - 1);
-- src = src_buf + y_pos * src_rowstride;
-- dest = dest_buf + i * dest_rowstride;
-+static void
-+pixops_scale_nearest (guchar *dest_buf,
-+ int render_x0,
-+ int render_y0,
-+ int render_x1,
-+ int render_y1,
-+ int dest_rowstride,
-+ int dest_channels,
-+ gboolean dest_has_alpha,
-+ const guchar *src_buf,
-+ int src_width,
-+ int src_height,
-+ int src_rowstride,
-+ int src_channels,
-+ gboolean src_has_alpha,
-+ double scale_x,
-+ double scale_y)
-+{
-+ int i;
-+ int x;
-+ int x_step = (1 << SCALE_SHIFT) / scale_x;
-+ int y_step = (1 << SCALE_SHIFT) / scale_y;
-+ int xmax, xstart, xstop, x_pos, y_pos;
-+ const guchar *p;
-
-- x = render_x0 * x_step + x_step / 2;
-+ const guchar *src;
-+ guchar *dest;
-
-- if (src_channels == 3)
-- {
-- if (dest_channels == 3)
-- {
-- INNER_LOOP (3, 3, dest[0]=p[0];dest[1]=p[1];dest[2]=p[2]);
-- }
-- else
-- {
-- INNER_LOOP (3, 4, dest[0]=p[0];dest[1]=p[1];dest[2]=p[2];dest[3]=0xff);
-- }
-- }
-- else if (src_channels == 4)
-- {
-- if (dest_channels == 3)
-- {
-- INNER_LOOP (4, 3, dest[0]=p[0];dest[1]=p[1];dest[2]=p[2]);
-- }
-- else
-- {
-- guint32 *p32;
-- INNER_LOOP(4, 4, p32=(guint32*)dest;*p32=*((guint32*)p));
-- }
-- }
-+ if(sizeof(b3) != 3) BUG_bad_size_of_struct_b3();
-+
-+ INNER_LOOP_PREP();
-+
-+ if (src_channels == 3)
-+ {
-+ if (dest_channels == 3)
-+ for (i = 0; i < (render_y1 - render_y0); i++)
-+ INNER_LOOP_BODY (3, 3, *(b3*)dest = *(b3*)p);
-+ else
-+ for (i = 0; i < (render_y1 - render_y0); i++)
-+ INNER_LOOP_BODY (3, 4, (*(b3*)dest = *(b3*)p, dest[3]=0xff) );
-+ }
-+ else if (src_channels == 4)
-+ {
-+ if (dest_channels == 3)
-+ for (i = 0; i < (render_y1 - render_y0); i++)
-+ INNER_LOOP_BODY (4, 3, *(b3*)dest = *(b3*)p);
-+ else
-+ for (i = 0; i < (render_y1 - render_y0); i++)
-+ INNER_LOOP_BODY (4, 4, *(guint32*)dest = *((guint32*)p));
- }
- }
-
-@@ -187,18 +192,14 @@ pixops_composite_nearest (guchar
- const guchar *p;
- unsigned int a0;
-
-+ INNER_LOOP_PREP();
-+
- for (i = 0; i < (render_y1 - render_y0); i++)
- {
- const guchar *src;
- guchar *dest;
-- y_pos = ((i + render_y0) * y_step + y_step / 2) >> SCALE_SHIFT;
-- y_pos = CLAMP (y_pos, 0, src_height - 1);
-- src = src_buf + y_pos * src_rowstride;
-- dest = dest_buf + i * dest_rowstride;
--
-- x = render_x0 * x_step + x_step / 2;
-
-- INNER_LOOP(src_channels, dest_channels,
-+ INNER_LOOP_BODY(src_channels, dest_channels,
- if (src_has_alpha)
- a0 = (p[3] * overall_alpha) / 0xff;
- else
-@@ -209,9 +210,7 @@ pixops_composite_nearest (guchar
- case 0:
- break;
- case 255:
-- dest[0] = p[0];
-- dest[1] = p[1];
-- dest[2] = p[2];
-+ *(b3*)dest = *(b3*)p;
- if (dest_has_alpha)
- dest[3] = 0xff;
- break;
-@@ -279,17 +278,12 @@ pixops_composite_color_nearest (guchar
- const guchar *p;
- unsigned int a0;
-
-+ INNER_LOOP_PREP();
-+
- for (i = 0; i < (render_y1 - render_y0); i++)
- {
- const guchar *src;
- guchar *dest;
-- y_pos = ((i + render_y0) * y_step + y_step / 2) >> SCALE_SHIFT;
-- y_pos = CLAMP (y_pos, 0, src_height - 1);
-- src = src_buf + y_pos * src_rowstride;
-- dest = dest_buf + i * dest_rowstride;
--
-- x = render_x0 * x_step + x_step / 2;
--
-
- if (((i + check_y) >> check_shift) & 1)
- {
-@@ -313,7 +307,7 @@ pixops_composite_color_nearest (guchar
- }
-
- j = 0;
-- INNER_LOOP(src_channels, dest_channels,
-+ INNER_LOOP_BODY(src_channels, dest_channels,
- if (src_has_alpha)
- a0 = (p[3] * overall_alpha + 0xff) >> 8;
- else
-@@ -372,7 +366,8 @@ pixops_composite_color_nearest (guchar
- );
- }
- }
--#undef INNER_LOOP
-+#undef INNER_LOOP_BODY
-+#undef INNER_LOOP_PREP
-
- static void
- composite_pixel (guchar *dest, int dest_x, int dest_channels, int dest_has_alpha,
diff --git a/packages/gtk+/gtk+-2.10.9/gtk+-handhelds.patch b/packages/gtk+/gtk+-2.10.9/gtk+-handhelds.patch
deleted file mode 100644
index 1ea86ce6b2..0000000000
--- a/packages/gtk+/gtk+-2.10.9/gtk+-handhelds.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkarrow.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkarrow.c 2006-05-14 05:25:28.000000000 +0100
-+++ gtk+-2.10.6/gtk/gtkarrow.c 2006-11-14 12:03:45.000000000 +0000
-@@ -31,7 +31,7 @@
- #include "gtkintl.h"
- #include "gtkalias.h"
-
--#define MIN_ARROW_SIZE 15
-+#define MIN_ARROW_SIZE 7
-
- enum {
- PROP_0,
-@@ -53,6 +53,8 @@
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-+static void gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition);
-
-
- G_DEFINE_TYPE (GtkArrow, gtk_arrow, GTK_TYPE_MISC)
-@@ -88,6 +90,7 @@
- GTK_PARAM_READWRITE));
-
- widget_class->expose_event = gtk_arrow_expose;
-+ widget_class->size_request = gtk_arrow_size_request;
- }
-
- static void
-@@ -143,13 +146,18 @@
- }
-
- static void
-+gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition)
-+{
-+ requisition->width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-+ requisition->height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
-+}
-+
-+static void
- gtk_arrow_init (GtkArrow *arrow)
- {
- GTK_WIDGET_SET_FLAGS (arrow, GTK_NO_WINDOW);
-
-- GTK_WIDGET (arrow)->requisition.width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-- GTK_WIDGET (arrow)->requisition.height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
--
- arrow->arrow_type = GTK_ARROW_RIGHT;
- arrow->shadow_type = GTK_SHADOW_OUT;
- }
-Index: gtk+-2.10.6/gtk/gtkentry.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkentry.c 2006-11-14 12:03:45.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkentry.c 2006-11-14 12:07:02.000000000 +0000
-@@ -577,6 +577,18 @@
- 0.0,
- GTK_PARAM_READWRITE));
-
-+ // Added by gtk+-handhelds.patch
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("min_width",
-+ P_("Minimum width"),
-+ P_("Minimum width of the entry field"),
-+ 0,
-+ G_MAXINT,
-+ MIN_ENTRY_WIDTH,
-+ G_PARAM_READABLE));
-+
-+
-+
- /**
- * GtkEntry:truncate-multiline:
- *
-@@ -1286,7 +1298,7 @@
- {
- GtkEntry *entry = GTK_ENTRY (widget);
- PangoFontMetrics *metrics;
-- gint xborder, yborder;
-+ gint xborder, yborder, min_width;
- GtkBorder inner_border;
- PangoContext *context;
-
-@@ -1302,8 +1314,10 @@
- _gtk_entry_get_borders (entry, &xborder, &yborder);
- _gtk_entry_effective_inner_border (entry, &inner_border);
-
-+ gtk_widget_style_get (widget, "min_width", &min_width, NULL);
-+
- if (entry->width_chars < 0)
-- requisition->width = MIN_ENTRY_WIDTH + xborder * 2 + inner_border.left + inner_border.right;
-+ requisition->width = min_width + xborder * 2 + inner_border.left + inner_border.right;
- else
- {
- gint char_width = pango_font_metrics_get_approximate_char_width (metrics);
-Index: gtk+-2.10.6/gtk/gtkrange.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkrange.c 2006-11-14 12:03:44.000000000 +0000
-+++ gtk+-2.10.6/gtk/gtkrange.c 2006-11-14 12:07:40.000000000 +0000
-@@ -197,6 +197,7 @@
- static gboolean gtk_range_key_press (GtkWidget *range,
- GdkEventKey *event);
-
-+static GdkAtom recognize_protocols_atom, atom_atom;
-
- static guint signals[LAST_SIGNAL];
-
-@@ -213,6 +214,9 @@
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
-
-+ recognize_protocols_atom = gdk_atom_intern ("RECOGNIZE_PROTOCOLS", FALSE);
-+ atom_atom = gdk_atom_intern ("ATOM", FALSE);
-+
- gobject_class->set_property = gtk_range_set_property;
- gobject_class->get_property = gtk_range_get_property;
- gobject_class->finalize = gtk_range_finalize;
-@@ -1020,6 +1024,12 @@
- &attributes, attributes_mask);
- gdk_window_set_user_data (range->event_window, range);
-
-+ gdk_property_change (range->event_window,
-+ recognize_protocols_atom,
-+ atom_atom,
-+ 32, GDK_PROP_MODE_REPLACE,
-+ NULL, 0);
-+
- widget->style = gtk_style_attach (widget->style, widget->window);
- }
-
-@@ -1569,7 +1579,7 @@
-
- /* ignore presses when we're already doing something else. */
- if (range->layout->grab_location != MOUSE_OUTSIDE)
-- return FALSE;
-+ return TRUE;
-
- range->layout->mouse_x = event->x;
- range->layout->mouse_y = event->y;
-@@ -1778,7 +1788,7 @@
- return TRUE;
- }
-
-- return FALSE;
-+ return TRUE;
- }
-
- /**
diff --git a/packages/gtk+/gtk+-2.10.9/gtklabel-resize-patch b/packages/gtk+/gtk+-2.10.9/gtklabel-resize-patch
deleted file mode 100644
index df29656343..0000000000
--- a/packages/gtk+/gtk+-2.10.9/gtklabel-resize-patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.4.3/gtk/gtklabel.c~ 2004-06-11 13:50:34.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtklabel.c 2004-07-05 13:33:57.000000000 +0100
-@@ -1623,6 +1623,7 @@
-
- /* We have to clear the layout, fonts etc. may have changed */
- gtk_label_clear_layout (label);
-+ gtk_widget_queue_resize (GTK_WIDGET (label));
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.9/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.10.9/hardcoded_libtool.patch
deleted file mode 100644
index 6adb0cfef6..0000000000
--- a/packages/gtk+/gtk+-2.10.9/hardcoded_libtool.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- /tmp/configure.in 2007-01-08 17:50:49.000000000 +0100
-+++ gtk+-2.10.7/configure.in 2007-01-08 17:52:33.495251000 +0100
-@@ -371,7 +371,7 @@
- case $enable_explicit_deps in
- auto)
- export SED
-- deplibs_check_method=`(./libtool --config; echo 'eval echo $deplibs_check_method') | sh`
-+ deplibs_check_method=`(./$host_alias-libtool --config; echo 'eval echo $deplibs_check_method') | sh`
- if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -773,7 +773,7 @@
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config"
- pixbuf_deplibs_check=`$pixbuf_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
-@@ -1611,7 +1611,7 @@
- # We are using gmodule-no-export now, but I'm leaving the stripping
- # code in place for now, since pango and atk still require gmodule.
- export SED
--export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- if test -n "$export_dynamic"; then
- GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"`
- GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"`
diff --git a/packages/gtk+/gtk+-2.10.9/integer-pixops.patch b/packages/gtk+/gtk+-2.10.9/integer-pixops.patch
deleted file mode 100644
index 490a60dd8a..0000000000
--- a/packages/gtk+/gtk+-2.10.9/integer-pixops.patch
+++ /dev/null
@@ -1,348 +0,0 @@
---- /tmp/config.h.in 2006-12-23 00:00:38.000000000 +0100
-+++ gtk+-2.10.6/config.h.in 2006-12-23 00:01:05.632227000 +0100
-@@ -253,3 +253,7 @@
-
- /* Define to `int' if <sys/types.h> doesn't define. */
- #undef uid_t
-+
-+/* Define to use integer math rather than floating point where possible. */
-+#undef ENABLE_INTEGER_PIXOPS
-+
---- /tmp/configure.in 2006-12-23 00:02:16.000000000 +0100
-+++ gtk+-2.10.6/configure.in 2006-12-23 00:05:11.172227000 +0100
-@@ -203,6 +203,15 @@
- [AC_HELP_STRING([--disable-rebuilds],
- [disable all source autogeneration rules])],,
- [enable_rebuilds=yes])
-+AC_ARG_ENABLE(integer-pixops,
-+ [AC_HELP_STRING([--enable-integer-pixops],
-+ [use integer math where possible])],,
-+ [enable_integer_pixops=no])
-+
-+if test "x$enable_integer_pixops" = "xyes"; then
-+ AC_DEFINE(ENABLE_INTEGER_PIXOPS)
-+fi
-+
- AC_ARG_ENABLE(visibility,
- [AC_HELP_STRING([--disable-visibility],
- [don't use ELF visibility attributes])],,
---- /tmp/pixops.c 2006-12-23 10:04:02.000000000 +0100
-+++ gtk+-2.10.6/gdk-pixbuf/pixops/pixops.c 2006-12-23 10:04:21.772227000 +0100
-@@ -28,6 +28,10 @@
- #define SUBSAMPLE_MASK ((1 << SUBSAMPLE_BITS)-1)
- #define SCALE_SHIFT 16
-
-+#ifdef ENABLE_INTEGER_PIXOPS
-+#define FRAC 0x10000ULL
-+#endif
-+
- typedef struct _PixopsFilter PixopsFilter;
- typedef struct _PixopsFilterDimension PixopsFilterDimension;
-
-@@ -972,6 +976,29 @@
- (*pixel_func) (dest, dest_x, dest_channels, dest_has_alpha, src_has_alpha, check_size, color1, color2, r, g, b, a);
- }
-
-+#ifdef ENABLE_INTEGER_PIXOPS
-+
-+static void
-+correct_total (int *weights,
-+ int n_x,
-+ int n_y,
-+ int total,
-+ unsigned long overall_alpha)
-+{
-+ int correction = (int)(overall_alpha - total);
-+ int i;
-+ for (i = n_x * n_y - 1; i >= 0; i--)
-+ {
-+ if (*(weights + i) + correction >= 0)
-+ {
-+ *(weights + i) += correction;
-+ break;
-+ }
-+ }
-+}
-+
-+#else
-+
- static void
- correct_total (int *weights,
- int n_x,
-@@ -998,6 +1025,8 @@
- }
- }
-
-+#endif
-+
- static int *
- make_filter_table (PixopsFilter *filter)
- {
-@@ -1026,7 +1055,11 @@
- *(pixel_weights + n_x * i + j) = weight;
- }
-
-- correct_total (pixel_weights, n_x, n_y, total, filter->overall_alpha);
-+#ifdef ENABLE_INTEGER_PIXOPS
-+ correct_total (pixel_weights, n_x, n_y, total, overall_alpha * FRAC);
-+#else
-+ correct_total (pixel_weights, n_x, n_y, total, overall_alpha);
-+#endif
- }
-
- return weights;
-@@ -1178,6 +1211,93 @@
- /* Compute weights for reconstruction by replication followed by
- * sampling with a box filter
- */
-+#ifdef ENABLE_INTEGER_PIXOPS
-+
-+static void
-+tile_make_weights (PixopsFilter *filter, double x_scale_d, double y_scale_d, double overall_alpha_d)
-+{
-+ int i_offset, j_offset;
-+ unsigned long x_scale = x_scale_d * FRAC;
-+ unsigned long y_scale = y_scale_d * FRAC;
-+ unsigned long overall_alpha = overall_alpha_d * FRAC;
-+ unsigned long x_scale_r = FRAC / x_scale;
-+ unsigned long y_scale_r = FRAC / y_scale;
-+
-+ int n_x = ceil(1/x_scale_d + 1);
-+ int n_y = ceil(1/y_scale_d + 1);
-+
-+ filter->x_offset = 0;
-+ filter->y_offset = 0;
-+ filter->n_x = n_x;
-+ filter->n_y = n_y;
-+ filter->weights = g_new (int, SUBSAMPLE * SUBSAMPLE * n_x * n_y);
-+
-+ for (i_offset=0; i_offset<SUBSAMPLE; i_offset++)
-+ for (j_offset=0; j_offset<SUBSAMPLE; j_offset++)
-+ {
-+ int *pixel_weights = filter->weights + ((i_offset*SUBSAMPLE) + j_offset) * n_x * n_y;
-+ unsigned long x = j_offset * FRAC / SUBSAMPLE;
-+ unsigned long y = i_offset * FRAC / SUBSAMPLE;
-+ int i,j;
-+ int total = 0;
-+
-+ for (i = 0; i < n_y; i++)
-+ {
-+ unsigned long tw, th;
-+
-+ if (i < y)
-+ {
-+
-+ if (i + FRAC > y)
-+ th = MIN(i+FRAC, y + y_scale_r) - y;
-+ else
-+ th = 0;
-+ }
-+ else
-+ {
-+ if (y + FRAC/y_scale > i)
-+ th = MIN(i+FRAC, y + y_scale_r) - i;
-+ else
-+ th = 0;
-+ }
-+
-+ for (j = 0; j < n_x; j++)
-+ {
-+ int weight;
-+
-+ if (j < x)
-+ {
-+ if (j + FRAC > x)
-+ tw = MIN(j+FRAC, x + x_scale_r) - x;
-+ else
-+ tw = 0;
-+ }
-+ else
-+ {
-+ if (x + FRAC/x_scale > j)
-+ tw = MIN(j+FRAC, x + x_scale_r) - j;
-+ else
-+ tw = 0;
-+ }
-+
-+ {
-+ unsigned long lweight = (tw * x_scale) / FRAC;
-+ lweight = (lweight * th) / FRAC;
-+ lweight = (lweight * y_scale) / FRAC;
-+ lweight = (lweight * overall_alpha) / FRAC;
-+ weight = lweight;
-+ }
-+ total += weight;
-+ *(pixel_weights + n_x * i + j) = weight;
-+ }
-+ }
-+
-+ correct_total (pixel_weights, n_x, n_y, total, overall_alpha);
-+ }
-+}
-+
-+#else
-+
- static void
- tile_make_weights (PixopsFilterDimension *dim,
- double scale)
-@@ -1216,10 +1336,151 @@
- }
- }
-
-+#endif
-+
- /* Compute weights for a filter that, for minification
- * is the same as 'tiles', and for magnification, is bilinear
- * reconstruction followed by a sampling with a delta function.
- */
-+#ifdef ENABLE_INTEGER_PIXOPS
-+
-+static void
-+bilinear_magnify_make_weights (PixopsFilter *filter, double x_scale_d, double y_scale_d, double overall_alpha_d)
-+{
-+ int i_offset, j_offset;
-+ unsigned long *x_weights, *y_weights;
-+ int n_x, n_y;
-+ unsigned long x_scale = x_scale_d * FRAC;
-+ unsigned long y_scale = y_scale_d * FRAC;
-+ unsigned long overall_alpha = overall_alpha_d * FRAC;
-+ unsigned long x_scale_r = (FRAC / x_scale_d);
-+ unsigned long y_scale_r = (FRAC / y_scale_d);
-+
-+ if (x_scale > FRAC) /* Bilinear */
-+ {
-+ n_x = 2;
-+ filter->x_offset = 0.5 * (1/x_scale_d - 1);
-+ }
-+ else /* Tile */
-+ {
-+ n_x = ceil(1.0 + 1.0/x_scale_d);
-+ filter->x_offset = 0.0;
-+ }
-+
-+ if (y_scale > FRAC) /* Bilinear */
-+ {
-+ n_y = 2;
-+ filter->y_offset = 0.5 * (1/y_scale_d - 1);
-+ }
-+ else /* Tile */
-+ {
-+ n_y = ceil(1.0 + 1.0/y_scale_d);
-+ filter->y_offset = 0.0;
-+ }
-+
-+ filter->n_y = n_y;
-+ filter->n_x = n_x;
-+ filter->weights = g_new (int, SUBSAMPLE * SUBSAMPLE * n_x * n_y);
-+
-+ x_weights = g_new (unsigned long, n_x);
-+ y_weights = g_new (unsigned long, n_y);
-+
-+ for (i_offset=0; i_offset<SUBSAMPLE; i_offset++)
-+ for (j_offset=0; j_offset<SUBSAMPLE; j_offset++)
-+ {
-+ int *pixel_weights = filter->weights + ((i_offset*SUBSAMPLE) + j_offset) * n_x * n_y;
-+ unsigned long x = j_offset * FRAC / SUBSAMPLE;
-+ unsigned long y = i_offset * FRAC / SUBSAMPLE;
-+ int i,j;
-+ int total = 0;
-+
-+ if (x_scale > FRAC) /* Bilinear */
-+ {
-+ for (i = 0; i < n_x; i++)
-+ {
-+ /* x_weights[i] = ((i == 0) ? (1 - x) : x) / x_scale; */
-+ unsigned long w = (((i == 0) ? (FRAC - x) : x) * x_scale_r);
-+ x_weights[i] = w / FRAC;
-+ }
-+ }
-+ else /* Tile */
-+ {
-+ /* x
-+ * ---------|--.-|----|--.-|------- SRC
-+ * ------------|---------|--------- DEST
-+ */
-+ for (i = 0; i < n_x; i++)
-+ {
-+ if (i < x)
-+ {
-+ if (i + 1 > x)
-+ x_weights[i] = MIN(FRAC*(i+1), FRAC * x + (((unsigned long long)(FRAC * FRAC)) / (unsigned long)x_scale)) - (x * FRAC);
-+ else
-+ x_weights[i] = 0;
-+ }
-+ else
-+ {
-+ if (x + 1/x_scale > i)
-+ x_weights[i] = MIN(FRAC*(i+1), FRAC * x + (((unsigned long long)(FRAC * FRAC)) / (unsigned long)x_scale)) - (i * FRAC);
-+ else
-+ x_weights[i] = 0;
-+ }
-+ }
-+ }
-+
-+ if (y_scale > FRAC) /* Bilinear */
-+ {
-+ for (i = 0; i < n_y; i++)
-+ {
-+ unsigned long w = ((unsigned long)((i == 0) ? (FRAC - y) : y) * y_scale_r);
-+ y_weights[i] = w / FRAC;
-+ }
-+ }
-+ else /* Tile */
-+ {
-+ /* y
-+ * ---------|--.-|----|--.-|------- SRC
-+ * ------------|---------|--------- DEST
-+ */
-+ for (i = 0; i < n_y; i++)
-+ {
-+ if (i < y)
-+ {
-+ if (i + 1 > y)
-+ y_weights[i] = MIN(FRAC*(i+1), FRAC * y + (FRAC * FRAC / (unsigned long)y_scale)) - (y * FRAC);
-+ else
-+ y_weights[i] = 0;
-+ }
-+ else
-+ {
-+ if (y + 1/y_scale > i)
-+ y_weights[i] = MIN(FRAC*(i+1), FRAC * y + (FRAC * FRAC / (unsigned long)y_scale)) - (i * FRAC);
-+ else
-+ y_weights[i] = 0;
-+ }
-+ }
-+ }
-+
-+ for (i = 0; i < n_y; i++)
-+ for (j = 0; j < n_x; j++)
-+ {
-+ unsigned long long weight = (x_weights[j] * x_scale) / FRAC;
-+ weight = (weight * y_weights[i]) / FRAC;
-+ weight = (weight * y_scale) / FRAC;
-+ weight = (weight * overall_alpha) / FRAC;
-+ *(pixel_weights + n_x * i + j) = (unsigned long)weight;
-+ total += (unsigned long)weight;
-+ }
-+
-+ correct_total (pixel_weights, n_x, n_y, total, overall_alpha);
-+ }
-+
-+ g_free (x_weights);
-+ g_free (y_weights);
-+}
-+
-+#else
-+
- static void
- bilinear_magnify_make_weights (PixopsFilterDimension *dim,
- double scale)
-@@ -1283,6 +1544,8 @@
- }
- }
-
-+#endif
-+
- /* Computes the integral from b0 to b1 of
- *
- * f(x) = x; 0 <= x < 1
diff --git a/packages/gtk+/gtk+-2.10.9/menu-deactivate.patch b/packages/gtk+/gtk+-2.10.9/menu-deactivate.patch
deleted file mode 100644
index cfb8849e9f..0000000000
--- a/packages/gtk+/gtk+-2.10.9/menu-deactivate.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- gtk+-2.10.0/gtk/gtkmenushell.c.orig 2006-07-05 17:17:34.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkmenushell.c 2006-07-05 17:19:01.000000000 +0200
-@@ -42,7 +42,7 @@
- #include "gtkintl.h"
- #include "gtkalias.h"
-
--#define MENU_SHELL_TIMEOUT 500
-+#define MENU_SHELL_TIMEOUT 2000
-
- #define PACK_DIRECTION(m) \
- (GTK_IS_MENU_BAR (m) \
-@@ -203,6 +203,8 @@
-
- G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER)
-
-+static int last_crossing_time;
-+
- static void
- gtk_menu_shell_class_init (GtkMenuShellClass *klass)
- {
-@@ -517,6 +519,7 @@
- gtk_grab_add (GTK_WIDGET (menu_shell));
- menu_shell->have_grab = TRUE;
- menu_shell->active = TRUE;
-+ last_crossing_time = 0;
- }
- }
-
-@@ -669,6 +672,13 @@
- menu_shell->activate_time = 0;
- deactivate = FALSE;
- }
-+
-+ if (last_crossing_time != 0
-+ && ((event->time - last_crossing_time) < 500))
-+ {
-+ last_crossing_time = 0;
-+ deactivate = FALSE;
-+ }
-
- if (deactivate)
- {
-@@ -716,6 +726,8 @@
- {
- menu_item = gtk_get_event_widget ((GdkEvent*) event);
-
-+ last_crossing_time = event->time;
-+
- if (!menu_item ||
- (GTK_IS_MENU_ITEM (menu_item) &&
- !_gtk_menu_item_is_selectable (menu_item)))
diff --git a/packages/gtk+/gtk+-2.10.9/migration.patch b/packages/gtk+/gtk+-2.10.9/migration.patch
deleted file mode 100644
index 4ee786e688..0000000000
--- a/packages/gtk+/gtk+-2.10.9/migration.patch
+++ /dev/null
@@ -1,611 +0,0 @@
-Index: configure.in
-===================================================================
---- configure.in.orig 2006-10-03 17:54:09.000000000 +0100
-+++ configure.in 2006-10-30 12:58:33.000000000 +0000
-@@ -1529,6 +1529,16 @@
- GTK_EXTRA_CFLAGS="$msnative_struct"
- fi
-
-+AC_ARG_ENABLE(display-migration,
-+ [AC_HELP_STRING([--enable-display-migration],
-+ [include support for GPE_CHANGE_DISPLAY protocol])],
-+ enable_migration=yes, enable_migration=no)
-+if test "$enable_migration" = "yes"; then
-+ AC_DEFINE([ENABLE_MIGRATION], 1, [Define if display migration is enabled])
-+ GTK_DEP_LIBS="$GTK_DEP_LIBS -lgcrypt"
-+fi
-+AM_CONDITIONAL(ENABLE_MIGRATION, test $enable_migration = "yes")
-+
- AC_SUBST(GTK_PACKAGES)
- AC_SUBST(GTK_EXTRA_LIBS)
- AC_SUBST(GTK_EXTRA_CFLAGS)
-Index: gtk/Makefile.am
-===================================================================
---- gtk/Makefile.am.orig 2006-10-02 18:27:53.000000000 +0100
-+++ gtk/Makefile.am 2006-10-30 12:59:14.000000000 +0000
-@@ -589,6 +589,11 @@
- gtkwindow-decorate.c \
- gtkwindow.c \
- $(gtk_clipboard_dnd_c_sources)
-+
-+if ENABLE_MIGRATION
-+gtk_base_c_sources += gtkmigration.c
-+endif
-+
- gtk_c_sources = $(gtk_base_c_sources)
- gtk_all_c_sources = $(gtk_base_c_sources)
-
-Index: gtk/gtkmain.c
-===================================================================
---- gtk/gtkmain.c.orig 2006-09-03 06:31:21.000000000 +0100
-+++ gtk/gtkmain.c 2006-10-30 12:56:34.000000000 +0000
-@@ -507,6 +507,10 @@
- _gtk_accel_map_init ();
- _gtk_rc_init ();
-
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_init ();
-+#endif
-+
- /* Set the 'initialized' flag.
- */
- gtk_initialized = TRUE;
-Index: gtk/gtkmigration.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gtk/gtkmigration.c 2006-10-30 12:56:34.000000000 +0000
-@@ -0,0 +1,529 @@
-+/*
-+ * Copyright (C) 2003, 2005 Philip Blundell <philb@gnu.org>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version.
-+ */
-+
-+#include <stdlib.h>
-+#include <ctype.h>
-+#include <libintl.h>
-+#include <string.h>
-+#include <assert.h>
-+
-+#include <X11/X.h>
-+#include <X11/Xlib.h>
-+#include <X11/Xatom.h>
-+
-+#include <gcrypt.h>
-+
-+#include "gtk.h"
-+#include "gdk.h"
-+#include "x11/gdkx.h"
-+
-+#define _(x) gettext(x)
-+
-+static GdkAtom string_gdkatom, display_change_gdkatom;
-+static GdkAtom rsa_challenge_gdkatom;
-+
-+#define DISPLAY_CHANGE_SUCCESS 0
-+#define DISPLAY_CHANGE_UNABLE_TO_CONNECT 1
-+#define DISPLAY_CHANGE_NO_SUCH_SCREEN 2
-+#define DISPLAY_CHANGE_AUTHENTICATION_BAD 3
-+#define DISPLAY_CHANGE_INDETERMINATE_ERROR 4
-+
-+static gboolean no_auth;
-+
-+static GSList *all_widgets;
-+
-+static gboolean gtk_migration_initialised;
-+
-+#define CHALLENGE_LEN 64
-+
-+gchar *gtk_migration_auth_challenge_string;
-+
-+static unsigned char challenge_bytes[CHALLENGE_LEN];
-+static unsigned long challenge_seq;
-+
-+#define hexbyte(x) ((x) >= 10 ? (x) + 'a' - 10 : (x) + '0')
-+
-+struct rsa_key
-+{
-+ gcry_mpi_t n, e, d, p, q, u;
-+};
-+
-+static gcry_mpi_t
-+mpi_from_sexp (gcry_sexp_t r, char *tag)
-+{
-+ gcry_sexp_t s = gcry_sexp_find_token (r, tag, 0);
-+ return gcry_sexp_nth_mpi (s, 1, GCRYMPI_FMT_USG);
-+}
-+
-+static char *
-+hex_from_mpi (gcry_mpi_t m)
-+{
-+ char *buf;
-+ gcry_mpi_aprint (GCRYMPI_FMT_HEX, (void *)&buf, NULL, m);
-+ return buf;
-+}
-+
-+static void
-+gtk_migration_crypt_create_hash (char *display, char *challenge, size_t len, char *result)
-+{
-+ size_t dlen = strlen (display);
-+ gchar *buf = g_malloc (dlen + 1 + len);
-+ strcpy (buf, display);
-+ memcpy (buf + dlen + 1, challenge, len);
-+ gcry_md_hash_buffer (GCRY_MD_SHA1, result, buf, len + dlen + 1);
-+ g_free (buf);
-+}
-+
-+static int
-+do_encode_md (const unsigned char *digest, size_t digestlen, int algo,
-+ unsigned int nbits, gcry_mpi_t *r_val)
-+{
-+ int nframe = (nbits+7) / 8;
-+ unsigned char *frame;
-+ int i, n;
-+ unsigned char asn[100];
-+ size_t asnlen;
-+
-+ asnlen = sizeof(asn);
-+ if (gcry_md_algo_info (algo, GCRYCTL_GET_ASNOID, asn, &asnlen))
-+ return -1;
-+
-+ if (digestlen + asnlen + 4 > nframe )
-+ return -1;
-+
-+ /* We encode the MD in this way:
-+ *
-+ * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes)
-+ *
-+ * PAD consists of FF bytes.
-+ */
-+ frame = g_malloc (nframe);
-+ n = 0;
-+ frame[n++] = 0;
-+ frame[n++] = 1; /* block type */
-+ i = nframe - digestlen - asnlen -3 ;
-+ assert ( i > 1 );
-+ memset ( frame+n, 0xff, i ); n += i;
-+ frame[n++] = 0;
-+ memcpy ( frame+n, asn, asnlen ); n += asnlen;
-+ memcpy ( frame+n, digest, digestlen ); n += digestlen;
-+ assert ( n == nframe );
-+
-+ gcry_mpi_scan (r_val, GCRYMPI_FMT_USG, frame, nframe, &nframe);
-+ g_free (frame);
-+ return 0;
-+}
-+
-+static gboolean
-+gtk_migration_crypt_check_signature (struct rsa_key *k, char *hash, char *sigbuf)
-+{
-+ gcry_mpi_t mpi, mpi2;
-+ gcry_sexp_t data, sig, key;
-+ int rc;
-+
-+ do_encode_md (hash, 20, GCRY_MD_SHA1, 1024, &mpi);
-+
-+ gcry_sexp_build (&data, NULL, "(data (value %m))", mpi);
-+
-+ gcry_mpi_release (mpi);
-+
-+ gcry_sexp_build (&key, NULL, "(public-key (rsa (n %m) (e %m)))", k->n, k->e);
-+
-+ if (gcry_mpi_scan (&mpi2, GCRYMPI_FMT_HEX, sigbuf, 0, NULL))
-+ {
-+ gcry_sexp_release (data);
-+ return FALSE;
-+ }
-+
-+ gcry_sexp_build (&sig, NULL, "(sig-val (rsa (s %m)))", mpi2);
-+
-+ rc = gcry_pk_verify (sig, data, key);
-+
-+ gcry_sexp_release (data);
-+ gcry_sexp_release (key);
-+ gcry_sexp_release (sig);
-+ gcry_mpi_release (mpi2);
-+
-+ if (rc)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static void
-+gtk_migration_auth_update_challenge (void)
-+{
-+ int i;
-+ unsigned char *p;
-+
-+ if (gtk_migration_auth_challenge_string == NULL)
-+ gtk_migration_auth_challenge_string = g_malloc ((CHALLENGE_LEN * 2) + 9);
-+
-+ p = gtk_migration_auth_challenge_string;
-+
-+ for (i = 0; i < CHALLENGE_LEN; i++)
-+ {
-+ *p++ = hexbyte (challenge_bytes[i] >> 4);
-+ *p++ = hexbyte (challenge_bytes[i] & 15);
-+ }
-+
-+ sprintf (p, "%08lx", challenge_seq++);
-+}
-+
-+static void
-+gtk_migration_auth_generate_challenge (void)
-+{
-+ gcry_randomize (challenge_bytes, sizeof (challenge_bytes), GCRY_STRONG_RANDOM);
-+ gtk_migration_auth_update_challenge ();
-+}
-+
-+static struct rsa_key *
-+parse_pubkey (char *s)
-+{
-+ struct rsa_key *r;
-+ gcry_mpi_t n, e;
-+ gchar *sp;
-+
-+ sp = strtok (s, " \n");
-+ gcry_mpi_scan (&e, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+ sp = strtok (NULL, " \n");
-+ gcry_mpi_scan (&n, GCRYMPI_FMT_HEX, sp, 0, NULL);
-+
-+ r = g_malloc0 (sizeof (struct rsa_key));
-+ r->e = e;
-+ r->n = n;
-+ return r;
-+}
-+
-+static struct rsa_key *
-+lookup_pubkey (u_int32_t id)
-+{
-+ const gchar *home_dir = g_get_home_dir ();
-+ gchar *filename = g_strdup_printf ("%s/.gpe/migrate/public", home_dir);
-+ FILE *fp = fopen (filename, "r");
-+ struct rsa_key *r = NULL;
-+
-+ if (fp)
-+ {
-+ while (!feof (fp))
-+ {
-+ char buffer[4096];
-+ if (fgets (buffer, 4096, fp))
-+ {
-+ char *p;
-+ u_int32_t this_id = strtoul (buffer, &p, 16);
-+ if (p != buffer && *p == ' ')
-+ {
-+#ifdef DEBUG
-+ fprintf (stderr, "found id %x\n", this_id);
-+#endif
-+ if (this_id == id)
-+ {
-+ r = parse_pubkey (++p);
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ fclose (fp);
-+ }
-+
-+ g_free (filename);
-+ return r;
-+}
-+
-+static void
-+free_pubkey (struct rsa_key *k)
-+{
-+ gcry_mpi_release (k->n);
-+ gcry_mpi_release (k->e);
-+
-+ g_free (k);
-+}
-+
-+static gboolean
-+gtk_migration_auth_validate_request (char *display, char *data)
-+{
-+ u_int32_t key_id;
-+ char *ep;
-+ char *p;
-+ struct rsa_key *k;
-+ char hash[20];
-+ gboolean rc;
-+
-+ p = strchr (data, ' ');
-+ if (p == NULL)
-+ return FALSE;
-+ *p++ = 0;
-+
-+ key_id = strtoul (data, &ep, 16);
-+ if (*ep)
-+ return FALSE;
-+
-+ k = lookup_pubkey (key_id);
-+ if (k == NULL)
-+ return FALSE;
-+
-+ gtk_migration_crypt_create_hash (display, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string), hash);
-+
-+ rc = gtk_migration_crypt_check_signature (k, hash, p);
-+
-+ free_pubkey (k);
-+
-+ return rc;
-+}
-+
-+static int
-+do_change_display (GtkWidget *w, char *display_name)
-+{
-+ GdkDisplay *newdisplay;
-+ guint screen_nr = 1;
-+ guint i;
-+
-+ if (display_name[0] == 0)
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+
-+ i = strlen (display_name) - 1;
-+ while (i > 0 && isdigit (display_name[i]))
-+ i--;
-+
-+ if (display_name[i] == '.')
-+ {
-+ screen_nr = atoi (display_name + i + 1);
-+ display_name[i] = 0;
-+ }
-+
-+ newdisplay = gdk_display_open (display_name);
-+ if (newdisplay)
-+ {
-+ GdkScreen *screen = gdk_display_get_screen (newdisplay, screen_nr);
-+ if (screen)
-+ {
-+ gtk_window_set_screen (GTK_WINDOW (w), screen);
-+ gdk_display_manager_set_default_display (gdk_display_manager_get (),
-+ newdisplay);
-+ return DISPLAY_CHANGE_SUCCESS;
-+ }
-+ else
-+ return DISPLAY_CHANGE_NO_SUCH_SCREEN;
-+ }
-+
-+ return DISPLAY_CHANGE_UNABLE_TO_CONNECT;
-+}
-+
-+static void
-+set_challenge_on_window (GdkWindow *window)
-+{
-+ gdk_property_change (window, rsa_challenge_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, gtk_migration_auth_challenge_string,
-+ strlen (gtk_migration_auth_challenge_string));
-+}
-+
-+static void
-+update_challenge_on_windows (void)
-+{
-+ GSList *i;
-+
-+ gtk_migration_auth_update_challenge ();
-+
-+ for (i = all_widgets; i; i = i->next)
-+ {
-+ GtkWidget *w = GTK_WIDGET (i->data);
-+ if (w->window)
-+ set_challenge_on_window (w->window);
-+ }
-+}
-+
-+static void
-+reset_state (GdkWindow *window)
-+{
-+ gdk_property_change (window, display_change_gdkatom, string_gdkatom,
-+ 8, GDK_PROP_MODE_REPLACE, NULL, 0);
-+}
-+
-+static void
-+generate_response (GdkDisplay *gdisplay, Display *dpy, Window window, int code)
-+{
-+ XClientMessageEvent ev;
-+ Atom atom = gdk_x11_atom_to_xatom_for_display (gdisplay,
-+ display_change_gdkatom);
-+
-+ memset (&ev, 0, sizeof (ev));
-+
-+ ev.type = ClientMessage;
-+ ev.window = window;
-+ ev.message_type = atom;
-+ ev.format = 32;
-+
-+ ev.data.l[0] = window;
-+ ev.data.l[1] = code;
-+
-+ XSendEvent (dpy, DefaultRootWindow (dpy), False, SubstructureNotifyMask, (XEvent *)&ev);
-+}
-+
-+static int
-+handle_request (GdkWindow *gwindow, char *prop)
-+{
-+ GtkWidget *widget;
-+ char *target, *auth_method, *auth_data;
-+ char *p;
-+
-+ target = prop;
-+ auth_method = "NULL";
-+ auth_data = NULL;
-+
-+ p = strchr (prop, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_method = ++p;
-+
-+ p = strchr (p, ' ');
-+ if (p)
-+ {
-+ *p = 0;
-+ auth_data = ++p;
-+ }
-+ }
-+
-+ if (no_auth == FALSE)
-+ {
-+ if (!strcasecmp (auth_method, "null"))
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ else if (!strcasecmp (auth_method, "rsa-sig"))
-+ {
-+ if (gtk_migration_auth_validate_request (target, auth_data) == FALSE)
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+ else
-+ return DISPLAY_CHANGE_AUTHENTICATION_BAD;
-+ }
-+
-+ gdk_window_get_user_data (gwindow, (gpointer*) &widget);
-+
-+ if (widget)
-+ return do_change_display (widget, target);
-+
-+ return DISPLAY_CHANGE_INDETERMINATE_ERROR;
-+}
-+
-+static GdkFilterReturn
-+filter_func (GdkXEvent *xevp, GdkEvent *ev, gpointer p)
-+{
-+ XPropertyEvent *xev = (XPropertyEvent *)xevp;
-+
-+ if (xev->type == PropertyNotify)
-+ {
-+ GdkDisplay *gdisplay;
-+ Atom atom;
-+
-+ gdisplay = gdk_x11_lookup_xdisplay (xev->display);
-+ if (gdisplay)
-+ {
-+ atom = gdk_x11_atom_to_xatom_for_display (gdisplay, display_change_gdkatom);
-+
-+ if (xev->atom == atom)
-+ {
-+ GdkWindow *gwindow;
-+
-+ gwindow = gdk_window_lookup_for_display (gdisplay, xev->window);
-+
-+ if (gwindow)
-+ {
-+ GdkAtom actual_type;
-+ gint actual_format;
-+ gint actual_length;
-+ unsigned char *prop = NULL;
-+
-+ if (gdk_property_get (gwindow, display_change_gdkatom, string_gdkatom,
-+ 0, G_MAXLONG, FALSE, &actual_type, &actual_format,
-+ &actual_length, &prop))
-+ {
-+ if (actual_length != 0)
-+ {
-+ if (actual_type == string_gdkatom && actual_length > 8)
-+ {
-+ gchar *buf = g_malloc (actual_length + 1);
-+ int rc;
-+
-+ memcpy (buf, prop, actual_length);
-+ buf[actual_length] = 0;
-+
-+ rc = handle_request (gwindow, buf);
-+
-+ g_free (buf);
-+ generate_response (gdisplay, xev->display, xev->window, rc);
-+
-+ if (rc == DISPLAY_CHANGE_SUCCESS)
-+ update_challenge_on_windows ();
-+ }
-+
-+ reset_state (gwindow);
-+ }
-+ }
-+
-+ if (prop)
-+ g_free (prop);
-+ }
-+ }
-+
-+ return GDK_FILTER_REMOVE;
-+ }
-+ }
-+
-+ return GDK_FILTER_CONTINUE;
-+}
-+
-+static void
-+unrealize_window (GtkWidget *w)
-+{
-+ all_widgets = g_slist_remove (all_widgets, w);
-+}
-+
-+void
-+gtk_migration_mark_window (GtkWidget *w)
-+{
-+ if (! gtk_migration_initialised)
-+ {
-+ g_warning ("gtk_migration not initialised yet");
-+ return;
-+ }
-+
-+ if (GTK_WIDGET_REALIZED (w))
-+ {
-+ GdkWindow *window = w->window;
-+
-+ gdk_window_add_filter (window, filter_func, NULL);
-+
-+ reset_state (window);
-+ set_challenge_on_window (window);
-+
-+ all_widgets = g_slist_append (all_widgets, w);
-+
-+ g_signal_connect (G_OBJECT (w), "unrealize", G_CALLBACK (unrealize_window), NULL);
-+ }
-+ else
-+ g_signal_connect (G_OBJECT (w), "realize", G_CALLBACK (gtk_migration_mark_window), NULL);
-+}
-+
-+void
-+gtk_migration_init (void)
-+{
-+ if (getenv ("GPE_DISPLAY_MIGRATION_NO_AUTH") != NULL)
-+ no_auth = TRUE;
-+
-+ string_gdkatom = gdk_atom_intern ("STRING", FALSE);
-+ display_change_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE", FALSE);
-+ rsa_challenge_gdkatom = gdk_atom_intern ("_GPE_DISPLAY_CHANGE_RSA_CHALLENGE", FALSE);
-+
-+ gtk_migration_auth_generate_challenge ();
-+
-+ gtk_migration_initialised = TRUE;
-+}
-Index: gtk/gtkwindow.c
-===================================================================
---- gtk/gtkwindow.c.orig 2006-10-03 16:51:46.000000000 +0100
-+++ gtk/gtkwindow.c 2006-10-30 12:56:34.000000000 +0000
-@@ -50,6 +50,9 @@
- #include "x11/gdkx.h"
- #endif
-
-+extern void gtk_migration_mark_window (GtkWidget *w);
-+
-+
- enum {
- SET_FOCUS,
- FRAME_EVENT,
-@@ -823,6 +826,10 @@
-
- g_signal_connect (window->screen, "composited_changed",
- G_CALLBACK (gtk_window_on_composited_changed), window);
-+
-+#ifdef ENABLE_MIGRATION
-+ gtk_migration_mark_window (window);
-+#endif
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.10.9/no-demos.patch b/packages/gtk+/gtk+-2.10.9/no-demos.patch
deleted file mode 100644
index 0fc4c48d1a..0000000000
--- a/packages/gtk+/gtk+-2.10.9/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
-+++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
-
- # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.10.9/no-xwc.patch b/packages/gtk+/gtk+-2.10.9/no-xwc.patch
deleted file mode 100644
index affb4a303e..0000000000
--- a/packages/gtk+/gtk+-2.10.9/no-xwc.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2004-11-30 14:57:14 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkdrawable-x11.c 2005-01-02 15:38:06 +00:00
-@@ -576,12 +576,14 @@
- GDK_GC_GET_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
- }
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
- XmbDrawString (xdisplay, impl->xid,
- fontset, GDK_GC_GET_XGC (gc), x, y, text, text_length);
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-@@ -613,6 +615,7 @@
- GDK_GC_GET_XGC (gc), x, y, text_8bit, text_length);
- g_free (text_8bit);
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- if (sizeof(GdkWChar) == sizeof(wchar_t))
-@@ -633,6 +636,7 @@
- g_free (text_wchar);
- }
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c gtk+-2.6.0/gdk/x11/gdkfont-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2004-08-26 01:23:46 +01:00
-+++ gtk+-2.6.0/gdk/x11/gdkfont-x11.c 2005-01-02 15:45:39 +00:00
-@@ -525,10 +525,12 @@
- width = XTextWidth16 (xfont, (XChar2b *) text, text_length / 2);
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, text, text_length);
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -578,6 +580,7 @@
- width = 0;
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- if (sizeof(GdkWChar) == sizeof(wchar_t))
- {
-@@ -595,6 +598,7 @@
- g_free (text_wchar);
- }
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -667,6 +671,7 @@
- if (descent)
- *descent = overall.descent;
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &logical);
-@@ -681,6 +686,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-@@ -753,6 +759,7 @@
- *descent = overall.descent;
- break;
- }
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
-
-@@ -780,6 +787,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-diff -urNd ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c gtk+-2.6.0/gdk/x11/gdkim-x11.c
---- ../gtk+-2.6.0-r2/gtk+-2.6.0/gdk/x11/gdkim-x11.c 2004-11-17 00:55:10 +00:00
-+++ gtk+-2.6.0/gdk/x11/gdkim-x11.c 2005-01-02 15:42:04 +00:00
-@@ -48,6 +48,7 @@
- void
- _gdk_x11_initialize_locale (void)
- {
-+#ifdef HAVE_XWC
- wchar_t result;
- gchar *current_locale;
- static char *last_locale = NULL;
-@@ -93,7 +94,8 @@
- GDK_NOTE (XIM,
- g_message ("%s multi-byte string functions.",
- gdk_use_mb ? "Using" : "Not using"));
--
-+#endif
-+
- return;
- }
-
-@@ -136,6 +138,7 @@
- {
- gchar *mbstr;
-
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -178,6 +181,7 @@
- XFree (tpr.value);
- }
- else
-+#endif
- {
- gint length = 0;
- gint i;
-@@ -210,6 +214,7 @@
- gint
- gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
- {
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -242,6 +247,7 @@
- return len_cpy;
- }
- else
-+#endif
- {
- gint i;
-
diff --git a/packages/gtk+/gtk+-2.10.9/run-iconcache.patch b/packages/gtk+/gtk+-2.10.9/run-iconcache.patch
deleted file mode 100644
index ac15e9ab24..0000000000
--- a/packages/gtk+/gtk+-2.10.9/run-iconcache.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- /tmp/Makefile.am 2007-01-08 17:44:47.000000000 +0100
-+++ gtk+-2.10.7/gtk/Makefile.am 2007-01-08 17:45:17.025251000 +0100
-@@ -1128,11 +1128,11 @@
- ./gtk-update-icon-cache
- endif
-
--gtkbuiltincache.h: @REBUILD@ stamp-icons
-- $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
-- $(gtk_update_icon_cache_program) --force --ignore-theme-index \
-- --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \
-- mv gtkbuiltincache.h.tmp gtkbuiltincache.h
-+#gtkbuiltincache.h: @REBUILD@ stamp-icons
-+# $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
-+# $(gtk_update_icon_cache_program) --force --ignore-theme-index \
-+# --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \
-+# mv gtkbuiltincache.h.tmp gtkbuiltincache.h
-
- EXTRA_DIST += \
- $(STOCK_ICONS) \
diff --git a/packages/gtk+/gtk+-2.10.9/scroll-timings.patch b/packages/gtk+/gtk+-2.10.9/scroll-timings.patch
deleted file mode 100644
index 3f823a7880..0000000000
--- a/packages/gtk+/gtk+-2.10.9/scroll-timings.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.10.0/gtk/gtkrange.c.orig 2006-07-05 12:41:39.000000000 +0200
-+++ gtk+-2.10.0/gtk/gtkrange.c 2006-07-05 12:41:58.000000000 +0200
-@@ -39,7 +39,7 @@
- #include "gtkalias.h"
-
- #define SCROLL_DELAY_FACTOR 5 /* Scroll repeat multiplier */
--#define UPDATE_DELAY 300 /* Delay for queued update */
-+#define UPDATE_DELAY 1000 /* Delay for queued update */
-
- enum {
- PROP_0,
diff --git a/packages/gtk+/gtk+-2.10.9/single-click.patch b/packages/gtk+/gtk+-2.10.9/single-click.patch
deleted file mode 100644
index 250f1629f5..0000000000
--- a/packages/gtk+/gtk+-2.10.9/single-click.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkcalendar.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkcalendar.c
-+++ gtk+-2.10.6/gtk/gtkcalendar.c
-@@ -2482,9 +2482,11 @@ calendar_main_button_press (GtkCalendar
- }
-
- calendar_select_and_focus_day (calendar, day);
-- }
-+
-+ // This change causes the calendar to disappear after choosing a day
-+/* }
- else if (event->type == GDK_2BUTTON_PRESS)
-- {
-+ {*/
- priv->in_drag = 0;
- if (day_month == MONTH_CURRENT)
- g_signal_emit (calendar,
-Index: gtk+-2.10.6/gtk/gtkfilesel.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkfilesel.c
-+++ gtk+-2.10.6/gtk/gtkfilesel.c
-@@ -2426,6 +2426,33 @@ gtk_file_selection_file_changed (GtkTree
- if (fs->last_selected != NULL)
- g_free (fs->last_selected);
-
-+ // Single-click directory entry
-+ if (new_names->len == 1)
-+ {
-+ GtkTreeView *tree_view;
-+ GtkTreeModel *model;
-+ GtkTreePath *path;
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ tree_view = gtk_tree_selection_get_tree_view (selection);
-+
-+ if (gtk_tree_selection_get_selected (selection, &model, &iter))
-+ {
-+ path = gtk_tree_model_get_path (model, &iter);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (!is_file)
-+ {
-+ gtk_file_selection_dir_activate (tree_view, path,
-+ gtk_tree_view_get_column (tree_view, DIR_COLUMN),
-+ user_data);
-+ }
-+
-+ gtk_tree_path_free (path);
-+ }
-+ }
-+
- fs->last_selected = g_strdup (g_ptr_array_index (new_names, index));
- filename = get_real_filename (fs->last_selected, FALSE);
-
diff --git a/packages/gtk+/gtk+-2.10.9/small-gtkfilesel.patch b/packages/gtk+/gtk+-2.10.9/small-gtkfilesel.patch
deleted file mode 100644
index 20bf4cf366..0000000000
--- a/packages/gtk+/gtk+-2.10.9/small-gtkfilesel.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
---- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100
-@@ -68,6 +68,7 @@
- #include "gtkprivate.h"
- #include "gtkscrolledwindow.h"
- #include "gtkstock.h"
-+#include "gtksignal.h"
- #include "gtktreeselection.h"
- #include "gtktreeview.h"
- #include "gtkvbox.h"
-@@ -77,6 +78,7 @@
- #include "gtkmessagedialog.h"
- #include "gtkdnd.h"
- #include "gtkeventbox.h"
-+#include "gtkimage.h"
-
- #undef GTK_DISABLE_DEPRECATED
- #include "gtkoptionmenu.h"
-@@ -245,7 +247,8 @@
- };
-
- enum {
-- DIR_COLUMN
-+ DIR_COLUMN,
-+ ISFILE_COLUMN
- };
-
- enum {
-@@ -400,6 +403,12 @@
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data);
-+
-+static void gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data);
-+
- static void gtk_file_selection_file_changed (GtkTreeSelection *selection,
- gpointer user_data);
- static void gtk_file_selection_dir_activate (GtkTreeView *tree_view,
-@@ -419,6 +428,7 @@
- static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
-+static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style);
-
- static void free_selected_names (GPtrArray *names);
-
-@@ -578,6 +588,23 @@
- G_PARAM_WRITABLE));
- object_class->destroy = gtk_file_selection_destroy;
- widget_class->map = gtk_file_selection_map;
-+ widget_class->style_set = gtk_file_selection_style_set;
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_boolean ("show_fileops_default",
-+ _("Show fileop buttons by default"),
-+ _("Whether file operation buttons are shown by default"),
-+ TRUE,
-+ G_PARAM_READABLE));
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("border_width",
-+ _("Border width"),
-+ _("Width of border around the main dialog area"),
-+ 0,
-+ G_MAXINT,
-+ 10,
-+ G_PARAM_READABLE));
- }
-
- static void gtk_file_selection_set_property (GObject *object,
-@@ -649,7 +676,29 @@
- gtk_widget_grab_default (widget);
- return FALSE;
- }
--
-+
-+static void
-+gtk_file_selection_style_set (GtkWidget *filesel,
-+ GtkStyle *prev_style)
-+{
-+ gboolean show_fileops;
-+ gint border_width;
-+
-+ gtk_widget_style_get (filesel,
-+ "show_fileops_default",
-+ &show_fileops,
-+ "border_width",
-+ &border_width,
-+ NULL);
-+
-+ gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
-+
-+ if (show_fileops)
-+ gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+ else
-+ gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+}
-+
- static void
- gtk_file_selection_init (GtkFileSelection *filesel)
- {
-@@ -674,17 +723,15 @@
-
- /* The dialog-sized vertical box */
- filesel->main_vbox = dialog->vbox;
-- gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
-
- /* The horizontal box containing create, rename etc. buttons */
- filesel->button_area = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
-- gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area,
- FALSE, FALSE, 0);
- gtk_widget_show (filesel->button_area);
-
-- gtk_file_selection_show_fileop_buttons (filesel);
-+ gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
-
- /* hbox for pulldown menu */
- pulldown_hbox = gtk_hbox_new (TRUE, 5);
-@@ -723,25 +770,32 @@
-
- /* The directories list */
-
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
- filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
- g_object_unref (model);
-
-- column = gtk_tree_view_column_new_with_attributes (_("Folders"),
-+ column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
- gtk_cell_renderer_text_new (),
- "text", DIR_COLUMN,
- NULL);
- label = gtk_label_new_with_mnemonic (_("Fol_ders"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-+
-+ /* gtk_tree_view_column_set_widget (column, label); */
-+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
-+
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
-
- gtk_widget_set_size_request (filesel->dir_list,
- DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
- g_signal_connect (filesel->dir_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_dir_activate), filesel);
-+ G_CALLBACK (gtk_file_selection_activate), filesel);
-+
-+ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
-+ G_CALLBACK (gtk_file_selection_file_changed), filesel);
-+
-
- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
-
-@@ -758,41 +812,6 @@
- gtk_widget_show (filesel->dir_list);
- gtk_widget_show (scrolled_win);
-
-- /* The files list */
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-- filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
-- g_object_unref (model);
--
-- column = gtk_tree_view_column_new_with_attributes (_("Files"),
-- gtk_cell_renderer_text_new (),
-- "text", FILE_COLUMN,
-- NULL);
-- label = gtk_label_new_with_mnemonic (_("_Files"));
-- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
-- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
--
-- gtk_widget_set_size_request (filesel->file_list,
-- FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
-- g_signal_connect (filesel->file_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_file_activate), filesel);
-- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
-- G_CALLBACK (gtk_file_selection_file_changed), filesel);
--
-- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
--
-- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
-- gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
-- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-- gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
-- gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
-- gtk_widget_show (filesel->file_list);
-- gtk_widget_show (scrolled_win);
--
- /* action area for packing buttons into. */
- filesel->action_area = gtk_hbox_new (TRUE, 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area,
-@@ -2008,6 +2027,23 @@
- }
-
- static void
-+gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data)
-+{
-+ GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ gtk_tree_model_get_iter (model, &iter, path);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (! is_file)
-+ gtk_file_selection_dir_activate (tree_view, path, column, user_data);
-+}
-+
-+static void
- gtk_file_selection_file_activate (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
-@@ -2103,7 +2139,6 @@
- PossibleCompletion* poss;
- GtkTreeIter iter;
- GtkListStore *dir_model;
-- GtkListStore *file_model;
- gchar* filename;
- gchar* rem_path = rel_path;
- gchar* sel_text;
-@@ -2125,10 +2160,8 @@
- g_assert (cmpl_state->reference_dir);
-
- dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
-- file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
-
- gtk_list_store_clear (dir_model);
-- gtk_list_store_clear (file_model);
-
- /* Set the dir list to include ./ and ../ */
- gtk_list_store_append (dir_model, &iter);
-@@ -2150,13 +2183,17 @@
- strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
- {
- gtk_list_store_append (dir_model, &iter);
-- gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, FALSE, -1);
- }
- }
- else
- {
-- gtk_list_store_append (file_model, &iter);
-- gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_append (dir_model, &iter);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, TRUE, -1);
- }
- }
-
diff --git a/packages/gtk+/gtk+-2.10.9/spinbutton.patch b/packages/gtk+/gtk+-2.10.9/spinbutton.patch
deleted file mode 100644
index c26dc6d93c..0000000000
--- a/packages/gtk+/gtk+-2.10.9/spinbutton.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-Index: gtk+-2.10.6/gtk/gtkspinbutton.c
-===================================================================
---- gtk+-2.10.6.orig/gtk/gtkspinbutton.c
-+++ gtk+-2.10.6/gtk/gtkspinbutton.c
-@@ -682,7 +682,7 @@ gtk_spin_button_size_allocate (GtkWidget
-
- spin = GTK_SPIN_BUTTON (widget);
- arrow_size = spin_button_get_arrow_size (spin);
-- panel_width = arrow_size + 2 * widget->style->xthickness;
-+ panel_width = (2 * arrow_size) + 4 * widget->style->xthickness;
-
- widget->allocation = *allocation;
-
-@@ -815,19 +815,16 @@ gtk_spin_button_draw_arrow (GtkSpinButto
- {
- width = spin_button_get_arrow_size (spin_button) + 2 * widget->style->xthickness;
-
-+ y = widget->style->ythickness;
-+ height = widget->requisition.height - (2 * y);
-+
- if (arrow_type == GTK_ARROW_UP)
- {
- x = 0;
-- y = 0;
--
-- height = widget->requisition.height / 2;
- }
- else
- {
-- x = 0;
-- y = widget->requisition.height / 2;
--
-- height = (widget->requisition.height + 1) / 2;
-+ x = width;
- }
-
- if (spin_button_at_limit (spin_button, arrow_type))
-@@ -857,32 +854,17 @@ gtk_spin_button_draw_arrow (GtkSpinButto
- shadow_type = GTK_SHADOW_OUT;
- }
- }
--
-+
- gtk_paint_box (widget->style, spin_button->panel,
- state_type, shadow_type,
- NULL, widget,
-- (arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
-+ NULL,
- x, y, width, height);
-
- height = widget->requisition.height;
-
-- if (arrow_type == GTK_ARROW_DOWN)
-- {
-- y = height / 2;
-- height = height - y - 2;
-- }
-- else
-- {
-- y = 2;
-- height = height / 2 - 2;
-- }
--
- width -= 3;
--
-- if (widget && gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-- x = 2;
-- else
-- x = 1;
-+ height -= 3;
-
- w = width / 2;
- w -= w % 2 - 1; /* force odd */
-@@ -1062,7 +1044,7 @@ gtk_spin_button_button_press (GtkWidget
- if (GTK_ENTRY (widget)->editable)
- gtk_spin_button_update (spin);
-
-- if (event->y <= widget->requisition.height / 2)
-+ if (event->x <= (spin_button_get_arrow_size (spin) + widget->style->xthickness))
- {
- if (event->button == 1)
- start_spinning (spin, GTK_ARROW_UP, spin->adjustment->step_increment);
-@@ -1097,44 +1079,11 @@ gtk_spin_button_button_release (GtkWidge
-
- arrow_size = spin_button_get_arrow_size (spin);
-
-- if (event->button == spin->button)
-- {
-- int click_child = spin->click_child;
-+ gtk_spin_button_stop_spinning (spin);
-
-- gtk_spin_button_stop_spinning (spin);
--
-- if (event->button == 3)
-- {
-- if (event->y >= 0 && event->x >= 0 &&
-- event->y <= widget->requisition.height &&
-- event->x <= arrow_size + 2 * widget->style->xthickness)
-- {
-- if (click_child == GTK_ARROW_UP &&
-- event->y <= widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->upper - spin->adjustment->value;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, diff);
-- }
-- else if (click_child == GTK_ARROW_DOWN &&
-- event->y > widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->value - spin->adjustment->lower;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, -diff);
-- }
-- }
-- }
-- spin_button_redraw (spin);
-+ spin_button_redraw (spin);
-
-- return TRUE;
-- }
-- else
-- return GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->button_release_event (widget, event);
-+ return TRUE;
- }
-
- static gint
diff --git a/packages/gtk+/gtk+-2.10.9/xsettings.patch b/packages/gtk+/gtk+-2.10.9/xsettings.patch
deleted file mode 100644
index b63e262d34..0000000000
--- a/packages/gtk+/gtk+-2.10.9/xsettings.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- gtk+-2.4.4/gdk/x11/gdkevents-x11.c.old Sun Aug 22 17:14:00 2004
-+++ gtk+-2.4.4/gdk/x11/gdkevents-x11.c Sun Aug 22 17:14:00 2004
-@@ -2827,10 +2827,9 @@
- {
- GdkScreenX11 *screen = data;
-
-- if (xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent))
-- return GDK_FILTER_REMOVE;
-- else
-- return GDK_FILTER_CONTINUE;
-+ xsettings_client_process_event (screen->xsettings_client, (XEvent *)xevent);
-+
-+ return GDK_FILTER_CONTINUE;
- }
-
- static void
diff --git a/packages/gtk+/gtk+-2.6.10/gtk+-2.6.10-bg.patch b/packages/gtk+/gtk+-2.6.10/gtk+-2.6.10-bg.patch
new file mode 100644
index 0000000000..039440f933
--- /dev/null
+++ b/packages/gtk+/gtk+-2.6.10/gtk+-2.6.10-bg.patch
@@ -0,0 +1,20 @@
+diff -ur gtk+-2.8.20/gtk/gtkiconview.c gtk+-2.8.20-new/gtk/gtkiconview.c
+--- gtk+-2.8.20/gtk/gtkiconview.c 2006-04-11 20:44:15.000000000 +0200
++++ gtk+-2.8.20-new/gtk/gtkiconview.c 2007-01-03 20:20:26.000000000 +0100
+@@ -899,9 +899,14 @@
+ gdk_window_set_user_data (icon_view->priv->bin_window, widget);
+
+ widget->style = gtk_style_attach (widget->style, widget->window);
+- gdk_window_set_background (icon_view->priv->bin_window, &widget->style->base[widget->state]);
++/* gdk_window_set_background (icon_view->priv->bin_window, &widget->style->base[widget->state]);
+ gdk_window_set_background (widget->window, &widget->style->base[widget->state]);
+-
++*/
++printf("realize iconview\n");
++// gdk_window_set_back_pixmap(widget->window, NULL, FALSE);
++// gdk_window_set_back_pixmap(icon_view->priv->bin_window, NULL, FALSE);
++ gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
++ gtk_style_set_background (widget->style, icon_view->priv->bin_window, GTK_STATE_NORMAL);
+ gdk_window_show (icon_view->priv->bin_window);
+ }
+
diff --git a/packages/gtk+/gtk+-directfb_2.10.9.bb b/packages/gtk+/gtk+-directfb_2.10.9.bb
new file mode 100644
index 0000000000..f8062f33f7
--- /dev/null
+++ b/packages/gtk+/gtk+-directfb_2.10.9.bb
@@ -0,0 +1,38 @@
+require gtk-2.10.inc
+
+PR = "r0"
+
+# disable per default - untested and not all patches included.
+DEFAULT_PREFERENCE = "-1"
+S = "${WORKDIR}/gtk+-${PV}"
+
+LDFLAGS_append += " -ldirectfb"
+CFLAGS_append += " -I${STAGING_INCDIR}/directfb"
+
+SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
+ file://no-xwc.patch;patch=1 \
+ file://automake-lossage.patch;patch=1 \
+ file://disable-tooltips.patch;patch=1 \
+ file://gtklabel-resize-patch;patch=1 \
+ file://menu-deactivate.patch;patch=1 \
+ file://xsettings.patch;patch=1 \
+ file://scroll-timings.patch;patch=1 \
+ file://small-gtkfilesel.patch;patch=1 \
+ file://migration.patch;patch=1;pnum=0 \
+ file://run-iconcache.patch;patch=1 \
+ file://hardcoded_libtool.patch;patch=1 \
+ file://no-demos.patch;patch=1 \
+ file://single-click.patch;patch=1 \
+ file://spinbutton.patch;patch=1 \
+ file://gtk+-handhelds.patch;patch=1 \
+ file://directfb_pixbuf_deprecated_fix.patch;patch=1 \
+# file://gtk-doc.patch;patch=1 \
+"
+EXTRA_OECONF =" \
+ --prefix=${STAGING_DIR} \
+ --with-gdktarget=directfb \
+ --without-x \
+ --without-libtiff \
+ "
+GDKTARGET="directfb"
+
diff --git a/packages/gtk+/gtk+_2.10.14.bb b/packages/gtk+/gtk+_2.10.14.bb
new file mode 100644
index 0000000000..db546d2cb6
--- /dev/null
+++ b/packages/gtk+/gtk+_2.10.14.bb
@@ -0,0 +1,39 @@
+require gtk-2.10.inc
+
+PR = "r3"
+
+SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
+ file://no-xwc.patch;patch=1 \
+ file://automake-lossage.patch;patch=1 \
+ file://disable-tooltips.patch;patch=1 \
+ file://gtklabel-resize-patch;patch=1 \
+ file://menu-deactivate.patch;patch=1 \
+ file://xsettings.patch;patch=1 \
+ file://scroll-timings.patch;patch=1 \
+ file://small-gtkfilesel.patch;patch=1 \
+ file://migration.patch;patch=1;pnum=0 \
+ file://run-iconcache.patch;patch=1 \
+ file://hardcoded_libtool.patch;patch=1 \
+ file://no-demos.patch;patch=1 \
+ file://single-click.patch;patch=1 \
+ file://spinbutton.patch;patch=1 \
+ file://gtk+-handhelds.patch;patch=1 \
+ file://filesel-fix-segfault.patch;patch=1 \
+ file://toggle-font.diff;patch=1;pnum=0 \
+ file://combo-arrow-size.patch;patch=1;pnum=0 \
+ file://range-no-redraw.patch;patch=1;pnum=0 \
+ file://scrolled-placement.patch;patch=1;pnum=0 \
+ "
+
+#check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points
+require gtk-fpu.inc
+EXTRA_OECONF += "${@get_gtk_fpu_setting(bb, d)}"
+
+# try to squeeze some more performance out of it
+SRC_URI_append_fic-gta01 = " file://lower-quality-scaling-in-pixbuf-engine.patch;patch=1"
+SRC_URI_append_fic-gta02 = " file://lower-quality-scaling-in-pixbuf-engine.patch;patch=1"
+# this doesn't seem to work
+SRC_URI_OVERRIDES_PACKAGE_ARCH = "1"
+# let's do it manually then
+PACKAGE_ARCH_fic-gta01 = "fic-gta01"
+PACKAGE_ARCH_fic-gta02 = "fic-gta02"
diff --git a/packages/gtk+/gtk+_2.10.3.bb b/packages/gtk+/gtk+_2.10.3.bb
deleted file mode 100644
index 51a79598dd..0000000000
--- a/packages/gtk+/gtk+_2.10.3.bb
+++ /dev/null
@@ -1,103 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete \
-set of widgets, GTK+ is suitable for projects ranging from small one-off projects to complete application suites."
-HOMEPAGE = "http://www.gtk.org"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt cairo cups"
-PR = "r3"
-
-# disable per default - untested and not all patches included.
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
- file://no-xwc.patch;patch=1 \
- file://automake-lossage.patch;patch=1 \
- file://disable-tooltips.patch;patch=1 \
- file://gtklabel-resize-patch;patch=1 \
- file://menu-deactivate.patch;patch=1 \
- file://xsettings.patch;patch=1 \
- file://scroll-timings.patch;patch=1 \
- file://small-gtkfilesel.patch;patch=1 \
- file://migration.patch;patch=1;pnum=0 \
- file://run-iconcache.patch;patch=1 \
- file://disable-print.patch;patch=1 \
- file://hardcoded_libtool.patch;patch=1 \
- file://no-demos.patch;patch=1"
-# file://gtk+-handhelds.patch;patch=1
-# file://single-click.patch;patch=1
-# file://spinbutton.patch;patch=1 \
-
-inherit autotools pkgconfig
-
-FILES_${PN} = "${bindir}/gdk-pixbuf-query-loaders \
- ${bindir}/gtk-update-icon-cache \
- ${bindir}/gtk-query-immodules-2.0 \
- ${libdir}/lib*.so.* \
- ${datadir}/themes ${sysconfdir} \
- ${libdir}/gtk-2.0/${LIBV}/engines/libpixmap.so"
-FILES_${PN}-dev += " \
- ${datadir}/gtk-2.0/include \
- ${libdir}/gtk-2.0/include \
- ${libdir}/gtk-2.0/${LIBV}/loaders/*.la \
- ${libdir}/gtk-2.0/${LIBV}/immodules/*.la \
- ${libdir}/gtk-2.0/${LIBV}/engines/*.la \
- ${bindir}/gdk-pixbuf-csource"
-FILES_${PN}-dbg += " \
- ${libdir}/gtk-2.0/${LIBV}/loaders/.debug/* \
- ${libdir}/gtk-2.0/${LIBV}/immodules/.debug/* \
- ${libdir}/gtk-2.0/${LIBV}/engines/.debug/*"
-
-
-RRECOMMENDS_${PN} = "glibc-gconv-iso8859-1 ttf-dejavu-sans"
-RRECOMMENDS_${PN}_angstrom = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-RRECOMMENDS_${PN}_openzaurus = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-
-EXTRA_OECONF = "--without-libtiff --disable-xkb --disable-glibtest --enable-display-migration"
-
-LIBV = "2.10.0"
-
-do_stage () {
- oe_libinstall -so -C gtk libgtk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C contrib/gdk-pixbuf-xlib libgdk_pixbuf_xlib-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk-pixbuf libgdk_pixbuf-2.0 ${STAGING_LIBDIR}
-
- autotools_stage_includes
-
- mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include
- install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h
-
- install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/gtk-2.0
-}
-
-postinst_prologue() {
-if [ "x$D" != "x" ]; then
- exit 1
-fi
-
-}
-
-PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-* gtk-printbackend-*"
-
-python populate_packages_prepend () {
- import os.path
-
- prologue = bb.data.getVar("postinst_prologue", d, 1)
-
- gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d)
- loaders_root = os.path.join(gtk_libdir, 'loaders')
- immodules_root = os.path.join(gtk_libdir, 'immodules')
- printmodules_root = os.path.join(gtk_libdir, 'printbackends');
-
- do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', prologue + 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders')
- do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', prologue + 'gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules')
- do_split_packages(d, printmodules_root, '^libprintbackend-(.*)\.so$', 'gtk-printbackend-%s', 'GTK printbackend module for %s')
-
- if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
- bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d)
-}
diff --git a/packages/gtk+/gtk+_2.10.6.bb b/packages/gtk+/gtk+_2.10.6.bb
deleted file mode 100644
index 33be0019cb..0000000000
--- a/packages/gtk+/gtk+_2.10.6.bb
+++ /dev/null
@@ -1,103 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete \
-set of widgets, GTK+ is suitable for projects ranging from small one-off projects to complete application suites."
-HOMEPAGE = "http://www.gtk.org"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt cairo cups"
-PR = "r7"
-
-# disable per default - untested and not all patches included.
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
- file://no-xwc.patch;patch=1 \
- file://automake-lossage.patch;patch=1 \
- file://disable-tooltips.patch;patch=1 \
- file://gtklabel-resize-patch;patch=1 \
- file://menu-deactivate.patch;patch=1 \
- file://xsettings.patch;patch=1 \
- file://scroll-timings.patch;patch=1 \
- file://small-gtkfilesel.patch;patch=1 \
- file://migration.patch;patch=1;pnum=0 \
- file://run-iconcache.patch;patch=1 \
- file://hardcoded_libtool.patch;patch=1 \
- file://no-demos.patch;patch=1 \
- file://pangoxft2.10.6.diff;patch=1 \
- file://single-click.patch;patch=1 \
- file://spinbutton.patch;patch=1 \
- file://gtk+-handhelds.patch;patch=1"
-
-inherit autotools pkgconfig
-
-FILES_${PN} = "${bindir}/gdk-pixbuf-query-loaders \
- ${bindir}/gtk-update-icon-cache \
- ${bindir}/gtk-query-immodules-2.0 \
- ${libdir}/lib*.so.* \
- ${datadir}/themes ${sysconfdir} \
- ${libdir}/gtk-2.0/${LIBV}/engines/libpixmap.so"
-FILES_${PN}-dev += " \
- ${datadir}/gtk-2.0/include \
- ${libdir}/gtk-2.0/include \
- ${libdir}/gtk-2.0/${LIBV}/loaders/*.la \
- ${libdir}/gtk-2.0/${LIBV}/immodules/*.la \
- ${libdir}/gtk-2.0/${LIBV}/engines/*.la \
- ${bindir}/gdk-pixbuf-csource"
-FILES_${PN}-dbg += " \
- ${libdir}/gtk-2.0/${LIBV}/loaders/.debug/* \
- ${libdir}/gtk-2.0/${LIBV}/immodules/.debug/* \
- ${libdir}/gtk-2.0/${LIBV}/engines/.debug/*"
-
-
-RRECOMMENDS_${PN} = "glibc-gconv-iso8859-1 ttf-dejavu-sans"
-RRECOMMENDS_${PN}_angstrom = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-RRECOMMENDS_${PN}_openzaurus = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-
-EXTRA_OECONF = "--without-libtiff --disable-xkb --disable-glibtest --enable-display-migration"
-
-LIBV = "2.10.0"
-
-do_stage () {
- oe_libinstall -so -C gtk libgtk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C contrib/gdk-pixbuf-xlib libgdk_pixbuf_xlib-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk-pixbuf libgdk_pixbuf-2.0 ${STAGING_LIBDIR}
-
- autotools_stage_includes
-
- mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include
- install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h
-
- install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/gtk-2.0
-}
-
-postinst_prologue() {
-if [ "x$D" != "x" ]; then
- exit 1
-fi
-
-}
-
-PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-* gtk-printbackend-*"
-
-python populate_packages_prepend () {
- import os.path
-
- prologue = bb.data.getVar("postinst_prologue", d, 1)
-
- gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d)
- loaders_root = os.path.join(gtk_libdir, 'loaders')
- immodules_root = os.path.join(gtk_libdir, 'immodules')
- printmodules_root = os.path.join(gtk_libdir, 'printbackends');
-
- do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', prologue + 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders')
- do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', prologue + 'gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules')
- do_split_packages(d, printmodules_root, '^libprintbackend-(.*)\.so$', 'gtk-printbackend-%s', 'GTK printbackend module for %s')
-
- if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
- bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d)
-}
diff --git a/packages/gtk+/gtk+_2.10.7.bb b/packages/gtk+/gtk+_2.10.7.bb
deleted file mode 100644
index f78b9d459c..0000000000
--- a/packages/gtk+/gtk+_2.10.7.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-require gtk-2.10.inc
-
-PR = "r0"
-
-# disable per default - untested and not all patches included.
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
- file://no-xwc.patch;patch=1 \
- file://automake-lossage.patch;patch=1 \
- file://disable-tooltips.patch;patch=1 \
- file://gtklabel-resize-patch;patch=1 \
- file://menu-deactivate.patch;patch=1 \
- file://xsettings.patch;patch=1 \
- file://scroll-timings.patch;patch=1 \
- file://small-gtkfilesel.patch;patch=1 \
- file://migration.patch;patch=1;pnum=0 \
- file://run-iconcache.patch;patch=1 \
- file://hardcoded_libtool.patch;patch=1 \
- file://no-demos.patch;patch=1 \
- file://single-click.patch;patch=1 \
- file://spinbutton.patch;patch=1 \
- file://gtk+-handhelds.patch;patch=1"
-
diff --git a/packages/gtk+/gtk+_2.10.9.bb b/packages/gtk+/gtk+_2.10.9.bb
deleted file mode 100644
index f78b9d459c..0000000000
--- a/packages/gtk+/gtk+_2.10.9.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-require gtk-2.10.inc
-
-PR = "r0"
-
-# disable per default - untested and not all patches included.
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
- file://no-xwc.patch;patch=1 \
- file://automake-lossage.patch;patch=1 \
- file://disable-tooltips.patch;patch=1 \
- file://gtklabel-resize-patch;patch=1 \
- file://menu-deactivate.patch;patch=1 \
- file://xsettings.patch;patch=1 \
- file://scroll-timings.patch;patch=1 \
- file://small-gtkfilesel.patch;patch=1 \
- file://migration.patch;patch=1;pnum=0 \
- file://run-iconcache.patch;patch=1 \
- file://hardcoded_libtool.patch;patch=1 \
- file://no-demos.patch;patch=1 \
- file://single-click.patch;patch=1 \
- file://spinbutton.patch;patch=1 \
- file://gtk+-handhelds.patch;patch=1"
-
diff --git a/packages/gtk+/gtk+_2.6.10.bb b/packages/gtk+/gtk+_2.6.10.bb
index f3d36bcb52..cab18db85c 100644
--- a/packages/gtk+/gtk+_2.6.10.bb
+++ b/packages/gtk+/gtk+_2.6.10.bb
@@ -5,7 +5,7 @@ SECTION = "libs"
LICENSE = "LGPL"
PRIORITY = "optional"
DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt"
-PR = "r8"
+PR = "r11"
SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/gtk+-${PV}.tar.bz2 \
file://help.patch;patch=1 \
@@ -32,7 +32,10 @@ SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/gtk+-${PV}.tar.bz2 \
file://gtk.keynav.gtksettings.patch;patch=1;pnum=0 \
file://gtk.keynav.gtktextview.patch;patch=1;pnum=0 \
file://gtk.keynav.gtktreeview.patch;patch=1;pnum=0 \
- file://gtk.keynav.gtkwidget.patch;patch=1;pnum=0"
+ file://gtk.keynav.gtkwidget.patch;patch=1;pnum=0 \
+ file://gtk+-2.6.10-bg.patch;patch=1 \
+ file://filesel-fix-segfault.patch;patch=1 \
+ "
inherit autotools pkgconfig
diff --git a/packages/gtk+/gtk+_2.8.9.bb b/packages/gtk+/gtk+_2.8.9.bb
index e310dcfe31..91b6b3dce9 100644
--- a/packages/gtk+/gtk+_2.8.9.bb
+++ b/packages/gtk+/gtk+_2.8.9.bb
@@ -46,7 +46,6 @@ FILES_${PN}-dbg += " \
RRECOMMENDS_${PN} = "glibc-gconv-iso8859-1 ttf-dejavu-sans"
RRECOMMENDS_${PN}_angstrom = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-RRECOMMENDS_${PN}_openzaurus = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
EXTRA_OECONF = "--without-libtiff --disable-xkb --disable-glibtest --enable-display-migration"
# --disable-cruft
diff --git a/packages/gtk+/gtk-2.10.inc b/packages/gtk+/gtk-2.10.inc
index 0a5860f01a..cc97e960a4 100644
--- a/packages/gtk+/gtk-2.10.inc
+++ b/packages/gtk+/gtk-2.10.inc
@@ -27,17 +27,21 @@ FILES_${PN}-dbg += " \
${libdir}/gtk-2.0/${LIBV}/engines/.debug/*"
-RRECOMMENDS_${PN} = "glibc-gconv-iso8859-1 ttf-dejavu-sans"
-RRECOMMENDS_${PN}_angstrom = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
-RRECOMMENDS_${PN}_openzaurus = "glibc-gconv-iso8859-1 ttf-dejavu-sans gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
+RRECOMMENDS_${PN} = " ttf-dejavu-sans"
+RRECOMMENDS_${PN}_append_angstrom = " gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
+RRECOMMENDS_${PN}_append_openzaurus = " gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-gif gdk-pixbuf-loader-xpm"
+RRECOMMENDS_${PN}_append_linux = " glibc-gconv-iso8859-1"
+RRECOMMENDS_${PN}_append_linux-gnueabi = " glibc-gconv-iso8859-1"
EXTRA_OECONF = "--without-libtiff --disable-xkb --disable-glibtest --enable-display-migration"
+export GDKTARGET="x11"
+
LIBV = "2.10.0"
do_stage () {
- oe_libinstall -so -C gtk libgtk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-x11-2.0 ${STAGING_LIBDIR}
+ oe_libinstall -so -C gtk libgtk-$GDKTARGET-2.0 ${STAGING_LIBDIR}
+ oe_libinstall -so -C gdk libgdk-$GDKTARGET-2.0 ${STAGING_LIBDIR}
oe_libinstall -so -C contrib/gdk-pixbuf-xlib libgdk_pixbuf_xlib-2.0 ${STAGING_LIBDIR}
oe_libinstall -so -C gdk-pixbuf libgdk_pixbuf-2.0 ${STAGING_LIBDIR}
diff --git a/packages/gtk+/gtk-fpu.inc b/packages/gtk+/gtk-fpu.inc
new file mode 100644
index 0000000000..52cdc3b446
--- /dev/null
+++ b/packages/gtk+/gtk-fpu.inc
@@ -0,0 +1,6 @@
+
+def get_gtk_fpu_setting(bb, d):
+ if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ]:
+ return "--enable-integer-pixops"
+ return ""
+
diff --git a/packages/gtk-engines/gtk-engines_2.2.0.bb b/packages/gtk-engines/gtk-engines_2.2.0.bb
deleted file mode 100644
index 5572568f61..0000000000
--- a/packages/gtk-engines/gtk-engines_2.2.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/base"
-DESCRIPTION = "GTK theme engines"
-DEPENDS = "gtk+"
-
-PACKAGES += " gtk-engine-pixmap gtk-engine-redmond95 gtk-engine-metal gtk-theme-metal gtk-theme-redmond95"
-FILES_gtk-engine-pixmap = "${libdir}/gtk-2.0/*/engines/libpixmap.so"
-FILES_gtk-engine-redmond95 = "${libdir}/gtk-2.0/*/engines/libredmond95.so"
-FILES_gtk-engine-metal = "${libdir}/gtk-2.0/*/engines/libmetal.so"
-FILES_gtk-theme-redmond95 = "${datadir}/themes/Redmond95"
-FILES_gtk-theme-metal = "${datadir}/themes/Metal"
-DEPENDS_gtk-theme-redmond95 = "gtk-engine-redmond95"
-DEPENDS_gtk-theme-metal = "gtk-engine-metal"
-
-SRC_URI = "${GNOME_MIRROR}/${PN}/2.2/${PN}-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
diff --git a/packages/gtk-engines/gtk-engines_2.6.1.bb b/packages/gtk-engines/gtk-engines_2.6.1.bb
deleted file mode 100644
index 6e192d78fd..0000000000
--- a/packages/gtk-engines/gtk-engines_2.6.1.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/base"
-DESCRIPTION = "GTK theme engines"
-DEPENDS = "gtk+"
-
-RDEPENDS_gtk-theme-redmond = "gtk-engine-redmond95"
-RDEPENDS_gtk-theme-metal = "gtk-engine-metal"
-RDEPENDS_gtk-theme-mist = "gtk-engine-mist"
-RDEPENDS_gtk-theme-crux = "gtk-engine-crux-engine"
-RDEPENDS_gtk-theme-lighthouseblue = "gtk-engine-lighthouseblue"
-RDEPENDS_gtk-theme-thinice = "gtk-engine-thinice"
-RDEPENDS_gtk-theme-industrial = "gtk-engine-industrial"
-
-SRC_URI = "${GNOME_MIRROR}/${PN}/2.6/${PN}-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-PACKAGES_DYNAMIC = "gtk-engine-* gtk-theme-*"
-
-python populate_packages_prepend() {
- import os.path
-
- engines_root = os.path.join(bb.data.getVar('libdir', d, 1), "gtk-2.0/2.4.0/engines")
- themes_root = os.path.join(bb.data.getVar('datadir', d, 1), "themes")
-
- do_split_packages(d, engines_root, '^lib(.*)\.so$', 'gtk-engine-%s', 'GTK %s theme engine', extra_depends='')
- do_split_packages(d, themes_root, '(.*)', 'gtk-theme-%s', 'GTK theme %s', allow_dirs=True, extra_depends='')
-}
-
diff --git a/packages/gtk-engines/gtk-engines_2.6.3.bb b/packages/gtk-engines/gtk-engines_2.6.3.bb
deleted file mode 100644
index 6e192d78fd..0000000000
--- a/packages/gtk-engines/gtk-engines_2.6.3.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/base"
-DESCRIPTION = "GTK theme engines"
-DEPENDS = "gtk+"
-
-RDEPENDS_gtk-theme-redmond = "gtk-engine-redmond95"
-RDEPENDS_gtk-theme-metal = "gtk-engine-metal"
-RDEPENDS_gtk-theme-mist = "gtk-engine-mist"
-RDEPENDS_gtk-theme-crux = "gtk-engine-crux-engine"
-RDEPENDS_gtk-theme-lighthouseblue = "gtk-engine-lighthouseblue"
-RDEPENDS_gtk-theme-thinice = "gtk-engine-thinice"
-RDEPENDS_gtk-theme-industrial = "gtk-engine-industrial"
-
-SRC_URI = "${GNOME_MIRROR}/${PN}/2.6/${PN}-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-PACKAGES_DYNAMIC = "gtk-engine-* gtk-theme-*"
-
-python populate_packages_prepend() {
- import os.path
-
- engines_root = os.path.join(bb.data.getVar('libdir', d, 1), "gtk-2.0/2.4.0/engines")
- themes_root = os.path.join(bb.data.getVar('datadir', d, 1), "themes")
-
- do_split_packages(d, engines_root, '^lib(.*)\.so$', 'gtk-engine-%s', 'GTK %s theme engine', extra_depends='')
- do_split_packages(d, themes_root, '(.*)', 'gtk-theme-%s', 'GTK theme %s', allow_dirs=True, extra_depends='')
-}
-
diff --git a/packages/gtk-engines/gtk-engines_2.6.5.bb b/packages/gtk-engines/gtk-engines_2.6.5.bb
index 6e192d78fd..0dc9a95ecc 100644
--- a/packages/gtk-engines/gtk-engines_2.6.5.bb
+++ b/packages/gtk-engines/gtk-engines_2.6.5.bb
@@ -1,7 +1,9 @@
-LICENSE = "GPL"
-SECTION = "x11/base"
DESCRIPTION = "GTK theme engines"
+SECTION = "x11/base"
+PRIORITY = "optional"
+LICENSE = "GPL"
DEPENDS = "gtk+"
+PR = "r1"
RDEPENDS_gtk-theme-redmond = "gtk-engine-redmond95"
RDEPENDS_gtk-theme-metal = "gtk-engine-metal"
@@ -13,17 +15,18 @@ RDEPENDS_gtk-theme-industrial = "gtk-engine-industrial"
SRC_URI = "${GNOME_MIRROR}/${PN}/2.6/${PN}-${PV}.tar.bz2"
-inherit autotools pkgconfig
+inherit autotools pkgconfig gtk-binver
PACKAGES_DYNAMIC = "gtk-engine-* gtk-theme-*"
python populate_packages_prepend() {
import os.path
- engines_root = os.path.join(bb.data.getVar('libdir', d, 1), "gtk-2.0/2.4.0/engines")
+ engines_ver = ['gtk-2.0/', gtkbinver_find(d), '/engines']
+
+ engines_root = os.path.join(bb.data.getVar('libdir', d, 1), ''.join(engines_ver))
themes_root = os.path.join(bb.data.getVar('datadir', d, 1), "themes")
do_split_packages(d, engines_root, '^lib(.*)\.so$', 'gtk-engine-%s', 'GTK %s theme engine', extra_depends='')
do_split_packages(d, themes_root, '(.*)', 'gtk-theme-%s', 'GTK theme %s', allow_dirs=True, extra_depends='')
}
-
diff --git a/packages/gtk-engines/gtk-sato-engine_0.1.bb b/packages/gtk-engines/gtk-sato-engine_0.1.bb
new file mode 100644
index 0000000000..4429b21cc9
--- /dev/null
+++ b/packages/gtk-engines/gtk-sato-engine_0.1.bb
@@ -0,0 +1,26 @@
+SECTION = "x11/base"
+DESCRIPTION = "Sato theme engine for GTK"
+LICENSE = "LGPL"
+DEPENDS = "gtk+"
+PR = "r0"
+
+SRC_URI = "http://pokylinux.org/releases/sato/sato-engine-0.1.tar.gz"
+S = "${WORKDIR}/sato-engine-0.1"
+
+inherit autotools pkgconfig
+
+do_configure_prepend() {
+ for i in `ls gtk-common`; do
+ ln -sf ../gtk-common/$i gtk2-engine/$i
+ done
+}
+
+PACKAGES += "gtk-theme-sato"
+FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so "
+FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*"
+FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug"
+FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes"
+
+RDEPENDS_gtk-theme-sato = "${PN}"
+
+
diff --git a/packages/gtk-engines/gtk-sato-engine_svn.bb b/packages/gtk-engines/gtk-sato-engine_svn.bb
new file mode 100644
index 0000000000..c3d760c829
--- /dev/null
+++ b/packages/gtk-engines/gtk-sato-engine_svn.bb
@@ -0,0 +1,25 @@
+LICENSE = "GPL"
+SECTION = "x11/base"
+DESCRIPTION = "GTK theme engine SATO from O-Hand"
+DEPENDS = "gtk+"
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+S = "${WORKDIR}/gtk-engine"
+
+SRC_URI = "svn://svn.o-hand.com/repos/sato/trunk;module=gtk-engine;proto=http"
+
+inherit autotools pkgconfig
+
+PACKAGES += "gtk-theme-sato"
+FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so "
+FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*"
+FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug"
+FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes"
+
+RDEPENDS_gtk-theme-sato = "${PN}"
+
+
diff --git a/packages/gtk-engines/gtk-smooth-engine_0.5.8.bb b/packages/gtk-engines/gtk-smooth-engine_0.5.8.bb
index 95a8d87d9c..28888c45ba 100644
--- a/packages/gtk-engines/gtk-smooth-engine_0.5.8.bb
+++ b/packages/gtk-engines/gtk-smooth-engine_0.5.8.bb
@@ -1,11 +1,22 @@
-PR = "r0"
-LICENSE = "LGPL"
-SECTION = "x11/base"
DESCRIPTION = "GTK theme engine Smooth"
+SECTION = "x11/base"
+PRIORITY = "optional"
+LICENSE = "LGPL"
DEPENDS = "gtk+"
-
-FILES_${PN} = "${libdir}/gtk-2.0/2.4.0/engines/libsmooth.so"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/smooth-engine/${PN}-${PV}.tar.gz"
inherit autotools pkgconfig
+
+python populate_packages_prepend() {
+ import os.path
+
+ engines_ver = ['gtk-2.0/', gtkbinver_find(d), '/engines']
+
+ engines_root = os.path.join(bb.data.getVar('libdir', d, 1), ''.join(engines_ver))
+ themes_root = os.path.join(bb.data.getVar('datadir', d, 1), "themes")
+
+ do_split_packages(d, engines_root, '^lib(.*)\.so$', 'gtk-engine-%s', 'GTK %s theme engine', extra_depends='')
+ do_split_packages(d, themes_root, '(.*)', 'gtk-theme-%s', 'GTK theme %s', allow_dirs=True, extra_depends='')
+}
diff --git a/packages/gtk-webcore/files/build_silence.patch b/packages/gtk-webcore/files/build_silence.patch
new file mode 100644
index 0000000000..ac77e17aac
--- /dev/null
+++ b/packages/gtk-webcore/files/build_silence.patch
@@ -0,0 +1,16 @@
+Index: configure.in
+===================================================================
+--- configure.in (revision 46)
++++ configure.in (working copy)
+@@ -134,9 +134,9 @@
+ AC_SUBST(LIBCURL_LIBS) #needed by the osb-nrcore.pc.in
+
+
+-CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++"
++CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-rtti -nostdinc++ -DLOG_DISABLED"
+
+-CPPFLAGS="$CPPFLAGS -include \"\$(top_srcdir)/WebCorePrefix.h\" $PACKAGE_CFLAGS $X_CFLAGS $JSCORE_CFLAGS $DEFINES"
++CPPFLAGS="$CPPFLAGS -include \"\$(top_srcdir)/WebCorePrefix.h\" $PACKAGE_CFLAGS $X_CFLAGS $JSCORE_CFLAGS $DEFINES -DLOG_DISABLED"
+ LDFLAGS="$LDFLAGS $PACKAGE_LIBS $X_LIBS $JSCORE_LIBS \
+ -nodefaultlibs -lgcc -lc"
+
diff --git a/packages/gtk-webcore/midori_0.0.2.bb b/packages/gtk-webcore/midori_0.0.2.bb
new file mode 100644
index 0000000000..7f5fb6cd74
--- /dev/null
+++ b/packages/gtk-webcore/midori_0.0.2.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "osb-jscore osb-nrcit osb-nrcore libsexy"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz"
+
+
+
diff --git a/packages/gtk-webcore/midori_0.0.3.bb b/packages/gtk-webcore/midori_0.0.3.bb
new file mode 100644
index 0000000000..7f5fb6cd74
--- /dev/null
+++ b/packages/gtk-webcore/midori_0.0.3.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "osb-jscore osb-nrcit osb-nrcore libsexy"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz"
+
+
+
diff --git a/packages/gtk-webcore/osb-browser_svn.bb b/packages/gtk-webcore/osb-browser_svn.bb
new file mode 100644
index 0000000000..cbeebbcdc3
--- /dev/null
+++ b/packages/gtk-webcore/osb-browser_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Gtk+ WebCore - reference browser"
+HOMEPAGE = "http://gtk-webcore.sourceforge.net/"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "osb-nrcit gtk+ glib-2.0 libglade"
+RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-ico gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-png"
+PV = "0.5.0+svn${SRCDATE}"
+PR = "r0"
+
+inherit autotools
+
+SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=osb-browser;proto=https"
+
+S = "${WORKDIR}/osb-browser"
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/gtk-webcore/osb-jscore_svn.bb b/packages/gtk-webcore/osb-jscore_svn.bb
index a7f6201aa2..51597b0908 100644
--- a/packages/gtk-webcore/osb-jscore_svn.bb
+++ b/packages/gtk-webcore/osb-jscore_svn.bb
@@ -5,8 +5,8 @@ PRIORITY = "optional"
DEFAULT_PREFERENCE = "-1"
-PV = "0.5.0+svn${SRCDATE}"
-PR = "r0"
+PV = "0.5.2+svn${SRCDATE}"
+PR = "r1"
SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=JavaScriptCore;proto=https \
file://gcc4-fno-threadsafe-statics-JavaScriptCore.patch;patch=1"
@@ -28,12 +28,14 @@ do_configure () {
}
do_stage () {
- oe_libinstall -so -C kjs libjscore ${STAGING_LIBDIR}
+ oe_libinstall -so -C kjs libgtk_webcore_jscore ${STAGING_LIBDIR}
autotools_stage_includes
install -d ${STAGING_INCDIR}/osb/JavaScriptCore
for i in ${S}/kjs/*.h ${S}/kjs/new; do
install -m 0644 $i ${STAGING_INCDIR}/osb/JavaScriptCore
+ install -d ${STAGING_INCDIR}/../share/gtk-webcore-jscore
+ install -m 0755 ${S}/kjs/create_hash_table ${STAGING_INCDIR}/../share/gtk-webcore-jscore
done
}
diff --git a/packages/gtk-webcore/osb-nrcit_svn.bb b/packages/gtk-webcore/osb-nrcit_svn.bb
index c72714dc7f..78f3af7b6f 100644
--- a/packages/gtk-webcore/osb-nrcit_svn.bb
+++ b/packages/gtk-webcore/osb-nrcit_svn.bb
@@ -4,10 +4,10 @@ LICENSE = "nokia"
PRIORITY = "optional"
SECTION = "gpe"
-PV = "0.5.0+svn${SRCDATE}"
+PV = "0.5.2+svn${SRCDATE}"
PR = "r0"
-DEPENDS = "curl librsvg osb-nrcore"
+DEPENDS = "curl librsvg osb-nrcore pango"
SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=NRCit;proto=https \
file://gcc4-fno-threadsafe-statics-NRCit.patch;patch=1"
@@ -17,6 +17,8 @@ DEFAULT_PREFERENCE = "-1"
inherit autotools pkgconfig
+EXTRA_OECONF = " --enable-pango "
+
do_configure () {
autotools_do_configure
cd ${S}
@@ -27,7 +29,7 @@ do_configure () {
}
do_stage () {
- oe_libinstall -so -C src libnrcit ${STAGING_LIBDIR}
+ oe_libinstall -so -C src libgtk_webcore_nrcit ${STAGING_LIBDIR}
autotools_stage_includes
diff --git a/packages/gtk-webcore/osb-nrcore.inc b/packages/gtk-webcore/osb-nrcore.inc
index 3b71c9685d..7cbf0ce890 100644
--- a/packages/gtk-webcore/osb-nrcore.inc
+++ b/packages/gtk-webcore/osb-nrcore.inc
@@ -18,6 +18,14 @@ do_configure () {
mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
}
+do_install_append() {
+ #backward compat for some apps
+ ln -sf ${datadir}/gtk-webcore-nrcore ${D}${datadir}/osb-nrcore
+}
+
+FILES_${PN} += "${datadir}/gtk-webcore-nrcore"
+
+
do_stage () {
oe_libinstall -so libnrcore ${STAGING_LIBDIR}
oe_libinstall -so -C kwiq libnrcore_kwiq_gtk ${STAGING_LIBDIR}
@@ -30,3 +38,4 @@ do_stage () {
done
}
+
diff --git a/packages/gtk-webcore/osb-nrcore_svn.bb b/packages/gtk-webcore/osb-nrcore_svn.bb
index fefb4e8283..b9af57ad52 100644
--- a/packages/gtk-webcore/osb-nrcore_svn.bb
+++ b/packages/gtk-webcore/osb-nrcore_svn.bb
@@ -2,11 +2,23 @@ require osb-nrcore.inc
DEFAULT_PREFERENCE = "-1"
-PV = "0.5.0+svn${SRCDATE}"
-PR = "r0"
+PV = "0.5.2+svn${SRCDATE}"
+PR = "r1"
SRC_URI = "svn://gtk-webcore.svn.sourceforge.net/svnroot/gtk-webcore/trunk;module=NRCore;proto=https \
- file://gcc4-fno-threadsafe-statics-NRCore.patch;patch=1"
+ file://gcc4-fno-threadsafe-statics-NRCore.patch;patch=1 \
+ file://build_silence.patch;patch=0;maxdate=20070401"
S = "${WORKDIR}/NRCore"
+do_stage () {
+ oe_libinstall -so libgtk_webcore_nrcore ${STAGING_LIBDIR}
+ oe_libinstall -so -C kwiq libgtk_webcore_nrcore_kwiq_gtk ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+
+ install -d ${STAGING_INCDIR}/osb/NRCore
+ for i in ${S}/kwiq/WebCore*.h ${S}/kwiq/KWIQ*.h; do
+ install -m 0644 $i ${STAGING_INCDIR}/osb/NRCore
+ done
+}
diff --git a/packages/gtkhtml/gtkhtml-2.0_2.6.3.bb b/packages/gtkhtml/gtkhtml-2.0_2.6.3.bb
index 33b0423e25..f44e8b57a6 100644
--- a/packages/gtkhtml/gtkhtml-2.0_2.6.3.bb
+++ b/packages/gtkhtml/gtkhtml-2.0_2.6.3.bb
@@ -1,22 +1,15 @@
-LICENSE = "GPL"
-SECTION = "x11/libs"
-DESCRIPTION = "HTML rendering/editing library"
+require gtkhtml.inc
+
DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui gal-2.0"
PR = "r0"
-inherit gnome
-
SRC_URI = "http://ftp.debian.org/debian/pool/main/libg/libgtkhtml2/libgtkhtml2_2.6.3.orig.tar.gz"
-
FILES_${PN} += "${datadir}/gtkhtml-3.0 ${libdir}/gtkhtml/*.so"
FILES_${PN}-dev += "${libdir}/gtkhtml"
-S = "${WORKDIR}/libgtkhtml2-${PV}"
-
-EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
- mv src/libgtkhtml.pc src/libgtkhtml-2.0.pc || true
+ mv src/libgtkhtml.pc src/libgtkhtml-2.0.pc || true
autotools_stage_all
}
diff --git a/packages/gtkhtml/gtkhtml-3.0_3.0.10.bb b/packages/gtkhtml/gtkhtml-3.0_3.0.10.bb
index d27f72ae4a..66993cec74 100644
--- a/packages/gtkhtml/gtkhtml-3.0_3.0.10.bb
+++ b/packages/gtkhtml/gtkhtml-3.0_3.0.10.bb
@@ -1,18 +1,12 @@
-LICENSE = "GPL"
-SECTION = "x11/libs"
-DESCRIPTION = "HTML rendering/editing library"
+require gtkhtml.inc
+
DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui gal-2.0"
PR = "r2"
-inherit gnome
-
SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.0/gtkhtml-${PV}.tar.bz2 \
file://fix-missing-colormap.patch;patch=1"
FILES_${PN} += "${datadir}/gtkhtml-3.0 ${libdir}/gtkhtml/*.so"
FILES_${PN}-dev += "${libdir}/gtkhtml"
-S = "${WORKDIR}/gtkhtml-${PV}"
-
-EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
mv src/libgtkhtml.pc src/libgtkhtml-3.0.pc || true
diff --git a/packages/gtkhtml/gtkhtml-3.1_3.1.16.bb b/packages/gtkhtml/gtkhtml-3.1_3.1.16.bb
index 2b57a0b2c4..1e389dabe0 100644
--- a/packages/gtkhtml/gtkhtml-3.1_3.1.16.bb
+++ b/packages/gtkhtml/gtkhtml-3.1_3.1.16.bb
@@ -1,15 +1,9 @@
-LICENSE = "GPL"
-SECTION = "x11/libs"
-DESCRIPTION = "HTML rendering/editing library"
-DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui"
+require gtkhtml.inc
-inherit gnome
+DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui"
SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.1/gtkhtml-${PV}.tar.bz2"
FILES_${PN} += "${datadir}/gtkhtml-3.1"
-S = "${WORKDIR}/gtkhtml-${PV}"
-
-EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
mv src/libgtkhtml.pc src/libgtkhtml-3.1.pc || true
diff --git a/packages/opie-taskbar/opie-taskbar/mnci/.mtn2git_empty b/packages/gtkhtml/gtkhtml-3.6/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/mnci/.mtn2git_empty
+++ b/packages/gtkhtml/gtkhtml-3.6/.mtn2git_empty
diff --git a/packages/gtkhtml/gtkhtml-3.6/cross-includedir.patch b/packages/gtkhtml/gtkhtml-3.6/cross-includedir.patch
new file mode 100644
index 0000000000..f69b0f3421
--- /dev/null
+++ b/packages/gtkhtml/gtkhtml-3.6/cross-includedir.patch
@@ -0,0 +1,25 @@
+diff --git a/components/html-editor/Makefile.am b/components/html-editor/Makefile.am
+index 7fda5ae..925e409 100644
+--- a/components/html-editor/Makefile.am
++++ b/components/html-editor/Makefile.am
+@@ -5,7 +5,7 @@ gtkhtml_data = $(datadir)/gtkhtml-@GTKHTML_API_VERSION@
+ gladedir = $(gtkhtml_data)
+ glade_DATA = gtkhtml-editor-properties.glade
+
+-INCLUDES = -I$(top_srcdir)/src -I$(srcdir) -I$(includedir) $(GTKHTML_CFLAGS) $(SOUP_CFLAGS) \
++INCLUDES = -I$(top_srcdir)/src -I$(srcdir) $(GTKHTML_CFLAGS) $(SOUP_CFLAGS) \
+ -DG_LOG_DOMAIN=\"gtkhtml\" \
+ -DSRCDIR=\"$(srcdir)\" \
+ -DPREFIX=\"$(prefix)\"
+diff --git a/src/Makefile.am b/src/Makefile.am
+index f76178f..2d70183 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -3,7 +3,6 @@ NULL=
+ INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(srcdir) \
+- -I$(includedir) \
+ $(GTKHTML_CFLAGS) \
+ $(SOUP_CFLAGS) \
+ -DG_LOG_DOMAIN=\"gtkhtml\" \
diff --git a/packages/gtkhtml/gtkhtml-3.6_3.6.2.bb b/packages/gtkhtml/gtkhtml-3.6_3.6.2.bb
index 6194529aa0..cb2b8b2acc 100644
--- a/packages/gtkhtml/gtkhtml-3.6_3.6.2.bb
+++ b/packages/gtkhtml/gtkhtml-3.6_3.6.2.bb
@@ -1,15 +1,11 @@
-LICENSE = "GPL"
-SECTION = "x11/libs"
-DESCRIPTION = "HTML rendering/editing library"
-DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui"
+require gtkhtml.inc
-inherit gnome
+DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui"
-SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.6/gtkhtml-${PV}.tar.bz2"
+SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.6/gtkhtml-${PV}.tar.bz2 \
+ file://cross-includedir.patch;patch=1"
+PR = "r1"
FILES_${PN} += "${datadir}/gtkhtml-3.6"
-S = "${WORKDIR}/gtkhtml-${PV}"
-
-EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
mv src/libgtkhtml.pc src/libgtkhtml-3.6.pc || true
diff --git a/packages/gtkhtml/gtkhtml-3.8_3.8.2.bb b/packages/gtkhtml/gtkhtml-3.8_3.8.2.bb
new file mode 100644
index 0000000000..cc177de08f
--- /dev/null
+++ b/packages/gtkhtml/gtkhtml-3.8_3.8.2.bb
@@ -0,0 +1,12 @@
+require gtkhtml.inc
+
+DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui"
+
+SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.8/gtkhtml-${PV}.tar.bz2"
+FILES_${PN} += "${datadir}/gtkhtml-3.8"
+
+do_stage() {
+ mv src/libgtkhtml.pc src/libgtkhtml-3.8.pc || true
+ gnome_stage_includes
+ oe_libinstall -C src -so libgtkhtml-3.8 ${STAGING_LIBDIR}
+}
diff --git a/packages/gtkhtml/gtkhtml-lite-3.0_3.0.10.bb b/packages/gtkhtml/gtkhtml-lite-3.0_3.0.10.bb
index 14e6818e7b..44a96d6d64 100644
--- a/packages/gtkhtml/gtkhtml-lite-3.0_3.0.10.bb
+++ b/packages/gtkhtml/gtkhtml-lite-3.0_3.0.10.bb
@@ -1,17 +1,11 @@
-LICENSE = "GPL"
-SECTION = "x11/libs"
-DESCRIPTION = "HTML rendering/editing library"
+require gtkhtml.inc
+
DEPENDS = "gtk+ gail libgnomeprint orbit2-native"
PR = "r1"
-inherit gnome
-
SRC_URI = "http://stag.mind.be/gtkhtml-lite-3.0.10.tar.bz2"
FILES_${PN} += "${datadir}/gtkhtml-3.0 ${libdir}/gtkhtml/*.so"
FILES_${PN}-dev += "${libdir}/gtkhtml"
-S = "${WORKDIR}/gtkhtml-${PV}"
-
-EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
mv src/libgtkhtml.pc src/libgtkhtml-3.0.pc || true
diff --git a/packages/gtkhtml/gtkhtml.inc b/packages/gtkhtml/gtkhtml.inc
new file mode 100644
index 0000000000..091e17d15b
--- /dev/null
+++ b/packages/gtkhtml/gtkhtml.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "HTML rendering/editing library"
+SECTION = "x11/libs"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+inherit gnome
+
+S = "${WORKDIR}/gtkhtml-${PV}"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_configure_append() {
+ find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
+ find ${S} -name Makefile | xargs sed -i s:'-I${prefix}/include':'-I.':g
+}
diff --git a/packages/gtkhtml2/gtkhtml2_cvs.bb b/packages/gtkhtml2/gtkhtml2_svn.bb
index 1f19550c90..1f19550c90 100644
--- a/packages/gtkhtml2/gtkhtml2_cvs.bb
+++ b/packages/gtkhtml2/gtkhtml2_svn.bb
diff --git a/packages/gtkmm/gtkmm.inc b/packages/gtkmm/gtkmm.inc
index 843274fdc5..9dd1e43d54 100644
--- a/packages/gtkmm/gtkmm.inc
+++ b/packages/gtkmm/gtkmm.inc
@@ -3,11 +3,19 @@ HOMEPAGE = "http://www.gtkmm.org/"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "LGPL"
-DEPENDS = "glibmm"
+DEPENDS = "atk glibmm gtk+ cairomm"
-inherit autotools pkgconfig flow-lossage
+inherit gnome autotools pkgconfig flow-lossage
FILES_${PN} = "${libdir}/lib*.so.*"
FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
LIBV = "2.4.0"
+
+do_stage () {
+ autotools_stage_all
+
+ install -d ${STAGING_INCDIR}/gtkmm-2.4
+ install -m 0644 gdk/gdkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
+ install -m 0644 gtk/gtkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
+}
diff --git a/packages/gtkmm/gtkmm_2.10.10.bb b/packages/gtkmm/gtkmm_2.10.10.bb
new file mode 100644
index 0000000000..b8ba69f50e
--- /dev/null
+++ b/packages/gtkmm/gtkmm_2.10.10.bb
@@ -0,0 +1,4 @@
+require gtkmm.inc
+
+PR = "r0"
+
diff --git a/packages/gtkmm/gtkmm_2.4.8.bb b/packages/gtkmm/gtkmm_2.4.8.bb
deleted file mode 100644
index 1c5a2a2b10..0000000000
--- a/packages/gtkmm/gtkmm_2.4.8.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require gtkmm.inc
-
-SRC_URI = "${GNOME_MIRROR}/gtkmm/2.4/gtkmm-${PV}.tar.bz2"
-
-do_stage () {
- oe_libinstall -so -C atk/atkmm libatkmm-1.6 ${STAGING_LIBDIR}
- oe_libinstall -so -C pango/pangomm libpangomm-1.4 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk/gdkmm libgdkmm-2.4 ${STAGING_LIBDIR}
- oe_libinstall -so -C gtk/gtkmm libgtkmm-2.4 ${STAGING_LIBDIR}
-
- autotools_stage_includes
-
- install -m 0644 gdk/gdkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
- install -m 0644 gtk/gtkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
-}
diff --git a/packages/gtkmm/gtkmm_2.8.3.bb b/packages/gtkmm/gtkmm_2.8.3.bb
deleted file mode 100644
index dae68298c8..0000000000
--- a/packages/gtkmm/gtkmm_2.8.3.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require gtkmm.inc
-
-PR = "r1"
-
-SRC_URI = "${GNOME_MIRROR}/gtkmm/2.8/gtkmm-${PV}.tar.bz2"
-
-do_stage () {
- autotools_stage_all
-
- install -d ${STAGING_INCDIR}/gtkmm-2.4
- install -m 0644 gdk/gdkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
- install -m 0644 gtk/gtkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
-}
diff --git a/packages/opie-taskbar/opie-taskbar/simpad/.mtn2git_empty b/packages/gtkterm/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/simpad/.mtn2git_empty
+++ b/packages/gtkterm/.mtn2git_empty
diff --git a/packages/gtkterm/gtkterm2_0.2.3.bb b/packages/gtkterm/gtkterm2_0.2.3.bb
new file mode 100644
index 0000000000..c86c0c4a47
--- /dev/null
+++ b/packages/gtkterm/gtkterm2_0.2.3.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "A lightweight terminal emulator based on VTE and Gtk+"
+HOMEPAGE = "http://gtkterm.feige.net/"
+AUTHOR = "Oliver Feige"
+SECTION = "x11/terminals"
+DEPENDS = "gtk+ vte"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gtkterm/gtkterm2-${PV}.tar.gz"
+
+inherit autotools
+
diff --git a/packages/guile/guile-native_1.8.2.bb b/packages/guile/guile-native_1.8.2.bb
new file mode 100644
index 0000000000..99d77b0da0
--- /dev/null
+++ b/packages/guile/guile-native_1.8.2.bb
@@ -0,0 +1,133 @@
+SECTION = "unknown"
+LICENSE = "GPL"
+SRC_URI = "http://ftp.gnu.org/pub/gnu/guile/guile-${PV}.tar.gz \
+ "
+
+inherit autotools native
+
+S="${WORKDIR}/guile-${PV}"
+
+OE_LT_RPATH_ALLOW = "any"
+LDFLAGS += " -L${STAGING_LIBDIR} "
+
+do_configure() {
+ # no autoreconf, thanks
+ oe_runconf
+}
+
+LIBGUILE_HEADERS = "\
+__scm.h \
+alist.h \
+arbiters.h \
+async.h \
+backtrace.h \
+boolean.h \
+chars.h \
+continuations.h \
+debug-malloc.h \
+debug.h \
+deprecation.h \
+dynl.h \
+dynwind.h \
+environments.h \
+eq.h \
+error.h \
+eval.h \
+evalext.h \
+extensions.h \
+feature.h \
+filesys.h \
+fluids.h \
+fports.h \
+gc.h \
+gdb_interface.h \
+gdbint.h \
+goops.h \
+gsubr.h \
+guardians.h \
+hash.h \
+hashtab.h \
+hooks.h \
+init.h \
+ioext.h \
+iselect.h \
+keywords.h \
+lang.h \
+list.h \
+load.h \
+macros.h \
+mallocs.h \
+modules.h \
+net_db.h \
+numbers.h \
+objects.h \
+objprop.h \
+options.h \
+pairs.h \
+ports.h \
+posix.h \
+print.h \
+procprop.h \
+procs.h \
+properties.h \
+ramap.h \
+random.h \
+rdelim.h \
+read.h \
+regex-posix.h \
+root.h \
+rw.h \
+scmconfig.h \
+scmsigs.h \
+script.h \
+simpos.h \
+smob.h \
+snarf.h \
+socket.h \
+sort.h \
+srcprop.h \
+stackchk.h \
+stacks.h \
+stime.h \
+strings.h \
+strorder.h \
+strports.h \
+struct.h \
+symbols.h \
+tags.h \
+threads.h \
+throw.h \
+unif.h \
+validate.h \
+values.h \
+variable.h \
+vectors.h \
+version.h \
+vports.h \
+weaks.h \
+"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/libguile
+ for i in ${LIBGUILE_HEADERS}; do
+ install -m 0644 libguile/$i ${STAGING_INCDIR}/libguile/$i
+ done
+
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 ${S}/libguile/.libs/guile ${STAGING_BINDIR_NATIVE}/
+
+ install -m 0644 libguile.h ${STAGING_INCDIR}/libguile.h
+ install -d ${STAGING_INCDIR}/guile
+ install -m 0644 libguile/gh.h ${STAGING_INCDIR}/guile/
+ install -d ${STAGING_INCDIR}/guile/srfi
+ install -d ${STAGING_INCDIR}/guile-readline
+ install -m 0644 guile-readline/readline.h ${STAGING_INCDIR}/guile-readline/
+ install -d ${STAGING_DATADIR}/aclocal
+ install -m 0644 guile-config/guile.m4 ${STAGING_DATADIR}/aclocal
+
+ install -d ${STAGING_DATADIR}/guile/1.8
+ cp -pPr ${S}/ice-9 ${STAGING_DATADIR}/guile/1.8/
+
+ oe_libinstall -C guile-readline -so -a libguilereadline-v-17 ${STAGING_LIBDIR}
+ oe_libinstall -C libguile -so -a libguile ${STAGING_LIBDIR}
+}
diff --git a/packages/hal/files/20hal b/packages/hal/files/20hal
new file mode 100644
index 0000000000..ff6ffc2b4c
--- /dev/null
+++ b/packages/hal/files/20hal
@@ -0,0 +1,58 @@
+#! /bin/sh
+#
+# hal Start the Daemon that stores device informations
+# for the Hardware abstraction layer
+#
+# Written by Martin Waitz based on skeleton code
+# written by Miquel van Smoorenburg <miquels@cistron.nl>.
+# Modified for Debian
+# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
+#
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/hald
+PIDDIR=/var/run/hald
+PIDFILE=$PIDDIR/hald.pid
+NAME=hald
+DAEMONUSER=haldaemon
+DESC="Hardware abstraction layer"
+
+test -x $DAEMON || exit 0
+
+set -e
+
+do_start() {
+ if [ ! -d $PIDDIR ]; then
+ mkdir -p $PIDDIR
+ chown $DAEMONUSER:$DAEMONUSER $PIDDIR
+ fi
+ echo "Starting $DESC" "$NAME"
+ start-stop-daemon --start --pidfile $PIDFILE \
+ --exec $DAEMON -- $DAEMON_OPTS
+}
+
+do_stop() {
+ echo "Stopping $DESC" "$NAME"
+ start-stop-daemon --stop --oknodo --quiet --pidfile $PIDFILE \
+ --exec $DAEMON
+}
+
+case "$1" in
+ start)
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ restart|force-reload)
+ do_stop
+ sleep 5
+ do_start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/hal/files/99_hal b/packages/hal/files/99_hal
index f3d477231e..c82da990ba 100644
--- a/packages/hal/files/99_hal
+++ b/packages/hal/files/99_hal
@@ -1 +1,2 @@
d root root 0700 /var/run/hald none
+d haldaemon haldaemon 0755 /var/cache/hald none
diff --git a/packages/hal/hal-info_git.bb b/packages/hal/hal-info_git.bb
new file mode 100644
index 0000000000..597107fe2b
--- /dev/null
+++ b/packages/hal/hal-info_git.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Hardware Abstraction Layer device information"
+HOMEPAGE = "http://freedesktop.org/Software/hal"
+SECTION = "unknown"
+LICENSE = "GPL AFL"
+
+PV = "${SRCDATE}+git"
+PR = "r1"
+
+
+SRC_URI = "git://anongit.freedesktop.org/hal-info/;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-recall --disable-video"
+
+
+PACKAGE_ARCH = "all"
+FILES_${PN} += "/usr/share/hal/"
diff --git a/packages/hal/hal.inc b/packages/hal/hal.inc
new file mode 100644
index 0000000000..11a6531951
--- /dev/null
+++ b/packages/hal/hal.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Hardware Abstraction Layer"
+HOMEPAGE = "http://freedesktop.org/Software/hal"
+SECTION = "unknown"
+LICENSE = "GPL LGPL AFL"
+
+SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz"
+
+S = "${WORKDIR}/hal-${PV}"
+
+inherit autotools pkgconfig
diff --git a/packages/hal/hal_0.2.98.bb b/packages/hal/hal_0.2.98.bb
deleted file mode 100644
index 7c8b8b73eb..0000000000
--- a/packages/hal/hal_0.2.98.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SECTION = "unknown"
-DESCRIPTION = "Hardware Abstraction Layer"
-DEPENDS = "dbus expat"
-RDEPENDS += "hotplug"
-HOMEPAGE = "http://freedesktop.org/Software/hal"
-LICENSE = "GPL LGPL AFL"
-
-SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz"
-S = "${WORKDIR}/hal-${PV}"
-
-inherit autotools
-
-EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
- --with-expat=${STAGING_LIBDIR}/.. \
- --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
- --with-hotplug=${sysconfdir}/hotplug.d"
diff --git a/packages/hal/hal_0.5.2.bb b/packages/hal/hal_0.5.2.bb
deleted file mode 100644
index fd29980e56..0000000000
--- a/packages/hal/hal_0.5.2.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SECTION = "unknown"
-DESCRIPTION = "Hardware Abstraction Layer"
-DEPENDS = "dbus expat"
-RDEPENDS += "hotplug"
-RRECOMMENDS = "udev-utils"
-HOMEPAGE = "http://freedesktop.org/Software/hal"
-LICENSE = "GPL LGPL AFL"
-
-SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz"
-S = "${WORKDIR}/hal-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
- --with-expat=${STAGING_LIBDIR}/.. \
- --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
- --with-hotplug=${sysconfdir}/hotplug.d"
-
-do_stage() {
- autotools_stage_includes
- install -d ${STAGING_LIBDIR}
- install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
- install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
-}
diff --git a/packages/hal/hal_0.5.4.bb b/packages/hal/hal_0.5.4.bb
deleted file mode 100644
index 147439d4c3..0000000000
--- a/packages/hal/hal_0.5.4.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SECTION = "unknown"
-DESCRIPTION = "Hardware Abstraction Layer"
-DEPENDS = "dbus expat libusb"
-RDEPENDS += "hotplug"
-RDEPENDS_hal-device-manager = "python hal python-pygnome"
-RRECOMMENDS = "udev-utils"
-HOMEPAGE = "http://freedesktop.org/Software/hal"
-LICENSE = "GPL LGPL AFL"
-PR = "r1"
-
-SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz"
-S = "${WORKDIR}/hal-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
- --with-expat=${STAGING_LIBDIR}/.. \
- --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
- --with-hotplug=${sysconfdir}/hotplug.d \
- --disable-docbook-docs"
-
-do_stage() {
- autotools_stage_includes
- install -d ${STAGING_LIBDIR}
- install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
- install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
-}
-
-PACKAGES += "hal-device-manager"
-FILES_${PN} = "${sysconfdir} ${bindir}/lshal ${bindir}/hal-get-property ${bindir}/hal-set-property ${sbindir} ${libdir}/libhal.so* ${libdir}/libhal-storage.so* ${libexecdir} ${datadir}/hal/fdi"
-FILES_hal-device-manager = "${datadir}/hal/device-manager/ ${bindir}/hal-device-manager"
-
diff --git a/packages/hal/hal_0.5.7.bb b/packages/hal/hal_0.5.7.bb
deleted file mode 100644
index 5933676260..0000000000
--- a/packages/hal/hal_0.5.7.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-DESCRIPTION = "Hardware Abstraction Layer"
-HOMEPAGE = "http://freedesktop.org/Software/hal"
-SECTION = "unknown"
-LICENSE = "GPL LGPL AFL"
-DEPENDS = "dbus expat libusb"
-RDEPENDS += "hotplug"
-#RDEPENDS_hal-device-manager = "python hal python-pygnome"
-RRECOMMENDS = "udev-utils"
-
-SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz \
- file://dbus-fix-api.patch;patch=1"
-S = "${WORKDIR}/hal-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
- --with-expat=${STAGING_LIBDIR}/.. \
- --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
- --with-hotplug=${sysconfdir}/hotplug.d \
- --disable-docbook-docs"
-
-do_stage() {
- autotools_stage_includes
- install -d ${STAGING_LIBDIR}
- install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
- install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
-}
-
-#PACKAGES += "hal-device-manager"
-FILES_${PN} = "${sysconfdir} \
- ${bindir}/lshal \
- ${bindir}/hal-find-by-capability \
- ${bindir}/hal-find-by-property \
- ${bindir}/hal-device \
- ${bindir}/hal-get-property \
- ${bindir}/hal-set-property \
- ${sbindir} \
- ${libdir}/libhal.so* \
- ${libdir}/libhal-storage.so* \
- ${libexecdir} \
- ${datadir}/hal/fdi \
- ${datadir}/hal/scripts"
-#FILES_hal-device-manager = " \
-# ${datadir}/hal/device-manager/ \
-# ${bindir}/hal-device-manager"
-
diff --git a/packages/hal/hal_0.5.8.1.bb b/packages/hal/hal_0.5.8.1.bb
deleted file mode 100644
index f608c4018c..0000000000
--- a/packages/hal/hal_0.5.8.1.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-DESCRIPTION = "Hardware Abstraction Layer"
-HOMEPAGE = "http://freedesktop.org/Software/hal"
-SECTION = "unknown"
-LICENSE = "GPL LGPL AFL"
-
-DEPENDS = "dbus-glib udev intltool expat libusb"
-RDEPENDS += "udev"
-#RDEPENDS_hal-device-manager = "python hal python-pygnome"
-RRECOMMENDS = "udev-utils"
-
-PR = "r2"
-
-SRC_URI = "http://freedesktop.org/~david/dist/hal-${PV}.tar.gz \
- file://99_hal"
-
-S = "${WORKDIR}/hal-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
- --with-expat=${STAGING_LIBDIR}/.. \
- --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
- --with-hotplug=${sysconfdir}/hotplug.d \
- --disable-docbook-docs \
- --disable-policy-kit \
- "
-
-do_install_append() {
- install -d ${D}/etc/default/volatiles
- install -m 0644 ${WORKDIR}/99_hal ${D}/etc/default/volatiles
-}
-
-do_stage() {
- autotools_stage_all
- install -d ${STAGING_LIBDIR}
- install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
- install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
-}
-
-# At the time the postinst runs, dbus might not be setup so only restart if running
-pkg_postinst_hal () {
- # can't do this offline
- if [ "x$D" != "x" ]; then
- exit 1
- fi
-
- /etc/init.d/populate-volatile.sh update
-
- grep haldaemon /etc/group || addgroup haldaemon
- grep haldaemon /etc/passwd || adduser --disabled-password --system --home /var/run/hald --no-create-home haldaemon --ingroup haldaemon -g HAL
-
- DBUSPID=`pidof dbus-daemon`
-
- if [ "x$DBUSPID" != "x" ]; then
- /etc/init.d/dbus-1 force-reload
- fi
-}
-
-pkg_postrm_hal () {
- deluser haldaemon || true
- delgroup haldaemon || true
-}
-
-#PACKAGES += "hal-device-manager"
-
-#FILES_hal-device-manager = " \
-# ${datadir}/hal/device-manager/ \
-# ${bindir}/hal-device-manager"
-
-FILES_${PN} = "${sysconfdir} \
- ${bindir}/lshal \
- ${bindir}/hal-find-by-capability \
- ${bindir}/hal-find-by-property \
- ${bindir}/hal-device \
- ${bindir}/hal-get-property \
- ${bindir}/hal-set-property \
- ${sbindir} \
- ${libdir}/libhal.so* \
- ${libdir}/libhal-storage.so* \
- ${libdir}/hal \
- ${libexecdir} \
- ${datadir}/hal/fdi \
- ${datadir}/hal/scripts"
diff --git a/packages/hal/hal_0.5.9.bb b/packages/hal/hal_0.5.9.bb
new file mode 100644
index 0000000000..72d5dc4e2d
--- /dev/null
+++ b/packages/hal/hal_0.5.9.bb
@@ -0,0 +1,90 @@
+require hal.inc
+
+DEPENDS = "virtual/kernel dbus-glib udev intltool expat libusb"
+RDEPENDS += "udev hal-info"
+#RDEPENDS_hal-device-manager = "python hal python-pygnome"
+RRECOMMENDS = "udev-utils"
+
+PR = "r2"
+
+SRC_URI += "file://99_hal \
+ file://20hal \
+ "
+
+EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
+ --with-expat=${STAGING_LIBDIR}/.. \
+ --with-dbus-sys=${sysconfdir}/dbus-1/system.d \
+ --with-hotplug=${sysconfdir}/hotplug.d \
+ --disable-docbook-docs \
+ --disable-policy-kit \
+ --disable-acpi --disable-pmu --disable-pci \
+ --disable-pci-ids --disable-pnp-ids \
+ "
+
+# work around autoconf >2.59 deps...
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_install_append() {
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_hal ${D}/etc/default/volatiles
+ install -d ${D}/etc/dbus-1/event.d
+ install -m 0755 ${WORKDIR}/20hal ${D}/etc/dbus-1/event.d
+}
+
+do_stage() {
+ autotools_stage_all
+ install -d ${STAGING_LIBDIR}
+ install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
+ install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
+}
+
+# At the time the postinst runs, dbus might not be setup so only restart if running
+pkg_postinst_hal () {
+ # can't do this offline
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+
+ /etc/init.d/populate-volatile.sh update
+
+ grep haldaemon /etc/group || addgroup haldaemon
+ grep haldaemon /etc/passwd || adduser --disabled-password --system --home /var/run/hald --no-create-home haldaemon --ingroup haldaemon -g HAL
+
+ DBUSPID=`pidof dbus-daemon`
+
+ if [ "x$DBUSPID" != "x" ]; then
+ /etc/init.d/dbus-1 force-reload
+ fi
+}
+
+pkg_postrm_hal () {
+ deluser haldaemon || true
+ delgroup haldaemon || true
+}
+
+#PACKAGES += "hal-device-manager"
+
+#FILES_hal-device-manager = " \
+# ${datadir}/hal/device-manager/ \
+# ${bindir}/hal-device-manager"
+
+FILES_${PN} = "${sysconfdir} \
+ ${bindir}/lshal \
+ ${bindir}/hal-find-by-capability \
+ ${bindir}/hal-find-by-property \
+ ${bindir}/hal-device \
+ ${bindir}/hal-get-property \
+ ${bindir}/hal-set-property \
+ ${bindir}/hal-lock \
+ ${bindir}/hal-is-caller-locked-out \
+ ${sbindir} \
+ ${libdir}/libhal.so.* \
+ ${libdir}/libhal-storage.so.* \
+ ${libdir}/hal \
+ ${libexecdir} \
+ ${datadir}/hal/fdi \
+ ${datadir}/hal/scripts"
diff --git a/packages/opie-taskbar/opie-taskbar/spitz/.mtn2git_empty b/packages/haserl/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/spitz/.mtn2git_empty
+++ b/packages/haserl/.mtn2git_empty
diff --git a/packages/haserl/haserl_0.8.0.bb b/packages/haserl/haserl_0.8.0.bb
new file mode 100644
index 0000000000..ba10060c9c
--- /dev/null
+++ b/packages/haserl/haserl_0.8.0.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "A cgi wrapper for embedding shell scripts into html documents"
+SECTION = "console/network"
+DEPENDS = ""
+PR = "r0"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.gz"
+
+inherit autotools gettext
diff --git a/packages/opie-taskbar/opie-taskbar/tosa/.mtn2git_empty b/packages/havp/havp-0.82/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/tosa/.mtn2git_empty
+++ b/packages/havp/havp-0.82/.mtn2git_empty
diff --git a/packages/havp/files/sysconfdir-is-etc.patch b/packages/havp/havp-0.82/sysconfdir-is-etc.patch
index 518a56f440..518a56f440 100644
--- a/packages/havp/files/sysconfdir-is-etc.patch
+++ b/packages/havp/havp-0.82/sysconfdir-is-etc.patch
diff --git a/packages/oprofile/oprofile-0.9.1/.mtn2git_empty b/packages/havp/havp-0.86/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/oprofile/oprofile-0.9.1/.mtn2git_empty
+++ b/packages/havp/havp-0.86/.mtn2git_empty
diff --git a/packages/havp/havp-0.86/reconfigure.patch b/packages/havp/havp-0.86/reconfigure.patch
new file mode 100644
index 0000000000..6485efaa42
--- /dev/null
+++ b/packages/havp/havp-0.86/reconfigure.patch
@@ -0,0 +1,164 @@
+Fix templates for autoreconf. Also copy non autoheader generated settings
+from default.h.in to defs.h and include that from the autogenerated
+default.h - maybe there's some way to stop autoreconf wiping them all out
+but I have no idea what that is. This at least makes it all work as
+expected.
+
+Index: havp-0.86/configure.in
+===================================================================
+--- havp-0.86.orig/configure.in 2007-03-17 23:34:01.000000000 +1100
++++ havp-0.86/configure.in 2007-05-16 11:17:27.000000000 +1000
+@@ -9,6 +9,7 @@
+ AC_PREFIX_DEFAULT(/usr/local)
+
+ AC_CONFIG_HEADER(havp/default.h)
++AH_BOTTOM([#include "defs.h"])
+
+ AC_ARG_ENABLE(locking,[ --disable-locking Disable mandatory locking (not needed on Linux/Solaris system)], enable_locking=$enableval, enable_locking=yes)
+ AC_ARG_ENABLE(ssl-tunnel,[ --enable-ssl-tunnel Enable SSL proxying (not scanned, only forwarded!)], enable_ssl_tunnel=$enableval, enable_ssl_tunnel=no)
+@@ -53,7 +54,7 @@
+ then
+ AC_MSG_RESULT([disabled, no dynamic scanning!])
+
+- AC_DEFINE(NOMAND)
++ AC_DEFINE(NOMAND, 1, [Enable mandatory locking])
+ else
+ if test "$mandatory" = "yes"
+ then
+@@ -78,7 +79,7 @@
+
+ if test "$enable_ssl_tunnel" = "yes"
+ then
+- AC_DEFINE(SSLTUNNEL)
++ AC_DEFINE(SSLTUNNEL, 1, [Enable SSL tunnel])
+ fi
+
+ AC_MSG_CHECKING(for ClamAV scanner library)
+@@ -118,7 +119,7 @@
+ LDFLAGS="$LDFLAGS -lclamav"
+
+ SCANNEROBJECTS="clamlibscanner.o"
+- AC_DEFINE(USECLAMLIB)
++ AC_DEFINE(USECLAMLIB, 1, [Enable clamav library])
+
+ AC_MSG_RESULT([found $clamversion in $clamprefix])
+ else
+@@ -136,7 +137,7 @@
+ SCANNEROBJECTS="$SCANNEROBJECTS trophiescanner.o"
+ LDFLAGS="-L/etc/iscan -lvsapi $LDFLAGS"
+
+- AC_DEFINE(USETROPHIE)
++ AC_DEFINE(USETROPHIE, 1, [Use Trend Micro scanner])
+ else
+ AC_MSG_RESULT([/etc/iscan/libvsapi.so not found, disabled])
+ fi
+@@ -151,14 +152,14 @@
+ test "$localstatedir" = '${prefix}/var' && localstatedir=/var || localstatedir=$localstatedir
+ sysconfdir=`eval echo $sysconfdir | $PERL -pe 's#/havp/?$##'`
+ localstatedir=`eval echo $localstatedir`
+-AC_DEFINE_UNQUOTED(CONFIGFILE, "$sysconfdir/havp/havp.config")
+-AC_DEFINE_UNQUOTED(WHITELISTFILE, "$sysconfdir/havp/whitelist")
+-AC_DEFINE_UNQUOTED(BLACKLISTFILE, "$sysconfdir/havp/blacklist")
+-AC_DEFINE_UNQUOTED(TEMPLATEPATH, "$sysconfdir/havp/templates/en")
+-AC_DEFINE_UNQUOTED(ACCESSLOG, "$localstatedir/log/havp/access.log")
+-AC_DEFINE_UNQUOTED(ERRORLOG, "$localstatedir/log/havp/error.log")
+-AC_DEFINE_UNQUOTED(SCANTEMPFILE, "$localstatedir/tmp/havp/havp-XXXXXX")
+-AC_DEFINE_UNQUOTED(PIDFILE, "$localstatedir/run/havp/havp.pid")
++AC_DEFINE_UNQUOTED([CONFIGFILE], "$sysconfdir/havp/havp.config", [Config file])
++AC_DEFINE_UNQUOTED([WHITELISTFILE], "$sysconfdir/havp/whitelist", [Whitelist file])
++AC_DEFINE_UNQUOTED([BLACKLISTFILE], "$sysconfdir/havp/blacklist", [Blkaclist file])
++AC_DEFINE_UNQUOTED([TEMPLATEPATH], "$sysconfdir/havp/templates/en", [Template path])
++AC_DEFINE_UNQUOTED([ACCESSLOG], "$localstatedir/log/havp/access.log", [Access log file])
++AC_DEFINE_UNQUOTED([ERRORLOG], "$localstatedir/log/havp/error.log", [Error log file])
++AC_DEFINE_UNQUOTED([SCANTEMPFILE], "$localstatedir/tmp/havp/havp-XXXXXX", [Scanner temp file])
++AC_DEFINE_UNQUOTED([PIDFILE], "$localstatedir/run/havp/havp.pid", [PID file])
+
+ AC_SUBST(SCANNEROBJECTS)
+ AC_SUBST(CFLAGS)
+Index: havp-0.86/havp/defs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ havp-0.86/havp/defs.h 2007-05-16 11:19:59.000000000 +1000
+@@ -0,0 +1,82 @@
++#define VERSION "0.86"
++
++//##############################################################
++//Define if you want to rewrite a URL
++//#define REWRITE URLRewrite["havp"]="www.server-side.de"; URLRewrite["www.havp"]="www.server-side.de";
++
++//##############################################################
++//Parameters in Configurationfile
++
++#define CONFIGPARAMS \
++ "WHITELISTFIRST","TEMPDIR","RANGE","USER","GROUP", \
++ "SERVERNUMBER","PORT","BIND_ADDRESS","SOURCE_ADDRESS","KEEPBACKBUFFER", \
++ "KEEPBACKTIME","TRICKLING","MAXSCANSIZE","WHITELIST","BLACKLIST","PIDFILE", \
++ "DAEMON","TRANSPARENT","LOG_OKS","ACCESSLOG","ERRORLOG","LOGLEVEL", \
++ "USESYSLOG","SYSLOGNAME","SYSLOGFACILITY","SYSLOGLEVEL","IGNOREVIRUS", \
++ "DISPLAYINITIALMESSAGES","DBRELOAD","SCANTEMPFILE","TEMPLATEPATH", \
++ "PARENTPROXY","PARENTPORT","MAXSERVERS","FORWARDED_IP","X_FORWARDED_FOR","FAILSCANERROR", \
++ "MAXDOWNLOADSIZE","SCANNERTIMEOUT","STREAMUSERAGENT","STREAMSCANSIZE","SCANIMAGES", \
++ "ENABLECLAMLIB","CLAMDBDIR","CLAMBLOCKBROKEN","CLAMBLOCKMAX","CLAMBLOCKENCRYPTED", \
++ "CLAMMAXFILES","CLAMMAXFILESIZE","CLAMMAXRECURSION","CLAMMAXRATIO", \
++ "ENABLEAVG","AVGSERVER","AVGPORT", \
++ "ENABLEAVESERVER","AVESOCKET", \
++ "ENABLEFPROT","FPROTSERVER","FPROTPORT", \
++ "ENABLETROPHIE","TROPHIEMAXFILES","TROPHIEMAXFILESIZE","TROPHIEMAXRATIO", \
++ "ENABLENOD32","NOD32SOCKET","NOD32VERSION", \
++ "ENABLECLAMD","CLAMDSOCKET","CLAMDSERVER","CLAMDPORT", \
++ "ENABLESOPHIE","SOPHIESOCKET", \
++ "ENABLEAVAST","AVASTSOCKET","AVASTSERVER","AVASTPORT", \
++ "ENABLEARCAVIR","ARCAVIRSOCKET"
++//SCANNERS
++
++
++//##############################################################
++//Configuration not setable in havp.config
++
++//Time format
++#define TIMEFORMAT "%d/%m/%Y %H:%M:%S "
++
++//CONNTIMEOUT in seconds
++#define CONNTIMEOUT 60
++
++//RECVTIMEOUT in seconds
++#define RECVTIMEOUT 120
++
++//SENDTIMEOUT in seconds
++#define SENDTIMEOUT 120
++
++//Maximum client connection waiting for accept
++#define MAXCONNECTIONS 1024
++
++//Maximum bytes received in one request
++#define MAXRECV 14600
++
++//Maximum logfile line length
++#define STRINGLENGTH 1000
++
++//Maximum hardlock size - do not change
++#define MAXFILELOCKSIZE 1000000000
++
++//Valid Methods
++#define METHODS \
++ "GET","POST","HEAD","CONNECT","PUT","TRACE","PURGE","OPTIONS","UNLOCK", \
++ "SEARCH","PROPFIND","BPROPFIND","PROPPATCH","BPROPPATCH","MKCOL","COPY", \
++ "BCOPY","MOVE","LOCK","BMOVE","DELETE","BDELETE","SUBSCRIBE","UNSUBSCRIBE", \
++ "POLL","REPORT","ERROR","NONE"
++
++//Maximum length of SCANTEMPFILE
++#define MAXSCANTEMPFILELENGTH 200
++
++//Maximum length of http headers
++#define MAXHTTPHEADERLENGTH 20480
++
++// HTML Error String
++#define ERROR_DNS "dns.html"
++#define VIRUS_FOUND "virus.html"
++#define ERROR_SCANNER "scanner.html"
++#define ERROR_DOWN "down.html"
++#define ERROR_INVALID "invalid.html"
++#define ERROR_REQUEST "request.html"
++#define ERROR_BODY "error.html"
++#define ERROR_BLACKLIST "blacklist.html"
++#define ERROR_MAXSIZE "maxsize.html"
diff --git a/packages/havp/havp.inc b/packages/havp/havp.inc
new file mode 100644
index 0000000000..e0f4849ecf
--- /dev/null
+++ b/packages/havp/havp.inc
@@ -0,0 +1,87 @@
+DESCRIPTION = "HAVP (HTTP Antivirus Proxy) is a proxy with a ClamAV \
+anti-virus scanner. The main aims are continuous, non-blocking \
+downloads and smooth scanning of dynamic and password protected HTTP \
+traffic. Havp antivirus proxy has a parent and transparent proxy \
+mode. It can be used with squid or standalone."
+HOMEPAGE = "http://www.server-side.de"
+SECTION = "network"
+LICENSE = "GPLv2"
+DEPENDS = "clamav"
+RDEPENDS_${PN} += "${PN}-templates-css2 ${PN}-templates-en"
+
+SRC_URI = "http://www.server-side.de/download/havp-${PV}.tar.gz \
+ file://havp.init \
+ file://doc.configure.txt \
+ file://volatiles.05_havp"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "--with-scanner=libclamav"
+
+do_configure_append () {
+ # Change the paths for /usr/local/etc (patch was applied to change them)
+ # And enable clamav as the scanner that is to be used.
+ sed -e 's:ENABLECLAMLIB false:ENABLECLAMLIB true:' \
+ -e 's:/usr/local/etc:/etc:' \
+ etc/havp/havp.config > etc/havp/havp.config.oe
+}
+do_install () {
+ install -m 0755 -d ${D}${sbindir} ${D}${sysconfdir}/havp \
+ ${D}${sysconfdir}/init.d ${D}${docdir}/havp \
+ ${D}${sysconfdir}/default/volatiles
+ install -m 755 havp/havp ${D}${sbindir}
+ install -m 755 ${WORKDIR}/havp.init ${D}${sysconfdir}/init.d/havp
+ install -m 755 INSTALL ${D}${docdir}/havp
+ install -m 755 ${WORKDIR}/doc.configure.txt ${D}${docdir}/havp/configure.txt
+ install -m 644 etc/havp/havp.config.oe ${D}${sysconfdir}/havp/havp.config
+ install -m 644 etc/havp/havp.config.oe ${D}${docdir}/havp/havp.config.default
+
+ for i in whitelist blacklist; do
+ install -m 644 etc/havp/$i ${D}${sysconfdir}/havp/$i
+ done
+ cp -r etc/havp/templates ${D}${sysconfdir}/havp
+ chmod -R a+rX ${D}${sysconfdir}/havp/templates
+
+ # We need some /var directories
+ for i in 05_havp; do
+ install -m 0644 ${WORKDIR}/volatiles.$i ${D}${sysconfdir}/default/volatiles/$i
+ done
+}
+
+PACKAGES = "${PN}-dbg ${PN}-doc \
+ ${PN}-templates-br ${PN}-templates-css2 ${PN}-templates-de \
+ ${PN}-templates-en ${PN}-templates-es ${PN}-templates-fr \
+ ${PN}-templates-it ${PN}-templates-nl ${PN}-templates-pf \
+ ${PN}-templates-pl ${PN}-templates-ru ${PN}-templates-sv \
+ ${PN}"
+
+FILES_${PN} = "${sysconfdir}/havp/blacklist ${sysconfdir}/havp/whitelist \
+ ${sysconfdir}/havp/havp.config* \
+ ${sysconfdir}/init.d ${sysconfdir}/default ${sbindir}/*"
+FILES_${PN}-templates-br = "${sysconfdir}/havp/templates/br"
+FILES_${PN}-templates-css2 = "${sysconfdir}/havp/templates/css2"
+FILES_${PN}-templates-de = "${sysconfdir}/havp/templates/de"
+FILES_${PN}-templates-en = "${sysconfdir}/havp/templates/en"
+FILES_${PN}-templates-es = "${sysconfdir}/havp/templates/es"
+FILES_${PN}-templates-fr = "${sysconfdir}/havp/templates/fr"
+FILES_${PN}-templates-it = "${sysconfdir}/havp/templates/it"
+FILES_${PN}-templates-nl = "${sysconfdir}/havp/templates/nl"
+FILES_${PN}-templates-pf = "${sysconfdir}/havp/templates/pf"
+FILES_${PN}-templates-pl = "${sysconfdir}/havp/templates/pl"
+FILES_${PN}-templates-ru = "${sysconfdir}/havp/templates/ru"
+FILES_${PN}-templates-sv = "${sysconfdir}/havp/templates/sv"
+
+# Add havp's user and groups
+pkg_postinst_${PN} () {
+ grep -q havp: /etc/group || addgroup havp
+ grep -q havp: /etc/passwd || \
+ adduser --disabled-password --home=${localstatedir}/lib/havp/ --system \
+ --ingroup havp --no-create-home -g "HAVP" havp
+ /etc/init.d/populate-volatile.sh update
+}
+
+CONFFILES_${PN} = "${sysconfdir}/havp/havp.config \
+ ${sysconfdir}/havp/blacklist ${sysconfdir}/havp/whitelist"
+
+INITSCRIPT_NAME = "havp"
+INITSCRIPT_PARAMS = "defaults 55 45"
diff --git a/packages/havp/havp_0.82.bb b/packages/havp/havp_0.82.bb
index 9ec5fb5539..447c37b01b 100644
--- a/packages/havp/havp_0.82.bb
+++ b/packages/havp/havp_0.82.bb
@@ -1,89 +1,5 @@
-DESCRIPTION = "HAVP (HTTP Antivirus Proxy) is a proxy with a ClamAV \
-anti-virus scanner. The main aims are continuous, non-blocking \
-downloads and smooth scanning of dynamic and password protected HTTP \
-traffic. Havp antivirus proxy has a parent and transparent proxy \
-mode. It can be used with squid or standalone."
-HOMEPAGE = "http://www.server-side.de"
-SECTION = "network"
-LICENSE = "GPLv2"
-DEPENDS = "clamav"
-RDEPENDS_${PN} += "${PN}-templates-css2 ${PN}-templates-en"
-PR = "r3"
-
-SRC_URI = "http://www.server-side.de/download/havp-${PV}.tar.gz \
- file://sysconfdir-is-etc.patch;patch=1 \
- file://havp.init \
- file://doc.configure.txt \
- file://volatiles.05_havp"
-
-inherit autotools update-rc.d
-
-EXTRA_OECONF = "--with-scanner=libclamav"
-
-do_configure_append () {
- # Change the paths for /usr/local/etc (patch was applied to change them)
- # And enable clamav as the scanner that is to be used.
- sed -e 's:ENABLECLAMLIB false:ENABLECLAMLIB true:' \
- -e 's:/usr/local/etc:/etc:' \
- etc/havp/havp.config > etc/havp/havp.config.oe
-}
-do_install () {
- install -m 0755 -d ${D}${sbindir} ${D}${sysconfdir}/havp \
- ${D}${sysconfdir}/init.d ${D}${docdir}/havp \
- ${D}${sysconfdir}/default/volatiles
- install -m 755 havp/havp ${D}${sbindir}
- install -m 755 ${WORKDIR}/havp.init ${D}${sysconfdir}/init.d/havp
- install -m 755 INSTALL ${D}${docdir}/havp
- install -m 755 ${WORKDIR}/doc.configure.txt ${D}${docdir}/havp/configure.txt
- install -m 644 etc/havp/havp.config.oe ${D}${sysconfdir}/havp/havp.config
- install -m 644 etc/havp/havp.config.oe ${D}${docdir}/havp/havp.config.default
-
- for i in whitelist blacklist; do
- install -m 644 etc/havp/$i ${D}${sysconfdir}/havp/$i
- done
- cp -r etc/havp/templates ${D}${sysconfdir}/havp
- chmod -R a+rX ${D}${sysconfdir}/havp/templates
+require havp.inc
- # We need some /var directories
- for i in 05_havp; do
- install -m 0644 ${WORKDIR}/volatiles.$i ${D}${sysconfdir}/default/volatiles/$i
- done
-}
-
-PACKAGES = "${PN}-dbg ${PN}-doc \
- ${PN}-templates-br ${PN}-templates-css2 ${PN}-templates-de \
- ${PN}-templates-en ${PN}-templates-es ${PN}-templates-fr \
- ${PN}-templates-it ${PN}-templates-nl ${PN}-templates-pf \
- ${PN}-templates-pl ${PN}-templates-ru ${PN}-templates-sv \
- ${PN}"
-
-FILES_${PN} = "${sysconfdir}/havp/blacklist ${sysconfdir}/havp/whitelist \
- ${sysconfdir}/havp/havp.config* \
- ${sysconfdir}/init.d ${sysconfdir}/default ${sbindir}/*"
-FILES_${PN}-templates-br = "${sysconfdir}/havp/templates/br"
-FILES_${PN}-templates-css2 = "${sysconfdir}/havp/templates/css2"
-FILES_${PN}-templates-de = "${sysconfdir}/havp/templates/de"
-FILES_${PN}-templates-en = "${sysconfdir}/havp/templates/en"
-FILES_${PN}-templates-es = "${sysconfdir}/havp/templates/es"
-FILES_${PN}-templates-fr = "${sysconfdir}/havp/templates/fr"
-FILES_${PN}-templates-it = "${sysconfdir}/havp/templates/it"
-FILES_${PN}-templates-nl = "${sysconfdir}/havp/templates/nl"
-FILES_${PN}-templates-pf = "${sysconfdir}/havp/templates/pf"
-FILES_${PN}-templates-pl = "${sysconfdir}/havp/templates/pl"
-FILES_${PN}-templates-ru = "${sysconfdir}/havp/templates/ru"
-FILES_${PN}-templates-sv = "${sysconfdir}/havp/templates/sv"
-
-# Add havp's user and groups
-pkg_postinst_${PN} () {
- grep -q havp: /etc/group || addgroup havp
- grep -q havp: /etc/passwd || \
- adduser --disabled-password --home=${localstatedir}/lib/havp/ --system \
- --ingroup havp --no-create-home -g "HAVP" havp
- /etc/init.d/populate-volatile.sh update
-}
-
-CONFFILES_${PN} = "${sysconfdir}/havp/havp.config \
- ${sysconfdir}/havp/blacklist ${sysconfdir}/havp/whitelist"
+PR = "r3"
-INITSCRIPT_NAME = "havp"
-INITSCRIPT_PARAMS = "defaults 55 45"
+SRC_URI_append += " file://sysconfdir-is-etc.patch;patch=1"
diff --git a/packages/havp/havp_0.86.bb b/packages/havp/havp_0.86.bb
new file mode 100644
index 0000000000..c5bb0636bb
--- /dev/null
+++ b/packages/havp/havp_0.86.bb
@@ -0,0 +1,5 @@
+require havp.inc
+
+PR = "r0"
+
+SRC_URI_append += " file://reconfigure.patch;patch=1"
diff --git a/packages/hdparm/hdparm-6.9/uclibc.patch b/packages/hdparm/hdparm-6.9/uclibc.patch
index 0758aa07b8..b1d8e4aa47 100644
--- a/packages/hdparm/hdparm-6.9/uclibc.patch
+++ b/packages/hdparm/hdparm-6.9/uclibc.patch
@@ -1,7 +1,7 @@
Index: hdparm-6.9/hdparm.c
===================================================================
---- hdparm-6.9.orig/hdparm.c 2007-03-05 14:02:03.000000000 +0100
-+++ hdparm-6.9/hdparm.c 2007-03-05 14:02:23.000000000 +0100
+--- hdparm-6.9.orig/hdparm.c 2007-05-20 20:12:58.000000000 +0200
++++ hdparm-6.9/hdparm.c 2007-05-20 20:13:31.000000000 +0200
@@ -16,7 +16,9 @@
#include <sys/times.h>
#include <sys/types.h>
@@ -12,10 +12,37 @@ Index: hdparm-6.9/hdparm.c
#include <linux/hdreg.h>
#include <linux/major.h>
#include <byteswap.h>
+@@ -1311,7 +1313,7 @@
+ perror(" HDIO_GET_IDENTITY failed");
+ }
+ if (get_IDentity) {
+- __u16 *id;
++ uint16_t *id;
+ unsigned char args[4+512] = {WIN_IDENTIFY,0,0,1,}; // FIXME?
+ unsigned i;
+ if (ioctl(fd, HDIO_DRIVE_CMD, &args)) {
+@@ -1321,7 +1323,7 @@
+ goto identify_abort;
+ }
+ }
+- id = (__u16 *)&args[4];
++ id = (uint16_t *)&args[4];
+ if (get_IDentity == 2) {
+ for (i = 0; i < (256/8); ++i) {
+ printf("%04x %04x %04x %04x %04x %04x %04x %04x\n", id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]);
+@@ -1609,7 +1611,7 @@
+ && ishex(d[++digit] = getchar())
+ && ishex(d[++digit] = getchar())) {
+ sbuf[wc] = (fromhex(d[0]) << 12) | (fromhex(d[1]) << 8) | (fromhex(d[2]) << 4) | fromhex(d[3]);
+- le16_to_cpus((__u16 *)(&sbuf[wc]));
++ le16_to_cpus((uint16_t *)(&sbuf[wc]));
+ ++wc;
+ } else if (d[digit] == EOF) {
+ goto eof;
Index: hdparm-6.9/hdparm.h
===================================================================
--- hdparm-6.9.orig/hdparm.h 2006-04-28 16:33:01.000000000 +0200
-+++ hdparm-6.9/hdparm.h 2007-03-05 14:03:10.000000000 +0100
++++ hdparm-6.9/hdparm.h 2007-05-20 20:12:58.000000000 +0200
@@ -1,6 +1,6 @@
/* Some prototypes for extern functions. */
diff --git a/packages/ossie/.mtn2git_empty b/packages/helloworld/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/ossie/.mtn2git_empty
+++ b/packages/helloworld/.mtn2git_empty
diff --git a/packages/helloworld/helloworld_1.0.0.bb b/packages/helloworld/helloworld_1.0.0.bb
new file mode 100644
index 0000000000..da4daa408d
--- /dev/null
+++ b/packages/helloworld/helloworld_1.0.0.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Minimal statically compiled Hello world!"
+LICENSE = "GPL"
+PR = "r0"
+
+S = "${WORKDIR}/${P}"
+
+do_fetch () {
+ mkdir -p ${WORKDIR}/${P}
+ cd ${WORKDIR}/${P}
+ echo -e "#include <stdio.h>\nint main(void)\n{\n\tprintf(\"Hello world!\\\n\");\twhile(1);\n\treturn 0;\n}\n" >helloworld.c
+}
+
+do_compile () {
+ ${CC} -o helloworld helloworld.c -static
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 helloworld ${D}${bindir}/
+ # /bin/init is on purpose, it is tried after /sbin/init and /etc/init
+ # so if a sysvinit is installed, it will be used instead of helloworld
+ install -d ${D}${base_bindir}
+ ln -sf ${bindir}/helloworld ${D}${base_bindir}/init
+}
diff --git a/packages/poboxserver/files/.mtn2git_empty b/packages/hfsplusutils/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/poboxserver/files/.mtn2git_empty
+++ b/packages/hfsplusutils/.mtn2git_empty
diff --git a/packages/pptp-linux/pptp-linux/.mtn2git_empty b/packages/hfsplusutils/hfsplusutils-1.0.4-4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/pptp-linux/pptp-linux/.mtn2git_empty
+++ b/packages/hfsplusutils/hfsplusutils-1.0.4-4/.mtn2git_empty
diff --git a/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-errno.patch b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-errno.patch
new file mode 100644
index 0000000000..c9caeb4208
--- /dev/null
+++ b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-errno.patch
@@ -0,0 +1,19 @@
+diff -ruN hfsplus.orig/src/hpmkdir.c hfsplus-1.0.4/src/hpmkdir.c
+--- hfsplus.orig/src/hpmkdir.c 2003-03-30 20:09:59.000000000 +0200
++++ hfsplus-1.0.4/src/hpmkdir.c 2003-03-30 20:11:15.000000000 +0200
+@@ -46,8 +46,9 @@
+ # include <string.h>
+ # include <time.h>
+ # include <ctype.h>
+-# include <errno.h>
+ */
++# include <errno.h>
++
+ # include <stdio.h>
+ # include <stdlib.h>
+
+@@ -164,3 +165,4 @@
+ hfsputil_perrorp(argv0);
+ return -1;
+ }
++
diff --git a/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-gcc4.patch b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-gcc4.patch
new file mode 100644
index 0000000000..04724440dd
--- /dev/null
+++ b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-gcc4.patch
@@ -0,0 +1,132 @@
+--- hfsplus-1.0.4/libhfsp/src/btree.c~ 2002-03-05 19:50:28.000000000 +0000
++++ hfsplus-1.0.4/libhfsp/src/btree.c 2005-04-30 12:48:48.000000000 +0100
+@@ -393,7 +393,7 @@ static int btree_init(btree* bt, volume*
+ {
+ p = volume_readfromfork(vol, nodebuf, fork, 0, bt->blkpernode,
+ HFSP_EXTENT_DATA, bt->cnid);
+- ((char*) p) += HEADER_RESERVEDOFFSET; // skip header
++ p += HEADER_RESERVEDOFFSET; // skip header
+ }
+
+ bt->alloc_bits = malloc(alloc_size);
+--- hfsplus-1.0.4/libhfsp/src/swab.h~ 2002-03-05 19:50:29.000000000 +0000
++++ hfsplus-1.0.4/libhfsp/src/swab.h 2005-04-30 12:48:05.000000000 +0100
+@@ -36,28 +36,28 @@
+
+ #define bswabU16(val) bswap_16(val)
+
+-#define bswabU16_inc(ptr) bswap_16(*((UInt16*) (ptr))++)
+-#define bswabU32_inc(ptr) bswap_32(*((UInt32*) (ptr))++)
+-#define bswabU64_inc(ptr) bswap_64(*((UInt64*) (ptr))++)
+-
+-#define bstoreU16_inc(ptr, val) (*((UInt16*) (ptr))++) = bswap_16(val)
+-#define bstoreU32_inc(ptr, val) (*((UInt32*) (ptr))++) = bswap_32(val)
+-#define bstoreU64_inc(ptr, val) (*((UInt64*) (ptr))++) = bswap_64(val)
++#define bswabU16_inc(ptr) bswap_16(*(*((UInt16**) (void *)(&ptr)))++)
++#define bswabU32_inc(ptr) bswap_32(*(*((UInt32**) (void *)(&ptr)))++)
++#define bswabU64_inc(ptr) bswap_64(*(*((UInt64**) (void *)(&ptr)))++)
++
++#define bstoreU16_inc(ptr, val) (*(*((UInt16**) (void *)(&ptr)))++) = bswap_16(val)
++#define bstoreU32_inc(ptr, val) (*(*((UInt32**) (void *)(&ptr)))++) = bswap_32(val)
++#define bstoreU64_inc(ptr, val) (*(*((UInt64**) (void *)(&ptr)))++) = bswap_64(val)
+
+ #else // BYTE_ORDER == BIG_ENDIAN
+
+ #define bswabU16(val) val
+
+-#define bswabU16_inc(ptr) (*((UInt16*) (ptr))++)
+-#define bswabU32_inc(ptr) (*((UInt32*) (ptr))++)
+-#define bswabU64_inc(ptr) (*((UInt64*) (ptr))++)
+-
+-#define bstoreU16_inc(ptr, val) (*((UInt16*) (ptr))++) = val
+-#define bstoreU32_inc(ptr, val) (*((UInt32*) (ptr))++) = val
+-#define bstoreU64_inc(ptr, val) (*((UInt64*) (ptr))++) = val
++#define bswabU16_inc(ptr) (*(*((UInt16**) (void *)(&ptr)))++)
++#define bswabU32_inc(ptr) (*(*((UInt32**) (void *)(&ptr)))++)
++#define bswabU64_inc(ptr) (*(*((UInt64**) (void *)(&ptr)))++)
++
++#define bstoreU16_inc(ptr, val) (*(*((UInt16**) (void *)(&ptr)))++) = val
++#define bstoreU32_inc(ptr, val) (*(*((UInt32**) (void *)(&ptr)))++) = val
++#define bstoreU64_inc(ptr, val) (*(*((UInt64**) (void *)(&ptr)))++) = val
+
+ #endif
+
+ /* for the sake of compleetness and readability */
+-#define bswabU8_inc(ptr) (*((UInt8*) (ptr))++)
+-#define bstoreU8_inc(ptr,val) (*((UInt8*) (ptr))++) = val
++#define bswabU8_inc(ptr) (*(*((UInt8**) (void *)(&ptr)))++)
++#define bstoreU8_inc(ptr,val) (*(*((UInt8**) (void *)(&ptr)))++) = val
+--- hfsplus-1.0.4/libhfsp/src/btreecheck.c~ 2002-03-05 19:50:29.000000000 +0000
++++ hfsplus-1.0.4/libhfsp/src/btreecheck.c 2005-04-30 12:49:22.000000000 +0100
+@@ -264,7 +264,7 @@ static int fscheck_btree_init(btree* bt,
+ {
+ p = volume_readfromfork(vol, nodebuf, fork, 0, bt->blkpernode,
+ HFSP_EXTENT_DATA, bt->cnid);
+- ((char*) p) += HEADER_RESERVEDOFFSET; // skip header
++ p += HEADER_RESERVEDOFFSET; // skip header
+ }
+
+ bt->alloc_bits = malloc(alloc_size);
+--- hfsplus-1.0.4/libhfsp/src/fscheck.c~ 2002-03-25 15:48:37.000000000 +0000
++++ hfsplus-1.0.4/libhfsp/src/fscheck.c 2005-04-30 12:50:26.000000000 +0100
+@@ -230,7 +230,7 @@ static int fscheck_volume_readbuf(volume
+ vh->write_count = bswabU32_inc(p);
+ vh->encodings_bmp = bswabU64_inc(p);
+ memcpy(vh->finder_info, p, 32);
+- ((char*) p) += 32; // So finderinfo must be swapped later, ***
++ p += 32; // So finderinfo must be swapped later, ***
+ p = volume_readfork(p, &vh->alloc_file );
+ p = volume_readfork(p, &vh->ext_file );
+ p = volume_readfork(p, &vh->cat_file );
+@@ -277,12 +277,12 @@ static int fscheck_read_wrapper(volume *
+ printf("Volume is wrapped in HFS volume "
+ " (use hfsck to check this)\n");
+
+- ((char*) p) += 0x12; /* skip unneded HFS vol fields */
++ p += 0x12; /* skip unneded HFS vol fields */
+ drAlBlkSiz = bswabU32_inc(p); /* offset 0x14 */
+- ((char*) p) += 0x4; /* skip unneded HFS vol fields */
++ p += 0x4; /* skip unneded HFS vol fields */
+ drAlBlSt = bswabU16_inc(p); /* offset 0x1C */
+
+- ((char*) p) += 0x5E; /* skip unneded HFS vol fields */
++ p += 0x5E; /* skip unneded HFS vol fields */
+ signature = bswabU16_inc(p); /* offset 0x7C, drEmbedSigWord */
+ if (signature != HFSP_VOLHEAD_SIG)
+ HFSP_ERROR(-1, "This looks like a normal HFS volume");
+--- hfsplus-1.0.4/libhfsp/src/volume.c~ 2002-03-26 18:00:29.000000000 +0000
++++ hfsplus-1.0.4/libhfsp/src/volume.c 2005-04-30 12:51:41.000000000 +0100
+@@ -345,7 +345,7 @@ static int volume_readbuf(hfsp_vh* vh, v
+ vh->write_count = bswabU32_inc(p);
+ vh->encodings_bmp = bswabU64_inc(p);
+ memcpy(vh->finder_info, p, 32);
+- ((char*) p) += 32; // finderinfo is not used by now
++ p += 32; // finderinfo is not used by now
+ p = volume_readfork(p, &vh->alloc_file );
+ p = volume_readfork(p, &vh->ext_file );
+ p = volume_readfork(p, &vh->cat_file );
+@@ -381,7 +381,7 @@ static int volume_writebuf(hfsp_vh* vh,
+ bstoreU32_inc(p, vh->write_count );
+ bstoreU64_inc(p, vh->encodings_bmp );
+ memcpy(p, vh->finder_info, 32);
+- ((char*) p) += 32; // finderinfo is not used by now
++ p += 32; // finderinfo is not used by now
+ p = volume_writefork(p, &vh->alloc_file );
+ p = volume_writefork(p, &vh->ext_file );
+ p = volume_writefork(p, &vh->cat_file );
+@@ -417,12 +417,12 @@ static int volume_read_wrapper(volume *
+
+ UInt16 embeds, embedl; /* Start/lenght of embedded area in blocks */
+
+- ((char*) p) += 0x12; /* skip unneeded HFS vol fields */
++ p += 0x12; /* skip unneeded HFS vol fields */
+ drAlBlkSiz = bswabU32_inc(p); /* offset 0x14 */
+- ((char*) p) += 0x4; /* skip unneeded HFS vol fields */
++ p += 0x4; /* skip unneeded HFS vol fields */
+ drAlBlSt = bswabU16_inc(p); /* offset 0x1C */
+
+- ((char*) p) += 0x5E; /* skip unneeded HFS vol fields */
++ p += 0x5E; /* skip unneeded HFS vol fields */
+ signature = bswabU16_inc(p); /* offset 0x7C, drEmbedSigWord */
+ if (signature != HFSP_VOLHEAD_SIG)
+ HFSP_ERROR(-1, "This looks like a normal HFS volume");
diff --git a/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-glob.patch b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-glob.patch
new file mode 100644
index 0000000000..5b0333e642
--- /dev/null
+++ b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-glob.patch
@@ -0,0 +1,12 @@
+--- hfsplus-1.0.4/src/glob.c.orig 2002-10-09 08:02:31.000000000 -0500
++++ hfsplus-1.0.4/src/glob.c 2002-10-09 08:02:46.000000000 -0500
+@@ -48,7 +48,7 @@
+
+ switch (*pat)
+ {
+- case NULL: // pattern at end
++ case '\0': // pattern at end
+ return (!*str); // String at end ?
+
+ case '*': // match all
+
diff --git a/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-string.patch b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-string.patch
new file mode 100644
index 0000000000..5eaf32806a
--- /dev/null
+++ b/packages/hfsplusutils/hfsplusutils-1.0.4-4/hfsplusutils-1.0.4-string.patch
@@ -0,0 +1,11 @@
+--- hfsplus-1.0.4/libhfsp/src/unicode.c.bak 2007-01-08 17:14:44.000000000 -0500
++++ hfsplus-1.0.4/libhfsp/src/unicode.c 2007-01-08 17:14:52.000000000 -0500
+@@ -16,7 +16,7 @@
+ #include <stdlib.h>
+ #include <endian.h>
+ #include <byteswap.h>
+-#include <linux/string.h>
++#include <string.h>
+
+ #define __USE_GNU
+ /* need wcsrtomb */
diff --git a/packages/hfsplusutils/hfsplusutils_1.0.4-4.bb b/packages/hfsplusutils/hfsplusutils_1.0.4-4.bb
new file mode 100644
index 0000000000..43037573f4
--- /dev/null
+++ b/packages/hfsplusutils/hfsplusutils_1.0.4-4.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "HFS plus file system utilities"
+SECTION = "base"
+LICENSE = "GPL"
+PR = "r1"
+
+S="${WORKDIR}/${P}"
+
+inherit kernel-arch autotools pkgconfig
+
+DEPENDS = " rpm2cpio-native"
+
+SRC_URI = "http://penguinppc.org/historical/hfsplus/hfsplusutils-1.0.4-4.src.rpm \
+ file://hfsplusutils-1.0.4-errno.patch;patch=1 \
+ file://hfsplusutils-1.0.4-gcc4.patch;patch=1 \
+ file://hfsplusutils-1.0.4-glob.patch;patch=1 \
+ file://hfsplusutils-1.0.4-string.patch;patch=1 \
+ "
+
+do_unpack() {
+ if ! test -f hfsplus.tz2 ; then
+ rpm2cpio.pl ${DL_DIR}/${P}.src.rpm | cpio -i --make-directories
+ bunzip2 hfsplus.tz2
+ tar -xf hfsplus.tz2.out
+ mv hfsplus ${P}
+ fi
+}
diff --git a/packages/prism3-support/.mtn2git_empty b/packages/hfsutils/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/prism3-support/.mtn2git_empty
+++ b/packages/hfsutils/.mtn2git_empty
diff --git a/packages/prism3-support/files/.mtn2git_empty b/packages/hfsutils/hfsutils-3.2.6/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/prism3-support/files/.mtn2git_empty
+++ b/packages/hfsutils/hfsutils-3.2.6/.mtn2git_empty
diff --git a/packages/hfsutils/hfsutils-3.2.6/hfsutils-3.2.6-errno.patch b/packages/hfsutils/hfsutils-3.2.6/hfsutils-3.2.6-errno.patch
new file mode 100644
index 0000000000..6e25f794b2
--- /dev/null
+++ b/packages/hfsutils/hfsutils-3.2.6/hfsutils-3.2.6-errno.patch
@@ -0,0 +1,13 @@
+diff -ruN hfsutils.orig/tclhfs.c hfsutils-3.2.6/tclhfs.c
+--- hfsutils.orig/tclhfs.c 2003-03-31 17:34:55.000000000 +0200
++++ hfsutils-3.2.6/tclhfs.c 2003-03-31 17:39:51.000000000 +0200
+@@ -43,8 +43,7 @@
+ # include "charset.h"
+ # include "suid.h"
+ # include "version.h"
+-
+-extern int errno;
++# include <errno.h>
+
+ # define ERROR(code, str) (hfs_error = (str), errno = (code))
+
diff --git a/packages/hfsutils/hfsutils-3.2.6/largerthan2gb.patch b/packages/hfsutils/hfsutils-3.2.6/largerthan2gb.patch
new file mode 100644
index 0000000000..423256b67d
--- /dev/null
+++ b/packages/hfsutils/hfsutils-3.2.6/largerthan2gb.patch
@@ -0,0 +1,15 @@
+diff -ruN hfsutils.orig/libhfs/os/unix.c hfsutils-3.2.6/libhfs/os/unix.c
+--- hfsutils.orig/libhfs/os/unix.c 1998-11-02 23:09:13.000000000 +0000
++++ hfsutils-3.2.6/libhfs/os/unix.c 2007-02-27 15:44:21.023442553 +0000
+@@ -19,6 +19,11 @@
+ * $Id: largerthan2gb.patch,v 1.1 2005/02/05 21:20:43 hansmi Exp $
+ */
+
++#ifdef __linux__
++#define _FILE_OFFSET_BITS 64
++#define _LARGE_FILES
++#endif
++
+ # ifdef HAVE_CONFIG_H
+ # include "config.h"
+ # endif
diff --git a/packages/hfsutils/hfsutils_3.2.6.bb b/packages/hfsutils/hfsutils_3.2.6.bb
new file mode 100644
index 0000000000..5292ac386c
--- /dev/null
+++ b/packages/hfsutils/hfsutils_3.2.6.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "HFS file system utilities"
+SECTION = "base"
+LICENSE = "GPL"
+PR = "r2"
+
+inherit autotools pkgconfig
+
+SRC_URI = "ftp://ftp.mars.org/pub/hfs/hfsutils-3.2.6.tar.gz \
+ file://hfsutils-3.2.6-errno.patch;patch=1 \
+ file://largerthan2gb.patch;patch=1 \
+ "
+
+do_configure () {
+ oe_runconf --disable-x
+}
+
+do_compile () {
+ oe_runmake
+ cd hfsck; oe_runmake
+}
+
+do_install () {
+ install -d ${D}/${bindir}
+ install -m 755 hfsutil ${D}/${bindir}/hfsutil
+ install -m 755 hfsck/hfsck ${D}/${bindir}/hfsck
+
+ for util in hattrib hcd hcopy hdel hdir hformat \
+ his hmkdir hmount hpwd hrename hrmdir \
+ humount hvol; do
+ ln -sf hfsutil ${D}/${bindir}/${util}
+ done
+}
diff --git a/packages/hicolor-icon-theme/hicolor-icon-theme_0.9.bb b/packages/hicolor-icon-theme/hicolor-icon-theme_0.9.bb
index 2f7e21892a..f50f8f8a32 100644
--- a/packages/hicolor-icon-theme/hicolor-icon-theme_0.9.bb
+++ b/packages/hicolor-icon-theme/hicolor-icon-theme_0.9.bb
@@ -2,6 +2,10 @@ SECTION = "unknown"
LICENSE = "GPL"
inherit gnome
+PR = "r1"
+
SRC_URI = "http://icon-theme.freedesktop.org/releases/${P}.tar.gz"
+PACKAGE_ARCH = "all"
+
FILES_${PN} += "${datadir}/icons"
diff --git a/packages/hostap/hostap-daemon.inc b/packages/hostap/hostap-daemon.inc
index 08a6dba1f7..f723d07575 100644
--- a/packages/hostap/hostap-daemon.inc
+++ b/packages/hostap/hostap-daemon.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://hostap.epitest.fi"
SECTION = "kernel/userland"
PRIORITY = "optional"
LICENSE = "GPL"
-RDEPENDS = "hostap-modules hostap-utils (${PV})"
+RDEPENDS = "hostap-utils (${PV})"
DEPENDS = "openssl"
DEPENDS_append_mtx-1 = " madwifi-modules"
DEPENDS_append_mtx-2 = " madwifi-modules"
diff --git a/packages/hostap/hostap-daemon/init b/packages/hostap/hostap-daemon/init
index b0736c0baa..ed4c9de1a9 100644
--- a/packages/hostap/hostap-daemon/init
+++ b/packages/hostap/hostap-daemon/init
@@ -1,6 +1,6 @@
#!/bin/sh
DAEMON=/usr/sbin/hostapd
-NAME=httpd
+NAME=hostapd
DESC="HOSTAP Daemon"
ARGS="/etc/hostapd.conf"
diff --git a/packages/hostap/hostap-daemon_0.3.7.bb b/packages/hostap/hostap-daemon_0.3.7.bb
index a211dd0759..bece7d1450 100644
--- a/packages/hostap/hostap-daemon_0.3.7.bb
+++ b/packages/hostap/hostap-daemon_0.3.7.bb
@@ -1,3 +1,3 @@
require hostap-daemon.inc
-PR = "r1"
+PR = "r2"
diff --git a/packages/hostap/hostap-daemon_0.4.4.bb b/packages/hostap/hostap-daemon_0.4.4.bb
index a211dd0759..bece7d1450 100644
--- a/packages/hostap/hostap-daemon_0.4.4.bb
+++ b/packages/hostap/hostap-daemon_0.4.4.bb
@@ -1,3 +1,3 @@
require hostap-daemon.inc
-PR = "r1"
+PR = "r2"
diff --git a/packages/hostap/hostap-daemon_0.4.8.bb b/packages/hostap/hostap-daemon_0.4.8.bb
index 4ef749c407..de3abdbea5 100644
--- a/packages/hostap/hostap-daemon_0.4.8.bb
+++ b/packages/hostap/hostap-daemon_0.4.8.bb
@@ -1,3 +1,5 @@
require hostap-daemon.inc
+PR = "r1"
+
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/hostap/hostap-daemon_0.5.1.bb b/packages/hostap/hostap-daemon_0.5.1.bb
index 4ef749c407..de3abdbea5 100644
--- a/packages/hostap/hostap-daemon_0.5.1.bb
+++ b/packages/hostap/hostap-daemon_0.5.1.bb
@@ -1,3 +1,5 @@
require hostap-daemon.inc
+PR = "r1"
+
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/qmake/qmake2-native-2.00a/.mtn2git_empty b/packages/hwdata/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qmake/qmake2-native-2.00a/.mtn2git_empty
+++ b/packages/hwdata/.mtn2git_empty
diff --git a/packages/hwdata/hwdata_0.191.bb b/packages/hwdata/hwdata_0.191.bb
new file mode 100644
index 0000000000..2dfe1433bf
--- /dev/null
+++ b/packages/hwdata/hwdata_0.191.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "This package contains various hardware identification and configuration data, such as the pci.ids database, or the XFree86/xorg Cards database. It's needed for the kudzu hardware detection."
+LICENSE = "GPL + X11"
+
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191.orig.tar.gz \
+ http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191-1.diff.gz;patch=1 \
+ "
+
+PACKAGE_ARCH = "all"
+
+
+do_install() {
+ mkdir -p ${D}${datadir}/hwdata
+ install -m644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata
+}
diff --git a/packages/qpobox/files/.mtn2git_empty b/packages/iana-etc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qpobox/files/.mtn2git_empty
+++ b/packages/iana-etc/.mtn2git_empty
diff --git a/packages/iana-etc/iana-etc_2.20.bb b/packages/iana-etc/iana-etc_2.20.bb
new file mode 100644
index 0000000000..ccf0b8da8a
--- /dev/null
+++ b/packages/iana-etc/iana-etc_2.20.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "The iana-etc package provides the Unix/Linux /etc/services and /etc/protocols files."
+AUTHOR = "Seth W. Klein"
+HOMEPAGE = "http://www.sethwklein.net/projects/iana-etc/"
+SECTION = "base"
+LICENSE = "OPL"
+
+SRC_URI = "http://www.sethwklein.net/projects/iana-etc/downloads/${P}.tar.bz2"
+
+do_make(){
+ oe_runmake 'STRIP=yes'
+}
+
+do_install(){
+ oe_runmake 'DESTDIR=${D}' install
+}
diff --git a/packages/qte/qte-2.3.10/openmn/.mtn2git_empty b/packages/icewm/icewm-1.2.30/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qte/qte-2.3.10/openmn/.mtn2git_empty
+++ b/packages/icewm/icewm-1.2.30/.mtn2git_empty
diff --git a/packages/icewm/icewm-1.2.26/configure.patch b/packages/icewm/icewm-1.2.30/configure.patch
index ade427d5e0..ade427d5e0 100644
--- a/packages/icewm/icewm-1.2.26/configure.patch
+++ b/packages/icewm/icewm-1.2.30/configure.patch
diff --git a/packages/icewm/icewm-1.2.26/makefile.patch b/packages/icewm/icewm-1.2.30/makefile.patch
index 9473c9b2a9..9473c9b2a9 100644
--- a/packages/icewm/icewm-1.2.26/makefile.patch
+++ b/packages/icewm/icewm-1.2.30/makefile.patch
diff --git a/packages/icewm/icewm_1.2.26.bb b/packages/icewm/icewm_1.2.26.bb
deleted file mode 100644
index 47d4fc8189..0000000000
--- a/packages/icewm/icewm_1.2.26.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SECTION = "x11/wm"
-DESCRIPTION = "IceWM Window Manager"
-LICENSE = "GPL"
-DEPENDS = "virtual/libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft mkfontdir-native"
-PR = "r0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/icewm/icewm-${PV}.tar.gz \
- file://makefile.patch;patch=1 \
- file://configure.patch;patch=1"
-
-S = "${WORKDIR}/icewm-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--disable-i18n --without-imlib --with-xpm --with-gnome-menus \
- --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} \
- --with-mkfontdir=${STAGING_DIR}/${BUILD_SYS}/bin/mkfontdir"
-
-pkg_postinst() {
-update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/icewm-session 10
-}
-
-pkg_postrm() {
-update-alternatives --remove x-window-manager /usr/bin/icewm-session
-}
diff --git a/packages/icewm/icewm_1.2.30.bb b/packages/icewm/icewm_1.2.30.bb
new file mode 100644
index 0000000000..5266b0adb9
--- /dev/null
+++ b/packages/icewm/icewm_1.2.30.bb
@@ -0,0 +1,23 @@
+SECTION = "x11/wm"
+DESCRIPTION = "IceWM Window Manager"
+LICENSE = "GPL"
+DEPENDS = "virtual/libx11 libxext libxcomposite libxfixes libxdamage libxrender libxinerama libxpm xrandr xft mkfontdir-native"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/icewm/icewm-${PV}.tar.gz \
+ file://makefile.patch;patch=1 \
+ file://configure.patch;patch=1"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-i18n --without-imlib --with-xpm --with-gnome-menus \
+ --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} \
+ --with-mkfontdir=${STAGING_DIR}/${BUILD_SYS}/bin/mkfontdir"
+
+pkg_postinst() {
+update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/icewm-session 10
+}
+
+pkg_postrm() {
+update-alternatives --remove x-window-manager /usr/bin/icewm-session
+}
diff --git a/packages/s3c2410-utils/files/.mtn2git_empty b/packages/icu/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/s3c2410-utils/files/.mtn2git_empty
+++ b/packages/icu/.mtn2git_empty
diff --git a/packages/icu/icu-3.6.inc b/packages/icu/icu-3.6.inc
new file mode 100644
index 0000000000..92176ee7fb
--- /dev/null
+++ b/packages/icu/icu-3.6.inc
@@ -0,0 +1,15 @@
+
+LICENSE = "ICU"
+
+SRC_URI = "ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-src.tgz"
+
+S = "${WORKDIR}/icu/source"
+
+inherit autotools pkgconfig
+
+do_configure() {
+ libtoolize --force
+ oe_runconf
+}
+
+
diff --git a/packages/icu/icu-native_3.6.bb b/packages/icu/icu-native_3.6.bb
new file mode 100644
index 0000000000..887bfcac2f
--- /dev/null
+++ b/packages/icu/icu-native_3.6.bb
@@ -0,0 +1,3 @@
+require icu-3.6.inc
+
+inherit native
diff --git a/packages/icu/icu_3.6.bb b/packages/icu/icu_3.6.bb
new file mode 100644
index 0000000000..39162d2179
--- /dev/null
+++ b/packages/icu/icu_3.6.bb
@@ -0,0 +1,31 @@
+require icu-3.6.inc
+
+DEPENDS += "icu-native"
+
+PR = "r1"
+
+do_configure_append() {
+ for i in */Makefile */*.inc */*/Makefile */*/*.inc ; do
+ sed -i -e 's:$(INVOKE) $(BINDIR)/:$(INVOKE) :g' $i
+ sed -i -e 's:$(BINDIR)/::g' $i
+ done
+ sed -i -e 's:$(BINDIR)/::g' extra/uconv/pkgdata.inc || true
+ sed -i -e 's:$(BINDIR)/::g' extra/uconv/pkgdata.inc.in || true
+}
+
+
+PACKAGES =+ "libicudata libicuuc libicui18n libicule libiculx libicutu libicuio"
+
+FILES_libicudata = "${libdir}/libicudata.so.*"
+FILES_libicuuc = "${libdir}/libicuuc.so.*"
+FILES_libicui18n = "${libdir}/libicui18n.so.*"
+FILES_libicule = "${libdir}/libicule.so.*"
+FILES_libiculx = "${libdir}/libiculx.so.*"
+FILES_libicutu = "${libdir}/libicutu.so.*"
+FILES_libicuio = "${libdir}/libicuio.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/swfdec/swfdec/arm/.mtn2git_empty b/packages/ifplugd/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/swfdec/swfdec/arm/.mtn2git_empty
+++ b/packages/ifplugd/files/.mtn2git_empty
diff --git a/packages/ifplugd/files/kernel-types.patch b/packages/ifplugd/files/kernel-types.patch
new file mode 100644
index 0000000000..ad630ab5d4
--- /dev/null
+++ b/packages/ifplugd/files/kernel-types.patch
@@ -0,0 +1,10 @@
+--- ifplugd-0.25/src/interface.c-orig 2007-04-18 14:57:33.106790279 +0200
++++ ifplugd-0.25/src/interface.c 2007-04-18 14:57:42.591211214 +0200
+@@ -18,6 +18,7 @@
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
++#define __KERNEL_STRICT_NAMES
+ #include <linux/sockios.h>
+ #include <linux/if_ether.h>
+ #include <sys/types.h>
diff --git a/packages/ifplugd/ifplugd_0.25.bb b/packages/ifplugd/ifplugd_0.25.bb
index 192520822a..55c2be0ced 100644
--- a/packages/ifplugd/ifplugd_0.25.bb
+++ b/packages/ifplugd/ifplugd_0.25.bb
@@ -6,6 +6,8 @@ LICENSE = "GPL"
SRC_URI = "http://0pointer.de/lennart/projects/ifplugd/ifplugd-${PV}.tar.gz"
+SRC_URI_append_nylon = " file://kernel-types.patch;patch=1"
+
inherit autotools update-rc.d pkgconfig
EXTRA_OECONF = "--disable-lynx"
diff --git a/packages/swfdec/swfdec/powerpc/.mtn2git_empty b/packages/iksemel/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/swfdec/swfdec/powerpc/.mtn2git_empty
+++ b/packages/iksemel/.mtn2git_empty
diff --git a/packages/iksemel/iksemel_1.2.bb b/packages/iksemel/iksemel_1.2.bb
new file mode 100644
index 0000000000..903d8f046d
--- /dev/null
+++ b/packages/iksemel/iksemel_1.2.bb
@@ -0,0 +1,14 @@
+LICENSE = "LGPL"
+DESCRIPTION = "A simple, powerful XML-parsing library written in C."
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "glibc gnutls"
+PR = "r0"
+
+inherit pkgconfig autotools
+
+SRC_URI = "http://files.jabberstudio.org/iksemel/${P}.tar.gz"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/images/angstrom-minimal-image.bb b/packages/images/angstrom-minimal-image.bb
new file mode 100644
index 0000000000..83d814a79a
--- /dev/null
+++ b/packages/images/angstrom-minimal-image.bb
@@ -0,0 +1,20 @@
+#Angstrom minimalist image
+#gives you a small images with ssh access
+LICENSE = "MIT"
+PR = "r3"
+
+ANGSTROM_EXTRA_INSTALL ?= ""
+DISTRO_SSH_DAEMON ?= "dropbear"
+IMAGE_LINGUAS = " "
+
+RDEPENDS = "task-boot \
+ ${DISTRO_SSH_DAEMON} \
+ angstrom-version \
+ "
+
+export IMAGE_BASENAME = "minimalist-image"
+export IMAGE_LINGUAS = ""
+export PACKAGE_INSTALL = "${RDEPENDS}"
+
+inherit image
+
diff --git a/packages/images/bootstrap-image.bb b/packages/images/bootstrap-image.bb
index 1ff60e60e1..f25ad222aa 100644
--- a/packages/images/bootstrap-image.bb
+++ b/packages/images/bootstrap-image.bb
@@ -6,7 +6,4 @@ DEPENDS = "${MACHINE_TASK_PROVIDER}"
inherit image
-FEED_URIS_append_familiar = " x11##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/x11 \
- opie##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/opie"
-
LICENSE = "MIT"
diff --git a/packages/images/devimage-image.bb b/packages/images/devimage-image.bb
new file mode 100644
index 0000000000..e8177433be
--- /dev/null
+++ b/packages/images/devimage-image.bb
@@ -0,0 +1,20 @@
+# Image for kernel debugging and development testing
+# It includes all useful "kernel userspace" utilities, but
+# only shell and dropbear are loaded by default.
+# Allows to login via serial and real console or SSH
+LICENSE = "MIT"
+PR = "r2.2"
+
+DEVIMAGE_EXTRA_RDEPENDS ?= ""
+RDEPENDS = "devimage busybox dropbear udev \
+ module-init-tools pcmciautils \
+ wireless-tools wpa-supplicant \
+ irda-utils acx-firmware \
+ ${DEVIMAGE_EXTRA_RDEPENDS}"
+
+export IMAGE_BASENAME = "devimage"
+export IMAGE_LINGUAS = ""
+
+PACKAGE_INSTALL = "${RDEPENDS}"
+
+inherit image
diff --git a/packages/images/e-image.bb b/packages/images/e-image.bb
index 2f0bef98ef..acd45cd5ae 100644
--- a/packages/images/e-image.bb
+++ b/packages/images/e-image.bb
@@ -1,15 +1,15 @@
require e-image-core.bb
DESCRIPTION = "An X11-based distribution with the Enlightenment Window Manager and Tools"
-PR = "r5"
+PR = "r6"
export IMAGE_BASENAME = "e-image"
export PACKAGE_INSTALL += "task-e-x11-core \
- gpe-task-pim \
- gpe-task-settings \
- gpe-task-apps \
- gpe-task-connectivity \
- gpe-task-games \
- gpe-task-apps-extra \
+ ask-gpe-pim \
+ task-gpe-settings \
+ task-gpe-apps \
+ task-gpe-connectivity \
+ task-gpe-games \
+ task-apps-extra \
figment \
xhost \
gpe-soundserver \
@@ -23,13 +23,8 @@ export PACKAGE_INSTALL += "task-e-x11-core \
gdk-pixbuf-loader-pnm \
gdk-pixbuf-loader-xbm \
gdk-pixbuf-loader-xpm"
-# gdk-pixbuf-loader-pcx \
-# gdk-pixbuf-loader-ico \
-# gdk-pixbuf-loader-ani \
-# gdk-pixbuf-loader-ras \
-# gdk-pixbuf-loader-tga \
-# gdk-pixbuf-loader-wbmp \
-DEPENDS += "task-e-x11-core task-gpe figment xhost gpe-soundserver gpe-confd xauth"
+DEPENDS += "task-e-x11-core task-gpe-base task-gpe-pim task-gpe-settings task-gpe-apps task-gpe-connectivity task-gpe-games \
+ figment xhost gpe-soundserver gpe-confd xauth"
RDEPENDS = "${PACKAGE_INSTALL}"
diff --git a/packages/images/essential-image.bb b/packages/images/essential-image.bb
index 9544b82ead..21078790b7 100644
--- a/packages/images/essential-image.bb
+++ b/packages/images/essential-image.bb
@@ -1,6 +1,6 @@
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+# License: MIT (see COPYING.MIT)
#
# Filename: essential-image.bb
# Date: 23-Apr-06
diff --git a/packages/images/essential-machine-image.bb b/packages/images/essential-machine-image.bb
index 70ce1e119a..f82f1833dc 100644
--- a/packages/images/essential-machine-image.bb
+++ b/packages/images/essential-machine-image.bb
@@ -1,6 +1,6 @@
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+# License: MIT (see COPYING.MIT)
#
# Filename: essential-machine-image.bb
# Date: 24-Apr-06
diff --git a/packages/images/gpe-image.bb b/packages/images/gpe-image.bb
index b448c0a9b1..aa851cf68f 100644
--- a/packages/images/gpe-image.bb
+++ b/packages/images/gpe-image.bb
@@ -1,21 +1,20 @@
-FEED_URIS_append_familiar = " x11##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/x11"
-PR = "r20"
+PR = "r22"
export IMAGE_BASENAME = "gpe-image"
GPE_EXTRA_THEMES = "gpe-theme-industrial"
GPE_EXTRA_INSTALL_none = ""
-GPE_EXTRA_INSTALL_bigscreen = "gpe-task-games ${GPE_EXTRA_THEMES}"
-GPE_EXTRA_INSTALL_smallscreen = "gpe-task-games ${GPE_EXTRA_THEMES}"
+GPE_EXTRA_INSTALL_bigscreen = "task-gpe-games ${GPE_EXTRA_THEMES}"
+GPE_EXTRA_INSTALL_smallscreen = "task-gpe-games ${GPE_EXTRA_THEMES}"
GUI_MACHINE_CLASS ?= "none"
GPE_EXTRA_INSTALL += "${GPE_EXTRA_INSTALL_${GUI_MACHINE_CLASS}}"
#ship more stuff with devices with >16MB of flash
GPE_BIGFLASH_INSTALL := '${@base_conditional("ROOT_FLASH_SIZE", "16", "", "\
- gpe-task-connectivity \
+ task-gpe-connectivity \
gpe-theme-clearlooks \
figment \
",d)}'
@@ -24,15 +23,22 @@ GPE_EXTRA_INSTALL += "${GPE_BIGFLASH_INSTALL}"
XSERVER ?= "xserver-kdrive-fbdev"
-DEPENDS = "${MACHINE_TASK_PROVIDER} task-gpe"
+DEPENDS = "${MACHINE_TASK_PROVIDER} \
+ task-gpe-base \
+ task-gpe-apps \
+ task-gpe-pim \
+ task-gpe-settings \
+ task-gpe-games \
+ virtual/xserver"
+
RDEPENDS = "${PACKAGE_INSTALL}"
export PACKAGE_INSTALL = "\
${MACHINE_TASK_PROVIDER} \
- gpe-task-base \
- gpe-task-pim \
- gpe-task-settings \
- gpe-task-apps \
+ task-gpe-base \
+ task-gpe-pim \
+ task-gpe-settings \
+ task-gpe-apps \
${XSERVER} \
${GPE_EXTRA_INSTALL}"
diff --git a/packages/images/gpephone-image.bb b/packages/images/gpephone-image.bb
index e9735f19c4..21496cae55 100644
--- a/packages/images/gpephone-image.bb
+++ b/packages/images/gpephone-image.bb
@@ -1,4 +1,4 @@
-PR = "r0"
+PR = "r1"
export IMAGE_BASENAME = "gpephone-image"
@@ -20,7 +20,7 @@ GPE_EXTRA_INSTALL += "${GPE_BIGFLASH_INSTALL}"
XSERVER ?= "xserver-kdrive-fbdev"
-DEPENDS = "${MACHINE_TASK_PROVIDER} task-gpephone"
+DEPENDS = "${MACHINE_TASK_PROVIDER} task-gpephone virtual/xserver"
RDEPENDS = "${PACKAGE_INSTALL}"
export PACKAGE_INSTALL = "\
diff --git a/packages/images/helloworld-image.bb b/packages/images/helloworld-image.bb
new file mode 100644
index 0000000000..058bb7f12a
--- /dev/null
+++ b/packages/images/helloworld-image.bb
@@ -0,0 +1,28 @@
+# Hello world image
+# Contains *only* a statically linked hello world init program
+LICENSE = "MIT"
+PR = "r0"
+
+RDEPENDS = "helloworld"
+
+export IMAGE_BASENAME = "helloworld-image"
+export IMAGE_LINGUAS = ""
+
+PACKAGE_INSTALL = ${RDEPENDS}
+
+inherit image
+
+# Hello world image
+# Contains *only* a statically linked hello world init program
+LICENSE = "MIT"
+PR = "r0"
+
+RDEPENDS = "helloworld"
+
+export IMAGE_BASENAME = "helloworld-image"
+export IMAGE_LINGUAS = ""
+
+PACKAGE_INSTALL = ${RDEPENDS}
+
+inherit image
+
diff --git a/packages/images/initramfs-image.bb b/packages/images/initramfs-image.bb
new file mode 100644
index 0000000000..95e3f84082
--- /dev/null
+++ b/packages/images/initramfs-image.bb
@@ -0,0 +1,17 @@
+# Sample initramfs image
+LICENSE = "MIT"
+PR = "r2"
+
+RDEPENDS = "initramfs-module-block initramfs-module-loop initramfs-module-nfs"
+
+export IMAGE_BASENAME = "initramfs-image"
+export IMAGE_LINGUAS = ""
+
+PACKAGE_INSTALL = "${RDEPENDS}"
+
+# Remove any kernel-image that the kernel-module-* packages may have pulled in.
+PACKAGE_REMOVE = "kernel-image-* update-modules"
+ROOTFS_POSTPROCESS_COMMAND += "ipkg-cl ${IPKG_ARGS} -force-depends \
+ remove ${PACKAGE_REMOVE};"
+
+inherit image
diff --git a/packages/images/initramfs-minimal-image.bb b/packages/images/initramfs-minimal-image.bb
new file mode 100644
index 0000000000..1b60405e74
--- /dev/null
+++ b/packages/images/initramfs-minimal-image.bb
@@ -0,0 +1,15 @@
+# Sample initramfs image
+LICENSE = "MIT"
+PR = "r0"
+
+#RDEPENDS = "initramfs-boot busybox kernel-module-uinput uclibc libgcc1"
+RDEPENDS = "initramfs-nfsboot busybox-static kernel-module-uinput"
+
+export IMAGE_BASENAME = "initramfs-image"
+export IMAGE_LINGUAS = ""
+
+PACKAGE_INSTALL = "${RDEPENDS}"
+# Install only ${PACKAGE_INSTALL}, not even deps
+PACKAGE_INSTALL_NO_DEPS = "1"
+
+inherit image
diff --git a/packages/images/maemo-image.bb b/packages/images/maemo-image.bb
index 2153e427c1..f8f5cb5c9d 100644
--- a/packages/images/maemo-image.bb
+++ b/packages/images/maemo-image.bb
@@ -2,8 +2,6 @@
# Meta package for maemo based system image
#
-FEED_URIS_append_familiar = " maemo##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/maemo"
-
PR = "r2"
export IMAGE_BASENAME = "maemo-image"
diff --git a/packages/images/nylon-image-base.bb b/packages/images/nylon-image-base.bb
index 120cff5822..8cd71194b4 100644
--- a/packages/images/nylon-image-base.bb
+++ b/packages/images/nylon-image-base.bb
@@ -3,13 +3,13 @@ inherit nylon-image
LICENSE = "MIT"
export IMAGE_BASENAME = "nylon-base"
-
+
NYLON_BASE = "base-files base-passwd bash busybox \
ipkg initscripts less \
mtd-utils \
nano ncurses netbase \
openssh sysvinit \
- timezones tinylogin"
+ timezones tinylogin udev"
DEPENDS += "virtual/kernel less nano"
RDEPENDS = "kernel less nano elvis-tiny \
@@ -20,6 +20,7 @@ RDEPENDS_append_mtx-1 = " modutils modutils-initscripts modutils-depmod modutils
RDEPENDS_append_mtx-2 = " modutils modutils-initscripts modutils-depmod modutils-modinfo"
## kernel 2.6 ##
RDEPENDS_append_mtx-3 = " module-init-tools udev"
+RDEPENDS_append_mtx-3a = " module-init-tools"
export PACKAGE_INSTALL = "${RDEPENDS}"
diff --git a/packages/images/nylon-image-mini.bb b/packages/images/nylon-image-mini.bb
index e6acd1f2dc..c0ed998449 100644
--- a/packages/images/nylon-image-mini.bb
+++ b/packages/images/nylon-image-mini.bb
@@ -1,5 +1,8 @@
export IMAGE_BASENAME = "nylon-mini"
+inherit image
+LICENSE = "MIT"
+
NYLON_BASE = "base-files base-passwd busybox \
dropbear \
miniinit \
@@ -8,12 +11,9 @@ NYLON_BASE = "base-files base-passwd busybox \
netbase \
wireless-tools"
-RDEPENDS = "kernel \
+RDEPENDS += "kernel \
${NYLON_BASE} ${BOOTSTRAP_EXTRA_RDEPENDS}"
export PACKAGE_INSTALL = "${RDEPENDS}"
IMAGE_LINGUAS = ""
-
-inherit image
-LICENSE = "MIT"
diff --git a/packages/images/nylon-image-standard.bb b/packages/images/nylon-image-standard.bb
index 29e29cd1eb..ca5f987dfe 100644
--- a/packages/images/nylon-image-standard.bb
+++ b/packages/images/nylon-image-standard.bb
@@ -3,26 +3,18 @@ require nylon-image-base.bb
export IMAGE_BASENAME = "nylon-standard"
NYLON_STANDARD = "\
- bridge-utils \
- dnsmasq \
hostap-utils \
- hostap-daemon \
linux-hotplug \
- ifplugd iproute2 iptables \
- madwifi-modules \
- nylon-scripts \
+ ifplugd \
olsrd \
- ppp pciutils \
+ ppp \
rp-pppoe \
shorewall \
tcpdump \
- usbutils \
- wireless-tools \
- wpa-supplicant \
- yamonenv"
+ wpa-supplicant"
DEPENDS += "hostap-modules ntp \
${NYLON_STANDARD}"
-RDEPENDS += "hostap-modules-pci ntpdate nano elvis-tiny \
+RDEPENDS += "hostap-modules-pci ntpdate less nano elvis-tiny \
${NYLON_STANDARD}"
diff --git a/packages/images/openmoko-devel-image.bb b/packages/images/openmoko-devel-image.bb
index 3f238196a4..9c72533f8d 100644
--- a/packages/images/openmoko-devel-image.bb
+++ b/packages/images/openmoko-devel-image.bb
@@ -1,6 +1,5 @@
require openmoko-image.bb
export PACKAGE_INSTALL += "\
- task-openmoko-demo \
task-openmoko-debug \
"
diff --git a/packages/images/openmoko-image.bb b/packages/images/openmoko-image.bb
index 0ebddcb276..65158f679b 100644
--- a/packages/images/openmoko-image.bb
+++ b/packages/images/openmoko-image.bb
@@ -12,9 +12,10 @@ export PACKAGE_INSTALL = "\
task-openmoko-ui \
task-openmoko-base \
task-openmoko-phone \
- task-openmoko-finger \
+ task-openmoko-games \
task-openmoko-pim \
-"
+ "
+
DEPENDS = "\
${MACHINE_TASK_PROVIDER} \
task-openmoko \
diff --git a/packages/images/openprotium-image.bb b/packages/images/openprotium-image.bb
index 472000f4f0..25d38cf1c3 100644
--- a/packages/images/openprotium-image.bb
+++ b/packages/images/openprotium-image.bb
@@ -83,7 +83,7 @@ RDEPENDS = " \
kernel base-files base-passwd netbase \
busybox initscripts-openprotium openprotium-init \
update-modules sysvinit tinylogin \
- module-init-tools modutils-initscripts \
+ module-init-tools-depmod modutils-initscripts \
ipkg-collateral ipkg ipkg-link \
libgcc1 \
portmap \
@@ -92,11 +92,6 @@ RDEPENDS = " \
mdadm \
hdparm \
mtd-utils \
- sccd \
- util-linux-mount \
- util-linux-umount \
- util-linux-swaponoff \
- util-linux-losetup \
${OPENPROTIUM_SUPPORT} \
${OPENPROTIUM_KERNEL} "
# ${SLUGOS_EXTRA_RDEPENDS}"
diff --git a/packages/images/opie-image-16mb.bb b/packages/images/opie-image-16mb.bb
new file mode 100644
index 0000000000..9c0ed1cacc
--- /dev/null
+++ b/packages/images/opie-image-16mb.bb
@@ -0,0 +1,69 @@
+export IMAGE_BASENAME = "opie-image-16mb"
+export IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+PR = "r1"
+
+DEPENDS = "${MACHINE_TASK_PROVIDER} task-opie-16mb"
+RDEPENDS = "${INSTALL_PACKAGES}"
+
+INSTALL_PACKAGES = "task-boot \
+ ipkg ipkg-collateral \
+ dropbear \
+ task-opie-16mb-base \
+ task-opie-16mb-applets \
+ task-opie-16mb-inputmethods \
+ task-opie-16mb-settings \
+ task-opie-16mb-apps \
+ task-opie-16mb-pim \
+ task-opie-irda"
+
+export PACKAGE_INSTALL = "${INSTALL_PACKAGES}"
+
+# merge feed-sources into ipkg.conf for opie-aqpkg as it can't handle feed-sources outside of ipkg.conf.
+merge_feeds() {
+
+ if ! test -z "${FEED_URIS}"
+ then
+ # Die gracefully if ipkg-collateral failed
+ if ! test -e "${IMAGE_ROOTFS}/etc/ipkg.conf"
+ then
+ echo "[${IMAGE_ROOTFS}/etc/ipkg.conf] is missing!"
+ exit 1
+ fi
+
+ # comment out existing feed-sources inserted by ipkg-collateral
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | sed "s/^src\ /#src\ /" > ${IMAGE_ROOTFS}/etc/ipkg.conf_
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
+
+ # extract, then delete destinations
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep -v "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf_
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
+
+
+ for line in ${FEED_URIS}
+ do
+ # strip leading and trailing spaces/tabs, then split into name and uri
+ line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
+ feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
+ feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
+
+ # insert new feed-sources
+ echo "src/gz $feed_name $feed_uri" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ done
+
+ # remove temporary files and rebuild ipkg.conf
+ echo "" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf.dest >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
+
+ # remove -feed.conf files which are no longer needed
+ cd ${IMAGE_ROOTFS}/etc/ipkg/ && rm -- *-feed.conf
+ fi
+}
+
+# merge feed-sources into ipkg.conf and create /etc/timestamp from build date
+IMAGE_PREPROCESS_COMMAND = "merge_feeds; create_etc_timestamp"
+
+inherit image
diff --git a/packages/images/opie-image.bb b/packages/images/opie-image.bb
index 3613ccafde..cd8d7df654 100644
--- a/packages/images/opie-image.bb
+++ b/packages/images/opie-image.bb
@@ -2,7 +2,7 @@ export IMAGE_BASENAME = "opie-image"
export IMAGE_LINGUAS = ""
LICENSE = "MIT"
-PR = "r21"
+PR = "r22"
DEPENDS = "${MACHINE_TASK_PROVIDER} task-opie"
RDEPENDS = "${INSTALL_PACKAGES}"
@@ -14,9 +14,6 @@ INSTALL_PACKAGES = "${MACHINE_TASK_PROVIDER} task-opie-base task-opie-base-apple
task-opie-extra-settings \
task-opie-bluetooth task-opie-irda "
-INSTALL_PACKAGES_spitz_append = "task-opie-extra-games task-opie-extra-apps task-opie-extra-styles"
-INSTALL_PACKAGES_akita_append = "task-opie-extra-games task-opie-extra-apps task-opie-extra-styles"
-
export PACKAGE_INSTALL = "${INSTALL_PACKAGES}"
# merge feed-sources into ipkg.conf for opie-aqpkg as it can't handle feed-sources outside of ipkg.conf.
diff --git a/packages/images/pivotboot-image.bb b/packages/images/pivotboot-image.bb
index 78c3d7a6e9..529e4cdb83 100644
--- a/packages/images/pivotboot-image.bb
+++ b/packages/images/pivotboot-image.bb
@@ -7,7 +7,4 @@ PR = "r1"
inherit image
-FEED_URIS_append_familiar = " x11##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/x11 \
- opie##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/opie"
-
LICENSE = "MIT"
diff --git a/packages/images/sectest-gpe-image.bb b/packages/images/sectest-gpe-image.bb
index fa16437662..a56991b902 100644
--- a/packages/images/sectest-gpe-image.bb
+++ b/packages/images/sectest-gpe-image.bb
@@ -1,8 +1,6 @@
LICENSE = "MIT"
PR = "r6"
-FEED_URIS_append_familiar = " x11##http://familiar.handhelds.org/releases/${DISTRO_VERSION}/feed/x11"
-
export IMAGE_BASENAME = "sectest-gpe-image"
GPE_EXTRA_THEMES = "\
diff --git a/packages/images/slugos-image.bb b/packages/images/slugos-image.bb
index d78528d700..be746009b6 100644
--- a/packages/images/slugos-image.bb
+++ b/packages/images/slugos-image.bb
@@ -14,7 +14,7 @@ PACKAGE_INSTALL = "task-slugos"
COMPATIBLE_MACHINE = "nslu2"
IMAGE_NAME = "${IMAGE_BASENAME}-${DISTRO_VERSION}"
-IMAGE_FSTYPES = "jffs2"
+IMAGE_FSTYPES = "jffs2 tar.gz"
EXTRA_IMAGECMD_jffs2 += " -D ${SLUGOS_DEVICE_TABLE}"
IMAGE_LINGUAS = ""
diff --git a/packages/images/unslung-image.bb b/packages/images/unslung-image.bb
index 897fb131c1..a24271a9d6 100644
--- a/packages/images/unslung-image.bb
+++ b/packages/images/unslung-image.bb
@@ -1,5 +1,5 @@
LICENSE = "MIT"
-PR = "r25"
+PR = "r26"
COMPATIBLE_MACHINE = "nslu2"
IMAGE_BASENAME = "unslung"
@@ -12,17 +12,11 @@ DEPENDS = "virtual/kernel \
${UNSLUNG_EXTRA_DEPENDS}"
RDEPENDS = "kernel update-modules unslung-rootfs \
- libc6-unslung slingbox ipkg \
- libipkg \
-# cpio \
-# findutils \
+ libc6-unslung slingbox ipkg libipkg \
${UNSLUNG_EXTRA_RDEPENDS}"
PACKAGE_INSTALL = "kernel update-modules unslung-rootfs \
- libc6-unslung slingbox ipkg \
- libipkg \
-# cpio \
-# findutils \
+ libc6-unslung slingbox ipkg libipkg \
kernel-module-netconsole \
${UNSLUNG_EXTRA_INSTALL}"
@@ -76,27 +70,6 @@ unslung_clean_image () {
${STRIP} ${IMAGE_ROOTFS}/lib/libgcc_s.so.1
chmod ugo+x ${IMAGE_ROOTFS}/lib/libgcc_s.so.1
-# MJW - experimental right now, but no longer need cpio and find
- # We need cpio and find, but we don't need any of the other stuff in
- # the packages (users can install the full package with ipkg after
- # unsling). Remove the extra files and executables, and clean up
- # the entries from the ipkg database manually.
-
- #-- these are for cpio:
-# rm -f ${IMAGE_ROOTFS}/usr/bin/mt
-# rm -rf ${IMAGE_ROOTFS}/usr/libexec
-# rm -f ${IMAGE_ROOTFS}${libdir}/ipkg/info/cpio.*
-# rm -f ${IMAGE_ROOTFS}${libdir}/ipkg/alternatives/rmt
-# sed -i -e '/^Package: cpio/,/^$/d' ${IMAGE_ROOTFS}${libdir}/ipkg/status
-
- #-- and these for find:
-# rm -f ${IMAGE_ROOTFS}/usr/bin/locate
-# rm -f ${IMAGE_ROOTFS}/usr/bin/updatedb
-# rm -f ${IMAGE_ROOTFS}/usr/bin/xargs
-# rm -f ${IMAGE_ROOTFS}/usr/bin/xargs.findutils
-# rm -f ${IMAGE_ROOTFS}${libdir}/ipkg/info/findutils.*
-# sed -i -e '/^Package: findutils/,/^$/d' ${IMAGE_ROOTFS}${libdir}/ipkg/status
-
# FIXME: change made 24 Jul 2006 by the OE folks changes the "strip"
# behavior to create an extra file named .debug/<filename> containing
# the stripped symbols. These files are supposed to be packaged
@@ -120,20 +93,3 @@ unslung_clean_image () {
# #### End of Hack!
}
-
-nslu2_pack_image () {
- install -d ${DEPLOY_DIR_IMAGE}/slug
- install -m 0644 ${STAGING_LIBDIR}/nslu2-binaries/RedBoot \
- ${STAGING_LIBDIR}/nslu2-binaries/Trailer \
- ${STAGING_LIBDIR}/nslu2-binaries/SysConf \
- ${DEPLOY_DIR_IMAGE}/slug/
- install -m 0644 ${DEPLOY_DIR_IMAGE}/zImage-${IMAGE_BASENAME} ${DEPLOY_DIR_IMAGE}/slug/vmlinuz
- install -m 0644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${DEPLOY_DIR_IMAGE}/slug/flashdisk.jffs2
- cd ${DEPLOY_DIR_IMAGE}/slug
- slugimage -p -b RedBoot -s SysConf -r Ramdisk:1,Flashdisk:flashdisk.jffs2 -t Trailer \
- -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flashdisk.img
- rm -rf ${DEPLOY_DIR_IMAGE}/slug
-}
-
-EXTRA_IMAGEDEPENDS += 'slugimage-native nslu2-linksys-firmware'
-IMAGE_POSTPROCESS_COMMAND += "nslu2_pack_image; "
diff --git a/packages/sysvinit/sysvinit/htcuniversal/.mtn2git_empty b/packages/initrdscripts/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/sysvinit/sysvinit/htcuniversal/.mtn2git_empty
+++ b/packages/initrdscripts/.mtn2git_empty
diff --git a/packages/tor/tor-0.1.1.23/.mtn2git_empty b/packages/initrdscripts/devimage/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/tor/tor-0.1.1.23/.mtn2git_empty
+++ b/packages/initrdscripts/devimage/.mtn2git_empty
diff --git a/packages/initrdscripts/devimage/devimage.sh b/packages/initrdscripts/devimage/devimage.sh
new file mode 100644
index 0000000000..e85debf245
--- /dev/null
+++ b/packages/initrdscripts/devimage/devimage.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+mkdir /proc
+mount -t proc proc /proc
+mkdir /sys
+mount -t sysfs sysfs /sys
+mkdir -p /dev/pts
+mount -t devpts devpts /dev/pts
+
+/usr/sbin/dropbear -E
+
+/bin/sh
diff --git a/packages/initrdscripts/devimage/dropbear_rsa_host_key b/packages/initrdscripts/devimage/dropbear_rsa_host_key
new file mode 100644
index 0000000000..18d832332e
--- /dev/null
+++ b/packages/initrdscripts/devimage/dropbear_rsa_host_key
Binary files differ
diff --git a/packages/initrdscripts/devimage/passwd b/packages/initrdscripts/devimage/passwd
new file mode 100644
index 0000000000..233d68fae1
--- /dev/null
+++ b/packages/initrdscripts/devimage/passwd
@@ -0,0 +1 @@
+root::0:0:root:/:/bin/sh
diff --git a/packages/initrdscripts/devimage_0.1.bb b/packages/initrdscripts/devimage_0.1.bb
new file mode 100644
index 0000000000..8eb6fa2d83
--- /dev/null
+++ b/packages/initrdscripts/devimage_0.1.bb
@@ -0,0 +1,11 @@
+SRC_URI = "file://devimage.sh file://passwd file://dropbear_rsa_host_key"
+PR = "r1"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/devimage.sh ${D}/init
+ install -d ${D}/etc/dropbear
+ install -m 0600 ${WORKDIR}/dropbear_rsa_host_key ${D}/etc/dropbear/
+ install -m 0644 ${WORKDIR}/passwd ${D}/etc/
+}
+
+FILES_${PN} += " /init /etc/*"
diff --git a/packages/tslib/tslib/a780/.mtn2git_empty b/packages/initrdscripts/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/tslib/tslib/a780/.mtn2git_empty
+++ b/packages/initrdscripts/files/.mtn2git_empty
diff --git a/packages/initrdscripts/files/blockboot.sh b/packages/initrdscripts/files/blockboot.sh
new file mode 100644
index 0000000000..567f7e29b3
--- /dev/null
+++ b/packages/initrdscripts/files/blockboot.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Allow booting from a normal block device.
+
+if [ -e "$ROOT_DEVICE" ]; then
+ echo "booting from: $ROOT_DEVICE"
+ mount "$ROOT_DEVICE" /mnt
+ BOOT_ROOT=/mnt
+fi
diff --git a/packages/initrdscripts/files/init.sh b/packages/initrdscripts/files/init.sh
new file mode 100644
index 0000000000..8c9803f21b
--- /dev/null
+++ b/packages/initrdscripts/files/init.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+MODULE_DIR=/initrd.d
+BOOT_ROOT=
+ROOT_DEVICE=/dev/null
+
+early_setup() {
+ mkdir /proc
+ mount -t proc proc /proc
+ mkdir /mnt
+
+ echo -n "creating device nodes: "
+ grep '^ *[0-9]' /proc/partitions | while read major minor blocks dev
+ do
+ if [ ! -e /dev/$dev ]; then
+ echo -n "$dev "
+ [ -e /dev/$dev ] || mknod /dev/$dev b $major $minor
+ fi
+ done
+ echo
+}
+
+read_args() {
+ CMDLINE=`cat /proc/cmdline`
+ for arg in $CMDLINE; do
+ optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
+ case $arg in
+ root=*)
+ ROOT_DEVICE=$optarg ;;
+ rootdelay=*)
+ rootdelay=$optarg ;;
+ esac
+ done
+}
+
+load_modules() {
+ for module in $MODULE_DIR/*; do
+ source $module
+ done
+}
+
+boot_root() {
+ cd $BOOT_ROOT
+ exec switch_root -c /dev/console $BOOT_ROOT /sbin/init
+}
+
+boot_failed() {
+ echo "No valid root device was specified. Please add root=/dev/something to"
+ echo "the kernel command-line and try again."
+ echo
+ exec sh
+}
+
+echo "Starting initramfs boot..."
+early_setup
+read_args
+
+if [ -n "$rootdelay" ]; then
+ echo "Waiting $rootdelay seconds for devices to settle..."
+ sleep $rootdelay
+fi
+
+load_modules
+[ -n "$BOOT_ROOT" ] && boot_root
+boot_failed
diff --git a/packages/initrdscripts/files/loopboot.sh b/packages/initrdscripts/files/loopboot.sh
new file mode 100644
index 0000000000..55a1948db8
--- /dev/null
+++ b/packages/initrdscripts/files/loopboot.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+if [ "$ROOT_DEVICE" = "/dev/loop" ]; then
+ loop_mount() {
+ loopdev=/dev/loop$loop_num
+ mountpt=/mnt/loop$loop_num
+
+ [ -e $loopdev ] || mknod $loopdev b 7 $loop_num
+
+ # if only one argument was specified, let it be path not dev
+ if [ -z "$path" ] && [ -n "$dev" ]; then
+ path="$dev"
+ dev=""
+ fi
+ [ -z "$offset" ] && offset=0
+
+ if [ -n "$dev" ]; then
+ hostpt=`expr "$dev" : '.*/\([^/]*\)'`
+ [ -z "$hostpt" ] && hostpt="$dev"
+
+ echo "Mounting $dev on $hostpt"
+ mkdir $hostpt
+ mount $dev $hostpt
+ cd $hostpt
+ fi
+
+ echo "Loopback setup of $path (offset $offset)"
+ losetup -o "$offset" "$loopdev" "$path"
+
+ echo "Mounting $loopdev on $mountpt"
+ mkdir "$mountpt"
+ mount "$loopdev" "$mountpt"
+ cd "$mountpt"
+ BOOT_ROOT="$mountpt"
+ loop_num=`expr "$loop_num" + 1`
+ }
+
+ modprobe vfat
+ modprobe loop
+
+ loop_num=0
+
+ for arg in $CMDLINE; do
+ optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
+ echo $arg xxx $optarg
+ case $arg in
+ looproot=*)
+ dev=`expr "$optarg" : '\([^:]*\).*'`
+ path=`expr "$optarg" : '[^:]*:\([^:]*\).*'`
+ offset=`expr "$optarg" : '[^:]*:[^:]*:\([^:]*\).*'`
+ loop_mount ;;
+ esac
+ done
+fi
diff --git a/packages/initrdscripts/files/nfsboot.sh b/packages/initrdscripts/files/nfsboot.sh
new file mode 100644
index 0000000000..5129a53ebb
--- /dev/null
+++ b/packages/initrdscripts/files/nfsboot.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+if [ "$ROOT_DEVICE" = "/dev/nfs" ]; then
+
+ # These correspond to what kernel itself uses
+ # DO NOT CHANGE!
+ NFS_OPTIONS="-o nfsvers=2,nolock"
+
+ for arg in $CMDLINE; do
+ echo $arg
+ optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
+ echo $optarg
+ case $arg in
+ nfsroot=*)
+ nfsroot=$optarg ;;
+ ip=*)
+ ip=$optarg ;;
+ esac
+ done
+
+ echo $ip | (IFS=: read client_ip server_ip gw_ip netmask hostname device autoconf; \
+ echo client_ip=$client_ip;
+ echo server_ip=$server_ip;
+ echo gw_ip=$gw_ip;
+ echo netmask=$netmask;
+ echo hostname=$hostname;
+ echo device=$device;
+ echo autoconf=$autoconf;
+
+ case "$device" in
+ usb*)
+ echo "USB"
+ modprobe g_ether
+ ;;
+ esac
+
+ ifconfig $device $client_ip
+ )
+
+ echo "booting from NFS: $nfsroot"
+ mount -t nfs $NFS_OPTIONS $nfsroot /mnt
+ BOOT_ROOT=/mnt
+fi
diff --git a/packages/uboot-utils/.mtn2git_empty b/packages/initrdscripts/initramfs-jffs2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot-utils/.mtn2git_empty
+++ b/packages/initrdscripts/initramfs-jffs2/.mtn2git_empty
diff --git a/packages/initrdscripts/initramfs-jffs2/jffs2boot.sh b/packages/initrdscripts/initramfs-jffs2/jffs2boot.sh
new file mode 100644
index 0000000000..81077eeae5
--- /dev/null
+++ b/packages/initrdscripts/initramfs-jffs2/jffs2boot.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+echo "Starting initrd boot..."
+mkdir /proc
+mount -t proc proc /proc
+
+modprobe mtdram total_size=24576 erase_size=256
+sleep 1
+
+ID=`grep "mtdram test device" /proc/mtd | cut -d: -f1| cut -b4-`
+
+cat /initrd.jffs2 >/dev/mtdblock$ID
+
+mkdir /mnt
+mount -t jffs2 /dev/mtdblock$ID /mnt
+
+cd /mnt
+exec switch_root -c /dev/console /mnt /sbin/init
diff --git a/packages/initrdscripts/initramfs-jffs2_0.1.bb b/packages/initrdscripts/initramfs-jffs2_0.1.bb
new file mode 100644
index 0000000000..78034c99c9
--- /dev/null
+++ b/packages/initrdscripts/initramfs-jffs2_0.1.bb
@@ -0,0 +1,8 @@
+SRC_URI = "file://jffs2boot.sh"
+PR = "r0"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/jffs2boot.sh ${D}/init
+}
+
+FILES_${PN} += " /init "
diff --git a/packages/initrdscripts/initramfs-module-block_0.1.bb b/packages/initrdscripts/initramfs-module-block_0.1.bb
new file mode 100644
index 0000000000..a0cb2fd7fa
--- /dev/null
+++ b/packages/initrdscripts/initramfs-module-block_0.1.bb
@@ -0,0 +1,11 @@
+SRC_URI = "file://blockboot.sh"
+PR = "r2"
+RDEPENDS = "initramfs-uniboot"
+DESCRIPTION = "An initramfs module for booting off normal block devices."
+
+do_install() {
+ install -d ${D}/initrd.d
+ install -m 0755 ${WORKDIR}/blockboot.sh ${D}/initrd.d/block
+}
+
+FILES_${PN} += " /initrd.d/block "
diff --git a/packages/initrdscripts/initramfs-module-loop_0.1.bb b/packages/initrdscripts/initramfs-module-loop_0.1.bb
new file mode 100644
index 0000000000..d4e5aa038f
--- /dev/null
+++ b/packages/initrdscripts/initramfs-module-loop_0.1.bb
@@ -0,0 +1,13 @@
+SRC_URI = "file://loopboot.sh"
+PR = "r3"
+DESCRIPTION = "An initramfs module for booting a filesystem image by loopback \
+ mounting it."
+RDEPENDS = "initramfs-uniboot"
+RRECOMMENDS = "kernel-module-loop kernel-module-vfat"
+
+do_install() {
+ install -d ${D}/initrd.d
+ install -m 0755 ${WORKDIR}/loopboot.sh ${D}/initrd.d/loop
+}
+
+FILES_${PN} += " /initrd.d/loop "
diff --git a/packages/initrdscripts/initramfs-module-nfs_0.1.bb b/packages/initrdscripts/initramfs-module-nfs_0.1.bb
new file mode 100644
index 0000000000..24284d6c5f
--- /dev/null
+++ b/packages/initrdscripts/initramfs-module-nfs_0.1.bb
@@ -0,0 +1,12 @@
+SRC_URI = "file://nfsboot.sh"
+PR = "r4"
+DESCRIPTION = "An initramfs module for booting via NFS."
+RDEPENDS = "initramfs-uniboot"
+RRECOMMENDS = "kernel-module-g-ether kernel-module-nfs"
+
+do_install() {
+ install -d ${D}/initrd.d
+ install -m 0755 ${WORKDIR}/nfsboot.sh ${D}/initrd.d/nfs
+}
+
+FILES_${PN} += " /initrd.d/nfs "
diff --git a/packages/initrdscripts/initramfs-uniboot_0.2.bb b/packages/initrdscripts/initramfs-uniboot_0.2.bb
new file mode 100644
index 0000000000..46ba06ff9a
--- /dev/null
+++ b/packages/initrdscripts/initramfs-uniboot_0.2.bb
@@ -0,0 +1,11 @@
+SRC_URI = "file://init.sh"
+PR = "r1"
+DESCRIPTON = "A modular initramfs init script system."
+RDEPENDS = "busybox-static"
+RRECOMMENDS = "kernel-module-uinput"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/init.sh ${D}/init
+}
+
+FILES_${PN} += " /init "
diff --git a/packages/initscripts/initscripts-1.0/checkroot.sh b/packages/initscripts/initscripts-1.0/checkroot.sh
index 8a02aa7b58..f3b8a0cd45 100755
--- a/packages/initscripts/initscripts-1.0/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/checkroot.sh
@@ -193,7 +193,7 @@ ROOTFSDEV="/dev/root"
if ! grep -q "^$ROOTFSDEV\w" /proc/mounts; then
ROOTFSDEV="rootfs"
fi
-if [ $(grep "^$ROOTFSDEV\w" /proc/mounts | awk '{print $4}') = rw ]; then
+if [ x$(grep "^$ROOTFSDEV\w" /proc/mounts | awk '{print $4}') = "xrw" ]; then
echo "Root filesystem already read-write, not remounting"
exit 0
fi
diff --git a/packages/uboot/u-boot-LABEL.2006.06.30.2020/.mtn2git_empty b/packages/initscripts/initscripts-1.0/fic-gta01/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-LABEL.2006.06.30.2020/.mtn2git_empty
+++ b/packages/initscripts/initscripts-1.0/fic-gta01/.mtn2git_empty
diff --git a/packages/initscripts/initscripts-1.0/fic-gta01/inittab b/packages/initscripts/initscripts-1.0/fic-gta01/inittab
new file mode 100644
index 0000000000..8d313b2a58
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/fic-gta01/inittab
@@ -0,0 +1,48 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:5:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# Shut down if kernel sends us SIGINT or SIGPWR
+ca::ctrlaltdel:/sbin/halt -p
+pf::powerfailnow:/sbin/halt -p
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+
+# /sbin/getty invocations for the runlevels.
+#
+# The "id" field MUST be the same as the last
+# characters of the device (after "tty").
+#
+# Format:
+# <id>:<runlevels>:<action>:<process>
+
+# NOTE: FIC GTA01 has this odd multiplexer on ttySAC0 since
+# GSM shares it with the serial output. We only allow
+# the getty in runlevel 2 to cope with that. gsmd gets
+# started in runlevel 3. -- mickey@openmoko.org
+S:2:respawn:/sbin/getty 115200 ttySAC0
diff --git a/packages/uicmoc/uicmoc4-native-4.1.1/.mtn2git_empty b/packages/initscripts/initscripts-1.0/foonas/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uicmoc/uicmoc4-native-4.1.1/.mtn2git_empty
+++ b/packages/initscripts/initscripts-1.0/foonas/.mtn2git_empty
diff --git a/packages/initscripts/initscripts-1.0/foonas/checkroot.sh b/packages/initscripts/initscripts-1.0/foonas/checkroot.sh
new file mode 100755
index 0000000000..c69a773482
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/foonas/checkroot.sh
@@ -0,0 +1,212 @@
+#
+# checkroot.sh Check to root filesystem.
+#
+# Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels@cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
+# from this script *before anything else* with a timeout, like SCO does.
+#
+test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
+
+#
+# Ensure that bdflush (update) is running before any major I/O is
+# performed (the following fsck is a good example of such activity :).
+#
+test -x /sbin/update && update
+
+#
+# Read /etc/fstab.
+#
+exec 9>&0 </etc/fstab
+rootmode=rw
+rootopts=rw
+test "$ENABLE_ROOTFS_FSCK" = yes && rootcheck="yes" || rootcheck="no"
+swap_on_md=no
+devfs=
+while read fs mnt type opts dump pass junk
+do
+ case "$fs" in
+ ""|\#*)
+ continue;
+ ;;
+ /dev/md*)
+ # Swap on md device.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ /dev/*)
+ ;;
+ *)
+ # Might be a swapfile.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ esac
+
+ test "$type" = devfs && devfs="$fs"
+
+ # Currently we do not care about the other entries
+ if test "$mnt" = "/"
+ then
+ #echo "[$fs] [$mnt] [$type] [$opts] [$dump] [$pass] [$junk]"
+
+ rootopts="$opts"
+ roottype="$type"
+
+ #The "spinner" is broken on busybox sh
+ TERM=dumb
+
+ test "$pass" = 0 -o "$pass" = "" && rootcheck=no
+
+ # Enable fsck for ext2 and ext3 rootfs, disable for everything else
+ case "$type" in
+ ext2|ext3) rootcheck=yes;;
+ *) rootcheck=no;;
+ esac
+
+ if test "$rootcheck" = yes
+ then
+ if ! test -x "/sbin/fsck.${roottype}"
+ then
+ echo -e "\n * * * WARNING: /sbin/fsck.${roottype} is missing! * * *\n"
+ rootcheck=no
+ fi
+ fi
+
+ case "$opts" in
+ ro|ro,*|*,ro|*,ro,*)
+ rootmode=ro
+ ;;
+ esac
+ fi
+done
+exec 0>&9 9>&-
+
+#
+# Activate the swap device(s) in /etc/fstab. This needs to be done
+# before fsck, since fsck can be quite memory-hungry.
+#
+doswap=no
+test -d /proc/1 || mount -n /proc
+case "`uname -r`" in
+ 2.[0123].*)
+ if test $swap_on_md = yes && grep -qs resync /proc/mdstat
+ then
+ test "$VERBOSE" != no && echo "Not activating swap - RAID array resyncing"
+ else
+ doswap=yes
+ fi
+ ;;
+ *)
+ doswap=yes
+ ;;
+esac
+if test $doswap = yes
+then
+ test "$VERBOSE" != no && echo "Activating swap"
+ swapon -a 2> /dev/null
+fi
+
+#
+# Check the root filesystem.
+#
+if test -f /fastboot || test $rootcheck = no
+then
+ test $rootcheck = yes && echo "Fast boot, no filesystem check"
+else
+ #
+ # Ensure that root is quiescent and read-only before fsck'ing.
+ #
+ mount -n -o remount,ro /
+ if test $? = 0
+ then
+ if test -f /forcefsck
+ then
+ force="-f"
+ else
+ force=""
+ fi
+ if test "$FSCKFIX" = yes
+ then
+ fix="-y"
+ else
+ fix="-a"
+ fi
+ spinner="-C"
+ case "$TERM" in
+ dumb|network|unknown|"") spinner="" ;;
+ esac
+ test `uname -m` = s390 && spinner="" # This should go away
+ test "$VERBOSE" != no && echo "Checking root filesystem..."
+ fsck $spinner $force $fix /
+ #
+ # If there was a failure, drop into single-user mode.
+ #
+ # NOTE: "failure" is defined as exiting with a return code of
+ # 2 or larger. A return code of 1 indicates that filesystem
+ # errors were corrected but that the boot may proceed.
+ #
+
+ echo "RETURNCODE: [$RTC]"
+
+ if test "$RTC" -gt 3
+ then
+
+ # Since this script is run very early in the boot-process, it should be safe to assume that the
+ # output is printed to VT1. However, some distributions use a bootsplash to hide the "ugly" boot
+ # messages and having the bootsplash "hang" due to a waiting fsck prompt is less than ideal
+ chvt 1
+
+ # Surprise! Re-directing from a HERE document (as in
+ # "cat << EOF") won't work, because the root is read-only.
+ echo
+ echo "fsck failed. Please repair manually and reboot. "
+ echo "Please note that the root filesystem is currently "
+ echo "mounted read-only. To remount it read-write:"
+ echo
+ echo " # mount -n -o remount,rw /"
+ echo
+ echo "CONTROL-D will exit from this shell"
+ echo "and REBOOT the system."
+ echo
+ # Start a single user shell on the console
+ /sbin/sulogin $CONSOLE
+ reboot -f
+ fi
+ else
+ echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!"
+ echo
+ fi
+fi
+
+devrootfound=$(grep "/dev/root" /proc/mounts | \
+ awk '{if ($4 = /rw/) print "found";}' )
+
+if [ -n "$devrootfound" -a "$devrootfound" = "found" ]; then
+ echo "Read/write /dev/root found."
+ exit 0
+fi
+
+if mount -vf -o remount / 2> /dev/null | \
+ awk '{if ($6 ~ /rw/) exit 0; else exit 1; }' && \
+ ! touch -c / 2> /dev/null
+ then
+ echo " Remounting root filesystem read/write"
+ mount -n -o remount,$rootmode /
+fi
+
+if test "$rootmode" = rw
+then
+ if test ! -L /etc/mtab
+ then
+ rm -f /etc/mtab~ /etc/nologin
+ : > /etc/mtab
+ fi
+ mount -f -o remount /
+ mount -f /proc
+ test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
+fi
+
+: exit 0
diff --git a/packages/initscripts/initscripts-1.0/foonas/devices b/packages/initscripts/initscripts-1.0/foonas/devices
new file mode 100755
index 0000000000..f83ea63598
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/foonas/devices
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udev -o -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ [ -e /dev/.linksmade ] && exit 0
+
+ ln -s /dev/tts/0 /dev/ttySA0
+ ln -s /dev/tts/1 /dev/ttySA1
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/misc/rtc /dev/rtc
+
+ #
+ # some friendly disk links
+ #
+ ln -s /dev/discs/disc0/disc /dev/hda
+ ln -s /dev/discs/disc1/disc /dev/hdb
+ for i in 1 2 3 4; do
+ ln -s /dev/discs/disc0/part$i /dev/hda$i
+ ln -s /dev/discs/disc1/part$i /dev/hdb$i
+ done
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ ln -s /dev/zero /dev/.linksmade
+
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/input
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ mkdir -p dev/snd
+ mkdir -p dev/tts
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
diff --git a/packages/initscripts/initscripts-1.0/foonas/domainname.sh b/packages/initscripts/initscripts-1.0/foonas/domainname.sh
new file mode 100644
index 0000000000..7113467d8c
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/foonas/domainname.sh
@@ -0,0 +1,5 @@
+#
+# domainname.sh Set the domainname.
+#
+test -r /etc/defaultdomain &&
+ cat /etc/defaultdomain >/proc/sys/kernel/domainname
diff --git a/packages/initscripts/initscripts-1.0/foonas/halt b/packages/initscripts/initscripts-1.0/foonas/halt
new file mode 100755
index 0000000000..f22d892d46
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/foonas/halt
@@ -0,0 +1,27 @@
+#! /bin/sh
+#
+# halt Execute the halt command.
+#
+# Version: @(#)halt 2.84-2 07-Jan-2002 miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# See if we need to cut the power.
+if test -x /etc/init.d/ups-monitor
+then
+ /etc/init.d/ups-monitor poweroff
+fi
+
+# Don't shut down drives if we're using RAID.
+hddown="-h"
+if grep -qs '^md.*active' /proc/mdstat
+then
+ hddown=""
+fi
+
+echo "Powering down..."
+scc -p off
+halt -d -f -i -p $hddown
+
+: exit 0
diff --git a/packages/initscripts/initscripts-1.0/foonas/reboot b/packages/initscripts/initscripts-1.0/foonas/reboot
new file mode 100755
index 0000000000..05a82be4c0
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/foonas/reboot
@@ -0,0 +1,12 @@
+#! /bin/sh
+#
+# reboot Execute the reboot command.
+#
+# Version: @(#)reboot 2.75 22-Jun-1998 miquels@cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo -n "Rebooting... "
+scc -p restart
+reboot -d -f -i
diff --git a/packages/initscripts/initscripts-1.0/mountall.sh b/packages/initscripts/initscripts-1.0/mountall.sh
index b5cb85a1e9..53bff0fbce 100755
--- a/packages/initscripts/initscripts-1.0/mountall.sh
+++ b/packages/initscripts/initscripts-1.0/mountall.sh
@@ -4,6 +4,9 @@
# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels@cistron.nl
#
. /etc/default/rcS
+if test -f /etc/default/mountall; then
+ . /etc/default/mountall
+fi
#
# Mount local filesystems in /etc/fstab. For some reason, people
@@ -11,7 +14,7 @@
# about this. So we mount "proc" filesystems without -v.
#
test "$VERBOSE" != no && echo "Mounting local filesystems..."
-mount -at nonfs,nosmbfs,noncpfs 2>/dev/null
+mount -a $MOUNTALL 2>&1 | logger -s -p user.err
#
# We might have mounted something over /dev, see if /dev/initctl is there.
@@ -41,5 +44,17 @@ then
swapon -a 2> /dev/null
fi
+# A missing homedirectory for root can cause all sorts of problems.
+# This can happen after user formats his /home partition for example
+
+if test -e /etc/passwd
+then
+ ROOT_HOME="`cat /etc/passwd|grep ^root | awk '{split($0,x,":");printf("%s\n",x[6])}'`"
+
+ if test -n "$ROOT_HOME"
+ then
+ ! test -d "$ROOT_HOME" && mkdir -p "$ROOT_HOME"
+ fi
+fi
: exit 0
diff --git a/packages/initscripts/initscripts-1.0/openzaurus/checkversion b/packages/initscripts/initscripts-1.0/openzaurus/checkversion
deleted file mode 100755
index 0c8be4fc2d..0000000000
--- a/packages/initscripts/initscripts-1.0/openzaurus/checkversion
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-found=`cat /proc/version | cut -d ' ' -f3`
-echo "$found" | grep -q "snapshot" && exit 0
-
-if [ "VERSION" != "$found" ] ; then
- echo -e >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo -e "\033[31;1m * \033[0mW A R N I N G ! \033[31;1m* \033[0m" >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo -e "\033[31;1m * \033[0mYou are running the wrong kernel! \033[31;1m* \033[0m" >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo >/dev/tty1
- echo -e "You are running '" $found "'" >/dev/tty1
- echo -e "I expect kernel '" VERSION "'" >/dev/tty1
- echo >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo -e "\033[31;1m * \033[0mRunning this combination is unsupported \033[31;1m* \033[0m" >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo >/dev/tty1
- echo "I will sleep for 1 minute now. Use this chance to " >/dev/tty1
- echo "reboot the device and flash the proper kernel now! " >/dev/tty1
- echo -e >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo -e "\033[31;1m * \033[0mW A R N I N G ! \033[31;1m* \033[0m" >/dev/tty1
- echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
- echo >/dev/tty1
- sleep 60
-fi
diff --git a/packages/vera-fonts/.mtn2git_empty b/packages/initscripts/initscripts-1.0/oplinux-uclibc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/vera-fonts/.mtn2git_empty
+++ b/packages/initscripts/initscripts-1.0/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/initscripts/initscripts-1.0/angstrom/checkroot.sh b/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh
index e5fc6ed8b5..e5fc6ed8b5 100755
--- a/packages/initscripts/initscripts-1.0/angstrom/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/oplinux-uclibc/checkroot.sh
diff --git a/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh b/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh
new file mode 100755
index 0000000000..33d7065275
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/oplinux-uclibc/mountall.sh
@@ -0,0 +1,45 @@
+#
+# mountall.sh Mount all filesystems.
+#
+# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels@cistron.nl
+#
+. /etc/default/rcS
+
+#
+# Mount local filesystems in /etc/fstab. For some reason, people
+# might want to mount "proc" several times, and mount -v complains
+# about this. So we mount "proc" filesystems without -v.
+#
+test "$VERBOSE" != no && echo "Mounting local filesystems..."
+mount -a 2>/dev/null
+
+#
+# We might have mounted something over /dev, see if /dev/initctl is there.
+#
+if test ! -p /dev/initctl
+then
+ rm -f /dev/initctl
+ mknod -m 600 /dev/initctl p
+fi
+kill -USR1 1
+
+#
+# Execute swapon command again, in case we want to swap to
+# a file on a now mounted filesystem.
+#
+doswap=yes
+case "`uname -r`" in
+ 2.[0123].*)
+ if grep -qs resync /proc/mdstat
+ then
+ doswap=no
+ fi
+ ;;
+esac
+if test $doswap = yes
+then
+ swapon -a 2> /dev/null
+fi
+
+: exit 0
+
diff --git a/packages/x11-apps/.mtn2git_empty b/packages/initscripts/initscripts-1.0/oplinux/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/x11-apps/.mtn2git_empty
+++ b/packages/initscripts/initscripts-1.0/oplinux/.mtn2git_empty
diff --git a/packages/initscripts/initscripts-1.0/oplinux/checkroot.sh b/packages/initscripts/initscripts-1.0/oplinux/checkroot.sh
new file mode 100755
index 0000000000..e5fc6ed8b5
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/oplinux/checkroot.sh
@@ -0,0 +1,201 @@
+#
+# checkroot.sh Check to root filesystem.
+#
+# Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels@cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
+# from this script *before anything else* with a timeout, like SCO does.
+#
+test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
+
+#
+# Ensure that bdflush (update) is running before any major I/O is
+# performed (the following fsck is a good example of such activity :).
+#
+test -x /sbin/update && update
+
+#
+# Read /etc/fstab.
+#
+exec 9>&0 </etc/fstab
+rootmode=rw
+rootopts=rw
+test "$ENABLE_ROOTFS_FSCK" = yes && rootcheck="yes" || rootcheck="no"
+swap_on_md=no
+devfs=
+while read fs mnt type opts dump pass junk
+do
+ case "$fs" in
+ ""|\#*)
+ continue;
+ ;;
+ /dev/md*)
+ # Swap on md device.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ /dev/*)
+ ;;
+ *)
+ # Might be a swapfile.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ esac
+
+ test "$type" = devfs && devfs="$fs"
+
+ # Currently we do not care about the other entries
+ if test "$mnt" = "/"
+ then
+ #echo "[$fs] [$mnt] [$type] [$opts] [$dump] [$pass] [$junk]"
+
+ rootopts="$opts"
+ roottype="$type"
+
+ #The "spinner" is broken on busybox sh
+ TERM=dumb
+
+ test "$pass" = 0 -o "$pass" = "" && rootcheck=no
+
+ # Enable fsck for ext2 and ext3 rootfs, disable for everything else
+ case "$type" in
+ ext2|ext3) rootcheck=yes;;
+ *) rootcheck=no;;
+ esac
+
+ if test "$rootcheck" = yes
+ then
+ if ! test -x "/sbin/fsck.${roottype}"
+ then
+ echo -e "\n * * * WARNING: /sbin/fsck.${roottype} is missing! * * *\n"
+ rootcheck=no
+ fi
+ fi
+
+ case "$opts" in
+ ro|ro,*|*,ro|*,ro,*)
+ rootmode=ro
+ ;;
+ esac
+ fi
+done
+exec 0>&9 9>&-
+
+#
+# Activate the swap device(s) in /etc/fstab. This needs to be done
+# before fsck, since fsck can be quite memory-hungry.
+#
+doswap=no
+test -d /proc/1 || mount -n /proc
+case "`uname -r`" in
+ 2.[0123].*)
+ if test $swap_on_md = yes && grep -qs resync /proc/mdstat
+ then
+ test "$VERBOSE" != no && echo "Not activating swap - RAID array resyncing"
+ else
+ doswap=yes
+ fi
+ ;;
+ *)
+ doswap=yes
+ ;;
+esac
+if test $doswap = yes
+then
+ test "$VERBOSE" != no && echo "Activating swap"
+ swapon -a 2> /dev/null
+fi
+
+#
+# Check the root filesystem.
+#
+if test -f /fastboot || test $rootcheck = no
+then
+ test $rootcheck = yes && echo "Fast boot, no filesystem check"
+else
+ #
+ # Ensure that root is quiescent and read-only before fsck'ing.
+ #
+ mount -n -o remount,ro /
+ if test $? = 0
+ then
+ if test -f /forcefsck
+ then
+ force="-f"
+ else
+ force=""
+ fi
+ if test "$FSCKFIX" = yes
+ then
+ fix="-y"
+ else
+ fix="-a"
+ fi
+ spinner="-C"
+ case "$TERM" in
+ dumb|network|unknown|"") spinner="" ;;
+ esac
+ test `uname -m` = s390 && spinner="" # This should go away
+ test "$VERBOSE" != no && echo "Checking root filesystem..."
+ fsck $spinner $force $fix /
+ #
+ # If there was a failure, drop into single-user mode.
+ #
+ # NOTE: "failure" is defined as exiting with a return code of
+ # 2 or larger. A return code of 1 indicates that filesystem
+ # errors were corrected but that the boot may proceed.
+ #
+ if test "$?" -gt 1
+ then
+ # Surprise! Re-directing from a HERE document (as in
+ # "cat << EOF") won't work, because the root is read-only.
+ echo
+ echo "fsck failed. Please repair manually and reboot. Please note"
+ echo "that the root filesystem is currently mounted read-only. To"
+ echo "remount it read-write:"
+ echo
+ echo " # mount -n -o remount,rw /"
+ echo
+ echo "CONTROL-D will exit from this shell and REBOOT the system."
+ echo
+ # Start a single user shell on the console
+ /sbin/sulogin $CONSOLE
+ reboot -f
+ fi
+ else
+ echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!"
+ echo
+ fi
+fi
+
+#
+# If the root filesystem was not marked as read-only in /etc/fstab,
+# remount the rootfs rw but do not try to change mtab because it
+# is on a ro fs until the remount succeeded. Then clean up old mtabs
+# and finally write the new mtab.
+# This part is only needed if the rootfs was mounted ro.
+#
+
+if [ $(grep "/dev/root" /proc/mounts | awk '{print $4}') = rw ]; then
+ exit 0
+fi
+
+
+echo "Remounting root file system..."
+mount -n -o remount,$rootmode /
+if test "$rootmode" = rw
+then
+ if test ! -L /etc/mtab
+ then
+ rm -f /etc/mtab~ /etc/nologin
+ : > /etc/mtab
+ fi
+ mount -f -o remount /
+ mount -f /proc
+ test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
+fi
+
+: exit 0
diff --git a/packages/initscripts/initscripts-1.0/ramdisk b/packages/initscripts/initscripts-1.0/ramdisk
index 03ac9bd05b..4dfe53cf61 100755
--- a/packages/initscripts/initscripts-1.0/ramdisk
+++ b/packages/initscripts/initscripts-1.0/ramdisk
@@ -22,6 +22,9 @@ else
RAM_MTDBLK=/dev/mtdblock$RAM_MTD_NO
fi
+if grep -q $RAM_MTDBLK /etc/mtab; then echo "Device $RAM_MTDBLK already mounted"; exit 0; fi
+if test ! -e $RAM_MTD; then echo >&2 "Mtdram device $RAM_MTD does not exist!"; exit 1; fi
+
RAM_MNTPT=/mnt/ram
RAM_MTD_SIZE_HEX=`cat /proc/mtd | grep mtdram | tail -n 1 | cut -d" " -f 2`
RAM_MTD_SIZE=`dc 0x$RAM_MTD_SIZE_HEX 1024 / p`
diff --git a/packages/initscripts/initscripts-1.0/volatiles b/packages/initscripts/initscripts-1.0/volatiles
index 4320485663..3c680b2643 100644
--- a/packages/initscripts/initscripts-1.0/volatiles
+++ b/packages/initscripts/initscripts-1.0/volatiles
@@ -21,18 +21,16 @@
# This explains the order of "link before object" as in the example above, where
# a link will be created at /var/test pointing to /tmp/testfile and due to this
# link the file defined as /var/test will actually be created as /tmp/testfile.
-d root root 0775 /var none
-d root root 0755 /var/backups none
-d root root 0755 /var/cache none
-d root root 0755 /var/lib none
-d root root 0755 /var/lib/ipkg none
-d root root 0755 /var/lib/misc none
-d root root 2775 /var/local none
-d root root 1777 /var/lock none
+d root root 0755 /var/volatile/cache none
+d root root 1777 /var/volatile/lock none
+d root root 0755 /var/volatile/log none
+d root root 0755 /var/volatile/run none
+d root root 1777 /var/volatile/tmp none
+l root root 0755 /var/cache /var/volatile/cache
+l root root 1777 /var/lock /var/volatile/lock
+l root root 0755 /var/log /var/volatile/log
+l root root 0755 /var/run /var/volatile/run
+l root root 1777 /var/tmp /var/volatile/tmp
d root root 0755 /var/lock/subsys none
-d root root 0755 /var/log none
-d root root 0755 /var/run none
-d root root 0755 /var/spool none
-d root root 1777 /var/tmp none
-f root root 0664 /var/run/utmp none
f root root 0664 /var/log/wtmp none
+f root root 0664 /var/run/utmp none
diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb
index 06a6017e15..39b1eee9c1 100644
--- a/packages/initscripts/initscripts_1.0.bb
+++ b/packages/initscripts/initscripts_1.0.bb
@@ -2,10 +2,9 @@ DESCRIPTION = "SysV init scripts"
SECTION = "base"
PRIORITY = "required"
DEPENDS = "makedevs"
-DEPENDS_openzaurus = "makedevs virtual/kernel"
RDEPENDS = "makedevs"
LICENSE = "GPL"
-PR = "r86"
+PR = "r96"
SRC_URI = "file://halt \
file://ramdisk \
@@ -34,19 +33,8 @@ SRC_URI = "file://halt \
file://save-rtc.sh"
SRC_URI_append_arm = " file://alignment.sh"
-SRC_URI_append_openzaurus = " file://checkversion"
-def read_kernel_version(d):
- import bb
- distro = bb.data.getVar('DISTRO', d, 1)
- filename = bb.data.getVar('STAGING_KERNEL_DIR', d, 1)
- if distro == "openzaurus":
- return file( filename + "/kernel-abiversion", "r" ).read().strip()
- else:
- return "not important"
KERNEL_VERSION = ""
-KERNEL_VERSION_openzaurus = "${@read_kernel_version(d)}"
-PACKAGE_ARCH_openzaurus = "${MACHINE_ARCH}"
do_install () {
#
@@ -90,13 +78,6 @@ do_install () {
#
# Install device dependent scripts
#
-
- if [ "${DISTRO}" = "openzaurus" ]; then
- cat ${WORKDIR}/checkversion | sed -e "s,VERSION,${KERNEL_VERSION}-${DISTRO_VERSION}," > ${D}${sysconfdir}/init.d/checkversion
- chmod 0755 ${D}${sysconfdir}/init.d/checkversion
- ln -sf ../init.d/checkversion ${D}${sysconfdir}/rcS.d/S01version
- fi
-
install -m 0755 ${WORKDIR}/banner ${D}${sysconfdir}/init.d/banner
install -m 0755 ${WORKDIR}/devices ${D}${sysconfdir}/init.d/devices
install -m 0755 ${WORKDIR}/umountfs ${D}${sysconfdir}/init.d/umountfs
diff --git a/packages/install/install-native_0.1.bb b/packages/install/install-native_0.1.bb
index 059342e920..70c027bfe1 100644
--- a/packages/install/install-native_0.1.bb
+++ b/packages/install/install-native_0.1.bb
@@ -9,6 +9,8 @@ PR = "r1"
SRC_URI = "file://install-sh"
+inherit native
+
PACKAGES = ""
S = "${WORKDIR}"
diff --git a/packages/intltool/intltool-native_0.30.bb b/packages/intltool/intltool-native_0.30.bb
index 7cf3c4e11f..05f7efdda4 100644
--- a/packages/intltool/intltool-native_0.30.bb
+++ b/packages/intltool/intltool-native_0.30.bb
@@ -1,4 +1,4 @@
-SECTION = "devel"
require intltool_${PV}.bb
+
inherit native
DEPENDS = "libxml-parser-perl-native"
diff --git a/packages/intltool/intltool-native_0.31.bb b/packages/intltool/intltool-native_0.31.bb
index 7cf3c4e11f..05f7efdda4 100644
--- a/packages/intltool/intltool-native_0.31.bb
+++ b/packages/intltool/intltool-native_0.31.bb
@@ -1,4 +1,4 @@
-SECTION = "devel"
require intltool_${PV}.bb
+
inherit native
DEPENDS = "libxml-parser-perl-native"
diff --git a/packages/intltool/intltool-native_0.34.bb b/packages/intltool/intltool-native_0.34.bb
index 7cf3c4e11f..05f7efdda4 100644
--- a/packages/intltool/intltool-native_0.34.bb
+++ b/packages/intltool/intltool-native_0.34.bb
@@ -1,4 +1,4 @@
-SECTION = "devel"
require intltool_${PV}.bb
+
inherit native
DEPENDS = "libxml-parser-perl-native"
diff --git a/packages/intltool/intltool-native_0.35.0.bb b/packages/intltool/intltool-native_0.35.0.bb
index fdd2652e11..bac5378113 100644
--- a/packages/intltool/intltool-native_0.35.0.bb
+++ b/packages/intltool/intltool-native_0.35.0.bb
@@ -1,7 +1,7 @@
-SECTION = "devel"
require intltool_${PV}.bb
+
inherit native
DEPENDS = "libxml-parser-perl-native"
-export PERL="/usr/bin/env perl"
+export PERL = "/usr/bin/env perl"
SRC_URI_append = " file://intltool-nowarn.patch;patch=1"
diff --git a/packages/intltool/intltool-native_0.35.5.bb b/packages/intltool/intltool-native_0.35.5.bb
new file mode 100644
index 0000000000..ba9b90c07a
--- /dev/null
+++ b/packages/intltool/intltool-native_0.35.5.bb
@@ -0,0 +1,9 @@
+require intltool_${PV}.bb
+
+inherit native
+DEPENDS = "libxml-parser-perl-native"
+
+export PERL = "/usr/bin/env perl"
+SRC_URI_append = " file://intltool-nowarn.patch;patch=1"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/intltool/intltool.inc b/packages/intltool/intltool.inc
new file mode 100644
index 0000000000..410a89cfa3
--- /dev/null
+++ b/packages/intltool/intltool.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Utility scripts for internationalizing XML"
+PRIORITY = "optional"
+SECTION = "devel"
+LICENSE = "GPL"
+
+URLV="${@'.'.join(bb.data.getVar('PV',d,1).split('.')[0:2])}"
+SRC_URI = "${GNOME_MIRROR}/intltool/${URLV}/intltool-${PV}.tar.bz2"
+S = "${WORKDIR}/intltool-${PV}"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/intltool/intltool_0.30.bb b/packages/intltool/intltool_0.30.bb
index f1660e7262..e48262574b 100644
--- a/packages/intltool/intltool_0.30.bb
+++ b/packages/intltool/intltool_0.30.bb
@@ -1,12 +1 @@
-SECTION = "devel"
-DESCRIPTION = "Utility scripts for internationalizing XML"
-LICENSE = "GPL"
-
-SRC_URI = "${GNOME_MIRROR}/intltool/${PV}/intltool-${PV}.tar.bz2"
-S = "${WORKDIR}/intltool-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage() {
- install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
-}
+require intltool.inc
diff --git a/packages/intltool/intltool_0.31.bb b/packages/intltool/intltool_0.31.bb
index f1660e7262..e48262574b 100644
--- a/packages/intltool/intltool_0.31.bb
+++ b/packages/intltool/intltool_0.31.bb
@@ -1,12 +1 @@
-SECTION = "devel"
-DESCRIPTION = "Utility scripts for internationalizing XML"
-LICENSE = "GPL"
-
-SRC_URI = "${GNOME_MIRROR}/intltool/${PV}/intltool-${PV}.tar.bz2"
-S = "${WORKDIR}/intltool-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage() {
- install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
-}
+require intltool.inc
diff --git a/packages/intltool/intltool_0.34.bb b/packages/intltool/intltool_0.34.bb
index f1660e7262..e48262574b 100644
--- a/packages/intltool/intltool_0.34.bb
+++ b/packages/intltool/intltool_0.34.bb
@@ -1,12 +1 @@
-SECTION = "devel"
-DESCRIPTION = "Utility scripts for internationalizing XML"
-LICENSE = "GPL"
-
-SRC_URI = "${GNOME_MIRROR}/intltool/${PV}/intltool-${PV}.tar.bz2"
-S = "${WORKDIR}/intltool-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage() {
- install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
-}
+require intltool.inc
diff --git a/packages/intltool/intltool_0.35.0.bb b/packages/intltool/intltool_0.35.0.bb
index de8705ccf0..6dea51a5fc 100644
--- a/packages/intltool/intltool_0.35.0.bb
+++ b/packages/intltool/intltool_0.35.0.bb
@@ -1,18 +1,8 @@
-SECTION = "devel"
-DESCRIPTION = "Utility scripts for internationalizing XML"
-LICENSE = "GPL"
+require intltool.inc
+
DEPENDS = "libxml-parser-perl-native"
#RDEPENDS = "libxml-parser-perl"
PR = "r1"
RRECOMMENDS = "perl-modules"
-
-SRC_URI = "${GNOME_MIRROR}/intltool/0.35/intltool-${PV}.tar.bz2"
-S = "${WORKDIR}/intltool-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage() {
- install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
-}
diff --git a/packages/intltool/intltool_0.35.2.bb b/packages/intltool/intltool_0.35.2.bb
index daba37a9da..6626ed54fe 100644
--- a/packages/intltool/intltool_0.35.2.bb
+++ b/packages/intltool/intltool_0.35.2.bb
@@ -1,18 +1,8 @@
-SECTION = "devel"
-DESCRIPTION = "Utility scripts for internationalizing XML"
-LICENSE = "GPL"
+require intltool.inc
+
DEPENDS = "libxml-parser-perl-native"
#RDEPENDS = "libxml-parser-perl"
PR = "r0"
RRECOMMENDS = "perl-modules"
-
-SRC_URI = "${GNOME_MIRROR}/intltool/0.35/intltool-${PV}.tar.bz2"
-S = "${WORKDIR}/intltool-${PV}"
-
-inherit autotools pkgconfig
-
-do_stage() {
- install -m 0644 intltool.m4 ${STAGING_DATADIR}/aclocal/
-}
diff --git a/packages/intltool/intltool_0.35.5.bb b/packages/intltool/intltool_0.35.5.bb
new file mode 100644
index 0000000000..e13e376f12
--- /dev/null
+++ b/packages/intltool/intltool_0.35.5.bb
@@ -0,0 +1,10 @@
+require intltool.inc
+
+DEPENDS = "libxml-parser-perl-native"
+#RDEPENDS = "libxml-parser-perl"
+
+PR = "r0"
+
+RRECOMMENDS = "perl-modules"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/ipaq-sleep/ipaq-sleep_0.7-9.bb b/packages/ipaq-sleep/ipaq-sleep_0.7-9.bb
deleted file mode 100644
index 7f1a54f4b1..0000000000
--- a/packages/ipaq-sleep/ipaq-sleep_0.7-9.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-
-LICENSE = "GPL"
-PR = "r3"
-
-inherit gpe pkgconfig
-
-DEPENDS = "apmd virtual/xserver xextensions virtual/libx11 libxau xscrnsaverh libxss"
-SECTION = "x11/base"
-RDEPENDS = "apm"
-
-DESCRIPTION = "Automatic sleep/suspend control daemon"
-
-SRC_URI = "${GPE_MIRROR}/${PN}-${PV}.tar.gz"
-
-#CPPFLAGS_append += " -DDEBUG"
-#CFLAGS_append += " -DDEBUG"
diff --git a/packages/ipaq-sleep/ipaq-sleep_0.8.bb b/packages/ipaq-sleep/ipaq-sleep_0.8.bb
deleted file mode 100644
index 184a042d61..0000000000
--- a/packages/ipaq-sleep/ipaq-sleep_0.8.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-
-LICENSE = "GPL"
-inherit gpe pkgconfig
-
-DEPENDS = "apmd virtual/xserver xextensions virtual/libx11 libxau xscrnsaverh libxss"
-SECTION = "x11/base"
-RDEPENDS = "apm"
-
-DESCRIPTION = "Automatic sleep/suspend control daemon"
-
diff --git a/packages/ipaq-sleep/ipaq-sleep_0.9.bb b/packages/ipaq-sleep/ipaq-sleep_0.9.bb
index 2855dcd965..d41cacdf58 100644
--- a/packages/ipaq-sleep/ipaq-sleep_0.9.bb
+++ b/packages/ipaq-sleep/ipaq-sleep_0.9.bb
@@ -2,7 +2,7 @@
LICENSE = "GPL"
inherit gpe pkgconfig
-DEPENDS = "apmd virtual/xserver xextensions virtual/libx11 libxau xscrnsaverh libxss"
+DEPENDS = "apmd virtual/xserver libxext virtual/libx11 libxau xscrnsaverh libxss"
SECTION = "x11/base"
RDEPENDS = "apm"
diff --git a/packages/iperf/iperf_2.0.2.bb b/packages/iperf/iperf_2.0.2.bb
index 357ac19dd0..c54bafe70d 100644
--- a/packages/iperf/iperf_2.0.2.bb
+++ b/packages/iperf/iperf_2.0.2.bb
@@ -13,6 +13,7 @@ S="${WORKDIR}/iperf-${PV}"
# --disable-threads is needed on epia/x86 with uclibc
do_configure() {
+ gnu-configize
oe_runconf --exec-prefix=${STAGING_DIR} --disable-threads
}
diff --git a/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch b/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch
deleted file mode 100644
index a9e6fc4d05..0000000000
--- a/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- ../../../work/i686-linux/ipkg-utils-native-1.6+cvs20050404-r6/ipkg-utils/ipkg.py 2005-01-08 19:08:52.000000000 +0100
-+++ ipkg-utils/ipkg.py 2006-06-29 12:52:58.466446000 +0200
-@@ -150,11 +150,11 @@
- stat = os.stat(fn)
- self.size = stat[ST_SIZE]
- self.filename = os.path.basename(fn)
-- ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
-+ sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
- if self.isdeb:
-- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - '*control'","r")
-+ control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
- else:
-- control = os.popen("tar xfzO "+fn+" '*control.tar.gz' | tar xfzO - '*control'","r")
-+ control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
- line = control.readline()
- while 1:
- if not line: break
diff --git a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
index 8079b46267..b63bc67af7 100644
--- a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
+++ b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
@@ -1,14 +1,14 @@
require ipkg-utils_${PV}.bb
-SRC_URI += "file://ipkg-utils-fix.patch;patch=1"
RDEPENDS = ""
-PR = "r8"
+PR = "r14"
inherit native
# Avoid circular dependencies from package_ipk.bbclass
PACKAGES = ""
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ipkg-utils"
+INSTALL += "arfile.py"
do_stage() {
for i in ${INSTALL}; do
diff --git a/packages/ipkg-utils/ipkg-utils/fields_tweaks.patch b/packages/ipkg-utils/ipkg-utils/fields_tweaks.patch
new file mode 100644
index 0000000000..2b08e47ad0
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils/fields_tweaks.patch
@@ -0,0 +1,70 @@
+---
+ Makefile | 2 ++
+ ipkg-list-fields | 13 +++++++++++++
+ ipkg.py | 8 +++++++-
+ 3 files changed, 22 insertions(+), 1 deletion(-)
+
+Index: ipkg-utils/Makefile
+===================================================================
+--- ipkg-utils.orig/Makefile 2007-06-13 22:45:47.000000000 +0100
++++ ipkg-utils/Makefile 2007-06-13 22:46:50.000000000 +0100
+@@ -15,6 +15,8 @@ install: ${UTILS}
+ python setup.py install
+ chmod agu+rx ipkg-make-index
+ cp -f ipkg-make-index $(PREFIX)/bin
++ chmod agu+rx ipkg-list-fields
++ cp -f ipkg-list-fields $(PREFIX)/bin
+
+ binary: build
+ mkdir -p ipkg-build-binary/usr/bin
+Index: ipkg-utils/ipkg-list-fields
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ ipkg-utils/ipkg-list-fields 2007-06-13 22:43:32.000000000 +0100
+@@ -0,0 +1,13 @@
++#!/usr/bin/python
++
++import sys, ipkg
++
++def usage():
++ sys.stderr.write("%s ipk\n" % (sys.argv[0],))
++ sys.exit(-1)
++
++if (len(sys.argv) < 2):
++ usage()
++
++print ipkg.Package(sys.argv[1])
++
+Index: ipkg-utils/ipkg.py
+===================================================================
+--- ipkg-utils.orig/ipkg.py 2007-06-13 22:44:50.000000000 +0100
++++ ipkg-utils/ipkg.py 2007-06-13 22:39:44.000000000 +0100
+@@ -139,6 +139,9 @@ class Package:
+ self.installed_size = None
+ self.filename = None
+ self.isdeb = 0
++ self.homepage = None
++ self.oe = None
++ self.priority = None
+ self.fn = fn
+
+ if fn:
+@@ -211,7 +214,7 @@ class Package:
+ elif self.__dict__.has_key(name):
+ self.__dict__[name] = value
+ else:
+- #print "Lost field %s, %s" % (name,value)
++ print "Lost field %s, %s" % (name,value)
+ pass
+
+ if line and line[0] == '\n':
+@@ -402,6 +405,9 @@ class Package:
+ if self.filename: out = out + "Filename: %s\n" % (self.filename)
+ if self.source: out = out + "Source: %s\n" % (self.source)
+ if self.description: out = out + "Description: %s\n" % (self.description)
++ if self.oe: out = out + "OE: %s\n" % (self.oe)
++ if self.homepage: out = out + "HomePage: %s\n" % (self.homepage)
++ if self.priority: out = out + "Priority: %s\n" % (self.priority)
+ out = out + "\n"
+
+ return out
diff --git a/packages/ipkg-utils/ipkg-utils/index_speedup.patch b/packages/ipkg-utils/ipkg-utils/index_speedup.patch
deleted file mode 100644
index bef28a9df1..0000000000
--- a/packages/ipkg-utils/ipkg-utils/index_speedup.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Index: ipkg-utils/ipkg-make-index
-===================================================================
---- ipkg-utils.orig/ipkg-make-index 2005-03-20 18:10:54.000000000 +0000
-+++ ipkg-utils/ipkg-make-index 2006-07-24 09:18:16.000000000 +0100
-@@ -37,6 +37,21 @@
- if os.path.exists(pkg_dir + "/" + filename + ".asc"):
- os.rename(pkg_dir + "/" + filename + ".asc", locale_dir + "/" + filename + ".asc")
-
-+def md5sum(file):
-+ import md5
-+ sum = md5.new()
-+ f = open(file, "r")
-+ while 1:
-+ data = f.read(1024)
-+ if not data: break
-+ sum.update(data)
-+ f.close()
-+ if sys.version[:1] > '2':
-+ # when using Python 2.0 or newer
-+ return sum.hexdigest()
-+ else:
-+ return string.join(map((lambda x:"%02x" % ord(x)),sum.digest()),'')
-+
- old_filename = None
- packages_filename = None
- filelist_filename = "Packages.filelist"
-@@ -87,7 +102,7 @@
- files.sort()
- for filename in files:
- basename = os.path.basename(filename)
-- if old_pkg_hash.has_key(basename):
-+ if old_pkg_hash.has_key(basename) and old_pkg_hash[basename].md5 == md5sum(filename) and old_pkg_hash[basename].size == os.stat(filename)[6]:
- if (verbose):
- sys.stderr.write("Found %s in Packages\n" % (filename,))
- pkg = old_pkg_hash[basename]
-Index: ipkg-utils/ipkg.py
-===================================================================
---- ipkg-utils.orig/ipkg.py 2005-01-20 23:09:10.000000000 +0000
-+++ ipkg-utils/ipkg.py 2006-07-24 09:16:44.000000000 +0100
-@@ -210,8 +210,13 @@
- value = value + '\n' + line
- if name == 'size':
- self.size = int(value)
-+ elif name == 'md5sum':
-+ self.md5 = value
- elif self.__dict__.has_key(name):
- self.__dict__[name] = value
-+ else:
-+ print "Lost field %s, %s" % (name,value)
-+
- if line[0] == '\n':
- return # consumes one blank line at end of package descriptoin
- else:
diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch b/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch
new file mode 100644
index 0000000000..9f9b9359ce
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils/ipkg-make-index-track-stamps.patch
@@ -0,0 +1,97 @@
+---
+ ipkg-make-index | 31 +++++++++++++++++++++++++++----
+ 1 file changed, 27 insertions(+), 4 deletions(-)
+
+Index: ipkg-utils/ipkg-make-index
+===================================================================
+--- ipkg-utils.orig/ipkg-make-index 2007-05-26 23:45:56.000000000 +0100
++++ ipkg-utils/ipkg-make-index 2007-05-26 23:47:25.000000000 +0100
+@@ -40,6 +40,7 @@ def to_locale(filename, locale):
+ old_filename = None
+ packages_filename = None
+ filelist_filename = "Packages.filelist"
++stamplist_filename = "Packages.stamps"
+ opt_s = 0
+ opt_m = 0
+ (opts, remaining_args) = getopt.getopt(sys.argv[1:], "hl:p:vsmr:L:")
+@@ -50,6 +51,7 @@ for (optkey, optval) in opts:
+ opt_s = 1
+ if optkey == '-p':
+ packages_filename = optval
++ stamplist_filename = optval + ".stamps"
+ if optkey == '-l':
+ filelist_filename = optval
+ if optkey == '-v':
+@@ -72,6 +74,7 @@ old_pkg_hash = {}
+ if packages_filename and not old_filename and os.path.exists(packages_filename):
+ old_filename = packages_filename
+
++pkgsStamps = {}
+ if old_filename:
+ if (verbose):
+ sys.stderr.write("Reading package list from " + old_filename + "\n")
+@@ -80,6 +83,14 @@ if old_filename:
+ for k in old_packages.packages.keys():
+ p = old_packages.packages[k]
+ old_pkg_hash[p.filename] = p
++ try:
++ f = open(stamplist_filename, "r")
++ for l in f:
++ l = l.strip()
++ s, f = l.split(" ", 1)
++ pkgsStamps[f] = int(s)
++ except IOError:
++ pass
+
+ if (verbose):
+ sys.stderr.write("Reading in all the package info from %s\n" % (pkg_dir, ))
+@@ -87,11 +98,17 @@ files=glob(pkg_dir + '/*.ipk') + glob(pk
+ files.sort()
+ for filename in files:
+ basename = os.path.basename(filename)
++ pkg = None
++ fnameStat = os.stat(filename)
+ if old_pkg_hash.has_key(basename):
+- if (verbose):
++ if pkgsStamps.has_key(basename) and fnameStat.st_mtime == pkgsStamps[basename]:
++ if (verbose):
+ sys.stderr.write("Found %s in Packages\n" % (filename,))
+- pkg = old_pkg_hash[basename]
+- else:
++ pkg = old_pkg_hash[basename]
++ else:
++ sys.stderr.write("Found %s in Packages, but mtime differs - re-reading\n" % (filename,))
++
++ if not pkg:
+ if (verbose):
+ sys.stderr.write("Reading info for package %s\n" % (filename,))
+ pkg = ipkg.Package(filename)
+@@ -101,6 +118,7 @@ for filename in files:
+ else:
+ old_filename = ""
+ s = packages.add_package(pkg)
++ pkgsStamps[basename] = fnameStat.st_mtime
+ if s == 0:
+ if old_filename:
+ # old package was displaced by newer
+@@ -114,6 +132,11 @@ for filename in files:
+ if opt_s:
+ print filename
+
++pkgsStampsFile = open(stamplist_filename, "w")
++for f in pkgsStamps.keys():
++ pkgsStampsFile.write("%d %s\n" % (pkgsStamps[f], f))
++pkgsStampsFile.close()
++
+ if opt_s:
+ sys.exit(0)
+
+@@ -154,7 +177,7 @@ if packages_filename:
+ os.rename(tmp_packages_filename, packages_filename)
+ os.rename(tmp_gzip_filename, gzip_filename)
+
+-if verbose:
++if verbose:
+ sys.stderr.write("Generate Packages.filelist file\n")
+ files = {}
+ names = packages.packages.keys()
diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch b/packages/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch
new file mode 100644
index 0000000000..00ee391405
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils/ipkg-py-sane-vercompare.patch
@@ -0,0 +1,51 @@
+Only in ipkg-utils: ipkg-py-sane-vercompare.patch
+diff -ur ipkg-utils.org/ipkg.py ipkg-utils/ipkg.py
+--- ipkg-utils.org/ipkg.py 2005-01-08 18:08:52.000000000 +0000
++++ ipkg-utils/ipkg.py 2007-04-04 11:52:46.000000000 +0000
+@@ -48,9 +48,9 @@
+ self.epoch = epoch
+ self.version = version
+
+- def _versioncompare(self, ref):
+- selfversion = self.version
+- refversion = ref.version
++ def _versioncompare(self, selfversion, refversion):
++ if not selfversion: selfversion = ""
++ if not refversion: refversion = ""
+ while 1:
+ ## first look for non-numeric version component
+ selfm = re.match('([^0-9]*)(.*)', selfversion)
+@@ -89,7 +89,18 @@
+ elif (self.epoch < ref.epoch):
+ return -1
+ else:
+- return self._versioncompare(ref)
++ self_ver_comps = re.match(r"(.+?)(-r.+)?$", self.version)
++ ref_ver_comps = re.match(r"(.+?)(-r.+)?$", ref.version)
++ #print (self_ver_comps.group(1), self_ver_comps.group(2))
++ #print (ref_ver_comps.group(1), ref_ver_comps.group(2))
++ r = self._versioncompare(self_ver_comps.group(1), ref_ver_comps.group(1))
++ if r == 0:
++ r = self._versioncompare(self_ver_comps.group(2), ref_ver_comps.group(2))
++ #print "compare: %s vs %s = %d" % (self, ref, r)
++ return r
++
++ def __str__(self):
++ return str(self.epoch) + ":" + self.version
+
+ def parse_version(versionstr):
+ epoch = 0
+@@ -445,6 +456,13 @@
+ return self.packages[key]
+
+ if __name__ == "__main__":
++
++ assert Version(0, "1.2.2-r1").compare(Version(0, "1.2.3-r0")) == -1
++ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2+cvs20070308-r0")) == -1
++ assert Version(0, "1.2.2+cvs20070308").compare(Version(0, "1.2.2-r0")) == 1
++ assert Version(0, "1.2.2-r0").compare(Version(0, "1.2.2-r0")) == 0
++ assert Version(0, "1.2.2-r5").compare(Version(0, "1.2.2-r0")) == 1
++
+ package = Package()
+
+ package.set_package("FooBar")
diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch b/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch
new file mode 100644
index 0000000000..25eb2cce6f
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils/ipkg-py-tarfile.patch
@@ -0,0 +1,309 @@
+---
+ arfile.py | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ ipkg.py | 106 ++++++++++++++++++++++++++---------------------------
+ setup.py | 2 -
+ 3 files changed, 177 insertions(+), 55 deletions(-)
+
+Index: ipkg-utils/arfile.py
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ ipkg-utils/arfile.py 2007-05-26 23:46:59.000000000 +0100
+@@ -0,0 +1,124 @@
++"""
++arfile - A module to parse GNU ar archives.
++
++Copyright (c) 2006-7 Paul Sokolovsky
++This file is released under the terms
++of GNU General Public License v2 or later.
++"""
++import sys
++import os
++import tarfile
++
++
++class FileSection:
++ "A class which allows to treat portion of file as separate file object."
++
++ def __init__(self, f, offset, size):
++ self.f = f
++ self.offset = offset
++ self.size = size
++ self.seek(0, 0)
++
++ def seek(self, offset, whence = 0):
++# print "seek(%x, %d)" % (offset, whence)
++ if whence == 0:
++ return self.f.seek(offset + self.offset, whence)
++ elif whence == 1:
++ return self.f.seek(offset, whence)
++ elif whence == 2:
++ return self.f.seek(self.offset + self.size + offset, 0)
++ else:
++ assert False
++
++ def tell(self):
++# print "tell()"
++ return self.f.tell() - self.offset
++
++ def read(self, size = -1):
++# print "read(%d)" % size
++ return self.f.read(size)
++
++class ArFile:
++
++ def __init__(self, f):
++ self.f = f
++ self.directory = {}
++ self.directoryRead = False
++
++ signature = self.f.readline()
++ assert signature == "!<arch>\n"
++ self.directoryOffset = self.f.tell()
++
++ def open(self, fname):
++ if self.directory.has_key(fname):
++ return FileSection(self.f, self.directory[fname][-1], int(self.directory[fname][5]))
++
++ if self.directoryRead:
++ raise IOError, (2, "AR member not found: " + fname)
++
++ f = self._scan(fname)
++ if f == None:
++ raise IOError, (2, "AR member not found: " + fname)
++ return f
++
++
++ def _scan(self, fname):
++ self.f.seek(self.directoryOffset, 0)
++
++ while True:
++ l = self.f.readline()
++ if not l:
++ self.directoryRead = True
++ return None
++
++ if l == "\n":
++ l = self.f.readline()
++ if not l: break
++ descriptor = l.split()
++# print descriptor
++ size = int(descriptor[5])
++ memberName = descriptor[0][:-1]
++ self.directory[memberName] = descriptor + [self.f.tell()]
++# print "read:", memberName
++ if memberName == fname:
++ # Record directory offset to start from next time
++ self.directoryOffset = self.f.tell() + size
++ return FileSection(self.f, self.f.tell(), size)
++
++ # Skip data and loop
++ data = self.f.seek(size, 1)
++# print hex(f.tell())
++
++
++if __name__ == "__main__":
++ if None:
++ f = open(sys.argv[1], "rb")
++
++ ar = ArFile(f)
++ tarStream = ar.open("data.tar.gz")
++ print "--------"
++ tarStream = ar.open("data.tar.gz")
++ print "--------"
++ tarStream = ar.open("control.tar.gz")
++ print "--------"
++ tarStream = ar.open("control.tar.gz2")
++
++ sys.exit(0)
++
++
++ dir = "."
++ if len(sys.argv) > 1:
++ dir = sys.argv[1]
++ for f in os.listdir(dir):
++ if not f.endswith(".ipk"): continue
++
++ print "=== %s ===" % f
++ f = open(dir + "/" + f, "rb")
++
++ ar = ArFile(f)
++ tarStream = ar.open("control.tar.gz")
++ tarf = tarfile.open("control.tar.gz", "r", tarStream)
++ #tarf.list()
++
++ f2 = tarf.extractfile("control")
++ print f2.read()
+Index: ipkg-utils/setup.py
+===================================================================
+--- ipkg-utils.orig/setup.py 2007-05-26 23:45:55.000000000 +0100
++++ ipkg-utils/setup.py 2007-05-26 23:46:59.000000000 +0100
+@@ -16,6 +16,6 @@ distutils.core.setup( name = 'ipkg-utils
+ platforms = 'POSIX',
+ keywords = 'ipkg familiar',
+ url = 'http://www.handhelds.org/sources.html/',
+- py_modules = [ 'ipkg' ],
++ py_modules = [ 'ipkg', 'arfile' ],
+ scripts = ['ipkg-compare-indexes', 'ipkg-make-index', 'ipkg-update-index', 'ipkg-build', 'ipkg-unbuild', 'ipkg-upload']
+ )
+Index: ipkg-utils/ipkg.py
+===================================================================
+--- ipkg-utils.orig/ipkg.py 2007-05-26 23:46:55.000000000 +0100
++++ ipkg-utils/ipkg.py 2007-05-26 23:45:20.000000000 +0100
+@@ -41,6 +41,8 @@ import re
+ import string
+ import commands
+ from stat import ST_SIZE
++import arfile
++import tarfile
+
+ class Version:
+ """A class for holding parsed package version information."""
+@@ -131,78 +133,61 @@ class Package:
+ self.section = None
+ self.filename_header = None
+ self.file_list = []
+- self.md5 = None
++ # md5 is lazy attribute, computed on demand
++ #self.md5 = None
+ self.size = None
+ self.installed_size = None
+ self.filename = None
+ self.isdeb = 0
++ self.fn = fn
+
+ if fn:
+ # see if it is deb format
+- f = open(fn, "r")
++ f = open(fn, "rb")
+ magic = f.read(4)
+- f.close()
++ f.seek(0, 0)
+ if (magic == "!<ar"):
+ self.isdeb = 1
+
+- # compute the MD5.
+- f = open(fn, "r")
+- sum = md5.new()
+- while 1:
+- data = f.read(1024)
+- if not data: break
+- sum.update(data)
+- f.close()
+- if sys.version[:1] > '2':
+- # when using Python 2.0 or newer
+- self.md5 = sum.hexdigest()
+- else:
+- self.md5 = string.join(map((lambda x:"%02x" % ord(x)),sum.digest()),'')
+- stat = os.stat(fn)
+- self.size = stat[ST_SIZE]
++
+ self.filename = os.path.basename(fn)
++ assert self.isdeb == 1, "Old ipk format (non-deb) is unsupported"
++
+ ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
+- if self.isdeb:
+- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
+- else:
+- control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
+- line = control.readline()
+- while 1:
+- if not line: break
+- line = string.rstrip(line)
+- lineparts = re.match(r'([\w-]*?):\s*(.*)', line)
+- if lineparts:
+- name = string.lower(lineparts.group(1))
+- value = lineparts.group(2)
+- while 1:
+- line = control.readline()
+- if not line: break
+- if line[0] != ' ': break
+- line = string.rstrip(line)
+- value = value + '\n' + line
+- # don't allow package to override its own filename
+- if name == "filename":
+- self.filename_header = value
+- else:
+- if self.__dict__.has_key(name):
+- self.__dict__[name] = value
+- else:
+- line = control.readline()
++
++ ar = arfile.ArFile(f)
++ tarStream = ar.open("control.tar.gz")
++ tarf = tarfile.open("control.tar.gz", "r", tarStream)
++
++ try:
++ control = tarf.extractfile("control")
++ except KeyError:
++ control = tarf.extractfile("./control")
++ self.read_control(control)
+ control.close()
+- if self.isdeb:
+- data = os.popen("ar p "+fn+" data.tar.gz | tar tfz -","r")
+- else:
+- data = os.popen("tar xfzO "+fn+" '*data.tar.gz' | tar tfz -","r")
+- while 1:
+- line = data.readline()
+- if not line: break
+- self.file_list.append(string.rstrip(line))
+- data.close()
+
+ self.scratch_dir = None
+ self.file_dir = None
+ self.meta_dir = None
+
++ def __getattr__(self, name):
++ if name == "md5":
++ self._computeFileMD5()
++ return self.md5
++ else:
++ raise AttributeError, name
++
++ def _computeFileMD5(self):
++ # compute the MD5.
++ f = open(self.fn, "rb")
++ sum = md5.new()
++ while 1:
++ data = f.read(1024)
++ if not data: break
++ sum.update(data)
++ f.close()
++ self.md5 = sum.hexdigest()
++
+ def read_control(self, control):
+ import os
+
+@@ -221,9 +203,15 @@ class Package:
+ value = value + '\n' + line
+ if name == 'size':
+ self.size = int(value)
++ elif name == 'md5sum':
++ self.md5 = value
+ elif self.__dict__.has_key(name):
+ self.__dict__[name] = value
+- if line[0] == '\n':
++ else:
++ #print "Lost field %s, %s" % (name,value)
++ pass
++
++ if line and line[0] == '\n':
+ return # consumes one blank line at end of package descriptoin
+ else:
+ line = control.readline()
+@@ -314,6 +302,16 @@ class Package:
+ return self.section
+
+ def get_file_list(self):
++ if not self.fn:
++ return []
++ f = open(self.fn, "rb")
++ ar = arfile.ArFile(f)
++ tarStream = ar.open("data.tar.gz")
++ tarf = tarfile.open("data.tar.gz", "r", tarStream)
++ self.file_list = tarf.getnames()
++ self.file_list = map(lambda a: ["./", ""][a.startswith("./")] + a, self.file_list)
++
++ f.close()
+ return self.file_list
+
+ def write_package(self, dirname):
diff --git a/packages/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch b/packages/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch
new file mode 100644
index 0000000000..b3e0d62cd9
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils/ipkg-utils-fix.patch
@@ -0,0 +1,20 @@
+---
+ ipkg.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: ipkg-utils/ipkg.py
+===================================================================
+--- ipkg-utils.orig/ipkg.py 2007-05-26 23:49:05.000000000 +0100
++++ ipkg-utils/ipkg.py 2007-05-26 23:49:23.000000000 +0100
+@@ -152,9 +152,9 @@ class Package:
+ self.filename = os.path.basename(fn)
+ ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
+ if self.isdeb:
+- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - '*control'","r")
++ control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
+ else:
+- control = os.popen("tar xfzO "+fn+" '*control.tar.gz' | tar xfzO - '*control'","r")
++ control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
+ line = control.readline()
+ while 1:
+ if not line: break
diff --git a/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb
index 48c7445828..51f5d7f835 100644
--- a/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb
+++ b/packages/ipkg-utils/ipkg-utils_1.6+cvs20050404.bb
@@ -5,10 +5,15 @@ LICENSE = "GPL"
CONFLICTS = "ipkg-link"
RDEPENDS = "python"
SRCDATE = "20050404"
-PR = "r12"
+PR = "r16"
SRC_URI = "${HANDHELDS_CVS};module=ipkg-utils \
- file://index_speedup.patch;patch=1"
+ file://ipkg-utils-fix.patch;patch=1 \
+ file://ipkg-py-sane-vercompare.patch;patch=1 \
+ file://ipkg-py-tarfile.patch;patch=1 \
+ file://ipkg-make-index-track-stamps.patch;patch=1 \
+ file://fields_tweaks.patch;patch=1 \
+ "
S = "${WORKDIR}/ipkg-utils"
@@ -26,9 +31,3 @@ do_install() {
done
}
-#FIXME: ipkg-utils is not allowed to have packages or else a ipkg-native -> ipkg-utils -> ipkg-utils
-# recursive dependency is triggered. This has been fixed by installing the ipkg-link script in
-# a dedicated package.
-#PACKAGES_prepend = "ipkg-link "
-#FILES_ipkg-link = "${bindir}/ipkg-link"
-
diff --git a/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch b/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch
new file mode 100644
index 0000000000..e7632b11d1
--- /dev/null
+++ b/packages/ipkg/files/1-pkg-parse--Optimize-inefficient-parsing.patch
@@ -0,0 +1,227 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1178334771 0
+# Node ID e4c99830ba0d55813e1774bd6d41039ca640d6a6
+# Parent d324eba24e79a0a86df7978f0511e4632a2732c7
+pkg_parse: Optimize inefficient parsing.
+
+Instead of expensively probing all fields in row, dispatch based on the
+first letter of the field. Tests show ~12 times reduction in number of calls
+to low-level parsing functions.
+
+diff -r d324eba24e79 -r e4c99830ba0d pkg_parse.c
+--- a/pkg_parse.c Fri May 04 23:22:33 2007 +0000
++++ b/pkg_parse.c Sat May 05 03:12:51 2007 +0000
+@@ -241,87 +241,116 @@ int pkg_parse_raw(pkg_t *pkg, char ***ra
+
+ for (lines = *raw; *lines; lines++) {
+ /* fprintf(stderr, "PARSING %s\n", *lines);*/
+- if(isGenericFieldType("Package:", *lines))
+- pkg->name = parseGenericFieldType("Package", *lines);
+- else if(isGenericFieldType("Architecture:", *lines))
+- pkg->architecture = parseGenericFieldType("Architecture", *lines);
+- else if(isGenericFieldType("Filename:", *lines))
+- pkg->filename = parseGenericFieldType("Filename", *lines);
+- else if(isGenericFieldType("Section:", *lines))
+- pkg->section = parseGenericFieldType("Section", *lines);
+- else if(isGenericFieldType("MD5sum:", *lines))
+- pkg->md5sum = parseGenericFieldType("MD5sum", *lines);
+- /* The old ipkg wrote out status files with the wrong case for MD5sum,
+- let's parse it either way */
+- else if(isGenericFieldType("MD5Sum:", *lines))
+- pkg->md5sum = parseGenericFieldType("MD5Sum", *lines);
+- else if(isGenericFieldType("Size:", *lines))
+- pkg->size = parseGenericFieldType("Size", *lines);
+- else if(isGenericFieldType("Source:", *lines))
+- pkg->source = parseGenericFieldType("Source", *lines);
+- else if(isGenericFieldType("Installed-Size:", *lines))
+- pkg->installed_size = parseGenericFieldType("Installed-Size", *lines);
+- else if(isGenericFieldType("Installed-Time:", *lines)) {
+- char *time_str = parseGenericFieldType("Installed-Time", *lines);
+- pkg->installed_time = strtoul(time_str, NULL, 0);
+- } else if(isGenericFieldType("Priority:", *lines))
+- pkg->priority = parseGenericFieldType("Priority", *lines);
+- else if(isGenericFieldType("Essential:", *lines)) {
+- char *essential_value;
+- essential_value = parseGenericFieldType("Essential", *lines);
+- if (strcmp(essential_value, "yes") == 0) {
+- pkg->essential = 1;
+- }
+- free(essential_value);
+- }
+- else if(isGenericFieldType("Status", *lines))
+- parseStatus(pkg, *lines);
+- else if(isGenericFieldType("Version", *lines))
+- parseVersion(pkg, *lines);
+- else if(isGenericFieldType("Maintainer", *lines))
+- pkg->maintainer = parseGenericFieldType("Maintainer", *lines);
+- else if(isGenericFieldType("Conffiles", *lines)){
+- parseConffiles(pkg, *lines);
+- reading_conffiles = 1;
+- }
+- else if(isGenericFieldType("Description", *lines)) {
+- pkg->description = parseGenericFieldType("Description", *lines);
+- reading_conffiles = 0;
+- reading_description = 1;
+- }
+-
+- else if(isGenericFieldType("Provides", *lines)){
++ switch (**lines) {
++ case 'P':
++ if(isGenericFieldType("Package:", *lines))
++ pkg->name = parseGenericFieldType("Package", *lines);
++ else if(isGenericFieldType("Priority:", *lines))
++ pkg->priority = parseGenericFieldType("Priority", *lines);
++ else if(isGenericFieldType("Provides", *lines)){
+ /* Here we add the internal_use to align the off by one problem between provides_str and provides */
+- provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new ipkg_internal_use_only */
+- if ( alterProvidesLine(*lines,provide) ){
+- return EINVAL;
+- }
+- pkg->provides_str = parseDependsString( provide, &pkg->provides_count);
++ provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new ipkg_internal_use_only */
++ if ( alterProvidesLine(*lines,provide) ){
++ return EINVAL;
++ }
++ pkg->provides_str = parseDependsString( provide, &pkg->provides_count);
+ /* Let's try to hack a bit here.
+ The idea is that if a package has no Provides, we would add one generic, to permit the check of dependencies
+ in alot of other places. We will remove it before writing down the status database */
+- pkg_false_provides=0;
+- free(provide);
+- }
+-
+- else if(isGenericFieldType("Depends", *lines))
+- pkg->depends_str = parseDependsString(*lines, &pkg->depends_count);
+- else if(isGenericFieldType("Pre-Depends", *lines))
+- pkg->pre_depends_str = parseDependsString(*lines, &pkg->pre_depends_count);
+- else if(isGenericFieldType("Recommends", *lines))
+- pkg->recommends_str = parseDependsString(*lines, &pkg->recommends_count);
+- else if(isGenericFieldType("Suggests", *lines))
+- pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count);
+- /* Abhaya: support for conflicts */
+- else if(isGenericFieldType("Conflicts", *lines))
+- pkg->conflicts_str = parseDependsString(*lines, &pkg->conflicts_count);
+- else if(isGenericFieldType("Replaces", *lines))
+- pkg->replaces_str = parseDependsString(*lines, &pkg->replaces_count);
+- else if(line_is_blank(*lines)) {
+- lines++;
+- break;
+- }
+- else if(**lines == ' '){
++ pkg_false_provides=0;
++ free(provide);
++ }
++ else if(isGenericFieldType("Pre-Depends", *lines))
++ pkg->pre_depends_str = parseDependsString(*lines, &pkg->pre_depends_count);
++ break;
++
++ case 'A':
++ if(isGenericFieldType("Architecture:", *lines))
++ pkg->architecture = parseGenericFieldType("Architecture", *lines);
++ break;
++
++ case 'F':
++ if(isGenericFieldType("Filename:", *lines))
++ pkg->filename = parseGenericFieldType("Filename", *lines);
++ break;
++
++ case 'S':
++ if(isGenericFieldType("Section:", *lines))
++ pkg->section = parseGenericFieldType("Section", *lines);
++ else if(isGenericFieldType("Size:", *lines))
++ pkg->size = parseGenericFieldType("Size", *lines);
++ else if(isGenericFieldType("Source:", *lines))
++ pkg->source = parseGenericFieldType("Source", *lines);
++ else if(isGenericFieldType("Status", *lines))
++ parseStatus(pkg, *lines);
++ else if(isGenericFieldType("Suggests", *lines))
++ pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count);
++ break;
++
++ case 'M':
++ if(isGenericFieldType("MD5sum:", *lines))
++ pkg->md5sum = parseGenericFieldType("MD5sum", *lines);
++ /* The old ipkg wrote out status files with the wrong case for MD5sum,
++ let's parse it either way */
++ else if(isGenericFieldType("MD5Sum:", *lines))
++ pkg->md5sum = parseGenericFieldType("MD5Sum", *lines);
++ else if(isGenericFieldType("Maintainer", *lines))
++ pkg->maintainer = parseGenericFieldType("Maintainer", *lines);
++ break;
++
++ case 'I':
++ if(isGenericFieldType("Installed-Size:", *lines))
++ pkg->installed_size = parseGenericFieldType("Installed-Size", *lines);
++ else if(isGenericFieldType("Installed-Time:", *lines)) {
++ char *time_str = parseGenericFieldType("Installed-Time", *lines);
++ pkg->installed_time = strtoul(time_str, NULL, 0);
++ }
++ break;
++
++ case 'E':
++ if(isGenericFieldType("Essential:", *lines)) {
++ char *essential_value;
++ essential_value = parseGenericFieldType("Essential", *lines);
++ if (strcmp(essential_value, "yes") == 0) {
++ pkg->essential = 1;
++ }
++ free(essential_value);
++ }
++ break;
++
++ case 'V':
++ if(isGenericFieldType("Version", *lines))
++ parseVersion(pkg, *lines);
++ break;
++
++ case 'C':
++ if(isGenericFieldType("Conffiles", *lines)){
++ parseConffiles(pkg, *lines);
++ reading_conffiles = 1;
++ }
++ else if(isGenericFieldType("Conflicts", *lines))
++ pkg->conflicts_str = parseDependsString(*lines, &pkg->conflicts_count);
++ break;
++
++ case 'D':
++ if(isGenericFieldType("Description", *lines)) {
++ pkg->description = parseGenericFieldType("Description", *lines);
++ reading_conffiles = 0;
++ reading_description = 1;
++ }
++ else if(isGenericFieldType("Depends", *lines))
++ pkg->depends_str = parseDependsString(*lines, &pkg->depends_count);
++ break;
++
++ case 'R':
++ if(isGenericFieldType("Recommends", *lines))
++ pkg->recommends_str = parseDependsString(*lines, &pkg->recommends_count);
++ else if(isGenericFieldType("Replaces", *lines))
++ pkg->replaces_str = parseDependsString(*lines, &pkg->replaces_count);
++
++ break;
++
++ case ' ':
+ if(reading_description) {
+ /* we already know it's not blank, so the rest of description */
+ pkg->description = realloc(pkg->description,
+@@ -332,8 +361,18 @@ int pkg_parse_raw(pkg_t *pkg, char ***ra
+ }
+ else if(reading_conffiles)
+ parseConffiles(pkg, *lines);
++
++ break;
++
++ default:
++ if(line_is_blank(*lines)) {
++ lines++;
++ goto out;
++ }
+ }
+ }
++out:;
++
+ *raw = lines;
+ /* If the ipk has not a Provides line, we insert our false line */
+ if ( pkg_false_provides==1)
diff --git a/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch b/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch
new file mode 100644
index 0000000000..3c5cac49dc
--- /dev/null
+++ b/packages/ipkg/files/2-pkg-vec--Optimize-gross-inefficiency.patch
@@ -0,0 +1,65 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1178812057 0
+# Node ID eff4450fdea2f8210a4fc927bd35ae2562d2eced
+# Parent e4c99830ba0d55813e1774bd6d41039ca640d6a6
+pkg_vec: Optimize gross inefficiency.
+
+This module tries to implement *unique* vector (without duplicating
+objects), and does this by iterating thru all already existing elements.
+Thus, complexity of adding N elements was O(N^2). However, there're no grave
+reasons to do uniqueness at all:
+1. First of all, if feeds are correct, there won't be duplicates.
+2. Then, even if there will be, there won't be serious problems like
+segfaults.
+3. Finally, for quite a few operations vectors is constructed from a
+hashtable, thus uniqueness is guaranteed (which reduces possible cases of
+non-uniqueness to values of Depends: and friends).
+
+All an all, remove dup check, and make ipkg work order of magnitude faster
+on a feed with few thousands of packages.
+
+diff -r e4c99830ba0d -r eff4450fdea2 pkg_vec.c
+--- a/pkg_vec.c Sat May 05 03:12:51 2007 +0000
++++ b/pkg_vec.c Thu May 10 15:47:37 2007 +0000
+@@ -104,6 +104,7 @@ void pkg_vec_insert(pkg_vec_t *vec, cons
+ int i;
+ int found = 0;
+
++#if 0
+ /* look for a duplicate pkg by name, version, and architecture */
+ for (i = 0; i < vec->len; i++)
+ if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0)
+@@ -112,6 +113,7 @@ void pkg_vec_insert(pkg_vec_t *vec, cons
+ found = 1;
+ break;
+ }
++#endif
+
+ /* we didn't find one, add it */
+ if(!found){
+@@ -191,6 +193,7 @@ void abstract_pkg_vec_insert(abstract_pk
+ {
+ int i;
+
++#if 0
+ /* look for a duplicate pkg by name */
+ for(i = 0; i < vec->len; i++)
+ if (strcmp(pkg->name, vec->pkgs[i]->name) == 0)
+@@ -198,12 +201,15 @@ void abstract_pkg_vec_insert(abstract_pk
+
+ /* we didn't find one, add it */
+ if(i == vec->len){
++#endif
+ vec->pkgs =
+ (abstract_pkg_t **)
+ realloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *));
+ vec->pkgs[vec->len] = pkg;
+ vec->len++;
+- }
++#if 0
++ }
++#endif
+ }
+
+ abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i)
diff --git a/packages/ipkg/files/is-processing.patch b/packages/ipkg/files/is-processing.patch
index 779933ba1c..45ede41668 100644
--- a/packages/ipkg/files/is-processing.patch
+++ b/packages/ipkg/files/is-processing.patch
@@ -1,6 +1,6 @@
diff -Nur ipkg-0.99.163.orig/ipkg_install.c ipkg-0.99.163/ipkg_install.c
--- ipkg-0.99.163.orig/ipkg_install.c 2006-03-30 21:50:24.000000000 +0800
-+++ ipkg-0.99.163/ipkg_install.c 2006-08-10 09:30:40.000000000 +0800
++++ ipkg-0.99.163/ipkg_install.c 2007-03-15 08:01:20.000000000 +0800
@@ -211,6 +211,7 @@
anyone ever wants to make a nice libipkg. */
@@ -9,9 +9,35 @@ diff -Nur ipkg-0.99.163.orig/ipkg_install.c ipkg-0.99.163/ipkg_install.c
return ipkg_install_pkg(conf, new,0);
}
+diff -Nur ipkg-0.99.163.orig/libbb/unzip.c ipkg-0.99.163/libbb/unzip.c
+--- ipkg-0.99.163.orig/libbb/unzip.c 2006-02-06 16:13:02.000000000 +0800
++++ ipkg-0.99.163/libbb/unzip.c 2007-03-15 08:03:45.000000000 +0800
+@@ -1028,13 +1028,15 @@
+ */
+ extern void gz_close(int gunzip_pid)
+ {
+- if (kill(gunzip_pid, SIGTERM) == -1) {
+- error_msg_and_die("*** Couldnt kill old gunzip process *** aborting");
+- }
++ if (kill(gunzip_pid, 0) == 0) {
++ if (kill(gunzip_pid, SIGTERM) == -1) {
++ error_msg_and_die("*** Couldnt kill old gunzip process *** aborting");
++ }
+
+- if (waitpid(gunzip_pid, NULL, 0) == -1) {
+- printf("Couldnt wait ?");
++ if (waitpid(gunzip_pid, NULL, 0) == -1) {
++ printf("Couldnt wait ?");
++ }
+ }
+- free(window);
+- free(crc_table);
++ free(window);
++ free(crc_table);
+ }
diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
--- ipkg-0.99.163.orig/pkg.c 2006-04-21 04:29:28.000000000 +0800
-+++ ipkg-0.99.163/pkg.c 2006-08-10 09:35:06.000000000 +0800
++++ ipkg-0.99.163/pkg.c 2007-03-20 15:11:32.845064480 +0800
@@ -33,6 +33,7 @@
#include "xsystem.h"
#include "ipkg_conf.h"
@@ -98,7 +124,32 @@ diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
}
} else if (strcasecmp(field, "MD5sum") == 0) {
/* MD5sum */
-@@ -1016,6 +1049,12 @@
+@@ -871,6 +904,24 @@
+ }
+ temp[0]='\0';
+ snprintf(temp, (strlen(pkg->size)+8), "Size: %s\n", pkg->size);
++ } else {
++ if ( pkg->local_filename ) {
++ struct stat buf;
++ memset(&buf, 0, sizeof(struct stat));
++
++ if ( stat(pkg->local_filename, &buf) == 0 ) {
++
++ sprintf_alloc(&pkg->size, "%d", buf.st_size);
++ temp = (char *)realloc(temp, strlen(pkg->size)+8);
++ if ( temp == NULL ){
++ fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
++ return NULL;
++ }
++ temp[0]='\0';
++ snprintf(temp, (strlen(pkg->size)+8), "Size: %s\n", pkg->size);
++ }
++ }
++
+ }
+ } else if (strcasecmp(field, "Source") == 0) {
+ /* Source */
+@@ -1016,6 +1067,12 @@
pkg_print_field(pkg, file, "Essential"); /* @@@@ should be removed in future release. */
pkg_print_field(pkg, file, "Architecture");
pkg_print_field(pkg, file, "Conffiles");
@@ -113,7 +164,7 @@ diff -Nur ipkg-0.99.163.orig/pkg.c ipkg-0.99.163/pkg.c
}
diff -Nur ipkg-0.99.163.orig/pkg.h ipkg-0.99.163/pkg.h
--- ipkg-0.99.163.orig/pkg.h 2006-05-30 16:31:08.000000000 +0800
-+++ ipkg-0.99.163/pkg.h 2006-08-10 09:19:14.000000000 +0800
++++ ipkg-0.99.163/pkg.h 2007-03-15 08:01:20.000000000 +0800
@@ -176,6 +176,10 @@
int arch_priority;
/* Adding this flag, to "force" ipkg to choose a "provided_by_hand" package, if there are multiple choice */
@@ -125,3 +176,4 @@ diff -Nur ipkg-0.99.163.orig/pkg.h ipkg-0.99.163/pkg.h
};
pkg_t *pkg_new(void);
+
diff --git a/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch b/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch
deleted file mode 100644
index 86af6b1d8e..0000000000
--- a/packages/ipkg/ipkg-0.99.153/fix-bug1393.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-patch added into upstream bugzilla:
-http://handhelds.org/~bugzilla/show_bug.cgi?id=1393
-Index: pkg_hash.c
-===================================================================
-RCS file: /cvs/familiar/dist/ipkg/C/pkg_hash.c,v
-retrieving revision 1.71
-diff -u -r1.71 pkg_hash.c
---- C/pkg_hash.c 29 Jul 2005 20:19:39 -0000 1.71
-+++ C/pkg_hash.c 2 Sep 2005 13:23:08 -0000
-@@ -216,7 +216,8 @@
- pkg_t *maybe = vec->pkgs[i];
- ipkg_message(conf, IPKG_DEBUG, " %s arch=%s arch_priority=%d \n",
- maybe->name, maybe->architecture, maybe->arch_priority);
-- if (maybe->arch_priority > 0) {
-+ if ((maybe->arch_priority > 0)
-+ && ((constraint_fcn == NULL) || constraint_fcn(maybe, cdata))) {
- max_count++;
- abstract_pkg_vec_insert(matching_apkgs, maybe->parent);
- pkg_vec_insert(matching_pkgs, maybe);
diff --git a/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch b/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch
deleted file mode 100644
index 6e79f79341..0000000000
--- a/packages/ipkg/ipkg-0.99.155/upgrade-message-garbage.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Prevent the output of spurious extra characters from
-the stack. This patch is in the manner of the rest of
-the code, there is no good reason for this.
-
---- C/ipkg_install.c 1970-01-01 00:00:00.000000000 +0000
-+++ C/ipkg_install.c 1970-01-01 00:00:00.000000000 +0000
-@@ -723,6 +723,7 @@ static int ipkg_install_check_downgrade(
- return rc;
- } else {
- char message_out[15] ;
-+ memset(message_out,'\x0',15);
- if ( message )
- strncpy( message_out,"Upgrading ",strlen("Upgrading ") );
- else
diff --git a/packages/ipkg/ipkg-collateral.bb b/packages/ipkg/ipkg-collateral.bb
index ec45a10e2d..244d29d08a 100644
--- a/packages/ipkg/ipkg-collateral.bb
+++ b/packages/ipkg/ipkg-collateral.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "ipkg configuration files"
SECTION = "base"
LICENSE = "MIT"
-PR = "r5"
-PACKAGE_ARCH = "all"
+PR = "r7"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
SRC_URI = " \
file://ipkg.conf.comments \
diff --git a/packages/xdpyinfo/.mtn2git_empty b/packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xdpyinfo/.mtn2git_empty
+++ b/packages/ipkg/ipkg-collateral/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest b/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest
new file mode 100644
index 0000000000..b786746b63
--- /dev/null
+++ b/packages/ipkg/ipkg-collateral/oplinux-uclibc/dest
@@ -0,0 +1,3 @@
+dest root /
+dest ram /tmp
+dest smbfs /tmp/smbfs
diff --git a/packages/xfce-mcs-manager/.mtn2git_empty b/packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfce-mcs-manager/.mtn2git_empty
+++ b/packages/ipkg/ipkg-collateral/oplinux/.mtn2git_empty
diff --git a/packages/ipkg/ipkg-collateral/oplinux/dest b/packages/ipkg/ipkg-collateral/oplinux/dest
new file mode 100644
index 0000000000..b786746b63
--- /dev/null
+++ b/packages/ipkg/ipkg-collateral/oplinux/dest
@@ -0,0 +1,3 @@
+dest root /
+dest ram /tmp
+dest smbfs /tmp/smbfs
diff --git a/packages/ipkg/ipkg-native_0.99.152.bb b/packages/ipkg/ipkg-native_0.99.152.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.152.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.153.bb b/packages/ipkg/ipkg-native_0.99.153.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.153.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.154.bb b/packages/ipkg/ipkg-native_0.99.154.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.154.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.159.bb b/packages/ipkg/ipkg-native_0.99.159.bb
deleted file mode 100644
index f2deb33fba..0000000000
--- a/packages/ipkg/ipkg-native_0.99.159.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg_${PV}.bb
-require ipkg-native.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb
index bf060f89fe..13609c9037 100644
--- a/packages/ipkg/ipkg-native_0.99.163.bb
+++ b/packages/ipkg/ipkg-native_0.99.163.bb
@@ -2,9 +2,13 @@ S = "${WORKDIR}/ipkg-${PV}"
#require ipkg_${PV}.bb
require ipkg-native.inc
-PR = "r1"
+PR = "r2"
inherit autotools pkgconfig native
-SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz"
+SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \
+ file://is-processing.patch;patch=1 \
+ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \
+ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \
+ "
diff --git a/packages/ipkg/ipkg_0.99.152.bb b/packages/ipkg/ipkg_0.99.152.bb
deleted file mode 100644
index 0d10a29c3f..0000000000
--- a/packages/ipkg/ipkg_0.99.152.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r3"
diff --git a/packages/ipkg/ipkg_0.99.153.bb b/packages/ipkg/ipkg_0.99.153.bb
deleted file mode 100644
index 5852b6afc4..0000000000
--- a/packages/ipkg/ipkg_0.99.153.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DEFAULT_PREFERENCE = "-1"
-
-require ipkg.inc
-
-PR = "r4"
-
-SRC_URI += "file://fix-bug1393.patch;patch=1"
-
diff --git a/packages/ipkg/ipkg_0.99.154.bb b/packages/ipkg/ipkg_0.99.154.bb
deleted file mode 100644
index 20a1996658..0000000000
--- a/packages/ipkg/ipkg_0.99.154.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r4"
diff --git a/packages/ipkg/ipkg_0.99.155.bb b/packages/ipkg/ipkg_0.99.155.bb
deleted file mode 100644
index e5ff6dc4c2..0000000000
--- a/packages/ipkg/ipkg_0.99.155.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require ipkg.inc
-PR = "r2"
-SRC_URI += "file://upgrade-message-garbage.patch;patch=1"
diff --git a/packages/ipkg/ipkg_0.99.159.bb b/packages/ipkg/ipkg_0.99.159.bb
deleted file mode 100644
index 8455050622..0000000000
--- a/packages/ipkg/ipkg_0.99.159.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require ipkg.inc
-PR = "r1"
diff --git a/packages/ipkg/ipkg_0.99.163.bb b/packages/ipkg/ipkg_0.99.163.bb
index de3562d603..c5972a7c53 100644
--- a/packages/ipkg/ipkg_0.99.163.bb
+++ b/packages/ipkg/ipkg_0.99.163.bb
@@ -1,11 +1,14 @@
include ipkg.inc
-PR = "r2"
+PR = "r4"
S = "${WORKDIR}/ipkg-${PV}"
SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \
file://terse.patch;patch=1 \
- file://is-processing.patch;patch=1"
+ file://is-processing.patch;patch=1 \
+ file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \
+ file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \
+ "
do_stage() {
oe_libinstall -so libipkg ${STAGING_LIBDIR}
diff --git a/packages/xfce-mcs-plugins/.mtn2git_empty b/packages/iproute2/iproute2-2.6.20/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfce-mcs-plugins/.mtn2git_empty
+++ b/packages/iproute2/iproute2-2.6.20/.mtn2git_empty
diff --git a/packages/iproute2/iproute2-2.6.20/ip6tunnel.patch b/packages/iproute2/iproute2-2.6.20/ip6tunnel.patch
new file mode 100644
index 0000000000..371de01c16
--- /dev/null
+++ b/packages/iproute2/iproute2-2.6.20/ip6tunnel.patch
@@ -0,0 +1,10 @@
+--- iproute-2.6.20-070313/ip/ip6tunnel.c 2007/03/17 03:44:27 1.1
++++ iproute-2.6.20-070313/ip/ip6tunnel.c 2007/03/17 03:43:14
+@@ -33,6 +33,7 @@
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
+ #include <sys/ioctl.h>
++#include <linux/types.h>
+ #include <linux/ip.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
diff --git a/packages/iproute2/iproute2-2.6.20/man-pages-fix.patch b/packages/iproute2/iproute2-2.6.20/man-pages-fix.patch
new file mode 100644
index 0000000000..924d0ed4dc
--- /dev/null
+++ b/packages/iproute2/iproute2-2.6.20/man-pages-fix.patch
@@ -0,0 +1,13 @@
+--- iproute-2.6.20-070313/Makefile 2007/03/17 04:24:45 1.1
++++ iproute-2.6.20-070313/Makefile 2007/03/17 04:27:39
+@@ -52,8 +52,8 @@
+ install -m 0644 $(shell find etc/iproute2 -maxdepth 1 -type f) $(DESTDIR)$(CONFDIR)
+ install -m 0755 -d $(DESTDIR)$(MANDIR)/man8
+ install -m 0644 $(shell find man/man8 -maxdepth 1 -type f) $(DESTDIR)$(MANDIR)/man8
+- ln -sf tc-pbfifo.8 $(DESTDIR)$(MANDIR)/man8/tc-bfifo.8
+- ln -sf tc-pbfifo.8 $(DESTDIR)$(MANDIR)/man8/tc-pfifo.8
++ ln -sf tc-bfifo.8 $(DESTDIR)$(MANDIR)/man8/tc-pfifo.8
++ ln -sf tc-bfifo.8 $(DESTDIR)$(MANDIR)/man8/tc-pbfifo.8
+ install -m 0755 -d $(DESTDIR)$(MANDIR)/man3
+ install -m 0644 $(shell find man/man3 -maxdepth 1 -type f) $(DESTDIR)$(MANDIR)/man3
+
diff --git a/packages/iproute2/iproute2-2.6.20/new-flex-fix.patch b/packages/iproute2/iproute2-2.6.20/new-flex-fix.patch
new file mode 100644
index 0000000000..af7272163e
--- /dev/null
+++ b/packages/iproute2/iproute2-2.6.20/new-flex-fix.patch
@@ -0,0 +1,83 @@
+The tc command was failing to build due to flex errors. These errors are
+caused by an incompatible change to flex in recent versions, including the
+version shipped with OE.
+
+This fix is as per the one used by opensure:
+
+ http://lists.opensuse.org/opensuse-commit/2006-04/msg00090.html
+
+and simple renames str to prevent it conflicting.
+
+--- iproute-2.6.20-070313/tc/emp_ematch.l 2007/03/17 02:52:20 1.1
++++ iproute-2.6.20-070313/tc/emp_ematch.l 2007/03/17 02:54:01
+@@ -63,7 +63,7 @@
+
+ %}
+
+-%x str
++%x STR
+
+ %option 8bit stack warn noyywrap prefix="ematch_"
+ %%
+@@ -78,17 +78,17 @@
+ }
+ strbuf_index = 0;
+
+- BEGIN(str);
++ BEGIN(STR);
+ }
+
+-<str>\" {
++<STR>\" {
+ BEGIN(INITIAL);
+ yylval.b = bstr_new(strbuf, strbuf_index);
+ yylval.b->quoted = 1;
+ return ATTRIBUTE;
+ }
+
+-<str>\\[0-7]{1,3} { /* octal escape sequence */
++<STR>\\[0-7]{1,3} { /* octal escape sequence */
+ int res;
+
+ sscanf(yytext + 1, "%o", &res);
+@@ -100,12 +100,12 @@
+ strbuf_append_char((unsigned char) res);
+ }
+
+-<str>\\[0-9]+ { /* catch wrong octal escape seq. */
++<STR>\\[0-9]+ { /* catch wrong octal escape seq. */
+ fprintf(stderr, "error: invalid octale escape sequence\n");
+ return ERROR;
+ }
+
+-<str>\\x[0-9a-fA-F]{1,2} {
++<STR>\\x[0-9a-fA-F]{1,2} {
+ int res;
+
+ sscanf(yytext + 2, "%x", &res);
+@@ -118,16 +118,16 @@
+ strbuf_append_char((unsigned char) res);
+ }
+
+-<str>\\n strbuf_append_char('\n');
+-<str>\\r strbuf_append_char('\r');
+-<str>\\t strbuf_append_char('\t');
+-<str>\\v strbuf_append_char('\v');
+-<str>\\b strbuf_append_char('\b');
+-<str>\\f strbuf_append_char('\f');
+-<str>\\a strbuf_append_char('\a');
++<STR>\\n strbuf_append_char('\n');
++<STR>\\r strbuf_append_char('\r');
++<STR>\\t strbuf_append_char('\t');
++<STR>\\v strbuf_append_char('\v');
++<STR>\\b strbuf_append_char('\b');
++<STR>\\f strbuf_append_char('\f');
++<STR>\\a strbuf_append_char('\a');
+
+-<str>\\(.|\n) strbuf_append_char(yytext[1]);
+-<str>[^\\\n\"]+ strbuf_append_charp(yytext);
++<STR>\\(.|\n) strbuf_append_char(yytext[1]);
++<STR>[^\\\n\"]+ strbuf_append_charp(yytext);
+
+ [aA][nN][dD] return AND;
+ [oO][rR] return OR;
diff --git a/packages/iproute2/iproute2-2.6.20/no-strip.patch b/packages/iproute2/iproute2-2.6.20/no-strip.patch
new file mode 100644
index 0000000000..6490dadb07
--- /dev/null
+++ b/packages/iproute2/iproute2-2.6.20/no-strip.patch
@@ -0,0 +1,36 @@
+--- iproute-2.6.20-070313/ip/Makefile 2007/03/17 05:17:30 1.1
++++ iproute-2.6.20-070313/ip/Makefile 2007/03/17 05:17:37
+@@ -16,7 +16,7 @@
+ rtmon: $(RTMONOBJ) $(LIBNETLINK)
+
+ install: all
+- install -m 0755 -s $(TARGETS) $(DESTDIR)$(SBINDIR)
++ install -m 0755 $(TARGETS) $(DESTDIR)$(SBINDIR)
+ install -m 0755 $(SCRIPTS) $(DESTDIR)$(SBINDIR)
+
+ clean:
+--- iproute-2.6.20-070313/misc/Makefile 2007/03/17 05:18:20 1.1
++++ iproute-2.6.20-070313/misc/Makefile 2007/03/17 05:18:26
+@@ -27,7 +27,7 @@
+ lnstat: $(LNSTATOBJ)
+
+ install: all
+- install -m 0755 -s $(TARGETS) $(DESTDIR)$(SBINDIR)
++ install -m 0755 $(TARGETS) $(DESTDIR)$(SBINDIR)
+ ln -sf lnstat $(DESTDIR)$(SBINDIR)/rtstat
+ ln -sf lnstat $(DESTDIR)$(SBINDIR)/ctstat
+
+--- iproute-2.6.20-070313/tc/Makefile 2007/03/17 05:17:42 1.1
++++ iproute-2.6.20-070313/tc/Makefile 2007/03/17 05:17:54
+@@ -70,9 +70,9 @@
+
+ install: all
+ mkdir -p $(DESTDIR)/usr/lib/tc
+- install -m 0755 -s tc $(DESTDIR)$(SBINDIR)
++ install -m 0755 tc $(DESTDIR)$(SBINDIR)
+ for i in $(TCSO); \
+- do install -m 755 -s $$i $(DESTDIR)/usr/lib/tc; \
++ do install -m 755 $$i $(DESTDIR)/usr/lib/tc; \
+ done
+
+ clean:
diff --git a/packages/iproute2/iproute2.inc b/packages/iproute2/iproute2.inc
index 006b27b60f..c417280cd6 100644
--- a/packages/iproute2/iproute2.inc
+++ b/packages/iproute2/iproute2.inc
@@ -3,16 +3,32 @@ SECTION = "base"
LICENSE = "GPL"
DEPENDS = "flex-native bison-native"
-# Set DATE in the .bb file
+# This changed from iproute2 to iproute with version 2.6.20, so set to
+# iproute in the recipe for 2.6.20 and newer versions.
+DIRNAME ?= "${PN}"
+
+# Set the DATE in the .bb file
SRC_URI = "http://developer.osdl.org/dev/iproute2/download/${P}-${DATE}.tar.gz"
-S = "${WORKDIR}/${P}-${DATE}"
+S = "${WORKDIR}/${DIRNAME}-${PV}-${DATE}"
+
+inherit update-alternatives
-EXTRA_OEMAKE = "CC='${CC}' KERNEL_INCLUDE=${STAGING_KERNEL_DIR}/include DOCDIR=${docdir}/iproute2 SUBDIRS='lib tc ip' SBINDIR=/sbin"
+EXTRA_OEMAKE = "CC='${CC}' \
+ KERNEL_INCLUDE=${STAGING_KERNEL_DIR}/include \
+ DOCDIR=${docdir}/iproute2 \
+ SUBDIRS='lib tc ip' \
+ SBINDIR=${base_sbindir}"
do_install () {
oe_runmake DESTDIR=${D} install
+ mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
}
FILES_${PN} += "/usr/lib/tc/*"
FILES_${PN}-dbg += "/usr/lib/tc/.debug"
+
+ALTERNATIVE_NAME = "ip"
+ALTERNATIVE_PATH = "${base_sbindir}/ip.iproute2"
+ALTERNATIVE_LINK = "${base_bindir}/ip"
+ALTERNATIVE_PRIORITY = "100"
diff --git a/packages/iproute2/iproute2_2.6.16.bb b/packages/iproute2/iproute2_2.6.16.bb
index ddd5ef71dd..9d261927f6 100644
--- a/packages/iproute2/iproute2_2.6.16.bb
+++ b/packages/iproute2/iproute2_2.6.16.bb
@@ -1,7 +1,7 @@
-PR = "r1"
+PR = "r3"
-SRC_URI += "file://iproute2-2.6.15_no_strip.diff;patch=1;pnum=0 \
- file://new-flex-fix.patch;patch=1"
+SRC_URI_append = " file://iproute2-2.6.15_no_strip.diff;patch=1;pnum=0 \
+ file://new-flex-fix.patch;patch=1"
require iproute2.inc
diff --git a/packages/iproute2/iproute2_2.6.18.bb b/packages/iproute2/iproute2_2.6.18.bb
index ee3ff29550..ad62b5344a 100644
--- a/packages/iproute2/iproute2_2.6.18.bb
+++ b/packages/iproute2/iproute2_2.6.18.bb
@@ -1,7 +1,7 @@
-PR = "r0"
+PR = "r2"
-SRC_URI += "file://iproute2-2.6.15_no_strip.diff;patch=1;pnum=0 \
- file://new-flex-fix.patch;patch=1"
+SRC_URI_append = " file://iproute2-2.6.15_no_strip.diff;patch=1;pnum=0 \
+ file://new-flex-fix.patch;patch=1"
require iproute2.inc
diff --git a/packages/iproute2/iproute2_2.6.20.bb b/packages/iproute2/iproute2_2.6.20.bb
new file mode 100644
index 0000000000..5efdf98f2d
--- /dev/null
+++ b/packages/iproute2/iproute2_2.6.20.bb
@@ -0,0 +1,11 @@
+PR = "r2"
+
+SRC_URI_append = " file://new-flex-fix.patch;patch=1 \
+ file://ip6tunnel.patch;patch=1 \
+ file://man-pages-fix.patch;patch=1 \
+ file://no-strip.patch;patch=1"
+
+require iproute2.inc
+
+DIRNAME = "iproute"
+DATE = "070313"
diff --git a/packages/ipsec-tools/files/cross.patch b/packages/ipsec-tools/files/cross.patch
deleted file mode 100644
index a0e7b1da27..0000000000
--- a/packages/ipsec-tools/files/cross.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-Index: ipsec-tools-0.5-rc1/acracoon.m4
-===================================================================
---- ipsec-tools-0.5-rc1.orig/acracoon.m4 2004-09-21 10:35:23.000000000 -0400
-+++ ipsec-tools-0.5-rc1/acracoon.m4 2005-02-03 13:56:02.144689256 -0500
-@@ -92,6 +92,8 @@
-
- AC_DEFUN([RACOON_CHECK_BUGGY_GETADDRINFO], [
- AC_MSG_CHECKING(getaddrinfo bug)
-+ AC_CACHE_CHECK([for a buggy getaddrinfo],
-+ racoon_cv_bug_getaddrinfo,[
- saved_CFLAGS=$CFLAGS
- CFLAGS="-Wall -O2"
- AC_TRY_RUN([
-@@ -182,12 +184,10 @@
- exit(1);
- }
- ],
-- AC_MSG_RESULT(good)
-- buggygetaddrinfo=no,
-- AC_MSG_RESULT(buggy)
-- buggygetaddrinfo=yes,
-- AC_MSG_RESULT(buggy)
-- buggygetaddrinfo=yes)
-+ racoon_cv_bug_getaddrinfo=no,
-+ racoon_cv_bug_getaddrinfo=yes,
-+ racoon_cv_bug_getaddrinfo=yes)
- CFLAGS=$saved_CFLAGS
- unset saved_CFLAGS
-+ ])
- ])
-Index: ipsec-tools-0.5-rc1/configure.ac
-===================================================================
---- ipsec-tools-0.5-rc1.orig/configure.ac 2005-01-04 09:20:57.000000000 -0500
-+++ ipsec-tools-0.5-rc1/configure.ac 2005-02-03 14:02:34.935975904 -0500
-@@ -16,6 +16,9 @@
- AC_PROG_LIBTOOL
- AC_PROG_YACC
- AM_PROG_LEX
-+ac_save_LIBS="$LIBS"
-+AC_CHECK_LIB(fl, yywrap, LEXLIB="-lfl")
-+LIBS="$ac_save_LIBS"
- AC_SUBST(LEXLIB)
- AC_PROG_EGREP
-
-@@ -57,10 +60,12 @@
- AC_SUBST(CONFIGURE_AMFLAGS) ],
- [ KERNEL_INCLUDE="/lib/modules/`uname -r`/build/include" ])
-
-+ if test "$cross_compiling" = no; then
- AC_CHECK_FILE($KERNEL_INCLUDE/linux/pfkeyv2.h, ,
- [ AC_CHECK_FILE(/usr/src/linux/include/linux/pfkeyv2.h,
- KERNEL_INCLUDE=/usr/src/linux/include ,
- [ AC_MSG_ERROR([Unable to find linux-2.6 kernel headers. Aborting.]) ] ) ] )
-+ fi
- AC_SUBST(KERNEL_INCLUDE)
- # We need the configure script to run with correct kernel headers.
- # However we don't want to point to kernel source tree in compile time,
-@@ -176,7 +181,7 @@
- AC_MSG_CHECKING(sha2 support)
- AC_DEFINE([WITH_SHA2], [], [SHA2 support])
- AC_CHECK_HEADER(openssl/sha2.h, [], [
-- CPPFLAGS_ADD="$CPPFLAGS_ADD -I./\${top_srcdir}/src/racoon/missing"
-+ CPPFLAGS_ADD="$CPPFLAGS_ADD -I\${top_srcdir}/src/racoon/missing"
- AC_LIBOBJ([sha2])
- CRYPTOBJS="$CRYPTOBJS sha2.o"])
- AC_SUBST(CRYPTOBJS)
-@@ -339,7 +344,7 @@
- fi
-
- RACOON_CHECK_BUGGY_GETADDRINFO
--if test "$buggygetaddrinfo" = "yes"; then
-+if test "$racoon_cv_bug_getaddrinfo" = "yes"; then
- AC_MSG_ERROR([Broken getaddrinfo() is no longer supported. Aborting.])
- fi
-
diff --git a/packages/ipsec-tools/files/gcc-4.2.patch b/packages/ipsec-tools/files/gcc-4.2.patch
new file mode 100644
index 0000000000..573f242e65
--- /dev/null
+++ b/packages/ipsec-tools/files/gcc-4.2.patch
@@ -0,0 +1,47 @@
+Index: ipsec-tools-0.6.7/src/racoon/var.h
+===================================================================
+--- ipsec-tools-0.6.7.orig/src/racoon/var.h 2004-11-21 03:16:59.000000000 +1100
++++ ipsec-tools-0.6.7/src/racoon/var.h 2007-06-06 12:21:41.000000000 +1000
+@@ -76,9 +76,9 @@
+ do { \
+ if (getnameinfo((x), sysdep_sa_len(x), (y), sizeof(y), (z), sizeof(z), \
+ NIFLAGS) != 0) { \
+- if (y) \
++ if (y != NULL) \
+ strncpy((y), "(invalid)", sizeof(y)); \
+- if (z) \
++ if (z != NULL) \
+ strncpy((z), "(invalid)", sizeof(z)); \
+ } \
+ } while (0);
+@@ -87,7 +87,7 @@
+ do { \
+ if (getnameinfo((x), sysdep_sa_len(x), (y), sizeof(y), NULL, 0, \
+ NIFLAGS) != 0) { \
+- if (y) \
++ if (y != NULL) \
+ strncpy((y), "(invalid)", sizeof(y)); \
+ } \
+ } while (0);
+Index: ipsec-tools-0.6.7/src/racoon/eaytest.c
+===================================================================
+--- ipsec-tools-0.6.7.orig/src/racoon/eaytest.c 2005-06-29 08:38:02.000000000 +1000
++++ ipsec-tools-0.6.7/src/racoon/eaytest.c 2007-06-06 12:22:59.000000000 +1000
+@@ -311,7 +311,7 @@
+
+ printf("exact match: succeed.\n");
+
+- if (dnstr_w1) {
++ if (dnstr_w1 != NULL) {
+ asn1dn = eay_str2asn1dn(dnstr_w1, strlen(dnstr_w1));
+ if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
+ errx(1, "asn1dn length wrong for wildcard 1\n");
+@@ -321,7 +321,7 @@
+ printf("wildcard 1 match: succeed.\n");
+ }
+
+- if (dnstr_w1) {
++ if (dnstr_w1 != NULL) {
+ asn1dn = eay_str2asn1dn(dnstr_w2, strlen(dnstr_w2));
+ if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
+ errx(1, "asn1dn length wrong for wildcard 2\n");
diff --git a/packages/ipsec-tools/ipsec-tools-0.6.6/racoon-search-missing.patch b/packages/ipsec-tools/files/racoon-search-missing.patch
index eebcb87017..eebcb87017 100644
--- a/packages/ipsec-tools/ipsec-tools-0.6.6/racoon-search-missing.patch
+++ b/packages/ipsec-tools/files/racoon-search-missing.patch
diff --git a/packages/ipsec-tools/ipsec-tools.inc b/packages/ipsec-tools/ipsec-tools.inc
index a6fa2efb28..ed265f12ed 100644
--- a/packages/ipsec-tools/ipsec-tools.inc
+++ b/packages/ipsec-tools/ipsec-tools.inc
@@ -1,30 +1,49 @@
DESCRIPTION = "IPsec-Tools is a port of KAME's IPsec utilities to the \
Linux-2.6 IPsec implementation."
-DEPENDS = "virtual/kernel openssl readline flex"
-LICENSE = "BSD"
+HOMEPAGE = "http://ipsec-tools.sourceforge.net/"
SECTION = "console/network"
-PR = "r1"
+LICENSE = "BSD"
+DEPENDS = "virtual/kernel openssl readline flex"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${PV}.tar.bz2 \
+ file://racoon-search-missing.patch;patch=1 \
+ file://gcc-4.2.patch;patch=1"
inherit autotools
-# --enable-adminport enable admin port
-# --enable-gssapi enable GSS-API authentication
-# --enable-hybrid enable hybrid, both mode-cfg and xauth support
-# --enable-frag enable IKE fragmentation payload support
-# --enable-stats enable statistics logging function
-# --enable-dpd enable dead peer detection
-# --enable-samode-unspec enable to use unspecified a mode of SA
-# --disable-ipv6 disable ipv6 support
-# --enable-natt enable NAT-Traversal (yes/no/kernel)
-#
-# --with-kernel-headers=/lib/modules/<uname>/build/include
-# where your Linux Kernel headers are installed
-# --with-readline support readline input (yes by default)
-# --with-openssl=DIR specify OpenSSL directory
-# --with-libradius=DIR specify libradius path (like/usr/pkg)
-EXTRA_OECONF = "--with-kernel-headers=${STAGING_KERNEL_DIR} \
- --with-readline \
- --with-openssl=${STAGING_LIBDIR}/.. \
- --without-libradius \
- --without-gssapi"
+# Options:
+# --enable-adminport enable admin port
+# --enable-rc5 enable RC5 encryption (patented)
+# --enable-idea enable IDEA encryption (patented)
+# --enable-gssapi enable GSS-API authentication
+# --enable-hybrid enable hybrid, both mode-cfg and xauth support
+# --enable-frag enable IKE fragmentation payload support
+# --enable-stats enable statistics logging function
+# --enable-dpd enable dead peer detection
+# --enable-samode-unspec enable to use unspecified a mode of SA
+# --disable-ipv6 disable ipv6 support
+# --enable-natt enable NAT-Traversal (yes/no/kernel)
+# --enable-natt-versions=list list of supported NAT-T versions delimited by coma.
+# --with-kernel-headers=/lib/modules/<uname>/build/include
+# where your Linux Kernel headers are installed
+# --with-readline support readline input (yes by default)
+# --with-flex use directiory (default: no)
+# --with-flexlib=<LIB> specify flex library.
+# --with-openssl=DIR specify OpenSSL directory
+# --with-libradius=DIR specify libradius path (like/usr/pkg)
+# --with-libpam=DIR specify libpam path (like/usr/pkg)
+#
+# Note: if you give it the actual kernel headers it won't build, it actually
+# needs to point at the linux-libc-headers version of the kernel headers.
+#
+EXTRA_OECONF = "--with-kernel-headers=${STAGING_INCDIR} \
+ --with-readline \
+ --with-openssl=${STAGING_LIBDIR}/.. \
+ --without-libradius \
+ --without-gssapi \
+ --without-libpam"
+
+# Sometimes it attempts to use y.tab.c before it is actually
+# generated. Note that the failure case is very rare, but it does
+# happen.
PARALLEL_MAKE = ""
diff --git a/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc1.bb b/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc1.bb
deleted file mode 100644
index d4b33335df..0000000000
--- a/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require ipsec-tools.inc
-
-BV = "${@bb.data.getVar('PV', d, 1).split('+')[1]}"
-SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${BV}.tar.bz2 \
- file://cross.patch;patch=1"
-S = "${WORKDIR}/ipsec-tools-${BV}"
diff --git a/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc2.bb b/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc2.bb
deleted file mode 100644
index 5fed6c1764..0000000000
--- a/packages/ipsec-tools/ipsec-tools_0.4+0.5-rc2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require ipsec-tools.inc
-
-BV = "${@bb.data.getVar('PV', d, 1).split('+')[1].replace('-','')}"
-SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${BV}.tar.bz2 \
- file://cross.patch;patch=1"
-S = "${WORKDIR}/ipsec-tools-${BV}"
diff --git a/packages/ipsec-tools/ipsec-tools_0.6.6.bb b/packages/ipsec-tools/ipsec-tools_0.6.6.bb
index 9b0676aece..1ccc60c18d 100644
--- a/packages/ipsec-tools/ipsec-tools_0.6.6.bb
+++ b/packages/ipsec-tools/ipsec-tools_0.6.6.bb
@@ -1,47 +1,3 @@
-DESCRIPTION = "IPsec-Tools is a port of KAME's IPsec utilities to the \
-Linux-2.6 IPsec implementation."
-HOMEPAGE = "http://ipsec-tools.sourceforge.net/"
-SECTION = "console/network"
-LICENSE = "BSD"
-DEPENDS = "virtual/kernel openssl readline flex"
+PR = "r1"
-SRC_URI = "${SOURCEFORGE_MIRROR}/ipsec-tools/ipsec-tools-${PV}.tar.bz2 \
- file://racoon-search-missing.patch;patch=1"
-
-inherit autotools
-
-# Options:
-# --enable-adminport enable admin port
-# --enable-rc5 enable RC5 encryption (patented)
-# --enable-idea enable IDEA encryption (patented)
-# --enable-gssapi enable GSS-API authentication
-# --enable-hybrid enable hybrid, both mode-cfg and xauth support
-# --enable-frag enable IKE fragmentation payload support
-# --enable-stats enable statistics logging function
-# --enable-dpd enable dead peer detection
-# --enable-samode-unspec enable to use unspecified a mode of SA
-# --disable-ipv6 disable ipv6 support
-# --enable-natt enable NAT-Traversal (yes/no/kernel)
-# --enable-natt-versions=list list of supported NAT-T versions delimited by coma.
-# --with-kernel-headers=/lib/modules/<uname>/build/include
-# where your Linux Kernel headers are installed
-# --with-readline support readline input (yes by default)
-# --with-flex use directiory (default: no)
-# --with-flexlib=<LIB> specify flex library.
-# --with-openssl=DIR specify OpenSSL directory
-# --with-libradius=DIR specify libradius path (like/usr/pkg)
-# --with-libpam=DIR specify libpam path (like/usr/pkg)
-#
-# Note: if you give it the actual kernel headers it won't build, it actually
-# needs to point at the linux-libc-headers version of the kernel headers.
-#
-EXTRA_OECONF = "--with-kernel-headers=${STAGING_INCDIR} \
- --with-readline \
- --with-openssl=${STAGING_LIBDIR}/.. \
- --without-libradius \
- --without-gssapi \
- --without-libpam"
-
-# Sometimes it attempts to use y.tab.c before it is generated. Note
-# that the failure case is very rare, but it does happen.
-PARALLEL_MAKE = ""
+require ipsec-tools.inc
diff --git a/packages/ipsec-tools/ipsec-tools_0.6.7.bb b/packages/ipsec-tools/ipsec-tools_0.6.7.bb
new file mode 100644
index 0000000000..3f23b198c1
--- /dev/null
+++ b/packages/ipsec-tools/ipsec-tools_0.6.7.bb
@@ -0,0 +1,3 @@
+PR = "r0"
+
+require ipsec-tools.inc
diff --git a/packages/xfce-utils/.mtn2git_empty b/packages/iptables/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfce-utils/.mtn2git_empty
+++ b/packages/iptables/files/.mtn2git_empty
diff --git a/packages/iptables/files/compile.patch b/packages/iptables/files/compile.patch
new file mode 100644
index 0000000000..76662d9748
--- /dev/null
+++ b/packages/iptables/files/compile.patch
@@ -0,0 +1,17 @@
+Index: iptables-1.3.3/extensions/Makefile
+===================================================================
+--- iptables-1.3.3.orig/extensions/Makefile
++++ iptables-1.3.3/extensions/Makefile
+@@ -67,10 +67,10 @@ endif
+
+ ifdef NO_SHARED_LIBS
+ extensions/libext.a: $(EXT_OBJS)
+- rm -f $@; ar crv $@ $(EXT_OBJS)
++ rm -f $@; $(AR) crv $@ $(EXT_OBJS)
+
+ extensions/libext6.a: $(EXT6_OBJS)
+- rm -f $@; ar crv $@ $(EXT6_OBJS)
++ rm -f $@; $(AR) crv $@ $(EXT6_OBJS)
+
+ extensions/initext.o: extensions/initext.c
+ extensions/initext6.o: extensions/initext6.c
diff --git a/packages/iptables/iptables_1.2.9.bb b/packages/iptables/iptables_1.2.9.bb
index fe43ff488e..213802d17f 100644
--- a/packages/iptables/iptables_1.2.9.bb
+++ b/packages/iptables/iptables_1.2.9.bb
@@ -1,9 +1,10 @@
SECTION = "console/network"
DESCRIPTION = "iptables network filtering tools"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
-SRC_URI = "http://www.netfilter.org/files/iptables-${PV}.tar.bz2"
+SRC_URI = "http://www.netfilter.org/files/iptables-${PV}.tar.bz2 \
+ file://compile.patch;patch=1"
S = "${WORKDIR}/iptables-${PV}"
diff --git a/packages/iptables/iptables_1.3.3.bb b/packages/iptables/iptables_1.3.3.bb
index 4c500ad5b1..5f19d45317 100644
--- a/packages/iptables/iptables_1.3.3.bb
+++ b/packages/iptables/iptables_1.3.3.bb
@@ -3,14 +3,15 @@ HOMEPAGE = "http://www.netfilter.org/"
SECTION = "console/utils"
LICENSE = "GPL"
RRECOMMENDS = "kernel-module-ip-tables kernel-module-iptable-filter"
-PR = "r3"
+PR = "r4"
PACKAGES =+ "${PN}-utils"
FILES_${PN}-utils = "${sbindir}/iptables-save ${sbindir}/iptables-restore"
-SRC_URI = "http://www.netfilter.org/files/iptables-${PV}.tar.bz2"
+SRC_URI = "http://www.netfilter.org/files/iptables-${PV}.tar.bz2 \
+ file://compile.patch;patch=1"
S = "${WORKDIR}/iptables-${PV}"
diff --git a/packages/iptables/iptables_1.3.8.bb b/packages/iptables/iptables_1.3.8.bb
new file mode 100644
index 0000000000..eccc1c077a
--- /dev/null
+++ b/packages/iptables/iptables_1.3.8.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "iptables network filtering tools"
+HOMEPAGE = "http://www.netfilter.org/"
+SECTION = "console/utils"
+LICENSE = "GPL"
+RRECOMMENDS = "kernel-module-ip-tables kernel-module-iptable-filter"
+PR = "r0"
+SRC_URI = "http://netfilter.org/projects/iptables/files/iptables-${PV}.tar.bz2 \
+ "
+
+S = "${WORKDIR}/iptables-${PV}"
+
+PARALLEL_MAKE=""
+
+export COPT_FLAGS = "${CFLAGS}"
+export KERNEL_DIR = "${STAGING_INCDIR}"
+
+do_compile () {
+ unset CFLAGS
+ oe_runmake BINDIR=${D}${sbindir} LIBDIR=${D}${libdir} MANDIR=${D}${mandir} NO_SHARED_LIBS=1
+}
+
+do_install () {
+ unset CFLAGS
+ oe_runmake BINDIR=${D}${sbindir} LIBDIR=${D}${libdir} MANDIR=${D}${mandir} install NO_SHARED_LIBS=1
+}
+
+PACKAGES =+ "${PN}-utils"
+FILES_${PN}-utils = "${sbindir}/iptables-save ${sbindir}/iptables-restore"
+FILES_${PN}-doc += "${mandir}"
+
diff --git a/packages/xfce4-goodies/.mtn2git_empty b/packages/iptstate/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfce4-goodies/.mtn2git_empty
+++ b/packages/iptstate/.mtn2git_empty
diff --git a/packages/iptstate/iptstate_2.2.1.bb b/packages/iptstate/iptstate_2.2.1.bb
new file mode 100644
index 0000000000..40be6eb109
--- /dev/null
+++ b/packages/iptstate/iptstate_2.2.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "IPTState is a top-like interface to your netfilter connection-tracking table."
+HOMEPAGE = "http://www.phildev.net/iptstate/"
+SECTION = "console/network"
+LICENSE = "zlib"
+DEPENDS = "ncurses"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/iptstate/iptstate-${PV}.tar.bz2"
+
+#
+# Make it use it's old style proc interface - these should be removed
+# once libnetfilter_conntrack and libnfnetlink are added to OE.
+#
+CPPFLAGS += " -DIPTSTATE_USE_PROC -L${STAGING_LIBDIR}"
+export LIBS = "-lncurses"
+
+do_install () {
+ oe_runmake install SBIN=${D}/${sbindir} MAN=${D}/${mandir}
+}
diff --git a/packages/irda-utils/files/init b/packages/irda-utils/files/init
index 2d93af34df..a00596fc85 100755
--- a/packages/irda-utils/files/init
+++ b/packages/irda-utils/files/init
@@ -1,21 +1,26 @@
#! /bin/sh
+NAME="irattach"
+
module_id() {
- awk 'BEGIN { FS=": " } /Hardware/ { print $2 } ' </proc/cpuinfo
+ awk 'BEGIN { FS=": " } /Hardware/ { print $2 } ' </proc/cpuinfo
+}
+cpuid_id() {
+ awk '/Processor/ { print $3; exit; }' /proc/cpuinfo
}
if [ ! -f /etc/sysconfig/irda ]; then
- case `module_id` in
- "HP iPAQ H2200" | "HP iPAQ HX4700" | "HTC Universal")
+ case `cpuid_id` in
+ "XScale-PXA2"*)
IRDA=yes
DEVICE=/dev/ttyS2
DONGLE=
DISCOVERY=
;;
*)
- IRDA=yes
- DEVICE=/dev/ttyS1
+ IRDA=no
+ DEVICE=/dev/null
DONGLE=
DISCOVERY=
;;
@@ -32,8 +37,8 @@ fi
. /etc/sysconfig/irda
-# Check that irda is up.
-[ ${IRDA} = "no" ] && exit 0
+# Check if irda is present.
+[ $IRDA = "no" ] && exit 0
[ -f /usr/sbin/irattach ] || exit 0
@@ -47,26 +52,26 @@ fi
case "$1" in
start)
- echo -n "Starting IrDA: "
- irattach ${DEVICE} ${ARGS} > /dev/null 2>&1 &
- echo "$NAME."
- ;;
+ echo -n "Starting IrDA: "
+ irattach ${DEVICE} ${ARGS} > /dev/null 2>&1
+ echo "$NAME."
+ ;;
stop)
- echo -n "Stopping IrDA: "
- killall irattach > /dev/null 2>&1
- echo "$NAME."
- ;;
+ echo -n "Stopping IrDA: "
+ killall irattach > /dev/null 2>&1
+ echo "$NAME."
+ ;;
restart|force-reload)
- echo -n "Restarting IrDA: "
- irattach ${DEVICE} ${ARGS} > /dev/null 2>&1 &
- sleep 1
- killall irattach > /dev/null 2>&1
- echo "$NAME."
- ;;
+ echo -n "Restarting IrDA: "
+ irattach ${DEVICE} ${ARGS} > /dev/null 2>&1
+ sleep 1
+ killall irattach > /dev/null 2>&1
+ echo "$NAME."
+ ;;
*)
- N=/etc/init.d/$NAME
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
esac
diff --git a/packages/irda-utils/irda-utils_0.9.16.bb b/packages/irda-utils/irda-utils_0.9.16.bb
index 95a15d7d23..19bcdf397c 100644
--- a/packages/irda-utils/irda-utils_0.9.16.bb
+++ b/packages/irda-utils/irda-utils_0.9.16.bb
@@ -3,7 +3,7 @@ IrDA allows communication over Infrared with other devices \
such as phones and laptops."
SECTION = "base"
LICENSE = "GPL"
-PR = "r6"
+PR = "r8"
SRC_URI = "${SOURCEFORGE_MIRROR}/irda/irda-utils-${PV}.tar.gz \
file://configure.patch;patch=1 \
@@ -12,7 +12,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/irda/irda-utils-${PV}.tar.gz \
export SYS_INCLUDES="-I${STAGING_INCDIR}"
-inherit autotools update-rc.d
+inherit autotools
INITSCRIPT_NAME = "irattach"
INITSCRIPT_PARAMS = "defaults 20"
@@ -28,5 +28,5 @@ do_install () {
oe_runmake -C irdaping ROOT="${D}" install
install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/irattach
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME}
}
diff --git a/packages/irssi/irssi_svn.bb b/packages/irssi/irssi_svn.bb
index 3f4662017f..7d09f116e5 100644
--- a/packages/irssi/irssi_svn.bb
+++ b/packages/irssi/irssi_svn.bb
@@ -6,6 +6,8 @@ DEPENDS += "ncurses glib-2.0"
PV = "0.8.10+svn${SRCDATE}"
PR = "r3"
+DEFAULT_PREFERENCE = "-1"
+
PACKAGES += "${PN}-common"
FILES_${PN} = "${bindir}/irssi"
FILES_${PN}-common = "${datadir}/irssi ${sysconfdir}"
diff --git a/packages/xfce4-panel/.mtn2git_empty b/packages/ixp4xx/ixp4xx-npe-native-2.3.2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfce4-panel/.mtn2git_empty
+++ b/packages/ixp4xx/ixp4xx-npe-native-2.3.2/.mtn2git_empty
diff --git a/packages/ixp4xx/ixp4xx-npe-native-2.3.2/IxNpeMicrocode.h b/packages/ixp4xx/ixp4xx-npe-native-2.3.2/IxNpeMicrocode.h
new file mode 100644
index 0000000000..2229619a27
--- /dev/null
+++ b/packages/ixp4xx/ixp4xx-npe-native-2.3.2/IxNpeMicrocode.h
@@ -0,0 +1,143 @@
+/*
+ * IxNpeMicrocode.h - Headerfile for compiling the Intel microcode C file
+ *
+ * Copyright (C) 2006 Christian Hohnstaedt <chohnstaedt@innominate.com>
+ *
+ * This file is released under the GPLv2
+ *
+ *
+ * compile with
+ *
+ * gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode
+ *
+ * Executing the resulting binary on your build-host creates the
+ * "NPE-[ABC].xxxxxxxx" files containing the selected microcode
+ *
+ * fetch the IxNpeMicrocode.c from the Intel Access Library.
+ * It will include this header.
+ *
+ * select Images for every NPE from the following
+ * (used C++ comments for easy uncommenting ....)
+ */
+
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_TSLOT_SWITCH
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
+// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL
+// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_2_PORT
+// #define IX_NPEDL_NPEIMAGE_NPEA_DMA
+// #define IX_NPEDL_NPEIMAGE_NPEA_ATM_MPHY_12_PORT
+// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_MPHY_1_PORT
+// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_SPHY_1_PORT
+// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0
+// #define IX_NPEDL_NPEIMAGE_NPEA_WEP
+
+
+// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEB_DMA
+// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
+// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
+#define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL
+
+
+// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
+// #define IX_NPEDL_NPEIMAGE_NPEC_DMA
+// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_SPAN
+// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_FIREWALL
+// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_CCM_ETH
+// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_ETH_LEARN_FILTER_SPAN_FIREWALL
+// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
+// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
+#define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL
+
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <string.h>
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define to_le32(x) (x)
+#define to_be32(x) bswap_32(x)
+#else
+#define to_be32(x) (x)
+#define to_le32(x) bswap_32(x)
+#endif
+
+struct dl_image {
+ unsigned magic;
+ unsigned id;
+ unsigned size;
+ unsigned data[0];
+};
+
+const unsigned IxNpeMicrocode_array[];
+
+int main(int argc, char *argv[])
+{
+ struct dl_image *image = (struct dl_image *)IxNpeMicrocode_array;
+ int imgsiz, i, fd, cnt;
+ const unsigned *arrayptr = IxNpeMicrocode_array;
+ const char *names[] = { "IXP425", "IXP465", "unknown" };
+ int bigendian = 1;
+
+ if (argc > 1) {
+ if (!strcmp(argv[1], "-le"))
+ bigendian = 0;
+ else if (!strcmp(argv[1], "-be"))
+ bigendian = 1;
+ else {
+ printf("Usage: %s <-le|-be>\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+ }
+
+ for (image = (struct dl_image *)arrayptr, cnt=0;
+ (image->id != 0xfeedf00d) && (image->magic == 0xfeedf00d);
+ image = (struct dl_image *)(arrayptr), cnt++)
+ {
+ unsigned char field[4];
+ imgsiz = image->size + 3;
+ *(unsigned*)field = to_be32(image->id);
+ char filename[40], slnk[10];
+
+ sprintf(filename, "NPE-%c.%08x", (field[0] & 0xf) + 'A',
+ image->id);
+ sprintf(slnk, "NPE-%c", (field[0] & 0xf) + 'A');
+ printf("Writing image: %s.NPE_%c Func: %2x Rev: %02x.%02x "
+ "Size: %5d to: '%s'\n",
+ names[field[0] >> 4], (field[0] & 0xf) + 'A',
+ field[1], field[2], field[3], imgsiz*4, filename);
+ fd = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0644);
+ if (fd >= 0) {
+ for (i=0; i<imgsiz; i++) {
+ *(unsigned*)field = bigendian ?
+ to_be32(arrayptr[i]) :
+ to_le32(arrayptr[i]);
+ write(fd, field, sizeof(field));
+ }
+ close(fd);
+ unlink(slnk);
+ symlink(filename, slnk);
+ } else {
+ perror(filename);
+ }
+ arrayptr += imgsiz;
+ }
+ close(fd);
+ return 0;
+}
diff --git a/packages/ixp4xx/ixp4xx-npe-native-2.3/IxNpeMicrocode.h b/packages/ixp4xx/ixp4xx-npe-native-2.3/IxNpeMicrocode.h
deleted file mode 100644
index 1c3d1ff473..0000000000
--- a/packages/ixp4xx/ixp4xx-npe-native-2.3/IxNpeMicrocode.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * IxNpeMicrocode.h - Headerfile for compiling the Intel microcode C file
- *
- * Copyright (C) 2006 Christian Hohnstaedt <chohnstaedt@innominate.com>
- *
- * This file is released under the GPLv2
- *
- *
- * compile with
- *
- * gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode
- *
- * Executing the resulting binary on your build-host creates the
- * "NPE-[ABC].xxxxxxxx" files containing the selected microcode
- *
- * fetch the IxNpeMicrocode.c from the Intel Access Library.
- * It will include this header.
- *
- * select Images for every NPE from the following
- * (used C++ comments for easy uncommenting ....)
- */
-
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_TSLOT_SWITCH
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
-// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL
-// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_2_PORT
-// #define IX_NPEDL_NPEIMAGE_NPEA_DMA
-// #define IX_NPEDL_NPEIMAGE_NPEA_ATM_MPHY_12_PORT
-// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_MPHY_1_PORT
-// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_SPHY_1_PORT
-// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0
-// #define IX_NPEDL_NPEIMAGE_NPEA_WEP
-
-
-// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEB_DMA
-// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
-// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
-#define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL
-
-
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB
-// #define IX_NPEDL_NPEIMAGE_NPEC_DMA
-// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_SPAN
-// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_FIREWALL
-#define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_CCM_ETH
-// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_ETH_LEARN_FILTER_SPAN_FIREWALL
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS
-// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <endian.h>
-#include <byteswap.h>
-#include <string.h>
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define to_le32(x) (x)
-#define to_be32(x) bswap_32(x)
-#else
-#define to_be32(x) (x)
-#define to_le32(x) bswap_32(x)
-#endif
-
-struct dl_image {
- unsigned magic;
- unsigned id;
- unsigned size;
- unsigned data[0];
-};
-
-const unsigned IxNpeMicrocode_array[];
-
-int main(int argc, char *argv[])
-{
- struct dl_image *image = (struct dl_image *)IxNpeMicrocode_array;
- int imgsiz, i, fd, cnt;
- const unsigned *arrayptr = IxNpeMicrocode_array;
- const char *names[] = { "IXP425", "IXP465", "unknown" };
- int bigendian = 1;
-
- if (argc > 1) {
- if (!strcmp(argv[1], "-le"))
- bigendian = 0;
- else if (!strcmp(argv[1], "-be"))
- bigendian = 1;
- else {
- printf("Usage: %s <-le|-be>\n", argv[0]);
- return EXIT_FAILURE;
- }
- }
-
- for (image = (struct dl_image *)arrayptr, cnt=0;
- (image->id != 0xfeedf00d) && (image->magic == 0xfeedf00d);
- image = (struct dl_image *)(arrayptr), cnt++)
- {
- unsigned char field[4];
- imgsiz = image->size + 3;
- *(unsigned*)field = to_be32(image->id);
- char filename[40], slnk[10];
-
- sprintf(filename, "NPE-%c.%08x", (field[0] & 0xf) + 'A',
- image->id);
- sprintf(slnk, "NPE-%c", (field[0] & 0xf) + 'A');
- printf("Writing image: %s.NPE_%c Func: %2x Rev: %02x.%02x "
- "Size: %5d to: '%s'\n",
- names[field[0] >> 4], (field[0] & 0xf) + 'A',
- field[1], field[2], field[3], imgsiz*4, filename);
- fd = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0644);
- if (fd >= 0) {
- for (i=0; i<imgsiz; i++) {
- *(unsigned*)field = bigendian ?
- to_be32(arrayptr[i]) :
- to_le32(arrayptr[i]);
- write(fd, field, sizeof(field));
- }
- close(fd);
- unlink(slnk);
- symlink(filename, slnk);
- } else {
- perror(filename);
- }
- arrayptr += imgsiz;
- }
- close(fd);
- return 0;
-}
diff --git a/packages/ixp4xx/ixp4xx-npe-native_2.3.2.bb b/packages/ixp4xx/ixp4xx-npe-native_2.3.2.bb
new file mode 100644
index 0000000000..9db83352c4
--- /dev/null
+++ b/packages/ixp4xx/ixp4xx-npe-native_2.3.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Firmware converter for the IXP4xx line of devices"
+LICENSE = "Intel Public Licence"
+PR = "r1"
+
+SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.3.2.bb-For-Instructions/IPL_ixp400NpeLibrary-2_3_2.zip"
+SRC_URI += "file://IxNpeMicrocode.h"
+inherit native
+S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl"
+
+do_compile() {
+ mv ${WORKDIR}/IxNpeMicrocode.h ${S}/
+ gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode
+}
+
+do_stage() {
+ mv ${S}/IxNpeMicrocode ${S}/IxNpeMicrocode-${PV}
+ install -d ${STAGING_BINDIR}/
+ install -m 0755 ${S}/IxNpeMicrocode-${PV} ${STAGING_BINDIR}/
+}
diff --git a/packages/ixp4xx/ixp4xx-npe-native_2.3.bb b/packages/ixp4xx/ixp4xx-npe-native_2.3.bb
deleted file mode 100644
index ab8909423f..0000000000
--- a/packages/ixp4xx/ixp4xx-npe-native_2.3.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Firmware converter for the IXP4xx line of devices"
-LICENSE = "Intel Public Licence"
-PR = "r3"
-
-SRC_URI = "http://www.intel.com/Please-Read-The-BB-File/IPL_ixp400NpeLibrary-2_3.zip"
-SRC_URI += "file://IxNpeMicrocode.h"
-inherit native
-S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl"
-
-do_compile() {
- mv ${WORKDIR}/IxNpeMicrocode.h ${S}/
- gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode
-}
-
-do_stage() {
- mv ${S}/IxNpeMicrocode ${S}/IxNpeMicrocode-${PV}
- install -d ${STAGING_BINDIR}/
- install -m 0755 ${S}/IxNpeMicrocode-${PV} ${STAGING_BINDIR}/
-}
diff --git a/packages/ixp4xx/ixp4xx-npe_2.3.2.bb b/packages/ixp4xx/ixp4xx-npe_2.3.2.bb
new file mode 100644
index 0000000000..b5b1665735
--- /dev/null
+++ b/packages/ixp4xx/ixp4xx-npe_2.3.2.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "NPE firmware for the IXP4xx line of devices"
+LICENSE = "Intel Public Licence"
+PR = "r1"
+DEPENDS = "ixp4xx-npe-native"
+
+# You need to download the IPL_ixp400NpeLibrary-2_3_2.zip file (without crypto) from:
+# http://www.intel.com/design/network/products/npfamily/ixp400_current.htm
+# and put it in your downloads directory so bitbake will find it.
+# Make sure you *read* and accept the license - it is not a standard one.
+
+SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.3.2.bb-For-Instructions/IPL_ixp400NpeLibrary-2_3_2.zip"
+S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl"
+
+COMPATIBLE_MACHINE = "(nslu2|ixp4xx)"
+
+FILES_${PN} = "${base_libdir}/firmware/NPE-B ${base_libdir}/firmware/NPE-C"
+
+do_compile() {
+ ${STAGING_BINDIR_NATIVE}/IxNpeMicrocode-${PV} -be
+}
+
+do_install() {
+ install -d ${D}/${base_libdir}/firmware/
+ rm ${S}/NPE-B
+ mv ${S}/NPE-B.* ${S}/NPE-B
+ install ${S}/NPE-B ${D}/${base_libdir}/firmware/
+ rm ${S}/NPE-C
+ mv ${S}/NPE-C.* ${S}/NPE-C
+ install ${S}/NPE-C ${D}/${base_libdir}/firmware/
+}
+
+do_populate_staging() {
+ install -d ${STAGING_FIRMWARE_DIR}
+ install ${S}/NPE-B ${STAGING_FIRMWARE_DIR}/
+ install ${S}/NPE-C ${STAGING_FIRMWARE_DIR}/
+}
+
diff --git a/packages/ixp4xx/ixp4xx-npe_2.3.bb b/packages/ixp4xx/ixp4xx-npe_2.3.bb
deleted file mode 100644
index ef422e214d..0000000000
--- a/packages/ixp4xx/ixp4xx-npe_2.3.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "NPE firmware for the IXP4xx line of devices"
-LICENSE = "Intel Public Licence"
-PR = "r8"
-DEPENDS = "ixp4xx-npe-native"
-
-# You need to download the IPL_ixp400NpeLibrary-2_3.zip file (without crypto) from:
-# http://www.intel.com/design/network/products/npfamily/ixp400_current.htm
-# and put it in your downloads directory so bitbake will find it.
-# Make sure you *read* and accept the license - it is not a standard one.
-
-SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.3.bb-For-Instructions/IPL_ixp400NpeLibrary-2_3.zip"
-S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl"
-
-COMPATIBLE_MACHINE = "(nslu2|ixp4xx)"
-
-FILES_${PN} = "${base_libdir}/firmware/NPE-B"
-
-do_compile() {
- ${STAGING_BINDIR_NATIVE}/IxNpeMicrocode-${PV} -be
-}
-
-do_install() {
- install -d ${D}/${base_libdir}/firmware/
- rm ${S}/NPE-B
- mv ${S}/NPE-B.* ${S}/NPE-B
- install ${S}/NPE-B ${D}/${base_libdir}/firmware/
-}
-
-do_populate_staging() {
- install -d ${STAGING_FIRMWARE_DIR}
- install ${S}/NPE-B ${STAGING_FIRMWARE_DIR}/
-}
-
diff --git a/packages/jack/jack_0.103.0.bb b/packages/jack/jack_0.103.0.bb
new file mode 100644
index 0000000000..ccd6379447
--- /dev/null
+++ b/packages/jack/jack_0.103.0.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "JACK is a low-latency audio server. It can \
+connect a number of different applications to an audio \
+device, as well as allowing them to share audio between \
+themselves."
+SECTION = "libs/multimedia"
+PRIORITY = "optional"
+LICENSE = "GPL LGPL"
+PR = "r0"
+
+DEPENDS = "alsa-lib"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/jackit/jack-audio-connection-kit-${PV}.tar.gz"
+S = "${WORKDIR}/jack-audio-connection-kit-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-timestamps --disable-capabilities --disable-oldtrans \
+ --disable-portaudio --disable-coreaudio --enable-oss --enable-alsa"
+
+EXTRA_OEMAKE = 'transform="s,^,,"'
+LDFLAGS_append = " -ldl -L${STAGING_LIBDIR}"
+
+PACKAGES =+ "libjack jack-server jack-examples"
+
+FILES_libjack = "${libdir}/*.so.* ${libdir}/jack/*.so"
+FILES_jack-server = "${bindir}/jackd"
+FILES_jack-examples = "${bindir}/*"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/jack/jack_0.99.0.bb b/packages/jack/jack_0.99.0.bb
deleted file mode 100644
index a4988fdef0..0000000000
--- a/packages/jack/jack_0.99.0.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "JACK is a low-latency audio server. It can \
-connect a number of different applications to an audio \
-device, as well as allowing them to share audio between \
-themselves."
-SECTION = "libs/multimedia"
-PRIORITY = "optional"
-LICENSE = "GPL LGPL"
-PR = "r0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/jackit/jack-audio-connection-kit-${PV}.tar.gz"
-S = "${WORKDIR}/jack-audio-connection-kit-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--enable-timestamps --disable-capabilities --disable-oldtrans \
- --disable-portaudio --disable-coreaudio --enable-oss --enable-alsa"
-
-EXTRA_OEMAKE = 'transform="s,^,,"'
-
-do_configure() {
- gnu-configize
- oe_runconf
-}
-
-do_install_append() {
- install -d ${D}${docdir}
- mv -f ${D}${datadir}/jack-audio-connection-kit ${D}${docdir}/
-}
-
-PACKAGES = "libjack jack-server jack-examples jack-doc jack-dev"
-FILES_libjack = "${libdir}/*.so.* ${libdir}/jack/*.so"
-FILES_jack-server = "${bindir}/jackd"
-FILES_jack-examples = "${bindir}"
diff --git a/packages/jamvm/jamvm_1.4.2.bb b/packages/jamvm/jamvm_1.4.5.bb
index 489b4fb94b..489b4fb94b 100644
--- a/packages/jamvm/jamvm_1.4.2.bb
+++ b/packages/jamvm/jamvm_1.4.5.bb
diff --git a/packages/xfdesktop/.mtn2git_empty b/packages/jards/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfdesktop/.mtn2git_empty
+++ b/packages/jards/.mtn2git_empty
diff --git a/packages/jards/jards_1.0.bb b/packages/jards/jards_1.0.bb
new file mode 100644
index 0000000000..c536a2546b
--- /dev/null
+++ b/packages/jards/jards_1.0.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "Reference and training tool for students of Japanese"
+AUTHOR = "Johnny Andersson"
+HOMEPAGE = "http://gakusei.sf.net"
+SECTION = "opie/applications"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "virtual/japanese-font qte-mt libpng (>= 1) kpengine"
+PR = "r7"
+
+# stuff that still needs fixing
+#) is the RDEPENDS line correct and sufficient?
+#) upon execution there is a message that /usr/lib/libpng12.so.0 does not have version information
+#) desktop icon missing
+#) Desktop png file an falscher Stelle, daher kein Icon
+#) remove .debug dir
+#) es fehlen: ./opt/QtPalmtop/bin/kpengine, ./opt/QtPalmtop/jardsmob/edict.jardsdic, ./opt/QtPalmtop/jardsmob/kanjidic.jardskdic
+#) exec muß jardsmob_bin heißen
+#) Programm geht oft in 100% CPU schleife -> unbenutzbar
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gakusei/jards_gakusei.cvs.sourceforge.net__20070212.tar.gz"
+#SRC_URI = "cvs://anonymous@gakusei.cvs.sourceforge.net/cvsroot/gakusei;method=pserver;module=jards"
+
+inherit opie
+
+OE_QMAKE_CXXFLAGS := "${@oe_filter_out('-fno-rtti', '${OE_QMAKE_CXXFLAGS}', d)}"
+OE_QMAKE_CXXFLAFS += " -L${STAGING_DIR}/pkgdata"
+CXXFLAFS += " -L${STAGING_DIR}/pkgdata"
+
+S = "${WORKDIR}/${PN}/"
+export OE_QMAKE_LINK="${CXX}"
+
+# read opie.bbclass
+#APPDESKTOP = "${S}"
+APPTYPE = "binary"
+APPNAME = "jardsmob"
+
+FILES_${PN}-dbg += "${D}${palmtopdir}/bin/.debug/"
+
+PARALLEL_MAKE = ""
+
+do_install() {
+ install -d ${D}${palmtopdir}/bin/
+ install -d ${D}${palmtopdir}/pics/
+ install -d ${D}${palmtopdir}/${APPNAME}/images
+ install -d ${D}${palmtopdir}/apps/Applications
+ install -m 0644 ${S}dat/images/jardsmob.png ${D}${palmtopdir}/pics/
+ install -m 0644 ${S}dat/images/*.png ${D}${palmtopdir}/${APPNAME}/images/
+ install -m 0755 ${S}jardsmob_bin ${D}${palmtopdir}/bin/
+ install -m 0644 ${WORKDIR}/jards/jards.desktop ${D}${palmtopdir}/apps/Applications/
+
+ # what about the following files: edict.jardsdic kanjidic.jardskdic?
+ for f in markers romkana.utf8 strokedata wordfreq_ck raddat.utf8
+ do
+ install -m 0644 ${S}dat/$f ${D}${palmtopdir}/${APPNAME}/
+ done
+}
+
diff --git a/packages/jikes/jikes-native_1.21.bb b/packages/jikes/jikes-native_1.21.bb
index 7bea3e3cba..2996046639 100644
--- a/packages/jikes/jikes-native_1.21.bb
+++ b/packages/jikes/jikes-native_1.21.bb
@@ -1,6 +1,7 @@
-SECTION = "devel"
inherit native
require jikes_${PV}.bb
+
+PROVIDES = "virtual/javac-native"
S = "${WORKDIR}/jikes-${PV}"
do_stage() {
diff --git a/packages/jpeg/jpeg-6b/libtool.patch b/packages/jpeg/jpeg-6b/libtool.patch
new file mode 100644
index 0000000000..c7fd858cfc
--- /dev/null
+++ b/packages/jpeg/jpeg-6b/libtool.patch
@@ -0,0 +1,49 @@
+--- /orig-makefile.cfg 2007-03-13 18:09:05.000000000 +0200
++++ /makefile.cfg 2007-03-13 21:42:33.000000000 +0200
+@@ -36,8 +36,10 @@
+ # To link any special libraries, add the necessary -l commands here.
+ LDLIBS= @LIBS@
+
++
+ # If using GNU libtool, LIBTOOL references it; if not, LIBTOOL is empty.
+ LIBTOOL = @LIBTOOL@
++
+ # $(O) expands to "lo" if using libtool, plain "o" if not.
+ # Similarly, $(A) expands to "la" or "a".
+ O = @O@
+@@ -55,7 +57,7 @@
+ # miscellaneous OS-dependent stuff
+ SHELL= /bin/sh
+ # linker
+-LN= @LN@
++LN= $(LIBTOOL) --tag=CC --mode=link $(CC)
+ # file deletion command
+ RM= rm -f
+ # directory creation command
+@@ -141,7 +143,7 @@
+
+ # How to compile with libtool.
+ @COM_LT@.c.lo:
+-@COM_LT@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $(srcdir)/$*.c
++@COM_LT@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(CFLAGS) -c $(srcdir)/$*.c
+
+ # How to use ansi2knr, when not using libtool.
+ @COM_A2K@.c.o:
+@@ -152,7 +154,7 @@
+ # How to use ansi2knr AND libtool.
+ @COM_A2K@.c.lo:
+ @COM_A2K@ ./ansi2knr $(srcdir)/$*.c knr/$*.c
+-@COM_A2K@ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c knr/$*.c
++@COM_A2K@ $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) -c knr/$*.c
+ @COM_A2K@ $(RM) knr/$*.c
+
+ ansi2knr: ansi2knr.c
+@@ -169,7 +171,7 @@
+
+ # with libtool:
+ libjpeg.la: @A2K_DEPS@ $(LIBOBJECTS)
+- $(LIBTOOL) --mode=link $(CC) -o libjpeg.la $(LIBOBJECTS) \
++ $(LIBTOOL) --tag=CC --mode=link $(CC) -o libjpeg.la $(LIBOBJECTS) \
+ -rpath $(libdir) -version-info $(JPEG_LIB_VERSION) $(LDFLAGS)
+
+ # sample programs:
diff --git a/packages/jpeg/jpeg_6b.bb b/packages/jpeg/jpeg_6b.bb
index 8573789230..c93aadb6ab 100644
--- a/packages/jpeg/jpeg_6b.bb
+++ b/packages/jpeg/jpeg_6b.bb
@@ -7,12 +7,15 @@ DEPENDS = "libtool-cross"
RPROVIDES_${PN} = "jpeg"
-PR = "r6"
+PR = "r7"
SRC_URI = "http://www.ijg.org/files/jpegsrc.v${PV}.tar.gz \
file://debian.patch;patch=1 \
file://ldflags.patch;patch=1 \
- file://paths.patch;patch=1"
+ file://paths.patch;patch=1 \
+ file://libtool.patch;patch=1 \
+ "
+
S = "${WORKDIR}/jpeg-${PV}"
inherit autotools
@@ -20,7 +23,7 @@ inherit autotools
EXTRA_OECONF="--enable-static --enable-shared"
EXTRA_OEMAKE='"LIBTOOL=${STAGING_BINDIR_NATIVE}/${HOST_SYS}-libtool"'
-CFLAGS_append = " -D_REENTRANT"
+CFLAGS_append = " -D_REENTRANT"
do_stage() {
install -m 644 jconfig.h ${STAGING_INCDIR}/jconfig.h
diff --git a/packages/kanjipad/kanjipad.inc b/packages/kanjipad/kanjipad.inc
index ce9613b3ab..bebd753495 100644
--- a/packages/kanjipad/kanjipad.inc
+++ b/packages/kanjipad/kanjipad.inc
@@ -1,8 +1,10 @@
DESCRIPTION = "Hand-writing recognition for Japanese Kanji characters (no kana)"
AUTHOR = "Owen Taylor <otaylor@fishsoup.net>"
HOMEPAGE = "http://fishsoup.net/software/kanjipad/"
+SECTION = "inputmethods"
PRIORITY = "optional"
LICENSE = "GPL"
+DEPENDS = "gtk+"
SRC_URI="http://fishsoup.net/software/kanjipad/kanjipad-2.0.0.tar.gz"
diff --git a/packages/xfwm4-themes/.mtn2git_empty b/packages/kazehakase/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfwm4-themes/.mtn2git_empty
+++ b/packages/kazehakase/.mtn2git_empty
diff --git a/packages/kazehakase/kazehakase_0.4.5.bb b/packages/kazehakase/kazehakase_0.4.5.bb
new file mode 100644
index 0000000000..927699318e
--- /dev/null
+++ b/packages/kazehakase/kazehakase_0.4.5.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "A gtk-webcore based browser"
+HOMEPAGE = "http://kazehakase.sourceforge.jp/"
+SECTION = "x11/network"
+LICENSE = "GPLv2"
+DEPENDS = "osb-nrcit glib-2.0"
+SRC_URI = "http://osdn.dl.sourceforge.jp/kazehakase/24791/kazehakase-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
diff --git a/packages/kazehakase/kazehakase_0.4.7.bb b/packages/kazehakase/kazehakase_0.4.7.bb
new file mode 100644
index 0000000000..9b30ce918d
--- /dev/null
+++ b/packages/kazehakase/kazehakase_0.4.7.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "A gtk-webcore based browser"
+HOMEPAGE = "http://kazehakase.sourceforge.jp/"
+SECTION = "x11/network"
+LICENSE = "GPLv2"
+DEPENDS = "osb-nrcit glib-2.0"
+SRC_URI = "http://iij.dl.sourceforge.jp/kazehakase/25610/kazehakase-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
diff --git a/packages/kazehakase/kazehakase_cvs.bb b/packages/kazehakase/kazehakase_cvs.bb
new file mode 100644
index 0000000000..c0a26d01ea
--- /dev/null
+++ b/packages/kazehakase/kazehakase_cvs.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A gtk-webcore based browser"
+HOMEPAGE = "http://kazehakase.sourceforge.jp/"
+SECTION = "x11/network"
+LICENSE = "GPLv2"
+DEPENDS = "osb-nrcit glib-2.0"
+
+SRC_URI = "cvs://anonymous@cvs.sourceforge.jp/cvsroot/kazehakase;module=kazehakase"
+S = "${WORKDIR}/kazehakase"
+
+
+PV = "0.4.7+cvs${SRCDATE}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --disable-gtkmozembed "
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/kdepimpi/files/qt-mt.patch b/packages/kdepimpi/files/qt-mt.patch
new file mode 100644
index 0000000000..c7e3f9d88a
--- /dev/null
+++ b/packages/kdepimpi/files/qt-mt.patch
@@ -0,0 +1,41 @@
+diff --git a/microkde/kresources/resource.cpp b/microkde/kresources/resource.cpp
+index cccd485..65d82e2 100644
+--- a/microkde/kresources/resource.cpp
++++ b/microkde/kresources/resource.cpp
+@@ -29,6 +29,23 @@
+
+ using namespace KRES;
+
++namespace fixme {
++ class QMutexLocker {
++ public:
++ QMutexLocker(QMutex *m) : mtx(m) {
++ if(mtx) mtx->lock();
++ }
++ ~QMutexLocker() {
++ if(mtx) mtx->unlock();
++ }
++
++ QMutex *mutex() const { return mtx; }
++ private:
++ QMutex *mtx;
++ };
++}
++using namespace fixme;
++
+ class Resource::ResourcePrivate
+ {
+ public:
+diff --git a/microkde/kresources/resource.h b/microkde/kresources/resource.h
+index ed5af96..997fff6 100644
+--- a/microkde/kresources/resource.h
++++ b/microkde/kresources/resource.h
+@@ -25,7 +25,7 @@
+
+ //US
+ #ifdef QT_THREAD_SUPPORT
+-#include <qmutex.h>
++#include <qthread.h>
+ #endif //QT_THREAD_SUPPORT
+
+ #include <qvaluelist.h>
diff --git a/packages/kdepimpi/kdepimpi-base.inc b/packages/kdepimpi/kdepimpi-base.inc
index cb845397bd..5a50be3de7 100644
--- a/packages/kdepimpi/kdepimpi-base.inc
+++ b/packages/kdepimpi/kdepimpi-base.inc
@@ -110,7 +110,7 @@ do_stage() {
}
do_install() {
- install -d ${D}${palmtopdir}/bin \
+ install -d ${D}${bindir} \
${D}${palmtopdir}/lib \
${D}${palmtopdir}/apps/1Pim \
${D}${palmtopdir}/pics/kdepim/korganizer/icons16 \
@@ -136,10 +136,10 @@ do_install() {
oe_libinstall -so -C ${S}/dest/ $f ${D}${palmtopdir}/lib
done
- install -m 0755 ${S}/dest/kopi ${D}${palmtopdir}/bin/kopi
- install -m 0755 ${S}/dest/kapi ${D}${palmtopdir}/bin/kapi
+ install -m 0755 ${S}/dest/kopi ${D}${bindir}/kopi
+ install -m 0755 ${S}/dest/kapi ${D}${bindir}/kapi
- install -d ${D}${bindir} ${D}${libdir}
+ install -d ${D}${libdir}
install -m 0755 ${S}/dest/kammu ${D}${bindir}/kammu
oe_libinstall -so -C ${S}/dest/ libmicrokammu ${D}${libdir}
@@ -152,11 +152,11 @@ do_install() {
PACKAGES = "libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu"
-FILES_kopi = "${palmtopdir}/bin/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* "
-FILES_kapi = "${palmtopdir}/bin/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*"
+FILES_kopi = "${bindir}/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* "
+FILES_kapi = "${bindir}/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*"
FILES_kopi-applet = "${palmtopdir}/plugins/applets/* ${palmtopdir}/pics/ko16.png ${palmtopdir}/pics/ko24.png"
-FILES_libmicrokabc = "${palmtopdir}/lib/libmicrokabc*"
-FILES_libmicrokcal = "${palmtopdir}/lib/libmicrokcal*"
-FILES_libmicrokdelibs = "${palmtopdir}/lib/*"
+FILES_libmicrokabc = "${palmtopdir}/lib/libmicrokabc.so.*"
+FILES_libmicrokcal = "${palmtopdir}/lib/libmicrokcal.so.*"
+FILES_libmicrokdelibs = "${palmtopdir}/lib/*.so.*"
FILES_kammu = "${bindir}/kammu"
FILES_libmicrokammu = "${libdir}/libmicrokammu*"
diff --git a/packages/kdepimpi/kdepimpi_2.2.7.bb b/packages/kdepimpi/kdepimpi_2.2.7.bb
index 6059bf8528..7252d0a6f1 100644
--- a/packages/kdepimpi/kdepimpi_2.2.7.bb
+++ b/packages/kdepimpi/kdepimpi_2.2.7.bb
@@ -1,6 +1,7 @@
SRC_URI = "${SOURCEFORGE_MIRROR}/kdepimpi/kdepimpi-${PV}.tar.gz \
- file://gcc4.patch;patch=1"
+ file://gcc4.patch;patch=1 \
+ file://qt-mt.patch;patch=1"
require kdepimpi-base.inc
-PR = "r1"
+PR = "r2"
diff --git a/packages/kdepimpi/pwmpi.inc b/packages/kdepimpi/pwmpi.inc
index c737d40e83..3866b70977 100644
--- a/packages/kdepimpi/pwmpi.inc
+++ b/packages/kdepimpi/pwmpi.inc
@@ -23,7 +23,7 @@ do_unstage() {
}
do_install() {
- install -d ${D}${palmtopdir}/bin \
+ install -d ${D}${bindir} \
${D}${palmtopdir}/apps/Applications \
${D}${palmtopdir}/pics/kdepim/pwmanager/icons16 \
${D}${palmtopdir}/pics/kdepim/pwmanager/icons22
@@ -33,8 +33,8 @@ do_install() {
install -m 0644 ${S}/bin/kdepim/pwmanager/icons22/*.png ${D}${palmtopdir}/pics/kdepim/pwmanager/icons22
install -m 0644 pwmanager/pwmanager/pwmanager.desktop ${D}${palmtopdir}/apps/Applications/pwmanager.desktop
- install -m 0755 ${S}/dest/pwmpi ${D}${palmtopdir}/bin/
+ install -m 0755 ${S}/dest/pwmpi ${D}${bindir}
}
PACKAGES = "${PN}"
-FILES_${PN} = "${palmtopdir}"
+FILES_${PN} = "${palmtopdir} ${bindir}"
diff --git a/packages/keylaunch/files/akita/keylaunchrc b/packages/keylaunch/files/akita/keylaunchrc
index 27cce24e93..9bb64db066 100644
--- a/packages/keylaunch/files/akita/keylaunchrc
+++ b/packages/keylaunch/files/akita/keylaunchrc
@@ -11,17 +11,17 @@ key=...*4:-:~display-brightness.sh up
# LCD Softkeys
# Please note that the space _between_ two softkeys can be used, too ;)
-#key=....F5:-:
-key=....F15:-:~matchbox-remote -next
-#key=....F6:-:
-key=....F16:-:sylpheed
-#key=....F7:-:
-key=....F17:-:gpe-contacts
-#key=....F8:-:
-key=....F18:-:gpe-calendar
-#key=....F19:-:
-#key=....F19:-:
-#key=....F10:-:
+#key=....F20:-:
+key=....F21:-:~matchbox-remote -next
+#key=....F22:-:
+key=....F23:-:sylpheed
+#key=....F24:-:
+key=....F25:-:gpe-contacts
+#key=....F26:-:
+key=....F27:-:gpe-calendar
+#key=....F28:-:
+#key=....F29:-:
+#key=....F30:-:
# VT changing
key=...*Left:-:~chvt 1
diff --git a/packages/keylaunch/files/makefile-fix.patch b/packages/keylaunch/files/makefile-fix.patch
index 30275001df..d9c57e05ac 100644
--- a/packages/keylaunch/files/makefile-fix.patch
+++ b/packages/keylaunch/files/makefile-fix.patch
@@ -1,11 +1,15 @@
---- /tmp/Makefile 2006-07-26 09:31:43.000000000 +0200
-+++ keylaunch-2.0.10/Makefile 2006-07-26 09:32:23.464411000 +0200
-@@ -31,7 +31,7 @@
+--- keylaunch-2.0.10/Makefile.orig 2007-05-25 18:13:39.000000000 +0200
++++ keylaunch-2.0.10/Makefile 2007-05-25 18:15:47.000000000 +0200
+@@ -31,8 +31,10 @@
$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
install-program: all
- install -sD $(PROG) $(DESTDIR)$(PREFIX)/bin/$(PROG)
-+ install -s -D $(PROG) $(DESTDIR)$(PREFIX)/bin/$(PROG)
- install -D -m 644 $(PROG)rc $(DESTDIR)/etc/$(PROG)rc
+- install -D -m 644 $(PROG)rc $(DESTDIR)/etc/$(PROG)rc
++ install -d $(DESTDIR)$(PREFIX)/bin
++ install -s $(PROG) $(DESTDIR)$(PREFIX)/bin/$(PROG)
++ install -d $(DESTDIR)/etc
++ install -m 644 $(PROG)rc $(DESTDIR)/etc/$(PROG)rc
install -d $(DESTDIR)/etc/X11/Xsession.d
install 90$(PROG) $(DESTDIR)/etc/X11/Xsession.d/90$(PROG)
+ install -d $(DESTDIR)/etc/X11/Xinit.d
diff --git a/packages/keylaunch/files/spitz/keylaunchrc b/packages/keylaunch/files/spitz/keylaunchrc
index 433221a586..9bb64db066 100644
--- a/packages/keylaunch/files/spitz/keylaunchrc
+++ b/packages/keylaunch/files/spitz/keylaunchrc
@@ -1,5 +1,5 @@
-key=....F9:-:gpe-contacts
-key=....F10:-:gpe-calendar
+key=....F9:-:gpe-calendar
+key=....F10:-:gpe-contacts
key=....F13:-:sylpheed
key=....F12:-:~matchbox-remote -next
key=...*F12:-:~matchbox-remote -desktop
@@ -11,17 +11,17 @@ key=...*4:-:~display-brightness.sh up
# LCD Softkeys
# Please note that the space _between_ two softkeys can be used, too ;)
-#key=....F5:-:
-key=....F15:-:~matchbox-remote -next
-#key=....F6:-:
-key=....F16:-:sylpheed
-#key=....F7:-:
-key=....F17:-:gpe-contacts
-#key=....F8:-:
-key=....F18:-:gpe-calendar
-#key=....F19:-:
-#key=....F19:-:
-#key=....F10:-:
+#key=....F20:-:
+key=....F21:-:~matchbox-remote -next
+#key=....F22:-:
+key=....F23:-:sylpheed
+#key=....F24:-:
+key=....F25:-:gpe-contacts
+#key=....F26:-:
+key=....F27:-:gpe-calendar
+#key=....F28:-:
+#key=....F29:-:
+#key=....F30:-:
# VT changing
key=...*Left:-:~chvt 1
diff --git a/packages/keylaunch/keylaunch_2.0.10.bb b/packages/keylaunch/keylaunch_2.0.10.bb
index 8b6d2b5aa2..f7d63968ac 100644
--- a/packages/keylaunch/keylaunch_2.0.10.bb
+++ b/packages/keylaunch/keylaunch_2.0.10.bb
@@ -1,7 +1,10 @@
inherit gpe
-DEPENDS = "virtual/xserver libxtst libxau libxpm libgpelaunch"
-RDEPENDS_append_openzaurus = " display-brightness"
+DEPENDS = "virtual/xserver libxtst libxau libxpm libgpelaunch display-brightness"
+
+RDEPENDS_append_spitz = " display-brightness"
+RDEPENDS_append_akita = " display-brightness"
+RDEPENDS_append_c7x0 = " display-brightness"
SECTION = "gpe"
LICENSE = "GPL"
@@ -12,13 +15,17 @@ DESCRIPTION = "A small utility for binding commands to a hot key.\
program is already running, keylaunch can bring its window to the front\
rather than just running another copy."
PACKAGE_ARCH = "${MACHINE_ARCH}"
-PR = "r7"
+PR = "r12"
SRC_URI += " file://keylaunchrc"
SRC_URI += " file://makefile-fix.patch;patch=1"
+SRC_URI += " file://80chvt-SUID"
do_install_prepend () {
install ${WORKDIR}/keylaunchrc ${S}/keylaunchrc
+
+ install -d ${D}/etc/X11/Xinit.d
+ install ${WORKDIR}/80chvt-SUID ${D}/etc/X11/Xinit.d
}
do_install_append() {
diff --git a/packages/keymaps/files/collie/keymap-2.6.map b/packages/keymaps/files/collie/keymap-2.6.map
index 9aca5abb38..13eb7d2881 100644
--- a/packages/keymaps/files/collie/keymap-2.6.map
+++ b/packages/keymaps/files/collie/keymap-2.6.map
@@ -6,7 +6,6 @@
# as Altgr, and simply use a proper keymap. Said keymap is as
# follows.
# keymaps 0-2,4-5,8,12,20
-keycode 1 = Escape Escape
keycode 14 = BackSpace
shift keycode 14 = BackSpace
control keycode 14 = Delete
@@ -147,7 +146,7 @@ keycode 53 = slash
control keycode 53 = Num_Lock
shiftl control keycode 53 = Num_Lock
control shiftr keycode 53 = Num_Lock
-keycode 54 = Shift
+keycode 54 = AltGr
keycode 55 = KP_Multiply
keycode 56 = Alt
keycode 57 = space
@@ -155,7 +154,7 @@ keycode 57 = space
control keycode 57 = nul
shiftl control keycode 57 = grave
control shiftr keycode 57 = grave
-keycode 97 = Control
+keycode 67 = Control
keycode 99 = Control_backslash
control keycode 99 = Control_backslash
keycode 100 = AltGr
@@ -164,6 +163,7 @@ keycode 105 = Left
keycode 106 = Right
keycode 107 = Select
keycode 108 = Down
+keycode 116 = Escape
string F1 = "\033[[A"
string F2 = "\033[[B"
string F3 = "\033[[C"
diff --git a/packages/keymaps/files/jornada6xx/keymap-uk.map b/packages/keymaps/files/jornada6xx/keymap-uk.map
index 4f511c8847..a7bb082464 100644
--- a/packages/keymaps/files/jornada6xx/keymap-uk.map
+++ b/packages/keymaps/files/jornada6xx/keymap-uk.map
@@ -26,14 +26,14 @@ keycode 7 = six asciicircum
alt keycode 7 = Meta_six
keycode 8 = seven ampersand braceleft
control keycode 8 = Control_underscore
- alt keycode 8 = KP_7
+ altgr keycode 8 = KP_7
keycode 9 = eight asterisk bracketleft
control keycode 9 = Delete
- alt keycode 9 = KP_8
+ altgr keycode 9 = KP_8
keycode 10 = nine parenleft bracketright
- alt keycode 10 = KP_9
+ altgr keycode 10 = KP_9
keycode 11 = zero parenright braceright
- alt keycode 11 = KP_Divide
+ altgr keycode 11 = KP_Divide
keycode 12 = minus underscore backslash
control keycode 11 = Control_underscore
shift control keycode 11 = Control_underscore
@@ -52,13 +52,13 @@ keycode 18 = e
keycode 19 = r
keycode 20 = t
keycode 21 = y
- alt keycode 21 = KP_4
+ altgr keycode 21 = KP_4
keycode 22 = u
- alt keycode 22 = KP_5
+ altgr keycode 22 = KP_5
keycode 23 = i
- alt keycode 23 = KP_6
+ altgr keycode 23 = KP_6
keycode 24 = o
- alt keycode 24 = KP_Multiply
+ altgr keycode 24 = KP_Multiply
keycode 25 = p
AltGr keycode 25 = braceleft
keycode 26 = backslash bar
@@ -73,13 +73,13 @@ keycode 32 = d
keycode 33 = f
keycode 34 = g
keycode 35 = h
- alt keycode 35 = KP_1
+ altgr keycode 35 = KP_1
keycode 36 = j
- alt keycode 36 = KP_2
+ altgr keycode 36 = KP_2
keycode 37 = k
- alt keycode 37 = KP_3
+ altgr keycode 37 = KP_3
keycode 38 = l
- alt keycode 38 = KP_Subtract
+ altgr keycode 38 = KP_Subtract
keycode 39 = semicolon colon bracketleft
alt keycode 39 = Meta_semicolon
keycode 40 = apostrophe quotedbl bracketright
@@ -98,14 +98,14 @@ keycode 46 = c
keycode 47 = v
keycode 48 = b
keycode 49 = n
- alt keycode 49 = KP_0
+ altgr keycode 49 = KP_0
keycode 50 = m
- alt keycode 50 = KP_Comma
+ altgr keycode 50 = KP_Comma
keycode 51 = comma less
- alt keycode 51 = KP_Period
+ altgr keycode 51 = KP_Period
keycode 52 = period greater
control keycode 52 = Compose
- alt keycode 52 = KP_Add
+ altgr keycode 52 = KP_Add
keycode 54 = Shift
keycode 56 = Alt
keycode 57 = space space
@@ -180,11 +180,11 @@ keycode 115 = slash question
alt keycode 115 = Meta_slash
keycode 123 = AltGr
keycode 219 = Insert
-string F1 = "\033[[A"
-string F2 = "\033[[B"
-string F3 = "\033[[C"
-string F4 = "\033[[D"
-string F5 = "\033[[E"
+string F1 = "\033[11~"
+string F2 = "\033[12~"
+string F3 = "\033[13~"
+string F4 = "\033[14~"
+string F5 = "\033[15~"
string F6 = "\033[17~"
string F7 = "\033[18~"
string F8 = "\033[19~"
diff --git a/packages/keymaps/keymaps_1.0.bb b/packages/keymaps/keymaps_1.0.bb
index 08fbc1eed5..0508facaa6 100644
--- a/packages/keymaps/keymaps_1.0.bb
+++ b/packages/keymaps/keymaps_1.0.bb
@@ -3,7 +3,7 @@ SECTION = "base"
RDEPENDS = "initscripts console-tools"
LICENSE = "GPL"
PACKAGE_ARCH = "${MACHINE}"
-PR = "r13"
+PR = "r14"
inherit update-rc.d
diff --git a/packages/kismet/kismet-2006-04-R1/no-chmod.patch b/packages/kismet/kismet-2006-04-R1/no-chmod.patch
deleted file mode 100644
index b22c513b68..0000000000
--- a/packages/kismet/kismet-2006-04-R1/no-chmod.patch
+++ /dev/null
@@ -1,173 +0,0 @@
---- kismet-2006-04-R1/Makefile.in.orig 2006-09-14 11:37:20.000000000 +0100
-+++ kismet-2006-04-R1/Makefile.in 2006-09-14 11:38:01.000000000 +0100
-@@ -130,52 +130,52 @@
- fi
-
- binuserinstall:
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(PS) $(BIN)/$(PS);
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(DRONE) $(BIN)/$(DRONE);
-+ install -m 755 $(PS) $(BIN)/$(PS);
-+ install -m 755 $(DRONE) $(BIN)/$(DRONE);
-
- binsuidinstall:
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 4755 $(PS) $(BIN)/$(PS);
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 4755 $(DRONE) $(BIN)/$(DRONE);
-+ install -m 4755 $(PS) $(BIN)/$(PS);
-+ install -m 4755 $(DRONE) $(BIN)/$(DRONE);
-
- commoninstall:
- mkdir -p $(ETC)
- mkdir -p $(BIN)
-
-- install -o $(INSTUSR) -g $(INSTGRP) -m 755 scripts/kismet $(BIN)/kismet
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(NC) $(BIN)/$(NC)
-- # install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(HOPPER) $(BIN)/$(HOPPER)
-+ install -m 755 scripts/kismet $(BIN)/kismet
-+ install -m 755 $(NC) $(BIN)/$(NC)
-+ # install -m 755 $(HOPPER) $(BIN)/$(HOPPER)
- @if test "$(ZAURUS)" = "yes"; then \
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(BUZZER) $(BIN)/buzzme; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(BUZZER) $(BIN)/buzzme; \
-+ install -m 755 $(BUZZER) $(BIN)/buzzme; \
-+ echo install -m 755 $(BUZZER) $(BIN)/buzzme; \
- fi
--#install -o $(INSTUSR) -g $(INSTGRP) -m 755 scripts/kismet_monitor $(BIN)/kismet_monitor
--#install -o $(INSTUSR) -g $(INSTGRP) -m 755 scripts/kismet_unmonitor $(BIN)/kismet_unmonitor
-+#install -m 755 scripts/kismet_monitor $(BIN)/kismet_monitor
-+#install -m 755 scripts/kismet_unmonitor $(BIN)/kismet_unmonitor
- mkdir -p $(MAN)/man1
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet.1 $(MAN)/man1/kismet.1
-- # install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_monitor.1 $(MAN)/man1/kismet_monitor.1
-- # install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_hopper.1 $(MAN)/man1/kismet_hopper.1
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_drone.1 $(MAN)/man1/kismet_drone.1
-+ install -m 644 man/kismet.1 $(MAN)/man1/kismet.1
-+ # install -m 644 man/kismet_monitor.1 $(MAN)/man1/kismet_monitor.1
-+ # install -m 644 man/kismet_hopper.1 $(MAN)/man1/kismet_hopper.1
-+ install -m 644 man/kismet_drone.1 $(MAN)/man1/kismet_drone.1
- mkdir -p $(MAN)/man5
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet.conf.5 $(MAN)/man5/kismet.conf.5
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_ui.conf.5 $(MAN)/man5/kismet_ui.conf.5
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_drone.conf.5 $(MAN)/man5/kismet_drone.conf.5
-+ install -m 644 man/kismet.conf.5 $(MAN)/man5/kismet.conf.5
-+ install -m 644 man/kismet_ui.conf.5 $(MAN)/man5/kismet_ui.conf.5
-+ install -m 644 man/kismet_drone.conf.5 $(MAN)/man5/kismet_drone.conf.5
-
- @if test "$(GPSLBUILD)" = "$(GPSL)"; then \
-- install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(GPSL) $(BIN)/$(GPSL); \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -s -m 755 $(GPSL) $(BIN)/$(GPSL); \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 755 scripts/gpsmap-helper-earthamaps $(BIN)/gpsmap-helper-earthamaps; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 755 scripts/gpsmap-helper-earthamaps $(BIN)/gpsmap-helper-earthamaps; \
-- install -o $(INSTUSR) -g $(MANGRP) -m 644 man/gpsmap.1 $(MAN)/man1/gpsmap.1; \
-- echo install -o $(INSTUSR) -g $(MANGRP) -m 644 man/gpsmap.1 $(MAN)/man1/gpsmap.1; \
-+ install -m 755 $(GPSL) $(BIN)/$(GPSL); \
-+ echo install -m 755 $(GPSL) $(BIN)/$(GPSL); \
-+ install -m 755 scripts/gpsmap-helper-earthamaps $(BIN)/gpsmap-helper-earthamaps; \
-+ echo install -m 755 scripts/gpsmap-helper-earthamaps $(BIN)/gpsmap-helper-earthamaps; \
-+ install -m 644 man/gpsmap.1 $(MAN)/man1/gpsmap.1; \
-+ echo install -m 644 man/gpsmap.1 $(MAN)/man1/gpsmap.1; \
- fi
-
- mkdir -p $(WAV)
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/new_network.wav $(WAV)/new_network.wav
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/traffic.wav $(WAV)/traffic.wav
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/junk_traffic.wav $(WAV)/junk_traffic.wav
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/alert.wav $(WAV)/alert.wav
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/ap_manuf $(ETC)/ap_manuf;
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/client_manuf $(ETC)/client_manuf;
-+ install -m 644 wav/new_network.wav $(WAV)/new_network.wav
-+ install -m 644 wav/traffic.wav $(WAV)/traffic.wav
-+ install -m 644 wav/junk_traffic.wav $(WAV)/junk_traffic.wav
-+ install -m 644 wav/alert.wav $(WAV)/alert.wav
-+ install -m 644 conf/ap_manuf $(ETC)/ap_manuf;
-+ install -m 644 conf/client_manuf $(ETC)/client_manuf;
-
- @if test -f $(BIN)/kismet_curses; then \
- echo "Removing old kismet_curses binary. The panels frontend is now kismet_client."; \
-@@ -188,22 +188,22 @@
- @if test -f $(ETC)/kismet.conf; then \
- $(MAKE) -e checkconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ echo install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo "Installed config into $(ETC)/kismet.conf."; \
- fi
- @if test -f $(ETC)/kismet_drone.conf; then \
- $(MAKE) -e checkdroneconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ echo install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo "Installed drone config into $(ETC)/kismet_drone.conf."; \
- fi
- @if test -f $(ETC)/kismet_ui.conf; then \
- $(MAKE) -e checkuiconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ echo install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
- echo "Installed UI config into $(ETC)/kismet_ui.conf."; \
- fi
- @echo "Installed kismet into $(BIN)/."
-@@ -221,22 +221,22 @@
- @if test -f $(ETC)/kismet.conf; then \
- $(MAKE) -e checkconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ echo install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo "Installed config into $(ETC)/kismet.conf."; \
- fi
- @if test -f $(ETC)/kismet_drone.conf; then \
- $(MAKE) -e checkdroneconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ echo install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo "Installed drone config into $(ETC)/kismet_drone.conf."; \
- fi
- @if test -f $(ETC)/kismet_ui.conf; then \
- $(MAKE) -e checkuiconfig; \
- else \
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ echo install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
- echo "Installed UI config into $(ETC)/kismet_ui.conf."; \
- fi
- @echo "Installed kismet into $(BIN)/."
-@@ -252,11 +252,11 @@
- forceinstall: $(PS)
- $(MAKE) -e commoninstall
- $(MAKE) -e binuserinstall
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo "Installed config into $(ETC)/kismet.conf.";
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo "Installed drone config into $(ETC)/kismet_drone.conf.";
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
- echo "Installed UI config into $(ETC)/kismet_ui.conf.";
- @echo "Installed kismet into $(BIN)/."
- @echo "If you have not done so already, read the README file and the FAQ file. Additional"
-@@ -271,11 +271,11 @@
- suidforceinstall: $(PS)
- $(MAKE) -e commoninstall
- $(MAKE) -e binsuidinstall
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ install -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo "Installed config into $(ETC)/kismet.conf.";
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ install -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo "Installed drone config into $(ETC)/kismet_drone.conf.";
-- install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
-+ install -m 644 conf/kismet_ui.conf $(ETC)/kismet_ui.conf; \
- echo "Installed UI config into $(ETC)/kismet_ui.conf.";
- @echo "Installed kismet into $(BIN)/."
- @echo "If you have not done so already, read the README file and the FAQ file. Additional"
diff --git a/packages/kismet/kismet_2005-04-R1.bb b/packages/kismet/kismet_2005-04-R1.bb
deleted file mode 100644
index 2b29af51df..0000000000
--- a/packages/kismet/kismet_2005-04-R1.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SECTION = "console/network"
-DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system"
-HOMEPAGE = "http://www.kismetwireless.net/"
-LICENSE = "GPLv2"
-DEPENDS = "expat gmp"
-
-SRC_URI = "http://www.kismetwireless.net/code/kismet-2005-04-R1.tar.gz \
- file://no-strip.diff;patch=1;pnum=0 \
- file://no-chmod.diff;patch=1;pnum=0 \
- file://glibc3.3.2-getopt-throw.diff;patch=1;pnum=0"
-
-
-EXTRA_OECONF = "--with-pcap=linux --disable-setuid --with-linuxheaders=${STAGING_KERNEL_DIR}/include"
-
-inherit autotools
-
-do_configure() {
- oe_runconf
-}
-
-do_install_append() {
- if test -e ${WORKDIR}/kismet.conf; then
- install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/
- fi
-}
-
-PACKAGES =+ "kismet-sounds"
-FILES_kismet-sounds = "/usr/share/kismet/wav"
-
-CONFFILES_${PN}_nylon = "${sysconfdir}/kismet.conf"
diff --git a/packages/kismet/kismet_2005-08-R1.bb b/packages/kismet/kismet_2005-08-R1.bb
deleted file mode 100644
index c5e58b6edb..0000000000
--- a/packages/kismet/kismet_2005-08-R1.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SECTION = "console/network"
-DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system"
-HOMEPAGE = "http://www.kismetwireless.net/"
-LICENSE = "GPLv2"
-DEPENDS = "expat gmp"
-
-SRC_URI = "http://www.kismetwireless.net/code/kismet-2005-08-R1.tar.gz \
- file://no-strip.diff;patch=1;pnum=0 \
- file://no-chmod.diff;patch=1;pnum=0 \
- file://glibc3.3.2-getopt-throw.diff;patch=1;pnum=0"
-
-
-EXTRA_OECONF = "--with-pcap=linux --disable-setuid --with-linuxheaders=${STAGING_KERNEL_DIR}/include"
-
-inherit autotools
-
-do_configure() {
- oe_runconf
-}
-
-do_install_append() {
- if test -e ${WORKDIR}/kismet.conf; then
- install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/
- fi
-}
-
-PACKAGES =+ "kismet-sounds"
-FILES_kismet-sounds = "/usr/share/kismet/wav"
-
-CONFFILES_${PN}_nylon = "${sysconfdir}/kismet.conf"
diff --git a/packages/kismet/kismet_2006-04-R1.bb b/packages/kismet/kismet_2006-04-R1.bb
deleted file mode 100644
index aa51f2afa9..0000000000
--- a/packages/kismet/kismet_2006-04-R1.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-SECTION = "console/network"
-DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, and intrusion detection system"
-HOMEPAGE = "http://www.kismetwireless.net/"
-LICENSE = "GPLv2"
-DEPENDS = "expat gmp"
-
-SRC_URI = "http://www.kismetwireless.net/code/kismet-2006-04-R1.tar.gz \
- file://no-chmod.patch;patch=1"
-
-
-EXTRA_OECONF = "--with-pcap=linux --disable-setuid --with-linuxheaders=${STAGING_KERNEL_DIR}/include"
-
-inherit autotools
-
-do_configure() {
- oe_runconf
-}
-
-do_install_append() {
- if test -e ${WORKDIR}/kismet.conf; then
- install -m 644 ${WORKDIR}/kismet.conf ${D}${sysconfdir}/
- fi
-}
-
-PACKAGES =+ "kismet-sounds"
-FILES_kismet-sounds = "/usr/share/kismet/wav"
-
-CONFFILES_${PN}_nylon = "${sysconfdir}/kismet.conf"
diff --git a/packages/kismet/kismet_2007-01-R1b.bb b/packages/kismet/kismet_2007-01-R1b.bb
index 774e71e286..5c10300573 100644
--- a/packages/kismet/kismet_2007-01-R1b.bb
+++ b/packages/kismet/kismet_2007-01-R1b.bb
@@ -8,7 +8,7 @@ SRC_URI = "http://www.kismetwireless.net/code/kismet-2007-01-R1b.tar.gz \
file://no-chmod.patch;patch=1"
-EXTRA_OECONF = "--with-pcap=linux --disable-setuid --with-linuxheaders=${STAGING_KERNEL_DIR}/include"
+EXTRA_OECONF = "--with-pcap=linux --disable-setuid --with-linuxheaders=${STAGING_KERNEL_DIR}/include --disable-gpsmap"
inherit autotools
diff --git a/packages/xfwm4/.mtn2git_empty b/packages/konqueror/konqueror-embedded-20070212/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xfwm4/.mtn2git_empty
+++ b/packages/konqueror/konqueror-embedded-20070212/.mtn2git_empty
diff --git a/packages/konqueror/konqueror-embedded-20070212/dont-use-kde-config.patch b/packages/konqueror/konqueror-embedded-20070212/dont-use-kde-config.patch
new file mode 100644
index 0000000000..c9f40c8a5f
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded-20070212/dont-use-kde-config.patch
@@ -0,0 +1,43 @@
+--- ./acinclude.m4
++++ ./acinclude.m4
+@@ -4937,31 +4937,11 @@ AC_DEFUN([KDE_SET_PREFIX],
+ AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix})
+
+ KDE_SET_DEFAULT_BINDIRS
+- if test "x$prefix" = "xNONE"; then
+- dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it
+- KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+- else
+- dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH
+- kde_save_PATH="$PATH"
+- PATH="$exec_prefix/bin:$prefix/bin:$PATH"
+- KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+- PATH="$kde_save_PATH"
+- fi
+-
+- kde_libs_prefix=`$KDECONFIG --prefix`
+- if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then
+- AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs.
+- This means it has been moved since you installed it.
+- This won't work. Please recompile kdelibs for the new prefix.
+- ])
+- fi
+- kde_libs_htmldir=`$KDECONFIG --install html --expandvars`
+- kde_libs_suffix=`$KDECONFIG --libsuffix`
+
+ AC_MSG_CHECKING([where to install])
+ if test "x$prefix" = "xNONE"; then
+ prefix=$kde_libs_prefix
+- AC_MSG_RESULT([$prefix (as returned by kde-config)])
++ AC_MSG_RESULT([$prefix (as NOT returned by kde-config)])
+ else
+ dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different
+ given_prefix=$prefix
+@@ -4973,7 +4953,6 @@ AC_DEFUN([KDE_SET_PREFIX],
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+- AC_SUBST(KDECONFIG)
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+
diff --git a/packages/konqueror/konqueror-embedded-20070212/konqe-kapplication.patch b/packages/konqueror/konqueror-embedded-20070212/konqe-kapplication.patch
new file mode 100644
index 0000000000..6feb0060c5
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded-20070212/konqe-kapplication.patch
@@ -0,0 +1,12 @@
+diff -Naur kdenox-orig/konq-embed/dropin/kapplication.h kdenox/konq-embed/dropin/kapplication.h
+--- kdenox-orig/konq-embed/dropin/kapplication.h 2007-02-12 10:25:57.000000000 +0100
++++ kdenox/konq-embed/dropin/kapplication.h 2007-03-15 06:07:32.000000000 +0100
+@@ -122,7 +122,7 @@
+ // required since kdelibs 3.4
+ void updateUserTimestamp(unsigned long = 0) {}
+
+- static int KApplication::startDragDistance();
++ static int startDragDistance();
+
+ signals:
+ // required by KHTMLView
diff --git a/packages/konqueror/konqueror-embedded-20070212/konqe_new_opie.patch b/packages/konqueror/konqueror-embedded-20070212/konqe_new_opie.patch
new file mode 100644
index 0000000000..1079d23fbf
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded-20070212/konqe_new_opie.patch
@@ -0,0 +1,756 @@
+diff -urNd --exclude-from=excludelist kdenox/acinclude.m4 kdenox_new/acinclude.m4
+--- kdenox/acinclude.m4 2007-02-12 22:26:21.000000000 +1300
++++ kdenox_new/acinclude.m4 2007-02-25 22:00:27.000000000 +1300
+@@ -880,7 +880,7 @@
+ )
+
+ AC_ARG_ENABLE(
+- embedded,
++ rtti-embedded,
+ AC_HELP_STRING([--enable-rtti-embedded],[enable rtti support for Qt-embedded]),
+ kde_use_qt_emb_rtti=$enableval,
+ kde_use_qt_emb_rtti=no
+diff -urNd --exclude-from=excludelist kdenox/configure.in kdenox_new/configure.in
+--- kdenox/configure.in 2007-02-12 22:26:21.000000000 +1300
++++ kdenox_new/configure.in 2007-02-25 17:49:59.000000000 +1300
+@@ -60,10 +60,10 @@
+
+
+ if test "x$want_qpe" = "xyes"; then
+- AC_PATH_QTOPIA(2.1.1)
++ AC_PATH_QTOPIA(1.0.0)
+ dnl hack
+ CXXFLAGS="$CXXFLAGS -D_QT_QPE_"
+- LIB_QTOPIA="$LIB_QTOPIA -lqtopia -lqtopia2"
++ dnl LIB_QTOPIA="$LIB_QTOPIA -lqtopia -lqtopia2"
+ fi
+
+ dnl Checks for header files.
+diff -urNd --exclude-from=excludelist kdenox/configure.in.in kdenox_new/configure.in.in
+--- kdenox/configure.in.in 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/configure.in.in 2007-02-25 17:49:27.000000000 +1300
+@@ -56,10 +56,10 @@
+
+
+ if test "x$want_qpe" = "xyes"; then
+- AC_PATH_QTOPIA(2.1.1)
++ AC_PATH_QTOPIA(1.0.0)
+ dnl hack
+ CXXFLAGS="$CXXFLAGS -D_QT_QPE_"
+- LIB_QTOPIA="$LIB_QTOPIA -lqtopia -lqtopia2"
++ dnl LIB_QTOPIA="$LIB_QTOPIA -lqtopia -lqtopia2"
+ fi
+
+ dnl Checks for header files.
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/dropin/kfiledialog.cpp kdenox_new/konq-embed/dropin/kfiledialog.cpp
+--- kdenox/konq-embed/dropin/kfiledialog.cpp 2007-02-12 22:25:57.000000000 +1300
++++ kdenox_new/konq-embed/dropin/kfiledialog.cpp 2007-02-24 03:29:25.000000000 +1300
+@@ -23,6 +23,7 @@
+
+
+ #include "kfiledialog.h"
++#include "kdebug.h"
+
+ #include <qlayout.h>
+ #include <qconfig.h>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/dropin/kio/kprotocolmanager.cpp kdenox_new/konq-embed/dropin/kio/kprotocolmanager.cpp
+--- kdenox/konq-embed/dropin/kio/kprotocolmanager.cpp 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/dropin/kio/kprotocolmanager.cpp 2007-02-24 03:32:31.000000000 +1300
+@@ -23,7 +23,9 @@
+ */
+
+ #include "kprotocolmanager.h"
++#include <kdebug.h>
+ #include <kglobal.h>
++#include <klocale.h>
+ #include <kconfig.h>
+ #include <ioslave_defaults.h>
+ #include <kdeversion.h>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/dropin/kio/progressbase.cpp kdenox_new/konq-embed/dropin/kio/progressbase.cpp
+--- kdenox/konq-embed/dropin/kio/progressbase.cpp 2007-02-12 22:25:56.000000000 +1300
++++ kdenox_new/konq-embed/dropin/kio/progressbase.cpp 2007-02-24 03:33:10.000000000 +1300
+@@ -18,6 +18,7 @@
+
+ #include "jobclasses.h"
+ #include "progressbase.h"
++#include <kdebug.h>
+
+ //namespace KIO {
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/ipkg/preinst kdenox_new/konq-embed/ipkg/preinst
+--- kdenox/konq-embed/ipkg/preinst 1970-01-01 12:00:00.000000000 +1200
++++ kdenox_new/konq-embed/ipkg/preinst 2007-02-25 21:20:10.000000000 +1300
+@@ -0,0 +1,15 @@
++#!/bin/sh
++
++prefix=/usr/kde/3.5
++prunefiles="lib/libkhtml.la lib/libkhtml.so lib/libkhtml.so.4.0.0"
++prunefiles="$prunefiles lib/libkhtml.so.4"
++prunefiles="$prunefiles lib/kjs_html.la lib/kjs_html.so"
++
++for _file in $prunefiles; do
++ file=$PKG_ROOT/$prefix/$_file;
++ if [ -f $file ]; then
++ echo "found old file $_file from b0rked konqueror ipkg. removing."
++ rm -f $file
++ fi
++done
++
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/kdecore/kmultipledrag.h kdenox_new/konq-embed/kdesrc/kdecore/kmultipledrag.h
+--- kdenox/konq-embed/kdesrc/kdecore/kmultipledrag.h 2007-02-12 21:31:39.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/kdecore/kmultipledrag.h 2007-02-25 16:15:28.000000000 +1300
+@@ -26,6 +26,8 @@
+ #include <qvaluelist.h>
+ #include "kdelibs_export.h"
+
++#define QPtrList QList
++
+ class KMultipleDragPrivate;
+ /**
+ * This class makes it easy for applications to provide a drag object
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/css/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/css/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/css/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/css/Makefile.am 2007-02-25 16:36:23.000000000 +1300
+@@ -39,7 +39,7 @@
+ INCLUDES = -I$(top_srcdir)/kimgio -I$(top_srcdir)/kio -I$(top_srcdir)/dcop \
+ -I$(top_srcdir)/khtml -I$(top_srcdir)/libltdl -I$(top_srcdir) \
+ -I$(top_srcdir)/kwallet/client -I$(top_srcdir)/kutils \
+- -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ cssdir = $(kde_datadir)/khtml/css
+ css_DATA = html4.css quirks.css
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/dom/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/dom/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/dom/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/dom/Makefile.am 2007-02-25 16:35:07.000000000 +1300
+@@ -47,7 +47,7 @@
+ # css_extensions.h
+
+ INCLUDES = -I$(top_srcdir)/kimgio -I$(top_srcdir)/kio -I$(top_srcdir)/dcop \
+- -I$(top_srcdir)/khtml -I$(top_srcdir) -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_srcdir)/khtml -I$(top_srcdir) -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ SRCDOC_DEST=$(kde_htmldir)/en/kdelibs/khtml
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/ecma/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/ecma/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/ecma/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/ecma/Makefile.am 2007-02-25 17:24:35.000000000 +1300
+@@ -16,7 +16,7 @@
+ # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ # Boston, MA 02110-1301, USA.
+
+-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/kio -I$(top_srcdir)/kio/bookmarks -I$(top_srcdir)/khtml -I$(top_srcdir)/khtml/java -I$(top_srcdir)/kwallet/client -I$(top_srcdir)/kutils -I$(top_builddir)/kjs -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/kio -I$(top_srcdir)/kio/bookmarks -I$(top_srcdir)/khtml -I$(top_srcdir)/khtml/java -I$(top_srcdir)/kwallet/client -I$(top_srcdir)/kutils -I$(top_builddir)/kjs -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ KDE_CXXFLAGS = $(USE_EXCEPTIONS)
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/ecma/xmlhttprequest.cpp kdenox_new/konq-embed/kdesrc/khtml/ecma/xmlhttprequest.cpp
+--- kdenox/konq-embed/kdesrc/khtml/ecma/xmlhttprequest.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/ecma/xmlhttprequest.cpp 2007-02-25 17:27:39.000000000 +1300
+@@ -38,6 +38,10 @@
+ #include <qobject.h>
+ #include <kdebug.h>
+
++#if (QT_VERSION < 0x030000)
++#include "qt3regexp.h"
++#endif
++
+ #ifdef APPLE_CHANGES
+ #include "KWQLoader.h"
+ #else
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/html/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/html/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/html/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/html/Makefile.am 2007-02-25 16:39:50.000000000 +1300
+@@ -43,7 +43,7 @@
+ -I$(top_srcdir)/kio/kssl \
+ -I$(top_srcdir)/kjs -I$(top_srcdir)/khtml -I$(top_srcdir) \
+ -I$(top_srcdir)/kwallet/client -I$(top_srcdir)/kutils \
+- -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ # Use "make doctypes" to regenerate doctypes.cpp from doctypes.gperf
+ doctypes: $(srcdir)/doctypes.gperf $(srcdir)/Makefile.am
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/khtml_part.cpp kdenox_new/konq-embed/kdesrc/khtml/khtml_part.cpp
+--- kdenox/konq-embed/kdesrc/khtml/khtml_part.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/khtml_part.cpp 2007-02-25 17:22:46.000000000 +1300
+@@ -3221,14 +3221,14 @@
+ {
+ khtml::RenderTextArea *parent= static_cast<khtml::RenderTextArea *>(obj->parent());
+ s = parent->text();
+- s = s.replace(0xa0, ' ');
++ s = s.replace(QRegExp(QString(QChar(0xa0))), ' ');
+ tmpTextArea = parent;
+ }
+ else if ( renderLineText )
+ {
+ khtml::RenderLineEdit *parentLine= static_cast<khtml::RenderLineEdit *>(obj);
+ s = parentLine->widget()->text();
+- s = s.replace(0xa0, ' ');
++ s = s.replace(QRegExp(QString(QChar(0xa0))), ' ');
+ }
+ else if ( obj->isText() )
+ {
+@@ -3256,7 +3256,7 @@
+ if ( isLink && obj->parent()!=tmpTextArea )
+ {
+ s = static_cast<khtml::RenderText *>(obj)->data().string();
+- s = s.replace(0xa0, ' ');
++ s = s.replace(QRegExp(QString(QChar(0xa0))), ' ');
+ }
+ }
+ else if ( obj->isBR() )
+@@ -6785,9 +6785,9 @@
+ // get selected text and paste to the clipboard
+ #ifndef QT_NO_CLIPBOARD
+ QString text = selectedText();
+- text.replace(QChar(0xa0), ' ');
++ text.replace(QRegExp(QString(QChar(0xa0))), " ");
+ disconnect( kapp->clipboard(), SIGNAL( selectionChanged()), this, SLOT( slotClearSelection()));
+- kapp->clipboard()->setText(text,QClipboard::Selection);
++ kapp->clipboard()->setText(text);
+ connect( kapp->clipboard(), SIGNAL( selectionChanged()), SLOT( slotClearSelection()));
+ #endif
+ //kdDebug( 6000 ) << "selectedText = " << text << endl;
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/misc/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/misc/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/misc/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/misc/Makefile.am 2007-02-25 16:33:47.000000000 +1300
+@@ -32,7 +32,7 @@
+ stringit.h htmlhashes.h helper.h shared.h arena.h
+
+ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/dcop -I$(top_srcdir)/kio -I$(top_srcdir)/libltdl \
+- -I$(top_srcdir)/khtml -I$(top_srcdir)/kutils -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_srcdir)/khtml -I$(top_srcdir)/kutils -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ SRCDOC_DEST=$(kde_htmldir)/en/kdelibs/khtml
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/rendering/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/rendering/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/rendering/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/rendering/Makefile.am 2007-02-25 16:40:50.000000000 +1300
+@@ -42,7 +42,7 @@
+ render_generated.h enumerate.h
+
+ INCLUDES = -I$(top_srcdir)/kimgio -I$(top_srcdir)/kio -I$(top_srcdir)/dcop \
+- -I$(top_srcdir)/kfile -I$(top_srcdir)/khtml -I$(top_srcdir)/kutils -I$(top_srcdir) -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_srcdir)/kfile -I$(top_srcdir)/khtml -I$(top_srcdir)/kutils -I$(top_srcdir) -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ SRCDOC_DEST=$(kde_htmldir)/en/kdelibs/khtml
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/rendering/render_layer.h kdenox_new/konq-embed/kdesrc/khtml/rendering/render_layer.h
+--- kdenox/konq-embed/kdesrc/khtml/rendering/render_layer.h 2007-02-12 21:31:42.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/rendering/render_layer.h 2007-02-25 16:56:00.000000000 +1300
+@@ -46,12 +46,14 @@
+
+ #include <qcolor.h>
+ #include <qrect.h>
++#include <qtextstream.h>
+ #include <assert.h>
+
+ #include "render_object.h"
+
+ class QScrollBar;
+-template <class T> class QPtrVector;
++template <class T> class QVector;
++#define QPtrVector QVector
+
+ namespace khtml {
+ class RenderStyle;
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/rendering/render_object.cpp kdenox_new/konq-embed/kdesrc/khtml/rendering/render_object.cpp
+--- kdenox/konq-embed/kdesrc/khtml/rendering/render_object.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/rendering/render_object.cpp 2007-02-25 16:44:58.000000000 +1300
+@@ -46,6 +46,7 @@
+ #include <kdebug.h>
+ #include <kglobal.h>
+ #include <qpainter.h>
++#include <qtextstream.h>
+ #include "khtmlview.h"
+ #include <khtml_part.h>
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/rendering/render_table.h kdenox_new/konq-embed/kdesrc/khtml/rendering/render_table.h
+--- kdenox/konq-embed/kdesrc/khtml/rendering/render_table.h 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/rendering/render_table.h 2007-02-25 16:56:49.000000000 +1300
+@@ -30,6 +30,7 @@
+ #include <qcolor.h>
+ #include <qptrvector.h>
+ #include <qmemarray.h>
++#include <qtextstream.h>
+
+ #include "rendering/render_box.h"
+ #include "rendering/render_block.h"
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/rendering/render_text.h kdenox_new/konq-embed/kdesrc/khtml/rendering/render_text.h
+--- kdenox/konq-embed/kdesrc/khtml/rendering/render_text.h 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/rendering/render_text.h 2007-02-25 16:46:39.000000000 +1300
+@@ -31,6 +31,7 @@
+ #include "rendering/render_line.h"
+
+ #include <qptrvector.h>
++#include <qtextstream.h>
+ #include <assert.h>
+
+ class QPainter;
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/khtml/xml/Makefile.am kdenox_new/konq-embed/kdesrc/khtml/xml/Makefile.am
+--- kdenox/konq-embed/kdesrc/khtml/xml/Makefile.am 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/khtml/xml/Makefile.am 2007-02-25 16:38:27.000000000 +1300
+@@ -37,7 +37,7 @@
+
+ INCLUDES = -I$(top_srcdir)/kimgio -I$(top_srcdir)/kio -I$(top_srcdir)/dcop \
+ -I$(top_srcdir)/khtml -I$(top_srcdir) -I$(top_srcdir)/kwallet/client \
+- -I$(top_srcdir)/kutils -I$(top_builddir)/kjs -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(X_INCLUDES) $(all_includes)
++ -I$(top_srcdir)/kutils -I$(top_builddir)/kjs -I$(top_builddir)/konq-embed/kdesrc -I$(top_builddir)/konq-embed/kdesrc/kssl -I$(top_srcdir)/konq-embed/dropin -I$(top_srcdir)/konq-embed/kdesrc/kio -I$(top_srcdir)/konq-embed/kdesrc/kdecore -I$(top_srcdir)/konq-embed/kdesrc/kutils -I$(srcdir)/../.. -I$(srcdir)/.. -I$(srcdir)/../misc -I$(srcdir)/../misc -I$(srcdir)/../css -I$(srcdir)/../dom -I$(srcdir)/../xml -I$(srcdir)/../html -I$(top_srcdir)/konq-embed/dropin/kio -I$(srcdir)/../.. -I$(srcdir)/../../kjs -I$(top_srcdir)/konq-embed/dropin/kssl -I$(srcdir)/../../../dropin/khtml -I$(top_srcdir)/konq-embed/dropin/khtml/java $(QT_INCLUDES) $(QTOPIA_INCLUDES) $(X_INCLUDES) $(all_includes)
+
+ SRCDOC_DEST=$(kde_htmldir)/en/kdelibs/khtml
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/kjs/dtoa.cpp kdenox_new/konq-embed/kdesrc/kjs/dtoa.cpp
+--- kdenox/konq-embed/kdesrc/kjs/dtoa.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/kjs/dtoa.cpp 2007-02-25 18:22:33.000000000 +1300
+@@ -1,4 +1,9 @@
+-#ifndef KONQ_EMBEDDED
++#include <config.h>
++
++#ifdef KONQ_EMBEDDED
++#include "stdlib.h"
++extern "C" double kjs_strtod(const char *s00, char **se) { return strtod(s00,se); }
++#else
+ /****************************************************************
+ *
+ * The author of this software is David M. Gay.
+@@ -175,8 +180,6 @@
+ #undef CONST
+ #endif
+
+-#include <config.h>
+-
+ #include "stdlib.h"
+
+ #ifdef WORDS_BIGENDIAN
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/kjs/dtoa.h kdenox_new/konq-embed/kdesrc/kjs/dtoa.h
+--- kdenox/konq-embed/kdesrc/kjs/dtoa.h 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/kjs/dtoa.h 2007-02-25 18:20:51.000000000 +1300
+@@ -23,14 +23,11 @@
+ #ifndef _KJS_DTOA_H_
+ #define _KJS_DTOA_H_
+
+-#ifndef KONQ_EMBEDDED
+ extern "C" double kjs_strtod(const char *s00, char **se);
++#ifndef KONQ_EMBEDDED
+ extern "C" char *kjs_dtoa(double d, int mode, int ndigits,
+ int *decpt, int *sign, char **rve);
+ extern "C" void kjs_freedtoa(char *s);
+-#else
+-#include "stdlib.h"
+-extern "C" double kjs_strtod(const char *s00, char **se) { return strtod(s00,se); }
+ #endif
+-
++
+ #endif /* _KJS_DTOA_H */
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/kjs/number_object.cpp kdenox_new/konq-embed/kdesrc/kjs/number_object.cpp
+--- kdenox/konq-embed/kdesrc/kjs/number_object.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/kjs/number_object.cpp 2007-02-25 18:05:36.000000000 +1300
+@@ -20,6 +20,8 @@
+ *
+ */
+
++#include <config.h>
++
+ #include "value.h"
+ #include "object.h"
+ #include "types.h"
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/kdesrc/kjs/ustring.cpp kdenox_new/konq-embed/kdesrc/kjs/ustring.cpp
+--- kdenox/konq-embed/kdesrc/kjs/ustring.cpp 2007-02-12 22:26:20.000000000 +1300
++++ kdenox_new/konq-embed/kdesrc/kjs/ustring.cpp 2007-02-25 18:10:22.000000000 +1300
+@@ -21,9 +21,7 @@
+ *
+ */
+
+-#ifdef HAVE_CONFIG_H
+ #include <config.h>
+-#endif
+
+ #include <stdlib.h>
+ #include <stdio.h>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/actions/konqe.rc kdenox_new/konq-embed/src/actions/konqe.rc
+--- kdenox/konq-embed/src/actions/konqe.rc 1970-01-01 12:00:00.000000000 +1200
++++ kdenox_new/konq-embed/src/actions/konqe.rc 2007-02-25 21:20:10.000000000 +1300
+@@ -0,0 +1,107 @@
++<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
++<kpartgui name="konqe" version="1">
++<Create>
++ <Action name="file_new" stdAction="true" icon="filenew.png"/>
++ <Action name="file_open" stdAction="true" icon="fileopen.png"/>
++ <Action name="file_save" stdAction="true" icon="filesave.png"/>
++ <Action name="file_save_as" stdAction="true" icon="filesaveas.png"/>
++ <Action name="file_print" stdAction="true" icon="fileprint.png"/>
++ <Action name="go_home" stdAction="true" icon="gohome.png"/>
++ <Action name="go_back" stdAction="true" icon="back.png"/>
++ <Action name="go_forward" stdAction="true" icon="forward.png"/>
++ <Action name="edit_undo" stdAction="true" icon="undo.png"/>
++ <Action name="edit_redo" stdAction="true" icon="redo.png"/>
++ <Action name="edit_cut" stdAction="true" icon="editcut.png"/>
++ <Action name="edit_copy" stdAction="true" icon="editcopy.png"/>
++ <Action name="edit_paste" stdAction="true" icon="editpaste.png"/>
++ <Action name="edit_find" stdAction="true" icon="find.png"/>
++ <Action name="view_redisplay" stdAction="true" icon="reload.png"/>
++ <Action name="view_zoom" stdAction="true" popupMenu="true" icon="viewmag.png"/>
++ <Action name="bookmark_add" stdAction="true" icon="bookmark_add.png"/>
++ <Action name="bookmark_edit" stdAction="true" accel="" icon="bookmark.png"/>
++ <Action name="options_configure" stdAction="true" icon="configure.png"/>
++</Create>
++<Create>
++ <Action name="windows" popupMenu="true" icon="window_list.png">
++ <text>Windows List</text>
++ </Action>
++ <Action name="view_close" accel="Ctrl+W" icon="fileclose.png">
++ <text>Close View</text>
++ </Action>
++ <Action name="view_next" accel="Ctrl+Tab" icon="2rightarrow.png">
++ <text>Next View</text>
++ </Action>
++ <Action name="view_autoload_images" toggle="true">
++ <text>Autoload Images</text>
++ </Action>
++ <Action name="go_stop" icon="stop.png">
++ <text>Stop Loading</text>
++ </Action>
++ <Action name="info_security" icon="lock.png">
++ <text>Show Security Information</text>
++ </Action>
++ <Action name="options_show_location" accel="F11" toggle="true">
++ <text>Show Location Bar</text>
++ </Action>
++ <Action name="options_show_sidebar" accel="F12" toggle="true">
++ <text>Show Side Bar</text>
++ </Action>
++ <Action name="options_show_statusbar" stdAction="true" accel="F10"/>
++ <Action name="main_menu" popupMenu="true" icon="gear.png">
++ <text>Main Menu</text>
++ </Action>
++ <Action name="view_load_images" icon="images_display.png">
++ <text>Load Images</text>
++ </Action>
++</Create>
++<Menu name="main_menu">
++ <Action name="file_new"/>
++ <Separator/>
++ <Action name="view_autoload_images"/>
++ <Action name="options_show_statusbar"/>
++ <Action name="options_show_location"/>
++ <Action name="options_show_sidebar"/>
++ <Separator/>
++ <Action name="edit_find"/>
++ <Separator/>
++ <Action name="options_configure"/>
++ <Separator/>
++ <Action name="bookmark_add"/>
++ <Action name="bookmark_edit"/>
++ <Action name="bookmarks"/>
++ <Separator/>
++ <Action name="view_next"/>
++ <Action name="view_close"/>
++</Menu>
++<ToolBar name="main_bar">
++ <Action name="main_menu"/>
++ <ToolBar name="browser_bar"/>
++ <ToolBar name="edit_bar"/>
++ <Spacer/>
++ <Action name="windows"/>
++</ToolBar>
++<ToolBar name="browser_bar" newline="true">
++ <Action name="file_print"/>
++ <Action name="go_back"/>
++ <Action name="go_forward"/>
++ <Action name="go_home"/>
++ <Action name="view_redisplay"/>
++ <Action name="go_stop"/>
++ <Separator/>
++ <Action name="info_security"/>
++ <Action name="view_zoom"/>
++ <Action name="view_load_images"/>
++</ToolBar>
++<ToolBar name="edit_bar" newline="true">
++ <Action name="file_open"/>
++ <Action name="file_save"/>
++ <Action name="file_save_as"/>
++ <Action name="file_print"/>
++ <Separator/>
++ <Action name="edit_undo"/>
++ <Action name="edit_redo"/>
++ <Action name="edit_cut"/>
++ <Action name="edit_copy"/>
++ <Action name="edit_paste"/>
++</ToolBar>
++</kpartgui>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarkeditimpl.cc kdenox_new/konq-embed/src/bookmarkeditimpl.cc
+--- kdenox/konq-embed/src/bookmarkeditimpl.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarkeditimpl.cc 2007-02-25 19:17:29.000000000 +1300
+@@ -24,6 +24,8 @@
+
+ #include "bookmarkeditimpl.h"
+
++#include <config.h>
++
+ #if defined(ENABLE_BOOKMARKS)
+
+ #include "mainwindowbase.h"
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarkeditor.cc kdenox_new/konq-embed/src/bookmarkeditor.cc
+--- kdenox/konq-embed/src/bookmarkeditor.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarkeditor.cc 2007-02-25 17:40:34.000000000 +1300
+@@ -16,6 +16,8 @@
+ #include <qimage.h>
+ #include <qpixmap.h>
+
++#include <kstandarddirs.h>
++
+ namespace
+ {
+ QPixmap getPngPixmap( const QString &name )
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarkeditorhierarchical.cc kdenox_new/konq-embed/src/bookmarkeditorhierarchical.cc
+--- kdenox/konq-embed/src/bookmarkeditorhierarchical.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarkeditorhierarchical.cc 2007-02-25 20:46:27.000000000 +1300
+@@ -22,11 +22,20 @@
+
+ */
+
++#include <config.h>
++
+ #if defined(ENABLE_BOOKMARKS)
+
++#include <xmltree.h>
++#include <qtoolbutton.h>
++#include <qlineedit.h>
++#include <qlabel.h>
++
+ #include "bookmarkeditorhierarchical.h"
+ #include <assert.h>
+ #include "bookmarks.h"
++#include "bookmarkeditimpl.h"
++
+
+ //////// HELPER FUNCTIONS /////////////////////////////////
+ namespace {
+@@ -204,7 +213,7 @@
+ void BookmarkEditorHierarchical::newFolder()
+ {
+ BookmarkEdit *edit = new BookmarkEdit( this );
+- edit->setCaption( i18n( "New Folder" ) );
++ edit->setCaption( tr( "New Folder" ) );
+ edit->location->setEnabled(false);
+ edit->location->hide();
+ edit->TextLabel2->hide();
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarkeditorhierarchical.h kdenox_new/konq-embed/src/bookmarkeditorhierarchical.h
+--- kdenox/konq-embed/src/bookmarkeditorhierarchical.h 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarkeditorhierarchical.h 2007-02-25 18:27:17.000000000 +1300
+@@ -22,9 +22,10 @@
+ #ifndef __bookmarkeditorhierarchical_h__
+ #define __bookmarkeditorhierarchical_h__
+
++#include <config.h>
++
+ #if defined(ENABLE_BOOKMARKS)
+
+-#include <config.h>
+ #include "bookmarkeditorimpl.h"
+
+ class XMLElement;
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarkeditorimpl.cc kdenox_new/konq-embed/src/bookmarkeditorimpl.cc
+--- kdenox/konq-embed/src/bookmarkeditorimpl.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarkeditorimpl.cc 2007-02-25 19:16:40.000000000 +1300
+@@ -23,12 +23,12 @@
+
+ #include "bookmarkeditorimpl.h"
+
++#include <config.h>
++
+ #if defined(ENABLE_BOOKMARKS)
+
+ #include "bookmarkeditimpl.h"
+
+-#include <config.h>
+-
+ #include "bookmarks.h"
+ #include "xmltree.h"
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarks.cc kdenox_new/konq-embed/src/bookmarks.cc
+--- kdenox/konq-embed/src/bookmarks.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarks.cc 2007-02-25 18:28:08.000000000 +1300
+@@ -24,6 +24,8 @@
+
+ #if defined(ENABLE_BOOKMARKS)
+
++#warning BOOKMARKS ARE ENABLED
++
+ #include "bookmarks.h"
+ #include "xmltree.h"
+ #include "mainwindowbase.h"
+@@ -39,6 +41,7 @@
+ #include <qstring.h>
+ #include <qwidget.h>
+ #include <qfile.h>
++#include <qtimer.h>
+
+ #include <klocale.h>
+ #include <kstandarddirs.h>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/bookmarks.h kdenox_new/konq-embed/src/bookmarks.h
+--- kdenox/konq-embed/src/bookmarks.h 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/bookmarks.h 2007-02-25 18:26:32.000000000 +1300
+@@ -34,6 +34,8 @@
+
+ #include <kurl.h>
+
++#define QPtrList QList
++
+ class QPopupMenu;
+ class XMLElement;
+ class ActionMenu;
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/mainwindow_qpe.cc kdenox_new/konq-embed/src/mainwindow_qpe.cc
+--- kdenox/konq-embed/src/mainwindow_qpe.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/mainwindow_qpe.cc 2007-02-25 17:46:32.000000000 +1300
+@@ -90,7 +90,7 @@
+ return iconSet;
+ }
+
+-void MainWindowBase::statusJustText( const QString &_msg, bool )
++void MainWindowQPE::statusJustText( const QString &_msg, bool )
+ {
+ QString msg = _msg;
+ msg.replace( QRegExp( "</?qt>" ), QString::null );
+@@ -99,7 +99,7 @@
+ Global::statusMessage( msg );
+ }
+
+-void MainWindowBase::statusMessage( const QString &_msg, bool visible )
++void MainWindowQPE::statusMessage( const QString &_msg, bool visible )
+ {
+ statusJustText( _msg, visible );
+ }
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/mainwindow_qpe.h kdenox_new/konq-embed/src/mainwindow_qpe.h
+--- kdenox/konq-embed/src/mainwindow_qpe.h 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/mainwindow_qpe.h 2007-02-25 17:47:23.000000000 +1300
+@@ -39,6 +39,10 @@
+
+ protected:
+ virtual QIconSet loadPixmap( const char * const xpm[] );
++
++protected slots:
++ virtual void statusJustText( const QString &msg, bool visible );
++ virtual void statusMessage( const QString &msg, bool visible );
+ };
+
+ #endif
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/mainwindow_road.cc kdenox_new/konq-embed/src/mainwindow_road.cc
+--- kdenox/konq-embed/src/mainwindow_road.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/mainwindow_road.cc 2007-02-25 20:32:12.000000000 +1300
+@@ -20,10 +20,11 @@
+
+ #ifdef KONQ_GUI_ROAD
+
++#include <config.h>
++
+ #include "mainwindow_road.h"
+ #include "popupaction.h"
+
+-
+ #include <qpopupmenu.h>
+ #include <qtoolbar.h>
+ #include <qaction.h>
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/mainwindow_x11.cc kdenox_new/konq-embed/src/mainwindow_x11.cc
+--- kdenox/konq-embed/src/mainwindow_x11.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/mainwindow_x11.cc 2007-02-25 20:33:10.000000000 +1300
+@@ -21,6 +21,8 @@
+
+ // Implementation of the X11 GUI
+
++#include <config.h>
++
+ #include "mainwindow_x11.h"
+ #include "popupaction.h"
+
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/roadtabbar.cc kdenox_new/konq-embed/src/roadtabbar.cc
+--- kdenox/konq-embed/src/roadtabbar.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/roadtabbar.cc 2007-02-25 17:44:19.000000000 +1300
+@@ -18,6 +18,9 @@
+ Boston, MA 02110-1301, USA.
+ */
+
++#include <qaction.h>
++#include <kconfig.h>
++
+ #include "roadtabbar.h"
+
+ RoadTabParams::RoadTabParams( const QIconSet &defaultIS, const QIconSet &loadingIS,
+@@ -114,12 +117,12 @@
+
+ void RoadTabBar::initContextMenu()
+ {
+- QAction *qa = new QAction( QString::null, i18n( "&Close Tab" ), 0, this, "contextTabClose" );
++ QAction *qa = new QAction( QString::null, tr( "&Close Tab" ), 0, this, "contextTabClose" );
+ connect( qa, SIGNAL( activated() ), this, SLOT( contextClose() ) );
+ qa->addTo( &m_contextMenu );
+ m_contextMenuCloseId = m_contextMenu.idAt( 0 );
+
+- qa = new QAction( QString::null, i18n( "&New tab" ), 0, this, "contextTabNew" );
++ qa = new QAction( QString::null, tr( "&New tab" ), 0, this, "contextTabNew" );
+ connect( qa, SIGNAL( activated() ), this, SIGNAL( requestNewView() ) );
+ qa->addTo( &m_contextMenu );
+ }
+@@ -184,7 +187,7 @@
+ {
+ QString caption( text );
+ if ( caption.isEmpty() )
+- caption = i18n( "Blank" );
++ caption = tr( "Blank" );
+ // the caption may not exceed a given width, so shorten it if necessary
+ // the following is inefficient, but clear, correct, and unlikely to be a bottleneck
+ if ( m_params.fontMetrics.width( caption ) > m_params.maxWidth )
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/roadtabbar.h kdenox_new/konq-embed/src/roadtabbar.h
+--- kdenox/konq-embed/src/roadtabbar.h 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/roadtabbar.h 2007-02-25 17:42:40.000000000 +1300
+@@ -22,6 +22,9 @@
+ #define __roadtabbar_h__
+
+ #include <qtabbar.h>
++#include <qpopupmenu.h>
++
++#include "view.h"
+
+ struct RoadTabParams
+ {
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/src/run.cc kdenox_new/konq-embed/src/run.cc
+--- kdenox/konq-embed/src/run.cc 2007-02-12 22:25:55.000000000 +1300
++++ kdenox_new/konq-embed/src/run.cc 2007-02-25 17:34:35.000000000 +1300
+@@ -24,6 +24,7 @@
+ #include "view.h"
+
+ #include <khtml_part.h>
++#include <khtml_ext.h>
+
+ Run::Run( View *view, const KURL &url, const KParts::URLArgs &args )
+ : KHTMLRun( static_cast<KHTMLPart *>(view->part()), 0,
+@@ -48,7 +49,7 @@
+ // if ( isTextExecutable(mimeType) )
+ // mimeType = QString::fromLatin1("text/plain"); // view, don't execute
+ QString suggestedFilename = m_strURL.filename();
+- KHTMLPopupGUIClient::saveURL( part()->widget(), i18n( "Save As" ), m_strURL, urlArgs().metaData(), QString::null, 0, suggestedFilename, type );
++ KHTMLPopupGUIClient::saveURL( part()->widget(), QObject::tr( "Save As" ), m_strURL, urlArgs().metaData(), QString::null, 0, suggestedFilename, type );
+
+ m_bFinished = true;
+ emit error();
+diff -urNd --exclude-from=excludelist kdenox/konq-embed/dropin/khtml/khtml_ext.cpp kdenox_new/konq-embed/dropin/khtml/khtml_ext.cpp
+--- kdenox/konq-embed/dropin/khtml/khtml_ext.cpp 2007-02-12 22:25:56.000000000 +1300
++++ kdenox_new/konq-embed/dropin/khtml/khtml_ext.cpp 2007-02-24 03:38:24.000000000 +1300
+@@ -115,7 +115,8 @@
+ const QString &filter, long cacheId,
+ const QString & suggestedFilename, const QString& mimeType )
+ {
+- QString name = QString::fromLatin1( "index.html" );
++/*
++QString name = QString::fromLatin1( "index.html" );
+ if ( !suggestedFilename.isEmpty() )
+ name = suggestedFilename;
+ else if ( !url.fileName().isEmpty() )
+@@ -166,6 +167,7 @@
+
+ if ( destURL.isValid() )
+ saveURL(url, destURL, metadata, cacheId, f);
++*/
+ }
+
+ void KHTMLPopupGUIClient::saveURL( const KURL &url, const KURL &destURL,
diff --git a/packages/konqueror/konqueror-embedded-20070212/konqueror.desktop b/packages/konqueror/konqueror-embedded-20070212/konqueror.desktop
new file mode 100644
index 0000000000..1f473117e9
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded-20070212/konqueror.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Exec=konqueror
+Icon=konqueror/konqueror
+Type=Application
+Name=konqueror
+Comment=Konqueror browser
diff --git a/packages/konqueror/konqueror-embedded-20070212/konqueror.png b/packages/konqueror/konqueror-embedded-20070212/konqueror.png
new file mode 100644
index 0000000000..879d470bbf
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded-20070212/konqueror.png
Binary files differ
diff --git a/packages/konqueror/konqueror-embedded_20030705.bb b/packages/konqueror/konqueror-embedded_20030705.bb
index e73a0e206d..979c1ce305 100644
--- a/packages/konqueror/konqueror-embedded_20030705.bb
+++ b/packages/konqueror/konqueror-embedded_20030705.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.konqueror.org/embedded"
SECTION = "opie/applications"
PRIORITY = "optional"
DEPENDS = "libqpe-opie openssl libpcre"
-LICENSE = "LGPL/GPL"
+LICENSE = "LGPL GPL"
PR = "r5"
# Note if this .bb files fails with the error:
diff --git a/packages/konqueror/konqueror-embedded_20060404.bb b/packages/konqueror/konqueror-embedded_20060404.bb
index 159b6dd625..9acfc71204 100644
--- a/packages/konqueror/konqueror-embedded_20060404.bb
+++ b/packages/konqueror/konqueror-embedded_20060404.bb
@@ -3,7 +3,7 @@ SECTION = "opie/applications"
PRIORITY = "optional"
HOMEPAGE = "http://www.konqueror.org/"
DEPENDS = "openssl libpcre virtual/libqte2 dcopidl-native dcopidl2cpp-native"
-LICENSE = "LGPL/GPL"
+LICENSE = "LGPL GPL"
PR = "r3"
# this Konqueror needs the KDEDIR set and the font helvetica installed on the target
diff --git a/packages/konqueror/konqueror-embedded_20070212.bb b/packages/konqueror/konqueror-embedded_20070212.bb
new file mode 100644
index 0000000000..02e411e9f7
--- /dev/null
+++ b/packages/konqueror/konqueror-embedded_20070212.bb
@@ -0,0 +1,95 @@
+DESCRIPTION = "KDE Web Browser Konqueror, QtE based Palmtop Environments Edition"
+SECTION = "opie/applications"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.konqueror.org/"
+DEPENDS = "openssl libpcre virtual/libqte2 dcopidl-native dcopidl2cpp-native"
+LICENSE = "LGPL GPL"
+PR = "r5"
+
+# this Konqueror needs the KDEDIR set and the font helvetica installed on the target
+
+inherit autotools
+
+SRC_URI = "http://www.basyskom.de/uploads/175/35/kdenox_snapshot_Qt2_2007.02.12.tar.bz2 \
+ file://dont-use-kde-config.patch;patch=1 \
+ file://konqe_new_opie.patch;patch=1 \
+ file://konqe-kapplication.patch;patch=1"
+S = "${WORKDIR}/kdenox"
+
+export QMAKE = "${STAGING_BINDIR_NATIVE}/qmake"
+export MOC = "${STAGING_BINDIR_NATIVE}/moc"
+export UIC = "${STAGING_BINDIR_NATIVE}/uic"
+#export exec_prefix = "${palmtopdir}"
+#export CXXFLAGS = "-fexceptions -frtti -DKJS_VERBOSE=1 -DQT_THREAD_SUPPORT -DQ_OS_UNIX -DQT_NO_DOM -DENABLE_BOOKMARKS"
+export CXXFLAGS = "-fexceptions -fno-rtti -DKJS_VERBOSE=1 -DQT_THREAD_SUPPORT -DQ_OS_UNIX -DENABLE_BOOKMARKS"
+export PCRE_CONFIG = "invalid"
+# uncomment this for a static build
+# EXTRAFLAGS = "-lts"
+# EXTRAFLAGS_c7x0 = "-lts -laticore"
+export EXTRA_OEMAKE = "EXTRA_LDFLAGS='${EXTRAFLAGS}'"
+
+EXTRA_OECONF = '--prefix=${palmtopdir} \
+ --exec-prefix=${palmtopdir} \
+# --includedir=${STAGING_INCDIR} \
+ --includedir=/usr/include \
+ --with-extra-includes=${STAGING_INCDIR} \
+ --with-extra-libs=${STAGING_LIBDIR} \
+ --with-qtopia-dir=${OPIEDIR} \
+ --with-ssl-version=0.9.7e \
+ --with-ssl-dir=${STAGING_LIBDIR}/.. \
+ --with-qt-includes=${STAGING_DIR}/${HOST_SYS}/qt2/include \
+ --with-qt-libraries=${STAGING_DIR}/${HOST_SYS}/qt2/lib \
+ --with-qt-dir=${QTDIR} \
+ --enable-fontsubs \
+ --with-konq-tmp-prefix=/tmp/kde-cache \
+# --enable-static \
+ --disable-static \
+ --enable-shared \
+ --disable-debug \
+ --with-gui=qpe \
+ --with-ipv6-lookup=no \
+ --without-xinerama \
+# --disable-scrollbars \
+ --disable-selection \
+ --disable-bookmarks \
+ --with-javascript=static \
+ --enable-debug=yes \
+ --disable-printing \
+# --enable-pcre \
+ --disable-pcre \
+ --without-arts \
+ --enable-jshostext \
+ --disable-selection \
+ --enable-final \
+ --enable-qt-embedded \
+# --enable-rtti-embedded \
+ --enable-mt \
+ --enable-qpe \
+ --enable-qt-mt \
+ --enable-fwnewepg=yes \
+ --enable-embedded '
+
+do_configure_prepend() {
+ cd ${S}
+ if ! test -L admin
+ then
+ ln -s ../kdelibs/admin admin
+ fi
+}
+
+do_compile_prepend() {
+ perl admin/am_edit
+}
+
+do_install_append() {
+ install -d ${D}${palmtopdir}/apps/Applications
+ install -m 0644 ${FILESDIR}/konqueror.desktop ${D}${palmtopdir}/apps/Applications/
+ install -d ${D}${palmtopdir}/pics/konqueror
+ install -m 0644 ${FILESDIR}/konqueror.png ${D}${palmtopdir}/pics/konqueror/
+ mv ${D}${palmtopdir}/bin ${D}${bindir}
+ mv ${D}${bindir}/konqueror ${D}${bindir}/konqueror.bin
+ { echo '#!/bin/sh' ; echo "KDEDIR=/usr exec ${bindir}/konqueror.bin" ; } > ${D}${bindir}/konqueror
+ chmod 0755 ${D}${bindir}/konqueror
+}
+
+FILES_${PN} = "${palmtopdir} ${datadir} ${bindir}/konqueror* ${libdir}/libkonq*"
diff --git a/packages/lftp/lftp_3.5.1.bb b/packages/lftp/lftp_3.5.1.bb
index df184ae9ca..1390f0b22f 100644
--- a/packages/lftp/lftp_3.5.1.bb
+++ b/packages/lftp/lftp_3.5.1.bb
@@ -10,4 +10,8 @@ SRC_URI = "ftp://ftp.wiretapped.net/pub/mirrors/lftp/old/lftp-3.5.1.tar.bz2"
EXTRA_OECONF = "--disable-largefile --disable-rpath --with-included-readline=no"
+do_configure_prepend () {
+ rm ${S}/m4/iconv.m4
+}
+
inherit autotools gettext
diff --git a/packages/liba52/liba52_0.7.4.bb b/packages/liba52/liba52_0.7.4.bb
index 3093f57a6a..e29e6c9b2f 100644
--- a/packages/liba52/liba52_0.7.4.bb
+++ b/packages/liba52/liba52_0.7.4.bb
@@ -1,22 +1,23 @@
-LICENSE = "GPL"
-
DESCRIPTION = "Library for reading some sort of media format."
+LICENSE = "GPL"
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = ""
+PR = "r1"
inherit autotools
SRC_URI = "http://liba52.sourceforge.net/files/a52dec-${PV}.tar.gz"
-S="${WORKDIR}/a52dec-${PV}"
+S = "${WORKDIR}/a52dec-${PV}"
EXTRA_OECONF = " --enable-shared "
-PACKAGES = "${PN} ${PN}-dev a52dec a52dec-doc"
+PACKAGES =+ "a52dec a52dec-dbg a52dec-doc"
-FILES_${PN} = " ${libdir}/liba52.so.0 ${libdir}/liba52.so.0.0.0 "
+FILES_${PN} = " ${libdir}/liba52.so.0 ${libdir}/liba52.so.0.0.0 "
FILES_${PN}-dev = " ${includedir}/a52dec/*.h ${libdir}/liba52.so ${libdir}/liba52.la ${libdir}/liba52.a "
+FILES_${PN}-dbg = " ${libdir}/.debug/*"
FILES_a52dec = " ${bindir}/* "
+FILES_a52dec-dbg = " ${bindir}/.debug/* "
FILES_a52dec-doc = " ${mandir}/man1/* "
do_stage() {
diff --git a/packages/libcap/libcap-1.10/syscall.patch b/packages/libcap/libcap-1.10/syscall.patch
new file mode 100644
index 0000000000..86163f2b1a
--- /dev/null
+++ b/packages/libcap/libcap-1.10/syscall.patch
@@ -0,0 +1,20 @@
+Index: libcap-1.10/libcap/cap_sys.c
+===================================================================
+--- libcap-1.10.orig/libcap/cap_sys.c 2007-05-24 10:59:24.000000000 +0200
++++ libcap-1.10/libcap/cap_sys.c 2007-05-24 11:01:42.000000000 +0200
+@@ -11,6 +11,7 @@
+ #define __LIBRARY__
+ #include <linux/unistd.h>
+
++#if 0
+ _syscall2(int, capget,
+ cap_user_header_t, header,
+ cap_user_data_t, data)
+@@ -18,6 +19,7 @@
+ _syscall2(int, capset,
+ cap_user_header_t, header,
+ const cap_user_data_t, data)
++#endif
+
+ /*
+ * $Log: cap_sys.c,v $
diff --git a/packages/libcap/libcap_1.10.bb b/packages/libcap/libcap_1.10.bb
index a7e1068f49..172acaca6e 100644
--- a/packages/libcap/libcap_1.10.bb
+++ b/packages/libcap/libcap_1.10.bb
@@ -3,12 +3,14 @@ PRIORITY = "optional"
SECTION = "libs"
LICENSE = "GPL"
DEPENDS = "bison-native flex-native"
+PR = "r1"
CFLAGS_append = " -I${S}/libcap/include"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/security/linux-privs/kernel-2.4/${PN}-${PV}.tar.bz2 \
file://makenames.patch;patch=1 \
- file://make.patch;patch=1 "
+ file://make.patch;patch=1 \
+ file://syscall.patch;patch=1"
FILES_${PN} = "${libdir}"
FILES_${PN}-dev = "${includedir}"
diff --git a/packages/libcwd/libcwd_0.99.44.bb b/packages/libcwd/libcwd_0.99.44.bb
deleted file mode 100644
index d0ec7c3a4d..0000000000
--- a/packages/libcwd/libcwd_0.99.44.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Libcwd is a thread-safe, full-featured debugging support library for C++ developers. \
-It includes ostream-based debug output with custom debug channels and devices, \
-powerful memory allocation debugging support, as well as run-time support for \
-printing source line number information and demangled type names."
-SECTION = "devel/libs"
-LICENSE = "QPL"
-HOMEPAGE = "http://libcwd.sourceforge.net"
-PR = "r0"
-
-SRC_URI = "http://puzzle.dl.sourceforge.net/sourceforge/libcwd/libcwd-${PV}.tar.gz"
-
-inherit autotools
-
-do_configure() {
- oe_runconf
-}
-
-PARALLEL_MAKE = ""
-
-PACKAGES =+ "${PN}-config ${PN}-mt"
-FILES_${PN} = "${libdir}/libcwd.so*"
-FILES_${PN}-mt = "${libdir}/libcwd_r.so*"
-FILES_${PN}-config = "${datadir}"
-RRECOMMENDS_${PN} = "${PN}-config"
-RRECOMMENDS_${PN}-mt = "${PN}-config"
diff --git a/packages/libcwd/libcwd_0.99.47.bb b/packages/libcwd/libcwd_0.99.47.bb
new file mode 100644
index 0000000000..38453c89e5
--- /dev/null
+++ b/packages/libcwd/libcwd_0.99.47.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "Libcwd is a thread-safe, full-featured debugging support library for C++ developers. \
+It includes ostream-based debug output with custom debug channels and devices, \
+powerful memory allocation debugging support, as well as run-time support for \
+printing source line number information and demangled type names."
+SECTION = "devel/libs"
+LICENSE = "QPL"
+HOMEPAGE = "http://libcwd.sourceforge.net"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libcwd/libcwd-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+PARALLEL_MAKE = ""
+
+PACKAGES =+ "${PN}-config ${PN}-mt"
+FILES_${PN} = "${libdir}/libcwd.so*"
+FILES_${PN}-mt = "${libdir}/libcwd_r.so*"
+FILES_${PN}-config = "${datadir}"
+RRECOMMENDS_${PN} = "${PN}-config"
+RRECOMMENDS_${PN}-mt = "${PN}-config"
diff --git a/packages/libdaemon/libdaemon_0.11.bb b/packages/libdaemon/libdaemon_0.11.bb
new file mode 100644
index 0000000000..c91f6351ff
--- /dev/null
+++ b/packages/libdaemon/libdaemon_0.11.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "libdaemon is a lightweight C library which eases the writing of UNIX daemons."
+SECTION = "libs"
+AUTHOR = "Lennart Poettering <lennart@poettering.net>"
+HOMEPAGE = "http://0pointer.de/lennart/projects/libdaemon/"
+LICENSE = "LGPL"
+PR = "r0"
+
+SRC_URI = "http://0pointer.de/lennart/projects/libdaemon/libdaemon-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-lynx --disable-doxygen"
+
+do_stage () {
+ oe_libinstall -a -so -C libdaemon libdaemon ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}/libdaemon
+ for i in daemon.h dlog.h dexec.h dfork.h dsignal.h dnonblock.h dpid.h; do
+ install -m 0644 ${S}/libdaemon/$i ${STAGING_INCDIR}/libdaemon/
+ done
+}
diff --git a/packages/libeventdb/libeventdb_0.90.bb b/packages/libeventdb/libeventdb_0.90.bb
new file mode 100644
index 0000000000..2372db528b
--- /dev/null
+++ b/packages/libeventdb/libeventdb_0.90.bb
@@ -0,0 +1,14 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Database access library for GPE calendar"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "libgpewidget libgpepimc sqlite"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit pkgconfig gpe autotools
+
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/libeventdb/libeventdb_svn.bb b/packages/libeventdb/libeventdb_svn.bb
index c18d28d273..4361df2ea4 100644
--- a/packages/libeventdb/libeventdb_svn.bb
+++ b/packages/libeventdb/libeventdb_svn.bb
@@ -5,7 +5,7 @@ PRIORITY = "optional"
DEPENDS = "libgpewidget libgpepimc sqlite"
-PV = "0.30+svn${SRCDATE}"
+PV = "0.90+svn${SRCDATE}"
PR = "r0"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/libfakekey/libfakekey_svn.bb b/packages/libfakekey/libfakekey_svn.bb
index 74947ab0ff..f4c7afb856 100644
--- a/packages/libfakekey/libfakekey_svn.bb
+++ b/packages/libfakekey/libfakekey_svn.bb
@@ -1,9 +1,9 @@
-DESCRIPTION = "Matchbox keyboard"
+DESCRIPTION = "Library to generate fake keys for Matchbox keyboard"
LICENSE = "GPL"
DEPENDS = "libxtst"
SECTION = "x11/wm"
PR="r2"
-PV = "0.0+svn${SRCDATE}"
+PV = "0.2+svn${SRCDATE}"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http"
diff --git a/packages/libftdi/files/doxygen-configure.patch b/packages/libftdi/files/doxygen-configure.patch
index 6558cbd96f..150acb67d5 100644
--- a/packages/libftdi/files/doxygen-configure.patch
+++ b/packages/libftdi/files/doxygen-configure.patch
@@ -1,22 +1,22 @@
-Index: libftdi-0.8/configure.in
+Index: libftdi-0.9/configure.in
===================================================================
---- libftdi-0.8.orig/configure.in
-+++ libftdi-0.8/configure.in
+--- libftdi-0.9.orig/configure.in
++++ libftdi-0.9/configure.in
@@ -32,9 +32,5 @@ else
AC_MSG_RESULT(yes)
fi
-dnl check for doxygen
--AC_PATH_PROG(DOXYGEN, doxygen, $PATH)
+-AC_PATH_PROG(DOXYGEN, doxygen)
-AM_CONDITIONAL(HAVE_DOXYGEN, test -n $DOXYGEN);
-
AC_OUTPUT([libftdi-config],[chmod a+x libftdi-config])
-AC_OUTPUT(Makefile src/Makefile examples/Makefile doc/Doxyfile doc/Makefile libftdi.pc)
+AC_OUTPUT(Makefile src/Makefile examples/Makefile libftdi.pc)
-Index: libftdi-0.8/Makefile.am
+Index: libftdi-0.9/Makefile.am
===================================================================
---- libftdi-0.8.orig/Makefile.am
-+++ libftdi-0.8/Makefile.am
+--- libftdi-0.9.orig/Makefile.am
++++ libftdi-0.9/Makefile.am
@@ -2,7 +2,7 @@
# have all needed files, that a GNU package needs
AUTOMAKE_OPTIONS = foreign 1.4
diff --git a/packages/libftdi/files/ftdi_eeprom-0.2-moko.patch b/packages/libftdi/files/ftdi_eeprom-0.2-moko.patch
new file mode 100644
index 0000000000..ae0ee6235a
--- /dev/null
+++ b/packages/libftdi/files/ftdi_eeprom-0.2-moko.patch
@@ -0,0 +1,16 @@
+--- ftdi_eeprom-0.2/ftdi_eeprom/main.c 2004-03-25 19:58:08.000000000 +0100
++++ ftdi_eeprom-0.2-moko/ftdi_eeprom/main.c 2007-02-16 01:23:40.000000000 +0100
+@@ -135,8 +135,11 @@
+
+ i = ftdi_usb_open(&ftdi, 0x0403, 0x6001);
+ if (i != 0) {
+- printf("Sorry, unable to find FTDI USB chip\n");
+- exit (-1);
++ i = ftdi_usb_open(&ftdi, 0x0403, 0x6010);
++ if (i != 0) {
++ printf("Sorry, unable to find FTDI USB chip\n");
++ exit (-1);
++ }
+ }
+ }
+ }
diff --git a/packages/libftdi/ftdi-eeprom-native_0.2.bb b/packages/libftdi/ftdi-eeprom-native_0.2.bb
new file mode 100644
index 0000000000..56613969d9
--- /dev/null
+++ b/packages/libftdi/ftdi-eeprom-native_0.2.bb
@@ -0,0 +1,9 @@
+require ftdi-eeprom_${PV}.bb
+
+DEPENDS = "libftdi-native confuse-native"
+
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 ftdi_eeprom/ftdi_eeprom ${STAGING_BINDIR_NATIVE}/
+}
+
diff --git a/packages/libftdi/ftdi-eeprom_0.2.bb b/packages/libftdi/ftdi-eeprom_0.2.bb
new file mode 100644
index 0000000000..c71ac8d0c3
--- /dev/null
+++ b/packages/libftdi/ftdi-eeprom_0.2.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "ftdi-eeprom is a flashing utility for FTDI chips."
+HOMEPAGE = "http://www.intra2net.com/de/produkte/opensource/ftdi"
+LICENSE = "GPL"
+DEPENDS = "libftdi confuse"
+PR = "r1"
+
+SRC_URI = "http://www.intra2net.com/de/produkte/opensource/ftdi/TGZ/ftdi_eeprom-${PV}.tar.gz \
+ file://ftdi_eeprom-0.2-moko.patch;patch=1"
+S = "${WORKDIR}/ftdi_eeprom-${PV}"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-docs"
diff --git a/packages/libftdi/libftdi-native_0.8.bb b/packages/libftdi/libftdi-native_0.9.bb
index 24f82778e5..24f82778e5 100644
--- a/packages/libftdi/libftdi-native_0.8.bb
+++ b/packages/libftdi/libftdi-native_0.9.bb
diff --git a/packages/libftdi/libftdi_0.8.bb b/packages/libftdi/libftdi_0.9.bb
index f7426ceb1a..f7426ceb1a 100644
--- a/packages/libftdi/libftdi_0.8.bb
+++ b/packages/libftdi/libftdi_0.9.bb
diff --git a/packages/libglade/libglade_2.4.2.bb b/packages/libglade/libglade_2.4.2.bb
index b57d51d996..dce7e5618d 100644
--- a/packages/libglade/libglade_2.4.2.bb
+++ b/packages/libglade/libglade_2.4.2.bb
@@ -12,7 +12,7 @@ SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1"
EXTRA_OECONF += "--without-libxml2"
-CFLAGS += "-lz"
+LDFLAGS += "-lz"
PACKAGES += " ${PN}-data"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libglade/libglade_2.5.1.bb b/packages/libglade/libglade_2.5.1.bb
index 4dcbe69828..8d43bc412e 100644
--- a/packages/libglade/libglade_2.5.1.bb
+++ b/packages/libglade/libglade_2.5.1.bb
@@ -13,7 +13,7 @@ SRC_URI += "file://glade-cruft.patch;patch=1 file://no-xml2.patch;patch=1 \
EXTRA_OECONF += "--without-libxml2"
-CFLAGS += "-lz"
+LDFLAGS += "-lz"
PACKAGES += " ${PN}-data"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libgpepimc/libgpepimc_0.9.bb b/packages/libgpepimc/libgpepimc_0.9.bb
new file mode 100644
index 0000000000..57b7b22191
--- /dev/null
+++ b/packages/libgpepimc/libgpepimc_0.9.bb
@@ -0,0 +1 @@
+require libgpepimc.inc
diff --git a/packages/libgpeplugin/libgpeplugin_cvs.bb b/packages/libgpeplugin/libgpeplugin_cvs.bb
deleted file mode 100644
index 80fc6ec095..0000000000
--- a/packages/libgpeplugin/libgpeplugin_cvs.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Plugin system for GPE applications"
-AUTHOR = "Luce DeCicco <ldecicco@gmail.com>"
-
-DEPENDS = "gtk+ libgpewidget"
-PV = "0.0+cvs${SRCDATE}"
-
-#put examples in a seperate package
-PACKAGES += "${PN}-examples"
-FILES_${PN}-examples = "${bindir}/* ${libexecdir}/*"
-FILES_${PN} = "${libdir}/*.so.*"
-
-SRC_URI = "${HANDHELDS_CVS};module=gpe/base/${PN}"
-S = "${WORKDIR}/${PN}"
-
-inherit autotools pkgconfig
-
-do_stage() {
-autotools_stage_all
-}
diff --git a/packages/libgpevtype/libgpevtype_0.50.bb b/packages/libgpevtype/libgpevtype_0.50.bb
new file mode 100644
index 0000000000..a47217a444
--- /dev/null
+++ b/packages/libgpevtype/libgpevtype_0.50.bb
@@ -0,0 +1,17 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Data interchange library for GPE"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "libmimedir libeventdb libtododb"
+PR = "r1"
+
+inherit pkgconfig gpe autotools
+
+SRC_URI = "${GPE_MIRROR}/${PN}-${PV}.tar.bz2"
+
+
+do_stage () {
+ autotools_stage_all
+}
+
+
diff --git a/packages/libgpevtype/libgpevtype_svn.bb b/packages/libgpevtype/libgpevtype_svn.bb
index 213c009d85..44388ba37c 100644
--- a/packages/libgpevtype/libgpevtype_svn.bb
+++ b/packages/libgpevtype/libgpevtype_svn.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Data interchange library for GPE"
SECTION = "gpe/libs"
PRIORITY = "optional"
LICENSE = "LGPL"
-DEPENDS = "libmimedir libeventdb"
-PV = "0.17+svn${SRCDATE}"
+DEPENDS = "libmimedir libeventdb libtododb"
+PV = "0.50+svn${SRCDATE}"
PR = "r1"
inherit pkgconfig gpe autotools
diff --git a/packages/libgpewidget/libgpewidget_0.115.bb b/packages/libgpewidget/libgpewidget_0.115.bb
new file mode 100644
index 0000000000..f679296c71
--- /dev/null
+++ b/packages/libgpewidget/libgpewidget_0.115.bb
@@ -0,0 +1,22 @@
+LICENSE = "LGPL"
+DESCRIPTION = "libgpewidget contains a collection of widgets and other common code shared by many GPE applications."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ cairo libxrender gtk-doc"
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit gpe pkgconfig autotools
+
+SRC_URI += "file://pkgconfig.patch;patch=1;pnum=0"
+
+PACKAGES =+ "libgpewidget-bin"
+FILES_libgpewidget-bin = "${bindir}/*"
+
+EXTRA_OECONF = "--enable-cairo"
+
+LDFLAGS += " -L${STAGING_LIBDIR}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/xorg-xserver/xserver-kdrive-omap/.mtn2git_empty b/packages/libgpg-error/libgpg-error-1.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xorg-xserver/xserver-kdrive-omap/.mtn2git_empty
+++ b/packages/libgpg-error/libgpg-error-1.4/.mtn2git_empty
diff --git a/packages/libgpg-error/libgpg-error-1.4/pkgconfig.patch b/packages/libgpg-error/libgpg-error-1.4/pkgconfig.patch
new file mode 100644
index 0000000000..f367f1ccc2
--- /dev/null
+++ b/packages/libgpg-error/libgpg-error-1.4/pkgconfig.patch
@@ -0,0 +1,54 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: libgpg-error-1.3/configure.ac
+===================================================================
+--- libgpg-error-1.3.orig/configure.ac
++++ libgpg-error-1.3/configure.ac
+@@ -117,6 +117,7 @@ GPG_ERROR_CONFIG_CFLAGS=""
+ AC_SUBST(GPG_ERROR_CONFIG_LIBS)
+ AC_SUBST(GPG_ERROR_CONFIG_CFLAGS)
+ AC_CONFIG_FILES([src/gpg-error-config], [chmod +x src/gpg-error-config])
++AC_CONFIG_FILES([src/gpg-error.pc])
+
+
+ # Special defines for certain platforms
+Index: libgpg-error-1.3/src/Makefile.am
+===================================================================
+--- libgpg-error-1.3.orig/src/Makefile.am
++++ libgpg-error-1.3/src/Makefile.am
+@@ -28,6 +28,8 @@ include_HEADERS = gpg-error.h
+ bin_SCRIPTS = gpg-error-config
+ m4datadir = $(datadir)/aclocal
+ m4data_DATA = gpg-error.m4
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = gpg-error.pc
+
+
+ EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \
+@@ -35,7 +37,7 @@ EXTRA_DIST = mkstrtable.awk err-sources.
+ mkerrcodes.awk mkerrcodes1.awk mkerrcodes2.awk mkerrcodes.c \
+ mkheader.awk gpg-error.h.in \
+ err-sources.h err-codes.h gpg-error-config.in gpg-error.m4 \
+- gpg-error.def versioninfo.rc.in
++ gpg-error.def versioninfo.rc.in gpg-error.pc.in
+
+ BUILT_SOURCES = err-sources.h err-codes.h code-to-errno.h code-from-errno.h \
+ err-sources-sym.h err-codes-sym.h errnos-sym.h gpg-error.h
+Index: libgpg-error-1.3/src/gpg-error.pc.in
+===================================================================
+--- /dev/null
++++ libgpg-error-1.3/src/gpg-error.pc.in
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: gpg-error
++Description: a library that defines common error values for all GnuPG components
++Version: @VERSION@
++Libs: -L{libdir} -lgpg-error
++Cflags: -I${includedir}
diff --git a/packages/libgpg-error/libgpg-error_1.4.bb b/packages/libgpg-error/libgpg-error_1.4.bb
new file mode 100644
index 0000000000..e520a23ae0
--- /dev/null
+++ b/packages/libgpg-error/libgpg-error_1.4.bb
@@ -0,0 +1,29 @@
+PR = "r1"
+DESCRIPTION = "GPG-Error library"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL LGPL FDL"
+
+SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-${PV}.tar.gz \
+ file://pkgconfig.patch;patch=1"
+
+# move libgpg-error-config into -dev package
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}/*"
+
+inherit autotools binconfig pkgconfig
+
+do_stage() {
+ oe_libinstall -a -so -C src libgpg-error ${STAGING_LIBDIR}
+ install -d ${STAGING_BINDIR_CROSS}/
+ install -m 0755 src/gpg-error-config ${STAGING_BINDIR_CROSS}/
+
+ install -d ${STAGING_INCDIR}/
+ for X in gpg-error.h
+ do
+ install -m 0644 ${S}/src/$X ${STAGING_INCDIR}/$X
+ done
+
+ install -d ${STAGING_DATADIR}/aclocal
+ install -m 0644 src/gpg-error.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/libhandoff/libhandoff_0.1.bb b/packages/libhandoff/libhandoff_0.1.bb
new file mode 100644
index 0000000000..bafbb9ec10
--- /dev/null
+++ b/packages/libhandoff/libhandoff_0.1.bb
@@ -0,0 +1,13 @@
+LICENSE = "GPL"
+DESCRIPTION = "handoff library for GPE calendar"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0"
+
+inherit pkgconfig gpe autotools
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/opie-taskbar/opie-taskbar/locale.conf b/packages/libhangul/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-taskbar/opie-taskbar/locale.conf
+++ b/packages/libhangul/.mtn2git_empty
diff --git a/packages/libhangul/libhangul_0.0.4.bb b/packages/libhangul/libhangul_0.0.4.bb
new file mode 100644
index 0000000000..289dc33dc1
--- /dev/null
+++ b/packages/libhangul/libhangul_0.0.4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "libhangul is a generalized and portable library for processing hangul (Korean)."
+HOMEPAGE = "http://kldp.net/projects/hangul/"
+SECTION = "x11/input"
+LICENSE = "GPL"
+DEPENDS = "gtk+ glib-2.0"
+PR = "r0"
+
+SRC_URI = "http://kldp.net/frs/download.php/3733/${PN}-${PV}.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/libiconv/libiconv_1.11.bb b/packages/libiconv/libiconv_1.11.bb
new file mode 100644
index 0000000000..de87486a87
--- /dev/null
+++ b/packages/libiconv/libiconv_1.11.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "GNU libiconv - libiconv is for you if your application needs to support \
+multiple character encodings, but that support lacks from your system."
+HOMEPAGE = "http://www.gnu.org/software/libiconv"
+SECTION = "libs"
+PRIORITY = "optional"
+NOTES = "Needs to be stripped down to: ascii iso8859-1 eucjp iso-2022jp gb utf8"
+PROVIDES = "virtual/libiconv"
+PR = "r4"
+LICENSE = "LGPL"
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-${PV}.tar.gz"
+
+S = "${WORKDIR}/libiconv-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--enable-shared --enable-static --enable-relocatable"
+
+do_configure () {
+ rm -f m4/libtool.m4 libcharset/m4/libtool.m4
+ autotools_do_configure
+
+ # As we do not really regenerate the Makefiles... and they have stale deps to this file
+ touch m4/libtool.m4
+
+ # Fix stupid libtool... handling. rpath handling can't be disabled and the Makefile's can't be regenerated..
+ # (GNU sed required)
+ sed -i s/^hardcode_libdir_flag_spec/#hardcode_libdir_flag_spec/ ${S}/*-libtool
+}
+
+do_stage () {
+ oe_libinstall -so -a -C lib libiconv ${STAGING_LIBDIR}
+ oe_libinstall -so -C lib libiconv_plug_linux ${STAGING_LIBDIR}
+ oe_libinstall -so -a -C libcharset/lib libcharset ${STAGING_LIBDIR}
+ autotools_stage_includes
+}
diff --git a/packages/libiconv/libiconv_1.9.2.bb b/packages/libiconv/libiconv_1.9.2.bb
deleted file mode 100644
index 059d5fd4c5..0000000000
--- a/packages/libiconv/libiconv_1.9.2.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "GNU libiconv - libiconv is for you if your application needs to support \
-multiple character encodings, but that support lacks from your system."
-HOMEPAGE = "http://www.gnu.org/software/libiconv"
-SECTION = "libs"
-PRIORITY = "optional"
-NOTES = "Needs to be stripped down to: ascii iso8859-1 eucjp iso-2022jp gb utf8"
-PROVIDES = "virtual/libiconv"
-PR = "r4"
-LICENSE = "LGPL"
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-${PV}.tar.gz"
-
-S = "${WORKDIR}/libiconv-${PV}"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF += "--enable-shared --enable-static"
-
-do_configure () {
- rm -f m4/libtool.m4 libcharset/m4/libtool.m4
- autotools_do_configure
-}
-
-do_stage () {
- oe_libinstall -so -a -C lib libiconv ${STAGING_LIBDIR}
- oe_libinstall -so -C lib libiconv_plug_linux ${STAGING_LIBDIR}
- oe_libinstall -so -a -C libcharset/lib libcharset ${STAGING_LIBDIR}
- autotools_stage_includes
-}
diff --git a/packages/libid3/.mtn2git_empty b/packages/libid3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libid3/.mtn2git_empty
diff --git a/packages/libid3/libid3_1.1.bb b/packages/libid3/libid3_1.1.bb
new file mode 100644
index 0000000000..9abb9375f4
--- /dev/null
+++ b/packages/libid3/libid3_1.1.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "libID3 is a small C library to parse ID3 tags. \
+It uses as little memory as possible, and has both DOM- and SAX-like models."
+SECTION = "libs/multimedia"
+LICENSE = "LGPL"
+
+SRC_URI = "http://download.tangent.org/libid3-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libidl/libidl_0.8.6.bb b/packages/libidl/libidl_0.8.6.bb
index ccc93e291a..33a1154357 100644
--- a/packages/libidl/libidl_0.8.6.bb
+++ b/packages/libidl/libidl_0.8.6.bb
@@ -2,25 +2,19 @@ DESCRIPTION = "Library for parsing CORBA IDL files"
SECTION = "x11/gnome/libs"
LICENSE = "LGPL"
DEPENDS = "glib-2.0 libidl-native"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libIDL/0.8/libIDL-${PV}.tar.bz2"
S = "${WORKDIR}/libIDL-${PV}"
-inherit autotools pkgconfig
+BINCONFIG_GLOB = "*-config-2"
+inherit autotools pkgconfig binconfig
# Firefox uses the libIDL-config-2 script instead of pkgconfig (for some
# strange reason - so we do some sed fu to fix the path there
do_stage() {
autotools_stage_all
-
- cat ${S}/libIDL-config-2 | sed -e 's:${includedir}:${STAGING_INCDIR}:' > ${STAGING_BINDIR}/libIDL-config-2
-
- if [ "${STAGING_BINDIR}" != "${STAGING_BINDIR_CROSS}" ]; then
- mv ${STAGING_BINDIR}/libIDL-config-2 ${STAGING_BINDIR_CROSS}/libIDL-config-2
- fi
-
}
FILES_${PN} = "${libdir}/*.so.*"
diff --git a/packages/libmailwrapper/libmailwrapper.inc b/packages/libmailwrapper/libmailwrapper.inc
index e8e8995f7f..d88ad4640e 100644
--- a/packages/libmailwrapper/libmailwrapper.inc
+++ b/packages/libmailwrapper/libmailwrapper.inc
@@ -21,3 +21,5 @@ do_stage () {
do_install() {
oe_libinstall -so libmailwrapper ${D}${palmtopdir}/lib
}
+
+FILES_${PN} = "${palmtopdir}/lib/lib*.so.*"
diff --git a/packages/libmailwrapper/libmailwrapper_1.2.2.bb b/packages/libmailwrapper/libmailwrapper_1.2.2.bb
index 3df2fb149b..e5f5bfe158 100644
--- a/packages/libmailwrapper/libmailwrapper_1.2.2.bb
+++ b/packages/libmailwrapper/libmailwrapper_1.2.2.bb
@@ -1,4 +1,5 @@
require ${PN}.inc
+PR = "r1"
diff --git a/packages/libmailwrapper/libmailwrapper_1.2.3.bb b/packages/libmailwrapper/libmailwrapper_1.2.3.bb
new file mode 100644
index 0000000000..c3fcddf49b
--- /dev/null
+++ b/packages/libmailwrapper/libmailwrapper_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/mail/libmailwrapper"
diff --git a/packages/libmailwrapper/libmailwrapper_cvs.bb b/packages/libmailwrapper/libmailwrapper_cvs.bb
index 4075a80823..56cf1040e4 100644
--- a/packages/libmailwrapper/libmailwrapper_cvs.bb
+++ b/packages/libmailwrapper/libmailwrapper_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
-SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/mail/libmailwrapper "
+SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/mail/libmailwrapper"
diff --git a/packages/libmatchbox/files/16bppfixes-2.patch b/packages/libmatchbox/files/16bppfixes-2.patch
new file mode 100644
index 0000000000..ab9cdc74a5
--- /dev/null
+++ b/packages/libmatchbox/files/16bppfixes-2.patch
@@ -0,0 +1,258 @@
+--- libmatchbox/libmb/mbpixbuf.c.orig 2007-05-04 14:41:55.000000000 +0100
++++ libmatchbox/libmb/mbpixbuf.c 2007-05-04 14:41:55.000000000 +0100
+@@ -710,46 +710,19 @@
+ return colnum;
+ }
+
+-
+-static unsigned long
+-mb_pixbuf_get_pixel(MBPixbuf *pb, int r, int g, int b, int a)
++/*
++ * Split the mb_pixbuf_get_pixel() function into several specialized
++ * functions which we will inline; this allows us to optimize
++ * mb_pixbuf_img_render_to_drawable_with_gc () by taking some of the
++ * decision taking outside of the double loop
++ */
++
++/*
++ * Get pixel value for rgb values and pixel depth <= 8
++ */
++static inline unsigned long
++mb_pixbuf_get_pixel_le8_rgb (MBPixbuf *pb, int r, int g, int b)
+ {
+- if (pb->depth > 8)
+- {
+- switch (pb->depth)
+- {
+- case 15:
+- return ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
+- case 16:
+- return ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
+- case 24:
+- case 32:
+- switch (pb->byte_order)
+- {
+- case BYTE_ORD_24_RGB:
+- return ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);
+- case BYTE_ORD_24_RBG:
+- return ((r & 0xff) << 16) | ((b & 0xff) << 8) | (g & 0xff);
+- case BYTE_ORD_24_BRG:
+- return ((b & 0xff) << 16) | ((r & 0xff) << 8) | (g & 0xff);
+- case BYTE_ORD_24_BGR:
+- return ((b & 0xff) << 16) | ((g & 0xff) << 8) | (r & 0xff);
+- case BYTE_ORD_24_GRB:
+- return ((g & 0xff) << 16) | ((r & 0xff) << 8) | (b & 0xff);
+- case BYTE_ORD_24_GBR:
+- return ((g & 0xff) << 16) | ((b & 0xff) << 8) | (r & 0xff);
+- case BYTE_ORD_32_ARGB:
+- return (a << 24) | (r << 16) | (g << 8) | b;
+- default:
+- return 0;
+- }
+- default:
+- return 0;
+- }
+- return 0;
+- }
+-
+- /* pb->depth <= 8 */
+ switch(pb->vis->class)
+ {
+ case PseudoColor:
+@@ -794,6 +767,111 @@
+ return 0;
+ }
+
++/*
++ * Get pixel value from a pointer to 16bbp value for pixel depth <= 8
++ * and advance the pointer
++ */
++static inline unsigned long
++mb_pixbuf_get_pixel_le8_16bpp_advance (MBPixbuf *pb, unsigned char ** p)
++{
++ unsigned short s = SHORT_FROM_2BYTES(*p);
++ int r, b, g;
++
++ r = (s & 0xf800) >> 8;
++ g = (s & 0x07e0) >> 3;
++ b = (s & 0x001f) << 3;
++
++ *p += 2;
++
++ return mb_pixbuf_get_pixel_le8_rgb (pb, r, g, b);
++}
++
++/*
++ * Get pixel value for rgba values and pixel depth > 8
++ *
++ */
++static inline unsigned long
++mb_pixbuf_get_pixel_gt8_rgba (MBPixbuf *pb, int r, int g, int b, int a)
++{
++ switch (pb->depth)
++ {
++ case 15:
++ switch (pb->byte_order)
++ {
++ case BYTE_ORD_24_RGB:
++ return ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3);
++ case BYTE_ORD_24_BGR:
++ return ((b & 0xf8) << 7) | ((g & 0xf8) << 2) | ((r & 0xf8) >> 3);
++ }
++ case 16:
++ switch (pb->byte_order)
++ {
++ case BYTE_ORD_24_RGB:
++ return ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3);
++ case BYTE_ORD_24_BGR:
++ return ((b & 0xf8) << 8) | ((g & 0xfc) << 3) | ((r & 0xf8) >> 3);
++ }
++ case 24:
++ case 32:
++ switch (pb->byte_order)
++ {
++ case BYTE_ORD_24_RGB:
++ return ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);
++ case BYTE_ORD_24_RBG:
++ return ((r & 0xff) << 16) | ((b & 0xff) << 8) | (g & 0xff);
++ case BYTE_ORD_24_BRG:
++ return ((b & 0xff) << 16) | ((r & 0xff) << 8) | (g & 0xff);
++ case BYTE_ORD_24_BGR:
++ return ((b & 0xff) << 16) | ((g & 0xff) << 8) | (r & 0xff);
++ case BYTE_ORD_24_GRB:
++ return ((g & 0xff) << 16) | ((r & 0xff) << 8) | (b & 0xff);
++ case BYTE_ORD_24_GBR:
++ return ((g & 0xff) << 16) | ((b & 0xff) << 8) | (r & 0xff);
++ case BYTE_ORD_32_ARGB:
++ return (a << 24) | (r << 16) | (g << 8) | b;
++ default:
++ return 0;
++ }
++ default:
++ return 0;
++ }
++}
++
++/*
++ * Get pixel value from pointer to 16bpp data for pixel depth > 8
++ * and advance the pointer
++ *
++ * TODO ? We could take the 32bit case out of here, which would allow
++ * to ignore the alpha value for <15, 24>, but we might not gain that
++ * much by this on arm due to the conditional execution.
++ */
++static inline unsigned long
++mb_pixbuf_get_pixel_gt8_16bpp_advance (MBPixbuf *pb, unsigned char ** p,
++ int has_alpha)
++{
++ unsigned short s = SHORT_FROM_2BYTES(*p);
++ int r, b, g, a;
++
++ r = (s & 0xf800) >> 8;
++ g = (s & 0x07e0) >> 3;
++ b = (s & 0x001f) << 3;
++
++ *p += 2;
++
++ a = has_alpha ? *(*p)++ : 0xff;
++
++ return mb_pixbuf_get_pixel_gt8_rgba (pb, r, g, b, a);
++}
++
++static inline unsigned long
++mb_pixbuf_get_pixel(MBPixbuf *pb, int r, int g, int b, int a)
++{
++ if (pb->depth > 8)
++ return mb_pixbuf_get_pixel_gt8_rgba (pb, r, g, b, a);
++
++ return mb_pixbuf_get_pixel_le8_rgb (pb, r, g, b);
++}
++
+ unsigned long
+ mb_pixbuf_lookup_x_pixel(MBPixbuf *pb, int r, int g, int b, int a)
+ {
+@@ -1825,7 +1903,6 @@
+ mb_pixbuf_img_render_to_drawable_with_gc(pb, img, drw, drw_x, drw_y, pb->gc);
+ }
+
+-
+ void
+ mb_pixbuf_img_render_to_drawable_with_gc(MBPixbuf *pb,
+ MBPixbufImage *img,
+@@ -1883,31 +1960,57 @@
+
+ if (pb->internal_bytespp == 2)
+ {
+- for(y=0; y<img->height; y++)
+- for(x=0; x<img->width; x++)
+- {
+- /* Below is potentially dangerous.
+- */
+- pixel = ( *p | (*(p+1) << 8));
+-
+- p += ((img->has_alpha) ? 3 : 2);
+-
+- XPutPixel(img->ximg, x, y, pixel);
+- }
++ if (pb->depth > 8)
++ {
++ for(y=0; y<img->height; y++)
++ for(x=0; x<img->width; x++)
++ {
++ pixel = mb_pixbuf_get_pixel_gt8_16bpp_advance(pb, &p,
++ img->has_alpha);
++ XPutPixel(img->ximg, x, y, pixel);
++ }
++ }
++ else
++ {
++ for(y=0; y<img->height; y++)
++ for(x=0; x<img->width; x++)
++ {
++ pixel = mb_pixbuf_get_pixel_le8_16bpp_advance(pb, &p);
++ XPutPixel(img->ximg, x, y, pixel);
++ }
++ }
+ }
+ else
+ {
+- for(y=0; y<img->height; y++)
++ if (pb->depth > 8)
+ {
+- for(x=0; x<img->width; x++)
++ for(y=0; y<img->height; y++)
+ {
+- r = ( *p++ );
+- g = ( *p++ );
+- b = ( *p++ );
+- a = ((img->has_alpha) ? *p++ : 0xff);
++ for(x=0; x<img->width; x++)
++ {
++ r = ( *p++ );
++ g = ( *p++ );
++ b = ( *p++ );
++ a = ((img->has_alpha) ? *p++ : 0xff);
+
+- pixel = mb_pixbuf_get_pixel(pb, r, g, b, a);
+- XPutPixel(img->ximg, x, y, pixel);
++ pixel = mb_pixbuf_get_pixel_gt8_rgba(pb, r, g, b, a);
++ XPutPixel(img->ximg, x, y, pixel);
++ }
++ }
++ }
++ else
++ {
++ for(y=0; y<img->height; y++)
++ {
++ for(x=0; x<img->width; x++)
++ {
++ r = ( *p++ );
++ g = ( *p++ );
++ b = ( *p++ );
++
++ pixel = mb_pixbuf_get_pixel_le8_rgb(pb, r, g, b);
++ XPutPixel(img->ximg, x, y, pixel);
++ }
+ }
+ }
+ }
diff --git a/packages/libmatchbox/libmatchbox_1.9.bb b/packages/libmatchbox/libmatchbox_1.9.bb
index d87eb09150..b9044a1d60 100644
--- a/packages/libmatchbox/libmatchbox_1.9.bb
+++ b/packages/libmatchbox/libmatchbox_1.9.bb
@@ -1,8 +1,9 @@
require libmatchbox.inc
-PR = "r0"
+PR = "r1"
SRC_URI = "http://projects.o-hand.com/matchbox/sources/${PN}/${PV}/${PN}-${PV}.tar.gz \
- file://check.m4"
+ file://16bppfixes-2.patch;patch=1 \
+ file://check.m4"
do_configure_prepend () {
mv ${WORKDIR}/check.m4 ${S}/
diff --git a/packages/libmikey/libmikey0_svn.bb b/packages/libmikey/libmikey0_svn.bb
deleted file mode 100644
index 663b639b3d..0000000000
--- a/packages/libmikey/libmikey0_svn.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-PV = "0.3.2+svn${SRCDATE}"
-LICENSE = "LGPL"
-
-DESCRIPTION = "C++ implementation of the Multimedia Internet KEYing (RFC3830)"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "libmutil0 openssl"
-DEFAULT_PREFERENCE = "-1"
-
-
-inherit autotools
-
-SRC_URI = "svn://svn.minisip.org/var/svn/minisip/trunk;module=libmikey"
-S = "${WORKDIR}/libmikey"
-
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = " ${libdir}/libmikey.so.0 ${libdir}/libmikey.so.0.0.0 "
-
-do_stage() {
- oe_libinstall -a -so libmikey ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/libmikey
- install -m 0644 ${S}/include/libmikey/* ${STAGING_INCDIR}/libmikey
-}
diff --git a/packages/libmimedir/libmimedir_0.3.1.bb b/packages/libmimedir/libmimedir_0.3.1.bb
index 5238cb7ef3..ff7ec3ec45 100644
--- a/packages/libmimedir/libmimedir_0.3.1.bb
+++ b/packages/libmimedir/libmimedir_0.3.1.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
PRIORITY = "optional"
LICENSE = "LGPL"
DEPENDS = "intltool-native"
-PR = "r2"
+PR = "r3"
DEFAULT_PREFERENCE = "1"
@@ -21,4 +21,4 @@ autotools_stage_all
PACKAGES += "libmimedir-utils"
FILES_libmimedir-utils = "${bindir}"
-FILES_${PN} = "${libdir}"
+FILES_${PN} = "${libdir}/*.so.*"
diff --git a/packages/libmimedir/libmimedir_0.4.0-20060804.bb b/packages/libmimedir/libmimedir_0.4.0-20060804.bb
deleted file mode 100644
index f2d29d4fc0..0000000000
--- a/packages/libmimedir/libmimedir_0.4.0-20060804.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "RFC2425 MIME Directory Profile library, supporting vCard and iCalendar"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-DEPENDS = "intltool-native glib-2.0"
-PR = "r4"
-DEFAULT_PREFERENCE = "5"
-SRCDATE = "20060804"
-PV = "0.4.0+cvs${SRCDATE}"
-
-SRC_URI = "cvs://anonymous@anoncvs.gnome.org/cvs/gnome;module=libmimedir \
- file://mimedir-update.patch;patch=1 \
- file://mimedir-write-sequence.patch;patch=1;pnum=0 \
- file://gslist-fix.patch;patch=1;maxdate=20060814 \
- file://libmimedir-0.4.0-duration-wkst.patch"
-
-S = "${WORKDIR}/libmimedir"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--disable-gtk-doc"
-
-do_stage() {
- autotools_stage_all
-}
-
-PACKAGES =+ "libmimedir-utils"
-FILES_libmimedir-utils = "${bindir}/*"
diff --git a/packages/libmimedir/libmimedir_0.4.2.bb b/packages/libmimedir/libmimedir_0.4.2.bb
new file mode 100644
index 0000000000..2f7cc4c3e8
--- /dev/null
+++ b/packages/libmimedir/libmimedir_0.4.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "RFC2425 MIME Directory Profile library, supporting vCard and iCalendar"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "intltool-native"
+PR = "r0"
+
+inherit autotools pkgconfig gpe
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_stage() {
+ autotools_stage_all
+}
+
+
+PACKAGES += "libmimedir-utils"
+FILES_libmimedir-utils = "${bindir}"
+FILES_${PN} = "${libdir}/*.so.*"
diff --git a/packages/libmimedir/libmimedir_cvs.bb b/packages/libmimedir/libmimedir_cvs.bb
deleted file mode 100644
index f687245fcd..0000000000
--- a/packages/libmimedir/libmimedir_cvs.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-DESCRIPTION = "RFC2425 MIME Directory Profile library, supporting vCard and iCalendar"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-DEPENDS = "intltool-native"
-PR = "r2"
-#Remove the dash below when 0.3.1 changes in PV
-PV = "0.3.1+cvs-${SRCDATE}"
-
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "cvs://anonymous@anoncvs.gnome.org/cvs/gnome;module=libmimedir \
- file://mimedir-update.patch;patch=1"
-
-S = "${WORKDIR}/libmimedir"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--disable-gtk-doc"
-
-do_stage() {
- autotools_stage_all
-}
-
-PACKAGES += "libmimedir-utils"
-FILES_libmimedir-utils = "${bindir}"
-FILES_${PN} = "${libdir}"
-
diff --git a/packages/libmimedir/libmimedir_svn.bb b/packages/libmimedir/libmimedir_svn.bb
new file mode 100644
index 0000000000..8bd7cc47ca
--- /dev/null
+++ b/packages/libmimedir/libmimedir_svn.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "RFC2425 MIME Directory Profile library, supporting vCard and iCalendar"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "intltool-native"
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.4.1+svn${SRCDATE}"
+PR = "r1"
+
+SRC_URI = "${GPE_SVN}"
+
+S = "${WORKDIR}/libmimedir"
+
+inherit autotools pkgconfig lib_package
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES += "libmimedir-utils"
+
+FILES_libmimedir-utils = "${bindir}"
+FILES_${PN} = "${libdir}/*.so.*"
+
diff --git a/packages/libmnetutil/libmnetutil0_svn.bb b/packages/libmnetutil/libmnetutil0_svn.bb
deleted file mode 100644
index a8e156bc13..0000000000
--- a/packages/libmnetutil/libmnetutil0_svn.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-PV = "0.2.2+svn${SRCDATE}"
-LICENSE = "LGPL"
-
-DESCRIPTION = "Networking class library for C++ programming"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "libmutil0 openssl"
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools
-
-SRC_URI = "svn://svn.minisip.org/var/svn/minisip/trunk;module=libmnetutil"
-S="${WORKDIR}/libmnetutil"
-
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = " ${libdir}/libmnetutil.so.0 ${libdir}/libmnetutil.so.0.0.0 "
-
-do_stage() {
- oe_libinstall -a -so libmnetutil ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/libmnetutil
- install -m 0644 ${S}/include/libmnetutil/* ${STAGING_INCDIR}/libmnetutil
-}
diff --git a/packages/libmpeg2/libmpeg2-0.4.0b/Makefile.patch b/packages/libmpeg2/libmpeg2-0.4.0b/Makefile.patch
deleted file mode 100644
index 78cf8b7275..0000000000
--- a/packages/libmpeg2/libmpeg2-0.4.0b/Makefile.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./src/Makefile.am.old
-+++ ./src/Makefile.am
-@@ -8,7 +8,9 @@
- mpeg2dec_SOURCES = mpeg2dec.c dump_state.c getopt.c gettimeofday.c
- mpeg2dec_LDADD = $(libvo) $(libmpeg2) $(libmpeg2convert)
- extract_mpeg2_SOURCES = extract_mpeg2.c getopt.c
-+extract_mpeg2_LDADD = $(libvo) $(libmpeg2) $(libmpeg2convert)
- corrupt_mpeg2_SOURCES = corrupt_mpeg2.c getopt.c
-+corrupt_mpeg2_LDADD = $(libvo) $(libmpeg2) $(libmpeg2convert)
-
- man_MANS = mpeg2dec.1 extract_mpeg2.1
-
diff --git a/packages/libmpeg2/libmpeg2_0.4.0b.bb b/packages/libmpeg2/libmpeg2_0.4.0b.bb
deleted file mode 100644
index 74b1ef8c38..0000000000
--- a/packages/libmpeg2/libmpeg2_0.4.0b.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "MPEG Video Decoder Library"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "virtual/libsdl"
-LICENSE = "GPL"
-
-SRC_URI = "http://libmpeg2.sourceforge.net/files/mpeg2dec-${PV}.tar.gz \
- file://Makefile.patch;patch=1 "
-S = "${WORKDIR}/mpeg2dec-0.4.0"
-
-inherit autotools
-
-EXTRA_OECONF="--enable-shared"
-
-do_stage() {
- oe_libinstall -a -so -C libmpeg2 libmpeg2 ${STAGING_LIBDIR}
- oe_libinstall -a -so -C libmpeg2/convert libmpeg2convert ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/mpeg2dec/
- install -m 0644 include/mpeg2.h ${STAGING_INCDIR}/mpeg2dec/
- install -m 0644 include/mpeg2convert.h ${STAGING_INCDIR}/mpeg2dec/
-}
diff --git a/packages/libmrss/files/.mtn2git_empty b/packages/libmrss/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libmrss/files/.mtn2git_empty
diff --git a/packages/libmrss/files/better-parse-url-r0.patch b/packages/libmrss/files/better-parse-url-r0.patch
new file mode 100644
index 0000000000..94a78110a2
--- /dev/null
+++ b/packages/libmrss/files/better-parse-url-r0.patch
@@ -0,0 +1,90 @@
+Index: libmrss-0.17.2/src/mrss.h
+===================================================================
+--- libmrss-0.17.2.orig/src/mrss.h 2007-04-02 14:42:55.000000000 +0200
++++ libmrss-0.17.2/src/mrss.h 2007-05-19 20:56:08.000000000 +0200
+@@ -523,6 +523,22 @@
+ mrss_t ** mrss,
+ mrss_options_t * options);
+
++/**
++ * Like the previous function but you take ownership of the downloaded buffer in case of success
++ * \param url The url to be parsed
++ * \param mrss the pointer to your data struct
++ * \param options a pointer to a options data struct
++ * \param feed_content a pointer to the buffer with the document. This is not NULL terminated
++ * \param feed_size the size of the buffer above
++ * \return the error code
++ */
++mrss_error_t mrss_parse_url_and_transfer_buffer
++ (char * url,
++ mrss_t ** mrss,
++ mrss_options_t * options,
++ char ** feed_content,
++ int * feed_size);
++
+ /**
+ * Parses a file and creates the data struct of the feed RSS url
+ * \param file The file to be parsed
+Index: libmrss-0.17.2/src/mrss_parser.c
+===================================================================
+--- libmrss-0.17.2.orig/src/mrss_parser.c 2007-05-19 20:47:08.000000000 +0200
++++ libmrss-0.17.2/src/mrss_parser.c 2007-05-19 20:56:37.000000000 +0200
+@@ -1075,13 +1075,20 @@
+ mrss_error_t
+ mrss_parse_url (char *url, mrss_t ** ret)
+ {
+- return mrss_parse_url_with_options (url, ret, NULL);
++ return mrss_parse_url_and_transfer_buffer (url, ret, NULL, NULL, NULL);
+ }
+
+ mrss_error_t
+ mrss_parse_url_with_options (char *url, mrss_t ** ret,
+ mrss_options_t * options)
+ {
++ return mrss_parse_url_and_transfer_buffer (url, ret, options, NULL, NULL);
++}
++
++mrss_error_t
++mrss_parse_url_and_transfer_buffer (char *url, mrss_t ** ret,
++ mrss_options_t * options, char **download_buffer, int *download_size)
++{
+ nxml_t *doc;
+ mrss_error_t err;
+ char *buffer;
+@@ -1117,7 +1124,8 @@
+
+ if (nxml_parse_buffer (doc, buffer, size) != NXML_OK)
+ {
+- free (buffer);
++ if (!download_buffer)
++ free (buffer);
+ nxml_free (doc);
+
+ return MRSS_ERR_PARSER;
+@@ -1127,7 +1135,8 @@
+ {
+ if (!((*ret)->file = strdup (url)))
+ {
+- free (buffer);
++ if (!download_buffer)
++ free (buffer);
+
+ mrss_free (*ret);
+ nxml_free (doc);
+@@ -1138,9 +1147,15 @@
+ (*ret)->size = size;
+ }
+
+- free (buffer);
++ if (!download_buffer)
++ free (buffer);
+ nxml_free (doc);
+
++ /* transfer ownership */
++ if (download_buffer)
++ *download_buffer = buffer;
++ if (download_size)
++ *download_size = size;
+ return err;
+ }
+
diff --git a/packages/libmrss/libmrss_0.17.2.bb b/packages/libmrss/libmrss_0.17.2.bb
new file mode 100644
index 0000000000..f536468479
--- /dev/null
+++ b/packages/libmrss/libmrss_0.17.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "mRSS is a C library for parsing, writing and creating RSS (0.91, 0.92, 1.0, 2.0) files or streams"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www2.autistici.org/bakunin/codes.php"
+
+DEPENDS = "libnxml curl"
+PR = "r1"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://www2.autistici.org/bakunin/libmrss/libmrss-${PV}.tar.gz \
+ file://better-parse-url-r0.patch;patch=1 "
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/libmrss/libmrss_0.17.bb b/packages/libmrss/libmrss_0.17.bb
deleted file mode 100644
index c2170fa09a..0000000000
--- a/packages/libmrss/libmrss_0.17.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "mRSS is a C library for parsing, writing and creating RSS (0.91, 0.92, 1.0, 2.0) files or streams"
-LICENSE = "LGPL"
-HOMEPAGE = "http://www2.autistici.org/bakunin//codes.php"
-
-DEPENDS = "libnxml curl"
-
-inherit autotools pkgconfig
-
-SRC_URI = "http://www2.autistici.org/bakunin//libmrss/libmrss-${PV}.tar.gz;md5sum=28d0e78d736748e67f25ad99456f10c3"
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/libmsip/libmsip0_svn.bb b/packages/libmsip/libmsip0_svn.bb
deleted file mode 100644
index 4418757ba2..0000000000
--- a/packages/libmsip/libmsip0_svn.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-PV = "0.2.2+svn${SRCDATE}"
-LICENSE = "LGPL"
-
-DESCRIPTION = "C++ implementation Session Initiation Protocol (RFC3261)"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "libmnetutil0 libmutil0"
-DEFAULT_PREFERENCE = "-1"
-
-inherit autotools
-
-SRC_URI = "svn://svn.minisip.org/var/svn/minisip/trunk;module=libmsip"
-S="${WORKDIR}/libmsip"
-
-
-PACKAGES = "${PN}"
-
-FILES_${PN} = " ${libdir}/libmsip.so.0 ${libdir}/libmsip.so.0.0.0 "
-
-do_stage() {
- oe_libinstall -a -so libmsip ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/libmsip
- install -m 0644 ${S}/include/libmsip/* ${STAGING_INCDIR}/libmsip
-}
diff --git a/packages/libmutil/libmutil0_svn.bb b/packages/libmutil/libmutil0_svn.bb
deleted file mode 100644
index 8766d623e3..0000000000
--- a/packages/libmutil/libmutil0_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Class library implementing utilities for C++ programming"
-LICENSE = "LGPL"
-SECTION = "libs"
-PRIORITY = "optional"
-
-DEPENDS = "openssl"
-
-PV = "0.3.1+svn${SRCDATE}"
-
-inherit autotools lib_package
-
-SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=libmutil"
-S = "${WORKDIR}/libmutil"
-
-do_stage() {
- oe_libinstall -a -so libmutil ${STAGING_LIBDIR}
-
- install -d ${STAGING_INCDIR}/libmutil
- install -m 0644 ${S}/include/libmutil/* ${STAGING_INCDIR}/libmutil
-}
diff --git a/packages/libnet/libnet-1.0.2a/configure_x86-64-host.patch b/packages/libnet/libnet-1.0.2a/configure_x86-64-host.patch
new file mode 100644
index 0000000000..69ec07c2e3
--- /dev/null
+++ b/packages/libnet/libnet-1.0.2a/configure_x86-64-host.patch
@@ -0,0 +1,11 @@
+--- Libnet-1.0.2a/config.sub~ 2007-04-07 22:00:37.000000000 +0200
++++ Libnet-1.0.2a/config.sub 2007-04-07 22:00:37.000000000 +0200
+@@ -161,7 +161,7 @@
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+- i[3456]86)
++ i[3456]86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
diff --git a/packages/libnet/libnet_1.0.2a.bb b/packages/libnet/libnet_1.0.2a.bb
index c4e4396e1a..c633327181 100644
--- a/packages/libnet/libnet_1.0.2a.bb
+++ b/packages/libnet/libnet_1.0.2a.bb
@@ -13,6 +13,7 @@ PROVIDES = "libnet-1.0"
SRC_URI = "${DEBIAN_MIRROR}/main/libn/libnet0/libnet0_${PV}.orig.tar.gz \
file://configure.patch;patch=1 \
file://configure.uclibc.patch;patch=1 \
+ file://configure_x86-64-host.patch;patch=1 \
"
S = "${WORKDIR}/libnet-${PV}.orig"
diff --git a/packages/libnfnetlink/.mtn2git_empty b/packages/libnfnetlink/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libnfnetlink/.mtn2git_empty
diff --git a/packages/libnfnetlink/libnfnetlink_0.0.30.bb b/packages/libnfnetlink/libnfnetlink_0.0.30.bb
new file mode 100644
index 0000000000..d3e3cabdc7
--- /dev/null
+++ b/packages/libnfnetlink/libnfnetlink_0.0.30.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "libnfnetlink is the low-level library for netfilter related \
+kernel/userspace communication. It provides a generic messaging \
+infrastructure for in-kernel netfilter subsystems (such as nfnetlink_log, \
+nfnetlink_queue, nfnetlink_conntrack) and their respective users and/or \
+management tools in userspace."
+
+SECTION = "devel/libs"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.netfilter.org/projects/libnfnetlink/index.html"
+PR = "r0"
+
+SRC_URI = "http://www.netfilter.org/projects/libnfnetlink/files/libnfnetlink-${PV}.tar.bz2"
+
+inherit autotools pkgconfig
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libnxml/libnxml_0.16.bb b/packages/libnxml/libnxml_0.16.bb
index c798ff3405..6f836d226d 100644
--- a/packages/libnxml/libnxml_0.16.bb
+++ b/packages/libnxml/libnxml_0.16.bb
@@ -1,4 +1,4 @@
-HOMEPAGE = "http://www2.autistici.org/bakunin//codes.php"
+HOMEPAGE = "http://www2.autistici.org/bakunin/codes.php"
DESCRIPTION = "nXML is a C library for parsing, writing and creating XML 1.0 and 1.1 files or streams. It supports utf-8, utf-16be and utf-16le, ucs-4 (1234, 4321, 2143, 2312)"
LICENSE = "LGPL"
@@ -6,7 +6,7 @@ DEPENDS = "curl"
inherit autotools pkgconfig
-SRC_URI = "http://www2.autistici.org/bakunin//libnxml/libnxml-${PV}.tar.gz;md5sum=85b6a42a9e17a23c01b2f2ed0ece0563"
+SRC_URI = "http://www2.autistici.org/bakunin/libnxml/libnxml-${PV}.tar.gz"
do_stage() {
diff --git a/packages/libogg/libtheora_0.9+1.0alpha7.bb b/packages/libogg/libtheora_0.9+1.0alpha7.bb
new file mode 100644
index 0000000000..4f2cb4ab35
--- /dev/null
+++ b/packages/libogg/libtheora_0.9+1.0alpha7.bb
@@ -0,0 +1,19 @@
+
+DEPENDS = "libogg libtheora libsdl-x11"
+
+SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.gz"
+
+S = "${WORKDIR}/libtheora-1.0alpha7"
+
+inherit autotools pkgconfig lib_package
+
+
+do_configure_append() {
+ find ${S} -name Makefile | xargs sed -i -e s:'-I/usr/include':-I${STAGING_INCDIR}:g
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/liboil/liboil_0.3.11.bb b/packages/liboil/liboil_0.3.11.bb
new file mode 100644
index 0000000000..94471a26fc
--- /dev/null
+++ b/packages/liboil/liboil_0.3.11.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Liboil is a library of simple functions that are optimized for various CPUs."
+HOMEPAGE = "http://liboil.freedesktop.org/"
+LICENSE = "various"
+
+SRC_URI = "http://liboil.freedesktop.org/download/${P}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/libol/libol_0.3.18.bb b/packages/libol/libol_0.3.18.bb
index 3ddaaa62a3..b8ad9b30ac 100644
--- a/packages/libol/libol_0.3.18.bb
+++ b/packages/libol/libol_0.3.18.bb
@@ -1,15 +1,14 @@
-PR = "r5"
+PR = "r7"
SRC_URI = "http://www.balabit.com/downloads/libol/0.3/${P}.tar.gz"
S = "${WORKDIR}/${PN}-${PV}"
-inherit autotools
+inherit autotools binconfig
do_stage() {
install -d ${STAGING_INCDIR}/libol
- install -m 0755 ${S}/libol-config ${STAGING_BINDIR_CROSS}
- install -m 0755 ${S}/src/.libs/libol.so.0.0.0 ${STAGING_LIBDIR}
+ install -m 0755 ${S}/src/.libs/libol.so.0.0.0 ${STAGING_LIBDIR}/
ln -fs ${STAGING_LIBDIR}/libol.so.0.0.0 ${STAGING_LIBDIR}/libol.so.0
install ${S}/src/*.h ${STAGING_INCDIR}/libol/
}
diff --git a/packages/libopie/libopie2.inc b/packages/libopie/libopie2.inc
index 1e0d4f1b9a..a5a5cef0bd 100644
--- a/packages/libopie/libopie2.inc
+++ b/packages/libopie/libopie2.inc
@@ -71,29 +71,29 @@ do_stage() {
}
do_install() {
- install -d ${D}${palmtopdir}/lib
+ install -d ${D}${libdir}
for f in ${LIBS}
do
- oe_libinstall -so libopie$f ${D}${palmtopdir}/lib
+ oe_libinstall -so libopie$f ${D}${libdir}
done
}
-PACKAGES = "libopiecore2 libopiedb2 libopiesecurity2 libopiemm2 libopienet2 libopiepim2 libopieui2 libopiebluez2"
+PACKAGES_prepend = " libopiecore2 libopiedb2 libopiesecurity2 libopiemm2 libopienet2 libopiepim2 libopieui2 libopiebluez2 "
DESCRIPTION_libopiecore2 = "Opie Development Platform 1.x Core Library"
-FILES_libopiecore2 = "${palmtopdir}/lib/libopiecore2.so*"
+FILES_libopiecore2 = "${libdir}/libopiecore2.so.*"
DESCRIPTION_libopiedb2 = "Opie Development Platform 1.x Database Library"
-FILES_libopiedb2 = "${palmtopdir}/lib/libopiedb2.so*"
+FILES_libopiedb2 = "${libdir}/libopiedb2.so.*"
DESCRIPTION_libopiemm2 = "Opie Development Platform 1.x Multimedia Library"
-FILES_libopiemm2 = "${palmtopdir}/lib/libopiemm2.so*"
+FILES_libopiemm2 = "${libdir}/libopiemm2.so.*"
DESCRIPTION_libopienet2 = "Opie Development Platform 1.x Network Library"
-FILES_libopienet2 = "${palmtopdir}/lib/libopienet2.so*"
+FILES_libopienet2 = "${libdir}/libopienet2.so.*"
DESCRIPTION_libopiepim2 = "Opie Development Platform 1.x PIM Library"
-FILES_libopiepim2 = "${palmtopdir}/lib/libopiepim2.so*"
+FILES_libopiepim2 = "${libdir}/libopiepim2.so.*"
DESCRIPTION_libopieui2 = "Opie Development Platform 1.x User Interface Library"
-FILES_libopieui2 = "${palmtopdir}/lib/libopieui2.so*"
+FILES_libopieui2 = "${libdir}/libopieui2.so.*"
DESCRIPTION_libopiesecurity2 = "Opie Development Platform 1.x Security Library"
-FILES_libopiesecurity2 = "${palmtopdir}/lib/libopiesecurity2.so*"
+FILES_libopiesecurity2 = "${libdir}/libopiesecurity2.so.*"
DESCRIPTION_libopiebluez2 = "Opie Development Platform 1.x Bluetooth Library"
-FILES_libopiebluez2 = "${palmtopdir}/lib/libopiebluez2.so*"
+FILES_libopiebluez2 = "${libdir}/libopiebluez2.so.*"
diff --git a/packages/libopie/libopie2/exports.patch b/packages/libopie/libopie2/exports.patch
new file mode 100644
index 0000000000..2ff06287be
--- /dev/null
+++ b/packages/libopie/libopie2/exports.patch
@@ -0,0 +1,11 @@
+--- libopie2/opiecore/ostorageinfo.h.org 2007-03-09 11:20:17.000000000 +0000
++++ libopie2/opiecore/ostorageinfo.h 2007-03-08 23:43:56.000000000 +0000
+@@ -35,7 +35,7 @@
+ namespace Opie {
+ namespace Core {
+
+-class OStorageInfo : public StorageInfo
++class Q_EXPORT OStorageInfo : public StorageInfo
+ {
+ Q_OBJECT
+
diff --git a/packages/libopie/libopie2/wireless.patch b/packages/libopie/libopie2/wireless.patch
new file mode 100644
index 0000000000..c0b2fa0f55
--- /dev/null
+++ b/packages/libopie/libopie2/wireless.patch
@@ -0,0 +1,12 @@
+diff --git a/opienet/onetwork.h b/opienet/onetwork.h
+index b13c7a3..370ad59 100644
+--- a/opienet/onetwork.h
++++ b/opienet/onetwork.h
+@@ -45,6 +45,7 @@
+ // hacky workarounds until we have a true user space wireless.h
+ #include <net/if.h>
+ #define _LINUX_IF_H
++#include <linux/types.h>
+ #include <linux/wireless.h>
+ #ifndef IW_MAX_PRIV_DEF
+ #define IW_MAX_PRIV_DEF 128
diff --git a/packages/libopie/libopie2_1.2.2.bb b/packages/libopie/libopie2_1.2.2.bb
index 1bef43c329..8409e4c523 100644
--- a/packages/libopie/libopie2_1.2.2.bb
+++ b/packages/libopie/libopie2_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-PR = "r1"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/libopie2 \
file://include.pro \
diff --git a/packages/libopie/libopie2_1.2.3.bb b/packages/libopie/libopie2_1.2.3.bb
new file mode 100644
index 0000000000..b03f61c732
--- /dev/null
+++ b/packages/libopie/libopie2_1.2.3.bb
@@ -0,0 +1,8 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};module=opie/libopie2 \
+ file://include.pro"
+
+SRC_URI_append_poodle = " file://poodle-2.6-hotkeys.patch;patch=1"
diff --git a/packages/libopie/libopie2_cvs.bb b/packages/libopie/libopie2_cvs.bb
index d6403d645a..338ddd28bd 100644
--- a/packages/libopie/libopie2_cvs.bb
+++ b/packages/libopie/libopie2_cvs.bb
@@ -1,13 +1,16 @@
require ${PN}.inc
-PV = "1.2.2+cvs${SRCDATE}"
-PR = "r4"
+PV = "${OPIE_CVS_PV}"
+PR = "r11"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "${HANDHELDS_CVS};module=opie/libopie2 \
- file://ipaq-2.6-sys-class-backlight-support.patch;patch=1 \
- file://ipaq-lcd-rotate-cleanup.patch;patch=1 \
file://include.pro"
+# Patches merged upstream, keep for reference (for 1.2.2)
+# file://ipaq-lcd-rotate-cleanup.patch;patch=1 \
+# file://exports.patch;patch=1 \
+# file://wireless.patch;patch=1"
+
SRC_URI_append_poodle = " file://poodle-2.6-hotkeys.patch;patch=1"
diff --git a/packages/libopieobex/files/.mtn2git_empty b/packages/libopieobex/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libopieobex/files/.mtn2git_empty
diff --git a/packages/libopieobex/libopieobex0.inc b/packages/libopieobex/libopieobex0.inc
index a93842f72c..3fe3d533e5 100644
--- a/packages/libopieobex/libopieobex0.inc
+++ b/packages/libopieobex/libopieobex0.inc
@@ -14,6 +14,7 @@ EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${STAGING_INCDIR}/opietooth"
do_install() {
install -d ${D}${palmtopdir}/pics/${APPNAME}/ ${D}${palmtopdir}/plugins/obex/
+ install -m 0644 ${WORKDIR}/pics/backup/check.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${WORKDIR}/pics/${APPNAME}/*.png ${D}${palmtopdir}/pics/${APPNAME}/
oe_libinstall -so libopieobex ${D}${palmtopdir}/plugins/obex/
}
diff --git a/packages/libopieobex/libopieobex0_1.2.3.bb b/packages/libopieobex/libopieobex0_1.2.3.bb
new file mode 100644
index 0000000000..eeaeb7bb70
--- /dev/null
+++ b/packages/libopieobex/libopieobex0_1.2.3.bb
@@ -0,0 +1,5 @@
+require libopieobex0.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/obex \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics "
diff --git a/packages/libopieobex/libopieobex0_cvs.bb b/packages/libopieobex/libopieobex0_cvs.bb
index e5f1cb8bc9..1dcce8b68c 100644
--- a/packages/libopieobex/libopieobex0_cvs.bb
+++ b/packages/libopieobex/libopieobex0_cvs.bb
@@ -1,5 +1,6 @@
require libopieobex0.inc
PV = "${OPIE_CVS_PV}"
+PR = "r6"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/obex \
${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/libopietooth/libopietooth1.inc b/packages/libopietooth/libopietooth1.inc
index 4b81f26cab..2ceae495c3 100644
--- a/packages/libopietooth/libopietooth1.inc
+++ b/packages/libopietooth/libopietooth1.inc
@@ -16,6 +16,6 @@ do_stage() {
}
do_install() {
- oe_libinstall -so libopietooth1 ${D}${palmtopdir}/lib
+ oe_libinstall -so libopietooth1 ${D}${libdir}
}
diff --git a/packages/libopietooth/libopietooth1_1.2.3.bb b/packages/libopietooth/libopietooth1_1.2.3.bb
new file mode 100644
index 0000000000..cb625ff687
--- /dev/null
+++ b/packages/libopietooth/libopietooth1_1.2.3.bb
@@ -0,0 +1,4 @@
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/lib"
+PR = "r0"
+
+require libopietooth1.inc
diff --git a/packages/libopietooth/libopietooth1_cvs.bb b/packages/libopietooth/libopietooth1_cvs.bb
index db2d069a96..d58832315e 100644
--- a/packages/libopietooth/libopietooth1_cvs.bb
+++ b/packages/libopietooth/libopietooth1_cvs.bb
@@ -1,4 +1,5 @@
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/opietooth/lib"
PV = "${OPIE_CVS_PV}"
+PR = "r1"
require libopietooth1.inc
diff --git a/packages/libowl/.mtn2git_empty b/packages/libowl/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libowl/.mtn2git_empty
diff --git a/packages/libowl/libowl_svn.bb b/packages/libowl/libowl_svn.bb
new file mode 100644
index 0000000000..2126e3d4d0
--- /dev/null
+++ b/packages/libowl/libowl_svn.bb
@@ -0,0 +1,48 @@
+# This recipe builds libowl and then stages the header and static lib;
+# it intentionally does not stage the shared lib and create a package.
+#
+# Libowl is currently a 'cut and paste' library; this package makes our
+# life a touch easier by not having to patch the source directly into
+# applications; instead we add -lowl to the linker cmdline. Also, when
+# we eventually make libowl into a normal shared library, this package
+# will make that transition rather simple.
+
+DESCRIPTION = "OpenedHand Widget Library"
+HOMEPAGE = "http://www.o-hand.com"
+LICENSE = "LGPL"
+SECTION = "libs"
+PR = "r3"
+PV = "0.0+svn${SRCDATE}"
+
+DEPENDS = "gtk+ glib-2.0"
+PACKAGES = ""
+
+SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=${PN};proto=http"
+
+S = "${WORKDIR}/${PN}"
+
+inherit autotools pkgconfig
+
+do_compile_prepend() {
+ # have to unstage the library first so that the tests build
+ rm -f ${STAGING_LIBDIR}/libowl*
+ rm -f ${STAGING_INCDIR}/owl*
+}
+
+do_stage() {
+ headers=`eval ls libowl/owl*.h`
+ for header in $headers; do
+ hdr_base=`eval basename $header`
+ install -m 644 $header ${STAGING_INCDIR}/$hdr_base
+ done
+ install -m 644 libowl/.libs/libowl.a ${STAGING_LIBDIR}/
+}
+
+do_install() {
+}
+
+do_package() {
+}
+
+do_package_write() {
+}
diff --git a/packages/libpcap/libpcap-0.9.6/.mtn2git_empty b/packages/libpcap/libpcap-0.9.6/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libpcap/libpcap-0.9.6/.mtn2git_empty
diff --git a/packages/libpcap/libpcap-0.9.6/shared.patch b/packages/libpcap/libpcap-0.9.6/shared.patch
new file mode 100644
index 0000000000..159389bb87
--- /dev/null
+++ b/packages/libpcap/libpcap-0.9.6/shared.patch
@@ -0,0 +1,119 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- libpcap-0.9.3/Makefile.in~shared
++++ libpcap-0.9.3/Makefile.in
+@@ -37,6 +37,15 @@
+ srcdir = @srcdir@
+ VPATH = @srcdir@
+
++# some defines for shared library compilation - FIXME, if not matching
++MAJ=0.9
++MIN=6
++VERSION=$(MAJ).$(MIN)
++LIBNAME=pcap
++LIBRARY=lib$(LIBNAME).a
++SOLIBRARY=lib$(LIBNAME).so
++SHAREDLIB=$(SOLIBRARY).$(VERSION)
++
+ #
+ # You shouldn't need to edit anything below.
+ #
+@@ -50,6 +59,7 @@
+
+ # Standard CFLAGS
+ CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
++CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ)
+
+ INSTALL = @INSTALL@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+@@ -70,6 +80,9 @@
+ .c.o:
+ @rm -f $@
+ $(CC) $(CFLAGS) -c $(srcdir)/$*.c
++%_pic.o: %.c
++ @rm -f $@
++ $(CC) -fPIC $(CFLAGS) -c -o $@ $(srcdir)/$*.c
+
+ PSRC = pcap-@V_PCAP@.c
+ FSRC = fad-@V_FINDALLDEVS@.c
+@@ -84,6 +97,7 @@
+ # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
+ # hack the extra indirection
+ OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS)
++OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=.o) $(CSRC:.c=_pic.o) $(GENSRC:.c=_pic.o)
+ HDR = pcap.h pcap-int.h pcap-namedb.h pcap-nit.h pcap-pf.h \
+ ethertype.h gencode.h gnuc.h
+ GENHDR = \
+@@ -95,15 +109,22 @@
+ TAGFILES = \
+ $(SRC) $(HDR) $(TAGHDR)
+
+-CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
++CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so*
+
+-all: libpcap.a
++all: libpcap.a $(SHAREDLIB)
+
+ libpcap.a: $(OBJ)
+ @rm -f $@
+ ar rc $@ $(OBJ) $(LIBS)
+ $(RANLIB) $@
+
++$(SHAREDLIB): $(OBJ_PIC)
++ -@rm -f $@
++ -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ)
++ $(CC) $(CFLAGS_SHARED) -o $(SHAREDLIB) $(OBJ_PIC) -lc
++ ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ)
++ ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY)
++
+ shared: libpcap.$(DYEXT)
+
+ #
+@@ -129,6 +150,9 @@
+ scanner.o: scanner.c tokdefs.h
+ $(CC) $(CFLAGS) -c scanner.c
+
++scanner_pic.o: scanner.c tokdefs.h
++ $(CC) -fPIC $(CFLAGS) -o $@ -c scanner.c
++
+ pcap.o: version.h
+
+ tokdefs.h: grammar.c
+@@ -142,9 +166,16 @@
+ @rm -f $@
+ $(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c
+
++grammer_pic.o: grammar.c
++ @rm -f $@
++ $(CC) -fPIC $(CFLAGS) -Dyylval=pcap_lval -o $@ -c grammar.c
++
+ version.o: version.c
+ $(CC) $(CFLAGS) -c version.c
+
++version_pic.o: version.c
++ $(CC) -fPIC $(CFLAGS) -c version.c -o $@
++
+ snprintf.o: $(srcdir)/missing/snprintf.c
+ $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
+
+@@ -170,11 +201,17 @@
+ bpf_filter.o: bpf_filter.c
+ $(CC) $(CFLAGS) -c bpf_filter.c
+
++bpf_filter_pic.o: bpf_filter.c
++ $(CC) -fPIC $(CFLAGS) -c bpf_filter.c -o $@
++
+ install: libpcap.a
+ [ -d $(DESTDIR)$(libdir) ] || \
+ (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
+ $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
+ $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
++ $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/
++ ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ)
++ ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY)
+ [ -d $(DESTDIR)$(includedir) ] || \
+ (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
+ $(INSTALL_DATA) $(srcdir)/pcap.h $(DESTDIR)$(includedir)/pcap.h
diff --git a/packages/libpcap/libpcap_0.9.6.bb b/packages/libpcap/libpcap_0.9.6.bb
new file mode 100644
index 0000000000..9822f38ada
--- /dev/null
+++ b/packages/libpcap/libpcap_0.9.6.bb
@@ -0,0 +1,36 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+DESCRIPTION = "Network Packet Capture Library"
+HOMEPAGE = "http://www.tcpdump.org/"
+LICENSE = "BSD"
+SECTION = "libs/network"
+PR = "r1"
+
+
+# Don't forget to edit shared.patch to have the correct version number inside
+SRC_URI = "http://www.tcpdump.org/release/libpcap-${PV}.tar.gz \
+ file://shared.patch;patch=1"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-pcap=linux"
+
+CPPFLAGS_prepend = "-I${S} "
+CFLAGS_prepend = "-I${S} "
+CXXFLAGS_prepend = "-I${S} "
+
+do_configure_prepend () {
+ if [ ! -e acinclude.m4 ]; then
+ cat aclocal.m4 > acinclude.m4
+ fi
+}
+
+do_stage () {
+ install -m 0644 pcap.h ${STAGING_INCDIR}/pcap.h
+ install -m 0644 pcap-namedb.h ${STAGING_INCDIR}/pcap-namedb.h
+ install -m 0644 pcap-bpf.h ${STAGING_INCDIR}/pcap-bpf.h
+ oe_libinstall -a -so libpcap ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}/net
+ ln -sf ${STAGING_INCDIR}/pcap-bpf.h ${STAGING_INCDIR}/net/bpf.h
+ install -m 0644 acinclude.m4 ${STAGING_DATADIR}/aclocal/libpcap.m4
+}
diff --git a/packages/libpcre/libpcre_4.4.bb b/packages/libpcre/libpcre_4.4.bb
index 7b841d0cfc..517256a0ff 100644
--- a/packages/libpcre/libpcre_4.4.bb
+++ b/packages/libpcre/libpcre_4.4.bb
@@ -5,9 +5,9 @@ provides a POSIX calling interface to PCRE; the regular expressions \
themselves still follow Perl syntax and semantics. The header file for \
the POSIX-style functions is called pcreposix.h."
SECTION = "devel"
-PR = "r6"
+PR = "r8"
LICENSE = "BSD"
-SRC_URI = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-${PV}.tar.bz2"
+SRC_URI = "${SOURCEFORGE_MIRROR}/pcre/pcre-${PV}.tar.bz2"
S = "${WORKDIR}/pcre-${PV}"
PROVIDES = "pcre"
@@ -37,7 +37,9 @@ do_stage () {
oe_libinstall -a -so libpcreposix ${STAGING_LIBDIR}
install -m 0644 pcre.h ${STAGING_INCDIR}/
install -m 0644 pcreposix.h ${STAGING_INCDIR}/
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 ${S}/dftables ${STAGING_BINDIR_NATIVE}/
}
-FILES_${PN} = "${libdir}/lib*.so*"
+FILES_${PN} = "${libdir}/lib*.so.*"
FILES_${PN}-dev += "${bindir}/*"
diff --git a/packages/libqpe/libqpe-opie.inc b/packages/libqpe/libqpe-opie.inc
index 342c7d643b..2218734fea 100644
--- a/packages/libqpe/libqpe-opie.inc
+++ b/packages/libqpe/libqpe-opie.inc
@@ -16,14 +16,6 @@ EXTRA_QMAKEVARS_PRE += "CONFIG+=LIBQPE_WITHROHFEEDBACK"
EXTRA_QMAKEVARS_POST += "DESTDIR= DEFINES+=LIBQPE_NO_INLINE_IMAGES"
CXXFLAGS_append = " -DOPIE_NO_ERASE_RECT_HACKFIX -DOPIE_NEW_MALLOC"
-CXXFLAGS_append_c7x0 = " -DOPIE_NO_WINDOWED "
-CXXFLAGS_append_tosa = " -DOPIE_NO_WINDOWED "
-CXXFLAGS_append_spitz = " -DOPIE_NO_WINDOWED "
-CXXFLAGS_append_akita = " -DOPIE_NO_WINDOWED "
-
-do_compile_prepend_mnci () {
- ln -s custom-ramses.h custom.h
-}
do_compile() {
mkdir -p ${STAGING_INCDIR}/qpe \
@@ -53,9 +45,9 @@ do_stage() {
}
do_install() {
- oe_libinstall -so libqpe ${D}${palmtopdir}/lib
+ oe_libinstall -so libqpe ${D}${libdir}
- install -d ${D}${includedir}/qpe \
+ install -d ${D}${includedir}/qpe \
${D}${includedir}/qtopia/private
for i in ${S}/*.h
@@ -72,8 +64,3 @@ do_install() {
done
rm -f ${D}${includedir}/qtopia/*_p.h # remove private stuff out of qtopia
}
-
-FILES_${PN} = "${palmtopdir}/lib/libqpe.so.*"
-FILES_${PN}-dev = "${includedir} ${palmtopdir}/lib/*"
-FILES_${PN}-dbg = "${palmtopdir}/lib/.debug/"
-PACKAGE_ARCH_${PN} = "${MACHINE_ARCH}"
diff --git a/packages/libqpe/libqpe-opie/save-windows-pos-dynamic.patch b/packages/libqpe/libqpe-opie/save-windows-pos-dynamic.patch
new file mode 100644
index 0000000000..54dd5947de
--- /dev/null
+++ b/packages/libqpe/libqpe-opie/save-windows-pos-dynamic.patch
@@ -0,0 +1,113 @@
+? 1.diff
+? library/1.diff
+Index: library/qpeapplication.cpp
+===================================================================
+RCS file: /cvs/opie/library/qpeapplication.cpp,v
+retrieving revision 1.115
+diff -u -r1.115 qpeapplication.cpp
+--- library/qpeapplication.cpp 27 Sep 2005 21:04:59 -0000 1.115
++++ library/qpeapplication.cpp 11 Jan 2007 06:12:50 -0000
+@@ -101,6 +101,7 @@
+
+
+ static bool useBigPixmaps = 0;
++static bool saveWindowsPos = 0;
+
+ class HackWidget : public QWidget
+ {
+@@ -129,6 +130,7 @@
+ fontSize = cfg.readNumEntry( "FontSize", 10 );
+ smallIconSize = cfg.readNumEntry( "SmallIconSize", 14 );
+ bigIconSize = cfg.readNumEntry( "BigIconSize", 32 );
++ saveWindowsPos = cfg.readBoolEntry( "AllowWindowed", false );
+ #ifdef OPIE_WITHROHFEEDBACK
+ RoH = 0;
+ #endif
+@@ -250,7 +252,8 @@
+
+ static bool read_widget_rect(const QString &app, bool &maximized, QPoint &p, QSize &s)
+ {
+-#ifndef OPIE_NO_WINDOWED
++ if (!saveWindowsPos)
++ return FALSE;
+ maximized = TRUE;
+ // 350 is the trigger in qwsdefaultdecoration for providing a resize button
+ if ( qApp->desktop()->width() <= 350 )
+@@ -272,8 +275,6 @@
+
+ return TRUE;
+ }
+-#endif
+- return FALSE;
+ }
+
+
+@@ -322,7 +323,8 @@
+ {
+ if( !w )
+ return;
+-#ifndef OPIE_NO_WINDOWED
++ if (!saveWindowsPos)
++ return;
+ // 350 is the trigger in qwsdefaultdecoration for providing a resize button
+ if ( qApp->desktop()->width() <= 350 )
+ return;
+@@ -343,7 +345,6 @@
+ QString s;
+ s.sprintf("%d,%d,%d,%d,%d", r.left() + offsetX, r.top() + offsetY, r.width(), r.height(), w->isMaximized() );
+ cfg.writeEntry( app, s );
+-#endif
+ }
+
+ static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
+@@ -2207,6 +2208,11 @@
+ quit();
+ }
+
++bool QPEApplication::isSaveWindowsPos()
++{
++ return saveWindowsPos;
++}
++
+ #if (__GNUC__ > 2 ) && !defined(_OS_MACX_)
+ extern "C" void __cxa_pure_virtual();
+
+Index: library/qpeapplication.h
+===================================================================
+RCS file: /cvs/opie/library/qpeapplication.h,v
+retrieving revision 1.35
+diff -u -r1.35 qpeapplication.h
+--- library/qpeapplication.h 4 Oct 2005 19:38:19 -0000 1.35
++++ library/qpeapplication.h 11 Jan 2007 06:12:50 -0000
+@@ -137,6 +137,8 @@
+
+ int exec();
+
++ static bool isSaveWindowsPos();
++
+ signals:
+ void clientMoused();
+ void timeChanged();
+Index: library/widget_showing.cpp
+===================================================================
+RCS file: /cvs/opie/library/widget_showing.cpp,v
+retrieving revision 1.4
+diff -u -r1.4 widget_showing.cpp
+--- library/widget_showing.cpp 19 Apr 2005 13:27:29 -0000 1.4
++++ library/widget_showing.cpp 11 Jan 2007 06:12:50 -0000
+@@ -52,13 +52,8 @@
+ return;
+ }
+
+-#ifdef OPIE_NO_WINDOWED
+- Q_UNUSED( nomax )
+- if ( TRUE ) {
+-#else
+- if ( !nomax
+- && ( qApp->desktop()->width() <= 320 ) ){
+-#endif
++ if ( !isSaveWindowsPos() || (!nomax
++ && ( qApp->desktop()->width() <= 30 )) ){
+ wg->showMaximized();
+ } else {
+ #ifdef Q_WS_QWS
diff --git a/packages/libqpe/libqpe-opie/unbreak-logging.patch b/packages/libqpe/libqpe-opie/unbreak-logging.patch
new file mode 100644
index 0000000000..fedd73be35
--- /dev/null
+++ b/packages/libqpe/libqpe-opie/unbreak-logging.patch
@@ -0,0 +1,21 @@
+--- library/qpeapplication.cpp.org 2007-01-24 19:54:07.000000000 +0000
++++ library/qpeapplication.cpp 2007-05-03 03:34:10.000000000 +0000
+@@ -792,14 +792,14 @@
+ {
+ switch ( type ) {
+ case QtDebugMsg:
+-#ifdef QT_DEBUG
++//#ifdef QT_DEBUG
+ fprintf( stderr, "Debug: %s\n", msg );
+-#endif
++//#endif
+ break;
+ case QtWarningMsg:
+-#ifdef QT_DEBUG
++//#ifdef QT_DEBUG
+ fprintf( stderr, "Warning: %s\n", msg );
+-#endif
++//#endif
+ break;
+ case QtFatalMsg:
+ fprintf( stderr, "Fatal: %s\n", msg );
diff --git a/packages/libqpe/libqpe-opie_1.2.2.bb b/packages/libqpe/libqpe-opie_1.2.2.bb
index 21ffea194e..009a075091 100644
--- a/packages/libqpe/libqpe-opie_1.2.2.bb
+++ b/packages/libqpe/libqpe-opie_1.2.2.bb
@@ -1,7 +1,8 @@
require ${PN}.inc
-PR = "r1"
+PR = "r3"
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
+ file://save-windows-pos-dynamic.patch;patch=1 \
file://fix-titleheight.patch;patch=1"
diff --git a/packages/libqpe/libqpe-opie_1.2.3.bb b/packages/libqpe/libqpe-opie_1.2.3.bb
new file mode 100644
index 0000000000..bd2e672fff
--- /dev/null
+++ b/packages/libqpe/libqpe-opie_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
+ file://fix-titleheight.patch;patch=1 \
+ file://unbreak-logging.patch;patch=1 \
+ "
+
diff --git a/packages/libqpe/libqpe-opie_cvs.bb b/packages/libqpe/libqpe-opie_cvs.bb
index 3dafddcf0a..f206529480 100644
--- a/packages/libqpe/libqpe-opie_cvs.bb
+++ b/packages/libqpe/libqpe-opie_cvs.bb
@@ -1,9 +1,10 @@
require ${PN}.inc
-# Remove the dash below when 1.2.1 changes
-PV = "1.2.2+cvs-${SRCDATE}"
-PR = "r1"
+PV = "1.2.2+cvs${SRCDATE}"
+PR = "r10"
SRC_URI = "${HANDHELDS_CVS};module=opie/library \
- file://fix-titleheight.patch;patch=1"
+ file://fix-titleheight.patch;patch=1 \
+ file://unbreak-logging.patch;patch=1 \
+ "
diff --git a/packages/libqtaux/libqtaux2.inc b/packages/libqtaux/libqtaux2.inc
index f8721678cf..d83c3608c9 100644
--- a/packages/libqtaux/libqtaux2.inc
+++ b/packages/libqtaux/libqtaux2.inc
@@ -22,8 +22,5 @@ do_stage() {
}
do_install() {
- oe_libinstall -so libqtaux2 ${D}${palmtopdir}/lib
+ oe_libinstall -so libqtaux2 ${D}${libdir}
}
-
-FILES_${PN}="${palmtopdir}/lib"
-
diff --git a/packages/libqtaux/libqtaux2_1.2.3.bb b/packages/libqtaux/libqtaux2_1.2.3.bb
new file mode 100644
index 0000000000..5d971e35d1
--- /dev/null
+++ b/packages/libqtaux/libqtaux2_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/libqtaux"
diff --git a/packages/librcf/librcf_0.4.bb b/packages/librcf/librcf_0.4.bb
index 463aef801f..aad6f7c338 100644
--- a/packages/librcf/librcf_0.4.bb
+++ b/packages/librcf/librcf_0.4.bb
@@ -1,14 +1,13 @@
DESCRIPTION = "A library for object-oriented inter process communication"
SECTION = "base"
PRIORITY = "optional"
-MAINTAINER = "Martin Dietze <dietze@4g-systems.com>"
LICENSE = "unknown"
DEPENDS="zlib openssl boost-asio"
RDEPENDS = "libstdc++5 libgcc1"
# the SOURCE_URI requires authentication via web browser and cookie (gasp)
# all we can do right now is download the file and save it under sources/
-SRC_URI = "http://www.codeproject.com/threads/Rcf_Ipc_For_Cpp/RCF-04.zip \
+SRC_URI = "http://www.mediaassistent.se/jarl/files/RCF-04.zip \
file://rcf-0.4-g++-4.1.diff;patch=1 \
file://rcf-0.4-openembedded.diff;patch=1"
S = "${WORKDIR}/RCF-${PV}"
diff --git a/packages/librsvg/librsvg_2.11.1.bb b/packages/librsvg/librsvg_2.11.1.bb
deleted file mode 100644
index 4cddc1f2dd..0000000000
--- a/packages/librsvg/librsvg_2.11.1.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "Library for rendering SVG files"
-SECTION = "x11/utils"
-DEPENDS = "gtk+ libcroco libart-lgpl libxml2 popt"
-LICENSE = "LGPL"
-PR = "r1"
-
-EXTRA_OECONF = "--disable-mozilla-plugin"
-
-inherit autotools pkgconfig gnome
-
-PACKAGES =+ "librsvg-gtk librsvg-gtk-dev rsvg"
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_rsvg = "${bindir}/rsvg ${bindir}/rsvg-view ${datadir}/pixmaps/svg-viewer.svg"
-FILES_librsvg-gtk = "${libdir}/gtk-2.0/*/*/*.so"
-FILES_librsvg-gtk-dev = "${libdir}/gtk-2.0"
-
-EXTRA_OECONF = "--disable-mozilla-plugin"
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/librsvg/librsvg_2.16.0.bb b/packages/librsvg/librsvg_2.16.0.bb
deleted file mode 100644
index 3110c12148..0000000000
--- a/packages/librsvg/librsvg_2.16.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Library for rendering SVG files"
-SECTION = "x11/utils"
-DEPENDS = "gtk+ libcroco cairo libart-lgpl libxml2 popt"
-LICENSE = "LGPL"
-PR = "r1"
-
-EXTRA_OECONF = "--disable-mozilla-plugin"
-
-inherit autotools pkgconfig gnome
-
-PACKAGES =+ "librsvg-gtk librsvg-gtk-dbg librsvg-gtk-dev rsvg"
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_rsvg = "${bindir}/rsvg \
- ${bindir}/rsvg-view \
- ${bindir}/rsvg-convert \
- ${datadir}/pixmaps/svg-viewer.svg"
-FILES_librsvg-gtk = "${libdir}/gtk-2.0/*/*/*.so.*"
-FILES_librsvg-gtk-dev += "${libdir}/gtk-2.0/*"
-FILES_librsvg-gtk-dbg += "${libdir}/gtk-2.0/.debug"
-
-EXTRA_OECONF = "--disable-mozilla-plugin"
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/librsvg/librsvg_2.16.1.bb b/packages/librsvg/librsvg_2.16.1.bb
new file mode 100644
index 0000000000..c7154e7157
--- /dev/null
+++ b/packages/librsvg/librsvg_2.16.1.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "Library for rendering SVG files"
+SECTION = "x11/utils"
+DEPENDS = "gtk+ libcroco cairo libart-lgpl libxml2 popt"
+LICENSE = "LGPL"
+
+PR = "r2"
+
+inherit autotools pkgconfig gnome
+
+EXTRA_OECONF = "--disable-mozilla-plugin"
+
+
+PACKAGES =+ "librsvg-gtk librsvg-gtk-dbg librsvg-gtk-dev rsvg"
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_rsvg = "${bindir}/rsvg \
+ ${bindir}/rsvg-view \
+ ${bindir}/rsvg-convert \
+ ${datadir}/pixmaps/svg-viewer.svg"
+FILES_librsvg-gtk = "${libdir}/gtk-2.0/*/*/*.so"
+FILES_librsvg-gtk-dev += "${libdir}/gtk-2.0/*.la \
+ ${libdir}/gtk-2.0/*/*.la \
+ ${libdir}/gtk-2.0/*/*/*.la \
+ "
+FILES_librsvg-gtk-dbg += "${libdir}/gtk-2.0/.debug \
+ ${libdir}/gtk-2.0/*/*/.debug"
+
+pkg_postinst_librsvg-gtk() {
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+ gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/librsvg/librsvg_2.6.5.bb b/packages/librsvg/librsvg_2.6.5.bb
deleted file mode 100644
index e5b691a000..0000000000
--- a/packages/librsvg/librsvg_2.6.5.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Library for rendering SVG files"
-SECTION = "x11/utils"
-DEPENDS = "gtk+ libart-lgpl libxml2 popt"
-LICENSE = "LGPL"
-PR = "r3"
-
-inherit autotools pkgconfig gnome
-
-PACKAGES =+ "librsvg-gtk librsvg-gtk-dev rsvg"
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_rsvg = "${bindir}/rsvg"
-FILES_librsvg-gtk = "${libdir}/gtk-2.0/*/*/*.so"
-FILES_librsvg-gtk-dev = "${libdir}/gtk-2.0"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/librsvg-2/librsvg/
- install -m 0644 rsvg.h ${STAGING_INCDIR}/librsvg-2/librsvg/
- install -m 0644 librsvg-features.h ${STAGING_INCDIR}/librsvg-2/librsvg/
- oe_libinstall -so -a librsvg-2 ${STAGING_LIBDIR}
-}
diff --git a/packages/librsvg/librsvg_2.9.5.bb b/packages/librsvg/librsvg_2.9.5.bb
deleted file mode 100644
index a462390182..0000000000
--- a/packages/librsvg/librsvg_2.9.5.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Library for rendering SVG files"
-SECTION = "x11/utils"
-DEPENDS = "gtk+ libcroco libart-lgpl libxml2 popt"
-LICENSE = "LGPL"
-PR = "r3"
-
-inherit autotools pkgconfig gnome
-
-PACKAGES =+ "librsvg-gtk librsvg-gtk-dev rsvg"
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_rsvg = "${bindir}/rsvg"
-FILES_librsvg-gtk = "${libdir}/gtk-2.0/*/*/*.so"
-FILES_librsvg-gtk-dev = "${libdir}/gtk-2.0"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/librsvg-2/librsvg/
- install -m 0644 rsvg.h ${STAGING_INCDIR}/librsvg-2/librsvg/
- install -m 0644 librsvg-features.h ${STAGING_INCDIR}/librsvg-2/librsvg/
- oe_libinstall -so -a librsvg-2 ${STAGING_LIBDIR}
-}
diff --git a/packages/libschedule/libschedule_0.17.bb b/packages/libschedule/libschedule_0.17.bb
new file mode 100644
index 0000000000..ad8cb72712
--- /dev/null
+++ b/packages/libschedule/libschedule_0.17.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "RTC alarm handling library for GPE"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "glib-2.0 sqlite libgpewidget"
+PR = "r0"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit autotools pkgconfig gpe
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/libsdl/files/kernel-asm-page.patch b/packages/libsdl/files/kernel-asm-page.patch
new file mode 100644
index 0000000000..42bceadfdc
--- /dev/null
+++ b/packages/libsdl/files/kernel-asm-page.patch
@@ -0,0 +1,13 @@
+diff --git a/src/video/Xext/Xxf86dga/XF86DGA.c b/src/video/Xext/Xxf86dga/XF86DGA.c
+index 4e3d662..de38a3c 100644
+--- a/src/video/Xext/Xxf86dga/XF86DGA.c
++++ b/src/video/Xext/Xxf86dga/XF86DGA.c
+@@ -18,7 +18,7 @@ Copyright (c) 1995,1996 The XFree86 Project, Inc
+ #define HAS_MMAP_ANON
+ #include <sys/types.h>
+ #include <sys/mman.h>
+-#include <asm/page.h> /* PAGE_SIZE */
++#include <unistd.h>
+ #define HAS_SC_PAGESIZE /* _SC_PAGESIZE may be an enum for Linux */
+ #define HAS_GETPAGESIZE
+ #endif /* linux */
diff --git a/packages/libsdl/libsdl-directfb_1.2.9.bb b/packages/libsdl/libsdl-directfb_1.2.9.bb
index 9145f5ad31..73e94e9d22 100644
--- a/packages/libsdl/libsdl-directfb_1.2.9.bb
+++ b/packages/libsdl/libsdl-directfb_1.2.9.bb
@@ -5,16 +5,27 @@ DEPENDS = "alsa-lib directfb"
PROVIDES = "virtual/libsdl"
LICENSE = "LGPL"
-PR = "r1"
+PR = "r3"
+DEFAULT_PREFERENCE = "-1"
SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \
- file://extra-keys.patch;patch=1 \
- file://directfb_obsolete_calls.patch;patch=1 \
- file://acinclude.m4"
+ file://agawa-piro-mickey-1.2.9.patch;patch=1 \
+ file://pygame-1.2.9.patch;patch=1 \
+ file://mouse-1.2.9.patch;patch=1 \
+ file://kill-stdc++-1.2.9.patch;patch=1 \
+ file://ipaq-1.2.9.patch;patch=1 \
+ file://SDL-Akita-1.2.9.patch;patch=1 \
+ file://fixlibs-1.2.9.patch;patch=1 \
+ file://no-PAGE_SIZE.patch;patch=1 \
+ file://explicit-extern-C.patch;patch=1 \
+ file://acinclude.m4 \
+ file://directfb_obsolete_calls.patch;patch=1"
S = "${WORKDIR}/SDL-${PV}"
inherit autotools binconfig
+CFLAGS_append += " -I${STAGING_INCDIR}/directfb -I${STAGING_INCDIR}/directfb-internal"
+
EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \
--enable-file --enable-oss --enable-alsa --disable-esd --disable-arts \
--disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \
@@ -29,9 +40,12 @@ FILES_${PN}-dev += "${bindir}/*config"
do_configure_prepend() {
rm -f ${S}/acinclude.m4
- cp ${WORKDIR}/acinclude.m4 ${S}/
+ cp ${WORKDIR}/acinclude.m4 ${S}/
+ if [ "${PALMTOP_USE_MULTITHREADED_QT}" == "yes" ]
+ then
+ sed -i s,-lqte,-lqte-mt, src/Makefile
+ fi
}
-
do_configure_append () {
cd ${S}
diff --git a/packages/libsdl/libsdl-native_1.2.11.bb b/packages/libsdl/libsdl-native_1.2.11.bb
index 3c3f17d1d2..d75eec53e8 100644
--- a/packages/libsdl/libsdl-native_1.2.11.bb
+++ b/packages/libsdl/libsdl-native_1.2.11.bb
@@ -2,10 +2,11 @@ DESCRIPTION = "Simple DirectMedia Layer - native Edition"
HOMEPAGE = "http://www.libsdl.org"
SECTION = "libs"
LICENSE = "LGPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \
- file://acinclude.m4"
+ file://acinclude.m4 \
+ file://kernel-asm-page.patch;patch=1 "
S = "${WORKDIR}/SDL-${PV}"
inherit autotools binconfig pkgconfig native
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/.mtn2git_empty b/packages/libsdl/libsdl-qpe-1.2.9/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/.mtn2git_empty
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/SDL-Akita-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/SDL-Akita-1.2.9.patch
new file mode 100644
index 0000000000..56ffe468e8
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/SDL-Akita-1.2.9.patch
@@ -0,0 +1,51 @@
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc 2007-03-12 20:58:19.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc 2007-03-12 20:58:27.000000000 +0100
+@@ -109,6 +109,7 @@
+ MACHINE_SHARP_SLC760,
+ MACHINE_SHARP_SLC860,
+ MACHINE_SHARP_SL6000,
++ MACHINE_SHARP_SLC1000,
+ MACHINE_IPAQ,
+ MACHINE_MAX
+ } machine_t;
+@@ -123,6 +124,7 @@
+ { "Sharp", "SL-C760", 0 },
+ { "Sharp", "SL-C860", 0 },
+ { "Sharp", "SL-6000", 0 },
++ { "Sharp", "SL-C1000", 0 },
+ { "HP", "HP IPAQ", 0 },
+ };
+
+@@ -428,6 +430,8 @@
+ machine = MACHINE_SHARP_SLC760;
+ else if (strstr(buf, "SHARP Boxer") != NULL)
+ machine = MACHINE_SHARP_SLC860;
++ else if (strstr(buf, "SHARP Akita") != NULL)
++ machine = MACHINE_SHARP_SLC1000;
+ else if ( ODevice::inst ( )-> series ( ) == Model_iPAQ )
+ machine = MACHINE_IPAQ;
+ else
+@@ -522,17 +526,18 @@
+ if (machine == MACHINE_SHARP_SLC700 ||
+ machine == MACHINE_SHARP_SLC750 ||
+ machine == MACHINE_SHARP_SLC760 ||
+- machine == MACHINE_SHARP_SLC860 || // ¾Ü¤·¤¤¤³¤È¤ï¤«¤é¤ó¤±¤É¤È¤ê¤¢¤¨¤º
+- machine == MACHINE_SHARP_SL6000 ) { // ¾Ü¤·¤¤¤³¤È¤ï¤«¤é¤ó¤±¤É¤È¤ê¤¢¤¨¤º
++ machine == MACHINE_SHARP_SLC860 ||
++ machine == MACHINE_SHARP_SL6000 ||
++ machine == MACHINE_SHARP_SLC1000 ) {
+ is_VGA_machine = true;
+ }else {
+ is_VGA_machine = false;
+ }
+
+- // qte ¤Ç¤Î²óž³ÑÅÙ¤ò¼èÆÀ
++ // qte
+ QT_GetQteServerSpec(_this, &qteRotation, &isQteQvga);
+
+- // SL-C700 ¤Î¥¹¥¿¥¤¥ë
++ // SL-C700
+ bool isInputStyle = false;
+ if (is_VGA_machine) {
+ int status = system("/home/QtPalmtop/bin/chkhinge");
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/acinclude.m4 b/packages/libsdl/libsdl-qpe-1.2.9/acinclude.m4
new file mode 100644
index 0000000000..30597ccc45
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/acinclude.m4
@@ -0,0 +1,332 @@
+# Local macros for the SDL configure.in script
+
+dnl Function to link an architecture specific file
+dnl LINK_ARCH_SRC(source_dir, arch, source_file)
+AC_DEFUN([COPY_ARCH_SRC],
+[
+ old="$srcdir/$1/$2/$3"
+ new="$1/$3"
+ if test ! -d $1; then
+ echo "Creating directory $1"
+ mkdir -p $1
+ fi
+ echo "Copying $old -> $new"
+ cat >$new <<__EOF__
+/* WARNING: This file was automatically generated!
+ * Original: $old
+ */
+__EOF__
+ cat >>$new <$old
+])
+##############################################################################
+dnl Configure Paths for Alsa
+dnl Some modifications by Richard Boulton <richard-alsa@tartarus.org>
+dnl Christopher Lansdown <lansdoct@cs.alfred.edu>
+dnl Jaroslav Kysela <perex@suse.cz>
+dnl Last modification: alsa.m4,v 1.23 2004/01/16 18:14:22 tiwai Exp
+dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate.
+dnl enables arguments --with-alsa-prefix=
+dnl --with-alsa-enc-prefix=
+dnl --disable-alsatest
+dnl
+dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified,
+dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result.
+dnl
+AC_DEFUN([AM_PATH_ALSA],
+[dnl Save the original CFLAGS, LDFLAGS, and LIBS
+alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+dnl
+dnl Get the cflags and libraries for alsa
+dnl
+AC_ARG_WITH(alsa-prefix,
+[ --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional)],
+[alsa_prefix="$withval"], [alsa_prefix=""])
+AC_ARG_WITH(alsa-inc-prefix,
+[ --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional)],
+[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""])
+
+dnl FIXME: this is not yet implemented
+AC_ARG_ENABLE(alsatest,
+[ --disable-alsatest Do not try to compile and run a test Alsa program],
+[enable_alsatest="$enableval"],
+[enable_alsatest=yes])
+
+dnl Add any special include directories
+AC_MSG_CHECKING(for ALSA CFLAGS)
+if test "$alsa_inc_prefix" != "" ; then
+ ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix"
+ CFLAGS="$CFLAGS -I$alsa_inc_prefix"
+fi
+AC_MSG_RESULT($ALSA_CFLAGS)
+
+dnl add any special lib dirs
+AC_MSG_CHECKING(for ALSA LDFLAGS)
+if test "$alsa_prefix" != "" ; then
+ ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix"
+ LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+dnl add the alsa library
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/ //'`
+LIBS="$ALSA_LIBS $LIBS"
+AC_MSG_RESULT($ALSA_LIBS)
+
+dnl Check for a working version of libasound that is of the right version.
+min_alsa_version=ifelse([$1], ,0.1.1,$1)
+AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version)
+no_alsa=""
+ alsa_min_major_version=`echo $min_alsa_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ alsa_min_minor_version=`echo $min_alsa_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ alsa_min_micro_version=`echo $min_alsa_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE([
+#include <alsa/asoundlib.h>
+], [
+/* ensure backward compatibility */
+#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
+#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
+#endif
+#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR)
+#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR
+#endif
+#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR)
+#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR
+#endif
+
+# if(SND_LIB_MAJOR > $alsa_min_major_version)
+ exit(0);
+# else
+# if(SND_LIB_MAJOR < $alsa_min_major_version)
+# error not present
+# endif
+
+# if(SND_LIB_MINOR > $alsa_min_minor_version)
+ exit(0);
+# else
+# if(SND_LIB_MINOR < $alsa_min_minor_version)
+# error not present
+# endif
+
+# if(SND_LIB_SUBMINOR < $alsa_min_micro_version)
+# error not present
+# endif
+# endif
+# endif
+exit(0);
+],
+ [AC_MSG_RESULT(found.)],
+ [AC_MSG_RESULT(not present.)
+ ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)])
+ alsa_found=no]
+)
+AC_LANG_RESTORE
+
+dnl Now that we know that we have the right version, let's see if we have the library and not just the headers.
+if test "x$enable_alsatest" = "xyes"; then
+AC_CHECK_LIB([asound], [snd_ctl_open],,
+ [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)])
+ alsa_found=no]
+)
+fi
+if test "x$alsa_found" = "xyes" ; then
+ ifelse([$2], , :, [$2])
+ LIBS=`echo $LIBS | sed 's/-lasound//g'`
+ LIBS=`echo $LIBS | sed 's/ //'`
+ LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+ ifelse([$3], , :, [$3])
+ CFLAGS="$alsa_save_CFLAGS"
+ LDFLAGS="$alsa_save_LDFLAGS"
+ LIBS="$alsa_save_LIBS"
+ ALSA_CFLAGS=""
+ ALSA_LIBS=""
+fi
+
+dnl That should be it. Now just export out symbols:
+AC_SUBST(ALSA_CFLAGS)
+AC_SUBST(ALSA_LIBS)
+])
+
+#
+# --- esd.m4 ---
+#
+# Configure paths for ESD
+# Manish Singh 98-9-30
+# stolen back from Frank Belew
+# stolen from Manish Singh
+# Shamelessly stolen from Owen Taylor
+
+dnl AM_PATH_ESD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for ESD, and define ESD_CFLAGS and ESD_LIBS
+dnl
+AC_DEFUN([AM_PATH_ESD],
+[dnl
+dnl Get the cflags and libraries from the esd-config script
+dnl
+AC_ARG_WITH(esd-prefix,[ --with-esd-prefix=PFX Prefix where ESD is installed (optional)],
+ esd_prefix="$withval", esd_prefix="")
+AC_ARG_WITH(esd-exec-prefix,[ --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)],
+ esd_exec_prefix="$withval", esd_exec_prefix="")
+AC_ARG_ENABLE(esdtest, [ --disable-esdtest Do not try to compile and run a test ESD program],
+ , enable_esdtest=yes)
+
+ if test x$esd_exec_prefix != x ; then
+ esd_args="$esd_args --exec-prefix=$esd_exec_prefix"
+ if test x${ESD_CONFIG+set} != xset ; then
+ ESD_CONFIG=$esd_exec_prefix/bin/esd-config
+ fi
+ fi
+ if test x$esd_prefix != x ; then
+ esd_args="$esd_args --prefix=$esd_prefix"
+ if test x${ESD_CONFIG+set} != xset ; then
+ ESD_CONFIG=$esd_prefix/bin/esd-config
+ fi
+ fi
+
+ AC_PATH_PROG(ESD_CONFIG, esd-config, no)
+ min_esd_version=ifelse([$1], ,0.2.7,$1)
+ AC_MSG_CHECKING(for ESD - version >= $min_esd_version)
+ no_esd=""
+ if test "$ESD_CONFIG" = "no" ; then
+ no_esd=yes
+ else
+ ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags`
+ ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs`
+
+ esd_major_version=`$ESD_CONFIG $esd_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+ esd_minor_version=`$ESD_CONFIG $esd_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+ esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ if test "x$enable_esdtest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $ESD_CFLAGS"
+ LIBS="$LIBS $ESD_LIBS"
+dnl
+dnl Now check if the installed ESD is sufficiently new. (Also sanity
+dnl checks the results of esd-config to some extent
+dnl
+ rm -f conf.esdtest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <esd.h>
+
+char*
+my_strdup (char *str)
+{
+ char *new_str;
+
+ if (str)
+ {
+ new_str = malloc ((strlen (str) + 1) * sizeof(char));
+ strcpy (new_str, str);
+ }
+ else
+ new_str = NULL;
+
+ return new_str;
+}
+
+int main ()
+{
+ int major, minor, micro;
+ char *tmp_version;
+
+ system ("touch conf.esdtest");
+
+ /* HP/UX 9 (%@#!) writes to sscanf strings */
+ tmp_version = my_strdup("$min_esd_version");
+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+ printf("%s, bad version string\n", "$min_esd_version");
+ exit(1);
+ }
+
+ if (($esd_major_version > major) ||
+ (($esd_major_version == major) && ($esd_minor_version > minor)) ||
+ (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro)))
+ {
+ return 0;
+ }
+ else
+ {
+ printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version);
+ printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro);
+ printf("*** best to upgrade to the required version.\n");
+ printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n");
+ printf("*** to point to the correct copy of esd-config, and remove the file\n");
+ printf("*** config.cache before re-running configure\n");
+ return 1;
+ }
+}
+
+],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_esd" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ AC_MSG_RESULT(no)
+ if test "$ESD_CONFIG" = "no" ; then
+ echo "*** The esd-config script installed by ESD could not be found"
+ echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the ESD_CONFIG environment variable to the"
+ echo "*** full path to esd-config."
+ else
+ if test -f conf.esdtest ; then
+ :
+ else
+ echo "*** Could not run ESD test program, checking why..."
+ CFLAGS="$CFLAGS $ESD_CFLAGS"
+ LIBS="$LIBS $ESD_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include <esd.h>
+], [ return 0; ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding ESD or finding the wrong"
+ echo "*** version of ESD. If it is not finding ESD, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means ESD was incorrectly installed"
+ echo "*** or that you have moved ESD since it was installed. In the latter case, you"
+ echo "*** may want to edit the esd-config script: $ESD_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ ESD_CFLAGS=""
+ ESD_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(ESD_CFLAGS)
+ AC_SUBST(ESD_LIBS)
+ rm -f conf.esdtest
+])
+
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/agawa-piro-mickey-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/agawa-piro-mickey-1.2.9.patch
new file mode 100644
index 0000000000..d7c561402f
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/agawa-piro-mickey-1.2.9.patch
@@ -0,0 +1,2054 @@
+diff -Naur SDL-1.2.9-orig/src/video/fbcon/SDL_fbevents.c SDL-1.2.9/src/video/fbcon/SDL_fbevents.c
+--- SDL-1.2.9-orig/src/video/fbcon/SDL_fbevents.c 2005-01-04 20:04:14.000000000 +0100
++++ SDL-1.2.9/src/video/fbcon/SDL_fbevents.c 2007-03-12 20:54:14.000000000 +0100
+@@ -60,7 +60,13 @@
+ #ifndef GPM_NODE_FIFO
+ #define GPM_NODE_FIFO "/dev/gpmdata"
+ #endif
++#define POINTERCAL "/etc/pointercal"
+
++static struct SDL_cal {
++ long ok;
++ long a, b, c, d, e, f, s;
++ long rotate;
++} cal = { 0 };
+
+ /* The translation tables from a console scancode to a SDL keysym */
+ #define NUM_VGAKEYMAPS (1<<KG_CAPSSHIFT)
+@@ -317,6 +323,7 @@
+ MOUSE_MS,
+ MOUSE_BM,
+ MOUSE_ELO,
++ TS_SLC7X0,
+ NUM_MOUSE_DRVS
+ } mouse_drv = MOUSE_NONE;
+
+@@ -500,6 +507,9 @@
+ mousedev = getenv("SDL_MOUSEDEV");
+ mouse_fd = -1;
+
++ const char *sdl_rot_flag;
++ sdl_rot_flag = getenv("SDL_FBROT");
++
+ /* ELO TOUCHSCREEN SUPPORT */
+
+ if( (mousedrv != NULL) && (strcmp(mousedrv, "ELO") == 0) ) {
+@@ -601,9 +611,39 @@
+ mouse_drv = MOUSE_MS;
+ }
+ }
++ /* Default to a SLC7X0 touch screen */
++ if ( mouse_fd < 0 ) {
++ mousedev = "/dev/ts";
++ mouse_fd = open(mousedev, O_RDONLY, 0);
++ if ( mouse_fd >= 0 ) {
++ FILE *pcal;
++ cal.ok = 0;
++ pcal = fopen(POINTERCAL, "r");
++ if(pcal == NULL){
++ fprintf(stderr, "Warning: cannot open " POINTERCAL ".\n");
++ }else{
++ int n;
++ n = fscanf(pcal, "%d %d %d %d %d %d %d",
++ &cal.a, &cal.b, &cal.c, &cal.d, &cal.e, &cal.f, &cal.s);
++ if(n != 7){
++ fprintf(stderr, "Warning: " POINTERCAL " is unknown format.\n");
++ }else{
++ cal.ok = 1;
++ }
++ fclose(pcal);
++ }
++ if ( sdl_rot_flag == NULL ) {
++ cal.rotate = 0;
++ } else {
++ cal.rotate = atoi(sdl_rot_flag);
++ }
++ mouse_drv = TS_SLC7X0;
++ }
++ }
+ if ( mouse_fd < 0 ) {
+ mouse_drv = MOUSE_NONE;
+ }
++
+ return(mouse_fd);
+ }
+
+@@ -678,6 +718,10 @@
+ packetsize = ELO_PACKET_SIZE;
+ relative = 0;
+ break;
++ case TS_SLC7X0:
++ packetsize = 8;
++ relative = 0;
++ break;
+ case NUM_MOUSE_DRVS:
+ /* Uh oh.. */
+ packetsize = 0;
+@@ -810,6 +854,25 @@
+ */
+
+ case MOUSE_ELO:
++ case TS_SLC7X0:
++ /* Get current mouse state */
++ button = ((mousebuf[i+1] << 8)+mousebuf[i])/500;
++ dx = (mousebuf[i+3] << 8)+mousebuf[i+2];
++ dy = (mousebuf[i+5] << 8)+mousebuf[i+4];
++ if(cal.ok){
++ long X, Y;
++ X = (cal.a * dx + cal.b * dy + cal.c) / cal.s;
++ Y = (cal.d * dx + cal.e * dy + cal.f) / cal.s;
++ dx = X;
++ dy = Y;
++ }
++ if(cal.rotate == 3){
++ int tmp;
++ tmp=dx;
++ dx = dy;
++ dy = 480-tmp;
++ }
++ break;
+ case NUM_MOUSE_DRVS:
+ /* Uh oh.. */
+ dx = 0;
+diff -Naur SDL-1.2.9-orig/src/video/fbcon/SDL_fbvideo.c SDL-1.2.9/src/video/fbcon/SDL_fbvideo.c
+--- SDL-1.2.9-orig/src/video/fbcon/SDL_fbvideo.c 2005-02-12 19:03:54.000000000 +0100
++++ SDL-1.2.9/src/video/fbcon/SDL_fbvideo.c 2007-03-12 20:54:14.000000000 +0100
+@@ -51,7 +51,7 @@
+ #include "SDL_fbmatrox.h"
+ #include "SDL_fbriva.h"
+
+-
++/* #define FBCON_DEBUG 1 */
+ #if defined(i386) && defined(FB_TYPE_VGA_PLANES)
+ #define VGA16_FBCON_SUPPORT
+ #ifndef FB_AUX_VGA_PLANES_VGA4
+@@ -76,9 +76,11 @@
+ { 0, 0, 720, 576 }, /* PAL */
+ { 0, 0, 720, 480 }, /* NTSC */
+ { 0, 0, 640, 480 }, /* 16 bpp: 0x111, or 273 */
++ { 0, 0, 480, 640 },
+ { 0, 0, 640, 400 }, /* 8 bpp: 0x100, or 256 */
+ { 0, 0, 512, 384 },
+ { 0, 0, 320, 240 },
++ { 0, 0, 240, 320 },
+ { 0, 0, 320, 200 }
+ };
+ static const struct {
+@@ -112,9 +114,11 @@
+ */
+ { 320, 200, 79440, 16, 16, 20, 4, 48, 1, 0, 2 }, /* 70 Hz */
+ { 320, 240, 63492, 16, 16, 16, 4, 48, 2, 0, 2 }, /* 72 Hz */
++ { 240, 320, 63492, 16, 16, 16, 4, 48, 3, 0, 2 }, /* 72 Hz */
+ { 512, 384, 49603, 48, 16, 16, 1, 64, 3, 0, 0 }, /* 78 Hz */
+ { 640, 400, 31746, 96, 32, 41, 1, 64, 3, 2, 0 }, /* 85 Hz */
+ { 640, 480, 31746, 120, 16, 16, 1, 64, 3, 0, 0 }, /* 75 Hz */
++ { 480, 640, 31746, 120, 16, 16, 1, 64, 4, 0, 0 }, /* 75 Hz */
+ { 768, 576, 26101, 144, 16, 28, 6, 112, 4, 0, 0 }, /* 60 Hz */
+ { 800, 600, 20000, 64, 56, 23, 37, 120, 6, 3, 0 }, /* 72 Hz */
+ { 960, 720, 17686, 144, 24, 28, 8, 112, 4, 0, 0 }, /* 60 Hz */
+@@ -152,6 +156,10 @@
+ struct fb_var_screeninfo *vinfo);
+ static void FB_RestorePalette(_THIS);
+
++static char *console_fd_buf;
++static char *mapped_mem_fb;
++static int rotation_flag;
++
+ /* FB driver bootstrap functions */
+
+ static int FB_Available(void)
+@@ -241,18 +249,30 @@
+
+ mode_okay = 0;
+ vinfo->bits_per_pixel = (index+1)*8;
+- vinfo->xres = *w;
+- vinfo->xres_virtual = *w;
+- vinfo->yres = *h;
+- vinfo->yres_virtual = *h;
++ if ((rotation_flag == 0) || (rotation_flag == 2)) {
++ vinfo->xres = *w;
++ vinfo->xres_virtual = *w;
++ vinfo->yres = *h;
++ vinfo->yres_virtual = *h;
++ } else {
++ vinfo->xres = *h;
++ vinfo->xres_virtual = *h;
++ vinfo->yres = *w;
++ vinfo->yres_virtual = *w;
++ }
+ vinfo->activate = FB_ACTIVATE_TEST;
+ if ( ioctl(console_fd, FBIOPUT_VSCREENINFO, vinfo) == 0 ) {
+ #ifdef FBCON_DEBUG
+ fprintf(stderr, "Checked mode %dx%d at %d bpp, got mode %dx%d at %d bpp\n", *w, *h, (index+1)*8, vinfo->xres, vinfo->yres, vinfo->bits_per_pixel);
+ #endif
+ if ( (((vinfo->bits_per_pixel+7)/8)-1) == index ) {
+- *w = vinfo->xres;
+- *h = vinfo->yres;
++ if ((rotation_flag == 0) || (rotation_flag == 2)) {
++ *w = vinfo->xres;
++ *h = vinfo->yres;
++ } else {
++ *h = vinfo->xres;
++ *w = vinfo->yres;
++ }
+ mode_okay = 1;
+ }
+ }
+@@ -332,6 +352,7 @@
+ unsigned int current_w;
+ unsigned int current_h;
+ const char *SDL_fbdev;
++ const char *SDL_rot_flag;
+
+ /* Initialize the library */
+ SDL_fbdev = getenv("SDL_FBDEV");
+@@ -344,6 +365,14 @@
+ return(-1);
+ }
+
++ SDL_rot_flag = getenv("SDL_FBROT");
++ if ( SDL_rot_flag == NULL ) {
++ rotation_flag = 0;
++ } else {
++ rotation_flag = atoi(SDL_rot_flag);
++ }
++
++
+ #ifndef DISABLE_THREADS
+ /* Create the hardware surface lock mutex */
+ hw_lock = SDL_CreateMutex();
+@@ -407,13 +436,33 @@
+ mapped_offset = (((long)finfo.smem_start) -
+ (((long)finfo.smem_start)&~(PAGE_SIZE-1)));
+ mapped_memlen = finfo.smem_len+mapped_offset;
+- mapped_mem = mmap(NULL, mapped_memlen,
+- PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);
+- if ( mapped_mem == (char *)-1 ) {
+- SDL_SetError("Unable to memory map the video hardware");
+- mapped_mem = NULL;
+- FB_VideoQuit(this);
+- return(-1);
++ if (rotation_flag == 0) {
++ mapped_mem = mmap(NULL, mapped_memlen,
++ PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);
++ if ( mapped_mem == (char *)-1 ) {
++ SDL_SetError("Unable to memory map the video hardware");
++ mapped_mem = NULL;
++ FB_VideoQuit(this);
++ return(-1);
++ }
++ } else {
++
++ console_fd_buf = (char *)malloc(640*480*2);
++
++ if (console_fd_buf == NULL){
++ SDL_SetError("Unable to memory for buffer");
++ return(-1);
++ }
++
++ mapped_mem_fb = mmap(NULL, mapped_memlen,
++ PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);
++ if ( mapped_mem_fb == (char *)-1 ) {
++ SDL_SetError("Unable to memory map the video hardware");
++ mapped_mem_fb = NULL;
++ FB_VideoQuit(this);
++ return(-1);
++ }
++ mapped_mem = console_fd_buf;
+ }
+
+ /* Determine the current screen depth */
+@@ -555,6 +604,7 @@
+
+ /* Various screen update functions available */
+ static void FB_DirectUpdate(_THIS, int numrects, SDL_Rect *rects);
++static void FB_RotationUpdate(_THIS, int numrects, SDL_Rect *rects);
+ #ifdef VGA16_FBCON_SUPPORT
+ static void FB_VGA16Update(_THIS, int numrects, SDL_Rect *rects);
+ #endif
+@@ -725,7 +775,7 @@
+ Uint32 Bmask;
+ char *surfaces_mem;
+ int surfaces_len;
+-
++
+ /* Set the terminal into graphics mode */
+ if ( FB_EnterGraphicsMode(this) < 0 ) {
+ return(NULL);
+@@ -734,6 +784,8 @@
+ /* Restore the original palette */
+ FB_RestorePalette(this);
+
++ flags &= ~SDL_DOUBLEBUF;
++
+ /* Set the video mode and get the final screen format */
+ if ( ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0 ) {
+ SDL_SetError("Couldn't get console screen info");
+@@ -748,13 +800,24 @@
+ vinfo.activate = FB_ACTIVATE_NOW;
+ vinfo.accel_flags = 0;
+ vinfo.bits_per_pixel = bpp;
+- vinfo.xres = width;
+- vinfo.xres_virtual = width;
+- vinfo.yres = height;
+- if ( flags & SDL_DOUBLEBUF ) {
+- vinfo.yres_virtual = height*2;
++ if ((rotation_flag == 0) || (rotation_flag == 2)) {
++ vinfo.xres = width;
++ vinfo.xres_virtual = width;
++ vinfo.yres = height;
++ if ( flags & SDL_DOUBLEBUF ) {
++ vinfo.yres_virtual = height*2;
++ } else {
++ vinfo.yres_virtual = height;
++ }
+ } else {
+- vinfo.yres_virtual = height;
++ vinfo.xres = height;
++ vinfo.xres_virtual = height;
++ vinfo.yres = width;
++ if ( flags & SDL_DOUBLEBUF ) {
++ vinfo.yres_virtual = width*2;
++ } else {
++ vinfo.yres_virtual = width;
++ }
+ }
+ vinfo.xoffset = 0;
+ vinfo.yoffset = 0;
+@@ -776,6 +839,15 @@
+ return(NULL);
+ }
+ }
++ vinfo.xres = width;
++ vinfo.xres_virtual = width;
++ vinfo.yres = height;
++ if ( flags & SDL_DOUBLEBUF ) {
++ vinfo.yres_virtual = height*2;
++ } else {
++ vinfo.yres_virtual = height;
++ }
++
+ } else {
+ int maxheight;
+
+@@ -821,7 +893,9 @@
+ SDL_SetError("Couldn't get console hardware info");
+ return(NULL);
+ }
+-
++#ifdef FBCON_DEBUG
++ print_finfo(&finfo);
++#endif
+ /* Save hardware palette, if needed */
+ FB_SavePalette(this, &finfo, &vinfo);
+
+@@ -829,7 +903,11 @@
+ current->flags = (SDL_FULLSCREEN|SDL_HWSURFACE);
+ current->w = vinfo.xres;
+ current->h = vinfo.yres;
+- current->pitch = finfo.line_length;
++ if ((rotation_flag == 0) || (rotation_flag == 2) ) {
++ current->pitch = finfo.line_length;
++ } else {
++ current->pitch = vinfo.xres*2;
++ }
+ current->pixels = mapped_mem+mapped_offset;
+
+ /* Set up the information for hardware surfaces */
+@@ -863,7 +941,7 @@
+ }
+
+ /* Set the update rectangle function */
+- this->UpdateRects = FB_DirectUpdate;
++ this->UpdateRects = FB_RotationUpdate;
+
+ /* We're done */
+ return(current);
+@@ -1123,6 +1201,89 @@
+ return;
+ }
+
++static void FB_RotationUpdate(_THIS, int numrects, SDL_Rect *rects)
++{
++ unsigned short *pDst;
++ unsigned short *pSrc;
++ unsigned int width;
++ unsigned int height;
++ unsigned int srcYAdd;
++ unsigned int dstXAdd;
++ unsigned int dstYSub;
++ unsigned int i;
++ unsigned int dstH;
++ unsigned int dstW;
++
++#ifdef FBCON_DEBUG
++ fprintf(stderr,"rotation_flag = %d \n",rotation_flag);
++#endif
++ switch (rotation_flag) {
++ case 0:
++ break;
++ case 1:
++ memcpy(mapped_mem_fb,mapped_mem,640*480*2);
++ break;
++ case 2:
++ memcpy(mapped_mem_fb,mapped_mem,640*480*2);
++ break;
++ case 3:
++ dstW=cache_vinfo.xres;
++ dstH=cache_vinfo.yres;
++#ifdef FBCON_DEBUG
++ fprintf(stderr,"dstH = %d : dstW = %d : rects->x = %d : rects->y = %d\n",dstH,dstW);
++ fprintf(stderr,"rects->x = %d : rects->y = %d : rects->w = %d : rects->h = %d\n",rects->x,rects->y,rects->w,rects->h);
++#endif
++ while (numrects) {
++ if (rects->w != dstW || rects->h != dstH) {
++ pSrc = mapped_mem + (rects->x + rects->y * dstW)*2;
++ pDst = mapped_mem_fb + (dstH-1+rects->x * dstH - rects->y)*2;
++
++ width = rects->w;
++ height = rects->h;
++
++ srcYAdd = dstW - rects->w;
++ dstXAdd = dstH;
++ dstYSub = (dstH * rects->w) + 1;
++
++ while (height--) {
++ i = width;
++ while (i--) {
++ *pDst = *pSrc ++;
++ pDst += dstXAdd;
++ }
++ pSrc += srcYAdd;
++ pDst -= dstYSub;
++ }
++
++ } else {
++ pDst=mapped_mem_fb+dstH*2-2;
++ pSrc=mapped_mem;
++ height=dstH;
++ width=dstW;
++ dstXAdd=height;
++ dstYSub=dstW*dstH+1;
++
++ while (height--) {
++ i = width;
++ while (i--) {
++ *pDst = *pSrc ++;
++ pDst += dstXAdd;
++ }
++ pDst -= dstYSub;
++ }
++ }
++ numrects--;
++ rects++;
++ }
++ break;
++ default:
++ break;
++ }
++
++
++
++}
++
+ #ifdef VGA16_FBCON_SUPPORT
+ /* Code adapted with thanks from the XFree86 VGA16 driver! :) */
+ #define writeGr(index, value) \
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc SDL-1.2.9/src/video/qtopia/SDL_QWin.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc 2004-01-04 17:49:26.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_QWin.cc 2007-03-12 20:54:14.000000000 +0100
+@@ -1,3 +1,4 @@
++
+ /*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2004 Sam Lantinga
+@@ -27,15 +28,24 @@
+
+ #include "SDL_QWin.h"
+ #include <qapplication.h>
++#include <qpe/qpeapplication.h>
+ #include <qdirectpainter_qws.h>
+
++extern int fb_hwrot;
++extern int fb_direct;
++extern bool is_VGA_machine;
++static int mouse_button_mode=1;
++
+ screenRotationT screenRotation = SDL_QT_NO_ROTATION;
+
+ SDL_QWin::SDL_QWin(const QSize& size)
+ : QWidget(0, "SDL_main"), my_painter(0), my_image(0),
+ my_inhibit_resize(false), my_mouse_pos(-1,-1), my_flags(0),
+- my_has_fullscreen(false), my_locked(0)
++ my_has_fullscreen(false), my_locked(0),
++ rotation_(0), qteRotation_(0), keyRotation_(0), qteKeyRotation_(0),
++ isSLA300InputFix_(0)
+ {
++ for (int i = 0; i < 5; i++) curAxis_[i] = 0;
+ setBackgroundMode(NoBackground);
+ }
+
+@@ -84,6 +94,7 @@
+ }
+
+ void SDL_QWin::setMousePos(const QPoint &pos) {
++#if 0
+ if(my_image->width() == height()) {
+ if (screenRotation == SDL_QT_ROTATION_90)
+ my_mouse_pos = QPoint(height()-pos.y(), pos.x());
+@@ -92,6 +103,66 @@
+ } else {
+ my_mouse_pos = pos;
+ }
++#else
++ QPoint realPos;
++
++ if (is_VGA_machine) {
++ realPos = pos;
++ my_mouse_pos = realPos;
++ }else {
++ switch (qteRotation_) {
++ case 0:
++ realPos = pos;
++ break;
++ case 1:
++ realPos.setX(pos.y());
++ realPos.setY(fbSize_.height() - 1 - pos.x());
++ break;
++ case 2:
++ realPos.setX(fbSize_.width() - 1 - pos.x());
++ realPos.setY(fbSize_.height() - 1 - pos.y());
++ break;
++ case 3:
++ realPos.setX(fbSize_.width() - 1 - pos.y());
++ realPos.setY(pos.x());
++ break;
++ };
++
++ // fprintf(stderr, "setMousePos: realPos(%d, %d)\n", realPos.x(), realPos.y());
++
++ int borderWidth = (fbSize_.width() - my_image->width()) >> 1;
++ int borderHeight = (fbSize_.height() - my_image->height()) >> 1;
++ if ( rotation_ & 1 ){
++ borderWidth = (fbSize_.height() - my_image->width()) >> 1;
++ borderHeight = (fbSize_.width() - my_image->height()) >> 1;
++ }
++ realPos.setX(realPos.x() - borderWidth);
++ realPos.setY(realPos.y() - borderHeight);
++
++ fprintf(stderr, "setMousePos: realPos2(%d, %d)\n", realPos.x(), realPos.y());
++
++ switch (rotation_) {
++ case 0:
++ my_mouse_pos = realPos;
++ break;
++ case 1:
++ my_mouse_pos.setX(realPos.y());
++ my_mouse_pos.setY(my_image->height() - 1 - realPos.x());
++ break;
++ case 2:
++ my_mouse_pos.setX(my_image->width() - 1 - realPos.x());
++ my_mouse_pos.setY(my_image->height() - 1 - realPos.y());
++ break;
++ case 3:
++ my_mouse_pos.setX(realPos.y());//my_image->width() - 1 - realPos.y());
++ my_mouse_pos.setY(my_image->height() - realPos.x());
++ break;
++ }
++ }
++
++// fprintf(stderr, "setMousePos: mymousePos(%d, %d)\n", (short)my_mouse_pos.x(), (short)my_mouse_pos.y());
++
++#endif
+ }
+
+ void SDL_QWin::mouseMoveEvent(QMouseEvent *e) {
+@@ -113,269 +184,318 @@
+ void SDL_QWin::mousePressEvent(QMouseEvent *e) {
+ mouseMoveEvent(e);
+ Qt::ButtonState button = e->button();
+- SDL_PrivateMouseButton(SDL_PRESSED,
+- (button & Qt::LeftButton) ? 1 :
+- ((button & Qt::RightButton) ? 2 : 3),
++ SDL_PrivateMouseButton(SDL_PRESSED,mouse_button_mode,
+ my_mouse_pos.x(), my_mouse_pos.y());
+ }
+
+ void SDL_QWin::mouseReleaseEvent(QMouseEvent *e) {
+ setMousePos(e->pos());
+ Qt::ButtonState button = e->button();
+- SDL_PrivateMouseButton(SDL_RELEASED,
+- (button & Qt::LeftButton) ? 1 :
+- ((button & Qt::RightButton) ? 2 : 3),
++ SDL_PrivateMouseButton(SDL_RELEASED,mouse_button_mode,
+ my_mouse_pos.x(), my_mouse_pos.y());
+ my_mouse_pos = QPoint(-1, -1);
+ }
+
+-static inline void
+-gs_fastRotateBlit_3 ( unsigned short *fb,
+- unsigned short *bits,
+- const QRect& rect )
++#ifndef __i386__
++
++static void
++blitRotate3(Uint16 *dstBits, const QSize& dstSize,
++ const Uint16 *srcBits, const QSize& srcSize,
++ const QRect& srcBlitRect);
++
++static void
++blitRotate0(Uint16 *dstBits, const QSize& dstSize,
++ const Uint16 *srcBits, const QSize& srcSize,
++ const QRect& srcBlitRect)
+ {
+- // FIXME: this only works correctly for 240x320 displays
+- int startx, starty;
+- int width, height;
+-
+- startx = rect.left() >> 1;
+- starty = rect.top() >> 1;
+- width = ((rect.right() - rect.left()) >> 1) + 2;
+- height = ((rect.bottom() - rect.top()) >> 1) + 2;
+-
+- if((startx+width) > 120) {
+- width = 120 - startx; // avoid horizontal overflow
+- }
+- if((starty+height) > 160) {
+- height = 160 - starty; // avoid vertical overflow
+- }
+-
+- ulong *sp1, *sp2, *dp1, *dp2;
+- ulong stop, sbot, dtop, dbot;
+-
+- sp1 = (ulong*)bits + startx + starty*240;
+- sp2 = sp1 + 120;
+- dp1 = (ulong *)fb + (159 - starty) + startx*320;
+- dp2 = dp1 + 160;
+- int rowadd = (-320*width) - 1;
+- int rowadd2 = 240 - width;
+- // transfer in cells of 2x2 pixels in words
+- for (int y=0; y<height; y++) {
+- for (int x=0; x<width; x++) {
+- // read source pixels
+- stop = *sp1;
+- sbot = *sp2;
+- // rotate pixels
+- dtop = (sbot & 0xffff) + ((stop & 0xffff)<<16);
+- dbot = ((sbot & 0xffff0000)>>16) + (stop & 0xffff0000);
+- // write to framebuffer
+- *dp1 = dtop;
+- *dp2 = dbot;
+- // update source ptrs
+- sp1++; sp2++;
+- // update dest ptrs - 2 pix at a time
+- dp1 += 320;
+- dp2 += 320;
+- }
+- // adjust src ptrs - skip a row as we work in pairs
+- sp1 += rowadd2;
+- sp2 += rowadd2;
+- // adjust dest ptrs for rotation
+- dp1 += rowadd;
+- dp2 += rowadd;
++ srcBits += srcBlitRect.left() + srcBlitRect.top() * srcSize.width();
++ dstBits += ((dstSize.width() - srcSize.width()) >> 1)
++ + (((dstSize.height() - srcSize.height()) >> 1) * dstSize.width());
++ dstBits += srcBlitRect.left() + srcBlitRect.top() * dstSize.width();
++ int w = srcBlitRect.width() << 1;
++ int h = srcBlitRect.height();
++
++ while (h--) {
++ memcpy(dstBits, srcBits, w);
++ dstBits += dstSize.width();
++ srcBits += srcSize.width();
+ }
+ }
+
+-static inline void
+-gs_fastRotateBlit_1 ( unsigned short *fb,
+- unsigned short *bits,
+- const QRect& rect ) {
+- // FIXME: this only works correctly for 240x320 displays
+- int startx, starty;
+- int width, height;
+-
+- startx = rect.left() >> 1;
+- starty = rect.top() >> 1;
+- width = ((rect.right() - rect.left()) >> 1) + 2;
+- height = ((rect.bottom() - rect.top()) >> 1) + 2;
+-
+- if((startx+width) > 120) {
+- width = 120 - startx; // avoid horizontal overflow
+- }
+- if((starty+height) > 160) {
+- height = 160 - starty; // avoid vertical overflow
+- }
+-
+- ulong *sp1, *sp2, *dp1, *dp2;
+- ulong stop, sbot, dtop, dbot;
+- fb += 320*239; // Move "fb" to top left corner
+- sp1 = (ulong*)bits + startx + starty*240;
+- sp2 = sp1 + 120;
+- dp1 = (ulong*)fb - startx * 320 - starty;
+- dp2 = dp1 - 160;
+- int rowadd = (320*width) + 1;
+- int rowadd2 = 240 - width;
+- // transfer in cells of 2x2 pixels in words
+- for (int y=0; y<height; y++) {
+- for (int x=0; x<width; x++) {
+- // read
+- stop = *sp1;
+- sbot = *sp2;
+- // rotate
+- dtop = (stop & 0xffff) + ((sbot & 0xffff)<<16);
+- dbot = ((stop & 0xffff0000)>>16) + (sbot & 0xffff0000);
+- // write
+- *dp1 = dtop;
+- *dp2 = dbot;
+- // update source ptrs
+- sp1++; sp2++;
+- // update dest ptrs - 2 pix at a time
+- dp1 -= 320;
+- dp2 -= 320;
+- }
+- // adjust src ptrs - skip a row as we work in pairs
+- sp1 += rowadd2;
+- sp2 += rowadd2;
+- // adjust dest ptrs for rotation
+- dp1 += rowadd;
+- dp2 += rowadd;
+- }
++static void
++blitRotate1(Uint16 *dstBits, const QSize& dstSize,
++ const Uint16 *srcBits, const QSize& srcSize,
++ const QRect& srcBlitRect)
++{
++// fprintf(stdout, "SDL_QT_ROTATION (1) is not implemented.\n");
++ blitRotate3(dstBits, dstSize, srcBits, srcSize, srcBlitRect);
+ }
+
+-// desktop, SL-A300 etc
+-bool SDL_QWin::repaintRotation0(const QRect& rect) {
+- if(my_image->width() == width()) {
+- uchar *fb = (uchar*)my_painter->frameBuffer();
+- uchar *buf = (uchar*)my_image->bits();
+- if(rect == my_image->rect()) {
+- memcpy(fb, buf, width()*height()*2);
+- } else {
+- int h = rect.height();
+- int wd = rect.width()<<1;
+- int fblineadd = my_painter->lineStep();
+- int buflineadd = my_image->bytesPerLine();
+- fb += (rect.left()<<1) + rect.top() * my_painter->lineStep();
+- buf += (rect.left()<<1) + rect.top() * my_image->bytesPerLine();
+- while(h--) {
+- memcpy(fb, buf, wd);
+- fb += fblineadd;
+- buf += buflineadd;
+- }
++static void
++blitRotate2(Uint16 *dstBits, const QSize& dstSize,
++ const Uint16 *srcBits, const QSize& srcSize,
++ QRect srcBlitRect)
++{
++// if (srcBlitRect.left() & 1)
++// srcBlitRect.setLeft(srcBlitRect.left() - 1);
++// if (srcBlitRect.right() & 1)
++// srcBlitRect.setRight(srcBlitRect.right() - 1);
++
++ int dstBorderLeftRight = (dstSize.width() - srcSize.width()) >>1;
++ int dstBorderTopBottom = (dstSize.height() - srcSize.height()) >>1;
++ int dstStartOffsetX = dstSize.width() - dstBorderLeftRight - 2;
++ int dstStartOffsetY = dstSize.height() - dstBorderTopBottom - 1;
++ int left = srcBlitRect.left() & ~(int)1; // to be 32bit aligned
++ srcBits += left + srcBlitRect.top() * srcSize.width();
++ dstBits += dstStartOffsetY * dstSize.width() + dstStartOffsetX;
++ dstBits -= left;
++ dstBits -= srcBlitRect.top() * dstSize.width();
++
++ Uint32 *pSrc = (Uint32 *)srcBits;
++ Uint32 *pDst = (Uint32 *)dstBits;
++
++ int width = srcBlitRect.width(), width2 = srcBlitRect.width(), w;
++ if ( srcBlitRect.left() & 1 ){
++ width--; width2++;
++ }
++ if ( (srcBlitRect.left()+srcBlitRect.width()) & 1 ){
++ width--; width2++;
++ }
++ width >>= 1;
++ int height = srcBlitRect.height();
++ int srcYAdd = srcSize.width() - width2;
++ int dstYSub = dstSize.width() - width2;
++
++ while (height--) {
++ w = width;
++ if (srcBlitRect.left() & 1){
++ *((Uint16 *)pDst) = *(((Uint16 *)pSrc) + 1);
++ pDst--; pSrc++;
+ }
+- } else {
+- return false; // FIXME: Landscape
++ while (w--) {
++ *pDst-- = (*pSrc << 16) | (*pSrc >> 16);
++ ++pSrc;
++ }
++ if ((srcBlitRect.left()+srcBlitRect.width()) & 1){
++ *(((Uint16 *)pDst) + 1) = *((Uint16 *)pSrc);
++ pDst--; pSrc++;
++ }
++ pSrc += srcYAdd;
++ pDst -= dstYSub;
+ }
+-#ifdef __i386__
+- my_painter->fillRect( rect, QBrush( Qt::NoBrush ) );
+-#endif
+- return true;
+ }
+
+-
+-// Sharp Zaurus SL-5500 etc
+-bool SDL_QWin::repaintRotation3(const QRect& rect) {
+- if(my_image->width() == width()) {
+- ushort *fb = (ushort*)my_painter->frameBuffer();
+- ushort *buf = (ushort*)my_image->bits();
+- gs_fastRotateBlit_3(fb, buf, rect);
++#define BLIT_ROTATE_3_MOV32
++
++static void
++blitRotate3(Uint16 *dstBits, const QSize& dstSize,
++ const Uint16 *srcBits, const QSize& srcSize,
++ const QRect& srcBlitRect)
++{
++ if (srcBlitRect.width() != dstSize.height() ||
++ srcBlitRect.height() != dstSize.width()) {
++ // partial update
++ const Uint16 *pSrc = srcBits +
++ (srcBlitRect.left() + srcBlitRect.top() * srcSize.width());
++
++ int dstBorderLeftRight = (dstSize.width() - srcSize.height()) >>1;
++ int dstBorderTopBottom = (dstSize.height() - srcSize.width()) >>1;
++ int dstStartOffsetX = dstSize.width() - dstBorderLeftRight - 1;
++ int dstStartOffsetY = dstBorderTopBottom;
++ Uint16 *pDst = dstBits +
++ (dstStartOffsetY * dstSize.width() + dstStartOffsetX);
++ pDst += srcBlitRect.left() * dstSize.width();
++ pDst -= srcBlitRect.top();
++
++ int width = srcBlitRect.width(), height = srcBlitRect.height(), w;
++ int srcYAdd = srcSize.width() - srcBlitRect.width();
++ int dstXAdd = dstSize.width();
++ int dstYSub = (dstSize.width() * srcBlitRect.width()) + 1;
++
++#if 0
++ fprintf(stderr, "---- Blit begin\n");
++ fprintf(stderr, "srcSize.width: %d srcSize.height:%d\n",
++ srcSize.width(), srcSize.height());
++ fprintf(stderr, "srcBlitRect.left:%d srcBlitRect.right:%d srcBlitRect.top:%d srcBlitRect.bottom:%d srcBlitRect.width:%d srcBlitRect.height:%d\n",
++ srcBlitRect.left(), srcBlitRect.right(), srcBlitRect.top(), srcBlitRect.bottom(), srcBlitRect.width(), srcBlitRect.height());
++
++ fprintf(stderr, "dstSize.width: %d dstSize.height:%d\n",
++ dstSize.width(), dstSize.height());
++ fprintf(stderr, "dstBorderLeftRight:%d dstBorderTopBottom:%d dstStartOffsetX:%d dstStartOffsetY:%d\n",
++ dstBorderLeftRight, dstBorderTopBottom, dstStartOffsetX, dstStartOffsetY);
++ fprintf(stderr, "srcYAdd:%d dstXAdd:%d dstYSub:%d\n", srcYAdd, dstXAdd, dstYSub);
++#endif
++
++ while (height--) {
++ w = width;
++ while (w--) {
++ *pDst = *pSrc ++;
++ pDst += dstXAdd;
++ }
++ pSrc += srcYAdd;
++ pDst -= dstYSub;
++ }
++ // fprintf(stderr, "---- Blit end\n");
+ } else {
+- // landscape mode
+- if (screenRotation == SDL_QT_ROTATION_90) {
+- uchar *fb = (uchar*)my_painter->frameBuffer();
+- uchar *buf = (uchar*)my_image->bits();
+- if(rect == my_image->rect()) {
+- memcpy(fb, buf, width()*height()*2);
+- } else {
+- int h = rect.height();
+- int wd = rect.width()<<1;
+- int fblineadd = my_painter->lineStep();
+- int buflineadd = my_image->bytesPerLine();
+- fb += (rect.left()<<1) + rect.top() * my_painter->lineStep();
+- buf += (rect.left()<<1) + rect.top() * my_image->bytesPerLine();
+- while(h--) {
+- memcpy(fb, buf, wd);
+- fb += fblineadd;
+- buf += buflineadd;
+- }
++ // full update
++#if !defined(BLIT_ROTATE_3_MOV32)
++ const Uint16 *src = srcBits;
++ Uint16 *dst = dstBits + (dstSize.width() - 1);
++ int w = srcBlitRect.width();
++ int h = srcBlitRect.height();
++ int i, dstSub = dstSize.width() * w + 1;
++ int dstAdd = dstSize.width();
++
++ while (h--) {
++ i = w;
++ while (i--) {
++ *dst = *src ++;
++ dst += dstAdd;
+ }
+- } else if (screenRotation == SDL_QT_ROTATION_270) {
+- int h = rect.height();
+- int wd = rect.width();
+- int fblineadd = my_painter->lineStep() - (rect.width() << 1);
+- int buflineadd = my_image->bytesPerLine() - (rect.width() << 1);
+- int w;
+-
+- uchar *fb = (uchar*)my_painter->frameBuffer();
+- uchar *buf = (uchar*)my_image->bits();
+-
+- fb += ((my_painter->width() - (rect.top() + rect.height())) *
+- my_painter->lineStep()) + ((my_painter->height() - ((rect.left() +
+- rect.width()))) << 1);
+-
+- buf += my_image->bytesPerLine() * (rect.top() + rect.height()) -
+- (((my_image->width() - (rect.left() + rect.width())) << 1) + 2);
+-
+- while(h--) {
+- w = wd;
+- while(w--) *((unsigned short*)fb)++ = *((unsigned short*)buf)--;
+- fb += fblineadd;
+- buf -= buflineadd;
++ dst -= dstSub;
++ }
++#else // BLIT_ROTATE_3_MOV32
++ Uint32 *src1 = (Uint32 *)(srcBits);
++ Uint32 *src2 = (Uint32 *)(srcBits + srcSize.width());
++ Uint32 *dst1 = (Uint32 *)(dstBits + (dstSize.width() - 2));
++ Uint32 *dst2 = (Uint32 *)(dstBits + (dstSize.width() + dstSize.width() - 2));
++ int w = srcBlitRect.width() >> 3;
++ int h = srcBlitRect.height() >> 1;
++ int i, dstSub = ((dstSize.width() * srcBlitRect.width()) >> 1) + 1;
++ int dstAdd = dstSize.width();
++
++ Uint32 a, b;
++ while (h--) {
++ i = w;
++ while (i--) {
++ a = *src1 ++;
++ b = *src2 ++;
++ *dst1 = (a << 16) | (b & 0xFFFF);
++ *dst2 = (a & 0xFFFF0000) | (b >> 16);
++ dst1 += dstAdd;
++ dst2 += dstAdd;
++
++ a = *src1 ++;
++ b = *src2 ++;
++ *dst1 = (a << 16) | (b & 0xFFFF);
++ *dst2 = (a & 0xFFFF0000) | (b >> 16);
++ dst1 += dstAdd;
++ dst2 += dstAdd;
++
++ a = *src1 ++;
++ b = *src2 ++;
++ *dst1 = (a << 16) | (b & 0xFFFF);
++ *dst2 = (a & 0xFFFF0000) | (b >> 16);
++ dst1 += dstAdd;
++ dst2 += dstAdd;
++
++ a = *src1 ++;
++ b = *src2 ++;
++ *dst1 = (a << 16) | (b & 0xFFFF);
++ *dst2 = (a & 0xFFFF0000) | (b >> 16);
++ dst1 += dstAdd;
++ dst2 += dstAdd;
+ }
++ src1 += srcSize.width() >> 1;
++ src2 += srcSize.width() >> 1;
++ dst1 -= dstSub;
++ dst2 -= dstSub;
+ }
++#endif // BLIT_ROTATE_3_MOV32
+ }
+- return true;
+ }
+
+-// ipaq 3800...
+-bool SDL_QWin::repaintRotation1(const QRect& rect) {
+- if(my_image->width() == width()) {
+- ushort *fb = (ushort*)my_painter->frameBuffer();
+- ushort *buf = (ushort*)my_image->bits();
+- gs_fastRotateBlit_1(fb, buf, rect);
+- } else {
+- return false; // FIXME: landscape mode
+- }
+- return true;
+-}
++#endif // __i386__
+
+ void SDL_QWin::repaintRect(const QRect& rect) {
+ if(!my_painter || !rect.width() || !rect.height()) {
+ return;
+ }
+-
+- if(QPixmap::defaultDepth() == 16) {
+- switch(my_painter->transformOrientation()) {
+- case 3:
+- if(repaintRotation3(rect)) { return; }
++#ifndef __i386__
++ if (QPixmap::defaultDepth() == 16 && my_painter->numRects() >= 0) {
++ Uint16 *fb = (Uint16*)my_painter->frameBuffer();
++ Uint16 *buf = (Uint16*)my_image->bits();
++ switch (rotation_) {
++ case 0:
++ blitRotate0(fb, fbSize_,
++ buf, QSize(my_image->width(), my_image->height()),
++ rect);
+ break;
+ case 1:
+- if(repaintRotation1(rect)) { return; }
++ blitRotate1(fb, fbSize_,
++ buf, QSize(my_image->width(), my_image->height()),
++ rect);
+ break;
+- case 0:
+- if(repaintRotation0(rect)) { return; }
++ case 2:
++ blitRotate2(fb, fbSize_,
++ buf, QSize(my_image->width(), my_image->height()),
++ rect);
++ break;
++ case 3:
++ blitRotate3(fb, fbSize_,
++ buf, QSize(my_image->width(), my_image->height()),
++ rect);
+ break;
+ }
+- }
+- my_painter->drawImage(rect.topLeft(), *my_image, rect);
++ } else {
++#endif // __i386__
++ QDirectPainter pp(this);
++ pp.drawImage(rect.topLeft(), *my_image, rect);
++// pp.end();
++#ifndef __i386__
++ }
++#endif // __i386__
+ }
+
+ // This paints the current buffer to the screen, when desired.
+ void SDL_QWin::paintEvent(QPaintEvent *ev) {
+- if(my_image) {
++ if(my_image && isVisible() && isActiveWindow()) {
++ // TODO: better handling
+ lockScreen(true);
+ repaintRect(ev->rect());
+ unlockScreen();
+ }
+ }
+
++int SDL_QWin::ApplyKeyRotation(int key)
++{
++ int c;
++ int sdlScancode[] = { SDLK_LEFT, SDLK_DOWN, SDLK_RIGHT, SDLK_UP };
++
++ switch (key) {
++ case Qt::Key_Left:
++ c = 0;
++ break;
++ case Qt::Key_Down:
++ c = 1;
++ break;
++ case Qt::Key_Right:
++ c = 2;
++ break;
++ case Qt::Key_Up:
++ c = 3;
++ break;
++ default:
++ return 0;
++ }
++
++// c = (c + qteKeyRotation_) & 3;
++// return sdlScancode[(c - keyRotation_) & 3];
++ return sdlScancode[(c + qteKeyRotation_ - keyRotation_) & 3];
++}
++
+ /* Function to translate a keyboard transition and queue the key event
+ * This should probably be a table although this method isn't exactly
+ * slow.
+ */
+ void SDL_QWin::QueueKey(QKeyEvent *e, int pressed)
+-{
++{
++ if (e->isAutoRepeat())
++ return;
++
+ SDL_keysym keysym;
+ int scancode = e->key();
++
+ /* Set the keysym information */
+ if(scancode >= 'A' && scancode <= 'Z') {
+ // Qt sends uppercase, SDL wants lowercase
+@@ -396,26 +516,12 @@
+ case Qt::Key_Home: scancode = SDLK_HOME; break;
+ case Qt::Key_End: scancode = SDLK_END; break;
+ // We want the control keys to rotate with the screen
+- case Qt::Key_Left:
+- if (screenRotation == SDL_QT_ROTATION_90) scancode = SDLK_UP;
+- else if (screenRotation == SDL_QT_ROTATION_270) scancode = SDLK_DOWN;
+- else scancode = SDLK_LEFT;
+- break;
+- case Qt::Key_Up:
+- if (screenRotation == SDL_QT_ROTATION_90) scancode = SDLK_RIGHT;
+- else if (screenRotation == SDL_QT_ROTATION_270) scancode = SDLK_LEFT;
+- else scancode = SDLK_UP;
+- break;
+- case Qt::Key_Right:
+- if (screenRotation == SDL_QT_ROTATION_90) scancode = SDLK_DOWN;
+- else if (screenRotation == SDL_QT_ROTATION_270) scancode = SDLK_UP;
+- else scancode = SDLK_RIGHT;
+- break;
++ case Qt::Key_Left:
++ case Qt::Key_Up:
++ case Qt::Key_Right:
+ case Qt::Key_Down:
+- if (screenRotation == SDL_QT_ROTATION_90) scancode = SDLK_LEFT;
+- else if (screenRotation == SDL_QT_ROTATION_270) scancode = SDLK_RIGHT;
+- else scancode = SDLK_DOWN;
+- break;
++ scancode = ApplyKeyRotation(scancode);
++ break;
+ case Qt::Key_Prior: scancode = SDLK_PAGEUP; break;
+ case Qt::Key_Next: scancode = SDLK_PAGEDOWN; break;
+ case Qt::Key_Shift: scancode = SDLK_LSHIFT; break;
+@@ -434,9 +540,18 @@
+ case Qt::Key_F7: scancode = SDLK_F7; break;
+ case Qt::Key_F8: scancode = SDLK_F8; break;
+ case Qt::Key_F9: scancode = SDLK_F9; break;
+- case Qt::Key_F10: scancode = SDLK_F10; break;
+- case Qt::Key_F11: scancode = SDLK_F11; break;
+- case Qt::Key_F12: scancode = SDLK_F12; break;
++ case Qt::Key_F10:
++ scancode = SDLK_F10;
++ mouse_button_mode=1;
++ break;
++ case Qt::Key_F11:
++ scancode = SDLK_F11;
++ mouse_button_mode=3;
++ break;
++ case Qt::Key_F12:
++ scancode = SDLK_F12;
++ mouse_button_mode=2;
++ break;
+ case Qt::Key_F13: scancode = SDLK_F13; break;
+ case Qt::Key_F14: scancode = SDLK_F14; break;
+ case Qt::Key_F15: scancode = SDLK_F15; break;
+@@ -452,13 +567,14 @@
+ // david@hedbor.org
+ scancode = SDLK_RETURN;
+ break;
++
+ default:
+ scancode = SDLK_UNKNOWN;
+ break;
+ }
+- keysym.sym = static_cast<SDLKey>(scancode);
++ keysym.sym = static_cast<SDLKey>(scancode);
+ } else {
+- keysym.sym = static_cast<SDLKey>(scancode);
++ keysym.sym = static_cast<SDLKey>(scancode);
+ }
+ keysym.scancode = scancode;
+ keysym.mod = KMOD_NONE;
+@@ -478,11 +594,82 @@
+ // pressed = 1;
+ // }
+
++ if (isSLA300InputFix_ &&
++ (keysym.sym == SDLK_SPACE || (keysym.sym >= 273 && keysym.sym <= 276))) {
++ if (keysym.sym >= 273) curAxis_[keysym.sym-273] = pressed;
++ else curAxis_[4] = pressed;
++ }
++
+ /* Queue the key event */
+ if ( pressed ) {
+- SDL_PrivateKeyboard(SDL_PRESSED, &keysym);
++ /* fprintf(stderr, "press %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_PRESSED, &keysym);
++ if (isSLA300InputFix_ &&
++ (keysym.sym >= 273 && keysym.sym <= 276)) {
++ if (keysym.sym == SDLK_UP) {
++ if (curAxis_[1]) {
++ keysym.sym = SDLK_DOWN;
++ keysym.scancode = Qt::Key_Down;
++ curAxis_[1] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
++ else if (keysym.sym == SDLK_DOWN) {
++ if (curAxis_[0]) {
++ keysym.sym = SDLK_UP;
++ keysym.scancode = Qt::Key_Up;
++ curAxis_[0] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
++ else if (keysym.sym == SDLK_RIGHT) {
++ if (curAxis_[3]) {
++ keysym.sym = SDLK_LEFT;
++ keysym.scancode = Qt::Key_Left;
++ curAxis_[3] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
++ else if (keysym.sym == SDLK_LEFT) {
++ if (curAxis_[2]) {
++ keysym.sym = SDLK_RIGHT;
++ keysym.scancode = Qt::Key_Right;
++ curAxis_[2] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
++ }
+ } else {
+- SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ /* fprintf(stderr, "release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++
++ if (isSLA300InputFix_ &&
++ (keysym.sym == SDLK_SPACE ||
++ (keysym.sym >= 273 && keysym.sym <= 276))) {
++ for (int i = 0; i < 4; i++) {
++ if (curAxis_[i]) {
++ int sym = i+273;
++ keysym.sym = static_cast<SDLKey>(sym);
++ if (sym == SDLK_UP) keysym.scancode = Qt::Key_Up;
++ else if (sym == SDLK_RIGHT) keysym.scancode = Qt::Key_Right;
++ else if (sym == SDLK_DOWN) keysym.scancode = Qt::Key_Down;
++ else if (sym == SDLK_LEFT) keysym.scancode = Qt::Key_Left;
++ curAxis_[i] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
++ if (curAxis_[4]) {
++ keysym.scancode = keysym.sym = SDLK_SPACE;
++ curAxis_[4] = 0;
++ /* fprintf(stderr, "force release %d\n", keysym.sym); */
++ SDL_PrivateKeyboard(SDL_RELEASED, &keysym);
++ }
++ }
+ }
+ }
+
+@@ -524,7 +711,7 @@
+ my_locked--; // decrease lock refcount;
+ }
+ if(!my_locked && my_painter) {
+- my_painter->end();
++// my_painter->end();
+ delete my_painter;
+ my_painter = 0;
+ }
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.h SDL-1.2.9/src/video/qtopia/SDL_QWin.h
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.h 2004-01-04 17:49:26.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_QWin.h 2007-03-12 20:54:14.000000000 +0100
+@@ -1,3 +1,4 @@
++
+ /*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2004 Sam Lantinga
+@@ -52,6 +53,7 @@
+ class SDL_QWin : public QWidget
+ {
+ void QueueKey(QKeyEvent *e, int pressed);
++ int ApplyKeyRotation(int key);
+ public:
+ SDL_QWin(const QSize& size);
+ virtual ~SDL_QWin();
+@@ -71,7 +73,7 @@
+ y = my_offset.y();
+ }
+ QImage *image(void) { return my_image; }
+-
++
+ void setWFlags(WFlags flags) {
+ QWidget::setWFlags(flags);
+ my_flags = flags;
+@@ -83,6 +85,15 @@
+ bool lockScreen(bool force=false);
+ void unlockScreen();
+ void repaintRect(const QRect& rect);
++ void setScreenRotation(int sdlr, int qter) {
++ rotation_ = sdlr; qteRotation_ = qter;
++ }
++ void setKeyRotation(int sdlr, int qter) {
++ keyRotation_ = sdlr; qteKeyRotation_ = qter;
++ }
++ void setFBSize(QSize& s) { fbSize_ = s; }
++// void setSLC700InputFix(bool isEnable) { isSLC700InputFix_ = isEnable; }
++ void setSLA300InputFix(bool isEnable) { isSLA300InputFix_ = isEnable; }
+ protected:
+ /* Handle resizing of the window */
+ virtual void resizeEvent(QResizeEvent *e);
+@@ -95,10 +106,8 @@
+ void paintEvent(QPaintEvent *ev);
+ void keyPressEvent(QKeyEvent *e) { QueueKey(e, 1); }
+ void keyReleaseEvent(QKeyEvent *e) { QueueKey(e, 0); }
++
+ private:
+- bool repaintRotation0(const QRect& rect);
+- bool repaintRotation1(const QRect& rect);
+- bool repaintRotation3(const QRect& rect);
+ void enableFullscreen();
+ QDirectPainter *my_painter;
+ QImage *my_image;
+@@ -108,6 +117,12 @@
+ WFlags my_flags;
+ WFlags my_has_fullscreen;
+ unsigned int my_locked;
++ int rotation_, qteRotation_;
++ int keyRotation_, qteKeyRotation_;
++ QSize fbSize_;
++// bool isSLC700InputFix_;
++ bool isSLA300InputFix_;
++ int curAxis_[5]; // 0: up, 1: down, 2: right, 3: left, 4: center
+ };
+
+ #endif /* _SDL_QWin_h */
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_sysmouse.cc SDL-1.2.9/src/video/qtopia/SDL_sysmouse.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_sysmouse.cc 2004-01-04 17:49:26.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_sysmouse.cc 2007-03-12 20:54:14.000000000 +0100
+@@ -60,6 +60,7 @@
+ void QT_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
+ {
+ SDL_Win->setMousePos(QPoint(x, y));
++ SDL_PrivateMouseMotion( 0, 0, x, y );
+ }
+
+ }; /* Extern C */
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc 2004-01-04 17:49:26.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc 2007-03-12 20:54:14.000000000 +0100
+@@ -1,3 +1,4 @@
++
+ /*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2004 Sam Lantinga
+@@ -29,17 +30,32 @@
+
+ #include <stdlib.h>
+ #include <string.h>
++#include <stdarg.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
+
+ #include <stdio.h>
+ #include <unistd.h>
++#include <sys/types.h>
++#include <sys/wait.h>
++#include <linux/fb.h>
++#include <sys/mman.h>
++#include <asm/page.h>
+
+ #include <qapplication.h>
+ #include <qpe/qpeapplication.h>
++#include <qpe/qcopenvelope_qws.h>
++#include <qgfx_qws.h>
++#include <qwindowsystem_qws.h>
++#include <qwidget.h>
++#include <qwidgetlist.h>
++#include <qdirectpainter_qws.h>
+
+ #include "SDL.h"
+ #include "SDL_timer.h"
+
+ #include "SDL_QWin.h"
++#include "SDL_sysvideo.h"
+
+ extern "C" {
+
+@@ -51,14 +67,67 @@
+ #include "SDL_lowvideo.h"
+
+ //#define QTOPIA_DEBUG
++#define QTOPIA_LOG
+ #define QT_HIDDEN_SIZE 32 /* starting hidden window size */
+
++#ifdef QTOPIA_LOG
++ static FILE *st_logfp = NULL;
++#endif
++ static inline void LOG(char *fmt, ...)
++ {
++#ifdef QTOPIA_LOG
++ va_list ap;
++
++ va_start(ap, fmt);
++ vfprintf(st_logfp, fmt, ap);
++ if (st_logfp != stderr) {
++ fflush(st_logfp);
++ vfprintf(stderr, fmt, ap);
++ }
++ va_end(ap);
++#endif
++ }
++
++ typedef struct machine_spec {
++ const char *manif;
++ const char *name;
++ int qpe_server_rotation;
++ int init_screen_rot;
++ int init_key_rot;
++ } machine_spec_t;
++
++ typedef enum {
++ MACHINE_SHARP_SL5000D,
++ MACHINE_SHARP_SL5500,
++ MACHINE_SHARP_SLA300,
++ MACHINE_SHARP_SLB500,
++ MACHINE_SHARP_SLC700,
++ MACHINE_SHARP_SLC750,
++ MACHINE_SHARP_SLC760,
++ MACHINE_SHARP_SLC860,
++ MACHINE_SHARP_SL6000,
++ MACHINE_MAX
++ } machine_t;
++
++ static const machine_spec_t st_machine_spec[] = {
++ { "Sharp", "SL-5000D", 0 },
++ { "Sharp", "SL-5500", 0 },
++ { "Sharp", "SL-A300", 0 },
++ { "Sharp", "SL-B500", 0 },
++ { "Sharp", "SL-C700", 0 },
++ { "Sharp", "SL-C750", 0 },
++ { "Sharp", "SL-C760", 0 },
++ { "Sharp", "SL-C860", 0 },
++ { "Sharp", "SL-6000", 0 },
++ };
++
+ /* Name of the environment variable used to invert the screen rotation or not:
+ Possible values:
+- !=0 : Screen is 270° rotated
+- 0: Screen is 90° rotated*/
+-#define SDL_QT_ROTATION_ENV_NAME "SDL_QT_INVERT_ROTATION"
+-
++ !=0 : Screen is 270- rotated
++ 0: Screen is 90- rotated*/
++#define SDL_QT_ROTATION_ENV_NAME "SDL_QT_ROTATION"
++#define SDL_QT_INVERT_ROTATION_ENV_NAME "SDL_QT_INVERT_ROTATION"
++
+ /* Initialization/Query functions */
+ static int QT_VideoInit(_THIS, SDL_PixelFormat *vformat);
+ static SDL_Rect **QT_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
+@@ -78,6 +147,20 @@
+ static int QT_IconifyWindow(_THIS);
+ static SDL_GrabMode QT_GrabInput(_THIS, SDL_GrabMode mode);
+
++ static int console_fd;
++ struct fb_var_screeninfo saved_vinfo;
++ int fb_hwrot;
++ int fb_direct;
++ static int isKHloaded;
++ bool is_VGA_machine;
++
++#define W100FB_CONFIG 0x57415200 /* WAL\00 */
++#define W100INIT_ITEM 0
++#define W100INIT_ALL 1
++#define W100INIT_ITEM_WITH_VAL 2
++#define W100FB_CONFIG_EX 0x57415202 /* WAL\02 */
++
++
+ /* FB driver bootstrap functions */
+
+ static int QT_Available(void)
+@@ -222,13 +305,34 @@
+
+ int QT_VideoInit(_THIS, SDL_PixelFormat *vformat)
+ {
+- /* Initialize the QPE Application */
++ const char *SDL_fbdev;
++ struct fb_var_screeninfo vinfo;
++
++ /* Initialize the QPE Application */
+ /* Determine the screen depth */
+ vformat->BitsPerPixel = QPixmap::defaultDepth();
+
+ // For now we hardcode the current depth because anything else
+ // might as well be emulated by SDL rather than by Qtopia.
+-
++
++ //frame buffer device open.
++ SDL_fbdev = getenv("SDL_FBDEV");
++ if ( SDL_fbdev == NULL ) {
++ SDL_fbdev = "/dev/fb0";
++ }
++ console_fd = open(SDL_fbdev, O_RDWR, 0);
++ if ( console_fd < 0 ) {
++ SDL_SetError("Unable to open %s", SDL_fbdev);
++ return(-1);
++ }
++
++ if ( ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't get console pixel format");
++ QT_VideoQuit(_this);
++ return(-1);
++ }
++ saved_vinfo = vinfo;
++
+ QSize desktop_size = qApp->desktop()->size();
+ QT_AddMode(_this, ((vformat->BitsPerPixel+7)/8)-1,
+ desktop_size.width(), desktop_size.height());
+@@ -241,7 +345,24 @@
+ /* Fill in some window manager capabilities */
+ _this->info.wm_available = 0;
+
+- /* We're done! */
++#ifdef QTOPIA_LOG
++ st_logfp = fopen("/tmp/sdl-qt-debug", "w");
++ if (!st_logfp)
++ st_logfp = stderr;
++#endif
++
++ QT_GrabInput(_this, SDL_GRAB_ON);
++/*
++ {
++ QCopEnvelope e("QPE/KeyHelper", "repeater(int)");
++ e << 2;
++ }
++*/
++ isKHloaded=(fopen("/home/zaurus/Settings/keyhelper_SDL.xml","r") != NULL) ? 1 : 0;
++ if (isKHloaded) {
++ system("qcop QPE/KeyHelper \"reload(QString)\" keyhelper_SDL.xml"); //QcopEnvelope can't use.
++ LOG("keyhelper_SDL.xml loaded\n");
++ }
+ return(0);
+ }
+
+@@ -264,6 +385,7 @@
+
+ /* Various screen update functions available */
+ static void QT_NormalUpdate(_THIS, int numrects, SDL_Rect *rects);
++ static void QT_DirectUpdate(_THIS, int numrects, SDL_Rect *rects);
+
+
+ static int QT_SetFullScreen(_THIS, SDL_Surface *screen, int fullscreen)
+@@ -276,47 +398,428 @@
+ return -1;
+ }
+
++ static machine_t QT_GetMachine(_THIS)
++ {
++ FILE *fp;
++ machine_t machine = MACHINE_SHARP_SL5000D;
++ char buf[1024];
++
++
++ fp = fopen("/proc/cpuinfo", "rb");
++ if (fp) {
++ if (fread(buf, 1, sizeof(buf), fp) > 0) {
++ LOG("QT_GetMachine: /proc/cpuinfo is %s\n", buf);
++ if (strstr(buf, "SHARP Tosa") != NULL)
++ machine = MACHINE_SHARP_SL6000;
++ else if (strstr(buf, "Collie") != NULL)
++ machine = MACHINE_SHARP_SL5500;
++ else if (strstr(buf, "SHARP Poodle") != NULL)
++ machine = MACHINE_SHARP_SLB500;
++ else if (strstr(buf, "SHARP Corgi") !=NULL)
++ machine = MACHINE_SHARP_SLC700;
++ else if (strstr(buf, "SHARP Shepherd") !=NULL)
++ machine = MACHINE_SHARP_SLC750;
++ else if (strstr(buf, "SHARP Husky") !=NULL)
++ machine = MACHINE_SHARP_SLC760;
++ else if (strstr(buf, "SHARP Boxer") != NULL)
++ machine = MACHINE_SHARP_SLC860;
++ }
++ fclose(fp);
++ } else {
++ LOG("QT_GetMachine: Couldn't read /proc/deviceinfo/product.\n");
++ LOG(" Now set machine variable to default (SL-5000D)\n");
++ }
++
++ LOG(" detected machine is '%s %s'\n",
++ st_machine_spec[machine].manif, st_machine_spec[machine].name);
++ return machine;
++ }
++
++ static void QT_GetQteServerSpec(_THIS, int *rotation, bool *isQvga)
++ {
++ const char *user;
++ char buf[FILENAME_MAX];
++ FILE *fp;
++ int rot = 0, is_qvga = 0;
++
++ user = getenv("USER");
++ snprintf(buf, sizeof(buf), "/tmp/qtembedded-%s/QtEmbedded-0.spec",
++ user ? user : "root");
++ LOG("QT_GetRotation: Read spec from '%s'\n", buf);
++
++ fp = fopen(buf, "rb");
++ if (fp) {
++ int size;
++ if ((size = fread(buf, 1, sizeof(buf) - 1, fp)) > 0) {
++ buf[size] = '\0';
++ LOG(" spec is '%s'\n", buf);
++ // get rotation value
++ if (strstr(buf, "Rot")) {
++ rot = atoi(strstr(buf, "Rot") + 3);
++ rot /= 90;
++ if (rot < 0 || rot > 3) {
++ rot = 0;
++ }
++ } else
++ rot = 0;
++
++ // get qvga mode in SL-C700
++ if (strstr(buf, "Qvga"))
++ is_qvga = 1;
++ }
++ fclose(fp);
++ }
++
++ LOG(" Rot=%d, Qvga=%d\n", rot, is_qvga);
++
++ if (rotation)
++ *rotation = rot;
++ if (isQvga)
++ *isQvga = is_qvga;
++ }
++
+ /* FIXME: check return values and cleanup here */
+ SDL_Surface *QT_SetVideoMode(_THIS, SDL_Surface *current,
+ int width, int height, int bpp, Uint32 flags)
+ {
+-
+ QImage *qimage;
+- QSize desktop_size = qApp->desktop()->size();
++ QSize qteSize = qApp->desktop()->size();
++ QSize fbSize;
++ QSize userSize;
++ int fb_xres;
++ int fb_yres;
++ struct fb_var_screeninfo vinfo;
++ struct fb_fix_screeninfo finfo;
++ int tmp_ioctl_data;
++ char fb_size_fix = ' ';
++ bool isW100patch_kernel = false;
++ int numFb_Size;
++
++ int mapped_memlen;
++ int mapped_offset;
++ void *mapped_mem;
++ int fb_offset;
++
++
++ machine_t machine = QT_GetMachine(_this);
++ machine_spec_t machineSpec = st_machine_spec[machine];
++ int qteRotation, userRotation, sdlRotation;
++ int qteKeyRotation, sdlKeyRotation;
++ bool isQteQvga;
++
++ if (machine == MACHINE_SHARP_SLC700 ||
++ machine == MACHINE_SHARP_SLC750 ||
++ machine == MACHINE_SHARP_SLC760 ||
++ machine == MACHINE_SHARP_SLC860 || // ¾Ü¤·¤¤¤³¤È¤ï¤«¤é¤ó¤±¤É¤È¤ê¤¢¤¨¤º
++ machine == MACHINE_SHARP_SL6000 ) { // ¾Ü¤·¤¤¤³¤È¤ï¤«¤é¤ó¤±¤É¤È¤ê¤¢¤¨¤º
++ is_VGA_machine = true;
++ }else {
++ is_VGA_machine = false;
++ }
++
++ // qte ¤Ç¤Î²óž³ÑÅÙ¤ò¼èÆÀ
++ QT_GetQteServerSpec(_this, &qteRotation, &isQteQvga);
++
++ // SL-C700 ¤Î¥¹¥¿¥¤¥ë
++ bool isInputStyle = false;
++ if (is_VGA_machine) {
++ int status = system("/home/QtPalmtop/bin/chkhinge");
++ if (WEXITSTATUS(status) != 2)
++ isInputStyle = true;
++ LOG("QT_SetVideoMode: SL-C700 Style is %s\n",
++ isInputStyle ? "Input style" : "View style");
++ }
+
+
+- current->flags = 0; //SDL_FULLSCREEN; // We always run fullscreen.
++ // specity screen setting
++ if (is_VGA_machine) {
++
++ // w100 rotation pached kernel check
++ isW100patch_kernel = (fopen("/proc/driver/w100/rotation","r") != NULL) ? true : false;
++ LOG("Your Kernel is %s\n",isW100patch_kernel ? "Special Kernel" : "Normal Kernel");
++
++ const char *envFb_Size = getenv("SDL_FB_SIZE");
++ if (envFb_Size !=NULL) {
++ numFb_Size=sscanf(envFb_Size,"%dx%d%c",&fb_xres,&fb_yres,&fb_size_fix);
++ } else {
++ numFb_Size=0;
++ }
+
+- if(width <= desktop_size.width()
+- && height <= desktop_size.height()) {
+- current->w = desktop_size.width();
+- current->h = desktop_size.height();
+- } else if(width <= desktop_size.height() && height <= desktop_size.width()) {
+- // Landscape mode
+- char * envString = getenv(SDL_QT_ROTATION_ENV_NAME);
+- int envValue = envString ? atoi(envString) : 0;
+- screenRotation = envValue ? SDL_QT_ROTATION_270 : SDL_QT_ROTATION_90;
+- current->h = desktop_size.width();
+- current->w = desktop_size.height();
++ if (numFb_Size >=2) {
++
++ // specity screen mode
++ if ( ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't get console pixel format");
++ QT_VideoQuit(_this);
++ return(NULL);
++ }
++
++ vinfo.xres = fb_xres;
++ vinfo.xres_virtual = fb_xres;
++ vinfo.yres = fb_yres;
++ vinfo.yres_virtual = fb_yres;
++
++ if (fb_size_fix == '@') {
++ width = fb_xres;
++ height = fb_yres;
++ }
++
++ if ( ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't set console screen info");
++ return(NULL);
++ }
++
++
++ if (isW100patch_kernel) {
++ qteSize.setWidth(vinfo.xres);
++ qteSize.setHeight(vinfo.yres);
++ qteRotation=0;
++ }else if(vinfo.xres == 320){
++ qteSize.setWidth(vinfo.xres);
++ qteSize.setHeight(vinfo.yres);
++ qteRotation=2;
++ }else {
++ qteSize.setWidth(vinfo.yres);
++ qteSize.setHeight(vinfo.xres);
++ qteRotation=3;
++ }
++
++ if (isW100patch_kernel && (vinfo.xres == 320) && (vinfo.yres == 240)) {
++ tmp_ioctl_data=121;
++ ioctl(console_fd, W100FB_CONFIG_EX, &tmp_ioctl_data);
++ fb_hwrot=1;
++ }
++
++ LOG("FBVideoMode: %dx%d%c\n", vinfo.xres, vinfo.yres,fb_size_fix );
++
++ }else {
++
++ // auto screen mode
++ if ( ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't get console pixel format");
++ QT_VideoQuit(_this);
++ return(NULL);
++ }
++
++ if (isW100patch_kernel && (isInputStyle == false) && (vinfo.xres == 240) && (vinfo.yres == 320)) {
++ vinfo.xres = 240;
++ vinfo.xres_virtual = 240;
++ vinfo.yres = 320;
++ vinfo.yres_virtual = 320;
++ qteRotation=0;
++ }else if ((width <= 320) && (height <= 240)) {
++ vinfo.xres = 320;
++ vinfo.xres_virtual = 320;
++ vinfo.yres = 240;
++ vinfo.yres_virtual = 240;
++ }else if (isW100patch_kernel && (isInputStyle == true)){
++ vinfo.xres = 640;
++ vinfo.xres_virtual = 640;
++ vinfo.yres = 480;
++ vinfo.yres_virtual = 480;
++ qteRotation=0;
++ }else {
++ vinfo.xres = 480;
++ vinfo.xres_virtual = 480;
++ vinfo.yres = 640;
++ vinfo.yres_virtual = 640;
++ }
++
++ if ( ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't set console screen info");
++ return(NULL);
++ }
++
++ if (isW100patch_kernel) {
++ qteSize.setWidth(vinfo.xres);
++ qteSize.setHeight(vinfo.yres);
++ qteRotation=0;
++ fb_direct=1;
++ }else if(vinfo.xres == 320){
++ qteSize.setWidth(vinfo.xres);
++ qteSize.setHeight(vinfo.yres);
++ qteRotation=2;
++ }else {
++ qteSize.setWidth(vinfo.yres);
++ qteSize.setHeight(vinfo.xres);
++ qteRotation=3;
++ }
++
++ if (isW100patch_kernel && (vinfo.xres == 320) && (vinfo.yres == 240)) {
++ tmp_ioctl_data=121;
++ ioctl(console_fd, W100FB_CONFIG_EX, &tmp_ioctl_data);
++ fb_hwrot=1;
++ qteRotation=0;
++ }
++
++ LOG("FBVideoMode: %dx%d%c\n", vinfo.xres, vinfo.yres,fb_size_fix );
++ }
++ }
++
++ // direct paint setting
++ const char *envFb_Direct = getenv("SDL_FB_DIRECT");
++ if (envFb_Direct !=NULL)
++ fb_direct = envFb_Direct ? atoi(envFb_Direct) : -1;
++
++ if (fb_direct == 1){
++ if ( ioctl(console_fd, FBIOGET_FSCREENINFO, &finfo) < 0 ) {
++ SDL_SetError("Couldn't get console hardware info");
++ QT_VideoQuit(_this);
++ return(NULL);
++ }
++ if ( ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0 ) {
++ SDL_SetError("Couldn't get console pixel format");
++ QT_VideoQuit(_this);
++ return(NULL);
++ }
++ LOG("Direct paint mode\n");
++ }
++
++ // hack for SL-5500
++ if (machine == MACHINE_SHARP_SL5500)
++ qteRotation = 3;
++
++ // SL-B500 Íѥϥå¯(¤È¤ê¤¢¤¨¤º¡¢¤Í)
++ if (machine == MACHINE_SHARP_SLB500)
++ qteRotation = 3;
++
++ // À¸¥Õ¥ì¡¼¥à¥Ð¥Ã¥Õ¥¡¤Î¥µ¥¤¥º¤òÆÀ¤ë
++ if (qteRotation & 1) {
++ fbSize.setWidth(qteSize.height());
++ fbSize.setHeight(qteSize.width());
++ } else {
++ fbSize = qteSize;
++ }
++
++ //
++ const char *envRotStr = getenv(SDL_QT_ROTATION_ENV_NAME);
++ userRotation = envRotStr ? atoi(envRotStr) : -1;
++ if ((userRotation >= 0 ? userRotation : qteRotation) & 1) {
++ userSize.setWidth(fbSize.height());
++ userSize.setHeight(fbSize.width());
++ } else {
++ userSize = fbSize;
++ }
++
++ if (width <= userSize.width() && height <= userSize.height()) {
++ // ´Ä¶­ÊÑ¿ô¤Ç²óž³ÑÅÙ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ì¤Ð¡¢¤½¤ì¤òºÇÍ¥À褹¤ë
++ if (userRotation >= 0)
++ sdlRotation = userRotation;
++ else {
++ // ¤Ç¡¢¤½¤Î»ØÄ̵꤬¤¤¤Î¤Ç¤¢¤ì¤Ð qte ¤Î²óž³ÑÅ٤˹ç¤ï¤»¤ë¤À¤±
++ // ¤Ê¤ó¤À¤±¤É¡¢SL-C700 ¤Ç¤Ï¤Á¤ç¤¤Ê£»¨¡£
++ if (is_VGA_machine && (fbSize.width() == 320) && (fbSize.height() == 240)) {
++ if (isInputStyle)
++ sdlRotation = 2;
++ else
++ sdlRotation = qteRotation;
++ } else {
++ sdlRotation = qteRotation;
++ }
++ }
++ } else if (width <= fbSize.width() && height <= fbSize.height()) {
++ sdlRotation = 0;
++ if (is_VGA_machine && (fbSize.width() == 320) && (fbSize.height() == 240) && isInputStyle)
++ sdlRotation = 2;
++ } else if (width <= fbSize.height() && height <= fbSize.width()) {
++ sdlRotation = 1;
+ } else {
+ SDL_SetError("Unsupported resolution, %dx%d\n", width, height);
++ return NULL;
+ }
++
++ if (fb_hwrot == 1)
++ sdlRotation = 0;
++
++ if (getenv(SDL_QT_INVERT_ROTATION_ENV_NAME) != NULL) {
++ sdlRotation = (sdlRotation + 2) & 3;
++ }
++
++ LOG("QT_SetVideoMode: argSize=%dx%d\n", width, height);
++ LOG("QT_SetVideoMode: qteSize=%dx%d\n",
++ qteSize.width(), qteSize.height());
++ LOG("QT_SetVideoMode: fbSize=%dx%d\n",
++ fbSize.width(), fbSize.height());
++ LOG("QT_SetVideoMode: qteRotation=%d\n", qteRotation);
++ LOG("QT_SetVideoMode: userRotation=%d\n", userRotation);
++ LOG("QT_SetVideoMode: sdlRotation=%d\n", sdlRotation);
++
++ current->flags = 0;//SDL_FULLSCREEN; // We always run fullscreen.
++ current->w = width;
++ current->h = height;
++ SDL_Win->setScreenRotation(sdlRotation, qteRotation);
++ SDL_Win->setFBSize(fbSize);
++
++ if (machine == MACHINE_SHARP_SLA300)
++ SDL_Win->setSLA300InputFix(true);
++
++ // keyboard rotation
++ qteKeyRotation = qteRotation;
++// fprintf(stderr, "%d\n", (machine == MACHINE_SHARP_SLC700));
++// fprintf(stderr, "%d\n", isQteQvga);
++ if (isQteQvga && is_VGA_machine)
++ qteKeyRotation = 3;
++ else if (machine == MACHINE_SHARP_SLB500)
++ qteKeyRotation = 3;
++
++ if (isQteQvga && fb_hwrot == 1)
++ qteKeyRotation = 1;
++
++ sdlKeyRotation = sdlRotation;
++
++ SDL_Win->setKeyRotation(sdlKeyRotation, qteKeyRotation);
++
++ LOG("QT_SetVideoMode: qteKeyRotation=%d\n", qteKeyRotation);
++ LOG("QT_SetVideoMode: sdlKeyRotation=%d\n", sdlKeyRotation);
++
+ if ( flags & SDL_OPENGL ) {
+ SDL_SetError("OpenGL not supported");
+ return(NULL);
+- }
++ }
+ /* Create the QImage framebuffer */
+- qimage = new QImage(current->w, current->h, bpp);
+- if (qimage->isNull()) {
+- SDL_SetError("Couldn't create screen bitmap");
+- delete qimage;
+- return(NULL);
++
++ // frame buffer memory mapping
++ if (fb_direct == 1) {
++ current->pitch = finfo.line_length;
++ current->flags = (SDL_FULLSCREEN|SDL_HWSURFACE);
++ mapped_offset = (((long)finfo.smem_start) -
++ (((long)finfo.smem_start)&~(PAGE_SIZE-1)));
++ mapped_memlen = finfo.smem_len+mapped_offset;
++ if(console_fd >0 ) {
++ mapped_mem = mmap(NULL, mapped_memlen,PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);
++ fb_offset=(vinfo.xres-width)+(vinfo.yres-height)*vinfo.xres;
++ current->pixels = (void *)((int )mapped_mem+fb_offset);
++ _this->UpdateRects = QT_DirectUpdate;
++ } else {
++ qimage = new QImage(current->w, current->h, bpp);
++ if (qimage->isNull()) {
++ SDL_SetError("Couldn't create screen bitmap");
++ delete qimage;
++ return(NULL);
++ }
++ current->pixels = (void *)qimage->bits();
++ _this->UpdateRects = QT_NormalUpdate;
++ SDL_Win->setImage(qimage);
++// SDL_Win->setFullscreen(true); //comment to non update taskbar
++ }
++ } else {
++ qimage = new QImage(current->w, current->h, bpp);
++ if (qimage->isNull()) {
++ SDL_SetError("Couldn't create screen bitmap");
++ delete qimage;
++ return(NULL);
++ }
++ current->pitch = qimage->bytesPerLine();
++ current->pixels = (void *)qimage->bits();
++ _this->UpdateRects = QT_NormalUpdate;
++ SDL_Win->setImage(qimage);
++// SDL_Win->setFullscreen(true); //comment to non update taskbar
++
+ }
+- current->pitch = qimage->bytesPerLine();
+- current->pixels = (void *)qimage->bits();
+- SDL_Win->setImage(qimage);
+- _this->UpdateRects = QT_NormalUpdate;
+- SDL_Win->setFullscreen(true);
++
++
++ // fprintf(stderr,"QT_SetVideoMode() qImage:%dx%d %d\n",
++ // qimage->width(), qimage->height(), qimage->bytesPerLine());
+ /* We're done */
+ return(current);
+ }
+@@ -361,13 +864,19 @@
+ {
+ if(SDL_Win->lockScreen()) {
+ for(int i=0; i<numrects; ++i ) {
+- QRect rect(rects[i].x, rects[i].y,
+- rects[i].w, rects[i].h);
+- SDL_Win->repaintRect(rect);
++ QRect rect(rects[i].x, rects[i].y,
++ rects[i].w, rects[i].h);
++ SDL_Win->repaintRect(rect);
+ }
+ SDL_Win->unlockScreen();
+ }
+ }
++
++ static void QT_DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
++ {
++
++ }
++
+ /* Is the system palette settable? */
+ int QT_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
+ {
+@@ -383,10 +892,36 @@
+ // -- David Hedbor
+ // delete SDL_Win;
+ // SDL_Win = 0;
++
++ if ( console_fd > 0 ) {
++ /* Restore the original video mode and palette */
++ if (fb_hwrot == 1) {
++ int tmp_ioctl_data=120;
++ ioctl(console_fd, W100FB_CONFIG_EX, &tmp_ioctl_data);
++ }
++
++ ioctl(console_fd, FBIOPUT_VSCREENINFO, &saved_vinfo);
++
++ /* We're all done with the framebuffer */
++ close(console_fd);
++ console_fd = -1;
++ }
++
+ _this->screen->pixels = NULL;
+ QT_GrabInput(_this, SDL_GRAB_OFF);
++/*
++ {
++ QCopEnvelope e("QPE/KeyHelper", "repeater(int)");
++ e << 1;
++ }
++*/
++ if (isKHloaded)
++ system("qcop QPE/KeyHelper \"reload()\""); //QcopEnvelope can't use.
++
+ }
+
++
++
+ static int QT_IconifyWindow(_THIS) {
+ SDL_Win->hide();
+
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch b/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch
new file mode 100644
index 0000000000..3dd44bea27
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/explicit-extern-C.patch
@@ -0,0 +1,22 @@
+--- SDL-1.2.9-orig/src/video/SDL_sysvideo.h.org 2005-04-17 10:40:41.000000000 +0000
++++ SDL-1.2.9-orig/src/video/SDL_sysvideo.h 2007-05-25 07:34:38.000000000 +0000
+@@ -332,6 +332,9 @@
+ SDL_VideoDevice *(*create)(int devindex);
+ } VideoBootStrap;
+
++#ifdef __cplusplus
++extern "C" {
++#endif
+ #ifdef ENABLE_X11
+ extern VideoBootStrap X11_bootstrap;
+ #endif
+@@ -417,6 +420,9 @@
+ #ifdef ENABLE_RISCOS
+ extern VideoBootStrap RISCOS_bootstrap;
+ #endif
++#ifdef __cplusplus
++};
++#endif
+ /* This is the current video device */
+ extern SDL_VideoDevice *current_video;
+
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch
new file mode 100644
index 0000000000..ebc6ec7769
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/fixlibs-1.2.9.patch
@@ -0,0 +1,27 @@
+diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in
+--- SDL-1.2.9-orig/configure.in 2007-03-12 20:56:23.000000000 +0100
++++ SDL-1.2.9/configure.in 2007-03-12 20:59:28.000000000 +0100
+@@ -1593,8 +1593,8 @@
+ AC_MSG_RESULT($video_qtopia)
+ if test x$video_qtopia = xyes; then
+ CFLAGS="$CFLAGS -DENABLE_QTOPIA -DQT_QWS_EBX -DQT_QWS_CUSTOM -DQWS -I${QPEDIR}/include -I${QTDIR}/include/ -DNO_DEBUG -fno-rtti -fno-exceptions"
+- SDL_LIBS="$SDL_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte"
+- SDL_CFLAGS="$SDL_CFLAGS -DQWS"
++ SDL_LIBS="$SDL_LIBS -Wl,-rpath-link -Wl,${QPEDIR}/lib -Wl,-rpath-link -Wl,${QTDIR}/lib"
++ SYSTEM_LIBS="$SYSTEM_LIBS -L${QPEDIR}/lib -L${QTDIR}/lib/ -lqpe -lqte-mt"
+ VIDEO_SUBDIRS="$VIDEO_SUBDIRS qtopia"
+ VIDEO_DRIVERS="$VIDEO_DRIVERS qtopia/libvideo_qtopia.la"
+ else
+@@ -1908,12 +1908,6 @@
+ CheckAltivec
+ CheckLinuxVersion
+ CheckRPATH
+-
+- # Set up files for the main() stub
+- if test "x$video_qtopia" = "xyes"; then
+- SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main"
+-
+- fi
+ # Set up files for the audio library
+ # We use the OSS and ALSA API's, not the Sun audio API
+ #if test x$enable_audio = xyes; then
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/ipaq-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/ipaq-1.2.9.patch
new file mode 100644
index 0000000000..0ad182bae6
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/ipaq-1.2.9.patch
@@ -0,0 +1,140 @@
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am
+--- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2007-03-12 20:57:23.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:58:02.000000000 +0100
+@@ -22,4 +22,4 @@
+ # overwrite USER variables
+ CXXLD = $(CC)
+ CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
+- $(AM_LDFLAGS) $(LDFLAGS) -o $@
++ $(AM_LDFLAGS) $(LDFLAGS) -lopiecore2 -o $@
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc SDL-1.2.9/src/video/qtopia/SDL_QWin.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc 2007-03-12 20:57:00.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_QWin.cc 2007-03-12 20:58:02.000000000 +0100
+@@ -29,8 +29,11 @@
+ #include "SDL_QWin.h"
+ #include <qapplication.h>
+ #include <qpe/qpeapplication.h>
++#include <opie2/odevice.h>
+ #include <qdirectpainter_qws.h>
+
++using namespace Opie::Core;
++
+ extern int fb_hwrot;
+ extern int fb_direct;
+ extern bool is_VGA_machine;
+@@ -545,18 +548,32 @@
+ case Qt::Key_F7: scancode = SDLK_F7; break;
+ case Qt::Key_F8: scancode = SDLK_F8; break;
+ case Qt::Key_F9:
+- scancode = SDLK_F9;
+- mouse_button_mode=1;
++ if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) {
++ scancode = SDLK_y; }
++ else {
++ scancode = SDLK_F9;
++ mouse_button_mode=1; }
+ break;
+ case Qt::Key_F10:
+- scancode = SDLK_F10;
+- mouse_button_mode=2;
++ if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) {
++ scancode = SDLK_LALT; }
++ else {
++ scancode = SDLK_F10;
++ mouse_button_mode=2; }
+ break;
+ case Qt::Key_F11: scancode = SDLK_F11; break;
+- case Qt::Key_F12: scancode = SDLK_F12; break;
++ case Qt::Key_F12:
++ if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) {
++ scancode = SDLK_RETURN; }
++ else {
++ scancode = SDLK_F12; }
++ break;
+ case Qt::Key_F13:
+- scancode = SDLK_F13;
+- mouse_button_mode=3;
++ if ( ODevice::inst ( )-> series ( ) == Model_iPAQ ) {
++ scancode = SDLK_ESCAPE; }
++ else {
++ scancode = SDLK_F13;
++ mouse_button_mode=3; }
+ break;
+ case Qt::Key_F14: scancode = SDLK_F14; break;
+ case Qt::Key_F15: scancode = SDLK_F15; break;
+@@ -573,6 +590,9 @@
+ scancode = SDLK_RETURN;
+ break;
+
++ // To use record button on ipaq
++ case Qt::Key_F24: scancode = SDLK_LSHIFT; break;
++
+ default:
+ scancode = SDLK_UNKNOWN;
+ break;
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc 2007-03-12 20:55:07.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_sysvideo.cc 2007-03-12 20:58:02.000000000 +0100
+@@ -45,6 +45,7 @@
+ #include <qapplication.h>
+ #include <qpe/qpeapplication.h>
+ #include <qpe/qcopenvelope_qws.h>
++#include <opie2/odevice.h>
+ #include <qgfx_qws.h>
+ #include <qwindowsystem_qws.h>
+ #include <qwidget.h>
+@@ -66,6 +67,8 @@
+ #include "SDL_syswm_c.h"
+ #include "SDL_lowvideo.h"
+
++using namespace Opie::Core;
++
+ //#define QTOPIA_DEBUG
+ #define QTOPIA_LOG
+ #define QT_HIDDEN_SIZE 32 /* starting hidden window size */
+@@ -106,6 +109,7 @@
+ MACHINE_SHARP_SLC760,
+ MACHINE_SHARP_SLC860,
+ MACHINE_SHARP_SL6000,
++ MACHINE_IPAQ,
+ MACHINE_MAX
+ } machine_t;
+
+@@ -119,6 +123,7 @@
+ { "Sharp", "SL-C760", 0 },
+ { "Sharp", "SL-C860", 0 },
+ { "Sharp", "SL-6000", 0 },
++ { "HP", "HP IPAQ", 0 },
+ };
+
+ /* Name of the environment variable used to invert the screen rotation or not:
+@@ -423,6 +428,13 @@
+ machine = MACHINE_SHARP_SLC760;
+ else if (strstr(buf, "SHARP Boxer") != NULL)
+ machine = MACHINE_SHARP_SLC860;
++ else if ( ODevice::inst ( )-> series ( ) == Model_iPAQ )
++ machine = MACHINE_IPAQ;
++ else
++ {
++ machine = MACHINE_SHARP_SL5000D;
++ LOG("Can't detect machine defaulting to SL5000D");
++ }
+ }
+ fclose(fp);
+ } else {
+@@ -679,6 +691,15 @@
+ if (machine == MACHINE_SHARP_SL5500)
+ qteRotation = 3;
+
++ // HP IPaq
++ if ( ODevice::inst( )-> series ( ) == Model_iPAQ ) {
++ qteRotation = 3;
++ }
++ if ( ODevice::inst ( )-> model ( ) == Model_iPAQ_H38xx ) {
++ qteRotation = 1;
++ }
++
++
+ // SL-B500 Íѥϥå¯(¤È¤ê¤¢¤¨¤º¡¢¤Í)
+ if (machine == MACHINE_SHARP_SLB500)
+ qteRotation = 3;
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch
new file mode 100644
index 0000000000..884cb2191c
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/kill-stdc++-1.2.9.patch
@@ -0,0 +1,422 @@
+diff -Naur SDL-1.2.9-orig/acinclude.m4 SDL-1.2.9/acinclude.m4
+--- SDL-1.2.9-orig/acinclude.m4 2004-08-24 08:32:50.000000000 +0200
++++ SDL-1.2.9/acinclude.m4 2007-03-12 20:57:08.000000000 +0100
+@@ -1473,11 +1473,11 @@
+ case $host_os in
+ aix3*)
+ version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
++ library_names_spec='${libname}${release}${shrext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+- soname_spec='${libname}${release}${shared_ext}$major'
++ soname_spec='${libname}${release}${shrext}$major'
+ ;;
+
+ aix4* | aix5*)
+@@ -1487,7 +1487,7 @@
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+- library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++ library_names_spec='${libname}${release}${shrext}$major ${libname}${release}${shrext}$versuffix $libname${shrext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+@@ -1513,12 +1513,12 @@
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ soname_spec='${libname}${release}${shrext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+@@ -1531,7 +1531,7 @@
+ ;;
+
+ beos*)
+- library_names_spec='${libname}${shared_ext}'
++ library_names_spec='${libname}${shrext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+@@ -1539,8 +1539,8 @@
+ bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+@@ -1573,14 +1573,14 @@
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+- #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}'
++ #soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}'
++ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+- #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+- soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shared_ext}'
++ #soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext}'
++ soname_spec='`echo ${libname} | sed -e 's/^lib//'`${shrext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+@@ -1596,13 +1596,13 @@
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shrext}'
+ ;;
+ esac
+ ;;
+
+ *)
+- library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shrext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+@@ -1615,8 +1615,8 @@
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+- soname_spec='${libname}${release}${major}$shared_ext'
++ library_names_spec='${libname}${release}${versuffix}$shrext ${libname}${release}${major}$shrext ${libname}$shrext'
++ soname_spec='${libname}${release}${major}$shrext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+@@ -1633,8 +1633,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname$shrext'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+@@ -1646,8 +1646,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+@@ -1659,12 +1659,12 @@
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext} $libname${shrext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+- library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
++ library_names_spec='${libname}${release}${shrext}$versuffix $libname${shrext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+@@ -1688,8 +1688,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}${major} ${libname}${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+@@ -1707,8 +1707,8 @@
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+@@ -1722,8 +1722,8 @@
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+@@ -1732,8 +1732,8 @@
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+@@ -1752,8 +1752,8 @@
+ esac
+ need_lib_prefix=no
+ need_version=no
+- soname_spec='${libname}${release}${shared_ext}$major'
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
++ soname_spec='${libname}${release}${shrext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${release}${shrext} $libname${shrext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+@@ -1787,8 +1787,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+@@ -1816,8 +1816,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+@@ -1829,12 +1829,12 @@
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major ${libname}${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+@@ -1844,7 +1844,7 @@
+
+ newsos6)
+ version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+@@ -1853,8 +1853,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+@@ -1863,7 +1863,7 @@
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+@@ -1884,7 +1884,7 @@
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+- library_names_spec='$libname${shared_ext} $libname.a'
++ library_names_spec='$libname${shrext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+@@ -1893,8 +1893,8 @@
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+- soname_spec='${libname}${release}${shared_ext}$major'
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shrext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+@@ -1902,8 +1902,8 @@
+
+ sco3.2v5*)
+ version_type=osf
+- soname_spec='${libname}${release}${shared_ext}$major'
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shrext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+@@ -1911,8 +1911,8 @@
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+@@ -1922,7 +1922,7 @@
+
+ sunos4*)
+ version_type=sunos
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${shrext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+@@ -1934,8 +1934,8 @@
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+@@ -1959,16 +1959,16 @@
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+- library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+- soname_spec='$libname${shared_ext}.$major'
++ library_names_spec='$libname${shrext}.$versuffix $libname${shrext}.$major $libname${shrext}'
++ soname_spec='$libname${shrext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+ uts4*)
+ version_type=linux
+- library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+- soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shrext}$versuffix ${libname}${release}${shrext}$major $libname${shrext}'
++ soname_spec='${libname}${release}${shrext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+@@ -3471,8 +3471,8 @@
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+- _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
++ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+@@ -3481,7 +3481,7 @@
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+- output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
++ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shrext 2>&1 | grep "ld"`; rm -f libconftest$shrext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+@@ -3585,7 +3585,7 @@
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+@@ -3645,7 +3645,7 @@
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+- _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
++ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shrext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+@@ -4596,7 +4596,7 @@
+ # Whether we need a single -rpath flag with a separated argument.
+ hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
++# Set to yes if using DIR/libNAME${shrext} during linking hardcodes DIR into the
+ # resulting binary.
+ hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am
+--- SDL-1.2.9-orig/src/main/Makefile.am 2007-03-12 20:56:23.000000000 +0100
++++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:57:08.000000000 +0100
+@@ -46,3 +46,9 @@
+ (cd $(distdir) && rm -f $(BUILT_SOURCES))
+ cp -rp $(ARCH_SUBDIRS) $(distdir)
+ (cd $(distdir) && rm -rf `find . -name CVS`)
++
++# overwrite USER variables
++CXXLD = $(CC)
++CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
++ $(AM_LDFLAGS) $(LDFLAGS) -o $@
++
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am
+--- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2007-03-12 20:56:23.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:57:08.000000000 +0100
+@@ -17,3 +17,9 @@
+ SDL_sysevents.cc \
+ SDL_sysevents_c.h \
+ SDL_qmain.cc
++
++
++# overwrite USER variables
++CXXLD = $(CC)
++CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \
++ $(AM_LDFLAGS) $(LDFLAGS) -o $@
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/mouse-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/mouse-1.2.9.patch
new file mode 100644
index 0000000000..7f88956d94
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/mouse-1.2.9.patch
@@ -0,0 +1,48 @@
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc SDL-1.2.9/src/video/qtopia/SDL_QWin.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_QWin.cc 2007-03-12 20:55:07.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_QWin.cc 2007-03-12 20:56:36.000000000 +0100
+@@ -169,7 +169,12 @@
+ Qt::ButtonState button = e->button();
+ int sdlstate = 0;
+ if( (button & Qt::LeftButton)) {
+- sdlstate |= SDL_BUTTON_LMASK;
++ if (mouse_button_mode == 3)
++ sdlstate |= SDL_BUTTON_RMASK;
++ else if (mouse_button_mode == 2)
++ sdlstate |= SDL_BUTTON_MMASK;
++ else
++ sdlstate |= SDL_BUTTON_LMASK;
+ }
+ if( (button & Qt::RightButton)) {
+ sdlstate |= SDL_BUTTON_RMASK;
+@@ -539,20 +544,20 @@
+ case Qt::Key_F6: scancode = SDLK_F6; break;
+ case Qt::Key_F7: scancode = SDLK_F7; break;
+ case Qt::Key_F8: scancode = SDLK_F8; break;
+- case Qt::Key_F9: scancode = SDLK_F9; break;
+- case Qt::Key_F10:
+- scancode = SDLK_F10;
++ case Qt::Key_F9:
++ scancode = SDLK_F9;
+ mouse_button_mode=1;
+ break;
+- case Qt::Key_F11:
+- scancode = SDLK_F11;
+- mouse_button_mode=3;
+- break;
+- case Qt::Key_F12:
+- scancode = SDLK_F12;
++ case Qt::Key_F10:
++ scancode = SDLK_F10;
+ mouse_button_mode=2;
+ break;
+- case Qt::Key_F13: scancode = SDLK_F13; break;
++ case Qt::Key_F11: scancode = SDLK_F11; break;
++ case Qt::Key_F12: scancode = SDLK_F12; break;
++ case Qt::Key_F13:
++ scancode = SDLK_F13;
++ mouse_button_mode=3;
++ break;
+ case Qt::Key_F14: scancode = SDLK_F14; break;
+ case Qt::Key_F15: scancode = SDLK_F15; break;
+ case Qt::Key_Super_L: scancode = SDLK_LSUPER; break;
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/no-PAGE_SIZE.patch b/packages/libsdl/libsdl-qpe-1.2.9/no-PAGE_SIZE.patch
new file mode 100644
index 0000000000..856aaf2472
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/no-PAGE_SIZE.patch
@@ -0,0 +1,11 @@
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc.org 2007-05-25 07:07:32.000000000 +0000
++++ SDL-1.2.9-orig/src/video/qtopia/SDL_sysvideo.cc 2007-05-25 07:24:48.000000000 +0000
+@@ -809,7 +809,7 @@
+ current->pitch = finfo.line_length;
+ current->flags = (SDL_FULLSCREEN|SDL_HWSURFACE);
+ mapped_offset = (((long)finfo.smem_start) -
+- (((long)finfo.smem_start)&~(PAGE_SIZE-1)));
++ (((long)finfo.smem_start)&~(getpagesize()-1)));
+ mapped_memlen = finfo.smem_len+mapped_offset;
+ if(console_fd >0 ) {
+ mapped_mem = mmap(NULL, mapped_memlen,PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);
diff --git a/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch b/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch
new file mode 100644
index 0000000000..4073de25bf
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe-1.2.9/pygame-1.2.9.patch
@@ -0,0 +1,191 @@
+diff -Naur SDL-1.2.9-orig/configure.in SDL-1.2.9/configure.in
+--- SDL-1.2.9-orig/configure.in 2005-08-28 08:31:18.000000000 +0200
++++ SDL-1.2.9/configure.in 2007-03-12 20:55:18.000000000 +0100
+@@ -1912,7 +1912,7 @@
+ # Set up files for the main() stub
+ if test "x$video_qtopia" = "xyes"; then
+ SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main"
+- SDL_LIBS="-lSDLmain $SDL_LIBS"
++
+ fi
+ # Set up files for the audio library
+ # We use the OSS and ALSA API's, not the Sun audio API
+diff -Naur SDL-1.2.9-orig/src/main/Makefile.am SDL-1.2.9/src/main/Makefile.am
+--- SDL-1.2.9-orig/src/main/Makefile.am 2004-02-12 07:21:13.000000000 +0100
++++ SDL-1.2.9/src/main/Makefile.am 2007-03-12 20:55:18.000000000 +0100
+@@ -21,11 +21,7 @@
+ if TARGET_MACOSX
+ MAINLIB_ARCH_SRCS = macosx/SDLMain.m macosx/SDLMain.h
+ else
+-if TARGET_QTOPIA
+-MAINLIB_ARCH_SRCS = qtopia/SDL_qtopia_main.cc
+-else
+ MAINLIB_ARCH_SRCS = dummy/SDL_dummy_main.c
+-endif # !TARGET_QTOPIA
+ endif # !TARGET_MACOSX
+ endif # !TARGET_WIN32
+ libSDLmain_a_SOURCES = $(MAINLIB_ARCH_SRCS)
+diff -Naur SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc
+--- SDL-1.2.9-orig/src/main/qtopia/SDL_qtopia_main.cc 2003-12-14 07:25:53.000000000 +0100
++++ SDL-1.2.9/src/main/qtopia/SDL_qtopia_main.cc 1970-01-01 01:00:00.000000000 +0100
+@@ -1,47 +0,0 @@
+-
+-/* Include the SDL main definition header */
+-#include "SDL_main.h"
+-#include <stdlib.h>
+-#include <unistd.h>
+-#ifdef main
+-#undef main
+-#endif
+-#ifdef QWS
+-#include <qpe/qpeapplication.h>
+-#include <qapplication.h>
+-#include <qpe/qpeapplication.h>
+-#include <stdlib.h>
+-
+-// Workaround for OPIE to remove taskbar icon. Also fixes
+-// some issues in Qtopia where there are left-over qcop files in /tmp/.
+-// I'm guessing this will also clean up the taskbar in the Sharp version
+-// of Qtopia.
+-static inline void cleanupQCop() {
+- QString appname(qApp->argv()[0]);
+- int slash = appname.findRev("/");
+- if(slash != -1) { appname = appname.mid(slash+1); }
+- QString cmd = QPEApplication::qpeDir() + "bin/qcop QPE/System 'closing(QString)' '"+appname+"'";
+- system(cmd.latin1());
+- cmd = "/tmp/qcop-msg-"+appname;
+- unlink(cmd.latin1());
+-}
+-
+-static QPEApplication *app;
+-#endif
+-
+-extern int SDL_main(int argc, char *argv[]);
+-
+-int main(int argc, char *argv[])
+-{
+-#ifdef QWS
+- // This initializes the Qtopia application. It needs to be done here
+- // because it parses command line options.
+- app = new QPEApplication(argc, argv);
+- QWidget dummy;
+- app->showMainWidget(&dummy);
+- atexit(cleanupQCop);
+-#endif
+- // Exit here because if return is used, the application
+- // doesn't seem to quit correctly.
+- exit(SDL_main(argc, argv));
+-}
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/Makefile.am SDL-1.2.9/src/video/qtopia/Makefile.am
+--- SDL-1.2.9-orig/src/video/qtopia/Makefile.am 2002-05-28 21:24:11.000000000 +0200
++++ SDL-1.2.9/src/video/qtopia/Makefile.am 2007-03-12 20:55:18.000000000 +0100
+@@ -15,4 +15,5 @@
+ SDL_syswm.cc \
+ SDL_syswm_c.h \
+ SDL_sysevents.cc \
+- SDL_sysevents_c.h
++ SDL_sysevents_c.h \
++ SDL_qmain.cc
+diff -Naur SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc SDL-1.2.9/src/video/qtopia/SDL_qmain.cc
+--- SDL-1.2.9-orig/src/video/qtopia/SDL_qmain.cc 1970-01-01 01:00:00.000000000 +0100
++++ SDL-1.2.9/src/video/qtopia/SDL_qmain.cc 2007-03-12 20:55:18.000000000 +0100
+@@ -0,0 +1,99 @@
++/* Include the SDL main definition header */
++#include "SDL_main.h"
++#include <stdlib.h>
++
++#include <sys/types.h>
++#include <fcntl.h>
++#include <unistd.h>
++
++
++#ifdef QWS
++#include <qpe/qpeapplication.h>
++#include <stdlib.h>
++#include <string.h>
++
++
++
++static QWidget *dummyW = 0;
++static QPEApplication *theApp = 0;
++static char **cmdline= 0;
++static int size = 0;
++
++static void parse_cmd_line() {
++ /*
++ * find the number
++ */
++ char buf[1024];
++ int available = 0;
++ char *string_start = 0;
++ int fd = ::open( "/proc/self/cmdline", O_RDONLY );
++ if ( fd < 0 ) {
++ qWarning( "Error getting the cmdline, can't be" );
++ goto error_out;
++ }
++
++ available = ::read( fd, &buf, sizeof(buf) );
++ if ( available <= 0 )
++ goto error_out;
++
++ /*
++ * find out the number of arguments
++ */
++ size = 0;
++ for (int i = 0; i < available; ++i )
++ if ( buf[i] == '\0' )
++ ++size;
++
++ /* now create a the cmdline */
++ cmdline = new char*[size+1];
++ cmdline[size] = '\0'; // parnoid...
++
++ string_start = &buf[0];
++ for ( int i = 0; i < size; ++i ) {
++ /*
++ * find the end of the string
++ */
++ size_t sz = ::strlen(string_start);
++ cmdline[i] = new char[sz+1];
++ memcpy( cmdline[i], string_start, sz+1 );
++ string_start += (sz+1); // +1 for '\0' +1 to set it beyond
++ }
++
++ ::close(fd);
++
++ return;
++
++/* error code */
++error_out:
++ cmdline = new char*[2];
++ cmdline[0] = "unknown_app";
++ cmdline[1] = '\0';
++ size = 1;
++}
++
++static void free_cmd_line() {
++ /*
++ * free each string and then free the array
++ */
++ for ( int i = 0; i < size; ++i )
++ delete [] cmdline[i];
++
++ delete [] cmdline;
++}
++
++static void __attribute__((constructor)) initialize_qpe_app() {
++ parse_cmd_line();
++
++ theApp = new QPEApplication( size, cmdline );
++ dummyW = new QWidget;
++ theApp->showMainWidget(dummyW);
++}
++
++static void __attribute__((destructor)) deinitialize_qpe_app() {
++ free_cmd_line();
++ delete dummyW;
++ delete theApp;
++}
++
++
++#endif
diff --git a/packages/libsdl/libsdl-qpe_1.2.9.bb b/packages/libsdl/libsdl-qpe_1.2.9.bb
new file mode 100644
index 0000000000..2fbf66b5d8
--- /dev/null
+++ b/packages/libsdl/libsdl-qpe_1.2.9.bb
@@ -0,0 +1,69 @@
+DESCRIPTION = "Simple DirectMedia Layer - QtE-based Palmtop Environments Edition"
+SECTION = "opie/libs"
+PRIORITY = "optional"
+DEPENDS = "virtual/libqpe1 libopie2"
+PROVIDES = "virtual/libsdl"
+LICENSE = "LGPL"
+
+# NOTE: make sure to keep PR in sync with libsdl-x11
+PR = "r1"
+
+SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \
+ file://agawa-piro-mickey-1.2.9.patch;patch=1 \
+ file://pygame-1.2.9.patch;patch=1 \
+ file://mouse-1.2.9.patch;patch=1 \
+ file://kill-stdc++-1.2.9.patch;patch=1 \
+ file://ipaq-1.2.9.patch;patch=1 \
+ file://SDL-Akita-1.2.9.patch;patch=1 \
+ file://fixlibs-1.2.9.patch;patch=1 \
+ file://no-PAGE_SIZE.patch;patch=1 \
+ file://explicit-extern-C.patch;patch=1 \
+ file://acinclude.m4"
+S = "${WORKDIR}/SDL-${PV}"
+
+inherit autotools binconfig
+
+EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian \
+ --enable-file --enable-oss --disable-alsa --disable-esd --disable-arts \
+ --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest \
+ --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga \
+ --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \
+ --disable-video-xbios --disable-video-gem --disable-video-dummy \
+ --disable-video-opengl --enable-input-events --enable-pthreads \
+ --disable-video-picogui --enable-video-qtopia --enable-dlopen"
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}/*config"
+
+do_compile_prepend() {
+ rm -f ${S}/acinclude.m4
+ cp ${WORKDIR}/acinclude.m4 ${S}/
+ if [ "${PALMTOP_USE_MULTITHREADED_QT}" == "yes" ]
+ then
+ sed -i s,-lqte,-lqte-mt, src/Makefile
+ fi
+}
+
+do_configure_append () {
+ cd ${S}
+
+ # prevent libtool from linking libs against libstdc++, libgcc, ...
+ cat ${TARGET_PREFIX}libtool | sed -e 's/postdeps=".*"/postdeps=""/' > ${TARGET_PREFIX}libtool.tmp
+ mv ${TARGET_PREFIX}libtool.tmp ${TARGET_PREFIX}libtool
+}
+
+do_stage() {
+ oe_libinstall -so -C src libSDL ${STAGING_LIBDIR}
+ rm ${STAGING_LIBDIR}/libSDL.la
+ ln -sf libSDL.so ${STAGING_LIBDIR}/libSDL-1.2.so
+ install -m 0655 src/main/libSDLmain.a src/main/.libs/
+ oe_libinstall -a -C src/main libSDLmain ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/SDL
+ for f in include/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/SDL/
+ done
+
+ install -m 0644 *.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/libsdl/libsdl-x11_1.2.9.bb b/packages/libsdl/libsdl-x11_1.2.9.bb
index 1fba3c4174..42c0ad3579 100644
--- a/packages/libsdl/libsdl-x11_1.2.9.bb
+++ b/packages/libsdl/libsdl-x11_1.2.9.bb
@@ -1,11 +1,11 @@
DESCRIPTION = "Simple DirectMedia Layer - X11 Edition"
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = "alsa-lib virtual/libx11 libxext"
+DEPENDS = "alsa-lib mesa virtual/libx11 libxext"
PROVIDES = "virtual/libsdl"
LICENSE = "LGPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.libsdl.org/release/SDL-${PV}.tar.gz \
file://extra-keys.patch;patch=1 \
@@ -20,7 +20,7 @@ EXTRA_OECONF = "--disable-static --disable-debug --enable-cdrom --enable-threads
--disable-mintaudio --disable-nasm --enable-video-x11 --disable-video-dga \
--disable-video-fbcon --disable-video-directfb --disable-video-ps2gs \
--disable-video-xbios --disable-video-gem --disable-video-dummy \
- --disable-video-opengl --enable-input-events --enable-pthreads \
+ --enable-video-opengl --enable-input-events --enable-pthreads \
--disable-video-picogui --disable-video-qtopia --enable-dlopen"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libsexy/libsexy_0.1.11.bb b/packages/libsexy/libsexy_0.1.11.bb
new file mode 100644
index 0000000000..042ea757e9
--- /dev/null
+++ b/packages/libsexy/libsexy_0.1.11.bb
@@ -0,0 +1,2 @@
+require libsexy.inc
+PR = "r0"
diff --git a/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/.mtn2git_empty b/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/.mtn2git_empty
diff --git a/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/define_sigc_api.patch b/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/define_sigc_api.patch
new file mode 100644
index 0000000000..ba17293733
--- /dev/null
+++ b/packages/libsigc++-2.0/libsigc++-2.0-2.0.17/define_sigc_api.patch
@@ -0,0 +1,15 @@
+Index: libsigc++-2.0.17/configure.ac
+===================================================================
+--- libsigc++-2.0.17.orig/configure.ac 2005-12-20 08:41:21.000000000 +0000
++++ libsigc++-2.0.17/configure.ac 2007-07-11 11:33:55.000000000 +0100
+@@ -105,6 +105,10 @@
+ SIGC_CXX_HAS_NAMESPACE_STD()
+ SIGC_CXX_HAS_SUN_REVERSE_ITERATOR()
+
++dnl FIXME Define this here since it does not seem to be defined elsewhere
++AC_DEFINE(SIGC_API, [], [Empty specifier])
++AC_DEFINE(SIGC_USING_STD(Symbol), [], [Empty specifier])
++
+ if test "X$config_error" = "Xyes" ; then
+ AC_ERROR(
+ [One or more of the required compiler features is missing.
diff --git a/packages/libsigc++-2.0/libsigc++-2.0_2.0.17.bb b/packages/libsigc++-2.0/libsigc++-2.0_2.0.17.bb
new file mode 100644
index 0000000000..222c5bd86a
--- /dev/null
+++ b/packages/libsigc++-2.0/libsigc++-2.0_2.0.17.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "A library for loose coupling of C++ method calls"
+SECTION = "libs"
+PRIORITY = "optional"
+PR = "r1"
+LICENSE = "GPL LGPL"
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.0/libsigc++-${PV}.tar.gz \
+ file://define_sigc_api.patch;patch=1 "
+S = "${WORKDIR}/libsigc++-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_AUTORECONF = "--exclude=autoheader"
+
+FILES_${PN}-dev += "${libdir}/sigc++-*/"
+
+# acpaths = ""
+
+do_stage() {
+ install -d ${STAGING_LIBDIR}/sigc++-2.0/include
+ install -m 0644 sigc++config.h ${STAGING_LIBDIR}/sigc++-2.0/include/
+ oe_libinstall -so -C sigc++ libsigc-2.0 ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/sigc++-2.0/sigc++
+ for f in sigc++/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/sigc++-2.0/sigc++/
+ done
+ install -d ${STAGING_INCDIR}/sigc++-2.0/sigc++/functors
+ for f in sigc++/functors/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/sigc++-2.0/sigc++/functors
+ done
+
+ install -d ${STAGING_INCDIR}/sigc++-2.0/sigc++/adaptors
+ for f in sigc++/adaptors/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/sigc++-2.0/sigc++/adaptors
+ done
+ install -d ${STAGING_INCDIR}/sigc++-2.0/sigc++/adaptors/lambda
+ for f in sigc++/adaptors/lambda/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/sigc++-2.0/sigc++/adaptors/lambda
+ done
+
+
+}
+
diff --git a/packages/libsndfile/libsndfile1_1.0.17.bb b/packages/libsndfile/libsndfile1_1.0.17.bb
new file mode 100644
index 0000000000..cf3b6d8e48
--- /dev/null
+++ b/packages/libsndfile/libsndfile1_1.0.17.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "An audio format Conversion library"
+HOMEPAGE = "http://www.mega-nerd.com/libsndfile"
+AUTHOR = "Erik de Castro Lopo"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL"
+PR = "r0"
+
+SRC_URI = "http://www.mega-nerd.com/libsndfile/libsndfile-${PV}.tar.gz"
+S = "${WORKDIR}/libsndfile-${PV}"
+
+inherit autotools lib_package pkgconfig
+
+do_stage() {
+ oe_libinstall -a -so -C src libsndfile ${STAGING_LIBDIR}
+ install -m 0644 ${S}/src/sndfile.h ${STAGING_INCDIR}/
+}
+
diff --git a/packages/libsoundgen/libsoundgen_0.5.bb b/packages/libsoundgen/libsoundgen_0.5.bb
new file mode 100644
index 0000000000..5c65141ab5
--- /dev/null
+++ b/packages/libsoundgen/libsoundgen_0.5.bb
@@ -0,0 +1,13 @@
+SECTION = "x11/libs"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools pkgconfig
+LICENSE = "LGPL"
+DEPENDS = "esound"
+
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libsoundgen/libsoundgen_0.6.bb b/packages/libsoundgen/libsoundgen_0.6.bb
new file mode 100644
index 0000000000..5c65141ab5
--- /dev/null
+++ b/packages/libsoundgen/libsoundgen_0.6.bb
@@ -0,0 +1,13 @@
+SECTION = "x11/libs"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools pkgconfig
+LICENSE = "LGPL"
+DEPENDS = "esound"
+
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/libtododb/libtododb_0.11.bb b/packages/libtododb/libtododb_0.11.bb
new file mode 100644
index 0000000000..7d0bb146e9
--- /dev/null
+++ b/packages/libtododb/libtododb_0.11.bb
@@ -0,0 +1,18 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Database access for GPE to-do list"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "libgpewidget libgpepimc sqlite"
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit pkgconfig gpe autotools
+
+
+do_stage () {
+ autotools_stage_all
+}
+
+do_install () {
+ gpe_do_install
+# oe_runmake PREFIX=${prefix} DESTDIR=${D} install-devel
+}
diff --git a/packages/libtool/libtool-1.5.10/never-ever-do-rpath.patch b/packages/libtool/libtool-1.5.10/never-ever-do-rpath.patch
new file mode 100644
index 0000000000..7c92524b3b
--- /dev/null
+++ b/packages/libtool/libtool-1.5.10/never-ever-do-rpath.patch
@@ -0,0 +1,32 @@
+Well, brute force to disable rpath.
+
+Only
+-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
++#hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+should be necessary....
+
+Index: libtool-1.5.10/libtool.m4
+===================================================================
+--- libtool-1.5.10.orig/libtool.m4 2007-05-27 23:31:51.000000000 +0200
++++ libtool-1.5.10/libtool.m4 2007-05-27 23:50:26.000000000 +0200
+@@ -4244,16 +4244,16 @@
+ hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+ # Whether we should hardcode library paths into libraries.
+-hardcode_into_libs=$hardcode_into_libs
++hardcode_into_libs=no
+
+ # Flag to hardcode \$libdir into a binary during linking.
+ # This must work even if \$libdir does not exist.
+-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
++hardcode_libdir_flag_spec=
+
+ # If ld is used when linking, flag to hardcode \$libdir into
+ # a binary during linking. This must work even if \$libdir does
+ # not exist.
+-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
++hardcode_libdir_flag_spec_ld=
+
+ # Whether we need a single -rpath flag with a separated argument.
+ hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
diff --git a/packages/libtool/libtool-1.5.10/rpath-control.patch b/packages/libtool/libtool-1.5.10/rpath-control.patch
new file mode 100644
index 0000000000..310fe3f8ae
--- /dev/null
+++ b/packages/libtool/libtool-1.5.10/rpath-control.patch
@@ -0,0 +1,21 @@
+diff --git a/ltmain.in b/ltmain.in
+--- a/ltmain.in
++++ b/ltmain.in
+@@ -3688,6 +3705,7 @@ EOF
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
++ if test "$OE_LT_RPATH_ALLOW" = "any" -o "${OE_LT_RPATH_ALLOW/:${libdir}:/}" != "$OE_LT_RPATH_ALLOW" ; then
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+@@ -3712,6 +3730,9 @@ EOF
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
++ else
++ echo "OE: Not hardcoding '$libdir' into rpath"
++ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
diff --git a/packages/libtool/libtool-1.5.22/.mtn2git_empty b/packages/libtool/libtool-1.5.22/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/.mtn2git_empty
diff --git a/packages/libtool/libtool-1.5.22/autotools.patch b/packages/libtool/libtool-1.5.22/autotools.patch
new file mode 100644
index 0000000000..5df441e945
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/autotools.patch
@@ -0,0 +1,127 @@
+diff -urNd -urNd libtool-1.5/cdemo/configure.ac libtool-1.5.ac/cdemo/configure.ac
+--- libtool-1.5/cdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/cdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([cdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/configure.ac libtool-1.5.ac/demo/configure.ac
+--- libtool-1.5/demo/configure.ac 2002-03-02 22:19:55.000000000 -0500
++++ libtool-1.5.ac/demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([demo], [1.0], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/Makefile.am libtool-1.5.ac/demo/Makefile.am
+--- libtool-1.5/demo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/demo/Makefile.am 2004-05-05 17:17:34.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = hello.c foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
++libhell0_la_SOURCES = hello.c foo.c
+ libhell1_la_SOURCES = hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/depdemo/configure.ac libtool-1.5.ac/depdemo/configure.ac
+--- libtool-1.5/depdemo/configure.ac 2002-10-22 15:29:28.000000000 -0400
++++ libtool-1.5.ac/depdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([depdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/f77demo/configure.ac libtool-1.5.ac/f77demo/configure.ac
+--- libtool-1.5/f77demo/configure.ac 2003-03-22 01:34:27.000000000 -0500
++++ libtool-1.5.ac/f77demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -23,6 +23,7 @@
+ ## ------------------------ ##
+ AC_INIT([f77demo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foof.f])dnl
++AC_CONFIG_AUX_DIR([..])
+
+ ## ------------------------ ##
+ ## Automake Initialisation. ##
+diff -urNd -urNd libtool-1.5/mdemo/configure.ac libtool-1.5.ac/mdemo/configure.ac
+--- libtool-1.5/mdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/mdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([mdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/configure.ac libtool-1.5.ac/pdemo/configure.ac
+--- libtool-1.5/pdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/pdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([pdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([longer_file_name_hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/Makefile.am libtool-1.5.ac/pdemo/Makefile.am
+--- libtool-1.5/pdemo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/pdemo/Makefile.am 2004-05-05 17:17:59.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++libhell0_la_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
+ libhell1_la_SOURCES = longer_file_name_hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = longer_file_name_hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = longer_file_name_main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/tagdemo/configure.ac libtool-1.5.ac/tagdemo/configure.ac
+--- libtool-1.5/tagdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/tagdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([tagdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foo.cpp])
++AC_CONFIG_AUX_DIR([..])
+
+ AC_CANONICAL_TARGET
+
diff --git a/packages/libtool/libtool-1.5.22/install-path-check.patch b/packages/libtool/libtool-1.5.22/install-path-check.patch
new file mode 100644
index 0000000000..46cc960986
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/install-path-check.patch
@@ -0,0 +1,25 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~install-path-check 2004-05-14 22:56:19.000000000 -0500
++++ libtool-1.5.6/ltmain.in 2004-05-14 22:57:48.000000000 -0500
+@@ -5503,10 +5503,13 @@
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+- if test "$inst_prefix_dir" = "$destdir"; then
+- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+- exit $EXIT_FAILURE
+- fi
++ #
++ # This breaks install into our staging area. -PB
++ #
++ # if test "$inst_prefix_dir" = "$destdir"; then
++ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
++ # exit $EXIT_FAILURE
++ # fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
diff --git a/packages/libtool/libtool-1.5.22/libdir-la.patch b/packages/libtool/libtool-1.5.22/libdir-la.patch
new file mode 100644
index 0000000000..47aae4c7af
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/libdir-la.patch
@@ -0,0 +1,52 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~libdir-la 2004-04-01 21:46:15.000000000 -0600
++++ libtool-1.5.6/ltmain.in 2004-05-14 22:53:51.000000000 -0500
+@@ -2147,8 +2147,14 @@
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+- dir="$libdir"
+- absdir="$libdir"
++ # Adding 'libdir' from the .la file to our library search paths
++ # breaks crosscompilation horribly. We cheat here and don't add
++ # it, instead adding the path where we found the .la. -CL
++ dir="$abs_ladir"
++ absdir="$abs_ladir"
++ libdir="$abs_ladir"
++ #dir="$libdir"
++ #absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+@@ -2615,6 +2621,16 @@
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
++# This interferes with crosscompilation. -CL
++# else
++# eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++# if test -z "$libdir"; then
++# $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
++# exit 1
++# fi
++# if test "$absdir" != "$libdir"; then
++# $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
++# fi
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+@@ -5165,6 +5181,10 @@
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
++ # Replacing uninstalled with installed can easily break crosscompilation,
++ # since the installed path is generally the wrong architecture. -CL
++ newdependency_libs="$newdependency_libs $deplib"
++ continue
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
diff --git a/packages/libtool/libtool-1.5.22/prefix.patch b/packages/libtool/libtool-1.5.22/prefix.patch
new file mode 100644
index 0000000000..5e7d9ba51d
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/prefix.patch
@@ -0,0 +1,44 @@
+diff -aur libtool-1.5.22.orig/libtool.m4 libtool-1.5.22/libtool.m4
+--- libtool-1.5.22.orig/libtool.m4 2005-12-18 16:53:17.000000000 -0500
++++ libtool-1.5.22/libtool.m4 2007-05-05 15:47:41.000000000 -0400
+@@ -67,7 +67,8 @@
+ LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+ # Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++LIBTOOL='$(SHELL) $(top_builddir)'
++LIBTOOL="$LIBTOOL/$host_alias-libtool"
+ AC_SUBST(LIBTOOL)dnl
+
+ # Prevent multiple expansion
+@@ -134,7 +135,7 @@
+ rm="rm -f"
+
+ # Global variables:
+-default_ofile=libtool
++default_ofile=${host_alias}-libtool
+ can_build_shared=yes
+
+ # All known linkers require a `.a' archive for static linking (except MSVC,
+Only in libtool-1.5.22: libtool.m4.orig
+diff -aur libtool-1.5.22.orig/Makefile.am libtool-1.5.22/Makefile.am
+--- libtool-1.5.22.orig/Makefile.am 2005-08-12 13:21:09.000000000 -0400
++++ libtool-1.5.22/Makefile.am 2007-05-05 15:49:25.000000000 -0400
+@@ -30,7 +30,7 @@
+ aclocal_DATA = $(aclocal_macros)
+
+ # The standalone libtool script, and the libtool distributor.
+-bin_SCRIPTS = libtool libtoolize
++bin_SCRIPTS = $(host_alias)-libtool libtoolize
+
+ ## These are installed as a subdirectory of pkgdatadir so that
+ ## libtoolize --ltdl can find them later:
+@@ -55,7 +55,7 @@
+ libltdl/configure \
+ libltdl/config-h.in
+
+-libtool: $(srcdir)/ltmain.sh $(top_builddir)/configure.ac
++$(host_alias)-libtool: $(srcdir)/ltmain.sh $(top_builddir)/configure.ac
+ $(SHELL) $(top_builddir)/config.status --recheck
+ chmod +x $@
+
diff --git a/packages/libtool/libtool-1.5.22/sedvar.patch b/packages/libtool/libtool-1.5.22/sedvar.patch
new file mode 100644
index 0000000000..d505edae24
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/sedvar.patch
@@ -0,0 +1,16 @@
+
+#
+# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5/ltmain.in~sedvar 2003-04-14 16:58:24.000000000 -0500
++++ libtool-1.5/ltmain.in 2003-09-24 14:18:50.175518400 -0500
+@@ -48,6 +48,8 @@
+ exit 0
+ fi
+
++[ -z "${SED}" ] && SED=sed
++
+ # The name of this program.
+ progname=`$echo "$0" | ${SED} 's%^.*/%%'`
+ modename="$progname"
diff --git a/packages/libtool/libtool-1.5.22/tag.patch b/packages/libtool/libtool-1.5.22/tag.patch
new file mode 100644
index 0000000000..8921a3efb7
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/tag.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~tag 2004-05-15 05:14:32.000000000 -0400
++++ libtool-1.5.6/ltmain.in 2004-05-15 05:18:01.000000000 -0400
+@@ -226,8 +226,9 @@
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+- $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit $EXIT_FAILURE
++ $echo "$modename: defaulting to \`CC'"
++ $echo "$modename: if this is not correct, specify a tag with \`--tag'"
++# exit $EXIT_FAILURE
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
diff --git a/packages/libtool/libtool-1.5.22/tag1.patch b/packages/libtool/libtool-1.5.22/tag1.patch
new file mode 100644
index 0000000000..6fefd6266d
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/tag1.patch
@@ -0,0 +1,13 @@
+Index: libtool-1.5.10/libltdl/ltmain.sh
+===================================================================
+--- libtool-1.5.10.orig/libltdl/ltmain.sh 2004-09-19 13:34:44.000000000 +0100
++++ libtool-1.5.10/libltdl/ltmain.sh 2006-05-25 15:28:39.000000000 +0100
+@@ -232,7 +232,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit $EXIT_FAILURE
++# exit $EXIT_FAILURE
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
diff --git a/packages/libtool/libtool-1.5.22/uclibc.patch b/packages/libtool/libtool-1.5.22/uclibc.patch
new file mode 100644
index 0000000000..2c8cbabbb3
--- /dev/null
+++ b/packages/libtool/libtool-1.5.22/uclibc.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- libtool-1.5.8/libtool.m4~uclibc
++++ libtool-1.5.8/libtool.m4
+@@ -2221,6 +2221,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
diff --git a/packages/libtool/libtool-1.5.24/.mtn2git_empty b/packages/libtool/libtool-1.5.24/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/.mtn2git_empty
diff --git a/packages/libtool/libtool-1.5.24/autotools.patch b/packages/libtool/libtool-1.5.24/autotools.patch
new file mode 100644
index 0000000000..5df441e945
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/autotools.patch
@@ -0,0 +1,127 @@
+diff -urNd -urNd libtool-1.5/cdemo/configure.ac libtool-1.5.ac/cdemo/configure.ac
+--- libtool-1.5/cdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/cdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([cdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/configure.ac libtool-1.5.ac/demo/configure.ac
+--- libtool-1.5/demo/configure.ac 2002-03-02 22:19:55.000000000 -0500
++++ libtool-1.5.ac/demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([demo], [1.0], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/Makefile.am libtool-1.5.ac/demo/Makefile.am
+--- libtool-1.5/demo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/demo/Makefile.am 2004-05-05 17:17:34.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = hello.c foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
++libhell0_la_SOURCES = hello.c foo.c
+ libhell1_la_SOURCES = hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/depdemo/configure.ac libtool-1.5.ac/depdemo/configure.ac
+--- libtool-1.5/depdemo/configure.ac 2002-10-22 15:29:28.000000000 -0400
++++ libtool-1.5.ac/depdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([depdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/f77demo/configure.ac libtool-1.5.ac/f77demo/configure.ac
+--- libtool-1.5/f77demo/configure.ac 2003-03-22 01:34:27.000000000 -0500
++++ libtool-1.5.ac/f77demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -23,6 +23,7 @@
+ ## ------------------------ ##
+ AC_INIT([f77demo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foof.f])dnl
++AC_CONFIG_AUX_DIR([..])
+
+ ## ------------------------ ##
+ ## Automake Initialisation. ##
+diff -urNd -urNd libtool-1.5/mdemo/configure.ac libtool-1.5.ac/mdemo/configure.ac
+--- libtool-1.5/mdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/mdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([mdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/configure.ac libtool-1.5.ac/pdemo/configure.ac
+--- libtool-1.5/pdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/pdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([pdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([longer_file_name_hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/Makefile.am libtool-1.5.ac/pdemo/Makefile.am
+--- libtool-1.5/pdemo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/pdemo/Makefile.am 2004-05-05 17:17:59.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++libhell0_la_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
+ libhell1_la_SOURCES = longer_file_name_hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = longer_file_name_hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = longer_file_name_main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/tagdemo/configure.ac libtool-1.5.ac/tagdemo/configure.ac
+--- libtool-1.5/tagdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/tagdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([tagdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foo.cpp])
++AC_CONFIG_AUX_DIR([..])
+
+ AC_CANONICAL_TARGET
+
diff --git a/packages/libtool/libtool-1.5.24/install-path-check.patch b/packages/libtool/libtool-1.5.24/install-path-check.patch
new file mode 100644
index 0000000000..46cc960986
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/install-path-check.patch
@@ -0,0 +1,25 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~install-path-check 2004-05-14 22:56:19.000000000 -0500
++++ libtool-1.5.6/ltmain.in 2004-05-14 22:57:48.000000000 -0500
+@@ -5503,10 +5503,13 @@
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+- if test "$inst_prefix_dir" = "$destdir"; then
+- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+- exit $EXIT_FAILURE
+- fi
++ #
++ # This breaks install into our staging area. -PB
++ #
++ # if test "$inst_prefix_dir" = "$destdir"; then
++ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
++ # exit $EXIT_FAILURE
++ # fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
diff --git a/packages/libtool/libtool-1.5.24/libdir-la.patch b/packages/libtool/libtool-1.5.24/libdir-la.patch
new file mode 100644
index 0000000000..47aae4c7af
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/libdir-la.patch
@@ -0,0 +1,52 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~libdir-la 2004-04-01 21:46:15.000000000 -0600
++++ libtool-1.5.6/ltmain.in 2004-05-14 22:53:51.000000000 -0500
+@@ -2147,8 +2147,14 @@
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+- dir="$libdir"
+- absdir="$libdir"
++ # Adding 'libdir' from the .la file to our library search paths
++ # breaks crosscompilation horribly. We cheat here and don't add
++ # it, instead adding the path where we found the .la. -CL
++ dir="$abs_ladir"
++ absdir="$abs_ladir"
++ libdir="$abs_ladir"
++ #dir="$libdir"
++ #absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+@@ -2615,6 +2621,16 @@
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
++# This interferes with crosscompilation. -CL
++# else
++# eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++# if test -z "$libdir"; then
++# $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
++# exit 1
++# fi
++# if test "$absdir" != "$libdir"; then
++# $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
++# fi
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+@@ -5165,6 +5181,10 @@
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
++ # Replacing uninstalled with installed can easily break crosscompilation,
++ # since the installed path is generally the wrong architecture. -CL
++ newdependency_libs="$newdependency_libs $deplib"
++ continue
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
diff --git a/packages/libtool/libtool-1.5.24/never-ever-do-rpath.patch b/packages/libtool/libtool-1.5.24/never-ever-do-rpath.patch
new file mode 100644
index 0000000000..7c92524b3b
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/never-ever-do-rpath.patch
@@ -0,0 +1,32 @@
+Well, brute force to disable rpath.
+
+Only
+-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
++#hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+should be necessary....
+
+Index: libtool-1.5.10/libtool.m4
+===================================================================
+--- libtool-1.5.10.orig/libtool.m4 2007-05-27 23:31:51.000000000 +0200
++++ libtool-1.5.10/libtool.m4 2007-05-27 23:50:26.000000000 +0200
+@@ -4244,16 +4244,16 @@
+ hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+ # Whether we should hardcode library paths into libraries.
+-hardcode_into_libs=$hardcode_into_libs
++hardcode_into_libs=no
+
+ # Flag to hardcode \$libdir into a binary during linking.
+ # This must work even if \$libdir does not exist.
+-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
++hardcode_libdir_flag_spec=
+
+ # If ld is used when linking, flag to hardcode \$libdir into
+ # a binary during linking. This must work even if \$libdir does
+ # not exist.
+-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
++hardcode_libdir_flag_spec_ld=
+
+ # Whether we need a single -rpath flag with a separated argument.
+ hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
diff --git a/packages/libtool/libtool-1.5.24/prefix.patch b/packages/libtool/libtool-1.5.24/prefix.patch
new file mode 100644
index 0000000000..5e7d9ba51d
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/prefix.patch
@@ -0,0 +1,44 @@
+diff -aur libtool-1.5.22.orig/libtool.m4 libtool-1.5.22/libtool.m4
+--- libtool-1.5.22.orig/libtool.m4 2005-12-18 16:53:17.000000000 -0500
++++ libtool-1.5.22/libtool.m4 2007-05-05 15:47:41.000000000 -0400
+@@ -67,7 +67,8 @@
+ LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+ # Always use our own libtool.
+-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++LIBTOOL='$(SHELL) $(top_builddir)'
++LIBTOOL="$LIBTOOL/$host_alias-libtool"
+ AC_SUBST(LIBTOOL)dnl
+
+ # Prevent multiple expansion
+@@ -134,7 +135,7 @@
+ rm="rm -f"
+
+ # Global variables:
+-default_ofile=libtool
++default_ofile=${host_alias}-libtool
+ can_build_shared=yes
+
+ # All known linkers require a `.a' archive for static linking (except MSVC,
+Only in libtool-1.5.22: libtool.m4.orig
+diff -aur libtool-1.5.22.orig/Makefile.am libtool-1.5.22/Makefile.am
+--- libtool-1.5.22.orig/Makefile.am 2005-08-12 13:21:09.000000000 -0400
++++ libtool-1.5.22/Makefile.am 2007-05-05 15:49:25.000000000 -0400
+@@ -30,7 +30,7 @@
+ aclocal_DATA = $(aclocal_macros)
+
+ # The standalone libtool script, and the libtool distributor.
+-bin_SCRIPTS = libtool libtoolize
++bin_SCRIPTS = $(host_alias)-libtool libtoolize
+
+ ## These are installed as a subdirectory of pkgdatadir so that
+ ## libtoolize --ltdl can find them later:
+@@ -55,7 +55,7 @@
+ libltdl/configure \
+ libltdl/config-h.in
+
+-libtool: $(srcdir)/ltmain.sh $(top_builddir)/configure.ac
++$(host_alias)-libtool: $(srcdir)/ltmain.sh $(top_builddir)/configure.ac
+ $(SHELL) $(top_builddir)/config.status --recheck
+ chmod +x $@
+
diff --git a/packages/libtool/libtool-1.5.24/tag.patch b/packages/libtool/libtool-1.5.24/tag.patch
new file mode 100644
index 0000000000..8921a3efb7
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/tag.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libtool-1.5.6/ltmain.in~tag 2004-05-15 05:14:32.000000000 -0400
++++ libtool-1.5.6/ltmain.in 2004-05-15 05:18:01.000000000 -0400
+@@ -226,8 +226,9 @@
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+- $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit $EXIT_FAILURE
++ $echo "$modename: defaulting to \`CC'"
++ $echo "$modename: if this is not correct, specify a tag with \`--tag'"
++# exit $EXIT_FAILURE
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
diff --git a/packages/libtool/libtool-1.5.24/tag1.patch b/packages/libtool/libtool-1.5.24/tag1.patch
new file mode 100644
index 0000000000..6fefd6266d
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/tag1.patch
@@ -0,0 +1,13 @@
+Index: libtool-1.5.10/libltdl/ltmain.sh
+===================================================================
+--- libtool-1.5.10.orig/libltdl/ltmain.sh 2004-09-19 13:34:44.000000000 +0100
++++ libtool-1.5.10/libltdl/ltmain.sh 2006-05-25 15:28:39.000000000 +0100
+@@ -232,7 +232,7 @@
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+- exit $EXIT_FAILURE
++# exit $EXIT_FAILURE
+ # else
+ # $echo "$modename: using $tagname tagged configuration"
+ fi
diff --git a/packages/libtool/libtool-1.5.24/uclibc.patch b/packages/libtool/libtool-1.5.24/uclibc.patch
new file mode 100644
index 0000000000..2c8cbabbb3
--- /dev/null
+++ b/packages/libtool/libtool-1.5.24/uclibc.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- libtool-1.5.8/libtool.m4~uclibc
++++ libtool-1.5.8/libtool.m4
+@@ -2221,6 +2221,11 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
++linux-uclibc*)
++ lt_cv_deplibs_check_method=pass_all
++ lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
++ ;;
++
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
diff --git a/packages/libtool/libtool-cross_1.5.10.bb b/packages/libtool/libtool-cross_1.5.10.bb
index fdc8f6ffaf..fbb37d88d7 100644
--- a/packages/libtool/libtool-cross_1.5.10.bb
+++ b/packages/libtool/libtool-cross_1.5.10.bb
@@ -1,7 +1,7 @@
SECTION = "devel"
require libtool_${PV}.bb
-PR = "r4"
+PR = "r6"
PACKAGES = ""
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
SRC_URI_append = " file://libdir-la.patch;patch=1 \
@@ -21,6 +21,13 @@ do_compile () {
do_stage () {
install -m 0755 ${HOST_SYS}-libtool ${bindir}/${HOST_SYS}-libtool
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
}
do_install () {
diff --git a/packages/libtool/libtool-cross_1.5.22.bb b/packages/libtool/libtool-cross_1.5.22.bb
new file mode 100644
index 0000000000..8edb1f0a44
--- /dev/null
+++ b/packages/libtool/libtool-cross_1.5.22.bb
@@ -0,0 +1,38 @@
+DEFAULT_PREFERENCE = "-1"
+
+SECTION = "devel"
+require libtool_${PV}.bb
+
+PR = "r0"
+PACKAGES = ""
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
+SRC_URI_append = " file://libdir-la.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+ file://tag.patch;patch=1 \
+ file://tag1.patch;patch=1 \
+# file://rpath.patch;patch=1 \
+ file://install-path-check.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+prefix = "${STAGING_DIR}"
+exec_prefix = "${prefix}/${BUILD_SYS}"
+bindir = "${STAGING_BINDIR_NATIVE}"
+
+do_compile () {
+ :
+}
+
+do_stage () {
+ install -m 0755 ${HOST_SYS}-libtool ${bindir}/${HOST_SYS}-libtool
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+do_install () {
+ :
+}
diff --git a/packages/libtool/libtool-cross_1.5.24.bb b/packages/libtool/libtool-cross_1.5.24.bb
new file mode 100644
index 0000000000..f782982b88
--- /dev/null
+++ b/packages/libtool/libtool-cross_1.5.24.bb
@@ -0,0 +1,35 @@
+SECTION = "devel"
+require libtool_${PV}.bb
+
+PR = "r0"
+PACKAGES = ""
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
+SRC_URI_append = " file://libdir-la.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+ file://tag.patch;patch=1 \
+ file://tag1.patch;patch=1 \
+ file://install-path-check.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+prefix = "${STAGING_DIR}"
+exec_prefix = "${prefix}/${BUILD_SYS}"
+bindir = "${STAGING_BINDIR_NATIVE}"
+
+do_compile () {
+ :
+}
+
+do_stage () {
+ install -m 0755 ${HOST_SYS}-libtool ${bindir}/${HOST_SYS}-libtool
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+do_install () {
+ :
+}
diff --git a/packages/libtool/libtool-native_1.5.10.bb b/packages/libtool/libtool-native_1.5.10.bb
index 78e69e06b4..2780ef64ff 100644
--- a/packages/libtool/libtool-native_1.5.10.bb
+++ b/packages/libtool/libtool-native_1.5.10.bb
@@ -1,17 +1,16 @@
SECTION = "devel"
require libtool_${PV}.bb
-PR = "r4"
+PR = "r6"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
SRC_URI_append = " file://libdir-la.patch;patch=1 \
file://prefix.patch;patch=1 \
file://tag.patch;patch=1 \
file://tag1.patch;patch=1 \
- file://install-path-check.patch;patch=1"
+ file://install-path-check.patch;patch=1 \
+ file://rpath-control.patch;patch=1"
S = "${WORKDIR}/libtool-${PV}"
-STAGING_DATADIR_safe := "${STAGING_DATADIR}"
-
inherit native
do_stage () {
@@ -19,22 +18,12 @@ do_stage () {
install -m 0755 libtoolize ${STAGING_BINDIR}/libtoolize
oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
- for dir in ${STAGING_DATADIR} ${STAGING_DATADIR_safe}; do
- ltdldir="${dir}/libtool/libltdl"
- install -d $dir/libtool \
- $ltdldir \
- $dir/aclocal
- install -c config.guess $dir/libtool/config.guess
- install -c config.sub $dir/libtool/config.sub
- install -c -m 0644 ltmain.sh $dir/libtool/
- install -c -m 0644 libtool.m4 $dir/aclocal/
- install -c -m 0644 ltdl.m4 $dir/aclocal/
-
- for src in README COPYING.LIB Makefile.am configure.ac \
- config-h.in ltdl.c ltdl.h; do
- install -m 0644 libltdl/${src} ${ltdldir}
- done
- done
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
}
do_install () {
diff --git a/packages/libtool/libtool-native_1.5.22.bb b/packages/libtool/libtool-native_1.5.22.bb
new file mode 100644
index 0000000000..dec4bf1e14
--- /dev/null
+++ b/packages/libtool/libtool-native_1.5.22.bb
@@ -0,0 +1,32 @@
+DEFAULT_PREFERENCE = "-1"
+
+SECTION = "devel"
+require libtool_${PV}.bb
+
+PR = "r0"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
+SRC_URI_append = " file://libdir-la.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+ file://tag.patch;patch=1 \
+ file://tag1.patch;patch=1 \
+ file://install-path-check.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+inherit native
+
+do_stage () {
+ install -m 0755 ${HOST_SYS}-libtool ${STAGING_BINDIR}/${HOST_SYS}-libtool
+ install -m 0755 libtoolize ${STAGING_BINDIR}/libtoolize
+ oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+do_install () {
+ :
+}
diff --git a/packages/libtool/libtool-native_1.5.24.bb b/packages/libtool/libtool-native_1.5.24.bb
new file mode 100644
index 0000000000..fdc334fef2
--- /dev/null
+++ b/packages/libtool/libtool-native_1.5.24.bb
@@ -0,0 +1,30 @@
+SECTION = "devel"
+require libtool_${PV}.bb
+
+PR = "r0"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libtool-${PV}"
+SRC_URI_append = " file://libdir-la.patch;patch=1 \
+ file://prefix.patch;patch=1 \
+ file://tag.patch;patch=1 \
+ file://tag1.patch;patch=1 \
+ file://install-path-check.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+inherit native
+
+do_stage () {
+ install -m 0755 ${HOST_SYS}-libtool ${STAGING_BINDIR}/${HOST_SYS}-libtool
+ install -m 0755 libtoolize ${STAGING_BINDIR}/libtoolize
+ oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+ install -d ${STAGING_DATADIR}/libtool ${STAGING_DATADIR}/aclocal
+ install -c config.guess ${STAGING_DATADIR}/libtool/
+ install -c config.sub ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 ltmain.sh ${STAGING_DATADIR}/libtool/
+ install -c -m 0644 libtool.m4 ${STAGING_DATADIR}/aclocal/
+ install -c -m 0644 ltdl.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+do_install () {
+ :
+}
diff --git a/packages/libtool/libtool_1.5.22.bb b/packages/libtool/libtool_1.5.22.bb
new file mode 100644
index 0000000000..d470d30cda
--- /dev/null
+++ b/packages/libtool/libtool_1.5.22.bb
@@ -0,0 +1,37 @@
+DEFAULT_PREFERENCE = "-1"
+
+DESCRIPTION = "Generic library support script \
+This is GNU libtool, a generic library support script. Libtool hides \
+the complexity of generating special library types (such as shared \
+libraries) behind a consistent interface."
+HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
+LICENSE = "GPL"
+SECTION = "devel"
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
+ file://autotools.patch;patch=1 \
+ file://uclibc.patch;patch=1"
+# file://3figures.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+PACKAGES = "libltdl libltdl-dev ${PN}"
+FILES_${PN} += "${datadir}/aclocal*"
+FILES_libltdl = "${libdir}/libltdl.so.*"
+FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
+
+inherit autotools
+
+EXTRA_AUTORECONF = "--exclude=libtoolize"
+
+do_configure () {
+ find ${S} -name acinclude.m4 | for m4 in `cat`; do
+ cat ${S}/libtool.m4 ${S}/ltdl.m4 > $m4
+ done
+ autotools_do_configure
+}
+
+do_stage () {
+ oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+}
diff --git a/packages/libtool/libtool_1.5.24.bb b/packages/libtool/libtool_1.5.24.bb
new file mode 100644
index 0000000000..de91370ac5
--- /dev/null
+++ b/packages/libtool/libtool_1.5.24.bb
@@ -0,0 +1,38 @@
+DEFAULT_PREFERENCE = "-1"
+
+DESCRIPTION = "Generic library support script \
+This is GNU libtool, a generic library support script. Libtool hides \
+the complexity of generating special library types (such as shared \
+libraries) behind a consistent interface."
+HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
+LICENSE = "GPL"
+SECTION = "devel"
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
+ file://autotools.patch;patch=1 \
+ file://uclibc.patch;patch=1 \
+ file://never-ever-do-rpath.patch;patch=1"
+
+S = "${WORKDIR}/libtool-${PV}"
+
+PACKAGES = "libltdl libltdl-dev ${PN}"
+FILES_${PN} += "${datadir}/aclocal*"
+FILES_libltdl = "${libdir}/libltdl.so.*"
+FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
+
+inherit autotools
+
+EXTRA_AUTORECONF = "--exclude=libtoolize"
+
+do_configure () {
+ find ${S} -name acinclude.m4 | for m4 in `cat`; do
+ cat ${S}/libtool.m4 ${S}/ltdl.m4 > $m4
+ done
+ autotools_do_configure
+}
+
+do_stage () {
+ oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+}
diff --git a/packages/libw100/libw100_0.0.2.bb b/packages/libw100/libw100_0.0.2.bb
index f8d8e032d0..867eb68b58 100644
--- a/packages/libw100/libw100_0.0.2.bb
+++ b/packages/libw100/libw100_0.0.2.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Acceleration library for ATI imageon chipsets (w100 and w3220)"
LICENSE = "GPLv2"
-SRC_URI = "svn://svn.sourceforge.net/svnroot/libw100/tags;module=rev_0_0_2;proto=https"
+SRC_URI = "svn://libw100.svn.sourceforge.net/svnroot/libw100/tags;module=rev_0_0_2;proto=https"
S = "${WORKDIR}/rev_0_0_2"
diff --git a/packages/libw100/libw100_svn.bb b/packages/libw100/libw100_svn.bb
index 46feef7c03..f8d5544625 100644
--- a/packages/libw100/libw100_svn.bb
+++ b/packages/libw100/libw100_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Acceleration library for ATI imageon chipsets (w100 and w3220)"
LICENSE = "GPLv2"
PV = "0.0.2+svn${SRCDATE}"
-SRC_URI = "svn://svn.sourceforge.net/svnroot/libw100;module=trunk;proto=https"
+SRC_URI = "svn://libw100.svn.sourceforge.net/svnroot/libw100;module=trunk;proto=https"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/libwpd/libwpd_0.8.4.bb b/packages/libwpd/libwpd_0.8.4.bb
index 46a59e8dc8..4e6ee91a4f 100644
--- a/packages/libwpd/libwpd_0.8.4.bb
+++ b/packages/libwpd/libwpd_0.8.4.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "libwpd is a C++ library designed to help process WordPerfect docu
HOMEPAGE = "http://libwpd.sourceforge.net/index.html"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
-
+DEPENDS = "libgsf"
inherit autotools pkgconfig
diff --git a/packages/libwpd/libwpd_0.8.6.bb b/packages/libwpd/libwpd_0.8.6.bb
index 46a59e8dc8..4e6ee91a4f 100644
--- a/packages/libwpd/libwpd_0.8.6.bb
+++ b/packages/libwpd/libwpd_0.8.6.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "libwpd is a C++ library designed to help process WordPerfect docu
HOMEPAGE = "http://libwpd.sourceforge.net/index.html"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
-
+DEPENDS = "libgsf"
inherit autotools pkgconfig
diff --git a/packages/libxfce4mcs/libxfce4mcs_4.3.99.2.bb b/packages/libxfce4mcs/libxfce4mcs_4.3.99.2.bb
deleted file mode 100644
index 07d7a95ae1..0000000000
--- a/packages/libxfce4mcs/libxfce4mcs_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# libxfce4mcs OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/libxfce4util/libxfce4util.inc b/packages/libxfce4util/libxfce4util.inc
deleted file mode 100644
index dbe6501e42..0000000000
--- a/packages/libxfce4util/libxfce4util.inc
+++ /dev/null
@@ -1,31 +0,0 @@
-# libxfce4util OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION = "Basic utility library for Xfce4"
-SECTION = "x11/libs"
-LICENSE = "GPL"
-DEPENDS = "glib-2.0"
-
-inherit xfce pkgconfig
-
-XFCE_HEADERS="debug.h utf8.h xfce-generics.h xfce-resource.h \
- i18n.h util.h xfce-kiosk.h libxfce4util-config.h \
- xfce-desktopentry.h xfce-miscutils.h libxfce4util.h \
- xfce-fileutils.h xfce-rc.h"
-
-MACROS="m4/X11.m4 m4/debug.m4 m4/depends.m4 m4/i18n.m4"
-
-do_stage() {
- install -d ${STAGING_LIBDIR} ${STAGING_INCDIR}/libxfce4util
- for file in ${XFCE_HEADERS}; do
- install -m 644 libxfce4util/$file ${STAGING_INCDIR}/libxfce4util
- done
-
- oe_libinstall -C libxfce4util -so libxfce4util ${STAGING_LIBDIR}
-
- install -d ${STAGING_DATADIR}/aclocal/
- install -m 0644 ${MACROS} ${STAGING_DATADIR}/aclocal/
-}
-
-FILES_${PN}-dev += " ${datadir}/xfce4/m4"
diff --git a/packages/libxfce4util/libxfce4util_4.2.2.bb b/packages/libxfce4util/libxfce4util_4.2.2.bb
deleted file mode 100644
index bc6443021f..0000000000
--- a/packages/libxfce4util/libxfce4util_4.2.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-# libxfce4util OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
-PR = "r1"
-
diff --git a/packages/libxfce4util/libxfce4util_4.3.99.2.bb b/packages/libxfce4util/libxfce4util_4.3.99.2.bb
deleted file mode 100644
index d1c29197d6..0000000000
--- a/packages/libxfce4util/libxfce4util_4.3.99.2.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require ${PN}.inc
-
-SRC_URI += "\
-http://svn.xfce.org/svn/xfce/xfce4-dev-tools/trunk/m4macros/xdt-depends.m4 \
-http://svn.xfce.org/svn/xfce/xfce4-dev-tools/trunk/m4macros/xdt-features.m4 \
-http://svn.xfce.org/svn/xfce/xfce4-dev-tools/trunk/m4macros/xdt-i18n.m4 \
-http://svn.xfce.org/svn/xfce/xfce4-dev-tools/trunk/m4macros/xdt-python.m4 \
-http://svn.xfce.org/svn/xfce/xfce4-dev-tools/trunk/m4macros/xdt-xfce.m4"
-
-
-MACROS="m4/xdt*.m4"
-
-XFCE_HEADERS="debug.h utf8.h xfce-generics.h xfce-resource.h \
- i18n.h util.h xfce-kiosk.h libxfce4util-config.h \
- xfce-desktopentry.h xfce-miscutils.h libxfce4util.h \
- xfce-fileutils.h xfce-rc.h xfce-utf8.h \
- xfce-license.h xfce-i18n.h libxfce4util-enum-types.h"
-
-do_configure_prepend() {
- install -m 0755 -d ${S}/m4/
- install -m 0644 ${WORKDIR}/xdt-*.m4 ${S}/m4/
-}
diff --git a/packages/libxfcegui4/libxfcegui4_4.2.3.bb b/packages/libxfcegui4/libxfcegui4_4.2.3.bb
deleted file mode 100644
index 2def53685a..0000000000
--- a/packages/libxfcegui4/libxfcegui4_4.2.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# libxfcegui4 OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/libxfcegui4/libxfcegui4_4.3.99.2.bb b/packages/libxfcegui4/libxfcegui4_4.3.99.2.bb
deleted file mode 100644
index 2def53685a..0000000000
--- a/packages/libxfcegui4/libxfcegui4_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# libxfcegui4 OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/libxml/libxml2-native_2.6.29.bb b/packages/libxml/libxml2-native_2.6.29.bb
new file mode 100644
index 0000000000..fc9c3697de
--- /dev/null
+++ b/packages/libxml/libxml2-native_2.6.29.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "GNOME XML library"
+PR = "r1"
+
+SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
+
+DEPENDS = "python-native"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libxml2-${PV}"
+S = "${WORKDIR}/libxml2-${PV}"
+
+inherit autotools native pkgconfig
+
+EXTRA_OECONF = "--with-python=${STAGING_INCDIR}/python2.4 --without-debug --without-legacy --without-catalog --without-docbook --with-c14n"
+
+do_stage () {
+ oe_runmake install
+}
diff --git a/packages/libxml/libxml2_2.6.26.bb b/packages/libxml/libxml2_2.6.26.bb
index 9f5295bdb2..12fb6ca08e 100644
--- a/packages/libxml/libxml2_2.6.26.bb
+++ b/packages/libxml/libxml2_2.6.26.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "GNOME XML Parser library"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "MIT"
-PR = "r2"
+PR = "r4"
SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
diff --git a/packages/libxml/libxml2_2.6.29.bb b/packages/libxml/libxml2_2.6.29.bb
new file mode 100644
index 0000000000..224f3e3b96
--- /dev/null
+++ b/packages/libxml/libxml2_2.6.29.bb
@@ -0,0 +1,34 @@
+# NOTE! This is an update file and will go away when upstream updates
+# TODO: send this to upstream
+
+DESCRIPTION = "GNOME XML Parser library"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "MIT"
+PR = "r4"
+
+SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
+
+inherit autotools pkgconfig binconfig
+
+EXTRA_OECONF = "--without-python --without-debug --without-legacy --without-catalog --without-docbook --with-c14n"
+
+export LDFLAGS += "-ldl"
+
+do_stage() {
+ autotools_stage_all
+ install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/
+ #this is need it by php during its install
+ install -m 0755 xml2-config ${STAGING_BINDIR}
+}
+
+python populate_packages_prepend () {
+ # autonamer would call this libxml2-2, but we don't want that
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_libxml2', 'libxml2', d)
+}
+
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale"
+
+FILES_${PN}-dev += "${bindir}/*-config"
+FILES_${PN}-utils += "${bindir}/*"
diff --git a/packages/libxosd/.mtn2git_empty b/packages/libxosd/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libxosd/.mtn2git_empty
diff --git a/packages/libxosd/files/.mtn2git_empty b/packages/libxosd/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libxosd/files/.mtn2git_empty
diff --git a/packages/libxosd/files/autofoo.patch b/packages/libxosd/files/autofoo.patch
new file mode 100644
index 0000000000..e26f15e9e5
--- /dev/null
+++ b/packages/libxosd/files/autofoo.patch
@@ -0,0 +1,116 @@
+Index: current/configure.ac
+===================================================================
+--- current.orig/configure.ac 2007-06-14 09:06:04.000000000 +0000
++++ current/configure.ac 2007-06-14 09:14:37.000000000 +0000
+@@ -52,8 +52,6 @@
+ CFLAGS="$CFLAGS $X_CFLAGS -Wall"
+
+ dnl Checks for libraries.
+-AM_PATH_GTK(1.2.2,,
+- AC_MSG_WARN([*** GTK+ >= 1.2.2 not found ***]))
+ AC_CHECK_LIB(X11, XInitThreads,,
+ AC_MSG_ERROR([*** X11 not threadsafe ***]))
+ AC_CHECK_LIB(Xext, XShapeQueryExtension,,
+@@ -107,63 +105,6 @@
+ AC_MSG_WARN("beep media player not found")
+ fi
+
+-dnl Check for xmms
+-AM_PATH_XMMS(1.2.7,,
+- AC_MSG_WARN("xmms plugins can not be built"))
+-dnl Override where to place libxmms_xosd.so
+-AC_ARG_WITH([plugindir],
+- AC_HELP_STRING([--with-plugindir=DIR],
+- [Set the xmms plugin directory]),
+- [XMMS_PLUGIN_DIR="$withval"],
+- [XMMS_PLUGIN_DIR="$XMMS_GENERAL_PLUGIN_DIR"])
+-
+-dnl Check for gdk-pixbuf
+-AM_PATH_GDK_PIXBUF(0.22.0,,
+- AC_MSG_WARN("new xmms plugin can not be built"))
+-dnl Override where to place pixmaps for libxmms_xosd.so
+-AC_ARG_WITH([pixmapdir],
+- AC_HELP_STRING([--with-pixmapdir=DIR],
+- [Set the directory for xmms plugin pixmaps]),
+- [XMMS_PIXMAPDIR="$withval"],
+- [XMMS_PIXMAPDIR="${datadir}/xosd"])
+-AC_SUBST(XMMS_PIXMAPDIR)
+-
+-dnl NEW plugin
+-AC_ARG_ENABLE([new-plugin],
+- AC_HELP_STRING([--disable-new-plugin],
+- [Disable new xmms plugin (enabled by default)]),
+- [enable_new_plugin="$enableval"],
+- [enable_new_plugin="yes"])
+-AC_MSG_CHECKING([whether new xmms plugin was requested])
+-AC_MSG_RESULT($enable_new_plugin)
+-AM_CONDITIONAL([BUILD_NEW_PLUGIN],
+- [test x"$enable_new_plugin" = "xyes" -a x"$no_xmms" != "xyes" -a x"$no_gdk_pixbuf" != "xyes"])
+-
+-
+-dnl Check for Beep Media player
+-AC_ARG_ENABLE([beep_media_player_plugin],
+- AC_HELP_STRING([--enable-beep_media_player_plugin],
+- [Enable beep media plugin (enabled by default)]),
+- [beep_media_player_plugin="$enableval"],
+- [beep_media_player_plugin="yes"])
+-AC_MSG_CHECKING([whether beep media plugin was requested])
+-AC_MSG_RESULT($beep_media_player_plugin)
+-
+-AM_CONDITIONAL([BUILD_BEEP_MEDIA_PLUGIN],
+- [test x"$beep_media_player_plugin" = "xyes" -a x"$no_bmp" == "xyes"])
+-
+-dnl OLD plugin
+-AC_ARG_ENABLE([old-plugin],
+- AC_HELP_STRING([--enable-old-plugin],
+- [Enable old xmms plugin (disabled by default)]),
+- [enable_old_plugin="$enableval"],
+- [enable_old_plugin="no"])
+-AC_MSG_CHECKING([whether old xmms plugin was requested])
+-AC_MSG_RESULT($enable_old_plugin)
+-AM_CONDITIONAL([BUILD_OLD_PLUGIN],
+- [test x"$enable_old_plugin" = "xyes" -a x"$no_xmms" != "xyes"])
+-
+-
+ dnl Define XOSD_VERSION
+ AC_DEFINE_UNQUOTED(XOSD_VERSION, "${VERSION}")
+
+@@ -174,8 +115,6 @@
+ Makefile
+ src/Makefile
+ src/libxosd/Makefile
+-src/xmms_plugin/Makefile
+-src/bmp_plugin/Makefile
+ macros/Makefile
+ man/Makefile
+ pixmaps/Makefile
+Index: current/src/Makefile.am
+===================================================================
+--- current.orig/src/Makefile.am 2007-06-14 09:06:04.000000000 +0000
++++ current/src/Makefile.am 2007-06-14 09:14:37.000000000 +0000
+@@ -10,6 +10,4 @@
+
+ include_HEADERS = xosd.h
+
+-AM_CFLAGS = ${GTK_CFLAGS}
+-
+-SUBDIRS=libxosd xmms_plugin bmp_plugin
++SUBDIRS=libxosd
+Index: current/Makefile.am
+===================================================================
+--- current.orig/Makefile.am 2007-06-14 09:06:04.000000000 +0000
++++ current/Makefile.am 2007-06-14 09:16:15.000000000 +0000
+@@ -1,11 +1,5 @@
+-if BUILD_NEW_PLUGIN
+- NEW_SUB = pixmaps
+-endif
+-if BUILD_BEEP_MEDIA_PLUGIN
+- NEW_SUB = pixmaps
+-endif
+-SUBDIRS = macros man $(NEW_SUB) src script
+-DIST_SUBDIRS = macros man pixmaps src script
++SUBDIRS = macros man src script
++DIST_SUBDIRS = macros man src script
+
+ DISTCLEANFILES = libtool-disable-static
+
diff --git a/packages/libxosd/files/use-sane-default-font.patch b/packages/libxosd/files/use-sane-default-font.patch
new file mode 100644
index 0000000000..0ede1351e2
--- /dev/null
+++ b/packages/libxosd/files/use-sane-default-font.patch
@@ -0,0 +1,13 @@
+Index: current/src/libxosd/xosd.c
+===================================================================
+--- current.orig/src/libxosd/xosd.c 2007-06-16 19:37:48.000000000 +0000
++++ current/src/libxosd/xosd.c 2007-06-17 05:00:47.000000000 +0000
+@@ -26,7 +26,7 @@
+ #define XOFFSET 10
+
+ const char * const osd_default_font =
+- "-misc-fixed-medium-r-semicondensed--*-*-*-*-c-*-*-*";
++ "fixed";
+ #if 0
+ "-adobe-helvetica-bold-r-*-*-10-*";
+ #endif
diff --git a/packages/libxosd/libxosd_svn.bb b/packages/libxosd/libxosd_svn.bb
new file mode 100644
index 0000000000..7dfd05d5d9
--- /dev/null
+++ b/packages/libxosd/libxosd_svn.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "A library for displaying a TV-like on-screen display in X."
+SECTION = "libs/x11"
+DEPENDS = "virtual/libx11 libxext"
+LICENSE = "LGPL"
+PV = "2.2.15+svn${SRCDATE}"
+PR = "r5"
+
+SRC_URI = "svn://libxosd.svn.sourceforge.net/svnroot/libxosd/source;module=current;proto=https \
+ file://autofoo.patch;patch=1 \
+ file://use-sane-default-font.patch;patch=1"
+
+S = "${WORKDIR}/current"
+
+inherit autotools binconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "${PN}-examples-dbg ${PN}-examples"
+FILES_${PN}-examples = "${bindir}/osd_cat"
+FILES_${PN}-examples-dbg = "${bindir}/.debug/"
+FILES_${PN}-dev += "${bindir}/xosd-config"
+FILES_${PN} = "${libdir}/libxosd.so.*"
diff --git a/packages/libxslt/files/.mtn2git_empty b/packages/libxslt/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/libxslt/files/.mtn2git_empty
diff --git a/packages/libxslt/libxslt-1.1.17/destdir.patch b/packages/libxslt/files/destdir.patch
index 8df1b206bc..8df1b206bc 100644
--- a/packages/libxslt/libxslt-1.1.17/destdir.patch
+++ b/packages/libxslt/files/destdir.patch
diff --git a/packages/libxslt/libxslt-native_1.1.21.bb b/packages/libxslt/libxslt-native_1.1.21.bb
new file mode 100644
index 0000000000..5157aaacbf
--- /dev/null
+++ b/packages/libxslt/libxslt-native_1.1.21.bb
@@ -0,0 +1,4 @@
+require libxslt_${PV}.bb
+inherit native
+
+DEPENDS = "libxml2-native (>=2.6.27)"
diff --git a/packages/libxslt/libxslt_1.1.17.bb b/packages/libxslt/libxslt_1.1.17.bb
index 7abd2c30b6..2ae61eeaf5 100644
--- a/packages/libxslt/libxslt_1.1.17.bb
+++ b/packages/libxslt/libxslt_1.1.17.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
PRIORITY = "optional"
DEPENDS = "libxml2"
LICENSE = "MIT"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://xmlsoft.org/libxml2/libxslt-${PV}.tar.gz \
file://destdir.patch;patch=1"
@@ -11,7 +11,7 @@ S = "${WORKDIR}/libxslt-${PV}"
inherit autotools pkgconfig
-EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto"
+EXTRA_OECONF = "--without-python --without-plugins --without-debug --without-mem-debug --without-crypto"
xsltheaders = "attributes.h documents.h extensions.h extra.h functions.h imports.h \
keys.h namespaces.h numbersInternals.h pattern.h preproc.h security.h \
diff --git a/packages/libxslt/libxslt_1.1.21.bb b/packages/libxslt/libxslt_1.1.21.bb
new file mode 100644
index 0000000000..282918e83e
--- /dev/null
+++ b/packages/libxslt/libxslt_1.1.21.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "GNOME XSLT library"
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "libxml2 (>=2.6.27)"
+LICENSE = "MIT"
+PR = "r2"
+
+SRC_URI = "ftp://xmlsoft.org/libxml2/libxslt-${PV}.tar.gz"
+S = "${WORKDIR}/libxslt-${PV}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--without-python --without-debug --without-mem-debug --without-crypto"
+
+do_stage () {
+ autotools_stage_all
+}
+
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale"
+
+FILES_${PN}-dev += "${bindir}/xslt-config"
+FILES_${PN}-utils += "${bindir}"
diff --git a/packages/lighttpd/lighttpd/configure.in.patch b/packages/lighttpd/lighttpd/configure.in.patch
index 3387fe5635..772103cf76 100644
--- a/packages/lighttpd/lighttpd/configure.in.patch
+++ b/packages/lighttpd/lighttpd/configure.in.patch
@@ -7,7 +7,7 @@ Index: lighttpd-1.4.13/configure.in
AC_MSG_RESULT([$WITH_PCRE])
-if test "x$cross_compiling" = xno -a "$WITH_PCRE" != "no"; then
-+#if test "x$cross_compiling" = xno -a "$WITH_PCRE" != "no"; then
++if test "$WITH_PCRE" != "no"; then
AC_PATH_PROG(PCRECONFIG, pcre-config)
- if test x"$PCRECONFIG" != x; then
@@ -28,7 +28,7 @@ Index: lighttpd-1.4.13/configure.in
- fi
-fi
+# fi
-+#fi
++fi
AC_SUBST(PCRE_LIB)
diff --git a/packages/lighttpd/lighttpd_1.4.13.bb b/packages/lighttpd/lighttpd_1.4.13.bb
deleted file mode 100644
index 504a129db8..0000000000
--- a/packages/lighttpd/lighttpd_1.4.13.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-DESCRIPTION = "Web server"
-SECTION = "net"
-DEPENDS = "sqlite3 libpcre libxml2"
-LICENSE = "BSD"
-PR = "r5"
-
-SRC_URI = "http://www.lighttpd.net/download/lighttpd-1.4.13.tar.gz \
- file://configure.in.patch;patch=1 \
- file://src-server.c.patch;patch=1 \
- file://index.html \
- file://lighttpd.conf \
- file://lighttpd"
-
-EXTRA_OECONF="--without-bzip2 \
- --without-ldap \
- --without-lua \
- --without-memcache \
- --with-pcre \
- --with-webdav-props \
- --with-webdav-locks \
- --without-openssl \
- --disable-nls \
- --disable-static"
-
-inherit autotools pkgconfig update-rc.d
-
-INITSCRIPT_NAME = "lighttpd"
-INITSCRIPT_PARAMS = "defaults 70"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d ${D}/www/logs ${D}/www/pages/dav ${D}/www/var
- install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}
- install -m 0644 ${WORKDIR}/index.html ${D}/www/pages/
-}
-
-do_stage() {
- autotools_stage_all
-}
-
-FILES_${PN} += "${libdir}/mod_*.so ${sysconfdir} /www"
diff --git a/packages/lighttpd/lighttpd_1.4.16.bb b/packages/lighttpd/lighttpd_1.4.16.bb
new file mode 100644
index 0000000000..14a6bd0f25
--- /dev/null
+++ b/packages/lighttpd/lighttpd_1.4.16.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Web server"
+SECTION = "net"
+LICENSE = "BSD"
+DEPENDS = "libpcre"
+
+SRC_URI = "http://www.lighttpd.net/download/lighttpd-${PV}.tar.gz \
+ file://configure.in.patch;patch=1 \
+ file://src-server.c.patch;patch=1 \
+ file://index.html \
+ file://lighttpd.conf \
+ file://lighttpd"
+
+EXTRA_OECONF="--without-bzip2 \
+ --without-ldap \
+ --without-lua \
+ --without-memcache \
+ --with-pcre \
+ --without-webdav-props \
+ --without-webdav-locks \
+ --without-openssl \
+ --disable-nls \
+ --disable-static"
+
+inherit autotools pkgconfig update-rc.d
+
+INITSCRIPT_NAME = "lighttpd"
+INITSCRIPT_PARAMS = "defaults 70"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d ${D}/www/logs ${D}/www/pages/dav ${D}/www/var
+ install -m 0755 ${WORKDIR}/lighttpd ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/lighttpd.conf ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/index.html ${D}/www/pages/
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN} += "${libdir}/mod_*.so ${sysconfdir} /www"
diff --git a/packages/links/links-x11_2.0+2.1pre26.bb b/packages/links/links-x11_2.0+2.1pre26.bb
index c026ca7e02..9ee70d9ad4 100644
--- a/packages/links/links-x11_2.0+2.1pre26.bb
+++ b/packages/links/links-x11_2.0+2.1pre26.bb
@@ -2,7 +2,8 @@ require links.inc
DEPENDS += "virtual/libx11"
RCONFLICTS = "links"
-PR = "r0"
+PR = "r1"
+
SRC_URI += " file://links2.desktop \
http://www.xora.org.uk/oe/links2.png"
diff --git a/packages/links/links_2.0+2.1pre26.bb b/packages/links/links_2.0+2.1pre26.bb
index 6fcf8cef84..c46a64f380 100644
--- a/packages/links/links_2.0+2.1pre26.bb
+++ b/packages/links/links_2.0+2.1pre26.bb
@@ -1,8 +1,8 @@
require links.inc
DEPENDS += "gpm"
-RCONFLICTS="links-x11"
-PR = "r0"
+RCONFLICTS = "links-x11"
+PR = "r1"
EXTRA_OECONF = "--enable-javascript --with-libfl --enable-graphics \
--with-ssl=${STAGING_LIBDIR}/.. --with-libjpeg \
diff --git a/packages/linphone/linphone_1.6.0.bb b/packages/linphone/linphone_1.6.0.bb
index 563f21440e..7a90cdd5c9 100644
--- a/packages/linphone/linphone_1.6.0.bb
+++ b/packages/linphone/linphone_1.6.0.bb
@@ -16,9 +16,9 @@ RDEPENDS_liblinphone = "libquickstream libmediastreamer libortp libosip2"
RDEPENDS_libquickstream = "speex libmediastreamer libasound"
RDEPENDS_libmediastreamer = "speex libogg libasound libortp"
-PROVIDES = "linphone linphonec liblinphone"
+PROVIDES += "linphone linphonec liblinphone"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://download.savannah.nongnu.org/releases/linphone/1.6.x/sources/linphone-${PV}.tar.gz \
http://download.devbase.at/voip/linphone-1.6.0-pl0.patch;patch=1"
@@ -61,9 +61,9 @@ PACKAGES += "linphonec linphone-rings liblinphone libquickstream libmediastreame
FILES_${PN} = "${bindir}/linphone ${datadir}/pixmaps ${datadir}/applications ${datadir}/gnome/apps"
FILES_${PN}c = "${bindir}/linphonec ${bindir}/sipomatic ${datadir}/sounds/linphone/ringback.wav"
FILES_${PN}-rings = "${datadir}/sounds/linphone/rings"
-FILES_liblinphone = "${libdir}/liblinphone.so*"
-FILES_libquickstream = "${libdir}/libquickstream.so*"
-FILES_libmediastreamer = "${libdir}/libmediastreamer.so*"
-FILES_libortp = "${libdir}/libortp.so*"
-FILES_${PN}-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/pkgconfig ${includedir}"
+FILES_liblinphone = "${libdir}/liblinphone.so.*"
+FILES_libquickstream = "${libdir}/libquickstream.so.*"
+FILES_libmediastreamer = "${libdir}/libmediastreamer.so.*"
+FILES_libortp = "${libdir}/libortp.so.*"
+FILES_${PN}-dev += "${libdir}/*.a ${libdir}/*.la ${libdir}/pkgconfig ${includedir}"
diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.20/.mtn2git_empty b/packages/linux-libc-headers/linux-libc-headers-2.6.20/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux-libc-headers/linux-libc-headers-2.6.20/.mtn2git_empty
diff --git a/packages/linux-libc-headers/linux-libc-headers-2.6.20/procinfo.h b/packages/linux-libc-headers/linux-libc-headers-2.6.20/procinfo.h
new file mode 100644
index 0000000000..8cdf828af8
--- /dev/null
+++ b/packages/linux-libc-headers/linux-libc-headers-2.6.20/procinfo.h
@@ -0,0 +1,24 @@
+/*
+ * linux/include/asm-arm/procinfo.h
+ *
+ * Copyright (C) 1996-1999 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __ASM_PROCINFO_H
+#define __ASM_PROCINFO_H
+
+#define HWCAP_SWP 1
+#define HWCAP_HALF 2
+#define HWCAP_THUMB 4
+#define HWCAP_26BIT 8 /* Play it safe */
+#define HWCAP_FAST_MULT 16
+#define HWCAP_FPA 32
+#define HWCAP_VFP 64
+#define HWCAP_EDSP 128
+#define HWCAP_JAVA 256
+#define HWCAP_IWMMXT 512
+#define HWCAP_CRUNCH 1024
+#endif
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
index c4125ee75a..df427ce582 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.18+2.6.19-rc1.bb
@@ -54,3 +54,11 @@ do_stage () {
cp -pfLR ${S}${includedir}/asm-${ARCH} ${CROSS_DIR}/${TARGET_SYS}/include/asm
cp -pfLR ${S}${includedir}/asm-generic ${CROSS_DIR}/${TARGET_SYS}/include/
}
+
+do_stage_append_nylon () {
+ cp -pPR include/asm-${ARCH}/* ${STAGING_INCDIR}/asm/
+ cp -pPR include/asm-${ARCH}/* ${CROSS_DIR}/${TARGET_SYS}/include/asm/
+ cp -pPR include/linux/* ${STAGING_INCDIR}/linux/
+ cp -pPR include/linux/* ${CROSS_DIR}/${TARGET_SYS}/include/linux/
+}
+
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
index 8e1c5dc3e8..dc278dea14 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
@@ -67,4 +67,18 @@ do_stage () {
cp -pfLR ${STAGE_TEMP}${includedir}/linux ${CROSS_DIR}/${TARGET_SYS}/include/
cp -pfLR ${STAGE_TEMP}${includedir}/asm ${CROSS_DIR}/${TARGET_SYS}/include/
cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${CROSS_DIR}/${TARGET_SYS}/include/
+ # Add UTS_RELEASE to version.h. UTS_RELEASE was moved from version.h to
+ # utsrelease.h in order to avoid recompiling a kernel every time a localversion
+ # changed. Since the our headers are static and we're not compiling an
+ # actual kernel, re-adding UTS_RELEASE does't hurt, and it allows uclibc to
+ # compile with kernel headers that work with EABI on ARM
+ echo '#define UTS_RELEASE "2.6.18"' >> ${CROSS_DIR}/${TARGET_SYS}/include/linux/version.h
}
+
+do_stage_append_nylon () {
+ cp -pPR include/asm-${ARCH}/* ${STAGING_INCDIR}/asm/
+ cp -pPR include/asm-${ARCH}/* ${CROSS_DIR}/${TARGET_SYS}/include/asm/
+ cp -pPR include/linux/* ${STAGING_INCDIR}/linux/
+ cp -pPR include/linux/* ${CROSS_DIR}/${TARGET_SYS}/include/linux/
+}
+
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb
new file mode 100644
index 0000000000..8145a80f8d
--- /dev/null
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb
@@ -0,0 +1,73 @@
+require linux-libc-headers.inc
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = "unifdef-native"
+PR = "r7"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://procinfo.h"
+
+S = "${WORKDIR}/linux-${PV}"
+
+set_arch() {
+ case ${TARGET_ARCH} in
+ alpha*) ARCH=alpha ;;
+ arm*) ARCH=arm ;;
+ cris*) ARCH=cris ;;
+ hppa*) ARCH=parisc ;;
+ i*86*) ARCH=i386 ;;
+ ia64*) ARCH=ia64 ;;
+ mips*) ARCH=mips ;;
+ m68k*) ARCH=m68k ;;
+ powerpc*) ARCH=powerpc ;;
+ s390*) ARCH=s390 ;;
+ sh*) ARCH=sh ;;
+ sparc64*) ARCH=sparc64 ;;
+ sparc*) ARCH=sparc ;;
+ x86_64*) ARCH=x86_64 ;;
+ avr32*) ARCH=avr32 ;;
+ bfin*) ARCH=blackfin ;;
+ esac
+}
+
+do_configure() {
+ set_arch
+ oe_runmake allnoconfig ARCH=$ARCH
+}
+
+do_compile () {
+}
+
+do_install() {
+ set_arch
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}/usr ARCH=$ARCH
+}
+
+do_install_append_arm() {
+ cp ${WORKDIR}/procinfo.h ${D}${includedir}/asm/
+}
+
+STAGE_TEMP="${WORKDIR}/temp-staging"
+
+do_stage () {
+ set_arch
+ echo $ARCH
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}/usr ARCH=$ARCH
+ if [ "$ARCH" = "arm" ]; then
+ cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
+ fi
+ install -d ${STAGING_INCDIR}
+ rm -rf ${STAGING_INCDIR}/linux ${STAGING_INCDIR}/asm ${STAGING_INCDIR}/asm-generic
+ cp -pfLR ${STAGE_TEMP}${includedir}/linux ${STAGING_INCDIR}/
+ cp -pfLR ${STAGE_TEMP}${includedir}/asm ${STAGING_INCDIR}/
+ cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${STAGING_INCDIR}/
+ rm -rf ${CROSS_DIR}/${TARGET_SYS}/include/linux
+ rm -rf ${CROSS_DIR}/${TARGET_SYS}/include/asm
+ rm -rf ${CROSS_DIR}/${TARGET_SYS}/include/asm-generic
+ install -d ${CROSS_DIR}/${TARGET_SYS}/include
+ cp -pfLR ${STAGE_TEMP}${includedir}/linux ${CROSS_DIR}/${TARGET_SYS}/include/
+ cp -pfLR ${STAGE_TEMP}${includedir}/asm ${CROSS_DIR}/${TARGET_SYS}/include/
+ cp -pfLR ${STAGE_TEMP}${includedir}/asm-generic ${CROSS_DIR}/${TARGET_SYS}/include/
+}
diff --git a/packages/linux-uml/linux-uml_2.4.26.bb b/packages/linux-uml/linux-uml_2.4.26.bb
index a5dbfd814a..11b2a2261c 100644
--- a/packages/linux-uml/linux-uml_2.4.26.bb
+++ b/packages/linux-uml/linux-uml_2.4.26.bb
@@ -13,6 +13,7 @@ S = "${WORKDIR}/linux-${PV}"
inherit kernel
COMPATIBLE_HOST = 'i.86.*-linux'
+COMPATIBLE_MACHINE = "x86-uml"
export OS = "Linux"
ARCH = "um"
diff --git a/packages/linux-uml/linux-uml_2.6.11-rc2-mm1.bb b/packages/linux-uml/linux-uml_2.6.11-rc2-mm1.bb
index e71199d617..915378cb56 100644
--- a/packages/linux-uml/linux-uml_2.6.11-rc2-mm1.bb
+++ b/packages/linux-uml/linux-uml_2.6.11-rc2-mm1.bb
@@ -21,6 +21,7 @@ S = "${WORKDIR}/linux-${LV}"
inherit kernel
COMPATIBLE_HOST = 'i.86.*-linux'
+COMPATIBLE_MACHINE = "x86-uml"
export OS = "Linux"
ARCH = "um"
diff --git a/packages/linux/LAB-kernel_2.6.13-hh2.bb b/packages/linux/LAB-kernel_2.6.13-hh2.bb
index af177ba62e..9ee0539ac3 100644
--- a/packages/linux/LAB-kernel_2.6.13-hh2.bb
+++ b/packages/linux/LAB-kernel_2.6.13-hh2.bb
@@ -3,6 +3,7 @@ DESCRIPTION = "Liux As Bootloader kernelm"
LICENSE = "GPL"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "h2200"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/handhelds-pxa-${PV}"
diff --git a/packages/linux/LAB-kernel_cvs.bb b/packages/linux/LAB-kernel_cvs.bb
index 475f3b5773..c7b72ab7f2 100644
--- a/packages/linux/LAB-kernel_cvs.bb
+++ b/packages/linux/LAB-kernel_cvs.bb
@@ -9,6 +9,7 @@ PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
DEFAULT_PREFERENCE = "-1"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "h2200"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/handhelds-pxa-${PV}"
@@ -27,8 +28,8 @@ ALLOW_EMPTY_kernel-image_h2200 = "1"
K_MAJOR = "2"
K_MINOR = "6"
-K_MICRO = "16"
-HHV = "0"
+K_MICRO = "21"
+HHV = "8"
#
KERNEL_PRIORITY = "${@'%d' % (int(bb.data.getVar('K_MAJOR',d,1)) * 100000000 + int(bb.data.getVar('K_MINOR',d,1)) * 1000000 + int(bb.data.getVar('K_MICRO',d,1)) * 10000 + float(bb.data.getVar('HHV',d,1)))}"
diff --git a/packages/linux/a780-kernel_2.6.bb b/packages/linux/a780-kernel_2.6.bb
deleted file mode 100644
index b60bbaa3bc..0000000000
--- a/packages/linux/a780-kernel_2.6.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-MACHINE = "a780"
-COMPATIBLE_MACHINE = "a780"
-require linux-ezx_2.6.16.13.bb
diff --git a/packages/linux/compulab-pxa270-2.6.20/.mtn2git_empty b/packages/linux/compulab-pxa270-2.6.20/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/.mtn2git_empty
diff --git a/packages/linux/compulab-pxa270-2.6.20/0001-gitignore.patch b/packages/linux/compulab-pxa270-2.6.20/0001-gitignore.patch
new file mode 100644
index 0000000000..a8003e09c9
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0001-gitignore.patch
@@ -0,0 +1,31 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri Mar 16 23:15:39 2007 -0400
+Subject: [PATCH] gitignore
+
+add igonore files
+
+---
+
+ .gitignore | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+base 62d0cfcb27cf755cebdc93ca95dabc83608007cd
+last 4db3152d3aeabcd82479f5b9c40ff79aa3ff620a
+diff --git a/.gitignore b/.gitignore
+index 060a71d41ad7ccc3214065a182e6f67568420071..2ead940e09fc0c193104928a7e085d9f62a57f5f 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -45,3 +45,9 @@ series
+
+ # cscope files
+ cscope.*
++
++arch/arm/boot/Image
++arch/arm/boot/compressed/piggy.gz
++arch/arm/boot/zImage
++include/asm-arm/arch
++include/asm-arm/mach-types.h
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/0002-cm-x270-base.patch b/packages/linux/compulab-pxa270-2.6.20/0002-cm-x270-base.patch
new file mode 100644
index 0000000000..4186bed0e3
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0002-cm-x270-base.patch
@@ -0,0 +1,2161 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri Mar 16 23:15:47 2007 -0400
+Subject: [PATCH] cm x270 base
+
+Refreshed patch cm-x270-base.
+(Base: 62d0cfcb27cf755cebdc93ca95dabc83608007cd)
+(Last: 71b86b9caafa8efec4cd20370cb016f0975bc6e6)
+
+---
+
+ arch/arm/boot/compressed/head-xscale.S | 5
+ arch/arm/configs/cm_x270_defconfig | 1312 ++++++++++++++++++++++++++++++++
+ arch/arm/mach-pxa/Kconfig | 20
+ arch/arm/mach-pxa/Makefile | 1
+ arch/arm/mach-pxa/cm-x270.c | 663 ++++++++++++++++
+ include/asm-arm/arch-pxa/cm-x270.h | 72 ++
+ 6 files changed, 2073 insertions(+), 0 deletions(-)
+ create mode 100644 arch/arm/configs/cm_x270_defconfig
+ create mode 100644 arch/arm/mach-pxa/cm-x270.c
+ create mode 100644 include/asm-arm/arch-pxa/cm-x270.h
+
+base 4db3152d3aeabcd82479f5b9c40ff79aa3ff620a
+last 32abeb7a135309651fabb41ebfab98c9f6b67dbf
+diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S
+index 73c5d9e0201c47fd48b6a79194e3cb0413d5147f..dc894592c9fbc3755e5ef47cddaeb47bc884de6a 100644
+--- a/arch/arm/boot/compressed/head-xscale.S
++++ b/arch/arm/boot/compressed/head-xscale.S
+@@ -53,3 +53,8 @@ __XScale_start:
+ str r1, [r0, #0x18]
+ #endif
+
++#if defined(CONFIG_MACH_ARMCORE)
++ mov r7, #(MACH_TYPE_ARMCORE & 0xFF00)
++ add r7, r7, #(MACH_TYPE_ARMCORE & 0xFF)
++#endif
++
+diff --git a/arch/arm/configs/cm_x270_defconfig b/arch/arm/configs/cm_x270_defconfig
+new file mode 100644
+index 0000000000000000000000000000000000000000..f87d617d3f0f92355a9c818d874c3a22492f45cc
+--- /dev/null
++++ b/arch/arm/configs/cm_x270_defconfig
+@@ -0,0 +1,1312 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.16
++# Tue Sep 26 10:07:36 2006
++#
++CONFIG_ARM=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ARCH_MTD_XIP=y
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION="-cm-x270"
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_UID16=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_EMBEDDED=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_CC_ALIGN_FUNCTIONS=0
++CONFIG_CC_ALIGN_LABELS=0
++CONFIG_CC_ALIGN_LOOPS=0
++CONFIG_CC_ALIGN_JUMPS=0
++CONFIG_SLAB=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++CONFIG_OBSOLETE_MODPARM=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++
++#
++# System Type
++#
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_IOP3XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_L7200 is not set
++CONFIG_ARCH_PXA=y
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_OMAP is not set
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_AT91RM9200 is not set
++
++#
++# Intel PXA2xx Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_MACH_MAINSTONE is not set
++CONFIG_MACH_ARMCORE=y
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_PXA_SHARPSL is not set
++CONFIG_ARMCORE_REV12=y
++# CONFIG_ARMCORE_REV11 is not set
++CONFIG_PXA27x=y
++CONFIG_IWMMXT=y
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_XSCALE=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5T=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_TLB_V4WBI=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++CONFIG_XSCALE_PMU=y
++CONFIG_DMABOUNCE=y
++
++#
++# Bus support
++#
++CONFIG_PCI=y
++CONFIG_PCI_HOST_ITE8152=y
++# CONFIG_PCI_LEGACY_PROC is not set
++# CONFIG_PCI_DEBUG is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++CONFIG_PCCARD=y
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=m
++# CONFIG_PCMCIA_LOAD_CIS is not set
++CONFIG_PCMCIA_IOCTL=y
++CONFIG_CARDBUS=y
++
++#
++# PC-card bridges
++#
++CONFIG_YENTA=m
++CONFIG_YENTA_O2=y
++CONFIG_YENTA_RICOH=y
++CONFIG_YENTA_TI=y
++CONFIG_YENTA_ENE_TUNE=y
++CONFIG_YENTA_TOSHIBA=y
++# CONFIG_PD6729 is not set
++# CONFIG_I82092 is not set
++CONFIG_PCMCIA_PXA2XX=m
++CONFIG_PCCARD_NONSTATIC=m
++
++#
++# Kernel Features
++#
++# CONFIG_PREEMPT is not set
++# CONFIG_NO_IDLE_HZ is not set
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++CONFIG_LEDS=y
++CONFIG_LEDS_TIMER=y
++CONFIG_LEDS_CPU=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# CONFIG_XIP_KERNEL is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++CONFIG_PM_LEGACY=y
++# CONFIG_PM_DEBUG is not set
++# CONFIG_APM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++# CONFIG_IPV6 is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++# CONFIG_IEEE80211_CRYPT_TKIP is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_SX8 is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=12000
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_ARMCORE_FLASH=y
++# CONFIG_ARMCORE_NOR is not set
++CONFIG_ARMCORE_NAND=y
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++CONFIG_IDE=m
++CONFIG_BLK_DEV_IDE=m
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=m
++# CONFIG_IDEDISK_MULTI_MODE is not set
++CONFIG_BLK_DEV_IDECS=m
++CONFIG_BLK_DEV_IDECD=m
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++CONFIG_BLK_DEV_IDESCSI=m
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++CONFIG_IDE_GENERIC=m
++# CONFIG_BLK_DEV_IDEPCI is not set
++# CONFIG_IDE_ARM is not set
++CONFIG_BLK_DEV_IDE_CM_X270=m
++# CONFIG_BLK_DEV_IDEDMA is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_BLK_DEV_HD is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++# CONFIG_SCSI_PROC_FS is not set
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI Transport Attributes
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
++# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_IPR is not set
++# CONFIG_SCSI_QLOGIC_FC is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_PCMCIA_AHA152X is not set
++# CONFIG_PCMCIA_FDOMAIN is not set
++# CONFIG_PCMCIA_NINJA_SCSI is not set
++# CONFIG_PCMCIA_QLOGIC is not set
++# CONFIG_PCMCIA_SYM53C500 is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_SPI is not set
++# CONFIG_FUSION_FC is not set
++# CONFIG_FUSION_SAS is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_CASSINI is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_SMC91X is not set
++CONFIG_DM9000=y
++CONFIG_DM9000_NOEPROM=y
++
++#
++# Tulip family network device support
++#
++# CONFIG_NET_TULIP is not set
++# CONFIG_HP100 is not set
++CONFIG_NET_PCI=y
++# CONFIG_PCNET32 is not set
++# CONFIG_AMD8111_ETH is not set
++# CONFIG_ADAPTEC_STARFIRE is not set
++# CONFIG_B44 is not set
++# CONFIG_FORCEDETH is not set
++# CONFIG_DGRS is not set
++# CONFIG_EEPRO100 is not set
++# CONFIG_E100 is not set
++# CONFIG_FEALNX is not set
++# CONFIG_NATSEMI is not set
++# CONFIG_NE2K_PCI is not set
++# CONFIG_8139CP is not set
++CONFIG_8139TOO=m
++# CONFIG_8139TOO_PIO is not set
++# CONFIG_8139TOO_TUNE_TWISTER is not set
++# CONFIG_8139TOO_8129 is not set
++# CONFIG_8139_OLD_RX_RESET is not set
++# CONFIG_SIS900 is not set
++# CONFIG_EPIC100 is not set
++# CONFIG_SUNDANCE is not set
++# CONFIG_TLAN is not set
++# CONFIG_VIA_RHINE is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SIS190 is not set
++# CONFIG_SKGE is not set
++# CONFIG_SKY2 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_VIA_VELOCITY is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_BNX2 is not set
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_CHELSIO_T1 is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++# CONFIG_PCMCIA_WAVELAN is not set
++# CONFIG_PCMCIA_NETWAVE is not set
++
++#
++# Wireless 802.11 Frequency Hopping cards support
++#
++# CONFIG_PCMCIA_RAYCS is not set
++
++#
++# Wireless 802.11b ISA/PCI cards support
++#
++# CONFIG_IPW2100 is not set
++# CONFIG_IPW2200 is not set
++# CONFIG_HERMES is not set
++# CONFIG_ATMEL is not set
++
++#
++# Wireless 802.11b Pcmcia/Cardbus cards support
++#
++# CONFIG_AIRO_CS is not set
++# CONFIG_PCMCIA_WL3501 is not set
++
++#
++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
++#
++# CONFIG_PRISM54 is not set
++# CONFIG_HOSTAP is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=m
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_PCMCIA_AXNET is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NET_FC is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_PSAUX=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_PCIPS2 is not set
++CONFIG_SERIO_LIBPS2=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++CONFIG_SERIAL_8250=y
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_CS is not set
++CONFIG_SERIAL_8250_NR_UARTS=4
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++# CONFIG_SERIAL_8250_EXTENDED is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_PXA=y
++CONFIG_SERIAL_PXA_CONSOLE=y
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++CONFIG_EMV3020_RTC=y
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia Capabilities Port drivers
++#
++CONFIG_UCB1400=m
++CONFIG_UCB1400_TS=m
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++CONFIG_FB=y
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++# CONFIG_FB_CIRRUS is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_ASILIANT is not set
++# CONFIG_FB_IMSTT is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_NVIDIA is not set
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_RADEON_OLD is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_SAVAGE is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_KYRO is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++CONFIG_FB_PXA=y
++# CONFIG_FB_PXA_PARAMETERS is not set
++CONFIG_FB_MBX=m
++# CONFIG_FB_VIRTUAL is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++
++#
++# Logo configuration
++#
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=m
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=m
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=m
++CONFIG_SND_PCM_OSS=m
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_AC97_CODEC=m
++CONFIG_SND_AC97_BUS=m
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# PCI devices
++#
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++
++#
++# ALSA ARM devices
++#
++CONFIG_SND_PXA2XX_PCM=m
++CONFIG_SND_PXA2XX_AC97=m
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++
++#
++# PCMCIA devices
++#
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_EHCI_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_UHCI_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++CONFIG_USB_HIDINPUT=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++# CONFIG_USB_HIDDEV is not set
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_ACECAD is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++# CONFIG_USB_MTOUCH is not set
++# CONFIG_USB_ITMTOUCH is not set
++# CONFIG_USB_EGALAX is not set
++# CONFIG_USB_YEALINK is not set
++# CONFIG_USB_XPAD is not set
++# CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB Multimedia devices
++#
++# CONFIG_USB_DABUSB is not set
++
++#
++# Video4Linux support is needed for USB Multimedia device support
++#
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_ZD1201 is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGETKIT is not set
++# CONFIG_USB_PHIDGETSERVO is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=m
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=m
++CONFIG_MMC_PXA=m
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_RELAYFS_FS is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++CONFIG_SMB_FS=y
++# CONFIG_SMB_NLS_DEFAULT is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_MAGIC_SYSRQ=y
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=17
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_WAITQ is not set
++CONFIG_DEBUG_ERRORS=y
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=m
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
+diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
+index 5c0a10041cd17c1fc7c9ae97a442d266b4dd8c05..0fece09f16ca71297f278d8c6306ae74d2f10c03 100644
+--- a/arch/arm/mach-pxa/Kconfig
++++ b/arch/arm/mach-pxa/Kconfig
+@@ -1,5 +1,8 @@
+ if ARCH_PXA
+
++config CM_X270
++ bool
++
+ menu "Intel PXA2xx Implementations"
+
+ choice
+@@ -18,6 +21,12 @@ config MACH_MAINSTONE
+ bool "Intel HCDDBBVA0 Development Platform"
+ select PXA27x
+
++config MACH_ARMCORE
++ bool "CompuLab CM-X270 modules"
++ select PXA27x
++ select IWMMXT
++ select CM_X270
++
+ config ARCH_PXA_IDP
+ bool "Accelent Xscale IDP"
+ select PXA25x
+@@ -71,6 +80,17 @@ endchoice
+
+ endif
+
++if MACH_ARMCORE
++choice
++ prompt "Select CM-X270 revision"
++ config ARMCORE_REV12
++ bool "CM-X270 revision 1.2"
++ config ARMCORE_REV11
++ bool "CM-X270 revision 1.1"
++endchoice
++
++endif
++
+ endmenu
+
+ config MACH_POODLE
+diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
+index 9093eb1c94ebdfae3a94611a1d586c493ad01d9a..116afca194431fb4b6e1b1c2e2eb6ce466259751 100644
+--- a/arch/arm/mach-pxa/Makefile
++++ b/arch/arm/mach-pxa/Makefile
+@@ -18,6 +18,7 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o sp
+ obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
+ obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o
+ obj-$(CONFIG_MACH_TOSA) += tosa.o
++obj-$(CONFIG_CM_X270) += cm-x270.o
+
+ # Support for blinky lights
+ led-y := leds.o
+diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
+new file mode 100644
+index 0000000000000000000000000000000000000000..00fbd81d819ef19ef032ab2ff1ef58dfc3b1270c
+--- /dev/null
++++ b/arch/arm/mach-pxa/cm-x270.c
+@@ -0,0 +1,663 @@
++/*
++ * linux/arch/arm/mach-pxa/cm-x270.c
++ *
++ * Copyright (C) 2006 CompuLab, Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/pm.h>
++#include <linux/fb.h>
++#include <linux/platform_device.h>
++#include <linux/sysdev.h>
++#include <linux/dm9000.h>
++#include <linux/serial_8250.h>
++
++#include <asm/types.h>
++#include <asm/setup.h>
++#include <asm/memory.h>
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++#include <asm/delay.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/pxa-regs.h>
++//#include <asm/arch/irq.h>
++#include <asm/arch/pxafb.h>
++//#include <asm/arch/marathonfb.h>
++#include <asm/arch/ohci.h>
++#include <asm/arch/mmc.h>
++//#include <asm/arch/pxafbsetup.h>
++#include <asm/arch/bitfield.h>
++#include <asm/arch/cm-x270.h>
++
++//#include <asm/hardware/it8152.h>
++
++#include "generic.h"
++
++#define RTC_PHYS_BASE (PXA_CS1_PHYS + (5 << 22))
++#define DM9000_PHYS_BASE (PXA_CS1_PHYS + (6 << 22))
++
++static struct resource cmx270_dm9k_resource[] = {
++ [0] = {
++ .start = DM9000_PHYS_BASE,
++ .end = DM9000_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = DM9000_PHYS_BASE + 8,
++ .end = DM9000_PHYS_BASE + 8 + 500,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = CMX270_ETHIRQ,
++ .end = CMX270_ETHIRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++/* for the moment we limit ourselves to 32bit IO until some
++ * better IO routines can be written and tested
++ */
++static struct dm9000_plat_data cmx270_dm9k_platdata = {
++ .flags = DM9000_PLATF_32BITONLY,
++};
++
++/* Ethernet device */
++static struct platform_device cmx270_device_dm9k = {
++ .name = "dm9000",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(cmx270_dm9k_resource),
++ .resource = cmx270_dm9k_resource,
++ .dev = {
++ .platform_data = &cmx270_dm9k_platdata,
++ }
++};
++
++#if 0
++/* audio device */
++static struct platform_device cmx270_audio_device = {
++ .name = "pxa2xx-ac97",
++ .id = -1,
++};
++
++/* touchscreen controller */
++static struct platform_device cmx270_ts_device = {
++ .name = "ucb1x00",
++ .id = -1,
++};
++
++/* RTC */
++static struct resource cmx270_v3020_resource[] = {
++ [0] = {
++ .start = RTC_PHYS_BASE,
++ .end = RTC_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device cmx270_rtc_device = {
++ .name = "emv3020-rtc",
++ .num_resources = ARRAY_SIZE(cmx270_v3020_resource),
++ .resource = cmx270_v3020_resource,
++ .id = -1,
++};
++#endif
++
++
++/* platform devices */
++static struct platform_device *platform_devices[] __initdata = {
++ &cmx270_device_dm9k,
++ //&cmx270_audio_device,
++ //&cmx270_ts_device,
++ //&cmx270_rtc_device,
++ //&cmx270_2700G,
++};
++
++
++
++
++#define CMX270_FLASH_VIRT (CMX270_IDE104_VIRT + PXA_CS_SIZE - (8<<20))
++/* Map PCI companion and IDE/General Purpose CS statically */
++static struct map_desc cmx270_io_desc[] __initdata = {
++ [0] = { /* IDE/general purpose space */
++ .virtual = CMX270_IDE104_VIRT,
++ .pfn = __phys_to_pfn(CMX270_IDE104_PHYS),
++ .length = PXA_CS_SIZE - (8<<20),
++ .type = MT_DEVICE
++ },
++ [1] = { /* NOR flash */
++ .virtual = CMX270_FLASH_VIRT,
++ .pfn = __phys_to_pfn(PXA_CS0_PHYS),
++ .length = (8<<20), /* up to 8 MByte flash */
++ .type = MT_DEVICE
++ },
++};
++
++static struct pxafb_mode_info sharp_vga_tft_mode = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 60,
++ .vsync_len = 2,
++ .left_margin = 72,
++ .upper_margin = 32,
++ .right_margin = 72,
++ .lower_margin = 10,
++ .sync = 0,
++};
++
++
++static struct pxafb_mach_info cmx270_pxafb_info = {
++ .num_modes = 1,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff)),
++ .modes = &sharp_vga_tft_mode
++};
++
++#if 0
++/*********************** Display definitions ****************************/
++static int mtype=MTYPE_CRT640x480;
++static int mbpp=-1;
++
++struct cmx270_display_info {
++ struct pxafb_mach_info fb_info;
++ char *display_name;
++};
++
++static struct __initdata cmx270_display_info cmx270_displays[] = {
++ [ MTYPE_STN320x240 ] = {
++ .fb_info = {
++ .pixclock = 76923,
++ .bpp = 8,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 3,
++ .vsync_len = 2,
++ .left_margin = 3,
++ .upper_margin = 0,
++ .right_margin = 3,
++ .lower_margin = 0,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x03) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "STN 320x240",
++ },
++ [ MTYPE_TFT640x480 ] = {
++ .fb_info = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 60,
++ .vsync_len = 2,
++ .left_margin = 70,
++ .upper_margin = 10,
++ .right_margin = 70,
++ .lower_margin = 5,
++ .sync = 0,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "TFT 640x480",
++ },
++ [ MTYPE_CRT640x480 ] = {
++ .fb_info = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 81,
++ .upper_margin = 33,
++ .right_margin = 16,
++ .lower_margin = 10,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "CRT 640x480",
++ },
++ [ MTYPE_CRT800x600 ] = {
++ .fb_info = {
++ .pixclock = 28846,
++ .bpp = 8,
++ .xres = 800,
++ .yres = 600,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 26,
++ .upper_margin = 21,
++ .right_margin = 26,
++ .lower_margin = 11,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "CRT 800x600",
++ },
++ [ MTYPE_CRT1024x768 ] = {
++ .fb_info = {
++ .pixclock = 0,
++ .xres = 0,
++ .yres = 0,
++ },
++ .display_name = "CRT 1024x768",
++ },
++ [ MTYPE_USER_DEFINED ] = {
++ .fb_info = {
++ .pixclock = LCD_PIXCLOCK,
++ .bpp = LCD_BPP,
++ .xres = LCD_XRES,
++ .yres = LCD_YRES,
++ .hsync_len = LCD_HORIZONTAL_SYNC_PULSE_WIDTH,
++ .vsync_len = LCD_VERTICAL_SYNC_PULSE_WIDTH,
++ .left_margin = LCD_BEGIN_OF_LINE_WAIT_COUNT,
++ .upper_margin = LCD_BEGIN_FRAME_WAIT_COUNT,
++ .right_margin = LCD_END_OF_LINE_WAIT_COUNT,
++ .lower_margin = LCD_END_OF_FRAME_WAIT_COUNT,
++ .sync = LCD_SYNC,
++ .lccr0 = LCD_LCCR0,
++ .lccr3 = LCD_LCCR3,
++ .cmap_greyscale = CMAP_GREYSCALE,
++ .cmap_inverse = CMAP_INVERSE,
++ .cmap_static = CMAP_STATIC,
++ },
++ .display_name = LCD_NAME,
++ },
++ [ MTYPE_TFT320x240 ] = {
++ .fb_info = {
++ .pixclock = 134615,
++ .bpp = 16,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 63,
++ .vsync_len = 7,
++ .left_margin = 75,
++ .upper_margin = 0,
++ .right_margin = 15,
++ .lower_margin = 15,
++ .sync = 0,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x06) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "TFT 320x240",
++ },
++ [ MTYPE_STN640x480 ] = {
++ .fb_info = {
++ .pixclock = 57692,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 4,
++ .vsync_len = 2,
++ .left_margin = 10,
++ .upper_margin = 5,
++ .right_margin = 10,
++ .lower_margin = 5,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "STN 640x480",
++ },
++};
++
++static int __init monitor_params(char *str)
++{
++ mtype = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++__setup("monitor=", monitor_params);
++
++static int __init fb_bpp(char *str)
++{
++ mbpp = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++__setup("bpp=", fb_bpp);
++#endif
++
++/* PXA27x OHCI controller setup */
++static int cmx270_ohci_init(struct device *dev)
++{
++ /* Set the Power Control Polarity Low */
++ UHCHR = (UHCHR | UHCHR_PCPL) &
++ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE);
++
++ return 0;
++}
++
++static struct pxaohci_platform_data cmx270_ohci_platform_data = {
++ .port_mode = PMM_PERPORT_MODE,
++ .init = cmx270_ohci_init,
++};
++
++
++static int cmx270_mci_init(struct device *dev, irq_handler_t mstone_detect_int, void *data)
++{
++ int err;
++
++ /*
++ * setup GPIO for PXA27x MMC controller
++ */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ /* SB-X270 uses GPIO105 as SD power enable */
++ pxa_gpio_mode(105 | GPIO_OUT);
++
++ /* card detect IRQ on GPIO 83 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_MMC_IRQ));
++ set_irq_type(CMX270_MMC_IRQ, IRQT_FALLING);
++
++ err = request_irq(CMX270_MMC_IRQ, mstone_detect_int, IRQF_DISABLED,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "cmx270_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
++ return -1;
++ }
++
++ return 0;
++}
++
++static void cmx270_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask) {
++ printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
++ GPCR(105) = GPIO_bit(105);
++ } else {
++ GPSR(105) = GPIO_bit(105);
++ printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
++ }
++}
++
++static void cmx270_mci_exit(struct device *dev, void *data)
++{
++ free_irq(CMX270_MMC_IRQ, data);
++}
++
++static struct pxamci_platform_data cmx270_mci_platform_data = {
++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
++ .init = cmx270_mci_init,
++ .setpower = cmx270_mci_setpower,
++ .exit = cmx270_mci_exit,
++};
++
++
++#ifdef CONFIG_PM
++/* timeout for RTC wakeup */
++unsigned int cmx270_suspend_timeout;
++
++static ssize_t timeout_show(struct subsystem * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s,"%d seconds\n", cmx270_suspend_timeout);
++ return (s - buf);
++}
++
++static ssize_t timeout_store(struct subsystem * subsys, const char * buf, size_t n)
++{
++ char *endp = 0;
++ int timeout;
++
++ timeout = simple_strtoul(buf, &endp, 10);
++ if ( *endp && *endp != '\n')
++ return -EINVAL;
++
++ cmx270_suspend_timeout = timeout;
++ return n;
++}
++
++static struct subsys_attribute timeout_attr = {
++ .attr = {
++ .name = __stringify(timeout),
++ .mode = 0644,
++ },
++ .show = timeout_show,
++ .store = timeout_store,
++};
++
++static struct attribute * g[] = {
++ &timeout_attr.attr,
++ NULL,
++};
++
++static struct attribute_group attr_group = {
++ .attrs = g,
++};
++
++extern struct subsystem power_subsys;
++static unsigned long sleep_save_ite[10];
++static unsigned long sleep_save_msc[10];
++
++static int cmx270_suspend(struct sys_device *dev, pm_message_t state)
++{
++ /* save MSC registers */
++ sleep_save_msc[0] = MSC0;
++ sleep_save_msc[1] = MSC1;
++ sleep_save_msc[2] = MSC2;
++
++ /* setup power saving mode registers */
++ PCFR = 0x0;
++ PSLR = 0xff400000;
++ PMCR = 0x00000005;
++ PWER = 0x80000000;
++ PFER = 0x00000000;
++ PRER = 0x00000000;
++ PGSR0 = 0xC0018800;
++ PGSR1 = 0x004F0002;
++ PGSR2 = 0x6021C000;
++ PGSR3 = 0x00020000;
++
++ if ( cmx270_suspend_timeout ) {
++ RTAR = RCNR + cmx270_suspend_timeout;
++ cmx270_suspend_timeout = 0;
++ }
++
++ return 0;
++}
++
++static int cmx270_resume(struct sys_device *dev)
++{
++ /* restore MSC registers */
++ MSC0 = sleep_save_msc[0];
++ MSC1 = sleep_save_msc[1];
++ MSC2 = sleep_save_msc[2];
++
++ return 0;
++}
++
++static struct sysdev_class cmx270_pm_sysclass = {
++ set_kset_name("pm"),
++ .resume = cmx270_resume,
++ .suspend = cmx270_suspend,
++};
++
++static struct sys_device cmx270_pm_device = {
++ .cls = &cmx270_pm_sysclass,
++};
++
++static int __init cmx270_pm_init(void)
++{
++ int error;
++ error = sysdev_class_register(&cmx270_pm_sysclass);
++ if (error == 0)
++ error = sysdev_register(&cmx270_pm_device);
++
++ error = sysfs_create_group(&power_subsys.kset.kobj,&attr_group);
++ return error;
++}
++#else
++static int __init cmx270_pm_init(void) { return 0; }
++#endif
++
++/* SA1111 compatibiliy 8 bit read register needed for proper function
++ of ITE8152 UART */
++#define MEMC_SA1111 __REG(0x48000064)
++
++static void __init cmx270_init(void)
++{
++ /* set display timings for VGA 640x480 by default */
++ //struct cmx270_display_info *tfbi = &cmx270_displays[2];
++
++ MEMC_SA1111 = 0x3c;
++
++ cmx270_pm_init();
++
++#if 0
++
++ if ( mtype >= 0 && mtype < ARRAY_SIZE(cmx270_displays) )
++
++ /* use default instead of unsupported displays */
++ if ( tfbi->fb_info.pixclock == 0 &&
++ tfbi->fb_info.xres == 0 &&
++ tfbi->fb_info.yres == 0 ) {
++ printk(KERN_WARNING "CM-X270 does not support %s display\n", cmx270_displays[mtype].display_name);
++ tfbi = &cmx270_displays[2];
++ }
++
++ /* setup color depth */
++ if( mtype == MTYPE_USER_DEFINED ) {
++ mbpp = tfbi->fb_info.bpp;
++ }
++ if( mbpp > 0 ) {
++ if( (mbpp!=1) && (mbpp!=2) && (mbpp!=4) &&
++ (mbpp!=8) && (mbpp!=16)) {
++ printk(KERN_WARNING "Illegal BPP value "
++ "supplied, leaving default\n");
++ mbpp = 8;
++ }
++ }
++ else mbpp = 8;
++ tfbi->fb_info.bpp = mbpp;
++
++ printk(KERN_INFO "Running a %s display with %d bits per pixel\n",
++ tfbi->display_name, tfbi->fb_info.bpp);
++ set_pxa_fb_info(&tfbi->fb_info);
++#endif
++
++ set_pxa_fb_info(&cmx270_pxafb_info);
++
++ /* register CM-X270 platform devices */
++ platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
++
++ /* set MCI and OHCI platform parameters */
++ pxa_set_mci_info(&cmx270_mci_platform_data);
++ pxa_set_ohci_info(&cmx270_ohci_platform_data);
++
++ /* This enables the STUART */
++ pxa_gpio_mode(GPIO46_STRXD_MD);
++ pxa_gpio_mode(GPIO47_STTXD_MD);
++
++ /* This enables the BTUART */
++ pxa_gpio_mode(GPIO42_BTRXD_MD);
++ pxa_gpio_mode(GPIO43_BTTXD_MD);
++ pxa_gpio_mode(GPIO44_BTCTS_MD);
++ pxa_gpio_mode(GPIO45_BTRTS_MD);
++}
++
++int machine_is_cmx270l(void)
++{
++ int is_l = 0;
++ volatile unsigned char *flash =
++ (volatile unsigned char *)(CMX270_FLASH_VIRT + 0x3ffe8UL);
++ char rev[10];
++ int i;
++
++ memset(rev, 0, 10);
++ for ( i = 0; i < 8; i++ )
++ rev[i] = flash[i];
++ if ( (rev[6] - '0') > 1 )
++ is_l = 1;
++
++ printk(KERN_DEBUG "%s: revision read: %s, is_l = %d\n",
++ __FUNCTION__, rev, is_l);
++
++ return is_l;
++}
++
++static void __init cmx270_init_irq(void)
++{
++ pxa_init_irq();
++
++ /* LED and NAND GPIOs should not be probed for IRQ */
++ set_irq_flags(IRQ_GPIO(11), 0);
++ set_irq_flags(IRQ_GPIO(89), 0);
++ set_irq_flags(IRQ_GPIO(93), 0);
++ set_irq_flags(IRQ_GPIO(94), 0);
++
++ /* Setup interrupt for dm9000 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_ETHIRQ));
++ set_irq_type(CMX270_ETHIRQ, IRQT_RISING);
++
++}
++
++static void __init cmx270_map_io(void)
++{
++ pxa_map_io();
++ iotable_init(cmx270_io_desc, ARRAY_SIZE(cmx270_io_desc));
++}
++
++
++MACHINE_START(ARMCORE, "Compulab CM-x270")
++ .boot_params = 0xa0000100,
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .map_io = cmx270_map_io,
++ .init_irq = cmx270_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = cmx270_init,
++MACHINE_END
++
+diff --git a/include/asm-arm/arch-pxa/cm-x270.h b/include/asm-arm/arch-pxa/cm-x270.h
+new file mode 100644
+index 0000000000000000000000000000000000000000..36f9917d55168f5498617fee7ed1b19bf9d3051b
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/cm-x270.h
+@@ -0,0 +1,72 @@
++/*
++ * linux/include/asm/arch-pxa/armcore.h
++ *
++ * Compulab Ltd., 2003
++ *
++ * ARMCore registers
++ */
++
++//#include <linux/config.h>
++
++#define CMX270_CS1_PHYS (PXA_CS1_PHYS)
++#define MARATHON_PHYS (PXA_CS2_PHYS)
++#define CMX270_IDE104_PHYS (PXA_CS3_PHYS)
++#define CMX270_IT8152_PHYS (PXA_CS4_PHYS)
++
++#define PXA_CS_SIZE (64*1024*1024)
++
++/* Virtual map */
++
++#define CMX270_VIRT_BASE (0xe8000000)
++
++#define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
++#define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + PXA_CS_SIZE)
++
++
++/* GPIO related definitions */
++#define GPIO_IT8152_IRQ (22)
++#define GPIO_RED_LED (93)
++#define GPIO_GREEN_LED (94)
++
++
++#define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ)
++#define PME_IRQ IRQ_GPIO(0)
++#define CMX270_IDE_IRQ IRQ_GPIO(100)
++#define CMX270_GPIRQ1 IRQ_GPIO(101)
++#define CMX270_TOUCHIRQ IRQ_GPIO(96)
++#define CMX270_ETHIRQ IRQ_GPIO(10)
++#define CMX270_GFXIRQ IRQ_GPIO(95)
++#define CMX270_NANDIRQ IRQ_GPIO(89)
++#define CMX270_MMC_IRQ IRQ_GPIO(83)
++
++/* LED macros */
++#define CMX270_RED_ON() GPCR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_RED_OFF() GPSR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_GREEN_ON() GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++#define CMX270_GREEN_OFF() GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++
++/* PCMCIA related definitions */
++#define PCC_DETECT(x) (GPLR(84 - (x)) & GPIO_bit(84 - (x)))
++#define PCC_READY(x) (GPLR(82 - (x)) & GPIO_bit(81 - (x)))
++
++#define PCMCIA_S0_CD_VALID IRQ_GPIO(84)
++#define PCMCIA_S0_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S1_CD_VALID IRQ_GPIO(83)
++#define PCMCIA_S1_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S0_RDYINT IRQ_GPIO(82)
++#define PCMCIA_S1_RDYINT IRQ_GPIO(81)
++
++#define PCMCIA_RESET_GPIO 53
++
++
++
++
++
++
++
++
++
++
++
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/0003-ramdisk_load.patch b/packages/linux/compulab-pxa270-2.6.20/0003-ramdisk_load.patch
new file mode 100644
index 0000000000..b96ae410f5
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0003-ramdisk_load.patch
@@ -0,0 +1,38 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri Mar 16 23:23:10 2007 -0400
+Subject: [PATCH] ramdisk_load
+
+initramfs loading fix
+
+---
+
+ init/initramfs.c | 10 ++++++++++
+ 1 files changed, 10 insertions(+), 0 deletions(-)
+
+base 32abeb7a135309651fabb41ebfab98c9f6b67dbf
+last a34beb5936e5819d8b2d51b153434825700463ef
+diff --git a/init/initramfs.c b/init/initramfs.c
+index 4fa0f7977de1a16db501d91c3c9b062cb7898c2d..545d1cd9dfffeb88835cc2f219db51497c963449 100644
+--- a/init/initramfs.c
++++ b/init/initramfs.c
+@@ -535,6 +535,16 @@ static int __init populate_rootfs(void)
+ #ifdef CONFIG_BLK_DEV_INITRD
+ if (initrd_start) {
+ #ifdef CONFIG_BLK_DEV_RAM
++
++ /* hack to make initramfs work because the
++ * compulab BL does not zero out the
++ * initrd memory
++ */
++ int initrd_size = *(int *)(0xef9c0000);
++ initrd_end = initrd_start + initrd_size;
++ //printk("CLIFF: initrd_start = 0x%x\n", initrd_start);
++ //printk("CLIFF: initrd_end = 0x%x\n", initrd_end);
++
+ int fd;
+ printk(KERN_INFO "checking if image is initramfs...");
+ err = unpack_to_rootfs((char *)initrd_start,
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch b/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch
new file mode 100644
index 0000000000..f8e05c3c22
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0004-nand-driver.patch
@@ -0,0 +1,324 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Tue Apr 3 11:38:59 2007 -0400
+Subject: [PATCH] nand driver
+
+2.6.20 NAND flash driver for cm-x270
+
+---
+
+ drivers/mtd/nand/Kconfig | 4 +
+ drivers/mtd/nand/Makefile | 1
+ drivers/mtd/nand/cmx270-nand.c | 271 ++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 276 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mtd/nand/cmx270-nand.c
+
+base a34beb5936e5819d8b2d51b153434825700463ef
+last deaa2960bd8fb1f706a935cd7a87321977e6f568
+diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
+index 358f55a82dbe4ebb73b1b0ee460063a6145e3f0e..c80272bcc69b6e13ab0c4403e4635a8a4076dc6c 100644
+--- a/drivers/mtd/nand/Kconfig
++++ b/drivers/mtd/nand/Kconfig
+@@ -247,6 +247,10 @@ config MTD_NAND_AT91
+ help
+ Enables support for NAND Flash / Smart Media Card interface
+ on Atmel AT91 processors.
++
++config MTD_NAND_CM_X270
++ tristate "Support for NAND Flash on CompuLab CM-X270"
++ depends on MTD_NAND && ARCH_PXA
+
+ config MTD_NAND_NANDSIM
+ tristate "Support for NAND Flash Simulator"
+diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
+index f7a53f0b70177451680402a2c2cce4c98991cd6e..d5abbca6d5ae18e287af0b02075f99838d35dc85 100644
+--- a/drivers/mtd/nand/Makefile
++++ b/drivers/mtd/nand/Makefile
+@@ -24,6 +24,7 @@ obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o
+ obj-$(CONFIG_MTD_NAND_CS553X) += cs553x_nand.o
+ obj-$(CONFIG_MTD_NAND_NDFC) += ndfc.o
+ obj-$(CONFIG_MTD_NAND_AT91) += at91_nand.o
++obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270-nand.o
+
+ nand-objs := nand_base.o nand_bbt.o
+ cafe_nand-objs := cafe.o cafe_ecc.o
+diff --git a/drivers/mtd/nand/cmx270-nand.c b/drivers/mtd/nand/cmx270-nand.c
+new file mode 100644
+index 0000000000000000000000000000000000000000..1cd531e610dee846e246b4b1d56bb4119939682b
+--- /dev/null
++++ b/drivers/mtd/nand/cmx270-nand.c
+@@ -0,0 +1,271 @@
++/*
++ * drivers/mtd/nand/cmx270-nand.c
++ *
++ * Copyright (C) 2005 Compulab, Ltd. (mike@compulab.co.il)
++ * 2007 BEC Systems, LLC (cbrake@bec-systems.com)
++ * - updated to 2.6.20 NAND API
++ *
++ * Derived from drivers/mtd/nand/h1910.c
++ * Copyright (C) 2002 Marius Gröger (mag@sysgo.de)
++ * Copyright (c) 2001 Thomas Gleixner (gleixner@autronix.de)
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Overview:
++ * This is a device driver for the NAND flash device found on the
++ * CM-X270 board.
++ */
++
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#define GPIO_NAND_CS (11)
++#define GPIO_NAND_RB (89)
++
++#define DRAIN_WB() \
++ do { \
++ unsigned char dummy; \
++ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0"); \
++ dummy=*((volatile unsigned char*)UNCACHED_ADDR); \
++ } while(0);
++
++/*
++ * MTD structure for CM-X270 board
++ */
++static struct mtd_info *cmx270_nand_mtd = NULL;
++
++/*
++ * Module stuff
++ */
++
++#ifdef CONFIG_MTD_PARTITIONS
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info[] = {
++ {
++ .name = "app",
++ .offset = 0,
++ .size = 64*1024*1024
++ },
++ {
++ .name = "data",
++ .offset = MTDPART_OFS_APPEND,
++ .size = MTDPART_SIZ_FULL
++ }
++};
++
++#define NUM_PARTITIONS ARRAY_SIZE(partition_info)
++
++#endif
++
++
++static u_char cmx270_read_byte(struct mtd_info *mtd)
++{
++ struct nand_chip *this = mtd->priv;
++ return (readl(this->IO_ADDR_R) >> 16);
++}
++
++static void cmx270_write_byte(struct mtd_info *mtd, u_char byte)
++{
++ struct nand_chip *this = mtd->priv;
++ writel((byte << 16), this->IO_ADDR_W);
++}
++
++static void cmx270_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ writel((*buf++ << 16), this->IO_ADDR_W);
++ }
++}
++
++static void cmx270_read_buf(struct mtd_info *mtd, u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ *buf++ = readl(this->IO_ADDR_R) >> 16;
++ }
++}
++
++static int cmx270_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ if ( buf[i] != (u_char)(readl(this->IO_ADDR_R) >> 16) )
++ return -EFAULT;
++ }
++
++ return 0;
++}
++
++static inline void nand_cs_on(void)
++{
++ GPCR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS);
++}
++
++static void nand_cs_off(void)
++{
++ DRAIN_WB();
++
++ GPSR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS);
++}
++
++/*
++ * hardware specific access to control-lines
++ *
++ * NAND_NCE: bit 0 - GPIO_NAND_CS
++ * NAND_CLE: bit 1 - address bit 2
++ * NAND_ALE: bit 2 - address bit 3
++ */
++static void cmx270_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
++{
++ struct nand_chip* chip = mtd->priv;
++
++ DRAIN_WB();
++
++ if (ctrl & NAND_CTRL_CHANGE) {
++ if (ctrl & NAND_NCE) nand_cs_on();
++ else nand_cs_off();
++ }
++
++
++ if (cmd != NAND_CMD_NONE) {
++ writel(cmd << 16, (unsigned int)(chip->IO_ADDR_W) | ((ctrl & 0x6) << 1 ));
++ }
++
++ DRAIN_WB();
++}
++
++/*
++ * read device ready pin
++ */
++static int cmx270_device_ready(struct mtd_info *mtd)
++{
++ DRAIN_WB();
++ return ( GPLR(GPIO_NAND_RB) & GPIO_bit(GPIO_NAND_RB) );
++}
++
++/*
++ * Main initialization routine
++ */
++static int __init cmx270_init (void)
++{
++ struct nand_chip *this;
++ const char *part_type = 0;
++ int mtd_parts_nb = 0;
++ struct mtd_partition *mtd_parts = 0;
++ static unsigned int nandaddr = 0;
++
++
++ /* Allocate memory for MTD device structure and private data */
++ cmx270_nand_mtd = kmalloc(sizeof(struct mtd_info) +
++ sizeof(struct nand_chip),
++ GFP_KERNEL);
++ if (!cmx270_nand_mtd) {
++ printk("Unable to allocate CM-X270 NAND MTD device structure.\n");
++ return -ENOMEM;
++ }
++
++ nandaddr = (volatile unsigned int)ioremap(PXA_CS1_PHYS, 100);
++
++ /* Get pointer to private data */
++ this = (struct nand_chip *) (&cmx270_nand_mtd[1]);
++
++ /* Initialize structures */
++ memset((char *) cmx270_nand_mtd, 0, sizeof(struct mtd_info));
++ memset((char *) this, 0, sizeof(struct nand_chip));
++
++ /* Link the private data with the MTD structure */
++ cmx270_nand_mtd->priv = this;
++ cmx270_nand_mtd->owner = THIS_MODULE;
++
++ /* insert callbacks */
++ this->IO_ADDR_R = (void __iomem *)nandaddr;
++ this->IO_ADDR_W = (void __iomem *)nandaddr;
++ this->cmd_ctrl = cmx270_hwcontrol;
++/* this->dev_ready = cmx270_device_ready; /\* unknown whether that was correct or not so we will just do it like this *\/ */
++
++ /* 15 us command delay time */
++ this->chip_delay = 50;
++ this->ecc.mode = NAND_ECC_SOFT;
++
++ /* read/write functions */
++ this->read_byte = cmx270_read_byte;
++ //this->write_byte = cmx270_write_byte;
++ this->read_buf = cmx270_read_buf;
++ this->write_buf = cmx270_write_buf;
++ this->verify_buf = cmx270_verify_buf;
++
++ /* Scan to find existence of the device */
++ if (nand_scan (cmx270_nand_mtd, 1)) {
++ printk(KERN_NOTICE "No NAND device - returning -ENXIO\n");
++ iounmap((void*)nandaddr);
++ kfree (cmx270_nand_mtd);
++ return -ENXIO;
++ }
++
++//#ifdef CONFIG_MTD_CMDLINE_PARTS
++#if 0
++ mtd_parts_nb = parse_cmdline_partitions(cmx270_nand_mtd, &mtd_parts,
++ "cmx270");
++ if (mtd_parts_nb > 0)
++ part_type = "command line";
++ else
++ mtd_parts_nb = 0;
++#endif
++ if (mtd_parts_nb == 0)
++ {
++ mtd_parts = partition_info;
++ mtd_parts_nb = NUM_PARTITIONS;
++ part_type = "static";
++ }
++
++ /* Register the partitions */
++ printk(KERN_NOTICE "Using %s partition definition\n", part_type);
++ add_mtd_partitions(cmx270_nand_mtd, mtd_parts, mtd_parts_nb);
++
++ /* Return happy */
++ return 0;
++}
++module_init(cmx270_init);
++
++/*
++ * Clean up routine
++ */
++static void __exit cmx270_cleanup (void)
++{
++ struct nand_chip *this;
++
++ this = (struct nand_chip *) (&cmx270_nand_mtd[1]);
++ iounmap(this->IO_ADDR_R);
++
++ /* Release resources, unregister device */
++ nand_release (cmx270_nand_mtd);
++
++ /* Free the MTD device structure */
++ kfree (cmx270_nand_mtd);
++}
++module_exit(cmx270_cleanup);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Mike Rapoport <mike at compulab dot co dot il>");
++MODULE_DESCRIPTION("NAND flash driver for Compulab CM-X270 Core");
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/0005-mmcsd_large_cards-r0.patch b/packages/linux/compulab-pxa270-2.6.20/0005-mmcsd_large_cards-r0.patch
new file mode 100644
index 0000000000..87c46d7144
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0005-mmcsd_large_cards-r0.patch
@@ -0,0 +1,41 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Tue Apr 3 22:16:15 2007 -0400
+Subject: [PATCH] mmcsd_large_cards r0
+
+large card patch
+
+---
+
+ drivers/mmc/mmc_block.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+base deaa2960bd8fb1f706a935cd7a87321977e6f568
+last b6144d28fde6225f49d1d56e49b333b7ff11d8dd
+diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
+index 87713572293f0d3044e077e1b9944617dc14ce1f..8ebf6c6d672236ee23081769aebd7aaffea70d1a 100644
+--- a/drivers/mmc/mmc_block.c
++++ b/drivers/mmc/mmc_block.c
+@@ -406,6 +406,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+ {
+ struct mmc_blk_data *md;
+ int devidx, ret;
++ unsigned long cap;
+
+ devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
+ if (devidx >= MMC_NUM_MINORS)
+@@ -471,6 +472,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+
+ sprintf(md->disk->disk_name, "mmcblk%d", devidx);
+
++ if (card->csd.read_blkbits > 9)
++ md->block_bits = 9;
++ else
++ md->block_bits = card->csd.read_blkbits;
++
+ blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits);
+
+ /*
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/0006-mmcsd_no_scr_check-r0.patch b/packages/linux/compulab-pxa270-2.6.20/0006-mmcsd_no_scr_check-r0.patch
new file mode 100644
index 0000000000..c1cbcec8f0
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/0006-mmcsd_no_scr_check-r0.patch
@@ -0,0 +1,35 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Tue Apr 3 22:17:25 2007 -0400
+Subject: [PATCH] mmcsd_no_scr_check r0
+
+mmc_no_sd check
+
+---
+
+ drivers/mmc/mmc.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+base b6144d28fde6225f49d1d56e49b333b7ff11d8dd
+last 8139d6c8b46a7a041094753eced2d46e006d93ab
+diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
+index 6f2a282e2b9759c0511cf5501a0bd4e9bd501e3f..b0c830c65a27f5579a2d4f67345e4d9bd1f0fe24 100644
+--- a/drivers/mmc/mmc.c
++++ b/drivers/mmc/mmc.c
+@@ -670,9 +670,11 @@ static void mmc_decode_scr(struct mmc_card *card)
+
+ scr_struct = UNSTUFF_BITS(resp, 60, 4);
+ if (scr_struct != 0) {
+- printk("%s: unrecognised SCR structure version %d\n",
++ printk("%s: Warning - unrecognised SCR structure version %d\n",
+ mmc_hostname(card->host), scr_struct);
+- mmc_card_set_bad(card);
++ //mmc_card_set_bad(card);
++ scr->bus_widths = 0;
++ scr->sda_vsn = 0;
+ return;
+ }
+
+--
+1.4.4.4
+
diff --git a/packages/linux/compulab-pxa270-2.6.20/defconfig b/packages/linux/compulab-pxa270-2.6.20/defconfig
new file mode 100644
index 0000000000..d7a62f274e
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.20/defconfig
@@ -0,0 +1,1188 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Tue Apr 3 23:39:41 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-cm-x270"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_CM_X270=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+CONFIG_MACH_ARMCORE=y
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_ARMCORE_REV12=y
+# CONFIG_ARMCORE_REV11 is not set
+CONFIG_SVS_POWER=y
+CONFIG_PXA27x=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PROC_GPIO=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS1,38400 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root)"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+CONFIG_MTD_NAND_CM_X270=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+CONFIG_DM9000=y
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_PXA=m
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty b/packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/.mtn2git_empty
diff --git a/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch b/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch
new file mode 100644
index 0000000000..9a635c5cbc
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0001-cm-x270-base2.patch
@@ -0,0 +1,2850 @@
+From 0db989f536f29c343bb4e42dc0b34d892d86de60 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 18:55:59 -0400
+Subject: [PATCH] cm-x270-base2
+
+---
+ arch/arm/Kconfig | 8 +-
+ arch/arm/configs/cm_x270_defconfig | 1567 +++++++++++++++++++++++++++++++++++
+ arch/arm/mach-pxa/Kconfig | 5 +
+ arch/arm/mach-pxa/Makefile | 7 +
+ arch/arm/mach-pxa/cm-x270.c | 821 ++++++++++++++++++
+ drivers/leds/Kconfig | 6 +
+ drivers/leds/Makefile | 1 +
+ drivers/leds/leds-cm-x270.c | 126 +++
+ drivers/net/Kconfig | 8 +
+ drivers/net/dm9000.c | 6 +
+ include/asm-arm/arch-pxa/cm-x270.h | 71 ++
+ include/asm-arm/arch-pxa/hardware.h | 11 +
+ include/asm-arm/arch-pxa/irqs.h | 20 +
+ include/asm-arm/memory.h | 10 +
+ 14 files changed, 2666 insertions(+), 1 deletions(-)
+ create mode 100644 arch/arm/configs/cm_x270_defconfig
+ create mode 100644 arch/arm/mach-pxa/cm-x270.c
+ create mode 100644 drivers/leds/leds-cm-x270.c
+ create mode 100644 include/asm-arm/arch-pxa/cm-x270.h
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 50d9f3e..dec0a27 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -519,7 +519,7 @@ config ISA_DMA_API
+ bool
+
+ config PCI
+- bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695
++ bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE
+ help
+ Find out whether you have a PCI motherboard. PCI is the name of a
+ bus system, i.e. the way the CPU talks to the other stuff inside
+@@ -537,6 +537,12 @@ config PCI_HOST_VIA82C505
+ depends on PCI && ARCH_SHARK
+ default y
+
++config PCI_HOST_ITE8152
++ bool
++ depends on PCI && MACH_ARMCORE
++ default y
++ select DMABOUNCE
++
+ source "drivers/pci/Kconfig"
+
+ source "drivers/pcmcia/Kconfig"
+diff --git a/arch/arm/configs/cm_x270_defconfig b/arch/arm/configs/cm_x270_defconfig
+new file mode 100644
+index 0000000..f728363
+--- /dev/null
++++ b/arch/arm/configs/cm_x270_defconfig
+@@ -0,0 +1,1567 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.21-rc4
++# Wed Apr 4 16:42:03 2007
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++CONFIG_GENERIC_TIME=y
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_ARCH_MTD_XIP=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++CONFIG_EMBEDDED=y
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_AT91 is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_PNX4008 is not set
++CONFIG_ARCH_PXA=y
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_OMAP is not set
++CONFIG_DMABOUNCE=y
++
++#
++# Intel PXA2xx Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_MACH_LOGICPD_PXA270 is not set
++# CONFIG_MACH_MAINSTONE is not set
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_PXA_SHARPSL is not set
++# CONFIG_MACH_TRIZEPS4 is not set
++CONFIG_MACH_ARMCORE=y
++CONFIG_PXA27x=y
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_XSCALE=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5T=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_OUTER_CACHE is not set
++CONFIG_IWMMXT=y
++CONFIG_XSCALE_PMU=y
++
++#
++# Bus support
++#
++CONFIG_PCI=y
++CONFIG_PCI_HOST_ITE8152=y
++# CONFIG_PCI_DEBUG is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++CONFIG_PCCARD=y
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=m
++# CONFIG_PCMCIA_LOAD_CIS is not set
++CONFIG_PCMCIA_IOCTL=y
++CONFIG_CARDBUS=y
++
++#
++# PC-card bridges
++#
++# CONFIG_YENTA is not set
++# CONFIG_PD6729 is not set
++# CONFIG_I82092 is not set
++CONFIG_PCMCIA_PXA2XX=m
++
++#
++# Kernel Features
++#
++# CONFIG_PREEMPT is not set
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++# CONFIG_PM_LEGACY is not set
++# CONFIG_PM_DEBUG is not set
++# CONFIG_PM_SYSFS_DEPRECATED is not set
++# CONFIG_APM_EMULATION is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++# CONFIG_IEEE80211_CRYPT_TKIP is not set
++# CONFIG_IEEE80211_SOFTMAC is not set
++CONFIG_WIRELESS_EXT=y
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=m
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=m
++CONFIG_MTD_BLKDEVS=m
++CONFIG_MTD_BLOCK=m
++# CONFIG_MTD_BLOCK_RO is not set
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++# CONFIG_MTD_SHARP_SL is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++CONFIG_MTD_NAND=m
++# CONFIG_MTD_NAND_VERIFY_WRITE is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_H1900 is not set
++CONFIG_MTD_NAND_IDS=m
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++# CONFIG_MTD_NAND_SHARPSL is not set
++# CONFIG_MTD_NAND_CAFE is not set
++CONFIG_MTD_NAND_CM_X270=m
++# CONFIG_MTD_NAND_NANDSIM is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++# CONFIG_PNPACPI is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_SX8 is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=12000
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++CONFIG_IDE=m
++CONFIG_IDE_MAX_HWIFS=4
++CONFIG_BLK_DEV_IDE=m
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=m
++# CONFIG_IDEDISK_MULTI_MODE is not set
++CONFIG_BLK_DEV_IDECS=m
++# CONFIG_BLK_DEV_DELKIN is not set
++CONFIG_BLK_DEV_IDECD=m
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_IDE_GENERIC is not set
++# CONFIG_BLK_DEV_IDEPCI is not set
++# CONFIG_IDE_ARM is not set
++CONFIG_BLK_DEV_IDE_CM_X270=m
++# CONFIG_BLK_DEV_IDEDMA is not set
++# CONFIG_BLK_DEV_HD is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++# CONFIG_SCSI_PROC_FS is not set
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC94XX is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ARCMSR is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
++# CONFIG_SCSI_HPTIOP is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_STEX is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_QLA_ISCSI is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_SCSI_SRP is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_PCMCIA_AHA152X is not set
++# CONFIG_PCMCIA_FDOMAIN is not set
++# CONFIG_PCMCIA_NINJA_SCSI is not set
++# CONFIG_PCMCIA_QLOGIC is not set
++# CONFIG_PCMCIA_SYM53C500 is not set
++
++#
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++# CONFIG_ATA is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_SPI is not set
++# CONFIG_FUSION_FC is not set
++# CONFIG_FUSION_SAS is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_CASSINI is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_SMC91X is not set
++CONFIG_DM9000=y
++CONFIG_DM9000_NOEPROM=y
++# CONFIG_SMC911X is not set
++
++#
++# Tulip family network device support
++#
++# CONFIG_NET_TULIP is not set
++# CONFIG_HP100 is not set
++CONFIG_NET_PCI=y
++# CONFIG_PCNET32 is not set
++# CONFIG_AMD8111_ETH is not set
++# CONFIG_ADAPTEC_STARFIRE is not set
++# CONFIG_B44 is not set
++# CONFIG_FORCEDETH is not set
++# CONFIG_DGRS is not set
++# CONFIG_EEPRO100 is not set
++# CONFIG_E100 is not set
++# CONFIG_FEALNX is not set
++# CONFIG_NATSEMI is not set
++# CONFIG_NE2K_PCI is not set
++# CONFIG_8139CP is not set
++CONFIG_8139TOO=m
++# CONFIG_8139TOO_PIO is not set
++# CONFIG_8139TOO_TUNE_TWISTER is not set
++# CONFIG_8139TOO_8129 is not set
++# CONFIG_8139_OLD_RX_RESET is not set
++# CONFIG_SIS900 is not set
++# CONFIG_EPIC100 is not set
++# CONFIG_SUNDANCE is not set
++# CONFIG_TLAN is not set
++# CONFIG_VIA_RHINE is not set
++# CONFIG_SC92031 is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SIS190 is not set
++# CONFIG_SKGE is not set
++# CONFIG_SKY2 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_VIA_VELOCITY is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_BNX2 is not set
++# CONFIG_QLA3XXX is not set
++# CONFIG_ATL1 is not set
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_CHELSIO_T1 is not set
++# CONFIG_CHELSIO_T3 is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++# CONFIG_MYRI10GE is not set
++# CONFIG_NETXEN_NIC is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_NET_WIRELESS_RTNETLINK is not set
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++# CONFIG_PCMCIA_WAVELAN is not set
++# CONFIG_PCMCIA_NETWAVE is not set
++
++#
++# Wireless 802.11 Frequency Hopping cards support
++#
++# CONFIG_PCMCIA_RAYCS is not set
++
++#
++# Wireless 802.11b ISA/PCI cards support
++#
++# CONFIG_IPW2100 is not set
++# CONFIG_IPW2200 is not set
++# CONFIG_HERMES is not set
++# CONFIG_ATMEL is not set
++
++#
++# Wireless 802.11b Pcmcia/Cardbus cards support
++#
++# CONFIG_AIRO_CS is not set
++# CONFIG_PCMCIA_WL3501 is not set
++
++#
++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
++#
++# CONFIG_PRISM54 is not set
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_HOSTAP is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=m
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_PCMCIA_AXNET is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NET_FC is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++
++#
++# Userland interfaces
++#
++# CONFIG_INPUT_MOUSEDEV is not set
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++CONFIG_TOUCHSCREEN_UCB1400=m
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_PXA=y
++CONFIG_SERIAL_PXA_CONSOLE=y
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++CONFIG_HW_RANDOM=m
++# CONFIG_NVRAM is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++# CONFIG_SGI_IOC4 is not set
++# CONFIG_TIFM_CORE is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# LED devices
++#
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_CM_X270=y
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++# CONFIG_LEDS_TRIGGER_TIMER is not set
++# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frambuffer hardware drivers
++#
++# CONFIG_FB_CIRRUS is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_ASILIANT is not set
++# CONFIG_FB_IMSTT is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_NVIDIA is not set
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_S3 is not set
++# CONFIG_FB_SAVAGE is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_KYRO is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++CONFIG_FB_PXA=y
++# CONFIG_FB_PXA_PARAMETERS is not set
++CONFIG_FB_MBX=m
++# CONFIG_FB_VIRTUAL is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++
++#
++# Logo configuration
++#
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
++
++#
++# Sound
++#
++CONFIG_SOUND=m
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=m
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=m
++CONFIG_SND_PCM_OSS=m
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++CONFIG_SND_VERBOSE_PROCFS=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_AC97_CODEC=m
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# PCI devices
++#
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALS300 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_DARLA20 is not set
++# CONFIG_SND_GINA20 is not set
++# CONFIG_SND_LAYLA20 is not set
++# CONFIG_SND_DARLA24 is not set
++# CONFIG_SND_GINA24 is not set
++# CONFIG_SND_LAYLA24 is not set
++# CONFIG_SND_MONA is not set
++# CONFIG_SND_MIA is not set
++# CONFIG_SND_ECHO3G is not set
++# CONFIG_SND_INDIGO is not set
++# CONFIG_SND_INDIGOIO is not set
++# CONFIG_SND_INDIGODJ is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RIPTIDE is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++# CONFIG_SND_AC97_POWER_SAVE is not set
++
++#
++# ALSA ARM devices
++#
++CONFIG_SND_PXA2XX_PCM=m
++CONFIG_SND_PXA2XX_AC97=m
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++
++#
++# PCMCIA devices
++#
++# CONFIG_SND_VXPOCKET is not set
++# CONFIG_SND_PDAUDIOCF is not set
++
++#
++# SoC audio support
++#
++# CONFIG_SND_SOC is not set
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=m
++
++#
++# HID Devices
++#
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_EHCI_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_UHCI_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++# CONFIG_USB_HIDDEV is not set
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_ACECAD is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++# CONFIG_USB_TOUCHSCREEN is not set
++# CONFIG_USB_YEALINK is not set
++# CONFIG_USB_XPAD is not set
++# CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET_MII is not set
++# CONFIG_USB_USBNET is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=m
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=m
++CONFIG_MMC_PXA=m
++# CONFIG_MMC_SDHCI is not set
++# CONFIG_MMC_TIFM_SD is not set
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++
++#
++# RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++CONFIG_RTC_DRV_SA1100=y
++# CONFIG_RTC_DRV_TEST is not set
++CONFIG_RTC_DRV_V3020=y
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++CONFIG_SMB_FS=y
++# CONFIG_SMB_NLS_DEFAULT is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_LOG_BUF_SHIFT=17
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++CONFIG_DEBUG_USER=y
++CONFIG_DEBUG_ERRORS=y
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=m
++CONFIG_CRYPTO_BLKCIPHER=m
++CONFIG_CRYPTO_MANAGER=m
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=m
++CONFIG_CRYPTO_CBC=m
++CONFIG_CRYPTO_PCBC=m
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=m
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
+index 5c0a100..e1cd439 100644
+--- a/arch/arm/mach-pxa/Kconfig
++++ b/arch/arm/mach-pxa/Kconfig
+@@ -37,6 +37,11 @@ config MACH_TRIZEPS4
+ bool "Keith und Koep Trizeps4 DIMM-Module"
+ select PXA27x
+
++config MACH_ARMCORE
++ bool "CompuLab CM-X270 modules"
++ select PXA27x
++ select IWMMXT
++
+ endchoice
+
+ if PXA_SHARPSL
+diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
+index 9093eb1..2a110f8 100644
+--- a/arch/arm/mach-pxa/Makefile
++++ b/arch/arm/mach-pxa/Makefile
+@@ -18,6 +18,7 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o sp
+ obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
+ obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o
+ obj-$(CONFIG_MACH_TOSA) += tosa.o
++obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o
+
+ # Support for blinky lights
+ led-y := leds.o
+@@ -25,6 +26,8 @@ led-$(CONFIG_ARCH_LUBBOCK) += leds-lubbock.o
+ led-$(CONFIG_MACH_MAINSTONE) += leds-mainstone.o
+ led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o
+ led-$(CONFIG_MACH_TRIZEPS4) += leds-trizeps4.o
++# FIXME: use driver/leds instead
++led-$(CONFIG_MACH_ARMCORE) += leds-cm-x270.o
+
+ obj-$(CONFIG_LEDS) += $(led-y)
+
+@@ -35,3 +38,7 @@ obj-$(CONFIG_PXA_SSP) += ssp.o
+ ifeq ($(CONFIG_PXA27x),y)
+ obj-$(CONFIG_PM) += standby.o
+ endif
++
++ifeq ($(CONFIG_PCI),y)
++obj-$(CONFIG_MACH_ARMCORE) += cm-x270-pci.o
++endif
+diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
+new file mode 100644
+index 0000000..88b080d
+--- /dev/null
++++ b/arch/arm/mach-pxa/cm-x270.c
+@@ -0,0 +1,821 @@
++/*
++ * linux/arch/arm/mach-pxa/cm-x270.c
++ *
++ * Copyright (C) 2007 CompuLab, Ltd.
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/pm.h>
++#include <linux/fb.h>
++#include <linux/platform_device.h>
++#include <linux/sysdev.h>
++#include <linux/dm9000.h>
++#include <linux/rtc-v3020.h>
++#include <linux/serial_8250.h>
++#include <video/mbxfb.h>
++
++#include <asm/types.h>
++#include <asm/setup.h>
++#include <asm/memory.h>
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++#include <asm/delay.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ohci.h>
++#include <asm/arch/mmc.h>
++#include <asm/arch/bitfield.h>
++#include <asm/arch/cm-x270.h>
++
++#include <asm/hardware/it8152.h>
++
++#include "generic.h"
++
++#define RTC_PHYS_BASE (PXA_CS1_PHYS + (5 << 22))
++#define DM9000_PHYS_BASE (PXA_CS1_PHYS + (6 << 22))
++
++static struct resource cmx270_dm9k_resource[] = {
++ [0] = {
++ .start = DM9000_PHYS_BASE,
++ .end = DM9000_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = DM9000_PHYS_BASE + 8,
++ .end = DM9000_PHYS_BASE + 8 + 500,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = CMX270_ETHIRQ,
++ .end = CMX270_ETHIRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++/* for the moment we limit ourselves to 32bit IO until some
++ * better IO routines can be written and tested
++ */
++static struct dm9000_plat_data cmx270_dm9k_platdata = {
++ .flags = DM9000_PLATF_32BITONLY,
++};
++
++/* Ethernet device */
++static struct platform_device cmx270_device_dm9k = {
++ .name = "dm9000",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(cmx270_dm9k_resource),
++ .resource = cmx270_dm9k_resource,
++ .dev = {
++ .platform_data = &cmx270_dm9k_platdata,
++ }
++};
++
++/* audio device */
++static struct platform_device cmx270_audio_device = {
++ .name = "pxa2xx-ac97",
++ .id = -1,
++};
++
++/* touchscreen controller */
++static struct platform_device cmx270_ts_device = {
++ .name = "ucb1x00-ts",
++ .id = -1,
++};
++
++/* RTC */
++static struct resource cmx270_v3020_resource[] = {
++ [0] = {
++ .start = RTC_PHYS_BASE,
++ .end = RTC_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++struct v3020_platform_data cmx270_v3020_pdata = {
++ .leftshift = 16,
++};
++
++static struct platform_device cmx270_rtc_device = {
++ .name = "v3020",
++ .num_resources = ARRAY_SIZE(cmx270_v3020_resource),
++ .resource = cmx270_v3020_resource,
++ .id = -1,
++ .dev = {
++ .platform_data = &cmx270_v3020_pdata,
++ }
++};
++
++/*
++ * CM-X270 LEDs
++ */
++static struct platform_device cmx270led_device = {
++ .name = "cm-x270-led",
++ .id = -1,
++};
++
++/* 2700G graphics */
++static u64 fb_dma_mask = ~(u64)0;
++
++static struct resource cmx270_2700G_resource[] = {
++ /* frame buffer memory including ODFB and External SDRAM */
++ [0] = {
++ .start = MARATHON_PHYS,
++ .end = MARATHON_PHYS + 0x02000000,
++ .flags = IORESOURCE_MEM,
++ },
++ /* Marathon registers */
++ [1] = {
++ .start = MARATHON_PHYS + 0x03fe0000,
++ .end = MARATHON_PHYS + 0x03ffffff,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static unsigned long save_lcd_regs[10];
++
++static int cmx270_marathon_probe(struct fb_info *fb)
++{
++ /* save PXA-270 pin settings before enabling 2700G */
++ save_lcd_regs[0] = GPDR1;
++ save_lcd_regs[1] = GPDR2;
++ save_lcd_regs[2] = GAFR1_U;
++ save_lcd_regs[3] = GAFR2_L;
++ save_lcd_regs[4] = GAFR2_U;
++
++ /* Disable PXA-270 on-chip controller driving pins */
++ GPDR1 &= ~(0xfc000000);
++ GPDR2 &= ~(0x00c03fff);
++ GAFR1_U &= ~(0xfff00000);
++ GAFR2_L &= ~(0x0fffffff);
++ GAFR2_U &= ~(0x0000f000);
++ return 0;
++}
++
++static int cmx270_marathon_remove(struct fb_info *fb)
++{
++ GPDR1 = save_lcd_regs[0];
++ GPDR2 = save_lcd_regs[1];
++ GAFR1_U = save_lcd_regs[2];
++ GAFR2_L = save_lcd_regs[3];
++ GAFR2_U = save_lcd_regs[4];
++ return 0;
++}
++
++static struct mbxfb_platform_data cmx270_2700G_data = {
++ .xres = {
++ .min = 240,
++ .max = 1200,
++ .defval = 640,
++ },
++ .yres = {
++ .min = 240,
++ .max = 1200,
++ .defval = 480,
++ },
++ .bpp = {
++ .min = 16,
++ .max = 32,
++ .defval = 16,
++ },
++ .memsize = 8*1024*1024,
++ .probe = cmx270_marathon_probe,
++ .remove = cmx270_marathon_remove,
++};
++
++static struct platform_device cmx270_2700G = {
++ .name = "mbx-fb",
++ .dev = {
++ .platform_data = &cmx270_2700G_data,
++ .dma_mask = &fb_dma_mask,
++ .coherent_dma_mask = 0xffffffff,
++ },
++ .num_resources = ARRAY_SIZE(cmx270_2700G_resource),
++ .resource = cmx270_2700G_resource,
++ .id = -1,
++};
++
++/* platform devices */
++static struct platform_device *platform_devices[] __initdata = {
++ &cmx270_device_dm9k,
++ &cmx270_audio_device,
++ &cmx270_rtc_device,
++ &cmx270_2700G,
++ &cmx270led_device,
++};
++
++#ifdef CONFIG_PCI
++/*
++ * Install handler for IT8152 IRQ. Yes, yes... we are way down the IRQ
++ * cascade which is not good for IRQ latency, but the hardware has been
++ * designed that way...
++ */
++static inline void cmx270_irq(int irq, struct pt_regs *regs)
++{
++ struct irq_desc *desc;
++ desc = irq_desc + irq;
++ desc_handle_irq(irq, desc);
++}
++
++static void cmx270_irq_demux(unsigned int irq, struct irqdesc *desc,
++ struct pt_regs *regs)
++{
++ unsigned long pdcnimr, ldcnimr;
++ int pdcnirr, ldcnir;
++
++ /* clear our parent irq */
++ GEDR(GPIO_IT8152_IRQ) = GPIO_bit(GPIO_IT8152_IRQ);
++
++ /* read pending IRQs in the chip registers and clear them */
++ pdcnirr = IT8152_INTC_PDCNIRR;
++ ldcnir = IT8152_INTC_LDCNIRR;
++ IT8152_INTC_PDCNIRR = ~pdcnirr;
++ IT8152_INTC_LDCNIRR = ~ldcnir;
++
++ /* mask ITE irqs */
++ pdcnimr = IT8152_INTC_PDCNIMR;
++ ldcnimr = IT8152_INTC_LDCNIMR;
++ IT8152_INTC_PDCNIMR = 0xffff;
++ IT8152_INTC_LDCNIMR = 0xffff;
++
++ pdcnirr &= (PCISERR_BIT | H2PTADR_BIT | H2PMAR_BIT |
++ PCI_INTD_BIT | PCI_INTC_BIT | PCI_INTB_BIT | PCI_INTA_BIT |
++ USB_INT_BIT | CDMA_INT_BIT);
++
++ ldcnir &= ITESER_BIT;
++
++ IT8152_INTC_PDCNIRR = ~pdcnirr;
++ IT8152_INTC_LDCNIRR = ~ldcnir;
++
++ /* are there interrupts pending ? */
++ if( (pdcnirr | ldcnir) ) {
++ if (pdcnirr) {
++ if( pdcnirr & PCISERR_BIT )
++ cmx270_irq(PCISERR, regs);
++ if( pdcnirr & H2PTADR_BIT )
++ cmx270_irq(H2PTADR, regs);
++ if( pdcnirr & H2PMAR_BIT )
++ cmx270_irq(H2PMAR, regs);
++ if( pdcnirr & PCI_INTA_BIT )
++ cmx270_irq(PCI_INTA, regs);
++ if( pdcnirr & PCI_INTB_BIT )
++ cmx270_irq(PCI_INTB, regs);
++ if( pdcnirr & PCI_INTC_BIT )
++ cmx270_irq(PCI_INTC, regs);
++ if( pdcnirr & PCI_INTD_BIT )
++ cmx270_irq(PCI_INTD, regs);
++ if( pdcnirr & USB_INT_BIT )
++ cmx270_irq(USB_INT, regs);
++ if( pdcnirr & CDMA_INT_BIT )
++ cmx270_irq(CDMA_INT, regs);
++ }
++ if(ldcnir) {
++ if( ldcnir & ITESER_BIT )
++ cmx270_irq(IRQ_ITESER, regs);
++ }
++ }
++
++ /* re-enable ITE interrupts */
++ IT8152_INTC_PDCNIMR = pdcnimr;
++ IT8152_INTC_LDCNIMR = ldcnimr;
++}
++#else
++unsigned long it8152_base_address = CMX270_IT8152_VIRT;
++#endif
++
++/* #define CMX270_FLASH_VIRT (CMX270_IDE104_VIRT + PXA_CS_SIZE - (8<<20)) */
++/* Map PCI companion and IDE/General Purpose CS statically */
++static struct map_desc cmx270_io_desc[] __initdata = {
++ [0] = { /* IDE/general purpose space */
++ .virtual = CMX270_IDE104_VIRT,
++ .pfn = __phys_to_pfn(CMX270_IDE104_PHYS),
++ .length = PXA_CS_SIZE - (8<<20),
++ .type = MT_DEVICE
++ },
++ [1] = { /* PCI bridge */
++ .virtual = CMX270_IT8152_VIRT,
++ .pfn = __phys_to_pfn(CMX270_IT8152_PHYS),
++ .length = PXA_CS_SIZE,
++ .type = MT_DEVICE
++ },
++};
++
++/*
++ Display definitions
++ keep these for backwards compatibility, although symbolic names (as
++ e.g. in lpd270.c) looks better
++ */
++#define MTYPE_STN320x240 0
++#define MTYPE_TFT640x480 1
++#define MTYPE_CRT640x480 2
++#define MTYPE_CRT800x600 3
++#define MTYPE_TFT320x240 6
++#define MTYPE_STN640x480 7
++
++static struct pxafb_mode_info generic_stn_320x240_mode = {
++ .pixclock = 76923,
++ .bpp = 8,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 3,
++ .vsync_len = 2,
++ .left_margin = 3,
++ .upper_margin = 0,
++ .right_margin = 3,
++ .lower_margin = 0,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_stn_320x240 = {
++ .modes = &generic_stn_320x240_mode,
++ .num_modes = 1,
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x03) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mode_info generic_tft_640x480_mode = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 60,
++ .vsync_len = 2,
++ .left_margin = 70,
++ .upper_margin = 10,
++ .right_margin = 70,
++ .lower_margin = 5,
++ .sync = 0,
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_tft_640x480 = {
++ .modes = &generic_tft_640x480_mode,
++ .num_modes = 1,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mode_info generic_crt_640x480_mode = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 81,
++ .upper_margin = 33,
++ .right_margin = 16,
++ .lower_margin = 10,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_crt_640x480 = {
++ .modes = &generic_crt_640x480_mode,
++ .num_modes = 1,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff)),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mode_info generic_crt_800x600_mode = {
++ .pixclock = 28846,
++ .bpp = 8,
++ .xres = 800,
++ .yres = 600,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 26,
++ .upper_margin = 21,
++ .right_margin = 26,
++ .lower_margin = 11,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_crt_800x600 = {
++ .modes = &generic_crt_800x600_mode,
++ .num_modes = 1,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mode_info generic_tft_320x240_mode = {
++ .pixclock = 134615,
++ .bpp = 16,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 63,
++ .vsync_len = 7,
++ .left_margin = 75,
++ .upper_margin = 0,
++ .right_margin = 15,
++ .lower_margin = 15,
++ .sync = 0,
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_tft_320x240 = {
++ .modes = &generic_tft_320x240_mode,
++ .num_modes = 1,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x06) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mode_info generic_stn_640x480_mode = {
++ .pixclock = 57692,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 4,
++ .vsync_len = 2,
++ .left_margin = 10,
++ .upper_margin = 5,
++ .right_margin = 10,
++ .lower_margin = 5,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .cmap_greyscale = 0,
++};
++
++static struct pxafb_mach_info generic_stn_640x480 = {
++ .modes = &generic_stn_640x480_mode,
++ .num_modes = 1,
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++};
++
++static struct pxafb_mach_info *cmx270_display = &generic_crt_640x480;
++
++static int __init cmx270_set_display(char *str)
++{
++ int disp_type = simple_strtol(str, NULL, 0);
++ switch (disp_type) {
++ case MTYPE_STN320x240:
++ cmx270_display = &generic_stn_320x240;
++ break;
++ case MTYPE_TFT640x480:
++ cmx270_display = &generic_tft_640x480;
++ break;
++ case MTYPE_CRT640x480:
++ cmx270_display = &generic_crt_640x480;
++ break;
++ case MTYPE_CRT800x600:
++ cmx270_display = &generic_crt_800x600;
++ break;
++ case MTYPE_TFT320x240:
++ cmx270_display = &generic_tft_320x240;
++ break;
++ case MTYPE_STN640x480:
++ cmx270_display = &generic_stn_640x480;
++ break;
++ default: /* fallback to CRT 640x480 */
++ cmx270_display = &generic_crt_640x480;
++ break;
++ }
++ return 1;
++}
++
++__setup("monitor=", cmx270_set_display);
++
++/* PXA27x OHCI controller setup */
++static int cmx270_ohci_init(struct device *dev)
++{
++ /* Set the Power Control Polarity Low */
++ UHCHR = (UHCHR | UHCHR_PCPL) &
++ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE);
++
++ return 0;
++}
++
++static struct pxaohci_platform_data cmx270_ohci_platform_data = {
++ .port_mode = PMM_PERPORT_MODE,
++ .init = cmx270_ohci_init,
++};
++
++
++static int cmx270_mci_init(struct device *dev, irq_handler_t cmx270_detect_int, void *data)
++{
++ int err;
++
++ /*
++ * setup GPIO for PXA27x MMC controller
++ */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ /* SB-X270 uses GPIO105 as SD power enable */
++ pxa_gpio_mode(105 | GPIO_OUT);
++
++ /* card detect IRQ on GPIO 83 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_MMC_IRQ));
++ set_irq_type(CMX270_MMC_IRQ, IRQT_FALLING);
++
++ err = request_irq(CMX270_MMC_IRQ, cmx270_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "cmx270_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
++ return -1;
++ }
++
++ return 0;
++}
++
++static void cmx270_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask) {
++ printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
++ GPCR(105) = GPIO_bit(105);
++ } else {
++ GPSR(105) = GPIO_bit(105);
++ printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
++ }
++}
++
++static void cmx270_mci_exit(struct device *dev, void *data)
++{
++ free_irq(CMX270_MMC_IRQ, data);
++}
++
++static struct pxamci_platform_data cmx270_mci_platform_data = {
++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
++ .init = cmx270_mci_init,
++ .setpower = cmx270_mci_setpower,
++ .exit = cmx270_mci_exit,
++};
++
++#ifdef CONFIG_PM
++/* extern struct subsystem power_subsys; */
++static unsigned long sleep_save_ite[10];
++static unsigned long sleep_save_msc[10];
++
++static int cmx270_suspend(struct sys_device *dev, pm_message_t state)
++{
++#ifdef CONFIG_PCI
++ /* save ITE state */
++ sleep_save_ite[0] = IT8152_INTC_PDCNIMR;
++ sleep_save_ite[1] = IT8152_INTC_LPCNIMR;
++ sleep_save_ite[2] = IT8152_INTC_LPNIAR;
++
++ /* Clear ITE IRQ's */
++ IT8152_INTC_PDCNIRR = 0;
++ IT8152_INTC_LPCNIRR = 0;
++#endif
++
++ /* save MSC registers */
++ sleep_save_msc[0] = MSC0;
++ sleep_save_msc[1] = MSC1;
++ sleep_save_msc[2] = MSC2;
++
++ /* setup power saving mode registers */
++ PCFR = 0x0;
++ PSLR = 0xff400000;
++ PMCR = 0x00000005;
++ PWER = 0x80000000;
++ PFER = 0x00000000;
++ PRER = 0x00000000;
++ PGSR0 = 0xC0018800;
++ PGSR1 = 0x004F0002;
++ PGSR2 = 0x6021C000;
++ PGSR3 = 0x00020000;
++
++ return 0;
++}
++
++static int cmx270_resume(struct sys_device *dev)
++{
++#ifdef CONFIG_PCI
++ /* restore IT8152 state */
++ IT8152_INTC_PDCNIMR = sleep_save_ite[0];
++ IT8152_INTC_LPCNIMR = sleep_save_ite[1];
++ IT8152_INTC_LPNIAR = sleep_save_ite[2];
++#endif
++
++ /* restore MSC registers */
++ MSC0 = sleep_save_msc[0];
++ MSC1 = sleep_save_msc[1];
++ MSC2 = sleep_save_msc[2];
++
++ return 0;
++}
++
++static struct sysdev_class cmx270_pm_sysclass = {
++ set_kset_name("pm"),
++ .resume = cmx270_resume,
++ .suspend = cmx270_suspend,
++};
++
++static struct sys_device cmx270_pm_device = {
++ .cls = &cmx270_pm_sysclass,
++};
++
++static int __init cmx270_pm_init(void)
++{
++ int error;
++ error = sysdev_class_register(&cmx270_pm_sysclass);
++ if (error == 0)
++ error = sysdev_register(&cmx270_pm_device);
++ return error;
++}
++#else
++static int __init cmx270_pm_init(void) { return 0; }
++#endif
++
++static void __init cmx270_init(void)
++{
++ cmx270_pm_init();
++
++ set_pxa_fb_info(cmx270_display);
++
++ /* register CM-X270 platform devices */
++ platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
++
++ /* set MCI and OHCI platform parameters */
++ pxa_set_mci_info(&cmx270_mci_platform_data);
++ pxa_set_ohci_info(&cmx270_ohci_platform_data);
++
++ /* This enables the STUART */
++ pxa_gpio_mode(GPIO46_STRXD_MD);
++ pxa_gpio_mode(GPIO47_STTXD_MD);
++
++ /* This enables the BTUART */
++ pxa_gpio_mode(GPIO42_BTRXD_MD);
++ pxa_gpio_mode(GPIO43_BTTXD_MD);
++ pxa_gpio_mode(GPIO44_BTCTS_MD);
++ pxa_gpio_mode(GPIO45_BTRTS_MD);
++}
++
++#ifdef CONFIG_PCI
++static void cmx270_mask_irq(unsigned int irq)
++{
++ switch(irq) {
++ case IT8152_IRQ(0):
++ IT8152_INTC_PDCNIMR |= PCISERR_BIT;
++ break;
++ case IT8152_IRQ(1):
++ IT8152_INTC_PDCNIMR |= H2PTADR_BIT;
++ break;
++ case IT8152_IRQ(2):
++ IT8152_INTC_PDCNIMR |= H2PMAR_BIT;
++ break;
++ case IT8152_IRQ(3):
++ IT8152_INTC_PDCNIMR |= PCI_INTA_BIT;
++ break;
++ case IT8152_IRQ(4):
++ IT8152_INTC_PDCNIMR |= PCI_INTB_BIT;
++ break;
++ case IT8152_IRQ(5):
++ IT8152_INTC_PDCNIMR |= PCI_INTC_BIT;
++ break;
++ case IT8152_IRQ(6):
++ IT8152_INTC_PDCNIMR |= PCI_INTD_BIT;
++ break;
++ case IT8152_IRQ(7):
++ IT8152_INTC_PDCNIMR |= USB_INT_BIT;
++ break;
++ case IT8152_IRQ(9):
++ IT8152_INTC_PDCNIMR |= CDMA_INT_BIT;
++ break;
++ case IT8152_IRQ(10):
++ IT8152_INTC_LDCNIMR |= ITESER_BIT;
++ break;
++ }
++}
++
++static void cmx270_unmask_irq(unsigned int irq)
++{
++ switch(irq) {
++ case IT8152_IRQ(0):
++ IT8152_INTC_PDCNIMR &= (~PCISERR_BIT);
++ break;
++ case IT8152_IRQ(1):
++ IT8152_INTC_PDCNIMR &= (~H2PTADR_BIT);
++ break;
++ case IT8152_IRQ(2):
++ IT8152_INTC_PDCNIMR &= (~H2PMAR_BIT);
++ break;
++ case IT8152_IRQ(3):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTA_BIT);
++ break;
++ case IT8152_IRQ(4):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTB_BIT);
++ break;
++ case IT8152_IRQ(5):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTC_BIT);
++ break;
++ case IT8152_IRQ(6):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTD_BIT);
++ break;
++ case IT8152_IRQ(7):
++ IT8152_INTC_PDCNIMR &= (~USB_INT_BIT);
++ break;
++ case IT8152_IRQ(9):
++ IT8152_INTC_PDCNIMR &= (~CDMA_INT_BIT);
++ break;
++ case IT8152_IRQ(10):
++ IT8152_INTC_LDCNIMR &= (~ITESER_BIT);
++ break;
++ }
++}
++
++static struct irq_chip cmx270_irq_chip = {
++ .ack = cmx270_mask_irq,
++ .mask = cmx270_mask_irq,
++ .unmask = cmx270_unmask_irq,
++};
++#endif
++
++static void __init cmx270_init_irq(void)
++{
++ int irq;
++
++ pxa_init_irq();
++
++ IT8152_INTC_PDCNIMR = 0xffff;
++
++#ifdef CONFIG_PCI
++ /* Disable and clear IRQ's for ITE8152 */
++ IT8152_INTC_PDCNIMR = 0xffff;
++ IT8152_INTC_PDCNIRR = 0;
++ IT8152_INTC_LPCNIMR = 0xffff;
++ IT8152_INTC_LPCNIRR = 0;
++ IT8152_INTC_LDCNIMR = 0xffff;
++ IT8152_INTC_LDCNIRR = 0;
++
++ for(irq = IT8152_IRQ(0); irq <= IT8152_IRQ_MAX; irq++) {
++ set_irq_chip(irq, &cmx270_irq_chip);
++ set_irq_handler(irq, handle_level_irq);
++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
++ }
++
++ /* INTC signal from IT8152 is connected to GPIO0 */
++ pxa_gpio_mode(IRQ_GPIO_IT8152_IRQ);
++ set_irq_chained_handler(IRQ_GPIO_IT8152_IRQ, cmx270_irq_demux);
++ set_irq_type(IRQ_GPIO_IT8152_IRQ, IRQT_RISING);
++#endif
++
++ /* Setup interrupt for dm9000 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_ETHIRQ));
++ set_irq_type(CMX270_ETHIRQ, IRQT_RISING);
++
++ /* Setup interrupt for 2700G */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_GFXIRQ));
++ set_irq_type(CMX270_GFXIRQ, IRQT_FALLING);
++}
++
++static void __init cmx270_map_io(void)
++{
++ pxa_map_io();
++ iotable_init(cmx270_io_desc, ARRAY_SIZE(cmx270_io_desc));
++}
++
++
++MACHINE_START(ARMCORE, "Compulab CM-x270")
++ .boot_params = 0xa0000100,
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .map_io = cmx270_map_io,
++ .init_irq = cmx270_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = cmx270_init,
++MACHINE_END
+diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
+index 87d2046..1023411 100644
+--- a/drivers/leds/Kconfig
++++ b/drivers/leds/Kconfig
+@@ -89,6 +89,12 @@ config LEDS_H1940
+ help
+ This option enables support for the LEDs on the h1940.
+
++config LEDS_CM_X270
++ tristate "LED Support for the CM-X270 LEDs"
++ depends on LEDS_CLASS && MACH_ARMCORE
++ help
++ This option enables support for the CM-X270 LEDs.
++
+ config LEDS_COBALT
+ tristate "LED Support for Cobalt Server front LED"
+ depends on LEDS_CLASS && MIPS_COBALT
+diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
+index aa2c18e..808900c 100644
+--- a/drivers/leds/Makefile
++++ b/drivers/leds/Makefile
+@@ -16,6 +16,7 @@ obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o
+ obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
+ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
+ obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
++obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
+diff --git a/drivers/leds/leds-cm-x270.c b/drivers/leds/leds-cm-x270.c
+new file mode 100644
+index 0000000..63b7e9e
+--- /dev/null
++++ b/drivers/leds/leds-cm-x270.c
+@@ -0,0 +1,126 @@
++/*
++ * drivers/leds/leds-cm-x270.c
++ *
++ * Copyright 2007 CompuLab Ltd.
++ * Author: Mike Rapoport <mike@compulab.co.il>
++ *
++ * Based on leds-corgi.c
++ * Author: Richard Purdie <rpurdie@openedhand.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#define GPIO_RED_LED (93)
++#define GPIO_GREEN_LED (94)
++
++#define CMX270_RED_ON() GPCR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_RED_OFF() GPSR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_GREEN_ON() GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++#define CMX270_GREEN_OFF() GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++
++
++static void cmx270_red_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if (value)
++ CMX270_RED_ON();
++ else
++ CMX270_RED_OFF();
++}
++
++static void cmx270_green_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if (value)
++ CMX270_GREEN_ON();
++ else
++ CMX270_GREEN_OFF();
++}
++
++static struct led_classdev cmx270_red_led = {
++ .name = "cm-x270:red",
++ .default_trigger = "nand-disk",
++ .brightness_set = cmx270_red_set,
++};
++
++static struct led_classdev cmx270_green_led = {
++ .name = "cm-x270:green",
++ .default_trigger = "heartbeat",
++ .brightness_set = cmx270_green_set,
++};
++
++#ifdef CONFIG_PM
++static int cmx270led_suspend(struct platform_device *dev, pm_message_t state)
++{
++ led_classdev_suspend(&cmx270_red_led);
++ led_classdev_suspend(&cmx270_green_led);
++ return 0;
++}
++
++static int cmx270led_resume(struct platform_device *dev)
++{
++ led_classdev_resume(&cmx270_red_led);
++ led_classdev_resume(&cmx270_green_led);
++ return 0;
++}
++#endif
++
++static int cmx270led_probe(struct platform_device *pdev)
++{
++ int ret;
++
++ ret = led_classdev_register(&pdev->dev, &cmx270_red_led);
++ if (ret < 0)
++ return ret;
++
++ ret = led_classdev_register(&pdev->dev, &cmx270_green_led);
++ if (ret < 0)
++ led_classdev_unregister(&cmx270_red_led);
++
++ return ret;
++}
++
++static int cmx270led_remove(struct platform_device *pdev)
++{
++ led_classdev_unregister(&cmx270_red_led);
++ led_classdev_unregister(&cmx270_green_led);
++ return 0;
++}
++
++static struct platform_driver cmx270led_driver = {
++ .probe = cmx270led_probe,
++ .remove = cmx270led_remove,
++#ifdef CONFIG_PM
++ .suspend = cmx270led_suspend,
++ .resume = cmx270led_resume,
++#endif
++ .driver = {
++ .name = "cm-x270-led",
++ },
++};
++
++static int __init cmx270led_init(void)
++{
++ return platform_driver_register(&cmx270led_driver);
++}
++
++static void __exit cmx270led_exit(void)
++{
++ platform_driver_unregister(&cmx270led_driver);
++}
++
++module_init(cmx270led_init);
++module_exit(cmx270led_exit);
++
++MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
++MODULE_DESCRIPTION("Corgi LED driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index b49375a..7ee6561 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -875,6 +875,14 @@ config DM9000
+ <file:Documentation/networking/net-modules.txt>. The module will be
+ called dm9000.
+
++config DM9000_NOEPROM
++ bool "DM9000 without EEPROM attached"
++ depends on DM9000
++ ---help---
++ Select this option if you have DM9000 chipset without EEPROM
++ containing the MAC address. In this case MAC address should
++ be set either by the bootloader or using ifconfig
++
+ config SMC911X
+ tristate "SMSC LAN911[5678] support"
+ select CRC32
+diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
+index 264fa0e..4e2954b 100644
+--- a/drivers/net/dm9000.c
++++ b/drivers/net/dm9000.c
+@@ -562,6 +562,7 @@ dm9000_probe(struct platform_device *pdev)
+ db->mii.mdio_read = dm9000_phy_read;
+ db->mii.mdio_write = dm9000_phy_write;
+
++#ifndef CONFIG_DM9000_NOEPROM
+ /* Read SROM content */
+ for (i = 0; i < 64; i++)
+ ((u16 *) db->srom)[i] = read_srom_word(db, i);
+@@ -569,6 +570,11 @@ dm9000_probe(struct platform_device *pdev)
+ /* Set Node Address */
+ for (i = 0; i < 6; i++)
+ ndev->dev_addr[i] = db->srom[i];
++#else
++ /* The Node Address was set by bootloader */
++ for (i=0; i<6; i++)
++ ndev->dev_addr[i] = ior(db, 0x10+i);
++#endif
+
+ if (!is_valid_ether_addr(ndev->dev_addr)) {
+ /* try reading from mac */
+diff --git a/include/asm-arm/arch-pxa/cm-x270.h b/include/asm-arm/arch-pxa/cm-x270.h
+new file mode 100644
+index 0000000..24613a5
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/cm-x270.h
+@@ -0,0 +1,71 @@
++/*
++ * linux/include/asm/arch-pxa/armcore.h
++ *
++ * Compulab Ltd., 2003
++ *
++ * ARMCore registers
++ */
++
++
++#define CMX270_CS1_PHYS (PXA_CS1_PHYS)
++#define MARATHON_PHYS (PXA_CS2_PHYS)
++#define CMX270_IDE104_PHYS (PXA_CS3_PHYS)
++#define CMX270_IT8152_PHYS (PXA_CS4_PHYS)
++
++#define PXA_CS_SIZE (64*1024*1024)
++
++/* Virtual map */
++
++#define CMX270_VIRT_BASE (0xe8000000)
++
++#define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
++#define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + PXA_CS_SIZE)
++
++
++/* GPIO related definitions */
++#define GPIO_IT8152_IRQ (22)
++#define GPIO_RED_LED (93)
++#define GPIO_GREEN_LED (94)
++
++
++#define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ)
++#define PME_IRQ IRQ_GPIO(0)
++#define CMX270_IDE_IRQ IRQ_GPIO(100)
++#define CMX270_GPIRQ1 IRQ_GPIO(101)
++#define CMX270_TOUCHIRQ IRQ_GPIO(96)
++#define CMX270_ETHIRQ IRQ_GPIO(10)
++#define CMX270_GFXIRQ IRQ_GPIO(95)
++#define CMX270_NANDIRQ IRQ_GPIO(89)
++#define CMX270_MMC_IRQ IRQ_GPIO(83)
++
++/* LED macros */
++#define CMX270_RED_ON() GPCR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_RED_OFF() GPSR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_GREEN_ON() GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++#define CMX270_GREEN_OFF() GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++
++/* PCMCIA related definitions */
++#define PCC_DETECT(x) (GPLR(84 - (x)) & GPIO_bit(84 - (x)))
++#define PCC_READY(x) (GPLR(82 - (x)) & GPIO_bit(81 - (x)))
++
++#define PCMCIA_S0_CD_VALID IRQ_GPIO(84)
++#define PCMCIA_S0_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S1_CD_VALID IRQ_GPIO(83)
++#define PCMCIA_S1_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S0_RDYINT IRQ_GPIO(82)
++#define PCMCIA_S1_RDYINT IRQ_GPIO(81)
++
++#define PCMCIA_RESET_GPIO 53
++
++
++
++
++
++
++
++
++
++
++
+diff --git a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h
+index e2bdc2f..989303a 100644
+--- a/include/asm-arm/arch-pxa/hardware.h
++++ b/include/asm-arm/arch-pxa/hardware.h
+@@ -90,4 +90,15 @@ extern unsigned int get_lcdclk_frequency_10khz(void);
+
+ #endif
+
++#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
++#define HAVE_ARCH_PCI_SET_DMA_MASK
++#ifndef __ASSEMBLY__
++extern unsigned long armcore_pcibios_min_io;
++extern unsigned long armcore_pcibios_min_mem;
++#endif
++#define PCIBIOS_MIN_IO (armcore_pcibios_min_io)
++#define PCIBIOS_MIN_MEM (armcore_pcibios_min_mem)
++#define pcibios_assign_all_busses() 1
++#endif
++
+ #endif /* _ASM_ARCH_HARDWARE_H */
+diff --git a/include/asm-arm/arch-pxa/irqs.h b/include/asm-arm/arch-pxa/irqs.h
+index 67ed436..f9c075f 100644
+--- a/include/asm-arm/arch-pxa/irqs.h
++++ b/include/asm-arm/arch-pxa/irqs.h
+@@ -222,3 +222,23 @@
+ #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1)
+ #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2)
+ #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3)
++
++/* ITE8152 irqs on CM-x2xx */
++#ifdef CONFIG_MACH_ARMCORE
++#define IT8152_IRQ(x) (IRQ_BOARD_START + (x))
++#define PCISERR IT8152_IRQ(0)
++#define H2PTADR IT8152_IRQ(1)
++#define H2PMAR IT8152_IRQ(2)
++#define PCI_INTA IT8152_IRQ(3)
++#define PCI_INTB IT8152_IRQ(4)
++#define PCI_INTC IT8152_IRQ(5)
++#define PCI_INTD IT8152_IRQ(6)
++#define USB_INT IT8152_IRQ(7)
++#define AUDIO_INT IT8152_IRQ(8)
++#define CDMA_INT IT8152_IRQ(9)
++#define IRQ_ITESER IT8152_IRQ(10)
++#define IT8152_IRQ_MAX IT8152_IRQ(10)
++
++#undef NR_IRQS
++#define NR_IRQS IT8152_IRQ_MAX+1
++#endif
+diff --git a/include/asm-arm/memory.h b/include/asm-arm/memory.h
+index d9bfb39..83db3cb 100644
+--- a/include/asm-arm/memory.h
++++ b/include/asm-arm/memory.h
+@@ -141,6 +141,16 @@
+ * allocations. This must be the smallest DMA mask in the system,
+ * so a successful GFP_DMA allocation will always satisfy this.
+ */
++
++#ifdef CONFIG_PCI_HOST_ITE8152
++void it8152_adjust_zones(int node, unsigned long *size, unsigned long *holes);
++
++#define arch_adjust_zones(node, size, holes) \
++ it8152_adjust_zones(node, size, holes)
++
++#define ISA_DMA_THRESHOLD (PHYS_OFFSET + SZ_64M - 1)
++#endif
++
+ #ifndef ISA_DMA_THRESHOLD
+ #define ISA_DMA_THRESHOLD (0xffffffffULL)
+ #endif
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0002-cm-x270-match-type.patch b/packages/linux/compulab-pxa270-2.6.22/0002-cm-x270-match-type.patch
new file mode 100644
index 0000000000..68da30191c
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0002-cm-x270-match-type.patch
@@ -0,0 +1,25 @@
+From e566813cedb9f91724597df45c11075023a7b589 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 18:58:27 -0400
+Subject: [PATCH] cm-x270-match-type
+
+---
+ arch/arm/boot/compressed/head-xscale.S | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S
+index 73c5d9e..dc89459 100644
+--- a/arch/arm/boot/compressed/head-xscale.S
++++ b/arch/arm/boot/compressed/head-xscale.S
+@@ -53,3 +53,8 @@ __XScale_start:
+ str r1, [r0, #0x18]
+ #endif
+
++#if defined(CONFIG_MACH_ARMCORE)
++ mov r7, #(MACH_TYPE_ARMCORE & 0xFF00)
++ add r7, r7, #(MACH_TYPE_ARMCORE & 0xFF)
++#endif
++
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0003-cm-x270-ide.patch b/packages/linux/compulab-pxa270-2.6.22/0003-cm-x270-ide.patch
new file mode 100644
index 0000000000..0ff115efc8
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0003-cm-x270-ide.patch
@@ -0,0 +1,186 @@
+From f260d5fa4c99cd7df949e6408af59807f8ccf224 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 18:59:39 -0400
+Subject: [PATCH] cm-x270-ide
+
+---
+ drivers/ide/Kconfig | 8 +++
+ drivers/ide/arm/Makefile | 1 +
+ drivers/ide/arm/cm-x270-ide.c | 135 +++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 144 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/ide/arm/cm-x270-ide.c
+
+diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
+index b1a9b81..7de4155 100644
+--- a/drivers/ide/Kconfig
++++ b/drivers/ide/Kconfig
+@@ -864,6 +864,14 @@ config BLK_DEV_IDE_BAST
+ Say Y here if you want to support the onboard IDE channels on the
+ Simtec BAST or the Thorcom VR1000
+
++config BLK_DEV_IDE_CM_X270
++ tristate "CompuLab CM-X270 IDE support"
++ depends on ARM && (MACH_ARMCORE)
++ help
++ Say Y here if you want to support the onboard IDE channels on the
++ CompuLab CM-X270 module
++
++
+ config BLK_DEV_GAYLE
+ bool "Amiga Gayle IDE interface support"
+ depends on AMIGA
+diff --git a/drivers/ide/arm/Makefile b/drivers/ide/arm/Makefile
+index 6a78f07..e5cadb7 100644
+--- a/drivers/ide/arm/Makefile
++++ b/drivers/ide/arm/Makefile
+@@ -2,5 +2,6 @@
+ obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
+ obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
+ obj-$(CONFIG_BLK_DEV_IDE_BAST) += bast-ide.o
++obj-$(CONFIG_BLK_DEV_IDE_CM_X270) += cm-x270-ide.o
+
+ EXTRA_CFLAGS := -Idrivers/ide
+diff --git a/drivers/ide/arm/cm-x270-ide.c b/drivers/ide/arm/cm-x270-ide.c
+new file mode 100644
+index 0000000..a8b15aa
+--- /dev/null
++++ b/drivers/ide/arm/cm-x270-ide.c
+@@ -0,0 +1,135 @@
++/* linux/drivers/ide/arm/cm-x270-ide.c
++ *
++ * Copyright (c) 2006 CompuLab, Ltd
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Based on linux/drivers/ide/arm/bast-ide.c
++ * Copyright (c) 2003-2004 Simtec Electronics
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/ide.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++
++#include <asm/mach-types.h>
++
++#include <asm/io.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#define CMX270_SB270_IDECS0_VIRT (CMX270_IDE104_VIRT + (1<<24) + (1<<25))
++#define CMX270_SB270_IDECS1_VIRT (CMX270_IDE104_VIRT + (1<<25))
++#define CMX270_ATX_IDECS0_VIRT (CMX270_IDE104_VIRT + (1<<25))
++#define CMX270_ATX_IDECS1_VIRT (CMX270_IDE104_VIRT + (1<<25) + (1<<22))
++
++/* list of registered interfaces */
++static ide_hwif_t *ifs[1];
++
++static int __init
++cmx270_ide_register(unsigned int base, unsigned int aux, int irq,
++ ide_hwif_t **hwif)
++{
++ hw_regs_t hw;
++
++ memset(&hw, 0, sizeof(hw));
++
++ if(!base || !aux) return -EINVAL;
++
++ printk(KERN_DEBUG "%s: base = %08x, aux = %08x\n", __FUNCTION__,
++ base, aux);
++
++ /* Different mappings for local bus IDE and PCMCIA IDE */
++ if(base == CMX270_SB270_IDECS0_VIRT) {
++ hw.io_ports[IDE_DATA_OFFSET] = base + 0;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + (0x1<<3);
++ hw.io_ports[IDE_NSECTOR_OFFSET]= base + (0x2<<3);
++ hw.io_ports[IDE_SECTOR_OFFSET]= base + (0x3<<3);
++ hw.io_ports[IDE_LCYL_OFFSET]= base + (0x4<<3);
++ hw.io_ports[IDE_HCYL_OFFSET]= base + (0x5<<3);
++ hw.io_ports[IDE_SELECT_OFFSET]= base + (0x6<<3);
++ hw.io_ports[IDE_STATUS_OFFSET]= base + (0x7<<3);
++ hw.io_ports[IDE_CONTROL_OFFSET] = aux+(0x6<<3);
++ }
++ else if (base == CMX270_ATX_IDECS0_VIRT) { /* atx base */
++ hw.io_ports[IDE_DATA_OFFSET] = base + 0;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + 8;
++ hw.io_ports[IDE_NSECTOR_OFFSET]= base + 2;
++ hw.io_ports[IDE_SECTOR_OFFSET]= base + 10;
++ hw.io_ports[IDE_LCYL_OFFSET]= base + 4;
++ hw.io_ports[IDE_HCYL_OFFSET]= base + 12;
++ hw.io_ports[IDE_SELECT_OFFSET]= base + 6; //6;
++ hw.io_ports[IDE_STATUS_OFFSET]= base + 14;
++ hw.io_ports[IDE_CONTROL_OFFSET] = (aux+0x6);
++ } else {
++ printk(KERN_DEBUG "%s: registering wrong IDE i/f\n", __FUNCTION__);
++ hw.io_ports[IDE_DATA_OFFSET] = base + 8;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + 13;
++ hw.io_ports[IDE_NSECTOR_OFFSET] = base + 2;
++ hw.io_ports[IDE_SECTOR_OFFSET] = base + 3;
++ hw.io_ports[IDE_LCYL_OFFSET] = base + 4;
++ hw.io_ports[IDE_HCYL_OFFSET] = base + 5;
++ hw.io_ports[IDE_SELECT_OFFSET] = base + 6;
++ hw.io_ports[IDE_STATUS_OFFSET] = base + 7;
++ hw.io_ports[IDE_CONTROL_OFFSET] = aux;
++ }
++
++ hw.irq = irq;
++
++ return ide_register_hw(&hw, hwif);
++}
++
++static int __init cmx270_ide_init(void)
++{
++ int retval = 0;
++
++ if (!(machine_is_armcore()))
++ goto out;
++
++ printk("CM-X270: initializing IDE interface\n");
++
++ MSC1 = 0x7ffc7ff4;
++
++ /* Interrupts on rising edge: lines are inverted before they get to
++ the PXA */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_IDE_IRQ));
++
++ /* try SB-X270 */
++ set_irq_type(CMX270_IDE_IRQ, IRQ_TYPE_EDGE_RISING);
++ retval = cmx270_ide_register(CMX270_SB270_IDECS0_VIRT,
++ CMX270_SB270_IDECS1_VIRT,
++ CMX270_IDE_IRQ, &ifs[0]);
++ if (retval >= 0) {
++ printk(KERN_DEBUG "%s: found IDE interface on SB-X270\n",
++ __FUNCTION__);
++ goto out;
++ }
++
++ /* SB-X270 detection failed, try ATX */
++ set_irq_type(CMX270_IDE_IRQ, IRQ_TYPE_EDGE_FALLING);
++ retval = cmx270_ide_register(CMX270_ATX_IDECS0_VIRT,
++ CMX270_ATX_IDECS1_VIRT,
++ CMX270_IDE_IRQ, &ifs[0]);
++
++ if ( retval >= 0 ) {
++ printk(KERN_DEBUG "%s: found IDE interface on ATX\n",
++ __FUNCTION__);
++ goto out;
++ }
++
++ out:
++ return retval;
++}
++
++module_init(cmx270_ide_init);
++
++MODULE_AUTHOR("CompuLab");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("CompuLab CM-X270 IDE driver");
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0004-cm-x270-it8152.patch b/packages/linux/compulab-pxa270-2.6.22/0004-cm-x270-it8152.patch
new file mode 100644
index 0000000000..274eaf24d8
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0004-cm-x270-it8152.patch
@@ -0,0 +1,496 @@
+From 1306abec905df1ff5cf2b1d91ac0d94d18d96c5b Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:00:07 -0400
+Subject: [PATCH] cm-x270-it8152
+
+---
+ arch/arm/common/Makefile | 1 +
+ arch/arm/common/it8152.c | 272 +++++++++++++++++++++++++++++++++++++
+ arch/arm/kernel/bios32.c | 28 ++++-
+ include/asm-arm/hardware/it8152.h | 104 ++++++++++++++
+ include/asm-arm/pci.h | 7 +
+ include/linux/pci_ids.h | 1 +
+ 6 files changed, 410 insertions(+), 3 deletions(-)
+ create mode 100644 arch/arm/common/it8152.c
+ create mode 100644 include/asm-arm/hardware/it8152.h
+
+diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile
+index e1289a2..3d0b9fa 100644
+--- a/arch/arm/common/Makefile
++++ b/arch/arm/common/Makefile
+@@ -17,3 +17,4 @@ obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
+ obj-$(CONFIG_SHARP_SCOOP) += scoop.o
+ obj-$(CONFIG_ARCH_IXP2000) += uengine.o
+ obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
++obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o
+diff --git a/arch/arm/common/it8152.c b/arch/arm/common/it8152.c
+new file mode 100644
+index 0000000..8563610
+--- /dev/null
++++ b/arch/arm/common/it8152.c
+@@ -0,0 +1,272 @@
++/*
++ * arch/arm/common/it8152.c: PCI functions for IT8152
++ *
++ * Compulab Ltd, 2002-2006
++ *
++ * The DMA bouncing is taken from arch/arm/mach-ixp4xx/common-pci.c
++ * (see this file for respective copyrights)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/sched.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <linux/ptrace.h>
++#include <linux/interrupt.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <asm/mach/map.h>
++
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/mach/pci.h>
++#include <asm/hardware/it8152.h>
++
++#define MAX_SLOTS 21
++
++static unsigned long
++it8152_pci_dev_base_address(struct pci_bus *bus, unsigned int devfn)
++{
++ unsigned long addr = 0;
++
++ if (bus->number == 0) {
++ if (devfn < PCI_DEVFN(MAX_SLOTS, 0))
++ addr = (devfn << 8);
++ } else
++ addr = (bus->number << 16) | (devfn << 8);
++
++ return addr;
++}
++
++static int
++it8152_pci_read_config(struct pci_bus *bus, unsigned int devfn, int where,
++ int size, u32 *value)
++{
++ unsigned long addr = it8152_pci_dev_base_address(bus, devfn);
++ u32 v;
++ int shift;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x00;
++#endif
++ shift = (where & 3);
++
++ IT8152_PCI_CFG_ADDR = (addr + where);
++ v = (IT8152_PCI_CFG_DATA >> (8 * (shift)));
++
++ *value = v;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x20;
++#endif
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++
++static int
++it8152_pci_write_config(struct pci_bus *bus, unsigned int devfn, int where,
++ int size, u32 value)
++{
++ unsigned long addr = it8152_pci_dev_base_address(bus, devfn);
++ u32 v, vtemp, mask=0;
++ int shift;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x00;
++#endif
++
++ if(size==1) mask=0xff;
++ if(size==2) mask=0xffff;
++
++ shift = (where & 3);
++
++ IT8152_PCI_CFG_ADDR = addr + where;
++ vtemp = IT8152_PCI_CFG_DATA;
++
++ if(mask) vtemp &= ~(mask << (8 * shift));
++ else vtemp = 0;
++
++ v = (value << (8 * shift));
++ IT8152_PCI_CFG_ADDR = addr + where;
++ IT8152_PCI_CFG_DATA = (v | vtemp);
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x20;
++#endif
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static struct pci_ops it8152_ops = {
++ .read = it8152_pci_read_config,
++ .write = it8152_pci_write_config,
++};
++
++static struct resource it8152_io = {
++ .name = "IT8152 PCI I/O region",
++ .flags = IORESOURCE_IO,
++};
++
++static struct resource it8152_mem1 = {
++ .name = "First IT8152 PCI memory region",
++ .start = 0x10000000,
++ .end = 0x13e00000,
++ .flags = IORESOURCE_MEM,
++};
++
++/*
++ * The following functions are needed for DMA bouncing.
++ * ITE8152 chip can addrees up to 64MByte, so all the devices
++ * connected to ITE8152 (PCI and USB) should have limited DMA window
++ */
++
++/*
++ * Setup DMA mask to 64MB on devices connected to ITE8152. Ignore all
++ * other devices.
++ */
++static int it8152_pci_platform_notify(struct device *dev)
++{
++ if ( dev->bus == &pci_bus_type ) {
++ if ( dev->dma_mask )
++ *dev->dma_mask = (SZ_64M - 1) | PHYS_OFFSET;
++ dev->coherent_dma_mask = (SZ_64M - 1) | PHYS_OFFSET;
++ dmabounce_register_dev(dev, 2048, 4096);
++ }
++ return 0;
++}
++
++static int it8152_pci_platform_notify_remove(struct device *dev)
++{
++ if ( dev->bus == &pci_bus_type ) {
++ dmabounce_unregister_dev(dev);
++ }
++ return 0;
++}
++
++int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
++{
++ dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
++ __FUNCTION__, dma_addr, size);
++ return (dev->bus == &pci_bus_type ) &&
++ ((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
++}
++
++/*
++ * Only first 64MB of memory can be accessed via PCI.
++ * We use GFP_DMA to allocate safe buffers to do map/unmap.
++ * This is really ugly and we need a better way of specifying
++ * DMA-capable regions of memory.
++ */
++void __init it8152_adjust_zones(int node, unsigned long *zone_size,
++ unsigned long *zhole_size)
++{
++ unsigned int sz = SZ_64M >> PAGE_SHIFT;
++
++ /*
++ * Only adjust if > 64M on current system
++ */
++ if (node || (zone_size[0] <= sz))
++ return;
++
++ zone_size[1] = zone_size[0] - sz;
++ zone_size[0] = sz;
++ zhole_size[1] = zhole_size[0];
++ zhole_size[0] = 0;
++}
++
++/*
++ * We override these so we properly do dmabounce otherwise drivers
++ * are able to set the dma_mask to 0xffffffff and we can no longer
++ * trap bounces. :(
++ *
++ * We just return true on everyhing except for < 64MB in which case
++ * we will fail miseralby and die since we can't handle that case.
++ */
++int
++pci_set_dma_mask(struct pci_dev *dev, u64 mask)
++{
++ printk(KERN_INFO "===> %s: %s %x\n", __FUNCTION__, dev->dev.bus_id, mask);
++ if (mask >= PHYS_OFFSET + SZ_64M - 1 )
++ return 0;
++
++ return -EIO;
++}
++
++int
++pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
++{
++ printk(KERN_INFO "===> %s: %s %x\n", __FUNCTION__, dev->dev.bus_id, mask);
++ if (mask >= PHYS_OFFSET + SZ_64M - 1 )
++ return 0;
++
++ return -EIO;
++}
++
++EXPORT_SYMBOL(pci_set_dma_mask);
++EXPORT_SYMBOL(pci_set_consistent_dma_mask);
++
++
++int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
++{
++ it8152_io.start = IT8152_IO_BASE + 0x12000;
++ it8152_io.end = IT8152_IO_BASE + 0x100000;
++
++ if (request_resource(&ioport_resource, &it8152_io)) {
++ printk(KERN_ERR "PCI: unable to allocate IO region\n");
++ return -EBUSY;
++ }
++ if (request_resource(&iomem_resource, &it8152_mem1)) {
++ printk(KERN_ERR "PCI: unable to allocate memory region\n");
++ return -EBUSY;
++ }
++
++ sys->resource[0] = &it8152_io;
++ sys->resource[1] = &it8152_mem1;
++
++ if (platform_notify || platform_notify_remove) {
++ printk(KERN_ERR "PCI: Can't use platform_notify\n");
++ return -EBUSY;
++ }
++
++ platform_notify = it8152_pci_platform_notify;
++ platform_notify_remove = it8152_pci_platform_notify_remove;
++
++ return 1;
++}
++
++/*
++ * If we set up a device for bus mastering, we need to check the latency
++ * timer as we don't have even crappy BIOSes to set it properly.
++ * The implementation is from arch/i386/pci/i386.c
++ */
++unsigned int pcibios_max_latency = 255;
++
++void pcibios_set_master(struct pci_dev *dev)
++{
++ u8 lat;
++
++ pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
++ if (lat < 16)
++ lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency;
++ else if (lat > pcibios_max_latency)
++ lat = pcibios_max_latency;
++ else
++ return;
++ printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat);
++ pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
++}
++
++
++struct pci_bus * __init it8152_pci_scan_bus(int nr, struct pci_sys_data *sys)
++{
++ return pci_scan_bus(nr, &it8152_ops, sys);
++}
++
+diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
+index 240c448..d8d2352 100644
+--- a/arch/arm/kernel/bios32.c
++++ b/arch/arm/kernel/bios32.c
+@@ -279,6 +279,25 @@ static void __devinit pci_fixup_cy82c693(struct pci_dev *dev)
+ }
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, pci_fixup_cy82c693);
+
++static void __init pci_fixup_it8152(struct pci_dev *dev)
++{
++ int i;
++ /* fixup for ITE 8152 devices */
++ /* FIXME: add defines for class 0x68000 and 0x80103 */
++ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_HOST ||
++ dev->class == 0x68000 ||
++ dev->class == 0x80103) {
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ dev->resource[i].start = 0;
++ dev->resource[i].end = 0;
++ dev->resource[i].flags = 0;
++ }
++ }
++}
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8152, pci_fixup_it8152);
++
++
++
+ void __devinit pcibios_update_irq(struct pci_dev *dev, int irq)
+ {
+ if (debug_pci)
+@@ -292,9 +311,12 @@ void __devinit pcibios_update_irq(struct pci_dev *dev, int irq)
+ */
+ static inline int pdev_bad_for_parity(struct pci_dev *dev)
+ {
+- return (dev->vendor == PCI_VENDOR_ID_INTERG &&
+- (dev->device == PCI_DEVICE_ID_INTERG_2000 ||
+- dev->device == PCI_DEVICE_ID_INTERG_2010));
++ return ((dev->vendor == PCI_VENDOR_ID_INTERG &&
++ (dev->device == PCI_DEVICE_ID_INTERG_2000 ||
++ dev->device == PCI_DEVICE_ID_INTERG_2010)) ||
++ (dev->vendor == PCI_VENDOR_ID_ITE &&
++ dev->device == PCI_DEVICE_ID_ITE_8152));
++
+ }
+
+ /*
+diff --git a/include/asm-arm/hardware/it8152.h b/include/asm-arm/hardware/it8152.h
+new file mode 100644
+index 0000000..d28210d
+--- /dev/null
++++ b/include/asm-arm/hardware/it8152.h
+@@ -0,0 +1,104 @@
++/*
++ * arch/arm/mach-pxa/it8152.h
++ *
++ * Compulab Ltd., 2006
++ *
++ * ITE 8152 companion chip definitions
++ */
++
++
++/* #define CMX270_IT8152_VIRT (CMX270_VIRT_BASE) */
++
++
++extern unsigned long it8152_base_address;
++
++#define IT8152_IO_BASE (it8152_base_address + 0x03e00000)
++#define IT8152_CFGREG_BASE (it8152_base_address + 0x03f00000)
++
++/* #define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ) */
++
++#define IT8152_SHORT_IO(x) (*((volatile unsigned short *)(IT8152_CFGREG_BASE+(x))))
++#define IT8152_LONG_IO(x) (*((volatile unsigned long *)(IT8152_CFGREG_BASE+(x))))
++
++
++#define IT8152_PCI_MEMBASE (*((volatile unsigned long *)(it8152_base_address)))
++/* #define IT8152_PCI_IOBASE (*((volatile unsigned long *)(it8152_base_address + 0x3e00000))) */
++
++#define IT8152_PCI_IACK (*((volatile unsigned long *)(it8152_base_address + 0x3f00808)))
++#define IT8152_PCI_CFG_ADDR (*((volatile unsigned long *)(it8152_base_address + 0x3f00800)))
++#define IT8152_PCI_CFG_DATA (*((volatile unsigned long *)(it8152_base_address + 0x3f00804)))
++
++#define IT_BUSNUM_SHF 16
++#define IT_DEVNUM_SHF 11
++#define IT_FUNCNUM_SHF 8
++#define IT_REGNUM_SHF 2
++
++/* Power management & PLL registers */
++#define IT8152_PMPLL_DSR IT8152_LONG_IO(0x00)
++#define IT8152_PMPLL_DSSR IT8152_LONG_IO(0x04)
++#define IT8152_PMPLL_PLLCR IT8152_LONG_IO(0x20)
++#define IT8152_PMPLL_MFSR IT8152_LONG_IO(0x24)
++
++/* Memory controller */
++#define IT8152_MC_REG_OFFSET 0x100
++
++#define IT8152_MC_SDCR IT8152_LONG_IO(IT8152_MC_REG_OFFSET + 0x00)
++#define IT8152_MC_PCICR IT8152_LONG_IO(IT8152_MC_REG_OFFSET + 0x04)
++
++/* Interrupt related definitions */
++#define IT8152_INTC_REG_OFFSET 0x300
++
++#define IT8152_INTC_LDCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x00)
++#define IT8152_INTC_LDPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x04)
++#define IT8152_INTC_LDCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x08)
++#define IT8152_INTC_LDPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x0C)
++#define IT8152_INTC_LDNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x10)
++#define IT8152_INTC_LDNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x14)
++#define IT8152_INTC_LPCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x20)
++#define IT8152_INTC_LPPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x24)
++#define IT8152_INTC_LPCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x28)
++#define IT8152_INTC_LPPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x2C)
++#define IT8152_INTC_LPNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x30)
++#define IT8152_INTC_LPNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x34)
++#define IT8152_INTC_PDCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x40)
++#define IT8152_INTC_PDPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x44)
++#define IT8152_INTC_PDCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x48)
++#define IT8152_INTC_PDPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x4C)
++#define IT8152_INTC_PDNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x50)
++#define IT8152_INTC_PDNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x54)
++#define IT8152_INTC_INTC_TYPER IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0xFC)
++
++#define IT8152_UART_BASE IT8152_LONG_IO(0x200)
++
++#define IT8152_GPIO_REG_OFFSET 0x500
++
++#define IT8152_GPIO_GPLR IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET)
++#define IT8152_GPIO_GPCR12 IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET + 0x04)
++#define IT8152_GPIO_GPCR34 IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET + 0x08)
++
++
++/* Interrupt bit definitions */
++#define PCISERR_BIT (1<<14)
++#define H2PTADR_BIT (1<<13)
++#define H2PMAR_BIT (1<<12)
++#define PCI_INTD_BIT (1<<11)
++#define PCI_INTC_BIT (1<<10)
++#define PCI_INTB_BIT (1<<9)
++#define PCI_INTA_BIT (1<<8)
++#define CDMA_INT_BIT (1<<2)
++#define USB_INT_BIT (1<<1)
++#define AUDIO_INT_BIT (1<<0)
++
++/* IT8152 UART */
++#define ITESER_BIT (1<<5)
++
++
++
++
++
++
++
++
++
++
++
+diff --git a/include/asm-arm/pci.h b/include/asm-arm/pci.h
+index f21abd4..2cf30bf 100644
+--- a/include/asm-arm/pci.h
++++ b/include/asm-arm/pci.h
+@@ -8,10 +8,17 @@
+
+ #define pcibios_scan_all_fns(a, b) 0
+
++#ifdef CONFIG_PCI_HOST_ITE8152
++/* ITE bridge requires setting latency timer to avoid early bus access
++ termination by PIC bus mater devices
++*/
++extern void pcibios_set_master(struct pci_dev *dev);
++#else
+ static inline void pcibios_set_master(struct pci_dev *dev)
+ {
+ /* No special bus mastering setup handling */
+ }
++#endif
+
+ static inline void pcibios_penalize_isa_irq(int irq, int active)
+ {
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index 5b1c999..b4c81d5 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1650,6 +1650,7 @@
+ #define PCI_DEVICE_ID_ITE_8211 0x8211
+ #define PCI_DEVICE_ID_ITE_8212 0x8212
+ #define PCI_DEVICE_ID_ITE_8213 0x8213
++#define PCI_DEVICE_ID_ITE_8152 0x8152
+ #define PCI_DEVICE_ID_ITE_8872 0x8872
+ #define PCI_DEVICE_ID_ITE_IT8330G_0 0xe886
+
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0005-cm-x270-pcmcia.patch b/packages/linux/compulab-pxa270-2.6.22/0005-cm-x270-pcmcia.patch
new file mode 100644
index 0000000000..7dceff5c9d
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0005-cm-x270-pcmcia.patch
@@ -0,0 +1,228 @@
+From 338653da8f8afcdf8afc7e8a5a0104d5083597cc Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:01:27 -0400
+Subject: [PATCH] cm-x270-pcmcia
+
+---
+ drivers/pcmcia/Makefile | 1 +
+ drivers/pcmcia/pxa2xx_cm_x270.c | 198 +++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 199 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/pcmcia/pxa2xx_cm_x270.c
+
+diff --git a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile
+index 4276965..353d5b7 100644
+--- a/drivers/pcmcia/Makefile
++++ b/drivers/pcmcia/Makefile
+@@ -69,4 +69,5 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o
+ pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o
+ pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o
+ pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o
++pxa2xx_cs-$(CONFIG_MACH_ARMCORE) += pxa2xx_cm_x270.o
+
+diff --git a/drivers/pcmcia/pxa2xx_cm_x270.c b/drivers/pcmcia/pxa2xx_cm_x270.c
+new file mode 100644
+index 0000000..25e369f
+--- /dev/null
++++ b/drivers/pcmcia/pxa2xx_cm_x270.c
+@@ -0,0 +1,198 @@
++/*
++ * linux/drivers/pcmcia/pxa/pxa_armcore.c
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Compulab Ltd., 2003
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++
++#include <pcmcia/ss.h>
++#include <asm/delay.h>
++#include <asm/hardware.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#include "soc_common.h"
++
++
++static struct pcmcia_irqs irqs[] = {
++ { 0, PCMCIA_S0_CD_VALID, "PCMCIA0 CD" },
++ { 1, PCMCIA_S1_CD_VALID, "PCMCIA1 CD" },
++};
++
++
++static int
++cmx270_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
++{
++ int return_val=0;
++
++ GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) |
++ GPIO_bit(GPIO49_nPWE) |
++ GPIO_bit(GPIO50_nPIOR) |
++ GPIO_bit(GPIO51_nPIOW) |
++ GPIO_bit(GPIO85_nPCE_1) |
++ GPIO_bit(GPIO54_nPCE_2);
++
++ pxa_gpio_mode(GPIO48_nPOE_MD);
++ pxa_gpio_mode(GPIO49_nPWE_MD);
++ pxa_gpio_mode(GPIO50_nPIOR_MD);
++ pxa_gpio_mode(GPIO51_nPIOW_MD);
++ pxa_gpio_mode(GPIO85_nPCE_1_MD);
++ pxa_gpio_mode(GPIO54_nPCE_2_MD);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD); /* REVISIT: s/b dependent on num sockets (on ATX base not routed)*/
++ pxa_gpio_mode(GPIO55_nPREG_MD);
++ pxa_gpio_mode(GPIO56_nPWAIT_MD);
++ pxa_gpio_mode(GPIO57_nIOIS16_MD);
++
++ // Reset signal
++ GPDR(GPIO53_nPCE_2) |= GPIO_bit(GPIO53_nPCE_2);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++
++ GPDR(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID));
++ GPDR(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID));
++
++ set_irq_type(PCMCIA_S0_CD_VALID, IRQ_TYPE_EDGE_BOTH);
++ set_irq_type(PCMCIA_S1_CD_VALID, IRQ_TYPE_EDGE_BOTH);
++
++ //irq's for slots:
++ GPDR(IRQ_TO_GPIO(PCMCIA_S0_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S0_RDYINT));
++ GPDR(IRQ_TO_GPIO(PCMCIA_S1_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S1_RDYINT));
++
++ set_irq_type(PCMCIA_S0_RDYINT, IRQ_TYPE_EDGE_FALLING);
++ set_irq_type(PCMCIA_S1_RDYINT, IRQ_TYPE_EDGE_FALLING);
++
++ skt->irq = (skt->nr == 0) ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT;
++ return_val = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
++
++ return return_val;
++}
++
++
++static void cmx270_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
++{
++ soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
++
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID), IRQ_TYPE_NONE);
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID), IRQ_TYPE_NONE);
++
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S0_RDYINT), IRQ_TYPE_NONE);
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S1_RDYINT), IRQ_TYPE_NONE);
++}
++
++
++static void cmx270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
++ struct pcmcia_state *state)
++{
++
++ state->detect = (PCC_DETECT(skt->nr) == 0) ? 1 : 0;
++ state->ready = (PCC_READY(skt->nr) == 0) ? 0 : 1;
++ state->bvd1 = 1;
++ state->bvd2 = 1;
++ state->vs_3v = 0;
++ state->vs_Xv = 0;
++ state->wrprot = 0; /* not available */
++
++}
++
++
++static int
++cmx270_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
++ const socket_state_t *state)
++{
++
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ pxa_gpio_mode(GPIO49_nPWE | GPIO_OUT);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD | GPIO_OUT); /* For 2-socket mode */
++
++ switch(skt->nr){
++ case 0:
++ if(state->flags & SS_RESET) {
++ //GPCR(GPIO79_pSKTSEL) = GPIO_bit(GPIO79_pSKTSEL); /* For 2-socket mode */
++ //udelay(1);
++ GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ udelay(10);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ }
++ break;
++ case 1:
++ if(state->flags & SS_RESET) {
++ //GPCR(GPIO79_pSKTSEL) = GPIO_bit(GPIO79_pSKTSEL); /* For 2-socket mode */
++ //udelay(1);
++ GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ udelay(10);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ }
++ break;
++ }
++
++ pxa_gpio_mode(GPIO49_nPWE_MD);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD); /* For 2-socket mode */
++
++
++ return 0;
++}
++
++static void cmx270_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
++{
++}
++
++static void cmx270_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
++{
++}
++
++
++static struct pcmcia_low_level cmx270_pcmcia_ops = {
++ .owner = THIS_MODULE,
++ .hw_init = cmx270_pcmcia_hw_init,
++ .hw_shutdown = cmx270_pcmcia_shutdown,
++ .socket_state = cmx270_pcmcia_socket_state,
++ .configure_socket = cmx270_pcmcia_configure_socket,
++ .socket_init = cmx270_pcmcia_socket_init,
++ .socket_suspend = cmx270_pcmcia_socket_suspend,
++ .nr = 2,
++};
++
++static struct platform_device *cmx270_pcmcia_device;
++
++static int __init cmx270_pcmcia_init(void)
++{
++ int ret;
++
++ cmx270_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
++
++ if (!cmx270_pcmcia_device)
++ return -ENOMEM;
++
++ cmx270_pcmcia_device->dev.platform_data = &cmx270_pcmcia_ops;
++
++ printk ("Registering cm-x270 PCMCIA interface.\n");
++ ret = platform_device_add(cmx270_pcmcia_device);
++
++ if (ret)
++ platform_device_put(cmx270_pcmcia_device);
++
++ return ret;
++}
++
++static void __exit cmx270_pcmcia_exit(void)
++{
++ platform_device_unregister(cmx270_pcmcia_device);
++}
++
++module_init(cmx270_pcmcia_init);
++module_exit(cmx270_pcmcia_exit);
++
++MODULE_LICENSE("GPL");
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0006-ramdisk_load.patch b/packages/linux/compulab-pxa270-2.6.22/0006-ramdisk_load.patch
new file mode 100644
index 0000000000..aa25dd9bfc
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0006-ramdisk_load.patch
@@ -0,0 +1,80 @@
+From ca4508b1266109208f62e986b51397ce2788e255 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:01:50 -0400
+Subject: [PATCH] ramdisk_load
+
+---
+ arch/arm/mach-pxa/cm-x270.c | 6 ++++++
+ include/asm-arm/arch-pxa/cm-x270.h | 2 ++
+ init/initramfs.c | 16 ++++++++++++++++
+ 3 files changed, 24 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
+index 88b080d..c6ec489 100644
+--- a/arch/arm/mach-pxa/cm-x270.c
++++ b/arch/arm/mach-pxa/cm-x270.c
+@@ -308,6 +308,12 @@ static struct map_desc cmx270_io_desc[] __initdata = {
+ .length = PXA_CS_SIZE,
+ .type = MT_DEVICE
+ },
++ [2] = { /* NOR flash */
++ .virtual = CMX270_FLASH_VIRT,
++ .pfn = __phys_to_pfn(PXA_CS0_PHYS),
++ .length = (8<<20), /* up to 8 MByte flash */
++ .type = MT_DEVICE
++ },
+ };
+
+ /*
+diff --git a/include/asm-arm/arch-pxa/cm-x270.h b/include/asm-arm/arch-pxa/cm-x270.h
+index 24613a5..aad152e 100644
+--- a/include/asm-arm/arch-pxa/cm-x270.h
++++ b/include/asm-arm/arch-pxa/cm-x270.h
+@@ -20,7 +20,9 @@
+
+ #define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
+ #define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + PXA_CS_SIZE)
++#define CMX270_FLASH_VIRT (CMX270_IDE104_VIRT + PXA_CS_SIZE)
+
++#define CMX270_FLASH_RAMDISK_VIRT (CMX270_FLASH_VIRT + 0x1c0000)
+
+ /* GPIO related definitions */
+ #define GPIO_IT8152_IRQ (22)
+diff --git a/init/initramfs.c b/init/initramfs.c
+index 00eff7a..0ecd40b 100644
+--- a/init/initramfs.c
++++ b/init/initramfs.c
+@@ -7,6 +7,9 @@
+ #include <linux/string.h>
+ #include <linux/syscalls.h>
+
++// HACK for compulab cm-x270
++#include <asm/arch/cm-x270.h>
++
+ static __initdata char *message;
+ static void __init error(char *x)
+ {
+@@ -550,7 +553,20 @@ static int __init populate_rootfs(void)
+ #ifdef CONFIG_BLK_DEV_INITRD
+ if (initrd_start) {
+ #ifdef CONFIG_BLK_DEV_RAM
++
++ /* hack to make initramfs work because the
++ * compulab BL does not zero out the
++ * initrd memory. This only seems to affect loading
++ * initramfs (cpio.gz) archives. Does not seem to
++ * affect ramdisks.
++ */
++ int initrd_size = *(int *)(CMX270_FLASH_RAMDISK_VIRT);
+ int fd;
++
++ initrd_end = initrd_start + initrd_size;
++ //printk("CLIFF: initrd_start = 0x%x\n", initrd_start);
++ //printk("CLIFF: initrd_end = 0x%x\n", initrd_end);
++
+ printk(KERN_INFO "checking if image is initramfs...");
+ err = unpack_to_rootfs((char *)initrd_start,
+ initrd_end - initrd_start, 1);
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0007-mmcsd_large_cards-r0.patch b/packages/linux/compulab-pxa270-2.6.22/0007-mmcsd_large_cards-r0.patch
new file mode 100644
index 0000000000..90e66b5308
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0007-mmcsd_large_cards-r0.patch
@@ -0,0 +1,36 @@
+From 26638b93f7479dc597a58e2e2b2832c6ff4c8f7b Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:02:55 -0400
+Subject: [PATCH] mmcsd_large_cards-r0
+
+---
+ drivers/mmc/card/block.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index 540ff4b..1f8d67d 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -403,6 +403,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+ {
+ struct mmc_blk_data *md;
+ int devidx, ret;
++ unsigned long cap;
+
+ devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
+ if (devidx >= MMC_NUM_MINORS)
+@@ -467,6 +468,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+
+ sprintf(md->disk->disk_name, "mmcblk%d", devidx);
+
++ if (card->csd.read_blkbits > 9)
++ md->block_bits = 9;
++ else
++ md->block_bits = card->csd.read_blkbits;
++
+ blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits);
+
+ if (!mmc_card_sd(card) && mmc_card_blockaddr(card)) {
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0008-cm-x270-nand-simplify-name.patch b/packages/linux/compulab-pxa270-2.6.22/0008-cm-x270-nand-simplify-name.patch
new file mode 100644
index 0000000000..c07f049e56
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0008-cm-x270-nand-simplify-name.patch
@@ -0,0 +1,25 @@
+From e1a243564a40d7542a62d4684f2e6ce0b95fa267 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:04:12 -0400
+Subject: [PATCH] cm-x270-nand-simplify-name
+
+---
+ drivers/mtd/nand/cmx270_nand.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mtd/nand/cmx270_nand.c b/drivers/mtd/nand/cmx270_nand.c
+index cb663ef..3654ce4 100644
+--- a/drivers/mtd/nand/cmx270_nand.c
++++ b/drivers/mtd/nand/cmx270_nand.c
+@@ -191,6 +191,8 @@ static int cmx270_init(void)
+ cmx270_nand_mtd->owner = THIS_MODULE;
+ cmx270_nand_mtd->priv = this;
+
++ cmx270_nand_mtd->name = "cm-x270-nand";
++
+ /* insert callbacks */
+ this->IO_ADDR_R = cmx270_nand_io;
+ this->IO_ADDR_W = cmx270_nand_io;
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/0009-cursor-fix.patch b/packages/linux/compulab-pxa270-2.6.22/0009-cursor-fix.patch
new file mode 100644
index 0000000000..08b0db36b0
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/0009-cursor-fix.patch
@@ -0,0 +1,43 @@
+From 94a59c25e4e0aec3c4d12e0c63e144e6af447368 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:04:42 -0400
+Subject: [PATCH] cursor-fix
+
+---
+ drivers/char/vt.c | 4 ++--
+ drivers/char/vt_ioctl.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/char/vt.c b/drivers/char/vt.c
+index 6650ae1..649474e 100644
+--- a/drivers/char/vt.c
++++ b/drivers/char/vt.c
+@@ -3491,8 +3491,8 @@ void do_blank_screen(int entering_gfx)
+ }
+ return;
+ }
+- if (blank_state != blank_normal_wait)
+- return;
++ //if (blank_state != blank_normal_wait)
++ // return;
+ blank_state = blank_off;
+
+ /* entering graphics mode? */
+diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
+index c6f6f42..94121ff 100644
+--- a/drivers/char/vt_ioctl.c
++++ b/drivers/char/vt_ioctl.c
+@@ -489,8 +489,8 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
+ if (vc->vc_mode == (unsigned char) arg)
+ return 0;
+ vc->vc_mode = (unsigned char) arg;
+- if (console != fg_console)
+- return 0;
++ //if (console != fg_console)
++ // return 0;
+ /*
+ * explicitly blank/unblank the screen if switching modes
+ */
+--
+1.5.1.6
+
diff --git a/packages/linux/compulab-pxa270-2.6.22/defconfig b/packages/linux/compulab-pxa270-2.6.22/defconfig
new file mode 100644
index 0000000000..a6966d2dad
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.22/defconfig
@@ -0,0 +1,1234 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22
+# Tue Aug 7 15:22:23 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-cm-x270"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_MACH_ARMCORE=y
+CONFIG_PXA27x=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS1,38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data)"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+CONFIG_MTD_NAND_CM_X270=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+CONFIG_DM9000=y
+CONFIG_DM9000_NOEPROM=y
+# CONFIG_SMC911X is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_PS2_ALPS is not set
+# CONFIG_MOUSE_PS2_LOGIPS2PP is not set
+# CONFIG_MOUSE_PS2_SYNAPTICS is not set
+# CONFIG_MOUSE_PS2_LIFEBOOK is not set
+# CONFIG_MOUSE_PS2_TRACKPOINT is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_UCB1400=m
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CM_X270=y
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/compulab-pxa270_2.6.16.bb b/packages/linux/compulab-pxa270_2.6.16.bb
index 0e9a43d9b6..3b576e8059 100644
--- a/packages/linux/compulab-pxa270_2.6.16.bb
+++ b/packages/linux/compulab-pxa270_2.6.16.bb
@@ -1,15 +1,19 @@
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Compulab PXA270 system"
LICENSE = "GPL"
-PR = "r2"
+PR = "r6"
# Note, the compulab package contains a binary NAND driver that is not
# EABI compatible
+# if you get a md5 sum error on x270-linux-drv.zip, compulab has probably
+# changed the binary. Remove it and the md5 file from your tmp directory,
+# and rebuild the kernel. If you still get md5 failures, contact cbrake
+# on the #oe IRC channel -- this recipe probably needs updated.
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
file://linux-2.6.16.patch;patch=1 \
file://defconfig \
- http://www.compulab.co.il/x270/download/x270-linux-drv.zip;md5sum=ac57536294406223e527367af5aefce2"
+ http://www.compulab.co.il/x270/download/x270-linux-drv.zip;md5sum=05989295a5f99055c2f60f8b6f7abb6b"
S = "${WORKDIR}/linux-2.6.16"
@@ -29,13 +33,41 @@ do_configure_prepend() {
}
do_deploy() {
+ KNAME=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${KNAME}
}
+python do_compulab_image() {
+ import os
+ import os.path
+ import struct
+
+ deploy_dir = bb.data.getVar('DEPLOY_DIR_IMAGE', d, 1)
+ kernel_name = os.path.join(deploy_dir, bb.data.expand('${KERNEL_IMAGETYPE}-${MACHINE}.bin', d))
+
+ img_file = os.path.join(deploy_dir, 'zImage-compulab-pxa270.img')
+
+ fo = open(img_file, 'wb')
+
+ image_data = open(kernel_name, 'rb').read()
+
+ # first write size into first 4 bytes
+ size_s = struct.pack('i', len(image_data))
+
+ # truncate size if we are running on a 64-bit host
+ size_s = size_s[:4]
+
+ fo.write(size_s)
+ fo.write(image_data)
+ fo.close()
+}
+
+
do_deploy[dirs] = "${S}"
-addtask deploy before do_build after do_compile
+addtask deploy before do_install after do_compile
+addtask compulab_image before do_install after do_deploy
COMPATIBLE_MACHINE = "compulab-pxa270"
diff --git a/packages/linux/compulab-pxa270_2.6.20.bb b/packages/linux/compulab-pxa270_2.6.20.bb
new file mode 100644
index 0000000000..4d83dad0d2
--- /dev/null
+++ b/packages/linux/compulab-pxa270_2.6.20.bb
@@ -0,0 +1,55 @@
+require linux.inc
+
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the Compulab PXA270 system"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
+ file://0001-gitignore.patch;patch=1 \
+ file://0002-cm-x270-base.patch;patch=1 \
+ file://0003-ramdisk_load.patch;patch=1 \
+ file://0004-nand-driver.patch;patch=1 \
+ file://0005-mmcsd_large_cards-r0.patch;patch=1 \
+ file://0006-mmcsd_no_scr_check-r0.patch;patch=1 \
+ file://defconfig \
+ "
+
+# Note, for 2.6.20, we are no longer using the compulab binary
+# flash driver -- use JFFS2 instead
+
+
+S = "${WORKDIR}/linux-2.6.20"
+
+COMPATIBLE_HOST = 'arm.*-linux'
+
+inherit kernel
+inherit package
+
+ARCH = "arm"
+KERNEL_IMAGETYPE = "zImage"
+
+FILES_kernel-image = ""
+
+do_deploy_append() {
+ KNAME=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${KNAME}
+ # Create an image file that has the size prepended (used by cm-x270 BL)
+ # The following can only be done on a little endian machine
+ # note, the following does not work on all machines as it requires a
+ # recent version of coreutils (>= 6.0). The correct solution is to code
+ # the following in Python instead
+ #size=$(stat --printf=%s ${KNAME})
+ #size_=$(printf '\%03o'\
+ #$((size & 0x000000FF))\
+ #$((size>>8 & 0x000000FF))\
+ #$((size>>16 & 0x000000FF))\
+ #$((size>>24 & 0x000000FF)))
+ #size_=${size_}'\c'
+ #echo -e $size_ > ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.img
+ #cat ${KNAME} >> ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.img
+}
+
+COMPATIBLE_MACHINE = "compulab-pxa270"
+
diff --git a/packages/linux/compulab-pxa270_2.6.22.bb b/packages/linux/compulab-pxa270_2.6.22.bb
new file mode 100644
index 0000000000..84e66e3c8f
--- /dev/null
+++ b/packages/linux/compulab-pxa270_2.6.22.bb
@@ -0,0 +1,77 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the Compulab PXA270 system"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
+ file://0001-cm-x270-base2.patch;patch=1 \
+ file://0002-cm-x270-match-type.patch;patch=1 \
+ file://0003-cm-x270-ide.patch;patch=1 \
+ file://0004-cm-x270-it8152.patch;patch=1 \
+ file://0005-cm-x270-pcmcia.patch;patch=1 \
+ file://0006-ramdisk_load.patch;patch=1 \
+ file://0007-mmcsd_large_cards-r0.patch;patch=1 \
+ file://0008-cm-x270-nand-simplify-name.patch;patch=1 \
+ file://defconfig \
+ "
+
+# file://0009-cursor-fix.patch
+
+# Note, for 2.6.22, we are no longer using the compulab binary
+# flash driver -- use JFFS2 instead
+# see notes in conf/machine/compulab-pxa270.conf
+
+S = "${WORKDIR}/linux-2.6.22"
+
+COMPATIBLE_HOST = 'arm.*-linux'
+
+inherit kernel
+inherit package
+
+ARCH = "arm"
+KERNEL_IMAGETYPE = "zImage"
+
+FILES_kernel-image = ""
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
+
+do_deploy() {
+ KNAME=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${KNAME}
+}
+
+python do_compulab_image() {
+ import os
+ import os.path
+ import struct
+
+ deploy_dir = bb.data.getVar('DEPLOY_DIR_IMAGE', d, 1)
+ kernel_name = os.path.join(deploy_dir, bb.data.expand('${KERNEL_IMAGETYPE}-${MACHINE}.bin', d))
+
+ img_file = os.path.join(deploy_dir, 'zImage-compulab-pxa270.cmx270')
+
+ fo = open(img_file, 'wb')
+
+ image_data = open(kernel_name, 'rb').read()
+
+ # first write size into first 4 bytes
+ size_s = struct.pack('i', len(image_data))
+
+ # truncate size if we are running on a 64-bit host
+ size_s = size_s[:4]
+
+ fo.write(size_s)
+ fo.write(image_data)
+ fo.close()
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_install after do_compile
+addtask compulab_image before do_install after do_deploy
+
+COMPATIBLE_MACHINE = "compulab-pxa270"
+
diff --git a/packages/linux/corgi-kernel-2.4-embedix.bb b/packages/linux/corgi-kernel-2.4-embedix.bb
index 5870ed54b9..986ee7ac40 100644
--- a/packages/linux/corgi-kernel-2.4-embedix.bb
+++ b/packages/linux/corgi-kernel-2.4-embedix.bb
@@ -1,3 +1,3 @@
MACHINE = "corgi"
-
+COMPATIBLE_HOST = "arm.*-linux"
require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/packages/linux/e680-kernel_2.6.bb b/packages/linux/e680-kernel_2.6.bb
deleted file mode 100644
index 1917275473..0000000000
--- a/packages/linux/e680-kernel_2.6.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPATIBLE_MACHINE = "(e680|a780)"
-require linux-ezx_2.6.16.13.bb
diff --git a/packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb b/packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
index 81c359f7fa..4c39b0fc90 100644
--- a/packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
+++ b/packages/linux/ep93xx-kernel_2.6.19+2.6.20-rc7.bb
@@ -51,6 +51,7 @@ do_deploy() {
do_deploy[dirs] = "${S}"
-addtask deploy before do_build after do_compile
+addtask deploy before do_package after do_install
+
diff --git a/packages/linux/ezx-kernels_2.6.bb b/packages/linux/ezx-kernels_2.6.bb
deleted file mode 100644
index 77b75d60b0..0000000000
--- a/packages/linux/ezx-kernels_2.6.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-COMPATIBLE_MACHINE = "a780"
-PROVIDES = "virtual/kernel"
-DEPENDS = "a780-kernel-2.6 e680-kernel-2.6"
diff --git a/packages/linux/fsg3-kernel_2.6.18.bb b/packages/linux/fsg3-kernel_2.6.18.bb
new file mode 100644
index 0000000000..5c6688a0af
--- /dev/null
+++ b/packages/linux/fsg3-kernel_2.6.18.bb
@@ -0,0 +1,22 @@
+# Kernel for Freecom FSG-3
+#
+# This bitbake file pulls patches and the defconfig straight
+# from the NSLU2-Linux SVN repository. Information about this
+# repository can be found at:
+# http://trac.nslu2-linux.org/kernel/
+#
+# The revision that is pulled from SVN is specified below
+IXP4XX_KERNEL_SVN_REV = "902"
+#
+# The directory containing the patches to be applied is
+# specified below
+IXP4XX_KERNEL_PATCH_DIR = "2.6.18-fsg3"
+#
+# Increment the number below (i.e. the digits after PR) when
+# the changes in SVN between revisions include changes in the
+# patches applied to the kernel, rather than simply defconfig
+# changes
+PR = "r1.${IXP4XX_KERNEL_SVN_REV}"
+
+require ixp4xx-kernel.inc
+require ixp4xx-kernel-svnpatch.inc
diff --git a/packages/linux/gta01-kernel_2.6.bb b/packages/linux/gta01-kernel_2.6.bb
deleted file mode 100644
index eaafb7e7b2..0000000000
--- a/packages/linux/gta01-kernel_2.6.bb
+++ /dev/null
@@ -1 +0,0 @@
-require linux-gta01_2.6.17.14.bb
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqpxa b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqpxa
deleted file mode 100644
index ee30cf0a42..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqpxa
+++ /dev/null
@@ -1,1578 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-
-#
-# Archimedes/A5000 Implementations (select only ONE)
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_REGISTERS is not set
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-CONFIG_ARCH_H3900=y
-CONFIG_ARCH_H1900=y
-CONFIG_ARCH_H5400=y
-# CONFIG_ARCH_H2200 is not set
-CONFIG_ARCH_AXIM=y
-CONFIG_PXA_USB=m
-CONFIG_PXA_USB_NETLINK=m
-CONFIG_PXA_USB_CHAR=m
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_XSCALE=y
-CONFIG_XSCALE_PXA250=y
-# CONFIG_XSCALE_80200_OLD is not set
-# CONFIG_CPU_32v3 is not set
-# CONFIG_CPU_32v4 is not set
-# CONFIG_SA1100_IPAQ is not set
-CONFIG_PXA_IPAQ=y
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-# CONFIG_H3600_MICRO is not set
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_IPAQ_HAS_ASIC3=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=m
-CONFIG_H5400_ASIC=m
-CONFIG_H1900_ASIC=m
-CONFIG_H1900_TS=m
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Dell Axim X5
-#
-CONFIG_AXIM_HAL=m
-
-#
-# Processor Features
-#
-# CONFIG_DISCONTIGMEM is not set
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-# CONFIG_PCMCIA_SA1100 is not set
-CONFIG_PCMCIA_PXA=m
-# CONFIG_MERCURY_BACKPAQ is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_DEBUG_VERBOSE=0
-CONFIG_MMC_SAMSUNG_ASIC=m
-# CONFIG_MMC_S3C2410 is not set
-CONFIG_MMC_H5400=m
-CONFIG_MMC_ASIC3=m
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_XIP_KERNEL is not set
-
-#
-# At least one math emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-# CONFIG_HWTIMER is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_IDP is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-
-#
-# IPSec options (FreeS/WAN)
-#
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-
-#
-# ESP always enabled with tunnel mode
-#
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-
-#
-# Wireless Pcmcia cards support
-#
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-CONFIG_ATMELWLAN=y
-CONFIG_ATMELWLAN_USB_503A_RFMD=m
-CONFIG_ATMELWLAN_PCMCIA_502A=m
-CONFIG_ATMELWLAN_PCMCIA_3COM=m
-CONFIG_ATMELWLAN_PCMCIA_502AD=m
-CONFIG_ATMELWLAN_PCMCIA_502AE=m
-CONFIG_ATMELWLAN_PCMCIA_504=m
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_PXA_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-CONFIG_NEWTONKBD=m
-# CONFIG_SA1100_PROFILER is not set
-
-#
-# Compaq iPAQ H3600 support
-#
-CONFIG_TOUCHSCREEN_H3600=m
-# CONFIG_H3600_BACKPAQ_FPGA is not set
-# CONFIG_H3600_BACKPAQ_ACCEL is not set
-# CONFIG_H3600_BACKPAQ_GASGAUGE is not set
-# CONFIG_H3600_BACKPAQ_SRAM is not set
-# CONFIG_H3600_BACKPAQ_AUDIO is not set
-# CONFIG_H3600_STOWAWAY is not set
-# CONFIG_H3800_MICROKBD is not set
-# CONFIG_SA1100_LIRC is not set
-CONFIG_H5400_BUZZER=m
-CONFIG_H5400_FSI=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_PXA_ALGO=m
-CONFIG_I2C_PXA_ADAP=m
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_PROC=m
-# CONFIG_I2C_DS1307 is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-
-#
-# Other L3 adapters
-#
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_L3_BACKPAQ is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-CONFIG_PXA_WATCHDOG=m
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_PXA_RTC=m
-CONFIG_PXA_RTC_HACK=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_TS is not set
-CONFIG_AXIM_KEY=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-# CONFIG_VIDEO_H3600_BACKPAQ is not set
-# CONFIG_VIDEO_HAWKEYE is not set
-
-#
-# Video for Linux 2 (V4L2)
-#
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-# CONFIG_FB_SA1100 is not set
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_8BPP is not set
-CONFIG_FB_PXA_16BPP=y
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_H3900_UDA1380=m
-CONFIG_SOUND_H5400=m
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_YMFPCI is not set
-# CONFIG_SOUND_YMFPCI_LEGACY is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-CONFIG_SOUND_PXA_AC97=m
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OHCI_SA1111 is not set
-CONFIG_USB_OHCI_H5400=m
-# CONFIG_USB_OHCI_S3C2410 is not set
-# CONFIG_USB_SL811HS is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3900 b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3900
deleted file mode 100644
index f4055e86c5..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3900
+++ /dev/null
@@ -1,1578 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-
-#
-# Archimedes/A5000 Implementations (select only ONE)
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_REGISTERS is not set
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-CONFIG_ARCH_H3900=y
-CONFIG_ARCH_H1900=y
-CONFIG_ARCH_H5400=y
-# CONFIG_ARCH_H2200 is not set
-CONFIG_ARCH_AXIM=y
-CONFIG_PXA_USB=m
-CONFIG_PXA_USB_NETLINK=m
-CONFIG_PXA_USB_CHAR=m
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_XSCALE=y
-CONFIG_XSCALE_PXA250=y
-# CONFIG_XSCALE_80200_OLD is not set
-# CONFIG_CPU_32v3 is not set
-# CONFIG_CPU_32v4 is not set
-# CONFIG_SA1100_IPAQ is not set
-CONFIG_PXA_IPAQ=y
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-# CONFIG_H3600_MICRO is not set
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_IPAQ_HAS_ASIC3=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=m
-CONFIG_H5400_ASIC=m
-CONFIG_H1900_ASIC=m
-CONFIG_H1900_TS=m
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Dell Axim X5
-#
-CONFIG_AXIM_HAL=m
-
-#
-# Processor Features
-#
-# CONFIG_DISCONTIGMEM is not set
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-# CONFIG_PCMCIA_SA1100 is not set
-CONFIG_PCMCIA_PXA=m
-# CONFIG_MERCURY_BACKPAQ is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_DEBUG_VERBOSE is not set
-CONFIG_MMC_SAMSUNG_ASIC=m
-# CONFIG_MMC_S3C2410 is not set
-CONFIG_MMC_H5400=m
-CONFIG_MMC_ASIC3=m
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_XIP_KERNEL is not set
-
-#
-# At least one math emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-# CONFIG_HWTIMER is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_IDP is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-
-#
-# IPSec options (FreeS/WAN)
-#
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-
-#
-# ESP always enabled with tunnel mode
-#
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-
-#
-# Wireless Pcmcia cards support
-#
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-CONFIG_ATMELWLAN=y
-CONFIG_ATMELWLAN_USB_503A_RFMD=m
-CONFIG_ATMELWLAN_PCMCIA_502A=m
-CONFIG_ATMELWLAN_PCMCIA_3COM=m
-CONFIG_ATMELWLAN_PCMCIA_502AD=m
-CONFIG_ATMELWLAN_PCMCIA_502AE=m
-CONFIG_ATMELWLAN_PCMCIA_504=m
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_PXA_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-CONFIG_NEWTONKBD=m
-# CONFIG_SA1100_PROFILER is not set
-
-#
-# Compaq iPAQ H3600 support
-#
-CONFIG_TOUCHSCREEN_H3600=m
-# CONFIG_H3600_BACKPAQ_FPGA is not set
-# CONFIG_H3600_BACKPAQ_ACCEL is not set
-# CONFIG_H3600_BACKPAQ_GASGAUGE is not set
-# CONFIG_H3600_BACKPAQ_SRAM is not set
-# CONFIG_H3600_BACKPAQ_AUDIO is not set
-# CONFIG_H3600_STOWAWAY is not set
-# CONFIG_H3800_MICROKBD is not set
-# CONFIG_SA1100_LIRC is not set
-CONFIG_H5400_BUZZER=m
-CONFIG_H5400_FSI=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_PXA_ALGO=m
-CONFIG_I2C_PXA_ADAP=m
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_PROC=m
-# CONFIG_I2C_DS1307 is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-
-#
-# Other L3 adapters
-#
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_L3_BACKPAQ is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-CONFIG_PXA_WATCHDOG=m
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_PXA_RTC=m
-CONFIG_PXA_RTC_HACK=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_TS is not set
-CONFIG_AXIM_KEY=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-# CONFIG_VIDEO_H3600_BACKPAQ is not set
-# CONFIG_VIDEO_HAWKEYE is not set
-
-#
-# Video for Linux 2 (V4L2)
-#
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-# CONFIG_FB_SA1100 is not set
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_8BPP is not set
-CONFIG_FB_PXA_16BPP=y
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_H3900_UDA1380=m
-CONFIG_SOUND_H5400=m
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_YMFPCI is not set
-# CONFIG_SOUND_YMFPCI_LEGACY is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-CONFIG_SOUND_PXA_AC97=m
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OHCI_SA1111 is not set
-CONFIG_USB_OHCI_H5400=m
-# CONFIG_USB_OHCI_S3C2410 is not set
-# CONFIG_USB_SL811HS is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/mmc_h5400.patch b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/mmc_h5400.patch
deleted file mode 100644
index 2f75747ebf..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.4/mmc_h5400.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- kernel/drivers/mmc/mmc_h5400.c.old 2004-12-06 20:41:32.000000000 +0000
-+++ kernel/drivers/mmc/mmc_h5400.c 2004-12-06 20:42:02.000000000 +0000
-@@ -28,6 +28,7 @@
- #include <asm/irq.h>
- #include <asm/io.h> /* ioremap() */
- #include <asm/unaligned.h>
-+#include <asm/mach-types.h>
-
- #include <asm/arch/hardware.h>
- #include <asm/arch/h5400-gpio.h>
-@@ -97,6 +98,9 @@
- {
- int retval;
-
-+ if (!machine_is_h5400())
-+ return -ENODEV;
-+
- h5400_mmc_lowlevel.sd_base = ioremap(H5400_ASIC_PHYS + _H5400_ASIC_SDI_Base, 0x10000) + 0x30;
- retval = s3c_mmc_register_slot(&h5400_mmc_lowlevel);
- if ( retval < 0 )
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/defconfig-h3900 b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/defconfig-h3900
deleted file mode 100644
index d72096cc2f..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.5/defconfig-h3900
+++ /dev/null
@@ -1,1447 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_REGISTERS is not set
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-CONFIG_ARCH_H3900=y
-CONFIG_ARCH_H1900=y
-CONFIG_ARCH_H5400=y
-# CONFIG_ARCH_H2200 is not set
-CONFIG_ARCH_AXIM=y
-CONFIG_PXA_USB=m
-CONFIG_PXA_USB_NETLINK=m
-CONFIG_PXA_USB_CHAR=m
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_XSCALE=y
-CONFIG_XSCALE_PXA250=y
-# CONFIG_XSCALE_80200_OLD is not set
-# CONFIG_CPU_32v3 is not set
-# CONFIG_CPU_32v4 is not set
-# CONFIG_SA1100_IPAQ is not set
-CONFIG_PXA_IPAQ=y
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-# CONFIG_H3600_MICRO is not set
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_IPAQ_HAS_ASIC3=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=m
-CONFIG_H5400_ASIC=m
-CONFIG_H1900_ASIC=m
-CONFIG_H1900_TS=m
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Dell Axim X5
-#
-CONFIG_AXIM_HAL=m
-# CONFIG_DISCONTIGMEM is not set
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-# CONFIG_PCMCIA_SA1100 is not set
-CONFIG_PCMCIA_PXA=m
-# CONFIG_MERCURY_BACKPAQ is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_SAMSUNG_ASIC=m
-# CONFIG_MMC_S3C2410 is not set
-CONFIG_MMC_H5400=m
-CONFIG_MMC_ASIC3=m
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_XIP_KERNEL is not set
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-# CONFIG_HWTIMER is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_IDP is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_AIRO_CS=m
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-# CONFIG_ATMELWLAN is not set
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502A is not set
-# CONFIG_ATMELWLAN_PCMCIA_3COM is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AE is not set
-# CONFIG_ATMELWLAN_PCMCIA_504 is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-# CONFIG_DONGLE is not set
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_PXA_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-CONFIG_NEWTONKBD=m
-# CONFIG_SA1100_PROFILER is not set
-CONFIG_TOUCHSCREEN_H3600=m
-# CONFIG_H3600_BACKPAQ_FPGA is not set
-# CONFIG_H3600_BACKPAQ_ACCEL is not set
-# CONFIG_H3600_BACKPAQ_GASGAUGE is not set
-# CONFIG_H3600_BACKPAQ_SRAM is not set
-# CONFIG_H3600_BACKPAQ_AUDIO is not set
-# CONFIG_H3600_STOWAWAY is not set
-# CONFIG_H3800_MICROKBD is not set
-# CONFIG_SA1100_LIRC is not set
-CONFIG_H5400_BUZZER=m
-CONFIG_H5400_FSI=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_PXA_ALGO=m
-CONFIG_I2C_PXA_ADAP=m
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_PROC=m
-# CONFIG_I2C_DS1307 is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_L3_BACKPAQ is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-CONFIG_PXA_WATCHDOG=m
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_PXA_RTC=m
-CONFIG_PXA_RTC_HACK=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_TS is not set
-CONFIG_AXIM_KEY=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-# CONFIG_VIDEO_H3600_BACKPAQ is not set
-# CONFIG_VIDEO_HAWKEYE is not set
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-# CONFIG_FB_SA1100 is not set
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_8BPP is not set
-CONFIG_FB_PXA_16BPP=y
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_H3900_UDA1380=m
-CONFIG_SOUND_H5400=m
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_YMFPCI is not set
-# CONFIG_SOUND_YMFPCI_LEGACY is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-CONFIG_SOUND_PXA_AC97=m
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OHCI_SA1111 is not set
-CONFIG_USB_OHCI_H5400=m
-CONFIG_USB_SL811HS=m
-CONFIG_USB_SL811HS_CS=m
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_QC is not set
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-CONFIG_USB_SERIAL_IPAQ=m
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BLUEZ_HCIUSB=m
-# CONFIG_BLUEZ_HCIUSB_SCO is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/defconfig-h3900 b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/defconfig-h3900
deleted file mode 100644
index 5c87c3925f..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh37.6/defconfig-h3900
+++ /dev/null
@@ -1,1468 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_REGISTERS is not set
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-CONFIG_ARCH_H3900=y
-CONFIG_ARCH_H1900=y
-CONFIG_ARCH_H5400=y
-# CONFIG_ARCH_H2200 is not set
-CONFIG_ARCH_AXIM=y
-CONFIG_PXA_USB=m
-CONFIG_PXA_USB_NETLINK=m
-CONFIG_PXA_USB_CHAR=m
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_XSCALE=y
-CONFIG_XSCALE_PXA250=y
-# CONFIG_XSCALE_80200_OLD is not set
-# CONFIG_CPU_32v3 is not set
-# CONFIG_CPU_32v4 is not set
-# CONFIG_SA1100_IPAQ is not set
-CONFIG_PXA_IPAQ=y
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-# CONFIG_H3600_MICRO is not set
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_IPAQ_HAS_ASIC3=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=m
-CONFIG_H5400_ASIC=m
-CONFIG_H1900_ASIC=m
-CONFIG_H1900_TS=m
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Dell Axim X5
-#
-CONFIG_AXIM_HAL=m
-# CONFIG_DISCONTIGMEM is not set
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-# CONFIG_PCMCIA_SA1100 is not set
-CONFIG_PCMCIA_PXA=m
-# CONFIG_MERCURY_BACKPAQ is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_SAMSUNG_ASIC=m
-# CONFIG_MMC_S3C2410 is not set
-CONFIG_MMC_H5400=m
-CONFIG_MMC_ASIC3=m
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_XIP_KERNEL is not set
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-# CONFIG_HWTIMER is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_IDP is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_AIRO_CS=m
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-# CONFIG_ATMELWLAN is not set
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502A is not set
-# CONFIG_ATMELWLAN_PCMCIA_3COM is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AE is not set
-# CONFIG_ATMELWLAN_PCMCIA_504 is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-# CONFIG_DONGLE is not set
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_PXA_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-CONFIG_NEWTONKBD=m
-# CONFIG_SA1100_PROFILER is not set
-CONFIG_TOUCHSCREEN_H3600=m
-# CONFIG_H3600_BACKPAQ_FPGA is not set
-# CONFIG_H3600_BACKPAQ_ACCEL is not set
-# CONFIG_H3600_BACKPAQ_GASGAUGE is not set
-# CONFIG_H3600_BACKPAQ_SRAM is not set
-# CONFIG_H3600_BACKPAQ_AUDIO is not set
-# CONFIG_H3600_STOWAWAY is not set
-# CONFIG_H3800_MICROKBD is not set
-# CONFIG_SA1100_LIRC is not set
-CONFIG_H5400_BUZZER=m
-CONFIG_H5400_FSI=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_PXA_ALGO=m
-CONFIG_I2C_PXA_ADAP=m
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_PROC=m
-# CONFIG_I2C_DS1307 is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_L3_BACKPAQ is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-CONFIG_PXA_WATCHDOG=m
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_PXA_RTC=m
-CONFIG_PXA_RTC_HACK=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_TS is not set
-CONFIG_AXIM_KEY=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-# CONFIG_VIDEO_H3600_BACKPAQ is not set
-# CONFIG_VIDEO_HAWKEYE is not set
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-# CONFIG_FB_SA1100 is not set
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_8BPP is not set
-CONFIG_FB_PXA_16BPP=y
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_H3900_UDA1380=m
-CONFIG_SOUND_H5400=m
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_YMFPCI is not set
-# CONFIG_SOUND_YMFPCI_LEGACY is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-CONFIG_SOUND_PXA_AC97=m
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OHCI_SA1111 is not set
-CONFIG_USB_OHCI_H5400=m
-CONFIG_USB_SL811HS=m
-CONFIG_USB_SL811HS_CS=m
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_QC is not set
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-CONFIG_USB_SERIAL_IPAQ=m
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Support for USB gadgets
-#
-CONFIG_USB_GADGET=m
-CONFIG_USB_GADGET_PXA2XX=y
-# CONFIG_USB_GADGET_N9604 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_SUPERH is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_CONTROLLER is not set
-CONFIG_USB_PXA2XX=m
-CONFIG_USB_GADGET_CONTROLLER=m
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BLUEZ_HCIUSB=m
-# CONFIG_BLUEZ_HCIUSB_SCO is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/defconfig-h3900 b/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/defconfig-h3900
deleted file mode 100644
index dcc9feff52..0000000000
--- a/packages/linux/handhelds-pxa-2.4.19-rmk6-pxa1-hh39/defconfig-h3900
+++ /dev/null
@@ -1,1488 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-# CONFIG_SA1100_USB is not set
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-# CONFIG_REGISTERS is not set
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-CONFIG_ARCH_H3900=y
-CONFIG_ARCH_H1900=y
-CONFIG_ARCH_H5400=y
-# CONFIG_ARCH_H2200 is not set
-CONFIG_ARCH_AXIM=y
-CONFIG_PXA_USB=m
-CONFIG_PXA_USB_NETLINK=m
-CONFIG_PXA_USB_CHAR=m
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-# CONFIG_CPU_SA1100 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_XSCALE=y
-CONFIG_XSCALE_PXA250=y
-# CONFIG_XSCALE_80200_OLD is not set
-# CONFIG_CPU_32v3 is not set
-# CONFIG_CPU_32v4 is not set
-# CONFIG_SA1100_IPAQ is not set
-CONFIG_PXA_IPAQ=y
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-# CONFIG_H3600_MICRO is not set
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_IPAQ_HAS_ASIC3=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=m
-CONFIG_H5400_ASIC=m
-CONFIG_H1900_ASIC=m
-CONFIG_H1900_TS=m
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Dell Axim X5
-#
-CONFIG_AXIM_HAL=m
-# CONFIG_DISCONTIGMEM is not set
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-# CONFIG_PCMCIA_SA1100 is not set
-CONFIG_PCMCIA_PXA=m
-CONFIG_MERCURY_BACKPAQ=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_SAMSUNG_ASIC=m
-# CONFIG_MMC_S3C2410 is not set
-CONFIG_MMC_H5400=m
-CONFIG_MMC_ASIC3=m
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_XIP_KERNEL is not set
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-# CONFIG_HWTIMER is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_IDP is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_IXP425 is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_NOR_TOTO is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-# CONFIG_MTD_DOCECC is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_SPIA is not set
-# CONFIG_MTD_NAND_TOTO is not set
-# CONFIG_MTD_NAND_AUTCPU12 is not set
-# CONFIG_MTD_NAND_EDB7312 is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_AIRO_CS=m
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-# CONFIG_ATMELWLAN is not set
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502A is not set
-# CONFIG_ATMELWLAN_PCMCIA_3COM is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AE is not set
-# CONFIG_ATMELWLAN_PCMCIA_504 is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-# CONFIG_DONGLE is not set
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_PXA_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-CONFIG_NEWTONKBD=m
-# CONFIG_SA1100_PROFILER is not set
-CONFIG_TOUCHSCREEN_H3600=m
-CONFIG_H3600_BACKPAQ_FPGA=m
-CONFIG_H3600_BACKPAQ_ACCEL=m
-CONFIG_H3600_BACKPAQ_GASGAUGE=m
-CONFIG_H3600_BACKPAQ_SRAM=m
-CONFIG_H3600_BACKPAQ_AUDIO=m
-# CONFIG_H3600_STOWAWAY is not set
-# CONFIG_H3800_MICROKBD is not set
-# CONFIG_SA1100_LIRC is not set
-CONFIG_H5400_BUZZER=m
-CONFIG_H5400_FSI=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_PXA_ALGO=m
-CONFIG_I2C_PXA_ADAP=m
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_PROC=m
-# CONFIG_I2C_DS1307 is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_L3_BACKPAQ is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-CONFIG_PXA_WATCHDOG=m
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_PXA_RTC=m
-CONFIG_PXA_RTC_HACK=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_TS is not set
-CONFIG_AXIM_KEY=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-CONFIG_VIDEO_H3600_BACKPAQ=m
-# CONFIG_VIDEO_HAWKEYE is not set
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_WRITEBUFFER is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_LZO is not set
-# CONFIG_JFFS2_LZARI is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_PROC is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-# CONFIG_FB_SA1100 is not set
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_8BPP is not set
-CONFIG_FB_PXA_16BPP=y
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_H3900_UDA1380=m
-CONFIG_SOUND_H5400=m
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_YMFPCI is not set
-# CONFIG_SOUND_YMFPCI_LEGACY is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-CONFIG_SOUND_PXA_AC97=m
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OHCI_SA1111 is not set
-CONFIG_USB_OHCI_H5400=m
-CONFIG_USB_SL811HS=m
-CONFIG_USB_SL811HS_CS=m
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-CONFIG_USB_BLUETOOTH=m
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-CONFIG_USB_HIDDEV=y
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_QC is not set
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Support for USB gadgets
-#
-CONFIG_USB_GADGET=m
-CONFIG_USB_GADGET_PXA2XX=y
-# CONFIG_USB_GADGET_N9604 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_SUPERH is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_CONTROLLER is not set
-CONFIG_USB_PXA2XX=m
-CONFIG_USB_GADGET_CONTROLLER=m
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_REED_SOLOMON is not set
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/defconfig-ipaqsa b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/defconfig-ipaqsa
deleted file mode 100644
index f144aa6c17..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/defconfig-ipaqsa
+++ /dev/null
@@ -1,1505 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-
-#
-# Archimedes/A5000 Implementations (select only ONE)
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_H3100=y
-CONFIG_SA1100_H3600=y
-CONFIG_SA1100_H3800=y
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-CONFIG_SA1100_USB=m
-CONFIG_SA1100_USB_NETLINK=m
-CONFIG_SA1100_USB_CHAR=m
-CONFIG_REGISTERS=m
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-# CONFIG_ARCH_H3900 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_AXIM is not set
-# CONFIG_PXA_USB is not set
-# CONFIG_PXA_USB_NETLINK is not set
-# CONFIG_PXA_USB_CHAR is not set
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-CONFIG_CPU_SA1100=y
-# CONFIG_CPU_32v3 is not set
-CONFIG_CPU_32v4=y
-CONFIG_SA1100_IPAQ=y
-# CONFIG_PXA_IPAQ is not set
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-CONFIG_H3600_MICRO=m
-CONFIG_IPAQ_HAS_ROSELLA=y
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=y
-# CONFIG_H5400_ASIC is not set
-# CONFIG_H1900_ASIC is not set
-# CONFIG_H1900_TS is not set
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Processor Features
-#
-CONFIG_DISCONTIGMEM=y
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-CONFIG_ISA=y
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-CONFIG_PCMCIA_SA1100=m
-# CONFIG_PCMCIA_PXA is not set
-CONFIG_MERCURY_BACKPAQ=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_DEBUG_VERBOSE=0
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-
-#
-# At least one math emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-CONFIG_HWTIMER=m
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-CONFIG_MTD_BLKMTD=m
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-
-#
-# IPSec options (FreeS/WAN)
-#
-CONFIG_IPSEC_IPIP=y
-CONFIG_IPSEC_AH=y
-CONFIG_IPSEC_AUTH_HMAC_MD5=y
-CONFIG_IPSEC_AUTH_HMAC_SHA1=y
-CONFIG_IPSEC_ESP=y
-CONFIG_IPSEC_ENC_3DES=y
-CONFIG_IPSEC_IPCOMP=y
-CONFIG_IPSEC_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-
-#
-# Wireless Pcmcia cards support
-#
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-CONFIG_ATMELWLAN=y
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-CONFIG_ATMELWLAN_PCMCIA_502A=m
-CONFIG_ATMELWLAN_PCMCIA_3COM=m
-CONFIG_ATMELWLAN_PCMCIA_502AD=m
-CONFIG_ATMELWLAN_PCMCIA_502AE=m
-CONFIG_ATMELWLAN_PCMCIA_504=m
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_SA1100_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-CONFIG_CHR_DEV_ST=m
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=m
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SA1100_DEFAULT_BAUDRATE=115200
-CONFIG_SERIAL_H3800_ASIC=m
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-CONFIG_NEWTONKBD=m
-CONFIG_SA1100_PROFILER=m
-
-#
-# Compaq iPAQ H3600 support
-#
-CONFIG_TOUCHSCREEN_H3600=m
-CONFIG_H3600_BACKPAQ_FPGA=m
-CONFIG_H3600_BACKPAQ_ACCEL=m
-CONFIG_H3600_BACKPAQ_GASGAUGE=m
-CONFIG_H3600_BACKPAQ_SRAM=m
-CONFIG_H3600_BACKPAQ_AUDIO=m
-CONFIG_H3600_STOWAWAY=m
-CONFIG_H3800_MICROKBD=m
-CONFIG_SA1100_LIRC=m
-# CONFIG_H5400_BUZZER is not set
-# CONFIG_H5400_FSI is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# L3 serial bus support
-#
-CONFIG_L3=y
-CONFIG_L3_ALGOBIT=y
-CONFIG_L3_BIT_SA1100_GPIO=y
-
-#
-# Other L3 adapters
-#
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-CONFIG_L3_BACKPAQ=m
-CONFIG_BIT_SA1100_GPIO=y
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-# CONFIG_PXA_WATCHDOG is not set
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_SA1100_RTC=m
-# CONFIG_PXA_RTC_HACK is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-# CONFIG_PCMCIA_MOBILISCAN_CS is not set
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-CONFIG_VIDEO_H3600_BACKPAQ=m
-# CONFIG_VIDEO_HAWKEYE is not set
-
-#
-# Video for Linux 2 (V4L2)
-#
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MQ1100 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-CONFIG_FBCON_CFB4=y
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-CONFIG_FBCON_FONTWIDTH8_ONLY=y
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_SA1100=m
-CONFIG_SOUND_UDA1341=m
-# CONFIG_SOUND_SA1100_MONO is not set
-# CONFIG_SOUND_ASSABET_UDA1341 is not set
-CONFIG_SOUND_H3600_UDA1341=m
-# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
-# CONFIG_SOUND_SA1111_UDA1341 is not set
-# CONFIG_SOUND_SA1100SSP is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-# CONFIG_SOUND_PXA_AC97 is not set
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-# CONFIG_USB_OHCI is not set
-# CONFIG_USB_OHCI_SA1111 is not set
-# CONFIG_USB_OHCI_H5400 is not set
-# CONFIG_USB_OHCI_S3C2410 is not set
-CONFIG_USB_SL811HS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_AUDIO is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/disable-pcmcia-probe.patch b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/disable-pcmcia-probe.patch
deleted file mode 100644
index 79ba036323..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/disable-pcmcia-probe.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- linux/drivers/pcmcia/Config.in~disable-pcmcia-probe 2003-05-13 11:18:23.000000000 +0200
-+++ linux/drivers/pcmcia/Config.in 2004-05-27 13:59:50.000000000 +0200
-@@ -15,9 +15,6 @@
- tristate 'PCMCIA/CardBus support' CONFIG_PCMCIA
- if [ "$CONFIG_PCMCIA" != "n" ]; then
- # yes, I really mean the following...
-- if [ "$CONFIG_ISA" = "y" -o "$CONFIG_ARCH_SA1100" = "y" ]; then
-- define_bool CONFIG_PCMCIA_PROBE y
-- fi
- if [ "$CONFIG_PCI" != "n" ]; then
- bool ' CardBus support' CONFIG_CARDBUS
- fi
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/ipsec.patch b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/ipsec.patch
deleted file mode 100644
index 545175b7fc..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/ipsec.patch
+++ /dev/null
@@ -1,1446 +0,0 @@
---- linux/net/Makefile 3 Dec 2003 19:15:16 -0000 1.25
-+++ linux/net/Makefile 20 Feb 2003 15:50:38 -0000 1.24
-@@ -19,6 +19,7 @@
- subdir-$(CONFIG_NETFILTER) += ipv4/netfilter
- subdir-$(CONFIG_UNIX) += unix
- subdir-$(CONFIG_IPV6) += ipv6
-+subdir-$(CONFIG_IPSEC) += ipsec
-
- ifneq ($(CONFIG_IPV6),n)
- ifneq ($(CONFIG_IPV6),)
---- /dev/null 2004-02-02 20:32:13.000000000 +0000
-+++ linux/include/zlib/zlib.h 2004-07-05 23:56:59.000000000 +0100
-@@ -0,0 +1,893 @@
-+/* zlib.h -- interface of the 'zlib' general purpose compression library
-+ version 1.1.4, March 11th, 2002
-+
-+ Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
-+
-+ This software is provided 'as-is', without any express or implied
-+ warranty. In no event will the authors be held liable for any damages
-+ arising from the use of this software.
-+
-+ Permission is granted to anyone to use this software for any purpose,
-+ including commercial applications, and to alter it and redistribute it
-+ freely, subject to the following restrictions:
-+
-+ 1. The origin of this software must not be misrepresented; you must not
-+ claim that you wrote the original software. If you use this software
-+ in a product, an acknowledgment in the product documentation would be
-+ appreciated but is not required.
-+ 2. Altered source versions must be plainly marked as such, and must not be
-+ misrepresented as being the original software.
-+ 3. This notice may not be removed or altered from any source distribution.
-+
-+ Jean-loup Gailly Mark Adler
-+ jloup@gzip.org madler@alumni.caltech.edu
-+
-+
-+ The data format used by the zlib library is described by RFCs (Request for
-+ Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
-+ (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
-+*/
-+
-+#ifndef _ZLIB_H
-+#define _ZLIB_H
-+
-+#include "zconf.h"
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#define ZLIB_VERSION "1.1.4"
-+
-+/*
-+ The 'zlib' compression library provides in-memory compression and
-+ decompression functions, including integrity checks of the uncompressed
-+ data. This version of the library supports only one compression method
-+ (deflation) but other algorithms will be added later and will have the same
-+ stream interface.
-+
-+ Compression can be done in a single step if the buffers are large
-+ enough (for example if an input file is mmap'ed), or can be done by
-+ repeated calls of the compression function. In the latter case, the
-+ application must provide more input and/or consume the output
-+ (providing more output space) before each call.
-+
-+ The library also supports reading and writing files in gzip (.gz) format
-+ with an interface similar to that of stdio.
-+
-+ The library does not install any signal handler. The decoder checks
-+ the consistency of the compressed data, so the library should never
-+ crash even in case of corrupted input.
-+*/
-+
-+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
-+typedef void (*free_func) OF((voidpf opaque, voidpf address));
-+
-+struct internal_state;
-+
-+typedef struct z_stream_s {
-+ Bytef *next_in; /* next input byte */
-+ uInt avail_in; /* number of bytes available at next_in */
-+ uLong total_in; /* total nb of input bytes read so far */
-+
-+ Bytef *next_out; /* next output byte should be put there */
-+ uInt avail_out; /* remaining free space at next_out */
-+ uLong total_out; /* total nb of bytes output so far */
-+
-+ const char *msg; /* last error message, NULL if no error */
-+ struct internal_state FAR *state; /* not visible by applications */
-+
-+ alloc_func zalloc; /* used to allocate the internal state */
-+ free_func zfree; /* used to free the internal state */
-+ voidpf opaque; /* private data object passed to zalloc and zfree */
-+
-+ int data_type; /* best guess about the data type: ascii or binary */
-+ uLong adler; /* adler32 value of the uncompressed data */
-+ uLong reserved; /* reserved for future use */
-+} z_stream;
-+
-+typedef z_stream FAR *z_streamp;
-+
-+/*
-+ The application must update next_in and avail_in when avail_in has
-+ dropped to zero. It must update next_out and avail_out when avail_out
-+ has dropped to zero. The application must initialize zalloc, zfree and
-+ opaque before calling the init function. All other fields are set by the
-+ compression library and must not be updated by the application.
-+
-+ The opaque value provided by the application will be passed as the first
-+ parameter for calls of zalloc and zfree. This can be useful for custom
-+ memory management. The compression library attaches no meaning to the
-+ opaque value.
-+
-+ zalloc must return Z_NULL if there is not enough memory for the object.
-+ If zlib is used in a multi-threaded application, zalloc and zfree must be
-+ thread safe.
-+
-+ On 16-bit systems, the functions zalloc and zfree must be able to allocate
-+ exactly 65536 bytes, but will not be required to allocate more than this
-+ if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
-+ pointers returned by zalloc for objects of exactly 65536 bytes *must*
-+ have their offset normalized to zero. The default allocation function
-+ provided by this library ensures this (see zutil.c). To reduce memory
-+ requirements and avoid any allocation of 64K objects, at the expense of
-+ compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-+
-+ The fields total_in and total_out can be used for statistics or
-+ progress reports. After compression, total_in holds the total size of
-+ the uncompressed data and may be saved for use in the decompressor
-+ (particularly if the decompressor wants to decompress everything in
-+ a single step).
-+*/
-+
-+ /* constants */
-+
-+#define Z_NO_FLUSH 0
-+#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
-+#define Z_SYNC_FLUSH 2
-+#define Z_FULL_FLUSH 3
-+#define Z_FINISH 4
-+/* Allowed flush values; see deflate() below for details */
-+
-+#define Z_OK 0
-+#define Z_STREAM_END 1
-+#define Z_NEED_DICT 2
-+#define Z_ERRNO (-1)
-+#define Z_STREAM_ERROR (-2)
-+#define Z_DATA_ERROR (-3)
-+#define Z_MEM_ERROR (-4)
-+#define Z_BUF_ERROR (-5)
-+#define Z_VERSION_ERROR (-6)
-+/* Return codes for the compression/decompression functions. Negative
-+ * values are errors, positive values are used for special but normal events.
-+ */
-+
-+#define Z_NO_COMPRESSION 0
-+#define Z_BEST_SPEED 1
-+#define Z_BEST_COMPRESSION 9
-+#define Z_DEFAULT_COMPRESSION (-1)
-+/* compression levels */
-+
-+#define Z_FILTERED 1
-+#define Z_HUFFMAN_ONLY 2
-+#define Z_DEFAULT_STRATEGY 0
-+/* compression strategy; see deflateInit2() below for details */
-+
-+#define Z_BINARY 0
-+#define Z_ASCII 1
-+#define Z_UNKNOWN 2
-+/* Possible values of the data_type field */
-+
-+#define Z_DEFLATED 8
-+/* The deflate compression method (the only one supported in this version) */
-+
-+#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
-+
-+#define zlib_version zlibVersion()
-+/* for compatibility with versions < 1.0.2 */
-+
-+ /* basic functions */
-+
-+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
-+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
-+ If the first character differs, the library code actually used is
-+ not compatible with the zlib.h header file used by the application.
-+ This check is automatically made by deflateInit and inflateInit.
-+ */
-+
-+/*
-+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
-+
-+ Initializes the internal stream state for compression. The fields
-+ zalloc, zfree and opaque must be initialized before by the caller.
-+ If zalloc and zfree are set to Z_NULL, deflateInit updates them to
-+ use default allocation functions.
-+
-+ The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
-+ 1 gives best speed, 9 gives best compression, 0 gives no compression at
-+ all (the input data is simply copied a block at a time).
-+ Z_DEFAULT_COMPRESSION requests a default compromise between speed and
-+ compression (currently equivalent to level 6).
-+
-+ deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
-+ enough memory, Z_STREAM_ERROR if level is not a valid compression level,
-+ Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
-+ with the version assumed by the caller (ZLIB_VERSION).
-+ msg is set to null if there is no error message. deflateInit does not
-+ perform any compression: this will be done by deflate().
-+*/
-+
-+
-+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
-+/*
-+ deflate compresses as much data as possible, and stops when the input
-+ buffer becomes empty or the output buffer becomes full. It may introduce some
-+ output latency (reading input without producing any output) except when
-+ forced to flush.
-+
-+ The detailed semantics are as follows. deflate performs one or both of the
-+ following actions:
-+
-+ - Compress more input starting at next_in and update next_in and avail_in
-+ accordingly. If not all input can be processed (because there is not
-+ enough room in the output buffer), next_in and avail_in are updated and
-+ processing will resume at this point for the next call of deflate().
-+
-+ - Provide more output starting at next_out and update next_out and avail_out
-+ accordingly. This action is forced if the parameter flush is non zero.
-+ Forcing flush frequently degrades the compression ratio, so this parameter
-+ should be set only when necessary (in interactive applications).
-+ Some output may be provided even if flush is not set.
-+
-+ Before the call of deflate(), the application should ensure that at least
-+ one of the actions is possible, by providing more input and/or consuming
-+ more output, and updating avail_in or avail_out accordingly; avail_out
-+ should never be zero before the call. The application can consume the
-+ compressed output when it wants, for example when the output buffer is full
-+ (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
-+ and with zero avail_out, it must be called again after making room in the
-+ output buffer because there might be more output pending.
-+
-+ If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
-+ flushed to the output buffer and the output is aligned on a byte boundary, so
-+ that the decompressor can get all input data available so far. (In particular
-+ avail_in is zero after the call if enough output space has been provided
-+ before the call.) Flushing may degrade compression for some compression
-+ algorithms and so it should be used only when necessary.
-+
-+ If flush is set to Z_FULL_FLUSH, all output is flushed as with
-+ Z_SYNC_FLUSH, and the compression state is reset so that decompression can
-+ restart from this point if previous compressed data has been damaged or if
-+ random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
-+ the compression.
-+
-+ If deflate returns with avail_out == 0, this function must be called again
-+ with the same value of the flush parameter and more output space (updated
-+ avail_out), until the flush is complete (deflate returns with non-zero
-+ avail_out).
-+
-+ If the parameter flush is set to Z_FINISH, pending input is processed,
-+ pending output is flushed and deflate returns with Z_STREAM_END if there
-+ was enough output space; if deflate returns with Z_OK, this function must be
-+ called again with Z_FINISH and more output space (updated avail_out) but no
-+ more input data, until it returns with Z_STREAM_END or an error. After
-+ deflate has returned Z_STREAM_END, the only possible operations on the
-+ stream are deflateReset or deflateEnd.
-+
-+ Z_FINISH can be used immediately after deflateInit if all the compression
-+ is to be done in a single step. In this case, avail_out must be at least
-+ 0.1% larger than avail_in plus 12 bytes. If deflate does not return
-+ Z_STREAM_END, then it must be called again as described above.
-+
-+ deflate() sets strm->adler to the adler32 checksum of all input read
-+ so far (that is, total_in bytes).
-+
-+ deflate() may update data_type if it can make a good guess about
-+ the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
-+ binary. This field is only for information purposes and does not affect
-+ the compression algorithm in any manner.
-+
-+ deflate() returns Z_OK if some progress has been made (more input
-+ processed or more output produced), Z_STREAM_END if all input has been
-+ consumed and all output has been produced (only when flush is set to
-+ Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-+ if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
-+ (for example avail_in or avail_out was zero).
-+*/
-+
-+
-+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
-+/*
-+ All dynamically allocated data structures for this stream are freed.
-+ This function discards any unprocessed input and does not flush any
-+ pending output.
-+
-+ deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
-+ stream state was inconsistent, Z_DATA_ERROR if the stream was freed
-+ prematurely (some input or output was discarded). In the error case,
-+ msg may be set but then points to a static string (which must not be
-+ deallocated).
-+*/
-+
-+
-+/*
-+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
-+
-+ Initializes the internal stream state for decompression. The fields
-+ next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-+ the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
-+ value depends on the compression method), inflateInit determines the
-+ compression method from the zlib header and allocates all data structures
-+ accordingly; otherwise the allocation will be deferred to the first call of
-+ inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-+ use default allocation functions.
-+
-+ inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
-+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-+ version assumed by the caller. msg is set to null if there is no error
-+ message. inflateInit does not perform any decompression apart from reading
-+ the zlib header if present: this will be done by inflate(). (So next_in and
-+ avail_in may be modified, but next_out and avail_out are unchanged.)
-+*/
-+
-+
-+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
-+/*
-+ inflate decompresses as much data as possible, and stops when the input
-+ buffer becomes empty or the output buffer becomes full. It may some
-+ introduce some output latency (reading input without producing any output)
-+ except when forced to flush.
-+
-+ The detailed semantics are as follows. inflate performs one or both of the
-+ following actions:
-+
-+ - Decompress more input starting at next_in and update next_in and avail_in
-+ accordingly. If not all input can be processed (because there is not
-+ enough room in the output buffer), next_in is updated and processing
-+ will resume at this point for the next call of inflate().
-+
-+ - Provide more output starting at next_out and update next_out and avail_out
-+ accordingly. inflate() provides as much output as possible, until there
-+ is no more input data or no more space in the output buffer (see below
-+ about the flush parameter).
-+
-+ Before the call of inflate(), the application should ensure that at least
-+ one of the actions is possible, by providing more input and/or consuming
-+ more output, and updating the next_* and avail_* values accordingly.
-+ The application can consume the uncompressed output when it wants, for
-+ example when the output buffer is full (avail_out == 0), or after each
-+ call of inflate(). If inflate returns Z_OK and with zero avail_out, it
-+ must be called again after making room in the output buffer because there
-+ might be more output pending.
-+
-+ If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
-+ output as possible to the output buffer. The flushing behavior of inflate is
-+ not specified for values of the flush parameter other than Z_SYNC_FLUSH
-+ and Z_FINISH, but the current implementation actually flushes as much output
-+ as possible anyway.
-+
-+ inflate() should normally be called until it returns Z_STREAM_END or an
-+ error. However if all decompression is to be performed in a single step
-+ (a single call of inflate), the parameter flush should be set to
-+ Z_FINISH. In this case all pending input is processed and all pending
-+ output is flushed; avail_out must be large enough to hold all the
-+ uncompressed data. (The size of the uncompressed data may have been saved
-+ by the compressor for this purpose.) The next operation on this stream must
-+ be inflateEnd to deallocate the decompression state. The use of Z_FINISH
-+ is never required, but can be used to inform inflate that a faster routine
-+ may be used for the single inflate() call.
-+
-+ If a preset dictionary is needed at this point (see inflateSetDictionary
-+ below), inflate sets strm-adler to the adler32 checksum of the
-+ dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
-+ it sets strm->adler to the adler32 checksum of all output produced
-+ so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
-+ an error code as described below. At the end of the stream, inflate()
-+ checks that its computed adler32 checksum is equal to that saved by the
-+ compressor and returns Z_STREAM_END only if the checksum is correct.
-+
-+ inflate() returns Z_OK if some progress has been made (more input processed
-+ or more output produced), Z_STREAM_END if the end of the compressed data has
-+ been reached and all uncompressed output has been produced, Z_NEED_DICT if a
-+ preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-+ corrupted (input stream not conforming to the zlib format or incorrect
-+ adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
-+ (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
-+ enough memory, Z_BUF_ERROR if no progress is possible or if there was not
-+ enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
-+ case, the application may then call inflateSync to look for a good
-+ compression block.
-+*/
-+
-+
-+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
-+/*
-+ All dynamically allocated data structures for this stream are freed.
-+ This function discards any unprocessed input and does not flush any
-+ pending output.
-+
-+ inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-+ was inconsistent. In the error case, msg may be set but then points to a
-+ static string (which must not be deallocated).
-+*/
-+
-+ /* Advanced functions */
-+
-+/*
-+ The following functions are needed only in some special applications.
-+*/
-+
-+/*
-+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
-+ int level,
-+ int method,
-+ int windowBits,
-+ int memLevel,
-+ int strategy));
-+
-+ This is another version of deflateInit with more compression options. The
-+ fields next_in, zalloc, zfree and opaque must be initialized before by
-+ the caller.
-+
-+ The method parameter is the compression method. It must be Z_DEFLATED in
-+ this version of the library.
-+
-+ The windowBits parameter is the base two logarithm of the window size
-+ (the size of the history buffer). It should be in the range 8..15 for this
-+ version of the library. Larger values of this parameter result in better
-+ compression at the expense of memory usage. The default value is 15 if
-+ deflateInit is used instead.
-+
-+ The memLevel parameter specifies how much memory should be allocated
-+ for the internal compression state. memLevel=1 uses minimum memory but
-+ is slow and reduces compression ratio; memLevel=9 uses maximum memory
-+ for optimal speed. The default value is 8. See zconf.h for total memory
-+ usage as a function of windowBits and memLevel.
-+
-+ The strategy parameter is used to tune the compression algorithm. Use the
-+ value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-+ filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
-+ string match). Filtered data consists mostly of small values with a
-+ somewhat random distribution. In this case, the compression algorithm is
-+ tuned to compress them better. The effect of Z_FILTERED is to force more
-+ Huffman coding and less string matching; it is somewhat intermediate
-+ between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
-+ the compression ratio but not the correctness of the compressed output even
-+ if it is not set appropriately.
-+
-+ deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-+ memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
-+ method). msg is set to null if there is no error message. deflateInit2 does
-+ not perform any compression: this will be done by deflate().
-+*/
-+
-+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
-+ const Bytef *dictionary,
-+ uInt dictLength));
-+/*
-+ Initializes the compression dictionary from the given byte sequence
-+ without producing any compressed output. This function must be called
-+ immediately after deflateInit, deflateInit2 or deflateReset, before any
-+ call of deflate. The compressor and decompressor must use exactly the same
-+ dictionary (see inflateSetDictionary).
-+
-+ The dictionary should consist of strings (byte sequences) that are likely
-+ to be encountered later in the data to be compressed, with the most commonly
-+ used strings preferably put towards the end of the dictionary. Using a
-+ dictionary is most useful when the data to be compressed is short and can be
-+ predicted with good accuracy; the data can then be compressed better than
-+ with the default empty dictionary.
-+
-+ Depending on the size of the compression data structures selected by
-+ deflateInit or deflateInit2, a part of the dictionary may in effect be
-+ discarded, for example if the dictionary is larger than the window size in
-+ deflate or deflate2. Thus the strings most likely to be useful should be
-+ put at the end of the dictionary, not at the front.
-+
-+ Upon return of this function, strm->adler is set to the Adler32 value
-+ of the dictionary; the decompressor may later use this value to determine
-+ which dictionary has been used by the compressor. (The Adler32 value
-+ applies to the whole dictionary even if only a subset of the dictionary is
-+ actually used by the compressor.)
-+
-+ deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
-+ parameter is invalid (such as NULL dictionary) or the stream state is
-+ inconsistent (for example if deflate has already been called for this stream
-+ or if the compression method is bsort). deflateSetDictionary does not
-+ perform any compression: this will be done by deflate().
-+*/
-+
-+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
-+ z_streamp source));
-+/*
-+ Sets the destination stream as a complete copy of the source stream.
-+
-+ This function can be useful when several compression strategies will be
-+ tried, for example when there are several ways of pre-processing the input
-+ data with a filter. The streams that will be discarded should then be freed
-+ by calling deflateEnd. Note that deflateCopy duplicates the internal
-+ compression state which can be quite large, so this strategy is slow and
-+ can consume lots of memory.
-+
-+ deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-+ (such as zalloc being NULL). msg is left unchanged in both source and
-+ destination.
-+*/
-+
-+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
-+/*
-+ This function is equivalent to deflateEnd followed by deflateInit,
-+ but does not free and reallocate all the internal compression state.
-+ The stream will keep the same compression level and any other attributes
-+ that may have been set by deflateInit2.
-+
-+ deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-+ stream state was inconsistent (such as zalloc or state being NULL).
-+*/
-+
-+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
-+ int level,
-+ int strategy));
-+/*
-+ Dynamically update the compression level and compression strategy. The
-+ interpretation of level and strategy is as in deflateInit2. This can be
-+ used to switch between compression and straight copy of the input data, or
-+ to switch to a different kind of input data requiring a different
-+ strategy. If the compression level is changed, the input available so far
-+ is compressed with the old level (and may be flushed); the new level will
-+ take effect only at the next call of deflate().
-+
-+ Before the call of deflateParams, the stream state must be set as for
-+ a call of deflate(), since the currently available input may have to
-+ be compressed and flushed. In particular, strm->avail_out must be non-zero.
-+
-+ deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-+ stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
-+ if strm->avail_out was zero.
-+*/
-+
-+/*
-+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
-+ int windowBits));
-+
-+ This is another version of inflateInit with an extra parameter. The
-+ fields next_in, avail_in, zalloc, zfree and opaque must be initialized
-+ before by the caller.
-+
-+ The windowBits parameter is the base two logarithm of the maximum window
-+ size (the size of the history buffer). It should be in the range 8..15 for
-+ this version of the library. The default value is 15 if inflateInit is used
-+ instead. If a compressed stream with a larger window size is given as
-+ input, inflate() will return with the error code Z_DATA_ERROR instead of
-+ trying to allocate a larger window.
-+
-+ inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-+ memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
-+ memLevel). msg is set to null if there is no error message. inflateInit2
-+ does not perform any decompression apart from reading the zlib header if
-+ present: this will be done by inflate(). (So next_in and avail_in may be
-+ modified, but next_out and avail_out are unchanged.)
-+*/
-+
-+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
-+ const Bytef *dictionary,
-+ uInt dictLength));
-+/*
-+ Initializes the decompression dictionary from the given uncompressed byte
-+ sequence. This function must be called immediately after a call of inflate
-+ if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
-+ can be determined from the Adler32 value returned by this call of
-+ inflate. The compressor and decompressor must use exactly the same
-+ dictionary (see deflateSetDictionary).
-+
-+ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-+ parameter is invalid (such as NULL dictionary) or the stream state is
-+ inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-+ expected one (incorrect Adler32 value). inflateSetDictionary does not
-+ perform any decompression: this will be done by subsequent calls of
-+ inflate().
-+*/
-+
-+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
-+/*
-+ Skips invalid compressed data until a full flush point (see above the
-+ description of deflate with Z_FULL_FLUSH) can be found, or until all
-+ available input is skipped. No output is provided.
-+
-+ inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-+ if no more input was provided, Z_DATA_ERROR if no flush point has been found,
-+ or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
-+ case, the application may save the current current value of total_in which
-+ indicates where valid compressed data was found. In the error case, the
-+ application may repeatedly call inflateSync, providing more input each time,
-+ until success or end of the input data.
-+*/
-+
-+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
-+/*
-+ This function is equivalent to inflateEnd followed by inflateInit,
-+ but does not free and reallocate all the internal decompression state.
-+ The stream will keep attributes that may have been set by inflateInit2.
-+
-+ inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-+ stream state was inconsistent (such as zalloc or state being NULL).
-+*/
-+
-+
-+ /* utility functions */
-+
-+/*
-+ The following utility functions are implemented on top of the
-+ basic stream-oriented functions. To simplify the interface, some
-+ default options are assumed (compression level and memory usage,
-+ standard memory allocation functions). The source code of these
-+ utility functions can easily be modified if you need special options.
-+*/
-+
-+ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
-+ const Bytef *source, uLong sourceLen));
-+/*
-+ Compresses the source buffer into the destination buffer. sourceLen is
-+ the byte length of the source buffer. Upon entry, destLen is the total
-+ size of the destination buffer, which must be at least 0.1% larger than
-+ sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
-+ compressed buffer.
-+ This function can be used to compress a whole file at once if the
-+ input file is mmap'ed.
-+ compress returns Z_OK if success, Z_MEM_ERROR if there was not
-+ enough memory, Z_BUF_ERROR if there was not enough room in the output
-+ buffer.
-+*/
-+
-+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
-+ const Bytef *source, uLong sourceLen,
-+ int level));
-+/*
-+ Compresses the source buffer into the destination buffer. The level
-+ parameter has the same meaning as in deflateInit. sourceLen is the byte
-+ length of the source buffer. Upon entry, destLen is the total size of the
-+ destination buffer, which must be at least 0.1% larger than sourceLen plus
-+ 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-+
-+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-+ Z_STREAM_ERROR if the level parameter is invalid.
-+*/
-+
-+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
-+ const Bytef *source, uLong sourceLen));
-+/*
-+ Decompresses the source buffer into the destination buffer. sourceLen is
-+ the byte length of the source buffer. Upon entry, destLen is the total
-+ size of the destination buffer, which must be large enough to hold the
-+ entire uncompressed data. (The size of the uncompressed data must have
-+ been saved previously by the compressor and transmitted to the decompressor
-+ by some mechanism outside the scope of this compression library.)
-+ Upon exit, destLen is the actual size of the compressed buffer.
-+ This function can be used to decompress a whole file at once if the
-+ input file is mmap'ed.
-+
-+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-+ enough memory, Z_BUF_ERROR if there was not enough room in the output
-+ buffer, or Z_DATA_ERROR if the input data was corrupted.
-+*/
-+
-+
-+typedef voidp gzFile;
-+
-+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
-+/*
-+ Opens a gzip (.gz) file for reading or writing. The mode parameter
-+ is as in fopen ("rb" or "wb") but can also include a compression level
-+ ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
-+ Huffman only compression as in "wb1h". (See the description
-+ of deflateInit2 for more information about the strategy parameter.)
-+
-+ gzopen can be used to read a file which is not in gzip format; in this
-+ case gzread will directly read from the file without decompression.
-+
-+ gzopen returns NULL if the file could not be opened or if there was
-+ insufficient memory to allocate the (de)compression state; errno
-+ can be checked to distinguish the two cases (if errno is zero, the
-+ zlib error is Z_MEM_ERROR). */
-+
-+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
-+/*
-+ gzdopen() associates a gzFile with the file descriptor fd. File
-+ descriptors are obtained from calls like open, dup, creat, pipe or
-+ fileno (in the file has been previously opened with fopen).
-+ The mode parameter is as in gzopen.
-+ The next call of gzclose on the returned gzFile will also close the
-+ file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
-+ descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
-+ gzdopen returns NULL if there was insufficient memory to allocate
-+ the (de)compression state.
-+*/
-+
-+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
-+/*
-+ Dynamically update the compression level or strategy. See the description
-+ of deflateInit2 for the meaning of these parameters.
-+ gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-+ opened for writing.
-+*/
-+
-+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
-+/*
-+ Reads the given number of uncompressed bytes from the compressed file.
-+ If the input file was not in gzip format, gzread copies the given number
-+ of bytes into the buffer.
-+ gzread returns the number of uncompressed bytes actually read (0 for
-+ end of file, -1 for error). */
-+
-+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
-+ const voidp buf, unsigned len));
-+/*
-+ Writes the given number of uncompressed bytes into the compressed file.
-+ gzwrite returns the number of uncompressed bytes actually written
-+ (0 in case of error).
-+*/
-+
-+ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
-+/*
-+ Converts, formats, and writes the args to the compressed file under
-+ control of the format string, as in fprintf. gzprintf returns the number of
-+ uncompressed bytes actually written (0 in case of error).
-+*/
-+
-+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
-+/*
-+ Writes the given null-terminated string to the compressed file, excluding
-+ the terminating null character.
-+ gzputs returns the number of characters written, or -1 in case of error.
-+*/
-+
-+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
-+/*
-+ Reads bytes from the compressed file until len-1 characters are read, or
-+ a newline character is read and transferred to buf, or an end-of-file
-+ condition is encountered. The string is then terminated with a null
-+ character.
-+ gzgets returns buf, or Z_NULL in case of error.
-+*/
-+
-+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
-+/*
-+ Writes c, converted to an unsigned char, into the compressed file.
-+ gzputc returns the value that was written, or -1 in case of error.
-+*/
-+
-+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
-+/*
-+ Reads one byte from the compressed file. gzgetc returns this byte
-+ or -1 in case of end of file or error.
-+*/
-+
-+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
-+/*
-+ Flushes all pending output into the compressed file. The parameter
-+ flush is as in the deflate() function. The return value is the zlib
-+ error number (see function gzerror below). gzflush returns Z_OK if
-+ the flush parameter is Z_FINISH and all output could be flushed.
-+ gzflush should be called only when strictly necessary because it can
-+ degrade compression.
-+*/
-+
-+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
-+ z_off_t offset, int whence));
-+/*
-+ Sets the starting position for the next gzread or gzwrite on the
-+ given compressed file. The offset represents a number of bytes in the
-+ uncompressed data stream. The whence parameter is defined as in lseek(2);
-+ the value SEEK_END is not supported.
-+ If the file is opened for reading, this function is emulated but can be
-+ extremely slow. If the file is opened for writing, only forward seeks are
-+ supported; gzseek then compresses a sequence of zeroes up to the new
-+ starting position.
-+
-+ gzseek returns the resulting offset location as measured in bytes from
-+ the beginning of the uncompressed stream, or -1 in case of error, in
-+ particular if the file is opened for writing and the new starting position
-+ would be before the current position.
-+*/
-+
-+ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
-+/*
-+ Rewinds the given file. This function is supported only for reading.
-+
-+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
-+*/
-+
-+ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
-+/*
-+ Returns the starting position for the next gzread or gzwrite on the
-+ given compressed file. This position represents a number of bytes in the
-+ uncompressed data stream.
-+
-+ gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
-+*/
-+
-+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
-+/*
-+ Returns 1 when EOF has previously been detected reading the given
-+ input stream, otherwise zero.
-+*/
-+
-+ZEXTERN int ZEXPORT gzclose OF((gzFile file));
-+/*
-+ Flushes all pending output if necessary, closes the compressed file
-+ and deallocates all the (de)compression state. The return value is the zlib
-+ error number (see function gzerror below).
-+*/
-+
-+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
-+/*
-+ Returns the error message for the last error which occurred on the
-+ given compressed file. errnum is set to zlib error number. If an
-+ error occurred in the file system and not in the compression library,
-+ errnum is set to Z_ERRNO and the application may consult errno
-+ to get the exact error code.
-+*/
-+
-+ /* checksum functions */
-+
-+/*
-+ These functions are not related to compression but are exported
-+ anyway because they might be useful in applications using the
-+ compression library.
-+*/
-+
-+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
-+
-+/*
-+ Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-+ return the updated checksum. If buf is NULL, this function returns
-+ the required initial value for the checksum.
-+ An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-+ much faster. Usage example:
-+
-+ uLong adler = adler32(0L, Z_NULL, 0);
-+
-+ while (read_buffer(buffer, length) != EOF) {
-+ adler = adler32(adler, buffer, length);
-+ }
-+ if (adler != original_adler) error();
-+*/
-+
-+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
-+/*
-+ Update a running crc with the bytes buf[0..len-1] and return the updated
-+ crc. If buf is NULL, this function returns the required initial value
-+ for the crc. Pre- and post-conditioning (one's complement) is performed
-+ within this function so it shouldn't be done by the application.
-+ Usage example:
-+
-+ uLong crc = crc32(0L, Z_NULL, 0);
-+
-+ while (read_buffer(buffer, length) != EOF) {
-+ crc = crc32(crc, buffer, length);
-+ }
-+ if (crc != original_crc) error();
-+*/
-+
-+
-+ /* various hacks, don't look :) */
-+
-+/* deflateInit and inflateInit are macros to allow checking the zlib version
-+ * and the compiler's view of z_stream:
-+ */
-+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
-+ const char *version, int stream_size));
-+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
-+ const char *version, int stream_size));
-+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
-+ int windowBits, int memLevel,
-+ int strategy, const char *version,
-+ int stream_size));
-+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
-+ const char *version, int stream_size));
-+#define deflateInit(strm, level) \
-+ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
-+#define inflateInit(strm) \
-+ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
-+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-+ (strategy), ZLIB_VERSION, sizeof(z_stream))
-+#define inflateInit2(strm, windowBits) \
-+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
-+
-+
-+#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
-+ struct internal_state {int dummy;}; /* hack for buggy compilers */
-+#endif
-+
-+ZEXTERN const char * ZEXPORT zError OF((int err));
-+ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z));
-+ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void));
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* _ZLIB_H */
---- /dev/null 2004-02-02 20:32:13.000000000 +0000
-+++ linux/include/zlib/zutil.h 2004-07-05 23:59:30.000000000 +0100
-@@ -0,0 +1,225 @@
-+/* zutil.h -- internal interface and configuration of the compression library
-+ * Copyright (C) 1995-2002 Jean-loup Gailly.
-+ * For conditions of distribution and use, see copyright notice in zlib.h
-+ */
-+
-+/* WARNING: this file should *not* be used by applications. It is
-+ part of the implementation of the compression library and is
-+ subject to change. Applications should only use zlib.h.
-+ */
-+
-+/* @(#) $Id: zutil.h,v 1.1 2004/07/05 22:59:30 pb Exp $ */
-+
-+#ifndef _Z_UTIL_H
-+#define _Z_UTIL_H
-+
-+#include "zlib.h"
-+
-+#include <linux/string.h>
-+#define HAVE_MEMCPY
-+
-+#if 0 // #ifdef STDC
-+# include <stddef.h>
-+# include <string.h>
-+# include <stdlib.h>
-+#endif
-+#ifndef __KERNEL__
-+#ifdef NO_ERRNO_H
-+ extern int errno;
-+#else
-+# include <errno.h>
-+#endif
-+#endif
-+
-+#ifndef local
-+# define local static
-+#endif
-+/* compile with -Dlocal if your debugger can't find static symbols */
-+
-+typedef unsigned char uch;
-+typedef uch FAR uchf;
-+typedef unsigned short ush;
-+typedef ush FAR ushf;
-+typedef unsigned long ulg;
-+
-+extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
-+/* (size given to avoid silly warnings with Visual C++) */
-+
-+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
-+
-+#define ERR_RETURN(strm,err) \
-+ return (strm->msg = ERR_MSG(err), (err))
-+/* To be used only when the state is known to be valid */
-+
-+ /* common constants */
-+
-+#ifndef DEF_WBITS
-+# define DEF_WBITS MAX_WBITS
-+#endif
-+/* default windowBits for decompression. MAX_WBITS is for compression only */
-+
-+#if MAX_MEM_LEVEL >= 8
-+# define DEF_MEM_LEVEL 8
-+#else
-+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
-+#endif
-+/* default memLevel */
-+
-+#define STORED_BLOCK 0
-+#define STATIC_TREES 1
-+#define DYN_TREES 2
-+/* The three kinds of block type */
-+
-+#define MIN_MATCH 3
-+#define MAX_MATCH 258
-+/* The minimum and maximum match lengths */
-+
-+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
-+
-+ /* target dependencies */
-+
-+#ifdef MSDOS
-+# define OS_CODE 0x00
-+# if defined(__TURBOC__) || defined(__BORLANDC__)
-+# if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
-+ /* Allow compilation with ANSI keywords only enabled */
-+ void _Cdecl farfree( void *block );
-+ void *_Cdecl farmalloc( unsigned long nbytes );
-+# else
-+# include <alloc.h>
-+# endif
-+# else /* MSC or DJGPP */
-+# include <malloc.h>
-+# endif
-+#endif
-+
-+#ifdef OS2
-+# define OS_CODE 0x06
-+#endif
-+
-+#ifdef WIN32 /* Window 95 & Windows NT */
-+# define OS_CODE 0x0b
-+#endif
-+
-+#if defined(VAXC) || defined(VMS)
-+# define OS_CODE 0x02
-+# define F_OPEN(name, mode) \
-+ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
-+#endif
-+
-+#ifdef AMIGA
-+# define OS_CODE 0x01
-+#endif
-+
-+#if defined(ATARI) || defined(atarist)
-+# define OS_CODE 0x05
-+#endif
-+
-+#if defined(MACOS) || defined(TARGET_OS_MAC)
-+# define OS_CODE 0x07
-+# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-+# include <unix.h> /* for fdopen */
-+# else
-+# ifndef fdopen
-+# define fdopen(fd,mode) NULL /* No fdopen() */
-+# endif
-+# endif
-+#endif
-+
-+#ifdef __50SERIES /* Prime/PRIMOS */
-+# define OS_CODE 0x0F
-+#endif
-+
-+#ifdef TOPS20
-+# define OS_CODE 0x0a
-+#endif
-+
-+#if defined(_BEOS_) || defined(RISCOS)
-+# define fdopen(fd,mode) NULL /* No fdopen() */
-+#endif
-+
-+#if (defined(_MSC_VER) && (_MSC_VER > 600))
-+# define fdopen(fd,type) _fdopen(fd,type)
-+#endif
-+
-+
-+ /* Common defaults */
-+
-+#ifndef OS_CODE
-+# define OS_CODE 0x03 /* assume Unix */
-+#endif
-+
-+#ifndef F_OPEN
-+# define F_OPEN(name, mode) fopen((name), (mode))
-+#endif
-+
-+ /* functions */
-+
-+#ifdef HAVE_STRERROR
-+ extern char *strerror OF((int));
-+# define zstrerror(errnum) strerror(errnum)
-+#else
-+# define zstrerror(errnum) ""
-+#endif
-+
-+#if defined(pyr)
-+# define NO_MEMCPY
-+#endif
-+#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
-+ /* Use our own functions for small and medium model with MSC <= 5.0.
-+ * You may have to use the same strategy for Borland C (untested).
-+ * The __SC__ check is for Symantec.
-+ */
-+# define NO_MEMCPY
-+#endif
-+#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
-+# define HAVE_MEMCPY
-+#endif
-+#ifdef HAVE_MEMCPY
-+# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
-+# define zmemcpy _fmemcpy
-+# define zmemcmp _fmemcmp
-+# define zmemzero(dest, len) _fmemset(dest, 0, len)
-+# else
-+# define zmemcpy memcpy
-+# define zmemcmp memcmp
-+# define zmemzero(dest, len) memset(dest, 0, len)
-+# endif
-+#else
-+ extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
-+ extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
-+ extern void zmemzero OF((Bytef* dest, uInt len));
-+#endif
-+
-+/* Diagnostic functions */
-+#ifdef DEBUG
-+# include <stdio.h>
-+ extern int z_verbose;
-+ extern void z_error OF((char *m));
-+# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-+# define Trace(x) {if (z_verbose>=0) fprintf x ;}
-+# define Tracev(x) {if (z_verbose>0) fprintf x ;}
-+# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-+# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-+# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-+#else
-+# define Assert(cond,msg)
-+# define Trace(x)
-+# define Tracev(x)
-+# define Tracevv(x)
-+# define Tracec(c,x)
-+# define Tracecv(c,x)
-+#endif
-+
-+
-+typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf,
-+ uInt len));
-+voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
-+void zcfree OF((voidpf opaque, voidpf ptr));
-+
-+#define ZALLOC(strm, items, size) \
-+ (*((strm)->zalloc))((strm)->opaque, (items), (size))
-+#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-+#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-+
-+#endif /* _Z_UTIL_H */
---- /dev/null 2004-02-02 20:32:13.000000000 +0000
-+++ linux/include/zconf.h 2004-07-04 15:38:31.000000000 +0100
-@@ -0,0 +1,309 @@
-+/* zconf.h -- configuration of the zlib compression library
-+ * Copyright (C) 1995-2002 Jean-loup Gailly.
-+ * For conditions of distribution and use, see copyright notice in zlib.h
-+ */
-+
-+/* @(#) $Id: zconf.h,v 1.2 2004/02/22 06:48:23 mcr Exp $ */
-+
-+#ifndef _ZCONF_H
-+#define _ZCONF_H
-+
-+/*
-+ * If you *really* need a unique prefix for all types and library functions,
-+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
-+ */
-+#ifdef IPCOMP_PREFIX
-+# define deflateInit_ ipcomp_deflateInit_
-+# define deflate ipcomp_deflate
-+# define deflateEnd ipcomp_deflateEnd
-+# define inflateInit_ ipcomp_inflateInit_
-+# define inflate ipcomp_inflate
-+# define inflateEnd ipcomp_inflateEnd
-+# define deflateInit2_ ipcomp_deflateInit2_
-+# define deflateSetDictionary ipcomp_deflateSetDictionary
-+# define deflateCopy ipcomp_deflateCopy
-+# define deflateReset ipcomp_deflateReset
-+# define deflateParams ipcomp_deflateParams
-+# define inflateInit2_ ipcomp_inflateInit2_
-+# define inflateSetDictionary ipcomp_inflateSetDictionary
-+# define inflateSync ipcomp_inflateSync
-+# define inflateSyncPoint ipcomp_inflateSyncPoint
-+# define inflateReset ipcomp_inflateReset
-+# define compress ipcomp_compress
-+# define compress2 ipcomp_compress2
-+# define uncompress ipcomp_uncompress
-+# define adler32 ipcomp_adler32
-+# define crc32 ipcomp_crc32
-+# define get_crc_table ipcomp_get_crc_table
-+/* SSS: these also need to be prefixed to avoid clash with ppp_deflate and ext2compression */
-+# define inflate_blocks ipcomp_deflate_blocks
-+# define inflate_blocks_free ipcomp_deflate_blocks_free
-+# define inflate_blocks_new ipcomp_inflate_blocks_new
-+# define inflate_blocks_reset ipcomp_inflate_blocks_reset
-+# define inflate_blocks_sync_point ipcomp_inflate_blocks_sync_point
-+# define inflate_set_dictionary ipcomp_inflate_set_dictionary
-+# define inflate_codes ipcomp_inflate_codes
-+# define inflate_codes_free ipcomp_inflate_codes_free
-+# define inflate_codes_new ipcomp_inflate_codes_new
-+# define inflate_fast ipcomp_inflate_fast
-+# define inflate_trees_bits ipcomp_inflate_trees_bits
-+# define inflate_trees_dynamic ipcomp_inflate_trees_dynamic
-+# define inflate_trees_fixed ipcomp_inflate_trees_fixed
-+# define inflate_flush ipcomp_inflate_flush
-+# define inflate_mask ipcomp_inflate_mask
-+# define _dist_code _ipcomp_dist_code
-+# define _length_code _ipcomp_length_code
-+# define _tr_align _ipcomp_tr_align
-+# define _tr_flush_block _ipcomp_tr_flush_block
-+# define _tr_init _ipcomp_tr_init
-+# define _tr_stored_block _ipcomp_tr_stored_block
-+# define _tr_tally _ipcomp_tr_tally
-+# define zError ipcomp_zError
-+# define z_errmsg ipcomp_z_errmsg
-+# define zlibVersion ipcomp_zlibVersion
-+# define match_init ipcomp_match_init
-+# define longest_match ipcomp_longest_match
-+#endif
-+
-+#ifdef Z_PREFIX
-+# define Byte z_Byte
-+# define uInt z_uInt
-+# define uLong z_uLong
-+# define Bytef z_Bytef
-+# define charf z_charf
-+# define intf z_intf
-+# define uIntf z_uIntf
-+# define uLongf z_uLongf
-+# define voidpf z_voidpf
-+# define voidp z_voidp
-+#endif
-+
-+#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-+# define WIN32
-+#endif
-+#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
-+# ifndef __32BIT__
-+# define __32BIT__
-+# endif
-+#endif
-+#if defined(__MSDOS__) && !defined(MSDOS)
-+# define MSDOS
-+#endif
-+
-+/*
-+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
-+ * than 64k bytes at a time (needed on systems with 16-bit int).
-+ */
-+#if defined(MSDOS) && !defined(__32BIT__)
-+# define MAXSEG_64K
-+#endif
-+#ifdef MSDOS
-+# define UNALIGNED_OK
-+#endif
-+
-+#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC)
-+# define STDC
-+#endif
-+#if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)
-+# ifndef STDC
-+# define STDC
-+# endif
-+#endif
-+
-+#ifndef STDC
-+# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-+# define const
-+# endif
-+#endif
-+
-+/* Some Mac compilers merge all .h files incorrectly: */
-+#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
-+# define NO_DUMMY_DECL
-+#endif
-+
-+/* Old Borland C incorrectly complains about missing returns: */
-+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-+# define NEED_DUMMY_RETURN
-+#endif
-+
-+
-+/* Maximum value for memLevel in deflateInit2 */
-+#ifndef MAX_MEM_LEVEL
-+# ifdef MAXSEG_64K
-+# define MAX_MEM_LEVEL 8
-+# else
-+# define MAX_MEM_LEVEL 9
-+# endif
-+#endif
-+
-+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
-+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
-+ * created by gzip. (Files created by minigzip can still be extracted by
-+ * gzip.)
-+ */
-+#ifndef MAX_WBITS
-+# define MAX_WBITS 15 /* 32K LZ77 window */
-+#endif
-+
-+/* The memory requirements for deflate are (in bytes):
-+ (1 << (windowBits+2)) + (1 << (memLevel+9))
-+ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
-+ plus a few kilobytes for small objects. For example, if you want to reduce
-+ the default memory requirements from 256K to 128K, compile with
-+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
-+ Of course this will generally degrade compression (there's no free lunch).
-+
-+ The memory requirements for inflate are (in bytes) 1 << windowBits
-+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
-+ for small objects.
-+*/
-+
-+ /* Type declarations */
-+
-+#ifndef OF /* function prototypes */
-+# ifdef STDC
-+# define OF(args) args
-+# else
-+# define OF(args) ()
-+# endif
-+#endif
-+
-+/* The following definitions for FAR are needed only for MSDOS mixed
-+ * model programming (small or medium model with some far allocations).
-+ * This was tested only with MSC; for other MSDOS compilers you may have
-+ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
-+ * just define FAR to be empty.
-+ */
-+#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
-+ /* MSC small or medium model */
-+# define SMALL_MEDIUM
-+# ifdef _MSC_VER
-+# define FAR _far
-+# else
-+# define FAR far
-+# endif
-+#endif
-+#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
-+# ifndef __32BIT__
-+# define SMALL_MEDIUM
-+# define FAR _far
-+# endif
-+#endif
-+
-+/* Compile with -DZLIB_DLL for Windows DLL support */
-+#if defined(ZLIB_DLL)
-+# if defined(_WINDOWS) || defined(WINDOWS)
-+# ifdef FAR
-+# undef FAR
-+# endif
-+# include <windows.h>
-+# define ZEXPORT WINAPI
-+# ifdef WIN32
-+# define ZEXPORTVA WINAPIV
-+# else
-+# define ZEXPORTVA FAR _cdecl _export
-+# endif
-+# endif
-+# if defined (__BORLANDC__)
-+# if (__BORLANDC__ >= 0x0500) && defined (WIN32)
-+# include <windows.h>
-+# define ZEXPORT __declspec(dllexport) WINAPI
-+# define ZEXPORTRVA __declspec(dllexport) WINAPIV
-+# else
-+# if defined (_Windows) && defined (__DLL__)
-+# define ZEXPORT _export
-+# define ZEXPORTVA _export
-+# endif
-+# endif
-+# endif
-+#endif
-+
-+#if defined (__BEOS__)
-+# if defined (ZLIB_DLL)
-+# define ZEXTERN extern __declspec(dllexport)
-+# else
-+# define ZEXTERN extern __declspec(dllimport)
-+# endif
-+#endif
-+
-+#ifndef ZEXPORT
-+# define ZEXPORT
-+#endif
-+#ifndef ZEXPORTVA
-+# define ZEXPORTVA
-+#endif
-+#ifndef ZEXTERN
-+# define ZEXTERN extern
-+#endif
-+
-+#ifndef FAR
-+# define FAR
-+#endif
-+
-+#if !defined(MACOS) && !defined(TARGET_OS_MAC)
-+typedef unsigned char Byte; /* 8 bits */
-+#endif
-+typedef unsigned int uInt; /* 16 bits or more */
-+typedef unsigned long uLong; /* 32 bits or more */
-+
-+#ifdef SMALL_MEDIUM
-+ /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-+# define Bytef Byte FAR
-+#else
-+ typedef Byte FAR Bytef;
-+#endif
-+typedef char FAR charf;
-+typedef int FAR intf;
-+typedef uInt FAR uIntf;
-+typedef uLong FAR uLongf;
-+
-+#ifdef STDC
-+ typedef void FAR *voidpf;
-+ typedef void *voidp;
-+#else
-+ typedef Byte FAR *voidpf;
-+ typedef Byte *voidp;
-+#endif
-+
-+#ifdef HAVE_UNISTD_H
-+# include <sys/types.h> /* for off_t */
-+# include <unistd.h> /* for SEEK_* and off_t */
-+# define z_off_t off_t
-+#endif
-+#ifndef SEEK_SET
-+# define SEEK_SET 0 /* Seek from beginning of file. */
-+# define SEEK_CUR 1 /* Seek from current position. */
-+# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
-+#endif
-+#ifndef z_off_t
-+# define z_off_t long
-+#endif
-+
-+/* MVS linker does not support external names larger than 8 bytes */
-+#if defined(__MVS__)
-+# pragma map(deflateInit_,"DEIN")
-+# pragma map(deflateInit2_,"DEIN2")
-+# pragma map(deflateEnd,"DEEND")
-+# pragma map(inflateInit_,"ININ")
-+# pragma map(inflateInit2_,"ININ2")
-+# pragma map(inflateEnd,"INEND")
-+# pragma map(inflateSync,"INSY")
-+# pragma map(inflateSetDictionary,"INSEDI")
-+# pragma map(inflate_blocks,"INBL")
-+# pragma map(inflate_blocks_new,"INBLNE")
-+# pragma map(inflate_blocks_free,"INBLFR")
-+# pragma map(inflate_blocks_reset,"INBLRE")
-+# pragma map(inflate_codes_free,"INCOFR")
-+# pragma map(inflate_codes,"INCO")
-+# pragma map(inflate_fast,"INFA")
-+# pragma map(inflate_flush,"INFLU")
-+# pragma map(inflate_mask,"INMA")
-+# pragma map(inflate_set_dictionary,"INSEDI2")
-+# pragma map(ipcomp_inflate_copyright,"INCOPY")
-+# pragma map(inflate_trees_bits,"INTRBI")
-+# pragma map(inflate_trees_dynamic,"INTRDY")
-+# pragma map(inflate_trees_fixed,"INTRFI")
-+# pragma map(inflate_trees_free,"INTRFR")
-+#endif
-+
-+#endif /* _ZCONF_H */
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/mkdep.patch b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/mkdep.patch
deleted file mode 100644
index 4daeaa11be..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh36.12/mkdep.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- linux/Makefile~mkdep 2003-12-19 09:36:51.000000000 -0800
-+++ linux/Makefile 2003-12-19 09:57:44.000000000 -0800
-@@ -458,7 +458,7 @@
-
- dep-files: scripts/mkdep archdep include/linux/version.h
- scripts/mkdep -- init/*.c > .depend
-- scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
-+ $(foreach, dir, $(FINDHPATH), scripts/mkdep -- `find $(dir) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend)
- $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
- ifdef CONFIG_MODVERSIONS
- $(MAKE) update-modverfile
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqsa b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqsa
deleted file mode 100644
index 2a965e4f32..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.1/defconfig-ipaqsa
+++ /dev/null
@@ -1,1508 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-
-#
-# Archimedes/A5000 Implementations (select only ONE)
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_H3100=y
-CONFIG_SA1100_H3600=y
-CONFIG_SA1100_H3800=y
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-CONFIG_SA1100_USB=m
-CONFIG_SA1100_USB_NETLINK=m
-CONFIG_SA1100_USB_CHAR=m
-CONFIG_REGISTERS=m
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-# CONFIG_ARCH_H3900 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_AXIM is not set
-# CONFIG_PXA_USB is not set
-# CONFIG_PXA_USB_NETLINK is not set
-# CONFIG_PXA_USB_CHAR is not set
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-CONFIG_CPU_SA1100=y
-# CONFIG_CPU_32v3 is not set
-CONFIG_CPU_32v4=y
-CONFIG_SA1100_IPAQ=y
-# CONFIG_PXA_IPAQ is not set
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-CONFIG_H3600_MICRO=m
-CONFIG_IPAQ_HAS_ROSELLA=y
-# CONFIG_IPAQ_HAS_ASIC3 is not set
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=y
-# CONFIG_H5400_ASIC is not set
-# CONFIG_H1900_ASIC is not set
-# CONFIG_H1900_TS is not set
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-
-#
-# Processor Features
-#
-CONFIG_DISCONTIGMEM=y
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-CONFIG_ISA=y
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-CONFIG_PCMCIA_SA1100=m
-# CONFIG_PCMCIA_PXA is not set
-CONFIG_MERCURY_BACKPAQ=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_DEBUG_VERBOSE=0
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-
-#
-# At least one math emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-CONFIG_HWTIMER=m
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-CONFIG_MTD_BLKMTD=m
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-
-#
-# IPSec options (FreeS/WAN)
-#
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-
-#
-# ESP always enabled with tunnel mode
-#
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_AIRO is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-
-#
-# Wireless Pcmcia cards support
-#
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-CONFIG_ATMELWLAN=y
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-CONFIG_ATMELWLAN_PCMCIA_502A=m
-CONFIG_ATMELWLAN_PCMCIA_3COM=m
-CONFIG_ATMELWLAN_PCMCIA_502AD=m
-CONFIG_ATMELWLAN_PCMCIA_502AE=m
-CONFIG_ATMELWLAN_PCMCIA_504=m
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_SA1100_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-CONFIG_CHR_DEV_ST=m
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=m
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SA1100_DEFAULT_BAUDRATE=115200
-CONFIG_SERIAL_H3800_ASIC=m
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-CONFIG_NEWTONKBD=m
-CONFIG_SA1100_PROFILER=m
-
-#
-# Compaq iPAQ H3600 support
-#
-CONFIG_TOUCHSCREEN_H3600=m
-CONFIG_H3600_BACKPAQ_FPGA=m
-CONFIG_H3600_BACKPAQ_ACCEL=m
-CONFIG_H3600_BACKPAQ_GASGAUGE=m
-CONFIG_H3600_BACKPAQ_SRAM=m
-CONFIG_H3600_BACKPAQ_AUDIO=m
-CONFIG_H3600_STOWAWAY=m
-CONFIG_H3800_MICROKBD=m
-CONFIG_SA1100_LIRC=m
-# CONFIG_H5400_BUZZER is not set
-# CONFIG_H5400_FSI is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# L3 serial bus support
-#
-CONFIG_L3=y
-CONFIG_L3_ALGOBIT=y
-CONFIG_L3_BIT_SA1100_GPIO=y
-
-#
-# Other L3 adapters
-#
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-CONFIG_L3_BACKPAQ=m
-CONFIG_BIT_SA1100_GPIO=y
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-# CONFIG_PXA_WATCHDOG is not set
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_SA1100_RTC=m
-# CONFIG_PXA_RTC_HACK is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-# CONFIG_PCMCIA_MOBILISCAN_CS is not set
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-CONFIG_VIDEO_H3600_BACKPAQ=m
-# CONFIG_VIDEO_HAWKEYE is not set
-
-#
-# Video for Linux 2 (V4L2)
-#
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MQ1100 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-CONFIG_FBCON_CFB4=y
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-CONFIG_FBCON_FONTWIDTH8_ONLY=y
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_SA1100=m
-CONFIG_SOUND_UDA1341=m
-# CONFIG_SOUND_SA1100_MONO is not set
-# CONFIG_SOUND_ASSABET_UDA1341 is not set
-CONFIG_SOUND_H3600_UDA1341=m
-# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
-# CONFIG_SOUND_SA1111_UDA1341 is not set
-# CONFIG_SOUND_SA1100SSP is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-# CONFIG_SOUND_PXA_AC97 is not set
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_LONG_TIMEOUT is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-# CONFIG_USB_OHCI is not set
-# CONFIG_USB_OHCI_SA1111 is not set
-# CONFIG_USB_OHCI_H5400 is not set
-# CONFIG_USB_OHCI_S3C2410 is not set
-CONFIG_USB_SL811HS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_AUDIO is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_WACOM is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-CONFIG_USB_CDCETHER=m
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BRLVGER is not set
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-# CONFIG_BLUEZ_HCIVHCI is not set
-
-#
-# Kernel hacking
-#
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3600 b/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3600
deleted file mode 100644
index 97aeac5392..0000000000
--- a/packages/linux/handhelds-sa-2.4.19-rmk6-pxa1-hh37.4/defconfig-h3600
+++ /dev/null
@@ -1,1464 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_OBSOLETE is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# System Type
-#
-# CONFIG_ARCH_ANAKIN is not set
-# CONFIG_ARCH_ARCA5K is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_OMAHA is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_MX1ADS is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_RISCSTATION is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_AT91RM9200DK is not set
-# CONFIG_MINIMAL_OOPS is not set
-
-#
-# Linux As Bootldr support
-#
-# CONFIG_LAB is not set
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-
-#
-# Archimedes/A5000 Implementations
-#
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-
-#
-# Footbridge Implementations
-#
-# CONFIG_ARCH_CATS is not set
-# CONFIG_ARCH_PERSONAL_SERVER is not set
-# CONFIG_ARCH_EBSA285_ADDIN is not set
-# CONFIG_ARCH_EBSA285_HOST is not set
-# CONFIG_ARCH_NETWINDER is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ACCELENT is not set
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_ASSABET_NEPONSET is not set
-# CONFIG_SA1100_ADSBITSY is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_CEP is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_H3100=y
-CONFIG_SA1100_H3600=y
-CONFIG_SA1100_H3800=y
-# CONFIG_SA1100_CONSUS is not set
-# CONFIG_SA1100_EXTENEX1 is not set
-# CONFIG_SA1100_FLEXANET is not set
-# CONFIG_SA1100_FREEBIRD is not set
-# CONFIG_SA1100_FRODO is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
-# CONFIG_SA1100_GRAPHICSMASTER is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_HUW_WEBPANEL is not set
-# CONFIG_SA1100_ITSY is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_NANOENGINE is not set
-# CONFIG_SA1100_OMNIMETER is not set
-# CONFIG_SA1100_PANGOLIN is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_PT_SYSTEM3 is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SHERMAN is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SIMPUTER is not set
-# CONFIG_SA1100_PFS168 is not set
-# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_XP860 is not set
-# CONFIG_SA1100_YOPY is not set
-CONFIG_SA1100_USB=m
-CONFIG_SA1100_USB_NETLINK=m
-CONFIG_SA1100_USB_CHAR=m
-CONFIG_REGISTERS=m
-
-#
-# Intel PXA250/210 Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_ARCH_PXA_CERF is not set
-# CONFIG_ARCH_H3900 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_AXIM is not set
-# CONFIG_PXA_USB is not set
-# CONFIG_PXA_USB_NETLINK is not set
-# CONFIG_PXA_USB_CHAR is not set
-
-#
-# CLPS711X/EP721X Implementations
-#
-# CONFIG_ARCH_AUTCPU12 is not set
-# CONFIG_ARCH_CDB89712 is not set
-# CONFIG_ARCH_CLEP7312 is not set
-# CONFIG_ARCH_EDB7211 is not set
-# CONFIG_ARCH_P720T is not set
-# CONFIG_ARCH_FORTUNET is not set
-# CONFIG_ARCH_EP7211 is not set
-# CONFIG_ARCH_EP7212 is not set
-# CONFIG_ARCH_ACORN is not set
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_FOOTBRIDGE_HOST is not set
-# CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM610 is not set
-# CONFIG_CPU_ARM710 is not set
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-# CONFIG_PLD is not set
-# CONFIG_CPU_ARM926T is not set
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1026 is not set
-# CONFIG_CPU_SA110 is not set
-CONFIG_CPU_SA1100=y
-# CONFIG_CPU_32v3 is not set
-CONFIG_CPU_32v4=y
-CONFIG_SA1100_IPAQ=y
-# CONFIG_PXA_IPAQ is not set
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq iPAQ Handheld
-#
-CONFIG_IPAQ_HAL=m
-CONFIG_H3600_MICRO=m
-CONFIG_IPAQ_HAS_ROSELLA=y
-# CONFIG_IPAQ_HAS_ASIC3 is not set
-CONFIG_H3600_ASIC=m
-CONFIG_H3900_ASIC_DEBUG=y
-# CONFIG_H5400_ASIC is not set
-# CONFIG_H1900_ASIC is not set
-# CONFIG_H1900_TS is not set
-CONFIG_H3600_HARDWARE=y
-CONFIG_IPAQ_SLEEVE=m
-CONFIG_SLEEVE_DEBUG=y
-CONFIG_SLEEVE_DEBUG_VERBOSE=0
-# CONFIG_SLEEVE_IRQ_DEMUX is not set
-CONFIG_DISCONTIGMEM=y
-
-#
-# General setup
-#
-# CONFIG_PCI is not set
-CONFIG_ISA=y
-# CONFIG_ISA_DMA is not set
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_CPU_FREQ=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-# CONFIG_PCMCIA_CLPS6700 is not set
-CONFIG_PCMCIA_SA1100=m
-# CONFIG_PCMCIA_PXA is not set
-CONFIG_MERCURY_BACKPAQ=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_DEBUG_VERBOSE=0
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_PM=y
-CONFIG_APM=m
-CONFIG_HWTIMER=m
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_B1 is not set
-CONFIG_MTD_CFI_B2=y
-CONFIG_MTD_CFI_B4=y
-# CONFIG_MTD_CFI_B8 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_IPAQ=y
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_CDB89712 is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_IQ80310 is not set
-# CONFIG_MTD_LUBBOCK is not set
-# CONFIG_MTD_EPXA10DB is not set
-# CONFIG_MTD_FORTUNET is not set
-# CONFIG_MTD_AUTCPU12 is not set
-# CONFIG_MTD_EDB7312 is not set
-# CONFIG_MTD_H720X is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_CEIVA is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_NVRD=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-CONFIG_BLK_DEV_LVM=m
-CONFIG_BLK_DEV_DM=m
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=m
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_ARPTABLES is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_TUNNEL=m
-CONFIG_IPV6_MOBILITY=m
-CONFIG_IPV6_MOBILITY_MN=m
-# CONFIG_IPV6_MOBILITY_HA is not set
-CONFIG_IPV6_MOBILITY_DEBUG=y
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-# CONFIG_IP6_NF_MATCH_LENGTH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_IPSEC=m
-CONFIG_KLIPS_AUTH_HMAC_MD5=y
-CONFIG_KLIPS_AUTH_HMAC_SHA1=y
-CONFIG_KLIPS_ENC_3DES=y
-CONFIG_KLIPS_IPCOMP=y
-CONFIG_KLIPS_DEBUG=y
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_ARLAN is not set
-# CONFIG_AIRONET4500 is not set
-# CONFIG_AIRONET4500_NONCS is not set
-# CONFIG_AIRONET4500_PROC is not set
-# CONFIG_AIRO is not set
-# CONFIG_HERMES is not set
-# CONFIG_SPECTRUM24T is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_AIRO_CS=m
-# CONFIG_WVLAN_CS is not set
-# CONFIG_MWVLAN_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-CONFIG_NET_WIRELESS=y
-# CONFIG_ATMELWLAN is not set
-# CONFIG_ATMELWLAN_USB_503A_RFMD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502A is not set
-# CONFIG_ATMELWLAN_PCMCIA_3COM is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AD is not set
-# CONFIG_ATMELWLAN_PCMCIA_502AE is not set
-# CONFIG_ATMELWLAN_PCMCIA_504 is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_ARCNET_COM20020_CS is not set
-# CONFIG_PCMCIA_IBMTR is not set
-CONFIG_NET_PCMCIA_RADIO=y
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_NETWAVE=m
-CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_AIRONET4500_CS is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-CONFIG_IRTTY_SIR=m
-CONFIG_IRPORT_SIR=m
-# CONFIG_DONGLE is not set
-# CONFIG_USB_IRDA is not set
-# CONFIG_NSC_FIR is not set
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-CONFIG_SA1100_FIR=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
-# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
-# CONFIG_BLK_DEV_IDEDISK_IBM is not set
-# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
-# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
-# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
-# CONFIG_BLK_DEV_IDEDISK_WD is not set
-# CONFIG_BLK_DEV_COMMERIAL is not set
-# CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-CONFIG_BLK_DEV_IDESCSI=m
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-CONFIG_CHR_DEV_ST=m
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_SCSI_PCMCIA=y
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_NINJA_SCSI=m
-CONFIG_PCMCIA_QLOGIC=m
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# ISDN subsystem
-#
-CONFIG_ISDN=m
-CONFIG_ISDN_BOOL=y
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_ISDN_PPP_BSDCOMP=m
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-
-#
-# ISDN feature submodules
-#
-CONFIG_ISDN_DRV_LOOP=m
-CONFIG_ISDN_DIVERSION=m
-
-#
-# Passive ISDN cards
-#
-CONFIG_ISDN_DRV_HISAX=m
-CONFIG_ISDN_HISAX=y
-CONFIG_HISAX_EURO=y
-# CONFIG_DE_AOC is not set
-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
-# CONFIG_HISAX_NO_LLC is not set
-# CONFIG_HISAX_NO_KEYPAD is not set
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_MAX_CARDS=8
-# CONFIG_HISAX_16_0 is not set
-CONFIG_HISAX_16_3=y
-# CONFIG_HISAX_TELESPCI is not set
-# CONFIG_HISAX_S0BOX is not set
-# CONFIG_HISAX_AVM_A1 is not set
-# CONFIG_HISAX_FRITZPCI is not set
-# CONFIG_HISAX_AVM_A1_PCMCIA is not set
-# CONFIG_HISAX_ELSA is not set
-# CONFIG_HISAX_IX1MICROR2 is not set
-# CONFIG_HISAX_DIEHLDIVA is not set
-# CONFIG_HISAX_ASUSCOM is not set
-# CONFIG_HISAX_TELEINT is not set
-# CONFIG_HISAX_HFCS is not set
-# CONFIG_HISAX_SEDLBAUER is not set
-# CONFIG_HISAX_SPORTSTER is not set
-# CONFIG_HISAX_MIC is not set
-# CONFIG_HISAX_NETJET is not set
-# CONFIG_HISAX_NETJET_U is not set
-# CONFIG_HISAX_NICCY is not set
-# CONFIG_HISAX_ISURF is not set
-# CONFIG_HISAX_HSTSAPHIR is not set
-# CONFIG_HISAX_BKM_A4T is not set
-# CONFIG_HISAX_SCT_QUADRO is not set
-# CONFIG_HISAX_GAZEL is not set
-# CONFIG_HISAX_HFC_PCI is not set
-# CONFIG_HISAX_W6692 is not set
-CONFIG_HISAX_HFC_SX=y
-# CONFIG_HISAX_DEBUG is not set
-CONFIG_HISAX_SEDLBAUER_CS=m
-CONFIG_HISAX_ELSA_CS=m
-# CONFIG_HISAX_AVM_A1_CS is not set
-CONFIG_HISAX_ST5481=m
-# CONFIG_HISAX_FRITZ_PCIPNP is not set
-
-#
-# Active ISDN cards
-#
-# CONFIG_ISDN_DRV_ICN is not set
-# CONFIG_ISDN_DRV_PCBIT is not set
-# CONFIG_ISDN_DRV_SC is not set
-# CONFIG_ISDN_DRV_ACT2000 is not set
-# CONFIG_ISDN_DRV_EICON is not set
-# CONFIG_ISDN_DRV_TPAM is not set
-CONFIG_ISDN_CAPI=m
-# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
-# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
-CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_CAPIDRV=m
-# CONFIG_ISDN_DRV_AVMB1_B1ISA is not set
-# CONFIG_ISDN_DRV_AVMB1_B1PCI is not set
-# CONFIG_ISDN_DRV_AVMB1_B1PCIV4 is not set
-# CONFIG_ISDN_DRV_AVMB1_T1ISA is not set
-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
-# CONFIG_ISDN_DRV_AVMB1_AVM_CS is not set
-# CONFIG_ISDN_DRV_AVMB1_T1PCI is not set
-# CONFIG_ISDN_DRV_AVMB1_C4 is not set
-# CONFIG_HYSDN is not set
-# CONFIG_HYSDN_CAPI is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=m
-CONFIG_INPUT_KEYBDEV=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=m
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=m
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_ANAKIN is not set
-# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
-# CONFIG_SERIAL_S3C2410 is not set
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SA1100_DEFAULT_BAUDRATE=115200
-CONFIG_SERIAL_H3800_ASIC=m
-# CONFIG_SERIAL_SIR_PXA is not set
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-CONFIG_NEWTONKBD=m
-CONFIG_SA1100_PROFILER=m
-CONFIG_TOUCHSCREEN_H3600=m
-CONFIG_H3600_BACKPAQ_FPGA=m
-CONFIG_H3600_BACKPAQ_ACCEL=m
-CONFIG_H3600_BACKPAQ_GASGAUGE=m
-CONFIG_H3600_BACKPAQ_SRAM=m
-CONFIG_H3600_BACKPAQ_AUDIO=m
-CONFIG_H3600_STOWAWAY=m
-CONFIG_H3800_MICROKBD=m
-CONFIG_SA1100_LIRC=m
-# CONFIG_H5400_BUZZER is not set
-# CONFIG_H5400_FSI is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# L3 serial bus support
-#
-CONFIG_L3=y
-CONFIG_L3_ALGOBIT=y
-CONFIG_L3_BIT_SA1100_GPIO=y
-# CONFIG_L3_S3C2410 is not set
-# CONFIG_L3_SA1111 is not set
-CONFIG_L3_BACKPAQ=m
-CONFIG_BIT_SA1100_GPIO=y
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=m
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-CONFIG_INPUT_SERIO=m
-CONFIG_INPUT_SERPORT=m
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_21285_WATCHDOG is not set
-# CONFIG_977_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-# CONFIG_PXA_WATCHDOG is not set
-# CONFIG_OMAHA_WATCHDOG is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-CONFIG_SA1100_RTC=m
-# CONFIG_PXA_RTC_HACK is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-
-#
-# PCMCIA character devices
-#
-CONFIG_PCMCIA_SERIAL_CS=m
-CONFIG_PCMCIA_MOBILISCAN_CS=m
-# CONFIG_AXIM_KEY_FIX is not set
-
-#
-# Multimedia devices
-#
-CONFIG_MEDIA=m
-CONFIG_VIDEO_DEV=m
-CONFIG_V4L2_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_CYBERPRO is not set
-CONFIG_VIDEO_H3600_BACKPAQ=m
-# CONFIG_VIDEO_HAWKEYE is not set
-CONFIG_VIDEO_WINNOV_CS=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=m
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_UMSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-CONFIG_CRAMFS=y
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DRIVERFS_FS is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=m
-# CONFIG_SYSV_FS is not set
-CONFIG_UDF_FS=m
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_CODA_FS=m
-CONFIG_INTERMEZZO_FS=m
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_ZISOFS_FS=m
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Console drivers
-#
-CONFIG_PC_KEYMAP=y
-# CONFIG_VGA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_ACORN is not set
-# CONFIG_FB_ANAKIN is not set
-# CONFIG_FB_CLPS711X is not set
-# CONFIG_FB_S3C2410 is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_EPSON1356 is not set
-# CONFIG_FB_MQ200 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MQ1100 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-CONFIG_FBCON_CFB4=y
-# CONFIG_FBCON_CFB8 is not set
-CONFIG_FBCON_CFB16=y
-# CONFIG_FBCON_CFB24 is not set
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_NO_LOGO is not set
-CONFIG_FBCON_FONTWIDTH8_ONLY=y
-CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_SOUND_SA1100=m
-CONFIG_SOUND_UDA1341=m
-# CONFIG_SOUND_SA1100_MONO is not set
-# CONFIG_SOUND_ASSABET_UDA1341 is not set
-CONFIG_SOUND_H3600_UDA1341=m
-# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
-# CONFIG_SOUND_SA1111_UDA1341 is not set
-# CONFIG_SOUND_SA1100SSP is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_VIDC is not set
-# CONFIG_SOUND_WAVEARTIST is not set
-# CONFIG_SOUND_PXA_AC97 is not set
-# CONFIG_SOUND_TVMIXER is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-# CONFIG_MCP_UCB1400_TS is not set
-
-#
-# Console Switches
-#
-CONFIG_SWITCHES=m
-CONFIG_SWITCHES_SA1100=y
-
-#
-# USB support
-#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_BANDWIDTH=y
-# CONFIG_USB_LONG_TIMEOUT is not set
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_UHCI is not set
-# CONFIG_USB_UHCI_ALT is not set
-# CONFIG_USB_OHCI is not set
-# CONFIG_USB_OHCI_SA1111 is not set
-# CONFIG_USB_OHCI_H5400 is not set
-CONFIG_USB_SL811HS=m
-CONFIG_USB_SL811HS_CS=m
-CONFIG_USB_AUDIO=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_BLUETOOTH=m
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_HP8200e=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_WACOM=m
-CONFIG_USB_DC2XX=m
-CONFIG_USB_MDC800=m
-CONFIG_USB_SCANNER=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_HPUSBSCSI=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_QC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_DABUSB=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_CATC=m
-CONFIG_USB_CDCETHER=m
-CONFIG_USB_USBNET=m
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-# CONFIG_USB_SERIAL_GENERIC is not set
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_BRLVGER=m
-
-#
-# Linux As Bootldr Modules
-#
-# CONFIG_BIG_KERNEL is not set
-# CONFIG_USE_DATE_CODE is not set
-# CONFIG_YMODEM is not set
-# CONFIG_LAB_DUMMY is not set
-# CONFIG_LAB_CRC is not set
-# CONFIG_LAB_YMODEM is not set
-# CONFIG_LAB_MTD is not set
-# CONFIG_LAB_COPY is not set
-# CONFIG_LAB_COPY_YMODEM is not set
-# CONFIG_LAB_COPY_FLASH is not set
-# CONFIG_LAB_COPY_FS is not set
-# CONFIG_LAB_COPY_WRAPPER is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-# CONFIG_BLUEZ_CMTP is not set
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BLUEZ_HCIUSB is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUART_BCSP=y
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-CONFIG_BLUEZ_HCIDTL1=m
-CONFIG_BLUEZ_HCIBT3C=m
-CONFIG_BLUEZ_HCIBLUECARD=m
-CONFIG_BLUEZ_HCIBTUART=m
-CONFIG_BLUEZ_HCIVHCI=m
-
-#
-# Kernel hacking
-#
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_NO_PGT_CACHE is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_DC21285_PORT is not set
-# CONFIG_DEBUG_CLPS711X_UART2 is not set
-
-#
-# Library routines
-#
-CONFIG_CRC32=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/husky-kernel-2.4-embedix.bb b/packages/linux/husky-kernel-2.4-embedix.bb
index 19645079f1..81f859594c 100644
--- a/packages/linux/husky-kernel-2.4-embedix.bb
+++ b/packages/linux/husky-kernel-2.4-embedix.bb
@@ -1,3 +1,4 @@
+COMPATIBLE_HOST = "arm.*-linux"
MACHINE = "husky"
require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/packages/linux/ipod_2.4.24-ipod0.bb b/packages/linux/ipod_2.4.24-ipod0.bb
index e6248e581d..b0fe9886e5 100644
--- a/packages/linux/ipod_2.4.24-ipod0.bb
+++ b/packages/linux/ipod_2.4.24-ipod0.bb
@@ -10,6 +10,8 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-${KV}.tar.bz2 \
S = "${WORKDIR}/linux-${KV}"
+COMPATIBLE_MACHINE = "ipod"
+
inherit kernel
EXTRA_OEMAKE = ""
diff --git a/packages/linux/ixp4xx-kernel.inc b/packages/linux/ixp4xx-kernel.inc
index b16c3d481d..367685f112 100644
--- a/packages/linux/ixp4xx-kernel.inc
+++ b/packages/linux/ixp4xx-kernel.inc
@@ -151,7 +151,7 @@ SRC_URI = "${IXP4XX_SRCURI}"
SRC_URI += "${IXP4XX_PATCHES}"
COMPATIBLE_HOST = 'arm.*-linux.*'
-COMPATIBLE_MACHINE = '(ixp4xx|nslu2)'
+COMPATIBLE_MACHINE = '(ixp4xx|nslu2|fsg3)'
inherit kernel
@@ -211,6 +211,12 @@ do_configure_prepend() {
}
+
+# Kernel module dependencies
+
+RDEPENDS_kernel-module-zd1211rw += "zd1211-firmware"
+
+
# MACHID and LE handling
#
# This mach_fixup function adds the required prefix to the image to
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/00-memory-h-page-shift.patch b/packages/linux/ixp4xx-kernel/2.6.15/00-memory-h-page-shift.patch
deleted file mode 100644
index 30d34952d5..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/00-memory-h-page-shift.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3218/1
-
-PAGE_SHIFT is undeclared in include/asm-arm/arch-ixp4xx/memory.h, identified by the following kernel compilation error:
-
-CC [M] sound/core/memory.o
-In file included from include/asm/memory.h:27,
-from include/asm/io.h:28,
-from sound/core/memory.c:24:
-include/asm/arch/memory.h: In function `__arch_adjust_zones':
-include/asm/arch/memory.h:28: error: `PAGE_SHIFT' undeclared (first use
-in this function)
-
-This patch replaces my previous attempt at fixing this problem (Patch 3214/1) and is based on the following feedback:
-
-Russell King wrote:
-> The error you see came up on SA1100. The best solution was to move
-> the __arch_adjust_zones() function out of line. I suggest ixp4xx
-> does the same.
-
-I have moved the function out of line into arch/arm/mach-ixp4xx/common-pci.c as suggested.
-
-Signed-off-by: Rod Whitby <rod@whitby.id.au>
-
---- linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/memory.h~ 2005-12-30 05:18:27.000000000 +1030
-+++ linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/memory.h 2005-12-30 05:36:04.000000000 +1030
-@@ -16,31 +16,10 @@
-
- #ifndef __ASSEMBLY__
-
--/*
-- * Only first 64MB of memory can be accessed via PCI.
-- * We use GFP_DMA to allocate safe buffers to do map/unmap.
-- * This is really ugly and we need a better way of specifying
-- * DMA-capable regions of memory.
-- */
--static inline void __arch_adjust_zones(int node, unsigned long *zone_size,
-- unsigned long *zhole_size)
--{
-- unsigned int sz = SZ_64M >> PAGE_SHIFT;
--
-- /*
-- * Only adjust if > 64M on current system
-- */
-- if (node || (zone_size[0] <= sz))
-- return;
--
-- zone_size[1] = zone_size[0] - sz;
-- zone_size[0] = sz;
-- zhole_size[1] = zhole_size[0];
-- zhole_size[0] = 0;
--}
-+void ixp4xx_adjust_zones(int node, unsigned long *size, unsigned long *holes);
-
- #define arch_adjust_zones(node, size, holes) \
-- __arch_adjust_zones(node, size, holes)
-+ ixp4xx_adjust_zones(node, size, holes)
-
- #define ISA_DMA_THRESHOLD (SZ_64M - 1)
-
---- linux-2.6.15-rc7/arch/arm/mach-ixp4xx/common-pci.c~ 2005-12-30 05:16:03.000000000 +1030
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/common-pci.c 2005-12-30 05:43:55.000000000 +1030
-@@ -341,6 +341,29 @@ int dma_needs_bounce(struct device *dev,
- return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M);
- }
-
-+/*
-+ * Only first 64MB of memory can be accessed via PCI.
-+ * We use GFP_DMA to allocate safe buffers to do map/unmap.
-+ * This is really ugly and we need a better way of specifying
-+ * DMA-capable regions of memory.
-+ */
-+void __init ixp4xx_adjust_zones(int node, unsigned long *zone_size,
-+ unsigned long *zhole_size)
-+{
-+ unsigned int sz = SZ_64M >> PAGE_SHIFT;
-+
-+ /*
-+ * Only adjust if > 64M on current system
-+ */
-+ if (node || (zone_size[0] <= sz))
-+ return;
-+
-+ zone_size[1] = zone_size[0] - sz;
-+ zone_size[0] = sz;
-+ zhole_size[1] = zhole_size[0];
-+ zhole_size[0] = 0;
-+}
-+
- void __init ixp4xx_pci_preinit(void)
- {
- unsigned long processor_id;
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch b/packages/linux/ixp4xx-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch
deleted file mode 100644
index 3fa0535abf..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/10-mtdpart-redboot-fis-byteswap.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-drivers/mtd/redboot.c: recognise a foreign byte sex partition table
-
-The RedBoot boot loader writes flash partition tables containing native
-byte sex 32 bit values. When booting an opposite byte sex kernel (e.g. an
-LE kernel from BE RedBoot) the current MTD driver fails to handle the
-partition table and therefore is unable to generate the correct partition
-map for the flash.
-
-The patch recognises that the FIS directory (the partition table) is
-byte-reversed by examining the partition table size, which is known to be
-one erase block (this is an assumption made elsewhere in redboot.c). If
-the size matches the erase block after byte swapping the value then
-byte-reversal is assumed, if not no further action is taken. The patched
-code is fail safe; should redboot.c be changed to support a partition table
-with a modified size field the test will fail and the partition table will
-be assumed to have the host byte sex.
-
-If byte-reversal is detected the patch byte swaps the remainder of the 32
-bit fields in the copy of the table; this copy is then used to set up the
-MTD partition map.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Modified slightly and
-Signed-off-by: David Woodhouse <dwmw2@infradead.org>
-
-Index: drivers/mtd/redboot.c
-===================================================================
-RCS file: /home/cvs/mtd/drivers/mtd/redboot.c,v
-retrieving revision 1.18
-retrieving revision 1.19
-diff -u -p -r1.18 -r1.19
---- linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-@@ -89,8 +89,32 @@ static int parse_redboot_partitions(stru
- i = numslots;
- break;
- }
-- if (!memcmp(buf[i].name, "FIS directory", 14))
-+ if (!memcmp(buf[i].name, "FIS directory", 14)) {
-+ /* This is apparently the FIS directory entry for the
-+ * FIS directory itself. The FIS directory size is
-+ * one erase block; if the buf[i].size field is
-+ * swab32(erasesize) then we know we are looking at
-+ * a byte swapped FIS directory - swap all the entries!
-+ * (NOTE: this is 'size' not 'data_length'; size is
-+ * the full size of the entry.)
-+ */
-+ if (swab32(buf[i].size) == master->erasesize) {
-+ int j;
-+ for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) {
-+ /* The unsigned long fields were written with the
-+ * wrong byte sex, name and pad have no byte sex.
-+ */
-+ swab32s(&buf[j].flash_base);
-+ swab32s(&buf[j].mem_base);
-+ swab32s(&buf[j].size);
-+ swab32s(&buf[j].entry_point);
-+ swab32s(&buf[j].data_length);
-+ swab32s(&buf[j].desc_cksum);
-+ swab32s(&buf[j].file_cksum);
-+ }
-+ }
- break;
-+ }
- }
- if (i == numslots) {
- /* Didn't find it */
-
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/11-mtdpart-redboot-config-byteswap.patch b/packages/linux/ixp4xx-kernel/2.6.15/11-mtdpart-redboot-config-byteswap.patch
deleted file mode 100644
index e258567462..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/11-mtdpart-redboot-config-byteswap.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-A more robust test for swapped RedBoot FIS directory partitions. This
-changes the test to check the flash_base value for the FIS directory,
-since we know where the FIS directory base is we can work out whether
-the flash address stored in the directory itself is byte swapped under
-most circumstances. If the value is 0 the directory is at the start
-of the flash and the test fails. In this case the fallback is to use
-the original test made slightly more robust.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-@@ -91,14 +91,41 @@ static int parse_redboot_partitions(stru
- }
- if (!memcmp(buf[i].name, "FIS directory", 14)) {
- /* This is apparently the FIS directory entry for the
-- * FIS directory itself. The FIS directory size is
-- * one erase block; if the buf[i].size field is
-- * swab32(erasesize) then we know we are looking at
-- * a byte swapped FIS directory - swap all the entries!
-- * (NOTE: this is 'size' not 'data_length'; size is
-- * the full size of the entry.)
-+ * FIS directory itself. To discover whether the entries
-+ * in this are native byte sex or byte swapped look at
-+ * the flash_base field - we know the FIS directory is
-+ * at 'offset' within the flash.
- */
-- if (swab32(buf[i].size) == master->erasesize) {
-+ int maybe_native, maybe_swapped;
-+ if (fis_origin != 0) {
-+ maybe_native =
-+ buf[i].flash_base == fis_origin + offset;
-+ maybe_swapped =
-+ swab32(buf[i].flash_base) == fis_origin + offset;
-+ } else if (offset != 0 || buf[i].flash_base != 0) {
-+ maybe_native =
-+ (buf[i].flash_base & (master->size-1)) == offset;
-+ maybe_swapped =
-+ (swab32(buf[i].flash_base) & (master->size-1)) == offset;
-+ } else {
-+ /* The FIS directory is at the start of the flash and
-+ * the 'flash_base' field is 0. The critical case is when
-+ * we are booting off this flash, but then we don't expect
-+ * this because the boot loader is pretty much always at
-+ * the start! Since the FIS directory is always less than
-+ * or equal to one erase block do the following:
-+ */
-+ maybe_native = buf[i].size <= master->erasesize;
-+ maybe_swapped = swab32(buf[i].size) <= master->erasesize;
-+ }
-+
-+ if (maybe_native && maybe_swapped)
-+ printk(KERN_WARNING "RedBoot directory 0x%lx(0x%lx) assumed native\n",
-+ buf[i].flash_base, buf[i].size);
-+ else if (!maybe_native && !maybe_swapped)
-+ printk(KERN_ERR "RedBoot directory 0x%lx(0x%lx) forced native\n",
-+ buf[i].flash_base, buf[i].size);
-+ else if (maybe_swapped) {
- int j;
- for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) {
- /* The unsigned long fields were written with the
-@@ -112,7 +139,11 @@ static int parse_redboot_partitions(stru
- swab32s(&buf[j].desc_cksum);
- swab32s(&buf[j].file_cksum);
- }
-- }
-+ printk(KERN_NOTICE "RedBoot directory 0x%lx(0x%lx) swapped\n",
-+ buf[i].flash_base, buf[i].size);
-+ } else
-+ printk(KERN_NOTICE "RedBoot directory 0x%lx(0x%lx) native\n",
-+ buf[i].flash_base, buf[i].size);
- break;
- }
- }
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/15-jffs2-endian-config.patch b/packages/linux/ixp4xx-kernel/2.6.15/15-jffs2-endian-config.patch
deleted file mode 100644
index 76e9c7e439..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/15-jffs2-endian-config.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-This patch allows the endianness of the JFSS2 filesystem to be
-specified by config options.
-
-It defaults to native-endian (the previously hard-coded option).
-
-Some architectures (in particular, the NSLU2) benefit from having a
-single known endianness of JFFS2 filesystem (for data, not
-executables) independent of the endianness of the processor (ARM
-processors can be switched to either endianness at run-time).
-
-Signed-off-by: Rod Whitby <rod@whitby.id.au>
-
---- linux-2.6.15/fs/Kconfig~ 2006-01-03 13:51:10.000000000 +1030
-+++ linux-2.6.15/fs/Kconfig 2006-01-05 01:35:36.000000000 +1030
-@@ -1132,6 +1132,31 @@ config JFFS2_CMODE_SIZE
-
- endchoice
-
-+choice
-+ prompt "JFFS2 endianness"
-+ default JFFS2_NATIVE_ENDIAN
-+ depends on JFFS2_FS
-+ help
-+ You can set here the default endianness of JFFS2 from
-+ the available options. Don't touch if unsure.
-+
-+config JFFS2_NATIVE_ENDIAN
-+ bool "native endian"
-+ help
-+ Uses a native endian bytestream.
-+
-+config JFFS2_BIG_ENDIAN
-+ bool "big endian"
-+ help
-+ Uses a big endian bytestream.
-+
-+config JFFS2_LITTLE_ENDIAN
-+ bool "little endian"
-+ help
-+ Uses a little endian bytestream.
-+
-+endchoice
-+
- config CRAMFS
- tristate "Compressed ROM file system support (cramfs)"
- select ZLIB_INFLATE
---- linux-2.6.15/fs/jffs2/nodelist.h~ 2006-01-05 01:37:06.000000000 +1030
-+++ linux-2.6.15/fs/jffs2/nodelist.h 2006-01-05 01:37:54.000000000 +1030
-@@ -29,12 +29,10 @@
- #include "os-linux.h"
- #endif
-
--#define JFFS2_NATIVE_ENDIAN
--
- /* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from
- whatever OS we're actually running on here too. */
-
--#if defined(JFFS2_NATIVE_ENDIAN)
-+#if defined(CONFIG_JFFS2_NATIVE_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){x})
- #define cpu_to_je32(x) ((jint32_t){x})
- #define cpu_to_jemode(x) ((jmode_t){os_to_jffs2_mode(x)})
-@@ -42,7 +40,7 @@
- #define je16_to_cpu(x) ((x).v16)
- #define je32_to_cpu(x) ((x).v32)
- #define jemode_to_cpu(x) (jffs2_to_os_mode((x).m))
--#elif defined(JFFS2_BIG_ENDIAN)
-+#elif defined(CONFIG_JFFS2_BIG_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)})
- #define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)})
- #define cpu_to_jemode(x) ((jmode_t){cpu_to_be32(os_to_jffs2_mode(x))})
-@@ -50,7 +48,7 @@
- #define je16_to_cpu(x) (be16_to_cpu(x.v16))
- #define je32_to_cpu(x) (be32_to_cpu(x.v32))
- #define jemode_to_cpu(x) (be32_to_cpu(jffs2_to_os_mode((x).m)))
--#elif defined(JFFS2_LITTLE_ENDIAN)
-+#elif defined(CONFIG_JFFS2_LITTLE_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)})
- #define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)})
- #define cpu_to_jemode(x) ((jmode_t){cpu_to_le32(os_to_jffs2_mode(x))})
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/40-rtc-class.patch b/packages/linux/ixp4xx-kernel/2.6.15/40-rtc-class.patch
deleted file mode 100644
index 3b36813564..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/40-rtc-class.patch
+++ /dev/null
@@ -1,3208 +0,0 @@
---- linux-nslu2.orig/include/linux/rtc.h 2006-01-20 12:04:18.000000000 +0100
-+++ linux-nslu2/include/linux/rtc.h 2006-01-20 20:23:24.000000000 +0100
-@@ -91,8 +91,91 @@ struct rtc_pll_info {
- #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */
- #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */
-
-+/* interrupt flags */
-+#define RTC_IRQF 0x80 /* any of the following is active */
-+#define RTC_PF 0x40
-+#define RTC_AF 0x20
-+#define RTC_UF 0x10
-+
- #ifdef __KERNEL__
-
-+#include <linux/device.h>
-+#include <linux/seq_file.h>
-+#include <linux/cdev.h>
-+#include <linux/poll.h>
-+
-+struct rtc_class_ops {
-+ int (*open)(struct device *);
-+ void (*release)(struct device *);
-+ int (*ioctl)(struct device *, unsigned int, unsigned long);
-+ int (*read_time)(struct device *, struct rtc_time *);
-+ int (*set_time)(struct device *, struct rtc_time *);
-+ int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-+ int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-+ int (*proc)(struct device *, struct seq_file *);
-+ int (*set_mmss)(struct device *, unsigned long secs);
-+ int (*irq_set_state)(struct device *, int enabled);
-+ int (*irq_set_freq)(struct device *, int freq);
-+};
-+
-+#define RTC_DEVICE_NAME_SIZE 20
-+struct rtc_task;
-+
-+struct rtc_device
-+{
-+ int id;
-+ struct module *owner;
-+ struct class_device class_dev;
-+ struct semaphore ops_lock;
-+ struct rtc_class_ops *ops;
-+ char name[RTC_DEVICE_NAME_SIZE];
-+
-+ struct cdev char_dev;
-+ struct semaphore char_sem;
-+
-+ unsigned long irq_data;
-+ spinlock_t irq_lock;
-+ wait_queue_head_t irq_queue;
-+ struct fasync_struct *async_queue;
-+
-+ spinlock_t irq_task_lock;
-+ struct rtc_task *irq_task;
-+ int irq_freq;
-+};
-+#define to_rtc_device(d) container_of(d, struct rtc_device, class_dev)
-+
-+extern struct rtc_device *rtc_device_register(char *name,
-+ struct device *dev,
-+ struct rtc_class_ops *ops,
-+ struct module *owner);
-+extern void rtc_device_unregister(struct rtc_device *rdev);
-+extern int rtc_interface_register(struct class_interface *intf);
-+
-+extern int rtc_month_days(unsigned int month, unsigned int year);
-+extern int rtc_valid_tm(struct rtc_time *tm);
-+extern int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time);
-+extern void rtc_time_to_tm(unsigned long time, struct rtc_time *tm);
-+
-+extern int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm);
-+extern int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm);
-+extern int rtc_read_alarm(struct class_device *class_dev,
-+ struct rtc_wkalrm *alrm);
-+extern int rtc_set_alarm(struct class_device *class_dev,
-+ struct rtc_wkalrm *alrm);
-+extern void rtc_update_irq(struct class_device *class_dev,
-+ unsigned long num, unsigned long events);
-+
-+extern struct class_device *rtc_open(char *name);
-+extern void rtc_close(struct class_device *class_dev);
-+extern int rtc_irq_register(struct class_device *class_dev,
-+ struct rtc_task *task);
-+extern void rtc_irq_unregister(struct class_device *class_dev,
-+ struct rtc_task *task);
-+extern int rtc_irq_set_state(struct class_device *class_dev,
-+ struct rtc_task *task, int enabled);
-+extern int rtc_irq_set_freq(struct class_device *class_dev,
-+ struct rtc_task *task, int freq);
-+
- typedef struct rtc_task {
- void (*func)(void *private_data);
- void *private_data;
---- linux-nslu2.orig/drivers/Kconfig 2006-01-20 12:04:18.000000000 +0100
-+++ linux-nslu2/drivers/Kconfig 2006-01-20 20:23:24.000000000 +0100
-@@ -66,4 +66,6 @@ source "drivers/infiniband/Kconfig"
-
- source "drivers/sn/Kconfig"
-
-+source "drivers/rtc/Kconfig"
-+
- endmenu
---- linux-nslu2.orig/drivers/Makefile 2006-01-20 12:04:18.000000000 +0100
-+++ linux-nslu2/drivers/Makefile 2006-01-20 20:23:24.000000000 +0100
-@@ -54,6 +54,7 @@ obj-$(CONFIG_USB_GADGET) += usb/gadget/
- obj-$(CONFIG_GAMEPORT) += input/gameport/
- obj-$(CONFIG_INPUT) += input/
- obj-$(CONFIG_I2O) += message/
-+obj-y += rtc/
- obj-$(CONFIG_I2C) += i2c/
- obj-$(CONFIG_W1) += w1/
- obj-$(CONFIG_HWMON) += hwmon/
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/class.c 2006-01-20 20:23:24.000000000 +0100
-@@ -0,0 +1,143 @@
-+/*
-+ * RTC subsystem, base class
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * class skeleton from drivers/hwmon/hwmon.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/kdev_t.h>
-+#include <linux/idr.h>
-+
-+static DEFINE_IDR(rtc_idr);
-+static DECLARE_MUTEX(idr_lock);
-+struct class *rtc_class;
-+
-+static void rtc_device_release(struct class_device *class_dev)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+ down(&idr_lock);
-+ idr_remove(&rtc_idr, rtc->id);
-+ up(&idr_lock);
-+ kfree(rtc);
-+}
-+
-+/**
-+ * rtc_device_register - register w/ RTC class
-+ * @dev: the device to register
-+ *
-+ * rtc_device_unregister() must be called when the class device is no
-+ * longer needed.
-+ *
-+ * Returns the pointer to the new struct class device.
-+ */
-+struct rtc_device *rtc_device_register(char *name, struct device *dev,
-+ struct rtc_class_ops *ops,
-+ struct module *owner)
-+{
-+ struct rtc_device *rtc;
-+ int id, err;
-+
-+ if (idr_pre_get(&rtc_idr, GFP_KERNEL) == 0) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+
-+ down(&idr_lock);
-+ err = idr_get_new(&rtc_idr, NULL, &id);
-+ up(&idr_lock);
-+
-+ if (err < 0)
-+ goto exit;
-+
-+ id = id & MAX_ID_MASK;
-+
-+ if ((rtc = kzalloc(sizeof(struct rtc_device), GFP_KERNEL)) == NULL) {
-+ err = -ENOMEM;
-+ goto exit_idr;
-+ }
-+
-+ rtc->id = id;
-+ rtc->ops = ops;
-+ rtc->owner = owner;
-+ rtc->class_dev.dev = dev;
-+ rtc->class_dev.class = rtc_class;
-+ rtc->class_dev.release = rtc_device_release;
-+
-+ init_MUTEX(&rtc->ops_lock);
-+ spin_lock_init(&rtc->irq_lock);
-+ spin_lock_init(&rtc->irq_task_lock);
-+
-+ strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
-+ snprintf(rtc->class_dev.class_id, BUS_ID_SIZE, "rtc%d", id);
-+
-+ if ((err = class_device_register(&rtc->class_dev)))
-+ goto exit_kfree;
-+
-+ dev_info(dev, "rtc core: registered %s as %s\n",
-+ rtc->name, rtc->class_dev.class_id);
-+
-+ return rtc;
-+
-+exit_kfree:
-+ kfree(rtc);
-+
-+exit_idr:
-+ idr_remove(&rtc_idr, id);
-+
-+exit:
-+ return ERR_PTR(err);
-+}
-+EXPORT_SYMBOL_GPL(rtc_device_register);
-+
-+
-+/**
-+ * rtc_device_unregister - removes the previously registered RTC class device
-+ *
-+ * @rtc: the RTC class device to destroy
-+ */
-+void rtc_device_unregister(struct rtc_device *rtc)
-+{
-+ down(&rtc->ops_lock);
-+ rtc->ops = NULL;
-+ up(&rtc->ops_lock);
-+ class_device_unregister(&rtc->class_dev);
-+}
-+EXPORT_SYMBOL_GPL(rtc_device_unregister);
-+
-+int rtc_interface_register(struct class_interface *intf)
-+{
-+ intf->class = rtc_class;
-+ return class_interface_register(intf);
-+}
-+EXPORT_SYMBOL_GPL(rtc_interface_register);
-+
-+static int __init rtc_init(void)
-+{
-+ rtc_class = class_create(THIS_MODULE, "rtc");
-+ if (IS_ERR(rtc_class)) {
-+ printk(KERN_ERR "%s: couldn't create class\n", __FILE__);
-+ return PTR_ERR(rtc_class);
-+ }
-+ return 0;
-+}
-+
-+static void __exit rtc_exit(void)
-+{
-+ class_destroy(rtc_class);
-+}
-+
-+module_init(rtc_init);
-+module_exit(rtc_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towerteh.it>");
-+MODULE_DESCRIPTION("RTC class support");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/Kconfig 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,121 @@
-+#
-+# RTC class/drivers configuration
-+#
-+
-+menu "Real Time Clock"
-+
-+config RTC_CLASS
-+ tristate "RTC class"
-+ depends on EXPERIMENTAL
-+ default y
-+ help
-+ Generic RTC class support. If you say yes here, you will
-+ be allowed to plug one or more RTCs to your system. You will
-+ probably want to enable one of more of the interfaces below.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-class.
-+
-+config RTC_HCTOSYS
-+ bool "Set system time from RTC on startup"
-+ depends on RTC_CLASS = y
-+ default y
-+ help
-+ If you say yes here, the system time will be set using
-+ the value read from the specified RTC device. This is useful
-+ in order to avoid unnecessary fschk runs.
-+
-+config RTC_HCTOSYS_DEVICE
-+ string "The RTC to read the time from"
-+ depends on RTC_HCTOSYS = y
-+ default "rtc0"
-+ help
-+ The RTC device that will be used as the source for
-+ the system time, usually rtc0.
-+
-+comment "RTC interfaces"
-+ depends on RTC_CLASS
-+
-+config RTC_INTF_SYSFS
-+ tristate "sysfs"
-+ depends on RTC_CLASS && SYSFS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the sysfs
-+ interface, /sys/class/rtc/rtcX .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-sysfs.
-+
-+config RTC_INTF_PROC
-+ tristate "proc"
-+ depends on RTC_CLASS && PROC_FS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the proc
-+ interface, /proc/driver/rtc .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-proc.
-+
-+config RTC_INTF_DEV
-+ tristate "dev"
-+ depends on RTC_CLASS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the dev
-+ interface, /dev/rtc .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-dev.
-+
-+comment "RTC drivers"
-+ depends on RTC_CLASS
-+
-+config RTC_DRV_X1205
-+ tristate "Xicor/Intersil X1205 RTC chip"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Xicor/Intersil X1205 RTC chip.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-x1205.
-+
-+config RTC_DRV_DS1672
-+ tristate "Dallas/Maxim DS1672"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Dallas/Maxim DS1672 timekeeping chip.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-ds1672.
-+
-+config RTC_DRV_PCF8563
-+ tristate "Philips PCF8563/Epson RTC8564"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Philips PCF8563 RTC chip. The Epson RTC8564
-+ should work as well.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-pcf8563.
-+
-+config RTC_DRV_TEST
-+ tristate "Test driver/device"
-+ depends on RTC_CLASS
-+ help
-+ If you say yes here you get support for the
-+ RTC test driver. It's a software RTC which can be
-+ used to test the RTC subsystem APIs. It gets
-+ the time from the system clock.
-+ You want this driver only if you are doing development
-+ on the RTC subsystem. Please read the source code
-+ for further details.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-test.
-+
-+endmenu
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/Makefile 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,17 @@
-+#
-+# Makefile for RTC class/drivers.
-+#
-+
-+obj-y += utils.o
-+obj-$(CONFIG_RTC_HCTOSYS) += hctosys.o
-+obj-$(CONFIG_RTC_CLASS) += rtc-core.o
-+rtc-core-y := class.o interface.o
-+obj-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
-+obj-$(CONFIG_RTC_INTF_PROC) += rtc-proc.o
-+obj-$(CONFIG_RTC_INTF_DEV) += rtc-dev.o
-+
-+obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o
-+obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o
-+obj-$(CONFIG_RTC_DRV_DS1672) += rtc-ds1672.o
-+obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o
-+
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/interface.c 2006-01-20 21:26:14.000000000 +0100
-@@ -0,0 +1,232 @@
-+/*
-+ * RTC subsystem, interface functions
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/rtc.h>
-+
-+extern struct class *rtc_class;
-+
-+int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if ((err = down_interruptible(&rtc->ops_lock)))
-+ return err;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->read_time)
-+ err = -EINVAL;
-+ else {
-+ memset(tm, 0, sizeof(struct rtc_time));
-+ err = rtc->ops->read_time(class_dev->dev, tm);
-+ }
-+
-+ up(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL(rtc_read_time);
-+
-+int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if ((err = rtc_valid_tm(tm)) != 0)
-+ return err;
-+
-+ if ((err = down_interruptible(&rtc->ops_lock)))
-+ return err;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->set_time)
-+ err = -EINVAL;
-+ else
-+ err = rtc->ops->set_time(class_dev->dev, tm);
-+
-+ up(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL(rtc_set_time);
-+
-+int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if ((err = down_interruptible(&rtc->ops_lock)))
-+ return err;
-+
-+ if (rtc->ops == NULL)
-+ err = -ENODEV;
-+ else if (!rtc->ops->read_alarm)
-+ err = -EINVAL;
-+ else {
-+ memset(alarm, 0, sizeof(struct rtc_wkalrm));
-+ err = rtc->ops->read_alarm(class_dev->dev, alarm);
-+ }
-+
-+ up(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL(rtc_read_alarm);
-+
-+int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if ((err = down_interruptible(&rtc->ops_lock)))
-+ return err;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->set_alarm)
-+ err = -EINVAL;
-+ else
-+ err = rtc->ops->set_alarm(class_dev->dev, alarm);
-+
-+ up(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL(rtc_set_alarm);
-+
-+void rtc_update_irq(struct class_device *class_dev,
-+ unsigned long num, unsigned long events)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock(&rtc->irq_lock);
-+ rtc->irq_data = (rtc->irq_data + (num << 8)) | events;
-+ spin_unlock(&rtc->irq_lock);
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task)
-+ rtc->irq_task->func(rtc->irq_task->private_data);
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ wake_up_interruptible(&rtc->irq_queue);
-+ kill_fasync(&rtc->async_queue, SIGIO, POLL_IN);
-+}
-+EXPORT_SYMBOL(rtc_update_irq);
-+
-+struct class_device *rtc_open(char *name)
-+{
-+ struct class_device *class_dev = NULL,
-+ *class_dev_tmp;
-+
-+ down(&rtc_class->sem);
-+ list_for_each_entry(class_dev_tmp, &rtc_class->children, node) {
-+ if (strncmp(class_dev_tmp->class_id, name, BUS_ID_SIZE) == 0) {
-+ class_dev = class_dev_tmp;
-+ break;
-+ }
-+ }
-+
-+ if (class_dev) {
-+ if (!try_module_get(to_rtc_device(class_dev)->owner))
-+ class_dev = NULL;
-+ }
-+ up(&rtc_class->sem);
-+
-+ return class_dev;
-+}
-+EXPORT_SYMBOL(rtc_open);
-+
-+void rtc_close(struct class_device *class_dev)
-+{
-+ module_put(to_rtc_device(class_dev)->owner);
-+}
-+EXPORT_SYMBOL(rtc_close);
-+
-+int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task)
-+{
-+ int retval = -EBUSY;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if (task == NULL || task->func == NULL)
-+ return -EINVAL;
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task == NULL) {
-+ rtc->irq_task = task;
-+ retval = 0;
-+ }
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ return retval;
-+}
-+EXPORT_SYMBOL(rtc_irq_register);
-+
-+void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task == task)
-+ rtc->irq_task = NULL;
-+ spin_unlock(&rtc->irq_task_lock);
-+}
-+EXPORT_SYMBOL(rtc_irq_unregister);
-+
-+int rtc_irq_set_state(struct class_device *class_dev, struct rtc_task *task, int enabled)
-+{
-+ int err = 0;
-+ unsigned long flags;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock_irqsave(&rtc->irq_task_lock, flags);
-+ if (rtc->irq_task != task)
-+ err = -ENXIO;
-+ spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
-+
-+ if (err == 0)
-+ err = rtc->ops->irq_set_state(class_dev->dev, enabled);
-+
-+ return err;
-+}
-+EXPORT_SYMBOL(rtc_irq_set_state);
-+
-+int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int freq)
-+{
-+ int err = 0, tmp = 0;
-+ unsigned long flags;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ /* allowed range is 2-8192 */
-+ if (freq < 2 || freq > 8192)
-+ return -EINVAL;
-+
-+/* if ((freq > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE)))
-+ return -EACCES;
-+*/
-+ /* check if freq is a power of 2 */
-+ while (freq > (1 << tmp))
-+ tmp++;
-+
-+ if (freq != (1 << tmp))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&rtc->irq_task_lock, flags);
-+ if (rtc->irq_task != task)
-+ err = -ENXIO;
-+ spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
-+
-+ if (err == 0) {
-+ if ((err = rtc->ops->irq_set_freq(class_dev->dev, freq)) == 0)
-+ rtc->irq_freq = freq;
-+ }
-+ return err;
-+
-+}
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/utils.c 2006-01-20 20:23:24.000000000 +0100
-@@ -0,0 +1,97 @@
-+/*
-+ * RTC subsystem, utility functions
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/rtc.h>
-+
-+static const unsigned char rtc_days_in_month[] = {
-+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-+};
-+
-+#define LEAPS_THRU_END_OF(y) ((y)/4 - (y)/100 + (y)/400)
-+#define LEAP_YEAR(year) ((!(year % 4) && (year % 100)) || !(year % 400))
-+
-+int rtc_month_days(unsigned int month, unsigned int year)
-+{
-+ return rtc_days_in_month[month] + (LEAP_YEAR(year) && month == 1);
-+}
-+EXPORT_SYMBOL(rtc_month_days);
-+
-+/*
-+ * Convert seconds since 01-01-1970 00:00:00 to Gregorian date.
-+ */
-+void rtc_time_to_tm(unsigned long time, struct rtc_time *tm)
-+{
-+ int days, month, year;
-+
-+ days = time / 86400;
-+ time -= days * 86400;
-+
-+ tm->tm_wday = (days + 4) % 7;
-+
-+ year = 1970 + days / 365;
-+ days -= (year - 1970) * 365
-+ + LEAPS_THRU_END_OF(year - 1)
-+ - LEAPS_THRU_END_OF(1970 - 1);
-+ if (days < 0) {
-+ year -= 1;
-+ days += 365 + LEAP_YEAR(year);
-+ }
-+ tm->tm_year = year - 1900;
-+ tm->tm_yday = days + 1;
-+
-+ for (month = 0; month < 11; month++) {
-+ int newdays;
-+
-+ newdays = days - rtc_month_days(month, year);
-+ if (newdays < 0)
-+ break;
-+ days = newdays;
-+ }
-+ tm->tm_mon = month;
-+ tm->tm_mday = days + 1;
-+
-+ tm->tm_hour = time / 3600;
-+ time -= tm->tm_hour * 3600;
-+ tm->tm_min = time / 60;
-+ tm->tm_sec = time - tm->tm_min * 60;
-+}
-+EXPORT_SYMBOL(rtc_time_to_tm);
-+
-+/*
-+ * Does the rtc_time represent a valid date/time?
-+ */
-+int rtc_valid_tm(struct rtc_time *tm)
-+{
-+ if (tm->tm_year < 70 ||
-+ tm->tm_mon >= 12 ||
-+ tm->tm_mday < 1 ||
-+ tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900) ||
-+ tm->tm_hour >= 24 ||
-+ tm->tm_min >= 60 ||
-+ tm->tm_sec >= 60)
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(rtc_valid_tm);
-+
-+/*
-+ * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
-+ */
-+int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
-+{
-+ *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-+ tm->tm_hour, tm->tm_min, tm->tm_sec);
-+ return 0;
-+}
-+EXPORT_SYMBOL(rtc_tm_to_time);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/hctosys.c 2006-01-20 20:23:24.000000000 +0100
-@@ -0,0 +1,61 @@
-+/*
-+ * RTC subsystem, initialize system time on startup
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/rtc.h>
-+
-+/* IMPORTANT: the RTC only stores whole seconds. It is arbitrary
-+ * whether it stores the most close value or the value with partial
-+ * seconds truncated. However, it is important that we use it to store
-+ * the truncated value. This is because otherwise it is necessary,
-+ * in an rtc sync function, to read both xtime.tv_sec and
-+ * xtime.tv_nsec. On some processors (i.e. ARM), an atomic read
-+ * of >32bits is not possible. So storing the most close value would
-+ * slow down the sync API. So here we have the truncated value and
-+ * the best guess is to add 0.5s.
-+ */
-+
-+static int __init rtc_hctosys(void)
-+{
-+ int err;
-+ struct class_device *class_dev = rtc_open(CONFIG_RTC_HCTOSYS_DEVICE);
-+
-+ if (class_dev) {
-+ struct rtc_time tm;
-+
-+ if ((err = rtc_read_time(class_dev, &tm)) == 0) {
-+ struct timespec tv;
-+
-+ tv.tv_nsec = NSEC_PER_SEC >> 1;
-+
-+ rtc_tm_to_time(&tm, &tv.tv_sec);
-+
-+ do_settimeofday(&tv);
-+
-+ dev_info(class_dev->dev,
-+ "setting the system clock to "
-+ "%d-%02d-%02d %02d:%02d:%02d (%d)\n",
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
-+ tm.tm_hour, tm.tm_min, tm.tm_sec, tv.tv_sec);
-+ }
-+ else
-+ dev_err(class_dev->dev,
-+ "unable to set the system clock\n");
-+
-+ rtc_close(class_dev);
-+ }
-+ else
-+ printk("%s: unable to open rtc device (%s)\n",
-+ __FILE__, CONFIG_RTC_HCTOSYS_DEVICE);
-+
-+ return 0;
-+}
-+
-+late_initcall(rtc_hctosys);
---- linux-nslu2.orig/arch/arm/Kconfig 2006-01-20 21:25:46.000000000 +0100
-+++ linux-nslu2/arch/arm/Kconfig 2006-01-20 21:26:12.000000000 +0100
-@@ -748,6 +748,8 @@ source "drivers/usb/Kconfig"
-
- source "drivers/mmc/Kconfig"
-
-+source "drivers/rtc/Kconfig"
-+
- endmenu
-
- source "fs/Kconfig"
---- linux-nslu2.orig/arch/arm/common/rtctime.c 2006-01-20 21:25:46.000000000 +0100
-+++ linux-nslu2/arch/arm/common/rtctime.c 2006-01-20 21:26:12.000000000 +0100
-@@ -40,89 +40,6 @@ static struct rtc_ops *rtc_ops;
-
- #define rtc_epoch 1900UL
-
--static const unsigned char days_in_month[] = {
-- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
--};
--
--#define LEAPS_THRU_END_OF(y) ((y)/4 - (y)/100 + (y)/400)
--#define LEAP_YEAR(year) ((!(year % 4) && (year % 100)) || !(year % 400))
--
--static int month_days(unsigned int month, unsigned int year)
--{
-- return days_in_month[month] + (LEAP_YEAR(year) && month == 1);
--}
--
--/*
-- * Convert seconds since 01-01-1970 00:00:00 to Gregorian date.
-- */
--void rtc_time_to_tm(unsigned long time, struct rtc_time *tm)
--{
-- int days, month, year;
--
-- days = time / 86400;
-- time -= days * 86400;
--
-- tm->tm_wday = (days + 4) % 7;
--
-- year = 1970 + days / 365;
-- days -= (year - 1970) * 365
-- + LEAPS_THRU_END_OF(year - 1)
-- - LEAPS_THRU_END_OF(1970 - 1);
-- if (days < 0) {
-- year -= 1;
-- days += 365 + LEAP_YEAR(year);
-- }
-- tm->tm_year = year - 1900;
-- tm->tm_yday = days + 1;
--
-- for (month = 0; month < 11; month++) {
-- int newdays;
--
-- newdays = days - month_days(month, year);
-- if (newdays < 0)
-- break;
-- days = newdays;
-- }
-- tm->tm_mon = month;
-- tm->tm_mday = days + 1;
--
-- tm->tm_hour = time / 3600;
-- time -= tm->tm_hour * 3600;
-- tm->tm_min = time / 60;
-- tm->tm_sec = time - tm->tm_min * 60;
--}
--EXPORT_SYMBOL(rtc_time_to_tm);
--
--/*
-- * Does the rtc_time represent a valid date/time?
-- */
--int rtc_valid_tm(struct rtc_time *tm)
--{
-- if (tm->tm_year < 70 ||
-- tm->tm_mon >= 12 ||
-- tm->tm_mday < 1 ||
-- tm->tm_mday > month_days(tm->tm_mon, tm->tm_year + 1900) ||
-- tm->tm_hour >= 24 ||
-- tm->tm_min >= 60 ||
-- tm->tm_sec >= 60)
-- return -EINVAL;
--
-- return 0;
--}
--EXPORT_SYMBOL(rtc_valid_tm);
--
--/*
-- * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
-- */
--int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
--{
-- *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-- tm->tm_hour, tm->tm_min, tm->tm_sec);
--
-- return 0;
--}
--EXPORT_SYMBOL(rtc_tm_to_time);
--
- /*
- * Calculate the next alarm time given the requested alarm time mask
- * and the current time.
-@@ -141,13 +58,13 @@ void rtc_next_alarm_time(struct rtc_time
- next->tm_sec = alrm->tm_sec;
- }
-
--static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm)
-+static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm)
- {
- memset(tm, 0, sizeof(struct rtc_time));
- return ops->read_time(tm);
- }
-
--static inline int rtc_set_time(struct rtc_ops *ops, struct rtc_time *tm)
-+static inline int rtc_arm_set_time(struct rtc_ops *ops, struct rtc_time *tm)
- {
- int ret;
-
-@@ -158,7 +75,7 @@ static inline int rtc_set_time(struct rt
- return ret;
- }
-
--static inline int rtc_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
-+static inline int rtc_arm_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
- {
- int ret = -EINVAL;
- if (ops->read_alarm) {
-@@ -168,7 +85,7 @@ static inline int rtc_read_alarm(struct
- return ret;
- }
-
--static inline int rtc_set_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
-+static inline int rtc_arm_set_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
- {
- int ret = -EINVAL;
- if (ops->set_alarm)
-@@ -256,7 +173,7 @@ static int rtc_ioctl(struct inode *inode
-
- switch (cmd) {
- case RTC_ALM_READ:
-- ret = rtc_read_alarm(ops, &alrm);
-+ ret = rtc_arm_read_alarm(ops, &alrm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &alrm.time, sizeof(tm));
-@@ -278,11 +195,11 @@ static int rtc_ioctl(struct inode *inode
- alrm.time.tm_wday = -1;
- alrm.time.tm_yday = -1;
- alrm.time.tm_isdst = -1;
-- ret = rtc_set_alarm(ops, &alrm);
-+ ret = rtc_arm_set_alarm(ops, &alrm);
- break;
-
- case RTC_RD_TIME:
-- ret = rtc_read_time(ops, &tm);
-+ ret = rtc_arm_read_time(ops, &tm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &tm, sizeof(tm));
-@@ -300,7 +217,7 @@ static int rtc_ioctl(struct inode *inode
- ret = -EFAULT;
- break;
- }
-- ret = rtc_set_time(ops, &tm);
-+ ret = rtc_arm_set_time(ops, &tm);
- break;
-
- case RTC_EPOCH_SET:
-@@ -331,11 +248,11 @@ static int rtc_ioctl(struct inode *inode
- ret = -EFAULT;
- break;
- }
-- ret = rtc_set_alarm(ops, &alrm);
-+ ret = rtc_arm_set_alarm(ops, &alrm);
- break;
-
- case RTC_WKALM_RD:
-- ret = rtc_read_alarm(ops, &alrm);
-+ ret = rtc_arm_read_alarm(ops, &alrm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &alrm, sizeof(alrm));
-@@ -351,7 +268,7 @@ static int rtc_ioctl(struct inode *inode
- return ret;
- }
-
--static int rtc_open(struct inode *inode, struct file *file)
-+static int rtc_arm_open(struct inode *inode, struct file *file)
- {
- int ret;
-
-@@ -406,7 +323,7 @@ static struct file_operations rtc_fops =
- .read = rtc_read,
- .poll = rtc_poll,
- .ioctl = rtc_ioctl,
-- .open = rtc_open,
-+ .open = rtc_arm_open,
- .release = rtc_release,
- .fasync = rtc_fasync,
- };
-@@ -425,7 +342,7 @@ static int rtc_read_proc(char *page, cha
- struct rtc_time tm;
- char *p = page;
-
-- if (rtc_read_time(ops, &tm) == 0) {
-+ if (rtc_arm_read_time(ops, &tm) == 0) {
- p += sprintf(p,
- "rtc_time\t: %02d:%02d:%02d\n"
- "rtc_date\t: %04d-%02d-%02d\n"
-@@ -435,7 +352,7 @@ static int rtc_read_proc(char *page, cha
- rtc_epoch);
- }
-
-- if (rtc_read_alarm(ops, &alrm) == 0) {
-+ if (rtc_arm_read_alarm(ops, &alrm) == 0) {
- p += sprintf(p, "alrm_time\t: ");
- if ((unsigned int)alrm.time.tm_hour <= 24)
- p += sprintf(p, "%02d:", alrm.time.tm_hour);
---- linux-nslu2.orig/include/asm-arm/rtc.h 2006-01-20 21:25:46.000000000 +0100
-+++ linux-nslu2/include/asm-arm/rtc.h 2006-01-20 21:26:12.000000000 +0100
-@@ -25,9 +25,6 @@ struct rtc_ops {
- int (*proc)(char *buf);
- };
-
--void rtc_time_to_tm(unsigned long, struct rtc_time *);
--int rtc_tm_to_time(struct rtc_time *, unsigned long *);
--int rtc_valid_tm(struct rtc_time *);
- void rtc_next_alarm_time(struct rtc_time *, struct rtc_time *, struct rtc_time *);
- void rtc_update(unsigned long, unsigned long);
- int register_rtc(struct rtc_ops *);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-sysfs.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,128 @@
-+/*
-+ * RTC subsystem, sysfs interface
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+
-+/* device attributes */
-+
-+static ssize_t rtc_sysfs_show_name(struct class_device *dev, char *buf)
-+{
-+ return sprintf(buf, "%s\n", to_rtc_device(dev)->name);
-+}
-+static CLASS_DEVICE_ATTR(name, S_IRUGO, rtc_sysfs_show_name, NULL);
-+
-+static ssize_t rtc_sysfs_show_date(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval = -ENODEV;
-+ struct rtc_device *rtc = to_rtc_device(dev);
-+ struct rtc_time tm;
-+
-+ if ((retval = down_interruptible(&rtc->ops_lock)))
-+ return retval;
-+
-+ if (rtc->ops && ((retval = rtc_read_time(dev, &tm)) == 0)) {
-+ retval = sprintf(buf, "%04d-%02d-%02d\n",
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-+ }
-+
-+ up(&rtc->ops_lock);
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(date, S_IRUGO, rtc_sysfs_show_date, NULL);
-+
-+static ssize_t rtc_sysfs_show_time(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval = -ENODEV;
-+ struct rtc_device *rtc = to_rtc_device(dev);
-+ struct rtc_time tm;
-+
-+ if ((retval = down_interruptible(&rtc->ops_lock)))
-+ return retval;
-+
-+ if (rtc->ops && ((retval = rtc_read_time(dev, &tm)) == 0)) {
-+ retval = sprintf(buf, "%02d:%02d:%02d\n",
-+ tm.tm_hour, tm.tm_min, tm.tm_sec);
-+ }
-+
-+ up(&rtc->ops_lock);
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(time, S_IRUGO, rtc_sysfs_show_time, NULL);
-+
-+static ssize_t rtc_sysfs_show_since_epoch(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval = -ENODEV;
-+ struct rtc_device *rtc = to_rtc_device(dev);
-+ struct rtc_time tm;
-+
-+ if ((retval = down_interruptible(&rtc->ops_lock)))
-+ return retval;
-+
-+ if (rtc->ops && ((retval = rtc_read_time(dev, &tm)) == 0)) {
-+ unsigned long time;
-+ rtc_tm_to_time(&tm, &time);
-+ retval = sprintf(buf, "%lu\n", time);
-+ }
-+
-+ up(&rtc->ops_lock);
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(since_epoch, S_IRUGO, rtc_sysfs_show_since_epoch, NULL);
-+
-+/* insertion/removal hooks */
-+
-+static int __devinit rtc_sysfs_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ class_device_create_file(class_dev, &class_device_attr_name);
-+ class_device_create_file(class_dev, &class_device_attr_date);
-+ class_device_create_file(class_dev, &class_device_attr_time);
-+ class_device_create_file(class_dev, &class_device_attr_since_epoch);
-+ dev_info(class_dev->dev, "rtc intf: sysfs\n");
-+ return 0;
-+}
-+
-+static void rtc_sysfs_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ class_device_remove_file(class_dev, &class_device_attr_name);
-+ class_device_remove_file(class_dev, &class_device_attr_date);
-+ class_device_remove_file(class_dev, &class_device_attr_time);
-+ class_device_remove_file(class_dev, &class_device_attr_since_epoch);
-+}
-+
-+/* interface registration */
-+
-+struct class_interface rtc_sysfs_interface = {
-+ .add = &rtc_sysfs_add_device,
-+ .remove = &rtc_sysfs_remove_device,
-+};
-+
-+static int __init rtc_sysfs_init(void)
-+{
-+ return rtc_interface_register(&rtc_sysfs_interface);
-+}
-+
-+static void __exit rtc_sysfs_exit(void)
-+{
-+ class_interface_unregister(&rtc_sysfs_interface);
-+}
-+
-+module_init(rtc_sysfs_init);
-+module_exit(rtc_sysfs_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class sysfs interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-proc.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,158 @@
-+/*
-+ * RTC subsystem, proc interface
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/proc_fs.h>
-+#include <linux/seq_file.h>
-+
-+static struct class_device *rtc_dev = NULL;
-+static DECLARE_MUTEX(rtc_sem);
-+
-+static int rtc_proc_show(struct seq_file *seq, void *offset)
-+{
-+ struct class_device *class_dev = seq->private;
-+ struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops;
-+ struct rtc_wkalrm alrm;
-+ struct rtc_time tm;
-+
-+ if (rtc_read_time(class_dev, &tm) == 0) {
-+ seq_printf(seq,
-+ "rtc_time\t: %02d:%02d:%02d\n"
-+ "rtc_date\t: %04d-%02d-%02d\n",
-+ tm.tm_hour, tm.tm_min, tm.tm_sec,
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-+ }
-+
-+ if (rtc_read_alarm(class_dev, &alrm) == 0) {
-+ seq_printf(seq, "alrm_time\t: ");
-+ if ((unsigned int)alrm.time.tm_hour <= 24)
-+ seq_printf(seq, "%02d:", alrm.time.tm_hour);
-+ else
-+ seq_printf(seq, "**:");
-+ if ((unsigned int)alrm.time.tm_min <= 59)
-+ seq_printf(seq, "%02d:", alrm.time.tm_min);
-+ else
-+ seq_printf(seq, "**:");
-+ if ((unsigned int)alrm.time.tm_sec <= 59)
-+ seq_printf(seq, "%02d\n", alrm.time.tm_sec);
-+ else
-+ seq_printf(seq, "**\n");
-+
-+ seq_printf(seq, "alrm_date\t: ");
-+ if ((unsigned int)alrm.time.tm_year <= 200)
-+ seq_printf(seq, "%04d-", alrm.time.tm_year + 1900);
-+ else
-+ seq_printf(seq, "****-");
-+ if ((unsigned int)alrm.time.tm_mon <= 11)
-+ seq_printf(seq, "%02d-", alrm.time.tm_mon + 1);
-+ else
-+ seq_printf(seq, "**-");
-+ if ((unsigned int)alrm.time.tm_mday <= 31)
-+ seq_printf(seq, "%02d\n", alrm.time.tm_mday);
-+ else
-+ seq_printf(seq, "**\n");
-+ seq_printf(seq, "alrm_wakeup\t: %s\n",
-+ alrm.enabled ? "yes" : "no");
-+ seq_printf(seq, "alrm_pending\t: %s\n",
-+ alrm.pending ? "yes" : "no");
-+ }
-+
-+ if (ops->proc)
-+ ops->proc(class_dev->dev, seq);
-+
-+ return 0;
-+}
-+
-+static int rtc_proc_open(struct inode *inode, struct file *file)
-+{
-+ struct class_device *class_dev = PDE(inode)->data;
-+
-+ if (!try_module_get(THIS_MODULE))
-+ return -ENODEV;
-+
-+ return single_open(file, rtc_proc_show, class_dev);
-+}
-+
-+static int rtc_proc_release(struct inode *inode, struct file *file)
-+{
-+ int res = single_release(inode, file);
-+ module_put(THIS_MODULE);
-+ return res;
-+}
-+
-+static struct file_operations rtc_proc_fops = {
-+ .open = rtc_proc_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = rtc_proc_release,
-+};
-+
-+static int rtc_proc_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ down(&rtc_sem);
-+ if (rtc_dev == NULL) {
-+ struct proc_dir_entry *ent;
-+
-+ rtc_dev = class_dev;
-+
-+ if ((ent = create_proc_entry("driver/rtc", 0, NULL))) {
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ ent->proc_fops = &rtc_proc_fops;
-+ ent->owner = rtc->owner;
-+ ent->data = class_dev;
-+
-+ dev_info(class_dev->dev, "rtc intf: proc\n");
-+ }
-+ else
-+ rtc_dev = NULL;
-+ }
-+ up(&rtc_sem);
-+
-+ return 0;
-+}
-+
-+static void rtc_proc_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ down(&rtc_sem);
-+ if (rtc_dev == class_dev) {
-+ remove_proc_entry("driver/rtc", NULL);
-+ rtc_dev = NULL;
-+ }
-+ up(&rtc_sem);
-+}
-+
-+struct class_interface rtc_proc_interface = {
-+ .add = &rtc_proc_add_device,
-+ .remove = &rtc_proc_remove_device,
-+};
-+
-+static int __init rtc_proc_init(void)
-+{
-+ return rtc_interface_register(&rtc_proc_interface);
-+}
-+
-+static void __exit rtc_proc_exit(void)
-+{
-+ class_interface_unregister(&rtc_proc_interface);
-+}
-+
-+module_init(rtc_proc_init);
-+module_exit(rtc_proc_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class proc interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-dev.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,372 @@
-+/*
-+ * RTC subsystem, dev interface
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+
-+static dev_t rtc_devt;
-+
-+#define RTC_DEV_MAX 16 /* 16 RTCs should be enough for everyone... */
-+
-+static int rtc_dev_open(struct inode *inode, struct file *file)
-+{
-+ int err;
-+ struct rtc_device *rtc = container_of(inode->i_cdev,
-+ struct rtc_device, char_dev);
-+ struct rtc_class_ops *ops = rtc->ops;
-+
-+ /* We keep the lock as long as the device is in use
-+ * and return immediately if busy
-+ */
-+ if (down_trylock(&rtc->char_sem))
-+ return -EBUSY;
-+
-+ file->private_data = &rtc->class_dev;
-+
-+ err = ops->open ? ops->open(rtc->class_dev.dev) : 0;
-+ if (err == 0) {
-+
-+ spin_lock_irq(&rtc->irq_lock);
-+ rtc->irq_data = 0;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ return 0;
-+ }
-+
-+ /* something has gone wrong, release the lock */
-+ up(&rtc->char_sem);
-+ return err;
-+}
-+
-+
-+static ssize_t
-+rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+
-+ DECLARE_WAITQUEUE(wait, current);
-+ unsigned long data;
-+ ssize_t ret;
-+
-+ if (count < sizeof(unsigned long))
-+ return -EINVAL;
-+
-+ add_wait_queue(&rtc->irq_queue, &wait);
-+ do {
-+ __set_current_state(TASK_INTERRUPTIBLE);
-+
-+ spin_lock_irq(&rtc->irq_lock);
-+ data = rtc->irq_data;
-+ rtc->irq_data = 0;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ if (data != 0) {
-+ ret = 0;
-+ break;
-+ }
-+ if (file->f_flags & O_NONBLOCK) {
-+ ret = -EAGAIN;
-+ break;
-+ }
-+ if (signal_pending(current)) {
-+ ret = -ERESTARTSYS;
-+ break;
-+ }
-+ schedule();
-+ } while (1);
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&rtc->irq_queue, &wait);
-+
-+ if (ret == 0) {
-+ ret = put_user(data, (unsigned long __user *)buf);
-+ if (ret == 0)
-+ ret = sizeof(unsigned long);
-+ }
-+ return ret;
-+}
-+
-+static unsigned int rtc_dev_poll(struct file *file, poll_table *wait)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+ unsigned long data;
-+
-+ poll_wait(file, &rtc->irq_queue, wait);
-+
-+ spin_lock_irq(&rtc->irq_lock);
-+ data = rtc->irq_data;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ return data != 0 ? POLLIN | POLLRDNORM : 0;
-+}
-+
-+static int rtc_dev_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ int err = 0;
-+ struct class_device *class_dev = file->private_data;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+ struct rtc_class_ops *ops = rtc->ops;
-+ struct rtc_time tm;
-+ struct rtc_wkalrm alarm;
-+ void __user *uarg = (void __user *) arg;
-+
-+ /* avoid conflicting IRQ users */
-+ if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) {
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task)
-+ err = -EBUSY;
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* try the driver's ioctl interface */
-+ if (ops->ioctl) {
-+ err = ops->ioctl(class_dev->dev, cmd, arg);
-+ if (err < 0 && err != -EINVAL)
-+ return err;
-+ }
-+
-+ /* if the driver does not provide the ioctl interface
-+ * or if that particular ioctl was not implemented
-+ * (-EINVAL), we will try to emulate here.
-+ */
-+
-+ switch (cmd) {
-+ case RTC_ALM_READ:
-+ if ((err = rtc_read_alarm(class_dev, &alarm)) < 0)
-+ return err;
-+
-+ if ((err = copy_to_user(uarg, &alarm.time, sizeof(tm))))
-+ return -EFAULT;
-+ break;
-+
-+ case RTC_ALM_SET:
-+ if ((err = copy_from_user(&alarm.time, uarg, sizeof(tm))))
-+ return -EFAULT;
-+
-+ alarm.enabled = 0;
-+ alarm.pending = 0;
-+ alarm.time.tm_mday = -1;
-+ alarm.time.tm_mon = -1;
-+ alarm.time.tm_year = -1;
-+ alarm.time.tm_wday = -1;
-+ alarm.time.tm_yday = -1;
-+ alarm.time.tm_isdst = -1;
-+ err = rtc_set_alarm(class_dev, &alarm);
-+ break;
-+
-+ case RTC_RD_TIME:
-+ if ((err = rtc_read_time(class_dev, &tm)) < 0)
-+ return err;
-+
-+ if ((err = copy_to_user(uarg, &tm, sizeof(tm))))
-+ return -EFAULT;
-+ break;
-+
-+ case RTC_SET_TIME:
-+ if (!capable(CAP_SYS_TIME))
-+ return -EACCES;
-+
-+ if ((err = copy_from_user(&tm, uarg, sizeof(tm))))
-+ return -EFAULT;
-+
-+ err = rtc_set_time(class_dev, &tm);
-+ break;
-+#if 0
-+ case RTC_EPOCH_SET:
-+#ifndef rtc_epoch
-+ /*
-+ * There were no RTC clocks before 1900.
-+ */
-+ if (arg < 1900) {
-+ err = -EINVAL;
-+ break;
-+ }
-+ if (!capable(CAP_SYS_TIME)) {
-+ err = -EACCES;
-+ break;
-+ }
-+ rtc_epoch = arg;
-+ err = 0;
-+#endif
-+ break;
-+
-+ case RTC_EPOCH_READ:
-+ err = put_user(rtc_epoch, (unsigned long __user *)uarg);
-+ break;
-+#endif
-+ case RTC_WKALM_SET:
-+ if ((err = copy_from_user(&alarm, uarg, sizeof(alarm))))
-+ return -EFAULT;
-+
-+ err = rtc_set_alarm(class_dev, &alarm);
-+ break;
-+
-+ case RTC_WKALM_RD:
-+ if ((err = rtc_read_alarm(class_dev, &alarm)) < 0)
-+ return err;
-+
-+ if ((err = copy_to_user(uarg, &alarm, sizeof(alarm))))
-+ return -EFAULT;
-+ break;
-+
-+ default:
-+ err = -EINVAL;
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+static int rtc_dev_release(struct inode *inode, struct file *file)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+
-+ if (rtc->ops->release)
-+ rtc->ops->release(rtc->class_dev.dev);
-+
-+ spin_lock_irq(&rtc->irq_lock);
-+ rtc->irq_data = 0;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ up(&rtc->char_sem);
-+ return 0;
-+}
-+
-+static int rtc_dev_fasync(int fd, struct file *file, int on)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+ return fasync_helper(fd, file, on, &rtc->async_queue);
-+}
-+
-+static struct file_operations rtc_dev_fops = {
-+ .owner = THIS_MODULE,
-+ .llseek = no_llseek,
-+ .read = rtc_dev_read,
-+ .poll = rtc_dev_poll,
-+ .ioctl = rtc_dev_ioctl,
-+ .open = rtc_dev_open,
-+ .release = rtc_dev_release,
-+ .fasync = rtc_dev_fasync,
-+};
-+
-+static ssize_t rtc_dev_show_dev(struct class_device *class_dev, char *buf)
-+{
-+ return print_dev_t(buf, class_dev->devt);
-+}
-+static CLASS_DEVICE_ATTR(dev, S_IRUGO, rtc_dev_show_dev, NULL);
-+
-+/* insertion/removal hooks */
-+
-+static int rtc_dev_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if (rtc->id >= RTC_DEV_MAX) {
-+ dev_err(class_dev->dev, "too many RTCs\n");
-+ return -EINVAL;
-+ }
-+
-+ init_MUTEX(&rtc->char_sem);
-+ spin_lock_init(&rtc->irq_lock);
-+ init_waitqueue_head(&rtc->irq_queue);
-+
-+ cdev_init(&rtc->char_dev, &rtc_dev_fops);
-+ rtc->char_dev.owner = rtc->owner;
-+ class_dev->devt = MKDEV(MAJOR(rtc_devt), rtc->id);
-+
-+ if (cdev_add(&rtc->char_dev, class_dev->devt, 1)) {
-+ cdev_del(&rtc->char_dev);
-+
-+ dev_err(class_dev->dev,
-+ "failed to add char device %d:%d\n",
-+ MAJOR(class_dev->devt),
-+ MINOR(class_dev->devt));
-+
-+ class_dev->devt = MKDEV(0, 0);
-+ return -ENODEV;
-+ }
-+
-+ class_device_create_file(class_dev, &class_device_attr_dev);
-+
-+ dev_info(class_dev->dev, "rtc intf: dev (%d:%d)\n",
-+ MAJOR(class_dev->devt),
-+ MINOR(class_dev->devt));
-+
-+ kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
-+
-+ return 0;
-+}
-+
-+static void rtc_dev_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ class_device_remove_file(class_dev, &class_device_attr_dev);
-+
-+ if (MAJOR(class_dev->devt)) {
-+ dev_dbg(class_dev->dev, "removing char %d:%d\n",
-+ MAJOR(class_dev->devt),
-+ MINOR(class_dev->devt));
-+ cdev_del(&rtc->char_dev);
-+
-+ kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE);
-+
-+ class_dev->devt = MKDEV(0, 0);
-+ }
-+}
-+
-+/* interface registration */
-+
-+struct class_interface rtc_dev_interface = {
-+ .add = &rtc_dev_add_device,
-+ .remove = &rtc_dev_remove_device,
-+};
-+
-+static int __init rtc_dev_init(void)
-+{
-+ int err;
-+
-+ if ((err = alloc_chrdev_region(&rtc_devt, 0, RTC_DEV_MAX, "rtc")) < 0) {
-+ printk(KERN_ERR "%s: failed to allocate char dev region\n",
-+ __FILE__);
-+ return err;
-+ }
-+
-+ if ((err = rtc_interface_register(&rtc_dev_interface)) < 0) {
-+ printk(KERN_ERR "%s: failed to register the interface\n",
-+ __FILE__);
-+ unregister_chrdev_region(rtc_devt, RTC_DEV_MAX);
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+static void __exit rtc_dev_exit(void)
-+{
-+ class_interface_unregister(&rtc_dev_interface);
-+
-+ unregister_chrdev_region(rtc_devt, RTC_DEV_MAX);
-+}
-+
-+module_init(rtc_dev_init);
-+module_exit(rtc_dev_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class dev interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-x1205.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,672 @@
-+/*
-+ * An i2c driver for the Xicor/Intersil X1205 RTC
-+ * Copyright 2004 Karen Spearel
-+ * Copyright 2005 Alessandro Zummo
-+ *
-+ * please send all reports to:
-+ * kas11 at tampabay dot rr dot com
-+ * a dot zummo at towertech dot it
-+ *
-+ * based on a lot of other RTC drivers.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/err.h>
-+#include <linux/i2c.h>
-+#include <linux/string.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+#include <linux/delay.h>
-+
-+#define DRV_VERSION "1.0.5"
-+
-+/* Addresses to scan: none. This chip is located at
-+ * 0x6f and uses a two bytes register addressing.
-+ * Two bytes need to be written to read a single register,
-+ * while most other chips just require one and take the second
-+ * one as the data to be written. To prevent corrupting
-+ * unknown chips, the user must explicitely set the probe parameter.
-+ */
-+
-+static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+/* offsets into CCR area */
-+
-+#define CCR_SEC 0
-+#define CCR_MIN 1
-+#define CCR_HOUR 2
-+#define CCR_MDAY 3
-+#define CCR_MONTH 4
-+#define CCR_YEAR 5
-+#define CCR_WDAY 6
-+#define CCR_Y2K 7
-+
-+#define X1205_REG_SR 0x3F /* status register */
-+#define X1205_REG_Y2K 0x37
-+#define X1205_REG_DW 0x36
-+#define X1205_REG_YR 0x35
-+#define X1205_REG_MO 0x34
-+#define X1205_REG_DT 0x33
-+#define X1205_REG_HR 0x32
-+#define X1205_REG_MN 0x31
-+#define X1205_REG_SC 0x30
-+#define X1205_REG_DTR 0x13
-+#define X1205_REG_ATR 0x12
-+#define X1205_REG_INT 0x11
-+#define X1205_REG_0 0x10
-+#define X1205_REG_Y2K1 0x0F
-+#define X1205_REG_DWA1 0x0E
-+#define X1205_REG_YRA1 0x0D
-+#define X1205_REG_MOA1 0x0C
-+#define X1205_REG_DTA1 0x0B
-+#define X1205_REG_HRA1 0x0A
-+#define X1205_REG_MNA1 0x09
-+#define X1205_REG_SCA1 0x08
-+#define X1205_REG_Y2K0 0x07
-+#define X1205_REG_DWA0 0x06
-+#define X1205_REG_YRA0 0x05
-+#define X1205_REG_MOA0 0x04
-+#define X1205_REG_DTA0 0x03
-+#define X1205_REG_HRA0 0x02
-+#define X1205_REG_MNA0 0x01
-+#define X1205_REG_SCA0 0x00
-+
-+#define X1205_CCR_BASE 0x30 /* Base address of CCR */
-+#define X1205_ALM0_BASE 0x00 /* Base address of ALARM0 */
-+
-+#define X1205_SR_RTCF 0x01 /* Clock failure */
-+#define X1205_SR_WEL 0x02 /* Write Enable Latch */
-+#define X1205_SR_RWEL 0x04 /* Register Write Enable */
-+
-+#define X1205_DTR_DTR0 0x01
-+#define X1205_DTR_DTR1 0x02
-+#define X1205_DTR_DTR2 0x04
-+
-+#define X1205_HR_MIL 0x80 /* Set in ccr.hour for 24 hr mode */
-+
-+/* Prototypes */
-+static int x1205_attach(struct i2c_adapter *adapter);
-+static int x1205_detach(struct i2c_client *client);
-+static int x1205_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+static struct i2c_driver x1205_driver = {
-+ .owner = THIS_MODULE,
-+ .name = "x1205",
-+ .flags = I2C_DF_NOTIFY,
-+ .attach_adapter = &x1205_attach,
-+ .detach_client = &x1205_detach,
-+};
-+
-+/*
-+ * In the routines that deal directly with the x1205 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
-+ * Epoch is initialized as 2000. Time is set to UTC.
-+ */
-+static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ unsigned char reg_base)
-+{
-+ unsigned char dt_addr[2] = { 0, reg_base };
-+
-+ unsigned char buf[8];
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, dt_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 8, buf }, /* read date */
-+ };
-+
-+ /* read date registers */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw read data - sec=%02x, min=%02x, hr=%02x, "
-+ "mday=%02x, mon=%02x, year=%02x, wday=%02x, y2k=%02x\n",
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7]);
-+
-+ tm->tm_sec = BCD2BIN(buf[CCR_SEC]);
-+ tm->tm_min = BCD2BIN(buf[CCR_MIN]);
-+ tm->tm_hour = BCD2BIN(buf[CCR_HOUR] & 0x3F); /* hr is 0-23 */
-+ tm->tm_mday = BCD2BIN(buf[CCR_MDAY]);
-+ tm->tm_mon = BCD2BIN(buf[CCR_MONTH]) - 1; /* mon is 0-11 */
-+ tm->tm_year = BCD2BIN(buf[CCR_YEAR])
-+ + (BCD2BIN(buf[CCR_Y2K]) * 100) - 1900;
-+ tm->tm_wday = buf[CCR_WDAY];
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ return 0;
-+}
-+
-+static int x1205_get_status(struct i2c_client *client, unsigned char *sr)
-+{
-+ static unsigned char sr_addr[2] = { 0, X1205_REG_SR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, sr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, sr }, /* read status */
-+ };
-+
-+ /* read status register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_set_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ int datetoo, u8 reg_base)
-+{
-+ int i, xfer;
-+ unsigned char buf[8];
-+
-+ static const unsigned char wel[3] = { 0, X1205_REG_SR,
-+ X1205_SR_WEL };
-+
-+ static const unsigned char rwel[3] = { 0, X1205_REG_SR,
-+ X1205_SR_WEL | X1205_SR_RWEL };
-+
-+ static const unsigned char diswe[3] = { 0, X1205_REG_SR, 0 };
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour);
-+
-+ buf[CCR_SEC] = BIN2BCD(tm->tm_sec);
-+ buf[CCR_MIN] = BIN2BCD(tm->tm_min);
-+
-+ /* set hour and 24hr bit */
-+ buf[CCR_HOUR] = BIN2BCD(tm->tm_hour) | X1205_HR_MIL;
-+
-+ /* should we also set the date? */
-+ if (datetoo) {
-+ dev_dbg(&client->dev,
-+ "%s: mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ buf[CCR_MDAY] = BIN2BCD(tm->tm_mday);
-+
-+ /* month, 1 - 12 */
-+ buf[CCR_MONTH] = BIN2BCD(tm->tm_mon + 1);
-+
-+ /* year, since the rtc epoch*/
-+ buf[CCR_YEAR] = BIN2BCD(tm->tm_year % 100);
-+ buf[CCR_WDAY] = tm->tm_wday & 0x07;
-+ buf[CCR_Y2K] = BIN2BCD(tm->tm_year / 100);
-+ }
-+
-+ /* this sequence is required to unlock the chip */
-+ xfer = i2c_master_send(client, wel, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev, "%s: wel - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ xfer = i2c_master_send(client, rwel, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev, "%s: rwel - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ /* write register's data */
-+ for (i = 0; i < (datetoo ? 8 : 3); i++) {
-+ unsigned char rdata[3] = { 0, reg_base + i, buf[i] };
-+
-+ xfer = i2c_master_send(client, rdata, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev,
-+ "%s: xfer=%d addr=%02x, data=%02x\n",
-+ __FUNCTION__,
-+ xfer, rdata[1], rdata[2]);
-+ return -EIO;
-+ }
-+ };
-+
-+ /* disable further writes */
-+ xfer = i2c_master_send(client, diswe, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev, "%s: diswe - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_fix_osc(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_time tm;
-+
-+ tm.tm_hour = 0;
-+ tm.tm_min = 0;
-+ tm.tm_sec = 0;
-+
-+ if ((err = x1205_set_datetime(client, &tm, 0, X1205_CCR_BASE)) < 0)
-+ dev_err(&client->dev,
-+ "unable to restart the clock\n");
-+
-+ return err;
-+}
-+
-+static int x1205_get_dtrim(struct i2c_client *client, int *trim)
-+{
-+ unsigned char dtr;
-+ static unsigned char dtr_addr[2] = { 0, X1205_REG_DTR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, dtr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, &dtr }, /* read dtr */
-+ };
-+
-+ /* read dtr register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev, "%s: raw dtr=%x\n", __FUNCTION__, dtr);
-+
-+ *trim = 0;
-+
-+ if (dtr & X1205_DTR_DTR0)
-+ *trim += 20;
-+
-+ if (dtr & X1205_DTR_DTR1)
-+ *trim += 10;
-+
-+ if (dtr & X1205_DTR_DTR2)
-+ *trim = -*trim;
-+
-+ return 0;
-+}
-+
-+static int x1205_get_atrim(struct i2c_client *client, int *trim)
-+{
-+ s8 atr;
-+ static unsigned char atr_addr[2] = { 0, X1205_REG_ATR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, atr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, &atr }, /* read atr */
-+ };
-+
-+ /* read atr register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev, "%s: raw atr=%x\n", __FUNCTION__, atr);
-+
-+ /* atr is a two's complement value on 6 bits,
-+ * perform sign extension. The formula is
-+ * Catr = (atr * 0.25pF) + 11.00pF.
-+ */
-+ if (atr & 0x20)
-+ atr |= 0xC0;
-+
-+ dev_dbg(&client->dev, "%s: raw atr=%x (%d)\n", __FUNCTION__, atr, atr);
-+
-+ *trim = (atr * 250) + 11000;
-+
-+ dev_dbg(&client->dev, "%s: real=%d\n", __FUNCTION__, *trim);
-+
-+ return 0;
-+}
-+
-+struct x1205_limit
-+{
-+ unsigned char reg;
-+ unsigned char mask;
-+ unsigned char min;
-+ unsigned char max;
-+};
-+
-+static int x1205_validate_client(struct i2c_client *client)
-+{
-+ int i, xfer;
-+
-+ /* Probe array. We will read the register at the specified
-+ * address and check if the given bits are zero.
-+ */
-+ static const unsigned char probe_zero_pattern[] = {
-+ /* register, mask */
-+ X1205_REG_SR, 0x18,
-+ X1205_REG_DTR, 0xF8,
-+ X1205_REG_ATR, 0xC0,
-+ X1205_REG_INT, 0x18,
-+ X1205_REG_0, 0xFF,
-+ };
-+
-+ static const struct x1205_limit probe_limits_pattern[] = {
-+ /* register, mask, min, max */
-+ { X1205_REG_Y2K, 0xFF, 19, 20 },
-+ { X1205_REG_DW, 0xFF, 0, 6 },
-+ { X1205_REG_YR, 0xFF, 0, 99 },
-+ { X1205_REG_MO, 0xFF, 0, 12 },
-+ { X1205_REG_DT, 0xFF, 0, 31 },
-+ { X1205_REG_HR, 0x7F, 0, 23 },
-+ { X1205_REG_MN, 0xFF, 0, 59 },
-+ { X1205_REG_SC, 0xFF, 0, 59 },
-+ { X1205_REG_Y2K1, 0xFF, 19, 20 },
-+ { X1205_REG_Y2K0, 0xFF, 19, 20 },
-+ };
-+
-+ /* check that registers have bits a 0 where expected */
-+ for (i = 0; i < ARRAY_SIZE(probe_zero_pattern); i += 2) {
-+ unsigned char buf;
-+
-+ unsigned char addr[2] = { 0, probe_zero_pattern[i] };
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, addr },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ xfer = i2c_transfer(client->adapter, msgs, 2);
-+ if (xfer != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, addr[1]);
-+
-+ return -EIO;
-+ }
-+
-+ if ((buf & probe_zero_pattern[i+1]) != 0) {
-+ dev_err(&client->adapter->dev,
-+ "%s: register=%02x, zero pattern=%d, value=%x\n",
-+ __FUNCTION__, addr[1], i, buf);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ /* check limits (only registers with bcd values) */
-+ for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) {
-+ unsigned char reg, value;
-+
-+ unsigned char addr[2] = { 0, probe_limits_pattern[i].reg };
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, addr },
-+ { client->addr, I2C_M_RD, 1, &reg },
-+ };
-+
-+ xfer = i2c_transfer(client->adapter, msgs, 2);
-+
-+ if (xfer != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, addr[1]);
-+
-+ return -EIO;
-+ }
-+
-+ value = BCD2BIN(reg & probe_limits_pattern[i].mask);
-+
-+ if (value > probe_limits_pattern[i].max ||
-+ value < probe_limits_pattern[i].min) {
-+ dev_dbg(&client->adapter->dev,
-+ "%s: register=%x, lim pattern=%d, value=%d\n",
-+ __FUNCTION__, addr[1], i, value);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_rtc_read_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return x1205_get_datetime(to_i2c_client(dev),
-+ &alrm->time, X1205_ALM0_BASE);
-+}
-+
-+static int x1205_rtc_set_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return x1205_set_datetime(to_i2c_client(dev),
-+ &alrm->time, 1, X1205_ALM0_BASE);
-+}
-+
-+static int x1205_rtc_read_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return x1205_get_datetime(to_i2c_client(dev),
-+ tm, X1205_CCR_BASE);
-+}
-+
-+static int x1205_rtc_set_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return x1205_set_datetime(to_i2c_client(dev),
-+ tm, 1, X1205_CCR_BASE);
-+}
-+
-+static int x1205_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ int err;
-+
-+ struct rtc_time new_tm, old_tm;
-+
-+ if ((err = x1205_rtc_read_time(dev, &old_tm) == 0))
-+ return err;
-+
-+ /* FIXME xtime.tv_nsec = old_tm.tm_sec * 10000000; */
-+ new_tm.tm_sec = secs % 60;
-+ secs /= 60;
-+ new_tm.tm_min = secs % 60;
-+ secs /= 60;
-+ new_tm.tm_hour = secs % 24;
-+
-+ /*
-+ * avoid writing when we're going to change the day
-+ * of the month. We will retry in the next minute.
-+ * This basically means that if the RTC must not drift
-+ * by more than 1 minute in 11 minutes.
-+ */
-+ if ((old_tm.tm_hour == 23 && old_tm.tm_min == 59) ||
-+ (new_tm.tm_hour == 23 && new_tm.tm_min == 59))
-+ return 1;
-+
-+ return x1205_rtc_set_time(dev, &new_tm);
-+}
-+
-+static int x1205_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ int err, dtrim, atrim;
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+
-+ err = x1205_get_dtrim(to_i2c_client(dev), &dtrim);
-+ if (err == 0)
-+ seq_printf(seq, "digital_trim\t: %d ppm\n", dtrim);
-+
-+ err = x1205_get_atrim(to_i2c_client(dev), &atrim);
-+ if (err == 0)
-+ seq_printf(seq, "analog_trim\t: %d.%02d pF\n",
-+ atrim / 1000, atrim % 1000);
-+ return 0;
-+}
-+
-+static struct rtc_class_ops x1205_rtc_ops = {
-+ .proc = x1205_rtc_proc,
-+ .read_time = x1205_rtc_read_time,
-+ .set_time = x1205_rtc_set_time,
-+ .read_alarm = x1205_rtc_read_alarm,
-+ .set_alarm = x1205_rtc_set_alarm,
-+ .set_mmss = x1205_rtc_set_mmss,
-+};
-+
-+static ssize_t x1205_sysfs_show_atrim(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int atrim;
-+
-+ if (x1205_get_atrim(to_i2c_client(dev), &atrim) == 0) {
-+ return sprintf(buf, "%d.%02d pF\n",
-+ atrim / 1000, atrim % 1000); }
-+ return 0;
-+}
-+static DEVICE_ATTR(atrim, S_IRUGO, x1205_sysfs_show_atrim, NULL);
-+
-+static ssize_t x1205_sysfs_show_dtrim(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int dtrim;
-+
-+ if (x1205_get_dtrim(to_i2c_client(dev), &dtrim) == 0) {
-+ return sprintf(buf, "%d ppm\n", dtrim);
-+ }
-+ return 0;
-+}
-+static DEVICE_ATTR(dtrim, S_IRUGO, x1205_sysfs_show_dtrim, NULL);
-+
-+
-+static int x1205_attach(struct i2c_adapter *adapter)
-+{
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ return i2c_probe(adapter, &addr_data, x1205_probe);
-+}
-+
-+static int x1205_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ int err = 0;
-+ unsigned char sr;
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ /* I2C client */
-+ client->addr = address;
-+ client->driver = &x1205_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, x1205_driver.name, I2C_NAME_SIZE);
-+
-+ /* Verify the chip is really an X1205 */
-+ if (kind < 0) {
-+ if (x1205_validate_client(client) < 0) {
-+ err = -ENODEV;
-+ goto exit_kfree;
-+ }
-+ }
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(x1205_driver.name, &client->dev,
-+ &x1205_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ /* Check for power failures and eventualy enable the osc */
-+ if ((err = x1205_get_status(client, &sr)) == 0) {
-+ if (sr & X1205_SR_RTCF) {
-+ dev_err(&client->dev,
-+ "power failure detected, "
-+ "please set the clock\n");
-+ udelay(50);
-+ x1205_fix_osc(client);
-+ }
-+ }
-+ else
-+ dev_err(&client->dev, "couldn't read status\n");
-+
-+ device_create_file(&client->dev, &dev_attr_atrim);
-+ device_create_file(&client->dev, &dev_attr_dtrim);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int x1205_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int __init x1205_init(void)
-+{
-+ return i2c_add_driver(&x1205_driver);
-+}
-+
-+static void __exit x1205_exit(void)
-+{
-+ i2c_del_driver(&x1205_driver);
-+}
-+
-+MODULE_AUTHOR(
-+ "Karen Spearel <kas11@tampabay.rr.com>, "
-+ "Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Xicor/Intersil X1205 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(x1205_init);
-+module_exit(x1205_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-test.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,206 @@
-+/*
-+ * An RTC test device/driver
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/err.h>
-+#include <linux/rtc.h>
-+#include <linux/platform_device.h>
-+
-+struct platform_device *test0 = NULL, *test1 = NULL;
-+
-+
-+static int test_rtc_read_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_set_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_read_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ rtc_time_to_tm(get_seconds(), tm);
-+ return 0;
-+}
-+
-+static int test_rtc_set_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ struct platform_device *plat_dev = to_platform_device(dev);
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+ seq_printf(seq, "test\t\t: yes\n");
-+ seq_printf(seq, "id\t\t: %d\n", plat_dev->id);
-+
-+ return 0;
-+}
-+
-+static int test_rtc_ioctl(struct device *dev, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ /* We do support interrupts, they're generated
-+ * using the sysfs interface.
-+ */
-+ switch (cmd) {
-+ case RTC_PIE_ON:
-+ case RTC_PIE_OFF:
-+ case RTC_UIE_ON:
-+ case RTC_UIE_OFF:
-+ case RTC_AIE_ON:
-+ case RTC_AIE_OFF:
-+ return 0;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static struct rtc_class_ops test_rtc_ops = {
-+ .proc = test_rtc_proc,
-+ .read_time = test_rtc_read_time,
-+ .set_time = test_rtc_set_time,
-+ .read_alarm = test_rtc_read_alarm,
-+ .set_alarm = test_rtc_set_alarm,
-+ .set_mmss = test_rtc_set_mmss,
-+ .ioctl = test_rtc_ioctl,
-+};
-+
-+static ssize_t test_irq_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ return sprintf(buf, "%d\n", 42);
-+}
-+static ssize_t test_irq_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int retval;
-+ struct platform_device *plat_dev = to_platform_device(dev);
-+ struct rtc_device *rtc = platform_get_drvdata(plat_dev);
-+
-+ retval = count;
-+ if (strncmp(buf, "tick", 4) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF);
-+ else if (strncmp(buf, "alarm", 5) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_AF | RTC_IRQF);
-+ else if (strncmp(buf, "update", 6) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF);
-+ else
-+ retval = -EINVAL;
-+
-+ return retval;
-+}
-+static DEVICE_ATTR(irq, S_IRUGO | S_IWUSR, test_irq_show, test_irq_store);
-+
-+static int test_probe(struct platform_device *plat_dev)
-+{
-+ int err;
-+ struct rtc_device *rtc = rtc_device_register("test", &plat_dev->dev,
-+ &test_rtc_ops, THIS_MODULE);
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&plat_dev->dev,
-+ "unable to register the class device\n");
-+ return err;
-+ }
-+ device_create_file(&plat_dev->dev, &dev_attr_irq);
-+
-+ platform_set_drvdata(plat_dev, rtc);
-+
-+ return 0;
-+}
-+
-+static int __devexit test_remove(struct platform_device *plat_dev)
-+{
-+ struct rtc_device *rtc = platform_get_drvdata(plat_dev);
-+
-+ rtc_device_unregister(rtc);
-+ device_remove_file(&plat_dev->dev, &dev_attr_irq);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver test_drv = {
-+ .probe = test_probe,
-+ .remove = __devexit_p(test_remove),
-+ .driver = {
-+ .name = "rtc-test",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static int __init test_init(void)
-+{
-+ int err;
-+
-+ if ((err = platform_driver_register(&test_drv)))
-+ return err;
-+
-+ if ((test0 = platform_device_alloc("rtc-test", 0)) == NULL) {
-+ err = -ENOMEM;
-+ goto exit_driver_unregister;
-+ }
-+
-+ if ((test1 = platform_device_alloc("rtc-test", 1)) == NULL) {
-+ err = -ENOMEM;
-+ goto exit_free_test0;
-+ }
-+
-+ if ((err = platform_device_add(test0)))
-+ goto exit_free_test1;
-+
-+ if ((err = platform_device_add(test1)))
-+ goto exit_device_unregister;
-+
-+ return 0;
-+
-+exit_device_unregister:
-+ platform_device_unregister(test0);
-+
-+exit_free_test1:
-+ platform_device_put(test1);
-+
-+exit_free_test0:
-+ platform_device_put(test0);
-+
-+exit_driver_unregister:
-+ platform_driver_unregister(&test_drv);
-+ return err;
-+}
-+
-+static void __exit test_exit(void)
-+{
-+ platform_device_unregister(test0);
-+ platform_device_unregister(test1);
-+ platform_driver_unregister(&test_drv);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC test driver/device");
-+MODULE_LICENSE("GPL");
-+
-+module_init(test_init);
-+module_exit(test_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-ds1672.c 2006-01-20 21:26:12.000000000 +0100
-@@ -0,0 +1,234 @@
-+/*
-+ * An rtc/i2c driver for the Dallas DS1672
-+ * Copyright 2005 Alessandro Zummo
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/i2c.h>
-+#include <linux/rtc.h>
-+
-+#define DRV_VERSION "0.2"
-+
-+/* Addresses to scan: none. This chip cannot be detected. */
-+static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+/* Registers */
-+
-+#define DS1672_REG_CNT_BASE 0
-+#define DS1672_REG_CONTROL 4
-+#define DS1672_REG_TRICKLE 5
-+
-+
-+/* Prototypes */
-+static int ds1672_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+/*
-+ * In the routines that deal directly with the ds1672 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
-+ * Epoch is initialized as 2000. Time is set to UTC.
-+ */
-+static int ds1672_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned long time;
-+ unsigned char addr = DS1672_REG_CNT_BASE;
-+ unsigned char buf[4];
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 4, buf }, /* read date */
-+ };
-+
-+ /* read date registers */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw read data - counters=%02x,%02x,%02x,%02x\n"
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3]);
-+
-+ time = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
-+
-+ rtc_time_to_tm(time, tm);
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ return 0;
-+}
-+
-+static int ds1672_set_mmss(struct i2c_client *client, unsigned long secs)
-+{
-+ int xfer;
-+ unsigned char buf[5];
-+
-+ buf[0] = DS1672_REG_CNT_BASE;
-+ buf[1] = secs & 0x000000FF;
-+ buf[2] = (secs & 0x0000FF00) >> 8;
-+ buf[3] = (secs & 0x00FF0000) >> 16;
-+ buf[4] = (secs & 0xFF000000) >> 24;
-+
-+ xfer = i2c_master_send(client, buf, 5);
-+ if (xfer != 5) {
-+ dev_err(&client->dev, "%s: send: %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int ds1672_set_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned long secs;
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d, ",
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ rtc_tm_to_time(tm, &secs);
-+
-+ return ds1672_set_mmss(client, secs);
-+}
-+
-+static int ds1672_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return ds1672_get_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int ds1672_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return ds1672_set_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int ds1672_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ return ds1672_set_mmss(to_i2c_client(dev), secs);
-+}
-+
-+static struct rtc_class_ops ds1672_rtc_ops = {
-+ .read_time = ds1672_rtc_read_time,
-+ .set_time = ds1672_rtc_set_time,
-+ .set_mmss = ds1672_rtc_set_mmss,
-+};
-+
-+static int ds1672_attach(struct i2c_adapter *adapter)
-+{
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ return i2c_probe(adapter, &addr_data, ds1672_probe);
-+}
-+
-+static int ds1672_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static struct i2c_driver ds1672_driver = {
-+ .owner = THIS_MODULE,
-+ .name = "ds1672",
-+ .flags = I2C_DF_NOTIFY,
-+ .attach_adapter = &ds1672_attach,
-+ .detach_client = &ds1672_detach,
-+};
-+
-+static int ds1672_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ int err = 0;
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ /* I2C client */
-+ client->addr = address;
-+ client->driver = &ds1672_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, ds1672_driver.name, I2C_NAME_SIZE);
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(ds1672_driver.name, &client->dev,
-+ &ds1672_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int __init ds1672_init(void)
-+{
-+ return i2c_add_driver(&ds1672_driver);
-+}
-+
-+static void __exit ds1672_exit(void)
-+{
-+ i2c_del_driver(&ds1672_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Dallas/Maxim DS1672 timekeeper driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ds1672_init);
-+module_exit(ds1672_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/rtc/rtc-pcf8563.c 2006-01-20 21:27:41.000000000 +0100
-@@ -0,0 +1,384 @@
-+/*
-+ * An I2C driver for the Philips PCF8563 RTC
-+ * Copyright 2005-06 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * based on the other drivers in this same directory.
-+ *
-+ * http://www.semiconductors.philips.com/acrobat/datasheets/PCF8563-04.pdf
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/i2c.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+
-+#define DRV_VERSION "0.4.0"
-+
-+/* Addresses to scan */
-+static unsigned short normal_i2c[] = { 0x51, I2C_CLIENT_END };
-+
-+/* Module parameters */
-+I2C_CLIENT_INSMOD;
-+
-+#define PCF8563_REG_ST1 0x00 /* status */
-+#define PCF8563_REG_ST2 0x01
-+
-+#define PCF8563_REG_SC 0x02 /* datetime */
-+#define PCF8563_REG_MN 0x03
-+#define PCF8563_REG_HR 0x04
-+#define PCF8563_REG_DM 0x05
-+#define PCF8563_REG_DW 0x06
-+#define PCF8563_REG_MO 0x07
-+#define PCF8563_REG_YR 0x08
-+
-+#define PCF8563_REG_AMN 0x09 /* alarm */
-+#define PCF8563_REG_AHR 0x0A
-+#define PCF8563_REG_ADM 0x0B
-+#define PCF8563_REG_ADW 0x0C
-+
-+#define PCF8563_REG_CLKO 0x0D /* clock out */
-+#define PCF8563_REG_TMRC 0x0E /* timer control */
-+#define PCF8563_REG_TMR 0x0F /* timer */
-+
-+#define PCF8563_SC_LV 0x80 /* low voltage */
-+#define PCF8563_MO_C 0x80 /* century */
-+
-+/* Prototypes */
-+static int pcf8563_attach(struct i2c_adapter *adapter);
-+static int pcf8563_detach(struct i2c_client *client);
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+static struct i2c_driver pcf8563_driver = {
-+ .owner = THIS_MODULE,
-+ .name = "pcf8563",
-+ .flags = I2C_DF_NOTIFY,
-+ .attach_adapter = &pcf8563_attach,
-+ .detach_client = &pcf8563_detach,
-+};
-+
-+/*
-+ * In the routines that deal directly with the pcf8563 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
-+ */
-+static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned char buf[13];
-+ unsigned char addr = PCF8563_REG_ST1;
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 13, buf }, /* read status + date */
-+ };
-+
-+ /* read registers */
-+ if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (buf[PCF8563_REG_SC] & PCF8563_SC_LV)
-+ dev_info(&client->dev,
-+ "low voltage detected, date/time is not reliable.\n");
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw data is st1=%02x, st2=%02x, sec=%02x, min=%02x, hr=%02x, "
-+ "mday=%02x, wday=%02x, mon=%02x, year=%02x\n",
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7],
-+ buf[8]);
-+
-+
-+ tm->tm_sec = BCD2BIN(buf[PCF8563_REG_SC] & 0x7F);
-+ tm->tm_min = BCD2BIN(buf[PCF8563_REG_MN] & 0x7F);
-+ tm->tm_hour = BCD2BIN(buf[PCF8563_REG_HR] & 0x3F); /* rtc hr 0-23 */
-+ tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F);
-+ tm->tm_wday = buf[PCF8563_REG_DW] & 0x07;
-+ tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */
-+ tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR])
-+ + (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 100 : 0);
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ /* the clock can give out invalid datetime, but we cannot return
-+ * -EINVAL otherwise hwclock will refuse to set the time on bootup.
-+ */
-+ if (rtc_valid_tm(tm) < 0)
-+ dev_err(&client->dev, "retrieved date/time is not valid.\n");
-+
-+ return 0;
-+}
-+
-+static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ int i, err;
-+ unsigned char buf[9];
-+
-+ dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ /* hours, minutes and seconds */
-+ buf[PCF8563_REG_SC] = BIN2BCD(tm->tm_sec);
-+ buf[PCF8563_REG_MN] = BIN2BCD(tm->tm_min);
-+ buf[PCF8563_REG_HR] = BIN2BCD(tm->tm_hour);
-+
-+ buf[PCF8563_REG_DM] = BIN2BCD(tm->tm_mday);
-+
-+ /* month, 1 - 12 */
-+ buf[PCF8563_REG_MO] = BIN2BCD(tm->tm_mon + 1);
-+
-+ /* year and century */
-+ buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100);
-+ if (tm->tm_year / 100)
-+ buf[PCF8563_REG_MO] |= PCF8563_MO_C;
-+
-+ buf[PCF8563_REG_DW] = tm->tm_wday & 0x07;
-+
-+ /* write register's data */
-+ for (i = 0; i < 7; i++) {
-+ unsigned char data[2] = { PCF8563_REG_SC + i,
-+ buf[PCF8563_REG_SC + i] };
-+
-+ err = i2c_master_send(client, data, sizeof(data));
-+ if (err != sizeof(data)) {
-+ dev_err(&client->dev,
-+ "%s: err=%d addr=%02x, data=%02x\n",
-+ __FUNCTION__, err, data[0], data[1]);
-+ return -EIO;
-+ }
-+ };
-+
-+ return 0;
-+}
-+
-+struct pcf8563_limit
-+{
-+ unsigned char reg;
-+ unsigned char mask;
-+ unsigned char min;
-+ unsigned char max;
-+};
-+
-+static int pcf8563_validate_client(struct i2c_client *client)
-+{
-+ int i, xfer;
-+
-+ static const struct pcf8563_limit probe_limits_pattern[] = {
-+ /* register, mask, min, max */
-+ { PCF8563_REG_SC, 0x7F, 0, 59 },
-+ { PCF8563_REG_MN, 0x7F, 0, 59 },
-+ { PCF8563_REG_HR, 0x3F, 0, 23 },
-+ { PCF8563_REG_DM, 0x3F, 0, 31 },
-+ { PCF8563_REG_MO, 0x1F, 0, 12 },
-+ { PCF8563_REG_YR, 0xFF, 0, 99 },
-+ };
-+
-+ /* check limits (only registers with bcd values) */
-+ for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) {
-+ unsigned char addr, buf, value;
-+
-+ addr = probe_limits_pattern[i].reg;
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, &addr },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ xfer = i2c_transfer(client->adapter, msgs, 2);
-+
-+ if (xfer != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg);
-+
-+ return -EIO;
-+ }
-+
-+ value = BCD2BIN(buf & probe_limits_pattern[i].mask);
-+
-+ if (value > probe_limits_pattern[i].max ||
-+ value < probe_limits_pattern[i].min) {
-+ dev_dbg(&client->adapter->dev,
-+ "%s: register=%x, lim pattern=%d, value=%d\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg, i, value);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcf8563_rtc_read_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return pcf8563_get_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int pcf8563_rtc_set_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return pcf8563_set_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int pcf8563_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ int err;
-+
-+ struct rtc_time new_tm, old_tm;
-+
-+ if ((err = pcf8563_rtc_read_time(dev, &old_tm) == 0))
-+ return err;
-+
-+ /* FIXME xtime.tv_nsec = old_tm.tm_sec * 10000000; */
-+ new_tm.tm_sec = secs % 60;
-+ secs /= 60;
-+ new_tm.tm_min = secs % 60;
-+ secs /= 60;
-+ new_tm.tm_hour = secs % 24;
-+
-+ /*
-+ * avoid writing when we're going to change the day
-+ * of the month. We will retry in the next minute.
-+ * This basically means that if the RTC must not drift
-+ * by more than 1 minute in 11 minutes.
-+ */
-+ if ((old_tm.tm_hour == 23 && old_tm.tm_min == 59) ||
-+ (new_tm.tm_hour == 23 && new_tm.tm_min == 59))
-+ return 1;
-+
-+ return pcf8563_rtc_set_time(dev, &new_tm);
-+}
-+
-+static int pcf8563_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+ return 0;
-+}
-+
-+static struct rtc_class_ops pcf8563_rtc_ops = {
-+ .proc = pcf8563_rtc_proc,
-+ .read_time = pcf8563_rtc_read_time,
-+ .set_time = pcf8563_rtc_set_time,
-+ .set_mmss = pcf8563_rtc_set_mmss,
-+};
-+
-+static int pcf8563_attach(struct i2c_adapter *adapter)
-+{
-+ return i2c_probe(adapter, &addr_data, pcf8563_probe);
-+}
-+
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ int err = 0;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ client->addr = address;
-+ client->driver = &pcf8563_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, pcf8563_driver.name, I2C_NAME_SIZE);
-+
-+ /* Verify the chip is really an PCF8563 */
-+ if (kind < 0) {
-+ if (pcf8563_validate_client(client) < 0) {
-+ err = -ENODEV;
-+ goto exit_kfree;
-+ }
-+ }
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(pcf8563_driver.name, &client->dev,
-+ &pcf8563_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int pcf8563_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int __init pcf8563_init(void)
-+{
-+ return i2c_add_driver(&pcf8563_driver);
-+}
-+
-+static void __exit pcf8563_exit(void)
-+{
-+ i2c_del_driver(&pcf8563_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(pcf8563_init);
-+module_exit(pcf8563_exit);
-+
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/45-eeprom-notifier.patch b/packages/linux/ixp4xx-kernel/2.6.15/45-eeprom-notifier.patch
deleted file mode 100644
index 0c211f189a..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/45-eeprom-notifier.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-Add EEPROM notifiers
-
-These help board level code by allowing a callback when EEPROMs are
-loaded, this permits system level configuration to be loaded from the
-EEPROM. This is particularly useful when the ethernet MAC ids are
-stored in EEPROM and when the ethernet hardware is generic (so it
-has no board level knowledge), then the MACs can be loaded into
-the 'maclist' code and read out by the ethernet config.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/drivers/i2c/chips/eeprom.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/i2c/chips/eeprom.c 1970-01-01 00:00:00.000000000 +0000
-@@ -25,7 +25,6 @@
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
--
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/module.h>
-@@ -33,6 +32,9 @@
- #include <linux/sched.h>
- #include <linux/jiffies.h>
- #include <linux/i2c.h>
-+#include <linux/notifier.h>
-+
-+#include <linux/eeprom.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x50, 0x51, 0x52, 0x53, 0x54,
-@@ -41,6 +43,9 @@ static unsigned short normal_i2c[] = { 0
- /* Insmod parameters */
- I2C_CLIENT_INSMOD_1(eeprom);
-
-+/* Notifier list */
-+static DECLARE_MUTEX(eeprom_notifier_mutex);
-+static LIST_HEAD(eeprom_notifiers);
-
- /* Size of EEPROM in bytes */
- #define EEPROM_SIZE 256
-@@ -160,6 +165,7 @@ static int eeprom_detect(struct i2c_adap
- struct i2c_client *new_client;
- struct eeprom_data *data;
- int err = 0;
-+ struct list_head *this;
-
- /* There are three ways we can read the EEPROM data:
- (1) I2C block reads (faster, but unsupported by most adapters)
-@@ -196,7 +202,7 @@ static int eeprom_detect(struct i2c_adap
-
- /* Detect the Vaio nature of EEPROMs.
- We use the "PCG-" prefix as the signature. */
-- if (address == 0x57) {
-+ if (list_empty(&eeprom_notifiers) && address == 0x57) {
- if (i2c_smbus_read_byte_data(new_client, 0x80) == 'P'
- && i2c_smbus_read_byte(new_client) == 'C'
- && i2c_smbus_read_byte(new_client) == 'G'
-@@ -210,6 +216,14 @@ static int eeprom_detect(struct i2c_adap
- /* create the sysfs eeprom file */
- sysfs_create_bin_file(&new_client->dev.kobj, &eeprom_attr);
-
-+ /* Call each notifier callback */
-+ down(&eeprom_notifier_mutex);
-+ list_for_each(this, &eeprom_notifiers) {
-+ struct eeprom_notifier *not = list_entry(this, struct eeprom_notifier, list);
-+ not->add(address, kind, &new_client->dev.kobj, &eeprom_attr);
-+ }
-+ up(&eeprom_notifier_mutex);
-+
- return 0;
-
- exit_kfree:
-@@ -231,6 +245,51 @@ static int eeprom_detach_client(struct i
- return 0;
- }
-
-+/**
-+ * register_eeprom_user - register a 'user' of EEPROM devices.
-+ * @new: pointer to notifier info structure
-+ *
-+ * Registers a callback function to be called upon detection
-+ * of an EEPROM device. Detection invokes the 'add' callback
-+ * with the kobj of the mutex and a bin_attribute which allows
-+ * read from the EEPROM. The intention is that the notifier
-+ * will be able to read system configuration from the notifier.
-+ *
-+ * Only EEPROMs detected *after* the addition of the notifier
-+ * are notified. I.e. EEPROMs already known to the system
-+ * will not be notified - add the notifier from board level
-+ * code!
-+ */
-+void register_eeprom_user (struct eeprom_notifier *new)
-+{
-+ down(&eeprom_notifier_mutex);
-+
-+ list_add(&new->list, &eeprom_notifiers);
-+
-+ up(&eeprom_notifier_mutex);
-+}
-+
-+/**
-+ * unregister_eeprom_user - unregister a 'user' of EEPROM devices.
-+ * @old: pointer to notifier info structure
-+ *
-+ * Removes a callback function from the list of 'users' to be
-+ * notified upon detection of EEPROM devices.
-+ */
-+void unregister_eeprom_user (struct eeprom_notifier *old)
-+{
-+ down(&eeprom_notifier_mutex);
-+
-+ list_del(&old->list);
-+
-+ up(&eeprom_notifier_mutex);
-+}
-+
-+
-+EXPORT_SYMBOL(register_eeprom_user);
-+EXPORT_SYMBOL(unregister_eeprom_user);
-+
-+
- static int __init eeprom_init(void)
- {
- return i2c_add_driver(&eeprom_driver);
---- linux-2.6.15/include/linux/eeprom.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/include/linux/eeprom.h 1970-01-01 00:00:00.000000000 +0000
-@@ -0,0 +1,56 @@
-+#ifndef _LINUX_EEPROM_H
-+#define _LINUX_EEPROM_H
-+/*
-+ * $Id: 45-eeprom-notifier.patch,v 1.1 2006/01/16 05:21:31 jbowler Exp $
-+ *
-+ * Copyright (C) 2006 John Bowler
-+ */
-+
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#ifndef __KERNEL__
-+#error This is a kernel header
-+#endif
-+
-+#include <linux/list.h>
-+#include <linux/kobject.h>
-+#include <linux/sysfs.h>
-+
-+/*
-+ * This is very basic.
-+ *
-+ * If an EEPROM is detected on the I2C bus (this only works for
-+ * I2C EEPROMs) the eeprom_notifier::add method is called with
-+ * both the I2C information and the kobject for the sysfs
-+ * device which has been registers. It is then possible to
-+ * read from the device via the bin_attribute::read method
-+ * to extract configuration information.
-+ *
-+ * Register the notifier in the board level code, there is no
-+ * need to unregister it but you can if you want (it will save
-+ * a little bit or kernel memory to do so).
-+ */
-+struct eeprom_notifier {
-+ void (*add)(int address, int kind, struct kobject *kobj,
-+ struct bin_attribute *eeprom_attr);
-+ struct list_head list;
-+};
-+
-+extern void register_eeprom_user (struct eeprom_notifier *new);
-+extern void unregister_eeprom_user (struct eeprom_notifier *old);
-+
-+#endif /* _LINUX_EEPROM_H */
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/48-setup-byteswap-cmdline.patch b/packages/linux/ixp4xx-kernel/2.6.15/48-setup-byteswap-cmdline.patch
deleted file mode 100644
index 34b515a5bf..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/48-setup-byteswap-cmdline.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-When invoking an LE kernel from a BE boot loader or vice versa
-the ATAG_CMDLINE command line will be byte swapped, other ATAGs
-are fine because they are 32 bit values.
-
-This patch adds support for a command line option "swx " - which
-must be at the start of the command line - and which is used to
-detect a need to byte swap the rest of the command line.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/kernel/setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/kernel/setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -659,7 +659,34 @@ __tagtable(ATAG_REVISION, parse_tag_revi
-
- static int __init parse_tag_cmdline(const struct tag *tag)
- {
-- strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
-+ /* Check the first four bytes for "swx " (swap, but it's
-+ * ok) or " xws" (command line is byte swapped)
-+ */
-+ const char *cmdline = tag->u.cmdline.cmdline;
-+ u32 size = tag->hdr.size;
-+
-+ if (size > 0 && !memcmp(cmdline, " xws", 4)) {
-+ cmdline += 4;
-+
-+ if (--size > 0) {
-+ const u32 *from = (const u32*)cmdline;
-+ u32 *to = (u32*)default_command_line;
-+
-+ if (size > COMMAND_LINE_SIZE/4)
-+ size = COMMAND_LINE_SIZE/4;
-+
-+ while (size-- > 0)
-+ to[size] = swab32(from[size]);
-+
-+ default_command_line[COMMAND_LINE_SIZE-1] = 0;
-+ return 0;
-+ }
-+ }
-+
-+ if (size > 0 && !memcmp(cmdline, "swx ", 4))
-+ cmdline += 4;
-+
-+ strlcpy(default_command_line, cmdline, COMMAND_LINE_SIZE);
- return 0;
- }
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/50-nas100d-arch.patch b/packages/linux/ixp4xx-kernel/2.6.15/50-nas100d-arch.patch
deleted file mode 100644
index cb3eac2433..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/50-nas100d-arch.patch
+++ /dev/null
@@ -1,453 +0,0 @@
-http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3215/1
-
-Iomega NAS 100d (MACH_NAS100D) machine support
-
-This patch adds support for a new arm/ixp4xx machine - the Iomega NAS
-100d network attached storage product. The NAS100D is a consumer
-device containing a 266MHz Intel IXP420 processor, 16MB of flash, 64MB
-of RAM, a 160Gb internal IDE hard disk, and 802.11b/g wireless on an
-Atheros mini-PCI card.
-
-Work on porting the latest 2.6.x kernel to this device is being done by
-the NSLU2-Linux project (the same team who maintains the port to the
-Linksys NSLU2 device). In particular, the majority of this patch was
-authored by Alessandro Zummo, based on the work done for MACH_NSLU2
-support by the NSLU2-Linux core team of developers.
-
-MACH_NAS100D (as implemented by this patch) can be enabled in jumbo
-ixp4xx kernels without any affect on the other machines supported by
-that kernel.
-
-This patch applies cleanly against 2.6.15-rc7 and should be trivial to
-apply to later kernel versions. It does not depend upon any other
-patches.
-
-Modified files (and number of lines inserted):
-arch/arm/mach-ixp4xx/Kconfig | 8
-arch/arm/mach-ixp4xx/Makefile | 1
-include/asm-arm/arch-ixp4xx/hardware.h | 1
-include/asm-arm/arch-ixp4xx/irqs.h | 9
-include/asm-arm/arch-ixp4xx/nas100d.h | 75
-arch/arm/mach-ixp4xx/nas100d-pci.c | 77
-arch/arm/mach-ixp4xx/nas100d-power.c | 69
-arch/arm/mach-ixp4xx/nas100d-setup.c | 133
-
-Signed-off-by: Rod Whitby <rod@whitby.id.au>
-Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
-
---- linux-2.6.15-rc7/arch/arm/mach-ixp4xx/Kconfig 2005-12-27 22:29:00.000000000 +0100
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/Kconfig 2005-12-27 22:29:52.000000000 +0100
-@@ -71,6 +71,14 @@ config ARCH_PRPMC1100
- PrPCM1100 Processor Mezanine Module. For more information on
- this platform, see <file:Documentation/arm/IXP4xx>.
-
-+config MACH_NAS100D
-+ bool
-+ prompt "NAS100D"
-+ help
-+ Say 'Y' here if you want your kernel to support Iomega's
-+ NAS 100d device. For more information on this platform,
-+ see http://www.nslu2-linux.org/wiki/NAS100d/HomePage
-+
- #
- # Avila and IXDP share the same source for now. Will change in future
- #
---- linux-2.6.15-rc7/arch/arm/mach-ixp4xx/Makefile 2005-12-27 22:29:00.000000000 +0100
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/Makefile 2005-12-27 22:30:37.000000000 +0100
-@@ -9,4 +9,5 @@ obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-
- obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o
- obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o
- obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
-+obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
-
---- linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/hardware.h 2005-12-27 22:29:18.000000000 +0100
-+++ linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/hardware.h 2005-12-27 22:31:08.000000000 +0100
-@@ -45,5 +45,6 @@ extern unsigned int processor_id;
- #include "coyote.h"
- #include "prpmc1100.h"
- #include "nslu2.h"
-+#include "nas100d.h"
-
- #endif /* _ASM_ARCH_HARDWARE_H */
---- linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/irqs.h 2005-12-27 22:29:18.000000000 +0100
-+++ linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/irqs.h 2005-12-27 22:29:52.000000000 +0100
-@@ -100,4 +100,13 @@
- #define IRQ_NSLU2_PCI_INTB IRQ_IXP4XX_GPIO10
- #define IRQ_NSLU2_PCI_INTC IRQ_IXP4XX_GPIO9
-
-+/*
-+ * NAS100D board IRQs
-+ */
-+#define IRQ_NAS100D_PCI_INTA IRQ_IXP4XX_GPIO11
-+#define IRQ_NAS100D_PCI_INTB IRQ_IXP4XX_GPIO10
-+#define IRQ_NAS100D_PCI_INTC IRQ_IXP4XX_GPIO9
-+#define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8
-+#define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7
-+
- #endif
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15-rc7/include/asm-arm/arch-ixp4xx/nas100d.h 2005-11-12 14:24:14.000000000 +0100
-@@ -0,0 +1,75 @@
-+/*
-+ * include/asm-arm/arch-ixp4xx/nas100d.h
-+ *
-+ * NAS100D platform specific definitions
-+ *
-+ * Copyright (c) 2005 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on ixdp425.h:
-+ * Copyright 2004 (c) MontaVista, Software, Inc.
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2. This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#ifndef __ASM_ARCH_HARDWARE_H__
-+#error "Do not include this directly, instead #include <asm/hardware.h>"
-+#endif
-+
-+#define NAS100D_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS
-+#define NAS100D_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE
-+
-+#define NAS100D_SDA_PIN 6
-+#define NAS100D_SCL_PIN 5
-+
-+/*
-+ * NAS100D PCI IRQs
-+ */
-+#define NAS100D_PCI_MAX_DEV 3
-+#define NAS100D_PCI_IRQ_LINES 3
-+
-+
-+/* PCI controller GPIO to IRQ pin mappings */
-+#define NAS100D_PCI_INTA_PIN 11
-+#define NAS100D_PCI_INTB_PIN 10
-+#define NAS100D_PCI_INTC_PIN 9
-+#define NAS100D_PCI_INTD_PIN 8
-+#define NAS100D_PCI_INTE_PIN 7
-+
-+/* GPIO */
-+
-+#define NAS100D_GPIO0 0
-+#define NAS100D_GPIO1 1
-+#define NAS100D_GPIO2 2
-+#define NAS100D_GPIO3 3
-+#define NAS100D_GPIO4 4
-+#define NAS100D_GPIO5 5
-+#define NAS100D_GPIO6 6
-+#define NAS100D_GPIO7 7
-+#define NAS100D_GPIO8 8
-+#define NAS100D_GPIO9 9
-+#define NAS100D_GPIO10 10
-+#define NAS100D_GPIO11 11
-+#define NAS100D_GPIO12 12
-+#define NAS100D_GPIO13 13
-+#define NAS100D_GPIO14 14
-+#define NAS100D_GPIO15 15
-+
-+
-+/* Buttons */
-+
-+#define NAS100D_PB_GPIO NAS100D_GPIO14
-+#define NAS100D_RB_GPIO NAS100D_GPIO4
-+#define NAS100D_PO_GPIO NAS100D_GPIO12 /* power off */
-+
-+#define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14
-+#define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4
-+
-+/*
-+#define NAS100D_PB_BM (1L << NAS100D_PB_GPIO)
-+#define NAS100D_PO_BM (1L << NAS100D_PO_GPIO)
-+#define NAS100D_RB_BM (1L << NAS100D_RB_GPIO)
-+*/
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/nas100d-pci.c 2005-11-12 14:24:14.000000000 +0100
-@@ -0,0 +1,77 @@
-+/*
-+ * arch/arm/mach-ixp4xx/nas100d-pci.c
-+ *
-+ * NAS 100d board-level PCI initialization
-+ *
-+ * based on ixdp425-pci.c:
-+ * Copyright (C) 2002 Intel Corporation.
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Maintainer: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+
-+#include <asm/mach/pci.h>
-+#include <asm/mach-types.h>
-+
-+void __init nas100d_pci_preinit(void)
-+{
-+ set_irq_type(IRQ_NAS100D_PCI_INTA, IRQT_LOW);
-+ set_irq_type(IRQ_NAS100D_PCI_INTB, IRQT_LOW);
-+ set_irq_type(IRQ_NAS100D_PCI_INTC, IRQT_LOW);
-+ set_irq_type(IRQ_NAS100D_PCI_INTD, IRQT_LOW);
-+ set_irq_type(IRQ_NAS100D_PCI_INTE, IRQT_LOW);
-+
-+ gpio_line_isr_clear(NAS100D_PCI_INTA_PIN);
-+ gpio_line_isr_clear(NAS100D_PCI_INTB_PIN);
-+ gpio_line_isr_clear(NAS100D_PCI_INTC_PIN);
-+ gpio_line_isr_clear(NAS100D_PCI_INTD_PIN);
-+ gpio_line_isr_clear(NAS100D_PCI_INTE_PIN);
-+
-+ ixp4xx_pci_preinit();
-+}
-+
-+static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+ static int pci_irq_table[NAS100D_PCI_MAX_DEV][NAS100D_PCI_IRQ_LINES] =
-+ {
-+ { IRQ_NAS100D_PCI_INTA, -1, -1 },
-+ { IRQ_NAS100D_PCI_INTB, -1, -1 },
-+ { IRQ_NAS100D_PCI_INTC, IRQ_NAS100D_PCI_INTD, IRQ_NAS100D_PCI_INTE },
-+ };
-+
-+ int irq = -1;
-+
-+ if (slot >= 1 && slot <= NAS100D_PCI_MAX_DEV &&
-+ pin >= 1 && pin <= NAS100D_PCI_IRQ_LINES)
-+ irq = pci_irq_table[slot-1][pin-1];
-+
-+ return irq;
-+}
-+
-+struct hw_pci __initdata nas100d_pci = {
-+ .nr_controllers = 1,
-+ .preinit = nas100d_pci_preinit,
-+ .swizzle = pci_std_swizzle,
-+ .setup = ixp4xx_setup,
-+ .scan = ixp4xx_scan_bus,
-+ .map_irq = nas100d_map_irq,
-+};
-+
-+int __init nas100d_pci_init(void)
-+{
-+ if (machine_is_nas100d())
-+ pci_common_init(&nas100d_pci);
-+
-+ return 0;
-+}
-+
-+subsys_initcall(nas100d_pci_init);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/nas100d-power.c 2005-11-12 14:24:14.000000000 +0100
-@@ -0,0 +1,69 @@
-+/*
-+ * arch/arm/mach-ixp4xx/nas100d-power.c
-+ *
-+ * NAS 100d Power/Reset driver
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ *
-+ * based on nas100d-io.c
-+ * Copyright (C) 2004 Karen Spearel
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/reboot.h>
-+#include <linux/interrupt.h>
-+
-+#include <asm/mach-types.h>
-+
-+extern void ctrl_alt_del(void);
-+
-+static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ /* Signal init to do the ctrlaltdel action, this will bypass init if
-+ * it hasn't started and do a kernel_restart.
-+ */
-+ ctrl_alt_del();
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int __init nas100d_power_init(void)
-+{
-+ if (!(machine_is_nas100d()))
-+ return 0;
-+
-+ set_irq_type(NAS100D_RB_IRQ, IRQT_LOW);
-+
-+ gpio_line_isr_clear(NAS100D_RB_GPIO);
-+
-+ if (request_irq(NAS100D_RB_IRQ, &nas100d_reset_handler,
-+ SA_INTERRUPT, "NAS100D reset button", NULL) < 0) {
-+
-+ printk(KERN_DEBUG "Reset Button IRQ %d not available\n",
-+ NAS100D_RB_IRQ);
-+
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static void __exit nas100d_power_exit(void)
-+{
-+ free_irq(NAS100D_RB_IRQ, NULL);
-+}
-+
-+module_init(nas100d_power_init);
-+module_exit(nas100d_power_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("NAS100D Power/Reset driver");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15-rc7/arch/arm/mach-ixp4xx/nas100d-setup.c 2005-11-12 14:24:14.000000000 +0100
-@@ -0,0 +1,133 @@
-+/*
-+ * arch/arm/mach-ixp4xx/nas100d-setup.c
-+ *
-+ * NAS 100d board-setup
-+ *
-+ * based ixdp425-setup.c:
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Author: Rod Whitby <rod@whitby.id.au>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/serial.h>
-+#include <linux/serial_8250.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/flash.h>
-+
-+static struct flash_platform_data nas100d_flash_data = {
-+ .map_name = "cfi_probe",
-+ .width = 2,
-+};
-+
-+static struct resource nas100d_flash_resource = {
-+ .start = NAS100D_FLASH_BASE,
-+ .end = NAS100D_FLASH_BASE + NAS100D_FLASH_SIZE,
-+ .flags = IORESOURCE_MEM,
-+};
-+
-+static struct platform_device nas100d_flash = {
-+ .name = "IXP4XX-Flash",
-+ .id = 0,
-+ .dev.platform_data = &nas100d_flash_data,
-+ .num_resources = 1,
-+ .resource = &nas100d_flash_resource,
-+};
-+
-+static struct ixp4xx_i2c_pins nas100d_i2c_gpio_pins = {
-+ .sda_pin = NAS100D_SDA_PIN,
-+ .scl_pin = NAS100D_SCL_PIN,
-+};
-+
-+static struct platform_device nas100d_i2c_controller = {
-+ .name = "IXP4XX-I2C",
-+ .id = 0,
-+ .dev.platform_data = &nas100d_i2c_gpio_pins,
-+ .num_resources = 0,
-+};
-+
-+static struct resource nas100d_uart_resources[] = {
-+ {
-+ .start = IXP4XX_UART1_BASE_PHYS,
-+ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = IXP4XX_UART2_BASE_PHYS,
-+ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ }
-+};
-+
-+static struct plat_serial8250_port nas100d_uart_data[] = {
-+ {
-+ .mapbase = IXP4XX_UART1_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART1,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ {
-+ .mapbase = IXP4XX_UART2_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART2,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ { }
-+};
-+
-+static struct platform_device nas100d_uart = {
-+ .name = "serial8250",
-+ .id = PLAT8250_DEV_PLATFORM,
-+ .dev.platform_data = nas100d_uart_data,
-+ .num_resources = 2,
-+ .resource = nas100d_uart_resources,
-+};
-+
-+static struct platform_device *nas100d_devices[] __initdata = {
-+ &nas100d_i2c_controller,
-+ &nas100d_flash,
-+ &nas100d_uart,
-+};
-+
-+static void nas100d_power_off(void)
-+{
-+ /* This causes the box to drop the power and go dead. */
-+
-+ /* enable the pwr cntl gpio */
-+ gpio_line_config(NAS100D_PO_GPIO, IXP4XX_GPIO_OUT);
-+
-+ /* do the deed */
-+ gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
-+}
-+
-+static void __init nas100d_init(void)
-+{
-+ ixp4xx_sys_init();
-+
-+ pm_power_off = nas100d_power_off;
-+
-+ platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
-+}
-+
-+MACHINE_START(NAS100D, "Iomega NAS 100d")
-+ /* Maintainer: www.nslu2-linux.org */
-+ .phys_ram = PHYS_OFFSET,
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-+ .boot_params = 0x00000100,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .init_machine = nas100d_init,
-+MACHINE_END
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/55-rtc-pcf8563.patch b/packages/linux/ixp4xx-kernel/2.6.15/55-rtc-pcf8563.patch
deleted file mode 100644
index d154b6ac11..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/55-rtc-pcf8563.patch
+++ /dev/null
@@ -1,174 +0,0 @@
- drivers/char/Kconfig | 8 ++
- drivers/char/Makefile | 1
- drivers/char/pcf8563-rtc.c | 135 +++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 143 insertions(+), 1 deletion(-)
-
---- linux-nas100d.orig/drivers/char/Kconfig 2005-11-16 22:29:03.000000000 +0100
-+++ linux-nas100d/drivers/char/Kconfig 2005-11-30 23:04:56.000000000 +0100
-@@ -783,6 +783,13 @@ config RTC_VR41XX
- tristate "NEC VR4100 series Real Time Clock Support"
- depends on CPU_VR41XX
-
-+config RTC_PCF8563
-+ tristate "PCF8563 I2C RTC Support"
-+ depends on I2C && RTC_PCF8563_I2C
-+ help
-+ This driver enables the kernel to use the PCF8563
-+ I2C real time clock as the system clock.
-+
- config COBALT_LCD
- bool "Support for Cobalt LCD"
- depends on MIPS_COBALT
-@@ -1014,4 +1021,3 @@ config TELCLOCK
- files for controlling the behavior of this hardware.
-
- endmenu
--
---- linux-nas100d.orig/drivers/char/Makefile 2005-11-16 22:29:03.000000000 +0100
-+++ linux-nas100d/drivers/char/Makefile 2005-11-30 23:01:35.000000000 +0100
-@@ -65,6 +65,7 @@ obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o
- obj-$(CONFIG_DS1302) += ds1302.o
- obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o
- obj-$(CONFIG_RTC_VR41XX) += vr41xx_rtc.o
-+obj-$(CONFIG_RTC_PCF8563) += pcf8563-rtc.o
- ifeq ($(CONFIG_GENERIC_NVRAM),y)
- obj-$(CONFIG_NVRAM) += generic_nvram.o
- else
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nas100d/drivers/char/pcf8563-rtc.c 2005-11-30 23:06:53.000000000 +0100
-@@ -0,0 +1,135 @@
-+/*
-+ * drivers/char/pcf8563-rtc.c
-+ *
-+ * PCF8563 RTC platform driver
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/time.h>
-+#include <linux/rtc.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+
-+#include <linux/i2c.h>
-+#include <linux/pcf8563.h>
-+
-+#include <asm/rtc.h>
-+
-+#define DRV_VERSION "0.9"
-+
-+extern int (*set_rtc)(void);
-+
-+static int pcf8563_set_rtc(void)
-+{
-+ int err;
-+
-+ struct rtc_time new_tm, old_tm;
-+ unsigned long cur_secs = xtime.tv_sec;
-+
-+ if ((err = pcf8563_do_command(PCF8563_CMD_GETDATETIME, &old_tm) == 0))
-+ return err;
-+
-+ /* FIXME xtime.tv_nsec = old_tm.tm_sec * 10000000; */
-+ new_tm.tm_sec = cur_secs % 60;
-+ cur_secs /= 60;
-+ new_tm.tm_min = cur_secs % 60;
-+ cur_secs /= 60;
-+ new_tm.tm_hour = cur_secs % 24;
-+
-+ /*
-+ * avoid writing when we're going to change the day
-+ * of the month. We will retry in the next minute.
-+ * This basically means that if the RTC must not drift
-+ * by more than 1 minute in 11 minutes.
-+ */
-+ if ((old_tm.tm_hour == 23 && old_tm.tm_min == 59) ||
-+ (new_tm.tm_hour == 23 && new_tm.tm_min == 59))
-+ return 1;
-+
-+ return pcf8563_do_command(PCF8563_CMD_SETTIME, &new_tm);
-+}
-+
-+static int pcf8563_rtc_read_time(struct rtc_time *tm)
-+{
-+ return pcf8563_do_command(PCF8563_CMD_GETDATETIME, tm);
-+}
-+
-+static int pcf8563_rtc_set_time(struct rtc_time *tm)
-+{
-+ return pcf8563_do_command(PCF8563_CMD_SETDATETIME, tm);
-+}
-+
-+static int pcf8563_rtc_proc(char *buf)
-+{
-+ char *p = buf;
-+
-+ p += sprintf(p, "24hr\t\t: yes\n");
-+
-+ return p - buf;
-+}
-+
-+static struct rtc_ops pcf8563_rtc_ops = {
-+ .owner = THIS_MODULE,
-+ .proc = pcf8563_rtc_proc,
-+ .read_time = pcf8563_rtc_read_time,
-+ .set_time = pcf8563_rtc_set_time,
-+};
-+
-+static int pcf8563_rtc_probe(struct device *dev)
-+{
-+ int ret;
-+
-+ if ((ret = register_rtc(&pcf8563_rtc_ops)) != 0)
-+ return ret;
-+
-+ set_rtc = pcf8563_set_rtc;
-+
-+ printk(KERN_INFO "pcf8563-rtc: real time clock\n");
-+
-+ return 0;
-+}
-+
-+static int pcf8563_rtc_remove(struct device *dev)
-+{
-+ set_rtc = NULL;
-+
-+ unregister_rtc(&pcf8563_rtc_ops);
-+
-+ return 0;
-+}
-+
-+static struct device_driver pcf8563_rtc_driver = {
-+ .name = "pcf8563-rtc",
-+ .bus = &platform_bus_type,
-+ .probe = pcf8563_rtc_probe,
-+ .remove = pcf8563_rtc_remove,
-+};
-+
-+static int __init pcf8563_rtc_init(void)
-+{
-+ return driver_register(&pcf8563_rtc_driver);
-+}
-+
-+static void __exit pcf8563_rtc_exit(void)
-+{
-+ driver_unregister(&pcf8563_rtc_driver);
-+}
-+
-+module_init(pcf8563_rtc_init);
-+module_exit(pcf8563_rtc_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Xicor PCF8563 RTC platform driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/60-ixp4xx-beeper.patch b/packages/linux/ixp4xx-kernel/2.6.15/60-ixp4xx-beeper.patch
deleted file mode 100644
index f3a5149e84..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/60-ixp4xx-beeper.patch
+++ /dev/null
@@ -1,238 +0,0 @@
-Generic beeper support for the ixp4xx platform.
-
-Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
-
- arch/arm/mach-ixp4xx/nslu2-setup.c | 7 +
- drivers/input/misc/Kconfig | 12 ++
- drivers/input/misc/Makefile | 1
- drivers/input/misc/ixp4xx-beeper.c | 174 +++++++++++++++++++++++++++++++++++++
- 4 files changed, 194 insertions(+)
-
---- linux-nslu2.orig/drivers/input/misc/Kconfig 2006-01-23 02:13:55.000000000 +0100
-+++ linux-nslu2/drivers/input/misc/Kconfig 2006-01-23 02:29:48.000000000 +0100
-@@ -50,6 +50,18 @@ config INPUT_WISTRON_BTNS
- To compile this driver as a module, choose M here: the module will
- be called wistron_btns.
-
-+config INPUT_IXP4XX_BEEPER
-+ tristate "IXP4XX Beeper support"
-+ depends on ARCH_IXP4XX
-+ help
-+ If you say yes here, you can connect a beeper to the
-+ ixp4xx gpio pins. This is used by the LinkSys NSLU2.
-+
-+ If unsure, say Y.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called ixp4xx-beeper.
-+
- config INPUT_UINPUT
- tristate "User level driver support"
- help
---- linux-nslu2.orig/drivers/input/misc/Makefile 2006-01-23 02:13:55.000000000 +0100
-+++ linux-nslu2/drivers/input/misc/Makefile 2006-01-23 02:13:57.000000000 +0100
-@@ -11,3 +11,4 @@ obj-$(CONFIG_INPUT_98SPKR) += 98spkr.o
- obj-$(CONFIG_INPUT_UINPUT) += uinput.o
- obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o
- obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o
-+obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-23 02:13:55.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-25 11:32:14.000000000 +0100
-@@ -52,6 +52,12 @@ static struct platform_device nslu2_i2c_
- .num_resources = 0,
- };
-
-+static struct platform_device nslu2_beeper = {
-+ .name = "ixp4xx-beeper",
-+ .id = NSLU2_GPIO_BUZZ,
-+ .num_resources = 0,
-+};
-+
- static struct resource nslu2_uart_resources[] = {
- {
- .start = IXP4XX_UART1_BASE_PHYS,
-@@ -99,6 +105,7 @@ static struct platform_device *nslu2_dev
- &nslu2_i2c_controller,
- &nslu2_flash,
- &nslu2_uart,
-+ &nslu2_beeper,
- };
-
- static void nslu2_power_off(void)
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/input/misc/ixp4xx-beeper.c 2006-01-25 11:37:03.000000000 +0100
-@@ -0,0 +1,174 @@
-+/*
-+ * Generic IXP4xx beeper driver
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ *
-+ * based on nslu2-io.c
-+ * Copyright (C) 2004 Karen Spearel
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/input.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <asm/hardware.h>
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("ixp4xx beeper driver");
-+MODULE_LICENSE("GPL");
-+
-+static DEFINE_SPINLOCK(beep_lock);
-+
-+static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
-+{
-+ unsigned int pin = (unsigned int) dev->private;
-+ unsigned int count = 0;
-+ unsigned long flags;
-+
-+ if (type != EV_SND)
-+ return -1;
-+
-+ switch (code) {
-+ case SND_BELL:
-+ if (value)
-+ value = 1000;
-+ case SND_TONE:
-+ break;
-+ default:
-+ return -1;
-+ }
-+
-+ if (value > 20 && value < 32767)
-+#ifndef FREQ
-+ count = (ixp4xx_get_board_tick_rate() / (value * 4)) - 1;
-+#else
-+ count = (FREQ / (value * 4)) - 1;
-+#endif
-+ spin_lock_irqsave(&beep_lock, flags);
-+
-+ if (count) {
-+ gpio_line_config(pin, IXP4XX_GPIO_OUT);
-+ gpio_line_set(pin, IXP4XX_GPIO_LOW);
-+
-+ *IXP4XX_OSRT2 = (count & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-+ } else {
-+ gpio_line_config(pin, IXP4XX_GPIO_IN);
-+ gpio_line_set(pin, IXP4XX_GPIO_HIGH);
-+
-+ *IXP4XX_OSRT2 = 0;
-+ }
-+
-+ spin_unlock_irqrestore(&beep_lock, flags);
-+
-+ return 0;
-+}
-+
-+static irqreturn_t ixp4xx_spkr_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ /* clear interrupt */
-+ *IXP4XX_OSST = IXP4XX_OSST_TIMER_2_PEND;
-+
-+ /* flip the beeper output */
-+ *IXP4XX_GPIO_GPOUTR ^= (1 << (unsigned int) dev_id);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int __devinit ixp4xx_spkr_probe(struct platform_device *dev)
-+{
-+ struct input_dev *input_dev;
-+ int err;
-+
-+ input_dev = input_allocate_device();
-+ if (!input_dev)
-+ return -ENOMEM;
-+
-+ input_dev->private = (void *) dev->id;
-+ input_dev->name = "ixp4xx beeper",
-+ input_dev->phys = "ixp4xx/gpio";
-+ input_dev->id.bustype = BUS_HOST;
-+ input_dev->id.vendor = 0x001f;
-+ input_dev->id.product = 0x0001;
-+ input_dev->id.version = 0x0100;
-+ input_dev->cdev.dev = &dev->dev;
-+
-+ input_dev->evbit[0] = BIT(EV_SND);
-+ input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE);
-+ input_dev->event = ixp4xx_spkr_event;
-+
-+ err = request_irq(IRQ_IXP4XX_TIMER2, &ixp4xx_spkr_interrupt,
-+ SA_INTERRUPT | SA_TIMER, "ixp4xx-beeper", (void *) dev->id);
-+ if (err)
-+ goto err_free_device;
-+
-+ err = input_register_device(input_dev);
-+ if (err)
-+ goto err_free_irq;
-+
-+ platform_set_drvdata(dev, input_dev);
-+
-+ return 0;
-+
-+ err_free_irq:
-+ free_irq(IRQ_IXP4XX_TIMER2, dev);
-+ err_free_device:
-+ input_free_device(input_dev);
-+
-+ return err;
-+}
-+
-+static int __devexit ixp4xx_spkr_remove(struct platform_device *dev)
-+{
-+ struct input_dev *input_dev = platform_get_drvdata(dev);
-+
-+ input_unregister_device(input_dev);
-+ platform_set_drvdata(dev, NULL);
-+
-+ /* turn the speaker off */
-+ disable_irq(IRQ_IXP4XX_TIMER2);
-+ ixp4xx_spkr_event(input_dev, EV_SND, SND_BELL, 0);
-+
-+ free_irq(IRQ_IXP4XX_TIMER2, dev);
-+
-+ return 0;
-+}
-+
-+static void ixp4xx_spkr_shutdown(struct platform_device *dev)
-+{
-+ struct input_dev *input_dev = platform_get_drvdata(dev);
-+
-+ /* turn off the speaker */
-+ disable_irq(IRQ_IXP4XX_TIMER2);
-+ ixp4xx_spkr_event(input_dev, EV_SND, SND_BELL, 0);
-+}
-+
-+static struct platform_driver ixp4xx_spkr_platform_driver = {
-+ .driver = {
-+ .name = "ixp4xx-beeper",
-+ .owner = THIS_MODULE,
-+ },
-+ .probe = ixp4xx_spkr_probe,
-+ .remove = __devexit_p(ixp4xx_spkr_remove),
-+ .shutdown = ixp4xx_spkr_shutdown,
-+};
-+
-+static int __init ixp4xx_spkr_init(void)
-+{
-+ return platform_driver_register(&ixp4xx_spkr_platform_driver);
-+}
-+
-+static void __exit ixp4xx_spkr_exit(void)
-+{
-+ platform_driver_unregister(&ixp4xx_spkr_platform_driver);
-+}
-+
-+module_init(ixp4xx_spkr_init);
-+module_exit(ixp4xx_spkr_exit);
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-i2c.patch b/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-i2c.patch
deleted file mode 100644
index 7d98b75f18..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-i2c.patch
+++ /dev/null
@@ -1,531 +0,0 @@
- drivers/i2c/chips/Kconfig | 9
- drivers/i2c/chips/Makefile | 1
- drivers/i2c/chips/pcf8563.c | 466 ++++++++++++++++++++++++++++++++++++++++++++
- include/linux/pcf8563.h | 27 ++
- 4 files changed, 503 insertions(+)
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/drivers/i2c/chips/pcf8563.c 2006-01-20 11:57:40.000000000 +0100
-@@ -0,0 +1,466 @@
-+/*
-+ * pcf8563.c - An i2c driver for the Philips PCF8563 RTC
-+ * Copyright 2005 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * based on the other drivers in this same directory.
-+ *
-+ * http://www.semiconductors.philips.com/acrobat/datasheets/PCF8563-04.pdf
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/i2c.h>
-+#include <linux/string.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+#include <linux/list.h>
-+
-+#include <linux/pcf8563.h>
-+
-+#define DRV_VERSION "0.3.4"
-+
-+/* Addresses to scan */
-+static unsigned short normal_i2c[] = { 0x51, I2C_CLIENT_END };
-+
-+/* Module parameters */
-+I2C_CLIENT_INSMOD;
-+I2C_CLIENT_MODULE_PARM(hctosys,
-+ "Set the system time from the hardware clock upon initialization");
-+
-+#define PCF8563_REG_ST1 0x00 /* status */
-+#define PCF8563_REG_ST2 0x01
-+
-+#define PCF8563_REG_SC 0x02 /* datetime */
-+#define PCF8563_REG_MN 0x03
-+#define PCF8563_REG_HR 0x04
-+#define PCF8563_REG_DM 0x05
-+#define PCF8563_REG_DW 0x06
-+#define PCF8563_REG_MO 0x07
-+#define PCF8563_REG_YR 0x08
-+
-+#define PCF8563_REG_AMN 0x09 /* alarm */
-+#define PCF8563_REG_AHR 0x0A
-+#define PCF8563_REG_ADM 0x0B
-+#define PCF8563_REG_ADW 0x0C
-+
-+#define PCF8563_REG_CLKO 0x0D /* clock out */
-+#define PCF8563_REG_TMRC 0x0E /* timer control */
-+#define PCF8563_REG_TMR 0x0F /* timer */
-+
-+#define PCF8563_SC_LV 0x80 /* low voltage */
-+#define PCF8563_MO_C 0x80 /* century */
-+
-+/* Prototypes */
-+static int pcf8563_attach(struct i2c_adapter *adapter);
-+static int pcf8563_detach(struct i2c_client *client);
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind);
-+static int pcf8563_command(struct i2c_client *client, unsigned int cmd,
-+ void *arg);
-+
-+static struct i2c_driver pcf8563_driver = {
-+ .owner = THIS_MODULE,
-+ .name = "pcf8563",
-+ .flags = I2C_DF_NOTIFY,
-+ .attach_adapter = &pcf8563_attach,
-+ .detach_client = &pcf8563_detach,
-+};
-+
-+struct pcf8563_data {
-+ struct i2c_client client;
-+ struct list_head list;
-+};
-+
-+static const unsigned char days_in_mo[] =
-+ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-+
-+static LIST_HEAD(pcf8563_clients);
-+
-+/* Workaround until the I2C subsytem will allow to send
-+ * commands to a specific client. This function will send the command
-+ * to the first client.
-+ */
-+int pcf8563_do_command(unsigned int cmd, void *arg)
-+{
-+ struct list_head *walk;
-+ struct list_head *tmp;
-+ struct pcf8563_data *data;
-+
-+ list_for_each_safe(walk, tmp, &pcf8563_clients) {
-+ data = list_entry(walk, struct pcf8563_data, list);
-+ return pcf8563_command(&data->client, cmd, arg);
-+ }
-+
-+ return -ENODEV;
-+}
-+
-+#define is_leap(year) \
-+ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
-+
-+/* make sure the rtc_time values are in bounds */
-+
-+static int pcf8563_validate_tm(struct rtc_time *tm)
-+{
-+ int year = tm->tm_year + 1900;
-+
-+ if ((tm->tm_year < 70) || (tm->tm_year > 255))
-+ return -EINVAL;
-+
-+ if ((tm->tm_mon > 11) || (tm->tm_mday == 0))
-+ return -EINVAL;
-+
-+ if (tm->tm_mday > days_in_mo[tm->tm_mon]
-+ + ((tm->tm_mon == 1) && is_leap(year)))
-+ return -EINVAL;
-+
-+ if ((tm->tm_hour >= 24) || (tm->tm_min >= 60) || (tm->tm_sec >= 60))
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+
-+/*
-+ * In the routines that deal directly with the pcf8563 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
-+ */
-+static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned char buf[13];
-+ unsigned char addr = PCF8563_REG_ST1;
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 13, buf }, /* read status + date */
-+ };
-+
-+ /* read registers */
-+ if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (buf[PCF8563_REG_SC] & PCF8563_SC_LV)
-+ dev_info(&client->dev,
-+ "low voltage detected, date/time is not reliable.\n");
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw data is st1=%02x, st2=%02x, sec=%02x, min=%02x, hr=%02x, "
-+ "mday=%02x, wday=%02x, mon=%02x, year=%02x\n",
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7],
-+ buf[8]);
-+
-+
-+ tm->tm_sec = BCD2BIN(buf[PCF8563_REG_SC] & 0x7F);
-+ tm->tm_min = BCD2BIN(buf[PCF8563_REG_MN] & 0x7F);
-+ tm->tm_hour = BCD2BIN(buf[PCF8563_REG_HR] & 0x3F); /* rtc hr 0-23 */
-+ tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F);
-+ tm->tm_wday = buf[PCF8563_REG_DW] & 0x07;
-+ tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */
-+ tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR])
-+ + (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 100 : 0);
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ if (pcf8563_validate_tm(tm) < 0) {
-+ dev_err(&client->dev, "retrieved date/time is not valid.\n");
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ int datetoo)
-+{
-+ int i, err;
-+ unsigned char buf[9];
-+
-+ /* check if all values in the tm struct are correct */
-+ if ((err = pcf8563_validate_tm(tm)) < 0)
-+ return err;
-+
-+ dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ /* hours, minutes and seconds */
-+ buf[PCF8563_REG_SC] = BIN2BCD(tm->tm_sec);
-+ buf[PCF8563_REG_MN] = BIN2BCD(tm->tm_min);
-+ buf[PCF8563_REG_HR] = BIN2BCD(tm->tm_hour);
-+
-+ /* should we also set the date? */
-+ if (datetoo) {
-+ buf[PCF8563_REG_DM] = BIN2BCD(tm->tm_mday);
-+
-+ /* month, 1 - 12 */
-+ buf[PCF8563_REG_MO] = BIN2BCD(tm->tm_mon + 1);
-+
-+ /* year and century */
-+ buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100);
-+ if (tm->tm_year / 100)
-+ buf[PCF8563_REG_MO] |= PCF8563_MO_C;
-+
-+ buf[PCF8563_REG_DW] = tm->tm_wday & 0x07;
-+ }
-+
-+ /* write register's data */
-+ for (i = 0; i < (datetoo ? 7 : 3); i++) {
-+ unsigned char data[2] = { PCF8563_REG_SC + i,
-+ buf[PCF8563_REG_SC + i] };
-+
-+ err = i2c_master_send(client, data, sizeof(data));
-+ if (err != sizeof(data)) {
-+ dev_err(&client->dev,
-+ "%s: err=%d addr=%02x, data=%02x\n",
-+ __FUNCTION__, err, data[0], data[1]);
-+ return -EIO;
-+ }
-+ };
-+
-+ return 0;
-+}
-+
-+static int pcf8563_hctosys(struct i2c_client *client)
-+{
-+ int err;
-+
-+ struct rtc_time tm;
-+ struct timespec tv;
-+
-+ err = pcf8563_command(client, PCF8563_CMD_GETDATETIME, &tm);
-+
-+ if (err) {
-+ dev_err(&client->dev,
-+ "Unable to set the system clock\n");
-+ return err;
-+ }
-+
-+ /* IMPORTANT: the RTC only stores whole seconds. It is arbitrary
-+ * whether it stores the most close value or the value with partial
-+ * seconds truncated. However, it is important that we use it to store
-+ * the truncated value. This is because otherwise it is necessary,
-+ * in an rtc sync function, to read both xtime.tv_sec and
-+ * xtime.tv_nsec. On some processors (i.e. ARM), an atomic read
-+ * of >32bits is not possible. So storing the most close value would
-+ * slow down the sync API. So here we have the truncated value and
-+ * the best guess is to add 0.5s.
-+ */
-+
-+ tv.tv_nsec = NSEC_PER_SEC >> 1;
-+
-+ /* WARNING: this is not the C library 'mktime' call, it is a built in
-+ * inline function from include/linux/time.h. It expects (requires)
-+ * the month to be in the range 1-12
-+ */
-+
-+ tv.tv_sec = mktime(tm.tm_year + 1900, tm.tm_mon + 1,
-+ tm.tm_mday, tm.tm_hour,
-+ tm.tm_min, tm.tm_sec);
-+
-+ do_settimeofday(&tv);
-+
-+ dev_info(&client->dev,
-+ "setting the system clock to %d-%d-%d %d:%d:%d\n",
-+ tm.tm_year + 1900, tm.tm_mon + 1,
-+ tm.tm_mday, tm.tm_hour, tm.tm_min,
-+ tm.tm_sec);
-+
-+ return 0;
-+}
-+
-+struct pcf8563_limit
-+{
-+ unsigned char reg;
-+ unsigned char mask;
-+ unsigned char min;
-+ unsigned char max;
-+};
-+
-+static int pcf8563_validate_client(struct i2c_client *client)
-+{
-+ int i, xfer;
-+
-+ static const struct pcf8563_limit probe_limits_pattern[] = {
-+ /* register, mask, min, max */
-+ { PCF8563_REG_SC, 0x7F, 0, 59 },
-+ { PCF8563_REG_MN, 0x7F, 0, 59 },
-+ { PCF8563_REG_HR, 0x3F, 0, 23 },
-+ { PCF8563_REG_DM, 0x3F, 0, 31 },
-+ { PCF8563_REG_MO, 0x1F, 0, 12 },
-+ { PCF8563_REG_YR, 0xFF, 0, 99 },
-+ };
-+
-+ /* check limits (only registers with bcd values) */
-+ for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) {
-+ unsigned char addr, buf, value;
-+
-+ addr = probe_limits_pattern[i].reg;
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, &addr },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ xfer = i2c_transfer(client->adapter, msgs, 2);
-+
-+ if (xfer != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg);
-+
-+ return -EIO;
-+ }
-+
-+ value = BCD2BIN(buf & probe_limits_pattern[i].mask);
-+
-+ if (value > probe_limits_pattern[i].max ||
-+ value < probe_limits_pattern[i].min) {
-+ dev_dbg(&client->adapter->dev,
-+ "%s: register=%x, lim pattern=%d, value=%d\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg, i, value);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcf8563_attach(struct i2c_adapter *adapter)
-+{
-+ return i2c_probe(adapter, &addr_data, pcf8563_probe);
-+}
-+
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ struct i2c_client *client;
-+ struct pcf8563_data *data;
-+
-+ int err = 0;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(data = kzalloc(sizeof(struct pcf8563_data), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ client = &data->client;
-+ client->addr = address;
-+ client->driver = &pcf8563_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, pcf8563_driver.name, I2C_NAME_SIZE);
-+
-+ i2c_set_clientdata(client, data);
-+
-+ /* Verify the chip is really an PCF8563 */
-+ if (kind < 0) {
-+ if (pcf8563_validate_client(client) < 0) {
-+ err = -ENODEV;
-+ goto exit_kfree;
-+ }
-+ }
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ list_add(&data->list, &pcf8563_clients);
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ /* If requested, set the system time */
-+ if (hctosys)
-+ pcf8563_hctosys(client);
-+
-+ return 0;
-+
-+exit_kfree:
-+ kfree(data);
-+
-+exit:
-+ return err;
-+}
-+
-+static int pcf8563_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct pcf8563_data *data = i2c_get_clientdata(client);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ list_del(&data->list);
-+
-+ kfree(data);
-+
-+ return 0;
-+}
-+
-+static int pcf8563_command(struct i2c_client *client, unsigned int cmd,
-+ void *param)
-+{
-+ if (param == NULL)
-+ return -EINVAL;
-+
-+ if (!capable(CAP_SYS_TIME))
-+ return -EACCES;
-+
-+ dev_dbg(&client->dev, "%s: cmd=%d\n", __FUNCTION__, cmd);
-+
-+ switch (cmd) {
-+ case PCF8563_CMD_GETDATETIME:
-+ return pcf8563_get_datetime(client, param);
-+
-+ case PCF8563_CMD_SETTIME:
-+ return pcf8563_set_datetime(client, param, 0);
-+
-+ case PCF8563_CMD_SETDATETIME:
-+ return pcf8563_set_datetime(client, param, 1);
-+
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static int __init pcf8563_init(void)
-+{
-+ return i2c_add_driver(&pcf8563_driver);
-+}
-+
-+static void __exit pcf8563_exit(void)
-+{
-+ i2c_del_driver(&pcf8563_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Philips PCF8563 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+EXPORT_SYMBOL_GPL(pcf8563_do_command);
-+
-+module_init(pcf8563_init);
-+module_exit(pcf8563_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-nslu2/include/linux/pcf8563.h 2006-01-20 11:57:40.000000000 +0100
-@@ -0,0 +1,27 @@
-+/*
-+ * pcf8563.h - defines for drivers/i2c/chips/pcf8563.c
-+ * Copyright 2005 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#ifndef __LINUX_PCF8563_H__
-+#define __LINUX_PCF8563_H__
-+
-+/* commands */
-+
-+#define PCF8563_CMD_GETDATETIME 0
-+#define PCF8563_CMD_SETTIME 1
-+#define PCF8563_CMD_SETDATETIME 2
-+#define PCF8563_CMD_GETALARM 3
-+#define PCF8563_CMD_SETALARM 4
-+
-+extern int pcf8563_do_command(unsigned int cmd, void *arg);
-+
-+#endif /* __LINUX_PCF8563_H__ */
---- linux-nslu2.orig/drivers/i2c/chips/Kconfig 2006-01-20 11:55:58.000000000 +0100
-+++ linux-nslu2/drivers/i2c/chips/Kconfig 2006-01-20 11:57:40.000000000 +0100
-@@ -117,4 +117,13 @@ config SENSORS_MAX6875
- This driver can also be built as a module. If so, the module
- will be called max6875.
-
-+config RTC_PCF8563_I2C
-+ tristate "Philips PCF8563 RTC"
-+ depends on I2C && EXPERIMENTAL
-+ help
-+ If you say yes here you get support for the Philips PCF8563
-+ Real Time Clock chip. This chip is used by the Iomega NAS100D.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called pcf8563.
- endmenu
---- linux-nslu2.orig/drivers/i2c/chips/Makefile 2006-01-20 11:55:58.000000000 +0100
-+++ linux-nslu2/drivers/i2c/chips/Makefile 2006-01-20 11:58:08.000000000 +0100
-@@ -12,6 +12,7 @@ obj-$(CONFIG_SENSORS_PCF8574) += pcf8574
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
- obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o
- obj-$(CONFIG_TPS65010) += tps65010.o
-+obj-$(CONFIG_RTC_PCF8563_I2C) += pcf8563.o
-
- ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-ide.patch b/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-ide.patch
deleted file mode 100644
index fea83fbec7..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-ide.patch
+++ /dev/null
@@ -1,155 +0,0 @@
- drivers/ide/pci/aec62xx.c | 67 +++++++++++++++++++++++++++++++++++++++++++---
- drivers/ide/setup-pci.c | 12 +++++++-
- 2 files changed, 75 insertions(+), 4 deletions(-)
-
---- linux-nas100d.orig/drivers/ide/pci/aec62xx.c 2005-11-21 20:49:50.000000000 +0100
-+++ linux-nas100d/drivers/ide/pci/aec62xx.c 2005-11-21 22:15:21.000000000 +0100
-@@ -145,6 +145,16 @@ static int aec6210_tune_chipset (ide_dri
- unsigned long flags;
-
- local_irq_save(flags);
-+
-+#ifdef CONFIG_MACH_NAS100D
-+ printk(KERN_INFO "aec62xx: nas100d tuning\n");
-+ pci_write_config_word(hwif->pci_dev, PCI_COMMAND, PCI_COMMAND_IO | PCI_COMMAND_MASTER);
-+ pci_write_config_byte(hwif->pci_dev, PCI_LATENCY_TIMER, 0x80);
-+ /* Enable burst mode & force 2 ports enable */
-+ pci_read_config_byte(hwif->pci_dev, 0x4a, &tmp0);
-+ pci_write_config_byte(hwif->pci_dev, 0x4a, tmp0 | 0x80);
-+#endif
-+
- /* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */
- pci_read_config_word(dev, 0x40|(2*drive->dn), &d_conf);
- tmp0 = pci_bus_clock_list(speed, BUSCLOCK(dev));
-@@ -206,9 +216,17 @@ static int config_chipset_for_dma (ide_d
- {
- u8 speed = ide_dma_speed(drive, aec62xx_ratemask(drive));
-
-+#ifdef CONFIG_MACH_NAS100D
-+ ide_hwif_t *hwif= HWIF(drive);
-+ u8 unit = (drive->select.b.unit & 0x01);
-+#endif
- if (!(speed))
- return 0;
-
-+#ifdef CONFIG_MACH_NAS100D
-+ outb((inb(hwif->dma_base+2) & ~(1<<(5+unit))), hwif->dma_base+2);
-+#endif
-+
- (void) aec62xx_tune_chipset(drive, speed);
- return ide_dma_enable(drive);
- }
-@@ -299,6 +317,14 @@ static unsigned int __devinit init_chips
- {
- int bus_speed = system_bus_clock();
-
-+#ifdef CONFIG_MACH_NAS100D
-+ /* enable both ports */
-+ byte tmp;
-+ printk(KERN_INFO "%s: nas100d ports enable\n", name);
-+ pci_read_config_byte(dev, 0x4a, &tmp);
-+ pci_write_config_byte(dev, 0x4a, tmp | 0x06);
-+#endif
-+
- if (dev->resource[PCI_ROM_RESOURCE].start) {
- pci_write_config_dword(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
- printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);
-@@ -312,12 +338,35 @@ static unsigned int __devinit init_chips
- return dev->irq;
- }
-
-+#ifdef CONFIG_MACH_NAS100D
-+static void nas100d_insw (unsigned long port, u16 *addr, u32 count)
-+{
-+ while (count--)
-+ *addr++ = __cpu_to_le16(inw(port));
-+}
-+
-+static void nas100d_outw (u16 val, unsigned long port)
-+{
-+ u32 n, byte_enables, data;
-+ n = port % 4;
-+ byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL;
-+ data = val << (8*n);
-+ ixp4xx_pci_write(port, byte_enables | NP_CMD_IOWRITE, __le16_to_cpu(data));
-+}
-+#endif
-+
- static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
- {
- hwif->autodma = 0;
- hwif->tuneproc = &aec62xx_tune_drive;
- hwif->speedproc = &aec62xx_tune_chipset;
-
-+#ifdef CONFIG_MACH_NAS100D
-+ printk(KERN_INFO "aec62xx: enabling nas100d iops\n");
-+ hwif->OUTW = nas100d_outw;
-+ hwif->INSW = nas100d_insw;
-+#endif
-+
- if (hwif->pci_dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
- hwif->serialized = hwif->channel;
- hwif->no_dsc = 1;
-@@ -360,11 +409,18 @@ static void __devinit init_dma_aec62xx(i
- } else {
- u8 ata66 = 0;
- pci_read_config_byte(hwif->pci_dev, 0x49, &ata66);
-- if (!(hwif->udma_four))
-+ if (!(hwif->udma_four))
- hwif->udma_four = (ata66&(hwif->channel?0x02:0x01))?0:1;
- }
-
- ide_setup_dma(hwif, dmabase, 8);
-+#ifdef CONFIG_MACH_NAS100D
-+ {
-+ u8 dma_stat = hwif->INB(hwif->dma_status);
-+ dma_stat |= (1 << 4);
-+ hwif->OUTB(dma_stat, hwif->dma_status);
-+ }
-+#endif
- }
-
- static int __devinit init_setup_aec62xx(struct pci_dev *dev, ide_pci_device_t *d)
-@@ -427,6 +483,9 @@ static ide_pci_device_t aec62xx_chipsets
- .init_dma = init_dma_aec62xx,
- .channels = 2,
- .autodma = AUTODMA,
-+#ifdef CONFIG_MACH_NAS100D
-+ .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
-+#endif
- .bootable = OFF_BOARD,
- },{ /* 4 */
- .name = "AEC6X80R",
-@@ -454,6 +513,8 @@ static int __devinit aec62xx_init_one(st
- {
- ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data];
-
-+ printk(KERN_INFO "aec62xx: using config %lx\n", id->driver_data);
-+
- return d->init_setup(dev, d);
- }
-
---- linux-nas100d.orig/drivers/ide/setup-pci.c 2005-11-21 20:49:50.000000000 +0100
-+++ linux-nas100d/drivers/ide/setup-pci.c 2005-11-21 22:01:22.000000000 +0100
-@@ -602,10 +602,20 @@ void ide_pci_setup_ports(struct pci_dev
- if ((d->flags & IDEPCI_FLAG_FORCE_PDC) &&
- (secondpdc++==1) && (port==1))
- goto controller_ok;
--
-+
- if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) ||
- (tmp & e->mask) != e->val))
-+#ifdef CONFIG_MACH_NAS100D
-+ {
-+ pci_write_config_byte(dev, e->reg, tmp & ~0x01);
-+#endif
- continue; /* port not enabled */
-+#ifdef CONFIG_MACH_NAS100D
-+ }
-+ else
-+ pci_write_config_byte(dev, e->reg, tmp & ~0x01);
-+#endif
-+
- controller_ok:
-
- if (d->channels <= port)
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-rtc.patch b/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-rtc.patch
deleted file mode 100644
index 18ee72c497..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/60-nas100d-rtc.patch
+++ /dev/null
@@ -1,21 +0,0 @@
- arch/arm/mach-ixp4xx/nas100d-setup.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- linux-nas100d.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2005-11-21 22:01:22.000000000 +0100
-+++ linux-nas100d/arch/arm/mach-ixp4xx/nas100d-setup.c 2005-11-30 23:04:07.000000000 +0100
-@@ -94,10 +94,15 @@ static struct platform_device nas100d_ua
- .resource = nas100d_uart_resources,
- };
-
-+static struct platform_device nas100d_rtc = {
-+ .name = "pcf8563-rtc",
-+};
-+
- static struct platform_device *nas100d_devices[] __initdata = {
- &nas100d_i2c_controller,
- &nas100d_flash,
- &nas100d_uart,
-+ &nas100d_rtc,
- };
-
- static void nas100d_power_off(void)
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/65-loft-config.patch b/packages/linux/ixp4xx-kernel/2.6.15/65-loft-config.patch
deleted file mode 100644
index c6b0c7c679..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/65-loft-config.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-support for the Giant Shoulder Inc Loft board - a very minor
-variation on a standard Avila board
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -25,6 +25,12 @@ config ARCH_AVILA
- Avila Network Platform. For more information on this platform,
- see <file:Documentation/arm/IXP4xx>.
-
-+config MACH_LOFT
-+ bool "Loft"
-+ help
-+ Say 'Y' here if you want your kernel to support the Giant
-+ Shoulder Inc Loft board.
-+
- config ARCH_ADI_COYOTE
- bool "Coyote"
- help
-@@ -85,7 +91,7 @@ config MACH_NAS100D
- #
- config ARCH_IXDP4XX
- bool
-- depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465
-+ depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465 || MACH_LOFT
- default y
-
- #
---- linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-pci.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-pci.c 1970-01-01 00:00:00.000000000 +0000
-@@ -51,7 +51,8 @@ static int __init ixdp425_map_irq(struct
-
- int irq = -1;
-
-- if (slot >= 1 && slot <= IXDP425_PCI_MAX_DEV &&
-+ if (slot >= 1 &&
-+ slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : IXDP425_PCI_MAX_DEV) &&
- pin >= 1 && pin <= IXDP425_PCI_IRQ_LINES) {
- irq = pci_irq_table[(slot + pin - 2) % 4];
- }
-@@ -71,7 +72,8 @@ struct hw_pci ixdp425_pci __initdata = {
- int __init ixdp425_pci_init(void)
- {
- if (machine_is_ixdp425() || machine_is_ixcdp1100() ||
-- machine_is_avila() || machine_is_ixdp465())
-+ machine_is_avila() || machine_is_ixdp465() ||
-+ machine_is_loft())
- pci_common_init(&ixdp425_pci);
- return 0;
- }
---- linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -185,3 +185,22 @@ MACHINE_START(AVILA, "Gateworks Avila Ne
- MACHINE_END
- #endif
-
-+/*
-+ * Loft is functionally equivalent to Avila except that it has a
-+ * different number for the maximum PCI devices. The MACHINE
-+ * structure below is identical to Avila except for the comment.
-+ */
-+#ifdef CONFIG_MACH_LOFT
-+MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
-+ /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
-+ .phys_ram = PHYS_OFFSET,
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .boot_params = 0x0100,
-+ .init_machine = ixdp425_init,
-+MACHINE_END
-+#endif
-+
---- linux-2.6.15/include/asm-arm/arch-ixp4xx/ixdp425.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/include/asm-arm/arch-ixp4xx/ixdp425.h 1970-01-01 00:00:00.000000000 +0000
-@@ -26,6 +26,7 @@
- * IXDP425 PCI IRQs
- */
- #define IXDP425_PCI_MAX_DEV 4
-+#define LOFT_PCI_MAX_DEV 6
- #define IXDP425_PCI_IRQ_LINES 4
-
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/81-nslu2-power.patch b/packages/linux/ixp4xx-kernel/2.6.15/81-nslu2-power.patch
deleted file mode 100644
index 7587058cb7..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/81-nslu2-power.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-power.c~ 2006-01-03 13:51:10.000000000 +1030
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-power.c 2006-01-15 03:57:59.000000000 +1030
-@@ -80,6 +80,9 @@
-
- static void __exit nslu2_power_exit(void)
- {
-+ if (!(machine_is_nslu2()))
-+ return;
-+
- free_irq(NSLU2_RB_IRQ, NULL);
- free_irq(NSLU2_PB_IRQ, NULL);
- }
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/82-nas100d-power.patch b/packages/linux/ixp4xx-kernel/2.6.15/82-nas100d-power.patch
deleted file mode 100644
index 9a826efe2b..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/82-nas100d-power.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-power.c~ 2006-01-15 00:22:38.000000000 +1030
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-power.c 2006-01-15 03:58:13.000000000 +1030
-@@ -58,6 +58,9 @@
-
- static void __exit nas100d_power_exit(void)
- {
-+ if (!(machine_is_nas100d()))
-+ return;
-+
- free_irq(NAS100D_RB_IRQ, NULL);
- }
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/85-timer.patch b/packages/linux/ixp4xx-kernel/2.6.15/85-timer.patch
deleted file mode 100644
index fee28e6f69..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/85-timer.patch
+++ /dev/null
@@ -1,280 +0,0 @@
- arch/arm/mach-ixp4xx/common.c | 165 +++++++++++++++++++++++++++++++++---
- arch/arm/mach-ixp4xx/nslu2-setup.c | 5 +
- include/asm-arm/arch-ixp4xx/nslu2.h | 5 -
- include/asm-arm/arch-ixp4xx/timex.h | 23 +++--
- 4 files changed, 176 insertions(+), 22 deletions(-)
-
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/common.c 2006-01-20 20:23:46.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/common.c 2006-01-23 01:09:25.000000000 +0100
-@@ -239,36 +239,165 @@ void __init ixp4xx_init_irq(void)
- * IXP4xx timer tick
- * We use OS timer1 on the CPU for the timer tick and the timestamp
- * counter as a source of real clock ticks to account for missed jiffies.
-+ *
-+ * 'CLOCK_TICK_RATE' is the nominal number of internal ticks per second,
-+ * this is significantly greater than the actual number on any ixp4xx
-+ * board. Neither this nor 'LATCH' are required by this code because
-+ * the only requirement is to generate HZ timer_tick calls per second.
- *************************************************************************/
-+#if TICK_NSEC * HZ != 1000000000
-+ /* This will cause the jiffies to drift unnecessarily. */
-+# error CLOCK_TICK_RATE should be a multiple of HZ for this code
-+#endif
-+
-+/* These are the control registers for the interrupt handler, they must
-+ * only be read and written by the interrupt handler and by the init
-+ * method (which sets them to 0).
-+ */
-+static volatile u32 last_timer_time;
-+static volatile int accumulated_error;
-+
-+/* Most ixp4xx boards have 66.6666MHz crystals, so default to this, reset
-+ * this from the board level code if required. The following variables
-+ * must be *written* only by set_board_tick_rate
-+ */
-+static u32 board_tick_rate;
-+static u32 board_tick_per_1000; /* board_tick_rate/1000 */
-+static u32 timer_count;
-+
-+/* The following symbol may be written to change the current tick rate,
-+ * it is read by the interrupt handler and used to reload the timer.
-+ * The 'real' value (the one in use) is 'board_tick_rate' above.
-+ * NOTE: this can be tweaked to match the actual crystal on a particular
-+ * machine.
-+ */
-+volatile u32 ixp4xx_board_tick_rate = 66666600;
-+EXPORT_SYMBOL(ixp4xx_board_tick_rate);
-+
-+/* The set API may run asynchronously in the presence of interrupts,
-+ * everything it does it is both atomic and complete (notice that it
-+ * doesn't change any of the 'volatile' values). The mathematics in
-+ * here require the following values. Changing the board tick rate
-+ * implies an unknown error in the current timestamp tick count.
-+ */
-+#if IXP4XX_OST_RELOAD_MASK != 3 || IXP4XX_OST_ENABLE != 1
-+# error unexpected value for timer reload mask
-+#endif
-+static void set_board_tick_rate(u32 rate) {
-+ u32 reload;
-+
-+ /* Store the two effectively informational rate values, the
-+ * error calculation is (rate - count*HZ) (above), and rate
-+ * is changed first, this can cause a temporary error which
-+ * will be corrected on the next interrupt.
-+ */
-+ board_tick_rate = rate;
-+ board_tick_per_1000 = (rate+500)/1000;
-+
-+ /* Calculate the correct value to load into the timer countdown
-+ * register, the low two bits must be b01 (to enable the timer).
-+ * Select the top bits to be as close to the desired value as
-+ * possible.
-+ *
-+ * First find the best value, regardless of the low two bits -
-+ * this is the value used in the interrupt calculation even though
-+ * it cannot necessarily be set into the register.
-+ */
-+ timer_count = (rate + (HZ/2))/HZ;
-+
-+ /* Now the timer_ticks are being generated at this rate, calculate
-+ * an appropriate value for the register. This stores a 30 bit
-+ * value which gives a period of 4*x+1, we want:
-+ *
-+ * 4*x+1 = board_tick_rate/HZ
-+ *
-+ * This needs to be rounded to the closest 4*HZ value:
-+ *
-+ * x = ((board_tick_rate-HZ) + (4*HZ)/2) / 4*HZ
-+ * x = (board_tick_rate+HZ) / (4*HZ);
-+ */
-+ reload = (board_tick_rate + HZ) / HZ;
-+ reload = (reload & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-+ *IXP4XX_OSRT1 = reload;
-
--static unsigned volatile last_jiffy_time;
-+ /* If the clock is drifing, look in syslog: */
-+ printk(KERN_INFO "IXP4xx: FREQ=%d COUNT=%d\n", rate, reload);
-+}
-
--#define CLOCK_TICKS_PER_USEC ((CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC)
-+/* This returns the time in timer ticks since the 'last_timer_time'
-+ * recorded above. Use this to avoid arithmetic errors because of
-+ * the overflow when the timer wraps.
-+ */
-+static inline u32 ixp4xx_timer_delta(void)
-+{
-+ return *IXP4XX_OSTS - last_timer_time;
-+}
-
- /* IRQs are disabled before entering here from do_gettimeofday() */
- static unsigned long ixp4xx_gettimeoffset(void)
- {
-- u32 elapsed;
--
-- elapsed = *IXP4XX_OSTS - last_jiffy_time;
-+ /* Return the offset of the current time from the last time
-+ * timer tick in microseconds. This is only used for the
-+ * gettimeofday call.
-+ *
-+ * The result of this API is at most about 20000 (for a 50Hz
-+ * HZ - 20000 uS/tick), the input delta is at most about
-+ * 1.3M - 21 bits.
-+ */
-+ u32 delta = ixp4xx_timer_delta(); /* About 21 bits max */
-+ /* return delta * 1000000 / board_tick_rate; */
-+ return (delta * 1000 + board_tick_per_1000/2) / board_tick_per_1000;
-+}
-
-- return elapsed / CLOCK_TICKS_PER_USEC;
-+/* This is the correct adjustment to the counter to compensate for an
-+ * error iff timer_count-1 <= exact_count <= timer_count+1
-+ */
-+static inline int adjustment(int error) {
-+ if (error >= HZ)
-+ return 1;
-+ else if (error <= -HZ)
-+ return -1;
-+ return 0;
- }
-
- static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
- {
-+ u32 rate;
-+ u32 count;
-+ int error;
-+
- write_seqlock(&xtime_lock);
-
- /* Clear Pending Interrupt by writing '1' to it */
- *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
-+ /* If the board tick rate has been changed update the cached
-+ * value.
-+ */
-+ if (ixp4xx_board_tick_rate != board_tick_rate) {
-+ set_board_tick_rate(ixp4xx_board_tick_rate);
-+ accumulated_error = 0;
-+ }
-+
- /*
- * Catch up with the real idea of time
-+ *
-+ * board_tick_rate: actual ixp4xx ticks/second, read-only
-+ * accumulated_error: aggregate error/tick * HZ, read/write
-+ * timer_count: best ixp4xx ticks per timer_tick, read-only
- */
-- while ((*IXP4XX_OSTS - last_jiffy_time) > LATCH) {
-+ rate = board_tick_rate;
-+ error = accumulated_error;
-+ count = timer_count;
-+ do {
-+ u32 adjusted_count = count + adjustment(error);
-+ if (ixp4xx_timer_delta() < adjusted_count)
-+ break;
- timer_tick(regs);
-- last_jiffy_time += LATCH;
-- }
-+ last_timer_time += adjusted_count;
-+ error += rate - adjusted_count*HZ;
-+ } while (1);
-+ accumulated_error = error;
-
- write_sequnlock(&xtime_lock);
-
-@@ -281,17 +410,30 @@ static struct irqaction ixp4xx_timer_irq
- .handler = ixp4xx_timer_interrupt,
- };
-
-+u32 ixp4xx_get_board_tick_rate(void) {
-+ return board_tick_rate;
-+}
-+
-+EXPORT_SYMBOL(ixp4xx_get_board_tick_rate);
-+
-+void ixp4xx_set_board_tick_rate(u32 rate) {
-+ ixp4xx_board_tick_rate = rate;
-+}
-+
-+EXPORT_SYMBOL(ixp4xx_set_board_tick_rate);
-+
- static void __init ixp4xx_timer_init(void)
- {
- /* Clear Pending Interrupt by writing '1' to it */
- *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
- /* Setup the Timer counter value */
-- *IXP4XX_OSRT1 = (LATCH & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-+ set_board_tick_rate(ixp4xx_board_tick_rate);
-
- /* Reset time-stamp counter */
- *IXP4XX_OSTS = 0;
-- last_jiffy_time = 0;
-+ last_timer_time = 0;
-+ accumulated_error = 0;
-
- /* Connect the interrupt handler and enable the interrupt */
- setup_irq(IRQ_IXP4XX_TIMER1, &ixp4xx_timer_irq);
-@@ -337,4 +479,3 @@ void __init ixp4xx_sys_init(void)
- ARRAY_SIZE(ixp46x_devices));
- }
- }
--
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-23 01:09:04.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-23 01:09:25.000000000 +0100
-@@ -120,6 +120,11 @@ static void nslu2_power_off(void)
-
- static void __init nslu2_init(void)
- {
-+ /* The NSLU2 has a 33MHz crystal on board - 1.01% different
-+ * from the typical value.
-+ */
-+ ixp4xx_set_board_tick_rate(66000000);
-+
- ixp4xx_sys_init();
-
- pm_power_off = nslu2_power_off;
---- linux-nslu2.orig/include/asm-arm/arch-ixp4xx/nslu2.h 2006-01-20 20:23:46.000000000 +0100
-+++ linux-nslu2/include/asm-arm/arch-ixp4xx/nslu2.h 2006-01-23 01:09:25.000000000 +0100
-@@ -38,11 +38,6 @@
- #define NSLU2_PCI_INTD_PIN 8
-
-
--/* NSLU2 Timer */
--#define NSLU2_FREQ 66000000
--#define NSLU2_CLOCK_TICK_RATE (((NSLU2_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
--#define NSLU2_CLOCK_TICKS_PER_USEC ((NSLU2_CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC)
--
- /* GPIO */
-
- #define NSLU2_GPIO0 0
---- linux-nslu2.orig/include/asm-arm/arch-ixp4xx/timex.h 2006-01-20 20:23:46.000000000 +0100
-+++ linux-nslu2/include/asm-arm/arch-ixp4xx/timex.h 2006-01-23 01:09:25.000000000 +0100
-@@ -6,10 +6,23 @@
- #include <asm/hardware.h>
-
- /*
-- * We use IXP425 General purpose timer for our timer needs, it runs at
-- * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the
-- * timer register ignores the bottom 2 bits of the LATCH value.
-+ * In linux/timex.h 'LATCH' is defined as CLOCK_TICK_RATE/HZ and
-+ * is the number of internal counts per timer interrupt. Thus
-+ * CLOCK_TICK_RATE is LATCH*HZ.
-+ *
-+ * The actual values of these numbers do not matter, because they
-+ * are only used to calculate ACTHZ (rate/latch as a 24.8 fixed
-+ * point number), so the value here gives a LATCH of 1 and pretty
-+ * much guarantees to flush out any off-by-one errors.
-+ *
-+ * ACTHZ is equal to HZ, because CLOCK_TICK_RATE is a multiple of
-+ * HZ, this is checked in the ixp4xx/common.c code.
- */
--#define FREQ 66666666
--#define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
-+#define CLOCK_TICK_RATE HZ
-
-+/* The following allow the exact board tick rate to be set and
-+ * discovered. The value should be exactly twice the frequency
-+ * (in Hz) of the onboard crystal.
-+ */
-+extern u32 ixp4xx_get_board_tick_rate(void);
-+extern void ixp4xx_set_board_tick_rate(u32 new_rate);
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/91-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.15/91-maclist.patch
deleted file mode 100644
index 72b9fa9a7d..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/91-maclist.patch
+++ /dev/null
@@ -1,570 +0,0 @@
-Ethernet MAC repository.
-
-Some ethernet controllers have no built-in way of obtaining an
-appropriate Ethernet MAC address. Such controllers have to be
-initialised in a board-specific way, depending on how the allocated
-MAC is stored. The MAC repository provides a set of APIs and a
-proc entry (/proc/net/maclist) to store MAC values from the board
-so that such drivers can obtain a MAC address without board-specific
-code.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
-diff -rup linux-2.6.15.1/.pc/91-maclist.patch/drivers/net/Kconfig linux-2.6.15.1/drivers/net/Kconfig
---- linux-2.6.15/drivers/net/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/net/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -166,6 +166,21 @@ config NET_ETHERNET
- kernel: saying N will just cause the configurator to skip all
- the questions about Ethernet network cards. If unsure, say N.
-
-+config MACLIST
-+ tristate "Ethernet MAC repository"
-+ depends on NET_ETHERNET
-+ help
-+ Some ethernet controllers have no built-in way of obtaining an
-+ appropriate Ethernet MAC address. Such controllers have to be
-+ initialised in a board-specific way, depending on how the allocated
-+ MAC is stored. The MAC repository provides a set of APIs and a
-+ proc entry (/proc/net/maclist) to store MAC values from the board
-+ so that such drivers can obtain a MAC address without board-specific
-+ code. You do not need to enable this device - it will be selected
-+ automatically by any device which requires it. It is only useful
-+ to enable it manually when building a device driver independently
-+ of the kernel build.
-+
- config MII
- tristate "Generic Media Independent Interface device support"
- depends on NET_ETHERNET
-diff -rup linux-2.6.15.1/.pc/91-maclist.patch/drivers/net/Makefile linux-2.6.15.1/drivers/net/Makefile
---- linux-2.6.15/drivers/net/Makefile 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/net/Makefile 1970-01-01 00:00:00.000000000 +0000
-@@ -70,6 +70,7 @@ obj-$(CONFIG_RIONET) += rionet.o
- # end link order section
- #
-
-+obj-$(CONFIG_MACLIST) += maclist.o
- obj-$(CONFIG_MII) += mii.o
- obj-$(CONFIG_PHYLIB) += phy/
-
-diff -rup linux-2.6.15.1/.pc/91-maclist.patch/drivers/net/maclist.c linux-2.6.15.1/drivers/net/maclist.c
---- linux-2.6.15/drivers/net/maclist.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/net/maclist.c 1970-01-01 00:00:00.000000000 +0000
-@@ -0,0 +1,465 @@
-+/*
-+ * drivers/net/maclist.c
-+ *
-+ * a simple driver to remember ethernet MAC values
-+ *
-+ * Some Ethernet hardware implementations have no built-in
-+ * storage for allocated MAC values - an example is the Intel
-+ * IXP420 chip which has support for Ethernet but no defined
-+ * way of storing allocated MAC values. With such hardware
-+ * different board level implementations store the allocated
-+ * MAC (or MACs) in different ways. Rather than put board
-+ * level code into a specific Ethernet driver this driver
-+ * provides a generally accessible repository for the MACs
-+ * which can be written by board level code and read by the
-+ * driver.
-+ *
-+ * The implementation also allows user level programs to
-+ * access the MAC information in /proc/net/maclist. This is
-+ * useful as it allows user space code to use the MAC if it
-+ * is not used by a built-in driver.
-+ *
-+ * Copyright (C) 2005 John Bowler
-+ * Author: John Bowler <jbowler@acm.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * version 2 as published by the Free Software Foundation.
-+ */
-+
-+/*
-+ * External interfaces:
-+ * Interfaces to linux kernel (and modules)
-+ * maclist_add: add a single MAC, sequenced with a single
-+ * writer lock (reads may happen simultaneously
-+ * because of the way the list is built)
-+ * maclist_count: total number of MACs stored
-+ * maclist_read: read a MAC 0..(maclist_count-1). Call this
-+ * to get a specific MAC. If the argument is
-+ * a new key and all the allocaed MACs have been
-+ * assigned a random but valid MAC will be return
-+ * (and this will be stored for later retrieval
-+ * under the given key.)
-+ *
-+ * Sequencing:
-+ * The MAC ids must be added before any driver tries to use them
-+ * (this is obvious isn't it?) This can be made to happen by
-+ * sequencing the initcalls correctly. The module or kernel
-+ * parameters have been handled before any init call happens.
-+ * The important trick here is to ensure that the platform
-+ * initialises any devices with MAC ids *before* any devices
-+ * which might use them.
-+ *
-+ * When this code is a module any other module which adds a
-+ * MAC should be modprobed before modules for ethernet
-+ * devices.
-+ *
-+ * The failure case is 'soft' - the device will get a valid, but
-+ * random, MAC and the real allocated MACs will never get used.
-+ * This can be seen by looking at the list of ids in sysfs (there
-+ * will be extra, random, ones after the allocated ones).
-+ *
-+ * Recommendations:
-+ * For ethernet drivers which are known to be the sole driver on
-+ * the board (without a built in MAC) and where the number of
-+ * devices driven is known simply use an index 0..(n-1) as a
-+ * key for each of the n devices.
-+ *
-+ * This is the common case, it works where one driver handles
-+ * multiple devices so long as the total number of devices can
-+ * be determined reliably. It is sufficient merely to maintain
-+ * a global count of the number of devices initialised so far,
-+ * just so long as the initialisation order is consistent.
-+ *
-+ * When the driver is generic and the board may be populated with
-+ * other devices which allocate MACs from the maclist pool and
-+ * use different drivers create a random key and compile this into
-+ * the code. Use this as the base for all devices from the driver
-+ * (using a global device count for this driver if necessary).
-+ *
-+ * With the second strategy the assignment of MACs will depend on
-+ * the order of initialisation of the different drivers. To avoid
-+ * this provide a kernel (or module) command line parameter to
-+ * specify a base index and (optional) count for each driver or
-+ * pass in a (struct resource) with the start and end of the keys
-+ * to pass to maclist_read. Either method allows the higher levels
-+ * (boot loader or machine description) to specify which MACs in
-+ * the list to assign to each device.
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/spinlock.h>
-+#include <linux/etherdevice.h>
-+#include <linux/proc_fs.h>
-+#include <linux/errno.h>
-+
-+#include <net/maclist.h>
-+
-+#define MACLIST_NAME "maclist"
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("MAC list repository");
-+MODULE_LICENSE("GPL");
-+
-+typedef struct maclist_entry {
-+ struct maclist_entry *next; /* Linked list, first first */
-+ u32 key; /* count or key for this entry */
-+ u16 flags;
-+ u8 id[6]; /* 6 byte Ethernet MAC */
-+} maclist_entry_t;
-+
-+/*
-+ * flag definitions
-+ */
-+#define MACLIST_ALLOCATED 1
-+#define MACLIST_RANDOM 2
-+
-+/* Access to this list is protected by a standard rwlock_t. */
-+static maclist_entry_t *maclist_list = 0;
-+
-+static DEFINE_RWLOCK(maclist_lock);
-+
-+/*
-+ * External interfaces.
-+ *
-+ * Add a single entry, returns 0 on success else an error
-+ * code. Checks for invalid addresses.
-+ */
-+int maclist_add(const u8 new_id[6]) {
-+ maclist_entry_t *new_entry, **tail;
-+
-+ if (new_id == 0 || !is_valid_ether_addr(new_id)) {
-+ printk(KERN_ERR MACLIST_NAME ": invalid ethernet address\n");
-+ return -EINVAL;
-+ }
-+ new_entry = kmalloc(sizeof *new_entry, GFP_KERNEL);
-+ if (new_entry == 0)
-+ return -ENOMEM;
-+ new_entry->next = 0;
-+ new_entry->key = 0;
-+ new_entry->flags = 0;
-+ memcpy(new_entry->id, new_id, sizeof new_entry->id);
-+
-+ tail = &maclist_list;
-+
-+ write_lock(&maclist_lock);
-+ while (*tail != 0)
-+ tail = &(*tail)->next;
-+ *tail = new_entry;
-+ write_unlock(&maclist_lock);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(maclist_add);
-+
-+/*
-+ * Return the current entry count.
-+ */
-+static int maclist_count_unlocked(void) {
-+ maclist_entry_t *tail = maclist_list;
-+ int count = 0;
-+
-+ while (tail != 0) {
-+ tail = tail->next;
-+ ++count;
-+ }
-+
-+ return count;
-+}
-+
-+int maclist_count(void) {
-+ int count;
-+
-+ read_lock(&maclist_lock);
-+ count = maclist_count_unlocked();
-+ read_unlock(&maclist_lock);
-+
-+ return count;
-+}
-+EXPORT_SYMBOL(maclist_count);
-+
-+/*
-+ * Return the ID with the given key (the key is allocated
-+ * to an entry if not found).
-+ */
-+void maclist_read(u8 (*id)[6], u32 key) {
-+ int count, index;
-+ maclist_entry_t *entry, *entry_to_allocate;
-+
-+ /* Do this under a write lock to avoid the SMP race
-+ * where we find the key isn't assigned, drop the lock,
-+ * have another CPU assign it, then assign it on this
-+ * CPU too - very bad...
-+ */
-+ write_lock(&maclist_lock);
-+ count = maclist_count_unlocked();
-+ index = key % count; /* index of entry to allocate */
-+ entry_to_allocate = 0;
-+
-+ entry = maclist_list;
-+ while (entry != 0) {
-+ if ((entry->flags & MACLIST_ALLOCATED) != 0) {
-+ if (entry->key == key) {
-+ /* Found it, use this entry. */
-+ entry_to_allocate = entry;
-+ break;
-+ }
-+ } else if (entry_to_allocate == 0 || count <= index) {
-+ /* The algorithm is to try for entry
-+ * (key % count), but if this isn't possible
-+ * return the prior unallocated entry.
-+ */
-+ entry_to_allocate = entry;
-+ }
-+
-+ ++count;
-+ entry = entry->next;
-+ }
-+
-+ /* Use entry_to_allocate, allocating it if necessary. */
-+ if (entry_to_allocate != 0) {
-+ if ((entry_to_allocate->flags & MACLIST_ALLOCATED) == 0) {
-+ entry_to_allocate->key = key;
-+ entry_to_allocate->flags |= MACLIST_ALLOCATED;
-+ }
-+ memcpy(id, entry_to_allocate->id, sizeof *id);
-+ }
-+ write_unlock(&maclist_lock);
-+
-+ if (entry_to_allocate == 0) {
-+ /* No unallocated entries. Make a new one and return it. */
-+ printk(KERN_INFO MACLIST_NAME ": adding random MAC for key 0x%x\n", key);
-+ random_ether_addr(*id);
-+ if (maclist_add(*id) == 0)
-+ maclist_read(id, key);
-+ }
-+}
-+EXPORT_SYMBOL(maclist_read);
-+
-+/*
-+ * Parameter parsing. The option string is a list of MAC
-+ * addresses, comma separated. (The parsing really should
-+ * be somewhere central...)
-+ */
-+static int __init maclist_setup(const char *param) {
-+ int bytes = 0, seen_a_digit = 0;
-+ u8 id[6];
-+
-+ memset(id, 0, sizeof id);
-+
-+ if (param) do {
-+ int digit = -1;
-+ switch (*param) {
-+ case '0': digit = 0; break;
-+ case '1': digit = 1; break;
-+ case '2': digit = 2; break;
-+ case '3': digit = 3; break;
-+ case '4': digit = 4; break;
-+ case '5': digit = 5; break;
-+ case '6': digit = 6; break;
-+ case '7': digit = 7; break;
-+ case '8': digit = 8; break;
-+ case '9': digit = 9; break;
-+ case 'a': case 'A': digit = 10; break;
-+ case 'b': case 'B': digit = 11; break;
-+ case 'c': case 'C': digit = 12; break;
-+ case 'd': case 'D': digit = 13; break;
-+ case 'e': case 'E': digit = 14; break;
-+ case 'f': case 'F': digit = 15; break;
-+ case ':':
-+ if (seen_a_digit)
-+ bytes = (bytes+1) & ~1;
-+ else
-+ bytes += 2; /* i.e. ff::ff is ff:00:ff */
-+ seen_a_digit = 0;
-+ break;
-+ case 0:
-+ if (bytes == 0) /* nothing new seen so far */
-+ return 0;
-+ /*fall through*/
-+ case ',': case ';':
-+ if (bytes > 0)
-+ bytes = 12; /* i.e. all trailing bytes 0 */
-+ break;
-+ default:
-+ printk(KERN_ERR MACLIST_NAME ": invalid character <%c[%d]>\n",
-+ *param, *param);
-+ return -EINVAL;
-+ }
-+
-+ if (digit >= 0) {
-+ id[bytes>>1] = (id[bytes>>1] << 4) + digit; break;
-+ ++bytes;
-+ seen_a_digit = 1;
-+ }
-+
-+ if (bytes >= 12) {
-+ int rc = maclist_add(id);
-+ if (unlikely(rc))
-+ return rc;
-+ bytes = 0;
-+ seen_a_digit = 0;
-+ memset(id, 0, sizeof id);
-+ if (*param == 0)
-+ return 0;
-+ }
-+ ++param;
-+ } while (1);
-+
-+ return 0;
-+}
-+
-+#if (defined CONFIG_PROC_FS) || (defined MODULE)
-+/*
-+ * Character device read
-+ */
-+static int maclist_getchar(off_t n) {
-+ static char xdigit[16] = "0123456789abcdef";
-+ maclist_entry_t *head = maclist_list;
-+ int b;
-+
-+ do {
-+ if (head == 0)
-+ return -1;
-+ if (n < 18)
-+ break;
-+ head = head->next;
-+ n -= 18;
-+ } while (1);
-+
-+ if (n == 17)
-+ return '\n';
-+
-+ b = n/3;
-+ switch (n - b*3) {
-+ case 0: return xdigit[head->id[b] >> 4];
-+ case 1: return xdigit[head->id[b] & 0xf];
-+ default: return ':';
-+ }
-+}
-+#endif
-+
-+/*
-+ * procfs support, if compiled in.
-+ */
-+#ifdef CONFIG_PROC_FS
-+/*
-+ * The extensively undocumented proc_read_t callback is implemented here.
-+ * Go look in fs/proc/generic.c:
-+ *
-+ * Prototype:
-+ * int f(char *buffer, char **start, off_t offset,
-+ * int count, int *peof, void *dat)
-+ *
-+ * Assume that the buffer is "count" bytes in size.
-+ *
-+ * 2) Set *start = an address within the buffer.
-+ * Put the data of the requested offset at *start.
-+ * Return the number of bytes of data placed there.
-+ * If this number is greater than zero and you
-+ * didn't signal eof and the reader is prepared to
-+ * take more data you will be called again with the
-+ * requested offset advanced by the number of bytes
-+ * absorbed.
-+ */
-+static int maclist_proc_read(char *buffer, char **start, off_t offset,
-+ int count, int *peof, void *dat) {
-+ int total;
-+
-+ *start = buffer;
-+ total = 0;
-+
-+ while (total < count) {
-+ int ch = maclist_getchar(offset++);
-+ if (ch == -1) {
-+ *peof = 1;
-+ break;
-+ }
-+ *buffer++ = ch;
-+ ++total;
-+ }
-+
-+ return total;
-+}
-+#endif
-+
-+/*
-+ * set works once, at init time (the param is set to 0444 below),
-+ * get works any time.
-+ */
-+static int param_set_maclist(const char *val, struct kernel_param *kp)
-+{
-+ if (maclist_list == 0)
-+ return maclist_setup(val);
-+
-+ printk(KERN_ERR MACLIST_NAME ": call to set parameters too late\n");
-+ return -EINVAL;
-+}
-+
-+static int param_get_maclist(char *buffer, struct kernel_param *kp)
-+{
-+#ifdef MODULE
-+ off_t offset = 0;
-+
-+ /* buffer is only 4k! */
-+ while (offset < 4096) {
-+ int ch = maclist_getchar(offset++);
-+ if (ch < 0) {
-+ *buffer = 0;
-+ return 0;
-+ }
-+ *buffer++ = ch;
-+ }
-+
-+ *--buffer = 0;
-+ return -ENOMEM;
-+#else
-+ return -EINVAL;
-+#endif
-+}
-+
-+/*
-+ * module: the argument is ids=mac,mac,mac
-+ * kernel command line: maclist.ids=mac,mac,mac
-+ */
-+#define param_check_maclist(name, p) __param_check(name, p, maclist_entry_t*)
-+module_param_named(ids, maclist_list, maclist, 0444);
-+MODULE_PARM_DESC(ids, "comma separated list of MAC ids\n");
-+
-+/*
-+ * Finally, the init/exit functions.
-+ */
-+static void __exit maclist_exit(void)
-+{
-+ maclist_entry_t *list;
-+
-+ remove_proc_entry(MACLIST_NAME, proc_net);
-+
-+ write_lock(&maclist_lock);
-+ list = maclist_list;
-+ maclist_list = 0;
-+ write_unlock(&maclist_lock);
-+
-+ while (list != 0) {
-+ maclist_entry_t *head = list;
-+ list = head->next;
-+ kfree(head);
-+ }
-+}
-+
-+static int __init maclist_init(void)
-+{
-+# ifdef MODULE
-+ if (ids[0])
-+ maclist_setup(ids);
-+# endif
-+
-+ /* Ignore failure, the module will still work. */
-+ (void)create_proc_read_entry(MACLIST_NAME, S_IRUGO, proc_net, maclist_proc_read, NULL);
-+
-+ return 0;
-+}
-+
-+module_init(maclist_init);
-+module_exit(maclist_exit);
-diff -rup linux-2.6.15.1/.pc/91-maclist.patch/include/net/maclist.h linux-2.6.15.1/include/net/maclist.h
---- linux-2.6.15/include/net/maclist.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/include/net/maclist.h 1970-01-01 00:00:00.000000000 +0000
-@@ -0,0 +1,49 @@
-+#ifndef _MACLIST_H
-+#define _MACLIST_H 1
-+/*
-+ * Interfaces to the MAC repository
-+ *
-+ * Copyright (C) 2005 John Bowler
-+ * Author: John Bowler <jbowler@acm.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * version 2 as published by the Free Software Foundation.
-+ */
-+
-+/*
-+ * Add a single entry, returns 0 on success else an error
-+ * code. Allocates memory, claims and releases a write
-+ * lock.
-+ */
-+extern int maclist_add(const u8 id_to_add[6]);
-+
-+/*
-+ * Return the current entry count, claims and releases a
-+ * read lock.
-+ */
-+extern int maclist_count(void);
-+
-+/*
-+ * Return the ID from the given entry. Always succeeds.
-+ * Claims and releases a write lock.
-+ *
-+ * If any entry has not been allocated for this key one
-+ * is allocated. If there are no remaining unallocated
-+ * entries a new one is created.
-+ *
-+ * If the value of the key is less than maclist_count()
-+ * the entry indexed by the key (i.e. for key 'n' the
-+ * n'th entry starting at 0) will be returned if available.
-+ * Otherwise the entry to be returned will be unpredictable
-+ * but consistent for a given value of maclist_count().
-+ */
-+extern void maclist_read(u8 (*buffer_for_id)[6],
-+ u32 key_of_entry_to_return);
-+
-+/*
-+ * See the implementation in drivers/net/maclist.c for
-+ * more information.
-+ */
-+#endif /*_MACLIST_H*/
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/92-nas100d-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.15/92-nas100d-maclist.patch
deleted file mode 100644
index 20ccbd56a6..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/92-nas100d-maclist.patch
+++ /dev/null
@@ -1,72 +0,0 @@
---- linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -74,6 +74,7 @@ comment "IXP4xx Platforms"
- config MACH_NAS100D
- bool
- prompt "NAS100D"
-+ select MACLIST
- help
- Say 'Y' here if you want your kernel to support Iomega's
- NAS 100d device. For more information on this platform,
---- linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -14,11 +14,14 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-
-+#include <net/maclist.h>
-+
- static struct flash_platform_data nas100d_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -110,8 +113,44 @@
- gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot config partition is added the MAC address is read from
-+ * it.
-+ */
-+static void nas100d_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot config") == 0) {
-+ size_t retlen;
-+ u_char mac[6];
-+
-+ /* The MAC is at a known offset... */
-+ if (mtd->read(mtd, 0x0FD8, 6, &retlen, mac) == 0 && retlen == 6) {
-+ printk(KERN_INFO "NAS100D MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ } else {
-+ printk(KERN_ERR "NAS100D MAC: read failed\n");
-+ }
-+ }
-+}
-+
-+/*
-+ * Nothing to do on remove at present.
-+ */
-+static void nas100d_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nas100d_flash_notifier = {
-+ .add = nas100d_flash_add,
-+ .remove = nas100d_flash_remove,
-+};
-+
- static void __init nas100d_init(void)
- {
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nas100d_flash_notifier);
-+
- ixp4xx_sys_init();
-
- pm_power_off = nas100d_power_off;
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/92-nslu2-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.15/92-nslu2-maclist.patch
deleted file mode 100644
index 1b7e611690..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/92-nslu2-maclist.patch
+++ /dev/null
@@ -1,80 +0,0 @@
---- linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -11,8 +11,8 @@ comment "IXP4xx Platforms"
- # This entry is placed on top because otherwise it would have
- # been shown as a submenu.
- config MACH_NSLU2
-- bool
-- prompt "NSLU2" if !(MACH_IXDP465 || MACH_IXDPG425 || ARCH_IXDP425 || ARCH_ADI_COYOTE || ARCH_AVILA || ARCH_IXCDP1100 || ARCH_PRPMC1100 || MACH_GTWX5715)
-+ bool "NSLU2"
-+ select MACLIST
- help
- Say 'Y' here if you want your kernel to support Linksys's
- NSLU2 NAS device. For more information on this platform,
---- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -16,11 +16,14 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-
-+#include <net/maclist.h>
-+
- static struct flash_platform_data nslu2_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -112,6 +115,37 @@ static void nslu2_power_off(void)
- gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot partition is added the MAC address is read from
-+ * it.
-+ */
-+static void nslu2_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot") == 0) {
-+ size_t retlen;
-+ u_char mac[6];
-+
-+ /* The MAC is at a known offset... */
-+ if (mtd->read(mtd, 0x3FFB0, 6, &retlen, mac) == 0 && retlen == 6) {
-+ printk(KERN_INFO "NSLU2 MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ } else {
-+ printk(KERN_ERR "NSLU2 MAC: read failed\n");
-+ }
-+ }
-+}
-+
-+/*
-+ * Nothing to do on remove at present.
-+ */
-+static void nslu2_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nslu2_flash_notifier = {
-+ .add = nslu2_flash_add,
-+ .remove = nslu2_flash_remove,
-+};
-+
- static void __init nslu2_init(void)
- {
- /* The NSLU2 has a 33MHz crystal on board - 1.01% different
-@@ -119,6 +153,11 @@ static void __init nslu2_init(void)
- */
- ixp4xx_set_board_tick_rate(66000000);
-
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nslu2_flash_notifier);
-+
- ixp4xx_sys_init();
-
- pm_power_off = nslu2_power_off;
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/93-loft-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.15/93-loft-maclist.patch
deleted file mode 100644
index ffda1136ef..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/93-loft-maclist.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-add loft support for setting the maclist from EEPROM
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -14,6 +14,7 @@
- #include <linux/serial.h>
- #include <linux/tty.h>
- #include <linux/serial_8250.h>
-+#include <linux/eeprom.h>
-
- #include <asm/types.h>
- #include <asm/setup.h>
-@@ -24,6 +25,8 @@
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-
-+#include <net/maclist.h>
-+
- static struct flash_platform_data ixdp425_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -188,9 +191,62 @@ MACHINE_END
- /*
- * Loft is functionally equivalent to Avila except that it has a
- * different number for the maximum PCI devices. The MACHINE
-- * structure below is identical to Avila except for the comment.
-+ * structure below is identical to Avila except for the and
-+ * the use of a loft specific init.
-+ *
-+ * The loft init registers a notifier on the on-board EEPROM to
-+ * detect the MAC addresses.
-+ * NOTE: this probably works for all Gateworks Avila boards and
-+ * maybe the ixdp425 too.
- */
- #ifdef CONFIG_MACH_LOFT
-+/*
-+ * When the EEPROM is added the MAC address are read from it.
-+ */
-+static void loft_eeprom_add(int address, int kind, struct kobject *kobj,
-+ struct bin_attribute *eeprom_attr) {
-+ /* The MACs are the first 12 bytes in the eeprom at address 0x51 */
-+ if (address == 0x51) {
-+ ssize_t retlen;
-+ char data[12];
-+
-+ /* Two Macs, one at 0, the other at 6, maclist_add will
-+ * complain if the ID is not a valid MAC.
-+ */
-+ retlen = eeprom_attr->read(kobj, data, 0, sizeof data);
-+ if (retlen >= 6) {
-+ u8 mac[6];
-+ memcpy(mac, data+0, sizeof mac);
-+ printk(KERN_INFO "LOFT MAC[0]: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ }
-+ if (retlen >= 12) {
-+ u8 mac[6];
-+ memcpy(mac, data+6, sizeof mac);
-+ printk(KERN_INFO "LOFT MAC[1]: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ }
-+ }
-+}
-+
-+static struct eeprom_notifier loft_eeprom_notifier = {
-+ .add = loft_eeprom_add
-+};
-+
-+static void __init loft_init(void)
-+{
-+ /* The EEPROM has two ethernet MACs embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_eeprom_user(&loft_eeprom_notifier);
-+
-+ ixp4xx_sys_init();
-+
-+ platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
-+}
-+
- MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
- /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
- .phys_ram = PHYS_OFFSET,
-@@ -200,7 +256,7 @@ MACHINE_START(LOFT, "Giant Shoulder Inc
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
- .boot_params = 0x0100,
-- .init_machine = ixdp425_init,
-+ .init_machine = loft_init,
- MACHINE_END
- #endif
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/94-nas100d-setup.patch b/packages/linux/ixp4xx-kernel/2.6.15/94-nas100d-setup.patch
deleted file mode 100644
index adf20823f8..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/94-nas100d-setup.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Include a fixup machine start function in nas100d-setup.c to handle
-the command line and memory setup parameters which are not specifiable
-in the boot loader.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -17,6 +17,8 @@
- #include <linux/serial_8250.h>
- #include <linux/mtd/mtd.h>
-
-+#include <asm/setup.h>
-+#include <asm/memory.h>
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-@@ -164,12 +166,53 @@ static void __init nas100d_init(void)
- platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
- }
-
-+/*
-+ * NAS100D bootstrap may pass in parameters, but we zap the mem
-+ * settings to be safe (the box always has 64MByte at 0). The
-+ * passed in command line can override this default, we prepend
-+ * to the config'ed default.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+static char nas100d_command_line[] __initdata =
-+ "root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc "
-+ "pcf8563.hctosys=1 "
-+ CONFIG_CMDLINE;
-+
-+static void __init nas100d_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The NAS100D has one bank of 64MByte memory.
-+ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
-+ * the mem tags from the tag list. We need do nothing here!
-+ */
-+ mi->nr_banks=1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (64*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+
-+ /* A command line in the ATAG list will override this one,
-+ * as is intended.
-+ */
-+ strlcpy(*cmdline, nas100d_command_line, COMMAND_LINE_SIZE);
-+}
-+
- MACHINE_START(NAS100D, "Iomega NAS 100d")
- /* Maintainer: www.nslu2-linux.org */
- .phys_ram = PHYS_OFFSET,
- .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
- .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
- .boot_params = 0x00000100,
-+ .fixup = nas100d_fixup,
- .map_io = ixp4xx_map_io,
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/94-nslu2-setup.patch b/packages/linux/ixp4xx-kernel/2.6.15/94-nslu2-setup.patch
deleted file mode 100644
index 3443e76ebd..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/94-nslu2-setup.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-Include a fixup machine start function in nslu2-setup.c to handle
-the command line and memory setup parameters which are not specifiable
-in the boot loader.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nslu2-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -18,6 +18,8 @@
- #include <linux/serial_8250.h>
- #include <linux/mtd/mtd.h>
-
-+#include <asm/setup.h>
-+#include <asm/memory.h>
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-@@ -165,12 +167,53 @@ static void __init nslu2_init(void)
- platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
- }
-
-+/*
-+ * NSLU2 RedBoot passes garbage atag/parameter values because it copies
-+ * the kernel zImage on top of the parameter list before branching into
-+ * the zImage. The machine description causes the ATAG list to be
-+ * skipped (by setting boot_params to 0) and this code fixes up the
-+ * memory info and command line by supplying a command line with the
-+ * NSLU2 specific config prepended.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+static char nslu2_command_line[] __initdata =
-+ "root=/dev/mtdblock4 rw rootfstype=jffs2 init=/linuxrc "
-+ "rtc-x1205.probe=0,0x6f "
-+ CONFIG_CMDLINE;
-+
-+static void __init nslu2_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The NSLU2 has one bank of 32MByte memory.
-+ * NOTE: to make a 'fatslug' work append the appropriate
-+ * mem= to the CONFIG_CMDLINE - this will override the
-+ * setting below.
-+ */
-+ mi->nr_banks=1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (32*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+
-+ strlcpy(*cmdline, nslu2_command_line, COMMAND_LINE_SIZE);
-+}
-+
- MACHINE_START(NSLU2, "Linksys NSLU2")
- /* Maintainer: www.nslu2-linux.org */
- .phys_ram = PHYS_OFFSET,
- .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
- .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-- .boot_params = 0x00000100,
-+ .boot_params = 0, /* because they are garbage - see above */
-+ .fixup = nslu2_fixup,
- .map_io = ixp4xx_map_io,
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/95-ixp4xx-leds.patch b/packages/linux/ixp4xx-kernel/2.6.15/95-ixp4xx-leds.patch
deleted file mode 100644
index b081519893..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/95-ixp4xx-leds.patch
+++ /dev/null
@@ -1,260 +0,0 @@
-NEW_LEDS support for ixp4xx boards where LEDs are connected
-to the GPIO lines.
-
-This includes a new generic ixp4xx driver (leds-ixp4xx-gpio.c
-name "IXP4XX-GPIO-LED") and a patch to the original leds.h to
-make the 'name' field of led_device (const char)
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/drivers/leds/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -43,6 +43,15 @@ config LEDS_SPITZ
- This option enables support for the LEDs on Sharp Zaurus
- SL-Cxx00 series (C1000, C3000, C3100).
-
-+config LEDS_IXP4XX
-+ tristate "LED Support for GPIO connected LEDs on IXP4XX processors"
-+ depends LEDS_CLASS && ARCH_IXP4XX
-+ help
-+ This option enables support for the LEDs connected to GPIO
-+ outputs of the Intel IXP4XX processors. To be useful the
-+ particular board must have LEDs and they must be connected
-+ to the GPIO lines. If unsure, say Y.
-+
- config LEDS_TRIGGER_TIMER
- tristate "LED Timer Trigger"
- depends LEDS_TRIGGERS
---- linux-2.6.15/drivers/leds/Makefile 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/Makefile 1970-01-01 00:00:00.000000000 +0000
-@@ -8,6 +8,7 @@ obj-$(CONFIG_LEDS_TRIGGERS) += led-trig
- obj-$(CONFIG_LEDS_CORGI) += leds-corgi.o
- obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o
- obj-$(CONFIG_LEDS_SPITZ) += leds-spitz.o
-+obj-$(CONFIG_LEDS_IXP4XX) += leds-ixp4xx-gpio.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
---- linux-2.6.15/drivers/leds/leds-ixp4xx-gpio.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/leds-ixp4xx-gpio.c 1970-01-01 00:00:00.000000000 +0000
-@@ -0,0 +1,209 @@
-+/*
-+ * IXP4XX GPIO driver LED driver
-+ *
-+ * Author: John Bowler <jbowler@acm.org>
-+ *
-+ * Copyright (c) 2006 John Bowler
-+ *
-+ * Permission is hereby granted, free of charge, to any
-+ * person obtaining a copy of this software and associated
-+ * documentation files (the "Software"), to deal in the
-+ * Software without restriction, including without
-+ * limitation the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of
-+ * the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the
-+ * following conditions:
-+ *
-+ * The above copyright notice and this permission notice
-+ * shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-+ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/spinlock.h>
-+#include <linux/leds.h>
-+#include <asm/arch/hardware.h>
-+
-+extern spinlock_t gpio_lock;
-+
-+/* Up to 16 gpio lines are possible. */
-+#define GPIO_MAX 16
-+static struct ixp4xxgpioled_device {
-+ struct led_device ancestor;
-+ int flags;
-+} ixp4xxgpioled_devices[GPIO_MAX];
-+
-+void ixp4xxgpioled_brightness_set(struct led_device *pled, int value)
-+{
-+ const struct ixp4xxgpioled_device *const ixp4xx_dev =
-+ container_of(pled, struct ixp4xxgpioled_device, ancestor);
-+ const u32 gpio_pin = ixp4xx_dev - ixp4xxgpioled_devices;
-+
-+ if (gpio_pin < GPIO_MAX && ixp4xx_dev->ancestor.name != 0) {
-+ /* Set or clear the 'gpio_pin' bit according to the style
-+ * and the required setting (value > 0 == on)
-+ */
-+ const int gpio_value =
-+ (value > 0) == (ixp4xx_dev->flags != IXP4XX_GPIO_LOW) ?
-+ IXP4XX_GPIO_HIGH : IXP4XX_GPIO_LOW;
-+
-+ {
-+ unsigned long flags;
-+ spin_lock_irqsave(&gpio_lock, flags);
-+ gpio_line_set(gpio_pin, gpio_value);
-+ spin_unlock_irqrestore(&gpio_lock, flags);
-+ }
-+ }
-+}
-+
-+/* LEDs are described in resources, the following iterates over the valid
-+ * LED resources.
-+ */
-+#define for_all_leds(i, pdev) \
-+ for (i=0; i<pdev->num_resources; ++i) \
-+ if (pdev->resource[i].start < GPIO_MAX && \
-+ pdev->resource[i].name != 0)
-+
-+/* The following applies 'operation' to each LED from the given platform,
-+ * the function always returns 0 to allow tail call elimination.
-+ */
-+static int apply_to_all_leds(struct platform_device *pdev,
-+ void (*operation)(struct led_device *pled)) {
-+ int i;
-+ for_all_leds(i, pdev)
-+ operation(&ixp4xxgpioled_devices[pdev->resource[i].start].ancestor);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int ixp4xxgpioled_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ return apply_to_all_leds(pdev, leds_device_suspend);
-+}
-+
-+static int ixp4xxgpioled_resume(struct platform_device *pdev)
-+{
-+ return apply_to_all_leds(pdev, leds_device_resume);
-+}
-+#endif
-+
-+static void ixp4xxgpioled_remove_one_led(struct led_device *pled) {
-+ leds_device_unregister(pled);
-+ pled->name = 0;
-+}
-+
-+static int ixp4xxgpioled_remove(struct platform_device *pdev)
-+{
-+ return apply_to_all_leds(pdev, ixp4xxgpioled_remove_one_led);
-+}
-+
-+static int ixp4xxgpioled_probe(struct platform_device *pdev)
-+{
-+ /* The board level has to tell the driver where the
-+ * LEDs are connected - there is no way to find out
-+ * electrically. It must also say whether the GPIO
-+ * lines are active high or active low.
-+ *
-+ * To do this read the num_resources (the number of
-+ * LEDs) and the struct resource (the data for each
-+ * LED). The name comes from the resource, and it
-+ * isn't copied.
-+ */
-+ int i;
-+ for_all_leds(i, pdev) {
-+ const u8 gpio_pin = pdev->resource[i].start;
-+ int rc;
-+
-+ if (ixp4xxgpioled_devices[gpio_pin].ancestor.name == 0) {
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&gpio_lock, flags);
-+ gpio_line_config(gpio_pin, IXP4XX_GPIO_OUT);
-+ /* The config can, apparently, reset the state,
-+ * I suspect the gpio line may be an input and
-+ * the config may cause the line to be latched,
-+ * so the setting depends on how the LED is
-+ * connected to the line (which affects how it
-+ * floats if not driven).
-+ */
-+ gpio_line_set(gpio_pin, IXP4XX_GPIO_HIGH);
-+ spin_unlock_irqrestore(&gpio_lock, flags);
-+
-+ ixp4xxgpioled_devices[gpio_pin].flags =
-+ pdev->resource[i].flags & IORESOURCE_BITS;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.name =
-+ pdev->resource[i].name;
-+
-+ /* This is how a board manufacturer makes the LED
-+ * come on on reset - the GPIO line will be high, so
-+ * make the LED light when the line is low...
-+ */
-+ if (ixp4xxgpioled_devices[gpio_pin].flags != IXP4XX_GPIO_LOW)
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness = 100;
-+ else
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness = 0;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.flags = 0;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness_set =
-+ ixp4xxgpioled_brightness_set;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.default_trigger = 0;
-+ }
-+
-+ rc = leds_device_register(&pdev->dev,
-+ &ixp4xxgpioled_devices[gpio_pin].ancestor);
-+ if (rc < 0) {
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.name = 0;
-+ ixp4xxgpioled_remove(pdev);
-+ return rc;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static struct platform_driver ixp4xxgpioled_driver = {
-+ .probe = ixp4xxgpioled_probe,
-+ .remove = ixp4xxgpioled_remove,
-+#ifdef CONFIG_PM
-+ .suspend = ixp4xxgpioled_suspend,
-+ .resume = ixp4xxgpioled_resume,
-+#endif
-+ .driver = {
-+ .name = "IXP4XX-GPIO-LED",
-+ },
-+};
-+
-+static int __devinit ixp4xxgpioled_init(void)
-+{
-+ return platform_driver_register(&ixp4xxgpioled_driver);
-+}
-+
-+static void ixp4xxgpioled_exit(void)
-+{
-+ platform_driver_unregister(&ixp4xxgpioled_driver);
-+}
-+
-+module_init(ixp4xxgpioled_init);
-+module_exit(ixp4xxgpioled_exit);
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("IXP4XX GPIO LED driver");
-+MODULE_LICENSE("MIT");
---- linux-2.6.15/include/linux/leds.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/include/linux/leds.h 1970-01-01 00:00:00.000000000 +0000
-@@ -16,7 +16,7 @@ struct class_device;
- * LED Core
- */
- struct led_device {
-- char *name;
-+ const char *name;
- int brightness;
- int flags;
- #define LED_SUSPENDED (1 << 0)
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/950-leds-timer.patch b/packages/linux/ixp4xx-kernel/2.6.15/950-leds-timer.patch
deleted file mode 100644
index c44ef62ee7..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/950-leds-timer.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-Fix for a bug in led-triggers.c plus an update to the
-timer trigger code to allow for fractional frequency
-values and to correct the evaluation of frequency so
-that it is the actual frequency.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/drivers/leds/led-triggers.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/led-triggers.c 1970-01-01 00:00:00.000000000 +0000
-@@ -98,7 +98,7 @@ void led_trigger_event(struct led_trigge
- if (!trigger)
- return;
-
-- read_lock(&trigger->led_devs);
-+ read_lock(&trigger->leddev_list_lock);
- list_for_each(entry, &trigger->led_devs) {
- struct led_device *led_dev;
-
-@@ -107,7 +107,7 @@ void led_trigger_event(struct led_trigge
- led_set_brightness(led_dev, brightness);
- write_unlock(&led_dev->lock);
- }
-- read_unlock(&trigger->led_devs);
-+ read_unlock(&trigger->leddev_list_lock);
- }
-
- /* Caller must ensure led_dev->lock held for write */
---- linux-2.6.15/drivers/leds/ledtrig-timer.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/ledtrig-timer.c 1970-01-01 00:00:00.000000000 +0000
-@@ -12,6 +12,7 @@
- */
-
- #include <linux/config.h>
-+#include <linux/ctype.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
- #include <linux/init.h>
-@@ -61,21 +62,19 @@ static void led_timer_function(unsigned
- static void led_timer_setdata(struct led_device *led_dev, unsigned long duty, unsigned long frequency)
- {
- struct timer_trig_data *timer_data = led_dev->trigger_data;
-- signed long duty1;
--
-- if (frequency > 500)
-- frequency = 500;
-
- if (duty > 100)
- duty = 100;
-
-- duty1 = duty - 50;
--
- timer_data->duty = duty;
- timer_data->frequency = frequency;
- if (frequency != 0) {
-- timer_data->delay_on = (50 - duty1) * 1000 / 50 / frequency;
-- timer_data->delay_off = (50 + duty1) * 1000 / 50 / frequency;
-+ timer_data->delay_on = duty * 10000U / frequency;
-+ if (timer_data->delay_on == 0)
-+ timer_data->delay_on = 1;
-+ timer_data->delay_off = (100U-duty) * 10000U / frequency;
-+ if (timer_data->delay_off == 0)
-+ timer_data->delay_off = 1;
- }
-
- mod_timer(&timer_data->timer, jiffies);
-@@ -100,8 +99,8 @@ static ssize_t led_duty_store(struct cla
- struct timer_trig_data *timer_data;
- int ret = -EINVAL;
- char *after;
--
- unsigned long state = simple_strtoul(buf, &after, 10);
-+
- if (after - buf > 0) {
- ret = after - buf;
- write_lock(&led_dev->lock);
-@@ -118,32 +117,63 @@ static ssize_t led_frequency_show(struct
- {
- struct led_device *led_dev = dev->class_data;
- struct timer_trig_data *timer_data;
-+ unsigned long freq000;
-
- read_lock(&led_dev->lock);
- timer_data = led_dev->trigger_data;
-- sprintf(buf, "%lu\n", timer_data->frequency);
-+ freq000 = timer_data->frequency;
- read_unlock(&led_dev->lock);
-
-+ if (freq000 % 1000)
-+ sprintf(buf, "%lu.%.3lu\n", freq000 / 1000, freq000 % 1000);
-+ else
-+ sprintf(buf, "%lu\n", freq000 / 1000);
-+
- return strlen(buf) + 1;
- }
-
- static ssize_t led_frequency_store(struct class_device *dev, const char *buf, size_t size)
- {
- struct led_device *led_dev = dev->class_data;
-- struct timer_trig_data *timer_data;
-- int ret = -EINVAL;
-- char *after;
-+ size_t rc = 0;
-+ unsigned long freq000 = 0;
-+ int have_digit = 0;
-+
-+ while (rc < size && isspace(buf[rc]))
-+ ++rc;
-+ if (rc >= size)
-+ return rc;
-+
-+ /* number before decimal point */
-+ while (rc < size && isdigit(buf[rc]))
-+ freq000 *= 10, freq000 += buf[rc++] - '0', have_digit = 1;
-+
-+ if (rc < size && (buf[rc] == '.' || buf[rc] == ',')) {
-+ int dp = 0;
-+ ++rc;
-+ while (rc < size && isdigit(buf[rc])) {
-+ if (++dp <= 3)
-+ freq000 *= 10, freq000 += buf[rc] - '0';
-+ ++rc;
-+ have_digit = 1;
-+ }
-+ while (++dp <= 3)
-+ freq000 *= 10;
-+ } else
-+ freq000 *= 1000;
-
-- unsigned long state = simple_strtoul(buf, &after, 10);
-- if (after - buf > 0) {
-- ret = after - buf;
-- write_lock(&led_dev->lock);
-- timer_data = led_dev->trigger_data;
-- led_timer_setdata(led_dev, timer_data->duty, state);
-- write_unlock(&led_dev->lock);
-+ if (!have_digit)
-+ return -EINVAL;
-+
-+ write_lock(&led_dev->lock);
-+ {
-+ struct timer_trig_data *timer_data = led_dev->trigger_data;
-+ led_timer_setdata(led_dev, timer_data->duty, freq000);
- }
-+ write_unlock(&led_dev->lock);
-
-- return ret;
-+
-+ return rc;
- }
-
- static CLASS_DEVICE_ATTR(duty, 0644, led_duty_show, led_duty_store);
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/951-ixp4xx-leds-cpu-activity.patch b/packages/linux/ixp4xx-kernel/2.6.15/951-ixp4xx-leds-cpu-activity.patch
deleted file mode 100644
index b6b3897005..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/951-ixp4xx-leds-cpu-activity.patch
+++ /dev/null
@@ -1,592 +0,0 @@
-This patches the new LEDs code to add cpu activity and
-inactivity triggers to the timer triggers. The new triggers
-set the LED with the trigger to different states (on,
-flashing or off) according to whether or not all CPUs
-are idle.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
-diff -rup linux-2.6.15.2/.pc/951-ixp4xx-leds-cpu-activity.patch/arch/arm/kernel/process.c linux-2.6.15.2/arch/arm/kernel/process.c
---- linux-2.6.15/arch/arm/kernel/process.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/kernel/process.c 1970-01-01 00:00:00.000000000 +0000
-@@ -27,6 +27,7 @@
- #include <linux/kallsyms.h>
- #include <linux/init.h>
- #include <linux/cpu.h>
-+#include <linux/leds.h>
-
- #include <asm/system.h>
- #include <asm/io.h>
-@@ -81,6 +82,12 @@ void (*pm_power_off)(void);
- EXPORT_SYMBOL(pm_power_off);
-
- /*
-+ * CPU activity indicator.
-+ */
-+void (*leds_idle)(int is_idle);
-+EXPORT_SYMBOL(leds_idle);
-+
-+/*
- * This is our default idle handler. We need to disable
- * interrupts here to ensure we don't miss a wakeup call.
- */
-@@ -121,8 +128,12 @@ void cpu_idle(void)
- if (!idle)
- idle = default_idle;
- leds_event(led_idle_start);
-+ if (leds_idle)
-+ leds_idle(1);
- while (!need_resched())
- idle();
-+ if (leds_idle)
-+ leds_idle(0);
- leds_event(led_idle_end);
- preempt_enable_no_resched();
- schedule();
-diff -rup linux-2.6.15.2/.pc/951-ixp4xx-leds-cpu-activity.patch/drivers/leds/Kconfig linux-2.6.15.2/drivers/leds/Kconfig
---- linux-2.6.15/drivers/leds/Kconfig 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/Kconfig 1970-01-01 00:00:00.000000000 +0000
-@@ -66,5 +66,14 @@ config LEDS_TRIGGER_TIMER
- This allows LEDs to be controlled by a programmable timer
- via sysfs. If unsure, say Y.
-
-+config LEDS_TRIGGER_CPU_ACTIVITY
-+ tristate "LED CPU activity trigger"
-+ depends LEDS_TRIGGER_TIMER
-+ help
-+ This allows LEDs to be set to show cpu activity via sysfs.
-+ The LED will blink when the cpu is active and stay steady
-+ (on or off according to the trigger selected) when idle.
-+ If unsure, say Y.
-+
- endmenu
-
-diff -rup linux-2.6.15.2/.pc/951-ixp4xx-leds-cpu-activity.patch/drivers/leds/Makefile linux-2.6.15.2/drivers/leds/Makefile
---- linux-2.6.15/drivers/leds/Makefile 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/Makefile 1970-01-01 00:00:00.000000000 +0000
-@@ -13,3 +13,4 @@ obj-$(CONFIG_LEDS_TOSA) += leds-tosa.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-+obj-$(CONFIG_LEDS_TRIGGER_CPU_ACTIVITY) += ledtrig-cpu.o
-diff -rup linux-2.6.15.2/.pc/951-ixp4xx-leds-cpu-activity.patch/drivers/leds/ledtrig-cpu.c linux-2.6.15.2/drivers/leds/ledtrig-cpu.c
---- linux-2.6.15/drivers/leds/ledtrig-cpu.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/leds/ledtrig-cpu.c 1970-01-01 00:00:00.000000000 +0000
-@@ -0,0 +1,501 @@
-+/*
-+ * LEDs CPU activity trigger
-+ *
-+ * Author: John Bowler <jbowler@acm.org>
-+ *
-+ * Copyright (c) 2006 John Bowler
-+ *
-+ * Permission is hereby granted, free of charge, to any
-+ * person obtaining a copy of this software and associated
-+ * documentation files (the "Software"), to deal in the
-+ * Software without restriction, including without
-+ * limitation the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of
-+ * the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the
-+ * following conditions:
-+ *
-+ * The above copyright notice and this permission notice
-+ * shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-+ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/ctype.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/spinlock.h>
-+#include <linux/timer.h>
-+#include <linux/device.h>
-+
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+//#include <linux/list.h>
-+//#include <linux/sysdev.h>
-+
-+
-+/*
-+ * To simplify this the LED state is given for each case of
-+ * CPU state - idle or active. The LED can be:
-+ *
-+ * off
-+ * flash - slow for idle, fast (flicker) for active
-+ * on
-+ *
-+ * This gives two useless states - off/off and on/on
-+ */
-+typedef enum cpu_trigger_led_state {
-+ cpu_led_off,
-+ cpu_led_flash,
-+ cpu_led_on,
-+ cpu_led_invalid
-+} cpu_trigger_led_state;
-+
-+static const char *const cpu_trigger_names[] = {
-+ "off",
-+ "flash",
-+ "on",
-+ "invalid"
-+};
-+
-+/* Forward declaration - this is called back when an LED property
-+ * is changed.
-+ */
-+static void leds_cpu_trigger_state_change(void);
-+
-+/*
-+ * These constants define the actual mark/space of the flashing
-+ * in jiffies. msecs_to_jiffies rounds up and is compile time
-+ * evaluable for constant arguments. Writing the ?: stuff below
-+ * this way ensures the compiler doesn't think it needs to
-+ * compile in the math of msecs_to_jiffies.
-+ *
-+ * These values have been determined by experiment to work well
-+ * for the ready/status LED on a LinkSys NSLU2 (light piped) and
-+ * for the user LED on a Loft (Gateway Avila variant) board where
-+ * the LED was directly visible. Light Output Varies Everywhere.
-+ */
-+#define LEDS_CPU_ACTIVE_MARK msecs_to_jiffies(40)
-+#define LEDS_CPU_IDLE_MARK msecs_to_jiffies(800)
-+#define LEDS_CPU_ACTIVE_SPACE msecs_to_jiffies(60)
-+#define LEDS_CPU_IDLE_SPACE msecs_to_jiffies(800)
-+
-+
-+/*
-+ * Individual LEDs ------------------------------------------------------------
-+ */
-+struct cpu_trigger_data {
-+ cpu_trigger_led_state active; /* Behaviour when the CPU is active. */
-+ cpu_trigger_led_state idle; /* Behaviour when the CPU is idle. */
-+};
-+
-+/*
-+ * LED state change - called when the state of a single LED might
-+ * have changed. Returns true if the LED is blinking. The argument
-+ * is the blink state - the brightness of the blinking LED.
-+ */
-+static int leds_cpu_trigger_led_state_change(struct led_device *led,
-+ int is_active, enum led_brightness brightness)
-+{
-+ int is_blinking = 0;
-+
-+ write_lock(&led->lock);
-+ {
-+ struct cpu_trigger_data *data = led->trigger_data;
-+
-+ /* Find the new brightness for the LED, if the LED is
-+ * set to flash then the brightness passed in is the
-+ * required value.
-+ */
-+ if (likely(data != 0))
-+ switch (is_active ? data->active : data->idle) {
-+ case cpu_led_off: brightness = LED_OFF; break;
-+ case cpu_led_flash: is_blinking = 1; break;
-+ case cpu_led_on: brightness = LED_FULL; break;
-+ }
-+ else
-+ brightness = is_active ? LED_FULL : LED_OFF;
-+
-+ led_set_brightness(led, brightness);
-+ }
-+ write_unlock(&led->lock);
-+
-+ return is_blinking;
-+}
-+
-+/*
-+ * sysfs properties, the property is output at an list of the
-+ * values with the current setting enclosed in []
-+ */
-+static ssize_t leds_cpu_trigger_show_prop(struct class_device *dev, char *buf,
-+ size_t where)
-+{
-+ struct led_device *led = dev->class_data;
-+ cpu_trigger_led_state item = cpu_led_invalid, i;
-+ char *next;
-+
-+ read_lock(&led->lock);
-+ {
-+ if (likely(led->trigger_data != 0))
-+ item = *(const cpu_trigger_led_state*)(
-+ led->trigger_data + where);
-+ }
-+ read_unlock(&led->lock);
-+
-+ for (i=0, next=buf; i<cpu_led_invalid; ++i) {
-+ const char *name = cpu_trigger_names[i];
-+ size_t len = strlen(name);
-+
-+ if (i == item)
-+ *next++ = '[';
-+ memcpy(next, name, len);
-+ next += len;
-+ if (i == item)
-+ *next++ = ']';
-+ *next++ = ' ';
-+ }
-+
-+ next[-1] = '\n';
-+ *next++ = 0;
-+
-+ return next - buf;
-+}
-+
-+static ssize_t leds_cpu_trigger_show_active(struct class_device *dev, char *buf)
-+{
-+ return leds_cpu_trigger_show_prop(dev, buf,
-+ offsetof(struct cpu_trigger_data, active));
-+}
-+
-+static ssize_t leds_cpu_trigger_show_idle(struct class_device *dev, char *buf)
-+{
-+ return leds_cpu_trigger_show_prop(dev, buf,
-+ offsetof(struct cpu_trigger_data, idle));
-+}
-+
-+/*
-+ * Any matching leading substring selects a property - so "onoffonoff"
-+ * sets the property to off.
-+ */
-+static ssize_t leds_cpu_trigger_store_prop(struct class_device *dev,
-+ const char *buf, size_t size, size_t where)
-+{
-+ size_t rc = 0;
-+ cpu_trigger_led_state value = 0/*sic*/;
-+ struct led_device *led;
-+
-+ /* ignore space characters before the value. */
-+ while (rc < size && isspace(buf[rc]))
-+ ++rc;
-+ if (rc >= size)
-+ return rc;
-+
-+ /* look for a simple match against the trigger name, case
-+ * sensitive.
-+ */
-+ do {
-+ const char *name = cpu_trigger_names[value];
-+ size_t len = strlen(name);
-+ if (len <= size && memcmp(buf+rc, name, len) == 0) {
-+ rc = len;
-+ break;
-+ }
-+ if (++value >= cpu_led_invalid)
-+ return -EINVAL;
-+ } while (1);
-+
-+ led = dev->class_data;
-+ write_lock(&led->lock);
-+ {
-+ if (likely(led->trigger_data != 0))
-+ *(cpu_trigger_led_state*)(
-+ led->trigger_data + where) = value;
-+
-+ }
-+ write_unlock(&led->lock);
-+
-+ return rc;
-+}
-+
-+static ssize_t leds_cpu_trigger_store_active(struct class_device *dev,
-+ const char *buf, size_t size)
-+{
-+ ssize_t rc = leds_cpu_trigger_store_prop(dev, buf, size,
-+ offsetof(struct cpu_trigger_data, active));
-+ /*
-+ * At least one CPU must be active (otherwise who is doing this?)
-+ * Call down into the global state below to cause an update
-+ * to happen now.
-+ */
-+ leds_cpu_trigger_state_change();
-+ return rc;
-+}
-+
-+static ssize_t leds_cpu_trigger_store_idle(struct class_device *dev,
-+ const char *buf, size_t size)
-+{
-+ return leds_cpu_trigger_store_prop(dev, buf, size,
-+ offsetof(struct cpu_trigger_data, idle));
-+}
-+
-+static CLASS_DEVICE_ATTR(active, 0644, leds_cpu_trigger_show_active,
-+ leds_cpu_trigger_store_active);
-+
-+static CLASS_DEVICE_ATTR(idle, 0644, leds_cpu_trigger_show_idle,
-+ leds_cpu_trigger_store_idle);
-+
-+/*
-+ * Activate and deactivate are called on individual LEDs when the
-+ * LED trigger property is changed. The LED write lock is held.
-+ */
-+static void leds_cpu_trigger_activate(struct led_device *led)
-+{
-+ /*
-+ * The initial setting of the trigger is simple CPU activity
-+ * with the LED off for idle and on for active. Consequently
-+ * there is no need to mess with the global state initially,
-+ * we know the CPU is active at this moment!
-+ */
-+ struct cpu_trigger_data *data = kmalloc(sizeof *data, GFP_KERNEL);
-+ if (unlikely(data == 0))
-+ return;
-+
-+ data->active = cpu_led_on;
-+ data->idle = cpu_led_off;
-+ led->trigger_data = data;
-+
-+ class_device_create_file(led->class_dev, &class_device_attr_active);
-+ class_device_create_file(led->class_dev, &class_device_attr_idle);
-+
-+ led_set_brightness(led, LED_FULL);
-+}
-+
-+static void leds_cpu_trigger_deactivate(struct led_device *led)
-+{
-+ struct cpu_trigger_data *data = led->trigger_data;
-+ if (likely(data != 0)) {
-+ led_set_brightness(led, LED_OFF);
-+
-+ class_device_remove_file(led->class_dev, &class_device_attr_idle);
-+ class_device_remove_file(led->class_dev, &class_device_attr_active);
-+
-+ led->trigger_data = 0;
-+ kfree(data);
-+ }
-+}
-+
-+
-+/*
-+ * Global state --------------------------------------------------------------
-+ *
-+ * This is global because the CPU state is global and we only need one timer to
-+ * do this stuff.
-+ */
-+typedef struct leds_cpu_trigger_data {
-+ struct led_trigger trigger; /* the lock in here protects everything */
-+ struct timer_list timer;
-+ unsigned long last_active_time; /* record of last jiffies */
-+ unsigned long last_idle_time; /* record of last jiffies */
-+ int count_active; /* number of active CPUs */
-+} leds_cpu_trigger_data;
-+
-+/*
-+ * Mark state - uses the current time (jiffies) to work out
-+ * whether this is a mark or space.
-+ */
-+static int leds_cpu_trigger_mark(struct leds_cpu_trigger_data *data,
-+ unsigned long now) {
-+ if (data->count_active > 0) {
-+ unsigned long elapsed = now - data->last_active_time;
-+ elapsed %= LEDS_CPU_ACTIVE_SPACE + LEDS_CPU_ACTIVE_MARK;
-+ data->last_active_time = now - elapsed;
-+ return elapsed > LEDS_CPU_ACTIVE_SPACE;
-+ } else {
-+ unsigned long elapsed = now - data->last_idle_time;
-+ elapsed %= LEDS_CPU_IDLE_SPACE + LEDS_CPU_IDLE_MARK;
-+ data->last_idle_time = now - elapsed;
-+ return elapsed > LEDS_CPU_IDLE_SPACE;
-+ }
-+}
-+
-+
-+/*
-+ * State change - given information about the nature of the
-+ * (possible) state change call up to each LED to adjust its
-+ * state. Returns true if any LED is blinking. The lock
-+ * must be held (a read lock is adequate).
-+ */
-+static int leds_cpu_trigger_scan_leds(struct leds_cpu_trigger_data *data,
-+ unsigned long now)
-+{
-+ int blinking = 0;
-+ const int active = data->count_active > 0;
-+ const enum led_brightness brightness =
-+ leds_cpu_trigger_mark(data, now) ? LED_FULL : LED_OFF;
-+ struct list_head *entry;
-+
-+ list_for_each(entry, &data->trigger.led_devs) {
-+ struct led_device *led =
-+ list_entry(entry, struct led_device, trig_list);
-+
-+ blinking |= leds_cpu_trigger_led_state_change(led,
-+ active, brightness);
-+ }
-+
-+ return blinking;
-+}
-+
-+/*
-+ * Set the timer correctly according to the current state, the lock
-+ * must be held for write.
-+ */
-+static void leds_cpu_trigger_set_timer(struct leds_cpu_trigger_data *state,
-+ unsigned long now)
-+{
-+ unsigned long next;
-+ if (state->count_active > 0) {
-+ next = state->last_active_time;
-+ if (now - next > LEDS_CPU_ACTIVE_SPACE)
-+ next += LEDS_CPU_ACTIVE_MARK;
-+ next += LEDS_CPU_ACTIVE_SPACE;
-+ } else {
-+ next = state->last_idle_time;
-+ if (now - next > LEDS_CPU_IDLE_SPACE)
-+ next += LEDS_CPU_IDLE_MARK;
-+ next += LEDS_CPU_IDLE_SPACE;
-+ }
-+ mod_timer(&state->timer, next);
-+}
-+
-+/*
-+ * The timer callback if the LED is currently flashing, the callback
-+ * calls the state change function and, if that returns true, meaning
-+ * that at least one LED is still blinking, the timer is restarted
-+ * with the correct timeout.
-+ */
-+static void leds_cpu_trigger_timer_callback(unsigned long data)
-+{
-+ struct leds_cpu_trigger_data *state =
-+ (struct leds_cpu_trigger_data *)data;
-+
-+ write_lock(&state->trigger.leddev_list_lock);
-+ {
-+ unsigned long now = jiffies;
-+
-+ /* If at least one LED is set to flash; set the timer
-+ * again (this won't reset the timer set within the
-+ * idle loop).
-+ */
-+ if (leds_cpu_trigger_scan_leds(state, now))
-+ leds_cpu_trigger_set_timer(state, now);
-+ }
-+ write_unlock(&state->trigger.leddev_list_lock);
-+}
-+
-+
-+/*
-+ * There is one global control structure, one timer and one set
-+ * of state for active CPUs shared across all the LEDs. Individual
-+ * LEDs say how this state to be handled. It is currently *not*
-+ * possible to show per-cpu activity on individual LEDs, the code
-+ * maintains a count of active CPUs and the state is only 'idle'
-+ * if all CPUs are idle.
-+ */
-+static struct leds_cpu_trigger_data leds_cpu_trigger = {
-+ .trigger = {
-+ .name = "cpu",
-+ .activate = leds_cpu_trigger_activate,
-+ .deactivate = leds_cpu_trigger_deactivate,
-+ } ,
-+ .timer = TIMER_INITIALIZER(leds_cpu_trigger_timer_callback, 0,
-+ (unsigned long)&leds_cpu_trigger),
-+ .last_active_time = 0,
-+ .last_idle_time = 0,
-+ .count_active = 0,
-+};
-+
-+/*
-+ * State change - callback from an individual LED on a property change which
-+ * might require a redisplay.
-+ */
-+static void leds_cpu_trigger_state_change() {
-+ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+ {
-+ unsigned long now = jiffies;
-+
-+ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now) &&
-+ !timer_pending(&leds_cpu_trigger.timer))
-+ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now);
-+ }
-+ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+}
-+
-+/*
-+ * Called from every CPU at the start and end of the idle loop.
-+ * The active count is initially 0, even though CPUs are running,
-+ * so the code below must check for the resultant underflow.
-+ *
-+ * If the idle behaviour is 'flash' then when the timer times out
-+ * it will take the CPU out of idle, set the active state (which
-+ * may also be flash), drop back into idle and reset the timer to
-+ * the idle timeout...
-+ */
-+static void leds_cpu_trigger_idle(int is_idle)
-+{
-+ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+ if ((is_idle && leds_cpu_trigger.count_active > 0 &&
-+ --leds_cpu_trigger.count_active == 0) ||
-+ (!is_idle && leds_cpu_trigger.count_active < num_online_cpus() &&
-+ ++leds_cpu_trigger.count_active == 1)) {
-+ unsigned long now = jiffies;
-+
-+ /* State change - the system just became idle or active,
-+ * call the del_timer first in an attempt to minimise
-+ * getting a timer interrupt which will take us unnecessarily
-+ * out of idle (this doesn't matter).
-+ */
-+ del_timer(&leds_cpu_trigger.timer);
-+ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now))
-+ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now);
-+ }
-+ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+}
-+
-+/*
-+ * Module init and exit - register the trigger, then store
-+ * the idle callback in the arch-specific global. For this
-+ * module to link (into the kernel) or load (into a running
-+ * kernel) the architecture must define the leds_idle global.
-+ */
-+static int __init leds_cpu_trigger_init(void)
-+{
-+ int rc = led_trigger_register(&leds_cpu_trigger.trigger);
-+ leds_idle = leds_cpu_trigger_idle;
-+ return rc;
-+}
-+module_init(leds_cpu_trigger_init);
-+
-+static void __exit leds_cpu_trigger_exit(void)
-+{
-+ leds_idle = 0;
-+ del_timer_sync(&leds_cpu_trigger.timer);
-+ led_trigger_unregister(&leds_cpu_trigger.trigger);
-+}
-+module_exit(leds_cpu_trigger_exit);
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("CPU activity LED trigger");
-+MODULE_LICENSE("MIT");
-diff -rup linux-2.6.15.2/.pc/951-ixp4xx-leds-cpu-activity.patch/include/linux/leds.h linux-2.6.15.2/include/linux/leds.h
---- linux-2.6.15/include/linux/leds.h 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/include/linux/leds.h 1970-01-01 00:00:00.000000000 +0000
-@@ -95,3 +95,12 @@ void led_trigger_event(struct led_trigge
- #define led_trigger_event(x, y) do {} while(0)
-
- #endif
-+
-+/*
-+ * CPU activity indication.
-+ */
-+/* Idle callback - call with is_idle==1 at the start of the idle loop
-+ * and with is_idle==0 at the end. This symbol must be defined by
-+ * the arch core to be able to use LEDS_TRIGGER_CPU_ACTIVITY
-+ */
-+extern void (*leds_idle)(int is_idle);
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/96-loft-leds.patch b/packages/linux/ixp4xx-kernel/2.6.15/96-loft-leds.patch
deleted file mode 100644
index 60fcf52cbb..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/96-loft-leds.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-NEW_LEDS support for the loft board
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ixdp425-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -15,6 +15,7 @@
- #include <linux/tty.h>
- #include <linux/serial_8250.h>
- #include <linux/eeprom.h>
-+#include <linux/leds.h>
-
- #include <asm/types.h>
- #include <asm/setup.h>
-@@ -200,6 +201,29 @@ MACHINE_END
- * maybe the ixdp425 too.
- */
- #ifdef CONFIG_MACH_LOFT
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource loft_led_resources[] = {
-+ {
-+ .name = "ready", /* green led, also J8 pin 7 */
-+ .start = 3,
-+ .end = 3,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device loft_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(loft_led_resources),
-+ .resource = loft_led_resources,
-+};
-+#endif
-+
-+static struct platform_device *loft_devices[] __initdata = {
-+ &ixdp425_i2c_controller,
-+ &ixdp425_flash,
-+};
-+
- /*
- * When the EEPROM is added the MAC address are read from it.
- */
-@@ -244,7 +268,16 @@ static void __init loft_init(void)
-
- ixp4xx_sys_init();
-
-- platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
-+ /* Put the UART in first for debugging, don't care if it fails. */
-+ (void)platform_device_register(&ixdp425_uart);
-+
-+ /* These should work... */
-+ platform_add_devices(loft_devices, ARRAY_SIZE(loft_devices));
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care if this fails. */
-+ (void)platform_device_register(&loft_leds);
-+#endif
- }
-
- MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/96-nas100d-leds.patch b/packages/linux/ixp4xx-kernel/2.6.15/96-nas100d-leds.patch
deleted file mode 100644
index d78a779127..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/96-nas100d-leds.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-NEW_LEDS support for the IOMega NAS100D
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/nas100d-setup.c 1970-01-01 00:00:00.000000000 +0000
-@@ -16,6 +16,7 @@
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
- #include <linux/mtd/mtd.h>
-+#include <linux/leds.h>
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -44,6 +45,36 @@ static struct platform_device nas100d_fl
- .resource = &nas100d_flash_resource,
- };
-
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource nas100d_led_resources[] = {
-+ {
-+ .name = "wlan", /* green led */
-+ .start = 0,
-+ .end = 0,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "ready", /* blue power led (off is flashing!) */
-+ .start = 15,
-+ .end = 15,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "disk-1", /* yellow led */
-+ .start = 3,
-+ .end = 3,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device nas100d_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(nas100d_led_resources),
-+ .resource = nas100d_led_resources,
-+};
-+#endif
-+
- static struct ixp4xx_i2c_pins nas100d_i2c_gpio_pins = {
- .sda_pin = NAS100D_SDA_PIN,
- .scl_pin = NAS100D_SCL_PIN,
-@@ -102,7 +133,6 @@ static struct platform_device nas100d_ua
- static struct platform_device *nas100d_devices[] __initdata = {
- &nas100d_i2c_controller,
- &nas100d_flash,
-- &nas100d_uart,
- };
-
- static void nas100d_power_off(void)
-@@ -158,7 +188,18 @@ static void __init nas100d_init(void)
-
- pm_power_off = nas100d_power_off;
-
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&nas100d_uart);
-+
- platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&nas100d_leds);
-+#endif
- }
-
- /*
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/96-nslu2-leds.patch b/packages/linux/ixp4xx-kernel/2.6.15/96-nslu2-leds.patch
deleted file mode 100644
index 83043d9c2d..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/96-nslu2-leds.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-NEW_LEDS support for the LinkSys NSLU2
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
- arch/arm/mach-ixp4xx/nslu2-setup.c | 51 ++++++++++++++++++++++++++++++++++++-
- 1 file changed, 50 insertions(+), 1 deletion(-)
-
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-23 02:13:58.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-01-23 02:14:51.000000000 +0100
-@@ -17,6 +17,9 @@
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
- #include <linux/mtd/mtd.h>
-+#ifdef CONFIG_LEDS_CLASS
-+#include <linux/leds.h>
-+#endif
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -50,6 +53,42 @@ static struct ixp4xx_i2c_pins nslu2_i2c_
- .scl_pin = NSLU2_SCL_PIN,
- };
-
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource nslu2_led_resources[] = {
-+ {
-+ .name = "ready", /* green led */
-+ .start = NSLU2_LED_GRN,
-+ .end = NSLU2_LED_GRN,
-+ .flags = IXP4XX_GPIO_HIGH,
-+ },
-+ {
-+ .name = "status", /* red led */
-+ .start = NSLU2_LED_RED,
-+ .end = NSLU2_LED_RED,
-+ .flags = IXP4XX_GPIO_HIGH,
-+ },
-+ {
-+ .name = "disk-1",
-+ .start = NSLU2_LED_DISK1,
-+ .end = NSLU2_LED_DISK1,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "disk-2",
-+ .start = NSLU2_LED_DISK2,
-+ .end = NSLU2_LED_DISK2,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device nslu2_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(nslu2_led_resources),
-+ .resource = nslu2_led_resources,
-+};
-+#endif
-+
- static struct platform_device nslu2_i2c_controller = {
- .name = "IXP4XX-I2C",
- .id = 0,
-@@ -109,7 +148,6 @@ static struct platform_device nslu2_uart
- static struct platform_device *nslu2_devices[] __initdata = {
- &nslu2_i2c_controller,
- &nslu2_flash,
-- &nslu2_uart,
- &nslu2_beeper,
- };
-
-@@ -171,7 +209,18 @@ static void __init nslu2_init(void)
-
- pm_power_off = nslu2_power_off;
-
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&nslu2_uart);
-+
- platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&nslu2_leds);
-+#endif
- }
-
- /*
diff --git a/packages/linux/ixp4xx-kernel/2.6.15/defconfig b/packages/linux/ixp4xx-kernel/2.6.15/defconfig
deleted file mode 100644
index 597d406940..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.15/defconfig
+++ /dev/null
@@ -1,1696 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15
-# Sun Jan 22 22:47:43 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-# CONFIG_KALLSYMS is not set
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_BASE_FULL is not set
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=1
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-CONFIG_ARCH_IXP4XX=y
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
-
-#
-# Intel IXP4xx Implementation Options
-#
-
-#
-# IXP4xx Platforms
-#
-CONFIG_MACH_NSLU2=y
-CONFIG_ARCH_AVILA=y
-CONFIG_MACH_LOFT=y
-# CONFIG_ARCH_ADI_COYOTE is not set
-CONFIG_ARCH_IXDP425=y
-# CONFIG_MACH_IXDPG425 is not set
-# CONFIG_MACH_IXDP465 is not set
-CONFIG_ARCH_IXCDP1100=y
-# CONFIG_ARCH_PRPMC1100 is not set
-CONFIG_MACH_NAS100D=y
-CONFIG_ARCH_IXDP4XX=y
-# CONFIG_MACH_GTWX5715 is not set
-
-#
-# IXP4xx Options
-#
-CONFIG_IXP4XX_INDIRECT_PCI=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_BIG_ENDIAN is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_DMABOUNCE=y
-
-#
-# Bus support
-#
-CONFIG_ISA_DMA_API=y
-CONFIG_PCI=y
-# CONFIG_PCI_LEGACY_PROC is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MAC=m
-CONFIG_IP_NF_MATCH_PKTTYPE=m
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-CONFIG_IP_NF_MATCH_HELPER=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_CONNTRACK=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_PHYSDEV=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_REALM=m
-# CONFIG_IP_NF_MATCH_SCTP is not set
-# CONFIG_IP_NF_MATCH_DCCP is not set
-CONFIG_IP_NF_MATCH_COMMENT=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-# CONFIG_IP_NF_MATCH_STRING is not set
-CONFIG_IP_NF_FILTER=m
-# CONFIG_IP_NF_TARGET_REJECT is not set
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-# CONFIG_IP_NF_TARGET_NFQUEUE is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_CLASSIFY=m
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# CONFIG_LLC2 is not set
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-CONFIG_DEV_APPLETALK=y
-CONFIG_IPDDP=m
-CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-CONFIG_NET_PKTGEN=m
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_HIDP is not set
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIUART is not set
-CONFIG_BT_HCIBCM203X=m
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_REDBOOT_PARTS=y
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_NOSWAP is not set
-CONFIG_MTD_CFI_BE_BYTE_SWAP=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_IXP4XX=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_DISKONCHIP=y
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=4
-CONFIG_BLK_DEV_RAM_SIZE=10240
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_PCI_AUTO is not set
-CONFIG_BLK_DEV_AEC62XX=y
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-CONFIG_SCSI_QLA2XXX=y
-# CONFIG_SCSI_QLA21XX is not set
-# CONFIG_SCSI_QLA22XX is not set
-# CONFIG_SCSI_QLA2300 is not set
-# CONFIG_SCSI_QLA2322 is not set
-# CONFIG_SCSI_QLA6312 is not set
-# CONFIG_SCSI_QLA24XX is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_CRYPT is not set
-# CONFIG_DM_SNAPSHOT is not set
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MACLIST=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_AIRO is not set
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-# CONFIG_PRISM54 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_NET_WIRELESS=y
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-CONFIG_NETCONSOLE=m
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_IXP4XX_BEEPER=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-# CONFIG_VT is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=16
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_IXP4XX_WATCHDOG=y
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_IOP3XX is not set
-CONFIG_I2C_IXP4XX=y
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_SCx200_ACB is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-CONFIG_SENSORS_EEPROM=y
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_IXP4XX=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-CONFIG_VIDEO_BT848=m
-# CONFIG_VIDEO_SAA6588 is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-# CONFIG_VIDEO_SAA7134_ALSA is not set
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_VIDEO_OVCAMCHIP=m
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-CONFIG_VIDEO_TVEEPROM=m
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_HDA_INTEL is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_PWC=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-CONFIG_USB_LD=m
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-CONFIG_RTC_DRV_X1205=y
-CONFIG_RTC_DRV_DS1672=y
-CONFIG_RTC_DRV_PCF8563=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=m
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-CONFIG_NTFS_RW=y
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_NATIVE_ENDIAN is not set
-CONFIG_JFFS2_BIG_ENDIAN=y
-# CONFIG_JFFS2_LITTLE_ENDIAN is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-CONFIG_CODA_FS=m
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_NULL is not set
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_DEC16=y
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/06-remove-extraversion.patch b/packages/linux/ixp4xx-kernel/2.6.16/06-remove-extraversion.patch
deleted file mode 100644
index eca681b0aa..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/06-remove-extraversion.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- linux-2.6.15/Makefile~ 2006-02-15 00:04:58.000000000 +1030
-+++ linux-2.6.15/Makefile 2006-02-15 00:05:17.000000000 +1030
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 16
--EXTRAVERSION = -rc4-git9
-+EXTRAVERSION =
- NAME=Sliding Snow Leopard
-
- # *DOCUMENTATION*
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/10-ixp4xx-fix-irq.patch b/packages/linux/ixp4xx-kernel/2.6.16/10-ixp4xx-fix-irq.patch
deleted file mode 100644
index 4326df2add..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/10-ixp4xx-fix-irq.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- arch/arm/mach-ixp4xx/common.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/common.c 2006-03-18 18:10:56.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/common.c 2006-03-18 18:48:46.000000000 +0100
-@@ -91,7 +91,7 @@ static void ixp4xx_config_irq(unsigned i
- /*
- * IRQ -> GPIO mapping table
- */
--static int irq2gpio[32] = {
-+static char irq2gpio[32] = {
- -1, -1, -1, -1, -1, -1, 0, 1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 2, 3, 4, 5, 6,
-@@ -153,6 +153,9 @@ static int ixp4xx_set_irq_type(unsigned
- /* Set the new style */
- *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE));
-
-+ /* Configure the line as an input */
-+ gpio_line_config(line, IXP4XX_GPIO_IN);
-+
- return 0;
- }
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/11-mtdpart-redboot-config-byteswap.patch b/packages/linux/ixp4xx-kernel/2.6.16/11-mtdpart-redboot-config-byteswap.patch
deleted file mode 100644
index e258567462..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/11-mtdpart-redboot-config-byteswap.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-A more robust test for swapped RedBoot FIS directory partitions. This
-changes the test to check the flash_base value for the FIS directory,
-since we know where the FIS directory base is we can work out whether
-the flash address stored in the directory itself is byte swapped under
-most circumstances. If the value is 0 the directory is at the start
-of the flash and the test fails. In this case the fallback is to use
-the original test made slightly more robust.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
---- linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/drivers/mtd/redboot.c 1970-01-01 00:00:00.000000000 +0000
-@@ -91,14 +91,41 @@ static int parse_redboot_partitions(stru
- }
- if (!memcmp(buf[i].name, "FIS directory", 14)) {
- /* This is apparently the FIS directory entry for the
-- * FIS directory itself. The FIS directory size is
-- * one erase block; if the buf[i].size field is
-- * swab32(erasesize) then we know we are looking at
-- * a byte swapped FIS directory - swap all the entries!
-- * (NOTE: this is 'size' not 'data_length'; size is
-- * the full size of the entry.)
-+ * FIS directory itself. To discover whether the entries
-+ * in this are native byte sex or byte swapped look at
-+ * the flash_base field - we know the FIS directory is
-+ * at 'offset' within the flash.
- */
-- if (swab32(buf[i].size) == master->erasesize) {
-+ int maybe_native, maybe_swapped;
-+ if (fis_origin != 0) {
-+ maybe_native =
-+ buf[i].flash_base == fis_origin + offset;
-+ maybe_swapped =
-+ swab32(buf[i].flash_base) == fis_origin + offset;
-+ } else if (offset != 0 || buf[i].flash_base != 0) {
-+ maybe_native =
-+ (buf[i].flash_base & (master->size-1)) == offset;
-+ maybe_swapped =
-+ (swab32(buf[i].flash_base) & (master->size-1)) == offset;
-+ } else {
-+ /* The FIS directory is at the start of the flash and
-+ * the 'flash_base' field is 0. The critical case is when
-+ * we are booting off this flash, but then we don't expect
-+ * this because the boot loader is pretty much always at
-+ * the start! Since the FIS directory is always less than
-+ * or equal to one erase block do the following:
-+ */
-+ maybe_native = buf[i].size <= master->erasesize;
-+ maybe_swapped = swab32(buf[i].size) <= master->erasesize;
-+ }
-+
-+ if (maybe_native && maybe_swapped)
-+ printk(KERN_WARNING "RedBoot directory 0x%lx(0x%lx) assumed native\n",
-+ buf[i].flash_base, buf[i].size);
-+ else if (!maybe_native && !maybe_swapped)
-+ printk(KERN_ERR "RedBoot directory 0x%lx(0x%lx) forced native\n",
-+ buf[i].flash_base, buf[i].size);
-+ else if (maybe_swapped) {
- int j;
- for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) {
- /* The unsigned long fields were written with the
-@@ -112,7 +139,11 @@ static int parse_redboot_partitions(stru
- swab32s(&buf[j].desc_cksum);
- swab32s(&buf[j].file_cksum);
- }
-- }
-+ printk(KERN_NOTICE "RedBoot directory 0x%lx(0x%lx) swapped\n",
-+ buf[i].flash_base, buf[i].size);
-+ } else
-+ printk(KERN_NOTICE "RedBoot directory 0x%lx(0x%lx) native\n",
-+ buf[i].flash_base, buf[i].size);
- break;
- }
- }
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/15-jffs2-endian-config.patch b/packages/linux/ixp4xx-kernel/2.6.16/15-jffs2-endian-config.patch
deleted file mode 100644
index 893353ef4f..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/15-jffs2-endian-config.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-This patch allows the endianness of the JFSS2 filesystem to be
-specified by config options.
-
-It defaults to native-endian (the previously hard-coded option).
-
-Some architectures (in particular, the NSLU2) benefit from having a
-single known endianness of JFFS2 filesystem (for data, not
-executables) independent of the endianness of the processor (ARM
-processors can be switched to either endianness at run-time).
-
-Signed-off-by: Rod Whitby <rod@whitby.id.au>
-Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
-
- fs/Kconfig | 25 +++++++++++++++++++++++++
- fs/jffs2/nodelist.h | 8 +++-----
- 2 files changed, 28 insertions(+), 5 deletions(-)
-
---- linux-nslu2.orig/fs/Kconfig 2006-02-06 20:38:09.000000000 +0100
-+++ linux-nslu2/fs/Kconfig 2006-02-06 21:49:07.000000000 +0100
-@@ -1174,6 +1174,31 @@ config JFFS2_CMODE_SIZE
-
- endchoice
-
-+choice
-+ prompt "JFFS2 endianness"
-+ default JFFS2_NATIVE_ENDIAN
-+ depends on JFFS2_FS
-+ help
-+ You can set here the default endianness of JFFS2 from
-+ the available options. Don't touch if unsure.
-+
-+config JFFS2_NATIVE_ENDIAN
-+ bool "native endian"
-+ help
-+ Uses a native endian bytestream.
-+
-+config JFFS2_BIG_ENDIAN
-+ bool "big endian"
-+ help
-+ Uses a big endian bytestream.
-+
-+config JFFS2_LITTLE_ENDIAN
-+ bool "little endian"
-+ help
-+ Uses a little endian bytestream.
-+
-+endchoice
-+
- config CRAMFS
- tristate "Compressed ROM file system support (cramfs)"
- select ZLIB_INFLATE
---- linux-nslu2.orig/fs/jffs2/nodelist.h 2006-02-06 20:35:36.000000000 +0100
-+++ linux-nslu2/fs/jffs2/nodelist.h 2006-02-06 21:49:07.000000000 +0100
-@@ -29,12 +29,10 @@
- #include "os-linux.h"
- #endif
-
--#define JFFS2_NATIVE_ENDIAN
--
- /* Note we handle mode bits conversion from JFFS2 (i.e. Linux) to/from
- whatever OS we're actually running on here too. */
-
--#if defined(JFFS2_NATIVE_ENDIAN)
-+#if defined(CONFIG_JFFS2_NATIVE_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){x})
- #define cpu_to_je32(x) ((jint32_t){x})
- #define cpu_to_jemode(x) ((jmode_t){os_to_jffs2_mode(x)})
-@@ -42,7 +40,7 @@
- #define je16_to_cpu(x) ((x).v16)
- #define je32_to_cpu(x) ((x).v32)
- #define jemode_to_cpu(x) (jffs2_to_os_mode((x).m))
--#elif defined(JFFS2_BIG_ENDIAN)
-+#elif defined(CONFIG_JFFS2_BIG_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)})
- #define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)})
- #define cpu_to_jemode(x) ((jmode_t){cpu_to_be32(os_to_jffs2_mode(x))})
-@@ -50,7 +48,7 @@
- #define je16_to_cpu(x) (be16_to_cpu(x.v16))
- #define je32_to_cpu(x) (be32_to_cpu(x.v32))
- #define jemode_to_cpu(x) (be32_to_cpu(jffs2_to_os_mode((x).m)))
--#elif defined(JFFS2_LITTLE_ENDIAN)
-+#elif defined(CONFIG_JFFS2_LITTLE_ENDIAN)
- #define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)})
- #define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)})
- #define cpu_to_jemode(x) ((jmode_t){cpu_to_le32(os_to_jffs2_mode(x))})
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/40-rtc-class.patch b/packages/linux/ixp4xx-kernel/2.6.16/40-rtc-class.patch
deleted file mode 100644
index 044bd3abc1..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/40-rtc-class.patch
+++ /dev/null
@@ -1,5846 +0,0 @@
----
- CREDITS | 5
- MAINTAINERS | 6
- arch/arm/Kconfig | 3
- arch/arm/common/rtctime.c | 108 --
- arch/arm/mach-integrator/time.c | 16
- arch/arm/mach-pxa/generic.c | 6
- arch/arm/mach-sa1100/generic.c | 6
- arch/mips/ddb5xxx/common/rtc_ds1386.c | 4
- arch/mips/dec/time.c | 4
- arch/mips/ite-boards/generic/time.c | 4
- arch/mips/jmr3927/common/rtc_ds1742.c | 4
- arch/mips/kernel/time.c | 22
- arch/mips/lasat/setup.c | 4
- arch/mips/mips-boards/atlas/atlas_setup.c | 2
- arch/mips/mips-boards/malta/malta_setup.c | 2
- arch/mips/momentum/jaguar_atx/setup.c | 4
- arch/mips/momentum/ocelot_3/setup.c | 4
- arch/mips/momentum/ocelot_c/setup.c | 4
- arch/mips/pmc-sierra/yosemite/setup.c | 4
- arch/mips/sgi-ip22/ip22-time.c | 4
- arch/mips/sgi-ip32/ip32-setup.c | 4
- arch/mips/sibyte/swarm/setup.c | 8
- arch/mips/sni/setup.c | 4
- arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c | 4
- arch/mips/tx4938/common/rtc_rx5c348.c | 4
- drivers/Kconfig | 2
- drivers/Makefile | 1
- drivers/char/Kconfig | 2
- drivers/i2c/chips/Kconfig | 18
- drivers/i2c/chips/Makefile | 2
- drivers/i2c/chips/rtc8564.c | 385 -------
- drivers/i2c/chips/rtc8564.h | 78 -
- drivers/i2c/chips/x1205.c | 698 -------------
- drivers/rtc/Kconfig | 156 ++
- drivers/rtc/Makefile | 20
- drivers/rtc/class.c | 145 ++
- drivers/rtc/hctosys.c | 69 +
- drivers/rtc/interface.c | 277 +++++
- drivers/rtc/rtc-dev.c | 382 +++++++
- drivers/rtc/rtc-ds1672.c | 233 ++++
- drivers/rtc/rtc-ep93xx.c | 163 +++
- drivers/rtc/rtc-lib.c | 99 +
- drivers/rtc/rtc-pcf8563.c | 355 ++++++
- drivers/rtc/rtc-proc.c | 162 +++
- drivers/rtc/rtc-rs5c372.c | 295 +++++
- drivers/rtc/rtc-sa1100.c | 392 +++++++
- drivers/rtc/rtc-sysfs.c | 124 ++
- drivers/rtc/rtc-test.c | 205 +++
- drivers/rtc/rtc-x1205.c | 619 +++++++++++
- include/asm-arm/rtc.h | 3
- include/asm-mips/time.h | 12
- include/linux/rtc.h | 92 +
- include/linux/x1205.h | 31
- 53 files changed, 3888 insertions(+), 1372 deletions(-)
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-lib.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,99 @@
-+/*
-+ * rtc and date/time utility functions
-+ *
-+ * Copyright (C) 2005-06 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c and other bits
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+
-+static const unsigned char rtc_days_in_month[] = {
-+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-+};
-+
-+#define LEAPS_THRU_END_OF(y) ((y)/4 - (y)/100 + (y)/400)
-+#define LEAP_YEAR(year) ((!(year % 4) && (year % 100)) || !(year % 400))
-+
-+int rtc_month_days(unsigned int month, unsigned int year)
-+{
-+ return rtc_days_in_month[month] + (LEAP_YEAR(year) && month == 1);
-+}
-+EXPORT_SYMBOL(rtc_month_days);
-+
-+/*
-+ * Convert seconds since 01-01-1970 00:00:00 to Gregorian date.
-+ */
-+void rtc_time_to_tm(unsigned long time, struct rtc_time *tm)
-+{
-+ register int days, month, year;
-+
-+ days = time / 86400;
-+ time -= days * 86400;
-+
-+ /* day of the week, 1970-01-01 was a Thursday */
-+ tm->tm_wday = (days + 4) % 7;
-+
-+ year = 1970 + days / 365;
-+ days -= (year - 1970) * 365
-+ + LEAPS_THRU_END_OF(year - 1)
-+ - LEAPS_THRU_END_OF(1970 - 1);
-+ if (days < 0) {
-+ year -= 1;
-+ days += 365 + LEAP_YEAR(year);
-+ }
-+ tm->tm_year = year - 1900;
-+ tm->tm_yday = days + 1;
-+
-+ for (month = 0; month < 11; month++) {
-+ int newdays;
-+
-+ newdays = days - rtc_month_days(month, year);
-+ if (newdays < 0)
-+ break;
-+ days = newdays;
-+ }
-+ tm->tm_mon = month;
-+ tm->tm_mday = days + 1;
-+
-+ tm->tm_hour = time / 3600;
-+ time -= tm->tm_hour * 3600;
-+ tm->tm_min = time / 60;
-+ tm->tm_sec = time - tm->tm_min * 60;
-+}
-+EXPORT_SYMBOL(rtc_time_to_tm);
-+
-+/*
-+ * Does the rtc_time represent a valid date/time?
-+ */
-+int rtc_valid_tm(struct rtc_time *tm)
-+{
-+ if (tm->tm_year < 70
-+ || tm->tm_mon >= 12
-+ || tm->tm_mday < 1
-+ || tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900)
-+ || tm->tm_hour >= 24
-+ || tm->tm_min >= 60
-+ || tm->tm_sec >= 60)
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(rtc_valid_tm);
-+
-+/*
-+ * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
-+ */
-+int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
-+{
-+ *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-+ tm->tm_hour, tm->tm_min, tm->tm_sec);
-+ return 0;
-+}
-+EXPORT_SYMBOL(rtc_tm_to_time);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/Makefile 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,20 @@
-+#
-+# Makefile for RTC class/drivers.
-+#
-+
-+obj-$(CONFIG_RTC_LIB) += rtc-lib.o
-+obj-$(CONFIG_RTC_HCTOSYS) += hctosys.o
-+obj-$(CONFIG_RTC_CLASS) += rtc-core.o
-+rtc-core-y := class.o interface.o
-+
-+obj-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
-+obj-$(CONFIG_RTC_INTF_PROC) += rtc-proc.o
-+obj-$(CONFIG_RTC_INTF_DEV) += rtc-dev.o
-+
-+obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o
-+obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o
-+obj-$(CONFIG_RTC_DRV_DS1672) += rtc-ds1672.o
-+obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o
-+obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
-+obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o
-+obj-$(CONFIG_RTC_DRV_SA1100) += rtc-sa1100.o
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/Kconfig 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,156 @@
-+\#
-+# RTC class/drivers configuration
-+#
-+
-+menu "Real Time Clock"
-+
-+config RTC_LIB
-+ bool
-+
-+config RTC_CLASS
-+ tristate "RTC class"
-+ depends on EXPERIMENTAL
-+ default n
-+ select RTC_LIB
-+ help
-+ Generic RTC class support. If you say yes here, you will
-+ be allowed to plug one or more RTCs to your system. You will
-+ probably want to enable one of more of the interfaces below.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-class.
-+
-+config RTC_HCTOSYS
-+ bool "Set system time from RTC on startup"
-+ depends on RTC_CLASS = y
-+ default y
-+ help
-+ If you say yes here, the system time will be set using
-+ the value read from the specified RTC device. This is useful
-+ in order to avoid unnecessary fschk runs.
-+
-+config RTC_HCTOSYS_DEVICE
-+ string "The RTC to read the time from"
-+ depends on RTC_HCTOSYS = y
-+ default "rtc0"
-+ help
-+ The RTC device that will be used as the source for
-+ the system time, usually rtc0.
-+
-+comment "RTC interfaces"
-+ depends on RTC_CLASS
-+
-+config RTC_INTF_SYSFS
-+ tristate "sysfs"
-+ depends on RTC_CLASS && SYSFS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the sysfs
-+ interface, /sys/class/rtc/rtcX .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-sysfs.
-+
-+config RTC_INTF_PROC
-+ tristate "proc"
-+ depends on RTC_CLASS && PROC_FS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the proc
-+ interface, /proc/driver/rtc .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-proc.
-+
-+config RTC_INTF_DEV
-+ tristate "dev"
-+ depends on RTC_CLASS
-+ default RTC_CLASS
-+ help
-+ Say yes here if you want to use your RTC using the dev
-+ interface, /dev/rtc .
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-dev.
-+
-+comment "RTC drivers"
-+ depends on RTC_CLASS
-+
-+config RTC_DRV_X1205
-+ tristate "Xicor/Intersil X1205 RTC chip"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Xicor/Intersil X1205 RTC chip.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-x1205.
-+
-+config RTC_DRV_DS1672
-+ tristate "Dallas/Maxim DS1672"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Dallas/Maxim DS1672 timekeeping chip.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-ds1672.
-+
-+config RTC_DRV_PCF8563
-+ tristate "Philips PCF8563/Epson RTC8564"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Philips PCF8563 RTC chip. The Epson RTC8564
-+ should work as well.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-pcf8563.
-+
-+config RTC_DRV_RS5C372
-+ tristate "Ricoh RS5C372A/B"
-+ depends on RTC_CLASS && I2C
-+ help
-+ If you say yes here you get support for the
-+ Ricoh RS5C372A and RS5C372B RTC chips.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-rs5c372.
-+
-+config RTC_DRV_EP93XX
-+ tristate "Cirrus Logic EP93XX"
-+ depends on RTC_CLASS && ARCH_EP93XX
-+ help
-+ If you say yes here you get support for the
-+ RTC embedded in the Cirrus Logic EP93XX processors.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-ep93xx.
-+
-+
-+config RTC_DRV_SA1100
-+ bool "SA11x0/PXA2xx RTC support"
-+ depends on ARCH_SA1100 || ARCH_PXA
-+ help
-+ If you say Y here you will get access to the real time clock
-+ built into your SA11x0 or PXA2xx CPU.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called rtc-sa1100.
-+
-+config RTC_DRV_TEST
-+ tristate "Test driver/device"
-+ depends on RTC_CLASS
-+ help
-+ If you say yes here you get support for the
-+ RTC test driver. It's a software RTC which can be
-+ used to test the RTC subsystem APIs. It gets
-+ the time from the system clock.
-+ You want this driver only if you are doing development
-+ on the RTC subsystem. Please read the source code
-+ for further details.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called rtc-test.
-+
-+endmenu
---- linux-ixp4xx.orig/drivers/Kconfig 2006-03-08 01:59:18.000000000 +0100
-+++ linux-ixp4xx/drivers/Kconfig 2006-03-08 01:59:26.000000000 +0100
-@@ -72,4 +72,6 @@ source "drivers/sn/Kconfig"
-
- source "drivers/edac/Kconfig"
-
-+source "drivers/rtc/Kconfig"
-+
- endmenu
---- linux-ixp4xx.orig/drivers/Makefile 2006-03-08 01:59:18.000000000 +0100
-+++ linux-ixp4xx/drivers/Makefile 2006-03-08 01:59:26.000000000 +0100
-@@ -56,6 +56,7 @@ obj-$(CONFIG_USB_GADGET) += usb/gadget/
- obj-$(CONFIG_GAMEPORT) += input/gameport/
- obj-$(CONFIG_INPUT) += input/
- obj-$(CONFIG_I2O) += message/
-+obj-$(CONFIG_RTC_LIB) += rtc/
- obj-$(CONFIG_I2C) += i2c/
- obj-$(CONFIG_W1) += w1/
- obj-$(CONFIG_HWMON) += hwmon/
---- linux-ixp4xx.orig/include/linux/rtc.h 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/include/linux/rtc.h 2006-03-08 01:59:26.000000000 +0100
-@@ -93,8 +93,100 @@ struct rtc_pll_info {
- #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */
- #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */
-
-+/* interrupt flags */
-+#define RTC_IRQF 0x80 /* any of the following is active */
-+#define RTC_PF 0x40
-+#define RTC_AF 0x20
-+#define RTC_UF 0x10
-+
- #ifdef __KERNEL__
-
-+extern int rtc_month_days(unsigned int month, unsigned int year);
-+extern int rtc_valid_tm(struct rtc_time *tm);
-+extern int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time);
-+extern void rtc_time_to_tm(unsigned long time, struct rtc_time *tm);
-+
-+#include <linux/device.h>
-+#include <linux/seq_file.h>
-+#include <linux/cdev.h>
-+#include <linux/poll.h>
-+#include <linux/mutex.h>
-+
-+extern struct class *rtc_class;
-+
-+struct rtc_class_ops {
-+ int (*open)(struct device *);
-+ void (*release)(struct device *);
-+ int (*ioctl)(struct device *, unsigned int, unsigned long);
-+ int (*read_time)(struct device *, struct rtc_time *);
-+ int (*set_time)(struct device *, struct rtc_time *);
-+ int (*read_alarm)(struct device *, struct rtc_wkalrm *);
-+ int (*set_alarm)(struct device *, struct rtc_wkalrm *);
-+ int (*proc)(struct device *, struct seq_file *);
-+ int (*set_mmss)(struct device *, unsigned long secs);
-+ int (*irq_set_state)(struct device *, int enabled);
-+ int (*irq_set_freq)(struct device *, int freq);
-+ int (*read_callback)(struct device *, int data);
-+};
-+
-+#define RTC_DEVICE_NAME_SIZE 20
-+struct rtc_task;
-+
-+struct rtc_device
-+{
-+ struct class_device class_dev;
-+ struct module *owner;
-+
-+ int id;
-+ char name[RTC_DEVICE_NAME_SIZE];
-+
-+ struct rtc_class_ops *ops;
-+ struct mutex ops_lock;
-+
-+ struct class_device *rtc_dev;
-+ struct cdev char_dev;
-+ struct mutex char_lock;
-+
-+ unsigned long irq_data;
-+ spinlock_t irq_lock;
-+ wait_queue_head_t irq_queue;
-+ struct fasync_struct *async_queue;
-+
-+ struct rtc_task *irq_task;
-+ spinlock_t irq_task_lock;
-+ int irq_freq;
-+};
-+#define to_rtc_device(d) container_of(d, struct rtc_device, class_dev)
-+
-+extern struct rtc_device *rtc_device_register(const char *name,
-+ struct device *dev,
-+ struct rtc_class_ops *ops,
-+ struct module *owner);
-+extern void rtc_device_unregister(struct rtc_device *rdev);
-+extern int rtc_interface_register(struct class_interface *intf);
-+
-+extern int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm);
-+extern int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm);
-+extern int rtc_set_mmss(struct class_device *class_dev, unsigned long secs);
-+extern int rtc_read_alarm(struct class_device *class_dev,
-+ struct rtc_wkalrm *alrm);
-+extern int rtc_set_alarm(struct class_device *class_dev,
-+ struct rtc_wkalrm *alrm);
-+extern void rtc_update_irq(struct class_device *class_dev,
-+ unsigned long num, unsigned long events);
-+
-+extern struct class_device *rtc_class_open(char *name);
-+extern void rtc_class_close(struct class_device *class_dev);
-+
-+extern int rtc_irq_register(struct class_device *class_dev,
-+ struct rtc_task *task);
-+extern void rtc_irq_unregister(struct class_device *class_dev,
-+ struct rtc_task *task);
-+extern int rtc_irq_set_state(struct class_device *class_dev,
-+ struct rtc_task *task, int enabled);
-+extern int rtc_irq_set_freq(struct class_device *class_dev,
-+ struct rtc_task *task, int freq);
-+
- typedef struct rtc_task {
- void (*func)(void *private_data);
- void *private_data;
---- linux-ixp4xx.orig/arch/arm/common/rtctime.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/arm/common/rtctime.c 2006-03-08 01:59:26.000000000 +0100
-@@ -20,6 +20,7 @@
- #include <linux/capability.h>
- #include <linux/device.h>
- #include <linux/mutex.h>
-+#include <linux/rtc.h>
-
- #include <asm/rtc.h>
- #include <asm/semaphore.h>
-@@ -42,89 +43,6 @@ static struct rtc_ops *rtc_ops;
-
- #define rtc_epoch 1900UL
-
--static const unsigned char days_in_month[] = {
-- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
--};
--
--#define LEAPS_THRU_END_OF(y) ((y)/4 - (y)/100 + (y)/400)
--#define LEAP_YEAR(year) ((!(year % 4) && (year % 100)) || !(year % 400))
--
--static int month_days(unsigned int month, unsigned int year)
--{
-- return days_in_month[month] + (LEAP_YEAR(year) && month == 1);
--}
--
--/*
-- * Convert seconds since 01-01-1970 00:00:00 to Gregorian date.
-- */
--void rtc_time_to_tm(unsigned long time, struct rtc_time *tm)
--{
-- int days, month, year;
--
-- days = time / 86400;
-- time -= days * 86400;
--
-- tm->tm_wday = (days + 4) % 7;
--
-- year = 1970 + days / 365;
-- days -= (year - 1970) * 365
-- + LEAPS_THRU_END_OF(year - 1)
-- - LEAPS_THRU_END_OF(1970 - 1);
-- if (days < 0) {
-- year -= 1;
-- days += 365 + LEAP_YEAR(year);
-- }
-- tm->tm_year = year - 1900;
-- tm->tm_yday = days + 1;
--
-- for (month = 0; month < 11; month++) {
-- int newdays;
--
-- newdays = days - month_days(month, year);
-- if (newdays < 0)
-- break;
-- days = newdays;
-- }
-- tm->tm_mon = month;
-- tm->tm_mday = days + 1;
--
-- tm->tm_hour = time / 3600;
-- time -= tm->tm_hour * 3600;
-- tm->tm_min = time / 60;
-- tm->tm_sec = time - tm->tm_min * 60;
--}
--EXPORT_SYMBOL(rtc_time_to_tm);
--
--/*
-- * Does the rtc_time represent a valid date/time?
-- */
--int rtc_valid_tm(struct rtc_time *tm)
--{
-- if (tm->tm_year < 70 ||
-- tm->tm_mon >= 12 ||
-- tm->tm_mday < 1 ||
-- tm->tm_mday > month_days(tm->tm_mon, tm->tm_year + 1900) ||
-- tm->tm_hour >= 24 ||
-- tm->tm_min >= 60 ||
-- tm->tm_sec >= 60)
-- return -EINVAL;
--
-- return 0;
--}
--EXPORT_SYMBOL(rtc_valid_tm);
--
--/*
-- * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
-- */
--int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
--{
-- *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-- tm->tm_hour, tm->tm_min, tm->tm_sec);
--
-- return 0;
--}
--EXPORT_SYMBOL(rtc_tm_to_time);
--
- /*
- * Calculate the next alarm time given the requested alarm time mask
- * and the current time.
-@@ -151,13 +69,13 @@ void rtc_next_alarm_time(struct rtc_time
- }
- }
-
--static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm)
-+static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm)
- {
- memset(tm, 0, sizeof(struct rtc_time));
- return ops->read_time(tm);
- }
-
--static inline int rtc_set_time(struct rtc_ops *ops, struct rtc_time *tm)
-+static inline int rtc_arm_set_time(struct rtc_ops *ops, struct rtc_time *tm)
- {
- int ret;
-
-@@ -168,7 +86,7 @@ static inline int rtc_set_time(struct rt
- return ret;
- }
-
--static inline int rtc_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
-+static inline int rtc_arm_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
- {
- int ret = -EINVAL;
- if (ops->read_alarm) {
-@@ -178,7 +96,7 @@ static inline int rtc_read_alarm(struct
- return ret;
- }
-
--static inline int rtc_set_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
-+static inline int rtc_arm_set_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm)
- {
- int ret = -EINVAL;
- if (ops->set_alarm)
-@@ -266,7 +184,7 @@ static int rtc_ioctl(struct inode *inode
-
- switch (cmd) {
- case RTC_ALM_READ:
-- ret = rtc_read_alarm(ops, &alrm);
-+ ret = rtc_arm_read_alarm(ops, &alrm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &alrm.time, sizeof(tm));
-@@ -288,11 +206,11 @@ static int rtc_ioctl(struct inode *inode
- alrm.time.tm_wday = -1;
- alrm.time.tm_yday = -1;
- alrm.time.tm_isdst = -1;
-- ret = rtc_set_alarm(ops, &alrm);
-+ ret = rtc_arm_set_alarm(ops, &alrm);
- break;
-
- case RTC_RD_TIME:
-- ret = rtc_read_time(ops, &tm);
-+ ret = rtc_arm_read_time(ops, &tm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &tm, sizeof(tm));
-@@ -310,7 +228,7 @@ static int rtc_ioctl(struct inode *inode
- ret = -EFAULT;
- break;
- }
-- ret = rtc_set_time(ops, &tm);
-+ ret = rtc_arm_set_time(ops, &tm);
- break;
-
- case RTC_EPOCH_SET:
-@@ -341,11 +259,11 @@ static int rtc_ioctl(struct inode *inode
- ret = -EFAULT;
- break;
- }
-- ret = rtc_set_alarm(ops, &alrm);
-+ ret = rtc_arm_set_alarm(ops, &alrm);
- break;
-
- case RTC_WKALM_RD:
-- ret = rtc_read_alarm(ops, &alrm);
-+ ret = rtc_arm_read_alarm(ops, &alrm);
- if (ret)
- break;
- ret = copy_to_user(uarg, &alrm, sizeof(alrm));
-@@ -435,7 +353,7 @@ static int rtc_read_proc(char *page, cha
- struct rtc_time tm;
- char *p = page;
-
-- if (rtc_read_time(ops, &tm) == 0) {
-+ if (rtc_arm_read_time(ops, &tm) == 0) {
- p += sprintf(p,
- "rtc_time\t: %02d:%02d:%02d\n"
- "rtc_date\t: %04d-%02d-%02d\n"
-@@ -445,7 +363,7 @@ static int rtc_read_proc(char *page, cha
- rtc_epoch);
- }
-
-- if (rtc_read_alarm(ops, &alrm) == 0) {
-+ if (rtc_arm_read_alarm(ops, &alrm) == 0) {
- p += sprintf(p, "alrm_time\t: ");
- if ((unsigned int)alrm.time.tm_hour <= 24)
- p += sprintf(p, "%02d:", alrm.time.tm_hour);
---- linux-ixp4xx.orig/include/asm-arm/rtc.h 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/rtc.h 2006-03-08 01:59:26.000000000 +0100
-@@ -25,9 +25,6 @@ struct rtc_ops {
- int (*proc)(char *buf);
- };
-
--void rtc_time_to_tm(unsigned long, struct rtc_time *);
--int rtc_tm_to_time(struct rtc_time *, unsigned long *);
--int rtc_valid_tm(struct rtc_time *);
- void rtc_next_alarm_time(struct rtc_time *, struct rtc_time *, struct rtc_time *);
- void rtc_update(unsigned long, unsigned long);
- int register_rtc(struct rtc_ops *);
---- linux-ixp4xx.orig/drivers/char/Kconfig 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/drivers/char/Kconfig 2006-03-08 01:59:26.000000000 +0100
-@@ -695,7 +695,7 @@ config NVRAM
-
- config RTC
- tristate "Enhanced Real Time Clock Support"
-- depends on !PPC32 && !PARISC && !IA64 && !M68K && (!SPARC || PCI) && !FRV
-+ depends on !PPC32 && !PARISC && !IA64 && !M68K && (!SPARC || PCI) && !FRV && !ARM
- ---help---
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
---- linux-ixp4xx.orig/arch/arm/Kconfig 2006-03-08 01:59:18.000000000 +0100
-+++ linux-ixp4xx/arch/arm/Kconfig 2006-03-08 01:59:26.000000000 +0100
-@@ -8,6 +8,7 @@ mainmenu "Linux Kernel Configuration"
- config ARM
- bool
- default y
-+ select RTC_LIB
- help
- The ARM series is a line of low-power-consumption RISC chip designs
- licensed by ARM Ltd and targeted at embedded applications and
-@@ -819,6 +820,8 @@ source "drivers/usb/Kconfig"
-
- source "drivers/mmc/Kconfig"
-
-+source "drivers/rtc/Kconfig"
-+
- endmenu
-
- source "fs/Kconfig"
---- linux-ixp4xx.orig/arch/arm/mach-integrator/time.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-integrator/time.c 2006-03-08 01:59:26.000000000 +0100
-@@ -40,13 +40,13 @@ static int integrator_set_rtc(void)
- return 1;
- }
-
--static int rtc_read_alarm(struct rtc_wkalrm *alrm)
-+static int integrator_rtc_read_alarm(struct rtc_wkalrm *alrm)
- {
- rtc_time_to_tm(readl(rtc_base + RTC_MR), &alrm->time);
- return 0;
- }
-
--static inline int rtc_set_alarm(struct rtc_wkalrm *alrm)
-+static inline int integrator_rtc_set_alarm(struct rtc_wkalrm *alrm)
- {
- unsigned long time;
- int ret;
-@@ -62,7 +62,7 @@ static inline int rtc_set_alarm(struct r
- return ret;
- }
-
--static int rtc_read_time(struct rtc_time *tm)
-+static int integrator_rtc_read_time(struct rtc_time *tm)
- {
- rtc_time_to_tm(readl(rtc_base + RTC_DR), tm);
- return 0;
-@@ -76,7 +76,7 @@ static int rtc_read_time(struct rtc_time
- * edge of the 1Hz clock, we must write the time one second
- * in advance.
- */
--static inline int rtc_set_time(struct rtc_time *tm)
-+static inline int integrator_rtc_set_time(struct rtc_time *tm)
- {
- unsigned long time;
- int ret;
-@@ -90,10 +90,10 @@ static inline int rtc_set_time(struct rt
-
- static struct rtc_ops rtc_ops = {
- .owner = THIS_MODULE,
-- .read_time = rtc_read_time,
-- .set_time = rtc_set_time,
-- .read_alarm = rtc_read_alarm,
-- .set_alarm = rtc_set_alarm,
-+ .read_time = integrator_rtc_read_time,
-+ .set_time = integrator_rtc_set_time,
-+ .read_alarm = integrator_rtc_read_alarm,
-+ .set_alarm = integrator_rtc_set_alarm,
- };
-
- static irqreturn_t arm_rtc_interrupt(int irq, void *dev_id,
---- linux-ixp4xx.orig/arch/mips/ddb5xxx/common/rtc_ds1386.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/ddb5xxx/common/rtc_ds1386.c 2006-03-08 01:59:26.000000000 +0100
-@@ -165,6 +165,6 @@ rtc_ds1386_init(unsigned long base)
- WRITE_RTC(0xB, byte);
-
- /* set the function pointers */
-- rtc_get_time = rtc_ds1386_get_time;
-- rtc_set_time = rtc_ds1386_set_time;
-+ rtc_mips_get_time = rtc_ds1386_get_time;
-+ rtc_mips_set_time = rtc_ds1386_set_time;
- }
---- linux-ixp4xx.orig/arch/mips/dec/time.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/dec/time.c 2006-03-08 01:59:26.000000000 +0100
-@@ -193,8 +193,8 @@ static void dec_ioasic_hpt_init(unsigned
-
- void __init dec_time_init(void)
- {
-- rtc_get_time = dec_rtc_get_time;
-- rtc_set_mmss = dec_rtc_set_mmss;
-+ rtc_mips_get_time = dec_rtc_get_time;
-+ rtc_mips_set_mmss = dec_rtc_set_mmss;
-
- mips_timer_state = dec_timer_state;
- mips_timer_ack = dec_timer_ack;
---- linux-ixp4xx.orig/arch/mips/ite-boards/generic/time.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/ite-boards/generic/time.c 2006-03-08 01:59:26.000000000 +0100
-@@ -227,8 +227,8 @@ void __init it8172_time_init(void)
-
- local_irq_restore(flags);
-
-- rtc_get_time = it8172_rtc_get_time;
-- rtc_set_time = it8172_rtc_set_time;
-+ rtc_mips_get_time = it8172_rtc_get_time;
-+ rtc_mips_set_time = it8172_rtc_set_time;
- }
-
- #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5)
---- linux-ixp4xx.orig/arch/mips/jmr3927/common/rtc_ds1742.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/jmr3927/common/rtc_ds1742.c 2006-03-08 01:59:26.000000000 +0100
-@@ -159,8 +159,8 @@ rtc_ds1742_init(unsigned long base)
- db_assert((rtc_base & 0xe0000000) == KSEG1);
-
- /* set the function pointers */
-- rtc_get_time = rtc_ds1742_get_time;
-- rtc_set_time = rtc_ds1742_set_time;
-+ rtc_mips_get_time = rtc_ds1742_get_time;
-+ rtc_mips_set_time = rtc_ds1742_set_time;
-
- /* clear oscillator stop bit */
- CMOS_WRITE(RTC_READ, RTC_CONTROL);
---- linux-ixp4xx.orig/arch/mips/kernel/time.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/kernel/time.c 2006-03-08 01:59:26.000000000 +0100
-@@ -65,9 +65,9 @@ static int null_rtc_set_time(unsigned lo
- return 0;
- }
-
--unsigned long (*rtc_get_time)(void) = null_rtc_get_time;
--int (*rtc_set_time)(unsigned long) = null_rtc_set_time;
--int (*rtc_set_mmss)(unsigned long);
-+unsigned long (*rtc_mips_get_time)(void) = null_rtc_get_time;
-+int (*rtc_mips_set_time)(unsigned long) = null_rtc_set_time;
-+int (*rtc_mips_set_mmss)(unsigned long);
-
-
- /* usecs per counter cycle, shifted to left by 32 bits */
-@@ -438,7 +438,7 @@ irqreturn_t timer_interrupt(int irq, voi
-
- /*
- * If we have an externally synchronized Linux clock, then update
-- * CMOS clock accordingly every ~11 minutes. rtc_set_time() has to be
-+ * CMOS clock accordingly every ~11 minutes. rtc_mips_set_time() has to be
- * called as close as possible to 500 ms before the new second starts.
- */
- write_seqlock(&xtime_lock);
-@@ -446,7 +446,7 @@ irqreturn_t timer_interrupt(int irq, voi
- xtime.tv_sec > last_rtc_update + 660 &&
- (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
- (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
-- if (rtc_set_mmss(xtime.tv_sec) == 0) {
-+ if (rtc_mips_set_mmss(xtime.tv_sec) == 0) {
- last_rtc_update = xtime.tv_sec;
- } else {
- /* do it again in 60 s */
-@@ -563,7 +563,7 @@ asmlinkage void ll_local_timer_interrupt
- * b) (optional) calibrate and set the mips_hpt_frequency
- * (only needed if you intended to use fixed_rate_gettimeoffset
- * or use cpu counter as timer interrupt source)
-- * 2) setup xtime based on rtc_get_time().
-+ * 2) setup xtime based on rtc_mips_get_time().
- * 3) choose a appropriate gettimeoffset routine.
- * 4) calculate a couple of cached variables for later usage
- * 5) board_timer_setup() -
-@@ -631,10 +631,10 @@ void __init time_init(void)
- if (board_time_init)
- board_time_init();
-
-- if (!rtc_set_mmss)
-- rtc_set_mmss = rtc_set_time;
-+ if (!rtc_mips_set_mmss)
-+ rtc_mips_set_mmss = rtc_mips_set_time;
-
-- xtime.tv_sec = rtc_get_time();
-+ xtime.tv_sec = rtc_mips_get_time();
- xtime.tv_nsec = 0;
-
- set_normalized_timespec(&wall_to_monotonic,
-@@ -770,8 +770,8 @@ void to_tm(unsigned long tim, struct rtc
-
- EXPORT_SYMBOL(rtc_lock);
- EXPORT_SYMBOL(to_tm);
--EXPORT_SYMBOL(rtc_set_time);
--EXPORT_SYMBOL(rtc_get_time);
-+EXPORT_SYMBOL(rtc_mips_set_time);
-+EXPORT_SYMBOL(rtc_mips_get_time);
-
- unsigned long long sched_clock(void)
- {
---- linux-ixp4xx.orig/arch/mips/lasat/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/lasat/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -174,8 +174,8 @@ void __init plat_setup(void)
-
- #ifdef CONFIG_DS1603
- ds1603 = &ds_defs[mips_machtype];
-- rtc_get_time = ds1603_read;
-- rtc_set_time = ds1603_set;
-+ rtc_mips_get_time = ds1603_read;
-+ rtc_mips_set_time = ds1603_set;
- #endif
-
- #ifdef DYNAMIC_SERIAL_INIT
---- linux-ixp4xx.orig/arch/mips/mips-boards/atlas/atlas_setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/mips-boards/atlas/atlas_setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -65,7 +65,7 @@ void __init plat_setup(void)
-
- board_time_init = mips_time_init;
- board_timer_setup = mips_timer_setup;
-- rtc_get_time = mips_rtc_get_time;
-+ rtc_mips_get_time = mips_rtc_get_time;
- }
-
- static void __init serial_init(void)
---- linux-ixp4xx.orig/arch/mips/mips-boards/malta/malta_setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/mips-boards/malta/malta_setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -225,5 +225,5 @@ void __init plat_setup(void)
-
- board_time_init = mips_time_init;
- board_timer_setup = mips_timer_setup;
-- rtc_get_time = mips_rtc_get_time;
-+ rtc_mips_get_time = mips_rtc_get_time;
- }
---- linux-ixp4xx.orig/arch/mips/momentum/jaguar_atx/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/momentum/jaguar_atx/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -228,8 +228,8 @@ void momenco_time_init(void)
- mips_hpt_frequency = cpu_clock / 2;
- board_timer_setup = momenco_timer_setup;
-
-- rtc_get_time = m48t37y_get_time;
-- rtc_set_time = m48t37y_set_time;
-+ rtc_mips_get_time = m48t37y_get_time;
-+ rtc_mips_set_time = m48t37y_set_time;
- }
-
- static struct resource mv_pci_io_mem0_resource = {
---- linux-ixp4xx.orig/arch/mips/momentum/ocelot_3/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/momentum/ocelot_3/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -215,8 +215,8 @@ void momenco_time_init(void)
- mips_hpt_frequency = cpu_clock / 2;
- board_timer_setup = momenco_timer_setup;
-
-- rtc_get_time = m48t37y_get_time;
-- rtc_set_time = m48t37y_set_time;
-+ rtc_mips_get_time = m48t37y_get_time;
-+ rtc_mips_set_time = m48t37y_set_time;
- }
-
- /*
---- linux-ixp4xx.orig/arch/mips/momentum/ocelot_c/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/momentum/ocelot_c/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -226,8 +226,8 @@ void momenco_time_init(void)
- printk("momenco_time_init cpu_clock=%d\n", cpu_clock);
- board_timer_setup = momenco_timer_setup;
-
-- rtc_get_time = m48t37y_get_time;
-- rtc_set_time = m48t37y_set_time;
-+ rtc_mips_get_time = m48t37y_get_time;
-+ rtc_mips_set_time = m48t37y_set_time;
- }
-
- void __init plat_setup(void)
---- linux-ixp4xx.orig/arch/mips/pmc-sierra/yosemite/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/pmc-sierra/yosemite/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -198,8 +198,8 @@ static void __init py_rtc_setup(void)
- if (!m48t37_base)
- printk(KERN_ERR "Mapping the RTC failed\n");
-
-- rtc_get_time = m48t37y_get_time;
-- rtc_set_time = m48t37y_set_time;
-+ rtc_mips_get_time = m48t37y_get_time;
-+ rtc_mips_set_time = m48t37y_set_time;
-
- write_seqlock(&xtime_lock);
- xtime.tv_sec = m48t37y_get_time();
---- linux-ixp4xx.orig/arch/mips/sgi-ip22/ip22-time.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/sgi-ip22/ip22-time.c 2006-03-08 01:59:26.000000000 +0100
-@@ -212,8 +212,8 @@ static void indy_timer_setup(struct irqa
- void __init ip22_time_init(void)
- {
- /* setup hookup functions */
-- rtc_get_time = indy_rtc_get_time;
-- rtc_set_time = indy_rtc_set_time;
-+ rtc_mips_get_time = indy_rtc_get_time;
-+ rtc_mips_set_time = indy_rtc_set_time;
-
- board_time_init = indy_time_init;
- board_timer_setup = indy_timer_setup;
---- linux-ixp4xx.orig/arch/mips/sgi-ip32/ip32-setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/sgi-ip32/ip32-setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -91,8 +91,8 @@ void __init plat_setup(void)
- {
- board_be_init = ip32_be_init;
-
-- rtc_get_time = mc146818_get_cmos_time;
-- rtc_set_mmss = mc146818_set_rtc_mmss;
-+ rtc_mips_get_time = mc146818_get_cmos_time;
-+ rtc_mips_set_mmss = mc146818_set_rtc_mmss;
-
- board_time_init = ip32_time_init;
- board_timer_setup = ip32_timer_setup;
---- linux-ixp4xx.orig/arch/mips/sibyte/swarm/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/sibyte/swarm/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -114,14 +114,14 @@ void __init plat_setup(void)
-
- if (xicor_probe()) {
- printk("swarm setup: Xicor 1241 RTC detected.\n");
-- rtc_get_time = xicor_get_time;
-- rtc_set_time = xicor_set_time;
-+ rtc_mips_get_time = xicor_get_time;
-+ rtc_mips_set_time = xicor_set_time;
- }
-
- if (m41t81_probe()) {
- printk("swarm setup: M41T81 RTC detected.\n");
-- rtc_get_time = m41t81_get_time;
-- rtc_set_time = m41t81_set_time;
-+ rtc_mips_get_time = m41t81_get_time;
-+ rtc_mips_set_time = m41t81_set_time;
- }
-
- printk("This kernel optimized for "
---- linux-ixp4xx.orig/arch/mips/sni/setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/sni/setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -164,8 +164,8 @@ static struct pci_controller sni_control
-
- static inline void sni_pcimt_time_init(void)
- {
-- rtc_get_time = mc146818_get_cmos_time;
-- rtc_set_time = mc146818_set_rtc_mmss;
-+ rtc_mips_get_time = mc146818_get_cmos_time;
-+ rtc_mips_set_time = mc146818_set_rtc_mmss;
- }
-
- void __init plat_setup(void)
---- linux-ixp4xx.orig/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c 2006-03-08 01:59:26.000000000 +0100
-@@ -1036,8 +1036,8 @@ toshiba_rbtx4927_time_init(void)
-
- #ifdef CONFIG_RTC_DS1742
-
-- rtc_get_time = rtc_ds1742_get_time;
-- rtc_set_time = rtc_ds1742_set_time;
-+ rtc_mips_get_time = rtc_ds1742_get_time;
-+ rtc_mips_set_time = rtc_ds1742_set_time;
-
- TOSHIBA_RBTX4927_SETUP_DPRINTK(TOSHIBA_RBTX4927_SETUP_TIME_INIT,
- ":rtc_ds1742_init()-\n");
---- linux-ixp4xx.orig/arch/mips/tx4938/common/rtc_rx5c348.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/mips/tx4938/common/rtc_rx5c348.c 2006-03-08 01:59:26.000000000 +0100
-@@ -197,6 +197,6 @@ rtc_rx5c348_init(int chipid)
- srtc_24h = 1;
-
- /* set the function pointers */
-- rtc_get_time = rtc_rx5c348_get_time;
-- rtc_set_time = rtc_rx5c348_set_time;
-+ rtc_mips_get_time = rtc_rx5c348_get_time;
-+ rtc_mips_set_time = rtc_rx5c348_set_time;
- }
---- linux-ixp4xx.orig/include/asm-mips/time.h 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/include/asm-mips/time.h 2006-03-08 01:59:26.000000000 +0100
-@@ -26,14 +26,14 @@ extern spinlock_t rtc_lock;
-
- /*
- * RTC ops. By default, they point to no-RTC functions.
-- * rtc_get_time - mktime(year, mon, day, hour, min, sec) in seconds.
-- * rtc_set_time - reverse the above translation and set time to RTC.
-- * rtc_set_mmss - similar to rtc_set_time, but only min and sec need
-+ * rtc_mips_get_time - mktime(year, mon, day, hour, min, sec) in seconds.
-+ * rtc_mips_set_time - reverse the above translation and set time to RTC.
-+ * rtc_mips_set_mmss - similar to rtc_set_time, but only min and sec need
- * to be set. Used by RTC sync-up.
- */
--extern unsigned long (*rtc_get_time)(void);
--extern int (*rtc_set_time)(unsigned long);
--extern int (*rtc_set_mmss)(unsigned long);
-+extern unsigned long (*rtc_mips_get_time)(void);
-+extern int (*rtc_mips_set_time)(unsigned long);
-+extern int (*rtc_mips_set_mmss)(unsigned long);
-
- /*
- * Timer interrupt functions.
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/class.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,145 @@
-+/*
-+ * RTC subsystem, base class
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * class skeleton from drivers/hwmon/hwmon.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/kdev_t.h>
-+#include <linux/idr.h>
-+
-+static DEFINE_IDR(rtc_idr);
-+static DEFINE_MUTEX(idr_lock);
-+struct class *rtc_class;
-+
-+static void rtc_device_release(struct class_device *class_dev)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+ mutex_lock(&idr_lock);
-+ idr_remove(&rtc_idr, rtc->id);
-+ mutex_unlock(&idr_lock);
-+ kfree(rtc);
-+}
-+
-+/**
-+ * rtc_device_register - register w/ RTC class
-+ * @dev: the device to register
-+ *
-+ * rtc_device_unregister() must be called when the class device is no
-+ * longer needed.
-+ *
-+ * Returns the pointer to the new struct class device.
-+ */
-+struct rtc_device *rtc_device_register(const char *name, struct device *dev,
-+ struct rtc_class_ops *ops,
-+ struct module *owner)
-+{
-+ struct rtc_device *rtc;
-+ int id, err;
-+
-+ if (idr_pre_get(&rtc_idr, GFP_KERNEL) == 0) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+
-+ mutex_lock(&idr_lock);
-+ err = idr_get_new(&rtc_idr, NULL, &id);
-+ mutex_unlock(&idr_lock);
-+
-+ if (err < 0)
-+ goto exit;
-+
-+ id = id & MAX_ID_MASK;
-+
-+ rtc = kzalloc(sizeof(struct rtc_device), GFP_KERNEL);
-+ if (rtc == NULL) {
-+ err = -ENOMEM;
-+ goto exit_idr;
-+ }
-+
-+ rtc->id = id;
-+ rtc->ops = ops;
-+ rtc->owner = owner;
-+ rtc->class_dev.dev = dev;
-+ rtc->class_dev.class = rtc_class;
-+ rtc->class_dev.release = rtc_device_release;
-+
-+ mutex_init(&rtc->ops_lock);
-+ spin_lock_init(&rtc->irq_lock);
-+ spin_lock_init(&rtc->irq_task_lock);
-+
-+ strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
-+ snprintf(rtc->class_dev.class_id, BUS_ID_SIZE, "rtc%d", id);
-+
-+ err = class_device_register(&rtc->class_dev);
-+ if (err)
-+ goto exit_kfree;
-+
-+ dev_info(dev, "rtc core: registered %s as %s\n",
-+ rtc->name, rtc->class_dev.class_id);
-+
-+ return rtc;
-+
-+exit_kfree:
-+ kfree(rtc);
-+
-+exit_idr:
-+ idr_remove(&rtc_idr, id);
-+
-+exit:
-+ return ERR_PTR(err);
-+}
-+EXPORT_SYMBOL_GPL(rtc_device_register);
-+
-+
-+/**
-+ * rtc_device_unregister - removes the previously registered RTC class device
-+ *
-+ * @rtc: the RTC class device to destroy
-+ */
-+void rtc_device_unregister(struct rtc_device *rtc)
-+{
-+ mutex_lock(&rtc->ops_lock);
-+ rtc->ops = NULL;
-+ mutex_unlock(&rtc->ops_lock);
-+ class_device_unregister(&rtc->class_dev);
-+}
-+EXPORT_SYMBOL_GPL(rtc_device_unregister);
-+
-+int rtc_interface_register(struct class_interface *intf)
-+{
-+ intf->class = rtc_class;
-+ return class_interface_register(intf);
-+}
-+EXPORT_SYMBOL_GPL(rtc_interface_register);
-+
-+static int __init rtc_init(void)
-+{
-+ rtc_class = class_create(THIS_MODULE, "rtc");
-+ if (IS_ERR(rtc_class)) {
-+ printk(KERN_ERR "%s: couldn't create class\n", __FILE__);
-+ return PTR_ERR(rtc_class);
-+ }
-+ return 0;
-+}
-+
-+static void __exit rtc_exit(void)
-+{
-+ class_destroy(rtc_class);
-+}
-+
-+module_init(rtc_init);
-+module_exit(rtc_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towerteh.it>");
-+MODULE_DESCRIPTION("RTC class support");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/interface.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,277 @@
-+/*
-+ * RTC subsystem, interface functions
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/rtc.h>
-+
-+int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ err = mutex_lock_interruptible(&rtc->ops_lock);
-+ if (err)
-+ return -EBUSY;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->read_time)
-+ err = -EINVAL;
-+ else {
-+ memset(tm, 0, sizeof(struct rtc_time));
-+ err = rtc->ops->read_time(class_dev->dev, tm);
-+ }
-+
-+ mutex_unlock(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_read_time);
-+
-+int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ err = rtc_valid_tm(tm);
-+ if (err != 0)
-+ return err;
-+
-+ err = mutex_lock_interruptible(&rtc->ops_lock);
-+ if (err)
-+ return -EBUSY;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->set_time)
-+ err = -EINVAL;
-+ else
-+ err = rtc->ops->set_time(class_dev->dev, tm);
-+
-+ mutex_unlock(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_set_time);
-+
-+int rtc_set_mmss(struct class_device *class_dev, unsigned long secs)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ err = mutex_lock_interruptible(&rtc->ops_lock);
-+ if (err)
-+ return -EBUSY;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (rtc->ops->set_mmss)
-+ err = rtc->ops->set_mmss(class_dev->dev, secs);
-+ else if (rtc->ops->read_time && rtc->ops->set_time) {
-+ struct rtc_time new, old;
-+
-+ err = rtc->ops->read_time(class_dev->dev, &old);
-+ if (err == 0) {
-+ rtc_time_to_tm(secs, &new);
-+
-+ /*
-+ * avoid writing when we're going to change the day of
-+ * the month. We will retry in the next minute. This
-+ * basically means that if the RTC must not drift
-+ * by more than 1 minute in 11 minutes.
-+ */
-+ if (!((old.tm_hour == 23 && old.tm_min == 59) ||
-+ (new.tm_hour == 23 && new.tm_min == 59)))
-+ err = rtc->ops->set_time(class_dev->dev, &new);
-+ }
-+ }
-+ else
-+ err = -EINVAL;
-+
-+ mutex_unlock(&rtc->ops_lock);
-+
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_set_mmss);
-+
-+int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ err = mutex_lock_interruptible(&rtc->ops_lock);
-+ if (err)
-+ return -EBUSY;
-+
-+ if (rtc->ops == NULL)
-+ err = -ENODEV;
-+ else if (!rtc->ops->read_alarm)
-+ err = -EINVAL;
-+ else {
-+ memset(alarm, 0, sizeof(struct rtc_wkalrm));
-+ err = rtc->ops->read_alarm(class_dev->dev, alarm);
-+ }
-+
-+ mutex_unlock(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_read_alarm);
-+
-+int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm)
-+{
-+ int err;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ err = mutex_lock_interruptible(&rtc->ops_lock);
-+ if (err)
-+ return -EBUSY;
-+
-+ if (!rtc->ops)
-+ err = -ENODEV;
-+ else if (!rtc->ops->set_alarm)
-+ err = -EINVAL;
-+ else
-+ err = rtc->ops->set_alarm(class_dev->dev, alarm);
-+
-+ mutex_unlock(&rtc->ops_lock);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_set_alarm);
-+
-+void rtc_update_irq(struct class_device *class_dev,
-+ unsigned long num, unsigned long events)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock(&rtc->irq_lock);
-+ rtc->irq_data = (rtc->irq_data + (num << 8)) | events;
-+ spin_unlock(&rtc->irq_lock);
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task)
-+ rtc->irq_task->func(rtc->irq_task->private_data);
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ wake_up_interruptible(&rtc->irq_queue);
-+ kill_fasync(&rtc->async_queue, SIGIO, POLL_IN);
-+}
-+EXPORT_SYMBOL_GPL(rtc_update_irq);
-+
-+struct class_device *rtc_class_open(char *name)
-+{
-+ struct class_device *class_dev = NULL,
-+ *class_dev_tmp;
-+
-+ down(&rtc_class->sem);
-+ list_for_each_entry(class_dev_tmp, &rtc_class->children, node) {
-+ if (strncmp(class_dev_tmp->class_id, name, BUS_ID_SIZE) == 0) {
-+ class_dev = class_dev_tmp;
-+ break;
-+ }
-+ }
-+
-+ if (class_dev) {
-+ if (!try_module_get(to_rtc_device(class_dev)->owner))
-+ class_dev = NULL;
-+ }
-+ up(&rtc_class->sem);
-+
-+ return class_dev;
-+}
-+EXPORT_SYMBOL_GPL(rtc_class_open);
-+
-+void rtc_class_close(struct class_device *class_dev)
-+{
-+ module_put(to_rtc_device(class_dev)->owner);
-+}
-+EXPORT_SYMBOL_GPL(rtc_class_close);
-+
-+int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task)
-+{
-+ int retval = -EBUSY;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if (task == NULL || task->func == NULL)
-+ return -EINVAL;
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task == NULL) {
-+ rtc->irq_task = task;
-+ retval = 0;
-+ }
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ return retval;
-+}
-+EXPORT_SYMBOL_GPL(rtc_irq_register);
-+
-+void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task == task)
-+ rtc->irq_task = NULL;
-+ spin_unlock(&rtc->irq_task_lock);
-+}
-+EXPORT_SYMBOL_GPL(rtc_irq_unregister);
-+
-+int rtc_irq_set_state(struct class_device *class_dev, struct rtc_task *task, int enabled)
-+{
-+ int err = 0;
-+ unsigned long flags;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ spin_lock_irqsave(&rtc->irq_task_lock, flags);
-+ if (rtc->irq_task != task)
-+ err = -ENXIO;
-+ spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
-+
-+ if (err == 0)
-+ err = rtc->ops->irq_set_state(class_dev->dev, enabled);
-+
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(rtc_irq_set_state);
-+
-+int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int freq)
-+{
-+ int err = 0, tmp = 0;
-+ unsigned long flags;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ /* allowed range is 2-8192 */
-+ if (freq < 2 || freq > 8192)
-+ return -EINVAL;
-+/*
-+ FIXME: this does not belong here, will move where appropriate
-+ at a later stage. It cannot hurt right now, trust me :)
-+ if ((freq > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE)))
-+ return -EACCES;
-+*/
-+ /* check if freq is a power of 2 */
-+ while (freq > (1 << tmp))
-+ tmp++;
-+
-+ if (freq != (1 << tmp))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&rtc->irq_task_lock, flags);
-+ if (rtc->irq_task != task)
-+ err = -ENXIO;
-+ spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
-+
-+ if (err == 0) {
-+ err = rtc->ops->irq_set_freq(class_dev->dev, freq);
-+ if (err == 0)
-+ rtc->irq_freq = freq;
-+ }
-+ return err;
-+}
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/hctosys.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,69 @@
-+/*
-+ * RTC subsystem, initialize system time on startup
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/rtc.h>
-+
-+/* IMPORTANT: the RTC only stores whole seconds. It is arbitrary
-+ * whether it stores the most close value or the value with partial
-+ * seconds truncated. However, it is important that we use it to store
-+ * the truncated value. This is because otherwise it is necessary,
-+ * in an rtc sync function, to read both xtime.tv_sec and
-+ * xtime.tv_nsec. On some processors (i.e. ARM), an atomic read
-+ * of >32bits is not possible. So storing the most close value would
-+ * slow down the sync API. So here we have the truncated value and
-+ * the best guess is to add 0.5s.
-+ */
-+
-+static int __init rtc_hctosys(void)
-+{
-+ int err;
-+ struct rtc_time tm;
-+ struct class_device *class_dev = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
-+
-+ if (class_dev == NULL) {
-+ printk("%s: unable to open rtc device (%s)\n",
-+ __FILE__, CONFIG_RTC_HCTOSYS_DEVICE);
-+ return -ENODEV;
-+ }
-+
-+ err = rtc_read_time(class_dev, &tm);
-+ if (err == 0) {
-+ err = rtc_valid_tm(&tm);
-+ if (err == 0) {
-+ struct timespec tv;
-+
-+ tv.tv_nsec = NSEC_PER_SEC >> 1;
-+
-+ rtc_tm_to_time(&tm, &tv.tv_sec);
-+
-+ do_settimeofday(&tv);
-+
-+ dev_info(class_dev->dev,
-+ "setting the system clock to "
-+ "%d-%02d-%02d %02d:%02d:%02d (%u)\n",
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
-+ tm.tm_hour, tm.tm_min, tm.tm_sec,
-+ (unsigned int) tv.tv_sec);
-+ }
-+ else
-+ dev_err(class_dev->dev,
-+ "hctosys: invalid date/time\n");
-+ }
-+ else
-+ dev_err(class_dev->dev,
-+ "hctosys: unable to read the hardware clock\n");
-+
-+ rtc_class_close(class_dev);
-+
-+ return 0;
-+}
-+
-+late_initcall(rtc_hctosys);
---- linux-ixp4xx.orig/CREDITS 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/CREDITS 2006-03-08 01:59:26.000000000 +0100
-@@ -3741,10 +3741,11 @@ D: Mylex DAC960 PCI RAID driver
- D: Miscellaneous kernel fixes
-
- N: Alessandro Zummo
--E: azummo@ita.flashnet.it
--W: http://freepage.logicom.it/azummo/
-+E: a.zummo@towertech.it
- D: CMI8330 support is sb_card.c
- D: ISAPnP fixes in sb_card.c
-+D: ZyXEL omni.net lcd plus driver
-+D: RTC subsystem
- S: Italy
-
- N: Marc Zyngier
---- linux-ixp4xx.orig/MAINTAINERS 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/MAINTAINERS 2006-03-08 01:59:26.000000000 +0100
-@@ -2193,6 +2193,12 @@ M: p_gortmaker@yahoo.com
- L: linux-kernel@vger.kernel.org
- S: Maintained
-
-+REAL TIME CLOCK (RTC) SUBSYSTEM
-+P: Alessandro Zummo
-+M: a.zummo@towertech.it
-+L: linux-kernel@vger.kernel.org
-+S: Maintained
-+
- REISERFS FILE SYSTEM
- P: Hans Reiser
- M: reiserfs-dev@namesys.com
---- linux-ixp4xx.orig/drivers/i2c/chips/x1205.c 2006-03-08 01:59:09.000000000 +0100
-+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
-@@ -1,698 +0,0 @@
--/*
-- * x1205.c - An i2c driver for the Xicor X1205 RTC
-- * Copyright 2004 Karen Spearel
-- * Copyright 2005 Alessandro Zummo
-- *
-- * please send all reports to:
-- * kas11 at tampabay dot rr dot com
-- * a dot zummo at towertech dot it
-- *
-- * based on the other drivers in this same directory.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- */
--
--#include <linux/module.h>
--#include <linux/init.h>
--#include <linux/slab.h>
--#include <linux/i2c.h>
--#include <linux/string.h>
--#include <linux/bcd.h>
--#include <linux/rtc.h>
--#include <linux/list.h>
--
--#include <linux/x1205.h>
--
--#define DRV_VERSION "0.9.9"
--
--/* Addresses to scan: none. This chip is located at
-- * 0x6f and uses a two bytes register addressing.
-- * Two bytes need to be written to read a single register,
-- * while most other chips just require one and take the second
-- * one as the data to be written. To prevent corrupting
-- * unknown chips, the user must explicitely set the probe parameter.
-- */
--
--static unsigned short normal_i2c[] = { I2C_CLIENT_END };
--
--/* Insmod parameters */
--I2C_CLIENT_INSMOD;
--I2C_CLIENT_MODULE_PARM(hctosys,
-- "Set the system time from the hardware clock upon initialization");
--
--/* offsets into CCR area */
--
--#define CCR_SEC 0
--#define CCR_MIN 1
--#define CCR_HOUR 2
--#define CCR_MDAY 3
--#define CCR_MONTH 4
--#define CCR_YEAR 5
--#define CCR_WDAY 6
--#define CCR_Y2K 7
--
--#define X1205_REG_SR 0x3F /* status register */
--#define X1205_REG_Y2K 0x37
--#define X1205_REG_DW 0x36
--#define X1205_REG_YR 0x35
--#define X1205_REG_MO 0x34
--#define X1205_REG_DT 0x33
--#define X1205_REG_HR 0x32
--#define X1205_REG_MN 0x31
--#define X1205_REG_SC 0x30
--#define X1205_REG_DTR 0x13
--#define X1205_REG_ATR 0x12
--#define X1205_REG_INT 0x11
--#define X1205_REG_0 0x10
--#define X1205_REG_Y2K1 0x0F
--#define X1205_REG_DWA1 0x0E
--#define X1205_REG_YRA1 0x0D
--#define X1205_REG_MOA1 0x0C
--#define X1205_REG_DTA1 0x0B
--#define X1205_REG_HRA1 0x0A
--#define X1205_REG_MNA1 0x09
--#define X1205_REG_SCA1 0x08
--#define X1205_REG_Y2K0 0x07
--#define X1205_REG_DWA0 0x06
--#define X1205_REG_YRA0 0x05
--#define X1205_REG_MOA0 0x04
--#define X1205_REG_DTA0 0x03
--#define X1205_REG_HRA0 0x02
--#define X1205_REG_MNA0 0x01
--#define X1205_REG_SCA0 0x00
--
--#define X1205_CCR_BASE 0x30 /* Base address of CCR */
--#define X1205_ALM0_BASE 0x00 /* Base address of ALARM0 */
--
--#define X1205_SR_RTCF 0x01 /* Clock failure */
--#define X1205_SR_WEL 0x02 /* Write Enable Latch */
--#define X1205_SR_RWEL 0x04 /* Register Write Enable */
--
--#define X1205_DTR_DTR0 0x01
--#define X1205_DTR_DTR1 0x02
--#define X1205_DTR_DTR2 0x04
--
--#define X1205_HR_MIL 0x80 /* Set in ccr.hour for 24 hr mode */
--
--/* Prototypes */
--static int x1205_attach(struct i2c_adapter *adapter);
--static int x1205_detach(struct i2c_client *client);
--static int x1205_probe(struct i2c_adapter *adapter, int address, int kind);
--static int x1205_command(struct i2c_client *client, unsigned int cmd,
-- void *arg);
--
--static struct i2c_driver x1205_driver = {
-- .driver = {
-- .name = "x1205",
-- },
-- .attach_adapter = &x1205_attach,
-- .detach_client = &x1205_detach,
--};
--
--struct x1205_data {
-- struct i2c_client client;
-- struct list_head list;
-- unsigned int epoch;
--};
--
--static const unsigned char days_in_mo[] =
-- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
--
--static LIST_HEAD(x1205_clients);
--
--/* Workaround until the I2C subsytem will allow to send
-- * commands to a specific client. This function will send the command
-- * to the first client.
-- */
--int x1205_do_command(unsigned int cmd, void *arg)
--{
-- struct list_head *walk;
-- struct list_head *tmp;
-- struct x1205_data *data;
--
-- list_for_each_safe(walk, tmp, &x1205_clients) {
-- data = list_entry(walk, struct x1205_data, list);
-- return x1205_command(&data->client, cmd, arg);
-- }
--
-- return -ENODEV;
--}
--
--#define is_leap(year) \
-- ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
--
--/* make sure the rtc_time values are in bounds */
--static int x1205_validate_tm(struct rtc_time *tm)
--{
-- int year = tm->tm_year + 1900;
--
-- if ((tm->tm_year < 70) || (tm->tm_year > 255))
-- return -EINVAL;
--
-- if ((tm->tm_mon > 11) || (tm->tm_mday == 0))
-- return -EINVAL;
--
-- if (tm->tm_mday > days_in_mo[tm->tm_mon]
-- + ((tm->tm_mon == 1) && is_leap(year)))
-- return -EINVAL;
--
-- if ((tm->tm_hour >= 24) || (tm->tm_min >= 60) || (tm->tm_sec >= 60))
-- return -EINVAL;
--
-- return 0;
--}
--
--/*
-- * In the routines that deal directly with the x1205 hardware, we use
-- * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
-- * Epoch is initialized as 2000. Time is set to UTC.
-- */
--static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm,
-- u8 reg_base)
--{
-- unsigned char dt_addr[2] = { 0, reg_base };
-- static unsigned char sr_addr[2] = { 0, X1205_REG_SR };
--
-- unsigned char buf[8], sr;
--
-- struct i2c_msg msgs[] = {
-- { client->addr, 0, 2, sr_addr }, /* setup read ptr */
-- { client->addr, I2C_M_RD, 1, &sr }, /* read status */
-- { client->addr, 0, 2, dt_addr }, /* setup read ptr */
-- { client->addr, I2C_M_RD, 8, buf }, /* read date */
-- };
--
-- struct x1205_data *data = i2c_get_clientdata(client);
--
-- /* read status register */
-- if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-- dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-- return -EIO;
-- }
--
-- /* check for battery failure */
-- if (sr & X1205_SR_RTCF) {
-- dev_warn(&client->dev,
-- "Clock had a power failure, you must set the date.\n");
-- return -EINVAL;
-- }
--
-- /* read date registers */
-- if ((i2c_transfer(client->adapter, &msgs[2], 2)) != 2) {
-- dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-- return -EIO;
-- }
--
-- dev_dbg(&client->dev,
-- "%s: raw read data - sec=%02x, min=%02x, hr=%02x, "
-- "mday=%02x, mon=%02x, year=%02x, wday=%02x, y2k=%02x\n",
-- __FUNCTION__,
-- buf[0], buf[1], buf[2], buf[3],
-- buf[4], buf[5], buf[6], buf[7]);
--
-- tm->tm_sec = BCD2BIN(buf[CCR_SEC]);
-- tm->tm_min = BCD2BIN(buf[CCR_MIN]);
-- tm->tm_hour = BCD2BIN(buf[CCR_HOUR] & 0x3F); /* hr is 0-23 */
-- tm->tm_mday = BCD2BIN(buf[CCR_MDAY]);
-- tm->tm_mon = BCD2BIN(buf[CCR_MONTH]);
-- data->epoch = BCD2BIN(buf[CCR_Y2K]) * 100;
-- tm->tm_year = BCD2BIN(buf[CCR_YEAR]) + data->epoch - 1900;
-- tm->tm_wday = buf[CCR_WDAY];
--
-- dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-- "mday=%d, mon=%d, year=%d, wday=%d\n",
-- __FUNCTION__,
-- tm->tm_sec, tm->tm_min, tm->tm_hour,
-- tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
--
-- return 0;
--}
--
--static int x1205_set_datetime(struct i2c_client *client, struct rtc_time *tm,
-- int datetoo, u8 reg_base)
--{
-- int i, err, xfer;
--
-- unsigned char buf[8];
--
-- static const unsigned char wel[3] = { 0, X1205_REG_SR,
-- X1205_SR_WEL };
--
-- static const unsigned char rwel[3] = { 0, X1205_REG_SR,
-- X1205_SR_WEL | X1205_SR_RWEL };
--
-- static const unsigned char diswe[3] = { 0, X1205_REG_SR, 0 };
--
-- struct x1205_data *data = i2c_get_clientdata(client);
--
-- /* check if all values in the tm struct are correct */
-- if ((err = x1205_validate_tm(tm)) < 0)
-- return err;
--
-- dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, "
-- "mday=%d, mon=%d, year=%d, wday=%d\n",
-- __FUNCTION__,
-- tm->tm_sec, tm->tm_min, tm->tm_hour,
-- tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
--
-- buf[CCR_SEC] = BIN2BCD(tm->tm_sec);
-- buf[CCR_MIN] = BIN2BCD(tm->tm_min);
--
-- /* set hour and 24hr bit */
-- buf[CCR_HOUR] = BIN2BCD(tm->tm_hour) | X1205_HR_MIL;
--
-- /* should we also set the date? */
-- if (datetoo) {
-- buf[CCR_MDAY] = BIN2BCD(tm->tm_mday);
--
-- /* month, 0 - 11 */
-- buf[CCR_MONTH] = BIN2BCD(tm->tm_mon);
--
-- /* year, since 1900 */
-- buf[CCR_YEAR] = BIN2BCD(tm->tm_year + 1900 - data->epoch);
-- buf[CCR_WDAY] = tm->tm_wday & 0x07;
-- buf[CCR_Y2K] = BIN2BCD(data->epoch / 100);
-- }
--
-- /* this sequence is required to unlock the chip */
-- xfer = i2c_master_send(client, wel, 3);
-- if (xfer != 3) {
-- dev_err(&client->dev, "%s: wel - %d\n", __FUNCTION__, xfer);
-- return -EIO;
-- }
--
-- xfer = i2c_master_send(client, rwel, 3);
-- if (xfer != 3) {
-- dev_err(&client->dev, "%s: rwel - %d\n", __FUNCTION__, xfer);
-- return -EIO;
-- }
--
-- /* write register's data */
-- for (i = 0; i < (datetoo ? 8 : 3); i++) {
-- unsigned char rdata[3] = { 0, reg_base + i, buf[i] };
--
-- xfer = i2c_master_send(client, rdata, 3);
-- if (xfer != 3) {
-- dev_err(&client->dev,
-- "%s: xfer=%d addr=%02x, data=%02x\n",
-- __FUNCTION__,
-- xfer, rdata[1], rdata[2]);
-- return -EIO;
-- }
-- };
--
-- /* disable further writes */
-- xfer = i2c_master_send(client, diswe, 3);
-- if (xfer != 3) {
-- dev_err(&client->dev, "%s: diswe - %d\n", __FUNCTION__, xfer);
-- return -EIO;
-- }
--
-- return 0;
--}
--
--static int x1205_get_dtrim(struct i2c_client *client, int *trim)
--{
-- unsigned char dtr;
-- static unsigned char dtr_addr[2] = { 0, X1205_REG_DTR };
--
-- struct i2c_msg msgs[] = {
-- { client->addr, 0, 2, dtr_addr }, /* setup read ptr */
-- { client->addr, I2C_M_RD, 1, &dtr }, /* read dtr */
-- };
--
-- /* read dtr register */
-- if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-- dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-- return -EIO;
-- }
--
-- dev_dbg(&client->dev, "%s: raw dtr=%x\n", __FUNCTION__, dtr);
--
-- *trim = 0;
--
-- if (dtr & X1205_DTR_DTR0)
-- *trim += 20;
--
-- if (dtr & X1205_DTR_DTR1)
-- *trim += 10;
--
-- if (dtr & X1205_DTR_DTR2)
-- *trim = -*trim;
--
-- return 0;
--}
--
--static int x1205_get_atrim(struct i2c_client *client, int *trim)
--{
-- s8 atr;
-- static unsigned char atr_addr[2] = { 0, X1205_REG_ATR };
--
-- struct i2c_msg msgs[] = {
-- { client->addr, 0, 2, atr_addr }, /* setup read ptr */
-- { client->addr, I2C_M_RD, 1, &atr }, /* read atr */
-- };
--
-- /* read atr register */
-- if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-- dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-- return -EIO;
-- }
--
-- dev_dbg(&client->dev, "%s: raw atr=%x\n", __FUNCTION__, atr);
--
-- /* atr is a two's complement value on 6 bits,
-- * perform sign extension. The formula is
-- * Catr = (atr * 0.25pF) + 11.00pF.
-- */
-- if (atr & 0x20)
-- atr |= 0xC0;
--
-- dev_dbg(&client->dev, "%s: raw atr=%x (%d)\n", __FUNCTION__, atr, atr);
--
-- *trim = (atr * 250) + 11000;
--
-- dev_dbg(&client->dev, "%s: real=%d\n", __FUNCTION__, *trim);
--
-- return 0;
--}
--
--static int x1205_hctosys(struct i2c_client *client)
--{
-- int err;
--
-- struct rtc_time tm;
-- struct timespec tv;
--
-- err = x1205_command(client, X1205_CMD_GETDATETIME, &tm);
--
-- if (err) {
-- dev_err(&client->dev,
-- "Unable to set the system clock\n");
-- return err;
-- }
--
-- /* IMPORTANT: the RTC only stores whole seconds. It is arbitrary
-- * whether it stores the most close value or the value with partial
-- * seconds truncated. However, it is important that we use it to store
-- * the truncated value. This is because otherwise it is necessary,
-- * in an rtc sync function, to read both xtime.tv_sec and
-- * xtime.tv_nsec. On some processors (i.e. ARM), an atomic read
-- * of >32bits is not possible. So storing the most close value would
-- * slow down the sync API. So here we have the truncated value and
-- * the best guess is to add 0.5s.
-- */
--
-- tv.tv_nsec = NSEC_PER_SEC >> 1;
--
-- /* WARNING: this is not the C library 'mktime' call, it is a built in
-- * inline function from include/linux/time.h. It expects (requires)
-- * the month to be in the range 1-12
-- */
--
-- tv.tv_sec = mktime(tm.tm_year + 1900, tm.tm_mon + 1,
-- tm.tm_mday, tm.tm_hour,
-- tm.tm_min, tm.tm_sec);
--
-- do_settimeofday(&tv);
--
-- dev_info(&client->dev,
-- "setting the system clock to %d-%d-%d %d:%d:%d\n",
-- tm.tm_year + 1900, tm.tm_mon + 1,
-- tm.tm_mday, tm.tm_hour, tm.tm_min,
-- tm.tm_sec);
--
-- return 0;
--}
--
--struct x1205_limit
--{
-- unsigned char reg;
-- unsigned char mask;
-- unsigned char min;
-- unsigned char max;
--};
--
--static int x1205_validate_client(struct i2c_client *client)
--{
-- int i, xfer;
--
-- /* Probe array. We will read the register at the specified
-- * address and check if the given bits are zero.
-- */
-- static const unsigned char probe_zero_pattern[] = {
-- /* register, mask */
-- X1205_REG_SR, 0x18,
-- X1205_REG_DTR, 0xF8,
-- X1205_REG_ATR, 0xC0,
-- X1205_REG_INT, 0x18,
-- X1205_REG_0, 0xFF,
-- };
--
-- static const struct x1205_limit probe_limits_pattern[] = {
-- /* register, mask, min, max */
-- { X1205_REG_Y2K, 0xFF, 19, 20 },
-- { X1205_REG_DW, 0xFF, 0, 6 },
-- { X1205_REG_YR, 0xFF, 0, 99 },
-- { X1205_REG_MO, 0xFF, 0, 12 },
-- { X1205_REG_DT, 0xFF, 0, 31 },
-- { X1205_REG_HR, 0x7F, 0, 23 },
-- { X1205_REG_MN, 0xFF, 0, 59 },
-- { X1205_REG_SC, 0xFF, 0, 59 },
-- { X1205_REG_Y2K1, 0xFF, 19, 20 },
-- { X1205_REG_Y2K0, 0xFF, 19, 20 },
-- };
--
-- /* check that registers have bits a 0 where expected */
-- for (i = 0; i < ARRAY_SIZE(probe_zero_pattern); i += 2) {
-- unsigned char buf;
--
-- unsigned char addr[2] = { 0, probe_zero_pattern[i] };
--
-- struct i2c_msg msgs[2] = {
-- { client->addr, 0, 2, addr },
-- { client->addr, I2C_M_RD, 1, &buf },
-- };
--
-- xfer = i2c_transfer(client->adapter, msgs, 2);
-- if (xfer != 2) {
-- dev_err(&client->adapter->dev,
-- "%s: could not read register %x\n",
-- __FUNCTION__, addr[1]);
--
-- return -EIO;
-- }
--
-- if ((buf & probe_zero_pattern[i+1]) != 0) {
-- dev_err(&client->adapter->dev,
-- "%s: register=%02x, zero pattern=%d, value=%x\n",
-- __FUNCTION__, addr[1], i, buf);
--
-- return -ENODEV;
-- }
-- }
--
-- /* check limits (only registers with bcd values) */
-- for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) {
-- unsigned char reg, value;
--
-- unsigned char addr[2] = { 0, probe_limits_pattern[i].reg };
--
-- struct i2c_msg msgs[2] = {
-- { client->addr, 0, 2, addr },
-- { client->addr, I2C_M_RD, 1, &reg },
-- };
--
-- xfer = i2c_transfer(client->adapter, msgs, 2);
--
-- if (xfer != 2) {
-- dev_err(&client->adapter->dev,
-- "%s: could not read register %x\n",
-- __FUNCTION__, addr[1]);
--
-- return -EIO;
-- }
--
-- value = BCD2BIN(reg & probe_limits_pattern[i].mask);
--
-- if (value > probe_limits_pattern[i].max ||
-- value < probe_limits_pattern[i].min) {
-- dev_dbg(&client->adapter->dev,
-- "%s: register=%x, lim pattern=%d, value=%d\n",
-- __FUNCTION__, addr[1], i, value);
--
-- return -ENODEV;
-- }
-- }
--
-- return 0;
--}
--
--static int x1205_attach(struct i2c_adapter *adapter)
--{
-- dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
--
-- return i2c_probe(adapter, &addr_data, x1205_probe);
--}
--
--int x1205_direct_attach(int adapter_id,
-- struct i2c_client_address_data *address_data)
--{
-- int err;
-- struct i2c_adapter *adapter = i2c_get_adapter(adapter_id);
--
-- if (adapter) {
-- err = i2c_probe(adapter,
-- address_data, x1205_probe);
--
-- i2c_put_adapter(adapter);
--
-- return err;
-- }
--
-- return -ENODEV;
--}
--
--static int x1205_probe(struct i2c_adapter *adapter, int address, int kind)
--{
-- struct i2c_client *client;
-- struct x1205_data *data;
--
-- int err = 0;
--
-- dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
--
-- if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-- err = -ENODEV;
-- goto exit;
-- }
--
-- if (!(data = kzalloc(sizeof(struct x1205_data), GFP_KERNEL))) {
-- err = -ENOMEM;
-- goto exit;
-- }
--
-- /* Initialize our structures */
-- data->epoch = 2000;
--
-- client = &data->client;
-- client->addr = address;
-- client->driver = &x1205_driver;
-- client->adapter = adapter;
--
-- strlcpy(client->name, "x1205", I2C_NAME_SIZE);
--
-- i2c_set_clientdata(client, data);
--
-- /* Verify the chip is really an X1205 */
-- if (kind < 0) {
-- if (x1205_validate_client(client) < 0) {
-- err = -ENODEV;
-- goto exit_kfree;
-- }
-- }
--
-- /* Inform the i2c layer */
-- if ((err = i2c_attach_client(client)))
-- goto exit_kfree;
--
-- list_add(&data->list, &x1205_clients);
--
-- dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
--
-- /* If requested, set the system time */
-- if (hctosys)
-- x1205_hctosys(client);
--
-- return 0;
--
--exit_kfree:
-- kfree(data);
--
--exit:
-- return err;
--}
--
--static int x1205_detach(struct i2c_client *client)
--{
-- int err;
-- struct x1205_data *data = i2c_get_clientdata(client);
--
-- dev_dbg(&client->dev, "%s\n", __FUNCTION__);
--
-- if ((err = i2c_detach_client(client)))
-- return err;
--
-- list_del(&data->list);
--
-- kfree(data);
--
-- return 0;
--}
--
--static int x1205_command(struct i2c_client *client, unsigned int cmd,
-- void *param)
--{
-- if (param == NULL)
-- return -EINVAL;
--
-- if (!capable(CAP_SYS_TIME))
-- return -EACCES;
--
-- dev_dbg(&client->dev, "%s: cmd=%d\n", __FUNCTION__, cmd);
--
-- switch (cmd) {
-- case X1205_CMD_GETDATETIME:
-- return x1205_get_datetime(client, param, X1205_CCR_BASE);
--
-- case X1205_CMD_SETTIME:
-- return x1205_set_datetime(client, param, 0,
-- X1205_CCR_BASE);
--
-- case X1205_CMD_SETDATETIME:
-- return x1205_set_datetime(client, param, 1,
-- X1205_CCR_BASE);
--
-- case X1205_CMD_GETALARM:
-- return x1205_get_datetime(client, param, X1205_ALM0_BASE);
--
-- case X1205_CMD_SETALARM:
-- return x1205_set_datetime(client, param, 1,
-- X1205_ALM0_BASE);
--
-- case X1205_CMD_GETDTRIM:
-- return x1205_get_dtrim(client, param);
--
-- case X1205_CMD_GETATRIM:
-- return x1205_get_atrim(client, param);
--
-- default:
-- return -EINVAL;
-- }
--}
--
--static int __init x1205_init(void)
--{
-- return i2c_add_driver(&x1205_driver);
--}
--
--static void __exit x1205_exit(void)
--{
-- i2c_del_driver(&x1205_driver);
--}
--
--MODULE_AUTHOR(
-- "Karen Spearel <kas11@tampabay.rr.com>, "
-- "Alessandro Zummo <a.zummo@towertech.it>");
--MODULE_DESCRIPTION("Xicor X1205 RTC driver");
--MODULE_LICENSE("GPL");
--MODULE_VERSION(DRV_VERSION);
--
--EXPORT_SYMBOL_GPL(x1205_do_command);
--EXPORT_SYMBOL_GPL(x1205_direct_attach);
--
--module_init(x1205_init);
--module_exit(x1205_exit);
---- linux-ixp4xx.orig/drivers/i2c/chips/Makefile 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/drivers/i2c/chips/Makefile 2006-03-08 01:59:26.000000000 +0100
-@@ -10,10 +10,8 @@ obj-$(CONFIG_SENSORS_M41T00) += m41t00.o
- obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
- obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
--obj-$(CONFIG_SENSORS_RTC8564) += rtc8564.o
- obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o
- obj-$(CONFIG_TPS65010) += tps65010.o
--obj-$(CONFIG_RTC_X1205_I2C) += x1205.o
-
- ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
---- linux-ixp4xx.orig/drivers/i2c/chips/rtc8564.c 2006-03-08 01:59:09.000000000 +0100
-+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
-@@ -1,385 +0,0 @@
--/*
-- * linux/drivers/i2c/chips/rtc8564.c
-- *
-- * Copyright (C) 2002-2004 Stefan Eletzhofer
-- *
-- * based on linux/drivers/acron/char/pcf8583.c
-- * Copyright (C) 2000 Russell King
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 as
-- * published by the Free Software Foundation.
-- *
-- * Driver for system3's EPSON RTC 8564 chip
-- */
--#include <linux/module.h>
--#include <linux/kernel.h>
--#include <linux/bcd.h>
--#include <linux/i2c.h>
--#include <linux/slab.h>
--#include <linux/string.h>
--#include <linux/rtc.h> /* get the user-level API */
--#include <linux/init.h>
--
--#include "rtc8564.h"
--
--#ifdef DEBUG
--# define _DBG(x, fmt, args...) do{ if (debug>=x) printk(KERN_DEBUG"%s: " fmt "\n", __FUNCTION__, ##args); } while(0);
--#else
--# define _DBG(x, fmt, args...) do { } while(0);
--#endif
--
--#define _DBGRTCTM(x, rtctm) if (debug>=x) printk("%s: secs=%d, mins=%d, hours=%d, mday=%d, " \
-- "mon=%d, year=%d, wday=%d VL=%d\n", __FUNCTION__, \
-- (rtctm).secs, (rtctm).mins, (rtctm).hours, (rtctm).mday, \
-- (rtctm).mon, (rtctm).year, (rtctm).wday, (rtctm).vl);
--
--struct rtc8564_data {
-- struct i2c_client client;
-- u16 ctrl;
--};
--
--static inline u8 _rtc8564_ctrl1(struct i2c_client *client)
--{
-- struct rtc8564_data *data = i2c_get_clientdata(client);
-- return data->ctrl & 0xff;
--}
--static inline u8 _rtc8564_ctrl2(struct i2c_client *client)
--{
-- struct rtc8564_data *data = i2c_get_clientdata(client);
-- return (data->ctrl & 0xff00) >> 8;
--}
--
--#define CTRL1(c) _rtc8564_ctrl1(c)
--#define CTRL2(c) _rtc8564_ctrl2(c)
--
--static int debug;;
--module_param(debug, int, S_IRUGO | S_IWUSR);
--
--static struct i2c_driver rtc8564_driver;
--
--static unsigned short ignore[] = { I2C_CLIENT_END };
--static unsigned short normal_addr[] = { 0x51, I2C_CLIENT_END };
--
--static struct i2c_client_address_data addr_data = {
-- .normal_i2c = normal_addr,
-- .probe = ignore,
-- .ignore = ignore,
--};
--
--static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem);
--static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem);
--
--static int rtc8564_read(struct i2c_client *client, unsigned char adr,
-- unsigned char *buf, unsigned char len)
--{
-- int ret = -EIO;
-- unsigned char addr[1] = { adr };
-- struct i2c_msg msgs[2] = {
-- {client->addr, 0, 1, addr},
-- {client->addr, I2C_M_RD, len, buf}
-- };
--
-- _DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, buf, len);
--
-- if (!buf) {
-- ret = -EINVAL;
-- goto done;
-- }
--
-- ret = i2c_transfer(client->adapter, msgs, 2);
-- if (ret == 2) {
-- ret = 0;
-- }
--
--done:
-- return ret;
--}
--
--static int rtc8564_write(struct i2c_client *client, unsigned char adr,
-- unsigned char *data, unsigned char len)
--{
-- int ret = 0;
-- unsigned char _data[16];
-- struct i2c_msg wr;
-- int i;
--
-- if (!data || len > 15) {
-- ret = -EINVAL;
-- goto done;
-- }
--
-- _DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, data, len);
--
-- _data[0] = adr;
-- for (i = 0; i < len; i++) {
-- _data[i + 1] = data[i];
-- _DBG(5, "data[%d] = 0x%02x (%d)", i, data[i], data[i]);
-- }
--
-- wr.addr = client->addr;
-- wr.flags = 0;
-- wr.len = len + 1;
-- wr.buf = _data;
--
-- ret = i2c_transfer(client->adapter, &wr, 1);
-- if (ret == 1) {
-- ret = 0;
-- }
--
--done:
-- return ret;
--}
--
--static int rtc8564_attach(struct i2c_adapter *adap, int addr, int kind)
--{
-- int ret;
-- struct i2c_client *new_client;
-- struct rtc8564_data *d;
-- unsigned char data[10];
-- unsigned char ad[1] = { 0 };
-- struct i2c_msg ctrl_wr[1] = {
-- {addr, 0, 2, data}
-- };
-- struct i2c_msg ctrl_rd[2] = {
-- {addr, 0, 1, ad},
-- {addr, I2C_M_RD, 2, data}
-- };
--
-- d = kzalloc(sizeof(struct rtc8564_data), GFP_KERNEL);
-- if (!d) {
-- ret = -ENOMEM;
-- goto done;
-- }
-- new_client = &d->client;
--
-- strlcpy(new_client->name, "RTC8564", I2C_NAME_SIZE);
-- i2c_set_clientdata(new_client, d);
-- new_client->addr = addr;
-- new_client->adapter = adap;
-- new_client->driver = &rtc8564_driver;
--
-- _DBG(1, "client=%p", new_client);
--
-- /* init ctrl1 reg */
-- data[0] = 0;
-- data[1] = 0;
-- ret = i2c_transfer(new_client->adapter, ctrl_wr, 1);
-- if (ret != 1) {
-- printk(KERN_INFO "rtc8564: cant init ctrl1\n");
-- ret = -ENODEV;
-- goto done;
-- }
--
-- /* read back ctrl1 and ctrl2 */
-- ret = i2c_transfer(new_client->adapter, ctrl_rd, 2);
-- if (ret != 2) {
-- printk(KERN_INFO "rtc8564: cant read ctrl\n");
-- ret = -ENODEV;
-- goto done;
-- }
--
-- d->ctrl = data[0] | (data[1] << 8);
--
-- _DBG(1, "RTC8564_REG_CTRL1=%02x, RTC8564_REG_CTRL2=%02x",
-- data[0], data[1]);
--
-- ret = i2c_attach_client(new_client);
--done:
-- if (ret) {
-- kfree(d);
-- }
-- return ret;
--}
--
--static int rtc8564_probe(struct i2c_adapter *adap)
--{
-- return i2c_probe(adap, &addr_data, rtc8564_attach);
--}
--
--static int rtc8564_detach(struct i2c_client *client)
--{
-- i2c_detach_client(client);
-- kfree(i2c_get_clientdata(client));
-- return 0;
--}
--
--static int rtc8564_get_datetime(struct i2c_client *client, struct rtc_tm *dt)
--{
-- int ret = -EIO;
-- unsigned char buf[15];
--
-- _DBG(1, "client=%p, dt=%p", client, dt);
--
-- if (!dt)
-- return -EINVAL;
--
-- memset(buf, 0, sizeof(buf));
--
-- ret = rtc8564_read(client, 0, buf, 15);
-- if (ret)
-- return ret;
--
-- /* century stored in minute alarm reg */
-- dt->year = BCD2BIN(buf[RTC8564_REG_YEAR]);
-- dt->year += 100 * BCD2BIN(buf[RTC8564_REG_AL_MIN] & 0x3f);
-- dt->mday = BCD2BIN(buf[RTC8564_REG_DAY] & 0x3f);
-- dt->wday = BCD2BIN(buf[RTC8564_REG_WDAY] & 7);
-- dt->mon = BCD2BIN(buf[RTC8564_REG_MON_CENT] & 0x1f);
--
-- dt->secs = BCD2BIN(buf[RTC8564_REG_SEC] & 0x7f);
-- dt->vl = (buf[RTC8564_REG_SEC] & 0x80) == 0x80;
-- dt->mins = BCD2BIN(buf[RTC8564_REG_MIN] & 0x7f);
-- dt->hours = BCD2BIN(buf[RTC8564_REG_HR] & 0x3f);
--
-- _DBGRTCTM(2, *dt);
--
-- return 0;
--}
--
--static int
--rtc8564_set_datetime(struct i2c_client *client, struct rtc_tm *dt, int datetoo)
--{
-- int ret, len = 5;
-- unsigned char buf[15];
--
-- _DBG(1, "client=%p, dt=%p", client, dt);
--
-- if (!dt)
-- return -EINVAL;
--
-- _DBGRTCTM(2, *dt);
--
-- buf[RTC8564_REG_CTRL1] = CTRL1(client) | RTC8564_CTRL1_STOP;
-- buf[RTC8564_REG_CTRL2] = CTRL2(client);
-- buf[RTC8564_REG_SEC] = BIN2BCD(dt->secs);
-- buf[RTC8564_REG_MIN] = BIN2BCD(dt->mins);
-- buf[RTC8564_REG_HR] = BIN2BCD(dt->hours);
--
-- if (datetoo) {
-- len += 5;
-- buf[RTC8564_REG_DAY] = BIN2BCD(dt->mday);
-- buf[RTC8564_REG_WDAY] = BIN2BCD(dt->wday);
-- buf[RTC8564_REG_MON_CENT] = BIN2BCD(dt->mon) & 0x1f;
-- /* century stored in minute alarm reg */
-- buf[RTC8564_REG_YEAR] = BIN2BCD(dt->year % 100);
-- buf[RTC8564_REG_AL_MIN] = BIN2BCD(dt->year / 100);
-- }
--
-- ret = rtc8564_write(client, 0, buf, len);
-- if (ret) {
-- _DBG(1, "error writing data! %d", ret);
-- }
--
-- buf[RTC8564_REG_CTRL1] = CTRL1(client);
-- ret = rtc8564_write(client, 0, buf, 1);
-- if (ret) {
-- _DBG(1, "error writing data! %d", ret);
-- }
--
-- return ret;
--}
--
--static int rtc8564_get_ctrl(struct i2c_client *client, unsigned int *ctrl)
--{
-- struct rtc8564_data *data = i2c_get_clientdata(client);
--
-- if (!ctrl)
-- return -1;
--
-- *ctrl = data->ctrl;
-- return 0;
--}
--
--static int rtc8564_set_ctrl(struct i2c_client *client, unsigned int *ctrl)
--{
-- struct rtc8564_data *data = i2c_get_clientdata(client);
-- unsigned char buf[2];
--
-- if (!ctrl)
-- return -1;
--
-- buf[0] = *ctrl & 0xff;
-- buf[1] = (*ctrl & 0xff00) >> 8;
-- data->ctrl = *ctrl;
--
-- return rtc8564_write(client, 0, buf, 2);
--}
--
--static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem)
--{
--
-- if (!mem)
-- return -EINVAL;
--
-- return rtc8564_read(client, mem->loc, mem->data, mem->nr);
--}
--
--static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem)
--{
--
-- if (!mem)
-- return -EINVAL;
--
-- return rtc8564_write(client, mem->loc, mem->data, mem->nr);
--}
--
--static int
--rtc8564_command(struct i2c_client *client, unsigned int cmd, void *arg)
--{
--
-- _DBG(1, "cmd=%d", cmd);
--
-- switch (cmd) {
-- case RTC_GETDATETIME:
-- return rtc8564_get_datetime(client, arg);
--
-- case RTC_SETTIME:
-- return rtc8564_set_datetime(client, arg, 0);
--
-- case RTC_SETDATETIME:
-- return rtc8564_set_datetime(client, arg, 1);
--
-- case RTC_GETCTRL:
-- return rtc8564_get_ctrl(client, arg);
--
-- case RTC_SETCTRL:
-- return rtc8564_set_ctrl(client, arg);
--
-- case MEM_READ:
-- return rtc8564_read_mem(client, arg);
--
-- case MEM_WRITE:
-- return rtc8564_write_mem(client, arg);
--
-- default:
-- return -EINVAL;
-- }
--}
--
--static struct i2c_driver rtc8564_driver = {
-- .driver = {
-- .name = "RTC8564",
-- },
-- .id = I2C_DRIVERID_RTC8564,
-- .attach_adapter = rtc8564_probe,
-- .detach_client = rtc8564_detach,
-- .command = rtc8564_command
--};
--
--static __init int rtc8564_init(void)
--{
-- return i2c_add_driver(&rtc8564_driver);
--}
--
--static __exit void rtc8564_exit(void)
--{
-- i2c_del_driver(&rtc8564_driver);
--}
--
--MODULE_AUTHOR("Stefan Eletzhofer <Stefan.Eletzhofer@eletztrick.de>");
--MODULE_DESCRIPTION("EPSON RTC8564 Driver");
--MODULE_LICENSE("GPL");
--
--module_init(rtc8564_init);
--module_exit(rtc8564_exit);
---- linux-ixp4xx.orig/drivers/i2c/chips/rtc8564.h 2006-03-08 01:59:09.000000000 +0100
-+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
-@@ -1,78 +0,0 @@
--/*
-- * linux/drivers/i2c/chips/rtc8564.h
-- *
-- * Copyright (C) 2002-2004 Stefan Eletzhofer
-- *
-- * based on linux/drivers/acron/char/pcf8583.h
-- * Copyright (C) 2000 Russell King
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 as
-- * published by the Free Software Foundation.
-- */
--struct rtc_tm {
-- unsigned char secs;
-- unsigned char mins;
-- unsigned char hours;
-- unsigned char mday;
-- unsigned char mon;
-- unsigned short year; /* xxxx 4 digits :) */
-- unsigned char wday;
-- unsigned char vl;
--};
--
--struct mem {
-- unsigned int loc;
-- unsigned int nr;
-- unsigned char *data;
--};
--
--#define RTC_GETDATETIME 0
--#define RTC_SETTIME 1
--#define RTC_SETDATETIME 2
--#define RTC_GETCTRL 3
--#define RTC_SETCTRL 4
--#define MEM_READ 5
--#define MEM_WRITE 6
--
--#define RTC8564_REG_CTRL1 0x0 /* T 0 S 0 | T 0 0 0 */
--#define RTC8564_REG_CTRL2 0x1 /* 0 0 0 TI/TP | AF TF AIE TIE */
--#define RTC8564_REG_SEC 0x2 /* VL 4 2 1 | 8 4 2 1 */
--#define RTC8564_REG_MIN 0x3 /* x 4 2 1 | 8 4 2 1 */
--#define RTC8564_REG_HR 0x4 /* x x 2 1 | 8 4 2 1 */
--#define RTC8564_REG_DAY 0x5 /* x x 2 1 | 8 4 2 1 */
--#define RTC8564_REG_WDAY 0x6 /* x x x x | x 4 2 1 */
--#define RTC8564_REG_MON_CENT 0x7 /* C x x 1 | 8 4 2 1 */
--#define RTC8564_REG_YEAR 0x8 /* 8 4 2 1 | 8 4 2 1 */
--#define RTC8564_REG_AL_MIN 0x9 /* AE 4 2 1 | 8 4 2 1 */
--#define RTC8564_REG_AL_HR 0xa /* AE 4 2 1 | 8 4 2 1 */
--#define RTC8564_REG_AL_DAY 0xb /* AE x 2 1 | 8 4 2 1 */
--#define RTC8564_REG_AL_WDAY 0xc /* AE x x x | x 4 2 1 */
--#define RTC8564_REG_CLKOUT 0xd /* FE x x x | x x FD1 FD0 */
--#define RTC8564_REG_TCTL 0xe /* TE x x x | x x FD1 FD0 */
--#define RTC8564_REG_TIMER 0xf /* 8 bit binary */
--
--/* Control reg */
--#define RTC8564_CTRL1_TEST1 (1<<3)
--#define RTC8564_CTRL1_STOP (1<<5)
--#define RTC8564_CTRL1_TEST2 (1<<7)
--
--#define RTC8564_CTRL2_TIE (1<<0)
--#define RTC8564_CTRL2_AIE (1<<1)
--#define RTC8564_CTRL2_TF (1<<2)
--#define RTC8564_CTRL2_AF (1<<3)
--#define RTC8564_CTRL2_TI_TP (1<<4)
--
--/* CLKOUT frequencies */
--#define RTC8564_FD_32768HZ (0x0)
--#define RTC8564_FD_1024HZ (0x1)
--#define RTC8564_FD_32 (0x2)
--#define RTC8564_FD_1HZ (0x3)
--
--/* Timer CTRL */
--#define RTC8564_TD_4096HZ (0x0)
--#define RTC8564_TD_64HZ (0x1)
--#define RTC8564_TD_1HZ (0x2)
--#define RTC8564_TD_1_60HZ (0x3)
--
--#define I2C_DRIVERID_RTC8564 0xf000
---- linux-ixp4xx.orig/include/linux/x1205.h 2006-03-08 01:59:09.000000000 +0100
-+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
-@@ -1,31 +0,0 @@
--/*
-- * x1205.h - defines for drivers/i2c/chips/x1205.c
-- * Copyright 2004 Karen Spearel
-- * Copyright 2005 Alessandro Zummo
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- */
--
--#ifndef __LINUX_X1205_H__
--#define __LINUX_X1205_H__
--
--/* commands */
--
--#define X1205_CMD_GETDATETIME 0
--#define X1205_CMD_SETTIME 1
--#define X1205_CMD_SETDATETIME 2
--#define X1205_CMD_GETALARM 3
--#define X1205_CMD_SETALARM 4
--#define X1205_CMD_GETDTRIM 5
--#define X1205_CMD_SETDTRIM 6
--#define X1205_CMD_GETATRIM 7
--#define X1205_CMD_SETATRIM 8
--
--extern int x1205_do_command(unsigned int cmd, void *arg);
--extern int x1205_direct_attach(int adapter_id,
-- struct i2c_client_address_data *address_data);
--
--#endif /* __LINUX_X1205_H__ */
---- linux-ixp4xx.orig/drivers/i2c/chips/Kconfig 2006-03-08 01:59:09.000000000 +0100
-1+++ linux-ixp4xx/drivers/i2c/chips/Kconfig 2006-03-08 01:59:26.000000000 +0100
-@@ -74,15 +74,6 @@ config SENSORS_RTC8564
- This driver can also be built as a module. If so, the module
- will be called pcf8591.
-
--config SENSORS_RTC8564
-- tristate "Epson 8564 RTC chip"
-- depends on I2C && EXPERIMENTAL
-- help
-- If you say yes here you get support for the Epson 8564 RTC chip.
--
-- This driver can also be built as a module. If so, the module
-- will be called i2c-rtc8564.
--
- config ISP1301_OMAP
- tristate "Philips ISP1301 with OMAP OTG"
- depends on I2C && ARCH_OMAP_OTG
-@@ -144,13 +135,4 @@ config RTC_X1205_I2C
- This driver can also be built as a module. If so, the module
- will be called max6875.
-
--config RTC_X1205_I2C
-- tristate "Xicor X1205 RTC chip"
-- depends on I2C && EXPERIMENTAL
-- help
-- If you say yes here you get support for the Xicor X1205 RTC chip.
--
-- This driver can also be built as a module. If so, the module
-- will be called x1205.
--
- endmenu
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-sysfs.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,124 @@
-+/*
-+ * RTC subsystem, sysfs interface
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+
-+/* device attributes */
-+
-+static ssize_t rtc_sysfs_show_name(struct class_device *dev, char *buf)
-+{
-+ return sprintf(buf, "%s\n", to_rtc_device(dev)->name);
-+}
-+static CLASS_DEVICE_ATTR(name, S_IRUGO, rtc_sysfs_show_name, NULL);
-+
-+static ssize_t rtc_sysfs_show_date(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval;
-+ struct rtc_time tm;
-+
-+ retval = rtc_read_time(dev, &tm);
-+ if (retval == 0) {
-+ retval = sprintf(buf, "%04d-%02d-%02d\n",
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-+ }
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(date, S_IRUGO, rtc_sysfs_show_date, NULL);
-+
-+static ssize_t rtc_sysfs_show_time(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval;
-+ struct rtc_time tm;
-+
-+ retval = rtc_read_time(dev, &tm);
-+ if (retval == 0) {
-+ retval = sprintf(buf, "%02d:%02d:%02d\n",
-+ tm.tm_hour, tm.tm_min, tm.tm_sec);
-+ }
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(time, S_IRUGO, rtc_sysfs_show_time, NULL);
-+
-+static ssize_t rtc_sysfs_show_since_epoch(struct class_device *dev, char *buf)
-+{
-+ ssize_t retval;
-+ struct rtc_time tm;
-+
-+ retval = rtc_read_time(dev, &tm);
-+ if (retval == 0) {
-+ unsigned long time;
-+ rtc_tm_to_time(&tm, &time);
-+ retval = sprintf(buf, "%lu\n", time);
-+ }
-+
-+ return retval;
-+}
-+static CLASS_DEVICE_ATTR(since_epoch, S_IRUGO, rtc_sysfs_show_since_epoch, NULL);
-+
-+static struct attribute *rtc_attrs[] = {
-+ &class_device_attr_name.attr,
-+ &class_device_attr_date.attr,
-+ &class_device_attr_time.attr,
-+ &class_device_attr_since_epoch.attr,
-+ NULL,
-+};
-+
-+static struct attribute_group rtc_attr_group = {
-+ .attrs = rtc_attrs,
-+};
-+
-+static int __devinit rtc_sysfs_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ int err;
-+
-+ dev_info(class_dev->dev, "rtc intf: sysfs\n");
-+
-+ err = sysfs_create_group(&class_dev->kobj, &rtc_attr_group);
-+ if (err)
-+ dev_err(class_dev->dev,
-+ "failed to create sysfs attributes\n");
-+
-+ return err;
-+}
-+
-+static void rtc_sysfs_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ sysfs_remove_group(&class_dev->kobj, &rtc_attr_group);
-+}
-+
-+/* interface registration */
-+
-+static struct class_interface rtc_sysfs_interface = {
-+ .add = &rtc_sysfs_add_device,
-+ .remove = &rtc_sysfs_remove_device,
-+};
-+
-+static int __init rtc_sysfs_init(void)
-+{
-+ return rtc_interface_register(&rtc_sysfs_interface);
-+}
-+
-+static void __exit rtc_sysfs_exit(void)
-+{
-+ class_interface_unregister(&rtc_sysfs_interface);
-+}
-+
-+module_init(rtc_sysfs_init);
-+module_exit(rtc_sysfs_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class sysfs interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-proc.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,162 @@
-+/*
-+ * RTC subsystem, proc interface
-+ *
-+ * Copyright (C) 2005-06 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/proc_fs.h>
-+#include <linux/seq_file.h>
-+
-+static struct class_device *rtc_dev = NULL;
-+static DEFINE_MUTEX(rtc_lock);
-+
-+static int rtc_proc_show(struct seq_file *seq, void *offset)
-+{
-+ int err;
-+ struct class_device *class_dev = seq->private;
-+ struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops;
-+ struct rtc_wkalrm alrm;
-+ struct rtc_time tm;
-+
-+ err = rtc_read_time(class_dev, &tm);
-+ if (err == 0) {
-+ seq_printf(seq,
-+ "rtc_time\t: %02d:%02d:%02d\n"
-+ "rtc_date\t: %04d-%02d-%02d\n",
-+ tm.tm_hour, tm.tm_min, tm.tm_sec,
-+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-+ }
-+
-+ err = rtc_read_alarm(class_dev, &alrm);
-+ if (err == 0) {
-+ seq_printf(seq, "alrm_time\t: ");
-+ if ((unsigned int)alrm.time.tm_hour <= 24)
-+ seq_printf(seq, "%02d:", alrm.time.tm_hour);
-+ else
-+ seq_printf(seq, "**:");
-+ if ((unsigned int)alrm.time.tm_min <= 59)
-+ seq_printf(seq, "%02d:", alrm.time.tm_min);
-+ else
-+ seq_printf(seq, "**:");
-+ if ((unsigned int)alrm.time.tm_sec <= 59)
-+ seq_printf(seq, "%02d\n", alrm.time.tm_sec);
-+ else
-+ seq_printf(seq, "**\n");
-+
-+ seq_printf(seq, "alrm_date\t: ");
-+ if ((unsigned int)alrm.time.tm_year <= 200)
-+ seq_printf(seq, "%04d-", alrm.time.tm_year + 1900);
-+ else
-+ seq_printf(seq, "****-");
-+ if ((unsigned int)alrm.time.tm_mon <= 11)
-+ seq_printf(seq, "%02d-", alrm.time.tm_mon + 1);
-+ else
-+ seq_printf(seq, "**-");
-+ if ((unsigned int)alrm.time.tm_mday <= 31)
-+ seq_printf(seq, "%02d\n", alrm.time.tm_mday);
-+ else
-+ seq_printf(seq, "**\n");
-+ seq_printf(seq, "alrm_wakeup\t: %s\n",
-+ alrm.enabled ? "yes" : "no");
-+ seq_printf(seq, "alrm_pending\t: %s\n",
-+ alrm.pending ? "yes" : "no");
-+ }
-+
-+ if (ops->proc)
-+ ops->proc(class_dev->dev, seq);
-+
-+ return 0;
-+}
-+
-+static int rtc_proc_open(struct inode *inode, struct file *file)
-+{
-+ struct class_device *class_dev = PDE(inode)->data;
-+
-+ if (!try_module_get(THIS_MODULE))
-+ return -ENODEV;
-+
-+ return single_open(file, rtc_proc_show, class_dev);
-+}
-+
-+static int rtc_proc_release(struct inode *inode, struct file *file)
-+{
-+ int res = single_release(inode, file);
-+ module_put(THIS_MODULE);
-+ return res;
-+}
-+
-+static struct file_operations rtc_proc_fops = {
-+ .open = rtc_proc_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = rtc_proc_release,
-+};
-+
-+static int rtc_proc_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ mutex_lock(&rtc_lock);
-+ if (rtc_dev == NULL) {
-+ struct proc_dir_entry *ent;
-+
-+ rtc_dev = class_dev;
-+
-+ ent = create_proc_entry("driver/rtc", 0, NULL);
-+ if (ent) {
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ ent->proc_fops = &rtc_proc_fops;
-+ ent->owner = rtc->owner;
-+ ent->data = class_dev;
-+
-+ dev_info(class_dev->dev, "rtc intf: proc\n");
-+ }
-+ else
-+ rtc_dev = NULL;
-+ }
-+ mutex_unlock(&rtc_lock);
-+
-+ return 0;
-+}
-+
-+static void rtc_proc_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ mutex_lock(&rtc_lock);
-+ if (rtc_dev == class_dev) {
-+ remove_proc_entry("driver/rtc", NULL);
-+ rtc_dev = NULL;
-+ }
-+ mutex_unlock(&rtc_lock);
-+}
-+
-+static struct class_interface rtc_proc_interface = {
-+ .add = &rtc_proc_add_device,
-+ .remove = &rtc_proc_remove_device,
-+};
-+
-+static int __init rtc_proc_init(void)
-+{
-+ return rtc_interface_register(&rtc_proc_interface);
-+}
-+
-+static void __exit rtc_proc_exit(void)
-+{
-+ class_interface_unregister(&rtc_proc_interface);
-+}
-+
-+module_init(rtc_proc_init);
-+module_exit(rtc_proc_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class proc interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-dev.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,382 @@
-+/*
-+ * RTC subsystem, dev interface
-+ *
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on arch/arm/common/rtctime.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; version 2 of the License.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+
-+static struct class *rtc_dev_class;
-+static dev_t rtc_devt;
-+
-+#define RTC_DEV_MAX 16 /* 16 RTCs should be enough for everyone... */
-+
-+static int rtc_dev_open(struct inode *inode, struct file *file)
-+{
-+ int err;
-+ struct rtc_device *rtc = container_of(inode->i_cdev,
-+ struct rtc_device, char_dev);
-+ struct rtc_class_ops *ops = rtc->ops;
-+
-+ /* We keep the lock as long as the device is in use
-+ * and return immediately if busy
-+ */
-+ if (!(mutex_trylock(&rtc->char_lock)))
-+ return -EBUSY;
-+
-+ file->private_data = &rtc->class_dev;
-+
-+ err = ops->open ? ops->open(rtc->class_dev.dev) : 0;
-+ if (err == 0) {
-+ spin_lock_irq(&rtc->irq_lock);
-+ rtc->irq_data = 0;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ return 0;
-+ }
-+
-+ /* something has gone wrong, release the lock */
-+ mutex_unlock(&rtc->char_lock);
-+ return err;
-+}
-+
-+
-+static ssize_t
-+rtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+
-+ DECLARE_WAITQUEUE(wait, current);
-+ unsigned long data;
-+ ssize_t ret;
-+
-+ if (count < sizeof(unsigned long))
-+ return -EINVAL;
-+
-+ add_wait_queue(&rtc->irq_queue, &wait);
-+ do {
-+ __set_current_state(TASK_INTERRUPTIBLE);
-+
-+ spin_lock_irq(&rtc->irq_lock);
-+ data = rtc->irq_data;
-+ rtc->irq_data = 0;
-+ spin_unlock_irq(&rtc->irq_lock);
-+
-+ if (data != 0) {
-+ ret = 0;
-+ break;
-+ }
-+ if (file->f_flags & O_NONBLOCK) {
-+ ret = -EAGAIN;
-+ break;
-+ }
-+ if (signal_pending(current)) {
-+ ret = -ERESTARTSYS;
-+ break;
-+ }
-+ schedule();
-+ } while (1);
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&rtc->irq_queue, &wait);
-+
-+ if (ret == 0) {
-+ /* Check for any data updates */
-+ if (rtc->ops->read_callback)
-+ data = rtc->ops->read_callback(rtc->class_dev.dev, data);
-+
-+ ret = put_user(data, (unsigned long __user *)buf);
-+ if (ret == 0)
-+ ret = sizeof(unsigned long);
-+ }
-+ return ret;
-+}
-+
-+static unsigned int rtc_dev_poll(struct file *file, poll_table *wait)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+ unsigned long data;
-+
-+ poll_wait(file, &rtc->irq_queue, wait);
-+
-+ data = rtc->irq_data;
-+
-+ return (data != 0) ? (POLLIN | POLLRDNORM) : 0;
-+}
-+
-+static int rtc_dev_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ int err = 0;
-+ struct class_device *class_dev = file->private_data;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+ struct rtc_class_ops *ops = rtc->ops;
-+ struct rtc_time tm;
-+ struct rtc_wkalrm alarm;
-+ void __user *uarg = (void __user *) arg;
-+
-+ /* avoid conflicting IRQ users */
-+ if (cmd == RTC_PIE_ON || cmd == RTC_PIE_OFF || cmd == RTC_IRQP_SET) {
-+ spin_lock(&rtc->irq_task_lock);
-+ if (rtc->irq_task)
-+ err = -EBUSY;
-+ spin_unlock(&rtc->irq_task_lock);
-+
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* try the driver's ioctl interface */
-+ if (ops->ioctl) {
-+ err = ops->ioctl(class_dev->dev, cmd, arg);
-+ if (err != -EINVAL)
-+ return err;
-+ }
-+
-+ /* if the driver does not provide the ioctl interface
-+ * or if that particular ioctl was not implemented
-+ * (-EINVAL), we will try to emulate here.
-+ */
-+
-+ switch (cmd) {
-+ case RTC_ALM_READ:
-+ err = rtc_read_alarm(class_dev, &alarm);
-+ if (err < 0)
-+ return err;
-+
-+ if (copy_to_user(uarg, &alarm.time, sizeof(tm)))
-+ return -EFAULT;
-+ break;
-+
-+ case RTC_ALM_SET:
-+ if (copy_from_user(&alarm.time, uarg, sizeof(tm)))
-+ return -EFAULT;
-+
-+ alarm.enabled = 0;
-+ alarm.pending = 0;
-+ alarm.time.tm_mday = -1;
-+ alarm.time.tm_mon = -1;
-+ alarm.time.tm_year = -1;
-+ alarm.time.tm_wday = -1;
-+ alarm.time.tm_yday = -1;
-+ alarm.time.tm_isdst = -1;
-+ err = rtc_set_alarm(class_dev, &alarm);
-+ break;
-+
-+ case RTC_RD_TIME:
-+ err = rtc_read_time(class_dev, &tm);
-+ if (err < 0)
-+ return err;
-+
-+ if (copy_to_user(uarg, &tm, sizeof(tm)))
-+ return -EFAULT;
-+ break;
-+
-+ case RTC_SET_TIME:
-+ if (!capable(CAP_SYS_TIME))
-+ return -EACCES;
-+
-+ if (copy_from_user(&tm, uarg, sizeof(tm)))
-+ return -EFAULT;
-+
-+ err = rtc_set_time(class_dev, &tm);
-+ break;
-+#if 0
-+ case RTC_EPOCH_SET:
-+#ifndef rtc_epoch
-+ /*
-+ * There were no RTC clocks before 1900.
-+ */
-+ if (arg < 1900) {
-+ err = -EINVAL;
-+ break;
-+ }
-+ if (!capable(CAP_SYS_TIME)) {
-+ err = -EACCES;
-+ break;
-+ }
-+ rtc_epoch = arg;
-+ err = 0;
-+#endif
-+ break;
-+
-+ case RTC_EPOCH_READ:
-+ err = put_user(rtc_epoch, (unsigned long __user *)uarg);
-+ break;
-+#endif
-+ case RTC_WKALM_SET:
-+ if (copy_from_user(&alarm, uarg, sizeof(alarm)))
-+ return -EFAULT;
-+
-+ err = rtc_set_alarm(class_dev, &alarm);
-+ break;
-+
-+ case RTC_WKALM_RD:
-+ err = rtc_read_alarm(class_dev, &alarm);
-+ if (err < 0)
-+ return err;
-+
-+ if (copy_to_user(uarg, &alarm, sizeof(alarm)))
-+ return -EFAULT;
-+ break;
-+
-+ default:
-+ err = -EINVAL;
-+ break;
-+ }
-+
-+ return err;
-+}
-+
-+static int rtc_dev_release(struct inode *inode, struct file *file)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+
-+ if (rtc->ops->release)
-+ rtc->ops->release(rtc->class_dev.dev);
-+
-+ mutex_unlock(&rtc->char_lock);
-+ return 0;
-+}
-+
-+static int rtc_dev_fasync(int fd, struct file *file, int on)
-+{
-+ struct rtc_device *rtc = to_rtc_device(file->private_data);
-+ return fasync_helper(fd, file, on, &rtc->async_queue);
-+}
-+
-+static struct file_operations rtc_dev_fops = {
-+ .owner = THIS_MODULE,
-+ .llseek = no_llseek,
-+ .read = rtc_dev_read,
-+ .poll = rtc_dev_poll,
-+ .ioctl = rtc_dev_ioctl,
-+ .open = rtc_dev_open,
-+ .release = rtc_dev_release,
-+ .fasync = rtc_dev_fasync,
-+};
-+
-+/* insertion/removal hooks */
-+
-+static int rtc_dev_add_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ int err = 0;
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if (rtc->id >= RTC_DEV_MAX) {
-+ dev_err(class_dev->dev, "too many RTCs\n");
-+ return -EINVAL;
-+ }
-+
-+ mutex_init(&rtc->char_lock);
-+ spin_lock_init(&rtc->irq_lock);
-+ init_waitqueue_head(&rtc->irq_queue);
-+
-+ cdev_init(&rtc->char_dev, &rtc_dev_fops);
-+ rtc->char_dev.owner = rtc->owner;
-+
-+ if (cdev_add(&rtc->char_dev, MKDEV(MAJOR(rtc_devt), rtc->id), 1)) {
-+ cdev_del(&rtc->char_dev);
-+ dev_err(class_dev->dev,
-+ "failed to add char device %d:%d\n",
-+ MAJOR(rtc_devt), rtc->id);
-+ return -ENODEV;
-+ }
-+
-+ rtc->rtc_dev = class_device_create(rtc_dev_class, NULL,
-+ MKDEV(MAJOR(rtc_devt), rtc->id),
-+ class_dev->dev, "rtc%d", rtc->id);
-+ if (IS_ERR(rtc->rtc_dev)) {
-+ dev_err(class_dev->dev, "cannot create rtc_dev device\n");
-+ err = PTR_ERR(rtc->rtc_dev);
-+ goto err_cdev_del;
-+ }
-+
-+ dev_info(class_dev->dev, "rtc intf: dev (%d:%d)\n",
-+ MAJOR(rtc->rtc_dev->devt),
-+ MINOR(rtc->rtc_dev->devt));
-+
-+ return 0;
-+
-+err_cdev_del:
-+
-+ cdev_del(&rtc->char_dev);
-+ return err;
-+}
-+
-+static void rtc_dev_remove_device(struct class_device *class_dev,
-+ struct class_interface *class_intf)
-+{
-+ struct rtc_device *rtc = to_rtc_device(class_dev);
-+
-+ if (rtc->rtc_dev) {
-+ dev_dbg(class_dev->dev, "removing char %d:%d\n",
-+ MAJOR(rtc->rtc_dev->devt),
-+ MINOR(rtc->rtc_dev->devt));
-+
-+ class_device_unregister(rtc->rtc_dev);
-+ cdev_del(&rtc->char_dev);
-+ }
-+}
-+
-+/* interface registration */
-+
-+static struct class_interface rtc_dev_interface = {
-+ .add = &rtc_dev_add_device,
-+ .remove = &rtc_dev_remove_device,
-+};
-+
-+static int __init rtc_dev_init(void)
-+{
-+ int err;
-+
-+ rtc_dev_class = class_create(THIS_MODULE, "rtc-dev");
-+ if (IS_ERR(rtc_dev_class))
-+ return PTR_ERR(rtc_dev_class);
-+
-+ err = alloc_chrdev_region(&rtc_devt, 0, RTC_DEV_MAX, "rtc");
-+ if (err < 0) {
-+ printk(KERN_ERR "%s: failed to allocate char dev region\n",
-+ __FILE__);
-+ goto err_destroy_class;
-+ }
-+
-+ err = rtc_interface_register(&rtc_dev_interface);
-+ if (err < 0) {
-+ printk(KERN_ERR "%s: failed to register the interface\n",
-+ __FILE__);
-+ goto err_unregister_chrdev;
-+ }
-+
-+ return 0;
-+
-+err_unregister_chrdev:
-+ unregister_chrdev_region(rtc_devt, RTC_DEV_MAX);
-+
-+err_destroy_class:
-+ class_destroy(rtc_dev_class);
-+
-+ return err;
-+}
-+
-+static void __exit rtc_dev_exit(void)
-+{
-+ class_interface_unregister(&rtc_dev_interface);
-+ class_destroy(rtc_dev_class);
-+ unregister_chrdev_region(rtc_devt, RTC_DEV_MAX);
-+}
-+
-+module_init(rtc_dev_init);
-+module_exit(rtc_dev_exit);
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC class dev interface");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-x1205.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,619 @@
-+/*
-+ * An i2c driver for the Xicor/Intersil X1205 RTC
-+ * Copyright 2004 Karen Spearel
-+ * Copyright 2005 Alessandro Zummo
-+ *
-+ * please send all reports to:
-+ * Karen Spearel <kas111 at gmail dot com>
-+ * Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on a lot of other RTC drivers.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+#include <linux/delay.h>
-+
-+#define DRV_VERSION "1.0.6"
-+
-+/* Addresses to scan: none. This chip is located at
-+ * 0x6f and uses a two bytes register addressing.
-+ * Two bytes need to be written to read a single register,
-+ * while most other chips just require one and take the second
-+ * one as the data to be written. To prevent corrupting
-+ * unknown chips, the user must explicitely set the probe parameter.
-+ */
-+
-+static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+/* offsets into CCR area */
-+
-+#define CCR_SEC 0
-+#define CCR_MIN 1
-+#define CCR_HOUR 2
-+#define CCR_MDAY 3
-+#define CCR_MONTH 4
-+#define CCR_YEAR 5
-+#define CCR_WDAY 6
-+#define CCR_Y2K 7
-+
-+#define X1205_REG_SR 0x3F /* status register */
-+#define X1205_REG_Y2K 0x37
-+#define X1205_REG_DW 0x36
-+#define X1205_REG_YR 0x35
-+#define X1205_REG_MO 0x34
-+#define X1205_REG_DT 0x33
-+#define X1205_REG_HR 0x32
-+#define X1205_REG_MN 0x31
-+#define X1205_REG_SC 0x30
-+#define X1205_REG_DTR 0x13
-+#define X1205_REG_ATR 0x12
-+#define X1205_REG_INT 0x11
-+#define X1205_REG_0 0x10
-+#define X1205_REG_Y2K1 0x0F
-+#define X1205_REG_DWA1 0x0E
-+#define X1205_REG_YRA1 0x0D
-+#define X1205_REG_MOA1 0x0C
-+#define X1205_REG_DTA1 0x0B
-+#define X1205_REG_HRA1 0x0A
-+#define X1205_REG_MNA1 0x09
-+#define X1205_REG_SCA1 0x08
-+#define X1205_REG_Y2K0 0x07
-+#define X1205_REG_DWA0 0x06
-+#define X1205_REG_YRA0 0x05
-+#define X1205_REG_MOA0 0x04
-+#define X1205_REG_DTA0 0x03
-+#define X1205_REG_HRA0 0x02
-+#define X1205_REG_MNA0 0x01
-+#define X1205_REG_SCA0 0x00
-+
-+#define X1205_CCR_BASE 0x30 /* Base address of CCR */
-+#define X1205_ALM0_BASE 0x00 /* Base address of ALARM0 */
-+
-+#define X1205_SR_RTCF 0x01 /* Clock failure */
-+#define X1205_SR_WEL 0x02 /* Write Enable Latch */
-+#define X1205_SR_RWEL 0x04 /* Register Write Enable */
-+
-+#define X1205_DTR_DTR0 0x01
-+#define X1205_DTR_DTR1 0x02
-+#define X1205_DTR_DTR2 0x04
-+
-+#define X1205_HR_MIL 0x80 /* Set in ccr.hour for 24 hr mode */
-+
-+/* Prototypes */
-+static int x1205_attach(struct i2c_adapter *adapter);
-+static int x1205_detach(struct i2c_client *client);
-+static int x1205_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+static struct i2c_driver x1205_driver = {
-+ .driver = {
-+ .name = "x1205",
-+ },
-+ .attach_adapter = &x1205_attach,
-+ .detach_client = &x1205_detach,
-+};
-+
-+/*
-+ * In the routines that deal directly with the x1205 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
-+ * Epoch is initialized as 2000. Time is set to UTC.
-+ */
-+static int x1205_get_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ unsigned char reg_base)
-+{
-+ unsigned char dt_addr[2] = { 0, reg_base };
-+
-+ unsigned char buf[8];
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, dt_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 8, buf }, /* read date */
-+ };
-+
-+ /* read date registers */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw read data - sec=%02x, min=%02x, hr=%02x, "
-+ "mday=%02x, mon=%02x, year=%02x, wday=%02x, y2k=%02x\n",
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7]);
-+
-+ tm->tm_sec = BCD2BIN(buf[CCR_SEC]);
-+ tm->tm_min = BCD2BIN(buf[CCR_MIN]);
-+ tm->tm_hour = BCD2BIN(buf[CCR_HOUR] & 0x3F); /* hr is 0-23 */
-+ tm->tm_mday = BCD2BIN(buf[CCR_MDAY]);
-+ tm->tm_mon = BCD2BIN(buf[CCR_MONTH]) - 1; /* mon is 0-11 */
-+ tm->tm_year = BCD2BIN(buf[CCR_YEAR])
-+ + (BCD2BIN(buf[CCR_Y2K]) * 100) - 1900;
-+ tm->tm_wday = buf[CCR_WDAY];
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ return 0;
-+}
-+
-+static int x1205_get_status(struct i2c_client *client, unsigned char *sr)
-+{
-+ static unsigned char sr_addr[2] = { 0, X1205_REG_SR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, sr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, sr }, /* read status */
-+ };
-+
-+ /* read status register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_set_datetime(struct i2c_client *client, struct rtc_time *tm,
-+ int datetoo, u8 reg_base)
-+{
-+ int i, xfer;
-+ unsigned char buf[8];
-+
-+ static const unsigned char wel[3] = { 0, X1205_REG_SR,
-+ X1205_SR_WEL };
-+
-+ static const unsigned char rwel[3] = { 0, X1205_REG_SR,
-+ X1205_SR_WEL | X1205_SR_RWEL };
-+
-+ static const unsigned char diswe[3] = { 0, X1205_REG_SR, 0 };
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour);
-+
-+ buf[CCR_SEC] = BIN2BCD(tm->tm_sec);
-+ buf[CCR_MIN] = BIN2BCD(tm->tm_min);
-+
-+ /* set hour and 24hr bit */
-+ buf[CCR_HOUR] = BIN2BCD(tm->tm_hour) | X1205_HR_MIL;
-+
-+ /* should we also set the date? */
-+ if (datetoo) {
-+ dev_dbg(&client->dev,
-+ "%s: mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ buf[CCR_MDAY] = BIN2BCD(tm->tm_mday);
-+
-+ /* month, 1 - 12 */
-+ buf[CCR_MONTH] = BIN2BCD(tm->tm_mon + 1);
-+
-+ /* year, since the rtc epoch*/
-+ buf[CCR_YEAR] = BIN2BCD(tm->tm_year % 100);
-+ buf[CCR_WDAY] = tm->tm_wday & 0x07;
-+ buf[CCR_Y2K] = BIN2BCD(tm->tm_year / 100);
-+ }
-+
-+ /* this sequence is required to unlock the chip */
-+ if ((xfer = i2c_master_send(client, wel, 3)) != 3) {
-+ dev_err(&client->dev, "%s: wel - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ if ((xfer = i2c_master_send(client, rwel, 3)) != 3) {
-+ dev_err(&client->dev, "%s: rwel - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ /* write register's data */
-+ for (i = 0; i < (datetoo ? 8 : 3); i++) {
-+ unsigned char rdata[3] = { 0, reg_base + i, buf[i] };
-+
-+ xfer = i2c_master_send(client, rdata, 3);
-+ if (xfer != 3) {
-+ dev_err(&client->dev,
-+ "%s: xfer=%d addr=%02x, data=%02x\n",
-+ __FUNCTION__,
-+ xfer, rdata[1], rdata[2]);
-+ return -EIO;
-+ }
-+ };
-+
-+ /* disable further writes */
-+ if ((xfer = i2c_master_send(client, diswe, 3)) != 3) {
-+ dev_err(&client->dev, "%s: diswe - %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_fix_osc(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_time tm;
-+
-+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
-+
-+ if ((err = x1205_set_datetime(client, &tm, 0, X1205_CCR_BASE)) < 0)
-+ dev_err(&client->dev,
-+ "unable to restart the oscillator\n");
-+
-+ return err;
-+}
-+
-+static int x1205_get_dtrim(struct i2c_client *client, int *trim)
-+{
-+ unsigned char dtr;
-+ static unsigned char dtr_addr[2] = { 0, X1205_REG_DTR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, dtr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, &dtr }, /* read dtr */
-+ };
-+
-+ /* read dtr register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev, "%s: raw dtr=%x\n", __FUNCTION__, dtr);
-+
-+ *trim = 0;
-+
-+ if (dtr & X1205_DTR_DTR0)
-+ *trim += 20;
-+
-+ if (dtr & X1205_DTR_DTR1)
-+ *trim += 10;
-+
-+ if (dtr & X1205_DTR_DTR2)
-+ *trim = -*trim;
-+
-+ return 0;
-+}
-+
-+static int x1205_get_atrim(struct i2c_client *client, int *trim)
-+{
-+ s8 atr;
-+ static unsigned char atr_addr[2] = { 0, X1205_REG_ATR };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 2, atr_addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 1, &atr }, /* read atr */
-+ };
-+
-+ /* read atr register */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev, "%s: raw atr=%x\n", __FUNCTION__, atr);
-+
-+ /* atr is a two's complement value on 6 bits,
-+ * perform sign extension. The formula is
-+ * Catr = (atr * 0.25pF) + 11.00pF.
-+ */
-+ if (atr & 0x20)
-+ atr |= 0xC0;
-+
-+ dev_dbg(&client->dev, "%s: raw atr=%x (%d)\n", __FUNCTION__, atr, atr);
-+
-+ *trim = (atr * 250) + 11000;
-+
-+ dev_dbg(&client->dev, "%s: real=%d\n", __FUNCTION__, *trim);
-+
-+ return 0;
-+}
-+
-+struct x1205_limit
-+{
-+ unsigned char reg, mask, min, max;
-+};
-+
-+static int x1205_validate_client(struct i2c_client *client)
-+{
-+ int i, xfer;
-+
-+ /* Probe array. We will read the register at the specified
-+ * address and check if the given bits are zero.
-+ */
-+ static const unsigned char probe_zero_pattern[] = {
-+ /* register, mask */
-+ X1205_REG_SR, 0x18,
-+ X1205_REG_DTR, 0xF8,
-+ X1205_REG_ATR, 0xC0,
-+ X1205_REG_INT, 0x18,
-+ X1205_REG_0, 0xFF,
-+ };
-+
-+ static const struct x1205_limit probe_limits_pattern[] = {
-+ /* register, mask, min, max */
-+ { X1205_REG_Y2K, 0xFF, 19, 20 },
-+ { X1205_REG_DW, 0xFF, 0, 6 },
-+ { X1205_REG_YR, 0xFF, 0, 99 },
-+ { X1205_REG_MO, 0xFF, 0, 12 },
-+ { X1205_REG_DT, 0xFF, 0, 31 },
-+ { X1205_REG_HR, 0x7F, 0, 23 },
-+ { X1205_REG_MN, 0xFF, 0, 59 },
-+ { X1205_REG_SC, 0xFF, 0, 59 },
-+ { X1205_REG_Y2K1, 0xFF, 19, 20 },
-+ { X1205_REG_Y2K0, 0xFF, 19, 20 },
-+ };
-+
-+ /* check that registers have bits a 0 where expected */
-+ for (i = 0; i < ARRAY_SIZE(probe_zero_pattern); i += 2) {
-+ unsigned char buf;
-+
-+ unsigned char addr[2] = { 0, probe_zero_pattern[i] };
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, addr },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ if ((xfer = i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, probe_zero_pattern[i]);
-+
-+ return -EIO;
-+ }
-+
-+ if ((buf & probe_zero_pattern[i+1]) != 0) {
-+ dev_err(&client->adapter->dev,
-+ "%s: register=%02x, zero pattern=%d, value=%x\n",
-+ __FUNCTION__, probe_zero_pattern[i], i, buf);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ /* check limits (only registers with bcd values) */
-+ for (i = 0; i < ARRAY_SIZE(probe_limits_pattern); i++) {
-+ unsigned char reg, value;
-+
-+ unsigned char addr[2] = { 0, probe_limits_pattern[i].reg };
-+
-+ struct i2c_msg msgs[2] = {
-+ { client->addr, 0, 2, addr },
-+ { client->addr, I2C_M_RD, 1, &reg },
-+ };
-+
-+ if ((xfer = i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register %x\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg);
-+
-+ return -EIO;
-+ }
-+
-+ value = BCD2BIN(reg & probe_limits_pattern[i].mask);
-+
-+ if (value > probe_limits_pattern[i].max ||
-+ value < probe_limits_pattern[i].min) {
-+ dev_dbg(&client->adapter->dev,
-+ "%s: register=%x, lim pattern=%d, value=%d\n",
-+ __FUNCTION__, probe_limits_pattern[i].reg,
-+ i, value);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int x1205_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+ return x1205_get_datetime(to_i2c_client(dev),
-+ &alrm->time, X1205_ALM0_BASE);
-+}
-+
-+static int x1205_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+ return x1205_set_datetime(to_i2c_client(dev),
-+ &alrm->time, 1, X1205_ALM0_BASE);
-+}
-+
-+static int x1205_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return x1205_get_datetime(to_i2c_client(dev),
-+ tm, X1205_CCR_BASE);
-+}
-+
-+static int x1205_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return x1205_set_datetime(to_i2c_client(dev),
-+ tm, 1, X1205_CCR_BASE);
-+}
-+
-+static int x1205_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ int err, dtrim, atrim;
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+
-+ if ((err = x1205_get_dtrim(to_i2c_client(dev), &dtrim)) == 0)
-+ seq_printf(seq, "digital_trim\t: %d ppm\n", dtrim);
-+
-+ if ((err = x1205_get_atrim(to_i2c_client(dev), &atrim)) == 0)
-+ seq_printf(seq, "analog_trim\t: %d.%02d pF\n",
-+ atrim / 1000, atrim % 1000);
-+ return 0;
-+}
-+
-+static struct rtc_class_ops x1205_rtc_ops = {
-+ .proc = x1205_rtc_proc,
-+ .read_time = x1205_rtc_read_time,
-+ .set_time = x1205_rtc_set_time,
-+ .read_alarm = x1205_rtc_read_alarm,
-+ .set_alarm = x1205_rtc_set_alarm,
-+};
-+
-+static ssize_t x1205_sysfs_show_atrim(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int atrim;
-+
-+ if (x1205_get_atrim(to_i2c_client(dev), &atrim) == 0)
-+ return sprintf(buf, "%d.%02d pF\n",
-+ atrim / 1000, atrim % 1000);
-+ return 0;
-+}
-+static DEVICE_ATTR(atrim, S_IRUGO, x1205_sysfs_show_atrim, NULL);
-+
-+static ssize_t x1205_sysfs_show_dtrim(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int dtrim;
-+
-+ if (x1205_get_dtrim(to_i2c_client(dev), &dtrim) == 0)
-+ return sprintf(buf, "%d ppm\n", dtrim);
-+
-+ return 0;
-+}
-+static DEVICE_ATTR(dtrim, S_IRUGO, x1205_sysfs_show_dtrim, NULL);
-+
-+static int x1205_attach(struct i2c_adapter *adapter)
-+{
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+ return i2c_probe(adapter, &addr_data, x1205_probe);
-+}
-+
-+static int x1205_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ int err = 0;
-+ unsigned char sr;
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ /* I2C client */
-+ client->addr = address;
-+ client->driver = &x1205_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, x1205_driver.driver.name, I2C_NAME_SIZE);
-+
-+ /* Verify the chip is really an X1205 */
-+ if (kind < 0) {
-+ if (x1205_validate_client(client) < 0) {
-+ err = -ENODEV;
-+ goto exit_kfree;
-+ }
-+ }
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(x1205_driver.driver.name, &client->dev,
-+ &x1205_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ /* Check for power failures and eventualy enable the osc */
-+ if ((err = x1205_get_status(client, &sr)) == 0) {
-+ if (sr & X1205_SR_RTCF) {
-+ dev_err(&client->dev,
-+ "power failure detected, "
-+ "please set the clock\n");
-+ udelay(50);
-+ x1205_fix_osc(client);
-+ }
-+ }
-+ else
-+ dev_err(&client->dev, "couldn't read status\n");
-+
-+ device_create_file(&client->dev, &dev_attr_atrim);
-+ device_create_file(&client->dev, &dev_attr_dtrim);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int x1205_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int __init x1205_init(void)
-+{
-+ return i2c_add_driver(&x1205_driver);
-+}
-+
-+static void __exit x1205_exit(void)
-+{
-+ i2c_del_driver(&x1205_driver);
-+}
-+
-+MODULE_AUTHOR(
-+ "Karen Spearel <kas111 at gmail dot com>, "
-+ "Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Xicor/Intersil X1205 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(x1205_init);
-+module_exit(x1205_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-test.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,205 @@
-+/*
-+ * An RTC test device/driver
-+ * Copyright (C) 2005 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/err.h>
-+#include <linux/rtc.h>
-+#include <linux/platform_device.h>
-+
-+static struct platform_device *test0 = NULL, *test1 = NULL;
-+
-+static int test_rtc_read_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_set_alarm(struct device *dev,
-+ struct rtc_wkalrm *alrm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_read_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ rtc_time_to_tm(get_seconds(), tm);
-+ return 0;
-+}
-+
-+static int test_rtc_set_time(struct device *dev,
-+ struct rtc_time *tm)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ return 0;
-+}
-+
-+static int test_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ struct platform_device *plat_dev = to_platform_device(dev);
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+ seq_printf(seq, "test\t\t: yes\n");
-+ seq_printf(seq, "id\t\t: %d\n", plat_dev->id);
-+
-+ return 0;
-+}
-+
-+static int test_rtc_ioctl(struct device *dev, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ /* We do support interrupts, they're generated
-+ * using the sysfs interface.
-+ */
-+ switch (cmd) {
-+ case RTC_PIE_ON:
-+ case RTC_PIE_OFF:
-+ case RTC_UIE_ON:
-+ case RTC_UIE_OFF:
-+ case RTC_AIE_ON:
-+ case RTC_AIE_OFF:
-+ return 0;
-+
-+ default:
-+ return -EINVAL;
-+ }
-+}
-+
-+static struct rtc_class_ops test_rtc_ops = {
-+ .proc = test_rtc_proc,
-+ .read_time = test_rtc_read_time,
-+ .set_time = test_rtc_set_time,
-+ .read_alarm = test_rtc_read_alarm,
-+ .set_alarm = test_rtc_set_alarm,
-+ .set_mmss = test_rtc_set_mmss,
-+ .ioctl = test_rtc_ioctl,
-+};
-+
-+static ssize_t test_irq_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ return sprintf(buf, "%d\n", 42);
-+}
-+static ssize_t test_irq_store(struct device *dev,
-+ struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ int retval;
-+ struct platform_device *plat_dev = to_platform_device(dev);
-+ struct rtc_device *rtc = platform_get_drvdata(plat_dev);
-+
-+ retval = count;
-+ if (strncmp(buf, "tick", 4) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF);
-+ else if (strncmp(buf, "alarm", 5) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_AF | RTC_IRQF);
-+ else if (strncmp(buf, "update", 6) == 0)
-+ rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF);
-+ else
-+ retval = -EINVAL;
-+
-+ return retval;
-+}
-+static DEVICE_ATTR(irq, S_IRUGO | S_IWUSR, test_irq_show, test_irq_store);
-+
-+static int test_probe(struct platform_device *plat_dev)
-+{
-+ int err;
-+ struct rtc_device *rtc = rtc_device_register("test", &plat_dev->dev,
-+ &test_rtc_ops, THIS_MODULE);
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&plat_dev->dev,
-+ "unable to register the class device\n");
-+ return err;
-+ }
-+ device_create_file(&plat_dev->dev, &dev_attr_irq);
-+
-+ platform_set_drvdata(plat_dev, rtc);
-+
-+ return 0;
-+}
-+
-+static int __devexit test_remove(struct platform_device *plat_dev)
-+{
-+ struct rtc_device *rtc = platform_get_drvdata(plat_dev);
-+
-+ rtc_device_unregister(rtc);
-+ device_remove_file(&plat_dev->dev, &dev_attr_irq);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver test_drv = {
-+ .probe = test_probe,
-+ .remove = __devexit_p(test_remove),
-+ .driver = {
-+ .name = "rtc-test",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static int __init test_init(void)
-+{
-+ int err;
-+
-+ if ((err = platform_driver_register(&test_drv)))
-+ return err;
-+
-+ if ((test0 = platform_device_alloc("rtc-test", 0)) == NULL) {
-+ err = -ENOMEM;
-+ goto exit_driver_unregister;
-+ }
-+
-+ if ((test1 = platform_device_alloc("rtc-test", 1)) == NULL) {
-+ err = -ENOMEM;
-+ goto exit_free_test0;
-+ }
-+
-+ if ((err = platform_device_add(test0)))
-+ goto exit_free_test1;
-+
-+ if ((err = platform_device_add(test1)))
-+ goto exit_device_unregister;
-+
-+ return 0;
-+
-+exit_device_unregister:
-+ platform_device_unregister(test0);
-+
-+exit_free_test1:
-+ platform_device_put(test1);
-+
-+exit_free_test0:
-+ platform_device_put(test0);
-+
-+exit_driver_unregister:
-+ platform_driver_unregister(&test_drv);
-+ return err;
-+}
-+
-+static void __exit test_exit(void)
-+{
-+ platform_device_unregister(test0);
-+ platform_device_unregister(test1);
-+ platform_driver_unregister(&test_drv);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("RTC test driver/device");
-+MODULE_LICENSE("GPL");
-+
-+module_init(test_init);
-+module_exit(test_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-ds1672.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,233 @@
-+/*
-+ * An rtc/i2c driver for the Dallas DS1672
-+ * Copyright 2005 Alessandro Zummo
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/i2c.h>
-+#include <linux/rtc.h>
-+
-+#define DRV_VERSION "0.2"
-+
-+/* Addresses to scan: none. This chip cannot be detected. */
-+static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+/* Registers */
-+
-+#define DS1672_REG_CNT_BASE 0
-+#define DS1672_REG_CONTROL 4
-+#define DS1672_REG_TRICKLE 5
-+
-+
-+/* Prototypes */
-+static int ds1672_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+/*
-+ * In the routines that deal directly with the ds1672 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch
-+ * Epoch is initialized as 2000. Time is set to UTC.
-+ */
-+static int ds1672_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned long time;
-+ unsigned char addr = DS1672_REG_CNT_BASE;
-+ unsigned char buf[4];
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &addr }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 4, buf }, /* read date */
-+ };
-+
-+ /* read date registers */
-+ if ((i2c_transfer(client->adapter, &msgs[0], 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw read data - counters=%02x,%02x,%02x,%02x\n"
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3]);
-+
-+ time = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
-+
-+ rtc_time_to_tm(time, tm);
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ return 0;
-+}
-+
-+static int ds1672_set_mmss(struct i2c_client *client, unsigned long secs)
-+{
-+ int xfer;
-+ unsigned char buf[5];
-+
-+ buf[0] = DS1672_REG_CNT_BASE;
-+ buf[1] = secs & 0x000000FF;
-+ buf[2] = (secs & 0x0000FF00) >> 8;
-+ buf[3] = (secs & 0x00FF0000) >> 16;
-+ buf[4] = (secs & 0xFF000000) >> 24;
-+
-+ xfer = i2c_master_send(client, buf, 5);
-+ if (xfer != 5) {
-+ dev_err(&client->dev, "%s: send: %d\n", __FUNCTION__, xfer);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int ds1672_set_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned long secs;
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d, ",
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ rtc_tm_to_time(tm, &secs);
-+
-+ return ds1672_set_mmss(client, secs);
-+}
-+
-+static int ds1672_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return ds1672_get_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int ds1672_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return ds1672_set_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int ds1672_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ return ds1672_set_mmss(to_i2c_client(dev), secs);
-+}
-+
-+static struct rtc_class_ops ds1672_rtc_ops = {
-+ .read_time = ds1672_rtc_read_time,
-+ .set_time = ds1672_rtc_set_time,
-+ .set_mmss = ds1672_rtc_set_mmss,
-+};
-+
-+static int ds1672_attach(struct i2c_adapter *adapter)
-+{
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+ return i2c_probe(adapter, &addr_data, ds1672_probe);
-+}
-+
-+static int ds1672_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static struct i2c_driver ds1672_driver = {
-+ .driver = {
-+ .name = "ds1672",
-+ },
-+ .attach_adapter = &ds1672_attach,
-+ .detach_client = &ds1672_detach,
-+};
-+
-+static int ds1672_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ int err = 0;
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ /* I2C client */
-+ client->addr = address;
-+ client->driver = &ds1672_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, ds1672_driver.driver.name, I2C_NAME_SIZE);
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(ds1672_driver.driver.name, &client->dev,
-+ &ds1672_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int __init ds1672_init(void)
-+{
-+ return i2c_add_driver(&ds1672_driver);
-+}
-+
-+static void __exit ds1672_exit(void)
-+{
-+ i2c_del_driver(&ds1672_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Dallas/Maxim DS1672 timekeeper driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ds1672_init);
-+module_exit(ds1672_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-pcf8563.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,355 @@
-+/*
-+ * An I2C driver for the Philips PCF8563 RTC
-+ * Copyright 2005-06 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * based on the other drivers in this same directory.
-+ *
-+ * http://www.semiconductors.philips.com/acrobat/datasheets/PCF8563-04.pdf
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/bcd.h>
-+#include <linux/rtc.h>
-+
-+#define DRV_VERSION "0.4.2"
-+
-+/* Addresses to scan: none
-+ * This chip cannot be reliably autodetected. An empty eeprom
-+ * located at 0x51 will pass the validation routine due to
-+ * the way the registers are implemented.
-+ */
-+static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+
-+/* Module parameters */
-+I2C_CLIENT_INSMOD;
-+
-+#define PCF8563_REG_ST1 0x00 /* status */
-+#define PCF8563_REG_ST2 0x01
-+
-+#define PCF8563_REG_SC 0x02 /* datetime */
-+#define PCF8563_REG_MN 0x03
-+#define PCF8563_REG_HR 0x04
-+#define PCF8563_REG_DM 0x05
-+#define PCF8563_REG_DW 0x06
-+#define PCF8563_REG_MO 0x07
-+#define PCF8563_REG_YR 0x08
-+
-+#define PCF8563_REG_AMN 0x09 /* alarm */
-+#define PCF8563_REG_AHR 0x0A
-+#define PCF8563_REG_ADM 0x0B
-+#define PCF8563_REG_ADW 0x0C
-+
-+#define PCF8563_REG_CLKO 0x0D /* clock out */
-+#define PCF8563_REG_TMRC 0x0E /* timer control */
-+#define PCF8563_REG_TMR 0x0F /* timer */
-+
-+#define PCF8563_SC_LV 0x80 /* low voltage */
-+#define PCF8563_MO_C 0x80 /* century */
-+
-+/* Prototypes */
-+static int pcf8563_attach(struct i2c_adapter *adapter);
-+static int pcf8563_detach(struct i2c_client *client);
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+static struct i2c_driver pcf8563_driver = {
-+ .driver = {
-+ .name = "pcf8563",
-+ },
-+ .attach_adapter = &pcf8563_attach,
-+ .detach_client = &pcf8563_detach,
-+};
-+
-+/*
-+ * In the routines that deal directly with the pcf8563 hardware, we use
-+ * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
-+ */
-+static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned char buf[13] = { PCF8563_REG_ST1 };
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, buf }, /* setup read ptr */
-+ { client->addr, I2C_M_RD, 13, buf }, /* read status + date */
-+ };
-+
-+ /* read registers */
-+ if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ if (buf[PCF8563_REG_SC] & PCF8563_SC_LV)
-+ dev_info(&client->dev,
-+ "low voltage detected, date/time is not reliable.\n");
-+
-+ dev_dbg(&client->dev,
-+ "%s: raw data is st1=%02x, st2=%02x, sec=%02x, min=%02x, hr=%02x, "
-+ "mday=%02x, wday=%02x, mon=%02x, year=%02x\n",
-+ __FUNCTION__,
-+ buf[0], buf[1], buf[2], buf[3],
-+ buf[4], buf[5], buf[6], buf[7],
-+ buf[8]);
-+
-+
-+ tm->tm_sec = BCD2BIN(buf[PCF8563_REG_SC] & 0x7F);
-+ tm->tm_min = BCD2BIN(buf[PCF8563_REG_MN] & 0x7F);
-+ tm->tm_hour = BCD2BIN(buf[PCF8563_REG_HR] & 0x3F); /* rtc hr 0-23 */
-+ tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F);
-+ tm->tm_wday = buf[PCF8563_REG_DW] & 0x07;
-+ tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */
-+ tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR])
-+ + (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 100 : 0);
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ /* the clock can give out invalid datetime, but we cannot return
-+ * -EINVAL otherwise hwclock will refuse to set the time on bootup.
-+ */
-+ if (rtc_valid_tm(tm) < 0)
-+ dev_err(&client->dev, "retrieved date/time is not valid.\n");
-+
-+ return 0;
-+}
-+
-+static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ int i, err;
-+ unsigned char buf[9];
-+
-+ dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ /* hours, minutes and seconds */
-+ buf[PCF8563_REG_SC] = BIN2BCD(tm->tm_sec);
-+ buf[PCF8563_REG_MN] = BIN2BCD(tm->tm_min);
-+ buf[PCF8563_REG_HR] = BIN2BCD(tm->tm_hour);
-+
-+ buf[PCF8563_REG_DM] = BIN2BCD(tm->tm_mday);
-+
-+ /* month, 1 - 12 */
-+ buf[PCF8563_REG_MO] = BIN2BCD(tm->tm_mon + 1);
-+
-+ /* year and century */
-+ buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100);
-+ if (tm->tm_year / 100)
-+ buf[PCF8563_REG_MO] |= PCF8563_MO_C;
-+
-+ buf[PCF8563_REG_DW] = tm->tm_wday & 0x07;
-+
-+ /* write register's data */
-+ for (i = 0; i < 7; i++) {
-+ unsigned char data[2] = { PCF8563_REG_SC + i,
-+ buf[PCF8563_REG_SC + i] };
-+
-+ err = i2c_master_send(client, data, sizeof(data));
-+ if (err != sizeof(data)) {
-+ dev_err(&client->dev,
-+ "%s: err=%d addr=%02x, data=%02x\n",
-+ __FUNCTION__, err, data[0], data[1]);
-+ return -EIO;
-+ }
-+ };
-+
-+ return 0;
-+}
-+
-+struct pcf8563_limit
-+{
-+ unsigned char reg;
-+ unsigned char mask;
-+ unsigned char min;
-+ unsigned char max;
-+};
-+
-+static int pcf8563_validate_client(struct i2c_client *client)
-+{
-+ int i;
-+
-+ static const struct pcf8563_limit pattern[] = {
-+ /* register, mask, min, max */
-+ { PCF8563_REG_SC, 0x7F, 0, 59 },
-+ { PCF8563_REG_MN, 0x7F, 0, 59 },
-+ { PCF8563_REG_HR, 0x3F, 0, 23 },
-+ { PCF8563_REG_DM, 0x3F, 0, 31 },
-+ { PCF8563_REG_MO, 0x1F, 0, 12 },
-+ };
-+
-+ /* check limits (only registers with bcd values) */
-+ for (i = 0; i < ARRAY_SIZE(pattern); i++) {
-+ int xfer;
-+ unsigned char value;
-+ unsigned char buf = pattern[i].reg;
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &buf },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ xfer = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
-+
-+ if (xfer != ARRAY_SIZE(msgs)) {
-+ dev_err(&client->adapter->dev,
-+ "%s: could not read register 0x%02X\n",
-+ __FUNCTION__, pattern[i].reg);
-+
-+ return -EIO;
-+ }
-+
-+ value = BCD2BIN(buf & pattern[i].mask);
-+
-+ if (value > pattern[i].max ||
-+ value < pattern[i].min) {
-+ dev_dbg(&client->adapter->dev,
-+ "%s: pattern=%d, reg=%x, mask=0x%02x, min=%d, "
-+ "max=%d, value=%d, raw=0x%02X\n",
-+ __FUNCTION__, i, pattern[i].reg, pattern[i].mask,
-+ pattern[i].min, pattern[i].max,
-+ value, buf);
-+
-+ return -ENODEV;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static int pcf8563_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return pcf8563_get_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int pcf8563_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return pcf8563_set_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int pcf8563_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+ return 0;
-+}
-+
-+static struct rtc_class_ops pcf8563_rtc_ops = {
-+ .proc = pcf8563_rtc_proc,
-+ .read_time = pcf8563_rtc_read_time,
-+ .set_time = pcf8563_rtc_set_time,
-+};
-+
-+static int pcf8563_attach(struct i2c_adapter *adapter)
-+{
-+ return i2c_probe(adapter, &addr_data, pcf8563_probe);
-+}
-+
-+static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ int err = 0;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ client->addr = address;
-+ client->driver = &pcf8563_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, pcf8563_driver.driver.name, I2C_NAME_SIZE);
-+
-+ /* Verify the chip is really an PCF8563 */
-+ if (kind < 0) {
-+ if (pcf8563_validate_client(client) < 0) {
-+ err = -ENODEV;
-+ goto exit_kfree;
-+ }
-+ }
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(pcf8563_driver.driver.name, &client->dev,
-+ &pcf8563_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int pcf8563_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int __init pcf8563_init(void)
-+{
-+ return i2c_add_driver(&pcf8563_driver);
-+}
-+
-+static void __exit pcf8563_exit(void)
-+{
-+ i2c_del_driver(&pcf8563_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Philips PCF8563/Epson RTC8564 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(pcf8563_init);
-+module_exit(pcf8563_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-rs5c372.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,295 @@
-+/*
-+ * An I2C driver for the Ricoh RS5C372 RTC
-+ *
-+ * Copyright (C) 2005 Pavel Mironchik pmironchik@optifacio.net
-+ * Copyright (C) 2006 Tower Technologies
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/rtc.h>
-+#include <linux/bcd.h>
-+
-+#define DRV_VERSION "0.2"
-+
-+/* Addresses to scan */
-+static unsigned short normal_i2c[] = { /* 0x32,*/ I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+#define RS5C372_REG_SECS 0
-+#define RS5C372_REG_MINS 1
-+#define RS5C372_REG_HOURS 2
-+#define RS5C372_REG_WDAY 3
-+#define RS5C372_REG_DAY 4
-+#define RS5C372_REG_MONTH 5
-+#define RS5C372_REG_YEAR 6
-+#define RS5C372_REG_TRIM 7
-+
-+#define RS5C372_TRIM_XSL 0x80
-+#define RS5C372_TRIM_MASK 0x7F
-+
-+#define RS5C372_REG_BASE 0
-+
-+static int rs5c372_attach(struct i2c_adapter *adapter);
-+static int rs5c372_detach(struct i2c_client *client);
-+static int rs5c372_probe(struct i2c_adapter *adapter, int address, int kind);
-+
-+static struct i2c_driver rs5c372_driver = {
-+ .driver = {
-+ .name = "rs5c372",
-+ },
-+ .attach_adapter = &rs5c372_attach,
-+ .detach_client = &rs5c372_detach,
-+};
-+
-+static int rs5c372_get_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned char buf[7] = { RS5C372_REG_BASE };
-+
-+ /* this implements the 1st reading method, according
-+ * to the datasheet. buf[0] is initialized with
-+ * address ptr and transmission format register.
-+ */
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, buf },
-+ { client->addr, I2C_M_RD, 7, buf },
-+ };
-+
-+ if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ tm->tm_sec = BCD2BIN(buf[RS5C372_REG_SECS] & 0x7f);
-+ tm->tm_min = BCD2BIN(buf[RS5C372_REG_MINS] & 0x7f);
-+ tm->tm_hour = BCD2BIN(buf[RS5C372_REG_HOURS] & 0x3f);
-+ tm->tm_wday = BCD2BIN(buf[RS5C372_REG_WDAY] & 0x07);
-+ tm->tm_mday = BCD2BIN(buf[RS5C372_REG_DAY] & 0x3f);
-+
-+ /* tm->tm_mon is zero-based */
-+ tm->tm_mon = BCD2BIN(buf[RS5C372_REG_MONTH] & 0x1f) - 1;
-+
-+ /* year is 1900 + tm->tm_year */
-+ tm->tm_year = BCD2BIN(buf[RS5C372_REG_YEAR]) + 100;
-+
-+ dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__,
-+ tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ return 0;
-+}
-+
-+static int rs5c372_set_datetime(struct i2c_client *client, struct rtc_time *tm)
-+{
-+ unsigned char buf[8] = { RS5C372_REG_BASE };
-+
-+ dev_dbg(&client->dev,
-+ "%s: secs=%d, mins=%d, hours=%d ",
-+ "mday=%d, mon=%d, year=%d, wday=%d\n",
-+ __FUNCTION__, tm->tm_sec, tm->tm_min, tm->tm_hour,
-+ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
-+
-+ buf[1] = BIN2BCD(tm->tm_sec);
-+ buf[2] = BIN2BCD(tm->tm_min);
-+ buf[3] = BIN2BCD(tm->tm_hour);
-+ buf[4] = BIN2BCD(tm->tm_wday);
-+ buf[5] = BIN2BCD(tm->tm_mday);
-+ buf[6] = BIN2BCD(tm->tm_mon + 1);
-+ buf[7] = BIN2BCD(tm->tm_year - 100);
-+
-+ if ((i2c_master_send(client, buf, 8)) != 8) {
-+ dev_err(&client->dev, "%s: write error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ return 0;
-+}
-+
-+static int rs5c372_get_trim(struct i2c_client *client, int *osc, int *trim)
-+{
-+ unsigned char buf = RS5C372_REG_TRIM;
-+
-+ struct i2c_msg msgs[] = {
-+ { client->addr, 0, 1, &buf },
-+ { client->addr, I2C_M_RD, 1, &buf },
-+ };
-+
-+ if ((i2c_transfer(client->adapter, msgs, 2)) != 2) {
-+ dev_err(&client->dev, "%s: read error\n", __FUNCTION__);
-+ return -EIO;
-+ }
-+
-+ dev_dbg(&client->dev, "%s: raw trim=%x\n", __FUNCTION__, trim);
-+
-+ if (osc)
-+ *osc = (buf & RS5C372_TRIM_XSL) ? 32000 : 32768;
-+
-+ if (trim)
-+ *trim = buf & RS5C372_TRIM_MASK;
-+
-+ return 0;
-+}
-+
-+static int rs5c372_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return rs5c372_get_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int rs5c372_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ return rs5c372_set_datetime(to_i2c_client(dev), tm);
-+}
-+
-+static int rs5c372_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ int err, osc, trim;
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+
-+ if ((err = rs5c372_get_trim(to_i2c_client(dev), &osc, &trim)) == 0) {
-+ seq_printf(seq, "%d.%03d KHz\n", osc / 1000, osc % 1000);
-+ seq_printf(seq, "trim\t: %d\n", trim);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct rtc_class_ops rs5c372_rtc_ops = {
-+ .proc = rs5c372_rtc_proc,
-+ .read_time = rs5c372_rtc_read_time,
-+ .set_time = rs5c372_rtc_set_time,
-+};
-+
-+static ssize_t rs5c372_sysfs_show_trim(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int trim;
-+
-+ if (rs5c372_get_trim(to_i2c_client(dev), NULL, &trim) == 0)
-+ return sprintf(buf, "0x%2x\n", trim);
-+
-+ return 0;
-+}
-+static DEVICE_ATTR(trim, S_IRUGO, rs5c372_sysfs_show_trim, NULL);
-+
-+static ssize_t rs5c372_sysfs_show_osc(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ int osc;
-+
-+ if (rs5c372_get_trim(to_i2c_client(dev), &osc, NULL) == 0)
-+ return sprintf(buf, "%d.%03d KHz\n", osc / 1000, osc % 1000);
-+
-+ return 0;
-+}
-+static DEVICE_ATTR(osc, S_IRUGO, rs5c372_sysfs_show_osc, NULL);
-+
-+static int rs5c372_attach(struct i2c_adapter *adapter)
-+{
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+ return i2c_probe(adapter, &addr_data, rs5c372_probe);
-+}
-+
-+static int rs5c372_probe(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ int err = 0;
-+ struct i2c_client *client;
-+ struct rtc_device *rtc;
-+
-+ dev_dbg(&adapter->dev, "%s\n", __FUNCTION__);
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) {
-+ err = -ENODEV;
-+ goto exit;
-+ }
-+
-+ if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ /* I2C client */
-+ client->addr = address;
-+ client->driver = &rs5c372_driver;
-+ client->adapter = adapter;
-+
-+ strlcpy(client->name, rs5c372_driver.driver.name, I2C_NAME_SIZE);
-+
-+ /* Inform the i2c layer */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_kfree;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ rtc = rtc_device_register(rs5c372_driver.driver.name, &client->dev,
-+ &rs5c372_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ err = PTR_ERR(rtc);
-+ dev_err(&client->dev,
-+ "unable to register the class device\n");
-+ goto exit_detach;
-+ }
-+
-+ i2c_set_clientdata(client, rtc);
-+
-+ device_create_file(&client->dev, &dev_attr_trim);
-+ device_create_file(&client->dev, &dev_attr_osc);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+
-+exit_kfree:
-+ kfree(client);
-+
-+exit:
-+ return err;
-+}
-+
-+static int rs5c372_detach(struct i2c_client *client)
-+{
-+ int err;
-+ struct rtc_device *rtc = i2c_get_clientdata(client);
-+
-+ dev_dbg(&client->dev, "%s\n", __FUNCTION__);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static __init int rs5c372_init(void)
-+{
-+ return i2c_add_driver(&rs5c372_driver);
-+}
-+
-+static __exit void rs5c372_exit(void)
-+{
-+ i2c_del_driver(&rs5c372_driver);
-+}
-+
-+module_init(rs5c372_init);
-+module_exit(rs5c372_exit);
-+
-+MODULE_AUTHOR(
-+ "Pavel Mironchik <pmironchik@optifacio.net>, "
-+ "Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("Ricoh RS5C372 RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-ep93xx.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,163 @@
-+/*
-+ * A driver for the RTC embedded in the Cirrus Logic EP93XX processors
-+ * Copyright (c) 2006 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/platform_device.h>
-+#include <asm/hardware.h>
-+
-+#define EP93XX_RTC_REG(x) (EP93XX_RTC_BASE + (x))
-+#define EP93XX_RTC_DATA EP93XX_RTC_REG(0x0000)
-+#define EP93XX_RTC_LOAD EP93XX_RTC_REG(0x000C)
-+#define EP93XX_RTC_SWCOMP EP93XX_RTC_REG(0x0108)
-+
-+#define DRV_VERSION "0.2"
-+
-+static int ep93xx_get_swcomp(struct device *dev, unsigned short *preload,
-+ unsigned short *delete)
-+{
-+ unsigned short comp = __raw_readl(EP93XX_RTC_SWCOMP);
-+
-+ if (preload)
-+ *preload = comp & 0xffff;
-+
-+ if (delete)
-+ *delete = (comp >> 16) & 0x1f;
-+
-+ return 0;
-+}
-+
-+static int ep93xx_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ unsigned long time = __raw_readl(EP93XX_RTC_DATA);
-+
-+ rtc_time_to_tm(time, tm);
-+ return 0;
-+}
-+
-+static int ep93xx_rtc_set_mmss(struct device *dev, unsigned long secs)
-+{
-+ __raw_writel(secs + 1, EP93XX_RTC_LOAD);
-+ return 0;
-+}
-+
-+static int ep93xx_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ int err;
-+ unsigned long secs;
-+
-+ err = rtc_tm_to_time(tm, &secs);
-+ if (err != 0)
-+ return err;
-+
-+ return ep93xx_rtc_set_mmss(dev, secs);
-+}
-+
-+static int ep93xx_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ unsigned short preload, delete;
-+
-+ ep93xx_get_swcomp(dev, &preload, &delete);
-+
-+ seq_printf(seq, "24hr\t\t: yes\n");
-+ seq_printf(seq, "preload\t\t: %d\n", preload);
-+ seq_printf(seq, "delete\t\t: %d\n", delete);
-+
-+ return 0;
-+}
-+
-+static struct rtc_class_ops ep93xx_rtc_ops = {
-+ .read_time = ep93xx_rtc_read_time,
-+ .set_time = ep93xx_rtc_set_time,
-+ .set_mmss = ep93xx_rtc_set_mmss,
-+ .proc = ep93xx_rtc_proc,
-+};
-+
-+static ssize_t ep93xx_sysfs_show_comp_preload(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ unsigned short preload;
-+
-+ ep93xx_get_swcomp(dev, &preload, NULL);
-+
-+ return sprintf(buf, "%d\n", preload);
-+}
-+static DEVICE_ATTR(comp_preload, S_IRUGO, ep93xx_sysfs_show_comp_preload, NULL);
-+
-+static ssize_t ep93xx_sysfs_show_comp_delete(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ unsigned short delete;
-+
-+ ep93xx_get_swcomp(dev, NULL, &delete);
-+
-+ return sprintf(buf, "%d\n", delete);
-+}
-+static DEVICE_ATTR(comp_delete, S_IRUGO, ep93xx_sysfs_show_comp_delete, NULL);
-+
-+
-+static int __devinit ep93xx_rtc_probe(struct platform_device *dev)
-+{
-+ struct rtc_device *rtc = rtc_device_register("ep93xx",
-+ &dev->dev, &ep93xx_rtc_ops, THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ dev_err(&dev->dev, "unable to register\n");
-+ return PTR_ERR(rtc);
-+ }
-+
-+ platform_set_drvdata(dev, rtc);
-+
-+ device_create_file(&dev->dev, &dev_attr_comp_preload);
-+ device_create_file(&dev->dev, &dev_attr_comp_delete);
-+
-+ return 0;
-+}
-+
-+static int __devexit ep93xx_rtc_remove(struct platform_device *dev)
-+{
-+ struct rtc_device *rtc = platform_get_drvdata(dev);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ platform_set_drvdata(dev, NULL);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver ep93xx_rtc_platform_driver = {
-+ .driver = {
-+ .name = "ep93xx-rtc",
-+ .owner = THIS_MODULE,
-+ },
-+ .probe = ep93xx_rtc_probe,
-+ .remove = __devexit_p(ep93xx_rtc_remove),
-+};
-+
-+static int __init ep93xx_rtc_init(void)
-+{
-+ return platform_driver_register(&ep93xx_rtc_platform_driver);
-+}
-+
-+static void __exit ep93xx_rtc_exit(void)
-+{
-+ platform_driver_unregister(&ep93xx_rtc_platform_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("EP93XX RTC driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ep93xx_rtc_init);
-+module_exit(ep93xx_rtc_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/rtc/rtc-sa1100.c 2006-03-08 01:59:26.000000000 +0100
-@@ -0,0 +1,392 @@
-+/*
-+ * Real Time Clock interface for StrongARM SA1x00 and XScale PXA2xx
-+ *
-+ * Copyright (c) 2000 Nils Faerber
-+ *
-+ * Based on rtc.c by Paul Gortmaker
-+ *
-+ * Original Driver by Nils Faerber <nils@kernelconcepts.de>
-+ *
-+ * Modifications from:
-+ * CIH <cih@coventive.com>
-+ * Nicolas Pitre <nico@cam.org>
-+ * Andrew Christian <andrew.christian@hp.com>
-+ *
-+ * Converted to the RTC subsystem and Driver Model
-+ * by Richard Purdie <rpurdie@rpsys.net>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version. *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/platform_device.h>
-+#include <linux/module.h>
-+#include <linux/rtc.h>
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/string.h>
-+#include <linux/pm.h>
-+
-+#include <asm/bitops.h>
-+#include <asm/hardware.h>
-+#include <asm/irq.h>
-+#include <asm/rtc.h>
-+
-+#ifdef CONFIG_ARCH_PXA
-+#include <asm/arch/pxa-regs.h>
-+#endif
-+
-+#define TIMER_FREQ CLOCK_TICK_RATE
-+#define RTC_DEF_DIVIDER 32768 - 1
-+#define RTC_DEF_TRIM 0
-+
-+static unsigned long rtc_freq = 1024;
-+static struct rtc_time rtc_alarm;
-+static spinlock_t sa1100_rtc_lock = SPIN_LOCK_UNLOCKED;
-+
-+static int rtc_update_alarm(struct rtc_time *alrm)
-+{
-+ struct rtc_time alarm_tm, now_tm;
-+ unsigned long now, time;
-+ int ret;
-+
-+ do {
-+ now = RCNR;
-+ rtc_time_to_tm(now, &now_tm);
-+ rtc_next_alarm_time(&alarm_tm, &now_tm, alrm);
-+ ret = rtc_tm_to_time(&alarm_tm, &time);
-+ if (ret != 0)
-+ break;
-+
-+ RTSR = RTSR & (RTSR_HZE|RTSR_ALE|RTSR_AL);
-+ RTAR = time;
-+ } while (now != RCNR);
-+
-+ return ret;
-+}
-+
-+static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id,
-+ struct pt_regs *regs)
-+{
-+ struct platform_device *pdev = to_platform_device(dev_id);
-+ struct rtc_device *rtc = platform_get_drvdata(pdev);
-+ unsigned int rtsr;
-+ unsigned long events = 0;
-+
-+ spin_lock(&sa1100_rtc_lock);
-+
-+ rtsr = RTSR;
-+ /* clear interrupt sources */
-+ RTSR = 0;
-+ RTSR = (RTSR_AL | RTSR_HZ) & (rtsr >> 2);
-+
-+ /* clear alarm interrupt if it has occurred */
-+ if (rtsr & RTSR_AL)
-+ rtsr &= ~RTSR_ALE;
-+ RTSR = rtsr & (RTSR_ALE | RTSR_HZE);
-+
-+ /* update irq data & counter */
-+ if (rtsr & RTSR_AL)
-+ events |= RTC_AF | RTC_IRQF;
-+ if (rtsr & RTSR_HZ)
-+ events |= RTC_UF | RTC_IRQF;
-+
-+ rtc_update_irq(&rtc->class_dev, 1, events);
-+
-+ if (rtsr & RTSR_AL && rtc_periodic_alarm(&rtc_alarm))
-+ rtc_update_alarm(&rtc_alarm);
-+
-+ spin_unlock(&sa1100_rtc_lock);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int rtc_timer1_count;
-+
-+static irqreturn_t timer1_interrupt(int irq, void *dev_id,
-+ struct pt_regs *regs)
-+{
-+ struct platform_device *pdev = to_platform_device(dev_id);
-+ struct rtc_device *rtc = platform_get_drvdata(pdev);
-+
-+ /*
-+ * If we match for the first time, rtc_timer1_count will be 1.
-+ * Otherwise, we wrapped around (very unlikely but
-+ * still possible) so compute the amount of missed periods.
-+ * The match reg is updated only when the data is actually retrieved
-+ * to avoid unnecessary interrupts.
-+ */
-+ OSSR = OSSR_M1; /* clear match on timer1 */
-+
-+ rtc_update_irq(&rtc->class_dev, rtc_timer1_count, RTC_PF | RTC_IRQF);
-+
-+ if (rtc_timer1_count == 1)
-+ rtc_timer1_count = (rtc_freq * ((1<<30)/(TIMER_FREQ>>2)));
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int sa1100_rtc_read_callback(struct device *dev, int data)
-+{
-+ if (data & RTC_PF) {
-+ /* interpolate missed periods and set match for the next */
-+ unsigned long period = TIMER_FREQ/rtc_freq;
-+ unsigned long oscr = OSCR;
-+ unsigned long osmr1 = OSMR1;
-+ unsigned long missed = (oscr - osmr1)/period;
-+ data += missed << 8;
-+ OSSR = OSSR_M1; /* clear match on timer 1 */
-+ OSMR1 = osmr1 + (missed + 1)*period;
-+ /* Ensure we didn't miss another match in the mean time.
-+ * Here we compare (match - OSCR) 8 instead of 0 --
-+ * see comment in pxa_timer_interrupt() for explanation.
-+ */
-+ while( (signed long)((osmr1 = OSMR1) - OSCR) <= 8 ) {
-+ data += 0x100;
-+ OSSR = OSSR_M1; /* clear match on timer 1 */
-+ OSMR1 = osmr1 + period;
-+ }
-+ }
-+ return data;
-+}
-+
-+static int sa1100_rtc_open(struct device *dev)
-+{
-+ int ret;
-+
-+ ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, SA_INTERRUPT,
-+ "rtc 1Hz", dev);
-+ if (ret) {
-+ printk(KERN_ERR "rtc: IRQ%d already in use.\n", IRQ_RTC1Hz);
-+ goto fail_ui;
-+ }
-+ ret = request_irq(IRQ_RTCAlrm, sa1100_rtc_interrupt, SA_INTERRUPT,
-+ "rtc Alrm", dev);
-+ if (ret) {
-+ printk(KERN_ERR "rtc: IRQ%d already in use.\n", IRQ_RTCAlrm);
-+ goto fail_ai;
-+ }
-+ ret = request_irq(IRQ_OST1, timer1_interrupt, SA_INTERRUPT,
-+ "rtc timer", dev);
-+ if (ret) {
-+ printk(KERN_ERR "rtc: IRQ%d already in use.\n", IRQ_OST1);
-+ goto fail_pi;
-+ }
-+ return 0;
-+
-+ fail_pi:
-+ free_irq(IRQ_RTCAlrm, NULL);
-+ fail_ai:
-+ free_irq(IRQ_RTC1Hz, NULL);
-+ fail_ui:
-+ return ret;
-+}
-+
-+static void sa1100_rtc_release(struct device *dev)
-+{
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ RTSR = 0;
-+ OIER &= ~OIER_E1;
-+ OSSR = OSSR_M1;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+
-+ free_irq(IRQ_OST1, dev);
-+ free_irq(IRQ_RTCAlrm, dev);
-+ free_irq(IRQ_RTC1Hz, dev);
-+}
-+
-+
-+static int sa1100_rtc_ioctl(struct device *dev, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ switch(cmd) {
-+ case RTC_AIE_OFF:
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ RTSR &= ~RTSR_ALE;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_AIE_ON:
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ RTSR |= RTSR_ALE;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_UIE_OFF:
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ RTSR &= ~RTSR_HZE;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_UIE_ON:
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ RTSR |= RTSR_HZE;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_PIE_OFF:
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ OIER &= ~OIER_E1;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_PIE_ON:
-+ if ((rtc_freq > 64) && !capable(CAP_SYS_RESOURCE))
-+ return -EACCES;
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ OSMR1 = TIMER_FREQ/rtc_freq + OSCR;
-+ OIER |= OIER_E1;
-+ rtc_timer1_count = 1;
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+ return 0;
-+ case RTC_IRQP_READ:
-+ return put_user(rtc_freq, (unsigned long *)arg);
-+ case RTC_IRQP_SET:
-+ if (arg < 1 || arg > TIMER_FREQ)
-+ return -EINVAL;
-+ if ((arg > 64) && (!capable(CAP_SYS_RESOURCE)))
-+ return -EACCES;
-+ rtc_freq = arg;
-+ return 0;
-+ }
-+ return -EINVAL;
-+}
-+
-+static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
-+{
-+ rtc_time_to_tm(RCNR, tm);
-+ return 0;
-+}
-+
-+static int sa1100_rtc_set_time(struct device *dev, struct rtc_time *tm)
-+{
-+ unsigned long time;
-+ int ret;
-+
-+ ret = rtc_tm_to_time(tm, &time);
-+ if (ret == 0)
-+ RCNR = time;
-+ return ret;
-+}
-+
-+static int sa1100_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+ memcpy(&alrm->time, &rtc_alarm, sizeof(struct rtc_time));
-+ alrm->pending = RTSR & RTSR_AL ? 1 : 0;
-+ return 0;
-+}
-+
-+static int sa1100_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
-+{
-+ int ret;
-+
-+ spin_lock_irq(&sa1100_rtc_lock);
-+ ret = rtc_update_alarm(&alrm->time);
-+ if (ret == 0) {
-+ memcpy(&rtc_alarm, &alrm->time, sizeof(struct rtc_time));
-+
-+ if (alrm->enabled)
-+ enable_irq_wake(IRQ_RTCAlrm);
-+ else
-+ disable_irq_wake(IRQ_RTCAlrm);
-+ }
-+ spin_unlock_irq(&sa1100_rtc_lock);
-+
-+ return ret;
-+}
-+
-+static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
-+{
-+ seq_printf(seq, "trim/divider\t: 0x%08x\n", RTTR);
-+ seq_printf(seq, "alarm_IRQ\t: %s\n",
-+ (RTSR & RTSR_ALE) ? "yes" : "no" );
-+ seq_printf(seq, "update_IRQ\t: %s\n",
-+ (RTSR & RTSR_HZE) ? "yes" : "no");
-+ seq_printf(seq, "periodic_IRQ\t: %s\n",
-+ (OIER & OIER_E1) ? "yes" : "no");
-+ seq_printf(seq, "periodic_freq\t: %ld\n", rtc_freq);
-+
-+ return 0;
-+}
-+
-+static struct rtc_class_ops sa1100_rtc_ops = {
-+ .open = sa1100_rtc_open,
-+ .read_callback = sa1100_rtc_read_callback,
-+ .release = sa1100_rtc_release,
-+ .ioctl = sa1100_rtc_ioctl,
-+ .read_time = sa1100_rtc_read_time,
-+ .set_time = sa1100_rtc_set_time,
-+ .read_alarm = sa1100_rtc_read_alarm,
-+ .set_alarm = sa1100_rtc_set_alarm,
-+ .proc = sa1100_rtc_proc,
-+};
-+
-+static int sa1100_rtc_probe(struct platform_device *pdev)
-+{
-+ struct rtc_device *rtc;
-+
-+ /*
-+ * According to the manual we should be able to let RTTR be zero
-+ * and then a default diviser for a 32.768KHz clock is used.
-+ * Apparently this doesn't work, at least for my SA1110 rev 5.
-+ * If the clock divider is uninitialized then reset it to the
-+ * default value to get the 1Hz clock.
-+ */
-+ if (RTTR == 0) {
-+ RTTR = RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16);
-+ printk(KERN_WARNING "rtc: warning: initializing default clock divider/trim value\n");
-+ /* The current RTC value probably doesn't make sense either */
-+ RCNR = 0;
-+ }
-+
-+ rtc = rtc_device_register(pdev->name, &pdev->dev, &sa1100_rtc_ops,
-+ THIS_MODULE);
-+
-+ if (IS_ERR(rtc)) {
-+ dev_err(&pdev->dev, "Unable to register the RTC device\n");
-+ return PTR_ERR(rtc);
-+ }
-+
-+ platform_set_drvdata(pdev, rtc);
-+
-+ dev_info(&pdev->dev, "SA11xx/PXA2xx RTC Registered\n");
-+
-+ return 0;
-+}
-+
-+static int sa1100_rtc_remove(struct platform_device *pdev)
-+{
-+ struct rtc_device *rtc = platform_get_drvdata(pdev);
-+
-+ if (rtc)
-+ rtc_device_unregister(rtc);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver sa1100_rtc_driver = {
-+ .probe = sa1100_rtc_probe,
-+ .remove = sa1100_rtc_remove,
-+ .driver = {
-+ .name = "sa1100-rtc",
-+ },
-+};
-+
-+static int __init sa1100_rtc_init(void)
-+{
-+ return platform_driver_register(&sa1100_rtc_driver);
-+}
-+
-+static void __exit sa1100_rtc_exit(void)
-+{
-+ platform_driver_unregister(&sa1100_rtc_driver);
-+}
-+
-+module_init(sa1100_rtc_init);
-+module_exit(sa1100_rtc_exit);
-+
-+MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
-+MODULE_DESCRIPTION("SA11x0/PXA2xx Realtime Clock Driver (RTC)");
-+MODULE_LICENSE("GPL");
---- linux-ixp4xx.orig/arch/arm/mach-pxa/generic.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-pxa/generic.c 2006-03-08 01:59:26.000000000 +0100
-@@ -319,6 +319,11 @@ void __init pxa_set_ficp_info(struct pxa
- pxaficp_device.dev.platform_data = info;
- }
-
-+static struct platform_device pxartc_device = {
-+ .name = "sa1100-rtc",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &pxamci_device,
- &udc_device,
-@@ -329,6 +334,7 @@ static struct platform_device *devices[]
- &pxaficp_device,
- &i2c_device,
- &i2s_device,
-+ &pxartc_device,
- };
-
- static int __init pxa_init(void)
---- linux-ixp4xx.orig/arch/arm/mach-sa1100/generic.c 2006-03-08 01:59:09.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-sa1100/generic.c 2006-03-08 01:59:26.000000000 +0100
-@@ -324,6 +324,11 @@ void sa11x0_set_irda_data(struct irda_pl
- sa11x0ir_device.dev.platform_data = irda;
- }
-
-+static struct platform_device sa11x0rtc_device = {
-+ .name = "sa1100-rtc",
-+ .id = -1,
-+};
-+
- static struct platform_device *sa11x0_devices[] __initdata = {
- &sa11x0udc_device,
- &sa11x0uart1_device,
-@@ -333,6 +338,7 @@ static struct platform_device *sa11x0_de
- &sa11x0pcmcia_device,
- &sa11x0fb_device,
- &sa11x0mtd_device,
-+ &sa11x0rtc_device,
- };
-
- static int __init sa1100_init(void)
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/45-eeprom-new-notifier.patch b/packages/linux/ixp4xx-kernel/2.6.16/45-eeprom-new-notifier.patch
deleted file mode 100644
index 2de12021a5..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/45-eeprom-new-notifier.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-Add EEPROM notifiers
-
-These help board level code by allowing a callback when EEPROMs are
-loaded, this permits system level configuration to be loaded from the
-EEPROM. This is particularly useful when the ethernet MAC ids are
-stored in EEPROM and when the ethernet hardware is generic (so it
-has no board level knowledge), then the MACs can be loaded into
-the 'maclist' code and read out by the ethernet config.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
----
- drivers/i2c/chips/eeprom.c | 63 ++++++++++++++++++++++++++-------------
- include/linux/eeprom.h | 71 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/notifier.h | 3 +
- 3 files changed, 116 insertions(+), 21 deletions(-)
-
---- linux-ixp4xx.orig/drivers/i2c/chips/eeprom.c 2006-03-27 03:03:46.000000000 +0200
-+++ linux-ixp4xx/drivers/i2c/chips/eeprom.c 2006-03-27 03:03:47.000000000 +0200
-@@ -25,7 +25,6 @@
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
--
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/module.h>
-@@ -34,6 +33,8 @@
- #include <linux/jiffies.h>
- #include <linux/i2c.h>
- #include <linux/mutex.h>
-+#include <linux/notifier.h>
-+#include <linux/eeprom.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x50, 0x51, 0x52, 0x53, 0x54,
-@@ -42,26 +43,7 @@ static unsigned short normal_i2c[] = { 0
- /* Insmod parameters */
- I2C_CLIENT_INSMOD_1(eeprom);
-
--
--/* Size of EEPROM in bytes */
--#define EEPROM_SIZE 256
--
--/* possible types of eeprom devices */
--enum eeprom_nature {
-- UNKNOWN,
-- VAIO,
--};
--
--/* Each client has this additional data */
--struct eeprom_data {
-- struct i2c_client client;
-- struct mutex update_lock;
-- u8 valid; /* bitfield, bit!=0 if slice is valid */
-- unsigned long last_updated[8]; /* In jiffies, 8 slices */
-- u8 data[EEPROM_SIZE]; /* Register values */
-- enum eeprom_nature nature;
--};
--
-+static struct notifier_block *eeprom_chain;
-
- static int eeprom_detect(struct i2c_adapter *adapter, int address, int kind);
- static int eeprom_detach_client(struct i2c_client *client);
-@@ -186,6 +168,7 @@ static int eeprom_detect(struct i2c_adap
- data->valid = 0;
- mutex_init(&data->update_lock);
- data->nature = UNKNOWN;
-+ data->attr = &eeprom_attr;
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -207,6 +190,9 @@ static int eeprom_detect(struct i2c_adap
- /* create the sysfs eeprom file */
- sysfs_create_bin_file(&new_client->dev.kobj, &eeprom_attr);
-
-+ /* call the notifier chain */
-+ notifier_call_chain(&eeprom_chain, EEPROM_REGISTER, data);
-+
- return 0;
-
- exit_kfree:
-@@ -228,6 +214,41 @@ static int eeprom_detach_client(struct i
- return 0;
- }
-
-+/**
-+ * register_eeprom_notifier - register a 'user' of EEPROM devices.
-+ * @nb: pointer to notifier info structure
-+ *
-+ * Registers a callback function to be called upon detection
-+ * of an EEPROM device. Detection invokes the 'add' callback
-+ * with the kobj of the mutex and a bin_attribute which allows
-+ * read from the EEPROM. The intention is that the notifier
-+ * will be able to read system configuration from the notifier.
-+ *
-+ * Only EEPROMs detected *after* the addition of the notifier
-+ * are notified. I.e. EEPROMs already known to the system
-+ * will not be notified - add the notifier from board level
-+ * code!
-+ */
-+int register_eeprom_notifier(struct notifier_block *nb)
-+{
-+ return notifier_chain_register(&eeprom_chain, nb);
-+}
-+
-+/**
-+ * unregister_eeprom_notifier - unregister a 'user' of EEPROM devices.
-+ * @old: pointer to notifier info structure
-+ *
-+ * Removes a callback function from the list of 'users' to be
-+ * notified upon detection of EEPROM devices.
-+ */
-+int unregister_eeprom_notifier(struct notifier_block *nb)
-+{
-+ return notifier_chain_unregister(&eeprom_chain, nb);
-+}
-+
-+EXPORT_SYMBOL_GPL(register_eeprom_notifier);
-+EXPORT_SYMBOL_GPL(unregister_eeprom_notifier);
-+
- static int __init eeprom_init(void)
- {
- return i2c_add_driver(&eeprom_driver);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/linux/eeprom.h 2006-03-27 03:03:47.000000000 +0200
-@@ -0,0 +1,71 @@
-+#ifndef _LINUX_EEPROM_H
-+#define _LINUX_EEPROM_H
-+/*
-+ * $Id: 45-eeprom-new-notifier.patch,v 1.2 2006/03/27 11:10:19 azummo Exp $
-+ *
-+ * Copyright (C) 2006 John Bowler
-+ */
-+
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#ifndef __KERNEL__
-+#error This is a kernel header
-+#endif
-+
-+#include <linux/list.h>
-+#include <linux/kobject.h>
-+#include <linux/sysfs.h>
-+
-+/* Size of EEPROM in bytes */
-+#define EEPROM_SIZE 256
-+
-+/* possible types of eeprom devices */
-+enum eeprom_nature {
-+ UNKNOWN,
-+ VAIO,
-+};
-+
-+/* Each client has this additional data */
-+struct eeprom_data {
-+ struct i2c_client client;
-+ struct mutex update_lock;
-+ u8 valid; /* bitfield, bit!=0 if slice is valid */
-+ unsigned long last_updated[8]; /* In jiffies, 8 slices */
-+ u8 data[EEPROM_SIZE]; /* Register values */
-+ enum eeprom_nature nature;
-+ struct bin_attribute *attr;
-+};
-+
-+/*
-+ * This is very basic.
-+ *
-+ * If an EEPROM is detected on the I2C bus (this only works for
-+ * I2C EEPROMs) the eeprom_notifier::add method is called with
-+ * both the I2C information and the kobject for the sysfs
-+ * device which has been registers. It is then possible to
-+ * read from the device via the bin_attribute::read method
-+ * to extract configuration information.
-+ *
-+ * Register the notifier in the board level code, there is no
-+ * need to unregister it but you can if you want (it will save
-+ * a little bit or kernel memory to do so).
-+ */
-+
-+extern int register_eeprom_notifier(struct notifier_block *nb);
-+extern int unregister_eeprom_notifier(struct notifier_block *nb);
-+
-+#endif /* _LINUX_EEPROM_H */
---- linux-ixp4xx.orig/include/linux/notifier.h 2006-03-27 01:33:10.000000000 +0200
-+++ linux-ixp4xx/include/linux/notifier.h 2006-03-27 03:03:47.000000000 +0200
-@@ -72,5 +72,8 @@ extern int notifier_call_chain(struct no
- #define CPU_DOWN_FAILED 0x0006 /* CPU (unsigned)v NOT going down */
- #define CPU_DEAD 0x0007 /* CPU (unsigned)v dead */
-
-+/* eeprom notifier chain */
-+#define EEPROM_REGISTER 0x0001
-+
- #endif /* __KERNEL__ */
- #endif /* _LINUX_NOTIFIER_H */
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch b/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch
deleted file mode 100644
index 1c2243ba35..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/48-setup-byteswap-cmdline.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-When invoking an LE kernel from a BE boot loader or vice versa
-the ATAG_CMDLINE command line will be byte swapped, other ATAGs
-are fine because they are 32 bit values.
-
-This patch adds support for a command line option "swx " - which
-must be at the start of the command line - and which is used to
-detect a need to byte swap the rest of the command line.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
- arch/arm/kernel/setup.c | 29 ++++++++++++++++++++++++++++-
- 1 file changed, 28 insertions(+), 1 deletion(-)
-
---- linux-nslu2.orig/arch/arm/kernel/setup.c 2006-02-06 20:37:00.000000000 +0100
-+++ linux-nslu2/arch/arm/kernel/setup.c 2006-02-06 21:49:18.000000000 +0100
-@@ -660,7 +660,34 @@ __tagtable(ATAG_REVISION, parse_tag_revi
-
- static int __init parse_tag_cmdline(const struct tag *tag)
- {
-- strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
-+ /* Check the first four bytes for "swx " (swap, but it's
-+ * ok) or " xws" (command line is byte swapped)
-+ */
-+ const char *cmdline = tag->u.cmdline.cmdline;
-+ u32 size = tag->hdr.size;
-+
-+ if (size > 0 && !memcmp(cmdline, " xws", 4)) {
-+ cmdline += 4;
-+
-+ if (--size > 0) {
-+ const u32 *from = (const u32*)cmdline;
-+ u32 *to = (u32*)default_command_line;
-+
-+ if (size > COMMAND_LINE_SIZE/4)
-+ size = COMMAND_LINE_SIZE/4;
-+
-+ while (size-- > 0)
-+ to[size] = swab32(from[size]);
-+
-+ default_command_line[COMMAND_LINE_SIZE-1] = 0;
-+ return 0;
-+ }
-+ }
-+
-+ if (size > 0 && !memcmp(cmdline, "swx ", 4))
-+ cmdline += 4;
-+
-+ strlcpy(default_command_line, cmdline, COMMAND_LINE_SIZE);
- return 0;
- }
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/50-hwmon-ad741x.patch b/packages/linux/ixp4xx-kernel/2.6.16/50-hwmon-ad741x.patch
deleted file mode 100644
index 9d0a35b3fa..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/50-hwmon-ad741x.patch
+++ /dev/null
@@ -1,378 +0,0 @@
----
- drivers/hwmon/Kconfig | 10 +
- drivers/hwmon/Makefile | 1
- drivers/hwmon/ad741x.c | 340 +++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 351 insertions(+)
-
---- linux-ixp4xx.orig/drivers/hwmon/Makefile 2006-02-19 17:45:45.000000000 +0100
-+++ linux-ixp4xx/drivers/hwmon/Makefile 2006-02-19 17:46:12.000000000 +0100
-@@ -44,6 +44,7 @@ obj-$(CONFIG_SENSORS_VIA686A) += via686a
- obj-$(CONFIG_SENSORS_VT8231) += vt8231.o
- obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o
- obj-$(CONFIG_SENSORS_W83L785TS) += w83l785ts.o
-+obj-$(CONFIG_SENSORS_AD741X) += ad741x.o
-
- ifeq ($(CONFIG_HWMON_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/hwmon/ad741x.c 2006-02-19 17:45:59.000000000 +0100
-@@ -0,0 +1,340 @@
-+/*
-+ * An hwmon driver for the Analog Devices AD7417/18
-+ * Copyright 2006 Tower Technologies
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * Based on lm75.c
-+ * Copyright 1998-99 Frodo Looijaard <frodol@dds.nl>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/jiffies.h>
-+#include <linux/i2c.h>
-+#include <linux/hwmon.h>
-+#include <linux/err.h>
-+#include <linux/mutex.h>
-+
-+#define DRV_VERSION "0.1"
-+
-+/* straight from the datasheet */
-+#define AD741X_TEMP_MIN (-55000)
-+#define AD741X_TEMP_MAX 125000
-+
-+/* Addresses to scan */
-+static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2A, 0x2B, 0x2C,
-+ 0x2D, 0x2E, 0x2F, I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD;
-+
-+/* AD741X registers */
-+#define AD741X_REG_TEMP 0x00
-+#define AD741X_REG_CONF 0x01
-+#define AD741X_REG_TEMP_HYST 0x02
-+#define AD741X_REG_TEMP_OS 0x03
-+#define AD741X_REG_ADC 0x04
-+#define AD741X_REG_CONF2 0x05
-+
-+#define AD741X_REG_ADC_CH(x) (x << 5)
-+
-+#define AD741X_CH_TEMP AD741X_REG_ADC_CH(0)
-+#define AD741X_CH_AIN1 AD741X_REG_ADC_CH(1)
-+#define AD741X_CH_AIN2 AD741X_REG_ADC_CH(2)
-+#define AD741X_CH_AIN3 AD741X_REG_ADC_CH(3)
-+#define AD741X_CH_AIN4 AD741X_REG_ADC_CH(4)
-+
-+struct ad741x_data {
-+ struct i2c_client client;
-+ struct class_device *class_dev;
-+ struct mutex lock;
-+ char valid; /* !=0 if following fields are valid */
-+ unsigned long last_updated; /* In jiffies */
-+ u16 temp_input; /* Register values */
-+ u16 temp_max;
-+ u16 temp_hyst;
-+ u16 in1;
-+ u16 in2;
-+ u16 in3;
-+ u16 in4;
-+};
-+
-+static int ad741x_attach_adapter(struct i2c_adapter *adapter);
-+static int ad741x_detect(struct i2c_adapter *adapter, int address, int kind);
-+static int ad741x_detach_client(struct i2c_client *client);
-+
-+static struct i2c_driver ad741x_driver = {
-+ .driver = {
-+ .name = "ad741x",
-+ },
-+ .attach_adapter = ad741x_attach_adapter,
-+ .detach_client = ad741x_detach_client,
-+};
-+
-+/* TEMP: 0.001C/bit (-55C to +125C)
-+ * REG: (0.5C/bit, two's complement) << 7
-+ */
-+static inline u16 AD741X_TEMP_TO_REG(int temp)
-+{
-+ int ntemp = SENSORS_LIMIT(temp, AD741X_TEMP_MIN, AD741X_TEMP_MAX);
-+ ntemp += (ntemp < 0 ? -250 : 250);
-+ return (u16)((ntemp / 500) << 7);
-+}
-+
-+static inline int AD741X_TEMP_FROM_REG(u16 reg)
-+{
-+ /* use integer division instead of equivalent right shift to
-+ * guarantee arithmetic shift and preserve the sign
-+ */
-+ return ((s16)reg / 128) * 500;
-+}
-+
-+/* All registers are word-sized, except for the configuration registers.
-+ * AD741X uses a high-byte first convention, which is exactly opposite to
-+ * the usual practice.
-+ */
-+static int ad741x_read(struct i2c_client *client, u8 reg)
-+{
-+ if (reg == AD741X_REG_CONF || reg == AD741X_REG_CONF2)
-+ return i2c_smbus_read_byte_data(client, reg);
-+ else
-+ return swab16(i2c_smbus_read_word_data(client, reg));
-+}
-+
-+static int ad741x_write(struct i2c_client *client, u8 reg, u16 value)
-+{
-+ if (reg == AD741X_REG_CONF || reg == AD741X_REG_CONF2)
-+ return i2c_smbus_write_byte_data(client, reg, value);
-+ else
-+ return i2c_smbus_write_word_data(client, reg, swab16(value));
-+}
-+
-+static void ad741x_init_client(struct i2c_client *client)
-+{
-+ /* Enable if in shutdown mode */
-+ int reg = ad741x_read(client, AD741X_REG_CONF);
-+ if (reg >= 0 && (reg & 0x01))
-+ ad741x_write(client, AD741X_REG_CONF, reg & 0xfe);
-+}
-+
-+static struct ad741x_data *ad741x_update_device(struct device *dev)
-+{
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct ad741x_data *data = i2c_get_clientdata(client);
-+
-+ mutex_lock(&data->lock);
-+
-+ if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
-+ || !data->valid) {
-+ u8 cfg;
-+ dev_dbg(&client->dev, "starting ad741x update\n");
-+
-+ data->temp_input = ad741x_read(client, AD741X_REG_TEMP);
-+ data->temp_max = ad741x_read(client, AD741X_REG_TEMP_OS);
-+ data->temp_hyst = ad741x_read(client, AD741X_REG_TEMP_HYST);
-+
-+ /* read config register and clear channel bits */
-+ cfg = ad741x_read(client, AD741X_REG_CONF);
-+ cfg &= 0x1F;
-+
-+ ad741x_write(client, AD741X_REG_CONF, cfg | AD741X_CH_AIN1);
-+ data->in1 = ad741x_read(client, AD741X_REG_ADC);
-+
-+ ad741x_write(client, AD741X_REG_CONF, cfg | AD741X_CH_AIN2);
-+ data->in2 = ad741x_read(client, AD741X_REG_ADC);
-+
-+ ad741x_write(client, AD741X_REG_CONF, cfg | AD741X_CH_AIN3);
-+ data->in3 = ad741x_read(client, AD741X_REG_ADC);
-+
-+ ad741x_write(client, AD741X_REG_CONF, cfg | AD741X_CH_AIN4);
-+ data->in4 = ad741x_read(client, AD741X_REG_ADC);
-+
-+ /* restore old configuration value */
-+ ad741x_write(client, AD741X_REG_CONF, cfg);
-+
-+ data->last_updated = jiffies;
-+ data->valid = 1;
-+ }
-+
-+ mutex_unlock(&data->lock);
-+
-+ return data;
-+}
-+
-+#define show(value) \
-+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
-+{ \
-+ struct ad741x_data *data = ad741x_update_device(dev); \
-+ return sprintf(buf, "%d\n", AD741X_TEMP_FROM_REG(data->value)); \
-+}
-+show(temp_max);
-+show(temp_hyst);
-+show(temp_input);
-+
-+#define show_adc(value) \
-+static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \
-+{ \
-+ struct ad741x_data *data = ad741x_update_device(dev); \
-+ return sprintf(buf, "%d\n", data->value >> 6); \
-+}
-+
-+show_adc(in1);
-+show_adc(in2);
-+show_adc(in3);
-+show_adc(in4);
-+
-+#define set(value, reg) \
-+static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
-+{ \
-+ struct i2c_client *client = to_i2c_client(dev); \
-+ struct ad741x_data *data = i2c_get_clientdata(client); \
-+ int temp = simple_strtoul(buf, NULL, 10); \
-+ \
-+ mutex_lock(&data->lock); \
-+ data->value = AD741X_TEMP_TO_REG(temp); \
-+ ad741x_write(client, reg, data->value); \
-+ mutex_unlock(&data->lock); \
-+ return count; \
-+}
-+set(temp_max, AD741X_REG_TEMP_OS);
-+set(temp_hyst, AD741X_REG_TEMP_HYST);
-+
-+static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, set_temp_max);
-+static DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, show_temp_hyst, set_temp_hyst);
-+static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input, NULL);
-+
-+static DEVICE_ATTR(in1, S_IRUGO, show_in1, NULL);
-+static DEVICE_ATTR(in2, S_IRUGO, show_in2, NULL);
-+static DEVICE_ATTR(in3, S_IRUGO, show_in3, NULL);
-+static DEVICE_ATTR(in4, S_IRUGO, show_in4, NULL);
-+
-+static int ad741x_attach_adapter(struct i2c_adapter *adapter)
-+{
-+ if (!(adapter->class & I2C_CLASS_HWMON))
-+ return 0;
-+ return i2c_probe(adapter, &addr_data, ad741x_detect);
-+}
-+
-+static int ad741x_detect(struct i2c_adapter *adapter, int address, int kind)
-+{
-+ struct i2c_client *client;
-+ struct ad741x_data *data;
-+ int err = 0;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
-+ I2C_FUNC_SMBUS_WORD_DATA))
-+ goto exit;
-+
-+ if (!(data = kzalloc(sizeof(struct ad741x_data), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ client = &data->client;
-+ client->addr = address;
-+ client->adapter = adapter;
-+ client->driver = &ad741x_driver;
-+ client->flags = 0;
-+
-+ i2c_set_clientdata(client, data);
-+
-+ mutex_init(&data->lock);
-+
-+ /* AD7418 has a curious behaviour on registers 6 and 7. They
-+ * both always read 0xC071 and are not documented on the datasheet.
-+ * We use them to detect the chip.
-+ */
-+ if (kind < 0) {
-+ int reg;
-+
-+ reg = i2c_smbus_read_word_data(client, 0x06);
-+ if (reg != 0xC071) {
-+ dev_dbg(&adapter->dev, "failed detection at %d: %x\n", 6, reg);
-+ err = -ENODEV;
-+ goto exit_free;
-+ }
-+
-+ reg = i2c_smbus_read_word_data(client, 0x07);
-+ if (reg != 0xC071) {
-+ dev_dbg(&adapter->dev, "failed detection at %d: %x\n", 7, reg);
-+ err = -ENODEV;
-+ goto exit_free;
-+ }
-+
-+ reg = i2c_smbus_read_byte_data(client, AD741X_REG_CONF2);
-+
-+ /* bits 0-5 must be at 0 */
-+ if (reg & 0x3F) {
-+ dev_dbg(&adapter->dev, "failed detection at %d: %x\n",
-+ AD741X_REG_CONF2, reg);
-+ err = -ENODEV;
-+ goto exit_free;
-+ }
-+ }
-+
-+ strlcpy(client->name, ad741x_driver.driver.name, I2C_NAME_SIZE);
-+
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_free;
-+
-+ dev_info(&client->dev, "chip found, driver version " DRV_VERSION "\n");
-+
-+ /* Initialize the AD741X chip */
-+ ad741x_init_client(client);
-+
-+ /* Register sysfs hooks */
-+ data->class_dev = hwmon_device_register(&client->dev);
-+ if (IS_ERR(data->class_dev)) {
-+ err = PTR_ERR(data->class_dev);
-+ goto exit_detach;
-+ }
-+
-+ device_create_file(&client->dev, &dev_attr_temp1_max);
-+ device_create_file(&client->dev, &dev_attr_temp1_max_hyst);
-+ device_create_file(&client->dev, &dev_attr_temp1_input);
-+ device_create_file(&client->dev, &dev_attr_in1);
-+ device_create_file(&client->dev, &dev_attr_in2);
-+ device_create_file(&client->dev, &dev_attr_in3);
-+ device_create_file(&client->dev, &dev_attr_in4);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+exit_free:
-+ kfree(data);
-+exit:
-+ return err;
-+}
-+
-+static int ad741x_detach_client(struct i2c_client *client)
-+{
-+ struct ad741x_data *data = i2c_get_clientdata(client);
-+ hwmon_device_unregister(data->class_dev);
-+ i2c_detach_client(client);
-+ kfree(data);
-+ return 0;
-+}
-+
-+static int __init ad741x_init(void)
-+{
-+ return i2c_add_driver(&ad741x_driver);
-+}
-+
-+static void __exit ad741x_exit(void)
-+{
-+ i2c_del_driver(&ad741x_driver);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-+MODULE_DESCRIPTION("AD741X driver");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ad741x_init);
-+module_exit(ad741x_exit);
---- linux-ixp4xx.orig/drivers/hwmon/Kconfig 2006-02-19 17:45:45.000000000 +0100
-+++ linux-ixp4xx/drivers/hwmon/Kconfig 2006-02-19 17:47:07.000000000 +0100
-@@ -433,6 +433,16 @@ config SENSORS_W83627EHF
- This driver can also be built as a module. If so, the module
- will be called w83627ehf.
-
-+config SENSORS_AD741X
-+ tristate "Analog Devices AD7417/18"
-+ depends on HWMON && I2C && EXPERIMENTAL
-+ help
-+ If you say yes here you get support for the Analog Devices AD7417
-+ and AD7418 chips.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called ad741x.
-+
- config SENSORS_HDAPS
- tristate "IBM Hard Drive Active Protection System (hdaps)"
- depends on HWMON && INPUT && X86
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/65-loft-config.patch b/packages/linux/ixp4xx-kernel/2.6.16/65-loft-config.patch
deleted file mode 100644
index eddaad8166..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/65-loft-config.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-support for the Giant Shoulder Inc Loft board - a very minor
-variation on a standard Avila board
-
- arch/arm/mach-ixp4xx/Kconfig | 8 +++++++-
- arch/arm/mach-ixp4xx/ixdp425-pci.c | 6 ++++--
- arch/arm/mach-ixp4xx/ixdp425-setup.c | 19 +++++++++++++++++++
- include/asm-arm/arch-ixp4xx/ixdp425.h | 1 +
- 4 files changed, 31 insertions(+), 3 deletions(-)
-
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/Kconfig 2006-02-06 20:37:01.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/Kconfig 2006-02-06 22:34:20.000000000 +0100
-@@ -25,6 +25,12 @@ config ARCH_AVILA
- Avila Network Platform. For more information on this platform,
- see <file:Documentation/arm/IXP4xx>.
-
-+config MACH_LOFT
-+ bool "Loft"
-+ help
-+ Say 'Y' here if you want your kernel to support the Giant
-+ Shoulder Inc Loft board.
-+
- config ARCH_ADI_COYOTE
- bool "Coyote"
- help
-@@ -84,7 +90,7 @@ config MACH_NAS100D
- #
- config ARCH_IXDP4XX
- bool
-- depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465
-+ depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465 || MACH_LOFT
- default y
-
- #
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/ixdp425-pci.c 2006-02-06 20:37:01.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/ixdp425-pci.c 2006-02-06 22:34:20.000000000 +0100
-@@ -46,7 +46,8 @@ static int __init ixdp425_map_irq(struct
-
- int irq = -1;
-
-- if (slot >= 1 && slot <= IXDP425_PCI_MAX_DEV &&
-+ if (slot >= 1 &&
-+ slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : IXDP425_PCI_MAX_DEV) &&
- pin >= 1 && pin <= IXDP425_PCI_IRQ_LINES) {
- irq = pci_irq_table[(slot + pin - 2) % 4];
- }
-@@ -66,7 +67,8 @@ struct hw_pci ixdp425_pci __initdata = {
- int __init ixdp425_pci_init(void)
- {
- if (machine_is_ixdp425() || machine_is_ixcdp1100() ||
-- machine_is_avila() || machine_is_ixdp465())
-+ machine_is_avila() || machine_is_ixdp465() ||
-+ machine_is_loft())
- pci_common_init(&ixdp425_pci);
- return 0;
- }
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-02-06 20:37:01.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-02-06 22:34:20.000000000 +0100
-@@ -176,3 +176,22 @@ MACHINE_START(AVILA, "Gateworks Avila Ne
- MACHINE_END
- #endif
-
-+/*
-+ * Loft is functionally equivalent to Avila except that it has a
-+ * different number for the maximum PCI devices. The MACHINE
-+ * structure below is identical to Avila except for the comment.
-+ */
-+#ifdef CONFIG_MACH_LOFT
-+MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
-+ /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
-+ .phys_ram = PHYS_OFFSET,
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .boot_params = 0x0100,
-+ .init_machine = ixdp425_init,
-+MACHINE_END
-+#endif
-+
---- linux-nslu2.orig/include/asm-arm/arch-ixp4xx/ixdp425.h 2006-02-06 20:37:38.000000000 +0100
-+++ linux-nslu2/include/asm-arm/arch-ixp4xx/ixdp425.h 2006-02-06 22:34:20.000000000 +0100
-@@ -23,6 +23,7 @@
- * IXDP425 PCI IRQs
- */
- #define IXDP425_PCI_MAX_DEV 4
-+#define LOFT_PCI_MAX_DEV 6
- #define IXDP425_PCI_IRQ_LINES 4
-
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/75-dsmg600.patch b/packages/linux/ixp4xx-kernel/2.6.16/75-dsmg600.patch
deleted file mode 100644
index 3603bd3ca8..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/75-dsmg600.patch
+++ /dev/null
@@ -1,353 +0,0 @@
----
- arch/arm/mach-ixp4xx/Kconfig | 8 +
- arch/arm/mach-ixp4xx/Makefile | 1
- arch/arm/mach-ixp4xx/dsmg600-pci.c | 74 +++++++++++++++++
- arch/arm/mach-ixp4xx/dsmg600-setup.c | 139 +++++++++++++++++++++++++++++++++
- arch/arm/tools/mach-types | 1
- include/asm-arm/arch-ixp4xx/dsmg600.h | 62 ++++++++++++++
- include/asm-arm/arch-ixp4xx/hardware.h | 1
- include/asm-arm/arch-ixp4xx/irqs.h | 10 ++
- 8 files changed, 296 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/Kconfig 2006-03-18 18:10:31.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/Kconfig 2006-03-18 18:10:34.000000000 +0100
-@@ -83,6 +83,14 @@ config MACH_NAS100D
- NAS 100d device. For more information on this platform,
- see http://www.nslu2-linux.org/wiki/NAS100d/HomePage
-
-+config MACH_DSMG600
-+ bool
-+ prompt "D-Link DSM-G600"
-+ help
-+ Say 'Y' here if you want your kernel to support D-Link's
-+ DSM-G600 device. For more information on this platform,
-+ see http://www.nslu2-linux.org/
-+
- #
- # Avila and IXDP share the same source for now. Will change in future
- #
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/dsmg600-pci.c 2006-03-18 18:10:34.000000000 +0100
-@@ -0,0 +1,74 @@
-+/*
-+ * DSM-G600 board-level PCI initialization
-+ *
-+ * Copyright (c) 2006 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on ixdp425-pci.c:
-+ * Copyright (C) 2002 Intel Corporation.
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Maintainer: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+
-+#include <asm/mach/pci.h>
-+#include <asm/mach-types.h>
-+
-+void __init dsmg600_pci_preinit(void)
-+{
-+ set_irq_type(IRQ_DSMG600_PCI_INTA, IRQT_LOW);
-+ set_irq_type(IRQ_DSMG600_PCI_INTB, IRQT_LOW);
-+ set_irq_type(IRQ_DSMG600_PCI_INTC, IRQT_LOW);
-+ set_irq_type(IRQ_DSMG600_PCI_INTD, IRQT_LOW);
-+ set_irq_type(IRQ_DSMG600_PCI_INTE, IRQT_LOW);
-+ set_irq_type(IRQ_DSMG600_PCI_INTF, IRQT_LOW);
-+
-+ ixp4xx_pci_preinit();
-+}
-+
-+static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+ static int pci_irq_table[DSMG600_PCI_MAX_DEV][DSMG600_PCI_IRQ_LINES] =
-+ {
-+ { IRQ_DSMG600_PCI_INTE, -1, -1 },
-+ { IRQ_DSMG600_PCI_INTA, -1, -1 },
-+ { IRQ_DSMG600_PCI_INTB, IRQ_DSMG600_PCI_INTC, IRQ_DSMG600_PCI_INTD },
-+ { IRQ_DSMG600_PCI_INTF, -1, -1 },
-+ };
-+
-+ int irq = -1;
-+
-+ if (slot >= 1 && slot <= DSMG600_PCI_MAX_DEV &&
-+ pin >= 1 && pin <= DSMG600_PCI_IRQ_LINES)
-+ irq = pci_irq_table[slot-1][pin-1];
-+
-+ return irq;
-+}
-+
-+struct hw_pci __initdata dsmg600_pci = {
-+ .nr_controllers = 1,
-+ .preinit = dsmg600_pci_preinit,
-+ .swizzle = pci_std_swizzle,
-+ .setup = ixp4xx_setup,
-+ .scan = ixp4xx_scan_bus,
-+ .map_irq = dsmg600_map_irq,
-+};
-+
-+int __init dsmg600_pci_init(void)
-+{
-+ if (machine_is_dsmg600())
-+ pci_common_init(&dsmg600_pci);
-+
-+ return 0;
-+}
-+
-+subsys_initcall(dsmg600_pci_init);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/dsmg600-setup.c 2006-03-18 18:10:34.000000000 +0100
-@@ -0,0 +1,139 @@
-+/*
-+ * DSM-G600 board-setup
-+ *
-+ * Copyright (c) 2006 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based ixdp425-setup.c:
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/serial.h>
-+#include <linux/serial_8250.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/flash.h>
-+
-+static struct flash_platform_data dsmg600_flash_data = {
-+ .map_name = "cfi_probe",
-+ .width = 2,
-+};
-+
-+static struct resource dsmg600_flash_resource = {
-+ .flags = IORESOURCE_MEM,
-+};
-+
-+static struct platform_device dsmg600_flash = {
-+ .name = "IXP4XX-Flash",
-+ .id = 0,
-+ .dev.platform_data = &dsmg600_flash_data,
-+ .num_resources = 1,
-+ .resource = &dsmg600_flash_resource,
-+};
-+
-+static struct ixp4xx_i2c_pins dsmg600_i2c_gpio_pins = {
-+ .sda_pin = DSMG600_SDA_PIN,
-+ .scl_pin = DSMG600_SCL_PIN,
-+};
-+
-+static struct platform_device dsmg600_i2c_controller = {
-+ .name = "IXP4XX-I2C",
-+ .id = 0,
-+ .dev.platform_data = &dsmg600_i2c_gpio_pins,
-+ .num_resources = 0,
-+};
-+
-+static struct resource dsmg600_uart_resources[] = {
-+ {
-+ .start = IXP4XX_UART1_BASE_PHYS,
-+ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = IXP4XX_UART2_BASE_PHYS,
-+ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ }
-+};
-+
-+static struct plat_serial8250_port dsmg600_uart_data[] = {
-+ {
-+ .mapbase = IXP4XX_UART1_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART1,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ {
-+ .mapbase = IXP4XX_UART2_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART2,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ { }
-+};
-+
-+static struct platform_device dsmg600_uart = {
-+ .name = "serial8250",
-+ .id = PLAT8250_DEV_PLATFORM,
-+ .dev.platform_data = dsmg600_uart_data,
-+ .num_resources = 2,
-+ .resource = dsmg600_uart_resources,
-+};
-+
-+static struct platform_device *dsmg600_devices[] __initdata = {
-+ &dsmg600_i2c_controller,
-+ &dsmg600_flash,
-+ &dsmg600_uart,
-+};
-+
-+static void dsmg600_power_off(void)
-+{
-+ /* enable the pwr cntl gpio */
-+// gpio_line_config(DSMG600_GPIO_PWROFF, IXP4XX_GPIO_OUT);
-+
-+ /* poweroff */
-+// gpio_line_set(DSMG600_GPIO_PWROFF, IXP4XX_GPIO_HIGH);
-+}
-+
-+static void __init dsmg600_init(void)
-+{
-+ /* The DSM-G600 has a 33MHz crystal on board - 1.01% different
-+ * from the typical value.
-+ */
-+
-+#ifndef FREQ
-+ ixp4xx_set_board_tick_rate(66000000);
-+#endif
-+
-+ ixp4xx_sys_init();
-+
-+ dsmg600_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
-+ dsmg600_flash_resource.end =
-+ IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
-+
-+ pm_power_off = dsmg600_power_off;
-+
-+ platform_add_devices(dsmg600_devices, ARRAY_SIZE(dsmg600_devices));
-+}
-+
-+MACHINE_START(DSMG600, "D-Link DSM-G600")
-+ /* Maintainer: www.nslu2-linux.org */
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-+ .boot_params = 0x00000100,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .init_machine = dsmg600_init,
-+MACHINE_END
---- linux-ixp4xx.orig/arch/arm/tools/mach-types 2006-03-18 18:10:31.000000000 +0100
-+++ linux-ixp4xx/arch/arm/tools/mach-types 2006-03-18 18:10:34.000000000 +0100
-@@ -969,3 +969,4 @@ mxc300_30ads MACH_MXC30030ADS MXC30030A
- fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
- dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
- gesbc9312 MACH_GESBC9312 GESBC9312 958
-+dsmg600 MACH_DSMG600 DSMG600 964
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/dsmg600.h 2006-03-18 18:10:34.000000000 +0100
-@@ -0,0 +1,62 @@
-+/*
-+ * DSM-G600 platform specific definitions
-+ *
-+ * Copyright (c) 2006 Tower Technologies
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ *
-+ * based on ixdp425.h:
-+ * Copyright 2004 (c) MontaVista, Software, Inc.
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2. This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#ifndef __ASM_ARCH_HARDWARE_H__
-+#error "Do not include this directly, instead #include <asm/hardware.h>"
-+#endif
-+
-+#define DSMG600_SDA_PIN 5
-+#define DSMG600_SCL_PIN 4
-+
-+/*
-+ * DSMG600 PCI IRQs
-+ */
-+#define DSMG600_PCI_MAX_DEV 4
-+#define DSMG600_PCI_IRQ_LINES 3
-+
-+
-+/* PCI controller GPIO to IRQ pin mappings */
-+#define DSMG600_PCI_INTA_PIN 11
-+#define DSMG600_PCI_INTB_PIN 10
-+#define DSMG600_PCI_INTC_PIN 9
-+#define DSMG600_PCI_INTD_PIN 8
-+#define DSMG600_PCI_INTE_PIN 7
-+#define DSMG600_PCI_INTF_PIN 6
-+
-+/* GPIO */
-+
-+#define DSMG600_GPIO0 0
-+#define DSMG600_GPIO1 1
-+#define DSMG600_GPIO2 2
-+#define DSMG600_GPIO3 3
-+#define DSMG600_GPIO4 4
-+#define DSMG600_GPIO5 5
-+#define DSMG600_GPIO6 6
-+#define DSMG600_GPIO7 7
-+#define DSMG600_GPIO8 8
-+#define DSMG600_GPIO9 9
-+#define DSMG600_GPIO10 10
-+#define DSMG600_GPIO11 11
-+#define DSMG600_GPIO12 12
-+#define DSMG600_GPIO13 13
-+#define DSMG600_GPIO14 14
-+#define DSMG600_GPIO15 15
-+
-+#define DSMG600_GPIO_PWRBTN DSMG600_GPIO15 /* power */
-+#define DSMG600_GPIO_RSTBTN DSMG600_GPIO3 /* reset */
-+
-+#define DSMG600_IRQ_PWRBTN IRQ_IXP4XX_GPIO15
-+#define DSMG600_IRQ_RSTBTN IRQ_IXP4XX_GPIO3
-+
-+#define DSMG600_GPIO_PWROFF DSMG600_GPIO2 /* power off */
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/Makefile 2006-03-18 18:10:31.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/Makefile 2006-03-18 18:10:34.000000000 +0100
-@@ -10,4 +10,5 @@ obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-
- obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o gtwx5715-setup.o
- obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
- obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
-+obj-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o dsmg600-setup.o
-
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/hardware.h 2006-03-18 18:10:31.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/hardware.h 2006-03-18 18:10:34.000000000 +0100
-@@ -46,5 +46,6 @@ extern unsigned int processor_id;
- #include "prpmc1100.h"
- #include "nslu2.h"
- #include "nas100d.h"
-+#include "dsmg600.h"
-
- #endif /* _ASM_ARCH_HARDWARE_H */
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/irqs.h 2006-03-18 18:10:31.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/irqs.h 2006-03-18 18:10:34.000000000 +0100
-@@ -109,4 +109,14 @@
- #define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8
- #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7
-
-+/*
-+ * D-Link DSM-G600 board IRQs
-+ */
-+#define IRQ_DSMG600_PCI_INTA IRQ_IXP4XX_GPIO11
-+#define IRQ_DSMG600_PCI_INTB IRQ_IXP4XX_GPIO10
-+#define IRQ_DSMG600_PCI_INTC IRQ_IXP4XX_GPIO9
-+#define IRQ_DSMG600_PCI_INTD IRQ_IXP4XX_GPIO8
-+#define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7
-+#define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6
-+
- #endif
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/83-nas100d-memory-fixup.patch b/packages/linux/ixp4xx-kernel/2.6.16/83-nas100d-memory-fixup.patch
deleted file mode 100644
index 3d5e20c6cf..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/83-nas100d-memory-fixup.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Include a fixup machine start function in nas100d-setup.c to handle
-the command line and memory setup parameters which are not specifiable
-in the boot loader.
-
-TODO: We must check what is actually passed by the stock
-RedBoot on the nas100d.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
- arch/arm/mach-ixp4xx/nas100d-setup.c | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-09 02:13:15.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-09 02:13:54.000000000 +0100
-@@ -19,6 +19,7 @@
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-+#include <asm/setup.h>
-
- static struct flash_platform_data nas100d_flash_data = {
- .map_name = "cfi_probe",
-@@ -125,11 +126,43 @@ static void __init nas100d_init(void)
- platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
- }
-
-+/*
-+ * NAS100D bootstrap may pass in parameters, but we zap the mem
-+ * settings to be safe (the box always has 64MByte at 0). The
-+ * passed in command line can override this default, we prepend
-+ * to the config'ed default.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+
-+static void __init nas100d_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The NAS100D has one bank of 64MByte memory.
-+ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
-+ * the mem tags from the tag list. We need do nothing here!
-+ */
-+ mi->nr_banks = 1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (64*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+}
-+
- MACHINE_START(NAS100D, "Iomega NAS 100d")
- /* Maintainer: www.nslu2-linux.org */
- .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
- .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
- .boot_params = 0x00000100,
-+ .fixup = nas100d_fixup,
- .map_io = ixp4xx_map_io,
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/84-nas100d-cmdline.patch b/packages/linux/ixp4xx-kernel/2.6.16/84-nas100d-cmdline.patch
deleted file mode 100644
index 2f02f5622d..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/84-nas100d-cmdline.patch
+++ /dev/null
@@ -1,31 +0,0 @@
----
- arch/arm/mach-ixp4xx/nas100d-setup.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-09 02:14:52.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-09 02:16:43.000000000 +0100
-@@ -144,6 +144,12 @@ static void __init nas100d_init(void)
- * to be reset to 0 (on the first mem=)
- */
-
-+static char nas100d_command_line[] __initdata =
-+ "root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc "
-+ "rtc-pcf8563.probe=0,0x51 "
-+ CONFIG_CMDLINE;
-+
-+
- static void __init nas100d_fixup(struct machine_desc *desc,
- struct tag *tags, char **cmdline, struct meminfo *mi)
- {
-@@ -155,6 +161,11 @@ static void __init nas100d_fixup(struct
- mi->bank[0].start = 0;
- mi->bank[0].size = (64*1024*1024);
- mi->bank[0].node = PHYS_TO_NID(0);
-+
-+ /* A command line in the ATAG list will override this one,
-+ * as is intended.
-+ */
-+ strlcpy(*cmdline, nas100d_command_line, COMMAND_LINE_SIZE);
- }
-
- MACHINE_START(NAS100D, "Iomega NAS 100d")
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/85-timer.patch b/packages/linux/ixp4xx-kernel/2.6.16/85-timer.patch
deleted file mode 100644
index 83951c2574..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/85-timer.patch
+++ /dev/null
@@ -1,280 +0,0 @@
- arch/arm/mach-ixp4xx/common.c | 165 +++++++++++++++++++++++++++++++++---
- arch/arm/mach-ixp4xx/nslu2-setup.c | 5 +
- include/asm-arm/arch-ixp4xx/nslu2.h | 5 -
- include/asm-arm/arch-ixp4xx/timex.h | 23 +++--
- 4 files changed, 176 insertions(+), 22 deletions(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/common.c 2006-02-23 18:27:49.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/common.c 2006-02-23 18:30:49.000000000 +0100
-@@ -247,36 +247,165 @@ void __init ixp4xx_init_irq(void)
- * IXP4xx timer tick
- * We use OS timer1 on the CPU for the timer tick and the timestamp
- * counter as a source of real clock ticks to account for missed jiffies.
-+ *
-+ * 'CLOCK_TICK_RATE' is the nominal number of internal ticks per second,
-+ * this is significantly greater than the actual number on any ixp4xx
-+ * board. Neither this nor 'LATCH' are required by this code because
-+ * the only requirement is to generate HZ timer_tick calls per second.
- *************************************************************************/
-+#if TICK_NSEC * HZ != 1000000000
-+ /* This will cause the jiffies to drift unnecessarily. */
-+# error CLOCK_TICK_RATE should be a multiple of HZ for this code
-+#endif
-+
-+/* These are the control registers for the interrupt handler, they must
-+ * only be read and written by the interrupt handler and by the init
-+ * method (which sets them to 0).
-+ */
-+static volatile u32 last_timer_time;
-+static volatile int accumulated_error;
-+
-+/* Most ixp4xx boards have 66.6666MHz crystals, so default to this, reset
-+ * this from the board level code if required. The following variables
-+ * must be *written* only by set_board_tick_rate
-+ */
-+static u32 board_tick_rate;
-+static u32 board_tick_per_1000; /* board_tick_rate/1000 */
-+static u32 timer_count;
-+
-+/* The following symbol may be written to change the current tick rate,
-+ * it is read by the interrupt handler and used to reload the timer.
-+ * The 'real' value (the one in use) is 'board_tick_rate' above.
-+ * NOTE: this can be tweaked to match the actual crystal on a particular
-+ * machine.
-+ */
-+volatile u32 ixp4xx_board_tick_rate = 66666600;
-+EXPORT_SYMBOL(ixp4xx_board_tick_rate);
-+
-+/* The set API may run asynchronously in the presence of interrupts,
-+ * everything it does it is both atomic and complete (notice that it
-+ * doesn't change any of the 'volatile' values). The mathematics in
-+ * here require the following values. Changing the board tick rate
-+ * implies an unknown error in the current timestamp tick count.
-+ */
-+#if IXP4XX_OST_RELOAD_MASK != 3 || IXP4XX_OST_ENABLE != 1
-+# error unexpected value for timer reload mask
-+#endif
-+static void set_board_tick_rate(u32 rate) {
-+ u32 reload;
-+
-+ /* Store the two effectively informational rate values, the
-+ * error calculation is (rate - count*HZ) (above), and rate
-+ * is changed first, this can cause a temporary error which
-+ * will be corrected on the next interrupt.
-+ */
-+ board_tick_rate = rate;
-+ board_tick_per_1000 = (rate+500)/1000;
-+
-+ /* Calculate the correct value to load into the timer countdown
-+ * register, the low two bits must be b01 (to enable the timer).
-+ * Select the top bits to be as close to the desired value as
-+ * possible.
-+ *
-+ * First find the best value, regardless of the low two bits -
-+ * this is the value used in the interrupt calculation even though
-+ * it cannot necessarily be set into the register.
-+ */
-+ timer_count = (rate + (HZ/2))/HZ;
-+
-+ /* Now the timer_ticks are being generated at this rate, calculate
-+ * an appropriate value for the register. This stores a 30 bit
-+ * value which gives a period of 4*x+1, we want:
-+ *
-+ * 4*x+1 = board_tick_rate/HZ
-+ *
-+ * This needs to be rounded to the closest 4*HZ value:
-+ *
-+ * x = ((board_tick_rate-HZ) + (4*HZ)/2) / 4*HZ
-+ * x = (board_tick_rate+HZ) / (4*HZ);
-+ */
-+ reload = (board_tick_rate + HZ) / HZ;
-+ reload = (reload & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-+ *IXP4XX_OSRT1 = reload;
-
--static unsigned volatile last_jiffy_time;
-+ /* If the clock is drifing, look in syslog: */
-+ printk(KERN_INFO "IXP4xx: FREQ=%d COUNT=%d\n", rate, reload);
-+}
-
--#define CLOCK_TICKS_PER_USEC ((CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC)
-+/* This returns the time in timer ticks since the 'last_timer_time'
-+ * recorded above. Use this to avoid arithmetic errors because of
-+ * the overflow when the timer wraps.
-+ */
-+static inline u32 ixp4xx_timer_delta(void)
-+{
-+ return *IXP4XX_OSTS - last_timer_time;
-+}
-
- /* IRQs are disabled before entering here from do_gettimeofday() */
- static unsigned long ixp4xx_gettimeoffset(void)
- {
-- u32 elapsed;
--
-- elapsed = *IXP4XX_OSTS - last_jiffy_time;
-+ /* Return the offset of the current time from the last time
-+ * timer tick in microseconds. This is only used for the
-+ * gettimeofday call.
-+ *
-+ * The result of this API is at most about 20000 (for a 50Hz
-+ * HZ - 20000 uS/tick), the input delta is at most about
-+ * 1.3M - 21 bits.
-+ */
-+ u32 delta = ixp4xx_timer_delta(); /* About 21 bits max */
-+ /* return delta * 1000000 / board_tick_rate; */
-+ return (delta * 1000 + board_tick_per_1000/2) / board_tick_per_1000;
-+}
-
-- return elapsed / CLOCK_TICKS_PER_USEC;
-+/* This is the correct adjustment to the counter to compensate for an
-+ * error iff timer_count-1 <= exact_count <= timer_count+1
-+ */
-+static inline int adjustment(int error) {
-+ if (error >= HZ)
-+ return 1;
-+ else if (error <= -HZ)
-+ return -1;
-+ return 0;
- }
-
- static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
- {
-+ u32 rate;
-+ u32 count;
-+ int error;
-+
- write_seqlock(&xtime_lock);
-
- /* Clear Pending Interrupt by writing '1' to it */
- *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
-+ /* If the board tick rate has been changed update the cached
-+ * value.
-+ */
-+ if (ixp4xx_board_tick_rate != board_tick_rate) {
-+ set_board_tick_rate(ixp4xx_board_tick_rate);
-+ accumulated_error = 0;
-+ }
-+
- /*
- * Catch up with the real idea of time
-+ *
-+ * board_tick_rate: actual ixp4xx ticks/second, read-only
-+ * accumulated_error: aggregate error/tick * HZ, read/write
-+ * timer_count: best ixp4xx ticks per timer_tick, read-only
- */
-- while ((*IXP4XX_OSTS - last_jiffy_time) > LATCH) {
-+ rate = board_tick_rate;
-+ error = accumulated_error;
-+ count = timer_count;
-+ do {
-+ u32 adjusted_count = count + adjustment(error);
-+ if (ixp4xx_timer_delta() < adjusted_count)
-+ break;
- timer_tick(regs);
-- last_jiffy_time += LATCH;
-- }
-+ last_timer_time += adjusted_count;
-+ error += rate - adjusted_count*HZ;
-+ } while (1);
-+ accumulated_error = error;
-
- write_sequnlock(&xtime_lock);
-
-@@ -289,17 +418,30 @@ static struct irqaction ixp4xx_timer_irq
- .handler = ixp4xx_timer_interrupt,
- };
-
-+u32 ixp4xx_get_board_tick_rate(void) {
-+ return board_tick_rate;
-+}
-+
-+EXPORT_SYMBOL(ixp4xx_get_board_tick_rate);
-+
-+void ixp4xx_set_board_tick_rate(u32 rate) {
-+ ixp4xx_board_tick_rate = rate;
-+}
-+
-+EXPORT_SYMBOL(ixp4xx_set_board_tick_rate);
-+
- static void __init ixp4xx_timer_init(void)
- {
- /* Clear Pending Interrupt by writing '1' to it */
- *IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
-
- /* Setup the Timer counter value */
-- *IXP4XX_OSRT1 = (LATCH & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
-+ set_board_tick_rate(ixp4xx_board_tick_rate);
-
- /* Reset time-stamp counter */
- *IXP4XX_OSTS = 0;
-- last_jiffy_time = 0;
-+ last_timer_time = 0;
-+ accumulated_error = 0;
-
- /* Connect the interrupt handler and enable the interrupt */
- setup_irq(IRQ_IXP4XX_TIMER1, &ixp4xx_timer_irq);
-@@ -362,4 +504,3 @@ void __init ixp4xx_sys_init(void)
- printk("IXP4xx: Using %luMiB expansion bus window size\n",
- ixp4xx_exp_bus_size >> 20);
- }
--
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-23 18:27:49.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-23 18:30:49.000000000 +0100
-@@ -119,6 +119,11 @@ static void nslu2_power_off(void)
-
- static void __init nslu2_init(void)
- {
-+ /* The NSLU2 has a 33MHz crystal on board - 1.01% different
-+ * from the typical value.
-+ */
-+ ixp4xx_set_board_tick_rate(66000000);
-+
- ixp4xx_sys_init();
-
- nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/nslu2.h 2006-02-23 18:27:12.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/nslu2.h 2006-02-23 18:30:49.000000000 +0100
-@@ -35,11 +35,6 @@
- #define NSLU2_PCI_INTD_PIN 8
-
-
--/* NSLU2 Timer */
--#define NSLU2_FREQ 66000000
--#define NSLU2_CLOCK_TICK_RATE (((NSLU2_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
--#define NSLU2_CLOCK_TICKS_PER_USEC ((NSLU2_CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC)
--
- /* GPIO */
-
- #define NSLU2_GPIO0 0
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/timex.h 2006-02-23 18:27:12.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/timex.h 2006-02-23 18:30:49.000000000 +0100
-@@ -6,10 +6,23 @@
- #include <asm/hardware.h>
-
- /*
-- * We use IXP425 General purpose timer for our timer needs, it runs at
-- * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the
-- * timer register ignores the bottom 2 bits of the LATCH value.
-+ * In linux/timex.h 'LATCH' is defined as CLOCK_TICK_RATE/HZ and
-+ * is the number of internal counts per timer interrupt. Thus
-+ * CLOCK_TICK_RATE is LATCH*HZ.
-+ *
-+ * The actual values of these numbers do not matter, because they
-+ * are only used to calculate ACTHZ (rate/latch as a 24.8 fixed
-+ * point number), so the value here gives a LATCH of 1 and pretty
-+ * much guarantees to flush out any off-by-one errors.
-+ *
-+ * ACTHZ is equal to HZ, because CLOCK_TICK_RATE is a multiple of
-+ * HZ, this is checked in the ixp4xx/common.c code.
- */
--#define FREQ 66666666
--#define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
-+#define CLOCK_TICK_RATE HZ
-
-+/* The following allow the exact board tick rate to be set and
-+ * discovered. The value should be exactly twice the frequency
-+ * (in Hz) of the onboard crystal.
-+ */
-+extern u32 ixp4xx_get_board_tick_rate(void);
-+extern void ixp4xx_set_board_tick_rate(u32 new_rate);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/91-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.16/91-maclist.patch
deleted file mode 100644
index 34579183d0..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/91-maclist.patch
+++ /dev/null
@@ -1,573 +0,0 @@
-Ethernet MAC repository.
-
-Some ethernet controllers have no built-in way of obtaining an
-appropriate Ethernet MAC address. Such controllers have to be
-initialised in a board-specific way, depending on how the allocated
-MAC is stored. The MAC repository provides a set of APIs and a
-proc entry (/proc/net/maclist) to store MAC values from the board
-so that such drivers can obtain a MAC address without board-specific
-code.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
----
- drivers/net/Kconfig | 15 +
- drivers/net/Makefile | 1
- drivers/net/maclist.c | 465 ++++++++++++++++++++++++++++++++++++++++++++++++++
- include/net/maclist.h | 49 +++++
- 4 files changed, 530 insertions(+)
-
---- linux-ixp4xx.orig/drivers/net/Kconfig 2006-02-23 18:27:12.000000000 +0100
-+++ linux-ixp4xx/drivers/net/Kconfig 2006-02-23 18:30:54.000000000 +0100
-@@ -177,6 +177,21 @@ config NET_ETHERNET
- kernel: saying N will just cause the configurator to skip all
- the questions about Ethernet network cards. If unsure, say N.
-
-+config MACLIST
-+ tristate "Ethernet MAC repository"
-+ depends on NET_ETHERNET
-+ help
-+ Some ethernet controllers have no built-in way of obtaining an
-+ appropriate Ethernet MAC address. Such controllers have to be
-+ initialised in a board-specific way, depending on how the allocated
-+ MAC is stored. The MAC repository provides a set of APIs and a
-+ proc entry (/proc/net/maclist) to store MAC values from the board
-+ so that such drivers can obtain a MAC address without board-specific
-+ code. You do not need to enable this device - it will be selected
-+ automatically by any device which requires it. It is only useful
-+ to enable it manually when building a device driver independently
-+ of the kernel build.
-+
- config MII
- tristate "Generic Media Independent Interface device support"
- depends on NET_ETHERNET
---- linux-ixp4xx.orig/drivers/net/Makefile 2006-02-23 18:27:12.000000000 +0100
-+++ linux-ixp4xx/drivers/net/Makefile 2006-02-23 18:30:54.000000000 +0100
-@@ -74,6 +74,7 @@ obj-$(CONFIG_RIONET) += rionet.o
- # end link order section
- #
-
-+obj-$(CONFIG_MACLIST) += maclist.o
- obj-$(CONFIG_MII) += mii.o
- obj-$(CONFIG_PHYLIB) += phy/
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/net/maclist.c 2006-02-23 18:30:54.000000000 +0100
-@@ -0,0 +1,465 @@
-+/*
-+ * drivers/net/maclist.c
-+ *
-+ * a simple driver to remember ethernet MAC values
-+ *
-+ * Some Ethernet hardware implementations have no built-in
-+ * storage for allocated MAC values - an example is the Intel
-+ * IXP420 chip which has support for Ethernet but no defined
-+ * way of storing allocated MAC values. With such hardware
-+ * different board level implementations store the allocated
-+ * MAC (or MACs) in different ways. Rather than put board
-+ * level code into a specific Ethernet driver this driver
-+ * provides a generally accessible repository for the MACs
-+ * which can be written by board level code and read by the
-+ * driver.
-+ *
-+ * The implementation also allows user level programs to
-+ * access the MAC information in /proc/net/maclist. This is
-+ * useful as it allows user space code to use the MAC if it
-+ * is not used by a built-in driver.
-+ *
-+ * Copyright (C) 2005 John Bowler
-+ * Author: John Bowler <jbowler@acm.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * version 2 as published by the Free Software Foundation.
-+ */
-+
-+/*
-+ * External interfaces:
-+ * Interfaces to linux kernel (and modules)
-+ * maclist_add: add a single MAC, sequenced with a single
-+ * writer lock (reads may happen simultaneously
-+ * because of the way the list is built)
-+ * maclist_count: total number of MACs stored
-+ * maclist_read: read a MAC 0..(maclist_count-1). Call this
-+ * to get a specific MAC. If the argument is
-+ * a new key and all the allocaed MACs have been
-+ * assigned a random but valid MAC will be return
-+ * (and this will be stored for later retrieval
-+ * under the given key.)
-+ *
-+ * Sequencing:
-+ * The MAC ids must be added before any driver tries to use them
-+ * (this is obvious isn't it?) This can be made to happen by
-+ * sequencing the initcalls correctly. The module or kernel
-+ * parameters have been handled before any init call happens.
-+ * The important trick here is to ensure that the platform
-+ * initialises any devices with MAC ids *before* any devices
-+ * which might use them.
-+ *
-+ * When this code is a module any other module which adds a
-+ * MAC should be modprobed before modules for ethernet
-+ * devices.
-+ *
-+ * The failure case is 'soft' - the device will get a valid, but
-+ * random, MAC and the real allocated MACs will never get used.
-+ * This can be seen by looking at the list of ids in sysfs (there
-+ * will be extra, random, ones after the allocated ones).
-+ *
-+ * Recommendations:
-+ * For ethernet drivers which are known to be the sole driver on
-+ * the board (without a built in MAC) and where the number of
-+ * devices driven is known simply use an index 0..(n-1) as a
-+ * key for each of the n devices.
-+ *
-+ * This is the common case, it works where one driver handles
-+ * multiple devices so long as the total number of devices can
-+ * be determined reliably. It is sufficient merely to maintain
-+ * a global count of the number of devices initialised so far,
-+ * just so long as the initialisation order is consistent.
-+ *
-+ * When the driver is generic and the board may be populated with
-+ * other devices which allocate MACs from the maclist pool and
-+ * use different drivers create a random key and compile this into
-+ * the code. Use this as the base for all devices from the driver
-+ * (using a global device count for this driver if necessary).
-+ *
-+ * With the second strategy the assignment of MACs will depend on
-+ * the order of initialisation of the different drivers. To avoid
-+ * this provide a kernel (or module) command line parameter to
-+ * specify a base index and (optional) count for each driver or
-+ * pass in a (struct resource) with the start and end of the keys
-+ * to pass to maclist_read. Either method allows the higher levels
-+ * (boot loader or machine description) to specify which MACs in
-+ * the list to assign to each device.
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/spinlock.h>
-+#include <linux/etherdevice.h>
-+#include <linux/proc_fs.h>
-+#include <linux/errno.h>
-+
-+#include <net/maclist.h>
-+
-+#define MACLIST_NAME "maclist"
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("MAC list repository");
-+MODULE_LICENSE("GPL");
-+
-+typedef struct maclist_entry {
-+ struct maclist_entry *next; /* Linked list, first first */
-+ u32 key; /* count or key for this entry */
-+ u16 flags;
-+ u8 id[6]; /* 6 byte Ethernet MAC */
-+} maclist_entry_t;
-+
-+/*
-+ * flag definitions
-+ */
-+#define MACLIST_ALLOCATED 1
-+#define MACLIST_RANDOM 2
-+
-+/* Access to this list is protected by a standard rwlock_t. */
-+static maclist_entry_t *maclist_list = 0;
-+
-+static DEFINE_RWLOCK(maclist_lock);
-+
-+/*
-+ * External interfaces.
-+ *
-+ * Add a single entry, returns 0 on success else an error
-+ * code. Checks for invalid addresses.
-+ */
-+int maclist_add(const u8 new_id[6]) {
-+ maclist_entry_t *new_entry, **tail;
-+
-+ if (new_id == 0 || !is_valid_ether_addr(new_id)) {
-+ printk(KERN_ERR MACLIST_NAME ": invalid ethernet address\n");
-+ return -EINVAL;
-+ }
-+ new_entry = kmalloc(sizeof *new_entry, GFP_KERNEL);
-+ if (new_entry == 0)
-+ return -ENOMEM;
-+ new_entry->next = 0;
-+ new_entry->key = 0;
-+ new_entry->flags = 0;
-+ memcpy(new_entry->id, new_id, sizeof new_entry->id);
-+
-+ tail = &maclist_list;
-+
-+ write_lock(&maclist_lock);
-+ while (*tail != 0)
-+ tail = &(*tail)->next;
-+ *tail = new_entry;
-+ write_unlock(&maclist_lock);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(maclist_add);
-+
-+/*
-+ * Return the current entry count.
-+ */
-+static int maclist_count_unlocked(void) {
-+ maclist_entry_t *tail = maclist_list;
-+ int count = 0;
-+
-+ while (tail != 0) {
-+ tail = tail->next;
-+ ++count;
-+ }
-+
-+ return count;
-+}
-+
-+int maclist_count(void) {
-+ int count;
-+
-+ read_lock(&maclist_lock);
-+ count = maclist_count_unlocked();
-+ read_unlock(&maclist_lock);
-+
-+ return count;
-+}
-+EXPORT_SYMBOL(maclist_count);
-+
-+/*
-+ * Return the ID with the given key (the key is allocated
-+ * to an entry if not found).
-+ */
-+void maclist_read(u8 (*id)[6], u32 key) {
-+ int count, index;
-+ maclist_entry_t *entry, *entry_to_allocate;
-+
-+ /* Do this under a write lock to avoid the SMP race
-+ * where we find the key isn't assigned, drop the lock,
-+ * have another CPU assign it, then assign it on this
-+ * CPU too - very bad...
-+ */
-+ write_lock(&maclist_lock);
-+ count = maclist_count_unlocked();
-+ index = key % count; /* index of entry to allocate */
-+ entry_to_allocate = 0;
-+
-+ entry = maclist_list;
-+ while (entry != 0) {
-+ if ((entry->flags & MACLIST_ALLOCATED) != 0) {
-+ if (entry->key == key) {
-+ /* Found it, use this entry. */
-+ entry_to_allocate = entry;
-+ break;
-+ }
-+ } else if (entry_to_allocate == 0 || count <= index) {
-+ /* The algorithm is to try for entry
-+ * (key % count), but if this isn't possible
-+ * return the prior unallocated entry.
-+ */
-+ entry_to_allocate = entry;
-+ }
-+
-+ ++count;
-+ entry = entry->next;
-+ }
-+
-+ /* Use entry_to_allocate, allocating it if necessary. */
-+ if (entry_to_allocate != 0) {
-+ if ((entry_to_allocate->flags & MACLIST_ALLOCATED) == 0) {
-+ entry_to_allocate->key = key;
-+ entry_to_allocate->flags |= MACLIST_ALLOCATED;
-+ }
-+ memcpy(id, entry_to_allocate->id, sizeof *id);
-+ }
-+ write_unlock(&maclist_lock);
-+
-+ if (entry_to_allocate == 0) {
-+ /* No unallocated entries. Make a new one and return it. */
-+ printk(KERN_INFO MACLIST_NAME ": adding random MAC for key 0x%x\n", key);
-+ random_ether_addr(*id);
-+ if (maclist_add(*id) == 0)
-+ maclist_read(id, key);
-+ }
-+}
-+EXPORT_SYMBOL(maclist_read);
-+
-+/*
-+ * Parameter parsing. The option string is a list of MAC
-+ * addresses, comma separated. (The parsing really should
-+ * be somewhere central...)
-+ */
-+static int __init maclist_setup(const char *param) {
-+ int bytes = 0, seen_a_digit = 0;
-+ u8 id[6];
-+
-+ memset(id, 0, sizeof id);
-+
-+ if (param) do {
-+ int digit = -1;
-+ switch (*param) {
-+ case '0': digit = 0; break;
-+ case '1': digit = 1; break;
-+ case '2': digit = 2; break;
-+ case '3': digit = 3; break;
-+ case '4': digit = 4; break;
-+ case '5': digit = 5; break;
-+ case '6': digit = 6; break;
-+ case '7': digit = 7; break;
-+ case '8': digit = 8; break;
-+ case '9': digit = 9; break;
-+ case 'a': case 'A': digit = 10; break;
-+ case 'b': case 'B': digit = 11; break;
-+ case 'c': case 'C': digit = 12; break;
-+ case 'd': case 'D': digit = 13; break;
-+ case 'e': case 'E': digit = 14; break;
-+ case 'f': case 'F': digit = 15; break;
-+ case ':':
-+ if (seen_a_digit)
-+ bytes = (bytes+1) & ~1;
-+ else
-+ bytes += 2; /* i.e. ff::ff is ff:00:ff */
-+ seen_a_digit = 0;
-+ break;
-+ case 0:
-+ if (bytes == 0) /* nothing new seen so far */
-+ return 0;
-+ /*fall through*/
-+ case ',': case ';':
-+ if (bytes > 0)
-+ bytes = 12; /* i.e. all trailing bytes 0 */
-+ break;
-+ default:
-+ printk(KERN_ERR MACLIST_NAME ": invalid character <%c[%d]>\n",
-+ *param, *param);
-+ return -EINVAL;
-+ }
-+
-+ if (digit >= 0) {
-+ id[bytes>>1] = (id[bytes>>1] << 4) + digit; break;
-+ ++bytes;
-+ seen_a_digit = 1;
-+ }
-+
-+ if (bytes >= 12) {
-+ int rc = maclist_add(id);
-+ if (unlikely(rc))
-+ return rc;
-+ bytes = 0;
-+ seen_a_digit = 0;
-+ memset(id, 0, sizeof id);
-+ if (*param == 0)
-+ return 0;
-+ }
-+ ++param;
-+ } while (1);
-+
-+ return 0;
-+}
-+
-+#if (defined CONFIG_PROC_FS) || (defined MODULE)
-+/*
-+ * Character device read
-+ */
-+static int maclist_getchar(off_t n) {
-+ static char xdigit[16] = "0123456789abcdef";
-+ maclist_entry_t *head = maclist_list;
-+ int b;
-+
-+ do {
-+ if (head == 0)
-+ return -1;
-+ if (n < 18)
-+ break;
-+ head = head->next;
-+ n -= 18;
-+ } while (1);
-+
-+ if (n == 17)
-+ return '\n';
-+
-+ b = n/3;
-+ switch (n - b*3) {
-+ case 0: return xdigit[head->id[b] >> 4];
-+ case 1: return xdigit[head->id[b] & 0xf];
-+ default: return ':';
-+ }
-+}
-+#endif
-+
-+/*
-+ * procfs support, if compiled in.
-+ */
-+#ifdef CONFIG_PROC_FS
-+/*
-+ * The extensively undocumented proc_read_t callback is implemented here.
-+ * Go look in fs/proc/generic.c:
-+ *
-+ * Prototype:
-+ * int f(char *buffer, char **start, off_t offset,
-+ * int count, int *peof, void *dat)
-+ *
-+ * Assume that the buffer is "count" bytes in size.
-+ *
-+ * 2) Set *start = an address within the buffer.
-+ * Put the data of the requested offset at *start.
-+ * Return the number of bytes of data placed there.
-+ * If this number is greater than zero and you
-+ * didn't signal eof and the reader is prepared to
-+ * take more data you will be called again with the
-+ * requested offset advanced by the number of bytes
-+ * absorbed.
-+ */
-+static int maclist_proc_read(char *buffer, char **start, off_t offset,
-+ int count, int *peof, void *dat) {
-+ int total;
-+
-+ *start = buffer;
-+ total = 0;
-+
-+ while (total < count) {
-+ int ch = maclist_getchar(offset++);
-+ if (ch == -1) {
-+ *peof = 1;
-+ break;
-+ }
-+ *buffer++ = ch;
-+ ++total;
-+ }
-+
-+ return total;
-+}
-+#endif
-+
-+/*
-+ * set works once, at init time (the param is set to 0444 below),
-+ * get works any time.
-+ */
-+static int param_set_maclist(const char *val, struct kernel_param *kp)
-+{
-+ if (maclist_list == 0)
-+ return maclist_setup(val);
-+
-+ printk(KERN_ERR MACLIST_NAME ": call to set parameters too late\n");
-+ return -EINVAL;
-+}
-+
-+static int param_get_maclist(char *buffer, struct kernel_param *kp)
-+{
-+#ifdef MODULE
-+ off_t offset = 0;
-+
-+ /* buffer is only 4k! */
-+ while (offset < 4096) {
-+ int ch = maclist_getchar(offset++);
-+ if (ch < 0) {
-+ *buffer = 0;
-+ return 0;
-+ }
-+ *buffer++ = ch;
-+ }
-+
-+ *--buffer = 0;
-+ return -ENOMEM;
-+#else
-+ return -EINVAL;
-+#endif
-+}
-+
-+/*
-+ * module: the argument is ids=mac,mac,mac
-+ * kernel command line: maclist.ids=mac,mac,mac
-+ */
-+#define param_check_maclist(name, p) __param_check(name, p, maclist_entry_t*)
-+module_param_named(ids, maclist_list, maclist, 0444);
-+MODULE_PARM_DESC(ids, "comma separated list of MAC ids\n");
-+
-+/*
-+ * Finally, the init/exit functions.
-+ */
-+static void __exit maclist_exit(void)
-+{
-+ maclist_entry_t *list;
-+
-+ remove_proc_entry(MACLIST_NAME, proc_net);
-+
-+ write_lock(&maclist_lock);
-+ list = maclist_list;
-+ maclist_list = 0;
-+ write_unlock(&maclist_lock);
-+
-+ while (list != 0) {
-+ maclist_entry_t *head = list;
-+ list = head->next;
-+ kfree(head);
-+ }
-+}
-+
-+static int __init maclist_init(void)
-+{
-+# ifdef MODULE
-+ if (ids[0])
-+ maclist_setup(ids);
-+# endif
-+
-+ /* Ignore failure, the module will still work. */
-+ (void)create_proc_read_entry(MACLIST_NAME, S_IRUGO, proc_net, maclist_proc_read, NULL);
-+
-+ return 0;
-+}
-+
-+module_init(maclist_init);
-+module_exit(maclist_exit);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/net/maclist.h 2006-02-23 18:30:54.000000000 +0100
-@@ -0,0 +1,49 @@
-+#ifndef _MACLIST_H
-+#define _MACLIST_H 1
-+/*
-+ * Interfaces to the MAC repository
-+ *
-+ * Copyright (C) 2005 John Bowler
-+ * Author: John Bowler <jbowler@acm.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * version 2 as published by the Free Software Foundation.
-+ */
-+
-+/*
-+ * Add a single entry, returns 0 on success else an error
-+ * code. Allocates memory, claims and releases a write
-+ * lock.
-+ */
-+extern int maclist_add(const u8 id_to_add[6]);
-+
-+/*
-+ * Return the current entry count, claims and releases a
-+ * read lock.
-+ */
-+extern int maclist_count(void);
-+
-+/*
-+ * Return the ID from the given entry. Always succeeds.
-+ * Claims and releases a write lock.
-+ *
-+ * If any entry has not been allocated for this key one
-+ * is allocated. If there are no remaining unallocated
-+ * entries a new one is created.
-+ *
-+ * If the value of the key is less than maclist_count()
-+ * the entry indexed by the key (i.e. for key 'n' the
-+ * n'th entry starting at 0) will be returned if available.
-+ * Otherwise the entry to be returned will be unpredictable
-+ * but consistent for a given value of maclist_count().
-+ */
-+extern void maclist_read(u8 (*buffer_for_id)[6],
-+ u32 key_of_entry_to_return);
-+
-+/*
-+ * See the implementation in drivers/net/maclist.c for
-+ * more information.
-+ */
-+#endif /*_MACLIST_H*/
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-mac.patch b/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-mac.patch
deleted file mode 100644
index c3d919569b..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-mac.patch
+++ /dev/null
@@ -1,84 +0,0 @@
- arch/arm/mach-ixp4xx/nas100d-setup.c | 64 +++++++++++++++++++++++++++++++++++
- 1 file changed, 64 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-27 03:03:47.000000000 +0200
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-27 03:37:23.000000000 +0200
-@@ -15,6 +15,9 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -110,8 +113,68 @@ static void nas100d_power_off(void)
- gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot config partition is added the MAC address is read from
-+ * it.
-+ */
-+static struct sockaddr mac;
-+
-+static void nas100d_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot config") == 0) {
-+ size_t retlen;
-+ int err;
-+ /* the mac addr is at a known offset */
-+ err = mtd->read(mtd, 0x0FD8, 6, &retlen, (u8 *) &mac.sa_data);
-+ if (err != 0 || retlen != 6)
-+ printk(KERN_ERR "nas100d: mac addr read failed\n");
-+ }
-+}
-+
-+/*
-+ * Nothing to do on remove at present.
-+ */
-+static void nas100d_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nas100d_flash_notifier = {
-+ .add = nas100d_flash_add,
-+ .remove = nas100d_flash_remove,
-+};
-+
-+static int nas100d_netdev_event(struct notifier_block *this,
-+ unsigned long event, void *ptr)
-+{
-+ struct net_device *dev = ptr;
-+
-+ /* identify the ixp4xx eth, port 1 */
-+ if (dev->dev_addr[1] != 0x02 || dev->dev_addr[2] != 0xB3
-+ || dev->dev_addr[5] != 0x01)
-+ return NOTIFY_DONE;
-+
-+ if (event == NETDEV_REGISTER && is_valid_ether_addr(mac.sa_data)) {
-+ mac.sa_family = dev->type;
-+ dev_set_mac_address(dev, &mac);
-+ printk(KERN_INFO
-+ "ixp400_eth: MAC address now set to %.2x:%.2x:%.2x:%.2x:%.2x:%.2x for port 0\n",
-+ mac.sa_data[0], mac.sa_data[1], mac.sa_data[2],
-+ mac.sa_data[3], mac.sa_data[4], mac.sa_data[5]);
-+ }
-+
-+ return NOTIFY_DONE;
-+}
-+
-+static struct notifier_block nas100d_netdev_notifier = {
-+ .notifier_call = nas100d_netdev_event,
-+};
-+
- static void __init nas100d_init(void)
- {
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nas100d_flash_notifier);
-+ register_netdevice_notifier(&nas100d_netdev_notifier);
-+
- ixp4xx_sys_init();
-
- /* gpio 14 and 15 are _not_ clocks */
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-maclist.patch
deleted file mode 100644
index c10a77354b..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/92-nas100d-maclist.patch
+++ /dev/null
@@ -1,77 +0,0 @@
- arch/arm/mach-ixp4xx/Kconfig | 1
- arch/arm/mach-ixp4xx/nas100d-setup.c | 39 +++++++++++++++++++++++++++++++++++
- 2 files changed, 40 insertions(+)
-
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/Kconfig 2006-02-06 22:34:20.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/Kconfig 2006-02-06 22:35:26.000000000 +0100
-@@ -80,6 +80,7 @@ config ARCH_PRPMC1100
- config MACH_NAS100D
- bool
- prompt "NAS100D"
-+ select MACLIST
- help
- Say 'Y' here if you want your kernel to support Iomega's
- NAS 100d device. For more information on this platform,
---- linux-nslu2.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-06 20:37:01.000000000 +0100
-+++ linux-nslu2/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-02-06 22:35:26.000000000 +0100
-@@ -15,12 +15,15 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
- #include <asm/setup.h>
-
-+#include <net/maclist.h>
-+
- static struct flash_platform_data nas100d_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -109,8 +112,44 @@ static void nas100d_power_off(void)
- gpio_line_set(NAS100D_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot config partition is added the MAC address is read from
-+ * it.
-+ */
-+static void nas100d_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot config") == 0) {
-+ size_t retlen;
-+ u_char mac[6];
-+
-+ /* The MAC is at a known offset... */
-+ if (mtd->read(mtd, 0x0FD8, 6, &retlen, mac) == 0 && retlen == 6) {
-+ printk(KERN_INFO "NAS100D MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ } else {
-+ printk(KERN_ERR "NAS100D MAC: read failed\n");
-+ }
-+ }
-+}
-+
-+/*
-+ * Nothing to do on remove at present.
-+ */
-+static void nas100d_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nas100d_flash_notifier = {
-+ .add = nas100d_flash_add,
-+ .remove = nas100d_flash_remove,
-+};
-+
- static void __init nas100d_init(void)
- {
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nas100d_flash_notifier);
-+
- ixp4xx_sys_init();
-
- nas100d_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-mac.patch b/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-mac.patch
deleted file mode 100644
index e96c5f9e75..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-mac.patch
+++ /dev/null
@@ -1,87 +0,0 @@
- arch/arm/mach-ixp4xx/nslu2-setup.c | 62 +++++++++++++++++++++++++++++++++++++
- 1 file changed, 62 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-03-27 14:42:07.000000000 +0200
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-03-27 14:45:45.000000000 +0200
-@@ -16,6 +16,9 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -117,6 +120,58 @@ static void nslu2_power_off(void)
- gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot config partition is added the MAC address is read from
-+ * it.
-+ */
-+static struct sockaddr mac;
-+
-+static void nslu2_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot") == 0) {
-+ size_t retlen;
-+ int err;
-+ /* the mac addr is at a known offset */
-+ err = mtd->read(mtd, 0x3FFB0, 6, &retlen, (u8 *) &mac.sa_data);
-+ if (err != 0 || retlen != 6)
-+ printk(KERN_ERR "nslu2: mac addr read failed\n");
-+ }
-+}
-+
-+static void nslu2_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nslu2_flash_notifier = {
-+ .add = nslu2_flash_add,
-+ .remove = nslu2_flash_remove,
-+};
-+
-+
-+static int nslu2_netdev_event(struct notifier_block *this,
-+ unsigned long event, void *ptr)
-+{
-+ struct net_device *dev = ptr;
-+
-+ /* identify the ixp4xx eth, port 1 */
-+ if (dev->dev_addr[1] != 0x02 || dev->dev_addr[2] != 0xB3
-+ || dev->dev_addr[5] != 0x01)
-+ return NOTIFY_DONE;
-+
-+ if (event == NETDEV_REGISTER && is_valid_ether_addr(mac.sa_data)) {
-+ mac.sa_family = dev->type;
-+ dev_set_mac_address(dev, &mac);
-+ printk(KERN_INFO
-+ "ixp400_eth: MAC address now set to %.2x:%.2x:%.2x:%.2x:%.2x:%.2x for port 0\n",
-+ mac.sa_data[0], mac.sa_data[1], mac.sa_data[2],
-+ mac.sa_data[3], mac.sa_data[4], mac.sa_data[5]);
-+ }
-+
-+ return NOTIFY_DONE;
-+}
-+
-+static struct notifier_block nslu2_netdev_notifier = {
-+ .notifier_call = nslu2_netdev_event,
-+};
-+
- static void __init nslu2_init(void)
- {
- /* The NSLU2 has a 33MHz crystal on board - 1.01% different
-@@ -124,6 +180,12 @@ static void __init nslu2_init(void)
- */
- ixp4xx_set_board_tick_rate(66000000);
-
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nslu2_flash_notifier);
-+ register_netdevice_notifier(&nslu2_netdev_notifier);
-+
- ixp4xx_sys_init();
-
- nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-maclist.patch b/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-maclist.patch
deleted file mode 100644
index a280a49e6f..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/92-nslu2-maclist.patch
+++ /dev/null
@@ -1,81 +0,0 @@
- arch/arm/mach-ixp4xx/Kconfig | 1
- arch/arm/mach-ixp4xx/nslu2-setup.c | 39 +++++++++++++++++++++++++++++++++++++
- 2 files changed, 40 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-03-08 10:33:10.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-03-08 10:33:14.000000000 +0100
-@@ -16,11 +16,14 @@
- #include <linux/kernel.h>
- #include <linux/serial.h>
- #include <linux/serial_8250.h>
-+#include <linux/mtd/mtd.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-
-+#include <net/maclist.h>
-+
- static struct flash_platform_data nslu2_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -117,6 +120,37 @@ static void nslu2_power_off(void)
- gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
- }
-
-+/*
-+ * When the RedBoot partition is added the MAC address is read from
-+ * it.
-+ */
-+static void nslu2_flash_add(struct mtd_info *mtd) {
-+ if (strcmp(mtd->name, "RedBoot") == 0) {
-+ size_t retlen;
-+ u_char mac[6];
-+
-+ /* The MAC is at a known offset... */
-+ if (mtd->read(mtd, 0x3FFB0, 6, &retlen, mac) == 0 && retlen == 6) {
-+ printk(KERN_INFO "NSLU2 MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
-+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-+ maclist_add(mac);
-+ } else {
-+ printk(KERN_ERR "NSLU2 MAC: read failed\n");
-+ }
-+ }
-+}
-+
-+/*
-+ * Nothing to do on remove at present.
-+ */
-+static void nslu2_flash_remove(struct mtd_info *mtd) {
-+}
-+
-+static struct mtd_notifier nslu2_flash_notifier = {
-+ .add = nslu2_flash_add,
-+ .remove = nslu2_flash_remove,
-+};
-+
- static void __init nslu2_init(void)
- {
- /* The NSLU2 has a 33MHz crystal on board - 1.01% different
-@@ -124,6 +158,11 @@ static void __init nslu2_init(void)
- */
- ixp4xx_set_board_tick_rate(66000000);
-
-+ /* The flash has an ethernet MAC embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+ register_mtd_user(&nslu2_flash_notifier);
-+
- ixp4xx_sys_init();
-
- nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/Kconfig 2006-03-08 10:33:12.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/Kconfig 2006-03-08 10:33:22.000000000 +0100
-@@ -11,6 +11,7 @@ comment "IXP4xx Platforms"
- config MACH_NSLU2
- bool
- prompt "Linksys NSLU2"
-+ select MACLIST
- help
- Say 'Y' here if you want your kernel to support Linksys's
- NSLU2 NAS device. For more information on this platform,
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch
deleted file mode 100644
index 6f82262967..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/94-loft-setup.patch
+++ /dev/null
@@ -1,214 +0,0 @@
-
----
- arch/arm/mach-ixp4xx/ixdp425-setup.c | 173 ++++++++++++++++++++++++++++++++---
- 1 file changed, 163 insertions(+), 10 deletions(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-03-27 03:08:59.000000000 +0200
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/ixdp425-setup.c 2006-03-27 03:40:03.000000000 +0200
-@@ -11,20 +11,26 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/device.h>
--#include <linux/serial.h>
--#include <linux/tty.h>
- #include <linux/serial_8250.h>
--#include <linux/slab.h>
--
--#include <asm/types.h>
-+#include <linux/i2c.h>
-+#include <linux/eeprom.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
- #include <asm/setup.h>
- #include <asm/memory.h>
- #include <asm/hardware.h>
- #include <asm/mach-types.h>
--#include <asm/irq.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-
-+#ifdef CONFIG_LEDS_CLASS
-+#include <linux/leds.h>
-+#endif
-+
-+#ifdef CONFIG_MACLIST
-+#include <net/maclist.h>
-+#endif
-+
- static struct flash_platform_data ixdp425_flash_data = {
- .map_name = "cfi_probe",
- .width = 2,
-@@ -176,22 +182,169 @@ MACHINE_START(AVILA, "Gateworks Avila Ne
- MACHINE_END
- #endif
-
-+#ifdef CONFIG_MACH_LOFT
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource loft_led_resources[] = {
-+ {
-+ .name = "ready", /* green led, also J8 pin 7 */
-+ .start = 3, /* FIXME use #define */
-+ .end = 3,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device loft_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(loft_led_resources),
-+ .resource = loft_led_resources,
-+};
-+#endif
-+
- /*
- * Loft is functionally equivalent to Avila except that it has a
- * different number for the maximum PCI devices. The MACHINE
-- * structure below is identical to Avila except for the comment.
-+ * structure below is derived from the Avila one (and may, in
-+ * fact, be useful on Avila in general).
-+ *
-+ * The loft init registers a notifier on the on-board EEPROM to
-+ * detect the MAC addresses.
-+ * NOTE: this probably works for all Gateworks Avila boards and
-+ * maybe the ixdp425 too.
-+ *
-+ * When the EEPROM is added the MAC address are read from it.
- */
--#ifdef CONFIG_MACH_LOFT
-+
-+#if defined(CONFIG_SENSORS_EEPROM)
-+static unsigned char loft_macs[12];
-+
-+static int loft_eeprom_event(struct notifier_block *this,
-+ unsigned long event, void *ptr)
-+{
-+ struct eeprom_data *data = ptr;
-+
-+ /* The MACs are the first 12 bytes in the eeprom at address 0x51 */
-+ if (event == EEPROM_REGISTER && data->client.addr == 0x51)
-+ data->attr->read(&data->client.dev.kobj, loft_macs, 0, 12);
-+
-+ return NOTIFY_DONE;
-+}
-+
-+static struct notifier_block loft_eeprom_notifier = {
-+ .notifier_call = loft_eeprom_event,
-+};
-+
-+static int loft_netdev_event(struct notifier_block *this,
-+ unsigned long event, void *ptr)
-+{
-+ struct net_device *dev = ptr;
-+ unsigned char *hwaddr = NULL;
-+
-+ /* identify the ixp4xx eth */
-+ if (dev->dev_addr[1] != 0x02 || dev->dev_addr[2] != 0xB3)
-+ return NOTIFY_DONE;
-+
-+ if (event != NETDEV_REGISTER)
-+ return NOTIFY_DONE;
-+
-+ /* identify the port */
-+ if (dev->dev_addr[5] == 0x01)
-+ hwaddr = &loft_macs[0];
-+ else if (dev->dev_addr[5] == 0x02)
-+ hwaddr = &loft_macs[6];
-+
-+ if (hwaddr && is_valid_ether_addr(hwaddr)) {
-+ struct sockaddr addr;
-+ addr.sa_family = dev->type;
-+ memcpy(addr.sa_data, hwaddr, ETH_ALEN);
-+ dev_set_mac_address(dev, &addr);
-+ }
-+
-+ return NOTIFY_DONE;
-+}
-+
-+static struct notifier_block loft_netdev_notifier = {
-+ .notifier_call = loft_netdev_event,
-+};
-+#endif
-+
-+static void __init loft_init(void)
-+{
-+ ixdp425_init();
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care if this fails. */
-+ (void)platform_device_register(&loft_leds);
-+#endif
-+ /* The EEPROM has two ethernet MACs embedded in it which we need,
-+ * that is all this notifier does.
-+ */
-+#ifdef CONFIG_SENSORS_EEPROM
-+ register_eeprom_notifier(&loft_eeprom_notifier);
-+ register_netdevice_notifier(&loft_netdev_notifier);
-+#endif
-+}
-+
-+/*
-+ * Loft bootstrap may pass in parameters, if these contain an
-+ * ATAG_MEM and it appears valid (not the 16MByte one in the
-+ * setup/kernel.c default) we use it, otherwise a 64MByte
-+ * setting is forced here, this may be overridden on the
-+ * command line.
-+ */
-+static void __init loft_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* Put Loft specific known-required-for-certain stuff here, leave
-+ * a trailing space!
-+ */
-+ static char loft_command_line[] =
-+ "root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc "
-+ "rtc-ds1672.probe=0,0x68 "
-+ CONFIG_CMDLINE;
-+
-+ int memtag = 0;
-+
-+ /* The Loft typically has one bank of 64MByte memory.
-+ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
-+ * the mem tags from the tag list, so if there is an entry
-+ * there don't remove it!
-+ */
-+ if (tags->hdr.tag == ATAG_CORE) do {
-+ tags = tag_next(tags);
-+ printk(KERN_NOTICE "ATAG[0x%x] size %d\n", tags->hdr.tag, tags->hdr.size);
-+ if (tags->hdr.tag == ATAG_MEM && tags->hdr.size == tag_size(tag_mem32) &&
-+ (tags->u.mem.start != 0 || tags->u.mem.size != (16*1024*1024))) {
-+ memtag = 1;
-+ printk(KERN_NOTICE " ATAG_MEM base %x, size %dMB\n",
-+ tags->u.mem.start,
-+ tags->u.mem.size / (1024*1024));
-+ }
-+ } while (tags->hdr.size);
-+
-+ if (!memtag) {
-+ mi->nr_banks = 1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (64*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+ }
-+
-+ /* A command line in the ATAG list will override this one,
-+ * as is intended.
-+ */
-+ strlcpy(*cmdline, loft_command_line, COMMAND_LINE_SIZE);
-+}
-+
- MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
- /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
- .phys_ram = PHYS_OFFSET,
- .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
- .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
-+ .fixup = loft_fixup,
- .map_io = ixp4xx_map_io,
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
- .boot_params = 0x0100,
-- .init_machine = ixdp425_init,
-+ .init_machine = loft_init,
- MACHINE_END
- #endif
--
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/94-nslu2-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/94-nslu2-setup.patch
deleted file mode 100644
index 3effbc7711..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/94-nslu2-setup.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-Include a fixup machine start function in nslu2-setup.c to handle
-the command line and memory setup parameters which are not specifiable
-in the boot loader.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
- arch/arm/mach-ixp4xx/nslu2-setup.c | 45 ++++++++++++++++++++++++++++++++++++-
- 1 file changed, 44 insertions(+), 1 deletion(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-23 18:31:00.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-23 18:31:04.000000000 +0100
-@@ -18,6 +18,8 @@
- #include <linux/serial_8250.h>
- #include <linux/mtd/mtd.h>
-
-+#include <asm/setup.h>
-+#include <asm/memory.h>
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
- #include <asm/mach/flash.h>
-@@ -174,11 +176,52 @@ static void __init nslu2_init(void)
- platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
- }
-
-+/*
-+ * NSLU2 RedBoot passes garbage atag/parameter values because it copies
-+ * the kernel zImage on top of the parameter list before branching into
-+ * the zImage. The machine description causes the ATAG list to be
-+ * skipped (by setting boot_params to 0) and this code fixes up the
-+ * memory info and command line by supplying a command line with the
-+ * NSLU2 specific config prepended.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+static char nslu2_command_line[] __initdata =
-+ "root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc "
-+ "rtc-x1205.probe=0,0x6f "
-+ CONFIG_CMDLINE;
-+
-+static void __init nslu2_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The NSLU2 has one bank of 32MByte memory.
-+ * NOTE: to make a 'fatslug' work append the appropriate
-+ * mem= to the CONFIG_CMDLINE - this will override the
-+ * setting below.
-+ */
-+ mi->nr_banks=1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (32*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+
-+ strlcpy(*cmdline, nslu2_command_line, COMMAND_LINE_SIZE);
-+}
-+
- MACHINE_START(NSLU2, "Linksys NSLU2")
- /* Maintainer: www.nslu2-linux.org */
- .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
- .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-- .boot_params = 0x00000100,
-+ .boot_params = 0, /* because they are garbage - see above */
-+ .fixup = nslu2_fixup,
- .map_io = ixp4xx_map_io,
- .init_irq = ixp4xx_init_irq,
- .timer = &ixp4xx_timer,
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/951-ixp4xx-leds-cpu-activity.patch b/packages/linux/ixp4xx-kernel/2.6.16/951-ixp4xx-leds-cpu-activity.patch
deleted file mode 100644
index 6d4c53026c..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/951-ixp4xx-leds-cpu-activity.patch
+++ /dev/null
@@ -1,596 +0,0 @@
-This patches the new LEDs code to add cpu activity and
-inactivity triggers to the timer triggers. The new triggers
-set the LED with the trigger to different states (on,
-flashing or off) according to whether or not all CPUs
-are idle.
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
----
- arch/arm/kernel/process.c | 11
- drivers/leds/Kconfig | 9
- drivers/leds/Makefile | 1
- drivers/leds/ledtrig-cpu.c | 501 +++++++++++++++++++++++++++++++++++++++++++++
- include/linux/leds.h | 9
- 5 files changed, 531 insertions(+)
-
---- linux-ixp4xx.orig/arch/arm/kernel/process.c 2006-02-21 00:53:28.000000000 +0100
-+++ linux-ixp4xx/arch/arm/kernel/process.c 2006-02-21 01:03:33.000000000 +0100
-@@ -27,6 +27,7 @@
- #include <linux/kallsyms.h>
- #include <linux/init.h>
- #include <linux/cpu.h>
-+#include <linux/leds.h>
- #include <linux/elfcore.h>
-
- #include <asm/leds.h>
-@@ -80,6 +81,12 @@ void (*pm_power_off)(void);
- EXPORT_SYMBOL(pm_power_off);
-
- /*
-+ * CPU activity indicator.
-+ */
-+void (*leds_idle)(int is_idle);
-+EXPORT_SYMBOL(leds_idle);
-+
-+/*
- * This is our default idle handler. We need to disable
- * interrupts here to ensure we don't miss a wakeup call.
- */
-@@ -120,8 +127,12 @@ void cpu_idle(void)
- if (!idle)
- idle = default_idle;
- leds_event(led_idle_start);
-+ if (leds_idle)
-+ leds_idle(1);
- while (!need_resched())
- idle();
-+ if (leds_idle)
-+ leds_idle(0);
- leds_event(led_idle_end);
- preempt_enable_no_resched();
- schedule();
---- linux-ixp4xx.orig/drivers/leds/Kconfig 2006-02-21 00:58:36.000000000 +0100
-+++ linux-ixp4xx/drivers/leds/Kconfig 2006-02-21 01:03:33.000000000 +0100
-@@ -66,5 +66,14 @@ config LEDS_TRIGGER_TIMER
- This allows LEDs to be controlled by a programmable timer
- via sysfs. If unsure, say Y.
-
-+config LEDS_TRIGGER_CPU_ACTIVITY
-+ tristate "LED CPU activity trigger"
-+ depends LEDS_TRIGGER_TIMER
-+ help
-+ This allows LEDs to be set to show cpu activity via sysfs.
-+ The LED will blink when the cpu is active and stay steady
-+ (on or off according to the trigger selected) when idle.
-+ If unsure, say Y.
-+
- endmenu
-
---- linux-ixp4xx.orig/drivers/leds/Makefile 2006-02-21 00:58:36.000000000 +0100
-+++ linux-ixp4xx/drivers/leds/Makefile 2006-02-21 01:03:33.000000000 +0100
-@@ -13,3 +13,4 @@ obj-$(CONFIG_LEDS_TOSA) += leds-tosa.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-+obj-$(CONFIG_LEDS_TRIGGER_CPU_ACTIVITY) += ledtrig-cpu.o
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/ledtrig-cpu.c 2006-02-21 01:08:57.000000000 +0100
-@@ -0,0 +1,501 @@
-+/*
-+ * LEDs CPU activity trigger
-+ *
-+ * Author: John Bowler <jbowler@acm.org>
-+ *
-+ * Copyright (c) 2006 John Bowler
-+ *
-+ * Permission is hereby granted, free of charge, to any
-+ * person obtaining a copy of this software and associated
-+ * documentation files (the "Software"), to deal in the
-+ * Software without restriction, including without
-+ * limitation the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of
-+ * the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the
-+ * following conditions:
-+ *
-+ * The above copyright notice and this permission notice
-+ * shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-+ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/ctype.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/spinlock.h>
-+#include <linux/timer.h>
-+#include <linux/device.h>
-+
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+//#include <linux/list.h>
-+//#include <linux/sysdev.h>
-+
-+
-+/*
-+ * To simplify this the LED state is given for each case of
-+ * CPU state - idle or active. The LED can be:
-+ *
-+ * off
-+ * flash - slow for idle, fast (flicker) for active
-+ * on
-+ *
-+ * This gives two useless states - off/off and on/on
-+ */
-+typedef enum cpu_trigger_led_state {
-+ cpu_led_off,
-+ cpu_led_flash,
-+ cpu_led_on,
-+ cpu_led_invalid
-+} cpu_trigger_led_state;
-+
-+static const char *const cpu_trigger_names[] = {
-+ "off",
-+ "flash",
-+ "on",
-+ "invalid"
-+};
-+
-+/* Forward declaration - this is called back when an LED property
-+ * is changed.
-+ */
-+static void leds_cpu_trigger_state_change(void);
-+
-+/*
-+ * These constants define the actual mark/space of the flashing
-+ * in jiffies. msecs_to_jiffies rounds up and is compile time
-+ * evaluable for constant arguments. Writing the ?: stuff below
-+ * this way ensures the compiler doesn't think it needs to
-+ * compile in the math of msecs_to_jiffies.
-+ *
-+ * These values have been determined by experiment to work well
-+ * for the ready/status LED on a LinkSys NSLU2 (light piped) and
-+ * for the user LED on a Loft (Gateway Avila variant) board where
-+ * the LED was directly visible. Light Output Varies Everywhere.
-+ */
-+#define LEDS_CPU_ACTIVE_MARK msecs_to_jiffies(40)
-+#define LEDS_CPU_IDLE_MARK msecs_to_jiffies(800)
-+#define LEDS_CPU_ACTIVE_SPACE msecs_to_jiffies(60)
-+#define LEDS_CPU_IDLE_SPACE msecs_to_jiffies(800)
-+
-+
-+/*
-+ * Individual LEDs ------------------------------------------------------------
-+ */
-+struct cpu_trigger_data {
-+ cpu_trigger_led_state active; /* Behaviour when the CPU is active. */
-+ cpu_trigger_led_state idle; /* Behaviour when the CPU is idle. */
-+};
-+
-+/*
-+ * LED state change - called when the state of a single LED might
-+ * have changed. Returns true if the LED is blinking. The argument
-+ * is the blink state - the brightness of the blinking LED.
-+ */
-+static int leds_cpu_trigger_led_state_change(struct led_classdev *led,
-+ int is_active, enum led_brightness brightness)
-+{
-+ int is_blinking = 0;
-+
-+ write_lock(&led->lock);
-+ {
-+ struct cpu_trigger_data *data = led->trigger_data;
-+
-+ /* Find the new brightness for the LED, if the LED is
-+ * set to flash then the brightness passed in is the
-+ * required value.
-+ */
-+ if (likely(data != 0))
-+ switch (is_active ? data->active : data->idle) {
-+ case cpu_led_off: brightness = LED_OFF; break;
-+ case cpu_led_flash: is_blinking = 1; break;
-+ case cpu_led_on: brightness = LED_FULL; break;
-+ }
-+ else
-+ brightness = is_active ? LED_FULL : LED_OFF;
-+
-+ led_set_brightness(led, brightness);
-+ }
-+ write_unlock(&led->lock);
-+
-+ return is_blinking;
-+}
-+
-+/*
-+ * sysfs properties, the property is output at an list of the
-+ * values with the current setting enclosed in []
-+ */
-+static ssize_t leds_cpu_trigger_show_prop(struct class_device *dev, char *buf,
-+ size_t where)
-+{
-+ struct led_classdev *led = dev->class_data;
-+ cpu_trigger_led_state item = cpu_led_invalid, i;
-+ char *next;
-+
-+ read_lock(&led->lock);
-+ {
-+ if (likely(led->trigger_data != 0))
-+ item = *(const cpu_trigger_led_state*)(
-+ led->trigger_data + where);
-+ }
-+ read_unlock(&led->lock);
-+
-+ for (i=0, next=buf; i<cpu_led_invalid; ++i) {
-+ const char *name = cpu_trigger_names[i];
-+ size_t len = strlen(name);
-+
-+ if (i == item)
-+ *next++ = '[';
-+ memcpy(next, name, len);
-+ next += len;
-+ if (i == item)
-+ *next++ = ']';
-+ *next++ = ' ';
-+ }
-+
-+ next[-1] = '\n';
-+ *next++ = 0;
-+
-+ return next - buf;
-+}
-+
-+static ssize_t leds_cpu_trigger_show_active(struct class_device *dev, char *buf)
-+{
-+ return leds_cpu_trigger_show_prop(dev, buf,
-+ offsetof(struct cpu_trigger_data, active));
-+}
-+
-+static ssize_t leds_cpu_trigger_show_idle(struct class_device *dev, char *buf)
-+{
-+ return leds_cpu_trigger_show_prop(dev, buf,
-+ offsetof(struct cpu_trigger_data, idle));
-+}
-+
-+/*
-+ * Any matching leading substring selects a property - so "onoffonoff"
-+ * sets the property to off.
-+ */
-+static ssize_t leds_cpu_trigger_store_prop(struct class_device *dev,
-+ const char *buf, size_t size, size_t where)
-+{
-+ size_t rc = 0;
-+ cpu_trigger_led_state value = 0/*sic*/;
-+ struct led_classdev *led;
-+
-+ /* ignore space characters before the value. */
-+ while (rc < size && isspace(buf[rc]))
-+ ++rc;
-+ if (rc >= size)
-+ return rc;
-+
-+ /* look for a simple match against the trigger name, case
-+ * sensitive.
-+ */
-+ do {
-+ const char *name = cpu_trigger_names[value];
-+ size_t len = strlen(name);
-+ if (len <= size && memcmp(buf+rc, name, len) == 0) {
-+ rc = len;
-+ break;
-+ }
-+ if (++value >= cpu_led_invalid)
-+ return -EINVAL;
-+ } while (1);
-+
-+ led = dev->class_data;
-+ write_lock(&led->lock);
-+ {
-+ if (likely(led->trigger_data != 0))
-+ *(cpu_trigger_led_state*)(
-+ led->trigger_data + where) = value;
-+
-+ }
-+ write_unlock(&led->lock);
-+
-+ return rc;
-+}
-+
-+static ssize_t leds_cpu_trigger_store_active(struct class_device *dev,
-+ const char *buf, size_t size)
-+{
-+ ssize_t rc = leds_cpu_trigger_store_prop(dev, buf, size,
-+ offsetof(struct cpu_trigger_data, active));
-+ /*
-+ * At least one CPU must be active (otherwise who is doing this?)
-+ * Call down into the global state below to cause an update
-+ * to happen now.
-+ */
-+ leds_cpu_trigger_state_change();
-+ return rc;
-+}
-+
-+static ssize_t leds_cpu_trigger_store_idle(struct class_device *dev,
-+ const char *buf, size_t size)
-+{
-+ return leds_cpu_trigger_store_prop(dev, buf, size,
-+ offsetof(struct cpu_trigger_data, idle));
-+}
-+
-+static CLASS_DEVICE_ATTR(active, 0644, leds_cpu_trigger_show_active,
-+ leds_cpu_trigger_store_active);
-+
-+static CLASS_DEVICE_ATTR(idle, 0644, leds_cpu_trigger_show_idle,
-+ leds_cpu_trigger_store_idle);
-+
-+/*
-+ * Activate and deactivate are called on individual LEDs when the
-+ * LED trigger property is changed. The LED write lock is held.
-+ */
-+static void leds_cpu_trigger_activate(struct led_classdev *led)
-+{
-+ /*
-+ * The initial setting of the trigger is simple CPU activity
-+ * with the LED off for idle and on for active. Consequently
-+ * there is no need to mess with the global state initially,
-+ * we know the CPU is active at this moment!
-+ */
-+ struct cpu_trigger_data *data = kmalloc(sizeof *data, GFP_KERNEL);
-+ if (unlikely(data == 0))
-+ return;
-+
-+ data->active = cpu_led_on;
-+ data->idle = cpu_led_off;
-+ led->trigger_data = data;
-+
-+ class_device_create_file(led->class_dev, &class_device_attr_active);
-+ class_device_create_file(led->class_dev, &class_device_attr_idle);
-+
-+ led_set_brightness(led, LED_FULL);
-+}
-+
-+static void leds_cpu_trigger_deactivate(struct led_classdev *led)
-+{
-+ struct cpu_trigger_data *data = led->trigger_data;
-+ if (likely(data != 0)) {
-+ led_set_brightness(led, LED_OFF);
-+
-+ class_device_remove_file(led->class_dev, &class_device_attr_idle);
-+ class_device_remove_file(led->class_dev, &class_device_attr_active);
-+
-+ led->trigger_data = 0;
-+ kfree(data);
-+ }
-+}
-+
-+
-+/*
-+ * Global state --------------------------------------------------------------
-+ *
-+ * This is global because the CPU state is global and we only need one timer to
-+ * do this stuff.
-+ */
-+typedef struct leds_cpu_trigger_data {
-+ struct led_trigger trigger; /* the lock in here protects everything */
-+ struct timer_list timer;
-+ unsigned long last_active_time; /* record of last jiffies */
-+ unsigned long last_idle_time; /* record of last jiffies */
-+ int count_active; /* number of active CPUs */
-+} leds_cpu_trigger_data;
-+
-+/*
-+ * Mark state - uses the current time (jiffies) to work out
-+ * whether this is a mark or space.
-+ */
-+static int leds_cpu_trigger_mark(struct leds_cpu_trigger_data *data,
-+ unsigned long now) {
-+ if (data->count_active > 0) {
-+ unsigned long elapsed = now - data->last_active_time;
-+ elapsed %= LEDS_CPU_ACTIVE_SPACE + LEDS_CPU_ACTIVE_MARK;
-+ data->last_active_time = now - elapsed;
-+ return elapsed > LEDS_CPU_ACTIVE_SPACE;
-+ } else {
-+ unsigned long elapsed = now - data->last_idle_time;
-+ elapsed %= LEDS_CPU_IDLE_SPACE + LEDS_CPU_IDLE_MARK;
-+ data->last_idle_time = now - elapsed;
-+ return elapsed > LEDS_CPU_IDLE_SPACE;
-+ }
-+}
-+
-+
-+/*
-+ * State change - given information about the nature of the
-+ * (possible) state change call up to each LED to adjust its
-+ * state. Returns true if any LED is blinking. The lock
-+ * must be held (a read lock is adequate).
-+ */
-+static int leds_cpu_trigger_scan_leds(struct leds_cpu_trigger_data *data,
-+ unsigned long now)
-+{
-+ int blinking = 0;
-+ const int active = data->count_active > 0;
-+ const enum led_brightness brightness =
-+ leds_cpu_trigger_mark(data, now) ? LED_FULL : LED_OFF;
-+ struct list_head *entry;
-+
-+ list_for_each(entry, &data->trigger.led_cdevs) {
-+ struct led_classdev *led =
-+ list_entry(entry, struct led_classdev, trig_list);
-+
-+ blinking |= leds_cpu_trigger_led_state_change(led,
-+ active, brightness);
-+ }
-+
-+ return blinking;
-+}
-+
-+/*
-+ * Set the timer correctly according to the current state, the lock
-+ * must be held for write.
-+ */
-+static void leds_cpu_trigger_set_timer(struct leds_cpu_trigger_data *state,
-+ unsigned long now)
-+{
-+ unsigned long next;
-+ if (state->count_active > 0) {
-+ next = state->last_active_time;
-+ if (now - next > LEDS_CPU_ACTIVE_SPACE)
-+ next += LEDS_CPU_ACTIVE_MARK;
-+ next += LEDS_CPU_ACTIVE_SPACE;
-+ } else {
-+ next = state->last_idle_time;
-+ if (now - next > LEDS_CPU_IDLE_SPACE)
-+ next += LEDS_CPU_IDLE_MARK;
-+ next += LEDS_CPU_IDLE_SPACE;
-+ }
-+ mod_timer(&state->timer, next);
-+}
-+
-+/*
-+ * The timer callback if the LED is currently flashing, the callback
-+ * calls the state change function and, if that returns true, meaning
-+ * that at least one LED is still blinking, the timer is restarted
-+ * with the correct timeout.
-+ */
-+static void leds_cpu_trigger_timer_callback(unsigned long data)
-+{
-+ struct leds_cpu_trigger_data *state =
-+ (struct leds_cpu_trigger_data *)data;
-+
-+ write_lock(&state->trigger.leddev_list_lock);
-+ {
-+ unsigned long now = jiffies;
-+
-+ /* If at least one LED is set to flash; set the timer
-+ * again (this won't reset the timer set within the
-+ * idle loop).
-+ */
-+ if (leds_cpu_trigger_scan_leds(state, now))
-+ leds_cpu_trigger_set_timer(state, now);
-+ }
-+ write_unlock(&state->trigger.leddev_list_lock);
-+}
-+
-+
-+/*
-+ * There is one global control structure, one timer and one set
-+ * of state for active CPUs shared across all the LEDs. Individual
-+ * LEDs say how this state to be handled. It is currently *not*
-+ * possible to show per-cpu activity on individual LEDs, the code
-+ * maintains a count of active CPUs and the state is only 'idle'
-+ * if all CPUs are idle.
-+ */
-+static struct leds_cpu_trigger_data leds_cpu_trigger = {
-+ .trigger = {
-+ .name = "cpu",
-+ .activate = leds_cpu_trigger_activate,
-+ .deactivate = leds_cpu_trigger_deactivate,
-+ } ,
-+ .timer = TIMER_INITIALIZER(leds_cpu_trigger_timer_callback, 0,
-+ (unsigned long)&leds_cpu_trigger),
-+ .last_active_time = 0,
-+ .last_idle_time = 0,
-+ .count_active = 0,
-+};
-+
-+/*
-+ * State change - callback from an individual LED on a property change which
-+ * might require a redisplay.
-+ */
-+static void leds_cpu_trigger_state_change() {
-+ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+ {
-+ unsigned long now = jiffies;
-+
-+ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now) &&
-+ !timer_pending(&leds_cpu_trigger.timer))
-+ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now);
-+ }
-+ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+}
-+
-+/*
-+ * Called from every CPU at the start and end of the idle loop.
-+ * The active count is initially 0, even though CPUs are running,
-+ * so the code below must check for the resultant underflow.
-+ *
-+ * If the idle behaviour is 'flash' then when the timer times out
-+ * it will take the CPU out of idle, set the active state (which
-+ * may also be flash), drop back into idle and reset the timer to
-+ * the idle timeout...
-+ */
-+static void leds_cpu_trigger_idle(int is_idle)
-+{
-+ write_lock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+ if ((is_idle && leds_cpu_trigger.count_active > 0 &&
-+ --leds_cpu_trigger.count_active == 0) ||
-+ (!is_idle && leds_cpu_trigger.count_active < num_online_cpus() &&
-+ ++leds_cpu_trigger.count_active == 1)) {
-+ unsigned long now = jiffies;
-+
-+ /* State change - the system just became idle or active,
-+ * call the del_timer first in an attempt to minimise
-+ * getting a timer interrupt which will take us unnecessarily
-+ * out of idle (this doesn't matter).
-+ */
-+ del_timer(&leds_cpu_trigger.timer);
-+ if (leds_cpu_trigger_scan_leds(&leds_cpu_trigger, now))
-+ leds_cpu_trigger_set_timer(&leds_cpu_trigger, now);
-+ }
-+ write_unlock(&leds_cpu_trigger.trigger.leddev_list_lock);
-+}
-+
-+/*
-+ * Module init and exit - register the trigger, then store
-+ * the idle callback in the arch-specific global. For this
-+ * module to link (into the kernel) or load (into a running
-+ * kernel) the architecture must define the leds_idle global.
-+ */
-+static int __init leds_cpu_trigger_init(void)
-+{
-+ int rc = led_trigger_register(&leds_cpu_trigger.trigger);
-+ leds_idle = leds_cpu_trigger_idle;
-+ return rc;
-+}
-+module_init(leds_cpu_trigger_init);
-+
-+static void __exit leds_cpu_trigger_exit(void)
-+{
-+ leds_idle = 0;
-+ del_timer_sync(&leds_cpu_trigger.timer);
-+ led_trigger_unregister(&leds_cpu_trigger.trigger);
-+}
-+module_exit(leds_cpu_trigger_exit);
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("CPU activity LED trigger");
-+MODULE_LICENSE("MIT");
---- linux-ixp4xx.orig/include/linux/leds.h 2006-02-21 00:54:33.000000000 +0100
-+++ linux-ixp4xx/include/linux/leds.h 2006-02-21 01:03:33.000000000 +0100
-@@ -102,4 +102,13 @@ void led_trigger_event(struct led_trigge
- #define led_trigger_event(x, y) do {} while(0)
-
- #endif
-+
-+/*
-+ * CPU activity indication.
-+ */
-+/* Idle callback - call with is_idle==1 at the start of the idle loop
-+ * and with is_idle==0 at the end. This symbol must be defined by
-+ * the arch core to be able to use LEDS_TRIGGER_CPU_ACTIVITY
-+ */
-+extern void (*leds_idle)(int is_idle);
- #endif /* __LINUX_LEDS_H_INCLUDED */
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/96-nas100d-leds.patch b/packages/linux/ixp4xx-kernel/2.6.16/96-nas100d-leds.patch
deleted file mode 100644
index 60b6bbd4c9..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/96-nas100d-leds.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-NEW_LEDS support for the IOMega NAS100D
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
----
- arch/arm/mach-ixp4xx/nas100d-setup.c | 43 ++++++++++++++++++++++++++++++++++-
- 1 file changed, 42 insertions(+), 1 deletion(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-27 13:45:22.000000000 +0200
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nas100d-setup.c 2006-03-27 13:46:00.000000000 +0200
-@@ -18,6 +18,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/netdevice.h>
- #include <linux/etherdevice.h>
-+#include <linux/leds.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -41,6 +42,36 @@ static struct platform_device nas100d_fl
- .resource = &nas100d_flash_resource,
- };
-
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource nas100d_led_resources[] = {
-+ {
-+ .name = "wlan", /* green led */
-+ .start = 0,
-+ .end = 0,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "ready", /* blue power led (off is flashing!) */
-+ .start = 15,
-+ .end = 15,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "disk", /* yellow led */
-+ .start = 3,
-+ .end = 3,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device nas100d_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(nas100d_led_resources),
-+ .resource = nas100d_led_resources,
-+};
-+#endif
-+
- static struct ixp4xx_i2c_pins nas100d_i2c_gpio_pins = {
- .sda_pin = NAS100D_SDA_PIN,
- .scl_pin = NAS100D_SCL_PIN,
-@@ -99,7 +130,6 @@ static struct platform_device nas100d_ua
- static struct platform_device *nas100d_devices[] __initdata = {
- &nas100d_i2c_controller,
- &nas100d_flash,
-- &nas100d_uart,
- };
-
- static void nas100d_power_off(void)
-@@ -187,7 +217,18 @@ static void __init nas100d_init(void)
-
- pm_power_off = nas100d_power_off;
-
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&nas100d_uart);
-+
- platform_add_devices(nas100d_devices, ARRAY_SIZE(nas100d_devices));
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&nas100d_leds);
-+#endif
- }
-
- /*
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/96-nslu2-leds.patch b/packages/linux/ixp4xx-kernel/2.6.16/96-nslu2-leds.patch
deleted file mode 100644
index 7890d392b0..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/96-nslu2-leds.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-NEW_LEDS support for the LinkSys NSLU2
-
-Signed-off-by: John Bowler <jbowler@acm.org>
-
- arch/arm/mach-ixp4xx/nslu2-setup.c | 51 ++++++++++++++++++++++++++++++++++++-
- 1 file changed, 50 insertions(+), 1 deletion(-)
-
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-21 02:54:05.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/nslu2-setup.c 2006-02-21 02:54:05.000000000 +0100
-@@ -17,6 +17,9 @@
- #include <linux/mtd/mtd.h>
- #include <linux/netdevice.h>
- #include <linux/etherdevice.h>
-+#ifdef CONFIG_LEDS_CLASS
-+#include <linux/leds.h>
-+#endif
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -48,6 +51,42 @@ static struct ixp4xx_i2c_pins nslu2_i2c_
- .scl_pin = NSLU2_SCL_PIN,
- };
-
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource nslu2_led_resources[] = {
-+ {
-+ .name = "ready", /* green led */
-+ .start = NSLU2_LED_GRN,
-+ .end = NSLU2_LED_GRN,
-+ .flags = IXP4XX_GPIO_HIGH,
-+ },
-+ {
-+ .name = "status", /* red led */
-+ .start = NSLU2_LED_RED,
-+ .end = NSLU2_LED_RED,
-+ .flags = IXP4XX_GPIO_HIGH,
-+ },
-+ {
-+ .name = "disk-1",
-+ .start = NSLU2_LED_DISK1,
-+ .end = NSLU2_LED_DISK1,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "disk-2",
-+ .start = NSLU2_LED_DISK2,
-+ .end = NSLU2_LED_DISK2,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+};
-+
-+static struct platform_device nslu2_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(nslu2_led_resources),
-+ .resource = nslu2_led_resources,
-+};
-+#endif
-+
- static struct platform_device nslu2_i2c_controller = {
- .name = "IXP4XX-I2C",
- .id = 0,
-@@ -107,7 +146,6 @@ static struct platform_device nslu2_uart
- static struct platform_device *nslu2_devices[] __initdata = {
- &nslu2_i2c_controller,
- &nslu2_flash,
-- &nslu2_uart,
- &nslu2_beeper,
- };
-
-@@ -173,7 +211,18 @@ static void __init nslu2_init(void)
-
- pm_power_off = nslu2_power_off;
-
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&nslu2_uart);
-+
- platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&nslu2_leds);
-+#endif
- }
-
- /*
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/96-pata-ixp4xx.patch b/packages/linux/ixp4xx-kernel/2.6.16/96-pata-ixp4xx.patch
deleted file mode 100644
index 1c08150c45..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/96-pata-ixp4xx.patch
+++ /dev/null
@@ -1,299 +0,0 @@
----
- drivers/scsi/Kconfig | 11 +-
- drivers/scsi/Makefile | 1
- drivers/scsi/libata-core.c | 4
- drivers/scsi/pata_ixp4xx.c | 242 +++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 255 insertions(+), 3 deletions(-)
-
---- linux-ixp4xx.orig/drivers/scsi/Kconfig 2006-02-24 18:13:55.000000000 +0100
-+++ linux-ixp4xx/drivers/scsi/Kconfig 2006-02-24 18:50:19.000000000 +0100
-@@ -903,11 +903,20 @@ config SCSI_PATA_WINBOND
- tristate "Winbond SL82C105 PATA support"
- depends on SCSI_SATA && PCI
- help
-- This option enables support for SL82C105 PATA devices found in the
-+ This option enables support for SL82C105 PATAll devices found in the
- Netwinder and some other systems
-
- If unsure, say N.
-
-+config SCSI_PATA_IXP4XX
-+ tristate "IXP4XX Compact FLash support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for a Compact Flash connected on
-+ the ixp4xx expansion bus.
-+
-+ If unsure, say N.
-+
-
- config SCSI_BUSLOGIC
- tristate "BusLogic SCSI support"
---- linux-ixp4xx.orig/drivers/scsi/Makefile 2006-02-24 18:13:55.000000000 +0100
-+++ linux-ixp4xx/drivers/scsi/Makefile 2006-02-24 18:16:46.000000000 +0100
-@@ -174,6 +174,7 @@ obj-$(CONFIG_SCSI_PATA_VIA) += libata.o
- obj-$(CONFIG_SCSI_PATA_WINBOND) += libata.o pata_sl82c105.o
- obj-$(CONFIG_SCSI_ATA_GENERIC) += libata.o ata_generic.o
- obj-$(CONFIG_SCSI_PATA_LEGACY) += libata.o pata_legacy.o
-+obj-$(CONFIG_SCSI_PATA_IXP4XX) += libata.o pata_ixp4xx.o
-
- obj-$(CONFIG_ARM) += arm/
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/scsi/pata_ixp4xx.c 2006-02-24 18:43:02.000000000 +0100
-@@ -0,0 +1,242 @@
-+/*
-+ * pata-ixp4xx.c - Legacy port PATA/SATA controller driver.
-+ * Copyright (c) 2006 Tower Technologies
-+ *
-+ * An ATA driver to handle a Compact Flash connected
-+ * to the ixp4xx expansion bus.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/libata.h>
-+#include <scsi/scsi_host.h>
-+
-+#define DRV_NAME "ixp4xx"
-+#define DRV_VERSION "0.0.2"
-+
-+/* XXX remove when converting to platform driver */
-+#define IXP4XX_IDE_BASE IXP4XX_EXP_BUS_BASE(1)
-+#define IXP4XX_IDE_IRQ IRQ_IXP4XX_GPIO12
-+#define IXP4XX_IDE_CONTROL 0x1e
-+#define IXP4XX_IDE_INT 12
-+#define IXP4XX_IDE_CS1_BITS 0xbfff0043
-+#define IXP4XX_IDE_PIO_MASK 0x1f
-+
-+#ifdef __ARMEB__
-+#define ixp4xx_writew(data,addr) writew(data,addr)
-+#define ixp4xx_readw(addr) readw(addr)
-+#else
-+#define ixp4xx_writew(data,addr) writew(le16_to_cpu(data),addr)
-+#define ixp4xx_readw(addr) cpu_to_le16(readw(addr))
-+#endif
-+
-+static struct ata_host_set *ixp4xx_host;
-+
-+static unsigned int ixp4xx_mode_filter(const struct ata_port *ap,
-+ struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ if (shift != ATA_SHIFT_PIO)
-+ return 0;
-+ return mask;
-+}
-+
-+static void ixp4xx_set_mode(struct ata_port *ap)
-+{
-+ int i;
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+ if (ata_dev_present(dev)) {
-+ dev->pio_mode = XFER_PIO_0;
-+ dev->xfer_mode = XFER_PIO_0;
-+ dev->xfer_shift = ATA_SHIFT_PIO;
-+ dev->flags |= ATA_DFLAG_PIO;
-+ }
-+ }
-+}
-+
-+static void ixp4xx_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+void ixp4xx_mmio_data_xfer(struct ata_port *ap, struct ata_device *adev,
-+ unsigned char *buf, unsigned int buflen, int write_data)
-+{
-+ unsigned int i;
-+ unsigned int words = buflen >> 1;
-+ u16 *buf16 = (u16 *) buf;
-+ void __iomem *mmio = (void __iomem *)ap->ioaddr.data_addr;
-+
-+ /* set the expansion bus in 16bit mode and restore
-+ * 8 bit mode after the transaction.
-+ */
-+ *IXP4XX_EXP_CS1 &= ~(0x00000001);
-+
-+ /* Transfer multiple of 2 bytes */
-+ if (write_data) {
-+ for (i = 0; i < words; i++)
-+ writew(buf16[i], mmio);
-+ } else {
-+ for (i = 0; i < words; i++)
-+ buf16[i] = readw(mmio);
-+ }
-+
-+ /* Transfer trailing 1 byte, if any. */
-+ if (unlikely(buflen & 0x01)) {
-+ u16 align_buf[1] = { 0 };
-+ unsigned char *trailing_buf = buf + buflen - 1;
-+
-+ if (write_data) {
-+ memcpy(align_buf, trailing_buf, 1);
-+ writew(le16_to_cpu(align_buf[0]), mmio);
-+ } else {
-+ align_buf[0] = cpu_to_le16(readw(mmio));
-+ memcpy(trailing_buf, align_buf, 1);
-+ }
-+ }
-+
-+ *IXP4XX_EXP_CS1 |= 0x00000001;
-+}
-+
-+void ixp4xx_host_stop(struct ata_host_set *host_set)
-+{
-+ ata_host_stop(host_set);
-+ release_region(IXP4XX_IDE_BASE, 0x1000);
-+}
-+
-+static struct scsi_host_template ixp4xx_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations ixp4xx_port_ops = {
-+ .set_mode = ixp4xx_set_mode,
-+ .mode_filter = ixp4xx_mode_filter,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ixp4xx_mmio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ixp4xx_host_stop,
-+
-+ .phy_reset = ixp4xx_phy_reset,
-+};
-+
-+/* adjust the addresses to handle the address swizzling of the
-+ * ixp4xx in little endian mode.
-+ */
-+#ifndef __ARMEB__
-+void ixp4xx_fix_le_ports(struct ata_ioports *ioaddr)
-+{
-+ ioaddr->data_addr ^= 0x02;
-+ ioaddr->cmd_addr ^= 0x03;
-+ ioaddr->altstatus_addr ^= 0x03;
-+ ioaddr->ctl_addr ^= 0x03;
-+ ioaddr->error_addr ^= 0x03;
-+ ioaddr->feature_addr ^= 0x03;
-+ ioaddr->nsect_addr ^= 0x03;
-+ ioaddr->lbal_addr ^= 0x03;
-+ ioaddr->lbam_addr ^= 0x03;
-+ ioaddr->lbah_addr ^= 0x03;
-+ ioaddr->device_addr ^= 0x03;
-+ ioaddr->status_addr ^= 0x03;
-+ ioaddr->command_addr ^= 0x03;
-+}
-+#endif
-+
-+static __init int ixp4xx_init_one(unsigned long base, unsigned int irq)
-+{
-+ int ret;
-+ struct ata_probe_ent ae;
-+
-+ memset(&ae, 0, sizeof(struct ata_probe_ent));
-+ INIT_LIST_HEAD(&ae.node);
-+
-+ ae.mmio_base = ioremap(base, 0x1000);
-+ if (ae.mmio_base == NULL)
-+ return -ENOMEM;
-+
-+ if (request_region(base, 0x1000, "pata_ixp4xx") == NULL)
-+ return -EBUSY;
-+
-+ ae.dev = NULL;
-+ ae.port_ops = &ixp4xx_port_ops;
-+ ae.sht = &ixp4xx_sht;
-+ ae.n_ports = 1;
-+ ae.pio_mask = IXP4XX_IDE_PIO_MASK;
-+ ae.irq = irq;
-+ ae.irq_flags = 0;
-+ ae.host_flags = ATA_FLAG_IRQ_MASK | ATA_FLAG_MMIO;
-+
-+ ae.port[0].cmd_addr = (unsigned long) ae.mmio_base;
-+ ae.port[0].altstatus_addr = (unsigned long) ae.mmio_base + IXP4XX_IDE_CONTROL;
-+ ae.port[0].ctl_addr = (unsigned long) ae.mmio_base + IXP4XX_IDE_CONTROL;
-+ ata_std_ports(&ae.port[0]);
-+
-+#ifndef __ARMEB__
-+ ixp4xx_fix_le_ports(&ae.port[0]);
-+#endif
-+ ret = ata_device_add(&ae);
-+ if (ret == 0)
-+ return -ENODEV;
-+
-+ ixp4xx_host = ae.host_set;
-+ return 0;
-+}
-+
-+static __init int ixp4xx_init(void)
-+{
-+ gpio_line_config(IXP4XX_IDE_INT, IXP4XX_GPIO_IN | IXP4XX_GPIO_STYLE_ACTIVE_HIGH);
-+
-+ *IXP4XX_EXP_CS1 |= IXP4XX_IDE_CS1_BITS;
-+
-+ if (ixp4xx_init_one(IXP4XX_IDE_BASE, IXP4XX_IDE_INT) == 0)
-+ return 0;
-+
-+ return -ENODEV;
-+}
-+
-+static __exit void ixp4xx_exit(void)
-+{
-+ if (ixp4xx_host)
-+ ata_host_set_remove(ixp4xx_host);
-+}
-+
-+MODULE_AUTHOR("Alessandro Zummo");
-+MODULE_DESCRIPTION("low-level driver for ixp4xx CF/ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ixp4xx_init);
-+module_exit(ixp4xx_exit);
---- linux-ixp4xx.orig/drivers/scsi/libata-core.c 2006-02-24 18:13:55.000000000 +0100
-+++ linux-ixp4xx/drivers/scsi/libata-core.c 2006-02-24 18:16:46.000000000 +0100
-@@ -2513,8 +2513,8 @@ static void ata_dev_set_xfermode(struct
- tf.nsect = dev->xfer_mode;
-
- if (ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0)) {
-- printk(KERN_ERR "ata%u: failed to set xfermode, disabled\n",
-- ap->id);
-+ printk(KERN_ERR "ata%u: failed to set xfermode (0x%02x), disabled\n",
-+ ap->id, dev->xfer_mode);
- ata_port_disable(ap);
- }
-
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-buttons.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-buttons.patch
deleted file mode 100644
index 09129ac56a..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-buttons.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-Index: linux-2.6.15/arch/arm/mach-ixp4xx/ds101-buttons.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ds101-buttons.c 2006-02-23 08:40:28.000000000 +0100
-@@ -0,0 +1,117 @@
-+/*
-+ * arch/arm/mach-ixp4xx/ds101-buttons.c
-+ *
-+ * DS101 Button driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/reboot.h>
-+#include <linux/interrupt.h>
-+#include <asm/mach-types.h>
-+
-+extern void ctrl_alt_del(void);
-+static int usbcopyb_irqcount = 0;
-+static int resetb_irqcount = 0;
-+static int powerb_irqcount = 0;
-+
-+static irqreturn_t ds101_usbcopy_handler(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ usbcopyb_irqcount++;
-+ if (usbcopyb_irqcount > 1) /* Init creates one IRQ. Ignore it */
-+ {
-+ /* The GPIO line is shared between the button and the led.
-+ * Make sure the GPIO is GPIO_OUT, so we don't recieve
-+ * irqs from the led going on/off. Disable the irq just in
-+ * case.
-+ */
-+ gpio_line_config(DS101_USBCOPYB_IRQ, DS101_GPIO_OUT);
-+ disable_irq(DS101_USBCOPYB_IRQ);
-+ printk(KERN_INFO "Usbcopy\n");
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t ds101_power_handler(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ powerb_irqcount++;
-+ if (powerb_irqcount > 1)
-+ {
-+ /* Make the power led flash */
-+ gpio_line_set(DS101_POWER_LED, DS101_GPIO_HIGH);
-+ ctrl_alt_del();
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static irqreturn_t ds101_reset_handler(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ resetb_irqcount++;
-+ if (resetb_irqcount > 1)
-+ {
-+ machine_power_off();
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static int __init ds101_buttons_init(void)
-+{
-+ if (!(machine_is_ds101()))
-+ return 0;
-+ printk(KERN_INFO "DiskStation DS101 button driver v0.2\n");
-+ gpio_line_config(DS101_POWERB_GPIO, (DS101_GPIO_IN|IRQT_FALLING));
-+ gpio_line_config(DS101_RESETB_GPIO, (DS101_GPIO_IN|IRQT_FALLING));
-+ gpio_line_config(DS101_USBCOPYB_GPIO, (DS101_GPIO_IN|IRQT_FALLING));
-+ set_irq_type(DS101_USBCOPYB_IRQ, IRQT_FALLING);
-+ set_irq_type(DS101_POWERB_IRQ, IRQT_FALLING);
-+ set_irq_type(DS101_RESETB_IRQ, IRQT_FALLING);
-+ if (request_irq(DS101_USBCOPYB_IRQ, &ds101_usbcopy_handler, SA_INTERRUPT,
-+ "DS101 USBCopy button", NULL) < 0)
-+ {
-+ printk(KERN_DEBUG "Could not get USBCopy button IRQ (%d)\n",
-+ DS101_USBCOPYB_IRQ);
-+
-+ return -EIO;
-+ }
-+
-+ if (request_irq(DS101_POWERB_IRQ, &ds101_power_handler, SA_INTERRUPT,
-+ "DS101 Powerbutton", NULL) < 0)
-+ {
-+ printk(KERN_DEBUG "Could not get powerbutton IRQ (%d)\n",
-+ DS101_POWERB_IRQ);
-+ return -EIO;
-+ }
-+
-+ if (request_irq(DS101_RESETB_IRQ, &ds101_reset_handler, SA_INTERRUPT,
-+ "DS101 Resetbutton", NULL) < 0)
-+ {
-+ printk(KERN_DEBUG "Could not get resetbutton IRQ (%d)\n",
-+ DS101_RESETB_IRQ);
-+ return -EIO;
-+ }
-+ return 0;
-+}
-+
-+static void __exit ds101_buttons_exit(void)
-+{
-+ if (!(machine_is_ds101()))
-+ return;
-+
-+ disable_irq(DS101_USBCOPYB_IRQ);
-+ disable_irq(DS101_POWERB_IRQ);
-+ disable_irq(DS101_RESETB_IRQ);
-+ free_irq(DS101_USBCOPYB_IRQ, NULL);
-+ free_irq(DS101_POWERB_IRQ, NULL);
-+ free_irq(DS101_RESETB_IRQ, NULL);
-+}
-+
-+module_init(ds101_buttons_init);
-+module_exit(ds101_buttons_exit);
-+
-+MODULE_AUTHOR("OEyvind Repvik <nail@nslu2-linux.org>");
-+MODULE_DESCRIPTION("DS101 Button driver");
-+MODULE_LICENSE("GPL");
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-doc.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-doc.patch
deleted file mode 100644
index 470c03ab56..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-doc.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Index: linux-2.6.15/include/linux/mtd/doc2000.h
-===================================================================
---- linux-2.6.15.orig/include/linux/mtd/doc2000.h 2006-02-24 11:46:50.000000000 +0100
-+++ linux-2.6.15/include/linux/mtd/doc2000.h 2006-02-24 12:14:18.000000000 +0100
-@@ -73,14 +73,29 @@
- #define DoC_Mplus_Toggle 0x1046
- #define DoC_Mplus_DownloadStatus 0x1074
- #define DoC_Mplus_CtrlConfirm 0x1076
-+#ifdef CONFIG_MACH_DS101
-+#define DoC_Mplus_Power 0x1ffe
-+#else
- #define DoC_Mplus_Power 0x1fff
-+#endif
-
- /* How to access the device?
- * On ARM, it'll be mmap'd directly with 32-bit wide accesses.
- * On PPC, it's mmap'd and 16-bit wide.
-+ * On DS101 (an ARM device), some tricks are needed
- * Others use readb/writeb
- */
--#if defined(__arm__)
-+#ifdef CONFIG_MACH_DS101
-+#ifndef __ARMEB__
-+#define ReadDOC_(adr, reg) readw((unsigned long)(adr + reg) ^ 0x02)
-+#define WriteDOC_(d, adr, reg) writew(d, (unsigned long)(adr + reg) ^ 0x02)
-+#define DOC_IOREMAP_LEN 0x4000
-+#else
-+#define ReadDOC_(adr, reg) swab16(readw((void __iomem *)(adr) + (reg)))
-+#define WriteDOC_(d, adr, reg) writew(swab16(d), (void __iomem *)(adr) + (reg))
-+#define DOC_IOREMAP_LEN 0x4000
-+#endif
-+#elif defined(__arm__)
- #define ReadDOC_(adr, reg) ((unsigned char)(*(volatile __u32 *)(((unsigned long)adr)+((reg)<<2))))
- #define WriteDOC_(d, adr, reg) do{ *(volatile __u32 *)(((unsigned long)adr)+((reg)<<2)) = (__u32)d; wmb();} while(0)
- #define DOC_IOREMAP_LEN 0x8000
-@@ -92,7 +107,6 @@
- #define ReadDOC_(adr, reg) readb((void __iomem *)(adr) + (reg))
- #define WriteDOC_(d, adr, reg) writeb(d, (void __iomem *)(adr) + (reg))
- #define DOC_IOREMAP_LEN 0x2000
--
- #endif
-
- #if defined(__i386__) || defined(__x86_64__)
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch
deleted file mode 100644
index 3f94fab289..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-includes.patch
+++ /dev/null
@@ -1,120 +0,0 @@
- include/asm-arm/arch-ixp4xx/ds101.h | 87 +++++++++++++++++++++++++++++++++
- include/asm-arm/arch-ixp4xx/hardware.h | 1
- include/asm-arm/arch-ixp4xx/irqs.h | 7 ++
- 3 files changed, 95 insertions(+)
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/ds101.h 2006-02-23 18:09:24.000000000 +0100
-@@ -0,0 +1,87 @@
-+/*
-+ * DS101 platform specific definitions
-+ *
-+ * Author: Øyvind Repvik <nail@nslu2-linux.org>
-+ *
-+ * based on ixdp425.h:
-+ * Copyright 2004 (c) MontaVista, Software, Inc.
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2. This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#ifndef __ASM_ARCH_HARDWARE_H__
-+#error "Do not include this directly, instead #include <asm/hardware.h>"
-+#endif
-+
-+#define DS101_SCL_PIN DS101_GPIO0
-+#define DS101_SDA_PIN DS101_GPIO1
-+#define DS101_GPIO_BUZZ DS101_GPIO2
-+#define DS101_POWER_LED DS101_GPIO3
-+#define DS101_USBCOPYB_GPIO DS101_GPIO4
-+#define DS101_USBCOPY_SOLID_LED DS101_GPIO4 /* The led and button share GPIO */
-+#define DS101_USBCOPY_BLINK_LED DS101_GPIO5
-+/* GPIO6 is unknown */
-+#define DS101_POWEROFF_GPIO DS101_GPIO7
-+#define DS101_POWERB_GPIO DS101_GPIO8
-+#define DS101_PCI_INTC_PIN DS101_GPIO9
-+#define DS101_PCI_INTB_PIN DS101_GPIO10
-+#define DS101_PCI_INTA_PIN DS101_GPIO11
-+#define DS101_RESETB_GPIO DS101_GPIO12
-+#define DS101_STATUSOK_LED DS101_GPIO14
-+#define DS101_STATUSBAD_LED DS101_GPIO15
-+
-+#define DS101_PCI_MAX_DEV 2
-+#define DS101_PCI_IRQ_LINES 3
-+
-+#define DS101_POWERB_IRQ IRQ_IXP4XX_GPIO8
-+#define DS101_RESETB_IRQ IRQ_IXP4XX_GPIO12
-+#define DS101_USBCOPYB_IRQ IRQ_IXP4XX_GPIO4
-+
-+#define DS101_GPIO_IN IXP4XX_GPIO_IN
-+#define DS101_GPIO_OUT IXP4XX_GPIO_OUT
-+#define DS101_GPIO_HIGH 1
-+#define DS101_GPIO_LOW 0
-+
-+#define DS101_GPIO_CLK0_ENABLE 0x100
-+#define DS101_GPIO_CLK1_ENABLE 0x1000000
-+/* GPIO */
-+
-+#define DS101_GPIO0 0
-+#define DS101_GPIO1 1
-+#define DS101_GPIO2 2
-+#define DS101_GPIO3 3
-+#define DS101_GPIO4 4
-+#define DS101_GPIO5 5
-+#define DS101_GPIO6 6
-+#define DS101_GPIO7 7
-+#define DS101_GPIO8 8
-+#define DS101_GPIO9 9
-+#define DS101_GPIO10 10
-+#define DS101_GPIO11 11
-+#define DS101_GPIO12 12
-+#define DS101_GPIO13 13
-+#define DS101_GPIO14 14
-+#define DS101_GPIO15 15
-+
-+/* Stuff needed to setup the IXP expansion
-+ * bus on the DS101
-+ */
-+
-+#define DS101_EXP_RECOVERY_T(x) (((x) & 15) << 16)
-+#define DS101_EXP_HOLD_T(x) (((x) & 3) << 20)
-+#define DS101_EXP_STROBE_T(x) (((x) & 15) << 22)
-+#define DS101_EXP_SETUP_T(x) (((x) & 3) << 26)
-+#define DS101_EXP_ADDR_T(x) (((x) & 3) << 28)
-+
-+#define DS101_EXP_SZ_16M (15 << 10)
-+#define DS101_EXP_WR_EN (1 << 1)
-+#define DS101_EXP_BYTE_RD16 (1 << 6)
-+#define DS101_EXP_CS_EN (1 << 31)
-+
-+#define DS101_EXP_CS0_INIT (DS101_EXP_ADDR_T(1) | \
-+ DS101_EXP_SETUP_T(1) | DS101_EXP_STROBE_T(1) | \
-+ DS101_EXP_HOLD_T(1) | DS101_EXP_RECOVERY_T(1)| \
-+ DS101_EXP_SZ_16M | DS101_EXP_WR_EN | \
-+ DS101_EXP_BYTE_RD16 | DS101_EXP_CS_EN)
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/hardware.h 2006-02-23 18:09:14.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/hardware.h 2006-02-23 18:09:48.000000000 +0100
-@@ -47,5 +47,6 @@ extern unsigned int processor_id;
- #include "nslu2.h"
- #include "nas100d.h"
- #include "dsmg600.h"
-+#include "ds101.h"
-
- #endif /* _ASM_ARCH_HARDWARE_H */
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/irqs.h 2006-02-23 18:09:14.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/irqs.h 2006-02-23 18:09:24.000000000 +0100
-@@ -108,6 +108,13 @@
- #define IRQ_NAS100D_PCI_INTC IRQ_IXP4XX_GPIO9
- #define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8
- #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7
-+/*
-+ * DS101 board IRQs
-+ */
-+
-+#define IRQ_DS101_PCI_INTA IRQ_IXP4XX_GPIO11
-+#define IRQ_DS101_PCI_INTB IRQ_IXP4XX_GPIO10
-+#define IRQ_DS101_PCI_INTC IRQ_IXP4XX_GPIO9
-
- /*
- * D-Link DSM-G600 board IRQs
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch
deleted file mode 100644
index 48765e3017..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-pci.patch
+++ /dev/null
@@ -1,72 +0,0 @@
- arch/arm/mach-ixp4xx/ds101-pci.c | 66 +++++++++++++++++++++++++++++++++++++++
- 1 file changed, 66 insertions(+)
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/ds101-pci.c 2006-02-21 02:02:34.000000000 +0100
-@@ -0,0 +1,66 @@
-+/*
-+ * DS101 board-level PCI initialization
-+ *
-+ * based on ixdp425-pci.c:
-+ * Copyright (C) 2002 Intel Corporation.
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Maintainer: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+
-+#include <asm/mach/pci.h>
-+#include <asm/mach-types.h>
-+
-+void __init ds101_pci_preinit(void)
-+{
-+ set_irq_type(IRQ_DS101_PCI_INTA, IRQT_LOW);
-+ set_irq_type(IRQ_DS101_PCI_INTB, IRQT_LOW);
-+ set_irq_type(IRQ_DS101_PCI_INTC, IRQT_LOW);
-+
-+ ixp4xx_pci_preinit();
-+}
-+
-+static int __init ds101_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+ static int pci_irq_table[DS101_PCI_MAX_DEV][DS101_PCI_IRQ_LINES] =
-+ {
-+ { IRQ_DS101_PCI_INTA, -1, -1 },
-+ { IRQ_DS101_PCI_INTB, IRQ_DS101_PCI_INTB, IRQ_DS101_PCI_INTC },
-+ };
-+
-+ int irq = -1;
-+
-+ if (slot >= 1 && slot <= DS101_PCI_MAX_DEV &&
-+ pin >= 1 && pin <= DS101_PCI_IRQ_LINES)
-+ irq = pci_irq_table[slot-1][pin-1];
-+
-+ return irq;
-+}
-+
-+struct hw_pci __initdata ds101_pci = {
-+ .nr_controllers = 1,
-+ .preinit = ds101_pci_preinit,
-+ .swizzle = pci_std_swizzle,
-+ .setup = ixp4xx_setup,
-+ .scan = ixp4xx_scan_bus,
-+ .map_irq = ds101_map_irq,
-+};
-+
-+int __init ds101_pci_init(void)
-+{
-+ if (machine_is_ds101())
-+ pci_common_init(&ds101_pci);
-+
-+ return 0;
-+}
-+
-+subsys_initcall(ds101_pci_init);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch
deleted file mode 100644
index 5c922d2934..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101-setup.patch
+++ /dev/null
@@ -1,290 +0,0 @@
-Board setup code for the Synology DS101 platform
-
-Signed-off-by: Alessandro Zummo <a.zummo@towertech.it>
-Signed-off-by: Rod Whitby <rod@whitby.id.au>
-Signed-off-by: OEyvind Repvik <oyvind@repvik.org>
-
- arch/arm/mach-ixp4xx/Kconfig | 8 +
- arch/arm/mach-ixp4xx/Makefile | 2
- arch/arm/mach-ixp4xx/ds101-setup.c | 245 +++++++++++++++++++++++++++++++++++++
- 3 files changed, 254 insertions(+), 1 deletion(-)
-
-Index: linux-2.6.15/arch/arm/mach-ixp4xx/ds101-setup.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/ds101-setup.c 2006-02-24 12:37:01.000000000 +0100
-@@ -0,0 +1,245 @@
-+/*
-+ * Synology DS101 board setup
-+ *
-+ * based ixdp425-setup.c:
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Author: Rod Whitby <rod@whitby.id.au>
-+ * Author: OEyvind Repvik <oyvind@repvik.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/serial.h>
-+#include <linux/serial_8250.h>
-+#include <linux/leds.h>
-+#include <linux/pci.h>
-+
-+#include <asm/setup.h>
-+#include <asm/memory.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/flash.h>
-+
-+#ifdef CONFIG_MACLIST
-+#include <net/maclist.h>
-+#endif
-+
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource ds101_led_resources[] = {
-+ {
-+ .name = "power",
-+ .start = DS101_POWER_LED,
-+ .end = DS101_POWER_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "usbcopy-solid",
-+ .start = DS101_USBCOPY_SOLID_LED,
-+ .end = DS101_USBCOPY_SOLID_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "usbcopy-blink",
-+ .start = DS101_USBCOPY_BLINK_LED,
-+ .end = DS101_USBCOPY_BLINK_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "status-ready",
-+ .start = DS101_STATUSOK_LED,
-+ .end = DS101_STATUSOK_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "status-error",
-+ .start = DS101_STATUSBAD_LED,
-+ .start = DS101_STATUSBAD_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ }
-+};
-+
-+
-+static struct platform_device ds101_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(ds101_led_resources),
-+ .resource = ds101_led_resources,
-+};
-+#endif
-+
-+static struct ixp4xx_i2c_pins ds101_i2c_gpio_pins = {
-+ .sda_pin = DS101_SDA_PIN,
-+ .scl_pin = DS101_SCL_PIN,
-+};
-+
-+static struct platform_device ds101_i2c_controller = {
-+ .name = "IXP4XX-I2C",
-+ .id = 0,
-+ .dev.platform_data = &ds101_i2c_gpio_pins,
-+ .num_resources = 0,
-+};
-+
-+static struct platform_device ds101_beeper = {
-+ .name = "ixp4xx-beeper",
-+ .id = DS101_GPIO_BUZZ,
-+ .num_resources = 0,
-+};
-+
-+static struct resource ds101_uart_resources[] = {
-+ {
-+ .start = IXP4XX_UART1_BASE_PHYS,
-+ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = IXP4XX_UART2_BASE_PHYS,
-+ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ }
-+};
-+
-+static struct plat_serial8250_port ds101_uart_data[] = {
-+ {
-+ .mapbase = IXP4XX_UART1_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART1,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ {
-+ .mapbase = IXP4XX_UART2_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART2,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ { }
-+};
-+
-+static struct platform_device ds101_uart = {
-+ .name = "serial8250",
-+ .id = PLAT8250_DEV_PLATFORM,
-+ .dev.platform_data = ds101_uart_data,
-+ .num_resources = 2,
-+ .resource = ds101_uart_resources,
-+};
-+
-+static struct platform_device *ds101_devices[] __initdata = {
-+ &ds101_i2c_controller,
-+ &ds101_beeper,
-+};
-+
-+static void ds101_power_off(void)
-+{
-+ /* Simple, but effective */
-+ gpio_line_set(DS101_POWEROFF_GPIO, IXP4XX_GPIO_LOW);
-+}
-+
-+static void ds101_gpio_setup(void)
-+{
-+ /* Set up buzzer */
-+ gpio_line_config(DS101_GPIO_BUZZ, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_GPIO_BUZZ, DS101_GPIO_LOW);
-+
-+ /* Set up power led */
-+ gpio_line_config(DS101_POWER_LED, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_POWER_LED, DS101_GPIO_LOW);
-+
-+ /* Poweroff */
-+ gpio_line_config(DS101_POWEROFF_GPIO, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_POWEROFF_GPIO, DS101_GPIO_HIGH);
-+
-+ /* Status leds */
-+ (*IXP4XX_GPIO_GPCLKR) = ((*IXP4XX_GPIO_GPCLKR) & ~DS101_GPIO_CLK0_ENABLE);
-+ (*IXP4XX_GPIO_GPCLKR) = ((*IXP4XX_GPIO_GPCLKR) & ~DS101_GPIO_CLK1_ENABLE);
-+ gpio_line_config(DS101_STATUSOK_LED, DS101_GPIO_OUT);
-+ gpio_line_config(DS101_STATUSBAD_LED, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_STATUSOK_LED, DS101_GPIO_HIGH);
-+ gpio_line_set(DS101_STATUSBAD_LED, DS101_GPIO_LOW);
-+};
-+
-+static void ds101_cs0_setup(void)
-+{
-+ *IXP4XX_EXP_CS0 = DS101_EXP_CS0_INIT;
-+};
-+
-+static void __init ds101_init(void)
-+{
-+ ixp4xx_sys_init();
-+
-+ ds101_cs0_setup(); /* Needed for DoC support */
-+ ds101_gpio_setup();
-+ pm_power_off = ds101_power_off;
-+
-+ platform_add_devices(ds101_devices, ARRAY_SIZE(ds101_devices));
-+
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&ds101_uart);
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&ds101_leds);
-+#endif
-+}
-+
-+/*
-+ * DS101 bootstrap may pass in parameters, but we zap the mem
-+ * settings to be safe (DS101 always has 64MByte at 0, DS101J has
-+ * 32MB). The passed in command line can override this default, we
-+ * prepend to the config'ed default.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+
-+static char ds101_command_line[] __initdata =
-+ "root=/dev/sda2 rootfstype=ext3 init=/sbin/init "
-+ "rtc-rs5c372.probe=0,0x32 "
-+ CONFIG_CMDLINE;
-+
-+static void __init ds101_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The DS101 has one bank of 64MByte memory.
-+ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
-+ * the mem tags from the tag list. We need do nothing here!
-+ */
-+ mi->nr_banks=1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (64*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+ /* A command line in the ATAG list will override this one,
-+ * as is intended.
-+ */
-+ strlcpy(*cmdline, ds101_command_line, COMMAND_LINE_SIZE);
-+}
-+
-+MACHINE_START(DS101, "Synology DiskStation DS101")
-+ /* Maintainer: www.nslu2-linux.org */
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-+ .boot_params = 0x00000100,
-+ .fixup = ds101_fixup,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .init_machine = ds101_init,
-+MACHINE_END
-Index: linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig
-===================================================================
---- linux-2.6.15.orig/arch/arm/mach-ixp4xx/Kconfig 2006-02-24 11:44:49.000000000 +0100
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/Kconfig 2006-02-24 11:44:49.000000000 +0100
-@@ -94,6 +94,14 @@
- DSM-G600 device. For more information on this platform,
- see http://www.nslu2-linux.org/
-
-+config MACH_DS101
-+ bool
-+ prompt "DS101"
-+ help
-+ Say 'Y' here if you want your kernel to support Synology's
-+ DiskStation DS101(j) device. For more information on this
-+ platform see http://www.nslu2-linux.org/wiki/DS101/HomePage
-+
- #
- # Avila and IXDP share the same source for now. Will change in future
- #
-Index: linux-2.6.15/arch/arm/mach-ixp4xx/Makefile
-===================================================================
---- linux-2.6.15.orig/arch/arm/mach-ixp4xx/Makefile 2006-02-24 11:44:48.000000000 +0100
-+++ linux-2.6.15/arch/arm/mach-ixp4xx/Makefile 2006-02-24 11:44:49.000000000 +0100
-@@ -11,4 +11,4 @@
- obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
- obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
- obj-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o dsmg600-setup.o
--
-+obj-$(CONFIG_MACH_DS101) += ds101-pci.o ds101-setup.o ds101-buttons.o
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101.patch b/packages/linux/ixp4xx-kernel/2.6.16/97-ds101.patch
deleted file mode 100644
index 77df5ace86..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/97-ds101.patch
+++ /dev/null
@@ -1,457 +0,0 @@
- arch/arm/mach-ixp4xx/Kconfig | 8 +
- arch/arm/mach-ixp4xx/Makefile | 2
- arch/arm/mach-ixp4xx/ds101-pci.c | 66 +++++++++
- arch/arm/mach-ixp4xx/ds101-setup.c | 234 +++++++++++++++++++++++++++++++++
- include/asm-arm/arch-ixp4xx/ds101.h | 88 ++++++++++++
- include/asm-arm/arch-ixp4xx/hardware.h | 1
- include/asm-arm/arch-ixp4xx/irqs.h | 8 +
- 7 files changed, 406 insertions(+), 1 deletion(-)
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/ds101.h 2006-03-08 08:41:31.000000000 +0100
-@@ -0,0 +1,88 @@
-+/*
-+ * DS101 platform specific definitions
-+ *
-+ * Author: Øyvind Repvik <nail@nslu2-linux.org>
-+ *
-+ * based on ixdp425.h:
-+ * Copyright 2004 (c) MontaVista, Software, Inc.
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2. This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#ifndef __ASM_ARCH_HARDWARE_H__
-+#error "Do not include this directly, instead #include <asm/hardware.h>"
-+#endif
-+
-+#define DS101_SCL_PIN DS101_GPIO0
-+#define DS101_SDA_PIN DS101_GPIO1
-+#define DS101_GPIO_BUZZ DS101_GPIO2
-+#define DS101_POWER_LED DS101_GPIO3
-+#define DS101_USBCOPYB_GPIO DS101_GPIO4 /* shared */
-+#define DS101_USBCOPY_SOLID_LED DS101_GPIO4 /* shared */
-+#define DS101_USBCOPY_BLINK_LED DS101_GPIO5
-+/* GPIO6 is unknown */
-+#define DS101_POWEROFF_GPIO DS101_GPIO7
-+#define DS101_POWERB_GPIO DS101_GPIO8
-+/*#define DS101_PCI_INTC_PIN DS101_GPIO9
-+#define DS101_PCI_INTB_PIN DS101_GPIO10
-+#define DS101_PCI_INTA_PIN DS101_GPIO11
-+*/
-+#define DS101_RESETB_GPIO DS101_GPIO12
-+#define DS101_STATUSOK_LED DS101_GPIO14
-+#define DS101_STATUSBAD_LED DS101_GPIO15
-+
-+#define DS101_PCI_MAX_DEV 2
-+#define DS101_PCI_IRQ_LINES 3
-+
-+#define DS101_POWERB_IRQ IRQ_IXP4XX_GPIO8
-+#define DS101_RESETB_IRQ IRQ_IXP4XX_GPIO12
-+#define DS101_USBCOPYB_IRQ IRQ_IXP4XX_GPIO4
-+
-+/* XXX use IXP4XX_GPIO_XX directly */
-+#define DS101_GPIO_IN IXP4XX_GPIO_IN
-+#define DS101_GPIO_OUT IXP4XX_GPIO_OUT
-+#define DS101_GPIO_HIGH 1
-+#define DS101_GPIO_LOW 0
-+
-+/* GPIO */
-+
-+#define DS101_GPIO0 0
-+#define DS101_GPIO1 1
-+#define DS101_GPIO2 2
-+#define DS101_GPIO3 3
-+#define DS101_GPIO4 4
-+#define DS101_GPIO5 5
-+#define DS101_GPIO6 6
-+#define DS101_GPIO7 7
-+#define DS101_GPIO8 8
-+#define DS101_GPIO9 9
-+#define DS101_GPIO10 10
-+#define DS101_GPIO11 11
-+#define DS101_GPIO12 12
-+#define DS101_GPIO13 13
-+#define DS101_GPIO14 14
-+#define DS101_GPIO15 15
-+
-+/* Stuff needed to setup the IXP expansion
-+ * bus on the DS101
-+ */
-+
-+#define DS101_EXP_RECOVERY_T(x) (((x) & 15) << 16)
-+#define DS101_EXP_HOLD_T(x) (((x) & 3) << 20)
-+#define DS101_EXP_STROBE_T(x) (((x) & 15) << 22)
-+#define DS101_EXP_SETUP_T(x) (((x) & 3) << 26)
-+#define DS101_EXP_ADDR_T(x) (((x) & 3) << 28)
-+
-+#define DS101_EXP_SZ_16M (15 << 10)
-+#define DS101_EXP_WR_EN (1 << 1)
-+#define DS101_EXP_BYTE_RD16 (1 << 6)
-+#define DS101_EXP_CS_EN (1 << 31)
-+
-+/* XXX nope. use the _EXP_ macros in the -setup.c */
-+#define DS101_EXP_CS0_INIT (DS101_EXP_ADDR_T(1) | \
-+ DS101_EXP_SETUP_T(1) | DS101_EXP_STROBE_T(1) | \
-+ DS101_EXP_HOLD_T(1) | DS101_EXP_RECOVERY_T(1)| \
-+ DS101_EXP_SZ_16M | DS101_EXP_WR_EN | \
-+ DS101_EXP_BYTE_RD16 | DS101_EXP_CS_EN)
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/hardware.h 2006-03-08 08:41:02.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/hardware.h 2006-03-08 08:41:31.000000000 +0100
-@@ -47,5 +47,6 @@ extern unsigned int processor_id;
- #include "nslu2.h"
- #include "nas100d.h"
- #include "dsmg600.h"
-+#include "ds101.h"
-
- #endif /* _ASM_ARCH_HARDWARE_H */
---- linux-ixp4xx.orig/include/asm-arm/arch-ixp4xx/irqs.h 2006-03-08 08:41:02.000000000 +0100
-+++ linux-ixp4xx/include/asm-arm/arch-ixp4xx/irqs.h 2006-03-08 08:41:31.000000000 +0100
-@@ -110,6 +110,14 @@
- #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7
-
- /*
-+ * Synology DS101 board IRQs
-+ */
-+
-+#define IRQ_DS101_PCI_INTA IRQ_IXP4XX_GPIO11
-+#define IRQ_DS101_PCI_INTB IRQ_IXP4XX_GPIO10
-+#define IRQ_DS101_PCI_INTC IRQ_IXP4XX_GPIO9
-+
-+/*
- * D-Link DSM-G600 board IRQs
- */
- #define IRQ_DSMG600_PCI_INTA IRQ_IXP4XX_GPIO11
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/ds101-pci.c 2006-03-08 08:41:31.000000000 +0100
-@@ -0,0 +1,66 @@
-+/*
-+ * DS101 board-level PCI initialization
-+ *
-+ * based on ixdp425-pci.c:
-+ * Copyright (C) 2002 Intel Corporation.
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Maintainer: http://www.nslu2-linux.org/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+
-+#include <asm/mach/pci.h>
-+#include <asm/mach-types.h>
-+
-+void __init ds101_pci_preinit(void)
-+{
-+ set_irq_type(IRQ_DS101_PCI_INTA, IRQT_LOW);
-+ set_irq_type(IRQ_DS101_PCI_INTB, IRQT_LOW);
-+ set_irq_type(IRQ_DS101_PCI_INTC, IRQT_LOW);
-+
-+ ixp4xx_pci_preinit();
-+}
-+
-+static int __init ds101_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+ static int pci_irq_table[DS101_PCI_MAX_DEV][DS101_PCI_IRQ_LINES] =
-+ {
-+ { IRQ_DS101_PCI_INTA, -1, -1 },
-+ { IRQ_DS101_PCI_INTB, IRQ_DS101_PCI_INTB, IRQ_DS101_PCI_INTC },
-+ };
-+
-+ int irq = -1;
-+
-+ if (slot >= 1 && slot <= DS101_PCI_MAX_DEV &&
-+ pin >= 1 && pin <= DS101_PCI_IRQ_LINES)
-+ irq = pci_irq_table[slot-1][pin-1];
-+
-+ return irq;
-+}
-+
-+struct hw_pci __initdata ds101_pci = {
-+ .nr_controllers = 1,
-+ .preinit = ds101_pci_preinit,
-+ .swizzle = pci_std_swizzle,
-+ .setup = ixp4xx_setup,
-+ .scan = ixp4xx_scan_bus,
-+ .map_irq = ds101_map_irq,
-+};
-+
-+int __init ds101_pci_init(void)
-+{
-+ if (machine_is_ds101())
-+ pci_common_init(&ds101_pci);
-+
-+ return 0;
-+}
-+
-+subsys_initcall(ds101_pci_init);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/ds101-setup.c 2006-03-08 08:41:31.000000000 +0100
-@@ -0,0 +1,234 @@
-+/*
-+ * Synology DS101 board setup
-+ *
-+ * based ixdp425-setup.c:
-+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
-+ *
-+ * Author: Alessandro Zummo <a.zummo@towertech.it>
-+ * Author: Rod Whitby <rod@whitby.id.au>
-+ * Author: OEyvind Repvik <oyvind@repvik.org>
-+ * Maintainers: http://www.nslu2-linux.org/
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/serial.h>
-+#include <linux/serial_8250.h>
-+#include <linux/leds.h>
-+#include <linux/pci.h>
-+
-+#include <asm/setup.h>
-+#include <asm/memory.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/flash.h>
-+
-+#ifdef CONFIG_LEDS_CLASS
-+static struct resource ds101_led_resources[] = {
-+ {
-+ .name = "power",
-+ .start = DS101_POWER_LED,
-+ .end = DS101_POWER_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "usbcopy-solid",
-+ .start = DS101_USBCOPY_SOLID_LED,
-+ .end = DS101_USBCOPY_SOLID_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "usbcopy-blink",
-+ .start = DS101_USBCOPY_BLINK_LED,
-+ .end = DS101_USBCOPY_BLINK_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "status-ready",
-+ .start = DS101_STATUSOK_LED,
-+ .end = DS101_STATUSOK_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ },
-+ {
-+ .name = "status-error",
-+ .start = DS101_STATUSBAD_LED,
-+ .start = DS101_STATUSBAD_LED,
-+ .flags = IXP4XX_GPIO_LOW,
-+ }
-+};
-+
-+
-+static struct platform_device ds101_leds = {
-+ .name = "IXP4XX-GPIO-LED",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(ds101_led_resources),
-+ .resource = ds101_led_resources,
-+};
-+#endif
-+
-+static struct ixp4xx_i2c_pins ds101_i2c_gpio_pins = {
-+ .sda_pin = DS101_SDA_PIN,
-+ .scl_pin = DS101_SCL_PIN,
-+};
-+
-+static struct platform_device ds101_i2c_controller = {
-+ .name = "IXP4XX-I2C",
-+ .id = 0,
-+ .dev.platform_data = &ds101_i2c_gpio_pins,
-+ .num_resources = 0,
-+};
-+
-+static struct platform_device ds101_beeper = {
-+ .name = "ixp4xx-beeper",
-+ .id = DS101_GPIO_BUZZ,
-+ .num_resources = 0,
-+};
-+
-+static struct resource ds101_uart_resources[] = {
-+ {
-+ .start = IXP4XX_UART1_BASE_PHYS,
-+ .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = IXP4XX_UART2_BASE_PHYS,
-+ .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
-+ .flags = IORESOURCE_MEM,
-+ }
-+};
-+
-+static struct plat_serial8250_port ds101_uart_data[] = {
-+ {
-+ .mapbase = IXP4XX_UART1_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART1,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ {
-+ .mapbase = IXP4XX_UART2_BASE_PHYS,
-+ .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
-+ .irq = IRQ_IXP4XX_UART2,
-+ .flags = UPF_BOOT_AUTOCONF,
-+ .iotype = UPIO_MEM,
-+ .regshift = 2,
-+ .uartclk = IXP4XX_UART_XTAL,
-+ },
-+ { }
-+};
-+
-+static struct platform_device ds101_uart = {
-+ .name = "serial8250",
-+ .id = PLAT8250_DEV_PLATFORM,
-+ .dev.platform_data = ds101_uart_data,
-+ .num_resources = 2,
-+ .resource = ds101_uart_resources,
-+};
-+
-+static struct platform_device *ds101_devices[] __initdata = {
-+ &ds101_i2c_controller,
-+ &ds101_beeper,
-+};
-+
-+static void ds101_power_off(void)
-+{
-+ /* Simple, but effective */
-+ gpio_line_set(DS101_POWEROFF_GPIO, IXP4XX_GPIO_LOW);
-+}
-+
-+static void ds101_gpio_setup(void)
-+{
-+ /* Set up buzzer */
-+ gpio_line_config(DS101_GPIO_BUZZ, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_GPIO_BUZZ, DS101_GPIO_LOW);
-+
-+ /* Set up power led */
-+ gpio_line_config(DS101_POWER_LED, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_POWER_LED, DS101_GPIO_LOW);
-+
-+ /* Poweroff */
-+ gpio_line_config(DS101_POWEROFF_GPIO, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_POWEROFF_GPIO, DS101_GPIO_HIGH);
-+
-+ /* Status leds */
-+ *IXP4XX_GPIO_GPCLKR = 0;
-+
-+ /* XXX can't the leds subsystem take care of those? */
-+ gpio_line_config(DS101_STATUSOK_LED, DS101_GPIO_OUT);
-+ gpio_line_config(DS101_STATUSBAD_LED, DS101_GPIO_OUT);
-+ gpio_line_set(DS101_STATUSOK_LED, DS101_GPIO_HIGH);
-+ gpio_line_set(DS101_STATUSBAD_LED, DS101_GPIO_LOW);
-+};
-+
-+static void ds101_cs0_setup(void)
-+{
-+ /* XXX don't use macro */
-+ *IXP4XX_EXP_CS0 = DS101_EXP_CS0_INIT;
-+};
-+
-+static void __init ds101_init(void)
-+{
-+ ixp4xx_sys_init();
-+
-+ ds101_cs0_setup(); /* Needed for DoC support */
-+ ds101_gpio_setup();
-+ pm_power_off = ds101_power_off;
-+
-+ platform_add_devices(ds101_devices, ARRAY_SIZE(ds101_devices));
-+
-+ /* This is only useful on a modified machine, but it is valuable
-+ * to have it first in order to see debug messages, and so that
-+ * it does *not* get removed if platform_add_devices fails!
-+ */
-+ (void)platform_device_register(&ds101_uart);
-+
-+#ifdef CONFIG_LEDS_CLASS
-+ /* We don't care whether or not this works. */
-+ (void)platform_device_register(&ds101_leds);
-+#endif
-+}
-+
-+/*
-+ * DS101 bootstrap may pass in parameters, but we zap the mem
-+ * settings to be safe (DS101 always has 64MByte at 0, DS101J has
-+ * 32MB). The passed in command line can override this default, we
-+ * prepend to the config'ed default.
-+ *
-+ * NOTE: the startup sequence is:
-+ * 1) Call the machine fixup
-+ * 2) Parse the ATAG list, the ATAG_CMDLINE is copied in
-+ * to default_command_line which is the value of *from
-+ * 3) Parse the command line in *from (*not*
-+ * default_command_line unless they are the same!)
-+ *
-+ * Setting mi->nr_banks causes (2) to 'squash' (set to ATAG_NONE)
-+ * any ATAG_MEM tags, but mem= command line options cause nr_banks
-+ * to be reset to 0 (on the first mem=)
-+ */
-+
-+static void __init ds101_fixup(struct machine_desc *desc,
-+ struct tag *tags, char **cmdline, struct meminfo *mi)
-+{
-+ /* The DS101 has one bank of 64MByte memory.
-+ * NOTE: setting nr_banks != 0 causes kernel/setup.c to remove
-+ * the mem tags from the tag list. We need do nothing here!
-+ */
-+ mi->nr_banks = 1;
-+ mi->bank[0].start = 0;
-+ mi->bank[0].size = (64*1024*1024);
-+ mi->bank[0].node = PHYS_TO_NID(0);
-+}
-+
-+MACHINE_START(DS101, "Synology DiskStation DS101")
-+ /* Maintainer: www.nslu2-linux.org */
-+ .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
-+ .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
-+ .boot_params = 0x00000100,
-+ .fixup = ds101_fixup,
-+ .map_io = ixp4xx_map_io,
-+ .init_irq = ixp4xx_init_irq,
-+ .timer = &ixp4xx_timer,
-+ .init_machine = ds101_init,
-+MACHINE_END
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/Kconfig 2006-03-08 08:41:02.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/Kconfig 2006-03-08 08:41:31.000000000 +0100
-@@ -93,6 +93,14 @@ config MACH_DSMG600
- DSM-G600 device. For more information on this platform,
- see http://www.nslu2-linux.org/
-
-+config MACH_DS101
-+ bool
-+ prompt "Synology DS101"
-+ help
-+ Say 'Y' here if you want your kernel to support Synology's
-+ DiskStation DS101(j) device. For more information on this
-+ platform see http://www.nslu2-linux.org/wiki/DS101/HomePage
-+
- #
- # Avila and IXDP share the same source for now. Will change in future
- #
---- linux-ixp4xx.orig/arch/arm/mach-ixp4xx/Makefile 2006-03-08 08:41:02.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-ixp4xx/Makefile 2006-03-08 08:41:31.000000000 +0100
-@@ -11,4 +11,4 @@ obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-
- obj-$(CONFIG_MACH_NSLU2) += nslu2-pci.o nslu2-setup.o nslu2-power.o
- obj-$(CONFIG_MACH_NAS100D) += nas100d-pci.o nas100d-setup.o nas100d-power.o
- obj-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o dsmg600-setup.o
--
-+obj-$(CONFIG_MACH_DS101) += ds101-pci.o ds101-setup.o
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/copypage-xscale.patch b/packages/linux/ixp4xx-kernel/2.6.16/copypage-xscale.patch
deleted file mode 100644
index b73d219708..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/copypage-xscale.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-*** linux-2.6.16/arch/arm/mm/copypage-xscale.c- Mon Mar 27 19:10:25 2006
---- linux-2.6.16/arch/arm/mm/copypage-xscale.c Sun Mar 26 19:32:53 2006
-***************
-*** 15,20 ****
---- 15,21 ----
- */
- #include <linux/init.h>
- #include <linux/mm.h>
-+ #include <linux/module.h>
-
- #include <asm/page.h>
- #include <asm/pgtable.h>
-***************
-*** 129,131 ****
---- 130,135 ----
- .cpu_clear_user_page = xscale_mc_clear_user_page,
- .cpu_copy_user_page = xscale_mc_copy_user_page,
- };
-+
-+ EXPORT_SYMBOL(xscale_mc_clear_user_page);
-+ EXPORT_SYMBOL(xscale_mc_copy_user_page);
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/defconfig b/packages/linux/ixp4xx-kernel/2.6.16/defconfig
deleted file mode 100644
index dda2e790b0..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/defconfig
+++ /dev/null
@@ -1,1771 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Fri Apr 7 02:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-# CONFIG_KALLSYMS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-CONFIG_ARCH_IXP4XX=y
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
-
-#
-# Intel IXP4xx Implementation Options
-#
-
-#
-# IXP4xx Platforms
-#
-CONFIG_MACH_NSLU2=y
-CONFIG_ARCH_AVILA=y
-CONFIG_MACH_LOFT=y
-# CONFIG_ARCH_ADI_COYOTE is not set
-CONFIG_ARCH_IXDP425=y
-# CONFIG_MACH_IXDPG425 is not set
-# CONFIG_MACH_IXDP465 is not set
-CONFIG_ARCH_IXCDP1100=y
-# CONFIG_ARCH_PRPMC1100 is not set
-CONFIG_MACH_NAS100D=y
-CONFIG_MACH_DSMG600=y
-CONFIG_MACH_DS101=y
-CONFIG_ARCH_IXDP4XX=y
-# CONFIG_MACH_GTWX5715 is not set
-
-#
-# IXP4xx Options
-#
-# CONFIG_IXP4XX_INDIRECT_PCI is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_BIG_ENDIAN is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_DMABOUNCE=y
-
-#
-# Bus support
-#
-CONFIG_PCI=y
-# CONFIG_PCI_LEGACY_PROC is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-CONFIG_TIPC=m
-# CONFIG_TIPC_ADVANCED is not set
-# CONFIG_TIPC_DEBUG is not set
-# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# CONFIG_LLC2 is not set
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-CONFIG_DEV_APPLETALK=y
-CONFIG_IPDDP=m
-CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-CONFIG_NET_PKTGEN=m
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_HIDP is not set
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIUART is not set
-CONFIG_BT_HCIBCM203X=m
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_REDBOOT_PARTS=y
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-CONFIG_NFTL=y
-CONFIG_NFTL_RW=y
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_NOSWAP is not set
-CONFIG_MTD_CFI_BE_BYTE_SWAP=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_IXP4XX=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_DISKONCHIP=y
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0x50000000
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH is not set
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-CONFIG_BLK_DEV_NBD=m
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=4
-CONFIG_BLK_DEV_RAM_SIZE=10240
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-CONFIG_ATA_OVER_ETH=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=m
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-CONFIG_SCSI_ISCSI_ATTRS=m
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-CONFIG_ISCSI_TCP=m
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-# CONFIG_SCSI_ATA_PIIX is not set
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-# CONFIG_SCSI_SATA_SX4 is not set
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-# CONFIG_SCSI_SATA_SIS is not set
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-# CONFIG_SCSI_PATA_ALI is not set
-# CONFIG_SCSI_PATA_AMD is not set
-CONFIG_SCSI_PATA_ARTOP=y
-# CONFIG_SCSI_PATA_ATIIXP is not set
-# CONFIG_SCSI_PATA_CMD64X is not set
-# CONFIG_SCSI_PATA_CS5520 is not set
-# CONFIG_SCSI_PATA_CS5530 is not set
-# CONFIG_SCSI_PATA_CYPRESS is not set
-# CONFIG_SCSI_PATA_EFAR is not set
-# CONFIG_SCSI_ATA_GENERIC is not set
-# CONFIG_SCSI_PATA_HPT37X is not set
-# CONFIG_SCSI_PATA_HPT3X2N is not set
-# CONFIG_SCSI_PATA_HPT3X3 is not set
-# CONFIG_SCSI_PATA_ISAPNP is not set
-# CONFIG_SCSI_PATA_IT8172 is not set
-# CONFIG_SCSI_PATA_IT821X is not set
-# CONFIG_SCSI_PATA_LEGACY is not set
-# CONFIG_SCSI_PATA_MPIIX is not set
-# CONFIG_SCSI_PATA_NETCELL is not set
-# CONFIG_SCSI_PATA_NS87410 is not set
-# CONFIG_SCSI_PATA_OLDPIIX is not set
-# CONFIG_SCSI_PATA_OPTI is not set
-# CONFIG_SCSI_PATA_PDC_OLD is not set
-# CONFIG_SCSI_PATA_QDI is not set
-# CONFIG_SCSI_PATA_RADISYS is not set
-# CONFIG_SCSI_PATA_RZ1000 is not set
-# CONFIG_SCSI_PATA_SC1200 is not set
-# CONFIG_SCSI_PATA_SERVERWORKS is not set
-# CONFIG_SCSI_PATA_SIL680 is not set
-# CONFIG_SCSI_PATA_SIS is not set
-# CONFIG_SCSI_PATA_TRIFLEX is not set
-# CONFIG_SCSI_PATA_VIA is not set
-# CONFIG_SCSI_PATA_WINBOND is not set
-CONFIG_SCSI_PATA_IXP4XX=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_CRYPT is not set
-# CONFIG_DM_SNAPSHOT is not set
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MACLIST=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-# CONFIG_PRISM54 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_NET_WIRELESS=y
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-CONFIG_NETCONSOLE=m
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_IXP4XX_BEEPER=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-# CONFIG_VT is not set
-CONFIG_SERIAL_NONSTANDARD=y
-# CONFIG_COMPUTONE is not set
-# CONFIG_ROCKETPORT is not set
-# CONFIG_CYCLADES is not set
-# CONFIG_DIGIEPCA is not set
-# CONFIG_MOXA_INTELLIO is not set
-# CONFIG_MOXA_SMARTIO is not set
-# CONFIG_ISI is not set
-# CONFIG_SYNCLINKMP is not set
-# CONFIG_SYNCLINK_GT is not set
-CONFIG_N_HDLC=m
-# CONFIG_RISCOM8 is not set
-# CONFIG_SPECIALIX is not set
-# CONFIG_SX is not set
-# CONFIG_RIO is not set
-# CONFIG_STALDRV is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=2
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_IXP4XX_WATCHDOG=m
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_IOP3XX is not set
-CONFIG_I2C_IXP4XX=y
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-CONFIG_SENSORS_EEPROM=y
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=m
-# CONFIG_W1_MATROX is not set
-CONFIG_W1_DS9490=m
-CONFIG_W1_DS9490_BRIDGE=m
-CONFIG_W1_THERM=m
-CONFIG_W1_SMEM=m
-CONFIG_W1_DS2433=m
-CONFIG_W1_DS2433_CRC=y
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=m
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-CONFIG_SENSORS_AD741X=m
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_IXP4XX=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_BT848=m
-# CONFIG_VIDEO_SAA6588 is not set
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-# CONFIG_VIDEO_SAA7134_ALSA is not set
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-CONFIG_VIDEO_CX88_ALSA=m
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_VIDEO_OVCAMCHIP=m
-CONFIG_VIDEO_AUDIO_DECODER=m
-CONFIG_VIDEO_DECODER=m
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-CONFIG_VIDEO_TVEEPROM=m
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-CONFIG_USB_YEALINK=m
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_PWC=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-CONFIG_RTC_DRV_X1205=y
-CONFIG_RTC_DRV_DS1672=y
-CONFIG_RTC_DRV_PCF8563=y
-CONFIG_RTC_DRV_RS5C372=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=m
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=m
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-CONFIG_NTFS_RW=y
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_NATIVE_ENDIAN is not set
-CONFIG_JFFS2_BIG_ENDIAN=y
-# CONFIG_JFFS2_LITTLE_ENDIAN is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_NULL is not set
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/leds-class.patch b/packages/linux/ixp4xx-kernel/2.6.16/leds-class.patch
deleted file mode 100644
index c0146b6fe4..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/leds-class.patch
+++ /dev/null
@@ -1,1862 +0,0 @@
-
-From: Richard Purdie <rpurdie@rpsys.net>
-
-Add the foundations of a new LEDs subsystem. This patch adds a class which
-presents LED devices within sysfs and allows their brightness to be
-controlled.
-
-Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
-Cc: Russell King <rmk@arm.linux.org.uk>
-Cc: Greg KH <greg@kroah.com>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- arch/arm/Kconfig | 2
- arch/arm/mach-pxa/corgi.c | 9 +
- arch/arm/mach-pxa/spitz.c | 9 +
- arch/arm/mach-pxa/tosa.c | 9 +
- drivers/Kconfig | 2
- drivers/Makefile | 1
- drivers/ide/ide-disk.c | 22 +++
- drivers/leds/Kconfig | 70 +++++++++++
- drivers/leds/Makefile | 15 ++
- drivers/leds/led-class.c | 174 +++++++++++++++++++++++++++++
- drivers/leds/led-core.c | 25 ++++
- drivers/leds/led-triggers.c | 239 ++++++++++++++++++++++++++++++++++++++++
- drivers/leds/leds-corgi.c | 121 ++++++++++++++++++++
- drivers/leds/leds-ixp4xx-gpio.c | 215 +++++++++++++++++++++++++++++++++++
- drivers/leds/leds-locomo.c | 95 +++++++++++++++
- drivers/leds/leds-spitz.c | 125 ++++++++++++++++++++
- drivers/leds/leds-tosa.c | 131 +++++++++++++++++++++
- drivers/leds/leds.h | 45 +++++++
- drivers/leds/ledtrig-timer.c | 174 +++++++++++++++++++++++++++++
- drivers/mtd/nand/nand_base.c | 26 ++++
- include/linux/leds.h | 105 +++++++++++++++++
- 21 files changed, 1610 insertions(+), 4 deletions(-)
-
---- linux-ixp4xx.orig/arch/arm/Kconfig 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/arch/arm/Kconfig 2006-03-07 22:59:04.000000000 +0100
-@@ -807,6 +807,8 @@ source "drivers/misc/Kconfig"
-
- source "drivers/mfd/Kconfig"
-
-+source "drivers/leds/Kconfig"
-+
- source "drivers/media/Kconfig"
-
- source "drivers/video/Kconfig"
---- linux-ixp4xx.orig/drivers/Kconfig 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/drivers/Kconfig 2006-03-07 22:59:04.000000000 +0100
-@@ -64,6 +64,8 @@ source "drivers/usb/Kconfig"
-
- source "drivers/mmc/Kconfig"
-
-+source "drivers/leds/Kconfig"
-+
- source "drivers/infiniband/Kconfig"
-
- source "drivers/sn/Kconfig"
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/Kconfig 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,70 @@
-+
-+menu "LED devices"
-+
-+config NEW_LEDS
-+ bool "LED Support"
-+ help
-+ Say Y to enable Linux LED support. This is not related to standard
-+ keyboard LEDs which are controlled via the input system.
-+
-+config LEDS_CLASS
-+ tristate "LED Class Support"
-+ depends NEW_LEDS
-+ help
-+ This option enables the led sysfs class in /sys/class/leds. You'll
-+ need this to do anything useful with LEDs. If unsure, say N.
-+
-+config LEDS_TRIGGERS
-+ bool "LED Trigger support"
-+ depends NEW_LEDS
-+ help
-+ This option enables trigger support for the leds class.
-+ These triggers allow kernel events to drive the LEDs and can
-+ be configured via sysfs. If unsure, say Y.
-+
-+config LEDS_CORGI
-+ tristate "LED Support for the Sharp SL-C7x0 series"
-+ depends LEDS_CLASS && PXA_SHARP_C7xx
-+ help
-+ This option enables support for the LEDs on Sharp Zaurus
-+ SL-C7x0 series (C700, C750, C760, C860).
-+
-+config LEDS_LOCOMO
-+ tristate "LED Support for Locomo device"
-+ depends LEDS_CLASS && SHARP_LOCOMO
-+ help
-+ This option enables support for the LEDs on Sharp Locomo.
-+ Zaurus models SL-5500 and SL-5600.
-+
-+config LEDS_SPITZ
-+ tristate "LED Support for the Sharp SL-Cxx00 series"
-+ depends LEDS_CLASS && PXA_SHARP_Cxx00
-+ help
-+ This option enables support for the LEDs on Sharp Zaurus
-+ SL-Cxx00 series (C1000, C3000, C3100).
-+
-+config LEDS_IXP4XX
-+ tristate "LED Support for GPIO connected LEDs on IXP4XX processors"
-+ depends LEDS_CLASS && ARCH_IXP4XX
-+ help
-+ This option enables support for the LEDs connected to GPIO
-+ outputs of the Intel IXP4XX processors. To be useful the
-+ particular board must have LEDs and they must be connected
-+ to the GPIO lines. If unsure, say Y.
-+
-+config LEDS_TOSA
-+ tristate "LED Support for the Sharp SL-6000 series"
-+ depends LEDS_CLASS && PXA_SHARPSL
-+ help
-+ This option enables support for the LEDs on Sharp Zaurus
-+ SL-6000 series.
-+
-+config LEDS_TRIGGER_TIMER
-+ tristate "LED Timer Trigger"
-+ depends LEDS_TRIGGERS
-+ help
-+ This allows LEDs to be controlled by a programmable timer
-+ via sysfs. If unsure, say Y.
-+
-+endmenu
-+
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/led-class.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,174 @@
-+/*
-+ * LED Class Core
-+ *
-+ * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
-+ * Copyright (C) 2005-2006 Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/device.h>
-+#include <linux/sysdev.h>
-+#include <linux/timer.h>
-+#include <linux/err.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+static struct class *leds_class;
-+
-+static ssize_t led_brightness_show(struct class_device *dev, char *buf)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ ssize_t ret = 0;
-+
-+ /* no lock needed for this */
-+ sprintf(buf, "%u\n", led_cdev->brightness);
-+ ret = strlen(buf) + 1;
-+
-+ return ret;
-+}
-+
-+static ssize_t led_brightness_store(struct class_device *dev,
-+ const char *buf, size_t size)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ ssize_t ret = -EINVAL;
-+ char *after;
-+ unsigned long state = simple_strtoul(buf, &after, 10);
-+
-+ if (after - buf > 0) {
-+ ret = after - buf;
-+ write_lock(&led_cdev->lock);
-+ led_set_brightness(led_cdev, state);
-+ write_unlock(&led_cdev->lock);
-+ }
-+
-+ return ret;
-+}
-+
-+static CLASS_DEVICE_ATTR(brightness, 0644, led_brightness_show,
-+ led_brightness_store);
-+#ifdef CONFIG_LEDS_TRIGGERS
-+static CLASS_DEVICE_ATTR(trigger, 0644, led_trigger_show, led_trigger_store);
-+#endif
-+
-+/**
-+ * led_classdev_suspend - suspend an led_classdev.
-+ * @led_cdev: the led_classdev to suspend.
-+ */
-+void led_classdev_suspend(struct led_classdev *led_cdev)
-+{
-+ write_lock(&led_cdev->lock);
-+ led_cdev->flags |= LED_SUSPENDED;
-+ led_cdev->brightness_set(led_cdev, 0);
-+ write_unlock(&led_cdev->lock);
-+}
-+EXPORT_SYMBOL_GPL(led_classdev_suspend);
-+
-+/**
-+ * led_classdev_resume - resume an led_classdev.
-+ * @led_cdev: the led_classdev to resume.
-+ */
-+void led_classdev_resume(struct led_classdev *led_cdev)
-+{
-+ write_lock(&led_cdev->lock);
-+ led_cdev->flags &= ~LED_SUSPENDED;
-+ led_cdev->brightness_set(led_cdev, led_cdev->brightness);
-+ write_unlock(&led_cdev->lock);
-+}
-+EXPORT_SYMBOL_GPL(led_classdev_resume);
-+
-+/**
-+ * led_classdev_register - register a new object of led_classdev class.
-+ * @dev: The device to register.
-+ * @led_cdev: the led_classdev structure for this device.
-+ */
-+int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
-+{
-+ led_cdev->class_dev = class_device_create(leds_class, NULL, 0,
-+ parent, "%s", led_cdev->name);
-+ if (unlikely(IS_ERR(led_cdev->class_dev)))
-+ return PTR_ERR(led_cdev->class_dev);
-+
-+ rwlock_init(&led_cdev->lock);
-+ class_set_devdata(led_cdev->class_dev, led_cdev);
-+
-+ /* register the attributes */
-+ class_device_create_file(led_cdev->class_dev,
-+ &class_device_attr_brightness);
-+
-+ /* add to the list of leds */
-+ write_lock(&leds_list_lock);
-+ list_add_tail(&led_cdev->node, &leds_list);
-+ write_unlock(&leds_list_lock);
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ rwlock_init(&led_cdev->trigger_lock);
-+
-+ led_trigger_set_default(led_cdev);
-+
-+ class_device_create_file(led_cdev->class_dev,
-+ &class_device_attr_trigger);
-+#endif
-+
-+ printk(KERN_INFO "Registered led device: %s\n",
-+ led_cdev->class_dev->class_id);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(led_classdev_register);
-+
-+/**
-+ * led_classdev_unregister - unregisters a object of led_properties class.
-+ * @led_cdev: the led device to unreigister
-+ *
-+ * Unregisters a previously registered via led_classdev_register object.
-+ */
-+void led_classdev_unregister(struct led_classdev *led_cdev)
-+{
-+ class_device_remove_file(led_cdev->class_dev,
-+ &class_device_attr_brightness);
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ class_device_remove_file(led_cdev->class_dev,
-+ &class_device_attr_trigger);
-+ write_lock(&led_cdev->trigger_lock);
-+ if (led_cdev->trigger)
-+ led_trigger_set(led_cdev, NULL);
-+ write_unlock(&led_cdev->trigger_lock);
-+#endif
-+
-+ class_device_unregister(led_cdev->class_dev);
-+
-+ write_lock(&leds_list_lock);
-+ list_del(&led_cdev->node);
-+ write_unlock(&leds_list_lock);
-+}
-+EXPORT_SYMBOL_GPL(led_classdev_unregister);
-+
-+static int __init leds_init(void)
-+{
-+ leds_class = class_create(THIS_MODULE, "leds");
-+ if (IS_ERR(leds_class))
-+ return PTR_ERR(leds_class);
-+ return 0;
-+}
-+
-+static void __exit leds_exit(void)
-+{
-+ class_destroy(leds_class);
-+}
-+
-+subsys_initcall(leds_init);
-+module_exit(leds_exit);
-+
-+MODULE_AUTHOR("John Lenz, Richard Purdie");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("LED Class Interface");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/led-core.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,25 @@
-+/*
-+ * LED Class Core
-+ *
-+ * Copyright 2005-2006 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/list.h>
-+#include <linux/module.h>
-+#include <linux/spinlock.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+rwlock_t leds_list_lock = RW_LOCK_UNLOCKED;
-+LIST_HEAD(leds_list);
-+
-+EXPORT_SYMBOL_GPL(leds_list);
-+EXPORT_SYMBOL_GPL(leds_list_lock);
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds.h 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,45 @@
-+/*
-+ * LED Core
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+#ifndef __LEDS_H_INCLUDED
-+#define __LEDS_H_INCLUDED
-+
-+#include <linux/leds.h>
-+
-+/* led_cdev->lock must be held as write */
-+static inline void led_set_brightness(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ if (value > LED_FULL)
-+ value = LED_FULL;
-+ led_cdev->brightness = value;
-+ if (!(led_cdev->flags & LED_SUSPENDED))
-+ led_cdev->brightness_set(led_cdev, value);
-+}
-+
-+extern rwlock_t leds_list_lock;
-+extern struct list_head leds_list;
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+void led_trigger_set_default(struct led_classdev *led_cdev);
-+void led_trigger_set(struct led_classdev *led_cdev,
-+ struct led_trigger *trigger);
-+#else
-+#define led_trigger_set_default(x) do {} while(0)
-+#define led_trigger_set(x, y) do {} while(0)
-+#endif
-+
-+ssize_t led_trigger_store(struct class_device *dev, const char *buf,
-+ size_t count);
-+ssize_t led_trigger_show(struct class_device *dev, char *buf);
-+
-+#endif /* __LEDS_H_INCLUDED */
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/Makefile 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,15 @@
-+
-+# LED Core
-+obj-$(CONFIG_NEW_LEDS) += led-core.o
-+obj-$(CONFIG_LEDS_CLASS) += led-class.o
-+obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o
-+
-+# LED Platform Drivers
-+obj-$(CONFIG_LEDS_CORGI) += leds-corgi.o
-+obj-$(CONFIG_LEDS_LOCOMO) += leds-locomo.o
-+obj-$(CONFIG_LEDS_SPITZ) += leds-spitz.o
-+obj-$(CONFIG_LEDS_IXP4XX) += leds-ixp4xx-gpio.o
-+obj-$(CONFIG_LEDS_TOSA) += leds-tosa.o
-+
-+# LED Triggers
-+obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
---- linux-ixp4xx.orig/drivers/Makefile 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/drivers/Makefile 2006-03-07 22:59:04.000000000 +0100
-@@ -68,6 +68,7 @@ obj-$(CONFIG_MCA) += mca/
- obj-$(CONFIG_EISA) += eisa/
- obj-$(CONFIG_CPU_FREQ) += cpufreq/
- obj-$(CONFIG_MMC) += mmc/
-+obj-$(CONFIG_NEW_LEDS) += leds/
- obj-$(CONFIG_INFINIBAND) += infiniband/
- obj-$(CONFIG_SGI_SN) += sn/
- obj-y += firmware/
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/include/linux/leds.h 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,105 @@
-+/*
-+ * Driver model for leds and led triggers
-+ *
-+ * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
-+ * Copyright (C) 2005 Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+#ifndef __LINUX_LEDS_H_INCLUDED
-+#define __LINUX_LEDS_H_INCLUDED
-+
-+struct device;
-+struct class_device;
-+/*
-+ * LED Core
-+ */
-+
-+enum led_brightness {
-+ LED_OFF = 0,
-+ LED_HALF = 127,
-+ LED_FULL = 255,
-+};
-+
-+struct led_classdev {
-+ const char *name;
-+ int brightness;
-+ int flags;
-+#define LED_SUSPENDED (1 << 0)
-+
-+ /* A function to set the brightness of the led */
-+ void (*brightness_set)(struct led_classdev *led_cdev,
-+ enum led_brightness brightness);
-+
-+ struct class_device *class_dev;
-+ /* LED Device linked list */
-+ struct list_head node;
-+
-+ /* Protects the LED properties data above */
-+ rwlock_t lock;
-+
-+ /* Trigger data */
-+ char *default_trigger;
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ rwlock_t trigger_lock;
-+ /* Protects the trigger data below */
-+
-+ struct led_trigger *trigger;
-+ struct list_head trig_list;
-+ void *trigger_data;
-+#endif
-+};
-+
-+extern int led_classdev_register(struct device *parent,
-+ struct led_classdev *led_cdev);
-+extern void led_classdev_unregister(struct led_classdev *led_cdev);
-+extern void led_classdev_suspend(struct led_classdev *led_cdev);
-+extern void led_classdev_resume(struct led_classdev *led_cdev);
-+
-+/*
-+ * LED Triggers
-+ */
-+#ifdef CONFIG_LEDS_TRIGGERS
-+
-+#define TRIG_NAME_MAX 50
-+
-+struct led_trigger {
-+ /* Trigger Properties */
-+ const char *name;
-+ void (*activate)(struct led_classdev *led_cdev);
-+ void (*deactivate)(struct led_classdev *led_cdev);
-+
-+ /* LEDs under control by this trigger (for simple triggers) */
-+ rwlock_t leddev_list_lock;
-+ struct list_head led_cdevs;
-+
-+ /* Link to next registered trigger */
-+ struct list_head next_trig;
-+};
-+
-+/* Registration functions for complex triggers */
-+int led_trigger_register(struct led_trigger *trigger);
-+void led_trigger_unregister(struct led_trigger *trigger);
-+
-+/* Registration functions for simple triggers */
-+#define DEFINE_LED_TRIGGER(x) static struct led_trigger *x;
-+#define DEFINE_LED_TRIGGER_GLOBAL(x) struct led_trigger *x;
-+void led_trigger_register_simple(const char *name,
-+ struct led_trigger **trigger);
-+void led_trigger_unregister_simple(struct led_trigger *trigger);
-+void led_trigger_event(struct led_trigger *trigger, enum led_brightness event);
-+
-+#else
-+
-+/* Triggers aren't active - null macros */
-+#define DEFINE_LED_TRIGGER(x)
-+#define DEFINE_LED_TRIGGER_GLOBAL(x)
-+#define led_trigger_register_simple(x, y) do {} while(0)
-+#define led_trigger_unregister_simple(x) do {} while(0)
-+#define led_trigger_event(x, y) do {} while(0)
-+
-+#endif
-+#endif /* __LINUX_LEDS_H_INCLUDED */
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/led-triggers.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,239 @@
-+/*
-+ * LED Triggers Core
-+ *
-+ * Copyright 2005-2006 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/device.h>
-+#include <linux/sysdev.h>
-+#include <linux/timer.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+/*
-+ * Nests outside led_cdev->lock and led_cdev->trigger_lock
-+ */
-+static rwlock_t triggers_list_lock = RW_LOCK_UNLOCKED;
-+static LIST_HEAD(trigger_list);
-+
-+ssize_t led_trigger_store(struct class_device *dev, const char *buf,
-+ size_t count)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ char trigger_name[TRIG_NAME_MAX];
-+ struct led_trigger *trig;
-+ size_t len;
-+
-+ trigger_name[sizeof(trigger_name) - 1] = '\0';
-+ strncpy(trigger_name, buf, sizeof(trigger_name) - 1);
-+ len = strlen(trigger_name);
-+
-+ if (len && trigger_name[len - 1] == '\n')
-+ trigger_name[len - 1] = '\0';
-+
-+ if (!strcmp(trigger_name, "none")) {
-+ write_lock(&led_cdev->trigger_lock);
-+ led_trigger_set(led_cdev, NULL);
-+ write_unlock(&led_cdev->trigger_lock);
-+ return count;
-+ }
-+
-+ read_lock(&triggers_list_lock);
-+ list_for_each_entry(trig, &trigger_list, next_trig) {
-+ if (!strcmp(trigger_name, trig->name)) {
-+ write_lock(&led_cdev->trigger_lock);
-+ led_trigger_set(led_cdev, trig);
-+ write_unlock(&led_cdev->trigger_lock);
-+
-+ read_unlock(&triggers_list_lock);
-+ return count;
-+ }
-+ }
-+ read_unlock(&triggers_list_lock);
-+
-+ return -EINVAL;
-+}
-+
-+
-+ssize_t led_trigger_show(struct class_device *dev, char *buf)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ struct led_trigger *trig;
-+ int len = 0;
-+
-+ read_lock(&triggers_list_lock);
-+ read_lock(&led_cdev->trigger_lock);
-+
-+ if (!led_cdev->trigger)
-+ len += sprintf(buf+len, "[none] ");
-+ else
-+ len += sprintf(buf+len, "none ");
-+
-+ list_for_each_entry(trig, &trigger_list, next_trig) {
-+ if (led_cdev->trigger && !strcmp(led_cdev->trigger->name,
-+ trig->name))
-+ len += sprintf(buf+len, "[%s] ", trig->name);
-+ else
-+ len += sprintf(buf+len, "%s ", trig->name);
-+ }
-+ read_unlock(&led_cdev->trigger_lock);
-+ read_unlock(&triggers_list_lock);
-+
-+ len += sprintf(len+buf, "\n");
-+ return len;
-+}
-+
-+void led_trigger_event(struct led_trigger *trigger,
-+ enum led_brightness brightness)
-+{
-+ struct list_head *entry;
-+
-+ if (!trigger)
-+ return;
-+
-+ read_lock(&trigger->leddev_list_lock);
-+ list_for_each(entry, &trigger->led_cdevs) {
-+ struct led_classdev *led_cdev;
-+
-+ led_cdev = list_entry(entry, struct led_classdev, trig_list);
-+ write_lock(&led_cdev->lock);
-+ led_set_brightness(led_cdev, brightness);
-+ write_unlock(&led_cdev->lock);
-+ }
-+ read_unlock(&trigger->leddev_list_lock);
-+}
-+
-+/* Caller must ensure led_cdev->trigger_lock held */
-+void led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trigger)
-+{
-+ /* Remove any existing trigger */
-+ if (led_cdev->trigger) {
-+ write_lock(&led_cdev->trigger->leddev_list_lock);
-+ list_del(&led_cdev->trig_list);
-+ write_unlock(&led_cdev->trigger->leddev_list_lock);
-+ if (led_cdev->trigger->deactivate)
-+ led_cdev->trigger->deactivate(led_cdev);
-+ }
-+ if (trigger) {
-+ write_lock(&trigger->leddev_list_lock);
-+ list_add_tail(&led_cdev->trig_list, &trigger->led_cdevs);
-+ write_unlock(&trigger->leddev_list_lock);
-+ if (trigger->activate)
-+ trigger->activate(led_cdev);
-+ }
-+ led_cdev->trigger = trigger;
-+}
-+
-+void led_trigger_set_default(struct led_classdev *led_cdev)
-+{
-+ struct led_trigger *trig;
-+
-+ if (!led_cdev->default_trigger)
-+ return;
-+
-+ read_lock(&triggers_list_lock);
-+ write_lock(&led_cdev->trigger_lock);
-+ list_for_each_entry(trig, &trigger_list, next_trig) {
-+ if (!strcmp(led_cdev->default_trigger, trig->name))
-+ led_trigger_set(led_cdev, trig);
-+ }
-+ write_unlock(&led_cdev->trigger_lock);
-+ read_unlock(&triggers_list_lock);
-+}
-+
-+int led_trigger_register(struct led_trigger *trigger)
-+{
-+ struct led_classdev *led_cdev;
-+
-+ rwlock_init(&trigger->leddev_list_lock);
-+ INIT_LIST_HEAD(&trigger->led_cdevs);
-+
-+ /* Add to the list of led triggers */
-+ write_lock(&triggers_list_lock);
-+ list_add_tail(&trigger->next_trig, &trigger_list);
-+ write_unlock(&triggers_list_lock);
-+
-+ /* Register with any LEDs that have this as a default trigger */
-+ read_lock(&leds_list_lock);
-+ list_for_each_entry(led_cdev, &leds_list, node) {
-+ write_lock(&led_cdev->trigger_lock);
-+ if (!led_cdev->trigger && led_cdev->default_trigger &&
-+ !strcmp(led_cdev->default_trigger, trigger->name))
-+ led_trigger_set(led_cdev, trigger);
-+ write_unlock(&led_cdev->trigger_lock);
-+ }
-+ read_unlock(&leds_list_lock);
-+
-+ return 0;
-+}
-+
-+void led_trigger_register_simple(const char *name, struct led_trigger **tp)
-+{
-+ struct led_trigger *trigger;
-+
-+ trigger = kzalloc(sizeof(struct led_trigger), GFP_KERNEL);
-+
-+ if (trigger) {
-+ trigger->name = name;
-+ led_trigger_register(trigger);
-+ }
-+ *tp = trigger;
-+}
-+
-+void led_trigger_unregister(struct led_trigger *trigger)
-+{
-+ struct led_classdev *led_cdev;
-+
-+ /* Remove from the list of led triggers */
-+ write_lock(&triggers_list_lock);
-+ list_del(&trigger->next_trig);
-+ write_unlock(&triggers_list_lock);
-+
-+ /* Remove anyone actively using this trigger */
-+ read_lock(&leds_list_lock);
-+ list_for_each_entry(led_cdev, &leds_list, node) {
-+ write_lock(&led_cdev->trigger_lock);
-+ if (led_cdev->trigger == trigger)
-+ led_trigger_set(led_cdev, NULL);
-+ write_unlock(&led_cdev->trigger_lock);
-+ }
-+ read_unlock(&leds_list_lock);
-+}
-+
-+void led_trigger_unregister_simple(struct led_trigger *trigger)
-+{
-+ led_trigger_unregister(trigger);
-+ kfree(trigger);
-+}
-+
-+/* Used by LED Class */
-+EXPORT_SYMBOL_GPL(led_trigger_set);
-+EXPORT_SYMBOL_GPL(led_trigger_set_default);
-+EXPORT_SYMBOL_GPL(led_trigger_show);
-+EXPORT_SYMBOL_GPL(led_trigger_store);
-+
-+/* LED Trigger Interface */
-+EXPORT_SYMBOL_GPL(led_trigger_register);
-+EXPORT_SYMBOL_GPL(led_trigger_unregister);
-+
-+/* Simple LED Tigger Interface */
-+EXPORT_SYMBOL_GPL(led_trigger_register_simple);
-+EXPORT_SYMBOL_GPL(led_trigger_unregister_simple);
-+EXPORT_SYMBOL_GPL(led_trigger_event);
-+
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("LED Triggers Core");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/ledtrig-timer.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,174 @@
-+/*
-+ * LED Kernel Timer Trigger
-+ *
-+ * Copyright 2005-2006 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/device.h>
-+#include <linux/sysdev.h>
-+#include <linux/timer.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+struct timer_trig_data {
-+ unsigned long delay_on; /* milliseconds on */
-+ unsigned long delay_off; /* milliseconds off */
-+ struct timer_list timer;
-+};
-+
-+static void led_timer_function(unsigned long data)
-+{
-+ struct led_classdev *led_cdev = (struct led_classdev *) data;
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+ unsigned long brightness = LED_OFF;
-+ unsigned long delay = timer_data->delay_off;
-+
-+ if (!timer_data->delay_on || !timer_data->delay_off) {
-+ write_lock(&led_cdev->lock);
-+ led_set_brightness(led_cdev, LED_OFF);
-+ write_unlock(&led_cdev->lock);
-+ return;
-+ }
-+
-+ if (!led_cdev->brightness) {
-+ brightness = LED_FULL;
-+ delay = timer_data->delay_on;
-+ }
-+
-+ write_lock(&led_cdev->lock);
-+ led_set_brightness(led_cdev, brightness);
-+ write_unlock(&led_cdev->lock);
-+
-+ mod_timer(&timer_data->timer, jiffies + msecs_to_jiffies(delay));
-+}
-+
-+static ssize_t led_delay_on_show(struct class_device *dev, char *buf)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+
-+ sprintf(buf, "%lu\n", timer_data->delay_on);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_delay_on_store(struct class_device *dev, const char *buf,
-+ size_t size)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+ int ret = -EINVAL;
-+ char *after;
-+ unsigned long state = simple_strtoul(buf, &after, 10);
-+
-+ if (after - buf > 0) {
-+ timer_data->delay_on = state;
-+ mod_timer(&timer_data->timer, jiffies + 1);
-+ ret = after - buf;
-+ }
-+
-+ return ret;
-+}
-+
-+static ssize_t led_delay_off_show(struct class_device *dev, char *buf)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+
-+ sprintf(buf, "%lu\n", timer_data->delay_off);
-+
-+ return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_delay_off_store(struct class_device *dev, const char *buf,
-+ size_t size)
-+{
-+ struct led_classdev *led_cdev = class_get_devdata(dev);
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+ int ret = -EINVAL;
-+ char *after;
-+ unsigned long state = simple_strtoul(buf, &after, 10);
-+
-+ if (after - buf > 0) {
-+ timer_data->delay_off = state;
-+ mod_timer(&timer_data->timer, jiffies + 1);
-+ ret = after - buf;
-+ }
-+
-+ return ret;
-+}
-+
-+static CLASS_DEVICE_ATTR(delay_on, 0644, led_delay_on_show,
-+ led_delay_on_store);
-+static CLASS_DEVICE_ATTR(delay_off, 0644, led_delay_off_show,
-+ led_delay_off_store);
-+
-+static void timer_trig_activate(struct led_classdev *led_cdev)
-+{
-+ struct timer_trig_data *timer_data;
-+
-+ timer_data = kzalloc(sizeof(struct timer_trig_data), GFP_KERNEL);
-+ if (!timer_data)
-+ return;
-+
-+ led_cdev->trigger_data = timer_data;
-+
-+ init_timer(&timer_data->timer);
-+ timer_data->timer.function = led_timer_function;
-+ timer_data->timer.data = (unsigned long) led_cdev;
-+
-+ class_device_create_file(led_cdev->class_dev,
-+ &class_device_attr_delay_on);
-+ class_device_create_file(led_cdev->class_dev,
-+ &class_device_attr_delay_off);
-+}
-+
-+static void timer_trig_deactivate(struct led_classdev *led_cdev)
-+{
-+ struct timer_trig_data *timer_data = led_cdev->trigger_data;
-+
-+ if (timer_data) {
-+ class_device_remove_file(led_cdev->class_dev,
-+ &class_device_attr_delay_on);
-+ class_device_remove_file(led_cdev->class_dev,
-+ &class_device_attr_delay_off);
-+ del_timer_sync(&timer_data->timer);
-+ kfree(timer_data);
-+ }
-+}
-+
-+static struct led_trigger timer_led_trigger = {
-+ .name = "timer",
-+ .activate = timer_trig_activate,
-+ .deactivate = timer_trig_deactivate,
-+};
-+
-+static int __init timer_trig_init(void)
-+{
-+ return led_trigger_register(&timer_led_trigger);
-+}
-+
-+static void __exit timer_trig_exit(void)
-+{
-+ led_trigger_unregister(&timer_led_trigger);
-+}
-+
-+module_init(timer_trig_init);
-+module_exit(timer_trig_exit);
-+
-+MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
-+MODULE_DESCRIPTION("Timer LED trigger");
-+MODULE_LICENSE("GPL");
---- linux-ixp4xx.orig/arch/arm/mach-pxa/corgi.c 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-pxa/corgi.c 2006-03-07 22:59:04.000000000 +0100
-@@ -165,6 +165,14 @@ static struct platform_device corgikbd_d
-
-
- /*
-+ * Corgi LEDs
-+ */
-+static struct platform_device corgiled_device = {
-+ .name = "corgi-led",
-+ .id = -1,
-+};
-+
-+/*
- * Corgi Touch Screen Device
- */
- static struct resource corgits_resources[] = {
-@@ -298,6 +306,7 @@ static struct platform_device *devices[]
- &corgikbd_device,
- &corgibl_device,
- &corgits_device,
-+ &corgiled_device,
- };
-
- static void __init corgi_init(void)
---- linux-ixp4xx.orig/arch/arm/mach-pxa/spitz.c 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-pxa/spitz.c 2006-03-07 22:59:04.000000000 +0100
-@@ -243,6 +243,14 @@ static struct platform_device spitzkbd_d
-
-
- /*
-+ * Spitz LEDs
-+ */
-+static struct platform_device spitzled_device = {
-+ .name = "spitz-led",
-+ .id = -1,
-+};
-+
-+/*
- * Spitz Touch Screen Device
- */
- static struct resource spitzts_resources[] = {
-@@ -419,6 +427,7 @@ static struct platform_device *devices[]
- &spitzkbd_device,
- &spitzts_device,
- &spitzbl_device,
-+ &spitzled_device,
- };
-
- static void __init common_init(void)
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds-corgi.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,121 @@
-+/*
-+ * LED Triggers Core
-+ *
-+ * Copyright 2005-2006 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/arch/corgi.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/hardware/scoop.h>
-+
-+static void corgiled_amber_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ if (value)
-+ GPSR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
-+ else
-+ GPCR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
-+}
-+
-+static void corgiled_green_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ if (value)
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN);
-+ else
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_LED_GREEN);
-+}
-+
-+static struct led_classdev corgi_amber_led = {
-+ .name = "corgi:amber",
-+ .default_trigger = "sharpsl-charge",
-+ .brightness_set = corgiled_amber_set,
-+};
-+
-+static struct led_classdev corgi_green_led = {
-+ .name = "corgi:green",
-+ .default_trigger = "nand-disk",
-+ .brightness_set = corgiled_green_set,
-+};
-+
-+#ifdef CONFIG_PM
-+static int corgiled_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ if (corgi_amber_led.trigger && strcmp(corgi_amber_led.trigger->name, "sharpsl-charge"))
-+#endif
-+ led_classdev_suspend(&corgi_amber_led);
-+ led_classdev_suspend(&corgi_green_led);
-+ return 0;
-+}
-+
-+static int corgiled_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&corgi_amber_led);
-+ led_classdev_resume(&corgi_green_led);
-+ return 0;
-+}
-+#endif
-+
-+static int corgiled_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &corgi_amber_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &corgi_green_led);
-+ if (ret < 0)
-+ led_classdev_unregister(&corgi_amber_led);
-+
-+ return ret;
-+}
-+
-+static int corgiled_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&corgi_amber_led);
-+ led_classdev_unregister(&corgi_green_led);
-+ return 0;
-+}
-+
-+static struct platform_driver corgiled_driver = {
-+ .probe = corgiled_probe,
-+ .remove = corgiled_remove,
-+#ifdef CONFIG_PM
-+ .suspend = corgiled_suspend,
-+ .resume = corgiled_resume,
-+#endif
-+ .driver = {
-+ .name = "corgi-led",
-+ },
-+};
-+
-+static int __init corgiled_init(void)
-+{
-+ return platform_driver_register(&corgiled_driver);
-+}
-+
-+static void __exit corgiled_exit(void)
-+{
-+ platform_driver_unregister(&corgiled_driver);
-+}
-+
-+module_init(corgiled_init);
-+module_exit(corgiled_exit);
-+
-+MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
-+MODULE_DESCRIPTION("Corgi LED driver");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds-spitz.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,125 @@
-+/*
-+ * LED Triggers Core
-+ *
-+ * Copyright 2005-2006 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/mach-types.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/spitz.h>
-+
-+static void spitzled_amber_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ if (value)
-+ set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
-+ else
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
-+}
-+
-+static void spitzled_green_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ if (value)
-+ set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_GREEN);
-+ else
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_GREEN);
-+}
-+
-+static struct led_classdev spitz_amber_led = {
-+ .name = "spitz:amber",
-+ .default_trigger = "sharpsl-charge",
-+ .brightness_set = spitzled_amber_set,
-+};
-+
-+static struct led_classdev spitz_green_led = {
-+ .name = "spitz:green",
-+ .default_trigger = "ide-disk",
-+ .brightness_set = spitzled_green_set,
-+};
-+
-+#ifdef CONFIG_PM
-+static int spitzled_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ if (spitz_amber_led.trigger && strcmp(spitz_amber_led.trigger->name, "sharpsl-charge"))
-+#endif
-+ led_classdev_suspend(&spitz_amber_led);
-+ led_classdev_suspend(&spitz_green_led);
-+ return 0;
-+}
-+
-+static int spitzled_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&spitz_amber_led);
-+ led_classdev_resume(&spitz_green_led);
-+ return 0;
-+}
-+#endif
-+
-+static int spitzled_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ if (machine_is_akita())
-+ spitz_green_led.default_trigger = "nand-disk";
-+
-+ ret = led_classdev_register(&pdev->dev, &spitz_amber_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &spitz_green_led);
-+ if (ret < 0)
-+ led_classdev_unregister(&spitz_amber_led);
-+
-+ return ret;
-+}
-+
-+static int spitzled_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&spitz_amber_led);
-+ led_classdev_unregister(&spitz_green_led);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver spitzled_driver = {
-+ .probe = spitzled_probe,
-+ .remove = spitzled_remove,
-+#ifdef CONFIG_PM
-+ .suspend = spitzled_suspend,
-+ .resume = spitzled_resume,
-+#endif
-+ .driver = {
-+ .name = "spitz-led",
-+ },
-+};
-+
-+static int __init spitzled_init(void)
-+{
-+ return platform_driver_register(&spitzled_driver);
-+}
-+
-+static void __exit spitzled_exit(void)
-+{
-+ platform_driver_unregister(&spitzled_driver);
-+}
-+
-+module_init(spitzled_init);
-+module_exit(spitzled_exit);
-+
-+MODULE_AUTHOR("Richard Purdie <rpurdie@openedhand.com>");
-+MODULE_DESCRIPTION("Spitz LED driver");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds-locomo.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,95 @@
-+/*
-+ * linux/drivers/leds/locomo.c
-+ *
-+ * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/leds.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/hardware/locomo.h>
-+
-+static void locomoled_brightness_set(struct led_classdev *led_cdev,
-+ enum led_brightness value, int offset)
-+{
-+ struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->class_dev->dev);
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+ if (value)
-+ locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset);
-+ else
-+ locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset);
-+ local_irq_restore(flags);
-+}
-+
-+static void locomoled_brightness_set0(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0);
-+}
-+
-+static void locomoled_brightness_set1(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1);
-+}
-+
-+static struct led_classdev locomo_led0 = {
-+ .name = "locomo:amber",
-+ .brightness_set = locomoled_brightness_set0,
-+};
-+
-+static struct led_classdev locomo_led1 = {
-+ .name = "locomo:green",
-+ .brightness_set = locomoled_brightness_set1,
-+};
-+
-+static int locomoled_probe(struct locomo_dev *ldev)
-+{
-+ int ret;
-+
-+ ret = led_classdev_register(&ldev->dev, &locomo_led0);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&ldev->dev, &locomo_led1);
-+ if (ret < 0)
-+ led_classdev_unregister(&locomo_led0);
-+
-+ return ret;
-+}
-+
-+static int locomoled_remove(struct locomo_dev *dev)
-+{
-+ led_classdev_unregister(&locomo_led0);
-+ led_classdev_unregister(&locomo_led1);
-+ return 0;
-+}
-+
-+static struct locomo_driver locomoled_driver = {
-+ .drv = {
-+ .name = "locomoled"
-+ },
-+ .devid = LOCOMO_DEVID_LED,
-+ .probe = locomoled_probe,
-+ .remove = locomoled_remove,
-+};
-+
-+static int __init locomoled_init(void)
-+{
-+ return locomo_driver_register(&locomoled_driver);
-+}
-+module_init(locomoled_init);
-+
-+MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>");
-+MODULE_DESCRIPTION("Locomo LED driver");
-+MODULE_LICENSE("GPL");
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds-ixp4xx-gpio.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,215 @@
-+/*
-+ * IXP4XX GPIO driver LED driver
-+ *
-+ * Author: John Bowler <jbowler@acm.org>
-+ *
-+ * Copyright (c) 2006 John Bowler
-+ *
-+ * Permission is hereby granted, free of charge, to any
-+ * person obtaining a copy of this software and associated
-+ * documentation files (the "Software"), to deal in the
-+ * Software without restriction, including without
-+ * limitation the rights to use, copy, modify, merge,
-+ * publish, distribute, sublicense, and/or sell copies of
-+ * the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the
-+ * following conditions:
-+ *
-+ * The above copyright notice and this permission notice
-+ * shall be included in all copies or substantial portions
-+ * of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-+ * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-+ * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-+ * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/spinlock.h>
-+#include <linux/leds.h>
-+#include <asm/arch/hardware.h>
-+
-+extern spinlock_t gpio_lock;
-+
-+/* Up to 16 gpio lines are possible. */
-+#define GPIO_MAX 16
-+static struct ixp4xxgpioled_device {
-+ struct led_classdev ancestor;
-+ int flags;
-+} ixp4xxgpioled_devices[GPIO_MAX];
-+
-+void ixp4xxgpioled_brightness_set(struct led_classdev *pled,
-+ enum led_brightness value)
-+{
-+ const struct ixp4xxgpioled_device *const ixp4xx_dev =
-+ container_of(pled, struct ixp4xxgpioled_device, ancestor);
-+ const u32 gpio_pin = ixp4xx_dev - ixp4xxgpioled_devices;
-+
-+ if (gpio_pin < GPIO_MAX && ixp4xx_dev->ancestor.name != 0) {
-+ /* Set or clear the 'gpio_pin' bit according to the style
-+ * and the required setting (value > 0 == on)
-+ */
-+ const int gpio_value =
-+ (value > 0) == (ixp4xx_dev->flags != IXP4XX_GPIO_LOW) ?
-+ IXP4XX_GPIO_HIGH : IXP4XX_GPIO_LOW;
-+
-+ {
-+ unsigned long flags;
-+ spin_lock_irqsave(&gpio_lock, flags);
-+ gpio_line_set(gpio_pin, gpio_value);
-+ spin_unlock_irqrestore(&gpio_lock, flags);
-+ }
-+ }
-+}
-+
-+/* LEDs are described in resources, the following iterates over the valid
-+ * LED resources.
-+ */
-+#define for_all_leds(i, pdev) \
-+ for (i=0; i<pdev->num_resources; ++i) \
-+ if (pdev->resource[i].start < GPIO_MAX && \
-+ pdev->resource[i].name != 0)
-+
-+/* The following applies 'operation' to each LED from the given platform,
-+ * the function always returns 0 to allow tail call elimination.
-+ */
-+static int apply_to_all_leds(struct platform_device *pdev,
-+ void (*operation)(struct led_classdev *pled))
-+{
-+ int i;
-+
-+ for_all_leds(i, pdev)
-+ operation(&ixp4xxgpioled_devices[pdev->resource[i].start].ancestor);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int ixp4xxgpioled_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ return apply_to_all_leds(pdev, led_classdev_suspend);
-+}
-+
-+static int ixp4xxgpioled_resume(struct platform_device *pdev)
-+{
-+ return apply_to_all_leds(pdev, led_classdev_resume);
-+}
-+#endif
-+
-+static void ixp4xxgpioled_remove_one_led(struct led_classdev *pled)
-+{
-+ led_classdev_unregister(pled);
-+ pled->name = 0;
-+}
-+
-+static int ixp4xxgpioled_remove(struct platform_device *pdev)
-+{
-+ return apply_to_all_leds(pdev, ixp4xxgpioled_remove_one_led);
-+}
-+
-+static int ixp4xxgpioled_probe(struct platform_device *pdev)
-+{
-+ /* The board level has to tell the driver where the
-+ * LEDs are connected - there is no way to find out
-+ * electrically. It must also say whether the GPIO
-+ * lines are active high or active low.
-+ *
-+ * To do this read the num_resources (the number of
-+ * LEDs) and the struct resource (the data for each
-+ * LED). The name comes from the resource, and it
-+ * isn't copied.
-+ */
-+ int i;
-+
-+ for_all_leds(i, pdev) {
-+ const u8 gpio_pin = pdev->resource[i].start;
-+ int rc;
-+
-+ if (ixp4xxgpioled_devices[gpio_pin].ancestor.name == 0) {
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&gpio_lock, flags);
-+ gpio_line_config(gpio_pin, IXP4XX_GPIO_OUT);
-+ /* The config can, apparently, reset the state,
-+ * I suspect the gpio line may be an input and
-+ * the config may cause the line to be latched,
-+ * so the setting depends on how the LED is
-+ * connected to the line (which affects how it
-+ * floats if not driven).
-+ */
-+ gpio_line_set(gpio_pin, IXP4XX_GPIO_HIGH);
-+ spin_unlock_irqrestore(&gpio_lock, flags);
-+
-+ ixp4xxgpioled_devices[gpio_pin].flags =
-+ pdev->resource[i].flags & IORESOURCE_BITS;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.name =
-+ pdev->resource[i].name;
-+
-+ /* This is how a board manufacturer makes the LED
-+ * come on on reset - the GPIO line will be high, so
-+ * make the LED light when the line is low...
-+ */
-+ if (ixp4xxgpioled_devices[gpio_pin].flags != IXP4XX_GPIO_LOW)
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness = 100;
-+ else
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness = 0;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.flags = 0;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.brightness_set =
-+ ixp4xxgpioled_brightness_set;
-+
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.default_trigger = 0;
-+ }
-+
-+ rc = led_classdev_register(&pdev->dev,
-+ &ixp4xxgpioled_devices[gpio_pin].ancestor);
-+ if (rc < 0) {
-+ ixp4xxgpioled_devices[gpio_pin].ancestor.name = 0;
-+ ixp4xxgpioled_remove(pdev);
-+ return rc;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+static struct platform_driver ixp4xxgpioled_driver = {
-+ .probe = ixp4xxgpioled_probe,
-+ .remove = ixp4xxgpioled_remove,
-+#ifdef CONFIG_PM
-+ .suspend = ixp4xxgpioled_suspend,
-+ .resume = ixp4xxgpioled_resume,
-+#endif
-+ .driver = {
-+ .name = "IXP4XX-GPIO-LED",
-+ },
-+};
-+
-+static int __init ixp4xxgpioled_init(void)
-+{
-+ return platform_driver_register(&ixp4xxgpioled_driver);
-+}
-+
-+static void __exit ixp4xxgpioled_exit(void)
-+{
-+ platform_driver_unregister(&ixp4xxgpioled_driver);
-+}
-+
-+module_init(ixp4xxgpioled_init);
-+module_exit(ixp4xxgpioled_exit);
-+
-+MODULE_AUTHOR("John Bowler <jbowler@acm.org>");
-+MODULE_DESCRIPTION("IXP4XX GPIO LED driver");
-+MODULE_LICENSE("Dual MIT/GPL");
---- linux-ixp4xx.orig/arch/arm/mach-pxa/tosa.c 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/arch/arm/mach-pxa/tosa.c 2006-03-07 22:59:04.000000000 +0100
-@@ -252,10 +252,19 @@ static struct platform_device tosakbd_de
- .id = -1,
- };
-
-+/*
-+ * Tosa LEDs
-+ */
-+static struct platform_device tosaled_device = {
-+ .name = "tosa-led",
-+ .id = -1,
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &tosascoop_device,
- &tosascoop_jc_device,
- &tosakbd_device,
-+ &tosaled_device,
- };
-
- static void __init tosa_init(void)
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-ixp4xx/drivers/leds/leds-tosa.c 2006-03-07 22:59:04.000000000 +0100
-@@ -0,0 +1,131 @@
-+/*
-+ * LED Triggers Core
-+ *
-+ * Copyright 2005 Dirk Opfer
-+ *
-+ * Author: Dirk Opfer <Dirk@Opfer-Online.de>
-+ * based on spitz.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/mach-types.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/tosa.h>
-+
-+static void tosaled_amber_set(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ if (value)
-+ set_scoop_gpio(&tosascoop_jc_device.dev,
-+ TOSA_SCOOP_JC_CHRG_ERR_LED);
-+ else
-+ reset_scoop_gpio(&tosascoop_jc_device.dev,
-+ TOSA_SCOOP_JC_CHRG_ERR_LED);
-+}
-+
-+static void tosaled_green_set(struct led_classdev *led_cdev,
-+ enum led_brightness value)
-+{
-+ if (value)
-+ set_scoop_gpio(&tosascoop_jc_device.dev,
-+ TOSA_SCOOP_JC_NOTE_LED);
-+ else
-+ reset_scoop_gpio(&tosascoop_jc_device.dev,
-+ TOSA_SCOOP_JC_NOTE_LED);
-+}
-+
-+static struct led_classdev tosa_amber_led = {
-+ .name = "tosa:amber",
-+ .default_trigger = "sharpsl-charge",
-+ .brightness_set = tosaled_amber_set,
-+};
-+
-+static struct led_classdev tosa_green_led = {
-+ .name = "tosa:green",
-+ .default_trigger = "nand-disk",
-+ .brightness_set = tosaled_green_set,
-+};
-+
-+#ifdef CONFIG_PM
-+static int tosaled_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ if (tosa_amber_led.trigger && strcmp(tosa_amber_led.trigger->name,
-+ "sharpsl-charge"))
-+#endif
-+ led_classdev_suspend(&tosa_amber_led);
-+ led_classdev_suspend(&tosa_green_led);
-+ return 0;
-+}
-+
-+static int tosaled_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&tosa_amber_led);
-+ led_classdev_resume(&tosa_green_led);
-+ return 0;
-+}
-+#else
-+#define tosaled_suspend NULL
-+#define tosaled_resume NULL
-+#endif
-+
-+static int tosaled_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &tosa_amber_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &tosa_green_led);
-+ if (ret < 0)
-+ led_classdev_unregister(&tosa_amber_led);
-+
-+ return ret;
-+}
-+
-+static int tosaled_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&tosa_amber_led);
-+ led_classdev_unregister(&tosa_green_led);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver tosaled_driver = {
-+ .probe = tosaled_probe,
-+ .remove = tosaled_remove,
-+ .suspend = tosaled_suspend,
-+ .resume = tosaled_resume,
-+ .driver = {
-+ .name = "tosa-led",
-+ },
-+};
-+
-+static int __init tosaled_init(void)
-+{
-+ return platform_driver_register(&tosaled_driver);
-+}
-+
-+static void __exit tosaled_exit(void)
-+{
-+ platform_driver_unregister(&tosaled_driver);
-+}
-+
-+module_init(tosaled_init);
-+module_exit(tosaled_exit);
-+
-+MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
-+MODULE_DESCRIPTION("Tosa LED driver");
-+MODULE_LICENSE("GPL");
---- linux-ixp4xx.orig/drivers/ide/ide-disk.c 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/drivers/ide/ide-disk.c 2006-03-07 22:59:04.000000000 +0100
-@@ -60,6 +60,7 @@
- #include <linux/genhd.h>
- #include <linux/slab.h>
- #include <linux/delay.h>
-+#include <linux/leds.h>
-
- #define _IDE_DISK
-
-@@ -80,6 +81,8 @@ struct ide_disk_obj {
-
- static DECLARE_MUTEX(idedisk_ref_sem);
-
-+DEFINE_LED_TRIGGER(ide_led_trigger);
-+
- #define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
-
- #define ide_disk_g(disk) \
-@@ -298,6 +301,13 @@ static ide_startstop_t __ide_do_rw_disk(
- }
- }
-
-+static int ide_end_rw_disk(ide_drive_t *drive, int uptodate, int nr_sectors)
-+{
-+ if (blk_fs_request(HWGROUP(drive)->rq))
-+ led_trigger_event(ide_led_trigger, LED_OFF);
-+ return ide_end_request(drive, uptodate, nr_sectors);
-+}
-+
- /*
- * 268435455 == 137439 MB or 28bit limit
- * 320173056 == 163929 MB or 48bit addressing
-@@ -312,10 +322,12 @@ static ide_startstop_t ide_do_rw_disk (i
-
- if (!blk_fs_request(rq)) {
- blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command");
-- ide_end_request(drive, 0, 0);
-+ ide_end_rw_disk(drive, 0, 0);
- return ide_stopped;
- }
-
-+ led_trigger_event(ide_led_trigger, LED_FULL);
-+
- pr_debug("%s: %sing: block=%llu, sectors=%lu, buffer=0x%08lx\n",
- drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
- (unsigned long long)block, rq->nr_sectors,
-@@ -1063,7 +1075,7 @@ static ide_driver_t idedisk_driver = {
- .media = ide_disk,
- .supports_dsc_overlap = 0,
- .do_request = ide_do_rw_disk,
-- .end_request = ide_end_request,
-+ .end_request = ide_end_rw_disk,
- .error = __ide_error,
- .abort = __ide_abort,
- .proc = idedisk_proc,
-@@ -1236,12 +1248,16 @@ failed:
-
- static void __exit idedisk_exit (void)
- {
-+ led_trigger_unregister_simple(ide_led_trigger);
- driver_unregister(&idedisk_driver.gen_driver);
- }
-
- static int __init idedisk_init(void)
- {
-- return driver_register(&idedisk_driver.gen_driver);
-+ int ret = driver_register(&idedisk_driver.gen_driver);
-+ if (ret >= 0)
-+ led_trigger_register_simple("ide-disk", &ide_led_trigger);
-+ return ret;
- }
-
- MODULE_ALIAS("ide:*m-disk*");
---- linux-ixp4xx.orig/drivers/mtd/nand/nand_base.c 2006-03-07 22:57:47.000000000 +0100
-+++ linux-ixp4xx/drivers/mtd/nand/nand_base.c 2006-03-07 22:59:04.000000000 +0100
-@@ -80,6 +80,7 @@
- #include <linux/mtd/compatmac.h>
- #include <linux/interrupt.h>
- #include <linux/bitops.h>
-+#include <linux/leds.h>
- #include <asm/io.h>
-
- #ifdef CONFIG_MTD_PARTITIONS
-@@ -515,6 +516,8 @@ static int nand_block_checkbad (struct m
- return nand_isbad_bbt (mtd, ofs, allowbbt);
- }
-
-+DEFINE_LED_TRIGGER(nand_led_trigger);
-+
- /*
- * Wait for the ready pin, after a command
- * The timeout is catched later.
-@@ -524,12 +527,14 @@ static void nand_wait_ready(struct mtd_i
- struct nand_chip *this = mtd->priv;
- unsigned long timeo = jiffies + 2;
-
-+ led_trigger_event(nand_led_trigger, LED_FULL);
- /* wait until command is processed or timeout occures */
- do {
- if (this->dev_ready(mtd))
-- return;
-+ break;
- touch_softlockup_watchdog();
- } while (time_before(jiffies, timeo));
-+ led_trigger_event(nand_led_trigger, LED_OFF);
- }
-
- /**
-@@ -817,6 +822,8 @@ static int nand_wait(struct mtd_info *mt
- else
- timeo += (HZ * 20) / 1000;
-
-+ led_trigger_event(nand_led_trigger, LED_FULL);
-+
- /* Apply this short delay always to ensure that we do wait tWB in
- * any case on any machine. */
- ndelay (100);
-@@ -840,6 +847,8 @@ static int nand_wait(struct mtd_info *mt
- }
- cond_resched();
- }
-+ led_trigger_event(nand_led_trigger, LED_OFF);
-+
- status = (int) this->read_byte(mtd);
- return status;
- }
-@@ -2724,6 +2733,21 @@ void nand_release (struct mtd_info *mtd)
- EXPORT_SYMBOL_GPL (nand_scan);
- EXPORT_SYMBOL_GPL (nand_release);
-
-+
-+static int __init nand_base_init(void)
-+{
-+ led_trigger_register_simple("nand-disk", &nand_led_trigger);
-+ return 0;
-+}
-+
-+static void __exit nand_base_exit(void)
-+{
-+ led_trigger_unregister_simple(nand_led_trigger);
-+}
-+
-+module_init(nand_base_init);
-+module_exit(nand_base_exit);
-+
- MODULE_LICENSE ("GPL");
- MODULE_AUTHOR ("Steven J. Hill <sjhill@realitydiluted.com>, Thomas Gleixner <tglx@linutronix.de>");
- MODULE_DESCRIPTION ("Generic NAND flash driver code");
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/linux-2.6.16-i2c.patch b/packages/linux/ixp4xx-kernel/2.6.16/linux-2.6.16-i2c.patch
deleted file mode 100644
index 86c88c3746..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/linux-2.6.16-i2c.patch
+++ /dev/null
@@ -1,13671 +0,0 @@
---- linux-2.6.16.orig/include/linux/hwmon-sysfs.h 2006-03-22 17:06:11.000000000 +0100
-+++ linux-2.6.16/include/linux/hwmon-sysfs.h 2006-03-22 17:06:15.000000000 +0100
-@@ -27,11 +27,13 @@
- #define to_sensor_dev_attr(_dev_attr) \
- container_of(_dev_attr, struct sensor_device_attribute, dev_attr)
-
--#define SENSOR_DEVICE_ATTR(_name,_mode,_show,_store,_index) \
--struct sensor_device_attribute sensor_dev_attr_##_name = { \
-- .dev_attr = __ATTR(_name,_mode,_show,_store), \
-- .index = _index, \
--}
-+#define SENSOR_ATTR(_name, _mode, _show, _store, _index) \
-+ { .dev_attr = __ATTR(_name, _mode, _show, _store), \
-+ .index = _index }
-+
-+#define SENSOR_DEVICE_ATTR(_name, _mode, _show, _store, _index) \
-+struct sensor_device_attribute sensor_dev_attr_##_name \
-+ = SENSOR_ATTR(_name, _mode, _show, _store, _index)
-
- struct sensor_device_attribute_2 {
- struct device_attribute dev_attr;
-@@ -41,11 +43,13 @@
- #define to_sensor_dev_attr_2(_dev_attr) \
- container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr)
-
-+#define SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index) \
-+ { .dev_attr = __ATTR(_name, _mode, _show, _store), \
-+ .index = _index, \
-+ .nr = _nr }
-+
- #define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \
--struct sensor_device_attribute_2 sensor_dev_attr_##_name = { \
-- .dev_attr = __ATTR(_name,_mode,_show,_store), \
-- .index = _index, \
-- .nr = _nr, \
--}
-+struct sensor_device_attribute_2 sensor_dev_attr_##_name \
-+ = SENSOR_ATTR_2(_name, _mode, _show, _store, _nr, _index)
-
- #endif /* _LINUX_HWMON_SYSFS_H */
---- linux-2.6.16.orig/drivers/hwmon/pc87360.c 2006-03-22 17:06:11.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/pc87360.c 2006-03-22 17:06:15.000000000 +0100
-@@ -43,6 +43,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- static u8 devid;
-@@ -183,8 +184,8 @@
- struct pc87360_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-- struct semaphore update_lock;
-+ struct mutex lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -283,7 +284,7 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long fan_min = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- fan_min = FAN_TO_REG(fan_min, FAN_DIV_FROM_REG(data->fan_status[attr->index]));
-
- /* If it wouldn't fit, change clock divisor */
-@@ -300,23 +301,31 @@
- /* Write new divider, preserve alarm bits */
- pc87360_write_value(data, LD_FAN, NO_BANK, PC87360_REG_FAN_STATUS(attr->index),
- data->fan_status[attr->index] & 0xF9);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--#define show_and_set_fan(offset) \
--static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
-- show_fan_input, NULL, offset-1); \
--static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IWUSR | S_IRUGO, \
-- show_fan_min, set_fan_min, offset-1); \
--static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO, \
-- show_fan_div, NULL, offset-1); \
--static SENSOR_DEVICE_ATTR(fan##offset##_status, S_IRUGO, \
-- show_fan_status, NULL, offset-1);
--show_and_set_fan(1)
--show_and_set_fan(2)
--show_and_set_fan(3)
-+static struct sensor_device_attribute fan_input[] = {
-+ SENSOR_ATTR(fan1_input, S_IRUGO, show_fan_input, NULL, 0),
-+ SENSOR_ATTR(fan2_input, S_IRUGO, show_fan_input, NULL, 1),
-+ SENSOR_ATTR(fan3_input, S_IRUGO, show_fan_input, NULL, 2),
-+};
-+static struct sensor_device_attribute fan_status[] = {
-+ SENSOR_ATTR(fan1_status, S_IRUGO, show_fan_status, NULL, 0),
-+ SENSOR_ATTR(fan2_status, S_IRUGO, show_fan_status, NULL, 1),
-+ SENSOR_ATTR(fan3_status, S_IRUGO, show_fan_status, NULL, 2),
-+};
-+static struct sensor_device_attribute fan_div[] = {
-+ SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
-+ SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
-+ SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
-+};
-+static struct sensor_device_attribute fan_min[] = {
-+ SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, set_fan_min, 0),
-+ SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min, set_fan_min, 1),
-+ SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min, set_fan_min, 2),
-+};
-
- static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr, char *buf)
- {
-@@ -335,21 +344,20 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[attr->index] = PWM_TO_REG(val,
- FAN_CONFIG_INVERT(data->fan_conf, attr->index));
- pc87360_write_value(data, LD_FAN, NO_BANK, PC87360_REG_PWM(attr->index),
- data->pwm[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
--#define show_and_set_pwm(offset) \
--static SENSOR_DEVICE_ATTR(pwm##offset, S_IWUSR | S_IRUGO, \
-- show_pwm, set_pwm, offset-1);
--show_and_set_pwm(1)
--show_and_set_pwm(2)
--show_and_set_pwm(3)
-+static struct sensor_device_attribute pwm[] = {
-+ SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0),
-+ SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1),
-+ SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2),
-+};
-
- static ssize_t show_in_input(struct device *dev, struct device_attribute *devattr, char *buf)
- {
-@@ -386,11 +394,11 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MIN,
- data->in_min[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_in_max(struct device *dev, struct device_attribute *devattr, const char *buf,
-@@ -401,35 +409,67 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[attr->index] = IN_TO_REG(val,
- data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_IN_MAX,
- data->in_max[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
--#define show_and_set_in(offset) \
--static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
-- show_in_input, NULL, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \
-- show_in_min, set_in_min, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_max, S_IWUSR | S_IRUGO, \
-- show_in_max, set_in_max, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_status, S_IRUGO, \
-- show_in_status, NULL, offset);
--show_and_set_in(0)
--show_and_set_in(1)
--show_and_set_in(2)
--show_and_set_in(3)
--show_and_set_in(4)
--show_and_set_in(5)
--show_and_set_in(6)
--show_and_set_in(7)
--show_and_set_in(8)
--show_and_set_in(9)
--show_and_set_in(10)
-+static struct sensor_device_attribute in_input[] = {
-+ SENSOR_ATTR(in0_input, S_IRUGO, show_in_input, NULL, 0),
-+ SENSOR_ATTR(in1_input, S_IRUGO, show_in_input, NULL, 1),
-+ SENSOR_ATTR(in2_input, S_IRUGO, show_in_input, NULL, 2),
-+ SENSOR_ATTR(in3_input, S_IRUGO, show_in_input, NULL, 3),
-+ SENSOR_ATTR(in4_input, S_IRUGO, show_in_input, NULL, 4),
-+ SENSOR_ATTR(in5_input, S_IRUGO, show_in_input, NULL, 5),
-+ SENSOR_ATTR(in6_input, S_IRUGO, show_in_input, NULL, 6),
-+ SENSOR_ATTR(in7_input, S_IRUGO, show_in_input, NULL, 7),
-+ SENSOR_ATTR(in8_input, S_IRUGO, show_in_input, NULL, 8),
-+ SENSOR_ATTR(in9_input, S_IRUGO, show_in_input, NULL, 9),
-+ SENSOR_ATTR(in10_input, S_IRUGO, show_in_input, NULL, 10),
-+};
-+static struct sensor_device_attribute in_status[] = {
-+ SENSOR_ATTR(in0_status, S_IRUGO, show_in_status, NULL, 0),
-+ SENSOR_ATTR(in1_status, S_IRUGO, show_in_status, NULL, 1),
-+ SENSOR_ATTR(in2_status, S_IRUGO, show_in_status, NULL, 2),
-+ SENSOR_ATTR(in3_status, S_IRUGO, show_in_status, NULL, 3),
-+ SENSOR_ATTR(in4_status, S_IRUGO, show_in_status, NULL, 4),
-+ SENSOR_ATTR(in5_status, S_IRUGO, show_in_status, NULL, 5),
-+ SENSOR_ATTR(in6_status, S_IRUGO, show_in_status, NULL, 6),
-+ SENSOR_ATTR(in7_status, S_IRUGO, show_in_status, NULL, 7),
-+ SENSOR_ATTR(in8_status, S_IRUGO, show_in_status, NULL, 8),
-+ SENSOR_ATTR(in9_status, S_IRUGO, show_in_status, NULL, 9),
-+ SENSOR_ATTR(in10_status, S_IRUGO, show_in_status, NULL, 10),
-+};
-+static struct sensor_device_attribute in_min[] = {
-+ SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 0),
-+ SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 1),
-+ SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 2),
-+ SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 3),
-+ SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 4),
-+ SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 5),
-+ SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 6),
-+ SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 7),
-+ SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 8),
-+ SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 9),
-+ SENSOR_ATTR(in10_min, S_IWUSR | S_IRUGO, show_in_min, set_in_min, 10),
-+};
-+static struct sensor_device_attribute in_max[] = {
-+ SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 0),
-+ SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 1),
-+ SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 2),
-+ SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 3),
-+ SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 4),
-+ SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 5),
-+ SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 6),
-+ SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 7),
-+ SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 8),
-+ SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 9),
-+ SENSOR_ATTR(in10_max, S_IWUSR | S_IRUGO, show_in_max, set_in_max, 10),
-+};
-
- static ssize_t show_therm_input(struct device *dev, struct device_attribute *devattr, char *buf)
- {
-@@ -473,11 +513,11 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_MIN,
- data->in_min[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_therm_max(struct device *dev, struct device_attribute *devattr, const char *buf,
-@@ -488,11 +528,11 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[attr->index] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_MAX,
- data->in_max[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_therm_crit(struct device *dev, struct device_attribute *devattr, const char *buf,
-@@ -503,28 +543,51 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_crit[attr->index-11] = IN_TO_REG(val, data->in_vref);
- pc87360_write_value(data, LD_IN, attr->index, PC87365_REG_TEMP_CRIT,
- data->in_crit[attr->index-11]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
--#define show_and_set_therm(offset) \
--static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
-- show_therm_input, NULL, 11+offset-4); \
--static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \
-- show_therm_min, set_therm_min, 11+offset-4); \
--static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \
-- show_therm_max, set_therm_max, 11+offset-4); \
--static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \
-- show_therm_crit, set_therm_crit, 11+offset-4); \
--static SENSOR_DEVICE_ATTR(temp##offset##_status, S_IRUGO, \
-- show_therm_status, NULL, 11+offset-4);
--show_and_set_therm(4)
--show_and_set_therm(5)
--show_and_set_therm(6)
-+/* the +11 term below reflects the fact that VLM units 11,12,13 are
-+ used in the chip to measure voltage across the thermistors
-+*/
-+static struct sensor_device_attribute therm_input[] = {
-+ SENSOR_ATTR(temp4_input, S_IRUGO, show_therm_input, NULL, 0+11),
-+ SENSOR_ATTR(temp5_input, S_IRUGO, show_therm_input, NULL, 1+11),
-+ SENSOR_ATTR(temp6_input, S_IRUGO, show_therm_input, NULL, 2+11),
-+};
-+static struct sensor_device_attribute therm_status[] = {
-+ SENSOR_ATTR(temp4_status, S_IRUGO, show_therm_status, NULL, 0+11),
-+ SENSOR_ATTR(temp5_status, S_IRUGO, show_therm_status, NULL, 1+11),
-+ SENSOR_ATTR(temp6_status, S_IRUGO, show_therm_status, NULL, 2+11),
-+};
-+static struct sensor_device_attribute therm_min[] = {
-+ SENSOR_ATTR(temp4_min, S_IRUGO | S_IWUSR,
-+ show_therm_min, set_therm_min, 0+11),
-+ SENSOR_ATTR(temp5_min, S_IRUGO | S_IWUSR,
-+ show_therm_min, set_therm_min, 1+11),
-+ SENSOR_ATTR(temp6_min, S_IRUGO | S_IWUSR,
-+ show_therm_min, set_therm_min, 2+11),
-+};
-+static struct sensor_device_attribute therm_max[] = {
-+ SENSOR_ATTR(temp4_max, S_IRUGO | S_IWUSR,
-+ show_therm_max, set_therm_max, 0+11),
-+ SENSOR_ATTR(temp5_max, S_IRUGO | S_IWUSR,
-+ show_therm_max, set_therm_max, 1+11),
-+ SENSOR_ATTR(temp6_max, S_IRUGO | S_IWUSR,
-+ show_therm_max, set_therm_max, 2+11),
-+};
-+static struct sensor_device_attribute therm_crit[] = {
-+ SENSOR_ATTR(temp4_crit, S_IRUGO | S_IWUSR,
-+ show_therm_crit, set_therm_crit, 0+11),
-+ SENSOR_ATTR(temp5_crit, S_IRUGO | S_IWUSR,
-+ show_therm_crit, set_therm_crit, 1+11),
-+ SENSOR_ATTR(temp6_crit, S_IRUGO | S_IWUSR,
-+ show_therm_crit, set_therm_crit, 2+11),
-+};
-
- static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf)
- {
-@@ -592,11 +655,11 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[attr->index] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, attr->index, PC87365_REG_TEMP_MIN,
- data->temp_min[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp_max(struct device *dev, struct device_attribute *devattr, const char *buf,
-@@ -607,11 +670,11 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[attr->index] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, attr->index, PC87365_REG_TEMP_MAX,
- data->temp_max[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp_crit(struct device *dev, struct device_attribute *devattr, const char *buf,
-@@ -622,28 +685,48 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_crit[attr->index] = TEMP_TO_REG(val);
- pc87360_write_value(data, LD_TEMP, attr->index, PC87365_REG_TEMP_CRIT,
- data->temp_crit[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
--#define show_and_set_temp(offset) \
--static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
-- show_temp_input, NULL, offset-1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \
-- show_temp_min, set_temp_min, offset-1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IWUSR | S_IRUGO, \
-- show_temp_max, set_temp_max, offset-1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IWUSR | S_IRUGO, \
-- show_temp_crit, set_temp_crit, offset-1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_status, S_IRUGO, \
-- show_temp_status, NULL, offset-1);
--show_and_set_temp(1)
--show_and_set_temp(2)
--show_and_set_temp(3)
-+static struct sensor_device_attribute temp_input[] = {
-+ SENSOR_ATTR(temp1_input, S_IRUGO, show_temp_input, NULL, 0),
-+ SENSOR_ATTR(temp2_input, S_IRUGO, show_temp_input, NULL, 1),
-+ SENSOR_ATTR(temp3_input, S_IRUGO, show_temp_input, NULL, 2),
-+};
-+static struct sensor_device_attribute temp_status[] = {
-+ SENSOR_ATTR(temp1_status, S_IRUGO, show_temp_status, NULL, 0),
-+ SENSOR_ATTR(temp2_status, S_IRUGO, show_temp_status, NULL, 1),
-+ SENSOR_ATTR(temp3_status, S_IRUGO, show_temp_status, NULL, 2),
-+};
-+static struct sensor_device_attribute temp_min[] = {
-+ SENSOR_ATTR(temp1_min, S_IRUGO | S_IWUSR,
-+ show_temp_min, set_temp_min, 0),
-+ SENSOR_ATTR(temp2_min, S_IRUGO | S_IWUSR,
-+ show_temp_min, set_temp_min, 1),
-+ SENSOR_ATTR(temp3_min, S_IRUGO | S_IWUSR,
-+ show_temp_min, set_temp_min, 2),
-+};
-+static struct sensor_device_attribute temp_max[] = {
-+ SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 0),
-+ SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 1),
-+ SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 2),
-+};
-+static struct sensor_device_attribute temp_crit[] = {
-+ SENSOR_ATTR(temp1_crit, S_IRUGO | S_IWUSR,
-+ show_temp_crit, set_temp_crit, 0),
-+ SENSOR_ATTR(temp2_crit, S_IRUGO | S_IWUSR,
-+ show_temp_crit, set_temp_crit, 1),
-+ SENSOR_ATTR(temp3_crit, S_IRUGO | S_IWUSR,
-+ show_temp_crit, set_temp_crit, 2),
-+};
-
- static ssize_t show_temp_alarms(struct device *dev, struct device_attribute *attr, char *buf)
- {
-@@ -749,22 +832,24 @@
- static int pc87360_detect(struct i2c_adapter *adapter)
- {
- int i;
-- struct i2c_client *new_client;
-+ struct i2c_client *client;
- struct pc87360_data *data;
- int err = 0;
- const char *name = "pc87360";
- int use_thermistors = 0;
-+ struct device *dev;
-
- if (!(data = kzalloc(sizeof(struct pc87360_data), GFP_KERNEL)))
- return -ENOMEM;
-
-- new_client = &data->client;
-- i2c_set_clientdata(new_client, data);
-- new_client->addr = address;
-- init_MUTEX(&data->lock);
-- new_client->adapter = adapter;
-- new_client->driver = &pc87360_driver;
-- new_client->flags = 0;
-+ client = &data->client;
-+ dev = &client->dev;
-+ i2c_set_clientdata(client, data);
-+ client->addr = address;
-+ mutex_init(&data->lock);
-+ client->adapter = adapter;
-+ client->driver = &pc87360_driver;
-+ client->flags = 0;
-
- data->fannr = 2;
- data->innr = 0;
-@@ -792,15 +877,15 @@
- break;
- }
-
-- strcpy(new_client->name, name);
-+ strlcpy(client->name, name, sizeof(client->name));
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- for (i = 0; i < 3; i++) {
- if (((data->address[i] = extra_isa[i]))
- && !request_region(extra_isa[i], PC87360_EXTENT,
- pc87360_driver.driver.name)) {
-- dev_err(&new_client->dev, "Region 0x%x-0x%x already "
-+ dev_err(&client->dev, "Region 0x%x-0x%x already "
- "in use!\n", extra_isa[i],
- extra_isa[i]+PC87360_EXTENT-1);
- for (i--; i >= 0; i--)
-@@ -814,7 +899,7 @@
- if (data->fannr)
- data->fan_conf = confreg[0] | (confreg[1] << 8);
-
-- if ((err = i2c_attach_client(new_client)))
-+ if ((err = i2c_attach_client(client)))
- goto ERROR2;
-
- /* Use the correct reference voltage
-@@ -828,7 +913,7 @@
- PC87365_REG_TEMP_CONFIG);
- }
- data->in_vref = (i&0x02) ? 3025 : 2966;
-- dev_dbg(&new_client->dev, "Using %s reference voltage\n",
-+ dev_dbg(&client->dev, "Using %s reference voltage\n",
- (i&0x02) ? "external" : "internal");
-
- data->vid_conf = confreg[3];
-@@ -847,154 +932,64 @@
- if (devid == 0xe9 && data->address[1]) /* PC87366 */
- use_thermistors = confreg[2] & 0x40;
-
-- pc87360_init_client(new_client, use_thermistors);
-+ pc87360_init_client(client, use_thermistors);
- }
-
- /* Register sysfs hooks */
-- data->class_dev = hwmon_device_register(&new_client->dev);
-+ data->class_dev = hwmon_device_register(&client->dev);
- if (IS_ERR(data->class_dev)) {
- err = PTR_ERR(data->class_dev);
- goto ERROR3;
- }
-
- if (data->innr) {
-- device_create_file(&new_client->dev, &sensor_dev_attr_in0_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in1_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in2_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in3_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in4_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in5_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in6_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in7_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in8_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in9_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in10_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in0_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in1_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in2_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in3_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in4_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in5_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in6_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in7_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in8_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in9_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in10_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in0_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in1_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in2_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in3_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in4_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in5_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in6_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in7_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in8_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in9_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in10_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in0_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in1_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in2_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in3_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in4_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in5_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in6_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in7_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in8_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in9_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_in10_status.dev_attr);
--
-- device_create_file(&new_client->dev, &dev_attr_cpu0_vid);
-- device_create_file(&new_client->dev, &dev_attr_vrm);
-- device_create_file(&new_client->dev, &dev_attr_alarms_in);
-+ for (i = 0; i < 11; i++) {
-+ device_create_file(dev, &in_input[i].dev_attr);
-+ device_create_file(dev, &in_min[i].dev_attr);
-+ device_create_file(dev, &in_max[i].dev_attr);
-+ device_create_file(dev, &in_status[i].dev_attr);
-+ }
-+ device_create_file(dev, &dev_attr_cpu0_vid);
-+ device_create_file(dev, &dev_attr_vrm);
-+ device_create_file(dev, &dev_attr_alarms_in);
- }
-
- if (data->tempnr) {
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp1_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp2_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp1_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp2_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp1_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp2_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp1_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp2_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp1_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp2_status.dev_attr);
--
-- device_create_file(&new_client->dev, &dev_attr_alarms_temp);
-- }
-- if (data->tempnr == 3) {
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp3_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp3_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp3_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp3_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp3_status.dev_attr);
-+ for (i = 0; i < data->tempnr; i++) {
-+ device_create_file(dev, &temp_input[i].dev_attr);
-+ device_create_file(dev, &temp_min[i].dev_attr);
-+ device_create_file(dev, &temp_max[i].dev_attr);
-+ device_create_file(dev, &temp_crit[i].dev_attr);
-+ device_create_file(dev, &temp_status[i].dev_attr);
-+ }
-+ device_create_file(dev, &dev_attr_alarms_temp);
- }
-+
- if (data->innr == 14) {
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp4_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp5_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp6_input.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp4_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp5_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp6_min.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp4_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp5_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp6_max.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp4_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp5_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp6_crit.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp4_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp5_status.dev_attr);
-- device_create_file(&new_client->dev, &sensor_dev_attr_temp6_status.dev_attr);
-- }
--
-- if (data->fannr) {
-- if (FAN_CONFIG_MONITOR(data->fan_conf, 0)) {
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan1_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan1_min.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan1_div.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan1_status.dev_attr);
-- }
--
-- if (FAN_CONFIG_MONITOR(data->fan_conf, 1)) {
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan2_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan2_min.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan2_div.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan2_status.dev_attr);
-- }
--
-- if (FAN_CONFIG_CONTROL(data->fan_conf, 0))
-- device_create_file(&new_client->dev, &sensor_dev_attr_pwm1.dev_attr);
-- if (FAN_CONFIG_CONTROL(data->fan_conf, 1))
-- device_create_file(&new_client->dev, &sensor_dev_attr_pwm2.dev_attr);
-- }
-- if (data->fannr == 3) {
-- if (FAN_CONFIG_MONITOR(data->fan_conf, 2)) {
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan3_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan3_min.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan3_div.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_fan3_status.dev_attr);
-+ for (i = 0; i < 3; i++) {
-+ device_create_file(dev, &therm_input[i].dev_attr);
-+ device_create_file(dev, &therm_min[i].dev_attr);
-+ device_create_file(dev, &therm_max[i].dev_attr);
-+ device_create_file(dev, &therm_crit[i].dev_attr);
-+ device_create_file(dev, &therm_status[i].dev_attr);
- }
-+ }
-
-- if (FAN_CONFIG_CONTROL(data->fan_conf, 2))
-- device_create_file(&new_client->dev, &sensor_dev_attr_pwm3.dev_attr);
-+ for (i = 0; i < data->fannr; i++) {
-+ if (FAN_CONFIG_MONITOR(data->fan_conf, i)) {
-+ device_create_file(dev, &fan_input[i].dev_attr);
-+ device_create_file(dev, &fan_min[i].dev_attr);
-+ device_create_file(dev, &fan_div[i].dev_attr);
-+ device_create_file(dev, &fan_status[i].dev_attr);
-+ }
-+ if (FAN_CONFIG_CONTROL(data->fan_conf, i))
-+ device_create_file(dev, &pwm[i].dev_attr);
- }
-
- return 0;
-
- ERROR3:
-- i2c_detach_client(new_client);
-+ i2c_detach_client(client);
- ERROR2:
- for (i = 0; i < 3; i++) {
- if (data->address[i]) {
-@@ -1033,11 +1028,11 @@
- {
- int res;
-
-- down(&(data->lock));
-+ mutex_lock(&(data->lock));
- if (bank != NO_BANK)
- outb_p(bank, data->address[ldi] + PC87365_REG_BANK);
- res = inb_p(data->address[ldi] + reg);
-- up(&(data->lock));
-+ mutex_unlock(&(data->lock));
-
- return res;
- }
-@@ -1045,11 +1040,11 @@
- static void pc87360_write_value(struct pc87360_data *data, u8 ldi, u8 bank,
- u8 reg, u8 value)
- {
-- down(&(data->lock));
-+ mutex_lock(&(data->lock));
- if (bank != NO_BANK)
- outb_p(bank, data->address[ldi] + PC87365_REG_BANK);
- outb_p(value, data->address[ldi] + reg);
-- up(&(data->lock));
-+ mutex_unlock(&(data->lock));
- }
-
- static void pc87360_init_client(struct i2c_client *client, int use_thermistors)
-@@ -1071,7 +1066,7 @@
- }
-
- nr = data->innr < 11 ? data->innr : 11;
-- for (i=0; i<nr; i++) {
-+ for (i = 0; i < nr; i++) {
- if (init >= init_in[i]) {
- /* Forcibly enable voltage channel */
- reg = pc87360_read_value(data, LD_IN, i,
-@@ -1088,14 +1083,14 @@
-
- /* We can't blindly trust the Super-I/O space configuration bit,
- most BIOS won't set it properly */
-- for (i=11; i<data->innr; i++) {
-+ for (i = 11; i < data->innr; i++) {
- reg = pc87360_read_value(data, LD_IN, i,
- PC87365_REG_TEMP_STATUS);
- use_thermistors = use_thermistors || (reg & 0x01);
- }
-
- i = use_thermistors ? 2 : 0;
-- for (; i<data->tempnr; i++) {
-+ for (; i < data->tempnr; i++) {
- if (init >= init_temp[i]) {
- /* Forcibly enable temperature channel */
- reg = pc87360_read_value(data, LD_TEMP, i,
-@@ -1111,7 +1106,7 @@
- }
-
- if (use_thermistors) {
-- for (i=11; i<data->innr; i++) {
-+ for (i = 11; i < data->innr; i++) {
- if (init >= init_in[i]) {
- /* The pin may already be used by thermal
- diodes */
-@@ -1221,7 +1216,7 @@
- struct pc87360_data *data = i2c_get_clientdata(client);
- u8 i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
- dev_dbg(&client->dev, "Data update\n");
-@@ -1321,7 +1316,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/f71805f.c 2006-03-22 17:06:11.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/f71805f.c 2006-03-22 17:06:16.000000000 +0100
-@@ -30,6 +30,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-sysfs.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- static struct platform_device *pdev;
-@@ -98,10 +99,6 @@
- #define ADDR_REG_OFFSET 0
- #define DATA_REG_OFFSET 1
-
--static struct resource f71805f_resource __initdata = {
-- .flags = IORESOURCE_IO,
--};
--
- /*
- * Registers
- */
-@@ -131,10 +128,10 @@
- struct f71805f_data {
- unsigned short addr;
- const char *name;
-- struct semaphore lock;
-+ struct mutex lock;
- struct class_device *class_dev;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
- unsigned long last_limits; /* In jiffies */
-@@ -150,7 +147,7 @@
- u8 temp_high[3];
- u8 temp_hyst[3];
- u8 temp_mode;
-- u8 alarms[3];
-+ unsigned long alarms;
- };
-
- static inline long in_from_reg(u8 reg)
-@@ -224,20 +221,20 @@
- {
- u8 val;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb(reg, data->addr + ADDR_REG_OFFSET);
- val = inb(data->addr + DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
-
- return val;
- }
-
- static void f71805f_write8(struct f71805f_data *data, u8 reg, u8 val)
- {
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb(reg, data->addr + ADDR_REG_OFFSET);
- outb(val, data->addr + DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- }
-
- /* It is important to read the MSB first, because doing so latches the
-@@ -246,24 +243,24 @@
- {
- u16 val;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb(reg, data->addr + ADDR_REG_OFFSET);
- val = inb(data->addr + DATA_REG_OFFSET) << 8;
- outb(++reg, data->addr + ADDR_REG_OFFSET);
- val |= inb(data->addr + DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
-
- return val;
- }
-
- static void f71805f_write16(struct f71805f_data *data, u8 reg, u16 val)
- {
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb(reg, data->addr + ADDR_REG_OFFSET);
- outb(val >> 8, data->addr + DATA_REG_OFFSET);
- outb(++reg, data->addr + ADDR_REG_OFFSET);
- outb(val & 0xff, data->addr + DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- }
-
- static struct f71805f_data *f71805f_update_device(struct device *dev)
-@@ -271,7 +268,7 @@
- struct f71805f_data *data = dev_get_drvdata(dev);
- int nr;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- /* Limit registers cache is refreshed after 60 seconds */
- if (time_after(jiffies, data->last_updated + 60 * HZ)
-@@ -314,16 +311,15 @@
- data->temp[nr] = f71805f_read8(data,
- F71805F_REG_TEMP(nr));
- }
-- for (nr = 0; nr < 3; nr++) {
-- data->alarms[nr] = f71805f_read8(data,
-- F71805F_REG_STATUS(nr));
-- }
-+ data->alarms = f71805f_read8(data, F71805F_REG_STATUS(0))
-+ + (f71805f_read8(data, F71805F_REG_STATUS(1)) << 8)
-+ + (f71805f_read8(data, F71805F_REG_STATUS(2)) << 16);
-
- data->last_updated = jiffies;
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
-@@ -362,10 +358,10 @@
- struct f71805f_data *data = dev_get_drvdata(dev);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_high[0] = in0_to_reg(val);
- f71805f_write8(data, F71805F_REG_IN_HIGH(0), data->in_high[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -376,18 +372,14 @@
- struct f71805f_data *data = dev_get_drvdata(dev);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_low[0] = in0_to_reg(val);
- f71805f_write8(data, F71805F_REG_IN_LOW(0), data->in_low[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--static DEVICE_ATTR(in0_input, S_IRUGO, show_in0, NULL);
--static DEVICE_ATTR(in0_max, S_IRUGO| S_IWUSR, show_in0_max, set_in0_max);
--static DEVICE_ATTR(in0_min, S_IRUGO| S_IWUSR, show_in0_min, set_in0_min);
--
- static ssize_t show_in(struct device *dev, struct device_attribute *devattr,
- char *buf)
- {
-@@ -426,10 +418,10 @@
- int nr = attr->index;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_high[nr] = in_to_reg(val);
- f71805f_write8(data, F71805F_REG_IN_HIGH(nr), data->in_high[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -442,31 +434,14 @@
- int nr = attr->index;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_low[nr] = in_to_reg(val);
- f71805f_write8(data, F71805F_REG_IN_LOW(nr), data->in_low[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--#define sysfs_in(offset) \
--static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
-- show_in, NULL, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
-- show_in_max, set_in_max, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
-- show_in_min, set_in_min, offset)
--
--sysfs_in(1);
--sysfs_in(2);
--sysfs_in(3);
--sysfs_in(4);
--sysfs_in(5);
--sysfs_in(6);
--sysfs_in(7);
--sysfs_in(8);
--
- static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
- char *buf)
- {
-@@ -495,24 +470,14 @@
- int nr = attr->index;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_low[nr] = fan_to_reg(val);
- f71805f_write16(data, F71805F_REG_FAN_LOW(nr), data->fan_low[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--#define sysfs_fan(offset) \
--static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
-- show_fan, NULL, offset - 1); \
--static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
-- show_fan_min, set_fan_min, offset - 1)
--
--sysfs_fan(1);
--sysfs_fan(2);
--sysfs_fan(3);
--
- static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
- char *buf)
- {
-@@ -562,10 +527,10 @@
- int nr = attr->index;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_high[nr] = temp_to_reg(val);
- f71805f_write8(data, F71805F_REG_TEMP_HIGH(nr), data->temp_high[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -578,35 +543,20 @@
- int nr = attr->index;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_hyst[nr] = temp_to_reg(val);
- f71805f_write8(data, F71805F_REG_TEMP_HYST(nr), data->temp_hyst[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--#define sysfs_temp(offset) \
--static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
-- show_temp, NULL, offset - 1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
-- show_temp_max, set_temp_max, offset - 1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_max_hyst, S_IRUGO | S_IWUSR, \
-- show_temp_hyst, set_temp_hyst, offset - 1); \
--static SENSOR_DEVICE_ATTR(temp##offset##_type, S_IRUGO, \
-- show_temp_type, NULL, offset - 1)
--
--sysfs_temp(1);
--sysfs_temp(2);
--sysfs_temp(3);
--
- static ssize_t show_alarms_in(struct device *dev, struct device_attribute
- *devattr, char *buf)
- {
- struct f71805f_data *data = f71805f_update_device(dev);
-
-- return sprintf(buf, "%d\n", data->alarms[0] |
-- ((data->alarms[1] & 0x01) << 8));
-+ return sprintf(buf, "%lu\n", data->alarms & 0x1ff);
- }
-
- static ssize_t show_alarms_fan(struct device *dev, struct device_attribute
-@@ -614,7 +564,7 @@
- {
- struct f71805f_data *data = f71805f_update_device(dev);
-
-- return sprintf(buf, "%d\n", data->alarms[2] & 0x07);
-+ return sprintf(buf, "%lu\n", (data->alarms >> 16) & 0x07);
- }
-
- static ssize_t show_alarms_temp(struct device *dev, struct device_attribute
-@@ -622,12 +572,18 @@
- {
- struct f71805f_data *data = f71805f_update_device(dev);
-
-- return sprintf(buf, "%d\n", (data->alarms[1] >> 3) & 0x07);
-+ return sprintf(buf, "%lu\n", (data->alarms >> 11) & 0x07);
- }
-
--static DEVICE_ATTR(alarms_in, S_IRUGO, show_alarms_in, NULL);
--static DEVICE_ATTR(alarms_fan, S_IRUGO, show_alarms_fan, NULL);
--static DEVICE_ATTR(alarms_temp, S_IRUGO, show_alarms_temp, NULL);
-+static ssize_t show_alarm(struct device *dev, struct device_attribute
-+ *devattr, char *buf)
-+{
-+ struct f71805f_data *data = f71805f_update_device(dev);
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ int nr = attr->index;
-+
-+ return sprintf(buf, "%lu\n", (data->alarms >> nr) & 1);
-+}
-
- static ssize_t show_name(struct device *dev, struct device_attribute
- *devattr, char *buf)
-@@ -637,7 +593,104 @@
- return sprintf(buf, "%s\n", data->name);
- }
-
--static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
-+static struct device_attribute f71805f_dev_attr[] = {
-+ __ATTR(in0_input, S_IRUGO, show_in0, NULL),
-+ __ATTR(in0_max, S_IRUGO| S_IWUSR, show_in0_max, set_in0_max),
-+ __ATTR(in0_min, S_IRUGO| S_IWUSR, show_in0_min, set_in0_min),
-+ __ATTR(alarms_in, S_IRUGO, show_alarms_in, NULL),
-+ __ATTR(alarms_fan, S_IRUGO, show_alarms_fan, NULL),
-+ __ATTR(alarms_temp, S_IRUGO, show_alarms_temp, NULL),
-+ __ATTR(name, S_IRUGO, show_name, NULL),
-+};
-+
-+static struct sensor_device_attribute f71805f_sensor_attr[] = {
-+ SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
-+ SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
-+ SENSOR_ATTR(in1_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 1),
-+ SENSOR_ATTR(in1_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 1),
-+ SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
-+ SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
-+ SENSOR_ATTR(in2_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 2),
-+ SENSOR_ATTR(in2_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 2),
-+ SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
-+ SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
-+ SENSOR_ATTR(in3_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 3),
-+ SENSOR_ATTR(in3_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 3),
-+ SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
-+ SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
-+ SENSOR_ATTR(in4_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 4),
-+ SENSOR_ATTR(in4_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 4),
-+ SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 4),
-+ SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
-+ SENSOR_ATTR(in5_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 5),
-+ SENSOR_ATTR(in5_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 5),
-+ SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 5),
-+ SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
-+ SENSOR_ATTR(in6_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 6),
-+ SENSOR_ATTR(in6_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 6),
-+ SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 6),
-+ SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
-+ SENSOR_ATTR(in7_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 7),
-+ SENSOR_ATTR(in7_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 7),
-+ SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 7),
-+ SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
-+ SENSOR_ATTR(in8_max, S_IRUGO | S_IWUSR,
-+ show_in_max, set_in_max, 8),
-+ SENSOR_ATTR(in8_min, S_IRUGO | S_IWUSR,
-+ show_in_min, set_in_min, 8),
-+ SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 8),
-+
-+ SENSOR_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0),
-+ SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 0),
-+ SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR,
-+ show_temp_hyst, set_temp_hyst, 0),
-+ SENSOR_ATTR(temp1_type, S_IRUGO, show_temp_type, NULL, 0),
-+ SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 11),
-+ SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1),
-+ SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 1),
-+ SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR,
-+ show_temp_hyst, set_temp_hyst, 1),
-+ SENSOR_ATTR(temp2_type, S_IRUGO, show_temp_type, NULL, 1),
-+ SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 12),
-+ SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2),
-+ SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR,
-+ show_temp_max, set_temp_max, 2),
-+ SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR,
-+ show_temp_hyst, set_temp_hyst, 2),
-+ SENSOR_ATTR(temp3_type, S_IRUGO, show_temp_type, NULL, 2),
-+ SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
-+};
-+
-+static struct sensor_device_attribute f71805f_fan_attr[] = {
-+ SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
-+ SENSOR_ATTR(fan1_min, S_IRUGO | S_IWUSR,
-+ show_fan_min, set_fan_min, 0),
-+ SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 16),
-+ SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
-+ SENSOR_ATTR(fan2_min, S_IRUGO | S_IWUSR,
-+ show_fan_min, set_fan_min, 1),
-+ SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 17),
-+ SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
-+ SENSOR_ATTR(fan3_min, S_IRUGO | S_IWUSR,
-+ show_fan_min, set_fan_min, 2),
-+ SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 18),
-+};
-
- /*
- * Device registration and initialization
-@@ -668,7 +721,7 @@
- {
- struct f71805f_data *data;
- struct resource *res;
-- int err;
-+ int i, err;
-
- if (!(data = kzalloc(sizeof(struct f71805f_data), GFP_KERNEL))) {
- err = -ENOMEM;
-@@ -678,9 +731,9 @@
-
- res = platform_get_resource(pdev, IORESOURCE_IO, 0);
- data->addr = res->start;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- data->name = "f71805f";
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- platform_set_drvdata(pdev, data);
-
-@@ -695,76 +748,31 @@
- f71805f_init_device(data);
-
- /* Register sysfs interface files */
-- device_create_file(&pdev->dev, &dev_attr_in0_input);
-- device_create_file(&pdev->dev, &dev_attr_in0_max);
-- device_create_file(&pdev->dev, &dev_attr_in0_min);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in1_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in2_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in3_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in4_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in5_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in6_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in7_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in8_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in1_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in2_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in3_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in4_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in5_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in6_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in7_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in8_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in1_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in2_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in3_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in4_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in5_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in6_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in7_min.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_in8_min.dev_attr);
-- if (data->fan_enabled & (1 << 0)) {
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan1_input.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan1_min.dev_attr);
-- }
-- if (data->fan_enabled & (1 << 1)) {
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan2_input.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan2_min.dev_attr);
-- }
-- if (data->fan_enabled & (1 << 2)) {
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan3_input.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_fan3_min.dev_attr);
-- }
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp1_input.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp2_input.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp3_input.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp2_max.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp3_max.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp1_max_hyst.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp2_max_hyst.dev_attr);
-- device_create_file(&pdev->dev,
-- &sensor_dev_attr_temp3_max_hyst.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp1_type.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp2_type.dev_attr);
-- device_create_file(&pdev->dev, &sensor_dev_attr_temp3_type.dev_attr);
-- device_create_file(&pdev->dev, &dev_attr_alarms_in);
-- device_create_file(&pdev->dev, &dev_attr_alarms_fan);
-- device_create_file(&pdev->dev, &dev_attr_alarms_temp);
-- device_create_file(&pdev->dev, &dev_attr_name);
-+ for (i = 0; i < ARRAY_SIZE(f71805f_dev_attr); i++) {
-+ err = device_create_file(&pdev->dev, &f71805f_dev_attr[i]);
-+ if (err)
-+ goto exit_class;
-+ }
-+ for (i = 0; i < ARRAY_SIZE(f71805f_sensor_attr); i++) {
-+ err = device_create_file(&pdev->dev,
-+ &f71805f_sensor_attr[i].dev_attr);
-+ if (err)
-+ goto exit_class;
-+ }
-+ for (i = 0; i < ARRAY_SIZE(f71805f_fan_attr); i++) {
-+ if (!(data->fan_enabled & (1 << (i / 3))))
-+ continue;
-+ err = device_create_file(&pdev->dev,
-+ &f71805f_fan_attr[i].dev_attr);
-+ if (err)
-+ goto exit_class;
-+ }
-
- return 0;
-
-+exit_class:
-+ dev_err(&pdev->dev, "Sysfs interface creation failed\n");
-+ hwmon_device_unregister(data->class_dev);
- exit_free:
- kfree(data);
- exit:
-@@ -793,6 +801,11 @@
-
- static int __init f71805f_device_add(unsigned short address)
- {
-+ struct resource res = {
-+ .start = address,
-+ .end = address + REGION_LENGTH - 1,
-+ .flags = IORESOURCE_IO,
-+ };
- int err;
-
- pdev = platform_device_alloc(DRVNAME, address);
-@@ -802,10 +815,8 @@
- goto exit;
- }
-
-- f71805f_resource.start = address;
-- f71805f_resource.end = address + REGION_LENGTH - 1;
-- f71805f_resource.name = pdev->name;
-- err = platform_device_add_resources(pdev, &f71805f_resource, 1);
-+ res.name = pdev->name;
-+ err = platform_device_add_resources(pdev, &res, 1);
- if (err) {
- printk(KERN_ERR DRVNAME ": Device resource addition failed "
- "(%d)\n", err);
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ali1535.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ali1535.c 2006-03-22 17:06:16.000000000 +0100
-@@ -63,7 +63,6 @@
- #include <linux/i2c.h>
- #include <linux/init.h>
- #include <asm/io.h>
--#include <asm/semaphore.h>
-
-
- /* ALI1535 SMBus address offsets */
-@@ -136,7 +135,6 @@
-
- static struct pci_driver ali1535_driver;
- static unsigned short ali1535_smba;
--static DECLARE_MUTEX(i2c_ali1535_sem);
-
- /* Detect whether a ALI1535 can be found, and initialize it, where necessary.
- Note the differences between kernels with the old PCI BIOS interface and
-@@ -345,7 +343,6 @@
- int timeout;
- s32 result = 0;
-
-- down(&i2c_ali1535_sem);
- /* make sure SMBus is idle */
- temp = inb_p(SMBHSTSTS);
- for (timeout = 0;
-@@ -460,7 +457,6 @@
- break;
- }
- EXIT:
-- up(&i2c_ali1535_sem);
- return result;
- }
-
-@@ -479,7 +475,7 @@
-
- static struct i2c_adapter ali1535_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/chips/ds1374.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/ds1374.c 2006-03-22 17:06:14.000000000 +0100
-@@ -26,6 +26,7 @@
- #include <linux/i2c.h>
- #include <linux/rtc.h>
- #include <linux/bcd.h>
-+#include <linux/mutex.h>
-
- #define DS1374_REG_TOD0 0x00
- #define DS1374_REG_TOD1 0x01
-@@ -41,7 +42,7 @@
-
- #define DS1374_DRV_NAME "ds1374"
-
--static DECLARE_MUTEX(ds1374_mutex);
-+static DEFINE_MUTEX(ds1374_mutex);
-
- static struct i2c_driver ds1374_driver;
- static struct i2c_client *save_client;
-@@ -114,7 +115,7 @@
- ulong t1, t2;
- int limit = 10; /* arbitrary retry limit */
-
-- down(&ds1374_mutex);
-+ mutex_lock(&ds1374_mutex);
-
- /*
- * Since the reads are being performed one byte at a time using
-@@ -127,7 +128,7 @@
- t2 = ds1374_read_rtc();
- } while (t1 != t2 && limit--);
-
-- up(&ds1374_mutex);
-+ mutex_unlock(&ds1374_mutex);
-
- if (t1 != t2) {
- dev_warn(&save_client->dev,
-@@ -145,7 +146,7 @@
-
- t1 = *(ulong *) arg;
-
-- down(&ds1374_mutex);
-+ mutex_lock(&ds1374_mutex);
-
- /*
- * Since the writes are being performed one byte at a time using
-@@ -158,7 +159,7 @@
- t2 = ds1374_read_rtc();
- } while (t1 != t2 && limit--);
-
-- up(&ds1374_mutex);
-+ mutex_unlock(&ds1374_mutex);
-
- if (t1 != t2)
- dev_warn(&save_client->dev,
---- linux-2.6.16.orig/drivers/i2c/chips/m41t00.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/m41t00.c 2006-03-22 17:06:14.000000000 +0100
-@@ -24,13 +24,14 @@
- #include <linux/i2c.h>
- #include <linux/rtc.h>
- #include <linux/bcd.h>
-+#include <linux/mutex.h>
-
- #include <asm/time.h>
- #include <asm/rtc.h>
-
- #define M41T00_DRV_NAME "m41t00"
-
--static DECLARE_MUTEX(m41t00_mutex);
-+static DEFINE_MUTEX(m41t00_mutex);
-
- static struct i2c_driver m41t00_driver;
- static struct i2c_client *save_client;
-@@ -54,7 +55,7 @@
- sec = min = hour = day = mon = year = 0;
- sec1 = min1 = hour1 = day1 = mon1 = year1 = 0;
-
-- down(&m41t00_mutex);
-+ mutex_lock(&m41t00_mutex);
- do {
- if (((sec = i2c_smbus_read_byte_data(save_client, 0)) >= 0)
- && ((min = i2c_smbus_read_byte_data(save_client, 1))
-@@ -80,7 +81,7 @@
- mon1 = mon;
- year1 = year;
- } while (--limit > 0);
-- up(&m41t00_mutex);
-+ mutex_unlock(&m41t00_mutex);
-
- if (limit == 0) {
- dev_warn(&save_client->dev,
-@@ -125,7 +126,7 @@
- BIN_TO_BCD(tm.tm_mday);
- BIN_TO_BCD(tm.tm_year);
-
-- down(&m41t00_mutex);
-+ mutex_lock(&m41t00_mutex);
- if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0)
- || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f)
- < 0)
-@@ -140,7 +141,7 @@
-
- dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n");
-
-- up(&m41t00_mutex);
-+ mutex_unlock(&m41t00_mutex);
- return;
- }
-
---- linux-2.6.16.orig/drivers/i2c/i2c-core.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/i2c-core.c 2006-03-22 17:06:21.000000000 +0100
-@@ -31,14 +31,17 @@
- #include <linux/idr.h>
- #include <linux/seq_file.h>
- #include <linux/platform_device.h>
-+#include <linux/mutex.h>
- #include <asm/uaccess.h>
-
-
- static LIST_HEAD(adapters);
- static LIST_HEAD(drivers);
--static DECLARE_MUTEX(core_lists);
-+static DEFINE_MUTEX(core_lists);
- static DEFINE_IDR(i2c_adapter_idr);
-
-+static void i2c_notify(struct i2c_adapter *adap, struct i2c_driver *driver);
-+
- /* match always succeeds, as we want the probe() to tell if we really accept this match */
- static int i2c_device_match(struct device *dev, struct device_driver *drv)
- {
-@@ -153,7 +156,7 @@
- struct list_head *item;
- struct i2c_driver *driver;
-
-- down(&core_lists);
-+ mutex_lock(&core_lists);
-
- if (idr_pre_get(&i2c_adapter_idr, GFP_KERNEL) == 0) {
- res = -ENOMEM;
-@@ -168,8 +171,8 @@
- }
-
- adap->nr = id & MAX_ID_MASK;
-- init_MUTEX(&adap->bus_lock);
-- init_MUTEX(&adap->clist_lock);
-+ mutex_init(&adap->bus_lock);
-+ mutex_init(&adap->clist_lock);
- list_add_tail(&adap->list,&adapters);
- INIT_LIST_HEAD(&adap->clients);
-
-@@ -197,13 +200,11 @@
- /* inform drivers of new adapters */
- list_for_each(item,&drivers) {
- driver = list_entry(item, struct i2c_driver, list);
-- if (driver->attach_adapter)
-- /* We ignore the return code; if it fails, too bad */
-- driver->attach_adapter(adap);
-+ i2c_notify(adap, driver);
- }
-
- out_unlock:
-- up(&core_lists);
-+ mutex_unlock(&core_lists);
- return res;
- }
-
-@@ -216,7 +217,7 @@
- struct i2c_client *client;
- int res = 0;
-
-- down(&core_lists);
-+ mutex_lock(&core_lists);
-
- /* First make sure that this adapter was ever added */
- list_for_each_entry(adap_from_list, &adapters, list) {
-@@ -272,7 +273,7 @@
- dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
-
- out_unlock:
-- up(&core_lists);
-+ mutex_unlock(&core_lists);
- return res;
- }
-
-@@ -287,9 +288,7 @@
- {
- struct list_head *item;
- struct i2c_adapter *adapter;
-- int res = 0;
--
-- down(&core_lists);
-+ int res;
-
- /* add the driver to the list of i2c drivers in the driver core */
- driver->driver.owner = owner;
-@@ -297,22 +296,21 @@
-
- res = driver_register(&driver->driver);
- if (res)
-- goto out_unlock;
-+ return res;
-
-+ mutex_lock(&core_lists);
-+
- list_add_tail(&driver->list,&drivers);
- pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
-
- /* now look for instances of driver on our adapters */
-- if (driver->attach_adapter) {
-- list_for_each(item,&adapters) {
-- adapter = list_entry(item, struct i2c_adapter, list);
-- driver->attach_adapter(adapter);
-- }
-+ list_for_each(item, &adapters) {
-+ adapter = list_entry(item, struct i2c_adapter, list);
-+ i2c_notify(adapter, driver);
- }
-
-- out_unlock:
-- up(&core_lists);
-- return res;
-+ mutex_unlock(&core_lists);
-+ return 0;
- }
- EXPORT_SYMBOL(i2c_register_driver);
-
-@@ -324,7 +322,7 @@
-
- int res = 0;
-
-- down(&core_lists);
-+ mutex_lock(&core_lists);
-
- /* Have a look at each adapter, if clients of this driver are still
- * attached. If so, detach them to be able to kill the driver
-@@ -363,7 +361,7 @@
- pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
-
- out_unlock:
-- up(&core_lists);
-+ mutex_unlock(&core_lists);
- return 0;
- }
-
-@@ -384,9 +382,9 @@
- {
- int rval;
-
-- down(&adapter->clist_lock);
-+ mutex_lock(&adapter->clist_lock);
- rval = __i2c_check_addr(adapter, addr);
-- up(&adapter->clist_lock);
-+ mutex_unlock(&adapter->clist_lock);
-
- return rval;
- }
-@@ -395,13 +393,13 @@
- {
- struct i2c_adapter *adapter = client->adapter;
-
-- down(&adapter->clist_lock);
-+ mutex_lock(&adapter->clist_lock);
- if (__i2c_check_addr(client->adapter, client->addr)) {
-- up(&adapter->clist_lock);
-+ mutex_unlock(&adapter->clist_lock);
- return -EBUSY;
- }
- list_add_tail(&client->list,&adapter->clients);
-- up(&adapter->clist_lock);
-+ mutex_unlock(&adapter->clist_lock);
-
- if (adapter->client_register) {
- if (adapter->client_register(client)) {
-@@ -450,12 +448,12 @@
- }
- }
-
-- down(&adapter->clist_lock);
-+ mutex_lock(&adapter->clist_lock);
- list_del(&client->list);
- init_completion(&client->released);
- device_remove_file(&client->dev, &dev_attr_client_name);
- device_unregister(&client->dev);
-- up(&adapter->clist_lock);
-+ mutex_unlock(&adapter->clist_lock);
- wait_for_completion(&client->released);
-
- out:
-@@ -513,19 +511,19 @@
- struct list_head *item;
- struct i2c_client *client;
-
-- down(&adap->clist_lock);
-+ mutex_lock(&adap->clist_lock);
- list_for_each(item,&adap->clients) {
- client = list_entry(item, struct i2c_client, list);
- if (!try_module_get(client->driver->driver.owner))
- continue;
- if (NULL != client->driver->command) {
-- up(&adap->clist_lock);
-+ mutex_unlock(&adap->clist_lock);
- client->driver->command(client,cmd,arg);
-- down(&adap->clist_lock);
-+ mutex_lock(&adap->clist_lock);
- }
- module_put(client->driver->driver.owner);
- }
-- up(&adap->clist_lock);
-+ mutex_unlock(&adap->clist_lock);
- }
-
- static int __init i2c_init(void)
-@@ -569,9 +567,9 @@
- }
- #endif
-
-- down(&adap->bus_lock);
-+ mutex_lock(&adap->bus_lock);
- ret = adap->algo->master_xfer(adap,msgs,num);
-- up(&adap->bus_lock);
-+ mutex_unlock(&adap->bus_lock);
-
- return ret;
- } else {
-@@ -775,16 +773,53 @@
- return 0;
- }
-
-+/* For explicitely attaching a driver to a given device */
-+int i2c_probe_device(struct i2c_adapter *adapter, int driver_id,
-+ int addr, int kind)
-+{
-+ struct list_head *item;
-+ struct i2c_driver *driver = NULL;
-+
-+ /* There's no way to probe addresses on this adapter... */
-+ if (kind < 0 && !i2c_check_functionality(adapter,
-+ I2C_FUNC_SMBUS_QUICK))
-+ return -EINVAL;
-+
-+ mutex_lock(&core_lists);
-+ list_for_each(item, &drivers) {
-+ driver = list_entry(item, struct i2c_driver, list);
-+ if (driver->id == driver_id)
-+ break;
-+ }
-+ mutex_unlock(&core_lists);
-+ if (!item)
-+ return -ENOENT;
-+
-+ return i2c_probe_address(adapter, addr, kind, driver->detect_client);
-+}
-+
-+static void i2c_notify(struct i2c_adapter *adap, struct i2c_driver *driver)
-+{
-+ if (driver->attach_adapter)
-+ driver->attach_adapter(adap);
-+
-+ /* Probe devices if the driver provided the necessary information
-+ (detect_client and address_data) */
-+ if (driver->detect_client && driver->address_data &&
-+ (driver->class & adap->class))
-+ i2c_probe(adap, driver->address_data, driver->detect_client);
-+}
-+
- struct i2c_adapter* i2c_get_adapter(int id)
- {
- struct i2c_adapter *adapter;
-
-- down(&core_lists);
-+ mutex_lock(&core_lists);
- adapter = (struct i2c_adapter *)idr_find(&i2c_adapter_idr, id);
- if (adapter && !try_module_get(adapter->owner))
- adapter = NULL;
-
-- up(&core_lists);
-+ mutex_unlock(&core_lists);
- return adapter;
- }
-
-@@ -919,12 +954,11 @@
- u8 length, u8 *values)
- {
- union i2c_smbus_data data;
-- int i;
-+
- if (length > I2C_SMBUS_BLOCK_MAX)
- length = I2C_SMBUS_BLOCK_MAX;
-- for (i = 1; i <= length; i++)
-- data.block[i] = values[i-1];
- data.block[0] = length;
-+ memcpy(&data.block[1], values, length);
- return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
- I2C_SMBUS_WRITE,command,
- I2C_SMBUS_BLOCK_DATA,&data);
-@@ -934,16 +968,14 @@
- s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, u8 *values)
- {
- union i2c_smbus_data data;
-- int i;
-+
- if (i2c_smbus_xfer(client->adapter,client->addr,client->flags,
- I2C_SMBUS_READ,command,
- I2C_SMBUS_I2C_BLOCK_DATA,&data))
- return -1;
-- else {
-- for (i = 1; i <= data.block[0]; i++)
-- values[i-1] = data.block[i];
-- return data.block[0];
-- }
-+
-+ memcpy(values, &data.block[1], data.block[0]);
-+ return data.block[0];
- }
-
- s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command,
-@@ -1118,10 +1150,10 @@
- flags &= I2C_M_TEN | I2C_CLIENT_PEC;
-
- if (adapter->algo->smbus_xfer) {
-- down(&adapter->bus_lock);
-+ mutex_lock(&adapter->bus_lock);
- res = adapter->algo->smbus_xfer(adapter,addr,flags,read_write,
- command,size,data);
-- up(&adapter->bus_lock);
-+ mutex_unlock(&adapter->bus_lock);
- } else
- res = i2c_smbus_xfer_emulated(adapter,addr,flags,read_write,
- command,size,data);
-@@ -1153,6 +1185,7 @@
- EXPORT_SYMBOL(i2c_get_adapter);
- EXPORT_SYMBOL(i2c_put_adapter);
- EXPORT_SYMBOL(i2c_probe);
-+EXPORT_SYMBOL(i2c_probe_device);
-
- EXPORT_SYMBOL(i2c_smbus_xfer);
- EXPORT_SYMBOL(i2c_smbus_write_quick);
---- linux-2.6.16.orig/drivers/i2c/busses/scx200_acb.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/scx200_acb.c 2006-03-22 17:06:16.000000000 +0100
-@@ -1,27 +1,26 @@
--/* linux/drivers/i2c/scx200_acb.c
--
-+/*
- Copyright (c) 2001,2002 Christer Weinigel <wingel@nano-system.com>
-
- National Semiconductor SCx200 ACCESS.bus support
--
-+ Also supports the AMD CS5535 and AMD CS5536
-+
- Based on i2c-keywest.c which is:
- Copyright (c) 2001 Benjamin Herrenschmidt <benh@kernel.crashing.org>
- Copyright (c) 2000 Philip Edelbrock <phil@stimpy.netroedge.com>
--
-+
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
--
-+
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
--
-+
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
--
- */
-
- #include <linux/module.h>
-@@ -32,7 +31,9 @@
- #include <linux/smp_lock.h>
- #include <linux/pci.h>
- #include <linux/delay.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-+#include <asm/msr.h>
-
- #include <linux/scx200.h>
-
-@@ -47,16 +48,7 @@
- module_param_array(base, int, NULL, 0);
- MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers");
-
--#ifdef DEBUG
--#define DBG(x...) printk(KERN_DEBUG NAME ": " x)
--#else
--#define DBG(x...)
--#endif
--
--/* The hardware supports interrupt driven mode too, but I haven't
-- implemented that. */
--#define POLLED_MODE 1
--#define POLL_TIMEOUT (HZ)
-+#define POLL_TIMEOUT (HZ/5)
-
- enum scx200_acb_state {
- state_idle,
-@@ -79,12 +71,11 @@
- };
-
- /* Physical interface */
--struct scx200_acb_iface
--{
-+struct scx200_acb_iface {
- struct scx200_acb_iface *next;
- struct i2c_adapter adapter;
- unsigned base;
-- struct semaphore sem;
-+ struct mutex mutex;
-
- /* State machine data */
- enum scx200_acb_state state;
-@@ -100,7 +91,7 @@
- #define ACBSDA (iface->base + 0)
- #define ACBST (iface->base + 1)
- #define ACBST_SDAST 0x40 /* SDA Status */
--#define ACBST_BER 0x20
-+#define ACBST_BER 0x20
- #define ACBST_NEGACK 0x10 /* Negative Acknowledge */
- #define ACBST_STASTR 0x08 /* Stall After Start */
- #define ACBST_MASTER 0x02
-@@ -109,9 +100,9 @@
- #define ACBCTL1 (iface->base + 3)
- #define ACBCTL1_STASTRE 0x80
- #define ACBCTL1_NMINTE 0x40
--#define ACBCTL1_ACK 0x10
--#define ACBCTL1_STOP 0x02
--#define ACBCTL1_START 0x01
-+#define ACBCTL1_ACK 0x10
-+#define ACBCTL1_STOP 0x02
-+#define ACBCTL1_START 0x01
- #define ACBADDR (iface->base + 4)
- #define ACBCTL2 (iface->base + 5)
- #define ACBCTL2_ENABLE 0x01
-@@ -122,8 +113,8 @@
- {
- const char *errmsg;
-
-- DBG("state %s, status = 0x%02x\n",
-- scx200_acb_state_name[iface->state], status);
-+ dev_dbg(&iface->adapter.dev, "state %s, status = 0x%02x\n",
-+ scx200_acb_state_name[iface->state], status);
-
- if (status & ACBST_BER) {
- errmsg = "bus error";
-@@ -133,8 +124,17 @@
- errmsg = "not master";
- goto error;
- }
-- if (status & ACBST_NEGACK)
-- goto negack;
-+ if (status & ACBST_NEGACK) {
-+ dev_dbg(&iface->adapter.dev, "negative ack in state %s\n",
-+ scx200_acb_state_name[iface->state]);
-+
-+ iface->state = state_idle;
-+ iface->result = -ENXIO;
-+
-+ outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1);
-+ outb(ACBST_STASTR | ACBST_NEGACK, ACBST);
-+ return;
-+ }
-
- switch (iface->state) {
- case state_idle:
-@@ -160,10 +160,10 @@
- case state_repeat_start:
- outb(inb(ACBCTL1) | ACBCTL1_START, ACBCTL1);
- /* fallthrough */
--
-+
- case state_quick:
- if (iface->address_byte & 1) {
-- if (iface->len == 1)
-+ if (iface->len == 1)
- outb(inb(ACBCTL1) | ACBCTL1_ACK, ACBCTL1);
- else
- outb(inb(ACBCTL1) & ~ACBCTL1_ACK, ACBCTL1);
-@@ -202,26 +202,15 @@
- outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1);
- break;
- }
--
-+
- outb(*iface->ptr++, ACBSDA);
- --iface->len;
--
-+
- break;
- }
-
- return;
-
-- negack:
-- DBG("negative acknowledge in state %s\n",
-- scx200_acb_state_name[iface->state]);
--
-- iface->state = state_idle;
-- iface->result = -ENXIO;
--
-- outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1);
-- outb(ACBST_STASTR | ACBST_NEGACK, ACBST);
-- return;
--
- error:
- dev_err(&iface->adapter.dev, "%s in state %s\n", errmsg,
- scx200_acb_state_name[iface->state]);
-@@ -231,20 +220,9 @@
- iface->needs_reset = 1;
- }
-
--static void scx200_acb_timeout(struct scx200_acb_iface *iface)
--{
-- dev_err(&iface->adapter.dev, "timeout in state %s\n",
-- scx200_acb_state_name[iface->state]);
--
-- iface->state = state_idle;
-- iface->result = -EIO;
-- iface->needs_reset = 1;
--}
--
--#ifdef POLLED_MODE
- static void scx200_acb_poll(struct scx200_acb_iface *iface)
- {
-- u8 status = 0;
-+ u8 status;
- unsigned long timeout;
-
- timeout = jiffies + POLL_TIMEOUT;
-@@ -254,17 +232,21 @@
- scx200_acb_machine(iface, status);
- return;
- }
-- msleep(10);
-+ yield();
- }
-
-- scx200_acb_timeout(iface);
-+ dev_err(&iface->adapter.dev, "timeout in state %s\n",
-+ scx200_acb_state_name[iface->state]);
-+
-+ iface->state = state_idle;
-+ iface->result = -EIO;
-+ iface->needs_reset = 1;
- }
--#endif /* POLLED_MODE */
-
- static void scx200_acb_reset(struct scx200_acb_iface *iface)
- {
- /* Disable the ACCESS.bus device and Configure the SCL
-- frequency: 16 clock cycles */
-+ frequency: 16 clock cycles */
- outb(0x70, ACBCTL2);
- /* Polling mode */
- outb(0, ACBCTL1);
-@@ -283,9 +265,9 @@
- }
-
- static s32 scx200_acb_smbus_xfer(struct i2c_adapter *adapter,
-- u16 address, unsigned short flags,
-- char rw, u8 command, int size,
-- union i2c_smbus_data *data)
-+ u16 address, unsigned short flags,
-+ char rw, u8 command, int size,
-+ union i2c_smbus_data *data)
- {
- struct scx200_acb_iface *iface = i2c_get_adapdata(adapter);
- int len;
-@@ -295,53 +277,47 @@
-
- switch (size) {
- case I2C_SMBUS_QUICK:
-- len = 0;
-- buffer = NULL;
-- break;
-+ len = 0;
-+ buffer = NULL;
-+ break;
-+
- case I2C_SMBUS_BYTE:
-- if (rw == I2C_SMBUS_READ) {
-- len = 1;
-- buffer = &data->byte;
-- } else {
-- len = 1;
-- buffer = &command;
-- }
-- break;
-+ len = 1;
-+ buffer = rw ? &data->byte : &command;
-+ break;
-+
- case I2C_SMBUS_BYTE_DATA:
-- len = 1;
-- buffer = &data->byte;
-- break;
-+ len = 1;
-+ buffer = &data->byte;
-+ break;
-+
- case I2C_SMBUS_WORD_DATA:
- len = 2;
-- cur_word = cpu_to_le16(data->word);
-- buffer = (u8 *)&cur_word;
-+ cur_word = cpu_to_le16(data->word);
-+ buffer = (u8 *)&cur_word;
- break;
-+
- case I2C_SMBUS_BLOCK_DATA:
-- len = data->block[0];
-- buffer = &data->block[1];
-+ len = data->block[0];
-+ buffer = &data->block[1];
- break;
-+
- default:
-- return -EINVAL;
-+ return -EINVAL;
- }
-
-- DBG("size=%d, address=0x%x, command=0x%x, len=%d, read=%d\n",
-- size, address, command, len, rw == I2C_SMBUS_READ);
-+ dev_dbg(&adapter->dev,
-+ "size=%d, address=0x%x, command=0x%x, len=%d, read=%d\n",
-+ size, address, command, len, rw);
-
- if (!len && rw == I2C_SMBUS_READ) {
-- dev_warn(&adapter->dev, "zero length read\n");
-+ dev_dbg(&adapter->dev, "zero length read\n");
- return -EINVAL;
- }
-
-- if (len && !buffer) {
-- dev_warn(&adapter->dev, "nonzero length but no buffer\n");
-- return -EFAULT;
-- }
--
-- down(&iface->sem);
-+ mutex_lock(&iface->mutex);
-
-- iface->address_byte = address<<1;
-- if (rw == I2C_SMBUS_READ)
-- iface->address_byte |= 1;
-+ iface->address_byte = (address << 1) | rw;
- iface->command = command;
- iface->ptr = buffer;
- iface->len = len;
-@@ -355,25 +331,21 @@
- else
- iface->state = state_address;
-
--#ifdef POLLED_MODE
- while (iface->state != state_idle)
- scx200_acb_poll(iface);
--#else /* POLLED_MODE */
--#error Interrupt driven mode not implemented
--#endif /* POLLED_MODE */
-
- if (iface->needs_reset)
- scx200_acb_reset(iface);
-
- rc = iface->result;
-
-- up(&iface->sem);
-+ mutex_unlock(&iface->mutex);
-
- if (rc == 0 && size == I2C_SMBUS_WORD_DATA && rw == I2C_SMBUS_READ)
-- data->word = le16_to_cpu(cur_word);
-+ data->word = le16_to_cpu(cur_word);
-
- #ifdef DEBUG
-- DBG(": transfer done, result: %d", rc);
-+ dev_dbg(&adapter->dev, "transfer done, result: %d", rc);
- if (buffer) {
- int i;
- printk(" data:");
-@@ -400,17 +372,18 @@
- };
-
- static struct scx200_acb_iface *scx200_acb_list;
-+static DECLARE_MUTEX(scx200_acb_list_mutex);
-
- static int scx200_acb_probe(struct scx200_acb_iface *iface)
- {
- u8 val;
-
- /* Disable the ACCESS.bus device and Configure the SCL
-- frequency: 16 clock cycles */
-+ frequency: 16 clock cycles */
- outb(0x70, ACBCTL2);
-
- if (inb(ACBCTL2) != 0x70) {
-- DBG("ACBCTL2 readback failed\n");
-+ pr_debug(NAME ": ACBCTL2 readback failed\n");
- return -ENXIO;
- }
-
-@@ -418,7 +391,8 @@
-
- val = inb(ACBCTL1);
- if (val) {
-- DBG("disabled, but ACBCTL1=0x%02x\n", val);
-+ pr_debug(NAME ": disabled, but ACBCTL1=0x%02x\n",
-+ val);
- return -ENXIO;
- }
-
-@@ -428,18 +402,19 @@
-
- val = inb(ACBCTL1);
- if ((val & ACBCTL1_NMINTE) != ACBCTL1_NMINTE) {
-- DBG("enabled, but NMINTE won't be set, ACBCTL1=0x%02x\n", val);
-+ pr_debug(NAME ": enabled, but NMINTE won't be set, "
-+ "ACBCTL1=0x%02x\n", val);
- return -ENXIO;
- }
-
- return 0;
- }
-
--static int __init scx200_acb_create(int base, int index)
-+static int __init scx200_acb_create(const char *text, int base, int index)
- {
- struct scx200_acb_iface *iface;
- struct i2c_adapter *adapter;
-- int rc = 0;
-+ int rc;
- char description[64];
-
- iface = kzalloc(sizeof(*iface), GFP_KERNEL);
-@@ -451,50 +426,51 @@
-
- adapter = &iface->adapter;
- i2c_set_adapdata(adapter, iface);
-- snprintf(adapter->name, I2C_NAME_SIZE, "SCx200 ACB%d", index);
-+ snprintf(adapter->name, I2C_NAME_SIZE, "%s ACB%d", text, index);
- adapter->owner = THIS_MODULE;
- adapter->id = I2C_HW_SMBUS_SCX200;
- adapter->algo = &scx200_acb_algorithm;
-- adapter->class = I2C_CLASS_HWMON;
-+ adapter->class = I2C_CLASS_HWMON | I2C_CLASS_DATA;
-+
-+ mutex_init(&iface->mutex);
-
-- init_MUTEX(&iface->sem);
-+ snprintf(description, sizeof(description), "%s ACCESS.bus [%s]",
-+ text, adapter->name);
-
-- snprintf(description, sizeof(description), "NatSemi SCx200 ACCESS.bus [%s]", adapter->name);
- if (request_region(base, 8, description) == 0) {
-- dev_err(&adapter->dev, "can't allocate io 0x%x-0x%x\n",
-+ printk(KERN_ERR NAME ": can't allocate io 0x%x-0x%x\n",
- base, base + 8-1);
- rc = -EBUSY;
-- goto errout;
-+ goto errout_free;
- }
- iface->base = base;
-
- rc = scx200_acb_probe(iface);
- if (rc) {
-- dev_warn(&adapter->dev, "probe failed\n");
-- goto errout;
-+ printk(KERN_WARNING NAME ": probe failed\n");
-+ goto errout_release;
- }
-
- scx200_acb_reset(iface);
-
- if (i2c_add_adapter(adapter) < 0) {
-- dev_err(&adapter->dev, "failed to register\n");
-+ printk(KERN_ERR NAME ": failed to register\n");
- rc = -ENODEV;
-- goto errout;
-+ goto errout_release;
- }
-
-- lock_kernel();
-+ down(&scx200_acb_list_mutex);
- iface->next = scx200_acb_list;
- scx200_acb_list = iface;
-- unlock_kernel();
-+ up(&scx200_acb_list_mutex);
-
- return 0;
-
-+ errout_release:
-+ release_region(iface->base, 8);
-+ errout_free:
-+ kfree(iface);
- errout:
-- if (iface) {
-- if (iface->base)
-- release_region(iface->base, 8);
-- kfree(iface);
-- }
- return rc;
- }
-
-@@ -504,50 +480,69 @@
- { },
- };
-
-+static struct pci_device_id divil_pci[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_CS5535_ISA) },
-+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA) },
-+ { } /* NULL entry */
-+};
-+
-+#define MSR_LBAR_SMB 0x5140000B
-+
-+static int scx200_add_cs553x(void)
-+{
-+ u32 low, hi;
-+ u32 smb_base;
-+
-+ /* Grab & reserve the SMB I/O range */
-+ rdmsr(MSR_LBAR_SMB, low, hi);
-+
-+ /* Check the IO mask and whether SMB is enabled */
-+ if (hi != 0x0000F001) {
-+ printk(KERN_WARNING NAME ": SMBus not enabled\n");
-+ return -ENODEV;
-+ }
-+
-+ /* SMBus IO size is 8 bytes */
-+ smb_base = low & 0x0000FFF8;
-+
-+ return scx200_acb_create("CS5535", smb_base, 0);
-+}
-+
- static int __init scx200_acb_init(void)
- {
- int i;
-- int rc;
-+ int rc = -ENODEV;
-
- pr_debug(NAME ": NatSemi SCx200 ACCESS.bus Driver\n");
-
- /* Verify that this really is a SCx200 processor */
-- if (pci_dev_present(scx200) == 0)
-- return -ENODEV;
-+ if (pci_dev_present(scx200)) {
-+ for (i = 0; i < MAX_DEVICES; ++i) {
-+ if (base[i] > 0)
-+ rc = scx200_acb_create("SCx200", base[i], i);
-+ }
-+ } else if (pci_dev_present(divil_pci))
-+ rc = scx200_add_cs553x();
-
-- rc = -ENXIO;
-- for (i = 0; i < MAX_DEVICES; ++i) {
-- if (base[i] > 0)
-- rc = scx200_acb_create(base[i], i);
-- }
-- if (scx200_acb_list)
-- return 0;
- return rc;
- }
-
- static void __exit scx200_acb_cleanup(void)
- {
- struct scx200_acb_iface *iface;
-- lock_kernel();
-+
-+ down(&scx200_acb_list_mutex);
- while ((iface = scx200_acb_list) != NULL) {
- scx200_acb_list = iface->next;
-- unlock_kernel();
-+ up(&scx200_acb_list_mutex);
-
- i2c_del_adapter(&iface->adapter);
- release_region(iface->base, 8);
- kfree(iface);
-- lock_kernel();
-+ down(&scx200_acb_list_mutex);
- }
-- unlock_kernel();
-+ up(&scx200_acb_list_mutex);
- }
-
- module_init(scx200_acb_init);
- module_exit(scx200_acb_cleanup);
--
--/*
-- Local variables:
-- compile-command: "make -k -C ../.. SUBDIRS=drivers/i2c modules"
-- c-basic-offset: 8
-- End:
--*/
--
---- linux-2.6.16.orig/Documentation/i2c/busses/scx200_acb 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/Documentation/i2c/busses/scx200_acb 2006-03-22 17:06:15.000000000 +0100
-@@ -6,9 +6,10 @@
- -----------------
-
- * base: int
-- Base addresses for the ACCESS.bus controllers
-+ Base addresses for the ACCESS.bus controllers on SCx200 and SC1100 devices
-
- Description
- -----------
-
--Enable the use of the ACCESS.bus controllers of a SCx200 processor.
-+Enable the use of the ACCESS.bus controller on the Geode SCx200 and
-+SC1100 processors and the CS5535 and CS5536 Geode companion devices.
---- linux-2.6.16.orig/drivers/i2c/busses/Kconfig 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/Kconfig 2006-03-22 17:06:16.000000000 +0100
-@@ -163,17 +163,22 @@
- I2C bus.
-
- config I2C_PIIX4
-- tristate "Intel PIIX4"
-+ tristate "Intel PIIX4 and compatible (ATI/Serverworks/Broadcom/SMSC)"
- depends on I2C && PCI
- help
- If you say yes to this option, support will be included for the Intel
- PIIX4 family of mainboard I2C interfaces. Specifically, the following
-- versions of the chipset are supported:
-+ versions of the chipset are supported (note that Serverworks is part
-+ of Broadcom):
- Intel PIIX4
- Intel 440MX
-+ ATI IXP200
-+ ATI IXP300
-+ ATI IXP400
- Serverworks OSB4
- Serverworks CSB5
- Serverworks CSB6
-+ Serverworks HT-1000
- SMSC Victory66
-
- This driver can also be built as a module. If so, the module
-@@ -284,7 +289,10 @@
- This driver is a replacement for (and was inspired by) an older
- driver named i2c-philips-par. The new driver supports more devices,
- and makes it easier to add support for new devices.
--
-+
-+ An adapter type parameter is now mandatory. Please read the file
-+ Documentation/i2c/busses/i2c-parport for details.
-+
- Another driver exists, named i2c-parport-light, which doesn't depend
- on the parport driver. This is meant for embedded systems. Don't say
- Y here if you intend to say Y or M there.
-@@ -389,10 +397,11 @@
- also be specified with a module parameter.
-
- config SCx200_ACB
-- tristate "NatSemi SCx200 ACCESS.bus"
-- depends on I2C && PCI
-+ tristate "Geode ACCESS.bus support"
-+ depends on X86_32 && I2C && PCI
- help
-- Enable the use of the ACCESS.bus controllers of a SCx200 processor.
-+ Enable the use of the ACCESS.bus controllers on the Geode SCx200 and
-+ SC1100 processors and the CS5535 and CS5536 Geode companion devices.
-
- If you don't know what to do here, say N.
-
---- linux-2.6.16.orig/drivers/hwmon/w83792d.c 2006-03-22 17:06:10.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/w83792d.c 2006-03-22 17:06:16.000000000 +0100
-@@ -43,6 +43,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-sysfs.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
-@@ -271,7 +272,7 @@
- struct class_device *class_dev;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -300,7 +301,6 @@
- u8 sf2_levels[3][4]; /* Smart FanII: Fan1,2,3 duty cycle levels */
- };
-
--static int w83792d_attach_adapter(struct i2c_adapter *adapter);
- static int w83792d_detect(struct i2c_adapter *adapter, int address, int kind);
- static int w83792d_detach_client(struct i2c_client *client);
- static struct w83792d_data *w83792d_update_device(struct device *dev);
-@@ -315,7 +315,9 @@
- .driver = {
- .name = "w83792d",
- },
-- .attach_adapter = w83792d_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = w83792d_detect,
- .detach_client = w83792d_detach_client,
- };
-
-@@ -382,30 +384,40 @@
- store_in_reg(MIN, min);
- store_in_reg(MAX, max);
-
--#define sysfs_in_reg(offset) \
--static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in, \
-- NULL, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
-- show_in_min, store_in_min, offset); \
--static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
-- show_in_max, store_in_max, offset);
--
--sysfs_in_reg(0);
--sysfs_in_reg(1);
--sysfs_in_reg(2);
--sysfs_in_reg(3);
--sysfs_in_reg(4);
--sysfs_in_reg(5);
--sysfs_in_reg(6);
--sysfs_in_reg(7);
--sysfs_in_reg(8);
--
--#define device_create_file_in(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_in##offset##_input.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_in##offset##_max.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_in##offset##_min.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute sda_in_input[] = {
-+ SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
-+ SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
-+ SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
-+ SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
-+ SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
-+ SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
-+ SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
-+ SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
-+ SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
-+};
-+static struct sensor_device_attribute sda_in_min[] = {
-+ SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
-+ SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
-+ SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
-+ SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
-+ SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
-+ SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
-+ SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
-+ SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
-+ SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
-+};
-+static struct sensor_device_attribute sda_in_max[] = {
-+ SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
-+ SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
-+ SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
-+ SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
-+ SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
-+ SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
-+ SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
-+ SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
-+ SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
-+};
-+
-
- #define show_fan_reg(reg) \
- static ssize_t show_##reg (struct device *dev, struct device_attribute *attr, \
-@@ -486,28 +498,33 @@
- return count;
- }
-
--#define sysfs_fan(offset) \
--static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan, NULL, \
-- offset); \
--static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
-- show_fan_div, store_fan_div, offset); \
--static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
-- show_fan_min, store_fan_min, offset);
--
--sysfs_fan(1);
--sysfs_fan(2);
--sysfs_fan(3);
--sysfs_fan(4);
--sysfs_fan(5);
--sysfs_fan(6);
--sysfs_fan(7);
--
--#define device_create_file_fan(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_fan##offset##_input.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_fan##offset##_div.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_fan##offset##_min.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute sda_fan_input[] = {
-+ SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 1),
-+ SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 2),
-+ SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 3),
-+ SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 4),
-+ SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 5),
-+ SENSOR_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 6),
-+ SENSOR_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 7),
-+};
-+static struct sensor_device_attribute sda_fan_min[] = {
-+ SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 1),
-+ SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 2),
-+ SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 3),
-+ SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 4),
-+ SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 5),
-+ SENSOR_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 6),
-+ SENSOR_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min, store_fan_min, 7),
-+};
-+static struct sensor_device_attribute sda_fan_div[] = {
-+ SENSOR_ATTR(fan1_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 1),
-+ SENSOR_ATTR(fan2_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 2),
-+ SENSOR_ATTR(fan3_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 3),
-+ SENSOR_ATTR(fan4_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 4),
-+ SENSOR_ATTR(fan5_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 5),
-+ SENSOR_ATTR(fan6_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 6),
-+ SENSOR_ATTR(fan7_div, S_IWUSR | S_IRUGO, show_fan_div, store_fan_div, 7),
-+};
-
-
- /* read/write the temperature1, includes measured value and limits */
-@@ -539,21 +556,6 @@
- return count;
- }
-
--
--static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0);
--static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1,
-- store_temp1, 1);
--static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1,
-- store_temp1, 2);
--
--#define device_create_file_temp1(client) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_temp1_input.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_temp1_max.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_temp1_max_hyst.dev_attr); \
--} while (0)
--
--
- /* read/write the temperature2-3, includes measured value and limits */
-
- static ssize_t show_temp23(struct device *dev, struct device_attribute *attr,
-@@ -590,25 +592,23 @@
- return count;
- }
-
--#define sysfs_temp23(name,idx) \
--static SENSOR_DEVICE_ATTR_2(name##_input, S_IRUGO, show_temp23, NULL, \
-- idx, 0); \
--static SENSOR_DEVICE_ATTR_2(name##_max, S_IRUGO | S_IWUSR, \
-- show_temp23, store_temp23, idx, 2); \
--static SENSOR_DEVICE_ATTR_2(name##_max_hyst, S_IRUGO | S_IWUSR, \
-- show_temp23, store_temp23, idx, 4);
--
--sysfs_temp23(temp2,0)
--sysfs_temp23(temp3,1)
--
--#define device_create_file_temp_add(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_temp##offset##_input.dev_attr); \
--device_create_file(&client->dev, &sensor_dev_attr_temp##offset##_max.dev_attr); \
--device_create_file(&client->dev, \
--&sensor_dev_attr_temp##offset##_max_hyst.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute_2 sda_temp_input[] = {
-+ SENSOR_ATTR_2(temp1_input, S_IRUGO, show_temp1, NULL, 0, 0),
-+ SENSOR_ATTR_2(temp2_input, S_IRUGO, show_temp23, NULL, 0, 0),
-+ SENSOR_ATTR_2(temp3_input, S_IRUGO, show_temp23, NULL, 1, 0),
-+};
-+
-+static struct sensor_device_attribute_2 sda_temp_max[] = {
-+ SENSOR_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp1, store_temp1, 0, 1),
-+ SENSOR_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp23, store_temp23, 0, 2),
-+ SENSOR_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp23, store_temp23, 1, 2),
-+};
-
-+static struct sensor_device_attribute_2 sda_temp_max_hyst[] = {
-+ SENSOR_ATTR_2(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1, store_temp1, 0, 2),
-+ SENSOR_ATTR_2(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp23, store_temp23, 0, 4),
-+ SENSOR_ATTR_2(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp23, store_temp23, 1, 4),
-+};
-
- /* get reatime status of all sensors items: voltage, temp, fan */
- static ssize_t
-@@ -620,10 +620,6 @@
-
- static
- DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
--#define device_create_file_alarms(client) \
--device_create_file(&client->dev, &dev_attr_alarms);
--
--
-
- static ssize_t
- show_pwm(struct device *dev, struct device_attribute *attr,
-@@ -711,26 +707,19 @@
- return count;
- }
-
--#define sysfs_pwm(offset) \
--static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
-- show_pwm, store_pwm, offset); \
--static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
-- show_pwmenable, store_pwmenable, offset); \
--
--sysfs_pwm(1);
--sysfs_pwm(2);
--sysfs_pwm(3);
--
--
--#define device_create_file_pwm(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_pwm##offset.dev_attr); \
--} while (0)
--
--#define device_create_file_pwmenable(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_pwm##offset##_enable.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute sda_pwm[] = {
-+ SENSOR_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 1),
-+ SENSOR_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 2),
-+ SENSOR_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, store_pwm, 3),
-+};
-+static struct sensor_device_attribute sda_pwm_enable[] = {
-+ SENSOR_ATTR(pwm1_enable, S_IWUSR | S_IRUGO,
-+ show_pwmenable, store_pwmenable, 1),
-+ SENSOR_ATTR(pwm2_enable, S_IWUSR | S_IRUGO,
-+ show_pwmenable, store_pwmenable, 2),
-+ SENSOR_ATTR(pwm3_enable, S_IWUSR | S_IRUGO,
-+ show_pwmenable, store_pwmenable, 3),
-+};
-
-
- static ssize_t
-@@ -764,18 +753,14 @@
- return count;
- }
-
--#define sysfs_pwm_mode(offset) \
--static SENSOR_DEVICE_ATTR(pwm##offset##_mode, S_IRUGO | S_IWUSR, \
-- show_pwm_mode, store_pwm_mode, offset);
--
--sysfs_pwm_mode(1);
--sysfs_pwm_mode(2);
--sysfs_pwm_mode(3);
--
--#define device_create_file_pwm_mode(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_pwm##offset##_mode.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute sda_pwm_mode[] = {
-+ SENSOR_ATTR(pwm1_mode, S_IWUSR | S_IRUGO,
-+ show_pwm_mode, store_pwm_mode, 1),
-+ SENSOR_ATTR(pwm2_mode, S_IWUSR | S_IRUGO,
-+ show_pwm_mode, store_pwm_mode, 2),
-+ SENSOR_ATTR(pwm3_mode, S_IWUSR | S_IRUGO,
-+ show_pwm_mode, store_pwm_mode, 3),
-+};
-
-
- static ssize_t
-@@ -788,12 +773,6 @@
-
- static DEVICE_ATTR(chassis, S_IRUGO, show_regs_chassis, NULL);
-
--#define device_create_file_chassis(client) \
--do { \
--device_create_file(&client->dev, &dev_attr_chassis); \
--} while (0)
--
--
- static ssize_t
- show_chassis_clear(struct device *dev, struct device_attribute *attr, char *buf)
- {
-@@ -824,13 +803,6 @@
- static DEVICE_ATTR(chassis_clear, S_IRUGO | S_IWUSR,
- show_chassis_clear, store_chassis_clear);
-
--#define device_create_file_chassis_clear(client) \
--do { \
--device_create_file(&client->dev, &dev_attr_chassis_clear); \
--} while (0)
--
--
--
- /* For Smart Fan I / Thermal Cruise */
- static ssize_t
- show_thermal_cruise(struct device *dev, struct device_attribute *attr,
-@@ -864,20 +836,14 @@
- return count;
- }
-
--#define sysfs_thermal_cruise(offset) \
--static SENSOR_DEVICE_ATTR(thermal_cruise##offset, S_IRUGO | S_IWUSR, \
-- show_thermal_cruise, store_thermal_cruise, offset);
--
--sysfs_thermal_cruise(1);
--sysfs_thermal_cruise(2);
--sysfs_thermal_cruise(3);
--
--#define device_create_file_thermal_cruise(client, offset) \
--do { \
--device_create_file(&client->dev, \
--&sensor_dev_attr_thermal_cruise##offset.dev_attr); \
--} while (0)
--
-+static struct sensor_device_attribute sda_thermal_cruise[] = {
-+ SENSOR_ATTR(thermal_cruise1, S_IWUSR | S_IRUGO,
-+ show_thermal_cruise, store_thermal_cruise, 1),
-+ SENSOR_ATTR(thermal_cruise2, S_IWUSR | S_IRUGO,
-+ show_thermal_cruise, store_thermal_cruise, 2),
-+ SENSOR_ATTR(thermal_cruise3, S_IWUSR | S_IRUGO,
-+ show_thermal_cruise, store_thermal_cruise, 3),
-+};
-
- /* For Smart Fan I/Thermal Cruise and Smart Fan II */
- static ssize_t
-@@ -916,19 +882,14 @@
- return count;
- }
-
--#define sysfs_tolerance(offset) \
--static SENSOR_DEVICE_ATTR(tolerance##offset, S_IRUGO | S_IWUSR, \
-- show_tolerance, store_tolerance, offset);
--
--sysfs_tolerance(1);
--sysfs_tolerance(2);
--sysfs_tolerance(3);
--
--#define device_create_file_tolerance(client, offset) \
--do { \
--device_create_file(&client->dev, &sensor_dev_attr_tolerance##offset.dev_attr); \
--} while (0)
--
-+static struct sensor_device_attribute sda_tolerance[] = {
-+ SENSOR_ATTR(tolerance1, S_IWUSR | S_IRUGO,
-+ show_tolerance, store_tolerance, 1),
-+ SENSOR_ATTR(tolerance2, S_IWUSR | S_IRUGO,
-+ show_tolerance, store_tolerance, 2),
-+ SENSOR_ATTR(tolerance3, S_IWUSR | S_IRUGO,
-+ show_tolerance, store_tolerance, 3),
-+};
-
- /* For Smart Fan II */
- static ssize_t
-@@ -964,28 +925,34 @@
- return count;
- }
-
--#define sysfs_sf2_point(offset, index) \
--static SENSOR_DEVICE_ATTR_2(sf2_point##offset##_fan##index, S_IRUGO | S_IWUSR, \
-- show_sf2_point, store_sf2_point, offset, index);
--
--sysfs_sf2_point(1, 1); /* Fan1 */
--sysfs_sf2_point(2, 1); /* Fan1 */
--sysfs_sf2_point(3, 1); /* Fan1 */
--sysfs_sf2_point(4, 1); /* Fan1 */
--sysfs_sf2_point(1, 2); /* Fan2 */
--sysfs_sf2_point(2, 2); /* Fan2 */
--sysfs_sf2_point(3, 2); /* Fan2 */
--sysfs_sf2_point(4, 2); /* Fan2 */
--sysfs_sf2_point(1, 3); /* Fan3 */
--sysfs_sf2_point(2, 3); /* Fan3 */
--sysfs_sf2_point(3, 3); /* Fan3 */
--sysfs_sf2_point(4, 3); /* Fan3 */
--
--#define device_create_file_sf2_point(client, offset, index) \
--do { \
--device_create_file(&client->dev, \
--&sensor_dev_attr_sf2_point##offset##_fan##index.dev_attr); \
--} while (0)
-+static struct sensor_device_attribute_2 sda_sf2_point[] = {
-+ SENSOR_ATTR_2(sf2_point1_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 1, 1),
-+ SENSOR_ATTR_2(sf2_point2_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 2, 1),
-+ SENSOR_ATTR_2(sf2_point3_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 3, 1),
-+ SENSOR_ATTR_2(sf2_point4_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 4, 1),
-+
-+ SENSOR_ATTR_2(sf2_point1_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 1, 2),
-+ SENSOR_ATTR_2(sf2_point2_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 2, 2),
-+ SENSOR_ATTR_2(sf2_point3_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 3, 2),
-+ SENSOR_ATTR_2(sf2_point4_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 4, 2),
-+
-+ SENSOR_ATTR_2(sf2_point1_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 1, 3),
-+ SENSOR_ATTR_2(sf2_point2_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 2, 3),
-+ SENSOR_ATTR_2(sf2_point3_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 3, 3),
-+ SENSOR_ATTR_2(sf2_point4_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_point, store_sf2_point, 4, 3),
-+};
-
-
- static ssize_t
-@@ -1026,39 +993,28 @@
- return count;
- }
-
--#define sysfs_sf2_level(offset, index) \
--static SENSOR_DEVICE_ATTR_2(sf2_level##offset##_fan##index, S_IRUGO | S_IWUSR, \
-- show_sf2_level, store_sf2_level, offset, index);
--
--sysfs_sf2_level(1, 1); /* Fan1 */
--sysfs_sf2_level(2, 1); /* Fan1 */
--sysfs_sf2_level(3, 1); /* Fan1 */
--sysfs_sf2_level(1, 2); /* Fan2 */
--sysfs_sf2_level(2, 2); /* Fan2 */
--sysfs_sf2_level(3, 2); /* Fan2 */
--sysfs_sf2_level(1, 3); /* Fan3 */
--sysfs_sf2_level(2, 3); /* Fan3 */
--sysfs_sf2_level(3, 3); /* Fan3 */
--
--#define device_create_file_sf2_level(client, offset, index) \
--do { \
--device_create_file(&client->dev, \
--&sensor_dev_attr_sf2_level##offset##_fan##index.dev_attr); \
--} while (0)
--
--
--/* This function is called when:
-- * w83792d_driver is inserted (when this module is loaded), for each
-- available adapter
-- * when a new adapter is inserted (and w83792d_driver is still present) */
--static int
--w83792d_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, w83792d_detect);
--}
--
-+static struct sensor_device_attribute_2 sda_sf2_level[] = {
-+ SENSOR_ATTR_2(sf2_level1_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 1, 1),
-+ SENSOR_ATTR_2(sf2_level2_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 2, 1),
-+ SENSOR_ATTR_2(sf2_level3_fan1, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 3, 1),
-+
-+ SENSOR_ATTR_2(sf2_level1_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 1, 2),
-+ SENSOR_ATTR_2(sf2_level2_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 2, 2),
-+ SENSOR_ATTR_2(sf2_level3_fan2, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 3, 2),
-+
-+ SENSOR_ATTR_2(sf2_level1_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 1, 3),
-+ SENSOR_ATTR_2(sf2_level2_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 2, 3),
-+ SENSOR_ATTR_2(sf2_level3_fan3, S_IRUGO | S_IWUSR,
-+ show_sf2_level, store_sf2_level, 3, 3),
-+};
-
- static int
- w83792d_create_subclient(struct i2c_adapter *adapter,
-@@ -1147,12 +1103,19 @@
- return err;
- }
-
-+static void device_create_file_fan(struct device *dev, int i)
-+{
-+ device_create_file(dev, &sda_fan_input[i].dev_attr);
-+ device_create_file(dev, &sda_fan_div[i].dev_attr);
-+ device_create_file(dev, &sda_fan_min[i].dev_attr);
-+}
-
- static int
- w83792d_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- int i = 0, val1 = 0, val2;
-- struct i2c_client *new_client;
-+ struct i2c_client *client;
-+ struct device *dev;
- struct w83792d_data *data;
- int err = 0;
- const char *client_name = "";
-@@ -1170,12 +1133,13 @@
- goto ERROR0;
- }
-
-- new_client = &data->client;
-- i2c_set_clientdata(new_client, data);
-- new_client->addr = address;
-- new_client->adapter = adapter;
-- new_client->driver = &w83792d_driver;
-- new_client->flags = 0;
-+ client = &data->client;
-+ dev = &client->dev;
-+ i2c_set_clientdata(client, data);
-+ client->addr = address;
-+ client->adapter = adapter;
-+ client->driver = &w83792d_driver;
-+ client->flags = 0;
-
- /* Now, we do the remaining detection. */
-
-@@ -1184,50 +1148,49 @@
- force_*=... parameter, and the Winbond will be reset to the right
- bank. */
- if (kind < 0) {
-- if (w83792d_read_value(new_client, W83792D_REG_CONFIG) & 0x80) {
-- dev_warn(&new_client->dev, "Detection failed at step "
-- "3\n");
-+ if (w83792d_read_value(client, W83792D_REG_CONFIG) & 0x80) {
-+ dev_dbg(dev, "Detection failed at step 1\n");
- goto ERROR1;
- }
-- val1 = w83792d_read_value(new_client, W83792D_REG_BANK);
-- val2 = w83792d_read_value(new_client, W83792D_REG_CHIPMAN);
-+ val1 = w83792d_read_value(client, W83792D_REG_BANK);
-+ val2 = w83792d_read_value(client, W83792D_REG_CHIPMAN);
- /* Check for Winbond ID if in bank 0 */
- if (!(val1 & 0x07)) { /* is Bank0 */
- if (((!(val1 & 0x80)) && (val2 != 0xa3)) ||
- ((val1 & 0x80) && (val2 != 0x5c))) {
-+ dev_dbg(dev, "Detection failed at step 2\n");
- goto ERROR1;
- }
- }
- /* If Winbond chip, address of chip and W83792D_REG_I2C_ADDR
- should match */
-- if (w83792d_read_value(new_client,
-+ if (w83792d_read_value(client,
- W83792D_REG_I2C_ADDR) != address) {
-- dev_warn(&new_client->dev, "Detection failed "
-- "at step 5\n");
-+ dev_dbg(dev, "Detection failed at step 3\n");
- goto ERROR1;
- }
- }
-
- /* We have either had a force parameter, or we have already detected the
- Winbond. Put it now into bank 0 and Vendor ID High Byte */
-- w83792d_write_value(new_client,
-+ w83792d_write_value(client,
- W83792D_REG_BANK,
-- (w83792d_read_value(new_client,
-+ (w83792d_read_value(client,
- W83792D_REG_BANK) & 0x78) | 0x80);
-
- /* Determine the chip type. */
- if (kind <= 0) {
- /* get vendor ID */
-- val2 = w83792d_read_value(new_client, W83792D_REG_CHIPMAN);
-+ val2 = w83792d_read_value(client, W83792D_REG_CHIPMAN);
- if (val2 != 0x5c) { /* the vendor is NOT Winbond */
- goto ERROR1;
- }
-- val1 = w83792d_read_value(new_client, W83792D_REG_WCHIPID);
-+ val1 = w83792d_read_value(client, W83792D_REG_WCHIPID);
- if (val1 == 0x7a) {
- kind = w83792d;
- } else {
- if (kind == 0)
-- dev_warn(&new_client->dev,
-+ dev_warn(dev,
- "w83792d: Ignoring 'force' parameter for"
- " unknown chip at adapter %d, address"
- " 0x%02x\n", i2c_adapter_id(adapter),
-@@ -1239,120 +1202,86 @@
- if (kind == w83792d) {
- client_name = "w83792d";
- } else {
-- dev_err(&new_client->dev, "w83792d: Internal error: unknown"
-+ dev_err(dev, "w83792d: Internal error: unknown"
- " kind (%d)?!?", kind);
- goto ERROR1;
- }
-
- /* Fill in the remaining client fields and put into the global list */
-- strlcpy(new_client->name, client_name, I2C_NAME_SIZE);
-+ strlcpy(client->name, client_name, I2C_NAME_SIZE);
- data->type = kind;
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
-- if ((err = i2c_attach_client(new_client)))
-+ if ((err = i2c_attach_client(client)))
- goto ERROR1;
-
- if ((err = w83792d_detect_subclients(adapter, address,
-- kind, new_client)))
-+ kind, client)))
- goto ERROR2;
-
- /* Initialize the chip */
-- w83792d_init_client(new_client);
-+ w83792d_init_client(client);
-
- /* A few vars need to be filled upon startup */
- for (i = 0; i < 7; i++) {
-- data->fan_min[i] = w83792d_read_value(new_client,
-+ data->fan_min[i] = w83792d_read_value(client,
- W83792D_REG_FAN_MIN[i]);
- }
-
- /* Register sysfs hooks */
-- data->class_dev = hwmon_device_register(&new_client->dev);
-+ data->class_dev = hwmon_device_register(dev);
- if (IS_ERR(data->class_dev)) {
- err = PTR_ERR(data->class_dev);
- goto ERROR3;
- }
-- device_create_file_in(new_client, 0);
-- device_create_file_in(new_client, 1);
-- device_create_file_in(new_client, 2);
-- device_create_file_in(new_client, 3);
-- device_create_file_in(new_client, 4);
-- device_create_file_in(new_client, 5);
-- device_create_file_in(new_client, 6);
-- device_create_file_in(new_client, 7);
-- device_create_file_in(new_client, 8);
--
-- device_create_file_fan(new_client, 1);
-- device_create_file_fan(new_client, 2);
-- device_create_file_fan(new_client, 3);
-+ for (i = 0; i < 9; i++) {
-+ device_create_file(dev, &sda_in_input[i].dev_attr);
-+ device_create_file(dev, &sda_in_max[i].dev_attr);
-+ device_create_file(dev, &sda_in_min[i].dev_attr);
-+ }
-+ for (i = 0; i < 3; i++)
-+ device_create_file_fan(dev, i);
-
- /* Read GPIO enable register to check if pins for fan 4,5 are used as
- GPIO */
-- val1 = w83792d_read_value(new_client, W83792D_REG_GPIO_EN);
-+ val1 = w83792d_read_value(client, W83792D_REG_GPIO_EN);
- if (!(val1 & 0x40))
-- device_create_file_fan(new_client, 4);
-+ device_create_file_fan(dev, 3);
- if (!(val1 & 0x20))
-- device_create_file_fan(new_client, 5);
-+ device_create_file_fan(dev, 4);
-
-- val1 = w83792d_read_value(new_client, W83792D_REG_PIN);
-+ val1 = w83792d_read_value(client, W83792D_REG_PIN);
- if (val1 & 0x40)
-- device_create_file_fan(new_client, 6);
-+ device_create_file_fan(dev, 5);
- if (val1 & 0x04)
-- device_create_file_fan(new_client, 7);
-+ device_create_file_fan(dev, 6);
-+
-+ for (i = 0; i < 3; i++) {
-+ device_create_file(dev, &sda_temp_input[i].dev_attr);
-+ device_create_file(dev, &sda_temp_max[i].dev_attr);
-+ device_create_file(dev, &sda_temp_max_hyst[i].dev_attr);
-+ device_create_file(dev, &sda_thermal_cruise[i].dev_attr);
-+ device_create_file(dev, &sda_tolerance[i].dev_attr);
-+ }
-+
-+ for (i = 0; i < ARRAY_SIZE(sda_pwm); i++) {
-+ device_create_file(dev, &sda_pwm[i].dev_attr);
-+ device_create_file(dev, &sda_pwm_enable[i].dev_attr);
-+ device_create_file(dev, &sda_pwm_mode[i].dev_attr);
-+ }
-+
-+ device_create_file(dev, &dev_attr_alarms);
-+ device_create_file(dev, &dev_attr_chassis);
-+ device_create_file(dev, &dev_attr_chassis_clear);
-+
-+ for (i = 0; i < ARRAY_SIZE(sda_sf2_point); i++)
-+ device_create_file(dev, &sda_sf2_point[i].dev_attr);
-
-- device_create_file_temp1(new_client); /* Temp1 */
-- device_create_file_temp_add(new_client, 2); /* Temp2 */
-- device_create_file_temp_add(new_client, 3); /* Temp3 */
--
-- device_create_file_alarms(new_client);
--
-- device_create_file_pwm(new_client, 1);
-- device_create_file_pwm(new_client, 2);
-- device_create_file_pwm(new_client, 3);
--
-- device_create_file_pwmenable(new_client, 1);
-- device_create_file_pwmenable(new_client, 2);
-- device_create_file_pwmenable(new_client, 3);
--
-- device_create_file_pwm_mode(new_client, 1);
-- device_create_file_pwm_mode(new_client, 2);
-- device_create_file_pwm_mode(new_client, 3);
--
-- device_create_file_chassis(new_client);
-- device_create_file_chassis_clear(new_client);
--
-- device_create_file_thermal_cruise(new_client, 1);
-- device_create_file_thermal_cruise(new_client, 2);
-- device_create_file_thermal_cruise(new_client, 3);
--
-- device_create_file_tolerance(new_client, 1);
-- device_create_file_tolerance(new_client, 2);
-- device_create_file_tolerance(new_client, 3);
--
-- device_create_file_sf2_point(new_client, 1, 1); /* Fan1 */
-- device_create_file_sf2_point(new_client, 2, 1); /* Fan1 */
-- device_create_file_sf2_point(new_client, 3, 1); /* Fan1 */
-- device_create_file_sf2_point(new_client, 4, 1); /* Fan1 */
-- device_create_file_sf2_point(new_client, 1, 2); /* Fan2 */
-- device_create_file_sf2_point(new_client, 2, 2); /* Fan2 */
-- device_create_file_sf2_point(new_client, 3, 2); /* Fan2 */
-- device_create_file_sf2_point(new_client, 4, 2); /* Fan2 */
-- device_create_file_sf2_point(new_client, 1, 3); /* Fan3 */
-- device_create_file_sf2_point(new_client, 2, 3); /* Fan3 */
-- device_create_file_sf2_point(new_client, 3, 3); /* Fan3 */
-- device_create_file_sf2_point(new_client, 4, 3); /* Fan3 */
--
-- device_create_file_sf2_level(new_client, 1, 1); /* Fan1 */
-- device_create_file_sf2_level(new_client, 2, 1); /* Fan1 */
-- device_create_file_sf2_level(new_client, 3, 1); /* Fan1 */
-- device_create_file_sf2_level(new_client, 1, 2); /* Fan2 */
-- device_create_file_sf2_level(new_client, 2, 2); /* Fan2 */
-- device_create_file_sf2_level(new_client, 3, 2); /* Fan2 */
-- device_create_file_sf2_level(new_client, 1, 3); /* Fan3 */
-- device_create_file_sf2_level(new_client, 2, 3); /* Fan3 */
-- device_create_file_sf2_level(new_client, 3, 3); /* Fan3 */
-+ for (i = 0; i < ARRAY_SIZE(sda_sf2_level); i++)
-+ device_create_file(dev, &sda_sf2_level[i].dev_attr);
-
- return 0;
-
-@@ -1366,7 +1295,7 @@
- kfree(data->lm75[1]);
- }
- ERROR2:
-- i2c_detach_client(new_client);
-+ i2c_detach_client(client);
- ERROR1:
- kfree(data);
- ERROR0:
-@@ -1434,7 +1363,7 @@
- int i, j;
- u8 reg_array_tmp[4], pwm_array_tmp[7], reg_tmp;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after
- (jiffies - data->last_updated, (unsigned long) (HZ * 3))
-@@ -1545,7 +1474,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- #ifdef DEBUG
- w83792d_print_debug(data, dev);
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-amd756-s4882.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-amd756-s4882.c 2006-03-22 17:06:15.000000000 +0100
-@@ -38,6 +38,7 @@
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/i2c.h>
-+#include <linux/mutex.h>
-
- extern struct i2c_adapter amd756_smbus;
-
-@@ -45,7 +46,7 @@
- static struct i2c_algorithm *s4882_algo;
-
- /* Wrapper access functions for multiplexed SMBus */
--static struct semaphore amd756_lock;
-+static DEFINE_MUTEX(amd756_lock);
-
- static s32 amd756_access_virt0(struct i2c_adapter * adap, u16 addr,
- unsigned short flags, char read_write,
-@@ -59,12 +60,12 @@
- || addr == 0x18)
- return -1;
-
-- down(&amd756_lock);
-+ mutex_lock(&amd756_lock);
-
- error = amd756_smbus.algo->smbus_xfer(adap, addr, flags, read_write,
- command, size, data);
-
-- up(&amd756_lock);
-+ mutex_unlock(&amd756_lock);
-
- return error;
- }
-@@ -87,7 +88,7 @@
- if (addr != 0x4c && (addr & 0xfc) != 0x50 && (addr & 0xfc) != 0x30)
- return -1;
-
-- down(&amd756_lock);
-+ mutex_lock(&amd756_lock);
-
- if (last_channels != channels) {
- union i2c_smbus_data mplxdata;
-@@ -105,7 +106,7 @@
- command, size, data);
-
- UNLOCK:
-- up(&amd756_lock);
-+ mutex_unlock(&amd756_lock);
- return error;
- }
-
-@@ -166,8 +167,6 @@
- }
-
- printk(KERN_INFO "Enabling SMBus multiplexing for Tyan S4882\n");
-- init_MUTEX(&amd756_lock);
--
- /* Define the 5 virtual adapters and algorithms structures */
- if (!(s4882_adapter = kzalloc(5 * sizeof(struct i2c_adapter),
- GFP_KERNEL))) {
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-isa.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-isa.c 2006-03-22 17:06:15.000000000 +0100
-@@ -125,7 +125,7 @@
-
- static int __init i2c_isa_init(void)
- {
-- init_MUTEX(&isa_adapter.clist_lock);
-+ mutex_init(&isa_adapter.clist_lock);
- INIT_LIST_HEAD(&isa_adapter.clients);
-
- isa_adapter.nr = ANY_I2C_ISA_BUS;
---- linux-2.6.16.orig/drivers/i2c/chips/eeprom.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/eeprom.c 2006-03-22 17:06:16.000000000 +0100
-@@ -33,6 +33,7 @@
- #include <linux/sched.h>
- #include <linux/jiffies.h>
- #include <linux/i2c.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x50, 0x51, 0x52, 0x53, 0x54,
-@@ -54,7 +55,7 @@
- /* Each client has this additional data */
- struct eeprom_data {
- struct i2c_client client;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- u8 valid; /* bitfield, bit!=0 if slice is valid */
- unsigned long last_updated[8]; /* In jiffies, 8 slices */
- u8 data[EEPROM_SIZE]; /* Register values */
-@@ -62,7 +63,6 @@
- };
-
-
--static int eeprom_attach_adapter(struct i2c_adapter *adapter);
- static int eeprom_detect(struct i2c_adapter *adapter, int address, int kind);
- static int eeprom_detach_client(struct i2c_client *client);
-
-@@ -72,7 +72,9 @@
- .name = "eeprom",
- },
- .id = I2C_DRIVERID_EEPROM,
-- .attach_adapter = eeprom_attach_adapter,
-+ .class = I2C_CLASS_DATA,
-+ .address_data = &addr_data,
-+ .detect_client = eeprom_detect,
- .detach_client = eeprom_detach_client,
- };
-
-@@ -81,7 +83,7 @@
- struct eeprom_data *data = i2c_get_clientdata(client);
- int i, j;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (!(data->valid & (1 << slice)) ||
- time_after(jiffies, data->last_updated[slice] + 300 * HZ)) {
-@@ -107,7 +109,7 @@
- data->valid |= (1 << slice);
- }
- exit:
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- static ssize_t eeprom_read(struct kobject *kobj, char *buf, loff_t off, size_t count)
-@@ -149,11 +151,6 @@
- .read = eeprom_read,
- };
-
--static int eeprom_attach_adapter(struct i2c_adapter *adapter)
--{
-- return i2c_probe(adapter, &addr_data, eeprom_detect);
--}
--
- /* This function is called by i2c_probe */
- static int eeprom_detect(struct i2c_adapter *adapter, int address, int kind)
- {
-@@ -187,7 +184,7 @@
- /* Fill in the remaining client fields */
- strlcpy(new_client->name, "eeprom", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
- data->nature = UNKNOWN;
-
- /* Tell the I2C layer a new client has arrived */
---- linux-2.6.16.orig/drivers/i2c/chips/max6875.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/max6875.c 2006-03-22 17:06:15.000000000 +0100
-@@ -31,7 +31,7 @@
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/i2c.h>
--#include <asm/semaphore.h>
-+#include <linux/mutex.h>
-
- /* Do not scan - the MAX6875 access method will write to some EEPROM chips */
- static unsigned short normal_i2c[] = {I2C_CLIENT_END};
-@@ -54,7 +54,7 @@
- /* Each client has this additional data */
- struct max6875_data {
- struct i2c_client client;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
-
- u32 valid;
- u8 data[USER_EEPROM_SIZE];
-@@ -83,7 +83,7 @@
- if (slice >= USER_EEPROM_SLICES)
- return;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- buf = &data->data[slice << SLICE_BITS];
-
-@@ -122,7 +122,7 @@
- data->valid |= (1 << slice);
- }
- exit_up:
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- static ssize_t max6875_read(struct kobject *kobj, char *buf, loff_t off,
-@@ -196,7 +196,7 @@
- real_client->driver = &max6875_driver;
- real_client->flags = 0;
- strlcpy(real_client->name, "max6875", I2C_NAME_SIZE);
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Init fake client data */
- /* set the client data to the i2c_client so that it will get freed */
---- linux-2.6.16.orig/drivers/i2c/chips/pcf8591.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/pcf8591.c 2006-03-22 17:06:15.000000000 +0100
-@@ -24,6 +24,7 @@
- #include <linux/init.h>
- #include <linux/slab.h>
- #include <linux/i2c.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
-@@ -74,7 +75,7 @@
-
- struct pcf8591_data {
- struct i2c_client client;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
-
- u8 control;
- u8 aout;
-@@ -144,13 +145,13 @@
- struct pcf8591_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (val)
- data->control |= PCF8591_CONTROL_AOEF;
- else
- data->control &= ~PCF8591_CONTROL_AOEF;
- i2c_smbus_write_byte(client, data->control);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -200,7 +201,7 @@
- /* Fill in the remaining client fields and put it into the global
- list */
- strlcpy(new_client->name, "pcf8591", I2C_NAME_SIZE);
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -265,7 +266,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct pcf8591_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if ((data->control & PCF8591_CONTROL_AICH_MASK) != channel) {
- data->control = (data->control & ~PCF8591_CONTROL_AICH_MASK)
-@@ -278,7 +279,7 @@
- }
- value = i2c_smbus_read_byte(client);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- if ((channel == 2 && input_mode == 2) ||
- (channel != 3 && (input_mode == 1 || input_mode == 3)))
---- linux-2.6.16.orig/drivers/i2c/chips/tps65010.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/tps65010.c 2006-03-22 17:06:15.000000000 +0100
-@@ -32,6 +32,7 @@
- #include <linux/suspend.h>
- #include <linux/debugfs.h>
- #include <linux/seq_file.h>
-+#include <linux/mutex.h>
-
- #include <asm/irq.h>
- #include <asm/mach-types.h>
-@@ -81,7 +82,7 @@
-
- struct tps65010 {
- struct i2c_client client;
-- struct semaphore lock;
-+ struct mutex lock;
- int irq;
- struct work_struct work;
- struct dentry *file;
-@@ -218,7 +219,7 @@
- seq_printf(s, "driver %s\nversion %s\nchip %s\n\n",
- DRIVER_NAME, DRIVER_VERSION, chip);
-
-- down(&tps->lock);
-+ mutex_lock(&tps->lock);
-
- /* FIXME how can we tell whether a battery is present?
- * likely involves a charge gauging chip (like BQ26501).
-@@ -300,7 +301,7 @@
- (v2 & (1 << (4 + i))) ? "rising" : "falling");
- }
-
-- up(&tps->lock);
-+ mutex_unlock(&tps->lock);
- return 0;
- }
-
-@@ -416,7 +417,7 @@
- {
- struct tps65010 *tps = _tps;
-
-- down(&tps->lock);
-+ mutex_lock(&tps->lock);
-
- tps65010_interrupt(tps);
-
-@@ -444,7 +445,7 @@
- if (test_and_clear_bit(FLAG_IRQ_ENABLE, &tps->flags))
- enable_irq(tps->irq);
-
-- up(&tps->lock);
-+ mutex_unlock(&tps->lock);
- }
-
- static irqreturn_t tps65010_irq(int irq, void *_tps, struct pt_regs *regs)
-@@ -505,7 +506,7 @@
- if (!tps)
- return 0;
-
-- init_MUTEX(&tps->lock);
-+ mutex_init(&tps->lock);
- INIT_WORK(&tps->work, tps65010_work, tps);
- tps->irq = -1;
- tps->client.addr = address;
-@@ -695,7 +696,7 @@
- if ((gpio < GPIO1) || (gpio > GPIO4))
- return -EINVAL;
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- defgpio = i2c_smbus_read_byte_data(&the_tps->client, TPS_DEFGPIO);
-
-@@ -720,7 +721,7 @@
- gpio, value ? "high" : "low",
- i2c_smbus_read_byte_data(&the_tps->client, TPS_DEFGPIO));
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return status;
- }
- EXPORT_SYMBOL(tps65010_set_gpio_out_value);
-@@ -745,7 +746,7 @@
- led = LED2;
- }
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- pr_debug("%s: led%i_on 0x%02x\n", DRIVER_NAME, led,
- i2c_smbus_read_byte_data(&the_tps->client,
-@@ -771,7 +772,7 @@
- default:
- printk(KERN_ERR "%s: Wrong mode parameter for set_led()\n",
- DRIVER_NAME);
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return -EINVAL;
- }
-
-@@ -781,7 +782,7 @@
- if (status != 0) {
- printk(KERN_ERR "%s: Failed to write led%i_on register\n",
- DRIVER_NAME, led);
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return status;
- }
-
-@@ -794,7 +795,7 @@
- if (status != 0) {
- printk(KERN_ERR "%s: Failed to write led%i_per register\n",
- DRIVER_NAME, led);
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return status;
- }
-
-@@ -802,7 +803,7 @@
- i2c_smbus_read_byte_data(&the_tps->client,
- TPS_LED1_PER + offs));
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
-
- return status;
- }
-@@ -820,7 +821,7 @@
- if (!the_tps)
- return -ENODEV;
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- vdcdc2 = i2c_smbus_read_byte_data(&the_tps->client, TPS_VDCDC2);
- vdcdc2 &= ~(1 << 1);
-@@ -831,7 +832,7 @@
-
- pr_debug("%s: vibrator %s\n", DRIVER_NAME, value ? "on" : "off");
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return status;
- }
- EXPORT_SYMBOL(tps65010_set_vib);
-@@ -848,7 +849,7 @@
- if (!the_tps)
- return -ENODEV;
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- pr_debug("%s: %s low_pwr, vdcdc1 0x%02x\n", DRIVER_NAME,
- mode ? "enable" : "disable",
-@@ -876,7 +877,7 @@
- pr_debug("%s: vdcdc1 0x%02x\n", DRIVER_NAME,
- i2c_smbus_read_byte_data(&the_tps->client, TPS_VDCDC1));
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
-
- return status;
- }
-@@ -894,7 +895,7 @@
- if (!the_tps)
- return -ENODEV;
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- pr_debug("%s: vregs1 0x%02x\n", DRIVER_NAME,
- i2c_smbus_read_byte_data(&the_tps->client, TPS_VREGS1));
-@@ -909,7 +910,7 @@
- pr_debug("%s: vregs1 0x%02x\n", DRIVER_NAME,
- i2c_smbus_read_byte_data(&the_tps->client, TPS_VREGS1));
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
-
- return status;
- }
-@@ -931,7 +932,7 @@
- if (!the_tps || the_tps->por)
- return -ENODEV;
-
-- down(&the_tps->lock);
-+ mutex_lock(&the_tps->lock);
-
- pr_debug("%s: %s low_pwr, chgconfig 0x%02x vdcdc1 0x%02x\n",
- DRIVER_NAME,
-@@ -959,7 +960,7 @@
- if (status != 0) {
- printk(KERN_ERR "%s: Failed to write chconfig register\n",
- DRIVER_NAME);
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
- return status;
- }
-
-@@ -977,7 +978,7 @@
- pr_debug("%s: vdcdc1 0x%02x\n", DRIVER_NAME,
- i2c_smbus_read_byte_data(&the_tps->client, TPS_VDCDC1));
-
-- up(&the_tps->lock);
-+ mutex_unlock(&the_tps->lock);
-
- return status;
- }
---- linux-2.6.16.orig/include/linux/i2c.h 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/include/linux/i2c.h 2006-03-22 17:06:21.000000000 +0100
-@@ -32,7 +32,7 @@
- #include <linux/mod_devicetable.h>
- #include <linux/device.h> /* for struct device */
- #include <linux/sched.h> /* for completion */
--#include <asm/semaphore.h>
-+#include <linux/mutex.h>
-
- /* --- For i2c-isa ---------------------------------------------------- */
-
-@@ -48,6 +48,7 @@
- struct i2c_adapter;
- struct i2c_client;
- struct i2c_driver;
-+struct i2c_client_address_data;
- union i2c_smbus_data;
-
- /*
-@@ -116,6 +117,7 @@
- struct i2c_driver {
- int id;
- unsigned int class;
-+ struct i2c_client_address_data *address_data;
-
- /* Notifies the driver that a new bus has appeared. This routine
- * can be used by the driver to test if the bus meets its conditions
-@@ -133,6 +135,15 @@
- */
- int (*detach_client)(struct i2c_client *);
-
-+ /* Requests that the driver validate an address on a bus and attach a
-+ * new client. If this routine is supplied, it will be called for
-+ * each device on new buses that appear, provided the bus class
-+ * matches the class field and devices exist at the addresses listed
-+ * in the address_data field. For most drivers, this mechanism can
-+ * be used instead of an attach_adapter routine.
-+ */
-+ int (*detect_client)(struct i2c_adapter *, int addr, int kind);
-+
- /* a ioctl like command that can be used to perform specific functions
- * with the device.
- */
-@@ -225,8 +236,8 @@
- int (*client_unregister)(struct i2c_client *);
-
- /* data fields that are valid for all devices */
-- struct semaphore bus_lock;
-- struct semaphore clist_lock;
-+ struct mutex bus_lock;
-+ struct mutex clist_lock;
-
- int timeout;
- int retries;
-@@ -262,7 +273,7 @@
- #define I2C_CLASS_HWMON (1<<0) /* lm_sensors, ... */
- #define I2C_CLASS_TV_ANALOG (1<<1) /* bttv + friends */
- #define I2C_CLASS_TV_DIGITAL (1<<2) /* dvb cards */
--#define I2C_CLASS_DDC (1<<3) /* i2c-matroxfb ? */
-+#define I2C_CLASS_DATA (1<<3) /* data storage */
- #define I2C_CLASS_CAM_ANALOG (1<<4) /* camera with analog CCD */
- #define I2C_CLASS_CAM_DIGITAL (1<<5) /* most webcams */
- #define I2C_CLASS_SOUND (1<<6) /* sound devices */
-@@ -329,6 +340,10 @@
- struct i2c_client_address_data *address_data,
- int (*found_proc) (struct i2c_adapter *, int, int));
-
-+/* Direct chip probing function to create clients by address */
-+extern int i2c_probe_device(struct i2c_adapter *adapter, int driver_id,
-+ int addr, int kind);
-+
- /* An ioctl like call to set div. parameters of the adapter.
- */
- extern int i2c_control(struct i2c_client *,unsigned int, unsigned long);
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-pxa.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-pxa.c 2006-03-22 17:06:15.000000000 +0100
-@@ -647,7 +647,7 @@
- }
-
- /*
-- * We are protected by the adapter bus semaphore.
-+ * We are protected by the adapter bus mutex.
- */
- static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct i2c_msg *msg, int num)
- {
---- linux-2.6.16.orig/drivers/hwmon/adm1021.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/adm1021.c 2006-03-22 17:06:16.000000000 +0100
-@@ -26,6 +26,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
-
- /* Addresses to scan */
-@@ -92,7 +93,7 @@
- struct class_device *class_dev;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -111,7 +112,6 @@
- u8 remote_temp_offset_prec;
- };
-
--static int adm1021_attach_adapter(struct i2c_adapter *adapter);
- static int adm1021_detect(struct i2c_adapter *adapter, int address, int kind);
- static void adm1021_init_client(struct i2c_client *client);
- static int adm1021_detach_client(struct i2c_client *client);
-@@ -130,7 +130,9 @@
- .name = "adm1021",
- },
- .id = I2C_DRIVERID_ADM1021,
-- .attach_adapter = adm1021_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = adm1021_detect,
- .detach_client = adm1021_detach_client,
- };
-
-@@ -162,10 +164,10 @@
- struct adm1021_data *data = i2c_get_clientdata(client); \
- int temp = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = TEMP_TO_REG(temp); \
- adm1021_write_value(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- set(temp_max, ADM1021_REG_TOS_W);
-@@ -182,13 +184,6 @@
- static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
-
-
--static int adm1021_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, adm1021_detect);
--}
--
- static int adm1021_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- int i;
-@@ -275,7 +270,7 @@
- strlcpy(new_client->name, type_name, I2C_NAME_SIZE);
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -351,7 +346,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct adm1021_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -375,7 +370,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/adm1025.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/adm1025.c 2006-03-22 17:06:16.000000000 +0100
-@@ -53,6 +53,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -107,7 +108,6 @@
- * Functions declaration
- */
-
--static int adm1025_attach_adapter(struct i2c_adapter *adapter);
- static int adm1025_detect(struct i2c_adapter *adapter, int address, int kind);
- static void adm1025_init_client(struct i2c_client *client);
- static int adm1025_detach_client(struct i2c_client *client);
-@@ -122,7 +122,9 @@
- .name = "adm1025",
- },
- .id = I2C_DRIVERID_ADM1025,
-- .attach_adapter = adm1025_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = adm1025_detect,
- .detach_client = adm1025_detach_client,
- };
-
-@@ -133,7 +135,7 @@
- struct adm1025_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -207,11 +209,11 @@
- struct adm1025_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->in_min[offset] = IN_TO_REG(val, in_scale[offset]); \
- i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MIN(offset), \
- data->in_min[offset]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- } \
- static ssize_t set_in##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \
-@@ -221,11 +223,11 @@
- struct adm1025_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->in_max[offset] = IN_TO_REG(val, in_scale[offset]); \
- i2c_smbus_write_byte_data(client, ADM1025_REG_IN_MAX(offset), \
- data->in_max[offset]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- } \
- static DEVICE_ATTR(in##offset##_min, S_IWUSR | S_IRUGO, \
-@@ -247,11 +249,11 @@
- struct adm1025_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->temp_min[offset-1] = TEMP_TO_REG(val); \
- i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_LOW(offset-1), \
- data->temp_min[offset-1]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- } \
- static ssize_t set_temp##offset##_max(struct device *dev, struct device_attribute *attr, const char *buf, \
-@@ -261,11 +263,11 @@
- struct adm1025_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->temp_max[offset-1] = TEMP_TO_REG(val); \
- i2c_smbus_write_byte_data(client, ADM1025_REG_TEMP_HIGH(offset-1), \
- data->temp_max[offset-1]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- } \
- static DEVICE_ATTR(temp##offset##_min, S_IWUSR | S_IRUGO, \
-@@ -307,13 +309,6 @@
- * Real code
- */
-
--static int adm1025_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, adm1025_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -404,7 +399,7 @@
- /* We can fill in the remaining client fields */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -523,7 +518,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct adm1025_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
- int i;
-@@ -558,7 +553,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/adm1026.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/adm1026.c 2006-03-22 17:06:21.000000000 +0100
-@@ -32,6 +32,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
-@@ -260,10 +261,10 @@
- struct adm1026_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- int valid; /* !=0 if following fields are valid */
- unsigned long last_reading; /* In jiffies */
- unsigned long last_config; /* In jiffies */
-@@ -294,13 +295,11 @@
- u8 config3; /* Register value */
- };
-
--static int adm1026_attach_adapter(struct i2c_adapter *adapter);
- static int adm1026_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static int adm1026_detach_client(struct i2c_client *client);
--static int adm1026_read_value(struct i2c_client *client, u8 register);
--static int adm1026_write_value(struct i2c_client *client, u8 register,
-- int value);
-+static int adm1026_read_value(struct i2c_client *client, u8 reg);
-+static int adm1026_write_value(struct i2c_client *client, u8 reg, int value);
- static void adm1026_print_gpio(struct i2c_client *client);
- static void adm1026_fixup_gpio(struct i2c_client *client);
- static struct adm1026_data *adm1026_update_device(struct device *dev);
-@@ -311,18 +310,12 @@
- .driver = {
- .name = "adm1026",
- },
-- .attach_adapter = adm1026_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = adm1026_detect,
- .detach_client = adm1026_detach_client,
- };
-
--static int adm1026_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON)) {
-- return 0;
-- }
-- return i2c_probe(adapter, &addr_data, adm1026_detect);
--}
--
- static int adm1026_detach_client(struct i2c_client *client)
- {
- struct adm1026_data *data = i2c_get_clientdata(client);
-@@ -575,7 +568,7 @@
- int i;
- long value, alarms, gpio;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (!data->valid
- || time_after(jiffies, data->last_reading + ADM1026_DATA_INTERVAL)) {
- /* Things that change quickly */
-@@ -710,7 +703,7 @@
- dev_dbg(&client->dev, "Setting VID from GPIO11-15.\n");
- data->vid = (data->gpio >> 11) & 0x1f;
- data->valid = 1;
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return data;
- }
-
-@@ -739,10 +732,10 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = INS_TO_REG(nr, val);
- adm1026_write_value(client, ADM1026_REG_IN_MIN[nr], data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
-@@ -762,10 +755,10 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = INS_TO_REG(nr, val);
- adm1026_write_value(client, ADM1026_REG_IN_MAX[nr], data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -813,10 +806,10 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[16] = INS_TO_REG(16, val + NEG12_OFFSET);
- adm1026_write_value(client, ADM1026_REG_IN_MIN[16], data->in_min[16]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_in16_max(struct device *dev, struct device_attribute *attr, char *buf)
-@@ -831,10 +824,10 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[16] = INS_TO_REG(16, val+NEG12_OFFSET);
- adm1026_write_value(client, ADM1026_REG_IN_MAX[16], data->in_max[16]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -874,11 +867,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, data->fan_div[nr]);
- adm1026_write_value(client, ADM1026_REG_FAN_MIN(nr),
- data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -939,7 +932,7 @@
- if (new_div == 0) {
- return -EINVAL;
- }
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- orig_div = data->fan_div[nr];
- data->fan_div[nr] = DIV_FROM_REG(new_div);
-
-@@ -958,7 +951,7 @@
- if (data->fan_div[nr] != orig_div) {
- fixup_fan_min(dev,nr,orig_div);
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1001,11 +994,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[nr] = TEMP_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_TEMP_MIN[nr],
- data->temp_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
-@@ -1025,11 +1018,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[nr] = TEMP_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_TEMP_MAX[nr],
- data->temp_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1064,11 +1057,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_offset[nr] = TEMP_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_TEMP_OFFSET[nr],
- data->temp_offset[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1115,11 +1108,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_tmin[nr] = TEMP_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_TEMP_TMIN[nr],
- data->temp_tmin[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1150,11 +1143,11 @@
- int val = simple_strtol(buf, NULL, 10);
-
- if ((val == 1) || (val==0)) {
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->config1 = (data->config1 & ~CFG1_THERM_HOT) | (val << 4);
- adm1026_write_value(client, ADM1026_REG_CONFIG1,
- data->config1);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
- return count;
- }
-@@ -1184,11 +1177,11 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_crit[nr] = TEMP_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_TEMP_THERM[nr],
- data->temp_crit[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1212,10 +1205,10 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->analog_out = DAC_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_DAC, data->analog_out);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1267,7 +1260,7 @@
- int val = simple_strtol(buf, NULL, 10);
- unsigned long mask;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->alarm_mask = val & 0x7fffffff;
- mask = data->alarm_mask
- | (data->gpio_mask & 0x10000 ? 0x80000000 : 0);
-@@ -1282,7 +1275,7 @@
- mask >>= 8;
- adm1026_write_value(client, ADM1026_REG_MASK4,
- mask & 0xff);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1303,7 +1296,7 @@
- int val = simple_strtol(buf, NULL, 10);
- long gpio;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->gpio = val & 0x1ffff;
- gpio = data->gpio;
- adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7,gpio & 0xff);
-@@ -1311,7 +1304,7 @@
- adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15,gpio & 0xff);
- gpio = ((gpio >> 1) & 0x80) | (data->alarms >> 24 & 0x7f);
- adm1026_write_value(client, ADM1026_REG_STATUS4,gpio & 0xff);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1331,7 +1324,7 @@
- int val = simple_strtol(buf, NULL, 10);
- long mask;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->gpio_mask = val & 0x1ffff;
- mask = data->gpio_mask;
- adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7,mask & 0xff);
-@@ -1339,7 +1332,7 @@
- adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15,mask & 0xff);
- mask = ((mask >> 1) & 0x80) | (data->alarm_mask >> 24 & 0x7f);
- adm1026_write_value(client, ADM1026_REG_MASK1,mask & 0xff);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -1359,10 +1352,10 @@
- if (data->pwm1.enable == 1) {
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm1.pwm = PWM_TO_REG(val);
- adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
- return count;
- }
-@@ -1378,14 +1371,14 @@
- struct adm1026_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm1.auto_pwm_min = SENSORS_LIMIT(val,0,255);
- if (data->pwm1.enable == 2) { /* apply immediately */
- data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) |
- PWM_MIN_TO_REG(data->pwm1.auto_pwm_min));
- adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_auto_pwm_max(struct device *dev, struct device_attribute *attr, char *buf)
-@@ -1406,7 +1399,7 @@
- int old_enable;
-
- if ((val >= 0) && (val < 3)) {
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- old_enable = data->pwm1.enable;
- data->pwm1.enable = val;
- data->config1 = (data->config1 & ~CFG1_PWM_AFC)
-@@ -1424,7 +1417,7 @@
- adm1026_write_value(client, ADM1026_REG_PWM,
- data->pwm1.pwm);
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
- return count;
- }
-@@ -1541,7 +1534,7 @@
- /* Fill in the remaining client fields */
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
---- linux-2.6.16.orig/drivers/hwmon/adm1031.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/adm1031.c 2006-03-22 17:06:16.000000000 +0100
-@@ -28,6 +28,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Following macros takes channel parameter starting from 0 to 2 */
- #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr))
-@@ -70,7 +71,7 @@
- struct adm1031_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- int chip_type;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-@@ -97,7 +98,6 @@
- s8 temp_crit[3];
- };
-
--static int adm1031_attach_adapter(struct i2c_adapter *adapter);
- static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind);
- static void adm1031_init_client(struct i2c_client *client);
- static int adm1031_detach_client(struct i2c_client *client);
-@@ -108,7 +108,9 @@
- .driver = {
- .name = "adm1031",
- },
-- .attach_adapter = adm1031_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = adm1031_detect,
- .detach_client = adm1031_detach_client,
- };
-
-@@ -262,10 +264,10 @@
-
- old_fan_mode = data->conf1;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg))) {
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return ret;
- }
- if (((data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1)) & ADM1031_CONF1_AUTO_MODE) ^
-@@ -288,7 +290,7 @@
- }
- data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
- adm1031_write_value(client, ADM1031_REG_CONF1, data->conf1);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -329,11 +331,11 @@
- struct adm1031_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]);
- adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
- data->auto_temp[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_auto_temp_max(struct device *dev, char *buf, int nr)
-@@ -349,11 +351,11 @@
- struct adm1031_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr], data->pwm[nr]);
- adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
- data->temp_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -405,11 +407,11 @@
- int val = simple_strtol(buf, NULL, 10);
- int reg;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) &&
- (((val>>4) & 0xf) != 5)) {
- /* In automatic mode, the only PWM accepted is 33% */
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
- data->pwm[nr] = PWM_TO_REG(val);
-@@ -417,7 +419,7 @@
- adm1031_write_value(client, ADM1031_REG_PWM,
- nr ? ((data->pwm[nr] << 4) & 0xf0) | (reg & 0xf)
- : (data->pwm[nr] & 0xf) | (reg & 0xf0));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -511,7 +513,7 @@
- struct adm1031_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (val) {
- data->fan_min[nr] =
- FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr]));
-@@ -519,7 +521,7 @@
- data->fan_min[nr] = 0xff;
- }
- adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t
-@@ -540,7 +542,7 @@
- if (tmp == 0xff)
- return -EINVAL;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- old_div = FAN_DIV_FROM_REG(data->fan_div[nr]);
- data->fan_div[nr] = (tmp & 0xC0) | (0x3f & data->fan_div[nr]);
- new_min = data->fan_min[nr] * old_div /
-@@ -553,7 +555,7 @@
- data->fan_div[nr]);
- adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr),
- data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -627,11 +629,11 @@
-
- val = simple_strtol(buf, NULL, 10);
- val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[nr] = TEMP_TO_REG(val);
- adm1031_write_value(client, ADM1031_REG_TEMP_MIN(nr),
- data->temp_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t
-@@ -643,11 +645,11 @@
-
- val = simple_strtol(buf, NULL, 10);
- val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[nr] = TEMP_TO_REG(val);
- adm1031_write_value(client, ADM1031_REG_TEMP_MAX(nr),
- data->temp_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t
-@@ -659,11 +661,11 @@
-
- val = simple_strtol(buf, NULL, 10);
- val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_crit[nr] = TEMP_TO_REG(val);
- adm1031_write_value(client, ADM1031_REG_TEMP_CRIT(nr),
- data->temp_crit[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -722,13 +724,6 @@
- static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
-
-
--static int adm1031_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, adm1031_detect);
--}
--
- /* This function is called by i2c_probe */
- static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind)
- {
-@@ -778,7 +773,7 @@
-
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -891,7 +886,7 @@
- struct adm1031_data *data = i2c_get_clientdata(client);
- int chan;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -965,7 +960,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/adm9240.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/adm9240.c 2006-03-22 17:06:16.000000000 +0100
-@@ -49,6 +49,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
-@@ -129,7 +130,6 @@
- return SCALE(reg, 1250, 255);
- }
-
--static int adm9240_attach_adapter(struct i2c_adapter *adapter);
- static int adm9240_detect(struct i2c_adapter *adapter, int address, int kind);
- static void adm9240_init_client(struct i2c_client *client);
- static int adm9240_detach_client(struct i2c_client *client);
-@@ -141,7 +141,9 @@
- .name = "adm9240",
- },
- .id = I2C_DRIVERID_ADM9240,
-- .attach_adapter = adm9240_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = adm9240_detect,
- .detach_client = adm9240_detach_client,
- };
-
-@@ -150,7 +152,7 @@
- enum chips type;
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid;
- unsigned long last_updated_measure;
- unsigned long last_updated_config;
-@@ -195,11 +197,11 @@
- struct adm9240_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[attr->index] = TEMP_TO_REG(val);
- i2c_smbus_write_byte_data(client, ADM9240_REG_TEMP_MAX(attr->index),
- data->temp_max[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -246,11 +248,11 @@
- struct adm9240_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[attr->index] = IN_TO_REG(val, attr->index);
- i2c_smbus_write_byte_data(client, ADM9240_REG_IN_MIN(attr->index),
- data->in_min[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -263,11 +265,11 @@
- struct adm9240_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[attr->index] = IN_TO_REG(val, attr->index);
- i2c_smbus_write_byte_data(client, ADM9240_REG_IN_MAX(attr->index),
- data->in_max[attr->index]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -350,7 +352,7 @@
- int nr = attr->index;
- u8 new_div;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (!val) {
- data->fan_min[nr] = 255;
-@@ -390,7 +392,7 @@
- i2c_smbus_write_byte_data(client, ADM9240_REG_FAN_MIN(nr),
- data->fan_min[nr]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -439,10 +441,10 @@
- struct adm9240_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->aout = AOUT_TO_REG(val);
- i2c_smbus_write_byte_data(client, ADM9240_REG_ANALOG_OUT, data->aout);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static DEVICE_ATTR(aout_output, S_IRUGO | S_IWUSR, show_aout, set_aout);
-@@ -539,7 +541,7 @@
- /* fill in the remaining client fields and attach */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->type = kind;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- if ((err = i2c_attach_client(new_client)))
- goto exit_free;
-@@ -621,13 +623,6 @@
- return err;
- }
-
--static int adm9240_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, adm9240_detect);
--}
--
- static int adm9240_detach_client(struct i2c_client *client)
- {
- struct adm9240_data *data = i2c_get_clientdata(client);
-@@ -691,7 +686,7 @@
- struct adm9240_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- /* minimum measurement cycle: 1.75 seconds */
- if (time_after(jiffies, data->last_updated_measure + (HZ * 7 / 4))
-@@ -771,7 +766,7 @@
- data->last_updated_config = jiffies;
- data->valid = 1;
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return data;
- }
-
---- linux-2.6.16.orig/drivers/hwmon/asb100.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/asb100.c 2006-03-22 17:06:16.000000000 +0100
-@@ -44,6 +44,7 @@
- #include <linux/err.h>
- #include <linux/init.h>
- #include <linux/jiffies.h>
-+#include <linux/mutex.h>
- #include "lm75.h"
-
- /*
-@@ -182,10 +183,10 @@
- struct asb100_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- unsigned long last_updated; /* In jiffies */
-
- /* array of 2 pointers to subclients */
-@@ -210,7 +211,6 @@
- static int asb100_read_value(struct i2c_client *client, u16 reg);
- static void asb100_write_value(struct i2c_client *client, u16 reg, u16 val);
-
--static int asb100_attach_adapter(struct i2c_adapter *adapter);
- static int asb100_detect(struct i2c_adapter *adapter, int address, int kind);
- static int asb100_detach_client(struct i2c_client *client);
- static struct asb100_data *asb100_update_device(struct device *dev);
-@@ -221,7 +221,9 @@
- .name = "asb100",
- },
- .id = I2C_DRIVERID_ASB100,
-- .attach_adapter = asb100_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = asb100_detect,
- .detach_client = asb100_detach_client,
- };
-
-@@ -245,11 +247,11 @@
- struct asb100_data *data = i2c_get_clientdata(client); \
- unsigned long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->in_##reg[nr] = IN_TO_REG(val); \
- asb100_write_value(client, ASB100_REG_IN_##REG(nr), \
- data->in_##reg[nr]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -331,10 +333,10 @@
- struct asb100_data *data = i2c_get_clientdata(client);
- u32 val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- asb100_write_value(client, ASB100_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -351,7 +353,7 @@
- unsigned long val = simple_strtoul(buf, NULL, 10);
- int reg;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- min = FAN_FROM_REG(data->fan_min[nr],
- DIV_FROM_REG(data->fan_div[nr]));
-@@ -381,7 +383,7 @@
- FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- asb100_write_value(client, ASB100_REG_FAN_MIN(nr), data->fan_min[nr]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -461,7 +463,7 @@
- struct asb100_data *data = i2c_get_clientdata(client); \
- unsigned long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- switch (nr) { \
- case 1: case 2: \
- data->reg[nr] = LM75_TEMP_TO_REG(val); \
-@@ -472,7 +474,7 @@
- } \
- asb100_write_value(client, ASB100_REG_TEMP_##REG(nr+1), \
- data->reg[nr]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -574,11 +576,11 @@
- struct asb100_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm &= 0x80; /* keep the enable bit */
- data->pwm |= (0x0f & ASB100_PWM_TO_REG(val));
- asb100_write_value(client, ASB100_REG_PWM1, data->pwm);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -595,11 +597,11 @@
- struct asb100_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm &= 0x0f; /* keep the duty cycle bits */
- data->pwm |= (val ? 0x80 : 0x00);
- asb100_write_value(client, ASB100_REG_PWM1, data->pwm);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -611,18 +613,6 @@
- device_create_file(&new_client->dev, &dev_attr_pwm1_enable); \
- } while (0)
-
--/* This function is called when:
-- asb100_driver is inserted (when this module is loaded), for each
-- available adapter
-- when a new adapter is inserted (and asb100_driver is still present)
-- */
--static int asb100_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, asb100_detect);
--}
--
- static int asb100_detect_subclients(struct i2c_adapter *adapter, int address,
- int kind, struct i2c_client *new_client)
- {
-@@ -729,7 +719,7 @@
- }
-
- new_client = &data->client;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
- new_client->adapter = adapter;
-@@ -789,7 +779,7 @@
- data->type = kind;
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -885,7 +875,7 @@
- struct i2c_client *cl;
- int res, bank;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
-
- bank = (reg >> 8) & 0x0f;
- if (bank > 2)
-@@ -919,7 +909,7 @@
- if (bank > 2)
- i2c_smbus_write_byte_data(client, ASB100_REG_BANK, 0);
-
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
-
- return res;
- }
-@@ -930,7 +920,7 @@
- struct i2c_client *cl;
- int bank;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
-
- bank = (reg >> 8) & 0x0f;
- if (bank > 2)
-@@ -960,7 +950,7 @@
- if (bank > 2)
- i2c_smbus_write_byte_data(client, ASB100_REG_BANK, 0);
-
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- }
-
- static void asb100_init_client(struct i2c_client *client)
-@@ -984,7 +974,7 @@
- struct asb100_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -1042,7 +1032,7 @@
- dev_dbg(&client->dev, "... device update complete\n");
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/atxp1.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/atxp1.c 2006-03-22 17:06:16.000000000 +0100
-@@ -26,6 +26,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- MODULE_LICENSE("GPL");
- MODULE_DESCRIPTION("System voltages control via Attansic ATXP1");
-@@ -44,7 +45,6 @@
-
- I2C_CLIENT_INSMOD_1(atxp1);
-
--static int atxp1_attach_adapter(struct i2c_adapter * adapter);
- static int atxp1_detach_client(struct i2c_client * client);
- static struct atxp1_data * atxp1_update_device(struct device *dev);
- static int atxp1_detect(struct i2c_adapter *adapter, int address, int kind);
-@@ -53,14 +53,16 @@
- .driver = {
- .name = "atxp1",
- },
-- .attach_adapter = atxp1_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = atxp1_detect,
- .detach_client = atxp1_detach_client,
- };
-
- struct atxp1_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- unsigned long last_updated;
- u8 valid;
- struct {
-@@ -80,7 +82,7 @@
- client = to_i2c_client(dev);
- data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
-
-@@ -93,7 +95,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return(data);
- }
-@@ -251,13 +253,6 @@
- static DEVICE_ATTR(gpio2, S_IRUGO | S_IWUSR, atxp1_showgpio2, atxp1_storegpio2);
-
-
--static int atxp1_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, &atxp1_detect);
--};
--
- static int atxp1_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- struct i2c_client * new_client;
-@@ -309,7 +304,7 @@
-
- data->valid = 0;
-
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- err = i2c_attach_client(new_client);
-
---- linux-2.6.16.orig/drivers/hwmon/ds1621.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/ds1621.c 2006-03-22 17:06:16.000000000 +0100
-@@ -28,6 +28,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include "lm75.h"
-
- /* Addresses to scan */
-@@ -72,7 +73,7 @@
- struct ds1621_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -80,7 +81,6 @@
- u8 conf; /* Register encoding, combined */
- };
-
--static int ds1621_attach_adapter(struct i2c_adapter *adapter);
- static int ds1621_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static void ds1621_init_client(struct i2c_client *client);
-@@ -93,7 +93,9 @@
- .name = "ds1621",
- },
- .id = I2C_DRIVERID_DS1621,
-- .attach_adapter = ds1621_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = ds1621_detect,
- .detach_client = ds1621_detach_client,
- };
-
-@@ -156,10 +158,10 @@
- struct ds1621_data *data = ds1621_update_client(dev); \
- u16 val = LM75_TEMP_TO_REG(simple_strtoul(buf, NULL, 10)); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = val; \
- ds1621_write_value(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -178,13 +180,6 @@
- static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max, set_temp_max);
-
-
--static int ds1621_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, ds1621_detect);
--}
--
- /* This function is called by i2c_probe */
- static int ds1621_detect(struct i2c_adapter *adapter, int address,
- int kind)
-@@ -242,7 +237,7 @@
- /* Fill in remaining client fields and put it into the global list */
- strlcpy(new_client->name, "ds1621", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -297,7 +292,7 @@
- struct ds1621_data *data = i2c_get_clientdata(client);
- u8 new_conf;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -327,7 +322,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/fscher.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/fscher.c 2006-03-22 17:06:16.000000000 +0100
-@@ -33,6 +33,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -104,7 +105,6 @@
- * Functions declaration
- */
-
--static int fscher_attach_adapter(struct i2c_adapter *adapter);
- static int fscher_detect(struct i2c_adapter *adapter, int address, int kind);
- static int fscher_detach_client(struct i2c_client *client);
- static struct fscher_data *fscher_update_device(struct device *dev);
-@@ -122,7 +122,9 @@
- .name = "fscher",
- },
- .id = I2C_DRIVERID_FSCHER,
-- .attach_adapter = fscher_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = fscher_detect,
- .detach_client = fscher_detach_client,
- };
-
-@@ -133,7 +135,7 @@
- struct fscher_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -284,13 +286,6 @@
- * Real code
- */
-
--static int fscher_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, fscher_detect);
--}
--
- static int fscher_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- struct i2c_client *new_client;
-@@ -332,7 +327,7 @@
- * global list */
- strlcpy(new_client->name, "fscher", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -417,7 +412,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct fscher_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
-
-@@ -457,7 +452,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
-@@ -472,10 +467,10 @@
- /* bits 0..1, 3..7 reserved => mask with 0x04 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0x04;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_status[FAN_INDEX_FROM_NUM(nr)] &= ~v;
- fscher_write_value(client, reg, v);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -490,10 +485,10 @@
- {
- unsigned long v = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[FAN_INDEX_FROM_NUM(nr)] = v > 0xff ? 0xff : v;
- fscher_write_value(client, reg, data->fan_min[FAN_INDEX_FROM_NUM(nr)]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -518,14 +513,14 @@
- return -EINVAL;
- }
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- /* bits 2..7 reserved => mask with 0x03 */
- data->fan_ripple[FAN_INDEX_FROM_NUM(nr)] &= ~0x03;
- data->fan_ripple[FAN_INDEX_FROM_NUM(nr)] |= v;
-
- fscher_write_value(client, reg, data->fan_ripple[FAN_INDEX_FROM_NUM(nr)]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -552,10 +547,10 @@
- /* bits 2..7 reserved, 0 read only => mask with 0x02 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0x02;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_status[TEMP_INDEX_FROM_NUM(nr)] &= ~v;
- fscher_write_value(client, reg, v);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -609,10 +604,10 @@
- /* bits 1..7 reserved => mask with 0x01 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0x01;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->global_control &= ~v;
- fscher_write_value(client, reg, v);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -631,11 +626,11 @@
- /* bits 0..3 reserved => mask with 0xf0 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0xf0;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->watchdog[2] &= ~0xf0;
- data->watchdog[2] |= v;
- fscher_write_value(client, reg, data->watchdog[2]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -651,10 +646,10 @@
- /* bits 0, 2..7 reserved => mask with 0x02 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0x02;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->watchdog[1] &= ~v;
- fscher_write_value(client, reg, v);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -669,10 +664,10 @@
- {
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0xff;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->watchdog[0] = v;
- fscher_write_value(client, reg, data->watchdog[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
---- linux-2.6.16.orig/drivers/hwmon/fscpos.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/fscpos.c 2006-03-22 17:06:16.000000000 +0100
-@@ -37,6 +37,7 @@
- #include <linux/init.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -85,12 +86,11 @@
- /*
- * Functions declaration
- */
--static int fscpos_attach_adapter(struct i2c_adapter *adapter);
- static int fscpos_detect(struct i2c_adapter *adapter, int address, int kind);
- static int fscpos_detach_client(struct i2c_client *client);
-
--static int fscpos_read_value(struct i2c_client *client, u8 register);
--static int fscpos_write_value(struct i2c_client *client, u8 register, u8 value);
-+static int fscpos_read_value(struct i2c_client *client, u8 reg);
-+static int fscpos_write_value(struct i2c_client *client, u8 reg, u8 value);
- static struct fscpos_data *fscpos_update_device(struct device *dev);
- static void fscpos_init_client(struct i2c_client *client);
-
-@@ -104,7 +104,9 @@
- .name = "fscpos",
- },
- .id = I2C_DRIVERID_FSCPOS,
-- .attach_adapter = fscpos_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = fscpos_detect,
- .detach_client = fscpos_detach_client,
- };
-
-@@ -114,7 +116,7 @@
- struct fscpos_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* 0 until following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -208,13 +210,13 @@
- return -EINVAL;
- }
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- /* bits 2..7 reserved => mask with 0x03 */
- data->fan_ripple[nr - 1] &= ~0x03;
- data->fan_ripple[nr - 1] |= v;
-
- fscpos_write_value(client, reg, data->fan_ripple[nr - 1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -232,10 +234,10 @@
- if (v < 0) v = 0;
- if (v > 255) v = 255;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[nr - 1] = v;
- fscpos_write_value(client, reg, data->pwm[nr - 1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -278,11 +280,11 @@
- /* bits 0..3 reserved => mask with 0xf0 */
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0xf0;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->wdog_control &= ~0xf0;
- data->wdog_control |= v;
- fscpos_write_value(client, reg, data->wdog_control);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -304,10 +306,10 @@
- return -EINVAL;
- }
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->wdog_state &= ~v;
- fscpos_write_value(client, reg, v);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -321,10 +323,10 @@
- {
- unsigned long v = simple_strtoul(buf, NULL, 10) & 0xff;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->wdog_preset = v;
- fscpos_write_value(client, reg, data->wdog_preset);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -431,13 +433,6 @@
- static DEVICE_ATTR(in1_input, S_IRUGO, show_volt_5, NULL);
- static DEVICE_ATTR(in2_input, S_IRUGO, show_volt_batt, NULL);
-
--static int fscpos_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, fscpos_detect);
--}
--
- static int fscpos_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- struct i2c_client *new_client;
-@@ -483,7 +478,7 @@
- strlcpy(new_client->name, "fscpos", I2C_NAME_SIZE);
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -579,7 +574,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct fscpos_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
- int i;
-@@ -625,7 +620,7 @@
- data->last_updated = jiffies;
- data->valid = 1;
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return data;
- }
-
---- linux-2.6.16.orig/drivers/hwmon/gl518sm.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/gl518sm.c 2006-03-22 17:06:16.000000000 +0100
-@@ -43,6 +43,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
-@@ -120,7 +121,7 @@
- struct class_device *class_dev;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -141,7 +142,6 @@
- u8 beep_enable; /* Boolean */
- };
-
--static int gl518_attach_adapter(struct i2c_adapter *adapter);
- static int gl518_detect(struct i2c_adapter *adapter, int address, int kind);
- static void gl518_init_client(struct i2c_client *client);
- static int gl518_detach_client(struct i2c_client *client);
-@@ -155,7 +155,9 @@
- .name = "gl518sm",
- },
- .id = I2C_DRIVERID_GL518,
-- .attach_adapter = gl518_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = gl518_detect,
- .detach_client = gl518_detach_client,
- };
-
-@@ -212,10 +214,10 @@
- struct gl518_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = type##_TO_REG(val); \
- gl518_write_value(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -228,12 +230,12 @@
- int regvalue; \
- unsigned long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- regvalue = gl518_read_value(client, reg); \
- data->value = type##_TO_REG(val); \
- regvalue = (regvalue & ~mask) | (data->value << shift); \
- gl518_write_value(client, reg, regvalue); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -265,7 +267,7 @@
- int regvalue;
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- regvalue = gl518_read_value(client, GL518_REG_FAN_LIMIT);
- data->fan_min[0] = FAN_TO_REG(val,
- DIV_FROM_REG(data->fan_div[0]));
-@@ -280,7 +282,7 @@
- data->beep_mask &= data->alarm_mask;
- gl518_write_value(client, GL518_REG_ALARM, data->beep_mask);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -291,7 +293,7 @@
- int regvalue;
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- regvalue = gl518_read_value(client, GL518_REG_FAN_LIMIT);
- data->fan_min[1] = FAN_TO_REG(val,
- DIV_FROM_REG(data->fan_div[1]));
-@@ -306,7 +308,7 @@
- data->beep_mask &= data->alarm_mask;
- gl518_write_value(client, GL518_REG_ALARM, data->beep_mask);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -343,13 +345,6 @@
- * Real code
- */
-
--static int gl518_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, gl518_detect);
--}
--
- static int gl518_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- int i;
-@@ -407,7 +402,7 @@
- strlcpy(new_client->name, "gl518sm", I2C_NAME_SIZE);
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -525,7 +520,7 @@
- struct gl518_data *data = i2c_get_clientdata(client);
- int val;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -586,7 +581,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/gl520sm.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/gl520sm.c 2006-03-22 17:06:16.000000000 +0100
-@@ -29,6 +29,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Type of the extra sensor */
- static unsigned short extra_sensor_type;
-@@ -99,7 +100,6 @@
- * Function declarations
- */
-
--static int gl520_attach_adapter(struct i2c_adapter *adapter);
- static int gl520_detect(struct i2c_adapter *adapter, int address, int kind);
- static void gl520_init_client(struct i2c_client *client);
- static int gl520_detach_client(struct i2c_client *client);
-@@ -113,7 +113,9 @@
- .name = "gl520sm",
- },
- .id = I2C_DRIVERID_GL520,
-- .attach_adapter = gl520_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = gl520_detect,
- .detach_client = gl520_detach_client,
- };
-
-@@ -121,7 +123,7 @@
- struct gl520_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until the following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -303,7 +305,7 @@
- long v = simple_strtol(buf, NULL, 10);
- u8 r;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (n == 0)
- r = VDD_TO_REG(v);
-@@ -317,7 +319,7 @@
- else
- gl520_write_value(client, reg, r);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -331,7 +333,7 @@
- else
- r = IN_TO_REG(v);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- data->in_max[n] = r;
-
-@@ -340,7 +342,7 @@
- else
- gl520_write_value(client, reg, r);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -373,7 +375,7 @@
- unsigned long v = simple_strtoul(buf, NULL, 10);
- u8 r;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- r = FAN_TO_REG(v, data->fan_div[n - 1]);
- data->fan_min[n - 1] = r;
-
-@@ -390,7 +392,7 @@
- data->beep_mask &= data->alarm_mask;
- gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -409,7 +411,7 @@
- return -EINVAL;
- }
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_div[n - 1] = r;
-
- if (n == 1)
-@@ -417,7 +419,7 @@
- else
- gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x30) | (r << 4));
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -425,10 +427,10 @@
- {
- u8 r = simple_strtoul(buf, NULL, 10)?1:0;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_off = r;
- gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x0c) | (r << 2));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -454,10 +456,10 @@
- {
- long v = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[n - 1] = TEMP_TO_REG(v);;
- gl520_write_value(client, reg, data->temp_max[n - 1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -465,10 +467,10 @@
- {
- long v = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max_hyst[n - 1] = TEMP_TO_REG(v);
- gl520_write_value(client, reg, data->temp_max_hyst[n - 1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -491,10 +493,10 @@
- {
- u8 r = simple_strtoul(buf, NULL, 10)?0:1;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->beep_enable = !r;
- gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x04) | (r << 2));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -502,11 +504,11 @@
- {
- u8 r = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- r &= data->alarm_mask;
- data->beep_mask = r;
- gl520_write_value(client, reg, r);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -515,13 +517,6 @@
- * Real code
- */
-
--static int gl520_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, gl520_detect);
--}
--
- static int gl520_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- struct i2c_client *new_client;
-@@ -561,7 +556,7 @@
- /* Fill in the remaining client fields */
- strlcpy(new_client->name, "gl520sm", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -685,7 +680,7 @@
- struct gl520_data *data = i2c_get_clientdata(client);
- int val;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
-
-@@ -750,7 +745,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/hdaps.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/hdaps.c 2006-03-22 17:06:15.000000000 +0100
-@@ -33,6 +33,7 @@
- #include <linux/module.h>
- #include <linux/timer.h>
- #include <linux/dmi.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- #define HDAPS_LOW_PORT 0x1600 /* first port used by hdaps */
-@@ -70,10 +71,10 @@
- static int rest_x;
- static int rest_y;
-
--static DECLARE_MUTEX(hdaps_sem);
-+static DEFINE_MUTEX(hdaps_mutex);
-
- /*
-- * __get_latch - Get the value from a given port. Callers must hold hdaps_sem.
-+ * __get_latch - Get the value from a given port. Callers must hold hdaps_mutex.
- */
- static inline u8 __get_latch(u16 port)
- {
-@@ -82,7 +83,7 @@
-
- /*
- * __check_latch - Check a port latch for a given value. Returns zero if the
-- * port contains the given value. Callers must hold hdaps_sem.
-+ * port contains the given value. Callers must hold hdaps_mutex.
- */
- static inline int __check_latch(u16 port, u8 val)
- {
-@@ -93,7 +94,7 @@
-
- /*
- * __wait_latch - Wait up to 100us for a port latch to get a certain value,
-- * returning zero if the value is obtained. Callers must hold hdaps_sem.
-+ * returning zero if the value is obtained. Callers must hold hdaps_mutex.
- */
- static int __wait_latch(u16 port, u8 val)
- {
-@@ -110,7 +111,7 @@
-
- /*
- * __device_refresh - request a refresh from the accelerometer. Does not wait
-- * for refresh to complete. Callers must hold hdaps_sem.
-+ * for refresh to complete. Callers must hold hdaps_mutex.
- */
- static void __device_refresh(void)
- {
-@@ -124,7 +125,7 @@
- /*
- * __device_refresh_sync - request a synchronous refresh from the
- * accelerometer. We wait for the refresh to complete. Returns zero if
-- * successful and nonzero on error. Callers must hold hdaps_sem.
-+ * successful and nonzero on error. Callers must hold hdaps_mutex.
- */
- static int __device_refresh_sync(void)
- {
-@@ -134,7 +135,7 @@
-
- /*
- * __device_complete - indicate to the accelerometer that we are done reading
-- * data, and then initiate an async refresh. Callers must hold hdaps_sem.
-+ * data, and then initiate an async refresh. Callers must hold hdaps_mutex.
- */
- static inline void __device_complete(void)
- {
-@@ -152,7 +153,7 @@
- {
- int ret;
-
-- down(&hdaps_sem);
-+ mutex_lock(&hdaps_mutex);
-
- /* do a sync refresh -- we need to be sure that we read fresh data */
- ret = __device_refresh_sync();
-@@ -163,7 +164,7 @@
- __device_complete();
-
- out:
-- up(&hdaps_sem);
-+ mutex_unlock(&hdaps_mutex);
- return ret;
- }
-
-@@ -198,9 +199,9 @@
- {
- int ret;
-
-- down(&hdaps_sem);
-+ mutex_lock(&hdaps_mutex);
- ret = __hdaps_read_pair(port1, port2, val1, val2);
-- up(&hdaps_sem);
-+ mutex_unlock(&hdaps_mutex);
-
- return ret;
- }
-@@ -213,7 +214,7 @@
- {
- int total, ret = -ENXIO;
-
-- down(&hdaps_sem);
-+ mutex_lock(&hdaps_mutex);
-
- outb(0x13, 0x1610);
- outb(0x01, 0x161f);
-@@ -279,7 +280,7 @@
- }
-
- out:
-- up(&hdaps_sem);
-+ mutex_unlock(&hdaps_mutex);
- return ret;
- }
-
-@@ -313,7 +314,7 @@
- };
-
- /*
-- * hdaps_calibrate - Set our "resting" values. Callers must hold hdaps_sem.
-+ * hdaps_calibrate - Set our "resting" values. Callers must hold hdaps_mutex.
- */
- static void hdaps_calibrate(void)
- {
-@@ -325,7 +326,7 @@
- int x, y;
-
- /* Cannot sleep. Try nonblockingly. If we fail, try again later. */
-- if (down_trylock(&hdaps_sem)) {
-+ if (!mutex_trylock(&hdaps_mutex)) {
- mod_timer(&hdaps_timer,jiffies + HDAPS_POLL_PERIOD);
- return;
- }
-@@ -340,7 +341,7 @@
- mod_timer(&hdaps_timer, jiffies + HDAPS_POLL_PERIOD);
-
- out:
-- up(&hdaps_sem);
-+ mutex_unlock(&hdaps_mutex);
- }
-
-
-@@ -420,9 +421,9 @@
- struct device_attribute *attr,
- const char *buf, size_t count)
- {
-- down(&hdaps_sem);
-+ mutex_lock(&hdaps_mutex);
- hdaps_calibrate();
-- up(&hdaps_sem);
-+ mutex_unlock(&hdaps_mutex);
-
- return count;
- }
---- linux-2.6.16.orig/drivers/hwmon/it87.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/it87.c 2006-03-22 17:06:16.000000000 +0100
-@@ -41,6 +41,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
-
-@@ -194,10 +195,10 @@
- struct it87_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -219,14 +220,12 @@
- };
-
-
--static int it87_attach_adapter(struct i2c_adapter *adapter);
- static int it87_isa_attach_adapter(struct i2c_adapter *adapter);
- static int it87_detect(struct i2c_adapter *adapter, int address, int kind);
- static int it87_detach_client(struct i2c_client *client);
-
--static int it87_read_value(struct i2c_client *client, u8 register);
--static int it87_write_value(struct i2c_client *client, u8 register,
-- u8 value);
-+static int it87_read_value(struct i2c_client *client, u8 reg);
-+static int it87_write_value(struct i2c_client *client, u8 reg, u8 value);
- static struct it87_data *it87_update_device(struct device *dev);
- static int it87_check_pwm(struct i2c_client *client);
- static void it87_init_client(struct i2c_client *client, struct it87_data *data);
-@@ -237,7 +236,9 @@
- .name = "it87",
- },
- .id = I2C_DRIVERID_IT87,
-- .attach_adapter = it87_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = it87_detect,
- .detach_client = it87_detach_client,
- };
-
-@@ -290,11 +291,11 @@
- struct it87_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = IN_TO_REG(val);
- it87_write_value(client, IT87_REG_VIN_MIN(nr),
- data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
-@@ -307,11 +308,11 @@
- struct it87_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = IN_TO_REG(val);
- it87_write_value(client, IT87_REG_VIN_MAX(nr),
- data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -381,10 +382,10 @@
- struct it87_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_high[nr] = TEMP_TO_REG(val);
- it87_write_value(client, IT87_REG_TEMP_HIGH(nr), data->temp_high[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
-@@ -397,10 +398,10 @@
- struct it87_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_low[nr] = TEMP_TO_REG(val);
- it87_write_value(client, IT87_REG_TEMP_LOW(nr), data->temp_low[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_temp_offset(offset) \
-@@ -440,7 +441,7 @@
- struct it87_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- data->sensor &= ~(1 << nr);
- data->sensor &= ~(8 << nr);
-@@ -450,11 +451,11 @@
- else if (val == 2)
- data->sensor |= 8 << nr;
- else if (val != 0) {
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
- it87_write_value(client, IT87_REG_TEMP_ENABLE, data->sensor);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_sensor_offset(offset) \
-@@ -524,7 +525,7 @@
- int val = simple_strtol(buf, NULL, 10);
- u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- switch (nr) {
- case 0: data->fan_div[nr] = reg & 0x07; break;
- case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
-@@ -533,7 +534,7 @@
-
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
-@@ -548,7 +549,7 @@
- int i, min[3];
- u8 old;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- old = it87_read_value(client, IT87_REG_FAN_DIV);
-
- for (i = 0; i < 3; i++)
-@@ -576,7 +577,7 @@
- data->fan_min[i]=FAN_TO_REG(min[i], DIV_FROM_REG(data->fan_div[i]));
- it87_write_value(client, IT87_REG_FAN_MIN(i), data->fan_min[i]);
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_pwm_enable(struct device *dev,
-@@ -589,7 +590,7 @@
- struct it87_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (val == 0) {
- int tmp;
-@@ -606,11 +607,11 @@
- /* set saved pwm value, clear FAN_CTLX PWM mode bit */
- it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
- } else {
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
-@@ -626,11 +627,11 @@
- if (val < 0 || val > 255)
- return -EINVAL;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->manual_pwm_ctl[nr] = val;
- if (data->fan_main_ctrl & (1 << nr))
- it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -696,17 +697,6 @@
- #define device_create_file_vid(client) \
- device_create_file(&client->dev, &dev_attr_cpu0_vid)
-
--/* This function is called when:
-- * it87_driver is inserted (when this module is loaded), for each
-- available adapter
-- * when a new adapter is inserted (and it87_driver is still present) */
--static int it87_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, it87_detect);
--}
--
- static int it87_isa_attach_adapter(struct i2c_adapter *adapter)
- {
- return it87_detect(adapter, isa_address, -1);
-@@ -776,7 +766,7 @@
-
- new_client = &data->client;
- if (is_isa)
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
- new_client->adapter = adapter;
-@@ -823,7 +813,7 @@
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -950,10 +940,10 @@
-
- int res;
- if (i2c_is_isa_client(client)) {
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
- res = inb_p(client->addr + IT87_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- } else
- return i2c_smbus_read_byte_data(client, reg);
-@@ -969,10 +959,10 @@
- struct it87_data *data = i2c_get_clientdata(client);
-
- if (i2c_is_isa_client(client)) {
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + IT87_ADDR_REG_OFFSET);
- outb_p(value, client->addr + IT87_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- } else
- return i2c_smbus_write_byte_data(client, reg, value);
-@@ -1098,7 +1088,7 @@
- struct it87_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -1160,7 +1150,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm63.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm63.c 2006-03-22 17:06:16.000000000 +0100
-@@ -45,6 +45,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -126,7 +127,6 @@
- * Functions declaration
- */
-
--static int lm63_attach_adapter(struct i2c_adapter *adapter);
- static int lm63_detach_client(struct i2c_client *client);
-
- static struct lm63_data *lm63_update_device(struct device *dev);
-@@ -142,7 +142,9 @@
- .driver = {
- .name = "lm63",
- },
-- .attach_adapter = lm63_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm63_detect,
- .detach_client = lm63_detach_client,
- };
-
-@@ -153,7 +155,7 @@
- struct lm63_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -192,13 +194,13 @@
- struct lm63_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan[1] = FAN_TO_REG(val);
- i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_LSB,
- data->fan[1] & 0xFF);
- i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_MSB,
- data->fan[1] >> 8);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -222,12 +224,12 @@
- return -EPERM;
-
- val = simple_strtoul(buf, NULL, 10);
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm1_value = val <= 0 ? 0 :
- val >= 255 ? 2 * data->pwm1_freq :
- (val * data->pwm1_freq * 2 + 127) / 255;
- i2c_smbus_write_byte_data(client, LM63_REG_PWM_VALUE, data->pwm1_value);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -253,10 +255,10 @@
- struct lm63_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp8[1] = TEMP8_TO_REG(val);
- i2c_smbus_write_byte_data(client, LM63_REG_LOCAL_HIGH, data->temp8[1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -284,13 +286,13 @@
- long val = simple_strtol(buf, NULL, 10);
- int nr = attr->index;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp11[nr] = TEMP11_TO_REG(val);
- i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
- data->temp11[nr] >> 8);
- i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
- data->temp11[nr] & 0xff);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -314,11 +316,11 @@
- long val = simple_strtol(buf, NULL, 10);
- long hyst;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- hyst = TEMP8_FROM_REG(data->temp8[2]) - val;
- i2c_smbus_write_byte_data(client, LM63_REG_REMOTE_TCRIT_HYST,
- HYST_TO_REG(hyst));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -329,9 +331,19 @@
- return sprintf(buf, "%u\n", data->alarms);
- }
-
-+static ssize_t show_alarm(struct device *dev, struct device_attribute *devattr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ struct lm63_data *data = lm63_update_device(dev);
-+
-+ return sprintf(buf, "%u\n", (data->alarms >> attr->index) & 1);
-+}
-+
- static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
- static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan,
- set_fan, 1);
-+static SENSOR_DEVICE_ATTR(fan1_min_alarm, S_IRUGO, show_alarm, NULL, 0);
-
- static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm1, set_pwm1);
- static DEVICE_ATTR(pwm1_enable, S_IRUGO, show_pwm1_enable, NULL);
-@@ -339,13 +351,18 @@
- static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp8, NULL, 0);
- static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
- set_temp8, 1);
-+static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
-
- static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
-+static SENSOR_DEVICE_ATTR(temp2_input_fault, S_IRUGO, show_alarm, NULL, 2);
- static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
- set_temp11, 1);
-+static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
- static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
- set_temp11, 2);
-+static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
- static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, show_temp8, NULL, 2);
-+static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
- static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst,
- set_temp2_crit_hyst);
-
-@@ -355,13 +372,6 @@
- * Real code
- */
-
--static int lm63_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm63_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -427,7 +437,7 @@
-
- strlcpy(new_client->name, "lm63", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -448,6 +458,8 @@
- &sensor_dev_attr_fan1_input.dev_attr);
- device_create_file(&new_client->dev,
- &sensor_dev_attr_fan1_min.dev_attr);
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_fan1_min_alarm.dev_attr);
- }
- device_create_file(&new_client->dev, &dev_attr_pwm1);
- device_create_file(&new_client->dev, &dev_attr_pwm1_enable);
-@@ -456,13 +468,23 @@
- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp2_input.dev_attr);
- device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_input_fault.dev_attr);
-+ device_create_file(&new_client->dev,
- &sensor_dev_attr_temp2_min.dev_attr);
- device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_min_alarm.dev_attr);
-+ device_create_file(&new_client->dev,
- &sensor_dev_attr_temp1_max.dev_attr);
- device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp1_max_alarm.dev_attr);
-+ device_create_file(&new_client->dev,
- &sensor_dev_attr_temp2_max.dev_attr);
- device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_max_alarm.dev_attr);
-+ device_create_file(&new_client->dev,
- &sensor_dev_attr_temp2_crit.dev_attr);
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_crit_alarm.dev_attr);
- device_create_file(&new_client->dev, &dev_attr_temp2_crit_hyst);
- device_create_file(&new_client->dev, &dev_attr_alarms);
-
-@@ -530,7 +552,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm63_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
- if (data->config & 0x04) { /* tachometer enabled */
-@@ -582,7 +604,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm75.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm75.c 2006-03-22 17:06:16.000000000 +0100
-@@ -25,6 +25,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include "lm75.h"
-
-
-@@ -47,7 +48,7 @@
- struct lm75_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
- u16 temp_input; /* Register values */
-@@ -55,7 +56,6 @@
- u16 temp_hyst;
- };
-
--static int lm75_attach_adapter(struct i2c_adapter *adapter);
- static int lm75_detect(struct i2c_adapter *adapter, int address, int kind);
- static void lm75_init_client(struct i2c_client *client);
- static int lm75_detach_client(struct i2c_client *client);
-@@ -70,7 +70,9 @@
- .name = "lm75",
- },
- .id = I2C_DRIVERID_LM75,
-- .attach_adapter = lm75_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm75_detect,
- .detach_client = lm75_detach_client,
- };
-
-@@ -91,10 +93,10 @@
- struct lm75_data *data = i2c_get_clientdata(client); \
- int temp = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = LM75_TEMP_TO_REG(temp); \
- lm75_write_value(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- set(temp_max, LM75_REG_TEMP_OS);
-@@ -104,13 +106,6 @@
- static DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, show_temp_hyst, set_temp_hyst);
- static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input, NULL);
-
--static int lm75_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm75_detect);
--}
--
- /* This function is called by i2c_probe */
- static int lm75_detect(struct i2c_adapter *adapter, int address, int kind)
- {
-@@ -188,7 +183,7 @@
- /* Fill in the remaining client fields and put it into the global list */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -264,7 +259,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm75_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -277,7 +272,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm77.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm77.c 2006-03-22 17:06:16.000000000 +0100
-@@ -32,6 +32,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, I2C_CLIENT_END };
-@@ -51,7 +52,7 @@
- struct lm77_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid;
- unsigned long last_updated; /* In jiffies */
- int temp_input; /* Temperatures */
-@@ -62,7 +63,6 @@
- u8 alarms;
- };
-
--static int lm77_attach_adapter(struct i2c_adapter *adapter);
- static int lm77_detect(struct i2c_adapter *adapter, int address, int kind);
- static void lm77_init_client(struct i2c_client *client);
- static int lm77_detach_client(struct i2c_client *client);
-@@ -77,7 +77,9 @@
- .driver = {
- .name = "lm77",
- },
-- .attach_adapter = lm77_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm77_detect,
- .detach_client = lm77_detach_client,
- };
-
-@@ -139,10 +141,10 @@
- struct lm77_data *data = i2c_get_clientdata(client); \
- long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = val; \
- lm77_write_value(client, reg, LM77_TEMP_TO_REG(data->value)); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -157,11 +159,11 @@
- struct lm77_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_hyst = data->temp_crit - val;
- lm77_write_value(client, LM77_REG_TEMP_HYST,
- LM77_TEMP_TO_REG(data->temp_hyst));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -173,7 +175,7 @@
- long val = simple_strtoul(buf, NULL, 10);
- int oldcrithyst;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- oldcrithyst = data->temp_crit - data->temp_hyst;
- data->temp_crit = val;
- data->temp_hyst = data->temp_crit - oldcrithyst;
-@@ -181,7 +183,7 @@
- LM77_TEMP_TO_REG(data->temp_crit));
- lm77_write_value(client, LM77_REG_TEMP_HYST,
- LM77_TEMP_TO_REG(data->temp_hyst));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -204,13 +206,6 @@
- static DEVICE_ATTR(alarms, S_IRUGO,
- show_alarms, NULL);
-
--static int lm77_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm77_detect);
--}
--
- /* This function is called by i2c_probe */
- static int lm77_detect(struct i2c_adapter *adapter, int address, int kind)
- {
-@@ -306,7 +301,7 @@
- /* Fill in the remaining client fields and put it into the global list */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -380,7 +375,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm77_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -406,7 +401,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm78.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm78.c 2006-03-22 17:06:16.000000000 +0100
-@@ -27,6 +27,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- /* Addresses to scan */
-@@ -131,10 +132,10 @@
- struct lm78_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -152,13 +153,12 @@
- };
-
-
--static int lm78_attach_adapter(struct i2c_adapter *adapter);
- static int lm78_isa_attach_adapter(struct i2c_adapter *adapter);
- static int lm78_detect(struct i2c_adapter *adapter, int address, int kind);
- static int lm78_detach_client(struct i2c_client *client);
-
--static int lm78_read_value(struct i2c_client *client, u8 register);
--static int lm78_write_value(struct i2c_client *client, u8 register, u8 value);
-+static int lm78_read_value(struct i2c_client *client, u8 reg);
-+static int lm78_write_value(struct i2c_client *client, u8 reg, u8 value);
- static struct lm78_data *lm78_update_device(struct device *dev);
- static void lm78_init_client(struct i2c_client *client);
-
-@@ -168,7 +168,9 @@
- .name = "lm78",
- },
- .id = I2C_DRIVERID_LM78,
-- .attach_adapter = lm78_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm78_detect,
- .detach_client = lm78_detach_client,
- };
-
-@@ -207,10 +209,10 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = IN_TO_REG(val);
- lm78_write_value(client, LM78_REG_IN_MIN(nr), data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -221,10 +223,10 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = IN_TO_REG(val);
- lm78_write_value(client, LM78_REG_IN_MAX(nr), data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -288,10 +290,10 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_over = TEMP_TO_REG(val);
- lm78_write_value(client, LM78_REG_TEMP_OVER, data->temp_over);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -307,10 +309,10 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_hyst = TEMP_TO_REG(val);
- lm78_write_value(client, LM78_REG_TEMP_HYST, data->temp_hyst);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -342,10 +344,10 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- lm78_write_value(client, LM78_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -368,7 +370,7 @@
- unsigned long min;
- u8 reg;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = FAN_FROM_REG(data->fan_min[nr],
- DIV_FROM_REG(data->fan_div[nr]));
-
-@@ -380,7 +382,7 @@
- default:
- dev_err(&client->dev, "fan_div value %ld not "
- "supported. Choose one of 1, 2, 4 or 8!\n", val);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -398,7 +400,7 @@
- data->fan_min[nr] =
- FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- lm78_write_value(client, LM78_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -464,17 +466,6 @@
- }
- static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
-
--/* This function is called when:
-- * lm78_driver is inserted (when this module is loaded), for each
-- available adapter
-- * when a new adapter is inserted (and lm78_driver is still present) */
--static int lm78_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm78_detect);
--}
--
- static int lm78_isa_attach_adapter(struct i2c_adapter *adapter)
- {
- return lm78_detect(adapter, isa_address, -1);
-@@ -548,7 +539,7 @@
-
- new_client = &data->client;
- if (is_isa)
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
- new_client->adapter = adapter;
-@@ -598,7 +589,7 @@
- data->type = kind;
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -697,10 +688,10 @@
- int res;
- if (i2c_is_isa_client(client)) {
- struct lm78_data *data = i2c_get_clientdata(client);
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + LM78_ADDR_REG_OFFSET);
- res = inb_p(client->addr + LM78_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- } else
- return i2c_smbus_read_byte_data(client, reg);
-@@ -717,10 +708,10 @@
- {
- if (i2c_is_isa_client(client)) {
- struct lm78_data *data = i2c_get_clientdata(client);
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + LM78_ADDR_REG_OFFSET);
- outb_p(value, client->addr + LM78_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- } else
- return i2c_smbus_write_byte_data(client, reg, value);
-@@ -742,7 +733,7 @@
- struct lm78_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -786,7 +777,7 @@
- data->fan_div[2] = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm80.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm80.c 2006-03-22 17:06:16.000000000 +0100
-@@ -28,6 +28,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c,
-@@ -108,7 +109,7 @@
- struct lm80_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -130,7 +131,6 @@
- * Functions declaration
- */
-
--static int lm80_attach_adapter(struct i2c_adapter *adapter);
- static int lm80_detect(struct i2c_adapter *adapter, int address, int kind);
- static void lm80_init_client(struct i2c_client *client);
- static int lm80_detach_client(struct i2c_client *client);
-@@ -147,7 +147,9 @@
- .name = "lm80",
- },
- .id = I2C_DRIVERID_LM80,
-- .attach_adapter = lm80_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm80_detect,
- .detach_client = lm80_detach_client,
- };
-
-@@ -191,10 +193,10 @@
- struct lm80_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock);\
-+ mutex_lock(&data->update_lock);\
- data->value = IN_TO_REG(val); \
- lm80_write_value(client, reg, data->value); \
-- up(&data->update_lock);\
-+ mutex_unlock(&data->update_lock);\
- return count; \
- }
- set_in(min0, in_min[0], LM80_REG_IN_MIN(0));
-@@ -241,10 +243,10 @@
- struct lm80_data *data = i2c_get_clientdata(client); \
- long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock);\
-+ mutex_lock(&data->update_lock);\
- data->value = FAN_TO_REG(val, DIV_FROM_REG(data->div)); \
- lm80_write_value(client, reg, data->value); \
-- up(&data->update_lock);\
-+ mutex_unlock(&data->update_lock);\
- return count; \
- }
- set_fan(min1, fan_min[0], LM80_REG_FAN_MIN(1), fan_div[0]);
-@@ -263,7 +265,7 @@
- u8 reg;
-
- /* Save fan_min */
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = FAN_FROM_REG(data->fan_min[nr],
- DIV_FROM_REG(data->fan_div[nr]));
-
-@@ -275,7 +277,7 @@
- default:
- dev_err(&client->dev, "fan_div value %ld not "
- "supported. Choose one of 1, 2, 4 or 8!\n", val);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -286,7 +288,7 @@
- /* Restore fan_min */
- data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- lm80_write_value(client, LM80_REG_FAN_MIN(nr + 1), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -325,10 +327,10 @@
- struct lm80_data *data = i2c_get_clientdata(client); \
- long val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = TEMP_LIMIT_TO_REG(val); \
- lm80_write_value(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- set_temp(hot_max, temp_hot_max, LM80_REG_TEMP_HOT_MAX);
-@@ -386,13 +388,6 @@
- * Real code
- */
-
--static int lm80_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm80_detect);
--}
--
- static int lm80_detect(struct i2c_adapter *adapter, int address, int kind)
- {
- int i, cur;
-@@ -437,7 +432,7 @@
- /* Fill in the remaining client fields and put it into the global list */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -545,7 +540,7 @@
- struct lm80_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) {
- dev_dbg(&client->dev, "Starting lm80 update\n");
-@@ -585,7 +580,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm83.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm83.c 2006-03-22 17:06:16.000000000 +0100
-@@ -12,6 +12,10 @@
- * Since the datasheet omits to give the chip stepping code, I give it
- * here: 0x03 (at register 0xff).
- *
-+ * Also supports the LM82 temp sensor, which is basically a stripped down
-+ * model of the LM83. Datasheet is here:
-+ * http://www.national.com/pf/LM/LM82.html
-+ *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
-@@ -35,6 +39,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -51,7 +56,7 @@
- * Insmod parameters
- */
-
--I2C_CLIENT_INSMOD_1(lm83);
-+I2C_CLIENT_INSMOD_2(lm83, lm82);
-
- /*
- * The LM83 registers
-@@ -114,7 +119,6 @@
- * Functions declaration
- */
-
--static int lm83_attach_adapter(struct i2c_adapter *adapter);
- static int lm83_detect(struct i2c_adapter *adapter, int address, int kind);
- static int lm83_detach_client(struct i2c_client *client);
- static struct lm83_data *lm83_update_device(struct device *dev);
-@@ -128,7 +132,9 @@
- .name = "lm83",
- },
- .id = I2C_DRIVERID_LM83,
-- .attach_adapter = lm83_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm83_detect,
- .detach_client = lm83_detach_client,
- };
-
-@@ -139,7 +145,7 @@
- struct lm83_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -171,11 +177,11 @@
- long val = simple_strtol(buf, NULL, 10);
- int nr = attr->index;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp[nr] = TEMP_TO_REG(val);
- i2c_smbus_write_byte_data(client, LM83_REG_W_HIGH[nr - 4],
- data->temp[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -209,13 +215,6 @@
- * Real code
- */
-
--static int lm83_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm83_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -282,6 +281,9 @@
- if (man_id == 0x01) { /* National Semiconductor */
- if (chip_id == 0x03) {
- kind = lm83;
-+ } else
-+ if (chip_id == 0x01) {
-+ kind = lm82;
- }
- }
-
-@@ -295,12 +297,15 @@
-
- if (kind == lm83) {
- name = "lm83";
-+ } else
-+ if (kind == lm82) {
-+ name = "lm82";
- }
-
- /* We can fill in the remaining client fields */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -318,32 +323,46 @@
- goto exit_detach;
- }
-
-+ /*
-+ * The LM82 can only monitor one external diode which is
-+ * at the same register as the LM83 temp3 entry - so we
-+ * declare 1 and 3 common, and then 2 and 4 only for the LM83.
-+ */
-+
- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp1_input.dev_attr);
- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_input.dev_attr);
-- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp3_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp4_input.dev_attr);
-+
- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp1_max.dev_attr);
- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_max.dev_attr);
-- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp3_max.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp4_max.dev_attr);
-+
- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp1_crit.dev_attr);
- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_crit.dev_attr);
-- device_create_file(&new_client->dev,
- &sensor_dev_attr_temp3_crit.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp4_crit.dev_attr);
-+
- device_create_file(&new_client->dev, &dev_attr_alarms);
-
-+ if (kind == lm83) {
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_input.dev_attr);
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp4_input.dev_attr);
-+
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_max.dev_attr);
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp4_max.dev_attr);
-+
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp2_crit.dev_attr);
-+ device_create_file(&new_client->dev,
-+ &sensor_dev_attr_temp4_crit.dev_attr);
-+ }
-+
- return 0;
-
- exit_detach:
-@@ -373,7 +392,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm83_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
- int nr;
-@@ -393,7 +412,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm85.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm85.c 2006-03-22 17:06:16.000000000 +0100
-@@ -31,6 +31,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* Addresses to scan */
- static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
-@@ -331,10 +332,10 @@
- struct lm85_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- int valid; /* !=0 if following fields are valid */
- unsigned long last_reading; /* In jiffies */
- unsigned long last_config; /* In jiffies */
-@@ -368,13 +369,12 @@
- struct lm85_zone zone[3];
- };
-
--static int lm85_attach_adapter(struct i2c_adapter *adapter);
- static int lm85_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static int lm85_detach_client(struct i2c_client *client);
-
--static int lm85_read_value(struct i2c_client *client, u8 register);
--static int lm85_write_value(struct i2c_client *client, u8 register, int value);
-+static int lm85_read_value(struct i2c_client *client, u8 reg);
-+static int lm85_write_value(struct i2c_client *client, u8 reg, int value);
- static struct lm85_data *lm85_update_device(struct device *dev);
- static void lm85_init_client(struct i2c_client *client);
-
-@@ -384,7 +384,9 @@
- .name = "lm85",
- },
- .id = I2C_DRIVERID_LM85,
-- .attach_adapter = lm85_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm85_detect,
- .detach_client = lm85_detach_client,
- };
-
-@@ -407,10 +409,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val);
- lm85_write_value(client, LM85_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -499,10 +501,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[nr] = PWM_TO_REG(val);
- lm85_write_value(client, LM85_REG_PWM(nr), data->pwm[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_pwm_enable(struct device *dev, char *buf, int nr)
-@@ -559,10 +561,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = INS_TO_REG(nr, val);
- lm85_write_value(client, LM85_REG_IN_MIN(nr), data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_in_max(struct device *dev, char *buf, int nr)
-@@ -577,10 +579,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = INS_TO_REG(nr, val);
- lm85_write_value(client, LM85_REG_IN_MAX(nr), data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_in_reg(offset) \
-@@ -640,10 +642,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[nr] = TEMP_TO_REG(val);
- lm85_write_value(client, LM85_REG_TEMP_MIN(nr), data->temp_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_temp_max(struct device *dev, char *buf, int nr)
-@@ -658,10 +660,10 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[nr] = TEMP_TO_REG(val);
- lm85_write_value(client, LM85_REG_TEMP_MAX(nr), data->temp_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_temp_reg(offset) \
-@@ -713,12 +715,12 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->autofan[nr].config = (data->autofan[nr].config & (~0xe0))
- | ZONE_TO_REG(val) ;
- lm85_write_value(client, LM85_REG_AFAN_CONFIG(nr),
- data->autofan[nr].config);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_pwm_auto_pwm_min(struct device *dev, char *buf, int nr)
-@@ -733,11 +735,11 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->autofan[nr].min_pwm = PWM_TO_REG(val);
- lm85_write_value(client, LM85_REG_AFAN_MINPWM(nr),
- data->autofan[nr].min_pwm);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_pwm_auto_pwm_minctl(struct device *dev, char *buf, int nr)
-@@ -752,7 +754,7 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->autofan[nr].min_off = val;
- lm85_write_value(client, LM85_REG_AFAN_SPIKE1, data->smooth[0]
- | data->syncpwm3
-@@ -760,7 +762,7 @@
- | (data->autofan[1].min_off ? 0x40 : 0)
- | (data->autofan[2].min_off ? 0x80 : 0)
- );
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_pwm_auto_pwm_freq(struct device *dev, char *buf, int nr)
-@@ -775,13 +777,13 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->autofan[nr].freq = FREQ_TO_REG(val);
- lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
- (data->zone[nr].range << 4)
- | data->autofan[nr].freq
- );
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define pwm_auto(offset) \
-@@ -857,7 +859,7 @@
- int min;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = TEMP_FROM_REG(data->zone[nr].limit);
- data->zone[nr].off_desired = TEMP_TO_REG(val);
- data->zone[nr].hyst = HYST_TO_REG(min - val);
-@@ -871,7 +873,7 @@
- (data->zone[2].hyst << 4)
- );
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_temp_auto_temp_min(struct device *dev, char *buf, int nr)
-@@ -886,7 +888,7 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->zone[nr].limit = TEMP_TO_REG(val);
- lm85_write_value(client, LM85_REG_AFAN_LIMIT(nr),
- data->zone[nr].limit);
-@@ -913,7 +915,7 @@
- (data->zone[2].hyst << 4)
- );
- }
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_temp_auto_temp_max(struct device *dev, char *buf, int nr)
-@@ -930,7 +932,7 @@
- int min;
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = TEMP_FROM_REG(data->zone[nr].limit);
- data->zone[nr].max_desired = TEMP_TO_REG(val);
- data->zone[nr].range = RANGE_TO_REG(
-@@ -938,7 +940,7 @@
- lm85_write_value(client, LM85_REG_AFAN_RANGE(nr),
- ((data->zone[nr].range & 0x0f) << 4)
- | (data->autofan[nr].freq & 0x07));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t show_temp_auto_temp_crit(struct device *dev, char *buf, int nr)
-@@ -953,11 +955,11 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->zone[nr].critical = TEMP_TO_REG(val);
- lm85_write_value(client, LM85_REG_AFAN_CRITICAL(nr),
- data->zone[nr].critical);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define temp_auto(offset) \
-@@ -1017,13 +1019,6 @@
- temp_auto(2);
- temp_auto(3);
-
--static int lm85_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm85_detect);
--}
--
- static int lm85_detect(struct i2c_adapter *adapter, int address,
- int kind)
- {
-@@ -1149,7 +1144,7 @@
- /* Fill in the remaining client fields */
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -1368,7 +1363,7 @@
- struct lm85_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if ( !data->valid ||
- time_after(jiffies, data->last_reading + LM85_DATA_INTERVAL) ) {
-@@ -1571,7 +1566,7 @@
-
- data->valid = 1;
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm87.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm87.c 2006-03-22 17:06:16.000000000 +0100
-@@ -60,6 +60,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -150,7 +151,6 @@
- * Functions declaration
- */
-
--static int lm87_attach_adapter(struct i2c_adapter *adapter);
- static int lm87_detect(struct i2c_adapter *adapter, int address, int kind);
- static void lm87_init_client(struct i2c_client *client);
- static int lm87_detach_client(struct i2c_client *client);
-@@ -165,7 +165,9 @@
- .name = "lm87",
- },
- .id = I2C_DRIVERID_LM87,
-- .attach_adapter = lm87_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm87_detect,
- .detach_client = lm87_detach_client,
- };
-
-@@ -176,7 +178,7 @@
- struct lm87_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -253,11 +255,11 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = IN_TO_REG(val, data->in_scale[nr]);
- lm87_write_value(client, nr<6 ? LM87_REG_IN_MIN(nr) :
- LM87_REG_AIN_MIN(nr-6), data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- static void set_in_max(struct device *dev, const char *buf, int nr)
-@@ -266,11 +268,11 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = IN_TO_REG(val, data->in_scale[nr]);
- lm87_write_value(client, nr<6 ? LM87_REG_IN_MAX(nr) :
- LM87_REG_AIN_MAX(nr-6), data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- #define set_in(offset) \
-@@ -327,10 +329,10 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_low[nr] = TEMP_TO_REG(val);
- lm87_write_value(client, LM87_REG_TEMP_LOW[nr], data->temp_low[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- static void set_temp_high(struct device *dev, const char *buf, int nr)
-@@ -339,10 +341,10 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_high[nr] = TEMP_TO_REG(val);
- lm87_write_value(client, LM87_REG_TEMP_HIGH[nr], data->temp_high[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- #define set_temp(offset) \
-@@ -411,11 +413,11 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val,
- FAN_DIV_FROM_REG(data->fan_div[nr]));
- lm87_write_value(client, LM87_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- }
-
- /* Note: we save and restore the fan minimum here, because its value is
-@@ -431,7 +433,7 @@
- unsigned long min;
- u8 reg;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = FAN_FROM_REG(data->fan_min[nr],
- FAN_DIV_FROM_REG(data->fan_div[nr]));
-
-@@ -441,7 +443,7 @@
- case 4: data->fan_div[nr] = 2; break;
- case 8: data->fan_div[nr] = 3; break;
- default:
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -459,7 +461,7 @@
- data->fan_min[nr] = FAN_TO_REG(min, val);
- lm87_write_value(client, LM87_REG_FAN_MIN(nr),
- data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -522,10 +524,10 @@
- struct lm87_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->aout = AOUT_TO_REG(val);
- lm87_write_value(client, LM87_REG_AOUT, data->aout);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static DEVICE_ATTR(aout_output, S_IRUGO | S_IWUSR, show_aout, set_aout);
-@@ -534,13 +536,6 @@
- * Real code
- */
-
--static int lm87_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm87_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -589,7 +584,7 @@
- /* We can fill in the remaining client fields */
- strlcpy(new_client->name, "lm87", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -744,7 +739,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm87_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
- int i, j;
-@@ -813,7 +808,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm90.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm90.c 2006-03-22 17:06:16.000000000 +0100
-@@ -78,6 +78,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /*
- * Addresses to scan
-@@ -174,7 +175,6 @@
- * Functions declaration
- */
-
--static int lm90_attach_adapter(struct i2c_adapter *adapter);
- static int lm90_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static void lm90_init_client(struct i2c_client *client);
-@@ -190,7 +190,9 @@
- .name = "lm90",
- },
- .id = I2C_DRIVERID_LM90,
-- .attach_adapter = lm90_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm90_detect,
- .detach_client = lm90_detach_client,
- };
-
-@@ -201,7 +203,7 @@
- struct lm90_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
- int kind;
-@@ -247,13 +249,13 @@
- long val = simple_strtol(buf, NULL, 10);
- int nr = attr->index;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (data->kind == adt7461)
- data->temp8[nr] = TEMP1_TO_REG_ADT7461(val);
- else
- data->temp8[nr] = TEMP1_TO_REG(val);
- i2c_smbus_write_byte_data(client, reg[nr - 1], data->temp8[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -281,7 +283,7 @@
- long val = simple_strtol(buf, NULL, 10);
- int nr = attr->index;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (data->kind == adt7461)
- data->temp11[nr] = TEMP2_TO_REG_ADT7461(val);
- else
-@@ -290,7 +292,7 @@
- data->temp11[nr] >> 8);
- i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
- data->temp11[nr] & 0xff);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -311,11 +313,11 @@
- long val = simple_strtol(buf, NULL, 10);
- long hyst;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- hyst = TEMP1_FROM_REG(data->temp8[3]) - val;
- i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
- HYST_TO_REG(hyst));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -326,23 +328,42 @@
- return sprintf(buf, "%d\n", data->alarms);
- }
-
--static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp8, NULL, 0);
--static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
--static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
-- set_temp8, 1);
--static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
-- set_temp11, 1);
--static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
-- set_temp8, 2);
--static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
-- set_temp11, 2);
--static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
-- set_temp8, 3);
--static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
-- set_temp8, 4);
--static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
-- set_temphyst, 3);
--static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 4);
-+static ssize_t show_alarm(struct device *dev, struct device_attribute
-+ *devattr, char *buf)
-+{
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ struct lm90_data *data = lm90_update_device(dev);
-+
-+ return sprintf(buf, "%d\n", (data->alarms >> attr->index) & 1);
-+}
-+
-+static struct sensor_device_attribute lm90_sensor_attr[] = {
-+ SENSOR_ATTR(temp1_input, S_IRUGO, show_temp8, NULL, 0),
-+ SENSOR_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0),
-+ SENSOR_ATTR(temp2_input_fault, S_IRUGO, show_alarm, NULL, 2),
-+ SENSOR_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
-+ set_temp8, 1),
-+ SENSOR_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5),
-+ SENSOR_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
-+ set_temp11, 1),
-+ SENSOR_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3),
-+ SENSOR_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
-+ set_temp8, 2),
-+ SENSOR_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6),
-+ SENSOR_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
-+ set_temp11, 2),
-+ SENSOR_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4),
-+ SENSOR_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
-+ set_temp8, 3),
-+ SENSOR_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0),
-+ SENSOR_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
-+ set_temp8, 4),
-+ SENSOR_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1),
-+ SENSOR_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
-+ set_temphyst, 3),
-+ SENSOR_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 4),
-+};
-+
- static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
-
- /* pec used for ADM1032 only */
-@@ -413,13 +434,6 @@
- return 0;
- }
-
--static int lm90_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm90_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -428,7 +442,7 @@
- {
- struct i2c_client *new_client;
- struct lm90_data *data;
-- int err = 0;
-+ int i, err = 0;
- const char *name = "";
-
- if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
-@@ -558,7 +572,7 @@
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
- data->kind = kind;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -574,26 +588,13 @@
- goto exit_detach;
- }
-
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp1_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_input.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp1_min.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_min.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp1_max.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_max.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp1_crit.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_crit.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp1_crit_hyst.dev_attr);
-- device_create_file(&new_client->dev,
-- &sensor_dev_attr_temp2_crit_hyst.dev_attr);
-+ for (i = 0; i < ARRAY_SIZE(lm90_sensor_attr); i++) {
-+ err = device_create_file(&new_client->dev,
-+ &lm90_sensor_attr[i].dev_attr);
-+ if (err)
-+ goto exit_class;
-+ }
-+
- device_create_file(&new_client->dev, &dev_attr_alarms);
-
- if (new_client->flags & I2C_CLIENT_PEC)
-@@ -601,6 +602,9 @@
-
- return 0;
-
-+exit_class:
-+ dev_err(&new_client->dev, "Sysfs interface creation failed\n");
-+ hwmon_device_unregister(data->class_dev);
- exit_detach:
- i2c_detach_client(new_client);
- exit_free:
-@@ -646,7 +650,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm90_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
- u8 oldh, newh, l;
-@@ -692,7 +696,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/lm92.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/lm92.c 2006-03-22 17:06:16.000000000 +0100
-@@ -46,6 +46,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* The LM92 and MAX6635 have 2 two-state pins for address selection,
- resulting in 4 possible addresses. */
-@@ -96,7 +97,7 @@
- struct lm92_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -114,7 +115,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct lm92_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ)
- || !data->valid) {
-@@ -134,7 +135,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
-@@ -158,10 +159,10 @@
- struct lm92_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = TEMP_TO_REG(val); \
- i2c_smbus_write_word_data(client, reg, swab16(data->value)); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- set_temp(temp1_crit, LM92_REG_TEMP_CRIT);
-@@ -194,11 +195,11 @@
- struct lm92_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp1_hyst = TEMP_FROM_REG(data->temp1_crit) - val;
- i2c_smbus_write_word_data(client, LM92_REG_TEMP_HYST,
- swab16(TEMP_TO_REG(data->temp1_hyst)));
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -348,7 +349,7 @@
- /* Fill in the remaining client fields */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the i2c subsystem a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -383,13 +384,6 @@
- return err;
- }
-
--static int lm92_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, lm92_detect);
--}
--
- static int lm92_detach_client(struct i2c_client *client)
- {
- struct lm92_data *data = i2c_get_clientdata(client);
-@@ -414,7 +408,9 @@
- .name = "lm92",
- },
- .id = I2C_DRIVERID_LM92,
-- .attach_adapter = lm92_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = lm92_detect,
- .detach_client = lm92_detach_client,
- };
-
---- linux-2.6.16.orig/drivers/hwmon/max1619.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/max1619.c 2006-03-22 17:06:16.000000000 +0100
-@@ -33,6 +33,7 @@
- #include <linux/i2c.h>
- #include <linux/hwmon.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a,
- 0x29, 0x2a, 0x2b,
-@@ -78,7 +79,6 @@
- * Functions declaration
- */
-
--static int max1619_attach_adapter(struct i2c_adapter *adapter);
- static int max1619_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static void max1619_init_client(struct i2c_client *client);
-@@ -93,7 +93,9 @@
- .driver = {
- .name = "max1619",
- },
-- .attach_adapter = max1619_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = max1619_detect,
- .detach_client = max1619_detach_client,
- };
-
-@@ -104,7 +106,7 @@
- struct max1619_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -141,10 +143,10 @@
- struct max1619_data *data = i2c_get_clientdata(client); \
- long val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->value = TEMP_TO_REG(val); \
- i2c_smbus_write_byte_data(client, reg, data->value); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
-
-@@ -175,13 +177,6 @@
- * Real code
- */
-
--static int max1619_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, max1619_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -262,7 +257,7 @@
- /* We can fill in the remaining client fields */
- strlcpy(new_client->name, name, I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -330,7 +325,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct max1619_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
- dev_dbg(&client->dev, "Updating max1619 data.\n");
-@@ -353,7 +348,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/sis5595.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/sis5595.c 2006-03-22 17:06:15.000000000 +0100
-@@ -60,6 +60,7 @@
- #include <linux/err.h>
- #include <linux/init.h>
- #include <linux/jiffies.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
-
-@@ -167,9 +168,9 @@
- struct sis5595_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
- char maxins; /* == 3 if temp enabled, otherwise == 4 */
-@@ -192,8 +193,8 @@
- static int sis5595_detect(struct i2c_adapter *adapter);
- static int sis5595_detach_client(struct i2c_client *client);
-
--static int sis5595_read_value(struct i2c_client *client, u8 register);
--static int sis5595_write_value(struct i2c_client *client, u8 register, u8 value);
-+static int sis5595_read_value(struct i2c_client *client, u8 reg);
-+static int sis5595_write_value(struct i2c_client *client, u8 reg, u8 value);
- static struct sis5595_data *sis5595_update_device(struct device *dev);
- static void sis5595_init_client(struct i2c_client *client);
-
-@@ -231,10 +232,10 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = IN_TO_REG(val);
- sis5595_write_value(client, SIS5595_REG_IN_MIN(nr), data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -245,10 +246,10 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = IN_TO_REG(val);
- sis5595_write_value(client, SIS5595_REG_IN_MAX(nr), data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -310,10 +311,10 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_over = TEMP_TO_REG(val);
- sis5595_write_value(client, SIS5595_REG_TEMP_OVER, data->temp_over);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -329,10 +330,10 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- long val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_hyst = TEMP_TO_REG(val);
- sis5595_write_value(client, SIS5595_REG_TEMP_HYST, data->temp_hyst);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -364,10 +365,10 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- sis5595_write_value(client, SIS5595_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -390,7 +391,7 @@
- unsigned long val = simple_strtoul(buf, NULL, 10);
- int reg;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- min = FAN_FROM_REG(data->fan_min[nr],
- DIV_FROM_REG(data->fan_div[nr]));
- reg = sis5595_read_value(client, SIS5595_REG_FANDIV);
-@@ -403,7 +404,7 @@
- default:
- dev_err(&client->dev, "fan_div value %ld not "
- "supported. Choose one of 1, 2, 4 or 8!\n", val);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -419,7 +420,7 @@
- data->fan_min[nr] =
- FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- sis5595_write_value(client, SIS5595_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -527,7 +528,7 @@
-
- new_client = &data->client;
- new_client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- i2c_set_clientdata(new_client, data);
- new_client->adapter = adapter;
- new_client->driver = &sis5595_driver;
-@@ -548,7 +549,7 @@
- strlcpy(new_client->name, "sis5595", I2C_NAME_SIZE);
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -635,20 +636,20 @@
- int res;
-
- struct sis5595_data *data = i2c_get_clientdata(client);
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + SIS5595_ADDR_REG_OFFSET);
- res = inb_p(client->addr + SIS5595_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- }
-
- static int sis5595_write_value(struct i2c_client *client, u8 reg, u8 value)
- {
- struct sis5595_data *data = i2c_get_clientdata(client);
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb_p(reg, client->addr + SIS5595_ADDR_REG_OFFSET);
- outb_p(value, client->addr + SIS5595_DATA_REG_OFFSET);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- }
-
-@@ -667,7 +668,7 @@
- struct sis5595_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -707,7 +708,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/smsc47b397.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/smsc47b397.c 2006-03-22 17:06:15.000000000 +0100
-@@ -35,6 +35,7 @@
- #include <linux/hwmon.h>
- #include <linux/err.h>
- #include <linux/init.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- /* Address is autodetected, there is no default value */
-@@ -92,9 +93,9 @@
- struct smsc47b397_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- unsigned long last_updated; /* in jiffies */
- int valid;
-
-@@ -108,10 +109,10 @@
- struct smsc47b397_data *data = i2c_get_clientdata(client);
- int res;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- outb(reg, client->addr);
- res = inb_p(client->addr + 1);
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- }
-
-@@ -121,7 +122,7 @@
- struct smsc47b397_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
- dev_dbg(&client->dev, "starting device update...\n");
-@@ -144,7 +145,7 @@
- dev_dbg(&client->dev, "... device update complete\n");
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
-@@ -254,14 +255,14 @@
- new_client = &data->client;
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- new_client->adapter = adapter;
- new_client->driver = &smsc47b397_driver;
- new_client->flags = 0;
-
- strlcpy(new_client->name, "smsc47b397", I2C_NAME_SIZE);
-
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- if ((err = i2c_attach_client(new_client)))
- goto error_free;
---- linux-2.6.16.orig/drivers/hwmon/smsc47m1.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/smsc47m1.c 2006-03-22 17:06:15.000000000 +0100
-@@ -34,6 +34,7 @@
- #include <linux/hwmon.h>
- #include <linux/err.h>
- #include <linux/init.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- /* Address is autodetected, there is no default value */
-@@ -102,9 +103,9 @@
- struct smsc47m1_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- unsigned long last_updated; /* In jiffies */
-
- u8 fan[2]; /* Register value */
-@@ -188,18 +189,18 @@
- struct smsc47m1_data *data = i2c_get_clientdata(client);
- long rpmdiv, val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- rpmdiv = val * DIV_FROM_REG(data->fan_div[nr]);
-
- if (983040 > 192 * rpmdiv || 2 * rpmdiv > 983040) {
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
- data->fan_preload[nr] = 192 - ((983040 + rpmdiv / 2) / rpmdiv);
- smsc47m1_write_value(client, SMSC47M1_REG_FAN_PRELOAD(nr),
- data->fan_preload[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -220,14 +221,14 @@
- if (new_div == old_div) /* No change */
- return count;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- switch (new_div) {
- case 1: data->fan_div[nr] = 0; break;
- case 2: data->fan_div[nr] = 1; break;
- case 4: data->fan_div[nr] = 2; break;
- case 8: data->fan_div[nr] = 3; break;
- default:
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -241,7 +242,7 @@
- data->fan_preload[nr] = SENSORS_LIMIT(tmp, 0, 191);
- smsc47m1_write_value(client, SMSC47M1_REG_FAN_PRELOAD(nr),
- data->fan_preload[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -257,12 +258,12 @@
- if (val < 0 || val > 255)
- return -EINVAL;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[nr] &= 0x81; /* Preserve additional bits */
- data->pwm[nr] |= PWM_TO_REG(val);
- smsc47m1_write_value(client, SMSC47M1_REG_PWM(nr),
- data->pwm[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -278,12 +279,12 @@
- if (val != 0 && val != 1)
- return -EINVAL;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[nr] &= 0xFE; /* preserve the other bits */
- data->pwm[nr] |= !val;
- smsc47m1_write_value(client, SMSC47M1_REG_PWM(nr),
- data->pwm[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-@@ -408,13 +409,13 @@
- new_client = &data->client;
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- new_client->adapter = adapter;
- new_client->driver = &smsc47m1_driver;
- new_client->flags = 0;
-
- strlcpy(new_client->name, "smsc47m1", I2C_NAME_SIZE);
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* If no function is properly configured, there's no point in
- actually registering the chip. */
-@@ -512,17 +513,17 @@
- {
- int res;
-
-- down(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
-+ mutex_lock(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
- res = inb_p(client->addr + reg);
-- up(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
-+ mutex_unlock(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
- return res;
- }
-
- static void smsc47m1_write_value(struct i2c_client *client, u8 reg, u8 value)
- {
-- down(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
-+ mutex_lock(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
- outb_p(value, client->addr + reg);
-- up(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
-+ mutex_unlock(&((struct smsc47m1_data *) i2c_get_clientdata(client))->lock);
- }
-
- static struct smsc47m1_data *smsc47m1_update_device(struct device *dev,
-@@ -531,7 +532,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct smsc47m1_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || init) {
- int i;
-@@ -558,7 +559,7 @@
- data->last_updated = jiffies;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return data;
- }
-
---- linux-2.6.16.orig/drivers/hwmon/via686a.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/via686a.c 2006-03-22 17:06:15.000000000 +0100
-@@ -39,6 +39,7 @@
- #include <linux/hwmon.h>
- #include <linux/err.h>
- #include <linux/init.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
-
-@@ -296,7 +297,7 @@
- struct via686a_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -355,11 +356,11 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = IN_TO_REG(val, nr);
- via686a_write_value(client, VIA686A_REG_IN_MIN(nr),
- data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_in_max(struct device *dev, const char *buf,
-@@ -368,11 +369,11 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = IN_TO_REG(val, nr);
- via686a_write_value(client, VIA686A_REG_IN_MAX(nr),
- data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_in_offset(offset) \
-@@ -432,11 +433,11 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_over[nr] = TEMP_TO_REG(val);
- via686a_write_value(client, VIA686A_REG_TEMP_OVER[nr],
- data->temp_over[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp_hyst(struct device *dev, const char *buf,
-@@ -445,11 +446,11 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_hyst[nr] = TEMP_TO_REG(val);
- via686a_write_value(client, VIA686A_REG_TEMP_HYST[nr],
- data->temp_hyst[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- #define show_temp_offset(offset) \
-@@ -508,10 +509,10 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- via686a_write_value(client, VIA686A_REG_FAN_MIN(nr+1), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_fan_div(struct device *dev, const char *buf,
-@@ -521,12 +522,12 @@
- int val = simple_strtol(buf, NULL, 10);
- int old;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- old = via686a_read_value(client, VIA686A_REG_FANDIV);
- data->fan_div[nr] = DIV_TO_REG(val);
- old = (old & 0x0f) | (data->fan_div[1] << 6) | (data->fan_div[0] << 4);
- via686a_write_value(client, VIA686A_REG_FANDIV, old);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -639,7 +640,7 @@
- strlcpy(new_client->name, client_name, I2C_NAME_SIZE);
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
- goto exit_free;
-@@ -733,7 +734,7 @@
- struct via686a_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -788,7 +789,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/vt8231.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/vt8231.c 2006-03-22 17:06:15.000000000 +0100
-@@ -35,6 +35,7 @@
- #include <linux/hwmon-sysfs.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
-
- static int force_addr;
-@@ -148,7 +149,7 @@
-
- struct vt8231_data {
- struct i2c_client client;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- struct class_device *class_dev;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-@@ -223,10 +224,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[nr] = SENSORS_LIMIT(((val * 958) / 10000) + 3, 0, 255);
- vt8231_write_value(client, regvoltmin[nr], data->in_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -239,10 +240,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[nr] = SENSORS_LIMIT(((val * 958) / 10000) + 3, 0, 255);
- vt8231_write_value(client, regvoltmax[nr], data->in_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -281,11 +282,11 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_min[5] = SENSORS_LIMIT(((val * 958 * 34) / (10000 * 54)) + 3,
- 0, 255);
- vt8231_write_value(client, regvoltmin[5], data->in_min[5]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -296,11 +297,11 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->in_max[5] = SENSORS_LIMIT(((val * 958 * 34) / (10000 * 54)) + 3,
- 0, 255);
- vt8231_write_value(client, regvoltmax[5], data->in_max[5]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -351,10 +352,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[0] = SENSORS_LIMIT((val + 500) / 1000, 0, 255);
- vt8231_write_value(client, regtempmax[0], data->temp_max[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp0_min(struct device *dev, struct device_attribute *attr,
-@@ -364,10 +365,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[0] = SENSORS_LIMIT((val + 500) / 1000, 0, 255);
- vt8231_write_value(client, regtempmin[0], data->temp_min[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -407,10 +408,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_max[nr] = SENSORS_LIMIT(TEMP_MAXMIN_TO_REG(val), 0, 255);
- vt8231_write_value(client, regtempmax[nr], data->temp_max[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
- static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
-@@ -422,10 +423,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- int val = simple_strtol(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->temp_min[nr] = SENSORS_LIMIT(TEMP_MAXMIN_TO_REG(val), 0, 255);
- vt8231_write_value(client, regtempmin[nr], data->temp_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -520,10 +521,10 @@
- struct vt8231_data *data = i2c_get_clientdata(client);
- int val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
- vt8231_write_value(client, VT8231_REG_FAN_MIN(nr), data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -539,7 +540,7 @@
- long min = FAN_FROM_REG(data->fan_min[nr],
- DIV_FROM_REG(data->fan_div[nr]));
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- switch (val) {
- case 1: data->fan_div[nr] = 0; break;
- case 2: data->fan_div[nr] = 1; break;
-@@ -548,7 +549,7 @@
- default:
- dev_err(&client->dev, "fan_div value %ld not supported."
- "Choose one of 1, 2, 4 or 8!\n", val);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-@@ -558,7 +559,7 @@
-
- old = (old & 0x0f) | (data->fan_div[1] << 6) | (data->fan_div[0] << 4);
- vt8231_write_value(client, VT8231_REG_FANDIV, old);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -660,7 +661,7 @@
- /* Fill in the remaining client fields and put into the global list */
- strlcpy(client->name, "vt8231", I2C_NAME_SIZE);
-
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(client)))
-@@ -745,7 +746,7 @@
- int i;
- u16 low;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -804,7 +805,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/w83627ehf.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/w83627ehf.c 2006-03-22 17:06:16.000000000 +0100
-@@ -30,10 +30,7 @@
- Supports the following chips:
-
- Chip #vin #fan #pwm #temp chip_id man_id
-- w83627ehf - 5 - 3 0x88 0x5ca3
--
-- This is a preliminary version of the driver, only supporting the
-- fan and temperature inputs. The chip does much more than that.
-+ w83627ehf 10 5 - 3 0x88 0x5ca3
- */
-
- #include <linux/module.h>
-@@ -42,7 +39,9 @@
- #include <linux/i2c.h>
- #include <linux/i2c-isa.h>
- #include <linux/hwmon.h>
-+#include <linux/hwmon-sysfs.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
- #include "lm75.h"
-
-@@ -119,6 +118,14 @@
- static const u16 W83627EHF_REG_FAN[] = { 0x28, 0x29, 0x2a, 0x3f, 0x553 };
- static const u16 W83627EHF_REG_FAN_MIN[] = { 0x3b, 0x3c, 0x3d, 0x3e, 0x55c };
-
-+/* The W83627EHF registers for nr=7,8,9 are in bank 5 */
-+#define W83627EHF_REG_IN_MAX(nr) ((nr < 7) ? (0x2b + (nr) * 2) : \
-+ (0x554 + (((nr) - 7) * 2)))
-+#define W83627EHF_REG_IN_MIN(nr) ((nr < 7) ? (0x2c + (nr) * 2) : \
-+ (0x555 + (((nr) - 7) * 2)))
-+#define W83627EHF_REG_IN(nr) ((nr < 7) ? (0x20 + (nr)) : \
-+ (0x550 + (nr) - 7))
-+
- #define W83627EHF_REG_TEMP1 0x27
- #define W83627EHF_REG_TEMP1_HYST 0x3a
- #define W83627EHF_REG_TEMP1_OVER 0x39
-@@ -134,6 +141,10 @@
- #define W83627EHF_REG_DIODE 0x59
- #define W83627EHF_REG_SMI_OVT 0x4C
-
-+#define W83627EHF_REG_ALARM1 0x459
-+#define W83627EHF_REG_ALARM2 0x45A
-+#define W83627EHF_REG_ALARM3 0x45B
-+
- /*
- * Conversions
- */
-@@ -170,6 +181,20 @@
- return (temp + 500) / 1000;
- }
-
-+/* Some of analog inputs have internal scaling (2x), 8mV is ADC LSB */
-+
-+static u8 scale_in[10] = { 8, 8, 16, 16, 8, 8, 8, 16, 16, 8 };
-+
-+static inline long in_from_reg(u8 reg, u8 nr)
-+{
-+ return reg * scale_in[nr];
-+}
-+
-+static inline u8 in_to_reg(u32 val, u8 nr)
-+{
-+ return SENSORS_LIMIT(((val + (scale_in[nr] / 2)) / scale_in[nr]), 0, 255);
-+}
-+
- /*
- * Data structures and manipulation thereof
- */
-@@ -177,13 +202,16 @@
- struct w83627ehf_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
- /* Register values */
-+ u8 in[10]; /* Register value */
-+ u8 in_max[10]; /* Register value */
-+ u8 in_min[10]; /* Register value */
- u8 fan[5];
- u8 fan_min[5];
- u8 fan_div[5];
-@@ -194,6 +222,7 @@
- s16 temp[2];
- s16 temp_max[2];
- s16 temp_max_hyst[2];
-+ u32 alarms;
- };
-
- static inline int is_word_sized(u16 reg)
-@@ -230,7 +259,7 @@
- struct w83627ehf_data *data = i2c_get_clientdata(client);
- int res, word_sized = is_word_sized(reg);
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
-
- w83627ehf_set_bank(client, reg);
- outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET);
-@@ -242,7 +271,7 @@
- }
- w83627ehf_reset_bank(client, reg);
-
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
-
- return res;
- }
-@@ -252,7 +281,7 @@
- struct w83627ehf_data *data = i2c_get_clientdata(client);
- int word_sized = is_word_sized(reg);
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
-
- w83627ehf_set_bank(client, reg);
- outb_p(reg & 0xff, client->addr + ADDR_REG_OFFSET);
-@@ -264,7 +293,7 @@
- outb_p(value & 0xff, client->addr + DATA_REG_OFFSET);
- w83627ehf_reset_bank(client, reg);
-
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- }
-
-@@ -322,7 +351,7 @@
- struct w83627ehf_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ)
- || !data->valid) {
-@@ -347,6 +376,16 @@
- data->fan_div[3] |= (i >> 5) & 0x04;
- }
-
-+ /* Measured voltages and limits */
-+ for (i = 0; i < 10; i++) {
-+ data->in[i] = w83627ehf_read_value(client,
-+ W83627EHF_REG_IN(i));
-+ data->in_min[i] = w83627ehf_read_value(client,
-+ W83627EHF_REG_IN_MIN(i));
-+ data->in_max[i] = w83627ehf_read_value(client,
-+ W83627EHF_REG_IN_MAX(i));
-+ }
-+
- /* Measured fan speeds and limits */
- for (i = 0; i < 5; i++) {
- if (!(data->has_fan & (1 << i)))
-@@ -393,23 +432,136 @@
- W83627EHF_REG_TEMP_HYST[i]);
- }
-
-+ data->alarms = w83627ehf_read_value(client,
-+ W83627EHF_REG_ALARM1) |
-+ (w83627ehf_read_value(client,
-+ W83627EHF_REG_ALARM2) << 8) |
-+ (w83627ehf_read_value(client,
-+ W83627EHF_REG_ALARM3) << 16);
-+
- data->last_updated = jiffies;
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return data;
- }
-
- /*
- * Sysfs callback functions
- */
-+#define show_in_reg(reg) \
-+static ssize_t \
-+show_##reg(struct device *dev, struct device_attribute *attr, \
-+ char *buf) \
-+{ \
-+ struct w83627ehf_data *data = w83627ehf_update_device(dev); \
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
-+ int nr = sensor_attr->index; \
-+ return sprintf(buf, "%ld\n", in_from_reg(data->reg[nr], nr)); \
-+}
-+show_in_reg(in)
-+show_in_reg(in_min)
-+show_in_reg(in_max)
-+
-+#define store_in_reg(REG, reg) \
-+static ssize_t \
-+store_in_##reg (struct device *dev, struct device_attribute *attr, \
-+ const char *buf, size_t count) \
-+{ \
-+ struct i2c_client *client = to_i2c_client(dev); \
-+ struct w83627ehf_data *data = i2c_get_clientdata(client); \
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
-+ int nr = sensor_attr->index; \
-+ u32 val = simple_strtoul(buf, NULL, 10); \
-+ \
-+ mutex_lock(&data->update_lock); \
-+ data->in_##reg[nr] = in_to_reg(val, nr); \
-+ w83627ehf_write_value(client, W83627EHF_REG_IN_##REG(nr), \
-+ data->in_##reg[nr]); \
-+ mutex_unlock(&data->update_lock); \
-+ return count; \
-+}
-+
-+store_in_reg(MIN, min)
-+store_in_reg(MAX, max)
-+
-+static ssize_t show_alarm(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct w83627ehf_data *data = w83627ehf_update_device(dev);
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ return sprintf(buf, "%u\n", (data->alarms >> nr) & 0x01);
-+}
-+
-+static struct sensor_device_attribute sda_in_input[] = {
-+ SENSOR_ATTR(in0_input, S_IRUGO, show_in, NULL, 0),
-+ SENSOR_ATTR(in1_input, S_IRUGO, show_in, NULL, 1),
-+ SENSOR_ATTR(in2_input, S_IRUGO, show_in, NULL, 2),
-+ SENSOR_ATTR(in3_input, S_IRUGO, show_in, NULL, 3),
-+ SENSOR_ATTR(in4_input, S_IRUGO, show_in, NULL, 4),
-+ SENSOR_ATTR(in5_input, S_IRUGO, show_in, NULL, 5),
-+ SENSOR_ATTR(in6_input, S_IRUGO, show_in, NULL, 6),
-+ SENSOR_ATTR(in7_input, S_IRUGO, show_in, NULL, 7),
-+ SENSOR_ATTR(in8_input, S_IRUGO, show_in, NULL, 8),
-+ SENSOR_ATTR(in9_input, S_IRUGO, show_in, NULL, 9),
-+};
-+
-+static struct sensor_device_attribute sda_in_alarm[] = {
-+ SENSOR_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0),
-+ SENSOR_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1),
-+ SENSOR_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2),
-+ SENSOR_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3),
-+ SENSOR_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8),
-+ SENSOR_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 21),
-+ SENSOR_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 20),
-+ SENSOR_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 16),
-+ SENSOR_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL, 17),
-+ SENSOR_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL, 19),
-+};
-+
-+static struct sensor_device_attribute sda_in_min[] = {
-+ SENSOR_ATTR(in0_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 0),
-+ SENSOR_ATTR(in1_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 1),
-+ SENSOR_ATTR(in2_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 2),
-+ SENSOR_ATTR(in3_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 3),
-+ SENSOR_ATTR(in4_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 4),
-+ SENSOR_ATTR(in5_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 5),
-+ SENSOR_ATTR(in6_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 6),
-+ SENSOR_ATTR(in7_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 7),
-+ SENSOR_ATTR(in8_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 8),
-+ SENSOR_ATTR(in9_min, S_IWUSR | S_IRUGO, show_in_min, store_in_min, 9),
-+};
-+
-+static struct sensor_device_attribute sda_in_max[] = {
-+ SENSOR_ATTR(in0_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 0),
-+ SENSOR_ATTR(in1_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 1),
-+ SENSOR_ATTR(in2_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 2),
-+ SENSOR_ATTR(in3_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 3),
-+ SENSOR_ATTR(in4_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 4),
-+ SENSOR_ATTR(in5_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 5),
-+ SENSOR_ATTR(in6_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 6),
-+ SENSOR_ATTR(in7_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 7),
-+ SENSOR_ATTR(in8_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 8),
-+ SENSOR_ATTR(in9_max, S_IWUSR | S_IRUGO, show_in_max, store_in_max, 9),
-+};
-+
-+static void device_create_file_in(struct device *dev, int i)
-+{
-+ device_create_file(dev, &sda_in_input[i].dev_attr);
-+ device_create_file(dev, &sda_in_alarm[i].dev_attr);
-+ device_create_file(dev, &sda_in_min[i].dev_attr);
-+ device_create_file(dev, &sda_in_max[i].dev_attr);
-+}
-
- #define show_fan_reg(reg) \
- static ssize_t \
--show_##reg(struct device *dev, char *buf, int nr) \
-+show_##reg(struct device *dev, struct device_attribute *attr, \
-+ char *buf) \
- { \
- struct w83627ehf_data *data = w83627ehf_update_device(dev); \
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
-+ int nr = sensor_attr->index; \
- return sprintf(buf, "%d\n", \
- fan_from_reg(data->reg[nr], \
- div_from_reg(data->fan_div[nr]))); \
-@@ -418,23 +570,28 @@
- show_fan_reg(fan_min);
-
- static ssize_t
--show_fan_div(struct device *dev, char *buf, int nr)
-+show_fan_div(struct device *dev, struct device_attribute *attr,
-+ char *buf)
- {
- struct w83627ehf_data *data = w83627ehf_update_device(dev);
-- return sprintf(buf, "%u\n",
-- div_from_reg(data->fan_div[nr]));
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ return sprintf(buf, "%u\n", div_from_reg(data->fan_div[nr]));
- }
-
- static ssize_t
--store_fan_min(struct device *dev, const char *buf, size_t count, int nr)
-+store_fan_min(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct i2c_client *client = to_i2c_client(dev);
- struct w83627ehf_data *data = i2c_get_clientdata(client);
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
- unsigned int val = simple_strtoul(buf, NULL, 10);
- unsigned int reg;
- u8 new_div;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- if (!val) {
- /* No min limit, alarm disabled */
- data->fan_min[nr] = 255;
-@@ -482,63 +639,55 @@
- }
- w83627ehf_write_value(client, W83627EHF_REG_FAN_MIN[nr],
- data->fan_min[nr]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return count;
- }
-
--#define sysfs_fan_offset(offset) \
--static ssize_t \
--show_reg_fan_##offset(struct device *dev, struct device_attribute *attr, \
-- char *buf) \
--{ \
-- return show_fan(dev, buf, offset-1); \
--} \
--static DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
-- show_reg_fan_##offset, NULL);
-+static struct sensor_device_attribute sda_fan_input[] = {
-+ SENSOR_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0),
-+ SENSOR_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1),
-+ SENSOR_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2),
-+ SENSOR_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3),
-+ SENSOR_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4),
-+};
-
--#define sysfs_fan_min_offset(offset) \
--static ssize_t \
--show_reg_fan##offset##_min(struct device *dev, struct device_attribute *attr, \
-- char *buf) \
--{ \
-- return show_fan_min(dev, buf, offset-1); \
--} \
--static ssize_t \
--store_reg_fan##offset##_min(struct device *dev, struct device_attribute *attr, \
-- const char *buf, size_t count) \
--{ \
-- return store_fan_min(dev, buf, count, offset-1); \
--} \
--static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
-- show_reg_fan##offset##_min, \
-- store_reg_fan##offset##_min);
-+static struct sensor_device_attribute sda_fan_alarm[] = {
-+ SENSOR_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6),
-+ SENSOR_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7),
-+ SENSOR_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 10),
-+ SENSOR_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL, 11),
-+ SENSOR_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL, 23),
-+};
-
--#define sysfs_fan_div_offset(offset) \
--static ssize_t \
--show_reg_fan##offset##_div(struct device *dev, struct device_attribute *attr, \
-- char *buf) \
--{ \
-- return show_fan_div(dev, buf, offset - 1); \
--} \
--static DEVICE_ATTR(fan##offset##_div, S_IRUGO, \
-- show_reg_fan##offset##_div, NULL);
--
--sysfs_fan_offset(1);
--sysfs_fan_min_offset(1);
--sysfs_fan_div_offset(1);
--sysfs_fan_offset(2);
--sysfs_fan_min_offset(2);
--sysfs_fan_div_offset(2);
--sysfs_fan_offset(3);
--sysfs_fan_min_offset(3);
--sysfs_fan_div_offset(3);
--sysfs_fan_offset(4);
--sysfs_fan_min_offset(4);
--sysfs_fan_div_offset(4);
--sysfs_fan_offset(5);
--sysfs_fan_min_offset(5);
--sysfs_fan_div_offset(5);
-+static struct sensor_device_attribute sda_fan_min[] = {
-+ SENSOR_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
-+ store_fan_min, 0),
-+ SENSOR_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
-+ store_fan_min, 1),
-+ SENSOR_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
-+ store_fan_min, 2),
-+ SENSOR_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
-+ store_fan_min, 3),
-+ SENSOR_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
-+ store_fan_min, 4),
-+};
-+
-+static struct sensor_device_attribute sda_fan_div[] = {
-+ SENSOR_ATTR(fan1_div, S_IRUGO, show_fan_div, NULL, 0),
-+ SENSOR_ATTR(fan2_div, S_IRUGO, show_fan_div, NULL, 1),
-+ SENSOR_ATTR(fan3_div, S_IRUGO, show_fan_div, NULL, 2),
-+ SENSOR_ATTR(fan4_div, S_IRUGO, show_fan_div, NULL, 3),
-+ SENSOR_ATTR(fan5_div, S_IRUGO, show_fan_div, NULL, 4),
-+};
-+
-+static void device_create_file_fan(struct device *dev, int i)
-+{
-+ device_create_file(dev, &sda_fan_input[i].dev_attr);
-+ device_create_file(dev, &sda_fan_alarm[i].dev_attr);
-+ device_create_file(dev, &sda_fan_div[i].dev_attr);
-+ device_create_file(dev, &sda_fan_min[i].dev_attr);
-+}
-
- #define show_temp1_reg(reg) \
- static ssize_t \
-@@ -561,27 +710,24 @@
- struct w83627ehf_data *data = i2c_get_clientdata(client); \
- u32 val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->temp1_##reg = temp1_to_reg(val); \
- w83627ehf_write_value(client, W83627EHF_REG_TEMP1_##REG, \
- data->temp1_##reg); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_temp1_reg(OVER, max);
- store_temp1_reg(HYST, max_hyst);
-
--static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp1, NULL);
--static DEVICE_ATTR(temp1_max, S_IRUGO| S_IWUSR,
-- show_temp1_max, store_temp1_max);
--static DEVICE_ATTR(temp1_max_hyst, S_IRUGO| S_IWUSR,
-- show_temp1_max_hyst, store_temp1_max_hyst);
--
- #define show_temp_reg(reg) \
- static ssize_t \
--show_##reg (struct device *dev, char *buf, int nr) \
-+show_##reg(struct device *dev, struct device_attribute *attr, \
-+ char *buf) \
- { \
- struct w83627ehf_data *data = w83627ehf_update_device(dev); \
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
-+ int nr = sensor_attr->index; \
- return sprintf(buf, "%d\n", \
- LM75_TEMP_FROM_REG(data->reg[nr])); \
- }
-@@ -591,55 +737,45 @@
-
- #define store_temp_reg(REG, reg) \
- static ssize_t \
--store_##reg (struct device *dev, const char *buf, size_t count, int nr) \
-+store_##reg(struct device *dev, struct device_attribute *attr, \
-+ const char *buf, size_t count) \
- { \
- struct i2c_client *client = to_i2c_client(dev); \
- struct w83627ehf_data *data = i2c_get_clientdata(client); \
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); \
-+ int nr = sensor_attr->index; \
- u32 val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->reg[nr] = LM75_TEMP_TO_REG(val); \
- w83627ehf_write_value(client, W83627EHF_REG_TEMP_##REG[nr], \
- data->reg[nr]); \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_temp_reg(OVER, temp_max);
- store_temp_reg(HYST, temp_max_hyst);
-
--#define sysfs_temp_offset(offset) \
--static ssize_t \
--show_reg_temp##offset (struct device *dev, struct device_attribute *attr, \
-- char *buf) \
--{ \
-- return show_temp(dev, buf, offset - 2); \
--} \
--static DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
-- show_reg_temp##offset, NULL);
--
--#define sysfs_temp_reg_offset(reg, offset) \
--static ssize_t \
--show_reg_temp##offset##_##reg(struct device *dev, struct device_attribute *attr, \
-- char *buf) \
--{ \
-- return show_temp_##reg(dev, buf, offset - 2); \
--} \
--static ssize_t \
--store_reg_temp##offset##_##reg(struct device *dev, struct device_attribute *attr, \
-- const char *buf, size_t count) \
--{ \
-- return store_temp_##reg(dev, buf, count, offset - 2); \
--} \
--static DEVICE_ATTR(temp##offset##_##reg, S_IRUGO| S_IWUSR, \
-- show_reg_temp##offset##_##reg, \
-- store_reg_temp##offset##_##reg);
--
--sysfs_temp_offset(2);
--sysfs_temp_reg_offset(max, 2);
--sysfs_temp_reg_offset(max_hyst, 2);
--sysfs_temp_offset(3);
--sysfs_temp_reg_offset(max, 3);
--sysfs_temp_reg_offset(max_hyst, 3);
-+static struct sensor_device_attribute sda_temp[] = {
-+ SENSOR_ATTR(temp1_input, S_IRUGO, show_temp1, NULL, 0),
-+ SENSOR_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 0),
-+ SENSOR_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 1),
-+ SENSOR_ATTR(temp1_max, S_IRUGO | S_IWUSR, show_temp1_max,
-+ store_temp1_max, 0),
-+ SENSOR_ATTR(temp2_max, S_IRUGO | S_IWUSR, show_temp_max,
-+ store_temp_max, 0),
-+ SENSOR_ATTR(temp3_max, S_IRUGO | S_IWUSR, show_temp_max,
-+ store_temp_max, 1),
-+ SENSOR_ATTR(temp1_max_hyst, S_IRUGO | S_IWUSR, show_temp1_max_hyst,
-+ store_temp1_max_hyst, 0),
-+ SENSOR_ATTR(temp2_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
-+ store_temp_max_hyst, 0),
-+ SENSOR_ATTR(temp3_max_hyst, S_IRUGO | S_IWUSR, show_temp_max_hyst,
-+ store_temp_max_hyst, 1),
-+ SENSOR_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4),
-+ SENSOR_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5),
-+ SENSOR_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13),
-+};
-
- /*
- * Driver and client management
-@@ -673,6 +809,7 @@
- {
- struct i2c_client *client;
- struct w83627ehf_data *data;
-+ struct device *dev;
- int i, err = 0;
-
- if (!request_region(address + REGION_OFFSET, REGION_LENGTH,
-@@ -689,14 +826,15 @@
- client = &data->client;
- i2c_set_clientdata(client, data);
- client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- client->adapter = adapter;
- client->driver = &w83627ehf_driver;
- client->flags = 0;
-+ dev = &client->dev;
-
- strlcpy(client->name, "w83627ehf", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the i2c layer a new client has arrived */
- if ((err = i2c_attach_client(client)))
-@@ -720,42 +858,21 @@
- data->has_fan |= (1 << 4);
-
- /* Register sysfs hooks */
-- data->class_dev = hwmon_device_register(&client->dev);
-+ data->class_dev = hwmon_device_register(dev);
- if (IS_ERR(data->class_dev)) {
- err = PTR_ERR(data->class_dev);
- goto exit_detach;
- }
-
-- device_create_file(&client->dev, &dev_attr_fan1_input);
-- device_create_file(&client->dev, &dev_attr_fan1_min);
-- device_create_file(&client->dev, &dev_attr_fan1_div);
-- device_create_file(&client->dev, &dev_attr_fan2_input);
-- device_create_file(&client->dev, &dev_attr_fan2_min);
-- device_create_file(&client->dev, &dev_attr_fan2_div);
-- device_create_file(&client->dev, &dev_attr_fan3_input);
-- device_create_file(&client->dev, &dev_attr_fan3_min);
-- device_create_file(&client->dev, &dev_attr_fan3_div);
--
-- if (data->has_fan & (1 << 3)) {
-- device_create_file(&client->dev, &dev_attr_fan4_input);
-- device_create_file(&client->dev, &dev_attr_fan4_min);
-- device_create_file(&client->dev, &dev_attr_fan4_div);
-- }
-- if (data->has_fan & (1 << 4)) {
-- device_create_file(&client->dev, &dev_attr_fan5_input);
-- device_create_file(&client->dev, &dev_attr_fan5_min);
-- device_create_file(&client->dev, &dev_attr_fan5_div);
-- }
--
-- device_create_file(&client->dev, &dev_attr_temp1_input);
-- device_create_file(&client->dev, &dev_attr_temp1_max);
-- device_create_file(&client->dev, &dev_attr_temp1_max_hyst);
-- device_create_file(&client->dev, &dev_attr_temp2_input);
-- device_create_file(&client->dev, &dev_attr_temp2_max);
-- device_create_file(&client->dev, &dev_attr_temp2_max_hyst);
-- device_create_file(&client->dev, &dev_attr_temp3_input);
-- device_create_file(&client->dev, &dev_attr_temp3_max);
-- device_create_file(&client->dev, &dev_attr_temp3_max_hyst);
-+ for (i = 0; i < 10; i++)
-+ device_create_file_in(dev, i);
-+
-+ for (i = 0; i < 5; i++) {
-+ if (data->has_fan & (1 << i))
-+ device_create_file_fan(dev, i);
-+ }
-+ for (i = 0; i < ARRAY_SIZE(sda_temp); i++)
-+ device_create_file(dev, &sda_temp[i].dev_attr);
-
- return 0;
-
---- linux-2.6.16.orig/drivers/hwmon/w83627hf.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/w83627hf.c 2006-03-22 17:06:21.000000000 +0100
-@@ -28,6 +28,7 @@
- w83627hf 9 3 2 3 0x20 0x5ca3 no yes(LPC)
- w83627thf 7 3 3 3 0x90 0x5ca3 no yes(LPC)
- w83637hf 7 3 3 3 0x80 0x5ca3 no yes(LPC)
-+ w83687thf 7 3 3 3 0x90 0x5ca3 no yes(LPC)
- w83697hf 8 2 2 2 0x60 0x5ca3 no yes(LPC)
-
- For other winbond chips, and for i2c support in the above chips,
-@@ -45,7 +46,9 @@
- #include <linux/i2c-isa.h>
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
-+#include <linux/hwmon-sysfs.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
- #include "lm75.h"
-
-@@ -62,7 +65,7 @@
- static unsigned short address;
-
- /* Insmod parameters */
--enum chips { any_chip, w83627hf, w83627thf, w83697hf, w83637hf };
-+enum chips { any_chip, w83627hf, w83627thf, w83697hf, w83637hf, w83687thf };
-
- static int reset;
- module_param(reset, bool, 0);
-@@ -100,6 +103,10 @@
- #define W83627THF_GPIO5_IOSR 0xf3 /* w83627thf only */
- #define W83627THF_GPIO5_DR 0xf4 /* w83627thf only */
-
-+#define W83687THF_VID_EN 0x29 /* w83687thf only */
-+#define W83687THF_VID_CFG 0xF0 /* w83687thf only */
-+#define W83687THF_VID_DATA 0xF1 /* w83687thf only */
-+
- static inline void
- superio_outb(int reg, int val)
- {
-@@ -138,6 +145,7 @@
- #define W627THF_DEVID 0x82
- #define W697_DEVID 0x60
- #define W637_DEVID 0x70
-+#define W687THF_DEVID 0x85
- #define WINB_ACT_REG 0x30
- #define WINB_BASE_REG 0x60
- /* Constants specified below */
-@@ -201,11 +209,11 @@
- #define W83627HF_REG_PWM1 0x5A
- #define W83627HF_REG_PWM2 0x5B
-
--#define W83627THF_REG_PWM1 0x01 /* 697HF and 637HF too */
--#define W83627THF_REG_PWM2 0x03 /* 697HF and 637HF too */
--#define W83627THF_REG_PWM3 0x11 /* 637HF too */
-+#define W83627THF_REG_PWM1 0x01 /* 697HF/637HF/687THF too */
-+#define W83627THF_REG_PWM2 0x03 /* 697HF/637HF/687THF too */
-+#define W83627THF_REG_PWM3 0x11 /* 637HF/687THF too */
-
--#define W83627THF_REG_VRM_OVT_CFG 0x18 /* 637HF too */
-+#define W83627THF_REG_VRM_OVT_CFG 0x18 /* 637HF/687THF too */
-
- static const u8 regpwm_627hf[] = { W83627HF_REG_PWM1, W83627HF_REG_PWM2 };
- static const u8 regpwm[] = { W83627THF_REG_PWM1, W83627THF_REG_PWM2,
-@@ -285,10 +293,10 @@
- struct w83627hf_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -318,16 +326,15 @@
- Default = 3435.
- Other Betas unimplemented */
- u8 vrm;
-- u8 vrm_ovt; /* Register value, 627thf & 637hf only */
-+ u8 vrm_ovt; /* Register value, 627THF/637HF/687THF only */
- };
-
-
- static int w83627hf_detect(struct i2c_adapter *adapter);
- static int w83627hf_detach_client(struct i2c_client *client);
-
--static int w83627hf_read_value(struct i2c_client *client, u16 register);
--static int w83627hf_write_value(struct i2c_client *client, u16 register,
-- u16 value);
-+static int w83627hf_read_value(struct i2c_client *client, u16 reg);
-+static int w83627hf_write_value(struct i2c_client *client, u16 reg, u16 value);
- static struct w83627hf_data *w83627hf_update_device(struct device *dev);
- static void w83627hf_init_client(struct i2c_client *client);
-
-@@ -360,12 +367,12 @@
- \
- val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->in_##reg[nr] = IN_TO_REG(val); \
- w83627hf_write_value(client, W83781D_REG_IN_##REG(nr), \
- data->in_##reg[nr]); \
- \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_in_reg(MIN, min)
-@@ -413,7 +420,8 @@
- long in0;
-
- if ((data->vrm_ovt & 0x01) &&
-- (w83627thf == data->type || w83637hf == data->type))
-+ (w83627thf == data->type || w83637hf == data->type
-+ || w83687thf == data->type))
-
- /* use VRM9 calculation */
- in0 = (long)((reg * 488 + 70000 + 50) / 100);
-@@ -451,10 +459,11 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if ((data->vrm_ovt & 0x01) &&
-- (w83627thf == data->type || w83637hf == data->type))
-+ (w83627thf == data->type || w83637hf == data->type
-+ || w83687thf == data->type))
-
- /* use VRM9 calculation */
- data->in_min[0] =
-@@ -465,7 +474,7 @@
- data->in_min[0] = IN_TO_REG(val);
-
- w83627hf_write_value(client, W83781D_REG_IN_MIN(0), data->in_min[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -478,10 +487,11 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if ((data->vrm_ovt & 0x01) &&
-- (w83627thf == data->type || w83637hf == data->type))
-+ (w83627thf == data->type || w83637hf == data->type
-+ || w83687thf == data->type))
-
- /* use VRM9 calculation */
- data->in_max[0] =
-@@ -492,7 +502,7 @@
- data->in_max[0] = IN_TO_REG(val);
-
- w83627hf_write_value(client, W83781D_REG_IN_MAX(0), data->in_max[0]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -507,6 +517,10 @@
- device_create_file(&client->dev, &dev_attr_in##offset##_input); \
- device_create_file(&client->dev, &dev_attr_in##offset##_min); \
- device_create_file(&client->dev, &dev_attr_in##offset##_max); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_in##offset##_alarm.dev_attr); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_in##offset##_beep.dev_attr); \
- } while (0)
-
- #define show_fan_reg(reg) \
-@@ -529,13 +543,13 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr - 1] =
- FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr - 1]));
- w83627hf_write_value(client, W83781D_REG_FAN_MIN(nr),
- data->fan_min[nr - 1]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -570,6 +584,10 @@
- do { \
- device_create_file(&client->dev, &dev_attr_fan##offset##_input); \
- device_create_file(&client->dev, &dev_attr_fan##offset##_min); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_fan##offset##_alarm.dev_attr); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_fan##offset##_beep.dev_attr); \
- } while (0)
-
- #define show_temp_reg(reg) \
-@@ -597,7 +615,7 @@
- \
- val = simple_strtoul(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- \
- if (nr >= 2) { /* TEMP2 and TEMP3 */ \
- data->temp_##reg##_add[nr-2] = LM75_TEMP_TO_REG(val); \
-@@ -609,7 +627,7 @@
- data->temp_##reg); \
- } \
- \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_temp_reg(OVER, max);
-@@ -651,6 +669,10 @@
- device_create_file(&client->dev, &dev_attr_temp##offset##_input); \
- device_create_file(&client->dev, &dev_attr_temp##offset##_max); \
- device_create_file(&client->dev, &dev_attr_temp##offset##_max_hyst); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_temp##offset##_alarm.dev_attr); \
-+device_create_file(&client->dev, \
-+ &sensor_dev_attr_temp##offset##_beep.dev_attr); \
- } while (0)
-
- static ssize_t
-@@ -693,76 +715,152 @@
- }
- static DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL);
- #define device_create_file_alarms(client) \
--device_create_file(&client->dev, &dev_attr_alarms)
-+do { \
-+device_create_file(&client->dev, &dev_attr_alarms); \
-+device_create_file(&client->dev, &sensor_dev_attr_chassis_alarm.dev_attr); \
-+} while (0)
-
--#define show_beep_reg(REG, reg) \
--static ssize_t show_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \
--{ \
-- struct w83627hf_data *data = w83627hf_update_device(dev); \
-- return sprintf(buf,"%ld\n", \
-- (long)BEEP_##REG##_FROM_REG(data->beep_##reg)); \
-+static ssize_t
-+show_alarm_bit(struct device *dev, struct device_attribute *devattr, char *buf)
-+{
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ struct w83627hf_data *data = w83627hf_update_device(dev);
-+
-+ return sprintf(buf, "%u\n", (data->alarms >> attr->index) & 1);
- }
--show_beep_reg(ENABLE, enable)
--show_beep_reg(MASK, mask)
-+static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm_bit, NULL, 0);
-+static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm_bit, NULL, 1);
-+static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm_bit, NULL, 2);
-+static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm_bit, NULL, 3);
-+static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm_bit, NULL, 8);
-+static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm_bit, NULL, 9);
-+static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm_bit, NULL, 10);
-+static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm_bit, NULL, 16);
-+static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm_bit, NULL, 17);
-+static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm_bit, NULL, 6);
-+static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm_bit, NULL, 7);
-+static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm_bit, NULL, 11);
-+static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm_bit, NULL, 4);
-+static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm_bit, NULL, 5);
-+static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm_bit, NULL, 13);
-+static SENSOR_DEVICE_ATTR(chassis_alarm, S_IRUGO, show_alarm_bit, NULL, 12);
-
--#define BEEP_ENABLE 0 /* Store beep_enable */
--#define BEEP_MASK 1 /* Store beep_mask */
-+static ssize_t show_beep_mask(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+ struct w83627hf_data *data = w83627hf_update_device(dev);
-+ return sprintf(buf, "%ld\n",
-+ (long)BEEP_MASK_FROM_REG(data->beep_mask));
-+}
-
- static ssize_t
--store_beep_reg(struct device *dev, const char *buf, size_t count,
-- int update_mask)
-+store_beep_mask(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
- {
- struct i2c_client *client = to_i2c_client(dev);
- struct w83627hf_data *data = i2c_get_clientdata(client);
-- u32 val, val2;
--
-- val = simple_strtoul(buf, NULL, 10);
-+ u32 val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
--
-- if (update_mask == BEEP_MASK) { /* We are storing beep_mask */
-- data->beep_mask = BEEP_MASK_TO_REG(val);
-- w83627hf_write_value(client, W83781D_REG_BEEP_INTS1,
-- data->beep_mask & 0xff);
-- w83627hf_write_value(client, W83781D_REG_BEEP_INTS3,
-- ((data->beep_mask) >> 16) & 0xff);
-- val2 = (data->beep_mask >> 8) & 0x7f;
-- } else { /* We are storing beep_enable */
-- val2 =
-- w83627hf_read_value(client, W83781D_REG_BEEP_INTS2) & 0x7f;
-- data->beep_enable = BEEP_ENABLE_TO_REG(val);
-- }
-+ mutex_lock(&data->update_lock);
-
-+ data->beep_mask = BEEP_MASK_TO_REG(val);
-+ w83627hf_write_value(client, W83781D_REG_BEEP_INTS1,
-+ data->beep_mask & 0xff);
-+ w83627hf_write_value(client, W83781D_REG_BEEP_INTS3,
-+ ((data->beep_mask) >> 16) & 0xff);
- w83627hf_write_value(client, W83781D_REG_BEEP_INTS2,
-- val2 | data->beep_enable << 7);
-+ ((data->beep_mask >> 8) & 0x7f)
-+ | data->beep_enable << 7);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
--
--#define sysfs_beep(REG, reg) \
--static ssize_t show_regs_beep_##reg (struct device *dev, struct device_attribute *attr, char *buf) \
--{ \
-- return show_beep_##reg(dev, attr, buf); \
--} \
--static ssize_t \
--store_regs_beep_##reg (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \
--{ \
-- return store_beep_reg(dev, buf, count, BEEP_##REG); \
--} \
--static DEVICE_ATTR(beep_##reg, S_IRUGO | S_IWUSR, \
-- show_regs_beep_##reg, store_regs_beep_##reg);
--
--sysfs_beep(ENABLE, enable);
--sysfs_beep(MASK, mask);
-+static DEVICE_ATTR(beep_mask, S_IRUGO | S_IWUSR, \
-+ show_beep_mask, store_beep_mask);
-
- #define device_create_file_beep(client) \
- do { \
--device_create_file(&client->dev, &dev_attr_beep_enable); \
-+device_create_file(&client->dev, &sensor_dev_attr_beep_enable.dev_attr); \
- device_create_file(&client->dev, &dev_attr_beep_mask); \
-+device_create_file(&client->dev, &sensor_dev_attr_chassis_beep.dev_attr); \
- } while (0)
-
- static ssize_t
-+show_beep_bit(struct device *dev, struct device_attribute *devattr, char *buf)
-+{
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ struct w83627hf_data *data = w83627hf_update_device(dev);
-+
-+ return sprintf(buf, "%u\n", (data->beep_mask >> attr->index) & 1);
-+}
-+
-+static ssize_t
-+store_beep_bit(struct device *dev, struct device_attribute *devattr,
-+ const char *buf, size_t count)
-+{
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+ struct w83627hf_data *data = i2c_get_clientdata(client);
-+ u16 beepreg[3] = { W83781D_REG_BEEP_INTS1, W83781D_REG_BEEP_INTS2,
-+ W83781D_REG_BEEP_INTS3 };
-+ u32 val;
-+ u8 reg;
-+
-+ val = simple_strtoul(buf, NULL, 10);
-+ if (val != 0 && val != 1)
-+ return -EINVAL;
-+
-+ mutex_lock(&data->update_lock);
-+
-+ reg = w83627hf_read_value(client, beepreg[attr->index >> 3]);
-+ if (val) {
-+ reg |= 1 << (attr->index & 0x07);
-+ data->beep_mask |= 1 << attr->index;
-+ } else {
-+ reg &= ~(1 << (attr->index & 0x07));
-+ data->beep_mask &= ~(1 << attr->index);
-+ }
-+ w83627hf_write_value(client, beepreg[attr->index >> 3], reg);
-+
-+ mutex_unlock(&data->update_lock);
-+ return count;
-+}
-+
-+static SENSOR_DEVICE_ATTR(in0_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 0);
-+static SENSOR_DEVICE_ATTR(in1_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 1);
-+static SENSOR_DEVICE_ATTR(in2_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 2);
-+static SENSOR_DEVICE_ATTR(in3_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 3);
-+static SENSOR_DEVICE_ATTR(in4_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 8);
-+static SENSOR_DEVICE_ATTR(in5_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 9);
-+static SENSOR_DEVICE_ATTR(in6_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 10);
-+static SENSOR_DEVICE_ATTR(in7_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 16);
-+static SENSOR_DEVICE_ATTR(in8_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 17);
-+static SENSOR_DEVICE_ATTR(fan1_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 6);
-+static SENSOR_DEVICE_ATTR(fan2_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 7);
-+static SENSOR_DEVICE_ATTR(fan3_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 11);
-+static SENSOR_DEVICE_ATTR(temp1_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 4);
-+static SENSOR_DEVICE_ATTR(temp2_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 5);
-+static SENSOR_DEVICE_ATTR(temp3_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 13);
-+static SENSOR_DEVICE_ATTR(chassis_beep, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 12);
-+static SENSOR_DEVICE_ATTR(beep_enable, S_IRUGO | S_IWUSR, show_beep_bit,
-+ store_beep_bit, 15);
-+
-+static ssize_t
- show_fan_div_reg(struct device *dev, char *buf, int nr)
- {
- struct w83627hf_data *data = w83627hf_update_device(dev);
-@@ -783,7 +881,7 @@
- u8 reg;
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- /* Save fan_min */
- min = FAN_FROM_REG(data->fan_min[nr],
-@@ -805,7 +903,7 @@
- data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- w83627hf_write_value(client, W83781D_REG_FAN_MIN(nr+1), data->fan_min[nr]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -848,7 +946,7 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (data->type == w83627thf) {
- /* bits 0-3 are reserved in 627THF */
-@@ -865,7 +963,7 @@
- data->pwm[nr - 1]);
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -907,7 +1005,7 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- switch (val) {
- case 1: /* PII/Celeron diode */
-@@ -941,7 +1039,7 @@
- break;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -980,7 +1078,8 @@
- if(val != W627_DEVID &&
- val != W627THF_DEVID &&
- val != W697_DEVID &&
-- val != W637_DEVID) {
-+ val != W637_DEVID &&
-+ val != W687THF_DEVID) {
- superio_exit();
- return -ENODEV;
- }
-@@ -1034,6 +1133,8 @@
- kind = w83627thf;
- else if(val == W637_DEVID)
- kind = w83637hf;
-+ else if (val == W687THF_DEVID)
-+ kind = w83687thf;
- else {
- dev_info(&adapter->dev,
- "Unsupported chip (dev_id=0x%02X).\n", val);
-@@ -1057,7 +1158,7 @@
- new_client = &data->client;
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- new_client->adapter = adapter;
- new_client->driver = &w83627hf_driver;
- new_client->flags = 0;
-@@ -1071,13 +1172,15 @@
- client_name = "w83697hf";
- } else if (kind == w83637hf) {
- client_name = "w83637hf";
-+ } else if (kind == w83687thf) {
-+ client_name = "w83687thf";
- }
-
- /* Fill in the remaining client fields and put into the global list */
- strlcpy(new_client->name, client_name, I2C_NAME_SIZE);
- data->type = kind;
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -1106,7 +1209,7 @@
- device_create_file_in(new_client, 2);
- device_create_file_in(new_client, 3);
- device_create_file_in(new_client, 4);
-- if (kind != w83627thf && kind != w83637hf) {
-+ if (kind == w83627hf || kind == w83697hf) {
- device_create_file_in(new_client, 5);
- device_create_file_in(new_client, 6);
- }
-@@ -1139,7 +1242,7 @@
-
- device_create_file_pwm(new_client, 1);
- device_create_file_pwm(new_client, 2);
-- if (kind == w83627thf || kind == w83637hf)
-+ if (kind == w83627thf || kind == w83637hf || kind == w83687thf)
- device_create_file_pwm(new_client, 3);
-
- device_create_file_sensor(new_client, 1);
-@@ -1187,7 +1290,7 @@
- struct w83627hf_data *data = i2c_get_clientdata(client);
- int res, word_sized;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- word_sized = (((reg & 0xff00) == 0x100)
- || ((reg & 0xff00) == 0x200))
- && (((reg & 0x00ff) == 0x50)
-@@ -1213,7 +1316,7 @@
- client->addr + W83781D_ADDR_REG_OFFSET);
- outb_p(0, client->addr + W83781D_DATA_REG_OFFSET);
- }
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- }
-
-@@ -1247,12 +1350,39 @@
- return res;
- }
-
-+static int w83687thf_read_vid(struct i2c_client *client)
-+{
-+ int res = 0xff;
-+
-+ superio_enter();
-+ superio_select(W83627HF_LD_HWM);
-+
-+ /* Make sure these GPIO pins are enabled */
-+ if (!(superio_inb(W83687THF_VID_EN) & (1 << 2))) {
-+ dev_dbg(&client->dev, "VID disabled, no VID function\n");
-+ goto exit;
-+ }
-+
-+ /* Make sure the pins are configured for input */
-+ if (!(superio_inb(W83687THF_VID_CFG) & (1 << 4))) {
-+ dev_dbg(&client->dev, "VID configured as output, "
-+ "no VID function\n");
-+ goto exit;
-+ }
-+
-+ res = superio_inb(W83687THF_VID_DATA) & 0x3f;
-+
-+exit:
-+ superio_exit();
-+ return res;
-+}
-+
- static int w83627hf_write_value(struct i2c_client *client, u16 reg, u16 value)
- {
- struct w83627hf_data *data = i2c_get_clientdata(client);
- int word_sized;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- word_sized = (((reg & 0xff00) == 0x100)
- || ((reg & 0xff00) == 0x200))
- && (((reg & 0x00ff) == 0x53)
-@@ -1277,7 +1407,7 @@
- client->addr + W83781D_ADDR_REG_OFFSET);
- outb_p(0, client->addr + W83781D_DATA_REG_OFFSET);
- }
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- }
-
-@@ -1324,10 +1454,13 @@
- data->vid = (lo & 0x0f) | ((hi & 0x01) << 4);
- } else if (w83627thf == data->type) {
- data->vid = w83627thf_read_gpio5(client);
-+ } else if (w83687thf == data->type) {
-+ data->vid = w83687thf_read_vid(client);
- }
-
- /* Read VRM & OVT Config only once */
-- if (w83627thf == data->type || w83637hf == data->type) {
-+ if (w83627thf == data->type || w83637hf == data->type
-+ || w83687thf == data->type) {
- data->vrm_ovt =
- w83627hf_read_value(client, W83627THF_REG_VRM_OVT_CFG);
- }
-@@ -1387,14 +1520,14 @@
- struct w83627hf_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
- for (i = 0; i <= 8; i++) {
- /* skip missing sensors */
- if (((data->type == w83697hf) && (i == 1)) ||
-- ((data->type == w83627thf || data->type == w83637hf)
-+ ((data->type != w83627hf && data->type != w83697hf)
- && (i == 5 || i == 6)))
- continue;
- data->in[i] =
-@@ -1470,7 +1603,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/w83781d.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/w83781d.c 2006-03-22 17:06:16.000000000 +0100
-@@ -42,6 +42,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-vid.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
- #include <asm/io.h>
- #include "lm75.h"
-
-@@ -56,6 +57,10 @@
- I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
- "{bus, clientaddr, subclientaddr1, subclientaddr2}");
-
-+static int reset;
-+module_param(reset, bool, 0);
-+MODULE_PARM_DESC(reset, "Set to one to reset chip on load");
-+
- static int init = 1;
- module_param(init, bool, 0);
- MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
-@@ -226,10 +231,10 @@
- struct w83781d_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore lock;
-+ struct mutex lock;
- enum chips type;
-
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* !=0 if following fields are valid */
- unsigned long last_updated; /* In jiffies */
-
-@@ -262,14 +267,12 @@
- u8 vrm;
- };
-
--static int w83781d_attach_adapter(struct i2c_adapter *adapter);
- static int w83781d_isa_attach_adapter(struct i2c_adapter *adapter);
- static int w83781d_detect(struct i2c_adapter *adapter, int address, int kind);
- static int w83781d_detach_client(struct i2c_client *client);
-
--static int w83781d_read_value(struct i2c_client *client, u16 register);
--static int w83781d_write_value(struct i2c_client *client, u16 register,
-- u16 value);
-+static int w83781d_read_value(struct i2c_client *client, u16 reg);
-+static int w83781d_write_value(struct i2c_client *client, u16 reg, u16 value);
- static struct w83781d_data *w83781d_update_device(struct device *dev);
- static void w83781d_init_client(struct i2c_client *client);
-
-@@ -278,7 +281,9 @@
- .name = "w83781d",
- },
- .id = I2C_DRIVERID_W83781D,
-- .attach_adapter = w83781d_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = w83781d_detect,
- .detach_client = w83781d_detach_client,
- };
-
-@@ -311,11 +316,11 @@
- \
- val = simple_strtoul(buf, NULL, 10) / 10; \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- data->in_##reg[nr] = IN_TO_REG(val); \
- w83781d_write_value(client, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \
- \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_in_reg(MIN, min);
-@@ -381,13 +386,13 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->fan_min[nr - 1] =
- FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr - 1]));
- w83781d_write_value(client, W83781D_REG_FAN_MIN(nr),
- data->fan_min[nr - 1]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -446,7 +451,7 @@
- \
- val = simple_strtol(buf, NULL, 10); \
- \
-- down(&data->update_lock); \
-+ mutex_lock(&data->update_lock); \
- \
- if (nr >= 2) { /* TEMP2 and TEMP3 */ \
- data->temp_##reg##_add[nr-2] = LM75_TEMP_TO_REG(val); \
-@@ -458,7 +463,7 @@
- data->temp_##reg); \
- } \
- \
-- up(&data->update_lock); \
-+ mutex_unlock(&data->update_lock); \
- return count; \
- }
- store_temp_reg(OVER, max);
-@@ -571,7 +576,7 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (update_mask == BEEP_MASK) { /* We are storing beep_mask */
- data->beep_mask = BEEP_MASK_TO_REG(val, data->type);
-@@ -592,7 +597,7 @@
- w83781d_write_value(client, W83781D_REG_BEEP_INTS2,
- val2 | data->beep_enable << 7);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -637,7 +642,7 @@
- u8 reg;
- unsigned long val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- /* Save fan_min */
- min = FAN_FROM_REG(data->fan_min[nr],
-@@ -662,7 +667,7 @@
- data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
- w83781d_write_value(client, W83781D_REG_FAN_MIN(nr+1), data->fan_min[nr]);
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -709,10 +714,10 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
- data->pwm[nr - 1] = PWM_TO_REG(val);
- w83781d_write_value(client, W83781D_REG_PWM(nr), data->pwm[nr - 1]);
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -725,7 +730,7 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- switch (val) {
- case 0:
-@@ -742,11 +747,11 @@
- break;
-
- default:
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return -EINVAL;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -808,7 +813,7 @@
-
- val = simple_strtoul(buf, NULL, 10);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- switch (val) {
- case 1: /* PII/Celeron diode */
-@@ -841,7 +846,7 @@
- break;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
- return count;
- }
-
-@@ -865,18 +870,6 @@
- device_create_file(&client->dev, &dev_attr_temp##offset##_type); \
- } while (0)
-
--/* This function is called when:
-- * w83781d_driver is inserted (when this module is loaded), for each
-- available adapter
-- * when a new adapter is inserted (and w83781d_driver is still present) */
--static int
--w83781d_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, w83781d_detect);
--}
--
- static int
- w83781d_isa_attach_adapter(struct i2c_adapter *adapter)
- {
-@@ -1073,7 +1066,7 @@
- new_client = &data->client;
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
-- init_MUTEX(&data->lock);
-+ mutex_init(&data->lock);
- new_client->adapter = adapter;
- new_client->driver = is_isa ? &w83781d_isa_driver : &w83781d_driver;
- new_client->flags = 0;
-@@ -1178,7 +1171,7 @@
- data->type = kind;
-
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Tell the I2C layer a new client has arrived */
- if ((err = i2c_attach_client(new_client)))
-@@ -1325,7 +1318,7 @@
- int res, word_sized, bank;
- struct i2c_client *cl;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- if (i2c_is_isa_client(client)) {
- word_sized = (((reg & 0xff00) == 0x100)
- || ((reg & 0xff00) == 0x200))
-@@ -1383,7 +1376,7 @@
- if (bank > 2)
- i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
- }
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return res;
- }
-
-@@ -1394,7 +1387,7 @@
- int word_sized, bank;
- struct i2c_client *cl;
-
-- down(&data->lock);
-+ mutex_lock(&data->lock);
- if (i2c_is_isa_client(client)) {
- word_sized = (((reg & 0xff00) == 0x100)
- || ((reg & 0xff00) == 0x200))
-@@ -1447,7 +1440,7 @@
- if (bank > 2)
- i2c_smbus_write_byte_data(client, W83781D_REG_BANK, 0);
- }
-- up(&data->lock);
-+ mutex_unlock(&data->lock);
- return 0;
- }
-
-@@ -1459,8 +1452,17 @@
- int type = data->type;
- u8 tmp;
-
-- if (init && type != as99127f) { /* this resets registers we don't have
-+ if (reset && type != as99127f) { /* this resets registers we don't have
- documentation for on the as99127f */
-+ /* Resetting the chip has been the default for a long time,
-+ but it causes the BIOS initializations (fan clock dividers,
-+ thermal sensor types...) to be lost, so it is now optional.
-+ It might even go away if nobody reports it as being useful,
-+ as I see very little reason why this would be needed at
-+ all. */
-+ dev_info(&client->dev, "If reset=1 solved a problem you were "
-+ "having, please report!\n");
-+
- /* save these registers */
- i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG);
- p = w83781d_read_value(client, W83781D_REG_PWMCLK12);
-@@ -1477,6 +1479,13 @@
- w83781d_write_value(client, W83781D_REG_BEEP_INTS2, 0);
- }
-
-+ /* Disable power-on abnormal beep, as advised by the datasheet.
-+ Already done if reset=1. */
-+ if (init && !reset && type != as99127f) {
-+ i = w83781d_read_value(client, W83781D_REG_BEEP_CONFIG);
-+ w83781d_write_value(client, W83781D_REG_BEEP_CONFIG, i | 0x80);
-+ }
-+
- data->vrm = vid_which_vrm();
-
- if ((type != w83781d) && (type != as99127f)) {
-@@ -1533,7 +1542,7 @@
- struct w83781d_data *data = i2c_get_clientdata(client);
- int i;
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
- || !data->valid) {
-@@ -1641,7 +1650,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/drivers/hwmon/w83l785ts.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/w83l785ts.c 2006-03-22 17:06:16.000000000 +0100
-@@ -39,6 +39,7 @@
- #include <linux/hwmon.h>
- #include <linux/hwmon-sysfs.h>
- #include <linux/err.h>
-+#include <linux/mutex.h>
-
- /* How many retries on register read error */
- #define MAX_RETRIES 5
-@@ -80,7 +81,6 @@
- * Functions declaration
- */
-
--static int w83l785ts_attach_adapter(struct i2c_adapter *adapter);
- static int w83l785ts_detect(struct i2c_adapter *adapter, int address,
- int kind);
- static int w83l785ts_detach_client(struct i2c_client *client);
-@@ -96,7 +96,9 @@
- .name = "w83l785ts",
- },
- .id = I2C_DRIVERID_W83L785TS,
-- .attach_adapter = w83l785ts_attach_adapter,
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = w83l785ts_detect,
- .detach_client = w83l785ts_detach_client,
- };
-
-@@ -107,7 +109,7 @@
- struct w83l785ts_data {
- struct i2c_client client;
- struct class_device *class_dev;
-- struct semaphore update_lock;
-+ struct mutex update_lock;
- char valid; /* zero until following fields are valid */
- unsigned long last_updated; /* in jiffies */
-
-@@ -135,13 +137,6 @@
- * Real code
- */
-
--static int w83l785ts_attach_adapter(struct i2c_adapter *adapter)
--{
-- if (!(adapter->class & I2C_CLASS_HWMON))
-- return 0;
-- return i2c_probe(adapter, &addr_data, w83l785ts_detect);
--}
--
- /*
- * The following function does more than just detection. If detection
- * succeeds, it also registers the new chip.
-@@ -221,7 +216,7 @@
- /* We can fill in the remaining client fields. */
- strlcpy(new_client->name, "w83l785ts", I2C_NAME_SIZE);
- data->valid = 0;
-- init_MUTEX(&data->update_lock);
-+ mutex_init(&data->update_lock);
-
- /* Default values in case the first read fails (unlikely). */
- data->temp[1] = data->temp[0] = 0;
-@@ -299,7 +294,7 @@
- struct i2c_client *client = to_i2c_client(dev);
- struct w83l785ts_data *data = i2c_get_clientdata(client);
-
-- down(&data->update_lock);
-+ mutex_lock(&data->update_lock);
-
- if (!data->valid || time_after(jiffies, data->last_updated + HZ * 2)) {
- dev_dbg(&client->dev, "Updating w83l785ts data.\n");
-@@ -312,7 +307,7 @@
- data->valid = 1;
- }
-
-- up(&data->update_lock);
-+ mutex_unlock(&data->update_lock);
-
- return data;
- }
---- linux-2.6.16.orig/Documentation/hwmon/w83627hf 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/Documentation/hwmon/w83627hf 2006-03-22 17:06:15.000000000 +0100
-@@ -18,6 +18,10 @@
- Prefix: 'w83637hf'
- Addresses scanned: ISA address retrieved from Super I/O registers
- Datasheet: http://www.winbond.com/PDF/sheet/w83637hf.pdf
-+ * Winbond W83687THF
-+ Prefix: 'w83687thf'
-+ Addresses scanned: ISA address retrieved from Super I/O registers
-+ Datasheet: Provided by Winbond on request
-
- Authors:
- Frodo Looijaard <frodol@dds.nl>,
---- linux-2.6.16.orig/drivers/hwmon/Kconfig 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/Kconfig 2006-03-22 17:06:16.000000000 +0100
-@@ -236,11 +236,11 @@
- will be called lm80.
-
- config SENSORS_LM83
-- tristate "National Semiconductor LM83"
-+ tristate "National Semiconductor LM83 and compatibles"
- depends on HWMON && I2C
- help
- If you say yes here you get support for National Semiconductor
-- LM83 sensor chips.
-+ LM82 and LM83 sensor chips.
-
- This driver can also be built as a module. If so, the module
- will be called lm83.
-@@ -333,11 +333,32 @@
- help
- If you say yes here you get support for the integrated fan
- monitoring and control capabilities of the SMSC LPC47B27x,
-- LPC47M10x, LPC47M13x, LPC47M14x, LPC47M15x and LPC47M192 chips.
-+ LPC47M10x, LPC47M13x, LPC47M14x, LPC47M15x, LPC47M192 and
-+ LPC47M997 chips.
-+
-+ The temperature and voltage sensor features of the LPC47M192
-+ and LPC47M997 are supported by another driver, select also
-+ "SMSC LPC47M192 and compatibles" below for those.
-
- This driver can also be built as a module. If so, the module
- will be called smsc47m1.
-
-+config SENSORS_SMSC47M192
-+ tristate "SMSC LPC47M192 and compatibles"
-+ depends on HWMON && I2C && EXPERIMENTAL
-+ select HWMON_VID
-+ help
-+ If you say yes here you get support for the temperature and
-+ voltage sensors of the SMSC LPC47M192 and LPC47M997 chips.
-+
-+ The fan monitoring and control capabilities of these chips
-+ are supported by another driver, select
-+ "SMSC LPC47M10x and compatibles" above. You need both drivers
-+ if you want fan control and voltage/temperature sensor support.
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called smsc47m192.
-+
- config SENSORS_SMSC47B397
- tristate "SMSC LPC47B397-NC"
- depends on HWMON && I2C && EXPERIMENTAL
-@@ -406,13 +427,14 @@
- will be called w83l785ts.
-
- config SENSORS_W83627HF
-- tristate "Winbond W83627HF, W83627THF, W83637HF, W83697HF"
-- depends on HWMON && I2C && EXPERIMENTAL
-+ tristate "Winbond W83627HF, W83627THF, W83637HF, W83687THF, W83697HF"
-+ depends on HWMON && I2C
- select I2C_ISA
- select HWMON_VID
- help
- If you say yes here you get support for the Winbond W836X7 series
-- of sensor chips: the W83627HF, W83627THF, W83637HF, and the W83697HF
-+ of sensor chips: the W83627HF, W83627THF, W83637HF, W83687THF and
-+ W83697HF.
-
- This driver can also be built as a module. If so, the module
- will be called w83627hf.
---- linux-2.6.16.orig/drivers/hwmon/hwmon-vid.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/hwmon-vid.c 2006-03-22 17:06:15.000000000 +0100
-@@ -54,6 +54,10 @@
- (IMVP-II). You can find more information in the datasheet of Max1718
- http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2452
-
-+ The 13 specification corresponds to the Intel Pentium M series. There
-+ doesn't seem to be any named specification for these. The conversion
-+ tables are detailed directly in the various Pentium M datasheets:
-+ http://www.intel.com/design/intarch/pentiumm/docs_pentiumm.htm
- */
-
- /* vrm is the VRM/VRD document version multiplied by 10.
-@@ -100,6 +104,8 @@
- case 17: /* Intel IMVP-II */
- return(val & 0x10 ? 975 - (val & 0xF) * 25 :
- 1750 - val * 50);
-+ case 13:
-+ return(1708 - (val & 0x3f) * 16);
- default: /* report 0 for unknown */
- printk(KERN_INFO "hwmon-vid: requested unknown VRM version\n");
- return 0;
-@@ -129,8 +135,9 @@
- static struct vrm_model vrm_models[] = {
- {X86_VENDOR_AMD, 0x6, ANY, ANY, 90}, /* Athlon Duron etc */
- {X86_VENDOR_AMD, 0xF, ANY, ANY, 24}, /* Athlon 64, Opteron and above VRM 24 */
-- {X86_VENDOR_INTEL, 0x6, 0x9, ANY, 85}, /* 0.13um too */
-+ {X86_VENDOR_INTEL, 0x6, 0x9, ANY, 13}, /* Pentium M (130 nm) */
- {X86_VENDOR_INTEL, 0x6, 0xB, ANY, 85}, /* Tualatin */
-+ {X86_VENDOR_INTEL, 0x6, 0xD, ANY, 13}, /* Pentium M (90 nm) */
- {X86_VENDOR_INTEL, 0x6, ANY, ANY, 82}, /* any P6 */
- {X86_VENDOR_INTEL, 0x7, ANY, ANY, 0}, /* Itanium */
- {X86_VENDOR_INTEL, 0xF, 0x0, ANY, 90}, /* P4 */
---- linux-2.6.16.orig/Documentation/hwmon/w83781d 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/Documentation/hwmon/w83781d 2006-03-22 17:06:15.000000000 +0100
-@@ -36,6 +36,11 @@
- Use 'init=0' to bypass initializing the chip.
- Try this if your computer crashes when you load the module.
-
-+* reset int
-+ (default 0)
-+ The driver used to reset the chip on load, but does no more. Use
-+ 'reset=1' to restore the old behavior. Report if you need to do this.
-+
- force_subclients=bus,caddr,saddr,saddr
- This is used to force the i2c addresses for subclients of
- a certain chip. Typical usage is `force_subclients=0,0x2d,0x4a,0x4b'
-@@ -123,6 +128,25 @@
- your computer speaker. It is possible to enable all beeping globally,
- or only the beeping for some alarms.
-
-+Individual alarm and beep bits:
-+
-+0x000001: in0
-+0x000002: in1
-+0x000004: in2
-+0x000008: in3
-+0x000010: temp1
-+0x000020: temp2 (+temp3 on W83781D)
-+0x000040: fan1
-+0x000080: fan2
-+0x000100: in4
-+0x000200: in5
-+0x000400: in6
-+0x000800: fan3
-+0x001000: chassis
-+0x002000: temp3 (W83782D and W83627HF only)
-+0x010000: in7 (W83782D and W83627HF only)
-+0x020000: in8 (W83782D and W83627HF only)
-+
- If an alarm triggers, it will remain triggered until the hardware register
- is read at least once. This means that the cause for the alarm may
- already have disappeared! Note that in the current implementation, all
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-frodo.c 2006-03-22 17:06:09.000000000 +0100
-+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
-@@ -1,85 +0,0 @@
--
--/*
-- * linux/drivers/i2c/i2c-frodo.c
-- *
-- * Author: Abraham van der Merwe <abraham@2d3d.co.za>
-- *
-- * An I2C adapter driver for the 2d3D, Inc. StrongARM SA-1110
-- * Development board (Frodo).
-- *
-- * This source code is free software; you can redistribute it and/or
-- * modify it under the terms of the GNU General Public License
-- * version 2 as published by the Free Software Foundation.
-- */
--
--#include <linux/module.h>
--#include <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/delay.h>
--#include <linux/i2c.h>
--#include <linux/i2c-algo-bit.h>
--#include <asm/hardware.h>
--
--
--static void frodo_setsda (void *data,int state)
--{
-- if (state)
-- FRODO_CPLD_I2C |= FRODO_I2C_SDA_OUT;
-- else
-- FRODO_CPLD_I2C &= ~FRODO_I2C_SDA_OUT;
--}
--
--static void frodo_setscl (void *data,int state)
--{
-- if (state)
-- FRODO_CPLD_I2C |= FRODO_I2C_SCL_OUT;
-- else
-- FRODO_CPLD_I2C &= ~FRODO_I2C_SCL_OUT;
--}
--
--static int frodo_getsda (void *data)
--{
-- return ((FRODO_CPLD_I2C & FRODO_I2C_SDA_IN) != 0);
--}
--
--static int frodo_getscl (void *data)
--{
-- return ((FRODO_CPLD_I2C & FRODO_I2C_SCL_IN) != 0);
--}
--
--static struct i2c_algo_bit_data bit_frodo_data = {
-- .setsda = frodo_setsda,
-- .setscl = frodo_setscl,
-- .getsda = frodo_getsda,
-- .getscl = frodo_getscl,
-- .udelay = 80,
-- .mdelay = 80,
-- .timeout = HZ
--};
--
--static struct i2c_adapter frodo_ops = {
-- .owner = THIS_MODULE,
-- .id = I2C_HW_B_FRODO,
-- .algo_data = &bit_frodo_data,
-- .dev = {
-- .name = "Frodo adapter driver",
-- },
--};
--
--static int __init i2c_frodo_init (void)
--{
-- return i2c_bit_add_bus(&frodo_ops);
--}
--
--static void __exit i2c_frodo_exit (void)
--{
-- i2c_bit_del_bus(&frodo_ops);
--}
--
--MODULE_AUTHOR ("Abraham van der Merwe <abraham@2d3d.co.za>");
--MODULE_DESCRIPTION ("I2C-Bus adapter routines for Frodo");
--MODULE_LICENSE ("GPL");
--
--module_init (i2c_frodo_init);
--module_exit (i2c_frodo_exit);
--
---- linux-2.6.16.orig/include/linux/i2c-id.h 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/include/linux/i2c-id.h 2006-03-22 17:06:15.000000000 +0100
-@@ -172,7 +172,6 @@
- #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */
- #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */
- #define I2C_HW_B_TSUNA 0x010012 /* DEC Tsunami chipset */
--#define I2C_HW_B_FRODO 0x010013 /* 2d3D SA-1110 Development Board */
- #define I2C_HW_B_OMAHA 0x010014 /* Omaha I2C interface (ARM) */
- #define I2C_HW_B_GUIDE 0x010015 /* Guide bit-basher */
- #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ite.c 2006-03-22 17:06:09.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ite.c 2006-03-22 17:06:15.000000000 +0100
-@@ -200,9 +200,7 @@
- .owner = THIS_MODULE,
- .id = I2C_HW_I_IIC,
- .algo_data = &iic_ite_data,
-- .dev = {
-- .name = "ITE IIC adapter",
-- },
-+ .name = "ITE IIC adapter",
- };
-
- /* Called when the module is loaded. This function starts the
---- linux-2.6.16.orig/drivers/i2c/chips/isp1301_omap.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/chips/isp1301_omap.c 2006-03-22 17:06:15.000000000 +0100
-@@ -1635,8 +1635,6 @@
- .driver = {
- .name = "isp1301_omap",
- },
-- .id = 1301, /* FIXME "official", i2c-ids.h */
-- .class = I2C_CLASS_HWMON,
- .attach_adapter = isp1301_scan_bus,
- .detach_client = isp1301_detach_client,
- };
---- linux-2.6.16.orig/Documentation/i2c/busses/i2c-piix4 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/Documentation/i2c/busses/i2c-piix4 2006-03-22 17:06:16.000000000 +0100
-@@ -4,8 +4,10 @@
- * Intel 82371AB PIIX4 and PIIX4E
- * Intel 82443MX (440MX)
- Datasheet: Publicly available at the Intel website
-- * ServerWorks OSB4, CSB5 and CSB6 southbridges
-+ * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges
- Datasheet: Only available via NDA from ServerWorks
-+ * ATI IXP southbridges IXP200, IXP300, IXP400
-+ Datasheet: Not publicly available
- * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge
- Datasheet: Publicly available at the SMSC website http://www.smsc.com
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-piix4.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-piix4.c 2006-03-22 17:06:16.000000000 +0100
-@@ -22,7 +22,7 @@
- /*
- Supports:
- Intel PIIX4, 440MX
-- Serverworks OSB4, CSB5, CSB6
-+ Serverworks OSB4, CSB5, CSB6, HT-1000
- SMSC Victory66
-
- Note: we assume there can only be one device, with one SMBus interface.
-@@ -406,19 +406,27 @@
-
- static struct i2c_adapter piix4_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
- static struct pci_device_id piix4_ids[] = {
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3),
- .driver_data = 3 },
-+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_SMBUS),
-+ .driver_data = 0 },
-+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_SMBUS),
-+ .driver_data = 0 },
-+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS),
-+ .driver_data = 0 },
- { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4),
- .driver_data = 0 },
- { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5),
- .driver_data = 0 },
- { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6),
- .driver_data = 0 },
-+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB),
-+ .driver_data = 0 },
- { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_3),
- .driver_data = 3 },
- { PCI_DEVICE(PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_3),
---- linux-2.6.16.orig/include/linux/pci_ids.h 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/include/linux/pci_ids.h 2006-03-22 17:06:16.000000000 +0100
-@@ -351,8 +351,11 @@
- #define PCI_DEVICE_ID_ATI_RS480 0x5950
- /* ATI IXP Chipset */
- #define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349
-+#define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353
-+#define PCI_DEVICE_ID_ATI_IXP300_SMBUS 0x4363
- #define PCI_DEVICE_ID_ATI_IXP300_IDE 0x4369
- #define PCI_DEVICE_ID_ATI_IXP300_SATA 0x436e
-+#define PCI_DEVICE_ID_ATI_IXP400_SMBUS 0x4372
- #define PCI_DEVICE_ID_ATI_IXP400_IDE 0x4376
- #define PCI_DEVICE_ID_ATI_IXP400_SATA 0x4379
-
-@@ -1369,6 +1372,7 @@
- #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200
- #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201
- #define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203
-+#define PCI_DEVICE_ID_SERVERWORKS_HT1000SB 0x0205
- #define PCI_DEVICE_ID_SERVERWORKS_OSB4IDE 0x0211
- #define PCI_DEVICE_ID_SERVERWORKS_CSB5IDE 0x0212
- #define PCI_DEVICE_ID_SERVERWORKS_CSB6IDE 0x0213
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ixp4xx.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ixp4xx.c 2006-03-22 17:06:16.000000000 +0100
-@@ -125,7 +125,9 @@
- drv_data->algo_data.mdelay = 10;
- drv_data->algo_data.timeout = 100;
-
-+ drv_data->adapter.owner = THIS_MODULE;
- drv_data->adapter.id = I2C_HW_B_IXP4XX;
-+ drv_data->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_DATA;
- strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
- I2C_NAME_SIZE);
- drv_data->adapter.algo_data = &drv_data->algo_data;
---- linux-2.6.16.orig/drivers/media/video/adv7170.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/adv7170.c 2006-03-22 17:06:15.000000000 +0100
-@@ -53,7 +53,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(x) (x)->name
-
-@@ -125,24 +124,21 @@
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
- struct adv7170 *encoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-+ block_data[block_len++] =
- encoder->reg[reg++] = data[1];
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
---- linux-2.6.16.orig/drivers/media/video/adv7175.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/adv7175.c 2006-03-22 17:06:16.000000000 +0100
-@@ -49,7 +49,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -68,8 +67,6 @@
- /* ----------------------------------------------------------------------- */
-
- struct adv7175 {
-- unsigned char reg[128];
--
- int norm;
- int input;
- int enable;
-@@ -95,9 +92,6 @@
- u8 reg,
- u8 value)
- {
-- struct adv7175 *encoder = i2c_get_clientdata(client);
--
-- encoder->reg[reg] = value;
- return i2c_smbus_write_byte_data(client, reg, value);
- }
-
-@@ -120,25 +114,21 @@
- * the adapter understands raw I2C */
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
-- struct adv7175 *encoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-- encoder->reg[reg++] = data[1];
-+ block_data[block_len++] = data[1];
-+ reg++;
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
-@@ -171,24 +161,6 @@
- adv7175_write(client, 0x05, 0x25);
- }
-
--#ifdef ENCODER_DUMP
--static void
--dump (struct i2c_client *client)
--{
-- struct adv7175 *encoder = i2c_get_clientdata(client);
-- int i, j;
--
-- printk(KERN_INFO "%s: registry dump\n", I2C_NAME(client));
-- for (i = 0; i < 182 / 8; i++) {
-- printk("%s: 0x%02x -", I2C_NAME(client), i * 8);
-- for (j = 0; j < 8; j++) {
-- printk(" 0x%02x", encoder->reg[i * 8 + j]);
-- }
-- printk("\n");
-- }
--}
--#endif
--
- /* ----------------------------------------------------------------------- */
- // Output filter: S-Video Composite
-
-@@ -407,14 +379,6 @@
- }
- break;
-
--#ifdef ENCODER_DUMP
-- case ENCODER_DUMP:
-- {
-- dump(client);
-- }
-- break;
--#endif
--
- default:
- return -EINVAL;
- }
-@@ -424,24 +388,6 @@
-
- /* ----------------------------------------------------------------------- */
-
--/*
-- * Generic i2c probe
-- * concerning the addresses: i2c wants 7 bit (without the r/w bit), so '>>1'
-- */
--static unsigned short normal_i2c[] =
-- { I2C_ADV7175 >> 1, (I2C_ADV7175 >> 1) + 1,
-- I2C_ADV7176 >> 1, (I2C_ADV7176 >> 1) + 1,
-- I2C_CLIENT_END
--};
--
--static unsigned short ignore = I2C_CLIENT_END;
--
--static struct i2c_client_address_data addr_data = {
-- .normal_i2c = normal_i2c,
-- .probe = &ignore,
-- .ignore = &ignore,
--};
--
- static struct i2c_driver i2c_driver_adv7175;
-
- static int
-@@ -516,16 +462,6 @@
- }
-
- static int
--adv7175_attach_adapter (struct i2c_adapter *adapter)
--{
-- dprintk(1,
-- KERN_INFO
-- "adv7175.c: starting probe for adapter %s (0x%x)\n",
-- I2C_NAME(adapter), adapter->id);
-- return i2c_probe(adapter, &addr_data, &adv7175_detect_client);
--}
--
--static int
- adv7175_detach_client (struct i2c_client *client)
- {
- struct adv7175 *encoder = i2c_get_clientdata(client);
-@@ -551,7 +487,7 @@
-
- .id = I2C_DRIVERID_ADV7175,
-
-- .attach_adapter = adv7175_attach_adapter,
-+ .detect_client = adv7175_detect_client,
- .detach_client = adv7175_detach_client,
- .command = adv7175_command,
- };
---- linux-2.6.16.orig/drivers/media/video/bt819.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/bt819.c 2006-03-22 17:06:15.000000000 +0100
-@@ -53,7 +53,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -141,24 +140,21 @@
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
- struct bt819 *decoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-+ block_data[block_len++] =
- decoder->reg[reg++] = data[1];
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
---- linux-2.6.16.orig/drivers/media/video/bt856.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/bt856.c 2006-03-22 17:06:15.000000000 +0100
-@@ -53,7 +53,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -71,17 +70,14 @@
-
- /* ----------------------------------------------------------------------- */
-
--#define REG_OFFSET 0xCE
-+#define REG_OFFSET 0xDA
-+#define BT856_NR_REG 6
-
- struct bt856 {
-- unsigned char reg[32];
-+ unsigned char reg[BT856_NR_REG];
-
- int norm;
- int enable;
-- int bright;
-- int contrast;
-- int hue;
-- int sat;
- };
-
- #define I2C_BT856 0x88
-@@ -120,8 +116,8 @@
- struct bt856 *encoder = i2c_get_clientdata(client);
-
- printk(KERN_INFO "%s: register dump:", I2C_NAME(client));
-- for (i = 0xd6; i <= 0xde; i += 2)
-- printk(" %02x", encoder->reg[i - REG_OFFSET]);
-+ for (i = 0; i < BT856_NR_REG; i += 2)
-+ printk(" %02x", encoder->reg[i]);
- printk("\n");
- }
-
---- linux-2.6.16.orig/drivers/media/video/saa7110.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/saa7110.c 2006-03-22 17:06:16.000000000 +0100
-@@ -39,7 +39,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -59,8 +58,6 @@
- #define SAA7110_MAX_INPUT 9 /* 6 CVBS, 3 SVHS */
- #define SAA7110_MAX_OUTPUT 0 /* its a decoder only */
-
--#define I2C_SAA7110 0x9C /* or 0x9E */
--
- #define SAA7110_NR_REG 0x35
-
- struct saa7110 {
-@@ -108,13 +105,8 @@
- * the adapter understands raw I2C */
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- struct saa7110 *decoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
-
-- msg.len = len;
-- msg.buf = (char *) data;
-- msg.addr = client->addr;
-- msg.flags = 0;
-- ret = i2c_transfer(client->adapter, &msg, 1);
-+ ret = i2c_master_send(client, data, len);
-
- /* Cache the written data */
- memcpy(decoder->reg + reg, data + 1, len - 1);
-@@ -432,15 +424,13 @@
- break;
-
- case DECODER_DUMP:
-- for (v = 0; v < 0x34; v += 16) {
-+ for (v = 0; v < SAA7110_NR_REG; v += 16) {
- int j;
-- dprintk(1, KERN_INFO "%s: %03x\n", I2C_NAME(client),
-+ dprintk(1, KERN_DEBUG "%s: %02x:", I2C_NAME(client),
- v);
-- for (j = 0; j < 16; j++) {
-- dprintk(1, KERN_INFO " %02x",
-- decoder->reg[v + j]);
-- }
-- dprintk(1, KERN_INFO "\n");
-+ for (j = 0; j < 16 && v + j < SAA7110_NR_REG; j++)
-+ dprintk(1, " %02x", decoder->reg[v + j]);
-+ dprintk(1, "\n");
- }
- break;
-
-@@ -454,24 +444,6 @@
-
- /* ----------------------------------------------------------------------- */
-
--/*
-- * Generic i2c probe
-- * concerning the addresses: i2c wants 7 bit (without the r/w bit), so '>>1'
-- */
--static unsigned short normal_i2c[] = {
-- I2C_SAA7110 >> 1,
-- (I2C_SAA7110 >> 1) + 1,
-- I2C_CLIENT_END
--};
--
--static unsigned short ignore = I2C_CLIENT_END;
--
--static struct i2c_client_address_data addr_data = {
-- .normal_i2c = normal_i2c,
-- .probe = &ignore,
-- .ignore = &ignore,
--};
--
- static struct i2c_driver i2c_driver_saa7110;
-
- static int
-@@ -555,16 +527,6 @@
- }
-
- static int
--saa7110_attach_adapter (struct i2c_adapter *adapter)
--{
-- dprintk(1,
-- KERN_INFO
-- "saa7110.c: starting probe for adapter %s (0x%x)\n",
-- I2C_NAME(adapter), adapter->id);
-- return i2c_probe(adapter, &addr_data, &saa7110_detect_client);
--}
--
--static int
- saa7110_detach_client (struct i2c_client *client)
- {
- struct saa7110 *decoder = i2c_get_clientdata(client);
-@@ -590,7 +552,7 @@
-
- .id = I2C_DRIVERID_SAA7110,
-
-- .attach_adapter = saa7110_attach_adapter,
-+ .detect_client = saa7110_detect_client,
- .detach_client = saa7110_detach_client,
- .command = saa7110_command,
- };
---- linux-2.6.16.orig/drivers/media/video/saa7111.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/saa7111.c 2006-03-22 17:06:15.000000000 +0100
-@@ -52,7 +52,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -70,8 +69,10 @@
-
- /* ----------------------------------------------------------------------- */
-
-+#define SAA7111_NR_REG 0x18
-+
- struct saa7111 {
-- unsigned char reg[32];
-+ unsigned char reg[SAA7111_NR_REG];
-
- int norm;
- int input;
-@@ -110,24 +111,21 @@
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
- struct saa7111 *decoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-+ block_data[block_len++] =
- decoder->reg[reg++] = data[1];
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
-@@ -227,11 +225,11 @@
- {
- int i;
-
-- for (i = 0; i < 32; i += 16) {
-+ for (i = 0; i < SAA7111_NR_REG; i += 16) {
- int j;
-
- printk(KERN_DEBUG "%s: %03x", I2C_NAME(client), i);
-- for (j = 0; j < 16; ++j) {
-+ for (j = 0; j < 16 && i + j < SAA7111_NR_REG; ++j) {
- printk(" %02x",
- saa7111_read(client, i + j));
- }
---- linux-2.6.16.orig/drivers/media/video/saa7114.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/saa7114.c 2006-03-22 17:06:15.000000000 +0100
-@@ -55,7 +55,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(x) (x)->name
-
-@@ -139,9 +138,6 @@
- u8 reg,
- u8 value)
- {
-- /*struct saa7114 *decoder = i2c_get_clientdata(client);*/
--
-- /*decoder->reg[reg] = value;*/
- return i2c_smbus_write_byte_data(client, reg, value);
- }
-
-@@ -157,25 +153,21 @@
- * the adapter understands raw I2C */
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
-- /*struct saa7114 *decoder = i2c_get_clientdata(client);*/
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-- /*decoder->reg[reg++] =*/ data[1];
-+ block_data[block_len++] = data[1];
-+ reg++;
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
---- linux-2.6.16.orig/drivers/media/video/saa711x.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/saa711x.c 2006-03-22 17:06:15.000000000 +0100
-@@ -45,7 +45,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
---- linux-2.6.16.orig/drivers/media/video/saa7185.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/saa7185.c 2006-03-22 17:06:15.000000000 +0100
-@@ -49,7 +49,6 @@
- MODULE_LICENSE("GPL");
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(s) (s)->name
-
-@@ -113,24 +112,21 @@
- if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- /* do raw I2C, not smbus compatible */
- struct saa7185 *encoder = i2c_get_clientdata(client);
-- struct i2c_msg msg;
- u8 block_data[32];
-+ int block_len;
-
-- msg.addr = client->addr;
-- msg.flags = 0;
- while (len >= 2) {
-- msg.buf = (char *) block_data;
-- msg.len = 0;
-- block_data[msg.len++] = reg = data[0];
-+ block_len = 0;
-+ block_data[block_len++] = reg = data[0];
- do {
-- block_data[msg.len++] =
-+ block_data[block_len++] =
- encoder->reg[reg++] = data[1];
- len -= 2;
- data += 2;
- } while (len >= 2 && data[0] == reg &&
-- msg.len < 32);
-- if ((ret = i2c_transfer(client->adapter,
-- &msg, 1)) < 0)
-+ block_len < 32);
-+ if ((ret = i2c_master_send(client, block_data,
-+ block_len)) < 0)
- break;
- }
- } else {
---- linux-2.6.16.orig/drivers/media/video/vpx3220.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/vpx3220.c 2006-03-22 17:06:15.000000000 +0100
-@@ -30,7 +30,6 @@
- #include <asm/uaccess.h>
-
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
-
- #define I2C_NAME(x) (x)->name
-
---- linux-2.6.16.orig/sound/oss/dmasound/dmasound_awacs.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/sound/oss/dmasound/dmasound_awacs.c 2006-03-22 17:06:15.000000000 +0100
-@@ -88,8 +88,6 @@
- #include <linux/pmu.h>
- #endif
-
--#include <linux/i2c-dev.h>
--
- #include <asm/uaccess.h>
- #include <asm/prom.h>
- #include <asm/machdep.h>
---- linux-2.6.16.orig/sound/ppc/daca.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/sound/ppc/daca.c 2006-03-22 17:06:15.000000000 +0100
-@@ -22,7 +22,6 @@
- #include <sound/driver.h>
- #include <linux/init.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <linux/kmod.h>
- #include <linux/slab.h>
- #include <sound/core.h>
---- linux-2.6.16.orig/sound/ppc/keywest.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/sound/ppc/keywest.c 2006-03-22 17:06:15.000000000 +0100
-@@ -23,7 +23,6 @@
- #include <linux/init.h>
- #include <linux/i2c.h>
- #include <linux/delay.h>
--#include <linux/i2c-dev.h>
- #include <linux/slab.h>
- #include <sound/core.h>
- #include "pmac.h"
---- linux-2.6.16.orig/sound/ppc/toonie.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/sound/ppc/toonie.c 2006-03-22 17:06:15.000000000 +0100
-@@ -22,7 +22,6 @@
- #include <linux/init.h>
- #include <linux/delay.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <linux/kmod.h>
- #include <linux/slab.h>
- #include <linux/interrupt.h>
---- linux-2.6.16.orig/sound/ppc/tumbler.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/sound/ppc/tumbler.c 2006-03-22 17:06:15.000000000 +0100
-@@ -28,7 +28,6 @@
- #include <linux/init.h>
- #include <linux/delay.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <linux/kmod.h>
- #include <linux/slab.h>
- #include <linux/interrupt.h>
---- linux-2.6.16.orig/drivers/hwmon/hwmon.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/hwmon.c 2006-03-22 17:06:15.000000000 +0100
-@@ -17,6 +17,7 @@
- #include <linux/idr.h>
- #include <linux/hwmon.h>
- #include <linux/gfp.h>
-+#include <linux/spinlock.h>
-
- #define HWMON_ID_PREFIX "hwmon"
- #define HWMON_ID_FORMAT HWMON_ID_PREFIX "%d"
-@@ -24,6 +25,7 @@
- static struct class *hwmon_class;
-
- static DEFINE_IDR(hwmon_idr);
-+static DEFINE_SPINLOCK(idr_lock);
-
- /**
- * hwmon_device_register - register w/ hwmon sysfs class
-@@ -37,20 +39,30 @@
- struct class_device *hwmon_device_register(struct device *dev)
- {
- struct class_device *cdev;
-- int id;
-+ int id, err;
-
-- if (idr_pre_get(&hwmon_idr, GFP_KERNEL) == 0)
-+again:
-+ if (unlikely(idr_pre_get(&hwmon_idr, GFP_KERNEL) == 0))
- return ERR_PTR(-ENOMEM);
-
-- if (idr_get_new(&hwmon_idr, NULL, &id) < 0)
-- return ERR_PTR(-ENOMEM);
-+ spin_lock(&idr_lock);
-+ err = idr_get_new(&hwmon_idr, NULL, &id);
-+ spin_unlock(&idr_lock);
-+
-+ if (unlikely(err == -EAGAIN))
-+ goto again;
-+ else if (unlikely(err))
-+ return ERR_PTR(err);
-
- id = id & MAX_ID_MASK;
- cdev = class_device_create(hwmon_class, NULL, MKDEV(0,0), dev,
- HWMON_ID_FORMAT, id);
-
-- if (IS_ERR(cdev))
-+ if (IS_ERR(cdev)) {
-+ spin_lock(&idr_lock);
- idr_remove(&hwmon_idr, id);
-+ spin_unlock(&idr_lock);
-+ }
-
- return cdev;
- }
-@@ -64,9 +76,11 @@
- {
- int id;
-
-- if (sscanf(cdev->class_id, HWMON_ID_FORMAT, &id) == 1) {
-+ if (likely(sscanf(cdev->class_id, HWMON_ID_FORMAT, &id) == 1)) {
- class_device_unregister(cdev);
-+ spin_lock(&idr_lock);
- idr_remove(&hwmon_idr, id);
-+ spin_unlock(&idr_lock);
- } else
- dev_dbg(cdev->dev,
- "hwmon_device_unregister() failed: bad class ID!\n");
---- linux-2.6.16.orig/arch/m68k/bvme6000/rtc.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/arch/m68k/bvme6000/rtc.c 2006-03-22 17:06:15.000000000 +0100
-@@ -18,6 +18,7 @@
- #include <linux/module.h>
- #include <linux/mc146818rtc.h> /* For struct rtc_time and ioctls, etc */
- #include <linux/smp_lock.h>
-+#include <linux/bcd.h>
- #include <asm/bvme6000hw.h>
-
- #include <asm/io.h>
-@@ -32,9 +33,6 @@
- * ioctls.
- */
-
--#define BCD2BIN(val) (((val)&15) + ((val)>>4)*10)
--#define BIN2BCD(val) ((((val)/10)<<4) + (val)%10)
--
- static unsigned char days_in_mo[] =
- {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-
---- linux-2.6.16.orig/drivers/video/matrox/matroxfb_maven.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/video/matrox/matroxfb_maven.c 2006-03-22 17:06:15.000000000 +0100
-@@ -129,7 +129,7 @@
-
- struct maven_data {
- struct matrox_fb_info* primary_head;
-- struct i2c_client* client;
-+ struct i2c_client client;
- int version;
- };
-
-@@ -970,7 +970,7 @@
-
- static int maven_program_timming(struct maven_data* md,
- const struct mavenregs* m) {
-- struct i2c_client* c = md->client;
-+ struct i2c_client* c = &md->client;
-
- if (m->mode == MATROXFB_OUTPUT_MODE_MONITOR) {
- LR(0x80);
-@@ -1007,7 +1007,7 @@
- }
-
- static inline int maven_resync(struct maven_data* md) {
-- struct i2c_client* c = md->client;
-+ struct i2c_client* c = &md->client;
- maven_set_reg(c, 0x95, 0x20); /* start whole thing */
- return 0;
- }
-@@ -1065,48 +1065,48 @@
- maven_compute_bwlevel(md, &blacklevel, &whitelevel);
- blacklevel = (blacklevel >> 2) | ((blacklevel & 3) << 8);
- whitelevel = (whitelevel >> 2) | ((whitelevel & 3) << 8);
-- maven_set_reg_pair(md->client, 0x0e, blacklevel);
-- maven_set_reg_pair(md->client, 0x1e, whitelevel);
-+ maven_set_reg_pair(&md->client, 0x0e, blacklevel);
-+ maven_set_reg_pair(&md->client, 0x1e, whitelevel);
- }
- break;
- case V4L2_CID_SATURATION:
- {
-- maven_set_reg(md->client, 0x20, p->value);
-- maven_set_reg(md->client, 0x22, p->value);
-+ maven_set_reg(&md->client, 0x20, p->value);
-+ maven_set_reg(&md->client, 0x22, p->value);
- }
- break;
- case V4L2_CID_HUE:
- {
-- maven_set_reg(md->client, 0x25, p->value);
-+ maven_set_reg(&md->client, 0x25, p->value);
- }
- break;
- case V4L2_CID_GAMMA:
- {
- const struct maven_gamma* g;
- g = maven_compute_gamma(md);
-- maven_set_reg(md->client, 0x83, g->reg83);
-- maven_set_reg(md->client, 0x84, g->reg84);
-- maven_set_reg(md->client, 0x85, g->reg85);
-- maven_set_reg(md->client, 0x86, g->reg86);
-- maven_set_reg(md->client, 0x87, g->reg87);
-- maven_set_reg(md->client, 0x88, g->reg88);
-- maven_set_reg(md->client, 0x89, g->reg89);
-- maven_set_reg(md->client, 0x8a, g->reg8a);
-- maven_set_reg(md->client, 0x8b, g->reg8b);
-+ maven_set_reg(&md->client, 0x83, g->reg83);
-+ maven_set_reg(&md->client, 0x84, g->reg84);
-+ maven_set_reg(&md->client, 0x85, g->reg85);
-+ maven_set_reg(&md->client, 0x86, g->reg86);
-+ maven_set_reg(&md->client, 0x87, g->reg87);
-+ maven_set_reg(&md->client, 0x88, g->reg88);
-+ maven_set_reg(&md->client, 0x89, g->reg89);
-+ maven_set_reg(&md->client, 0x8a, g->reg8a);
-+ maven_set_reg(&md->client, 0x8b, g->reg8b);
- }
- break;
- case MATROXFB_CID_TESTOUT:
- {
- unsigned char val
-- = maven_get_reg (md->client,0x8d);
-+ = maven_get_reg(&md->client,0x8d);
- if (p->value) val |= 0x10;
- else val &= ~0x10;
-- maven_set_reg (md->client, 0x8d, val);
-+ maven_set_reg(&md->client, 0x8d, val);
- }
- break;
- case MATROXFB_CID_DEFLICKER:
- {
-- maven_set_reg(md->client, 0x93, maven_compute_deflicker(md));
-+ maven_set_reg(&md->client, 0x93, maven_compute_deflicker(md));
- }
- break;
- }
-@@ -1185,7 +1185,6 @@
- MINFO_FROM(container_of(clnt->adapter, struct i2c_bit_adapter, adapter)->minfo);
-
- md->primary_head = MINFO;
-- md->client = clnt;
- down_write(&ACCESS_FBINFO(altout.lock));
- ACCESS_FBINFO(outputs[1]).output = &maven_altout;
- ACCESS_FBINFO(outputs[1]).src = ACCESS_FBINFO(outputs[1]).default_src;
-@@ -1243,19 +1242,17 @@
- I2C_FUNC_SMBUS_BYTE_DATA |
- I2C_FUNC_PROTOCOL_MANGLING))
- goto ERROR0;
-- if (!(new_client = (struct i2c_client*)kmalloc(sizeof(*new_client) + sizeof(*data),
-- GFP_KERNEL))) {
-+ if (!(data = kzalloc(sizeof(*data), GFP_KERNEL))) {
- err = -ENOMEM;
- goto ERROR0;
- }
-- memset(new_client, 0, sizeof(*new_client) + sizeof(*data));
-- data = (struct maven_data*)(new_client + 1);
-+ new_client = &data->client;
- i2c_set_clientdata(new_client, data);
- new_client->addr = address;
- new_client->adapter = adapter;
- new_client->driver = &maven_driver;
- new_client->flags = 0;
-- strcpy(new_client->name, "maven client");
-+ strlcpy(new_client->name, "maven", I2C_NAME_SIZE);
- if ((err = i2c_attach_client(new_client)))
- goto ERROR3;
- err = maven_init_client(new_client);
-@@ -1279,12 +1276,10 @@
- static int maven_detach_client(struct i2c_client* client) {
- int err;
-
-- if ((err = i2c_detach_client(client))) {
-- printk(KERN_ERR "maven: Cannot deregister client\n");
-+ if ((err = i2c_detach_client(client)))
- return err;
-- }
- maven_shutdown_client(client);
-- kfree(client);
-+ kfree(i2c_get_clientdata(client));
- return 0;
- }
-
-@@ -1297,20 +1292,13 @@
- .detach_client = maven_detach_client,
- };
-
--/* ************************** */
--
--static int matroxfb_maven_init(void) {
-- int err;
--
-- err = i2c_add_driver(&maven_driver);
-- if (err) {
-- printk(KERN_ERR "maven: Maven driver failed to register (%d).\n", err);
-- return err;
-- }
-- return 0;
-+static int __init matroxfb_maven_init(void)
-+{
-+ return i2c_add_driver(&maven_driver);
- }
-
--static void matroxfb_maven_exit(void) {
-+static void __exit matroxfb_maven_exit(void)
-+{
- i2c_del_driver(&maven_driver);
- }
-
---- linux-2.6.16.orig/drivers/macintosh/therm_pm72.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/macintosh/therm_pm72.c 2006-03-22 17:06:15.000000000 +0100
-@@ -104,7 +104,6 @@
- #include <linux/kernel.h>
- #include <linux/delay.h>
- #include <linux/sched.h>
--#include <linux/i2c.h>
- #include <linux/slab.h>
- #include <linux/init.h>
- #include <linux/spinlock.h>
-@@ -113,7 +112,6 @@
- #include <linux/reboot.h>
- #include <linux/kmod.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <asm/prom.h>
- #include <asm/machdep.h>
- #include <asm/io.h>
---- linux-2.6.16.orig/drivers/macintosh/windfarm_lm75_sensor.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/macintosh/windfarm_lm75_sensor.c 2006-03-22 17:06:15.000000000 +0100
-@@ -15,7 +15,6 @@
- #include <linux/init.h>
- #include <linux/wait.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <asm/prom.h>
- #include <asm/machdep.h>
- #include <asm/io.h>
---- linux-2.6.16.orig/drivers/macintosh/windfarm_max6690_sensor.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/macintosh/windfarm_max6690_sensor.c 2006-03-22 17:06:15.000000000 +0100
-@@ -11,7 +11,6 @@
- #include <linux/init.h>
- #include <linux/slab.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <asm/prom.h>
- #include <asm/pmac_low_i2c.h>
-
---- linux-2.6.16.orig/drivers/macintosh/windfarm_smu_sat.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/drivers/macintosh/windfarm_smu_sat.c 2006-03-22 17:06:15.000000000 +0100
-@@ -13,7 +13,6 @@
- #include <linux/init.h>
- #include <linux/wait.h>
- #include <linux/i2c.h>
--#include <linux/i2c-dev.h>
- #include <asm/semaphore.h>
- #include <asm/prom.h>
- #include <asm/smu.h>
---- linux-2.6.16.orig/arch/i386/kernel/traps.c 2006-03-22 17:06:08.000000000 +0100
-+++ linux-2.6.16/arch/i386/kernel/traps.c 2006-03-22 17:06:15.000000000 +0100
-@@ -166,8 +166,7 @@
- stack = (unsigned long*)context->previous_esp;
- if (!stack)
- break;
-- printk(log_lvl);
-- printk(" =======================\n");
-+ printk("%s =======================\n", log_lvl);
- }
- }
-
-@@ -196,14 +195,12 @@
- break;
- if (i && ((i % 8) == 0)) {
- printk("\n");
-- printk(log_lvl);
-- printk(" ");
-+ printk("%s ", log_lvl);
- }
- printk("%08lx ", *stack++);
- }
- printk("\n");
-- printk(log_lvl);
-- printk("Call Trace:\n");
-+ printk("%sCall Trace:\n", log_lvl);
- show_trace_log_lvl(task, esp, log_lvl);
- }
-
---- linux-2.6.16.orig/drivers/media/video/zoran_card.c 2006-03-22 17:06:07.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/zoran_card.c 2006-03-22 17:06:16.000000000 +0100
-@@ -452,6 +452,8 @@
- .device_id = PCI_DEVICE_ID_MIRO_DC10PLUS,
- .i2c_decoder = I2C_DRIVERID_SAA7110,
- .i2c_encoder = I2C_DRIVERID_ADV7175,
-+ .decoder_addr = 0x4e,
-+ .encoder_addr = 0x2b,
- .video_codec = CODEC_TYPE_ZR36060,
-
- .inputs = 3,
-@@ -995,10 +997,7 @@
- static int __devinit
- zr36057_init (struct zoran *zr)
- {
-- u32 *mem;
-- void *vdev;
-- unsigned mem_needed;
-- int j;
-+ int j, err;
- int two = 2;
- int zero = 0;
-
-@@ -1049,19 +1048,16 @@
-
- /* allocate memory *before* doing anything to the hardware
- * in case allocation fails */
-- mem_needed = BUZ_NUM_STAT_COM * 4;
-- mem = kzalloc(mem_needed, GFP_KERNEL);
-- vdev = (void *) kmalloc(sizeof(struct video_device), GFP_KERNEL);
-- if (!mem || !vdev) {
-+ zr->stat_com = kzalloc(BUZ_NUM_STAT_COM * 4, GFP_KERNEL);
-+ zr->video_dev = kmalloc(sizeof(struct video_device), GFP_KERNEL);
-+ if (!zr->stat_com || !zr->video_dev) {
- dprintk(1,
- KERN_ERR
- "%s: zr36057_init() - kmalloc (STAT_COM) failed\n",
- ZR_DEVNAME(zr));
-- kfree(vdev);
-- kfree(mem);
-- return -ENOMEM;
-+ err = -ENOMEM;
-+ goto exit_free;
- }
-- zr->stat_com = mem;
- for (j = 0; j < BUZ_NUM_STAT_COM; j++) {
- zr->stat_com[j] = 1; /* mark as unavailable to zr36057 */
- }
-@@ -1069,16 +1065,11 @@
- /*
- * Now add the template and register the device unit.
- */
-- zr->video_dev = vdev;
- memcpy(zr->video_dev, &zoran_template, sizeof(zoran_template));
- strcpy(zr->video_dev->name, ZR_DEVNAME(zr));
-- if (video_register_device(zr->video_dev, VFL_TYPE_GRABBER,
-- video_nr) < 0) {
-- zoran_unregister_i2c(zr);
-- kfree((void *) zr->stat_com);
-- kfree(vdev);
-- return -1;
-- }
-+ err = video_register_device(zr->video_dev, VFL_TYPE_GRABBER, video_nr);
-+ if (err < 0)
-+ goto exit_unregister;
-
- zoran_init_hardware(zr);
- if (*zr_debug > 2)
-@@ -1092,6 +1083,13 @@
- zr->zoran_proc = NULL;
- zr->initialized = 1;
- return 0;
-+
-+exit_unregister:
-+ zoran_unregister_i2c(zr);
-+exit_free:
-+ kfree(zr->stat_com);
-+ kfree(zr->video_dev);
-+ return err;
- }
-
- static void
-@@ -1121,7 +1119,7 @@
- btwrite(0, ZR36057_SPGPPCR);
- free_irq(zr->pci_dev->irq, zr);
- /* unmap and free memory */
-- kfree((void *) zr->stat_com);
-+ kfree(zr->stat_com);
- zoran_proc_cleanup(zr);
- iounmap(zr->zr36057_mem);
- pci_disable_device(zr->pci_dev);
-@@ -1349,6 +1347,14 @@
- i2c_dec_name = NULL;
- }
-
-+ if (zoran_register_i2c(zr) < 0) {
-+ dprintk(1,
-+ KERN_ERR
-+ "%s: find_zr36057() - can't initialize i2c bus\n",
-+ ZR_DEVNAME(zr));
-+ goto zr_free_irq;
-+ }
-+
- if (i2c_dec_name) {
- if ((result = request_module(i2c_dec_name)) < 0) {
- dprintk(1,
-@@ -1356,6 +1362,10 @@
- "%s: failed to load module %s: %d\n",
- ZR_DEVNAME(zr), i2c_dec_name, result);
- }
-+
-+ i2c_probe_device(&zr->i2c_adapter,
-+ zr->card.i2c_decoder,
-+ zr->card.decoder_addr, 0);
- }
-
- /* i2c encoder */
-@@ -1376,14 +1386,10 @@
- "%s: failed to load module %s: %d\n",
- ZR_DEVNAME(zr), i2c_enc_name, result);
- }
-- }
-
-- if (zoran_register_i2c(zr) < 0) {
-- dprintk(1,
-- KERN_ERR
-- "%s: find_zr36057() - can't initialize i2c bus\n",
-- ZR_DEVNAME(zr));
-- goto zr_free_irq;
-+ i2c_probe_device(&zr->i2c_adapter,
-+ zr->card.i2c_encoder,
-+ zr->card.encoder_addr, 0);
- }
-
- dprintk(2,
---- linux-2.6.16.orig/Documentation/hwmon/lm83 2006-03-22 17:06:07.000000000 +0100
-+++ linux-2.6.16/Documentation/hwmon/lm83 2006-03-22 17:06:16.000000000 +0100
-@@ -7,6 +7,10 @@
- Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
- Datasheet: Publicly available at the National Semiconductor website
- http://www.national.com/pf/LM/LM83.html
-+ * National Semiconductor LM82
-+ Addresses scanned: I2C 0x18 - 0x1a, 0x29 - 0x2b, 0x4c - 0x4e
-+ Datasheet: Publicly available at the National Semiconductor website
-+ http://www.national.com/pf/LM/LM82.html
-
-
- Author: Jean Delvare <khali@linux-fr.org>
-@@ -15,10 +19,11 @@
- -----------
-
- The LM83 is a digital temperature sensor. It senses its own temperature as
--well as the temperature of up to three external diodes. It is compatible
--with many other devices such as the LM84 and all other ADM1021 clones.
--The main difference between the LM83 and the LM84 in that the later can
--only sense the temperature of one external diode.
-+well as the temperature of up to three external diodes. The LM82 is
-+a stripped down version of the LM83 that only supports one external diode.
-+Both are compatible with many other devices such as the LM84 and all
-+other ADM1021 clones. The main difference between the LM83 and the LM84
-+in that the later can only sense the temperature of one external diode.
-
- Using the adm1021 driver for a LM83 should work, but only two temperatures
- will be reported instead of four.
-@@ -36,6 +41,9 @@
- Iwill MPX2
- Soltek SL-75DRV5
-
-+The LM82 is confirmed to have been found on most AMD Geode reference
-+designs and test platforms.
-+
- The driver has been successfully tested by Magnus Forsström, who I'd
- like to thank here. More testers will be of course welcome.
-
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/Documentation/hwmon/smsc47m192 2006-03-22 17:06:16.000000000 +0100
-@@ -0,0 +1,102 @@
-+Kernel driver smsc47m192
-+========================
-+
-+Supported chips:
-+ * SMSC LPC47M192 and LPC47M997
-+ Prefix: 'smsc47m192'
-+ Addresses scanned: I2C 0x2c - 0x2d
-+ Datasheet: The datasheet for LPC47M192 is publicly available from
-+ http://www.smsc.com/
-+ The LPC47M997 is compatible for hardware monitoring.
-+
-+Author: Hartmut Rick <linux@rick.claranet.de>
-+ Special thanks to Jean Delvare for careful checking
-+ of the code and many helpful comments and suggestions.
-+
-+
-+Description
-+-----------
-+
-+This driver implements support for the hardware sensor capabilities
-+of the SMSC LPC47M192 and LPC47M997 Super-I/O chips.
-+
-+These chips support 3 temperature channels and 8 voltage inputs
-+as well as CPU voltage VID input.
-+
-+They do also have fan monitoring and control capabilities, but the
-+these features are accessed via ISA bus and are not supported by this
-+driver. Use the 'smsc47m1' driver for fan monitoring and control.
-+
-+Voltages and temperatures are measured by an 8-bit ADC, the resolution
-+of the temperatures is 1 bit per degree C.
-+Voltages are scaled such that the nominal voltage corresponds to
-+192 counts, i.e. 3/4 of the full range. Thus the available range for
-+each voltage channel is 0V ... 255/192*(nominal voltage), the resolution
-+is 1 bit per (nominal voltage)/192.
-+Both voltage and temperature values are scaled by 1000, the sys files
-+show voltages in mV and temperatures in units of 0.001 degC.
-+
-+The +12V analog voltage input channel (in4_input) is multiplexed with
-+bit 4 of the encoded CPU voltage. This means that you either get
-+a +12V voltage measurement or a 5 bit CPU VID, but not both.
-+The default setting is to use the pin as 12V input, and use only 4 bit VID.
-+This driver assumes that the information in the configuration register
-+is correct, i.e. that the BIOS has updated the configuration if
-+the motherboard has this input wired to VID4.
-+
-+The temperature and voltage readings are updated once every 1.5 seconds.
-+Reading them more often repeats the same values.
-+
-+
-+sysfs interface
-+---------------
-+
-+in0_input - +2.5V voltage input
-+in1_input - CPU voltage input (nominal 2.25V)
-+in2_input - +3.3V voltage input
-+in3_input - +5V voltage input
-+in4_input - +12V voltage input (may be missing if used as VID4)
-+in5_input - Vcc voltage input (nominal 3.3V)
-+ This is the supply voltage of the sensor chip itself.
-+in6_input - +1.5V voltage input
-+in7_input - +1.8V voltage input
-+
-+in[0-7]_min,
-+in[0-7]_max - lower and upper alarm thresholds for in[0-7]_input reading
-+
-+ All voltages are read and written in mV.
-+
-+in[0-7]_alarm - alarm flags for voltage inputs
-+ These files read '1' in case of alarm, '0' otherwise.
-+
-+temp1_input - chip temperature measured by on-chip diode
-+temp[2-3]_input - temperature measured by external diodes (one of these would
-+ typically be wired to the diode inside the CPU)
-+
-+temp[1-3]_min,
-+temp[1-3]_max - lower and upper alarm thresholds for temperatures
-+
-+temp[1-3]_offset - temperature offset registers
-+ The chip adds the offsets stored in these registers to
-+ the corresponding temperature readings.
-+ Note that temp1 and temp2 offsets share the same register,
-+ they cannot both be different from zero at the same time.
-+ Writing a non-zero number to one of them will reset the other
-+ offset to zero.
-+
-+ All temperatures and offsets are read and written in
-+ units of 0.001 degC.
-+
-+temp[1-3]_alarm - alarm flags for temperature inputs, '1' in case of alarm,
-+ '0' otherwise.
-+temp[2-3]_input_fault - diode fault flags for temperature inputs 2 and 3.
-+ A fault is detected if the two pins for the corresponding
-+ sensor are open or shorted, or any of the two is shorted
-+ to ground or Vcc. '1' indicates a diode fault.
-+
-+cpu0_vid - CPU voltage as received from the CPU
-+
-+vrm - CPU VID standard used for decoding CPU voltage
-+
-+ The *_min, *_max, *_offset and vrm files can be read and
-+ written, all others are read-only.
---- linux-2.6.16.orig/Documentation/hwmon/sysfs-interface 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/Documentation/hwmon/sysfs-interface 2006-03-22 17:06:16.000000000 +0100
-@@ -218,6 +218,12 @@
- from the critical value.
- Read/Write value.
-
-+temp[1-4]_offset
-+ Temperature offset which is added to the temperature reading
-+ by the chip.
-+ Unit: millidegree Celsius
-+ Read/Write value.
-+
- If there are multiple temperature sensors, temp1_* is
- generally the sensor inside the chip itself,
- reported as "motherboard temperature". temp2_* to
-@@ -246,9 +252,68 @@
- Read only.
-
-
--*********
--* Other *
--*********
-+**********
-+* Alarms *
-+**********
-+
-+Each channel or limit may have an associated alarm file, containing a
-+boolean value. 1 means than an alarm condition exists, 0 means no alarm.
-+
-+Usually a given chip will either use channel-related alarms, or
-+limit-related alarms, not both. The driver should just reflect the hardware
-+implementation.
-+
-+in[0-n]_alarm
-+fan[1-n]_alarm
-+temp[1-n]_alarm
-+ Channel alarm
-+ Boolean
-+ Read-only
-+
-+OR
-+
-+in[0-n]_min_alarm
-+in[0-n]_max_alarm
-+fan[1-n]_min_alarm
-+temp[1-n]_min_alarm
-+temp[1-n]_max_alarm
-+temp[1-n]_crit_alarm
-+ Limit alarm
-+ Boolean
-+ Read-only
-+
-+In theory, a chip could provide per-limit beep masking, but no such chip
-+was seen so far.
-+
-+Each input channel may have an associated fault file. This can be used
-+to notify open diodes, unconnected fans etc. where the hardware
-+supports it. When this boolean has value 1, the measurement for that
-+channel should not be trusted.
-+
-+fan[1-n]_input_fault
-+temp[1-n]_input_fault
-+ Input fault condition
-+ Boolean
-+ Read-only
-+
-+Some chips also offer the possibility to get beeped when an alarm occurs:
-+
-+beep_enable Master beep enable
-+ 0 to disable.
-+ 1 to enable.
-+ Read/Write
-+
-+in[0-n]_beep
-+fan[1-n]_beep
-+temp[1-n]_beep
-+ Channel beep
-+ 0 to disable.
-+ 1 to enable.
-+ Read/write
-+
-+Old drivers provided a different, non-standard interface to alarms and
-+beeps. These interface files are deprecated, but will be kept around
-+for compatibility reasons:
-
- alarms Alarm bitmask.
- Read only.
-@@ -259,33 +324,22 @@
- if it is still valid.
- Generally a direct representation of a chip's internal
- alarm registers; there is no standard for the position
-- of individual bits.
-+ of individual bits. For this reason, the use of this
-+ interface file for new drivers is discouraged. Use
-+ individual *_alarm and *_fault files instead.
- Bits are defined in kernel/include/sensors.h.
-
--alarms_in Alarm bitmask relative to in (voltage) channels
-- Read only
-- A '1' bit means an alarm, LSB corresponds to in0 and so on
-- Prefered to 'alarms' for newer chips
--
--alarms_fan Alarm bitmask relative to fan channels
-- Read only
-- A '1' bit means an alarm, LSB corresponds to fan1 and so on
-- Prefered to 'alarms' for newer chips
--
--alarms_temp Alarm bitmask relative to temp (temperature) channels
-- Read only
-- A '1' bit means an alarm, LSB corresponds to temp1 and so on
-- Prefered to 'alarms' for newer chips
--
--beep_enable Beep/interrupt enable
-- 0 to disable.
-- 1 to enable.
-- Read/Write
--
- beep_mask Bitmask for beep.
-- Same format as 'alarms' with the same bit locations.
-+ Same format as 'alarms' with the same bit locations,
-+ use discouraged for the same reason. Use individual
-+ *_beep files instead.
- Read/Write
-
-+
-+*********
-+* Other *
-+*********
-+
- eeprom Raw EEPROM data in binary form.
- Read only.
-
---- linux-2.6.16.orig/drivers/hwmon/Makefile 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/drivers/hwmon/Makefile 2006-03-22 17:06:16.000000000 +0100
-@@ -40,6 +40,7 @@
- obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o
- obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
- obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
-+obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
- obj-$(CONFIG_SENSORS_VIA686A) += via686a.o
- obj-$(CONFIG_SENSORS_VT8231) += vt8231.o
- obj-$(CONFIG_SENSORS_W83627EHF) += w83627ehf.o
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/hwmon/smsc47m192.c 2006-03-22 17:06:16.000000000 +0100
-@@ -0,0 +1,638 @@
-+/*
-+ smsc47m192.c - Support for hardware monitoring block of
-+ SMSC LPC47M192 and LPC47M997 Super I/O chips
-+
-+ Copyright (C) 2006 Hartmut Rick <linux@rick.claranet.de>
-+
-+ Derived from lm78.c and other chip drivers.
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 2 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program; if not, write to the Free Software
-+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*/
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/jiffies.h>
-+#include <linux/i2c.h>
-+#include <linux/hwmon.h>
-+#include <linux/hwmon-sysfs.h>
-+#include <linux/hwmon-vid.h>
-+#include <linux/err.h>
-+
-+/* Addresses to scan */
-+static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
-+
-+/* Insmod parameters */
-+I2C_CLIENT_INSMOD_1(smsc47m192);
-+
-+/* SMSC47M192 registers */
-+#define SMSC47M192_REG_IN(nr) ((nr)<6 ? (0x20 + (nr)) : \
-+ (0x50 + (nr) - 6))
-+#define SMSC47M192_REG_IN_MAX(nr) ((nr)<6 ? (0x2b + (nr) * 2) : \
-+ (0x54 + (((nr) - 6) * 2)))
-+#define SMSC47M192_REG_IN_MIN(nr) ((nr)<6 ? (0x2c + (nr) * 2) : \
-+ (0x55 + (((nr) - 6) * 2)))
-+static u8 SMSC47M192_REG_TEMP[3] = { 0x27, 0x26, 0x52 };
-+static u8 SMSC47M192_REG_TEMP_MAX[3] = { 0x39, 0x37, 0x58 };
-+static u8 SMSC47M192_REG_TEMP_MIN[3] = { 0x3A, 0x38, 0x59 };
-+#define SMSC47M192_REG_TEMP_OFFSET(nr) ((nr)==2 ? 0x1e : 0x1f)
-+#define SMSC47M192_REG_ALARM1 0x41
-+#define SMSC47M192_REG_ALARM2 0x42
-+#define SMSC47M192_REG_VID 0x47
-+#define SMSC47M192_REG_VID4 0x49
-+#define SMSC47M192_REG_CONFIG 0x40
-+#define SMSC47M192_REG_SFR 0x4f
-+#define SMSC47M192_REG_COMPANY_ID 0x3e
-+#define SMSC47M192_REG_VERSION 0x3f
-+
-+/* generalised scaling with integer rounding */
-+static inline int SCALE(long val, int mul, int div)
-+{
-+ if (val < 0)
-+ return (val * mul - div / 2) / div;
-+ else
-+ return (val * mul + div / 2) / div;
-+}
-+
-+/* Conversions */
-+
-+/* smsc47m192 internally scales voltage measurements */
-+static const u16 nom_mv[] = { 2500, 2250, 3300, 5000, 12000, 3300, 1500, 1800 };
-+
-+static inline unsigned int IN_FROM_REG(u8 reg, int n)
-+{
-+ return SCALE(reg, nom_mv[n], 192);
-+}
-+
-+static inline u8 IN_TO_REG(unsigned long val, int n)
-+{
-+ return SENSORS_LIMIT(SCALE(val, 192, nom_mv[n]), 0, 255);
-+}
-+
-+/* TEMP: 0.001 degC units (-128C to +127C)
-+ REG: 1C/bit, two's complement */
-+static inline s8 TEMP_TO_REG(int val)
-+{
-+ return SENSORS_LIMIT(SCALE(val, 1, 1000), -128000, 127000);
-+}
-+
-+static inline int TEMP_FROM_REG(s8 val)
-+{
-+ return val * 1000;
-+}
-+
-+struct smsc47m192_data {
-+ struct i2c_client client;
-+ struct class_device *class_dev;
-+ struct semaphore update_lock;
-+ char valid; /* !=0 if following fields are valid */
-+ unsigned long last_updated; /* In jiffies */
-+
-+ u8 in[8]; /* Register value */
-+ u8 in_max[8]; /* Register value */
-+ u8 in_min[8]; /* Register value */
-+ s8 temp[3]; /* Register value */
-+ s8 temp_max[3]; /* Register value */
-+ s8 temp_min[3]; /* Register value */
-+ s8 temp_offset[3]; /* Register value */
-+ u16 alarms; /* Register encoding, combined */
-+ u8 vid; /* Register encoding, combined */
-+ u8 vrm;
-+};
-+
-+static int smsc47m192_detect(struct i2c_adapter *adapter, int address,
-+ int kind);
-+static int smsc47m192_detach_client(struct i2c_client *client);
-+static struct smsc47m192_data *smsc47m192_update_device(struct device *dev);
-+
-+static struct i2c_driver smsc47m192_driver = {
-+ .driver = {
-+ .name = "smsc47m192",
-+ },
-+ .class = I2C_CLASS_HWMON,
-+ .address_data = &addr_data,
-+ .detect_client = smsc47m192_detect,
-+ .detach_client = smsc47m192_detach_client,
-+};
-+
-+/* Voltages */
-+static ssize_t show_in(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", IN_FROM_REG(data->in[nr], nr));
-+}
-+
-+static ssize_t show_in_min(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", IN_FROM_REG(data->in_min[nr], nr));
-+}
-+
-+static ssize_t show_in_max(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", IN_FROM_REG(data->in_max[nr], nr));
-+}
-+
-+static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ unsigned long val = simple_strtoul(buf, NULL, 10);
-+
-+ down(&data->update_lock);
-+ data->in_min[nr] = IN_TO_REG(val, nr);
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_IN_MIN(nr),
-+ data->in_min[nr]);
-+ up(&data->update_lock);
-+ return count;
-+}
-+
-+static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ unsigned long val = simple_strtoul(buf, NULL, 10);
-+
-+ down(&data->update_lock);
-+ data->in_max[nr] = IN_TO_REG(val, nr);
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_IN_MAX(nr),
-+ data->in_max[nr]);
-+ up(&data->update_lock);
-+ return count;
-+}
-+
-+#define show_in_offset(offset) \
-+static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
-+ show_in, NULL, offset); \
-+static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
-+ show_in_min, set_in_min, offset); \
-+static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
-+ show_in_max, set_in_max, offset);
-+
-+show_in_offset(0)
-+show_in_offset(1)
-+show_in_offset(2)
-+show_in_offset(3)
-+show_in_offset(4)
-+show_in_offset(5)
-+show_in_offset(6)
-+show_in_offset(7)
-+
-+/* Temperatures */
-+static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
-+}
-+
-+static ssize_t show_temp_min(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
-+}
-+
-+static ssize_t show_temp_max(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
-+}
-+
-+static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ long val = simple_strtol(buf, NULL, 10);
-+
-+ down(&data->update_lock);
-+ data->temp_min[nr] = TEMP_TO_REG(val);
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_TEMP_MIN[nr],
-+ data->temp_min[nr]);
-+ up(&data->update_lock);
-+ return count;
-+}
-+
-+static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ long val = simple_strtol(buf, NULL, 10);
-+
-+ down(&data->update_lock);
-+ data->temp_max[nr] = TEMP_TO_REG(val);
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_TEMP_MAX[nr],
-+ data->temp_max[nr]);
-+ up(&data->update_lock);
-+ return count;
-+}
-+
-+static ssize_t show_temp_offset(struct device *dev, struct device_attribute
-+ *attr, char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_offset[nr]));
-+}
-+
-+static ssize_t set_temp_offset(struct device *dev, struct device_attribute
-+ *attr, const char *buf, size_t count)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
-+ long val = simple_strtol(buf, NULL, 10);
-+
-+ down(&data->update_lock);
-+ data->temp_offset[nr] = TEMP_TO_REG(val);
-+ if (nr>1)
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_TEMP_OFFSET(nr), data->temp_offset[nr]);
-+ else if (data->temp_offset[nr] != 0) {
-+ /* offset[0] and offset[1] share the same register,
-+ SFR bit 4 activates offset[0] */
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_SFR,
-+ (sfr & 0xef) | (nr==0 ? 0x10 : 0));
-+ data->temp_offset[1-nr] = 0;
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_TEMP_OFFSET(nr), data->temp_offset[nr]);
-+ } else if ((sfr & 0x10) == (nr==0 ? 0x10 : 0))
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_TEMP_OFFSET(nr), 0);
-+ up(&data->update_lock);
-+ return count;
-+}
-+
-+#define show_temp_index(index) \
-+static SENSOR_DEVICE_ATTR(temp##index##_input, S_IRUGO, \
-+ show_temp, NULL, index-1); \
-+static SENSOR_DEVICE_ATTR(temp##index##_min, S_IRUGO | S_IWUSR, \
-+ show_temp_min, set_temp_min, index-1); \
-+static SENSOR_DEVICE_ATTR(temp##index##_max, S_IRUGO | S_IWUSR, \
-+ show_temp_max, set_temp_max, index-1); \
-+static SENSOR_DEVICE_ATTR(temp##index##_offset, S_IRUGO | S_IWUSR, \
-+ show_temp_offset, set_temp_offset, index-1);
-+
-+show_temp_index(1)
-+show_temp_index(2)
-+show_temp_index(3)
-+
-+/* VID */
-+static ssize_t show_vid(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
-+}
-+static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
-+
-+static ssize_t show_vrm(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%d\n", data->vrm);
-+}
-+
-+static ssize_t set_vrm(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t count)
-+{
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ data->vrm = simple_strtoul(buf, NULL, 10);
-+ return count;
-+}
-+static DEVICE_ATTR(vrm, S_IRUGO | S_IWUSR, show_vrm, set_vrm);
-+
-+/* Alarms */
-+static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
-+ int nr = sensor_attr->index;
-+ struct smsc47m192_data *data = smsc47m192_update_device(dev);
-+ return sprintf(buf, "%u\n", (data->alarms & nr) ? 1 : 0);
-+}
-+
-+static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 0x0010);
-+static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 0x0020);
-+static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 0x0040);
-+static SENSOR_DEVICE_ATTR(temp2_input_fault, S_IRUGO, show_alarm, NULL, 0x4000);
-+static SENSOR_DEVICE_ATTR(temp3_input_fault, S_IRUGO, show_alarm, NULL, 0x8000);
-+static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0x0001);
-+static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 0x0002);
-+static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 0x0004);
-+static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 0x0008);
-+static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 0x0100);
-+static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 0x0200);
-+static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL, 0x0400);
-+static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL, 0x0800);
-+
-+static void smsc47m192_init_client(struct i2c_client *client)
-+{
-+ int i;
-+ u8 config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
-+ u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
-+
-+ /* select cycle mode (pause 1 sec between updates) */
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_SFR,
-+ (sfr & 0xfd) | 0x02);
-+ if (!(config & 0x01)) {
-+ /* initialize alarm limits */
-+ for (i=0; i<8; i++) {
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_IN_MIN(i), 0);
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_IN_MAX(i), 0xff);
-+ }
-+ for (i=0; i<3; i++) {
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_TEMP_MIN[i], 0x80);
-+ i2c_smbus_write_byte_data(client,
-+ SMSC47M192_REG_TEMP_MAX[i], 0x7f);
-+ }
-+
-+ /* start monitoring */
-+ i2c_smbus_write_byte_data(client, SMSC47M192_REG_CONFIG,
-+ (config & 0xf7) | 0x01);
-+ }
-+}
-+
-+/* This function is called by i2c_probe */
-+static int smsc47m192_detect(struct i2c_adapter *adapter, int address,
-+ int kind)
-+{
-+ struct i2c_client *client;
-+ struct smsc47m192_data *data;
-+ int err = 0;
-+ int version, config;
-+
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
-+ goto exit;
-+
-+ if (!(data = kzalloc(sizeof(struct smsc47m192_data), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto exit;
-+ }
-+
-+ client = &data->client;
-+ i2c_set_clientdata(client, data);
-+ client->addr = address;
-+ client->adapter = adapter;
-+ client->driver = &smsc47m192_driver;
-+
-+ if (kind == 0)
-+ kind = smsc47m192;
-+
-+ /* Detection criteria from sensors_detect script */
-+ if (kind < 0) {
-+ if (i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_COMPANY_ID) == 0x55
-+ && ((version = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_VERSION)) & 0xf0) == 0x20
-+ && (i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_VID) & 0x70) == 0x00
-+ && (i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_VID4) & 0xfe) == 0x80) {
-+ dev_info(&adapter->dev,
-+ "found SMSC47M192 or SMSC47M997, "
-+ "version 2, stepping A%d\n", version & 0x0f);
-+ } else {
-+ dev_dbg(&adapter->dev,
-+ "SMSC47M192 detection failed at 0x%02x\n",
-+ address);
-+ goto exit_free;
-+ }
-+ }
-+
-+ /* Fill in the remaining client fields and put into the global list */
-+ strlcpy(client->name, "smsc47m192", I2C_NAME_SIZE);
-+ data->vrm = vid_which_vrm();
-+ init_MUTEX(&data->update_lock);
-+
-+ /* Tell the I2C layer a new client has arrived */
-+ if ((err = i2c_attach_client(client)))
-+ goto exit_free;
-+
-+ /* Initialize the SMSC47M192 chip */
-+ smsc47m192_init_client(client);
-+
-+ /* Register sysfs hooks */
-+ data->class_dev = hwmon_device_register(&client->dev);
-+ if (IS_ERR(data->class_dev)) {
-+ err = PTR_ERR(data->class_dev);
-+ goto exit_detach;
-+ }
-+
-+ device_create_file(&client->dev, &sensor_dev_attr_in0_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in0_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in0_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in0_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in1_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in1_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in1_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in1_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in2_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in2_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in2_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in2_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in3_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in3_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in3_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in3_alarm.dev_attr);
-+
-+ /* Pin 110 is either in4 (+12V) or VID4 */
-+ config = i2c_smbus_read_byte_data(client, SMSC47M192_REG_CONFIG);
-+ if (!(config & 0x20)) {
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_in4_input.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_in4_min.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_in4_max.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_in4_alarm.dev_attr);
-+ }
-+ device_create_file(&client->dev, &sensor_dev_attr_in5_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in5_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in5_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in5_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in6_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in6_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in6_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in6_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in7_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in7_min.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in7_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_in7_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp1_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp1_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp1_min.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_temp1_offset.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp1_alarm.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp2_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp2_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp2_min.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_temp2_offset.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp2_alarm.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_temp2_input_fault.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp3_input.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp3_max.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp3_min.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_temp3_offset.dev_attr);
-+ device_create_file(&client->dev, &sensor_dev_attr_temp3_alarm.dev_attr);
-+ device_create_file(&client->dev,
-+ &sensor_dev_attr_temp3_input_fault.dev_attr);
-+ device_create_file(&client->dev, &dev_attr_cpu0_vid);
-+ device_create_file(&client->dev, &dev_attr_vrm);
-+
-+ return 0;
-+
-+exit_detach:
-+ i2c_detach_client(client);
-+exit_free:
-+ kfree(data);
-+exit:
-+ return err;
-+}
-+
-+static int smsc47m192_detach_client(struct i2c_client *client)
-+{
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ int err;
-+
-+ hwmon_device_unregister(data->class_dev);
-+
-+ if ((err = i2c_detach_client(client)))
-+ return err;
-+
-+ kfree(data);
-+
-+ return 0;
-+}
-+
-+static struct smsc47m192_data *smsc47m192_update_device(struct device *dev)
-+{
-+ struct i2c_client *client = to_i2c_client(dev);
-+ struct smsc47m192_data *data = i2c_get_clientdata(client);
-+ int i, config;
-+
-+ down(&data->update_lock);
-+
-+ if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
-+ || !data->valid) {
-+ u8 sfr = i2c_smbus_read_byte_data(client, SMSC47M192_REG_SFR);
-+
-+ dev_dbg(&client->dev, "Starting smsc47m192 update\n");
-+
-+ for (i = 0; i <= 7; i++) {
-+ data->in[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_IN(i));
-+ data->in_min[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_IN_MIN(i));
-+ data->in_max[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_IN_MAX(i));
-+ }
-+ for (i = 0; i < 3; i++) {
-+ data->temp[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_TEMP[i]);
-+ data->temp_max[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_TEMP_MAX[i]);
-+ data->temp_min[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_TEMP_MIN[i]);
-+ }
-+ for (i = 1; i < 3; i++)
-+ data->temp_offset[i] = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_TEMP_OFFSET(i));
-+ /* first offset is temp_offset[0] if SFR bit 4 is set,
-+ temp_offset[1] otherwise */
-+ if (sfr & 0x10) {
-+ data->temp_offset[0] = data->temp_offset[1];
-+ data->temp_offset[1] = 0;
-+ } else
-+ data->temp_offset[0] = 0;
-+
-+ data->vid = i2c_smbus_read_byte_data(client, SMSC47M192_REG_VID)
-+ & 0x0f;
-+ config = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_CONFIG);
-+ if (config & 0x20)
-+ data->vid |= (i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_VID4) & 0x01) << 4;
-+ data->alarms = i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_ALARM1) |
-+ (i2c_smbus_read_byte_data(client,
-+ SMSC47M192_REG_ALARM2) << 8);
-+
-+ data->last_updated = jiffies;
-+ data->valid = 1;
-+ }
-+
-+ up(&data->update_lock);
-+
-+ return data;
-+}
-+
-+static int __init smsc47m192_init(void)
-+{
-+ return i2c_add_driver(&smsc47m192_driver);
-+}
-+
-+static void __exit smsc47m192_exit(void)
-+{
-+ i2c_del_driver(&smsc47m192_driver);
-+}
-+
-+MODULE_AUTHOR("Hartmut Rick <linux@rick.claranet.de>");
-+MODULE_DESCRIPTION("SMSC47M192 driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(smsc47m192_init);
-+module_exit(smsc47m192_exit);
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-sis96x.c 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-sis96x.c 2006-03-22 17:06:16.000000000 +0100
-@@ -43,13 +43,6 @@
- #include <linux/init.h>
- #include <asm/io.h>
-
--/*
-- HISTORY:
-- 2003-05-11 1.0.0 Updated from lm_sensors project for kernel 2.5
-- (was i2c-sis645.c from lm_sensors 2.7.0)
--*/
--#define SIS96x_VERSION "1.0.0"
--
- /* base address register in PCI config space */
- #define SIS96x_BAR 0x04
-
-@@ -256,7 +249,7 @@
-
- static struct i2c_adapter sis96x_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
-@@ -337,7 +330,6 @@
-
- static int __init i2c_sis96x_init(void)
- {
-- printk(KERN_INFO "i2c-sis96x version %s\n", SIS96x_VERSION);
- return pci_register_driver(&sis96x_driver);
- }
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-parport-light.c 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-parport-light.c 2006-03-22 17:06:16.000000000 +0100
-@@ -111,7 +111,7 @@
-
- static struct i2c_adapter parport_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .id = I2C_HW_B_LP,
- .algo_data = &parport_algo_data,
- .name = "Parallel port adapter (light)",
-@@ -121,9 +121,14 @@
-
- static int __init i2c_parport_init(void)
- {
-- if (type < 0 || type >= ARRAY_SIZE(adapter_parm)) {
-+ if (type < 0) {
-+ printk(KERN_WARNING "i2c-parport: adapter type unspecified\n");
-+ return -ENODEV;
-+ }
-+
-+ if (type >= ARRAY_SIZE(adapter_parm)) {
- printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type);
-- type = 0;
-+ return -ENODEV;
- }
-
- if (base == 0) {
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-parport.h 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-parport.h 2006-03-22 17:06:16.000000000 +0100
-@@ -90,7 +90,7 @@
- },
- };
-
--static int type;
-+static int type = -1;
- module_param(type, int, 0);
- MODULE_PARM_DESC(type,
- "Type of adapter:\n"
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-parport.c 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-parport.c 2006-03-22 17:06:16.000000000 +0100
-@@ -146,7 +146,7 @@
-
- static struct i2c_adapter parport_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .id = I2C_HW_B_LP,
- .name = "Parallel port adapter",
- };
-@@ -241,9 +241,14 @@
-
- static int __init i2c_parport_init(void)
- {
-- if (type < 0 || type >= ARRAY_SIZE(adapter_parm)) {
-+ if (type < 0) {
-+ printk(KERN_WARNING "i2c-parport: adapter type unspecified\n");
-+ return -ENODEV;
-+ }
-+
-+ if (type >= ARRAY_SIZE(adapter_parm)) {
- printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type);
-- type = 0;
-+ return -ENODEV;
- }
-
- return parport_register_driver(&i2c_parport_driver);
---- linux-2.6.16.orig/Documentation/i2c/busses/i2c-parport 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/Documentation/i2c/busses/i2c-parport 2006-03-22 17:06:16.000000000 +0100
-@@ -12,18 +12,22 @@
- teletext adapters)
-
- It currently supports the following devices:
-- * Philips adapter
-- * home brew teletext adapter
-- * Velleman K8000 adapter
-- * ELV adapter
-- * Analog Devices evaluation boards (ADM1025, ADM1030, ADM1031, ADM1032)
-- * Barco LPT->DVI (K5800236) adapter
-+ * (type=0) Philips adapter
-+ * (type=1) home brew teletext adapter
-+ * (type=2) Velleman K8000 adapter
-+ * (type=3) ELV adapter
-+ * (type=4) Analog Devices ADM1032 evaluation board
-+ * (type=5) Analog Devices evaluation boards: ADM1025, ADM1030, ADM1031
-+ * (type=6) Barco LPT->DVI (K5800236) adapter
-
- These devices use different pinout configurations, so you have to tell
- the driver what you have, using the type module parameter. There is no
- way to autodetect the devices. Support for different pinout configurations
- can be easily added when needed.
-
-+Earlier kernels defaulted to type=0 (Philips). But now, if the type
-+parameter is missing, the driver will simply fail to initialize.
-+
-
- Building your own adapter
- -------------------------
---- linux-2.6.16.orig/Documentation/i2c/writing-clients 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/Documentation/i2c/writing-clients 2006-03-22 17:06:16.000000000 +0100
-@@ -28,7 +28,9 @@
- .driver = {
- .name = "foo",
- },
-- .attach_adapter = &foo_attach_adapter,
-+ .class = I2C_CLASS_SOMETHING,
-+ .address_data = &addr_data,
-+ .detect_client = &foo_detect_client,
- .detach_client = &foo_detach_client,
- .command = &foo_command /* may be NULL */
- }
-@@ -141,8 +143,8 @@
- are defined in i2c.h to help you support them, as well as a generic
- detection algorithm.
-
--You do not have to use this parameter interface; but don't try to use
--function i2c_probe() if you don't.
-+You do not have to use this parameter interface; but then the i2c core won't
-+be able to probe for devices for you.
-
- NOTE: If you want to write a `sensors' driver, the interface is slightly
- different! See below.
-@@ -201,35 +203,49 @@
- -----------------------
-
- Whenever a new adapter is inserted, or for all adapters if the driver is
--being registered, the callback attach_adapter() is called. Now is the
--time to determine what devices are present on the adapter, and to register
--a client for each of them.
--
--The attach_adapter callback is really easy: we just call the generic
--detection function. This function will scan the bus for us, using the
--information as defined in the lists explained above. If a device is
--detected at a specific address, another callback is called.
-+being registered, your driver may be notified through one of two
-+callbacks, depending on the degree of control you need to exercise over
-+the probing process. This is the time to determine what devices are
-+present on the adapter and to register a client for each device your
-+driver supports.
-+
-+The easiest way to handle the probing process is to simply set the `class',
-+`address_data', and `detect_client' fields in the i2c_driver structure.
-+The `class' field is a bitmask of all the adapter classes which should be
-+probed for devices supported by this driver. You should set it to one of
-+the I2C_CLASS_* constants defined in i2c.h. The `address_data' field
-+should be set to `&addr_data', which is defined by the macros explained
-+above, so you do not have to define it yourself. When a new adapter is
-+attached, the bus is scanned for the addresses defined in the lists above,
-+and the detect_client callback gets called when a device is detected at a
-+specific address.
-+
-+If you prefer, you can omit the `class', `address_data', and
-+`detect_client' fields from your i2c_driver structure, and instead set
-+`attach_adapter'. The `attach_adapter' callback gets called every time a
-+new adapter is attached and the bus needs to be scanned, so if you need to
-+perform any special checks or configuration before you scan a bus for
-+devices, you should use attach_adapter. If the bus is suitable, you can
-+then call the generic i2c_probe function to scan for the addresses in the
-+lists explained above, and the callback passed in the third parameter will
-+get called for each device detected.
-
- int foo_attach_adapter(struct i2c_adapter *adapter)
- {
- return i2c_probe(adapter,&addr_data,&foo_detect_client);
- }
-
--Remember, structure `addr_data' is defined by the macros explained above,
--so you do not have to define it yourself.
--
--The i2c_probe function will call the foo_detect_client
--function only for those i2c addresses that actually have a device on
--them (unless a `force' parameter was used). In addition, addresses that
--are already in use (by some other registered client) are skipped.
-+With either mechanism, addresses that are already in use (by some other
-+registered client) are skipped.
-
-
- The detect client function
- --------------------------
-
--The detect client function is called by i2c_probe. The `kind' parameter
--contains -1 for a probed detection, 0 for a forced detection, or a positive
--number for a forced detection with a chip type forced.
-+The detect client function is called by the address probing mechanism.
-+The `kind' parameter contains -1 for a probed detection, 0 for a forced
-+detection, or a positive number for a forced detection with a chip type
-+forced.
-
- Below, some things are only needed if this is a `sensors' driver. Those
- parts are between /* SENSORS ONLY START */ and /* SENSORS ONLY END */
---- linux-2.6.16.orig/Documentation/i2c/porting-clients 2006-03-22 17:06:00.000000000 +0100
-+++ linux-2.6.16/Documentation/i2c/porting-clients 2006-03-22 17:06:16.000000000 +0100
-@@ -100,6 +100,9 @@
- Drop any 24RF08 corruption prevention you find, as this is now done
- at the i2c-core level, and doing it twice voids it.
- Don't add I2C_CLIENT_ALLOW_USE to client->flags, it's the default now.
-+ If you want auto probing of your driver, use driver->addr_data
-+ (this is strongly encouraged if your attach_adapter is a one-liner
-+ which calls i2c_probe).
-
- * [Init] Limits must not be set by the driver (can be done later in
- user-space). Chip should not be reset default (although a module
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ali1563.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ali1563.c 2006-03-22 17:06:16.000000000 +0100
-@@ -374,7 +374,7 @@
-
- static struct i2c_adapter ali1563_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &ali1563_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ali15x3.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ali15x3.c 2006-03-22 17:06:16.000000000 +0100
-@@ -470,7 +470,7 @@
-
- static struct i2c_adapter ali15x3_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-amd756.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-amd756.c 2006-03-22 17:06:16.000000000 +0100
-@@ -301,7 +301,7 @@
-
- struct i2c_adapter amd756_smbus = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-amd8111.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-amd8111.c 2006-03-22 17:06:16.000000000 +0100
-@@ -351,7 +351,7 @@
- smbus->adapter.owner = THIS_MODULE;
- snprintf(smbus->adapter.name, I2C_NAME_SIZE,
- "SMBus2 AMD8111 adapter at %04x", smbus->base);
-- smbus->adapter.class = I2C_CLASS_HWMON;
-+ smbus->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_DATA;
- smbus->adapter.algo = &smbus_algorithm;
- smbus->adapter.algo_data = smbus;
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-elektor.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-elektor.c 2006-03-22 17:06:16.000000000 +0100
-@@ -202,7 +202,7 @@
-
- static struct i2c_adapter pcf_isa_ops = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .id = I2C_HW_P_ELEK,
- .algo_data = &pcf_isa_data,
- .name = "i2c-elektor",
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-i801.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-i801.c 2006-03-22 17:06:16.000000000 +0100
-@@ -513,7 +513,7 @@
-
- static struct i2c_adapter i801_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-i810.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-i810.c 2006-03-22 17:06:16.000000000 +0100
-@@ -188,6 +188,7 @@
-
- static struct i2c_adapter i810_ddc_adapter = {
- .owner = THIS_MODULE,
-+ .class = I2C_CLASS_DATA,
- .name = "I810/I815 DDC Adapter",
- .algo_data = &i810_ddc_bit_data,
- };
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ibm_iic.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ibm_iic.c 2006-03-22 17:06:16.000000000 +0100
-@@ -724,8 +724,9 @@
- adap = &dev->adap;
- strcpy(adap->name, "IBM IIC");
- i2c_set_adapdata(adap, dev);
-+ adap->owner = THIS_MODULE;
- adap->id = I2C_HW_OCP;
-- adap->class = I2C_CLASS_HWMON;
-+ adap->class = I2C_CLASS_HWMON | I2C_CLASS_DATA;
- adap->algo = &iic_algo;
- adap->client_register = NULL;
- adap->client_unregister = NULL;
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-ixp2000.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-ixp2000.c 2006-03-22 17:06:16.000000000 +0100
-@@ -117,7 +117,9 @@
- drv_data->algo_data.mdelay = 6;
- drv_data->algo_data.timeout = 100;
-
-- drv_data->adapter.id = I2C_HW_B_IXP2000,
-+ drv_data->adapter.owner = THIS_MODULE;
-+ drv_data->adapter.class = I2C_CLASS_DATA;
-+ drv_data->adapter.id = I2C_HW_B_IXP2000;
- strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
- I2C_NAME_SIZE);
- drv_data->adapter.algo_data = &drv_data->algo_data,
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-mpc.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-mpc.c 2006-03-22 17:06:16.000000000 +0100
-@@ -283,7 +283,7 @@
- .name = "MPC adapter",
- .id = I2C_HW_MPC107,
- .algo = &mpc_algo,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .timeout = 1,
- .retries = 1
- };
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-mv64xxx.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-mv64xxx.c 2006-03-22 17:06:16.000000000 +0100
-@@ -519,7 +519,7 @@
- drv_data->adapter.id = I2C_HW_MV64XXX;
- drv_data->adapter.algo = &mv64xxx_i2c_algo;
- drv_data->adapter.owner = THIS_MODULE;
-- drv_data->adapter.class = I2C_CLASS_HWMON;
-+ drv_data->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_DATA;
- drv_data->adapter.timeout = pdata->timeout;
- drv_data->adapter.retries = pdata->retries;
- platform_set_drvdata(pd, drv_data);
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-nforce2.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-nforce2.c 2006-03-22 17:06:16.000000000 +0100
-@@ -113,7 +113,7 @@
-
- static struct i2c_adapter nforce2_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-prosavage.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-prosavage.c 2006-03-22 17:06:16.000000000 +0100
-@@ -172,6 +172,7 @@
- {
- int ret;
- p->adap.owner = THIS_MODULE;
-+ p->adap.class = I2C_CLASS_DATA;
- p->adap.id = I2C_HW_B_S3VIA;
- p->adap.algo_data = &p->algo;
- p->adap.dev.parent = &dev->dev;
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-s3c2410.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-s3c2410.c 2006-03-22 17:06:16.000000000 +0100
-@@ -580,7 +580,7 @@
- .owner = THIS_MODULE,
- .algo = &s3c24xx_i2c_algorithm,
- .retries = 2,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- },
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-savage4.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-savage4.c 2006-03-22 17:06:16.000000000 +0100
-@@ -146,6 +146,7 @@
-
- static struct i2c_adapter savage4_i2c_adapter = {
- .owner = THIS_MODULE,
-+ .class = I2C_CLASS_DATA,
- .name = "I2C Savage4 adapter",
- .algo_data = &sav_i2c_bit_data,
- };
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-sibyte.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-sibyte.c 2006-03-22 17:06:16.000000000 +0100
-@@ -31,7 +31,7 @@
- {
- .owner = THIS_MODULE,
- .id = I2C_HW_SIBYTE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = NULL,
- .algo_data = &sibyte_board_data[0],
- .name = "SiByte SMBus 0",
-@@ -39,7 +39,7 @@
- {
- .owner = THIS_MODULE,
- .id = I2C_HW_SIBYTE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = NULL,
- .algo_data = &sibyte_board_data[1],
- .name = "SiByte SMBus 1",
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-sis5595.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-sis5595.c 2006-03-22 17:06:16.000000000 +0100
-@@ -365,7 +365,7 @@
-
- static struct i2c_adapter sis5595_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-sis630.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-sis630.c 2006-03-22 17:06:16.000000000 +0100
-@@ -457,7 +457,7 @@
-
- static struct i2c_adapter sis630_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-stub.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-stub.c 2006-03-22 17:06:16.000000000 +0100
-@@ -115,7 +115,7 @@
-
- static struct i2c_adapter stub_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_ALL,
- .algo = &smbus_algorithm,
- .name = "SMBus stub driver",
- };
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-via.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-via.c 2006-03-22 17:06:16.000000000 +0100
-@@ -87,7 +87,7 @@
-
- static struct i2c_adapter vt586b_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .name = "VIA i2c",
- .algo_data = &bit_data,
- };
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-viapro.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-viapro.c 2006-03-22 17:06:16.000000000 +0100
-@@ -304,7 +304,7 @@
-
- static struct i2c_adapter vt596_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_HWMON,
-+ .class = I2C_CLASS_HWMON | I2C_CLASS_DATA,
- .algo = &smbus_algorithm,
- };
-
---- linux-2.6.16.orig/drivers/i2c/busses/i2c-voodoo3.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/i2c/busses/i2c-voodoo3.c 2006-03-22 17:06:16.000000000 +0100
-@@ -183,7 +183,7 @@
-
- static struct i2c_adapter voodoo3_ddc_adapter = {
- .owner = THIS_MODULE,
-- .class = I2C_CLASS_DDC,
-+ .class = I2C_CLASS_DATA,
- .name = "DDC Voodoo3/Banshee adapter",
- .algo_data = &voo_ddc_bit_data,
- };
---- linux-2.6.16.orig/drivers/video/aty/radeon_i2c.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/aty/radeon_i2c.c 2006-03-22 17:06:16.000000000 +0100
-@@ -75,6 +75,7 @@
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
-+ chan->adapter.class = I2C_CLASS_DATA;
- chan->adapter.id = I2C_HW_B_RADEON;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->rinfo->pdev->dev;
---- linux-2.6.16.orig/drivers/video/i810/i810-i2c.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/i810/i810-i2c.c 2006-03-22 17:06:16.000000000 +0100
-@@ -85,12 +85,14 @@
- return ((i810_readl(mmio, chan->ddc_base) & SDA_VAL_IN) != 0);
- }
-
--static int i810_setup_i2c_bus(struct i810fb_i2c_chan *chan, const char *name)
-+static int i810_setup_i2c_bus(struct i810fb_i2c_chan *chan, const char *name,
-+ unsigned long i2c_class)
- {
- int rc;
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
-+ chan->adapter.class = i2c_class;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->dev->dev;
- chan->adapter.id = I2C_HW_B_I810;
-@@ -130,11 +132,11 @@
- par->chan[2].par = par;
-
- par->chan[0].ddc_base = GPIOA;
-- i810_setup_i2c_bus(&par->chan[0], "I810-DDC");
-+ i810_setup_i2c_bus(&par->chan[0], "I810-DDC", I2C_CLASS_DATA);
- par->chan[1].ddc_base = GPIOB;
-- i810_setup_i2c_bus(&par->chan[1], "I810-I2C");
-+ i810_setup_i2c_bus(&par->chan[1], "I810-I2C", 0);
- par->chan[2].ddc_base = GPIOC;
-- i810_setup_i2c_bus(&par->chan[2], "I810-GPIOC");
-+ i810_setup_i2c_bus(&par->chan[2], "I810-GPIOC", 0);
- }
-
- void i810_delete_i2c_busses(struct i810fb_par *par)
---- linux-2.6.16.orig/drivers/video/matrox/i2c-matroxfb.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/matrox/i2c-matroxfb.c 2006-03-22 17:06:16.000000000 +0100
-@@ -104,13 +104,15 @@
- };
-
- static int i2c_bus_reg(struct i2c_bit_adapter* b, struct matrox_fb_info* minfo,
-- unsigned int data, unsigned int clock, const char* name) {
-+ unsigned int data, unsigned int clock, const char* name,
-+ unsigned int i2c_class) {
- int err;
-
- b->minfo = minfo;
- b->mask.data = data;
- b->mask.clock = clock;
- b->adapter = matrox_i2c_adapter_template;
-+ b->adapter.class = i2c_class;
- snprintf(b->adapter.name, I2C_NAME_SIZE, name,
- minfo->fbcon.node);
- i2c_set_adapdata(&b->adapter, b);
-@@ -160,22 +162,28 @@
- switch (ACCESS_FBINFO(chip)) {
- case MGA_2064:
- case MGA_2164:
-- err = i2c_bus_reg(&m2info->ddc1, minfo, DDC1B_DATA, DDC1B_CLK, "DDC:fb%u #0");
-+ err = i2c_bus_reg(&m2info->ddc1, minfo, DDC1B_DATA,
-+ DDC1B_CLK, "DDC:fb%u #0",
-+ I2C_CLASS_DATA);
- break;
- default:
-- err = i2c_bus_reg(&m2info->ddc1, minfo, DDC1_DATA, DDC1_CLK, "DDC:fb%u #0");
-+ err = i2c_bus_reg(&m2info->ddc1, minfo, DDC1_DATA,
-+ DDC1_CLK, "DDC:fb%u #0",
-+ I2C_CLASS_DATA);
- break;
- }
- if (err)
- goto fail_ddc1;
- if (ACCESS_FBINFO(devflags.dualhead)) {
-- err = i2c_bus_reg(&m2info->ddc2, minfo, DDC2_DATA, DDC2_CLK, "DDC:fb%u #1");
-+ err = i2c_bus_reg(&m2info->ddc2, minfo, DDC2_DATA, DDC2_CLK,
-+ "DDC:fb%u #1", I2C_CLASS_DATA);
- if (err == -ENODEV) {
- printk(KERN_INFO "i2c-matroxfb: VGA->TV plug detected, DDC unavailable.\n");
- } else if (err)
- printk(KERN_INFO "i2c-matroxfb: Could not register secondary output i2c bus. Continuing anyway.\n");
- /* Register maven bus even on G450/G550 */
-- err = i2c_bus_reg(&m2info->maven, minfo, MAT_DATA, MAT_CLK, "MAVEN:fb%u");
-+ err = i2c_bus_reg(&m2info->maven, minfo, MAT_DATA, MAT_CLK,
-+ "MAVEN:fb%u", 0);
- if (err)
- printk(KERN_INFO "i2c-matroxfb: Could not register Maven i2c bus. Continuing anyway.\n");
- }
---- linux-2.6.16.orig/drivers/video/nvidia/nv_i2c.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/nvidia/nv_i2c.c 2006-03-22 17:06:16.000000000 +0100
-@@ -96,6 +96,7 @@
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
-+ chan->adapter.class = I2C_CLASS_DATA;
- chan->adapter.id = I2C_HW_B_NVIDIA;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->pci_dev->dev;
---- linux-2.6.16.orig/drivers/video/riva/rivafb-i2c.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/riva/rivafb-i2c.c 2006-03-22 17:06:16.000000000 +0100
-@@ -98,6 +98,7 @@
-
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
-+ chan->adapter.class = I2C_CLASS_DATA;
- chan->adapter.id = I2C_HW_B_RIVA;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->pdev->dev;
---- linux-2.6.16.orig/drivers/video/savage/savagefb-i2c.c 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/video/savage/savagefb-i2c.c 2006-03-22 17:06:16.000000000 +0100
-@@ -145,6 +145,7 @@
- if (chan->par) {
- strcpy(chan->adapter.name, name);
- chan->adapter.owner = THIS_MODULE;
-+ chan->adapter.class = I2C_CLASS_DATA;
- chan->adapter.id = I2C_HW_B_SAVAGE;
- chan->adapter.algo_data = &chan->algo;
- chan->adapter.dev.parent = &chan->par->pcidev->dev;
---- linux-2.6.16.orig/drivers/media/video/zoran.h 2006-03-22 17:05:59.000000000 +0100
-+++ linux-2.6.16/drivers/media/video/zoran.h 2006-03-22 17:06:16.000000000 +0100
-@@ -355,6 +355,7 @@
- enum card_type type;
- char name[32];
- u16 i2c_decoder, i2c_encoder; /* I2C types */
-+ u16 decoder_addr, encoder_addr; /* I2C chips address */
- u16 video_vfe, video_codec; /* videocodec types */
- u16 audio_chip; /* audio type */
- u16 vendor_id, device_id; /* subsystem vendor/device ID */
diff --git a/packages/linux/ixp4xx-kernel/2.6.16/patch-2.6.16-rc6-ide1 b/packages/linux/ixp4xx-kernel/2.6.16/patch-2.6.16-rc6-ide1
deleted file mode 100644
index f35facae1b..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.16/patch-2.6.16-rc6-ide1
+++ /dev/null
@@ -1,18684 +0,0 @@
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/arch/i386/pci/fixup.c linux-2.6.16-rc6/arch/i386/pci/fixup.c
---- linux.vanilla-2.6.16-rc6/arch/i386/pci/fixup.c 2006-03-13 14:00:11.000000000 +0000
-+++ linux-2.6.16-rc6/arch/i386/pci/fixup.c 2006-02-01 14:49:17.000000000 +0000
-@@ -74,52 +74,6 @@
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810);
-
--static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
--{
-- int i;
--
-- /*
-- * PCI IDE controllers use non-standard I/O port decoding, respect it.
-- */
-- if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
-- return;
-- DBG("PCI: IDE base address fixup for %s\n", pci_name(d));
-- for(i=0; i<4; i++) {
-- struct resource *r = &d->resource[i];
-- if ((r->start & ~0x80) == 0x374) {
-- r->start |= 2;
-- r->end = r->start;
-- }
-- }
--}
--DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
--
--static void __devinit pci_fixup_ide_trash(struct pci_dev *d)
--{
-- int i;
--
-- /*
-- * Runs the fixup only for the first IDE controller
-- * (Shai Fultheim - shai@ftcon.com)
-- */
-- static int called = 0;
-- if (called)
-- return;
-- called = 1;
--
-- /*
-- * There exist PCI IDE controllers which have utter garbage
-- * in first four base registers. Ignore that.
-- */
-- DBG("PCI: IDE base address trash cleared for %s\n", pci_name(d));
-- for(i=0; i<4; i++)
-- d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0;
--}
--DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, pci_fixup_ide_trash);
--DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, pci_fixup_ide_trash);
--DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_11, pci_fixup_ide_trash);
--DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_9, pci_fixup_ide_trash);
--
- static void __devinit pci_fixup_latency(struct pci_dev *d)
- {
- /*
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/cdrom/cdrom.c linux-2.6.16-rc6/drivers/cdrom/cdrom.c
---- linux.vanilla-2.6.16-rc6/drivers/cdrom/cdrom.c 2006-03-13 14:00:12.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/cdrom/cdrom.c 2006-01-17 16:34:19.000000000 +0000
-@@ -1131,7 +1131,8 @@
- This ensures that the drive gets unlocked after a mount fails. This
- is a goto to avoid bloating the driver with redundant code. */
- clean_up_and_return:
-- cdinfo(CD_OPEN, "open failed.\n");
-+ /* Don't log this, its a perfectly normal user occurence */
-+ /* cdinfo(CD_WARNING, "open failed.\n"); */
- if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) {
- cdo->lock_door(cdi, 0);
- cdinfo(CD_OPEN, "door unlocked.\n");
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/pci/probe.c linux-2.6.16-rc6/drivers/pci/probe.c
---- linux.vanilla-2.6.16-rc6/drivers/pci/probe.c 2006-03-13 14:00:13.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/pci/probe.c 2006-02-01 15:56:28.000000000 +0000
-@@ -627,6 +627,7 @@
- static int pci_setup_device(struct pci_dev * dev)
- {
- u32 class;
-+ u16 cmd;
-
- sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(dev->bus),
- dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
-@@ -654,6 +655,31 @@
- pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
- pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
- pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
-+
-+ /*
-+ * Do the ugly legacy mode stuff here rather than broken chip
-+ * quirk code. Legacy mode ATA controllers have fixed
-+ * addresses. These are not always echoed in BAR0-3, and
-+ * BAR0-3 in a few cases contain junk!
-+ */
-+ if (class == PCI_CLASS_STORAGE_IDE) {
-+ u8 progif;
-+ pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
-+ if ((progif & 5) != 5) {
-+ dev->resource[0].start = 0x1F0;
-+ dev->resource[0].end = 0x1F7;
-+ dev->resource[0].flags = IORESOURCE_IO;
-+ dev->resource[1].start = 0x3F6;
-+ dev->resource[1].end = 0x3F6;
-+ dev->resource[1].flags = IORESOURCE_IO;
-+ dev->resource[2].start = 0x170;
-+ dev->resource[2].end = 0x177;
-+ dev->resource[2].flags = IORESOURCE_IO;
-+ dev->resource[3].start = 0x376;
-+ dev->resource[3].end = 0x376;
-+ dev->resource[3].flags = IORESOURCE_IO;
-+ }
-+ }
- break;
-
- case PCI_HEADER_TYPE_BRIDGE: /* bridge header */
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/ata_generic.c linux-2.6.16-rc6/drivers/scsi/ata_generic.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/ata_generic.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/ata_generic.c 2006-02-16 15:35:41.000000000 +0000
-@@ -0,0 +1,241 @@
-+/*
-+ * ata_generic.c - Generic PATA/SATA controller driver.
-+ * Copyright 2005 Red Hat Inc <alan@redhat.com>, all rights reserved.
-+ *
-+ * Elements from ide/pci/generic.c
-+ * Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org>
-+ * Portions (C) Copyright 2002 Red Hat Inc <alan@redhat.com>
-+ *
-+ * May be copied or modified under the terms of the GNU General Public License
-+ *
-+ * Driver for PCI IDE interfaces implementing the standard bus mastering
-+ * interface functionality. This assumes the BIOS did the drive set up and
-+ * tuning for us. By default we do not grab all IDE class devices as they
-+ * may have other drivers or need fixups to avoid problems. Instead we keep
-+ * a default list of stuff without documentation/driver that appears to
-+ * work.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include "scsi.h"
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "generic"
-+#define DRV_VERSION "0.1"
-+
-+/*
-+ * A generic parallel ATA driver using libata
-+ */
-+
-+static void genpata_phy_reset(struct ata_port *ap)
-+{
-+ /* We know the BIOS already did the mode work. Don't tempt any
-+ one else to "fix" things */
-+ ap->cbl = ATA_CBL_PATA80;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * genpata_set_mode - mode setting
-+ * @ap: interface to set up
-+ *
-+ * Use a non standard set_mode function. We don't want to be tuned.
-+ * The BIOS configured everything. Our job is not to fiddle. We
-+ * read the dma enabled bits from the PCI configuration of the device
-+ * and respect them.
-+ */
-+
-+static void genpata_set_mode(struct ata_port *ap)
-+{
-+ int dma_enabled;
-+ int i;
-+
-+ /* Bits 5 and 6 indicate if DMA is active on master/slave */
-+ dma_enabled = inb(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+ if (ata_dev_present(dev)) {
-+ /* We don't really care */
-+ dev->pio_mode = XFER_PIO_0;
-+ dev->dma_mode = XFER_MW_DMA_0;
-+ /* We do need the right mode information for DMA or PIO
-+ and this comes from the current configuration flags */
-+ /* FIXME: at some point in the future this should become
-+ a library helper which reads the disk modes from the
-+ disk as well */
-+ if (dma_enabled & (1 << (5 + i))) {
-+ dev->xfer_mode = XFER_MW_DMA_0;
-+ dev->xfer_shift = ATA_SHIFT_MWDMA;
-+ dev->flags &= ~ATA_DFLAG_PIO;
-+ } else {
-+ dev->xfer_mode = XFER_PIO_0;
-+ dev->xfer_shift = ATA_SHIFT_PIO;
-+ dev->flags |= ATA_DFLAG_PIO;
-+ }
-+ }
-+ }
-+}
-+
-+static struct scsi_host_template genpata_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations genpata_port_ops = {
-+ .set_mode = genpata_set_mode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = genpata_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int ide_generic_all; /* Set to claim all devices */
-+
-+static int __init ide_generic_all_on(char *unused)
-+{
-+ ide_generic_all = 1;
-+ printk(KERN_INFO "ATA generic will claim all unknown PCI IDE class storage controllers.\n");
-+ return 1;
-+}
-+
-+__setup("all-generic-ide", ide_generic_all_on);
-+
-+/**
-+ * pata_generic_init - attach generic IDE
-+ * @dev: PCI device found
-+ * @id: match entry
-+ *
-+ * Called each time a matching IDE interface is found. We check if the
-+ * interface is one we wish to claim and if so we perform any chip
-+ * specific hacks then let the ATA layer do the heavy lifting.
-+ */
-+
-+static int pata_generic_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ u16 command;
-+ static struct ata_port_info info = {
-+ .sht = &genpata_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_IRQ_MASK,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &genpata_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ /* Don't use the generic entry unless instructed to do so */
-+ if (id->driver_data == 1 && ide_generic_all == 0)
-+ return -ENODEV;
-+
-+ /* Devices that need care */
-+ if (dev->vendor == PCI_VENDOR_ID_UMC &&
-+ dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
-+ (!(PCI_FUNC(dev->devfn) & 1)))
-+ return -ENODEV;
-+
-+ if (dev->vendor == PCI_VENDOR_ID_OPTI &&
-+ dev->device == PCI_DEVICE_ID_OPTI_82C558 &&
-+ (!(PCI_FUNC(dev->devfn) & 1)))
-+ return -ENODEV;
-+
-+ /* Don't re-enable devices in generic mode or we will break some
-+ motherboards with disabled and unused IDE controllers */
-+ pci_read_config_word(dev, PCI_COMMAND, &command);
-+ if (!(command & PCI_COMMAND_IO))
-+ return -ENODEV;
-+
-+ if (dev->vendor == PCI_VENDOR_ID_AL)
-+ ata_pci_clear_simplex(dev);
-+
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id pata_generic[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_6565), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8673F), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886A), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), },
-+ /* Must come last. If you add entries adjust this table appropriately */
-+ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 1},
-+ { 0, },
-+};
-+
-+static struct pci_driver pata_generic_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = pata_generic,
-+ .probe = pata_generic_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init pata_generic_init(void)
-+{
-+ return pci_module_init(&pata_generic_pci_driver);
-+}
-+
-+
-+static void __exit pata_generic_exit(void)
-+{
-+ pci_unregister_driver(&pata_generic_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for generic ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, pata_generic);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(pata_generic_init);
-+module_exit(pata_generic_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/ata_piix.c linux-2.6.16-rc6/drivers/scsi/ata_piix.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/ata_piix.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/ata_piix.c 2006-02-20 20:06:17.000000000 +0000
-@@ -91,9 +91,10 @@
- #include <linux/device.h>
- #include <scsi/scsi_host.h>
- #include <linux/libata.h>
-+#include <linux/ata.h>
-
- #define DRV_NAME "ata_piix"
--#define DRV_VERSION "1.05"
-+#define DRV_VERSION "1.05-ac7"
-
- enum {
- PIIX_IOCFG = 0x54, /* IDE I/O configuration register */
-@@ -122,6 +123,17 @@
- piix4_pata = 2,
- ich6_sata = 3,
- ich6_sata_ahci = 4,
-+ ich0_pata = 5,
-+ ich2_pata = 6,
-+ ich3_pata = 7,
-+ ich4_pata = 8,
-+ cich_pata = 9,
-+ piix3_pata = 10,
-+ esb_pata = 11,
-+ ich_pata = 12,
-+ ich6_pata = 13,
-+ ich7_pata = 14,
-+ esb2_pata = 15,
-
- PIIX_AHCI_DEVICE = 6,
- };
-@@ -130,20 +142,69 @@
- const struct pci_device_id *ent);
-
- static void piix_pata_phy_reset(struct ata_port *ap);
-+static void ich_pata_phy_reset(struct ata_port *ap);
- static void piix_sata_phy_reset(struct ata_port *ap);
- static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev);
- static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev);
-+static void ich_set_dmamode (struct ata_port *ap, struct ata_device *adev);
-
- static unsigned int in_module_init = 1;
-
- static const struct pci_device_id piix_pci_tbl[] = {
- #ifdef ATA_ENABLE_PATA
-+#if 0
-+ /* Neptune and earlier are simple PIO */
-+ /* 430HX and friends. MWDMA */
-+ { 0x8086, 0x122e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix3_pata },
-+ { 0x8086, 0x1230, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix3_pata },
-+ /* Intel PIIX3 */
-+ { 0x8086, 0x7010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix3_pata },
-+#endif
-+ /* Intel PIIX4 for the 430TX/440BX/MX chipset: UDMA 33 */
-+ /* Also PIIX4E (fn3 rev 2) and PIIX4M (fn3 rev 3) */
- { 0x8086, 0x7111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
- { 0x8086, 0x24db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
- { 0x8086, 0x25a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
-+ /* Intel PIIX4 */
-+ { 0x8086, 0x7199, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
-+ /* Intel PIIX4 */
-+ { 0x8086, 0x7601, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
-+ /* Intel PIIX */
-+ { 0x8086, 0x84CA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata },
-+ /* Intel ICH (i810, i815, i840) UDMA 66*/
-+ { 0x8086, 0x2411, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata },
-+ /* Intel ICH0 : UDMA 33*/
-+ { 0x8086, 0x2421, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich0_pata },
-+ /* Intel ICH2M */
-+ { 0x8086, 0x244A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich2_pata },
-+ /* Intel ICH2 (i810E2, i845, 850, 860) UDMA 100 */
-+ { 0x8086, 0x244B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich2_pata },
-+ /* Intel ICH3M */
-+ { 0x8086, 0x248A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich3_pata },
-+ /* Intel ICH3 (E7500/1) UDMA 100 */
-+ { 0x8086, 0x248B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich3_pata },
-+#if 0
-+ { 0x8086, 0x24C1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, dunno_pata },
-+#endif
-+ /* Intel ICH4 (i845GV, i845E, i852, i855) UDMA 100 */
-+ { 0x8086, 0x24CA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich4_pata },
-+ { 0x8086, 0x24CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich4_pata },
-+ /* Intel ICH5 */
-+ { 0x8086, 0x24DB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata },
-+ /* C-ICH (i810E2) */
-+ { 0x8086, 0x245B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, cich_pata },
-+ /* ESB (855GME/875P + 6300ESB) UDMA 100 */
-+ { 0x8086, 0x25A2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, esb_pata },
-+ /* ICH6 (and 6) (i915) UDMA 100 */
-+ { 0x8086, 0x266F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_pata },
-+ /* ICH7/7-R (i945, i975) UDMA 100*/
-+ { 0x8086, 0x27DF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich7_pata },
-+ { 0x8086, 0x269E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, esb2_pata },
- #endif
--
-- /* NOTE: The following PCI ids must be kept in sync with the
-+ /*
-+ * SATA ports
-+ *
-+ * NOTE: The following PCI ids must be kept in sync with the
- * list in drivers/pci/quirks.c.
- */
-
-@@ -213,6 +274,40 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations ich_pata_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = piix_set_piomode,
-+ .set_dmamode = ich_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = ich_pata_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+
-+ .data_xfer = ata_pio_data_xfer,
-
- .eng_timeout = ata_eng_timeout,
-
-@@ -242,6 +337,8 @@
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-
-+ .data_xfer = ata_pio_data_xfer,
-+
- .eng_timeout = ata_eng_timeout,
-
- .irq_handler = ata_interrupt,
-@@ -253,47 +350,39 @@
- };
-
- static struct ata_port_info piix_port_info[] = {
-- /* ich5_pata */
-+ /* ich5_pata: 0*/
- {
- .sht = &piix_sht,
- .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST |
- PIIX_FLAG_CHECKINTR,
- .pio_mask = 0x1f, /* pio0-4 */
--#if 0
- .mwdma_mask = 0x06, /* mwdma1-2 */
--#else
-- .mwdma_mask = 0x00, /* mwdma broken */
--#endif
-- .udma_mask = 0x3f, /* udma0-5 */
-- .port_ops = &piix_pata_ops,
-+ .udma_mask = ATA_UDMA6,
-+ .port_ops = &ich_pata_ops,
- },
-
-- /* ich5_sata */
-+ /* ich5_sata: 1 */
- {
- .sht = &piix_sht,
- .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST |
- PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR,
- .pio_mask = 0x1f, /* pio0-4 */
- .mwdma_mask = 0x07, /* mwdma0-2 */
-- .udma_mask = 0x7f, /* udma0-6 */
-+ .udma_mask = ATA_UDMA6,
- .port_ops = &piix_sata_ops,
- },
-
-- /* piix4_pata */
-+ /* piix4_pata: 2 */
- {
- .sht = &piix_sht,
- .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
- .pio_mask = 0x1f, /* pio0-4 */
--#if 0
- .mwdma_mask = 0x06, /* mwdma1-2 */
--#else
-- .mwdma_mask = 0x00, /* mwdma broken */
--#endif
- .udma_mask = ATA_UDMA_MASK_40C,
- .port_ops = &piix_pata_ops,
- },
-
-- /* ich6_sata */
-+ /* ich6_sata: 3 */
- {
- .sht = &piix_sht,
- .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST |
-@@ -301,11 +390,11 @@
- ATA_FLAG_SLAVE_POSS,
- .pio_mask = 0x1f, /* pio0-4 */
- .mwdma_mask = 0x07, /* mwdma0-2 */
-- .udma_mask = 0x7f, /* udma0-6 */
-+ .udma_mask = ATA_UDMA6,
- .port_ops = &piix_sata_ops,
- },
-
-- /* ich6_sata_ahci */
-+ /* ich6_sata_ahci: 4 */
- {
- .sht = &piix_sht,
- .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST |
-@@ -313,9 +402,119 @@
- ATA_FLAG_SLAVE_POSS | PIIX_FLAG_AHCI,
- .pio_mask = 0x1f, /* pio0-4 */
- .mwdma_mask = 0x07, /* mwdma0-2 */
-- .udma_mask = 0x7f, /* udma0-6 */
-+ .udma_mask = ATA_UDMA6,
- .port_ops = &piix_sata_ops,
- },
-+
-+ /* ich0_pata: 5 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* MWDMA0 is broken on chip */
-+ .udma_mask = ATA_UDMA4,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* ich2_pata: 6 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* MWDMA0 is broken on chip */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* ich3_pata: 7 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* MWDMA0 is broken on chip */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* ich4_pata: 8 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* cich_pata: 9 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* piix3_pata: 10 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma1-2 */
-+ .udma_mask = ATA_UDMA_MASK_40C,
-+ .port_ops = &piix_pata_ops,
-+ },
-+
-+ /* esb_pata: 11 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &piix_pata_ops,
-+ },
-+
-+ /* ich_pata: 12 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA4, /* UDMA66 */
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* ich6_pata: 13 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA6, /* UDMA133 */
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* ich7_pata: 14 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA6,
-+ .port_ops = &ich_pata_ops,
-+ },
-+
-+ /* esb2_pata: 15 */
-+ {
-+ .sht = &piix_sht,
-+ .host_flags = ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS,
-+ .pio_mask = 0x1f, /* pio 0-4 */
-+ .mwdma_mask = 0x06, /* Check: maybe 0x07 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &ich_pata_ops,
-+ },
- };
-
- static struct pci_bits piix_enable_bits[] = {
-@@ -339,7 +538,7 @@
- * LOCKING:
- * None (inherited from caller).
- */
--static void piix_pata_cbl_detect(struct ata_port *ap)
-+static void ich_pata_cbl_detect(struct ata_port *ap)
- {
- struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
- u8 tmp, mask;
-@@ -366,8 +565,9 @@
- * piix_pata_phy_reset - Probe specified port on PATA host controller
- * @ap: Port to probe
- *
-- * Probe PATA phy.
-- *
-+ * Probe PATA phy. Unlike the ICH we have no IOCFG register and
-+ * don't do UDMA66+ anyway.
-+
- * LOCKING:
- * None (inherited from caller).
- */
-@@ -381,11 +581,34 @@
- printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
- return;
- }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-
-- piix_pata_cbl_detect(ap);
-
-- ata_port_probe(ap);
-+/**
-+ * ich_pata_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * Probe PATA phy.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void ich_pata_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-
-+ if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+
-+ ich_pata_cbl_detect(ap);
-+ ata_port_probe(ap);
- ata_bus_reset(ap);
- }
-
-@@ -481,6 +704,13 @@
- unsigned int slave_port = 0x44;
- u16 master_data;
- u8 slave_data;
-+ u8 udma_enable;
-+ int control = 0;
-+
-+ /*
-+ * See Intel Document 298600-004 for the timing programing rules
-+ * for ICH controllers.
-+ */
-
- static const /* ISP RTC */
- u8 timings[][2] = { { 0, 0 },
-@@ -489,20 +719,30 @@
- { 2, 1 },
- { 2, 3 }, };
-
-+ if (pio > 2)
-+ control |= 1; /* TIME1 enable */
-+ if (ata_pio_need_iordy(adev))
-+ control |= 2; /* IE enable */
-+
-+ /* Intel specifies that the PPE functionality is for disk only */
-+ if (adev->class == ATA_DEV_ATA)
-+ control |= 4; /* PPE enable */
-+
- pci_read_config_word(dev, master_port, &master_data);
- if (is_slave) {
-+ /* Enable SITRE (seperate slave timing register) */
- master_data |= 0x4000;
-- /* enable PPE, IE and TIME */
-- master_data |= 0x0070;
-+ /* enable PPE1, IE1 and TIME1 as needed */
-+ master_data |= (control << 4);
- pci_read_config_byte(dev, slave_port, &slave_data);
- slave_data &= (ap->hard_port_no ? 0x0f : 0xf0);
-- slave_data |=
-- (timings[pio][0] << 2) |
-- (timings[pio][1] << (ap->hard_port_no ? 4 : 0));
-+ /* Load the timing nibble for this slave */
-+ slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << (ap->hard_port_no ? 4 : 0);
- } else {
-+ /* Master keeps the bits in a different format */
- master_data &= 0xccf8;
-- /* enable PPE, IE and TIME */
-- master_data |= 0x0007;
-+ /* Enable PPE, IE and TIME as appropriate */
-+ master_data |= control;
- master_data |=
- (timings[pio][0] << 12) |
- (timings[pio][1] << 8);
-@@ -510,84 +750,165 @@
- pci_write_config_word(dev, master_port, master_data);
- if (is_slave)
- pci_write_config_byte(dev, slave_port, slave_data);
-+
-+ /* Ensure the UDMA bit is off - it will be turned back on if
-+ UDMA is selected */
-+
-+ if (ap->udma_mask) {
-+ pci_read_config_byte(dev, 0x48, &udma_enable);
-+ udma_enable &= ~(1 << (2 * ap->hard_port_no + adev->devno));
-+ pci_write_config_byte(dev, 0x48, udma_enable);
-+ }
- }
-
- /**
-- * piix_set_dmamode - Initialize host controller PATA PIO timings
-+ * do_piix_set_dmamode - Initialize host controller PATA PIO timings
- * @ap: Port whose timings we are configuring
-- * @adev: um
-- * @udma: udma mode, 0 - 6
-+ * @adev: device to configure
-+ * @isich: True if the device is an ICH and has IOCFG registers
- *
-- * Set UDMA mode for device, in host controller PCI config space.
-+ * Set MW/UDMA mode for device, in host controller PCI config space.
-+ * Note: We know the caller has already set the PIO mode. In doing
-+ * so it has correctly set PPE, SITRE, IORDY and TIME1. We rely on that.
- *
- * LOCKING:
- * None (inherited from caller).
- */
-
--static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+static void do_pata_set_dmamode (struct ata_port *ap, struct ata_device *adev, int isich)
- {
-- unsigned int udma = adev->dma_mode; /* FIXME: MWDMA too */
- struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-- u8 maslave = ap->hard_port_no ? 0x42 : 0x40;
-- u8 speed = udma;
-- unsigned int drive_dn = (ap->hard_port_no ? 2 : 0) + adev->devno;
-- int a_speed = 3 << (drive_dn * 4);
-- int u_flag = 1 << drive_dn;
-- int v_flag = 0x01 << drive_dn;
-- int w_flag = 0x10 << drive_dn;
-- int u_speed = 0;
-- int sitre;
-- u16 reg4042, reg4a;
-- u8 reg48, reg54, reg55;
--
-- pci_read_config_word(dev, maslave, &reg4042);
-- DPRINTK("reg4042 = 0x%04x\n", reg4042);
-- sitre = (reg4042 & 0x4000) ? 1 : 0;
-- pci_read_config_byte(dev, 0x48, &reg48);
-- pci_read_config_word(dev, 0x4a, &reg4a);
-- pci_read_config_byte(dev, 0x54, &reg54);
-- pci_read_config_byte(dev, 0x55, &reg55);
--
-- switch(speed) {
-- case XFER_UDMA_4:
-- case XFER_UDMA_2: u_speed = 2 << (drive_dn * 4); break;
-- case XFER_UDMA_6:
-- case XFER_UDMA_5:
-- case XFER_UDMA_3:
-- case XFER_UDMA_1: u_speed = 1 << (drive_dn * 4); break;
-- case XFER_UDMA_0: u_speed = 0 << (drive_dn * 4); break;
-- case XFER_MW_DMA_2:
-- case XFER_MW_DMA_1: break;
-- default:
-- BUG();
-- return;
-- }
-+ u8 master_port = ap->hard_port_no ? 0x42 : 0x40;
-+ u16 master_data;
-+ u8 speed = adev->dma_mode;
-+ int devid = adev->devno + 2 * ap->hard_port_no;
-+ u8 udma_enable;
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-
-+ pci_read_config_word(dev, master_port, &master_data);
-+ pci_read_config_byte(dev, 0x48, &udma_enable);
-+
- if (speed >= XFER_UDMA_0) {
-- if (!(reg48 & u_flag))
-- pci_write_config_byte(dev, 0x48, reg48 | u_flag);
-- if (speed == XFER_UDMA_5) {
-- pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
-- } else {
-- pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
-+ unsigned int udma = adev->dma_mode - XFER_UDMA_0;
-+ u16 udma_timing;
-+ u16 ideconf;
-+ int u_clock, u_speed;
-+
-+ /*
-+ * UDMA is handled by a combination of clock switching and
-+ * selection of dividers
-+ *
-+ * Handy rule: Odd modes are UDMATIMx 01, even are 02
-+ * except UDMA0 which is 00
-+ */
-+ u_speed = min(2 - (udma & 1), udma);
-+ if (udma == 5)
-+ u_clock = 0x1000; /* 100Mhz */
-+ else if (udma > 2)
-+ u_clock = 1; /* 66Mhz */
-+ else
-+ u_clock = 0; /* 33Mhz */
-+
-+ udma_enable |= (1 << devid);
-+
-+ /* Load the CT/RP selection */
-+ pci_read_config_word(dev, 0x4A, &udma_timing);
-+ udma_timing &= ~(3 << (4 * devid));
-+ udma_timing |= u_speed << (4 * devid);
-+ pci_write_config_word(dev, 0x4A, udma_timing);
-+
-+ if (isich) {
-+ /* Select a 33/66/100Mhz clock */
-+ pci_read_config_word(dev, 0x54, &ideconf);
-+ ideconf &= ~(0x1001 << devid);
-+ ideconf |= u_clock << devid;
-+ /* For ICH or later we should set bit 10 for better
-+ performance (WR_PingPong_En) */
-+ pci_write_config_word(dev, 0x54, ideconf);
- }
-- if ((reg4a & a_speed) != u_speed)
-- pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
-- if (speed > XFER_UDMA_2) {
-- if (!(reg54 & v_flag))
-- pci_write_config_byte(dev, 0x54, reg54 | v_flag);
-- } else
-- pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
- } else {
-- if (reg48 & u_flag)
-- pci_write_config_byte(dev, 0x48, reg48 & ~u_flag);
-- if (reg4a & a_speed)
-- pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
-- if (reg54 & v_flag)
-- pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
-- if (reg55 & w_flag)
-- pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
-+ /*
-+ * MWDMA is driven by the PIO timings. We must also enable
-+ * IORDY unconditionally along with TIME1. PPE has already
-+ * been set when the PIO timing was set.
-+ */
-+ unsigned int mwdma = adev->dma_mode - XFER_MW_DMA_0;
-+ unsigned int control;
-+ u8 slave_data;
-+ const unsigned int needed_pio[3] = {
-+ XFER_PIO_0, XFER_PIO_3, XFER_PIO_4
-+ };
-+ int pio = needed_pio[mwdma] - XFER_PIO_0;
-+
-+ control = 3; /* IORDY|TIME1 */
-+
-+ /* If the drive MWDMA is faster than it can do PIO then
-+ we must force PIO into PIO0 */
-+
-+ if (adev->pio_mode < needed_pio[mwdma])
-+ /* Enable DMA timing only */
-+ control |= 8; /* PIO cycles in PIO0 */
-+
-+ if (adev->devno) { /* Slave */
-+ master_data &= 0xFF4F; /* Mask out IORDY|TIME1|DMAONLY */
-+ master_data |= control << 4;
-+ pci_read_config_byte(dev, 0x44, &slave_data);
-+ slave_data &= (0x0F + 0xE1 * ap->hard_port_no);
-+ /* Load the matching timing */
-+ slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << (ap->hard_port_no ? 4 : 0);
-+ pci_write_config_byte(dev, 0x44, slave_data);
-+ } else { /* Master */
-+ master_data &= 0xCCF4; /* Mask out IORDY|TIME1|DMAONLY
-+ and master timing bits */
-+ master_data |= control;
-+ master_data |=
-+ (timings[pio][0] << 12) |
-+ (timings[pio][1] << 8);
-+ }
-+ udma_enable &= ~(1 << devid);
-+ pci_write_config_word(dev, master_port, master_data);
- }
-+ /* Don't scribble on 0x48 if the controller does not support UDMA */
-+ if (ap->udma_mask)
-+ pci_write_config_byte(dev, 0x48, udma_enable);
-+}
-+
-+/**
-+ * piix_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set MW/UDMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ do_pata_set_dmamode(ap, adev, 0);
-+}
-+
-+/**
-+ * ich_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set MW/UDMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void ich_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ do_pata_set_dmamode(ap, adev, 1);
- }
-
- #define AHCI_PCI_BAR 5
-@@ -646,15 +967,15 @@
- pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
- pci_read_config_word(pdev, 0x41, &cfg);
- /* Only on the original revision: IDE DMA can hang */
-- if(rev == 0x00)
-+ if (rev == 0x00)
- no_piix_dma = 1;
- /* On all revisions below 5 PXB bus lock must be disabled for IDE */
-- else if(cfg & (1<<14) && rev < 5)
-+ else if (cfg & (1<<14) && rev < 5)
- no_piix_dma = 2;
- }
-- if(no_piix_dma)
-+ if (no_piix_dma)
- dev_printk(KERN_WARNING, &ata_dev->dev, "450NX errata present, disabling IDE DMA.\n");
-- if(no_piix_dma == 2)
-+ if (no_piix_dma == 2)
- dev_printk(KERN_WARNING, &ata_dev->dev, "A BIOS update may resolve this.\n");
- return no_piix_dma;
- }
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/Kconfig linux-2.6.16-rc6/drivers/scsi/Kconfig
---- linux.vanilla-2.6.16-rc6/drivers/scsi/Kconfig 2006-03-13 14:00:13.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/Kconfig 2006-02-20 17:27:24.000000000 +0000
-@@ -599,6 +599,316 @@
- depends on IDE=y && !BLK_DEV_IDE_SATA && (SCSI_SATA_AHCI || SCSI_ATA_PIIX)
- default y
-
-+config SCSI_PATA_ALI
-+ tristate "ALi PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the ALi ATA interfaces
-+ found on the many ALi chipsets.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_AMD
-+ tristate "AMD/NVidia PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the AMD and NVidia PATA
-+ interfaces found on the chipsets for Athlon/Athlon64.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_ARTOP
-+ tristate "ARTOP 6210/6260 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for ARTOP PATA controllers.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_ATIIXP
-+ tristate "ATI PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the ATI ATA interfaces
-+ found on the many ATI chipsets.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_CMD64X
-+ tristate "CMD64x PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the CMD64x series chips
-+ except for the CMD640.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_CS5520
-+ tristate "CS5510/5520 PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the Cyrix 5510/5520
-+ companion chip used with the MediaGX/Geode processor family.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_CS5530
-+ tristate "CS5530 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the Cyrix/NatSemi/AMD CS5530
-+ companion chip used with the MediaGX/Geode processor family.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_CS5535
-+ tristate "CS5535 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && X86 && !X86_64 && EXPERIMENTAL
-+ help
-+ This option enables support for the NatSemi/AMD CS5535
-+ companion chip used with the Geode processor family.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_CYPRESS
-+ tristate "Cypress CY82C693 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the Cypress/Contaq CY82C693
-+ chipset found in some Alpha systems
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_EFAR
-+ tristate "EFAR SLC90E66 support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the EFAR SLC90E66
-+ IDE controller found on some older machines.
-+
-+ If unsure, say N.
-+
-+config SCSI_ATA_GENERIC
-+ tristate "Generic PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for generic BIOS configured
-+ PATA controllers via the new ATA layer
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_HPT37X
-+ tristate "HPT 370/370A/371/372/374/302 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the majority of the later HPT
-+ PATA controllers via the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_HPT3X2N
-+ tristate "HPT 372N/302N PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the N variant HPT PATA
-+ controllers via the new ATA layer
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_HPT3X3
-+ tristate "HPT 343/363 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the HPT 343/363
-+ PATA controllers via the new ATA layer
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_ISAPNP
-+ tristate "ISA Plug and Play PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && EXPERIMENTAL
-+ help
-+ This option enables support for ISA plug & play ATA
-+ controllers such as those found on old soundcards.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_IT8172
-+ tristate "IT8172 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the ITE 8172 PATA controller
-+ via the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_IT821X
-+ tristate "IT821x PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the ITE 8211 and 8212
-+ PATA controllers via the new ATA layer, including RAID
-+ mode.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_LEGACY
-+ tristate "Legacy ISA PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for ISA bus legacy PATA
-+ interfaces on ide2-5 and allows them to be accessed via
-+ the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_MPIIX
-+ tristate "Intel PATA MPIIX support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for MPIIX PATA support.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_NETCELL
-+ tristate "NETCELL Revolution RAID support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the Netcell Revolution RAID
-+ PATA controller.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_NS87410
-+ tristate "Nat Semi NS87410 PATA support (Experimental)"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the National Semiconductor
-+ NS87410 PCI-IDE controller.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_OLDPIIX
-+ tristate "Intel PATA old PIIX support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for early PIIX PATA interfaces.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_OPTI
-+ tristate "OPTI621/6215 PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables full PIO support for the early Opti ATA
-+ controllers found on some old motherboards.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_PCMCIA
-+ tristate "PCMCIA PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCMCIA
-+ help
-+ This option enables support for PCMCIA ATA interfaces, including
-+ compact flash card adapters via the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_PDC_OLD
-+ tristate "Older Promise PATA controller support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the Promise 20246, 20262, 20263,
-+ 20265 and 20267 adapters.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_QDI
-+ tristate "QDI VLB PATA support"
-+ depends on SCSI_SATA
-+ help
-+ Support for QDI 6500 and 6580 PATA controllers on VESA local bus.
-+
-+config SCSI_PATA_RADISYS
-+ tristate "RADISYS 82600 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the RADISYS 82600
-+ PATA controllers via the new ATA layer
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_RZ1000
-+ tristate "PC Tech RZ1000 PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables basic support for the PC Tech RZ1000/1
-+ PATA controllers via the new ATA layer
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_SC1200
-+ tristate "SC1200 PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the NatSemi/AMD SC1200 SoC
-+ companion chip used with the Geode processor family.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_SERVERWORKS
-+ tristate "SERVERWORKS OSB4/CSB5/CSB6 PATA support (Experimental)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for the Serverworks OSB4/CSB5 and
-+ CSB6 IDE controllers, via the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_SIL680
-+ tristate "CMD / Silicon Image 680 PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for CMD / Silicon Image 680 PATA.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_SIS
-+ tristate "SiS PATA support (Experimental)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ This option enables support for SiS PATA controllers
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_TRIFLEX
-+ tristate "Compaq Triflex PATA support (Raving Lunatic)"
-+ depends on SCSI_SATA && PCI && EXPERIMENTAL
-+ help
-+ Enable support for the Compaq 'Triflex' IDE controller as found
-+ on many Compaq Pentium-Pro systems, via the new ATA layer.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_VIA
-+ tristate "VIA PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for the VIA PATA interfaces
-+ found on the many VIA chipsets.
-+
-+ If unsure, say N.
-+
-+config SCSI_PATA_WINBOND
-+ tristate "Winbond SL82C105 PATA support"
-+ depends on SCSI_SATA && PCI
-+ help
-+ This option enables support for SL82C105 PATA devices found in the
-+ Netwinder and some other systems
-+
-+ If unsure, say N.
-+
-+
- config SCSI_BUSLOGIC
- tristate "BusLogic SCSI support"
- depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/libata-core.c linux-2.6.16-rc6/drivers/scsi/libata-core.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/libata-core.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/libata-core.c 2006-03-13 14:30:45.838552760 +0000
-@@ -68,9 +68,10 @@
- static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev);
- static void ata_set_mode(struct ata_port *ap);
- static void ata_dev_set_xfermode(struct ata_port *ap, struct ata_device *dev);
--static unsigned int ata_get_mode_mask(const struct ata_port *ap, int shift);
-+static unsigned int ata_get_mode_mask(const struct ata_port *ap, struct ata_device *adev, int shift);
- static int fgb(u32 bitmap);
- static int ata_choose_xfer_mode(const struct ata_port *ap,
-+ struct ata_device *adev,
- u8 *xfer_mode_out,
- unsigned int *xfer_shift_out);
- static void __ata_qc_complete(struct ata_queued_cmd *qc);
-@@ -78,7 +79,7 @@
- static unsigned int ata_unique_id = 1;
- static struct workqueue_struct *ata_wq;
-
--int atapi_enabled = 0;
-+int atapi_enabled = 1;
- module_param(atapi_enabled, int, 0444);
- MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
-
-@@ -1209,6 +1210,48 @@
- return 0;
- }
-
-+static void ata_dev_check_hpa(struct ata_port *ap, struct ata_device *dev)
-+{
-+ struct ata_taskfile tf;
-+ unsigned long long true_size;
-+ unsigned int err_mask;
-+
-+ if (!ata_id_has_hpa(dev->id) || !ata_id_hpa_enabled(dev->id))
-+ return;
-+
-+ /* Issue a query for HPA */
-+ ata_dev_select(ap, dev->devno, 1, 1);
-+ ata_tf_init(ap, &tf, dev->devno);
-+
-+ if (dev->flags & ATA_DFLAG_LBA48) {
-+ tf.command = ATA_CMD_READ_NATIVE_MAX_EXT;
-+ tf.device |= 0x40;
-+ err_mask = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0);
-+ if (err_mask)
-+ return;
-+ /* Ok HPA is live */
-+ true_size = (tf.hob_lbah << 16) | (tf.hob_lbam << 8) | (tf.hob_lbal);
-+ true_size <<= 24;
-+ true_size |= (tf.lbah << 16) | (tf.lbam << 8) | tf.lbal;
-+ } else {
-+ tf.command = ATA_CMD_READ_NATIVE_MAX;
-+ tf.device |= 0x40;
-+ err_mask = ata_exec_internal(ap, dev, &tf, DMA_NONE, NULL, 0);
-+ if (err_mask)
-+ return;
-+ /* Ok HPA is live */
-+ true_size = ((tf.device & 0x0F) << 24) |
-+ (tf.lbah << 16) |
-+ (tf.lbam << 8) |
-+ tf.lbal;
-+ }
-+ dev->flags |= ATA_DFLAG_HPA;
-+ /* Should save the HPA value and expose it for dmraid then
-+ remove the clipping */
-+ printk(KERN_INFO "HPA present: true size %lld sectors.\n",
-+ true_size + 1);
-+}
-+
- /**
- * ata_dev_identify - obtain IDENTIFY x DEVICE page
- * @ap: port on which device we wish to probe resides
-@@ -1332,7 +1375,7 @@
-
- /* ATA-specific feature tests */
- if (dev->class == ATA_DEV_ATA) {
-- if (!ata_id_is_ata(dev->id)) /* sanity check */
-+ if (!ata_id_is_ata(dev->id) && !ata_id_is_cfa(dev->id)) /* sanity check */
- goto err_out_nosup;
-
- /* get major version */
-@@ -1404,6 +1447,13 @@
- }
-
- ap->host->max_cmd_len = 16;
-+
-+ /*
-+ * See if we have the HPA misfeature on the drive
-+ */
-+#if 0 /* TESTING */
-+ ata_dev_check_hpa(ap, dev);
-+#endif
- }
-
- /* ATAPI-specific feature tests */
-@@ -1489,10 +1539,24 @@
- ap->ops->phy_reset(ap);
- if (ap->flags & ATA_FLAG_PORT_DISABLED)
- goto err_out;
-+
-+ /* The reset means we are in PIO 0, but the controller may not
-+ yet be correctly set up and may have old BIOS settings, or just
-+ no settings at all. Set all the devices to PIO 0 */
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++)
-+ ap->device[i].pio_mode = XFER_PIO_0;
-
- for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *adev = & ap->device[i];
-+
-+ /* Set up the controller on this port for PIO 0. We must not
-+ send the drive speed setting commands at this point */
-+ if (ap->ops->set_piomode)
-+ ap->ops->set_piomode(ap, adev);
-+
- ata_dev_identify(ap, i);
-- if (ata_dev_present(&ap->device[i])) {
-+ if (ata_dev_present(adev)) {
- found = 1;
- ata_dev_config(ap,i);
- }
-@@ -1501,7 +1565,11 @@
- if ((!found) || (ap->flags & ATA_FLAG_PORT_DISABLED))
- goto err_out_disable;
-
-- ata_set_mode(ap);
-+ if(ap->ops->set_mode)
-+ ap->ops->set_mode(ap);
-+ else
-+ ata_set_mode(ap);
-+
- if (ap->flags & ATA_FLAG_PORT_DISABLED)
- goto err_out_disable;
-
-@@ -1616,6 +1684,23 @@
- }
-
- /**
-+ * ata_dev_pair - return other device on cable
-+ * @ap: port
-+ * @adev: device
-+ *
-+ * Obtain the other device on the same cable, or if none is
-+ * present NULL is returned
-+ */
-+
-+struct ata_device *ata_dev_pair(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct ata_device *pair = &ap->device[1 - adev->devno];
-+ if (!ata_dev_present(pair))
-+ return NULL;
-+ return pair;
-+}
-+
-+/**
- * ata_port_disable - Disable port.
- * @ap: Port to be disabled.
- *
-@@ -1828,16 +1913,19 @@
- ap->id, dev->devno, xfer_mode_str[idx]);
- }
-
--static int ata_host_set_pio(struct ata_port *ap)
-+static int ata_host_set_pio(struct ata_port *ap, struct ata_device *adev)
- {
- unsigned int mask;
-- int x, i;
-+ int x;
- u8 base, xfer_mode;
-
-- mask = ata_get_mode_mask(ap, ATA_SHIFT_PIO);
-+ if (!ata_dev_present(adev))
-+ return 0;
-+
-+ mask = ata_get_mode_mask(ap, adev, ATA_SHIFT_PIO);
- x = fgb(mask);
- if (x < 0) {
-- printk(KERN_WARNING "ata%u: no PIO support\n", ap->id);
-+ printk(KERN_WARNING "ata%u: no PIO support for device %d.\n", ap->id, adev->devno);
- return -1;
- }
-
-@@ -1847,34 +1935,24 @@
- DPRINTK("base 0x%x xfer_mode 0x%x mask 0x%x x %d\n",
- (int)base, (int)xfer_mode, mask, x);
-
-- for (i = 0; i < ATA_MAX_DEVICES; i++) {
-- struct ata_device *dev = &ap->device[i];
-- if (ata_dev_present(dev)) {
-- dev->pio_mode = xfer_mode;
-- dev->xfer_mode = xfer_mode;
-- dev->xfer_shift = ATA_SHIFT_PIO;
-- if (ap->ops->set_piomode)
-- ap->ops->set_piomode(ap, dev);
-- }
-- }
-+ adev->pio_mode = xfer_mode;
-+ adev->xfer_mode = xfer_mode;
-+ adev->xfer_shift = ATA_SHIFT_PIO;
-+ if (ap->ops->set_piomode)
-+ ap->ops->set_piomode(ap, adev);
-
- return 0;
- }
-
--static void ata_host_set_dma(struct ata_port *ap, u8 xfer_mode,
-- unsigned int xfer_shift)
-+static void ata_host_set_dma(struct ata_port *ap, struct ata_device *adev,
-+ u8 xfer_mode, unsigned int xfer_shift)
- {
-- int i;
--
-- for (i = 0; i < ATA_MAX_DEVICES; i++) {
-- struct ata_device *dev = &ap->device[i];
-- if (ata_dev_present(dev)) {
-- dev->dma_mode = xfer_mode;
-- dev->xfer_mode = xfer_mode;
-- dev->xfer_shift = xfer_shift;
-- if (ap->ops->set_dmamode)
-- ap->ops->set_dmamode(ap, dev);
-- }
-+ if (ata_dev_present(adev)) {
-+ adev->dma_mode = xfer_mode;
-+ adev->xfer_mode = xfer_mode;
-+ adev->xfer_shift = xfer_shift;
-+ if (ap->ops->set_dmamode)
-+ ap->ops->set_dmamode(ap, adev);
- }
- }
-
-@@ -1890,32 +1968,64 @@
- */
- static void ata_set_mode(struct ata_port *ap)
- {
-- unsigned int xfer_shift;
-- u8 xfer_mode;
-+ unsigned int xfer_shift[ATA_MAX_DEVICES];
-+ u8 xfer_mode[ATA_MAX_DEVICES];
- int rc;
-+ int i;
-+ int used_dma = 0; /* Track if DMA was used for this setup */
-
-- /* step 1: always set host PIO timings */
-- rc = ata_host_set_pio(ap);
-- if (rc)
-- goto err_out;
-+ /* We need to set timings individually for each device */
-
-- /* step 2: choose the best data xfer mode */
-- xfer_mode = xfer_shift = 0;
-- rc = ata_choose_xfer_mode(ap, &xfer_mode, &xfer_shift);
-- if (rc)
-- goto err_out;
-+ /* Compute the timings first so that when we ask the device to do
-+ speed configuration it can see all the intended device state in
-+ full */
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *adev = &ap->device[i];
-+ /* Choose the best data xfer mode */
-+ xfer_mode[i] = xfer_shift[i] = 0;
-+ rc = ata_choose_xfer_mode(ap, adev, &xfer_mode[i], &xfer_shift[i]);
-+ if (rc)
-+ goto err_out;
-
-- /* step 3: if that xfer mode isn't PIO, set host DMA timings */
-- if (xfer_shift != ATA_SHIFT_PIO)
-- ata_host_set_dma(ap, xfer_mode, xfer_shift);
--
-- /* step 4: update devices' xfer mode */
-- ata_dev_set_mode(ap, &ap->device[0]);
-- ata_dev_set_mode(ap, &ap->device[1]);
-+ }
-+
-+ /* Now set the mode tables we have computed */
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *adev = &ap->device[i];
-+ /* step 1: always set host PIO timings */
-+ rc = ata_host_set_pio(ap, adev);
-+ if (rc)
-+ goto err_out;
-+
-+ /* step 2: if that xfer mode isn't PIO, set host DMA timings */
-+ if (xfer_shift[i] != ATA_SHIFT_PIO) {
-+ ata_host_set_dma(ap, adev, xfer_mode[i], xfer_shift[i]);
-+ used_dma = 1;
-+ }
-+
-+ /* In some cases the DMA mode will cause the driver to
-+ update the pio mode to match chip limits. */
-+
-+ /* step 3: update devices' xfer mode */
-+ ata_dev_set_mode(ap, adev);
-+ }
-
- if (ap->flags & ATA_FLAG_PORT_DISABLED)
- return;
-
-+ /*
-+ * Record simplex status. If we selected DMA then the other
-+ * host channels are not permitted to do so.
-+ */
-+
-+ if (used_dma && (ap->host_set->host_set_flags & ATA_HOST_SIMPLEX))
-+ ap->host_set->simplex_claimed = 1;
-+
-+ /*
-+ * Chip specific finalisation
-+ */
-+
- if (ap->ops->post_set_mode)
- ap->ops->post_set_mode(ap);
-
-@@ -2054,6 +2164,12 @@
- * crazy ATAPI devices...
- */
- msleep(150);
-+ /* Before we perform post reset processing we want to see if
-+ the bus shows 0xFF because the odd clown forgets the D7 pulldown
-+ resistor */
-+
-+ if (ata_check_status(ap) == 0xFF)
-+ return 1; /* Positive is failure for some reason */
-
- return ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT);
- }
-@@ -2087,9 +2203,17 @@
- * status is checked. Because waiting for "a while" before
- * checking status is fine, post SRST, we perform this magic
- * delay here as well.
-+ *
-+ * Old drivers/ide uses the 2mS rule and then waits for ready
- */
- msleep(150);
--
-+
-+ /* Before we perform post reset processing we want to see if
-+ the bus shows 0xFF because the odd clown forgets the D7 pulldown
-+ resistor */
-+
-+ if (ata_check_status(ap) == 0xFF)
-+ return 1; /* Positive is failure for some reason */
- ata_bus_post_reset(ap, devmask);
-
- return 0;
-@@ -2204,132 +2328,126 @@
- }
-
- static const char * const ata_dma_blacklist [] = {
-- "WDC AC11000H",
-- "WDC AC22100H",
-- "WDC AC32500H",
-- "WDC AC33100H",
-- "WDC AC31600H",
-- "WDC AC32100H",
-- "WDC AC23200L",
-- "Compaq CRD-8241B",
-- "CRD-8400B",
-- "CRD-8480B",
-- "CRD-8482B",
-- "CRD-84",
-- "SanDisk SDP3B",
-- "SanDisk SDP3B-64",
-- "SANYO CD-ROM CRD",
-- "HITACHI CDR-8",
-- "HITACHI CDR-8335",
-- "HITACHI CDR-8435",
-- "Toshiba CD-ROM XM-6202B",
-- "TOSHIBA CD-ROM XM-1702BC",
-- "CD-532E-A",
-- "E-IDE CD-ROM CR-840",
-- "CD-ROM Drive/F5A",
-- "WPI CDD-820",
-- "SAMSUNG CD-ROM SC-148C",
-- "SAMSUNG CD-ROM SC",
-- "SanDisk SDP3B-64",
-- "ATAPI CD-ROM DRIVE 40X MAXIMUM",
-- "_NEC DV5800A",
-+ "WDC AC11000H", NULL,
-+ "WDC AC22100H", NULL,
-+ "WDC AC32500H", NULL,
-+ "WDC AC33100H", NULL,
-+ "WDC AC31600H", NULL,
-+ "WDC AC32100H", "24.09P07",
-+ "WDC AC23200L", "21.10N21",
-+ "Compaq CRD-8241B", NULL,
-+ "CRD-8400B", NULL,
-+ "CRD-8480B", NULL,
-+ "CRD-8482B", NULL,
-+ "CRD-84", NULL,
-+ "SanDisk SDP3B", NULL,
-+ "SanDisk SDP3B-64", NULL,
-+ "SANYO CD-ROM CRD", NULL,
-+ "HITACHI CDR-8", NULL,
-+ "HITACHI CDR-8335", NULL,
-+ "HITACHI CDR-8435", NULL,
-+ "Toshiba CD-ROM XM-6202B", NULL,
-+ "TOSHIBA CD-ROM XM-1702BC", NULL,
-+ "CD-532E-A", NULL,
-+ "E-IDE CD-ROM CR-840", NULL,
-+ "CD-ROM Drive/F5A", NULL,
-+ "WPI CDD-820", NULL,
-+ "SAMSUNG CD-ROM SC-148C", NULL,
-+ "SAMSUNG CD-ROM SC", NULL,
-+ "SanDisk SDP3B-64", NULL,
-+ "ATAPI CD-ROM DRIVE 40X MAXIMUM",NULL,
-+ "_NEC DV5800A", NULL,
-+ "SAMSUNG CD-ROM SN-124", "N001"
- };
-
--static int ata_dma_blacklisted(const struct ata_device *dev)
-+static int ata_strim(char *s, size_t len)
- {
-- unsigned char model_num[40];
-- char *s;
-- unsigned int len;
-- int i;
--
-- ata_dev_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
-- sizeof(model_num));
-- s = &model_num[0];
-- len = strnlen(s, sizeof(model_num));
-+ len = strnlen(s, len);
-
- /* ATAPI specifies that empty space is blank-filled; remove blanks */
- while ((len > 0) && (s[len - 1] == ' ')) {
- len--;
- s[len] = 0;
- }
-+ return len;
-+}
-
-- for (i = 0; i < ARRAY_SIZE(ata_dma_blacklist); i++)
-- if (!strncmp(ata_dma_blacklist[i], s, len))
-- return 1;
-+static int ata_dma_blacklisted(const struct ata_device *dev)
-+{
-+ unsigned char model_num[40];
-+ unsigned char model_rev[16];
-+ unsigned int nlen, rlen;
-+ int i;
-
-+ ata_dev_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
-+ sizeof(model_num));
-+ ata_dev_id_string(dev->id, model_rev, ATA_ID_FW_REV_OFS,
-+ sizeof(model_rev));
-+ nlen = ata_strim(model_num, sizeof(model_num));
-+ rlen = ata_strim(model_rev, sizeof(model_rev));
-+
-+ for (i = 0; i < ARRAY_SIZE(ata_dma_blacklist); i += 2) {
-+ if (!strncmp(ata_dma_blacklist[i], model_num, nlen)) {
-+ if (ata_dma_blacklist[i+1] == NULL)
-+ return 1;
-+ if (!strncmp(ata_dma_blacklist[i], model_rev, rlen))
-+ return 1;
-+ }
-+ }
- return 0;
- }
-
--static unsigned int ata_get_mode_mask(const struct ata_port *ap, int shift)
-+static unsigned int ata_get_mode_mask(const struct ata_port *ap, struct ata_device *adev, int shift)
- {
-- const struct ata_device *master, *slave;
- unsigned int mask;
-+ struct ata_host_set *hs = ap->host_set;
-+
-+ if (!ata_dev_present(adev))
-+ return 0xFF; /* Drive isn't limiting anything */
-+
-+ if (shift == ATA_SHIFT_PIO) {
-+ u16 tmp_mode = ata_pio_modes(adev);
-+ mask = ap->pio_mask;
-+ mask &= tmp_mode;
-+ }
-
-- master = &ap->device[0];
-- slave = &ap->device[1];
-+ /*
-+ * Enforce simplex rules if host is simplex
-+ */
-
-- assert (ata_dev_present(master) || ata_dev_present(slave));
-+ if (hs->host_set_flags & ATA_HOST_SIMPLEX) {
-+ if (hs->simplex_claimed) {
-+ if (shift != ATA_SHIFT_PIO)
-+ return 0;
-+ }
-+ }
-
- if (shift == ATA_SHIFT_UDMA) {
- mask = ap->udma_mask;
-- if (ata_dev_present(master)) {
-- mask &= (master->id[ATA_ID_UDMA_MODES] & 0xff);
-- if (ata_dma_blacklisted(master)) {
-- mask = 0;
-- ata_pr_blacklisted(ap, master);
-- }
-- }
-- if (ata_dev_present(slave)) {
-- mask &= (slave->id[ATA_ID_UDMA_MODES] & 0xff);
-- if (ata_dma_blacklisted(slave)) {
-- mask = 0;
-- ata_pr_blacklisted(ap, slave);
-- }
-+ mask &= (adev->id[ATA_ID_UDMA_MODES] & 0xff);
-+ if (ata_dma_blacklisted(adev)) {
-+ mask = 0;
-+ ata_pr_blacklisted(ap, adev);
- }
-+ /* 40 pin cable enforcement */
-+ if (ap->cbl == ATA_CBL_PATA40)
-+ mask &= ATA_UDMA_MASK_40C;
- }
- else if (shift == ATA_SHIFT_MWDMA) {
- mask = ap->mwdma_mask;
-- if (ata_dev_present(master)) {
-- mask &= (master->id[ATA_ID_MWDMA_MODES] & 0x07);
-- if (ata_dma_blacklisted(master)) {
-- mask = 0;
-- ata_pr_blacklisted(ap, master);
-- }
-- }
-- if (ata_dev_present(slave)) {
-- mask &= (slave->id[ATA_ID_MWDMA_MODES] & 0x07);
-- if (ata_dma_blacklisted(slave)) {
-- mask = 0;
-- ata_pr_blacklisted(ap, slave);
-- }
-- }
-- }
-- else if (shift == ATA_SHIFT_PIO) {
-- mask = ap->pio_mask;
-- if (ata_dev_present(master)) {
-- /* spec doesn't return explicit support for
-- * PIO0-2, so we fake it
-- */
-- u16 tmp_mode = master->id[ATA_ID_PIO_MODES] & 0x03;
-- tmp_mode <<= 3;
-- tmp_mode |= 0x7;
-- mask &= tmp_mode;
-- }
-- if (ata_dev_present(slave)) {
-- /* spec doesn't return explicit support for
-- * PIO0-2, so we fake it
-- */
-- u16 tmp_mode = slave->id[ATA_ID_PIO_MODES] & 0x03;
-- tmp_mode <<= 3;
-- tmp_mode |= 0x7;
-- mask &= tmp_mode;
-+ mask &= (adev->id[ATA_ID_MWDMA_MODES] & 0x07);
-+ if (ata_dma_blacklisted(adev)) {
-+ mask = 0;
-+ ata_pr_blacklisted(ap, adev);
- }
-- }
-- else {
-- mask = 0xffffffff; /* shut up compiler warning */
-- BUG();
-- }
--
-+ } else if (shift != ATA_SHIFT_PIO)
-+ panic("gmm:bad shift"); /* BUG confuses the compiler */
-+ /*
-+ * Allow the controller to see the proposed mode and
-+ * device data to do any custom filtering rules.
-+ */
-+ if(ap->ops->mode_filter)
-+ mask = ap->ops->mode_filter(ap, adev, mask, shift);
- return mask;
- }
-
-@@ -2349,6 +2467,7 @@
- /**
- * ata_choose_xfer_mode - attempt to find best transfer mode
- * @ap: Port for which an xfer mode will be selected
-+ * @adev: ATA device for which xfer mode is being selected
- * @xfer_mode_out: (output) SET FEATURES - XFER MODE code
- * @xfer_shift_out: (output) bit shift that selects this mode
- *
-@@ -2363,6 +2482,7 @@
- */
-
- static int ata_choose_xfer_mode(const struct ata_port *ap,
-+ struct ata_device *adev,
- u8 *xfer_mode_out,
- unsigned int *xfer_shift_out)
- {
-@@ -2371,7 +2491,7 @@
-
- for (i = 0; i < ARRAY_SIZE(xfer_mode_classes); i++) {
- shift = xfer_mode_classes[i].shift;
-- mask = ata_get_mode_mask(ap, shift);
-+ mask = ata_get_mode_mask(ap, adev, shift);
-
- x = fgb(mask);
- if (x >= 0) {
-@@ -3007,6 +3127,7 @@
- /**
- * ata_mmio_data_xfer - Transfer data by MMIO
- * @ap: port to read/write
-+ * @adev: device to target
- * @buf: data buffer
- * @buflen: buffer length
- * @write_data: read/write
-@@ -3017,8 +3138,8 @@
- * Inherited from caller.
- */
-
--static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf,
-- unsigned int buflen, int write_data)
-+void ata_mmio_data_xfer(struct ata_port *ap, struct ata_device *adev,
-+ unsigned char *buf, unsigned int buflen, int write_data)
- {
- unsigned int i;
- unsigned int words = buflen >> 1;
-@@ -3052,6 +3173,7 @@
- /**
- * ata_pio_data_xfer - Transfer data by PIO
- * @ap: port to read/write
-+ * @adev: device to target
- * @buf: data buffer
- * @buflen: buffer length
- * @write_data: read/write
-@@ -3062,11 +3184,11 @@
- * Inherited from caller.
- */
-
--static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf,
-- unsigned int buflen, int write_data)
-+void ata_pio_data_xfer(struct ata_port *ap, struct ata_device *adev,
-+ unsigned char *buf, unsigned int buflen, int write_data)
- {
- unsigned int words = buflen >> 1;
--
-+
- /* Transfer multiple of 2 bytes */
- if (write_data)
- outsw(ap->ioaddr.data_addr, buf, words);
-@@ -3089,36 +3211,55 @@
- }
-
- /**
-- * ata_data_xfer - Transfer data from/to the data register.
-+ * ata_pio_data_xfer_noirq - Transfer data from/to the data register.
- * @ap: port to read/write
-+ * @adev: device to target
- * @buf: data buffer
- * @buflen: buffer length
- * @do_write: read/write
- *
-- * Transfer data from/to the device data register.
-+ * Transfer data from/to the device data register. This variant
-+ * ensures local IRQs do not interrupt the data stream and this
-+ * is needed for some controllers.
- *
- * LOCKING:
- * Inherited from caller.
- */
-
--static void ata_data_xfer(struct ata_port *ap, unsigned char *buf,
-- unsigned int buflen, int do_write)
-+void ata_pio_data_xfer_noirq(struct ata_port *ap, struct ata_device *adev,
-+ unsigned char *buf, unsigned int buflen, int do_write)
- {
- /* Make the crap hardware pay the costs not the good stuff */
-- if (unlikely(ap->flags & ATA_FLAG_IRQ_MASK)) {
-- unsigned long flags;
-- local_irq_save(flags);
-- if (ap->flags & ATA_FLAG_MMIO)
-- ata_mmio_data_xfer(ap, buf, buflen, do_write);
-- else
-- ata_pio_data_xfer(ap, buf, buflen, do_write);
-- local_irq_restore(flags);
-- } else {
-- if (ap->flags & ATA_FLAG_MMIO)
-- ata_mmio_data_xfer(ap, buf, buflen, do_write);
-- else
-- ata_pio_data_xfer(ap, buf, buflen, do_write);
-- }
-+ unsigned long flags;
-+ local_irq_save(flags);
-+ ata_pio_data_xfer(ap, adev, buf, buflen, do_write);
-+ local_irq_restore(flags);
-+}
-+
-+/**
-+ * ata_mmio_data_xfer_noirq - Transfer data from/to the data register.
-+ * @ap: address to read/write
-+ * @adev: device to target
-+ * @buf: data buffer
-+ * @buflen: buffer length
-+ * @do_write: read/write
-+ *
-+ * Transfer data from/to the device data register. This variant
-+ * ensures local IRQs do not interrupt the data stream and this
-+ * is needed for some controllers.
-+ *
-+ * LOCKING:
-+ * Inherited from caller.
-+ */
-+
-+void ata_mmio_data_xfer_noirq(struct ata_port *ap, struct ata_device *adev,
-+ unsigned char *buf, unsigned int buflen, int do_write)
-+{
-+ /* Make the crap hardware pay the costs not the good stuff */
-+ unsigned long flags;
-+ local_irq_save(flags);
-+ ata_mmio_data_xfer(ap, adev, buf, buflen, do_write);
-+ local_irq_restore(flags);
- }
-
- /**
-@@ -3164,7 +3305,7 @@
-
- /* do the actual data transfer */
- do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
-- ata_data_xfer(ap, buf, ATA_SECT_SIZE, do_write);
-+ ap->ops->data_xfer(ap, qc->dev, buf, ATA_SECT_SIZE, do_write);
-
- kunmap(page);
- }
-@@ -3211,7 +3352,7 @@
- ap->id, bytes);
-
- for (i = 0; i < words; i++)
-- ata_data_xfer(ap, (unsigned char*)pad_buf, 2, do_write);
-+ ap->ops->data_xfer(ap, qc->dev, (unsigned char*)pad_buf, 2, do_write);
-
- ap->hsm_task_state = HSM_ST_LAST;
- return;
-@@ -3246,7 +3387,7 @@
- DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
-
- /* do the actual data transfer */
-- ata_data_xfer(ap, buf, count, do_write);
-+ ap->ops->data_xfer(ap, qc->dev, buf, count, do_write);
-
- kunmap(page);
-
-@@ -3955,14 +4096,15 @@
-
- void ata_bmdma_irq_clear(struct ata_port *ap)
- {
-- if (ap->flags & ATA_FLAG_MMIO) {
-- void __iomem *mmio = ((void __iomem *) ap->ioaddr.bmdma_addr) + ATA_DMA_STATUS;
-- writeb(readb(mmio), mmio);
-- } else {
-- unsigned long addr = ap->ioaddr.bmdma_addr + ATA_DMA_STATUS;
-- outb(inb(addr), addr);
-- }
--
-+ if (ap->ioaddr.bmdma_addr) {
-+ if (ap->flags & ATA_FLAG_MMIO) {
-+ void __iomem *mmio = ((void __iomem *) ap->ioaddr.bmdma_addr) + ATA_DMA_STATUS;
-+ writeb(readb(mmio), mmio);
-+ } else {
-+ unsigned long addr = ap->ioaddr.bmdma_addr + ATA_DMA_STATUS;
-+ outb(inb(addr), addr);
-+ }
-+ }
- }
-
-
-@@ -4093,9 +4235,9 @@
-
- #ifdef ATA_IRQ_TRAP
- if ((ap->stats.idle_irq % 1000) == 0) {
-- handled = 1;
- ata_irq_ack(ap, 0); /* debug trap */
- printk(KERN_WARNING "ata%d: irq trap\n", ap->id);
-+ return 1;
- }
- #endif
- return 0; /* irq not handled */
-@@ -4201,12 +4343,12 @@
- */
- spin_lock_irqsave(&ap->host_set->lock, flags);
- ap->flags &= ~ATA_FLAG_NOINTR;
-- ata_data_xfer(ap, qc->cdb, ap->cdb_len, 1);
-+ ap->ops->data_xfer(ap, qc->dev, qc->cdb, ap->cdb_len, 1);
- if (qc->tf.protocol == ATA_PROT_ATAPI_DMA)
- ap->ops->bmdma_start(qc); /* initiate bmdma */
- spin_unlock_irqrestore(&ap->host_set->lock, flags);
- } else {
-- ata_data_xfer(ap, qc->cdb, ap->cdb_len, 1);
-+ ap->ops->data_xfer(ap, qc->dev, qc->cdb, ap->cdb_len, 1);
-
- /* PIO commands are handled by polling */
- ap->hsm_task_state = HSM_ST;
-@@ -4512,7 +4654,7 @@
- * Number of ports registered. Zero on error (no ports registered).
- */
-
--int ata_device_add(const struct ata_probe_ent *ent)
-+int ata_device_add(struct ata_probe_ent *ent)
- {
- unsigned int count = 0, i;
- struct device *dev = ent->dev;
-@@ -4532,6 +4674,9 @@
- host_set->mmio_base = ent->mmio_base;
- host_set->private_data = ent->private_data;
- host_set->ops = ent->port_ops;
-+ host_set->host_set_flags = ent->host_set_flags;
-+
-+ ent->host_set = host_set;
-
- /* register each port bound to this device */
- for (i = 0; i < ent->n_ports; i++) {
-@@ -4543,6 +4688,14 @@
- goto err_out;
-
- host_set->ports[i] = ap;
-+
-+ /* Tidy up if we have no bus master base
-+ Not sure this is the right spot to do it */
-+ if (ap->ioaddr.bmdma_addr == 0) {
-+ ap->udma_mask = 0;
-+ ap->mwdma_mask = 0;
-+ }
-+
- xfer_mode_mask =(ap->udma_mask << ATA_SHIFT_UDMA) |
- (ap->mwdma_mask << ATA_SHIFT_MWDMA) |
- (ap->pio_mask << ATA_SHIFT_PIO);
-@@ -4559,6 +4712,7 @@
- ent->irq);
-
- ata_chk_status(ap);
-+ /* This last call probably should be conditional on bmdma */
- host_set->ops->irq_clear(ap);
- count++;
- }
-@@ -4612,7 +4766,8 @@
- ata_scsi_scan_host(ap);
- }
-
-- dev_set_drvdata(dev, host_set);
-+ if(dev)
-+ dev_set_drvdata(dev, host_set);
-
- VPRINTK("EXIT, returning %u\n", ent->n_ports);
- return ent->n_ports; /* success */
-@@ -4786,6 +4941,7 @@
- {
- struct ata_probe_ent *probe_ent =
- ata_probe_ent_alloc(pci_dev_to_dev(pdev), port[0]);
-+ unsigned long bmdma;
- int p = 0;
-
- if (!probe_ent)
-@@ -4800,7 +4956,13 @@
- probe_ent->port[p].altstatus_addr =
- probe_ent->port[p].ctl_addr =
- pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS;
-- probe_ent->port[p].bmdma_addr = pci_resource_start(pdev, 4);
-+ bmdma = pci_resource_start(pdev, 4);
-+
-+ if (bmdma) {
-+ if (inb(bmdma + 2) & 0x80)
-+ probe_ent->host_set_flags |= ATA_HOST_SIMPLEX;
-+ probe_ent->port[p].bmdma_addr = bmdma;
-+ }
- ata_std_ports(&probe_ent->port[p]);
- p++;
- }
-@@ -4810,7 +4972,14 @@
- probe_ent->port[p].altstatus_addr =
- probe_ent->port[p].ctl_addr =
- pci_resource_start(pdev, 3) | ATA_PCI_CTL_OFS;
-- probe_ent->port[p].bmdma_addr = pci_resource_start(pdev, 4) + 8;
-+ bmdma = pci_resource_start(pdev, 4);
-+
-+ if (bmdma) {
-+ bmdma += 8;
-+ if(inb(bmdma + 2) & 0x80)
-+ probe_ent->host_set_flags |= ATA_HOST_SIMPLEX;
-+ probe_ent->port[p].bmdma_addr = bmdma;
-+ }
- ata_std_ports(&probe_ent->port[p]);
- p++;
- }
-@@ -4822,6 +4991,7 @@
- static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev, struct ata_port_info *port, int port_num)
- {
- struct ata_probe_ent *probe_ent;
-+ unsigned long bmdma;
-
- probe_ent = ata_probe_ent_alloc(pci_dev_to_dev(pdev), port);
- if (!probe_ent)
-@@ -4847,7 +5017,13 @@
- probe_ent->port[0].ctl_addr = 0x376;
- break;
- }
-- probe_ent->port[0].bmdma_addr = pci_resource_start(pdev, 4) + 8 * port_num;
-+ bmdma = pci_resource_start(pdev, 4);
-+ if(bmdma != 0) {
-+ bmdma += 8 * port_num;
-+ probe_ent->port[0].bmdma_addr = bmdma;
-+ if (inb(bmdma + 2) & 0x80)
-+ probe_ent->host_set_flags |= ATA_HOST_SIMPLEX;
-+ }
- ata_std_ports(&probe_ent->port[0]);
- return probe_ent;
- }
-@@ -5088,6 +5264,33 @@
- pci_set_master(pdev);
- return 0;
- }
-+
-+/**
-+ * ata_pci_clear_simplex - attempt to kick device out of simplex
-+ * @pdev: PCI device
-+ *
-+ * Some PCI ATA devices report simplex mode but in fact can be told to
-+ * enter non simplex mode. This implements the neccessary logic to
-+ * perform the task on such devices. Calling it on other devices will
-+ * have -undefined- behaviour.
-+ */
-+
-+int ata_pci_clear_simplex(struct pci_dev *pdev)
-+{
-+ unsigned long bmdma = pci_resource_start(pdev, 4);
-+ u8 simplex;
-+
-+ if (bmdma == 0)
-+ return -ENOENT;
-+
-+ simplex = inb(bmdma + 0x02);
-+ outb(simplex & 0x60, bmdma + 0x02);
-+ simplex = inb(bmdma + 0x02);
-+ if (simplex & 0x80)
-+ return -EOPNOTSUPP;
-+ return 0;
-+}
-+
- #endif /* CONFIG_PCI */
-
-
-@@ -5165,6 +5368,10 @@
- EXPORT_SYMBOL_GPL(ata_bmdma_irq_clear);
- EXPORT_SYMBOL_GPL(ata_bmdma_status);
- EXPORT_SYMBOL_GPL(ata_bmdma_stop);
-+EXPORT_SYMBOL_GPL(ata_mmio_data_xfer);
-+EXPORT_SYMBOL_GPL(ata_pio_data_xfer);
-+EXPORT_SYMBOL_GPL(ata_mmio_data_xfer_noirq);
-+EXPORT_SYMBOL_GPL(ata_pio_data_xfer_noirq);
- EXPORT_SYMBOL_GPL(ata_port_probe);
- EXPORT_SYMBOL_GPL(sata_phy_reset);
- EXPORT_SYMBOL_GPL(__sata_phy_reset);
-@@ -5182,6 +5389,7 @@
- EXPORT_SYMBOL_GPL(ata_dev_config);
- EXPORT_SYMBOL_GPL(ata_scsi_simulate);
-
-+EXPORT_SYMBOL_GPL(ata_dev_pair);
- EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
- EXPORT_SYMBOL_GPL(ata_timing_compute);
- EXPORT_SYMBOL_GPL(ata_timing_merge);
-@@ -5194,6 +5402,8 @@
- EXPORT_SYMBOL_GPL(ata_pci_remove_one);
- EXPORT_SYMBOL_GPL(ata_pci_device_suspend);
- EXPORT_SYMBOL_GPL(ata_pci_device_resume);
-+EXPORT_SYMBOL_GPL(ata_pci_clear_simplex);
-+
- #endif /* CONFIG_PCI */
-
- EXPORT_SYMBOL_GPL(ata_device_suspend);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/libata-scsi.c linux-2.6.16-rc6/drivers/scsi/libata-scsi.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/libata-scsi.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/libata-scsi.c 2006-03-13 14:03:15.000000000 +0000
-@@ -511,13 +511,11 @@
- printk(KERN_WARNING "ata%u: no sense translation for status: 0x%02x\n",
- id, drv_stat);
-
-- /* For our last chance pick, use medium read error because
-- * it's much more common than an ATA drive telling you a write
-- * has failed.
-- */
-- *sk = MEDIUM_ERROR;
-- *asc = 0x11; /* "unrecovered read error" */
-- *ascq = 0x04; /* "auto-reallocation failed" */
-+ /* We need a sensible error return here, which is tricky, and one
-+ that won't cause people to do things like return a disk wrongly */
-+ *sk = ABORTED_COMMAND;
-+ *asc = 0x00;
-+ *ascq = 0x00;
-
- translate_done:
- printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x to "
-@@ -1144,14 +1142,20 @@
- if ((block >> 48) || (n_block > 65536))
- goto out_of_range;
-
-- /* use LBA48 */
-- tf->flags |= ATA_TFLAG_LBA48;
--
-- tf->hob_nsect = (n_block >> 8) & 0xff;
--
-- tf->hob_lbah = (block >> 40) & 0xff;
-- tf->hob_lbam = (block >> 32) & 0xff;
-- tf->hob_lbal = (block >> 24) & 0xff;
-+ /* The request -may- be too large for LBA28. */
-+ if ((block >> 28) || (n_block > 256)) {
-+ /* use LBA48 */
-+ tf->flags |= ATA_TFLAG_LBA48;
-+
-+ tf->hob_nsect = (n_block >> 8) & 0xff;
-+
-+ tf->hob_lbah = (block >> 40) & 0xff;
-+ tf->hob_lbam = (block >> 32) & 0xff;
-+ tf->hob_lbal = (block >> 24) & 0xff;
-+ } else {
-+ /* Issue LBA28 whenever we can as it is faster for PATA */
-+ tf->device |= (block >> 24) & 0xf;
-+ }
- } else {
- /* use LBA28 */
-
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/Makefile linux-2.6.16-rc6/drivers/scsi/Makefile
---- linux.vanilla-2.6.16-rc6/drivers/scsi/Makefile 2006-03-13 14:00:13.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/Makefile 2006-02-17 18:20:44.000000000 +0000
-@@ -139,6 +139,42 @@
- obj-$(CONFIG_SCSI_SATA_MV) += libata.o sata_mv.o
- obj-$(CONFIG_SCSI_PDC_ADMA) += libata.o pdc_adma.o
-
-+obj-$(CONFIG_SCSI_PATA_ALI) += libata.o pata_ali.o
-+obj-$(CONFIG_SCSI_PATA_AMD) += libata.o pata_amd.o
-+obj-$(CONFIG_SCSI_PATA_ARTOP) += libata.o pata_artop.o
-+obj-$(CONFIG_SCSI_PATA_ATIIXP) += libata.o pata_atiixp.o
-+obj-$(CONFIG_SCSI_PATA_CMD64X) += libata.o pata_cmd64x.o
-+obj-$(CONFIG_SCSI_PATA_CS5520) += libata.o pata_cs5520.o
-+obj-$(CONFIG_SCSI_PATA_CS5530) += libata.o pata_cs5530.o
-+obj-$(CONFIG_SCSI_PATA_CS5535) += libata.o pata_cs5535.o
-+obj-$(CONFIG_SCSI_PATA_CYPRESS) += libata.o pata_cypress.o
-+obj-$(CONFIG_SCSI_PATA_EFAR) += libata.o pata_efar.o
-+obj-$(CONFIG_SCSI_PATA_ISAPNP) += libata.o pata_isapnp.o
-+obj-$(CONFIG_SCSI_PATA_HPT37X) += libata.o pata_hpt37x.o
-+obj-$(CONFIG_SCSI_PATA_HPT3X2N) += libata.o pata_hpt3x2n.o
-+obj-$(CONFIG_SCSI_PATA_HPT3X3) += libata.o pata_hpt34x.o
-+obj-$(CONFIG_SCSI_PATA_IT8172) += libata.o pata_it8172.o
-+obj-$(CONFIG_SCSI_PATA_IT821X) += libata.o pata_it821x.o
-+obj-$(CONFIG_SCSI_PATA_MPIIX) += libata.o pata_mpiix.o
-+obj-$(CONFIG_SCSI_PATA_NETCELL) += libata.o pata_netcell.o
-+obj-$(CONFIG_SCSI_PATA_NS87410) += libata.o pata_ns87410.o
-+obj-$(CONFIG_SCSI_PATA_OLDPIIX) += libata.o pata_oldpiix.o
-+obj-$(CONFIG_SCSI_PATA_OPTI) += libata.o pata_opti.o
-+obj-$(CONFIG_SCSI_PATA_PCMCIA) += libata.o pata_pcmcia.o
-+obj-$(CONFIG_SCSI_PATA_PDC_OLD) += libata.o pata_pdc202xx_old.o
-+obj-$(CONFIG_SCSI_PATA_QDI) += libata.o pata_qdi.o
-+obj-$(CONFIG_SCSI_PATA_RADISYS) += libata.o pata_radisys.o
-+obj-$(CONFIG_SCSI_PATA_RZ1000) += libata.o pata_rz1000.o
-+obj-$(CONFIG_SCSI_PATA_SERVERWORKS) += libata.o pata_serverworks.o
-+obj-$(CONFIG_SCSI_PATA_SC1200) += libata.o pata_sc1200.o
-+obj-$(CONFIG_SCSI_PATA_SIL680) += libata.o pata_sil680.o
-+obj-$(CONFIG_SCSI_PATA_SIS) += libata.o pata_sis.o
-+obj-$(CONFIG_SCSI_PATA_TRIFLEX) += libata.o pata_triflex.o
-+obj-$(CONFIG_SCSI_PATA_VIA) += libata.o pata_via.o
-+obj-$(CONFIG_SCSI_PATA_WINBOND) += libata.o pata_sl82c105.o
-+obj-$(CONFIG_SCSI_ATA_GENERIC) += libata.o ata_generic.o
-+obj-$(CONFIG_SCSI_PATA_LEGACY) += libata.o pata_legacy.o
-+
- obj-$(CONFIG_ARM) += arm/
-
- obj-$(CONFIG_CHR_DEV_ST) += st.o
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_ali.c linux-2.6.16-rc6/drivers/scsi/pata_ali.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_ali.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_ali.c 2006-02-27 16:59:35.000000000 +0000
-@@ -0,0 +1,624 @@
-+/*
-+ * ata-ali.c - ALI 15x3 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based in part upon
-+ * linux/drivers/ide/pci/alim15x3.c Version 0.17 2003/01/02
-+ *
-+ * Copyright (C) 1998-2000 Michel Aubry, Maintainer
-+ * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer
-+ * Copyright (C) 1999-2000 CJ, cjtsai@ali.com.tw, Maintainer
-+ *
-+ * Copyright (C) 1998-2000 Andre Hedrick (andre@linux-ide.org)
-+ * May be copied or modified under the terms of the GNU General Public License
-+ * Copyright (C) 2002 Alan Cox <alan@redhat.com>
-+ * ALi (now ULi M5228) support by Clear Zhang <Clear.Zhang@ali.com.tw>
-+ *
-+ * Documentation
-+ * Chipset documentation available under NDA only
-+ *
-+ * TODO/CHECK
-+ * Cannot have ATAPI on both master & slave for rev < c2 (???) but
-+ * otherwise should do atapi DMA.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "ali"
-+#define DRV_VERSION "0.3"
-+
-+/**
-+ * ali_c2_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection for C2 and later revisions
-+ */
-+
-+static int ali_c2_cable_detect(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 ata66;
-+
-+ /* Certain laptops use short but suitable cables and don't
-+ implement the detect logic */
-+
-+ /* Fujitsu P2000 */
-+ if (pdev->subsystem_vendor == 0x10CF && pdev->subsystem_device == 0x10AF)
-+ return ATA_CBL_PATA80;
-+
-+ /* Host view cable detect 0x4A bit 0 primary bit 1 secondary
-+ Bit set for 40 pin */
-+ pci_read_config_byte(pdev, 0x4A, &ata66);
-+ if (ata66 & (1 << ap->hard_port_no))
-+ return ATA_CBL_PATA40;
-+ else
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * ali_early_phy_reset - reset for eary chip
-+ * @ap: ATA port
-+ *
-+ * Handle the reset callback for the later chips with cable detect
-+ */
-+
-+static void ali_c2_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ali_c2_cable_detect(ap);
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * ali_early_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection for older chipsets. This turns out to be
-+ * rather easy to implement
-+ */
-+
-+static int ali_early_cable_detect(struct ata_port *ap) {
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * ali_early_phy_reset - reset for eary chip
-+ * @ap: ATA port
-+ *
-+ * Handle the reset callback for the early (pre cable detect) chips.
-+ */
-+
-+static void ali_early_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ali_early_cable_detect(ap);
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * ali_20_filter - filter for earlier ALI DMA
-+ * @ap: ALi ATA port
-+ * @adev: attached device
-+ *
-+ * Ensure that we do not do DMA on CD devices. We may be able to
-+ * fix that later on. Also ensure we do not do UDMA on WDC drives
-+ */
-+
-+static unsigned int ali_20_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ char model_num[40];
-+ /* No DMA on CD for now */
-+ if (adev->class != ATA_DEV_ATA && shift != ATA_SHIFT_PIO)
-+ return 0;
-+
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+
-+ ata_dev_id_string(adev->id, model_num, ATA_ID_PROD_OFS, sizeof(model_num));
-+ if (strstr(model_num, "WDC"))
-+ return 0;
-+ return mask;
-+}
-+
-+/**
-+ * ali_fifo_control - FIFO manager
-+ * @ap: ALi channel to control
-+ * @adev: device for FIFO control
-+ * @on: 0 for off 1 for on
-+ *
-+ * Enable or disable the FIFO on a given device. Because of the way the
-+ * ALi FIFO works it provides a boost on ATA disk but can be confused by
-+ * ATAPI and we must therefore manage it.
-+ */
-+
-+static void ali_fifo_control(struct ata_port *ap, struct ata_device *adev, int on)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int pio_fifo = 0x54 + ap->hard_port_no;
-+ u8 fifo;
-+ int shift = 4 * adev->devno;
-+
-+ /* Bits 3:2 (7:6 for slave) control the PIO. 00 is off 01
-+ is on. The FIFO must not be used for ATAPI. We preserve
-+ BIOS set thresholds */
-+ pci_read_config_byte(pdev, pio_fifo, &fifo);
-+ fifo &= ~(0x0C << shift);
-+ if (on)
-+ fifo |= (on << shift);
-+ pci_write_config_byte(pdev, pio_fifo, fifo);
-+}
-+
-+/**
-+ * ali_program_modes - load mode registers
-+ * @ap: ALi channel to load
-+ * @adev: Device the timing is for
-+ * @cmd: Command timing
-+ * @data: Data timing
-+ * @udma: UDMA timing or zero for off
-+ *
-+ * Loads the timing registers for cmd/data and disable UDMA if
-+ * udma is zero. If udma is set then load and enable the UDMA
-+ * timing but do not touch the command/data timing.
-+ */
-+
-+static void ali_program_modes(struct ata_port *ap, struct ata_device *adev, struct ata_timing *t, u8 ultra)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int cas = 0x58 + 4 * ap->hard_port_no; /* Command timing */
-+ int cbt = 0x59 + 4 * ap->hard_port_no; /* Command timing */
-+ int drwt = 0x5A + 4 * ap->hard_port_no + adev->devno; /* R/W timing */
-+ int udmat = 0x56 + ap->hard_port_no; /* UDMA timing */
-+ int shift = 4 * adev->devno;
-+ u8 udma;
-+
-+ if (t != NULL) {
-+ t->setup = FIT(t->setup, 1, 8) & 7;
-+ t->act8b = FIT(t->act8b, 1, 8) & 7;
-+ t->rec8b = FIT(t->rec8b, 1, 16) & 15;
-+ t->active = FIT(t->active, 1, 8) & 7;
-+ t->recover = FIT(t->recover, 1, 16) & 15;
-+
-+ pci_write_config_byte(pdev, cas, t->setup);
-+ pci_write_config_byte(pdev, cbt, (t->act8b << 4) | t->rec8b);
-+ pci_write_config_byte(pdev, drwt, (t->active << 4) | t->recover);
-+ }
-+
-+ /* Set up the UDMA enable */
-+ pci_read_config_byte(pdev, udmat, &udma);
-+ udma &= ~(0x0F << shift);
-+ udma |= ultra << shift;
-+ pci_write_config_byte(pdev, udmat, udma);
-+}
-+
-+/**
-+ * ali_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the ALi registers for PIO mode. FIXME: add timings for
-+ * PIO5.
-+ */
-+
-+static void ali_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+ struct ata_timing t;
-+ unsigned long T = 1000000000 / 33333; /* PCI clock based */
-+
-+ ata_timing_compute(adev, adev->pio_mode, &t, T, 1);
-+ if (pair) {
-+ struct ata_timing p;
-+ ata_timing_compute(pair, pair->pio_mode, &p, T, 1);
-+ ata_timing_merge(&p, &t, &t, ATA_TIMING_SETUP|ATA_TIMING_8BIT);
-+ if (pair->dma_mode) {
-+ ata_timing_compute(pair, pair->dma_mode, &p, T, 1);
-+ ata_timing_merge(&p, &t, &t, ATA_TIMING_SETUP|ATA_TIMING_8BIT);
-+ }
-+ }
-+
-+ /* PIO FIFO is only permitted on ATA disk */
-+ if (adev->class != ATA_DEV_ATA)
-+ ali_fifo_control(ap, adev, 0);
-+ ali_program_modes(ap, adev, &t, 0);
-+ if (adev->class == ATA_DEV_ATA)
-+ ali_fifo_control(ap, adev, 0x04);
-+
-+}
-+
-+/**
-+ * ali_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * FIXME: MWDMA timings
-+ */
-+
-+static void ali_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u8 udma_timing[7] = { 0xC, 0xB, 0xA, 0x9, 0x8, 0xF, 0xD };
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+ struct ata_timing t;
-+ unsigned long T = 1000000000 / 33333; /* PCI clock based */
-+
-+
-+ if (adev->class == ATA_DEV_ATA)
-+ ali_fifo_control(ap, adev, 0x08);
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ ali_program_modes(ap, adev, NULL, udma_timing[adev->dma_mode - XFER_UDMA_0]);
-+ } else {
-+ ata_timing_compute(adev, adev->dma_mode, &t, T, 1);
-+ if (pair) {
-+ struct ata_timing p;
-+ ata_timing_compute(pair, pair->pio_mode, &p, T, 1);
-+ ata_timing_merge(&p, &t, &t, ATA_TIMING_SETUP|ATA_TIMING_8BIT);
-+ if (pair->dma_mode) {
-+ ata_timing_compute(pair, pair->dma_mode, &p, T, 1);
-+ ata_timing_merge(&p, &t, &t, ATA_TIMING_SETUP|ATA_TIMING_8BIT);
-+ }
-+ }
-+ ali_program_modes(ap, adev, &t, 0);
-+ }
-+}
-+
-+/**
-+ * ali_lock_sectors - Keep older devices to 255 sector mode
-+ * @ap: ATA port
-+ * @adev: Device
-+ *
-+ * Called during the bus probe for each device that is found. We use
-+ * this call to lock the sector count of the device to 255 or less on
-+ * older ALi controllers. If we didn't do this then large I/O's would
-+ * require LBA48 commands which the older ALi requires are issued by
-+ * slower PIO methods
-+ */
-+
-+static void ali_lock_sectors(struct ata_port *ap, struct ata_device *adev)
-+{
-+ if(ap->host->max_sectors > 255) {
-+ ap->host->max_sectors = 255;
-+ ap->host->hostt->max_sectors = 255;
-+ }
-+ adev->flags |= ATA_DFLAG_LOCK_SECTORS;
-+}
-+
-+static struct scsi_host_template ali_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ /* Keep LBA28 counts so large I/O's don't turn LBA48 and PIO
-+ with older controllers. Not locked so will grow on C5 or later */
-+ .max_sectors = 255,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+/*
-+ * Port operations for PIO only ALi
-+ */
-+
-+static struct ata_port_operations ali_early_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = ali_set_piomode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = ali_early_phy_reset,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Port operations for DMA capable ALi without cable
-+ * detect
-+ */
-+static struct ata_port_operations ali_20_port_ops = {
-+ .port_disable = ata_port_disable,
-+
-+ .set_piomode = ali_set_piomode,
-+ .set_dmamode = ali_set_dmamode,
-+ .mode_filter = ali_20_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+ .dev_config = ali_lock_sectors,
-+
-+ .phy_reset = ali_early_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Port operations for DMA capable ALi with cable detect
-+ */
-+static struct ata_port_operations ali_c2_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = ali_set_piomode,
-+ .set_dmamode = ali_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+ .dev_config = ali_lock_sectors,
-+
-+ .phy_reset = ali_c2_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Port operations for DMA capable ALi with cable detect and LBA48
-+ */
-+static struct ata_port_operations ali_c5_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = ali_set_piomode,
-+ .set_dmamode = ali_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = ali_c2_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * ali_init_one - discovery callback
-+ * @pdev: PCI device ID
-+ * @id: PCI table info
-+ *
-+ * An ALi IDE interface has been discovered. Figure out what revision
-+ * and perform configuration work before handing it to the ATA layer
-+ */
-+
-+static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info_early = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .port_ops = &ali_early_port_ops
-+ };
-+ /* Revision 0x20 added DMA */
-+ static struct ata_port_info info_20 = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
-+ .pio_mask = 0x1f,
-+ /*.mwdma_mask = 0x07,*/
-+ .port_ops = &ali_20_port_ops
-+ };
-+ /* Revision 0x20 with support logic added UDMA */
-+ static struct ata_port_info info_20_udma = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
-+ .pio_mask = 0x1f,
-+ /*.mwdma_mask = 0x07, */
-+ .udma_mask = 0x07, /* UDMA33 */
-+ .port_ops = &ali_20_port_ops
-+ };
-+ /* Revision 0xC2 adds UDMA66 */
-+ static struct ata_port_info info_c2 = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
-+ .pio_mask = 0x1f,
-+ /*.mwdma_mask = 0x07, */
-+ .udma_mask = 0x1f,
-+ .port_ops = &ali_c2_port_ops
-+ };
-+ /* Revision 0xC3 is UDMA100 */
-+ static struct ata_port_info info_c3 = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
-+ .pio_mask = 0x1f,
-+ /* .mwdma_mask = 0x07, */
-+ .udma_mask = 0x3f,
-+ .port_ops = &ali_c2_port_ops
-+ };
-+ /* Revision 0xC4 is UDMA133 */
-+ static struct ata_port_info info_c4 = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_PIO_LBA48,
-+ .pio_mask = 0x1f,
-+ /* .mwdma_mask = 0x07, */
-+ .udma_mask = 0x7f,
-+ .port_ops = &ali_c2_port_ops
-+ };
-+ /* Revision 0xC5 is UDMA133 with LBA48 DMA */
-+ static struct ata_port_info info_c5 = {
-+ .sht = &ali_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ /* .mwdma_mask = 0x07, */
-+ .udma_mask = 0x7f,
-+ .port_ops = &ali_c5_port_ops
-+ };
-+
-+ static struct ata_port_info *port_info[2];
-+ u8 rev, tmp;
-+ struct pci_dev *north, *isa_bridge;
-+
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
-+
-+ /*
-+ * The chipset revision selects the driver operations and
-+ * mode data.
-+ */
-+
-+ if (rev < 0x20) {
-+ port_info[0] = port_info[1] = &info_early;
-+ } else if (rev < 0xC2) {
-+ /* 1543-E/F, 1543C-C, 1543C-D, 1543C-E */
-+ pci_read_config_byte(pdev, 0x4B, &tmp);
-+ /* Clear CD-ROM DMA write bit */
-+ tmp &= 0x7F;
-+ pci_write_config_byte(pdev, 0x4B, tmp);
-+ port_info[0] = port_info[1] = &info_20;
-+ } else if (rev == 0xC2) {
-+ port_info[0] = port_info[1] = &info_c2;
-+ } else if (rev == 0xC3) {
-+ port_info[0] = port_info[1] = &info_c3;
-+ } else if (rev == 0xC4) {
-+ port_info[0] = port_info[1] = &info_c4;
-+ } else
-+ port_info[0] = port_info[1] = &info_c5;
-+
-+ if (rev >= 0xC2) {
-+ /* Enable cable detection logic */
-+ pci_read_config_byte(pdev, 0x4B, &tmp);
-+ pci_write_config_byte(pdev, 0x4B, tmp | 0x08);
-+ }
-+
-+ north = pci_get_slot(pdev->bus, PCI_DEVFN(0,0));
-+ isa_bridge = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
-+
-+ if (north && north->vendor == PCI_VENDOR_ID_AL) {
-+ /* Configure the ALi bridge logic. For non ALi rely on BIOS.
-+ Set the south bridge enable bit */
-+ pci_read_config_byte(isa_bridge, 0x79, &tmp);
-+ if (rev == 0xC2)
-+ pci_write_config_byte(isa_bridge, 0x79, tmp | 0x04);
-+ else if (rev > 0xC2)
-+ pci_write_config_byte(isa_bridge, 0x79, tmp | 0x02);
-+ }
-+
-+ if (rev >= 0x20) {
-+ if (rev < 0xC2) {
-+ /* Are we paired with a UDMA capable chip */
-+ pci_read_config_byte(isa_bridge, 0x5E, &tmp);
-+ if ((tmp & 0x1E) == 0x12)
-+ port_info[0] = port_info[1] = &info_20_udma;
-+ }
-+ /*
-+ * CD_ROM DMA on (0x53 bit 0). Enable this even if we want
-+ * to use PIO. 0x53 bit 1 (rev 20 only) - enable FIFO control
-+ * via 0x54/55.
-+ */
-+ pci_read_config_byte(pdev, 0x53, &tmp);
-+ if (rev == 0x20)
-+ tmp &= ~0x02;
-+ tmp |= 0x01; /* CD_ROM enable for DMA */
-+ pci_write_config_byte(pdev, 0x53, tmp);
-+ }
-+
-+ pci_dev_put(isa_bridge);
-+ pci_dev_put(north);
-+
-+ ata_pci_clear_simplex(pdev);
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static struct pci_device_id ali[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5228), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5229), },
-+ { 0, },
-+};
-+
-+static struct pci_driver ali_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = ali,
-+ .probe = ali_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init ali_init(void)
-+{
-+ return pci_register_driver(&ali_pci_driver);
-+}
-+
-+
-+static void __exit ali_exit(void)
-+{
-+ pci_unregister_driver(&ali_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for ALi PATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, ali);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ali_init);
-+module_exit(ali_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_amd.c linux-2.6.16-rc6/drivers/scsi/pata_amd.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_amd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_amd.c 2006-02-16 15:37:39.000000000 +0000
-@@ -0,0 +1,650 @@
-+/*
-+ * pata_amd.c - AMD PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based on pata-sil680. Errata information is taken from data sheets
-+ * and the amd74xx.c driver by Vojtech Pavlik. Nvidia SATA devices are
-+ * claimed by sata-nv.c.
-+ *
-+ * TODO:
-+ * Nvidia support here or seperated ?
-+ * Debug cable detect
-+ * Variable system clock when/if it makes sense
-+ * Power management on ports
-+ *
-+ *
-+ * Documentation publically available.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_amd"
-+#define DRV_VERSION "0.1.3"
-+
-+/**
-+ * timing_setup - shared timing computation and load
-+ * @ap: ATA port being set up
-+ * @adev: drive being configured
-+ * @offset: port offset
-+ * @speed: target speed
-+ * @clock: clock multiplier (number of times 33MHz for this part)
-+ *
-+ * Perform the actual timing set up for Nvidia or AMD PATA devices.
-+ * The actual devices vary so they all call into this helper function
-+ * providing the clock multipler and offset (because AMD and Nvidia put
-+ * the ports at different locations).
-+ */
-+
-+static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offset, int speed, int clock)
-+{
-+ static const unsigned char amd_cyc2udma[] = {
-+ 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 7
-+ };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct ata_device *peer = ata_dev_pair(ap, adev);
-+ int dn = ap->hard_port_no * 2 + adev->devno;
-+ struct ata_timing at, apeer;
-+ int T, UT;
-+ const int amd_clock = 33333; /* KHz. */
-+ u8 t;
-+
-+ T = 1000000000 / amd_clock;
-+ UT = T / min_t(int, max_t(int, clock, 1), 2);
-+
-+ if (ata_timing_compute(adev, speed, &at, T, UT) < 0) {
-+ dev_printk(KERN_ERR, &pdev->dev, "unknown mode %d.\n", speed);
-+ return;
-+ }
-+
-+ if (peer) {
-+ /* This may be over conservative */
-+ if (peer->dma_mode) {
-+ ata_timing_compute(peer, peer->dma_mode, &apeer, T, UT);
-+ ata_timing_merge(&apeer, &at, &at, ATA_TIMING_8BIT);
-+ }
-+ ata_timing_compute(peer, peer->pio_mode, &apeer, T, UT);
-+ ata_timing_merge(&apeer, &at, &at, ATA_TIMING_8BIT);
-+ }
-+
-+ if (speed == XFER_UDMA_5 && amd_clock <= 33333) at.udma = 1;
-+ if (speed == XFER_UDMA_6 && amd_clock <= 33333) at.udma = 15;
-+
-+ /*
-+ * Now do the setup work
-+ */
-+
-+ /* Configure the address set up timing */
-+ pci_read_config_byte(pdev, offset + 0x0C, &t);
-+ t = (t & ~(3 << ((3 - dn) << 1))) | ((FIT(at.setup, 1, 4) - 1) << ((3 - dn) << 1));
-+ pci_write_config_byte(pdev, offset + 0x0C , t);
-+
-+ /* Configure the 8bit I/O timing */
-+ pci_write_config_byte(pdev, offset + 0x0E + (1 - (dn >> 1)),
-+ ((FIT(at.act8b, 1, 16) - 1) << 4) | (FIT(at.rec8b, 1, 16) - 1));
-+
-+ /* Drive timing */
-+ pci_write_config_byte(pdev, offset + 0x08 + (3 - dn),
-+ ((FIT(at.active, 1, 16) - 1) << 4) | (FIT(at.recover, 1, 16) - 1));
-+
-+ switch (clock) {
-+ case 1:
-+ t = at.udma ? (0xc0 | (FIT(at.udma, 2, 5) - 2)) : 0x03;
-+ break;
-+
-+ case 2:
-+ t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 2, 10)]) : 0x03;
-+ break;
-+
-+ case 3:
-+ t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 1, 10)]) : 0x03;
-+ break;
-+
-+ case 4:
-+ t = at.udma ? (0xc0 | amd_cyc2udma[FIT(at.udma, 1, 15)]) : 0x03;
-+ break;
-+
-+ default:
-+ return;
-+ }
-+
-+ /* UDMA timing */
-+ pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t);
-+}
-+
-+/**
-+ * amd_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection. The BIOS stores this in PCI config
-+ * space for us.
-+ */
-+
-+static int amd_cable_detect(struct ata_port *ap) {
-+ static u32 bitmask[2] = {0x00030000, 0x00C00000};
-+ u32 ata66;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_dword(pdev, 0x42, &ata66);
-+ if (ata66 & bitmask[ap->hard_port_no])
-+ return ATA_CBL_PATA80;
-+ else
-+ return ATA_CBL_PATA40;
-+
-+}
-+
-+static void amd_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits amd_enable_bits[] = {
-+ { 0x40, 1, 0x02, 0x02 },
-+ { 0x40, 1, 0x01, 0x01 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &amd_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = amd_cable_detect(ap);
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * amd33_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the AMD registers for PIO mode.
-+ */
-+
-+static void amd33_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->pio_mode, 1);
-+}
-+
-+static void amd66_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->pio_mode, 2);
-+}
-+
-+static void amd100_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->pio_mode, 3);
-+}
-+
-+static void amd133_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->pio_mode, 4);
-+}
-+
-+/**
-+ * amd33_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the MWDMA/UDMA modes for the AMD and Nvidia
-+ * chipset.
-+ */
-+
-+static void amd33_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->dma_mode, 1);
-+}
-+
-+static void amd66_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->dma_mode, 2);
-+}
-+
-+static void amd100_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->dma_mode, 3);
-+}
-+
-+static void amd133_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x40, adev->dma_mode, 4);
-+}
-+
-+
-+/**
-+ * nv_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection. The BIOS stores this in PCI config
-+ * space for us.
-+ */
-+
-+static int nv_cable_detect(struct ata_port *ap) {
-+ static u32 bitmask[2] = {0x00030000, 0x00C00000};
-+ u32 ata66;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_dword(pdev, 0x52, &ata66);
-+ if (ata66 & bitmask[ap->hard_port_no])
-+ return ATA_CBL_PATA80;
-+ else
-+ return ATA_CBL_PATA40;
-+
-+}
-+
-+static void nv_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = nv_cable_detect(ap);
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * nv100_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the AMD registers for PIO mode.
-+ */
-+
-+static void nv100_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x50, adev->pio_mode, 3);
-+}
-+
-+static void nv133_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x50, adev->pio_mode, 4);
-+}
-+
-+/**
-+ * nv100_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the MWDMA/UDMA modes for the AMD and Nvidia
-+ * chipset.
-+ */
-+
-+static void nv100_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x50, adev->dma_mode, 3);
-+}
-+
-+static void nv133_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ timing_setup(ap, adev, 0x50, adev->dma_mode, 4);
-+}
-+
-+static struct scsi_host_template amd_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations amd33_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = amd33_set_piomode,
-+ .set_dmamode = amd33_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = amd_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations amd66_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = amd66_set_piomode,
-+ .set_dmamode = amd66_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = amd_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations amd100_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = amd100_set_piomode,
-+ .set_dmamode = amd100_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = amd_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations amd133_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = amd133_set_piomode,
-+ .set_dmamode = amd133_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = amd_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations nv100_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = nv100_set_piomode,
-+ .set_dmamode = nv100_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = nv_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations nv133_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = nv133_set_piomode,
-+ .set_dmamode = nv133_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = nv_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info[10] = {
-+ { /* 0: AMD 7401 */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07, /* No SWDMA */
-+ .udma_mask = 0x07, /* UDMA 33 */
-+ .port_ops = &amd33_port_ops
-+ },
-+ { /* 1: Early AMD7409 - no swdma */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f, /* UDMA 66 */
-+ .port_ops = &amd66_port_ops
-+ },
-+ { /* 2: AMD 7409, no swdma errata */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f, /* UDMA 66 */
-+ .port_ops = &amd66_port_ops
-+ },
-+ { /* 3: AMD 7411 */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f, /* UDMA 100 */
-+ .port_ops = &amd100_port_ops
-+ },
-+ { /* 4: AMD 7441 */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f, /* UDMA 100 */
-+ .port_ops = &amd100_port_ops
-+ },
-+ { /* 5: AMD 8111*/
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f, /* UDMA 133, no swdma */
-+ .port_ops = &amd133_port_ops
-+ },
-+ { /* 6: AMD 8111 UDMA 100 (Serenade) */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f, /* UDMA 100, no swdma */
-+ .port_ops = &amd133_port_ops
-+ },
-+ { /* 7: Nvidia Nforce */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f, /* UDMA 100 */
-+ .port_ops = &nv100_port_ops
-+ },
-+ { /* 8: Nvidia Nforce2 and later */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f, /* UDMA 133, no swdma */
-+ .port_ops = &nv133_port_ops
-+ },
-+ { /* 9: AMD CS5536 (Geode companion) */
-+ .sht = &amd_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f, /* UDMA 100 */
-+ .port_ops = &amd100_port_ops
-+ }
-+ };
-+ static struct ata_port_info *port_info[2];
-+ static int printed_version;
-+ int type = id->driver_data;
-+ u8 rev;
-+ u8 fifo;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
-+
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
-+ pci_read_config_byte(pdev, 0x41, &fifo);
-+
-+ /* Check for AMD7409 without swdma errata and if found adjust type */
-+ if (type == 1 && rev > 0x7)
-+ type = 2;
-+
-+ /* Check for AMD7411 */
-+ if (type == 3)
-+ /* FIFO is broken */
-+ pci_write_config_byte(pdev, 0x41, fifo & 0x0F);
-+ else
-+ pci_write_config_byte(pdev, 0x41, fifo | 0xF0);
-+
-+ /* Serenade ? */
-+ if (type == 5 && pdev->subsystem_vendor == PCI_VENDOR_ID_AMD &&
-+ pdev->subsystem_device == PCI_DEVICE_ID_AMD_SERENADE)
-+ type = 6; /* UDMA 100 only */
-+
-+ if (type < 3)
-+ ata_pci_clear_simplex(pdev);
-+
-+ /* And fire it up */
-+
-+ port_info[0] = port_info[1] = &info[type];
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id amd[] = {
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
-+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
-+ { 0, },
-+};
-+
-+static struct pci_driver amd_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = amd,
-+ .probe = amd_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init amd_init(void)
-+{
-+ return pci_register_driver(&amd_pci_driver);
-+}
-+
-+static void __exit amd_exit(void)
-+{
-+ pci_unregister_driver(&amd_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for AMD PATA IDE");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, amd);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(amd_init);
-+module_exit(amd_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_artop.c linux-2.6.16-rc6/drivers/scsi/pata_artop.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_artop.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_artop.c 2006-02-26 12:49:34.000000000 +0000
-@@ -0,0 +1,506 @@
-+/*
-+ * pata_artop.c - ARTOP ATA controller driver
-+ *
-+ * (C) 2006 Red Hat <alan@redhat.com>
-+ *
-+ * Based in part on drivers/ide/pci/aec62xx.c
-+ * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org>
-+ * 865/865R fixes for Macintosh card version from a patch to the old
-+ * driver by Thibaut VARENE <varenet@parisc-linux.org>
-+ * When setting the PCI latency we must set 0x80 or higher for burst
-+ * performance Alessandro Zummo <alessandro.zummo@towertech.it>
-+ *
-+ * TODO
-+ * 850 serialization once the core supports it
-+ * Investigate no_dsc on 850R
-+ * Clock detect
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_artop"
-+#define DRV_VERSION "0.2.1"
-+
-+/*
-+ * The ARTOP has 33 Mhz and "over clocked" timing tables. Until we
-+ * get PCI bus speed functionality we leave this as 0. Its a variable
-+ * for when we get the functionality and also for folks wanting to
-+ * test stuff.
-+ */
-+
-+static int clock = 0;
-+
-+/**
-+ * artop6210_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6210_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ const struct pci_bits artop_enable_bits[] = {
-+ { 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */
-+ { 0x4AU, 1U, 0x04UL, 0x04UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &artop_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * artop6260_cable_detect - check for 40/80 pin
-+ * @ap: Port
-+ *
-+ * The ARTOP hardware reports the cable detect bits in register 0x49.
-+ * Nothing complicated needed here.
-+ */
-+
-+static int artop6260_cable_detect(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 tmp;
-+
-+ pci_read_config_byte(pdev, 0x49, &tmp);
-+ if (tmp & (1 >> ap->hard_port_no))
-+ return ATA_CBL_PATA40;
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * artop6260_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6260_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ const struct pci_bits artop_enable_bits[] = {
-+ { 0x4AU, 1U, 0x02UL, 0x02UL }, /* port 0 */
-+ { 0x4AU, 1U, 0x04UL, 0x04UL }, /* port 1 */
-+ };
-+
-+ /* Odd numbered device ids are the units with enable bits (the -R cards) */
-+ if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = artop6260_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * artop6210_load_piomode - Load a set of PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device
-+ * @pio: PIO mode
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. This
-+ * is used both to set PIO timings in PIO mode and also to set the
-+ * matching PIO clocking for UDMA, as well as the MWDMA timings.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6210_load_piomode(struct ata_port *ap, struct ata_device *adev, unsigned int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = adev->devno + 2 * ap->hard_port_no;
-+ const u16 timing[2][5] = {
-+ { 0x0000, 0x000A, 0x0008, 0x0303, 0x0301 },
-+ { 0x0700, 0x070A, 0x0708, 0x0403, 0x0401 }
-+
-+ };
-+ /* Load the PIO timing active/recovery bits */
-+ pci_write_config_word(pdev, 0x40 + 2 * dn, timing[clock][pio]);
-+}
-+
-+/**
-+ * artop6210_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. For
-+ * ARTOP we must also clear the UDMA bits if we are not doing UDMA. In
-+ * the event UDMA is used the later call to set_dmamode will set the
-+ * bits as required.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6210_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = adev->devno + 2 * ap->hard_port_no;
-+ u8 ultra;
-+
-+ artop6210_load_piomode(ap, adev, adev->pio_mode - XFER_PIO_0);
-+
-+ /* Clear the UDMA mode bits (set_dmamode will redo this if needed) */
-+ pci_read_config_byte(pdev, 0x54, &ultra);
-+ ultra &= ~(3 << (2 * dn));
-+ pci_write_config_byte(pdev, 0x54, ultra);
-+}
-+
-+/**
-+ * artop6260_load_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring
-+ * @pio: PIO mode
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. The
-+ * ARTOP6260 and relatives store the timing data differently.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6260_load_piomode (struct ata_port *ap, struct ata_device *adev, unsigned int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = adev->devno + 2 * ap->hard_port_no;
-+ const u8 timing[2][5] = {
-+ { 0x00, 0x0A, 0x08, 0x33, 0x31 },
-+ { 0x70, 0x7A, 0x78, 0x43, 0x41 }
-+
-+ };
-+ /* Load the PIO timing active/recovery bits */
-+ pci_write_config_byte(pdev, 0x40 + dn, timing[clock][pio]);
-+}
-+
-+/**
-+ * artop6260_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. For
-+ * ARTOP we must also clear the UDMA bits if we are not doing UDMA. In
-+ * the event UDMA is used the later call to set_dmamode will set the
-+ * bits as required.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6260_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 ultra;
-+
-+ artop6260_load_piomode(ap, adev, adev->pio_mode - XFER_PIO_0);
-+
-+ /* Clear the UDMA mode bits (set_dmamode will redo this if needed) */
-+ pci_read_config_byte(pdev, 0x44 + ap->hard_port_no, &ultra);
-+ ultra &= ~(7 << (4 * adev->devno)); /* One nibble per drive */
-+ pci_write_config_byte(pdev, 0x44 + ap->hard_port_no, ultra);
-+}
-+
-+/**
-+ * artop6210_set_dmamode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set DMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6210_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = adev->devno + 2 * ap->hard_port_no;
-+ u8 ultra;
-+
-+ if (adev->dma_mode == XFER_MW_DMA_0)
-+ pio = 1;
-+ else
-+ pio = 4;
-+
-+ /* Load the PIO timing active/recovery bits */
-+ artop6210_load_piomode(ap, adev, pio);
-+
-+ pci_read_config_byte(pdev, 0x54, &ultra);
-+ ultra &= ~(3 << (2 * dn));
-+
-+ /* Add ultra DMA bits if in UDMA mode */
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ u8 mode = (adev->dma_mode - XFER_UDMA_0) + 1 - clock;
-+ if (mode == 0)
-+ mode = 1;
-+ ultra |= (mode << (2 * dn));
-+ }
-+ pci_write_config_byte(pdev, 0x54, ultra);
-+}
-+
-+/**
-+ * artop6260_set_dmamode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring
-+ *
-+ * Set DMA mode for device, in host controller PCI config space. The
-+ * ARTOP6260 and relatives store the timing data differently.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void artop6260_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio = adev->pio_mode - XFER_PIO_0;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 ultra;
-+
-+ if (adev->dma_mode == XFER_MW_DMA_0)
-+ pio = 1;
-+ else
-+ pio = 4;
-+
-+ /* Load the PIO timing active/recovery bits */
-+ artop6260_load_piomode(ap, adev, pio);
-+
-+ /* Add ultra DMA bits if in UDMA mode */
-+ pci_read_config_byte(pdev, 0x44 + ap->hard_port_no, &ultra);
-+ ultra &= ~(7 << (4 * adev->devno)); /* One nibble per drive */
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ u8 mode = adev->dma_mode - XFER_UDMA_0 + 1 - clock;
-+ if (mode == 0)
-+ mode = 1;
-+ ultra |= (mode << (4 * adev->devno));
-+ }
-+ pci_write_config_byte(pdev, 0x44 + ap->hard_port_no, ultra);
-+}
-+
-+static struct scsi_host_template artop_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations artop6210_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = artop6210_set_piomode,
-+ .set_dmamode = artop6210_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = artop6210_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations artop6260_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = artop6260_set_piomode,
-+ .set_dmamode = artop6260_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = artop6260_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+
-+/**
-+ * artop_init_one - Register ARTOP ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in artop_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int artop_init_one (struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ static int printed_version;
-+ static struct ata_port_info info_6210 = {
-+ .sht = &artop_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = ATA_UDMA2,
-+ .port_ops = &artop6210_ops,
-+ };
-+ static struct ata_port_info info_626x = {
-+ .sht = &artop_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = ATA_UDMA4,
-+ .port_ops = &artop6260_ops,
-+ };
-+ static struct ata_port_info info_626x_fast = {
-+ .sht = &artop_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &artop6260_ops,
-+ };
-+ struct ata_port_info *port_info[2];
-+ struct ata_port_info *info;
-+ int ports = 2;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ if (id->driver_data == 0) { /* 6210 variant */
-+ info = &info_6210;
-+ /* BIOS may have left us in UDMA, clear it before libata probe */
-+ pci_write_config_byte(pdev, 0x54, 0);
-+ /* For the moment (also lacks dsc) */
-+ printk(KERN_WARNING "ARTOP 6210 requires serialize functionality not yet supported by libata.\n");
-+ printk(KERN_WARNING "Secondary ATA ports will not be activated.\n");
-+ ports = 1;
-+ }
-+ else if (id->driver_data == 1) /* 6260 */
-+ info = &info_626x;
-+ else if (id->driver_data == 2) { /* 6260 or 6260 + fast */
-+ unsigned long io = pci_resource_start(pdev, 4);
-+ u8 reg;
-+
-+ info = &info_626x;
-+ if (inb(io) & 0x10)
-+ info = &info_626x_fast;
-+ /* Mac systems come up with some registers not set as we
-+ will need them */
-+
-+ /* Clear reset & test bits */
-+ pci_read_config_byte(pdev, 0x49, &reg);
-+ pci_write_config_byte(pdev, 0x49, reg & ~ 0x30);
-+
-+ /* PCI latency must be > 0x80 for burst mode, tweak it
-+ * if required.
-+ */
-+ pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &reg);
-+ if (reg <= 0x80)
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x90);
-+
-+ /* Enable IRQ output and burst mode */
-+ pci_read_config_byte(pdev, 0x4a, &reg);
-+ pci_write_config_byte(pdev, 0x4a, (reg & ~0x01) | 0x80);
-+
-+ }
-+ port_info[0] = port_info[1] = info;
-+ return ata_pci_init_one(pdev, port_info, ports);
-+}
-+
-+static const struct pci_device_id artop_pci_tbl[] = {
-+ { 0x1191, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0x1191, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { 0x1191, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { 0x1191, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { 0x1191, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver artop_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = artop_pci_tbl,
-+ .probe = artop_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init artop_init(void)
-+{
-+ return pci_register_driver(&artop_pci_driver);
-+}
-+
-+static void __exit artop_exit(void)
-+{
-+ pci_unregister_driver(&artop_pci_driver);
-+}
-+
-+
-+module_init(artop_init);
-+module_exit(artop_exit);
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("SCSI low-level driver for ARTOP PATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, artop_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_atiixp.c linux-2.6.16-rc6/drivers/scsi/pata_atiixp.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_atiixp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_atiixp.c 2006-02-07 13:42:02.000000000 +0000
-@@ -0,0 +1,299 @@
-+/*
-+ * pata_atiixp.c - ATI PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based on
-+ *
-+ * linux/drivers/ide/pci/atiixp.c Version 0.01-bart2 Feb. 26, 2004
-+ *
-+ * Copyright (C) 2003 ATI Inc. <hyu@ati.com>
-+ * Copyright (C) 2004 Bartlomiej Zolnierkiewicz
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_atiixp"
-+#define DRV_VERSION "0.1.1"
-+
-+enum {
-+ ATIIXP_IDE_PIO_TIMING = 0x40,
-+ ATIIXP_IDE_MWDMA_TIMING = 0x44,
-+ ATIIXP_IDE_PIO_CONTROL = 0x48,
-+ ATIIXP_IDE_PIO_MODE = 0x4a,
-+ ATIIXP_IDE_UDMA_CONTROL = 0x54,
-+ ATIIXP_IDE_UDMA_MODE = 0x56
-+};
-+
-+static void atiixp_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits atiixp_enable_bits[] = {
-+ { 0x48, 1, 0x01, 0x00 },
-+ { 0x48, 1, 0x08, 0x00 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA80;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * atiixp_set_pio_timing - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called by both the pio and dma setup functions to set the controller
-+ * timings for PIO transfers. We must load both the mode number and
-+ * timing values into the controller.
-+ */
-+
-+static void atiixp_set_pio_timing(struct ata_port *ap, struct ata_device *adev, int pio)
-+{
-+ static u8 pio_timings[5] = { 0x5D, 0x47, 0x34, 0x22, 0x20 };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = 2 * ap->hard_port_no + adev->devno;
-+
-+ /* Check this is correct - the order is odd in both drivers */
-+ int timing_shift = (16 * ap->hard_port_no) + 8 * (adev->devno ^ 1);
-+ u16 pio_mode_data, pio_timing_data;
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_PIO_MODE, &pio_mode_data);
-+ pio_mode_data &= ~(0x7 << (4 * dn));
-+ pio_mode_data |= pio << (4 * dn);
-+ pci_write_config_word(pdev, ATIIXP_IDE_PIO_MODE, pio_mode_data);
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_PIO_TIMING, &pio_timing_data);
-+ pio_mode_data &= ~(0xFF << timing_shift);
-+ pio_mode_data |= (pio_timings[pio] << timing_shift);
-+ pci_write_config_word(pdev, ATIIXP_IDE_PIO_TIMING, pio_timing_data);
-+}
-+
-+/**
-+ * atiixp_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. We use a shared helper for this
-+ * as the DMA setup must also adjust the PIO timing information.
-+ */
-+
-+static void atiixp_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ atiixp_set_pio_timing(ap, adev, adev->pio_mode - XFER_PIO_0);
-+}
-+
-+/**
-+ * atiixp_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the DMA mode setup. We use timing tables for most
-+ * modes but must tune an appropriate PIO mode to match.
-+ */
-+
-+static void atiixp_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u8 mwdma_timings[5] = { 0x77, 0x21, 0x20 };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dma = adev->dma_mode;
-+ int dn = 2 * ap->hard_port_no + adev->devno;
-+ int wanted_pio;
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ u16 udma_mode_data;
-+
-+ dma -= XFER_UDMA_0;
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_UDMA_MODE, &udma_mode_data);
-+ udma_mode_data &= ~(0x7 << (4 * dn));
-+ udma_mode_data |= dma << (4 * dn);
-+ pci_write_config_word(pdev, ATIIXP_IDE_UDMA_MODE, udma_mode_data);
-+ } else {
-+ u16 mwdma_timing_data;
-+ /* Check this is correct - the order is odd in both drivers */
-+ int timing_shift = (16 * ap->hard_port_no) + 8 * (adev->devno ^ 1);
-+
-+ dma -= XFER_MW_DMA_0;
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_MWDMA_TIMING, &mwdma_timing_data);
-+ mwdma_timing_data &= ~(0xFF << timing_shift);
-+ mwdma_timing_data |= (mwdma_timings[dma] << timing_shift);
-+ pci_write_config_word(pdev, ATIIXP_IDE_MWDMA_TIMING, mwdma_timing_data);
-+ }
-+ /*
-+ * We must now look at the PIO mode situation. We may need to
-+ * adjust the PIO mode to keep the timings acceptable
-+ */
-+ if (adev->dma_mode >= XFER_MW_DMA_2)
-+ wanted_pio = 4;
-+ else if (adev->dma_mode == XFER_MW_DMA_1)
-+ wanted_pio = 3;
-+ else if (adev->dma_mode == XFER_MW_DMA_0)
-+ wanted_pio = 0;
-+ else BUG();
-+
-+ if (adev->pio_mode != wanted_pio)
-+ atiixp_set_pio_timing(ap, adev, wanted_pio);
-+}
-+
-+/**
-+ * atiixp_bmdma_start - DMA start callback
-+ * @qc: Command in progress
-+ *
-+ * When DMA begins we need to ensure that the UDMA control
-+ * register for the channel is correctly set.
-+ */
-+
-+static void atiixp_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = (2 * ap->hard_port_no) + adev->devno;
-+ u16 tmp16;
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
-+ if (adev->dma_mode >= XFER_UDMA_0)
-+ tmp16 |= (1 << dn);
-+ else
-+ tmp16 &= ~(1 << dn);
-+ pci_write_config_word(pdev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * atiixp_dma_stop - DMA stop callback
-+ * @qc: Command in progress
-+ *
-+ * DMA has completed. Clear the UDMA flag as the next operations will
-+ * be PIO ones not UDMA data transfer.
-+ */
-+
-+static void atiixp_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = (2 * ap->hard_port_no) + qc->dev->devno;
-+ u16 tmp16;
-+
-+ pci_read_config_word(pdev, ATIIXP_IDE_UDMA_CONTROL, &tmp16);
-+ tmp16 &= ~(1 << dn);
-+ pci_write_config_word(pdev, ATIIXP_IDE_UDMA_CONTROL, tmp16);
-+ ata_bmdma_stop(qc);
-+}
-+
-+static struct scsi_host_template atiixp_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations atiixp_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = atiixp_set_piomode,
-+ .set_dmamode = atiixp_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = atiixp_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = atiixp_bmdma_start,
-+ .bmdma_stop = atiixp_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &atiixp_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x06, /* No MWDMA0 support */
-+ .udma_mask = 0x3F,
-+ .port_ops = &atiixp_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id atiixp[] = {
-+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0, },
-+};
-+
-+static struct pci_driver atiixp_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = atiixp,
-+ .probe = atiixp_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init atiixp_init(void)
-+{
-+ return pci_register_driver(&atiixp_pci_driver);
-+}
-+
-+
-+static void __exit atiixp_exit(void)
-+{
-+ pci_unregister_driver(&atiixp_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for ATI IXP200/300/400");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, atiixp);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(atiixp_init);
-+module_exit(atiixp_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cmd64x.c linux-2.6.16-rc6/drivers/scsi/pata_cmd64x.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cmd64x.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_cmd64x.c 2006-02-16 15:34:39.000000000 +0000
-@@ -0,0 +1,486 @@
-+/*
-+ * pata_cmd64x.c - ATI PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based upon
-+ * linux/drivers/ide/pci/cmd64x.c Version 1.30 Sept 10, 2002
-+ *
-+ * cmd64x.c: Enable interrupts at initialization time on Ultra/PCI machines.
-+ * Note, this driver is not used at all on other systems because
-+ * there the "BIOS" has done all of the following already.
-+ * Due to massive hardware bugs, UltraDMA is only supported
-+ * on the 646U2 and not on the 646U.
-+ *
-+ * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be)
-+ * Copyright (C) 1998 David S. Miller (davem@redhat.com)
-+ *
-+ * Copyright (C) 1999-2002 Andre Hedrick <andre@linux-ide.org>
-+ *
-+ * TODO
-+ * Testing work
-+ * Non x86 needs PIO 0 loading before we commence ident
-+ * - but this belongs in libata-core
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_cmd64x"
-+#define DRV_VERSION "0.1.1"
-+
-+/*
-+ * CMD64x specific registers definition.
-+ */
-+
-+enum {
-+ CFR = 0x50,
-+ CFR_INTR_CH0 = 0x02,
-+ CNTRL = 0x51,
-+ CNTRL_DIS_RA0 = 0x40,
-+ CNTRL_DIS_RA1 = 0x80,
-+ CNTRL_ENA_2ND = 0x08,
-+ CMDTIM = 0x52,
-+ ARTTIM0 = 0x53,
-+ DRWTIM0 = 0x54,
-+ ARTTIM1 = 0x55,
-+ DRWTIM1 = 0x56,
-+ ARTTIM23 = 0x57,
-+ ARTTIM23_DIS_RA2 = 0x04,
-+ ARTTIM23_DIS_RA3 = 0x08,
-+ ARTTIM23_INTR_CH1 = 0x10,
-+ ARTTIM2 = 0x57,
-+ ARTTIM3 = 0x57,
-+ DRWTIM23 = 0x58,
-+ DRWTIM2 = 0x58,
-+ BRST = 0x59,
-+ DRWTIM3 = 0x5b,
-+ BMIDECR0 = 0x70,
-+ MRDMODE = 0x71,
-+ MRDMODE_INTR_CH0 = 0x04,
-+ MRDMODE_INTR_CH1 = 0x08,
-+ MRDMODE_BLK_CH0 = 0x10,
-+ MRDMODE_BLK_CH1 = 0x20,
-+ BMIDESR0 = 0x72,
-+ UDIDETCR0 = 0x73,
-+ DTPR0 = 0x74,
-+ BMIDECR1 = 0x78,
-+ BMIDECSR = 0x79,
-+ BMIDESR1 = 0x7A,
-+ UDIDETCR1 = 0x7B,
-+ DTPR1 = 0x7C
-+};
-+
-+/* Phee Phy Pho Phum */
-+
-+static void cmd64x_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+static void cmd648_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 r;
-+
-+ /* Check cable detect bits */
-+ pci_read_config_byte(pdev, BMIDECSR, &r);
-+ if (r & (1 << ap->hard_port_no))
-+ ap->cbl = ATA_CBL_PATA80;
-+ else
-+ ap->cbl = ATA_CBL_PATA40;
-+
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * cmd64x_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup.
-+ */
-+
-+static void cmd64x_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct ata_timing t;
-+ const unsigned long T = 1000000 / 33;
-+ const u8 setup_data[] = { 0x40, 0x40, 0x40, 0x80, 0x00 };
-+
-+ u8 reg;
-+
-+ /* Port layout is not logical so use a table */
-+ const u8 arttim_port[2][2] = {
-+ { ARTTIM0, ARTTIM1 },
-+ { ARTTIM23, ARTTIM23 }
-+ };
-+ const u8 drwtim_port[2][2] = {
-+ { DRWTIM0, DRWTIM1 },
-+ { DRWTIM2, DRWTIM3 }
-+ };
-+
-+ int arttim = arttim_port[ap->hard_port_no][adev->devno];
-+ int drwtim = drwtim_port[ap->hard_port_no][adev->devno];
-+
-+
-+ if (ata_timing_compute(adev, adev->pio_mode, &t, T, 0) < 0) {
-+ printk(KERN_ERR DRV_NAME ": mome computation failed.\n");
-+ return;
-+ }
-+ if (ap->hard_port_no) {
-+ /* Slave has shared address setup */
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+
-+ if (pair) {
-+ struct ata_timing tp;
-+ ata_timing_compute(pair, pair->pio_mode, &tp, T, 0);
-+ ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
-+ }
-+ }
-+
-+ printk(KERN_DEBUG DRV_NAME ": active %d recovery %d setup %d.\n",
-+ t.active, t.recover, t.setup);
-+ if (t.recover > 16) {
-+ t.active += t.recover - 16;
-+ t.recover = 16;
-+ }
-+ if (t.active > 16)
-+ t.active = 16;
-+
-+ /* Now convert the clocks into values we can actually stuff into
-+ the chip */
-+
-+ if (t.recover > 1)
-+ t.recover--;
-+ else
-+ t.recover = 15;
-+
-+ if (t.setup > 4)
-+ t.setup = 0xC0;
-+ else
-+ t.setup = setup_data[t.setup];
-+
-+ t.active &= 0x0F; /* 0 = 16 */
-+
-+ /* Load setup timing */
-+ pci_read_config_byte(pdev, arttim, &reg);
-+ reg &= 0x3F;
-+ reg |= t.setup;
-+ pci_write_config_byte(pdev, arttim, reg);
-+
-+ /* Load active/recovery */
-+ pci_write_config_byte(pdev, drwtim, (t.active << 4) | t.recover);
-+}
-+
-+/**
-+ * cmd64x_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the DMA mode setup.
-+ */
-+
-+static void cmd64x_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 regU, regD;
-+
-+ int pciU = UDIDETCR0 + 8 * ap->hard_port_no;
-+ int pciD = BMIDESR0 + 8 * ap->hard_port_no;
-+ int shift = 2 * adev->devno;
-+ const u8 udma_data[] = { 0x31, 0x21, 0x11, 0x25, 0x15, 0x05 };
-+ const u8 mwdma_data[] = { 0x30, 0x20, 0x10 };
-+
-+ pci_read_config_byte(pdev, pciD, &regD);
-+ pci_read_config_byte(pdev, pciU, &regU);
-+
-+ regD &= ~(0x20 << shift);
-+ regU &= ~(0x35 << shift);
-+
-+ if (adev->dma_mode >= XFER_UDMA_0)
-+ regU |= udma_data[adev->dma_mode - XFER_UDMA_0] << shift;
-+ else
-+ regD |= mwdma_data[adev->dma_mode - XFER_MW_DMA_0] << shift;
-+
-+ regD |= 0x20 << adev->devno;
-+
-+ pci_write_config_byte(pdev, pciU, regU);
-+ pci_write_config_byte(pdev, pciD, regD);
-+}
-+
-+/**
-+ * cmd648_dma_stop - DMA stop callback
-+ * @qc: Command in progress
-+ *
-+ * DMA has completed.
-+ */
-+
-+static void cmd648_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 dma_intr;
-+ int dma_reg = ap->hard_port_no ? ARTTIM23_INTR_CH1 : CFR_INTR_CH0;
-+ int dma_mask = ap->hard_port_no ? ARTTIM2 : CFR;
-+
-+ ata_bmdma_stop(qc);
-+
-+ pci_read_config_byte(pdev, dma_reg, &dma_intr);
-+ pci_write_config_byte(pdev, dma_reg, dma_intr | dma_mask);
-+}
-+
-+/**
-+ * cmd646r1_dma_stop - DMA stop callback
-+ * @qc: Command in progress
-+ *
-+ * Stub for now while investigating the r1 quirk in the old driver.
-+ */
-+
-+static void cmd646r1_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ ata_bmdma_stop(qc);
-+}
-+
-+static struct scsi_host_template cmd64x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations cmd64x_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cmd64x_set_piomode,
-+ .set_dmamode = cmd64x_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = cmd64x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations cmd646r1_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cmd64x_set_piomode,
-+ .set_dmamode = cmd64x_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = cmd64x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = cmd646r1_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations cmd648_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cmd64x_set_piomode,
-+ .set_dmamode = cmd64x_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = cmd648_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = cmd648_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ u32 class_rev;
-+
-+ static struct ata_port_info cmd_info[6] = {
-+ { /* CMD 643 - no UDMA */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &cmd64x_port_ops
-+ },
-+ { /* CMD 646 with broken UDMA */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &cmd64x_port_ops
-+ },
-+ { /* CMD 646 with working UDMA */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA1,
-+ .port_ops = &cmd64x_port_ops
-+ },
-+ { /* CMD 646 rev 1 */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &cmd646r1_port_ops
-+ },
-+ { /* CMD 648 */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA2,
-+ .port_ops = &cmd648_port_ops
-+ },
-+ { /* CMD 649 */
-+ .sht = &cmd64x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA3,
-+ .port_ops = &cmd648_port_ops
-+ }
-+ };
-+ static struct ata_port_info *port_info[2], *info;
-+ u8 mrdmode;
-+
-+ info = &cmd_info[id->driver_data];
-+
-+ pci_read_config_dword(pdev, PCI_CLASS_REVISION, &class_rev);
-+ class_rev &= 0xFF;
-+
-+ if (id->driver_data == 0) /* 643 */
-+ ata_pci_clear_simplex(pdev);
-+
-+ if (pdev->device == PCI_DEVICE_ID_CMD_646) {
-+ /* Does UDMA work ? */
-+ if (class_rev > 4)
-+ info = &cmd_info[2];
-+ /* Early rev with other problems ? */
-+ else if (class_rev == 1)
-+ info = &cmd_info[3];
-+ }
-+
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 64);
-+ pci_read_config_byte(pdev, MRDMODE, &mrdmode);
-+ mrdmode &= ~ 0x30; /* IRQ set up */
-+ mrdmode |= 0x02; /* Memory read line enable */
-+ pci_write_config_byte(pdev, MRDMODE, mrdmode);
-+
-+ /* Force PIO 0 here.. */
-+
-+ /* PPC specific fixup copied from old driver */
-+#ifdef CONFIG_PPC
-+ pci_write_config_byte(pdev, UDIDETCR0, 0xF0);
-+#endif
-+
-+ port_info[0] = port_info[1] = info;
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static struct pci_device_id cmd64x[] = {
-+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
-+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
-+ { 0, },
-+};
-+
-+static struct pci_driver cmd64x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = cmd64x,
-+ .probe = cmd64x_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init cmd64x_init(void)
-+{
-+ return pci_register_driver(&cmd64x_pci_driver);
-+}
-+
-+
-+static void __exit cmd64x_exit(void)
-+{
-+ pci_unregister_driver(&cmd64x_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for CMD64x series PATA controllers");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, cmd64x);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(cmd64x_init);
-+module_exit(cmd64x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5520.c linux-2.6.16-rc6/drivers/scsi/pata_cs5520.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5520.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_cs5520.c 2006-03-10 17:05:31.000000000 +0000
-@@ -0,0 +1,322 @@
-+/*
-+ * IDE tuning and bus mastering support for the CS5510/CS5520
-+ * chipsets
-+ *
-+ * The CS5510/CS5520 are slightly unusual devices. Unlike the
-+ * typical IDE controllers they do bus mastering with the drive in
-+ * PIO mode and smarter silicon.
-+ *
-+ * The practical upshot of this is that we must always tune the
-+ * drive for the right PIO mode. We must also ignore all the blacklists
-+ * and the drive bus mastering DMA information. Also to confuse matters
-+ * further we can do DMA on PIO only drives.
-+ *
-+ * DMA on the 5510 also requires we disable_hlt() during DMA on early
-+ * revisions.
-+ *
-+ * *** This driver is strictly experimental ***
-+ *
-+ * (c) Copyright Red Hat Inc 2002
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2, or (at your option) any
-+ * later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * Documentation:
-+ * Not publically available.
-+ */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "cs5520"
-+#define DRV_VERSION "0.4.1"
-+
-+struct pio_clocks
-+{
-+ int address;
-+ int assert;
-+ int recovery;
-+};
-+
-+static struct pio_clocks cs5520_pio_clocks[]={
-+ {3, 6, 11},
-+ {2, 5, 6},
-+ {1, 4, 3},
-+ {1, 3, 2},
-+ {1, 2, 1}
-+};
-+
-+/**
-+ * cs5520_set_timings - program PIO timings
-+ * @ap: ATA port
-+ * @adev: ATA device
-+ *
-+ * Program the PIO mode timings for the controller according to the pio
-+ * clocking table.
-+ */
-+
-+static void cs5520_set_timings(struct ata_port *ap, struct ata_device *adev, int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int slave = adev->devno;
-+
-+ pio -= XFER_PIO_0;
-+
-+ /* Channel command timing */
-+ pci_write_config_byte(pdev, 0x62 + ap->hard_port_no,
-+ (cs5520_pio_clocks[pio].recovery << 4) |
-+ (cs5520_pio_clocks[pio].assert));
-+ /* FIXME: should these use address ? */
-+ /* Read command timing */
-+ pci_write_config_byte(pdev, 0x64 + 4*ap->hard_port_no + slave,
-+ (cs5520_pio_clocks[pio].recovery << 4) |
-+ (cs5520_pio_clocks[pio].assert));
-+ /* Write command timing */
-+ pci_write_config_byte(pdev, 0x66 + 4*ap->hard_port_no + slave,
-+ (cs5520_pio_clocks[pio].recovery << 4) |
-+ (cs5520_pio_clocks[pio].assert));
-+}
-+
-+/**
-+ * cs5520_enable_dma - turn on DMA bits
-+ *
-+ * Turn on the DMA bits for this disk. Needed because the BIOS probably
-+ * has not done the work for us. Belongs in the core SATA code.
-+ */
-+
-+static int cs5520_enable_dma(struct ata_port *ap, struct ata_device *adev)
-+{
-+ /* Set the DMA enable/disable flag */
-+ u8 reg = inb(ap->ioaddr.bmdma_addr + 0x02);
-+ reg |= 1<<(adev->devno + 5);
-+ outb(reg, ap->ioaddr.bmdma_addr + 0x02);
-+}
-+
-+/**
-+ * cs5520_set_dmamode - program DMA timings
-+ * @ap: ATA port
-+ * @adev: ATA device
-+ *
-+ * Program the DMA mode timings for the controller according to the pio
-+ * clocking table. Note that this device sets the DMA timings to PIO
-+ * mode values. This may seem bizarre but the 5520 architecture talks
-+ * PIO mode to the disk and DMA mode to the controller so the underlying
-+ * transfers are PIO timed.
-+ */
-+
-+static void cs5520_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static const int dma_xlate[3] = { XFER_PIO_0, XFER_PIO_3, XFER_PIO_4 };
-+ cs5520_set_timings(ap, adev, dma_xlate[adev->dma_mode]);
-+ cs5520_enable_dma(ap, adev);
-+}
-+
-+/**
-+ * cs5520_set_piomode - program PIO timings
-+ * @ap: ATA port
-+ * @adev: ATA device
-+ *
-+ * Program the PIO mode timings for the controller according to the pio
-+ * clocking table. We know pio_mode will equal dma_mode because of the
-+ * CS5520 architecture. At least once we turned DMA on and wrote a
-+ * mode setter.
-+ */
-+
-+static void cs5520_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ cs5520_set_timings(ap, adev, adev->pio_mode);
-+}
-+
-+static struct scsi_host_template cs5520_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations cs5520_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cs5520_set_piomode,
-+ .set_dmamode = cs5520_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ u8 pcicfg;
-+ static struct ata_probe_ent probe[2];
-+ int ports = 0;
-+
-+ pci_read_config_byte(dev, 0x60, &pcicfg);
-+
-+ /* Check if the ATA ports are enabled */
-+ if ((pcicfg & 3) == 0)
-+ return -ENODEV;
-+
-+ if ((pcicfg & 0x40) == 0) {
-+ printk(KERN_WARNING DRV_NAME ": DMA mode disabled. Enabling.\n");
-+ pci_write_config_byte(dev, 0x60, pcicfg | 0x40);
-+ }
-+
-+ /* Perform set up for DMA */
-+ if (pci_enable_device_bars(dev, 1<<2)) {
-+ printk(KERN_ERR DRV_NAME ": unable to configure BAR2.\n");
-+ return -ENODEV;
-+ }
-+ pci_set_master(dev);
-+ if (pci_set_dma_mask(dev, DMA_32BIT_MASK)) {
-+ printk(KERN_ERR DRV_NAME ": unable to configure DMA mask.\n");
-+ return -ENODEV;
-+ }
-+ if (pci_set_consistent_dma_mask(dev, DMA_32BIT_MASK)) {
-+ printk(KERN_ERR DRV_NAME ": unable to configure consistent DMA mask.\n");
-+ return -ENODEV;
-+ }
-+
-+ /* We have to do our own plumbing as the PCI setup for this
-+ chipset is non-standard so we can't punt to the libata code */
-+
-+ INIT_LIST_HEAD(&probe[0].node);
-+ probe[0].dev = pci_dev_to_dev(dev);
-+ probe[0].port_ops = &cs5520_port_ops;
-+ probe[0].sht = &cs5520_sht;
-+ probe[0].pio_mask = 0x1F;
-+ probe[0].mwdma_mask = id->driver_data;
-+ probe[0].irq = 14;
-+ probe[0].irq_flags = SA_SHIRQ;
-+ probe[0].host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST;
-+ probe[0].legacy_mode = 1;
-+ probe[0].n_ports = 1;
-+ probe[0].port[0].cmd_addr = 0x1F0;
-+ probe[0].port[0].ctl_addr = 0x3F6;
-+ probe[0].port[0].altstatus_addr = 0x3F6;
-+ probe[0].port[0].bmdma_addr = pci_resource_start(dev, 2);
-+
-+ /* The secondary lurks at different addresses but is otherwise
-+ the same beastie */
-+
-+ probe[1] = probe[0];
-+ INIT_LIST_HEAD(&probe[1].node);
-+ probe[1].irq = 15;
-+ probe[1].hard_port_no = 1;
-+ probe[1].port[0].cmd_addr = 0x170;
-+ probe[1].port[0].ctl_addr = 0x376;
-+ probe[1].port[0].altstatus_addr = 0x376;
-+ probe[1].port[0].bmdma_addr = pci_resource_start(dev, 2) + 8;
-+
-+ /* Let libata fill in the port details */
-+ ata_std_ports(&probe[0].port[0]);
-+ ata_std_ports(&probe[1].port[0]);
-+
-+ /* Now add the ports that are active */
-+ if (pcicfg & 1)
-+ ports += ata_device_add(&probe[0]);
-+ if (pcicfg & 2)
-+ ports += ata_device_add(&probe[1]);
-+ if (ports)
-+ return 0;
-+ return -ENODEV;
-+}
-+
-+/**
-+ * cs5520_remove_one - device unload
-+ * @pdev: PCI device being removed
-+ *
-+ * Handle an unplug/unload event for a PCI device. Unload the
-+ * PCI driver but do not use the default handler as we manage
-+ * resources ourself and *MUST NOT* disable the device as it has
-+ * other functions.
-+ */
-+
-+static void __devexit cs5520_remove_one(struct pci_dev *pdev)
-+{
-+ struct device *dev = pci_dev_to_dev(pdev);
-+ struct ata_host_set *host_set = dev_get_drvdata(dev);
-+
-+ ata_host_set_remove(host_set);
-+ dev_set_drvdata(dev, NULL);
-+}
-+
-+/* For now keep DMA off. We can set it for all but A rev CS5510 once the
-+ core ATA code can handle it */
-+
-+static struct pci_device_id pata_cs5520[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520), },
-+ { 0, },
-+};
-+
-+static struct pci_driver cs5520_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = pata_cs5520,
-+ .probe = cs5520_init_one,
-+ .remove = cs5520_remove_one
-+};
-+
-+
-+static int __init cs5520_init(void)
-+{
-+ return pci_register_driver(&cs5520_pci_driver);
-+}
-+
-+static void __exit cs5520_exit(void)
-+{
-+ pci_unregister_driver(&cs5520_pci_driver);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Cyrix CS5510/5520");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, pata_cs5520);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(cs5520_init);
-+module_exit(cs5520_exit);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5530.c linux-2.6.16-rc6/drivers/scsi/pata_cs5530.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5530.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_cs5530.c 2006-03-10 17:05:20.000000000 +0000
-@@ -0,0 +1,371 @@
-+/*
-+ * pata-cs5530.c - CS5530 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon cs5530.c by Mark Lord.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Loosely based on the piix & svwks drivers.
-+ *
-+ * Documentation:
-+ * Available from AMD web site.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/dmi.h>
-+
-+#define DRV_NAME "cs5530"
-+#define DRV_VERSION "0.4.1"
-+
-+/**
-+ * cs5530_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Set our PIO requirements. This is fairly simple on the CS5530
-+ * chips.
-+ */
-+
-+static void cs5530_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static unsigned int cs5530_pio_timings[2][5] = {
-+ {0x00009172, 0x00012171, 0x00020080, 0x00032010, 0x00040010},
-+ {0xd1329172, 0x71212171, 0x30200080, 0x20102010, 0x00100010}
-+ };
-+ unsigned long base = ( ap->ioaddr.bmdma_addr & ~0x0F) + 0x20 + 0x10 * ap->hard_port_no;
-+ u32 tuning;
-+ int format;
-+
-+ /* Find out which table to use */
-+ tuning = inl(base + 0x04);
-+ format = (tuning & 0x80000000UL) ? 1 : 0;
-+
-+ /* Now load the right timing register */
-+ if (adev->devno)
-+ base += 0x08;
-+
-+ outl(cs5530_pio_timings[format][adev->pio_mode - XFER_PIO_0], base);
-+}
-+
-+/**
-+ * cs5530_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * We cannot mix MWDMA and UDMA without reloading timings each switch
-+ * master to slave. We track the last DMA setup in order to minimise
-+ * reloads.
-+ */
-+
-+static void cs5530_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned long base = ( ap->ioaddr.bmdma_addr & ~0x0F) + 0x20 + 0x10 * ap->hard_port_no;
-+ u32 tuning, timing = 0;
-+ u8 reg;
-+
-+ /* Find out which table to use */
-+ tuning = inl(base + 0x04);
-+
-+ switch(adev->dma_mode) {
-+ case XFER_UDMA_0:
-+ timing = 0x00921250;break;
-+ case XFER_UDMA_1:
-+ timing = 0x00911140;break;
-+ case XFER_UDMA_2:
-+ timing = 0x00911030;break;
-+ case XFER_MW_DMA_0:
-+ timing = 0x00077771;break;
-+ case XFER_MW_DMA_1:
-+ timing = 0x00012121;break;
-+ case XFER_MW_DMA_2:
-+ timing = 0x00002020;break;
-+ default:
-+ BUG();
-+ }
-+ /* Merge in the PIO format bit */
-+ timing |= (tuning & 0x80000000UL);
-+ if (adev->devno == 0) /* Master */
-+ outl(timing, base + 0x04);
-+ else {
-+ if (timing & 0x00100000)
-+ tuning |= 0x00100000; /* UDMA for both */
-+ else
-+ tuning &= ~0x00100000; /* MWDMA for both */
-+ outl(tuning, base + 0x04);
-+ outl(timing, base + 0x0C);
-+ }
-+
-+ /* Set the DMA capable bit in the BMDMA area */
-+ reg = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
-+ reg |= (1 << (5 + adev->devno));
-+ outb(reg, ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
-+
-+ /* Remember the last DMA setup we did */
-+
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * cs5530_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Specifically we have a problem that there is only
-+ * one MWDMA/UDMA bit.
-+ */
-+
-+static int cs5530_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ struct ata_device *prev = ap->private_data;
-+
-+ /* See if the DMA settings could be wrong */
-+ if (adev->dma_mode != 0 && adev != prev && prev != NULL) {
-+ /* Maybe, but do the channels match MWDMA/UDMA ? */
-+ if ((adev->dma_mode >= XFER_UDMA_0 && prev->dma_mode < XFER_UDMA_0) ||
-+ (adev->dma_mode < XFER_UDMA_0 && prev->dma_mode >= XFER_UDMA_0))
-+ /* Switch the mode bits */
-+ cs5530_set_dmamode(ap, adev);
-+ }
-+
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static struct scsi_host_template cs5530_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations cs5530_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cs5530_set_piomode,
-+ .set_dmamode = cs5530_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = cs5530_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct dmi_system_id __initdata palmax_dmi_table[] = {
-+ {
-+ .ident = "Palmax PD1100",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "Cyrix"),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Caddis"),
-+ },
-+ },
-+ { }
-+};
-+
-+static int cs5530_is_palmax(void)
-+{
-+ if (dmi_check_system(palmax_dmi_table)) {
-+ printk(KERN_INFO "Palmax PD1100: Disabling DMA on docking port.\n");
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+/**
-+ * cs5530_init_one - Initialise a CS5530
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Install a driver for the newly found CS5530 companion chip. Most of
-+ * this is just housekeeping. We have to set the chip up correctly and
-+ * turn off various bits of emulation magic.
-+ */
-+
-+static int cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ int compiler_warning_pointless_fix;
-+ struct pci_dev *master_0 = NULL, *cs5530_0 = NULL;
-+ static struct ata_port_info info = {
-+ .sht = &cs5530_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x07,
-+ .port_ops = &cs5530_port_ops
-+ };
-+ /* The docking connector doesn't do UDMA, and it seems not MWDMA */
-+ static struct ata_port_info info_palmax_secondary = {
-+ .sht = &cs5530_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .port_ops = &cs5530_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ dev = NULL;
-+ while ((dev = pci_get_device(PCI_VENDOR_ID_CYRIX, PCI_ANY_ID, dev)) != NULL) {
-+ switch (dev->device) {
-+ case PCI_DEVICE_ID_CYRIX_PCI_MASTER:
-+ master_0 = pci_dev_get(dev);
-+ break;
-+ case PCI_DEVICE_ID_CYRIX_5530_LEGACY:
-+ cs5530_0 = pci_dev_get(dev);
-+ break;
-+ }
-+ }
-+ if (!master_0) {
-+ printk(KERN_ERR DRV_NAME ": unable to locate PCI MASTER function\n");
-+ goto fail_put;
-+ }
-+ if (!cs5530_0) {
-+ printk(KERN_ERR DRV_NAME ": unable to locate CS5530 LEGACY function\n");
-+ goto fail_put;
-+ }
-+
-+ pci_set_master(cs5530_0);
-+ compiler_warning_pointless_fix = pci_set_mwi(cs5530_0);
-+
-+ /*
-+ * Set PCI CacheLineSize to 16-bytes:
-+ * --> Write 0x04 into 8-bit PCI CACHELINESIZE reg of function 0 of the cs5530
-+ *
-+ * Note: This value is constant because the 5530 is only a Geode companion
-+ */
-+
-+ pci_write_config_byte(cs5530_0, PCI_CACHE_LINE_SIZE, 0x04);
-+
-+ /*
-+ * Disable trapping of UDMA register accesses (Win98 hack):
-+ * --> Write 0x5006 into 16-bit reg at offset 0xd0 of function 0 of the cs5530
-+ */
-+
-+ pci_write_config_word(cs5530_0, 0xd0, 0x5006);
-+
-+ /*
-+ * Bit-1 at 0x40 enables MemoryWriteAndInvalidate on internal X-bus:
-+ * The other settings are what is necessary to get the register
-+ * into a sane state for IDE DMA operation.
-+ */
-+
-+ pci_write_config_byte(master_0, 0x40, 0x1e);
-+
-+ /*
-+ * Set max PCI burst size (16-bytes seems to work best):
-+ * 16bytes: set bit-1 at 0x41 (reg value of 0x16)
-+ * all others: clear bit-1 at 0x41, and do:
-+ * 128bytes: OR 0x00 at 0x41
-+ * 256bytes: OR 0x04 at 0x41
-+ * 512bytes: OR 0x08 at 0x41
-+ * 1024bytes: OR 0x0c at 0x41
-+ */
-+
-+ pci_write_config_byte(master_0, 0x41, 0x14);
-+
-+ /*
-+ * These settings are necessary to get the chip
-+ * into a sane state for IDE DMA operation.
-+ */
-+
-+ pci_write_config_byte(master_0, 0x42, 0x00);
-+ pci_write_config_byte(master_0, 0x43, 0xc1);
-+
-+ pci_dev_put(master_0);
-+ pci_dev_put(cs5530_0);
-+
-+ if (cs5530_is_palmax())
-+ port_info[1] = &info_palmax_secondary;
-+
-+ /* Now kick off ATA set up */
-+ return ata_pci_init_one(dev, port_info, 2);
-+
-+fail_put:
-+ if (master_0)
-+ pci_dev_put(master_0);
-+ if (cs5530_0)
-+ pci_dev_put(cs5530_0);
-+ return -ENODEV;
-+}
-+
-+static struct pci_device_id cs5530[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), },
-+ { 0, },
-+};
-+
-+static struct pci_driver cs5530_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = cs5530,
-+ .probe = cs5530_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init cs5530_init(void)
-+{
-+ return pci_register_driver(&cs5530_pci_driver);
-+}
-+
-+
-+static void __exit cs5530_exit(void)
-+{
-+ pci_unregister_driver(&cs5530_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the Cyrix/NS/AMD 5530");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, cs5530);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(cs5530_init);
-+module_exit(cs5530_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5535.c linux-2.6.16-rc6/drivers/scsi/pata_cs5535.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cs5535.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_cs5535.c 2006-03-10 17:05:14.000000000 +0000
-@@ -0,0 +1,286 @@
-+/*
-+ * pata-cs5535.c - CS5535 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon cs5535.c from AMD <Jens.Altmann@amd.com> as cleaned up and
-+ * made readable and Linux style by Wolfgang Zuleger <wolfgang.zuleger@gmx.de
-+ * and Alexander Kiausch <alex.kiausch@t-online.de>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Loosely based on the piix & svwks drivers.
-+ *
-+ * Documentation:
-+ * Available from AMD web site.
-+ * TODO
-+ * Review errata to see if serializing is neccessary
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <asm/msr.h>
-+
-+#define DRV_NAME "cs5535"
-+#define DRV_VERSION "0.2.2"
-+
-+/*
-+ * The Geode (Aka Athlon GX now) uses an internal MSR based
-+ * bus system for control. Demented but there you go.
-+ */
-+
-+#define MSR_ATAC_BASE 0x51300000
-+#define ATAC_GLD_MSR_CAP (MSR_ATAC_BASE+0)
-+#define ATAC_GLD_MSR_CONFIG (MSR_ATAC_BASE+0x01)
-+#define ATAC_GLD_MSR_SMI (MSR_ATAC_BASE+0x02)
-+#define ATAC_GLD_MSR_ERROR (MSR_ATAC_BASE+0x03)
-+#define ATAC_GLD_MSR_PM (MSR_ATAC_BASE+0x04)
-+#define ATAC_GLD_MSR_DIAG (MSR_ATAC_BASE+0x05)
-+#define ATAC_IO_BAR (MSR_ATAC_BASE+0x08)
-+#define ATAC_RESET (MSR_ATAC_BASE+0x10)
-+#define ATAC_CH0D0_PIO (MSR_ATAC_BASE+0x20)
-+#define ATAC_CH0D0_DMA (MSR_ATAC_BASE+0x21)
-+#define ATAC_CH0D1_PIO (MSR_ATAC_BASE+0x22)
-+#define ATAC_CH0D1_DMA (MSR_ATAC_BASE+0x23)
-+#define ATAC_PCI_ABRTERR (MSR_ATAC_BASE+0x24)
-+
-+#define ATAC_BM0_CMD_PRIM 0x00
-+#define ATAC_BM0_STS_PRIM 0x02
-+#define ATAC_BM0_PRD 0x04
-+
-+#define CS5535_CABLE_DETECT 0x48
-+
-+#define CS5535_BAD_PIO(timings) ( (timings&~0x80000000UL)==0x00009172 )
-+
-+/**
-+ * cs5535_cable_detect - detect cable type
-+ * @ap: Port to detect on
-+ *
-+ * Perform cable detection for ATA66 capable cable. Return a libata
-+ * cable type.
-+ */
-+
-+static int cs5535_cable_detect(struct ata_port *ap)
-+{
-+ u8 cable;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_byte(pdev, CS5535_CABLE_DETECT, &cable);
-+ if (cable & 1)
-+ return ATA_CBL_PATA80;
-+ else
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * cs5535_phy_reset - reset/probe
-+ * @ap: Port to reset
-+ *
-+ * Reset and configure a port
-+ */
-+
-+static void cs5535_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = cs5535_cable_detect(ap);
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * cs5535_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Set our PIO requirements. The CS5535 is pretty clean about all this
-+ */
-+
-+static void cs5535_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u16 pio_timings[5] = {
-+ 0xF7F4, 0x53F3, 0x13F1, 0x5131, 0x1131
-+ };
-+ static u16 pio_cmd_timings[5] = {
-+ 0xF7F4, 0x53F3, 0x13F1, 0x5131, 0x1131
-+ };
-+ u32 reg, dummy;
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+
-+ int mode = adev->pio_mode - XFER_PIO_0;
-+ int cmdmode = mode;
-+
-+ /* Command timing has to be for the lowest of the pair of devices */
-+ if (pair) {
-+ int pairmode = pair->pio_mode - XFER_PIO_0;
-+ cmdmode = min(mode, pairmode);
-+ /* Write the other drive timing register if it changed */
-+ if (cmdmode < pairmode)
-+ wrmsr(ATAC_CH0D0_PIO + 2 * pair->devno,
-+ pio_cmd_timings[cmdmode] << 16 | pio_timings[pairmode], 0);
-+ }
-+ /* Write the drive timing register */
-+ wrmsr(ATAC_CH0D0_PIO + 2 * adev->devno,
-+ pio_cmd_timings[cmdmode] << 16 | pio_timings[mode], 0);
-+
-+ /* Set the PIO "format 1" bit in the DMA timing register */
-+ rdmsr(ATAC_CH0D0_DMA + 2 * adev->devno, reg, dummy);
-+ wrmsr(ATAC_CH0D0_DMA + 2 * adev->devno, reg | 0x80000000UL, 0);
-+}
-+
-+/**
-+ * cs5535_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ */
-+
-+static void cs5535_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u32 udma_timings[5] = { 0x7F7436A1, 0x7F733481, 0x7F723261, 0x7F713161, 0x7F703061 };
-+ static u32 mwdma_timings[3] = { 0x7F0FFFF3, 0x7F035352, 0x7F024241 };
-+ u32 reg, dummy;
-+ int mode = adev->dma_mode;
-+
-+ rdmsr(ATAC_CH0D0_DMA + 2 * adev->devno, reg, dummy);
-+ reg &= 0x80000000UL;
-+ if (mode >= XFER_UDMA_0)
-+ reg |= udma_timings[mode - XFER_UDMA_0];
-+ else
-+ reg |= mwdma_timings[mode - XFER_MW_DMA_0];
-+ wrmsr(ATAC_CH0D0_DMA + 2 * adev->devno, reg, 0);
-+}
-+
-+static struct scsi_host_template cs5535_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations cs5535_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cs5535_set_piomode,
-+ .set_dmamode = cs5535_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = cs5535_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * cs5535_init_one - Initialise a CS5530
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Install a driver for the newly found CS5530 companion chip. Most of
-+ * this is just housekeeping. We have to set the chip up correctly and
-+ * turn off various bits of emulation magic.
-+ */
-+
-+static int cs5535_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &cs5535_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f,
-+ .port_ops = &cs5535_port_ops
-+ };
-+ struct ata_port_info *ports[1] = { &info };
-+
-+ u32 timings, dummy;
-+
-+ /* Check the BIOS set the initial timing clock. If not set the
-+ timings for PIO0 */
-+ rdmsr(ATAC_CH0D0_PIO, timings, dummy);
-+ if (CS5535_BAD_PIO(timings))
-+ wrmsr(ATAC_CH0D0_PIO, 0xF7F4F7F4UL, 0);
-+ rdmsr(ATAC_CH0D1_PIO, timings, dummy);
-+ if (CS5535_BAD_PIO(timings))
-+ wrmsr(ATAC_CH0D1_PIO, 0xF7F4F7F4UL, 0);
-+ return ata_pci_init_one(dev, ports, 1);
-+}
-+
-+static struct pci_device_id cs5535[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_NS, 0x002D), },
-+ { 0, },
-+};
-+
-+static struct pci_driver cs5535_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = cs5535,
-+ .probe = cs5535_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init cs5535_init(void)
-+{
-+ return pci_register_driver(&cs5535_pci_driver);
-+}
-+
-+
-+static void __exit cs5535_exit(void)
-+{
-+ pci_unregister_driver(&cs5535_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox, Jens Altmann, Wolfgan Zuleger, Alexander Kiausch");
-+MODULE_DESCRIPTION("low-level driver for the NS/AMD 5530");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, cs5535);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(cs5535_init);
-+module_exit(cs5535_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cypress.c linux-2.6.16-rc6/drivers/scsi/pata_cypress.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_cypress.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_cypress.c 2006-02-16 15:37:46.000000000 +0000
-@@ -0,0 +1,215 @@
-+/*
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_cypress"
-+#define DRV_VERSION "0.1"
-+
-+/* here are the offset definitions for the registers */
-+
-+enum {
-+ CY82_IDE_CMDREG = 0x04,
-+ CY82_IDE_ADDRSETUP = 0x48,
-+ CY82_IDE_MASTER_IOR = 0x4C,
-+ CY82_IDE_MASTER_IOW = 0x4D,
-+ CY82_IDE_SLAVE_IOR = 0x4E,
-+ CY82_IDE_SLAVE_IOW = 0x4F,
-+ CY82_IDE_MASTER_8BIT = 0x50,
-+ CY82_IDE_SLAVE_8BIT = 0x51,
-+
-+ CY82_INDEX_PORT = 0x22,
-+ CY82_DATA_PORT = 0x23,
-+
-+ CY82_INDEX_CTRLREG1 = 0x01,
-+ CY82_INDEX_CHANNEL0 = 0x30,
-+ CY82_INDEX_CHANNEL1 = 0x31,
-+ CY82_INDEX_TIMEOUT = 0x32
-+};
-+
-+/* Phee Phy Pho Phum */
-+
-+static void cy82c693_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * cy82c693_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup.
-+ */
-+
-+static void cy82c693_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct ata_timing t;
-+ const unsigned long T = 1000000 / 33;
-+ short time_16, time_8;
-+ u32 addr;
-+
-+ if (ata_timing_compute(adev, adev->pio_mode, &t, T, 1) < 0) {
-+ printk(KERN_ERR DRV_NAME ": mome computation failed.\n");
-+ return;
-+ }
-+
-+ time_16 = FIT(t.recover, 0, 15) | (FIT(t.active, 0, 15) << 4);
-+ time_8 = FIT(t.act8b, 0, 15) | (FIT(t.rec8b, 0, 15) << 4);
-+
-+ if (adev->devno == 0) {
-+ pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);
-+
-+ addr &= ~0x0F; /* Mask bits */
-+ addr |= FIT(t.setup, 0, 15);
-+
-+ pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);
-+ pci_write_config_byte(pdev, CY82_IDE_MASTER_IOR, time_16);
-+ pci_write_config_byte(pdev, CY82_IDE_MASTER_IOW, time_16);
-+ pci_write_config_byte(pdev, CY82_IDE_MASTER_8BIT, time_8);
-+ } else {
-+ pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);
-+
-+ addr &= ~0xF0; /* Mask bits */
-+ addr |= (FIT(t.setup, 0, 15) << 4);
-+
-+ pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);
-+ pci_write_config_byte(pdev, CY82_IDE_SLAVE_IOR, time_16);
-+ pci_write_config_byte(pdev, CY82_IDE_SLAVE_IOW, time_16);
-+ pci_write_config_byte(pdev, CY82_IDE_SLAVE_8BIT, time_8);
-+ }
-+}
-+
-+/**
-+ * cy82c693_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the DMA mode setup.
-+ */
-+
-+static void cy82c693_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ int reg = CY82_INDEX_CHANNEL0 + ap->hard_port_no;
-+
-+ /* Be afraid, be very afraid. Magic registers in low I/O space */
-+ outb(reg, 0x22);
-+ outb(adev->dma_mode - XFER_MW_DMA_0, 0x23);
-+
-+ /* 0x50 gives the best behaviour on the Alpha's using this chip */
-+ outb(CY82_INDEX_TIMEOUT, 0x22);
-+ outb(0x50, 0x23);
-+}
-+
-+static struct scsi_host_template cy82c693_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations cy82c693_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = cy82c693_set_piomode,
-+ .set_dmamode = cy82c693_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = cy82c693_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int cy82c693_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &cy82c693_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &cy82c693_port_ops
-+ };
-+ static struct ata_port_info *port_info[1] = { &info };
-+
-+ /* Devfn 1 is the ATA primary. The secondary is magic and on devfn2. For the
-+ moment we don't handle the secondary. FIXME */
-+
-+ if (PCI_FUNC(pdev->devfn) != 1)
-+ return -ENODEV;
-+
-+ return ata_pci_init_one(pdev, port_info, 1);
-+}
-+
-+static struct pci_device_id cy82c693[] = {
-+ { PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0, },
-+};
-+
-+static struct pci_driver cy82c693_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = cy82c693,
-+ .probe = cy82c693_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init cy82c693_init(void)
-+{
-+ return pci_register_driver(&cy82c693_pci_driver);
-+}
-+
-+
-+static void __exit cy82c693_exit(void)
-+{
-+ pci_unregister_driver(&cy82c693_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the CY82C693 PATA controller");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, cy82c693);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(cy82c693_init);
-+module_exit(cy82c693_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_efar.c linux-2.6.16-rc6/drivers/scsi/pata_efar.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_efar.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_efar.c 2006-02-16 15:37:53.000000000 +0000
-@@ -0,0 +1,341 @@
-+/*
-+ * pata_efar.c - EFAR PIIX clone controller driver
-+ *
-+ * (C) 2005 Red Hat <alan@redhat.com>
-+ *
-+ * Some parts based on ata_piix.c by Jeff Garzik and others.
-+ *
-+ * The EFAR is a PIIX4 clone with UDMA66 support. Unlike the later
-+ * Intel ICH controllers the EFAR widened the UDMA mode register bits
-+ * and doesn't require the funky clock selection.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_efar"
-+#define DRV_VERSION "0.1"
-+
-+/**
-+ * efar_cable_detect - check for 40/80 pin
-+ * @ap: Port
-+ *
-+ * Perform cable detection for the EFAR ATA interface. This is
-+ * different to the PIIX arrangement
-+ */
-+
-+static int efar_cable_detect(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 tmp;
-+
-+ pci_read_config_byte(pdev, 0x47, &tmp);
-+ if (tmp & (2 >> ap->hard_port_no))
-+ return ATA_CBL_PATA40;
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * efar_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void efar_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ const struct pci_bits efar_enable_bits[] = {
-+ { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
-+ { 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &efar_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = efar_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * efar_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set PIO mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void efar_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio = adev->pio_mode - XFER_PIO_0;
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ unsigned int idetm_port= ap->hard_port_no ? 0x42 : 0x40;
-+ u16 idetm_data;
-+ int control = 0;
-+
-+ /*
-+ * See Intel Document 298600-004 for the timing programing rules
-+ * for PIIX/ICH. The EFAR is a clone so very similar
-+ */
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-+
-+ if (pio > 2)
-+ control |= 1; /* TIME1 enable */
-+ if (ata_pio_need_iordy(adev)) /* PIO 3/4 require IORDY */
-+ control |= 2; /* IE enable */
-+ /* Intel specifies that the PPE functionality is for disk only */
-+ if (adev->class == ATA_DEV_ATA)
-+ control |= 4; /* PPE enable */
-+
-+ pci_read_config_word(dev, idetm_port, &idetm_data);
-+
-+ /* Enable PPE, IE and TIME as appropriate */
-+
-+ if (adev->devno == 0) {
-+ idetm_data &= 0xCCF0;
-+ idetm_data |= control;
-+ idetm_data |= (timings[pio][0] << 12) |
-+ (timings[pio][1] << 8);
-+ } else {
-+ int shift = 4 * ap->hard_port_no;
-+ u8 slave_data;
-+
-+ idetm_data &= 0xCC0F;
-+ idetm_data |= (control << 4);
-+
-+ /* Slave timing in seperate register */
-+ pci_read_config_byte(dev, 0x44, &slave_data);
-+ slave_data &= 0x0F << shift;
-+ slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << shift;
-+ pci_write_config_byte(dev, 0x44, slave_data);
-+ }
-+
-+ idetm_data |= 0x4000; /* Ensure SITRE is enabled */
-+ pci_write_config_word(dev, idetm_port, idetm_data);
-+}
-+
-+/**
-+ * efar_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void efar_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ u8 master_port = ap->hard_port_no ? 0x42 : 0x40;
-+ u16 master_data;
-+ u8 speed = adev->dma_mode;
-+ int devid = adev->devno + 2 * ap->hard_port_no;
-+ u8 udma_enable;
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-+
-+ pci_read_config_word(dev, master_port, &master_data);
-+ pci_read_config_byte(dev, 0x48, &udma_enable);
-+
-+ if (speed >= XFER_UDMA_0) {
-+ unsigned int udma = adev->dma_mode - XFER_UDMA_0;
-+ u16 udma_timing;
-+
-+ udma_enable |= (1 << devid);
-+
-+ /* Load the UDMA mode number */
-+ pci_read_config_word(dev, 0x4A, &udma_timing);
-+ udma_timing &= ~(7 << (4 * devid));
-+ udma_timing |= udma << (4 * devid);
-+ pci_write_config_word(dev, 0x4A, udma_timing);
-+ } else {
-+ /*
-+ * MWDMA is driven by the PIO timings. We must also enable
-+ * IORDY unconditionally along with TIME1. PPE has already
-+ * been set when the PIO timing was set.
-+ */
-+ unsigned int mwdma = adev->dma_mode - XFER_MW_DMA_0;
-+ unsigned int control;
-+ u8 slave_data;
-+ const unsigned int needed_pio[3] = {
-+ XFER_PIO_0, XFER_PIO_3, XFER_PIO_4
-+ };
-+ int pio = needed_pio[mwdma] - XFER_PIO_0;
-+
-+ control = 3; /* IORDY|TIME1 */
-+
-+ /* If the drive MWDMA is faster than it can do PIO then
-+ we must force PIO into PIO0 */
-+
-+ if (adev->pio_mode < needed_pio[mwdma])
-+ /* Enable DMA timing only */
-+ control |= 8; /* PIO cycles in PIO0 */
-+
-+ if (adev->devno) { /* Slave */
-+ master_data &= 0xFF4F; /* Mask out IORDY|TIME1|DMAONLY */
-+ master_data |= control << 4;
-+ pci_read_config_byte(dev, 0x44, &slave_data);
-+ slave_data &= (0x0F + 0xE1 * ap->hard_port_no);
-+ /* Load the matching timing */
-+ slave_data |= ((timings[pio][0] << 2) | timings[pio][1]) << (ap->hard_port_no ? 4 : 0);
-+ pci_write_config_byte(dev, 0x44, slave_data);
-+ } else { /* Master */
-+ master_data &= 0xCCF4; /* Mask out IORDY|TIME1|DMAONLY
-+ and master timing bits */
-+ master_data |= control;
-+ master_data |=
-+ (timings[pio][0] << 12) |
-+ (timings[pio][1] << 8);
-+ }
-+ udma_enable &= ~(1 << devid);
-+ pci_write_config_word(dev, master_port, master_data);
-+ }
-+ pci_write_config_byte(dev, 0x48, udma_enable);
-+}
-+
-+static struct scsi_host_template efar_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations efar_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = efar_set_piomode,
-+ .set_dmamode = efar_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = efar_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+
-+/**
-+ * efar_init_one - Register EFAR ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in efar_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int efar_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ static struct ata_port_info info = {
-+ .sht = &efar_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma1-2 */
-+ .udma_mask = 0x0f, /* UDMA 66 */
-+ .port_ops = &efar_ops,
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id efar_pci_tbl[] = {
-+ { 0x1055, 0x9130, PCI_ANY_ID, PCI_ANY_ID, },
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver efar_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = efar_pci_tbl,
-+ .probe = efar_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init efar_init(void)
-+{
-+ return pci_register_driver(&efar_pci_driver);
-+}
-+
-+static void __exit efar_exit(void)
-+{
-+ pci_unregister_driver(&efar_pci_driver);
-+}
-+
-+
-+module_init(efar_init);
-+module_exit(efar_exit);
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("SCSI low-level driver for EFAR PIIX clones");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, efar_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt34x.c linux-2.6.16-rc6/drivers/scsi/pata_hpt34x.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt34x.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_hpt34x.c 2006-03-10 17:05:51.000000000 +0000
-@@ -0,0 +1,206 @@
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "hpt34x"
-+#define DRV_VERSION "0.1.1"
-+
-+/**
-+ * hpt34x_bus_reset - reset the hpt34x bus
-+ * @ap: ATA port to reset
-+ *
-+ * Perform the housekeeping when doing an ATA bus reeset. We just
-+ * need to force the cable type.
-+ */
-+
-+static void hpt34x_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * hpt34x_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Set our PIO requirements. This is fairly simple on the HPT34x as
-+ * all we have to do is clear the MWDMA and UDMA bits then load the
-+ * mode number.
-+ */
-+
-+static void hpt34x_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 r1, r2;
-+ int dn = 2 * ap->hard_port_no + adev->devno;
-+
-+ pci_read_config_dword(pdev, 0x44, &r1);
-+ pci_read_config_dword(pdev, 0x48, &r2);
-+ /* Load the PIO timing number */
-+ r1 &= ~(7 << (3 * dn));
-+ r1 |= (adev->pio_mode - XFER_PIO_0) << (3 * dn);
-+ r2 &= ~(0x11 << dn); /* Clear MWDMA and UDMA bits */
-+
-+ pci_write_config_dword(pdev, 0x44, r1);
-+ pci_write_config_dword(pdev, 0x48, r2);
-+}
-+
-+/**
-+ * hpt34x_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * Set up the channel for MWDMA or UDMA modes. Much the same as with
-+ * PIO, load the mode number and then set MWDMA or UDMA flag.
-+ */
-+
-+static void hpt34x_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 r1, r2;
-+ int dn = 2 * ap->hard_port_no + adev->devno;
-+ int mode_num = adev->dma_mode & 0x0F;
-+
-+ pci_read_config_dword(pdev, 0x44, &r1);
-+ pci_read_config_dword(pdev, 0x48, &r2);
-+ /* Load the timing number */
-+ r1 &= ~(7 << (3 * dn));
-+ r1 |= (mode_num << (3 * dn));
-+ r2 &= ~(0x11 << dn); /* Clear MWDMA and UDMA bits */
-+
-+ if (adev->dma_mode >= XFER_UDMA_0)
-+ r2 |= 0x01 << dn; /* Ultra mode */
-+ else
-+ r2 |= 0x10 << dn; /* MWDMA */
-+
-+ pci_write_config_dword(pdev, 0x44, r1);
-+ pci_write_config_dword(pdev, 0x48, r2);
-+}
-+
-+static struct scsi_host_template hpt34x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations hpt34x_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt34x_set_piomode,
-+ .set_dmamode = hpt34x_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt34x_phy_reset,
-+
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * hpt34x_init_one - Initialise an HPT343/363
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Perform basic initialisation. The chip has a quirk that it won't
-+ * function unless it is at XX00. The old ATA driver touched this up
-+ * but we leave it for pci quirks to do properly.
-+ */
-+
-+static int hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &hpt34x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x07,
-+ .port_ops = &hpt34x_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+ u16 cmd;
-+
-+ /* Initialize the board */
-+ pci_write_config_word(dev, 0x80, 0x00);
-+ /* Check if it is a 343 or a 363. 363 has COMMAND_MEMORY set */
-+ pci_read_config_word(dev, PCI_COMMAND, &cmd);
-+ if (cmd & PCI_COMMAND_MEMORY)
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0xF0);
-+ else
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x20);
-+
-+ /* Now kick off ATA set up */
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id hpt34x[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT343), },
-+ { 0, },
-+};
-+
-+static struct pci_driver hpt34x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = hpt34x,
-+ .probe = hpt34x_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init hpt34x_init(void)
-+{
-+ return pci_register_driver(&hpt34x_pci_driver);
-+}
-+
-+
-+static void __exit hpt34x_exit(void)
-+{
-+ pci_unregister_driver(&hpt34x_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the Highpoint HPT343/363");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, hpt34x);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(hpt34x_init);
-+module_exit(hpt34x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt366.c linux-2.6.16-rc6/drivers/scsi/pata_hpt366.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt366.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_hpt366.c 2006-03-10 17:06:06.000000000 +0000
-@@ -0,0 +1,479 @@
-+/*
-+ * Libata driver for the highpoint 366 and 368 UDMA66 ATA controllers.
-+ *
-+ * This driver is heavily based upon:
-+ *
-+ * linux/drivers/ide/pci/hpt366.c Version 0.36 April 25, 2003
-+ *
-+ * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
-+ * Portions Copyright (C) 2001 Sun Microsystems, Inc.
-+ * Portions Copyright (C) 2003 Red Hat Inc
-+ *
-+ *
-+ * TODO
-+ * Maybe PLL mode
-+ * Look into engine reset on timeout errors. Should not be
-+ * required.
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "hpt36x"
-+#define DRV_VERSION "0.2.1"
-+
-+struct hpt_clock {
-+ u8 xfer_speed;
-+ u32 timing;
-+};
-+
-+/* key for bus clock timings
-+ * bit
-+ * 0:3 data_high_time. inactive time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 4:8 data_low_time. active time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 9:12 cmd_high_time. inactive time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 13:17 cmd_low_time. active time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 18:21 udma_cycle_time. clock freq and clock cycles for UDMA xfer.
-+ * during task file register access.
-+ * 22:24 pre_high_time. time to initialize 1st cycle for PIO and MW DMA
-+ * xfer.
-+ * 25:27 cmd_pre_high_time. time to initialize 1st PIO cycle for task
-+ * register access.
-+ * 28 UDMA enable
-+ * 29 DMA enable
-+ * 30 PIO_MST enable. if set, the chip is in bus master mode during
-+ * PIO.
-+ * 31 FIFO enable.
-+ */
-+
-+static struct chipset_bus_clock_list_entry hpt366_40[] = {
-+ { XFER_UDMA_4, 0x900fd943 },
-+ { XFER_UDMA_3, 0x900ad943 },
-+ { XFER_UDMA_2, 0x900bd943 },
-+ { XFER_UDMA_1, 0x9008d943 },
-+ { XFER_UDMA_0, 0x9008d943 },
-+
-+ { XFER_MW_DMA_2, 0xa008d943 },
-+ { XFER_MW_DMA_1, 0xa010d955 },
-+ { XFER_MW_DMA_0, 0xa010d9fc },
-+
-+ { XFER_PIO_4, 0xc008d963 },
-+ { XFER_PIO_3, 0xc010d974 },
-+ { XFER_PIO_2, 0xc010d997 },
-+ { XFER_PIO_1, 0xc010d9c7 },
-+ { XFER_PIO_0, 0xc018d9d9 },
-+ { 0, 0x0120d9d9 }
-+};
-+
-+static struct chipset_bus_clock_list_entry hpt366_33[] = {
-+ { XFER_UDMA_4, 0x90c9a731 },
-+ { XFER_UDMA_3, 0x90cfa731 },
-+ { XFER_UDMA_2, 0x90caa731 },
-+ { XFER_UDMA_1, 0x90cba731 },
-+ { XFER_UDMA_0, 0x90c8a731 },
-+
-+ { XFER_MW_DMA_2, 0xa0c8a731 },
-+ { XFER_MW_DMA_1, 0xa0c8a732 }, /* 0xa0c8a733 */
-+ { XFER_MW_DMA_0, 0xa0c8a797 },
-+
-+ { XFER_PIO_4, 0xc0c8a731 },
-+ { XFER_PIO_3, 0xc0c8a742 },
-+ { XFER_PIO_2, 0xc0d0a753 },
-+ { XFER_PIO_1, 0xc0d0a7a3 }, /* 0xc0d0a793 */
-+ { XFER_PIO_0, 0xc0d0a7aa }, /* 0xc0d0a7a7 */
-+ { 0, 0x0120a7a7 }
-+};
-+
-+static struct chipset_bus_clock_list_entry hpt366_25[] = {
-+ { XFER_UDMA_4, 0x90c98521 },
-+ { XFER_UDMA_3, 0x90cf8521 },
-+ { XFER_UDMA_2, 0x90cf8521 },
-+ { XFER_UDMA_1, 0x90cb8521 },
-+ { XFER_UDMA_0, 0x90cb8521 },
-+
-+ { XFER_MW_DMA_2, 0xa0ca8521 },
-+ { XFER_MW_DMA_1, 0xa0ca8532 },
-+ { XFER_MW_DMA_0, 0xa0ca8575 },
-+
-+ { XFER_PIO_4, 0xc0ca8521 },
-+ { XFER_PIO_3, 0xc0ca8532 },
-+ { XFER_PIO_2, 0xc0ca8542 },
-+ { XFER_PIO_1, 0xc0d08572 },
-+ { XFER_PIO_0, 0xc0d08585 },
-+ { 0, 0x01208585 }
-+};
-+
-+static const char *bad_ata33[] = {
-+ "Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
-+ "Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
-+ "Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
-+ "Maxtor 90510D4",
-+ "Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
-+ "Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
-+ "Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
-+ NULL
-+};
-+
-+static const char *bad_ata66_4[] = {
-+ "IBM-DTLA-307075",
-+ "IBM-DTLA-307060",
-+ "IBM-DTLA-307045",
-+ "IBM-DTLA-307030",
-+ "IBM-DTLA-307020",
-+ "IBM-DTLA-307015",
-+ "IBM-DTLA-305040",
-+ "IBM-DTLA-305030",
-+ "IBM-DTLA-305020",
-+ "IC35L010AVER07-0",
-+ "IC35L020AVER07-0",
-+ "IC35L030AVER07-0",
-+ "IC35L040AVER07-0",
-+ "IC35L060AVER07-0",
-+ "WDC AC310200R",
-+ NULL
-+};
-+
-+static const char *bad_ata66_3[] = {
-+ "WDC AC310200R",
-+ NULL
-+};
-+
-+static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr, const char *list[])
-+{
-+ unsigned char model_num[40];
-+ char *s;
-+ unsigned int len;
-+ int i = 0;
-+
-+ ata_dev_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
-+ sizeof(model_num));
-+ s = &model_num[0];
-+ len = strnlen(s, sizeof(model_num));
-+
-+ /* ATAPI specifies that empty space is blank-filled; remove blanks */
-+ while ((len > 0) && (s[len - 1] == ' ')) {
-+ len--;
-+ s[len] = 0;
-+ }
-+
-+ while(list[i] != NULL) {
-+ if (!strncmp(list[i], s, len)) {
-+ printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n",
-+ modestr, list[i]);
-+ return 1;
-+ }
-+ i++;
-+ }
-+ return 0;
-+}
-+
-+/**
-+ * hpt366_filter - mode selection filter
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Block UDMA on devices that cause trouble with this controller.
-+ */
-+
-+static unsigned int hpt366_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+ if (adev->class != ATA_DEV_ATA)
-+ return mask;
-+ if (hpt_dma_blacklisted(adev, "UDMA", bad_ata33))
-+ return 0;
-+ if (hpt_dma_blacklisted(adev, "UDMA3", bad_ata66_3))
-+ return mask & 0x07;
-+ if (hpt_dma_blacklisted(adev, "UDMA4", bad_ata66_4))
-+ return mask & 0x0F;
-+ return mask;
-+}
-+
-+/**
-+ * hpt36x_find_mode - reset the hpt36x bus
-+ * @ap: ATA port
-+ * @speed: transfer mode
-+ *
-+ * Return the 32bit register programming information for this channel
-+ * that matches the speed provided.
-+ */
-+
-+static u32 hpt36x_find_mode(struct ata_port *ap, int speed)
-+{
-+ struct hpt_clock *clocks = ap->host_set->private_data;
-+
-+ while(clocks->xfer_speed) {
-+ if (clocks->xfer_speed == speed)
-+ return clocks->timing;
-+ clocks++;
-+ }
-+ BUG();
-+}
-+
-+/**
-+ * hpt36x_phy_reset - reset the hpt36x bus
-+ * @ap: ATA port to reset
-+ *
-+ * Perform the PHY reset handling for the 366/368
-+ */
-+
-+static void hpt36x_phy_reset(struct ata_port *ap)
-+{
-+ u8 scr2, ata66;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_byte(pdev, 0x5A, &ata66);
-+ if (ata66 & (1 << ap->hard_port_no))
-+ ap->cbl = ATA_CBL_PATA40;
-+ else
-+ ap->cbl = ATA_CBL_PATA80;
-+
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * hpt366_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Perform PIO mode setup.
-+ */
-+
-+static void hpt366_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ if (fast & 0x80) {
-+ fast &= ~0x80;
-+ pci_write_config_byte(pdev, addr2, fast);
-+ }
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt36x_find_mode(ap, adev->pio_mode);
-+ mode &= ~0x8000000; /* No FIFO in PIO */
-+ mode &= ~0x30070000; /* Leave config bits alone */
-+ reg &= 0x30070000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt366_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * Set up the channel for MWDMA or UDMA modes. Much the same as with
-+ * PIO, load the mode number and then set MWDMA or UDMA flag.
-+ */
-+
-+static void hpt366_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ if (fast & 0x80) {
-+ fast &= ~0x80;
-+ pci_write_config_byte(pdev, addr2, fast);
-+ }
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt36x_find_mode(ap, adev->dma_mode);
-+ mode |= 0x8000000; /* FIFO in MWDMA or UDMA */
-+ mode &= ~0xC0000000; /* Leave config bits alone */
-+ reg &= 0xC0000000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+static struct scsi_host_template hpt36x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+/*
-+ * Configuration for HPT366/68
-+ */
-+
-+static struct ata_port_operations hpt366_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt366_set_piomode,
-+ .set_dmamode = hpt366_set_dmamode,
-+ .mode_filter = hpt366_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt36x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * hpt36x_init_one - Initialise an HPT366/368
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Initialise an HPT36x device. There are some interesting complications
-+ * here. Firstly the chip may report 366 and be one of several variants.
-+ * Secondly all the timings depend on the clock for the chip which we must
-+ * detect and look up
-+ *
-+ * This is the known chip mappings. It may be missing a couple of later
-+ * releases.
-+ *
-+ * Chip version PCI Rev Notes
-+ * HPT366 4 (HPT366) 0 UDMA66
-+ * HPT366 4 (HPT366) 1 UDMA66
-+ * HPT368 4 (HPT366) 2 UDMA66
-+ * HPT37x/30x 4 (HPT366) 3+ Other driver
-+ *
-+ */
-+
-+static int hpt36x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info_hpt366 = {
-+ .sht = &hpt366_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f,
-+ .port_ops = &hpt370_port_ops
-+ };
-+ struct ata_port_info *port_info[2] = {&info_hpt366, &info_hpt366};
-+
-+ u8 irqmask;
-+ u32 class_rev;
-+ u32 reg1;
-+
-+ struct hpt_chip *chip_table;
-+ int clock_slot;
-+
-+ pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
-+ class_rev &= 0xFF;
-+
-+ /* May be a later chip in disguise. Check */
-+ /* Newer chips are in the HPT36x driver. Ignore them */
-+ if (class_rev > 2)
-+ return -ENODEV;
-+
-+ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
-+ pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
-+ pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
-+
-+ pci_read_config_byte(dev, 0x51, &drive_fast);
-+ if (drive_fast & 0x80)
-+ pci_write_config_byte(dev, 0x51, drive_fast & ~0x80);
-+
-+ pci_read_config_dword(dev, 0x40, &reg1);
-+
-+ /* PCI clocking determines the ATA timing values to use */
-+ switch((reg1 & 0x700) {
-+ case 5:
-+ port->private_data = hpt366_40;
-+ break;
-+ case 9:
-+ port->private_data = hpt366_25;
-+ break;
-+ default:
-+ port->private_data = hpt366_33;
-+ break;
-+ }
-+ port_info[0] = port_info[1] = port;
-+ /* Now kick off ATA set up */
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id hpt36x[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
-+ { 0, },
-+};
-+
-+static struct pci_driver hpt36x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = hpt36x,
-+ .probe = hpt36x_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init hpt36x_init(void)
-+{
-+ return pci_register_driver(&hpt36x_pci_driver);
-+}
-+
-+
-+static void __exit hpt36x_exit(void)
-+{
-+ pci_unregister_driver(&hpt36x_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the Highpoint HPT366/368");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, hpt36x);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(hpt36x_init);
-+module_exit(hpt36x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt37x.c linux-2.6.16-rc6/drivers/scsi/pata_hpt37x.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt37x.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_hpt37x.c 2006-03-10 17:03:35.000000000 +0000
-@@ -0,0 +1,1233 @@
-+/*
-+ * Libata driver for the highpoint 37x and 30x UDMA66 ATA controllers.
-+ *
-+ * This driver is heavily based upon:
-+ *
-+ * linux/drivers/ide/pci/hpt366.c Version 0.36 April 25, 2003
-+ *
-+ * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
-+ * Portions Copyright (C) 2001 Sun Microsystems, Inc.
-+ * Portions Copyright (C) 2003 Red Hat Inc
-+ *
-+ * TODO
-+ * PLL mode
-+ * Look into engine reset on timeout errors. Should not be
-+ * required.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "hpt37x"
-+#define DRV_VERSION "0.2.2"
-+
-+struct hpt_clock {
-+ u8 xfer_speed;
-+ u32 timing;
-+};
-+
-+struct hpt_chip {
-+ const char *name;
-+ unsigned int base;
-+ struct hpt_clock *clocks[4];
-+};
-+
-+/* key for bus clock timings
-+ * bit
-+ * 0:3 data_high_time. inactive time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 4:8 data_low_time. active time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 9:12 cmd_high_time. inactive time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 13:17 cmd_low_time. active time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 18:21 udma_cycle_time. clock freq and clock cycles for UDMA xfer.
-+ * during task file register access.
-+ * 22:24 pre_high_time. time to initialize 1st cycle for PIO and MW DMA
-+ * xfer.
-+ * 25:27 cmd_pre_high_time. time to initialize 1st PIO cycle for task
-+ * register access.
-+ * 28 UDMA enable
-+ * 29 DMA enable
-+ * 30 PIO_MST enable. if set, the chip is in bus master mode during
-+ * PIO.
-+ * 31 FIFO enable.
-+ */
-+
-+/* from highpoint documentation. these are old values */
-+static struct hpt_clock hpt370_timings_33[] = {
-+/* { XFER_UDMA_5, 0x1A85F442, 0x16454e31 }, */
-+ { XFER_UDMA_5, 0x16454e31 },
-+ { XFER_UDMA_4, 0x16454e31 },
-+ { XFER_UDMA_3, 0x166d4e31 },
-+ { XFER_UDMA_2, 0x16494e31 },
-+ { XFER_UDMA_1, 0x164d4e31 },
-+ { XFER_UDMA_0, 0x16514e31 },
-+
-+ { XFER_MW_DMA_2, 0x26514e21 },
-+ { XFER_MW_DMA_1, 0x26514e33 },
-+ { XFER_MW_DMA_0, 0x26514e97 },
-+
-+ { XFER_PIO_4, 0x06514e21 },
-+ { XFER_PIO_3, 0x06514e22 },
-+ { XFER_PIO_2, 0x06514e33 },
-+ { XFER_PIO_1, 0x06914e43 },
-+ { XFER_PIO_0, 0x06914e57 },
-+ { 0, 0x06514e57 }
-+};
-+
-+static struct hpt_clock hpt370_timings_66[] = {
-+ { XFER_UDMA_5, 0x14846231 },
-+ { XFER_UDMA_4, 0x14886231 },
-+ { XFER_UDMA_3, 0x148c6231 },
-+ { XFER_UDMA_2, 0x148c6231 },
-+ { XFER_UDMA_1, 0x14906231 },
-+ { XFER_UDMA_0, 0x14986231 },
-+
-+ { XFER_MW_DMA_2, 0x26514e21 },
-+ { XFER_MW_DMA_1, 0x26514e33 },
-+ { XFER_MW_DMA_0, 0x26514e97 },
-+
-+ { XFER_PIO_4, 0x06514e21 },
-+ { XFER_PIO_3, 0x06514e22 },
-+ { XFER_PIO_2, 0x06514e33 },
-+ { XFER_PIO_1, 0x06914e43 },
-+ { XFER_PIO_0, 0x06914e57 },
-+ { 0, 0x06514e57 }
-+};
-+
-+/* these are the current (4 sep 2001) timings from highpoint */
-+static struct hpt_clock hpt370a_timings_33[] = {
-+ { XFER_UDMA_5, 0x12446231 },
-+ { XFER_UDMA_4, 0x12446231 },
-+ { XFER_UDMA_3, 0x126c6231 },
-+ { XFER_UDMA_2, 0x12486231 },
-+ { XFER_UDMA_1, 0x124c6233 },
-+ { XFER_UDMA_0, 0x12506297 },
-+
-+ { XFER_MW_DMA_2, 0x22406c31 },
-+ { XFER_MW_DMA_1, 0x22406c33 },
-+ { XFER_MW_DMA_0, 0x22406c97 },
-+
-+ { XFER_PIO_4, 0x06414e31 },
-+ { XFER_PIO_3, 0x06414e42 },
-+ { XFER_PIO_2, 0x06414e53 },
-+ { XFER_PIO_1, 0x06814e93 },
-+ { XFER_PIO_0, 0x06814ea7 },
-+ { 0, 0x06814ea7 }
-+};
-+
-+/* 2x 33MHz timings */
-+static struct hpt_clock hpt370a_timings_66[] = {
-+ { XFER_UDMA_5, 0x1488e673 },
-+ { XFER_UDMA_4, 0x1488e673 },
-+ { XFER_UDMA_3, 0x1498e673 },
-+ { XFER_UDMA_2, 0x1490e673 },
-+ { XFER_UDMA_1, 0x1498e677 },
-+ { XFER_UDMA_0, 0x14a0e73f },
-+
-+ { XFER_MW_DMA_2, 0x2480fa73 },
-+ { XFER_MW_DMA_1, 0x2480fa77 },
-+ { XFER_MW_DMA_0, 0x2480fb3f },
-+
-+ { XFER_PIO_4, 0x0c82be73 },
-+ { XFER_PIO_3, 0x0c82be95 },
-+ { XFER_PIO_2, 0x0c82beb7 },
-+ { XFER_PIO_1, 0x0d02bf37 },
-+ { XFER_PIO_0, 0x0d02bf5f },
-+ { 0, 0x0d02bf5f }
-+};
-+
-+static struct hpt_clock hpt370a_timings_50[] = {
-+ { XFER_UDMA_5, 0x12848242 },
-+ { XFER_UDMA_4, 0x12ac8242 },
-+ { XFER_UDMA_3, 0x128c8242 },
-+ { XFER_UDMA_2, 0x120c8242 },
-+ { XFER_UDMA_1, 0x12148254 },
-+ { XFER_UDMA_0, 0x121882ea },
-+
-+ { XFER_MW_DMA_2, 0x22808242 },
-+ { XFER_MW_DMA_1, 0x22808254 },
-+ { XFER_MW_DMA_0, 0x228082ea },
-+
-+ { XFER_PIO_4, 0x0a81f442 },
-+ { XFER_PIO_3, 0x0a81f443 },
-+ { XFER_PIO_2, 0x0a81f454 },
-+ { XFER_PIO_1, 0x0ac1f465 },
-+ { XFER_PIO_0, 0x0ac1f48a },
-+ { 0, 0x0ac1f48a }
-+};
-+
-+static struct hpt_clock hpt372_timings_33[] = {
-+ { XFER_UDMA_6, 0x1c81dc62 },
-+ { XFER_UDMA_5, 0x1c6ddc62 },
-+ { XFER_UDMA_4, 0x1c8ddc62 },
-+ { XFER_UDMA_3, 0x1c8edc62 }, /* checkme */
-+ { XFER_UDMA_2, 0x1c91dc62 },
-+ { XFER_UDMA_1, 0x1c9adc62 }, /* checkme */
-+ { XFER_UDMA_0, 0x1c82dc62 }, /* checkme */
-+
-+ { XFER_MW_DMA_2, 0x2c829262 },
-+ { XFER_MW_DMA_1, 0x2c829266 }, /* checkme */
-+ { XFER_MW_DMA_0, 0x2c82922e }, /* checkme */
-+
-+ { XFER_PIO_4, 0x0c829c62 },
-+ { XFER_PIO_3, 0x0c829c84 },
-+ { XFER_PIO_2, 0x0c829ca6 },
-+ { XFER_PIO_1, 0x0d029d26 },
-+ { XFER_PIO_0, 0x0d029d5e },
-+ { 0, 0x0d029d5e }
-+};
-+
-+static struct hpt_clock hpt372_timings_50[] = {
-+ { XFER_UDMA_5, 0x12848242 },
-+ { XFER_UDMA_4, 0x12ac8242 },
-+ { XFER_UDMA_3, 0x128c8242 },
-+ { XFER_UDMA_2, 0x120c8242 },
-+ { XFER_UDMA_1, 0x12148254 },
-+ { XFER_UDMA_0, 0x121882ea },
-+
-+ { XFER_MW_DMA_2, 0x22808242 },
-+ { XFER_MW_DMA_1, 0x22808254 },
-+ { XFER_MW_DMA_0, 0x228082ea },
-+
-+ { XFER_PIO_4, 0x0a81f442 },
-+ { XFER_PIO_3, 0x0a81f443 },
-+ { XFER_PIO_2, 0x0a81f454 },
-+ { XFER_PIO_1, 0x0ac1f465 },
-+ { XFER_PIO_0, 0x0ac1f48a },
-+ { 0, 0x0a81f443 }
-+};
-+
-+static struct hpt_clock hpt372_timings_66[] = {
-+ { XFER_UDMA_6, 0x1c869c62 },
-+ { XFER_UDMA_5, 0x1cae9c62 },
-+ { XFER_UDMA_4, 0x1c8a9c62 },
-+ { XFER_UDMA_3, 0x1c8e9c62 },
-+ { XFER_UDMA_2, 0x1c929c62 },
-+ { XFER_UDMA_1, 0x1c9a9c62 },
-+ { XFER_UDMA_0, 0x1c829c62 },
-+
-+ { XFER_MW_DMA_2, 0x2c829c62 },
-+ { XFER_MW_DMA_1, 0x2c829c66 },
-+ { XFER_MW_DMA_0, 0x2c829d2e },
-+
-+ { XFER_PIO_4, 0x0c829c62 },
-+ { XFER_PIO_3, 0x0c829c84 },
-+ { XFER_PIO_2, 0x0c829ca6 },
-+ { XFER_PIO_1, 0x0d029d26 },
-+ { XFER_PIO_0, 0x0d029d5e },
-+ { 0, 0x0d029d26 }
-+};
-+
-+static struct hpt_clock hpt374_timings_33[] = {
-+ { XFER_UDMA_6, 0x12808242 },
-+ { XFER_UDMA_5, 0x12848242 },
-+ { XFER_UDMA_4, 0x12ac8242 },
-+ { XFER_UDMA_3, 0x128c8242 },
-+ { XFER_UDMA_2, 0x120c8242 },
-+ { XFER_UDMA_1, 0x12148254 },
-+ { XFER_UDMA_0, 0x121882ea },
-+
-+ { XFER_MW_DMA_2, 0x22808242 },
-+ { XFER_MW_DMA_1, 0x22808254 },
-+ { XFER_MW_DMA_0, 0x228082ea },
-+
-+ { XFER_PIO_4, 0x0a81f442 },
-+ { XFER_PIO_3, 0x0a81f443 },
-+ { XFER_PIO_2, 0x0a81f454 },
-+ { XFER_PIO_1, 0x0ac1f465 },
-+ { XFER_PIO_0, 0x0ac1f48a },
-+ { 0, 0x06814e93 }
-+};
-+
-+static struct hpt_chip hpt370 = {
-+ "HPT370",
-+ 48,
-+ {
-+ hpt370_timings_33,
-+ NULL,
-+ NULL,
-+ hpt370_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt370a = {
-+ "HPT370A",
-+ 48,
-+ {
-+ hpt370a_timings_33,
-+ NULL,
-+ hpt370a_timings_50,
-+ hpt370a_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt372 = {
-+ "HPT372",
-+ 55,
-+ {
-+ hpt372_timings_33,
-+ NULL,
-+ hpt372_timings_50,
-+ hpt372_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt302 = {
-+ "HPT302",
-+ 66,
-+ {
-+ hpt372_timings_33,
-+ NULL,
-+ hpt372_timings_50,
-+ hpt372_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt371 = {
-+ "HPT371",
-+ 66,
-+ {
-+ hpt372_timings_33,
-+ NULL,
-+ hpt372_timings_50,
-+ hpt372_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt372a = {
-+ "HPT372A",
-+ 66,
-+ {
-+ hpt372_timings_33,
-+ NULL,
-+ hpt372_timings_50,
-+ hpt372_timings_66
-+ }
-+};
-+
-+static struct hpt_chip hpt374 = {
-+ "HPT374",
-+ 48,
-+ {
-+ hpt374_timings_33,
-+ NULL,
-+ NULL,
-+ NULL
-+ }
-+};
-+
-+/**
-+ * hpt37x_find_mode - reset the hpt37x bus
-+ * @ap: ATA port
-+ * @speed: transfer mode
-+ *
-+ * Return the 32bit register programming information for this channel
-+ * that matches the speed provided.
-+ */
-+
-+static u32 hpt37x_find_mode(struct ata_port *ap, int speed)
-+{
-+ struct hpt_clock *clocks = ap->host_set->private_data;
-+
-+ while(clocks->xfer_speed) {
-+ if (clocks->xfer_speed == speed)
-+ return clocks->timing;
-+ clocks++;
-+ }
-+ BUG();
-+}
-+
-+static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr, const char *list[])
-+{
-+ unsigned char model_num[40];
-+ char *s;
-+ unsigned int len;
-+ int i = 0;
-+
-+ ata_dev_id_string(dev->id, model_num, ATA_ID_PROD_OFS,
-+ sizeof(model_num));
-+ s = &model_num[0];
-+ len = strnlen(s, sizeof(model_num));
-+
-+ /* ATAPI specifies that empty space is blank-filled; remove blanks */
-+ while ((len > 0) && (s[len - 1] == ' ')) {
-+ len--;
-+ s[len] = 0;
-+ }
-+
-+ while(list[i] != NULL) {
-+ if (!strncmp(list[i], s, len)) {
-+ printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n",
-+ modestr, list[i]);
-+ return 1;
-+ }
-+ i++;
-+ }
-+ return 0;
-+}
-+
-+static const char *bad_ata33[] = {
-+ "Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
-+ "Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
-+ "Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
-+ "Maxtor 90510D4",
-+ "Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
-+ "Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
-+ "Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
-+ NULL
-+};
-+
-+static const char *bad_ata100_5[] = {
-+ "IBM-DTLA-307075",
-+ "IBM-DTLA-307060",
-+ "IBM-DTLA-307045",
-+ "IBM-DTLA-307030",
-+ "IBM-DTLA-307020",
-+ "IBM-DTLA-307015",
-+ "IBM-DTLA-305040",
-+ "IBM-DTLA-305030",
-+ "IBM-DTLA-305020",
-+ "IC35L010AVER07-0",
-+ "IC35L020AVER07-0",
-+ "IC35L030AVER07-0",
-+ "IC35L040AVER07-0",
-+ "IC35L060AVER07-0",
-+ "WDC AC310200R",
-+ NULL
-+};
-+
-+/**
-+ * hpt370_filter - mode selection filter
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Block UDMA on devices that cause trouble with this controller.
-+ */
-+
-+static unsigned int hpt370_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+ if (adev->class != ATA_DEV_ATA)
-+ return mask;
-+ if (hpt_dma_blacklisted(adev, "UDMA", bad_ata33))
-+ return mask & 0x1F;
-+ if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
-+ return mask & 0x1F;
-+ return mask;
-+}
-+
-+/**
-+ * hpt370a_filter - mode selection filter
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Block UDMA on devices that cause trouble with this controller.
-+ */
-+
-+static unsigned int hpt370a_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+ if (adev->class != ATA_DEV_ATA)
-+ return mask;
-+ if (hpt_dma_blacklisted(adev, "UDMA100", bad_ata100_5))
-+ return mask & 0x1F;
-+ return mask;
-+}
-+
-+/**
-+ * hpt37x_phy_reset - reset the hpt37x bus
-+ * @ap: ATA port to reset
-+ *
-+ * Perform the PHY reset handling for the 370/372 and 374 func 0
-+ */
-+
-+static void hpt37x_phy_reset(struct ata_port *ap)
-+{
-+ u8 scr2, ata66;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_byte(pdev, 0x5B, &scr2);
-+ pci_write_config_byte(pdev, 0x5B, scr2 & ~0x01);
-+ /* Cable register now active */
-+ pci_read_config_byte(pdev, 0x5A, &ata66);
-+ /* Restore state */
-+ pci_write_config_byte(pdev, 0x5B, scr2);
-+
-+ if (ata66 & (1 << ap->hard_port_no))
-+ ap->cbl = ATA_CBL_PATA40;
-+ else
-+ ap->cbl = ATA_CBL_PATA80;
-+
-+ /* Reset the state machine */
-+ pci_write_config_byte(pdev, 0x50, 0x37);
-+ pci_write_config_byte(pdev, 0x54, 0x37);
-+ udelay(100);
-+
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * hpt374_phy_reset - reset the hpt374
-+ * @ap: ATA port to reset
-+ *
-+ * The 374 cable detect is a little different due to the extra
-+ * channels. The function 0 channels work like usual but function 1
-+ * is special
-+ */
-+
-+static void hpt374_phy_reset(struct ata_port *ap)
-+{
-+ u16 mcr3, mcr6;
-+ u8 ata66;
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ if (!(PCI_FUNC(pdev->devfn) & 1)) {
-+ hpt37x_phy_reset(ap);
-+ return;
-+ }
-+ /* Do the extra channel work */
-+ pci_read_config_word(pdev, 0x52, &mcr3);
-+ pci_read_config_word(pdev, 0x56, &mcr6);
-+ /* Set bit 15 of 0x52 to enable TCBLID as input
-+ Set bit 15 of 0x56 to enable FCBLID as input
-+ */
-+ pci_write_config_word(pdev, 0x52, mcr3 | 0x8000);
-+ pci_write_config_word(pdev, 0x56, mcr6 | 0x8000);
-+ pci_read_config_byte(pdev, 0x5A, &ata66);
-+ /* Reset TCBLID/FCBLID to output */
-+ pci_write_config_word(pdev, 0x52, mcr3);
-+ pci_write_config_word(pdev, 0x56, mcr6);
-+
-+ if (ata66 & (1 << ap->hard_port_no))
-+ ap->cbl = ATA_CBL_PATA40;
-+ else
-+ ap->cbl = ATA_CBL_PATA80;
-+
-+ /* Reset the state machine */
-+ pci_write_config_byte(pdev, 0x50, 0x37);
-+ pci_write_config_byte(pdev, 0x54, 0x37);
-+ udelay(100);
-+
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+
-+/**
-+ * hpt370_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Perform PIO mode setup.
-+ */
-+
-+static void hpt370_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x02;
-+ fast |= 0x01;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt37x_find_mode(ap, adev->pio_mode);
-+ mode &= ~0x8000000; /* No FIFO in PIO */
-+ mode &= ~0x30070000; /* Leave config bits alone */
-+ reg &= 0x30070000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt370_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * Set up the channel for MWDMA or UDMA modes. Much the same as with
-+ * PIO, load the mode number and then set MWDMA or UDMA flag.
-+ */
-+
-+static void hpt370_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x02;
-+ fast |= 0x01;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt37x_find_mode(ap, adev->dma_mode);
-+ mode |= 0x8000000; /* FIFO in MWDMA or UDMA */
-+ mode &= ~0xC0000000; /* Leave config bits alone */
-+ reg &= 0xC0000000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt370_bmdma_start - DMA engine begin
-+ * @qc: ATA command
-+ *
-+ * The 370 and 370A want us to reset the DMA engine each time we
-+ * use it. The 372 and later are fine.
-+ */
-+
-+static void hpt370_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ pci_write_config_byte(pdev, 0x50 + 4 * ap->hard_port_no, 0x37);
-+ udelay(10);
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * hpt370_bmdma_end - DMA engine stop
-+ * @qc: ATA command
-+ *
-+ * Work around the HPT370 DMA engine.
-+ */
-+
-+static void hpt370_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 dma_stat = inb(ap->ioaddr.bmdma_addr + 2);
-+ u8 dma_cmd;
-+ unsigned long bmdma = ap->ioaddr.bmdma_addr;
-+
-+ if (dma_stat & 0x01) {
-+ udelay(20);
-+ dma_stat = inb(bmdma + 2);
-+ }
-+ if (dma_stat & 0x01) {
-+ /* Clear the engine */
-+ pci_write_config_byte(pdev, 0x50 + 4 * ap->hard_port_no, 0x37);
-+ udelay(10);
-+ /* Stop DMA */
-+ dma_cmd = inb(bmdma );
-+ outb(dma_cmd & 0xFE, bmdma);
-+ /* Clear Error */
-+ dma_stat = inb(bmdma + 2);
-+ outb(dma_stat | 0x06 , bmdma + 2);
-+ /* Clear the engine */
-+ pci_write_config_byte(pdev, 0x50 + 4 * ap->hard_port_no, 0x37);
-+ udelay(10);
-+ }
-+ ata_bmdma_stop(qc);
-+}
-+
-+/**
-+ * hpt372_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Perform PIO mode setup.
-+ */
-+
-+static void hpt372_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x07;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt37x_find_mode(ap, adev->pio_mode);
-+
-+ printk("Find mode for %d reports %X\n", adev->pio_mode, mode);
-+ mode &= ~0x80000000; /* No FIFO in PIO */
-+ mode &= ~0x30070000; /* Leave config bits alone */
-+ reg &= 0x30070000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt372_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * Set up the channel for MWDMA or UDMA modes. Much the same as with
-+ * PIO, load the mode number and then set MWDMA or UDMA flag.
-+ */
-+
-+static void hpt372_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x07;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt37x_find_mode(ap, adev->dma_mode);
-+ printk("Find mode for DMA %d reports %X\n", adev->dma_mode, mode);
-+ mode &= ~0xC0000000; /* Leave config bits alone */
-+ mode |= 0x80000000; /* FIFO in MWDMA or UDMA */
-+ reg &= 0xC0000000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt37x_bmdma_end - DMA engine stop
-+ * @qc: ATA command
-+ *
-+ * Clean up after the HPT372 and later DMA engine
-+ */
-+
-+static void hpt37x_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int mscreg = 0x50 + 2 * ap->hard_port_no;
-+ u8 bwsr_stat, msc_stat;
-+
-+ pci_read_config_byte(pdev, 0x6A, &bwsr_stat);
-+ pci_read_config_byte(pdev, mscreg, &msc_stat);
-+ if (bwsr_stat & (1 << ap->hard_port_no))
-+ pci_write_config_byte(pdev, mscreg, msc_stat | 0x30);
-+ ata_bmdma_stop(qc);
-+}
-+
-+
-+static struct scsi_host_template hpt37x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+/*
-+ * Configuration for HPT370
-+ */
-+
-+static struct ata_port_operations hpt370_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt370_set_piomode,
-+ .set_dmamode = hpt370_set_dmamode,
-+ .mode_filter = hpt370_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt37x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = hpt370_bmdma_start,
-+ .bmdma_stop = hpt370_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Configuration for HPT370A. Close to 370 but less filters
-+ */
-+
-+static struct ata_port_operations hpt370a_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt370_set_piomode,
-+ .set_dmamode = hpt370_set_dmamode,
-+ .mode_filter = hpt370a_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt37x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = hpt370_bmdma_start,
-+ .bmdma_stop = hpt370_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Configuration for HPT372, HPT371, HPT302. Slightly different PIO
-+ * and DMA mode setting functionality.
-+ */
-+
-+static struct ata_port_operations hpt372_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt372_set_piomode,
-+ .set_dmamode = hpt372_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt37x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = hpt37x_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Configuration for HPT374. Mode setting works like 372 and friends
-+ * but we have a different cable detection procedure.
-+ */
-+
-+static struct ata_port_operations hpt374_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt372_set_piomode,
-+ .set_dmamode = hpt372_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt374_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = hpt37x_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * htp37x_clock_slot - Turn timing to PC clock entry
-+ * @freq: Reported frequency timing
-+ * @base: Base timing
-+ *
-+ * Turn the timing data intoa clock slot (0 for 33, 1 for 40, 2 for 50
-+ * and 3 for 66Mhz)
-+ */
-+
-+static int hpt37x_clock_slot(unsigned int freq, unsigned int base)
-+{
-+ unsigned int f = (base * freq) / 192; /* Mhz */
-+ if (f < 40)
-+ return 0; /* 33Mhz slot */
-+ if (f < 45)
-+ return 1; /* 40Mhz slot */
-+ if (f < 55)
-+ return 2; /* 50Mhz slot */
-+ return 3; /* 60Mhz slot */
-+}
-+
-+/**
-+ * hpt37x_calibrate_dpll - Calibrate the DPLL loop
-+ * @dev: PCI device
-+ *
-+ * Perform a calibration cycle on the HPT37x DPLL. Returns 1 if this
-+ * succeeds
-+ */
-+
-+static int hpt37x_calibrate_dpll(struct pci_dev *dev)
-+{
-+ u8 reg5b;
-+ u32 reg5c;
-+ int tries;
-+
-+ for(tries = 0; tries < 0x5000; tries++) {
-+ udelay(50);
-+ pci_read_config_byte(dev, 0x5b, &reg5b);
-+ if (reg5b & 0x80) {
-+ /* See if it stays set */
-+ for(tries = 0; tries < 0x1000; tries ++) {
-+ pci_read_config_byte(dev, 0x5b, &reg5b);
-+ /* Failed ? */
-+ if ((reg5b & 0x80) == 0)
-+ return 0;
-+ }
-+ /* Turn off tuning, we have the DPLL set */
-+ pci_read_config_dword(dev, 0x5c, &reg5c);
-+ pci_write_config_dword(dev, 0x5c, reg5c & ~ 0x100);
-+ return 1;
-+ }
-+ }
-+ /* Never went stable */
-+ return 0;
-+}
-+/**
-+ * hpt37x_init_one - Initialise an HPT37X/302
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Initialise an HPT37x device. There are some interesting complications
-+ * here. Firstly the chip may report 366 and be one of several variants.
-+ * Secondly all the timings depend on the clock for the chip which we must
-+ * detect and look up
-+ *
-+ * This is the known chip mappings. It may be missing a couple of later
-+ * releases.
-+ *
-+ * Chip version PCI Rev Notes
-+ * HPT366 4 (HPT366) 0 Other driver
-+ * HPT366 4 (HPT366) 1 Other driver
-+ * HPT368 4 (HPT366) 2 Other driver
-+ * HPT370 4 (HPT366) 3 UDMA100
-+ * HPT370A 4 (HPT366) 4 UDMA100
-+ * HPT372 4 (HPT366) 5 UDMA133 (1)
-+ * HPT372N 4 (HPT366) 6 Other driver
-+ * HPT372A 5 (HPT372) 1 UDMA133 (1)
-+ * HPT372N 5 (HPT372) 2 Other driver
-+ * HPT302 6 (HPT302) 1 UDMA133
-+ * HPT302N 6 (HPT302) 2 Other driver
-+ * HPT371 7 (HPT371) * UDMA133
-+ * HPT374 8 (HPT374) * UDMA133 4 channel
-+ * HPT372N 9 (HPT372N) * Other driver
-+ *
-+ * (1) UDMA133 support depends on the bus clock
-+ */
-+
-+static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ /* HPT370 - UDMA100 */
-+ static struct ata_port_info info_hpt370 = {
-+ .sht = &hpt37x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &hpt370_port_ops
-+ };
-+ /* HPT370A - UDMA100 */
-+ static struct ata_port_info info_hpt370a = {
-+ .sht = &hpt37x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &hpt370a_port_ops
-+ };
-+ /* HPT371, 372 and friends - UDMA133 */
-+ static struct ata_port_info info_hpt372 = {
-+ .sht = &hpt37x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f,
-+ .port_ops = &hpt372_port_ops
-+ };
-+ /* HPT371, 372 and friends - UDMA100 at 50MHz clock */
-+ static struct ata_port_info info_hpt372_50 = {
-+ .sht = &hpt37x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &hpt372_port_ops
-+ };
-+ /* HPT374 - UDMA133 */
-+ static struct ata_port_info info_hpt374 = {
-+ .sht = &hpt37x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f,
-+ .port_ops = &hpt374_port_ops
-+ };
-+
-+ struct ata_port_info *port_info[2];
-+ struct ata_port_info *port;
-+
-+ u8 irqmask;
-+ u32 class_rev;
-+ u32 freq;
-+
-+ int MHz[4] = { 33, 40, 50, 66 };
-+ struct hpt_chip *chip_table;
-+ int clock_slot;
-+
-+ pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
-+ class_rev &= 0xFF;
-+
-+ if (dev->device == PCI_DEVICE_ID_TTI_HPT366) {
-+ /* May be a later chip in disguise. Check */
-+ /* Older chips are in the HPT366 driver. Ignore them */
-+ if (class_rev < 3)
-+ return -ENODEV;
-+ /* N series chips have their own driver. Ignore */
-+ if (class_rev == 6)
-+ return -ENODEV;
-+
-+ switch(class_rev) {
-+ case 3:
-+ port = &info_hpt370;
-+ chip_table = &hpt370;
-+ break;
-+ case 4:
-+ port = &info_hpt370a;
-+ chip_table = &hpt370a;
-+ break;
-+ case 5:
-+ port = &info_hpt372;
-+ chip_table = &hpt372;
-+ break;
-+ default:
-+ printk(KERN_ERR "pata_hpt37x: Unknown HPT366 subtype please report (%d).\n", class_rev);
-+ return -ENODEV;
-+ }
-+ } else {
-+ switch(dev->device) {
-+ case PCI_DEVICE_ID_TTI_HPT372:
-+ /* 372N if rev >= 2*/
-+ if (class_rev >= 2)
-+ return -ENODEV;
-+ port = &info_hpt372;
-+ chip_table = &hpt372a;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT302:
-+ /* 302N if rev > 1 */
-+ if (class_rev > 1)
-+ return -ENODEV;
-+ port = &info_hpt372;
-+ /* Check this */
-+ chip_table = &hpt302;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT371:
-+ port = &info_hpt372;
-+ chip_table = &hpt371;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT374:
-+ chip_table = &hpt374;
-+ port = &info_hpt374;
-+ break;
-+ default:
-+ printk(KERN_ERR "pata_hpt37x: PCI table is bogus please report (%d).\n", dev->device);
-+ return -ENODEV;
-+ }
-+ }
-+ /* Ok so this is a chip we support */
-+
-+ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
-+ pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
-+ pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
-+
-+ pci_read_config_byte(dev, 0x5A, &irqmask);
-+ irqmask &= ~0x10;
-+ pci_write_config_byte(dev, 0x5a, irqmask);
-+
-+ /*
-+ * default to pci clock. make sure MA15/16 are set to output
-+ * to prevent drives having problems with 40-pin cables. Needed
-+ * for some drives such as IBM-DTLA which will not enter ready
-+ * state on reset when PDIAG is a input.
-+ */
-+
-+ pci_write_config_byte(dev, 0x5b, 0x23);
-+
-+ pci_read_config_dword(dev, 0x70, &freq);
-+ if ((freq >> 12) != 0xABCDE) {
-+ int i;
-+ u8 sr;
-+ u32 total = 0;
-+
-+ printk(KERN_WARNING "pata_hpt37x: BIOS has not set timing clocks.\n");
-+
-+ /* This is the process the HPT371 BIOS is reported to use */
-+ for(i = 0; i < 128; i++) {
-+ pci_read_config_byte(dev, 0x78, &sr);
-+ total += sr;
-+ udelay(15);
-+ }
-+ freq = total / 128;
-+ }
-+ freq &= 0x1FF;
-+
-+ /*
-+ * Turn the frequency check into a band and then find a timing
-+ * table to match it.
-+ */
-+
-+ clock_slot = hpt37x_clock_slot(freq, chip_table->base);
-+ if (chip_table->clocks[clock_slot] == NULL) {
-+ /*
-+ * We need to try PLL mode instead
-+ */
-+ unsigned int f_low = (MHz[clock_slot] * chip_table->base) / 192;
-+ unsigned int f_high = f_low + 2;
-+ int adjust;
-+
-+ for(adjust = 0; adjust < 8; adjust++) {
-+ if (hpt37x_calibrate_dpll(dev))
-+ break;
-+ /* See if it'll settle at a fractionally different clock */
-+ if ((adjust & 3) == 3) {
-+ f_low --;
-+ f_high ++;
-+ }
-+ pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low);
-+ }
-+ if (adjust == 8) {
-+ printk(KERN_WARNING "hpt37x: DPLL did not stabilize.\n");
-+ return -ENODEV;
-+ }
-+ /* Check if this works for all cases */
-+ port->private_data = hpt370_timings_66;
-+
-+ printk(KERN_INFO "hpt37x: Bus clock %dMHz, using DPLL.\n", MHz[clock_slot]);
-+ } else {
-+ port->private_data = chip_table->clocks[clock_slot];
-+ /*
-+ * Perform a final fixup. The 371 and 372 clock determines
-+ * if UDMA133 is available.
-+ */
-+
-+ if (clock_slot == 2 && chip_table == &hpt372) { /* 50Mhz */
-+ printk(KERN_WARNING "pata_hpt37x: No UDMA133 support available with 50MHz bus clock.\n");
-+ if (port == &info_hpt372)
-+ port = &info_hpt372_50;
-+ else BUG();
-+ }
-+ printk(KERN_INFO "hpt37x: %s: Bus clock %dMHz.\n", chip_table->name, MHz[clock_slot]);
-+ }
-+ port_info[0] = port_info[1] = port;
-+ /* Now kick off ATA set up */
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id hpt37x[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT371), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT374), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT302), },
-+ { 0, },
-+};
-+
-+static struct pci_driver hpt37x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = hpt37x,
-+ .probe = hpt37x_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init hpt37x_init(void)
-+{
-+ return pci_register_driver(&hpt37x_pci_driver);
-+}
-+
-+
-+static void __exit hpt37x_exit(void)
-+{
-+ pci_unregister_driver(&hpt37x_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, hpt37x);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(hpt37x_init);
-+module_exit(hpt37x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt3x2n.c linux-2.6.16-rc6/drivers/scsi/pata_hpt3x2n.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_hpt3x2n.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_hpt3x2n.c 2006-03-10 17:06:19.000000000 +0000
-@@ -0,0 +1,580 @@
-+/*
-+ * Libata driver for the highpoint 372N and 302N UDMA66 ATA controllers.
-+ *
-+ * This driver is heavily based upon:
-+ *
-+ * linux/drivers/ide/pci/hpt366.c Version 0.36 April 25, 2003
-+ *
-+ * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
-+ * Portions Copyright (C) 2001 Sun Microsystems, Inc.
-+ * Portions Copyright (C) 2003 Red Hat Inc
-+ *
-+ *
-+ * TODO
-+ * 371N
-+ * Work out best PLL policy
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "hpt3x2n"
-+#define DRV_VERSION "0.1"
-+
-+enum {
-+ HPT_PCI_FAST = (1 << 31),
-+ PCI66 = (1 << 1),
-+ USE_DPLL = (1 << 0)
-+};
-+
-+struct hpt_clock {
-+ u8 xfer_speed;
-+ u32 timing;
-+};
-+
-+struct hpt_chip {
-+ const char *name;
-+ struct hpt_clock *clocks[3];
-+};
-+
-+/* key for bus clock timings
-+ * bit
-+ * 0:3 data_high_time. inactive time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 4:8 data_low_time. active time of DIOW_/DIOR_ for PIO and MW
-+ * DMA. cycles = value + 1
-+ * 9:12 cmd_high_time. inactive time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 13:17 cmd_low_time. active time of DIOW_/DIOR_ during task file
-+ * register access.
-+ * 18:21 udma_cycle_time. clock freq and clock cycles for UDMA xfer.
-+ * during task file register access.
-+ * 22:24 pre_high_time. time to initialize 1st cycle for PIO and MW DMA
-+ * xfer.
-+ * 25:27 cmd_pre_high_time. time to initialize 1st PIO cycle for task
-+ * register access.
-+ * 28 UDMA enable
-+ * 29 DMA enable
-+ * 30 PIO_MST enable. if set, the chip is in bus master mode during
-+ * PIO.
-+ * 31 FIFO enable.
-+ */
-+
-+/* 66MHz DPLL clocks */
-+
-+static struct hpt_clock hpt3x2n_clocks[] = {
-+ { XFER_UDMA_7, 0x1c869c62 },
-+ { XFER_UDMA_6, 0x1c869c62 },
-+ { XFER_UDMA_5, 0x1c8a9c62 },
-+ { XFER_UDMA_4, 0x1c8a9c62 },
-+ { XFER_UDMA_3, 0x1c8e9c62 },
-+ { XFER_UDMA_2, 0x1c929c62 },
-+ { XFER_UDMA_1, 0x1c9a9c62 },
-+ { XFER_UDMA_0, 0x1c829c62 },
-+
-+ { XFER_MW_DMA_2, 0x2c829c62 },
-+ { XFER_MW_DMA_1, 0x2c829c66 },
-+ { XFER_MW_DMA_0, 0x2c829d2c },
-+
-+ { XFER_PIO_4, 0x0c829c62 },
-+ { XFER_PIO_3, 0x0c829c84 },
-+ { XFER_PIO_2, 0x0c829ca6 },
-+ { XFER_PIO_1, 0x0d029d26 },
-+ { XFER_PIO_0, 0x0d029d5e },
-+ { 0, 0x0d029d5e }
-+};
-+
-+/**
-+ * hpt3x2n_find_mode - reset the hpt3x2n bus
-+ * @ap: ATA port
-+ * @speed: transfer mode
-+ *
-+ * Return the 32bit register programming information for this channel
-+ * that matches the speed provided. For the moment the clocks table
-+ * is hard coded but easy to change. This will be needed if we use
-+ * different DPLLs
-+ */
-+
-+static u32 hpt3x2n_find_mode(struct ata_port *ap, int speed)
-+{
-+ struct hpt_clock *clocks = hpt3x2n_clocks;
-+
-+ while(clocks->xfer_speed) {
-+ if (clocks->xfer_speed == speed)
-+ return clocks->timing;
-+ clocks++;
-+ }
-+ BUG();
-+}
-+
-+/**
-+ * hpt3x2n_phy_reset - reset the hpt3x2n bus
-+ * @ap: ATA port to reset
-+ *
-+ * Perform the PHY reset handling for the 3x2N
-+ */
-+
-+static void hpt3x2n_phy_reset(struct ata_port *ap)
-+{
-+ u8 scr2, ata66;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_byte(pdev, 0x5B, &scr2);
-+ pci_write_config_byte(pdev, 0x5B, scr2 & ~0x01);
-+ /* Cable register now active */
-+ pci_read_config_byte(pdev, 0x5A, &ata66);
-+ /* Restore state */
-+ pci_write_config_byte(pdev, 0x5B, scr2);
-+
-+ if (ata66 & (1 << ap->hard_port_no))
-+ ap->cbl = ATA_CBL_PATA40;
-+ else
-+ ap->cbl = ATA_CBL_PATA80;
-+
-+ /* Reset the state machine */
-+ pci_write_config_byte(pdev, 0x50, 0x37);
-+ pci_write_config_byte(pdev, 0x54, 0x37);
-+ udelay(100);
-+
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+/**
-+ * hpt3x2n_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Perform PIO mode setup.
-+ */
-+
-+static void hpt3x2n_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x07;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt3x2n_find_mode(ap, adev->pio_mode);
-+ mode &= ~0x8000000; /* No FIFO in PIO */
-+ mode &= ~0x30070000; /* Leave config bits alone */
-+ reg &= 0x30070000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt3x2n_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * Set up the channel for MWDMA or UDMA modes. Much the same as with
-+ * PIO, load the mode number and then set MWDMA or UDMA flag.
-+ */
-+
-+static void hpt3x2n_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 addr1, addr2;
-+ u32 reg;
-+ u32 mode;
-+ u8 fast;
-+
-+ addr1 = 0x40 + 4 * (adev->devno + 2 * ap->hard_port_no);
-+ addr2 = 0x51 + 4 * ap->hard_port_no;
-+
-+ /* Fast interrupt prediction disable, hold off interrupt disable */
-+ pci_read_config_byte(pdev, addr2, &fast);
-+ fast &= ~0x07;
-+ pci_write_config_byte(pdev, addr2, fast);
-+
-+ pci_read_config_dword(pdev, addr1, &reg);
-+ mode = hpt3x2n_find_mode(ap, adev->dma_mode);
-+ mode |= 0x8000000; /* FIFO in MWDMA or UDMA */
-+ mode &= ~0xC0000000; /* Leave config bits alone */
-+ reg &= 0xC0000000; /* Strip timing bits */
-+ pci_write_config_dword(pdev, addr1, reg | mode);
-+}
-+
-+/**
-+ * hpt3x2n_bmdma_end - DMA engine stop
-+ * @qc: ATA command
-+ *
-+ * Clean up after the HPT3x2n and later DMA engine
-+ */
-+
-+static void hpt3x2n_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int mscreg = 0x50 + 2 * ap->hard_port_no;
-+ u8 bwsr_stat, msc_stat;
-+
-+ pci_read_config_byte(pdev, 0x6A, &bwsr_stat);
-+ pci_read_config_byte(pdev, mscreg, &msc_stat);
-+ if (bwsr_stat & (1 << ap->hard_port_no))
-+ pci_write_config_byte(pdev, mscreg, msc_stat | 0x30);
-+ ata_bmdma_stop(qc);
-+}
-+
-+/**
-+ * hpt3x2n_set_clock - clock control
-+ * @ap: ATA port
-+ * @source: 0x21 or 0x23 for PLL or PCI sourced clock
-+ *
-+ * Switch the ATA bus clock between the PLL and PCI clock sources
-+ * while correctly isolating the bus and resetting internal logic
-+ *
-+ * We must use the DPLL for
-+ * - writing
-+ * - second channel UDMA7 (SATA ports) or higher
-+ * - 66MHz PCI
-+ *
-+ * or we will underclock the device and get reduced performance.
-+ */
-+
-+static void hpt3x2n_set_clock(struct ata_port *ap, int source)
-+{
-+ unsigned long bmdma = ap->ioaddr.bmdma_addr;
-+
-+ /* Tristate the bus */
-+ outb(0x80, bmdma+0x73);
-+ outb(0x80, bmdma+0x77);
-+
-+ /* Switch clock and reset channels */
-+ outb(source, bmdma+0x7B);
-+ outb(0xC0, bmdma+0x79);
-+
-+ /* Reset state machines */
-+ outb(0x37, bmdma+0x70);
-+ outb(0x37, bmdma+0x74);
-+
-+ /* Complete reset */
-+ outb(0x00, bmdma+0x79);
-+
-+ /* Reconnect channels to bus */
-+ outb(0x00, bmdma+0x73);
-+ outb(0x00, bmdma+0x77);
-+}
-+
-+/* Check if our partner interface is busy */
-+
-+static int hpt3x2n_pair_idle(struct ata_port *ap)
-+{
-+ struct ata_host_set *host = ap->host_set;
-+ struct ata_port *pair = host->ports[ap->hard_port_no ^ 1];
-+
-+ if (pair->hsm_task_state == HSM_ST_IDLE)
-+ return 1;
-+ return 0;
-+}
-+
-+static int hpt3x2n_use_dpll(struct ata_port *ap, int reading)
-+{
-+ long flags = (long)ap->host_set->private_data;
-+ /* See if we should use the DPLL */
-+ if (reading == 0)
-+ return USE_DPLL; /* Needed for write */
-+ if (flags & PCI66)
-+ return USE_DPLL; /* Needed at 66Mhz */
-+ return 0;
-+}
-+
-+static int hpt3x2n_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_taskfile *tf = &qc->tf;
-+ struct ata_port *ap = qc->ap;
-+ int flags = (long)ap->host_set->private_data;
-+
-+ if (hpt3x2n_pair_idle(ap)) {
-+ int dpll = hpt3x2n_use_dpll(ap, (tf->flags & ATA_TFLAG_WRITE));
-+ if ((flags & USE_DPLL) != dpll) {
-+ if (dpll == 1)
-+ hpt3x2n_set_clock(ap, 0x21);
-+ else
-+ hpt3x2n_set_clock(ap, 0x23);
-+ }
-+ }
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static struct scsi_host_template hpt3x2n_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+/*
-+ * Configuration for HPT3x2n.
-+ */
-+
-+static struct ata_port_operations hpt3x2n_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = hpt3x2n_set_piomode,
-+ .set_dmamode = hpt3x2n_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = hpt3x2n_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = hpt3x2n_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = hpt3x2n_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * hpt3xn_calibrate_dpll - Calibrate the DPLL loop
-+ * @dev: PCI device
-+ *
-+ * Perform a calibration cycle on the HPT3xN DPLL. Returns 1 if this
-+ * succeeds
-+ */
-+
-+static int hpt3xn_calibrate_dpll(struct pci_dev *dev)
-+{
-+ u8 reg5b;
-+ u32 reg5c;
-+ int tries;
-+
-+ for(tries = 0; tries < 0x5000; tries++) {
-+ udelay(50);
-+ pci_read_config_byte(dev, 0x5b, &reg5b);
-+ if (reg5b & 0x80) {
-+ /* See if it stays set */
-+ for(tries = 0; tries < 0x1000; tries ++) {
-+ pci_read_config_byte(dev, 0x5b, &reg5b);
-+ /* Failed ? */
-+ if ((reg5b & 0x80) == 0)
-+ return 0;
-+ }
-+ /* Turn off tuning, we have the DPLL set */
-+ pci_read_config_dword(dev, 0x5c, &reg5c);
-+ pci_write_config_dword(dev, 0x5c, reg5c & ~ 0x100);
-+ return 1;
-+ }
-+ }
-+ /* Never went stable */
-+ return 0;
-+}
-+
-+static int hpt3x2n_pci_clock(struct pci_dev *pdev)
-+{
-+ unsigned long freq;
-+ u32 fcnt;
-+
-+ pci_read_config_dword(pdev, 0x70/*CHECKME*/, &fcnt);
-+ if ((fcnt >> 12) != 0xABCDE) {
-+ printk(KERN_WARNING "hpt3xn: BIOS clock data not set.\n");
-+ return 33; /* Not BIOS set */
-+ }
-+ fcnt &= 0x1FF;
-+
-+ freq = (fcnt * 77) / 192;
-+
-+ /* Clamp to bands */
-+ if (freq < 40)
-+ return 33;
-+ if (freq < 45)
-+ return 40;
-+ if (freq < 55)
-+ return 50;
-+ return 66;
-+}
-+
-+/**
-+ * hpt3x2n_init_one - Initialise an HPT37X/302
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Initialise an HPT3x2n device. There are some interesting complications
-+ * here. Firstly the chip may report 366 and be one of several variants.
-+ * Secondly all the timings depend on the clock for the chip which we must
-+ * detect and look up
-+ *
-+ * This is the known chip mappings. It may be missing a couple of later
-+ * releases.
-+ *
-+ * Chip version PCI Rev Notes
-+ * HPT372 4 (HPT366) 5 Other driver
-+ * HPT372N 4 (HPT366) 6 UDMA133
-+ * HPT372 5 (HPT372) 1 Other driver
-+ * HPT372N 5 (HPT372) 2 UDMA133
-+ * HPT302 6 (HPT302) * Other driver
-+ * HPT302N 6 (HPT302) > 1 UDMA133
-+ * HPT371 7 (HPT371) * Other driver
-+ * HPT371N 7 (HPT371) > 1 UDMA133
-+ * HPT374 8 (HPT374) * Other driver
-+ * HPT372N 9 (HPT372N) * UDMA133
-+ *
-+ * (1) UDMA133 support depends on the bus clock
-+ *
-+ * To pin down HPT371N
-+ */
-+
-+static int hpt3x2n_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ /* HPT372N and friends - UDMA133 */
-+ static struct ata_port_info info = {
-+ .sht = &hpt3x2n_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f,
-+ .port_ops = &hpt3x2n_port_ops
-+ };
-+ struct ata_port_info *port_info[2];
-+ struct ata_port_info *port = &info;
-+
-+ u8 irqmask;
-+ u32 class_rev;
-+
-+ unsigned int pci_mhz;
-+ unsigned int f_low, f_high;
-+ int adjust;
-+
-+ pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
-+ class_rev &= 0xFF;
-+
-+ switch(dev->device) {
-+ case PCI_DEVICE_ID_TTI_HPT366:
-+ if (class_rev < 6)
-+ return -ENODEV;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT372:
-+ /* 372N if rev >= 1*/
-+ if (class_rev == 0)
-+ return -ENODEV;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT302:
-+ if (class_rev < 2)
-+ return -ENODEV;
-+ break;
-+ case PCI_DEVICE_ID_TTI_HPT372N:
-+ break;
-+ default:
-+ printk(KERN_ERR "pata_hpt3x2n: PCI table is bogus please report (%d).\n", dev->device);
-+ return -ENODEV;
-+ }
-+
-+ /* Ok so this is a chip we support */
-+
-+ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
-+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
-+ pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
-+ pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
-+
-+ pci_read_config_byte(dev, 0x5A, &irqmask);
-+ irqmask &= ~0x10;
-+ pci_write_config_byte(dev, 0x5a, irqmask);
-+
-+ /* Tune the PLL. HPT recommend using 75 for SATA, 66 for UDMA133 or
-+ 50 for UDMA100. Right now we always use 66 */
-+
-+ pci_mhz = hpt3x2n_pci_clock(dev);
-+
-+ f_low = (pci_mhz * 48) / 66; /* PCI Mhz for 66Mhz DPLL */
-+ f_high = f_low + 2; /* Tolerance */
-+
-+ pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low | 0x100);
-+ /* PLL clock */
-+ pci_write_config_byte(dev, 0x5B, 0x21);
-+
-+ /* Unlike the 37x we don't try jiggling the frequency */
-+ for(adjust = 0; adjust < 8; adjust++) {
-+ if (hpt3xn_calibrate_dpll(dev))
-+ break;
-+ pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low);
-+ }
-+ if (adjust == 8)
-+ printk(KERN_WARNING "hpt3xn: DPLL did not stabilize.\n");
-+
-+ /* Set our private data up. We only need a few flags so we use
-+ it directly */
-+ port->private_data = NULL;
-+ if (pci_mhz > 60)
-+ port->private_data = (void *)PCI66;
-+
-+ /* Now kick off ATA set up */
-+ port_info[0] = port_info[1] = port;
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id hpt3x2n[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT302), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372N), },
-+ { 0, },
-+};
-+
-+static struct pci_driver hpt3x2n_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = hpt3x2n,
-+ .probe = hpt3x2n_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init hpt3x2n_init(void)
-+{
-+ return pci_register_driver(&hpt3x2n_pci_driver);
-+}
-+
-+
-+static void __exit hpt3x2n_exit(void)
-+{
-+ pci_unregister_driver(&hpt3x2n_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the Highpoint HPT3x2n/30x");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, hpt3x2n);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(hpt3x2n_init);
-+module_exit(hpt3x2n_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_isapnp.c linux-2.6.16-rc6/drivers/scsi/pata_isapnp.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_isapnp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_isapnp.c 2006-01-21 16:52:31.000000000 +0000
-@@ -0,0 +1,151 @@
-+
-+/*
-+ * pata-isapnp.c - ISA PnP PATA controller driver.
-+ * Copyright 2005/2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
-+ *
-+ * Based in part on ide-pnp.c by Andrey Panin <pazke@donpac.ru>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/isapnp.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/ata.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_isapnp"
-+#define DRV_VERSION "0.1"
-+
-+static struct scsi_host_template isapnp_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations isapnp_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * isapnp_init_one - attach an isapnp interface
-+ * @idev: PnP device
-+ * @dev_id: matching detect line
-+ *
-+ * Register an ISA bus IDE interface. Such interfaces are PIO 0 and
-+ * non shared IRQ.
-+ */
-+
-+static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *dev_id)
-+{
-+ struct ata_probe_ent ae;
-+
-+ if (pnp_port_valid(idev, 0) == 0)
-+ return -ENODEV;
-+ if (pnp_port_valid(idev, 1) == 0)
-+ return -ENODEV;
-+
-+ /* FIXME: Should selected polled PIO here not fail */
-+ if (pnp_irq_valid(idev, 0) == 0)
-+ return -ENODEV;
-+
-+ memset(&ae, 0, sizeof(struct ata_probe_ent));
-+ INIT_LIST_HEAD(&ae.node);
-+ ae.dev = &idev->dev;
-+ ae.port_ops = &isapnp_port_ops;
-+ ae.sht = &isapnp_sht;
-+ ae.n_ports = 1;
-+ ae.pio_mask = 1; /* ISA so PIO 0 cycles */
-+ ae.irq = pnp_irq(idev, 0);
-+ ae.irq_flags = 0;
-+ ae.host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_IRQ_MASK;
-+ ae.port[0].cmd_addr = pnp_port_start(idev, 0);
-+ ae.port[0].altstatus_addr = pnp_port_start(idev, 1);
-+ ae.port[0].ctl_addr = pnp_port_start(idev, 1);
-+ ata_std_ports(&ae.port[0]);
-+
-+ if (ata_device_add(&ae) == 0)
-+ return -ENODEV;
-+ return 0;
-+}
-+
-+/**
-+ * isapnp_remove_one - unplug an isapnp interface
-+ * @idev: PnP device
-+ *
-+ * Remove a previously configured PnP ATA port. Called only on module
-+ * unload events as the core does not currently deal with ISAPnP docking.
-+ */
-+
-+static void isapnp_remove_one(struct pnp_dev *idev)
-+{
-+ struct device *dev = &idev->dev;
-+ struct ata_host_set *host_set = dev_get_drvdata(dev);
-+
-+ ata_host_set_remove(host_set);
-+ dev_set_drvdata(dev, NULL);
-+}
-+
-+static struct pnp_device_id isapnp_devices[] = {
-+ /* Generic ESDI/IDE/ATA compatible hard disk controller */
-+ {.id = "PNP0600", .driver_data = 0},
-+ {.id = ""}
-+};
-+
-+static struct pnp_driver isapnp_driver = {
-+ .name = DRV_NAME,
-+ .id_table = isapnp_devices,
-+ .probe = isapnp_init_one,
-+ .remove = isapnp_remove_one,
-+};
-+
-+static int __init isapnp_init(void)
-+{
-+ return pnp_register_driver(&isapnp_driver);
-+}
-+
-+static void __exit isapnp_exit(void)
-+{
-+ pnp_unregister_driver(&isapnp_driver);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for ISA PnP ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(isapnp_init);
-+module_exit(isapnp_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_it8172.c linux-2.6.16-rc6/drivers/scsi/pata_it8172.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_it8172.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_it8172.c 2006-02-16 15:39:11.000000000 +0000
-@@ -0,0 +1,280 @@
-+/*
-+ * pata_it8172.c - IT8172 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based heavily on
-+ *
-+ * BRIEF MODULE DESCRIPTION
-+ * IT8172 IDE controller support
-+ *
-+ * Copyright 2000 MontaVista Software Inc.
-+ * Author: MontaVista Software, Inc.
-+ * stevel@mvista.com or source@mvista.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
-+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * You should have received a copy of the GNU General Public License along
-+ * with this program; if not, write to the Free Software Foundation, Inc.,
-+ * 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ * TODO
-+ * Check for errata
-+ * See if we really need to force native mode
-+ * PIO timings (also lacking in original)
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "it8172"
-+#define DRV_VERSION "0.1.1"
-+
-+static void it8172_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits it8172_enable_bits[] = {
-+ { 0x00, 0, 0x00, 0x00 },
-+ { 0x40, 1, 0x00, 0x01 }
-+ };
-+
-+ if (ap->hard_port_no && !pci_test_config_bits(pdev, &it8172_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * it8172_set_pio_timing - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called by both the pio and dma setup functions to set the controller
-+ * timings for PIO transfers. We must load both the mode number and
-+ * timing values into the controller.
-+ */
-+
-+static void it8172_set_pio_timing(struct ata_port *ap, struct ata_device *adev, int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u16 reg40;
-+
-+ pci_read_config_word(pdev, 0x40, &reg40);
-+
-+ /*
-+ * FIX! The DIOR/DIOW pulse width and recovery times in port 0x44
-+ * are being left at the default values of 8 PCI clocks (242 nsec
-+ * for a 33 MHz clock). These can be safely shortened at higher
-+ * PIO modes. The DIOR/DIOW pulse width and recovery times only
-+ * apply to PIO modes, not to the DMA modes.
-+ */
-+
-+ /*
-+ * Enable port 0x44. The IT8172G spec is confused; it calls
-+ * this register the "Slave IDE Timing Register", but in fact,
-+ * it controls timing for both master and slave drives.
-+ */
-+
-+ reg40 |= 0x4000;
-+ if (adev->devno) {
-+ reg40 |= 0xC006;
-+ if (pio > 1)
-+ /* Enable prefetch and IORDY sample-point */
-+ reg40 |= 0x0060;
-+ } else {
-+ reg40 |= 0xC060;
-+ if (pio > 1)
-+ /* Enable prefetch and IORDY sample-point */
-+ reg40 |= 0x0006;
-+ }
-+ /* Write back the enables */
-+ pci_write_config_word(pdev, 0x40, reg40);
-+}
-+
-+/**
-+ * it8172_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. We use a shared helper for this
-+ * as the DMA setup must also adjust the PIO timing information.
-+ */
-+
-+static void it8172_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ it8172_set_pio_timing(ap, adev, adev->pio_mode - XFER_PIO_0);
-+}
-+
-+/**
-+ * it8172_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the DMA mode setup. We must tune an appropriate PIO
-+ * mode to match.
-+ */
-+
-+static void it8172_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int dn = (2 * ap->hard_port_no) + adev->devno;
-+ u8 reg48, reg4a;
-+ int pio;
-+
-+ static int pio_map[] = { 1, 3, 4};
-+ /*
-+ * Setting the DMA cycle time to 2 or 3 PCI clocks (60 and 91 nsec
-+ * at 33 MHz PCI clock) seems to cause BadCRC errors during DMA
-+ * transfers on some drives, even though both numbers meet the minimum
-+ * ATAPI-4 spec of 73 and 54 nsec for UDMA 1 and 2 respectively.
-+ * So the faster times are just commented out here. The good news is
-+ * that the slower cycle time has very little affect on transfer
-+ * performance.
-+ */
-+
-+ pci_read_config_byte(pdev, 0x48, &reg48);
-+ pci_read_config_byte(pdev, 0x4A, &reg4a);
-+
-+ reg4a &= ~(3 << (4 * dn));
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ reg48 |= 1 << dn;
-+#ifdef UDMA_TIMING_SET
-+ reg4a |= ((adev->dma_mode - XFER_UDMA_0) << (4 * dn));
-+#endif
-+ pio = 4;
-+ } else {
-+ pio = pio_map[adev->dma_mode - XFER_MW_DMA_0];
-+ reg48 &= ~ (1 << dn);
-+ }
-+ pci_write_config_byte(pdev, 0x48, reg48);
-+ pci_write_config_byte(pdev, 0x4A, reg4a);
-+ it8172_set_pio_timing(ap, adev, pio);
-+
-+}
-+
-+static struct scsi_host_template it8172_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations it8172_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = it8172_set_piomode,
-+ .set_dmamode = it8172_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = it8172_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int it8172_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &it8172_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x06, /* No MWDMA0 support */
-+ .udma_mask = 0x7,
-+ .port_ops = &it8172_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ if ((!(PCI_FUNC(dev->devfn) & 1) ||
-+ (!((dev->class >> 8) == PCI_CLASS_STORAGE_IDE))))
-+ return -ENODEV; /* IT8172 is more than an IDE controller */
-+
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id it8172[] = {
-+ { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8172G, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0, },
-+};
-+
-+static struct pci_driver it8172_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = it8172,
-+ .probe = it8172_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init it8172_init(void)
-+{
-+ return pci_register_driver(&it8172_pci_driver);
-+}
-+
-+
-+static void __exit it8172_exit(void)
-+{
-+ pci_unregister_driver(&it8172_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for ITE IT8172");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, it8172);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(it8172_init);
-+module_exit(it8172_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_it821x.c linux-2.6.16-rc6/drivers/scsi/pata_it821x.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_it821x.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_it821x.c 2006-03-08 17:14:51.000000000 +0000
-@@ -0,0 +1,790 @@
-+/*
-+ * ata-it821x.c - IT821x PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon
-+ *
-+ * it821x.c
-+ *
-+ * linux/drivers/ide/pci/it821x.c Version 0.09 December 2004
-+ *
-+ * Copyright (C) 2004 Red Hat <alan@redhat.com>
-+ *
-+ * May be copied or modified under the terms of the GNU General Public License
-+ * Based in part on the ITE vendor provided SCSI driver.
-+ *
-+ * Documentation available from
-+ * http://www.ite.com.tw/pc/IT8212F_V04.pdf
-+ * Some other documents are NDA.
-+ *
-+ * The ITE8212 isn't exactly a standard IDE controller. It has two
-+ * modes. In pass through mode then it is an IDE controller. In its smart
-+ * mode its actually quite a capable hardware raid controller disguised
-+ * as an IDE controller. Smart mode only understands DMA read/write and
-+ * identify, none of the fancier commands apply. The IT8211 is identical
-+ * in other respects but lacks the raid mode.
-+ *
-+ * Errata:
-+ * o Rev 0x10 also requires master/slave hold the same DMA timings and
-+ * cannot do ATAPI MWDMA.
-+ * o The identify data for raid volumes lacks CHS info (technically ok)
-+ * but also fails to set the LBA28 and other bits. We fix these in
-+ * the IDE probe quirk code.
-+ * o If you write LBA48 sized I/O's (ie > 256 sector) in smart mode
-+ * raid then the controller firmware dies
-+ * o Smart mode without RAID doesn't clear all the necessary identify
-+ * bits to reduce the command set to the one used
-+ *
-+ * This has a few impacts on the driver
-+ * - In pass through mode we do all the work you would expect
-+ * - In smart mode the clocking set up is done by the controller generally
-+ * but we must watch the other limits and filter.
-+ * - There are a few extra vendor commands that actually talk to the
-+ * controller but only work PIO with no IRQ.
-+ *
-+ * Vendor areas of the identify block in smart mode are used for the
-+ * timing and policy set up. Each HDD in raid mode also has a serial
-+ * block on the disk. The hardware extra commands are get/set chip status,
-+ * rebuild, get rebuild status.
-+ *
-+ * In Linux the driver supports pass through mode as if the device was
-+ * just another IDE controller. If the smart mode is running then
-+ * volumes are managed by the controller firmware and each IDE "disk"
-+ * is a raid volume. Even more cute - the controller can do automated
-+ * hotplug and rebuild.
-+ *
-+ * The pass through controller itself is a little demented. It has a
-+ * flaw that it has a single set of PIO/MWDMA timings per channel so
-+ * non UDMA devices restrict each others performance. It also has a
-+ * single clock source per channel so mixed UDMA100/133 performance
-+ * isn't perfect and we have to pick a clock. Thankfully none of this
-+ * matters in smart mode. ATAPI DMA is not currently supported.
-+ *
-+ * It seems the smart mode is a win for RAID1/RAID10 but otherwise not.
-+ *
-+ * TODO
-+ * - ATAPI and other speed filtering
-+ * - Command filter in smart mode
-+ * - RAID configuration ioctls
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+
-+#define DRV_NAME "it821x"
-+#define DRV_VERSION "0.2.2"
-+
-+struct it821x_dev
-+{
-+ unsigned int smart:1, /* Are we in smart raid mode */
-+ timing10:1; /* Rev 0x10 */
-+ u8 clock_mode; /* 0, ATA_50 or ATA_66 */
-+ u8 want[2][2]; /* Mode/Pri log for master slave */
-+ /* We need these for switching the clock when DMA goes on/off
-+ The high byte is the 66Mhz timing */
-+ u16 pio[2]; /* Cached PIO values */
-+ u16 mwdma[2]; /* Cached MWDMA values */
-+ u16 udma[2]; /* Cached UDMA values (per drive) */
-+ u16 last_device; /* Master or slave loaded ? */
-+};
-+
-+#define ATA_66 0
-+#define ATA_50 1
-+#define ATA_ANY 2
-+
-+#define UDMA_OFF 0
-+#define MWDMA_OFF 0
-+
-+/*
-+ * We allow users to force the card into non raid mode without
-+ * flashing the alternative BIOS. This is also neccessary right now
-+ * for embedded platforms that cannot run a PC BIOS but are using this
-+ * device.
-+ */
-+
-+static int it8212_noraid;
-+
-+
-+/**
-+ * it821x_phy_reset - probe/reset
-+ * @ap: ATA port
-+ *
-+ * Set the cable type and trigger a probe
-+ */
-+
-+static void it821x_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA80;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * it821x_program - program the PIO/MWDMA registers
-+ * @ap: ATA port
-+ * @adev: Device to program
-+ * @timing: Timing value (66Mhz in top 8bits, 50 in the low 8)
-+ *
-+ * Program the PIO/MWDMA timing for this channel according to the
-+ * current clock. These share the same register so are managed by
-+ * the DMA start/stop sequence as with the old driver.
-+ */
-+
-+static void it821x_program(struct ata_port *ap, struct ata_device *adev, u16 timing)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct it821x_dev *itdev = ap->private_data;
-+ int channel = ap->hard_port_no;
-+ u8 conf;
-+
-+ /* Program PIO/MWDMA timing bits */
-+ if (itdev->clock_mode == ATA_66)
-+ conf = timing >> 8;
-+ else
-+ conf = timing & 0xFF;
-+ pci_write_config_byte(pdev, 0x54 + 4 * channel, conf);
-+}
-+
-+
-+/**
-+ * it821x_program_udma - program the UDMA registers
-+ * @ap: ATA port
-+ * @adev: ATA device to update
-+ * @timing: Timing bits. Top 8 are for 66Mhz bottom for 50Mhz
-+ *
-+ * Program the UDMA timing for this drive according to the
-+ * current clock. Handles the dual clocks and also knows about
-+ * the errata on the 0x10 revision. The UDMA errata is partly handled
-+ * here and partly in start_dma.
-+ */
-+
-+static void it821x_program_udma(struct ata_port *ap, struct ata_device *adev, u16 timing)
-+{
-+ struct it821x_dev *itdev = ap->private_data;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int channel = ap->hard_port_no;
-+ int unit = adev->devno;
-+ u8 conf;
-+
-+ /* Program UDMA timing bits */
-+ if (itdev->clock_mode == ATA_66)
-+ conf = timing >> 8;
-+ else
-+ conf = timing & 0xFF;
-+ if (itdev->timing10 == 0)
-+ pci_write_config_byte(pdev, 0x56 + 4 * channel + unit, conf);
-+ else {
-+ /* Early revision must be programmed for both together */
-+ pci_write_config_byte(pdev, 0x56 + 4 * channel, conf);
-+ pci_write_config_byte(pdev, 0x56 + 4 * channel + 1, conf);
-+ }
-+}
-+
-+/**
-+ * it821x_clock_strategy
-+ * @ap: ATA interface
-+ * @adev: ATA device being updated
-+ *
-+ * Select between the 50 and 66Mhz base clocks to get the best
-+ * results for this interface.
-+ */
-+
-+static void it821x_clock_strategy(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct it821x_dev *itdev = ap->private_data;
-+ u8 unit = adev->devno;
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+
-+ int clock, altclock;
-+ u8 v;
-+ int sel = 0;
-+
-+ /* Look for the most wanted clocking */
-+ if (itdev->want[0][0] > itdev->want[1][0]) {
-+ clock = itdev->want[0][1];
-+ altclock = itdev->want[1][1];
-+ } else {
-+ clock = itdev->want[1][1];
-+ altclock = itdev->want[0][1];
-+ }
-+
-+ /* Master doesn't care does the slave ? */
-+ if (clock == ATA_ANY)
-+ clock = altclock;
-+
-+ /* Nobody cares - keep the same clock */
-+ if (clock == ATA_ANY)
-+ return;
-+ /* No change */
-+ if (clock == itdev->clock_mode)
-+ return;
-+
-+ /* Load this into the controller ? */
-+ if (clock == ATA_66)
-+ itdev->clock_mode = ATA_66;
-+ else {
-+ itdev->clock_mode = ATA_50;
-+ sel = 1;
-+ }
-+ pci_read_config_byte(pdev, 0x50, &v);
-+ v &= ~(1 << (1 + ap->hard_port_no));
-+ v |= sel << (1 + ap->hard_port_no);
-+ pci_write_config_byte(pdev, 0x50, v);
-+
-+ /*
-+ * Reprogram the UDMA/PIO of the pair drive for the switch
-+ * MWDMA will be dealt with by the dma switcher
-+ */
-+ if (pair && itdev->udma[1-unit] != UDMA_OFF) {
-+ it821x_program_udma(ap, pair, itdev->udma[1-unit]);
-+ it821x_program(ap, pair, itdev->pio[1-unit]);
-+ }
-+ /*
-+ * Reprogram the UDMA/PIO of our drive for the switch.
-+ * MWDMA will be dealt with by the dma switcher
-+ */
-+ if (itdev->udma[unit] != UDMA_OFF) {
-+ it821x_program_udma(ap, adev, itdev->udma[unit]);
-+ it821x_program(ap, adev, itdev->pio[unit]);
-+ }
-+}
-+
-+/**
-+ * it821x_passthru_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Configure for PIO mode. This is complicated as the register is
-+ * shared by PIO and MWDMA and for both channels.
-+ */
-+
-+static void it821x_passthru_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ /* Spec says 89 ref driver uses 88 */
-+ static u16 pio[] = { 0xAA88, 0xA382, 0xA181, 0x3332, 0x3121 };
-+ static u8 pio_want[] = { ATA_66, ATA_66, ATA_66, ATA_66, ATA_ANY };
-+
-+ struct it821x_dev *itdev = ap->private_data;
-+ int unit = adev->devno;
-+ int mode_wanted = adev->pio_mode - XFER_PIO_0;
-+
-+ /* We prefer 66Mhz clock for PIO 0-3, don't care for PIO4 */
-+ itdev->want[unit][1] = pio_want[mode_wanted];
-+ itdev->want[unit][0] = 1; /* PIO is lowest priority */
-+ itdev->pio[unit] = pio[mode_wanted];
-+ it821x_clock_strategy(ap, adev);
-+ it821x_program(ap, adev, itdev->pio[unit]);
-+}
-+
-+/**
-+ * it821x_passthru_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Set up the DMA modes. The actions taken depend heavily on the mode
-+ * to use. If UDMA is used as is hopefully the usual case then the
-+ * timing register is private and we need only consider the clock. If
-+ * we are using MWDMA then we have to manage the setting ourself as
-+ * we switch devices and mode.
-+ */
-+
-+static void it821x_passthru_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u16 dma[] = { 0x8866, 0x3222, 0x3121 };
-+ static u8 mwdma_want[] = { ATA_ANY, ATA_66, ATA_ANY };
-+ static u16 udma[] = { 0x4433, 0x4231, 0x3121, 0x2121, 0x1111, 0x2211, 0x1111 };
-+ static u8 udma_want[] = { ATA_ANY, ATA_50, ATA_ANY, ATA_66, ATA_66, ATA_50, ATA_66 };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct it821x_dev *itdev = ap->private_data;
-+ int channel = ap->hard_port_no;
-+ int unit = adev->devno;
-+ u8 conf;
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ int mode_wanted = adev->dma_mode - XFER_UDMA_0;
-+
-+ itdev->want[unit][1] = udma_want[mode_wanted];
-+ itdev->want[unit][0] = 3; /* UDMA is high priority */
-+ itdev->mwdma[unit] = MWDMA_OFF;
-+ itdev->udma[unit] = udma[mode_wanted];
-+ if (mode_wanted >= 5)
-+ itdev->udma[unit] |= 0x8080; /* UDMA 5/6 select on */
-+
-+ /* UDMA on. Again revision 0x10 must do the pair */
-+ pci_read_config_byte(pdev, 0x50, &conf);
-+ if (itdev->timing10)
-+ conf &= channel ? 0x9F: 0xE7;
-+ else
-+ conf &= ~ (1 << (3 + 2 * channel + unit));
-+ pci_write_config_byte(pdev, 0x50, conf);
-+ it821x_clock_strategy(ap, adev);
-+ it821x_program_udma(ap, adev, itdev->udma[unit]);
-+ } else {
-+ int mode_wanted = adev->dma_mode - XFER_UDMA_0;
-+
-+ itdev->want[unit][1] = mwdma_want[mode_wanted];
-+ itdev->want[unit][0] = 2; /* MWDMA is low priority */
-+ itdev->mwdma[unit] = dma[mode_wanted];
-+ itdev->udma[unit] = UDMA_OFF;
-+
-+ /* UDMA bits off - Revision 0x10 do them in pairs */
-+ pci_read_config_byte(pdev, 0x50, &conf);
-+ if (itdev->timing10)
-+ conf |= channel ? 0x60: 0x18;
-+ else
-+ conf |= 1 << (3 + 2 * channel + unit);
-+ pci_write_config_byte(pdev, 0x50, conf);
-+ it821x_clock_strategy(ap, adev);
-+ }
-+}
-+
-+/**
-+ * it821x_passthru_dma_start - DMA start callback
-+ * @qc: Command in progress
-+ *
-+ * Usually drivers set the DMA timing at the point the set_dmamode call
-+ * is made. IT821x however requires we load new timings on the
-+ * transitions in some cases.
-+ */
-+
-+static void it821x_passthru_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ struct it821x_dev *itdev = ap->private_data;
-+ int unit = adev->devno;
-+
-+ if (itdev->mwdma[unit] != MWDMA_OFF)
-+ it821x_program(ap, adev, itdev->mwdma[unit]);
-+ else if (itdev->udma[unit] != UDMA_OFF && itdev->timing10)
-+ it821x_program_udma(ap, adev, itdev->udma[unit]);
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * it821x_passthru_dma_stop - DMA stop callback
-+ * @qc: ATA command
-+ *
-+ * We loaded new timings in dma_start, as a result we need to restore
-+ * the PIO timings in dma_stop so that the next command issue gets the
-+ * right clock values.
-+ */
-+
-+static void it821x_passthru_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ struct it821x_dev *itdev = ap->private_data;
-+ int unit = adev->devno;
-+
-+ ata_bmdma_stop(qc);
-+ if (itdev->mwdma[unit] != MWDMA_OFF)
-+ it821x_program(ap, adev, itdev->pio[unit]);
-+}
-+
-+
-+/**
-+ * it821x_passthru_dev_select - Select master/slave
-+ * @ap: ATA port
-+ * @device: Device number (not pointer)
-+ *
-+ * Device selection hook. If neccessary perform clock switching
-+ */
-+
-+void it821x_passthru_dev_select(struct ata_port *ap, unsigned int device)
-+{
-+ struct it821x_dev *itdev = ap->private_data;
-+ if (itdev && device != itdev->last_device) {
-+ struct ata_device *adev = &ap->device[device];
-+ it821x_program(ap, adev, itdev->pio[adev->devno]);
-+ itdev->last_device = device;
-+ }
-+}
-+
-+/**
-+ * it821x_passthru_qc_issue_prot - wrap qc issue prot
-+ * @qc: command
-+ *
-+ * Wrap the command issue sequence for the IT821x. We need to
-+ * perform out own device selection timing loads before the
-+ * usual happenings kick off
-+ */
-+
-+static int it821x_passthru_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ it821x_passthru_dev_select(qc->ap, qc->dev->devno);
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+/**
-+ * it821x_smart_set_mode - mode setting
-+ * @ap: interface to set up
-+ *
-+ * Use a non standard set_mode function. We don't want to be tuned.
-+ * The BIOS configured everything. Our job is not to fiddle. We
-+ * read the dma enabled bits from the PCI configuration of the device
-+ * and respect them.
-+ */
-+
-+static void it821x_smart_set_mode(struct ata_port *ap)
-+{
-+ int dma_enabled;
-+ int i;
-+
-+ /* Bits 5 and 6 indicate if DMA is active on master/slave */
-+ dma_enabled = inb(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+ if (ata_dev_present(dev)) {
-+ /* We don't really care */
-+ dev->pio_mode = XFER_PIO_0;
-+ dev->dma_mode = XFER_MW_DMA_0;
-+ /* We do need the right mode information for DMA or PIO
-+ and this comes from the current configuration flags */
-+ if (dma_enabled & (1 << (5 + i))) {
-+ dev->xfer_mode = XFER_MW_DMA_0;
-+ dev->xfer_shift = ATA_SHIFT_MWDMA;
-+ dev->flags &= ~ATA_DFLAG_PIO;
-+ } else {
-+ dev->xfer_mode = XFER_PIO_0;
-+ dev->xfer_shift = ATA_SHIFT_PIO;
-+ dev->flags |= ATA_DFLAG_PIO;
-+ }
-+ }
-+ }
-+}
-+
-+/**
-+ * it821x_dev_config - Called each device identify
-+ * @ap: ATA port
-+ * @adev: Device that has just been identified
-+ *
-+ * Perform the initial setup needed for each device that is chip
-+ * special. In our case we need to lock the sector count to avoid
-+ * blowing the brains out of the firmware with large LBA48 requests
-+ *
-+ * FIXME: When FUA appears we need to block FUA too. And SMART and
-+ * basically we need to filter commands for this chip.
-+ */
-+
-+static void it821x_dev_config(struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned char model_num[40];
-+ char *s;
-+ unsigned int len;
-+
-+ /* This block ought to be a library routine as it is in several
-+ drivers now */
-+
-+ ata_dev_id_string(adev->id, model_num, ATA_ID_PROD_OFS,
-+ sizeof(model_num));
-+ s = &model_num[0];
-+ len = strnlen(s, sizeof(model_num));
-+
-+ /* ATAPI specifies that empty space is blank-filled; remove blanks */
-+ while ((len > 0) && (s[len - 1] == ' ')) {
-+ len--;
-+ s[len] = 0;
-+ }
-+
-+ if(ap->host->max_sectors > 255) {
-+ ap->host->max_sectors = 255;
-+ ap->host->hostt->max_sectors = 255;
-+ }
-+ adev->flags |= ATA_DFLAG_LOCK_SECTORS;
-+
-+ if (strstr(model_num, "Integrated Technology Express")) {
-+ /* RAID mode */
-+ printk(KERN_INFO "IT821x %sRAID%d volume",
-+ adev->id[147]?"Bootable ":"",
-+ adev->id[129]);
-+ if(adev->id[129] != 1)
-+ printk("(%dK stripe)", adev->id[146]);
-+ printk(".\n");
-+ }
-+}
-+
-+
-+/**
-+ * it821x_check_atapi_dma - ATAPI DMA handler
-+ * @qc: Command we are about to issue
-+ *
-+ * Decide if this ATAPI command can be issued by DMA on this
-+ * controller. Return 0 if it can be.
-+ */
-+
-+static int it821x_check_atapi_dma(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct it821x_dev *itdev = ap->private_data;
-+
-+ /* No ATAPI DMA in smart mode */
-+ if (itdev->smart)
-+ return -EOPNOTSUPP;
-+ /* No ATAPI DMA on rev 10 */
-+ if (itdev->timing10)
-+ return -EOPNOTSUPP;
-+ /* Cool */
-+ return 0;
-+}
-+
-+
-+/**
-+ * it821x_port_start - port setup
-+ * @ap: ATA port being set up
-+ *
-+ * The it821x needs to maintain private data structures and also to
-+ * use the standard PCI interface which lacks support for this
-+ * functionality. We instead set up the private data on the port
-+ * start hook, and tear it down on port stop
-+ */
-+
-+static int it821x_port_start(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct it821x_dev *itdev;
-+ u8 conf;
-+
-+ int ret = ata_port_start(ap);
-+ if (ret < 0)
-+ return ret;
-+
-+ ap->private_data = kmalloc(sizeof(struct it821x_dev), GFP_KERNEL);
-+ if (ap->private_data == NULL) {
-+ ata_port_stop(ap);
-+ return -ENOMEM;
-+ }
-+
-+ itdev = ap->private_data;
-+ memset(itdev, 0, sizeof(struct it821x_dev));
-+
-+ pci_read_config_byte(pdev, 0x50, &conf);
-+
-+ if (conf & 1) {
-+ itdev->smart = 1;
-+ /* Long I/O's although allowed in LBA48 space cause the
-+ onboard firmware to enter the twighlight zone */
-+ /* No ATAPI DMA in this mode either */
-+ }
-+ /* Pull the current clocks from 0x50 */
-+ if (conf & (1 << (1 + ap->hard_port_no)))
-+ itdev->clock_mode = ATA_50;
-+ else
-+ itdev->clock_mode = ATA_66;
-+
-+ itdev->want[0][1] = ATA_ANY;
-+ itdev->want[1][1] = ATA_ANY;
-+ itdev->last_device = -1;
-+
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &conf);
-+ if (conf == 0x10) {
-+ itdev->timing10 = 1;
-+ /* Need to disable ATAPI DMA for this case */
-+ if (!itdev->smart)
-+ printk(KERN_WARNING DRV_NAME": Revision 0x10, workarounds activated.\n");
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * it821x_port_stop - port shutdown
-+ * @ap: ATA port being removed
-+ *
-+ * Release the private objects we added in it821x_port_start
-+ */
-+
-+static void it821x_port_stop(struct ata_port *ap) {
-+ kfree(ap->private_data);
-+ ap->private_data = NULL; /* We want an OOPS if we reuse this
-+ too late! */
-+ ata_port_stop(ap);
-+}
-+
-+static struct scsi_host_template it821x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ /* 255 sectors to begin with. This is locked in smart mode but not
-+ in pass through */
-+ .max_sectors = 255,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations it821x_smart_port_ops = {
-+ .set_mode = it821x_smart_set_mode,
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .check_atapi_dma= it821x_check_atapi_dma,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+ .dev_config = it821x_dev_config,
-+
-+ .phy_reset = it821x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = it821x_port_start,
-+ .port_stop = it821x_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations it821x_passthru_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = it821x_passthru_set_piomode,
-+ .set_dmamode = it821x_passthru_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .check_atapi_dma= it821x_check_atapi_dma,
-+ .dev_select = it821x_passthru_dev_select,
-+
-+ .phy_reset = it821x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = it821x_passthru_bmdma_start,
-+ .bmdma_stop = it821x_passthru_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = it821x_passthru_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+ .irq_handler = ata_interrupt,
-+ .port_start = it821x_port_start,
-+ .port_stop = it821x_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static void __devinit it821x_disable_raid(struct pci_dev *pdev)
-+{
-+ /* Reset local CPU, and set BIOS not ready */
-+ pci_write_config_byte(pdev, 0x5E, 0x01);
-+
-+ /* Set to bypass mode, and reset PCI bus */
-+ pci_write_config_byte(pdev, 0x50, 0x00);
-+ pci_write_config_word(pdev, PCI_COMMAND,
-+ PCI_COMMAND_PARITY | PCI_COMMAND_IO |
-+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-+ pci_write_config_word(pdev, 0x40, 0xA0F3);
-+
-+ pci_write_config_dword(pdev,0x4C, 0x02040204);
-+ pci_write_config_byte(pdev, 0x42, 0x36);
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x20);
-+}
-+
-+
-+static int it821x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ u8 conf;
-+
-+ static struct ata_port_info info_smart = {
-+ .sht = &it821x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &it821x_smart_port_ops
-+ };
-+ static struct ata_port_info info_passthru = {
-+ .sht = &it821x_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f,
-+ .port_ops = &it821x_passthru_port_ops
-+ };
-+ static struct ata_port_info *port_info[2];
-+
-+ static char *mode[2] = { "pass through", "smart" };
-+
-+ /* Force the card into bypass mode if so requested */
-+ if (it8212_noraid) {
-+ printk(KERN_INFO DRV_NAME ": forcing bypass mode.\n");
-+ it821x_disable_raid(pdev);
-+ }
-+ pci_read_config_byte(pdev, 0x50, &conf);
-+ conf &= 1;
-+
-+ printk(KERN_INFO DRV_NAME ": controller in %s mode.\n", mode[conf]);
-+ if (conf == 0)
-+ port_info[0] = port_info[1] = &info_passthru;
-+ else
-+ port_info[0] = port_info[1] = &info_smart;
-+
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static struct pci_device_id it821x[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8211), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8212), },
-+ { 0, },
-+};
-+
-+static struct pci_driver it821x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = it821x,
-+ .probe = it821x_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init it821x_init(void)
-+{
-+ return pci_register_driver(&it821x_pci_driver);
-+}
-+
-+
-+static void __exit it821x_exit(void)
-+{
-+ pci_unregister_driver(&it821x_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for the IT8211/IT8212 IDE RAID controller");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, it821x);
-+MODULE_VERSION(DRV_VERSION);
-+
-+
-+module_param_named(noraid, it8212_noraid, int, S_IRUGO);
-+MODULE_PARM_DESC(it8212_noraid, "Force card into bypass mode");
-+
-+module_init(it821x_init);
-+module_exit(it821x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_legacy.c linux-2.6.16-rc6/drivers/scsi/pata_legacy.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_legacy.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_legacy.c 2006-02-16 15:33:52.000000000 +0000
-@@ -0,0 +1,672 @@
-+
-+/*
-+ * pata-legacy.c - Legacy port PATA/SATA controller driver.
-+ * Copyright 2005/2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
-+ *
-+ * An ATA driver for the legacy ATA ports.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/ata.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "legacy"
-+#define DRV_VERSION "0.3.1"
-+
-+#define NR_HOST 6
-+
-+static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
-+static int legacy_irq[NR_HOST] = { 15, 14, 11, 10, 8, 12 };
-+
-+static struct ata_host_set *legacy_host[NR_HOST];
-+static int nr_legacy_host;
-+static int legacy_all;
-+static int ht6560a;
-+static int ht6560b;
-+static int opti82c611a;
-+
-+/**
-+ * legacy_set_mode - mode setting
-+ * @ap: IDE interface
-+ *
-+ * Use a non standard set_mode function. We don't want to be tuned.
-+ *
-+ * The BIOS configured everything. Our job is not to fiddle. Just use
-+ * whatever PIO the hardware is using and leave it at that. When we
-+ * get some kind of nice user driven API for control then we can
-+ * expand on this as per hdparm in the base kernel.
-+ */
-+
-+static void legacy_set_mode(struct ata_port *ap)
-+{
-+ int i;
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+ if (ata_dev_present(dev)) {
-+ dev->pio_mode = XFER_PIO_0;
-+ dev->xfer_mode = XFER_PIO_0;
-+ dev->xfer_shift = ATA_SHIFT_PIO;
-+ dev->flags |= ATA_DFLAG_PIO;
-+ }
-+ }
-+}
-+
-+static struct scsi_host_template legacy_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations legacy_port_ops = {
-+ .set_mode = legacy_set_mode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer_noirq,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Promise 20230C and 20620 support
-+ *
-+ * This controller supports PIO0 to PIO2. We set PIO timings conservatively to
-+ * allow for 50MHz Vesa Local Bus. The 20620 DMA support is weird being DMA to
-+ * controller and PIO'd to the host and not supported.
-+ */
-+
-+static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ int tries = 5;
-+ int pio = adev->pio_mode - XFER_PIO_0;
-+ u8 rt;
-+
-+ do
-+ {
-+ inb(0x1F5);
-+ outb(inb(0x1F2) | 0x80, 0x1F2);
-+ inb(0x1F2);
-+ inb(0x3F6);
-+ inb(0x3F6);
-+ inb(0x1F2);
-+ inb(0x1F2);
-+ }
-+ while((inb(0x1F2) & 0x80) && --tries);
-+
-+ outb(inb(0x1F4) & 0x07, 0x1F4);
-+
-+ rt = inb(0x1F3);
-+ rt &= 0x07 << (3 * adev->devno);
-+ rt |= (3 * pio) << (3 * adev->devno);
-+
-+ udelay(100);
-+ outb(inb(0x1F2) | 0x01, 0x1F2);
-+ udelay(100);
-+ inb(0x1F5);
-+
-+}
-+
-+static void pdc_data_xfer_vlb(struct ata_port *ap, struct ata_device *adev, unsigned char *buf, unsigned int buflen, int write_data)
-+{
-+ int slop = buflen & 3;
-+ unsigned long flags;
-+
-+ if (ata_id_has_dword_io(adev->id)) {
-+ local_irq_save(flags);
-+
-+ /* Perform the 32bit I/O synchronization sequence */
-+ inb(ap->ioaddr.nsect_addr);
-+ inb(ap->ioaddr.nsect_addr);
-+ inb(ap->ioaddr.nsect_addr);
-+
-+ /* Now the data */
-+
-+ if (write_data)
-+ outsl(ap->ioaddr.data_addr, buf, buflen >> 2);
-+ else
-+ insl(ap->ioaddr.data_addr, buf, buflen >> 2);
-+
-+ if (unlikely(slop)) {
-+ u32 pad;
-+ if (write_data) {
-+ memcpy(&pad, buf + buflen - slop, slop);
-+ outl(le32_to_cpu(pad), ap->ioaddr.data_addr);
-+ } else {
-+ pad = cpu_to_le16(inl(ap->ioaddr.data_addr));
-+ memcpy(buf + buflen - slop, &pad, slop);
-+ }
-+ }
-+ local_irq_restore(flags);
-+ }
-+ else
-+ ata_pio_data_xfer_noirq(ap, adev, buf, buflen, write_data);
-+}
-+
-+static struct ata_port_operations pdc20230_port_ops = {
-+ .set_piomode = pdc20230_set_piomode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = pdc_data_xfer_vlb,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Holtek 6560A support
-+ *
-+ * This controller supports PIO0 to PIO2 (no IORDY even though higher timings
-+ * can be loaded).
-+ */
-+
-+static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ u8 active, recover;
-+ struct ata_timing t;
-+
-+ /* Get the timing data in cycles. For now play safe at 50Mhz */
-+ ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
-+
-+ active = FIT(t.active, 2, 15);
-+ recover = FIT(t.recover, 4, 15);
-+
-+ inb(0x3E6);
-+ inb(0x3E6);
-+ inb(0x3E6);
-+ inb(0x3E6);
-+
-+ outb(recover << 4 | active, ap->ioaddr.device_addr);
-+ inb(ap->ioaddr.status_addr);
-+}
-+
-+static struct ata_port_operations ht6560a_port_ops = {
-+ .set_piomode = ht6560a_set_piomode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer, /* Check vlb/noirq */
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Holtek 6560B support
-+ *
-+ * This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO setting
-+ * unless we see an ATAPI device in which case we force it off.
-+ *
-+ * FIXME: need to implement 2nd channel support.
-+ */
-+
-+static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ u8 active, recover;
-+ struct ata_timing t;
-+
-+ /* Get the timing data in cycles. For now play safe at 50Mhz */
-+ ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
-+
-+ active = FIT(t.active, 2, 15);
-+ recover = FIT(t.recover, 2, 16);
-+ recover &= 0x15;
-+
-+ inb(0x3E6);
-+ inb(0x3E6);
-+ inb(0x3E6);
-+ inb(0x3E6);
-+
-+ outb(recover << 4 | active, ap->ioaddr.device_addr);
-+
-+ if (adev->class != ATA_DEV_ATA) {
-+ u8 rconf = inb(0x3E6);
-+ if (rconf & 0x24) {
-+ rconf &= ~ 0x24;
-+ outb(rconf, 0x3E6);
-+ }
-+ }
-+ inb(ap->ioaddr.status_addr);
-+}
-+
-+static struct ata_port_operations ht6560b_port_ops = {
-+ .set_piomode = ht6560b_set_piomode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer, /* FIXME: Check 32bit and noirq */
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/*
-+ * Opti 82C611A
-+ *
-+ * This controller supports PIO0 to PIO3.
-+ */
-+
-+static void opti82c611a_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ u8 active, recover, setup;
-+ struct ata_timing t;
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+ int clock;
-+ int khz[4] = { 50000, 40000, 33000, 25000 };
-+ u8 rc;
-+
-+ /* Enter configuration mode */
-+ inb(ap->ioaddr.error_addr);
-+ inb(ap->ioaddr.error_addr);
-+
-+ /* Read VLB clock strapping */
-+ clock = 1000000000 / khz[inb(ap->ioaddr.lbah_addr) & 0x03];
-+
-+ /* Get the timing data in cycles */
-+ ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
-+
-+ /* Setup timing is shared */
-+ if (pair) {
-+ struct ata_timing tp;
-+ ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
-+
-+ ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
-+ }
-+
-+ active = FIT(t.active, 2, 17) - 2;
-+ recover = FIT(t.recover, 1, 16) - 1;
-+ setup = FIT(t.setup, 1, 4) - 1;
-+
-+ /* Select the right timing bank for write timing */
-+ rc = inb(ap->ioaddr.lbal_addr);
-+ rc &= 0x7F;
-+ rc |= (adev->devno << 7);
-+ outb(rc, ap->ioaddr.lbal_addr);
-+
-+ /* Write the timings */
-+ outb(active << 4 | recover, ap->ioaddr.error_addr);
-+
-+ /* Select the right bank for read timings, also
-+ load the shared timings for address */
-+ rc = inb(ap->ioaddr.device_addr);
-+ rc &= 0xC0;
-+ rc |= adev->devno; /* Index select */
-+ rc |= (setup << 4) | 0x04;
-+ outb(rc, ap->ioaddr.device_addr);
-+
-+ /* Load the read timings */
-+ outb(active << 4 | recover, ap->ioaddr.data_addr);
-+
-+ /* Ensure the timing register mode is right */
-+ rc = inb (ap->ioaddr.lbal_addr);
-+ rc &= 0x73;
-+ rc |= 0x84;
-+ outb(rc, ap->ioaddr.lbal_addr);
-+
-+ /* Exit command mode */
-+ outb(0x82, ap->ioaddr.nsect_addr);
-+}
-+
-+static struct ata_port_operations opti82c611a_port_ops = {
-+ .set_piomode = opti82c611a_set_piomode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * legacy_init_one - attach a legacy interface
-+ * @io: I/O port start
-+ * @ctrl: control port
-+ * @irq: interrupt line
-+ *
-+ * Register an ISA bus IDE interface. Such interfaces are PIO and we
-+ * assume do not support IRQ sharing.
-+ */
-+
-+static __init int legacy_init_one(unsigned long io, unsigned long ctrl, int irq)
-+{
-+ struct ata_probe_ent ae;
-+ int ret;
-+ struct ata_port_operations *ops = &legacy_port_ops;
-+ int pio_mask = 0x1F;
-+
-+ if (request_region(io, 8, "pata_legacy") == NULL)
-+ return -EBUSY;
-+ if (request_region(ctrl, 1, "pata_legacy") == NULL) {
-+ release_region(io, 8);
-+ return -EBUSY;
-+ }
-+
-+ if (ht6560a == 1 && (io == 0x1F0 || io == 0x170)) {
-+ ops = &ht6560a_port_ops;
-+ pio_mask = 0x07;
-+ }
-+ if (ht6560b == 1 && (io == 0x1F0 || io == 0x170)) {
-+ ops = &ht6560b_port_ops;
-+ pio_mask = 0x1F;
-+ }
-+ if (opti82c611a == 1 && (io == 0x1F0 || io == 0x170)) {
-+ ops = &opti82c611a_port_ops;
-+ pio_mask = 0x0F;
-+ }
-+ else if (io == 0x1F0) {
-+ /* Probes */
-+ inb(0x1F5);
-+ outb(inb(0x1F2) | 0x80, 0x1F2);
-+ inb(0x1F2);
-+ inb(0x3F6);
-+ inb(0x3F6);
-+ inb(0x1F2);
-+ inb(0x1F2);
-+
-+ if ((inb(0x1F2) & 0x80) == 0) {
-+ /* PDC20230 or 20630 ? */
-+ printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller detected.\n");
-+ pio_mask = 0x07;
-+ ops = &pdc20230_port_ops;
-+ udelay(100);
-+ inb(0x1F5);
-+ } else {
-+ outb(0x55, 0x1F2);
-+ inb(0x1F2);
-+ inb(0x1F2);
-+ if (inb(0x1F2) == 0x00) {
-+ printk(KERN_INFO "PDC20230-B VLB ATA controller detected.\n");
-+ }
-+ }
-+ }
-+ memset(&ae, 0, sizeof(struct ata_probe_ent));
-+ INIT_LIST_HEAD(&ae.node);
-+ ae.dev = NULL;
-+ ae.port_ops = ops;
-+ ae.sht = &legacy_sht;
-+ ae.n_ports = 1;
-+ ae.pio_mask = pio_mask;
-+ ae.irq = irq;
-+ ae.irq_flags = 0;
-+ ae.host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_IRQ_MASK;
-+ ae.port[0].cmd_addr = io;
-+ ae.port[0].altstatus_addr = ctrl;
-+ ae.port[0].ctl_addr = ctrl;
-+ ata_std_ports(&ae.port[0]);
-+
-+ ret = ata_device_add(&ae);
-+ if (ret == 0)
-+ return -ENODEV;
-+
-+ legacy_host[nr_legacy_host++] = ae.host_set;
-+ return 0;
-+}
-+
-+/**
-+ * legacy_check_special_cases - ATA special cases
-+ * @p: PCI device to check
-+ * @master: set this if we find an ATA master
-+ * @master: set this if we find an ATA secondary
-+ *
-+ * A small number of vendors implemented early PCI ATA interfaces on bridge logic
-+ * without the ATA interface being PCI visible. Where we have a matching PCI driver
-+ * we must skip the relevant device here. If we don't know about it then the legacy
-+ * driver is the right driver anyway.
-+ */
-+
-+static void legacy_check_special_cases(struct pci_dev *p, int *primary, int *secondary)
-+{
-+ /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
-+ if (p->vendor == 0x1078 && p->device == 0x0000) {
-+ *primary = *secondary = 1;
-+ return;
-+ }
-+ /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
-+ if (p->vendor == 0x1078 && p->device == 0x0002) {
-+ *primary = *secondary = 1;
-+ return;
-+ }
-+ /* Intel MPIIX - PIO ATA on non PCI side of bridge */
-+ if (p->vendor == 0x8086 && p->device == 0x1234) {
-+ u16 r;
-+ pci_read_config_word(p, 0x6C, &r);
-+ if (r & 0x8000) { /* ATA port enabled */
-+ if (r & 0x4000)
-+ *secondary = 1;
-+ else
-+ *primary = 1;
-+ }
-+ return;
-+ }
-+}
-+
-+/**
-+ * legacy_init - attach legacy interfaces
-+ *
-+ * Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
-+ * Right now we do not scan the ide0 and ide1 address but should do so
-+ * for non PCI systems or systems with no PCI IDE legacy mode devices.
-+ * If you fix that note there are special cases to consider like VLB
-+ * drivers and CS5510/20.
-+ */
-+
-+static __init int legacy_init(void)
-+{
-+ int i;
-+ int ct = 0;
-+ int primary = 0;
-+ int secondary = 0;
-+ int last_port = NR_HOST;
-+
-+ struct pci_dev *p = NULL;
-+
-+ for_each_pci_dev(p) {
-+ int r;
-+ /* Check for any overlap of the system ATA mappings. Native mode controllers
-+ stuck on these addresses or some devices in 'raid' mode won't be found by
-+ the storage class test */
-+ for (r = 0; r < 6; r++) {
-+ if (pci_resource_start(p, r) == 0x1f0)
-+ primary = 1;
-+ if (pci_resource_start(p, r) == 0x170)
-+ secondary = 1;
-+ }
-+ /* Check for special cases */
-+ legacy_check_special_cases(p, &primary, &secondary);
-+
-+ /* If PCI bus is present then don't probe for tertiary legacy ports */
-+ if (legacy_all == 0)
-+ last_port = 2;
-+ }
-+
-+
-+ for (i = 0; i < last_port; i++) {
-+ /* Skip primary if we have seen a PCI one */
-+ if (i == 0 && primary == 1)
-+ continue;
-+ /* Skip secondary if we have seen a PCI one */
-+ if (i == 1 && secondary == 1)
-+ continue;
-+ if (legacy_init_one(legacy_port[i],
-+ legacy_port[i] + 0x0206,
-+ legacy_irq[i]) == 0)
-+ ct++;
-+ }
-+ if (ct != 0)
-+ return 0;
-+ return -ENODEV;
-+}
-+
-+static __exit void legacy_exit(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < nr_legacy_host; i++) {
-+ struct ata_port *ap =legacy_host[i]->ports[0];
-+ unsigned long io = ap->ioaddr.cmd_addr;
-+ unsigned long ctrl = ap->ioaddr.ctl_addr;
-+ ata_host_set_remove(legacy_host[i]);
-+ release_region(io, 8);
-+ release_region(ctrl, 1);
-+ }
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for legacy ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+/**
-+ * legacy_probe_all - setup argument handler
-+ * @unused: unused
-+ *
-+ * Called when the probe_all argument is passed to this driver. This indicates
-+ * that we should check all the legacy ATA addresses even if PCI is present. Should
-+ * only ever be needed on very strange PCI/legacy combinations
-+ */
-+
-+static int __init legacy_probe_all(char *unused)
-+{
-+ legacy_all = 1;
-+ return 1;
-+}
-+
-+__setup("probe-all", legacy_probe_all);
-+
-+/**
-+ * legacy_ht6560a - setup argument handler
-+ * @unused: unused
-+ *
-+ * Called when the ht6560a argument is passed to this driver. This indicates
-+ * that we should check all the legacy ATA addresses even if PCI is present. Should
-+ * only ever be needed on very strange PCI/legacy combinations
-+ */
-+
-+static int __init legacy_ht6560a(char *unused)
-+{
-+ ht6560a = 1;
-+ return 1;
-+}
-+
-+__setup("ht6560a", legacy_ht6560a);
-+
-+/**
-+ * legacy_ht6560b - setup argument handler
-+ * @unused: unused
-+ *
-+ * Called when the ht6560b argument is passed to this driver. This indicates
-+ * that we should check all the legacy ATA addresses even if PCI is present. Should
-+ * only ever be needed on very strange PCI/legacy combinations
-+ */
-+
-+static int __init legacy_ht6560b(char *unused)
-+{
-+ ht6560b = 1;
-+ return 1;
-+}
-+
-+__setup("ht6560b", legacy_ht6560b);
-+
-+/**
-+ * legacy_ht6560a - setup argument handler
-+ * @unused: unused
-+ *
-+ * Called when the ht6560a argument is passed to this driver. This indicates
-+ * that we should check all the legacy ATA addresses even if PCI is present. Should
-+ * only ever be needed on very strange PCI/legacy combinations
-+ */
-+
-+static int __init legacy_opti82c611a(char *unused)
-+{
-+ opti82c611a = 1;
-+ return 1;
-+}
-+
-+__setup("opti82c611a", legacy_opti82c611a);
-+
-+module_init(legacy_init);
-+module_exit(legacy_exit);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_mpiix.c linux-2.6.16-rc6/drivers/scsi/pata_mpiix.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_mpiix.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_mpiix.c 2006-03-10 17:06:42.000000000 +0000
-@@ -0,0 +1,303 @@
-+/*
-+ * pata_mpiix.c - Intel MPIIX PATA for new ATA layer
-+ * (C) 2005-2006 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * The MPIIX is different enough to the PIIX4 and friends that we give it
-+ * a separate driver. The old ide/pci code handles this by just not tuning
-+ * MPIIX at all.
-+ *
-+ * The MPIIX also differs in another important way from the majority of PIIX
-+ * devices. The chip is a bridge (pardon the pun) between the old world of
-+ * ISA IDE and PCI IDE. Although the ATA timings are PCI configured the actual
-+ * IDE controller is not decoded in PCI space and the chip does not claim to
-+ * be IDE class PCI. This requires slightly non-standard probe logic compared
-+ * with PCI IDE and also that we do not disable the device when our driver is
-+ * unloaded (as it has many other functions).
-+ *
-+ * The driver conciously keeps this logic internally to avoid pushing quirky
-+ * PATA history into the clean libata layer.
-+ *
-+ * Thinkpad specific note: If you boot an MPIIX using thinkpad with a PCMCIA
-+ * hard disk present this driver will not detect it. This is not a bug. In this
-+ * configuration the secondary port of the MPIIX is disabled and the addresses
-+ * are decoded by the PCMCIA bridge and therefore are for a generic IDE driver
-+ * to operate.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_mpiix"
-+#define DRV_VERSION "0.4.1"
-+
-+/**
-+ * mpiix_phy_reset - probe reset
-+ * @ap: ATA port
-+ *
-+ * Perform the ATA probe and bus reset sequence plus specific handling
-+ * for this hardware. The MPIIX has the enable bits in a different place
-+ * to PIIX4 and friends. As a pure PIO device it has no cable detect
-+ */
-+
-+static void mpiix_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static const struct pci_bits mpiix_enable_bits[] = {
-+ { 0x6D, 1, 0x80, 0x80 },
-+ { 0x6F, 1, 0x80, 0x80 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &mpiix_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * mpiix_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. The MPIIX allows us to program the
-+ * IORDY sample point (2-5 clocks), recovery 1-4 clocks and whether
-+ * prefetching or iordy are used.
-+ *
-+ * This would get very ugly because we can only program timing for one
-+ * device at a time, the other gets PIO0. Fortunately libata calls
-+ * our qc_issue_prot command before a command is issued so we can
-+ * flip the timings back and forth to reduce the pain.
-+ */
-+
-+static void mpiix_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ int control = 0;
-+ int pio = adev->pio_mode - XFER_PIO_0;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u16 idetim;
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-+
-+ pci_read_config_word(pdev, 0x6C, &idetim);
-+ /* Mask the IORDY/TIME/PPE0 bank for this device */
-+ if (adev->class == ATA_DEV_ATA)
-+ control |= 4; /* PPE enable for disk */
-+ if (ata_pio_need_iordy(adev))
-+ control |= 2; /* IORDY */
-+ if (pio > 0)
-+ control |= 1; /* This drive is on the fast timing bank */
-+
-+ /* Mask out timing and clear both TIME bank selects */
-+ idetim &= 0xCCEE;
-+ idetim &= ~(0x07 << (2 * adev->devno));
-+ idetim |= (control << (2 * adev->devno));
-+
-+ idetim |= (timings[pio][0] << 12) | (timings[pio][1] << 8);
-+ pci_write_config_word(pdev, 0x6C, idetim);
-+
-+ /* We use ap->private_data as a pointer to the device currently
-+ loaded for timing */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * mpiix_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Our logic also clears TIME0/TIME1 for the other device so
-+ * that, even if we get this wrong, cycles to the other device will
-+ * be made PIO0.
-+ */
-+
-+static int mpiix_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+
-+ /* If modes have been configured and the channel data is not loaded
-+ then load it. We have to check if pio_mode is set as the core code
-+ does not set adev->pio_mode to XFER_PIO_0 while probing as would be
-+ logical */
-+
-+ if (adev->pio_mode && adev != ap->private_data)
-+ mpiix_set_piomode(ap, adev);
-+
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static struct scsi_host_template mpiix_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations mpiix_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = mpiix_set_piomode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = mpiix_phy_reset,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = mpiix_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int mpiix_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ /* Single threaded by the PCI probe logic */
-+ static struct ata_probe_ent probe[2];
-+ static int printed_version;
-+ u16 idetim;
-+ int enabled;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &dev->dev, "version " DRV_VERSION "\n");
-+
-+ /* MPIIX has many functions which can be turned on or off according
-+ to other devices present. Make sure IDE is enabled before we try
-+ and use it */
-+
-+ pci_read_config_word(dev, 0x6C, &idetim);
-+ if (!(idetim & 0x8000))
-+ return -ENODEV;
-+
-+ /* We do our own plumbing to avoid leaking special cases for whacko
-+ ancient hardware into the core code. There are two issues to
-+ worry about. #1 The chip is a bridge so if in legacy mode and
-+ without BARs set fools the setup. #2 If you pci_disable_device
-+ the MPIIX your box goes castors up */
-+
-+ INIT_LIST_HEAD(&probe[0].node);
-+ probe[0].dev = pci_dev_to_dev(dev);
-+ probe[0].port_ops = &mpiix_port_ops;
-+ probe[0].sht = &mpiix_sht;
-+ probe[0].pio_mask = 0x1F;
-+ probe[0].irq = 14;
-+ probe[0].irq_flags = SA_SHIRQ;
-+ probe[0].host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST;
-+ probe[0].legacy_mode = 1;
-+ probe[0].hard_port_no = 0;
-+ probe[0].n_ports = 1;
-+ probe[0].port[0].cmd_addr = 0x1F0;
-+ probe[0].port[0].ctl_addr = 0x3F6;
-+ probe[0].port[0].altstatus_addr = 0x3F6;
-+
-+ /* The secondary lurks at different addresses but is otherwise
-+ the same beastie */
-+
-+ INIT_LIST_HEAD(&probe[1].node);
-+ probe[1] = probe[0];
-+ probe[1].irq = 15;
-+ probe[1].hard_port_no = 1;
-+ probe[1].port[0].cmd_addr = 0x170;
-+ probe[1].port[0].ctl_addr = 0x376;
-+ probe[1].port[0].altstatus_addr = 0x376;
-+
-+ /* Let libata fill in the port details */
-+ ata_std_ports(&probe[0].port[0]);
-+ ata_std_ports(&probe[1].port[0]);
-+
-+ /* Now add the port that is active */
-+ enabled = (idetim & 0x4000) ? 1 : 0;
-+
-+ if (ata_device_add(&probe[enabled]))
-+ return 0;
-+ return -ENODEV;
-+}
-+
-+/**
-+ * mpiix_remove_one - device unload
-+ * @pdev: PCI device being removed
-+ *
-+ * Handle an unplug/unload event for a PCI device. Unload the
-+ * PCI driver but do not use the default handler as we *MUST NOT*
-+ * disable the device as it has other functions.
-+ */
-+
-+static void __devexit mpiix_remove_one(struct pci_dev *pdev)
-+{
-+ struct device *dev = pci_dev_to_dev(pdev);
-+ struct ata_host_set *host_set = dev_get_drvdata(dev);
-+
-+ ata_host_set_remove(host_set);
-+ dev_set_drvdata(dev, NULL);
-+}
-+
-+
-+
-+static const struct pci_device_id mpiix[] = {
-+ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-+ { 0, },
-+};
-+
-+static struct pci_driver mpiix_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = mpiix,
-+ .probe = mpiix_init_one,
-+ .remove = mpiix_remove_one
-+};
-+
-+static int __init mpiix_init(void)
-+{
-+ return pci_register_driver(&mpiix_pci_driver);
-+}
-+
-+
-+static void __exit mpiix_exit(void)
-+{
-+ pci_unregister_driver(&mpiix_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Intel MPIIX");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, mpiix);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(mpiix_init);
-+module_exit(mpiix_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_netcell.c linux-2.6.16-rc6/drivers/scsi/pata_netcell.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_netcell.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_netcell.c 2006-02-08 14:05:57.000000000 +0000
-@@ -0,0 +1,176 @@
-+/*
-+ * pata_netcell.c - Netcell PATA driver
-+ *
-+ * (c) 2006 Red Hat <alan@redhat.com>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_netcell"
-+#define DRV_VERSION "0.1"
-+
-+/**
-+ * netcell_cable_detect - check for 40/80 pin
-+ * @ap: Port
-+ *
-+ * Cables are handled by the RAID controller. Report 80 pin.
-+ */
-+
-+static int netcell_cable_detect(struct ata_port *ap)
-+{
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * netcell_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void netcell_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = netcell_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/* No PIO or DMA methods needed for this device */
-+
-+static struct scsi_host_template netcell_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ /* Special handling needed if you have sector or LBA48 limits */
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ /* Use standard CHS mapping rules */
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations netcell_ops = {
-+ .port_disable = ata_port_disable,
-+
-+ /* Task file is PCI ATA format, use helpers */
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = netcell_phy_reset,
-+
-+ /* BMDMA handling is PCI ATA format, use helpers */
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer, /* In -ac only right now */
-+
-+ /* Timeout handling. Special recovery hooks here */
-+ .eng_timeout = ata_eng_timeout,
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ /* Generic PATA PCI ATA helpers */
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+
-+/**
-+ * netcell_init_one - Register Netcell ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in netcell_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int netcell_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ static struct ata_port_info info = {
-+ .sht = &netcell_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ /* Actually we don't really care about these as the
-+ firmware deals with it */
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = 0x3f, /* UDMA 133 */
-+ .port_ops = &netcell_ops,
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ /* Any chip specific setup/optimisation/messages here */
-+ ata_pci_clear_simplex(pdev);
-+
-+ /* And let the library code do the work */
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id netcell_pci_tbl[] = {
-+ { 0x169C, 0x0044, PCI_ANY_ID, PCI_ANY_ID, },
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver netcell_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = netcell_pci_tbl,
-+ .probe = netcell_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init netcell_init(void)
-+{
-+ return pci_register_driver(&netcell_pci_driver);
-+}
-+
-+static void __exit netcell_exit(void)
-+{
-+ pci_unregister_driver(&netcell_pci_driver);
-+}
-+
-+
-+module_init(netcell_init);
-+module_exit(netcell_exit);
-+
-+MODULE_AUTHOR("");
-+MODULE_DESCRIPTION("SCSI low-level driver for Netcell PATA RAID");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, netcell_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_ns87410.c linux-2.6.16-rc6/drivers/scsi/pata_ns87410.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_ns87410.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_ns87410.c 2006-02-15 15:05:43.000000000 +0000
-@@ -0,0 +1,213 @@
-+/*
-+ * pata_ns87410.c - National Semiconductor 87410 PATA for new ATA layer
-+ * (C) 2006 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_ns87410"
-+#define DRV_VERSION "0.1"
-+
-+/**
-+ * ns87410_phy_reset - probe reset
-+ * @ap: ATA port
-+ *
-+ * Perform the ATA probe and bus reset sequence plus specific handling
-+ * for this hardware. The MPIIX has the enable bits in a different place
-+ * to PIIX4 and friends. As a pure PIO device it has no cable detect
-+ */
-+
-+static void ns87410_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static const struct pci_bits ns87410_enable_bits[] = {
-+ { 0x43, 1, 0x08, 0x08 },
-+ { 0x47, 1, 0x08, 0x08 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &ns87410_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * ns87410_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program timing data. This is kept per channel not per device,
-+ * and only affects the data port.
-+ */
-+
-+static void ns87410_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x40 + 4 * ap->hard_port_no;
-+ u8 idetcr, idefr;
-+ struct ata_timing at;
-+
-+ static const u8 activebits[15] = {
-+ 0, 1, 2, 3, 4,
-+ 5, 5, 6, 6, 6,
-+ 6, 7, 7, 7, 7
-+ };
-+
-+ static const u8 recoverbits[12] = {
-+ 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 7, 7
-+ };
-+
-+ pci_read_config_byte(pdev, port + 3, &idefr);
-+
-+ if (ata_pio_need_iordy(adev))
-+ idefr |= 0x04; /* IORDY enable */
-+ else
-+ idefr &= ~0x04;
-+
-+ if (ata_timing_compute(adev, adev->pio_mode, &at, 30303, 1) < 0) {
-+ dev_printk(KERN_ERR, &pdev->dev, "unknown mode %d.\n", adev->pio_mode);
-+ return;
-+ }
-+
-+ at.active = FIT(at.active, 2, 16) - 2;
-+ at.setup = FIT(at.setup, 1, 4) - 1;
-+ at.recover = FIT(at.recover, 1, 12) - 1;
-+
-+ idetcr = (at.setup << 6) | (recoverbits[at.recover] << 3) | activebits[at.active];
-+
-+ pci_write_config_byte(pdev, port, idetcr);
-+ pci_write_config_byte(pdev, port + 3, idefr);
-+ /* We use ap->private_data as a pointer to the device currently
-+ loaded for timing */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * ns87410_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Our logic also clears TIME0/TIME1 for the other device so
-+ * that, even if we get this wrong, cycles to the other device will
-+ * be made PIO0.
-+ */
-+
-+static int ns87410_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+
-+ /* If modes have been configured and the channel data is not loaded
-+ then load it. We have to check if pio_mode is set as the core code
-+ does not set adev->pio_mode to XFER_PIO_0 while probing as would be
-+ logical */
-+
-+ if (adev->pio_mode && adev != ap->private_data)
-+ ns87410_set_piomode(ap, adev);
-+
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static struct scsi_host_template ns87410_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations ns87410_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = ns87410_set_piomode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = ns87410_phy_reset,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ns87410_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &ns87410_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x0F,
-+ .port_ops = &ns87410_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = {&info, &info};
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static const struct pci_device_id ns87410[] = {
-+ { PCI_DEVICE(0x100B, 0xD001), },
-+ { 0, },
-+};
-+
-+static struct pci_driver ns87410_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = ns87410,
-+ .probe = ns87410_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init ns87410_init(void)
-+{
-+ return pci_register_driver(&ns87410_pci_driver);
-+}
-+
-+
-+static void __exit ns87410_exit(void)
-+{
-+ pci_unregister_driver(&ns87410_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Nat Semi 87410");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, ns87410);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(ns87410_init);
-+module_exit(ns87410_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_oldpiix.c linux-2.6.16-rc6/drivers/scsi/pata_oldpiix.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_oldpiix.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_oldpiix.c 2006-01-21 16:55:29.000000000 +0000
-@@ -0,0 +1,327 @@
-+/*
-+ * pata_oldpiix.c - Intel PATA/SATA controllers
-+ *
-+ * (C) 2005 Red Hat <alan@redhat.com>
-+ *
-+ * Some parts based on ata_piix.c by Jeff Garzik and others.
-+ *
-+ * Early PIIX differs significantly from the later PIIX as it lacks
-+ * SITRE and the slave timing registers. This means that you have to
-+ * set timing per channel, or be clever. Libata tells us whenever it
-+ * does drive selection and we use this to reload the timings.
-+ *
-+ * Because of these behaviour differences PIIX gets its own driver module.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_oldpiix"
-+#define DRV_VERSION "0.3"
-+
-+/**
-+ * oldpiix_pata_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void oldpiix_pata_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static const struct pci_bits oldpiix_enable_bits[] = {
-+ { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */
-+ { 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &oldpiix_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * oldpiix_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set PIO mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void oldpiix_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio = adev->pio_mode - XFER_PIO_0;
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ unsigned int idetm_port= ap->hard_port_no ? 0x42 : 0x40;
-+ u16 idetm_data;
-+ int control = 0;
-+
-+ /*
-+ * See Intel Document 298600-004 for the timing programing rules
-+ * for PIIX/ICH. Note that the early PIIX does not have the slave
-+ * timing port at 0x44.
-+ */
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-+
-+ if (pio > 2)
-+ control |= 1; /* TIME1 enable */
-+ if (ata_pio_need_iordy(adev))
-+ control |= 2; /* IE IORDY */
-+
-+ /* Intel specifies that the PPE functionality is for disk only */
-+ if (adev->class == ATA_DEV_ATA)
-+ control |= 4; /* PPE enable */
-+
-+ pci_read_config_word(dev, idetm_port, &idetm_data);
-+
-+ /* Enable PPE, IE and TIME as appropriate. Clear the other
-+ drive timing bits */
-+ if (adev->devno == 0) {
-+ idetm_data &= 0xCCE0;
-+ idetm_data |= control;
-+ } else {
-+ idetm_data &= 0xCC0E;
-+ idetm_data |= (control << 4);
-+ }
-+ idetm_data |= (timings[pio][0] << 12) |
-+ (timings[pio][1] << 8);
-+ pci_write_config_word(dev, idetm_port, idetm_data);
-+
-+ /* Track which port is configured */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * oldpiix_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ * @isich: True if the device is an ICH and has IOCFG registers
-+ *
-+ * Set MWDMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void oldpiix_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ u8 idetm_port = ap->hard_port_no ? 0x42 : 0x40;
-+ u16 idetm_data;
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 2, 1 },
-+ { 2, 3 }, };
-+
-+ /*
-+ * MWDMA is driven by the PIO timings. We must also enable
-+ * IORDY unconditionally along with TIME1. PPE has already
-+ * been set when the PIO timing was set.
-+ */
-+
-+ unsigned int mwdma = adev->dma_mode - XFER_MW_DMA_0;
-+ unsigned int control;
-+ const unsigned int needed_pio[3] = {
-+ XFER_PIO_0, XFER_PIO_3, XFER_PIO_4
-+ };
-+ int pio = needed_pio[mwdma] - XFER_PIO_0;
-+
-+ pci_read_config_word(dev, idetm_port, &idetm_data);
-+
-+ control = 3; /* IORDY|TIME0 */
-+ /* Intel specifies that the PPE functionality is for disk only */
-+ if (adev->class == ATA_DEV_ATA)
-+ control |= 4; /* PPE enable */
-+
-+ /* If the drive MWDMA is faster than it can do PIO then
-+ we must force PIO into PIO0 */
-+
-+ if (adev->pio_mode < needed_pio[mwdma])
-+ /* Enable DMA timing only */
-+ control |= 8; /* PIO cycles in PIO0 */
-+
-+ /* Mask out the relevant control and timing bits we will load. Also
-+ clear the other drive TIME register as a precaution */
-+ if (adev->devno == 0) {
-+ idetm_data &= 0xCCE0;
-+ idetm_data |= control;
-+ } else {
-+ idetm_data &= 0xCC0E;
-+ idetm_data |= (control << 4);
-+ }
-+ idetm_data |= (timings[pio][0] << 12) | (timings[pio][1] << 8);
-+ pci_write_config_word(dev, idetm_port, idetm_data);
-+
-+ /* Track which port is configured */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * oldpiix_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Our logic also clears TIME0/TIME1 for the other device so
-+ * that, even if we get this wrong, cycles to the other device will
-+ * be made PIO0.
-+ */
-+
-+static int oldpiix_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+
-+ if (adev != ap->private_data) {
-+ if (adev->dma_mode)
-+ oldpiix_set_dmamode(ap, adev);
-+ else if (adev->pio_mode)
-+ oldpiix_set_piomode(ap, adev);
-+ }
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+
-+static struct scsi_host_template oldpiix_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations oldpiix_pata_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = oldpiix_set_piomode,
-+ .set_dmamode = oldpiix_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = oldpiix_pata_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = oldpiix_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+
-+/**
-+ * oldpiix_init_one - Register PIIX ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in oldpiix_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer. We probe for combined mode (sigh),
-+ * and then hand over control to libata, for it to do the rest.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int oldpiix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ static struct ata_port_info info = {
-+ .sht = &oldpiix_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma1-2 */
-+ .port_ops = &oldpiix_pata_ops,
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id oldpiix_pci_tbl[] = {
-+ { 0x8086, 0x1230, PCI_ANY_ID, PCI_ANY_ID, },
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver oldpiix_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = oldpiix_pci_tbl,
-+ .probe = oldpiix_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init oldpiix_init(void)
-+{
-+ return pci_register_driver(&oldpiix_pci_driver);
-+}
-+
-+static void __exit oldpiix_exit(void)
-+{
-+ pci_unregister_driver(&oldpiix_pci_driver);
-+}
-+
-+
-+module_init(oldpiix_init);
-+module_exit(oldpiix_exit);
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("SCSI low-level driver for early PIIX series controllers");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, oldpiix_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_opti.c linux-2.6.16-rc6/drivers/scsi/pata_opti.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_opti.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_opti.c 2006-02-16 15:38:28.000000000 +0000
-@@ -0,0 +1,268 @@
-+/*
-+ * pata_opti.c - ATI PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based on
-+ * linux/drivers/ide/pci/opti621.c Version 0.7 Sept 10, 2002
-+ *
-+ * Copyright (C) 1996-1998 Linus Torvalds & authors (see below)
-+ *
-+ * Authors:
-+ * Jaromir Koutek <miri@punknet.cz>,
-+ * Jan Harkes <jaharkes@cwi.nl>,
-+ * Mark Lord <mlord@pobox.com>
-+ * Some parts of code are from ali14xx.c and from rz1000.c.
-+ *
-+ * Also consulted the FreeBSD prototype driver by Kevin Day to try
-+ * and resolve some confusions.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_opti"
-+#define DRV_VERSION "0.1.2"
-+
-+enum {
-+ READ_REG = 0, /* index of Read cycle timing register */
-+ WRITE_REG = 1, /* index of Write cycle timing register */
-+ CNTRL_REG = 3, /* index of Control register */
-+ STRAP_REG = 5, /* index of Strap register */
-+ MISC_REG = 6 /* index of Miscellaneous register */
-+};
-+
-+/**
-+ * opti_phy_reset - probe reset
-+ * @ap: ATA port
-+ *
-+ * Perform the ATA probe and bus reset sequence plus specific handling
-+ * for this hardware. The Opti needs little handling - we have no UDMA66
-+ * capability that needs cable detection. All we must do is check the port
-+ * is enabled.
-+ */
-+
-+static void opti_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static const struct pci_bits opti_enable_bits[] = {
-+ { 0x45, 1, 0x80, 0x00 },
-+ { 0x45, 1, 0x08, 0x00 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &opti_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * opti_write_reg - control register setup
-+ * @ap: ATA port
-+ * @value: value
-+ * @reg: control register number
-+ *
-+ * The Opti uses magic 'trapdoor' register accesses to do configuration
-+ * rather than using PCI space as other controllers do. The double inw
-+ * on the error register activates configuration mode. We can then write
-+ * the control register
-+ */
-+
-+static void opti_write_reg(struct ata_port *ap, u8 val, int reg)
-+{
-+ unsigned long regio = ap->ioaddr.cmd_addr;
-+ inw(regio + 1);
-+ inw(regio + 1);
-+ outb(3, regio + 2);
-+ outb(val, regio + reg);
-+ outb(0x83, regio + 2);
-+}
-+
-+#if 0
-+/**
-+ * opti_read_reg - control register read
-+ * @ap: ATA port
-+ * @reg: control register number
-+ *
-+ * The Opti uses magic 'trapdoor' register accesses to do configuration
-+ * rather than using PCI space as other controllers do. The double inw
-+ * on the error register activates configuration mode. We can then read
-+ * the control register
-+ */
-+
-+static u8 opti_read_reg(struct ata_port *ap, int reg)
-+{
-+ unsigned long regio = ap->ioaddr.cmd_addr;
-+ u8 ret;
-+ inw(regio + 1);
-+ inw(regio + 1);
-+ outb(3, regio + 2);
-+ ret = inb(regio + reg);
-+ outb(0x83, regio + 2);
-+}
-+#endif
-+
-+/**
-+ * opti_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. Timing numbers are taken from
-+ * the FreeBSD driver then pre computed to keep the code clean. There
-+ * are two tables depending on the hardware clock speed.
-+ */
-+
-+static void opti_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+ int clock;
-+ int pio = adev->pio_mode - XFER_PIO_0;
-+ unsigned long regio = ap->ioaddr.cmd_addr;
-+ u8 addr;
-+
-+ /* Address table precomputed with prefetch off and a DCLK of 2 */
-+ static const u8 addr_timing[2][5] = {
-+ { 0x30, 0x20, 0x20, 0x10, 0x10 },
-+ { 0x20, 0x20, 0x10, 0x10, 0x10 }
-+ };
-+ static const u8 data_rec_timing[2][5] = {
-+ { 0x6B, 0x56, 0x42, 0x32, 0x31 },
-+ { 0x58, 0x44, 0x32, 0x22, 0x21 }
-+ };
-+
-+ outb(0xff, regio + 5);
-+ clock = inw(regio + 5) & 1;
-+
-+ /*
-+ * As with many controllers the address setup time is shared
-+ * and must suit both devices if present.
-+ */
-+
-+ addr = addr_timing[clock][pio];
-+ if (pair) {
-+ /* Hardware constraint */
-+ u8 pair_addr = addr_timing[clock][pair->pio_mode - XFER_PIO_0];
-+ if (pair_addr > addr)
-+ addr = pair_addr;
-+ }
-+
-+ /* Commence primary programming sequence */
-+ opti_write_reg(ap, adev->devno, MISC_REG);
-+ opti_write_reg(ap, data_rec_timing[clock][pio], READ_REG);
-+ opti_write_reg(ap, data_rec_timing[clock][pio], WRITE_REG);
-+ opti_write_reg(ap, addr, MISC_REG);
-+
-+ /* Programming sequence complete, override strapping */
-+ opti_write_reg(ap, 0x85, CNTRL_REG);
-+}
-+
-+static struct scsi_host_template opti_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations opti_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = opti_set_piomode,
-+/* .set_dmamode = opti_set_dmamode, */
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = opti_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &opti_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .port_ops = &opti_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+ static int printed_version;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &dev->dev, "version " DRV_VERSION "\n");
-+
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static const struct pci_device_id opti[] = {
-+ { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { 0, },
-+};
-+
-+static struct pci_driver opti_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = opti,
-+ .probe = opti_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init opti_init(void)
-+{
-+ return pci_register_driver(&opti_pci_driver);
-+}
-+
-+
-+static void __exit opti_exit(void)
-+{
-+ pci_unregister_driver(&opti_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Opti 621/621X");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, opti);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(opti_init);
-+module_exit(opti_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pcmcia.c linux-2.6.16-rc6/drivers/scsi/pata_pcmcia.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pcmcia.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_pcmcia.c 2006-03-10 17:07:27.000000000 +0000
-@@ -0,0 +1,406 @@
-+/*
-+ * pata-pcmcia.c - PCMCIA PATA controller driver.
-+ * Copyright 2005/2006 Red Hat Inc <alan@redhat.com>, all rights reserved.
-+ *
-+ * Heavily based upon ide-cs.c
-+ * The initial developer of the original code is David A. Hinds
-+ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
-+ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/ata.h>
-+#include <linux/libata.h>
-+
-+#include <pcmcia/cs_types.h>
-+#include <pcmcia/cs.h>
-+#include <pcmcia/cistpl.h>
-+#include <pcmcia/ds.h>
-+#include <pcmcia/cisreg.h>
-+#include <pcmcia/ciscode.h>
-+
-+
-+#define DRV_NAME "pata_pcmcia"
-+#define DRV_VERSION "0.1"
-+
-+/*
-+ * Private data structure to glue stuff together
-+ */
-+
-+struct ata_pcmcia_info {
-+ dev_link_t link;
-+ int ndev;
-+ dev_node_t node;
-+};
-+
-+static struct scsi_host_template pcmcia_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations pcmcia_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+#define CS_CHECK(fn, ret) \
-+do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-+
-+/**
-+ * pcmcia_init_one - attach an pcmcia interface
-+ * @pdev: pcmcia device
-+ *
-+ * Register a PCMCIA IDE interface. Such interfaces are PIO 0 and
-+ * non shared IRQ.
-+ */
-+
-+static int pcmcia_init_one(struct pcmcia_device *pdev)
-+{
-+ struct ata_probe_ent ae;
-+ dev_link_t *link;
-+ struct ata_pcmcia_info *info;
-+ client_handle_t handle;
-+ tuple_t tuple;
-+ struct {
-+ unsigned short buf[128];
-+ cisparse_t parse;
-+ config_info_t conf;
-+ cistpl_cftable_entry_t dflt;
-+ } *stk = NULL;
-+ cistpl_cftable_entry_t *cfg;
-+ int pass, last_ret = 0, last_fn = 0, is_kme = 0, ret = -ENOMEM;
-+ unsigned long io_base, ctl_base;
-+
-+ info = kzalloc(sizeof(*info), GFP_KERNEL);
-+ if (info == NULL)
-+ return -ENOMEM;
-+
-+ link = &info->link;
-+ link->priv = info;
-+
-+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
-+ link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
-+ link->io.IOAddrLines = 3;
-+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
-+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
-+ link->conf.Attributes = CONF_ENABLE_IRQ;
-+ link->conf.Vcc = 50;
-+ link->conf.IntType = INT_MEMORY_AND_IO;
-+
-+ link->handle = pdev;
-+ pdev->instance = link;
-+
-+ handle = link->handle;
-+
-+ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
-+
-+ stk = kzalloc(sizeof(*stk), GFP_KERNEL);
-+ if (!stk)
-+ goto out1;
-+
-+ cfg = &stk->parse.cftable_entry;
-+
-+ tuple.TupleData = (cisdata_t *)&stk->buf;
-+ tuple.TupleOffset = 0;
-+ tuple.TupleDataMax = 255;
-+ tuple.Attributes = 0;
-+ tuple.DesiredTuple = CISTPL_CONFIG;
-+
-+ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
-+ CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
-+ CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &stk->parse));
-+ link->conf.ConfigBase = stk->parse.config.base;
-+ link->conf.Present = stk->parse.config.rmask[0];
-+
-+ tuple.DesiredTuple = CISTPL_MANFID;
-+ if (!pcmcia_get_first_tuple(handle, &tuple) && !pcmcia_get_tuple_data(handle, &tuple) && !pcmcia_parse_tuple(handle, &tuple, &stk->parse))
-+ is_kme = ((stk->parse.manfid.manf == MANFID_KME) && ((stk->parse.manfid.card == PRODID_KME_KXLC005_A) || (stk->parse.manfid.card == PRODID_KME_KXLC005_B)));
-+
-+ /* Configure card */
-+ link->state |= DEV_CONFIG;
-+
-+ /* Not sure if this is right... look up the current Vcc */
-+ CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &stk->conf));
-+ link->conf.Vcc = stk->conf.Vcc;
-+
-+ pass = io_base = ctl_base = 0;
-+ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-+ tuple.Attributes = 0;
-+ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
-+
-+ while (1) {
-+ if (pcmcia_get_tuple_data(handle, &tuple) != 0)
-+ goto next_entry;
-+ if (pcmcia_parse_tuple(handle, &tuple, &stk->parse) != 0)
-+ goto next_entry;
-+ /* Check for matching Vcc, unless we're desperate */
-+ if (!pass) {
-+ if (cfg->vcc.present & (1 << CISTPL_POWER_VNOM)) {
-+ if (stk->conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM] / 10000)
-+ goto next_entry;
-+ } else if (stk->dflt.vcc.present & (1 << CISTPL_POWER_VNOM)) {
-+ if (stk->conf.Vcc != stk->dflt.vcc.param[CISTPL_POWER_VNOM] / 10000)
-+ goto next_entry;
-+ }
-+ }
-+
-+ if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
-+ link->conf.Vpp1 = link->conf.Vpp2 = cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
-+ else if (stk->dflt.vpp1.present & (1 << CISTPL_POWER_VNOM))
-+ link->conf.Vpp1 = link->conf.Vpp2 = stk->dflt.vpp1.param[CISTPL_POWER_VNOM] / 10000;
-+
-+ if ((cfg->io.nwin > 0) || (stk->dflt.io.nwin > 0)) {
-+ cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &stk->dflt.io;
-+ link->conf.ConfigIndex = cfg->index;
-+ link->io.BasePort1 = io->win[0].base;
-+ link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
-+ if (!(io->flags & CISTPL_IO_16BIT))
-+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-+ if (io->nwin == 2) {
-+ link->io.NumPorts1 = 8;
-+ link->io.BasePort2 = io->win[1].base;
-+ link->io.NumPorts2 = (is_kme) ? 2 : 1;
-+ if (pcmcia_request_io(link->handle, &link->io) != 0)
-+ goto next_entry;
-+ io_base = link->io.BasePort1;
-+ ctl_base = link->io.BasePort2;
-+ } else if ((io->nwin == 1) && (io->win[0].len >= 16)) {
-+ link->io.NumPorts1 = io->win[0].len;
-+ link->io.NumPorts2 = 0;
-+ if (pcmcia_request_io(link->handle, &link->io) != 0)
-+ goto next_entry;
-+ io_base = link->io.BasePort1;
-+ ctl_base = link->io.BasePort1 + 0x0e;
-+ } else goto next_entry;
-+ /* If we've got this far, we're done */
-+ break;
-+ }
-+next_entry:
-+ if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
-+ memcpy(&stk->dflt, cfg, sizeof(stk->dflt));
-+ if (pass) {
-+ CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
-+ } else if (pcmcia_get_next_tuple(handle, &tuple) != 0) {
-+ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
-+ memset(&stk->dflt, 0, sizeof(stk->dflt));
-+ pass++;
-+ }
-+ }
-+
-+ if (is_kme)
-+ outb(0x81, ctl_base + 0x01);
-+
-+ /* FIXME: Could be more ports at base + 0x10 but we only deal with
-+ one right now */
-+
-+ if (link->io.NumPorts1 >= 0x20)
-+ printk(KERN_WARNING DRV_NAME ": second channel not yet supported.\n");
-+
-+ /*
-+ * Having done the PCMCIA plumbing the ATA side is relatively
-+ * sane.
-+ */
-+
-+ memset(&ae, 0, sizeof(struct ata_probe_ent));
-+ INIT_LIST_HEAD(&ae.node);
-+ ae.dev = &pdev->dev;
-+ ae.port_ops = &pcmcia_port_ops;
-+ ae.sht = &pcmcia_sht;
-+ ae.n_ports = 1;
-+ ae.pio_mask = 1; /* ISA so PIO 0 cycles */
-+ ae.irq = link->irq.AssignedIRQ;
-+ ae.irq_flags = 0;
-+ ae.host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_IRQ_MASK | ATA_FLAG_SRST;
-+ ae.port[0].cmd_addr = io_base;
-+ ae.port[0].altstatus_addr = ctl_base;
-+ ae.port[0].ctl_addr = ctl_base;
-+ ata_std_ports(&ae.port[0]);
-+
-+ if (ata_device_add(&ae) == 0)
-+ goto failed;
-+
-+ info->ndev = 1;
-+ link->dev = &info->node;
-+ link->state &= ~DEV_CONFIG_PENDING;
-+ kfree(stk);
-+ return 0;
-+
-+cs_failed:
-+ cs_error(link->handle, last_fn, last_ret);
-+failed:
-+ kfree(stk);
-+ info->ndev = 0;
-+ link->dev = NULL;
-+
-+ pcmcia_release_configuration(link->handle);
-+ pcmcia_release_io(link->handle, &link->io);
-+ pcmcia_release_irq(link->handle, &link->irq);
-+
-+ link->state &= ~DEV_CONFIG;
-+out1:
-+ kfree(info);
-+ return ret;
-+}
-+
-+/**
-+ * pcmcia_remove_one - unplug an pcmcia interface
-+ * @pdev: pcmcia device
-+ *
-+ * A PCMCIA ATA device has been unplugged. Perform the needed
-+ * cleanup. Also called on module unload for any active devices.
-+ */
-+
-+void pcmcia_remove_one(struct pcmcia_device *pdev)
-+{
-+ dev_link_t *link = dev_to_instance(pdev);
-+ struct ata_pcmcia_info *info = link->priv;
-+ struct device *dev = &pdev->dev;
-+
-+ if (link->state & DEV_CONFIG) {
-+ if (info->ndev) {
-+ struct ata_host_set *host_set = dev_get_drvdata(dev);
-+ ata_host_set_remove(host_set);
-+ dev_set_drvdata(dev, NULL);
-+ }
-+ info->ndev = 0;
-+ link->dev = NULL;
-+
-+ pcmcia_release_configuration(link->handle);
-+ pcmcia_release_io(link->handle, &link->io);
-+ pcmcia_release_irq(link->handle, &link->irq);
-+ link->state &= ~DEV_CONFIG;
-+ }
-+ kfree(link->priv);
-+}
-+
-+static int pcmcia_suspend(struct pcmcia_device *dev)
-+{
-+ dev_link_t *link = dev_to_instance(dev);
-+
-+ link->state |= DEV_SUSPEND;
-+ if (link->state & DEV_CONFIG)
-+ pcmcia_release_configuration(link->handle);
-+
-+ return 0;
-+}
-+
-+static int pcmcia_resume(struct pcmcia_device *dev)
-+{
-+ dev_link_t *link = dev_to_instance(dev);
-+
-+ link->state &= ~DEV_SUSPEND;
-+ if (DEV_OK(link))
-+ pcmcia_request_configuration(link->handle, &link->conf);
-+
-+ return 0;
-+}
-+
-+static struct pcmcia_device_id pcmcia_devices[] = {
-+ PCMCIA_DEVICE_FUNC_ID(4),
-+ PCMCIA_DEVICE_MANF_CARD(0x0007, 0x0000), /* Hitachi */
-+ PCMCIA_DEVICE_MANF_CARD(0x0032, 0x0704),
-+ PCMCIA_DEVICE_MANF_CARD(0x0045, 0x0401),
-+ PCMCIA_DEVICE_MANF_CARD(0x0098, 0x0000), /* Toshiba */
-+ PCMCIA_DEVICE_MANF_CARD(0x00a4, 0x002d),
-+ PCMCIA_DEVICE_MANF_CARD(0x00ce, 0x0000), /* Samsung */
-+ PCMCIA_DEVICE_MANF_CARD(0x0319, 0x0000), /* Hitachi */
-+ PCMCIA_DEVICE_MANF_CARD(0x2080, 0x0001),
-+ PCMCIA_DEVICE_MANF_CARD(0x4e01, 0x0200), /* Lexar */
-+ PCMCIA_DEVICE_PROD_ID123("Caravelle", "PSC-IDE ", "PSC000", 0x8c36137c, 0xd0693ab8, 0x2768a9f0),
-+ PCMCIA_DEVICE_PROD_ID123("CDROM", "IDE", "MCD-601p", 0x1b9179ca, 0xede88951, 0x0d902f74),
-+ PCMCIA_DEVICE_PROD_ID123("PCMCIA", "IDE CARD", "F1", 0x281f1c5d, 0x1907960c, 0xf7fde8b9),
-+ PCMCIA_DEVICE_PROD_ID12("ARGOSY", "CD-ROM", 0x78f308dc, 0x66536591),
-+ PCMCIA_DEVICE_PROD_ID12("ARGOSY", "PnPIDE", 0x78f308dc, 0x0c694728),
-+ PCMCIA_DEVICE_PROD_ID12("CNF CD-M", "CD-ROM", 0x7d93b852, 0x66536591),
-+ PCMCIA_DEVICE_PROD_ID12("Creative Technology Ltd.", "PCMCIA CD-ROM Interface Card", 0xff8c8a45, 0xfe8020c4),
-+ PCMCIA_DEVICE_PROD_ID12("Digital Equipment Corporation.", "Digital Mobile Media CD-ROM", 0x17692a66, 0xef1dcbde),
-+ PCMCIA_DEVICE_PROD_ID12("EXP", "CD+GAME", 0x6f58c983, 0x63c13aaf),
-+ PCMCIA_DEVICE_PROD_ID12("EXP ", "CD-ROM", 0x0a5c52fd, 0x66536591),
-+ PCMCIA_DEVICE_PROD_ID12("EXP ", "PnPIDE", 0x0a5c52fd, 0x0c694728),
-+ PCMCIA_DEVICE_PROD_ID12("FREECOM", "PCCARD-IDE", 0x5714cbf7, 0x48e0ab8e),
-+ PCMCIA_DEVICE_PROD_ID12("HITACHI", "FLASH", 0xf4f43949, 0x9eb86aae),
-+ PCMCIA_DEVICE_PROD_ID12("HITACHI", "microdrive", 0xf4f43949, 0xa6d76178),
-+ PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753),
-+ PCMCIA_DEVICE_PROD_ID12("IO DATA", "CBIDE2 ", 0x547e66dc, 0x8671043b),
-+ PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
-+ PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
-+ PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
-+ PCMCIA_DEVICE_PROD_ID2("NinjaATA-", 0xebe0bd79),
-+ PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
-+ PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
-+ PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
-+ PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
-+ PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
-+ PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
-+ PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-+ PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
-+ PCMCIA_DEVICE_NULL,
-+};
-+
-+MODULE_DEVICE_TABLE(pcmcia, pcmcia_devices);
-+
-+static struct pcmcia_driver pcmcia_driver = {
-+ .owner = THIS_MODULE,
-+ .drv = {
-+ .name = DRV_NAME,
-+ },
-+ .id_table = pcmcia_devices,
-+ .probe = pcmcia_init_one,
-+ .remove = pcmcia_remove_one,
-+ .suspend = pcmcia_suspend,
-+ .resume = pcmcia_resume,
-+};
-+
-+static int __init pcmcia_init(void)
-+{
-+ return pcmcia_register_driver(&pcmcia_driver);
-+}
-+
-+static void __exit pcmcia_exit(void)
-+{
-+ pcmcia_unregister_driver(&pcmcia_driver);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for PCMCIA ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(pcmcia_init);
-+module_exit(pcmcia_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pdc2027x.c linux-2.6.16-rc6/drivers/scsi/pata_pdc2027x.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pdc2027x.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_pdc2027x.c 2006-01-21 16:56:47.000000000 +0000
-@@ -0,0 +1,857 @@
-+/*
-+ * Promise PATA TX2/TX4/TX2000/133 IDE driver for pdc20268 to pdc20277.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version
-+ * 2 of the License, or (at your option) any later version.
-+ *
-+ * Ported to libata by:
-+ * Albert Lee <albertcc@tw.ibm.com> IBM Corporation
-+ *
-+ * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>
-+ * Portions Copyright (C) 1999 Promise Technology, Inc.
-+ *
-+ * Author: Frank Tiernan (frankt@promise.com)
-+ * Released under terms of General Public License
-+ *
-+ *
-+ * libata documentation is available via 'make {ps|pdf}docs',
-+ * as Documentation/DocBook/libata.*
-+ *
-+ * Hardware information only available under NDA.
-+ *
-+ */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi.h>
-+#include <scsi/scsi_host.h>
-+#include <scsi/scsi_cmnd.h>
-+#include <linux/libata.h>
-+#include <asm/io.h>
-+
-+#define DRV_NAME "pata_pdc2027x"
-+#define DRV_VERSION "0.73"
-+#undef PDC_DEBUG
-+
-+#ifdef PDC_DEBUG
-+#define PDPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
-+#else
-+#define PDPRINTK(fmt, args...)
-+#endif
-+
-+enum {
-+ PDC_UDMA_100 = 0,
-+ PDC_UDMA_133 = 1,
-+
-+ PDC_100_MHZ = 100000000,
-+ PDC_133_MHZ = 133333333,
-+
-+ PDC_SYS_CTL = 0x1100,
-+ PDC_ATA_CTL = 0x1104,
-+ PDC_GLOBAL_CTL = 0x1108,
-+ PDC_CTCR0 = 0x110C,
-+ PDC_CTCR1 = 0x1110,
-+ PDC_BYTE_COUNT = 0x1120,
-+ PDC_PLL_CTL = 0x1202,
-+};
-+
-+static int pdc2027x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
-+static void pdc2027x_remove_one(struct pci_dev *pdev);
-+static void pdc2027x_phy_reset(struct ata_port *ap);
-+static void pdc2027x_set_piomode(struct ata_port *ap, struct ata_device *adev);
-+static void pdc2027x_set_dmamode(struct ata_port *ap, struct ata_device *adev);
-+static void pdc2027x_post_set_mode(struct ata_port *ap);
-+static int pdc2027x_check_atapi_dma(struct ata_queued_cmd *qc);
-+
-+/*
-+ * ATA Timing Tables based on 133MHz controller clock.
-+ * These tables are only used when the controller is in 133MHz clock.
-+ * If the controller is in 100MHz clock, the ASIC hardware will
-+ * set the timing registers automatically when "set feature" command
-+ * is issued to the device. However, if the controller clock is 133MHz,
-+ * the following tables must be used.
-+ */
-+static struct pdc2027x_pio_timing {
-+ u8 value0, value1, value2;
-+} pdc2027x_pio_timing_tbl [] = {
-+ { 0xfb, 0x2b, 0xac }, /* PIO mode 0 */
-+ { 0x46, 0x29, 0xa4 }, /* PIO mode 1 */
-+ { 0x23, 0x26, 0x64 }, /* PIO mode 2 */
-+ { 0x27, 0x0d, 0x35 }, /* PIO mode 3, IORDY on, Prefetch off */
-+ { 0x23, 0x09, 0x25 }, /* PIO mode 4, IORDY on, Prefetch off */
-+};
-+
-+static struct pdc2027x_mdma_timing {
-+ u8 value0, value1;
-+} pdc2027x_mdma_timing_tbl [] = {
-+ { 0xdf, 0x5f }, /* MDMA mode 0 */
-+ { 0x6b, 0x27 }, /* MDMA mode 1 */
-+ { 0x69, 0x25 }, /* MDMA mode 2 */
-+};
-+
-+static struct pdc2027x_udma_timing {
-+ u8 value0, value1, value2;
-+} pdc2027x_udma_timing_tbl [] = {
-+ { 0x4a, 0x0f, 0xd5 }, /* UDMA mode 0 */
-+ { 0x3a, 0x0a, 0xd0 }, /* UDMA mode 1 */
-+ { 0x2a, 0x07, 0xcd }, /* UDMA mode 2 */
-+ { 0x1a, 0x05, 0xcd }, /* UDMA mode 3 */
-+ { 0x1a, 0x03, 0xcd }, /* UDMA mode 4 */
-+ { 0x1a, 0x02, 0xcb }, /* UDMA mode 5 */
-+ { 0x1a, 0x01, 0xcb }, /* UDMA mode 6 */
-+};
-+
-+static const struct pci_device_id pdc2027x_pci_tbl[] = {
-+#ifdef ATA_ENABLE_PATA
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_100 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20269, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_100 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20271, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20275, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20276, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20277, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
-+#endif
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver pdc2027x_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = pdc2027x_pci_tbl,
-+ .probe = pdc2027x_init_one,
-+ .remove = __devexit_p(pdc2027x_remove_one),
-+};
-+
-+static struct scsi_host_template pdc2027x_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+};
-+
-+static struct ata_port_operations pdc2027x_pata100_ops = {
-+ .port_disable = ata_port_disable,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = pdc2027x_phy_reset,
-+
-+ .check_atapi_dma = pdc2027x_check_atapi_dma,
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_mmio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static struct ata_port_operations pdc2027x_pata133_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = pdc2027x_set_piomode,
-+ .set_dmamode = pdc2027x_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = pdc2027x_phy_reset,
-+ .post_set_mode = pdc2027x_post_set_mode,
-+
-+ .check_atapi_dma = pdc2027x_check_atapi_dma,
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_mmio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static struct ata_port_info pdc2027x_port_info[] = {
-+ /* PDC_UDMA_100 */
-+ {
-+ .sht = &pdc2027x_sht,
-+ .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SLAVE_POSS |
-+ ATA_FLAG_SRST | ATA_FLAG_MMIO,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = ATA_UDMA5, /* udma0-5 */
-+ .port_ops = &pdc2027x_pata100_ops,
-+ },
-+ /* PDC_UDMA_133 */
-+ {
-+ .sht = &pdc2027x_sht,
-+ .host_flags = ATA_FLAG_NO_LEGACY | ATA_FLAG_SLAVE_POSS |
-+ ATA_FLAG_SRST | ATA_FLAG_MMIO,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma0-2 */
-+ .udma_mask = ATA_UDMA6, /* udma0-6 */
-+ .port_ops = &pdc2027x_pata133_ops,
-+ },
-+};
-+
-+MODULE_AUTHOR("Andre Hedrick, Frank Tiernan, Albert Lee");
-+MODULE_DESCRIPTION("libata driver module for Promise PDC20268 to PDC20277");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+MODULE_DEVICE_TABLE(pci, pdc2027x_pci_tbl);
-+
-+/**
-+ * port_mmio - Get the MMIO address of PDC2027x extended registers
-+ * @ap: Port
-+ * @offset: offset from mmio base
-+ */
-+static inline void* port_mmio(struct ata_port *ap, unsigned int offset)
-+{
-+ return ap->host_set->mmio_base + ap->port_no * 0x100 + offset;
-+}
-+
-+/**
-+ * dev_mmio - Get the MMIO address of PDC2027x extended registers
-+ * @ap: Port
-+ * @adev: device
-+ * @offset: offset from mmio base
-+ */
-+static inline void* dev_mmio(struct ata_port *ap, struct ata_device *adev, unsigned int offset)
-+{
-+ u8 adj = (adev->devno) ? 0x08 : 0x00;
-+ return port_mmio(ap, offset) + adj;
-+}
-+
-+/**
-+ * pdc2027x_pata_cbl_detect - Probe host controller cable detect info
-+ * @ap: Port for which cable detect info is desired
-+ *
-+ * Read 80c cable indicator from Promise extended register.
-+ * This register is latched when the system is reset.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+static void pdc2027x_cbl_detect(struct ata_port *ap)
-+{
-+ u32 cgcr;
-+
-+ /* check cable detect results */
-+ cgcr = readl(port_mmio(ap, PDC_GLOBAL_CTL));
-+ if (cgcr & (1 << 26))
-+ goto cbl40;
-+
-+ PDPRINTK("No cable or 80-conductor cable on port %d\n", ap->port_no);
-+
-+ ap->cbl = ATA_CBL_PATA80;
-+ return;
-+
-+cbl40:
-+ printk(KERN_INFO DRV_NAME ": 40-conductor cable detected on port %d\n", ap->port_no);
-+ ap->cbl = ATA_CBL_PATA40;
-+ ap->udma_mask &= ATA_UDMA_MASK_40C;
-+}
-+
-+/**
-+ * pdc2027x_port_enabled - Check PDC ATA control register to see whether the port is enabled.
-+ * @ap: Port to check
-+ */
-+static inline int pdc2027x_port_enabled(struct ata_port *ap)
-+{
-+ return readb(port_mmio(ap, PDC_ATA_CTL)) & 0x02;
-+}
-+
-+/**
-+ * pdc2027x_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * Probe PATA phy.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+static void pdc2027x_phy_reset(struct ata_port *ap)
-+{
-+ /* Check whether port enabled */
-+ if (!pdc2027x_port_enabled(ap)) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+
-+ pdc2027x_cbl_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * pdc2027x_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port to configure
-+ * @adev: um
-+ * @pio: PIO mode, 0 - 4
-+ *
-+ * Set PIO mode for device.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+static void pdc2027x_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio = adev->pio_mode - XFER_PIO_0;
-+ u32 ctcr0, ctcr1;
-+
-+ PDPRINTK("adev->pio_mode[%X]\n", adev->pio_mode);
-+
-+ /* Sanity check */
-+ if (pio > 4) {
-+ printk(KERN_ERR DRV_NAME ": Unknown pio mode [%d] ignored\n", pio);
-+ return;
-+
-+ }
-+
-+ /* Set the PIO timing registers using value table for 133MHz */
-+ PDPRINTK("Set pio regs... \n");
-+
-+ ctcr0 = readl(dev_mmio(ap, adev, PDC_CTCR0));
-+ ctcr0 &= 0xffff0000;
-+ ctcr0 |= pdc2027x_pio_timing_tbl[pio].value0 |
-+ (pdc2027x_pio_timing_tbl[pio].value1 << 8);
-+ writel(ctcr0, dev_mmio(ap, adev, PDC_CTCR0));
-+
-+ ctcr1 = readl(dev_mmio(ap, adev, PDC_CTCR1));
-+ ctcr1 &= 0x00ffffff;
-+ ctcr1 |= (pdc2027x_pio_timing_tbl[pio].value2 << 24);
-+ writel(ctcr1, dev_mmio(ap, adev, PDC_CTCR1));
-+
-+ PDPRINTK("Set pio regs done\n");
-+
-+ PDPRINTK("Set to pio mode[%u] \n", pio);
-+}
-+
-+/**
-+ * pdc2027x_set_dmamode - Initialize host controller PATA UDMA timings
-+ * @ap: Port to configure
-+ * @adev: um
-+ * @udma: udma mode, XFER_UDMA_0 to XFER_UDMA_6
-+ *
-+ * Set UDMA mode for device.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+static void pdc2027x_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int dma_mode = adev->dma_mode;
-+ u32 ctcr0, ctcr1;
-+
-+ if ((dma_mode >= XFER_UDMA_0) &&
-+ (dma_mode <= XFER_UDMA_6)) {
-+ /* Set the UDMA timing registers with value table for 133MHz */
-+ unsigned int udma_mode = dma_mode & 0x07;
-+
-+ if (dma_mode == XFER_UDMA_2) {
-+ /*
-+ * Turn off tHOLD.
-+ * If tHOLD is '1', the hardware will add half clock for data hold time.
-+ * This code segment seems to be no effect. tHOLD will be overwritten below.
-+ */
-+ ctcr1 = readl(dev_mmio(ap, adev, PDC_CTCR1));
-+ writel(ctcr1 & ~(1 << 7), dev_mmio(ap, adev, PDC_CTCR1));
-+ }
-+
-+ PDPRINTK("Set udma regs... \n");
-+
-+ ctcr1 = readl(dev_mmio(ap, adev, PDC_CTCR1));
-+ ctcr1 &= 0xff000000;
-+ ctcr1 |= pdc2027x_udma_timing_tbl[udma_mode].value0 |
-+ (pdc2027x_udma_timing_tbl[udma_mode].value1 << 8) |
-+ (pdc2027x_udma_timing_tbl[udma_mode].value2 << 16);
-+ writel(ctcr1, dev_mmio(ap, adev, PDC_CTCR1));
-+
-+ PDPRINTK("Set udma regs done\n");
-+
-+ PDPRINTK("Set to udma mode[%u] \n", udma_mode);
-+
-+ } else if ((dma_mode >= XFER_MW_DMA_0) &&
-+ (dma_mode <= XFER_MW_DMA_2)) {
-+ /* Set the MDMA timing registers with value table for 133MHz */
-+ unsigned int mdma_mode = dma_mode & 0x07;
-+
-+ PDPRINTK("Set mdma regs... \n");
-+ ctcr0 = readl(dev_mmio(ap, adev, PDC_CTCR0));
-+
-+ ctcr0 &= 0x0000ffff;
-+ ctcr0 |= (pdc2027x_mdma_timing_tbl[mdma_mode].value0 << 16) |
-+ (pdc2027x_mdma_timing_tbl[mdma_mode].value1 << 24);
-+
-+ writel(ctcr0, dev_mmio(ap, adev, PDC_CTCR0));
-+ PDPRINTK("Set mdma regs done\n");
-+
-+ PDPRINTK("Set to mdma mode[%u] \n", mdma_mode);
-+ } else {
-+ printk(KERN_ERR DRV_NAME ": Unknown dma mode [%u] ignored\n", dma_mode);
-+ }
-+}
-+
-+/**
-+ * pdc2027x_post_set_mode - Set the timing registers back to correct values.
-+ * @ap: Port to configure
-+ *
-+ * The pdc2027x hardware will look at "SET FEATURES" and change the timing registers
-+ * automatically. The values set by the hardware might be incorrect, under 133Mhz PLL.
-+ * This function overwrites the possibly incorrect values set by the hardware to be correct.
-+ */
-+static void pdc2027x_post_set_mode(struct ata_port *ap)
-+{
-+ int i;
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+
-+ if (ata_dev_present(dev)) {
-+
-+ pdc2027x_set_piomode(ap, dev);
-+
-+ /*
-+ * Enable prefetch if the device support PIO only.
-+ */
-+ if (dev->xfer_shift == ATA_SHIFT_PIO) {
-+ u32 ctcr1 = readl(dev_mmio(ap, dev, PDC_CTCR1));
-+ ctcr1 |= (1 << 25);
-+ writel(ctcr1, dev_mmio(ap, dev, PDC_CTCR1));
-+
-+ PDPRINTK("Turn on prefetch\n");
-+ } else {
-+ pdc2027x_set_dmamode(ap, dev);
-+ }
-+ }
-+ }
-+}
-+
-+/**
-+ * pdc2027x_check_atapi_dma - Check whether ATAPI DMA can be supported for this command
-+ * @qc: Metadata associated with taskfile to check
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ *
-+ * RETURNS: 0 when ATAPI DMA can be used
-+ * 1 otherwise
-+ */
-+static int pdc2027x_check_atapi_dma(struct ata_queued_cmd *qc)
-+{
-+ struct scsi_cmnd *cmd = qc->scsicmd;
-+ u8 *scsicmd = cmd->cmnd;
-+ int rc = 1; /* atapi dma off by default */
-+
-+ /*
-+ * This workaround is from Promise's GPL driver.
-+ * If ATAPI DMA is used for commands not in the
-+ * following white list, say MODE_SENSE and REQUEST_SENSE,
-+ * pdc2027x might hit the irq lost problem.
-+ */
-+ switch (scsicmd[0]) {
-+ case READ_10:
-+ case WRITE_10:
-+ case READ_12:
-+ case WRITE_12:
-+ case READ_6:
-+ case WRITE_6:
-+ case 0xad: /* READ_DVD_STRUCTURE */
-+ case 0xbe: /* READ_CD */
-+ /* ATAPI DMA is ok */
-+ rc = 0;
-+ break;
-+ default:
-+ ;
-+ }
-+
-+ return rc;
-+}
-+
-+/**
-+ * pdc_read_counter - Read the ctr counter
-+ * @probe_ent: for the port address
-+ */
-+
-+static long pdc_read_counter(struct ata_probe_ent *probe_ent)
-+{
-+ long counter;
-+ int retry = 1;
-+ u32 bccrl, bccrh, bccrlv, bccrhv;
-+
-+retry:
-+ bccrl = readl(probe_ent->mmio_base + PDC_BYTE_COUNT) & 0xffff;
-+ bccrh = readl(probe_ent->mmio_base + PDC_BYTE_COUNT + 0x100) & 0xffff;
-+ rmb();
-+
-+ /* Read the counter values again for verification */
-+ bccrlv = readl(probe_ent->mmio_base + PDC_BYTE_COUNT) & 0xffff;
-+ bccrhv = readl(probe_ent->mmio_base + PDC_BYTE_COUNT + 0x100) & 0xffff;
-+ rmb();
-+
-+ counter = (bccrh << 15) | bccrl;
-+
-+ PDPRINTK("bccrh [%X] bccrl [%X]\n", bccrh, bccrl);
-+ PDPRINTK("bccrhv[%X] bccrlv[%X]\n", bccrhv, bccrlv);
-+
-+ /*
-+ * The 30-bit decreasing counter are read by 2 pieces.
-+ * Incorrect value may be read when both bccrh and bccrl are changing.
-+ * Ex. When 7900 decrease to 78FF, wrong value 7800 might be read.
-+ */
-+ if (retry && !(bccrh == bccrhv && bccrl >= bccrlv)) {
-+ retry--;
-+ PDPRINTK("rereading counter\n");
-+ goto retry;
-+ }
-+
-+ return counter;
-+}
-+
-+/**
-+ * adjust_pll - Adjust the PLL input clock in Hz.
-+ *
-+ * @pdc_controller: controller specific information
-+ * @probe_ent: For the port address
-+ * @pll_clock: The input of PLL in HZ
-+ */
-+static void pdc_adjust_pll(struct ata_probe_ent *probe_ent, long pll_clock, unsigned int board_idx)
-+{
-+
-+ u16 pll_ctl;
-+ long pll_clock_khz = pll_clock / 1000;
-+ long pout_required = board_idx? PDC_133_MHZ:PDC_100_MHZ;
-+ long ratio = pout_required / pll_clock_khz;
-+ int F, R;
-+
-+ /* Sanity check */
-+ if (unlikely(pll_clock_khz < 5000L || pll_clock_khz > 70000L)) {
-+ printk(KERN_ERR DRV_NAME ": Invalid PLL input clock %ldkHz, give up!\n", pll_clock_khz);
-+ return;
-+ }
-+
-+#ifdef PDC_DEBUG
-+ PDPRINTK("pout_required is %ld\n", pout_required);
-+
-+ /* Show the current clock value of PLL control register
-+ * (maybe already configured by the firmware)
-+ */
-+ pll_ctl = readw(probe_ent->mmio_base + PDC_PLL_CTL);
-+
-+ PDPRINTK("pll_ctl[%X]\n", pll_ctl);
-+#endif
-+
-+ /*
-+ * Calculate the ratio of F, R and OD
-+ * POUT = (F + 2) / (( R + 2) * NO)
-+ */
-+ if (ratio < 8600L) { /* 8.6x */
-+ /* Using NO = 0x01, R = 0x0D */
-+ R = 0x0d;
-+ } else if (ratio < 12900L) { /* 12.9x */
-+ /* Using NO = 0x01, R = 0x08 */
-+ R = 0x08;
-+ } else if (ratio < 16100L) { /* 16.1x */
-+ /* Using NO = 0x01, R = 0x06 */
-+ R = 0x06;
-+ } else if (ratio < 64000L) { /* 64x */
-+ R = 0x00;
-+ } else {
-+ /* Invalid ratio */
-+ printk(KERN_ERR DRV_NAME ": Invalid ratio %ld, give up!\n", ratio);
-+ return;
-+ }
-+
-+ F = (ratio * (R+2)) / 1000 - 2;
-+
-+ if (unlikely(F < 0 || F > 127)) {
-+ /* Invalid F */
-+ printk(KERN_ERR DRV_NAME ": F[%d] invalid!\n", F);
-+ return;
-+ }
-+
-+ PDPRINTK("F[%d] R[%d] ratio*1000[%ld]\n", F, R, ratio);
-+
-+ pll_ctl = (R << 8) | F;
-+
-+ PDPRINTK("Writing pll_ctl[%X]\n", pll_ctl);
-+
-+ writew(pll_ctl, probe_ent->mmio_base + PDC_PLL_CTL);
-+ readw(probe_ent->mmio_base + PDC_PLL_CTL); /* flush */
-+
-+ /* Wait the PLL circuit to be stable */
-+ mdelay(30);
-+
-+#ifdef PDC_DEBUG
-+ /*
-+ * Show the current clock value of PLL control register
-+ * (maybe configured by the firmware)
-+ */
-+ pll_ctl = readw(probe_ent->mmio_base + PDC_PLL_CTL);
-+
-+ PDPRINTK("pll_ctl[%X]\n", pll_ctl);
-+#endif
-+
-+ return;
-+}
-+
-+/**
-+ * detect_pll_input_clock - Detect the PLL input clock in Hz.
-+ * @probe_ent: for the port address
-+ * Ex. 16949000 on 33MHz PCI bus for pdc20275.
-+ * Half of the PCI clock.
-+ */
-+static long pdc_detect_pll_input_clock(struct ata_probe_ent *probe_ent)
-+{
-+ u32 scr;
-+ long start_count, end_count;
-+ long pll_clock;
-+
-+ /* Read current counter value */
-+ start_count = pdc_read_counter(probe_ent);
-+
-+ /* Start the test mode */
-+ scr = readl(probe_ent->mmio_base + PDC_SYS_CTL);
-+ PDPRINTK("scr[%X]\n", scr);
-+ writel(scr | (0x01 << 14), probe_ent->mmio_base + PDC_SYS_CTL);
-+ readl(probe_ent->mmio_base + PDC_SYS_CTL); /* flush */
-+
-+ /* Let the counter run for 100 ms. */
-+ mdelay(100);
-+
-+ /* Read the counter values again */
-+ end_count = pdc_read_counter(probe_ent);
-+
-+ /* Stop the test mode */
-+ scr = readl(probe_ent->mmio_base + PDC_SYS_CTL);
-+ PDPRINTK("scr[%X]\n", scr);
-+ writel(scr & ~(0x01 << 14), probe_ent->mmio_base + PDC_SYS_CTL);
-+ readl(probe_ent->mmio_base + PDC_SYS_CTL); /* flush */
-+
-+ /* calculate the input clock in Hz */
-+ pll_clock = (start_count - end_count) * 10;
-+
-+ PDPRINTK("start[%ld] end[%ld] \n", start_count, end_count);
-+ PDPRINTK("PLL input clock[%ld]Hz\n", pll_clock);
-+
-+ return pll_clock;
-+}
-+
-+/**
-+ * pdc_hardware_init - Initialize the hardware.
-+ * @pdev: instance of pci_dev found
-+ * @pdc_controller: controller specific information
-+ * @pe: for the port address
-+ */
-+static int pdc_hardware_init(struct pci_dev *pdev, struct ata_probe_ent *pe, unsigned int board_idx)
-+{
-+ long pll_clock;
-+
-+ /*
-+ * Detect PLL input clock rate.
-+ * On some system, where PCI bus is running at non-standard clock rate.
-+ * Ex. 25MHz or 40MHz, we have to adjust the cycle_time.
-+ * The pdc20275 controller employs PLL circuit to help correct timing registers setting.
-+ */
-+ pll_clock = pdc_detect_pll_input_clock(pe);
-+
-+ if (pll_clock < 0) /* counter overflow? Try again. */
-+ pll_clock = pdc_detect_pll_input_clock(pe);
-+
-+ dev_printk(KERN_INFO, &pdev->dev, "PLL input clock %ld kHz\n", pll_clock/1000);
-+
-+ /* Adjust PLL control register */
-+ pdc_adjust_pll(pe, pll_clock, board_idx);
-+
-+ return 0;
-+}
-+
-+/**
-+ * pdc_ata_setup_port - setup the mmio address
-+ * @port: ata ioports to setup
-+ * @base: base address
-+ */
-+static void pdc_ata_setup_port(struct ata_ioports *port, unsigned long base)
-+{
-+ port->cmd_addr =
-+ port->data_addr = base;
-+ port->feature_addr =
-+ port->error_addr = base + 0x05;
-+ port->nsect_addr = base + 0x0a;
-+ port->lbal_addr = base + 0x0f;
-+ port->lbam_addr = base + 0x10;
-+ port->lbah_addr = base + 0x15;
-+ port->device_addr = base + 0x1a;
-+ port->command_addr =
-+ port->status_addr = base + 0x1f;
-+ port->altstatus_addr =
-+ port->ctl_addr = base + 0x81a;
-+}
-+
-+/**
-+ * pdc2027x_init_one - PCI probe function
-+ * Called when an instance of PCI adapter is inserted.
-+ * This function checks whether the hardware is supported,
-+ * initialize hardware and register an instance of ata_host_set to
-+ * libata by providing struct ata_probe_ent and ata_device_add().
-+ * (implements struct pci_driver.probe() )
-+ *
-+ * @pdev: instance of pci_dev found
-+ * @ent: matching entry in the id_tbl[]
-+ */
-+static int __devinit pdc2027x_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ unsigned int board_idx = (unsigned int) ent->driver_data;
-+
-+ struct ata_probe_ent *probe_ent = NULL;
-+ unsigned long base;
-+ void *mmio_base;
-+ int rc;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
-+
-+ rc = pci_enable_device(pdev);
-+ if (rc)
-+ return rc;
-+
-+ rc = pci_request_regions(pdev, DRV_NAME);
-+ if (rc)
-+ goto err_out;
-+
-+ rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
-+ if (rc)
-+ goto err_out_regions;
-+
-+ rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
-+ if (rc)
-+ goto err_out_regions;
-+
-+ /* Prepare the probe entry */
-+ probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL);
-+ if (probe_ent == NULL) {
-+ rc = -ENOMEM;
-+ goto err_out_regions;
-+ }
-+
-+ memset(probe_ent, 0, sizeof(*probe_ent));
-+ probe_ent->dev = pci_dev_to_dev(pdev);
-+ INIT_LIST_HEAD(&probe_ent->node);
-+
-+ mmio_base = ioremap(pci_resource_start(pdev, 5),
-+ pci_resource_len(pdev, 5));
-+
-+ if (mmio_base == NULL) {
-+ rc = -ENOMEM;
-+ goto err_out_free_ent;
-+ }
-+
-+ base = (unsigned long) mmio_base;
-+
-+ probe_ent->sht = pdc2027x_port_info[board_idx].sht;
-+ probe_ent->host_flags = pdc2027x_port_info[board_idx].host_flags;
-+ probe_ent->pio_mask = pdc2027x_port_info[board_idx].pio_mask;
-+ probe_ent->mwdma_mask = pdc2027x_port_info[board_idx].mwdma_mask;
-+ probe_ent->udma_mask = pdc2027x_port_info[board_idx].udma_mask;
-+ probe_ent->port_ops = pdc2027x_port_info[board_idx].port_ops;
-+
-+ probe_ent->irq = pdev->irq;
-+ probe_ent->irq_flags = SA_SHIRQ;
-+ probe_ent->mmio_base = mmio_base;
-+
-+ pdc_ata_setup_port(&probe_ent->port[0], base + 0x17c0);
-+ probe_ent->port[0].bmdma_addr = base + 0x1000;
-+ pdc_ata_setup_port(&probe_ent->port[1], base + 0x15c0);
-+ probe_ent->port[1].bmdma_addr = base + 0x1008;
-+
-+ probe_ent->n_ports = 2;
-+
-+ pci_set_master(pdev);
-+ //pci_enable_intx(pdev);
-+
-+ /* initialize adapter */
-+ if (pdc_hardware_init(pdev, probe_ent, board_idx) != 0)
-+ goto err_out_free_ent;
-+
-+ ata_device_add(probe_ent);
-+ kfree(probe_ent);
-+
-+ return 0;
-+
-+err_out_free_ent:
-+ kfree(probe_ent);
-+err_out_regions:
-+ pci_release_regions(pdev);
-+err_out:
-+ pci_disable_device(pdev);
-+ return rc;
-+}
-+
-+/**
-+ * pdc2027x_remove_one - Called to remove a single instance of the
-+ * adapter.
-+ *
-+ * @dev: The PCI device to remove.
-+ * FIXME: module load/unload not working yet
-+ */
-+static void __devexit pdc2027x_remove_one(struct pci_dev *pdev)
-+{
-+ ata_pci_remove_one(pdev);
-+}
-+
-+/**
-+ * pdc2027x_init - Called after this module is loaded into the kernel.
-+ */
-+static int __init pdc2027x_init(void)
-+{
-+ return pci_register_driver(&pdc2027x_pci_driver);
-+}
-+
-+/**
-+ * pdc2027x_exit - Called before this module unloaded from the kernel
-+ */
-+static void __exit pdc2027x_exit(void)
-+{
-+ pci_unregister_driver(&pdc2027x_pci_driver);
-+}
-+
-+module_init(pdc2027x_init);
-+module_exit(pdc2027x_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pdc202xx_old.c linux-2.6.16-rc6/drivers/scsi/pata_pdc202xx_old.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_pdc202xx_old.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_pdc202xx_old.c 2006-02-20 13:19:57.000000000 +0000
-@@ -0,0 +1,428 @@
-+/*
-+ * pata_pdc202xx_old.c - SL82C105 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based in part on linux/drivers/ide/pci/pdc202xx_old.c
-+ *
-+ * Initial revision
-+ *
-+ * TODO:
-+ * Channel interlock/reset on both required ?
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_pdc202xx_old"
-+#define DRV_VERSION "0.1.2"
-+
-+static void pdc2024x_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+
-+static void pdc2026x_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u16 cis;
-+
-+ pci_read_config_word(pdev, 0x50, &cis);
-+ if (cis & (1 << (10 + ap->hard_port_no)))
-+ ap->cbl = ATA_CBL_PATA80;
-+ else
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+
-+/**
-+ * pdc_configure_piomode - set chip PIO timing
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ * @pio: PIO mode
-+ *
-+ * Called to do the PIO mode setup. Our timing registers are shared
-+ * so a configure_dmamode call will undo any work we do here and vice
-+ * versa
-+ */
-+
-+static void pdc_configure_piomode(struct ata_port *ap, struct ata_device *adev, int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x60 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ static u16 pio_timing[5] = {
-+ 0x0913, 0x050C , 0x0308, 0x0206, 0x0104
-+ };
-+ u8 r_ap, r_bp;
-+
-+ /* FIFO, IORDY ? */
-+ pci_read_config_byte(pdev, port, &r_ap);
-+ pci_read_config_byte(pdev, port + 1, &r_bp);
-+ r_ap &= ~0x0F;
-+ r_bp &= ~0x07;
-+ r_ap |= (pio_timing[pio] >> 8);
-+ r_bp |= (pio_timing[pio] & 0xFF);
-+ pci_write_config_byte(pdev, port, r_ap);
-+ pci_write_config_byte(pdev, port + 1, r_bp);
-+}
-+
-+/**
-+ * pdc_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. Our timing registers are shared
-+ * but we want to set the PIO timing by default.
-+ */
-+
-+static void pdc_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ pdc_configure_piomode(ap, adev, adev->pio_mode - XFER_PIO_0);
-+}
-+
-+/**
-+ * pdc_configure_dmamode - set DMA mode in chip
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Load DMA cycle times into the chip ready for a DMA transfer
-+ * to occur.
-+ */
-+
-+static void pdc_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x60 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ static u8 udma_timing[6][2] = {
-+ { 0x60, 0x03 }, /* 33 Mhz Clock */
-+ { 0x40, 0x02 },
-+ { 0x20, 0x01 },
-+ { 0x40, 0x02 }, /* 66 Mhz Clock */
-+ { 0x20, 0x01 },
-+ { 0x20, 0x01 }
-+ };
-+ u8 r_bp, r_cp;
-+
-+ pci_read_config_byte(pdev, port + 1, &r_bp);
-+ pci_read_config_byte(pdev, port + 2, &r_cp);
-+
-+ r_bp &= ~0xF0;
-+ r_cp &= ~0x0F;
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ int speed = adev->dma_mode - XFER_UDMA_0;
-+ r_bp |= udma_timing[speed][0];
-+ r_cp |= udma_timing[speed][1];
-+
-+ } else {
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ r_bp |= 0x60;
-+ r_cp |= (5 - speed);
-+ }
-+ pci_write_config_byte(pdev, port + 1, r_bp);
-+ pci_write_config_byte(pdev, port + 2, r_cp);
-+
-+}
-+
-+/**
-+ * pdc2026x_reset_engine - Reset the DMA engine
-+ * @ap: ATA interface
-+ *
-+ * Reset the 2026x DMA engine. This is not something we want to do,
-+ * and we need to figure out how to serialize this across dual channel
-+ * devices if it is neccessary.
-+ *
-+ * FIXME: Do we need to reset the other interface too ?
-+ */
-+
-+static void pdc2026x_reset_engine(struct ata_port *ap)
-+{
-+ unsigned long ctrl = ap->host_set->ports[0]->ioaddr.bmdma_addr + 0x1F;
-+
-+ u8 val = inb(ctrl);
-+ outb(val | 0x10, ctrl);
-+ mdelay(100);
-+ outb(val & ~0x10, ctrl);
-+ mdelay(2000); /* Check - seems to be overkill, plus if needed
-+ redo locking */
-+ /* Need to fix up speed info at this point */
-+}
-+
-+/**
-+ * pdc2026x_bmdma_start - DMA engine begin
-+ * @qc: ATA command
-+ *
-+ * In UDMA3 or higher we have to clock switch for the duration of the
-+ * DMA transfer sequence.
-+ */
-+
-+static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ int sel66 = ap->hard_port_no ? 0x08: 0x02;
-+ /* The clock bits are in the same register for both channels */
-+ unsigned long clock = ap->host_set->ports[0]->ioaddr.bmdma_addr + 0x11;
-+
-+ /* Check we keep host_set level locking here */
-+ if (adev->dma_mode >= XFER_UDMA_2)
-+ outb(inb(clock) | sel66, clock);
-+ else
-+ outb(inb(clock) & ~sel66, clock);
-+ /* The DMA clocks may have been trashed by a reset. FIXME: make conditional
-+ and move to qc_issue ? */
-+ pdc_set_dmamode(ap, qc->dev);
-+ /* Activate DMA */
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * pdc2026x_bmdma_end - DMA engine stop
-+ * @qc: ATA command
-+ *
-+ * After a DMA completes we need to put the clock back to 33MHz for
-+ * PIO timings.
-+ */
-+
-+static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ int sel66 = ap->hard_port_no ? 0x08: 0x02;
-+ /* The clock bits are in the same register for both channels */
-+ unsigned long clock = ap->host_set->ports[0]->ioaddr.bmdma_addr + 0x11;
-+
-+ /* FIXME: Review LBA48 code in ide/pci driver */
-+ ata_bmdma_stop(qc);
-+ /* Check we keep host_set level locking here */
-+ /* Flip back to 33Mhz for PIO */
-+ if (adev->dma_mode >= XFER_UDMA_2)
-+ outb(inb(clock) & ~sel66, clock);
-+}
-+
-+/**
-+ * pdc2026x_eng_timeout - command timeout
-+ * @qc: command that timed out
-+ *
-+ * When the PDC2026x times out hit the controller over the head
-+ * with a hammer before continuing. The reset unfortunately also
-+ * resets the timing registers so we must reprogram these.
-+ */
-+
-+static void pdc2026x_eng_timeout(struct ata_port *ap)
-+{
-+ int i;
-+
-+ /* Perform libata side housekeeping */
-+ ata_eng_timeout(ap);
-+
-+ /* Reset the controller */
-+ pdc2026x_reset_engine(ap);
-+
-+ /* Reprogram the device timings */
-+ for (i = 0; i < 2; i++) {
-+ struct ata_device *adev = &ap->device[i];
-+ if (ata_dev_present(adev)) {
-+ pdc_set_piomode(ap, adev);
-+ if (adev->dma_mode)
-+ pdc_set_dmamode(ap, adev);
-+ }
-+ }
-+}
-+
-+/**
-+ * pdc2026x_dev_config - device setup hook
-+ * @ap: ATA port
-+ * @adev: newly found device
-+ *
-+ * Perform chip specific early setup. We need to lock the transfer
-+ * sizes to 8bit to avoid making the state engine on the 2026x cards
-+ * barf.
-+ */
-+
-+static void pdc2026x_dev_config(struct ata_port *ap, struct ata_device *adev)
-+{
-+ /* We cannot blindly set 256 as the core code may already
-+ have picked a lower limit */
-+
-+ if(ap->host->max_sectors > 256) {
-+ ap->host->max_sectors = 256;
-+ ap->host->hostt->max_sectors = 256;
-+ }
-+ adev->flags |= ATA_DFLAG_LOCK_SECTORS;
-+}
-+
-+static struct scsi_host_template pdc_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations pdc2024x_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = pdc_set_piomode,
-+ .set_dmamode = pdc_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = pdc2024x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations pdc2026x_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = pdc_set_piomode,
-+ .set_dmamode = pdc_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+ .dev_config = pdc2026x_dev_config,
-+
-+ .phy_reset = pdc2026x_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = pdc2026x_bmdma_start,
-+ .bmdma_stop = pdc2026x_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = pdc2026x_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int pdc_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info[3] = {
-+ {
-+ .sht = &pdc_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA2,
-+ .port_ops = &pdc2024x_port_ops
-+ },
-+ {
-+ .sht = &pdc_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA4,
-+ .port_ops = &pdc2026x_port_ops
-+ },
-+ {
-+ .sht = &pdc_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &pdc2026x_port_ops
-+ }
-+
-+ };
-+ static struct ata_port_info *port_info[2];
-+
-+ port_info[0] = port_info[1] = &info[id->driver_data];
-+
-+ if (dev->device == PCI_DEVICE_ID_PROMISE_20265) {
-+ struct pci_dev *bridge = dev->bus->self;
-+ /* Don't grab anything behind a Promise I2O RAID */
-+ if (bridge && bridge->vendor == PCI_VENDOR_ID_INTEL) {
-+ if( bridge->device == PCI_DEVICE_ID_INTEL_I960)
-+ return -ENODEV;
-+ if( bridge->device == PCI_DEVICE_ID_INTEL_I960RM)
-+ return -ENODEV;
-+ }
-+ }
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static struct pci_device_id pdc[] = {
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { 0, },
-+};
-+
-+static struct pci_driver pdc_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = pdc,
-+ .probe = pdc_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init pdc_init(void)
-+{
-+ return pci_register_driver(&pdc_pci_driver);
-+}
-+
-+
-+static void __exit pdc_exit(void)
-+{
-+ pci_unregister_driver(&pdc_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Promise 2024x and 20262-20267");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, pdc);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(pdc_init);
-+module_exit(pdc_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_qdi.c linux-2.6.16-rc6/drivers/scsi/pata_qdi.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_qdi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_qdi.c 2006-02-15 15:08:22.000000000 +0000
-@@ -0,0 +1,370 @@
-+/*
-+ * pata_qdi.c - QDI VLB ATA controllers
-+ * (C) 2006 Red Hat <alan@redhat.com>
-+ *
-+ * This driver mostly exists as a proof of concept for non PCI devices under libata.
-+ * While the QDI6580 was 'neat' in 1993 it is no longer terribly useful.
-+ *
-+ * Tuning code written from the documentation at
-+ * http://www.ryston.cz/petr/vlb/qd6500.html
-+ * http://www.ryston.cz/petr/vlb/qd6580.html
-+ *
-+ * Probe code based on drivers/ide/legacy/qd65xx.c
-+ * Rewritten from the work of Colten Edwards <pje120@cs.usask.ca> by
-+ * Samuel Thibault <samuel.thibault@fnac.net>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_qdi"
-+#define DRV_VERSION "0.2"
-+
-+#define NR_HOST 4 /* Two 6580s */
-+
-+struct qdi_data {
-+ unsigned long timing;
-+ u8 clock[2];
-+ u8 last;
-+ int fast;
-+
-+};
-+
-+static struct ata_host_set *qdi_host[NR_HOST];
-+static struct qdi_data qdi_data[NR_HOST];
-+static int nr_qdi_host = 0;
-+
-+static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct ata_timing t;
-+ struct qdi_data *qdi = ap->host_set->private_data;
-+ int active, recovery;
-+ u8 timing;
-+
-+ /* Get the timing data in cycles */
-+ ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
-+
-+ if (qdi->fast) {
-+ active = 8 - FIT(t.active, 1, 8);
-+ recovery = 18 - FIT(t.recover, 3, 18);
-+ } else {
-+ active = 9 - FIT(t.active, 2, 9);
-+ recovery = 15 - FIT(t.recover, 0, 15);
-+ }
-+ timing = (recovery << 4) | active | 0x08;
-+
-+ qdi->clock[adev->devno] = timing;
-+
-+ outb(timing, qdi->timing);
-+}
-+
-+static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct ata_timing t;
-+ struct qdi_data *qdi = ap->host_set->private_data;
-+ int active, recovery;
-+ u8 timing;
-+
-+ /* Get the timing data in cycles */
-+ ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
-+
-+ if (qdi->fast) {
-+ active = 8 - FIT(t.active, 1, 8);
-+ recovery = 18 - FIT(t.recover, 3, 18);
-+ } else {
-+ active = 9 - FIT(t.active, 2, 9);
-+ recovery = 15 - FIT(t.recover, 0, 15);
-+ }
-+ timing = (recovery << 4) | active | 0x08;
-+
-+ qdi->clock[adev->devno] = timing;
-+
-+ outb(timing, qdi->timing);
-+
-+ /* Clear the FIFO */
-+ if (adev->class != ATA_DEV_ATA)
-+ outb(0x5F, (qdi->timing & 0xFFF0) + 3);
-+}
-+
-+/**
-+ * qdi_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings.
-+ */
-+
-+static int qdi_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ struct qdi_data *qdi = ap->host_set->private_data;
-+
-+ if (qdi->clock[adev->devno] != qdi->last) {
-+ if (adev->pio_mode) {
-+ qdi->last = qdi->clock[adev->devno];
-+ outb(qdi->clock[adev->devno], qdi->timing);
-+ }
-+ }
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static void qdi_data_xfer(struct ata_port *ap, struct ata_device *adev, unsigned char *buf, unsigned int buflen, int write_data)
-+{
-+ int slop = buflen & 3;
-+
-+ if (ata_id_has_dword_io(adev->id)) {
-+ if (write_data)
-+ outsl(ap->ioaddr.data_addr, buf, buflen >> 2);
-+ else
-+ insl(ap->ioaddr.data_addr, buf, buflen >> 2);
-+
-+ if (unlikely(slop)) {
-+ u32 pad;
-+ if (write_data) {
-+ memcpy(&pad, buf + buflen - slop, slop);
-+ outl(le32_to_cpu(pad), ap->ioaddr.data_addr);
-+ } else {
-+ pad = cpu_to_le16(inl(ap->ioaddr.data_addr));
-+ memcpy(buf + buflen - slop, &pad, slop);
-+ }
-+ }
-+ } else
-+ ata_pio_data_xfer(ap, adev, buf, buflen, write_data);
-+}
-+
-+static struct scsi_host_template qdi_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations qdi6500_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = qdi6500_set_piomode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = qdi_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = qdi_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations qdi6580_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = qdi6580_set_piomode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = qdi_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = qdi_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * qdi_init_one - attach a qdi interface
-+ * @type: Type to display
-+ * @io: I/O port start
-+ * @irq: interrupt line
-+ * @fast: True if on a > 33Mhz VLB
-+ *
-+ * Register an ISA bus IDE interface. Such interfaces are PIO and we
-+ * assume do not support IRQ sharing.
-+ */
-+
-+static __init int qdi_init_one(unsigned long port, int type, unsigned long io, int irq, int fast)
-+{
-+ struct ata_probe_ent ae;
-+ int ret;
-+
-+ unsigned long ctrl = io + 0x206;
-+
-+ /*
-+ * Fill in a probe structure first of all
-+ */
-+
-+ memset(&ae, 0, sizeof(struct ata_probe_ent));
-+ INIT_LIST_HEAD(&ae.node);
-+ ae.dev = NULL;
-+
-+ if (type == 6580) {
-+ ae.port_ops = &qdi6580_port_ops;
-+ ae.pio_mask = 0x1F;
-+ } else {
-+ ae.port_ops = &qdi6500_port_ops;
-+ ae.pio_mask = 0x07; /* Actually PIO3 !IORDY is possible */
-+ }
-+
-+ ae.sht = &qdi_sht;
-+ ae.n_ports = 1;
-+ ae.irq = irq;
-+ ae.irq_flags = 0;
-+ ae.host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_IRQ_MASK;
-+ ae.port[0].cmd_addr = io;
-+ ae.port[0].altstatus_addr = ctrl;
-+ ae.port[0].ctl_addr = ctrl;
-+ ata_std_ports(&ae.port[0]);
-+
-+ /*
-+ * Hook in a private data structure per channel
-+ */
-+ ae.private_data = &qdi_data[nr_qdi_host];
-+
-+ qdi_data[nr_qdi_host].timing = port;
-+ qdi_data[nr_qdi_host].fast = fast;
-+
-+ printk(KERN_INFO DRV_NAME": qd%d at 0x%lx.\n", type, io);
-+ ret = ata_device_add(&ae);
-+ if (ret == 0)
-+ return -ENODEV;
-+
-+ qdi_host[nr_qdi_host++] = ae.host_set;
-+ return 0;
-+}
-+
-+/**
-+ * qdi_init - attach qdi interfaces
-+ *
-+ * Attach qdi IDE interfaces by scanning the ports it may occupy.
-+ */
-+
-+static __init int qdi_init(void)
-+{
-+ unsigned long flags;
-+ unsigned long qd_port[2] = { 0x30, 0xB0 };
-+ unsigned long ide_port[2] = { 0x170, 0x1F0 };
-+ int ide_irq[2] = { 14, 15 };
-+ int ct = 0;
-+ int i;
-+
-+ /*
-+ * Check each possible QD65xx base address
-+ */
-+
-+ for (i = 0; i < 2; i++) {
-+ unsigned long port = qd_port[i];
-+ u8 r, res;
-+
-+
-+ if (request_region(port, 2, "pata_qdi")) {
-+ /* Check for a card */
-+ local_irq_save(flags);
-+ r = inb_p(port);
-+ outb_p(0x19, port);
-+ res = inb_p(port);
-+ outb_p(r, port);
-+ local_irq_restore(flags);
-+
-+ /* Fail */
-+ if (res == 0x19)
-+ {
-+ release_region(port, 2);
-+ continue;
-+ }
-+
-+ /* Passes the presence test */
-+ r = inb_p(port + 1); /* Check port agrees with port set */
-+ if ((r & 2) >> 1 != i) {
-+ release_region(port, 2);
-+ continue;
-+ }
-+
-+ /* Check card type */
-+ if ((r & 0xF0) == 0xC0) {
-+ /* QD6500: single channel */
-+ if (r & 8) {
-+ /* Disabled ? */
-+ release_region(port, 2);
-+ continue;
-+ }
-+ ct += qdi_init_one(port, 6500, ide_port[r & 0x01], ide_irq[r & 0x01], r & 0x04);
-+ }
-+ if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
-+ /* QD6580: dual channel */
-+ if (!request_region(port + 2 , 2, "pata_qdi"))
-+ {
-+ release_region(port, 2);
-+ continue;
-+ }
-+ res = inb(port + 3);
-+ if (res & 1) {
-+ /* Single channel mode */
-+ ct += qdi_init_one(port, 6580, ide_port[r & 0x01], ide_irq[r & 0x01], r & 0x04);
-+ } else {
-+ /* Dual channel mode */
-+ ct += qdi_init_one(port, 6580, 0x1F0, 14, r & 0x04);
-+ ct += qdi_init_one(port + 2, 6580, 0x170, 15, r & 0x04);
-+ }
-+ }
-+ }
-+ }
-+ if (ct != 0)
-+ return 0;
-+ return -ENODEV;
-+}
-+
-+static __exit void qdi_exit(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < nr_qdi_host; i++) {
-+ ata_host_set_remove(qdi_host[i]);
-+ /* Free the control resource. The 6580 dual channel has the resources
-+ * claimed as a pair of 2 byte resources so we need no special cases...
-+ */
-+ release_region(qdi_data[i].timing, 2);
-+ }
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for qdi ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(qdi_init);
-+module_exit(qdi_exit);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_radisys.c linux-2.6.16-rc6/drivers/scsi/pata_radisys.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_radisys.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_radisys.c 2006-02-17 15:31:12.000000000 +0000
-@@ -0,0 +1,321 @@
-+/*
-+ * pata_radisys.c - Intel PATA/SATA controllers
-+ *
-+ * (C) 2006 Red Hat <alan@redhat.com>
-+ *
-+ * Some parts based on ata_piix.c by Jeff Garzik and others.
-+ *
-+ * A PIIX relative, this device has a single ATA channel and no
-+ * slave timings, SITRE or PPE. In that sense it is a close relative
-+ * of the original PIIX. It does however support UDMA 33/66 per channel
-+ * although no other modes/timings. Also lacking is 32bit I/O on the ATA
-+ * port.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_radisys"
-+#define DRV_VERSION "0.2"
-+
-+/**
-+ * radisys_pata_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void radisys_pata_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA80;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * radisys_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: um
-+ *
-+ * Set PIO mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void radisys_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ unsigned int pio = adev->pio_mode - XFER_PIO_0;
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ u16 idetm_data;
-+ int control = 0;
-+
-+ /*
-+ * See Intel Document 298600-004 for the timing programing rules
-+ * for PIIX/ICH. Note that the early PIIX does not have the slave
-+ * timing port at 0x44. The Radisys is a relative of the PIIX
-+ * but not the same so be careful.
-+ */
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 }, /* Check me */
-+ { 0, 0 },
-+ { 1, 1 },
-+ { 2, 2 },
-+ { 3, 3 }, };
-+
-+ if (pio > 0)
-+ control |= 1; /* TIME1 enable */
-+ if (ata_pio_need_iordy(adev))
-+ control |= 2; /* IE IORDY */
-+
-+ pci_read_config_word(dev, 0x40, &idetm_data);
-+
-+ /* Enable IE and TIME as appropriate. Clear the other
-+ drive timing bits */
-+ idetm_data &= 0xCCCC;
-+ idetm_data |= (control << (4 * adev->devno));
-+ idetm_data |= (timings[pio][0] << 12) |
-+ (timings[pio][1] << 8);
-+ pci_write_config_word(dev, 0x40, idetm_data);
-+
-+ /* Track which port is configured */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * radisys_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ * @isich: True if the device is an ICH and has IOCFG registers
-+ *
-+ * Set MWDMA mode for device, in host controller PCI config space.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void radisys_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *dev = to_pci_dev(ap->host_set->dev);
-+ u16 idetm_data;
-+ u8 udma_enable;
-+
-+ static const /* ISP RTC */
-+ u8 timings[][2] = { { 0, 0 },
-+ { 0, 0 },
-+ { 1, 1 },
-+ { 2, 2 },
-+ { 3, 3 }, };
-+
-+ /*
-+ * MWDMA is driven by the PIO timings. We must also enable
-+ * IORDY unconditionally.
-+ */
-+
-+ pci_read_config_word(dev, 0x40, &idetm_data);
-+ pci_read_config_byte(dev, 0x48, &udma_enable);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ unsigned int mwdma = adev->dma_mode - XFER_MW_DMA_0;
-+ const unsigned int needed_pio[3] = {
-+ XFER_PIO_0, XFER_PIO_3, XFER_PIO_4
-+ };
-+ int pio = needed_pio[mwdma] - XFER_PIO_0;
-+ int control = 3; /* IORDY|TIME0 */
-+
-+ /* If the drive MWDMA is faster than it can do PIO then
-+ we must force PIO0 for PIO cycles. */
-+
-+ if (adev->pio_mode < needed_pio[mwdma])
-+ control = 1;
-+
-+ /* Mask out the relevant control and timing bits we will load. Also
-+ clear the other drive TIME register as a precaution */
-+
-+ idetm_data &= 0xCCCC;
-+ idetm_data |= control << (4 * adev->devno);
-+ idetm_data |= (timings[pio][0] << 12) | (timings[pio][1] << 8);
-+
-+ udma_enable &= ~(1 << adev->devno);
-+ } else {
-+ u8 udma_mode;
-+
-+ /* UDMA66 on. It isn't clear from the documentation whether
-+ UDMA 33 and 66 are switchable via register 0x4A */
-+
-+ pci_read_config_byte(dev, 0x4A, &udma_mode);
-+
-+ if (adev->xfer_mode == XFER_UDMA_2)
-+ udma_mode &= ~ (1 << adev->devno);
-+ else /* UDMA 4 */
-+ udma_mode |= (1 << adev->devno);
-+
-+ pci_write_config_byte(dev, 0x4A, udma_mode);
-+
-+ udma_enable |= (1 << adev->devno);
-+ }
-+ pci_write_config_word(dev, 0x40, idetm_data);
-+ pci_write_config_byte(dev, 0x48, udma_enable);
-+
-+ /* Track which port is configured */
-+ ap->private_data = adev;
-+}
-+
-+/**
-+ * radisys_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Our logic also clears TIME0/TIME1 for the other device so
-+ * that, even if we get this wrong, cycles to the other device will
-+ * be made PIO0.
-+ */
-+
-+static int radisys_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+
-+ if (adev != ap->private_data) {
-+ /* UDMA timing is not shared */
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ if (adev->dma_mode)
-+ radisys_set_dmamode(ap, adev);
-+ else if (adev->pio_mode)
-+ radisys_set_piomode(ap, adev);
-+ }
-+ }
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+
-+static struct scsi_host_template radisys_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations radisys_pata_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = radisys_set_piomode,
-+ .set_dmamode = radisys_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = radisys_pata_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = radisys_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+
-+/**
-+ * radisys_init_one - Register PIIX ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in radisys_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer. We probe for combined mode (sigh),
-+ * and then hand over control to libata, for it to do the rest.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int radisys_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ static struct ata_port_info info = {
-+ .sht = &radisys_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07, /* mwdma1-2 */
-+ .udma_mask = 0x14, /* UDMA33/66 only */
-+ .port_ops = &radisys_pata_ops,
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id radisys_pci_tbl[] = {
-+ { 0x1331, 0x8201, PCI_ANY_ID, PCI_ANY_ID, },
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver radisys_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = radisys_pci_tbl,
-+ .probe = radisys_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init radisys_init(void)
-+{
-+ return pci_register_driver(&radisys_pci_driver);
-+}
-+
-+static void __exit radisys_exit(void)
-+{
-+ pci_unregister_driver(&radisys_pci_driver);
-+}
-+
-+
-+module_init(radisys_init);
-+module_exit(radisys_exit);
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("SCSI low-level driver for Radisys R82600 controllers");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, radisys_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_rz1000.c linux-2.6.16-rc6/drivers/scsi/pata_rz1000.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_rz1000.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_rz1000.c 2006-02-16 15:38:18.000000000 +0000
-@@ -0,0 +1,183 @@
-+/*
-+ * RZ1000/1001 driver based upon
-+ *
-+ * linux/drivers/ide/pci/rz1000.c Version 0.06 January 12, 2003
-+ * Copyright (C) 1995-1998 Linus Torvalds & author (see below)
-+ * Principal Author: mlord@pobox.com (Mark Lord)
-+ *
-+ * See linux/MAINTAINERS for address of current maintainer.
-+ *
-+ * This file provides support for disabling the buggy read-ahead
-+ * mode of the RZ1000 IDE chipset, commonly used on Intel motherboards.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "rz1000"
-+#define DRV_VERSION "0.01"
-+
-+static void rz1000_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * rz1000_set_mode - mode setting function
-+ * @ap: ATA interface
-+ *
-+ * Use a non standard set_mode function. We don't want to be tuned. We
-+ * would prefer to be BIOS generic but for the fact our hardware is
-+ * whacked out.
-+ */
-+
-+static void rz1000_set_mode(struct ata_port *ap)
-+{
-+ int i;
-+
-+ for (i = 0; i < ATA_MAX_DEVICES; i++) {
-+ struct ata_device *dev = &ap->device[i];
-+ if (ata_dev_present(dev)) {
-+ /* We don't really care */
-+ dev->pio_mode = XFER_PIO_0;
-+ dev->xfer_mode = XFER_PIO_0;
-+ dev->xfer_shift = ATA_SHIFT_PIO;
-+ dev->flags |= ATA_DFLAG_PIO;
-+ }
-+ }
-+}
-+
-+
-+static struct scsi_host_template rz1000_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations rz1000_port_ops = {
-+ .set_mode = rz1000_set_mode,
-+
-+ .port_disable = ata_port_disable,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = rz1000_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * rz1000_init_one - Register RZ1000 ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in rz1000_pci_tbl matching with @pdev
-+ *
-+ * Configure an RZ1000 interface. This doesn't require much special
-+ * handling except that we *MUST* kill the chipset readahead or the
-+ * user may experience data corruption.
-+ */
-+
-+static int rz1000_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ struct ata_port_info *port_info[2];
-+ u16 reg;
-+ static struct ata_port_info info = {
-+ .sht = &rz1000_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .port_ops = &rz1000_port_ops
-+ };
-+
-+ if (!printed_version++)
-+ printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n");
-+
-+ /* Be exceptionally paranoid as we must be sure to apply the fix */
-+ if (pci_read_config_word(pdev, 0x40, &reg) != 0)
-+ goto fail;
-+ reg &= 0xDFFF;
-+ if (pci_write_config_word(pdev, 0x40, reg) != 0)
-+ goto fail;
-+ printk(KERN_INFO DRV_NAME ": disabled chipset readahead.\n");
-+
-+ port_info[0] = &info;
-+ port_info[1] = &info;
-+ return ata_pci_init_one(pdev, port_info, 2);
-+fail:
-+ printk(KERN_ERR DRV_NAME ": failed to disable read-ahead on chipset..\n");
-+ /* Not safe to use so skip */
-+ return -ENODEV;
-+}
-+
-+static struct pci_device_id pata_rz1000[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), },
-+ { PCI_DEVICE(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001), },
-+ { 0, },
-+};
-+
-+static struct pci_driver rz1000_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = pata_rz1000,
-+ .probe = rz1000_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+
-+static int __init rz1000_init(void)
-+{
-+ return pci_register_driver(&rz1000_pci_driver);
-+}
-+
-+static void __exit rz1000_exit(void)
-+{
-+ pci_unregister_driver(&rz1000_pci_driver);
-+}
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for RZ1000 PCI ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, pata_rz1000);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(rz1000_init);
-+module_exit(rz1000_exit);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sc1200.c linux-2.6.16-rc6/drivers/scsi/pata_sc1200.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sc1200.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_sc1200.c 2006-03-10 17:07:03.000000000 +0000
-@@ -0,0 +1,286 @@
-+/*
-+ * New ATA layer SC1200 driver Alan Cox <alan@redhat.com>
-+ *
-+ * TODO: Mode selection filtering
-+ * TODO: Can't enable second channel until ATA core has serialize
-+ * TODO: Needs custom DMA cleanup code
-+ *
-+ * Based very heavily on
-+ *
-+ * linux/drivers/ide/pci/sc1200.c Version 0.91 28-Jan-2003
-+ *
-+ * Copyright (C) 2000-2002 Mark Lord <mlord@pobox.com>
-+ * May be copied or modified under the terms of the GNU General Public License
-+ *
-+ * Development of this chipset driver was funded
-+ * by the nice folks at National Semiconductor.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "sc1200"
-+#define DRV_VERSION "0.2"
-+
-+#define SC1200_REV_A 0x00
-+#define SC1200_REV_B1 0x01
-+#define SC1200_REV_B3 0x02
-+#define SC1200_REV_C1 0x03
-+#define SC1200_REV_D1 0x04
-+
-+/**
-+ * sc1200_clock - PCI clock
-+ *
-+ * Return the PCI bus clocking for the SC1200 chipset configuration
-+ * in use. We return 0 for 33MHz 1 for 48MHz and 2 for 66Mhz
-+ */
-+
-+static int sc1200_clock(void)
-+{
-+ /* Magic registers that give us the chipset data */
-+ u8 chip_id = inb(0x903C);
-+ u8 silicon_rev = inb(0x903D);
-+ u16 pci_clock;
-+
-+ if (chip_id == 0x04 && silicon_rev < SC1200_REV_B1)
-+ return 0; /* 33 MHz mode */
-+
-+ /* Clock generator configuration 0x901E its 8/9 are the PCI clocking
-+ 0/3 is 33Mhz 1 is 48 2 is 66 */
-+
-+ pci_clock = inw(0x901E);
-+ pci_clock >>= 8;
-+ pci_clock &= 0x03;
-+ if (pci_clock == 3)
-+ pci_clock = 0;
-+ return pci_clock;
-+}
-+
-+/**
-+ * sc1200_set_piomode - PIO setup
-+ * @ap: ATA interface
-+ * @adev: device on the interface
-+ *
-+ * Set our PIO requirements. This is fairly simple on the SC1200
-+ */
-+
-+static void sc1200_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u32 pio_timings[4][5] = {
-+ {0x00009172, 0x00012171, 0x00020080, 0x00032010, 0x00040010}, // format0 33Mhz
-+ {0xd1329172, 0x71212171, 0x30200080, 0x20102010, 0x00100010}, // format1, 33Mhz
-+ {0xfaa3f4f3, 0xc23232b2, 0x513101c1, 0x31213121, 0x10211021}, // format1, 48Mhz
-+ {0xfff4fff4, 0xf35353d3, 0x814102f1, 0x42314231, 0x11311131} // format1, 66Mhz
-+ };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 format;
-+ unsigned int reg = 0x40 + 0x10 * ap->hard_port_no;
-+ int mode = adev->pio_mode - XFER_PIO_0;
-+
-+ pci_read_config_dword(pdev, reg + 4, &format);
-+ format >>= 31;
-+ format += sc1200_clock();
-+ pci_write_config_dword(pdev, reg + 8 * adev->devno,
-+ pio_timings[format][mode]);
-+}
-+
-+/**
-+ * sc1200_set_dmamode - DMA timing setup
-+ * @ap: ATA interface
-+ * @adev: Device being configured
-+ *
-+ * We cannot mix MWDMA and UDMA without reloading timings each switch
-+ * master to slave.
-+ */
-+
-+static void sc1200_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u32 udma_timing[3][3] = {
-+ { 0x00921250, 0x00911140, 0x00911030 },
-+ { 0x00932470, 0x00922260, 0x00922140 },
-+ { 0x009436A1, 0x00933481, 0x00923261 }
-+ };
-+
-+ static u32 mwdma_timing[3][3] = {
-+ { 0x00077771, 0x00012121, 0x00002020 },
-+ { 0x000BBBB2, 0x00024241, 0x00013131 },
-+ { 0x000FFFF3, 0x00035352, 0x00015151 }
-+ };
-+
-+ int clock = sc1200_clock();
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ unsigned int reg = 0x40 + 0x10 * ap->hard_port_no;
-+ int mode = adev->dma_mode;
-+ u32 format;
-+
-+ if (mode >= XFER_UDMA_0)
-+ format = udma_timing[clock][mode - XFER_UDMA_0];
-+ else
-+ format = mwdma_timing[clock][mode - XFER_MW_DMA_0];
-+
-+ if (adev->devno == 0) {
-+ u32 timings;
-+
-+ pci_read_config_dword(pdev, reg + 4, &timings);
-+ timings &= 0x80000000UL;
-+ timings |= format;
-+ pci_write_config_dword(pdev, reg + 4, timings);
-+ } else
-+ pci_write_config_dword(pdev, reg + 12, format);
-+}
-+
-+/**
-+ * sc1200_qc_issue_prot - command issue
-+ * @qc: command pending
-+ *
-+ * Called when the libata layer is about to issue a command. We wrap
-+ * this interface so that we can load the correct ATA timings if
-+ * neccessary. Specifically we have a problem that there is only
-+ * one MWDMA/UDMA bit.
-+ */
-+
-+static int sc1200_qc_issue_prot(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+ struct ata_device *adev = qc->dev;
-+ struct ata_device *prev = ap->private_data;
-+
-+ /* See if the DMA settings could be wrong */
-+ if (adev->dma_mode != 0 && adev != prev && prev != NULL) {
-+ /* Maybe, but do the channels match MWDMA/UDMA ? */
-+ if ((adev->dma_mode >= XFER_UDMA_0 && prev->dma_mode < XFER_UDMA_0) ||
-+ (adev->dma_mode < XFER_UDMA_0 && prev->dma_mode >= XFER_UDMA_0))
-+ /* Switch the mode bits */
-+ sc1200_set_dmamode(ap, adev);
-+ }
-+
-+ return ata_qc_issue_prot(qc);
-+}
-+
-+static struct scsi_host_template sc1200_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations sc1200_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sc1200_set_piomode,
-+ .set_dmamode = sc1200_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = sc1200_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * sc1200_init_one - Initialise an SC1200
-+ * @dev: PCI device
-+ * @id: Entry in match table
-+ *
-+ * Just throw the needed data at the libata helper and it does all
-+ * our work.
-+ */
-+
-+static int sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &sc1200_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x07,
-+ .port_ops = &sc1200_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+
-+ /* Can't enable port 2 yet, see top comments */
-+ return ata_pci_init_one(dev, port_info, 1);
-+}
-+
-+static struct pci_device_id sc1200[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_IDE), },
-+ { 0, },
-+};
-+
-+static struct pci_driver sc1200_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = sc1200,
-+ .probe = sc1200_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init sc1200_init(void)
-+{
-+ return pci_register_driver(&sc1200_pci_driver);
-+}
-+
-+
-+static void __exit sc1200_exit(void)
-+{
-+ pci_unregister_driver(&sc1200_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox, Mark Lord");
-+MODULE_DESCRIPTION("low-level driver for the NS/AMD SC1200");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, sc1200);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(sc1200_init);
-+module_exit(sc1200_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_serverworks.c linux-2.6.16-rc6/drivers/scsi/pata_serverworks.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_serverworks.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_serverworks.c 2006-02-16 15:37:31.000000000 +0000
-@@ -0,0 +1,586 @@
-+/*
-+ * ata-serverworks.c - Serverworks PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon
-+ *
-+ * serverworks.c
-+ *
-+ * Copyright (C) 1998-2000 Michel Aubry
-+ * Copyright (C) 1998-2000 Andrzej Krzysztofowicz
-+ * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
-+ * Portions copyright (c) 2001 Sun Microsystems
-+ *
-+ *
-+ * RCC/ServerWorks IDE driver for Linux
-+ *
-+ * OSB4: `Open South Bridge' IDE Interface (fn 1)
-+ * supports UDMA mode 2 (33 MB/s)
-+ *
-+ * CSB5: `Champion South Bridge' IDE Interface (fn 1)
-+ * all revisions support UDMA mode 4 (66 MB/s)
-+ * revision A2.0 and up support UDMA mode 5 (100 MB/s)
-+ *
-+ * *** The CSB5 does not provide ANY register ***
-+ * *** to detect 80-conductor cable presence. ***
-+ *
-+ * CSB6: `Champion South Bridge' IDE Interface (optional: third channel)
-+ *
-+ * Documentation:
-+ * Available under NDA only. Errata info very hard to get.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "serverworks"
-+#define DRV_VERSION "0.1.1"
-+
-+#define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */
-+#define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */
-+
-+/* Seagate Barracuda ATA IV Family drives in UDMA mode 5
-+ * can overrun their FIFOs when used with the CSB5 */
-+
-+static const char *csb_bad_ata100[] = {
-+ "ST320011A",
-+ "ST340016A",
-+ "ST360021A",
-+ "ST380021A",
-+ NULL
-+};
-+
-+/**
-+ * dell_cable - Dell serverworks cable detection
-+ * @ap: ATA port to do cable detect
-+ *
-+ * Dell hide the 40/80 pin select for their interfaces in the top two
-+ * bits of the subsystem ID.
-+ */
-+
-+static int dell_cable(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ if (pdev->subsystem_device & (1 << (ap->hard_port_no + 14)))
-+ return ATA_CBL_PATA80;
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * sun_cable - Sun Cobalt 'Alpine' cable detection
-+ * @ap: ATA port to do cable select
-+ *
-+ * Cobalt CSB5 IDE hides the 40/80pin in the top two bits of the
-+ * subsystem ID the same as dell. We could use one function but we may
-+ * need to extend the Dell one in future
-+ */
-+
-+static int sun_cable(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ if (pdev->subsystem_device & (1 << (ap->hard_port_no + 14)))
-+ return ATA_CBL_PATA80;
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * osb4_cable - OSB4 cable detect
-+ * @ap: ATA port to check
-+ *
-+ * The OSB4 isn't UDMA66 capable so this is easy
-+ */
-+
-+static int osb4_cable(struct ata_port *ap) {
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * csb4_cable - CSB5/6 cable detect
-+ * @ap: ATA port to check
-+ *
-+ * Serverworks default arrangement is to use the drive side detection
-+ * only.
-+ */
-+
-+static int csb_cable(struct ata_port *ap) {
-+ return ATA_CBL_PATA80;
-+}
-+
-+struct sv_cable_table {
-+ int device;
-+ int subvendor;
-+ int (*cable_detect)(struct ata_port *ap);
-+};
-+
-+/*
-+ * Note that we don't copy the old serverworks code because the old
-+ * code contains obvious mistakes
-+ */
-+
-+static struct sv_cable_table cable_detect[] = {
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_VENDOR_ID_DELL, dell_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_VENDOR_ID_DELL, dell_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_VENDOR_ID_SUN, sun_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_OSB4, PCI_ANY_ID, osb4_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, csb_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, csb_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, csb_cable },
-+ { PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, csb_cable },
-+ { }
-+};
-+
-+/**
-+ * serverworks_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection according to the device and subvendor
-+ * identifications
-+ */
-+
-+static int serverworks_cable_detect(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct sv_cable_table *cb = cable_detect;
-+
-+ while(cb->device) {
-+ if (cb->device == pdev->device &&
-+ (cb->subvendor == pdev->subsystem_vendor ||
-+ cb->subvendor == PCI_ANY_ID)) {
-+ return cb->cable_detect(ap);
-+ }
-+ cb++;
-+ }
-+ BUG();
-+}
-+
-+static void serverworks_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = serverworks_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * serverworks_is_csb - Check for CSB or OSB
-+ * @pdev: PCI device to check
-+ *
-+ * Returns true if the device being checked is known to be a CSB
-+ * series device.
-+ */
-+
-+static u8 serverworks_is_csb(struct pci_dev *pdev)
-+{
-+ switch (pdev->device) {
-+ case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE:
-+ case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE:
-+ case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2:
-+ case PCI_DEVICE_ID_SERVERWORKS_HT1000IDE:
-+ return 1;
-+ default:
-+ break;
-+ }
-+ return 0;
-+}
-+
-+/**
-+ * serverworks_osb4_filter - mode selection filter
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Filter the offered modes for the device to apply controller
-+ * specific rules. OSB4 requires no UDMA for disks due to a FIFO
-+ * bug we hit.
-+ */
-+
-+static unsigned int serverworks_osb4_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+ if (adev->class == ATA_DEV_ATA)
-+ return 0;
-+ return mask;
-+}
-+
-+
-+/**
-+ * serverworks_csb_filter - mode selection filter
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Check the blacklist and disable UDMA5 if matched
-+ */
-+
-+static unsigned int serverworks_csb_filter(const struct ata_port *ap, struct ata_device *adev, unsigned int mask, int shift)
-+{
-+ const char *p;
-+ char model_num[40];
-+ int len, i;
-+
-+ /* Disk, UDMA */
-+ if (shift != ATA_SHIFT_UDMA)
-+ return mask;
-+ if (adev->class != ATA_DEV_ATA)
-+ return mask;
-+
-+ /* Actually do need to check */
-+ ata_dev_id_string(adev->id, model_num, ATA_ID_PROD_OFS, sizeof(model_num));
-+ /* Precuationary - why not do this in the libata core ?? */
-+
-+ len = strlen(model_num);
-+ while ((len > 0) && (model_num[len - 1] == ' ')) {
-+ len--;
-+ model_num[len] = 0;
-+ }
-+
-+ for(i = 0; (p = csb_bad_ata100[i]) != NULL; i++) {
-+ if (!strncmp(p, model_num, len))
-+ return mask & 0x1F;
-+ }
-+ return mask;
-+}
-+
-+
-+/**
-+ * serverworks_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the OSB4/CSB5 timing registers for PIO. The PIO register
-+ * load is done as a simple lookup.
-+ */
-+static void serverworks_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u8 pio_mode[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 };
-+ int offset = 1 + 2 * ap->hard_port_no - adev->devno;
-+ int devbits = (2 * ap->hard_port_no + adev->devno) * 4;
-+ u16 csb5_pio;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int pio = adev->pio_mode - XFER_PIO_0;
-+
-+ pci_write_config_byte(pdev, 0x40 + offset, pio_mode[pio]);
-+
-+ /* The OSB4 just requires the timing but the CSB series want the
-+ mode number as well */
-+ if (serverworks_is_csb(pdev)) {
-+ pci_read_config_word(pdev, 0x4A, &csb5_pio);
-+ csb5_pio &= ~(0x0F << devbits);
-+ pci_write_config_byte(pdev, 0x4A, csb5_pio | (pio << devbits));
-+ }
-+}
-+
-+/**
-+ * serverworks_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the MWDMA/UDMA modes for the serverworks OSB4/CSB5
-+ * chipset. The MWDMA mode values are pulled from a lookup table
-+ * while the chipset uses mode number for UDMA.
-+ */
-+
-+static void serverworks_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u8 dma_mode[] = { 0x77, 0x21, 0x20 };
-+ int offset = 1 + 2 * ap->hard_port_no - adev->devno;
-+ int devbits = (2 * ap->hard_port_no + adev->devno);
-+ u8 ultra;
-+ u8 ultra_cfg;
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+
-+ pci_read_config_byte(pdev, 0x54, &ultra_cfg);
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ pci_write_config_byte(pdev, 0x44 + offset, 0x20);
-+
-+ pci_read_config_byte(pdev, 0x56 + ap->hard_port_no, &ultra);
-+ ultra &= ~(0x0F << (ap->hard_port_no * 4));
-+ ultra |= (adev->dma_mode - XFER_UDMA_0)
-+ << (ap->hard_port_no * 4);
-+ pci_write_config_byte(pdev, 0x56 + ap->hard_port_no, ultra);
-+
-+ ultra_cfg |= (1 << devbits);
-+ } else {
-+ pci_write_config_byte(pdev, 0x44 + offset,
-+ dma_mode[adev->dma_mode - XFER_MW_DMA_0]);
-+ ultra_cfg &= ~(1 << devbits);
-+ }
-+ pci_write_config_byte(pdev, 0x54, ultra_cfg);
-+}
-+
-+static struct scsi_host_template serverworks_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations serverworks_osb4_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = serverworks_set_piomode,
-+ .set_dmamode = serverworks_set_dmamode,
-+ .mode_filter = serverworks_osb4_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = serverworks_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations serverworks_csb_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = serverworks_set_piomode,
-+ .set_dmamode = serverworks_set_dmamode,
-+ .mode_filter = serverworks_csb_filter,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = serverworks_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int serverworks_fixup_osb4(struct pci_dev *pdev)
-+{
-+ u32 reg;
-+ struct pci_dev *isa_dev = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
-+ PCI_DEVICE_ID_SERVERWORKS_OSB4, NULL);
-+ if (isa_dev) {
-+ pci_read_config_dword(isa_dev, 0x64, &reg);
-+ reg &= ~0x00002000; /* disable 600ns interrupt mask */
-+ if (!(reg & 0x00004000))
-+ printk(KERN_DEBUG DRV_NAME ": UDMA not BIOS enabled.\n");
-+ reg |= 0x00004000; /* enable UDMA/33 support */
-+ pci_write_config_dword(isa_dev, 0x64, reg);
-+ pci_dev_put(isa_dev);
-+ return 0;
-+ }
-+ printk(KERN_WARNING "ata_serverworks: Unable to find bridge.\n");
-+ return -ENODEV;
-+}
-+
-+static int serverworks_fixup_csb(struct pci_dev *pdev)
-+{
-+ u8 rev;
-+ u8 btr;
-+
-+ pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);
-+
-+ /* Third Channel Test */
-+ if (!(PCI_FUNC(pdev->devfn) & 1)) {
-+ struct pci_dev * findev = NULL;
-+ u32 reg4c = 0;
-+ findev = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
-+ PCI_DEVICE_ID_SERVERWORKS_CSB5, NULL);
-+ if (findev) {
-+ pci_read_config_dword(findev, 0x4C, &reg4c);
-+ reg4c &= ~0x000007FF;
-+ reg4c |= 0x00000040;
-+ reg4c |= 0x00000020;
-+ pci_write_config_dword(findev, 0x4C, reg4c);
-+ pci_dev_put(findev);
-+ }
-+ } else {
-+ struct pci_dev * findev = NULL;
-+ u8 reg41 = 0;
-+
-+ findev = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
-+ PCI_DEVICE_ID_SERVERWORKS_CSB6, NULL);
-+ if (findev) {
-+ pci_read_config_byte(findev, 0x41, &reg41);
-+ reg41 &= ~0x40;
-+ pci_write_config_byte(findev, 0x41, reg41);
-+ pci_dev_put(findev);
-+ }
-+ }
-+ /* setup the UDMA Control register
-+ *
-+ * 1. clear bit 6 to enable DMA
-+ * 2. enable DMA modes with bits 0-1
-+ * 00 : legacy
-+ * 01 : udma2
-+ * 10 : udma2/udma4
-+ * 11 : udma2/udma4/udma5
-+ */
-+ pci_read_config_byte(pdev, 0x5A, &btr);
-+ btr &= ~0x40;
-+ if (!(PCI_FUNC(pdev->devfn) & 1))
-+ btr |= 0x2;
-+ else
-+ btr |= (rev >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2;
-+ pci_write_config_byte(pdev, 0x5A, btr);
-+
-+ return btr;
-+}
-+
-+static void serverworks_fixup_ht1000(struct pci_dev *pdev)
-+{
-+ u8 btr;
-+ /* Setup HT1000 SouthBridge Controller - Single Channel Only */
-+ pci_read_config_byte(pdev, 0x5A, &btr);
-+ btr &= ~0x40;
-+ btr |= 0x3;
-+ pci_write_config_byte(pdev, 0x5A, btr);
-+}
-+
-+
-+static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ int ports = 2;
-+ static struct ata_port_info info[4] = {
-+ { /* OSB4 */
-+ .sht = &serverworks_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x07,
-+ .port_ops = &serverworks_osb4_port_ops
-+ }, { /* OSB4 no UDMA */
-+ .sht = &serverworks_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x00,
-+ .port_ops = &serverworks_osb4_port_ops
-+ }, { /* CSB5 */
-+ .sht = &serverworks_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f,
-+ .port_ops = &serverworks_csb_port_ops
-+ }, { /* CSB5 - later revisions*/
-+ .sht = &serverworks_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &serverworks_csb_port_ops
-+ }
-+ };
-+ static struct ata_port_info *port_info[2];
-+ struct ata_port_info *devinfo = &info[id->driver_data];
-+
-+ /* Force master latency timer to 64 PCI clocks */
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x40);
-+
-+ /* OSB4 : South Bridge and IDE */
-+ if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) {
-+ /* Select non UDMA capable OSB4 if we can't do fixups */
-+ if ( serverworks_fixup_osb4(pdev) < 0)
-+ devinfo = &info[1];
-+ }
-+ /* setup CSB5/CSB6 : South Bridge and IDE option RAID */
-+ else if ((pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ||
-+ (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE) ||
-+ (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)) {
-+
-+ /* If the returned btr is the newer revision then
-+ select the right info block */
-+ if (serverworks_fixup_csb(pdev) == 3)
-+ devinfo = &info[3];
-+
-+ /* Is this the 3rd channel CSB6 IDE ? */
-+ if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)
-+ ports = 1;
-+ }
-+ /* setup HT1000E */
-+ else if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE)
-+ serverworks_fixup_ht1000(pdev);
-+
-+ if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE)
-+ ata_pci_clear_simplex(pdev);
-+
-+ port_info[0] = port_info[1] = devinfo;
-+ return ata_pci_init_one(pdev, port_info, ports);
-+}
-+
-+static struct pci_device_id serverworks[] = {
-+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
-+ { 0, },
-+};
-+
-+static struct pci_driver serverworks_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = serverworks,
-+ .probe = serverworks_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init serverworks_init(void)
-+{
-+ return pci_register_driver(&serverworks_pci_driver);
-+}
-+
-+
-+static void __exit serverworks_exit(void)
-+{
-+ pci_unregister_driver(&serverworks_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Serverworks OSB4/CSB5/CSB6");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, serverworks);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(serverworks_init);
-+module_exit(serverworks_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sil680.c linux-2.6.16-rc6/drivers/scsi/pata_sil680.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sil680.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_sil680.c 2006-03-01 16:24:18.000000000 +0000
-@@ -0,0 +1,377 @@
-+/*
-+ * pata_sil680.c - SIL680 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon
-+ *
-+ * linux/drivers/ide/pci/siimage.c Version 1.07 Nov 30, 2003
-+ *
-+ * Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org>
-+ * Copyright (C) 2003 Red Hat <alan@redhat.com>
-+ *
-+ * May be copied or modified under the terms of the GNU General Public License
-+ *
-+ * Documentation publically available.
-+ *
-+ * If you have strange problems with nVidia chipset systems please
-+ * see the SI support documentation and update your system BIOS
-+ * if neccessary
-+ *
-+ * TODO
-+ * If we know all our devices are LBA28 (or LBA28 sized) we could use
-+ * the command fifo mode.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_sil680"
-+#define DRV_VERSION "0.2.1"
-+
-+/**
-+ * sil680_selreg - return register base
-+ * @hwif: interface
-+ * @r: config offset
-+ *
-+ * Turn a config register offset into the right address in either
-+ * PCI space or MMIO space to access the control register in question
-+ * Thankfully this is a configuration operation so isnt performance
-+ * criticial.
-+ */
-+
-+static unsigned long sil680_selreg(struct ata_port *ap, int r)
-+{
-+ unsigned long base = 0xA0 + r;
-+ base += (ap->hard_port_no << 4);
-+ return base;
-+}
-+
-+/**
-+ * sil680_seldev - return register base
-+ * @hwif: interface
-+ * @r: config offset
-+ *
-+ * Turn a config register offset into the right address in either
-+ * PCI space or MMIO space to access the control register in question
-+ * including accounting for the unit shift.
-+ */
-+
-+static unsigned long sil680_seldev(struct ata_port *ap, struct ata_device *adev, int r)
-+{
-+ unsigned long base = 0xA0 + r;
-+ base += (ap->hard_port_no << 4);
-+ base |= adev->devno ? 2 : 0;
-+ return base;
-+}
-+
-+
-+/**
-+ * sil680_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection. The SIL680 stores this in PCI config
-+ * space for us.
-+ */
-+
-+static int sil680_cable_detect(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ unsigned long addr = sil680_selreg(ap, 0);
-+ u8 ata66;
-+ pci_read_config_byte(pdev, addr, &ata66);
-+ if (ata66 & 1)
-+ return ATA_CBL_PATA80;
-+ else
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * sil680_bus_reset - reset the SIL680 bus
-+ * @ap: ATA port to reset
-+ *
-+ * Perform the SIL680 housekeeping when doing an ATA bus reset
-+ */
-+
-+static void sil680_bus_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ unsigned long addr = sil680_selreg(ap, 0);
-+ u8 reset;
-+
-+ pci_read_config_byte(pdev, addr, &reset);
-+ pci_write_config_byte(pdev, addr, reset | 0x03);
-+ udelay(25);
-+ pci_write_config_byte(pdev, addr, reset);
-+ ata_bus_reset(ap);
-+}
-+
-+static void sil680_phy_reset(struct ata_port *ap)
-+{
-+ ap->cbl = sil680_cable_detect(ap);
-+ sil680_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * sil680_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the SIL680 registers for PIO mode. Note that the task speed
-+ * registers are shared between the devices so we must pick the lowest
-+ * mode for command work.
-+ */
-+
-+static void sil680_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u16 speed_p[5] = { 0x328A, 0x2283, 0x1104, 0x10C3, 0x10C1 };
-+ static u16 speed_t[5] = { 0x328A, 0x1281, 0x1281, 0x10C3, 0x10C1 };
-+
-+ unsigned long tfaddr = sil680_selreg(ap, 0x02);
-+ unsigned long addr = sil680_seldev(ap, adev, 0x04);
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int pio = adev->pio_mode - XFER_PIO_0;
-+ int lowest_pio = pio;
-+ u16 reg;
-+
-+ struct ata_device *pair = ata_dev_pair(ap, adev);
-+
-+ if (pair != NULL) {
-+ if (adev->pio_mode > pair->pio_mode)
-+ lowest_pio = pair->pio_mode - XFER_PIO_0;
-+ }
-+
-+ pci_write_config_word(pdev, addr, speed_p[pio]);
-+ pci_write_config_word(pdev, tfaddr, speed_t[lowest_pio]);
-+
-+ pci_read_config_word(pdev, tfaddr-2, &reg);
-+ reg &= ~0x0200; /* Clear IORDY */
-+ if (ata_pio_need_iordy(adev))
-+ reg |= 0x0200; /* Enable IORDY */
-+ pci_write_config_word(pdev, tfaddr-2, reg);
-+}
-+
-+/**
-+ * sil680_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Program the MWDMA/UDMA modes for the sil680 k
-+ * chipset. The MWDMA mode values are pulled from a lookup table
-+ * while the chipset uses mode number for UDMA.
-+ */
-+
-+static void sil680_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ static u8 ultra_table[2][7] = {
-+ { 0x0C, 0x07, 0x05, 0x04, 0x02, 0x01, 0xFF }, /* 100MHz */
-+ { 0x0F, 0x0B, 0x07, 0x05, 0x03, 0x02, 0x01 }, /* 133Mhz */
-+ };
-+ static u16 dma_table[3] = { 0x2208, 0x10C2, 0x10C1 };
-+
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ unsigned long ma = sil680_seldev(ap, adev, 0x08);
-+ unsigned long ua = sil680_seldev(ap, adev, 0x0C);
-+ unsigned long addr_mask = 0x80 + 4 * ap->hard_port_no;
-+ int port_shift = adev->devno * 4;
-+ u8 scsc, mode;
-+ u16 multi, ultra;
-+
-+ pci_read_config_byte(pdev, 0x8A, &scsc);
-+ pci_read_config_byte(pdev, addr_mask, &mode);
-+ pci_read_config_word(pdev, ma, &multi);
-+ pci_read_config_word(pdev, ua, &ultra);
-+
-+ /* Mask timing bits */
-+ ultra &= ~0x3F;
-+ mode &= ~(0x03 << port_shift);
-+
-+ /* Extract scsc */
-+ scsc = (scsc & 0x30) ? 1: 0;
-+
-+ if (adev->dma_mode >= XFER_UDMA_0) {
-+ multi = 0x10C1;
-+ ultra |= ultra_table[scsc][adev->dma_mode - XFER_UDMA_0];
-+ mode |= (0x03 << port_shift);
-+ } else {
-+ multi = dma_table[adev->dma_mode - XFER_MW_DMA_0];
-+ mode |= (0x02 << port_shift);
-+ }
-+ pci_write_config_byte(pdev, addr_mask, mode);
-+ pci_write_config_word(pdev, ma, multi);
-+ pci_write_config_word(pdev, ua, ultra);
-+}
-+
-+static struct scsi_host_template sil680_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations sil680_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sil680_set_piomode,
-+ .set_dmamode = sil680_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sil680_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int sil680_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &sil680_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f,
-+ .port_ops = &sil680_port_ops
-+ };
-+ static struct ata_port_info info_slow = {
-+ .sht = &sil680_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &sil680_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = {&info, &info};
-+ static int printed_version;
-+ u32 class_rev = 0;
-+ u8 tmpbyte = 0;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
-+
-+ pci_read_config_dword(pdev, PCI_CLASS_REVISION, &class_rev);
-+ class_rev &= 0xff;
-+ /* FIXME: double check */
-+ pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, (class_rev) ? 1 : 255);
-+
-+ pci_write_config_byte(pdev, 0x80, 0x00);
-+ pci_write_config_byte(pdev, 0x84, 0x00);
-+
-+ pci_read_config_byte(pdev, 0x8A, &tmpbyte);
-+
-+ printk(KERN_INFO "sil680: BA5_EN = %d clock = %02X\n",
-+ tmpbyte & 1, tmpbyte & 0x30);
-+
-+ switch(tmpbyte & 0x30) {
-+ case 0x00:
-+ /* 133 clock attempt to force it on */
-+ pci_write_config_byte(pdev, 0x8A, tmpbyte|0x10);
-+ break;
-+ case 0x30:
-+ /* if clocking is disabled */
-+ /* 133 clock attempt to force it on */
-+ pci_write_config_byte(pdev, 0x8A, tmpbyte & ~0x20);
-+ break;
-+ case 0x10:
-+ /* 133 already */
-+ break;
-+ case 0x20:
-+ /* BIOS set PCI x2 clocking */
-+ break;
-+ }
-+
-+ pci_read_config_byte(pdev, 0x8A, &tmpbyte);
-+ printk(KERN_INFO "sil680: BA5_EN = %d clock = %02X\n",
-+ tmpbyte & 1, tmpbyte & 0x30);
-+ if ((tmpbyte & 0x30) == 0)
-+ port_info[0] = port_info[1] = &info_slow;
-+
-+ pci_write_config_byte(pdev, 0xA1, 0x72);
-+ pci_write_config_word(pdev, 0xA2, 0x328A);
-+ pci_write_config_dword(pdev, 0xA4, 0x62DD62DD);
-+ pci_write_config_dword(pdev, 0xA8, 0x43924392);
-+ pci_write_config_dword(pdev, 0xAC, 0x40094009);
-+ pci_write_config_byte(pdev, 0xB1, 0x72);
-+ pci_write_config_word(pdev, 0xB2, 0x328A);
-+ pci_write_config_dword(pdev, 0xB4, 0x62DD62DD);
-+ pci_write_config_dword(pdev, 0xB8, 0x43924392);
-+ pci_write_config_dword(pdev, 0xBC, 0x40094009);
-+
-+ switch(tmpbyte & 0x30) {
-+ case 0x00: printk(KERN_INFO "sil680: 100MHz clock.\n");break;
-+ case 0x10: printk(KERN_INFO "sil680: 133MHz clock.\n");break;
-+ case 0x20: printk(KERN_INFO "sil680: Using PCI clock.\n");break;
-+ /* This last case is _NOT_ ok */
-+ case 0x30: printk(KERN_ERR "sil680: Clock disabled ?\n");
-+ return -EIO;
-+ }
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id sil680[] = {
-+ { PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680), },
-+ { 0, },
-+};
-+
-+static struct pci_driver sil680_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = sil680,
-+ .probe = sil680_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init sil680_init(void)
-+{
-+ return pci_register_driver(&sil680_pci_driver);
-+}
-+
-+
-+static void __exit sil680_exit(void)
-+{
-+ pci_unregister_driver(&sil680_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for SI680 PATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, sil680);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(sil680_init);
-+module_exit(sil680_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sis.c linux-2.6.16-rc6/drivers/scsi/pata_sis.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sis.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_sis.c 2006-02-28 16:51:31.000000000 +0000
-@@ -0,0 +1,982 @@
-+/*
-+ * pata_sis.c - SiS ATA driver
-+ *
-+ * (C) 2005 Red Hat <alan@redhat.com>
-+ *
-+ * Based upon linux/drivers/ide/pci/sis5513.c
-+ * Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org>
-+ * Copyright (C) 2002 Lionel Bouton <Lionel.Bouton@inet6.fr>, Maintainer
-+ * Copyright (C) 2003 Vojtech Pavlik <vojtech@suse.cz>
-+ * SiS Taiwan : for direct support and hardware.
-+ * Daniela Engert : for initial ATA100 advices and numerous others.
-+ * John Fremlin, Manfred Spraul, Dave Morgan, Peter Kjellerstedt :
-+ * for checking code correctness, providing patches.
-+ * Original tests and design on the SiS620 chipset.
-+ * ATA100 tests and design on the SiS735 chipset.
-+ * ATA16/33 support from specs
-+ * ATA133 support for SiS961/962 by L.C. Chang <lcchang@sis.com.tw>
-+ *
-+ *
-+ * TODO
-+ * Check MWDMA on drives that don't support MWDMA speed pio cycles ?
-+ * More Testing
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+#include <linux/ata.h>
-+
-+#define DRV_NAME "pata_sis"
-+#define DRV_VERSION "0.2"
-+
-+struct sis_chipset {
-+ u16 device; /* PCI host ID */
-+ struct ata_port_info *info; /* Info block */
-+ /* Probably add family, cable detect type etc here to clean
-+ up code later */
-+};
-+
-+/**
-+ * sis_133_cable_detect - check for 40/80 pin
-+ * @ap: Port
-+ *
-+ * Perform cable detection for the later UDMA133 capable
-+ * SiS chipset.
-+ */
-+
-+static int sis_133_cable_detect(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u16 tmp;
-+
-+ pci_read_config_word(pdev, 0x50 + 2 * ap->hard_port_no, &tmp);
-+ if (tmp & 0x8000)
-+ return ATA_CBL_PATA40;
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * sis_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_133_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits sis_enable_bits[] = {
-+ { 0x4aU, 1U, 0x02UL, 0x02UL }, /* port 0 */
-+ { 0x4aU, 1U, 0x04UL, 0x04UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = sis_133_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+
-+/**
-+ * sis_66_cable_detect - check for 40/80 pin
-+ * @ap: Port
-+ *
-+ * Perform cable detection on the UDMA66, UDMA100 and early UDMA133
-+ * SiS IDE controllers.
-+ */
-+
-+static int sis_66_cable_detect(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 tmp;
-+
-+ pci_read_config_byte(pdev, 0x48, &tmp);
-+ tmp >>= ap->hard_port_no;
-+ if (tmp & 0x10)
-+ return ATA_CBL_PATA40;
-+ return ATA_CBL_PATA80;
-+}
-+
-+/**
-+ * sis_66_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_66_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits sis_enable_bits[] = {
-+ { 0x4aU, 1U, 0x02UL, 0x02UL }, /* port 0 */
-+ { 0x4aU, 1U, 0x04UL, 0x04UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = sis_66_cable_detect(ap);
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+
-+/**
-+ * sis_old_phy_reset - Probe specified port on PATA host controller
-+ * @ap: Port to probe
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_old_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits sis_enable_bits[] = {
-+ { 0x4aU, 1U, 0x02UL, 0x02UL }, /* port 0 */
-+ { 0x4aU, 1U, 0x04UL, 0x04UL }, /* port 1 */
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &sis_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * sis_set_fifo - Set RWP fifo bits for this device
-+ * @ap: Port
-+ * @adev: Device
-+ *
-+ * SIS chipsets implement prefetch/postwrite bits for each device
-+ * on both channels. This functionality is not ATAPI compatible and
-+ * must be configured according to the class of device present
-+ */
-+
-+static void sis_set_fifo(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u8 reg4b;
-+ u8 mask = 0x11;
-+
-+ mask <<= (2 * ap->hard_port_no);
-+ mask <<= adev->devno;
-+
-+ pci_read_config_byte(pdev, 0x4B, &reg4b);
-+ reg4b &= ~mask;
-+
-+ /* Enable for ATA (disk) only */
-+ if (adev->class == ATA_DEV_ATA)
-+ reg4b |= mask;
-+ pci_write_config_byte(pdev, 0x4B, reg4b);
-+}
-+
-+/**
-+ * sis_old_set_piomode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring for.
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. This
-+ * function handles PIO set up for all chips that are pre ATA100 and
-+ * also early ATA100 devices.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_old_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ u8 t1, t2;
-+ int speed = adev->pio_mode - XFER_PIO_0;
-+
-+ const u8 active[] = { 0x00, 0x07, 0x04, 0x03, 0x01 };
-+ const u8 recovery[] = { 0x00, 0x06, 0x04, 0x03, 0x03 };
-+
-+ sis_set_fifo(ap, adev);
-+
-+ pci_read_config_byte(pdev, port, &t1);
-+ pci_read_config_byte(pdev, port + 1, &t2);
-+
-+ t1 &= ~0x0F; /* Clear active/recovery timings */
-+ t2 &= ~0x07;
-+
-+ t1 |= active[speed];
-+ t2 |= recovery[speed];
-+
-+ pci_write_config_byte(pdev, port, t1);
-+ pci_write_config_byte(pdev, port + 1, t2);
-+}
-+
-+/**
-+ * sis_100_set_pioode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring for.
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. This
-+ * function handles PIO set up for ATA100 devices and early ATA133.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_100_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ int speed = adev->pio_mode - XFER_PIO_0;
-+
-+ const u8 actrec[] = { 0x00, 0x67, 0x44, 0x33, 0x31 };
-+
-+ sis_set_fifo(ap, adev);
-+
-+ pci_write_config_byte(pdev, port, actrec[speed]);
-+}
-+
-+/**
-+ * sis_133_set_pioode - Initialize host controller PATA PIO timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device we are configuring for.
-+ *
-+ * Set PIO mode for device, in host controller PCI config space. This
-+ * function handles PIO set up for the later ATA133 devices.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_133_set_piomode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int port = 0x40;
-+ u32 t1;
-+ u32 reg54;
-+ int speed = adev->pio_mode - XFER_PIO_0;
-+
-+ const u32 timing133[] = {
-+ 0x28269000, /* Recovery << 24 | Act << 16 | Ini << 12 */
-+ 0x0C266000,
-+ 0x04263000,
-+ 0x0C0A3000,
-+ 0x05093000
-+ };
-+ const u32 timing100[] = {
-+ 0x1E1C6000, /* Recovery << 24 | Act << 16 | Ini << 12 */
-+ 0x091C4000,
-+ 0x031C2000,
-+ 0x09072000,
-+ 0x04062000
-+ };
-+
-+ sis_set_fifo(ap, adev);
-+
-+ pci_read_config_dword(pdev, 0x54, &reg54);
-+ if (reg54 & 0x40000000)
-+ port = 0x70;
-+ port += 8 * ap->hard_port_no + 4 * adev->devno;
-+
-+ pci_read_config_dword(pdev, port, &t1);
-+ t1 &= 0xC0C00FFF; /* Mask out timing */
-+
-+ if (t1 & 0x08) /* 100 or 133 ? */
-+ t1 |= timing133[speed];
-+ else
-+ t1 |= timing100[speed];
-+ pci_write_config_byte(pdev, port, t1);
-+}
-+
-+/**
-+ * sis_old_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ * Handles pre UDMA and UDMA33 devices. Supports MWDMA as well unlike
-+ * the old ide/pci driver.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_old_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ int drive_pci = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ u16 timing;
-+
-+ const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
-+ const u16 udma_bits[] = {
-+ 0xE000, 0xC000, 0xA000
-+ };
-+
-+ pci_read_config_word(pdev, drive_pci, &timing);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ /* bits 3-0 hold recovery timing bits 8-10 active timing and
-+ the higer bits are dependant on the device */
-+ timing &= ~ 0x870F;
-+ timing |= mwdma_bits[speed];
-+ pci_write_config_word(pdev, drive_pci, timing);
-+ } else {
-+ /* Bit 15 is UDMA on/off, bit 13-14 are cycle time */
-+ speed = adev->dma_mode - XFER_UDMA_0;
-+ timing &= ~0x6000;
-+ timing |= udma_bits[speed];
-+ }
-+}
-+
-+/**
-+ * sis_66_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ * Handles UDMA66 and early UDMA100 devices. Supports MWDMA as well unlike
-+ * the old ide/pci driver.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_66_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ int drive_pci = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ u16 timing;
-+
-+ const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
-+ const u16 udma_bits[] = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
-+
-+ pci_read_config_word(pdev, drive_pci, &timing);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ /* bits 3-0 hold recovery timing bits 8-10 active timing and
-+ the higer bits are dependant on the device, bit 15 udma */
-+ timing &= ~ 0x870F;
-+ timing |= mwdma_bits[speed];
-+ } else {
-+ /* Bit 15 is UDMA on/off, bit 12-14 are cycle time */
-+ speed = adev->dma_mode - XFER_UDMA_0;
-+ timing &= ~0x6000;
-+ timing |= udma_bits[speed];
-+ }
-+ pci_write_config_word(pdev, drive_pci, timing);
-+}
-+
-+/**
-+ * sis_100_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ * Handles UDMA66 and early UDMA100 devices.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_100_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ int drive_pci = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ u16 timing;
-+
-+ const u16 udma_bits[] = { 0x8B00, 0x8700, 0x8500, 0x8300, 0x8200, 0x8100};
-+
-+ pci_read_config_word(pdev, drive_pci, &timing);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ /* NOT SUPPORTED YET: NEED DATA SHEET. DITTO IN OLD DRIVER */
-+ } else {
-+ /* Bit 15 is UDMA on/off, bit 12-14 are cycle time */
-+ speed = adev->dma_mode - XFER_UDMA_0;
-+ timing &= ~0x0F00;
-+ timing |= udma_bits[speed];
-+ }
-+ pci_write_config_word(pdev, drive_pci, timing);
-+}
-+
-+/**
-+ * sis_133_early_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ * Handles early SiS 961 bridges. Supports MWDMA as well unlike
-+ * the old ide/pci driver.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_133_early_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ int drive_pci = 0x40 + 4 * ap->hard_port_no + 2 * adev->devno;
-+ u16 timing;
-+
-+ const u16 udma_bits[] = { 0x8F00, 0x8A00, 0x8700, 0x8500, 0x8300, 0x8200, 0x8100};
-+
-+ pci_read_config_word(pdev, drive_pci, &timing);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ /* NOT SUPPORTED YET: NEED DATA SHEET. DITTO IN OLD DRIVER */
-+ } else {
-+ /* Bit 15 is UDMA on/off, bit 12-14 are cycle time */
-+ speed = adev->dma_mode - XFER_UDMA_0;
-+ timing &= ~0x0F00;
-+ timing |= udma_bits[speed];
-+ }
-+ pci_write_config_word(pdev, drive_pci, timing);
-+}
-+
-+/**
-+ * sis_133_set_dmamode - Initialize host controller PATA DMA timings
-+ * @ap: Port whose timings we are configuring
-+ * @adev: Device to program
-+ *
-+ * Set UDMA/MWDMA mode for device, in host controller PCI config space.
-+ * Handles early SiS 961 bridges. Supports MWDMA as well unlike
-+ * the old ide/pci driver.
-+ *
-+ * LOCKING:
-+ * None (inherited from caller).
-+ */
-+
-+static void sis_133_set_dmamode (struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ int speed = adev->dma_mode - XFER_MW_DMA_0;
-+ int port = 0x40;
-+ u32 t1;
-+ u32 reg54;
-+
-+ /* bits 4- cycle time 8 - cvs time */
-+ const u32 timing_u100[] = { 0x6B0, 0x470, 0x350, 0x140, 0x120, 0x110, 0x000 };
-+ const u32 timing_u133[] = { 0x9F0, 0x6A0, 0x470, 0x250, 0x230, 0x220, 0x210 };
-+
-+ pci_read_config_dword(pdev, 0x54, &reg54);
-+ if (reg54 & 0x40000000)
-+ port = 0x70;
-+ port += 8 * ap->hard_port_no + 4 * adev->devno;
-+
-+ pci_read_config_dword(pdev, port, &t1);
-+
-+ if (adev->dma_mode < XFER_UDMA_0) {
-+ t1 &= ~0x00000004;
-+ /* FIXME: need data sheet to add MWDMA here. Also lacking on
-+ ide/pci driver */
-+ } else {
-+ speed = adev->dma_mode - XFER_UDMA_0;
-+ /* if & 8 no UDMA133 - need info for ... */
-+ t1 &= ~0x00000FF0;
-+ t1 |= 0x00000004;
-+ if (t1 & 0x08)
-+ t1 |= timing_u133[speed];
-+ else
-+ t1 |= timing_u100[speed];
-+ }
-+ pci_write_config_dword(pdev, port, t1);
-+}
-+
-+static struct scsi_host_template sis_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static const struct ata_port_operations sis_133_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sis_133_set_piomode,
-+ .set_dmamode = sis_133_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sis_133_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations sis_133_early_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sis_100_set_piomode,
-+ .set_dmamode = sis_133_early_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sis_66_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations sis_100_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sis_100_set_piomode,
-+ .set_dmamode = sis_100_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sis_66_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations sis_66_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sis_old_set_piomode,
-+ .set_dmamode = sis_66_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sis_66_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static const struct ata_port_operations sis_old_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sis_old_set_piomode,
-+ .set_dmamode = sis_old_set_dmamode,
-+
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sis_old_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .eng_timeout = ata_eng_timeout,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop,
-+};
-+
-+static struct ata_port_info sis_info = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0,
-+ .port_ops = &sis_old_ops,
-+};
-+static struct ata_port_info sis_info33 = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .mwdma_mask = 0x07,
-+ .udma_mask = ATA_UDMA2, /* UDMA 33 */
-+ .port_ops = &sis_old_ops,
-+};
-+static struct ata_port_info sis_info66 = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .udma_mask = ATA_UDMA4, /* UDMA 66 */
-+ .port_ops = &sis_66_ops,
-+};
-+static struct ata_port_info sis_info100 = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .udma_mask = ATA_UDMA5,
-+ .port_ops = &sis_100_ops,
-+};
-+static struct ata_port_info sis_info100_early = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .udma_mask = ATA_UDMA5,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .port_ops = &sis_66_ops,
-+};
-+static struct ata_port_info sis_info133 = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .udma_mask = ATA_UDMA6,
-+ .port_ops = &sis_133_ops,
-+};
-+static struct ata_port_info sis_info133_early = {
-+ .sht = &sis_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f, /* pio0-4 */
-+ .udma_mask = ATA_UDMA6,
-+ .port_ops = &sis_133_early_ops,
-+};
-+
-+
-+static void sis_fixup(struct pci_dev *pdev, struct sis_chipset *sis)
-+{
-+ u16 regw;
-+ u8 reg;
-+
-+ if (sis->info == &sis_info133) {
-+ pci_read_config_word(pdev, 0x50, &regw);
-+ if (regw & 0x08)
-+ pci_write_config_word(pdev, 0x50, regw & ~0x08);
-+ pci_read_config_word(pdev, 0x52, &regw);
-+ if (regw & 0x08)
-+ pci_write_config_word(pdev, 0x52, regw & ~0x08);
-+ return;
-+ }
-+
-+ if (sis->info == &sis_info133_early || sis->info == &sis_info100) {
-+ /* Fix up latency */
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);
-+ /* Set compatibility bit */
-+ pci_read_config_byte(pdev, 0x49, &reg);
-+ if (!(reg & 0x01))
-+ pci_write_config_byte(pdev, 0x49, reg | 0x01);
-+ return;
-+ }
-+
-+ if (sis->info == &sis_info66 || sis->info == &sis_info100_early) {
-+ /* Fix up latency */
-+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80);
-+ /* Set compatibility bit */
-+ pci_read_config_byte(pdev, 0x52, &reg);
-+ if (!(reg & 0x04))
-+ pci_write_config_byte(pdev, 0x52, reg | 0x04);
-+ return;
-+ }
-+
-+ if (sis->info == &sis_info33) {
-+ pci_read_config_byte(pdev, PCI_CLASS_PROG, &reg);
-+ if (( reg & 0x0F ) != 0x00)
-+ pci_write_config_byte(pdev, PCI_CLASS_PROG, reg & 0xF0);
-+ /* Fall through to ATA16 fixup below */
-+ }
-+
-+ if (sis->info == &sis_info || sis->info == &sis_info33) {
-+ /* force per drive recovery and active timings
-+ needed on ATA_33 and below chips */
-+ pci_read_config_byte(pdev, 0x52, &reg);
-+ if (!(reg & 0x08))
-+ pci_write_config_byte(pdev, 0x52, reg|0x08);
-+ return;
-+ }
-+
-+ BUG();
-+}
-+
-+/**
-+ * sis_init_one - Register SiS ATA PCI device with kernel services
-+ * @pdev: PCI device to register
-+ * @ent: Entry in sis_pci_tbl matching with @pdev
-+ *
-+ * Called from kernel PCI layer. We probe for combined mode (sigh),
-+ * and then hand over control to libata, for it to do the rest.
-+ *
-+ * LOCKING:
-+ * Inherited from PCI layer (may sleep).
-+ *
-+ * RETURNS:
-+ * Zero on success, or -ERRNO value.
-+ */
-+
-+static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
-+{
-+ static int printed_version;
-+ static struct ata_port_info *port_info[2];
-+ struct ata_port_info *port;
-+ struct pci_dev *host;
-+ struct sis_chipset *chipset = NULL;
-+
-+ static struct sis_chipset sis_chipsets[] = {
-+ { 0x0745, &sis_info100 },
-+ { 0x0735, &sis_info100 },
-+ { 0x0733, &sis_info100 },
-+ { 0x0635, &sis_info100 },
-+ { 0x0633, &sis_info100 },
-+
-+ { 0x0730, &sis_info100_early }, /* 100 with ATA 66 layout */
-+ { 0x0550, &sis_info100_early }, /* 100 with ATA 66 layout */
-+
-+ { 0x0640, &sis_info66 },
-+ { 0x0630, &sis_info66 },
-+ { 0x0620, &sis_info66 },
-+ { 0x0540, &sis_info66 },
-+ { 0x0530, &sis_info66 },
-+
-+ { 0x5600, &sis_info33 },
-+ { 0x5598, &sis_info33 },
-+ { 0x5597, &sis_info33 },
-+ { 0x5591, &sis_info33 },
-+ { 0x5582, &sis_info33 },
-+ { 0x5581, &sis_info33 },
-+
-+ { 0x5596, &sis_info },
-+ { 0x5571, &sis_info },
-+ { 0x5517, &sis_info },
-+ { 0x5511, &sis_info },
-+
-+ {0}
-+ };
-+ static struct sis_chipset sis133_early = {
-+ 0x0, &sis_info133_early
-+ };
-+ static struct sis_chipset sis133 = {
-+ 0x0, &sis_info133
-+ };
-+ static struct sis_chipset sis100_early = {
-+ 0x0, &sis_info100_early
-+ };
-+ static struct sis_chipset sis100 = {
-+ 0x0, &sis_info100
-+ };
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev,
-+ "version " DRV_VERSION "\n");
-+
-+ /* We have to find the bridge first */
-+
-+ for (chipset = &sis_chipsets[0]; chipset->device; chipset++) {
-+ host = pci_get_device(0x1039, chipset->device, NULL);
-+ if (host != NULL) {
-+ if (chipset->device == 0x630) { /* SIS630 */
-+ u8 host_rev;
-+ pci_read_config_byte(host, PCI_REVISION_ID, &host_rev);
-+ if (host_rev >= 0x30) /* 630 ET */
-+ chipset = &sis100_early;
-+ }
-+ break;
-+ }
-+ }
-+
-+ /* Look for concealed bridges */
-+ if (host == NULL) {
-+ /* Second check */
-+ u32 idemisc;
-+ u16 trueid;
-+
-+ /* Disable ID masking and register remapping then
-+ see what the real ID is */
-+
-+ pci_read_config_dword(pdev, 0x54, &idemisc);
-+ pci_write_config_dword(pdev, 0x54, idemisc & 0x7fffffff);
-+ pci_read_config_word(pdev, PCI_DEVICE_ID, &trueid);
-+ pci_write_config_dword(pdev, 0x54, idemisc);
-+
-+ switch(trueid) {
-+ case 0x5518: /* SIS 962/963 */
-+ chipset = &sis133;
-+ if ((idemisc & 0x40000000) == 0) {
-+ pci_write_config_dword(pdev, 0x54, idemisc | 0x40000000);
-+ printk(KERN_INFO "SIS5513: Switching to 5513 register mapping\n");
-+ }
-+ break;
-+ case 0x0180: /* SIS 965/965L */
-+ chipset = &sis133;
-+ break;
-+ case 0x1180: /* SIS 966/966L */
-+ chipset = &sis133;
-+ break;
-+ }
-+ }
-+
-+ /* Further check */
-+ if (chipset == NULL) {
-+ struct pci_dev *lpc_bridge;
-+ u16 trueid;
-+ u8 prefctl;
-+ u8 idecfg;
-+ u8 sbrev;
-+
-+ /* Try the second unmasking technique */
-+ pci_read_config_byte(pdev, 0x4a, &idecfg);
-+ pci_write_config_byte(pdev, 0x4a, idecfg | 0x10);
-+ pci_read_config_word(pdev, PCI_DEVICE_ID, &trueid);
-+ pci_write_config_byte(pdev, 0x4a, idecfg);
-+
-+ switch(trueid) {
-+ case 0x5517:
-+ lpc_bridge = pci_get_slot(0x00, 0x10); /* Bus 0 Dev 2 Fn 0 */
-+ if (lpc_bridge == NULL)
-+ break;
-+ pci_read_config_byte(lpc_bridge, PCI_REVISION_ID, &sbrev);
-+ pci_read_config_byte(pdev, 0x49, &prefctl);
-+ pci_dev_put(lpc_bridge);
-+
-+ if (sbrev == 0x10 && (prefctl & 0x80)) {
-+ chipset = &sis133_early;
-+ break;
-+ }
-+ chipset = &sis100;
-+ break;
-+ }
-+ }
-+ pci_dev_put(host);
-+
-+ /* No chipset info, no support */
-+ if (chipset == NULL)
-+ return -ENODEV;
-+
-+ port = chipset->info;
-+ port->private_data = chipset;
-+
-+ sis_fixup(pdev, chipset);
-+
-+ port_info[0] = port_info[1] = port;
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id sis_pci_tbl[] = {
-+ { 0x1039, 0x5513, PCI_ANY_ID, PCI_ANY_ID, },
-+ { 0x1039, 0x5518, PCI_ANY_ID, PCI_ANY_ID, },
-+ { } /* terminate list */
-+};
-+
-+static struct pci_driver sis_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = sis_pci_tbl,
-+ .probe = sis_init_one,
-+ .remove = ata_pci_remove_one,
-+};
-+
-+static int __init sis_init(void)
-+{
-+ return pci_register_driver(&sis_pci_driver);
-+}
-+
-+static void __exit sis_exit(void)
-+{
-+ pci_unregister_driver(&sis_pci_driver);
-+}
-+
-+
-+module_init(sis_init);
-+module_exit(sis_exit);
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("SCSI low-level driver for SiS ATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, sis_pci_tbl);
-+MODULE_VERSION(DRV_VERSION);
-+
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sl82c105.c linux-2.6.16-rc6/drivers/scsi/pata_sl82c105.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_sl82c105.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_sl82c105.c 2006-02-16 15:36:32.000000000 +0000
-@@ -0,0 +1,376 @@
-+/*
-+ * pata_sl82c105.c - SL82C105 PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Based in part on linux/drivers/ide/pci/sl82c105.c
-+ * SL82C105/Winbond 553 IDE driver
-+ *
-+ * and in part on the documentation and errata sheet
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_sl82c105"
-+#define DRV_VERSION "0.1.1"
-+
-+enum {
-+ /*
-+ * SL82C105 PCI config register 0x40 bits.
-+ */
-+ CTRL_IDE_IRQB = (1 << 30),
-+ CTRL_IDE_IRQA = (1 << 28),
-+ CTRL_LEGIRQ = (1 << 11),
-+ CTRL_P1F16 = (1 << 5),
-+ CTRL_P1EN = (1 << 4),
-+ CTRL_P0F16 = (1 << 1),
-+ CTRL_P0EN = (1 << 0)
-+};
-+
-+static void sl82c105_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits sl82c105_enable_bits[] = {
-+ { 0x40, 1, 0x01, 0x01 },
-+ { 0x40, 1, 0x10, 0x10 }
-+ };
-+
-+ if (ap->hard_port_no && !pci_test_config_bits(pdev, &sl82c105_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ dev_printk(KERN_INFO, &pdev->dev, "port disabled. ignoring.\n");
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+
-+/**
-+ * sl82c105_configure_piomode - set chip PIO timing
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ * @pio: PIO mode
-+ *
-+ * Called to do the PIO mode setup. Our timing registers are shared
-+ * so a configure_dmamode call will undo any work we do here and vice
-+ * versa
-+ */
-+
-+static void sl82c105_configure_piomode(struct ata_port *ap, struct ata_device *adev, int pio)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static u16 pio_timing[5] = {
-+ 0x50D, 0x407, 0x304, 0x242, 0x240
-+ };
-+ u16 dummy;
-+ int timing = 0x44 + 8 * ap->hard_port_no + 4 * adev->devno;
-+
-+ pci_write_config_word(pdev, timing, pio_timing[pio]);
-+ /* Can we lose this oddity of the old driver */
-+ pci_read_config_word(pdev, timing, &dummy);
-+}
-+
-+/**
-+ * sl82c105_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the PIO mode setup. Our timing registers are shared
-+ * but we want to set the PIO timing by default.
-+ */
-+
-+static void sl82c105_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ sl82c105_configure_piomode(ap, adev, adev->pio_mode - XFER_PIO_0);
-+}
-+
-+/**
-+ * sl82c105_configure_dmamode - set DMA mode in chip
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Load DMA cycle times into the chip ready for a DMA transfer
-+ * to occur.
-+ */
-+
-+static void sl82c105_configure_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static u16 dma_timing[3] = {
-+ 0x707, 0x201, 0x200
-+ };
-+ u16 dummy;
-+ int timing = 0x44 + 8 * ap->hard_port_no + 4 * adev->devno;
-+ int dma = adev->dma_mode - XFER_MW_DMA_0;
-+
-+ pci_write_config_word(pdev, timing, dma_timing[dma]);
-+ /* Can we lose this oddity of the old driver */
-+ pci_read_config_word(pdev, timing, &dummy);
-+}
-+
-+/**
-+ * sl82c105_set_dmamode - set initial DMA mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Called to do the DMA mode setup. This replaces the PIO timings
-+ * for the device in question. Set appropriate PIO timings not DMA
-+ * timings at this point.
-+ */
-+
-+static void sl82c105_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ switch(adev->dma_mode) {
-+ case XFER_MW_DMA_0:
-+ sl82c105_configure_piomode(ap, adev, 1);
-+ break;
-+ case XFER_MW_DMA_1:
-+ sl82c105_configure_piomode(ap, adev, 3);
-+ break;
-+ case XFER_MW_DMA_2:
-+ sl82c105_configure_piomode(ap, adev, 3);
-+ break;
-+ default:
-+ BUG();
-+ }
-+}
-+
-+/**
-+ * sl82c105_reset_engine - Reset the DMA engine
-+ * @ap: ATA interface
-+ *
-+ * The sl82c105 has some serious problems with the DMA engine
-+ * when transfers don't run as expected or ATAPI is used. The
-+ * recommended fix is to reset the engine each use using a chip
-+ * test register.
-+ */
-+
-+static void sl82c105_reset_engine(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u16 val;
-+
-+ pci_read_config_word(pdev, 0x7E, &val);
-+ pci_write_config_word(pdev, 0x7E, val | 4);
-+ pci_write_config_word(pdev, 0x7E, val & ~4);
-+}
-+
-+/**
-+ * sl82c105_bmdma_start - DMA engine begin
-+ * @qc: ATA command
-+ *
-+ * Reset the DMA engine each use as recommended by the errata
-+ * document.
-+ *
-+ * FIXME: if we switch clock at BMDMA start/end we might get better
-+ * PIO performance on DMA capable devices.
-+ */
-+
-+static void sl82c105_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+
-+ sl82c105_reset_engine(ap);
-+
-+ /* Set the clocks for DMA */
-+ sl82c105_configure_dmamode(ap, qc->dev);
-+ /* Activate DMA */
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * sl82c105_bmdma_end - DMA engine stop
-+ * @qc: ATA command
-+ *
-+ * Reset the DMA engine each use as recommended by the errata
-+ * document.
-+ *
-+ * This function is also called to turn off DMA when a timeout occurs
-+ * during DMA operation. In both cases we need to reset the engine,
-+ * so no actual eng_timeout handler is required.
-+ *
-+ * We assume bmdma_stop is always called if bmdma_start as called. If
-+ * not then we may need to wrap qc_issue.
-+ */
-+
-+static void sl82c105_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ struct ata_port *ap = qc->ap;
-+
-+ ata_bmdma_stop(qc);
-+ sl82c105_reset_engine(ap);
-+
-+ /* This will redo the initial setup of the DMA device to matching
-+ PIO timings */
-+ sl82c105_set_dmamode(ap, qc->dev);
-+}
-+
-+static struct scsi_host_template sl82c105_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations sl82c105_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = sl82c105_set_piomode,
-+ .set_dmamode = sl82c105_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = sl82c105_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = sl82c105_bmdma_start,
-+ .bmdma_stop = sl82c105_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * sl82c105_bridge_revision - find bridge version
-+ * @pdev: PCI device for the ATA function
-+ *
-+ * Locates the PCI bridge associated with the ATA function and
-+ * providing it is a Winbond 553 reports the revision. If it cannot
-+ * find a revision or the right device it returns -1
-+ */
-+
-+static int sl82c105_bridge_revision(struct pci_dev *pdev)
-+{
-+ struct pci_dev *bridge;
-+ u8 rev;
-+
-+ /*
-+ * The bridge should be part of the same device, but function 0.
-+ */
-+ bridge = pci_get_slot(pdev->bus,
-+ PCI_DEVFN(PCI_SLOT(pdev->devfn), 0));
-+ if (!bridge)
-+ return -1;
-+
-+ /*
-+ * Make sure it is a Winbond 553 and is an ISA bridge.
-+ */
-+ if (bridge->vendor != PCI_VENDOR_ID_WINBOND ||
-+ bridge->device != PCI_DEVICE_ID_WINBOND_83C553 ||
-+ bridge->class >> 8 != PCI_CLASS_BRIDGE_ISA) {
-+ pci_dev_put(bridge);
-+ return -1;
-+ }
-+ /*
-+ * We need to find function 0's revision, not function 1
-+ */
-+ pci_read_config_byte(bridge, PCI_REVISION_ID, &rev);
-+
-+ pci_dev_put(bridge);
-+ return rev;
-+}
-+
-+
-+static int sl82c105_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info_dma = {
-+ .sht = &sl82c105_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &sl82c105_port_ops
-+ };
-+ static struct ata_port_info info_early = {
-+ .sht = &sl82c105_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .port_ops = &sl82c105_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info_early, &info_early };
-+ u32 val;
-+ int rev;
-+
-+ rev = sl82c105_bridge_revision(dev);
-+
-+ if (rev == -1)
-+ dev_printk(KERN_WARNING, &dev->dev, "pata_sl82c105: Unable to find bridge, disabling DMA.\n");
-+ else if (rev <= 5)
-+ dev_printk(KERN_WARNING, &dev->dev, "pata_sl82c105: Early bridge revision, no DMA available.\n");
-+ else {
-+ port_info[0] = &info_dma;
-+ port_info[1] = &info_dma;
-+ }
-+
-+ pci_read_config_dword(dev, 0x40, &val);
-+ val |= CTRL_P0EN | CTRL_P0F16 | CTRL_P1F16;
-+ pci_write_config_dword(dev, 0x40, val);
-+
-+
-+ return ata_pci_init_one(dev, port_info, 1); /* For now */
-+}
-+
-+static struct pci_device_id sl82c105[] = {
-+ { PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0, },
-+};
-+
-+static struct pci_driver sl82c105_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = sl82c105,
-+ .probe = sl82c105_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init sl82c105_init(void)
-+{
-+ return pci_register_driver(&sl82c105_pci_driver);
-+}
-+
-+
-+static void __exit sl82c105_exit(void)
-+{
-+ pci_unregister_driver(&sl82c105_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Sl82c105");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, sl82c105);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(sl82c105_init);
-+module_exit(sl82c105_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_triflex.c linux-2.6.16-rc6/drivers/scsi/pata_triflex.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_triflex.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_triflex.c 2006-02-16 15:36:23.000000000 +0000
-@@ -0,0 +1,268 @@
-+/*
-+ * pata_triflex.c - Compaq PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * based upon
-+ *
-+ * triflex.c
-+ *
-+ * IDE Chipset driver for the Compaq TriFlex IDE controller.
-+ *
-+ * Known to work with the Compaq Workstation 5x00 series.
-+ *
-+ * Copyright (C) 2002 Hewlett-Packard Development Group, L.P.
-+ * Author: Torben Mathiasen <torben.mathiasen@hp.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Loosely based on the piix & svwks drivers.
-+ *
-+ * Documentation:
-+ * Not publically available.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_triflex"
-+#define DRV_VERSION "0.2.1"
-+
-+static void triflex_phy_reset(struct ata_port *ap)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static struct pci_bits triflex_enable_bits[] = {
-+ { 0x80, 1, 0x01, 0x01 },
-+ { 0x80, 1, 0x02, 0x02 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &triflex_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ ap->cbl = ATA_CBL_PATA40;
-+ ata_port_probe(ap);
-+ ata_bus_reset(ap);
-+}
-+
-+/**
-+ * triflex_load_timing - timing configuration
-+ * @ap: ATA interface
-+ * @adev: Device on the bus
-+ * @speed: speed to configure
-+ *
-+ * The Triflex has one set of timings per device per channel. This
-+ * means we must do some switching. As the PIO and DMA timings don't
-+ * match we have to do some reloading unlike PIIX devices where tuning
-+ * tricks can avoid it.
-+ */
-+
-+static void triflex_load_timing(struct ata_port *ap, struct ata_device *adev, int speed)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 timing = 0;
-+ u32 triflex_timing, old_triflex_timing;
-+ int channel_offset = ap->hard_port_no ? 0x74: 0x70;
-+ unsigned int is_slave = (adev->devno != 0);
-+
-+
-+ pci_read_config_dword(pdev, channel_offset, &old_triflex_timing);
-+ triflex_timing = old_triflex_timing;
-+
-+ switch(speed)
-+ {
-+ case XFER_MW_DMA_2:
-+ timing = 0x0103;break;
-+ case XFER_MW_DMA_1:
-+ timing = 0x0203;break;
-+ case XFER_MW_DMA_0:
-+ timing = 0x0808;break;
-+ case XFER_SW_DMA_2:
-+ case XFER_SW_DMA_1:
-+ case XFER_SW_DMA_0:
-+ timing = 0x0F0F;break;
-+ case XFER_PIO_4:
-+ timing = 0x0202;break;
-+ case XFER_PIO_3:
-+ timing = 0x0204;break;
-+ case XFER_PIO_2:
-+ timing = 0x0404;break;
-+ case XFER_PIO_1:
-+ timing = 0x0508;break;
-+ case XFER_PIO_0:
-+ timing = 0x0808;break;
-+ default:
-+ BUG();
-+ }
-+ triflex_timing &= ~ (0xFFFF << (16 * is_slave));
-+ triflex_timing |= (timing << (16 * is_slave));
-+
-+ if (triflex_timing != old_triflex_timing)
-+ pci_write_config_dword(pdev, channel_offset, triflex_timing);
-+}
-+
-+/**
-+ * triflex_set_piomode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * Use the timing loader to set up the PIO mode. We have to do this
-+ * because DMA start/stop will only be called once DMA occurs. If there
-+ * has been no DMA then the PIO timings are still needed.
-+ */
-+static void triflex_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ triflex_load_timing(ap, adev, adev->pio_mode);
-+}
-+
-+/**
-+ * triflex_dma_start - DMA start callback
-+ * @qc: Command in progress
-+ *
-+ * Usually drivers set the DMA timing at the point the set_dmamode call
-+ * is made. Triflex however requires we load new timings on the
-+ * transition or keep matching PIO/DMA pairs (ie MWDMA2/PIO4 etc).
-+ * We load the DMA timings just before starting DMA and then restore
-+ * the PIO timing when the DMA is finished.
-+ */
-+
-+static void triflex_bmdma_start(struct ata_queued_cmd *qc)
-+{
-+ triflex_load_timing(qc->ap, qc->dev, qc->dev->dma_mode);
-+ ata_bmdma_start(qc);
-+}
-+
-+/**
-+ * triflex_dma_stop - DMA stop callback
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ *
-+ * We loaded new timings in dma_start, as a result we need to restore
-+ * the PIO timings in dma_stop so that the next command issue gets the
-+ * right clock values.
-+ */
-+
-+static void triflex_bmdma_stop(struct ata_queued_cmd *qc)
-+{
-+ ata_bmdma_stop(qc);
-+ triflex_load_timing(qc->ap, qc->dev, qc->dev->pio_mode);
-+}
-+
-+static struct scsi_host_template triflex_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations triflex_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = triflex_set_piomode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = triflex_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = triflex_bmdma_start,
-+ .bmdma_stop = triflex_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id)
-+{
-+ static struct ata_port_info info = {
-+ .sht = &triflex_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &triflex_port_ops
-+ };
-+ static struct ata_port_info *port_info[2] = { &info, &info };
-+ static int printed_version;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &dev->dev, "version " DRV_VERSION "\n");
-+
-+ return ata_pci_init_one(dev, port_info, 2);
-+}
-+
-+static const struct pci_device_id triflex[] = {
-+ { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE,
-+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-+ { 0, },
-+};
-+
-+static struct pci_driver triflex_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = triflex,
-+ .probe = triflex_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init triflex_init(void)
-+{
-+ return pci_register_driver(&triflex_pci_driver);
-+}
-+
-+
-+static void __exit triflex_exit(void)
-+{
-+ pci_unregister_driver(&triflex_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for Compaq Triflex");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, triflex);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(triflex_init);
-+module_exit(triflex_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pata_via.c linux-2.6.16-rc6/drivers/scsi/pata_via.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pata_via.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.16-rc6/drivers/scsi/pata_via.c 2006-03-10 16:27:29.000000000 +0000
-@@ -0,0 +1,563 @@
-+/*
-+ * pata_via.c - VIA PATA for new ATA layer
-+ * (C) 2005 Red Hat Inc
-+ * Alan Cox <alan@redhat.com>
-+ *
-+ * Documentation
-+ * Most chipset documentation available under NDA only
-+ *
-+ * VIA version guide
-+ * VIA VT82C561 - early design, uses ata_generic currently
-+ * VIA VT82C576 - MWDMA, 33Mhz
-+ * VIA VT82C586 - MWDMA, 33Mhz
-+ * VIA VT82C586a - Added UDMA to 33Mhz
-+ * VIA VT82C586b - UDMA33
-+ * VIA VT82C596a - Nonfunctional UDMA66
-+ * VIA VT82C596b - Working UDMA66
-+ * VIA VT82C686 - Nonfunctional UDMA66
-+ * VIA VT82C686a - Working UDMA66
-+ * VIA VT82C686b - Updated to UDMA100
-+ * VIA VT8231 - UDMA100
-+ * VIA VT8233 - UDMA100
-+ * VIA VT8233a - UDMA133
-+ * VIA VT8233c - UDMA100
-+ * VIA VT8235 - UDMA133
-+ * VIA VT8237 - UDMA133
-+ *
-+ * Most registers remain compatible across chips. Others start reserved
-+ * and acquire sensible semantics if set to 1 (eg cable detect). A few
-+ * exceptions exist, notably around the FIFO settings.
-+ *
-+ * One additional quirk of the VIA design is that like ALi they use few
-+ * PCI IDs for a lot of chips.
-+ *
-+ * Based heavily on:
-+ *
-+ * Version 3.38
-+ *
-+ * VIA IDE driver for Linux. Supported southbridges:
-+ *
-+ * vt82c576, vt82c586, vt82c586a, vt82c586b, vt82c596a, vt82c596b,
-+ * vt82c686, vt82c686a, vt82c686b, vt8231, vt8233, vt8233c, vt8233a,
-+ * vt8235, vt8237
-+ *
-+ * Copyright (c) 2000-2002 Vojtech Pavlik
-+ *
-+ * Based on the work of:
-+ * Michel Aubry
-+ * Jeff Garzik
-+ * Andre Hedrick
-+
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+#include <linux/init.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <scsi/scsi_host.h>
-+#include <linux/libata.h>
-+
-+#define DRV_NAME "pata_via"
-+#define DRV_VERSION "0.1.6"
-+
-+/*
-+ * The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
-+ * driver.
-+ */
-+
-+enum {
-+ VIA_UDMA = 0x007,
-+ VIA_UDMA_NONE = 0x000,
-+ VIA_UDMA_33 = 0x001,
-+ VIA_UDMA_66 = 0x002,
-+ VIA_UDMA_100 = 0x003,
-+ VIA_UDMA_133 = 0x004,
-+ VIA_BAD_PREQ = 0x010, /* Crashes if PREQ# till DDACK# set */
-+ VIA_BAD_CLK66 = 0x020, /* 66 MHz clock doesn't work correctly */
-+ VIA_SET_FIFO = 0x040, /* Needs to have FIFO split set */
-+ VIA_NO_UNMASK = 0x080, /* Doesn't work with IRQ unmasking on */
-+ VIA_BAD_ID = 0x100, /* Has wrong vendor ID (0x1107) */
-+ VIA_BAD_AST = 0x200, /* Don't touch Address Setup Timing */
-+ VIA_NO_ENABLES = 0x400, /* Has no enablebits */
-+};
-+
-+/*
-+ * VIA SouthBridge chips.
-+ */
-+
-+static const struct via_isa_bridge {
-+ const char *name;
-+ u16 id;
-+ u8 rev_min;
-+ u8 rev_max;
-+ u16 flags;
-+} via_isa_bridges[] = {
-+ { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES},
-+ { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
-+ { "vt8235", PCI_DEVICE_ID_VIA_8235, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
-+ { "vt8233a", PCI_DEVICE_ID_VIA_8233A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
-+ { "vt8233c", PCI_DEVICE_ID_VIA_8233C_0, 0x00, 0x2f, VIA_UDMA_100 },
-+ { "vt8233", PCI_DEVICE_ID_VIA_8233_0, 0x00, 0x2f, VIA_UDMA_100 },
-+ { "vt8231", PCI_DEVICE_ID_VIA_8231, 0x00, 0x2f, VIA_UDMA_100 },
-+ { "vt82c686b", PCI_DEVICE_ID_VIA_82C686, 0x40, 0x4f, VIA_UDMA_100 },
-+ { "vt82c686a", PCI_DEVICE_ID_VIA_82C686, 0x10, 0x2f, VIA_UDMA_66 },
-+ { "vt82c686", PCI_DEVICE_ID_VIA_82C686, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },
-+ { "vt82c596b", PCI_DEVICE_ID_VIA_82C596, 0x10, 0x2f, VIA_UDMA_66 },
-+ { "vt82c596a", PCI_DEVICE_ID_VIA_82C596, 0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },
-+ { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x47, 0x4f, VIA_UDMA_33 | VIA_SET_FIFO },
-+ { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x40, 0x46, VIA_UDMA_33 | VIA_SET_FIFO | VIA_BAD_PREQ },
-+ { "vt82c586b", PCI_DEVICE_ID_VIA_82C586_0, 0x30, 0x3f, VIA_UDMA_33 | VIA_SET_FIFO },
-+ { "vt82c586a", PCI_DEVICE_ID_VIA_82C586_0, 0x20, 0x2f, VIA_UDMA_33 | VIA_SET_FIFO },
-+ { "vt82c586", PCI_DEVICE_ID_VIA_82C586_0, 0x00, 0x0f, VIA_UDMA_NONE | VIA_SET_FIFO },
-+ { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK },
-+ { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK | VIA_BAD_ID },
-+ { NULL }
-+};
-+
-+/**
-+ * via_cable_detect - cable detection
-+ * @ap: ATA port
-+ *
-+ * Perform cable detection. Actually for the VIA case the BIOS
-+ * already did this for us. We read the values provided by the
-+ * BIOS. If you are using an 8235 in a non-PC configuration you
-+ * may need to update this code.
-+ *
-+ * Hotplug also impacts on this.
-+ */
-+
-+static int via_cable_detect(struct ata_port *ap) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ u32 ata66;
-+
-+ pci_read_config_dword(pdev, 0x50, &ata66);
-+ /* Check both the drive cable reporting bits, we might not have
-+ two drives */
-+ if (ata66 & (0x1010 << (16 * ap->hard_port_no)))
-+ return ATA_CBL_PATA80;
-+ else
-+ return ATA_CBL_PATA40;
-+}
-+
-+/**
-+ * via_phy_reset - reset for eary chip
-+ * @ap: ATA port
-+ *
-+ * Handle the reset callback for the later chips with cable detect
-+ */
-+
-+static void via_phy_reset(struct ata_port *ap)
-+{
-+ const struct via_isa_bridge *config = ap->host_set->private_data;
-+
-+ if (!(config->flags & VIA_NO_ENABLES)) {
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ static const struct pci_bits via_enable_bits[] = {
-+ { 0x40, 1, 0x02, 0x02 },
-+ { 0x40, 1, 0x01, 0x01 }
-+ };
-+
-+ if (!pci_test_config_bits(pdev, &via_enable_bits[ap->hard_port_no])) {
-+ ata_port_disable(ap);
-+ printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id);
-+ return;
-+ }
-+ }
-+
-+ if ((config->flags & VIA_UDMA) >= VIA_UDMA_66)
-+ ap->cbl = via_cable_detect(ap);
-+ else
-+ ap->cbl = ATA_CBL_PATA40;
-+
-+ ata_bus_reset(ap);
-+ ata_port_probe(ap);
-+}
-+
-+/**
-+ * via_do_set_mode - set initial PIO mode data
-+ * @ap: ATA interface
-+ * @adev: ATA device
-+ * @mode: ATA mode being programmed
-+ * @tdiv: Clocks per PCI clock
-+ * @set_ast: Set to program address setup
-+ * @udma_type: UDMA mode/format of registers
-+ *
-+ * Program the VIA registers for DMA and PIO modes. Uses the ata timing
-+ * support in order to compute modes.
-+ *
-+ * FIXME: Hotplug will require we serialize multiple mode changes
-+ * on the two channels.
-+ */
-+
-+static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mode, int tdiv, int set_ast, int udma_type)
-+{
-+ struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-+ struct ata_device *peer = ata_dev_pair(ap, adev);
-+ struct ata_timing t, p;
-+ static int via_clock = 33333; /* Bus clock in kHZ - ought to be tunable one day */
-+ unsigned long T = 1000000000 / via_clock;
-+ unsigned long UT = T/tdiv;
-+ int ut;
-+ int offset = 3 - (2*ap->hard_port_no) - adev->devno;
-+
-+
-+ /* Calculate the timing values we require */
-+ ata_timing_compute(adev, adev->pio_mode, &t, T, UT);
-+
-+ /* We share 8bit timing so we must merge the constraints */
-+ if (peer) {
-+ if (peer->pio_mode) {
-+ ata_timing_compute(peer, peer->pio_mode, &p, T, UT);
-+ ata_timing_merge(&p, &t, &t, ATA_TIMING_8BIT);
-+ }
-+ }
-+
-+ /* Address setup is programmable but breaks on UDMA133 setups */
-+ if (set_ast) {
-+ u8 setup; /* 2 bits per drive */
-+ int shift = 2 * offset;
-+
-+ pci_read_config_byte(pdev, 0x4C, &setup);
-+ setup &= ~(3 << shift);
-+ setup |= FIT(t.setup, 1, 4) << shift; /* 1,4 or 1,4 - 1 FIXME */
-+ pci_write_config_byte(pdev, 0x4C, setup);
-+ }
-+
-+ printk(KERN_DEBUG "via_do_set_mode: Mode=%d ast broken=%c udma=%d mul=%d\n",
-+ mode, "YN"[set_ast], udma_type, tdiv);
-+ printk(KERN_DEBUG "t.act8b = %d, t.rec8b = %d, t.active = %d, t.recover = %d\n",
-+ t.act8b, t.rec8b, t.active, t.recover);
-+ printk(KERN_DEBUG "FIT t.act8b = %d, t.rec8b = %d, t.active = %d, t.recover = %d\n",
-+ FIT(t.act8b,1,16) -1,
-+ FIT(t.rec8b,1,16) -1,
-+ FIT(t.active,1,16) -1,
-+ FIT(t.recover,1,16) -1);
-+
-+ /* Load the PIO mode bits */
-+ pci_write_config_byte(pdev, 0x4F - ap->hard_port_no,
-+ ((FIT(t.act8b, 1, 16) - 1) << 4) | (FIT(t.rec8b, 1, 16) - 1));
-+ pci_write_config_byte(pdev, 0x48 + offset,
-+ ((FIT(t.active, 1, 16) - 1) << 4) | (FIT(t.recover, 1, 16) - 1));
-+
-+ /* Load the UDMA bits according to type */
-+ switch(udma_type) {
-+ default:
-+ /* BUG() ? */
-+ /* fall through */
-+ case 33:
-+ ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 5) - 2)) : 0x03;
-+ break;
-+ case 66:
-+ ut = t.udma ? (0xe8 | (FIT(t.udma, 2, 9) - 2)) : 0x0f;
-+ break;
-+ case 100:
-+ ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 9) - 2)) : 0x07;
-+ break;
-+ case 133:
-+ ut = t.udma ? (0xe0 | (FIT(t.udma, 2, 9) - 2)) : 0x07;
-+ break;
-+ }
-+ /* Set UDMA unless device is not UDMA capable */
-+ if (udma_type)
-+ pci_write_config_byte(pdev, 0x50 + offset, ut);
-+}
-+
-+static void via_set_piomode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ const struct via_isa_bridge *config = ap->host_set->private_data;
-+ int set_ast = (config->flags & VIA_BAD_AST) ? 0 : 1;
-+ int mode = config->flags & VIA_UDMA;
-+ static u8 tclock[5] = { 1, 1, 2, 3, 4 };
-+ static u8 udma[5] = { 0, 33, 66, 100, 133 };
-+
-+ via_do_set_mode(ap, adev, adev->pio_mode, tclock[mode], set_ast, udma[mode]);
-+}
-+
-+static void via_set_dmamode(struct ata_port *ap, struct ata_device *adev)
-+{
-+ const struct via_isa_bridge *config = ap->host_set->private_data;
-+ int set_ast = (config->flags & VIA_BAD_AST) ? 0 : 1;
-+ int mode = config->flags & VIA_UDMA;
-+ static u8 tclock[5] = { 1, 1, 2, 3, 4 };
-+ static u8 udma[5] = { 0, 33, 66, 100, 133 };
-+
-+ via_do_set_mode(ap, adev, adev->dma_mode, tclock[mode], set_ast, udma[mode]);
-+}
-+
-+static struct scsi_host_template via_sht = {
-+ .module = THIS_MODULE,
-+ .name = DRV_NAME,
-+ .ioctl = ata_scsi_ioctl,
-+ .queuecommand = ata_scsi_queuecmd,
-+ .eh_strategy_handler = ata_scsi_error,
-+ .can_queue = ATA_DEF_QUEUE,
-+ .this_id = ATA_SHT_THIS_ID,
-+ .sg_tablesize = LIBATA_MAX_PRD,
-+ .max_sectors = ATA_MAX_SECTORS,
-+ .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
-+ .emulated = ATA_SHT_EMULATED,
-+ .use_clustering = ATA_SHT_USE_CLUSTERING,
-+ .proc_name = DRV_NAME,
-+ .dma_boundary = ATA_DMA_BOUNDARY,
-+ .slave_configure = ata_scsi_slave_config,
-+ .bios_param = ata_std_bios_param,
-+// .ordered_flush = 1,
-+};
-+
-+static struct ata_port_operations via_port_ops = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = via_set_piomode,
-+ .set_dmamode = via_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = via_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+static struct ata_port_operations via_port_ops_noirq = {
-+ .port_disable = ata_port_disable,
-+ .set_piomode = via_set_piomode,
-+ .set_dmamode = via_set_dmamode,
-+ .tf_load = ata_tf_load,
-+ .tf_read = ata_tf_read,
-+ .check_status = ata_check_status,
-+ .exec_command = ata_exec_command,
-+ .dev_select = ata_std_dev_select,
-+
-+ .phy_reset = via_phy_reset,
-+
-+ .bmdma_setup = ata_bmdma_setup,
-+ .bmdma_start = ata_bmdma_start,
-+ .bmdma_stop = ata_bmdma_stop,
-+ .bmdma_status = ata_bmdma_status,
-+
-+ .qc_prep = ata_qc_prep,
-+ .qc_issue = ata_qc_issue_prot,
-+ .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer_noirq,
-+
-+ .irq_handler = ata_interrupt,
-+ .irq_clear = ata_bmdma_irq_clear,
-+
-+ .port_start = ata_port_start,
-+ .port_stop = ata_port_stop,
-+ .host_stop = ata_host_stop
-+};
-+
-+/**
-+ * via_init_one - discovery callback
-+ * @pdev: PCI device ID
-+ * @id: PCI table info
-+ *
-+ * A VIA IDE interface has been discovered. Figure out what revision
-+ * and perform configuration work before handing it to the ATA layer
-+ */
-+
-+static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ /* Early VIA without UDMA support */
-+ static struct ata_port_info via_mwdma_info = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &via_port_ops
-+ };
-+ /* Ditto with IRQ masking required */
-+ static struct ata_port_info via_mwdma_info_borked = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | ATA_FLAG_IRQ_MASK,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .port_ops = &via_port_ops_noirq,
-+ };
-+ /* VIA UDMA 33 devices (and borked 66) */
-+ static struct ata_port_info via_udma33_info = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7,
-+ .port_ops = &via_port_ops
-+ };
-+ /* VIA UDMA 66 devices */
-+ static struct ata_port_info via_udma66_info = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x1f,
-+ .port_ops = &via_port_ops
-+ };
-+ /* VIA UDMA 100 devices */
-+ static struct ata_port_info via_udma100_info = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x3f,
-+ .port_ops = &via_port_ops
-+ };
-+ /* UDMA133 with bad AST (All current 133) */
-+ static struct ata_port_info via_udma133_info = {
-+ .sht = &via_sht,
-+ .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST,
-+ .pio_mask = 0x1f,
-+ .mwdma_mask = 0x07,
-+ .udma_mask = 0x7f, /* FIXME: should check north bridge */
-+ .port_ops = &via_port_ops
-+ };
-+ struct ata_port_info *port_info[2], *type;
-+ struct pci_dev *isa = NULL;
-+ const struct via_isa_bridge *config;
-+ static int printed_version;
-+ u8 t;
-+ u8 enable;
-+ u32 timing;
-+
-+ if (!printed_version++)
-+ dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
-+
-+ /* To find out how the IDE will behave and what features we
-+ actually have to look at the bridge not the IDE controller */
-+ for (config = via_isa_bridges; config->id; config++)
-+ if ((isa = pci_get_device(PCI_VENDOR_ID_VIA +
-+ !!(config->flags & VIA_BAD_ID),
-+ config->id, NULL))) {
-+
-+ pci_read_config_byte(isa, PCI_REVISION_ID, &t);
-+ if (t >= config->rev_min &&
-+ t <= config->rev_max)
-+ break;
-+ pci_dev_put(isa);
-+ }
-+
-+ if (!config->id) {
-+ printk(KERN_WARNING "via: Unknown VIA SouthBridge, disabling.\n");
-+ return -ENODEV;
-+ }
-+
-+ /* 0x40 low bits indicate enabled channels */
-+ pci_read_config_byte(pdev, 0x40 , &enable);
-+ enable &= 3;
-+ if (enable == 0) {
-+ pci_dev_put(isa);
-+ return -ENODEV;
-+ }
-+
-+ /* Initialise the FIFO for the enabled channels. */
-+ if (config->flags & VIA_SET_FIFO) {
-+ u8 fifo_setting[4] = {0x00, 0x60, 0x00, 0x20};
-+ u8 fifo;
-+
-+ pci_read_config_byte(pdev, 0x43, &fifo);
-+
-+ /* Clear PREQ# until DDACK# for errata */
-+ if (config->flags & VIA_BAD_PREQ)
-+ fifo &= 0x7F;
-+ else
-+ fifo &= 0x9f;
-+ /* Turn on FIFO for enabled channels */
-+ fifo |= fifo_setting[enable];
-+ pci_write_config_byte(pdev, 0x43, fifo);
-+ }
-+ /* Clock set up */
-+ switch(config->flags & VIA_UDMA) {
-+ case VIA_UDMA_NONE:
-+ if (config->flags & VIA_NO_UNMASK)
-+ type = &via_mwdma_info_borked;
-+ else
-+ type = &via_mwdma_info;
-+ break;
-+ case VIA_UDMA_33:
-+ type = &via_udma33_info;
-+ break;
-+ case VIA_UDMA_66:
-+ type = &via_udma66_info;
-+ /* The 66 MHz devices require we enable the clock */
-+ pci_read_config_dword(pdev, 0x50, &timing);
-+ timing |= 0x80008;
-+ pci_write_config_dword(pdev, 0x50, timing);
-+ break;
-+ case VIA_UDMA_100:
-+ type = &via_udma100_info;
-+ break;
-+ case VIA_UDMA_133:
-+ type = &via_udma133_info;
-+ break;
-+ default:
-+ type = NULL;
-+ BUG();
-+ break;
-+ }
-+
-+ if (config->flags & VIA_BAD_CLK66) {
-+ /* Disable the 66MHz clock on problem devices */
-+ pci_read_config_dword(pdev, 0x50, &timing);
-+ timing &= ~0x80008;
-+ pci_write_config_dword(pdev, 0x50, timing);
-+ }
-+
-+ /* We have established the device type, now fire it up */
-+ type->private_data = (void *)config;
-+
-+ port_info[0] = port_info[1] = type;
-+ return ata_pci_init_one(pdev, port_info, 2);
-+}
-+
-+static const struct pci_device_id via[] = {
-+ { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_6410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-+ { 0, },
-+};
-+
-+static struct pci_driver via_pci_driver = {
-+ .name = DRV_NAME,
-+ .id_table = via,
-+ .probe = via_init_one,
-+ .remove = ata_pci_remove_one
-+};
-+
-+static int __init via_init(void)
-+{
-+ return pci_register_driver(&via_pci_driver);
-+}
-+
-+
-+static void __exit via_exit(void)
-+{
-+ pci_unregister_driver(&via_pci_driver);
-+}
-+
-+
-+MODULE_AUTHOR("Alan Cox");
-+MODULE_DESCRIPTION("low-level driver for VIA PATA");
-+MODULE_LICENSE("GPL");
-+MODULE_DEVICE_TABLE(pci, via);
-+MODULE_VERSION(DRV_VERSION);
-+
-+module_init(via_init);
-+module_exit(via_exit);
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/pdc_adma.c linux-2.6.16-rc6/drivers/scsi/pdc_adma.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/pdc_adma.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/pdc_adma.c 2006-02-23 13:15:50.000000000 +0000
-@@ -322,7 +322,7 @@
- = (pFLAGS & pEND) ? 0 : cpu_to_le32(pp->pkt_dma + i + 4);
- i += 4;
-
-- VPRINTK("PRD[%u] = (0x%lX, 0x%X)\n", nelem,
-+ VPRINTK("PRD[%u] = (0x%lX, 0x%X)\n", i/4,
- (unsigned long)addr, len);
- }
- return i;
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_mv.c linux-2.6.16-rc6/drivers/scsi/sata_mv.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_mv.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_mv.c 2006-02-20 11:28:03.000000000 +0000
-@@ -389,6 +389,7 @@
-
- .qc_prep = mv_qc_prep,
- .qc_issue = mv_qc_issue,
-+ .data_xfer = ata_mmio_data_xfer,
-
- .eng_timeout = mv_eng_timeout,
-
-@@ -416,6 +417,7 @@
-
- .qc_prep = mv_qc_prep,
- .qc_issue = mv_qc_issue,
-+ .data_xfer = ata_mmio_data_xfer,
-
- .eng_timeout = mv_eng_timeout,
-
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_nv.c linux-2.6.16-rc6/drivers/scsi/sata_nv.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_nv.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_nv.c 2006-01-21 17:08:58.000000000 +0000
-@@ -258,6 +258,7 @@
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
- .eng_timeout = ata_eng_timeout,
-+ .data_xfer = ata_pio_data_xfer,
- .irq_handler = nv_interrupt,
- .irq_clear = ata_bmdma_irq_clear,
- .scr_read = nv_scr_read,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_promise.c linux-2.6.16-rc6/drivers/scsi/sata_promise.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_promise.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_promise.c 2006-02-06 12:36:12.000000000 +0000
-@@ -130,6 +130,7 @@
- .qc_prep = pdc_qc_prep,
- .qc_issue = pdc_qc_issue_prot,
- .eng_timeout = pdc_eng_timeout,
-+ .data_xfer = ata_mmio_data_xfer,
- .irq_handler = pdc_interrupt,
- .irq_clear = pdc_irq_clear,
-
-@@ -152,6 +153,7 @@
-
- .qc_prep = pdc_qc_prep,
- .qc_issue = pdc_qc_issue_prot,
-+ .data_xfer = ata_mmio_data_xfer,
- .eng_timeout = pdc_eng_timeout,
- .irq_handler = pdc_interrupt,
- .irq_clear = pdc_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_qstor.c linux-2.6.16-rc6/drivers/scsi/sata_qstor.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_qstor.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_qstor.c 2006-02-27 14:35:16.000000000 +0000
-@@ -158,6 +158,7 @@
- .phy_reset = qs_phy_reset,
- .qc_prep = qs_qc_prep,
- .qc_issue = qs_qc_issue,
-+ .data_xfer = ata_mmio_data_xfer,
- .eng_timeout = qs_eng_timeout,
- .irq_handler = qs_intr,
- .irq_clear = qs_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sil24.c linux-2.6.16-rc6/drivers/scsi/sata_sil24.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sil24.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_sil24.c 2006-01-21 17:10:52.000000000 +0000
-@@ -309,6 +309,7 @@
-
- .qc_prep = sil24_qc_prep,
- .qc_issue = sil24_qc_issue,
-+ .data_xfer = ata_mmio_data_xfer,
-
- .eng_timeout = sil24_eng_timeout,
-
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sil.c linux-2.6.16-rc6/drivers/scsi/sata_sil.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sil.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_sil.c 2006-03-13 14:03:24.000000000 +0000
-@@ -167,6 +167,7 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_mmio_data_xfer,
- .eng_timeout = ata_eng_timeout,
- .irq_handler = ata_interrupt,
- .irq_clear = ata_bmdma_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sis.c linux-2.6.16-rc6/drivers/scsi/sata_sis.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sis.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_sis.c 2006-01-21 17:11:23.000000000 +0000
-@@ -115,6 +115,7 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
- .eng_timeout = ata_eng_timeout,
- .irq_handler = ata_interrupt,
- .irq_clear = ata_bmdma_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_svw.c linux-2.6.16-rc6/drivers/scsi/sata_svw.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_svw.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_svw.c 2006-02-06 12:30:23.000000000 +0000
-@@ -320,6 +320,7 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_mmio_data_xfer,
- .eng_timeout = ata_eng_timeout,
- .irq_handler = ata_interrupt,
- .irq_clear = ata_bmdma_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sx4.c linux-2.6.16-rc6/drivers/scsi/sata_sx4.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_sx4.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_sx4.c 2006-01-21 17:12:01.000000000 +0000
-@@ -206,6 +206,7 @@
- .phy_reset = pdc_20621_phy_reset,
- .qc_prep = pdc20621_qc_prep,
- .qc_issue = pdc20621_qc_issue_prot,
-+ .data_xfer = ata_mmio_data_xfer,
- .eng_timeout = pdc_eng_timeout,
- .irq_handler = pdc20621_interrupt,
- .irq_clear = pdc20621_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_uli.c linux-2.6.16-rc6/drivers/scsi/sata_uli.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_uli.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_uli.c 2006-01-21 17:12:24.000000000 +0000
-@@ -106,6 +106,7 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-
- .eng_timeout = ata_eng_timeout,
-
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_via.c linux-2.6.16-rc6/drivers/scsi/sata_via.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_via.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_via.c 2006-01-21 17:12:51.000000000 +0000
-@@ -126,6 +126,7 @@
-
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
-
- .eng_timeout = ata_eng_timeout,
-
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/drivers/scsi/sata_vsc.c linux-2.6.16-rc6/drivers/scsi/sata_vsc.c
---- linux.vanilla-2.6.16-rc6/drivers/scsi/sata_vsc.c 2006-03-13 14:00:14.000000000 +0000
-+++ linux-2.6.16-rc6/drivers/scsi/sata_vsc.c 2006-02-20 11:28:11.000000000 +0000
-@@ -280,6 +280,7 @@
- .bmdma_status = ata_bmdma_status,
- .qc_prep = ata_qc_prep,
- .qc_issue = ata_qc_issue_prot,
-+ .data_xfer = ata_pio_data_xfer,
- .eng_timeout = ata_eng_timeout,
- .irq_handler = vsc_sata_interrupt,
- .irq_clear = ata_bmdma_irq_clear,
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/include/linux/ata.h linux-2.6.16-rc6/include/linux/ata.h
---- linux.vanilla-2.6.16-rc6/include/linux/ata.h 2006-03-13 14:00:15.000000000 +0000
-+++ linux-2.6.16-rc6/include/linux/ata.h 2006-02-15 14:39:41.000000000 +0000
-@@ -134,6 +134,8 @@
- ATA_CMD_PIO_READ_EXT = 0x24,
- ATA_CMD_PIO_WRITE = 0x30,
- ATA_CMD_PIO_WRITE_EXT = 0x34,
-+ ATA_CMD_READ_NATIVE_MAX = 0xF8,
-+ ATA_CMD_READ_NATIVE_MAX_EXT = 0x27,
- ATA_CMD_READ_MULTI = 0xC4,
- ATA_CMD_READ_MULTI_EXT = 0x29,
- ATA_CMD_WRITE_MULTI = 0xC5,
-@@ -247,18 +249,22 @@
- };
-
- #define ata_id_is_ata(id) (((id)[0] & (1 << 15)) == 0)
-+#define ata_id_is_cfa(id) ((id)[0] == 0x848A)
- #define ata_id_is_sata(id) ((id)[93] == 0)
- #define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6))
- #define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5))
-+#define ata_id_hpa_enabled(id) ((id)[85] & (1 << 10))
- #define ata_id_has_fua(id) ((id)[84] & (1 << 6))
- #define ata_id_has_flush(id) ((id)[83] & (1 << 12))
- #define ata_id_has_flush_ext(id) ((id)[83] & (1 << 13))
- #define ata_id_has_lba48(id) ((id)[83] & (1 << 10))
-+#define ata_id_has_hpa(id) ((id)[82] & (1 << 10))
- #define ata_id_has_wcache(id) ((id)[82] & (1 << 5))
- #define ata_id_has_pm(id) ((id)[82] & (1 << 3))
- #define ata_id_has_lba(id) ((id)[49] & (1 << 9))
- #define ata_id_has_dma(id) ((id)[49] & (1 << 8))
- #define ata_id_removeable(id) ((id)[0] & (1 << 7))
-+#define ata_id_has_dword_io(id) ((id)[50] & (1 << 0))
- #define ata_id_u32(id,n) \
- (((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)]))
- #define ata_id_u64(id,n) \
-diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.16-rc6/include/linux/libata.h linux-2.6.16-rc6/include/linux/libata.h
---- linux.vanilla-2.6.16-rc6/include/linux/libata.h 2006-03-13 14:00:15.000000000 +0000
-+++ linux-2.6.16-rc6/include/linux/libata.h 2006-03-10 16:48:12.000000000 +0000
-@@ -39,9 +39,9 @@
- */
- #undef ATA_DEBUG /* debugging output */
- #undef ATA_VERBOSE_DEBUG /* yet more debugging output */
--#undef ATA_IRQ_TRAP /* define to ack screaming irqs */
-+#define ATA_IRQ_TRAP /* define to ack screaming irqs */
- #undef ATA_NDEBUG /* define to disable quick runtime checks */
--#undef ATA_ENABLE_PATA /* define to enable PATA support in some
-+#define ATA_ENABLE_PATA /* define to enable PATA support in some
- * low-level drivers */
- #undef ATAPI_ENABLE_DMADIR /* enables ATAPI DMADIR bridge support */
-
-@@ -101,6 +101,7 @@
- ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */
- ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */
- ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */
-+ ATA_DFLAG_HPA = (1 << 4), /* device has an HPA */
-
- ATA_DEV_UNKNOWN = 0, /* unknown device */
- ATA_DEV_ATA = 1, /* ATA device */
-@@ -133,6 +134,8 @@
- ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */
- ATA_QCFLAG_SINGLE = (1 << 4), /* no s/g, just a single buffer */
- ATA_QCFLAG_DMAMAP = ATA_QCFLAG_SG | ATA_QCFLAG_SINGLE,
-+
-+ ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */
-
- /* various lengths of time */
- ATA_TMOUT_EDD = 5 * HZ, /* heuristic */
-@@ -197,6 +200,7 @@
-
- /* forward declarations */
- struct scsi_device;
-+struct ata_host_set;
- struct ata_port_operations;
- struct ata_port;
- struct ata_queued_cmd;
-@@ -237,8 +241,10 @@
- unsigned long irq;
- unsigned int irq_flags;
- unsigned long host_flags;
-+ unsigned long host_set_flags;
- void __iomem *mmio_base;
- void *private_data;
-+ struct ata_host_set *host_set; /* Return not input value */
- };
-
- struct ata_host_set {
-@@ -250,6 +256,9 @@
- void *private_data;
- const struct ata_port_operations *ops;
- struct ata_port * ports[0];
-+ unsigned long host_set_flags;
-+ int simplex_claimed; /* Keep seperate in case we
-+ ever need to do this locked */
- };
-
- struct ata_queued_cmd {
-@@ -369,6 +378,7 @@
-
- void (*set_piomode) (struct ata_port *, struct ata_device *);
- void (*set_dmamode) (struct ata_port *, struct ata_device *);
-+ unsigned int (*mode_filter) (const struct ata_port *, struct ata_device *, unsigned int, int);
-
- void (*tf_load) (struct ata_port *ap, const struct ata_taskfile *tf);
- void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
-@@ -379,12 +389,15 @@
- void (*dev_select)(struct ata_port *ap, unsigned int device);
-
- void (*phy_reset) (struct ata_port *ap);
-+ void (*set_mode) (struct ata_port *ap);
- void (*post_set_mode) (struct ata_port *ap);
-
- int (*check_atapi_dma) (struct ata_queued_cmd *qc);
-
- void (*bmdma_setup) (struct ata_queued_cmd *qc);
- void (*bmdma_start) (struct ata_queued_cmd *qc);
-+
-+ void (*data_xfer) (struct ata_port *, struct ata_device *, unsigned char *, unsigned int, int);
-
- void (*qc_prep) (struct ata_queued_cmd *qc);
- int (*qc_issue) (struct ata_queued_cmd *qc);
-@@ -443,8 +456,9 @@
- extern void ata_pci_remove_one (struct pci_dev *pdev);
- extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state);
- extern int ata_pci_device_resume(struct pci_dev *pdev);
-+extern int ata_pci_clear_simplex(struct pci_dev *pdev);
- #endif /* CONFIG_PCI */
--extern int ata_device_add(const struct ata_probe_ent *ent);
-+extern int ata_device_add(struct ata_probe_ent *ent);
- extern void ata_host_set_remove(struct ata_host_set *host_set);
- extern int ata_scsi_detect(struct scsi_host_template *sht);
- extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
-@@ -491,6 +505,15 @@
- extern void ata_bmdma_irq_clear(struct ata_port *ap);
- extern void ata_qc_complete(struct ata_queued_cmd *qc);
- extern void ata_eng_timeout(struct ata_port *ap);
-+extern void ata_mmio_data_xfer(struct ata_port *ap, struct ata_device *adev, unsigned char *buf,
-+ unsigned int buflen, int write_data);
-+extern void ata_pio_data_xfer(struct ata_port *ap, struct ata_device *adev, unsigned char *buf,
-+ unsigned int buflen, int write_data);
-+extern void ata_mmio_data_xfer_noirq(struct ata_port *ap, struct ata_device *adev, unsigned char *buf,
-+ unsigned int buflen, int do_write);
-+extern void ata_pio_data_xfer_noirq(struct ata_port *ap, struct ata_device *adev, unsigned char *buf,
-+ unsigned int buflen, int do_write);
-+
- extern void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev,
- struct scsi_cmnd *cmd,
- void (*done)(struct scsi_cmnd *));
-@@ -498,6 +521,8 @@
- struct block_device *bdev,
- sector_t capacity, int geom[]);
- extern int ata_scsi_slave_config(struct scsi_device *sdev);
-+extern struct ata_device *ata_dev_pair(struct ata_port *ap,
-+ struct ata_device *adev);
-
- /*
- * Timing helpers
diff --git a/packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.18/.mtn2git_empty
diff --git a/packages/linux/ixp4xx-kernel/2.6.18/defconfig b/packages/linux/ixp4xx-kernel/2.6.18/defconfig
new file mode 100644
index 0000000000..7189609472
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.18/defconfig
@@ -0,0 +1,1840 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18
+# Tue Oct 31 07:57:52 2006
+#
+CONFIG_ARM=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP3XX is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_ARCH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+CONFIG_ARCH_IXDP425=y
+# CONFIG_MACH_IXDPG425 is not set
+# CONFIG_MACH_IXDP465 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+# CONFIG_IP_NF_PPTP is not set
+CONFIG_IP_NF_H323=m
+CONFIG_IP_NF_SIP=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_NAT_H323=m
+CONFIG_IP_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+# CONFIG_BT_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+CONFIG_BT_HCIBCM203X=m
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+CONFIG_SCSI_SATA=m
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+# CONFIG_SCSI_ATA_PIIX is not set
+# CONFIG_SCSI_SATA_MV is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_PDC_ADMA is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_SATA_QSTOR is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIL24 is not set
+# CONFIG_SCSI_SATA_SIS is not set
+# CONFIG_SCSI_SATA_ULI is not set
+CONFIG_SCSI_SATA_VIA=m
+# CONFIG_SCSI_SATA_VITESSE is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+# CONFIG_MD_RAID456 is not set
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_CRYPT is not set
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_IXP4XX_QMGR=m
+CONFIG_IXP4XX_NPE=m
+CONFIG_IXP4XX_FW_LOAD=y
+CONFIG_IXP4XX_MAC=m
+CONFIG_IXP4XX_CRYPTO=m
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_R8169_VLAN=y
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+CONFIG_I2C_ISA=m
+CONFIG_I2C_IXP4XX=y
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_SENSORS_AD7418=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_IXP4XX=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_VIVI=m
+# CONFIG_VIDEO_BT848 is not set
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+# CONFIG_VIDEO_ZORAN_AVS6EYES is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+
+#
+# Encoders and Decoders
+#
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+# CONFIG_VIDEO_TLV320AIC23B is not set
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_WM8739=m
+# CONFIG_VIDEO_CX2341X is not set
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_SAA7127=m
+CONFIG_VIDEO_UPD64031A=m
+CONFIG_VIDEO_UPD64083=m
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_VIDEO_OVCAMCHIP=m
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_VIDEOBUF=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+CONFIG_USB_STORAGE_ONETOUCH=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+CONFIG_USB_YEALINK=m
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_DS1307=y
+# CONFIG_RTC_DRV_DS1553 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_NATIVE_ENDIAN is not set
+# CONFIG_JFFS2_BIG_ENDIAN is not set
+CONFIG_JFFS2_LITTLE_ENDIAN=y
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
diff --git a/packages/linux/ixp4xx-kernel/2.6.19/series b/packages/linux/ixp4xx-kernel/2.6.19/series
deleted file mode 100644
index e7ef3083dd..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.19/series
+++ /dev/null
@@ -1,47 +0,0 @@
-# Patches numbered 00 are externally maintained (large) patchsets
-# Patches numbered 01 to 10 are for immediate push upstream, and
-# must be all able to be applied independently in any order.
-# Patches marked with ## need reworking and are currently disabled
-
-squashfs/squashfs.patch
-squashfs/squashfs-ramdisk.patch
-squashfs/squashfs-force-O2.patch
-squashfs/squashfs-lzma.patch
-squashfs/squashfs-Kconfig.patch
-squashfs/squashfs-Makefile.patch
-00-linux-2.6.19.2.patch
-01-nslu2-led-swap.patch
-05-mtdpart-redboot-partition-truncate.patch
-07-remove-avila-ixdp425-setup.patch
-08-avila-loft-setup.patch
-10-bridging-fix.patch
-11-mtdpart-redboot-config-byteswap.patch
-30-ixp4xx-npe-driver-0.3.1.patch
-37-ixp4xx-net-driver-improve-mac-handling-0.3.1.patch
-39-ixp4xx-net-driver-mtd-load-fw-0.3.1.patch
-40-avila-setup-mac.patch
-41-nslu2-setup-mac.patch
-42-nas100d-setup-mac.patch
-43-nslu2-mtd-microcode.patch
-44-nas100d-mtd-microcode.patch
-45-eeprom-new-notifier.patch
-50-leds-arm-cpu-activity.patch
-52-nas100d-mtd-load-mac.patch
-53-nslu2-mtd-load-mac.patch
-55-increase-entropy-pools.patch
-60-nas100d-artop-temp-fix.patch
-66-hwmon-ad7418.patch
-75-dsmg600-support.patch
-76-dsmg600-pwrbtn.patch
-78-velocity-BE.patch
-80-kexec-arm-r3.patch
-85-nslu2-rtc-fixup.patch
-86-nas100d-rtc-fixup.patch
-87-dsmg600-rtc-fixup.patch
-88-dsmg600-dflt-cmdline.patch
-95-pata-ixp4xx.patch
-96-fsg3-support.patch
-97-avila-setup-pata.patch
-98-sata_via-add-pata-cleanly.patch
-99-avila-mtd-microcode.patch
-99-avila-loft-mac-platform.patch
diff --git a/packages/linux/ixp4xx-kernel/2.6.20/defconfig b/packages/linux/ixp4xx-kernel/2.6.20/defconfig
index 6322bd14a0..27fab8ab73 100644
--- a/packages/linux/ixp4xx-kernel/2.6.20/defconfig
+++ b/packages/linux/ixp4xx-kernel/2.6.20/defconfig
@@ -30,7 +30,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
# General setup
#
CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
@@ -235,7 +235,6 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -311,36 +310,43 @@ CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
-# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NF_CONNTRACK_ENABLED=m
CONFIG_NF_CONNTRACK_SUPPORT=y
# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
CONFIG_NF_CONNTRACK=m
-# CONFIG_NF_CT_ACCT is not set
-# CONFIG_NF_CONNTRACK_MARK is not set
-# CONFIG_NF_CONNTRACK_EVENTS is not set
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
CONFIG_NF_CT_PROTO_SCTP=m
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
@@ -349,11 +355,11 @@ CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
@@ -384,18 +390,20 @@ CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_TARGET_SAME=m
-# CONFIG_NF_NAT_SNMP_BASIC is not set
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
CONFIG_NF_NAT_FTP=m
CONFIG_NF_NAT_IRC=m
CONFIG_NF_NAT_TFTP=m
CONFIG_NF_NAT_AMANDA=m
-# CONFIG_NF_NAT_PPTP is not set
+CONFIG_NF_NAT_PPTP=m
CONFIG_NF_NAT_H323=m
CONFIG_NF_NAT_SIP=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_TOS=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
@@ -404,7 +412,7 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
#
-# CONFIG_NF_CONNTRACK_IPV6 is not set
+CONFIG_NF_CONNTRACK_IPV6=m
# CONFIG_IP6_NF_QUEUE is not set
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_RT=m
@@ -425,7 +433,26 @@ CONFIG_IP6_NF_RAW=m
#
# Bridge: Netfilter Configuration
#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
#
# DCCP Configuration (EXPERIMENTAL)
@@ -481,18 +508,20 @@ CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_HIDP is not set
+CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
CONFIG_BT_HCIUSB=m
CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIUART is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIBCM203X=m
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
+CONFIG_BT_HCIVHCI=m
CONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=m
@@ -728,6 +757,7 @@ CONFIG_ISCSI_TCP=m
# Serial ATA (prod) and Parallel ATA (experimental) drivers
#
CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
# CONFIG_SATA_AHCI is not set
# CONFIG_SATA_SVW is not set
# CONFIG_ATA_PIIX is not set
@@ -1586,11 +1616,11 @@ CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_AIRCABLE=m
# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CP2101=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
@@ -1603,7 +1633,19 @@ CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-# CONFIG_USB_SERIAL_KEYSPAN is not set
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
diff --git a/packages/linux/ixp4xx-kernel/2.6.20/series b/packages/linux/ixp4xx-kernel/2.6.20/series
deleted file mode 100644
index 6ceb7622ac..0000000000
--- a/packages/linux/ixp4xx-kernel/2.6.20/series
+++ /dev/null
@@ -1,46 +0,0 @@
-# Patches numbered 00 are externally maintained (large) patchsets
-# Patches numbered 01 to 10 are for immediate push upstream, and
-# must be all able to be applied independently in any order.
-# Patches marked with ## need reworking and are currently disabled
-
-squashfs/squashfs.patch
-squashfs/squashfs-ramdisk.patch
-squashfs/squashfs-force-O2.patch
-squashfs/squashfs-lzma.patch
-squashfs/squashfs-Kconfig.patch
-squashfs/squashfs-Makefile.patch
-00-linux-2.6.20.1.patch
-01-fix-redboot-parse-oops.patch
-02-fix-redboot-parse-regression.patch
-03-improve-byteswap-redboot-parse.patch
-07-remove-avila-ixdp425-setup.patch
-08-avila-loft-setup.patch
-09-avila-setup-pata.patch
-30-ixp4xx-npe-driver-0.3.1.patch
-37-ixp4xx-net-driver-improve-mac-handling.patch
-39-ixp4xx-net-driver-mtd-load-fw.patch
-40-avila-setup-mac.patch
-41-nslu2-setup-mac.patch
-42-nas100d-setup-mac.patch
-43-nslu2-mtd-microcode.patch
-44-nas100d-mtd-microcode.patch
-45-eeprom-new-notifier.patch
-50-leds-arm-cpu-activity.patch
-52-nas100d-mtd-load-mac.patch
-53-nslu2-mtd-load-mac.patch
-55-increase-entropy-pools.patch
-60-nas100d-artop-temp-fix.patch
-66-hwmon-ad7418.patch
-75-dsmg600-support.patch
-76-dsmg600-pwrbtn.patch
-78-velocity-BE.patch
-80-kexec-arm-upstream.patch
-85-nslu2-rtc-fixup.patch
-86-nas100d-rtc-fixup.patch
-87-dsmg600-rtc-fixup.patch
-89-dsmg600-mv-freq-fixup.patch
-89-nslu2-mv-freq-fixup.patch
-96-fsg3-support.patch
-98-sata_via-pata-support-upstream.patch
-99-avila-mtd-microcode.patch
-99-avila-loft-mac-platform.patch
diff --git a/packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.21/.mtn2git_empty
diff --git a/packages/linux/ixp4xx-kernel/2.6.21/defconfig b/packages/linux/ixp4xx-kernel/2.6.21/defconfig
new file mode 100644
index 0000000000..0fbb58a561
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.21/defconfig
@@ -0,0 +1,2063 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-rc4
+# Tue Mar 20 01:42:04 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_MACH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+CONFIG_ARCH_IXDP425=y
+# CONFIG_MACH_IXDPG425 is not set
+# CONFIG_MACH_IXDP465 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DSMG600=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+CONFIG_SATA_VIA=m
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+CONFIG_PATA_IXP4XX_CF=m
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+# CONFIG_DM_CRYPT is not set
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_IXP4XX_QMGR=m
+CONFIG_IXP4XX_NPE=y
+CONFIG_IXP4XX_NPE_FW_LOAD=y
+CONFIG_IXP4XX_NPE_FW_MTD=y
+CONFIG_IXP4XX_MAC=m
+CONFIG_IXP4XX_CRYPTO=m
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_R8169_VLAN=y
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+CONFIG_VIA_VELOCITY=m
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+CONFIG_I2C_ISA=m
+CONFIG_I2C_IXP4XX=y
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_SENSORS_AD7418=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_IXP4XX=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_VIVI=m
+# CONFIG_VIDEO_BT848 is not set
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+# CONFIG_VIDEO_ZORAN_AVS6EYES is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_VIDEO_OVCAMCHIP=m
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+CONFIG_USB_YEALINK=m
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_DS1307=y
+# CONFIG_RTC_DRV_DS1553 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty b/packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.22/.mtn2git_empty
diff --git a/packages/linux/ixp4xx-kernel/2.6.22/defconfig b/packages/linux/ixp4xx-kernel/2.6.22/defconfig
new file mode 100644
index 0000000000..95b301932f
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel/2.6.22/defconfig
@@ -0,0 +1,1984 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22-rc5
+# Sun Jun 24 12:06:23 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_MACH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+CONFIG_ARCH_IXDP425=y
+# CONFIG_MACH_IXDPG425 is not set
+# CONFIG_MACH_IXDP465 is not set
+# CONFIG_MACH_KIXRP435 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DSMG600=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+CONFIG_IXP4XX_QMGR=y
+CONFIG_IXP4XX_NPE=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+# CONFIG_BT_CMTP is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+CONFIG_SATA_VIA=m
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+CONFIG_PATA_IXP4XX_CF=m
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+# CONFIG_DM_CRYPT is not set
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_IXP4XX_ETH=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+CONFIG_VIA_VELOCITY=m
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=m
+
+#
+# Old ISDN4Linux
+#
+# CONFIG_ISDN_I4L is not set
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+CONFIG_CAPI_TRACE=y
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+# CONFIG_CAPI_AVM is not set
+
+#
+# Active Eicon DIVA Server cards
+#
+# CONFIG_CAPI_EICON is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_POWERMATE is not set
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+CONFIG_I2C_GPIO=y
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+# CONFIG_I2C_IXP4XX is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+# CONFIG_W1_MASTER_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+CONFIG_SENSORS_AD7418=m
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+# CONFIG_PHANTOM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_BLINK is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_IXP4XX=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_SN9C102 is not set
+CONFIG_USB_ZR364XX=m
+# CONFIG_RADIO_ADAPTERS is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+# CONFIG_USB_MOUSE is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_PCF8583 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/ixp4xx-kernel_2.6.15.3.bb b/packages/linux/ixp4xx-kernel_2.6.15.3.bb
deleted file mode 100644
index 0af2032537..0000000000
--- a/packages/linux/ixp4xx-kernel_2.6.15.3.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-# Kernel for IXP4xx
-#
-# Increment PR_CONFIG for changes to the ixp4xx-kernel specific
-# defconfig (do *NOT* increment anything in here for changes
-# to other kernel configs!)
-PR_CONFIG = "0"
-#
-# Increment the number below (i.e. the digits after PR) when
-# making changes within this file or for changes to the patches
-# applied to the kernel.
-PR = "r0.${PR_CONFIG}"
-
-require ixp4xx-kernel.inc
-
-SRC_URI += "file://defconfig"
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches"
-
-# IXP4XX_PATCHES - full list of patches to apply
-IXP4XX_PATCHES = ""
-
-IXP4XX_PATCHES += "file://00-memory-h-page-shift.patch;patch=1"
-IXP4XX_PATCHES += "file://10-mtdpart-redboot-fis-byteswap.patch;patch=1"
-IXP4XX_PATCHES += "file://11-mtdpart-redboot-config-byteswap.patch;patch=1"
-IXP4XX_PATCHES += "file://15-jffs2-endian-config.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_core-r11.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_triggers-r9.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_trig_timer-r4.patch;patch=1"
-# IXP4XX_PATCHES += "${RPSRC}/led_trig_sharpsl_pm-r4a.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_zaurus-r8.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_locomo-r5.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_ixp4xx-r0.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_tosa-r3.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_ide-r2.patch;patch=1"
-IXP4XX_PATCHES += "${RPSRC}/led_nand-r2.patch;patch=1"
-IXP4XX_PATCHES += "file://950-leds-timer.patch;patch=1"
-IXP4XX_PATCHES += "file://951-ixp4xx-leds-cpu-activity.patch;patch=1"
-IXP4XX_PATCHES += "file://40-rtc-class.patch;patch=1"
-IXP4XX_PATCHES += "file://45-eeprom-notifier.patch;patch=1"
-IXP4XX_PATCHES += "file://48-setup-byteswap-cmdline.patch;patch=1"
-IXP4XX_PATCHES += "file://50-nas100d-arch.patch;patch=1"
-# IXP4XX_PATCHES += "file://55-rtc-pcf8563.patch;patch=1"
-# IXP4XX_PATCHES += "file://60-nas100d-i2c.patch;patch=1"
-# IXP4XX_PATCHES += "file://60-nas100d-ide.patch;patch=1"
-# IXP4XX_PATCHES += "file://60-nas100d-rtc.patch;patch=1"
-IXP4XX_PATCHES += "file://60-ixp4xx-beeper.patch;patch=1"
-IXP4XX_PATCHES += "file://65-loft-config.patch;patch=1"
-IXP4XX_PATCHES += "file://81-nslu2-power.patch;patch=1"
-IXP4XX_PATCHES += "file://82-nas100d-power.patch;patch=1"
-IXP4XX_PATCHES += "file://85-timer.patch;patch=1"
-IXP4XX_PATCHES += "file://91-maclist.patch;patch=1"
-IXP4XX_PATCHES += "file://92-nas100d-maclist.patch;patch=1"
-IXP4XX_PATCHES += "file://92-nslu2-maclist.patch;patch=1"
-IXP4XX_PATCHES += "file://93-loft-maclist.patch;patch=1"
-IXP4XX_PATCHES += "file://94-nas100d-setup.patch;patch=1"
-IXP4XX_PATCHES += "file://94-nslu2-setup.patch;patch=1"
-IXP4XX_PATCHES += "file://96-loft-leds.patch;patch=1"
-IXP4XX_PATCHES += "file://96-nas100d-leds.patch;patch=1"
-IXP4XX_PATCHES += "file://96-nslu2-leds.patch;patch=1"
diff --git a/packages/linux/ixp4xx-kernel_2.6.16.bb b/packages/linux/ixp4xx-kernel_2.6.16.bb
deleted file mode 100644
index be8855cc57..0000000000
--- a/packages/linux/ixp4xx-kernel_2.6.16.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-# Kernel for IXP4xx
-#
-# Increment PR_CONFIG for changes to the ixp4xx-kernel specific
-# defconfig (do *NOT* increment anything in here for changes
-# to other kernel configs!)
-PR_CONFIG = "5"
-#
-# Increment the number below (i.e. the digits after PR) when
-# making changes within this file or for changes to the patches
-# applied to the kernel.
-PR = "r7.${PR_CONFIG}"
-
-require ixp4xx-kernel.inc
-
-SRC_URI += "file://defconfig"
-
-# IXP4XX_PATCHES - full list of patches to apply
-IXP4XX_PATCHES = ""
-
-IXP4XX_PATCHES += "file://patch-2.6.16-rc6-ide1;patch=1"
-IXP4XX_PATCHES += "file://leds-class.patch;patch=1"
-IXP4XX_PATCHES += "file://linux-2.6.16-i2c.patch;patch=1"
-IXP4XX_PATCHES += "file://copypage-xscale.patch;patch=1"
-# IXP4XX_PATCHES += "file://06-remove-extraversion.patch;patch=1"
-IXP4XX_PATCHES += "file://10-ixp4xx-fix-irq.patch;patch=1"
-IXP4XX_PATCHES += "file://11-mtdpart-redboot-config-byteswap.patch;patch=1"
-IXP4XX_PATCHES += "file://15-jffs2-endian-config.patch;patch=1"
-IXP4XX_PATCHES += "file://951-ixp4xx-leds-cpu-activity.patch;patch=1"
-IXP4XX_PATCHES += "file://40-rtc-class.patch;patch=1"
-IXP4XX_PATCHES += "file://45-eeprom-new-notifier.patch;patch=1"
-IXP4XX_PATCHES += "file://48-setup-byteswap-cmdline.patch;patch=1"
-IXP4XX_PATCHES += "file://50-hwmon-ad741x.patch;patch=1"
-IXP4XX_PATCHES += "file://65-loft-config.patch;patch=1"
-IXP4XX_PATCHES += "file://75-dsmg600.patch;patch=1"
-IXP4XX_PATCHES += "file://83-nas100d-memory-fixup.patch;patch=1"
-IXP4XX_PATCHES += "file://84-nas100d-cmdline.patch;patch=1"
-IXP4XX_PATCHES += "file://85-timer.patch;patch=1"
-IXP4XX_PATCHES += "file://91-maclist.patch;patch=1"
-IXP4XX_PATCHES += "file://92-nas100d-mac.patch;patch=1"
-IXP4XX_PATCHES += "file://92-nslu2-mac.patch;patch=1"
-IXP4XX_PATCHES += "file://94-nslu2-setup.patch;patch=1"
-IXP4XX_PATCHES += "file://94-loft-setup.patch;patch=1"
-IXP4XX_PATCHES += "file://96-pata-ixp4xx.patch;patch=1"
-#IXP4XX_PATCHES += "file://96-nas100d-leds.patch;patch=1"
-IXP4XX_PATCHES += "file://96-nslu2-leds.patch;patch=1"
-IXP4XX_PATCHES += "file://97-ds101.patch;patch=1"
-IXP4XX_PATCHES += "file://97-ds101-buttons.patch;patch=1"
-IXP4XX_PATCHES += "file://97-ds101-doc.patch;patch=1"
diff --git a/packages/linux/ixp4xx-kernel_2.6.17.bb b/packages/linux/ixp4xx-kernel_2.6.17.bb
deleted file mode 100644
index 2f2dd2243b..0000000000
--- a/packages/linux/ixp4xx-kernel_2.6.17.bb
+++ /dev/null
@@ -1,38 +0,0 @@
-# Kernel for IXP4xx
-#
-# Increment PR_CONFIG for changes to the ixp4xx-kernel specific
-# defconfig (do *NOT* increment anything in here for changes
-# to other kernel configs!)
-PR_CONFIG = "4"
-#
-# Increment the number below (i.e. the digits after PR) when
-# making changes within this file or for changes to the patches
-# applied to the kernel.
-PR = "r3.${PR_CONFIG}"
-
-require ixp4xx-kernel.inc
-
-SRC_URI += "http://svn.nslu2-linux.org/svnroot/kernel/archived/intel_eth/patches/2.6.17/defconfig"
-
-# IXP4XX_PATCHES - full list of patches to apply
-IXP4XX_PATCHES = ""
-
-SVN_SRC = "http://svn.nslu2-linux.org/svnroot/kernel/archived/intel_eth/patches/2.6.17"
-
-# IXP4XX_PATCHES += "file://06-remove-extraversion.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/patch-2.6.17-ide1;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/01-nas100d-leds.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/02-nas100d-mac-addr.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/03-nslu2-leds.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/04-nslu2-mac-addr.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/05-timer-ixp4xx.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/06-timer-nslu2.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/07-copypage-xscale.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/15-jffs2-endian-config.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/20-nas100d-cmdline-fixup.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/20-nslu2-cmdline-fixup.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/50-leds-arm-cpu-activity.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/75-dsmg600.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/76-dsmg600-pwrbtn.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/77-velocity-module.patch;patch=1"
-IXP4XX_PATCHES += "${SVN_SRC}/78-velocity-BE.patch;patch=1"
diff --git a/packages/linux/ixp4xx-kernel_2.6.18.bb b/packages/linux/ixp4xx-kernel_2.6.18.bb
index 69e2098055..96fe2b2f64 100644
--- a/packages/linux/ixp4xx-kernel_2.6.18.bb
+++ b/packages/linux/ixp4xx-kernel_2.6.18.bb
@@ -6,7 +6,7 @@
# http://trac.nslu2-linux.org/kernel/
#
# The revision that is pulled from SVN is specified below
-IXP4XX_KERNEL_SVN_REV = "534"
+IXP4XX_KERNEL_SVN_REV = "886"
#
# The directory containing the patches to be applied is
# specified below
@@ -20,3 +20,5 @@ PR = "r1.${IXP4XX_KERNEL_SVN_REV}"
require ixp4xx-kernel.inc
require ixp4xx-kernel-svnpatch.inc
+
+SRC_URI += "file://defconfig"
diff --git a/packages/linux/ixp4xx-kernel_2.6.19.bb b/packages/linux/ixp4xx-kernel_2.6.19.bb
index c724535b63..d83a0ed0d8 100644
--- a/packages/linux/ixp4xx-kernel_2.6.19.bb
+++ b/packages/linux/ixp4xx-kernel_2.6.19.bb
@@ -22,4 +22,3 @@ require ixp4xx-kernel.inc
require ixp4xx-kernel-svnpatch.inc
SRC_URI += "file://defconfig"
-SRC_URI += "file://series"
diff --git a/packages/linux/ixp4xx-kernel_2.6.20.bb b/packages/linux/ixp4xx-kernel_2.6.20.bb
index 94a08509a7..8e6f1b27df 100644
--- a/packages/linux/ixp4xx-kernel_2.6.20.bb
+++ b/packages/linux/ixp4xx-kernel_2.6.20.bb
@@ -6,7 +6,7 @@
# http://trac.nslu2-linux.org/kernel/
#
# The revision that is pulled from SVN is specified below
-IXP4XX_KERNEL_SVN_REV = "768"
+IXP4XX_KERNEL_SVN_REV = "821"
#
# The directory containing the patches to be applied is
# specified below
@@ -16,10 +16,9 @@ IXP4XX_KERNEL_PATCH_DIR = "2.6.20"
# the changes in SVN between revisions include changes in the
# patches applied to the kernel, rather than simply defconfig
# changes
-PR = "r2.${IXP4XX_KERNEL_SVN_REV}"
+PR = "r4.${IXP4XX_KERNEL_SVN_REV}"
require ixp4xx-kernel.inc
require ixp4xx-kernel-svnpatch.inc
SRC_URI += "file://defconfig"
-SRC_URI += "file://series"
diff --git a/packages/linux/ixp4xx-kernel_2.6.21.6.bb b/packages/linux/ixp4xx-kernel_2.6.21.6.bb
new file mode 100644
index 0000000000..b0ba8ba787
--- /dev/null
+++ b/packages/linux/ixp4xx-kernel_2.6.21.6.bb
@@ -0,0 +1,24 @@
+# Kernel for IXP4xx
+#
+# This bitbake file pulls patches and the defconfig straight
+# from the NSLU2-Linux SVN repository. Information about this
+# repository can be found at:
+# http://trac.nslu2-linux.org/kernel/
+#
+# The revision that is pulled from SVN is specified below
+IXP4XX_KERNEL_SVN_REV = "915"
+#
+# The directory containing the patches to be applied is
+# specified below
+IXP4XX_KERNEL_PATCH_DIR = "2.6.21"
+#
+# Increment the number below (i.e. the digits after PR) when
+# the changes in SVN between revisions include changes in the
+# patches applied to the kernel, rather than simply defconfig
+# changes
+PR = "r0.${IXP4XX_KERNEL_SVN_REV}"
+
+require ixp4xx-kernel.inc
+require ixp4xx-kernel-svnpatch.inc
+
+SRC_URI += "file://defconfig"
diff --git a/packages/linux/linux-2.6.20/.mtn2git_empty b/packages/linux/linux-2.6.20/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-2.6.20/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.20/at91sam9263ek/.mtn2git_empty b/packages/linux/linux-2.6.20/at91sam9263ek/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-2.6.20/at91sam9263ek/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.20/at91sam9263ek/defconfig b/packages/linux/linux-2.6.20/at91sam9263ek/defconfig
new file mode 100644
index 0000000000..f7604678c8
--- /dev/null
+++ b/packages/linux/linux-2.6.20/at91sam9263ek/defconfig
@@ -0,0 +1,1529 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Sun Jun 17 11:47:54 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+CONFIG_ARCH_AT91SAM9263=y
+
+#
+# AT91SAM9263 Board Type
+#
+CONFIG_MACH_AT91SAM9263EK=y
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 root=301 root=/dev/nfs nfsroot=172.20.3.1:/data/at91 ip=172.20.0.5:::255.255.0.0"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+CONFIG_IEEE80211_SOFTMAC_DEBUG=y
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=24576
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+CONFIG_DAVICOM_PHY=y
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_FIXED_PHY is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_MACB_TX_SRAM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+CONFIG_STRIP=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+CONFIG_TIFM_CORE=m
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_AT91=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+
+#
+# V4L USB devices
+#
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+CONFIG_DVB=y
+CONFIG_DVB_CORE=m
+CONFIG_DVB_CORE_ATTACH=y
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+CONFIG_DVB_CINERGYT2_TUNING=y
+CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT=32
+CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE=512
+CONFIG_DVB_CINERGYT2_QUERY_INTERVAL=250
+CONFIG_DVB_CINERGYT2_ENABLE_RC_INPUT_DEVICE=y
+CONFIG_DVB_CINERGYT2_RC_QUERY_INTERVAL=50
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+
+#
+# DVB-T (terrestrial) frontends
+#
+
+#
+# DVB-C (cable) frontends
+#
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+
+#
+# Tuners/PLL support
+#
+
+#
+# Miscellaneous devices
+#
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_AT91_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
+CONFIG_USB_TOUCHSCREEN_ETURBO=y
+CONFIG_USB_TOUCHSCREEN_GUNZE=y
+CONFIG_USB_TOUCHSCREEN_DMC_TSC10=y
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_AT91=y
+CONFIG_MMC_TIFM_SD=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="UTF8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-2.6.21+2.6.22-rc1/.mtn2git_empty b/packages/linux/linux-2.6.21+2.6.22-rc1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-2.6.21+2.6.22-rc1/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.21+2.6.22-rc1/at91-mmcfix.patch b/packages/linux/linux-2.6.21+2.6.22-rc1/at91-mmcfix.patch
new file mode 100644
index 0000000000..0b503b9409
--- /dev/null
+++ b/packages/linux/linux-2.6.21+2.6.22-rc1/at91-mmcfix.patch
@@ -0,0 +1,35 @@
+From: Marc Pignat <marc.pignat@hevs.ch>
+Date: Wed, 6 Jun 2007 18:27:59 +0000 (+0200)
+Subject: mmc-atmel: remove linux/mmc/protocol.h dependencies
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=b6cedb38613d41367839df9d2181df3c81fb25c4
+
+mmc-atmel: remove linux/mmc/protocol.h dependencies
+
+Fix compilation error by removing command decoding from at91_mci.c driver.
+Decoding commands in the host driver is the wrong way.
+
+Signed-off-by: Marc Pignat <marc.pignat@hevs.ch>
+Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
+---
+
+--- /tmp/at91_mci.c 2007-06-13 11:17:32.809501930 +0200
++++ linux-2.6.21/drivers/mmc/host/at91_mci.c 2007-06-13 11:19:36.953487036 +0200
+@@ -417,7 +417,7 @@
+ blocks = 0;
+ }
+
+- if (cmd->opcode == MMC_STOP_TRANSMISSION)
++ if (host->flags & FL_SENT_STOP)
+ cmdr |= AT91_MCI_TRCMD_STOP;
+
+ if (host->bus_mode == MMC_BUSMODE_OPENDRAIN)
+@@ -561,8 +561,7 @@
+ status, cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
+
+ if (status & AT91_MCI_ERRORS) {
+- if ((status & AT91_MCI_RCRCE) &&
+- ((cmd->opcode == MMC_SEND_OP_COND) || (cmd->opcode == SD_APP_OP_COND))) {
++ if ((status & AT91_MCI_RCRCE) && !(mmc_resp_type(cmd) & MMC_RSP_CRC)) {
+ cmd->error = MMC_ERR_NONE;
+ }
+ else {
diff --git a/packages/linux/linux-colinux_2.4.28.bb b/packages/linux/linux-colinux_2.4.28.bb
index b74be3d791..dc052afce1 100644
--- a/packages/linux/linux-colinux_2.4.28.bb
+++ b/packages/linux/linux-colinux_2.4.28.bb
@@ -3,6 +3,8 @@ DESCRIPTION = "User Mode Linux Kernel"
LICENSE = "GPL"
COLV = "0.6.1"
+COMPATIBLE_MACHINE = "colinux"
+
#http://internap.dl.sourceforge.net/sourceforge/colinux/coLinux-0.6.1.tar.gz
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-${PV}.tar.bz2 \
file://colinux-${COLV}.patch;patch=1 \
diff --git a/packages/linux/linux-colinux_2.6.10.bb b/packages/linux/linux-colinux_2.6.10.bb
index 8b77a17109..df06ccdd65 100644
--- a/packages/linux/linux-colinux_2.6.10.bb
+++ b/packages/linux/linux-colinux_2.6.10.bb
@@ -3,6 +3,8 @@ DESCRIPTION = "User Mode Linux Kernel"
LICENSE = "GPL"
COLV = "0.6.2"
+COMPATIBLE_MACHINE = "colinux"
+
#http://internap.dl.sourceforge.net/sourceforge/colinux/coLinux-${COLV}.tar.gz
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://colinux-${COLV}.patch;patch=1 \
diff --git a/packages/linux/linux-dht-walnut-2.6.12.6/dht-walnut_defconfig b/packages/linux/linux-dht-walnut-2.6.12.6/dht-walnut_defconfig
deleted file mode 100644
index be30ceb938..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12.6/dht-walnut_defconfig
+++ /dev/null
@@ -1,2024 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12.6
-# Thu Jun 8 14:36:36 2006
-#
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_HAVE_DEC_LOCK=y
-CONFIG_PPC=y
-CONFIG_PPC32=y
-CONFIG_GENERIC_NVRAM=y
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-# CONFIG_EPOLL is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Processor
-#
-# CONFIG_6xx is not set
-CONFIG_40x=y
-# CONFIG_44x is not set
-# CONFIG_POWER3 is not set
-# CONFIG_POWER4 is not set
-# CONFIG_8xx is not set
-# CONFIG_E500 is not set
-CONFIG_MATH_EMULATION=y
-# CONFIG_CPU_FREQ is not set
-CONFIG_4xx=y
-
-#
-# IBM 4xx options
-#
-# CONFIG_ASH is not set
-# CONFIG_BUBINGA is not set
-# CONFIG_CPCI405 is not set
-# CONFIG_EP405 is not set
-# CONFIG_OAK is not set
-# CONFIG_REDWOOD_5 is not set
-# CONFIG_REDWOOD_6 is not set
-# CONFIG_SYCAMORE is not set
-CONFIG_WALNUT=y
-# CONFIG_XILINX_ML300 is not set
-CONFIG_IBM405_ERR77=y
-CONFIG_IBM405_ERR51=y
-CONFIG_IBM_OCP=y
-CONFIG_BIOS_FIXUP=y
-CONFIG_405GP=y
-# CONFIG_PPC4xx_DMA is not set
-CONFIG_PPC_GEN550=y
-# CONFIG_PM is not set
-CONFIG_UART0_TTYS0=y
-# CONFIG_UART0_TTYS1 is not set
-CONFIG_NOT_COHERENT_CACHE=y
-
-#
-# Platform options
-#
-# CONFIG_PC_KEYBOARD is not set
-# CONFIG_SMP is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="ip=on"
-CONFIG_ISA_DMA_API=y
-
-#
-# Bus options
-#
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_LEGACY_PROC=y
-# CONFIG_PCI_NAMES is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_CARDBUS=y
-
-#
-# PC-card bridges
-#
-CONFIG_YENTA=m
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_TCIC=m
-CONFIG_PCCARD_NONSTATIC=m
-
-#
-# Advanced setup
-#
-# CONFIG_ADVANCED_OPTIONS is not set
-
-#
-# Default settings for advanced configuration options are used
-#
-CONFIG_HIGHMEM_START=0xfe000000
-CONFIG_LOWMEM_SIZE=0x30000000
-CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
-CONFIG_CONSISTENT_START=0xff100000
-CONFIG_CONSISTENT_SIZE=0x00200000
-CONFIG_BOOT_LOAD=0x00400000
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-# CONFIG_STANDALONE is not set
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=m
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-# CONFIG_NFTL_RW is not set
-CONFIG_INFTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_AMDSTD_RETRY=0
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_CFI_UTIL=m
-CONFIG_MTD_RAM=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_PHYSMAP_START=0x8000000
-CONFIG_MTD_PHYSMAP_LEN=0x4000000
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-CONFIG_MTD_WALNUT=m
-CONFIG_MTD_PCI=m
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_PMC551=m
-CONFIG_MTD_PMC551_BUGFIX=y
-# CONFIG_MTD_PMC551_DEBUG is not set
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-CONFIG_MTD_DOC2000=m
-CONFIG_MTD_DOC2001=m
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-CONFIG_MTD_DOCECC=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_PC_PCMCIA is not set
-CONFIG_PARPORT_NOT_PC=y
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=m
-CONFIG_PARIDE=m
-CONFIG_PARIDE_PARPORT=m
-
-#
-# Parallel IDE high-level drivers
-#
-CONFIG_PARIDE_PD=m
-CONFIG_PARIDE_PCD=m
-CONFIG_PARIDE_PF=m
-CONFIG_PARIDE_PT=m
-CONFIG_PARIDE_PG=m
-
-#
-# Parallel IDE protocol modules
-#
-CONFIG_PARIDE_ATEN=m
-CONFIG_PARIDE_BPCK=m
-CONFIG_PARIDE_BPCK6=m
-CONFIG_PARIDE_COMM=m
-CONFIG_PARIDE_DSTR=m
-CONFIG_PARIDE_FIT2=m
-CONFIG_PARIDE_FIT3=m
-CONFIG_PARIDE_EPAT=m
-# CONFIG_PARIDE_EPATC8 is not set
-CONFIG_PARIDE_EPIA=m
-CONFIG_PARIDE_FRIQ=m
-CONFIG_PARIDE_FRPW=m
-CONFIG_PARIDE_KBIC=m
-CONFIG_PARIDE_KTTI=m
-CONFIG_PARIDE_ON20=m
-CONFIG_PARIDE_ON26=m
-CONFIG_BLK_CPQ_DA=m
-CONFIG_BLK_CPQ_CISS_DA=m
-# CONFIG_CISS_SCSI_TAPE is not set
-CONFIG_BLK_DEV_DAC960=m
-CONFIG_BLK_DEV_UMEM=m
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_SX8=m
-CONFIG_BLK_DEV_UB=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_ATA_OVER_ETH=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-CONFIG_BLK_DEV_IDESCSI=m
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-CONFIG_BLK_DEV_OFFBOARD=y
-CONFIG_BLK_DEV_GENERIC=y
-CONFIG_BLK_DEV_OPTI621=m
-CONFIG_BLK_DEV_SL82C105=m
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_BLK_DEV_AEC62XX=m
-CONFIG_BLK_DEV_ALI15X3=m
-# CONFIG_WDC_ALI15X3 is not set
-CONFIG_BLK_DEV_AMD74XX=m
-CONFIG_BLK_DEV_CMD64X=m
-CONFIG_BLK_DEV_TRIFLEX=m
-CONFIG_BLK_DEV_CY82C693=m
-CONFIG_BLK_DEV_CS5520=m
-CONFIG_BLK_DEV_CS5530=m
-CONFIG_BLK_DEV_HPT34X=m
-# CONFIG_HPT34X_AUTODMA is not set
-CONFIG_BLK_DEV_HPT366=m
-CONFIG_BLK_DEV_SC1200=m
-CONFIG_BLK_DEV_PIIX=m
-CONFIG_BLK_DEV_NS87415=m
-CONFIG_BLK_DEV_PDC202XX_OLD=y
-# CONFIG_PDC202XX_BURST is not set
-CONFIG_BLK_DEV_PDC202XX_NEW=m
-# CONFIG_PDC202XX_FORCE is not set
-CONFIG_BLK_DEV_SVWKS=m
-CONFIG_BLK_DEV_SIIMAGE=m
-CONFIG_BLK_DEV_SLC90E66=m
-CONFIG_BLK_DEV_TRM290=m
-CONFIG_BLK_DEV_VIA82CXXX=m
-# CONFIG_IDE_ARM is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=y
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=y
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
-CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-CONFIG_AIC7XXX_DEBUG_ENABLE=y
-CONFIG_AIC7XXX_DEBUG_MASK=0
-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_AIC7XXX_OLD=m
-CONFIG_SCSI_AIC79XX=m
-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
-CONFIG_AIC79XX_RESET_DELAY_MS=15000
-# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
-CONFIG_AIC79XX_DEBUG_ENABLE=y
-CONFIG_AIC79XX_DEBUG_MASK=0
-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_MEGARAID_NEWGEN is not set
-CONFIG_MEGARAID_LEGACY=m
-# CONFIG_SCSI_SATA is not set
-CONFIG_SCSI_BUSLOGIC=m
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_EATA=m
-# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
-# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
-CONFIG_SCSI_EATA_MAX_TAGS=16
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-CONFIG_SCSI_GDTH=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-CONFIG_SCSI_QLOGIC_FC=m
-# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
-CONFIG_SCSI_QLOGIC_1280=m
-# CONFIG_SCSI_QLOGIC_1280_1040 is not set
-CONFIG_SCSI_QLA2XXX=y
-CONFIG_SCSI_QLA21XX=m
-CONFIG_SCSI_QLA22XX=m
-CONFIG_SCSI_QLA2300=m
-CONFIG_SCSI_QLA2322=m
-CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_LPFC=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_DC390T=m
-CONFIG_SCSI_NSP32=m
-CONFIG_SCSI_DEBUG=m
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_NINJA_SCSI=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-CONFIG_FUSION=m
-CONFIG_FUSION_MAX_SGE=40
-CONFIG_FUSION_CTL=m
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
-CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
-
-#
-# Device Drivers
-#
-CONFIG_IEEE1394_PCILYNX=m
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-CONFIG_IEEE1394_SBP2_PHYS_DMA=y
-CONFIG_IEEE1394_ETH1394=m
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
-CONFIG_IEEE1394_CMP=m
-CONFIG_IEEE1394_AMDTP=m
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Macintosh device drivers
-#
-
-#
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_ROUTE_FWMARK is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_CT_ACCT=y
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MAC=m
-CONFIG_IP_NF_MATCH_PKTTYPE=m
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-CONFIG_IP_NF_MATCH_HELPER=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_CONNTRACK=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_PHYSDEV=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_REALM=m
-CONFIG_IP_NF_MATCH_SCTP=m
-CONFIG_IP_NF_MATCH_COMMENT=m
-CONFIG_IP_NF_MATCH_CONNMARK=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_CLASSIFY=m
-CONFIG_IP_NF_TARGET_CONNMARK=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_TARGET_NOTRACK=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_MARK=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_LENGTH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-# CONFIG_IP6_NF_MATCH_PHYSDEV is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# DECnet: Netfilter Configuration
-#
-# CONFIG_DECNET_NF_GRABULATOR is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
-CONFIG_ATM=m
-CONFIG_ATM_CLIP=m
-# CONFIG_ATM_CLIP_NO_ICMP is not set
-CONFIG_ATM_LANE=m
-CONFIG_ATM_MPOA=m
-CONFIG_ATM_BR2684=m
-# CONFIG_ATM_BR2684_IPFILTER is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-CONFIG_DECNET=m
-# CONFIG_DECNET_ROUTER is not set
-CONFIG_LLC=m
-CONFIG_LLC2=m
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-# CONFIG_DEV_APPLETALK is not set
-CONFIG_X25=m
-CONFIG_LAPB=m
-# CONFIG_NET_DIVERT is not set
-CONFIG_ECONET=m
-# CONFIG_ECONET_AUNUDP is not set
-# CONFIG_ECONET_NATIVE is not set
-CONFIG_WAN_ROUTER=m
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_ATM=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_QOS=y
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-# CONFIG_CLS_U32_PERF is not set
-# CONFIG_NET_CLS_IND is not set
-# CONFIG_CLS_U32_MARK is not set
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_CLS_ACT is not set
-CONFIG_NET_CLS_POLICE=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-CONFIG_NET_VENDOR_3COM=y
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-# CONFIG_TULIP_MWI is not set
-# CONFIG_TULIP_MMIO is not set
-# CONFIG_TULIP_NAPI is not set
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_PCMCIA_XIRTULIP=m
-CONFIG_HP100=m
-CONFIG_IBM_EMAC=y
-# CONFIG_IBM_EMAC_ERRMSG is not set
-CONFIG_IBM_EMAC_RXB=128
-CONFIG_IBM_EMAC_TXB=64
-CONFIG_IBM_EMAC_FGAP=8
-CONFIG_IBM_EMAC_SKBRES=0
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_AMD8111_ETH=m
-# CONFIG_AMD8111E_NAPI is not set
-CONFIG_ADAPTEC_STARFIRE=m
-# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-# CONFIG_SUNDANCE_MMIO is not set
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-# CONFIG_VIA_RHINE_MMIO is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_DL2K=m
-CONFIG_E1000=m
-# CONFIG_E1000_NAPI is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-# CONFIG_R8169_NAPI is not set
-# CONFIG_R8169_VLAN is not set
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-CONFIG_STRIP=m
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-CONFIG_PCMCIA_RAYCS=m
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-CONFIG_PRISM54=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PCMCIA_AXNET=m
-
-#
-# Wan interfaces
-#
-CONFIG_WAN=y
-CONFIG_DSCC4=m
-# CONFIG_DSCC4_PCISYNC is not set
-# CONFIG_DSCC4_PCI_RST is not set
-CONFIG_LANMEDIA=m
-CONFIG_SYNCLINK_SYNCPPP=m
-CONFIG_HDLC=m
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_X25 is not set
-CONFIG_PCI200SYN=m
-CONFIG_WANXL=m
-CONFIG_PC300=m
-
-#
-# Cyclades-PC300 MLPPP support is disabled.
-#
-
-#
-# Refer to the file README.mlppp, provided by PC300 package.
-#
-CONFIG_FARSYNC=m
-CONFIG_DLCI=m
-CONFIG_DLCI_COUNT=24
-CONFIG_DLCI_MAX=8
-# CONFIG_WAN_ROUTER_DRIVERS is not set
-CONFIG_LAPBETHER=m
-CONFIG_X25_ASY=m
-
-#
-# ATM drivers
-#
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE_MPPC=m
-CONFIG_PPPOE=m
-CONFIG_PPPOATM=m
-CONFIG_SLIP=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-# CONFIG_SLIP_MODE_SLIP6 is not set
-# CONFIG_NET_FC is not set
-CONFIG_SHAPER=m
-CONFIG_NETCONSOLE=m
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=y
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-CONFIG_PPDEV=m
-CONFIG_TIPAR=m
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-
-#
-# PCI-based Watchdog Cards
-#
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-# CONFIG_WDT_501_PCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-CONFIG_USBPCWATCHDOG=m
-CONFIG_NVRAM=m
-CONFIG_GEN_RTC=m
-# CONFIG_GEN_RTC_X is not set
-CONFIG_DTLK=m
-CONFIG_R3964=m
-CONFIG_APPLICOM=m
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=m
-CONFIG_DRM=m
-CONFIG_DRM_TDFX=m
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_MGA=m
-CONFIG_DRM_SIS=m
-
-#
-# PCMCIA character devices
-#
-CONFIG_SYNCLINK_CS=m
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=256
-
-#
-# TPM devices
-#
-CONFIG_TCG_TPM=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_PIIX4 is not set
-CONFIG_I2C_IBM_IIC=y
-CONFIG_I2C_ISA=m
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_SCx200_ACB is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Hardware Sensors Chip support
-#
-CONFIG_I2C_SENSOR=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_FSCHER=m
-CONFIG_SENSORS_FSCPOS=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83627HF=m
-
-#
-# Other I2C Chip support
-#
-CONFIG_SENSORS_DS1337=m
-CONFIG_SENSORS_EEPROM=m
-CONFIG_SENSORS_PCF8574=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
-CONFIG_SENSORS_M41T00=m
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-CONFIG_VIDEO_BT848=m
-CONFIG_VIDEO_BWQCAM=m
-CONFIG_VIDEO_CQCAM=m
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-# CONFIG_VIDEO_SAA7134_DVB is not set
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-# CONFIG_VIDEO_CX88_DVB is not set
-CONFIG_VIDEO_OVCAMCHIP=m
-
-#
-# Radio Adapters
-#
-CONFIG_RADIO_GEMTEK_PCI=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_MAESTRO=m
-
-#
-# Digital Video Broadcasting Devices
-#
-CONFIG_DVB=y
-CONFIG_DVB_CORE=m
-
-#
-# Supported SAA7146 based PCI Adapters
-#
-CONFIG_DVB_AV7110=m
-# CONFIG_DVB_AV7110_FIRMWARE is not set
-CONFIG_DVB_AV7110_OSD=y
-CONFIG_DVB_BUDGET=m
-CONFIG_DVB_BUDGET_CI=m
-CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
-
-#
-# Supported USB Adapters
-#
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_DVB_DIBUSB=m
-# CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES is not set
-# CONFIG_DVB_DIBCOM_DEBUG is not set
-CONFIG_DVB_CINERGYT2=m
-# CONFIG_DVB_CINERGYT2_TUNING is not set
-
-#
-# Supported FlexCopII (B2C2) Adapters
-#
-CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
-CONFIG_DVB_B2C2_SKYSTAR=m
-
-#
-# Supported BT878 Adapters
-#
-CONFIG_DVB_BT8XX=m
-
-#
-# Supported DVB Frontends
-#
-
-#
-# Customise DVB Frontends
-#
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_STV0299=m
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_TDA8083=m
-CONFIG_DVB_TDA80XX=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_VES1X93=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_SP887X=m
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
-CONFIG_DVB_MT352=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_ATMEL_AT76C651=m
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terresterial DTV) frontends
-#
-CONFIG_DVB_NXT2002=m
-CONFIG_DVB_OR51211=m
-CONFIG_DVB_OR51132=m
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-CONFIG_VIDEO_TVEEPROM=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-CONFIG_FB_SOFT_CURSOR=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_CT65550 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-CONFIG_FB_MATROX=y
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G=y
-# CONFIG_FB_MATROX_I2C is not set
-# CONFIG_FB_MATROX_MULTIHEAD is not set
-# CONFIG_FB_RADEON_OLD is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-CONFIG_USB_SL811_HCD=m
-# CONFIG_USB_SL811_CS is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_BLUETOOTH_TTY=m
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_MTOUCH is not set
-CONFIG_USB_EGALAX=m
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-CONFIG_USB_W9968CF=m
-CONFIG_USB_PWC=m
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-CONFIG_USB_PEGASUS=y
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=y
-
-#
-# USB Host-to-Host Cables
-#
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_GENESYS=y
-CONFIG_USB_NET1080=y
-CONFIG_USB_PL2301=y
-CONFIG_USB_KC2190=y
-
-#
-# Intelligent USB Devices/Gadgets
-#
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_ZAURUS=y
-CONFIG_USB_CDCETHER=y
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_AX8817X=y
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_USS720=m
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_SISUSBVGA=m
-# CONFIG_USB_TEST is not set
-
-#
-# USB ATM/DSL drivers
-#
-CONFIG_USB_ATM=m
-# CONFIG_USB_SPEEDTOUCH is not set
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_NET2280=y
-CONFIG_USB_NET2280=m
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-CONFIG_USB_GADGET_DUALSPEED=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-CONFIG_JFS_FS=m
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-
-#
-# XFS support
-#
-# CONFIG_XFS_FS is not set
-CONFIG_MINIX_FS=m
-CONFIG_ROMFS_FS=m
-CONFIG_QUOTA=y
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_QUOTACTL=y
-CONFIG_DNOTIFY=y
-CONFIG_AUTOFS_FS=m
-CONFIG_AUTOFS4_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=y
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-CONFIG_NTFS_RW=y
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-CONFIG_ADFS_FS=m
-# CONFIG_ADFS_FS_RW is not set
-CONFIG_AFFS_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_BEFS_FS=m
-# CONFIG_BEFS_DEBUG is not set
-CONFIG_BFS_FS=m
-CONFIG_EFS_FS=m
-CONFIG_JFFS_FS=m
-CONFIG_JFFS_FS_VERBOSE=0
-# CONFIG_JFFS_PROC_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_VXFS_FS=m
-CONFIG_HPFS_FS=m
-CONFIG_QNX4FS_FS=m
-CONFIG_SYSV_FS=m
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-CONFIG_RPCSEC_GSS_SPKM3=m
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-CONFIG_NCP_FS=m
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_CODA_FS=m
-# CONFIG_CODA_FS_OLD_API is not set
-CONFIG_AFS_FS=m
-CONFIG_RXRPC=m
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_MAC_PARTITION=y
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# IBM 40x options
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_SERIAL_TEXT_DEBUG is not set
-CONFIG_PPC_OCP=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-CONFIG_SECURITY_CAPABILITIES=m
-CONFIG_SECURITY_ROOTPLUG=m
-CONFIG_SECURITY_SECLVL=m
-# CONFIG_SECURITY_SELINUX is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
diff --git a/packages/linux/linux-dht-walnut-2.6.12.6/iw_we18-5.diff b/packages/linux/linux-dht-walnut-2.6.12.6/iw_we18-5.diff
deleted file mode 100644
index 85fcdd1224..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12.6/iw_we18-5.diff
+++ /dev/null
@@ -1,462 +0,0 @@
-diff -upr linux-2.6.11/include/linux/wireless.h linux-2.6.11-WE18/include/linux/wireless.h
---- linux-2.6.11/include/linux/wireless.h 2004-12-24 13:35:01.000000000 -0800
-+++ linux-2.6.11-WE18/include/linux/wireless.h 2005-03-12 09:53:02.000000000 -0800
-@@ -1,10 +1,10 @@
- /*
- * This file define a set of standard wireless extensions
- *
-- * Version : 17 21.6.04
-+ * Version : 18 12.3.05
- *
- * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
-- * Copyright (c) 1997-2004 Jean Tourrilhes, All Rights Reserved.
-+ * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
- */
-
- #ifndef _LINUX_WIRELESS_H
-@@ -82,7 +82,7 @@
- * (there is some stuff that will be added in the future...)
- * I just plan to increment with each new version.
- */
--#define WIRELESS_EXT 17
-+#define WIRELESS_EXT 18
-
- /*
- * Changes :
-@@ -182,6 +182,21 @@
- * - Document (struct iw_quality *)->updated, add new flags (INVALID)
- * - Wireless Event capability in struct iw_range
- * - Add support for relative TxPower (yick !)
-+ *
-+ * V17 to V18 (From Jouni Malinen <jkmaline@cc.hut.fi>)
-+ * ----------
-+ * - Add support for WPA/WPA2
-+ * - Add extended encoding configuration (SIOCSIWENCODEEXT and
-+ * SIOCGIWENCODEEXT)
-+ * - Add SIOCSIWGENIE/SIOCGIWGENIE
-+ * - Add SIOCSIWMLME
-+ * - Add SIOCSIWPMKSA
-+ * - Add struct iw_range bit field for supported encoding capabilities
-+ * - Add optional scan request parameters for SIOCSIWSCAN
-+ * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA
-+ * related parameters (extensible up to 4096 parameter values)
-+ * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
-+ * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
- */
-
- /**************************** CONSTANTS ****************************/
-@@ -256,6 +271,30 @@
- #define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
- #define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
-
-+/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM).
-+ * This ioctl uses struct iw_point and data buffer that includes IE id and len
-+ * fields. More than one IE may be included in the request. Setting the generic
-+ * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers
-+ * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers
-+ * are required to report the used IE as a wireless event, e.g., when
-+ * associating with an AP. */
-+#define SIOCSIWGENIE 0x8B30 /* set generic IE */
-+#define SIOCGIWGENIE 0x8B31 /* get generic IE */
-+
-+/* WPA : IEEE 802.11 MLME requests */
-+#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses
-+ * struct iw_mlme */
-+/* WPA : Authentication mode parameters */
-+#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */
-+#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */
-+
-+/* WPA : Extended version of encoding configuration */
-+#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */
-+#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */
-+
-+/* WPA2 : PMKSA cache management */
-+#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */
-+
- /* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
-
- /* These 32 ioctl are wireless device private, for 16 commands.
-@@ -297,6 +336,34 @@
- #define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
- #define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
- #define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
-+#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..)
-+ * (scan results); This includes id and
-+ * length fields. One IWEVGENIE may
-+ * contain more than one IE. Scan
-+ * results may contain one or more
-+ * IWEVGENIE events. */
-+#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure
-+ * (struct iw_michaelmicfailure)
-+ */
-+#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request.
-+ * The data includes id and length
-+ * fields and may contain more than one
-+ * IE. This event is required in
-+ * Managed mode if the driver
-+ * generates its own WPA/RSN IE. This
-+ * should be sent just before
-+ * IWEVREGISTERED event for the
-+ * association. */
-+#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association
-+ * Response. The data includes id and
-+ * length fields and may contain more
-+ * than one IE. This may be sent
-+ * between IWEVASSOCREQIE and
-+ * IWEVREGISTERED events for the
-+ * association. */
-+#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN
-+ * pre-authentication
-+ * (struct iw_pmkid_cand) */
-
- #define IWEVFIRST 0x8C00
-
-@@ -432,12 +499,94 @@
- #define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
- #define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
- #define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
-+/* struct iw_scan_req scan_type */
-+#define IW_SCAN_TYPE_ACTIVE 0
-+#define IW_SCAN_TYPE_PASSIVE 1
- /* Maximum size of returned data */
- #define IW_SCAN_MAX_DATA 4096 /* In bytes */
-
- /* Max number of char in custom event - use multiple of them if needed */
- #define IW_CUSTOM_MAX 256 /* In bytes */
-
-+/* Generic information element */
-+#define IW_GENERIC_IE_MAX 1024
-+
-+/* MLME requests (SIOCSIWMLME / struct iw_mlme) */
-+#define IW_MLME_DEAUTH 0
-+#define IW_MLME_DISASSOC 1
-+
-+/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */
-+#define IW_AUTH_INDEX 0x0FFF
-+#define IW_AUTH_FLAGS 0xF000
-+/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095)
-+ * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the
-+ * parameter that is being set/get to; value will be read/written to
-+ * struct iw_param value field) */
-+#define IW_AUTH_WPA_VERSION 0
-+#define IW_AUTH_CIPHER_PAIRWISE 1
-+#define IW_AUTH_CIPHER_GROUP 2
-+#define IW_AUTH_KEY_MGMT 3
-+#define IW_AUTH_TKIP_COUNTERMEASURES 4
-+#define IW_AUTH_DROP_UNENCRYPTED 5
-+#define IW_AUTH_80211_AUTH_ALG 6
-+#define IW_AUTH_WPA_ENABLED 7
-+#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
-+#define IW_AUTH_ROAMING_CONTROL 9
-+#define IW_AUTH_PRIVACY_INVOKED 10
-+
-+/* IW_AUTH_WPA_VERSION values (bit field) */
-+#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
-+#define IW_AUTH_WPA_VERSION_WPA 0x00000002
-+#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
-+
-+/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */
-+#define IW_AUTH_CIPHER_NONE 0x00000001
-+#define IW_AUTH_CIPHER_WEP40 0x00000002
-+#define IW_AUTH_CIPHER_TKIP 0x00000004
-+#define IW_AUTH_CIPHER_CCMP 0x00000008
-+#define IW_AUTH_CIPHER_WEP104 0x00000010
-+
-+/* IW_AUTH_KEY_MGMT values (bit field) */
-+#define IW_AUTH_KEY_MGMT_802_1X 1
-+#define IW_AUTH_KEY_MGMT_PSK 2
-+
-+/* IW_AUTH_80211_AUTH_ALG values (bit field) */
-+#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
-+#define IW_AUTH_ALG_SHARED_KEY 0x00000002
-+#define IW_AUTH_ALG_LEAP 0x00000004
-+
-+/* IW_AUTH_ROAMING_CONTROL values */
-+#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */
-+#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming
-+ * control */
-+
-+/* SIOCSIWENCODEEXT definitions */
-+#define IW_ENCODE_SEQ_MAX_SIZE 8
-+/* struct iw_encode_ext ->alg */
-+#define IW_ENCODE_ALG_NONE 0
-+#define IW_ENCODE_ALG_WEP 1
-+#define IW_ENCODE_ALG_TKIP 2
-+#define IW_ENCODE_ALG_CCMP 3
-+/* struct iw_encode_ext ->ext_flags */
-+#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
-+#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
-+#define IW_ENCODE_EXT_GROUP_KEY 0x00000004
-+#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008
-+
-+/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */
-+#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */
-+#define IW_MICFAILURE_GROUP 0x00000004
-+#define IW_MICFAILURE_PAIRWISE 0x00000008
-+#define IW_MICFAILURE_STAKEY 0x00000010
-+#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported)
-+ */
-+
-+/* Bit field values for enc_capa in struct iw_range */
-+#define IW_ENC_CAPA_WPA 0x00000001
-+#define IW_ENC_CAPA_WPA2 0x00000002
-+#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004
-+#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008
-+
- /* Event capability macros - in (struct iw_range *)->event_capa
- * Because we have more than 32 possible events, we use an array of
- * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
-@@ -546,6 +695,132 @@ struct iw_thrspy
- struct iw_quality high; /* High threshold */
- };
-
-+/*
-+ * Optional data for scan request
-+ *
-+ * Note: these optional parameters are controlling parameters for the
-+ * scanning behavior, these do not apply to getting scan results
-+ * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and
-+ * provide a merged results with all BSSes even if the previous scan
-+ * request limited scanning to a subset, e.g., by specifying an SSID.
-+ * Especially, scan results are required to include an entry for the
-+ * current BSS if the driver is in Managed mode and associated with an AP.
-+ */
-+struct iw_scan_req
-+{
-+ __u8 scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
-+ __u8 essid_len;
-+ __u8 num_channels; /* num entries in channel_list;
-+ * 0 = scan all allowed channels */
-+ __u8 flags; /* reserved as padding; use zero, this may
-+ * be used in the future for adding flags
-+ * to request different scan behavior */
-+ struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
-+ * individual address of a specific BSS */
-+
-+ /*
-+ * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using
-+ * the current ESSID. This allows scan requests for specific ESSID
-+ * without having to change the current ESSID and potentially breaking
-+ * the current association.
-+ */
-+ __u8 essid[IW_ESSID_MAX_SIZE];
-+
-+ /*
-+ * Optional parameters for changing the default scanning behavior.
-+ * These are based on the MLME-SCAN.request from IEEE Std 802.11.
-+ * TU is 1.024 ms. If these are set to 0, driver is expected to use
-+ * reasonable default values. min_channel_time defines the time that
-+ * will be used to wait for the first reply on each channel. If no
-+ * replies are received, next channel will be scanned after this. If
-+ * replies are received, total time waited on the channel is defined by
-+ * max_channel_time.
-+ */
-+ __u32 min_channel_time; /* in TU */
-+ __u32 max_channel_time; /* in TU */
-+
-+ struct iw_freq channel_list[IW_MAX_FREQUENCIES];
-+};
-+
-+/* ------------------------- WPA SUPPORT ------------------------- */
-+
-+/*
-+ * Extended data structure for get/set encoding (this is used with
-+ * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_*
-+ * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and
-+ * only the data contents changes (key data -> this structure, including
-+ * key data).
-+ *
-+ * If the new key is the first group key, it will be set as the default
-+ * TX key. Otherwise, default TX key index is only changed if
-+ * IW_ENCODE_EXT_SET_TX_KEY flag is set.
-+ *
-+ * Key will be changed with SIOCSIWENCODEEXT in all cases except for
-+ * special "change TX key index" operation which is indicated by setting
-+ * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY.
-+ *
-+ * tx_seq/rx_seq are only used when respective
-+ * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal
-+ * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start
-+ * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally
-+ * used only by an Authenticator (AP or an IBSS station) to get the
-+ * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and
-+ * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for
-+ * debugging/testing.
-+ */
-+struct iw_encode_ext
-+{
-+ __u32 ext_flags; /* IW_ENCODE_EXT_* */
-+ __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+ __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+ struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
-+ * (group) keys or unicast address for
-+ * individual keys */
-+ __u16 alg; /* IW_ENCODE_ALG_* */
-+ __u16 key_len;
-+ __u8 key[0];
-+};
-+
-+/* SIOCSIWMLME data */
-+struct iw_mlme
-+{
-+ __u16 cmd; /* IW_MLME_* */
-+ __u16 reason_code;
-+ struct sockaddr addr;
-+};
-+
-+/* SIOCSIWPMKSA data */
-+#define IW_PMKSA_ADD 1
-+#define IW_PMKSA_REMOVE 2
-+#define IW_PMKSA_FLUSH 3
-+
-+#define IW_PMKID_LEN 16
-+
-+struct iw_pmksa
-+{
-+ __u32 cmd; /* IW_PMKSA_* */
-+ struct sockaddr bssid;
-+ __u8 pmkid[IW_PMKID_LEN];
-+};
-+
-+/* IWEVMICHAELMICFAILURE data */
-+struct iw_michaelmicfailure
-+{
-+ __u32 flags;
-+ struct sockaddr src_addr;
-+ __u8 tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+};
-+
-+/* IWEVPMKIDCAND data */
-+#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */
-+struct iw_pmkid_cand
-+{
-+ __u32 flags; /* IW_PMKID_CAND_* */
-+ __u32 index; /* the smaller the index, the higher the
-+ * priority */
-+ struct sockaddr bssid;
-+};
-+
- /* ------------------------ WIRELESS STATS ------------------------ */
- /*
- * Wireless statistics (used for /proc/net/wireless)
-@@ -725,6 +1000,8 @@ struct iw_range
- struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
- /* Note : this frequency list doesn't need to fit channel numbers,
- * because each entry contain its channel index */
-+
-+ __u32 enc_capa; /* IW_ENC_CAPA_* bit field */
- };
-
- /*
-diff -upr linux-2.6.11/net/core/wireless.c linux-2.6.11-WE18/net/core/wireless.c
---- linux-2.6.11/net/core/wireless.c 2005-03-04 15:55:29.000000000 -0800
-+++ linux-2.6.11-WE18/net/core/wireless.c 2005-03-12 09:11:24.000000000 -0800
-@@ -2,7 +2,7 @@
- * This file implement the Wireless Extensions APIs.
- *
- * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
-- * Copyright (c) 1997-2004 Jean Tourrilhes, All Rights Reserved.
-+ * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
- *
- * (As all part of the Linux kernel, this file is GPL)
- */
-@@ -187,6 +187,12 @@ static const struct iw_ioctl_description
- .header_type = IW_HEADER_TYPE_ADDR,
- .flags = IW_DESCR_FLAG_DUMP,
- },
-+ [SIOCSIWMLME - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_mlme),
-+ .max_tokens = sizeof(struct iw_mlme),
-+ },
- [SIOCGIWAPLIST - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct sockaddr) +
-@@ -195,7 +201,10 @@ static const struct iw_ioctl_description
- .flags = IW_DESCR_FLAG_NOMAX,
- },
- [SIOCSIWSCAN - SIOCIWFIRST] = {
-- .header_type = IW_HEADER_TYPE_PARAM,
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = 0,
-+ .max_tokens = sizeof(struct iw_scan_req),
- },
- [SIOCGIWSCAN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
-@@ -273,6 +282,42 @@ static const struct iw_ioctl_description
- [SIOCGIWPOWER - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
-+ [SIOCSIWGENIE - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [SIOCGIWGENIE - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [SIOCSIWAUTH - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_PARAM,
-+ },
-+ [SIOCGIWAUTH - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_PARAM,
-+ },
-+ [SIOCSIWENCODEEXT - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_encode_ext),
-+ .max_tokens = sizeof(struct iw_encode_ext) +
-+ IW_ENCODING_TOKEN_MAX,
-+ },
-+ [SIOCGIWENCODEEXT - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_encode_ext),
-+ .max_tokens = sizeof(struct iw_encode_ext) +
-+ IW_ENCODING_TOKEN_MAX,
-+ },
-+ [SIOCSIWPMKSA - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_pmksa),
-+ .max_tokens = sizeof(struct iw_pmksa),
-+ },
- };
- static const int standard_ioctl_num = (sizeof(standard_ioctl) /
- sizeof(struct iw_ioctl_description));
-@@ -299,6 +344,31 @@ static const struct iw_ioctl_description
- [IWEVEXPIRED - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
-+ [IWEVGENIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVMICHAELMICFAILURE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = sizeof(struct iw_michaelmicfailure),
-+ },
-+ [IWEVASSOCREQIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVASSOCRESPIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVPMKIDCAND - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = sizeof(struct iw_pmkid_cand),
-+ },
- };
- static const int standard_event_num = (sizeof(standard_event) /
- sizeof(struct iw_ioctl_description));
diff --git a/packages/linux/linux-dht-walnut-2.6.12.6/linux-2.6.12-mppe-mppc-1.3.patch b/packages/linux/linux-dht-walnut-2.6.12.6/linux-2.6.12-mppe-mppc-1.3.patch
deleted file mode 100644
index aa430252c7..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12.6/linux-2.6.12-mppe-mppc-1.3.patch
+++ /dev/null
@@ -1,1559 +0,0 @@
-diff -ruN linux-2.6.12.orig/drivers/net/Kconfig linux-2.6.12/drivers/net/Kconfig
---- linux-2.6.12.orig/drivers/net/Kconfig 2005-06-28 19:57:16.000000000 +0200
-+++ linux-2.6.12/drivers/net/Kconfig 2005-06-28 20:07:01.000000000 +0200
-@@ -2417,6 +2417,32 @@
- module; it is called bsd_comp and will show up in the directory
- modules once you have said "make modules". If unsure, say N.
-
-+config PPP_MPPE_MPPC
-+ tristate "Microsoft PPP compression/encryption (MPPC/MPPE)"
-+ depends on PPP
-+ select CRYPTO_SHA1
-+ select CRYPTO_ARC4
-+ ---help---
-+ Support for the Microsoft Point-To-Point Compression (RFC2118) and
-+ Microsoft Point-To-Point Encryption (RFC3078). These protocols are
-+ supported by Microsoft Windows and wide range of "hardware" access
-+ servers. MPPE is common protocol in Virtual Private Networks. According
-+ to RFC3078, MPPE supports 40, 56 and 128-bit key lengths. Depending on
-+ PPP daemon configuration on both ends of the link, following scenarios
-+ are possible:
-+ - only compression (MPPC) is used,
-+ - only encryption (MPPE) is used,
-+ - compression and encryption (MPPC+MPPE) are used.
-+
-+ Please note that Hi/Fn (http://www.hifn.com) holds patent on MPPC so
-+ you should check if this patent is valid in your country in order to
-+ avoid legal problems.
-+
-+ For more information please visit http://free.polbox.pl/h/hs001
-+
-+ To compile this driver as a module, choose M here. The module will
-+ be called ppp_mppe_mppc.ko.
-+
- config PPPOE
- tristate "PPP over Ethernet (EXPERIMENTAL)"
- depends on EXPERIMENTAL && PPP
-diff -ruN linux-2.6.12.orig/drivers/net/Makefile linux-2.6.12/drivers/net/Makefile
---- linux-2.6.12.orig/drivers/net/Makefile 2005-06-28 19:57:16.000000000 +0200
-+++ linux-2.6.12/drivers/net/Makefile 2005-06-28 20:07:01.000000000 +0200
-@@ -105,6 +105,7 @@
- obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
- obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
- obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
-+obj-$(CONFIG_PPP_MPPE_MPPC) += ppp_mppe_mppc.o
- obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
-
- obj-$(CONFIG_SLIP) += slip.o
-diff -ruN linux-2.6.12.orig/drivers/net/ppp_generic.c linux-2.6.12/drivers/net/ppp_generic.c
---- linux-2.6.12.orig/drivers/net/ppp_generic.c 2005-06-28 19:57:20.000000000 +0200
-+++ linux-2.6.12/drivers/net/ppp_generic.c 2005-06-28 20:07:01.000000000 +0200
-@@ -19,7 +19,7 @@
- * PPP driver, written by Michael Callahan and Al Longyear, and
- * subsequently hacked by Paul Mackerras.
- *
-- * ==FILEVERSION 20041108==
-+ * ==FILEVERSION 20050110==
- */
-
- #include <linux/config.h>
-@@ -105,6 +105,7 @@
- spinlock_t rlock; /* lock for receive side 58 */
- spinlock_t wlock; /* lock for transmit side 5c */
- int mru; /* max receive unit 60 */
-+ int mru_alloc; /* MAX(1500,MRU) for dev_alloc_skb() */
- unsigned int flags; /* control bits 64 */
- unsigned int xstate; /* transmit state bits 68 */
- unsigned int rstate; /* receive state bits 6c */
-@@ -632,7 +633,9 @@
- case PPPIOCSMRU:
- if (get_user(val, p))
- break;
-- ppp->mru = val;
-+ ppp->mru_alloc = ppp->mru = val;
-+ if (ppp->mru_alloc < PPP_MRU)
-+ ppp->mru_alloc = PPP_MRU; /* increase for broken peers */
- err = 0;
- break;
-
-@@ -1107,14 +1110,37 @@
- case PPP_CCP:
- /* peek at outbound CCP frames */
- ppp_ccp_peek(ppp, skb, 0);
-+ /*
-+ * When LZS or MPPE/MPPC has been negotiated we don't send
-+ * CCP_RESETACK after receiving CCP_RESETREQ; in fact pppd
-+ * sends such a packet but we silently discard it here
-+ */
-+ if (CCP_CODE(skb->data+2) == CCP_RESETACK
-+ && (ppp->xcomp->compress_proto == CI_MPPE
-+ || ppp->xcomp->compress_proto == CI_LZS)) {
-+ --ppp->stats.tx_packets;
-+ ppp->stats.tx_bytes -= skb->len - 2;
-+ kfree_skb(skb);
-+ return;
-+ }
- break;
- }
-
- /* try to do packet compression */
- if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
- && proto != PPP_LCP && proto != PPP_CCP) {
-- new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
-- GFP_ATOMIC);
-+ int comp_ovhd = 0;
-+ /*
-+ * because of possible data expansion when MPPC or LZS
-+ * is used, allocate compressor's buffer 12.5% bigger
-+ * than MTU
-+ */
-+ if (ppp->xcomp->compress_proto == CI_MPPE)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + MPPE_OVHD;
-+ else if (ppp->xcomp->compress_proto == CI_LZS)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + LZS_OVHD;
-+ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len
-+ + comp_ovhd, GFP_ATOMIC);
- if (new_skb == 0) {
- printk(KERN_ERR "PPP: no memory (comp pkt)\n");
- goto drop;
-@@ -1132,9 +1158,21 @@
- skb = new_skb;
- skb_put(skb, len);
- skb_pull(skb, 2); /* pull off A/C bytes */
-- } else {
-+ } else if (len == 0) {
- /* didn't compress, or CCP not up yet */
- kfree_skb(new_skb);
-+ } else {
-+ /*
-+ * (len < 0)
-+ * MPPE requires that we do not send unencrypted
-+ * frames. The compressor will return -1 if we
-+ * should drop the frame. We cannot simply test
-+ * the compress_proto because MPPE and MPPC share
-+ * the same number.
-+ */
-+ printk(KERN_ERR "ppp: compressor dropped pkt\n");
-+ kfree_skb(new_skb);
-+ goto drop;
- }
- }
-
-@@ -1640,14 +1678,15 @@
- goto err;
-
- if (proto == PPP_COMP) {
-- ns = dev_alloc_skb(ppp->mru + PPP_HDRLEN);
-+ ns = dev_alloc_skb(ppp->mru_alloc + PPP_HDRLEN);
- if (ns == 0) {
- printk(KERN_ERR "ppp_decompress_frame: no memory\n");
- goto err;
- }
- /* the decompressor still expects the A/C bytes in the hdr */
- len = ppp->rcomp->decompress(ppp->rc_state, skb->data - 2,
-- skb->len + 2, ns->data, ppp->mru + PPP_HDRLEN);
-+ skb->len + 2, ns->data,
-+ ppp->mru_alloc + PPP_HDRLEN);
- if (len < 0) {
- /* Pass the compressed frame to pppd as an
- error indication. */
-@@ -1673,7 +1712,14 @@
- return skb;
-
- err:
-- ppp->rstate |= SC_DC_ERROR;
-+ if (ppp->rcomp->compress_proto != CI_MPPE
-+ && ppp->rcomp->compress_proto != CI_LZS) {
-+ /*
-+ * If decompression protocol isn't MPPE/MPPC or LZS, we set
-+ * SC_DC_ERROR flag and wait for CCP_RESETACK
-+ */
-+ ppp->rstate |= SC_DC_ERROR;
-+ }
- ppp_receive_error(ppp);
- return skb;
- }
-@@ -2349,6 +2395,7 @@
- memset(ppp, 0, sizeof(struct ppp));
-
- ppp->mru = PPP_MRU;
-+ ppp->mru_alloc = PPP_MRU;
- init_ppp_file(&ppp->file, INTERFACE);
- ppp->file.hdrlen = PPP_HDRLEN - 2; /* don't count proto bytes */
- for (i = 0; i < NUM_NP; ++i)
-diff -ruN linux-2.6.12.orig/drivers/net/ppp_mppe_mppc.c linux-2.6.12/drivers/net/ppp_mppe_mppc.c
---- linux-2.6.12.orig/drivers/net/ppp_mppe_mppc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.12/drivers/net/ppp_mppe_mppc.c 2005-06-28 20:07:01.000000000 +0200
-@@ -0,0 +1,1299 @@
-+/*
-+ * ppp_mppe_mppc.c - MPPC/MPPE "compressor/decompressor" module.
-+ *
-+ * Copyright (c) 1994 Árpád Magosányi <mag@bunuel.tii.matav.hu>
-+ * Copyright (c) 1999 Tim Hockin, Cobalt Networks Inc. <thockin@cobaltnet.com>
-+ * Copyright (c) 2002-2004 Jan Dubiec <jdx@slackware.pl>
-+ *
-+ * Permission to use, copy, modify, and distribute this software and its
-+ * documentation is hereby granted, provided that the above copyright
-+ * notice appears in all copies. This software is provided without any
-+ * warranty, express or implied.
-+ *
-+ * The code is based on MPPE kernel module written by Árpád Magosányi and
-+ * Tim Hockin which can be found on http://planetmirror.com/pub/mppe/.
-+ * I have added MPPC and 56 bit session keys support in MPPE.
-+ *
-+ * WARNING! Although this is open source code, its usage in some countries
-+ * (in particular in the USA) may violate Stac Inc. patent for MPPC.
-+ *
-+ * ==FILEVERSION 20041123==
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mm.h>
-+#include <linux/slab.h>
-+#include <asm/scatterlist.h>
-+#include <linux/vmalloc.h>
-+#include <linux/crypto.h>
-+
-+#include <linux/ppp_defs.h>
-+#include <linux/ppp-comp.h>
-+
-+/*
-+ * State for a mppc/mppe "(de)compressor".
-+ */
-+struct ppp_mppe_state {
-+ struct crypto_tfm *arc4_tfm;
-+ struct crypto_tfm *sha1_tfm;
-+ u8 *sha1_digest;
-+ u8 master_key[MPPE_MAX_KEY_LEN];
-+ u8 session_key[MPPE_MAX_KEY_LEN];
-+ u8 mppc; /* do we use compression (MPPC)? */
-+ u8 mppe; /* do we use encryption (MPPE)? */
-+ u8 keylen; /* key length in bytes */
-+ u8 bitkeylen; /* key length in bits */
-+ u16 ccount; /* coherency counter */
-+ u16 bits; /* MPPC/MPPE control bits */
-+ u8 stateless; /* do we use stateless mode? */
-+ u8 nextflushed; /* set A bit in the next outgoing packet;
-+ used only by compressor*/
-+ u8 flushexpected; /* drop packets until A bit is received;
-+ used only by decompressor*/
-+ u8 *hist; /* MPPC history */
-+ u16 *hash; /* Hash table; used only by compressor */
-+ u16 histptr; /* history "cursor" */
-+ int unit;
-+ int debug;
-+ int mru;
-+ struct compstat stats;
-+};
-+
-+#define MPPE_HIST_LEN 8192 /* MPPC history size */
-+#define MPPE_MAX_CCOUNT 0x0FFF /* max. coherency counter value */
-+
-+#define MPPE_BIT_FLUSHED 0x80 /* bit A */
-+#define MPPE_BIT_RESET 0x40 /* bit B */
-+#define MPPE_BIT_COMP 0x20 /* bit C */
-+#define MPPE_BIT_ENCRYPTED 0x10 /* bit D */
-+
-+#define MPPE_SALT0 0xD1 /* values used in MPPE key derivation */
-+#define MPPE_SALT1 0x26 /* according to RFC3079 */
-+#define MPPE_SALT2 0x9E
-+
-+#define MPPE_CCOUNT(x) ((((x)[4] & 0x0f) << 8) + (x)[5])
-+#define MPPE_BITS(x) ((x)[4] & 0xf0)
-+#define MPPE_CTRLHI(x) ((((x)->ccount & 0xf00)>>8)|((x)->bits))
-+#define MPPE_CTRLLO(x) ((x)->ccount & 0xff)
-+
-+/*
-+ * Kernel Crypto API needs its arguments to be in kmalloc'd memory, not in the
-+ * module static data area. That means sha_pad needs to be kmalloc'd. It is done
-+ * in mppe_module_init(). This has been pointed out on 30th July 2004 by Oleg
-+ * Makarenko on pptpclient-devel mailing list.
-+ */
-+#define SHA1_PAD_SIZE 40
-+struct sha_pad {
-+ unsigned char sha_pad1[SHA1_PAD_SIZE];
-+ unsigned char sha_pad2[SHA1_PAD_SIZE];
-+};
-+static struct sha_pad *sha_pad;
-+
-+static inline void
-+setup_sg(struct scatterlist *sg, const void *address, unsigned int length)
-+{
-+ sg[0].page = virt_to_page(address);
-+ sg[0].offset = offset_in_page(address);
-+ sg[0].length = length;
-+}
-+
-+static inline void
-+arc4_setkey(struct ppp_mppe_state *state, const unsigned char *key,
-+ const unsigned int keylen)
-+{
-+ crypto_cipher_setkey(state->arc4_tfm, key, keylen);
-+}
-+
-+static inline void
-+arc4_encrypt(struct ppp_mppe_state *state, const unsigned char *in,
-+ const unsigned int len, unsigned char *out)
-+{
-+ struct scatterlist sgin[4], sgout[4];
-+
-+ setup_sg(sgin, in, len);
-+ setup_sg(sgout, out, len);
-+ crypto_cipher_encrypt(state->arc4_tfm, sgout, sgin, len);
-+}
-+
-+#define arc4_decrypt arc4_encrypt
-+
-+/*
-+ * Key Derivation, from RFC 3078, RFC 3079.
-+ * Equivalent to Get_Key() for MS-CHAP as described in RFC 3079.
-+ */
-+static void
-+get_new_key_from_sha(struct ppp_mppe_state *state, unsigned char *interim_key)
-+{
-+ struct scatterlist sg[4];
-+
-+ setup_sg(&sg[0], state->master_key, state->keylen);
-+ setup_sg(&sg[1], sha_pad->sha_pad1, sizeof(sha_pad->sha_pad1));
-+ setup_sg(&sg[2], state->session_key, state->keylen);
-+ setup_sg(&sg[3], sha_pad->sha_pad2, sizeof(sha_pad->sha_pad2));
-+
-+ crypto_digest_digest (state->sha1_tfm, sg, 4, state->sha1_digest);
-+
-+ memcpy(interim_key, state->sha1_digest, state->keylen);
-+}
-+
-+static void
-+mppe_change_key(struct ppp_mppe_state *state, int initialize)
-+{
-+ unsigned char interim_key[MPPE_MAX_KEY_LEN];
-+
-+ get_new_key_from_sha(state, interim_key);
-+ if (initialize) {
-+ memcpy(state->session_key, interim_key, state->keylen);
-+ } else {
-+ arc4_setkey(state, interim_key, state->keylen);
-+ arc4_encrypt(state, interim_key, state->keylen, state->session_key);
-+ }
-+ if (state->keylen == 8) {
-+ if (state->bitkeylen == 40) {
-+ state->session_key[0] = MPPE_SALT0;
-+ state->session_key[1] = MPPE_SALT1;
-+ state->session_key[2] = MPPE_SALT2;
-+ } else {
-+ state->session_key[0] = MPPE_SALT0;
-+ }
-+ }
-+ arc4_setkey(state, state->session_key, state->keylen);
-+}
-+
-+/* increase 12-bit coherency counter */
-+static inline void
-+mppe_increase_ccount(struct ppp_mppe_state *state)
-+{
-+ state->ccount = (state->ccount + 1) & MPPE_MAX_CCOUNT;
-+ if (state->mppe) {
-+ if (state->stateless) {
-+ mppe_change_key(state, 0);
-+ state->nextflushed = 1;
-+ } else {
-+ if ((state->ccount & 0xff) == 0xff) {
-+ mppe_change_key(state, 0);
-+ }
-+ }
-+ }
-+}
-+
-+/* allocate space for a MPPE/MPPC (de)compressor. */
-+/* comp != 0 -> init compressor */
-+/* comp = 0 -> init decompressor */
-+static void *
-+mppe_alloc(unsigned char *options, int opt_len, int comp)
-+{
-+ struct ppp_mppe_state *state;
-+ unsigned int digestsize;
-+ u8* fname;
-+
-+ fname = comp ? "mppe_comp_alloc" : "mppe_decomp_alloc";
-+
-+ /*
-+ * Hack warning - additionally to the standard MPPC/MPPE configuration
-+ * options, pppd passes to the (de)copressor 8 or 16 byte session key.
-+ * Therefore options[1] contains MPPC/MPPE configuration option length
-+ * (CILEN_MPPE = 6), but the real options length, depending on the key
-+ * length, is 6+8 or 6+16.
-+ */
-+ if (opt_len < CILEN_MPPE) {
-+ printk(KERN_WARNING "%s: wrong options length: %u\n", fname, opt_len);
-+ return NULL;
-+ }
-+
-+ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE ||
-+ (options[2] & ~MPPE_STATELESS) != 0 ||
-+ options[3] != 0 || options[4] != 0 ||
-+ (options[5] & ~(MPPE_128BIT|MPPE_56BIT|MPPE_40BIT|MPPE_MPPC)) != 0 ||
-+ (options[5] & (MPPE_128BIT|MPPE_56BIT|MPPE_40BIT|MPPE_MPPC)) == 0) {
-+ printk(KERN_WARNING "%s: options rejected: o[0]=%02x, o[1]=%02x, "
-+ "o[2]=%02x, o[3]=%02x, o[4]=%02x, o[5]=%02x\n", fname, options[0],
-+ options[1], options[2], options[3], options[4], options[5]);
-+ return NULL;
-+ }
-+
-+ state = (struct ppp_mppe_state *)kmalloc(sizeof(*state), GFP_KERNEL);
-+ if (state == NULL) {
-+ printk(KERN_ERR "%s: cannot allocate space for %scompressor\n", fname,
-+ comp ? "" : "de");
-+ return NULL;
-+ }
-+ memset(state, 0, sizeof(struct ppp_mppe_state));
-+
-+ state->mppc = options[5] & MPPE_MPPC; /* Do we use MPPC? */
-+ state->mppe = options[5] & (MPPE_128BIT | MPPE_56BIT |
-+ MPPE_40BIT); /* Do we use MPPE? */
-+
-+ if (state->mppc) {
-+ /* allocate MPPC history */
-+ state->hist = (u8*)vmalloc(2*MPPE_HIST_LEN*sizeof(u8));
-+ if (state->hist == NULL) {
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for MPPC history\n",
-+ fname);
-+ return NULL;
-+ }
-+
-+ /* allocate hashtable for MPPC compressor */
-+ if (comp) {
-+ state->hash = (u16*)vmalloc(MPPE_HIST_LEN*sizeof(u16));
-+ if (state->hash == NULL) {
-+ vfree(state->hist);
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for MPPC history\n",
-+ fname);
-+ return NULL;
-+ }
-+ }
-+ }
-+
-+ if (state->mppe) { /* specific for MPPE */
-+ /* Load ARC4 algorithm */
-+ state->arc4_tfm = crypto_alloc_tfm("arc4", 0);
-+ if (state->arc4_tfm == NULL) {
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot load ARC4 module\n", fname);
-+ return NULL;
-+ }
-+
-+ /* Load SHA1 algorithm */
-+ state->sha1_tfm = crypto_alloc_tfm("sha1", 0);
-+ if (state->sha1_tfm == NULL) {
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot load SHA1 module\n", fname);
-+ return NULL;
-+ }
-+
-+ digestsize = crypto_tfm_alg_digestsize(state->sha1_tfm);
-+ if (digestsize < MPPE_MAX_KEY_LEN) {
-+ crypto_free_tfm(state->sha1_tfm);
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: CryptoAPI SHA1 digest size too small\n", fname);
-+ }
-+
-+ state->sha1_digest = kmalloc(digestsize, GFP_KERNEL);
-+ if (!state->sha1_digest) {
-+ crypto_free_tfm(state->sha1_tfm);
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for SHA1 digest\n", fname);
-+ }
-+
-+ memcpy(state->master_key, options+CILEN_MPPE, MPPE_MAX_KEY_LEN);
-+ memcpy(state->session_key, state->master_key, MPPE_MAX_KEY_LEN);
-+ /* initial key generation is done in mppe_init() */
-+ }
-+
-+ return (void *) state;
-+}
-+
-+static void *
-+mppe_comp_alloc(unsigned char *options, int opt_len)
-+{
-+ return mppe_alloc(options, opt_len, 1);
-+}
-+
-+static void *
-+mppe_decomp_alloc(unsigned char *options, int opt_len)
-+{
-+ return mppe_alloc(options, opt_len, 0);
-+}
-+
-+/* cleanup the (de)compressor */
-+static void
-+mppe_comp_free(void *arg)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+
-+ if (state != NULL) {
-+ if (state->mppe) {
-+ if (state->sha1_digest != NULL)
-+ kfree(state->sha1_digest);
-+ if (state->sha1_tfm != NULL)
-+ crypto_free_tfm(state->sha1_tfm);
-+ if (state->arc4_tfm != NULL)
-+ crypto_free_tfm(state->arc4_tfm);
-+ }
-+ if (state->hist != NULL)
-+ vfree(state->hist);
-+ if (state->hash != NULL)
-+ vfree(state->hash);
-+ kfree(state);
-+ }
-+}
-+
-+/* init MPPC/MPPE (de)compresor */
-+/* comp != 0 -> init compressor */
-+/* comp = 0 -> init decompressor */
-+static int
-+mppe_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int mru, int debug, int comp)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+ u8* fname;
-+
-+ fname = comp ? "mppe_comp_init" : "mppe_decomp_init";
-+
-+ if (opt_len < CILEN_MPPE) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: wrong options length: %u\n",
-+ fname, opt_len);
-+ return 0;
-+ }
-+
-+ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE ||
-+ (options[2] & ~MPPE_STATELESS) != 0 ||
-+ options[3] != 0 || options[4] != 0 ||
-+ (options[5] & ~(MPPE_56BIT|MPPE_128BIT|MPPE_40BIT|MPPE_MPPC)) != 0 ||
-+ (options[5] & (MPPE_56BIT|MPPE_128BIT|MPPE_40BIT|MPPE_MPPC)) == 0) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: options rejected: o[0]=%02x, o[1]=%02x, "
-+ "o[2]=%02x, o[3]=%02x, o[4]=%02x, o[5]=%02x\n", fname,
-+ options[0], options[1], options[2], options[3], options[4],
-+ options[5]);
-+ return 0;
-+ }
-+
-+ if ((options[5] & ~MPPE_MPPC) != MPPE_128BIT &&
-+ (options[5] & ~MPPE_MPPC) != MPPE_56BIT &&
-+ (options[5] & ~MPPE_MPPC) != MPPE_40BIT &&
-+ (options[5] & MPPE_MPPC) != MPPE_MPPC) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: don't know what to do: o[5]=%02x\n",
-+ fname, options[5]);
-+ return 0;
-+ }
-+
-+ state->mppc = options[5] & MPPE_MPPC; /* Do we use MPPC? */
-+ state->mppe = options[5] & (MPPE_128BIT | MPPE_56BIT |
-+ MPPE_40BIT); /* Do we use MPPE? */
-+ state->stateless = options[2] & MPPE_STATELESS; /* Do we use stateless mode? */
-+
-+ switch (state->mppe) {
-+ case MPPE_40BIT: /* 40 bit key */
-+ state->keylen = 8;
-+ state->bitkeylen = 40;
-+ break;
-+ case MPPE_56BIT: /* 56 bit key */
-+ state->keylen = 8;
-+ state->bitkeylen = 56;
-+ break;
-+ case MPPE_128BIT: /* 128 bit key */
-+ state->keylen = 16;
-+ state->bitkeylen = 128;
-+ break;
-+ default:
-+ state->keylen = 0;
-+ state->bitkeylen = 0;
-+ }
-+
-+ state->ccount = MPPE_MAX_CCOUNT;
-+ state->bits = 0;
-+ state->unit = unit;
-+ state->debug = debug;
-+ state->histptr = MPPE_HIST_LEN;
-+ if (state->mppc) { /* reset history if MPPC was negotiated */
-+ memset(state->hist, 0, 2*MPPE_HIST_LEN*sizeof(u8));
-+ }
-+
-+ if (state->mppe) { /* generate initial session keys */
-+ mppe_change_key(state, 1);
-+ }
-+
-+ if (comp) { /* specific for compressor */
-+ state->nextflushed = 1;
-+ } else { /* specific for decompressor */
-+ state->mru = mru;
-+ state->flushexpected = 1;
-+ }
-+
-+ return 1;
-+}
-+
-+static int
-+mppe_comp_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int debug)
-+{
-+ return mppe_init(arg, options, opt_len, unit, hdrlen, 0, debug, 1);
-+}
-+
-+
-+static int
-+mppe_decomp_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int mru, int debug)
-+{
-+ return mppe_init(arg, options, opt_len, unit, hdrlen, mru, debug, 0);
-+}
-+
-+static void
-+mppe_comp_reset(void *arg)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: resetting MPPC/MPPE compressor\n",
-+ __FUNCTION__, state->unit);
-+
-+ state->nextflushed = 1;
-+ if (state->mppe)
-+ arc4_setkey(state, state->session_key, state->keylen);
-+}
-+
-+static void
-+mppe_decomp_reset(void *arg)
-+{
-+ /* When MPPC/MPPE is in use, we shouldn't receive any CCP Reset-Ack.
-+ But when we receive such a packet, we just ignore it. */
-+ return;
-+}
-+
-+static void
-+mppe_stats(void *arg, struct compstat *stats)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+
-+ *stats = state->stats;
-+}
-+
-+/***************************/
-+/**** Compression stuff ****/
-+/***************************/
-+/* inserts 1 to 8 bits into the output buffer */
-+static inline void putbits8(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n) {
-+ *l = (*l) - n;
-+ val <<= *l;
-+ *buf = *buf | (val & 0xff);
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++;
-+ *l = 8 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 8) & 0xff);
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+/* inserts 9 to 16 bits into the output buffer */
-+static inline void putbits16(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n - 8) {
-+ (*i)++;
-+ *l = 8 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 8) & 0xff);
-+ *(++buf) = val & 0xff;
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++; (*i)++;
-+ *l = 16 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 16) & 0xff);
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+/* inserts 17 to 24 bits into the output buffer */
-+static inline void putbits24(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n - 16) {
-+ (*i)++; (*i)++;
-+ *l = 16 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 16) & 0xff);
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++; (*i)++; (*i)++;
-+ *l = 24 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 24) & 0xff);
-+ *(++buf) = (val >> 16) & 0xff;
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+static int
-+mppc_compress(struct ppp_mppe_state *state, unsigned char *ibuf,
-+ unsigned char *obuf, int isize, int osize)
-+{
-+ u32 olen, off, len, idx, i, l;
-+ u8 *hist, *sbuf, *p, *q, *r, *s;
-+
-+ /*
-+ At this point, to avoid possible buffer overflow caused by packet
-+ expansion during/after compression, we should make sure that
-+ osize >= (((isize*9)/8)+1)+2, but we don't do that because in
-+ ppp_generic.c we simply allocate bigger obuf.
-+
-+ Maximum MPPC packet expansion is 12.5%. This is the worst case when
-+ all octets in the input buffer are >= 0x80 and we cannot find any
-+ repeated tokens. Additionally we have to reserve 2 bytes for MPPE/MPPC
-+ status bits and coherency counter.
-+ */
-+
-+ hist = state->hist + MPPE_HIST_LEN;
-+ /* check if there is enough room at the end of the history */
-+ if (state->histptr + isize >= 2*MPPE_HIST_LEN) {
-+ state->bits |= MPPE_BIT_RESET;
-+ state->histptr = MPPE_HIST_LEN;
-+ memcpy(state->hist, hist, MPPE_HIST_LEN);
-+ }
-+ /* add packet to the history; isize must be <= MPPE_HIST_LEN */
-+ sbuf = state->hist + state->histptr;
-+ memcpy(sbuf, ibuf, isize);
-+ state->histptr += isize;
-+
-+ /* compress data */
-+ r = sbuf + isize;
-+ *obuf = olen = i = 0;
-+ l = 8;
-+ while (i < isize - 2) {
-+ s = q = sbuf + i;
-+ idx = ((40543*((((s[0]<<4)^s[1])<<4)^s[2]))>>4) & 0x1fff;
-+ p = hist + state->hash[idx];
-+ state->hash[idx] = (u16) (s - hist);
-+ off = s - p;
-+ if (off > MPPE_HIST_LEN - 1 || off < 1 || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++) {
-+ /* no match found; encode literal byte */
-+ if (ibuf[i] < 0x80) { /* literal byte < 0x80 */
-+ putbits8(obuf, (u32) ibuf[i], 8, &olen, &l);
-+ } else { /* literal byte >= 0x80 */
-+ putbits16(obuf, (u32) (0x100|(ibuf[i]&0x7f)), 9, &olen, &l);
-+ }
-+ ++i;
-+ continue;
-+ }
-+ if (r - q >= 64) {
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++;
-+ if (s - q == 64) {
-+ p--; s--;
-+ while((*p++ == *s++) && (s < r) && (p < q));
-+ }
-+ } else {
-+ while((*p++ == *s++) && (s < r) && (p < q));
-+ }
-+ len = s - q - 1;
-+ i += len;
-+
-+ /* at least 3 character match found; code data */
-+ /* encode offset */
-+ if (off < 64) { /* 10-bit offset; 0 <= offset < 64 */
-+ putbits16(obuf, 0x3c0|off, 10, &olen, &l);
-+ } else if (off < 320) { /* 12-bit offset; 64 <= offset < 320 */
-+ putbits16(obuf, 0xe00|(off-64), 12, &olen, &l);
-+ } else if (off < 8192) { /* 16-bit offset; 320 <= offset < 8192 */
-+ putbits16(obuf, 0xc000|(off-320), 16, &olen, &l);
-+ } else {
-+ /* This shouldn't happen; we return 0 what means "packet expands",
-+ and we send packet uncompressed. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong offset value: %d\n",
-+ __FUNCTION__, state->unit, off);
-+ return 0;
-+ }
-+ /* encode length of match */
-+ if (len < 4) { /* length = 3 */
-+ putbits8(obuf, 0, 1, &olen, &l);
-+ } else if (len < 8) { /* 4 <= length < 8 */
-+ putbits8(obuf, 0x08|(len&0x03), 4, &olen, &l);
-+ } else if (len < 16) { /* 8 <= length < 16 */
-+ putbits8(obuf, 0x30|(len&0x07), 6, &olen, &l);
-+ } else if (len < 32) { /* 16 <= length < 32 */
-+ putbits8(obuf, 0xe0|(len&0x0f), 8, &olen, &l);
-+ } else if (len < 64) { /* 32 <= length < 64 */
-+ putbits16(obuf, 0x3c0|(len&0x1f), 10, &olen, &l);
-+ } else if (len < 128) { /* 64 <= length < 128 */
-+ putbits16(obuf, 0xf80|(len&0x3f), 12, &olen, &l);
-+ } else if (len < 256) { /* 128 <= length < 256 */
-+ putbits16(obuf, 0x3f00|(len&0x7f), 14, &olen, &l);
-+ } else if (len < 512) { /* 256 <= length < 512 */
-+ putbits16(obuf, 0xfe00|(len&0xff), 16, &olen, &l);
-+ } else if (len < 1024) { /* 512 <= length < 1024 */
-+ putbits24(obuf, 0x3fc00|(len&0x1ff), 18, &olen, &l);
-+ } else if (len < 2048) { /* 1024 <= length < 2048 */
-+ putbits24(obuf, 0xff800|(len&0x3ff), 20, &olen, &l);
-+ } else if (len < 4096) { /* 2048 <= length < 4096 */
-+ putbits24(obuf, 0x3ff000|(len&0x7ff), 22, &olen, &l);
-+ } else if (len < 8192) { /* 4096 <= length < 8192 */
-+ putbits24(obuf, 0xffe000|(len&0xfff), 24, &olen, &l);
-+ } else {
-+ /* This shouldn't happen; we return 0 what means "packet expands",
-+ and send packet uncompressed. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong length of match value: %d\n",
-+ __FUNCTION__, state->unit, len);
-+ return 0;
-+ }
-+ }
-+
-+ /* Add remaining octets to the output */
-+ while(isize - i > 0) {
-+ if (ibuf[i] < 0x80) { /* literal byte < 0x80 */
-+ putbits8(obuf, (u32) ibuf[i++], 8, &olen, &l);
-+ } else { /* literal byte >= 0x80 */
-+ putbits16(obuf, (u32) (0x100|(ibuf[i++]&0x7f)), 9, &olen, &l);
-+ }
-+ }
-+ /* Reset unused bits of the last output octet */
-+ if ((l != 0) && (l != 8)) {
-+ putbits8(obuf, 0, l, &olen, &l);
-+ }
-+
-+ return (int) olen;
-+}
-+
-+int
-+mppe_compress(void *arg, unsigned char *ibuf, unsigned char *obuf,
-+ int isize, int osize)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+ int proto, olen, complen, off;
-+ unsigned char *wptr;
-+
-+ /* Check that the protocol is in the range we handle. */
-+ proto = PPP_PROTOCOL(ibuf);
-+ if (proto < 0x0021 || proto > 0x00fa)
-+ return 0;
-+
-+ wptr = obuf;
-+ /* Copy over the PPP header */
-+ wptr[0] = PPP_ADDRESS(ibuf);
-+ wptr[1] = PPP_CONTROL(ibuf);
-+ wptr[2] = PPP_COMP >> 8;
-+ wptr[3] = PPP_COMP;
-+ wptr += PPP_HDRLEN + (MPPE_OVHD / 2); /* Leave two octets for MPPE/MPPC bits */
-+
-+ /*
-+ * In ver. 0.99 protocol field was compressed. Deflate and BSD compress
-+ * do PFC before actual compression, RCF2118 and RFC3078 are not precise
-+ * on this topic so I decided to do PFC. Unfortunately this change caused
-+ * incompatibility with older/other MPPE/MPPC modules. I have received
-+ * a lot of complaints from unexperienced users so I have decided to revert
-+ * to previous state, i.e. the protocol field is sent uncompressed now.
-+ * Although this may be changed in the future.
-+ *
-+ * Receiving side (mppe_decompress()) still accepts packets with compressed
-+ * and uncompressed protocol field so you shouldn't get "Unsupported protocol
-+ * 0x2145 received" messages anymore.
-+ */
-+ //off = (proto > 0xff) ? 2 : 3; /* PFC - skip first protocol byte if 0 */
-+ off = 2;
-+
-+ ibuf += off;
-+
-+ mppe_increase_ccount(state);
-+
-+ if (state->nextflushed) {
-+ state->bits |= MPPE_BIT_FLUSHED;
-+ state->nextflushed = 0;
-+ if (state->mppe && !state->stateless) {
-+ /*
-+ * If this is the flag packet, the key has been already changed in
-+ * mppe_increase_ccount() so we dont't do it once again.
-+ */
-+ if ((state->ccount & 0xff) != 0xff) {
-+ arc4_setkey(state, state->session_key, state->keylen);
-+ }
-+ }
-+ if (state->mppc) { /* reset history */
-+ state->bits |= MPPE_BIT_RESET;
-+ state->histptr = MPPE_HIST_LEN;
-+ memset(state->hist + MPPE_HIST_LEN, 0, MPPE_HIST_LEN*sizeof(u8));
-+ }
-+ }
-+
-+ if (state->mppc && !state->mppe) { /* Do only compression */
-+ complen = mppc_compress(state, ibuf, wptr, isize - off,
-+ osize - PPP_HDRLEN - (MPPE_OVHD / 2));
-+ /*
-+ * TODO: Implement an heuristics to handle packet expansion in a smart
-+ * way. Now, when a packet expands, we send it as uncompressed and
-+ * when next packet is sent we have to reset compressor's history.
-+ * Maybe it would be better to send such packet as compressed in order
-+ * to keep history's continuity.
-+ */
-+ if ((complen > isize) || (complen > osize - PPP_HDRLEN) ||
-+ (complen == 0)) {
-+ /* packet expands */
-+ state->nextflushed = 1;
-+ memcpy(wptr, ibuf, isize - off);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else {
-+ state->bits |= MPPE_BIT_COMP;
-+ olen = complen + PPP_HDRLEN + (MPPE_OVHD / 2);
-+ (state->stats).comp_bytes += olen;
-+ (state->stats).comp_packets++;
-+ }
-+ } else { /* Do encryption with or without compression */
-+ state->bits |= MPPE_BIT_ENCRYPTED;
-+ if (!state->mppc && state->mppe) { /* Do only encryption */
-+ /* read from ibuf, write to wptr, adjust for PPP_HDRLEN */
-+ arc4_encrypt(state, ibuf, isize - off, wptr);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else { /* Do compression and then encryption - RFC3078 */
-+ complen = mppc_compress(state, ibuf, wptr, isize - off,
-+ osize - PPP_HDRLEN - (MPPE_OVHD / 2));
-+ /*
-+ * TODO: Implement an heuristics to handle packet expansion in a smart
-+ * way. Now, when a packet expands, we send it as uncompressed and
-+ * when next packet is sent we have to reset compressor's history.
-+ * Maybe it would be good to send such packet as compressed in order
-+ * to keep history's continuity.
-+ */
-+ if ((complen > isize) || (complen > osize - PPP_HDRLEN) ||
-+ (complen == 0)) {
-+ /* packet expands */
-+ state->nextflushed = 1;
-+ arc4_encrypt(state, ibuf, isize - off, wptr);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else {
-+ state->bits |= MPPE_BIT_COMP;
-+ /* Hack warning !!! RC4 implementation which we use does
-+ encryption "in place" - it means that input and output
-+ buffers can be *the same* memory area. Therefore we don't
-+ need to use a temporary buffer. But be careful - other
-+ implementations don't have to be so nice.
-+ I used to use ibuf as temporary buffer here, but it led
-+ packet sniffers into error. Thanks to Wilfried Weissmann
-+ for pointing that. */
-+ arc4_encrypt(state, wptr, complen, wptr);
-+ olen = complen + PPP_HDRLEN + (MPPE_OVHD / 2);
-+ (state->stats).comp_bytes += olen;
-+ (state->stats).comp_packets++;
-+ }
-+ }
-+ }
-+
-+ /* write status bits and coherency counter into the output buffer */
-+ wptr = obuf + PPP_HDRLEN;
-+ wptr[0] = MPPE_CTRLHI(state);
-+ wptr[1] = MPPE_CTRLLO(state);
-+
-+ state->bits = 0;
-+
-+ (state->stats).unc_bytes += isize;
-+ (state->stats).unc_packets++;
-+
-+ return olen;
-+}
-+
-+/***************************/
-+/*** Decompression stuff ***/
-+/***************************/
-+static inline u32 getbits(const u8 *buf, const u32 n, u32 *i, u32 *l)
-+{
-+ static const u32 m[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};
-+ u32 res, ol;
-+
-+ ol = *l;
-+ if (*l >= n) {
-+ *l = (*l) - n;
-+ res = (buf[*i] & m[ol]) >> (*l);
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ }
-+ } else {
-+ *l = 8 - n + (*l);
-+ res = (buf[(*i)++] & m[ol]) << 8;
-+ res = (res | buf[*i]) >> (*l);
-+ }
-+
-+ return res;
-+}
-+
-+static inline u32 getbyte(const u8 *buf, const u32 i, const u32 l)
-+{
-+ if (l == 8) {
-+ return buf[i];
-+ } else {
-+ return (((buf[i] << 8) | buf[i+1]) >> l) & 0xff;
-+ }
-+}
-+
-+static inline void lamecopy(u8 *dst, u8 *src, u32 len)
-+{
-+ while (len--)
-+ *dst++ = *src++;
-+}
-+
-+static int
-+mppc_decompress(struct ppp_mppe_state *state, unsigned char *ibuf,
-+ unsigned char *obuf, int isize, int osize)
-+{
-+ u32 olen, off, len, bits, val, sig, i, l;
-+ u8 *history, *s;
-+
-+ history = state->hist + state->histptr;
-+ olen = len = i = 0;
-+ l = 8;
-+ bits = isize * 8;
-+ while (bits >= 8) {
-+ val = getbyte(ibuf, i++, l);
-+ if (val < 0x80) { /* literal byte < 0x80 */
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed byte to the history */
-+ (state->hist)[(state->histptr)++] = (u8) val;
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ olen++;
-+ bits -= 8;
-+ continue;
-+ }
-+
-+ sig = val & 0xc0;
-+ if (sig == 0x80) { /* literal byte >= 0x80 */
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed byte to the history */
-+ (state->hist)[(state->histptr)++] =
-+ (u8) (0x80|((val&0x3f)<<1)|getbits(ibuf, 1 , &i ,&l));
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ olen++;
-+ bits -= 9;
-+ continue;
-+ }
-+
-+ /* Not a literal byte so it must be an (offset,length) pair */
-+ /* decode offset */
-+ sig = val & 0xf0;
-+ if (sig == 0xf0) { /* 10-bit offset; 0 <= offset < 64 */
-+ off = (((val&0x0f)<<2)|getbits(ibuf, 2 , &i ,&l));
-+ bits -= 10;
-+ } else {
-+ if (sig == 0xe0) { /* 12-bit offset; 64 <= offset < 320 */
-+ off = ((((val&0x0f)<<4)|getbits(ibuf, 4 , &i ,&l))+64);
-+ bits -= 12;
-+ } else {
-+ if ((sig&0xe0) == 0xc0) {/* 16-bit offset; 320 <= offset < 8192 */
-+ off = ((((val&0x1f)<<8)|getbyte(ibuf, i++, l))+320);
-+ bits -= 16;
-+ if (off > MPPE_HIST_LEN - 1) {
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: too big offset value: %d\n",
-+ __FUNCTION__, state->unit, off);
-+ return DECOMP_ERROR;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: cannot decode offset value\n",
-+ __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ }
-+ /* decode length of match */
-+ val = getbyte(ibuf, i, l);
-+ if ((val & 0x80) == 0x00) { /* len = 3 */
-+ len = 3;
-+ bits--;
-+ getbits(ibuf, 1 , &i ,&l);
-+ } else if ((val & 0xc0) == 0x80) { /* 4 <= len < 8 */
-+ len = 0x04 | ((val>>4) & 0x03);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xe0) == 0xc0) { /* 8 <= len < 16 */
-+ len = 0x08 | ((val>>2) & 0x07);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xf0) == 0xe0) { /* 16 <= len < 32 */
-+ len = 0x10 | (val & 0x0f);
-+ bits -= 8;
-+ i++;
-+ } else {
-+ bits -= 8;
-+ val = (val << 8) | getbyte(ibuf, ++i, l);
-+ if ((val & 0xf800) == 0xf000) { /* 32 <= len < 64 */
-+ len = 0x0020 | ((val >> 6) & 0x001f);
-+ bits -= 2;
-+ getbits(ibuf, 2 , &i ,&l);
-+ } else if ((val & 0xfc00) == 0xf800) { /* 64 <= len < 128 */
-+ len = 0x0040 | ((val >> 4) & 0x003f);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xfe00) == 0xfc00) { /* 128 <= len < 256 */
-+ len = 0x0080 | ((val >> 2) & 0x007f);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xff00) == 0xfe00) { /* 256 <= len < 512 */
-+ len = 0x0100 | (val & 0x00ff);
-+ bits -= 8;
-+ i++;
-+ } else {
-+ bits -= 8;
-+ val = (val << 8) | getbyte(ibuf, ++i, l);
-+ if ((val & 0xff8000) == 0xff0000) { /* 512 <= len < 1024 */
-+ len = 0x000200 | ((val >> 6) & 0x0001ff);
-+ bits -= 2;
-+ getbits(ibuf, 2 , &i ,&l);
-+ } else if ((val & 0xffc000) == 0xff8000) {/* 1024 <= len < 2048 */
-+ len = 0x000400 | ((val >> 4) & 0x0003ff);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xffe000) == 0xffc000) {/* 2048 <= len < 4096 */
-+ len = 0x000800 | ((val >> 2) & 0x0007ff);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xfff000) == 0xffe000) {/* 4096 <= len < 8192 */
-+ len = 0x001000 | (val & 0x000fff);
-+ bits -= 8;
-+ i++;
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong length code: 0x%X\n",
-+ __FUNCTION__, state->unit, val);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ }
-+ s = state->hist + state->histptr;
-+ state->histptr += len;
-+ olen += len;
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed bytes to the history */
-+
-+ /* In some cases len may be greater than off. It means that memory
-+ * areas pointed by s and s-off overlap. I had used memmove() here
-+ * because I thought that it acts as libc's version. Unfortunately,
-+ * I was wrong. :-) I got strange errors sometimes. Wilfried suggested
-+ * using of byte by byte copying here and strange errors disappeared.
-+ */
-+ lamecopy(s, s - off, len);
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+
-+ /* Do PFC decompression */
-+ len = olen;
-+ if ((history[0] & 0x01) != 0) {
-+ obuf[0] = 0;
-+ obuf++;
-+ len++;
-+ }
-+
-+ if (len <= osize) {
-+ /* copy uncompressed packet to the output buffer */
-+ memcpy(obuf, history, olen);
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: too big uncompressed packet: %d\n",
-+ __FUNCTION__, state->unit, len + (PPP_HDRLEN / 2));
-+ return DECOMP_ERROR;
-+ }
-+
-+ return (int) len;
-+}
-+
-+int
-+mppe_decompress(void *arg, unsigned char *ibuf, int isize,
-+ unsigned char *obuf, int osize)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+ int seq, bits, uncomplen;
-+
-+ if (isize <= PPP_HDRLEN + MPPE_OVHD) {
-+ if (state->debug) {
-+ printk(KERN_DEBUG "%s%d: short packet (len=%d)\n", __FUNCTION__,
-+ state->unit, isize);
-+ }
-+ return DECOMP_ERROR;
-+ }
-+
-+ /* Get coherency counter and control bits from input buffer */
-+ seq = MPPE_CCOUNT(ibuf);
-+ bits = MPPE_BITS(ibuf);
-+
-+ if (state->stateless) {
-+ /* RFC 3078, sec 8.1. */
-+ mppe_increase_ccount(state);
-+ if ((seq != state->ccount) && state->debug)
-+ printk(KERN_DEBUG "%s%d: bad sequence number: %d, expected: %d\n",
-+ __FUNCTION__, state->unit, seq, state->ccount);
-+ while (seq != state->ccount)
-+ mppe_increase_ccount(state);
-+ } else {
-+ /* RFC 3078, sec 8.2. */
-+ if (state->flushexpected) { /* discard state */
-+ if ((bits & MPPE_BIT_FLUSHED)) { /* we received expected FLUSH bit */
-+ while (seq != state->ccount)
-+ mppe_increase_ccount(state);
-+ state->flushexpected = 0;
-+ } else /* drop packet*/
-+ return DECOMP_ERROR;
-+ } else { /* normal state */
-+ mppe_increase_ccount(state);
-+ if (seq != state->ccount) {
-+ /* Packet loss detected, enter the discard state. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: bad sequence number: %d, expected: %d\n",
-+ __FUNCTION__, state->unit, seq, state->ccount);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ if (state->mppe && (bits & MPPE_BIT_FLUSHED)) {
-+ arc4_setkey(state, state->session_key, state->keylen);
-+ }
-+ }
-+
-+ if (state->mppc && (bits & (MPPE_BIT_FLUSHED | MPPE_BIT_RESET))) {
-+ state->histptr = MPPE_HIST_LEN;
-+ if ((bits & MPPE_BIT_FLUSHED)) {
-+ memset(state->hist + MPPE_HIST_LEN, 0, MPPE_HIST_LEN*sizeof(u8));
-+ } else
-+ if ((bits & MPPE_BIT_RESET)) {
-+ memcpy(state->hist, state->hist + MPPE_HIST_LEN, MPPE_HIST_LEN);
-+ }
-+ }
-+
-+ /* Fill in the first part of the PPP header. The protocol field
-+ comes from the decompressed data. */
-+ obuf[0] = PPP_ADDRESS(ibuf);
-+ obuf[1] = PPP_CONTROL(ibuf);
-+ obuf += PPP_HDRLEN / 2;
-+
-+ if (state->mppe) { /* process encrypted packet */
-+ if ((bits & MPPE_BIT_ENCRYPTED)) {
-+ /* OK, packet encrypted, so decrypt it */
-+ if (state->mppc && (bits & MPPE_BIT_COMP)) {
-+ /* Hack warning !!! RC4 implementation which we use does
-+ decryption "in place" - it means that input and output
-+ buffers can be *the same* memory area. Therefore we don't
-+ need to use a temporary buffer. But be careful - other
-+ implementations don't have to be so nice. */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2), ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2));
-+ uncomplen = mppc_decompress(state, ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2), obuf, isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2),
-+ osize - (PPP_HDRLEN / 2));
-+ if (uncomplen == DECOMP_ERROR) {
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ uncomplen += PPP_HDRLEN / 2;
-+ (state->stats).comp_bytes += isize;
-+ (state->stats).comp_packets++;
-+ } else {
-+ uncomplen = isize - MPPE_OVHD;
-+ /* Decrypt the first byte in order to check if it is
-+ compressed or uncompressed protocol field */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), 1, obuf);
-+ /* Do PFC decompression */
-+ if ((obuf[0] & 0x01) != 0) {
-+ obuf[1] = obuf[0];
-+ obuf[0] = 0;
-+ obuf++;
-+ uncomplen++;
-+ }
-+ /* And finally, decrypt the rest of the frame. */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2) + 1,
-+ isize - PPP_HDRLEN - (MPPE_OVHD / 2) - 1, obuf + 1);
-+ (state->stats).inc_bytes += isize;
-+ (state->stats).inc_packets++;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: encryption negotiated but not an "
-+ "encrypted packet received\n", __FUNCTION__, state->unit);
-+ mppe_change_key(state, 0);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ } else {
-+ if (state->mppc) { /* no MPPE, only MPPC */
-+ if ((bits & MPPE_BIT_COMP)) {
-+ uncomplen = mppc_decompress(state, ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2), obuf, isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2),
-+ osize - (PPP_HDRLEN / 2));
-+ if (uncomplen == DECOMP_ERROR) {
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ uncomplen += PPP_HDRLEN / 2;
-+ (state->stats).comp_bytes += isize;
-+ (state->stats).comp_packets++;
-+ } else {
-+ memcpy(obuf, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2));
-+ uncomplen = isize - MPPE_OVHD;
-+ (state->stats).inc_bytes += isize;
-+ (state->stats).inc_packets++;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: error - not an MPPC or MPPE frame "
-+ "received\n", __FUNCTION__, state->unit);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ }
-+
-+ (state->stats).unc_bytes += uncomplen;
-+ (state->stats).unc_packets++;
-+
-+ return uncomplen;
-+}
-+
-+
-+/************************************************************
-+ * Module interface table
-+ ************************************************************/
-+
-+/* These are in ppp_generic.c */
-+extern int ppp_register_compressor (struct compressor *cp);
-+extern void ppp_unregister_compressor (struct compressor *cp);
-+
-+/*
-+ * Functions exported to ppp_generic.c.
-+ *
-+ * In case of MPPC/MPPE there is no need to process incompressible data
-+ * because such a data is sent in MPPC/MPPE frame. Therefore the (*incomp)
-+ * callback function isn't needed.
-+ */
-+struct compressor ppp_mppe = {
-+ .compress_proto = CI_MPPE,
-+ .comp_alloc = mppe_comp_alloc,
-+ .comp_free = mppe_comp_free,
-+ .comp_init = mppe_comp_init,
-+ .comp_reset = mppe_comp_reset,
-+ .compress = mppe_compress,
-+ .comp_stat = mppe_stats,
-+ .decomp_alloc = mppe_decomp_alloc,
-+ .decomp_free = mppe_comp_free,
-+ .decomp_init = mppe_decomp_init,
-+ .decomp_reset = mppe_decomp_reset,
-+ .decompress = mppe_decompress,
-+ .incomp = NULL,
-+ .decomp_stat = mppe_stats,
-+ .owner = THIS_MODULE
-+};
-+
-+/************************************************************
-+ * Module support routines
-+ ************************************************************/
-+
-+int __init mppe_module_init(void)
-+{
-+ int answer;
-+
-+ if (!(crypto_alg_available("arc4", 0) && crypto_alg_available("sha1", 0))) {
-+ printk(KERN_ERR "Kernel doesn't provide ARC4 and/or SHA1 algorithms "
-+ "required by MPPE/MPPC. Check CryptoAPI configuration.\n");
-+ return -ENODEV;
-+ }
-+
-+ /* Allocate space for SHAPad1, SHAPad2 and ... */
-+ sha_pad = kmalloc(sizeof(struct sha_pad), GFP_KERNEL);
-+ if (sha_pad == NULL)
-+ return -ENOMEM;
-+ /* ... initialize them */
-+ memset(sha_pad->sha_pad1, 0x00, sizeof(sha_pad->sha_pad1));
-+ memset(sha_pad->sha_pad2, 0xf2, sizeof(sha_pad->sha_pad2));
-+
-+ answer = ppp_register_compressor(&ppp_mppe);
-+ if (answer == 0) {
-+ printk(KERN_INFO "MPPE/MPPC encryption/compression module registered\n");
-+ }
-+ return answer;
-+}
-+
-+void __exit mppe_module_cleanup(void)
-+{
-+ kfree(sha_pad);
-+ ppp_unregister_compressor(&ppp_mppe);
-+ printk(KERN_INFO "MPPE/MPPC encryption/compression module unregistered\n");
-+}
-+
-+module_init(mppe_module_init);
-+module_exit(mppe_module_cleanup);
-+
-+MODULE_AUTHOR("Jan Dubiec <jdx@slackware.pl>");
-+MODULE_DESCRIPTION("MPPE/MPPC encryption/compression module for Linux");
-+MODULE_VERSION("1.2");
-+MODULE_LICENSE("Dual BSD/GPL");
-+MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE));
-diff -ruN linux-2.6.12.orig/include/linux/ppp-comp.h linux-2.6.12/include/linux/ppp-comp.h
---- linux-2.6.12.orig/include/linux/ppp-comp.h 2004-12-24 22:33:47.000000000 +0100
-+++ linux-2.6.12/include/linux/ppp-comp.h 2005-06-28 20:07:01.000000000 +0200
-@@ -28,7 +28,7 @@
- */
-
- /*
-- * ==FILEVERSION 980319==
-+ * ==FILEVERSION 20040509==
- *
- * NOTE TO MAINTAINERS:
- * If you modify this file at all, please set the above date.
-@@ -80,7 +80,7 @@
-
- /* Compress a packet */
- int (*compress) (void *state, unsigned char *rptr,
-- unsigned char *obuf, int isize, int osize);
-+ unsigned char *obuf, int isize, int osize);
-
- /* Return compression statistics */
- void (*comp_stat) (void *state, struct compstat *stats);
-@@ -101,7 +101,7 @@
-
- /* Decompress a packet. */
- int (*decompress) (void *state, unsigned char *ibuf, int isize,
-- unsigned char *obuf, int osize);
-+ unsigned char *obuf, int osize);
-
- /* Update state for an incompressible packet received */
- void (*incomp) (void *state, unsigned char *ibuf, int icnt);
-@@ -191,6 +191,42 @@
- #define DEFLATE_CHK_SEQUENCE 0
-
- /*
-+ * Definitions for MPPE/MPPC.
-+ */
-+
-+#define CI_MPPE 18 /* config option for MPPE */
-+#define CILEN_MPPE 6 /* length of config option */
-+
-+#define MPPE_OVHD 4 /* MPPE overhead */
-+#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */
-+
-+#define MPPE_STATELESS 0x01 /* configuration bit H */
-+#define MPPE_40BIT 0x20 /* configuration bit L */
-+#define MPPE_56BIT 0x80 /* configuration bit M */
-+#define MPPE_128BIT 0x40 /* configuration bit S */
-+#define MPPE_MPPC 0x01 /* configuration bit C */
-+
-+/*
-+ * Definitions for Stac LZS.
-+ */
-+
-+#define CI_LZS 17 /* config option for Stac LZS */
-+#define CILEN_LZS 5 /* length of config option */
-+
-+#define LZS_OVHD 4 /* max. LZS overhead */
-+#define LZS_HIST_LEN 2048 /* LZS history size */
-+#define LZS_MAX_CCOUNT 0x0FFF /* max. coherency counter value */
-+
-+#define LZS_MODE_NONE 0
-+#define LZS_MODE_LCB 1
-+#define LZS_MODE_CRC 2
-+#define LZS_MODE_SEQ 3
-+#define LZS_MODE_EXT 4
-+
-+#define LZS_EXT_BIT_FLUSHED 0x80 /* bit A */
-+#define LZS_EXT_BIT_COMP 0x20 /* bit C */
-+
-+/*
- * Definitions for other, as yet unsupported, compression methods.
- */
-
diff --git a/packages/linux/linux-dht-walnut-2.6.12.6/ppc_40x_uboot.patch b/packages/linux/linux-dht-walnut-2.6.12.6/ppc_40x_uboot.patch
deleted file mode 100644
index fcb700c5b4..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12.6/ppc_40x_uboot.patch
+++ /dev/null
@@ -1,693 +0,0 @@
-diff-tree 3e9e7c1d0b7a36fb8affb973a054c5098e27baa8 (from 90eb2665841d7b444602736e2141a01c948f75b1)
-Author: Matt Porter <mporter@kernel.crashing.org>
-Date: Mon Nov 7 00:58:15 2005 -0800
-
- [PATCH] ppc32: cleanup AMCC PPC40x eval boards to support U-Boot
-
- Cleanup PPC40x eval boards (bubinga, walnut and sycamore) to support U-Boot
- as bootloader. The OpenBIOS bd_info struct is not used in the kernel
- anymore (only U-Boot now).
-
- uImage (U-Boot) tested on walnut, sycamore and bubinga
- zImage (OpenBIOS) tested on sycamore, bubinga and ebony
-
- Signed-off-by: Stefan Roese <sr@denx.de>
- Signed-off-by: Matt Porter <mporter@kernel.crashing.org>
- Signed-off-by: Andrew Morton <akpm@osdl.org>
- Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-
-diff --git a/arch/ppc/boot/simple/Makefile b/arch/ppc/boot/simple/Makefile
-index ff0904e..82df88b 100644
---- a/arch/ppc/boot/simple/Makefile
-+++ b/arch/ppc/boot/simple/Makefile
-@@ -67,6 +67,12 @@ zimageinitrd-$(CONFIG_BAMBOO) := zImage
- entrypoint-$(CONFIG_BAMBOO) := 0x01000000
- extra.o-$(CONFIG_BAMBOO) := pibs.o
-
-+ zimage-$(CONFIG_BUBINGA) := zImage-TREE
-+zimageinitrd-$(CONFIG_BUBINGA) := zImage.initrd-TREE
-+ end-$(CONFIG_BUBINGA) := bubinga
-+ entrypoint-$(CONFIG_BUBINGA) := 0x01000000
-+ extra.o-$(CONFIG_BUBINGA) := openbios.o
-+
- zimage-$(CONFIG_EBONY) := zImage-TREE
- zimageinitrd-$(CONFIG_EBONY) := zImage.initrd-TREE
- end-$(CONFIG_EBONY) := ebony
-@@ -91,6 +97,18 @@ zimageinitrd-$(CONFIG_OCOTEA) := zImage
- entrypoint-$(CONFIG_OCOTEA) := 0x01000000
- extra.o-$(CONFIG_OCOTEA) := pibs.o
-
-+ zimage-$(CONFIG_SYCAMORE) := zImage-TREE
-+zimageinitrd-$(CONFIG_SYCAMORE) := zImage.initrd-TREE
-+ end-$(CONFIG_SYCAMORE) := sycamore
-+ entrypoint-$(CONFIG_SYCAMORE) := 0x01000000
-+ extra.o-$(CONFIG_SYCAMORE) := openbios.o
-+
-+ zimage-$(CONFIG_WALNUT) := zImage-TREE
-+zimageinitrd-$(CONFIG_WALNUT) := zImage.initrd-TREE
-+ end-$(CONFIG_WALNUT) := walnut
-+ entrypoint-$(CONFIG_WALNUT) := 0x01000000
-+ extra.o-$(CONFIG_WALNUT) := openbios.o
-+
- extra.o-$(CONFIG_EV64260) := misc-ev64260.o
- end-$(CONFIG_EV64260) := ev64260
- cacheflag-$(CONFIG_EV64260) := -include $(clear_L2_L3)
-@@ -168,7 +186,8 @@ OBJCOPY_ARGS := -O elf32-powerpc
-
- # head.o and relocate.o must be at the start.
- boot-y := head.o relocate.o $(extra.o-y) $(misc-y)
--boot-$(CONFIG_40x) += embed_config.o
-+boot-$(CONFIG_REDWOOD_5) += embed_config.o
-+boot-$(CONFIG_REDWOOD_6) += embed_config.o
- boot-$(CONFIG_8xx) += embed_config.o
- boot-$(CONFIG_8260) += embed_config.o
- boot-$(CONFIG_BSEIP) += iic.o
-diff --git a/arch/ppc/boot/simple/misc.c b/arch/ppc/boot/simple/misc.c
-index e02de5b..f415d6c 100644
---- a/arch/ppc/boot/simple/misc.c
-+++ b/arch/ppc/boot/simple/misc.c
-@@ -23,7 +23,7 @@
- #include <asm/page.h>
- #include <asm/mmu.h>
- #include <asm/bootinfo.h>
--#ifdef CONFIG_44x
-+#ifdef CONFIG_4xx
- #include <asm/ibm4xx.h>
- #endif
- #include <asm/reg.h>
-@@ -88,6 +88,14 @@ get_mem_size(void)
- return 0;
- }
-
-+#if defined(CONFIG_40x)
-+#define PPC4xx_EMAC0_MR0 EMAC0_BASE
-+#endif
-+
-+#if defined(CONFIG_44x) && defined(PPC44x_EMAC0_MR0)
-+#define PPC4xx_EMAC0_MR0 PPC44x_EMAC0_MR0
-+#endif
-+
- struct bi_record *
- decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
- {
-@@ -103,13 +111,13 @@ decompress_kernel(unsigned long load_add
- com_port = serial_init(0, NULL);
- #endif
-
--#if defined(CONFIG_44x) && defined(PPC44x_EMAC0_MR0)
-+#if defined(PPC4xx_EMAC0_MR0)
- /* Reset MAL */
- mtdcr(DCRN_MALCR(DCRN_MAL_BASE), MALCR_MMSR);
- /* Wait for reset */
- while (mfdcr(DCRN_MALCR(DCRN_MAL_BASE)) & MALCR_MMSR) {};
- /* Reset EMAC */
-- *(volatile unsigned long *)PPC44x_EMAC0_MR0 = 0x20000000;
-+ *(volatile unsigned long *)PPC4xx_EMAC0_MR0 = 0x20000000;
- __asm__ __volatile__("eieio");
- #endif
-
-@@ -164,7 +172,9 @@ decompress_kernel(unsigned long load_add
- puts(" "); puthex((unsigned long)(&__ramdisk_end));puts("\n");
- }
-
-+#ifndef CONFIG_40x /* don't overwrite the 40x image located at 0x00400000! */
- avail_ram = (char *)0x00400000;
-+#endif
- end_avail = (char *)0x00800000;
- puts("avail ram: "); puthex((unsigned long)avail_ram); puts(" ");
- puthex((unsigned long)end_avail); puts("\n");
-diff --git a/arch/ppc/boot/simple/openbios.c b/arch/ppc/boot/simple/openbios.c
-index c732b6d..81f11d8 100644
---- a/arch/ppc/boot/simple/openbios.c
-+++ b/arch/ppc/boot/simple/openbios.c
-@@ -1,19 +1,43 @@
- /*
- * arch/ppc/boot/simple/openbios.c
- *
-- * 2005 (c) SYSGO AG - g.jaeger@sysgo.com
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * 2005 (c) SYSGO AG - g.jaeger@sysgo.com
-+ *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without
- * any warranty of any kind, whether express or implied.
- *
-- * Derived from arch/ppc/boot/simple/pibs.c (from MontaVista)
- */
-
- #include <linux/types.h>
- #include <linux/config.h>
- #include <linux/string.h>
- #include <asm/ppcboot.h>
--#include <platforms/4xx/ebony.h>
-+#include <asm/ibm4xx.h>
-+#include <asm/reg.h>
-+#ifdef CONFIG_40x
-+#include <asm/io.h>
-+#endif
-+
-+#if defined(CONFIG_BUBINGA)
-+#define BOARD_INFO_VECTOR 0xFFF80B50 /* openbios 1.19 moved this vector down - armin */
-+#else
-+#define BOARD_INFO_VECTOR 0xFFFE0B50
-+#endif
-+
-+#ifdef CONFIG_40x
-+/* Supply a default Ethernet address for those eval boards that don't
-+ * ship with one. This is an address from the MBX board I have, so
-+ * it is unlikely you will find it on your network.
-+ */
-+static ushort def_enet_addr[] = { 0x0800, 0x3e26, 0x1559 };
-+
-+extern unsigned long timebase_period_ns;
-+#endif /* CONFIG_40x */
-
- extern unsigned long decompress_kernel(unsigned long load_addr, int num_words,
- unsigned long cksum);
-@@ -23,15 +47,85 @@ extern unsigned long decompress_kernel(u
- bd_t hold_resid_buf __attribute__ ((__section__ (".data.boot")));
- bd_t *hold_residual = &hold_resid_buf;
-
-+typedef struct openbios_board_info {
-+ unsigned char bi_s_version[4]; /* Version of this structure */
-+ unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-+ unsigned int bi_memsize; /* DRAM installed, in bytes */
-+#ifdef CONFIG_405EP
-+ unsigned char bi_enetaddr[2][6]; /* Local Ethernet MAC address */
-+#else /* CONFIG_405EP */
-+ unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-+#endif /* CONFIG_405EP */
-+ unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-+ unsigned int bi_intfreq; /* Processor speed, in Hz */
-+ unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-+ unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
-+#ifdef CONFIG_405EP
-+ unsigned int bi_opb_busfreq; /* OPB Bus speed, in Hz */
-+ unsigned int bi_pllouta_freq; /* PLL OUTA speed, in Hz */
-+#endif /* CONFIG_405EP */
-+} openbios_bd_t;
-+
- void *
- load_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
- void *ign1, void *ign2)
- {
-- decompress_kernel(load_addr, num_words, cksum);
-+#ifdef CONFIG_40x
-+ openbios_bd_t *openbios_bd = NULL;
-+ openbios_bd_t *(*get_board_info)(void) =
-+ (openbios_bd_t *(*)(void))(*(unsigned long *)BOARD_INFO_VECTOR);
-+
-+ /*
-+ * On 40x platforms we not only need the MAC-addresses, but also the
-+ * clocks and memsize. Now try to get all values using the OpenBIOS
-+ * "get_board_info()" callback.
-+ */
-+ if ((openbios_bd = get_board_info()) != NULL) {
-+ /*
-+ * Copy bd_info from OpenBIOS struct into U-Boot struct
-+ * used by kernel
-+ */
-+ hold_residual->bi_memsize = openbios_bd->bi_memsize;
-+ hold_residual->bi_intfreq = openbios_bd->bi_intfreq;
-+ hold_residual->bi_busfreq = openbios_bd->bi_busfreq;
-+ hold_residual->bi_pci_busfreq = openbios_bd->bi_pci_busfreq;
-+ memcpy(hold_residual->bi_pci_enetaddr, openbios_bd->bi_pci_enetaddr, 6);
-+#ifdef CONFIG_405EP
-+ memcpy(hold_residual->bi_enetaddr, openbios_bd->bi_enetaddr[0], 6);
-+ memcpy(hold_residual->bi_enet1addr, openbios_bd->bi_enetaddr[1], 6);
-+ hold_residual->bi_opbfreq = openbios_bd->bi_opb_busfreq;
-+ hold_residual->bi_procfreq = openbios_bd->bi_pllouta_freq;
-+#else /* CONFIG_405EP */
-+ memcpy(hold_residual->bi_enetaddr, openbios_bd->bi_enetaddr, 6);
-+#endif /* CONFIG_405EP */
-+ } else {
-+ /* Hmmm...better try to stuff some defaults.
-+ */
-+ hold_residual->bi_memsize = 16 * 1024 * 1024;
-+ hold_residual->bi_intfreq = 200000000;
-+ hold_residual->bi_busfreq = 100000000;
-+ hold_residual->bi_pci_busfreq = 66666666;
-+
-+ /*
-+ * Only supply one mac-address in this fallback
-+ */
-+ memcpy(hold_residual->bi_enetaddr, (void *)def_enet_addr, 6);
-+#ifdef CONFIG_405EP
-+ hold_residual->bi_opbfreq = 50000000;
-+ hold_residual->bi_procfreq = 200000000;
-+#endif /* CONFIG_405EP */
-+ }
-+
-+ timebase_period_ns = 1000000000 / hold_residual->bi_intfreq;
-+#endif /* CONFIG_40x */
-
-+#ifdef CONFIG_440GP
- /* simply copy the MAC addresses */
-- memcpy(hold_residual->bi_enetaddr, (char *)EBONY_OPENBIOS_MAC_BASE, 6);
-- memcpy(hold_residual->bi_enet1addr, (char *)(EBONY_OPENBIOS_MAC_BASE+EBONY_OPENBIOS_MAC_OFFSET), 6);
-+ memcpy(hold_residual->bi_enetaddr, (char *)OPENBIOS_MAC_BASE, 6);
-+ memcpy(hold_residual->bi_enet1addr, (char *)(OPENBIOS_MAC_BASE+OPENBIOS_MAC_OFFSET), 6);
-+#endif /* CONFIG_440GP */
-+
-+ decompress_kernel(load_addr, num_words, cksum);
-
- return (void *)hold_residual;
- }
-diff --git a/arch/ppc/platforms/4xx/Kconfig b/arch/ppc/platforms/4xx/Kconfig
-index e70e4c6..d883791 100644
---- a/arch/ppc/platforms/4xx/Kconfig
-+++ b/arch/ppc/platforms/4xx/Kconfig
-@@ -225,7 +225,7 @@ config EMBEDDEDBOOT
-
- config IBM_OPENBIOS
- bool
-- depends on ASH || BUBINGA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
-+ depends on ASH || REDWOOD_5 || REDWOOD_6
- default y
-
- config PPC4xx_DMA
-diff --git a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c
-index 3678abf..8110f55 100644
---- a/arch/ppc/platforms/4xx/bubinga.c
-+++ b/arch/ppc/platforms/4xx/bubinga.c
-@@ -89,7 +89,7 @@ bubinga_early_serial_map(void)
- * by 16.
- */
- uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV);
-- uart_clock = __res.bi_pllouta_freq / uart_div;
-+ uart_clock = __res.bi_procfreq / uart_div;
-
- /* Setup serial port access */
- memset(&port, 0, sizeof(port));
-diff --git a/arch/ppc/platforms/4xx/bubinga.h b/arch/ppc/platforms/4xx/bubinga.h
-index b1df856..b5380cf 100644
---- a/arch/ppc/platforms/4xx/bubinga.h
-+++ b/arch/ppc/platforms/4xx/bubinga.h
-@@ -1,52 +1,34 @@
- /*
-- * Support for IBM PPC 405EP evaluation board (Bubinga).
-+ * arch/ppc/platforms/4xx/bubinga.h
- *
-- * Author: SAW (IBM), derived from walnut.h.
-- * Maintained by MontaVista Software <source@mvista.com>
-+ * Bubinga board definitions
-+ *
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * SAW (IBM)
-+ * 2003 (c) MontaVista Softare Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2003 (c) MontaVista Softare Inc. This file is licensed under the
-- * terms of the GNU General Public License version 2. This program is
-- * licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __BUBINGA_H__
- #define __BUBINGA_H__
-
--/* 405EP */
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405ep.h>
--
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[2][6]; /* Local Ethernet MAC address */ unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
-- unsigned int bi_opb_busfreq; /* OPB Bus speed, in Hz */
-- unsigned int bi_pllouta_freq; /* PLL OUTA speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
-+#include <asm/ppcboot.h>
-
- /* Memory map for the Bubinga board.
- * Generic 4xx plus RTC.
- */
-
--extern void *bubinga_rtc_base;
- #define BUBINGA_RTC_PADDR ((uint)0xf0000000)
- #define BUBINGA_RTC_VADDR BUBINGA_RTC_PADDR
- #define BUBINGA_RTC_SIZE ((uint)8*1024)
-@@ -58,12 +40,18 @@ extern void *bubinga_rtc_base;
- * for typical configurations at various CPU speeds.
- * The base baud is calculated as (FWDA / EXT UART DIV / 16)
- */
--#define BASE_BAUD 0
-+#define BASE_BAUD 0
-
--#define BUBINGA_FPGA_BASE 0xF0300000
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 1 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-
--#define PPC4xx_MACHINE_NAME "IBM Bubinga"
-+#define PPC4xx_MACHINE_NAME "IBM Bubinga"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __BUBINGA_H__ */
- #endif /* __KERNEL__ */
-diff --git a/arch/ppc/platforms/4xx/ebony.h b/arch/ppc/platforms/4xx/ebony.h
-index d08faa4..b91ad42 100644
---- a/arch/ppc/platforms/4xx/ebony.h
-+++ b/arch/ppc/platforms/4xx/ebony.h
-@@ -24,8 +24,8 @@
- #define PPC44x_EMAC0_MR0 0xE0000800
-
- /* Where to find the MAC info */
--#define EBONY_OPENBIOS_MAC_BASE 0xfffffe0c
--#define EBONY_OPENBIOS_MAC_OFFSET 0x0c
-+#define OPENBIOS_MAC_BASE 0xfffffe0c
-+#define OPENBIOS_MAC_OFFSET 0x0c
-
- /* Default clock rates for Rev. B and Rev. C silicon */
- #define EBONY_440GP_RB_SYSCLK 33000000
-diff --git a/arch/ppc/platforms/4xx/sycamore.c b/arch/ppc/platforms/4xx/sycamore.c
-index d8019ee..281b4a2 100644
---- a/arch/ppc/platforms/4xx/sycamore.c
-+++ b/arch/ppc/platforms/4xx/sycamore.c
-@@ -88,9 +88,6 @@ ppc405_map_irq(struct pci_dev *dev, unsi
- void __init
- sycamore_setup_arch(void)
- {
--#define SYCAMORE_PS2_BASE 0xF0100000
--#define SYCAMORE_FPGA_BASE 0xF0300000
--
- void *fpga_brdc;
- unsigned char fpga_brdc_data;
- void *fpga_enable;
-@@ -100,7 +97,7 @@ sycamore_setup_arch(void)
-
- ppc4xx_setup_arch();
-
-- ibm_ocp_set_emac(0, 1);
-+ ibm_ocp_set_emac(0, 0);
-
- kb_data = ioremap(SYCAMORE_PS2_BASE, 8);
- if (!kb_data) {
-@@ -111,7 +108,7 @@ sycamore_setup_arch(void)
-
- kb_cs = kb_data + 1;
-
-- fpga_status = ioremap(SYCAMORE_FPGA_BASE, 8);
-+ fpga_status = ioremap(PPC40x_FPGA_BASE, 8);
- if (!fpga_status) {
- printk(KERN_CRIT
- "sycamore_setup_arch() fpga_status ioremap failed\n");
-diff --git a/arch/ppc/platforms/4xx/sycamore.h b/arch/ppc/platforms/4xx/sycamore.h
-index 3e7b4e2..1cd6c82 100644
---- a/arch/ppc/platforms/4xx/sycamore.h
-+++ b/arch/ppc/platforms/4xx/sycamore.h
-@@ -1,67 +1,52 @@
- /*
- * arch/ppc/platforms/4xx/sycamore.h
- *
-- * Macros, definitions, and data structures specific to the IBM PowerPC
-- * 405GPr "Sycamore" evaluation board.
-+ * Sycamore board definitions
- *
-- * Author: Armin Kuster <akuster@mvista.com>
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * Armin Kuster <akuster@mvista.com>
-+ * 2000 (c) MontaVista, Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2000 (c) MontaVista, Software, Inc. This file is licensed under
-- * the terms of the GNU General Public License version 2. This program
-- * is licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __ASM_SYCAMORE_H__
- #define __ASM_SYCAMORE_H__
-
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405gpr.h>
-+#include <asm/ppcboot.h>
-
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's "Sycamore" evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-- unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
--
--/* Memory map for the IBM "Sycamore" 405GP evaluation board.
-+/* Memory map for the IBM "Sycamore" 405GPr evaluation board.
- * Generic 4xx plus RTC.
- */
-
--extern void *sycamore_rtc_base;
- #define SYCAMORE_RTC_PADDR ((uint)0xf0000000)
- #define SYCAMORE_RTC_VADDR SYCAMORE_RTC_PADDR
--#define SYCAMORE_RTC_SIZE ((uint)8*1024)
-+#define SYCAMORE_RTC_SIZE ((uint)8*1024)
-
--#ifdef CONFIG_PPC405GP_INTERNAL_CLOCK
--#define BASE_BAUD 201600
--#else
- #define BASE_BAUD 691200
--#endif
-
--#define SYCAMORE_PS2_BASE 0xF0100000
--#define SYCAMORE_FPGA_BASE 0xF0300000
-+#define SYCAMORE_PS2_BASE 0xF0100000
-+
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 5 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-
- #define PPC4xx_MACHINE_NAME "IBM Sycamore"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __ASM_SYCAMORE_H__ */
- #endif /* __KERNEL__ */
-diff --git a/arch/ppc/platforms/4xx/walnut.c b/arch/ppc/platforms/4xx/walnut.c
-index a33eda4..74cb331 100644
---- a/arch/ppc/platforms/4xx/walnut.c
-+++ b/arch/ppc/platforms/4xx/walnut.c
-@@ -90,7 +90,7 @@ walnut_setup_arch(void)
-
- kb_cs = kb_data + 1;
-
-- fpga_status = ioremap(WALNUT_FPGA_BASE, 8);
-+ fpga_status = ioremap(PPC40x_FPGA_BASE, 8);
- if (!fpga_status) {
- printk(KERN_CRIT
- "walnut_setup_arch() fpga_status ioremap failed\n");
-diff --git a/arch/ppc/platforms/4xx/walnut.h b/arch/ppc/platforms/4xx/walnut.h
-index 04cfbf3..dcf2691 100644
---- a/arch/ppc/platforms/4xx/walnut.h
-+++ b/arch/ppc/platforms/4xx/walnut.h
-@@ -1,72 +1,55 @@
- /*
- * arch/ppc/platforms/4xx/walnut.h
- *
-- * Macros, definitions, and data structures specific to the IBM PowerPC
-- * 405GP "Walnut" evaluation board.
-+ * Walnut board definitions
- *
-- * Authors: Grant Erickson <grant@lcse.umn.edu>, Frank Rowand
-- * <frank_rowand@mvista.com>, Debbie Chu <debbie_chu@mvista.com> or
-- * source@mvista.com
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
- *
-- * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu>
-+ * Based on original work by
-+ * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu>
-+ * Frank Rowand <frank_rowand@mvista.com>
-+ * Debbie Chu <debbie_chu@mvista.com>
-+ * 2000 (c) MontaVista, Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2000 (c) MontaVista, Software, Inc. This file is licensed under
-- * the terms of the GNU General Public License version 2. This program
-- * is licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __ASM_WALNUT_H__
- #define __ASM_WALNUT_H__
-
--/* We have a 405GP core */
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405gp.h>
--
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's "Walnut" evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-- unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
-+#include <asm/ppcboot.h>
-
- /* Memory map for the IBM "Walnut" 405GP evaluation board.
- * Generic 4xx plus RTC.
- */
-
--extern void *walnut_rtc_base;
- #define WALNUT_RTC_PADDR ((uint)0xf0000000)
- #define WALNUT_RTC_VADDR WALNUT_RTC_PADDR
- #define WALNUT_RTC_SIZE ((uint)8*1024)
-
--#ifdef CONFIG_PPC405GP_INTERNAL_CLOCK
--#define BASE_BAUD 201600
--#else
- #define BASE_BAUD 691200
--#endif
-
- #define WALNUT_PS2_BASE 0xF0100000
--#define WALNUT_FPGA_BASE 0xF0300000
-+
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 5 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-+#define WALNUT_FPGA_BASE PPC40x_FPGA_BASE
-
- #define PPC4xx_MACHINE_NAME "IBM Walnut"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __ASM_WALNUT_H__ */
- #endif /* __KERNEL__ */
-diff --git a/include/asm-ppc/ibm_ocp.h b/include/asm-ppc/ibm_ocp.h
-index 6f10a25..9c21de1 100644
---- a/include/asm-ppc/ibm_ocp.h
-+++ b/include/asm-ppc/ibm_ocp.h
-@@ -131,9 +131,22 @@ static inline void ibm_ocp_set_emac(int
- /* Copy MAC addresses to EMAC additions */
- for (i=start; i<=end; i++) {
- def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i);
-- memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-- &__res.bi_enetaddr[i],
-- 6);
-+ if (i == 0)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enetaddr, 6);
-+#if defined(CONFIG_405EP) || defined(CONFIG_44x)
-+ else if (i == 1)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet1addr, 6);
-+#endif
-+#if defined(CONFIG_440GX)
-+ else if (i == 2)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet2addr, 6);
-+ else if (i == 3)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet3addr, 6);
-+#endif
- }
- }
- #endif
-diff --git a/include/asm-ppc/ppcboot.h b/include/asm-ppc/ppcboot.h
-index fe24e45..6b7b63f 100644
---- a/include/asm-ppc/ppcboot.h
-+++ b/include/asm-ppc/ppcboot.h
-@@ -73,8 +73,8 @@ typedef struct bd_info {
- #if defined(CONFIG_HYMOD)
- hymod_conf_t bi_hymod_conf; /* hymod configuration information */
- #endif
--#if defined(CONFIG_EVB64260) || defined(CONFIG_44x) || defined(CONFIG_85xx) ||\
-- defined(CONFIG_83xx)
-+#if defined(CONFIG_EVB64260) || defined(CONFIG_405EP) || defined(CONFIG_44x) || \
-+ defined(CONFIG_85xx) || defined(CONFIG_83xx)
- /* second onboard ethernet port */
- unsigned char bi_enet1addr[6];
- #endif
-@@ -96,5 +96,7 @@ typedef struct bd_info {
- #endif
- } bd_t;
-
-+#define bi_tbfreq bi_intfreq
-+
- #endif /* __ASSEMBLY__ */
- #endif /* __ASM_PPCBOOT_H__ */
diff --git a/packages/linux/linux-dht-walnut-2.6.12/dht-walnut_defconfig b/packages/linux/linux-dht-walnut-2.6.12/dht-walnut_defconfig
deleted file mode 100644
index 3cd0837ceb..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12/dht-walnut_defconfig
+++ /dev/null
@@ -1,1963 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.12
-# Sat May 13 19:38:16 2006
-#
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_HAVE_DEC_LOCK=y
-CONFIG_PPC=y
-CONFIG_PPC32=y
-CONFIG_GENERIC_NVRAM=y
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-# CONFIG_EPOLL is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Processor
-#
-# CONFIG_6xx is not set
-CONFIG_40x=y
-# CONFIG_44x is not set
-# CONFIG_POWER3 is not set
-# CONFIG_POWER4 is not set
-# CONFIG_8xx is not set
-# CONFIG_E500 is not set
-CONFIG_MATH_EMULATION=y
-# CONFIG_CPU_FREQ is not set
-CONFIG_4xx=y
-
-#
-# IBM 4xx options
-#
-# CONFIG_ASH is not set
-# CONFIG_BUBINGA is not set
-# CONFIG_CPCI405 is not set
-# CONFIG_EP405 is not set
-# CONFIG_OAK is not set
-# CONFIG_REDWOOD_5 is not set
-# CONFIG_REDWOOD_6 is not set
-# CONFIG_SYCAMORE is not set
-CONFIG_WALNUT=y
-# CONFIG_XILINX_ML300 is not set
-CONFIG_IBM405_ERR77=y
-CONFIG_IBM405_ERR51=y
-CONFIG_IBM_OCP=y
-CONFIG_BIOS_FIXUP=y
-CONFIG_405GP=y
-# CONFIG_PPC4xx_DMA is not set
-CONFIG_PPC_GEN550=y
-# CONFIG_PM is not set
-CONFIG_UART0_TTYS0=y
-# CONFIG_UART0_TTYS1 is not set
-CONFIG_NOT_COHERENT_CACHE=y
-
-#
-# Platform options
-#
-# CONFIG_PC_KEYBOARD is not set
-# CONFIG_SMP is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="ip=on"
-CONFIG_ISA_DMA_API=y
-
-#
-# Bus options
-#
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCI_LEGACY_PROC=y
-# CONFIG_PCI_NAMES is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_CARDBUS=y
-
-#
-# PC-card bridges
-#
-CONFIG_YENTA=m
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_TCIC=m
-CONFIG_PCCARD_NONSTATIC=m
-
-#
-# Advanced setup
-#
-# CONFIG_ADVANCED_OPTIONS is not set
-
-#
-# Default settings for advanced configuration options are used
-#
-CONFIG_HIGHMEM_START=0xfe000000
-CONFIG_LOWMEM_SIZE=0x30000000
-CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
-CONFIG_CONSISTENT_START=0xff100000
-CONFIG_CONSISTENT_SIZE=0x00200000
-CONFIG_BOOT_LOAD=0x00400000
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-# CONFIG_STANDALONE is not set
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=m
-CONFIG_MTD_PARTITIONS=y
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-# CONFIG_NFTL_RW is not set
-CONFIG_INFTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_AMDSTD_RETRY=0
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_CFI_UTIL=m
-CONFIG_MTD_RAM=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_PHYSMAP_START=0x8000000
-CONFIG_MTD_PHYSMAP_LEN=0x4000000
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-CONFIG_MTD_WALNUT=m
-CONFIG_MTD_PCI=m
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_PMC551=m
-CONFIG_MTD_PMC551_BUGFIX=y
-# CONFIG_MTD_PMC551_DEBUG is not set
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-CONFIG_MTD_DOC2000=m
-CONFIG_MTD_DOC2001=m
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-CONFIG_MTD_DOCECC=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_PC_PCMCIA is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=m
-CONFIG_PARIDE=m
-CONFIG_PARIDE_PARPORT=m
-
-#
-# Parallel IDE high-level drivers
-#
-CONFIG_PARIDE_PD=m
-CONFIG_PARIDE_PCD=m
-CONFIG_PARIDE_PF=m
-CONFIG_PARIDE_PT=m
-CONFIG_PARIDE_PG=m
-
-#
-# Parallel IDE protocol modules
-#
-CONFIG_PARIDE_ATEN=m
-CONFIG_PARIDE_BPCK=m
-CONFIG_PARIDE_BPCK6=m
-CONFIG_PARIDE_COMM=m
-CONFIG_PARIDE_DSTR=m
-CONFIG_PARIDE_FIT2=m
-CONFIG_PARIDE_FIT3=m
-CONFIG_PARIDE_EPAT=m
-# CONFIG_PARIDE_EPATC8 is not set
-CONFIG_PARIDE_EPIA=m
-CONFIG_PARIDE_FRIQ=m
-CONFIG_PARIDE_FRPW=m
-CONFIG_PARIDE_KBIC=m
-CONFIG_PARIDE_KTTI=m
-CONFIG_PARIDE_ON20=m
-CONFIG_PARIDE_ON26=m
-CONFIG_BLK_CPQ_DA=m
-CONFIG_BLK_CPQ_CISS_DA=m
-# CONFIG_CISS_SCSI_TAPE is not set
-CONFIG_BLK_DEV_DAC960=m
-CONFIG_BLK_DEV_UMEM=m
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_SX8=m
-CONFIG_BLK_DEV_UB=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_ATA_OVER_ETH=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-CONFIG_BLK_DEV_IDESCSI=m
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-CONFIG_BLK_DEV_OFFBOARD=y
-CONFIG_BLK_DEV_GENERIC=y
-CONFIG_BLK_DEV_OPTI621=m
-CONFIG_BLK_DEV_SL82C105=m
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_BLK_DEV_AEC62XX=m
-CONFIG_BLK_DEV_ALI15X3=m
-# CONFIG_WDC_ALI15X3 is not set
-CONFIG_BLK_DEV_AMD74XX=m
-CONFIG_BLK_DEV_CMD64X=m
-CONFIG_BLK_DEV_TRIFLEX=m
-CONFIG_BLK_DEV_CY82C693=m
-CONFIG_BLK_DEV_CS5520=m
-CONFIG_BLK_DEV_CS5530=m
-CONFIG_BLK_DEV_HPT34X=m
-# CONFIG_HPT34X_AUTODMA is not set
-CONFIG_BLK_DEV_HPT366=m
-CONFIG_BLK_DEV_SC1200=m
-CONFIG_BLK_DEV_PIIX=m
-CONFIG_BLK_DEV_NS87415=m
-CONFIG_BLK_DEV_PDC202XX_OLD=y
-# CONFIG_PDC202XX_BURST is not set
-CONFIG_BLK_DEV_PDC202XX_NEW=m
-# CONFIG_PDC202XX_FORCE is not set
-CONFIG_BLK_DEV_SVWKS=m
-CONFIG_BLK_DEV_SIIMAGE=m
-CONFIG_BLK_DEV_SLC90E66=m
-CONFIG_BLK_DEV_TRM290=m
-CONFIG_BLK_DEV_VIA82CXXX=m
-# CONFIG_IDE_ARM is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=y
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=y
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
-CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-CONFIG_AIC7XXX_DEBUG_ENABLE=y
-CONFIG_AIC7XXX_DEBUG_MASK=0
-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_AIC7XXX_OLD=m
-CONFIG_SCSI_AIC79XX=m
-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
-CONFIG_AIC79XX_RESET_DELAY_MS=15000
-# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
-CONFIG_AIC79XX_DEBUG_ENABLE=y
-CONFIG_AIC79XX_DEBUG_MASK=0
-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_MEGARAID_NEWGEN is not set
-CONFIG_MEGARAID_LEGACY=m
-# CONFIG_SCSI_SATA is not set
-CONFIG_SCSI_BUSLOGIC=m
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_EATA=m
-# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
-# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
-CONFIG_SCSI_EATA_MAX_TAGS=16
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-CONFIG_SCSI_GDTH=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-CONFIG_SCSI_QLOGIC_FC=m
-# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
-CONFIG_SCSI_QLOGIC_1280=m
-# CONFIG_SCSI_QLOGIC_1280_1040 is not set
-CONFIG_SCSI_QLA2XXX=y
-CONFIG_SCSI_QLA21XX=m
-CONFIG_SCSI_QLA22XX=m
-CONFIG_SCSI_QLA2300=m
-CONFIG_SCSI_QLA2322=m
-CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_LPFC=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_DC390T=m
-CONFIG_SCSI_NSP32=m
-CONFIG_SCSI_DEBUG=m
-
-#
-# PCMCIA SCSI adapter support
-#
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_NINJA_SCSI=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=m
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID10=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-CONFIG_FUSION=m
-CONFIG_FUSION_MAX_SGE=40
-CONFIG_FUSION_CTL=m
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
-CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
-
-#
-# Device Drivers
-#
-CONFIG_IEEE1394_PCILYNX=m
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-CONFIG_IEEE1394_SBP2_PHYS_DMA=y
-CONFIG_IEEE1394_ETH1394=m
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
-CONFIG_IEEE1394_CMP=m
-CONFIG_IEEE1394_AMDTP=m
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Macintosh device drivers
-#
-
-#
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_ROUTE_FWMARK is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_CT_ACCT=y
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MAC=m
-CONFIG_IP_NF_MATCH_PKTTYPE=m
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-CONFIG_IP_NF_MATCH_HELPER=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_CONNTRACK=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_PHYSDEV=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_REALM=m
-CONFIG_IP_NF_MATCH_SCTP=m
-CONFIG_IP_NF_MATCH_COMMENT=m
-CONFIG_IP_NF_MATCH_CONNMARK=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_CLASSIFY=m
-CONFIG_IP_NF_TARGET_CONNMARK=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_TARGET_NOTRACK=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_MARK=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_LENGTH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-# CONFIG_IP6_NF_MATCH_PHYSDEV is not set
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# DECnet: Netfilter Configuration
-#
-# CONFIG_DECNET_NF_GRABULATOR is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
-CONFIG_ATM=m
-CONFIG_ATM_CLIP=m
-# CONFIG_ATM_CLIP_NO_ICMP is not set
-CONFIG_ATM_LANE=m
-CONFIG_ATM_MPOA=m
-CONFIG_ATM_BR2684=m
-# CONFIG_ATM_BR2684_IPFILTER is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-CONFIG_DECNET=m
-# CONFIG_DECNET_ROUTER is not set
-CONFIG_LLC=m
-CONFIG_LLC2=m
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-# CONFIG_DEV_APPLETALK is not set
-CONFIG_X25=m
-CONFIG_LAPB=m
-# CONFIG_NET_DIVERT is not set
-CONFIG_ECONET=m
-# CONFIG_ECONET_AUNUDP is not set
-# CONFIG_ECONET_NATIVE is not set
-CONFIG_WAN_ROUTER=m
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_ATM=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_QOS=y
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-# CONFIG_CLS_U32_PERF is not set
-# CONFIG_NET_CLS_IND is not set
-# CONFIG_CLS_U32_MARK is not set
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_CLS_ACT is not set
-CONFIG_NET_CLS_POLICE=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-CONFIG_NET_VENDOR_3COM=y
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-# CONFIG_TULIP_MWI is not set
-# CONFIG_TULIP_MMIO is not set
-# CONFIG_TULIP_NAPI is not set
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_PCMCIA_XIRTULIP=m
-CONFIG_HP100=m
-CONFIG_IBM_EMAC=y
-# CONFIG_IBM_EMAC_ERRMSG is not set
-CONFIG_IBM_EMAC_RXB=128
-CONFIG_IBM_EMAC_TXB=64
-CONFIG_IBM_EMAC_FGAP=8
-CONFIG_IBM_EMAC_SKBRES=0
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_AMD8111_ETH=m
-# CONFIG_AMD8111E_NAPI is not set
-CONFIG_ADAPTEC_STARFIRE=m
-# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-# CONFIG_SUNDANCE_MMIO is not set
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-# CONFIG_VIA_RHINE_MMIO is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_DL2K=m
-CONFIG_E1000=m
-# CONFIG_E1000_NAPI is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-# CONFIG_R8169_NAPI is not set
-# CONFIG_R8169_VLAN is not set
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-CONFIG_STRIP=m
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-CONFIG_PCMCIA_RAYCS=m
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-CONFIG_PRISM54=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PCMCIA_AXNET=m
-
-#
-# Wan interfaces
-#
-CONFIG_WAN=y
-CONFIG_DSCC4=m
-# CONFIG_DSCC4_PCISYNC is not set
-# CONFIG_DSCC4_PCI_RST is not set
-CONFIG_LANMEDIA=m
-CONFIG_SYNCLINK_SYNCPPP=m
-CONFIG_HDLC=m
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_X25 is not set
-CONFIG_PCI200SYN=m
-CONFIG_WANXL=m
-CONFIG_PC300=m
-
-#
-# Cyclades-PC300 MLPPP support is disabled.
-#
-
-#
-# Refer to the file README.mlppp, provided by PC300 package.
-#
-CONFIG_FARSYNC=m
-CONFIG_DLCI=m
-CONFIG_DLCI_COUNT=24
-CONFIG_DLCI_MAX=8
-# CONFIG_WAN_ROUTER_DRIVERS is not set
-CONFIG_LAPBETHER=m
-CONFIG_X25_ASY=m
-
-#
-# ATM drivers
-#
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE_MPPC=m
-CONFIG_PPPOE=m
-CONFIG_PPPOATM=m
-CONFIG_SLIP=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-# CONFIG_SLIP_MODE_SLIP6 is not set
-# CONFIG_NET_FC is not set
-CONFIG_SHAPER=m
-CONFIG_NETCONSOLE=m
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=y
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-CONFIG_PPDEV=m
-CONFIG_TIPAR=m
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-
-#
-# PCI-based Watchdog Cards
-#
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-# CONFIG_WDT_501_PCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-CONFIG_USBPCWATCHDOG=m
-CONFIG_NVRAM=m
-CONFIG_GEN_RTC=m
-# CONFIG_GEN_RTC_X is not set
-CONFIG_DTLK=m
-CONFIG_R3964=m
-CONFIG_APPLICOM=m
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=m
-CONFIG_DRM=m
-CONFIG_DRM_TDFX=m
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_MGA=m
-CONFIG_DRM_SIS=m
-
-#
-# PCMCIA character devices
-#
-CONFIG_SYNCLINK_CS=m
-CONFIG_RAW_DRIVER=m
-CONFIG_MAX_RAW_DEVS=256
-
-#
-# TPM devices
-#
-CONFIG_TCG_TPM=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_PIIX4 is not set
-CONFIG_I2C_IBM_IIC=y
-CONFIG_I2C_ISA=m
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_SCx200_ACB is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Hardware Sensors Chip support
-#
-CONFIG_I2C_SENSOR=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_FSCHER=m
-CONFIG_SENSORS_FSCPOS=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83627HF=m
-
-#
-# Other I2C Chip support
-#
-CONFIG_SENSORS_DS1337=m
-CONFIG_SENSORS_EEPROM=m
-CONFIG_SENSORS_PCF8574=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
-CONFIG_SENSORS_M41T00=m
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-CONFIG_VIDEO_BT848=m
-CONFIG_VIDEO_BWQCAM=m
-CONFIG_VIDEO_CQCAM=m
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-# CONFIG_VIDEO_SAA7134_DVB is not set
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-# CONFIG_VIDEO_CX88_DVB is not set
-CONFIG_VIDEO_OVCAMCHIP=m
-
-#
-# Radio Adapters
-#
-CONFIG_RADIO_GEMTEK_PCI=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_MAESTRO=m
-
-#
-# Digital Video Broadcasting Devices
-#
-CONFIG_DVB=y
-CONFIG_DVB_CORE=m
-
-#
-# Supported SAA7146 based PCI Adapters
-#
-CONFIG_DVB_AV7110=m
-# CONFIG_DVB_AV7110_FIRMWARE is not set
-CONFIG_DVB_AV7110_OSD=y
-CONFIG_DVB_BUDGET=m
-CONFIG_DVB_BUDGET_CI=m
-CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
-
-#
-# Supported USB Adapters
-#
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_DVB_DIBUSB=m
-# CONFIG_DVB_DIBUSB_MISDESIGNED_DEVICES is not set
-# CONFIG_DVB_DIBCOM_DEBUG is not set
-CONFIG_DVB_CINERGYT2=m
-# CONFIG_DVB_CINERGYT2_TUNING is not set
-
-#
-# Supported FlexCopII (B2C2) Adapters
-#
-CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
-CONFIG_DVB_B2C2_SKYSTAR=m
-
-#
-# Supported BT878 Adapters
-#
-CONFIG_DVB_BT8XX=m
-
-#
-# Supported DVB Frontends
-#
-
-#
-# Customise DVB Frontends
-#
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_STV0299=m
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_TDA8083=m
-CONFIG_DVB_TDA80XX=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_VES1X93=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_SP887X=m
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
-CONFIG_DVB_MT352=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_ATMEL_AT76C651=m
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terresterial DTV) frontends
-#
-CONFIG_DVB_NXT2002=m
-CONFIG_DVB_OR51211=m
-CONFIG_DVB_OR51132=m
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-CONFIG_VIDEO_TVEEPROM=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-CONFIG_FB_SOFT_CURSOR=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_CT65550 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-CONFIG_FB_MATROX=y
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G=y
-# CONFIG_FB_MATROX_I2C is not set
-# CONFIG_FB_MATROX_MULTIHEAD is not set
-# CONFIG_FB_RADEON_OLD is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_BLUETOOTH_TTY is not set
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-CONFIG_USB_PEGASUS=y
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=y
-
-#
-# USB Host-to-Host Cables
-#
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_GENESYS=y
-CONFIG_USB_NET1080=y
-CONFIG_USB_PL2301=y
-CONFIG_USB_KC2190=y
-
-#
-# Intelligent USB Devices/Gadgets
-#
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_ZAURUS=y
-CONFIG_USB_CDCETHER=y
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_AX8817X=y
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB ATM/DSL drivers
-#
-# CONFIG_USB_ATM is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-CONFIG_JFS_FS=m
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-
-#
-# XFS support
-#
-# CONFIG_XFS_FS is not set
-CONFIG_MINIX_FS=m
-CONFIG_ROMFS_FS=m
-CONFIG_QUOTA=y
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_QUOTACTL=y
-CONFIG_DNOTIFY=y
-CONFIG_AUTOFS_FS=m
-CONFIG_AUTOFS4_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=y
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-CONFIG_NTFS_RW=y
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-CONFIG_ADFS_FS=m
-# CONFIG_ADFS_FS_RW is not set
-CONFIG_AFFS_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_BEFS_FS=m
-# CONFIG_BEFS_DEBUG is not set
-CONFIG_BFS_FS=m
-CONFIG_EFS_FS=m
-CONFIG_JFFS_FS=m
-CONFIG_JFFS_FS_VERBOSE=0
-# CONFIG_JFFS_PROC_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_VXFS_FS=m
-CONFIG_HPFS_FS=m
-CONFIG_QNX4FS_FS=m
-CONFIG_SYSV_FS=m
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-CONFIG_RPCSEC_GSS_SPKM3=m
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-CONFIG_NCP_FS=m
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_CODA_FS=m
-# CONFIG_CODA_FS_OLD_API is not set
-CONFIG_AFS_FS=m
-CONFIG_RXRPC=m
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_MAC_PARTITION=y
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# IBM 40x options
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_SERIAL_TEXT_DEBUG is not set
-CONFIG_PPC_OCP=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-CONFIG_SECURITY_CAPABILITIES=m
-CONFIG_SECURITY_ROOTPLUG=m
-CONFIG_SECURITY_SECLVL=m
-# CONFIG_SECURITY_SELINUX is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
diff --git a/packages/linux/linux-dht-walnut-2.6.12/iw_we18-5.diff b/packages/linux/linux-dht-walnut-2.6.12/iw_we18-5.diff
deleted file mode 100644
index 85fcdd1224..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12/iw_we18-5.diff
+++ /dev/null
@@ -1,462 +0,0 @@
-diff -upr linux-2.6.11/include/linux/wireless.h linux-2.6.11-WE18/include/linux/wireless.h
---- linux-2.6.11/include/linux/wireless.h 2004-12-24 13:35:01.000000000 -0800
-+++ linux-2.6.11-WE18/include/linux/wireless.h 2005-03-12 09:53:02.000000000 -0800
-@@ -1,10 +1,10 @@
- /*
- * This file define a set of standard wireless extensions
- *
-- * Version : 17 21.6.04
-+ * Version : 18 12.3.05
- *
- * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
-- * Copyright (c) 1997-2004 Jean Tourrilhes, All Rights Reserved.
-+ * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
- */
-
- #ifndef _LINUX_WIRELESS_H
-@@ -82,7 +82,7 @@
- * (there is some stuff that will be added in the future...)
- * I just plan to increment with each new version.
- */
--#define WIRELESS_EXT 17
-+#define WIRELESS_EXT 18
-
- /*
- * Changes :
-@@ -182,6 +182,21 @@
- * - Document (struct iw_quality *)->updated, add new flags (INVALID)
- * - Wireless Event capability in struct iw_range
- * - Add support for relative TxPower (yick !)
-+ *
-+ * V17 to V18 (From Jouni Malinen <jkmaline@cc.hut.fi>)
-+ * ----------
-+ * - Add support for WPA/WPA2
-+ * - Add extended encoding configuration (SIOCSIWENCODEEXT and
-+ * SIOCGIWENCODEEXT)
-+ * - Add SIOCSIWGENIE/SIOCGIWGENIE
-+ * - Add SIOCSIWMLME
-+ * - Add SIOCSIWPMKSA
-+ * - Add struct iw_range bit field for supported encoding capabilities
-+ * - Add optional scan request parameters for SIOCSIWSCAN
-+ * - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA
-+ * related parameters (extensible up to 4096 parameter values)
-+ * - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
-+ * IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
- */
-
- /**************************** CONSTANTS ****************************/
-@@ -256,6 +271,30 @@
- #define SIOCSIWPOWER 0x8B2C /* set Power Management settings */
- #define SIOCGIWPOWER 0x8B2D /* get Power Management settings */
-
-+/* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM).
-+ * This ioctl uses struct iw_point and data buffer that includes IE id and len
-+ * fields. More than one IE may be included in the request. Setting the generic
-+ * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers
-+ * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers
-+ * are required to report the used IE as a wireless event, e.g., when
-+ * associating with an AP. */
-+#define SIOCSIWGENIE 0x8B30 /* set generic IE */
-+#define SIOCGIWGENIE 0x8B31 /* get generic IE */
-+
-+/* WPA : IEEE 802.11 MLME requests */
-+#define SIOCSIWMLME 0x8B16 /* request MLME operation; uses
-+ * struct iw_mlme */
-+/* WPA : Authentication mode parameters */
-+#define SIOCSIWAUTH 0x8B32 /* set authentication mode params */
-+#define SIOCGIWAUTH 0x8B33 /* get authentication mode params */
-+
-+/* WPA : Extended version of encoding configuration */
-+#define SIOCSIWENCODEEXT 0x8B34 /* set encoding token & mode */
-+#define SIOCGIWENCODEEXT 0x8B35 /* get encoding token & mode */
-+
-+/* WPA2 : PMKSA cache management */
-+#define SIOCSIWPMKSA 0x8B36 /* PMKSA cache operation */
-+
- /* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
-
- /* These 32 ioctl are wireless device private, for 16 commands.
-@@ -297,6 +336,34 @@
- #define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
- #define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
- #define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
-+#define IWEVGENIE 0x8C05 /* Generic IE (WPA, RSN, WMM, ..)
-+ * (scan results); This includes id and
-+ * length fields. One IWEVGENIE may
-+ * contain more than one IE. Scan
-+ * results may contain one or more
-+ * IWEVGENIE events. */
-+#define IWEVMICHAELMICFAILURE 0x8C06 /* Michael MIC failure
-+ * (struct iw_michaelmicfailure)
-+ */
-+#define IWEVASSOCREQIE 0x8C07 /* IEs used in (Re)Association Request.
-+ * The data includes id and length
-+ * fields and may contain more than one
-+ * IE. This event is required in
-+ * Managed mode if the driver
-+ * generates its own WPA/RSN IE. This
-+ * should be sent just before
-+ * IWEVREGISTERED event for the
-+ * association. */
-+#define IWEVASSOCRESPIE 0x8C08 /* IEs used in (Re)Association
-+ * Response. The data includes id and
-+ * length fields and may contain more
-+ * than one IE. This may be sent
-+ * between IWEVASSOCREQIE and
-+ * IWEVREGISTERED events for the
-+ * association. */
-+#define IWEVPMKIDCAND 0x8C09 /* PMKID candidate for RSN
-+ * pre-authentication
-+ * (struct iw_pmkid_cand) */
-
- #define IWEVFIRST 0x8C00
-
-@@ -432,12 +499,94 @@
- #define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
- #define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
- #define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
-+/* struct iw_scan_req scan_type */
-+#define IW_SCAN_TYPE_ACTIVE 0
-+#define IW_SCAN_TYPE_PASSIVE 1
- /* Maximum size of returned data */
- #define IW_SCAN_MAX_DATA 4096 /* In bytes */
-
- /* Max number of char in custom event - use multiple of them if needed */
- #define IW_CUSTOM_MAX 256 /* In bytes */
-
-+/* Generic information element */
-+#define IW_GENERIC_IE_MAX 1024
-+
-+/* MLME requests (SIOCSIWMLME / struct iw_mlme) */
-+#define IW_MLME_DEAUTH 0
-+#define IW_MLME_DISASSOC 1
-+
-+/* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */
-+#define IW_AUTH_INDEX 0x0FFF
-+#define IW_AUTH_FLAGS 0xF000
-+/* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095)
-+ * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the
-+ * parameter that is being set/get to; value will be read/written to
-+ * struct iw_param value field) */
-+#define IW_AUTH_WPA_VERSION 0
-+#define IW_AUTH_CIPHER_PAIRWISE 1
-+#define IW_AUTH_CIPHER_GROUP 2
-+#define IW_AUTH_KEY_MGMT 3
-+#define IW_AUTH_TKIP_COUNTERMEASURES 4
-+#define IW_AUTH_DROP_UNENCRYPTED 5
-+#define IW_AUTH_80211_AUTH_ALG 6
-+#define IW_AUTH_WPA_ENABLED 7
-+#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
-+#define IW_AUTH_ROAMING_CONTROL 9
-+#define IW_AUTH_PRIVACY_INVOKED 10
-+
-+/* IW_AUTH_WPA_VERSION values (bit field) */
-+#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
-+#define IW_AUTH_WPA_VERSION_WPA 0x00000002
-+#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
-+
-+/* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */
-+#define IW_AUTH_CIPHER_NONE 0x00000001
-+#define IW_AUTH_CIPHER_WEP40 0x00000002
-+#define IW_AUTH_CIPHER_TKIP 0x00000004
-+#define IW_AUTH_CIPHER_CCMP 0x00000008
-+#define IW_AUTH_CIPHER_WEP104 0x00000010
-+
-+/* IW_AUTH_KEY_MGMT values (bit field) */
-+#define IW_AUTH_KEY_MGMT_802_1X 1
-+#define IW_AUTH_KEY_MGMT_PSK 2
-+
-+/* IW_AUTH_80211_AUTH_ALG values (bit field) */
-+#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
-+#define IW_AUTH_ALG_SHARED_KEY 0x00000002
-+#define IW_AUTH_ALG_LEAP 0x00000004
-+
-+/* IW_AUTH_ROAMING_CONTROL values */
-+#define IW_AUTH_ROAMING_ENABLE 0 /* driver/firmware based roaming */
-+#define IW_AUTH_ROAMING_DISABLE 1 /* user space program used for roaming
-+ * control */
-+
-+/* SIOCSIWENCODEEXT definitions */
-+#define IW_ENCODE_SEQ_MAX_SIZE 8
-+/* struct iw_encode_ext ->alg */
-+#define IW_ENCODE_ALG_NONE 0
-+#define IW_ENCODE_ALG_WEP 1
-+#define IW_ENCODE_ALG_TKIP 2
-+#define IW_ENCODE_ALG_CCMP 3
-+/* struct iw_encode_ext ->ext_flags */
-+#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
-+#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
-+#define IW_ENCODE_EXT_GROUP_KEY 0x00000004
-+#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008
-+
-+/* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */
-+#define IW_MICFAILURE_KEY_ID 0x00000003 /* Key ID 0..3 */
-+#define IW_MICFAILURE_GROUP 0x00000004
-+#define IW_MICFAILURE_PAIRWISE 0x00000008
-+#define IW_MICFAILURE_STAKEY 0x00000010
-+#define IW_MICFAILURE_COUNT 0x00000060 /* 1 or 2 (0 = count not supported)
-+ */
-+
-+/* Bit field values for enc_capa in struct iw_range */
-+#define IW_ENC_CAPA_WPA 0x00000001
-+#define IW_ENC_CAPA_WPA2 0x00000002
-+#define IW_ENC_CAPA_CIPHER_TKIP 0x00000004
-+#define IW_ENC_CAPA_CIPHER_CCMP 0x00000008
-+
- /* Event capability macros - in (struct iw_range *)->event_capa
- * Because we have more than 32 possible events, we use an array of
- * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */
-@@ -546,6 +695,132 @@ struct iw_thrspy
- struct iw_quality high; /* High threshold */
- };
-
-+/*
-+ * Optional data for scan request
-+ *
-+ * Note: these optional parameters are controlling parameters for the
-+ * scanning behavior, these do not apply to getting scan results
-+ * (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and
-+ * provide a merged results with all BSSes even if the previous scan
-+ * request limited scanning to a subset, e.g., by specifying an SSID.
-+ * Especially, scan results are required to include an entry for the
-+ * current BSS if the driver is in Managed mode and associated with an AP.
-+ */
-+struct iw_scan_req
-+{
-+ __u8 scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */
-+ __u8 essid_len;
-+ __u8 num_channels; /* num entries in channel_list;
-+ * 0 = scan all allowed channels */
-+ __u8 flags; /* reserved as padding; use zero, this may
-+ * be used in the future for adding flags
-+ * to request different scan behavior */
-+ struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or
-+ * individual address of a specific BSS */
-+
-+ /*
-+ * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using
-+ * the current ESSID. This allows scan requests for specific ESSID
-+ * without having to change the current ESSID and potentially breaking
-+ * the current association.
-+ */
-+ __u8 essid[IW_ESSID_MAX_SIZE];
-+
-+ /*
-+ * Optional parameters for changing the default scanning behavior.
-+ * These are based on the MLME-SCAN.request from IEEE Std 802.11.
-+ * TU is 1.024 ms. If these are set to 0, driver is expected to use
-+ * reasonable default values. min_channel_time defines the time that
-+ * will be used to wait for the first reply on each channel. If no
-+ * replies are received, next channel will be scanned after this. If
-+ * replies are received, total time waited on the channel is defined by
-+ * max_channel_time.
-+ */
-+ __u32 min_channel_time; /* in TU */
-+ __u32 max_channel_time; /* in TU */
-+
-+ struct iw_freq channel_list[IW_MAX_FREQUENCIES];
-+};
-+
-+/* ------------------------- WPA SUPPORT ------------------------- */
-+
-+/*
-+ * Extended data structure for get/set encoding (this is used with
-+ * SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_*
-+ * flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and
-+ * only the data contents changes (key data -> this structure, including
-+ * key data).
-+ *
-+ * If the new key is the first group key, it will be set as the default
-+ * TX key. Otherwise, default TX key index is only changed if
-+ * IW_ENCODE_EXT_SET_TX_KEY flag is set.
-+ *
-+ * Key will be changed with SIOCSIWENCODEEXT in all cases except for
-+ * special "change TX key index" operation which is indicated by setting
-+ * key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY.
-+ *
-+ * tx_seq/rx_seq are only used when respective
-+ * IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal
-+ * TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start
-+ * TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally
-+ * used only by an Authenticator (AP or an IBSS station) to get the
-+ * current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and
-+ * RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for
-+ * debugging/testing.
-+ */
-+struct iw_encode_ext
-+{
-+ __u32 ext_flags; /* IW_ENCODE_EXT_* */
-+ __u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+ __u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+ struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
-+ * (group) keys or unicast address for
-+ * individual keys */
-+ __u16 alg; /* IW_ENCODE_ALG_* */
-+ __u16 key_len;
-+ __u8 key[0];
-+};
-+
-+/* SIOCSIWMLME data */
-+struct iw_mlme
-+{
-+ __u16 cmd; /* IW_MLME_* */
-+ __u16 reason_code;
-+ struct sockaddr addr;
-+};
-+
-+/* SIOCSIWPMKSA data */
-+#define IW_PMKSA_ADD 1
-+#define IW_PMKSA_REMOVE 2
-+#define IW_PMKSA_FLUSH 3
-+
-+#define IW_PMKID_LEN 16
-+
-+struct iw_pmksa
-+{
-+ __u32 cmd; /* IW_PMKSA_* */
-+ struct sockaddr bssid;
-+ __u8 pmkid[IW_PMKID_LEN];
-+};
-+
-+/* IWEVMICHAELMICFAILURE data */
-+struct iw_michaelmicfailure
-+{
-+ __u32 flags;
-+ struct sockaddr src_addr;
-+ __u8 tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
-+};
-+
-+/* IWEVPMKIDCAND data */
-+#define IW_PMKID_CAND_PREAUTH 0x00000001 /* RNS pre-authentication enabled */
-+struct iw_pmkid_cand
-+{
-+ __u32 flags; /* IW_PMKID_CAND_* */
-+ __u32 index; /* the smaller the index, the higher the
-+ * priority */
-+ struct sockaddr bssid;
-+};
-+
- /* ------------------------ WIRELESS STATS ------------------------ */
- /*
- * Wireless statistics (used for /proc/net/wireless)
-@@ -725,6 +1000,8 @@ struct iw_range
- struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
- /* Note : this frequency list doesn't need to fit channel numbers,
- * because each entry contain its channel index */
-+
-+ __u32 enc_capa; /* IW_ENC_CAPA_* bit field */
- };
-
- /*
-diff -upr linux-2.6.11/net/core/wireless.c linux-2.6.11-WE18/net/core/wireless.c
---- linux-2.6.11/net/core/wireless.c 2005-03-04 15:55:29.000000000 -0800
-+++ linux-2.6.11-WE18/net/core/wireless.c 2005-03-12 09:11:24.000000000 -0800
-@@ -2,7 +2,7 @@
- * This file implement the Wireless Extensions APIs.
- *
- * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
-- * Copyright (c) 1997-2004 Jean Tourrilhes, All Rights Reserved.
-+ * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
- *
- * (As all part of the Linux kernel, this file is GPL)
- */
-@@ -187,6 +187,12 @@ static const struct iw_ioctl_description
- .header_type = IW_HEADER_TYPE_ADDR,
- .flags = IW_DESCR_FLAG_DUMP,
- },
-+ [SIOCSIWMLME - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_mlme),
-+ .max_tokens = sizeof(struct iw_mlme),
-+ },
- [SIOCGIWAPLIST - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
- .token_size = sizeof(struct sockaddr) +
-@@ -195,7 +201,10 @@ static const struct iw_ioctl_description
- .flags = IW_DESCR_FLAG_NOMAX,
- },
- [SIOCSIWSCAN - SIOCIWFIRST] = {
-- .header_type = IW_HEADER_TYPE_PARAM,
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = 0,
-+ .max_tokens = sizeof(struct iw_scan_req),
- },
- [SIOCGIWSCAN - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_POINT,
-@@ -273,6 +282,42 @@ static const struct iw_ioctl_description
- [SIOCGIWPOWER - SIOCIWFIRST] = {
- .header_type = IW_HEADER_TYPE_PARAM,
- },
-+ [SIOCSIWGENIE - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [SIOCGIWGENIE - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [SIOCSIWAUTH - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_PARAM,
-+ },
-+ [SIOCGIWAUTH - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_PARAM,
-+ },
-+ [SIOCSIWENCODEEXT - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_encode_ext),
-+ .max_tokens = sizeof(struct iw_encode_ext) +
-+ IW_ENCODING_TOKEN_MAX,
-+ },
-+ [SIOCGIWENCODEEXT - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_encode_ext),
-+ .max_tokens = sizeof(struct iw_encode_ext) +
-+ IW_ENCODING_TOKEN_MAX,
-+ },
-+ [SIOCSIWPMKSA - SIOCIWFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .min_tokens = sizeof(struct iw_pmksa),
-+ .max_tokens = sizeof(struct iw_pmksa),
-+ },
- };
- static const int standard_ioctl_num = (sizeof(standard_ioctl) /
- sizeof(struct iw_ioctl_description));
-@@ -299,6 +344,31 @@ static const struct iw_ioctl_description
- [IWEVEXPIRED - IWEVFIRST] = {
- .header_type = IW_HEADER_TYPE_ADDR,
- },
-+ [IWEVGENIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVMICHAELMICFAILURE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = sizeof(struct iw_michaelmicfailure),
-+ },
-+ [IWEVASSOCREQIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVASSOCRESPIE - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = IW_GENERIC_IE_MAX,
-+ },
-+ [IWEVPMKIDCAND - IWEVFIRST] = {
-+ .header_type = IW_HEADER_TYPE_POINT,
-+ .token_size = 1,
-+ .max_tokens = sizeof(struct iw_pmkid_cand),
-+ },
- };
- static const int standard_event_num = (sizeof(standard_event) /
- sizeof(struct iw_ioctl_description));
diff --git a/packages/linux/linux-dht-walnut-2.6.12/linux-2.6.12-mppe-mppc-1.3.patch b/packages/linux/linux-dht-walnut-2.6.12/linux-2.6.12-mppe-mppc-1.3.patch
deleted file mode 100644
index aa430252c7..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12/linux-2.6.12-mppe-mppc-1.3.patch
+++ /dev/null
@@ -1,1559 +0,0 @@
-diff -ruN linux-2.6.12.orig/drivers/net/Kconfig linux-2.6.12/drivers/net/Kconfig
---- linux-2.6.12.orig/drivers/net/Kconfig 2005-06-28 19:57:16.000000000 +0200
-+++ linux-2.6.12/drivers/net/Kconfig 2005-06-28 20:07:01.000000000 +0200
-@@ -2417,6 +2417,32 @@
- module; it is called bsd_comp and will show up in the directory
- modules once you have said "make modules". If unsure, say N.
-
-+config PPP_MPPE_MPPC
-+ tristate "Microsoft PPP compression/encryption (MPPC/MPPE)"
-+ depends on PPP
-+ select CRYPTO_SHA1
-+ select CRYPTO_ARC4
-+ ---help---
-+ Support for the Microsoft Point-To-Point Compression (RFC2118) and
-+ Microsoft Point-To-Point Encryption (RFC3078). These protocols are
-+ supported by Microsoft Windows and wide range of "hardware" access
-+ servers. MPPE is common protocol in Virtual Private Networks. According
-+ to RFC3078, MPPE supports 40, 56 and 128-bit key lengths. Depending on
-+ PPP daemon configuration on both ends of the link, following scenarios
-+ are possible:
-+ - only compression (MPPC) is used,
-+ - only encryption (MPPE) is used,
-+ - compression and encryption (MPPC+MPPE) are used.
-+
-+ Please note that Hi/Fn (http://www.hifn.com) holds patent on MPPC so
-+ you should check if this patent is valid in your country in order to
-+ avoid legal problems.
-+
-+ For more information please visit http://free.polbox.pl/h/hs001
-+
-+ To compile this driver as a module, choose M here. The module will
-+ be called ppp_mppe_mppc.ko.
-+
- config PPPOE
- tristate "PPP over Ethernet (EXPERIMENTAL)"
- depends on EXPERIMENTAL && PPP
-diff -ruN linux-2.6.12.orig/drivers/net/Makefile linux-2.6.12/drivers/net/Makefile
---- linux-2.6.12.orig/drivers/net/Makefile 2005-06-28 19:57:16.000000000 +0200
-+++ linux-2.6.12/drivers/net/Makefile 2005-06-28 20:07:01.000000000 +0200
-@@ -105,6 +105,7 @@
- obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
- obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
- obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
-+obj-$(CONFIG_PPP_MPPE_MPPC) += ppp_mppe_mppc.o
- obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
-
- obj-$(CONFIG_SLIP) += slip.o
-diff -ruN linux-2.6.12.orig/drivers/net/ppp_generic.c linux-2.6.12/drivers/net/ppp_generic.c
---- linux-2.6.12.orig/drivers/net/ppp_generic.c 2005-06-28 19:57:20.000000000 +0200
-+++ linux-2.6.12/drivers/net/ppp_generic.c 2005-06-28 20:07:01.000000000 +0200
-@@ -19,7 +19,7 @@
- * PPP driver, written by Michael Callahan and Al Longyear, and
- * subsequently hacked by Paul Mackerras.
- *
-- * ==FILEVERSION 20041108==
-+ * ==FILEVERSION 20050110==
- */
-
- #include <linux/config.h>
-@@ -105,6 +105,7 @@
- spinlock_t rlock; /* lock for receive side 58 */
- spinlock_t wlock; /* lock for transmit side 5c */
- int mru; /* max receive unit 60 */
-+ int mru_alloc; /* MAX(1500,MRU) for dev_alloc_skb() */
- unsigned int flags; /* control bits 64 */
- unsigned int xstate; /* transmit state bits 68 */
- unsigned int rstate; /* receive state bits 6c */
-@@ -632,7 +633,9 @@
- case PPPIOCSMRU:
- if (get_user(val, p))
- break;
-- ppp->mru = val;
-+ ppp->mru_alloc = ppp->mru = val;
-+ if (ppp->mru_alloc < PPP_MRU)
-+ ppp->mru_alloc = PPP_MRU; /* increase for broken peers */
- err = 0;
- break;
-
-@@ -1107,14 +1110,37 @@
- case PPP_CCP:
- /* peek at outbound CCP frames */
- ppp_ccp_peek(ppp, skb, 0);
-+ /*
-+ * When LZS or MPPE/MPPC has been negotiated we don't send
-+ * CCP_RESETACK after receiving CCP_RESETREQ; in fact pppd
-+ * sends such a packet but we silently discard it here
-+ */
-+ if (CCP_CODE(skb->data+2) == CCP_RESETACK
-+ && (ppp->xcomp->compress_proto == CI_MPPE
-+ || ppp->xcomp->compress_proto == CI_LZS)) {
-+ --ppp->stats.tx_packets;
-+ ppp->stats.tx_bytes -= skb->len - 2;
-+ kfree_skb(skb);
-+ return;
-+ }
- break;
- }
-
- /* try to do packet compression */
- if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
- && proto != PPP_LCP && proto != PPP_CCP) {
-- new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
-- GFP_ATOMIC);
-+ int comp_ovhd = 0;
-+ /*
-+ * because of possible data expansion when MPPC or LZS
-+ * is used, allocate compressor's buffer 12.5% bigger
-+ * than MTU
-+ */
-+ if (ppp->xcomp->compress_proto == CI_MPPE)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + MPPE_OVHD;
-+ else if (ppp->xcomp->compress_proto == CI_LZS)
-+ comp_ovhd = ((ppp->dev->mtu * 9) / 8) + 1 + LZS_OVHD;
-+ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len
-+ + comp_ovhd, GFP_ATOMIC);
- if (new_skb == 0) {
- printk(KERN_ERR "PPP: no memory (comp pkt)\n");
- goto drop;
-@@ -1132,9 +1158,21 @@
- skb = new_skb;
- skb_put(skb, len);
- skb_pull(skb, 2); /* pull off A/C bytes */
-- } else {
-+ } else if (len == 0) {
- /* didn't compress, or CCP not up yet */
- kfree_skb(new_skb);
-+ } else {
-+ /*
-+ * (len < 0)
-+ * MPPE requires that we do not send unencrypted
-+ * frames. The compressor will return -1 if we
-+ * should drop the frame. We cannot simply test
-+ * the compress_proto because MPPE and MPPC share
-+ * the same number.
-+ */
-+ printk(KERN_ERR "ppp: compressor dropped pkt\n");
-+ kfree_skb(new_skb);
-+ goto drop;
- }
- }
-
-@@ -1640,14 +1678,15 @@
- goto err;
-
- if (proto == PPP_COMP) {
-- ns = dev_alloc_skb(ppp->mru + PPP_HDRLEN);
-+ ns = dev_alloc_skb(ppp->mru_alloc + PPP_HDRLEN);
- if (ns == 0) {
- printk(KERN_ERR "ppp_decompress_frame: no memory\n");
- goto err;
- }
- /* the decompressor still expects the A/C bytes in the hdr */
- len = ppp->rcomp->decompress(ppp->rc_state, skb->data - 2,
-- skb->len + 2, ns->data, ppp->mru + PPP_HDRLEN);
-+ skb->len + 2, ns->data,
-+ ppp->mru_alloc + PPP_HDRLEN);
- if (len < 0) {
- /* Pass the compressed frame to pppd as an
- error indication. */
-@@ -1673,7 +1712,14 @@
- return skb;
-
- err:
-- ppp->rstate |= SC_DC_ERROR;
-+ if (ppp->rcomp->compress_proto != CI_MPPE
-+ && ppp->rcomp->compress_proto != CI_LZS) {
-+ /*
-+ * If decompression protocol isn't MPPE/MPPC or LZS, we set
-+ * SC_DC_ERROR flag and wait for CCP_RESETACK
-+ */
-+ ppp->rstate |= SC_DC_ERROR;
-+ }
- ppp_receive_error(ppp);
- return skb;
- }
-@@ -2349,6 +2395,7 @@
- memset(ppp, 0, sizeof(struct ppp));
-
- ppp->mru = PPP_MRU;
-+ ppp->mru_alloc = PPP_MRU;
- init_ppp_file(&ppp->file, INTERFACE);
- ppp->file.hdrlen = PPP_HDRLEN - 2; /* don't count proto bytes */
- for (i = 0; i < NUM_NP; ++i)
-diff -ruN linux-2.6.12.orig/drivers/net/ppp_mppe_mppc.c linux-2.6.12/drivers/net/ppp_mppe_mppc.c
---- linux-2.6.12.orig/drivers/net/ppp_mppe_mppc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.12/drivers/net/ppp_mppe_mppc.c 2005-06-28 20:07:01.000000000 +0200
-@@ -0,0 +1,1299 @@
-+/*
-+ * ppp_mppe_mppc.c - MPPC/MPPE "compressor/decompressor" module.
-+ *
-+ * Copyright (c) 1994 Árpád Magosányi <mag@bunuel.tii.matav.hu>
-+ * Copyright (c) 1999 Tim Hockin, Cobalt Networks Inc. <thockin@cobaltnet.com>
-+ * Copyright (c) 2002-2004 Jan Dubiec <jdx@slackware.pl>
-+ *
-+ * Permission to use, copy, modify, and distribute this software and its
-+ * documentation is hereby granted, provided that the above copyright
-+ * notice appears in all copies. This software is provided without any
-+ * warranty, express or implied.
-+ *
-+ * The code is based on MPPE kernel module written by Árpád Magosányi and
-+ * Tim Hockin which can be found on http://planetmirror.com/pub/mppe/.
-+ * I have added MPPC and 56 bit session keys support in MPPE.
-+ *
-+ * WARNING! Although this is open source code, its usage in some countries
-+ * (in particular in the USA) may violate Stac Inc. patent for MPPC.
-+ *
-+ * ==FILEVERSION 20041123==
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/mm.h>
-+#include <linux/slab.h>
-+#include <asm/scatterlist.h>
-+#include <linux/vmalloc.h>
-+#include <linux/crypto.h>
-+
-+#include <linux/ppp_defs.h>
-+#include <linux/ppp-comp.h>
-+
-+/*
-+ * State for a mppc/mppe "(de)compressor".
-+ */
-+struct ppp_mppe_state {
-+ struct crypto_tfm *arc4_tfm;
-+ struct crypto_tfm *sha1_tfm;
-+ u8 *sha1_digest;
-+ u8 master_key[MPPE_MAX_KEY_LEN];
-+ u8 session_key[MPPE_MAX_KEY_LEN];
-+ u8 mppc; /* do we use compression (MPPC)? */
-+ u8 mppe; /* do we use encryption (MPPE)? */
-+ u8 keylen; /* key length in bytes */
-+ u8 bitkeylen; /* key length in bits */
-+ u16 ccount; /* coherency counter */
-+ u16 bits; /* MPPC/MPPE control bits */
-+ u8 stateless; /* do we use stateless mode? */
-+ u8 nextflushed; /* set A bit in the next outgoing packet;
-+ used only by compressor*/
-+ u8 flushexpected; /* drop packets until A bit is received;
-+ used only by decompressor*/
-+ u8 *hist; /* MPPC history */
-+ u16 *hash; /* Hash table; used only by compressor */
-+ u16 histptr; /* history "cursor" */
-+ int unit;
-+ int debug;
-+ int mru;
-+ struct compstat stats;
-+};
-+
-+#define MPPE_HIST_LEN 8192 /* MPPC history size */
-+#define MPPE_MAX_CCOUNT 0x0FFF /* max. coherency counter value */
-+
-+#define MPPE_BIT_FLUSHED 0x80 /* bit A */
-+#define MPPE_BIT_RESET 0x40 /* bit B */
-+#define MPPE_BIT_COMP 0x20 /* bit C */
-+#define MPPE_BIT_ENCRYPTED 0x10 /* bit D */
-+
-+#define MPPE_SALT0 0xD1 /* values used in MPPE key derivation */
-+#define MPPE_SALT1 0x26 /* according to RFC3079 */
-+#define MPPE_SALT2 0x9E
-+
-+#define MPPE_CCOUNT(x) ((((x)[4] & 0x0f) << 8) + (x)[5])
-+#define MPPE_BITS(x) ((x)[4] & 0xf0)
-+#define MPPE_CTRLHI(x) ((((x)->ccount & 0xf00)>>8)|((x)->bits))
-+#define MPPE_CTRLLO(x) ((x)->ccount & 0xff)
-+
-+/*
-+ * Kernel Crypto API needs its arguments to be in kmalloc'd memory, not in the
-+ * module static data area. That means sha_pad needs to be kmalloc'd. It is done
-+ * in mppe_module_init(). This has been pointed out on 30th July 2004 by Oleg
-+ * Makarenko on pptpclient-devel mailing list.
-+ */
-+#define SHA1_PAD_SIZE 40
-+struct sha_pad {
-+ unsigned char sha_pad1[SHA1_PAD_SIZE];
-+ unsigned char sha_pad2[SHA1_PAD_SIZE];
-+};
-+static struct sha_pad *sha_pad;
-+
-+static inline void
-+setup_sg(struct scatterlist *sg, const void *address, unsigned int length)
-+{
-+ sg[0].page = virt_to_page(address);
-+ sg[0].offset = offset_in_page(address);
-+ sg[0].length = length;
-+}
-+
-+static inline void
-+arc4_setkey(struct ppp_mppe_state *state, const unsigned char *key,
-+ const unsigned int keylen)
-+{
-+ crypto_cipher_setkey(state->arc4_tfm, key, keylen);
-+}
-+
-+static inline void
-+arc4_encrypt(struct ppp_mppe_state *state, const unsigned char *in,
-+ const unsigned int len, unsigned char *out)
-+{
-+ struct scatterlist sgin[4], sgout[4];
-+
-+ setup_sg(sgin, in, len);
-+ setup_sg(sgout, out, len);
-+ crypto_cipher_encrypt(state->arc4_tfm, sgout, sgin, len);
-+}
-+
-+#define arc4_decrypt arc4_encrypt
-+
-+/*
-+ * Key Derivation, from RFC 3078, RFC 3079.
-+ * Equivalent to Get_Key() for MS-CHAP as described in RFC 3079.
-+ */
-+static void
-+get_new_key_from_sha(struct ppp_mppe_state *state, unsigned char *interim_key)
-+{
-+ struct scatterlist sg[4];
-+
-+ setup_sg(&sg[0], state->master_key, state->keylen);
-+ setup_sg(&sg[1], sha_pad->sha_pad1, sizeof(sha_pad->sha_pad1));
-+ setup_sg(&sg[2], state->session_key, state->keylen);
-+ setup_sg(&sg[3], sha_pad->sha_pad2, sizeof(sha_pad->sha_pad2));
-+
-+ crypto_digest_digest (state->sha1_tfm, sg, 4, state->sha1_digest);
-+
-+ memcpy(interim_key, state->sha1_digest, state->keylen);
-+}
-+
-+static void
-+mppe_change_key(struct ppp_mppe_state *state, int initialize)
-+{
-+ unsigned char interim_key[MPPE_MAX_KEY_LEN];
-+
-+ get_new_key_from_sha(state, interim_key);
-+ if (initialize) {
-+ memcpy(state->session_key, interim_key, state->keylen);
-+ } else {
-+ arc4_setkey(state, interim_key, state->keylen);
-+ arc4_encrypt(state, interim_key, state->keylen, state->session_key);
-+ }
-+ if (state->keylen == 8) {
-+ if (state->bitkeylen == 40) {
-+ state->session_key[0] = MPPE_SALT0;
-+ state->session_key[1] = MPPE_SALT1;
-+ state->session_key[2] = MPPE_SALT2;
-+ } else {
-+ state->session_key[0] = MPPE_SALT0;
-+ }
-+ }
-+ arc4_setkey(state, state->session_key, state->keylen);
-+}
-+
-+/* increase 12-bit coherency counter */
-+static inline void
-+mppe_increase_ccount(struct ppp_mppe_state *state)
-+{
-+ state->ccount = (state->ccount + 1) & MPPE_MAX_CCOUNT;
-+ if (state->mppe) {
-+ if (state->stateless) {
-+ mppe_change_key(state, 0);
-+ state->nextflushed = 1;
-+ } else {
-+ if ((state->ccount & 0xff) == 0xff) {
-+ mppe_change_key(state, 0);
-+ }
-+ }
-+ }
-+}
-+
-+/* allocate space for a MPPE/MPPC (de)compressor. */
-+/* comp != 0 -> init compressor */
-+/* comp = 0 -> init decompressor */
-+static void *
-+mppe_alloc(unsigned char *options, int opt_len, int comp)
-+{
-+ struct ppp_mppe_state *state;
-+ unsigned int digestsize;
-+ u8* fname;
-+
-+ fname = comp ? "mppe_comp_alloc" : "mppe_decomp_alloc";
-+
-+ /*
-+ * Hack warning - additionally to the standard MPPC/MPPE configuration
-+ * options, pppd passes to the (de)copressor 8 or 16 byte session key.
-+ * Therefore options[1] contains MPPC/MPPE configuration option length
-+ * (CILEN_MPPE = 6), but the real options length, depending on the key
-+ * length, is 6+8 or 6+16.
-+ */
-+ if (opt_len < CILEN_MPPE) {
-+ printk(KERN_WARNING "%s: wrong options length: %u\n", fname, opt_len);
-+ return NULL;
-+ }
-+
-+ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE ||
-+ (options[2] & ~MPPE_STATELESS) != 0 ||
-+ options[3] != 0 || options[4] != 0 ||
-+ (options[5] & ~(MPPE_128BIT|MPPE_56BIT|MPPE_40BIT|MPPE_MPPC)) != 0 ||
-+ (options[5] & (MPPE_128BIT|MPPE_56BIT|MPPE_40BIT|MPPE_MPPC)) == 0) {
-+ printk(KERN_WARNING "%s: options rejected: o[0]=%02x, o[1]=%02x, "
-+ "o[2]=%02x, o[3]=%02x, o[4]=%02x, o[5]=%02x\n", fname, options[0],
-+ options[1], options[2], options[3], options[4], options[5]);
-+ return NULL;
-+ }
-+
-+ state = (struct ppp_mppe_state *)kmalloc(sizeof(*state), GFP_KERNEL);
-+ if (state == NULL) {
-+ printk(KERN_ERR "%s: cannot allocate space for %scompressor\n", fname,
-+ comp ? "" : "de");
-+ return NULL;
-+ }
-+ memset(state, 0, sizeof(struct ppp_mppe_state));
-+
-+ state->mppc = options[5] & MPPE_MPPC; /* Do we use MPPC? */
-+ state->mppe = options[5] & (MPPE_128BIT | MPPE_56BIT |
-+ MPPE_40BIT); /* Do we use MPPE? */
-+
-+ if (state->mppc) {
-+ /* allocate MPPC history */
-+ state->hist = (u8*)vmalloc(2*MPPE_HIST_LEN*sizeof(u8));
-+ if (state->hist == NULL) {
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for MPPC history\n",
-+ fname);
-+ return NULL;
-+ }
-+
-+ /* allocate hashtable for MPPC compressor */
-+ if (comp) {
-+ state->hash = (u16*)vmalloc(MPPE_HIST_LEN*sizeof(u16));
-+ if (state->hash == NULL) {
-+ vfree(state->hist);
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for MPPC history\n",
-+ fname);
-+ return NULL;
-+ }
-+ }
-+ }
-+
-+ if (state->mppe) { /* specific for MPPE */
-+ /* Load ARC4 algorithm */
-+ state->arc4_tfm = crypto_alloc_tfm("arc4", 0);
-+ if (state->arc4_tfm == NULL) {
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot load ARC4 module\n", fname);
-+ return NULL;
-+ }
-+
-+ /* Load SHA1 algorithm */
-+ state->sha1_tfm = crypto_alloc_tfm("sha1", 0);
-+ if (state->sha1_tfm == NULL) {
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot load SHA1 module\n", fname);
-+ return NULL;
-+ }
-+
-+ digestsize = crypto_tfm_alg_digestsize(state->sha1_tfm);
-+ if (digestsize < MPPE_MAX_KEY_LEN) {
-+ crypto_free_tfm(state->sha1_tfm);
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: CryptoAPI SHA1 digest size too small\n", fname);
-+ }
-+
-+ state->sha1_digest = kmalloc(digestsize, GFP_KERNEL);
-+ if (!state->sha1_digest) {
-+ crypto_free_tfm(state->sha1_tfm);
-+ crypto_free_tfm(state->arc4_tfm);
-+ if (state->mppc) {
-+ vfree(state->hash);
-+ if (comp)
-+ vfree(state->hist);
-+ }
-+ kfree(state);
-+ printk(KERN_ERR "%s: cannot allocate space for SHA1 digest\n", fname);
-+ }
-+
-+ memcpy(state->master_key, options+CILEN_MPPE, MPPE_MAX_KEY_LEN);
-+ memcpy(state->session_key, state->master_key, MPPE_MAX_KEY_LEN);
-+ /* initial key generation is done in mppe_init() */
-+ }
-+
-+ return (void *) state;
-+}
-+
-+static void *
-+mppe_comp_alloc(unsigned char *options, int opt_len)
-+{
-+ return mppe_alloc(options, opt_len, 1);
-+}
-+
-+static void *
-+mppe_decomp_alloc(unsigned char *options, int opt_len)
-+{
-+ return mppe_alloc(options, opt_len, 0);
-+}
-+
-+/* cleanup the (de)compressor */
-+static void
-+mppe_comp_free(void *arg)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+
-+ if (state != NULL) {
-+ if (state->mppe) {
-+ if (state->sha1_digest != NULL)
-+ kfree(state->sha1_digest);
-+ if (state->sha1_tfm != NULL)
-+ crypto_free_tfm(state->sha1_tfm);
-+ if (state->arc4_tfm != NULL)
-+ crypto_free_tfm(state->arc4_tfm);
-+ }
-+ if (state->hist != NULL)
-+ vfree(state->hist);
-+ if (state->hash != NULL)
-+ vfree(state->hash);
-+ kfree(state);
-+ }
-+}
-+
-+/* init MPPC/MPPE (de)compresor */
-+/* comp != 0 -> init compressor */
-+/* comp = 0 -> init decompressor */
-+static int
-+mppe_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int mru, int debug, int comp)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+ u8* fname;
-+
-+ fname = comp ? "mppe_comp_init" : "mppe_decomp_init";
-+
-+ if (opt_len < CILEN_MPPE) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: wrong options length: %u\n",
-+ fname, opt_len);
-+ return 0;
-+ }
-+
-+ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE ||
-+ (options[2] & ~MPPE_STATELESS) != 0 ||
-+ options[3] != 0 || options[4] != 0 ||
-+ (options[5] & ~(MPPE_56BIT|MPPE_128BIT|MPPE_40BIT|MPPE_MPPC)) != 0 ||
-+ (options[5] & (MPPE_56BIT|MPPE_128BIT|MPPE_40BIT|MPPE_MPPC)) == 0) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: options rejected: o[0]=%02x, o[1]=%02x, "
-+ "o[2]=%02x, o[3]=%02x, o[4]=%02x, o[5]=%02x\n", fname,
-+ options[0], options[1], options[2], options[3], options[4],
-+ options[5]);
-+ return 0;
-+ }
-+
-+ if ((options[5] & ~MPPE_MPPC) != MPPE_128BIT &&
-+ (options[5] & ~MPPE_MPPC) != MPPE_56BIT &&
-+ (options[5] & ~MPPE_MPPC) != MPPE_40BIT &&
-+ (options[5] & MPPE_MPPC) != MPPE_MPPC) {
-+ if (debug)
-+ printk(KERN_WARNING "%s: don't know what to do: o[5]=%02x\n",
-+ fname, options[5]);
-+ return 0;
-+ }
-+
-+ state->mppc = options[5] & MPPE_MPPC; /* Do we use MPPC? */
-+ state->mppe = options[5] & (MPPE_128BIT | MPPE_56BIT |
-+ MPPE_40BIT); /* Do we use MPPE? */
-+ state->stateless = options[2] & MPPE_STATELESS; /* Do we use stateless mode? */
-+
-+ switch (state->mppe) {
-+ case MPPE_40BIT: /* 40 bit key */
-+ state->keylen = 8;
-+ state->bitkeylen = 40;
-+ break;
-+ case MPPE_56BIT: /* 56 bit key */
-+ state->keylen = 8;
-+ state->bitkeylen = 56;
-+ break;
-+ case MPPE_128BIT: /* 128 bit key */
-+ state->keylen = 16;
-+ state->bitkeylen = 128;
-+ break;
-+ default:
-+ state->keylen = 0;
-+ state->bitkeylen = 0;
-+ }
-+
-+ state->ccount = MPPE_MAX_CCOUNT;
-+ state->bits = 0;
-+ state->unit = unit;
-+ state->debug = debug;
-+ state->histptr = MPPE_HIST_LEN;
-+ if (state->mppc) { /* reset history if MPPC was negotiated */
-+ memset(state->hist, 0, 2*MPPE_HIST_LEN*sizeof(u8));
-+ }
-+
-+ if (state->mppe) { /* generate initial session keys */
-+ mppe_change_key(state, 1);
-+ }
-+
-+ if (comp) { /* specific for compressor */
-+ state->nextflushed = 1;
-+ } else { /* specific for decompressor */
-+ state->mru = mru;
-+ state->flushexpected = 1;
-+ }
-+
-+ return 1;
-+}
-+
-+static int
-+mppe_comp_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int debug)
-+{
-+ return mppe_init(arg, options, opt_len, unit, hdrlen, 0, debug, 1);
-+}
-+
-+
-+static int
-+mppe_decomp_init(void *arg, unsigned char *options, int opt_len, int unit,
-+ int hdrlen, int mru, int debug)
-+{
-+ return mppe_init(arg, options, opt_len, unit, hdrlen, mru, debug, 0);
-+}
-+
-+static void
-+mppe_comp_reset(void *arg)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: resetting MPPC/MPPE compressor\n",
-+ __FUNCTION__, state->unit);
-+
-+ state->nextflushed = 1;
-+ if (state->mppe)
-+ arc4_setkey(state, state->session_key, state->keylen);
-+}
-+
-+static void
-+mppe_decomp_reset(void *arg)
-+{
-+ /* When MPPC/MPPE is in use, we shouldn't receive any CCP Reset-Ack.
-+ But when we receive such a packet, we just ignore it. */
-+ return;
-+}
-+
-+static void
-+mppe_stats(void *arg, struct compstat *stats)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+
-+ *stats = state->stats;
-+}
-+
-+/***************************/
-+/**** Compression stuff ****/
-+/***************************/
-+/* inserts 1 to 8 bits into the output buffer */
-+static inline void putbits8(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n) {
-+ *l = (*l) - n;
-+ val <<= *l;
-+ *buf = *buf | (val & 0xff);
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++;
-+ *l = 8 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 8) & 0xff);
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+/* inserts 9 to 16 bits into the output buffer */
-+static inline void putbits16(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n - 8) {
-+ (*i)++;
-+ *l = 8 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 8) & 0xff);
-+ *(++buf) = val & 0xff;
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++; (*i)++;
-+ *l = 16 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 16) & 0xff);
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+/* inserts 17 to 24 bits into the output buffer */
-+static inline void putbits24(u8 *buf, u32 val, const u32 n, u32 *i, u32 *l)
-+{
-+ buf += *i;
-+ if (*l >= n - 16) {
-+ (*i)++; (*i)++;
-+ *l = 16 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 16) & 0xff);
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ *(++buf) = 0;
-+ }
-+ } else {
-+ (*i)++; (*i)++; (*i)++;
-+ *l = 24 - n + (*l);
-+ val <<= *l;
-+ *buf = *buf | ((val >> 24) & 0xff);
-+ *(++buf) = (val >> 16) & 0xff;
-+ *(++buf) = (val >> 8) & 0xff;
-+ *(++buf) = val & 0xff;
-+ }
-+}
-+
-+static int
-+mppc_compress(struct ppp_mppe_state *state, unsigned char *ibuf,
-+ unsigned char *obuf, int isize, int osize)
-+{
-+ u32 olen, off, len, idx, i, l;
-+ u8 *hist, *sbuf, *p, *q, *r, *s;
-+
-+ /*
-+ At this point, to avoid possible buffer overflow caused by packet
-+ expansion during/after compression, we should make sure that
-+ osize >= (((isize*9)/8)+1)+2, but we don't do that because in
-+ ppp_generic.c we simply allocate bigger obuf.
-+
-+ Maximum MPPC packet expansion is 12.5%. This is the worst case when
-+ all octets in the input buffer are >= 0x80 and we cannot find any
-+ repeated tokens. Additionally we have to reserve 2 bytes for MPPE/MPPC
-+ status bits and coherency counter.
-+ */
-+
-+ hist = state->hist + MPPE_HIST_LEN;
-+ /* check if there is enough room at the end of the history */
-+ if (state->histptr + isize >= 2*MPPE_HIST_LEN) {
-+ state->bits |= MPPE_BIT_RESET;
-+ state->histptr = MPPE_HIST_LEN;
-+ memcpy(state->hist, hist, MPPE_HIST_LEN);
-+ }
-+ /* add packet to the history; isize must be <= MPPE_HIST_LEN */
-+ sbuf = state->hist + state->histptr;
-+ memcpy(sbuf, ibuf, isize);
-+ state->histptr += isize;
-+
-+ /* compress data */
-+ r = sbuf + isize;
-+ *obuf = olen = i = 0;
-+ l = 8;
-+ while (i < isize - 2) {
-+ s = q = sbuf + i;
-+ idx = ((40543*((((s[0]<<4)^s[1])<<4)^s[2]))>>4) & 0x1fff;
-+ p = hist + state->hash[idx];
-+ state->hash[idx] = (u16) (s - hist);
-+ off = s - p;
-+ if (off > MPPE_HIST_LEN - 1 || off < 1 || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++) {
-+ /* no match found; encode literal byte */
-+ if (ibuf[i] < 0x80) { /* literal byte < 0x80 */
-+ putbits8(obuf, (u32) ibuf[i], 8, &olen, &l);
-+ } else { /* literal byte >= 0x80 */
-+ putbits16(obuf, (u32) (0x100|(ibuf[i]&0x7f)), 9, &olen, &l);
-+ }
-+ ++i;
-+ continue;
-+ }
-+ if (r - q >= 64) {
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++ || *p++ != *s++ || *p++ != *s++ || *p++ != *s++ ||
-+ *p++ != *s++;
-+ if (s - q == 64) {
-+ p--; s--;
-+ while((*p++ == *s++) && (s < r) && (p < q));
-+ }
-+ } else {
-+ while((*p++ == *s++) && (s < r) && (p < q));
-+ }
-+ len = s - q - 1;
-+ i += len;
-+
-+ /* at least 3 character match found; code data */
-+ /* encode offset */
-+ if (off < 64) { /* 10-bit offset; 0 <= offset < 64 */
-+ putbits16(obuf, 0x3c0|off, 10, &olen, &l);
-+ } else if (off < 320) { /* 12-bit offset; 64 <= offset < 320 */
-+ putbits16(obuf, 0xe00|(off-64), 12, &olen, &l);
-+ } else if (off < 8192) { /* 16-bit offset; 320 <= offset < 8192 */
-+ putbits16(obuf, 0xc000|(off-320), 16, &olen, &l);
-+ } else {
-+ /* This shouldn't happen; we return 0 what means "packet expands",
-+ and we send packet uncompressed. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong offset value: %d\n",
-+ __FUNCTION__, state->unit, off);
-+ return 0;
-+ }
-+ /* encode length of match */
-+ if (len < 4) { /* length = 3 */
-+ putbits8(obuf, 0, 1, &olen, &l);
-+ } else if (len < 8) { /* 4 <= length < 8 */
-+ putbits8(obuf, 0x08|(len&0x03), 4, &olen, &l);
-+ } else if (len < 16) { /* 8 <= length < 16 */
-+ putbits8(obuf, 0x30|(len&0x07), 6, &olen, &l);
-+ } else if (len < 32) { /* 16 <= length < 32 */
-+ putbits8(obuf, 0xe0|(len&0x0f), 8, &olen, &l);
-+ } else if (len < 64) { /* 32 <= length < 64 */
-+ putbits16(obuf, 0x3c0|(len&0x1f), 10, &olen, &l);
-+ } else if (len < 128) { /* 64 <= length < 128 */
-+ putbits16(obuf, 0xf80|(len&0x3f), 12, &olen, &l);
-+ } else if (len < 256) { /* 128 <= length < 256 */
-+ putbits16(obuf, 0x3f00|(len&0x7f), 14, &olen, &l);
-+ } else if (len < 512) { /* 256 <= length < 512 */
-+ putbits16(obuf, 0xfe00|(len&0xff), 16, &olen, &l);
-+ } else if (len < 1024) { /* 512 <= length < 1024 */
-+ putbits24(obuf, 0x3fc00|(len&0x1ff), 18, &olen, &l);
-+ } else if (len < 2048) { /* 1024 <= length < 2048 */
-+ putbits24(obuf, 0xff800|(len&0x3ff), 20, &olen, &l);
-+ } else if (len < 4096) { /* 2048 <= length < 4096 */
-+ putbits24(obuf, 0x3ff000|(len&0x7ff), 22, &olen, &l);
-+ } else if (len < 8192) { /* 4096 <= length < 8192 */
-+ putbits24(obuf, 0xffe000|(len&0xfff), 24, &olen, &l);
-+ } else {
-+ /* This shouldn't happen; we return 0 what means "packet expands",
-+ and send packet uncompressed. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong length of match value: %d\n",
-+ __FUNCTION__, state->unit, len);
-+ return 0;
-+ }
-+ }
-+
-+ /* Add remaining octets to the output */
-+ while(isize - i > 0) {
-+ if (ibuf[i] < 0x80) { /* literal byte < 0x80 */
-+ putbits8(obuf, (u32) ibuf[i++], 8, &olen, &l);
-+ } else { /* literal byte >= 0x80 */
-+ putbits16(obuf, (u32) (0x100|(ibuf[i++]&0x7f)), 9, &olen, &l);
-+ }
-+ }
-+ /* Reset unused bits of the last output octet */
-+ if ((l != 0) && (l != 8)) {
-+ putbits8(obuf, 0, l, &olen, &l);
-+ }
-+
-+ return (int) olen;
-+}
-+
-+int
-+mppe_compress(void *arg, unsigned char *ibuf, unsigned char *obuf,
-+ int isize, int osize)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
-+ int proto, olen, complen, off;
-+ unsigned char *wptr;
-+
-+ /* Check that the protocol is in the range we handle. */
-+ proto = PPP_PROTOCOL(ibuf);
-+ if (proto < 0x0021 || proto > 0x00fa)
-+ return 0;
-+
-+ wptr = obuf;
-+ /* Copy over the PPP header */
-+ wptr[0] = PPP_ADDRESS(ibuf);
-+ wptr[1] = PPP_CONTROL(ibuf);
-+ wptr[2] = PPP_COMP >> 8;
-+ wptr[3] = PPP_COMP;
-+ wptr += PPP_HDRLEN + (MPPE_OVHD / 2); /* Leave two octets for MPPE/MPPC bits */
-+
-+ /*
-+ * In ver. 0.99 protocol field was compressed. Deflate and BSD compress
-+ * do PFC before actual compression, RCF2118 and RFC3078 are not precise
-+ * on this topic so I decided to do PFC. Unfortunately this change caused
-+ * incompatibility with older/other MPPE/MPPC modules. I have received
-+ * a lot of complaints from unexperienced users so I have decided to revert
-+ * to previous state, i.e. the protocol field is sent uncompressed now.
-+ * Although this may be changed in the future.
-+ *
-+ * Receiving side (mppe_decompress()) still accepts packets with compressed
-+ * and uncompressed protocol field so you shouldn't get "Unsupported protocol
-+ * 0x2145 received" messages anymore.
-+ */
-+ //off = (proto > 0xff) ? 2 : 3; /* PFC - skip first protocol byte if 0 */
-+ off = 2;
-+
-+ ibuf += off;
-+
-+ mppe_increase_ccount(state);
-+
-+ if (state->nextflushed) {
-+ state->bits |= MPPE_BIT_FLUSHED;
-+ state->nextflushed = 0;
-+ if (state->mppe && !state->stateless) {
-+ /*
-+ * If this is the flag packet, the key has been already changed in
-+ * mppe_increase_ccount() so we dont't do it once again.
-+ */
-+ if ((state->ccount & 0xff) != 0xff) {
-+ arc4_setkey(state, state->session_key, state->keylen);
-+ }
-+ }
-+ if (state->mppc) { /* reset history */
-+ state->bits |= MPPE_BIT_RESET;
-+ state->histptr = MPPE_HIST_LEN;
-+ memset(state->hist + MPPE_HIST_LEN, 0, MPPE_HIST_LEN*sizeof(u8));
-+ }
-+ }
-+
-+ if (state->mppc && !state->mppe) { /* Do only compression */
-+ complen = mppc_compress(state, ibuf, wptr, isize - off,
-+ osize - PPP_HDRLEN - (MPPE_OVHD / 2));
-+ /*
-+ * TODO: Implement an heuristics to handle packet expansion in a smart
-+ * way. Now, when a packet expands, we send it as uncompressed and
-+ * when next packet is sent we have to reset compressor's history.
-+ * Maybe it would be better to send such packet as compressed in order
-+ * to keep history's continuity.
-+ */
-+ if ((complen > isize) || (complen > osize - PPP_HDRLEN) ||
-+ (complen == 0)) {
-+ /* packet expands */
-+ state->nextflushed = 1;
-+ memcpy(wptr, ibuf, isize - off);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else {
-+ state->bits |= MPPE_BIT_COMP;
-+ olen = complen + PPP_HDRLEN + (MPPE_OVHD / 2);
-+ (state->stats).comp_bytes += olen;
-+ (state->stats).comp_packets++;
-+ }
-+ } else { /* Do encryption with or without compression */
-+ state->bits |= MPPE_BIT_ENCRYPTED;
-+ if (!state->mppc && state->mppe) { /* Do only encryption */
-+ /* read from ibuf, write to wptr, adjust for PPP_HDRLEN */
-+ arc4_encrypt(state, ibuf, isize - off, wptr);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else { /* Do compression and then encryption - RFC3078 */
-+ complen = mppc_compress(state, ibuf, wptr, isize - off,
-+ osize - PPP_HDRLEN - (MPPE_OVHD / 2));
-+ /*
-+ * TODO: Implement an heuristics to handle packet expansion in a smart
-+ * way. Now, when a packet expands, we send it as uncompressed and
-+ * when next packet is sent we have to reset compressor's history.
-+ * Maybe it would be good to send such packet as compressed in order
-+ * to keep history's continuity.
-+ */
-+ if ((complen > isize) || (complen > osize - PPP_HDRLEN) ||
-+ (complen == 0)) {
-+ /* packet expands */
-+ state->nextflushed = 1;
-+ arc4_encrypt(state, ibuf, isize - off, wptr);
-+ olen = isize - (off - 2) + MPPE_OVHD;
-+ (state->stats).inc_bytes += olen;
-+ (state->stats).inc_packets++;
-+ } else {
-+ state->bits |= MPPE_BIT_COMP;
-+ /* Hack warning !!! RC4 implementation which we use does
-+ encryption "in place" - it means that input and output
-+ buffers can be *the same* memory area. Therefore we don't
-+ need to use a temporary buffer. But be careful - other
-+ implementations don't have to be so nice.
-+ I used to use ibuf as temporary buffer here, but it led
-+ packet sniffers into error. Thanks to Wilfried Weissmann
-+ for pointing that. */
-+ arc4_encrypt(state, wptr, complen, wptr);
-+ olen = complen + PPP_HDRLEN + (MPPE_OVHD / 2);
-+ (state->stats).comp_bytes += olen;
-+ (state->stats).comp_packets++;
-+ }
-+ }
-+ }
-+
-+ /* write status bits and coherency counter into the output buffer */
-+ wptr = obuf + PPP_HDRLEN;
-+ wptr[0] = MPPE_CTRLHI(state);
-+ wptr[1] = MPPE_CTRLLO(state);
-+
-+ state->bits = 0;
-+
-+ (state->stats).unc_bytes += isize;
-+ (state->stats).unc_packets++;
-+
-+ return olen;
-+}
-+
-+/***************************/
-+/*** Decompression stuff ***/
-+/***************************/
-+static inline u32 getbits(const u8 *buf, const u32 n, u32 *i, u32 *l)
-+{
-+ static const u32 m[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff};
-+ u32 res, ol;
-+
-+ ol = *l;
-+ if (*l >= n) {
-+ *l = (*l) - n;
-+ res = (buf[*i] & m[ol]) >> (*l);
-+ if (*l == 0) {
-+ *l = 8;
-+ (*i)++;
-+ }
-+ } else {
-+ *l = 8 - n + (*l);
-+ res = (buf[(*i)++] & m[ol]) << 8;
-+ res = (res | buf[*i]) >> (*l);
-+ }
-+
-+ return res;
-+}
-+
-+static inline u32 getbyte(const u8 *buf, const u32 i, const u32 l)
-+{
-+ if (l == 8) {
-+ return buf[i];
-+ } else {
-+ return (((buf[i] << 8) | buf[i+1]) >> l) & 0xff;
-+ }
-+}
-+
-+static inline void lamecopy(u8 *dst, u8 *src, u32 len)
-+{
-+ while (len--)
-+ *dst++ = *src++;
-+}
-+
-+static int
-+mppc_decompress(struct ppp_mppe_state *state, unsigned char *ibuf,
-+ unsigned char *obuf, int isize, int osize)
-+{
-+ u32 olen, off, len, bits, val, sig, i, l;
-+ u8 *history, *s;
-+
-+ history = state->hist + state->histptr;
-+ olen = len = i = 0;
-+ l = 8;
-+ bits = isize * 8;
-+ while (bits >= 8) {
-+ val = getbyte(ibuf, i++, l);
-+ if (val < 0x80) { /* literal byte < 0x80 */
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed byte to the history */
-+ (state->hist)[(state->histptr)++] = (u8) val;
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ olen++;
-+ bits -= 8;
-+ continue;
-+ }
-+
-+ sig = val & 0xc0;
-+ if (sig == 0x80) { /* literal byte >= 0x80 */
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed byte to the history */
-+ (state->hist)[(state->histptr)++] =
-+ (u8) (0x80|((val&0x3f)<<1)|getbits(ibuf, 1 , &i ,&l));
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ olen++;
-+ bits -= 9;
-+ continue;
-+ }
-+
-+ /* Not a literal byte so it must be an (offset,length) pair */
-+ /* decode offset */
-+ sig = val & 0xf0;
-+ if (sig == 0xf0) { /* 10-bit offset; 0 <= offset < 64 */
-+ off = (((val&0x0f)<<2)|getbits(ibuf, 2 , &i ,&l));
-+ bits -= 10;
-+ } else {
-+ if (sig == 0xe0) { /* 12-bit offset; 64 <= offset < 320 */
-+ off = ((((val&0x0f)<<4)|getbits(ibuf, 4 , &i ,&l))+64);
-+ bits -= 12;
-+ } else {
-+ if ((sig&0xe0) == 0xc0) {/* 16-bit offset; 320 <= offset < 8192 */
-+ off = ((((val&0x1f)<<8)|getbyte(ibuf, i++, l))+320);
-+ bits -= 16;
-+ if (off > MPPE_HIST_LEN - 1) {
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: too big offset value: %d\n",
-+ __FUNCTION__, state->unit, off);
-+ return DECOMP_ERROR;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: cannot decode offset value\n",
-+ __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ }
-+ /* decode length of match */
-+ val = getbyte(ibuf, i, l);
-+ if ((val & 0x80) == 0x00) { /* len = 3 */
-+ len = 3;
-+ bits--;
-+ getbits(ibuf, 1 , &i ,&l);
-+ } else if ((val & 0xc0) == 0x80) { /* 4 <= len < 8 */
-+ len = 0x04 | ((val>>4) & 0x03);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xe0) == 0xc0) { /* 8 <= len < 16 */
-+ len = 0x08 | ((val>>2) & 0x07);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xf0) == 0xe0) { /* 16 <= len < 32 */
-+ len = 0x10 | (val & 0x0f);
-+ bits -= 8;
-+ i++;
-+ } else {
-+ bits -= 8;
-+ val = (val << 8) | getbyte(ibuf, ++i, l);
-+ if ((val & 0xf800) == 0xf000) { /* 32 <= len < 64 */
-+ len = 0x0020 | ((val >> 6) & 0x001f);
-+ bits -= 2;
-+ getbits(ibuf, 2 , &i ,&l);
-+ } else if ((val & 0xfc00) == 0xf800) { /* 64 <= len < 128 */
-+ len = 0x0040 | ((val >> 4) & 0x003f);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xfe00) == 0xfc00) { /* 128 <= len < 256 */
-+ len = 0x0080 | ((val >> 2) & 0x007f);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xff00) == 0xfe00) { /* 256 <= len < 512 */
-+ len = 0x0100 | (val & 0x00ff);
-+ bits -= 8;
-+ i++;
-+ } else {
-+ bits -= 8;
-+ val = (val << 8) | getbyte(ibuf, ++i, l);
-+ if ((val & 0xff8000) == 0xff0000) { /* 512 <= len < 1024 */
-+ len = 0x000200 | ((val >> 6) & 0x0001ff);
-+ bits -= 2;
-+ getbits(ibuf, 2 , &i ,&l);
-+ } else if ((val & 0xffc000) == 0xff8000) {/* 1024 <= len < 2048 */
-+ len = 0x000400 | ((val >> 4) & 0x0003ff);
-+ bits -= 4;
-+ getbits(ibuf, 4 , &i ,&l);
-+ } else if ((val & 0xffe000) == 0xffc000) {/* 2048 <= len < 4096 */
-+ len = 0x000800 | ((val >> 2) & 0x0007ff);
-+ bits -= 6;
-+ getbits(ibuf, 6 , &i ,&l);
-+ } else if ((val & 0xfff000) == 0xffe000) {/* 4096 <= len < 8192 */
-+ len = 0x001000 | (val & 0x000fff);
-+ bits -= 8;
-+ i++;
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: wrong length code: 0x%X\n",
-+ __FUNCTION__, state->unit, val);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ }
-+ s = state->hist + state->histptr;
-+ state->histptr += len;
-+ olen += len;
-+ if (state->histptr < 2*MPPE_HIST_LEN) {
-+ /* copy uncompressed bytes to the history */
-+
-+ /* In some cases len may be greater than off. It means that memory
-+ * areas pointed by s and s-off overlap. I had used memmove() here
-+ * because I thought that it acts as libc's version. Unfortunately,
-+ * I was wrong. :-) I got strange errors sometimes. Wilfried suggested
-+ * using of byte by byte copying here and strange errors disappeared.
-+ */
-+ lamecopy(s, s - off, len);
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: trying to write outside history "
-+ "buffer\n", __FUNCTION__, state->unit);
-+ return DECOMP_ERROR;
-+ }
-+ }
-+
-+ /* Do PFC decompression */
-+ len = olen;
-+ if ((history[0] & 0x01) != 0) {
-+ obuf[0] = 0;
-+ obuf++;
-+ len++;
-+ }
-+
-+ if (len <= osize) {
-+ /* copy uncompressed packet to the output buffer */
-+ memcpy(obuf, history, olen);
-+ } else {
-+ /* buffer overflow; drop packet */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: too big uncompressed packet: %d\n",
-+ __FUNCTION__, state->unit, len + (PPP_HDRLEN / 2));
-+ return DECOMP_ERROR;
-+ }
-+
-+ return (int) len;
-+}
-+
-+int
-+mppe_decompress(void *arg, unsigned char *ibuf, int isize,
-+ unsigned char *obuf, int osize)
-+{
-+ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
-+ int seq, bits, uncomplen;
-+
-+ if (isize <= PPP_HDRLEN + MPPE_OVHD) {
-+ if (state->debug) {
-+ printk(KERN_DEBUG "%s%d: short packet (len=%d)\n", __FUNCTION__,
-+ state->unit, isize);
-+ }
-+ return DECOMP_ERROR;
-+ }
-+
-+ /* Get coherency counter and control bits from input buffer */
-+ seq = MPPE_CCOUNT(ibuf);
-+ bits = MPPE_BITS(ibuf);
-+
-+ if (state->stateless) {
-+ /* RFC 3078, sec 8.1. */
-+ mppe_increase_ccount(state);
-+ if ((seq != state->ccount) && state->debug)
-+ printk(KERN_DEBUG "%s%d: bad sequence number: %d, expected: %d\n",
-+ __FUNCTION__, state->unit, seq, state->ccount);
-+ while (seq != state->ccount)
-+ mppe_increase_ccount(state);
-+ } else {
-+ /* RFC 3078, sec 8.2. */
-+ if (state->flushexpected) { /* discard state */
-+ if ((bits & MPPE_BIT_FLUSHED)) { /* we received expected FLUSH bit */
-+ while (seq != state->ccount)
-+ mppe_increase_ccount(state);
-+ state->flushexpected = 0;
-+ } else /* drop packet*/
-+ return DECOMP_ERROR;
-+ } else { /* normal state */
-+ mppe_increase_ccount(state);
-+ if (seq != state->ccount) {
-+ /* Packet loss detected, enter the discard state. */
-+ if (state->debug)
-+ printk(KERN_DEBUG "%s%d: bad sequence number: %d, expected: %d\n",
-+ __FUNCTION__, state->unit, seq, state->ccount);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ }
-+ if (state->mppe && (bits & MPPE_BIT_FLUSHED)) {
-+ arc4_setkey(state, state->session_key, state->keylen);
-+ }
-+ }
-+
-+ if (state->mppc && (bits & (MPPE_BIT_FLUSHED | MPPE_BIT_RESET))) {
-+ state->histptr = MPPE_HIST_LEN;
-+ if ((bits & MPPE_BIT_FLUSHED)) {
-+ memset(state->hist + MPPE_HIST_LEN, 0, MPPE_HIST_LEN*sizeof(u8));
-+ } else
-+ if ((bits & MPPE_BIT_RESET)) {
-+ memcpy(state->hist, state->hist + MPPE_HIST_LEN, MPPE_HIST_LEN);
-+ }
-+ }
-+
-+ /* Fill in the first part of the PPP header. The protocol field
-+ comes from the decompressed data. */
-+ obuf[0] = PPP_ADDRESS(ibuf);
-+ obuf[1] = PPP_CONTROL(ibuf);
-+ obuf += PPP_HDRLEN / 2;
-+
-+ if (state->mppe) { /* process encrypted packet */
-+ if ((bits & MPPE_BIT_ENCRYPTED)) {
-+ /* OK, packet encrypted, so decrypt it */
-+ if (state->mppc && (bits & MPPE_BIT_COMP)) {
-+ /* Hack warning !!! RC4 implementation which we use does
-+ decryption "in place" - it means that input and output
-+ buffers can be *the same* memory area. Therefore we don't
-+ need to use a temporary buffer. But be careful - other
-+ implementations don't have to be so nice. */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2), ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2));
-+ uncomplen = mppc_decompress(state, ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2), obuf, isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2),
-+ osize - (PPP_HDRLEN / 2));
-+ if (uncomplen == DECOMP_ERROR) {
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ uncomplen += PPP_HDRLEN / 2;
-+ (state->stats).comp_bytes += isize;
-+ (state->stats).comp_packets++;
-+ } else {
-+ uncomplen = isize - MPPE_OVHD;
-+ /* Decrypt the first byte in order to check if it is
-+ compressed or uncompressed protocol field */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), 1, obuf);
-+ /* Do PFC decompression */
-+ if ((obuf[0] & 0x01) != 0) {
-+ obuf[1] = obuf[0];
-+ obuf[0] = 0;
-+ obuf++;
-+ uncomplen++;
-+ }
-+ /* And finally, decrypt the rest of the frame. */
-+ arc4_decrypt(state, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2) + 1,
-+ isize - PPP_HDRLEN - (MPPE_OVHD / 2) - 1, obuf + 1);
-+ (state->stats).inc_bytes += isize;
-+ (state->stats).inc_packets++;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: encryption negotiated but not an "
-+ "encrypted packet received\n", __FUNCTION__, state->unit);
-+ mppe_change_key(state, 0);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ } else {
-+ if (state->mppc) { /* no MPPE, only MPPC */
-+ if ((bits & MPPE_BIT_COMP)) {
-+ uncomplen = mppc_decompress(state, ibuf + PPP_HDRLEN +
-+ (MPPE_OVHD / 2), obuf, isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2),
-+ osize - (PPP_HDRLEN / 2));
-+ if (uncomplen == DECOMP_ERROR) {
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ uncomplen += PPP_HDRLEN / 2;
-+ (state->stats).comp_bytes += isize;
-+ (state->stats).comp_packets++;
-+ } else {
-+ memcpy(obuf, ibuf + PPP_HDRLEN + (MPPE_OVHD / 2), isize -
-+ PPP_HDRLEN - (MPPE_OVHD / 2));
-+ uncomplen = isize - MPPE_OVHD;
-+ (state->stats).inc_bytes += isize;
-+ (state->stats).inc_packets++;
-+ }
-+ } else { /* this shouldn't happen */
-+ if (state->debug)
-+ printk(KERN_ERR "%s%d: error - not an MPPC or MPPE frame "
-+ "received\n", __FUNCTION__, state->unit);
-+ state->flushexpected = 1;
-+ return DECOMP_ERROR;
-+ }
-+ }
-+
-+ (state->stats).unc_bytes += uncomplen;
-+ (state->stats).unc_packets++;
-+
-+ return uncomplen;
-+}
-+
-+
-+/************************************************************
-+ * Module interface table
-+ ************************************************************/
-+
-+/* These are in ppp_generic.c */
-+extern int ppp_register_compressor (struct compressor *cp);
-+extern void ppp_unregister_compressor (struct compressor *cp);
-+
-+/*
-+ * Functions exported to ppp_generic.c.
-+ *
-+ * In case of MPPC/MPPE there is no need to process incompressible data
-+ * because such a data is sent in MPPC/MPPE frame. Therefore the (*incomp)
-+ * callback function isn't needed.
-+ */
-+struct compressor ppp_mppe = {
-+ .compress_proto = CI_MPPE,
-+ .comp_alloc = mppe_comp_alloc,
-+ .comp_free = mppe_comp_free,
-+ .comp_init = mppe_comp_init,
-+ .comp_reset = mppe_comp_reset,
-+ .compress = mppe_compress,
-+ .comp_stat = mppe_stats,
-+ .decomp_alloc = mppe_decomp_alloc,
-+ .decomp_free = mppe_comp_free,
-+ .decomp_init = mppe_decomp_init,
-+ .decomp_reset = mppe_decomp_reset,
-+ .decompress = mppe_decompress,
-+ .incomp = NULL,
-+ .decomp_stat = mppe_stats,
-+ .owner = THIS_MODULE
-+};
-+
-+/************************************************************
-+ * Module support routines
-+ ************************************************************/
-+
-+int __init mppe_module_init(void)
-+{
-+ int answer;
-+
-+ if (!(crypto_alg_available("arc4", 0) && crypto_alg_available("sha1", 0))) {
-+ printk(KERN_ERR "Kernel doesn't provide ARC4 and/or SHA1 algorithms "
-+ "required by MPPE/MPPC. Check CryptoAPI configuration.\n");
-+ return -ENODEV;
-+ }
-+
-+ /* Allocate space for SHAPad1, SHAPad2 and ... */
-+ sha_pad = kmalloc(sizeof(struct sha_pad), GFP_KERNEL);
-+ if (sha_pad == NULL)
-+ return -ENOMEM;
-+ /* ... initialize them */
-+ memset(sha_pad->sha_pad1, 0x00, sizeof(sha_pad->sha_pad1));
-+ memset(sha_pad->sha_pad2, 0xf2, sizeof(sha_pad->sha_pad2));
-+
-+ answer = ppp_register_compressor(&ppp_mppe);
-+ if (answer == 0) {
-+ printk(KERN_INFO "MPPE/MPPC encryption/compression module registered\n");
-+ }
-+ return answer;
-+}
-+
-+void __exit mppe_module_cleanup(void)
-+{
-+ kfree(sha_pad);
-+ ppp_unregister_compressor(&ppp_mppe);
-+ printk(KERN_INFO "MPPE/MPPC encryption/compression module unregistered\n");
-+}
-+
-+module_init(mppe_module_init);
-+module_exit(mppe_module_cleanup);
-+
-+MODULE_AUTHOR("Jan Dubiec <jdx@slackware.pl>");
-+MODULE_DESCRIPTION("MPPE/MPPC encryption/compression module for Linux");
-+MODULE_VERSION("1.2");
-+MODULE_LICENSE("Dual BSD/GPL");
-+MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE));
-diff -ruN linux-2.6.12.orig/include/linux/ppp-comp.h linux-2.6.12/include/linux/ppp-comp.h
---- linux-2.6.12.orig/include/linux/ppp-comp.h 2004-12-24 22:33:47.000000000 +0100
-+++ linux-2.6.12/include/linux/ppp-comp.h 2005-06-28 20:07:01.000000000 +0200
-@@ -28,7 +28,7 @@
- */
-
- /*
-- * ==FILEVERSION 980319==
-+ * ==FILEVERSION 20040509==
- *
- * NOTE TO MAINTAINERS:
- * If you modify this file at all, please set the above date.
-@@ -80,7 +80,7 @@
-
- /* Compress a packet */
- int (*compress) (void *state, unsigned char *rptr,
-- unsigned char *obuf, int isize, int osize);
-+ unsigned char *obuf, int isize, int osize);
-
- /* Return compression statistics */
- void (*comp_stat) (void *state, struct compstat *stats);
-@@ -101,7 +101,7 @@
-
- /* Decompress a packet. */
- int (*decompress) (void *state, unsigned char *ibuf, int isize,
-- unsigned char *obuf, int osize);
-+ unsigned char *obuf, int osize);
-
- /* Update state for an incompressible packet received */
- void (*incomp) (void *state, unsigned char *ibuf, int icnt);
-@@ -191,6 +191,42 @@
- #define DEFLATE_CHK_SEQUENCE 0
-
- /*
-+ * Definitions for MPPE/MPPC.
-+ */
-+
-+#define CI_MPPE 18 /* config option for MPPE */
-+#define CILEN_MPPE 6 /* length of config option */
-+
-+#define MPPE_OVHD 4 /* MPPE overhead */
-+#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */
-+
-+#define MPPE_STATELESS 0x01 /* configuration bit H */
-+#define MPPE_40BIT 0x20 /* configuration bit L */
-+#define MPPE_56BIT 0x80 /* configuration bit M */
-+#define MPPE_128BIT 0x40 /* configuration bit S */
-+#define MPPE_MPPC 0x01 /* configuration bit C */
-+
-+/*
-+ * Definitions for Stac LZS.
-+ */
-+
-+#define CI_LZS 17 /* config option for Stac LZS */
-+#define CILEN_LZS 5 /* length of config option */
-+
-+#define LZS_OVHD 4 /* max. LZS overhead */
-+#define LZS_HIST_LEN 2048 /* LZS history size */
-+#define LZS_MAX_CCOUNT 0x0FFF /* max. coherency counter value */
-+
-+#define LZS_MODE_NONE 0
-+#define LZS_MODE_LCB 1
-+#define LZS_MODE_CRC 2
-+#define LZS_MODE_SEQ 3
-+#define LZS_MODE_EXT 4
-+
-+#define LZS_EXT_BIT_FLUSHED 0x80 /* bit A */
-+#define LZS_EXT_BIT_COMP 0x20 /* bit C */
-+
-+/*
- * Definitions for other, as yet unsupported, compression methods.
- */
-
diff --git a/packages/linux/linux-dht-walnut-2.6.12/ppc_40x_uboot.patch b/packages/linux/linux-dht-walnut-2.6.12/ppc_40x_uboot.patch
deleted file mode 100644
index fcb700c5b4..0000000000
--- a/packages/linux/linux-dht-walnut-2.6.12/ppc_40x_uboot.patch
+++ /dev/null
@@ -1,693 +0,0 @@
-diff-tree 3e9e7c1d0b7a36fb8affb973a054c5098e27baa8 (from 90eb2665841d7b444602736e2141a01c948f75b1)
-Author: Matt Porter <mporter@kernel.crashing.org>
-Date: Mon Nov 7 00:58:15 2005 -0800
-
- [PATCH] ppc32: cleanup AMCC PPC40x eval boards to support U-Boot
-
- Cleanup PPC40x eval boards (bubinga, walnut and sycamore) to support U-Boot
- as bootloader. The OpenBIOS bd_info struct is not used in the kernel
- anymore (only U-Boot now).
-
- uImage (U-Boot) tested on walnut, sycamore and bubinga
- zImage (OpenBIOS) tested on sycamore, bubinga and ebony
-
- Signed-off-by: Stefan Roese <sr@denx.de>
- Signed-off-by: Matt Porter <mporter@kernel.crashing.org>
- Signed-off-by: Andrew Morton <akpm@osdl.org>
- Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-
-diff --git a/arch/ppc/boot/simple/Makefile b/arch/ppc/boot/simple/Makefile
-index ff0904e..82df88b 100644
---- a/arch/ppc/boot/simple/Makefile
-+++ b/arch/ppc/boot/simple/Makefile
-@@ -67,6 +67,12 @@ zimageinitrd-$(CONFIG_BAMBOO) := zImage
- entrypoint-$(CONFIG_BAMBOO) := 0x01000000
- extra.o-$(CONFIG_BAMBOO) := pibs.o
-
-+ zimage-$(CONFIG_BUBINGA) := zImage-TREE
-+zimageinitrd-$(CONFIG_BUBINGA) := zImage.initrd-TREE
-+ end-$(CONFIG_BUBINGA) := bubinga
-+ entrypoint-$(CONFIG_BUBINGA) := 0x01000000
-+ extra.o-$(CONFIG_BUBINGA) := openbios.o
-+
- zimage-$(CONFIG_EBONY) := zImage-TREE
- zimageinitrd-$(CONFIG_EBONY) := zImage.initrd-TREE
- end-$(CONFIG_EBONY) := ebony
-@@ -91,6 +97,18 @@ zimageinitrd-$(CONFIG_OCOTEA) := zImage
- entrypoint-$(CONFIG_OCOTEA) := 0x01000000
- extra.o-$(CONFIG_OCOTEA) := pibs.o
-
-+ zimage-$(CONFIG_SYCAMORE) := zImage-TREE
-+zimageinitrd-$(CONFIG_SYCAMORE) := zImage.initrd-TREE
-+ end-$(CONFIG_SYCAMORE) := sycamore
-+ entrypoint-$(CONFIG_SYCAMORE) := 0x01000000
-+ extra.o-$(CONFIG_SYCAMORE) := openbios.o
-+
-+ zimage-$(CONFIG_WALNUT) := zImage-TREE
-+zimageinitrd-$(CONFIG_WALNUT) := zImage.initrd-TREE
-+ end-$(CONFIG_WALNUT) := walnut
-+ entrypoint-$(CONFIG_WALNUT) := 0x01000000
-+ extra.o-$(CONFIG_WALNUT) := openbios.o
-+
- extra.o-$(CONFIG_EV64260) := misc-ev64260.o
- end-$(CONFIG_EV64260) := ev64260
- cacheflag-$(CONFIG_EV64260) := -include $(clear_L2_L3)
-@@ -168,7 +186,8 @@ OBJCOPY_ARGS := -O elf32-powerpc
-
- # head.o and relocate.o must be at the start.
- boot-y := head.o relocate.o $(extra.o-y) $(misc-y)
--boot-$(CONFIG_40x) += embed_config.o
-+boot-$(CONFIG_REDWOOD_5) += embed_config.o
-+boot-$(CONFIG_REDWOOD_6) += embed_config.o
- boot-$(CONFIG_8xx) += embed_config.o
- boot-$(CONFIG_8260) += embed_config.o
- boot-$(CONFIG_BSEIP) += iic.o
-diff --git a/arch/ppc/boot/simple/misc.c b/arch/ppc/boot/simple/misc.c
-index e02de5b..f415d6c 100644
---- a/arch/ppc/boot/simple/misc.c
-+++ b/arch/ppc/boot/simple/misc.c
-@@ -23,7 +23,7 @@
- #include <asm/page.h>
- #include <asm/mmu.h>
- #include <asm/bootinfo.h>
--#ifdef CONFIG_44x
-+#ifdef CONFIG_4xx
- #include <asm/ibm4xx.h>
- #endif
- #include <asm/reg.h>
-@@ -88,6 +88,14 @@ get_mem_size(void)
- return 0;
- }
-
-+#if defined(CONFIG_40x)
-+#define PPC4xx_EMAC0_MR0 EMAC0_BASE
-+#endif
-+
-+#if defined(CONFIG_44x) && defined(PPC44x_EMAC0_MR0)
-+#define PPC4xx_EMAC0_MR0 PPC44x_EMAC0_MR0
-+#endif
-+
- struct bi_record *
- decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
- {
-@@ -103,13 +111,13 @@ decompress_kernel(unsigned long load_add
- com_port = serial_init(0, NULL);
- #endif
-
--#if defined(CONFIG_44x) && defined(PPC44x_EMAC0_MR0)
-+#if defined(PPC4xx_EMAC0_MR0)
- /* Reset MAL */
- mtdcr(DCRN_MALCR(DCRN_MAL_BASE), MALCR_MMSR);
- /* Wait for reset */
- while (mfdcr(DCRN_MALCR(DCRN_MAL_BASE)) & MALCR_MMSR) {};
- /* Reset EMAC */
-- *(volatile unsigned long *)PPC44x_EMAC0_MR0 = 0x20000000;
-+ *(volatile unsigned long *)PPC4xx_EMAC0_MR0 = 0x20000000;
- __asm__ __volatile__("eieio");
- #endif
-
-@@ -164,7 +172,9 @@ decompress_kernel(unsigned long load_add
- puts(" "); puthex((unsigned long)(&__ramdisk_end));puts("\n");
- }
-
-+#ifndef CONFIG_40x /* don't overwrite the 40x image located at 0x00400000! */
- avail_ram = (char *)0x00400000;
-+#endif
- end_avail = (char *)0x00800000;
- puts("avail ram: "); puthex((unsigned long)avail_ram); puts(" ");
- puthex((unsigned long)end_avail); puts("\n");
-diff --git a/arch/ppc/boot/simple/openbios.c b/arch/ppc/boot/simple/openbios.c
-index c732b6d..81f11d8 100644
---- a/arch/ppc/boot/simple/openbios.c
-+++ b/arch/ppc/boot/simple/openbios.c
-@@ -1,19 +1,43 @@
- /*
- * arch/ppc/boot/simple/openbios.c
- *
-- * 2005 (c) SYSGO AG - g.jaeger@sysgo.com
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * 2005 (c) SYSGO AG - g.jaeger@sysgo.com
-+ *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without
- * any warranty of any kind, whether express or implied.
- *
-- * Derived from arch/ppc/boot/simple/pibs.c (from MontaVista)
- */
-
- #include <linux/types.h>
- #include <linux/config.h>
- #include <linux/string.h>
- #include <asm/ppcboot.h>
--#include <platforms/4xx/ebony.h>
-+#include <asm/ibm4xx.h>
-+#include <asm/reg.h>
-+#ifdef CONFIG_40x
-+#include <asm/io.h>
-+#endif
-+
-+#if defined(CONFIG_BUBINGA)
-+#define BOARD_INFO_VECTOR 0xFFF80B50 /* openbios 1.19 moved this vector down - armin */
-+#else
-+#define BOARD_INFO_VECTOR 0xFFFE0B50
-+#endif
-+
-+#ifdef CONFIG_40x
-+/* Supply a default Ethernet address for those eval boards that don't
-+ * ship with one. This is an address from the MBX board I have, so
-+ * it is unlikely you will find it on your network.
-+ */
-+static ushort def_enet_addr[] = { 0x0800, 0x3e26, 0x1559 };
-+
-+extern unsigned long timebase_period_ns;
-+#endif /* CONFIG_40x */
-
- extern unsigned long decompress_kernel(unsigned long load_addr, int num_words,
- unsigned long cksum);
-@@ -23,15 +47,85 @@ extern unsigned long decompress_kernel(u
- bd_t hold_resid_buf __attribute__ ((__section__ (".data.boot")));
- bd_t *hold_residual = &hold_resid_buf;
-
-+typedef struct openbios_board_info {
-+ unsigned char bi_s_version[4]; /* Version of this structure */
-+ unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-+ unsigned int bi_memsize; /* DRAM installed, in bytes */
-+#ifdef CONFIG_405EP
-+ unsigned char bi_enetaddr[2][6]; /* Local Ethernet MAC address */
-+#else /* CONFIG_405EP */
-+ unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-+#endif /* CONFIG_405EP */
-+ unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-+ unsigned int bi_intfreq; /* Processor speed, in Hz */
-+ unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-+ unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
-+#ifdef CONFIG_405EP
-+ unsigned int bi_opb_busfreq; /* OPB Bus speed, in Hz */
-+ unsigned int bi_pllouta_freq; /* PLL OUTA speed, in Hz */
-+#endif /* CONFIG_405EP */
-+} openbios_bd_t;
-+
- void *
- load_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
- void *ign1, void *ign2)
- {
-- decompress_kernel(load_addr, num_words, cksum);
-+#ifdef CONFIG_40x
-+ openbios_bd_t *openbios_bd = NULL;
-+ openbios_bd_t *(*get_board_info)(void) =
-+ (openbios_bd_t *(*)(void))(*(unsigned long *)BOARD_INFO_VECTOR);
-+
-+ /*
-+ * On 40x platforms we not only need the MAC-addresses, but also the
-+ * clocks and memsize. Now try to get all values using the OpenBIOS
-+ * "get_board_info()" callback.
-+ */
-+ if ((openbios_bd = get_board_info()) != NULL) {
-+ /*
-+ * Copy bd_info from OpenBIOS struct into U-Boot struct
-+ * used by kernel
-+ */
-+ hold_residual->bi_memsize = openbios_bd->bi_memsize;
-+ hold_residual->bi_intfreq = openbios_bd->bi_intfreq;
-+ hold_residual->bi_busfreq = openbios_bd->bi_busfreq;
-+ hold_residual->bi_pci_busfreq = openbios_bd->bi_pci_busfreq;
-+ memcpy(hold_residual->bi_pci_enetaddr, openbios_bd->bi_pci_enetaddr, 6);
-+#ifdef CONFIG_405EP
-+ memcpy(hold_residual->bi_enetaddr, openbios_bd->bi_enetaddr[0], 6);
-+ memcpy(hold_residual->bi_enet1addr, openbios_bd->bi_enetaddr[1], 6);
-+ hold_residual->bi_opbfreq = openbios_bd->bi_opb_busfreq;
-+ hold_residual->bi_procfreq = openbios_bd->bi_pllouta_freq;
-+#else /* CONFIG_405EP */
-+ memcpy(hold_residual->bi_enetaddr, openbios_bd->bi_enetaddr, 6);
-+#endif /* CONFIG_405EP */
-+ } else {
-+ /* Hmmm...better try to stuff some defaults.
-+ */
-+ hold_residual->bi_memsize = 16 * 1024 * 1024;
-+ hold_residual->bi_intfreq = 200000000;
-+ hold_residual->bi_busfreq = 100000000;
-+ hold_residual->bi_pci_busfreq = 66666666;
-+
-+ /*
-+ * Only supply one mac-address in this fallback
-+ */
-+ memcpy(hold_residual->bi_enetaddr, (void *)def_enet_addr, 6);
-+#ifdef CONFIG_405EP
-+ hold_residual->bi_opbfreq = 50000000;
-+ hold_residual->bi_procfreq = 200000000;
-+#endif /* CONFIG_405EP */
-+ }
-+
-+ timebase_period_ns = 1000000000 / hold_residual->bi_intfreq;
-+#endif /* CONFIG_40x */
-
-+#ifdef CONFIG_440GP
- /* simply copy the MAC addresses */
-- memcpy(hold_residual->bi_enetaddr, (char *)EBONY_OPENBIOS_MAC_BASE, 6);
-- memcpy(hold_residual->bi_enet1addr, (char *)(EBONY_OPENBIOS_MAC_BASE+EBONY_OPENBIOS_MAC_OFFSET), 6);
-+ memcpy(hold_residual->bi_enetaddr, (char *)OPENBIOS_MAC_BASE, 6);
-+ memcpy(hold_residual->bi_enet1addr, (char *)(OPENBIOS_MAC_BASE+OPENBIOS_MAC_OFFSET), 6);
-+#endif /* CONFIG_440GP */
-+
-+ decompress_kernel(load_addr, num_words, cksum);
-
- return (void *)hold_residual;
- }
-diff --git a/arch/ppc/platforms/4xx/Kconfig b/arch/ppc/platforms/4xx/Kconfig
-index e70e4c6..d883791 100644
---- a/arch/ppc/platforms/4xx/Kconfig
-+++ b/arch/ppc/platforms/4xx/Kconfig
-@@ -225,7 +225,7 @@ config EMBEDDEDBOOT
-
- config IBM_OPENBIOS
- bool
-- depends on ASH || BUBINGA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
-+ depends on ASH || REDWOOD_5 || REDWOOD_6
- default y
-
- config PPC4xx_DMA
-diff --git a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c
-index 3678abf..8110f55 100644
---- a/arch/ppc/platforms/4xx/bubinga.c
-+++ b/arch/ppc/platforms/4xx/bubinga.c
-@@ -89,7 +89,7 @@ bubinga_early_serial_map(void)
- * by 16.
- */
- uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV);
-- uart_clock = __res.bi_pllouta_freq / uart_div;
-+ uart_clock = __res.bi_procfreq / uart_div;
-
- /* Setup serial port access */
- memset(&port, 0, sizeof(port));
-diff --git a/arch/ppc/platforms/4xx/bubinga.h b/arch/ppc/platforms/4xx/bubinga.h
-index b1df856..b5380cf 100644
---- a/arch/ppc/platforms/4xx/bubinga.h
-+++ b/arch/ppc/platforms/4xx/bubinga.h
-@@ -1,52 +1,34 @@
- /*
-- * Support for IBM PPC 405EP evaluation board (Bubinga).
-+ * arch/ppc/platforms/4xx/bubinga.h
- *
-- * Author: SAW (IBM), derived from walnut.h.
-- * Maintained by MontaVista Software <source@mvista.com>
-+ * Bubinga board definitions
-+ *
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * SAW (IBM)
-+ * 2003 (c) MontaVista Softare Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2003 (c) MontaVista Softare Inc. This file is licensed under the
-- * terms of the GNU General Public License version 2. This program is
-- * licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __BUBINGA_H__
- #define __BUBINGA_H__
-
--/* 405EP */
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405ep.h>
--
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[2][6]; /* Local Ethernet MAC address */ unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
-- unsigned int bi_opb_busfreq; /* OPB Bus speed, in Hz */
-- unsigned int bi_pllouta_freq; /* PLL OUTA speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
-+#include <asm/ppcboot.h>
-
- /* Memory map for the Bubinga board.
- * Generic 4xx plus RTC.
- */
-
--extern void *bubinga_rtc_base;
- #define BUBINGA_RTC_PADDR ((uint)0xf0000000)
- #define BUBINGA_RTC_VADDR BUBINGA_RTC_PADDR
- #define BUBINGA_RTC_SIZE ((uint)8*1024)
-@@ -58,12 +40,18 @@ extern void *bubinga_rtc_base;
- * for typical configurations at various CPU speeds.
- * The base baud is calculated as (FWDA / EXT UART DIV / 16)
- */
--#define BASE_BAUD 0
-+#define BASE_BAUD 0
-
--#define BUBINGA_FPGA_BASE 0xF0300000
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 1 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-
--#define PPC4xx_MACHINE_NAME "IBM Bubinga"
-+#define PPC4xx_MACHINE_NAME "IBM Bubinga"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __BUBINGA_H__ */
- #endif /* __KERNEL__ */
-diff --git a/arch/ppc/platforms/4xx/ebony.h b/arch/ppc/platforms/4xx/ebony.h
-index d08faa4..b91ad42 100644
---- a/arch/ppc/platforms/4xx/ebony.h
-+++ b/arch/ppc/platforms/4xx/ebony.h
-@@ -24,8 +24,8 @@
- #define PPC44x_EMAC0_MR0 0xE0000800
-
- /* Where to find the MAC info */
--#define EBONY_OPENBIOS_MAC_BASE 0xfffffe0c
--#define EBONY_OPENBIOS_MAC_OFFSET 0x0c
-+#define OPENBIOS_MAC_BASE 0xfffffe0c
-+#define OPENBIOS_MAC_OFFSET 0x0c
-
- /* Default clock rates for Rev. B and Rev. C silicon */
- #define EBONY_440GP_RB_SYSCLK 33000000
-diff --git a/arch/ppc/platforms/4xx/sycamore.c b/arch/ppc/platforms/4xx/sycamore.c
-index d8019ee..281b4a2 100644
---- a/arch/ppc/platforms/4xx/sycamore.c
-+++ b/arch/ppc/platforms/4xx/sycamore.c
-@@ -88,9 +88,6 @@ ppc405_map_irq(struct pci_dev *dev, unsi
- void __init
- sycamore_setup_arch(void)
- {
--#define SYCAMORE_PS2_BASE 0xF0100000
--#define SYCAMORE_FPGA_BASE 0xF0300000
--
- void *fpga_brdc;
- unsigned char fpga_brdc_data;
- void *fpga_enable;
-@@ -100,7 +97,7 @@ sycamore_setup_arch(void)
-
- ppc4xx_setup_arch();
-
-- ibm_ocp_set_emac(0, 1);
-+ ibm_ocp_set_emac(0, 0);
-
- kb_data = ioremap(SYCAMORE_PS2_BASE, 8);
- if (!kb_data) {
-@@ -111,7 +108,7 @@ sycamore_setup_arch(void)
-
- kb_cs = kb_data + 1;
-
-- fpga_status = ioremap(SYCAMORE_FPGA_BASE, 8);
-+ fpga_status = ioremap(PPC40x_FPGA_BASE, 8);
- if (!fpga_status) {
- printk(KERN_CRIT
- "sycamore_setup_arch() fpga_status ioremap failed\n");
-diff --git a/arch/ppc/platforms/4xx/sycamore.h b/arch/ppc/platforms/4xx/sycamore.h
-index 3e7b4e2..1cd6c82 100644
---- a/arch/ppc/platforms/4xx/sycamore.h
-+++ b/arch/ppc/platforms/4xx/sycamore.h
-@@ -1,67 +1,52 @@
- /*
- * arch/ppc/platforms/4xx/sycamore.h
- *
-- * Macros, definitions, and data structures specific to the IBM PowerPC
-- * 405GPr "Sycamore" evaluation board.
-+ * Sycamore board definitions
- *
-- * Author: Armin Kuster <akuster@mvista.com>
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
-+ *
-+ * Based on original work by
-+ * Armin Kuster <akuster@mvista.com>
-+ * 2000 (c) MontaVista, Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2000 (c) MontaVista, Software, Inc. This file is licensed under
-- * the terms of the GNU General Public License version 2. This program
-- * is licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __ASM_SYCAMORE_H__
- #define __ASM_SYCAMORE_H__
-
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405gpr.h>
-+#include <asm/ppcboot.h>
-
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's "Sycamore" evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-- unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
--
--/* Memory map for the IBM "Sycamore" 405GP evaluation board.
-+/* Memory map for the IBM "Sycamore" 405GPr evaluation board.
- * Generic 4xx plus RTC.
- */
-
--extern void *sycamore_rtc_base;
- #define SYCAMORE_RTC_PADDR ((uint)0xf0000000)
- #define SYCAMORE_RTC_VADDR SYCAMORE_RTC_PADDR
--#define SYCAMORE_RTC_SIZE ((uint)8*1024)
-+#define SYCAMORE_RTC_SIZE ((uint)8*1024)
-
--#ifdef CONFIG_PPC405GP_INTERNAL_CLOCK
--#define BASE_BAUD 201600
--#else
- #define BASE_BAUD 691200
--#endif
-
--#define SYCAMORE_PS2_BASE 0xF0100000
--#define SYCAMORE_FPGA_BASE 0xF0300000
-+#define SYCAMORE_PS2_BASE 0xF0100000
-+
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 5 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-
- #define PPC4xx_MACHINE_NAME "IBM Sycamore"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __ASM_SYCAMORE_H__ */
- #endif /* __KERNEL__ */
-diff --git a/arch/ppc/platforms/4xx/walnut.c b/arch/ppc/platforms/4xx/walnut.c
-index a33eda4..74cb331 100644
---- a/arch/ppc/platforms/4xx/walnut.c
-+++ b/arch/ppc/platforms/4xx/walnut.c
-@@ -90,7 +90,7 @@ walnut_setup_arch(void)
-
- kb_cs = kb_data + 1;
-
-- fpga_status = ioremap(WALNUT_FPGA_BASE, 8);
-+ fpga_status = ioremap(PPC40x_FPGA_BASE, 8);
- if (!fpga_status) {
- printk(KERN_CRIT
- "walnut_setup_arch() fpga_status ioremap failed\n");
-diff --git a/arch/ppc/platforms/4xx/walnut.h b/arch/ppc/platforms/4xx/walnut.h
-index 04cfbf3..dcf2691 100644
---- a/arch/ppc/platforms/4xx/walnut.h
-+++ b/arch/ppc/platforms/4xx/walnut.h
-@@ -1,72 +1,55 @@
- /*
- * arch/ppc/platforms/4xx/walnut.h
- *
-- * Macros, definitions, and data structures specific to the IBM PowerPC
-- * 405GP "Walnut" evaluation board.
-+ * Walnut board definitions
- *
-- * Authors: Grant Erickson <grant@lcse.umn.edu>, Frank Rowand
-- * <frank_rowand@mvista.com>, Debbie Chu <debbie_chu@mvista.com> or
-- * source@mvista.com
-+ * Copyright (c) 2005 DENX Software Engineering
-+ * Stefan Roese <sr@denx.de>
- *
-- * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu>
-+ * Based on original work by
-+ * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu>
-+ * Frank Rowand <frank_rowand@mvista.com>
-+ * Debbie Chu <debbie_chu@mvista.com>
-+ * 2000 (c) MontaVista, Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
- *
-- * 2000 (c) MontaVista, Software, Inc. This file is licensed under
-- * the terms of the GNU General Public License version 2. This program
-- * is licensed "as is" without any warranty of any kind, whether express
-- * or implied.
- */
-
- #ifdef __KERNEL__
- #ifndef __ASM_WALNUT_H__
- #define __ASM_WALNUT_H__
-
--/* We have a 405GP core */
-+#include <linux/config.h>
- #include <platforms/4xx/ibm405gp.h>
--
--#ifndef __ASSEMBLY__
--/*
-- * Data structure defining board information maintained by the boot
-- * ROM on IBM's "Walnut" evaluation board. An effort has been made to
-- * keep the field names consistent with the 8xx 'bd_t' board info
-- * structures.
-- */
--
--typedef struct board_info {
-- unsigned char bi_s_version[4]; /* Version of this structure */
-- unsigned char bi_r_version[30]; /* Version of the IBM ROM */
-- unsigned int bi_memsize; /* DRAM installed, in bytes */
-- unsigned char bi_enetaddr[6]; /* Local Ethernet MAC address */
-- unsigned char bi_pci_enetaddr[6]; /* PCI Ethernet MAC address */
-- unsigned int bi_intfreq; /* Processor speed, in Hz */
-- unsigned int bi_busfreq; /* PLB Bus speed, in Hz */
-- unsigned int bi_pci_busfreq; /* PCI Bus speed, in Hz */
--} bd_t;
--
--/* Some 4xx parts use a different timebase frequency from the internal clock.
--*/
--#define bi_tbfreq bi_intfreq
--
-+#include <asm/ppcboot.h>
-
- /* Memory map for the IBM "Walnut" 405GP evaluation board.
- * Generic 4xx plus RTC.
- */
-
--extern void *walnut_rtc_base;
- #define WALNUT_RTC_PADDR ((uint)0xf0000000)
- #define WALNUT_RTC_VADDR WALNUT_RTC_PADDR
- #define WALNUT_RTC_SIZE ((uint)8*1024)
-
--#ifdef CONFIG_PPC405GP_INTERNAL_CLOCK
--#define BASE_BAUD 201600
--#else
- #define BASE_BAUD 691200
--#endif
-
- #define WALNUT_PS2_BASE 0xF0100000
--#define WALNUT_FPGA_BASE 0xF0300000
-+
-+/* Flash */
-+#define PPC40x_FPGA_BASE 0xF0300000
-+#define PPC40x_FPGA_REG_OFFS 5 /* offset to flash map reg */
-+#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
-+#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
-+#define PPC40x_FLASH_LOW 0xFFF00000
-+#define PPC40x_FLASH_HIGH 0xFFF80000
-+#define PPC40x_FLASH_SIZE 0x80000
-+#define WALNUT_FPGA_BASE PPC40x_FPGA_BASE
-
- #define PPC4xx_MACHINE_NAME "IBM Walnut"
-
--#endif /* !__ASSEMBLY__ */
- #endif /* __ASM_WALNUT_H__ */
- #endif /* __KERNEL__ */
-diff --git a/include/asm-ppc/ibm_ocp.h b/include/asm-ppc/ibm_ocp.h
-index 6f10a25..9c21de1 100644
---- a/include/asm-ppc/ibm_ocp.h
-+++ b/include/asm-ppc/ibm_ocp.h
-@@ -131,9 +131,22 @@ static inline void ibm_ocp_set_emac(int
- /* Copy MAC addresses to EMAC additions */
- for (i=start; i<=end; i++) {
- def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i);
-- memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-- &__res.bi_enetaddr[i],
-- 6);
-+ if (i == 0)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enetaddr, 6);
-+#if defined(CONFIG_405EP) || defined(CONFIG_44x)
-+ else if (i == 1)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet1addr, 6);
-+#endif
-+#if defined(CONFIG_440GX)
-+ else if (i == 2)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet2addr, 6);
-+ else if (i == 3)
-+ memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
-+ __res.bi_enet3addr, 6);
-+#endif
- }
- }
- #endif
-diff --git a/include/asm-ppc/ppcboot.h b/include/asm-ppc/ppcboot.h
-index fe24e45..6b7b63f 100644
---- a/include/asm-ppc/ppcboot.h
-+++ b/include/asm-ppc/ppcboot.h
-@@ -73,8 +73,8 @@ typedef struct bd_info {
- #if defined(CONFIG_HYMOD)
- hymod_conf_t bi_hymod_conf; /* hymod configuration information */
- #endif
--#if defined(CONFIG_EVB64260) || defined(CONFIG_44x) || defined(CONFIG_85xx) ||\
-- defined(CONFIG_83xx)
-+#if defined(CONFIG_EVB64260) || defined(CONFIG_405EP) || defined(CONFIG_44x) || \
-+ defined(CONFIG_85xx) || defined(CONFIG_83xx)
- /* second onboard ethernet port */
- unsigned char bi_enet1addr[6];
- #endif
-@@ -96,5 +96,7 @@ typedef struct bd_info {
- #endif
- } bd_t;
-
-+#define bi_tbfreq bi_intfreq
-+
- #endif /* __ASSEMBLY__ */
- #endif /* __ASM_PPCBOOT_H__ */
diff --git a/packages/linux/linux-dht-walnut_2.6.12.6.bb b/packages/linux/linux-dht-walnut_2.6.12.6.bb
deleted file mode 100644
index 7c0f434477..0000000000
--- a/packages/linux/linux-dht-walnut_2.6.12.6.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "Linux kernel for DHT-Walnut (ppc) machine"
-LICENSE = "GPL"
-PR = "r2"
-DEPENDS = "u-boot"
-
-KERNEL_CCSUFFIX = "-3.4.4"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://ppc_40x_uboot.patch;patch=1 \
- file://iw_we18-5.diff;patch=1 \
- file://linux-2.6.12-mppe-mppc-1.3.patch;patch=1 \
- file://dht-walnut_defconfig"
-
-
-S = "${WORKDIR}/linux-${PV}"
-
-inherit kernel
-
-
-FILES_kernel-image = "/boot/zImage.elf"
-
-export OS = "Linux"
-ARCH = "ppc"
-KERNEL_IMAGETYPE = "zImage"
-KERNEL_OUTPUT = "arch/ppc/boot/images/zImage.elf"
-
-
-
-
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/dht-walnut_defconfig ${S}/.config
-}
-
-do_stage_append () {
-#need ppc platforms includes + friends in order for external kernel modules to compile
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms
- install -m 0755 arch/ppc/platforms/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/4xx
- install -m 0755 arch/ppc/platforms/4xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/4xx
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/83xx
- install -m 0755 arch/ppc/platforms/83xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/83xx
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/85xx
- install -m 0755 arch/ppc/platforms/85xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/85xx
-
- install -d ${STAGING_KERNEL_DIR}/include/asm-m68k
- install -m 0755 include/asm-m68k/*.h ${STAGING_KERNEL_DIR}/include/asm-m68k
-}
-
-do_install_append () {
- install -d ${DEPLOY_DIR}/images
- install -m 0755 arch/ppc/boot/images/zImage.elf ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
- install -m 0755 vmlinux ${DEPLOY_DIR}/images/
- powerpc-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR}/images/vmlinux ${DEPLOY_DIR}/images/linux.bin
- gzip -f -9 ${DEPLOY_DIR}/images/linux.bin
- mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "owmnr"+${PV}+"-ppc" -d ${DEPLOY_DIR}/images/linux.bin.gz ${DEPLOY_DIR}/images/uImage-${PV}-${MACHINE}-${DATETIME}.bin
- rm ${DEPLOY_DIR}/images/vmlinux
- rm ${DEPLOY_DIR}/images/linux.bin.gz
-
-
-}
-
-pkg_postinst_kernel () {
- true
-}
-
-pkg_postrm_kernel () {
- true
-}
-
diff --git a/packages/linux/linux-dht-walnut_2.6.12.bb b/packages/linux/linux-dht-walnut_2.6.12.bb
deleted file mode 100644
index 7d362ea659..0000000000
--- a/packages/linux/linux-dht-walnut_2.6.12.bb
+++ /dev/null
@@ -1,92 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "Linux kernel for DHT-Walnut (ppc) machine"
-LICENSE = "GPL"
-PR = "r0"
-DEPENDS = "u-boot"
-
-KERNEL_CCSUFFIX = "-3.4.4"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://ppc_40x_uboot.patch;patch=1 \
- file://iw_we18-5.diff;patch=1 \
- file://linux-2.6.12-mppe-mppc-1.3.patch;patch=1 \
- file://dht-walnut_defconfig"
-
-
-S = "${WORKDIR}/linux-${PV}"
-
-inherit kernel
-
-
-FILES_kernel-image = "/boot/zImage.elf"
-
-export OS = "Linux"
-ARCH = "ppc"
-KERNEL_IMAGETYPE = "zImage"
-KERNEL_OUTPUT = "arch/ppc/boot/images/zImage.elf"
-
-
-
-
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/dht-walnut_defconfig ${S}/.config
-# oe_machinstall -m 0644 ${S}/arch/ppc/configs/dht-walnut_defconfig ${S}/.config || die "no default configuration for ${MACHINE} available."
-# oe_runmake oldconfig
-}
-
-do_stage_append () {
-#need ppc platforms includes + friends in order for external kernel modules to compile
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms
- install -m 0755 arch/ppc/platforms/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/4xx
- install -m 0755 arch/ppc/platforms/4xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/4xx
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/83xx
- install -m 0755 arch/ppc/platforms/83xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/83xx
-
- install -d ${STAGING_KERNEL_DIR}/arch/ppc/platforms/85xx
- install -m 0755 arch/ppc/platforms/85xx/*.h ${STAGING_KERNEL_DIR}/arch/ppc/platforms/85xx
-
- install -d ${STAGING_KERNEL_DIR}/include/asm-m68k
- install -m 0755 include/asm-m68k/*.h ${STAGING_KERNEL_DIR}/include/asm-m68k
-}
-
-do_install_append () {
- install -d ${DEPLOY_DIR}/images
- install -m 0755 arch/ppc/boot/images/zImage.elf ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
- install -m 0755 vmlinux ${DEPLOY_DIR}/images/
- powerpc-linux-uclibc-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR}/images/vmlinux ${DEPLOY_DIR}/images/linux.bin
- gzip -f -9 ${DEPLOY_DIR}/images/linux.bin
- mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "owmnr-2.6.12-ppc" -d ${DEPLOY_DIR}/images/linux.bin.gz ${DEPLOY_DIR}/images/uImage-${PV}-${MACHINE}-${DATETIME}.bin
- rm ${DEPLOY_DIR}/images/vmlinux
- rm ${DEPLOY_DIR}/images/linux.bin.gz
-
-
-}
-
-pkg_postinst_kernel () {
- true
-}
-
-pkg_postrm_kernel () {
- true
-}
-
-
-
-
-#do_configure_prepend() {
-# install -m 0644 ${WORKDIR}/dht-walnut_defconfig ${S}/.config
-#}
-
-
-#do_deploy() {
-# install -d ${DEPLOY_DIR}/images
-# install -m 0644 arch/${ARCH}/boot/images/zImage.elf ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin}
-
-#do_deploy[dirs] = "${S}"
-
-#addtask deploy before do_build after do_compile
-
diff --git a/packages/linux/linux-dht-walnut_2.6.20.bb b/packages/linux/linux-dht-walnut_2.6.20.bb
index 4a93954dfe..bc876ebf34 100644
--- a/packages/linux/linux-dht-walnut_2.6.20.bb
+++ b/packages/linux/linux-dht-walnut_2.6.20.bb
@@ -1,10 +1,12 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
SECTION = "kernel"
DESCRIPTION = "Linux kernel for DHT-Walnut (ppc) machine"
LICENSE = "GPL"
-PR = "r1"
+PR = "r3"
DEPENDS = "u-boot"
-KERNEL_CCSUFFIX = "-3.4.4"
+COMPATIBLE_MACHINE = "dht-walnut"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://dht-walnut_defconfig"
@@ -46,14 +48,17 @@ do_stage_append () {
do_install_append () {
- install -d ${DEPLOY_DIR}/images
- install -m 0755 arch/ppc/boot/images/zImage.elf ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
- install -m 0755 vmlinux ${DEPLOY_DIR}/images/
- powerpc-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR}/images/vmlinux ${DEPLOY_DIR}/images/linux.bin
- gzip -f -9 ${DEPLOY_DIR}/images/linux.bin
- mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "ppc405"+${PV} -d ${DEPLOY_DIR}/images/linux.bin.gz ${DEPLOY_DIR}/images/uImage-${PV}-${MACHINE}-${DATETIME}.bin
- rm ${DEPLOY_DIR}/images/vmlinux
- rm ${DEPLOY_DIR}/images/linux.bin.gz
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 arch/ppc/boot/images/zImage.elf \
+ ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
+ install -m 0755 vmlinux ${DEPLOY_DIR_IMAGE}/
+ powerpc${TARGET_VENDOR}-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S \
+ ${DEPLOY_DIR_IMAGE}/vmlinux ${DEPLOY_DIR_IMAGE}/linux.bin
+ gzip -f -9 ${DEPLOY_DIR_IMAGE}/linux.bin
+ mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "ppc405"+${PV} -d ${DEPLOY_DIR_IMAGE}/linux.bin.gz \
+ ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
+ rm ${DEPLOY_DIR_IMAGE}/vmlinux
+ rm ${DEPLOY_DIR_IMAGE}/linux.bin.gz
}
diff --git a/packages/linux/linux-efika-2.6.20.11/.mtn2git_empty b/packages/linux/linux-efika-2.6.20.11/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-efika-2.6.20.11/.mtn2git_empty
diff --git a/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch b/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch
new file mode 100644
index 0000000000..29071a99ac
--- /dev/null
+++ b/packages/linux/linux-efika-2.6.20.11/sched-cfs-v9-v2.6.20.11.patch
@@ -0,0 +1,5590 @@
+This is the Complete Fair Scheduler (CFS) v9 patch for
+linux 2.6.20.10 patch (rediffed cleanly against .11).
+
+http://people.redhat.com/mingo/cfs-scheduler/
+
+Index: linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/Documentation/kernel-parameters.txt
++++ linux-cfs-2.6.20.8.q/Documentation/kernel-parameters.txt
+@@ -914,49 +914,6 @@ and is between 256 and 4096 characters.
+
+ mga= [HW,DRM]
+
+- migration_cost=
+- [KNL,SMP] debug: override scheduler migration costs
+- Format: <level-1-usecs>,<level-2-usecs>,...
+- This debugging option can be used to override the
+- default scheduler migration cost matrix. The numbers
+- are indexed by 'CPU domain distance'.
+- E.g. migration_cost=1000,2000,3000 on an SMT NUMA
+- box will set up an intra-core migration cost of
+- 1 msec, an inter-core migration cost of 2 msecs,
+- and an inter-node migration cost of 3 msecs.
+-
+- WARNING: using the wrong values here can break
+- scheduler performance, so it's only for scheduler
+- development purposes, not production environments.
+-
+- migration_debug=
+- [KNL,SMP] migration cost auto-detect verbosity
+- Format=<0|1|2>
+- If a system's migration matrix reported at bootup
+- seems erroneous then this option can be used to
+- increase verbosity of the detection process.
+- We default to 0 (no extra messages), 1 will print
+- some more information, and 2 will be really
+- verbose (probably only useful if you also have a
+- serial console attached to the system).
+-
+- migration_factor=
+- [KNL,SMP] multiply/divide migration costs by a factor
+- Format=<percent>
+- This debug option can be used to proportionally
+- increase or decrease the auto-detected migration
+- costs for all entries of the migration matrix.
+- E.g. migration_factor=150 will increase migration
+- costs by 50%. (and thus the scheduler will be less
+- eager migrating cache-hot tasks)
+- migration_factor=80 will decrease migration costs
+- by 20%. (thus the scheduler will be more eager to
+- migrate tasks)
+-
+- WARNING: using the wrong values here can break
+- scheduler performance, so it's only for scheduler
+- development purposes, not production environments.
+-
+ mousedev.tap_time=
+ [MOUSE] Maximum time between finger touching and
+ leaving touchpad surface for touch to be considered
+Index: linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt
+===================================================================
+--- /dev/null
++++ linux-cfs-2.6.20.8.q/Documentation/sched-design-CFS.txt
+@@ -0,0 +1,107 @@
++[announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]
++
++i'm pleased to announce the first release of the "Modular Scheduler Core
++and Completely Fair Scheduler [CFS]" patchset:
++
++ http://redhat.com/~mingo/cfs-scheduler/
++
++This project is a complete rewrite of the Linux task scheduler. My goal
++is to address various feature requests and to fix deficiencies in the
++vanilla scheduler that were suggested/found in the past few years, both
++for desktop scheduling and for server scheduling workloads.
++
++[ QuickStart: apply the patch, recompile, reboot. The new scheduler
++ will be active by default and all tasks will default to the
++ SCHED_NORMAL interactive scheduling class. ]
++
++Highlights are:
++
++ - the introduction of Scheduling Classes: an extensible hierarchy of
++ scheduler modules. These modules encapsulate scheduling policy
++ details and are handled by the scheduler core without the core
++ code assuming about them too much.
++
++ - sched_fair.c implements the 'CFS desktop scheduler': it is a
++ replacement for the vanilla scheduler's SCHED_OTHER interactivity
++ code.
++
++ i'd like to give credit to Con Kolivas for the general approach here:
++ he has proven via RSDL/SD that 'fair scheduling' is possible and that
++ it results in better desktop scheduling. Kudos Con!
++
++ The CFS patch uses a completely different approach and implementation
++ from RSDL/SD. My goal was to make CFS's interactivity quality exceed
++ that of RSDL/SD, which is a high standard to meet :-) Testing
++ feedback is welcome to decide this one way or another. [ and, in any
++ case, all of SD's logic could be added via a kernel/sched_sd.c module
++ as well, if Con is interested in such an approach. ]
++
++ CFS's design is quite radical: it does not use runqueues, it uses a
++ time-ordered rbtree to build a 'timeline' of future task execution,
++ and thus has no 'array switch' artifacts (by which both the vanilla
++ scheduler and RSDL/SD are affected).
++
++ CFS uses nanosecond granularity accounting and does not rely on any
++ jiffies or other HZ detail. Thus the CFS scheduler has no notion of
++ 'timeslices' and has no heuristics whatsoever. There is only one
++ central tunable:
++
++ /proc/sys/kernel/sched_granularity_ns
++
++ which can be used to tune the scheduler from 'desktop' (low
++ latencies) to 'server' (good batching) workloads. It defaults to a
++ setting suitable for desktop workloads. SCHED_BATCH is handled by the
++ CFS scheduler module too.
++
++ due to its design, the CFS scheduler is not prone to any of the
++ 'attacks' that exist today against the heuristics of the stock
++ scheduler: fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c all
++ work fine and do not impact interactivity and produce the expected
++ behavior.
++
++ the CFS scheduler has a much stronger handling of nice levels and
++ SCHED_BATCH: both types of workloads should be isolated much more
++ agressively than under the vanilla scheduler.
++
++ ( another rdetail: due to nanosec accounting and timeline sorting,
++ sched_yield() support is very simple under CFS, and in fact under
++ CFS sched_yield() behaves much better than under any other
++ scheduler i have tested so far. )
++
++ - sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler
++ way than the vanilla scheduler does. It uses 100 runqueues (for all
++ 100 RT priority levels, instead of 140 in the vanilla scheduler)
++ and it needs no expired array.
++
++ - reworked/sanitized SMP load-balancing: the runqueue-walking
++ assumptions are gone from the load-balancing code now, and
++ iterators of the scheduling modules are used. The balancing code got
++ quite a bit simpler as a result.
++
++the core scheduler got smaller by more than 700 lines:
++
++ kernel/sched.c | 1454 ++++++++++++++++------------------------------------------------
++ 1 file changed, 372 insertions(+), 1082 deletions(-)
++
++and even adding all the scheduling modules, the total size impact is
++relatively small:
++
++ 18 files changed, 1454 insertions(+), 1133 deletions(-)
++
++most of the increase is due to extensive comments. The kernel size
++impact is in fact a small negative:
++
++ text data bss dec hex filename
++ 23366 4001 24 27391 6aff kernel/sched.o.vanilla
++ 24159 2705 56 26920 6928 kernel/sched.o.CFS
++
++(this is mainly due to the benefit of getting rid of the expired array
++and its data structure overhead.)
++
++thanks go to Thomas Gleixner and Arjan van de Ven for review of this
++patchset.
++
++as usual, any sort of feedback, bugreports, fixes and suggestions are
++more than welcome,
++
++ Ingo
+Index: linux-cfs-2.6.20.8.q/Makefile
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/Makefile
++++ linux-cfs-2.6.20.8.q/Makefile
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 20
+-EXTRAVERSION = .11
++EXTRAVERSION = .11-cfs-v9
+ NAME = Homicidal Dwarf Hamster
+
+ # *DOCUMENTATION*
+Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/smpboot.c
++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/smpboot.c
+@@ -1132,18 +1132,6 @@ exit:
+ }
+ #endif
+
+-static void smp_tune_scheduling(void)
+-{
+- unsigned long cachesize; /* kB */
+-
+- if (cpu_khz) {
+- cachesize = boot_cpu_data.x86_cache_size;
+-
+- if (cachesize > 0)
+- max_cache_size = cachesize * 1024;
+- }
+-}
+-
+ /*
+ * Cycle through the processors sending APIC IPIs to boot each.
+ */
+@@ -1172,7 +1160,6 @@ static void __init smp_boot_cpus(unsigne
+ x86_cpu_to_apicid[0] = boot_cpu_physical_apicid;
+
+ current_thread_info()->cpu = 0;
+- smp_tune_scheduling();
+
+ set_cpu_sibling_map(0);
+
+Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/syscall_table.S
++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/syscall_table.S
+@@ -319,3 +319,4 @@ ENTRY(sys_call_table)
+ .long sys_move_pages
+ .long sys_getcpu
+ .long sys_epoll_pwait
++ .long sys_sched_yield_to /* 320 */
+Index: linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/i386/kernel/tsc.c
++++ linux-cfs-2.6.20.8.q/arch/i386/kernel/tsc.c
+@@ -61,6 +61,8 @@ static inline int check_tsc_unstable(voi
+
+ void mark_tsc_unstable(void)
+ {
++ sched_clock_unstable_event();
++
+ tsc_unstable = 1;
+ }
+ EXPORT_SYMBOL_GPL(mark_tsc_unstable);
+@@ -107,13 +109,7 @@ unsigned long long sched_clock(void)
+ {
+ unsigned long long this_offset;
+
+- /*
+- * in the NUMA case we dont use the TSC as they are not
+- * synchronized across all CPUs.
+- */
+-#ifndef CONFIG_NUMA
+- if (!cpu_khz || check_tsc_unstable())
+-#endif
++ if (!cpu_khz || !cpu_has_tsc)
+ /* no locking but a rare wrong value is not a big deal */
+ return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);
+
+Index: linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/ia64/kernel/setup.c
++++ linux-cfs-2.6.20.8.q/arch/ia64/kernel/setup.c
+@@ -773,7 +773,6 @@ static void __cpuinit
+ get_max_cacheline_size (void)
+ {
+ unsigned long line_size, max = 1;
+- unsigned int cache_size = 0;
+ u64 l, levels, unique_caches;
+ pal_cache_config_info_t cci;
+ s64 status;
+@@ -803,8 +802,6 @@ get_max_cacheline_size (void)
+ line_size = 1 << cci.pcci_line_size;
+ if (line_size > max)
+ max = line_size;
+- if (cache_size < cci.pcci_cache_size)
+- cache_size = cci.pcci_cache_size;
+ if (!cci.pcci_unified) {
+ status = ia64_pal_cache_config_info(l,
+ /* cache_type (instruction)= */ 1,
+@@ -821,9 +818,6 @@ get_max_cacheline_size (void)
+ ia64_i_cache_stride_shift = cci.pcci_stride;
+ }
+ out:
+-#ifdef CONFIG_SMP
+- max_cache_size = max(max_cache_size, cache_size);
+-#endif
+ if (max > ia64_max_cacheline_size)
+ ia64_max_cacheline_size = max;
+ }
+Index: linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/mips/kernel/smp.c
++++ linux-cfs-2.6.20.8.q/arch/mips/kernel/smp.c
+@@ -245,7 +245,6 @@ void __init smp_prepare_cpus(unsigned in
+ {
+ init_new_context(current, &init_mm);
+ current_thread_info()->cpu = 0;
+- smp_tune_scheduling();
+ plat_prepare_cpus(max_cpus);
+ #ifndef CONFIG_HOTPLUG_CPU
+ cpu_present_map = cpu_possible_map;
+Index: linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/sparc/kernel/smp.c
++++ linux-cfs-2.6.20.8.q/arch/sparc/kernel/smp.c
+@@ -69,16 +69,6 @@ void __cpuinit smp_store_cpu_info(int id
+ cpu_data(id).prom_node = cpu_node;
+ cpu_data(id).mid = cpu_get_hwmid(cpu_node);
+
+- /* this is required to tune the scheduler correctly */
+- /* is it possible to have CPUs with different cache sizes? */
+- if (id == boot_cpu_id) {
+- int cache_line,cache_nlines;
+- cache_line = 0x20;
+- cache_line = prom_getintdefault(cpu_node, "ecache-line-size", cache_line);
+- cache_nlines = 0x8000;
+- cache_nlines = prom_getintdefault(cpu_node, "ecache-nlines", cache_nlines);
+- max_cache_size = cache_line * cache_nlines;
+- }
+ if (cpu_data(id).mid < 0)
+ panic("No MID found for CPU%d at node 0x%08d", id, cpu_node);
+ }
+Index: linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/arch/sparc64/kernel/smp.c
++++ linux-cfs-2.6.20.8.q/arch/sparc64/kernel/smp.c
+@@ -1293,41 +1293,6 @@ int setup_profiling_timer(unsigned int m
+ return 0;
+ }
+
+-static void __init smp_tune_scheduling(void)
+-{
+- struct device_node *dp;
+- int instance;
+- unsigned int def, smallest = ~0U;
+-
+- def = ((tlb_type == hypervisor) ?
+- (3 * 1024 * 1024) :
+- (4 * 1024 * 1024));
+-
+- instance = 0;
+- while (!cpu_find_by_instance(instance, &dp, NULL)) {
+- unsigned int val;
+-
+- val = of_getintprop_default(dp, "ecache-size", def);
+- if (val < smallest)
+- smallest = val;
+-
+- instance++;
+- }
+-
+- /* Any value less than 256K is nonsense. */
+- if (smallest < (256U * 1024U))
+- smallest = 256 * 1024;
+-
+- max_cache_size = smallest;
+-
+- if (smallest < 1U * 1024U * 1024U)
+- printk(KERN_INFO "Using max_cache_size of %uKB\n",
+- smallest / 1024U);
+- else
+- printk(KERN_INFO "Using max_cache_size of %uMB\n",
+- smallest / 1024U / 1024U);
+-}
+-
+ /* Constrain the number of cpus to max_cpus. */
+ void __init smp_prepare_cpus(unsigned int max_cpus)
+ {
+@@ -1363,7 +1328,6 @@ void __init smp_prepare_cpus(unsigned in
+ }
+
+ smp_store_cpu_info(boot_cpu_id);
+- smp_tune_scheduling();
+ }
+
+ /* Set this up early so that things like the scheduler can init
+Index: linux-cfs-2.6.20.8.q/fs/proc/array.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/fs/proc/array.c
++++ linux-cfs-2.6.20.8.q/fs/proc/array.c
+@@ -165,7 +165,6 @@ static inline char * task_state(struct t
+ rcu_read_lock();
+ buffer += sprintf(buffer,
+ "State:\t%s\n"
+- "SleepAVG:\t%lu%%\n"
+ "Tgid:\t%d\n"
+ "Pid:\t%d\n"
+ "PPid:\t%d\n"
+@@ -173,9 +172,8 @@ static inline char * task_state(struct t
+ "Uid:\t%d\t%d\t%d\t%d\n"
+ "Gid:\t%d\t%d\t%d\t%d\n",
+ get_task_state(p),
+- (p->sleep_avg/1024)*100/(1020000000/1024),
+- p->tgid, p->pid,
+- pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0,
++ p->tgid, p->pid,
++ pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0,
+ pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0,
+ p->uid, p->euid, p->suid, p->fsuid,
+ p->gid, p->egid, p->sgid, p->fsgid);
+@@ -312,6 +310,11 @@ int proc_pid_status(struct task_struct *
+ return buffer - orig;
+ }
+
++int proc_pid_sched(struct task_struct *task, char *buffer)
++{
++ return sched_print_task_state(task, buffer) - buffer;
++}
++
+ static int do_task_stat(struct task_struct *task, char * buffer, int whole)
+ {
+ unsigned long vsize, eip, esp, wchan = ~0UL;
+Index: linux-cfs-2.6.20.8.q/fs/proc/base.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/fs/proc/base.c
++++ linux-cfs-2.6.20.8.q/fs/proc/base.c
+@@ -1839,6 +1839,7 @@ static struct pid_entry tgid_base_stuff[
+ INF("environ", S_IRUSR, pid_environ),
+ INF("auxv", S_IRUSR, pid_auxv),
+ INF("status", S_IRUGO, pid_status),
++ INF("sched", S_IRUGO, pid_sched),
+ INF("cmdline", S_IRUGO, pid_cmdline),
+ INF("stat", S_IRUGO, tgid_stat),
+ INF("statm", S_IRUGO, pid_statm),
+@@ -2121,6 +2122,7 @@ static struct pid_entry tid_base_stuff[]
+ INF("environ", S_IRUSR, pid_environ),
+ INF("auxv", S_IRUSR, pid_auxv),
+ INF("status", S_IRUGO, pid_status),
++ INF("sched", S_IRUGO, pid_sched),
+ INF("cmdline", S_IRUGO, pid_cmdline),
+ INF("stat", S_IRUGO, tid_stat),
+ INF("statm", S_IRUGO, pid_statm),
+Index: linux-cfs-2.6.20.8.q/fs/proc/internal.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/fs/proc/internal.h
++++ linux-cfs-2.6.20.8.q/fs/proc/internal.h
+@@ -36,6 +36,7 @@ extern int proc_exe_link(struct inode *,
+ extern int proc_tid_stat(struct task_struct *, char *);
+ extern int proc_tgid_stat(struct task_struct *, char *);
+ extern int proc_pid_status(struct task_struct *, char *);
++extern int proc_pid_sched(struct task_struct *, char *);
+ extern int proc_pid_statm(struct task_struct *, char *);
+
+ extern struct file_operations proc_maps_operations;
+Index: linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-generic/bitops/sched.h
++++ linux-cfs-2.6.20.8.q/include/asm-generic/bitops/sched.h
+@@ -6,28 +6,23 @@
+
+ /*
+ * Every architecture must define this function. It's the fastest
+- * way of searching a 140-bit bitmap where the first 100 bits are
+- * unlikely to be set. It's guaranteed that at least one of the 140
+- * bits is cleared.
++ * way of searching a 100-bit bitmap. It's guaranteed that at least
++ * one of the 100 bits is cleared.
+ */
+ static inline int sched_find_first_bit(const unsigned long *b)
+ {
+ #if BITS_PER_LONG == 64
+- if (unlikely(b[0]))
++ if (b[0])
+ return __ffs(b[0]);
+- if (likely(b[1]))
+- return __ffs(b[1]) + 64;
+- return __ffs(b[2]) + 128;
++ return __ffs(b[1]) + 64;
+ #elif BITS_PER_LONG == 32
+- if (unlikely(b[0]))
++ if (b[0])
+ return __ffs(b[0]);
+- if (unlikely(b[1]))
++ if (b[1])
+ return __ffs(b[1]) + 32;
+- if (unlikely(b[2]))
++ if (b[2])
+ return __ffs(b[2]) + 64;
+- if (b[3])
+- return __ffs(b[3]) + 96;
+- return __ffs(b[4]) + 128;
++ return __ffs(b[3]) + 96;
+ #else
+ #error BITS_PER_LONG not defined
+ #endif
+Index: linux-cfs-2.6.20.8.q/include/asm-i386/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-i386/topology.h
++++ linux-cfs-2.6.20.8.q/include/asm-i386/topology.h
+@@ -85,7 +85,6 @@ static inline int node_to_first_cpu(int
+ .idle_idx = 1, \
+ .newidle_idx = 2, \
+ .wake_idx = 1, \
+- .per_cpu_gain = 100, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_EXEC \
+ | SD_BALANCE_FORK \
+Index: linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-i386/unistd.h
++++ linux-cfs-2.6.20.8.q/include/asm-i386/unistd.h
+@@ -325,10 +325,11 @@
+ #define __NR_move_pages 317
+ #define __NR_getcpu 318
+ #define __NR_epoll_pwait 319
++#define __NR_sched_yield_to 320
+
+ #ifdef __KERNEL__
+
+-#define NR_syscalls 320
++#define NR_syscalls 321
+
+ #define __ARCH_WANT_IPC_PARSE_VERSION
+ #define __ARCH_WANT_OLD_READDIR
+Index: linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-ia64/topology.h
++++ linux-cfs-2.6.20.8.q/include/asm-ia64/topology.h
+@@ -65,7 +65,6 @@ void build_cpu_to_node_map(void);
+ .max_interval = 4, \
+ .busy_factor = 64, \
+ .imbalance_pct = 125, \
+- .per_cpu_gain = 100, \
+ .cache_nice_tries = 2, \
+ .busy_idx = 2, \
+ .idle_idx = 1, \
+@@ -97,7 +96,6 @@ void build_cpu_to_node_map(void);
+ .newidle_idx = 0, /* unused */ \
+ .wake_idx = 1, \
+ .forkexec_idx = 1, \
+- .per_cpu_gain = 100, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_EXEC \
+ | SD_BALANCE_FORK \
+Index: linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-mips/mach-ip27/topology.h
++++ linux-cfs-2.6.20.8.q/include/asm-mips/mach-ip27/topology.h
+@@ -28,7 +28,6 @@ extern unsigned char __node_distances[MA
+ .busy_factor = 32, \
+ .imbalance_pct = 125, \
+ .cache_nice_tries = 1, \
+- .per_cpu_gain = 100, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_EXEC \
+ | SD_WAKE_BALANCE, \
+Index: linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-powerpc/topology.h
++++ linux-cfs-2.6.20.8.q/include/asm-powerpc/topology.h
+@@ -57,7 +57,6 @@ static inline int pcibus_to_node(struct
+ .busy_factor = 32, \
+ .imbalance_pct = 125, \
+ .cache_nice_tries = 1, \
+- .per_cpu_gain = 100, \
+ .busy_idx = 3, \
+ .idle_idx = 1, \
+ .newidle_idx = 2, \
+Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/topology.h
++++ linux-cfs-2.6.20.8.q/include/asm-x86_64/topology.h
+@@ -43,7 +43,6 @@ extern int __node_distance(int, int);
+ .newidle_idx = 0, \
+ .wake_idx = 1, \
+ .forkexec_idx = 1, \
+- .per_cpu_gain = 100, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_FORK \
+ | SD_BALANCE_EXEC \
+Index: linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/asm-x86_64/unistd.h
++++ linux-cfs-2.6.20.8.q/include/asm-x86_64/unistd.h
+@@ -619,8 +619,10 @@ __SYSCALL(__NR_sync_file_range, sys_sync
+ __SYSCALL(__NR_vmsplice, sys_vmsplice)
+ #define __NR_move_pages 279
+ __SYSCALL(__NR_move_pages, sys_move_pages)
++#define __NR_sched_yield_to 280
++__SYSCALL(__NR_sched_yield_to, sys_sched_yield_to)
+
+-#define __NR_syscall_max __NR_move_pages
++#define __NR_syscall_max __NR_sched_yield_to
+
+ #ifndef __NO_STUBS
+ #define __ARCH_WANT_OLD_READDIR
+Index: linux-cfs-2.6.20.8.q/include/linux/hardirq.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/linux/hardirq.h
++++ linux-cfs-2.6.20.8.q/include/linux/hardirq.h
+@@ -79,6 +79,19 @@
+ #endif
+
+ #ifdef CONFIG_PREEMPT
++# define PREEMPT_CHECK_OFFSET 1
++#else
++# define PREEMPT_CHECK_OFFSET 0
++#endif
++
++/*
++ * Check whether we were atomic before we did preempt_disable():
++ * (used by the scheduler)
++ */
++#define in_atomic_preempt_off() \
++ ((preempt_count() & ~PREEMPT_ACTIVE) != PREEMPT_CHECK_OFFSET)
++
++#ifdef CONFIG_PREEMPT
+ # define preemptible() (preempt_count() == 0 && !irqs_disabled())
+ # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1)
+ #else
+Index: linux-cfs-2.6.20.8.q/include/linux/ktime.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/linux/ktime.h
++++ linux-cfs-2.6.20.8.q/include/linux/ktime.h
+@@ -274,4 +274,6 @@ extern void ktime_get_ts(struct timespec
+ /* Get the real (wall-) time in timespec format: */
+ #define ktime_get_real_ts(ts) getnstimeofday(ts)
+
++extern ktime_t ktime_get(void);
++
+ #endif
+Index: linux-cfs-2.6.20.8.q/include/linux/sched.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/linux/sched.h
++++ linux-cfs-2.6.20.8.q/include/linux/sched.h
+@@ -2,7 +2,6 @@
+ #define _LINUX_SCHED_H
+
+ #include <linux/auxvec.h> /* For AT_VECTOR_SIZE */
+-
+ /*
+ * cloning flags:
+ */
+@@ -37,6 +36,8 @@
+
+ #ifdef __KERNEL__
+
++#include <linux/rbtree.h> /* For run_node */
++
+ struct sched_param {
+ int sched_priority;
+ };
+@@ -196,13 +197,13 @@ extern void init_idle(struct task_struct
+ extern cpumask_t nohz_cpu_mask;
+
+ /*
+- * Only dump TASK_* tasks. (-1 for all tasks)
++ * Only dump TASK_* tasks. (0 for all tasks)
+ */
+ extern void show_state_filter(unsigned long state_filter);
+
+ static inline void show_state(void)
+ {
+- show_state_filter(-1);
++ show_state_filter(0);
+ }
+
+ extern void show_regs(struct pt_regs *);
+@@ -464,7 +465,7 @@ struct signal_struct {
+ * from jiffies_to_ns(utime + stime) if sched_clock uses something
+ * other than jiffies.)
+ */
+- unsigned long long sched_time;
++ unsigned long long sum_sched_runtime;
+
+ /*
+ * We don't bother to synchronize most readers of this at all,
+@@ -524,6 +525,7 @@ struct signal_struct {
+ #define MAX_RT_PRIO MAX_USER_RT_PRIO
+
+ #define MAX_PRIO (MAX_RT_PRIO + 40)
++#define DEFAULT_PRIO (MAX_RT_PRIO + 20)
+
+ #define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO)
+ #define rt_task(p) rt_prio((p)->prio)
+@@ -635,7 +637,14 @@ enum idle_type
+ /*
+ * sched-domains (multiprocessor balancing) declarations:
+ */
+-#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */
++
++/*
++ * Increase resolution of nice-level calculations:
++ */
++#define SCHED_LOAD_SHIFT 10
++#define SCHED_LOAD_SCALE (1UL << SCHED_LOAD_SHIFT)
++
++#define SCHED_LOAD_SCALE_FUZZ (SCHED_LOAD_SCALE >> 5)
+
+ #ifdef CONFIG_SMP
+ #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */
+@@ -684,7 +693,6 @@ struct sched_domain {
+ unsigned int imbalance_pct; /* No balance until over watermark */
+ unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
+ unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */
+- unsigned int per_cpu_gain; /* CPU % gained by adding domain cpus */
+ unsigned int busy_idx;
+ unsigned int idle_idx;
+ unsigned int newidle_idx;
+@@ -733,12 +741,6 @@ struct sched_domain {
+ extern int partition_sched_domains(cpumask_t *partition1,
+ cpumask_t *partition2);
+
+-/*
+- * Maximum cache size the migration-costs auto-tuning code will
+- * search from:
+- */
+-extern unsigned int max_cache_size;
+-
+ #endif /* CONFIG_SMP */
+
+
+@@ -789,14 +791,28 @@ struct mempolicy;
+ struct pipe_inode_info;
+ struct uts_namespace;
+
+-enum sleep_type {
+- SLEEP_NORMAL,
+- SLEEP_NONINTERACTIVE,
+- SLEEP_INTERACTIVE,
+- SLEEP_INTERRUPTED,
+-};
++struct rq;
+
+-struct prio_array;
++struct sched_class {
++ struct sched_class *next;
++
++ void (*enqueue_task) (struct rq *rq, struct task_struct *p,
++ int wakeup, u64 now);
++ void (*dequeue_task) (struct rq *rq, struct task_struct *p,
++ int sleep, u64 now);
++ void (*yield_task) (struct rq *rq, struct task_struct *p,
++ struct task_struct *p_to);
++
++ void (*check_preempt_curr) (struct rq *rq, struct task_struct *p);
++
++ struct task_struct * (*pick_next_task) (struct rq *rq, u64 now);
++ void (*put_prev_task) (struct rq *rq, struct task_struct *p, u64 now);
++
++ struct task_struct * (*load_balance_start) (struct rq *rq);
++ struct task_struct * (*load_balance_next) (struct rq *rq);
++ void (*task_tick) (struct rq *rq, struct task_struct *p);
++ void (*task_new) (struct rq *rq, struct task_struct *p);
++};
+
+ struct task_struct {
+ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
+@@ -813,26 +829,45 @@ struct task_struct {
+ #endif
+ #endif
+ int load_weight; /* for niceness load balancing purposes */
++ int load_shift;
++
+ int prio, static_prio, normal_prio;
++ int on_rq;
+ struct list_head run_list;
+- struct prio_array *array;
++ struct rb_node run_node;
+
+ unsigned short ioprio;
+ #ifdef CONFIG_BLK_DEV_IO_TRACE
+ unsigned int btrace_seq;
+ #endif
+- unsigned long sleep_avg;
+- unsigned long long timestamp, last_ran;
+- unsigned long long sched_time; /* sched_clock time spent running */
+- enum sleep_type sleep_type;
++ /* CFS scheduling class statistics fields: */
++ u64 wait_start_fair;
++ u64 wait_start;
++ u64 exec_start;
++ u64 sleep_start;
++ u64 block_start;
++ u64 sleep_max;
++ u64 block_max;
++ u64 exec_max;
++ u64 wait_max;
++ u64 last_ran;
++
++ s64 wait_runtime;
++ u64 sum_exec_runtime;
++ s64 fair_key;
++ s64 sum_wait_runtime;
+
+ unsigned long policy;
+ cpumask_t cpus_allowed;
+- unsigned int time_slice, first_time_slice;
++ unsigned int time_slice;
++ struct sched_class *sched_class;
++
++ s64 min_wait_runtime;
+
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+ struct sched_info sched_info;
+ #endif
++ u64 nr_switches;
+
+ struct list_head tasks;
+ /*
+@@ -1195,8 +1230,9 @@ static inline int set_cpus_allowed(struc
+ #endif
+
+ extern unsigned long long sched_clock(void);
++extern void sched_clock_unstable_event(void);
+ extern unsigned long long
+-current_sched_time(const struct task_struct *current_task);
++current_sched_runtime(const struct task_struct *current_task);
+
+ /* sched_exec is called by processes performing an exec */
+ #ifdef CONFIG_SMP
+@@ -1212,6 +1248,13 @@ static inline void idle_task_exit(void)
+ #endif
+
+ extern void sched_idle_next(void);
++extern char * sched_print_task_state(struct task_struct *p, char *buffer);
++
++extern unsigned int sysctl_sched_granularity;
++extern unsigned int sysctl_sched_wakeup_granularity;
++extern unsigned int sysctl_sched_sleep_history_max;
++extern unsigned int sysctl_sched_child_runs_first;
++extern unsigned int sysctl_sched_load_smoothing;
+
+ #ifdef CONFIG_RT_MUTEXES
+ extern int rt_mutex_getprio(struct task_struct *p);
+@@ -1290,8 +1333,7 @@ extern void FASTCALL(wake_up_new_task(st
+ #else
+ static inline void kick_process(struct task_struct *tsk) { }
+ #endif
+-extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags));
+-extern void FASTCALL(sched_exit(struct task_struct * p));
++extern void sched_fork(struct task_struct * p, int clone_flags);
+
+ extern int in_group_p(gid_t);
+ extern int in_egroup_p(gid_t);
+Index: linux-cfs-2.6.20.8.q/include/linux/topology.h
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/include/linux/topology.h
++++ linux-cfs-2.6.20.8.q/include/linux/topology.h
+@@ -96,7 +96,6 @@
+ .busy_factor = 64, \
+ .imbalance_pct = 110, \
+ .cache_nice_tries = 0, \
+- .per_cpu_gain = 25, \
+ .busy_idx = 0, \
+ .idle_idx = 0, \
+ .newidle_idx = 1, \
+@@ -128,7 +127,6 @@
+ .busy_factor = 64, \
+ .imbalance_pct = 125, \
+ .cache_nice_tries = 1, \
+- .per_cpu_gain = 100, \
+ .busy_idx = 2, \
+ .idle_idx = 1, \
+ .newidle_idx = 2, \
+@@ -159,7 +157,6 @@
+ .busy_factor = 64, \
+ .imbalance_pct = 125, \
+ .cache_nice_tries = 1, \
+- .per_cpu_gain = 100, \
+ .busy_idx = 2, \
+ .idle_idx = 1, \
+ .newidle_idx = 2, \
+@@ -193,7 +190,6 @@
+ .newidle_idx = 0, /* unused */ \
+ .wake_idx = 0, /* unused */ \
+ .forkexec_idx = 0, /* unused */ \
+- .per_cpu_gain = 100, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_SERIALIZE, \
+ .last_balance = jiffies, \
+Index: linux-cfs-2.6.20.8.q/init/main.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/init/main.c
++++ linux-cfs-2.6.20.8.q/init/main.c
+@@ -422,7 +422,7 @@ static void noinline rest_init(void)
+
+ /*
+ * The boot idle thread must execute schedule()
+- * at least one to get things moving:
++ * at least once to get things moving:
+ */
+ preempt_enable_no_resched();
+ schedule();
+Index: linux-cfs-2.6.20.8.q/kernel/exit.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/exit.c
++++ linux-cfs-2.6.20.8.q/kernel/exit.c
+@@ -112,7 +112,7 @@ static void __exit_signal(struct task_st
+ sig->maj_flt += tsk->maj_flt;
+ sig->nvcsw += tsk->nvcsw;
+ sig->nivcsw += tsk->nivcsw;
+- sig->sched_time += tsk->sched_time;
++ sig->sum_sched_runtime += tsk->sum_exec_runtime;
+ sig = NULL; /* Marker for below. */
+ }
+
+@@ -170,7 +170,6 @@ repeat:
+ zap_leader = (leader->exit_signal == -1);
+ }
+
+- sched_exit(p);
+ write_unlock_irq(&tasklist_lock);
+ proc_flush_task(p);
+ release_thread(p);
+Index: linux-cfs-2.6.20.8.q/kernel/fork.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/fork.c
++++ linux-cfs-2.6.20.8.q/kernel/fork.c
+@@ -874,7 +874,7 @@ static inline int copy_signal(unsigned l
+ sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero;
+ sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0;
+ sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0;
+- sig->sched_time = 0;
++ sig->sum_sched_runtime = 0;
+ INIT_LIST_HEAD(&sig->cpu_timers[0]);
+ INIT_LIST_HEAD(&sig->cpu_timers[1]);
+ INIT_LIST_HEAD(&sig->cpu_timers[2]);
+@@ -1037,7 +1037,7 @@ static struct task_struct *copy_process(
+
+ p->utime = cputime_zero;
+ p->stime = cputime_zero;
+- p->sched_time = 0;
++
+ p->rchar = 0; /* I/O counter: bytes read */
+ p->wchar = 0; /* I/O counter: bytes written */
+ p->syscr = 0; /* I/O counter: read syscalls */
+Index: linux-cfs-2.6.20.8.q/kernel/hrtimer.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/hrtimer.c
++++ linux-cfs-2.6.20.8.q/kernel/hrtimer.c
+@@ -45,7 +45,7 @@
+ *
+ * returns the time in ktime_t format
+ */
+-static ktime_t ktime_get(void)
++ktime_t ktime_get(void)
+ {
+ struct timespec now;
+
+Index: linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/posix-cpu-timers.c
++++ linux-cfs-2.6.20.8.q/kernel/posix-cpu-timers.c
+@@ -161,7 +161,7 @@ static inline cputime_t virt_ticks(struc
+ }
+ static inline unsigned long long sched_ns(struct task_struct *p)
+ {
+- return (p == current) ? current_sched_time(p) : p->sched_time;
++ return (p == current) ? current_sched_runtime(p) : p->sum_exec_runtime;
+ }
+
+ int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp)
+@@ -246,10 +246,10 @@ static int cpu_clock_sample_group_locked
+ } while (t != p);
+ break;
+ case CPUCLOCK_SCHED:
+- cpu->sched = p->signal->sched_time;
++ cpu->sched = p->signal->sum_sched_runtime;
+ /* Add in each other live thread. */
+ while ((t = next_thread(t)) != p) {
+- cpu->sched += t->sched_time;
++ cpu->sched += t->sum_exec_runtime;
+ }
+ cpu->sched += sched_ns(p);
+ break;
+@@ -417,7 +417,7 @@ int posix_cpu_timer_del(struct k_itimer
+ */
+ static void cleanup_timers(struct list_head *head,
+ cputime_t utime, cputime_t stime,
+- unsigned long long sched_time)
++ unsigned long long sum_exec_runtime)
+ {
+ struct cpu_timer_list *timer, *next;
+ cputime_t ptime = cputime_add(utime, stime);
+@@ -446,10 +446,10 @@ static void cleanup_timers(struct list_h
+ ++head;
+ list_for_each_entry_safe(timer, next, head, entry) {
+ list_del_init(&timer->entry);
+- if (timer->expires.sched < sched_time) {
++ if (timer->expires.sched < sum_exec_runtime) {
+ timer->expires.sched = 0;
+ } else {
+- timer->expires.sched -= sched_time;
++ timer->expires.sched -= sum_exec_runtime;
+ }
+ }
+ }
+@@ -462,7 +462,7 @@ static void cleanup_timers(struct list_h
+ void posix_cpu_timers_exit(struct task_struct *tsk)
+ {
+ cleanup_timers(tsk->cpu_timers,
+- tsk->utime, tsk->stime, tsk->sched_time);
++ tsk->utime, tsk->stime, tsk->sum_exec_runtime);
+
+ }
+ void posix_cpu_timers_exit_group(struct task_struct *tsk)
+@@ -470,7 +470,7 @@ void posix_cpu_timers_exit_group(struct
+ cleanup_timers(tsk->signal->cpu_timers,
+ cputime_add(tsk->utime, tsk->signal->utime),
+ cputime_add(tsk->stime, tsk->signal->stime),
+- tsk->sched_time + tsk->signal->sched_time);
++ tsk->sum_exec_runtime + tsk->signal->sum_sched_runtime);
+ }
+
+
+@@ -531,7 +531,7 @@ static void process_timer_rebalance(stru
+ nsleft = max_t(unsigned long long, nsleft, 1);
+ do {
+ if (likely(!(t->flags & PF_EXITING))) {
+- ns = t->sched_time + nsleft;
++ ns = t->sum_exec_runtime + nsleft;
+ if (t->it_sched_expires == 0 ||
+ t->it_sched_expires > ns) {
+ t->it_sched_expires = ns;
+@@ -999,7 +999,7 @@ static void check_thread_timers(struct t
+ struct cpu_timer_list *t = list_entry(timers->next,
+ struct cpu_timer_list,
+ entry);
+- if (!--maxfire || tsk->sched_time < t->expires.sched) {
++ if (!--maxfire || tsk->sum_exec_runtime < t->expires.sched) {
+ tsk->it_sched_expires = t->expires.sched;
+ break;
+ }
+@@ -1019,7 +1019,7 @@ static void check_process_timers(struct
+ int maxfire;
+ struct signal_struct *const sig = tsk->signal;
+ cputime_t utime, stime, ptime, virt_expires, prof_expires;
+- unsigned long long sched_time, sched_expires;
++ unsigned long long sum_sched_runtime, sched_expires;
+ struct task_struct *t;
+ struct list_head *timers = sig->cpu_timers;
+
+@@ -1039,12 +1039,12 @@ static void check_process_timers(struct
+ */
+ utime = sig->utime;
+ stime = sig->stime;
+- sched_time = sig->sched_time;
++ sum_sched_runtime = sig->sum_sched_runtime;
+ t = tsk;
+ do {
+ utime = cputime_add(utime, t->utime);
+ stime = cputime_add(stime, t->stime);
+- sched_time += t->sched_time;
++ sum_sched_runtime += t->sum_exec_runtime;
+ t = next_thread(t);
+ } while (t != tsk);
+ ptime = cputime_add(utime, stime);
+@@ -1085,7 +1085,7 @@ static void check_process_timers(struct
+ struct cpu_timer_list *t = list_entry(timers->next,
+ struct cpu_timer_list,
+ entry);
+- if (!--maxfire || sched_time < t->expires.sched) {
++ if (!--maxfire || sum_sched_runtime < t->expires.sched) {
+ sched_expires = t->expires.sched;
+ break;
+ }
+@@ -1177,7 +1177,7 @@ static void check_process_timers(struct
+ virt_left = cputime_sub(virt_expires, utime);
+ virt_left = cputime_div_non_zero(virt_left, nthreads);
+ if (sched_expires) {
+- sched_left = sched_expires - sched_time;
++ sched_left = sched_expires - sum_sched_runtime;
+ do_div(sched_left, nthreads);
+ sched_left = max_t(unsigned long long, sched_left, 1);
+ } else {
+@@ -1203,7 +1203,7 @@ static void check_process_timers(struct
+ t->it_virt_expires = ticks;
+ }
+
+- sched = t->sched_time + sched_left;
++ sched = t->sum_exec_runtime + sched_left;
+ if (sched_expires && (t->it_sched_expires == 0 ||
+ t->it_sched_expires > sched)) {
+ t->it_sched_expires = sched;
+@@ -1295,7 +1295,7 @@ void run_posix_cpu_timers(struct task_st
+
+ if (UNEXPIRED(prof) && UNEXPIRED(virt) &&
+ (tsk->it_sched_expires == 0 ||
+- tsk->sched_time < tsk->it_sched_expires))
++ tsk->sum_exec_runtime < tsk->it_sched_expires))
+ return;
+
+ #undef UNEXPIRED
+Index: linux-cfs-2.6.20.8.q/kernel/sched.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/sched.c
++++ linux-cfs-2.6.20.8.q/kernel/sched.c
+@@ -89,110 +89,13 @@
+ */
+ #define MIN_TIMESLICE max(5 * HZ / 1000, 1)
+ #define DEF_TIMESLICE (100 * HZ / 1000)
+-#define ON_RUNQUEUE_WEIGHT 30
+-#define CHILD_PENALTY 95
+-#define PARENT_PENALTY 100
+-#define EXIT_WEIGHT 3
+-#define PRIO_BONUS_RATIO 25
+-#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
+-#define INTERACTIVE_DELTA 2
+-#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS)
+-#define STARVATION_LIMIT (MAX_SLEEP_AVG)
+-#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG))
+-
+-/*
+- * If a task is 'interactive' then we reinsert it in the active
+- * array after it has expired its current timeslice. (it will not
+- * continue to run immediately, it will still roundrobin with
+- * other interactive tasks.)
+- *
+- * This part scales the interactivity limit depending on niceness.
+- *
+- * We scale it linearly, offset by the INTERACTIVE_DELTA delta.
+- * Here are a few examples of different nice levels:
+- *
+- * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0]
+- * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0]
+- * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0]
+- * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0]
+- * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0]
+- *
+- * (the X axis represents the possible -5 ... 0 ... +5 dynamic
+- * priority range a task can explore, a value of '1' means the
+- * task is rated interactive.)
+- *
+- * Ie. nice +19 tasks can never get 'interactive' enough to be
+- * reinserted into the active array. And only heavily CPU-hog nice -20
+- * tasks will be expired. Default nice 0 tasks are somewhere between,
+- * it takes some effort for them to get interactive, but it's not
+- * too hard.
+- */
+-
+-#define CURRENT_BONUS(p) \
+- (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \
+- MAX_SLEEP_AVG)
+-
+-#define GRANULARITY (10 * HZ / 1000 ? : 1)
+-
+-#ifdef CONFIG_SMP
+-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
+- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \
+- num_online_cpus())
+-#else
+-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
+- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)))
+-#endif
+-
+-#define SCALE(v1,v1_max,v2_max) \
+- (v1) * (v2_max) / (v1_max)
+-
+-#define DELTA(p) \
+- (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \
+- INTERACTIVE_DELTA)
+-
+-#define TASK_INTERACTIVE(p) \
+- ((p)->prio <= (p)->static_prio - DELTA(p))
+-
+-#define INTERACTIVE_SLEEP(p) \
+- (JIFFIES_TO_NS(MAX_SLEEP_AVG * \
+- (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
+-
+-#define TASK_PREEMPTS_CURR(p, rq) \
+- ((p)->prio < (rq)->curr->prio)
+-
+-#define SCALE_PRIO(x, prio) \
+- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
+-
+-static unsigned int static_prio_timeslice(int static_prio)
+-{
+- if (static_prio < NICE_TO_PRIO(0))
+- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
+- else
+- return SCALE_PRIO(DEF_TIMESLICE, static_prio);
+-}
+-
+-/*
+- * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
+- * to time slice values: [800ms ... 100ms ... 5ms]
+- *
+- * The higher a thread's priority, the bigger timeslices
+- * it gets during one round of execution. But even the lowest
+- * priority thread gets MIN_TIMESLICE worth of execution time.
+- */
+-
+-static inline unsigned int task_timeslice(struct task_struct *p)
+-{
+- return static_prio_timeslice(p->static_prio);
+-}
+
+ /*
+- * These are the runqueue data structures:
++ * This is the priority-queue data structure of the RT scheduling class:
+ */
+-
+ struct prio_array {
+- unsigned int nr_active;
+- DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */
+- struct list_head queue[MAX_PRIO];
++ DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */
++ struct list_head queue[MAX_RT_PRIO];
+ };
+
+ /*
+@@ -209,12 +112,13 @@ struct rq {
+ * nr_running and cpu_load should be in the same cacheline because
+ * remote CPUs use both these fields when doing load calculation.
+ */
+- unsigned long nr_running;
++ long nr_running;
+ unsigned long raw_weighted_load;
+-#ifdef CONFIG_SMP
+- unsigned long cpu_load[3];
+-#endif
+- unsigned long long nr_switches;
++ #define CPU_LOAD_IDX_MAX 5
++ unsigned long cpu_load[CPU_LOAD_IDX_MAX];
++
++ u64 nr_switches;
++ unsigned long nr_load_updates;
+
+ /*
+ * This is part of a global counter where only the total sum
+@@ -224,14 +128,29 @@ struct rq {
+ */
+ unsigned long nr_uninterruptible;
+
+- unsigned long expired_timestamp;
+- /* Cached timestamp set by update_cpu_clock() */
+- unsigned long long most_recent_timestamp;
+ struct task_struct *curr, *idle;
+ unsigned long next_balance;
+ struct mm_struct *prev_mm;
+- struct prio_array *active, *expired, arrays[2];
+- int best_expired_prio;
++
++ u64 clock, prev_clock_raw;
++ s64 clock_max_delta;
++ u64 fair_clock, prev_fair_clock;
++ u64 exec_clock, prev_exec_clock;
++ u64 wait_runtime;
++
++ unsigned int clock_warps;
++ unsigned int clock_unstable_events;
++
++ struct sched_class *load_balance_class;
++
++ struct prio_array active;
++ int rt_load_balance_idx;
++ struct list_head *rt_load_balance_head, *rt_load_balance_curr;
++
++ struct rb_root tasks_timeline;
++ struct rb_node *rb_leftmost;
++ struct rb_node *rb_load_balance_curr;
++
+ atomic_t nr_iowait;
+
+ #ifdef CONFIG_SMP
+@@ -268,7 +187,107 @@ struct rq {
+ struct lock_class_key rq_lock_key;
+ };
+
+-static DEFINE_PER_CPU(struct rq, runqueues);
++static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp;
++
++static inline void check_preempt_curr(struct rq *rq, struct task_struct *p)
++{
++ rq->curr->sched_class->check_preempt_curr(rq, p);
++}
++
++#define SCALE_PRIO(x, prio) \
++ max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
++
++/*
++ * static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
++ * to time slice values: [800ms ... 100ms ... 5ms]
++ */
++static unsigned int static_prio_timeslice(int static_prio)
++{
++ if (static_prio == NICE_TO_PRIO(19))
++ return 1;
++
++ if (static_prio < NICE_TO_PRIO(0))
++ return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
++ else
++ return SCALE_PRIO(DEF_TIMESLICE, static_prio);
++}
++
++/*
++ * Print out various scheduling related per-task fields:
++ */
++char * sched_print_task_state(struct task_struct *p, char *buffer)
++{
++ struct rq *this_rq = &per_cpu(runqueues, raw_smp_processor_id());
++ unsigned long long t0, t1;
++
++#define P(F) \
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", #F, (long long)p->F)
++
++ P(wait_start);
++ P(wait_start_fair);
++ P(exec_start);
++ P(sleep_start);
++ P(block_start);
++ P(sleep_max);
++ P(block_max);
++ P(exec_max);
++ P(wait_max);
++ P(min_wait_runtime);
++ P(last_ran);
++ P(wait_runtime);
++ P(sum_exec_runtime);
++#undef P
++
++ t0 = sched_clock();
++ t1 = sched_clock();
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "clock-delta",
++ (long long)t1-t0);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-wait_runtime",
++ (long long)this_rq->wait_runtime);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-exec_clock",
++ (long long)this_rq->exec_clock);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-fair_clock",
++ (long long)this_rq->fair_clock);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock",
++ (long long)this_rq->clock);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-prev_clock_raw",
++ (long long)this_rq->prev_clock_raw);
++ buffer += sprintf(buffer, "%-25s:%20Ld\n", "rq-clock_max_delta",
++ (long long)this_rq->clock_max_delta);
++ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_warps",
++ this_rq->clock_warps);
++ buffer += sprintf(buffer, "%-25s:%20u\n", "rq-clock_unstable_events",
++ this_rq->clock_unstable_events);
++ return buffer;
++}
++
++/*
++ * Per-runqueue clock, as finegrained as the platform can give us:
++ */
++static inline unsigned long long __rq_clock(struct rq *rq)
++{
++ u64 now = sched_clock();
++ u64 clock = rq->clock;
++ u64 prev_raw = rq->prev_clock_raw;
++ s64 delta = now - prev_raw;
++
++ /*
++ * Protect against sched_clock() occasionally going backwards:
++ */
++ if (unlikely(delta < 0)) {
++ clock++;
++ rq->clock_warps++;
++ } else {
++ if (unlikely(delta > rq->clock_max_delta))
++ rq->clock_max_delta = delta;
++ clock += delta;
++ }
++
++ rq->prev_clock_raw = now;
++ rq->clock = clock;
++
++ return clock;
++}
+
+ static inline int cpu_of(struct rq *rq)
+ {
+@@ -279,6 +298,16 @@ static inline int cpu_of(struct rq *rq)
+ #endif
+ }
+
++static inline unsigned long long rq_clock(struct rq *rq)
++{
++ int this_cpu = smp_processor_id();
++
++ if (this_cpu == cpu_of(rq))
++ return __rq_clock(rq);
++
++ return rq->clock;
++}
++
+ /*
+ * The domain tree (rq->sd) is protected by RCU's quiescent state transition.
+ * See detach_destroy_domains: synchronize_sched for details.
+@@ -423,134 +452,6 @@ static inline void task_rq_unlock(struct
+ spin_unlock_irqrestore(&rq->lock, *flags);
+ }
+
+-#ifdef CONFIG_SCHEDSTATS
+-/*
+- * bump this up when changing the output format or the meaning of an existing
+- * format, so that tools can adapt (or abort)
+- */
+-#define SCHEDSTAT_VERSION 14
+-
+-static int show_schedstat(struct seq_file *seq, void *v)
+-{
+- int cpu;
+-
+- seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION);
+- seq_printf(seq, "timestamp %lu\n", jiffies);
+- for_each_online_cpu(cpu) {
+- struct rq *rq = cpu_rq(cpu);
+-#ifdef CONFIG_SMP
+- struct sched_domain *sd;
+- int dcnt = 0;
+-#endif
+-
+- /* runqueue-specific stats */
+- seq_printf(seq,
+- "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
+- cpu, rq->yld_both_empty,
+- rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt,
+- rq->sched_switch, rq->sched_cnt, rq->sched_goidle,
+- rq->ttwu_cnt, rq->ttwu_local,
+- rq->rq_sched_info.cpu_time,
+- rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt);
+-
+- seq_printf(seq, "\n");
+-
+-#ifdef CONFIG_SMP
+- /* domain-specific stats */
+- preempt_disable();
+- for_each_domain(cpu, sd) {
+- enum idle_type itype;
+- char mask_str[NR_CPUS];
+-
+- cpumask_scnprintf(mask_str, NR_CPUS, sd->span);
+- seq_printf(seq, "domain%d %s", dcnt++, mask_str);
+- for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES;
+- itype++) {
+- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu "
+- "%lu",
+- sd->lb_cnt[itype],
+- sd->lb_balanced[itype],
+- sd->lb_failed[itype],
+- sd->lb_imbalance[itype],
+- sd->lb_gained[itype],
+- sd->lb_hot_gained[itype],
+- sd->lb_nobusyq[itype],
+- sd->lb_nobusyg[itype]);
+- }
+- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu"
+- " %lu %lu %lu\n",
+- sd->alb_cnt, sd->alb_failed, sd->alb_pushed,
+- sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed,
+- sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed,
+- sd->ttwu_wake_remote, sd->ttwu_move_affine,
+- sd->ttwu_move_balance);
+- }
+- preempt_enable();
+-#endif
+- }
+- return 0;
+-}
+-
+-static int schedstat_open(struct inode *inode, struct file *file)
+-{
+- unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32);
+- char *buf = kmalloc(size, GFP_KERNEL);
+- struct seq_file *m;
+- int res;
+-
+- if (!buf)
+- return -ENOMEM;
+- res = single_open(file, show_schedstat, NULL);
+- if (!res) {
+- m = file->private_data;
+- m->buf = buf;
+- m->size = size;
+- } else
+- kfree(buf);
+- return res;
+-}
+-
+-const struct file_operations proc_schedstat_operations = {
+- .open = schedstat_open,
+- .read = seq_read,
+- .llseek = seq_lseek,
+- .release = single_release,
+-};
+-
+-/*
+- * Expects runqueue lock to be held for atomicity of update
+- */
+-static inline void
+-rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
+-{
+- if (rq) {
+- rq->rq_sched_info.run_delay += delta_jiffies;
+- rq->rq_sched_info.pcnt++;
+- }
+-}
+-
+-/*
+- * Expects runqueue lock to be held for atomicity of update
+- */
+-static inline void
+-rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
+-{
+- if (rq)
+- rq->rq_sched_info.cpu_time += delta_jiffies;
+-}
+-# define schedstat_inc(rq, field) do { (rq)->field++; } while (0)
+-# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0)
+-#else /* !CONFIG_SCHEDSTATS */
+-static inline void
+-rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
+-{}
+-static inline void
+-rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
+-{}
+-# define schedstat_inc(rq, field) do { } while (0)
+-# define schedstat_add(rq, field, amt) do { } while (0)
+-#endif
+-
+ /*
+ * this_rq_lock - lock this runqueue and disable interrupts.
+ */
+@@ -566,178 +467,60 @@ static inline struct rq *this_rq_lock(vo
+ return rq;
+ }
+
+-#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+-/*
+- * Called when a process is dequeued from the active array and given
+- * the cpu. We should note that with the exception of interactive
+- * tasks, the expired queue will become the active queue after the active
+- * queue is empty, without explicitly dequeuing and requeuing tasks in the
+- * expired queue. (Interactive tasks may be requeued directly to the
+- * active queue, thus delaying tasks in the expired queue from running;
+- * see scheduler_tick()).
+- *
+- * This function is only called from sched_info_arrive(), rather than
+- * dequeue_task(). Even though a task may be queued and dequeued multiple
+- * times as it is shuffled about, we're really interested in knowing how
+- * long it was from the *first* time it was queued to the time that it
+- * finally hit a cpu.
+- */
+-static inline void sched_info_dequeued(struct task_struct *t)
+-{
+- t->sched_info.last_queued = 0;
+-}
+-
+ /*
+- * Called when a task finally hits the cpu. We can now calculate how
+- * long it was waiting to run. We also note when it began so that we
+- * can keep stats on how long its timeslice is.
++ * CPU frequency is/was unstable - start new by setting prev_clock_raw:
+ */
+-static void sched_info_arrive(struct task_struct *t)
++void sched_clock_unstable_event(void)
+ {
+- unsigned long now = jiffies, delta_jiffies = 0;
+-
+- if (t->sched_info.last_queued)
+- delta_jiffies = now - t->sched_info.last_queued;
+- sched_info_dequeued(t);
+- t->sched_info.run_delay += delta_jiffies;
+- t->sched_info.last_arrival = now;
+- t->sched_info.pcnt++;
++ unsigned long flags;
++ struct rq *rq;
+
+- rq_sched_info_arrive(task_rq(t), delta_jiffies);
++ rq = task_rq_lock(current, &flags);
++ rq->prev_clock_raw = sched_clock();
++ rq->clock_unstable_events++;
++ task_rq_unlock(rq, &flags);
+ }
+
+ /*
+- * Called when a process is queued into either the active or expired
+- * array. The time is noted and later used to determine how long we
+- * had to wait for us to reach the cpu. Since the expired queue will
+- * become the active queue after active queue is empty, without dequeuing
+- * and requeuing any tasks, we are interested in queuing to either. It
+- * is unusual but not impossible for tasks to be dequeued and immediately
+- * requeued in the same or another array: this can happen in sched_yield(),
+- * set_user_nice(), and even load_balance() as it moves tasks from runqueue
+- * to runqueue.
++ * resched_task - mark a task 'to be rescheduled now'.
+ *
+- * This function is only called from enqueue_task(), but also only updates
+- * the timestamp if it is already not set. It's assumed that
+- * sched_info_dequeued() will clear that stamp when appropriate.
+- */
+-static inline void sched_info_queued(struct task_struct *t)
+-{
+- if (unlikely(sched_info_on()))
+- if (!t->sched_info.last_queued)
+- t->sched_info.last_queued = jiffies;
+-}
+-
+-/*
+- * Called when a process ceases being the active-running process, either
+- * voluntarily or involuntarily. Now we can calculate how long we ran.
++ * On UP this means the setting of the need_resched flag, on SMP it
++ * might also involve a cross-CPU call to trigger the scheduler on
++ * the target CPU.
+ */
+-static inline void sched_info_depart(struct task_struct *t)
+-{
+- unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival;
++#ifdef CONFIG_SMP
+
+- t->sched_info.cpu_time += delta_jiffies;
+- rq_sched_info_depart(task_rq(t), delta_jiffies);
+-}
++#ifndef tsk_is_polling
++#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
++#endif
+
+-/*
+- * Called when tasks are switched involuntarily due, typically, to expiring
+- * their time slice. (This may also be called when switching to or from
+- * the idle task.) We are only called when prev != next.
+- */
+-static inline void
+-__sched_info_switch(struct task_struct *prev, struct task_struct *next)
++static void resched_task(struct task_struct *p)
+ {
+- struct rq *rq = task_rq(prev);
+-
+- /*
+- * prev now departs the cpu. It's not interesting to record
+- * stats about how efficient we were at scheduling the idle
+- * process, however.
+- */
+- if (prev != rq->idle)
+- sched_info_depart(prev);
++ int cpu;
+
+- if (next != rq->idle)
+- sched_info_arrive(next);
+-}
+-static inline void
+-sched_info_switch(struct task_struct *prev, struct task_struct *next)
+-{
+- if (unlikely(sched_info_on()))
+- __sched_info_switch(prev, next);
+-}
+-#else
+-#define sched_info_queued(t) do { } while (0)
+-#define sched_info_switch(t, next) do { } while (0)
+-#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
++ assert_spin_locked(&task_rq(p)->lock);
+
+-/*
+- * Adding/removing a task to/from a priority array:
+- */
+-static void dequeue_task(struct task_struct *p, struct prio_array *array)
+-{
+- array->nr_active--;
+- list_del(&p->run_list);
+- if (list_empty(array->queue + p->prio))
+- __clear_bit(p->prio, array->bitmap);
+-}
++ if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))
++ return;
+
+-static void enqueue_task(struct task_struct *p, struct prio_array *array)
+-{
+- sched_info_queued(p);
+- list_add_tail(&p->run_list, array->queue + p->prio);
+- __set_bit(p->prio, array->bitmap);
+- array->nr_active++;
+- p->array = array;
+-}
++ set_tsk_thread_flag(p, TIF_NEED_RESCHED);
+
+-/*
+- * Put task to the end of the run list without the overhead of dequeue
+- * followed by enqueue.
+- */
+-static void requeue_task(struct task_struct *p, struct prio_array *array)
+-{
+- list_move_tail(&p->run_list, array->queue + p->prio);
+-}
++ cpu = task_cpu(p);
++ if (cpu == smp_processor_id())
++ return;
+
+-static inline void
+-enqueue_task_head(struct task_struct *p, struct prio_array *array)
+-{
+- list_add(&p->run_list, array->queue + p->prio);
+- __set_bit(p->prio, array->bitmap);
+- array->nr_active++;
+- p->array = array;
++ /* NEED_RESCHED must be visible before we test polling */
++ smp_mb();
++ if (!tsk_is_polling(p))
++ smp_send_reschedule(cpu);
+ }
+-
+-/*
+- * __normal_prio - return the priority that is based on the static
+- * priority but is modified by bonuses/penalties.
+- *
+- * We scale the actual sleep average [0 .... MAX_SLEEP_AVG]
+- * into the -5 ... 0 ... +5 bonus/penalty range.
+- *
+- * We use 25% of the full 0...39 priority range so that:
+- *
+- * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs.
+- * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks.
+- *
+- * Both properties are important to certain workloads.
+- */
+-
+-static inline int __normal_prio(struct task_struct *p)
++#else
++static inline void resched_task(struct task_struct *p)
+ {
+- int bonus, prio;
+-
+- bonus = CURRENT_BONUS(p) - MAX_BONUS / 2;
+-
+- prio = p->static_prio - bonus;
+- if (prio < MAX_RT_PRIO)
+- prio = MAX_RT_PRIO;
+- if (prio > MAX_PRIO-1)
+- prio = MAX_PRIO-1;
+- return prio;
++ assert_spin_locked(&task_rq(p)->lock);
++ set_tsk_need_resched(p);
+ }
++#endif
+
+ /*
+ * To aid in avoiding the subversion of "niceness" due to uneven distribution
+@@ -761,22 +544,33 @@ static inline int __normal_prio(struct t
+ #define RTPRIO_TO_LOAD_WEIGHT(rp) \
+ (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp))
+
++/*
++ * Nice levels are logarithmic. These are the load shifts assigned
++ * to nice levels, where a step of every 2 nice levels means a
++ * multiplicator of 2:
++ */
++const int prio_to_load_shift[40] = {
++/* -20 */ 20, 19, 19, 18, 18, 17, 17, 16, 16, 15,
++/* -10 */ 15, 14, 14, 13, 13, 12, 12, 11, 11, 10,
++/* 0 */ 10, 9, 9, 8, 8, 7, 7, 6, 6, 5,
++/* 10 */ 5, 4, 4, 3, 3, 2, 2, 1, 1, 0
++};
++
++static int get_load_shift(struct task_struct *p)
++{
++ int prio = p->static_prio;
++
++ if (rt_prio(prio) || p->policy == SCHED_BATCH)
++ return 0;
++
++ return prio_to_load_shift[prio - MAX_RT_PRIO];
++}
++
+ static void set_load_weight(struct task_struct *p)
+ {
+- if (has_rt_policy(p)) {
+-#ifdef CONFIG_SMP
+- if (p == task_rq(p)->migration_thread)
+- /*
+- * The migration thread does the actual balancing.
+- * Giving its load any weight will skew balancing
+- * adversely.
+- */
+- p->load_weight = 0;
+- else
+-#endif
+- p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority);
+- } else
+- p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio);
++ p->load_shift = get_load_shift(p);
++ p->load_weight = 1 << p->load_shift;
++ p->wait_runtime = 0;
+ }
+
+ static inline void
+@@ -803,6 +597,40 @@ static inline void dec_nr_running(struct
+ dec_raw_weighted_load(rq, p);
+ }
+
++static void activate_task(struct rq *rq, struct task_struct *p, int wakeup);
++
++#include "sched_stats.h"
++#include "sched_rt.c"
++#include "sched_fair.c"
++#include "sched_debug.c"
++
++#define sched_class_highest (&rt_sched_class)
++
++static void enqueue_task(struct rq *rq, struct task_struct *p, int wakeup)
++{
++ u64 now = rq_clock(rq);
++
++ sched_info_queued(p);
++ p->sched_class->enqueue_task(rq, p, wakeup, now);
++ p->on_rq = 1;
++}
++
++static void dequeue_task(struct rq *rq, struct task_struct *p, int sleep)
++{
++ u64 now = rq_clock(rq);
++
++ p->sched_class->dequeue_task(rq, p, sleep, now);
++ p->on_rq = 0;
++}
++
++/*
++ * __normal_prio - return the priority that is based on the static prio
++ */
++static inline int __normal_prio(struct task_struct *p)
++{
++ return p->static_prio;
++}
++
+ /*
+ * Calculate the expected normal priority: i.e. priority
+ * without taking RT-inheritance into account. Might be
+@@ -842,210 +670,31 @@ static int effective_prio(struct task_st
+ }
+
+ /*
+- * __activate_task - move a task to the runqueue.
++ * activate_task - move a task to the runqueue.
+ */
+-static void __activate_task(struct task_struct *p, struct rq *rq)
++static void activate_task(struct rq *rq, struct task_struct *p, int wakeup)
+ {
+- struct prio_array *target = rq->active;
+-
+- if (batch_task(p))
+- target = rq->expired;
+- enqueue_task(p, target);
++ enqueue_task(rq, p, wakeup);
+ inc_nr_running(p, rq);
+ }
+
+ /*
+- * __activate_idle_task - move idle task to the _front_ of runqueue.
++ * activate_idle_task - move idle task to the _front_ of runqueue.
+ */
+-static inline void __activate_idle_task(struct task_struct *p, struct rq *rq)
++static inline void activate_idle_task(struct task_struct *p, struct rq *rq)
+ {
+- enqueue_task_head(p, rq->active);
++ enqueue_task(rq, p, 0);
+ inc_nr_running(p, rq);
+ }
+
+ /*
+- * Recalculate p->normal_prio and p->prio after having slept,
+- * updating the sleep-average too:
+- */
+-static int recalc_task_prio(struct task_struct *p, unsigned long long now)
+-{
+- /* Caller must always ensure 'now >= p->timestamp' */
+- unsigned long sleep_time = now - p->timestamp;
+-
+- if (batch_task(p))
+- sleep_time = 0;
+-
+- if (likely(sleep_time > 0)) {
+- /*
+- * This ceiling is set to the lowest priority that would allow
+- * a task to be reinserted into the active array on timeslice
+- * completion.
+- */
+- unsigned long ceiling = INTERACTIVE_SLEEP(p);
+-
+- if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) {
+- /*
+- * Prevents user tasks from achieving best priority
+- * with one single large enough sleep.
+- */
+- p->sleep_avg = ceiling;
+- /*
+- * Using INTERACTIVE_SLEEP() as a ceiling places a
+- * nice(0) task 1ms sleep away from promotion, and
+- * gives it 700ms to round-robin with no chance of
+- * being demoted. This is more than generous, so
+- * mark this sleep as non-interactive to prevent the
+- * on-runqueue bonus logic from intervening should
+- * this task not receive cpu immediately.
+- */
+- p->sleep_type = SLEEP_NONINTERACTIVE;
+- } else {
+- /*
+- * Tasks waking from uninterruptible sleep are
+- * limited in their sleep_avg rise as they
+- * are likely to be waiting on I/O
+- */
+- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) {
+- if (p->sleep_avg >= ceiling)
+- sleep_time = 0;
+- else if (p->sleep_avg + sleep_time >=
+- ceiling) {
+- p->sleep_avg = ceiling;
+- sleep_time = 0;
+- }
+- }
+-
+- /*
+- * This code gives a bonus to interactive tasks.
+- *
+- * The boost works by updating the 'average sleep time'
+- * value here, based on ->timestamp. The more time a
+- * task spends sleeping, the higher the average gets -
+- * and the higher the priority boost gets as well.
+- */
+- p->sleep_avg += sleep_time;
+-
+- }
+- if (p->sleep_avg > NS_MAX_SLEEP_AVG)
+- p->sleep_avg = NS_MAX_SLEEP_AVG;
+- }
+-
+- return effective_prio(p);
+-}
+-
+-/*
+- * activate_task - move a task to the runqueue and do priority recalculation
+- *
+- * Update all the scheduling statistics stuff. (sleep average
+- * calculation, priority modifiers, etc.)
+- */
+-static void activate_task(struct task_struct *p, struct rq *rq, int local)
+-{
+- unsigned long long now;
+-
+- if (rt_task(p))
+- goto out;
+-
+- now = sched_clock();
+-#ifdef CONFIG_SMP
+- if (!local) {
+- /* Compensate for drifting sched_clock */
+- struct rq *this_rq = this_rq();
+- now = (now - this_rq->most_recent_timestamp)
+- + rq->most_recent_timestamp;
+- }
+-#endif
+-
+- /*
+- * Sleep time is in units of nanosecs, so shift by 20 to get a
+- * milliseconds-range estimation of the amount of time that the task
+- * spent sleeping:
+- */
+- if (unlikely(prof_on == SLEEP_PROFILING)) {
+- if (p->state == TASK_UNINTERRUPTIBLE)
+- profile_hits(SLEEP_PROFILING, (void *)get_wchan(p),
+- (now - p->timestamp) >> 20);
+- }
+-
+- p->prio = recalc_task_prio(p, now);
+-
+- /*
+- * This checks to make sure it's not an uninterruptible task
+- * that is now waking up.
+- */
+- if (p->sleep_type == SLEEP_NORMAL) {
+- /*
+- * Tasks which were woken up by interrupts (ie. hw events)
+- * are most likely of interactive nature. So we give them
+- * the credit of extending their sleep time to the period
+- * of time they spend on the runqueue, waiting for execution
+- * on a CPU, first time around:
+- */
+- if (in_interrupt())
+- p->sleep_type = SLEEP_INTERRUPTED;
+- else {
+- /*
+- * Normal first-time wakeups get a credit too for
+- * on-runqueue time, but it will be weighted down:
+- */
+- p->sleep_type = SLEEP_INTERACTIVE;
+- }
+- }
+- p->timestamp = now;
+-out:
+- __activate_task(p, rq);
+-}
+-
+-/*
+ * deactivate_task - remove a task from the runqueue.
+ */
+-static void deactivate_task(struct task_struct *p, struct rq *rq)
++static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep)
+ {
++ dequeue_task(rq, p, sleep);
+ dec_nr_running(p, rq);
+- dequeue_task(p, p->array);
+- p->array = NULL;
+-}
+-
+-/*
+- * resched_task - mark a task 'to be rescheduled now'.
+- *
+- * On UP this means the setting of the need_resched flag, on SMP it
+- * might also involve a cross-CPU call to trigger the scheduler on
+- * the target CPU.
+- */
+-#ifdef CONFIG_SMP
+-
+-#ifndef tsk_is_polling
+-#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
+-#endif
+-
+-static void resched_task(struct task_struct *p)
+-{
+- int cpu;
+-
+- assert_spin_locked(&task_rq(p)->lock);
+-
+- if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))
+- return;
+-
+- set_tsk_thread_flag(p, TIF_NEED_RESCHED);
+-
+- cpu = task_cpu(p);
+- if (cpu == smp_processor_id())
+- return;
+-
+- /* NEED_RESCHED must be visible before we test polling */
+- smp_mb();
+- if (!tsk_is_polling(p))
+- smp_send_reschedule(cpu);
+-}
+-#else
+-static inline void resched_task(struct task_struct *p)
+-{
+- assert_spin_locked(&task_rq(p)->lock);
+- set_tsk_need_resched(p);
+ }
+-#endif
+
+ /**
+ * task_curr - is this task currently executing on a CPU?
+@@ -1085,7 +734,7 @@ migrate_task(struct task_struct *p, int
+ * If the task is not on a runqueue (and not running), then
+ * it is sufficient to simply update the task's cpu field.
+ */
+- if (!p->array && !task_running(rq, p)) {
++ if (!p->on_rq && !task_running(rq, p)) {
+ set_task_cpu(p, dest_cpu);
+ return 0;
+ }
+@@ -1116,7 +765,7 @@ void wait_task_inactive(struct task_stru
+ repeat:
+ rq = task_rq_lock(p, &flags);
+ /* Must be off runqueue entirely, not preempted. */
+- if (unlikely(p->array || task_running(rq, p))) {
++ if (unlikely(p->on_rq || task_running(rq, p))) {
+ /* If it's preempted, we yield. It could be a while. */
+ preempted = !task_running(rq, p);
+ task_rq_unlock(rq, &flags);
+@@ -1292,9 +941,9 @@ static int sched_balance_self(int cpu, i
+ struct sched_domain *tmp, *sd = NULL;
+
+ for_each_domain(cpu, tmp) {
+- /*
+- * If power savings logic is enabled for a domain, stop there.
+- */
++ /*
++ * If power savings logic is enabled for a domain, stop there.
++ */
+ if (tmp->flags & SD_POWERSAVINGS_BALANCE)
+ break;
+ if (tmp->flags & flag)
+@@ -1412,7 +1061,7 @@ static int try_to_wake_up(struct task_st
+ if (!(old_state & state))
+ goto out;
+
+- if (p->array)
++ if (p->on_rq)
+ goto out_running;
+
+ cpu = task_cpu(p);
+@@ -1505,7 +1154,7 @@ out_set_cpu:
+ old_state = p->state;
+ if (!(old_state & state))
+ goto out;
+- if (p->array)
++ if (p->on_rq)
+ goto out_running;
+
+ this_cpu = smp_processor_id();
+@@ -1514,25 +1163,10 @@ out_set_cpu:
+
+ out_activate:
+ #endif /* CONFIG_SMP */
+- if (old_state == TASK_UNINTERRUPTIBLE) {
++ if (old_state == TASK_UNINTERRUPTIBLE)
+ rq->nr_uninterruptible--;
+- /*
+- * Tasks on involuntary sleep don't earn
+- * sleep_avg beyond just interactive state.
+- */
+- p->sleep_type = SLEEP_NONINTERACTIVE;
+- } else
+
+- /*
+- * Tasks that have marked their sleep as noninteractive get
+- * woken up with their sleep average not weighted in an
+- * interactive way.
+- */
+- if (old_state & TASK_NONINTERACTIVE)
+- p->sleep_type = SLEEP_NONINTERACTIVE;
+-
+-
+- activate_task(p, rq, cpu == this_cpu);
++ activate_task(rq, p, 1);
+ /*
+ * Sync wakeups (i.e. those types of wakeups where the waker
+ * has indicated that it will leave the CPU in short order)
+@@ -1541,10 +1175,8 @@ out_activate:
+ * the waker guarantees that the freshly woken up task is going
+ * to be considered on this CPU.)
+ */
+- if (!sync || cpu != this_cpu) {
+- if (TASK_PREEMPTS_CURR(p, rq))
+- resched_task(rq->curr);
+- }
++ if (!sync || cpu != this_cpu)
++ check_preempt_curr(rq, p);
+ success = 1;
+
+ out_running:
+@@ -1567,19 +1199,35 @@ int fastcall wake_up_state(struct task_s
+ return try_to_wake_up(p, state, 0);
+ }
+
+-static void task_running_tick(struct rq *rq, struct task_struct *p);
++/*
++ * The task was running during this tick - call the class tick
++ * (to update the time slice counter and other statistics, etc.):
++ */
++static void task_running_tick(struct rq *rq, struct task_struct *p)
++{
++ spin_lock(&rq->lock);
++ p->sched_class->task_tick(rq, p);
++ spin_unlock(&rq->lock);
++}
++
+ /*
+ * Perform scheduler related setup for a newly forked process p.
+ * p is forked by current.
++ *
++ * __sched_fork() is basic setup used by init_idle() too:
+ */
+-void fastcall sched_fork(struct task_struct *p, int clone_flags)
++static void __sched_fork(struct task_struct *p)
+ {
+- int cpu = get_cpu();
++ p->wait_start_fair = p->wait_start = p->exec_start = p->last_ran = 0;
++ p->sum_exec_runtime = p->wait_runtime = 0;
++ p->sum_wait_runtime = 0;
++ p->sleep_start = p->block_start = 0;
++ p->sleep_max = p->block_max = p->exec_max = p->wait_max = 0;
+
+-#ifdef CONFIG_SMP
+- cpu = sched_balance_self(cpu, SD_BALANCE_FORK);
+-#endif
+- set_task_cpu(p, cpu);
++ INIT_LIST_HEAD(&p->run_list);
++ p->on_rq = 0;
++ p->nr_switches = 0;
++ p->min_wait_runtime = 0;
+
+ /*
+ * We mark the process as running here, but have not actually
+@@ -1588,16 +1236,29 @@ void fastcall sched_fork(struct task_str
+ * event cannot wake it up and insert it on the runqueue either.
+ */
+ p->state = TASK_RUNNING;
++}
++
++/*
++ * fork()/clone()-time setup:
++ */
++void sched_fork(struct task_struct *p, int clone_flags)
++{
++ int cpu = get_cpu();
++
++ __sched_fork(p);
++
++#ifdef CONFIG_SMP
++ cpu = sched_balance_self(cpu, SD_BALANCE_FORK);
++#endif
++ set_task_cpu(p, cpu);
+
+ /*
+ * Make sure we do not leak PI boosting priority to the child:
+ */
+ p->prio = current->normal_prio;
+
+- INIT_LIST_HEAD(&p->run_list);
+- p->array = NULL;
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+- if (unlikely(sched_info_on()))
++ if (likely(sched_info_on()))
+ memset(&p->sched_info, 0, sizeof(p->sched_info));
+ #endif
+ #if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
+@@ -1607,34 +1268,16 @@ void fastcall sched_fork(struct task_str
+ /* Want to start with kernel preemption disabled. */
+ task_thread_info(p)->preempt_count = 1;
+ #endif
+- /*
+- * Share the timeslice between parent and child, thus the
+- * total amount of pending timeslices in the system doesn't change,
+- * resulting in more scheduling fairness.
+- */
+- local_irq_disable();
+- p->time_slice = (current->time_slice + 1) >> 1;
+- /*
+- * The remainder of the first timeslice might be recovered by
+- * the parent if the child exits early enough.
+- */
+- p->first_time_slice = 1;
+- current->time_slice >>= 1;
+- p->timestamp = sched_clock();
+- if (unlikely(!current->time_slice)) {
+- /*
+- * This case is rare, it happens when the parent has only
+- * a single jiffy left from its timeslice. Taking the
+- * runqueue lock is not a problem.
+- */
+- current->time_slice = 1;
+- task_running_tick(cpu_rq(cpu), current);
+- }
+- local_irq_enable();
+ put_cpu();
+ }
+
+ /*
++ * After fork, child runs first. (default) If set to 0 then
++ * parent will (try to) run first.
++ */
++unsigned int __read_mostly sysctl_sched_child_runs_first = 1;
++
++/*
+ * wake_up_new_task - wake up a newly created task for the first time.
+ *
+ * This function will do some initial scheduler statistics housekeeping
+@@ -1643,107 +1286,27 @@ void fastcall sched_fork(struct task_str
+ */
+ void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
+ {
+- struct rq *rq, *this_rq;
+ unsigned long flags;
+- int this_cpu, cpu;
++ struct rq *rq;
++ int this_cpu;
+
+ rq = task_rq_lock(p, &flags);
+ BUG_ON(p->state != TASK_RUNNING);
+- this_cpu = smp_processor_id();
+- cpu = task_cpu(p);
+-
+- /*
+- * We decrease the sleep average of forking parents
+- * and children as well, to keep max-interactive tasks
+- * from forking tasks that are max-interactive. The parent
+- * (current) is done further down, under its lock.
+- */
+- p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) *
+- CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
++ this_cpu = smp_processor_id(); /* parent's CPU */
+
+ p->prio = effective_prio(p);
+
+- if (likely(cpu == this_cpu)) {
+- if (!(clone_flags & CLONE_VM)) {
+- /*
+- * The VM isn't cloned, so we're in a good position to
+- * do child-runs-first in anticipation of an exec. This
+- * usually avoids a lot of COW overhead.
+- */
+- if (unlikely(!current->array))
+- __activate_task(p, rq);
+- else {
+- p->prio = current->prio;
+- p->normal_prio = current->normal_prio;
+- list_add_tail(&p->run_list, &current->run_list);
+- p->array = current->array;
+- p->array->nr_active++;
+- inc_nr_running(p, rq);
+- }
+- set_need_resched();
+- } else
+- /* Run child last */
+- __activate_task(p, rq);
+- /*
+- * We skip the following code due to cpu == this_cpu
+- *
+- * task_rq_unlock(rq, &flags);
+- * this_rq = task_rq_lock(current, &flags);
+- */
+- this_rq = rq;
++ if (!sysctl_sched_child_runs_first || (clone_flags & CLONE_VM) ||
++ task_cpu(p) != this_cpu || !current->on_rq) {
++ activate_task(rq, p, 0);
+ } else {
+- this_rq = cpu_rq(this_cpu);
+-
+- /*
+- * Not the local CPU - must adjust timestamp. This should
+- * get optimised away in the !CONFIG_SMP case.
+- */
+- p->timestamp = (p->timestamp - this_rq->most_recent_timestamp)
+- + rq->most_recent_timestamp;
+- __activate_task(p, rq);
+- if (TASK_PREEMPTS_CURR(p, rq))
+- resched_task(rq->curr);
+-
+ /*
+- * Parent and child are on different CPUs, now get the
+- * parent runqueue to update the parent's ->sleep_avg:
++ * Let the scheduling class do new task startup
++ * management (if any):
+ */
+- task_rq_unlock(rq, &flags);
+- this_rq = task_rq_lock(current, &flags);
++ p->sched_class->task_new(rq, p);
+ }
+- current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) *
+- PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
+- task_rq_unlock(this_rq, &flags);
+-}
+-
+-/*
+- * Potentially available exiting-child timeslices are
+- * retrieved here - this way the parent does not get
+- * penalized for creating too many threads.
+- *
+- * (this cannot be used to 'generate' timeslices
+- * artificially, because any timeslice recovered here
+- * was given away by the parent in the first place.)
+- */
+-void fastcall sched_exit(struct task_struct *p)
+-{
+- unsigned long flags;
+- struct rq *rq;
+-
+- /*
+- * If the child was a (relative-) CPU hog then decrease
+- * the sleep_avg of the parent as well.
+- */
+- rq = task_rq_lock(p->parent, &flags);
+- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) {
+- p->parent->time_slice += p->time_slice;
+- if (unlikely(p->parent->time_slice > task_timeslice(p)))
+- p->parent->time_slice = task_timeslice(p);
+- }
+- if (p->sleep_avg < p->parent->sleep_avg)
+- p->parent->sleep_avg = p->parent->sleep_avg /
+- (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg /
+- (EXIT_WEIGHT + 1);
++ check_preempt_curr(rq, p);
+ task_rq_unlock(rq, &flags);
+ }
+
+@@ -1941,17 +1504,56 @@ unsigned long nr_active(void)
+ return running + uninterruptible;
+ }
+
+-#ifdef CONFIG_SMP
+-
+-/*
+- * Is this task likely cache-hot:
+- */
+-static inline int
+-task_hot(struct task_struct *p, unsigned long long now, struct sched_domain *sd)
++static void update_load_fair(struct rq *this_rq)
+ {
+- return (long long)(now - p->last_ran) < (long long)sd->cache_hot_time;
++ unsigned long this_load, fair_delta, exec_delta, idle_delta;
++ unsigned int i, scale;
++ s64 fair_delta64, exec_delta64;
++ unsigned long tmp;
++ u64 tmp64;
++
++ this_rq->nr_load_updates++;
++
++ fair_delta64 = this_rq->fair_clock - this_rq->prev_fair_clock + 1;
++ this_rq->prev_fair_clock = this_rq->fair_clock;
++ WARN_ON_ONCE(fair_delta64 <= 0);
++
++ exec_delta64 = this_rq->exec_clock - this_rq->prev_exec_clock + 1;
++ this_rq->prev_exec_clock = this_rq->exec_clock;
++ WARN_ON_ONCE(exec_delta64 <= 0);
++
++ if (fair_delta64 > (s64)LONG_MAX)
++ fair_delta64 = (s64)LONG_MAX;
++ fair_delta = (unsigned long)fair_delta64;
++
++ if (exec_delta64 > (s64)LONG_MAX)
++ exec_delta64 = (s64)LONG_MAX;
++ exec_delta = (unsigned long)exec_delta64;
++ if (exec_delta > TICK_NSEC)
++ exec_delta = TICK_NSEC;
++
++ idle_delta = TICK_NSEC - exec_delta;
++
++ tmp = (SCHED_LOAD_SCALE * exec_delta) / fair_delta;
++ tmp64 = (u64)tmp * (u64)exec_delta;
++ do_div(tmp64, TICK_NSEC);
++ this_load = (unsigned long)tmp64;
++
++ /* Update our load: */
++ for (i = 0, scale = 1; i < CPU_LOAD_IDX_MAX; i++, scale += scale) {
++ unsigned long old_load, new_load;
++
++ /* scale is effectively 1 << i now, and >> i divides by scale */
++
++ old_load = this_rq->cpu_load[i];
++ new_load = this_load;
++
++ this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i;
++ }
+ }
+
++#ifdef CONFIG_SMP
++
+ /*
+ * double_rq_lock - safely lock two runqueues
+ *
+@@ -2068,23 +1670,17 @@ void sched_exec(void)
+ * pull_task - move a task from a remote runqueue to the local runqueue.
+ * Both runqueues must be locked.
+ */
+-static void pull_task(struct rq *src_rq, struct prio_array *src_array,
+- struct task_struct *p, struct rq *this_rq,
+- struct prio_array *this_array, int this_cpu)
++static void pull_task(struct rq *src_rq, struct task_struct *p,
++ struct rq *this_rq, int this_cpu)
+ {
+- dequeue_task(p, src_array);
+- dec_nr_running(p, src_rq);
++ deactivate_task(src_rq, p, 0);
+ set_task_cpu(p, this_cpu);
+- inc_nr_running(p, this_rq);
+- enqueue_task(p, this_array);
+- p->timestamp = (p->timestamp - src_rq->most_recent_timestamp)
+- + this_rq->most_recent_timestamp;
++ activate_task(this_rq, p, 0);
+ /*
+ * Note that idle threads have a prio of MAX_PRIO, for this test
+ * to be always true for them.
+ */
+- if (TASK_PREEMPTS_CURR(p, this_rq))
+- resched_task(this_rq->curr);
++ check_preempt_curr(this_rq, p);
+ }
+
+ /*
+@@ -2109,25 +1705,59 @@ int can_migrate_task(struct task_struct
+ return 0;
+
+ /*
+- * Aggressive migration if:
+- * 1) task is cache cold, or
+- * 2) too many balance attempts have failed.
++ * Aggressive migration if too many balance attempts have failed:
+ */
+-
+- if (sd->nr_balance_failed > sd->cache_nice_tries) {
+-#ifdef CONFIG_SCHEDSTATS
+- if (task_hot(p, rq->most_recent_timestamp, sd))
+- schedstat_inc(sd, lb_hot_gained[idle]);
+-#endif
++ if (sd->nr_balance_failed > sd->cache_nice_tries)
+ return 1;
+- }
+
+- if (task_hot(p, rq->most_recent_timestamp, sd))
+- return 0;
+ return 1;
+ }
+
+-#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio)
++/*
++ * Load-balancing iterator: iterate through the hieararchy of scheduling
++ * classes, starting with the highest-prio one:
++ */
++
++struct task_struct * load_balance_start(struct rq *rq)
++{
++ struct sched_class *class = sched_class_highest;
++ struct task_struct *p;
++
++ do {
++ p = class->load_balance_start(rq);
++ if (p) {
++ rq->load_balance_class = class;
++ return p;
++ }
++ class = class->next;
++ } while (class);
++
++ return NULL;
++}
++
++struct task_struct * load_balance_next(struct rq *rq)
++{
++ struct sched_class *class = rq->load_balance_class;
++ struct task_struct *p;
++
++ p = class->load_balance_next(rq);
++ if (p)
++ return p;
++ /*
++ * Pick up the next class (if any) and attempt to start
++ * the iterator there:
++ */
++ while ((class = class->next)) {
++ p = class->load_balance_start(rq);
++ if (p) {
++ rq->load_balance_class = class;
++ return p;
++ }
++ }
++ return NULL;
++}
++
++#define rq_best_prio(rq) (rq)->curr->prio
+
+ /*
+ * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted
+@@ -2141,11 +1771,9 @@ static int move_tasks(struct rq *this_rq
+ struct sched_domain *sd, enum idle_type idle,
+ int *all_pinned)
+ {
+- int idx, pulled = 0, pinned = 0, this_best_prio, best_prio,
++ int pulled = 0, pinned = 0, this_best_prio, best_prio,
+ best_prio_seen, skip_for_load;
+- struct prio_array *array, *dst_array;
+- struct list_head *head, *curr;
+- struct task_struct *tmp;
++ struct task_struct *p;
+ long rem_load_move;
+
+ if (max_nr_move == 0 || max_load_move == 0)
+@@ -2165,76 +1793,41 @@ static int move_tasks(struct rq *this_rq
+ best_prio_seen = best_prio == busiest->curr->prio;
+
+ /*
+- * We first consider expired tasks. Those will likely not be
+- * executed in the near future, and they are most likely to
+- * be cache-cold, thus switching CPUs has the least effect
+- * on them.
+- */
+- if (busiest->expired->nr_active) {
+- array = busiest->expired;
+- dst_array = this_rq->expired;
+- } else {
+- array = busiest->active;
+- dst_array = this_rq->active;
+- }
+-
+-new_array:
+- /* Start searching at priority 0: */
+- idx = 0;
+-skip_bitmap:
+- if (!idx)
+- idx = sched_find_first_bit(array->bitmap);
+- else
+- idx = find_next_bit(array->bitmap, MAX_PRIO, idx);
+- if (idx >= MAX_PRIO) {
+- if (array == busiest->expired && busiest->active->nr_active) {
+- array = busiest->active;
+- dst_array = this_rq->active;
+- goto new_array;
+- }
++ * Start the load-balancing iterator:
++ */
++ p = load_balance_start(busiest);
++next:
++ if (!p)
+ goto out;
+- }
+-
+- head = array->queue + idx;
+- curr = head->prev;
+-skip_queue:
+- tmp = list_entry(curr, struct task_struct, run_list);
+-
+- curr = curr->prev;
+-
+ /*
+ * To help distribute high priority tasks accross CPUs we don't
+ * skip a task if it will be the highest priority task (i.e. smallest
+ * prio value) on its new queue regardless of its load weight
+ */
+- skip_for_load = tmp->load_weight > rem_load_move;
+- if (skip_for_load && idx < this_best_prio)
+- skip_for_load = !best_prio_seen && idx == best_prio;
++ skip_for_load = p->load_weight > rem_load_move;
++ if (skip_for_load && p->prio < this_best_prio)
++ skip_for_load = !best_prio_seen && p->prio == best_prio;
+ if (skip_for_load ||
+- !can_migrate_task(tmp, busiest, this_cpu, sd, idle, &pinned)) {
++ !can_migrate_task(p, busiest, this_cpu, sd, idle, &pinned)) {
+
+- best_prio_seen |= idx == best_prio;
+- if (curr != head)
+- goto skip_queue;
+- idx++;
+- goto skip_bitmap;
++ best_prio_seen |= p->prio == best_prio;
++ p = load_balance_next(busiest);
++ goto next;
+ }
+
+- pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu);
++ pull_task(busiest, p, this_rq, this_cpu);
+ pulled++;
+- rem_load_move -= tmp->load_weight;
++ rem_load_move -= p->load_weight;
+
+ /*
+ * We only want to steal up to the prescribed number of tasks
+ * and the prescribed amount of weighted load.
+ */
+ if (pulled < max_nr_move && rem_load_move > 0) {
+- if (idx < this_best_prio)
+- this_best_prio = idx;
+- if (curr != head)
+- goto skip_queue;
+- idx++;
+- goto skip_bitmap;
++ if (p->prio < this_best_prio)
++ this_best_prio = p->prio;
++ p = load_balance_next(busiest);
++ goto next;
+ }
+ out:
+ /*
+@@ -2360,8 +1953,8 @@ find_busiest_group(struct sched_domain *
+ * Busy processors will not participate in power savings
+ * balance.
+ */
+- if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE))
+- goto group_next;
++ if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE))
++ goto group_next;
+
+ /*
+ * If the local group is idle or completely loaded
+@@ -2371,42 +1964,42 @@ find_busiest_group(struct sched_domain *
+ !this_nr_running))
+ power_savings_balance = 0;
+
+- /*
++ /*
+ * If a group is already running at full capacity or idle,
+ * don't include that group in power savings calculations
+- */
+- if (!power_savings_balance || sum_nr_running >= group_capacity
++ */
++ if (!power_savings_balance || sum_nr_running >= group_capacity
+ || !sum_nr_running)
+- goto group_next;
++ goto group_next;
+
+- /*
++ /*
+ * Calculate the group which has the least non-idle load.
+- * This is the group from where we need to pick up the load
+- * for saving power
+- */
+- if ((sum_nr_running < min_nr_running) ||
+- (sum_nr_running == min_nr_running &&
++ * This is the group from where we need to pick up the load
++ * for saving power
++ */
++ if ((sum_nr_running < min_nr_running) ||
++ (sum_nr_running == min_nr_running &&
+ first_cpu(group->cpumask) <
+ first_cpu(group_min->cpumask))) {
+- group_min = group;
+- min_nr_running = sum_nr_running;
++ group_min = group;
++ min_nr_running = sum_nr_running;
+ min_load_per_task = sum_weighted_load /
+ sum_nr_running;
+- }
++ }
+
+- /*
++ /*
+ * Calculate the group which is almost near its
+- * capacity but still has some space to pick up some load
+- * from other group and save more power
+- */
+- if (sum_nr_running <= group_capacity - 1) {
+- if (sum_nr_running > leader_nr_running ||
+- (sum_nr_running == leader_nr_running &&
+- first_cpu(group->cpumask) >
+- first_cpu(group_leader->cpumask))) {
+- group_leader = group;
+- leader_nr_running = sum_nr_running;
+- }
++ * capacity but still has some space to pick up some load
++ * from other group and save more power
++ */
++ if (sum_nr_running <= group_capacity - 1) {
++ if (sum_nr_running > leader_nr_running ||
++ (sum_nr_running == leader_nr_running &&
++ first_cpu(group->cpumask) >
++ first_cpu(group_leader->cpumask))) {
++ group_leader = group;
++ leader_nr_running = sum_nr_running;
++ }
+ }
+ group_next:
+ #endif
+@@ -2461,7 +2054,7 @@ group_next:
+ * a think about bumping its value to force at least one task to be
+ * moved
+ */
+- if (*imbalance < busiest_load_per_task) {
++ if (*imbalance + SCHED_LOAD_SCALE_FUZZ < busiest_load_per_task) {
+ unsigned long tmp, pwr_now, pwr_move;
+ unsigned int imbn;
+
+@@ -2475,7 +2068,8 @@ small_imbalance:
+ } else
+ this_load_per_task = SCHED_LOAD_SCALE;
+
+- if (max_load - this_load >= busiest_load_per_task * imbn) {
++ if (max_load - this_load + SCHED_LOAD_SCALE_FUZZ >=
++ busiest_load_per_task * imbn) {
+ *imbalance = busiest_load_per_task;
+ return busiest;
+ }
+@@ -2884,30 +2478,6 @@ static void active_load_balance(struct r
+ spin_unlock(&target_rq->lock);
+ }
+
+-static void update_load(struct rq *this_rq)
+-{
+- unsigned long this_load;
+- int i, scale;
+-
+- this_load = this_rq->raw_weighted_load;
+-
+- /* Update our load: */
+- for (i = 0, scale = 1; i < 3; i++, scale <<= 1) {
+- unsigned long old_load, new_load;
+-
+- old_load = this_rq->cpu_load[i];
+- new_load = this_load;
+- /*
+- * Round up the averaging division if load is increasing. This
+- * prevents us from getting stuck on 9 if the load is 10, for
+- * example.
+- */
+- if (new_load > old_load)
+- new_load += scale-1;
+- this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) / scale;
+- }
+-}
+-
+ /*
+ * run_rebalance_domains is triggered when needed from the scheduler tick.
+ *
+@@ -2987,76 +2557,27 @@ static inline void idle_balance(int cpu,
+ }
+ #endif
+
+-static inline void wake_priority_sleeper(struct rq *rq)
+-{
+-#ifdef CONFIG_SCHED_SMT
+- if (!rq->nr_running)
+- return;
+-
+- spin_lock(&rq->lock);
+- /*
+- * If an SMT sibling task has been put to sleep for priority
+- * reasons reschedule the idle task to see if it can now run.
+- */
+- if (rq->nr_running)
+- resched_task(rq->idle);
+- spin_unlock(&rq->lock);
+-#endif
+-}
+-
+ DEFINE_PER_CPU(struct kernel_stat, kstat);
+
+ EXPORT_PER_CPU_SYMBOL(kstat);
+
+ /*
+- * This is called on clock ticks and on context switches.
+- * Bank in p->sched_time the ns elapsed since the last tick or switch.
+- */
+-static inline void
+-update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now)
+-{
+- p->sched_time += now - p->last_ran;
+- p->last_ran = rq->most_recent_timestamp = now;
+-}
+-
+-/*
+- * Return current->sched_time plus any more ns on the sched_clock
++ * Return current->sum_exec_runtime plus any more ns on the sched_clock
+ * that have not yet been banked.
+ */
+-unsigned long long current_sched_time(const struct task_struct *p)
++unsigned long long current_sched_runtime(const struct task_struct *p)
+ {
+ unsigned long long ns;
+ unsigned long flags;
+
+ local_irq_save(flags);
+- ns = p->sched_time + sched_clock() - p->last_ran;
++ ns = p->sum_exec_runtime + sched_clock() - p->last_ran;
+ local_irq_restore(flags);
+
+ return ns;
+ }
+
+ /*
+- * We place interactive tasks back into the active array, if possible.
+- *
+- * To guarantee that this does not starve expired tasks we ignore the
+- * interactivity of a task if the first expired task had to wait more
+- * than a 'reasonable' amount of time. This deadline timeout is
+- * load-dependent, as the frequency of array switched decreases with
+- * increasing number of running tasks. We also ignore the interactivity
+- * if a better static_prio task has expired:
+- */
+-static inline int expired_starving(struct rq *rq)
+-{
+- if (rq->curr->static_prio > rq->best_expired_prio)
+- return 1;
+- if (!STARVATION_LIMIT || !rq->expired_timestamp)
+- return 0;
+- if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running)
+- return 1;
+- return 0;
+-}
+-
+-/*
+ * Account user cpu time to a process.
+ * @p: the process that the cpu time gets accounted to
+ * @hardirq_offset: the offset to subtract from hardirq_count()
+@@ -3129,81 +2650,6 @@ void account_steal_time(struct task_stru
+ cpustat->steal = cputime64_add(cpustat->steal, tmp);
+ }
+
+-static void task_running_tick(struct rq *rq, struct task_struct *p)
+-{
+- if (p->array != rq->active) {
+- /* Task has expired but was not scheduled yet */
+- set_tsk_need_resched(p);
+- return;
+- }
+- spin_lock(&rq->lock);
+- /*
+- * The task was running during this tick - update the
+- * time slice counter. Note: we do not update a thread's
+- * priority until it either goes to sleep or uses up its
+- * timeslice. This makes it possible for interactive tasks
+- * to use up their timeslices at their highest priority levels.
+- */
+- if (rt_task(p)) {
+- /*
+- * RR tasks need a special form of timeslice management.
+- * FIFO tasks have no timeslices.
+- */
+- if ((p->policy == SCHED_RR) && !--p->time_slice) {
+- p->time_slice = task_timeslice(p);
+- p->first_time_slice = 0;
+- set_tsk_need_resched(p);
+-
+- /* put it at the end of the queue: */
+- requeue_task(p, rq->active);
+- }
+- goto out_unlock;
+- }
+- if (!--p->time_slice) {
+- dequeue_task(p, rq->active);
+- set_tsk_need_resched(p);
+- p->prio = effective_prio(p);
+- p->time_slice = task_timeslice(p);
+- p->first_time_slice = 0;
+-
+- if (!rq->expired_timestamp)
+- rq->expired_timestamp = jiffies;
+- if (!TASK_INTERACTIVE(p) || expired_starving(rq)) {
+- enqueue_task(p, rq->expired);
+- if (p->static_prio < rq->best_expired_prio)
+- rq->best_expired_prio = p->static_prio;
+- } else
+- enqueue_task(p, rq->active);
+- } else {
+- /*
+- * Prevent a too long timeslice allowing a task to monopolize
+- * the CPU. We do this by splitting up the timeslice into
+- * smaller pieces.
+- *
+- * Note: this does not mean the task's timeslices expire or
+- * get lost in any way, they just might be preempted by
+- * another task of equal priority. (one with higher
+- * priority would have preempted this task already.) We
+- * requeue this task to the end of the list on this priority
+- * level, which is in essence a round-robin of tasks with
+- * equal priority.
+- *
+- * This only applies to tasks in the interactive
+- * delta range with at least TIMESLICE_GRANULARITY to requeue.
+- */
+- if (TASK_INTERACTIVE(p) && !((task_timeslice(p) -
+- p->time_slice) % TIMESLICE_GRANULARITY(p)) &&
+- (p->time_slice >= TIMESLICE_GRANULARITY(p)) &&
+- (p->array == rq->active)) {
+-
+- requeue_task(p, rq->active);
+- set_tsk_need_resched(p);
+- }
+- }
+-out_unlock:
+- spin_unlock(&rq->lock);
+-}
+-
+ /*
+ * This function gets called by the timer code, with HZ frequency.
+ * We call it with interrupts disabled.
+@@ -3213,155 +2659,19 @@ out_unlock:
+ */
+ void scheduler_tick(void)
+ {
+- unsigned long long now = sched_clock();
+ struct task_struct *p = current;
+ int cpu = smp_processor_id();
+ struct rq *rq = cpu_rq(cpu);
+
+- update_cpu_clock(p, rq, now);
+-
+- if (p == rq->idle)
+- /* Task on the idle queue */
+- wake_priority_sleeper(rq);
+- else
++ if (p != rq->idle)
+ task_running_tick(rq, p);
++ update_load_fair(rq);
+ #ifdef CONFIG_SMP
+- update_load(rq);
+ if (time_after_eq(jiffies, rq->next_balance))
+ raise_softirq(SCHED_SOFTIRQ);
+ #endif
+ }
+
+-#ifdef CONFIG_SCHED_SMT
+-static inline void wakeup_busy_runqueue(struct rq *rq)
+-{
+- /* If an SMT runqueue is sleeping due to priority reasons wake it up */
+- if (rq->curr == rq->idle && rq->nr_running)
+- resched_task(rq->idle);
+-}
+-
+-/*
+- * Called with interrupt disabled and this_rq's runqueue locked.
+- */
+-static void wake_sleeping_dependent(int this_cpu)
+-{
+- struct sched_domain *tmp, *sd = NULL;
+- int i;
+-
+- for_each_domain(this_cpu, tmp) {
+- if (tmp->flags & SD_SHARE_CPUPOWER) {
+- sd = tmp;
+- break;
+- }
+- }
+-
+- if (!sd)
+- return;
+-
+- for_each_cpu_mask(i, sd->span) {
+- struct rq *smt_rq = cpu_rq(i);
+-
+- if (i == this_cpu)
+- continue;
+- if (unlikely(!spin_trylock(&smt_rq->lock)))
+- continue;
+-
+- wakeup_busy_runqueue(smt_rq);
+- spin_unlock(&smt_rq->lock);
+- }
+-}
+-
+-/*
+- * number of 'lost' timeslices this task wont be able to fully
+- * utilize, if another task runs on a sibling. This models the
+- * slowdown effect of other tasks running on siblings:
+- */
+-static inline unsigned long
+-smt_slice(struct task_struct *p, struct sched_domain *sd)
+-{
+- return p->time_slice * (100 - sd->per_cpu_gain) / 100;
+-}
+-
+-/*
+- * To minimise lock contention and not have to drop this_rq's runlock we only
+- * trylock the sibling runqueues and bypass those runqueues if we fail to
+- * acquire their lock. As we only trylock the normal locking order does not
+- * need to be obeyed.
+- */
+-static int
+-dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p)
+-{
+- struct sched_domain *tmp, *sd = NULL;
+- int ret = 0, i;
+-
+- /* kernel/rt threads do not participate in dependent sleeping */
+- if (!p->mm || rt_task(p))
+- return 0;
+-
+- for_each_domain(this_cpu, tmp) {
+- if (tmp->flags & SD_SHARE_CPUPOWER) {
+- sd = tmp;
+- break;
+- }
+- }
+-
+- if (!sd)
+- return 0;
+-
+- for_each_cpu_mask(i, sd->span) {
+- struct task_struct *smt_curr;
+- struct rq *smt_rq;
+-
+- if (i == this_cpu)
+- continue;
+-
+- smt_rq = cpu_rq(i);
+- if (unlikely(!spin_trylock(&smt_rq->lock)))
+- continue;
+-
+- smt_curr = smt_rq->curr;
+-
+- if (!smt_curr->mm)
+- goto unlock;
+-
+- /*
+- * If a user task with lower static priority than the
+- * running task on the SMT sibling is trying to schedule,
+- * delay it till there is proportionately less timeslice
+- * left of the sibling task to prevent a lower priority
+- * task from using an unfair proportion of the
+- * physical cpu's resources. -ck
+- */
+- if (rt_task(smt_curr)) {
+- /*
+- * With real time tasks we run non-rt tasks only
+- * per_cpu_gain% of the time.
+- */
+- if ((jiffies % DEF_TIMESLICE) >
+- (sd->per_cpu_gain * DEF_TIMESLICE / 100))
+- ret = 1;
+- } else {
+- if (smt_curr->static_prio < p->static_prio &&
+- !TASK_PREEMPTS_CURR(p, smt_rq) &&
+- smt_slice(smt_curr, sd) > task_timeslice(p))
+- ret = 1;
+- }
+-unlock:
+- spin_unlock(&smt_rq->lock);
+- }
+- return ret;
+-}
+-#else
+-static inline void wake_sleeping_dependent(int this_cpu)
+-{
+-}
+-static inline int
+-dependent_sleeper(int this_cpu, struct rq *this_rq, struct task_struct *p)
+-{
+- return 0;
+-}
+-#endif
+-
+ #if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT)
+
+ void fastcall add_preempt_count(int val)
+@@ -3400,49 +2710,27 @@ EXPORT_SYMBOL(sub_preempt_count);
+
+ #endif
+
+-static inline int interactive_sleep(enum sleep_type sleep_type)
+-{
+- return (sleep_type == SLEEP_INTERACTIVE ||
+- sleep_type == SLEEP_INTERRUPTED);
+-}
+-
+ /*
+- * schedule() is the main scheduler function.
++ * Various schedule()-time debugging checks and statistics:
+ */
+-asmlinkage void __sched schedule(void)
++static inline void schedule_debug(struct rq *rq, struct task_struct *prev)
+ {
+- struct task_struct *prev, *next;
+- struct prio_array *array;
+- struct list_head *queue;
+- unsigned long long now;
+- unsigned long run_time;
+- int cpu, idx, new_prio;
+- long *switch_count;
+- struct rq *rq;
+-
+ /*
+ * Test if we are atomic. Since do_exit() needs to call into
+ * schedule() atomically, we ignore that path for now.
+ * Otherwise, whine if we are scheduling when we should not be.
+ */
+- if (unlikely(in_atomic() && !current->exit_state)) {
++ if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) {
+ printk(KERN_ERR "BUG: scheduling while atomic: "
+ "%s/0x%08x/%d\n",
+- current->comm, preempt_count(), current->pid);
+- debug_show_held_locks(current);
++ prev->comm, preempt_count(), prev->pid);
++ debug_show_held_locks(prev);
+ if (irqs_disabled())
+- print_irqtrace_events(current);
++ print_irqtrace_events(prev);
+ dump_stack();
+ }
+ profile_hit(SCHED_PROFILING, __builtin_return_address(0));
+
+-need_resched:
+- preempt_disable();
+- prev = current;
+- release_kernel_lock(prev);
+-need_resched_nonpreemptible:
+- rq = this_rq();
+-
+ /*
+ * The idle thread is not allowed to schedule!
+ * Remove this check after it has been exercised a bit.
+@@ -3453,19 +2741,45 @@ need_resched_nonpreemptible:
+ }
+
+ schedstat_inc(rq, sched_cnt);
+- now = sched_clock();
+- if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) {
+- run_time = now - prev->timestamp;
+- if (unlikely((long long)(now - prev->timestamp) < 0))
+- run_time = 0;
+- } else
+- run_time = NS_MAX_SLEEP_AVG;
++}
+
+- /*
+- * Tasks charged proportionately less run_time at high sleep_avg to
+- * delay them losing their interactive status
+- */
+- run_time /= (CURRENT_BONUS(prev) ? : 1);
++static inline struct task_struct *
++pick_next_task(struct rq *rq, struct task_struct *prev)
++{
++ struct sched_class *class = sched_class_highest;
++ u64 now = __rq_clock(rq);
++ struct task_struct *p;
++
++ prev->sched_class->put_prev_task(rq, prev, now);
++
++ do {
++ p = class->pick_next_task(rq, now);
++ if (p)
++ return p;
++ class = class->next;
++ } while (class);
++
++ return NULL;
++}
++
++/*
++ * schedule() is the main scheduler function.
++ */
++asmlinkage void __sched schedule(void)
++{
++ struct task_struct *prev, *next;
++ long *switch_count;
++ struct rq *rq;
++ int cpu;
++
++need_resched:
++ preempt_disable();
++ prev = current;
++ release_kernel_lock(prev);
++need_resched_nonpreemptible:
++ rq = this_rq();
++
++ schedule_debug(rq, prev);
+
+ spin_lock_irq(&rq->lock);
+
+@@ -3478,7 +2792,7 @@ need_resched_nonpreemptible:
+ else {
+ if (prev->state == TASK_UNINTERRUPTIBLE)
+ rq->nr_uninterruptible++;
+- deactivate_task(prev, rq);
++ deactivate_task(rq, prev, 1);
+ }
+ }
+
+@@ -3486,68 +2800,25 @@ need_resched_nonpreemptible:
+ if (unlikely(!rq->nr_running)) {
+ idle_balance(cpu, rq);
+ if (!rq->nr_running) {
++ prev->sched_class->put_prev_task(rq, prev,
++ __rq_clock(rq));
+ next = rq->idle;
+- rq->expired_timestamp = 0;
+- wake_sleeping_dependent(cpu);
++ schedstat_inc(rq, sched_goidle);
+ goto switch_tasks;
+ }
+ }
+
+- array = rq->active;
+- if (unlikely(!array->nr_active)) {
+- /*
+- * Switch the active and expired arrays.
+- */
+- schedstat_inc(rq, sched_switch);
+- rq->active = rq->expired;
+- rq->expired = array;
+- array = rq->active;
+- rq->expired_timestamp = 0;
+- rq->best_expired_prio = MAX_PRIO;
+- }
+-
+- idx = sched_find_first_bit(array->bitmap);
+- queue = array->queue + idx;
+- next = list_entry(queue->next, struct task_struct, run_list);
+-
+- if (!rt_task(next) && interactive_sleep(next->sleep_type)) {
+- unsigned long long delta = now - next->timestamp;
+- if (unlikely((long long)(now - next->timestamp) < 0))
+- delta = 0;
+-
+- if (next->sleep_type == SLEEP_INTERACTIVE)
+- delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128;
+-
+- array = next->array;
+- new_prio = recalc_task_prio(next, next->timestamp + delta);
+-
+- if (unlikely(next->prio != new_prio)) {
+- dequeue_task(next, array);
+- next->prio = new_prio;
+- enqueue_task(next, array);
+- }
+- }
+- next->sleep_type = SLEEP_NORMAL;
+- if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next))
+- next = rq->idle;
++ next = pick_next_task(rq, prev);
++ next->nr_switches++;
++
+ switch_tasks:
+- if (next == rq->idle)
+- schedstat_inc(rq, sched_goidle);
+ prefetch(next);
+ prefetch_stack(next);
+ clear_tsk_need_resched(prev);
+ rcu_qsctr_inc(task_cpu(prev));
+
+- update_cpu_clock(prev, rq, now);
+-
+- prev->sleep_avg -= run_time;
+- if ((long)prev->sleep_avg <= 0)
+- prev->sleep_avg = 0;
+- prev->timestamp = prev->last_ran = now;
+-
+ sched_info_switch(prev, next);
+ if (likely(prev != next)) {
+- next->timestamp = next->last_ran = now;
+ rq->nr_switches++;
+ rq->curr = next;
+ ++*switch_count;
+@@ -3978,29 +3249,28 @@ EXPORT_SYMBOL(sleep_on_timeout);
+ */
+ void rt_mutex_setprio(struct task_struct *p, int prio)
+ {
+- struct prio_array *array;
+ unsigned long flags;
++ int oldprio, on_rq;
+ struct rq *rq;
+- int oldprio;
+
+ BUG_ON(prio < 0 || prio > MAX_PRIO);
+
+ rq = task_rq_lock(p, &flags);
+
+ oldprio = p->prio;
+- array = p->array;
+- if (array)
+- dequeue_task(p, array);
++ on_rq = p->on_rq;
++ if (on_rq)
++ dequeue_task(rq, p, 0);
++
++ if (rt_prio(prio))
++ p->sched_class = &rt_sched_class;
++ else
++ p->sched_class = &fair_sched_class;
++
+ p->prio = prio;
+
+- if (array) {
+- /*
+- * If changing to an RT priority then queue it
+- * in the active array!
+- */
+- if (rt_task(p))
+- array = rq->active;
+- enqueue_task(p, array);
++ if (on_rq) {
++ enqueue_task(rq, p, 0);
+ /*
+ * Reschedule if we are currently running on this runqueue and
+ * our priority decreased, or if we are not currently running on
+@@ -4009,8 +3279,9 @@ void rt_mutex_setprio(struct task_struct
+ if (task_running(rq, p)) {
+ if (p->prio > oldprio)
+ resched_task(rq->curr);
+- } else if (TASK_PREEMPTS_CURR(p, rq))
+- resched_task(rq->curr);
++ } else {
++ check_preempt_curr(rq, p);
++ }
+ }
+ task_rq_unlock(rq, &flags);
+ }
+@@ -4019,8 +3290,7 @@ void rt_mutex_setprio(struct task_struct
+
+ void set_user_nice(struct task_struct *p, long nice)
+ {
+- struct prio_array *array;
+- int old_prio, delta;
++ int old_prio, delta, on_rq;
+ unsigned long flags;
+ struct rq *rq;
+
+@@ -4041,9 +3311,9 @@ void set_user_nice(struct task_struct *p
+ p->static_prio = NICE_TO_PRIO(nice);
+ goto out_unlock;
+ }
+- array = p->array;
+- if (array) {
+- dequeue_task(p, array);
++ on_rq = p->on_rq;
++ if (on_rq) {
++ dequeue_task(rq, p, 0);
+ dec_raw_weighted_load(rq, p);
+ }
+
+@@ -4053,8 +3323,8 @@ void set_user_nice(struct task_struct *p
+ p->prio = effective_prio(p);
+ delta = p->prio - old_prio;
+
+- if (array) {
+- enqueue_task(p, array);
++ if (on_rq) {
++ enqueue_task(rq, p, 0);
+ inc_raw_weighted_load(rq, p);
+ /*
+ * If the task increased its priority or is running and
+@@ -4175,20 +3445,27 @@ static inline struct task_struct *find_p
+ }
+
+ /* Actually do priority change: must hold rq lock. */
+-static void __setscheduler(struct task_struct *p, int policy, int prio)
++static void
++__setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio)
+ {
+- BUG_ON(p->array);
++ BUG_ON(p->on_rq);
+
+ p->policy = policy;
++ switch (p->policy) {
++ case SCHED_NORMAL:
++ case SCHED_BATCH:
++ p->sched_class = &fair_sched_class;
++ break;
++ case SCHED_FIFO:
++ case SCHED_RR:
++ p->sched_class = &rt_sched_class;
++ break;
++ }
++
+ p->rt_priority = prio;
+ p->normal_prio = normal_prio(p);
+ /* we are holding p->pi_lock already */
+ p->prio = rt_mutex_getprio(p);
+- /*
+- * SCHED_BATCH tasks are treated as perpetual CPU hogs:
+- */
+- if (policy == SCHED_BATCH)
+- p->sleep_avg = 0;
+ set_load_weight(p);
+ }
+
+@@ -4204,8 +3481,7 @@ static void __setscheduler(struct task_s
+ int sched_setscheduler(struct task_struct *p, int policy,
+ struct sched_param *param)
+ {
+- int retval, oldprio, oldpolicy = -1;
+- struct prio_array *array;
++ int retval, oldprio, oldpolicy = -1, on_rq;
+ unsigned long flags;
+ struct rq *rq;
+
+@@ -4279,13 +3555,13 @@ recheck:
+ spin_unlock_irqrestore(&p->pi_lock, flags);
+ goto recheck;
+ }
+- array = p->array;
+- if (array)
+- deactivate_task(p, rq);
++ on_rq = p->on_rq;
++ if (on_rq)
++ deactivate_task(rq, p, 0);
+ oldprio = p->prio;
+- __setscheduler(p, policy, param->sched_priority);
+- if (array) {
+- __activate_task(p, rq);
++ __setscheduler(rq, p, policy, param->sched_priority);
++ if (on_rq) {
++ activate_task(rq, p, 0);
+ /*
+ * Reschedule if we are currently running on this runqueue and
+ * our priority decreased, or if we are not currently running on
+@@ -4294,8 +3570,9 @@ recheck:
+ if (task_running(rq, p)) {
+ if (p->prio > oldprio)
+ resched_task(rq->curr);
+- } else if (TASK_PREEMPTS_CURR(p, rq))
+- resched_task(rq->curr);
++ } else {
++ check_preempt_curr(rq, p);
++ }
+ }
+ __task_rq_unlock(rq);
+ spin_unlock_irqrestore(&p->pi_lock, flags);
+@@ -4558,50 +3835,66 @@ asmlinkage long sys_sched_getaffinity(pi
+ if (ret < 0)
+ return ret;
+
+- if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t)))
+- return -EFAULT;
++ if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t)))
++ return -EFAULT;
++
++ return sizeof(cpumask_t);
++}
++
++/**
++ * sys_sched_yield - yield the current processor to other threads.
++ *
++ * This function yields the current CPU to other tasks. If there are no
++ * other threads running on this CPU then this function will return.
++ */
++asmlinkage long sys_sched_yield(void)
++{
++ struct rq *rq = this_rq_lock();
++
++ schedstat_inc(rq, yld_cnt);
++ if (rq->nr_running == 1)
++ schedstat_inc(rq, yld_act_empty);
++ else
++ current->sched_class->yield_task(rq, current, NULL);
++
++ /*
++ * Since we are going to call schedule() anyway, there's
++ * no need to preempt or enable interrupts:
++ */
++ __release(rq->lock);
++ spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
++ _raw_spin_unlock(&rq->lock);
++ preempt_enable_no_resched();
++
++ schedule();
+
+- return sizeof(cpumask_t);
++ return 0;
+ }
+
+ /**
+- * sys_sched_yield - yield the current processor to other threads.
++ * sys_sched_yield_to - yield the current processor to another thread
+ *
+- * this function yields the current CPU by moving the calling thread
++ * This function yields the current CPU by moving the calling thread
+ * to the expired array. If there are no other threads running on this
+ * CPU then this function will return.
+ */
+-asmlinkage long sys_sched_yield(void)
++asmlinkage long sys_sched_yield_to(pid_t pid)
+ {
+- struct rq *rq = this_rq_lock();
+- struct prio_array *array = current->array, *target = rq->expired;
++ struct task_struct *p_to;
++ struct rq *rq;
+
+- schedstat_inc(rq, yld_cnt);
+- /*
+- * We implement yielding by moving the task into the expired
+- * queue.
+- *
+- * (special rule: RT tasks will just roundrobin in the active
+- * array.)
+- */
+- if (rt_task(current))
+- target = rq->active;
++ rcu_read_lock();
++ p_to = find_task_by_pid(pid);
++ if (!p_to)
++ goto out_unlock;
+
+- if (array->nr_active == 1) {
++ rq = this_rq_lock();
++
++ schedstat_inc(rq, yld_cnt);
++ if (rq->nr_running == 1)
+ schedstat_inc(rq, yld_act_empty);
+- if (!rq->expired->nr_active)
+- schedstat_inc(rq, yld_both_empty);
+- } else if (!rq->expired->nr_active)
+- schedstat_inc(rq, yld_exp_empty);
+-
+- if (array != target) {
+- dequeue_task(current, array);
+- enqueue_task(current, target);
+- } else
+- /*
+- * requeue_task is cheaper so perform that if possible.
+- */
+- requeue_task(current, array);
++ else
++ current->sched_class->yield_task(rq, current, p_to);
+
+ /*
+ * Since we are going to call schedule() anyway, there's
+@@ -4610,13 +3903,19 @@ asmlinkage long sys_sched_yield(void)
+ __release(rq->lock);
+ spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
+ _raw_spin_unlock(&rq->lock);
++ rcu_read_unlock();
+ preempt_enable_no_resched();
+
+ schedule();
+
+ return 0;
++
++out_unlock:
++ rcu_read_unlock();
++ return -ESRCH;
+ }
+
++
+ static void __cond_resched(void)
+ {
+ #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
+@@ -4812,7 +4111,7 @@ long sys_sched_rr_get_interval(pid_t pid
+ goto out_unlock;
+
+ jiffies_to_timespec(p->policy == SCHED_FIFO ?
+- 0 : task_timeslice(p), &t);
++ 0 : static_prio_timeslice(p->static_prio), &t);
+ read_unlock(&tasklist_lock);
+ retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
+ out_nounlock:
+@@ -4915,7 +4214,7 @@ void show_state_filter(unsigned long sta
+ * console might take alot of time:
+ */
+ touch_nmi_watchdog();
+- if (p->state & state_filter)
++ if (!state_filter || (p->state & state_filter))
+ show_task(p);
+ } while_each_thread(g, p);
+
+@@ -4925,6 +4224,7 @@ void show_state_filter(unsigned long sta
+ */
+ if (state_filter == -1)
+ debug_show_all_locks();
++ sysrq_sched_debug_show();
+ }
+
+ /**
+@@ -4940,11 +4240,10 @@ void __cpuinit init_idle(struct task_str
+ struct rq *rq = cpu_rq(cpu);
+ unsigned long flags;
+
+- idle->timestamp = sched_clock();
+- idle->sleep_avg = 0;
+- idle->array = NULL;
++ __sched_fork(idle);
++ idle->exec_start = sched_clock();
++
+ idle->prio = idle->normal_prio = MAX_PRIO;
+- idle->state = TASK_RUNNING;
+ idle->cpus_allowed = cpumask_of_cpu(cpu);
+ set_task_cpu(idle, cpu);
+
+@@ -5062,19 +4361,10 @@ static int __migrate_task(struct task_st
+ goto out;
+
+ set_task_cpu(p, dest_cpu);
+- if (p->array) {
+- /*
+- * Sync timestamp with rq_dest's before activating.
+- * The same thing could be achieved by doing this step
+- * afterwards, and pretending it was a local activate.
+- * This way is cleaner and logically correct.
+- */
+- p->timestamp = p->timestamp - rq_src->most_recent_timestamp
+- + rq_dest->most_recent_timestamp;
+- deactivate_task(p, rq_src);
+- __activate_task(p, rq_dest);
+- if (TASK_PREEMPTS_CURR(p, rq_dest))
+- resched_task(rq_dest->curr);
++ if (p->on_rq) {
++ deactivate_task(rq_src, p, 0);
++ activate_task(rq_dest, p, 0);
++ check_preempt_curr(rq_dest, p);
+ }
+ ret = 1;
+ out:
+@@ -5246,10 +4536,10 @@ void sched_idle_next(void)
+ */
+ spin_lock_irqsave(&rq->lock, flags);
+
+- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1);
++ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1);
+
+ /* Add idle task to the _front_ of its priority queue: */
+- __activate_idle_task(p, rq);
++ activate_idle_task(p, rq);
+
+ spin_unlock_irqrestore(&rq->lock, flags);
+ }
+@@ -5299,16 +4589,15 @@ static void migrate_dead(unsigned int de
+ static void migrate_dead_tasks(unsigned int dead_cpu)
+ {
+ struct rq *rq = cpu_rq(dead_cpu);
+- unsigned int arr, i;
++ struct task_struct *next;
+
+- for (arr = 0; arr < 2; arr++) {
+- for (i = 0; i < MAX_PRIO; i++) {
+- struct list_head *list = &rq->arrays[arr].queue[i];
+-
+- while (!list_empty(list))
+- migrate_dead(dead_cpu, list_entry(list->next,
+- struct task_struct, run_list));
+- }
++ for (;;) {
++ if (!rq->nr_running)
++ break;
++ next = pick_next_task(rq, rq->curr);
++ if (!next)
++ break;
++ migrate_dead(dead_cpu, next);
+ }
+ }
+ #endif /* CONFIG_HOTPLUG_CPU */
+@@ -5334,7 +4623,7 @@ migration_call(struct notifier_block *nf
+ kthread_bind(p, cpu);
+ /* Must be high prio: stop_machine expects to yield to it. */
+ rq = task_rq_lock(p, &flags);
+- __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1);
++ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1);
+ task_rq_unlock(rq, &flags);
+ cpu_rq(cpu)->migration_thread = p;
+ break;
+@@ -5362,9 +4651,9 @@ migration_call(struct notifier_block *nf
+ rq->migration_thread = NULL;
+ /* Idle task back to normal (off runqueue, low prio) */
+ rq = task_rq_lock(rq->idle, &flags);
+- deactivate_task(rq->idle, rq);
++ deactivate_task(rq, rq->idle, 0);
+ rq->idle->static_prio = MAX_PRIO;
+- __setscheduler(rq->idle, SCHED_NORMAL, 0);
++ __setscheduler(rq, rq->idle, SCHED_NORMAL, 0);
+ migrate_dead_tasks(cpu);
+ task_rq_unlock(rq, &flags);
+ migrate_nr_uninterruptible(rq);
+@@ -5665,483 +4954,6 @@ init_sched_build_groups(cpumask_t span,
+
+ #define SD_NODES_PER_DOMAIN 16
+
+-/*
+- * Self-tuning task migration cost measurement between source and target CPUs.
+- *
+- * This is done by measuring the cost of manipulating buffers of varying
+- * sizes. For a given buffer-size here are the steps that are taken:
+- *
+- * 1) the source CPU reads+dirties a shared buffer
+- * 2) the target CPU reads+dirties the same shared buffer
+- *
+- * We measure how long they take, in the following 4 scenarios:
+- *
+- * - source: CPU1, target: CPU2 | cost1
+- * - source: CPU2, target: CPU1 | cost2
+- * - source: CPU1, target: CPU1 | cost3
+- * - source: CPU2, target: CPU2 | cost4
+- *
+- * We then calculate the cost3+cost4-cost1-cost2 difference - this is
+- * the cost of migration.
+- *
+- * We then start off from a small buffer-size and iterate up to larger
+- * buffer sizes, in 5% steps - measuring each buffer-size separately, and
+- * doing a maximum search for the cost. (The maximum cost for a migration
+- * normally occurs when the working set size is around the effective cache
+- * size.)
+- */
+-#define SEARCH_SCOPE 2
+-#define MIN_CACHE_SIZE (64*1024U)
+-#define DEFAULT_CACHE_SIZE (5*1024*1024U)
+-#define ITERATIONS 1
+-#define SIZE_THRESH 130
+-#define COST_THRESH 130
+-
+-/*
+- * The migration cost is a function of 'domain distance'. Domain
+- * distance is the number of steps a CPU has to iterate down its
+- * domain tree to share a domain with the other CPU. The farther
+- * two CPUs are from each other, the larger the distance gets.
+- *
+- * Note that we use the distance only to cache measurement results,
+- * the distance value is not used numerically otherwise. When two
+- * CPUs have the same distance it is assumed that the migration
+- * cost is the same. (this is a simplification but quite practical)
+- */
+-#define MAX_DOMAIN_DISTANCE 32
+-
+-static unsigned long long migration_cost[MAX_DOMAIN_DISTANCE] =
+- { [ 0 ... MAX_DOMAIN_DISTANCE-1 ] =
+-/*
+- * Architectures may override the migration cost and thus avoid
+- * boot-time calibration. Unit is nanoseconds. Mostly useful for
+- * virtualized hardware:
+- */
+-#ifdef CONFIG_DEFAULT_MIGRATION_COST
+- CONFIG_DEFAULT_MIGRATION_COST
+-#else
+- -1LL
+-#endif
+-};
+-
+-/*
+- * Allow override of migration cost - in units of microseconds.
+- * E.g. migration_cost=1000,2000,3000 will set up a level-1 cost
+- * of 1 msec, level-2 cost of 2 msecs and level3 cost of 3 msecs:
+- */
+-static int __init migration_cost_setup(char *str)
+-{
+- int ints[MAX_DOMAIN_DISTANCE+1], i;
+-
+- str = get_options(str, ARRAY_SIZE(ints), ints);
+-
+- printk("#ints: %d\n", ints[0]);
+- for (i = 1; i <= ints[0]; i++) {
+- migration_cost[i-1] = (unsigned long long)ints[i]*1000;
+- printk("migration_cost[%d]: %Ld\n", i-1, migration_cost[i-1]);
+- }
+- return 1;
+-}
+-
+-__setup ("migration_cost=", migration_cost_setup);
+-
+-/*
+- * Global multiplier (divisor) for migration-cutoff values,
+- * in percentiles. E.g. use a value of 150 to get 1.5 times
+- * longer cache-hot cutoff times.
+- *
+- * (We scale it from 100 to 128 to long long handling easier.)
+- */
+-
+-#define MIGRATION_FACTOR_SCALE 128
+-
+-static unsigned int migration_factor = MIGRATION_FACTOR_SCALE;
+-
+-static int __init setup_migration_factor(char *str)
+-{
+- get_option(&str, &migration_factor);
+- migration_factor = migration_factor * MIGRATION_FACTOR_SCALE / 100;
+- return 1;
+-}
+-
+-__setup("migration_factor=", setup_migration_factor);
+-
+-/*
+- * Estimated distance of two CPUs, measured via the number of domains
+- * we have to pass for the two CPUs to be in the same span:
+- */
+-static unsigned long domain_distance(int cpu1, int cpu2)
+-{
+- unsigned long distance = 0;
+- struct sched_domain *sd;
+-
+- for_each_domain(cpu1, sd) {
+- WARN_ON(!cpu_isset(cpu1, sd->span));
+- if (cpu_isset(cpu2, sd->span))
+- return distance;
+- distance++;
+- }
+- if (distance >= MAX_DOMAIN_DISTANCE) {
+- WARN_ON(1);
+- distance = MAX_DOMAIN_DISTANCE-1;
+- }
+-
+- return distance;
+-}
+-
+-static unsigned int migration_debug;
+-
+-static int __init setup_migration_debug(char *str)
+-{
+- get_option(&str, &migration_debug);
+- return 1;
+-}
+-
+-__setup("migration_debug=", setup_migration_debug);
+-
+-/*
+- * Maximum cache-size that the scheduler should try to measure.
+- * Architectures with larger caches should tune this up during
+- * bootup. Gets used in the domain-setup code (i.e. during SMP
+- * bootup).
+- */
+-unsigned int max_cache_size;
+-
+-static int __init setup_max_cache_size(char *str)
+-{
+- get_option(&str, &max_cache_size);
+- return 1;
+-}
+-
+-__setup("max_cache_size=", setup_max_cache_size);
+-
+-/*
+- * Dirty a big buffer in a hard-to-predict (for the L2 cache) way. This
+- * is the operation that is timed, so we try to generate unpredictable
+- * cachemisses that still end up filling the L2 cache:
+- */
+-static void touch_cache(void *__cache, unsigned long __size)
+-{
+- unsigned long size = __size / sizeof(long);
+- unsigned long chunk1 = size / 3;
+- unsigned long chunk2 = 2 * size / 3;
+- unsigned long *cache = __cache;
+- int i;
+-
+- for (i = 0; i < size/6; i += 8) {
+- switch (i % 6) {
+- case 0: cache[i]++;
+- case 1: cache[size-1-i]++;
+- case 2: cache[chunk1-i]++;
+- case 3: cache[chunk1+i]++;
+- case 4: cache[chunk2-i]++;
+- case 5: cache[chunk2+i]++;
+- }
+- }
+-}
+-
+-/*
+- * Measure the cache-cost of one task migration. Returns in units of nsec.
+- */
+-static unsigned long long
+-measure_one(void *cache, unsigned long size, int source, int target)
+-{
+- cpumask_t mask, saved_mask;
+- unsigned long long t0, t1, t2, t3, cost;
+-
+- saved_mask = current->cpus_allowed;
+-
+- /*
+- * Flush source caches to RAM and invalidate them:
+- */
+- sched_cacheflush();
+-
+- /*
+- * Migrate to the source CPU:
+- */
+- mask = cpumask_of_cpu(source);
+- set_cpus_allowed(current, mask);
+- WARN_ON(smp_processor_id() != source);
+-
+- /*
+- * Dirty the working set:
+- */
+- t0 = sched_clock();
+- touch_cache(cache, size);
+- t1 = sched_clock();
+-
+- /*
+- * Migrate to the target CPU, dirty the L2 cache and access
+- * the shared buffer. (which represents the working set
+- * of a migrated task.)
+- */
+- mask = cpumask_of_cpu(target);
+- set_cpus_allowed(current, mask);
+- WARN_ON(smp_processor_id() != target);
+-
+- t2 = sched_clock();
+- touch_cache(cache, size);
+- t3 = sched_clock();
+-
+- cost = t1-t0 + t3-t2;
+-
+- if (migration_debug >= 2)
+- printk("[%d->%d]: %8Ld %8Ld %8Ld => %10Ld.\n",
+- source, target, t1-t0, t1-t0, t3-t2, cost);
+- /*
+- * Flush target caches to RAM and invalidate them:
+- */
+- sched_cacheflush();
+-
+- set_cpus_allowed(current, saved_mask);
+-
+- return cost;
+-}
+-
+-/*
+- * Measure a series of task migrations and return the average
+- * result. Since this code runs early during bootup the system
+- * is 'undisturbed' and the average latency makes sense.
+- *
+- * The algorithm in essence auto-detects the relevant cache-size,
+- * so it will properly detect different cachesizes for different
+- * cache-hierarchies, depending on how the CPUs are connected.
+- *
+- * Architectures can prime the upper limit of the search range via
+- * max_cache_size, otherwise the search range defaults to 20MB...64K.
+- */
+-static unsigned long long
+-measure_cost(int cpu1, int cpu2, void *cache, unsigned int size)
+-{
+- unsigned long long cost1, cost2;
+- int i;
+-
+- /*
+- * Measure the migration cost of 'size' bytes, over an
+- * average of 10 runs:
+- *
+- * (We perturb the cache size by a small (0..4k)
+- * value to compensate size/alignment related artifacts.
+- * We also subtract the cost of the operation done on
+- * the same CPU.)
+- */
+- cost1 = 0;
+-
+- /*
+- * dry run, to make sure we start off cache-cold on cpu1,
+- * and to get any vmalloc pagefaults in advance:
+- */
+- measure_one(cache, size, cpu1, cpu2);
+- for (i = 0; i < ITERATIONS; i++)
+- cost1 += measure_one(cache, size - i * 1024, cpu1, cpu2);
+-
+- measure_one(cache, size, cpu2, cpu1);
+- for (i = 0; i < ITERATIONS; i++)
+- cost1 += measure_one(cache, size - i * 1024, cpu2, cpu1);
+-
+- /*
+- * (We measure the non-migrating [cached] cost on both
+- * cpu1 and cpu2, to handle CPUs with different speeds)
+- */
+- cost2 = 0;
+-
+- measure_one(cache, size, cpu1, cpu1);
+- for (i = 0; i < ITERATIONS; i++)
+- cost2 += measure_one(cache, size - i * 1024, cpu1, cpu1);
+-
+- measure_one(cache, size, cpu2, cpu2);
+- for (i = 0; i < ITERATIONS; i++)
+- cost2 += measure_one(cache, size - i * 1024, cpu2, cpu2);
+-
+- /*
+- * Get the per-iteration migration cost:
+- */
+- do_div(cost1, 2 * ITERATIONS);
+- do_div(cost2, 2 * ITERATIONS);
+-
+- return cost1 - cost2;
+-}
+-
+-static unsigned long long measure_migration_cost(int cpu1, int cpu2)
+-{
+- unsigned long long max_cost = 0, fluct = 0, avg_fluct = 0;
+- unsigned int max_size, size, size_found = 0;
+- long long cost = 0, prev_cost;
+- void *cache;
+-
+- /*
+- * Search from max_cache_size*5 down to 64K - the real relevant
+- * cachesize has to lie somewhere inbetween.
+- */
+- if (max_cache_size) {
+- max_size = max(max_cache_size * SEARCH_SCOPE, MIN_CACHE_SIZE);
+- size = max(max_cache_size / SEARCH_SCOPE, MIN_CACHE_SIZE);
+- } else {
+- /*
+- * Since we have no estimation about the relevant
+- * search range
+- */
+- max_size = DEFAULT_CACHE_SIZE * SEARCH_SCOPE;
+- size = MIN_CACHE_SIZE;
+- }
+-
+- if (!cpu_online(cpu1) || !cpu_online(cpu2)) {
+- printk("cpu %d and %d not both online!\n", cpu1, cpu2);
+- return 0;
+- }
+-
+- /*
+- * Allocate the working set:
+- */
+- cache = vmalloc(max_size);
+- if (!cache) {
+- printk("could not vmalloc %d bytes for cache!\n", 2 * max_size);
+- return 1000000; /* return 1 msec on very small boxen */
+- }
+-
+- while (size <= max_size) {
+- prev_cost = cost;
+- cost = measure_cost(cpu1, cpu2, cache, size);
+-
+- /*
+- * Update the max:
+- */
+- if (cost > 0) {
+- if (max_cost < cost) {
+- max_cost = cost;
+- size_found = size;
+- }
+- }
+- /*
+- * Calculate average fluctuation, we use this to prevent
+- * noise from triggering an early break out of the loop:
+- */
+- fluct = abs(cost - prev_cost);
+- avg_fluct = (avg_fluct + fluct)/2;
+-
+- if (migration_debug)
+- printk("-> [%d][%d][%7d] %3ld.%ld [%3ld.%ld] (%ld): "
+- "(%8Ld %8Ld)\n",
+- cpu1, cpu2, size,
+- (long)cost / 1000000,
+- ((long)cost / 100000) % 10,
+- (long)max_cost / 1000000,
+- ((long)max_cost / 100000) % 10,
+- domain_distance(cpu1, cpu2),
+- cost, avg_fluct);
+-
+- /*
+- * If we iterated at least 20% past the previous maximum,
+- * and the cost has dropped by more than 20% already,
+- * (taking fluctuations into account) then we assume to
+- * have found the maximum and break out of the loop early:
+- */
+- if (size_found && (size*100 > size_found*SIZE_THRESH))
+- if (cost+avg_fluct <= 0 ||
+- max_cost*100 > (cost+avg_fluct)*COST_THRESH) {
+-
+- if (migration_debug)
+- printk("-> found max.\n");
+- break;
+- }
+- /*
+- * Increase the cachesize in 10% steps:
+- */
+- size = size * 10 / 9;
+- }
+-
+- if (migration_debug)
+- printk("[%d][%d] working set size found: %d, cost: %Ld\n",
+- cpu1, cpu2, size_found, max_cost);
+-
+- vfree(cache);
+-
+- /*
+- * A task is considered 'cache cold' if at least 2 times
+- * the worst-case cost of migration has passed.
+- *
+- * (this limit is only listened to if the load-balancing
+- * situation is 'nice' - if there is a large imbalance we
+- * ignore it for the sake of CPU utilization and
+- * processing fairness.)
+- */
+- return 2 * max_cost * migration_factor / MIGRATION_FACTOR_SCALE;
+-}
+-
+-static void calibrate_migration_costs(const cpumask_t *cpu_map)
+-{
+- int cpu1 = -1, cpu2 = -1, cpu, orig_cpu = raw_smp_processor_id();
+- unsigned long j0, j1, distance, max_distance = 0;
+- struct sched_domain *sd;
+-
+- j0 = jiffies;
+-
+- /*
+- * First pass - calculate the cacheflush times:
+- */
+- for_each_cpu_mask(cpu1, *cpu_map) {
+- for_each_cpu_mask(cpu2, *cpu_map) {
+- if (cpu1 == cpu2)
+- continue;
+- distance = domain_distance(cpu1, cpu2);
+- max_distance = max(max_distance, distance);
+- /*
+- * No result cached yet?
+- */
+- if (migration_cost[distance] == -1LL)
+- migration_cost[distance] =
+- measure_migration_cost(cpu1, cpu2);
+- }
+- }
+- /*
+- * Second pass - update the sched domain hierarchy with
+- * the new cache-hot-time estimations:
+- */
+- for_each_cpu_mask(cpu, *cpu_map) {
+- distance = 0;
+- for_each_domain(cpu, sd) {
+- sd->cache_hot_time = migration_cost[distance];
+- distance++;
+- }
+- }
+- /*
+- * Print the matrix:
+- */
+- if (migration_debug)
+- printk("migration: max_cache_size: %d, cpu: %d MHz:\n",
+- max_cache_size,
+-#ifdef CONFIG_X86
+- cpu_khz/1000
+-#else
+- -1
+-#endif
+- );
+- if (system_state == SYSTEM_BOOTING && num_online_cpus() > 1) {
+- printk("migration_cost=");
+- for (distance = 0; distance <= max_distance; distance++) {
+- if (distance)
+- printk(",");
+- printk("%ld", (long)migration_cost[distance] / 1000);
+- }
+- printk("\n");
+- }
+- j1 = jiffies;
+- if (migration_debug)
+- printk("migration: %ld seconds\n", (j1-j0) / HZ);
+-
+- /*
+- * Move back to the original CPU. NUMA-Q gets confused
+- * if we migrate to another quad during bootup.
+- */
+- if (raw_smp_processor_id() != orig_cpu) {
+- cpumask_t mask = cpumask_of_cpu(orig_cpu),
+- saved_mask = current->cpus_allowed;
+-
+- set_cpus_allowed(current, mask);
+- set_cpus_allowed(current, saved_mask);
+- }
+-}
+-
+ #ifdef CONFIG_NUMA
+
+ /**
+@@ -6671,10 +5483,6 @@ static int build_sched_domains(const cpu
+ #endif
+ cpu_attach_domain(sd, i);
+ }
+- /*
+- * Tune cache-hot values:
+- */
+- calibrate_migration_costs(cpu_map);
+
+ return 0;
+
+@@ -6875,6 +5683,16 @@ void __init sched_init_smp(void)
+ /* Move init over to a non-isolated CPU */
+ if (set_cpus_allowed(current, non_isolated_cpus) < 0)
+ BUG();
++ /*
++ * Increase the granularity value when there are more CPUs,
++ * because with more CPUs the 'effective latency' as visible
++ * to users decreases. But the relationship is not linear,
++ * so pick a second-best guess by going with the log2 of the
++ * number of CPUs.
++ *
++ * This idea comes from the SD scheduler of Con Kolivas:
++ */
++ sysctl_sched_granularity *= 1 + ilog2(num_online_cpus());
+ }
+ #else
+ void __init sched_init_smp(void)
+@@ -6894,7 +5712,14 @@ int in_sched_functions(unsigned long add
+
+ void __init sched_init(void)
+ {
+- int i, j, k;
++ int i, j;
++
++ current->sched_class = &fair_sched_class;
++ /*
++ * Link up the scheduling class hierarchy:
++ */
++ rt_sched_class.next = &fair_sched_class;
++ fair_sched_class.next = NULL;
+
+ for_each_possible_cpu(i) {
+ struct prio_array *array;
+@@ -6904,14 +5729,13 @@ void __init sched_init(void)
+ spin_lock_init(&rq->lock);
+ lockdep_set_class(&rq->lock, &rq->rq_lock_key);
+ rq->nr_running = 0;
+- rq->active = rq->arrays;
+- rq->expired = rq->arrays + 1;
+- rq->best_expired_prio = MAX_PRIO;
++ rq->tasks_timeline = RB_ROOT;
++ rq->clock = rq->fair_clock = 1;
+
++ for (j = 0; j < CPU_LOAD_IDX_MAX; j++)
++ rq->cpu_load[j] = 0;
+ #ifdef CONFIG_SMP
+ rq->sd = NULL;
+- for (j = 1; j < 3; j++)
+- rq->cpu_load[j] = 0;
+ rq->active_balance = 0;
+ rq->push_cpu = 0;
+ rq->cpu = i;
+@@ -6920,15 +5744,13 @@ void __init sched_init(void)
+ #endif
+ atomic_set(&rq->nr_iowait, 0);
+
+- for (j = 0; j < 2; j++) {
+- array = rq->arrays + j;
+- for (k = 0; k < MAX_PRIO; k++) {
+- INIT_LIST_HEAD(array->queue + k);
+- __clear_bit(k, array->bitmap);
+- }
+- // delimiter for bitsearch
+- __set_bit(MAX_PRIO, array->bitmap);
++ array = &rq->active;
++ for (j = 0; j < MAX_RT_PRIO; j++) {
++ INIT_LIST_HEAD(array->queue + j);
++ __clear_bit(j, array->bitmap);
+ }
++ /* delimiter for bitsearch: */
++ __set_bit(MAX_RT_PRIO, array->bitmap);
+ }
+
+ set_load_weight(&init_task);
+@@ -6984,28 +5806,54 @@ EXPORT_SYMBOL(__might_sleep);
+ #ifdef CONFIG_MAGIC_SYSRQ
+ void normalize_rt_tasks(void)
+ {
+- struct prio_array *array;
+ struct task_struct *p;
+ unsigned long flags;
+ struct rq *rq;
++ int on_rq;
+
+ read_lock_irq(&tasklist_lock);
+ for_each_process(p) {
+- if (!rt_task(p))
++ p->fair_key = 0;
++ p->wait_runtime = 0;
++ p->wait_start_fair = 0;
++ p->wait_start = 0;
++ p->exec_start = 0;
++ p->sleep_start = 0;
++ p->block_start = 0;
++ task_rq(p)->fair_clock = 0;
++ task_rq(p)->clock = 0;
++
++ if (!rt_task(p)) {
++ /*
++ * Renice negative nice level userspace
++ * tasks back to 0:
++ */
++ if (TASK_NICE(p) < 0 && p->mm)
++ set_user_nice(p, 0);
+ continue;
++ }
+
+ spin_lock_irqsave(&p->pi_lock, flags);
+ rq = __task_rq_lock(p);
++#ifdef CONFIG_SMP
++ /*
++ * Do not touch the migration thread:
++ */
++ if (p == rq->migration_thread)
++ goto out_unlock;
++#endif
+
+- array = p->array;
+- if (array)
+- deactivate_task(p, task_rq(p));
+- __setscheduler(p, SCHED_NORMAL, 0);
+- if (array) {
+- __activate_task(p, task_rq(p));
++ on_rq = p->on_rq;
++ if (on_rq)
++ deactivate_task(task_rq(p), p, 0);
++ __setscheduler(rq, p, SCHED_NORMAL, 0);
++ if (on_rq) {
++ activate_task(task_rq(p), p, 0);
+ resched_task(rq->curr);
+ }
+-
++#ifdef CONFIG_SMP
++ out_unlock:
++#endif
+ __task_rq_unlock(rq);
+ spin_unlock_irqrestore(&p->pi_lock, flags);
+ }
+Index: linux-cfs-2.6.20.8.q/kernel/sched_debug.c
+===================================================================
+--- /dev/null
++++ linux-cfs-2.6.20.8.q/kernel/sched_debug.c
+@@ -0,0 +1,161 @@
++/*
++ * kernel/time/sched_debug.c
++ *
++ * Print the CFS rbtree
++ *
++ * Copyright(C) 2007, Red Hat, Inc., Ingo Molnar
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/proc_fs.h>
++#include <linux/module.h>
++#include <linux/spinlock.h>
++#include <linux/sched.h>
++#include <linux/seq_file.h>
++#include <linux/kallsyms.h>
++#include <linux/ktime.h>
++
++#include <asm/uaccess.h>
++
++typedef void (*print_fn_t)(struct seq_file *m, unsigned int *classes);
++
++/*
++ * This allows printing both to /proc/sched_debug and
++ * to the console
++ */
++#define SEQ_printf(m, x...) \
++ do { \
++ if (m) \
++ seq_printf(m, x); \
++ else \
++ printk(x); \
++ } while (0)
++
++static void
++print_task(struct seq_file *m, struct rq *rq, struct task_struct *p, u64 now)
++{
++ if (rq->curr == p)
++ SEQ_printf(m, "R");
++ else
++ SEQ_printf(m, " ");
++
++ SEQ_printf(m, "%14s %5d %15Ld %13Ld %13Ld %9Ld %5d "
++ "%15Ld %15Ld %15Ld\n",
++ p->comm, p->pid,
++ (long long)p->fair_key, (long long)p->fair_key - rq->fair_clock,
++ (long long)p->wait_runtime,
++ (long long)p->nr_switches,
++ p->prio,
++ (long long)p->wait_start_fair - rq->fair_clock,
++ (long long)p->sum_exec_runtime,
++ (long long)p->sum_wait_runtime);
++}
++
++static void print_rq(struct seq_file *m, struct rq *rq, u64 now)
++{
++ struct task_struct *p;
++ struct rb_node *curr;
++
++ SEQ_printf(m,
++ "\nrunnable tasks:\n"
++ " task PID tree-key delta waiting"
++ " switches prio wstart-fair"
++ " sum-exec sum-wait\n"
++ "-----------------------------------------------------------------"
++ "--------------------------------"
++ "--------------------------------\n");
++
++ curr = first_fair(rq);
++ while (curr) {
++ p = rb_entry(curr, struct task_struct, run_node);
++ print_task(m, rq, p, now);
++
++ curr = rb_next(curr);
++ }
++}
++
++static void print_cpu(struct seq_file *m, int cpu, u64 now)
++{
++ struct rq *rq = &per_cpu(runqueues, cpu);
++
++ SEQ_printf(m, "\ncpu: %d\n", cpu);
++#define P(x) \
++ SEQ_printf(m, " .%-22s: %Lu\n", #x, (unsigned long long)(rq->x))
++
++ P(nr_running);
++ P(raw_weighted_load);
++ P(nr_switches);
++ P(nr_load_updates);
++ P(nr_uninterruptible);
++ P(next_balance);
++ P(curr->pid);
++ P(clock);
++ P(prev_clock_raw);
++ P(clock_warps);
++ P(clock_unstable_events);
++ P(clock_max_delta);
++ rq->clock_max_delta = 0;
++ P(fair_clock);
++ P(prev_fair_clock);
++ P(exec_clock);
++ P(prev_exec_clock);
++ P(wait_runtime);
++ P(cpu_load[0]);
++ P(cpu_load[1]);
++ P(cpu_load[2]);
++ P(cpu_load[3]);
++ P(cpu_load[4]);
++#undef P
++
++ print_rq(m, rq, now);
++}
++
++static int sched_debug_show(struct seq_file *m, void *v)
++{
++ u64 now = ktime_to_ns(ktime_get());
++ int cpu;
++
++ SEQ_printf(m, "Sched Debug Version: v0.02\n");
++ SEQ_printf(m, "now at %Lu nsecs\n", (unsigned long long)now);
++
++ for_each_online_cpu(cpu)
++ print_cpu(m, cpu, now);
++
++ SEQ_printf(m, "\n");
++
++ return 0;
++}
++
++void sysrq_sched_debug_show(void)
++{
++ sched_debug_show(NULL, NULL);
++}
++
++static int sched_debug_open(struct inode *inode, struct file *filp)
++{
++ return single_open(filp, sched_debug_show, NULL);
++}
++
++static struct file_operations sched_debug_fops = {
++ .open = sched_debug_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = seq_release,
++};
++
++static int __init init_sched_debug_procfs(void)
++{
++ struct proc_dir_entry *pe;
++
++ pe = create_proc_entry("sched_debug", 0644, NULL);
++ if (!pe)
++ return -ENOMEM;
++
++ pe->proc_fops = &sched_debug_fops;
++
++ return 0;
++}
++__initcall(init_sched_debug_procfs);
+Index: linux-cfs-2.6.20.8.q/kernel/sched_fair.c
+===================================================================
+--- /dev/null
++++ linux-cfs-2.6.20.8.q/kernel/sched_fair.c
+@@ -0,0 +1,618 @@
++/*
++ * Completely Fair Scheduling (CFS) Class (SCHED_NORMAL/SCHED_BATCH)
++ */
++
++/*
++ * Preemption granularity:
++ * (default: 2 msec, units: nanoseconds)
++ *
++ * NOTE: this granularity value is not the same as the concept of
++ * 'timeslice length' - timeslices in CFS will typically be somewhat
++ * larger than this value. (to see the precise effective timeslice
++ * length of your workload, run vmstat and monitor the context-switches
++ * field)
++ *
++ * On SMP systems the value of this is multiplied by the log2 of the
++ * number of CPUs. (i.e. factor 2x on 2-way systems, 3x on 4-way
++ * systems, 4x on 8-way systems, 5x on 16-way systems, etc.)
++ */
++unsigned int sysctl_sched_granularity __read_mostly = 2000000;
++
++unsigned int sysctl_sched_sleep_history_max __read_mostly = 2000000000;
++
++unsigned int sysctl_sched_load_smoothing = 2;
++
++/*
++ * Wake-up granularity.
++ * (default: 1 msec, units: nanoseconds)
++ *
++ * This option delays the preemption effects of decoupled workloads
++ * and reduces their over-scheduling. Synchronous workloads will still
++ * have immediate wakeup/sleep latencies.
++ */
++unsigned int sysctl_sched_wakeup_granularity __read_mostly = 0;
++
++
++extern struct sched_class fair_sched_class;
++
++/**************************************************************/
++/* Scheduling class tree data structure manipulation methods:
++ */
++
++/*
++ * Enqueue a task into the rb-tree:
++ */
++static inline void __enqueue_task_fair(struct rq *rq, struct task_struct *p)
++{
++ struct rb_node **link = &rq->tasks_timeline.rb_node;
++ struct rb_node *parent = NULL;
++ struct task_struct *entry;
++ s64 key = p->fair_key;
++ int leftmost = 1;
++
++ /*
++ * Find the right place in the rbtree:
++ */
++ while (*link) {
++ parent = *link;
++ entry = rb_entry(parent, struct task_struct, run_node);
++ /*
++ * We dont care about collisions. Nodes with
++ * the same key stay together.
++ */
++ if (key < entry->fair_key) {
++ link = &parent->rb_left;
++ } else {
++ link = &parent->rb_right;
++ leftmost = 0;
++ }
++ }
++
++ /*
++ * Maintain a cache of leftmost tree entries (it is frequently
++ * used):
++ */
++ if (leftmost)
++ rq->rb_leftmost = &p->run_node;
++
++ rb_link_node(&p->run_node, parent, link);
++ rb_insert_color(&p->run_node, &rq->tasks_timeline);
++}
++
++static inline void __dequeue_task_fair(struct rq *rq, struct task_struct *p)
++{
++ if (rq->rb_leftmost == &p->run_node)
++ rq->rb_leftmost = NULL;
++ rb_erase(&p->run_node, &rq->tasks_timeline);
++}
++
++static inline struct rb_node * first_fair(struct rq *rq)
++{
++ if (rq->rb_leftmost)
++ return rq->rb_leftmost;
++ /* Cache the value returned by rb_first() */
++ rq->rb_leftmost = rb_first(&rq->tasks_timeline);
++ return rq->rb_leftmost;
++}
++
++static struct task_struct * __pick_next_task_fair(struct rq *rq)
++{
++ return rb_entry(first_fair(rq), struct task_struct, run_node);
++}
++
++/**************************************************************/
++/* Scheduling class statistics methods:
++ */
++
++static inline u64
++rescale_load(struct task_struct *p, u64 value)
++{
++ int load_shift = p->load_shift;
++
++ if (load_shift == SCHED_LOAD_SHIFT)
++ return value;
++
++ return (value << load_shift) >> SCHED_LOAD_SHIFT;
++}
++
++static u64
++niced_granularity(struct rq *rq, struct task_struct *curr,
++ unsigned long granularity)
++{
++ return rescale_load(curr, granularity);
++}
++
++/*
++ * Update the current task's runtime statistics. Skip current tasks that
++ * are not in our scheduling class.
++ */
++static inline void update_curr(struct rq *rq, u64 now)
++{
++ u64 delta_exec, delta_fair, delta_mine;
++ struct task_struct *curr = rq->curr;
++ unsigned long load;
++
++ if (curr->sched_class != &fair_sched_class || curr == rq->idle
++ || !curr->on_rq)
++ return;
++ /*
++ * Get the amount of time the current task was running
++ * since the last time we changed raw_weighted_load:
++ */
++ delta_exec = now - curr->exec_start;
++ if (unlikely(delta_exec > curr->exec_max))
++ curr->exec_max = delta_exec;
++
++ if (sysctl_sched_load_smoothing) {
++ delta_fair = delta_exec << SCHED_LOAD_SHIFT;
++ do_div(delta_fair, rq->raw_weighted_load);
++
++ load = rq->cpu_load[CPU_LOAD_IDX_MAX-1] + 1;
++ if (sysctl_sched_load_smoothing & 2)
++ load = max(load, rq->raw_weighted_load);
++
++ delta_mine = delta_exec << curr->load_shift;
++ do_div(delta_mine, load);
++ } else {
++ delta_fair = delta_exec << SCHED_LOAD_SHIFT;
++ do_div(delta_fair, rq->raw_weighted_load);
++
++ delta_mine = delta_exec << curr->load_shift;
++ do_div(delta_mine, rq->raw_weighted_load);
++ }
++
++ curr->sum_exec_runtime += delta_exec;
++ curr->exec_start = now;
++
++ rq->fair_clock += delta_fair;
++ rq->exec_clock += delta_exec;
++
++ /*
++ * We executed delta_exec amount of time on the CPU,
++ * but we were only entitled to delta_mine amount of
++ * time during that period (if nr_running == 1 then
++ * the two values are equal):
++ */
++
++ /*
++ * Task already marked for preemption, do not burden
++ * it with the cost of not having left the CPU yet.
++ */
++ if (unlikely(test_tsk_thread_flag(curr, TIF_NEED_RESCHED)))
++ goto out_nowait;
++
++ curr->wait_runtime -= delta_exec - delta_mine;
++ if (unlikely(curr->wait_runtime < curr->min_wait_runtime))
++ curr->min_wait_runtime = curr->wait_runtime;
++
++ rq->wait_runtime -= delta_exec - delta_mine;
++out_nowait:
++ ;
++}
++
++static inline void
++update_stats_wait_start(struct rq *rq, struct task_struct *p, u64 now)
++{
++ p->wait_start_fair = rq->fair_clock;
++ p->wait_start = now;
++}
++
++/*
++ * Task is being enqueued - update stats:
++ */
++static inline void
++update_stats_enqueue(struct rq *rq, struct task_struct *p, u64 now)
++{
++ s64 key;
++
++ /*
++ * Update the fair clock.
++ */
++ update_curr(rq, now);
++
++ /*
++ * Are we enqueueing a waiting task? (for current tasks
++ * a dequeue/enqueue event is a NOP)
++ */
++ if (p != rq->curr)
++ update_stats_wait_start(rq, p, now);
++ /*
++ * Update the key:
++ */
++ key = rq->fair_clock;
++
++ /*
++ * Optimize the common nice 0 case:
++ */
++ if (likely(p->load_shift == SCHED_LOAD_SHIFT)) {
++ key -= p->wait_runtime;
++ } else {
++ unsigned int delta_bits;
++
++ if (p->load_shift < SCHED_LOAD_SHIFT) {
++ /* plus-reniced tasks get helped: */
++ delta_bits = SCHED_LOAD_SHIFT - p->load_shift;
++ key -= p->wait_runtime << delta_bits;
++ } else {
++ /* negative-reniced tasks get hurt: */
++ delta_bits = p->load_shift - SCHED_LOAD_SHIFT;
++ key -= p->wait_runtime >> delta_bits;
++ }
++ }
++
++ p->fair_key = key;
++}
++
++/*
++ * Note: must be called with a freshly updated rq->fair_clock.
++ */
++static inline void
++update_stats_wait_end(struct rq *rq, struct task_struct *p, u64 now)
++{
++ u64 delta, fair_delta, delta_wait;
++
++ delta_wait = now - p->wait_start;
++ if (unlikely(delta_wait > p->wait_max))
++ p->wait_max = delta_wait;
++
++ delta = rq->fair_clock - p->wait_start_fair;
++ fair_delta = rescale_load(p, delta);
++
++ p->sum_wait_runtime += fair_delta;
++ rq->wait_runtime += fair_delta;
++ p->wait_runtime += fair_delta;
++
++ p->wait_start_fair = 0;
++ p->wait_start = 0;
++}
++
++static inline void
++update_stats_dequeue(struct rq *rq, struct task_struct *p, u64 now)
++{
++ update_curr(rq, now);
++ /*
++ * Mark the end of the wait period if dequeueing a
++ * waiting task:
++ */
++ if (p != rq->curr)
++ update_stats_wait_end(rq, p, now);
++}
++
++/*
++ * We are picking a new current task - update its stats:
++ */
++static inline void
++update_stats_curr_start(struct rq *rq, struct task_struct *p, u64 now)
++{
++ /*
++ * We are starting a new run period:
++ */
++ p->exec_start = now;
++}
++
++/*
++ * We are descheduling a task - update its stats:
++ */
++static inline void
++update_stats_curr_end(struct rq *rq, struct task_struct *p, u64 now)
++{
++ update_curr(rq, now);
++
++ p->exec_start = 0;
++}
++
++/**************************************************************/
++/* Scheduling class queueing methods:
++ */
++
++/*
++ * The enqueue_task method is called before nr_running is
++ * increased. Here we update the fair scheduling stats and
++ * then put the task into the rbtree:
++ */
++static void
++enqueue_task_fair(struct rq *rq, struct task_struct *p, int wakeup, u64 now)
++{
++ unsigned long max_delta = sysctl_sched_sleep_history_max, factor;
++ u64 delta = 0;
++
++ if (wakeup) {
++ if (p->sleep_start) {
++ delta = now - p->sleep_start;
++ if ((s64)delta < 0)
++ delta = 0;
++
++ if (unlikely(delta > p->sleep_max))
++ p->sleep_max = delta;
++
++ p->sleep_start = 0;
++ }
++ if (p->block_start) {
++ delta = now - p->block_start;
++ if ((s64)delta < 0)
++ delta = 0;
++
++ if (unlikely(delta > p->block_max))
++ p->block_max = delta;
++
++ p->block_start = 0;
++ }
++
++ /*
++ * We are after a wait period, decay the
++ * wait_runtime value:
++ */
++ if (max_delta != -1 && max_delta != -2) {
++ if (delta < max_delta) {
++ factor = 1024 * (max_delta -
++ (unsigned long)delta) / max_delta;
++ p->wait_runtime *= (int)factor;
++ p->wait_runtime /= 1024;
++ } else {
++ p->wait_runtime = 0;
++ }
++ }
++ }
++ update_stats_enqueue(rq, p, now);
++ if (wakeup && max_delta == -2)
++ p->wait_runtime = 0;
++ __enqueue_task_fair(rq, p);
++}
++
++/*
++ * The dequeue_task method is called before nr_running is
++ * decreased. We remove the task from the rbtree and
++ * update the fair scheduling stats:
++ */
++static void
++dequeue_task_fair(struct rq *rq, struct task_struct *p, int sleep, u64 now)
++{
++ update_stats_dequeue(rq, p, now);
++ if (sleep) {
++ if (p->state & TASK_INTERRUPTIBLE)
++ p->sleep_start = now;
++ if (p->state & TASK_UNINTERRUPTIBLE)
++ p->block_start = now;
++ }
++ __dequeue_task_fair(rq, p);
++}
++
++/*
++ * sched_yield() support is very simple via the rbtree: we just
++ * dequeue the task and move it after the next task, which
++ * causes tasks to roundrobin.
++ */
++static void
++yield_task_fair(struct rq *rq, struct task_struct *p, struct task_struct *p_to)
++{
++ struct rb_node *curr, *next, *first;
++ struct task_struct *p_next;
++ s64 yield_key;
++ u64 now;
++
++ /*
++ * yield-to support: if we are on the same runqueue then
++ * give half of our wait_runtime (if it's positive) to the other task:
++ */
++ if (p_to && p->wait_runtime > 0) {
++ p_to->wait_runtime += p->wait_runtime >> 1;
++ p->wait_runtime >>= 1;
++ }
++ curr = &p->run_node;
++ first = first_fair(rq);
++ /*
++ * Move this task to the second place in the tree:
++ */
++ if (unlikely(curr != first)) {
++ next = first;
++ } else {
++ next = rb_next(curr);
++ /*
++ * We were the last one already - nothing to do, return
++ * and reschedule:
++ */
++ if (unlikely(!next))
++ return;
++ }
++
++ p_next = rb_entry(next, struct task_struct, run_node);
++ /*
++ * Minimally necessary key value to be the second in the tree:
++ */
++ yield_key = p_next->fair_key + 1;
++
++ now = __rq_clock(rq);
++ dequeue_task_fair(rq, p, 0, now);
++ p->on_rq = 0;
++
++ /*
++ * Only update the key if we need to move more backwards
++ * than the minimally necessary position to be the second:
++ */
++ if (p->fair_key < yield_key)
++ p->fair_key = yield_key;
++
++ __enqueue_task_fair(rq, p);
++ p->on_rq = 1;
++}
++
++/*
++ * Preempt the current task with a newly woken task if needed:
++ */
++static inline void
++__check_preempt_curr_fair(struct rq *rq, struct task_struct *p,
++ struct task_struct *curr, unsigned long granularity)
++{
++ s64 __delta = curr->fair_key - p->fair_key;
++
++ /*
++ * Take scheduling granularity into account - do not
++ * preempt the current task unless the best task has
++ * a larger than sched_granularity fairness advantage:
++ */
++ if (__delta > niced_granularity(rq, curr, granularity))
++ resched_task(curr);
++}
++
++/*
++ * Preempt the current task with a newly woken task if needed:
++ */
++static void check_preempt_curr_fair(struct rq *rq, struct task_struct *p)
++{
++ struct task_struct *curr = rq->curr;
++
++ if ((curr == rq->idle) || rt_prio(p->prio)) {
++ resched_task(curr);
++ } else {
++ __check_preempt_curr_fair(rq, p, curr,
++ sysctl_sched_granularity);
++ }
++}
++
++static struct task_struct * pick_next_task_fair(struct rq *rq, u64 now)
++{
++ struct task_struct *p = __pick_next_task_fair(rq);
++
++ /*
++ * Any task has to be enqueued before it get to execute on
++ * a CPU. So account for the time it spent waiting on the
++ * runqueue. (note, here we rely on pick_next_task() having
++ * done a put_prev_task_fair() shortly before this, which
++ * updated rq->fair_clock - used by update_stats_wait_end())
++ */
++ update_stats_wait_end(rq, p, now);
++ update_stats_curr_start(rq, p, now);
++
++ return p;
++}
++
++/*
++ * Account for a descheduled task:
++ */
++static void put_prev_task_fair(struct rq *rq, struct task_struct *prev, u64 now)
++{
++ if (prev == rq->idle)
++ return;
++
++ update_stats_curr_end(rq, prev, now);
++ /*
++ * If the task is still waiting for the CPU (it just got
++ * preempted), start the wait period:
++ */
++ if (prev->on_rq)
++ update_stats_wait_start(rq, prev, now);
++}
++
++/**************************************************************/
++/* Fair scheduling class load-balancing methods:
++ */
++
++/*
++ * Load-balancing iterator. Note: while the runqueue stays locked
++ * during the whole iteration, the current task might be
++ * dequeued so the iterator has to be dequeue-safe. Here we
++ * achieve that by always pre-iterating before returning
++ * the current task:
++ */
++static struct task_struct * load_balance_start_fair(struct rq *rq)
++{
++ struct rb_node *first = first_fair(rq);
++ struct task_struct *p;
++
++ if (!first)
++ return NULL;
++
++ p = rb_entry(first, struct task_struct, run_node);
++
++ rq->rb_load_balance_curr = rb_next(first);
++
++ return p;
++}
++
++static struct task_struct * load_balance_next_fair(struct rq *rq)
++{
++ struct rb_node *curr = rq->rb_load_balance_curr;
++ struct task_struct *p;
++
++ if (!curr)
++ return NULL;
++
++ p = rb_entry(curr, struct task_struct, run_node);
++ rq->rb_load_balance_curr = rb_next(curr);
++
++ return p;
++}
++
++/*
++ * scheduler tick hitting a task of our scheduling class:
++ */
++static void task_tick_fair(struct rq *rq, struct task_struct *curr)
++{
++ struct task_struct *next;
++ u64 now = __rq_clock(rq);
++
++ /*
++ * Dequeue and enqueue the task to update its
++ * position within the tree:
++ */
++ dequeue_task_fair(rq, curr, 0, now);
++ curr->on_rq = 0;
++ enqueue_task_fair(rq, curr, 0, now);
++ curr->on_rq = 1;
++
++ /*
++ * Reschedule if another task tops the current one.
++ */
++ next = __pick_next_task_fair(rq);
++ if (next == curr)
++ return;
++
++ if ((curr == rq->idle) || (rt_prio(next->prio) &&
++ (next->prio < curr->prio)))
++ resched_task(curr);
++ else
++ __check_preempt_curr_fair(rq, next, curr,
++ sysctl_sched_granularity);
++}
++
++/*
++ * Share the fairness runtime between parent and child, thus the
++ * total amount of pressure for CPU stays equal - new tasks
++ * get a chance to run but frequent forkers are not allowed to
++ * monopolize the CPU. Note: the parent runqueue is locked,
++ * the child is not running yet.
++ */
++static void task_new_fair(struct rq *rq, struct task_struct *p)
++{
++ sched_info_queued(p);
++ update_stats_enqueue(rq, p, rq_clock(rq));
++ /*
++ * Child runs first: we let it run before the parent
++ * until it reschedules once. We set up the key so that
++ * it will preempt the parent:
++ */
++ p->fair_key = current->fair_key - niced_granularity(rq, rq->curr,
++ sysctl_sched_granularity) - 1;
++ __enqueue_task_fair(rq, p);
++ p->on_rq = 1;
++ inc_nr_running(p, rq);
++}
++
++/*
++ * All the scheduling class methods:
++ */
++struct sched_class fair_sched_class __read_mostly = {
++ .enqueue_task = enqueue_task_fair,
++ .dequeue_task = dequeue_task_fair,
++ .yield_task = yield_task_fair,
++
++ .check_preempt_curr = check_preempt_curr_fair,
++
++ .pick_next_task = pick_next_task_fair,
++ .put_prev_task = put_prev_task_fair,
++
++ .load_balance_start = load_balance_start_fair,
++ .load_balance_next = load_balance_next_fair,
++ .task_tick = task_tick_fair,
++ .task_new = task_new_fair,
++};
+Index: linux-cfs-2.6.20.8.q/kernel/sched_rt.c
+===================================================================
+--- /dev/null
++++ linux-cfs-2.6.20.8.q/kernel/sched_rt.c
+@@ -0,0 +1,184 @@
++/*
++ * Real-Time Scheduling Class (mapped to the SCHED_FIFO and SCHED_RR
++ * policies)
++ */
++
++static void
++enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup, u64 now)
++{
++ struct prio_array *array = &rq->active;
++
++ list_add_tail(&p->run_list, array->queue + p->prio);
++ __set_bit(p->prio, array->bitmap);
++}
++
++/*
++ * Adding/removing a task to/from a priority array:
++ */
++static void
++dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep, u64 now)
++{
++ struct prio_array *array = &rq->active;
++
++ list_del(&p->run_list);
++ if (list_empty(array->queue + p->prio))
++ __clear_bit(p->prio, array->bitmap);
++}
++
++/*
++ * Put task to the end of the run list without the overhead of dequeue
++ * followed by enqueue.
++ */
++static void requeue_task_rt(struct rq *rq, struct task_struct *p)
++{
++ struct prio_array *array = &rq->active;
++
++ list_move_tail(&p->run_list, array->queue + p->prio);
++}
++
++static void
++yield_task_rt(struct rq *rq, struct task_struct *p, struct task_struct *p_to)
++{
++ requeue_task_rt(rq, p);
++}
++
++/*
++ * Preempt the current task with a newly woken task if needed:
++ */
++static void check_preempt_curr_rt(struct rq *rq, struct task_struct *p)
++{
++ if (p->prio < rq->curr->prio)
++ resched_task(rq->curr);
++}
++
++static struct task_struct * pick_next_task_rt(struct rq *rq, u64 now)
++{
++ struct prio_array *array = &rq->active;
++ struct list_head *queue;
++ int idx;
++
++ idx = sched_find_first_bit(array->bitmap);
++ if (idx >= MAX_RT_PRIO)
++ return NULL;
++
++ queue = array->queue + idx;
++ return list_entry(queue->next, struct task_struct, run_list);
++}
++
++/*
++ * No accounting done when RT tasks are descheduled:
++ */
++static void put_prev_task_rt(struct rq *rq, struct task_struct *p, u64 now)
++{
++}
++
++/*
++ * Load-balancing iterator. Note: while the runqueue stays locked
++ * during the whole iteration, the current task might be
++ * dequeued so the iterator has to be dequeue-safe. Here we
++ * achieve that by always pre-iterating before returning
++ * the current task:
++ */
++static struct task_struct * load_balance_start_rt(struct rq *rq)
++{
++ struct prio_array *array = &rq->active;
++ struct list_head *head, *curr;
++ struct task_struct *p;
++ int idx;
++
++ idx = sched_find_first_bit(array->bitmap);
++ if (idx >= MAX_RT_PRIO)
++ return NULL;
++
++ head = array->queue + idx;
++ curr = head->prev;
++
++ p = list_entry(curr, struct task_struct, run_list);
++
++ curr = curr->prev;
++
++ rq->rt_load_balance_idx = idx;
++ rq->rt_load_balance_head = head;
++ rq->rt_load_balance_curr = curr;
++
++ return p;
++}
++
++static struct task_struct * load_balance_next_rt(struct rq *rq)
++{
++ struct prio_array *array = &rq->active;
++ struct list_head *head, *curr;
++ struct task_struct *p;
++ int idx;
++
++ idx = rq->rt_load_balance_idx;
++ head = rq->rt_load_balance_head;
++ curr = rq->rt_load_balance_curr;
++
++ /*
++ * If we arrived back to the head again then
++ * iterate to the next queue (if any):
++ */
++ if (unlikely(head == curr)) {
++ int next_idx = find_next_bit(array->bitmap, MAX_RT_PRIO, idx+1);
++
++ if (next_idx >= MAX_RT_PRIO)
++ return NULL;
++
++ idx = next_idx;
++ head = array->queue + idx;
++ curr = head->prev;
++
++ rq->rt_load_balance_idx = idx;
++ rq->rt_load_balance_head = head;
++ }
++
++ p = list_entry(curr, struct task_struct, run_list);
++
++ curr = curr->prev;
++
++ rq->rt_load_balance_curr = curr;
++
++ return p;
++}
++
++static void task_tick_rt(struct rq *rq, struct task_struct *p)
++{
++ /*
++ * RR tasks need a special form of timeslice management.
++ * FIFO tasks have no timeslices.
++ */
++ if ((p->policy == SCHED_RR) && !--p->time_slice) {
++ p->time_slice = static_prio_timeslice(p->static_prio);
++ set_tsk_need_resched(p);
++
++ /* put it at the end of the queue: */
++ requeue_task_rt(rq, p);
++ }
++}
++
++/*
++ * No parent/child timeslice management necessary for RT tasks,
++ * just activate them:
++ */
++static void task_new_rt(struct rq *rq, struct task_struct *p)
++{
++ activate_task(rq, p, 1);
++}
++
++static struct sched_class rt_sched_class __read_mostly = {
++ .enqueue_task = enqueue_task_rt,
++ .dequeue_task = dequeue_task_rt,
++ .yield_task = yield_task_rt,
++
++ .check_preempt_curr = check_preempt_curr_rt,
++
++ .pick_next_task = pick_next_task_rt,
++ .put_prev_task = put_prev_task_rt,
++
++ .load_balance_start = load_balance_start_rt,
++ .load_balance_next = load_balance_next_rt,
++
++ .task_tick = task_tick_rt,
++ .task_new = task_new_rt,
++};
+Index: linux-cfs-2.6.20.8.q/kernel/sched_stats.h
+===================================================================
+--- /dev/null
++++ linux-cfs-2.6.20.8.q/kernel/sched_stats.h
+@@ -0,0 +1,235 @@
++
++#ifdef CONFIG_SCHEDSTATS
++/*
++ * bump this up when changing the output format or the meaning of an existing
++ * format, so that tools can adapt (or abort)
++ */
++#define SCHEDSTAT_VERSION 14
++
++static int show_schedstat(struct seq_file *seq, void *v)
++{
++ int cpu;
++
++ seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION);
++ seq_printf(seq, "timestamp %lu\n", jiffies);
++ for_each_online_cpu(cpu) {
++ struct rq *rq = cpu_rq(cpu);
++#ifdef CONFIG_SMP
++ struct sched_domain *sd;
++ int dcnt = 0;
++#endif
++
++ /* runqueue-specific stats */
++ seq_printf(seq,
++ "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
++ cpu, rq->yld_both_empty,
++ rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt,
++ rq->sched_switch, rq->sched_cnt, rq->sched_goidle,
++ rq->ttwu_cnt, rq->ttwu_local,
++ rq->rq_sched_info.cpu_time,
++ rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt);
++
++ seq_printf(seq, "\n");
++
++#ifdef CONFIG_SMP
++ /* domain-specific stats */
++ preempt_disable();
++ for_each_domain(cpu, sd) {
++ enum idle_type itype;
++ char mask_str[NR_CPUS];
++
++ cpumask_scnprintf(mask_str, NR_CPUS, sd->span);
++ seq_printf(seq, "domain%d %s", dcnt++, mask_str);
++ for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES;
++ itype++) {
++ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu "
++ "%lu",
++ sd->lb_cnt[itype],
++ sd->lb_balanced[itype],
++ sd->lb_failed[itype],
++ sd->lb_imbalance[itype],
++ sd->lb_gained[itype],
++ sd->lb_hot_gained[itype],
++ sd->lb_nobusyq[itype],
++ sd->lb_nobusyg[itype]);
++ }
++ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu"
++ " %lu %lu %lu\n",
++ sd->alb_cnt, sd->alb_failed, sd->alb_pushed,
++ sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed,
++ sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed,
++ sd->ttwu_wake_remote, sd->ttwu_move_affine,
++ sd->ttwu_move_balance);
++ }
++ preempt_enable();
++#endif
++ }
++ return 0;
++}
++
++static int schedstat_open(struct inode *inode, struct file *file)
++{
++ unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32);
++ char *buf = kmalloc(size, GFP_KERNEL);
++ struct seq_file *m;
++ int res;
++
++ if (!buf)
++ return -ENOMEM;
++ res = single_open(file, show_schedstat, NULL);
++ if (!res) {
++ m = file->private_data;
++ m->buf = buf;
++ m->size = size;
++ } else
++ kfree(buf);
++ return res;
++}
++
++const struct file_operations proc_schedstat_operations = {
++ .open = schedstat_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++/*
++ * Expects runqueue lock to be held for atomicity of update
++ */
++static inline void
++rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
++{
++ if (rq) {
++ rq->rq_sched_info.run_delay += delta_jiffies;
++ rq->rq_sched_info.pcnt++;
++ }
++}
++
++/*
++ * Expects runqueue lock to be held for atomicity of update
++ */
++static inline void
++rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
++{
++ if (rq)
++ rq->rq_sched_info.cpu_time += delta_jiffies;
++}
++# define schedstat_inc(rq, field) do { (rq)->field++; } while (0)
++# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0)
++#else /* !CONFIG_SCHEDSTATS */
++static inline void
++rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
++{}
++static inline void
++rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
++{}
++# define schedstat_inc(rq, field) do { } while (0)
++# define schedstat_add(rq, field, amt) do { } while (0)
++#endif
++
++#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
++/*
++ * Called when a process is dequeued from the active array and given
++ * the cpu. We should note that with the exception of interactive
++ * tasks, the expired queue will become the active queue after the active
++ * queue is empty, without explicitly dequeuing and requeuing tasks in the
++ * expired queue. (Interactive tasks may be requeued directly to the
++ * active queue, thus delaying tasks in the expired queue from running;
++ * see scheduler_tick()).
++ *
++ * This function is only called from sched_info_arrive(), rather than
++ * dequeue_task(). Even though a task may be queued and dequeued multiple
++ * times as it is shuffled about, we're really interested in knowing how
++ * long it was from the *first* time it was queued to the time that it
++ * finally hit a cpu.
++ */
++static inline void sched_info_dequeued(struct task_struct *t)
++{
++ t->sched_info.last_queued = 0;
++}
++
++/*
++ * Called when a task finally hits the cpu. We can now calculate how
++ * long it was waiting to run. We also note when it began so that we
++ * can keep stats on how long its timeslice is.
++ */
++static void sched_info_arrive(struct task_struct *t)
++{
++ unsigned long now = jiffies, delta_jiffies = 0;
++
++ if (t->sched_info.last_queued)
++ delta_jiffies = now - t->sched_info.last_queued;
++ sched_info_dequeued(t);
++ t->sched_info.run_delay += delta_jiffies;
++ t->sched_info.last_arrival = now;
++ t->sched_info.pcnt++;
++
++ rq_sched_info_arrive(task_rq(t), delta_jiffies);
++}
++
++/*
++ * Called when a process is queued into either the active or expired
++ * array. The time is noted and later used to determine how long we
++ * had to wait for us to reach the cpu. Since the expired queue will
++ * become the active queue after active queue is empty, without dequeuing
++ * and requeuing any tasks, we are interested in queuing to either. It
++ * is unusual but not impossible for tasks to be dequeued and immediately
++ * requeued in the same or another array: this can happen in sched_yield(),
++ * set_user_nice(), and even load_balance() as it moves tasks from runqueue
++ * to runqueue.
++ *
++ * This function is only called from enqueue_task(), but also only updates
++ * the timestamp if it is already not set. It's assumed that
++ * sched_info_dequeued() will clear that stamp when appropriate.
++ */
++static inline void sched_info_queued(struct task_struct *t)
++{
++ if (unlikely(sched_info_on()))
++ if (!t->sched_info.last_queued)
++ t->sched_info.last_queued = jiffies;
++}
++
++/*
++ * Called when a process ceases being the active-running process, either
++ * voluntarily or involuntarily. Now we can calculate how long we ran.
++ */
++static inline void sched_info_depart(struct task_struct *t)
++{
++ unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival;
++
++ t->sched_info.cpu_time += delta_jiffies;
++ rq_sched_info_depart(task_rq(t), delta_jiffies);
++}
++
++/*
++ * Called when tasks are switched involuntarily due, typically, to expiring
++ * their time slice. (This may also be called when switching to or from
++ * the idle task.) We are only called when prev != next.
++ */
++static inline void
++__sched_info_switch(struct task_struct *prev, struct task_struct *next)
++{
++ struct rq *rq = task_rq(prev);
++
++ /*
++ * prev now departs the cpu. It's not interesting to record
++ * stats about how efficient we were at scheduling the idle
++ * process, however.
++ */
++ if (prev != rq->idle)
++ sched_info_depart(prev);
++
++ if (next != rq->idle)
++ sched_info_arrive(next);
++}
++static inline void
++sched_info_switch(struct task_struct *prev, struct task_struct *next)
++{
++ if (unlikely(sched_info_on()))
++ __sched_info_switch(prev, next);
++}
++#else
++#define sched_info_queued(t) do { } while (0)
++#define sched_info_switch(t, next) do { } while (0)
++#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
++
+Index: linux-cfs-2.6.20.8.q/kernel/sysctl.c
+===================================================================
+--- linux-cfs-2.6.20.8.q.orig/kernel/sysctl.c
++++ linux-cfs-2.6.20.8.q/kernel/sysctl.c
+@@ -320,6 +320,46 @@ static ctl_table kern_table[] = {
+ .strategy = &sysctl_uts_string,
+ },
+ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "sched_granularity_ns",
++ .data = &sysctl_sched_granularity,
++ .maxlen = sizeof(unsigned int),
++ .mode = 0644,
++ .proc_handler = &proc_dointvec,
++ },
++ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "sched_wakeup_granularity_ns",
++ .data = &sysctl_sched_wakeup_granularity,
++ .maxlen = sizeof(unsigned int),
++ .mode = 0644,
++ .proc_handler = &proc_dointvec,
++ },
++ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "sched_sleep_history_max_ns",
++ .data = &sysctl_sched_sleep_history_max,
++ .maxlen = sizeof(unsigned int),
++ .mode = 0644,
++ .proc_handler = &proc_dointvec,
++ },
++ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "sched_child_runs_first",
++ .data = &sysctl_sched_child_runs_first,
++ .maxlen = sizeof(unsigned int),
++ .mode = 0644,
++ .proc_handler = &proc_dointvec,
++ },
++ {
++ .ctl_name = CTL_UNNUMBERED,
++ .procname = "sched_load_smoothing",
++ .data = &sysctl_sched_load_smoothing,
++ .maxlen = sizeof(unsigned int),
++ .mode = 0644,
++ .proc_handler = &proc_dointvec,
++ },
++ {
+ .ctl_name = KERN_PANIC,
+ .procname = "panic",
+ .data = &panic_timeout,
diff --git a/packages/linux/linux-efika-2.6.20/0033-EFIKA-fullduplex-prpl_aln.txt b/packages/linux/linux-efika-2.6.20/0033-EFIKA-fullduplex-prpl_aln.txt
new file mode 100644
index 0000000000..6feba7b112
--- /dev/null
+++ b/packages/linux/linux-efika-2.6.20/0033-EFIKA-fullduplex-prpl_aln.txt
@@ -0,0 +1,27 @@
+diff -uNr orig-drivers/net/fec_mpc52xx/fec.c drivers/net/fec_mpc52xx/fec.c
+--- /orig-drivers/net/fec_mpc52xx/fec.c 2007-03-10 13:34:46.000000000 +0200
++++ /drivers/net/fec_mpc52xx/fec.c 2007-03-10 13:45:45.000000000 +0200
+@@ -525,7 +525,7 @@
+ priv->phy_speed = ((bd->bi_ipbfreq >> 20) / 5) << 1;
+ #endif
+
+- fec_restart(dev, 0); /* always use half duplex mode only */
++ fec_restart(dev, 1); /* always use full duplex mode only */
+ /*
+ * Read MIB counters in order to reset them,
+ * then zero all the stats fields in memory
+diff -uNr orig-drivers/net/fec_mpc52xx/fec_phy.c drivers/net/fec_mpc52xx/fec_phy.c
+--- /orig-drivers/net/fec_mpc52xx/fec_phy.c 2007-03-10 13:34:47.000000000 +0200
++++ /drivers/net/fec_mpc52xx/fec_phy.c 2007-03-10 13:44:56.000000000 +0200
+@@ -227,8 +227,8 @@
+ "GENERIC",
+
+ (const phy_cmd_t []) { /* config */
+- /* advertise only half-duplex capabilities */
+- { mk_mii_write(MII_ADVERTISE, MII_ADVERTISE_HALF),
++ /* advertise only full-duplex capabilities */
++ { mk_mii_write(MII_ADVERTISE, MII_ADVERTISE_ALL),
+ mii_parse_anar },
+
+ /* enable auto-negotiation */
+
diff --git a/packages/linux/linux-efika-2.6.21+git/.mtn2git_empty b/packages/linux/linux-efika-2.6.21+git/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-efika-2.6.21+git/.mtn2git_empty
diff --git a/packages/linux/linux-efika-2.6.21+git/defconfig b/packages/linux/linux-efika-2.6.21+git/defconfig
new file mode 100644
index 0000000000..de271da67a
--- /dev/null
+++ b/packages/linux/linux-efika-2.6.21+git/defconfig
@@ -0,0 +1,1645 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Sat May 19 17:43:26 2007
+#
+# CONFIG_PPC64 is not set
+CONFIG_PPC32=y
+CONFIG_PPC_MERGE=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_IRQ_PER_CPU=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_PPC_UDBG_16550=y
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+# CONFIG_DEFAULT_UIMAGE is not set
+
+#
+# Processor support
+#
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_82xx is not set
+# CONFIG_PPC_83xx is not set
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_86xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_E200 is not set
+CONFIG_6xx=y
+CONFIG_PPC_FPU=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+# CONFIG_ALTIVEC is not set
+CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_32=y
+# CONFIG_SMP is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-efika"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Platform support
+#
+CONFIG_PPC_MULTIPLATFORM=y
+# CONFIG_EMBEDDED6xx is not set
+# CONFIG_APUS is not set
+CONFIG_PPC_CHRP=y
+CONFIG_PPC_MPC52xx=y
+CONFIG_PPC_MPC5200=y
+CONFIG_PPC_MPC5200_BUGFIX=y
+CONFIG_PPC_BESTCOMM=y
+CONFIG_PPC_EFIKA=y
+CONFIG_PPC_LITE5200=y
+# CONFIG_PPC_PMAC is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+CONFIG_PPC_NATIVE=y
+CONFIG_UDBG_RTAS_CONSOLE=y
+CONFIG_PPC_RTAS=y
+# CONFIG_RTAS_ERROR_LOGGING is not set
+CONFIG_RTAS_PROC=y
+# CONFIG_MMIO_NVRAM is not set
+CONFIG_PPC_MPC106=y
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_MPIC=y
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+CONFIG_HZ_1000=y
+CONFIG_HZ=1000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+# CONFIG_KEXEC is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_PROC_DEVICETREE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0,9600 console=ttyPSC0,115200"
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+# CONFIG_ISA is not set
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_MPIC_WEIRD is not set
+CONFIG_PPC_I8259=y
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_BEET is not set
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+# CONFIG_IPV6_SIT is not set
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_TOSHIBA_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_IVB=y
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+CONFIG_ATA_GENERIC=y
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+CONFIG_PATA_MPC52xx=y
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_MAC_EMUMOUSEBTN is not set
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+CONFIG_FIXED_PHY=m
+CONFIG_FIXED_MII_10_FDX=y
+CONFIG_FIXED_MII_100_FDX=y
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# MPC5200 Networking Options
+#
+CONFIG_FEC_MPC52xx=y
+CONFIG_USE_MDIO=y
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SIS190=m
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+CONFIG_SK98LIN=m
+CONFIG_TIGON3=m
+# CONFIG_BNX2 is not set
+# CONFIG_MV643XX_ETH is not set
+# CONFIG_QLA3XXX is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+# CONFIG_HOSTAP_FIRMWARE is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+CONFIG_SLIP_MODE_SLIP6=y
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=16
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_MPC52xx=y
+CONFIG_SERIAL_MPC52xx_CONSOLE=y
+CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
+# CONFIG_SERIAL_JSM is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_BRIQ_PANEL is not set
+CONFIG_HVC_DRIVER=y
+CONFIG_HVC_RTAS=y
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+CONFIG_WATCHDOG_RTAS=m
+
+#
+# PCI-based Watchdog Cards
+#
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+CONFIG_WDT_501_PCI=y
+
+#
+# USB-based Watchdog Cards
+#
+CONFIG_USBPCWATCHDOG=m
+CONFIG_HW_RANDOM=y
+CONFIG_NVRAM=y
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+CONFIG_AGP=m
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_HYDRA is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_NFORCE2 is not set
+CONFIG_I2C_OCORES=y
+CONFIG_I2C_PARPORT_LIGHT=y
+# CONFIG_I2C_PASEMI is not set
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_M41T00=m
+CONFIG_SENSORS_MAX6875=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_DDC=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+CONFIG_FB_MACMODES=y
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+CONFIG_FB_OF=y
+# CONFIG_FB_CT65550 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=y
+CONFIG_FB_RADEON_I2C=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=y
+CONFIG_FB_ATY=y
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+CONFIG_FB_SIS=y
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+CONFIG_VGACON_SOFT_SCROLLBACK=y
+CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PPC_SOC=y
+CONFIG_USB_OHCI_HCD_PPC_OF=y
+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
+CONFIG_USB_OHCI_HCD_PCI=y
+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+# CONFIG_LEDS_CLASS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# DMA Engine support
+#
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+
+#
+# DMA Devices
+#
+# CONFIG_INTEL_IOATDMA is not set
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=y
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=y
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=y
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+CONFIG_HFS_FS=y
+CONFIG_HFSPLUS_FS=y
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+CONFIG_AMIGA_PARTITION=y
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+
+#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_BOOTX_TEXT=y
+CONFIG_SERIAL_TEXT_DEBUG=y
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/packages/linux/linux-efika/0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt b/packages/linux/linux-efika/0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt
new file mode 100644
index 0000000000..332ce4df19
--- /dev/null
+++ b/packages/linux/linux-efika/0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt
@@ -0,0 +1,99 @@
+From 6c8a0f1870285e82dc473d31ac297d570460dd66 Mon Sep 17 00:00:00 2001
+From: Sylvain Munaut <tnt@246tNt.com>
+Date: Thu, 21 Dec 2006 22:26:39 +0100
+Subject: [PATCH] powerpc: Add device tree fixup for the EFIKA
+
+We make the efika device tree compliant with the defined bindings
+(at least compliant enough). We also add some missing bits.
+
+Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
+---
+ arch/powerpc/kernel/prom_init.c | 74 +++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 74 insertions(+), 0 deletions(-)
+
+diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
+index 520ef42..294e875 100644
+--- a/arch/powerpc/kernel/prom_init.c
++++ b/arch/powerpc/kernel/prom_init.c
+@@ -2117,11 +2117,78 @@ #else
+ #define fixup_device_tree_pmac()
+ #endif
+
++#ifdef CONFIG_PPC_EFIKA
++/* The current fw of the Efika has a device tree needs quite a few
++ * fixups to be compliant with the mpc52xx bindings. It's currently
++ * unknown if it will ever be compliant (come on bPlan ...) so we do fixups.
++ * NOTE that we (barely) tolerate it because the EFIKA was out before
++ * the bindings were finished, for any new boards -> RTFM ! */
++
++struct subst_entry {
++ char *path;
++ char *property;
++ void *value;
++ int value_len;
++};
++
++static void __init fixup_device_tree_efika(void)
++{
++ /* Substitution table */
++ #define prop_cstr(x) x, sizeof(x)
++ int prop_sound_irq[3] = { 2, 2, 0 };
++ struct subst_entry efika_subst_table[] = {
++ { "/builtin/sound", "compatible", prop_cstr("mpc5200b-psc-ac97\0mpc52xx-psc-ac97") },
++ { "/builtin/sound", "interrupts", prop_sound_irq, sizeof(prop_sound_irq) },
++ {}
++ };
++ #undef prop_cstr
++
++ /* Vars */
++ u32 node;
++ char prop[64];
++ int rv, i;
++
++ /* Check if we're really running on a EFIKA */
++ node = call_prom("finddevice", 1, 1, ADDR("/"));
++ if (!PHANDLE_VALID(node))
++ return;
++
++ rv = prom_getprop(node, "model", prop, sizeof(prop));
++ if (rv == PROM_ERROR)
++ return;
++ if (strcmp(prop, "EFIKA5K2"))
++ return;
++
++ prom_printf("Applying EFIKA device tree fixups\n");
++
++ /* Process substitution table */
++ for (i=0; efika_subst_table[i].path; i++) {
++ struct subst_entry *se = &efika_subst_table[i];
++
++ node = call_prom("finddevice", 1, 1, ADDR(se->path));
++ if (!PHANDLE_VALID(node)) {
++ prom_printf("fixup_device_tree_efika: ",
++ "skipped entry %x - not found\n", i);
++ continue;
++ }
++
++ rv = prom_setprop(node, se->path, se->property,
++ se->value, se->value_len );
++ if (rv == PROM_ERROR)
++ prom_printf("fixup_device_tree_efika: ",
++ "skipped entry %x - setprop error\n", i);
++ }
++}
++#else
++#define fixup_device_tree_efika()
++#endif
++
+ static void __init fixup_device_tree(void)
+ {
+ fixup_device_tree_maple();
+ fixup_device_tree_chrp();
+ fixup_device_tree_pmac();
++ fixup_device_tree_efika();
+ }
+
+ static void __init prom_find_boot_cpu(void)
+--
+1.4.2
+
diff --git a/packages/linux/linux-efika/defconfig b/packages/linux/linux-efika/defconfig
index b8a39ffa05..de271da67a 100644
--- a/packages/linux/linux-efika/defconfig
+++ b/packages/linux/linux-efika/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-rc6
-# Sun Dec 31 01:46:08 2006
+# Linux kernel version: 2.6.20
+# Sat May 19 17:43:26 2007
#
# CONFIG_PPC64 is not set
CONFIG_PPC32=y
@@ -10,6 +10,7 @@ CONFIG_MMU=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_IRQ_PER_CPU=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
@@ -22,23 +23,25 @@ CONFIG_PPC_OF=y
CONFIG_PPC_UDBG_16550=y
# CONFIG_GENERIC_TBSYNC is not set
CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
# CONFIG_DEFAULT_UIMAGE is not set
#
# Processor support
#
CONFIG_CLASSIC32=y
-# CONFIG_PPC_52xx is not set
# CONFIG_PPC_82xx is not set
# CONFIG_PPC_83xx is not set
# CONFIG_PPC_85xx is not set
# CONFIG_PPC_86xx is not set
+# CONFIG_PPC_8xx is not set
# CONFIG_40x is not set
# CONFIG_44x is not set
-# CONFIG_8xx is not set
# CONFIG_E200 is not set
CONFIG_6xx=y
CONFIG_PPC_FPU=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
# CONFIG_ALTIVEC is not set
CONFIG_PPC_STD_MMU=y
CONFIG_PPC_STD_MMU_32=y
@@ -50,26 +53,23 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
+CONFIG_LOCALVERSION="-efika"
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
CONFIG_POSIX_MQUEUE=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -98,8 +98,8 @@ CONFIG_BASE_SMALL=0
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -107,22 +107,22 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
-CONFIG_LBD=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
-CONFIG_LSF=y
+# CONFIG_LSF is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_DEFAULT_IOSCHED="cfq"
#
# Platform support
@@ -131,10 +131,16 @@ CONFIG_PPC_MULTIPLATFORM=y
# CONFIG_EMBEDDED6xx is not set
# CONFIG_APUS is not set
CONFIG_PPC_CHRP=y
+CONFIG_PPC_MPC52xx=y
+CONFIG_PPC_MPC5200=y
+CONFIG_PPC_MPC5200_BUGFIX=y
+CONFIG_PPC_BESTCOMM=y
CONFIG_PPC_EFIKA=y
+CONFIG_PPC_LITE5200=y
# CONFIG_PPC_PMAC is not set
# CONFIG_PPC_CELL is not set
# CONFIG_PPC_CELL_NATIVE is not set
+CONFIG_PPC_NATIVE=y
CONFIG_UDBG_RTAS_CONSOLE=y
CONFIG_PPC_RTAS=y
# CONFIG_RTAS_ERROR_LOGGING is not set
@@ -142,12 +148,12 @@ CONFIG_RTAS_PROC=y
# CONFIG_MMIO_NVRAM is not set
CONFIG_PPC_MPC106=y
# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
# CONFIG_CPU_FREQ is not set
# CONFIG_TAU is not set
-CONFIG_PPC_MPC52xx=y
# CONFIG_WANT_EARLY_SERIAL is not set
CONFIG_MPIC=y
-CONFIG_USE_MDIO=y
#
# Kernel options
@@ -155,12 +161,12 @@ CONFIG_USE_MDIO=y
# CONFIG_HIGHMEM is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
-# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
-CONFIG_PREEMPT_BKL=y
+# CONFIG_PREEMPT is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -176,17 +182,23 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_PROC_DEVICETREE=y
CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="root=/dev/sda1"
-# CONFIG_PM is not set
-# CONFIG_SECCOMP is not set
+CONFIG_CMDLINE="console=ttyS0,9600 console=ttyPSC0,115200"
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+CONFIG_SECCOMP=y
CONFIG_ISA_DMA_API=y
#
# Bus options
#
# CONFIG_ISA is not set
+CONFIG_ZONE_DMA=y
CONFIG_GENERIC_ISA_DMA=y
# CONFIG_MPIC_WEIRD is not set
CONFIG_PPC_I8259=y
@@ -198,25 +210,7 @@ CONFIG_PCI_DOMAINS=y
#
# PCCARD (PCMCIA/CardBus) support
#
-CONFIG_PCCARD=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-CONFIG_CARDBUS=y
-
-#
-# PC-card bridges
-#
-CONFIG_YENTA=m
-CONFIG_YENTA_O2=y
-CONFIG_YENTA_RICOH=y
-CONFIG_YENTA_TI=y
-CONFIG_YENTA_ENE_TUNE=y
-CONFIG_YENTA_TOSHIBA=y
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_PCCARD_NONSTATIC=m
+# CONFIG_PCCARD is not set
#
# PCI Hotplug Support
@@ -247,211 +241,54 @@ CONFIG_NET=y
#
# CONFIG_NETDEBUG is not set
CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
+# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_NET_KEY=y
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
-CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
-CONFIG_NET_IPIP=y
-CONFIG_NET_IPGRE=y
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_ARPD=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
-
-#
-# IP: Virtual Server Configuration
-#
-CONFIG_IP_VS=m
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_TAB_BITS=12
-
-#
-# IPVS transport protocol load balancing support
-#
-CONFIG_IP_VS_PROTO_TCP=y
-CONFIG_IP_VS_PROTO_UDP=y
-CONFIG_IP_VS_PROTO_ESP=y
-CONFIG_IP_VS_PROTO_AH=y
-
-#
-# IPVS scheduler
-#
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_WRR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_NQ=m
-
-#
-# IPVS application helper
-#
-CONFIG_IP_VS_FTP=m
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_BEET is not set
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_SIT is not set
+# CONFIG_IPV6_TUNNEL is not set
# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETLABEL is not set
-CONFIG_NETWORK_SECMARK=y
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
-# CONFIG_NETFILTER_XT_TARGET_CONNSECMARK is not set
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_CT_ACCT=y
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK_SECMARK=y
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_NETBIOS_NS=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_PPTP=m
-CONFIG_IP_NF_H323=m
-CONFIG_IP_NF_SIP=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_NAT_H323=m
-CONFIG_IP_NF_NAT_SIP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -461,25 +298,18 @@ CONFIG_IP_NF_ARP_MANGLE=m
#
# SCTP Configuration (EXPERIMENTAL)
#
-CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_IP_SCTP is not set
#
# TIPC Configuration (EXPERIMENTAL)
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
-CONFIG_LLC=m
-CONFIG_LLC2=m
-CONFIG_IPX=m
-CONFIG_IPX_INTERN=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
@@ -490,48 +320,84 @@ CONFIG_IPX_INTERN=y
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_WINBOND_FIR=m
+CONFIG_TOSHIBA_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+CONFIG_ALI_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_MCS_FIR=m
+# CONFIG_BT is not set
CONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_IEEE80211_SOFTMAC is not set
CONFIG_WIRELESS_EXT=y
-CONFIG_FIB_RULES=y
#
# Device Drivers
@@ -568,7 +434,6 @@ CONFIG_FW_LOADER=m
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_MPC52XX_ATAPIO is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
@@ -584,10 +449,8 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
CONFIG_BLK_DEV_INITRD=y
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-CONFIG_ATA_OVER_ETH=m
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
#
# Misc devices
@@ -598,14 +461,72 @@ CONFIG_ATA_OVER_ETH=m
#
# ATA/ATAPI/MFM/RLL support
#
-# CONFIG_IDE is not set
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_IVB=y
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
#
-# CONFIG_RAID_ATTRS is not set
+CONFIG_RAID_ATTRS=y
CONFIG_SCSI=y
-CONFIG_SCSI_NETLINK=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -617,30 +538,32 @@ CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=y
-CONFIG_CHR_DEV_SCH=m
+# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
-CONFIG_SCSI_LOGGING=y
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
-CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_FC_ATTRS is not set
CONFIG_SCSI_ISCSI_ATTRS=m
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-CONFIG_SCSI_3W_9XXX=m
+# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
@@ -662,49 +585,39 @@ CONFIG_SCSI_3W_9XXX=m
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_STEX is not set
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_DC390T=m
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
+# CONFIG_SCSI_SRP is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
#
CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
# CONFIG_SATA_AHCI is not set
# CONFIG_SATA_SVW is not set
# CONFIG_ATA_PIIX is not set
-CONFIG_SATA_MV=m
+# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
# CONFIG_PDC_ADMA is not set
# CONFIG_SATA_QSTOR is not set
-CONFIG_SATA_PROMISE=y
-CONFIG_SATA_SX4=y
-CONFIG_SATA_SIL=y
-CONFIG_SATA_SIL24=y
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
# CONFIG_SATA_SIS is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
@@ -714,14 +627,16 @@ CONFIG_SATA_SIL24=y
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
-# CONFIG_ATA_GENERIC is not set
+CONFIG_ATA_GENERIC=y
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
CONFIG_PATA_MPC52xx=y
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_OLDPIIX is not set
@@ -729,7 +644,6 @@ CONFIG_PATA_MPC52xx=y
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_PCMCIA is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RZ1000 is not set
@@ -757,31 +671,7 @@ CONFIG_PATA_MPC52xx=y
#
# IEEE 1394 (FireWire) support
#
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-CONFIG_IEEE1394_OUI_DB=y
-CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
-CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
-CONFIG_IEEE1394_EXPORT_FULL_API=y
-
-#
-# Device Drivers
-#
-# CONFIG_IEEE1394_PCILYNX is not set
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-CONFIG_IEEE1394_ETH1394=m
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
+# CONFIG_IEEE1394 is not set
#
# I2O device support
@@ -791,15 +681,16 @@ CONFIG_IEEE1394_RAWIO=m
#
# Macintosh device drivers
#
+# CONFIG_MAC_EMUMOUSEBTN is not set
# CONFIG_WINDFARM is not set
#
# Network device support
#
CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
@@ -810,19 +701,22 @@ CONFIG_EQUALIZER=m
#
# PHY device support
#
-CONFIG_PHYLIB=m
+CONFIG_PHYLIB=y
#
# MII PHY device drivers
#
-CONFIG_MARVELL_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_SMSC_PHY=m
-# CONFIG_FIXED_PHY is not set
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+CONFIG_FIXED_PHY=m
+CONFIG_FIXED_MII_10_FDX=y
+CONFIG_FIXED_MII_100_FDX=y
#
# Ethernet (10 or 100Mbit)
@@ -832,74 +726,54 @@ CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
#
# Tulip family network device support
#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-# CONFIG_VIA_RHINE_NAPI is not set
+# CONFIG_NET_PCI is not set
#
# MPC5200 Networking Options
#
CONFIG_FEC_MPC52xx=y
+CONFIG_USE_MDIO=y
#
# Ethernet (1000 Mbit)
#
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_DL2K=m
-# CONFIG_E1000 is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
-CONFIG_R8169_VLAN=y
+# CONFIG_R8169_NAPI is not set
CONFIG_SIS190=m
-CONFIG_SKGE=m
-CONFIG_SKY2=m
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
CONFIG_TIGON3=m
-CONFIG_BNX2=m
+# CONFIG_BNX2 is not set
# CONFIG_MV643XX_ETH is not set
-CONFIG_QLA3XXX=m
+# CONFIG_QLA3XXX is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
#
# Token Ring devices
@@ -915,14 +789,7 @@ CONFIG_NET_RADIO=y
#
# Obsolete Wireless cards support (pre-802.11)
#
-CONFIG_STRIP=m
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-CONFIG_PCMCIA_RAYCS=m
+# CONFIG_STRIP is not set
#
# Wireless 802.11b ISA/PCI cards support
@@ -930,57 +797,41 @@ CONFIG_PCMCIA_RAYCS=m
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
# CONFIG_AIRO is not set
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-# CONFIG_NORTEL_HERMES is not set
-CONFIG_PCI_HERMES=m
+# CONFIG_HERMES is not set
CONFIG_ATMEL=m
# CONFIG_PCI_ATMEL is not set
#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-# CONFIG_PCMCIA_SPECTRUM is not set
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-
-#
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
#
CONFIG_PRISM54=m
CONFIG_USB_ZD1201=m
CONFIG_HOSTAP=m
# CONFIG_HOSTAP_FIRMWARE is not set
-# CONFIG_HOSTAP_PLX is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_CS is not set
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
CONFIG_NET_WIRELESS=y
#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
-#
# Wan interfaces
#
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
+# CONFIG_PPP_MPPE is not set
CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+CONFIG_SLIP_MODE_SLIP6=y
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
@@ -1001,7 +852,7 @@ CONFIG_SLHC=m
# Input device support
#
CONFIG_INPUT=y
-CONFIG_INPUT_FF_MEMLESS=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
@@ -1012,36 +863,37 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=m
+CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_XTKBD=m
+# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#
CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
+CONFIG_SERIO_RAW=m
# CONFIG_GAMEPORT is not set
#
@@ -1050,27 +902,35 @@ CONFIG_SERIO_LIBPS2=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
-# CONFIG_SERIAL_8250 is not set
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=16
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
#
+# CONFIG_SERIAL_UARTLITE is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_MPC52xx=y
CONFIG_SERIAL_MPC52xx_CONSOLE=y
CONFIG_SERIAL_MPC52xx_CONSOLE_BAUD=115200
# CONFIG_SERIAL_JSM is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_BRIQ_PANEL is not set
-# CONFIG_HVC_RTAS is not set
+CONFIG_HVC_DRIVER=y
+CONFIG_HVC_RTAS=y
#
# IPMI
@@ -1080,36 +940,35 @@ CONFIG_UNIX98_PTYS=y
#
# Watchdog Cards
#
-# CONFIG_WATCHDOG is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+CONFIG_WATCHDOG_RTAS=m
+
+#
+# PCI-based Watchdog Cards
+#
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+CONFIG_WDT_501_PCI=y
+
+#
+# USB-based Watchdog Cards
+#
+CONFIG_USBPCWATCHDOG=m
CONFIG_HW_RANDOM=y
CONFIG_NVRAM=y
CONFIG_GEN_RTC=y
-CONFIG_GEN_RTC_X=y
+# CONFIG_GEN_RTC_X is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
CONFIG_AGP=m
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_VIA is not set
-CONFIG_DRM=m
-CONFIG_DRM_TDFX=m
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_MGA=m
-CONFIG_DRM_SIS=m
-CONFIG_DRM_VIA=m
-CONFIG_DRM_SAVAGE=m
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
+# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -1121,14 +980,14 @@ CONFIG_DRM_SAVAGE=m
# I2C support
#
CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_CHARDEV=y
#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
@@ -1142,32 +1001,33 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_MPC is not set
+CONFIG_I2C_MPC=y
# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
+CONFIG_I2C_OCORES=y
+CONFIG_I2C_PARPORT_LIGHT=y
+# CONFIG_I2C_PASEMI is not set
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2C_PCA_ISA is not set
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
#
# Miscellaneous I2C Chip support
#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_M41T00 is not set
-# CONFIG_SENSORS_MAX6875 is not set
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_M41T00=m
+CONFIG_SENSORS_MAX6875=m
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -1193,69 +1053,28 @@ CONFIG_I2C_ALGOBIT=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=m
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L1_COMPAT is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-CONFIG_VIDEO_WM8775=m
-CONFIG_VIDEO_CX25840=m
-CONFIG_VIDEO_CX2341X=m
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_CX88 is not set
-
-#
-# V4L USB devices
-#
-CONFIG_VIDEO_PVRUSB2=m
-# CONFIG_VIDEO_PVRUSB2_29XXX is not set
-CONFIG_VIDEO_PVRUSB2_24XXX=y
-CONFIG_VIDEO_PVRUSB2_SYSFS=y
-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_USB_DSBR is not set
+# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_TVEEPROM=m
-CONFIG_USB_DABUSB=m
+# CONFIG_USB_DABUSB is not set
#
# Graphics support
#
-# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
CONFIG_FB_DDC=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
CONFIG_FB_MACMODES=y
# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
@@ -1270,25 +1089,31 @@ CONFIG_FB_OF=y
# CONFIG_FB_MATROX is not set
CONFIG_FB_RADEON=y
CONFIG_FB_RADEON_I2C=y
-CONFIG_FB_RADEON_DEBUG=y
+# CONFIG_FB_RADEON_DEBUG is not set
CONFIG_FB_ATY128=y
-# CONFIG_FB_ATY is not set
+CONFIG_FB_ATY=y
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
CONFIG_FB_SIS=y
CONFIG_FB_SIS_300=y
CONFIG_FB_SIS_315=y
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
-CONFIG_FB_3DFX=y
-# CONFIG_FB_3DFX_ACCEL is not set
-CONFIG_FB_VOODOO1=y
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_IBM_GXT4500 is not set
# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
#
-# CONFIG_VGA_CONSOLE is not set
+CONFIG_VGA_CONSOLE=y
+CONFIG_VGACON_SOFT_SCROLLBACK=y
+CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
@@ -1302,137 +1127,19 @@ CONFIG_FONT_8x16=y
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_MPU401_UART=m
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-CONFIG_SND_CA0106=m
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ is not set
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_EMU10K1X=m
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VIA82XX_MODEM=m
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-
-#
-# ALSA PowerMac devices
-#
-
-#
-# ALSA PPC devices
-#
-CONFIG_SND_PPC_MPC52xx_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_USX2Y=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -1447,17 +1154,14 @@ CONFIG_USB=y
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
-CONFIG_USB_BANDWIDTH=y
CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PPC_SOC=y
@@ -1465,17 +1169,17 @@ CONFIG_USB_OHCI_HCD_PPC_OF=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_OHCI_HCD_PCI=y
-CONFIG_USB_OHCI_BIG_ENDIAN=y
+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_U132_HCD is not set
+CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1486,73 +1190,54 @@ CONFIG_USB_PRINTER=m
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_ONETOUCH=y
-CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_HID_FF=y
-CONFIG_HID_PID=y
-CONFIG_LOGITECH_FF=y
-CONFIG_THRUSTMASTER_FF=y
-# CONFIG_ZEROPLUS_FF is not set
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-CONFIG_USB_ACECAD=m
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_TOUCHSCREEN=m
-CONFIG_USB_TOUCHSCREEN_EGALAX=y
-CONFIG_USB_TOUCHSCREEN_PANJIT=y
-CONFIG_USB_TOUCHSCREEN_3M=y
-CONFIG_USB_TOUCHSCREEN_ITM=y
-CONFIG_USB_TOUCHSCREEN_ETURBO=y
-CONFIG_USB_TOUCHSCREEN_GUNZE=y
-CONFIG_USB_YEALINK=m
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-CONFIG_USB_ATI_REMOTE2=m
-CONFIG_USB_KEYSPAN_REMOTE=m
-CONFIG_USB_APPLETOUCH=m
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
#
# USB Network Adapters
#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
# CONFIG_USB_MON is not set
#
@@ -1562,71 +1247,28 @@ CONFIG_USB_NET_ZAURUS=m
#
# USB Serial Converter support
#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
+# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGET=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETMOTORCONTROL=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-# CONFIG_USB_SISUSBVGA_CON is not set
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_TEST=m
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
#
# USB DSL modem support
@@ -1635,26 +1277,7 @@ CONFIG_USB_TEST=m
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-CONFIG_USB_GADGET_NET2280=y
-CONFIG_USB_NET2280=m
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-CONFIG_USB_GADGET_DUALSPEED=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_FILE_STORAGE_TEST=y
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
@@ -1664,7 +1287,8 @@ CONFIG_USB_G_SERIAL=m
#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+# CONFIG_LEDS_CLASS is not set
#
# LED drivers
@@ -1673,6 +1297,10 @@ CONFIG_USB_G_SERIAL=m
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# InfiniBand support
@@ -1686,33 +1314,71 @@ CONFIG_USB_G_SERIAL=m
#
# Real Time Clock
#
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# DMA Engine support
#
-# CONFIG_DMA_ENGINE is not set
+CONFIG_DMA_ENGINE=y
#
# DMA Clients
#
+CONFIG_NET_DMA=y
#
# DMA Devices
#
+# CONFIG_INTEL_IOATDMA is not set
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
# CONFIG_EXT4DEV_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
@@ -1720,32 +1386,30 @@ CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
-CONFIG_JFS_FS=m
-CONFIG_JFS_POSIX_ACL=y
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=y
+# CONFIG_JFS_POSIX_ACL is not set
# CONFIG_JFS_SECURITY is not set
# CONFIG_JFS_DEBUG is not set
-CONFIG_JFS_STATISTICS=y
+# CONFIG_JFS_STATISTICS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=y
-CONFIG_XFS_QUOTA=y
-CONFIG_XFS_SECURITY=y
-CONFIG_XFS_POSIX_ACL=y
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
-CONFIG_MINIX_FS=m
-# CONFIG_ROMFS_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
-CONFIG_QUOTACTL=y
CONFIG_DNOTIFY=y
-CONFIG_AUTOFS_FS=m
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
#
# CD-ROM/DVD Filesystems
@@ -1753,16 +1417,15 @@ CONFIG_AUTOFS4_FS=m
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=y
-CONFIG_UDF_FS=y
+CONFIG_UDF_FS=m
CONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
@@ -1777,7 +1440,7 @@ CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1786,14 +1449,13 @@ CONFIG_RAMFS=y
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
-CONFIG_AFFS_FS=m
-# CONFIG_ECRYPT_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
+# CONFIG_AFFS_FS is not set
+CONFIG_HFS_FS=y
+CONFIG_HFSPLUS_FS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-CONFIG_CRAMFS=y
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1810,24 +1472,17 @@ CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
+# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
CONFIG_RPCSEC_GSS_KRB5=y
-CONFIG_RPCSEC_GSS_SPKM3=m
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="iso8859-1"
-CONFIG_CIFS=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
@@ -1843,7 +1498,7 @@ CONFIG_AMIGA_PARTITION=y
# CONFIG_ATARI_PARTITION is not set
CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
+CONFIG_BSD_DISKLABEL=y
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
@@ -1859,44 +1514,44 @@ CONFIG_MSDOS_PARTITION=y
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
#
# Distributed Lock Manager
@@ -1906,22 +1561,22 @@ CONFIG_NLS_UTF8=m
#
# Library routines
#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
#
# Instrumentation Support
#
# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
#
# Kernel hacking
@@ -1930,39 +1585,20 @@ CONFIG_PLIST=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_BOOTX_TEXT=y
-# CONFIG_SERIAL_TEXT_DEBUG is not set
-CONFIG_PPC_EARLY_DEBUG=y
-# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
-# CONFIG_PPC_EARLY_DEBUG_G5 is not set
-# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
-CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE=y
-# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
-# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
+CONFIG_SERIAL_TEXT_DEBUG=y
+# CONFIG_PPC_EARLY_DEBUG is not set
#
# Security options
#
-CONFIG_KEYS=y
-# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-# CONFIG_SECURITY_NETWORK_XFRM is not set
-CONFIG_SECURITY_CAPABILITIES=y
-# CONFIG_SECURITY_ROOTPLUG is not set
-CONFIG_SECURITY_SELINUX=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
-CONFIG_SECURITY_SELINUX_DISABLE=y
-CONFIG_SECURITY_SELINUX_DEVELOP=y
-CONFIG_SECURITY_SELINUX_AVC_STATS=y
-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
-# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set
-# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
#
# Cryptographic options
@@ -1970,35 +1606,39 @@ CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
diff --git a/packages/linux/linux-efika_2.6.18+2.6.19-rc6.bb b/packages/linux/linux-efika_2.6.18+2.6.19-rc6.bb
index fec05ad168..7c28e7270e 100644
--- a/packages/linux/linux-efika_2.6.18+2.6.19-rc6.bb
+++ b/packages/linux/linux-efika_2.6.18+2.6.19-rc6.bb
@@ -1,13 +1,13 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
COMPATIBLE_MACHINE = "efika"
SRC_URI = "http://www.efika.de/download/linux-2.6.19-rc6_efika.tgz \
file://0001-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;patch=1 \
- http://www.246tnt.com/files/0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt;patch=1 \
+ file://0001-powerpc-Add-device-tree-fixup-for-the-EFIKA.txt;patch=1 \
file://defconfig \
"
# http://www.246tnt.com/files/0001-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;patch=1 \
@@ -23,7 +23,7 @@ KERNEL_IMAGETYPE = "zImage"
do_configure() {
install -m 644 ${WORKDIR}/defconfig ${S}/.config
- make ARCH=${ARCH} oldconfig
+ yes | make ARCH=${ARCH} oldconfig
}
do_deploy() {
diff --git a/packages/linux/linux-efika_2.6.20.11.bb b/packages/linux/linux-efika_2.6.20.11.bb
new file mode 100644
index 0000000000..d54b642a1b
--- /dev/null
+++ b/packages/linux/linux-efika_2.6.20.11.bb
@@ -0,0 +1,86 @@
+DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+
+COMPATIBLE_MACHINE = "efika"
+
+FILESPATH = "${FILE_DIRNAME}/linux-efika-${PV}:${FILE_DIRNAME}/linux-efika-2.6.20"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
+ file://0001-powerpc-serial-Dispose-irq-mapping-when-done-in-mpc52xx_serial.c.txt;p=1;patch=1 \
+ file://0003-powerpc-Add-device-tree-fixups-for-the-EFIKA.txt;p=1;patch=1 \
+ file://0004-powerpc-Use-common-52xx-of_platform-probe-code-for-EFIKA.txt;p=1;patch=1 \
+ file://0005-powerpc-Restore-proper-link-order-in-platform.txt;p=1;patch=1 \
+ file://0006-Rework-the-OHCI-quirk-mecanism-as-suggested-by-David.txt;p=1;patch=1 \
+ file://0007-Implement-support-for-split-endian-OHCI.txt;p=1;patch=1 \
+ file://0008-ohci-Rework-bus-glue-integration-to-allow-several-at-once.txt;p=1;patch=1 \
+ file://0009-ohci-Add-support-for-OHCI-controller-on-the-of_platform-bus.txt;p=1;patch=1 \
+ file://0010-libata-Add-support-for-the-MPC52xx-ATA-controller.txt;p=1;patch=1 \
+ file://0011-ohci-Whitespace-and-typo-fix-in-ohci-ppc-of.c.txt;p=1;patch=1 \
+ file://0012-ata-Fix-pata_mpc52xx.c-compatible-list.txt;p=1;patch=1 \
+ file://0013-powerpc-serial-Fix-mpc52xx_uart.c-compatible-list.txt;p=1;patch=1 \
+ file://0014-powerpc-Small-cleanup-of-EFIKA-platform.txt;p=1;patch=1 \
+ file://0015-powerpc-Add-a-unified-uevent-handler-for-bus-based-on-of_device.txt;p=1;patch=1 \
+ file://0016-macintosh-Use-the-new-of_device-common-uevent-handler.txt;p=1;patch=1 \
+ file://0017-powerpc-Add-uevent-handler-for-of_platform_bus.txt;p=1;patch=1 \
+ file://0018-powerpc-Add-uevent-handler-for-ibmebus.txt;p=1;patch=1 \
+ file://0019-MPC5200-Bestcomm-platform-driver.txt;p=1;patch=1 \
+ file://0020-Fec-MPC5200-eth-driver.txt;p=1;patch=1 \
+ file://0021-POWERPC-Copy-bestcomm-support-files-into-arch-powerpc.txt;p=1;patch=1 \
+ file://0022-MPC52xx-PCI-now-working-on-lite5200.-ugly-but-working.txt;p=1;patch=1 \
+ file://0023-POWERPC-Make-FEC-work-on-the-lite5200.txt;p=1;patch=1 \
+ file://0024-Add-missing-function-prototype.txt;p=1;patch=1 \
+ file://0025-POWERPC-Misc-EFIKA-fixups-for-rtas-chrp.txt;p=1;patch=1 \
+ file://0026-POWERPC-Cleanup-mpc52xx-PCI-support.txt;p=1;patch=1 \
+ file://0027-POWERPC-Change-name-of-mpc52xx-pci-support-file-in-Makefile.txt;p=1;patch=1 \
+ file://0028-POWERPC-Change-link-order-so-mpc52xx-fec-always-shows-up-as-eth0.txt;p=1;patch=1 \
+ file://0029-POWERPC-Fixup-pr_print-format-for-mpc52xx-pci-support.txt;p=1;patch=1 \
+ file://0030-POWERPC-Add-mpc52xx-lite5200-PCI-support.txt;p=1;patch=1 \
+ file://0031-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;p=1;patch=1 \
+ file://0032-POWERPC-EFIKA-Adds-missing-interrupts-from-bestcomm-node.txt;p=1;patch=1 \
+ file://0033-EFIKA-fullduplex-prpl_aln.txt;p=1;patch=1 \
+ file://v4l.diff;p=1;patch=1 \
+ http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.11.bz2;p=1;patch=1 \
+ file://sched-cfs-v9-v2.6.20.11.patch;p=1;patch=1 \
+ file://defconfig \
+ "
+
+
+S = "${WORKDIR}/linux-2.6.20"
+
+inherit kernel
+
+export ARCH="powerpc"
+
+KERNEL_IMAGETYPE = "zImage"
+
+do_configure() {
+ install -m 644 ${WORKDIR}/defconfig ${S}/.config
+ make ARCH=${ARCH} oldconfig
+}
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ install -d ${STAGING_KERNEL_DIR}/include/asm
+ cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
+
diff --git a/packages/linux/linux-efika_2.6.20.bb b/packages/linux/linux-efika_2.6.20.bb
index c74b6b8c4c..bb2a6dc815 100644
--- a/packages/linux/linux-efika_2.6.20.bb
+++ b/packages/linux/linux-efika_2.6.20.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
COMPATIBLE_MACHINE = "efika"
@@ -37,6 +37,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://0030-POWERPC-Add-mpc52xx-lite5200-PCI-support.txt;p=1;patch=1 \
file://0031-sound-Add-support-for-the-MPC52xx-PSC-AC97-Link.txt;p=1;patch=1 \
file://0032-POWERPC-EFIKA-Adds-missing-interrupts-from-bestcomm-node.txt;p=1;patch=1 \
+ file://0033-EFIKA-fullduplex-prpl_aln.txt;p=1;patch=1 \
file://v4l.diff;p=1;patch=1 \
file://defconfig \
diff --git a/packages/linux/linux-efika_2.6.21+git.bb b/packages/linux/linux-efika_2.6.21+git.bb
new file mode 100644
index 0000000000..0dcc8b3304
--- /dev/null
+++ b/packages/linux/linux-efika_2.6.21+git.bb
@@ -0,0 +1,68 @@
+DESCRIPTION = "Linux Kernel for the EFIKA dev platform"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+PV = "2.6.21+git${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+COMPATIBLE_MACHINE = "efika"
+
+SRC_URI = "file://defconfig"
+
+S = "${WORKDIR}/linux-2.6"
+
+inherit kernel
+
+export ARCH="powerpc"
+
+KERNEL_IMAGETYPE = "zImage"
+
+do_fetch () {
+ cd ${WORKDIR}
+ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
+ cd linux-2.6
+ git fetch git://git.secretlab.ca/git/linux-2.6.git 52xx-dev:sl-52xx
+ git checkout sl-52xx
+ # todo: fix to revision f20d894bd207f8bae9b7869fa039a83e7ab2c6d8 here. It works.
+ mkdir patches
+ cd patches
+ wget http://www.246tnt.com/mpc52xx/2.6.22/0006-powerpc-Set-efika-s-device_type-to-soc.patch
+ wget http://www.246tnt.com/mpc52xx/2.6.22/0007-serial-powerpc-Don-t-shutdown-TX-on-mpc5200-serial.patch
+ wget http://www.246tnt.com/mpc52xx/2.6.22/0008-powerpc-mpc52xx-suspend-to-deep-sleep.patch
+}
+
+do_patch() {
+ cd ${S}
+ patch -F40 -p1 -i patches/0006-powerpc-Set-efika-s-device_type-to-soc.patch
+ patch -F40 -p1 -i patches/0007-serial-powerpc-Don-t-shutdown-TX-on-mpc5200-serial.patch
+ patch -F40 -p1 -i patches/0008-powerpc-mpc52xx-suspend-to-deep-sleep.patch
+}
+
+do_configure() {
+ install -m 644 ${WORKDIR}/defconfig ${S}/.config
+ make ARCH=${ARCH} oldconfig
+}
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ install -d ${STAGING_KERNEL_DIR}/include/asm
+ cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
+
diff --git a/packages/linux/linux-epia-2.6.19.2/epia_defconfig b/packages/linux/linux-epia-2.6.19.2/epia_defconfig
index db84c236cb..4c681d54f5 100644
--- a/packages/linux/linux-epia-2.6.19.2/epia_defconfig
+++ b/packages/linux/linux-epia-2.6.19.2/epia_defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.19.2
-# Fri Jan 26 11:55:32 2007
+# Sun May 27 11:25:48 2007
#
CONFIG_X86_32=y
CONFIG_GENERIC_TIME=y
@@ -464,7 +464,14 @@ CONFIG_BT_HCIUSB_SCO=y
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -850,7 +857,57 @@ CONFIG_VIA_RHINE=y
#
# Wireless LAN (non-hamradio)
#
-# CONFIG_NET_RADIO is not set
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+CONFIG_STRIP=m
+CONFIG_ARLAN=m
+CONFIG_WAVELAN=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+# CONFIG_IPW2200_RADIOTAP is not set
+# CONFIG_IPW2200_PROMISCUOUS is not set
+# CONFIG_IPW2200_QOS is not set
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
#
# Wan interfaces
@@ -972,7 +1029,11 @@ CONFIG_PPDEV=m
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_INTEL=y
+CONFIG_HW_RANDOM_AMD=y
+CONFIG_HW_RANDOM_GEODE=y
+CONFIG_HW_RANDOM_VIA=y
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_GEN_RTC is not set
@@ -1858,7 +1919,45 @@ CONFIG_DOUBLEFAULT=y
#
# Cryptographic options
#
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
#
# Library routines
diff --git a/packages/linux/linux-ezx-2.6.21/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.21/patches/.mtn2git_empty b/packages/linux/linux-ezx-2.6.21/patches/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX
new file mode 100755
index 0000000000..7e7e0f2898
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/Makefile.OpenEZX
@@ -0,0 +1,51 @@
+# Makefile used to build binary images of OpenEZX kernels
+#
+# If you are currently in the linux kernel toplevel dir,
+# you can call this Makefile with:
+# $ make -f path_to/Makefile.OpenEZX
+#
+# Note that you can set the CROSS_COMPILE and QUILT_PATCHES variable
+# in your environment.
+#
+
+PHONES = a780 e680 a1200 e2 e6
+
+CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi-
+QUILT_PATCHES ?= patches
+
+DATE = $(shell date +%Y%m%d)
+
+all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz)
+
+zImages: $(foreach p, $(PHONES), zImage-$(p))
+
+modules: $(foreach p, $(PHONES), modules-$(p).tar.gz)
+
+release: $(foreach p, $(PHONES), tag-$(p))
+ cat md5sums.tmp | gpg --clearsign > md5sums
+ tar -rf ezxrelease.tar md5sums
+ rm -f md5sums.tmp md5sums
+ mv ezxrelease.tar ezxrelease-$(DATE).tar
+
+tag-%: zImage-% modules-%.tar.gz
+ p=$(patsubst tag-%,%,$@) && \
+ tag=$(shell cat include/config/kernel.release)-$(DATE) && \
+ cp zImage-$$p zImage-$$tag-$$p && \
+ cp modules-$$p.tar.gz modules-$$tag-$$p.tar.gz && \
+ tar -rf ezxrelease.tar zImage-$$tag-$$p modules-$$tag-$$p.tar.gz && \
+ md5sum zImage-$$tag-$$p modules-$$tag-$$p.tar.gz >> md5sums.tmp && \
+ rm -f zImage-$$tag-$$p modules-$$tag-$$p.tar.gz
+
+zImage-%: $(QUILT_PATCHES)/defconfig-%
+ cp $< ./.config
+ make ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage
+ mv arch/arm/boot/zImage $@
+
+modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-%
+ cp $< ./.config
+ -find . -name "*.ko" -print0 | xargs -r0 rm
+ mkdir /tmp/$@
+ make ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \
+ INSTALL_MOD_PATH=/tmp/$@ modules modules_install
+ tar -C /tmp/$@ -czf $@ .
+ rm -rf /tmp/$@
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch
new file mode 100755
index 0000000000..0d2640a2e7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a1200-mci.patch
@@ -0,0 +1,135 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-06-02 20:32:31.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-06-02 20:44:29.000000000 -0300
+@@ -97,6 +97,7 @@
+ config PXA_EZX_A1200
+ bool "Motorola A1200 GSM Phone"
+ select PXA27x
++ select EZX_MCI_TF
+
+ config PXA_EZX_E6
+ bool "Motorola E6 GSM Phone"
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:32:26.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:44:56.000000000 -0300
+@@ -13,11 +13,14 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+@@ -25,6 +28,95 @@
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data a1200_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [MMC_VDD_160] = 5,
++ [MMC_VDD_170] = 5,
++ [MMC_VDD_180] = 6,
++ [MMC_VDD_190] = 6,
++ [MMC_VDD_200] = 7,
++ [MMC_VDD_210] = 7,
++ [MMC_VDD_220] = 8,
++ [MMC_VDD_230] = 8,
++ [MMC_VDD_240] = 9,
++ [MMC_VDD_250] = 9,
++ [MMC_VDD_260] = 10,
++ [MMC_VDD_270] = 10,
++ [MMC_VDD_280] = 11,
++ [MMC_VDD_290] = 11,
++ [MMC_VDD_300] = 12,
++ [MMC_VDD_310] = 12,
++ [MMC_VDD_320] = 13,
++ [MMC_VDD_330] = 13,
++ [MMC_VDD_340] = 14,
++ [MMC_VDD_350] = 14,
++ [MMC_VDD_360] = 15,
++};
++
++static int a1200_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ a1200_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++static void a1200_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ if (vdd <= MMC_VDD_360)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void a1200_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data a1200_mci_platform_data = {
++ .ocr_mask = MMC_VDD_160_165|MMC_VDD_18_19|MMC_VDD_20_21
++ |MMC_VDD_22_23|MMC_VDD_24_25|MMC_VDD_26_27
++ |MMC_VDD_28_29|MMC_VDD_30_31|MMC_VDD_32_33
++ |MMC_VDD_34_35|MMC_VDD_35_36,
++ .init = a1200_mci_init,
++ .setpower = a1200_mci_setpower,
++ .exit = a1200_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_a1200 = {
+ .pixclock = 192308,
+ .xres = 240,
+@@ -54,6 +146,7 @@
+ static void __init a1200_init(void)
+ {
+ set_pxa_fb_info(&a1200_fb_info);
++ pxa_set_mci_info(&a1200_mci_platform_data);
+
+ platform_add_devices(devices, ARRAY_SIZE(devices));
+ }
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch
new file mode 100755
index 0000000000..a7ca6362b0
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a1200-ts.patch
@@ -0,0 +1,40 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:32:32.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 20:33:41.000000000 -0300
+@@ -117,6 +117,27 @@
+ .exit = a1200_mci_exit,
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE2,
++ .end = EZX_IRQ_ADCDONE2,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct pxafb_mode_info mode_a1200 = {
+ .pixclock = 192308,
+ .xres = 240,
+@@ -141,6 +162,7 @@
+ };
+
+ static struct platform_device *devices[] __initdata = {
++ &pcap_ts_device,
+ };
+
+ static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-flip.patch
new file mode 100755
index 0000000000..b93b1b14e4
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-flip.patch
@@ -0,0 +1,44 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-06-08 18:38:47.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-06-08 18:38:50.000000000 +0200
+@@ -17,6 +17,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
+ #include <linux/input.h>
++#include <linux/gpio_keys.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -214,8 +215,31 @@
+ },
+ };
+
++static struct gpio_keys_button a780flip_buttons[] = {
++ [0] = {
++ .keycode = KEY_SLEEP,
++ .gpio = GPIO_FLIP_PIN,
++ .desc = "A780 flip",
++ },
++};
++
++static struct gpio_keys_platform_data a780flip_platform_data = {
++ .buttons = a780flip_buttons,
++ .nbuttons = 1,
++};
++
++static struct platform_device a780flip_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &a780flip_platform_data,
++ },
++};
++
++
+ static struct platform_device *devices[] __initdata = {
+ &pcap_ts_device,
++ &a780flip_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch
new file mode 100755
index 0000000000..902889abe6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-kbd.patch
@@ -0,0 +1,90 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-05-24 00:54:38.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-24 00:56:22.000000000 -0300
+@@ -16,18 +16,21 @@
+ #include <linux/fb.h>
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
++#include <linux/input.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *);
+
+ #ifdef CONFIG_EZX_PCAP
+ extern int ezx_pcap_mmcsd_power(int);
+@@ -141,6 +144,55 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++static unsigned char a780_keycode[] = {
++ /* row 0 */
++ KEY_PHONE, KEY_MENU, KEY_CANCEL, KEY_PAGEUP, KEY_UP,
++ /* row 1 */
++ KEY_KP1, KEY_KP2, KEY_KP3, KEY_ENTER, KEY_KPENTER, /*center joypad */
++ /* row 2 */
++ KEY_KP4, KEY_KP5, KEY_KP6, KEY_RECORD, KEY_LEFT,
++ /* row 3 */
++ KEY_KP7, KEY_KP8, KEY_KP9, KEY_HOME, KEY_RIGHT,
++ /* row 4 */
++ KEY_KPASTERISK, KEY_KP0, KEY_KPDOT, KEY_PAGEDOWN, KEY_DOWN,
++};
++
++static unsigned char a780_direct_keycode[] = {
++ KEY_CAMERA,
++};
++
++static int a780_kbd_init(void)
++{
++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, voice_rec */
++ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
++ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
++ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */
++ PKWR = 0xec400;
++ PGSR3 |= 0xf80;
++ return 0;
++}
++
++static struct pxakbd_platform_data a780_kbd_platform_data = {
++ .init = &a780_kbd_init,
++ .scan_interval = HZ/40,
++ .matrix = {
++ .keycode = a780_keycode,
++ .cols = 5,
++ .rows = 5,
++ },
++ .direct = {
++ .keycode = a780_direct_keycode,
++ .num = 1,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ };
+
+@@ -159,6 +211,7 @@
+
+ set_pxa_fb_info(&a780_fb_info);
+ pxa_set_mci_info(&a780_mci_platform_data);
++ pxa_set_kbd_info(&a780_kbd_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-leds.patch
new file mode 100755
index 0000000000..5a9a9383f7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-leds.patch
@@ -0,0 +1,182 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.21/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/Kconfig 2007-06-08 18:33:45.000000000 +0200
++++ linux-2.6.21/drivers/leds/Kconfig 2007-06-08 18:39:04.000000000 +0200
+@@ -104,6 +104,13 @@
+ These triggers allow kernel events to drive the LEDs and can
+ be configured via sysfs. If unsure, say Y.
+
++config LEDS_A780
++ tristate "LED Support for the Motorola A780 GSM Phone"
++ depends LEDS_CLASS && PXA_EZX_A780
++ help
++ This option enables support for the LEDs on the
++ Motorola A780 GSM Phone.
++
+ config LEDS_TRIGGER_TIMER
+ tristate "LED Timer Trigger"
+ depends on LEDS_TRIGGERS
+Index: linux-2.6.21/drivers/leds/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/Makefile 2007-06-08 18:33:45.000000000 +0200
++++ linux-2.6.21/drivers/leds/Makefile 2007-06-08 18:39:04.000000000 +0200
+@@ -16,6 +16,7 @@
+ obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
+ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
+ obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
++obj-$(CONFIG_LEDS_A780) += leds-a780.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
+Index: linux-2.6.21/drivers/leds/leds-a780.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/leds/leds-a780.c 2007-06-08 18:39:04.000000000 +0200
+@@ -0,0 +1,122 @@
++/*
++ * EZX Platform LED Driver for the Motorola A780 GSM Phone
++ *
++ * Copyright 2006 Vanille-Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * Based on keylight.c by Motorola and leds-corgi.c by Richard Purdie
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <asm/arch/ezx-pcap.h>
++
++static void a780led_main_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if ( value > 31 ) value = 31;
++ printk( KERN_DEBUG "a780led_main_set: %d\n", value );
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL0, value & 0x01);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL1, value & 0x02);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL2, value & 0x04);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL3, value & 0x08);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL4, value & 0x10);
++}
++
++static void a780led_aux_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if ( value > 31 ) value = 31;
++ printk( KERN_DEBUG "a780led_aux_set: %d\n", value );
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL0, value & 0x01);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL1, value & 0x02);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL2, value & 0x04);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL3, value & 0x08);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL4, value & 0x10);
++}
++
++static struct led_classdev a780_main_led = {
++ .name = "a780:main",
++ .default_trigger = "none",
++ .brightness_set = a780led_main_set,
++};
++
++static struct led_classdev a780_aux_led = {
++ .name = "a780:aux",
++ .default_trigger = "none",
++ .brightness_set = a780led_aux_set,
++};
++
++#ifdef CONFIG_PM
++static int a780led_suspend(struct platform_device *dev, pm_message_t state)
++{
++ led_classdev_suspend(&a780_main_led);
++ led_classdev_suspend(&a780_aux_led);
++ return 0;
++}
++
++static int a780led_resume(struct platform_device *dev)
++{
++ led_classdev_resume(&a780_main_led);
++ led_classdev_resume(&a780_aux_led);
++ return 0;
++}
++#endif
++
++static int a780led_probe(struct platform_device *pdev)
++{
++ int ret;
++
++ ret = led_classdev_register(&pdev->dev, &a780_main_led);
++ if (ret < 0)
++ return ret;
++
++ ret = led_classdev_register(&pdev->dev, &a780_aux_led);
++ if (ret < 0)
++ led_classdev_unregister(&a780_main_led);
++
++ return ret;
++}
++
++static int a780led_remove(struct platform_device *pdev)
++{
++ led_classdev_unregister(&a780_main_led);
++ led_classdev_unregister(&a780_aux_led);
++ return 0;
++}
++
++static struct platform_driver a780led_driver = {
++ .probe = a780led_probe,
++ .remove = a780led_remove,
++#ifdef CONFIG_PM
++ .suspend = a780led_suspend,
++ .resume = a780led_resume,
++#endif
++ .driver = {
++ .name = "a780-led",
++ },
++};
++
++static int __init a780led_init(void)
++{
++ return platform_driver_register(&a780led_driver);
++}
++
++static void __exit a780led_exit(void)
++{
++ a780led_main_set( &a780_main_led, 0 );
++ a780led_aux_set( &a780_aux_led, 0 );
++ platform_driver_unregister(&a780led_driver);
++}
++
++module_init(a780led_init);
++module_exit(a780led_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Motorola A780 LED driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-06-08 18:38:50.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-06-08 18:39:04.000000000 +0200
+@@ -236,10 +236,15 @@
+ },
+ };
+
++static struct platform_device a780led_device = {
++ .name = "a780-led",
++ .id = -1,
++};
+
+ static struct platform_device *devices[] __initdata = {
+ &pcap_ts_device,
+ &a780flip_device,
++ &a780led_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-mci.patch
new file mode 100755
index 0000000000..4877bfffa5
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-mci.patch
@@ -0,0 +1,135 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-05-24 00:44:14.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-05-24 00:47:01.000000000 -0300
+@@ -14,11 +14,14 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+@@ -26,6 +29,95 @@
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data a780_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [MMC_VDD_160] = 5,
++ [MMC_VDD_170] = 5,
++ [MMC_VDD_180] = 6,
++ [MMC_VDD_190] = 6,
++ [MMC_VDD_200] = 7,
++ [MMC_VDD_210] = 7,
++ [MMC_VDD_220] = 8,
++ [MMC_VDD_230] = 8,
++ [MMC_VDD_240] = 9,
++ [MMC_VDD_250] = 9,
++ [MMC_VDD_260] = 10,
++ [MMC_VDD_270] = 10,
++ [MMC_VDD_280] = 11,
++ [MMC_VDD_290] = 11,
++ [MMC_VDD_300] = 12,
++ [MMC_VDD_310] = 12,
++ [MMC_VDD_320] = 13,
++ [MMC_VDD_330] = 13,
++ [MMC_VDD_340] = 14,
++ [MMC_VDD_350] = 14,
++ [MMC_VDD_360] = 15,
++};
++
++static int a780_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ a780_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++static void a780_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ if (vdd <= MMC_VDD_360)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void a780_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data a780_mci_platform_data = {
++ .ocr_mask = MMC_VDD_160_165|MMC_VDD_18_19|MMC_VDD_20_21
++ |MMC_VDD_22_23|MMC_VDD_24_25|MMC_VDD_26_27
++ |MMC_VDD_28_29|MMC_VDD_30_31|MMC_VDD_32_33
++ |MMC_VDD_34_35|MMC_VDD_35_36,
++ .init = a780_mci_init,
++ .setpower = a780_mci_setpower,
++ .exit = a780_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_a780 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -66,6 +158,7 @@
+ PSLR = 0x05800f00;
+
+ set_pxa_fb_info(&a780_fb_info);
++ pxa_set_mci_info(&a780_mci_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-05-24 00:47:13.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-05-24 00:48:11.000000000 -0300
+@@ -87,6 +87,7 @@
+ config PXA_EZX_A780
+ bool "Motorola A780 GSM Phone"
+ select PXA27x
++ select EZX_MCI_TF
+
+ config PXA_EZX_E2
+ bool "Motorola E2 GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-ts.patch
new file mode 100755
index 0000000000..a4a476ac59
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-ts.patch
@@ -0,0 +1,40 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-a780.c 2007-06-02 20:32:48.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-06-02 20:33:10.000000000 -0300
+@@ -121,6 +121,27 @@
+ .exit = a780_mci_exit,
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE2,
++ .end = EZX_IRQ_ADCDONE2,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct pxafb_mode_info mode_a780 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -194,6 +215,7 @@
+ };
+
+ static struct platform_device *devices[] __initdata = {
++ &pcap_ts_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch
new file mode 100755
index 0000000000..7436c40f5f
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/a780-vibrator.patch
@@ -0,0 +1,151 @@
+Index: linux-2.6.21/drivers/leds/leds-a780.c
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/leds-a780.c 2007-05-08 15:09:26.000000000 -0300
++++ linux-2.6.21/drivers/leds/leds-a780.c 2007-05-08 15:19:26.000000000 -0300
+@@ -18,10 +18,13 @@
+ #include <linux/leds.h>
+ #include <asm/arch/ezx-pcap.h>
+
++extern void ezx_pcap_vibrator_level(u_int32_t);
++
+ static void a780led_main_set(struct led_classdev *led_cdev, enum led_brightness value)
+ {
+ if ( value > 31 ) value = 31;
+ printk( KERN_DEBUG "a780led_main_set: %d\n", value );
++#warning FIXME: use read/write operations
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL0, value & 0x01);
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL1, value & 0x02);
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL2, value & 0x04);
+@@ -33,6 +36,7 @@
+ {
+ if ( value > 31 ) value = 31;
+ printk( KERN_DEBUG "a780led_aux_set: %d\n", value );
++#warning FIXME: use read/write operations
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL0, value & 0x01);
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL1, value & 0x02);
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL2, value & 0x04);
+@@ -40,6 +44,43 @@
+ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL4, value & 0x10);
+ }
+
++static void a780vibrator_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if ( value > 4 ) value = 4;
++ printk( KERN_DEBUG "a780vibrator_set: %d\n", value );
++
++ switch(value)
++ {
++ case 0:
++ /* turn off vibrator */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 0);
++ break;
++
++ case 1:
++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1);
++ break;
++
++ case 2:
++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1);
++ break;
++
++ case 3:
++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL2);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1);
++ break;
++
++ case 4:
++ ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN, 1);
++ break;
++
++ default:
++ break;
++ }
++}
++
+ static struct led_classdev a780_main_led = {
+ .name = "a780:main",
+ .default_trigger = "none",
+@@ -52,11 +93,18 @@
+ .brightness_set = a780led_aux_set,
+ };
+
++static struct led_classdev a780_vibrator = {
++ .name = "a780:vibrator",
++ .default_trigger = "none",
++ .brightness_set = a780vibrator_set,
++};
++
+ #ifdef CONFIG_PM
+ static int a780led_suspend(struct platform_device *dev, pm_message_t state)
+ {
+ led_classdev_suspend(&a780_main_led);
+ led_classdev_suspend(&a780_aux_led);
++ led_classdev_suspend(&a780_vibrator);
+ return 0;
+ }
+
+@@ -64,6 +112,7 @@
+ {
+ led_classdev_resume(&a780_main_led);
+ led_classdev_resume(&a780_aux_led);
++ led_classdev_resume(&a780_vibrator);
+ return 0;
+ }
+ #endif
+@@ -77,8 +126,16 @@
+ return ret;
+
+ ret = led_classdev_register(&pdev->dev, &a780_aux_led);
+- if (ret < 0)
++ if (ret < 0) {
++ led_classdev_unregister(&a780_main_led);
++ return ret;
++ }
++
++ ret = led_classdev_register(&pdev->dev, &a780_vibrator);
++ if (ret < 0) {
+ led_classdev_unregister(&a780_main_led);
++ led_classdev_unregister(&a780_aux_led);
++ }
+
+ return ret;
+ }
+@@ -87,6 +144,7 @@
+ {
+ led_classdev_unregister(&a780_main_led);
+ led_classdev_unregister(&a780_aux_led);
++ led_classdev_unregister(&a780_vibrator);
+ return 0;
+ }
+
+@@ -111,6 +169,8 @@
+ {
+ a780led_main_set( &a780_main_led, 0 );
+ a780led_aux_set( &a780_aux_led, 0 );
++ a780vibrator_set( &a780_vibrator, 0 );
++
+ platform_driver_unregister(&a780led_driver);
+ }
+
+Index: linux-2.6.21/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/Kconfig 2007-05-08 15:09:26.000000000 -0300
++++ linux-2.6.21/drivers/leds/Kconfig 2007-05-08 15:09:26.000000000 -0300
+@@ -105,11 +105,11 @@
+ be configured via sysfs. If unsure, say Y.
+
+ config LEDS_A780
+- tristate "LED Support for the Motorola A780 GSM Phone"
++ tristate "LED/Vibrator Support for the Motorola A780 GSM Phone"
+ depends LEDS_CLASS && PXA_EZX_A780
+ help
+- This option enables support for the LEDs on the
+- Motorola A780 GSM Phone.
++ This option enables support for the LEDs and the
++ vibrator on the Motorola A780 GSM Phone.
+
+ config LEDS_E680
+ tristate "LED Support for the Motorola E680(i) GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch
new file mode 100755
index 0000000000..1fc8283ca2
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/asoc-pxa-ssp.patch
@@ -0,0 +1,755 @@
+Index: linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.c 2007-05-14 21:14:38.000000000 -0300
+@@ -0,0 +1,671 @@
++/*
++ * pxa2xx-ssp.c -- ALSA Soc Audio Layer
++ *
++ * Copyright 2005 Wolfson Microelectronics PLC.
++ * Author: Liam Girdwood
++ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 12th Aug 2005 Initial version.
++ *
++ * TODO:
++ * o The SSP driver _mostly_ works, however is in need of testing and
++ * someone with time to complete it.
++ * o Test network mode for > 16bit sample size
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/initval.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/audio.h>
++#include <asm/arch/ssp.h>
++
++#include "pxa2xx-pcm.h"
++#include "pxa2xx-ssp.h"
++
++#define PXA_SSP_DEBUG 1
++
++/*
++ * The following should be defined in pxa-regs.h
++ */
++#define SSCR0_ACS (1 << 30) /* Audio Clock Select */
++#define SSACD_SCDB (1 << 3) /* SSPSYSCLK Divider Bypass (SSCR0[ACS] must be set) */
++#define SSACD_ACPS(x) (x << 4) /* Audio clock PLL select */
++#define SSACD_ACDS(x) (x << 0) /* Audio clock divider select */
++
++/*
++ * SSP audio private data
++ */
++struct ssp_priv {
++ unsigned int sysclk;
++};
++
++static struct ssp_priv ssp_clk[3];
++static struct ssp_dev ssp[3];
++#ifdef CONFIG_PM
++static struct ssp_state ssp_state[3];
++#endif
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_out = {
++ .name = "SSP1 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRTXSSDR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_in = {
++ .name = "SSP1 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRRXSSDR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_out = {
++ .name = "SSP1 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRTXSSDR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_in = {
++ .name = "SSP1 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRRXSSDR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_out = {
++ .name = "SSP2 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRTXSS2DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_in = {
++ .name = "SSP2 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRRXSS2DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_out = {
++ .name = "SSP2 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRTXSS2DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_in = {
++ .name = "SSP2 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRRXSS2DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_out = {
++ .name = "SSP3 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRTXSS3DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_in = {
++ .name = "SSP3 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRRXSS3DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_out = {
++ .name = "SSP3 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRTXSS3DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_in = {
++ .name = "SSP3 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRRXSS3DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params *ssp_dma_params[3][4] = {
++ {&pxa2xx_ssp1_pcm_mono_out, &pxa2xx_ssp1_pcm_mono_in,
++ &pxa2xx_ssp1_pcm_stereo_out,&pxa2xx_ssp1_pcm_stereo_in,},
++ {&pxa2xx_ssp2_pcm_mono_out, &pxa2xx_ssp2_pcm_mono_in,
++ &pxa2xx_ssp2_pcm_stereo_out, &pxa2xx_ssp2_pcm_stereo_in,},
++ {&pxa2xx_ssp3_pcm_mono_out, &pxa2xx_ssp3_pcm_mono_in,
++ &pxa2xx_ssp3_pcm_stereo_out,&pxa2xx_ssp3_pcm_stereo_in,},
++};
++
++static int pxa2xx_ssp_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret = 0;
++
++ if (!rtd->dai->cpu_dai->active) {
++ ret = ssp_init (&ssp[cpu_dai->id], cpu_dai->id + 1,
++ SSP_NO_IRQ);
++ if (ret < 0)
++ return ret;
++ ssp_disable(&ssp[cpu_dai->id]);
++ }
++ return ret;
++}
++
++static void pxa2xx_ssp_shutdown(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ if (!cpu_dai->active) {
++ ssp_disable(&ssp[cpu_dai->id]);
++ ssp_exit(&ssp[cpu_dai->id]);
++ }
++}
++
++#if defined (CONFIG_PXA27x)
++static int cken[3] = {CKEN23_SSP1, CKEN3_SSP2, CKEN4_SSP3};
++#else
++static int cken[3] = {CKEN3_SSP, CKEN9_NSSP, CKEN10_ASSP};
++#endif
++
++#ifdef CONFIG_PM
++
++static int pxa2xx_ssp_suspend(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++ if (!dai->active)
++ return 0;
++
++ ssp_save_state(&ssp[dai->id], &ssp_state[dai->id]);
++ pxa_set_cken(cken[dai->id], 0);
++ return 0;
++}
++
++static int pxa2xx_ssp_resume(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++ if (!dai->active)
++ return 0;
++
++ pxa_set_cken(cken[dai->id], 1);
++ ssp_restore_state(&ssp[dai->id], &ssp_state[dai->id]);
++ ssp_enable(&ssp[dai->id]);
++
++ return 0;
++}
++
++#else
++#define pxa2xx_ssp_suspend NULL
++#define pxa2xx_ssp_resume NULL
++#endif
++
++/*
++ * Set the SSP ports SYSCLK.
++ */
++static int pxa2xx_ssp_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai,
++ int clk_id, unsigned int freq, int dir)
++{
++ int port = cpu_dai->id + 1;
++ u32 sscr0 = SSCR0_P(port) &
++ ~(SSCR0_ECS | SSCR0_NCS | SSCR0_MOD | SSCR0_ACS);
++
++ switch (clk_id) {
++ case PXA2XX_SSP_CLK_PLL:
++ /* Internal PLL is fixed on pxa25x and pxa27x */
++#ifdef CONFIG_PXA27x
++ ssp_clk[cpu_dai->id].sysclk = 13000000;
++#else
++ ssp_clk[cpu_dai->id].sysclk = 1843200;
++#endif
++ break;
++ case PXA2XX_SSP_CLK_EXT:
++ ssp_clk[cpu_dai->id].sysclk = freq;
++ sscr0 |= SSCR0_ECS;
++ break;
++ case PXA2XX_SSP_CLK_NET:
++ ssp_clk[cpu_dai->id].sysclk = freq;
++ sscr0 |= SSCR0_NCS | SSCR0_MOD;
++ break;
++ case PXA2XX_SSP_CLK_AUDIO:
++ ssp_clk[cpu_dai->id].sysclk = 0;
++ SSCR0_P(port) |= SSCR0_SerClkDiv(1);
++ sscr0 |= SSCR0_ACS;
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ /* the SSP CKEN clock must be disabled when changing SSP clock mode */
++ pxa_set_cken(cken[cpu_dai->id], 0);
++ SSCR0_P(port) |= sscr0;
++ pxa_set_cken(cken[cpu_dai->id], 1);
++ return 0;
++}
++
++/*
++ * Set the SSP clock dividers.
++ */
++static int pxa2xx_ssp_set_dai_clkdiv(struct snd_soc_cpu_dai *cpu_dai,
++ int div_id, int div)
++{
++ int port = cpu_dai->id + 1;
++
++ switch (div_id) {
++ case PXA2XX_SSP_AUDIO_DIV_ACDS:
++ SSACD_P(port) &= ~ 0x7;
++ SSACD_P(port) |= SSACD_ACDS(div);
++ break;
++ case PXA2XX_SSP_AUDIO_DIV_SCDB:
++ SSACD_P(port) &= ~0x8;
++ if (div == PXA2XX_SSP_CLK_SCDB_1)
++ SSACD_P(port) |= SSACD_SCDB;
++ break;
++ case PXA2XX_SSP_DIV_SCR:
++ SSCR0_P(port) &= ~SSCR0_SCR;
++ SSCR0_P(port) |= SSCR0_SerClkDiv(div);
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++/*
++ * Configure the PLL frequency pxa27x and (afaik - pxa320 only)
++ */
++static int pxa2xx_ssp_set_dai_pll(struct snd_soc_cpu_dai *cpu_dai,
++ int pll_id, unsigned int freq_in, unsigned int freq_out)
++{
++ int port = cpu_dai->id + 1;
++
++ SSACD_P(port) &= ~0x70;
++ switch (freq_out) {
++ case 5622000:
++ break;
++ case 11345000:
++ SSACD_P(port) |= (0x1 << 4);
++ break;
++ case 12235000:
++ SSACD_P(port) |= (0x2 << 4);
++ break;
++ case 14857000:
++ SSACD_P(port) |= (0x3 << 4);
++ break;
++ case 32842000:
++ SSACD_P(port) |= (0x4 << 4);
++ break;
++ case 48000000:
++ SSACD_P(port) |= (0x5 << 4);
++ break;
++ }
++ return 0;
++}
++
++/*
++ * Set the active slots in TDM/Network mode
++ */
++static int pxa2xx_ssp_set_dai_tdm_slot(struct snd_soc_cpu_dai *cpu_dai,
++ unsigned int mask, int slots)
++{
++ int port = cpu_dai->id + 1;
++
++ SSCR0_P(port) &= ~SSCR0_SlotsPerFrm(7);
++
++ /* set number of active slots */
++ SSCR0_P(port) |= SSCR0_SlotsPerFrm(slots);
++
++ /* set active slot mask */
++ SSTSA_P(port) = mask;
++ SSRSA_P(port) = mask;
++ return 0;
++}
++
++/*
++ * Tristate the SSP DAI lines
++ */
++static int pxa2xx_ssp_set_dai_tristate(struct snd_soc_cpu_dai *cpu_dai,
++ int tristate)
++{
++ int port = cpu_dai->id + 1;
++
++ if (tristate)
++ SSCR1_P(port) &= ~SSCR1_TTE;
++ else
++ SSCR1_P(port) |= SSCR1_TTE;
++
++ return 0;
++}
++
++/*
++ * Set up the SSP DAI format.
++ * The SSP Port must be inactive before calling this function as the
++ * physical interface format is changed.
++ */
++static int pxa2xx_ssp_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai,
++ unsigned int fmt)
++{
++ int port = cpu_dai->id + 1;
++
++ /* reset port settings */
++ SSCR0_P(port) = 0;
++ SSCR1_P(port) = 0;
++ SSPSP_P(port) = 0;
++
++ /* NOTE: I2S emulation is still very much work in progress here */
++
++ /* FIXME: this is what wince uses for msb */
++ if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB) {
++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_TISSP | SSCR0_DataSize(16);
++
++// SSCR1_P(port) = SSCR1_RxTresh(8) | SSCR1_TxTresh(8); /* doesn't seem to be needed */
++ return 0;
++ }
++
++ /* check for I2S emulation mode - handle it separately */
++ if (((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_I2S) ||
++ ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB)) {
++ /* 8.4.11 */
++
++ /* Only SSCR0[NCS] or SSCR0[ECS] bit fields settings are optional */
++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_PSP | SSCR0_DataSize(16);
++
++ /* SSCR1 = 0x203C3C03 */
++ /* SSCR1[SCLKDIR] and SSCR1[SFRMDIR] must be cleared (master only ???),
++ * all other bit fields settings are optional. */
++ //SSCR1_P(port) &= ~(SSCR1_SCLKDIR | SSCR1_SFRMDIR);
++
++ /* set FIFO thresholds */
++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1);
++
++ /* normal: */
++ /* all bit fields must be cleared except: FSRT = 1 and
++ * SFRMWDTH = 16, DMYSTART=0,1) */
++ SSPSP_P(port) = SSPSP_FSRT | SSPSP_SFRMWDTH(16) | SSPSP_DMYSTRT(0);
++ return 0;
++ }
++
++ SSCR0_P(port) |= SSCR0_PSP;
++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1) |
++ SSCR1_TRAIL | SSCR1_RWOT;
++
++ switch(fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++ case SND_SOC_DAIFMT_CBM_CFM:
++ SSCR1_P(port) |= (SSCR1_SCLKDIR | SSCR1_SFRMDIR);
++ break;
++ case SND_SOC_DAIFMT_CBM_CFS:
++ SSCR1_P(port) |= SSCR1_SCLKDIR;
++ break;
++ case SND_SOC_DAIFMT_CBS_CFM:
++ SSCR1_P(port) |= SSCR1_SFRMDIR;
++ break;
++ case SND_SOC_DAIFMT_CBS_CFS:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++ case SND_SOC_DAIFMT_NB_NF:
++ SSPSP_P(port) |= SSPSP_SFRMP | SSPSP_FSRT;
++ break;
++ case SND_SOC_DAIFMT_IB_IF:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++ case SND_SOC_DAIFMT_DSP_A:
++ SSPSP_P(port) |= SSPSP_DMYSTRT(1);
++ case SND_SOC_DAIFMT_DSP_B:
++ SSPSP_P(port) |= SSPSP_SCMODE(2);
++ break;
++ case SND_SOC_DAIFMT_I2S:
++ case SND_SOC_DAIFMT_MSB:
++ /* handled above */
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++/*
++ * Set the SSP audio DMA parameters and sample size.
++ * Can be called multiple times by oss emulation.
++ */
++static int pxa2xx_ssp_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int dma = 0, chn = params_channels(params);
++ int port = cpu_dai->id + 1;
++
++ /* select correct DMA params */
++ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
++ dma = 1; /* capture DMA offset is 1,3 */
++ if (chn == 2)
++ dma += 2; /* stereo DMA offset is 2, mono is 0 */
++ cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma];
++
++ /* we can only change the settings if the port is not in use */
++ if (SSCR0_P(port) & SSCR0_SSE)
++ return 0;
++
++ /* clear selected SSP bits */
++ SSCR0_P(port) &= ~(SSCR0_DSS | SSCR0_EDSS);
++
++ /* bit size */
++ switch(params_format(params)) {
++ case SNDRV_PCM_FORMAT_S16_LE:
++ SSCR0_P(port) |= SSCR0_DataSize(16);
++ break;
++ case SNDRV_PCM_FORMAT_S24_LE:
++ SSCR0_P(port) |=(SSCR0_EDSS | SSCR0_DataSize(8));
++ /* we must be in network mode (2 slots) for 24 bit stereo */
++ break;
++ case SNDRV_PCM_FORMAT_S32_LE:
++ SSCR0_P(port) |= (SSCR0_EDSS | SSCR0_DataSize(16));
++ /* we must be in network mode (2 slots) for 32 bit stereo */
++ break;
++ }
++
++#if PXA_SSP_DEBUG
++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x SSACD %x\n",
++ SSCR0_P(port), SSCR1_P(port),
++ SSTO_P(port), SSPSP_P(port),
++ SSSR_P(port), SSACD_P(port));
++#endif
++ return 0;
++}
++
++static int pxa2xx_ssp_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret = 0;
++ int port = cpu_dai->id + 1;
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_RESUME:
++ ssp_enable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) |= SSCR1_TSRE;
++ else
++ SSCR1_P(port) |= SSCR1_RSRE;
++ SSSR_P(port) |= SSSR_P(port);
++ break;
++ case SNDRV_PCM_TRIGGER_START:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) |= SSCR1_TSRE;
++ else
++ SSCR1_P(port) |= SSCR1_RSRE;
++ ssp_enable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) &= ~SSCR1_TSRE;
++ else
++ SSCR1_P(port) &= ~SSCR1_RSRE;
++ break;
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ ssp_disable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) &= ~SSCR1_TSRE;
++ else
++ SSCR1_P(port) &= ~SSCR1_RSRE;
++ break;
++
++ default:
++ ret = -EINVAL;
++ }
++#if PXA_SSP_DEBUG
++ printk("trig cmd %d\n", cmd);
++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n",
++ SSCR0_P(port), SSCR1_P(port),
++ SSTO_P(port), SSPSP_P(port),
++ SSSR_P(port));
++#endif
++ return ret;
++}
++
++#define PXA2XX_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
++ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
++
++#define PXA2XX_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
++ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
++
++struct snd_soc_cpu_dai pxa_ssp_dai[] = {
++ { .name = "pxa2xx-ssp1",
++ .id = 0,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++ { .name = "pxa2xx-ssp2",
++ .id = 1,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++ { .name = "pxa2xx-ssp3",
++ .id = 2,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++};
++EXPORT_SYMBOL_GPL(pxa_ssp_dai);
++
++/* Module information */
++MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
++MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/sound/soc/pxa/pxa2xx-ssp.h 2007-05-14 21:14:38.000000000 -0300
+@@ -0,0 +1,42 @@
++/*
++ * linux/sound/arm/pxa2xx-ssp.h
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#ifndef _PXA2XX_SSP_H
++#define _PXA2XX_SSP_H
++
++/* pxa2xx DAI SSP ID's */
++#define PXA2XX_DAI_SSP1 0
++#define PXA2XX_DAI_SSP2 1
++#define PXA2XX_DAI_SSP3 2
++
++/* SSP clock sources */
++#define PXA2XX_SSP_CLK_PLL 0
++#define PXA2XX_SSP_CLK_EXT 1
++#define PXA2XX_SSP_CLK_NET 2
++#define PXA2XX_SSP_CLK_AUDIO 3
++
++/* SSP audio dividers */
++#define PXA2XX_SSP_AUDIO_DIV_ACDS 0
++#define PXA2XX_SSP_AUDIO_DIV_SCDB 1
++#define PXA2XX_SSP_DIV_SCR 2
++
++/* SSP ACDS audio dividers values */
++#define PXA2XX_SSP_CLK_AUDIO_DIV_1 0
++#define PXA2XX_SSP_CLK_AUDIO_DIV_2 1
++#define PXA2XX_SSP_CLK_AUDIO_DIV_4 2
++#define PXA2XX_SSP_CLK_AUDIO_DIV_8 3
++#define PXA2XX_SSP_CLK_AUDIO_DIV_16 4
++#define PXA2XX_SSP_CLK_AUDIO_DIV_32 5
++
++/* SSP divider bypass */
++#define PXA2XX_SSP_CLK_SCDB_4 0
++#define PXA2XX_SSP_CLK_SCDB_1 1
++
++extern struct snd_soc_cpu_dai pxa_ssp_dai[3];
++
++#endif
+Index: linux-2.6.21/sound/soc/pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/Kconfig 2007-05-14 21:16:22.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/Kconfig 2007-05-14 21:17:01.000000000 -0300
+@@ -20,6 +20,10 @@
+ config SND_PXA2XX_SOC_I2S
+ tristate
+
++config SND_PXA2XX_SOC_SSP
++ tristate
++ select PXA_SSP
++
+ config SND_PXA2XX_SOC_CORGI
+ tristate "SoC Audio support for Sharp Zaurus SL-C7x0"
+ depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx
+Index: linux-2.6.21/sound/soc/pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/Makefile 2007-05-14 21:14:52.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/Makefile 2007-05-14 21:16:10.000000000 -0300
+@@ -2,10 +2,12 @@
+ snd-soc-pxa2xx-objs := pxa2xx-pcm.o
+ snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o
+ snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o
++snd-soc-pxa2xx-ssp-objs := pxa2xx-ssp.o
+
+ obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o
++obj-$(CONFIG_SND_PXA2XX_SOC_SSP) += snd-soc-pxa2xx-ssp.o
+
+ # PXA Machine Support
+ snd-soc-corgi-objs := corgi.o
diff --git a/packages/linux/linux-ezx-2.6.21/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.21/patches/defconfig-a1200
new file mode 100755
index 0000000000..36021906b7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/defconfig-a1200
@@ -0,0 +1,1103 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.4
+# Wed Jun 13 17:26:12 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+CONFIG_PXA_EZX_A1200=y
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_MCI_TF=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_BACKLIGHT_EZX is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-ezx-2.6.21/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.21/patches/defconfig-a780
new file mode 100755
index 0000000000..bd794af856
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/defconfig-a780
@@ -0,0 +1,1224 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Sat Jun 2 19:52:36 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+CONFIG_PXA_EZX_A780=y
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_MCI_TF=y
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_A780=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_EZX=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-ezx-2.6.21/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e2
new file mode 100755
index 0000000000..be512457d9
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e2
@@ -0,0 +1,1092 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.4
+# Wed Jun 13 17:29:50 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+CONFIG_PXA_EZX_E2=y
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_BACKLIGHT_EZX is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-ezx-2.6.21/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e6
new file mode 100755
index 0000000000..75ee2803d9
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e6
@@ -0,0 +1,1102 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.4
+# Wed Jun 13 17:29:19 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+CONFIG_PXA_EZX_E6=y
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_BACKLIGHT_EZX is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-ezx-2.6.21/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e680
new file mode 100755
index 0000000000..d180351886
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/defconfig-e680
@@ -0,0 +1,1224 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Sat Jun 2 18:29:02 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+CONFIG_PXA_EZX_E680=y
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_MCI_SD=y
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_E680=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_EZX=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log
new file mode 100755
index 0000000000..6b15077676
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/dmesg-a780.log
@@ -0,0 +1,299 @@
+<5>Linux version 2.6.21-ezxdev (wyrm@vault) (gcc version 4.1.1) #222 PREEMPT Tue May 8 15:19:34 BRT 2007
+<4>CPU: XScale-PXA270 [69054117] revision 7 (ARMv5TE), cr=0000397f
+<4>Machine: Motorola Ezx Platform
+<4>Memory policy: ECC disabled, Data cache writeback
+<7>On node 0 totalpages: 12288
+<7> DMA zone: 416 pages used for memmap
+<7> DMA zone: 0 pages reserved
+<7> DMA zone: 11872 pages, LIFO batch:1
+<7> Normal zone: 0 pages used for memmap
+<6>Run Mode clock: 195.00MHz (*15)
+<6>Turbo Mode clock: 292.50MHz (*1.5, active)
+<6>Memory clock: 195.00MHz (/2)
+<6>System bus clock: 195.00MHz
+<4>CPU0: D VIVT undefined 5 cache
+<4>CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
+<4>CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
+<4>Built 1 zonelists. Total pages: 11872
+<5>Kernel command line: console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000
+<4>PID hash table entries: 256 (order: 8, 1024 bytes)
+<4>Console: colour dummy device 80x30
+<4>Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
+<4>Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
+<6>Memory: 32MB 16MB = 48MB total
+<5>Memory: 46084KB available (2264K code, 217K data, 84K init)
+<7>Calibrating delay loop... 291.63 BogoMIPS (lpj=1458176)
+<4>Mount-cache hash table entries: 512
+<6>CPU: Testing write buffer coherency: ok
+<6>NET: Registered protocol family 16
+<6>usbcore: registered new interface driver usbfs
+<6>usbcore: registered new interface driver hub
+<6>usbcore: registered new device driver usb
+<6>Time: pxa_timer clocksource has been installed.
+<6>NET: Registered protocol family 2
+<4>IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
+<4>TCP established hash table entries: 2048 (order: 2, 16384 bytes)
+<4>TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
+<6>TCP: Hash tables configured (established 2048 bind 2048)
+<6>TCP reno registered
+<4>bp handshake entered!
+<4>ezx-bp: handshake step 2
+<4>BP rdy irq
+<4>bp handshake entered!
+<5>ezx-bp: handshake passed
+<4>ezx-pcap: ssp driver registered
+<6>io scheduler noop registered
+<6>io scheduler deadline registered (default)
+<4>pxa2xx-fb pxa2xx-fb: machine LCCR0 setting contains illegal bits: 00200878
+<4>pxa2xx-fb pxa2xx-fb: machine LCCR3 setting contains illegal bits: 00300008
+<4>Console: switching to colour frame buffer device 60x53
+<6>usbcore: registered new interface driver usb ipc
+<6>drivers/char/ts0710_mux_usb.c: USB Host(Bulverde) IPC driver registered.
+<6>drivers/char/ts0710_mux_usb.c: 1.0alpha1:USB IPC Driver (TS07.10 lowlevel)
+<6>pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 22) is a FFUART
+<6>pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 21) is a BTUART
+<6>pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 20) is a STUART
+<7>ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver
+<6>pxa27x-ohci pxa27x-ohci: PXA27x OHCI
+<6>pxa27x-ohci pxa27x-ohci: new USB bus registered, assigned bus number 1
+<6>pxa27x-ohci pxa27x-ohci: irq 3, io mem 0x4c000000
+<6>usb usb1: configuration #1 chosen from 1 choice
+<6>hub 1-0:1.0: USB hub found
+<6>hub 1-0:1.0: 3 ports detected
+<6>pxa27x_udc: version 08-Feb-2007
+<5>USB cmd disconnect
+<5>USB cmd disconnect
+<4>ether gadget: using random self ethernet address
+<4>ether gadget: using random host ethernet address
+<6>usb0: Ethernet Gadget, version: May Day 2005
+<6>usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1
+<6>usb0: MAC 46:86:e0:79:e7:fb
+<5>USB cmd connect
+<5>USB cmd connect
+<6>input: gpio-keys as /class/input/input0
+<6>input: pxa-keyboard as /class/input/input1
+<6>input: pcap-touchscreen as /class/input/input2
+<6>sa1100-rtc sa1100-rtc: rtc core: registered sa1100-rtc as rtc0
+<6>Registered led device: a780:main
+<6>Registered led device: a780:aux
+<6>Registered led device: a780:vibrator
+<6>TCP cubic registered
+<6>NET: Registered protocol family 1
+<6>NET: Registered protocol family 17
+<6>XScale iWMMXt coprocessor detected.
+<6>sa1100-rtc sa1100-rtc: setting the system clock to 1970-01-01 00:00:16 (16)
+<6>mmcblk0: mmc0:bffc SU02G 1985024KiB
+<6>udc: USB reset
+<6> mmcblk0:<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 2
+<4> p1 p2 p3 < p5 p6 p7 >
+<6>udc: USB reset
+<3>usb 1-3: device descriptor read/64, error -62
+<6>usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet Subset
+<3>usb 1-3: device descriptor read/64, error -62
+<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 3
+<3>usb 1-3: device descriptor read/64, error -62
+<4>IP-Config: Complete:
+<4> device=usb0, addr=169.254.1.11, mask=255.255.255.254, gw=169.254.1.10,
+<4> host=ezx, domain=, nis-domain=(none),
+<4> bootserver=169.254.1.10, rootserver=169.254.1.10, rootpath=
+<6>kjournald starting. Commit interval 5 seconds
+<4>EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
+<6>EXT3 FS on mmcblk0p2, internal journal
+<6>EXT3-fs: recovery complete.
+<6>EXT3-fs: mounted filesystem with ordered data mode.
+<4>VFS: Mounted root (ext3 filesystem).
+<6>Freeing init memory: 84K
+<3>usb 1-3: device descriptor read/64, error -110
+<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 4
+<3>usb 1-3: device descriptor read/8, error -62
+<4>usb 1-3: config 1 has an invalid interface number: 13 but max is 2
+<4>usb 1-3: config 1 has an invalid interface number: 6 but max is 2
+<4>usb 1-3: config 1 has an invalid interface number: 7 but max is 2
+<4>usb 1-3: config 1 has no interface number 0
+<4>usb 1-3: config 1 has no interface number 1
+<4>usb 1-3: config 1 has no interface number 2
+<6>usb 1-3: configuration #1 chosen from 1 choice
+<4>usb_ipc_probe: completed probe!
+<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported.
+<4>usb ipc: probe of 1-3:1.6 failed with error -1
+<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported.
+<4>usb ipc: probe of 1-3:1.7 failed with error -1
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1914 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1882 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1850 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1818 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1786 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1780 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1748 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1716 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1684 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1652 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1646 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1888 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1856 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1824 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1792 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1760 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1728 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1696 bytes from ts0710_mux_usb inbuf.
+<4>Read 16 bytes.
+<4>Reading max 1680 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1888 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1856 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1824 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1792 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1760 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1728 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1696 bytes from ts0710_mux_usb inbuf.
+<4>Read 13 bytes.
+<4>Reading max 1683 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 14 bytes.
+<4>Reading max 2034 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 2 bytes.
+<4>Reading max 2014 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>nonzero read bulk status received: -104
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch
new file mode 100755
index 0000000000..2a2d9c7a72
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/e680-kbd.patch
@@ -0,0 +1,93 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-05-24 00:54:39.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-05-24 00:56:30.000000000 -0300
+@@ -15,18 +15,21 @@
+ #include <linux/fb.h>
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
++#include <linux/input.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *);
+
+ #ifdef CONFIG_EZX_PCAP
+ extern int ezx_pcap_mmcsd_power(int);
+@@ -144,6 +147,58 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++static unsigned char e680_keycode[] = {
++ /* row 0 */
++ KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE,
++ /* row 1 */
++ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN,
++ /* row 2 */
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER,
++};
++
++static unsigned char e680_direct_keycode[] = {
++ KEY_CAMERA,
++ KEY_RESERVED,
++ KEY_RESERVED,
++ KEY_HOME,
++ KEY_POWER,
++ KEY_MENU,
++};
++
++static int e680_kbd_init(void)
++{
++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */
++ pxa_gpio_mode(96 | GPIO_ALT_FN_1_IN); /* KP_DKIN<3>, GAME_A */
++ pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */
++ pxa_gpio_mode(98 | GPIO_ALT_FN_1_IN); /* KP_DKIN<5>, GAME_B */
++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
++ pxa_gpio_mode(GPIO_TC_MM_EN);
++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
++ return 0;
++}
++
++static struct pxakbd_platform_data e680_kbd_platform_data = {
++ .init = &e680_kbd_init,
++ .scan_interval = HZ/40,
++ .matrix = {
++ .keycode = e680_keycode,
++ .cols = 4,
++ .rows = 3,
++ },
++ .direct = {
++ .keycode = e680_direct_keycode,
++ .num = 6,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ };
+
+@@ -162,6 +217,7 @@
+
+ set_pxa_fb_info(&e680_fb_info);
+ pxa_set_mci_info(&e680_mci_platform_data);
++ pxa_set_kbd_info(&e680_kbd_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-leds.patch
new file mode 100755
index 0000000000..82dc93b611
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/e680-leds.patch
@@ -0,0 +1,369 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.21/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/Kconfig 2007-06-08 18:39:04.000000000 +0200
++++ linux-2.6.21/drivers/leds/Kconfig 2007-06-08 18:39:12.000000000 +0200
+@@ -111,6 +111,13 @@
+ This option enables support for the LEDs on the
+ Motorola A780 GSM Phone.
+
++config LEDS_E680
++ tristate "LED Support for the Motorola E680(i) GSM Phone"
++ depends LEDS_CLASS && PXA_EZX_E680
++ help
++ This options enables support for the LEDs on the
++ Motorola E680(i) GSM Phone.
++
+ config LEDS_TRIGGER_TIMER
+ tristate "LED Timer Trigger"
+ depends on LEDS_TRIGGERS
+Index: linux-2.6.21/drivers/leds/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/leds/Makefile 2007-06-08 18:39:04.000000000 +0200
++++ linux-2.6.21/drivers/leds/Makefile 2007-06-08 18:39:12.000000000 +0200
+@@ -17,6 +17,7 @@
+ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
+ obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
+ obj-$(CONFIG_LEDS_A780) += leds-a780.o
++obj-$(CONFIG_LEDS_E680) += leds-e680.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
+Index: linux-2.6.21/drivers/leds/leds-e680.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/leds/leds-e680.c 2007-06-08 18:39:12.000000000 +0200
+@@ -0,0 +1,309 @@
++/*
++ * EZX Platform LED Driver for the Motorola E680(i) GSM Phone
++ *
++ * Copyright 2006 Vanille-Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * Based on the Motorola 2.4 leds-e680.c and leds-corgi.c by Richard Purdie
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/delay.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++
++//FIXME move defines to a common header file
++#define IND_CNTL_R_BUL 46
++#define IND_CNTL_G_BUL 47
++#define SSP_PCAP_LED_MASK 0x000fffe0
++#define SSP_PCAP_LED_SHIFT 5
++#define GPIO_TC_MM_EN 99
++
++extern int ezx_pcap_read(u_int8_t, u_int32_t *);
++extern int ezx_pcap_write(u_int8_t, u_int32_t);
++
++static enum led_brightness old_red;
++static enum led_brightness old_green;
++static enum led_brightness old_blue;
++
++typedef struct {
++ unsigned char ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 disactive*/
++ unsigned char ind_GPIO_green; /*Indicator Green control GPIO 47: 0 active, 1 disactive*/
++ unsigned char pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
++ unsigned char pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
++ unsigned char pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
++ unsigned char pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
++ unsigned char pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
++ unsigned char pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
++ unsigned char pcap_SKIP_on; /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/
++} PCAP2_LED_REGISTER_VALUE;
++
++const PCAP2_LED_REGISTER_VALUE led_register_value[]=
++{
++ /* on/off pulsepower timing intensity */
++ {0x1,0x1, 0x0,0x0, 0x0,0x0, 0x0,0x0,0x0}, /* OFF */
++ {0x0,0x1, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* RED */
++ {0x1,0x0, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* GREEN */
++ {0x0,0x0, 0x1,0x0, 0xc,0x0, 0x1,0x0,0x0}, /* ORANGE = RED + GREEN */
++ {0x1,0x1, 0x0,0x1, 0x0,0xc, 0x0,0x0,0x0}, /* BLUE */
++ {0x0,0x1, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* LIGHT_RED = RED + BLUE */
++ {0x1,0x0, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* LIGHT_GREEN = GREEN + BLUE */
++ {0x0,0x0, 0x1,0x1, 0xc,0xc, 0x1,0x0,0x0}, /* WHITE = RED + GREEN + BLUE */
++};
++
++static void e680led_led_set( enum led_brightness red, enum led_brightness green, enum led_brightness blue )
++{
++ unsigned int tempValue = 0;
++ unsigned int value = 0;
++ unsigned int stateIndex = 0;
++ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl, ledg_ctrl, ledr_i, ledg_i,skip;
++
++ printk( KERN_DEBUG "e680led_led_set: red=%d, green=%d, blue=%d", red, green, blue );
++ stateIndex = ( ( blue << 2 ) | ( green << 1 ) | ( red ) ) & 0x7;
++ printk( KERN_DEBUG "LED stateIndex is %d", stateIndex );
++ gpio_red = led_register_value[stateIndex].ind_GPIO_red & 0x1;
++ gpio_green = led_register_value[stateIndex].ind_GPIO_green & 0x1;
++ ledr_en = led_register_value[stateIndex].pcap_LEDR_en & 0x1;
++ ledg_en = led_register_value[stateIndex].pcap_LEDG_en & 0x1;
++ ledr_ctrl = led_register_value[stateIndex].pcap_LEDR_CTRL & 0xf;
++ ledg_ctrl = led_register_value[stateIndex].pcap_LEDG_CTRL & 0xf;
++ ledr_i = led_register_value[stateIndex].pcap_LEDR_I & 0x3;
++ ledg_i = led_register_value[stateIndex].pcap_LEDG_I & 0x3;
++ skip = led_register_value[stateIndex].pcap_SKIP_on & 0x1;
++
++ /* disable LEDs */
++ if( ezx_pcap_read(SSP_PCAP_ADJ_PERIPH_REGISTER,&tempValue) != SSP_PCAP_SUCCESS )
++ {
++ printk( KERN_WARNING "LED PCAP Read Failed\n" );
++ return;
++ }
++ tempValue &= (~SSP_PCAP_LED_MASK);
++ if( ezx_pcap_write(SSP_PCAP_ADJ_PERIPH_REGISTER,tempValue) != SSP_PCAP_SUCCESS )
++ {
++ printk( KERN_WARNING "LED PCAP Write Failed (Clear Data)\n" );
++ return;
++ }
++
++ /* configure GPIOs as output */
++ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
++ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
++
++ //FIXME: Simplify this logic
++ if ( (gpio_green && gpio_red) )
++ {
++ /*Disable Red & Green signal*/
++ pxa_gpio_set_value(IND_CNTL_R_BUL, 1); /*IND_CNTL_R_BUL Low active*/
++ PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) | GPIO_bit(IND_CNTL_R_BUL);
++
++ pxa_gpio_set_value(IND_CNTL_G_BUL, 0); /*IND_CNTL_G_BUL High active*/
++ PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) & (~GPIO_bit(IND_CNTL_G_BUL));
++
++ printk( KERN_DEBUG "LED GPIO Green & Red Disable\n");
++ } else if ( gpio_green && !gpio_red )
++ {
++ /*Green Disable, Red Enable*/
++ pxa_gpio_set_value(IND_CNTL_R_BUL, 0);
++ PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) & (~GPIO_bit(IND_CNTL_R_BUL));
++
++ pxa_gpio_set_value(IND_CNTL_G_BUL, 0);
++ PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) & (~GPIO_bit(IND_CNTL_G_BUL));
++
++ printk( KERN_DEBUG "LED GPIO Green Disable, Red Enable\n");
++ } else if (gpio_red && !gpio_green )
++ {
++ /*Red Disable, Green Enable*/
++ pxa_gpio_set_value(IND_CNTL_R_BUL, 1);
++ PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) | GPIO_bit(IND_CNTL_R_BUL);
++
++ pxa_gpio_set_value(IND_CNTL_G_BUL, 1);
++ PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) | GPIO_bit(IND_CNTL_G_BUL);
++ printk( KERN_DEBUG "LED GPIO Red Disable, Green Enable");
++ }else
++ {
++ /*Red & Green enable*/
++ pxa_gpio_set_value(IND_CNTL_R_BUL, 0);
++ PGSR(IND_CNTL_R_BUL) = PGSR(IND_CNTL_R_BUL) & (~GPIO_bit(IND_CNTL_R_BUL));
++
++ pxa_gpio_set_value(IND_CNTL_G_BUL, 1);
++ PGSR(IND_CNTL_G_BUL) = PGSR(IND_CNTL_G_BUL) | GPIO_bit(IND_CNTL_G_BUL);
++ printk( KERN_DEBUG "LED GPIO Red & Green Enable\n");
++ }
++
++ /* Write PCAP LED Peripheral Control Register*/
++ value = ( ledr_en | (ledg_en <<1) | (ledr_ctrl <<2) | (ledg_ctrl <<6) |
++ (ledr_i << 10) | (ledg_i <<12) | (skip <<14) ) & 0x7fff;
++ tempValue |= (value <<SSP_PCAP_LED_SHIFT);
++
++ if ( ezx_pcap_write(SSP_PCAP_ADJ_PERIPH_REGISTER,tempValue) == SSP_PCAP_SUCCESS )
++ {
++ printk( KERN_DEBUG "LED PCAP Write Success (0x%x :0x%x)\n",tempValue,value);
++ old_red = red;
++ old_green = green;
++ old_blue = blue;
++ return;
++ } else {
++ printk( KERN_DEBUG "LED PCAP Write Failed (State Change)\n");
++ return;
++ }
++}
++
++static void e680led_red_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ printk( KERN_DEBUG "e680led_red_set: %d\n", value );
++ e680led_led_set( 1 && value, old_green, old_blue );
++}
++
++static void e680led_green_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ printk( KERN_DEBUG "e680led_green_set: %d\n", value );
++ e680led_led_set( old_red, 1 && value, old_blue );
++}
++
++static void e680led_blue_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ printk( KERN_DEBUG "e680led_blue_set: %d\n", value );
++ e680led_led_set( old_red, old_green, 1 && value );
++}
++
++static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ /* this is not working yet, as there is something else missing */
++#if 0
++ printk( KERN_DEBUG "e680led_keypad_set: %d\n", value );
++
++ pxa_gpio_mode(GPIO_TC_MM_EN);
++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++
++ udelay( 100 );
++
++ if ( value ) {
++ GPCR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 &= ~GPIO_bit(GPIO_TC_MM_EN);
++ } else {
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
++ }
++#endif
++}
++
++static struct led_classdev e680_red_led = {
++ .name = "e680:red",
++ .default_trigger = "none",
++ .brightness_set = e680led_red_set,
++};
++
++static struct led_classdev e680_green_led = {
++ .name = "e680:green",
++ .default_trigger = "none",
++ .brightness_set = e680led_green_set,
++};
++
++static struct led_classdev e680_blue_led = {
++ .name = "e680:blue",
++ .default_trigger = "none",
++ .brightness_set = e680led_blue_set,
++};
++
++static struct led_classdev e680_keypad_led = {
++ .name = "e680:keypad",
++ .default_trigger = "none",
++ .brightness_set = e680led_keypad_set,
++};
++
++#ifdef CONFIG_PM
++static int e680led_suspend(struct platform_device *dev, pm_message_t state)
++{
++ led_classdev_suspend(&e680_red_led);
++ led_classdev_suspend(&e680_green_led);
++ led_classdev_suspend(&e680_blue_led);
++ led_classdev_suspend(&e680_keypad_led);
++ return 0;
++}
++
++static int e680led_resume(struct platform_device *dev)
++{
++ led_classdev_resume(&e680_red_led);
++ led_classdev_resume(&e680_green_led);
++ led_classdev_resume(&e680_blue_led);
++ led_classdev_resume(&e680_keypad_led);
++ return 0;
++}
++#endif
++
++static int e680led_probe(struct platform_device *pdev)
++{
++ int ret;
++
++ ret = led_classdev_register(&pdev->dev, &e680_red_led);
++ if (ret < 0)
++ return ret;
++
++ ret = led_classdev_register(&pdev->dev, &e680_green_led);
++ if (ret < 0)
++ led_classdev_unregister(&e680_red_led);
++
++ ret = led_classdev_register(&pdev->dev, &e680_blue_led);
++ if (ret < 0) {
++ led_classdev_unregister(&e680_red_led);
++ led_classdev_unregister(&e680_green_led);
++ }
++
++ ret = led_classdev_register(&pdev->dev, &e680_keypad_led);
++ if (ret < 0) {
++ led_classdev_unregister(&e680_red_led);
++ led_classdev_unregister(&e680_green_led);
++ led_classdev_unregister(&e680_blue_led);
++ }
++ return ret;
++}
++
++static int e680led_remove(struct platform_device *pdev)
++{
++ led_classdev_unregister(&e680_red_led);
++ led_classdev_unregister(&e680_green_led);
++ led_classdev_unregister(&e680_blue_led);
++ led_classdev_unregister(&e680_keypad_led);
++ return 0;
++}
++
++static struct platform_driver e680led_driver = {
++ .probe = e680led_probe,
++ .remove = e680led_remove,
++#ifdef CONFIG_PM
++ .suspend = e680led_suspend,
++ .resume = e680led_resume,
++#endif
++ .driver = {
++ .name = "e680-led",
++ },
++};
++
++static int __init e680led_init(void)
++{
++ return platform_driver_register(&e680led_driver);
++}
++
++static void __exit e680led_exit(void)
++{
++ e680led_led_set( 0, 0, 0 );
++ platform_driver_unregister(&e680led_driver);
++}
++
++module_init(e680led_init);
++module_exit(e680led_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Motorola E680 LED driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-06-08 18:38:59.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-06-08 18:39:12.000000000 +0200
+@@ -242,9 +242,15 @@
+ },
+ };
+
++static struct platform_device e680led_device = {
++ .name = "e680-led",
++ .id = -1,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &pcap_ts_device,
+ &e680locksw_device,
++ &e680led_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch
new file mode 100755
index 0000000000..36b52a916a
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/e680-locksw.patch
@@ -0,0 +1,43 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-06-08 18:38:48.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-06-08 18:38:59.000000000 +0200
+@@ -16,6 +16,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
+ #include <linux/input.h>
++#include <linux/gpio_keys.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -220,8 +221,30 @@
+ },
+ };
+
++static struct gpio_keys_button e680locksw_buttons[] = {
++ [0] = {
++ .keycode = KEY_SLEEP,
++ .gpio = GPIO_LOCK_SCREEN_PIN,
++ .desc = "E680 lockscreen sw",
++ },
++};
++
++static struct gpio_keys_platform_data e680locksw_platform_data = {
++ .buttons = e680locksw_buttons,
++ .nbuttons = 1,
++};
++
++static struct platform_device e680locksw_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &e680locksw_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &pcap_ts_device,
++ &e680locksw_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-mci.patch
new file mode 100755
index 0000000000..b5bb2931f1
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/e680-mci.patch
@@ -0,0 +1,139 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-05-24 00:43:08.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-05-24 00:48:20.000000000 -0300
+@@ -13,11 +13,14 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+@@ -25,6 +28,99 @@
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data e680_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [MMC_VDD_160] = 3,
++ [MMC_VDD_170] = 3,
++ [MMC_VDD_180] = 3,
++ [MMC_VDD_190] = 3,
++ [MMC_VDD_200] = 3,
++ [MMC_VDD_210] = 3,
++ [MMC_VDD_220] = 3,
++ [MMC_VDD_230] = 3,
++ [MMC_VDD_240] = 3,
++ [MMC_VDD_250] = 3,
++ [MMC_VDD_260] = 3,
++ [MMC_VDD_270] = 3,
++ [MMC_VDD_280] = 3,
++ [MMC_VDD_290] = 3,
++ [MMC_VDD_300] = 3,
++ [MMC_VDD_310] = 3,
++ [MMC_VDD_320] = 3,
++ [MMC_VDD_330] = 3,
++ [MMC_VDD_340] = 3,
++ [MMC_VDD_350] = 3,
++ [MMC_VDD_360] = 3,
++};
++
++static int e680_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ e680_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++
++static inline int e680_mci_get_ro(struct device *dev)
++{
++ return (GPLR3 & 0x800);
++}
++
++static void e680_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ if (vdd <= MMC_VDD_360)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void e680_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data e680_mci_platform_data = {
++ .ocr_mask = MMC_VDD_27_28,
++ .init = e680_mci_init,
++ .get_ro = e680_mci_get_ro,
++ .setpower = e680_mci_setpower,
++ .exit = e680_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_e680 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -65,6 +161,7 @@
+ PSLR = 0x05800f00;
+
+ set_pxa_fb_info(&e680_fb_info);
++ pxa_set_mci_info(&e680_mci_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-05-24 00:48:28.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-05-24 00:48:55.000000000 -0300
+@@ -83,6 +83,7 @@
+ config PXA_EZX_E680
+ bool "Motorola E680 GSM Phone"
+ select PXA27x
++ select EZX_MCI_SD
+
+ config PXA_EZX_A780
+ bool "Motorola A780 GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.21/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.21/patches/e680-ts.patch
new file mode 100755
index 0000000000..52f9ce34b5
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/e680-ts.patch
@@ -0,0 +1,40 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx-e680.c 2007-06-02 20:32:49.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-06-02 20:33:26.000000000 -0300
+@@ -124,6 +124,27 @@
+ .exit = e680_mci_exit,
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE2,
++ .end = EZX_IRQ_ADCDONE2,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct pxafb_mode_info mode_e680 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -200,6 +221,7 @@
+ };
+
+ static struct platform_device *devices[] __initdata = {
++ &pcap_ts_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch
new file mode 100755
index 0000000000..7054ef549b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-backlight.patch
@@ -0,0 +1,203 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.21/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/video/backlight/Kconfig 2007-06-02 20:03:06.000000000 -0300
++++ linux-2.6.21/drivers/video/backlight/Kconfig 2007-06-02 20:26:49.000000000 -0300
+@@ -63,3 +63,12 @@
+ help
+ If you have a Frontpath ProGear say Y to enable the
+ backlight driver.
++
++config BACKLIGHT_EZX
++ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)"
++ depends on BACKLIGHT_CLASS_DEVICE && PXA_EZX
++ default y
++ help
++ If you have a Motorola A780 or E680(i), say y to enable the
++ backlight driver.
++
+Index: linux-2.6.21/drivers/video/backlight/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/video/backlight/Makefile 2007-06-02 20:03:06.000000000 -0300
++++ linux-2.6.21/drivers/video/backlight/Makefile 2007-06-02 20:26:49.000000000 -0300
+@@ -6,3 +6,4 @@
+ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
++obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
+Index: linux-2.6.21/drivers/video/backlight/ezx_bl.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/video/backlight/ezx_bl.c 2007-06-02 20:26:49.000000000 -0300
+@@ -0,0 +1,142 @@
++/*
++ * Backlight Driver for Motorola A780 and E680(i) GSM Phones.
++ *
++ * Copyright 2006 Vanille Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++
++#define EZX_MIN_INTENSITY 0
++#define EZX_MAX_INTENSITY 50
++#define EZX_DEFAULT_INTENSITY 30
++
++static struct backlight_device *ezx_backlight_device;
++static int last_intensity;
++static int suspended;
++
++static int ezxbl_send_intensity(struct backlight_device *bd)
++{
++ int intensity = bd->props.brightness;
++
++ if (suspended || bd->props.power != FB_BLANK_UNBLANK ||
++ bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if ( !last_intensity && intensity ) {
++ PWM_CTRL0 = 2; /* pre-scaler */
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ PWM_PERVAL0 = 49; /* period */
++ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */
++ pxa_set_cken(CKEN0_PWM0, 1); /* clock enable */
++ }
++ else if ( last_intensity && !intensity ) {
++ PWM_PWDUTY0 = 0;
++ GAFR0_U &= 0xFFFFFFFC; /* ??? */
++ pxa_set_cken(CKEN0_PWM0, 0); /* clock disable */
++ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */
++ } else if ( last_intensity && intensity ) {
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ }
++ last_intensity = intensity;
++ return 0;
++}
++
++static int ezxbl_get_intensity(struct backlight_device *bd)
++{
++ return last_intensity;
++}
++
++static int ezxbl_set_intensity(struct backlight_device *bd)
++{
++ return ezxbl_send_intensity(ezx_backlight_device);
++}
++
++#ifdef CONFIG_PM
++static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ suspended = 1;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++
++static int ezxbl_resume(struct platform_device *pdev)
++{
++ suspended = 0;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++#else
++#define ezxbl_suspend NULL
++#define ezxbl_resume NULL
++#endif
++
++static struct backlight_ops ezxbl_ops = {
++ .get_brightness = ezxbl_get_intensity,
++ .update_status = ezxbl_set_intensity,
++};
++
++static int __init ezxbl_probe(struct platform_device *pdev)
++{
++ ezx_backlight_device = backlight_device_register ("ezx-bl",
++ &pdev->dev, NULL, &ezxbl_ops);
++ if (IS_ERR (ezx_backlight_device))
++ return PTR_ERR (ezx_backlight_device);
++
++ platform_set_drvdata(pdev, ezx_backlight_device);
++
++ ezx_backlight_device->props.power = FB_BLANK_UNBLANK;
++ ezx_backlight_device->props.max_brightness = EZX_MAX_INTENSITY;
++ ezx_backlight_device->props.brightness = EZX_DEFAULT_INTENSITY;
++ ezxbl_set_intensity(ezx_backlight_device);
++ backlight_update_status(ezx_backlight_device);
++
++ return 0;
++}
++
++static int ezxbl_remove(struct platform_device *pdev)
++{
++ backlight_device_unregister(ezx_backlight_device);
++ return 0;
++}
++
++static struct platform_driver ezxbl_driver = {
++ .probe = ezxbl_probe,
++ .remove = ezxbl_remove,
++ .suspend = ezxbl_suspend,
++ .resume = ezxbl_resume,
++ .driver = {
++ .name = "ezx-bl",
++ },
++};
++
++static int __init ezxbl_init(void)
++{
++ return platform_driver_register(&ezxbl_driver);
++}
++
++static void __exit ezxbl_exit(void)
++{
++ platform_driver_unregister(&ezxbl_driver);
++}
++
++module_init(ezxbl_init);
++module_exit(ezxbl_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-06-02 20:19:44.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-06-02 20:26:49.000000000 -0300
+@@ -67,6 +67,12 @@
+ #endif
+ EXPORT_SYMBOL(ezx_backlight_power);
+
++/* EZX LCD Backlight */
++static struct platform_device ezxbacklight_device = {
++ .name = "ezx-bl",
++ .id = -1,
++};
++
+ /* SSP */
+ struct platform_device ezxssp_device = {
+ .name = "ezx-ssp",
+@@ -179,6 +185,7 @@
+ &ezxbp_device,
+ &ezxpcap_device,
+ &ezxemu_device,
++ &ezxbacklight_device,
+ };
+
+ /* PM */
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch
new file mode 100755
index 0000000000..a0b3b61b12
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-bp.patch
@@ -0,0 +1,326 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-06-02 14:46:25.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-06-02 20:03:12.000000000 -0300
+@@ -100,9 +100,41 @@
+ .init = ezx_ohci_init,
+ };
+
++/* BP */
++static struct resource ezxbp_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO(GPIO_BP_RDY),
++ .end = IRQ_GPIO(GPIO_BP_RDY),
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = IRQ_GPIO(GPIO_BB_WDI2),
++ .end = IRQ_GPIO(GPIO_BB_WDI2),
++ .flags = IORESOURCE_IRQ,
++ },
++ [2] = {
++ .start = IRQ_GPIO(GPIO_BB_WDI),
++ .end = IRQ_GPIO(GPIO_BB_WDI),
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device ezxbp_device = {
++ .name = "ezx-bp",
++ .dev = {
++ //.parent =
++ //.platform_data =
++ },
++ .id = -1,
++ .num_resources = ARRAY_SIZE(ezxbp_resources),
++ .resource = ezxbp_resources,
++};
++
++
+
+ static struct platform_device *devices[] __initdata = {
+ &ezxssp_device,
++ &ezxbp_device,
+ };
+
+ static int __init ezx_init(void)
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-06-02 14:48:52.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-06-02 20:03:11.000000000 -0300
+@@ -102,6 +102,9 @@
+
+ endchoice
+
++config EZX_BP
++ bool "BP Control code for EZX Platform"
++
+ endif
+
+ endmenu
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-bp.c 2007-06-02 18:26:22.000000000 -0300
+@@ -0,0 +1,249 @@
++/*
++ * BP handshake code for Motorola EZX phones
++ *
++ * Copyright (c) 2007 Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ * Based on Motorola's a780.c Copyright (c) 2003-2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/mach/irq.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#include <asm/arch/ezx.h>
++
++/* BP Handshake */
++#define FIRST_STEP 2
++#define LAST_STEP 3
++#define BP_RDY_TIMEOUT 0x000c0000
++
++#if 1
++#define DEBUGP(x, args ...) printk(x, ##args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++struct bp {
++ int irq_wdi;
++ int irq_wdi2;
++ int irq_rdy;
++};
++
++/* check power down condition */
++static inline void check_power_off(void)
++{
++ if (pxa_gpio_get_value(GPIO_BB_WDI2) == 0) {
++ DEBUGP("BP request poweroff!\n");
++// pm_power_off();
++ }
++}
++
++static int step = FIRST_STEP;
++
++inline int bp_handshake_passed(void)
++{
++ return (step > LAST_STEP);
++}
++EXPORT_SYMBOL(bp_handshake_passed);
++
++void handshake(void)
++{
++ /* step 1: check MCU_INT_SW or BP_RDY is low (now it is checked in apboot) */
++ DEBUGP("bp handshake entered!\n");
++ if (step == 1) {
++ int timeout = BP_RDY_TIMEOUT;
++
++ /* config MCU_INT_SW, BP_RDY as input */
++ pxa_gpio_mode(GPIO_MCU_INT_SW | GPIO_IN);
++ pxa_gpio_mode(GPIO_BP_RDY | GPIO_IN);
++
++ while (timeout--) {
++ if (pxa_gpio_get_value(GPIO_MCU_INT_SW) == 0
++ || pxa_gpio_get_value(GPIO_BP_RDY) == 0) {
++ step ++;
++ break;
++ }
++
++ check_power_off();
++ }
++ DEBUGP("ezx-bp: handshake step 1\n");
++ }
++
++ /* step 2: wait BP_RDY is low */
++ if (step == 2) {
++ if (pxa_gpio_get_value(GPIO_BP_RDY) == 0) {
++ /* config MCU_INT_SW as output */
++ pxa_gpio_mode(GPIO_MCU_INT_SW | GPIO_OUT);
++ pxa_gpio_set_value(GPIO_MCU_INT_SW, 0);
++
++ step ++;
++ DEBUGP("ezx-bp: handshake step 2\n");
++ }
++ }
++
++ /* step 3: wait BP_RDY is high */
++ else if (step == 3) {
++ if (pxa_gpio_get_value(GPIO_BP_RDY)) {
++ step ++;
++ //FIXME delay_bklight();
++ pxa_gpio_set_value(GPIO_MCU_INT_SW, 1);
++ printk(KERN_NOTICE "ezx-bp: handshake passed\n");
++ }
++ }
++}
++
++irqreturn_t bp_wdi_handler(int irq, void *dev_id)
++{
++ DEBUGP("BP Lowered WDI line. This is not good :(\n");
++ /*
++ * this means that BP is not responsive.
++ * we could try to reset BP and then handshake again
++ * but i doubt its possible to bring it up again.
++ */
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t bp_rdy_handler(int irq, void *dev_id)
++{
++ struct bp *bp = dev_id;
++ DEBUGP("BP rdy irq\n");
++ if (!bp_handshake_passed()) {
++ handshake();
++ if (bp_handshake_passed()) {
++ disable_irq(bp->irq_wdi2);
++
++ /* set bp_rdy handle for usb ipc */
++ set_irq_type(bp->irq_rdy, IRQT_FALLING);
++ }
++ }
++#ifdef CONFIG_TS0710_MUX_USB
++ else usb_send_readurb();
++#endif
++ return IRQ_HANDLED;
++}
++
++/* BP request for poweroff */
++static irqreturn_t bp_wdi2_handler(int irq, void *dev_id)
++{
++ DEBUGP("BP request poweroff!\n");
++// pm_power_off();
++ return IRQ_HANDLED;
++}
++
++static int __init ezxbp_probe(struct platform_device *dev)
++{
++ int ret;
++ struct bp *bp;
++
++ bp = kzalloc(sizeof(*bp), GFP_KERNEL);
++ if (!bp)
++ return -ENOMEM;
++
++ bp->irq_rdy = platform_get_irq(dev, 0);
++ if(bp->irq_rdy < 0) {
++ ret = bp->irq_rdy;
++ goto fail;
++ }
++
++ bp->irq_wdi2 = platform_get_irq(dev, 1);
++ if(bp->irq_wdi2 < 0) {
++ ret = bp->irq_wdi2;
++ goto fail;
++ }
++
++ bp->irq_wdi = platform_get_irq(dev, 2);
++ if(bp->irq_wdi < 0) {
++ ret = bp->irq_wdi;
++ goto fail;
++ }
++
++ set_irq_type(bp->irq_wdi, IRQT_FALLING);
++ request_irq(bp->irq_wdi, bp_wdi_handler, SA_INTERRUPT,
++ "bp wdi", bp);
++
++ set_irq_type(bp->irq_rdy, IRQT_BOTHEDGE);
++ request_irq(bp->irq_rdy, bp_rdy_handler, SA_INTERRUPT,
++ "bp rdy", bp);
++
++ set_irq_type(bp->irq_wdi2, IRQT_FALLING);
++ request_irq(bp->irq_wdi2, bp_wdi2_handler, SA_INTERRUPT,
++ "bp wdi2", bp);
++
++ /* turn on BP */
++ pxa_gpio_mode(GPIO_BB_RESET|GPIO_OUT);
++ pxa_gpio_set_value(GPIO_BB_RESET, 1);
++
++ check_power_off();
++ handshake();
++
++ return 0;
++fail:
++ kfree(bp);
++ return ret;
++}
++
++static int ezxbp_remove(struct platform_device *dev)
++{
++ struct bp *bp = platform_get_drvdata(dev);
++
++ free_irq(bp->irq_wdi, bp);
++ free_irq(bp->irq_wdi2, bp);
++ free_irq(bp->irq_rdy, bp);
++ kfree(bp);
++
++ return 0;
++}
++
++static int ezxbp_suspend(struct platform_device *dev, pm_message_t state)
++{
++ DEBUGP("bp suspend!\n");
++// pxa_gpio_set_value(GPIO_MCU_INT_SW, 0);
++ return 0;
++}
++
++static int ezxbp_resume(struct platform_device *dev)
++{
++ DEBUGP("bp resume!\n");
++// pxa_gpio_set_value(GPIO_MCU_INT_SW, 1);
++ return 0;
++}
++static struct platform_driver ezxbp_driver = {
++ .probe = ezxbp_probe,
++ .remove = ezxbp_remove,
++#warning FIXME: missing suspend/resume support
++ .suspend = ezxbp_suspend,
++ .resume = ezxbp_resume,
++ .driver = {
++ .name = "ezx-bp",
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ezxbp_init(void)
++{
++ return platform_driver_register(&ezxbp_driver);
++}
++
++void ezxbp_fini(void)
++{
++ return platform_driver_unregister(&ezxbp_driver);
++}
++
++module_init(ezxbp_init);
++module_exit(ezxbp_fini);
++
++MODULE_DESCRIPTION("Motorola BP Control driver");
++MODULE_AUTHOR("Daniel Ribeiro <drwyrm@gmail.com>");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-06-02 14:49:50.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-06-02 20:03:11.000000000 -0300
+@@ -24,6 +24,7 @@
+ obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o
+ obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
++obj-$(CONFIG_EZX_BP) += ezx-bp.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-core.patch
new file mode 100755
index 0000000000..c0e9435723
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-core.patch
@@ -0,0 +1,1178 @@
+Index: linux-2.6.21/arch/arm/boot/compressed/head-xscale.S
+===================================================================
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head-xscale.S 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head-xscale.S 2007-06-02 14:46:25.000000000 -0300
+@@ -53,3 +53,6 @@
+ str r1, [r0, #0x18]
+ #endif
+
++#ifdef CONFIG_ARCH_EZX
++ mov r7, #MACH_TYPE_EZX
++#endif
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-06-02 14:48:52.000000000 -0300
+@@ -37,6 +37,10 @@
+ bool "Keith und Koep Trizeps4 DIMM-Module"
+ select PXA27x
+
++config PXA_EZX
++ bool "Motorola EZX Platform"
++ select PXA_SSP
++
+ endchoice
+
+ if PXA_SHARPSL
+@@ -71,6 +75,35 @@
+
+ endif
+
++if PXA_EZX
++
++choice
++ prompt "Select target EZX device"
++
++config PXA_EZX_E680
++ bool "Motorola E680 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_A780
++ bool "Motorola A780 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_E2
++ bool "Motorola E2 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_A1200
++ bool "Motorola A1200 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_E6
++ bool "Motorola E6 GSM Phone"
++ select PXA27x
++
++endchoice
++
++endif
++
+ endmenu
+
+ config MACH_POODLE
+@@ -144,4 +177,5 @@
+ tristate
+ help
+ Enable support for PXA2xx SSP ports
++
+ endif
+Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-06-02 14:49:50.000000000 -0300
+@@ -18,6 +18,12 @@
+ obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
+ obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o
+ obj-$(CONFIG_MACH_TOSA) += tosa.o
++obj-$(CONFIG_PXA_EZX) += ezx.o ezx_ssp.o
++obj-$(CONFIG_PXA_EZX_A780) += ezx-a780.o
++obj-$(CONFIG_PXA_EZX_E680) += ezx-e680.o
++obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o
++obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
++obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+
+ # Support for blinky lights
+ led-y := leds.o
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,135 @@
++/*
++ * ezx.c - Common code for EZX platform.
++ *
++ * Copyright (c) 2005-2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++
++#include <asm/arch/pxafb.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ohci.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern int ezx_ssp_set_machinfo(struct ezxssp_machinfo *);
++
++/* EZX PXA Framebuffer */
++void ezx_lcd_power(int on, struct fb_var_screeninfo *var)
++{
++ if (on) {
++ mdelay(1);
++ GPSR3 = 0x00100000;
++ mdelay(10);
++ GPCR3 = 0x00100000;
++ GPDR3 |= 0x00100000;
++ } else {
++ GPSR3 = 0x00100000;
++ PGSR3 |= 0x00100000;
++ mdelay(41);
++ LCCR0 &= ~LCCR0_LDM; /* disable lcd disable done interrupt */
++ LCCR0 |= LCCR0_DIS; /* normal disable lcd */
++ mdelay(18);
++ }
++}
++EXPORT_SYMBOL(ezx_lcd_power);
++
++/* failsafe if we are not using the backlight platform driver */
++#ifndef CONFIG_BACKLIGHT_EZX
++void ezx_backlight_power(int on)
++{
++ if (on) {
++ pxa_gpio_mode(GPIO16_PWM0_MD);
++ pxa_set_cken(CKEN0_PWM0, 1);
++ PWM_CTRL0 = 0;
++ PWM_PWDUTY0 = 0x3ff;
++ PWM_PERVAL0 = 0x3ff;
++ } else {
++ PWM_CTRL0 = 0;
++ PWM_PWDUTY0 = 0x0;
++ PWM_PERVAL0 = 0x3FF;
++ pxa_set_cken(CKEN0_PWM0, 0);
++ }
++}
++#else
++void ezx_backlight_power(int on){}
++#endif
++EXPORT_SYMBOL(ezx_backlight_power);
++
++/* SSP */
++struct platform_device ezxssp_device = {
++ .name = "ezx-ssp",
++ .id = -1,
++};
++
++struct ezxssp_machinfo ezx_ssp_machinfo = {
++ .port = 1,
++ .cs_pcap = GPIO_SPI_CE,
++ .clk_pcap = 1,
++};
++
++/* OHCI Controller */
++static int ezx_ohci_init(struct device *dev)
++{
++ /* for A780 support (connected with Neptune) */
++ pxa_gpio_mode(GPIO30_USB_P3_2); /* GPIO30 - USB_P3_2/ICL_TXENB */
++ pxa_gpio_mode(GPIO31_USB_P3_6); /* GPIO31 - USB_P3_6/ICL_VPOUT */
++ pxa_gpio_mode(GPIO90_USB_P3_5); /* GPIO90 - USB_P3_5/ICL_VPIN */
++ pxa_gpio_mode(GPIO91_USB_P3_1); /* GPIO91 - USB_P3_1/ICL_XRXD */
++ pxa_gpio_mode(GPIO56_USB_P3_4); /* GPIO56 - USB_P3_4/ICL_VMOUT */
++ pxa_gpio_mode(GPIO113_USB_P3_3);/* GPIO113 - USB_P3_3/ICL_VMIN */
++ UP3OCR = 0x00000002;
++
++ UHCHR = UHCHR & ~(UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
++
++ return 0;
++}
++
++static struct pxaohci_platform_data ezx_ohci_platform_data = {
++ .port_mode = PMM_NPS_MODE,
++ .init = ezx_ohci_init,
++};
++
++
++static struct platform_device *devices[] __initdata = {
++ &ezxssp_device,
++};
++
++static int __init ezx_init(void)
++{
++ CKEN = CKEN9_OSTIMER | CKEN22_MEMC;
++
++ ezx_ssp_set_machinfo(&ezx_ssp_machinfo);
++
++ pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
++ pxa_gpio_mode(GPIO_ICL_FFTXD_MD);
++ pxa_gpio_mode(GPIO_ICL_FFCTS_MD);
++ pxa_gpio_mode(GPIO_ICL_FFRTS_MD);
++
++ pxa_gpio_mode(GPIO42_BTRXD_MD);
++ pxa_gpio_mode(GPIO43_BTTXD_MD);
++ pxa_gpio_mode(GPIO44_BTCTS_MD);
++ pxa_gpio_mode(GPIO45_BTRTS_MD);
++
++ /* Standard UART */
++ pxa_gpio_mode(GPIO46_STRXD_MD);
++ pxa_gpio_mode(GPIO47_STTXD_MD);
++
++ pxa_set_ohci_info(&ezx_ohci_platform_data);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++
++ return 0;
++}
++
++subsys_initcall(ezx_init);
+Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/include/asm-arm/arch-pxa/ezx.h 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,225 @@
++/*
++ * linux/include/asm-arm/arch-pxa/ezx.h
++ *
++ * Specific macro defines for Motorola Ezx Development Platform
++ *
++ * Author: Zhuang Xiaofan
++ * Created: Nov 25, 2003
++ * Copyright: Motorola Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* support E680 p3 and ealier PCB */
++//#define E680_P3_AND_EARLY
++
++#define GPIO_is_high(x) (GPLR(x) & GPIO_bit(x))
++#define set_GPIO(x) (GPSR(x) = GPIO_bit(x))
++#define clr_GPIO(x) (GPCR(x) = GPIO_bit(x))
++
++/*
++ * Flags in memory for sleep use
++ */
++#define FLAG_ADDR PHYS_OFFSET
++#define RESUME_ADDR (PHYS_OFFSET + 4)
++#define BPSIG_ADDR (PHYS_OFFSET + 8)
++
++#define USER_OFF_FLAG 0x5a5a5a5a
++#define SLEEP_FLAG 0x6b6b6b6b
++#define OFF_FLAG 0x7c7c7c7c
++#define REFLASH_FLAG 0x0C1D2E3F
++#define PASS_THRU_FLAG 0x12345678
++
++#define WDI_FLAG 0xbb00dead
++#define NO_FLAG 0xaa00dead
++
++/*
++ * GPIO control pin, have to change when hardware lock down
++ */
++
++#ifdef E680_P3_AND_EARLY
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 57 /* BB_RESET */
++#define GPIO_MCU_INT_SW 115 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 23 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */
++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (34 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#elif defined(A780_P1_AND_EARLY)
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 82 /* BB_RESET */
++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */
++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#else
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 82 /* BB_RESET */
++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 99 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++//#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 28 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* AP wake up bluetooth module */
++#define GPIO_BT_RESET 48 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#endif
++/*
++ * ezx platform, wake up source edge detect bit
++ */
++#define PEDR_INT_SEC 1
++
++#define GPIO_FLIP_PIN 12
++/*E680 screen lock button*/
++
++#define GPIO_LOCK_SCREEN_PIN GPIO_FLIP_PIN
++
++/* MMC interface */
++#define GPIO_MMC_DETECT 11
++#define GPIO_MMC_CLK 32
++#define GPIO_MMC_DATA0 92
++#define GPIO_MMC_WP 107
++#define GPIO_MMC_DATA1 109
++#define GPIO_MMC_DATA2 110
++#define GPIO_MMC_DATA3 111
++#define GPIO_MMC_CMD 112
++
++/* interface function */
++#define GPIO_MMC_CLK_MD (GPIO_MMC_CLK | GPIO_ALT_FN_2_OUT)
++#define GPIO_MMC_DATA0_MD (GPIO_MMC_DATA0 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA1_MD (GPIO_MMC_DATA1 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA2_MD (GPIO_MMC_DATA2 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA3_MD (GPIO_MMC_DATA3 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++
++#define GPIO_MMC_CMD_MD (GPIO_MMC_CMD | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++
++/* EMU GPIO 119 ---MUX2 120 --- MUX1 */
++#define GPIO_EMU_MUX1 120
++#define GPIO_EMU_MUX2 119
++#define GPIO_SNP_INT_CTL 86
++#define GPIO_SNP_INT_IN 87
++
++
++/* audio related pins */
++#define AP_13MHZ_OUTPUT_PIN 9
++
++#ifdef CONFIG_ARCH_EZX_E680
++#define GPIO_VA_SEL_BUL 79
++#define GPIO_FLT_SEL_BUL 80 /* out filter select pin */
++#define GPIO_MIDI_RESET 78 /* GPIO used by MIDI chipset */
++#define GPIO_MIDI_CS 33
++#define GPIO_MIDI_IRQ 15
++#define GPIO_MIDI_NPWE 49
++#define GPIO_MIDI_RDY 18
++#endif
++
++#ifdef CONFIG_ARCH_EZX_A780
++#define GPIO_HW_ATTENUATE_A780 96 /* hw noise attenuation be used or bypassed, for receiver or louderspeaker mode */
++#endif
++
++
++/* bp status pin */
++#define GPIO_BP_STATE 41
++
++/* define usb related pin */
++#define GPIO34_TXENB 34
++#define GPIO35_XRXD 35
++#define GPIO36_VMOUT 36
++#define GPIO39_VPOUT 39
++#define GPIO40_VPIN 40
++#define GPIO53_VMIN 53
++
++/* USB client 6 pin defination */
++#define GPIO34_TXENB_MD (GPIO34_TXENB | GPIO_ALT_FN_1_OUT)
++#define GPIO35_XRXD_MD (GPIO35_XRXD | GPIO_ALT_FN_2_IN )
++#define GPIO36_VMOUT_MD (GPIO36_VMOUT | GPIO_ALT_FN_1_OUT)
++#define GPIO39_VPOUT_MD (GPIO39_VPOUT | GPIO_ALT_FN_1_OUT)
++#define GPIO40_VPIN_MD (GPIO40_VPIN | GPIO_ALT_FN_3_IN )
++#define GPIO53_VMIN_MD (GPIO53_VMIN | GPIO_ALT_FN_2_IN )
++
++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++
+Index: linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h 2007-06-02 14:46:25.000000000 -0300
+@@ -849,6 +849,8 @@
+ #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */
+ #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */
+
++#define UP3OCR __REG(0x40600024) /* USB Port 3 Output Control register */
++
+ #define UDCCSN(x) __REG2(0x40600100, (x) << 2)
+ #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */
+ #define UDCCSR0_SA (1 << 7) /* Setup Active */
+@@ -1252,6 +1254,7 @@
+ #define GPIO33_nCS_5 33 /* chip select 5 */
+ #define GPIO34_FFRXD 34 /* FFUART receive */
+ #define GPIO34_MMCCS0 34 /* MMC Chip Select 0 */
++#define GPIO34_USB_P2_2 34 /* USB Port2 Pin 2 */
+ #define GPIO35_FFCTS 35 /* FFUART Clear to send */
+ #define GPIO36_FFDCD 36 /* FFUART Data carrier detect */
+ #define GPIO37_FFDSR 37 /* FFUART data set ready */
+@@ -1365,6 +1368,7 @@
+ #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN)
+ #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN)
+ #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN)
++#define GPIO22_SCLK2_MD (22 | GPIO_ALT_FN_3_IN)
+ #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT)
+ #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT)
+ #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT)
+@@ -1375,23 +1379,33 @@
+ #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT)
+ #define GPIO29_SDATA_IN_AC97_MD (29 | GPIO_ALT_FN_1_IN)
+ #define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN)
++#define GPIO29_SCLK_MD (29 | GPIO_ALT_FN_3_IN)
+ #define GPIO30_SDATA_OUT_AC97_MD (30 | GPIO_ALT_FN_2_OUT)
+ #define GPIO30_SDATA_OUT_I2S_MD (30 | GPIO_ALT_FN_1_OUT)
++#define GPIO30_USB_P3_2 (30 | GPIO_ALT_FN_3_OUT)
+ #define GPIO31_SYNC_I2S_MD (31 | GPIO_ALT_FN_1_OUT)
+ #define GPIO31_SYNC_AC97_MD (31 | GPIO_ALT_FN_2_OUT)
++#define GPIO31_USB_P3_6 (31 | GPIO_ALT_FN_3_OUT)
+ #define GPIO32_SDATA_IN1_AC97_MD (32 | GPIO_ALT_FN_1_IN)
+ #define GPIO32_SYSCLK_I2S_MD (32 | GPIO_ALT_FN_1_OUT)
+ #define GPIO32_MMCCLK_MD ( 32 | GPIO_ALT_FN_2_OUT)
+ #define GPIO33_nCS_5_MD (33 | GPIO_ALT_FN_2_OUT)
+ #define GPIO34_FFRXD_MD (34 | GPIO_ALT_FN_1_IN)
+ #define GPIO34_MMCCS0_MD (34 | GPIO_ALT_FN_2_OUT)
++#define GPIO34_USB_P2_2_MD (34 | GPIO_ALT_FN_1_OUT)
+ #define GPIO35_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO35_USB_P2_1_MD (35 | GPIO_ALT_FN_2_IN)
+ #define GPIO36_FFDCD_MD (36 | GPIO_ALT_FN_1_IN)
++#define GPIO36_USB_P2_4_MD (36 | GPIO_ALT_FN_1_OUT)
+ #define GPIO37_FFDSR_MD (37 | GPIO_ALT_FN_1_IN)
++#define GPIO37_SFRM2_MD (37 | GPIO_ALT_FN_2_IN)
+ #define GPIO38_FFRI_MD (38 | GPIO_ALT_FN_1_IN)
++#define GPIO38_STXD2_MD (38 | GPIO_ALT_FN_2_OUT)
+ #define GPIO39_MMCCS1_MD (39 | GPIO_ALT_FN_1_OUT)
+ #define GPIO39_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO39_USB_P2_6_MD (39 | GPIO_ALT_FN_1_OUT)
+ #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT)
++#define GPIO40_USB_P2_5_MD (40 | GPIO_ALT_FN_3_IN)
+ #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
+ #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN)
+ #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN)
+@@ -1416,13 +1430,17 @@
+ #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT)
+ #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT)
+ #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT)
++#define GPIO52_SCLK3_MD (52 | GPIO_ALT_FN_2_OUT)
+ #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT)
+ #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT)
++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO53_USB_P2_3_MD (53 | GPIO_ALT_FN_2_IN)
+ #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT)
+ #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT)
+ #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT)
+ #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT)
+ #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN)
++#define GPIO56_USB_P3_4 (56 | GPIO_ALT_FN_1_OUT)
+ #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN)
+ #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT)
+ #define GPIO59_LDD_1_MD (59 | GPIO_ALT_FN_2_OUT)
+@@ -1458,13 +1476,19 @@
+ #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT)
+ #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT)
+ #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN)
++#define GPIO81_STXD3_MD (81 | GPIO_ALT_FN_1_OUT)
+ #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT)
+ #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN)
+ #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT)
+ #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN)
++#define GPIO83_SFRM3_MD (83 | GPIO_ALT_FN_1_IN)
+ #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT)
+ #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN)
+ #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT)
++#define GPIO88_SRXD2_MD (88 | GPIO_ALT_FN_2_IN)
++#define GPIO89_SRXD3_MD (89 | GPIO_ALT_FN_1_IN)
++#define GPIO90_USB_P3_5 (90 | GPIO_ALT_FN_2_IN)
++#define GPIO91_USB_P3_1 (91 | GPIO_ALT_FN_2_IN)
+ #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT)
+ #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT)
+ #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT)
+@@ -1476,6 +1500,7 @@
+ #define GPIO112_MMCCMD_MD (112 | GPIO_ALT_FN_1_OUT)
+ #define GPIO113_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT)
+ #define GPIO113_AC97_RESET_N_MD (113 | GPIO_ALT_FN_2_OUT)
++#define GPIO113_USB_P3_3 (113 | GPIO_ALT_FN_3_IN)
+ #define GPIO117_I2CSCL_MD (117 | GPIO_ALT_FN_1_IN)
+ #define GPIO118_I2CSDA_MD (118 | GPIO_ALT_FN_1_IN)
+
+@@ -1491,6 +1516,7 @@
+ #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */
+ #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */
+ #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */
++#define PGSR(x) (__REG(0x40F00020 + ((unsigned long)(x)/32*4)))
+ #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */
+ #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */
+ #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */
+Index: linux-2.6.21/arch/arm/boot/compressed/head.S
+===================================================================
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head.S 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-06-02 14:46:25.000000000 -0300
+@@ -117,6 +117,9 @@
+ mov r0, r0
+ .endr
+
++ mov r1, #0x300 @ mach_id 0x363 is official EZX
++ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1
++
+ b 1f
+ .word 0x016f2818 @ Magic numbers to help the loader
+ .word start @ absolute load/run zImage address
+Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-06-02 14:46:25.000000000 -0300
+@@ -14,14 +14,14 @@
+ #define STUART ((volatile unsigned long *)0x40700000)
+ #define HWUART ((volatile unsigned long *)0x41600000)
+
+-#define UART FFUART
++#define UART STUART
+
+
+ static inline void putc(char c)
+ {
+- while (!(UART[5] & 0x20))
++/* while (!(UART[5] & 0x40))
+ barrier();
+- UART[0] = c;
++ UART[0] = c;*/
+ }
+
+ /*
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx_ssp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx_ssp.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,126 @@
++/*
++ * SSP control code for Motorola EZX phones
++ *
++ * Copyright (c) 2007 Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <asm/hardware.h>
++#include <asm/mach-types.h>
++
++#include <asm/arch/ssp.h>
++#include <asm/arch/pxa-regs.h>
++
++#include "ezx.h"
++
++static DEFINE_SPINLOCK(ezx_ssp_lock);
++static struct ssp_dev ezx_ssp_dev;
++static struct ssp_state ezx_ssp_state;
++static struct ezxssp_machinfo *ssp_machinfo;
++
++/* PCAP */
++unsigned long ezx_ssp_pcap_putget(ulong data)
++{
++ unsigned long flag;
++ u32 ret = 0;
++
++ spin_lock_irqsave(&ezx_ssp_lock, flag);
++ if (ssp_machinfo->cs_pcap >= 0)
++ GPCR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
++
++ ssp_write_word(&ezx_ssp_dev,data);
++ ssp_read_word(&ezx_ssp_dev, &ret);
++
++ if (ssp_machinfo->cs_pcap >= 0)
++ GPSR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
++ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
++
++ return ret;
++}
++EXPORT_SYMBOL(ezx_ssp_pcap_putget);
++
++void __init ezx_ssp_set_machinfo(struct ezxssp_machinfo *machinfo)
++{
++ ssp_machinfo = machinfo;
++}
++
++static int __init ezx_ssp_probe(struct platform_device *dev)
++{
++ int ret;
++ /* PCAP init */
++ pxa_gpio_mode(29|GPIO_ALT_FN_3_OUT);
++ pxa_gpio_mode(GPIO24_SFRM_MD);
++ pxa_gpio_mode(GPIO25_STXD_MD);
++ pxa_gpio_mode(GPIO26_SRXD_MD);
++
++ /* Chip Select - Disable All */
++ if (ssp_machinfo->cs_pcap >= 0)
++ pxa_gpio_mode(ssp_machinfo->cs_pcap | GPIO_OUT | GPIO_DFLT_HIGH);
++
++ ret = ssp_init(&ezx_ssp_dev, ssp_machinfo->port, 0);
++
++ if (ret)
++ printk(KERN_ERR "Unable to register SSP handler!\n");
++ else {
++ ssp_disable(&ezx_ssp_dev);
++ ssp_config(&ezx_ssp_dev,
++ (SSCR0_Motorola | SSCR0_DataSize(16) | SSCR0_EDSS),
++ (SSCR1_TxTresh(1) | SSCR1_RxTresh(1)),
++ 0, SSCR0_SerClkDiv(ssp_machinfo->clk_pcap));
++ ssp_enable(&ezx_ssp_dev);
++ }
++
++ return ret;
++}
++
++static int ezx_ssp_remove(struct platform_device *dev)
++{
++ ssp_exit(&ezx_ssp_dev);
++ return 0;
++}
++
++static int ezx_ssp_suspend(struct platform_device *dev, pm_message_t state)
++{
++ ssp_flush(&ezx_ssp_dev);
++ ssp_save_state(&ezx_ssp_dev,&ezx_ssp_state);
++
++ return 0;
++}
++
++static int ezx_ssp_resume(struct platform_device *dev)
++{
++ if (ssp_machinfo->cs_pcap >= 0)
++ GPSR(ssp_machinfo->cs_pcap) = GPIO_bit(ssp_machinfo->cs_pcap);
++ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
++ ssp_enable(&ezx_ssp_dev);
++
++ return 0;
++}
++
++static struct platform_driver ezxssp_driver = {
++ .probe = ezx_ssp_probe,
++ .remove = ezx_ssp_remove,
++ .suspend = ezx_ssp_suspend,
++ .resume = ezx_ssp_resume,
++ .driver = {
++ .name = "ezx-ssp",
++ },
++};
++
++int __init ezx_ssp_init(void)
++{
++ return platform_driver_register(&ezxssp_driver);
++}
++
++arch_initcall(ezx_ssp_init);
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.h 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,9 @@
++#include <asm/arch/ezx.h>
++
++/* SSP */
++struct ezxssp_machinfo {
++ int port;
++ int cs_pcap;
++ int clk_pcap;
++};
++
+Index: linux-2.6.21/arch/arm/mm/init.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mm/init.c 2007-06-02 14:46:22.000000000 -0300
++++ linux-2.6.21/arch/arm/mm/init.c 2007-06-02 14:46:25.000000000 -0300
+@@ -241,6 +241,10 @@
+ */
+ reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,
+ boot_pages << PAGE_SHIFT);
++#ifdef CONFIG_PXA_EZX
++ /* reserve the first page memory for exiting sleep and user off */
++ reserve_bootmem_node(pgdat, PHYS_OFFSET, PAGE_SIZE);
++#endif
+
+ #ifdef CONFIG_BLK_DEV_INITRD
+ /*
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a780.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,88 @@
++/*
++ * ezx-a780.c - Code specific to A780 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_a780 = {
++ .pixclock = 150000,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 16,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info a780_fb_info = {
++ .modes = &mode_a780,
++ .num_modes = 1,
++ .lccr0 = 0x002008F8,
++ .lccr3 = 0x0430FF09,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init a780_init(void)
++{
++ /* setup sleep mode values */
++ PWER = 0xc0007803; // disable usb, GPIO15 NC
++ PFER = 0x00007803;
++ PRER = 0x00001802;
++ PGSR0 = 0x00000010;
++ PGSR1 = 0x02800000;
++ PGSR2 = 0x00040000;
++ PGSR3 = 0x00000008;
++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE;
++ PSLR = 0x05800f00;
++
++ set_pxa_fb_info(&a780_fb_info);
++
++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX1);
++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = a780_init,
++MACHINE_END
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e2.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,70 @@
++/*
++ * ezx-e2.c - Code specific to E2 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e2 = {
++ .pixclock = 192308,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e2_fb_info = {
++ .modes = &mode_e2,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e2_init(void)
++{
++ set_pxa_fb_info(&e2_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e2_init,
++MACHINE_END
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e680.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,87 @@
++/*
++ * ezx-e680.c - Code specific to E680 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e680 = {
++ .pixclock = 150000,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 16,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e680_fb_info = {
++ .modes = &mode_e680,
++ .num_modes = 1,
++ .lccr0 = 0x002008F8,
++ .lccr3 = 0x0430FF09,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e680_init(void)
++{
++ /* setup sleep mode values */
++ PWER = 0xc000f803; // disable usb 0xdc00f803;
++ PFER = 0x0000f803;
++ PRER = 0x00001802;
++ PGSR0 = 0x00000010;
++ PGSR1 = 0x02800000;
++ PGSR2 = 0x00040000;
++ PGSR3 = 0x00000000;
++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE;
++ PSLR = 0x05800f00;
++
++ set_pxa_fb_info(&e680_fb_info);
++
++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX1);
++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e680_init,
++MACHINE_END
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-a1200.c 2007-06-02 14:46:25.000000000 -0300
+@@ -0,0 +1,70 @@
++/*
++ * ezx-a1200.c - Code specific to A1200 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_a1200 = {
++ .pixclock = 192308,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info a1200_fb_info = {
++ .modes = &mode_a1200,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init a1200_init(void)
++{
++ set_pxa_fb_info(&a1200_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = a1200_init,
++MACHINE_END
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-e6.c 2007-06-02 14:48:08.000000000 -0300
+@@ -0,0 +1,70 @@
++/*
++ * ezx-e6.c - Code specific to E6 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++
++#include "generic.h"
++#include "ezx.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e6 = {
++ .pixclock = 192308,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e6_fb_info = {
++ .modes = &mode_e6,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e6_init(void)
++{
++ set_pxa_fb_info(&e6_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e6_init,
++MACHINE_END
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch
new file mode 100755
index 0000000000..94581d4531
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-emu.patch
@@ -0,0 +1,313 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-emu.c 2007-06-02 20:32:34.000000000 -0300
+@@ -0,0 +1,215 @@
++/*
++ * EMU Driver for Motorola EZX phones
++ *
++ * Copyright (c) 2007 Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
++#include <asm/arch/udc.h>
++
++static struct pxa2xx_udc_mach_info ezx_udc_info;
++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
++extern int ezx_pcap_read_bit(u_int32_t);
++
++#if defined CONFIG_EZX_EMU_USB
++#define emu_switch_to_default() emu_switch_to_usb()
++#elif defined CONFIG_EZX_EMU_UART
++#define emu_switch_to_default() emu_switch_to_uart()
++#else
++#define emu_switch_to_default() emu_switch_to_nothing()
++#endif
++
++void emu_switch_to_usb(void)
++{
++ pxa_gpio_mode(GPIO34_USB_P2_2_MD);
++ pxa_gpio_mode(GPIO35_USB_P2_1_MD);
++ pxa_gpio_mode(GPIO36_USB_P2_4_MD);
++ pxa_gpio_mode(GPIO39_USB_P2_6_MD);
++ pxa_gpio_mode(GPIO40_USB_P2_5_MD);
++ pxa_gpio_mode(GPIO53_USB_P2_3_MD);
++ UP2OCR = 0x02000000;
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_RS232ENB, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_FSENB, 0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_VUSB_EN, 1);
++ clr_GPIO(GPIO_EMU_MUX1);
++ clr_GPIO(GPIO_EMU_MUX2);
++}
++
++void emu_switch_to_uart(void)
++{
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_VUSB_EN,0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_RS232ENB, 0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_RS232_DIR, 1);
++ set_GPIO(GPIO39_FFTXD);
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO39_FFTXD_MD);
++ pxa_gpio_mode(GPIO53_FFRXD_MD);
++ CKEN |= CKEN6_FFUART;
++ clr_GPIO(GPIO_EMU_MUX1);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++}
++
++void emu_switch_to_audio(int stereo)
++{
++ clr_GPIO(GPIO39_VPOUT);
++ if (stereo) {
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_IN);
++ clr_GPIO(GPIO39_VPOUT);
++ } else {
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ }
++
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN);
++ set_GPIO(GPIO_EMU_MUX1);
++ if (stereo)
++ set_GPIO(GPIO_EMU_MUX2);
++ else
++ clr_GPIO(GPIO_EMU_MUX2);
++}
++
++void emu_switch_to_nothing(void)
++{
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_VUSB_EN, 0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_RS232ENB, 1);
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN);
++}
++
++
++static irqreturn_t emu_irq(int irq, void *data)
++{
++ switch (irq) {
++ case EZX_IRQ_USB4V:
++ if(ezx_pcap_read_bit(SSP_PCAP_ADJ_BIT_PSTAT_USBDET_4V))
++ emu_switch_to_default();
++ break;
++ case EZX_IRQ_USB1V:
++ if(!ezx_pcap_read_bit(SSP_PCAP_ADJ_BIT_PSTAT_USBDET_1V))
++ emu_switch_to_nothing();
++ break;
++ }
++
++ return IRQ_HANDLED;
++}
++
++static int __init ezx_emu_probe(struct platform_device *dev)
++{
++ pxa_gpio_mode(GPIO_SNP_INT_IN | GPIO_IN);
++ pxa_gpio_mode(GPIO_EMU_MUX1 | GPIO_OUT);
++ pxa_gpio_mode(GPIO_EMU_MUX2 | GPIO_OUT);
++
++ request_irq(EZX_IRQ_USB4V, &emu_irq, SA_INTERRUPT, "usb 4v", NULL);
++ request_irq(EZX_IRQ_USB1V, &emu_irq, SA_INTERRUPT, "usb 1v", NULL);
++
++ pxa_set_udc_info(&ezx_udc_info);
++
++ if(ezx_pcap_read_bit(SSP_PCAP_ADJ_BIT_PSTAT_USBDET_4V))
++ emu_switch_to_default();
++ else
++ emu_switch_to_nothing();
++
++ return 0;
++}
++
++static int ezx_emu_remove(struct platform_device *dev)
++{
++ free_irq(EZX_IRQ_USB4V, NULL);
++ free_irq(EZX_IRQ_USB1V, NULL);
++
++ return 0;
++}
++
++static int ezx_emu_suspend(struct platform_device *dev, pm_message_t state)
++{
++ emu_switch_to_nothing();
++ return 0;
++}
++
++static int ezx_emu_resume(struct platform_device *dev)
++{
++ emu_switch_to_default();
++ return 0;
++}
++
++/* USB Device Controller */
++static int udc_connected_status;
++static void ezx_udc_command(int cmd)
++{
++ switch (cmd) {
++ case PXA2XX_UDC_CMD_DISCONNECT:
++ printk(KERN_NOTICE "USB cmd disconnect\n");
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PU,0);
++ udc_connected_status = 0;
++ break;
++ case PXA2XX_UDC_CMD_CONNECT:
++ printk(KERN_NOTICE "USB cmd connect\n");
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PU,1);
++ udc_connected_status = 1;
++ break;
++ }
++}
++
++static int ezx_udc_is_connected(void)
++{
++ return udc_connected_status;
++}
++
++static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = {
++ .udc_is_connected = ezx_udc_is_connected,
++ .udc_command = ezx_udc_command,
++};
++
++static struct platform_driver ezxemu_driver = {
++ .probe = ezx_emu_probe,
++ .remove = ezx_emu_remove,
++ .suspend = ezx_emu_suspend,
++ .resume = ezx_emu_resume,
++ .driver = {
++ .name = "ezx-emu",
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ezx_emu_init(void)
++{
++ return platform_driver_register(&ezxemu_driver);
++}
++
++void ezx_emu_fini(void)
++{
++ return platform_driver_unregister(&ezxemu_driver);
++}
++
++module_init(ezx_emu_init);
++module_exit(ezx_emu_fini);
++
++MODULE_DESCRIPTION("Motorola Enchanced Mini Usb driver");
++MODULE_AUTHOR("Daniel Ribeiro <drwyrm@gmail.com>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-06-02 20:32:32.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-06-02 20:32:34.000000000 -0300
+@@ -73,6 +73,7 @@
+
+ endchoice
+
++
+ endif
+
+ if PXA_EZX
+@@ -117,6 +118,28 @@
+ config EZX_MCI_TF
+ bool
+
++config EZX_EMU
++ bool "Motorola Enchanced Mini Usb"
++ depends on EZX_PCAP
++
++if EZX_EMU
++
++choice
++ prompt "Select default EMU mode"
++
++config EZX_EMU_USB
++ bool "USB"
++
++config EZX_EMU_UART
++ bool "UART"
++
++config EZX_EMU_NOTHING
++ bool "nothing"
++
++endchoice
++
++endif
++
+ endif
+
+ endmenu
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-06-02 20:32:28.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-06-02 20:32:34.000000000 -0300
+@@ -150,11 +150,35 @@
+ .resource = ezxpcap_resources,
+ };
+
++/* EMU */
++static struct resource ezxemu_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_USB4V,
++ .end = EZX_IRQ_USB4V,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_USB1V,
++ .end = EZX_IRQ_USB1V,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device ezxemu_device = {
++ .name = "ezx-emu",
++ .id = -1,
++ .dev = {
++ .parent = &ezxpcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(ezxemu_resources),
++ .resource = ezxemu_resources,
++};
+
+ static struct platform_device *devices[] __initdata = {
+ &ezxssp_device,
+ &ezxbp_device,
+ &ezxpcap_device,
++ &ezxemu_device,
+ };
+
+ /* PM */
+Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-06-02 20:32:28.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-06-02 20:32:34.000000000 -0300
+@@ -26,6 +26,7 @@
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+ obj-$(CONFIG_EZX_BP) += ezx-bp.o
+ obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
++obj-$(CONFIG_EZX_EMU) += ezx-emu.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch
new file mode 100755
index 0000000000..6f1a2c1ba4
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-enable-stuart.patch
@@ -0,0 +1,99 @@
+Index: linux-2.6.21/arch/arm/boot/compressed/head.S
+===================================================================
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head.S 2007-05-19 11:22:56.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-05-19 11:50:29.000000000 -0300
+@@ -10,6 +10,7 @@
+ */
+ #include <linux/linkage.h>
+
++#define DEBUG
+ /*
+ * Debugging stuff
+ *
+@@ -117,6 +118,8 @@
+ mov r0, r0
+ .endr
+
++ inituart r10, r11
++
+ mov r1, #0x300 @ mach_id 0x363 is official EZX
+ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1
+
+Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:22:56.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:30:38.000000000 -0300
+@@ -19,9 +19,9 @@
+
+ static inline void putc(char c)
+ {
+-/* while (!(UART[5] & 0x40))
++ while (!(UART[5] & 0x40))
+ barrier();
+- UART[0] = c;*/
++ UART[0] = c;
+ }
+
+ /*
+Index: linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:30:54.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:49:35.000000000 -0300
+@@ -14,11 +14,52 @@
+ #include "hardware.h"
+
+ .macro addruart,rx
+- mrc p15, 0, \rx, c1, c0
+- tst \rx, #1 @ MMU enabled?
+- moveq \rx, #0x40000000 @ physical
+- movne \rx, #io_p2v(0x40000000) @ virtual
+- orr \rx, \rx, #0x00100000
++@ mrc p15, 0, \rx, c1, c0
++@ tst \rx, #1 @ MMU enabled?
++ mov \rx, #0x40000000
++@ moveq \rx, #0x40000000 @ physical
++@ movne \rx, #io_p2v(0x40000000) @ virtual
++ orr \rx, \rx, #0x00700000
++ .endm
++
++ .macro inituart,rd,rx
++ ldr \rd, =0x41300004 @ CKEN
++ ldr \rx, [\rd]
++ orr \rx, \rx, #0x20
++ str \rx, [\rd]
++
++ ldr \rd, =0x40E0005C
++ ldr \rx, [\rd]
++ bic \rx, \rx, #0xF0000000 @ clear GPIO46/47 config
++ orr \rx, \rx, #0x60000000 @ set GPIO46: AF2, GPIO47: AF1
++ str \rx, [\rd]
++ ldr \rd, =0x40E00010
++ ldr \rx, [\rd]
++ bic \rx, \rx, #0x0000c000 @ clear GPIO46/47 direction
++ orr \rx, \rx, #0x00008000 @ set GPIO 47 out, 46 in
++ str \rx, [\rd]
++
++ addruart \rd
++ mov \rx, #0x83 @ DLAB = 1
++ strb \rx, [\rd, #0x0c]
++
++ mov \rx, #0x08 @ Divisor 8 => 115200 bps
++ strb \rx, [\rd, #0x00]
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x04] @ Divisor high = 0
++
++ mov \rx, #0x03
++ strb \rx, [\rd, #0x0c] @ DLAB = 0, n81
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x10] @ MCR = 0
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x28] @ disable autobaud
++
++ mov \rx, #0x40
++ strb \rx, [\rd, #0x04] @ IER UUE (UART Enable)
+ .endm
+
+ #define UART_SHIFT 2
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch
new file mode 100755
index 0000000000..7ef42f0ffc
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-mtd-map.patch
@@ -0,0 +1,274 @@
+Index: linux-2.6.21/drivers/mtd/maps/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/mtd/maps/Kconfig 2007-04-26 00:08:32.000000000 -0300
++++ linux-2.6.21/drivers/mtd/maps/Kconfig 2007-04-26 20:49:33.000000000 -0300
+@@ -595,6 +595,28 @@
+ help
+ This enables access to the flash chip on the Sharp SL Series of PDAs.
+
++config MTD_EZX
++ tristate "Map driver for Motorola EZX Platform"
++ depends on MTD && PXA_EZX
++
++if MTD_EZX
++
++choice
++ prompt "Select partition mapping for EZX platform"
++
++config MTD_EZX_A780
++ bool "A780/E680 Original Mapping"
++
++config MTD_EZX_A780_ALTERNATE
++ bool "A780/E680 Alternate Mapping for BLOB2"
++
++config MTD_EZX_E2
++ bool "E2 Original Mapping"
++
++endchoice
++
++endif
++
+ config MTD_PLATRAM
+ tristate "Map driver for platform device RAM (mtd-ram)"
+ depends on MTD
+Index: linux-2.6.21/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/mtd/maps/Makefile 2007-04-26 00:08:32.000000000 -0300
++++ linux-2.6.21/drivers/mtd/maps/Makefile 2007-04-26 20:30:30.000000000 -0300
+@@ -72,3 +72,4 @@
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
+ obj-$(CONFIG_MTD_TQM834x) += tqm834x.o
++obj-$(CONFIG_MTD_EZX) += ezx-flash.o
+Index: linux-2.6.21/drivers/mtd/maps/ezx-flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/mtd/maps/ezx-flash.c 2007-04-26 20:30:30.000000000 -0300
+@@ -0,0 +1,227 @@
++/*
++ * $Id: $
++ *
++ * Map driver for the PXA27x
++ *
++ * Author: Harald Welte
++ * Copyright: (C) 2001 MontaVista Software Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Mar 3, 2007 - (Daniel Ribeiro) Alternate partition table
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/dma-mapping.h>
++#include <linux/slab.h>
++
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/io.h>
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/mainstone.h>
++
++#define WINDOW_ADDR 0x0
++#define WINDOW_SIZE (32*1024*1024)
++#define WINDOW_CACHE_ADDR 0x0
++#define WINDOW_CACHE_SIZE 0x1a00000
++
++static void pxa27x_map_inval_cache(struct map_info *map, unsigned long from,
++ ssize_t len)
++{
++#if 0
++ unsigned long endaddress, i, j;
++ endaddress = from + len -1;
++ from &= ~(32-1);
++ endaddress &= ~(32-1);
++ for (i = from; i <= endaddress; i += 32)
++ asm("mcr p15, 0, %0, c7, c6, 1"::"r"(i));
++
++ asm( "mrc p15, 0, %0, c2, c0, 0\n"
++ "mov %0, %0\n"
++ "sub pc, pc #4"
++ :"=r"(j));
++#else
++ consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE);
++#endif
++}
++
++
++struct map_info pxa27x_map = {
++ .name = "PXA27x flash",
++ .size = WINDOW_SIZE,
++ .phys = WINDOW_ADDR,
++ .inval_cache = &pxa27x_map_inval_cache,
++};
++
++#if defined CONFIG_MTD_EZX_A780_ALTERNATE
++static struct mtd_partition pxa27x_partitions[] = {
++ {
++ .name = "Bootloader (RO)",
++ .size = 0x00020000,
++ .offset = 0,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Bootloader 2",
++ .size = 0x00020000,
++ .offset = 0x00020000,
++ } , {
++ .name = "Kernel 1",
++ .size = 0x000e0000, // 896KB
++ .offset = 0x00040000,
++ } , {
++ .name = "rootfs",
++ .size = 0x01760000,
++ .offset = 0x00120000,
++ } , {
++ .name = "Kernel 2",
++ .size = 0x00180000, // 1.5MB
++ .offset = 0x01880000,
++ } , {
++ .name = "VFM_Filesystem",
++ .size = 0x005a0000,
++ .offset = 0x01a00000,
++ } , {
++ .name = "setup",
++ .size = 0x00020000,
++ .offset = 0x01fa0000,
++ } , {
++ .name = "Logo",
++ .size = 0x00020000,
++ .offset = 0x01fc0000,
++ },
++};
++#elif defined CONFIG_MTD_EZX_A780
++static struct mtd_partition pxa27x_partitions[] = {
++ {
++ .name = "Bootloader",
++ .size = 0x00020000,
++ .offset = 0,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Kernel",
++ .size = 0x000e0000,
++ .offset = 0x00020000,
++ } , {
++ .name = "rootfs",
++ .size = 0x018e0000,
++ .offset = 0x00120000,
++ } , {
++ .name = "VFM_Filesystem",
++ .size = 0x00580000,
++ .offset = 0x01a00000,
++ } , {
++ .name = "setup",
++ .size = 0x00020000,
++ .offset = 0x01fa0000,
++ } , {
++ .name = "Logo",
++ .size = 0x00020000,
++ .offset = 0x01fc0000,
++ },
++};
++#else
++#error "please define partition for this PXA27x implementation"
++#endif
++
++
++static struct mtd_info *mymtd;
++static struct mtd_partition *parsed_parts;
++
++static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
++
++static int __init init_pxa27x(void)
++{
++ struct mtd_partition *parts;
++ int nb_parts = 0;
++ int parsed_nr_parts = 0;
++ char *part_type = "static";
++
++ pxa27x_map.bankwidth = (BOOT_DEF & 1) ? 2 : 4;
++
++ printk("Probing PXA27x flash at physical address 0x%08x (%d-bit bankwidth)\n",
++ WINDOW_ADDR, pxa27x_map.bankwidth * 8);
++ pxa27x_map.virt = ioremap(pxa27x_map.phys, pxa27x_map.size);
++
++ if (!pxa27x_map.virt) {
++ printk("Failed to ioremap\n");
++ return -EIO;
++ }
++
++ mymtd = do_map_probe("cfi_probe", &pxa27x_map);
++ if (!mymtd) {
++ iounmap((void *)pxa27x_map.virt);
++ return -ENXIO;
++ }
++ mymtd->owner = THIS_MODULE;
++
++#if 0
++ /* ioremap the first flash chip as cacheable */
++ pxa27x_map.cached = ioremap_cached(pxa27x_map.phys, pxa27x_map.size);
++ if (!pxa27x_map.cached) {
++ printk("Failed to do cacheable-ioremap\n");
++ iounmap((void *)pxa27x_map.virt);
++ return -EIO;
++ }
++#endif
++ simple_map_init(&pxa27x_map);
++
++ if (parsed_nr_parts == 0) {
++ int ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0);
++
++ if (ret > 0) {
++ part_type = "RedBoot";
++ parsed_nr_parts = ret;
++ }
++ }
++
++ if (parsed_nr_parts > 0) {
++ parts = parsed_parts;
++ nb_parts = parsed_nr_parts;
++ } else {
++ parts = pxa27x_partitions;
++ nb_parts = ARRAY_SIZE(pxa27x_partitions);
++ }
++
++ if (nb_parts) {
++ printk(KERN_NOTICE "Using %s partition definition\n", part_type);
++ add_mtd_partitions(mymtd, parts, nb_parts);
++ } else {
++ add_mtd_device(mymtd);
++ }
++#if 0
++ if (ret = ezx_partition_init())
++#endif
++ return 0;
++}
++
++static void __exit cleanup_pxa27x(void)
++{
++ if (mymtd) {
++ del_mtd_partitions(mymtd);
++ map_destroy(mymtd);
++ if (parsed_parts)
++ kfree(parsed_parts);
++ }
++ if (pxa27x_map.virt)
++ iounmap((void *)pxa27x_map.virt);
++ if (pxa27x_map.cached)
++ iounmap((void *)pxa27x_map.cached);
++ return;
++}
++
++module_init(init_pxa27x);
++module_exit(cleanup_pxa27x);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("MTD map driver for Motorola EZX platform");
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch
new file mode 100755
index 0000000000..6af6317a6e
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-pcap.patch
@@ -0,0 +1,1242 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/arch/arm/mach-pxa/ezx-pcap.c 2007-06-07 21:39:37.000000000 -0300
+@@ -0,0 +1,472 @@
++/* Driver for Motorola PCAP2 as present in EZX phones
++ *
++ * This is both a SPI device driver for PCAP itself, as well as
++ * an IRQ demultiplexer for handling PCAP generated events such as
++ * headphone jack sense by downstream drivers.
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/kernel_stat.h>
++#include <linux/proc_fs.h>
++
++#include <asm/hardware.h>
++#include <asm/mach-types.h>
++
++#include <asm/arch/ssp.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++#include <asm/arch/irqs.h>
++#include <asm/mach/irq.h>
++
++#include "ezx.h"
++
++#if 0
++#define DEBUGP(x, args...) printk(x, ## args)
++#else
++#define DEBUGP(x, args...)
++#endif
++
++extern unsigned long ezx_ssp_pcap_putget(ulong);
++
++int ezx_pcap_write(u_int8_t reg_num, u_int32_t value)
++{
++ value &= SSP_PCAP_REGISTER_VALUE_MASK;
++ value |= SSP_PCAP_REGISTER_WRITE_OP_BIT
++ | (reg_num<<SSP_PCAP_REGISTER_ADDRESS_SHIFT);
++
++ local_irq_disable();
++ ezx_ssp_pcap_putget(value);
++ local_irq_enable();
++
++ DEBUGP("pcap write r%x: 0x%08x\n", reg_num, value);
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_write);
++
++int ezx_pcap_read(u_int8_t reg_num, u_int32_t *value)
++{
++ u_int32_t frame = SSP_PCAP_REGISTER_READ_OP_BIT
++ | (reg_num<<SSP_PCAP_REGISTER_ADDRESS_SHIFT);
++
++ local_irq_disable();
++ *value = ezx_ssp_pcap_putget(frame);
++ local_irq_enable();
++
++ DEBUGP("pcap read r%x: 0x%08x\n", reg_num, *value);
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_read);
++
++int ezx_pcap_bit_set(u_int32_t sspPcapBit, u_int8_t to)
++{
++ int ret;
++ u_int32_t tmp;
++ u_int32_t bit = (sspPcapBit & SSP_PCAP_REGISTER_VALUE_MASK);
++ u_int8_t reg_num = (sspPcapBit & SSP_PCAP_REGISTER_ADDRESS_MASK)
++ >> SSP_PCAP_REGISTER_ADDRESS_SHIFT;
++
++ ret = ezx_pcap_read(reg_num, &tmp);
++ if (ret < 0)
++ return ret;
++
++ if (to == 0)
++ tmp &= ~bit;
++ else
++ tmp |= bit;
++
++ return ezx_pcap_write(reg_num, tmp);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_bit_set);
++
++int ezx_pcap_read_bit(u_int32_t bit)
++{
++ int ret;
++ u_int32_t tmp;
++ u_int8_t reg_num = (bit & SSP_PCAP_REGISTER_ADDRESS_MASK)
++ >> SSP_PCAP_REGISTER_ADDRESS_SHIFT;
++
++ ret = ezx_pcap_read(reg_num, &tmp);
++ if (ret < 0)
++ return ret;
++
++ return tmp & (bit & SSP_PCAP_REGISTER_VALUE_MASK);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_read_bit);
++
++/* /proc/pcap support */
++#ifdef CONFIG_PROC_FS
++
++static struct proc_dir_entry *proc_pcap;
++
++char *pcap_registers[] = {
++ "ISR\t", "MSR\t", "PSTAT\t", NULL, NULL, NULL, "VREG2\t", "VREG\t",
++ "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC", "AUD_RX_AMPS",
++ "AUD_ST_DAC", NULL, NULL, NULL, NULL, NULL, NULL, "BUSCTRL\t",
++ "PERIPH\t", NULL, NULL, "LOWPWR\t", NULL, "AUD_TX_AMPS", "GP\t",
++ NULL, NULL, NULL, NULL, NULL
++};
++
++static int pcap_read_proc(char *page, char **start, off_t off, int count,
++ int *eof, void *data_unused)
++{
++ int len = 0;
++ u_int8_t r;
++ u_int32_t v;
++ off_t begin = 0;
++
++ for(r=0;r<32;r++) {
++ if (pcap_registers[r] == NULL)
++ continue;
++ ezx_pcap_read(r, &v);
++ len += sprintf(page+len, "%s\t%08X\n", pcap_registers[r], v);
++ if(len + begin > off + count)
++ goto done;
++ if(len + begin < off) {
++ begin += len;
++ len = 0;
++ }
++ }
++ *eof = 1;
++done:
++ if (off >= len+begin)
++ return 0;
++ *start = page + (off-begin);
++ return ((count < begin+len-off) ? count : begin+len-off);
++}
++#endif
++
++void ezx_pcap_vibrator_level(u_int32_t value)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(SSP_PCAP_ADJ_AUX_VREG_REGISTER, &tmp);
++
++ tmp &= (~SSP_PCAP_VIBRATOR_VOLTAGE_LEVEL_MASK);
++ tmp |= value;
++
++ ezx_pcap_write(SSP_PCAP_ADJ_AUX_VREG_REGISTER, tmp);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
++
++static int __init pcap_init(void)
++{
++ /* initialize registers */
++#warning FIXME: pcap_init still chip level
++ /* implement a per board pcap init reg array? */
++
++ ezx_pcap_write(SSP_PCAP_ADJ_MSR_REGISTER, PCAP_MASK_ALL_INTERRUPT);
++ ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, PCAP_CLEAR_INTERRUPT_REGISTER);
++
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL, 1);
++// ezx_pcap_vibrator_level(PCAP_VIBRATOR_VOLTAGE_LEVEL3);
++
++ /* set SW1 sleep to keep SW1 1.3v in sync mode */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE10, 0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE11, 0);
++ /* SW1 active in sync mode */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE00, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE01, 0);
++ /* at SW1 -core voltage to 1.30V */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW10_DVS, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW11_DVS, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW12_DVS, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW13_DVS, 0);
++
++ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_STBY, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V3_LOWPWR, 0);
++
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_STBY, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V8_LOWPWR, 0);
++
++ /* when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
++ * camera for e680 */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_STBY, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V4_LOWPWR, 1);
++
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_STBY, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_VREG2_V6_LOWPWR, 0);
++
++ /* set Vc to low power mode when AP sleep */
++ //SSP_PCAP_bit_set( SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VC_STBY);
++
++ /* set VAUX2 to voltage 2.775V and low power mode when AP sleep */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_1, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_0, 0);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_STBY, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_LOWPWR, 1);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, 1);
++
++// PGSR(GPIO34_TXENB) |= GPIO_bit(GPIO34_TXENB);
++
++ return 0;
++}
++/* MMC/SD specific functions */
++
++void ezx_pcap_mmcsd_voltage(u_int32_t bits)
++{
++ unsigned int tmp;
++ ezx_pcap_read(SSP_PCAP_ADJ_AUX_VREG_REGISTER, &tmp);
++#if defined(CONFIG_EZX_MCI_SD)
++ tmp &= 0xffffff9f; /* zero all vaux2 bits */
++ tmp |= (bits & 0x3) << 5;
++#elif defined(CONFIG_EZX_MCI_TF)
++ tmp &= 0xfffff0ff; /* zero all vaux3 bits */
++ tmp |= (bits & 0xf) << 8;
++#endif
++ ezx_pcap_write(SSP_PCAP_ADJ_AUX_VREG_REGISTER, tmp);
++}
++EXPORT_SYMBOL(ezx_pcap_mmcsd_voltage);
++
++int ezx_pcap_mmcsd_power(int on)
++{
++ if (on > 0) on = 1;
++ else on = 0;
++#if defined(CONFIG_EZX_MCI_SD)
++ return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN, on);
++#elif defined(CONFIG_EZX_MCI_TF)
++ return ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_EN, on);
++#endif
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_power);
++
++/* IRQ Handling */
++
++/* Array indexed by BIT POSITION of PCAP register, returns IRQ number */
++static unsigned int pcap2irq[] = {
++ [0] = EZX_IRQ_ADCDONE,
++ [1] = EZX_IRQ_TS,
++ [2] = 0, /* 1HZ */
++ [3] = 0, /* WH */
++ [4] = 0, /* WL */
++ [5] = 0, /* TODA */
++ [6] = EZX_IRQ_USB4V,
++ [7] = 0, /* ONOFF */
++ [8] = 0, /* ONOFF2 */
++ [9] = EZX_IRQ_USB1V,
++ [10] = 0, /* MOBPORT */
++ [11] = EZX_IRQ_MIC,
++ [12] = EZX_IRQ_HEADJACK,
++ [13] = 0, /* ST */
++ [14] = 0, /* PC */
++ [15] = 0, /* WARM */
++ [16] = 0, /* EOL */
++ [17] = 0, /* CLK */
++ [18] = 0, /* SYSRST */
++ [19] = 0,
++ [20] = EZX_IRQ_ADCDONE2,
++ [21] = 0, /* SOFTRESET */
++ [22] = 0, /* MNEXB */
++};
++
++/* Array indexed by IRQ NUMBER, returns PCAP absolute value */
++static unsigned int irq2pcap[] = {
++ [EZX_IRQ_USB4V] = SSP_PCAP_ADJ_BIT_ISR_USB4VI,
++ [EZX_IRQ_USB1V] = SSP_PCAP_ADJ_BIT_ISR_USB1VI,
++ [EZX_IRQ_HEADJACK] = SSP_PCAP_ADJ_BIT_ISR_A1I,
++ [EZX_IRQ_MIC] = SSP_PCAP_ADJ_BIT_ISR_MB2I,
++ [EZX_IRQ_ADCDONE] = SSP_PCAP_ADJ_BIT_ISR_ADCDONEI,
++ [EZX_IRQ_TS] = SSP_PCAP_ADJ_BIT_ISR_TSI,
++ [EZX_IRQ_ADCDONE2] = SSP_PCAP_ADJ_BIT_ISR_ADCDONE2I,
++};
++
++static void pcap_ack_irq(unsigned int irq)
++{
++ DEBUGP("pcap_ack_irq: %u\n", irq);
++ ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, irq2pcap[irq]);
++}
++
++static void pcap_mask_irq(unsigned int irq)
++{
++ u_int32_t reg;
++
++ DEBUGP("pcap_mask_irq: %u\n", irq);
++
++ /* this needs to be atomic... but we're not on SMP so it is */
++ ezx_pcap_read(SSP_PCAP_ADJ_MSR_REGISTER, &reg);
++ reg |= irq2pcap[irq];
++ ezx_pcap_write(SSP_PCAP_ADJ_MSR_REGISTER, reg);
++}
++
++static void pcap_unmask_irq(unsigned int irq)
++{
++ u_int32_t tmp;
++ DEBUGP("pcap_unmask_irq: %u\n", irq);
++
++ /* this needs to be atomic... but we're not on SMP so it is */
++ ezx_pcap_read(SSP_PCAP_ADJ_MSR_REGISTER, &tmp);
++ tmp &= ~irq2pcap[irq];
++ ezx_pcap_write(SSP_PCAP_ADJ_MSR_REGISTER, tmp);
++}
++
++static struct irq_chip pcap_chip = {
++ .ack = pcap_ack_irq,
++ .mask = pcap_mask_irq,
++ .unmask = pcap_unmask_irq,
++};
++
++/* handler for interrupt received from PCAP via GPIO */
++static void pcap_irq_demux_handler(unsigned int irq, struct irq_desc *desc)
++{
++ int i;
++ const unsigned int cpu = smp_processor_id();
++ u_int32_t reg, mask;
++
++ spin_lock(&desc->lock);
++
++ DEBUGP("pcap_irq_demux_handler(%u,,) entered\n", irq);
++
++ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
++
++ if (unlikely(desc->status & IRQ_INPROGRESS)) {
++ DEBUGP("irq busy, masking it off\n");
++ desc->status |= (IRQ_PENDING | IRQ_MASKED);
++ desc->chip->mask(irq);
++ desc->chip->ack(irq);
++ goto out_unlock;
++ }
++
++ kstat_cpu(cpu).irqs[irq]++;
++ desc->chip->ack(irq);
++ desc->status |= IRQ_INPROGRESS;
++
++ do {
++ if (unlikely((desc->status &
++ (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
++ (IRQ_PENDING | IRQ_MASKED))) {
++ DEBUGP("dealing with pending IRQ, unmasking\n");
++ desc->chip->unmask(irq);
++ desc->status &= ~IRQ_MASKED;
++ }
++
++ desc->status &= ~IRQ_PENDING;
++
++ ezx_pcap_read(SSP_PCAP_ADJ_ISR_REGISTER, &reg);
++ ezx_pcap_read(SSP_PCAP_ADJ_MSR_REGISTER, &mask);
++ DEBUGP("pcap_irq_demux_handler: ISR=0x%08x MSR=0x%08x\n", reg, mask);
++
++ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) {
++ unsigned int pirq = pcap2irq[i];
++ if (pirq == 0)
++ continue;
++
++ if ((reg & (1 << i)) && !(mask & (1 << i))) {
++ struct irq_desc *subdesc;
++ DEBUGP("found irq %u\n", pirq);
++ subdesc = irq_desc + pirq;
++
++ kstat_cpu(cpu).irqs[pirq]++;
++ subdesc->chip->ack(pirq);
++
++ spin_unlock(&desc->lock);
++ handle_IRQ_event(pirq, subdesc->action);
++ spin_lock(&desc->lock);
++ }
++ }
++
++ } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
++
++ desc->status &= ~IRQ_INPROGRESS;
++
++out_unlock:
++ spin_unlock(&desc->lock);
++}
++
++static int ezx_pcap_remove(struct platform_device *pdev)
++{
++ int irq;
++ DEBUGP("exz_pcap_remove entered\n");
++
++ set_irq_chained_handler(IRQ_GPIO1, NULL);
++
++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(6); irq++) {
++ set_irq_chip(irq, NULL);
++ set_irq_handler(irq, NULL);
++ set_irq_flags(irq, 0);
++ }
++
++ return 0;
++}
++
++static int __init ezx_pcap_probe(struct platform_device *pdev)
++{
++ unsigned int irq;
++ DEBUGP("ezx_pcap_probe entered\n");
++
++ pcap_init();
++
++ set_irq_type(IRQ_GPIO1, IRQT_RISING);
++ /* set up interrupt demultiplexing code for PCAP2 irqs */
++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(6); irq++) {
++ set_irq_chip(irq, &pcap_chip);
++ set_irq_handler(irq, handle_edge_irq);
++ set_irq_flags(irq, IRQF_VALID);
++ }
++ set_irq_chained_handler(IRQ_GPIO1, pcap_irq_demux_handler);
++
++ printk("ezx-pcap: ssp driver registered\n");
++
++ return 0;
++}
++
++static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state)
++{
++ DEBUGP("pcap suspend!\n");
++ return 0;
++}
++
++static int ezx_pcap_resume(struct platform_device *dev)
++{
++ DEBUGP("pcap resume!\n");
++ /* ack all irqs */
++ ezx_pcap_write(SSP_PCAP_ADJ_ISR_REGISTER, PCAP_CLEAR_INTERRUPT_REGISTER);
++ return 0;
++}
++
++static struct platform_driver ezxpcap_driver = {
++ .probe = ezx_pcap_probe,
++ .remove = ezx_pcap_remove,
++ .suspend = ezx_pcap_suspend,
++ .resume = ezx_pcap_resume,
++ .driver = {
++ .name = "ezx-pcap",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ezx_pcap_init(void)
++{
++ DEBUGP("ezx_pcap_init entered\n");
++
++#ifdef CONFIG_PROC_FS
++ if((proc_pcap = create_proc_entry("pcap", 0, NULL)))
++ proc_pcap->read_proc = pcap_read_proc;
++#endif
++
++ return platform_driver_register(&ezxpcap_driver);
++}
++
++static void __exit ezx_pcap_exit(void)
++{
++#ifdef CONFIG_PROC_FS
++ if (proc_pcap)
++ remove_proc_entry("pcap", NULL);
++#endif
++
++ return platform_driver_unregister(&ezxpcap_driver);
++}
++
++module_init(ezx_pcap_init);
++module_exit(ezx_pcap_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte");
++MODULE_DESCRIPTION("SPI Driver for Motorola PCAP2");
++
+Index: linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/include/asm-arm/arch-pxa/ezx-pcap.h 2007-06-03 11:14:40.000000000 -0300
+@@ -0,0 +1,665 @@
++/* (c) Copyright Motorola Beijing 2002 all rights reserved.
++
++ Project Name : EZX
++ Project No. :
++ Title :
++ File Name :
++ Description :
++
++ ************** REVISION HISTORY **********************************************
++ Date Author Reference
++ ======== ========== ==========================
++ 2002-07-01 weiqiang lin create
++*/
++#ifndef SSP_PCAP_H
++#define SSP_PCAP_H
++
++#define SSP_vibrate_start_command() SSP_PCAP_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN); \
++ SSP_PCAP_bit_set(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN)
++
++#define SSP_vibrate_stop_command() SSP_PCAP_bit_clean(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN); \
++ SSP_PCAP_bit_clean(SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN)
++
++#define SSP_PCAP_REGISTER_VALUE_LENGTH 16
++
++#define SSP_PCAP_REGISTER_WRITE_OP_BIT 0x80000000
++#define SSP_PCAP_REGISTER_READ_OP_BIT 0x00000000
++
++#define SSP_PCAP_REGISTER_VALUE_UP_WORD_MASK 0xffff0000
++#define SSP_PCAP_REGISTER_VALUE_DOWN_WORD_MASK 0x0000ffff
++
++#define SSP_PCAP_REGISTER_VALUE_MASK 0x01ffffff
++#define SSP_PCAP_REGISTER_VALUE_MASK 0x01ffffff
++#define SSP_PCAP_REGISTER_ADDRESS_MASK 0x7c000000
++#define SSP_PCAP_REGISTER_ADDRESS_SHIFT 26
++#define SSP_PCAP_REGISTER_NUMBER 32
++
++#define SSP_PCAP_ADC_START_VALUE_SET_MASK 0xfffffc00
++#define SSP_PCAP_ADC_START_VALUE 0x000001dd
++
++
++#define SSP_PCAP_PHONE_CDC_CLOCK_MASK 0x000001c0
++#define SSP_PCAP_STEREO_SAMPLE_RATE_MASK 0x00000f00
++#define SSP_PCAP_STEREO_BCLK_TIME_SLOT_MASK 0x00018000
++#define SSP_PCAP_STEREO_CLOCK_MASK 0x0000001c
++#define SSP_PCAP_DIGITAL_AUDIO_MODE_MASK 0x00006000
++#define SSP_PCAP_TOUCH_PANEL_POSITION_DETECT_MODE_MASK 0x000e0000
++#define SSP_PCAP_MONO_PGA_MASK 0x00180000
++
++#define SSP_PCAP_VIBRATOR_VOLTAGE_LEVEL_MASK 0x00300000
++
++#define SSP_PCAP_AUDIO_IN_GAIN_MASK 0x0000001f
++#define SSP_PCAP_AUDIO_IN_GAIN_SHIFT 0
++#define SSP_PCAP_AUDIO_OUT_GAIN_MASK 0x0001e000
++#define SSP_PCAP_AUDIO_OUT_GAIN_SHIFT 13
++
++
++#define SSP_PCAP_ADD1_VALUE_MASK 0x000003ff
++#define SSP_PCAP_ADD1_VALUE_SHIFT 0
++#define SSP_PCAP_ADD2_VALUE_MASK 0x000ffc00
++#define SSP_PCAP_ADD2_VALUE_SHIFT 10
++
++
++#define PCAP_AUDIO_IN_GAIN_MAX_VALUE 31
++#define PCAP_AUDIO_OUT_GAIN_MAX_VALUE 15
++
++#define PCAP_CLEAR_INTERRUPT_REGISTER 0x00141fdf
++#define PCAP_MASK_ALL_INTERRUPT 0x0013ffff
++
++#define SSP_PCAP_TS_KEEPER_TIMER 100 /* 1 second */
++#define START_ADC_DELAY_TIMER 1991 /* 540 us */
++
++#define SSP_SEND_PM_ALART_INTERVAL 1000 *HZ/1000 /* 1 second */
++#define SSP_SEND_MSG_USB_ACCESSORY_INFO_DEBOUNCE 200 *HZ/1000 /* 200ms */
++
++struct ssp_interrupt_info
++{
++ u32 type;
++ u32 status;
++ void* privdata;
++};
++
++#ifndef U8
++#define U8 unsigned char
++#endif
++
++#ifndef U32
++#define U32 unsigned long
++#endif
++
++#ifndef U16
++#define U16 unsigned short
++#endif
++
++#ifndef P_U16
++#define P_U16 U16*
++#endif
++
++#ifndef P_U32
++#define P_U32 U32*
++#endif
++
++#define SSP_SELECT_BUFFER (volatile unsigned long *)(0xf4000000)
++
++#define SSP_SR_RNE 0x00000008
++#define SSP_PCAP_BASE 0x00001000
++/************************ STRUCTURES, ENUMS, AND TYPEDEFS **************************/
++typedef enum accessoryStatus
++{
++ ACCESSORY_DEVICE_STATUS_DETACHED = 0,
++ ACCESSORY_DEVICE_STATUS_ATTACHED ,
++ ACCESSORY_DEVICE_STATUS_UNKNOW =0x000000ff
++}ACCESSORY_DEVICE_STATUS;
++
++typedef enum accessoryType
++{
++ ACCESSORY_DEVICE_NONE = 0,
++ ACCESSORY_DEVICE_SERIAL_PORT ,
++ ACCESSORY_DEVICE_USB_PORT ,
++ ACCESSORY_DEVICE_UNKNOW =0x000000ff
++}ACCESSORY_TYPE;
++
++typedef enum pcapReturnStatus
++{
++ SSP_PCAP_SUCCESS = 0,
++ SSP_PCAP_ERROR_REGISTER = SSP_PCAP_BASE+1,
++ SSP_PCAP_ERROR_VALUE = SSP_PCAP_BASE+2,
++
++ SSP_PCAP_NOT_RUN = SSP_PCAP_BASE+0xff
++}SSP_PCAP_STATUS;
++
++typedef enum pcapPortType
++{
++ SSP_PCAP_SERIAL_PORT = 0x00000000,
++ SSP_PCAP_LOW_USB_PORT = 0x00000001,
++ SSP_PCAP_HIGH_USB_PORT = 0x00000002,
++ SSP_PCAP_UNKNOW_PORT = 0x000000ff
++}SSP_PCAP_PORT_TYPE;
++
++typedef enum pcapInitDriverType
++{
++ SSP_PCAP_TS_OPEN = 0x00000000,
++ SSP_PCAP_AUDIO_OPEN = 0x00000001,
++ SSP_PCAP_UNKNOW_DRIVER_OPEN = 0x000000ff
++}SSP_PCAP_INIT_DRIVER_TYPE;
++
++
++typedef enum pcapReturnBitStatus
++{
++ SSP_PCAP_BIT_ZERO = 0x00000000,
++ SSP_PCAP_BIT_ONE = 0x00000001,
++ SSP_PCAP_BIT_ERROR = 0xff000000
++}SSP_PCAP_BIT_STATUS;
++
++typedef enum pcapCDCClkType
++{
++ PCAP_CDC_CLK_IN_13M0 = 0x00000000,
++ PCAP_CDC_CLK_IN_15M36 = 0x00000040,
++ PCAP_CDC_CLK_IN_16M8 = 0x00000080,
++ PCAP_CDC_CLK_IN_19M44 = 0x000000c0,
++ PCAP_CDC_CLK_IN_26M0 = 0x00000100
++}PHONE_CDC_CLOCK_TYPE;
++
++typedef enum pcapST_SR
++{
++ PCAP_ST_SAMPLE_RATE_8K = 0x00000000,
++ PCAP_ST_SAMPLE_RATE_11K = 0x00000100,
++ PCAP_ST_SAMPLE_RATE_12K = 0x00000200,
++ PCAP_ST_SAMPLE_RATE_16K = 0x00000300,
++ PCAP_ST_SAMPLE_RATE_22K = 0x00000400,
++ PCAP_ST_SAMPLE_RATE_24K = 0x00000500,
++ PCAP_ST_SAMPLE_RATE_32K = 0x00000600,
++ PCAP_ST_SAMPLE_RATE_44K = 0x00000700,
++ PCAP_ST_SAMPLE_RATE_48K = 0x00000800
++}ST_SAMPLE_RATE_TYPE;
++
++typedef enum pcapST_BCLK
++{
++ PCAP_ST_BCLK_SLOT_16 = 0x00000000,
++ PCAP_ST_BCLK_SLOT_8 = 0x00008000,
++ PCAP_ST_BCLK_SLOT_4 = 0x00010000,
++ PCAP_ST_BCLK_SLOT_2 = 0x00018000,
++}ST_BCLK_TIME_SLOT_TYPE;
++
++typedef enum pcapST_CLK
++{
++ PCAP_ST_CLK_PLL_CLK_IN_13M0 = 0x00000000,
++ PCAP_ST_CLK_PLL_CLK_IN_15M36 = 0x00000004,
++ PCAP_ST_CLK_PLL_CLK_IN_16M8 = 0x00000008,
++ PCAP_ST_CLK_PLL_CLK_IN_19M44 = 0x0000000c,
++ PCAP_ST_CLK_PLL_CLK_IN_26M0 = 0x00000010,
++ PCAP_ST_CLK_PLL_CLK_IN_EXT_MCLK = 0x00000014,
++ PCAP_ST_CLK_PLL_CLK_IN_FSYNC = 0x00000018,
++ PCAP_ST_CLK_PLL_CLK_IN_BITCLK = 0x0000001c
++}ST_CLK_TYPE;
++
++typedef enum pcapDigitalAudioInterfaceMode
++{
++ PCAP_DIGITAL_AUDIO_INTERFACE_NORMAL = 0x00000000,
++ PCAP_DIGITAL_AUDIO_INTERFACE_NETWORK = 0x00002000,
++ PCAP_DIGITAL_AUDIO_INTERFACE_I2S = 0x00004000
++}DIG_AUD_MODE_TYPE;
++
++typedef enum pcapMono
++{
++ PCAP_MONO_PGA_R_L_STEREO = 0x00000000,
++ PCAP_MONO_PGA_RL = 0x00080000,
++ PCAP_MONO_PGA_RL_3DB = 0x00100000,
++ PCAP_MONO_PGA_RL_6DB = 0x00180000
++}MONO_TYPE;
++
++typedef enum pcapVibratorVoltageLevel
++{
++ PCAP_VIBRATOR_VOLTAGE_LEVEL0 = 0x00000000,
++ PCAP_VIBRATOR_VOLTAGE_LEVEL1 = 0x00100000,
++ PCAP_VIBRATOR_VOLTAGE_LEVEL2 = 0x00200000,
++ PCAP_VIBRATOR_VOLTAGE_LEVEL3 = 0x00300000
++}VibratorVoltageLevel_TYPE;
++
++typedef enum pcapTouchScreenMode
++{
++ PCAP_TS_POSITION_X_MEASUREMENT = 0x00000000,
++ PCAP_TS_POSITION_XY_MEASUREMENT = 0x00020000,
++ PCAP_TS_PRESSURE_MEASUREMENT = 0x00040000,
++ PCAP_TS_PLATE_X_MEASUREMENT = 0x00060000,
++ PCAP_TS_PLATE_Y_MEASUREMENT = 0x00080000,
++ PCAP_TS_STANDBY_MODE = 0x000a0000,
++ PCAP_TS_NONTS_MODE = 0x000c0000
++}TOUCH_SCREEN_DETECT_TYPE;
++
++typedef enum pcapADJRegister
++{
++ SSP_PCAP_ADJ_ISR_REGISTER = 0x00,
++ SSP_PCAP_ADJ_MSR_REGISTER = 0x01,
++ SSP_PCAP_ADJ_PSTAT_REGISTER = 0x02,
++ SSP_PCAP_ADJ_VREG2_REGISTER = 0x06,
++ SSP_PCAP_ADJ_AUX_VREG_REGISTER = 0x07,
++ SSP_PCAP_ADJ_BATT_DAC_REGISTER = 0x08,
++ SSP_PCAP_ADJ_ADC1_REGISTER = 0x09,
++ SSP_PCAP_ADJ_ADC2_REGISTER = 0x0a,
++ SSP_PCAP_ADJ_AUD_CODEC_REGISTER = 0x0b,
++ SSP_PCAP_ADJ_AUD_RX_AMPS_REGISTER = 0x0c,
++ SSP_PCAP_ADJ_ST_DAC_REGISTER = 0x0d,
++ SSP_PCAP_ADJ_BUSCTRL_REGISTER = 0x14,
++ SSP_PCAP_ADJ_PERIPH_REGISTER = 0x15,
++ SSP_PCAP_ADJ_LOWPWR_CTRL_REGISTER = 0x18,
++ SSP_PCAP_ADJ_TX_AUD_AMPS_REGISTER = 0x1a,
++ SSP_PCAP_ADJ_GP_REG_REGISTER = 0x1b
++}SSP_PCAP_SECONDARY_PROCESSOR_REGISTER;
++
++typedef enum pcapADJBit_SetType
++{
++ SSP_PCAP_ADJ_BIT_ISR_ADCDONEI = 0x00000001,
++ SSP_PCAP_ADJ_BIT_ISR_TSI = 0x00000002,
++ SSP_PCAP_ADJ_BIT_ISR_1HZI = 0x00000004,
++ SSP_PCAP_ADJ_BIT_ISR_WHI = 0x00000008,
++ SSP_PCAP_ADJ_BIT_ISR_WLI = 0x00000010,
++ SSP_PCAP_ADJ_BIT_ISR_TODAI = 0x00000020,
++ SSP_PCAP_ADJ_BIT_ISR_USB4VI = 0x00000040,
++ SSP_PCAP_ADJ_BIT_ISR_ONOFFI = 0x00000080,
++ SSP_PCAP_ADJ_BIT_ISR_ONOFF2I = 0x00000100,
++ SSP_PCAP_ADJ_BIT_ISR_USB1VI = 0x00000200,
++ SSP_PCAP_ADJ_BIT_ISR_MOBPORTI = 0x00000400,
++ SSP_PCAP_ADJ_BIT_ISR_MB2I = 0x00000800,
++ SSP_PCAP_ADJ_BIT_ISR_A1I = 0x00001000,
++ SSP_PCAP_ADJ_BIT_ISR_STI = 0x00002000,
++ SSP_PCAP_ADJ_BIT_ISR_PCI = 0x00004000,
++ SSP_PCAP_ADJ_BIT_ISR_WARMI = 0x00008000,
++ SSP_PCAP_ADJ_BIT_ISR_EOLI = 0x00010000,
++ SSP_PCAP_ADJ_BIT_ISR_CLKI = 0x00020000,
++ SSP_PCAP_ADJ_BIT_ISR_SYS_RSTI = 0x00040000,
++ SSP_PCAP_ADJ_BIT_ISR_ADCDONE2I = 0x00100000,
++ SSP_PCAP_ADJ_BIT_ISR_SOFT_RESETI = 0x00200000,
++ SSP_PCAP_ADJ_BIT_ISR_MNEXBI = 0x00400000,
++
++ SSP_PCAP_ADJ_BIT_MSR_ADCDONEM = 0x04000001,
++ SSP_PCAP_ADJ_BIT_MSR_TSM = 0x04000002,
++ SSP_PCAP_ADJ_BIT_MSR_1HZM = 0x04000004,
++ SSP_PCAP_ADJ_BIT_MSR_WHM = 0x04000008,
++ SSP_PCAP_ADJ_BIT_MSR_WLM = 0x04000010,
++ SSP_PCAP_ADJ_BIT_MSR_TODAM = 0x04000020,
++ SSP_PCAP_ADJ_BIT_MSR_USB4VM = 0x04000040,
++ SSP_PCAP_ADJ_BIT_MSR_ONOFFM = 0x04000080,
++ SSP_PCAP_ADJ_BIT_MSR_ONOFF2M = 0x04000100,
++ SSP_PCAP_ADJ_BIT_MSR_USB1VM = 0x04000200,
++ SSP_PCAP_ADJ_BIT_MSR_MOBPORTM = 0x04000400,
++ SSP_PCAP_ADJ_BIT_MSR_MB2M = 0x04000800,
++ SSP_PCAP_ADJ_BIT_MSR_A1M = 0x04001000,
++ SSP_PCAP_ADJ_BIT_MSR_STM = 0x04002000,
++ SSP_PCAP_ADJ_BIT_MSR_PCM = 0x04004000,
++ SSP_PCAP_ADJ_BIT_MSR_WARMM = 0x04008000,
++ SSP_PCAP_ADJ_BIT_MSR_EOLM = 0x04010000,
++ SSP_PCAP_ADJ_BIT_MSR_CLKM = 0x04020000,
++ SSP_PCAP_ADJ_BIT_MSR_SYS_RSTM = 0x04040000,
++ SSP_PCAP_ADJ_BIT_MSR_ADCDONE2M = 0x04100000,
++ SSP_PCAP_ADJ_BIT_MSR_SOFT_RESETM = 0x04200000,
++ SSP_PCAP_ADJ_BIT_MSR_MNEXBM = 0x04400000,
++
++ SSP_PCAP_ADJ_BIT_PSTAT_USBDET_4V = 0x08000040,
++ SSP_PCAP_ADJ_BIT_PSTAT_ONOFFSNS = 0x08000080,
++ SSP_PCAP_ADJ_BIT_PSTAT_ONOFFSNS2 = 0x08000100,
++ SSP_PCAP_ADJ_BIT_PSTAT_USBDET_1V = 0x08000200,
++ SSP_PCAP_ADJ_BIT_PSTAT_MOBSENSB = 0x08000400,
++ SSP_PCAP_ADJ_BIT_PSTAT_MB2SNS = 0x08000800,
++ SSP_PCAP_ADJ_BIT_PSTAT_A1SNS = 0x08001000,
++ SSP_PCAP_ADJ_BIT_PSTAT_MSTB = 0x08002000,
++ SSP_PCAP_ADJ_BIT_PSTAT_EOL_STAT = 0x08010000,
++ SSP_PCAP_ADJ_BIT_PSTAT_CLK_STAT = 0x08020000,
++ SSP_PCAP_ADJ_BIT_PSTAT_SYS_RST = 0x08040000,
++ SSP_PCAP_ADJ_BIT_PSTAT_BATTFBSNS = 0x08080000,
++ SSP_PCAP_ADJ_BIT_PSTAT_BATT_DET_IN_SNS = 0x08200000,
++ SSP_PCAP_ADJ_BIT_PSTAT_MNEXBSNS = 0x08400000,
++ SSP_PCAP_ADJ_BIT_PSTAT_WARM_SYS_RST = 0x08800000,
++
++ SSP_PCAP_ADJ_BIT_VREG2_V1_STBY = 0x18000001,
++ SSP_PCAP_ADJ_BIT_VREG2_V2_STBY = 0x18000002,
++ SSP_PCAP_ADJ_BIT_VREG2_V3_STBY = 0x18000004,
++ SSP_PCAP_ADJ_BIT_VREG2_V4_STBY = 0x18000008,
++ SSP_PCAP_ADJ_BIT_VREG2_V5_STBY = 0x18000010,
++ SSP_PCAP_ADJ_BIT_VREG2_V6_STBY = 0x18000020,
++ SSP_PCAP_ADJ_BIT_VREG2_V7_STBY = 0x18000040,
++ SSP_PCAP_ADJ_BIT_VREG2_V8_STBY = 0x18000080,
++ SSP_PCAP_ADJ_BIT_VREG2_V9_STBY = 0x18000100,
++ SSP_PCAP_ADJ_BIT_VREG2_V10_STBY = 0x18000200,
++ SSP_PCAP_ADJ_BIT_VREG2_V1_LOWPWR = 0x18000400,
++ SSP_PCAP_ADJ_BIT_VREG2_V2_LOWPWR = 0x18000800,
++ SSP_PCAP_ADJ_BIT_VREG2_V3_LOWPWR = 0x18001000,
++ SSP_PCAP_ADJ_BIT_VREG2_V4_LOWPWR = 0x18002000,
++ SSP_PCAP_ADJ_BIT_VREG2_V5_LOWPWR = 0x18004000,
++ SSP_PCAP_ADJ_BIT_VREG2_V6_LOWPWR = 0x18008000,
++ SSP_PCAP_ADJ_BIT_VREG2_V7_LOWPWR = 0x18010000,
++ SSP_PCAP_ADJ_BIT_VREG2_V8_LOWPWR = 0x18020000,
++ SSP_PCAP_ADJ_BIT_VREG2_V9_LOWPWR = 0x18040000,
++ SSP_PCAP_ADJ_BIT_VREG2_V10_LOWPWR = 0x18080000,
++
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX1_EN = 0x1c000002,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX1_0 = 0x1c000004,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX1_1 = 0x1c000008,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_EN = 0x1c000010,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_0 = 0x1c000020,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX2_1 = 0x1c000040,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_EN = 0x1c000080,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_0 = 0x1c000100,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_1 = 0x1c000200,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_2 = 0x1c000400,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX3_3 = 0x1c000800,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX4_EN = 0x1c001000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX4_0 = 0x1c002000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX4_1 = 0x1c004000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VSIM2_EN = 0x1c010000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VSIM_EN = 0x1c020000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VSIM_0 = 0x1c040000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_EN = 0x1c080000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_0 = 0x1c100000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_V_VIB_1 = 0x1c200000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX1_STBY = 0x1c400000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_VAUX1_LOWPWR = 0x1c800000,
++ SSP_PCAP_ADJ_BIT_AUX_VREG_SW3_STBY = 0x1d000000,
++
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC0 = 0x20000001,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC1 = 0x20000002,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC2 = 0x20000004,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC3 = 0x20000008,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC4 = 0x20000010,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC5 = 0x20000020,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC6 = 0x20000040,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_DAC7 = 0x20000080,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_B_FDBK = 0x20000100,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_EXT_ISENSE = 0x20000200,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_V_COIN0 = 0x20000400,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_V_COIN1 = 0x20000800,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_V_COIN2 = 0x20001000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_V_COIN3 = 0x20002000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_I_COIN = 0x20004000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_COIN_CH_EN = 0x20008000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_EOL_SEL0 = 0x20020000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_EOL_SEL1 = 0x20040000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_EOL_SEL2 = 0x20080000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_EOL_CMP_EN = 0x20100000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_BATT_DET_EN = 0x20200000,
++ SSP_PCAP_ADJ_BIT_BATT_DAC_THERMBIAS_CTRL = 0x20400000,
++
++ SSP_PCAP_ADJ_BIT_ADC1_ADEN = 0x24000001,
++ SSP_PCAP_ADJ_BIT_ADC1_RAND = 0x24000002,
++ SSP_PCAP_ADJ_BIT_ADC1_AD_SEL1 = 0x24000004,
++ SSP_PCAP_ADJ_BIT_ADC1_AD_SEL2 = 0x24000008,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA10 = 0x24000010,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA11 = 0x24000020,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA12 = 0x24000040,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA20 = 0x24000080,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA21 = 0x24000100,
++ SSP_PCAP_ADJ_BIT_ADC1_ADA22 = 0x24000200,
++ SSP_PCAP_ADJ_BIT_ADC1_ATO0 = 0x24000400,
++ SSP_PCAP_ADJ_BIT_ADC1_ATO1 = 0x24000800,
++ SSP_PCAP_ADJ_BIT_ADC1_ATO2 = 0x24001000,
++ SSP_PCAP_ADJ_BIT_ADC1_ATO3 = 0x24002000,
++ SSP_PCAP_ADJ_BIT_ADC1_ATOX = 0x24004000,
++ SSP_PCAP_ADJ_BIT_ADC1_MTR1 = 0x24008000,
++ SSP_PCAP_ADJ_BIT_ADC1_MTR2 = 0x24010000,
++ SSP_PCAP_ADJ_BIT_ADC1_TS_M0 = 0x24020000,
++ SSP_PCAP_ADJ_BIT_ADC1_TS_M1 = 0x24040000,
++ SSP_PCAP_ADJ_BIT_ADC1_TS_M2 = 0x24080000,
++ SSP_PCAP_ADJ_BIT_ADC1_TS_REF_LOWPWR = 0x24100000,
++ SSP_PCAP_ADJ_BIT_ADC1_TS_REFENB = 0x24200000,
++ SSP_PCAP_ADJ_BIT_ADC1_BATT_I_POLARITY = 0x24400000,
++ SSP_PCAP_ADJ_BIT_ADC1_BATT_I_ADC = 0x24800000,
++
++ SSP_PCAP_ADJ_BIT_ADC2_ADD10 = 0x28000001,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD11 = 0x28000002,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD12 = 0x28000004,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD13 = 0x28000008,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD14 = 0x28000010,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD15 = 0x28000020,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD16 = 0x28000040,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD17 = 0x28000080,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD18 = 0x28000100,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD19 = 0x28000200,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD20 = 0x28000400,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD21 = 0x28000800,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD22 = 0x28001000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD23 = 0x28002000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD24 = 0x28004000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD25 = 0x28008000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD26 = 0x28010000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD27 = 0x28020000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD28 = 0x28040000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADD29 = 0x28080000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADINC1 = 0x28100000,
++ SSP_PCAP_ADJ_BIT_ADC2_ADINC2 = 0x28200000,
++ SSP_PCAP_ADJ_BIT_ADC2_ASC = 0x28400000,
++
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_AUDIHPF = 0x2c000001,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_SMB = 0x2c000002,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_AUDOHPF = 0x2c000004,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CD_TS = 0x2c000008,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_DLM = 0x2c000010,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_ADITH = 0x2c000020,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_CLK0 = 0x2c000040,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_CLK1 = 0x2c000080,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_CLK2 = 0x2c000100,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CLK_INV = 0x2c000200,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_FS_INV = 0x2c000400,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_DF_RESET = 0x2c000800,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_EN = 0x2c001000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_CLK_EN = 0x2c002000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_FS_8K_16K = 0x2c004000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_DIG_AUD_IN = 0x2c008000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CLK_IN_SEL = 0x2c010000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2_MUX = 0x2c020000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG0 = 0x2c040000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG1 = 0x2c080000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG2 = 0x2c100000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG3 = 0x2c200000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG4 = 0x2c400000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_MIC2IG_PRI_ADJ = 0x2c800000,
++ SSP_PCAP_ADJ_BIT_AUD_CODEC_CDC_PRI_ADJ = 0x2c200000,
++
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1_EN = 0x30000001,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A2_EN = 0x30000002,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A4_EN = 0x30000010,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_ARIGHT_EN = 0x30000020,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_ALEFT_EN = 0x30000040,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_CD_BYP = 0x30000080,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_CDC_SW = 0x30000100,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_ST_DAC_SW = 0x30000200,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_IN_SW = 0x30000400,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_R_EN = 0x30000800,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_PGA_L_EN = 0x30001000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_AUDOG0 = 0x30002000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_AUDOG1 = 0x30004000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_AUDOG2 = 0x30008000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_AUDOG3 = 0x30010000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_A1CTRL = 0x30020000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_MONO0 = 0x30080000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_MONO1 = 0x30100000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_AUDOG_PRI_ADJ = 0x30200000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_MONO_PRI_ADJ = 0x30400000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_RX_PRI_ADJ0 = 0x30800000,
++ SSP_PCAP_ADJ_BIT_AUD_RX_AMPS_RX_PRI_ADJ1 = 0x31000000,
++
++ SSP_PCAP_ADJ_BIT_ST_DAC_SMB_ST_DAC = 0x34000001,
++ SSP_PCAP_ADJ_BIT_ST_DAC_STDET_EN = 0x34000002,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK0 = 0x34000004,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK1 = 0x34000008,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK2 = 0x34000010,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK_EN = 0x34000020,
++ SSP_PCAP_ADJ_BIT_ST_DAC_DF_RESET_ST_DAC = 0x34000040,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_DAC_EN = 0x34000080,
++ SSP_PCAP_ADJ_BIT_ST_DAC_SR0 = 0x34000100,
++ SSP_PCAP_ADJ_BIT_ST_DAC_SR1 = 0x34000200,
++ SSP_PCAP_ADJ_BIT_ST_DAC_SR2 = 0x34000400,
++ SSP_PCAP_ADJ_BIT_ST_DAC_SR3 = 0x34000800,
++ SSP_PCAP_ADJ_BIT_ST_DAC_DIG_AUD_IN_ST_DAC = 0x34001000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_DIG_AUD_FS0 = 0x34002000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_DIG_AUD_FS1 = 0x34004000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_BCLK0 = 0x34008000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_BCLK1 = 0x34010000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_CLK_INV = 0x34020000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_FS_INV = 0x34040000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_DAC_CLK_IN_SEL = 0x34080000,
++ SSP_PCAP_ADJ_BIT_ST_DAC_ST_DAC_PRI_ADJ = 0x35000000,
++
++ SSP_PCAP_ADJ_BIT_BUSCTRL_FSENB = 0x50000001,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_USB_SUSPEND = 0x50000002,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PU = 0x50000004,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PD = 0x50000008,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_VUSB_EN = 0x50000010,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PS = 0x50000020,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_VUSB_MSTR_EN = 0x50000040,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_VBUS_PD_ENB = 0x50000080,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_CURRLIM = 0x50000100,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_RS232ENB = 0x50000200,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_RS232_DIR = 0x50000400,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_SE0_CONN = 0x50000800,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_USB_PDM = 0x50001000,
++ SSP_PCAP_ADJ_BIT_BUSCTRL_BUS_PRI_ADJ = 0x51000000,
++
++ SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL0 = 0x54000001,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL1 = 0x54000002,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL2 = 0x54000004,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL3 = 0x54000008,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL_CTRL4 = 0x54000010,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_EN = 0x54000020,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_EN = 0x54000040,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_CTRL0 = 0x54000080,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_CTRL1 = 0x54000100,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_CTRL2 = 0x54000200,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_CTRL3 = 0x54000400,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_CTRL0 = 0x54000800,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_CTRL1 = 0x54001000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_CTRL2 = 0x54002000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_CTRL3 = 0x54004000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_I0 = 0x54008000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDR_I1 = 0x54010000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_I0 = 0x54020000,
++ SSP_PCAP_ADJ_BIT_PERIPH_LEDG_I1 = 0x54040000,
++ SSP_PCAP_ADJ_BIT_PERIPH_SKIP = 0x54080000,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL0 = 0x54100000,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL1 = 0x54200000,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL2 = 0x54400000,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL3 = 0x54800000,
++ SSP_PCAP_ADJ_BIT_PERIPH_BL2_CTRL4 = 0x55000000,
++
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_STBY = 0x60000001,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX2_LOWPWR = 0x60000002,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX3_STBY = 0x60000004,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX3_LOWPWR = 0x60000008,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX4_STBY = 0x60000010,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VAUX4_LOWPWR = 0x60000020,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VSIM_LOWPWR = 0x60000040,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VSIM2_LOWPWR = 0x60000080,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE00 = 0x60000100,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE01 = 0x60000200,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE10 = 0x60000400,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW1_MODE11 = 0x60000800,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW10_DVS = 0x60001000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW11_DVS = 0x60002000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW12_DVS = 0x60004000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW13_DVS = 0x60008000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW2_MODE00 = 0x60010000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW2_MODE01 = 0x60020000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW2_MODE10 = 0x60040000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW2_MODE11 = 0x60080000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW20_DVS = 0x60100000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW21_DVS = 0x60200000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW22_DVS = 0x60400000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_SW23_DVS = 0x60800000,
++ SSP_PCAP_ADJ_BIT_LOWPWR_CTRL_VC_STBY = 0x61000000,
++
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG0 = 0x68000001,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG1 = 0x68000002,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG2 = 0x68000004,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG3 = 0x68000008,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG4 = 0x68000010,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A3_EN = 0x68000020,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A3_MUX = 0x68000040,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A5_EN = 0x68000080,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A5_MUX = 0x68000100,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_EXT_MIC_MUX = 0x68000200,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_MB_ON2 = 0x68000400,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_MB_ON1 = 0x68000800,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A1ID_TX = 0x68001000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A1_CONFIG = 0x68002000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AHS_CONFIG = 0x68004000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_A2_CONFIG = 0x68008000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIO_LOWPWR = 0x68080000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIO_STBY = 0x68100000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_V2_EN_2 = 0x68200000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_AUDIG_PRI_ADJ = 0x68400000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_TX_PRI_ADJ0 = 0x68800000,
++ SSP_PCAP_ADJ_BIT_TX_AUD_AMPS_TX_PRI_ADJ1 = 0x69000000,
++
++ SSP_PCAP_ADJ_BIT_SYS_RST_CLR = 0x6c000001,
++ SSP_PCAP_ADJ_BIT_SYS_RST_MODE0 = 0x6c000002,
++ SSP_PCAP_ADJ_BIT_SYS_RST_MODE1 = 0x6c000004,
++ SSP_PCAP_ADJ_BIT_SYS_VFLASH_0 = 0x6c000008,
++ SSP_PCAP_ADJ_BIT_SYS_VFLASH_1 = 0x6c000010,
++ SSP_PCAP_ADJ_BIT_SYS_MID_SELECT = 0x6c000020,
++ SSP_PCAP_ADJ_BIT_SYS_MID_FET = 0x6c000040,
++ SSP_PCAP_ADJ_BIT_SYS_MAIN_LOW = 0x6c000080,
++ SSP_PCAP_ADJ_BIT_SYS_BATTFB_DIS = 0x6c000100,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG9 = 0x6c000200,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG10 = 0x6c000400,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG11 = 0x6c000800,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG12 = 0x6c001000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG13 = 0x6c002000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG14 = 0x6c004000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG15 = 0x6c008000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG16 = 0x6c010000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG17 = 0x6c020000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG18 = 0x6c040000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG19 = 0x6c080000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG20 = 0x6c100000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG21 = 0x6c200000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG22 = 0x6c400000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG23 = 0x6c800000,
++ SSP_PCAP_ADJ_BIT_SYS_GP_REG24 = 0x6d000000
++
++}SSP_PCAP_SECONDARY_PROCESSOR_REGISTER_BIT_TYPE;
++
++/************************ FUNCTION PROTOTYPES **************************************/
++extern void ssp_pcap_init(void);
++extern void ssp_pcap_release(void);
++
++extern void ssp_pcap_open(SSP_PCAP_INIT_DRIVER_TYPE portType);
++extern void ssp_pcap_close(void);
++
++extern void ssp_pcap_intoSleep_callBack(void);
++extern void ssp_pcap_wakeUp_callBack(void);
++
++
++extern SSP_PCAP_STATUS SSP_PCAP_write_data_to_PCAP(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER ssp_pcap_register,U32 ssp_pcap_register_value);
++extern SSP_PCAP_STATUS SSP_PCAP_read_data_from_PCAP(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER ssp_pcap_register,P_U32 p_ssp_pcap_register_value);
++
++extern SSP_PCAP_STATUS SSP_PCAP_bit_set(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER_BIT_TYPE ssp_pcap_bit ) ;
++extern SSP_PCAP_STATUS SSP_PCAP_bit_clean(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER_BIT_TYPE ssp_pcap_bit ) ;
++extern SSP_PCAP_BIT_STATUS SSP_PCAP_get_bit_from_buffer(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER_BIT_TYPE ssp_pcap_bit ) ;
++extern SSP_PCAP_BIT_STATUS SSP_PCAP_get_bit_from_PCAP(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER_BIT_TYPE ssp_pcap_bit ) ;
++extern U32 SSP_PCAP_get_register_value_from_buffer(SSP_PCAP_SECONDARY_PROCESSOR_REGISTER ssp_pcap_register ) ;
++
++extern SSP_PCAP_STATUS SSP_PCAP_TSI_mode_set(TOUCH_SCREEN_DETECT_TYPE mode_Type );
++extern SSP_PCAP_STATUS SSP_PCAP_TSI_start_XY_read(void);
++extern SSP_PCAP_STATUS SSP_PCAP_TSI_get_XY_value(P_U16 p_x,P_U16 p_y);
++extern SSP_PCAP_STATUS SSP_PCAP_CDC_CLK_set(PHONE_CDC_CLOCK_TYPE clkType);
++
++extern SSP_PCAP_STATUS SSP_PCAP_CDC_SR_set(ST_SAMPLE_RATE_TYPE srType);
++extern SSP_PCAP_STATUS SSP_PCAP_BCLK_set(ST_BCLK_TIME_SLOT_TYPE bclkType);
++extern SSP_PCAP_STATUS SSP_PCAP_STCLK_set(ST_CLK_TYPE stClkType);
++extern SSP_PCAP_STATUS SSP_PCAP_DIG_AUD_FS_set(DIG_AUD_MODE_TYPE fsType);
++extern SSP_PCAP_STATUS SSP_PCAP_AUDIG_set(U32 audioInGain);
++extern SSP_PCAP_STATUS SSP_PCAP_MONO_set(MONO_TYPE monoType);
++extern SSP_PCAP_STATUS SSP_PCAP_AUDOG_set(U32 audioOutGain);
++
++extern SSP_PCAP_STATUS SSP_PCAP_V_VIB_level_set(VibratorVoltageLevel_TYPE VIBLevelType);
++extern SSP_PCAP_STATUS SSP_PCAP_configure_USB_UART_transeiver(SSP_PCAP_PORT_TYPE portType);
++extern SSP_PCAP_BIT_STATUS SSP_PCAP_get_audio_in_status(void);
++
++/* for log */
++extern void pcap_log_add_pure_data(u8* pData,u32 len);
++extern void pcap_log_add_data(u8* pData,u32 len);
++
++/* screen lock on/off handler */
++extern void ssp_pcap_screenlock_lock(u32 data);
++extern void ssp_pcap_screenlock_unlock(u32 data);
++
++#endif
+Index: linux-2.6.21/include/asm-arm/arch-pxa/irqs.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/irqs.h 2007-06-03 02:17:12.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/irqs.h 2007-06-03 11:14:40.000000000 -0300
+@@ -176,7 +176,8 @@
+ #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
+ #elif defined(CONFIG_ARCH_LUBBOCK) || \
+ defined(CONFIG_MACH_LOGICPD_PXA270) || \
+- defined(CONFIG_MACH_MAINSTONE)
++ defined(CONFIG_MACH_MAINSTONE) || \
++ defined(CONFIG_PXA_EZX)
+ #define NR_IRQS (IRQ_BOARD_END)
+ #else
+ #define NR_IRQS (IRQ_BOARD_START)
+@@ -222,3 +223,13 @@
+ #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1)
+ #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2)
+ #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3)
++
++/* EZX Interrupts (CONFIG_EZX) */
++#define EZX_IRQ(x) (IRQ_BOARD_START + (x))
++#define EZX_IRQ_USB4V EZX_IRQ(0) /* EMU */
++#define EZX_IRQ_USB1V EZX_IRQ(1) /* EMU */
++#define EZX_IRQ_HEADJACK EZX_IRQ(2) /* Audio connector */
++#define EZX_IRQ_MIC EZX_IRQ(3) /* Audio connector */
++#define EZX_IRQ_ADCDONE EZX_IRQ(4)
++#define EZX_IRQ_TS EZX_IRQ(5) /* TS touch */
++#define EZX_IRQ_ADCDONE2 EZX_IRQ(6) /* TS x/y ADC ready */
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-06-03 11:14:40.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-06-09 14:57:44.000000000 -0300
+@@ -131,11 +131,30 @@
+ .resource = ezxbp_resources,
+ };
+
++/* PCAP */
++static struct resource ezxpcap_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO1,
++ .end = IRQ_GPIO1,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device ezxpcap_device = {
++ .name = "ezx-pcap",
++ .id = -1,
++ .dev = {
++ .parent = &ezxssp_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(ezxpcap_resources),
++ .resource = ezxpcap_resources,
++};
+
+
+ static struct platform_device *devices[] __initdata = {
+ &ezxssp_device,
+ &ezxbp_device,
++ &ezxpcap_device,
+ };
+
+ /* PM */
+Index: linux-2.6.21/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Kconfig 2007-06-03 11:14:40.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Kconfig 2007-06-09 14:57:46.000000000 -0300
+@@ -105,6 +105,15 @@
+ config EZX_BP
+ bool "BP Control code for EZX Platform"
+
++config EZX_PCAP
++ bool "PCAP Support"
++
++config EZX_MCI_SD
++ bool
++
++config EZX_MCI_TF
++ bool
++
+ endif
+
+ endmenu
+Index: linux-2.6.21/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/Makefile 2007-06-03 11:14:40.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/Makefile 2007-06-09 14:57:44.000000000 -0300
+@@ -25,6 +25,7 @@
+ obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+ obj-$(CONFIG_EZX_BP) += ezx-bp.o
++obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch
new file mode 100755
index 0000000000..85b6f5c15d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-pm.patch
@@ -0,0 +1,140 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/pxa27x.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/pxa27x.c 2007-05-08 16:29:23.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/pxa27x.c 2007-05-08 16:29:36.000000000 -0300
+@@ -22,6 +22,10 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/ohci.h>
+
++#ifdef CONFIG_PXA_EZX
++#include <asm/arch/ezx.h>
++#endif
++
+ #include "generic.h"
+
+ /* Crystal clock: 13MHz */
+@@ -156,7 +160,13 @@
+ break;
+ case PM_SUSPEND_MEM:
+ /* set resume return address */
++#ifdef CONFIG_PXA_EZX
++ /* set EZX flags for blob - WM */
++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = virt_to_phys(pxa_cpu_resume);
++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = SLEEP_FLAG;
++#else
+ PSPR = virt_to_phys(pxa_cpu_resume);
++#endif
+ pxa_cpu_suspend(PWRMODE_SLEEP);
+ break;
+ }
+Index: linux-2.6.21/arch/arm/mach-pxa/pm.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/pm.c 2007-05-08 16:29:23.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/pm.c 2007-05-08 16:29:36.000000000 -0300
+@@ -24,6 +24,10 @@
+ #include <asm/arch/lubbock.h>
+ #include <asm/mach/time.h>
+
++#ifdef CONFIG_PXA_EZX
++#include <asm/arch/ezx.h>
++#endif
++
+
+ /*
+ * Debug macros
+@@ -152,8 +156,12 @@
+ }
+
+ /* ensure not to come back here if it wasn't intended */
++#ifdef CONFIG_PXA_EZX
++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = 0;
++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = OFF_FLAG;
++#else
+ PSPR = 0;
+-
++#endif
+ /* restore registers */
+ RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
+ RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
+Index: linux-2.6.21/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/ezx.c 2007-05-08 16:29:36.000000000 -0300
++++ linux-2.6.21/arch/arm/mach-pxa/ezx.c 2007-05-08 16:32:56.000000000 -0300
+@@ -18,6 +18,7 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/ohci.h>
++#include <asm/arch/system.h>
+
+ #include "generic.h"
+ #include "ezx.h"
+@@ -137,8 +138,69 @@
+ &ezxbp_device,
+ };
+
++/* PM */
++extern int bp_handshake_passed(void);
++
++#define POWER_OFF_TIMEOUT (2*60*HZ)
++
++static void ezx_reboot_poweroff(char mode)
++{
++#ifdef CONFIG_EZX_BP
++ unsigned long start = jiffies;
++
++ printk("Waiting for BP to turn off. This can take some time...\n");
++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG;
++ cpu_proc_fin();
++
++ do {
++ /*
++ * Turn off gracefully. Wait BP turn off first, and then
++ * properly turn off.
++ */
++ if (pxa_gpio_get_value(GPIO_BB_WDI) == 0) {
++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = WDI_FLAG;
++
++ /* reset BP */
++ pxa_gpio_set_value(GPIO_BB_RESET, 0);
++ mdelay(1);
++ pxa_gpio_set_value(GPIO_BB_RESET, 1);
++
++ if (mode == 'z')
++ arch_reset('h');
++ break;
++ }
++ /* Just turn it off! */
++ if (!bp_handshake_passed() || !pxa_gpio_get_value(GPIO_BB_WDI2)
++ || (jiffies - start) >= POWER_OFF_TIMEOUT) {
++ break;
++ }
++ } while(1);
++#endif
++
++ if (mode == 'z')
++ /* Panic! Ask PCAP to turn both processors off */
++ pxa_gpio_set_value(GPIO_WDI_AP, 0);
++ else
++ arm_machine_restart(mode);
++
++ while(1);
++}
++
++static inline void ezx_poweroff(void)
++{
++ ezx_reboot_poweroff('z');
++}
++
++static inline void ezx_restart(char mode)
++{
++ ezx_reboot_poweroff(mode);
++}
++
+ static int __init ezx_init(void)
+ {
++ pm_power_off = ezx_poweroff;
++ arm_pm_restart = ezx_restart;
++
+ CKEN = CKEN9_OSTIMER | CKEN22_MEMC;
+
+ ezx_ssp_set_machinfo(&ezx_ssp_machinfo);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch
new file mode 100755
index 0000000000..9f30cc35fe
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/ezx-serial-bug-workaround.patch
@@ -0,0 +1,45 @@
+Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree)
+
+Index: linux-2.6.20.7/drivers/serial/pxa.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/serial/pxa.c 2007-04-21 13:57:46.000000000 -0300
++++ linux-2.6.20.7/drivers/serial/pxa.c 2007-04-21 14:05:03.000000000 -0300
+@@ -29,6 +29,10 @@
+ #define SUPPORT_SYSRQ
+ #endif
+
++#define pxa_buggy_port(x) ({ \
++ int cpu_ver; asm("mrc%? p15, 0, %0, c0, c0" : "=r" (cpu_ver)); \
++ ((x) == PORT_PXA && (cpu_ver & ~1) == 0x69052100); })
++
+ #include <linux/module.h>
+ #include <linux/ioport.h>
+ #include <linux/init.h>
+@@ -195,7 +199,7 @@
+ if (uart_circ_empty(xmit))
+ serial_pxa_stop_tx(&up->port);
+ }
+-
++static inline irqreturn_t serial_pxa_irq(int, void *);
+ static void serial_pxa_start_tx(struct uart_port *port)
+ {
+ struct uart_pxa_port *up = (struct uart_pxa_port *)port;
+@@ -203,6 +207,8 @@
+ if (!(up->ier & UART_IER_THRI)) {
+ up->ier |= UART_IER_THRI;
+ serial_out(up, UART_IER, up->ier);
++ if (pxa_buggy_port(up->port.type))
++ serial_pxa_irq(up->port.irq, NULL);
+ }
+ }
+
+@@ -298,6 +304,9 @@
+
+ mcr |= up->mcr;
+
++ if (pxa_buggy_port(up->port.type) && up->port.irq != 0)
++ mcr ^= UART_MCR_OUT2;
++
+ serial_out(up, UART_MCR, mcr);
+ }
+
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-init-errorpath.patch
new file mode 100755
index 0000000000..716ef86fd1
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-init-errorpath.patch
@@ -0,0 +1,20 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:10:32.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:42:23.000000000 +0100
+@@ -811,7 +811,6 @@
+ /*init the related mux interface*/
+ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
+ err("usb_ipc_init: Out of memory.");
+- usb_deregister(&usb_ipc_driver);
+ return -ENOMEM;
+ }
+ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc);
+@@ -819,7 +818,6 @@
+ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) {
+ err("usb_ipc_init: Not enough memory for the input buffer.");
+ kfree(bvd_ipc);
+- usb_deregister(&usb_ipc_driver);
+ return -ENOMEM;
+ }
+ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p",
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-makefile.patch
new file mode 100755
index 0000000000..31452da847
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-makefile.patch
@@ -0,0 +1,14 @@
+Index: linux-2.6.21/drivers/char/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/char/Makefile 2007-04-26 20:09:29.000000000 +0200
++++ linux-2.6.21/drivers/char/Makefile 2007-04-26 20:09:46.000000000 +0200
+@@ -104,7 +104,8 @@
+ obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o
+ obj-$(CONFIG_TCG_TPM) += tpm/
+
+-obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o
++obj-$(CONFIG_TS0710_MUX_USB) += ts0710_mux_usb.o
++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o
+
+
+ # Files generated that shall be removed upon make clean
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-tty-driver.patch
new file mode 100755
index 0000000000..2e1aabd952
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-fix-tty-driver.patch
@@ -0,0 +1,125 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 10:51:31.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 10:53:05.000000000 +0200
+@@ -241,7 +241,8 @@
+ static volatile __u8 mux_recv_info_flags[NR_MUXS];
+ static mux_recv_struct *mux_recv_queue = NULL;
+
+-static struct tty_driver mux_driver;
++// Local for 2.6?
++static struct tty_driver *mux_driver;
+
+ #ifdef USB_FOR_MUX
+ #define COMM_FOR_MUX_DRIVER usb_for_mux_driver
+@@ -3007,6 +3008,7 @@
+ #else
+ mux_tty[line]++;
+ dlci = tty2dlci[line];
++ mux_table[line] = tty;
+
+ /* if( dlci == 1 ) { */
+ /* Open server channel 0 first */
+@@ -3087,6 +3089,7 @@
+ }
+ }
+
++
+ retval = 0;
+ #endif
+ out:
+@@ -3894,43 +3897,50 @@
+ INIT_WORK(&receive_tqueue, receive_worker, NULL);
+ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
+
+- memset(&mux_driver, 0, sizeof(struct tty_driver));
+- memset(&mux_tty, 0, sizeof(mux_tty));
+- mux_driver.magic = TTY_DRIVER_MAGIC;
+- mux_driver.driver_name = "ts0710mux";
+- mux_driver.name = "ts0710mux";
+- mux_driver.major = TS0710MUX_MAJOR;
+- mux_driver.minor_start = TS0710MUX_MINOR_START;
+- mux_driver.num = NR_MUXS;
+- mux_driver.type = TTY_DRIVER_TYPE_SERIAL;
+- mux_driver.subtype = SERIAL_TYPE_NORMAL;
+- mux_driver.init_termios = tty_std_termios;
+- mux_driver.init_termios.c_iflag = 0;
+- mux_driver.init_termios.c_oflag = 0;
+- mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD;
+- mux_driver.init_termios.c_lflag = 0;
+- mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
+-
+- mux_driver.ttys = mux_table;
+- mux_driver.termios = mux_termios;
+- mux_driver.termios_locked = mux_termios_locked;
++ mux_driver = alloc_tty_driver(NR_MUXS);
++ if (!mux_driver)
++ return -ENOMEM;
++
++ mux_driver->owner = THIS_MODULE;
++ mux_driver->driver_name = "ts0710mux";
++ mux_driver->name = "mux";
++ mux_driver->devfs_name = "mux";
++ mux_driver->major = TS0710MUX_MAJOR;
++ mux_driver->minor_start = TS0710MUX_MINOR_START;
++ mux_driver->type = TTY_DRIVER_TYPE_SERIAL;
++ mux_driver->subtype = SERIAL_TYPE_NORMAL;
++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++
++ mux_driver->init_termios = tty_std_termios;
++ mux_driver->init_termios.c_iflag = 0;
++ mux_driver->init_termios.c_oflag = 0;
++ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
++ mux_driver->init_termios.c_lflag = 0;
++
++// mux_driver.ttys = mux_table;
++ mux_driver->termios = mux_termios;
++ mux_driver->termios_locked = mux_termios_locked;
+ // mux_driver.driver_state = mux_state;
+- mux_driver.other = NULL;
++ mux_driver->other = NULL;
+
+- mux_driver.open = mux_open;
+- mux_driver.close = mux_close;
+- mux_driver.write = mux_write;
+- mux_driver.write_room = mux_write_room;
+- mux_driver.flush_buffer = mux_flush_buffer;
+- mux_driver.chars_in_buffer = mux_chars_in_buffer;
+- mux_driver.throttle = mux_throttle;
+- mux_driver.unthrottle = mux_unthrottle;
+- mux_driver.ioctl = mux_ioctl;
+- mux_driver.owner = THIS_MODULE;
++ mux_driver->open = mux_open;
++ mux_driver->close = mux_close;
++ mux_driver->write = mux_write;
++ mux_driver->write_room = mux_write_room;
++ mux_driver->flush_buffer = mux_flush_buffer;
++ mux_driver->chars_in_buffer = mux_chars_in_buffer;
++ mux_driver->throttle = mux_throttle;
++ mux_driver->unthrottle = mux_unthrottle;
++ mux_driver->ioctl = mux_ioctl;
+
+- if (tty_register_driver(&mux_driver))
++ // FIXME: No panic() here
++ if (tty_register_driver(mux_driver))
+ panic("Couldn't register mux driver");
+
++ for (j=0; j<NR_MUXS; j++)
++ tty_register_device(mux_driver, j, NULL);
++
++
+ COMM_MUX_DISPATCHER = mux_dispatcher;
+ COMM_MUX_SENDER = mux_sender;
+
+@@ -3964,7 +3974,10 @@
+ mux_recv_info[j] = 0;
+ }
+
+- if (tty_unregister_driver(&mux_driver))
++ for (j=0; j<NR_MUXS; j++)
++ tty_unregister_device(mux_driver, j);
++
++ if (tty_unregister_driver(mux_driver))
+ panic("Couldn't unregister mux driver");
+ }
+
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-fix.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-fix.patch
new file mode 100755
index 0000000000..b820762f41
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-fix.patch
@@ -0,0 +1,164 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-21 18:07:45.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-21 20:55:13.000000000 +0200
+@@ -626,7 +626,6 @@
+ }
+
+ interface = &intf->cur_altsetting->desc;
+- endpoint = &intf->cur_altsetting->endpoint[0].desc;
+ /* Start checking for two bulk endpoints or ... FIXME: This is a future
+ * enhancement...*/
+ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d",
+@@ -638,30 +637,26 @@
+
+ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
+
+- bvd_dbg("usb_ipc_probe: endpoint[0] is:%x",
+- (&endpoint[0])->bEndpointAddress);
+- bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ",
+- (&endpoint[1])->bEndpointAddress);
+-
+ while (ep_cnt < interface->bNumEndpoints) {
+-
+- if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) {
+- bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ",
+- (&endpoint[ep_cnt])->bEndpointAddress);
+- have_bulk_in_mux =
+- (&endpoint[ep_cnt])->bEndpointAddress;
+- readsize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc;
++ bvd_dbg("usb_ipc_probe: endpoint[%i] is: %x", ep_cnt,
++ endpoint->bEndpointAddress);
++
++ if (!have_bulk_in_mux && IS_EP_BULK_IN(*endpoint)) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is: %x ",
++ endpoint->bEndpointAddress);
++ have_bulk_in_mux = endpoint->bEndpointAddress;
++ readsize = endpoint->wMaxPacketSize;
+ bvd_dbg("usb_ipc_probe: readsize=%d", readsize);
+ ep_cnt++;
+ continue;
+ }
+
+- if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) {
+- bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ",
+- (&endpoint[ep_cnt])->bEndpointAddress);
+- have_bulk_out_mux =
+- (&endpoint[ep_cnt])->bEndpointAddress;
+- writesize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(*endpoint)) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is: %x ",
++ endpoint->bEndpointAddress);
++ have_bulk_out_mux = endpoint->bEndpointAddress;
++ writesize = endpoint->wMaxPacketSize;
+ bvd_dbg("usb_ipc_probe: writesize=%d", writesize);
+ ep_cnt++;
+ continue;
+@@ -718,21 +713,27 @@
+ bvd_ipc->bh_bp.func = usbipc_bh_bp_func;
+ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc;
+
++ bvd_dbg("after assignements");
+ /*Build a write urb*/
++ usb_init_urb(&bvd_ipc->writeurb_mux);
+ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev,
+ usb_sndbulkpipe(bvd_ipc->ipc_dev,
+ bvd_ipc->bulk_out_ep_mux),
+ bvd_ipc->obuf, writesize, usb_ipc_write_bulk,
+ bvd_ipc);
+ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++ bvd_dbg("after write urb");
+
+ /*Build a read urb and send a IN token first time*/
++ usb_init_urb(&bvd_ipc->readurb_mux);
+ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev,
+ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux),
+ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc);
+ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++ bvd_dbg("after read urb");
+
+- usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ //usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ bvd_dbg("after claim interface");
+ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc);
+
+ // a2590c: dsplog is not supported by this driver
+@@ -740,6 +741,8 @@
+ // &ipccfg->interface[2], bvd_ipc);
+ /*send a IN token first time*/
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ bvd_dbg("after assignement");
++
+ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
+ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n");
+
+@@ -750,7 +753,7 @@
+ tasklet_schedule(&bvd_ipc->bh);
+ }
+
+- printk("usb_ipc_probe: completed probe!");
++ printk("usb_ipc_probe: completed probe!\n");
+ usb_set_intfdata(intf, &bvd_ipc);
+ return 0;
+ }
+@@ -760,21 +763,23 @@
+ //struct usb_device *usbdev = interface_to_usbdev(intf);
+ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf);
+
+- printk("usb_ipc_disconnect:*** \n");
+
++ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect);
++
++ //FIXME: Memory leak?
+ if ((UHCRHPS3 & 0x4) == 0)
+- usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
++ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
+
+- usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
++ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
+
+ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY;
+ kfree(bvd_ipc_disconnect->ibuf);
+ kfree(bvd_ipc_disconnect->obuf);
+
+- usb_driver_release_interface(&usb_ipc_driver,
+- bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
+- usb_driver_release_interface(&usb_ipc_driver,
+- bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
++ //usb_driver_release_interface(&usb_ipc_driver,
++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
++ //usb_driver_release_interface(&usb_ipc_driver,
++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
+
+ //a2590c: dsplog interface is not supported by this driver
+ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]);
+@@ -803,13 +808,6 @@
+ int result;
+
+ bvd_dbg("init usb_ipc");
+- /* register driver at the USB subsystem */
+- result = usb_register(&usb_ipc_driver);
+- if (result < 0) {
+- err ("usb ipc driver could not be registered");
+- return result;
+- }
+-
+ /*init the related mux interface*/
+ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
+ err("usb_ipc_init: Out of memory.");
+@@ -836,6 +834,14 @@
+ usb_for_mux_driver = &ipcusb_tty_driver;
+ usb_for_mux_tty = &ipcusb_tty;
+
++ /* register driver at the USB subsystem */
++ // this was called before bvd_ipc was allocated
++ result = usb_register(&usb_ipc_driver);
++ if (result < 0) {
++ err ("usb ipc driver could not be registered");
++ return result;
++ }
++
+ /* init timers for ipcusb read process and usb suspend */
+ init_timer(&ipcusb_timer);
+ ipcusb_timer.function = ipcusb_timeout;
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-ifdef-ezx-features.patch
new file mode 100755
index 0000000000..e7935a2598
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-ifdef-ezx-features.patch
@@ -0,0 +1,86 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-24 16:31:51.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-24 16:34:57.000000000 +0200
+@@ -35,10 +35,14 @@
+ #include <linux/list.h>
+ #include <linux/errno.h>
+ #include <asm/uaccess.h>
++
++#ifdef CONFIG_PXA_EZX
+ #include <asm/hardware.h>
+ #include <asm/arch/hardware.h>
+ #include <asm/arch-pxa/pxa-regs.h>
+ #include <asm/arch-pxa/ezx.h>
++#endif
++
+ #include <linux/slab.h>
+ #include <linux/miscdevice.h>
+ #include <linux/init.h>
+@@ -341,8 +345,10 @@
+
+ static void wakeup_timeout(unsigned long data)
+ {
++#ifdef CONFIG_PXA_EZX
+ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
+ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!");
++#endif
+ }
+
+ static void suspend_timeout(unsigned long data)
+@@ -353,10 +359,12 @@
+ bvd_dbg("suspend_timeout: add the suspend timer again");
+ } else {
+ unlink_urbs(&bvd_ipc->readurb_mux);
++#ifdef CONFIG_PXA_EZX
+ UHCRHPS3 = 0x4;
+ mdelay(40);
+ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x",
+ UHCRHPS3);
++#endif
+ }
+ }
+
+@@ -404,6 +412,7 @@
+ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num;
+ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! ");
+
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0x4) {
+ static int ret;
+ int time = 0;
+@@ -442,6 +451,7 @@
+ "failed! status=%d\n", ret);
+ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
+ }
++#endif
+
+ sumbit_times++;
+ bvd_ipc->write_finished_flag = 0;
+@@ -464,12 +474,16 @@
+
+ static void usbipc_bh_bp_func(unsigned long param)
+ {
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0x4) {
+ UHCRHPS3 = 0x8;
++#endif
+ mdelay(40);
++#ifdef CONFIG_PXA_EZX
+ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! "
+ "UHCRHPS3=0x%x", UHCRHPS3);
+ }
++#endif
+ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
+ //get_halted_bit();
+
+@@ -734,7 +748,9 @@
+ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect);
+
+ //FIXME: Memory leak?
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0)
++#endif
+ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
+
+ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-linux-2.6.21-fix.patch
new file mode 100755
index 0000000000..8d5299e3bd
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-linux-2.6.21-fix.patch
@@ -0,0 +1,297 @@
+Index: linux-2.6.21/drivers/char/ts0710.h
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710.h 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710.h 2007-04-27 20:36:03.000000000 -0300
+@@ -45,7 +45,6 @@
+ * 11/18/2002 Modified
+ */
+
+-#include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/errno.h>
+@@ -58,7 +57,6 @@
+ #include <linux/major.h>
+ #include <linux/mm.h>
+ #include <linux/init.h>
+-#include <linux/devfs_fs_kernel.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+Index: linux-2.6.21/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710_mux.c 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710_mux.c 2007-04-27 20:36:03.000000000 -0300
+@@ -46,7 +46,6 @@
+ * 11/18/2002 Second version
+ * 04/21/2004 Add GPRS PROC
+ */
+-#include <linux/config.h>
+ #include <linux/module.h>
+ #include <linux/types.h>
+
+@@ -70,15 +69,12 @@
+ #include <linux/mm.h>
+ #include <linux/slab.h>
+ #include <linux/init.h>
+-#include <linux/devfs_fs_kernel.h>
+-//#include <syslog.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+ #include <asm/bitops.h>
+
+ #ifdef USB_FOR_MUX
+-//#include <linux/usb.h>
+ #include "ts0710_mux_usb.h"
+ #endif
+
+@@ -268,8 +264,8 @@
+ static struct work_struct post_recv_tqueue;
+
+ static struct tty_struct *mux_table[NR_MUXS];
+-static struct termios *mux_termios[NR_MUXS];
+-static struct termios *mux_termios_locked[NR_MUXS];
++static struct ktermios *mux_termios[NR_MUXS];
++static struct ktermios *mux_termios_locked[NR_MUXS];
+ static volatile short int mux_tty[NR_MUXS];
+
+ #ifdef min
+@@ -1894,11 +1890,7 @@
+ if (test_bit(TTY_THROTTLED, &tty->flags)) {
+ queue_data = 1;
+ } else {
+- if (test_bit
+- (TTY_DONT_FLIP, &tty->flags)) {
+- queue_data = 1;
+- post_recv = 1;
+- } else if (recv_info->total) {
++ if (recv_info->total) {
+ queue_data = 1;
+ post_recv = 1;
+ } else if (recv_room < uih_len) {
+@@ -3149,10 +3141,10 @@
+
+ /*For BP UART problem End*/
+
+-static void receive_worker(void *private_)
++static void receive_worker(struct work_struct *work)
+ {
+ struct tty_struct *tty = COMM_FOR_MUX_TTY;
+- int i, count, tbuf_free, tbuf_read;
++ int count, tbuf_free, tbuf_read;
+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
+ static unsigned char *tbuf_ptr = &tbuf[0];
+ static unsigned char *start_flag = 0;
+@@ -3168,7 +3160,7 @@
+ __u32 uih_len;
+ /*For BP UART problem End */
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ if (!tty)
+ return;
+@@ -3440,7 +3432,7 @@
+ clear_bit(RECV_RUNNING, &mux_recv_flags);
+ }
+
+-static void post_recv_worker(void *private_)
++static void post_recv_worker(struct work_struct *work)
+ {
+ ts0710_con *ts0710 = &ts0710_connection;
+ int tty_idx;
+@@ -3453,7 +3445,7 @@
+ mux_recv_packet *recv_packet, *recv_packet2;
+ __u8 j;
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
+ schedule_work(&post_recv_tqueue);
+@@ -3499,10 +3491,6 @@
+ if (test_bit(TTY_THROTTLED, &tty->flags)) {
+ add_post_recv_queue(&post_recv_q, recv_info);
+ continue;
+- } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
+- post_recv = 1;
+- add_post_recv_queue(&post_recv_q, recv_info);
+- continue;
+ }
+
+ flow_control = 0;
+@@ -3635,7 +3623,7 @@
+ }
+ }
+
+-static void send_worker(void *private_)
++static void send_worker(struct work_struct *work)
+ {
+ ts0710_con *ts0710 = &ts0710_connection;
+ __u8 j;
+@@ -3644,7 +3632,7 @@
+ struct tty_struct *tty;
+ __u8 dlci;
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ TS0710_DEBUG("Enter into send_worker");
+
+@@ -3819,7 +3807,8 @@
+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes =
+ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX);
+
+- copy_to_user(buf, gprsData, bufLen);
++ if(copy_to_user(buf, gprsData, bufLen))
++ return -EFAULT;
+
+ return bufLen;
+ }
+@@ -3836,7 +3825,8 @@
+
+ memset(gprsData, 0, bufLen);
+
+- copy_from_user(gprsData, buf, bufLen);
++ if(copy_from_user(gprsData, buf, bufLen))
++ return -EFAULT;
+
+ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes);
+ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes);
+@@ -3893,9 +3883,9 @@
+ }
+ post_recv_count_flag = 0;
+
+- INIT_WORK(&send_tqueue, send_worker, NULL);
+- INIT_WORK(&receive_tqueue, receive_worker, NULL);
+- INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
++ INIT_WORK(&send_tqueue, send_worker);
++ INIT_WORK(&receive_tqueue, receive_worker);
++ INIT_WORK(&post_recv_tqueue, post_recv_worker);
+
+ mux_driver = alloc_tty_driver(NR_MUXS);
+ if (!mux_driver)
+@@ -3904,12 +3894,11 @@
+ mux_driver->owner = THIS_MODULE;
+ mux_driver->driver_name = "ts0710mux";
+ mux_driver->name = "mux";
+- mux_driver->devfs_name = "mux";
+ mux_driver->major = TS0710MUX_MAJOR;
+ mux_driver->minor_start = TS0710MUX_MINOR_START;
+ mux_driver->type = TTY_DRIVER_TYPE_SERIAL;
+ mux_driver->subtype = SERIAL_TYPE_NORMAL;
+- mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
+
+ mux_driver->init_termios = tty_std_termios;
+ mux_driver->init_termios.c_iflag = 0;
+@@ -3917,10 +3906,10 @@
+ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
+ mux_driver->init_termios.c_lflag = 0;
+
+-// mux_driver.ttys = mux_table;
++ //mux_driver.ttys = mux_table;
+ mux_driver->termios = mux_termios;
+ mux_driver->termios_locked = mux_termios_locked;
+-// mux_driver.driver_state = mux_state;
++ //mux_driver.driver_state = mux_state;
+ mux_driver->other = NULL;
+
+ mux_driver->open = mux_open;
+Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-04-27 22:34:31.000000000 -0300
+@@ -188,7 +188,8 @@
+ buf_list_t *inbuf;
+ int count = urb->actual_length;
+
+- inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL);
++ // we are called from interrupt context.
++ inbuf = kmalloc(sizeof(buf_list_t), GFP_ATOMIC);
+ if (!inbuf) {
+ printk("append_to_inbuf_list: (%d) out of memory!\n",
+ sizeof(buf_list_t));
+@@ -196,7 +197,7 @@
+ }
+
+ inbuf->size = count;
+- inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL);
++ inbuf->body = kmalloc(sizeof(char)*count, GFP_ATOMIC);
+ if (!inbuf->body) {
+ kfree(inbuf);
+ printk("append_to_inbuf_list: (%d) out of memory!\n",
+@@ -222,7 +223,7 @@
+ inbuf = list_entry(ptr, buf_list_t, list);
+ src_count = inbuf->size;
+ if (dst_count >= src_count) {
+- memcpy(buf, inbuf->body, src_count);
++ memcpy((unsigned char *)buf, inbuf->body, src_count);
+ ret = src_count;
+ list_del(ptr);
+ kfree(inbuf->body);
+@@ -282,9 +283,8 @@
+ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
+-static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
++static void usb_ipc_read_bulk(struct urb *urb)
+ {
+- buf_list_t *inbuf;
+ int count = urb->actual_length;
+ struct tty_struct *tty = &ipcusb_tty;
+
+@@ -319,7 +319,7 @@
+ bvd_dbg("usb_ipc_read_bulk: completed!!!");
+ }
+
+-static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs)
++static void usb_ipc_write_bulk(struct urb *urb)
+ {
+ callback_times++;
+ bvd_ipc->write_finished_flag = 1;
+@@ -437,7 +437,7 @@
+ /*send IN token*/
+ bvd_ipc->readurb_mux.actual_length = 0;
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
+- if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ if ((ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)))
+ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)"
+ "failed! status=%d\n", ret);
+ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
+@@ -447,7 +447,7 @@
+ bvd_ipc->write_finished_flag = 0;
+ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
+ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev;
+- if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))
++ if ((result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)))
+ warn("ipcusb_xmit_data: funky result! result=%d\n", result);
+
+ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result);
+@@ -498,7 +498,7 @@
+ return 0;
+
+ if (*ipcusb_ap_to_bp != NULL)
+- (*ipcusb_ap_to_bp)(buf, count);
++ (*ipcusb_ap_to_bp)((unsigned char *)buf, count);
+
+ bvd_ipc->suspend_flag = 1;
+
+@@ -602,6 +602,7 @@
+ }
+
+ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
++ readsize = writesize = 0;
+
+ while (ep_cnt < interface->bNumEndpoints) {
+ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc;
+@@ -792,6 +793,8 @@
+ bvd_ipc->ipc_dev = NULL;
+ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0;
+ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++ spin_lock_init(&bvd_ipc->lock);
++ spin_lock_init(&bvd_ipc->in_buf_lock);
+
+ ipcusb_tty_driver.write = usb_ipc_write;
+ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer;
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-flipbuffers.patch
new file mode 100755
index 0000000000..d4781f9fc7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-flipbuffers.patch
@@ -0,0 +1,269 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:25.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:26.000000000 +0100
+@@ -133,6 +133,7 @@
+
+ struct circ_buf xmit; /* write cric bufffer */
+ struct list_head in_buf_list;
++ spinlock_t in_buf_lock;
+ char bulk_in_ep_mux,
+ bulk_out_ep_mux,
+ bulk_in_ep_dsplog;
+@@ -204,9 +205,39 @@
+ return;
+ }
+ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count);
++ spin_lock(&bvd_ipc->in_buf_lock);
+ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list);
++ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
++int get_from_inbuf_list(const unsigned char *buf, int dst_count)
++{
++ int ret = 0;
++ spin_lock(&bvd_ipc->in_buf_lock);
++ if (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int src_count;
++ buf_list_t *inbuf;
++ struct list_head *ptr;
++
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry(ptr, buf_list_t, list);
++ src_count = inbuf->size;
++ if (dst_count >= src_count) {
++ memcpy(buf, inbuf->body, src_count);
++ ret = src_count;
++ list_del(ptr);
++ kfree(inbuf->body);
++ kfree(inbuf);
++ } else {
++ bvd_dbg("get_from_inbuf_list: not enough space in destination buffer");
++ }
++ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
++
++ return ret;
++}
++EXPORT_SYMBOL(get_from_inbuf_list);
++
+ static void ipcusb_timeout(unsigned long data)
+ {
+ struct tty_struct *tty = &ipcusb_tty;
+@@ -214,13 +245,14 @@
+
+ bvd_dbg("ipcusb_timeout***");
+
++ spin_lock(&bvd_ipc->in_buf_lock);
+ while (!(list_empty(&bvd_ipc->in_buf_list))) {
+ int count;
+ buf_list_t *inbuf;
+ struct list_head *ptr = NULL;
+
+ ptr = bvd_ipc->in_buf_list.next;
+- inbuf = list_entry (ptr, buf_list_t, list);
++ inbuf = list_entry(ptr, buf_list_t, list);
+ count = inbuf->size;
+ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) {
+ list_del(ptr);
+@@ -232,10 +264,12 @@
+ break;
+ }
+ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
+
+ if (usb_mux_dispatcher)
+ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/
+
++ spin_lock(&bvd_ipc->in_buf_lock);
+ if (list_empty(&bvd_ipc->in_buf_list)) {
+ urb->actual_length = 0;
+ urb->dev = bvd_ipc->ipc_dev;
+@@ -246,6 +280,7 @@
+ ipcusb_timer.data = (unsigned long)urb;
+ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
+ static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
+@@ -266,69 +301,11 @@
+ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL))
+ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length);
+
+- if (!(list_empty(&bvd_ipc->in_buf_list))) {
+- int need_mux = 0;
+-
+- bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list");
+- if (count > 0) {
+- bvd_ipc->suspend_flag = 1;
+- append_to_inbuf_list(urb); /* append the current received urb */
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+- }
+-
+- while (!(list_empty(&bvd_ipc->in_buf_list))) {
+- struct list_head* ptr = NULL;
+- ptr = bvd_ipc->in_buf_list.next;
+- inbuf = list_entry(ptr, buf_list_t, list);
+- count = inbuf->size;
+- need_mux = 1;
+-
+- tty_insert_flip_string(tty, inbuf->body, count);
+-
+- list_del(ptr);
+- kfree(inbuf->body);
+- inbuf->body = NULL;
+- kfree(inbuf);
+- }
+-
+- if (usb_mux_dispatcher && need_mux)
+- usb_mux_dispatcher(tty); /* call Liu changhui's func. */
+-
+- if (list_empty(&bvd_ipc->in_buf_list)) {
+- urb->actual_length = 0;
+- urb->dev = bvd_ipc->ipc_dev;
+- if (usb_submit_urb(urb, GFP_ATOMIC))
+- bvd_dbg("usb_ipc_read_bulk: "
+- "failed resubmitting read urb");
+- bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
+- } else {
+- ipcusb_timer.data = (unsigned long)urb;
+- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+- }
+- } else if (count > 0) {
+- bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list");
++ if (count > 0) {
++ bvd_dbg("usb_ipc_read_bulk: inserting buffer into in_buf_list");
+ bvd_ipc->suspend_flag = 1;
+
+- if (tty_insert_flip_string(tty, urb->transfer_buffer,
+- count) < count) {
+- bvd_ipc->suspend_flag = 1;
+- append_to_inbuf_list(urb);
+- ipcusb_timer.data = (unsigned long)urb;
+- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+- }
++ append_to_inbuf_list(urb);
+
+ if (usb_mux_dispatcher)
+ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
+@@ -337,13 +314,6 @@
+ urb->dev = bvd_ipc->ipc_dev;
+ if (usb_submit_urb(urb, GFP_ATOMIC))
+ bvd_dbg("failed resubmitting read urb");
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
+ }
+
+@@ -705,7 +675,8 @@
+ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux;
+ bvd_ipc->ipc_dev = usbdev;
+ bvd_ipc->writesize = writesize;
+- INIT_LIST_HEAD (&bvd_ipc->in_buf_list);
++ INIT_LIST_HEAD(&bvd_ipc->in_buf_list);
++ bvd_ipc->in_buf_lock = SPIN_LOCK_UNLOCKED;
+
+ bvd_ipc->bh.func = usbipc_bh_func;
+ bvd_ipc->bh.data = (unsigned long) bvd_ipc;
+Index: linux-2.6.16/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux.c 2007-01-17 00:52:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux.c 2007-01-17 00:52:26.000000000 +0100
+@@ -3149,7 +3149,7 @@
+ static void receive_worker(void *private_)
+ {
+ struct tty_struct *tty = COMM_FOR_MUX_TTY;
+- int i, count;
++ int i, count, tbuf_free, tbuf_read;
+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
+ static unsigned char *tbuf_ptr = &tbuf[0];
+ static unsigned char *start_flag = 0;
+@@ -3167,29 +3167,39 @@
+
+ UNUSED_PARAM(private_);
+
+- if (!tty)
+- return;
++ if (!tty)
++ return;
++
++ while (1) {
++ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf);
++ TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
++ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free);
++ if (tbuf_read == 0) {
++ break;
++ } else {
++ TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
++ };
++ tbuf_ptr += tbuf_read;
++ };
++
++ count = (tbuf_ptr - tbuf);
++
++ // Should be impossible?
++ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
++ // TS0710_PRINTK
++ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
++ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
++ //}
+
+ #ifdef USB_FOR_MUX
+- TS0710_DEBUG("Receive following bytes from IPC-USB");
++ TS0710_DEBUG("Received following bytes from IPC-USB");
+ #else
+- TS0710_DEBUG("Receive following bytes from UART");
++ TS0710_DEBUG("Received following bytes from UART");
+ #endif
+-
+- TS0710_DEBUGHEX(cp, count);
+-
+- if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
+- TS0710_PRINTK
+- ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
+- count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
+- }
+-
+- count = tty_buffer_request_room(tty, count);
+-
+- for (i = 0; i < count; i++)
+- tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL);
+-
+- tbuf_ptr += count;
++ TS0710_DEBUGHEX(tbuf, count);
++
++ //gets updated above
++ //tbuf_ptr += count;
+ search = &tbuf[0];
+
+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.h
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:26.000000000 +0100
+@@ -27,3 +27,6 @@
+ extern struct tty_struct *usb_for_mux_tty;
+ extern void (*usb_mux_dispatcher)(struct tty_struct *tty);
+ extern void (*usb_mux_sender)(void);
++
++extern int get_from_inbuf_list(const unsigned char *buf, int dst_count);
++
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-get_halted_bit.patch
new file mode 100755
index 0000000000..0ebe27d03b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-get_halted_bit.patch
@@ -0,0 +1,22 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:21.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:31.000000000 +0100
+@@ -461,7 +461,7 @@
+ ipcusb_xmit_data();
+ }
+
+-extern void get_halted_bit(void);
++//extern void get_halted_bit(void);
+
+ static void usbipc_bh_bp_func(unsigned long param)
+ {
+@@ -472,7 +472,7 @@
+ "UHCRHPS3=0x%x", UHCRHPS3);
+ }
+ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
+- get_halted_bit();
++ //get_halted_bit();
+
+ /*send a IN token*/
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-usbh_finished_resume.patch
new file mode 100755
index 0000000000..c415ded428
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux-remove-usbh_finished_resume.patch
@@ -0,0 +1,22 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:37.000000000 +0100
+@@ -97,7 +97,6 @@
+ static int sumbit_times = 0;
+ static int callback_times = 0;
+ //static unsigned long last_jiff = 0;
+-extern int usbh_finished_resume;
+ /*end global values defined*/
+
+ MODULE_AUTHOR(DRIVER_AUTHOR);
+@@ -546,9 +545,6 @@
+ void usb_send_readurb(void)
+ {
+ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume);
+-
+- if (usbh_finished_resume == 0)
+- return;
+
+ tasklet_schedule(&bvd_ipc->bh_bp);
+ }
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.21/patches/mux_cli.patch
new file mode 100755
index 0000000000..b3974a5996
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux_cli.patch
@@ -0,0 +1,5396 @@
+Index: linux-2.6.21/drivers/char/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/char/Kconfig 2007-05-06 17:07:33.000000000 -0300
++++ linux-2.6.21/drivers/char/Kconfig 2007-05-06 17:10:53.000000000 -0300
+@@ -1071,5 +1071,18 @@
+ /sys/devices/platform/telco_clock, with a number of files for
+ controlling the behavior of this hardware.
+
++config TS0710_MUX
++ tristate "GSM TS 07.10 Multiplex driver"
++ depends on EZX_BP
++ help
++ This implements the GSM 07.10 multiplex.
++
++config TS0710_MUX_USB
++ tristate "Motorola USB support for TS 07.10 Multiplex driver"
++ depends on TS0710_MUX
++ help
++ This ads support for TS 07.10 over USB, as found in motorola
++ Smartphones.
++
+ endmenu
+
+Index: linux-2.6.21/drivers/char/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/char/Makefile 2007-05-06 17:07:33.000000000 -0300
++++ linux-2.6.21/drivers/char/Makefile 2007-05-06 17:10:21.000000000 -0300
+@@ -104,6 +104,9 @@
+ obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o
+ obj-$(CONFIG_TCG_TPM) += tpm/
+
++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o
++
++
+ # Files generated that shall be removed upon make clean
+ clean-files := consolemap_deftbl.c defkeymap.c
+
+Index: linux-2.6.21/drivers/char/ts0710.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/char/ts0710.h 2007-05-06 17:10:21.000000000 -0300
+@@ -0,0 +1,368 @@
++/*
++ * File: ts0710.h
++ *
++ * Portions derived from rfcomm.c, original header as follows:
++ *
++ * Copyright (C) 2000, 2001 Axis Communications AB
++ *
++ * Author: Mats Friden <mats.friden@axis.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Exceptionally, Axis Communications AB grants discretionary and
++ * conditional permissions for additional use of the text contained
++ * in the company's release of the AXIS OpenBT Stack under the
++ * provisions set forth hereunder.
++ *
++ * Provided that, if you use the AXIS OpenBT Stack with other files,
++ * that do not implement functionality as specified in the Bluetooth
++ * System specification, to produce an executable, this does not by
++ * itself cause the resulting executable to be covered by the GNU
++ * General Public License. Your use of that executable is in no way
++ * restricted on account of using the AXIS OpenBT Stack code with it.
++ *
++ * This exception does not however invalidate any other reasons why
++ * the executable file might be covered by the provisions of the GNU
++ * General Public License.
++ *
++ */
++/*
++ * Copyright (C) 2002 Motorola
++ *
++ * 07/28/2002 Initial version based on rfcomm.c
++ * 11/18/2002 Modified
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/fcntl.h>
++#include <linux/string.h>
++#include <linux/major.h>
++#include <linux/mm.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++
++#include <asm/byteorder.h>
++#include <asm/types.h>
++
++#define TS0710_MAX_CHN 14
++
++#define SET_PF(ctr) ((ctr) | (1 << 4))
++#define CLR_PF(ctr) ((ctr) & 0xef)
++#define GET_PF(ctr) (((ctr) >> 4) & 0x1)
++
++#define GET_PN_MSG_FRAME_SIZE(pn) ( ((pn)->frame_sizeh << 8) | ((pn)->frame_sizel))
++#define SET_PN_MSG_FRAME_SIZE(pn, size) ({ (pn)->frame_sizel = (size) & 0xff; \
++ (pn)->frame_sizeh = (size) >> 8; })
++
++#define GET_LONG_LENGTH(a) ( ((a).h_len << 7) | ((a).l_len) )
++#define SET_LONG_LENGTH(a, length) ({ (a).ea = 0; \
++ (a).l_len = length & 0x7F; \
++ (a).h_len = (length >> 7) & 0xFF; })
++
++#define SHORT_CRC_CHECK 3
++#define LONG_CRC_CHECK 4
++
++/* FIXME: Should thsi one be define here? */
++#define SHORT_PAYLOAD_SIZE 127
++
++#define EA 1
++#define FCS_SIZE 1
++#define FLAG_SIZE 2
++
++#define TS0710_MAX_HDR_SIZE 5
++#define DEF_TS0710_MTU 256
++
++#define TS0710_BASIC_FLAG 0xF9
++/* the control field */
++#define SABM 0x2f
++#define SABM_SIZE 4
++#define UA 0x63
++#define UA_SIZE 4
++#define DM 0x0f
++#define DISC 0x43
++#define UIH 0xef
++
++/* the type field in a multiplexer command packet */
++#define TEST 0x8
++#define FCON 0x28
++#define FCOFF 0x18
++#define MSC 0x38
++#define RPN 0x24
++#define RLS 0x14
++#define PN 0x20
++#define NSC 0x4
++
++/* V.24 modem control signals */
++#define FC 0x2
++#define RTC 0x4
++#define RTR 0x8
++#define IC 0x40
++#define DV 0x80
++
++#define CTRL_CHAN 0 /* The control channel is defined as DLCI 0 */
++#define MCC_CMD 1 /* Multiplexer command cr */
++#define MCC_RSP 0 /* Multiplexer response cr */
++
++#ifdef __LITTLE_ENDIAN_BITFIELD
++
++typedef struct {
++ __u8 ea:1;
++ __u8 cr:1;
++ __u8 d:1;
++ __u8 server_chn:5;
++} __attribute__ ((packed)) address_field;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 len:7;
++} __attribute__ ((packed)) short_length;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 l_len:7;
++ __u8 h_len;
++} __attribute__ ((packed)) long_length;
++
++typedef struct {
++ address_field addr;
++ __u8 control;
++ short_length length;
++} __attribute__ ((packed)) short_frame_head;
++
++typedef struct {
++ short_frame_head h;
++ __u8 data[0];
++} __attribute__ ((packed)) short_frame;
++
++typedef struct {
++ address_field addr;
++ __u8 control;
++ long_length length;
++ __u8 data[0];
++} __attribute__ ((packed)) long_frame_head;
++
++typedef struct {
++ long_frame_head h;
++ __u8 data[0];
++} __attribute__ ((packed)) long_frame;
++
++/* Typedefinitions for structures used for the multiplexer commands */
++typedef struct {
++ __u8 ea:1;
++ __u8 cr:1;
++ __u8 type:6;
++} __attribute__ ((packed)) mcc_type;
++
++typedef struct {
++ mcc_type type;
++ short_length length;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_short_frame_head;
++
++typedef struct {
++ mcc_short_frame_head h;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_short_frame;
++
++typedef struct {
++ mcc_type type;
++ long_length length;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_long_frame_head;
++
++typedef struct {
++ mcc_long_frame_head h;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_long_frame;
++
++/* MSC-command */
++typedef struct {
++ __u8 ea:1;
++ __u8 fc:1;
++ __u8 rtc:1;
++ __u8 rtr:1;
++ __u8 reserved:2;
++ __u8 ic:1;
++ __u8 dv:1;
++} __attribute__ ((packed)) v24_sigs;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 b1:1;
++ __u8 b2:1;
++ __u8 b3:1;
++ __u8 len:4;
++} __attribute__ ((packed)) brk_sigs;
++
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ __u8 v24_sigs;
++ //brk_sigs break_signals;
++ __u8 fcs;
++} __attribute__ ((packed)) msc_msg;
++
++#if 0
++/* conflict with termios.h */
++/* RPN command */
++#define B2400 0
++#define B4800 1
++#define B7200 2
++#define B9600 3
++#define B19200 4
++#define B38400 5
++#define B57600 6
++#define B115200 7
++#define D230400 8
++#endif
++
++/*
++typedef struct{
++ __u8 bit_rate:1;
++ __u8 data_bits:1;
++ __u8 stop_bit:1;
++ __u8 parity:1;
++ __u8 parity_type:1;
++ __u8 xon_u8:1;
++ __u8 xoff_u8:1;
++ __u8 res1:1;
++ __u8 xon_input:1;
++ __u8 xon_output:1;
++ __u8 rtr_input:1;
++ __u8 rtr_output:1;
++ __u8 rtc_input:1;
++ __u8 rtc_output:1;
++ __u8 res2:2;
++} __attribute__((packed)) parameter_mask;
++
++typedef struct{
++ __u8 bit_rate;
++ __u8 data_bits:2;
++ __u8 stop_bit:1;
++ __u8 parity:1;
++ __u8 parity_type:2;
++ __u8 res1:2;
++ __u8 xon_input:1;
++ __u8 xon_output:1;
++ __u8 rtr_input:1;
++ __u8 rtr_output:1;
++ __u8 rtc_input:1;
++ __u8 rtc_output:1;
++ __u8 res2:2;
++ __u8 xon_u8;
++ __u8 xoff_u8;
++ parameter_mask pm;
++} __attribute__((packed)) rpn_values;
++
++typedef struct{
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ rpn_values rpn_val;
++ __u8 fcs;
++} __attribute__((packed)) rpn_msg;
++*/
++
++/* RLS-command */
++/*
++typedef struct{
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ __u8 error:4;
++ __u8 res:4;
++ __u8 fcs;
++} __attribute__((packed)) rls_msg;
++*/
++
++/* PN-command */
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ __u8 dlci:6;
++ __u8 res1:2;
++ __u8 frame_type:4;
++ __u8 credit_flow:4;
++ __u8 prior:6;
++ __u8 res2:2;
++ __u8 ack_timer;
++ __u8 frame_sizel;
++ __u8 frame_sizeh;
++ __u8 max_nbrof_retrans;
++ __u8 credits;
++ __u8 fcs;
++} __attribute__ ((packed)) pn_msg;
++
++/* NSC-command */
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ mcc_type command_type;
++ __u8 fcs;
++} __attribute__ ((packed)) nsc_msg;
++
++#else
++#error Only littel-endianess supported now!
++#endif
++
++enum {
++ REJECTED = 0,
++ DISCONNECTED,
++ CONNECTING,
++ NEGOTIATING,
++ CONNECTED,
++ DISCONNECTING,
++ FLOW_STOPPED
++};
++
++enum ts0710_events {
++ CONNECT_IND,
++ CONNECT_CFM,
++ DISCONN_CFM
++};
++
++typedef struct {
++ volatile __u8 state;
++ volatile __u8 flow_control;
++ volatile __u8 initiated;
++ volatile __u8 initiator;
++ volatile __u16 mtu;
++ wait_queue_head_t open_wait;
++ wait_queue_head_t close_wait;
++} dlci_struct;
++
++/* user space interfaces */
++typedef struct {
++ volatile __u8 initiator;
++ volatile __u8 c_dlci;
++ volatile __u16 mtu;
++ volatile __u8 be_testing;
++ volatile __u32 test_errs;
++ wait_queue_head_t test_wait;
++
++ dlci_struct dlci[TS0710_MAX_CHN];
++} ts0710_con;
+Index: linux-2.6.21/drivers/char/ts0710_mux.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/char/ts0710_mux.c 2007-05-06 17:10:21.000000000 -0300
+@@ -0,0 +1,3966 @@
++/*
++ * File: mux_driver.c
++ *
++ * Portions derived from rfcomm.c, original header as follows:
++ *
++ * Copyright (C) 2000, 2001 Axis Communications AB
++ *
++ * Author: Mats Friden <mats.friden@axis.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Exceptionally, Axis Communications AB grants discretionary and
++ * conditional permissions for additional use of the text contained
++ * in the company's release of the AXIS OpenBT Stack under the
++ * provisions set forth hereunder.
++ *
++ * Provided that, if you use the AXIS OpenBT Stack with other files,
++ * that do not implement functionality as specified in the Bluetooth
++ * System specification, to produce an executable, this does not by
++ * itself cause the resulting executable to be covered by the GNU
++ * General Public License. Your use of that executable is in no way
++ * restricted on account of using the AXIS OpenBT Stack code with it.
++ *
++ * This exception does not however invalidate any other reasons why
++ * the executable file might be covered by the provisions of the GNU
++ * General Public License.
++ *
++ */
++/*
++ * Copyright (C) 2002-2004 Motorola
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * 07/28/2002 Initial version
++ * 11/18/2002 Second version
++ * 04/21/2004 Add GPRS PROC
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++
++#include <linux/kernel.h>
++#include <linux/proc_fs.h>
++
++#define USB_FOR_MUX
++
++#ifndef USB_FOR_MUX
++#include <linux/serial.h>
++#endif
++
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/fcntl.h>
++#include <linux/string.h>
++#include <linux/major.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++//#include <syslog.h>
++
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++
++#ifdef USB_FOR_MUX
++//#include <linux/usb.h>
++#include "ts0710_mux_usb.h"
++#endif
++
++#include "ts0710.h"
++#include "ts0710_mux.h"
++
++#define TS0710MUX_GPRS_SESSION_MAX 2
++#define TS0710MUX_MAJOR 250
++#define TS0710MUX_MINOR_START 0
++#define NR_MUXS 16
++
++ /*#define TS0710MUX_TIME_OUT 30 *//* 300ms */
++#define TS0710MUX_TIME_OUT 250 /* 2500ms, for BP UART hardware flow control AP UART */
++
++#define TS0710MUX_IO_DLCI_FC_ON 0x54F2
++#define TS0710MUX_IO_DLCI_FC_OFF 0x54F3
++#define TS0710MUX_IO_FC_ON 0x54F4
++#define TS0710MUX_IO_FC_OFF 0x54F5
++
++#define TS0710MUX_MAX_BUF_SIZE 2048
++
++#define TS0710MUX_SEND_BUF_OFFSET 10
++#define TS0710MUX_SEND_BUF_SIZE (DEF_TS0710_MTU + TS0710MUX_SEND_BUF_OFFSET + 34)
++#define TS0710MUX_RECV_BUF_SIZE TS0710MUX_SEND_BUF_SIZE
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++#define ACK_SPACE 66 /* 6 * 11(ACK frame size) */
++#else
++#define ACK_SPACE 42 /* 6 * 7(ACK frame size) */
++#endif
++/*For BP UART problem End*/
++
++ /*#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE)*//* For BP UART problem */
++#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + ACK_SPACE) /* For BP UART problem: ACK_SPACE */
++
++#define TS0710MUX_MAX_TOTAL_FRAME_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + FLAG_SIZE)
++#define TS0710MUX_MAX_CHARS_IN_BUF 65535
++#define TS0710MUX_THROTTLE_THRESHOLD DEF_TS0710_MTU
++
++#define TEST_PATTERN_SIZE 250
++
++#define CMDTAG 0x55
++#define DATATAG 0xAA
++
++#define ACK 0x4F /*For BP UART problem */
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++#define FIRST_BP_SEQ_OFFSET 1 /*offset from start flag */
++#define SECOND_BP_SEQ_OFFSET 2 /*offset from start flag */
++#define FIRST_AP_SEQ_OFFSET 3 /*offset from start flag */
++#define SECOND_AP_SEQ_OFFSET 4 /*offset from start flag */
++#define SLIDE_BP_SEQ_OFFSET 5 /*offset from start flag */
++#define SEQ_FIELD_SIZE 5
++#else
++#define SLIDE_BP_SEQ_OFFSET 1 /*offset from start flag */
++#define SEQ_FIELD_SIZE 1
++#endif
++
++#define ADDRESS_FIELD_OFFSET (1 + SEQ_FIELD_SIZE) /*offset from start flag */
++/*For BP UART problem End*/
++
++#ifndef UNUSED_PARAM
++#define UNUSED_PARAM(v) (void)(v)
++#endif
++
++#define TS0710MUX_GPRS1_DLCI 7
++#define TS0710MUX_GPRS2_DLCI 8
++
++#define TS0710MUX_GPRS1_RECV_COUNT_IDX 0
++#define TS0710MUX_GPRS1_SEND_COUNT_IDX 1
++#define TS0710MUX_GPRS2_RECV_COUNT_IDX 2
++#define TS0710MUX_GPRS2_SEND_COUNT_IDX 3
++#define TS0710MUX_COUNT_MAX_IDX 3
++#define TS0710MUX_COUNT_IDX_NUM (TS0710MUX_COUNT_MAX_IDX + 1)
++
++static volatile int mux_data_count[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 };
++static volatile int mux_data_count2[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 };
++static struct semaphore mux_data_count_mutex[TS0710MUX_COUNT_IDX_NUM];
++static volatile __u8 post_recv_count_flag = 0;
++
++/*PROC file*/
++struct proc_dir_entry *gprs_proc_file = NULL;
++ssize_t file_proc_read(struct file *file, char *buf, size_t size,
++ loff_t * ppos);
++ssize_t file_proc_write(struct file *file, const char *buf, size_t count,
++ loff_t * ppos);
++struct file_operations file_proc_operations = {
++ read:file_proc_read,
++ write:file_proc_write,
++};
++typedef struct {
++ int recvBytes;
++ int sentBytes;
++} gprs_bytes;
++
++static __u8 tty2dlci[NR_MUXS] =
++ { 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 13 };
++static __u8 iscmdtty[NR_MUXS] =
++ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
++typedef struct {
++ __u8 cmdtty;
++ __u8 datatty;
++} dlci_tty;
++static dlci_tty dlci2tty[] = { {0, 0}, /* DLCI 0 */
++{0, 0}, /* DLCI 1 */
++{1, 1}, /* DLCI 2 */
++{2, 2}, /* DLCI 3 */
++{3, 3}, /* DLCI 4 */
++{4, 4}, /* DLCI 5 */
++{5, 8}, /* DLCI 6 */
++{6, 9}, /* DLCI 7 */
++{7, 10}, /* DLCI 8 */
++{11, 11}, /* DLCI 9 */
++{12, 12}, /* DLCI 10 */
++{13, 13}, /* DLCI 11 */
++{14, 14}, /* DLCI 12 */
++{15, 15}
++}; /* DLCI 13 */
++
++typedef struct {
++ volatile __u8 buf[TS0710MUX_SEND_BUF_SIZE];
++ volatile __u8 *frame;
++ unsigned long flags;
++ volatile __u16 length;
++ volatile __u8 filled;
++ volatile __u8 dummy; /* Allignment to 4*n bytes */
++} mux_send_struct;
++
++/* Bit number in flags of mux_send_struct */
++#define BUF_BUSY 0
++
++struct mux_recv_packet_tag {
++ __u8 *data;
++ __u32 length;
++ struct mux_recv_packet_tag *next;
++};
++typedef struct mux_recv_packet_tag mux_recv_packet;
++
++struct mux_recv_struct_tag {
++ __u8 data[TS0710MUX_RECV_BUF_SIZE];
++ __u32 length;
++ __u32 total;
++ mux_recv_packet *mux_packet;
++ struct mux_recv_struct_tag *next;
++ int no_tty;
++ volatile __u8 post_unthrottle;
++};
++typedef struct mux_recv_struct_tag mux_recv_struct;
++
++#define RECV_RUNNING 0
++static unsigned long mux_recv_flags = 0;
++
++static mux_send_struct *mux_send_info[NR_MUXS];
++static volatile __u8 mux_send_info_flags[NR_MUXS];
++static volatile __u8 mux_send_info_idx = NR_MUXS;
++
++static mux_recv_struct *mux_recv_info[NR_MUXS];
++static volatile __u8 mux_recv_info_flags[NR_MUXS];
++static mux_recv_struct *mux_recv_queue = NULL;
++
++static struct tty_driver mux_driver;
++
++#ifdef USB_FOR_MUX
++#define COMM_FOR_MUX_DRIVER usb_for_mux_driver
++#define COMM_FOR_MUX_TTY usb_for_mux_tty
++#define COMM_MUX_DISPATCHER usb_mux_dispatcher
++#define COMM_MUX_SENDER usb_mux_sender
++#else
++#define COMM_FOR_MUX_DRIVER serial_for_mux_driver
++#define COMM_FOR_MUX_TTY serial_for_mux_tty
++#define COMM_MUX_DISPATCHER serial_mux_dispatcher
++#define COMM_MUX_SENDER serial_mux_sender
++
++extern struct list_head *tq_serial_for_mux;
++#endif
++
++extern struct tty_driver *COMM_FOR_MUX_DRIVER;
++extern struct tty_struct *COMM_FOR_MUX_TTY;
++extern void (*COMM_MUX_DISPATCHER) (struct tty_struct * tty);
++extern void (*COMM_MUX_SENDER) (void);
++
++static struct work_struct send_tqueue;
++static struct work_struct receive_tqueue;
++static struct work_struct post_recv_tqueue;
++
++static struct tty_struct *mux_table[NR_MUXS];
++static struct termios *mux_termios[NR_MUXS];
++static struct termios *mux_termios_locked[NR_MUXS];
++static volatile short int mux_tty[NR_MUXS];
++
++#ifdef min
++#undef min
++#define min(a,b) ( (a)<(b) ? (a):(b) )
++#endif
++
++static int get_count(__u8 idx);
++static int set_count(__u8 idx, int count);
++static int add_count(__u8 idx, int count);
++
++static int send_ua(ts0710_con * ts0710, __u8 dlci);
++static int send_dm(ts0710_con * ts0710, __u8 dlci);
++static int send_sabm(ts0710_con * ts0710, __u8 dlci);
++static int send_disc(ts0710_con * ts0710, __u8 dlci);
++static void queue_uih(mux_send_struct * send_info, __u16 len,
++ ts0710_con * ts0710, __u8 dlci);
++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size,
++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr);
++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr);
++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr);
++
++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum);
++static __u8 crc_calc(__u8 * data, __u32 length);
++static void create_crctable(__u8 table[]);
++
++static void mux_sched_send(void);
++
++static __u8 crctable[256];
++
++static ts0710_con ts0710_connection;
++/*
++static rpn_values rpn_val;
++*/
++
++static int valid_dlci(__u8 dlci)
++{
++ if ((dlci < TS0710_MAX_CHN) && (dlci > 0))
++ return 1;
++ else
++ return 0;
++}
++
++#ifdef TS0710DEBUG
++
++#ifdef PRINT_OUTPUT_PRINTK
++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg)
++#else
++#include "ezxlog.h"
++static __u8 strDebug[256];
++#define TS0710_DEBUG(fmt, arg...) ({ snprintf(strDebug, sizeof(strDebug), "MUX " __FUNCTION__ ": " fmt "\n" , ## arg); \
++ /*printk("%s", strDebug)*/ezxlogk("MX", strDebug, strlen(strDebug)); })
++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */
++
++#else
++#define TS0710_DEBUG(fmt...)
++#endif /* End #ifdef TS0710DEBUG */
++
++#ifdef TS0710LOG
++static unsigned char g_tbuf[TS0710MUX_MAX_BUF_SIZE];
++#ifdef PRINT_OUTPUT_PRINTK
++#define TS0710_LOG(fmt, arg...) printk(fmt, ## arg)
++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg)
++#else
++#include "ezxlog.h"
++static __u8 strLog[256];
++#define TS0710_LOG(fmt, arg...) ({ snprintf(strLog, sizeof(strLog), fmt, ## arg); \
++ /*printk("%s", strLog)*/ezxlogk("MX", strLog, strlen(strLog)); })
++#define TS0710_PRINTK(fmt, arg...) ({ printk(fmt, ## arg); \
++ TS0710_LOG(fmt, ## arg); })
++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */
++
++#else
++#define TS0710_LOG(fmt...)
++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg)
++#endif /* End #ifdef TS0710LOG */
++
++#ifdef TS0710DEBUG
++static void TS0710_DEBUGHEX(__u8 * buf, int len)
++{
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++
++ int i;
++ int c;
++
++ if (len <= 0) {
++ return;
++ }
++
++ c = 0;
++ for (i = 0; (i < len) && (c < (TS0710MUX_MAX_BUF_SIZE - 3)); i++) {
++ sprintf(&tbuf[c], "%02x ", buf[i]);
++ c += 3;
++ }
++ tbuf[c] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ TS0710_DEBUG("%s", tbuf);
++#else
++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, c);
++#endif
++}
++static void TS0710_DEBUGSTR(__u8 * buf, int len)
++{
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++
++ if (len <= 0) {
++ return;
++ }
++
++ if (len > (TS0710MUX_MAX_BUF_SIZE - 1)) {
++ len = (TS0710MUX_MAX_BUF_SIZE - 1);
++ }
++
++ memcpy(tbuf, buf, len);
++ tbuf[len] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ /* 0x00 byte in the string pointed by tbuf may truncate the print result */
++ TS0710_DEBUG("%s", tbuf);
++#else
++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, len);
++#endif
++}
++#else
++#define TS0710_DEBUGHEX(buf, len)
++#define TS0710_DEBUGSTR(buf, len)
++#endif /* End #ifdef TS0710DEBUG */
++
++#ifdef TS0710LOG
++static void TS0710_LOGSTR_FRAME(__u8 send, __u8 * data, int len)
++{
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ __u8 dlci;
++ int pos;
++
++ if (len <= 0) {
++ return;
++ }
++
++ pos = 0;
++ if (send) {
++ pos += sprintf(&g_tbuf[pos], "<");
++ short_pkt = (short_frame *) (data + 1); /*For BP UART problem */
++ } else {
++ /*For BP UART problem */
++ /*pos += sprintf(&g_tbuf[pos], ">"); */
++ pos += sprintf(&g_tbuf[pos], ">%d ", *(data + SLIDE_BP_SEQ_OFFSET)); /*For BP UART problem */
++
++#ifdef TS0710SEQ2
++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", *(data + FIRST_BP_SEQ_OFFSET), *(data + SECOND_BP_SEQ_OFFSET), *(data + FIRST_AP_SEQ_OFFSET), *(data + SECOND_AP_SEQ_OFFSET)); /*For BP UART problem */
++#endif
++
++ short_pkt = (short_frame *) (data + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ }
++
++ /*For BP UART problem */
++ /*short_pkt = (short_frame *)(data + 1); */
++
++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d;
++ switch (CLR_PF(short_pkt->h.control)) {
++ case SABM:
++ pos += sprintf(&g_tbuf[pos], "C SABM %d ::", dlci);
++ break;
++ case UA:
++ pos += sprintf(&g_tbuf[pos], "C UA %d ::", dlci);
++ break;
++ case DM:
++ pos += sprintf(&g_tbuf[pos], "C DM %d ::", dlci);
++ break;
++ case DISC:
++ pos += sprintf(&g_tbuf[pos], "C DISC %d ::", dlci);
++ break;
++
++ /*For BP UART problem Begin */
++ case ACK:
++ pos += sprintf(&g_tbuf[pos], "C ACK %d ", short_pkt->data[0]);
++
++#ifdef TS0710SEQ2
++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", short_pkt->data[1], short_pkt->data[2], short_pkt->data[3], short_pkt->data[4]); /*For BP UART problem */
++#endif
++
++ pos += sprintf(&g_tbuf[pos], "::");
++ break;
++ /*For BP UART problem End */
++
++ case UIH:
++ if (!dlci) {
++ pos += sprintf(&g_tbuf[pos], "C MCC %d ::", dlci);
++ } else {
++
++ if ((short_pkt->h.length.ea) == 0) {
++ long_pkt = (long_frame *) short_pkt;
++ uih_len = GET_LONG_LENGTH(long_pkt->h.length);
++ uih_data_start = long_pkt->h.data;
++ } else {
++ uih_len = short_pkt->h.length.len;
++ uih_data_start = short_pkt->data;
++ }
++ switch (*uih_data_start) {
++ case CMDTAG:
++ pos +=
++ sprintf(&g_tbuf[pos], "I %d A %d ::", dlci,
++ uih_len);
++ break;
++ case DATATAG:
++ default:
++ pos +=
++ sprintf(&g_tbuf[pos], "I %d D %d ::", dlci,
++ uih_len);
++ break;
++ }
++
++ }
++ break;
++ default:
++ pos += sprintf(&g_tbuf[pos], "N!!! %d ::", dlci);
++ break;
++ }
++
++ if (len > (sizeof(g_tbuf) - pos - 1)) {
++ len = (sizeof(g_tbuf) - pos - 1);
++ }
++
++ memcpy(&g_tbuf[pos], data, len);
++ pos += len;
++ g_tbuf[pos] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ /* 0x00 byte in the string pointed by g_tbuf may truncate the print result */
++ TS0710_LOG("%s\n", g_tbuf);
++#else
++ /*printk("%s\n", g_tbuf) */ ezxlogk("MX", g_tbuf, pos);
++#endif
++}
++#else
++#define TS0710_LOGSTR_FRAME(send, data, len)
++#endif
++
++#ifdef TS0710SIG
++#define my_for_each_task(p) \
++ for ((p) = current; ((p) = (p)->next_task) != current; )
++
++static void TS0710_SIG2APLOGD(void)
++{
++ struct task_struct *p;
++ static __u8 sig = 0;
++
++ if (sig) {
++ return;
++ }
++
++ read_lock(&tasklist_lock);
++ my_for_each_task(p) {
++ if (strncmp(p->comm, "aplogd", 6) == 0) {
++ sig = 1;
++ if (send_sig(SIGUSR2, p, 1) == 0) {
++ TS0710_PRINTK
++ ("MUX: success to send SIGUSR2 to aplogd!\n");
++ } else {
++ TS0710_PRINTK
++ ("MUX: failure to send SIGUSR2 to aplogd!\n");
++ }
++ break;
++ }
++ }
++ read_unlock(&tasklist_lock);
++
++ if (!sig) {
++ TS0710_PRINTK("MUX: not found aplogd!\n");
++ }
++}
++#else
++#define TS0710_SIG2APLOGD()
++#endif
++
++static int basic_write(ts0710_con * ts0710, __u8 * buf, int len)
++{
++ int res;
++
++ UNUSED_PARAM(ts0710);
++
++ buf[0] = TS0710_BASIC_FLAG;
++ buf[len + 1] = TS0710_BASIC_FLAG;
++
++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
++ TS0710_PRINTK
++ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n");
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK
++ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n");
++ TS0710_SIG2APLOGD();
++#endif
++
++ return -1;
++ }
++
++ TS0710_LOGSTR_FRAME(1, buf, len + 2);
++ TS0710_DEBUGHEX(buf, len + 2);
++
++ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2);
++
++ if (res != len + 2) {
++ TS0710_PRINTK("MUX basic_write: Write Error!\n");
++ return -1;
++ }
++
++ return len + 2;
++}
++
++/* Functions for the crc-check and calculation */
++
++#define CRC_VALID 0xcf
++
++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum)
++{
++ __u8 fcs = 0xff;
++
++ while (length--) {
++ fcs = crctable[fcs ^ *data++];
++ }
++ fcs = crctable[fcs ^ check_sum];
++ TS0710_DEBUG("fcs : %d\n", fcs);
++ if (fcs == (uint) 0xcf) { /*CRC_VALID) */
++ TS0710_DEBUG("crc_check: CRC check OK\n");
++ return 0;
++ } else {
++ TS0710_PRINTK("MUX crc_check: CRC check failed\n");
++ return 1;
++ }
++}
++
++/* Calculates the checksum according to the ts0710 specification */
++
++static __u8 crc_calc(__u8 * data, __u32 length)
++{
++ __u8 fcs = 0xff;
++
++ while (length--) {
++ fcs = crctable[fcs ^ *data++];
++ }
++
++ return 0xff - fcs;
++}
++
++/* Calulates a reversed CRC table for the FCS check */
++
++static void create_crctable(__u8 table[])
++{
++ int i, j;
++
++ __u8 data;
++ __u8 code_word = (__u8) 0xe0;
++ __u8 sr = (__u8) 0;
++
++ for (j = 0; j < 256; j++) {
++ data = (__u8) j;
++
++ for (i = 0; i < 8; i++) {
++ if ((data & 0x1) ^ (sr & 0x1)) {
++ sr >>= 1;
++ sr ^= code_word;
++ } else {
++ sr >>= 1;
++ }
++
++ data >>= 1;
++ sr &= 0xff;
++ }
++
++ table[j] = sr;
++ sr = 0;
++ }
++}
++
++static void ts0710_reset_dlci(__u8 j)
++{
++ if (j >= TS0710_MAX_CHN)
++ return;
++
++ ts0710_connection.dlci[j].state = DISCONNECTED;
++ ts0710_connection.dlci[j].flow_control = 0;
++ ts0710_connection.dlci[j].mtu = DEF_TS0710_MTU;
++ ts0710_connection.dlci[j].initiated = 0;
++ ts0710_connection.dlci[j].initiator = 0;
++ init_waitqueue_head(&ts0710_connection.dlci[j].open_wait);
++ init_waitqueue_head(&ts0710_connection.dlci[j].close_wait);
++}
++
++static void ts0710_reset_con(void)
++{
++ __u8 j;
++
++ ts0710_connection.initiator = 0;
++ ts0710_connection.mtu = DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE;
++ ts0710_connection.be_testing = 0;
++ ts0710_connection.test_errs = 0;
++ init_waitqueue_head(&ts0710_connection.test_wait);
++
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710_reset_dlci(j);
++ }
++}
++
++static void ts0710_init(void)
++{
++ create_crctable(crctable);
++
++ ts0710_reset_con();
++
++ /* Set the values in the rpn octets */
++/*
++ rpn_val.bit_rate = 7;
++ rpn_val.data_bits = 3;
++ rpn_val.stop_bit = 0;
++ rpn_val.parity = 0;
++ rpn_val.parity_type = 0;
++ rpn_val.res1 = 0;
++ rpn_val.xon_input = 0;
++ rpn_val.xon_output = 0;
++ rpn_val.rtr_input = 0;
++ rpn_val.rtr_output = 0;
++ rpn_val.rtc_input = 0;
++ rpn_val.rtc_output = 0;
++ rpn_val.res2 = 0;
++ rpn_val.xon_u8 = 0x11;
++ rpn_val.xoff_u8 = 0x13;
++ memset(&rpn_val.pm, 0 , 2); *//* Set the mask to zero */
++}
++
++static void ts0710_upon_disconnect(void)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 j;
++
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710->dlci[j].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[j].open_wait);
++ wake_up_interruptible(&ts0710->dlci[j].close_wait);
++ }
++ ts0710->be_testing = 0;
++ wake_up_interruptible(&ts0710->test_wait);
++ ts0710_reset_con();
++}
++
++/* Sending packet functions */
++
++/* Creates a UA packet and puts it at the beginning of the pkt pointer */
++
++static int send_ua(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *ua;
++
++ TS0710_DEBUG("send_ua: Creating UA packet to DLCI %d\n", dlci);
++
++ ua = (short_frame *) (buf + 1);
++ ua->h.addr.ea = 1;
++ ua->h.addr.cr = ((~(ts0710->initiator)) & 0x1);
++ ua->h.addr.d = (dlci) & 0x1;
++ ua->h.addr.server_chn = (dlci) >> 0x1;
++ ua->h.control = SET_PF(UA);
++ ua->h.length.ea = 1;
++ ua->h.length.len = 0;
++ ua->data[0] = crc_calc((__u8 *) ua, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++/* Creates a DM packet and puts it at the beginning of the pkt pointer */
++
++static int send_dm(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *dm;
++
++ TS0710_DEBUG("send_dm: Creating DM packet to DLCI %d\n", dlci);
++
++ dm = (short_frame *) (buf + 1);
++ dm->h.addr.ea = 1;
++ dm->h.addr.cr = ((~(ts0710->initiator)) & 0x1);
++ dm->h.addr.d = dlci & 0x1;
++ dm->h.addr.server_chn = dlci >> 0x1;
++ dm->h.control = SET_PF(DM);
++ dm->h.length.ea = 1;
++ dm->h.length.len = 0;
++ dm->data[0] = crc_calc((__u8 *) dm, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static int send_sabm(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *sabm;
++
++ TS0710_DEBUG("send_sabm: Creating SABM packet to DLCI %d\n", dlci);
++
++ sabm = (short_frame *) (buf + 1);
++ sabm->h.addr.ea = 1;
++ sabm->h.addr.cr = ((ts0710->initiator) & 0x1);
++ sabm->h.addr.d = dlci & 0x1;
++ sabm->h.addr.server_chn = dlci >> 0x1;
++ sabm->h.control = SET_PF(SABM);
++ sabm->h.length.ea = 1;
++ sabm->h.length.len = 0;
++ sabm->data[0] = crc_calc((__u8 *) sabm, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static int send_disc(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *disc;
++
++ TS0710_DEBUG("send_disc: Creating DISC packet to DLCI %d\n", dlci);
++
++ disc = (short_frame *) (buf + 1);
++ disc->h.addr.ea = 1;
++ disc->h.addr.cr = ((ts0710->initiator) & 0x1);
++ disc->h.addr.d = dlci & 0x1;
++ disc->h.addr.server_chn = dlci >> 0x1;
++ disc->h.control = SET_PF(DISC);
++ disc->h.length.ea = 1;
++ disc->h.length.len = 0;
++ disc->data[0] = crc_calc((__u8 *) disc, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static void queue_uih(mux_send_struct * send_info, __u16 len,
++ ts0710_con * ts0710, __u8 dlci)
++{
++ __u32 size;
++
++ TS0710_DEBUG
++ ("queue_uih: Creating UIH packet with %d bytes data to DLCI %d\n",
++ len, dlci);
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ long_frame *l_pkt;
++
++ size = sizeof(long_frame) + len + FCS_SIZE;
++ l_pkt = (long_frame *) (send_info->frame - sizeof(long_frame));
++ set_uih_hdr((void *)l_pkt, dlci, len, ts0710->initiator);
++ l_pkt->data[len] = crc_calc((__u8 *) l_pkt, LONG_CRC_CHECK);
++ send_info->frame = ((__u8 *) l_pkt) - 1;
++ } else {
++ short_frame *s_pkt;
++
++ size = sizeof(short_frame) + len + FCS_SIZE;
++ s_pkt =
++ (short_frame *) (send_info->frame - sizeof(short_frame));
++ set_uih_hdr((void *)s_pkt, dlci, len, ts0710->initiator);
++ s_pkt->data[len] = crc_calc((__u8 *) s_pkt, SHORT_CRC_CHECK);
++ send_info->frame = ((__u8 *) s_pkt) - 1;
++ }
++ send_info->length = size;
++}
++
++/* Multiplexer command packets functions */
++
++/* Turns on the ts0710 flow control */
++
++static int ts0710_fcon_msg(ts0710_con * ts0710, __u8 cr)
++{
++ __u8 buf[30];
++ mcc_short_frame *mcc_pkt;
++ short_frame *uih_pkt;
++ __u32 size;
++
++ size = sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE;
++ uih_pkt = (short_frame *) (buf + 1);
++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame),
++ ts0710->initiator);
++ uih_pkt->data[sizeof(mcc_short_frame)] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data);
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = FCON;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/* Turns off the ts0710 flow control */
++
++static int ts0710_fcoff_msg(ts0710_con * ts0710, __u8 cr)
++{
++ __u8 buf[30];
++ mcc_short_frame *mcc_pkt;
++ short_frame *uih_pkt;
++ __u32 size;
++
++ size = (sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE);
++ uih_pkt = (short_frame *) (buf + 1);
++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame),
++ ts0710->initiator);
++ uih_pkt->data[sizeof(mcc_short_frame)] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data);
++
++ mcc_pkt->h.type.ea = 1;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = FCOFF;
++ mcc_pkt->h.length.ea = 1;
++ mcc_pkt->h.length.len = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/*
++static int ts0710_rpn_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 req)
++{
++ char buf[100];
++ rpn_msg* rpn_pkt;
++ __u32 fsize;
++ __u32 psize;
++
++ fsize = sizeof(rpn_msg);
++
++ if (req) {
++ fsize -= sizeof(rpn_values);
++ }
++
++ psize = (fsize - sizeof(short_frame) - FCS_SIZE);
++
++ rpn_pkt = (rpn_msg *) buf;
++
++ set_uih_hdr((short_frame *) rpn_pkt, CTRL_CHAN, psize, ts0710->initiator);
++
++ rpn_pkt->fcs = crc_calc((__u8*) rpn_pkt, SHORT_CRC_CHECK);
++
++ rpn_pkt->mcc_s_head.type.ea = EA;
++ rpn_pkt->mcc_s_head.type.cr = cr;
++ rpn_pkt->mcc_s_head.type.type = RPN;
++ rpn_pkt->mcc_s_head.length.ea = EA;
++
++ rpn_pkt->dlci.ea = EA;
++ rpn_pkt->dlci.cr = 1;
++ rpn_pkt->dlci.d = dlci & 1;
++ rpn_pkt->dlci.server_chn = (dlci >> 1);
++
++ if (req) {
++ rpn_pkt->mcc_s_head.length.len = 1;
++ rpn_pkt->rpn_val.bit_rate = rpn_pkt->fcs;
++ } else {
++ rpn_pkt->mcc_s_head.length.len = 8;
++ memcpy(&(rpn_pkt->rpn_val), &rpn_val, sizeof(rpn_values));
++ }
++ return basic_write(ts0710, buf, fsize);
++}
++*/
++/*
++static int ts0710_rls_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 err_code)
++{
++ char buf[100];
++ rls_msg *rls_pkt;
++ __u32 fsize;
++ __u32 psize;
++
++ fsize = sizeof(rls_msg);
++ psize = fsize - sizeof(short_frame) - FCS_SIZE;
++ rls_pkt = (rls_msg *) buf;
++
++ set_uih_hdr((short_frame *) rls_pkt, CTRL_CHAN, psize, ts0710->initiator);
++ rls_pkt->fcs = crc_calc((__u8*) rls_pkt, SHORT_CRC_CHECK);
++
++ rls_pkt->mcc_s_head.type.ea = EA;
++ rls_pkt->mcc_s_head.type.cr = cr;
++ rls_pkt->mcc_s_head.type.type = RLS;
++ rls_pkt->mcc_s_head.length.ea = EA;
++ rls_pkt->mcc_s_head.length.len = 2;
++
++ rls_pkt->dlci.ea = EA;
++ rls_pkt->dlci.cr = 1;
++ rls_pkt->dlci.d = dlci & 1;
++ rls_pkt->dlci.server_chn = dlci >> 1;
++ rls_pkt->error = err_code;
++ rls_pkt->res = 0;
++
++ return basic_write(ts0710, buf, fsize);
++}
++*/
++
++/* Sends an PN-messages and sets the not negotiable parameters to their
++ default values in ts0710 */
++
++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size,
++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr)
++{
++ __u8 buf[30];
++ pn_msg *pn_pkt;
++ __u32 size;
++ TS0710_DEBUG
++ ("send_pn_msg: DLCI 0x%02x, prior:0x%02x, frame_size:%d, credit_flow:%x, credits:%d, cr:%x\n",
++ dlci, prior, frame_size, credit_flow, credits, cr);
++
++ size = sizeof(pn_msg);
++ pn_pkt = (pn_msg *) (buf + 1);
++
++ set_uih_hdr((void *)pn_pkt, CTRL_CHAN,
++ size - (sizeof(short_frame) + FCS_SIZE), ts0710->initiator);
++ pn_pkt->fcs = crc_calc((__u8 *) pn_pkt, SHORT_CRC_CHECK);
++
++ pn_pkt->mcc_s_head.type.ea = 1;
++ pn_pkt->mcc_s_head.type.cr = cr;
++ pn_pkt->mcc_s_head.type.type = PN;
++ pn_pkt->mcc_s_head.length.ea = 1;
++ pn_pkt->mcc_s_head.length.len = 8;
++
++ pn_pkt->res1 = 0;
++ pn_pkt->res2 = 0;
++ pn_pkt->dlci = dlci;
++ pn_pkt->frame_type = 0;
++ pn_pkt->credit_flow = credit_flow;
++ pn_pkt->prior = prior;
++ pn_pkt->ack_timer = 0;
++ SET_PN_MSG_FRAME_SIZE(pn_pkt, frame_size);
++ pn_pkt->credits = credits;
++ pn_pkt->max_nbrof_retrans = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/* Send a Not supported command - command, which needs 3 bytes */
++
++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr)
++{
++ __u8 buf[30];
++ nsc_msg *nsc_pkt;
++ __u32 size;
++
++ size = sizeof(nsc_msg);
++ nsc_pkt = (nsc_msg *) (buf + 1);
++
++ set_uih_hdr((void *)nsc_pkt, CTRL_CHAN,
++ sizeof(nsc_msg) - sizeof(short_frame) - FCS_SIZE,
++ ts0710->initiator);
++
++ nsc_pkt->fcs = crc_calc((__u8 *) nsc_pkt, SHORT_CRC_CHECK);
++
++ nsc_pkt->mcc_s_head.type.ea = 1;
++ nsc_pkt->mcc_s_head.type.cr = cr;
++ nsc_pkt->mcc_s_head.type.type = NSC;
++ nsc_pkt->mcc_s_head.length.ea = 1;
++ nsc_pkt->mcc_s_head.length.len = 1;
++
++ nsc_pkt->command_type.ea = 1;
++ nsc_pkt->command_type.cr = cmd.cr;
++ nsc_pkt->command_type.type = cmd.type;
++
++ return basic_write(ts0710, buf, size);
++}
++
++static int ts0710_msc_msg(ts0710_con * ts0710, __u8 value, __u8 cr, __u8 dlci)
++{
++ __u8 buf[30];
++ msc_msg *msc_pkt;
++ __u32 size;
++
++ size = sizeof(msc_msg);
++ msc_pkt = (msc_msg *) (buf + 1);
++
++ set_uih_hdr((void *)msc_pkt, CTRL_CHAN,
++ sizeof(msc_msg) - sizeof(short_frame) - FCS_SIZE,
++ ts0710->initiator);
++
++ msc_pkt->fcs = crc_calc((__u8 *) msc_pkt, SHORT_CRC_CHECK);
++
++ msc_pkt->mcc_s_head.type.ea = 1;
++ msc_pkt->mcc_s_head.type.cr = cr;
++ msc_pkt->mcc_s_head.type.type = MSC;
++ msc_pkt->mcc_s_head.length.ea = 1;
++ msc_pkt->mcc_s_head.length.len = 2;
++
++ msc_pkt->dlci.ea = 1;
++ msc_pkt->dlci.cr = 1;
++ msc_pkt->dlci.d = dlci & 1;
++ msc_pkt->dlci.server_chn = (dlci >> 1) & 0x1f;
++
++ msc_pkt->v24_sigs = value;
++
++ return basic_write(ts0710, buf, size);
++}
++
++static int ts0710_test_msg(ts0710_con * ts0710, __u8 * test_pattern, __u32 len,
++ __u8 cr, __u8 * f_buf /*Frame buf */ )
++{
++ __u32 size;
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ long_frame *uih_pkt;
++ mcc_long_frame *mcc_pkt;
++
++ size =
++ (sizeof(long_frame) + sizeof(mcc_long_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (long_frame *) (f_buf + 1);
++
++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, len +
++ sizeof(mcc_long_frame), ts0710->initiator);
++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] =
++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK);
++ mcc_pkt = (mcc_long_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ /* cr tells whether it is a commmand (1) or a response (0) */
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ SET_LONG_LENGTH(mcc_pkt->h.length, len);
++ memcpy(mcc_pkt->value, test_pattern, len);
++ } else if (len > (SHORT_PAYLOAD_SIZE - sizeof(mcc_short_frame))) {
++ long_frame *uih_pkt;
++ mcc_short_frame *mcc_pkt;
++
++ /* Create long uih packet and short mcc packet */
++ size =
++ (sizeof(long_frame) + sizeof(mcc_short_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (long_frame *) (f_buf + 1);
++
++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN,
++ len + sizeof(mcc_short_frame), ts0710->initiator);
++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] =
++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = len;
++ memcpy(mcc_pkt->value, test_pattern, len);
++ } else {
++ short_frame *uih_pkt;
++ mcc_short_frame *mcc_pkt;
++
++ size =
++ (sizeof(short_frame) + sizeof(mcc_short_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (short_frame *) (f_buf + 1);
++
++ set_uih_hdr((void *)uih_pkt, CTRL_CHAN, len
++ + sizeof(mcc_short_frame), ts0710->initiator);
++ uih_pkt->data[uih_pkt->h.length.len] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = len;
++ memcpy(mcc_pkt->value, test_pattern, len);
++
++ }
++ return basic_write(ts0710, f_buf, size);
++}
++
++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr)
++{
++ uih_pkt->h.addr.ea = 1;
++ uih_pkt->h.addr.cr = cr;
++ uih_pkt->h.addr.d = dlci & 0x1;
++ uih_pkt->h.addr.server_chn = dlci >> 1;
++ uih_pkt->h.control = CLR_PF(UIH);
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ SET_LONG_LENGTH(((long_frame *) uih_pkt)->h.length, len);
++ } else {
++ uih_pkt->h.length.ea = 1;
++ uih_pkt->h.length.len = len;
++ }
++}
++
++/* Parses a multiplexer control channel packet */
++
++void process_mcc(__u8 * data, __u32 len, ts0710_con * ts0710, int longpkt)
++{
++ __u8 *tbuf = NULL;
++ mcc_short_frame *mcc_short_pkt;
++ int j;
++
++ if (longpkt) {
++ mcc_short_pkt =
++ (mcc_short_frame *) (((long_frame *) data)->data);
++ } else {
++ mcc_short_pkt =
++ (mcc_short_frame *) (((short_frame *) data)->data);
++ }
++
++ switch (mcc_short_pkt->h.type.type) {
++ case TEST:
++ if (mcc_short_pkt->h.type.cr == MCC_RSP) {
++ TS0710_DEBUG("Received test command response\n");
++
++ if (ts0710->be_testing) {
++ if ((mcc_short_pkt->h.length.ea) == 0) {
++ mcc_long_frame *mcc_long_pkt;
++ mcc_long_pkt =
++ (mcc_long_frame *) mcc_short_pkt;
++ if (GET_LONG_LENGTH
++ (mcc_long_pkt->h.length) !=
++ TEST_PATTERN_SIZE) {
++ ts0710->test_errs =
++ TEST_PATTERN_SIZE;
++ TS0710_DEBUG
++ ("Err: received test pattern is %d bytes long, not expected %d\n",
++ GET_LONG_LENGTH
++ (mcc_long_pkt->h.length),
++ TEST_PATTERN_SIZE);
++ } else {
++ ts0710->test_errs = 0;
++ for (j = 0;
++ j < TEST_PATTERN_SIZE;
++ j++) {
++ if (mcc_long_pkt->
++ value[j] !=
++ (j & 0xFF)) {
++ (ts0710->
++ test_errs)++;
++ }
++ }
++ }
++
++ } else {
++
++#if TEST_PATTERN_SIZE < 128
++ if (mcc_short_pkt->h.length.len !=
++ TEST_PATTERN_SIZE) {
++#endif
++
++ ts0710->test_errs =
++ TEST_PATTERN_SIZE;
++ TS0710_DEBUG
++ ("Err: received test pattern is %d bytes long, not expected %d\n",
++ mcc_short_pkt->h.length.
++ len, TEST_PATTERN_SIZE);
++
++#if TEST_PATTERN_SIZE < 128
++ } else {
++ ts0710->test_errs = 0;
++ for (j = 0;
++ j < TEST_PATTERN_SIZE;
++ j++) {
++ if (mcc_short_pkt->
++ value[j] !=
++ (j & 0xFF)) {
++ (ts0710->
++ test_errs)++;
++ }
++ }
++ }
++#endif
++
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ wake_up_interruptible(&ts0710->test_wait);
++ } else {
++ TS0710_DEBUG
++ ("Err: shouldn't or late to get test cmd response\n");
++ }
++ } else {
++ tbuf = (__u8 *) kmalloc(len + 32, GFP_ATOMIC);
++ if (!tbuf) {
++ break;
++ }
++
++ if ((mcc_short_pkt->h.length.ea) == 0) {
++ mcc_long_frame *mcc_long_pkt;
++ mcc_long_pkt = (mcc_long_frame *) mcc_short_pkt;
++ ts0710_test_msg(ts0710, mcc_long_pkt->value,
++ GET_LONG_LENGTH(mcc_long_pkt->h.
++ length),
++ MCC_RSP, tbuf);
++ } else {
++ ts0710_test_msg(ts0710, mcc_short_pkt->value,
++ mcc_short_pkt->h.length.len,
++ MCC_RSP, tbuf);
++ }
++
++ kfree(tbuf);
++ }
++ break;
++
++ case FCON: /*Flow control on command */
++ TS0710_PRINTK
++ ("MUX Received Flow control(all channels) on command\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ ts0710->dlci[0].state = CONNECTED;
++ ts0710_fcon_msg(ts0710, MCC_RSP);
++ mux_sched_send();
++ }
++ break;
++
++ case FCOFF: /*Flow control off command */
++ TS0710_PRINTK
++ ("MUX Received Flow control(all channels) off command\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710->dlci[j].state = FLOW_STOPPED;
++ }
++ ts0710_fcoff_msg(ts0710, MCC_RSP);
++ }
++ break;
++
++ case MSC: /*Modem status command */
++ {
++ __u8 dlci;
++ __u8 v24_sigs;
++
++ dlci = (mcc_short_pkt->value[0]) >> 2;
++ v24_sigs = mcc_short_pkt->value[1];
++
++ if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ send_dm(ts0710, dlci);
++ break;
++ }
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ TS0710_DEBUG("Received Modem status command\n");
++ if (v24_sigs & 2) {
++ if (ts0710->dlci[dlci].state ==
++ CONNECTED) {
++ TS0710_LOG
++ ("MUX Received Flow off on dlci %d\n",
++ dlci);
++ ts0710->dlci[dlci].state =
++ FLOW_STOPPED;
++ }
++ } else {
++ if (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED) {
++ ts0710->dlci[dlci].state =
++ CONNECTED;
++ TS0710_LOG
++ ("MUX Received Flow on on dlci %d\n",
++ dlci);
++ mux_sched_send();
++ }
++ }
++
++ ts0710_msc_msg(ts0710, v24_sigs, MCC_RSP, dlci);
++/*
++ if (!(ts0710->dlci[dlci].initiated) && !(ts0710->dlci[dlci].initiator)) {
++ ts0710_msc_msg(ts0710, EA | RTR | RTC | DV, MCC_CMD, dlci);
++ ts0710->dlci[dlci].initiated = 1;
++ }
++*/
++ } else {
++ TS0710_DEBUG
++ ("Received Modem status response\n");
++
++ if (v24_sigs & 2) {
++ TS0710_DEBUG("Flow stop accepted\n");
++ }
++ }
++ break;
++ }
++
++ /* case RPN: *//*Remote port negotiation command */
++
++/* {
++ __u8 dlci;
++
++ dlci = (mcc_short_pkt->value[0]) >> 2;
++
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ if (mcc_short_pkt->h.length.len == 1) {
++ TS0710_DEBUG("Received Remote port negotiation command\n");
++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0);
++ } else {
++*/
++ /* Accept the other sides settings (accept all for now) */
++/* TS0710_DEBUG("Received Remote port negotiation respons\n");
++ memcpy(&rpn_val, &mcc_short_pkt->value[1], 8);
++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0);
++*/
++ /* Zero the parametermask after response */
++/* memset(&rpn_val.pm, 0, 2);
++ }
++ }
++ break;
++ }
++*/
++/*
++ case RLS: *//*Remote line status */
++/* {
++ __u8 dlci;
++ __u8 err_code;
++
++ TS0710_DEBUG("Received Remote line status\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ dlci = mcc_short_pkt->value[0] >> 2;
++ err_code = mcc_short_pkt->value[1];
++
++ ts0710_rls_msg(ts0710, MCC_RSP, dlci, err_code);
++ }
++ break;
++ }
++*/
++ case PN: /*DLC parameter negotiation */
++ {
++ __u8 dlci;
++ __u16 frame_size;
++ pn_msg *pn_pkt;
++
++ pn_pkt = (pn_msg *) data;
++ dlci = pn_pkt->dlci;
++ frame_size = GET_PN_MSG_FRAME_SIZE(pn_pkt);
++ TS0710_DEBUG
++ ("Received DLC parameter negotiation, PN\n");
++ if (pn_pkt->mcc_s_head.type.cr == MCC_CMD) {
++ TS0710_DEBUG("received PN command with:\n");
++ TS0710_DEBUG("Frame size:%d\n", frame_size);
++
++ frame_size =
++ min(frame_size, ts0710->dlci[dlci].mtu);
++ send_pn_msg(ts0710, pn_pkt->prior, frame_size,
++ 0, 0, dlci, MCC_RSP);
++ ts0710->dlci[dlci].mtu = frame_size;
++ TS0710_DEBUG("process_mcc : mtu set to %d\n",
++ ts0710->dlci[dlci].mtu);
++ } else {
++ TS0710_DEBUG("received PN response with:\n");
++ TS0710_DEBUG("Frame size:%d\n", frame_size);
++
++ frame_size =
++ min(frame_size, ts0710->dlci[dlci].mtu);
++ ts0710->dlci[dlci].mtu = frame_size;
++
++ TS0710_DEBUG
++ ("process_mcc : mtu set on dlci:%d to %d\n",
++ dlci, ts0710->dlci[dlci].mtu);
++
++ if (ts0710->dlci[dlci].state == NEGOTIATING) {
++ ts0710->dlci[dlci].state = CONNECTING;
++ wake_up_interruptible(&ts0710->
++ dlci[dlci].
++ open_wait);
++ }
++ }
++ break;
++ }
++
++ case NSC: /*Non supported command resonse */
++ TS0710_LOG("MUX Received Non supported command response\n");
++ break;
++
++ default: /*Non supported command received */
++ TS0710_LOG("MUX Received a non supported command\n");
++ send_nsc_msg(ts0710, mcc_short_pkt->h.type, MCC_RSP);
++ break;
++ }
++}
++
++static mux_recv_packet *get_mux_recv_packet(__u32 size)
++{
++ mux_recv_packet *recv_packet;
++
++ TS0710_DEBUG("Enter into get_mux_recv_packet");
++
++ recv_packet =
++ (mux_recv_packet *) kmalloc(sizeof(mux_recv_packet), GFP_ATOMIC);
++ if (!recv_packet) {
++ return 0;
++ }
++
++ recv_packet->data = (__u8 *) kmalloc(size, GFP_ATOMIC);
++ if (!(recv_packet->data)) {
++ kfree(recv_packet);
++ return 0;
++ }
++ recv_packet->length = 0;
++ recv_packet->next = 0;
++ return recv_packet;
++}
++
++static void free_mux_recv_packet(mux_recv_packet * recv_packet)
++{
++ TS0710_DEBUG("Enter into free_mux_recv_packet");
++
++ if (!recv_packet) {
++ return;
++ }
++
++ if (recv_packet->data) {
++ kfree(recv_packet->data);
++ }
++ kfree(recv_packet);
++}
++
++static void free_mux_recv_struct(mux_recv_struct * recv_info)
++{
++ mux_recv_packet *recv_packet1, *recv_packet2;
++
++ if (!recv_info) {
++ return;
++ }
++
++ recv_packet1 = recv_info->mux_packet;
++ while (recv_packet1) {
++ recv_packet2 = recv_packet1->next;
++ free_mux_recv_packet(recv_packet1);
++ recv_packet1 = recv_packet2;
++ }
++
++ kfree(recv_info);
++}
++
++static inline void add_post_recv_queue(mux_recv_struct ** head,
++ mux_recv_struct * new_item)
++{
++ new_item->next = *head;
++ *head = new_item;
++}
++
++static void ts0710_flow_on(__u8 dlci, ts0710_con * ts0710)
++{
++ int i;
++ __u8 cmdtty;
++ __u8 datatty;
++ struct tty_struct *tty;
++ mux_recv_struct *recv_info;
++
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (!(ts0710->dlci[dlci].flow_control)) {
++ return;
++ }
++
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++
++ if (cmdtty != datatty) {
++ /* Check AT cmd tty */
++ tty = mux_table[cmdtty];
++ if (mux_tty[cmdtty] && tty) {
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++ }
++ recv_info = mux_recv_info[cmdtty];
++ if (mux_recv_info_flags[cmdtty] && recv_info) {
++ if (recv_info->total) {
++ return;
++ }
++ }
++
++ /* Check data tty */
++ tty = mux_table[datatty];
++ if (mux_tty[datatty] && tty) {
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++ }
++ recv_info = mux_recv_info[datatty];
++ if (mux_recv_info_flags[datatty] && recv_info) {
++ if (recv_info->total) {
++ return;
++ }
++ }
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, dlci) <
++ 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX send Flow on on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 0;
++ break;
++ }
++ }
++}
++
++static void ts0710_flow_off(struct tty_struct *tty, __u8 dlci,
++ ts0710_con * ts0710)
++{
++ int i;
++
++ if (test_and_set_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (ts0710->dlci[dlci].flow_control) {
++ return;
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg
++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX send Flow off on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 1;
++ break;
++ }
++ }
++}
++
++int ts0710_recv_data(ts0710_con * ts0710, char *data, int len)
++{
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ __u8 dlci;
++ __u8 be_connecting;
++#ifdef TS0710DEBUG
++ unsigned long t;
++#endif
++
++ short_pkt = (short_frame *) data;
++
++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d;
++ switch (CLR_PF(short_pkt->h.control)) {
++ case SABM:
++ TS0710_DEBUG("SABM-packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++ ts0710->dlci[0].state = CONNECTED;
++
++ TS0710_DEBUG("sending back UA - control channel\n");
++ send_ua(ts0710, dlci);
++ wake_up_interruptible(&ts0710->dlci[0].open_wait);
++
++ } else if (valid_dlci(dlci)) {
++
++ TS0710_DEBUG("Incomming connect on channel %d\n", dlci);
++
++ TS0710_DEBUG("sending UA, dlci %d\n", dlci);
++ send_ua(ts0710, dlci);
++
++ ts0710->dlci[dlci].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++
++ } else {
++ TS0710_DEBUG("invalid dlci %d, sending DM\n", dlci);
++ send_dm(ts0710, dlci);
++ }
++
++ break;
++
++ case UA:
++ TS0710_DEBUG("UA packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[0].
++ open_wait);
++ } else if (ts0710->dlci[0].state == DISCONNECTING) {
++ ts0710_upon_disconnect();
++ } else {
++ TS0710_DEBUG
++ (" Something wrong receiving UA packet\n");
++ }
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming UA on channel %d\n", dlci);
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ ts0710->dlci[dlci].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ open_wait);
++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG
++ (" Something wrong receiving UA packet\n");
++ }
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case DM:
++ TS0710_DEBUG("DM packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ be_connecting = 1;
++ } else {
++ be_connecting = 0;
++ }
++ ts0710_upon_disconnect();
++ if (be_connecting) {
++ ts0710->dlci[0].state = REJECTED;
++ }
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming DM on channel %d\n", dlci);
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ ts0710->dlci[dlci].state = REJECTED;
++ } else {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case DISC:
++ TS0710_DEBUG("DISC packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ send_ua(ts0710, dlci);
++ TS0710_DEBUG("DISC, sending back UA\n");
++
++ ts0710_upon_disconnect();
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming DISC on channel %d\n", dlci);
++
++ send_ua(ts0710, dlci);
++ TS0710_DEBUG("DISC, sending back UA\n");
++
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case UIH:
++ TS0710_DEBUG("UIH packet received\n");
++
++ if ((dlci >= TS0710_MAX_CHN)) {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ send_dm(ts0710, dlci);
++ break;
++ }
++
++ if (GET_PF(short_pkt->h.control)) {
++ TS0710_LOG
++ ("MUX Error %s: UIH packet with P/F set, discard it!\n",
++ __FUNCTION__);
++ break;
++ }
++
++ if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ TS0710_LOG
++ ("MUX Error %s: DLCI %d not connected, discard it!\n",
++ __FUNCTION__, dlci);
++ send_dm(ts0710, dlci);
++ break;
++ }
++
++ if ((short_pkt->h.length.ea) == 0) {
++ TS0710_DEBUG("Long UIH packet received\n");
++ long_pkt = (long_frame *) data;
++ uih_len = GET_LONG_LENGTH(long_pkt->h.length);
++ uih_data_start = long_pkt->h.data;
++ TS0710_DEBUG("long packet length %d\n", uih_len);
++
++/*For BP UART problem
++ if (crc_check(data, LONG_CRC_CHECK, *(uih_data_start + uih_len)))
++ break;
++*/
++ } else {
++ TS0710_DEBUG("Short UIH pkt received\n");
++ uih_len = short_pkt->h.length.len;
++ uih_data_start = short_pkt->data;
++
++/*For BP UART problem
++ if (crc_check(data, SHORT_CRC_CHECK, *(uih_data_start + uih_len)))
++ break;
++*/
++ }
++
++ if (dlci == 0) {
++ TS0710_DEBUG("UIH on serv_channel 0\n");
++ process_mcc(data, len, ts0710,
++ !(short_pkt->h.length.ea));
++ } else if (valid_dlci(dlci)) {
++ /* do tty dispatch */
++ __u8 tag;
++ __u8 tty_idx;
++ struct tty_struct *tty;
++ __u8 queue_data;
++ __u8 post_recv;
++ __u8 flow_control;
++ mux_recv_struct *recv_info;
++ int recv_room;
++ mux_recv_packet *recv_packet, *recv_packet2;
++
++ TS0710_DEBUG("UIH on channel %d\n", dlci);
++
++ if (uih_len > ts0710->dlci[dlci].mtu) {
++ TS0710_PRINTK
++ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n",
++ dlci, uih_len, ts0710->dlci[dlci].mtu);
++ break;
++ }
++
++ tag = *uih_data_start;
++ uih_data_start++;
++ uih_len--;
++
++ if (!uih_len) {
++ break;
++ }
++
++ switch (tag) {
++ case CMDTAG:
++ tty_idx = dlci2tty[dlci].cmdtty;
++ TS0710_DEBUG("CMDTAG on DLCI:%d, /dev/mux%d\n",
++ dlci, tty_idx);
++ TS0710_DEBUGSTR(uih_data_start, uih_len);
++ if (!(iscmdtty[tty_idx])) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n",
++ __FUNCTION__, dlci, tty_idx);
++ }
++ break;
++ case DATATAG:
++ default:
++ tty_idx = dlci2tty[dlci].datatty;
++ TS0710_DEBUG
++ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
++ dlci, tty_idx);
++ if (iscmdtty[tty_idx]) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
++ __FUNCTION__, dlci, tty_idx);
++ }
++ break;
++ }
++ tty = mux_table[tty_idx];
++ if ((!mux_tty[tty_idx]) || (!tty)) {
++ TS0710_PRINTK
++ ("MUX: No application waiting for, discard it! /dev/mux%d\n",
++ tty_idx);
++ } else { /* Begin processing received data */
++ if ((!mux_recv_info_flags[tty_idx])
++ || (!mux_recv_info[tty_idx])) {
++ TS0710_PRINTK
++ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n",
++ tty_idx);
++ break;
++ }
++
++ recv_info = mux_recv_info[tty_idx];
++ if (recv_info->total > 8192) {
++ TS0710_PRINTK
++ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n",
++ tty_idx);
++ break;
++ }
++
++ queue_data = 0;
++ post_recv = 0;
++ flow_control = 0;
++ recv_room = 65535;
++ if (tty->receive_room)
++ recv_room = tty->receive_room;
++
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ queue_data = 1;
++ } else {
++ if (test_bit
++ (TTY_DONT_FLIP, &tty->flags)) {
++ queue_data = 1;
++ post_recv = 1;
++ } else if (recv_info->total) {
++ queue_data = 1;
++ post_recv = 1;
++ } else if (recv_room < uih_len) {
++ queue_data = 1;
++ flow_control = 1;
++ }
++
++ if ((recv_room -
++ (uih_len + recv_info->total)) <
++ ts0710->dlci[dlci].mtu) {
++ flow_control = 1;
++ }
++ }
++
++ if (!queue_data) {
++ /* Put received data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put received data into read buffer of /dev/mux%d",
++ tty_idx);
++
++#ifdef TS0710DEBUG
++ t = jiffies;
++#endif
++
++ (tty->ldisc.receive_buf) (tty,
++ uih_data_start,
++ NULL,
++ uih_len);
++
++#ifdef TS0710DEBUG
++ TS0710_DEBUG
++ ("tty->ldisc.receive_buf take ticks: %lu",
++ (jiffies - t));
++#endif
++
++ } else { /* Queue data */
++
++ TS0710_DEBUG
++ ("Put received data into recv queue of /dev/mux%d",
++ tty_idx);
++ if (recv_info->total) {
++ /* recv_info is already linked into mux_recv_queue */
++
++ recv_packet =
++ get_mux_recv_packet
++ (uih_len);
++ if (!recv_packet) {
++ TS0710_PRINTK
++ ("MUX %s: no memory\n",
++ __FUNCTION__);
++ break;
++ }
++
++ memcpy(recv_packet->data,
++ uih_data_start, uih_len);
++ recv_packet->length = uih_len;
++ recv_info->total += uih_len;
++ recv_packet->next = NULL;
++
++ if (!(recv_info->mux_packet)) {
++ recv_info->mux_packet =
++ recv_packet;
++ } else {
++ recv_packet2 =
++ recv_info->
++ mux_packet;
++ while (recv_packet2->
++ next) {
++ recv_packet2 =
++ recv_packet2->
++ next;
++ }
++ recv_packet2->next =
++ recv_packet;
++ } /* End if( !(recv_info->mux_packet) ) */
++ } else { /* recv_info->total == 0 */
++ if (uih_len >
++ TS0710MUX_RECV_BUF_SIZE) {
++ TS0710_PRINTK
++ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n",
++ tty_idx, uih_len);
++ uih_len =
++ TS0710MUX_RECV_BUF_SIZE;
++ }
++ memcpy(recv_info->data,
++ uih_data_start, uih_len);
++ recv_info->length = uih_len;
++ recv_info->total = uih_len;
++
++ add_post_recv_queue
++ (&mux_recv_queue,
++ recv_info);
++ } /* End recv_info->total == 0 */
++ } /* End Queue data */
++
++ if (flow_control) {
++ /* Do something for flow control */
++ ts0710_flow_off(tty, dlci, ts0710);
++ }
++
++ if (tty_idx ==
++ dlci2tty[TS0710MUX_GPRS1_DLCI].datatty) {
++ if (add_count
++ (TS0710MUX_GPRS1_RECV_COUNT_IDX,
++ uih_len) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2
++ [TS0710MUX_GPRS1_RECV_COUNT_IDX]
++ += uih_len;
++ }
++ } else if (tty_idx ==
++ dlci2tty[TS0710MUX_GPRS2_DLCI].
++ datatty) {
++ if (add_count
++ (TS0710MUX_GPRS2_RECV_COUNT_IDX,
++ uih_len) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2
++ [TS0710MUX_GPRS2_RECV_COUNT_IDX]
++ += uih_len;
++ }
++ }
++
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++ } /* End processing received data */
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ default:
++ TS0710_DEBUG("illegal packet\n");
++ break;
++ }
++ return 0;
++}
++
++/*
++int ts0710_send_data(ts0710_con *ts0710, __u8 dlci, __u8 *data, __u32 count)
++{
++ __u32 c, total = 0;
++ __u8 tag, first;
++
++ if( ts0710->dlci[0].state == FLOW_STOPPED ){
++ TS0710_DEBUG("Flow stopped on all channels, returning zero\n");
++*/
++/*
++ return -EFLOWSTOPPED;
++ } else if( ts0710->dlci[dlci].state == FLOW_STOPPED ){
++ TS0710_DEBUG("Flow stopped, returning zero\n");
++*/
++/*
++ return -EFLOWSTOPPED;
++ } else if( ts0710->dlci[dlci].state == CONNECTED ){
++
++ TS0710_DEBUG("trying to send %d bytes\n", count);
++ tag = *data;
++ first = 1;
++*/
++ /* The first byte is always a Cmd/Data tag */
++/*
++ while( count > 1 ){
++
++ c = min(count, ts0710->dlci[dlci].mtu);
++ if( queue_uih(data, c, ts0710, dlci) <= 0 ) {
++ break;
++ }
++
++ total += (c - 1);
++ data += (c - 1);
++ *data = tag;
++ count -= (c - 1);
++
++ if( first ) {
++ first = 0;
++ total++;
++ }
++ }
++ TS0710_DEBUG("sent %d bytes\n", total);
++ return total;
++ } else {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ return -EDISCONNECTED;
++ }
++}
++*/
++
++/* Close ts0710 channel */
++static void ts0710_close_channel(__u8 dlci)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int try;
++ unsigned long t;
++
++ TS0710_DEBUG("ts0710_disc_command on channel %d\n", dlci);
++
++ if ((ts0710->dlci[dlci].state == DISCONNECTED)
++ || (ts0710->dlci[dlci].state == REJECTED)) {
++ return;
++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) {
++ /* Reentry */
++ return;
++ } else {
++ ts0710->dlci[dlci].state = DISCONNECTING;
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_disc(ts0710, dlci);
++ interruptible_sleep_on_timeout(&ts0710->dlci[dlci].
++ close_wait,
++ TS0710MUX_TIME_OUT);
++ if (ts0710->dlci[dlci].state == DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI %d Send DISC got signal!\n",
++ dlci);
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI %d Send DISC timeout!\n", dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[dlci].state != DISCONNECTED) {
++ if (dlci == 0) { /* Control Channel */
++ ts0710_upon_disconnect();
++ } else { /* Other Channel */
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ close_wait);
++ ts0710_reset_dlci(dlci);
++ }
++ }
++ }
++}
++
++int ts0710_open_channel(__u8 dlci)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int try;
++ int retval;
++ unsigned long t;
++
++ retval = -ENODEV;
++ if (dlci == 0) { // control channel
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state == FLOW_STOPPED)) {
++ return 0;
++ } else if (ts0710->dlci[0].state == CONNECTING) {
++ /* Reentry */
++ TS0710_PRINTK
++ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n",
++ current->pid, current->comm);
++ try = 11;
++ while (try--) {
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->dlci[0].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[0].state == REJECTED) {
++ retval = -EREJECTED;
++ break;
++ } else if (ts0710->dlci[0].state ==
++ DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting timeout!\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[0].state == CONNECTING) {
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = DISCONNECTED;
++ }
++ } else if ((ts0710->dlci[0].state != DISCONNECTED)
++ && (ts0710->dlci[0].state != REJECTED)) {
++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ return retval;
++ } else {
++ ts0710->initiator = 1;
++ ts0710->dlci[0].state = CONNECTING;
++ ts0710->dlci[0].initiator = 1;
++ try = 10;
++ while (try--) {
++ t = jiffies;
++ send_sabm(ts0710, 0);
++ interruptible_sleep_on_timeout(&ts0710->dlci[0].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[0].state == REJECTED) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got rejected!\n",
++ dlci);
++ retval = -EREJECTED;
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[0].open_wait);
++ }
++ } else { // other channel
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return retval;
++ } else if ((ts0710->dlci[dlci].state == CONNECTED)
++ || (ts0710->dlci[dlci].state == FLOW_STOPPED)) {
++ return 0;
++ } else if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ /* Reentry */
++ try = 8;
++ while (try--) {
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci[dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[dlci].state == CONNECTED)
++ || (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[dlci].state == REJECTED) {
++ retval = -EREJECTED;
++ break;
++ } else if (ts0710->dlci[dlci].state ==
++ DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting timeout!\n",
++ dlci);
++ continue;
++ } else
++ if ((ts0710->dlci[dlci].state ==
++ NEGOTIATING)
++ || (ts0710->dlci[dlci].state ==
++ CONNECTING)) {
++ continue;
++ }
++ }
++
++ if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ } else if ((ts0710->dlci[dlci].state != DISCONNECTED)
++ && (ts0710->dlci[dlci].state != REJECTED)) {
++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ return retval;
++ } else {
++ ts0710->dlci[dlci].state = NEGOTIATING;
++ ts0710->dlci[dlci].initiator = 1;
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_pn_msg(ts0710, 7, ts0710->dlci[dlci].mtu,
++ 0, 0, dlci, 1);
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci[dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send pn_msg got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send pn_msg timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_sabm(ts0710, dlci);
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci
++ [dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[dlci].state ==
++ CONNECTED)
++ || (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[dlci].state ==
++ REJECTED) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got rejected!\n",
++ dlci);
++ retval = -EREJECTED;
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >=
++ TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++ }
++
++ if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ }
++ }
++ return retval;
++}
++
++static int ts0710_exec_test_cmd(void)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 *f_buf; /* Frame buffer */
++ __u8 *d_buf; /* Data buffer */
++ int retval = -EFAULT;
++ int j;
++ unsigned long t;
++
++ if (ts0710->be_testing) {
++ /* Reentry */
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->test_wait,
++ 3 * TS0710MUX_TIME_OUT);
++ if (ts0710->be_testing == 0) {
++ if (ts0710->test_errs == 0) {
++ retval = 0;
++ } else {
++ retval = -EFAULT;
++ }
++ } else if (signal_pending(current)) {
++ TS0710_DEBUG
++ ("Wait for Test_cmd response got signal!\n");
++ retval = -EAGAIN;
++ } else if ((jiffies - t) >= 3 * TS0710MUX_TIME_OUT) {
++ TS0710_DEBUG("Wait for Test_cmd response timeout!\n");
++ retval = -EFAULT;
++ }
++ } else {
++ ts0710->be_testing = 1; /* Set the flag */
++
++ f_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL);
++ d_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL);
++ if ((!f_buf) || (!d_buf)) {
++ if (f_buf) {
++ kfree(f_buf);
++ }
++ if (d_buf) {
++ kfree(d_buf);
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ ts0710->test_errs = TEST_PATTERN_SIZE;
++ wake_up_interruptible(&ts0710->test_wait);
++ return -ENOMEM;
++ }
++
++ for (j = 0; j < TEST_PATTERN_SIZE; j++) {
++ d_buf[j] = j & 0xFF;
++ }
++
++ t = jiffies;
++ ts0710_test_msg(ts0710, d_buf, TEST_PATTERN_SIZE, MCC_CMD,
++ f_buf);
++ interruptible_sleep_on_timeout(&ts0710->test_wait,
++ 2 * TS0710MUX_TIME_OUT);
++ if (ts0710->be_testing == 0) {
++ if (ts0710->test_errs == 0) {
++ retval = 0;
++ } else {
++ retval = -EFAULT;
++ }
++ } else if (signal_pending(current)) {
++ TS0710_DEBUG("Send Test_cmd got signal!\n");
++ retval = -EAGAIN;
++ } else if ((jiffies - t) >= 2 * TS0710MUX_TIME_OUT) {
++ TS0710_DEBUG("Send Test_cmd timeout!\n");
++ ts0710->test_errs = TEST_PATTERN_SIZE;
++ retval = -EFAULT;
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ wake_up_interruptible(&ts0710->test_wait);
++
++ /* Release buffer */
++ if (f_buf) {
++ kfree(f_buf);
++ }
++ if (d_buf) {
++ kfree(d_buf);
++ }
++ }
++
++ return retval;
++}
++
++static void mux_sched_send(void)
++{
++
++#ifdef USB_FOR_MUX
++ schedule_work(&send_tqueue);
++#else
++ if (!tq_serial_for_mux) {
++ TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n",
++ __FUNCTION__);
++ return;
++ }
++ schedule_work(&send_tqueue);
++ mark_bh(SERIAL_BH);
++#endif
++
++}
++
++/****************************
++ * TTY driver routines
++*****************************/
++
++static void mux_close(struct tty_struct *tty, struct file *filp)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ __u8 cmdtty;
++ __u8 datatty;
++
++ UNUSED_PARAM(filp);
++
++ if (!tty) {
++ return;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++ if (mux_tty[line] > 0)
++ mux_tty[line]--;
++
++ dlci = tty2dlci[line];
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) {
++ if (dlci == 1) {
++ ts0710_close_channel(0);
++ TS0710_PRINTK
++ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n");
++ TS0710_SIG2APLOGD();
++ }
++ ts0710_close_channel(dlci);
++ }
++
++ if (mux_tty[line] == 0) {
++ if ((mux_send_info_flags[line])
++ && (mux_send_info[line])
++ /*&& (mux_send_info[line]->filled == 0) */
++ ) {
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++ }
++
++ if ((mux_recv_info_flags[line])
++ && (mux_recv_info[line])
++ && (mux_recv_info[line]->total == 0)) {
++ mux_recv_info_flags[line] = 0;
++ free_mux_recv_struct(mux_recv_info[line]);
++ mux_recv_info[line] = 0;
++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line);
++ }
++
++ ts0710_flow_on(dlci, ts0710);
++ schedule_work(&post_recv_tqueue);
++
++ wake_up_interruptible(&tty->read_wait);
++ wake_up_interruptible(&tty->write_wait);
++ tty->packet = 0;
++ }
++}
++
++static void mux_throttle(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ int i;
++ __u8 dlci;
++
++ if (!tty) {
++ return;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__,
++ line);
++
++ dlci = tty2dlci[line];
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (ts0710->dlci[dlci].flow_control) {
++ return;
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg
++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX Send Flow off on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 1;
++ break;
++ }
++ }
++}
++
++static void mux_unthrottle(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ mux_recv_struct *recv_info;
++
++ if (!tty) {
++ return;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ if ((!mux_recv_info_flags[line]) || (!mux_recv_info[line])) {
++ return;
++ }
++
++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__,
++ line);
++
++ recv_info = mux_recv_info[line];
++ dlci = tty2dlci[line];
++
++ if (recv_info->total) {
++ recv_info->post_unthrottle = 1;
++ schedule_work(&post_recv_tqueue);
++ } else {
++ ts0710_flow_on(dlci, ts0710);
++ }
++}
++
++static int mux_chars_in_buffer(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int retval;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++
++ retval = TS0710MUX_MAX_CHARS_IN_BUF;
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG
++ ("Flow stopped on all channels, returning MAX chars in buffer\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning MAX chars in buffer\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ goto out;
++ }
++
++ if (!(mux_send_info_flags[line])) {
++ goto out;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ goto out;
++ }
++ if (send_info->filled) {
++ goto out;
++ }
++
++ retval = 0;
++
++ out:
++ return retval;
++}
++
++static int mux_chars_in_serial_buffer(struct tty_struct *tty)
++{
++ UNUSED_PARAM(tty);
++
++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
++ TS0710_PRINTK
++ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n",
++ __FUNCTION__);
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK
++ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n",
++ __FUNCTION__);
++ TS0710_SIG2APLOGD();
++#endif
++
++ return 0;
++ }
++ return COMM_FOR_MUX_DRIVER->chars_in_buffer(COMM_FOR_MUX_TTY);
++}
++
++static int mux_write(struct tty_struct *tty,
++ const unsigned char *buf, int count)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++ __u8 *d_buf;
++ __u16 c;
++ __u8 post_recv;
++
++ if (count <= 0) {
++ return 0;
++ }
++
++ if (!tty) {
++ return 0;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS))
++ return -ENODEV;
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG
++ ("Flow stopped on all channels, returning zero /dev/mux%d\n",
++ line);
++ return 0;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning zero /dev/mux%d\n", line);
++ return 0;
++ } else if (ts0710->dlci[dlci].state == CONNECTED) {
++
++ if (!(mux_send_info_flags[line])) {
++ TS0710_PRINTK
++ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n",
++ line);
++ return -ENODEV;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ TS0710_PRINTK
++ ("MUX Error: mux_write: mux_send_info[%d] == 0\n",
++ line);
++ return -ENODEV;
++ }
++
++ c = min(count, (ts0710->dlci[dlci].mtu - 1));
++ if (c <= 0) {
++ return 0;
++ }
++
++ if (test_and_set_bit(BUF_BUSY, &send_info->flags))
++ return 0;
++
++ if (send_info->filled) {
++ clear_bit(BUF_BUSY, &send_info->flags);
++ return 0;
++ }
++
++ d_buf = ((__u8 *) send_info->buf) + TS0710MUX_SEND_BUF_OFFSET;
++ memcpy(&d_buf[1], buf, c);
++
++ TS0710_DEBUG("Prepare to send %d bytes from /dev/mux%d", c,
++ line);
++ if (iscmdtty[line]) {
++ TS0710_DEBUGSTR(&d_buf[1], c);
++ TS0710_DEBUG("CMDTAG");
++ d_buf[0] = CMDTAG;
++ } else {
++ TS0710_DEBUG("DATATAG");
++ d_buf[0] = DATATAG;
++ }
++
++ TS0710_DEBUGHEX(d_buf, c + 1);
++
++ send_info->frame = d_buf;
++ queue_uih(send_info, c + 1, ts0710, dlci);
++ send_info->filled = 1;
++ clear_bit(BUF_BUSY, &send_info->flags);
++
++ post_recv = 0;
++ if (dlci == TS0710MUX_GPRS1_DLCI) {
++ if (add_count
++ (TS0710MUX_GPRS1_SEND_COUNT_IDX, c) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2[TS0710MUX_GPRS1_SEND_COUNT_IDX]
++ += c;
++ }
++ } else if (dlci == TS0710MUX_GPRS2_DLCI) {
++ if (add_count
++ (TS0710MUX_GPRS2_SEND_COUNT_IDX, c) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2[TS0710MUX_GPRS2_SEND_COUNT_IDX]
++ += c;
++ }
++ }
++
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++
++ if (mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY) == 0) {
++ /* Sending bottom half should be
++ run after return from this function */
++ mux_sched_send();
++ }
++ return c;
++ } else {
++ TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci);
++ return -EDISCONNECTED;
++ }
++}
++
++static int mux_write_room(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int retval;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++
++ retval = 0;
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on all channels, returning ZERO\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning ZERO\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ goto out;
++ }
++
++ if (!(mux_send_info_flags[line])) {
++ goto out;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ goto out;
++ }
++ if (send_info->filled) {
++ goto out;
++ }
++
++ retval = ts0710->dlci[dlci].mtu - 1;
++
++ out:
++ return retval;
++}
++
++static int mux_ioctl(struct tty_struct *tty, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(arg);
++
++ if (!tty) {
++ return -EIO;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return -ENODEV;
++ }
++
++ dlci = tty2dlci[line];
++ switch (cmd) {
++ case TS0710MUX_IO_MSC_HANGUP:
++ if (ts0710_msc_msg(ts0710, EA | RTR | DV, MCC_CMD, dlci) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_TEST_CMD:
++ return ts0710_exec_test_cmd();
++/*
++ case TS0710MUX_IO_DLCI_FC_ON:
++ if( line == 0 ) {
++ break;
++ }
++ if( ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_DLCI_FC_OFF:
++ if( line == 0 ) {
++ break;
++ }
++ if( ts0710_msc_msg(ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_FC_ON:
++ if( line != 0 ) {
++ break;
++ }
++ if( ts0710_fcon_msg(ts0710, MCC_CMD) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_FC_OFF:
++ if( line != 0 ) {
++ break;
++ }
++ if( ts0710_fcoff_msg(ts0710, MCC_CMD) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++*/
++ default:
++ break;
++ }
++ return -ENOIOCTLCMD;
++}
++
++static void mux_flush_buffer(struct tty_struct *tty)
++{
++ int line;
++
++ if (!tty) {
++ return;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line);
++
++ if ((mux_send_info_flags[line])
++ && (mux_send_info[line])
++ && (mux_send_info[line]->filled)) {
++
++ mux_send_info[line]->filled = 0;
++ }
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
++ tty->ldisc.write_wakeup) {
++ (tty->ldisc.write_wakeup) (tty);
++ }
++
++/*
++ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) {
++ TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
++ TS0710_SIG2APLOGD();
++#endif
++
++ return;
++ }
++ return COMM_FOR_MUX_DRIVER->flush_buffer(COMM_FOR_MUX_TTY);
++*/
++}
++
++static int mux_open(struct tty_struct *tty, struct file *filp)
++{
++ int retval;
++ int line;
++ __u8 dlci;
++ __u8 cmdtty;
++ __u8 datatty;
++ mux_send_struct *send_info;
++ mux_recv_struct *recv_info;
++
++ UNUSED_PARAM(filp);
++
++ retval = -ENODEV;
++ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) {
++
++#ifdef USB_FOR_MUX
++ TS0710_PRINTK("MUX: please install and open IPC-USB first\n");
++#else
++ TS0710_PRINTK("MUX: please install and open ttyS0 first\n");
++#endif
++
++ goto out;
++ }
++
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++#ifdef TS0710SERVER
++ /* do nothing as a server */
++ mux_tty[line]++;
++ retval = 0;
++#else
++ mux_tty[line]++;
++ dlci = tty2dlci[line];
++
++/* if( dlci == 1 ) { */
++ /* Open server channel 0 first */
++ if ((retval = ts0710_open_channel(0)) != 0) {
++ TS0710_PRINTK("MUX: Can't connect server channel 0!\n");
++ ts0710_init();
++
++ mux_tty[line]--;
++ goto out;
++ }
++/* } */
++
++ /* Allocate memory first. As soon as connection has been established, MUX may receive */
++ if (mux_send_info_flags[line] == 0) {
++ send_info =
++ (mux_send_struct *) kmalloc(sizeof(mux_send_struct),
++ GFP_KERNEL);
++ if (!send_info) {
++ retval = -ENOMEM;
++
++ mux_tty[line]--;
++ goto out;
++ }
++ send_info->length = 0;
++ send_info->flags = 0;
++ send_info->filled = 0;
++ mux_send_info[line] = send_info;
++ mux_send_info_flags[line] = 1;
++ TS0710_DEBUG("Allocate mux_send_info for /dev/mux%d", line);
++ }
++
++ if (mux_recv_info_flags[line] == 0) {
++ recv_info =
++ (mux_recv_struct *) kmalloc(sizeof(mux_recv_struct),
++ GFP_KERNEL);
++ if (!recv_info) {
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++ retval = -ENOMEM;
++
++ mux_tty[line]--;
++ goto out;
++ }
++ recv_info->length = 0;
++ recv_info->total = 0;
++ recv_info->mux_packet = 0;
++ recv_info->next = 0;
++ recv_info->no_tty = line;
++ recv_info->post_unthrottle = 0;
++ mux_recv_info[line] = recv_info;
++ mux_recv_info_flags[line] = 1;
++ TS0710_DEBUG("Allocate mux_recv_info for /dev/mux%d", line);
++ }
++
++ /* Now establish DLCI connection */
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) {
++ if ((retval = ts0710_open_channel(dlci)) != 0) {
++ TS0710_PRINTK("MUX: Can't connected channel %d!\n",
++ dlci);
++ ts0710_reset_dlci(dlci);
++
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++
++ mux_recv_info_flags[line] = 0;
++ free_mux_recv_struct(mux_recv_info[line]);
++ mux_recv_info[line] = 0;
++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line);
++
++ mux_tty[line]--;
++ goto out;
++ }
++ }
++
++ retval = 0;
++#endif
++ out:
++ return retval;
++}
++
++/* mux dispatcher, call from serial.c receiver_chars() */
++void mux_dispatcher(struct tty_struct *tty)
++{
++ UNUSED_PARAM(tty);
++
++ schedule_work(&receive_tqueue);
++}
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++static int send_ack(ts0710_con * ts0710, __u8 seq_num, __u8 bp_seq1,
++ __u8 bp_seq2)
++#else
++static int send_ack(ts0710_con * ts0710, __u8 seq_num)
++#endif
++{
++ __u8 buf[20];
++ short_frame *ack;
++
++#ifdef TS0710SEQ2
++ static __u16 ack_seq = 0;
++#endif
++
++ ack = (short_frame *) (buf + 1);
++ ack->h.addr.ea = 1;
++ ack->h.addr.cr = ((ts0710->initiator) & 0x1);
++ ack->h.addr.d = 0;
++ ack->h.addr.server_chn = 0;
++ ack->h.control = ACK;
++ ack->h.length.ea = 1;
++
++#ifdef TS0710SEQ2
++ ack->h.length.len = 5;
++ ack->data[0] = seq_num;
++ ack->data[1] = bp_seq1;
++ ack->data[2] = bp_seq2;
++ ack->data[3] = (ack_seq & 0xFF);
++ ack->data[4] = (ack_seq >> 8) & 0xFF;
++ ack_seq++;
++ ack->data[5] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK);
++#else
++ ack->h.length.len = 1;
++ ack->data[0] = seq_num;
++ ack->data[1] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK);
++#endif
++
++ return basic_write(ts0710, buf,
++ (sizeof(short_frame) + FCS_SIZE +
++ ack->h.length.len));
++}
++
++/*For BP UART problem End*/
++
++static void receive_worker(void *private_)
++{
++ struct tty_struct *tty = COMM_FOR_MUX_TTY;
++ int i, count;
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++ static unsigned char *tbuf_ptr = &tbuf[0];
++ static unsigned char *start_flag = 0;
++ unsigned char *search, *to, *from;
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ static int framelen = -1;
++
++ /*For BP UART problem Begin */
++ static __u8 expect_seq = 0;
++ __u32 crc_error;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ /*For BP UART problem End */
++
++ UNUSED_PARAM(private_);
++
++ if (!tty)
++ return;
++
++#ifdef USB_FOR_MUX
++ TS0710_DEBUG("Receive following bytes from IPC-USB");
++#else
++ TS0710_DEBUG("Receive following bytes from UART");
++#endif
++
++ TS0710_DEBUGHEX(cp, count);
++
++ if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
++ TS0710_PRINTK
++ ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
++ count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
++ }
++
++ count = tty_buffer_request_room(tty, count);
++
++ for (i = 0; i < count; i++)
++ tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL);
++
++ tbuf_ptr += count;
++ search = &tbuf[0];
++
++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
++ schedule_work(&receive_tqueue);
++ return;
++ }
++
++ if ((start_flag != 0) && (framelen != -1)) {
++ if ((tbuf_ptr - start_flag) < framelen) {
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++ return;
++ }
++ }
++
++ while (1) {
++ if (start_flag == 0) { /* Frame Start Flag not found */
++ framelen = -1;
++ while (search < tbuf_ptr) {
++ if (*search == TS0710_BASIC_FLAG) {
++ start_flag = search;
++ break;
++ }
++#ifdef TS0710LOG
++ else {
++ TS0710_LOG(">S %02x %c\n", *search,
++ *search);
++ }
++#endif
++
++ search++;
++ }
++
++ if (start_flag == 0) {
++ tbuf_ptr = &tbuf[0];
++ break;
++ }
++ } else { /* Frame Start Flag found */
++ /* 1 start flag + 1 address + 1 control + 1 or 2 length + lengths data + 1 FCS + 1 end flag */
++ /* For BP UART problem 1 start flag + 1 seq_num + 1 address + ...... */
++ /*if( (framelen == -1) && ((tbuf_ptr - start_flag) > TS0710_MAX_HDR_SIZE) ) */
++ if ((framelen == -1) && ((tbuf_ptr - start_flag) > (TS0710_MAX_HDR_SIZE + SEQ_FIELD_SIZE))) { /*For BP UART problem */
++ /*short_pkt = (short_frame *) (start_flag + 1); */
++ short_pkt = (short_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ if (short_pkt->h.length.ea == 1) { /* short frame */
++ /*framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1; */
++ framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1 + SEQ_FIELD_SIZE; /*For BP UART problem */
++ } else { /* long frame */
++ /*long_pkt = (long_frame *) (start_flag + 1); */
++ long_pkt = (long_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ /*framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH( long_pkt->h.length ) + 2; */
++ framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH(long_pkt->h.length) + 2 + SEQ_FIELD_SIZE; /*For BP UART problem */
++ }
++
++ /*if( framelen > TS0710MUX_MAX_TOTAL_FRAME_SIZE ) { */
++ if (framelen > (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)) { /*For BP UART problem */
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ (tbuf_ptr -
++ start_flag));
++ TS0710_PRINTK
++ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n",
++ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/
++ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */
++ search = start_flag + 1;
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ }
++ }
++
++ if ((framelen != -1)
++ && ((tbuf_ptr - start_flag) >= framelen)) {
++ if (*(start_flag + framelen - 1) == TS0710_BASIC_FLAG) { /* OK, We got one frame */
++
++ /*For BP UART problem Begin */
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++
++ short_pkt =
++ (short_frame *) (start_flag +
++ ADDRESS_FIELD_OFFSET);
++ if ((short_pkt->h.length.ea) == 0) {
++ long_pkt =
++ (long_frame *) (start_flag +
++ ADDRESS_FIELD_OFFSET);
++ uih_len =
++ GET_LONG_LENGTH(long_pkt->h.
++ length);
++ uih_data_start =
++ long_pkt->h.data;
++
++ crc_error =
++ crc_check((__u8
++ *) (start_flag +
++ SLIDE_BP_SEQ_OFFSET),
++ LONG_CRC_CHECK +
++ 1,
++ *(uih_data_start +
++ uih_len));
++ } else {
++ uih_len =
++ short_pkt->h.length.len;
++ uih_data_start =
++ short_pkt->data;
++
++ crc_error =
++ crc_check((__u8
++ *) (start_flag +
++ SLIDE_BP_SEQ_OFFSET),
++ SHORT_CRC_CHECK +
++ 1,
++ *(uih_data_start +
++ uih_len));
++ }
++
++ if (!crc_error) {
++ if (expect_seq ==
++ *(start_flag +
++ SLIDE_BP_SEQ_OFFSET)) {
++ expect_seq++;
++ if (expect_seq >= 4) {
++ expect_seq = 0;
++ }
++#ifdef TS0710SEQ2
++ send_ack
++ (&ts0710_connection,
++ expect_seq,
++ *(start_flag +
++ FIRST_BP_SEQ_OFFSET),
++ *(start_flag +
++ SECOND_BP_SEQ_OFFSET));
++#else
++ send_ack
++ (&ts0710_connection,
++ expect_seq);
++#endif
++
++ ts0710_recv_data
++ (&ts0710_connection,
++ start_flag +
++ ADDRESS_FIELD_OFFSET,
++ framelen - 2 -
++ SEQ_FIELD_SIZE);
++ } else {
++
++#ifdef TS0710DEBUG
++ if (*
++ (start_flag +
++ SLIDE_BP_SEQ_OFFSET)
++ != 0x9F) {
++#endif
++
++ TS0710_LOG
++ ("MUX sequence number %d is not expected %d, discard data!\n",
++ *
++ (start_flag
++ +
++ SLIDE_BP_SEQ_OFFSET),
++ expect_seq);
++
++#ifdef TS0710SEQ2
++ send_ack
++ (&ts0710_connection,
++ expect_seq,
++ *
++ (start_flag
++ +
++ FIRST_BP_SEQ_OFFSET),
++ *
++ (start_flag
++ +
++ SECOND_BP_SEQ_OFFSET));
++#else
++ send_ack
++ (&ts0710_connection,
++ expect_seq);
++#endif
++
++#ifdef TS0710DEBUG
++ } else {
++ *(uih_data_start
++ + uih_len) =
++ 0;
++ TS0710_PRINTK
++ ("MUX bp log: %s\n",
++ uih_data_start);
++ }
++#endif
++
++ }
++ } else { /* crc_error */
++ search = start_flag + 1;
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ } /*End if(!crc_error) */
++
++ /*For BP UART problem End */
++
++/*For BP UART problem
++ TS0710_LOGSTR_FRAME(0, start_flag, framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++ ts0710_recv_data(&ts0710_connection, start_flag + 1, framelen - 2);
++*/
++ search = start_flag + framelen;
++ } else {
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++ TS0710_PRINTK
++ ("MUX: Lost synchronization!\n");
++ search = start_flag + 1;
++ }
++
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ }
++
++ if (start_flag != &tbuf[0]) {
++ to = tbuf;
++ from = start_flag;
++ count = tbuf_ptr - start_flag;
++ while (count--) {
++ *to++ = *from++;
++ }
++
++ tbuf_ptr -= (start_flag - tbuf);
++ start_flag = tbuf;
++ }
++ break;
++ } /* End Frame Start Flag found */
++ } /* End while(1) */
++
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++}
++
++static void post_recv_worker(void *private_)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int tty_idx;
++ struct tty_struct *tty;
++ __u8 post_recv;
++ __u8 flow_control;
++ __u8 dlci;
++ mux_recv_struct *recv_info, *recv_info2, *post_recv_q;
++ int recv_room;
++ mux_recv_packet *recv_packet, *recv_packet2;
++ __u8 j;
++
++ UNUSED_PARAM(private_);
++
++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
++ schedule_work(&post_recv_tqueue);
++ return;
++ }
++
++ TS0710_DEBUG("Enter into post_recv_worker");
++
++ post_recv = 0;
++ if (!mux_recv_queue) {
++ goto out;
++ }
++
++ post_recv_q = NULL;
++ recv_info2 = mux_recv_queue;
++ while ((recv_info = recv_info2)) {
++ recv_info2 = recv_info->next;
++
++ if (!(recv_info->total)) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n",
++ __FUNCTION__);
++ continue;
++ }
++
++ tty_idx = recv_info->no_tty;
++ dlci = tty2dlci[tty_idx];
++ tty = mux_table[tty_idx];
++ if ((!mux_tty[tty_idx]) || (!tty)) {
++ TS0710_PRINTK
++ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n",
++ tty_idx);
++ mux_recv_info_flags[tty_idx] = 0;
++ free_mux_recv_struct(mux_recv_info[tty_idx]);
++ mux_recv_info[tty_idx] = 0;
++ ts0710_flow_on(dlci, ts0710);
++ continue;
++ }
++
++ TS0710_DEBUG("/dev/mux%d recv_info->total is: %d", tty_idx,
++ recv_info->total);
++
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ add_post_recv_queue(&post_recv_q, recv_info);
++ continue;
++ } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ post_recv = 1;
++ add_post_recv_queue(&post_recv_q, recv_info);
++ continue;
++ }
++
++ flow_control = 0;
++ recv_packet2 = recv_info->mux_packet;
++ while (recv_info->total) {
++ recv_room = 65535;
++ if (tty->receive_room)
++ recv_room = tty->receive_room;
++
++ if (recv_info->length) {
++ if (recv_room < recv_info->length) {
++ flow_control = 1;
++ break;
++ }
++
++ /* Put queued data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put queued recv data into read buffer of /dev/mux%d",
++ tty_idx);
++ TS0710_DEBUGHEX(recv_info->data,
++ recv_info->length);
++ (tty->ldisc.receive_buf) (tty, recv_info->data,
++ NULL,
++ recv_info->length);
++ recv_info->total -= recv_info->length;
++ recv_info->length = 0;
++ } else { /* recv_info->length == 0 */
++ if ((recv_packet = recv_packet2)) {
++ recv_packet2 = recv_packet->next;
++
++ if (recv_room < recv_packet->length) {
++ flow_control = 1;
++ recv_info->mux_packet =
++ recv_packet;
++ break;
++ }
++
++ /* Put queued data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put queued recv data into read buffer of /dev/mux%d",
++ tty_idx);
++ TS0710_DEBUGHEX(recv_packet->data,
++ recv_packet->length);
++ (tty->ldisc.receive_buf) (tty,
++ recv_packet->
++ data, NULL,
++ recv_packet->
++ length);
++ recv_info->total -= recv_packet->length;
++ free_mux_recv_packet(recv_packet);
++ } else {
++ TS0710_PRINTK
++ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n",
++ __FUNCTION__, recv_info->total);
++ }
++ } /* End recv_info->length == 0 */
++ } /* End while( recv_info->total ) */
++
++ if (!(recv_info->total)) {
++ /* Important clear */
++ recv_info->mux_packet = 0;
++
++ if (recv_info->post_unthrottle) {
++ /* Do something for post_unthrottle */
++ ts0710_flow_on(dlci, ts0710);
++ recv_info->post_unthrottle = 0;
++ }
++ } else {
++ add_post_recv_queue(&post_recv_q, recv_info);
++
++ if (flow_control) {
++ /* Do something for flow control */
++ if (recv_info->post_unthrottle) {
++ set_bit(TTY_THROTTLED, &tty->flags);
++ recv_info->post_unthrottle = 0;
++ } else {
++ ts0710_flow_off(tty, dlci, ts0710);
++ }
++ } /* End if( flow_control ) */
++ }
++ } /* End while( (recv_info = recv_info2) ) */
++
++ mux_recv_queue = post_recv_q;
++
++ out:
++ if (post_recv_count_flag) {
++ post_recv_count_flag = 0;
++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) {
++ if (mux_data_count2[j] > 0) {
++ if (add_count(j, mux_data_count2[j]) == 0) {
++ mux_data_count2[j] = 0;
++ } else {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ }
++ }
++ } /* End for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) */
++ }
++ /* End if( post_recv_count_flag ) */
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++}
++
++/* mux sender, call from serial.c transmit_chars() */
++void mux_sender(void)
++{
++ mux_send_struct *send_info;
++ int chars;
++ __u8 idx;
++
++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY);
++ if (!chars) {
++ /* chars == 0 */
++ TS0710_LOG("<[]\n");
++ mux_sched_send();
++ return;
++ }
++
++ idx = mux_send_info_idx;
++ if ((idx < NR_MUXS) && (mux_send_info_flags[idx])) {
++ send_info = mux_send_info[idx];
++ if ((send_info)
++ && (send_info->filled)
++ && (send_info->length <=
++ (TS0710MUX_SERIAL_BUF_SIZE - chars))) {
++
++ mux_sched_send();
++ }
++ }
++}
++
++static void send_worker(void *private_)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 j;
++ mux_send_struct *send_info;
++ int chars;
++ struct tty_struct *tty;
++ __u8 dlci;
++
++ UNUSED_PARAM(private_);
++
++ TS0710_DEBUG("Enter into send_worker");
++
++ mux_send_info_idx = NR_MUXS;
++
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on all channels\n");
++ return;
++ }
++
++ for (j = 0; j < NR_MUXS; j++) {
++
++ if (!(mux_send_info_flags[j])) {
++ continue;
++ }
++
++ send_info = mux_send_info[j];
++ if (!send_info) {
++ continue;
++ }
++
++ if (!(send_info->filled)) {
++ continue;
++ }
++
++ dlci = tty2dlci[j];
++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ send_info->filled = 0;
++ continue;
++ }
++
++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY);
++ if (send_info->length <= (TS0710MUX_SERIAL_BUF_SIZE - chars)) {
++ TS0710_DEBUG("Send queued UIH for /dev/mux%d", j);
++ basic_write(ts0710, (__u8 *) send_info->frame,
++ send_info->length);
++ send_info->length = 0;
++ send_info->filled = 0;
++ } else {
++ mux_send_info_idx = j;
++ break;
++ }
++ } /* End for() loop */
++
++ /* Queue UIH data to be transmitted */
++ for (j = 0; j < NR_MUXS; j++) {
++
++ if (!(mux_send_info_flags[j])) {
++ continue;
++ }
++
++ send_info = mux_send_info[j];
++ if (!send_info) {
++ continue;
++ }
++
++ if (send_info->filled) {
++ continue;
++ }
++
++ /* Now queue UIH data to send_info->buf */
++
++ if (!mux_tty[j]) {
++ continue;
++ }
++
++ tty = mux_table[j];
++ if (!tty) {
++ continue;
++ }
++
++ dlci = tty2dlci[j];
++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ continue;
++ }
++
++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP))
++ && tty->ldisc.write_wakeup) {
++ (tty->ldisc.write_wakeup) (tty);
++ }
++ wake_up_interruptible(&tty->write_wait);
++
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++
++ if (send_info->filled) {
++ if (j < mux_send_info_idx) {
++ mux_send_info_idx = j;
++ }
++ }
++ } /* End for() loop */
++}
++
++static int get_count(__u8 idx)
++{
++ int ret;
++
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++
++ down(&mux_data_count_mutex[idx]);
++ ret = mux_data_count[idx];
++ up(&mux_data_count_mutex[idx]);
++
++ return ret;
++}
++
++static int set_count(__u8 idx, int count)
++{
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++ if (count < 0) {
++ TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count);
++ return -1;
++ }
++
++ down(&mux_data_count_mutex[idx]);
++ mux_data_count[idx] = count;
++ up(&mux_data_count_mutex[idx]);
++
++ return 0;
++}
++
++static int add_count(__u8 idx, int count)
++{
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++ if (count <= 0) {
++ TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count);
++ return -1;
++ }
++
++ if (down_trylock(&mux_data_count_mutex[idx]))
++ return -1;
++ mux_data_count[idx] += count;
++ up(&mux_data_count_mutex[idx]);
++
++ return 0;
++}
++
++ssize_t file_proc_read(struct file * file, char *buf, size_t size,
++ loff_t * ppos)
++{
++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX];
++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(size);
++ UNUSED_PARAM(ppos);
++
++ gprsData[0].recvBytes = get_count(TS0710MUX_GPRS1_RECV_COUNT_IDX);
++ gprsData[0].sentBytes = get_count(TS0710MUX_GPRS1_SEND_COUNT_IDX);
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes =
++ get_count(TS0710MUX_GPRS2_RECV_COUNT_IDX);
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes =
++ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX);
++
++ copy_to_user(buf, gprsData, bufLen);
++
++ return bufLen;
++}
++
++ssize_t file_proc_write(struct file * file, const char *buf, size_t count,
++ loff_t * ppos)
++{
++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX];
++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(count);
++ UNUSED_PARAM(ppos);
++
++ memset(gprsData, 0, bufLen);
++
++ copy_from_user(gprsData, buf, bufLen);
++
++ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes);
++ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes);
++ set_count(TS0710MUX_GPRS2_RECV_COUNT_IDX,
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes);
++ set_count(TS0710MUX_GPRS2_SEND_COUNT_IDX,
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes);
++
++ return bufLen;
++}
++
++static void gprs_proc_init(void)
++{
++ gprs_proc_file =
++ create_proc_entry("gprsbytes", S_IRUSR | S_IWUSR, NULL);
++ gprs_proc_file->proc_fops = &file_proc_operations;
++}
++
++static void gprs_proc_exit(void)
++{
++ remove_proc_entry("gprsbytes", gprs_proc_file);
++}
++
++static int __init mux_init(void)
++{
++ __u8 j;
++
++ if (COMM_FOR_MUX_DRIVER == NULL) {
++
++#ifdef USB_FOR_MUX
++ panic("please install IPC-USB first\n");
++#else
++ panic("please install ttyS0 first\n");
++#endif
++
++ }
++
++ ts0710_init();
++
++ for (j = 0; j < NR_MUXS; j++) {
++ mux_send_info_flags[j] = 0;
++ mux_send_info[j] = 0;
++ mux_recv_info_flags[j] = 0;
++ mux_recv_info[j] = 0;
++ }
++ mux_send_info_idx = NR_MUXS;
++ mux_recv_queue = NULL;
++ mux_recv_flags = 0;
++
++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) {
++ mux_data_count[j] = 0;
++ mux_data_count2[j] = 0;
++ init_MUTEX(&mux_data_count_mutex[j]);
++ }
++ post_recv_count_flag = 0;
++
++ INIT_WORK(&send_tqueue, send_worker, NULL);
++ INIT_WORK(&receive_tqueue, receive_worker, NULL);
++ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
++
++ memset(&mux_driver, 0, sizeof(struct tty_driver));
++ memset(&mux_tty, 0, sizeof(mux_tty));
++ mux_driver.magic = TTY_DRIVER_MAGIC;
++ mux_driver.driver_name = "ts0710mux";
++ mux_driver.name = "ts0710mux";
++ mux_driver.major = TS0710MUX_MAJOR;
++ mux_driver.minor_start = TS0710MUX_MINOR_START;
++ mux_driver.num = NR_MUXS;
++ mux_driver.type = TTY_DRIVER_TYPE_SERIAL;
++ mux_driver.subtype = SERIAL_TYPE_NORMAL;
++ mux_driver.init_termios = tty_std_termios;
++ mux_driver.init_termios.c_iflag = 0;
++ mux_driver.init_termios.c_oflag = 0;
++ mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD;
++ mux_driver.init_termios.c_lflag = 0;
++ mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++
++ mux_driver.ttys = mux_table;
++ mux_driver.termios = mux_termios;
++ mux_driver.termios_locked = mux_termios_locked;
++// mux_driver.driver_state = mux_state;
++ mux_driver.other = NULL;
++
++ mux_driver.open = mux_open;
++ mux_driver.close = mux_close;
++ mux_driver.write = mux_write;
++ mux_driver.write_room = mux_write_room;
++ mux_driver.flush_buffer = mux_flush_buffer;
++ mux_driver.chars_in_buffer = mux_chars_in_buffer;
++ mux_driver.throttle = mux_throttle;
++ mux_driver.unthrottle = mux_unthrottle;
++ mux_driver.ioctl = mux_ioctl;
++ mux_driver.owner = THIS_MODULE;
++
++ if (tty_register_driver(&mux_driver))
++ panic("Couldn't register mux driver");
++
++ COMM_MUX_DISPATCHER = mux_dispatcher;
++ COMM_MUX_SENDER = mux_sender;
++
++ gprs_proc_init();
++
++ return 0;
++}
++
++static void __exit mux_exit(void)
++{
++ __u8 j;
++
++ COMM_MUX_DISPATCHER = NULL;
++ COMM_MUX_SENDER = NULL;
++
++ gprs_proc_exit();
++
++ mux_send_info_idx = NR_MUXS;
++ mux_recv_queue = NULL;
++ for (j = 0; j < NR_MUXS; j++) {
++ if ((mux_send_info_flags[j]) && (mux_send_info[j])) {
++ kfree(mux_send_info[j]);
++ }
++ mux_send_info_flags[j] = 0;
++ mux_send_info[j] = 0;
++
++ if ((mux_recv_info_flags[j]) && (mux_recv_info[j])) {
++ free_mux_recv_struct(mux_recv_info[j]);
++ }
++ mux_recv_info_flags[j] = 0;
++ mux_recv_info[j] = 0;
++ }
++
++ if (tty_unregister_driver(&mux_driver))
++ panic("Couldn't unregister mux driver");
++}
++
++module_init(mux_init);
++module_exit(mux_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_DESCRIPTION("TS 07.10 Multiplexer");
+Index: linux-2.6.21/drivers/char/ts0710_mux.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/char/ts0710_mux.h 2007-05-06 17:10:21.000000000 -0300
+@@ -0,0 +1,103 @@
++/*
++ * mux_macro.h
++ *
++ * Copyright (C) 2002 2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++ * 11/18/2002 (Motorola) - Initial version
++ *
++ */
++
++/*
++* This header file should be included by both MUX and other applications
++* which access MUX device files. It gives the additional macro definitions
++* shared between MUX and applications.
++*/
++
++/* MUX DLCI(Data Link Connection Identifier) Configuration */
++/*
++* DLCI Service
++* 0 Control Channel
++* 1 Voice Call & Network-related
++* 2 SMS MO
++* 3 SMS MT
++* 4 Phonebook & related
++* 5 MISC
++* 6 CSD/FAX
++* 7 GPRS1
++* 8 GPRS2
++* 9 Logger CMD
++* 10 Logger Data
++* 11 Test CMD
++* 12 AGPS
++* 13 Net Monitor
++*/
++
++/* Mapping between DLCI and MUX device files */
++/*
++* File Name Minor DLCI AT Command/Data
++* /dev/mux0 0 1 AT Command
++* /dev/mux1 1 2 AT Command
++* /dev/mux2 2 3 AT Command
++* /dev/mux3 3 4 AT Command
++* /dev/mux4 4 5 AT Command
++* /dev/mux5 5 6 AT Command
++* /dev/mux6 6 7 AT Command
++* /dev/mux7 7 8 AT Command
++* /dev/mux8 8 6 Data
++* /dev/mux9 9 7 Data
++* /dev/mux10 10 8 Data
++* /dev/mux11 11 9 Data
++* /dev/mux12 12 10 Data
++* /dev/mux13 13 11 Data
++* /dev/mux14 14 12 Data
++* /dev/mux15 15 13 Data
++*/
++
++#define MUX_CMD_FILE_VOICE_CALL "/dev/mux0"
++#define MUX_CMD_FILE_SMS_MO "/dev/mux1"
++#define MUX_CMD_FILE_SMS_MT "/dev/mux2"
++#define MUX_CMD_FILE_PHONEBOOK "/dev/mux3"
++#define MUX_CMD_FILE_MISC "/dev/mux4"
++#define MUX_CMD_FILE_CSD "/dev/mux5"
++#define MUX_CMD_FILE_GPRS1 "/dev/mux6"
++#define MUX_CMD_FILE_GPRS2 "/dev/mux7"
++
++#define MUX_DATA_FILE_CSD "/dev/mux8"
++#define MUX_DATA_FILE_GPRS1 "/dev/mux9"
++#define MUX_DATA_FILE_GPRS2 "/dev/mux10"
++#define MUX_DATA_FILE_LOGGER_CMD "/dev/mux11"
++#define MUX_DATA_FILE_LOGGER_DATA "/dev/mux12"
++#define MUX_DATA_FILE_TEST_CMD "/dev/mux13"
++#define MUX_DATA_FILE_AGPS "/dev/mux14"
++#define MUX_DATA_FILE_NET_MONITOR "/dev/mux15"
++
++#define NUM_MUX_CMD_FILES 8
++#define NUM_MUX_DATA_FILES 8
++#define NUM_MUX_FILES ( NUM_MUX_CMD_FILES + NUM_MUX_DATA_FILES )
++
++/* Special ioctl() upon a MUX device file for hanging up a call */
++#define TS0710MUX_IO_MSC_HANGUP 0x54F0
++
++/* Special ioctl() upon a MUX device file for MUX loopback test */
++#define TS0710MUX_IO_TEST_CMD 0x54F1
++
++/* Special Error code might be return from write() to a MUX device file */
++#define EDISCONNECTED 900 /* Logical data link is disconnected */
++
++/* Special Error code might be return from open() to a MUX device file */
++#define EREJECTED 901 /* Logical data link connection request is rejected */
+Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-05-06 17:10:21.000000000 -0300
+@@ -0,0 +1,868 @@
++/*
++ * linux/drivers/usb/ipcusb.c
++ *
++ * Implementation of a ipc driver based Intel's Bulverde USB Host
++ * Controller.
++ *
++ * Copyright (C) 2003-2005 Motorola
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * 2003-Nov-03 - (Motorola) created
++ * 2004-Feb-20 - (Motorola) Add Power Manager codes
++ * 2004-Apr-14 - (Motorola) Update Suspend/Resume codes
++ * 2004-May-10 - (Motorola) Add unlink_urbs codes and do some updates of send
++ * out urb sequence
++ * 2006-Jun-22 - (Harald Welte) port to Linux 2.6.x
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/list.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/hardware.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch-pxa/pxa-regs.h>
++#include <asm/arch-pxa/ezx.h>
++#include <linux/slab.h>
++#include <linux/miscdevice.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/delay.h>
++#include <linux/sched.h>
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++#include <linux/circ_buf.h>
++#include <linux/usb.h>
++
++#include "ts0710_mux_usb.h"
++
++/*Macro defined for this driver*/
++#define DRIVER_VERSION "1.0alpha1"
++#define DRIVER_AUTHOR "Motorola / Harald Welte <laforge@openezx.org>"
++#define DRIVER_DESC "USB IPC Driver (TS07.10 lowlevel)"
++#define MOTO_IPC_VID 0x22b8
++#define MOTO_IPC_PID 0x3006
++#define IBUF_SIZE 32 /*urb size*/
++#define IPC_USB_XMIT_SIZE 1024
++#define IPC_URB_SIZE 32
++#define IPC_USB_WRITE_INIT 0
++#define IPC_USB_WRITE_XMIT 1
++#define IPC_USB_PROBE_READY 3
++#define IPC_USB_PROBE_NOT_READY 4
++#define DBG_MAX_BUF_SIZE 1024
++#define ICL_EVENT_INTERVAL (HZ)
++#undef BVD_DEBUG
++
++#define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
++#define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
++#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
++/*End defined macro*/
++
++/*global values defined*/
++static struct usb_driver usb_ipc_driver;
++static struct timer_list ipcusb_timer;
++static struct timer_list suspend_timer;
++static struct timer_list wakeup_timer;
++static struct tty_struct ipcusb_tty; /* the coresponding tty struct, we just use flip buffer here. */
++static struct tty_driver ipcusb_tty_driver; /* the coresponding tty driver, we just use write and chars in buff here*/
++struct tty_driver *usb_for_mux_driver = NULL;
++struct tty_struct *usb_for_mux_tty = NULL;
++void (*usb_mux_dispatcher)(struct tty_struct *tty) = NULL;
++void (*usb_mux_sender)(void) = NULL;
++void (*ipcusb_ap_to_bp)(unsigned char*, int) = NULL;
++void (*ipcusb_bp_to_ap)(unsigned char*, int) = NULL;
++EXPORT_SYMBOL(usb_for_mux_driver);
++EXPORT_SYMBOL(usb_for_mux_tty);
++EXPORT_SYMBOL(usb_mux_dispatcher);
++EXPORT_SYMBOL(usb_mux_sender);
++EXPORT_SYMBOL(ipcusb_ap_to_bp);
++EXPORT_SYMBOL(ipcusb_bp_to_ap);
++static int sumbit_times = 0;
++static int callback_times = 0;
++//static unsigned long last_jiff = 0;
++extern int usbh_finished_resume;
++/*end global values defined*/
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE("GPL");
++
++#ifdef BVD_DEBUG
++#define bvd_dbg(format, arg...) printk(__FILE__ ": " format "\n" , ## arg)
++#else
++#define bvd_dbg(format, arg...) do {} while (0)
++#endif
++
++/* USB device context */
++typedef struct {
++ struct list_head list;
++ int size;
++ char *body;
++} buf_list_t;
++
++struct ipc_usb_data {
++ u_int8_t write_finished_flag;
++ u_int8_t write_flag,
++ ipc_flag,
++ suspend_flag;
++ struct usb_device *ipc_dev;
++ struct urb readurb_mux,
++ writeurb_mux,
++ writeurb_dsplog;
++ char *obuf, *ibuf;
++ int writesize; /* max packet size for the
++ output bulk endpoint *
++ transfer buffers */
++
++ struct circ_buf xmit; /* write cric bufffer */
++ struct list_head in_buf_list;
++ char bulk_in_ep_mux,
++ bulk_out_ep_mux,
++ bulk_in_ep_dsplog;
++ unsigned int ifnum;
++
++ struct tasklet_struct bh,
++ bh_bp;
++
++ spinlock_t lock;
++};
++
++struct ipc_usb_data *bvd_ipc;
++
++#ifdef BVD_DEBUG
++static void bvd_dbg_hex(__u8 *buf, int len)
++{
++ static unsigned char tbuf[DBG_MAX_BUF_SIZE];
++ int i, c;
++
++ if (len <= 0)
++ return;
++
++ c = 0;
++ for (i=0; (i < len) && (c < (DBG_MAX_BUF_SIZE - 3)); i++) {
++ sprintf(&tbuf[c], "%02x ",buf[i]);
++ c += 3;
++ }
++ tbuf[c] = 0;
++
++ printk("%s: %s\n", __FUNCTION__, tbuf);
++}
++#else
++#define bvd_dbg_hex(buf, len)
++#endif
++
++static int unlink_urbs(struct urb *urb)
++{
++ unsigned long flags;
++ int retval;
++
++ spin_lock_irqsave(&bvd_ipc->lock, flags);
++
++ retval = usb_unlink_urb(urb);
++ if (retval != -EINPROGRESS && retval != 0)
++ printk("unlink urb err, %d", retval);
++
++ spin_unlock_irqrestore(&bvd_ipc->lock, flags);
++ return retval;
++}
++
++static void append_to_inbuf_list(struct urb *urb)
++{
++ buf_list_t *inbuf;
++ int count = urb->actual_length;
++
++ inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL);
++ if (!inbuf) {
++ printk("append_to_inbuf_list: (%d) out of memory!\n",
++ sizeof(buf_list_t));
++ return;
++ }
++
++ inbuf->size = count;
++ inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL);
++ if (!inbuf->body) {
++ kfree(inbuf);
++ printk("append_to_inbuf_list: (%d) out of memory!\n",
++ sizeof(char)*count);
++ return;
++ }
++ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count);
++ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list);
++}
++
++static void ipcusb_timeout(unsigned long data)
++{
++ struct tty_struct *tty = &ipcusb_tty;
++ struct urb *urb = (struct urb *)data;
++
++ bvd_dbg("ipcusb_timeout***");
++
++ while (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int count;
++ buf_list_t *inbuf;
++ struct list_head *ptr = NULL;
++
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry (ptr, buf_list_t, list);
++ count = inbuf->size;
++ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) {
++ list_del(ptr);
++ kfree(inbuf->body);
++ inbuf->body = NULL;
++ kfree(inbuf);
++ } else {
++ bvd_dbg("ipcusb_timeout: bvd_ipc->in_buf_list empty!");
++ break;
++ }
++ }
++
++ if (usb_mux_dispatcher)
++ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/
++
++ if (list_empty(&bvd_ipc->in_buf_list)) {
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("ipcusb_timeout: failed resubmitting read urb");
++ bvd_dbg("ipcusb_timeout: resubmited read urb");
++ } else {
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++ }
++}
++
++static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
++{
++ buf_list_t *inbuf;
++ int count = urb->actual_length;
++ struct tty_struct *tty = &ipcusb_tty;
++
++ bvd_dbg("usb_ipc_read_bulk: begining!");
++ if (urb->status)
++ printk("nonzero read bulk status received: %d\n", urb->status);
++
++ bvd_dbg("usb_ipc_read_bulk: urb->actual_length=%d", urb->actual_length);
++ bvd_dbg("usb_ipc_read_bulk: urb->transfer_buffer:");
++
++ bvd_dbg_hex((unsigned char*)urb->transfer_buffer, urb->actual_length);
++
++ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL))
++ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length);
++
++ if (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int need_mux = 0;
++
++ bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list");
++ if (count > 0) {
++ bvd_ipc->suspend_flag = 1;
++ append_to_inbuf_list(urb); /* append the current received urb */
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ }
++
++ while (!(list_empty(&bvd_ipc->in_buf_list))) {
++ struct list_head* ptr = NULL;
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry(ptr, buf_list_t, list);
++ count = inbuf->size;
++ need_mux = 1;
++
++ tty_insert_flip_string(tty, inbuf->body, count);
++
++ list_del(ptr);
++ kfree(inbuf->body);
++ inbuf->body = NULL;
++ kfree(inbuf);
++ }
++
++ if (usb_mux_dispatcher && need_mux)
++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
++
++ if (list_empty(&bvd_ipc->in_buf_list)) {
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("usb_ipc_read_bulk: "
++ "failed resubmitting read urb");
++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
++ } else {
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++ }
++ } else if (count > 0) {
++ bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list");
++ bvd_ipc->suspend_flag = 1;
++
++ if (tty_insert_flip_string(tty, urb->transfer_buffer,
++ count) < count) {
++ bvd_ipc->suspend_flag = 1;
++ append_to_inbuf_list(urb);
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ }
++
++ if (usb_mux_dispatcher)
++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
++
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("failed resubmitting read urb");
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
++ }
++
++ bvd_dbg("usb_ipc_read_bulk: completed!!!");
++}
++
++static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs)
++{
++ callback_times++;
++ bvd_ipc->write_finished_flag = 1;
++
++ bvd_dbg("usb_ipc_write_bulk: begining!");
++ //printk("%s: write_finished_flag=%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
++
++ if (urb->status)
++ printk("nonzero write bulk status received: %d\n", urb->status);
++
++ if (usb_mux_sender)
++ usb_mux_sender(); /**call Liu changhui's func**/
++
++ //printk("usb_ipc_write_bulk: mark ipcusb_softint!\n");
++ tasklet_schedule(&bvd_ipc->bh);
++
++ bvd_dbg("usb_ipc_write_bulk: finished!");
++}
++
++static void wakeup_timeout(unsigned long data)
++{
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!");
++}
++
++static void suspend_timeout(unsigned long data)
++{
++ if (bvd_ipc->suspend_flag == 1) {
++ bvd_ipc->suspend_flag = 0;
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ bvd_dbg("suspend_timeout: add the suspend timer again");
++ } else {
++ unlink_urbs(&bvd_ipc->readurb_mux);
++ UHCRHPS3 = 0x4;
++ mdelay(40);
++ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x",
++ UHCRHPS3);
++ }
++}
++
++static void ipcusb_xmit_data(void)
++{
++ int c, count = IPC_URB_SIZE;
++ int result = 0;
++ int buf_flag = 0;
++ int buf_num = 0;
++
++ //printk("%s: sumbit_times=%d, callback_times=%d\n", __FUNCTION__, sumbit_times, callback_times);
++ if (bvd_ipc->write_finished_flag == 0)
++ return;
++
++ while (1) {
++ c = CIRC_CNT_TO_END(bvd_ipc->xmit.head, bvd_ipc->xmit.tail,
++ IPC_USB_XMIT_SIZE);
++ if (count < c)
++ c = count;
++ if (c <= 0)
++ break;
++
++ memcpy(bvd_ipc->obuf+buf_num,
++ bvd_ipc->xmit.buf + bvd_ipc->xmit.tail, c);
++ buf_flag = 1;
++ bvd_ipc->xmit.tail = ((bvd_ipc->xmit.tail + c)
++ & (IPC_USB_XMIT_SIZE-1));
++ count -= c;
++ buf_num += c;
++ }
++
++ if (buf_num == 0) {
++ bvd_dbg("ipcusb_xmit_data: buf_num=%d, add suspend_timer",
++ buf_num);
++ bvd_ipc->suspend_flag = 0;
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ }
++
++ bvd_dbg("ipcusb_xmit_data: buf_num=%d", buf_num);
++ bvd_dbg("ipcusb_xmit_data: bvd_ipc->obuf: ");
++
++ bvd_dbg_hex((bvd_ipc->obuf)-buf_num, buf_num);
++
++ if (buf_flag) {
++ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num;
++ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! ");
++
++ if ((UHCRHPS3 & 0x4) == 0x4) {
++ static int ret;
++ int time = 0;
++
++ /* if BP sleep, wake up BP first */
++ pxa_gpio_mode(GPIO_IN | 41);
++ if (GPIO_is_high(41)) {
++ if (GPIO_is_high(GPIO_MCU_INT_SW))
++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ else
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++
++ time = jiffies;
++ while (GPIO_is_high(41) && (jiffies < (time+HZ)));
++
++ if (GPIO_is_high(41)) {
++ printk("%s: Wakeup BP timeout! BP state is %d\n",
++ __FUNCTION__, GPIO_is_high(41));
++ }
++ if (GPIO_is_high(GPIO_MCU_INT_SW))
++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ else
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ }
++
++ /* Resume BP */
++ UHCRHPS3 = 0x8;
++ mdelay(40);
++ bvd_dbg("ipcusb_xmit_data: Send RESUME signal! UHCRHPS3=0x%x",
++ UHCRHPS3);
++ /*send IN token*/
++ bvd_ipc->readurb_mux.actual_length = 0;
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)"
++ "failed! status=%d\n", ret);
++ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
++ }
++
++ sumbit_times++;
++ bvd_ipc->write_finished_flag = 0;
++ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
++ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev;
++ if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))
++ warn("ipcusb_xmit_data: funky result! result=%d\n", result);
++
++ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result);
++
++ }
++}
++
++static void usbipc_bh_func(unsigned long param)
++{
++ ipcusb_xmit_data();
++}
++
++extern void get_halted_bit(void);
++
++static void usbipc_bh_bp_func(unsigned long param)
++{
++ if ((UHCRHPS3 & 0x4) == 0x4) {
++ UHCRHPS3 = 0x8;
++ mdelay(40);
++ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! "
++ "UHCRHPS3=0x%x", UHCRHPS3);
++ }
++ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
++ get_halted_bit();
++
++ /*send a IN token*/
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) {
++ bvd_dbg("ipcusb_softint_send_readurb: "
++ "usb_submit_urb(read mux bulk) failed!");
++ }
++ bvd_dbg("ipcusb_softint_send_readurb: Send a IN token successfully!");
++ bvd_ipc->suspend_flag = 0;
++ bvd_dbg("ipcusb_softint_send_readurb: add suspend_timer");
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ }
++}
++
++static int usb_ipc_write(struct tty_struct *tty,
++ const unsigned char *buf, int count)
++{
++ int c, ret = 0;
++
++ bvd_dbg("usb_ipc_write: count=%d, buf: ", count);
++ bvd_dbg_hex(buf, count);
++
++ if (count <= 0)
++ return 0;
++
++ if (*ipcusb_ap_to_bp != NULL)
++ (*ipcusb_ap_to_bp)(buf, count);
++
++ bvd_ipc->suspend_flag = 1;
++
++ if ((bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) &&
++ (bvd_ipc->xmit.head == bvd_ipc->xmit.tail)) {
++ bvd_dbg("usb_ipc_write: set write_flag");
++ bvd_ipc->write_flag = IPC_USB_WRITE_XMIT;
++ }
++
++ while (1) {
++ c = CIRC_SPACE_TO_END(bvd_ipc->xmit.head,
++ bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE);
++ if (count < c)
++ c = count;
++ if (c <= 0)
++ break;
++
++ memcpy(bvd_ipc->xmit.buf + bvd_ipc->xmit.head, buf, c);
++ bvd_ipc->xmit.head = ((bvd_ipc->xmit.head + c)
++ & (IPC_USB_XMIT_SIZE-1));
++ buf += c;
++ count -= c;
++ ret += c;
++ }
++ bvd_dbg("usb_ipc_write: ret=%d, bvd_ipc->xmit.buf: ", ret);
++
++ bvd_dbg_hex(bvd_ipc->xmit.buf, ret);
++
++ if (bvd_ipc->write_flag == IPC_USB_WRITE_XMIT) {
++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++ bvd_dbg("usb_ipc_write: mark ipcusb_softint");
++ tasklet_schedule(&bvd_ipc->bh);
++ }
++
++ bvd_dbg("usb_ipc_write: ret=%d\n", ret);
++ return ret;
++}
++
++static int usb_ipc_chars_in_buffer(struct tty_struct *tty)
++{
++ return CIRC_CNT(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE);
++}
++
++void usb_send_readurb(void)
++{
++ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume);
++
++ if (usbh_finished_resume == 0)
++ return;
++
++ tasklet_schedule(&bvd_ipc->bh_bp);
++}
++
++static int usb_ipc_probe(struct usb_interface *intf,
++ const struct usb_device_id *id)
++{
++ struct usb_device *usbdev = interface_to_usbdev(intf);
++ struct usb_config_descriptor *ipccfg;
++ struct usb_interface_descriptor *interface;
++ struct usb_endpoint_descriptor *endpoint;
++ int ep_cnt, readsize, writesize;
++ char have_bulk_in_mux, have_bulk_out_mux;
++
++ bvd_dbg("usb_ipc_probe: vendor id 0x%x, device id 0x%x",
++ usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
++
++ if ((usbdev->descriptor.idVendor != MOTO_IPC_VID) ||
++ (usbdev->descriptor.idProduct != MOTO_IPC_PID))
++ return -ENODEV;
++
++ /* a2590c : dsplog interface is not supported by this driver */
++ if (intf->minor == 2) /* dsplog interface number is 2 */
++ return -1;
++
++ bvd_dbg("usb_ipc_probe: USB dev address:%p", usbdev);
++ bvd_dbg("usb_ipc_probe: ifnum:%u", intf->minor);
++
++ ipccfg = &usbdev->actconfig->desc;
++ bvd_dbg("usb_ipc_prob: config%d", ipccfg->bConfigurationValue);
++ bvd_dbg("usb_ipc_prob: bNumInterfaces = %d", ipccfg->bNumInterfaces);
++
++ /* After this point we can be a little noisy about what we are trying
++ * to configure, hehe. */
++ if (usbdev->descriptor.bNumConfigurations != 1) {
++ info("usb_ipc_probe: Only one device configuration "
++ "is supported.");
++ return -1;
++ }
++
++ if (usbdev->config[0].desc.bNumInterfaces != 3) {
++ info("usb_ipc_probe: Only three device interfaces are "
++ "supported.");
++ return -1;
++ }
++
++ interface = &intf->cur_altsetting->desc;
++ endpoint = &intf->cur_altsetting->endpoint[0].desc;
++ /* Start checking for two bulk endpoints or ... FIXME: This is a future
++ * enhancement...*/
++ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d",
++ (int) interface->bNumEndpoints);
++ if (interface->bNumEndpoints != 2) {
++ info("usb_ipc_probe: Only two endpoints supported.");
++ return -1;
++ }
++
++ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
++
++ bvd_dbg("usb_ipc_probe: endpoint[0] is:%x",
++ (&endpoint[0])->bEndpointAddress);
++ bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ",
++ (&endpoint[1])->bEndpointAddress);
++
++ while (ep_cnt < interface->bNumEndpoints) {
++
++ if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ",
++ (&endpoint[ep_cnt])->bEndpointAddress);
++ have_bulk_in_mux =
++ (&endpoint[ep_cnt])->bEndpointAddress;
++ readsize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ bvd_dbg("usb_ipc_probe: readsize=%d", readsize);
++ ep_cnt++;
++ continue;
++ }
++
++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ",
++ (&endpoint[ep_cnt])->bEndpointAddress);
++ have_bulk_out_mux =
++ (&endpoint[ep_cnt])->bEndpointAddress;
++ writesize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ bvd_dbg("usb_ipc_probe: writesize=%d", writesize);
++ ep_cnt++;
++ continue;
++ }
++
++ info("usb_ipc_probe: Undetected endpoint ^_^ ");
++ /* Shouldn't ever get here unless we have something weird */
++ return -1;
++ }
++
++ /* Perform a quick check to make sure that everything worked as it
++ * should have. */
++
++ switch (interface->bNumEndpoints) {
++ case 2:
++ if (!have_bulk_in_mux || !have_bulk_out_mux) {
++ info("usb_ipc_probe: Two bulk endpoints required.");
++ return -1;
++ }
++ break;
++ default:
++ info("usb_ipc_probe: Endpoint determination failed ^_^ ");
++ return -1;
++ }
++
++ /* Ok, now initialize all the relevant values */
++ if (!(bvd_ipc->obuf = (char *)kmalloc(writesize, GFP_KERNEL))) {
++ err("usb_ipc_probe: Not enough memory for the output buffer.");
++ kfree(bvd_ipc);
++ return -1;
++ }
++ bvd_dbg("usb_ipc_probe: obuf address:%p", bvd_ipc->obuf);
++
++ if (!(bvd_ipc->ibuf = (char *)kmalloc(readsize, GFP_KERNEL))) {
++ err("usb_ipc_probe: Not enough memory for the input buffer.");
++ kfree(bvd_ipc->obuf);
++ kfree(bvd_ipc);
++ return -1;
++ }
++ bvd_dbg("usb_ipc_probe: ibuf address:%p", bvd_ipc->ibuf);
++
++ bvd_ipc->ipc_flag = IPC_USB_PROBE_READY;
++ bvd_ipc->write_finished_flag = 1;
++ bvd_ipc->suspend_flag = 1;
++ bvd_ipc->bulk_in_ep_mux= have_bulk_in_mux;
++ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux;
++ bvd_ipc->ipc_dev = usbdev;
++ bvd_ipc->writesize = writesize;
++ INIT_LIST_HEAD (&bvd_ipc->in_buf_list);
++
++ bvd_ipc->bh.func = usbipc_bh_func;
++ bvd_ipc->bh.data = (unsigned long) bvd_ipc;
++
++ bvd_ipc->bh_bp.func = usbipc_bh_bp_func;
++ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc;
++
++ /*Build a write urb*/
++ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev,
++ usb_sndbulkpipe(bvd_ipc->ipc_dev,
++ bvd_ipc->bulk_out_ep_mux),
++ bvd_ipc->obuf, writesize, usb_ipc_write_bulk,
++ bvd_ipc);
++ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++
++ /*Build a read urb and send a IN token first time*/
++ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev,
++ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux),
++ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc);
++ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++
++ usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc);
++
++ // a2590c: dsplog is not supported by this driver
++ // usb_driver_claim_interface(&usb_ipc_driver,
++ // &ipccfg->interface[2], bvd_ipc);
++ /*send a IN token first time*/
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n");
++
++ bvd_dbg("usb_ipc_prob: Send a IN token successfully!");
++
++ if (bvd_ipc->xmit.head != bvd_ipc->xmit.tail) {
++ printk("usb_ipc_probe: mark ipcusb_softint!\n");
++ tasklet_schedule(&bvd_ipc->bh);
++ }
++
++ printk("usb_ipc_probe: completed probe!");
++ usb_set_intfdata(intf, &bvd_ipc);
++ return 0;
++}
++
++static void usb_ipc_disconnect(struct usb_interface *intf)
++{
++ //struct usb_device *usbdev = interface_to_usbdev(intf);
++ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf);
++
++ printk("usb_ipc_disconnect:*** \n");
++
++ if ((UHCRHPS3 & 0x4) == 0)
++ usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
++
++ usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
++
++ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY;
++ kfree(bvd_ipc_disconnect->ibuf);
++ kfree(bvd_ipc_disconnect->obuf);
++
++ usb_driver_release_interface(&usb_ipc_driver,
++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
++ usb_driver_release_interface(&usb_ipc_driver,
++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
++
++ //a2590c: dsplog interface is not supported by this driver
++ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]);
++
++ bvd_ipc_disconnect->ipc_dev = NULL;
++
++ usb_set_intfdata(intf, NULL);
++
++ printk("usb_ipc_disconnect completed!\n");
++}
++
++static struct usb_device_id usb_ipc_id_table[] = {
++ { USB_DEVICE(MOTO_IPC_VID, MOTO_IPC_PID) },
++ { } /* Terminating entry */
++};
++
++static struct usb_driver usb_ipc_driver = {
++ .name = "usb ipc",
++ .probe = usb_ipc_probe,
++ .disconnect = usb_ipc_disconnect,
++ .id_table = usb_ipc_id_table,
++};
++
++static int __init usb_ipc_init(void)
++{
++ int result;
++
++ bvd_dbg("init usb_ipc");
++ /* register driver at the USB subsystem */
++ result = usb_register(&usb_ipc_driver);
++ if (result < 0) {
++ err ("usb ipc driver could not be registered");
++ return result;
++ }
++
++ /*init the related mux interface*/
++ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
++ err("usb_ipc_init: Out of memory.");
++ usb_deregister(&usb_ipc_driver);
++ return -ENOMEM;
++ }
++ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc);
++
++ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) {
++ err("usb_ipc_init: Not enough memory for the input buffer.");
++ kfree(bvd_ipc);
++ usb_deregister(&usb_ipc_driver);
++ return -ENOMEM;
++ }
++ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p",
++ bvd_ipc->xmit.buf);
++ bvd_ipc->ipc_dev = NULL;
++ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0;
++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++
++ ipcusb_tty_driver.write = usb_ipc_write;
++ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer;
++
++ usb_for_mux_driver = &ipcusb_tty_driver;
++ usb_for_mux_tty = &ipcusb_tty;
++
++ /* init timers for ipcusb read process and usb suspend */
++ init_timer(&ipcusb_timer);
++ ipcusb_timer.function = ipcusb_timeout;
++
++ init_timer(&suspend_timer);
++ suspend_timer.function = suspend_timeout;
++
++ init_timer(&wakeup_timer);
++ wakeup_timer.function = wakeup_timeout;
++
++ info("USB Host(Bulverde) IPC driver registered.");
++ info(DRIVER_VERSION ":" DRIVER_DESC);
++
++ return 0;
++}
++
++static void __exit usb_ipc_exit(void)
++{
++ bvd_dbg("cleanup bvd_ipc");
++
++ kfree(bvd_ipc->xmit.buf);
++ kfree(bvd_ipc);
++ usb_deregister(&usb_ipc_driver);
++
++ info("USB Host(Bulverde) IPC driver deregistered.");
++}
++
++module_init(usb_ipc_init);
++module_exit(usb_ipc_exit);
++EXPORT_SYMBOL(usb_send_readurb);
+Index: linux-2.6.21/drivers/char/ts0710_mux_usb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/char/ts0710_mux_usb.h 2007-05-06 17:10:21.000000000 -0300
+@@ -0,0 +1,29 @@
++/*
++ * linux/drivers/usb/ipcusb.h
++ *
++ * Implementation of a ipc driver based Intel's Bulverde USB Host
++ * Controller.
++ *
++ * Copyright (C) 2003-2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * 2003-Nov-18 - (Motorola) created
++ *
++ */
++extern struct tty_driver *usb_for_mux_driver;
++extern struct tty_struct *usb_for_mux_tty;
++extern void (*usb_mux_dispatcher)(struct tty_struct *tty);
++extern void (*usb_mux_sender)(void);
diff --git a/packages/linux/linux-ezx-2.6.21/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.21/patches/mux_debug.patch
new file mode 100755
index 0000000000..58cb25a0b6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/mux_debug.patch
@@ -0,0 +1,551 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 12:24:18.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 12:26:47.000000000 +0200
+@@ -85,6 +85,9 @@
+ #include "ts0710.h"
+ #include "ts0710_mux.h"
+
++#define TS0710DEBUG
++#define PRINT_OUTPUT_PRINTK
++
+ #define TS0710MUX_GPRS_SESSION_MAX 2
+ #define TS0710MUX_MAJOR 250
+ #define TS0710MUX_MINOR_START 0
+@@ -316,7 +319,7 @@
+ #ifdef TS0710DEBUG
+
+ #ifdef PRINT_OUTPUT_PRINTK
+-#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg)
++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX %s: " fmt "\n" , __func__, ## arg)
+ #else
+ #include "ezxlog.h"
+ static __u8 strDebug[256];
+@@ -530,10 +533,10 @@
+ if (strncmp(p->comm, "aplogd", 6) == 0) {
+ sig = 1;
+ if (send_sig(SIGUSR2, p, 1) == 0) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: success to send SIGUSR2 to aplogd!\n");
+ } else {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: failure to send SIGUSR2 to aplogd!\n");
+ }
+ break;
+@@ -542,7 +545,7 @@
+ read_unlock(&tasklist_lock);
+
+ if (!sig) {
+- TS0710_PRINTK("MUX: not found aplogd!\n");
++ TS0710_DEBUG("MUX: not found aplogd!\n");
+ }
+ }
+ #else
+@@ -559,11 +562,11 @@
+ buf[len + 1] = TS0710_BASIC_FLAG;
+
+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n");
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n");
+ TS0710_SIG2APLOGD();
+ #endif
+@@ -577,7 +580,7 @@
+ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2);
+
+ if (res != len + 2) {
+- TS0710_PRINTK("MUX basic_write: Write Error!\n");
++ TS0710_DEBUG("MUX basic_write: Write Error!\n");
+ return -1;
+ }
+
+@@ -601,7 +604,7 @@
+ TS0710_DEBUG("crc_check: CRC check OK\n");
+ return 0;
+ } else {
+- TS0710_PRINTK("MUX crc_check: CRC check failed\n");
++ TS0710_DEBUG("MUX crc_check: CRC check failed\n");
+ return 1;
+ }
+ }
+@@ -1266,7 +1269,7 @@
+ break;
+
+ case FCON: /*Flow control on command */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Received Flow control(all channels) on command\n");
+ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
+ ts0710->dlci[0].state = CONNECTED;
+@@ -1276,7 +1279,7 @@
+ break;
+
+ case FCOFF: /*Flow control off command */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Received Flow control(all channels) off command\n");
+ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
+ for (j = 0; j < TS0710_MAX_CHN; j++) {
+@@ -1823,7 +1826,7 @@
+ TS0710_DEBUG("UIH on channel %d\n", dlci);
+
+ if (uih_len > ts0710->dlci[dlci].mtu) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n",
+ dlci, uih_len, ts0710->dlci[dlci].mtu);
+ break;
+@@ -1844,7 +1847,7 @@
+ dlci, tty_idx);
+ TS0710_DEBUGSTR(uih_data_start, uih_len);
+ if (!(iscmdtty[tty_idx])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n",
+ __FUNCTION__, dlci, tty_idx);
+ }
+@@ -1856,7 +1859,7 @@
+ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
+ dlci, tty_idx);
+ if (iscmdtty[tty_idx]) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
+ __FUNCTION__, dlci, tty_idx);
+ }
+@@ -1864,13 +1867,14 @@
+ }
+ tty = mux_table[tty_idx];
+ if ((!mux_tty[tty_idx]) || (!tty)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: No application waiting for, discard it! /dev/mux%d\n",
+ tty_idx);
++ TS0710_DEBUG("MUX: mux_tty[%d] = %d, tty is at %i", tty_idx, mux_tty[tty_idx], tty);
+ } else { /* Begin processing received data */
+ if ((!mux_recv_info_flags[tty_idx])
+ || (!mux_recv_info[tty_idx])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n",
+ tty_idx);
+ break;
+@@ -1878,7 +1882,7 @@
+
+ recv_info = mux_recv_info[tty_idx];
+ if (recv_info->total > 8192) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n",
+ tty_idx);
+ break;
+@@ -1949,7 +1953,7 @@
+ get_mux_recv_packet
+ (uih_len);
+ if (!recv_packet) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: no memory\n",
+ __FUNCTION__);
+ break;
+@@ -1980,7 +1984,7 @@
+ } else { /* recv_info->total == 0 */
+ if (uih_len >
+ TS0710MUX_RECV_BUF_SIZE) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n",
+ tty_idx, uih_len);
+ uih_len =
+@@ -2120,12 +2124,12 @@
+ if (ts0710->dlci[dlci].state == DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI %d Send DISC got signal!\n",
+ dlci);
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI %d Send DISC timeout!\n", dlci);
+ continue;
+ }
+@@ -2158,7 +2162,7 @@
+ return 0;
+ } else if (ts0710->dlci[0].state == CONNECTING) {
+ /* Reentry */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n",
+ current->pid, current->comm);
+ try = 11;
+@@ -2179,13 +2183,13 @@
+ DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting timeout!\n",
+ dlci);
+ continue;
+@@ -2199,7 +2203,7 @@
+ }
+ } else if ((ts0710->dlci[0].state != DISCONNECTED)
+ && (ts0710->dlci[0].state != REJECTED)) {
+- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci);
+ return retval;
+ } else {
+ ts0710->initiator = 1;
+@@ -2218,19 +2222,19 @@
+ retval = 0;
+ break;
+ } else if (ts0710->dlci[0].state == REJECTED) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got rejected!\n",
+ dlci);
+ retval = -EREJECTED;
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM timeout!\n",
+ dlci);
+ continue;
+@@ -2271,13 +2275,13 @@
+ DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting timeout!\n",
+ dlci);
+ continue;
+@@ -2296,7 +2300,7 @@
+ }
+ } else if ((ts0710->dlci[dlci].state != DISCONNECTED)
+ && (ts0710->dlci[dlci].state != REJECTED)) {
+- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci);
+ return retval;
+ } else {
+ ts0710->dlci[dlci].state = NEGOTIATING;
+@@ -2313,13 +2317,13 @@
+ if (ts0710->dlci[dlci].state == CONNECTING) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send pn_msg got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send pn_msg timeout!\n",
+ dlci);
+ continue;
+@@ -2344,20 +2348,20 @@
+ break;
+ } else if (ts0710->dlci[dlci].state ==
+ REJECTED) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got rejected!\n",
+ dlci);
+ retval = -EREJECTED;
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >=
+ TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM timeout!\n",
+ dlci);
+ continue;
+@@ -2468,7 +2472,7 @@
+ schedule_work(&send_tqueue);
+ #else
+ if (!tq_serial_for_mux) {
+- TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n",
++ TS0710_DEBUG("MUX Error: %s: tq_serial_for_mux == 0\n",
+ __FUNCTION__);
+ return;
+ }
+@@ -2508,7 +2512,7 @@
+ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) {
+ if (dlci == 1) {
+ ts0710_close_channel(0);
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n");
+ TS0710_SIG2APLOGD();
+ }
+@@ -2673,12 +2677,12 @@
+ UNUSED_PARAM(tty);
+
+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n",
+ __FUNCTION__);
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n",
+ __FUNCTION__);
+ TS0710_SIG2APLOGD();
+@@ -2724,14 +2728,14 @@
+ } else if (ts0710->dlci[dlci].state == CONNECTED) {
+
+ if (!(mux_send_info_flags[line])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n",
+ line);
+ return -ENODEV;
+ }
+ send_info = mux_send_info[line];
+ if (!send_info) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: mux_write: mux_send_info[%d] == 0\n",
+ line);
+ return -ENODEV;
+@@ -2800,7 +2804,7 @@
+ }
+ return c;
+ } else {
+- TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci);
++ TS0710_DEBUG("MUX mux_write: DLCI %d not connected\n", dlci);
+ return -EDISCONNECTED;
+ }
+ }
+@@ -2940,7 +2944,7 @@
+ return;
+ }
+
+- TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line);
++ TS0710_DEBUG("MUX %s: line is:%d\n", __FUNCTION__, line);
+
+ if ((mux_send_info_flags[line])
+ && (mux_send_info[line])
+@@ -2960,10 +2964,10 @@
+
+ /*
+ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) {
+- TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
++ TS0710_DEBUG("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
++ TS0710_DEBUG("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
+ TS0710_SIG2APLOGD();
+ #endif
+
+@@ -2989,9 +2993,9 @@
+ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) {
+
+ #ifdef USB_FOR_MUX
+- TS0710_PRINTK("MUX: please install and open IPC-USB first\n");
++ TS0710_DEBUG("MUX: please install and open IPC-USB first\n");
+ #else
+- TS0710_PRINTK("MUX: please install and open ttyS0 first\n");
++ TS0710_DEBUG("MUX: please install and open ttyS0 first\n");
+ #endif
+
+ goto out;
+@@ -3016,7 +3020,7 @@
+ /* if( dlci == 1 ) { */
+ /* Open server channel 0 first */
+ if ((retval = ts0710_open_channel(0)) != 0) {
+- TS0710_PRINTK("MUX: Can't connect server channel 0!\n");
++ TS0710_DEBUG("MUX: Can't connect server channel 0!\n");
+ ts0710_init();
+
+ mux_tty[line]--;
+@@ -3073,7 +3077,7 @@
+ datatty = dlci2tty[dlci].datatty;
+ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) {
+ if ((retval = ts0710_open_channel(dlci)) != 0) {
+- TS0710_PRINTK("MUX: Can't connected channel %d!\n",
++ TS0710_DEBUG("MUX: Can't connected channel %d!\n",
+ dlci);
+ ts0710_reset_dlci(dlci);
+
+@@ -3096,6 +3100,7 @@
+ retval = 0;
+ #endif
+ out:
++ TS0710_DEBUG("returning %d for open of /dev/mux%d (mux_tty[%d] = %d", retval, line, line, mux_tty[line]);
+ return retval;
+ }
+
+@@ -3178,12 +3183,12 @@
+
+ while (1) {
+ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf);
+- TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
++ TS0710_DEBUG("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
+ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free);
+ if (tbuf_read == 0) {
+ break;
+ } else {
+- TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
++ TS0710_DEBUG("Read %i bytes.\n", tbuf_read);
+ };
+ tbuf_ptr += tbuf_read;
+ };
+@@ -3192,7 +3197,7 @@
+
+ // Should be impossible?
+ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
+- // TS0710_PRINTK
++ // TS0710_DEBUG
+ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
+ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
+ //}
+@@ -3264,7 +3269,7 @@
+ TS0710_LOGSTR_FRAME(0, start_flag,
+ (tbuf_ptr -
+ start_flag));
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n",
+ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/
+ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */
+@@ -3389,7 +3394,7 @@
+ *(uih_data_start
+ + uih_len) =
+ 0;
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX bp log: %s\n",
+ uih_data_start);
+ }
+@@ -3415,7 +3420,7 @@
+ TS0710_LOGSTR_FRAME(0, start_flag,
+ framelen);
+ TS0710_DEBUGHEX(start_flag, framelen);
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: Lost synchronization!\n");
+ search = start_flag + 1;
+ }
+@@ -3476,7 +3481,7 @@
+ recv_info2 = recv_info->next;
+
+ if (!(recv_info->total)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n",
+ __FUNCTION__);
+ continue;
+@@ -3486,7 +3491,7 @@
+ dlci = tty2dlci[tty_idx];
+ tty = mux_table[tty_idx];
+ if ((!mux_tty[tty_idx]) || (!tty)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n",
+ tty_idx);
+ mux_recv_info_flags[tty_idx] = 0;
+@@ -3560,7 +3565,7 @@
+ recv_info->total -= recv_packet->length;
+ free_mux_recv_packet(recv_packet);
+ } else {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n",
+ __FUNCTION__, recv_info->total);
+ }
+@@ -3760,7 +3765,7 @@
+ int ret;
+
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX get_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+
+@@ -3774,11 +3779,11 @@
+ static int set_count(__u8 idx, int count)
+ {
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX set_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+ if (count < 0) {
+- TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count);
++ TS0710_DEBUG("MUX set_count: invalid count: %d!\n", count);
+ return -1;
+ }
+
+@@ -3792,11 +3797,11 @@
+ static int add_count(__u8 idx, int count)
+ {
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX add_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+ if (count <= 0) {
+- TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count);
++ TS0710_DEBUG("MUX add_count: invalid count: %d!\n", count);
+ return -1;
+ }
+
+Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200
+@@ -72,7 +72,8 @@
+ #define IPC_USB_PROBE_NOT_READY 4
+ #define DBG_MAX_BUF_SIZE 1024
+ #define ICL_EVENT_INTERVAL (HZ)
+-#undef BVD_DEBUG
++
++#define BVD_DEBUG
+
+ #define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
+ #define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/patch-2.6.21.4 b/packages/linux/linux-ezx-2.6.21/patches/patch-2.6.21.4
new file mode 100644
index 0000000000..2c2ed60433
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/patch-2.6.21.4
@@ -0,0 +1,2816 @@
+diff --git a/Makefile b/Makefile
+index d970cb1..e5c5531 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 21
+-EXTRAVERSION =
++EXTRAVERSION = .4
+ NAME = Nocturnal Monster Puppy
+
+ # *DOCUMENTATION*
+diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
+index 2409560..7ed141f 100644
+--- a/arch/arm/kernel/traps.c
++++ b/arch/arm/kernel/traps.c
+@@ -273,6 +273,7 @@ asmlinkage void do_undefinstr(struct pt_regs *regs)
+ struct undef_hook *hook;
+ siginfo_t info;
+ void __user *pc;
++ unsigned long flags;
+
+ /*
+ * According to the ARM ARM, PC is 2 or 4 bytes ahead,
+@@ -291,7 +292,7 @@ asmlinkage void do_undefinstr(struct pt_regs *regs)
+ get_user(instr, (u32 __user *)pc);
+ }
+
+- spin_lock_irq(&undef_lock);
++ spin_lock_irqsave(&undef_lock, flags);
+ list_for_each_entry(hook, &undef_hook, node) {
+ if ((instr & hook->instr_mask) == hook->instr_val &&
+ (regs->ARM_cpsr & hook->cpsr_mask) == hook->cpsr_val) {
+@@ -301,7 +302,7 @@ asmlinkage void do_undefinstr(struct pt_regs *regs)
+ }
+ }
+ }
+- spin_unlock_irq(&undef_lock);
++ spin_unlock_irqrestore(&undef_lock, flags);
+
+ #ifdef CONFIG_DEBUG_USER
+ if (user_debug & UDBG_UNDEFINED) {
+diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c
+index 89ec70e..d907a2a 100644
+--- a/arch/arm/mach-iop13xx/pci.c
++++ b/arch/arm/mach-iop13xx/pci.c
+@@ -1023,7 +1023,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
+ << IOP13XX_ATUX_PCIXSR_FUNC_NUM;
+ __raw_writel(pcixsr, IOP13XX_ATUX_PCIXSR);
+
+- res[0].start = IOP13XX_PCIX_LOWER_IO_PA;
++ res[0].start = IOP13XX_PCIX_LOWER_IO_PA + IOP13XX_PCIX_IO_BUS_OFFSET;
+ res[0].end = IOP13XX_PCIX_UPPER_IO_PA;
+ res[0].name = "IQ81340 ATUX PCI I/O Space";
+ res[0].flags = IORESOURCE_IO;
+@@ -1033,7 +1033,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
+ res[1].name = "IQ81340 ATUX PCI Memory Space";
+ res[1].flags = IORESOURCE_MEM;
+ sys->mem_offset = IOP13XX_PCIX_MEM_OFFSET;
+- sys->io_offset = IOP13XX_PCIX_IO_OFFSET;
++ sys->io_offset = IOP13XX_PCIX_LOWER_IO_PA;
+ break;
+ case IOP13XX_INIT_ATU_ATUE:
+ /* Note: the function number field in the PCSR is ro */
+@@ -1044,7 +1044,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
+
+ __raw_writel(pcsr, IOP13XX_ATUE_PCSR);
+
+- res[0].start = IOP13XX_PCIE_LOWER_IO_PA;
++ res[0].start = IOP13XX_PCIE_LOWER_IO_PA + IOP13XX_PCIE_IO_BUS_OFFSET;
+ res[0].end = IOP13XX_PCIE_UPPER_IO_PA;
+ res[0].name = "IQ81340 ATUE PCI I/O Space";
+ res[0].flags = IORESOURCE_IO;
+@@ -1054,7 +1054,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
+ res[1].name = "IQ81340 ATUE PCI Memory Space";
+ res[1].flags = IORESOURCE_MEM;
+ sys->mem_offset = IOP13XX_PCIE_MEM_OFFSET;
+- sys->io_offset = IOP13XX_PCIE_IO_OFFSET;
++ sys->io_offset = IOP13XX_PCIE_LOWER_IO_PA;
+ sys->map_irq = iop13xx_pcie_map_irq;
+ break;
+ default:
+diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c
+index 16300ad..0cc26da 100644
+--- a/arch/arm/plat-iop/time.c
++++ b/arch/arm/plat-iop/time.c
+@@ -32,22 +32,22 @@ static unsigned long next_jiffy_time;
+
+ unsigned long iop_gettimeoffset(void)
+ {
+- unsigned long offset, temp1, temp2;
++ unsigned long offset, temp;
+
+ /* enable cp6, if necessary, to avoid taking the overhead of an
+ * undefined instruction trap
+ */
+ asm volatile (
+ "mrc p15, 0, %0, c15, c1, 0\n\t"
+- "ands %1, %0, #(1 << 6)\n\t"
++ "tst %0, #(1 << 6)\n\t"
+ "orreq %0, %0, #(1 << 6)\n\t"
+ "mcreq p15, 0, %0, c15, c1, 0\n\t"
+-#ifdef CONFIG_XSCALE
++#ifdef CONFIG_CPU_XSCALE
+ "mrceq p15, 0, %0, c15, c1, 0\n\t"
+ "moveq %0, %0\n\t"
+ "subeq pc, pc, #4\n\t"
+ #endif
+- : "=r"(temp1), "=r"(temp2) : : "cc");
++ : "=r"(temp) : : "cc");
+
+ offset = next_jiffy_time - read_tcr1();
+
+diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+index 837b041..ca3e1d3 100644
+--- a/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
++++ b/arch/i386/kernel/cpu/cpufreq/powernow-k7.c
+@@ -341,15 +341,17 @@ static int powernow_acpi_init(void)
+ pc.val = (unsigned long) acpi_processor_perf->states[0].control;
+ for (i = 0; i < number_scales; i++) {
+ u8 fid, vid;
+- unsigned int speed;
++ struct acpi_processor_px *state =
++ &acpi_processor_perf->states[i];
++ unsigned int speed, speed_mhz;
+
+- pc.val = (unsigned long) acpi_processor_perf->states[i].control;
++ pc.val = (unsigned long) state->control;
+ dprintk ("acpi: P%d: %d MHz %d mW %d uS control %08x SGTC %d\n",
+ i,
+- (u32) acpi_processor_perf->states[i].core_frequency,
+- (u32) acpi_processor_perf->states[i].power,
+- (u32) acpi_processor_perf->states[i].transition_latency,
+- (u32) acpi_processor_perf->states[i].control,
++ (u32) state->core_frequency,
++ (u32) state->power,
++ (u32) state->transition_latency,
++ (u32) state->control,
+ pc.bits.sgtc);
+
+ vid = pc.bits.vid;
+@@ -360,6 +362,18 @@ static int powernow_acpi_init(void)
+ powernow_table[i].index |= (vid << 8); /* upper 8 bits */
+
+ speed = powernow_table[i].frequency;
++ speed_mhz = speed / 1000;
++
++ /* processor_perflib will multiply the MHz value by 1000 to
++ * get a KHz value (e.g. 1266000). However, powernow-k7 works
++ * with true KHz values (e.g. 1266768). To ensure that all
++ * powernow frequencies are available, we must ensure that
++ * ACPI doesn't restrict them, so we round up the MHz value
++ * to ensure that perflib's computed KHz value is greater than
++ * or equal to powernow's KHz value.
++ */
++ if (speed % 1000 > 0)
++ speed_mhz++;
+
+ if ((fid_codes[fid] % 10)==5) {
+ if (have_a0 == 1)
+@@ -368,10 +382,16 @@ static int powernow_acpi_init(void)
+
+ dprintk (" FID: 0x%x (%d.%dx [%dMHz]) "
+ "VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10,
+- fid_codes[fid] % 10, speed/1000, vid,
++ fid_codes[fid] % 10, speed_mhz, vid,
+ mobile_vid_table[vid]/1000,
+ mobile_vid_table[vid]%1000);
+
++ if (state->core_frequency != speed_mhz) {
++ state->core_frequency = speed_mhz;
++ dprintk(" Corrected ACPI frequency to %d\n",
++ speed_mhz);
++ }
++
+ if (latency < pc.bits.sgtc)
+ latency = pc.bits.sgtc;
+
+@@ -602,7 +622,7 @@ static int __init powernow_cpu_init (struct cpufreq_policy *policy)
+ result = powernow_acpi_init();
+ if (result) {
+ printk (KERN_INFO PFX "ACPI and legacy methods failed\n");
+- printk (KERN_INFO PFX "See http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml\n");
++ printk (KERN_INFO PFX "See http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.html\n");
+ }
+ } else {
+ /* SGTC use the bus clock as timer */
+diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+index fe3b670..e295d87 100644
+--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
++++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
+@@ -521,7 +521,7 @@ static int check_supported_cpu(unsigned int cpu)
+
+ if ((eax & CPUID_XFAM) == CPUID_XFAM_K8) {
+ if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) ||
+- ((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) {
++ ((eax & CPUID_XMOD) > CPUID_XMOD_REV_MASK)) {
+ printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax);
+ goto out;
+ }
+diff --git a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
+index 0fb2a30..575541f 100644
+--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
++++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.h
+@@ -46,8 +46,8 @@ struct powernow_k8_data {
+ #define CPUID_XFAM 0x0ff00000 /* extended family */
+ #define CPUID_XFAM_K8 0
+ #define CPUID_XMOD 0x000f0000 /* extended model */
+-#define CPUID_XMOD_REV_G 0x00060000
+-#define CPUID_XFAM_10H 0x00100000 /* family 0x10 */
++#define CPUID_XMOD_REV_MASK 0x00080000
++#define CPUID_XFAM_10H 0x00100000 /* family 0x10 */
+ #define CPUID_USE_XFAM_XMOD 0x00000f00
+ #define CPUID_GET_MAX_CAPABILITIES 0x80000000
+ #define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
+diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c
+index fb9bf1e..f56569f 100644
+--- a/arch/sparc64/kernel/of_device.c
++++ b/arch/sparc64/kernel/of_device.c
+@@ -508,6 +508,13 @@ static int __init build_one_resource(struct device_node *parent,
+ return 0;
+ }
+
++ /* When we miss an I/O space match on PCI, just pass it up
++ * to the next PCI bridge and/or controller.
++ */
++ if (!strcmp(bus->name, "pci") &&
++ (addr[0] & 0x03000000) == 0x01000000)
++ return 0;
++
+ return 1;
+ }
+
+diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c
+index 0917c24..3494adf 100644
+--- a/arch/sparc64/kernel/prom.c
++++ b/arch/sparc64/kernel/prom.c
+@@ -1555,10 +1555,21 @@ static struct device_node * __init create_node(phandle node, struct device_node
+
+ static struct device_node * __init build_tree(struct device_node *parent, phandle node, struct device_node ***nextp)
+ {
++ struct device_node *ret = NULL, *prev_sibling = NULL;
+ struct device_node *dp;
+
+- dp = create_node(node, parent);
+- if (dp) {
++ while (1) {
++ dp = create_node(node, parent);
++ if (!dp)
++ break;
++
++ if (prev_sibling)
++ prev_sibling->sibling = dp;
++
++ if (!ret)
++ ret = dp;
++ prev_sibling = dp;
++
+ *(*nextp) = dp;
+ *nextp = &dp->allnext;
+
+@@ -1567,10 +1578,10 @@ static struct device_node * __init build_tree(struct device_node *parent, phandl
+
+ dp->child = build_tree(dp, prom_getchild(node), nextp);
+
+- dp->sibling = build_tree(parent, prom_getsibling(node), nextp);
++ node = prom_getsibling(node);
+ }
+
+- return dp;
++ return ret;
+ }
+
+ void __init prom_build_devicetree(void)
+diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
+index fc99f7b..8ad7bdb 100644
+--- a/arch/sparc64/kernel/smp.c
++++ b/arch/sparc64/kernel/smp.c
+@@ -566,6 +566,9 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t
+ unsigned long flags, status;
+ int cnt, retries, this_cpu, prev_sent, i;
+
++ if (cpus_empty(mask))
++ return;
++
+ /* We have to do this whole thing with interrupts fully disabled.
+ * Otherwise if we send an xcall from interrupt context it will
+ * corrupt both our mondo block and cpu list state.
+diff --git a/arch/x86_64/kernel/vsyscall.c b/arch/x86_64/kernel/vsyscall.c
+index b43c698..fc9f042 100644
+--- a/arch/x86_64/kernel/vsyscall.c
++++ b/arch/x86_64/kernel/vsyscall.c
+@@ -132,7 +132,7 @@ static __always_inline void do_vgettimeofday(struct timeval * tv)
+
+ /* convert to usecs and add to timespec: */
+ tv->tv_usec += nsec_delta / NSEC_PER_USEC;
+- while (tv->tv_usec > USEC_PER_SEC) {
++ while (tv->tv_usec >= USEC_PER_SEC) {
+ tv->tv_sec += 1;
+ tv->tv_usec -= USEC_PER_SEC;
+ }
+diff --git a/crypto/api.c b/crypto/api.c
+index 55af8bb..33734fd 100644
+--- a/crypto/api.c
++++ b/crypto/api.c
+@@ -48,8 +48,10 @@ EXPORT_SYMBOL_GPL(crypto_mod_get);
+
+ void crypto_mod_put(struct crypto_alg *alg)
+ {
++ struct module *module = alg->cra_module;
++
+ crypto_alg_put(alg);
+- module_put(alg->cra_module);
++ module_put(module);
+ }
+ EXPORT_SYMBOL_GPL(crypto_mod_put);
+
+diff --git a/drivers/acpi/tables/tbfadt.c b/drivers/acpi/tables/tbfadt.c
+index 807c711..d341491 100644
+--- a/drivers/acpi/tables/tbfadt.c
++++ b/drivers/acpi/tables/tbfadt.c
+@@ -347,6 +347,20 @@ static void acpi_tb_convert_fadt(void)
+ acpi_gbl_xpm1b_enable.space_id = acpi_gbl_FADT.xpm1a_event_block.space_id;
+
+ }
++ /*
++ * _CST object and C States change notification start with
++ * ACPI 2.0 (FADT r3). Although the field should be Reserved
++ * and 0 before then, some pre-r3 FADT set this field and
++ * it results in SMM-related boot failures. For them, clear it.
++ */
++ if ((acpi_gbl_FADT.header.revision < 3) &&
++ (acpi_gbl_FADT.cst_control != 0)) {
++ ACPI_WARNING((AE_INFO,
++ "Ignoring BIOS FADT r%u C-state control",
++ acpi_gbl_FADT.header.revision));
++ acpi_gbl_FADT.cst_control = 0;
++ }
++
+ }
+
+ /******************************************************************************
+diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
+index 2ffcca0..4d63974 100644
+--- a/drivers/ata/libata-sff.c
++++ b/drivers/ata/libata-sff.c
+@@ -557,12 +557,30 @@ ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int
+ int i, p = 0;
+ void __iomem * const *iomap;
+
++ /* Discard disabled ports. Some controllers show their
++ unused channels this way */
++ if (ata_resources_present(pdev, 0) == 0)
++ ports &= ~ATA_PORT_PRIMARY;
++ if (ata_resources_present(pdev, 1) == 0)
++ ports &= ~ATA_PORT_SECONDARY;
++
+ /* iomap BARs */
+- for (i = 0; i < 4; i++) {
+- if (pcim_iomap(pdev, i, 0) == NULL) {
+- dev_printk(KERN_ERR, &pdev->dev,
+- "failed to iomap PCI BAR %d\n", i);
+- return NULL;
++ if (ports & ATA_PORT_PRIMARY) {
++ for (i = 0; i <= 1; i++) {
++ if (pcim_iomap(pdev, i, 0) == NULL) {
++ dev_printk(KERN_ERR, &pdev->dev,
++ "failed to iomap PCI BAR %d\n", i);
++ return NULL;
++ }
++ }
++ }
++ if (ports & ATA_PORT_SECONDARY) {
++ for (i = 2; i <= 3; i++) {
++ if (pcim_iomap(pdev, i, 0) == NULL) {
++ dev_printk(KERN_ERR, &pdev->dev,
++ "failed to iomap PCI BAR %d\n", i);
++ return NULL;
++ }
+ }
+ }
+
+@@ -577,13 +595,6 @@ ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int
+ probe_ent->irq = pdev->irq;
+ probe_ent->irq_flags = IRQF_SHARED;
+
+- /* Discard disabled ports. Some controllers show their
+- unused channels this way */
+- if (ata_resources_present(pdev, 0) == 0)
+- ports &= ~ATA_PORT_PRIMARY;
+- if (ata_resources_present(pdev, 1) == 0)
+- ports &= ~ATA_PORT_SECONDARY;
+-
+ if (ports & ATA_PORT_PRIMARY) {
+ probe_ent->port[p].cmd_addr = iomap[0];
+ probe_ent->port[p].altstatus_addr =
+diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c
+index 598e6a2..ea6efca 100644
+--- a/drivers/ata/sata_via.c
++++ b/drivers/ata/sata_via.c
+@@ -97,6 +97,10 @@ static struct pci_driver svia_pci_driver = {
+ .name = DRV_NAME,
+ .id_table = svia_pci_tbl,
+ .probe = svia_init_one,
++#ifdef CONFIG_PM
++ .suspend = ata_pci_device_suspend,
++ .resume = ata_pci_device_resume,
++#endif
+ .remove = ata_pci_remove_one,
+ };
+
+@@ -116,6 +120,10 @@ static struct scsi_host_template svia_sht = {
+ .slave_configure = ata_scsi_slave_config,
+ .slave_destroy = ata_scsi_slave_destroy,
+ .bios_param = ata_std_bios_param,
++#ifdef CONFIG_PM
++ .suspend = ata_scsi_device_suspend,
++ .resume = ata_scsi_device_resume,
++#endif
+ };
+
+ static const struct ata_port_operations vt6420_sata_ops = {
+diff --git a/drivers/base/core.c b/drivers/base/core.c
+index d7fcf82..a8dfee2 100644
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -93,6 +93,9 @@ static void device_release(struct kobject * kobj)
+ {
+ struct device * dev = to_dev(kobj);
+
++ kfree(dev->devt_attr);
++ dev->devt_attr = NULL;
++
+ if (dev->release)
+ dev->release(dev);
+ else if (dev->type && dev->type->release)
+@@ -765,10 +768,8 @@ void device_del(struct device * dev)
+
+ if (parent)
+ klist_del(&dev->knode_parent);
+- if (dev->devt_attr) {
++ if (dev->devt_attr)
+ device_remove_file(dev, dev->devt_attr);
+- kfree(dev->devt_attr);
+- }
+ if (dev->class) {
+ sysfs_remove_link(&dev->kobj, "subsystem");
+ /* If this is not a "fake" compatible device, remove the
+diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
+index e221465..cc13ebc 100644
+--- a/drivers/char/ipmi/ipmi_si_intf.c
++++ b/drivers/char/ipmi/ipmi_si_intf.c
+@@ -1859,10 +1859,10 @@ static __devinit int try_init_acpi(struct SPMITable *spmi)
+
+ if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
+ info->io_setup = mem_setup;
+- info->io.addr_type = IPMI_IO_ADDR_SPACE;
++ info->io.addr_type = IPMI_MEM_ADDR_SPACE;
+ } else if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
+ info->io_setup = port_setup;
+- info->io.addr_type = IPMI_MEM_ADDR_SPACE;
++ info->io.addr_type = IPMI_IO_ADDR_SPACE;
+ } else {
+ kfree(info);
+ printk("ipmi_si: Unknown ACPI I/O Address type\n");
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index b9dc7aa..fa5b95b 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -760,7 +760,7 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
+
+ static void extract_buf(struct entropy_store *r, __u8 *out)
+ {
+- int i, x;
++ int i;
+ __u32 data[16], buf[5 + SHA_WORKSPACE_WORDS];
+
+ sha_init(buf);
+@@ -772,9 +772,11 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
+ * attempts to find previous ouputs), unless the hash
+ * function can be inverted.
+ */
+- for (i = 0, x = 0; i < r->poolinfo->poolwords; i += 16, x+=2) {
+- sha_transform(buf, (__u8 *)r->pool+i, buf + 5);
+- add_entropy_words(r, &buf[x % 5], 1);
++ for (i = 0; i < r->poolinfo->poolwords; i += 16) {
++ /* hash blocks of 16 words = 512 bits */
++ sha_transform(buf, (__u8 *)(r->pool + i), buf + 5);
++ /* feed back portion of the resulting hash */
++ add_entropy_words(r, &buf[i % 5], 1);
+ }
+
+ /*
+@@ -782,7 +784,7 @@ static void extract_buf(struct entropy_store *r, __u8 *out)
+ * portion of the pool while mixing, and hash one
+ * final time.
+ */
+- __add_entropy_words(r, &buf[x % 5], 1, data);
++ __add_entropy_words(r, &buf[i % 5], 1, data);
+ sha_transform(buf, (__u8 *)data, buf + 5);
+
+ /*
+@@ -1022,37 +1024,44 @@ random_poll(struct file *file, poll_table * wait)
+ return mask;
+ }
+
+-static ssize_t
+-random_write(struct file * file, const char __user * buffer,
+- size_t count, loff_t *ppos)
++static int
++write_pool(struct entropy_store *r, const char __user *buffer, size_t count)
+ {
+- int ret = 0;
+ size_t bytes;
+ __u32 buf[16];
+ const char __user *p = buffer;
+- size_t c = count;
+
+- while (c > 0) {
+- bytes = min(c, sizeof(buf));
++ while (count > 0) {
++ bytes = min(count, sizeof(buf));
++ if (copy_from_user(&buf, p, bytes))
++ return -EFAULT;
+
+- bytes -= copy_from_user(&buf, p, bytes);
+- if (!bytes) {
+- ret = -EFAULT;
+- break;
+- }
+- c -= bytes;
++ count -= bytes;
+ p += bytes;
+
+- add_entropy_words(&input_pool, buf, (bytes + 3) / 4);
+- }
+- if (p == buffer) {
+- return (ssize_t)ret;
+- } else {
+- struct inode *inode = file->f_path.dentry->d_inode;
+- inode->i_mtime = current_fs_time(inode->i_sb);
+- mark_inode_dirty(inode);
+- return (ssize_t)(p - buffer);
++ add_entropy_words(r, buf, (bytes + 3) / 4);
+ }
++
++ return 0;
++}
++
++static ssize_t
++random_write(struct file * file, const char __user * buffer,
++ size_t count, loff_t *ppos)
++{
++ size_t ret;
++ struct inode *inode = file->f_path.dentry->d_inode;
++
++ ret = write_pool(&blocking_pool, buffer, count);
++ if (ret)
++ return ret;
++ ret = write_pool(&nonblocking_pool, buffer, count);
++ if (ret)
++ return ret;
++
++ inode->i_mtime = current_fs_time(inode->i_sb);
++ mark_inode_dirty(inode);
++ return (ssize_t)count;
+ }
+
+ static int
+@@ -1091,8 +1100,8 @@ random_ioctl(struct inode * inode, struct file * file,
+ return -EINVAL;
+ if (get_user(size, p++))
+ return -EFAULT;
+- retval = random_write(file, (const char __user *) p,
+- size, &file->f_pos);
++ retval = write_pool(&input_pool, (const char __user *)p,
++ size);
+ if (retval < 0)
+ return retval;
+ credit_entropy_store(&input_pool, ent_count);
+diff --git a/drivers/crypto/geode-aes.c b/drivers/crypto/geode-aes.c
+index 6d3840e..6a86958 100644
+--- a/drivers/crypto/geode-aes.c
++++ b/drivers/crypto/geode-aes.c
+@@ -102,10 +102,15 @@ geode_aes_crypt(struct geode_aes_op *op)
+ u32 flags = 0;
+ unsigned long iflags;
+
+- if (op->len == 0 || op->src == op->dst)
++ if (op->len == 0)
+ return 0;
+
+- if (op->flags & AES_FLAGS_COHERENT)
++ /* If the source and destination is the same, then
++ * we need to turn on the coherent flags, otherwise
++ * we don't need to worry
++ */
++
++ if (op->src == op->dst)
+ flags |= (AES_CTRL_DCA | AES_CTRL_SCA);
+
+ if (op->dir == AES_DIR_ENCRYPT)
+@@ -120,7 +125,7 @@ geode_aes_crypt(struct geode_aes_op *op)
+ _writefield(AES_WRITEIV0_REG, op->iv);
+ }
+
+- if (op->flags & AES_FLAGS_USRKEY) {
++ if (!(op->flags & AES_FLAGS_HIDDENKEY)) {
+ flags |= AES_CTRL_WRKEY;
+ _writefield(AES_WRITEKEY0_REG, op->key);
+ }
+@@ -289,6 +294,7 @@ static struct crypto_alg geode_cbc_alg = {
+ .setkey = geode_setkey,
+ .encrypt = geode_cbc_encrypt,
+ .decrypt = geode_cbc_decrypt,
++ .ivsize = AES_IV_LENGTH,
+ }
+ }
+ };
+diff --git a/drivers/crypto/geode-aes.h b/drivers/crypto/geode-aes.h
+index 8003a36..f479686 100644
+--- a/drivers/crypto/geode-aes.h
++++ b/drivers/crypto/geode-aes.h
+@@ -20,8 +20,7 @@
+ #define AES_DIR_DECRYPT 0
+ #define AES_DIR_ENCRYPT 1
+
+-#define AES_FLAGS_USRKEY (1 << 0)
+-#define AES_FLAGS_COHERENT (1 << 1)
++#define AES_FLAGS_HIDDENKEY (1 << 0)
+
+ struct geode_aes_op {
+
+diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
+index 97ee870..3a95cc5 100644
+--- a/drivers/md/raid1.c
++++ b/drivers/md/raid1.c
+@@ -271,21 +271,25 @@ static int raid1_end_read_request(struct bio *bio, unsigned int bytes_done, int
+ */
+ update_head_pos(mirror, r1_bio);
+
+- if (uptodate || (conf->raid_disks - conf->mddev->degraded) <= 1) {
+- /*
+- * Set R1BIO_Uptodate in our master bio, so that
+- * we will return a good error code for to the higher
+- * levels even if IO on some other mirrored buffer fails.
+- *
+- * The 'master' represents the composite IO operation to
+- * user-side. So if something waits for IO, then it will
+- * wait for the 'master' bio.
++ if (uptodate)
++ set_bit(R1BIO_Uptodate, &r1_bio->state);
++ else {
++ /* If all other devices have failed, we want to return
++ * the error upwards rather than fail the last device.
++ * Here we redefine "uptodate" to mean "Don't want to retry"
+ */
+- if (uptodate)
+- set_bit(R1BIO_Uptodate, &r1_bio->state);
++ unsigned long flags;
++ spin_lock_irqsave(&conf->device_lock, flags);
++ if (r1_bio->mddev->degraded == conf->raid_disks ||
++ (r1_bio->mddev->degraded == conf->raid_disks-1 &&
++ !test_bit(Faulty, &conf->mirrors[mirror].rdev->flags)))
++ uptodate = 1;
++ spin_unlock_irqrestore(&conf->device_lock, flags);
++ }
+
++ if (uptodate)
+ raid_end_bio_io(r1_bio);
+- } else {
++ else {
+ /*
+ * oops, read error:
+ */
+@@ -992,13 +996,14 @@ static void error(mddev_t *mddev, mdk_rdev_t *rdev)
+ unsigned long flags;
+ spin_lock_irqsave(&conf->device_lock, flags);
+ mddev->degraded++;
++ set_bit(Faulty, &rdev->flags);
+ spin_unlock_irqrestore(&conf->device_lock, flags);
+ /*
+ * if recovery is running, make sure it aborts.
+ */
+ set_bit(MD_RECOVERY_ERR, &mddev->recovery);
+- }
+- set_bit(Faulty, &rdev->flags);
++ } else
++ set_bit(Faulty, &rdev->flags);
+ set_bit(MD_CHANGE_DEVS, &mddev->flags);
+ printk(KERN_ALERT "raid1: Disk failure on %s, disabling device. \n"
+ " Operation continuing on %d devices\n",
+diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c
+index 85f21b5..2eb5741 100644
+--- a/drivers/message/fusion/mptspi.c
++++ b/drivers/message/fusion/mptspi.c
+@@ -726,13 +726,15 @@ static int mptspi_slave_configure(struct scsi_device *sdev)
+ struct _MPT_SCSI_HOST *hd =
+ (struct _MPT_SCSI_HOST *)sdev->host->hostdata;
+ VirtTarget *vtarget = scsi_target(sdev)->hostdata;
+- int ret = mptscsih_slave_configure(sdev);
++ int ret;
++
++ mptspi_initTarget(hd, vtarget, sdev);
++
++ ret = mptscsih_slave_configure(sdev);
+
+ if (ret)
+ return ret;
+
+- mptspi_initTarget(hd, vtarget, sdev);
+-
+ ddvprintk((MYIOC_s_INFO_FMT "id=%d min_period=0x%02x"
+ " max_offset=0x%02x max_width=%d\n", hd->ioc->name,
+ sdev->id, spi_min_period(scsi_target(sdev)),
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index a3d46ea..32a3003 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -2929,11 +2929,6 @@ endif #NETDEVICES
+ config NETPOLL
+ def_bool NETCONSOLE
+
+-config NETPOLL_RX
+- bool "Netpoll support for trapping incoming packets"
+- default n
+- depends on NETPOLL
+-
+ config NETPOLL_TRAP
+ bool "Netpoll traffic trapping"
+ default n
+diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
+index e85f5ec..5006c67 100644
+--- a/drivers/net/bnx2.c
++++ b/drivers/net/bnx2.c
+@@ -54,8 +54,8 @@
+
+ #define DRV_MODULE_NAME "bnx2"
+ #define PFX DRV_MODULE_NAME ": "
+-#define DRV_MODULE_VERSION "1.5.8"
+-#define DRV_MODULE_RELDATE "April 24, 2007"
++#define DRV_MODULE_VERSION "1.5.8.1"
++#define DRV_MODULE_RELDATE "May 7, 2007"
+
+ #define RUN_AT(x) (jiffies + (x))
+
+@@ -4510,8 +4510,7 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ vlan_tag_flags |=
+ (TX_BD_FLAGS_VLAN_TAG | (vlan_tx_tag_get(skb) << 16));
+ }
+- if ((mss = skb_shinfo(skb)->gso_size) &&
+- (skb->len > (bp->dev->mtu + ETH_HLEN))) {
++ if ((mss = skb_shinfo(skb)->gso_size)) {
+ u32 tcp_opt_len, ip_tcp_len;
+
+ if (skb_header_cloned(skb) &&
+@@ -5565,6 +5564,9 @@ bnx2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ case SIOCGMIIREG: {
+ u32 mii_regval;
+
++ if (!netif_running(dev))
++ return -EAGAIN;
++
+ spin_lock_bh(&bp->phy_lock);
+ err = bnx2_read_phy(bp, data->reg_num & 0x1f, &mii_regval);
+ spin_unlock_bh(&bp->phy_lock);
+@@ -5578,6 +5580,9 @@ bnx2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+
++ if (!netif_running(dev))
++ return -EAGAIN;
++
+ spin_lock_bh(&bp->phy_lock);
+ err = bnx2_write_phy(bp, data->reg_num & 0x1f, data->val_in);
+ spin_unlock_bh(&bp->phy_lock);
+@@ -6143,6 +6148,7 @@ bnx2_suspend(struct pci_dev *pdev, pm_message_t state)
+ reset_code = BNX2_DRV_MSG_CODE_SUSPEND_NO_WOL;
+ bnx2_reset_chip(bp, reset_code);
+ bnx2_free_skbs(bp);
++ pci_save_state(pdev);
+ bnx2_set_power_state(bp, pci_choose_state(pdev, state));
+ return 0;
+ }
+@@ -6156,6 +6162,7 @@ bnx2_resume(struct pci_dev *pdev)
+ if (!netif_running(dev))
+ return 0;
+
++ pci_restore_state(pdev);
+ bnx2_set_power_state(bp, PCI_D0);
+ netif_device_attach(dev);
+ bnx2_init_nic(bp);
+diff --git a/drivers/net/sis900.c b/drivers/net/sis900.c
+index b2a3b19..ce547af 100644
+--- a/drivers/net/sis900.c
++++ b/drivers/net/sis900.c
+@@ -1754,6 +1754,7 @@ static int sis900_rx(struct net_device *net_dev)
+ sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
+ } else {
+ struct sk_buff * skb;
++ struct sk_buff * rx_skb;
+
+ pci_unmap_single(sis_priv->pci_dev,
+ sis_priv->rx_ring[entry].bufptr, RX_BUF_SIZE,
+@@ -1787,10 +1788,10 @@ static int sis900_rx(struct net_device *net_dev)
+ }
+
+ /* give the socket buffer to upper layers */
+- skb = sis_priv->rx_skbuff[entry];
+- skb_put(skb, rx_size);
+- skb->protocol = eth_type_trans(skb, net_dev);
+- netif_rx(skb);
++ rx_skb = sis_priv->rx_skbuff[entry];
++ skb_put(rx_skb, rx_size);
++ rx_skb->protocol = eth_type_trans(rx_skb, net_dev);
++ netif_rx(rx_skb);
+
+ /* some network statistics */
+ if ((rx_status & BCAST) == MCAST)
+diff --git a/drivers/net/skge.c b/drivers/net/skge.c
+index d476a3c..5ef9023 100644
+--- a/drivers/net/skge.c
++++ b/drivers/net/skge.c
+@@ -135,10 +135,13 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs,
+ /* Wake on Lan only supported on Yukon chips with rev 1 or above */
+ static u32 wol_supported(const struct skge_hw *hw)
+ {
+- if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev != 0)
+- return WAKE_MAGIC | WAKE_PHY;
+- else
++ if (hw->chip_id == CHIP_ID_GENESIS)
++ return 0;
++
++ if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev == 0)
+ return 0;
++
++ return WAKE_MAGIC | WAKE_PHY;
+ }
+
+ static u32 pci_wake_enabled(struct pci_dev *dev)
+@@ -3583,7 +3586,9 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
+ skge->duplex = -1;
+ skge->speed = -1;
+ skge->advertising = skge_supported_modes(hw);
+- skge->wol = pci_wake_enabled(hw->pdev) ? wol_supported(hw) : 0;
++
++ if (pci_wake_enabled(hw->pdev))
++ skge->wol = wol_supported(hw) & WAKE_MAGIC;
+
+ hw->dev[port] = dev;
+
+@@ -3789,6 +3794,9 @@ static int skge_suspend(struct pci_dev *pdev, pm_message_t state)
+ struct skge_hw *hw = pci_get_drvdata(pdev);
+ int i, err, wol = 0;
+
++ if (!hw)
++ return 0;
++
+ err = pci_save_state(pdev);
+ if (err)
+ return err;
+@@ -3817,6 +3825,9 @@ static int skge_resume(struct pci_dev *pdev)
+ struct skge_hw *hw = pci_get_drvdata(pdev);
+ int i, err;
+
++ if (!hw)
++ return 0;
++
+ err = pci_set_power_state(pdev, PCI_D0);
+ if (err)
+ goto out;
+@@ -3855,6 +3866,9 @@ static void skge_shutdown(struct pci_dev *pdev)
+ struct skge_hw *hw = pci_get_drvdata(pdev);
+ int i, wol = 0;
+
++ if (!hw)
++ return;
++
+ for (i = 0; i < hw->ports; i++) {
+ struct net_device *dev = hw->dev[i];
+ struct skge_port *skge = netdev_priv(dev);
+diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
+index ac36152..b6b444b 100644
+--- a/drivers/net/sky2.c
++++ b/drivers/net/sky2.c
+@@ -123,16 +123,13 @@ static const struct pci_device_id sky2_id_table[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4361) }, /* 88E8050 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4362) }, /* 88E8053 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4363) }, /* 88E8055 */
+-#ifdef broken
+- /* This device causes data corruption problems that are not resolved */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4364) }, /* 88E8056 */
+-#endif
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4366) }, /* 88EC036 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4367) }, /* 88EC032 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4368) }, /* 88EC034 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4369) }, /* 88EC042 */
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436A) }, /* 88E8058 */
+- { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436B) }, /* 88E8071 */
++// { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x436B) }, /* 88E8071 */
+ { 0 }
+ };
+
+@@ -3722,6 +3719,7 @@ err_out_free_regions:
+ pci_release_regions(pdev);
+ pci_disable_device(pdev);
+ err_out:
++ pci_set_drvdata(pdev, NULL);
+ return err;
+ }
+
+@@ -3774,6 +3772,9 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state)
+ struct sky2_hw *hw = pci_get_drvdata(pdev);
+ int i, wol = 0;
+
++ if (!hw)
++ return 0;
++
+ del_timer_sync(&hw->idle_timer);
+ netif_poll_disable(hw->dev[0]);
+
+@@ -3805,6 +3806,9 @@ static int sky2_resume(struct pci_dev *pdev)
+ struct sky2_hw *hw = pci_get_drvdata(pdev);
+ int i, err;
+
++ if (!hw)
++ return 0;
++
+ err = pci_set_power_state(pdev, PCI_D0);
+ if (err)
+ goto out;
+@@ -3851,6 +3855,9 @@ static void sky2_shutdown(struct pci_dev *pdev)
+ struct sky2_hw *hw = pci_get_drvdata(pdev);
+ int i, wol = 0;
+
++ if (!hw)
++ return;
++
+ del_timer_sync(&hw->idle_timer);
+ netif_poll_disable(hw->dev[0]);
+
+diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
+index c956141..0b89812 100644
+--- a/drivers/net/smc911x.c
++++ b/drivers/net/smc911x.c
+@@ -499,7 +499,7 @@ static inline void smc911x_rcv(struct net_device *dev)
+ SMC_SET_RX_CFG(RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_));
+ SMC_PULL_DATA(data, pkt_len+2+3);
+
+- DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name,);
++ DBG(SMC_DEBUG_PKTS, "%s: Received packet\n", dev->name);
+ PRINT_PKT(data, ((pkt_len - 4) <= 64) ? pkt_len - 4 : 64);
+ dev->last_rx = jiffies;
+ skb->dev = dev;
+diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
+index 256969e..3d20115 100644
+--- a/drivers/net/tg3.c
++++ b/drivers/net/tg3.c
+@@ -64,8 +64,8 @@
+
+ #define DRV_MODULE_NAME "tg3"
+ #define PFX DRV_MODULE_NAME ": "
+-#define DRV_MODULE_VERSION "3.75"
+-#define DRV_MODULE_RELDATE "March 23, 2007"
++#define DRV_MODULE_VERSION "3.75.1"
++#define DRV_MODULE_RELDATE "May 7, 2007"
+
+ #define TG3_DEF_MAC_MODE 0
+ #define TG3_DEF_RX_MODE 0
+@@ -3895,8 +3895,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ entry = tp->tx_prod;
+ base_flags = 0;
+ mss = 0;
+- if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
+- (mss = skb_shinfo(skb)->gso_size) != 0) {
++ if ((mss = skb_shinfo(skb)->gso_size) != 0) {
+ int tcp_opt_len, ip_tcp_len;
+
+ if (skb_header_cloned(skb) &&
+@@ -4053,8 +4052,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
+ if (skb->ip_summed == CHECKSUM_PARTIAL)
+ base_flags |= TXD_FLAG_TCPUDP_CSUM;
+ mss = 0;
+- if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
+- (mss = skb_shinfo(skb)->gso_size) != 0) {
++ if ((mss = skb_shinfo(skb)->gso_size) != 0) {
+ int tcp_opt_len, ip_tcp_len, hdr_len;
+
+ if (skb_header_cloned(skb) &&
+@@ -5936,7 +5934,7 @@ static int tg3_load_tso_firmware(struct tg3 *tp)
+
+
+ /* tp->lock is held. */
+-static void __tg3_set_mac_addr(struct tg3 *tp)
++static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
+ {
+ u32 addr_high, addr_low;
+ int i;
+@@ -5948,6 +5946,8 @@ static void __tg3_set_mac_addr(struct tg3 *tp)
+ (tp->dev->dev_addr[4] << 8) |
+ (tp->dev->dev_addr[5] << 0));
+ for (i = 0; i < 4; i++) {
++ if (i == 1 && skip_mac_1)
++ continue;
+ tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
+ tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
+ }
+@@ -5974,7 +5974,7 @@ static int tg3_set_mac_addr(struct net_device *dev, void *p)
+ {
+ struct tg3 *tp = netdev_priv(dev);
+ struct sockaddr *addr = p;
+- int err = 0;
++ int err = 0, skip_mac_1 = 0;
+
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EINVAL;
+@@ -5985,22 +5985,21 @@ static int tg3_set_mac_addr(struct net_device *dev, void *p)
+ return 0;
+
+ if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
+- /* Reset chip so that ASF can re-init any MAC addresses it
+- * needs.
+- */
+- tg3_netif_stop(tp);
+- tg3_full_lock(tp, 1);
++ u32 addr0_high, addr0_low, addr1_high, addr1_low;
+
+- tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
+- err = tg3_restart_hw(tp, 0);
+- if (!err)
+- tg3_netif_start(tp);
+- tg3_full_unlock(tp);
+- } else {
+- spin_lock_bh(&tp->lock);
+- __tg3_set_mac_addr(tp);
+- spin_unlock_bh(&tp->lock);
++ addr0_high = tr32(MAC_ADDR_0_HIGH);
++ addr0_low = tr32(MAC_ADDR_0_LOW);
++ addr1_high = tr32(MAC_ADDR_1_HIGH);
++ addr1_low = tr32(MAC_ADDR_1_LOW);
++
++ /* Skip MAC addr 1 if ASF is using it. */
++ if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
++ !(addr1_high == 0 && addr1_low == 0))
++ skip_mac_1 = 1;
+ }
++ spin_lock_bh(&tp->lock);
++ __tg3_set_mac_addr(tp, skip_mac_1);
++ spin_unlock_bh(&tp->lock);
+
+ return err;
+ }
+@@ -6317,7 +6316,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
+ tp->rx_jumbo_ptr);
+
+ /* Initialize MAC address and backoff seed. */
+- __tg3_set_mac_addr(tp);
++ __tg3_set_mac_addr(tp, 0);
+
+ /* MTU + ethernet header + FCS + optional VLAN tag */
+ tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
+@@ -6348,8 +6347,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
+ tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
+ (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) {
+ if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE &&
+- (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
+- tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
++ GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
+ rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
+ } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
+ !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+index 65d6f23..5af9125 100644
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -1737,18 +1737,20 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
+ quirk_nvidia_ck804_pcie_aer_ext_cap);
+
+ #ifdef CONFIG_PCI_MSI
+-/* The Serverworks PCI-X chipset does not support MSI. We cannot easily rely
+- * on setting PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
+- * some other busses controlled by the chipset even if Linux is not aware of it.
+- * Instead of setting the flag on all busses in the machine, simply disable MSI
+- * globally.
++/* Some chipsets do not support MSI. We cannot easily rely on setting
++ * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
++ * some other busses controlled by the chipset even if Linux is not
++ * aware of it. Instead of setting the flag on all busses in the
++ * machine, simply disable MSI globally.
+ */
+-static void __init quirk_svw_msi(struct pci_dev *dev)
++static void __init quirk_disable_all_msi(struct pci_dev *dev)
+ {
+ pci_no_msi();
+ printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n");
+ }
+-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_svw_msi);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
+
+ /* Disable MSI on chipsets that are known to not support it */
+ static void __devinit quirk_disable_msi(struct pci_dev *dev)
+diff --git a/drivers/serial/sunhv.c b/drivers/serial/sunhv.c
+index 40d4856..c3a6bd2 100644
+--- a/drivers/serial/sunhv.c
++++ b/drivers/serial/sunhv.c
+@@ -493,6 +493,10 @@ static struct of_device_id hv_match[] = {
+ .name = "console",
+ .compatible = "qcn",
+ },
++ {
++ .name = "console",
++ .compatible = "SUNW,sun4v-console",
++ },
+ {},
+ };
+ MODULE_DEVICE_TABLE(of, hv_match);
+diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c
+index 3dfa3e4..3257d94 100644
+--- a/drivers/usb/atm/cxacru.c
++++ b/drivers/usb/atm/cxacru.c
+@@ -146,6 +146,12 @@ enum cxacru_info_idx {
+ CXINF_MAX = 0x1c,
+ };
+
++enum poll_state {
++ CX_INIT,
++ CX_POLLING,
++ CX_ABORT
++};
++
+ struct cxacru_modem_type {
+ u32 pll_f_clk;
+ u32 pll_b_clk;
+@@ -159,6 +165,8 @@ struct cxacru_data {
+
+ int line_status;
+ struct delayed_work poll_work;
++ struct mutex poll_state_serialize;
++ enum poll_state poll_state;
+
+ /* contol handles */
+ struct mutex cm_serialize;
+@@ -356,7 +364,7 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance,
+ /*
+ struct atm_dev *atm_dev = usbatm_instance->atm_dev;
+ */
+- int ret;
++ int ret, start_polling = 1;
+
+ dbg("cxacru_atm_start");
+
+@@ -376,7 +384,15 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance,
+ }
+
+ /* Start status polling */
+- cxacru_poll_status(&instance->poll_work.work);
++ mutex_lock(&instance->poll_state_serialize);
++ if (instance->poll_state == CX_INIT)
++ instance->poll_state = CX_POLLING;
++ else /* poll_state == CX_ABORT */
++ start_polling = 0;
++ mutex_unlock(&instance->poll_state_serialize);
++
++ if (start_polling)
++ cxacru_poll_status(&instance->poll_work.work);
+ return 0;
+ }
+
+@@ -685,6 +701,9 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
+ instance->usbatm = usbatm_instance;
+ instance->modem_type = (struct cxacru_modem_type *) id->driver_info;
+
++ mutex_init(&instance->poll_state_serialize);
++ instance->poll_state = CX_INIT;
++
+ instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL);
+ if (!instance->rcv_buf) {
+ dbg("cxacru_bind: no memory for rcv_buf");
+@@ -744,6 +763,7 @@ static void cxacru_unbind(struct usbatm_data *usbatm_instance,
+ struct usb_interface *intf)
+ {
+ struct cxacru_data *instance = usbatm_instance->driver_data;
++ int stop_polling = 1;
+
+ dbg("cxacru_unbind entered");
+
+@@ -752,8 +772,20 @@ static void cxacru_unbind(struct usbatm_data *usbatm_instance,
+ return;
+ }
+
+- while (!cancel_delayed_work(&instance->poll_work))
+- flush_scheduled_work();
++ mutex_lock(&instance->poll_state_serialize);
++ if (instance->poll_state != CX_POLLING) {
++ /* Polling hasn't started yet and with
++ * the mutex locked it can be prevented
++ * from starting.
++ */
++ instance->poll_state = CX_ABORT;
++ stop_polling = 0;
++ }
++ mutex_unlock(&instance->poll_state_serialize);
++
++ if (stop_polling)
++ while (!cancel_delayed_work(&instance->poll_work))
++ flush_scheduled_work();
+
+ usb_kill_urb(instance->snd_urb);
+ usb_kill_urb(instance->rcv_urb);
+diff --git a/drivers/usb/input/hiddev.c b/drivers/usb/input/hiddev.c
+index a8b3d66..488d61b 100644
+--- a/drivers/usb/input/hiddev.c
++++ b/drivers/usb/input/hiddev.c
+@@ -51,6 +51,7 @@ struct hiddev {
+ wait_queue_head_t wait;
+ struct hid_device *hid;
+ struct list_head list;
++ spinlock_t list_lock;
+ };
+
+ struct hiddev_list {
+@@ -161,7 +162,9 @@ static void hiddev_send_event(struct hid_device *hid,
+ {
+ struct hiddev *hiddev = hid->hiddev;
+ struct hiddev_list *list;
++ unsigned long flags;
+
++ spin_lock_irqsave(&hiddev->list_lock, flags);
+ list_for_each_entry(list, &hiddev->list, node) {
+ if (uref->field_index != HID_FIELD_INDEX_NONE ||
+ (list->flags & HIDDEV_FLAG_REPORT) != 0) {
+@@ -171,6 +174,7 @@ static void hiddev_send_event(struct hid_device *hid,
+ kill_fasync(&list->fasync, SIGIO, POLL_IN);
+ }
+ }
++ spin_unlock_irqrestore(&hiddev->list_lock, flags);
+
+ wake_up_interruptible(&hiddev->wait);
+ }
+@@ -235,9 +239,13 @@ static int hiddev_fasync(int fd, struct file *file, int on)
+ static int hiddev_release(struct inode * inode, struct file * file)
+ {
+ struct hiddev_list *list = file->private_data;
++ unsigned long flags;
+
+ hiddev_fasync(-1, file, 0);
++
++ spin_lock_irqsave(&list->hiddev->list_lock, flags);
+ list_del(&list->node);
++ spin_unlock_irqrestore(&list->hiddev->list_lock, flags);
+
+ if (!--list->hiddev->open) {
+ if (list->hiddev->exist)
+@@ -257,6 +265,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
+ static int hiddev_open(struct inode *inode, struct file *file)
+ {
+ struct hiddev_list *list;
++ unsigned long flags;
+
+ int i = iminor(inode) - HIDDEV_MINOR_BASE;
+
+@@ -267,7 +276,11 @@ static int hiddev_open(struct inode *inode, struct file *file)
+ return -ENOMEM;
+
+ list->hiddev = hiddev_table[i];
++
++ spin_lock_irqsave(&list->hiddev->list_lock, flags);
+ list_add_tail(&list->node, &hiddev_table[i]->list);
++ spin_unlock_irqrestore(&list->hiddev->list_lock, flags);
++
+ file->private_data = list;
+
+ if (!list->hiddev->open++)
+@@ -773,6 +786,7 @@ int hiddev_connect(struct hid_device *hid)
+
+ init_waitqueue_head(&hiddev->wait);
+ INIT_LIST_HEAD(&hiddev->list);
++ spin_lock_init(&hiddev->list_lock);
+ hiddev->hid = hid;
+ hiddev->exist = 1;
+
+diff --git a/fs/fat/dir.c b/fs/fat/dir.c
+index c16af24..ccf161d 100644
+--- a/fs/fat/dir.c
++++ b/fs/fat/dir.c
+@@ -422,7 +422,7 @@ EODir:
+ EXPORT_SYMBOL_GPL(fat_search_long);
+
+ struct fat_ioctl_filldir_callback {
+- struct dirent __user *dirent;
++ void __user *dirent;
+ int result;
+ /* for dir ioctl */
+ const char *longname;
+@@ -647,62 +647,85 @@ static int fat_readdir(struct file *filp, void *dirent, filldir_t filldir)
+ return __fat_readdir(inode, filp, dirent, filldir, 0, 0);
+ }
+
+-static int fat_ioctl_filldir(void *__buf, const char *name, int name_len,
+- loff_t offset, u64 ino, unsigned int d_type)
++#define FAT_IOCTL_FILLDIR_FUNC(func, dirent_type) \
++static int func(void *__buf, const char *name, int name_len, \
++ loff_t offset, u64 ino, unsigned int d_type) \
++{ \
++ struct fat_ioctl_filldir_callback *buf = __buf; \
++ struct dirent_type __user *d1 = buf->dirent; \
++ struct dirent_type __user *d2 = d1 + 1; \
++ \
++ if (buf->result) \
++ return -EINVAL; \
++ buf->result++; \
++ \
++ if (name != NULL) { \
++ /* dirent has only short name */ \
++ if (name_len >= sizeof(d1->d_name)) \
++ name_len = sizeof(d1->d_name) - 1; \
++ \
++ if (put_user(0, d2->d_name) || \
++ put_user(0, &d2->d_reclen) || \
++ copy_to_user(d1->d_name, name, name_len) || \
++ put_user(0, d1->d_name + name_len) || \
++ put_user(name_len, &d1->d_reclen)) \
++ goto efault; \
++ } else { \
++ /* dirent has short and long name */ \
++ const char *longname = buf->longname; \
++ int long_len = buf->long_len; \
++ const char *shortname = buf->shortname; \
++ int short_len = buf->short_len; \
++ \
++ if (long_len >= sizeof(d1->d_name)) \
++ long_len = sizeof(d1->d_name) - 1; \
++ if (short_len >= sizeof(d1->d_name)) \
++ short_len = sizeof(d1->d_name) - 1; \
++ \
++ if (copy_to_user(d2->d_name, longname, long_len) || \
++ put_user(0, d2->d_name + long_len) || \
++ put_user(long_len, &d2->d_reclen) || \
++ put_user(ino, &d2->d_ino) || \
++ put_user(offset, &d2->d_off) || \
++ copy_to_user(d1->d_name, shortname, short_len) || \
++ put_user(0, d1->d_name + short_len) || \
++ put_user(short_len, &d1->d_reclen)) \
++ goto efault; \
++ } \
++ return 0; \
++efault: \
++ buf->result = -EFAULT; \
++ return -EFAULT; \
++}
++
++FAT_IOCTL_FILLDIR_FUNC(fat_ioctl_filldir, dirent)
++
++static int fat_ioctl_readdir(struct inode *inode, struct file *filp,
++ void __user *dirent, filldir_t filldir,
++ int short_only, int both)
+ {
+- struct fat_ioctl_filldir_callback *buf = __buf;
+- struct dirent __user *d1 = buf->dirent;
+- struct dirent __user *d2 = d1 + 1;
+-
+- if (buf->result)
+- return -EINVAL;
+- buf->result++;
+-
+- if (name != NULL) {
+- /* dirent has only short name */
+- if (name_len >= sizeof(d1->d_name))
+- name_len = sizeof(d1->d_name) - 1;
+-
+- if (put_user(0, d2->d_name) ||
+- put_user(0, &d2->d_reclen) ||
+- copy_to_user(d1->d_name, name, name_len) ||
+- put_user(0, d1->d_name + name_len) ||
+- put_user(name_len, &d1->d_reclen))
+- goto efault;
+- } else {
+- /* dirent has short and long name */
+- const char *longname = buf->longname;
+- int long_len = buf->long_len;
+- const char *shortname = buf->shortname;
+- int short_len = buf->short_len;
+-
+- if (long_len >= sizeof(d1->d_name))
+- long_len = sizeof(d1->d_name) - 1;
+- if (short_len >= sizeof(d1->d_name))
+- short_len = sizeof(d1->d_name) - 1;
+-
+- if (copy_to_user(d2->d_name, longname, long_len) ||
+- put_user(0, d2->d_name + long_len) ||
+- put_user(long_len, &d2->d_reclen) ||
+- put_user(ino, &d2->d_ino) ||
+- put_user(offset, &d2->d_off) ||
+- copy_to_user(d1->d_name, shortname, short_len) ||
+- put_user(0, d1->d_name + short_len) ||
+- put_user(short_len, &d1->d_reclen))
+- goto efault;
++ struct fat_ioctl_filldir_callback buf;
++ int ret;
++
++ buf.dirent = dirent;
++ buf.result = 0;
++ mutex_lock(&inode->i_mutex);
++ ret = -ENOENT;
++ if (!IS_DEADDIR(inode)) {
++ ret = __fat_readdir(inode, filp, &buf, filldir,
++ short_only, both);
+ }
+- return 0;
+-efault:
+- buf->result = -EFAULT;
+- return -EFAULT;
++ mutex_unlock(&inode->i_mutex);
++ if (ret >= 0)
++ ret = buf.result;
++ return ret;
+ }
+
+-static int fat_dir_ioctl(struct inode * inode, struct file * filp,
+- unsigned int cmd, unsigned long arg)
++static int fat_dir_ioctl(struct inode *inode, struct file *filp,
++ unsigned int cmd, unsigned long arg)
+ {
+- struct fat_ioctl_filldir_callback buf;
+- struct dirent __user *d1;
+- int ret, short_only, both;
++ struct dirent __user *d1 = (struct dirent __user *)arg;
++ int short_only, both;
+
+ switch (cmd) {
+ case VFAT_IOCTL_READDIR_SHORT:
+@@ -717,7 +740,6 @@ static int fat_dir_ioctl(struct inode * inode, struct file * filp,
+ return fat_generic_ioctl(inode, filp, cmd, arg);
+ }
+
+- d1 = (struct dirent __user *)arg;
+ if (!access_ok(VERIFY_WRITE, d1, sizeof(struct dirent[2])))
+ return -EFAULT;
+ /*
+@@ -728,69 +750,48 @@ static int fat_dir_ioctl(struct inode * inode, struct file * filp,
+ if (put_user(0, &d1->d_reclen))
+ return -EFAULT;
+
+- buf.dirent = d1;
+- buf.result = 0;
+- mutex_lock(&inode->i_mutex);
+- ret = -ENOENT;
+- if (!IS_DEADDIR(inode)) {
+- ret = __fat_readdir(inode, filp, &buf, fat_ioctl_filldir,
+- short_only, both);
+- }
+- mutex_unlock(&inode->i_mutex);
+- if (ret >= 0)
+- ret = buf.result;
+- return ret;
++ return fat_ioctl_readdir(inode, filp, d1, fat_ioctl_filldir,
++ short_only, both);
+ }
+
+ #ifdef CONFIG_COMPAT
+ #define VFAT_IOCTL_READDIR_BOTH32 _IOR('r', 1, struct compat_dirent[2])
+ #define VFAT_IOCTL_READDIR_SHORT32 _IOR('r', 2, struct compat_dirent[2])
+
+-static long fat_compat_put_dirent32(struct dirent *d,
+- struct compat_dirent __user *d32)
+-{
+- if (!access_ok(VERIFY_WRITE, d32, sizeof(struct compat_dirent)))
+- return -EFAULT;
+-
+- __put_user(d->d_ino, &d32->d_ino);
+- __put_user(d->d_off, &d32->d_off);
+- __put_user(d->d_reclen, &d32->d_reclen);
+- if (__copy_to_user(d32->d_name, d->d_name, d->d_reclen))
+- return -EFAULT;
++FAT_IOCTL_FILLDIR_FUNC(fat_compat_ioctl_filldir, compat_dirent)
+
+- return 0;
+-}
+-
+-static long fat_compat_dir_ioctl(struct file *file, unsigned cmd,
++static long fat_compat_dir_ioctl(struct file *filp, unsigned cmd,
+ unsigned long arg)
+ {
+- struct compat_dirent __user *p = compat_ptr(arg);
+- int ret;
+- mm_segment_t oldfs = get_fs();
+- struct dirent d[2];
++ struct inode *inode = filp->f_path.dentry->d_inode;
++ struct compat_dirent __user *d1 = compat_ptr(arg);
++ int short_only, both;
+
+ switch (cmd) {
+- case VFAT_IOCTL_READDIR_BOTH32:
+- cmd = VFAT_IOCTL_READDIR_BOTH;
+- break;
+ case VFAT_IOCTL_READDIR_SHORT32:
+- cmd = VFAT_IOCTL_READDIR_SHORT;
++ short_only = 1;
++ both = 0;
++ break;
++ case VFAT_IOCTL_READDIR_BOTH32:
++ short_only = 0;
++ both = 1;
+ break;
+ default:
+ return -ENOIOCTLCMD;
+ }
+
+- set_fs(KERNEL_DS);
+- lock_kernel();
+- ret = fat_dir_ioctl(file->f_path.dentry->d_inode, file,
+- cmd, (unsigned long) &d);
+- unlock_kernel();
+- set_fs(oldfs);
+- if (ret >= 0) {
+- ret |= fat_compat_put_dirent32(&d[0], p);
+- ret |= fat_compat_put_dirent32(&d[1], p + 1);
+- }
+- return ret;
++ if (!access_ok(VERIFY_WRITE, d1, sizeof(struct compat_dirent[2])))
++ return -EFAULT;
++ /*
++ * Yes, we don't need this put_user() absolutely. However old
++ * code didn't return the right value. So, app use this value,
++ * in order to check whether it is EOF.
++ */
++ if (put_user(0, &d1->d_reclen))
++ return -EFAULT;
++
++ return fat_ioctl_readdir(inode, filp, d1, fat_compat_ioctl_filldir,
++ short_only, both);
+ }
+ #endif /* CONFIG_COMPAT */
+
+diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c
+index 5065baa..3760d02 100644
+--- a/fs/jfs/jfs_logmgr.c
++++ b/fs/jfs/jfs_logmgr.c
+@@ -2354,12 +2354,13 @@ int jfsIOWait(void *arg)
+ lbmStartIO(bp);
+ spin_lock_irq(&log_redrive_lock);
+ }
+- spin_unlock_irq(&log_redrive_lock);
+
+ if (freezing(current)) {
++ spin_unlock_irq(&log_redrive_lock);
+ refrigerator();
+ } else {
+ set_current_state(TASK_INTERRUPTIBLE);
++ spin_unlock_irq(&log_redrive_lock);
+ schedule();
+ current->state = TASK_RUNNING;
+ }
+diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
+index 6f24768..79bd03b 100644
+--- a/fs/nfsd/export.c
++++ b/fs/nfsd/export.c
+@@ -469,6 +469,13 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)
+ nd.dentry = NULL;
+ exp.ex_path = NULL;
+
++ /* fs locations */
++ exp.ex_fslocs.locations = NULL;
++ exp.ex_fslocs.locations_count = 0;
++ exp.ex_fslocs.migrated = 0;
++
++ exp.ex_uuid = NULL;
++
+ if (mesg[mlen-1] != '\n')
+ return -EINVAL;
+ mesg[mlen-1] = 0;
+@@ -509,13 +516,6 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)
+ if (exp.h.expiry_time == 0)
+ goto out;
+
+- /* fs locations */
+- exp.ex_fslocs.locations = NULL;
+- exp.ex_fslocs.locations_count = 0;
+- exp.ex_fslocs.migrated = 0;
+-
+- exp.ex_uuid = NULL;
+-
+ /* flags */
+ err = get_int(&mesg, &an_int);
+ if (err == -ENOENT)
+diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
+index c8178b7..2cac562 100644
+--- a/fs/reiserfs/xattr.c
++++ b/fs/reiserfs/xattr.c
+@@ -68,7 +68,7 @@ static struct dentry *get_xa_root(struct super_block *sb, int flags)
+ if (!privroot)
+ return ERR_PTR(-ENODATA);
+
+- mutex_lock(&privroot->d_inode->i_mutex);
++ mutex_lock_nested(&privroot->d_inode->i_mutex, I_MUTEX_XATTR);
+ if (REISERFS_SB(sb)->xattr_root) {
+ xaroot = dget(REISERFS_SB(sb)->xattr_root);
+ goto out;
+diff --git a/fs/udf/namei.c b/fs/udf/namei.c
+index fe361cd..b254375 100644
+--- a/fs/udf/namei.c
++++ b/fs/udf/namei.c
+@@ -878,7 +878,7 @@ static int udf_rmdir(struct inode * dir, struct dentry * dentry)
+ inode->i_nlink);
+ clear_nlink(inode);
+ inode->i_size = 0;
+- inode_dec_link_count(inode);
++ inode_dec_link_count(dir);
+ inode->i_ctime = dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
+ mark_inode_dirty(dir);
+
+diff --git a/include/asm-arm/arch-iop13xx/iop13xx.h b/include/asm-arm/arch-iop13xx/iop13xx.h
+index d26b755..74d7498 100644
+--- a/include/asm-arm/arch-iop13xx/iop13xx.h
++++ b/include/asm-arm/arch-iop13xx/iop13xx.h
+@@ -27,19 +27,24 @@ static inline int iop13xx_cpu_id(void)
+ #define IOP13XX_PCI_OFFSET IOP13XX_MAX_RAM_SIZE
+
+ /* PCI MAP
+- * 0x0000.0000 - 0x8000.0000 1:1 mapping with Physical RAM
+- * 0x8000.0000 - 0x8800.0000 PCIX/PCIE memory window (128MB)
+-*/
++ * bus range cpu phys cpu virt note
++ * 0x0000.0000 + 2GB (n/a) (n/a) inbound, 1:1 mapping with Physical RAM
++ * 0x8000.0000 + 928M 0x1.8000.0000 (ioremap) PCIX outbound memory window
++ * 0x8000.0000 + 928M 0x2.8000.0000 (ioremap) PCIE outbound memory window
++ *
++ * IO MAP
++ * 0x1000 + 64K 0x0.fffb.1000 0xfec6.1000 PCIX outbound i/o window
++ * 0x1000 + 64K 0x0.fffd.1000 0xfed7.1000 PCIE outbound i/o window
++ */
+ #define IOP13XX_PCIX_IO_WINDOW_SIZE 0x10000UL
+ #define IOP13XX_PCIX_LOWER_IO_PA 0xfffb0000UL
+ #define IOP13XX_PCIX_LOWER_IO_VA 0xfec60000UL
+-#define IOP13XX_PCIX_LOWER_IO_BA 0x0fff0000UL
++#define IOP13XX_PCIX_LOWER_IO_BA 0x0UL /* OIOTVR */
++#define IOP13XX_PCIX_IO_BUS_OFFSET 0x1000UL
+ #define IOP13XX_PCIX_UPPER_IO_PA (IOP13XX_PCIX_LOWER_IO_PA +\
+ IOP13XX_PCIX_IO_WINDOW_SIZE - 1)
+ #define IOP13XX_PCIX_UPPER_IO_VA (IOP13XX_PCIX_LOWER_IO_VA +\
+ IOP13XX_PCIX_IO_WINDOW_SIZE - 1)
+-#define IOP13XX_PCIX_IO_OFFSET (IOP13XX_PCIX_LOWER_IO_VA -\
+- IOP13XX_PCIX_LOWER_IO_BA)
+ #define IOP13XX_PCIX_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\
+ (IOP13XX_PCIX_LOWER_IO_PA\
+ - IOP13XX_PCIX_LOWER_IO_VA))
+@@ -65,15 +70,14 @@ static inline int iop13xx_cpu_id(void)
+ #define IOP13XX_PCIE_IO_WINDOW_SIZE 0x10000UL
+ #define IOP13XX_PCIE_LOWER_IO_PA 0xfffd0000UL
+ #define IOP13XX_PCIE_LOWER_IO_VA 0xfed70000UL
+-#define IOP13XX_PCIE_LOWER_IO_BA 0x0fff0000UL
++#define IOP13XX_PCIE_LOWER_IO_BA 0x0UL /* OIOTVR */
++#define IOP13XX_PCIE_IO_BUS_OFFSET 0x1000UL
+ #define IOP13XX_PCIE_UPPER_IO_PA (IOP13XX_PCIE_LOWER_IO_PA +\
+ IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
+ #define IOP13XX_PCIE_UPPER_IO_VA (IOP13XX_PCIE_LOWER_IO_VA +\
+ IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
+ #define IOP13XX_PCIE_UPPER_IO_BA (IOP13XX_PCIE_LOWER_IO_BA +\
+ IOP13XX_PCIE_IO_WINDOW_SIZE - 1)
+-#define IOP13XX_PCIE_IO_OFFSET (IOP13XX_PCIE_LOWER_IO_VA -\
+- IOP13XX_PCIE_LOWER_IO_BA)
+ #define IOP13XX_PCIE_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\
+ (IOP13XX_PCIE_LOWER_IO_PA\
+ - IOP13XX_PCIE_LOWER_IO_VA))
+diff --git a/include/asm-sparc64/openprom.h b/include/asm-sparc64/openprom.h
+index e01b805..26ec046 100644
+--- a/include/asm-sparc64/openprom.h
++++ b/include/asm-sparc64/openprom.h
+@@ -177,7 +177,7 @@ struct linux_nodeops {
+ /* More fun PROM structures for device probing. */
+ #define PROMREG_MAX 24
+ #define PROMVADDR_MAX 16
+-#define PROMINTR_MAX 15
++#define PROMINTR_MAX 32
+
+ struct linux_prom_registers {
+ unsigned which_io; /* hi part of physical address */
+diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
+index daa4940..bf92c26 100644
+--- a/include/linux/clocksource.h
++++ b/include/linux/clocksource.h
+@@ -48,6 +48,7 @@ struct clocksource;
+ * @shift: cycle to nanosecond divisor (power of two)
+ * @flags: flags describing special properties
+ * @vread: vsyscall based read
++ * @resume: resume function for the clocksource, if necessary
+ * @cycle_interval: Used internally by timekeeping core, please ignore.
+ * @xtime_interval: Used internally by timekeeping core, please ignore.
+ */
+@@ -61,6 +62,7 @@ struct clocksource {
+ u32 shift;
+ unsigned long flags;
+ cycle_t (*vread)(void);
++ void (*resume)(void);
+
+ /* timekeeping specific data, ignore */
+ cycle_t cycle_last, cycle_interval;
+@@ -198,6 +200,7 @@ static inline void clocksource_calculate_interval(struct clocksource *c,
+ extern int clocksource_register(struct clocksource*);
+ extern struct clocksource* clocksource_get_next(void);
+ extern void clocksource_change_rating(struct clocksource *cs, int rating);
++extern void clocksource_resume(void);
+
+ #ifdef CONFIG_GENERIC_TIME_VSYSCALL
+ extern void update_vsyscall(struct timespec *ts, struct clocksource *c);
+diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
+index 1a52854..b1b0f68 100644
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -647,8 +647,10 @@ static inline void netif_start_queue(struct net_device *dev)
+ static inline void netif_wake_queue(struct net_device *dev)
+ {
+ #ifdef CONFIG_NETPOLL_TRAP
+- if (netpoll_trap())
++ if (netpoll_trap()) {
++ clear_bit(__LINK_STATE_XOFF, &dev->state);
+ return;
++ }
+ #endif
+ if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
+ __netif_schedule(dev);
+@@ -656,10 +658,6 @@ static inline void netif_wake_queue(struct net_device *dev)
+
+ static inline void netif_stop_queue(struct net_device *dev)
+ {
+-#ifdef CONFIG_NETPOLL_TRAP
+- if (netpoll_trap())
+- return;
+-#endif
+ set_bit(__LINK_STATE_XOFF, &dev->state);
+ }
+
+diff --git a/include/linux/netfilter/nf_conntrack_proto_gre.h b/include/linux/netfilter/nf_conntrack_proto_gre.h
+index 4e6bbce..535e421 100644
+--- a/include/linux/netfilter/nf_conntrack_proto_gre.h
++++ b/include/linux/netfilter/nf_conntrack_proto_gre.h
+@@ -87,24 +87,6 @@ int nf_ct_gre_keymap_add(struct nf_conn *ct, enum ip_conntrack_dir dir,
+ /* delete keymap entries */
+ void nf_ct_gre_keymap_destroy(struct nf_conn *ct);
+
+-/* get pointer to gre key, if present */
+-static inline __be32 *gre_key(struct gre_hdr *greh)
+-{
+- if (!greh->key)
+- return NULL;
+- if (greh->csum || greh->routing)
+- return (__be32 *)(greh+sizeof(*greh)+4);
+- return (__be32 *)(greh+sizeof(*greh));
+-}
+-
+-/* get pointer ot gre csum, if present */
+-static inline __sum16 *gre_csum(struct gre_hdr *greh)
+-{
+- if (!greh->csum)
+- return NULL;
+- return (__sum16 *)(greh+sizeof(*greh));
+-}
+-
+ extern void nf_ct_gre_keymap_flush(void);
+ extern void nf_nat_need_gre(void);
+
+diff --git a/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h b/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+index e371e0f..d0f36f5 100644
+--- a/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
++++ b/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+@@ -90,25 +90,6 @@ int ip_ct_gre_keymap_add(struct ip_conntrack *ct,
+ /* delete keymap entries */
+ void ip_ct_gre_keymap_destroy(struct ip_conntrack *ct);
+
+-
+-/* get pointer to gre key, if present */
+-static inline __be32 *gre_key(struct gre_hdr *greh)
+-{
+- if (!greh->key)
+- return NULL;
+- if (greh->csum || greh->routing)
+- return (__be32 *) (greh+sizeof(*greh)+4);
+- return (__be32 *) (greh+sizeof(*greh));
+-}
+-
+-/* get pointer ot gre csum, if present */
+-static inline __sum16 *gre_csum(struct gre_hdr *greh)
+-{
+- if (!greh->csum)
+- return NULL;
+- return (__sum16 *) (greh+sizeof(*greh));
+-}
+-
+ #endif /* __KERNEL__ */
+
+ #endif /* _CONNTRACK_PROTO_GRE_H */
+diff --git a/kernel/cpuset.c b/kernel/cpuset.c
+index f382b0f..9e45dd1 100644
+--- a/kernel/cpuset.c
++++ b/kernel/cpuset.c
+@@ -1751,12 +1751,7 @@ static ssize_t cpuset_tasks_read(struct file *file, char __user *buf,
+ {
+ struct ctr_struct *ctr = file->private_data;
+
+- if (*ppos + nbytes > ctr->bufsz)
+- nbytes = ctr->bufsz - *ppos;
+- if (copy_to_user(buf, ctr->buf + *ppos, nbytes))
+- return -EFAULT;
+- *ppos += nbytes;
+- return nbytes;
++ return simple_read_from_buffer(buf, nbytes, ppos, ctr->buf, ctr->bufsz);
+ }
+
+ static int cpuset_tasks_release(struct inode *unused_inode, struct file *file)
+diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
+index fe5c7db..5baee91 100644
+--- a/kernel/time/clocksource.c
++++ b/kernel/time/clocksource.c
+@@ -74,6 +74,8 @@ static struct clocksource *watchdog;
+ static struct timer_list watchdog_timer;
+ static DEFINE_SPINLOCK(watchdog_lock);
+ static cycle_t watchdog_last;
++static int watchdog_resumed;
++
+ /*
+ * Interval: 0.5sec Treshold: 0.0625s
+ */
+@@ -98,15 +100,26 @@ static void clocksource_watchdog(unsigned long data)
+ struct clocksource *cs, *tmp;
+ cycle_t csnow, wdnow;
+ int64_t wd_nsec, cs_nsec;
++ int resumed;
+
+ spin_lock(&watchdog_lock);
+
++ resumed = watchdog_resumed;
++ if (unlikely(resumed))
++ watchdog_resumed = 0;
++
+ wdnow = watchdog->read();
+ wd_nsec = cyc2ns(watchdog, (wdnow - watchdog_last) & watchdog->mask);
+ watchdog_last = wdnow;
+
+ list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list) {
+ csnow = cs->read();
++
++ if (unlikely(resumed)) {
++ cs->wd_last = csnow;
++ continue;
++ }
++
+ /* Initialized ? */
+ if (!(cs->flags & CLOCK_SOURCE_WATCHDOG)) {
+ if ((cs->flags & CLOCK_SOURCE_IS_CONTINUOUS) &&
+@@ -136,6 +149,13 @@ static void clocksource_watchdog(unsigned long data)
+ }
+ spin_unlock(&watchdog_lock);
+ }
++static void clocksource_resume_watchdog(void)
++{
++ spin_lock(&watchdog_lock);
++ watchdog_resumed = 1;
++ spin_unlock(&watchdog_lock);
++}
++
+ static void clocksource_check_watchdog(struct clocksource *cs)
+ {
+ struct clocksource *cse;
+@@ -182,9 +202,34 @@ static void clocksource_check_watchdog(struct clocksource *cs)
+ if (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS)
+ cs->flags |= CLOCK_SOURCE_VALID_FOR_HRES;
+ }
++
++static inline void clocksource_resume_watchdog(void) { }
+ #endif
+
+ /**
++ * clocksource_resume - resume the clocksource(s)
++ */
++void clocksource_resume(void)
++{
++ struct list_head *tmp;
++ unsigned long flags;
++
++ spin_lock_irqsave(&clocksource_lock, flags);
++
++ list_for_each(tmp, &clocksource_list) {
++ struct clocksource *cs;
++
++ cs = list_entry(tmp, struct clocksource, list);
++ if (cs->resume)
++ cs->resume();
++ }
++
++ clocksource_resume_watchdog();
++
++ spin_unlock_irqrestore(&clocksource_lock, flags);
++}
++
++/**
+ * clocksource_get_next - Returns the selected clocksource
+ *
+ */
+diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
+index bfda3f7..a96ec9a 100644
+--- a/kernel/time/tick-common.c
++++ b/kernel/time/tick-common.c
+@@ -31,7 +31,7 @@ DEFINE_PER_CPU(struct tick_device, tick_cpu_device);
+ */
+ ktime_t tick_next_period;
+ ktime_t tick_period;
+-static int tick_do_timer_cpu = -1;
++int tick_do_timer_cpu __read_mostly = -1;
+ DEFINE_SPINLOCK(tick_device_lock);
+
+ /*
+@@ -295,6 +295,12 @@ static void tick_shutdown(unsigned int *cpup)
+ clockevents_exchange_device(dev, NULL);
+ td->evtdev = NULL;
+ }
++ /* Transfer the do_timer job away from this cpu */
++ if (*cpup == tick_do_timer_cpu) {
++ int cpu = first_cpu(cpu_online_map);
++
++ tick_do_timer_cpu = (cpu != NR_CPUS) ? cpu : -1;
++ }
+ spin_unlock_irqrestore(&tick_device_lock, flags);
+ }
+
+diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h
+index c9d203b..bb13f27 100644
+--- a/kernel/time/tick-internal.h
++++ b/kernel/time/tick-internal.h
+@@ -5,6 +5,7 @@ DECLARE_PER_CPU(struct tick_device, tick_cpu_device);
+ extern spinlock_t tick_device_lock;
+ extern ktime_t tick_next_period;
+ extern ktime_t tick_period;
++extern int tick_do_timer_cpu __read_mostly;
+
+ extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast);
+ extern void tick_handle_periodic(struct clock_event_device *dev);
+diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
+index 51556b9..f4fc867 100644
+--- a/kernel/time/tick-sched.c
++++ b/kernel/time/tick-sched.c
+@@ -221,6 +221,18 @@ void tick_nohz_stop_sched_tick(void)
+ ts->tick_stopped = 1;
+ ts->idle_jiffies = last_jiffies;
+ }
++
++ /*
++ * If this cpu is the one which updates jiffies, then
++ * give up the assignment and let it be taken by the
++ * cpu which runs the tick timer next, which might be
++ * this cpu as well. If we don't drop this here the
++ * jiffies might be stale and do_timer() never
++ * invoked.
++ */
++ if (cpu == tick_do_timer_cpu)
++ tick_do_timer_cpu = -1;
++
+ /*
+ * calculate the expiry time for the next timer wheel
+ * timer
+@@ -338,12 +350,24 @@ static void tick_nohz_handler(struct clock_event_device *dev)
+ {
+ struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched);
+ struct pt_regs *regs = get_irq_regs();
++ int cpu = smp_processor_id();
+ ktime_t now = ktime_get();
+
+ dev->next_event.tv64 = KTIME_MAX;
+
++ /*
++ * Check if the do_timer duty was dropped. We don't care about
++ * concurrency: This happens only when the cpu in charge went
++ * into a long sleep. If two cpus happen to assign themself to
++ * this duty, then the jiffies update is still serialized by
++ * xtime_lock.
++ */
++ if (unlikely(tick_do_timer_cpu == -1))
++ tick_do_timer_cpu = cpu;
++
+ /* Check, if the jiffies need an update */
+- tick_do_update_jiffies64(now);
++ if (tick_do_timer_cpu == cpu)
++ tick_do_update_jiffies64(now);
+
+ /*
+ * When we are idle and the tick is stopped, we have to touch
+@@ -431,9 +455,23 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
+ struct hrtimer_cpu_base *base = timer->base->cpu_base;
+ struct pt_regs *regs = get_irq_regs();
+ ktime_t now = ktime_get();
++ int cpu = smp_processor_id();
++
++#ifdef CONFIG_NO_HZ
++ /*
++ * Check if the do_timer duty was dropped. We don't care about
++ * concurrency: This happens only when the cpu in charge went
++ * into a long sleep. If two cpus happen to assign themself to
++ * this duty, then the jiffies update is still serialized by
++ * xtime_lock.
++ */
++ if (unlikely(tick_do_timer_cpu == -1))
++ tick_do_timer_cpu = cpu;
++#endif
+
+ /* Check, if the jiffies need an update */
+- tick_do_update_jiffies64(now);
++ if (tick_do_timer_cpu == cpu)
++ tick_do_update_jiffies64(now);
+
+ /*
+ * Do not call, when we are not in irq context and have
+diff --git a/kernel/timer.c b/kernel/timer.c
+index dd6c2c1..e045774 100644
+--- a/kernel/timer.c
++++ b/kernel/timer.c
+@@ -1903,6 +1903,8 @@ unregister_time_interpolator(struct time_interpolator *ti)
+ prev = &curr->next;
+ }
+
++ clocksource_resume();
++
+ write_seqlock_irqsave(&xtime_lock, flags);
+ if (ti == time_interpolator) {
+ /* we lost the best time-interpolator: */
+diff --git a/lib/zlib_inflate/inflate.c b/lib/zlib_inflate/inflate.c
+index fceb97c..7e1e311 100644
+--- a/lib/zlib_inflate/inflate.c
++++ b/lib/zlib_inflate/inflate.c
+@@ -743,12 +743,14 @@ int zlib_inflate(z_streamp strm, int flush)
+
+ strm->data_type = state->bits + (state->last ? 64 : 0) +
+ (state->mode == TYPE ? 128 : 0);
+- if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+- ret = Z_BUF_ERROR;
+
+ if (flush == Z_PACKET_FLUSH && ret == Z_OK &&
+- (strm->avail_out != 0 || strm->avail_in == 0))
++ strm->avail_out != 0 && strm->avail_in == 0)
+ return zlib_inflateSyncPacket(strm);
++
++ if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
++ ret = Z_BUF_ERROR;
++
+ return ret;
+ }
+
+diff --git a/mm/hugetlb.c b/mm/hugetlb.c
+index 36db012..88e708b 100644
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -140,6 +140,8 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma,
+ return page;
+
+ fail:
++ if (vma->vm_flags & VM_MAYSHARE)
++ resv_huge_pages++;
+ spin_unlock(&hugetlb_lock);
+ return NULL;
+ }
+diff --git a/mm/oom_kill.c b/mm/oom_kill.c
+index 3791edf..b3a3dd6 100644
+--- a/mm/oom_kill.c
++++ b/mm/oom_kill.c
+@@ -397,6 +397,7 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
+ struct task_struct *p;
+ unsigned long points = 0;
+ unsigned long freed = 0;
++ int constraint;
+
+ blocking_notifier_call_chain(&oom_notify_list, 0, &freed);
+ if (freed > 0)
+@@ -411,14 +412,15 @@ void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order)
+ show_mem();
+ }
+
+- cpuset_lock();
+- read_lock(&tasklist_lock);
+-
+ /*
+ * Check if there were limitations on the allocation (only relevant for
+ * NUMA) that may require different handling.
+ */
+- switch (constrained_alloc(zonelist, gfp_mask)) {
++ constraint = constrained_alloc(zonelist, gfp_mask);
++ cpuset_lock();
++ read_lock(&tasklist_lock);
++
++ switch (constraint) {
+ case CONSTRAINT_MEMORY_POLICY:
+ oom_kill_process(current, points,
+ "No available memory (MPOL_BIND)");
+diff --git a/mm/slob.c b/mm/slob.c
+index 5adc29c..c683d35 100644
+--- a/mm/slob.c
++++ b/mm/slob.c
+@@ -150,15 +150,6 @@ static void slob_free(void *block, int size)
+ spin_unlock_irqrestore(&slob_lock, flags);
+ }
+
+-static int FASTCALL(find_order(int size));
+-static int fastcall find_order(int size)
+-{
+- int order = 0;
+- for ( ; size > 4096 ; size >>=1)
+- order++;
+- return order;
+-}
+-
+ void *__kmalloc(size_t size, gfp_t gfp)
+ {
+ slob_t *m;
+@@ -174,7 +165,7 @@ void *__kmalloc(size_t size, gfp_t gfp)
+ if (!bb)
+ return 0;
+
+- bb->order = find_order(size);
++ bb->order = get_order(size);
+ bb->pages = (void *)__get_free_pages(gfp, bb->order);
+
+ if (bb->pages) {
+@@ -284,7 +275,7 @@ void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags)
+ if (c->size < PAGE_SIZE)
+ b = slob_alloc(c->size, flags, c->align);
+ else
+- b = (void *)__get_free_pages(flags, find_order(c->size));
++ b = (void *)__get_free_pages(flags, get_order(c->size));
+
+ if (c->ctor)
+ c->ctor(b, c, SLAB_CTOR_CONSTRUCTOR);
+@@ -311,7 +302,7 @@ void kmem_cache_free(struct kmem_cache *c, void *b)
+ if (c->size < PAGE_SIZE)
+ slob_free(b, c->size);
+ else
+- free_pages((unsigned long)b, find_order(c->size));
++ free_pages((unsigned long)b, get_order(c->size));
+ }
+ EXPORT_SYMBOL(kmem_cache_free);
+
+diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
+index cac06c4..444a56b 100644
+--- a/net/ipv4/fib_frontend.c
++++ b/net/ipv4/fib_frontend.c
+@@ -777,6 +777,10 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
+ .tos = frn->fl_tos,
+ .scope = frn->fl_scope } } };
+
++#ifdef CONFIG_IP_MULTIPLE_TABLES
++ res.r = NULL;
++#endif
++
+ frn->err = -ENOENT;
+ if (tb) {
+ local_bh_disable();
+diff --git a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c
+index 23b99ae..75bd597 100644
+--- a/net/ipv4/netfilter/ip_conntrack_core.c
++++ b/net/ipv4/netfilter/ip_conntrack_core.c
+@@ -302,7 +302,6 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ {
+ struct ip_conntrack *ct = (struct ip_conntrack *)nfct;
+ struct ip_conntrack_protocol *proto;
+- struct ip_conntrack_helper *helper;
+ typeof(ip_conntrack_destroyed) destroyed;
+
+ DEBUGP("destroy_conntrack(%p)\n", ct);
+@@ -312,10 +311,6 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ ip_conntrack_event(IPCT_DESTROY, ct);
+ set_bit(IPS_DYING_BIT, &ct->status);
+
+- helper = ct->helper;
+- if (helper && helper->destroy)
+- helper->destroy(ct);
+-
+ /* To make sure we don't get any weird locking issues here:
+ * destroy_conntrack() MUST NOT be called with a write lock
+ * to ip_conntrack_lock!!! -HW */
+@@ -356,6 +351,11 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ static void death_by_timeout(unsigned long ul_conntrack)
+ {
+ struct ip_conntrack *ct = (void *)ul_conntrack;
++ struct ip_conntrack_helper *helper;
++
++ helper = ct->helper;
++ if (helper && helper->destroy)
++ helper->destroy(ct);
+
+ write_lock_bh(&ip_conntrack_lock);
+ /* Inside lock so preempt is disabled on module removal path.
+diff --git a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
+index e694299..b86479a 100644
+--- a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
++++ b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
+@@ -460,7 +460,8 @@ static int sctp_new(struct ip_conntrack *conntrack,
+ SCTP_CONNTRACK_NONE, sch->type);
+
+ /* Invalid: delete conntrack */
+- if (newconntrack == SCTP_CONNTRACK_MAX) {
++ if (newconntrack == SCTP_CONNTRACK_NONE ||
++ newconntrack == SCTP_CONNTRACK_MAX) {
+ DEBUGP("ip_conntrack_sctp: invalid new deleting.\n");
+ return 0;
+ }
+diff --git a/net/ipv4/netfilter/ip_nat_proto_gre.c b/net/ipv4/netfilter/ip_nat_proto_gre.c
+index 9581020..e3146a3 100644
+--- a/net/ipv4/netfilter/ip_nat_proto_gre.c
++++ b/net/ipv4/netfilter/ip_nat_proto_gre.c
+@@ -70,6 +70,11 @@ gre_unique_tuple(struct ip_conntrack_tuple *tuple,
+ __be16 *keyptr;
+ unsigned int min, i, range_size;
+
++ /* If there is no master conntrack we are not PPTP,
++ do not change tuples */
++ if (!conntrack->master)
++ return 0;
++
+ if (maniptype == IP_NAT_MANIP_SRC)
+ keyptr = &tuple->src.u.gre.key;
+ else
+@@ -122,18 +127,9 @@ gre_manip_pkt(struct sk_buff **pskb,
+ if (maniptype == IP_NAT_MANIP_DST) {
+ /* key manipulation is always dest */
+ switch (greh->version) {
+- case 0:
+- if (!greh->key) {
+- DEBUGP("can't nat GRE w/o key\n");
+- break;
+- }
+- if (greh->csum) {
+- /* FIXME: Never tested this code... */
+- nf_proto_csum_replace4(gre_csum(greh), *pskb,
+- *(gre_key(greh)),
+- tuple->dst.u.gre.key, 0);
+- }
+- *(gre_key(greh)) = tuple->dst.u.gre.key;
++ case GRE_VERSION_1701:
++ /* We do not currently NAT any GREv0 packets.
++ * Try to behave like "ip_nat_proto_unknown" */
+ break;
+ case GRE_VERSION_PPTP:
+ DEBUGP("call_id -> 0x%04x\n",
+diff --git a/net/ipv4/netfilter/nf_nat_proto_gre.c b/net/ipv4/netfilter/nf_nat_proto_gre.c
+index e5a34c1..ca3ff84 100644
+--- a/net/ipv4/netfilter/nf_nat_proto_gre.c
++++ b/net/ipv4/netfilter/nf_nat_proto_gre.c
+@@ -72,6 +72,11 @@ gre_unique_tuple(struct nf_conntrack_tuple *tuple,
+ __be16 *keyptr;
+ unsigned int min, i, range_size;
+
++ /* If there is no master conntrack we are not PPTP,
++ do not change tuples */
++ if (!conntrack->master)
++ return 0;
++
+ if (maniptype == IP_NAT_MANIP_SRC)
+ keyptr = &tuple->src.u.gre.key;
+ else
+@@ -122,18 +127,9 @@ gre_manip_pkt(struct sk_buff **pskb, unsigned int iphdroff,
+ if (maniptype != IP_NAT_MANIP_DST)
+ return 1;
+ switch (greh->version) {
+- case 0:
+- if (!greh->key) {
+- DEBUGP("can't nat GRE w/o key\n");
+- break;
+- }
+- if (greh->csum) {
+- /* FIXME: Never tested this code... */
+- nf_proto_csum_replace4(gre_csum(greh), *pskb,
+- *(gre_key(greh)),
+- tuple->dst.u.gre.key, 0);
+- }
+- *(gre_key(greh)) = tuple->dst.u.gre.key;
++ case GRE_VERSION_1701:
++ /* We do not currently NAT any GREv0 packets.
++ * Try to behave like "nf_nat_proto_unknown" */
+ break;
+ case GRE_VERSION_PPTP:
+ DEBUGP("call_id -> 0x%04x\n", ntohs(tuple->dst.u.gre.key));
+diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
+index 3834b10..824c6b9 100644
+--- a/net/ipv4/tcp.c
++++ b/net/ipv4/tcp.c
+@@ -1759,8 +1759,7 @@ int tcp_disconnect(struct sock *sk, int flags)
+ tcp_clear_retrans(tp);
+ inet_csk_delack_init(sk);
+ sk->sk_send_head = NULL;
+- tp->rx_opt.saw_tstamp = 0;
+- tcp_sack_reset(&tp->rx_opt);
++ memset(&tp->rx_opt, 0, sizeof(tp->rx_opt));
+ __sk_dst_reset(sk);
+
+ BUG_TRAP(!inet->num || icsk->icsk_bind_hash);
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index 452a82c..a541137 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -2281,8 +2281,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
+ break;
+
+ case NETDEV_CHANGENAME:
+-#ifdef CONFIG_SYSCTL
+ if (idev) {
++ snmp6_unregister_dev(idev);
++#ifdef CONFIG_SYSCTL
+ addrconf_sysctl_unregister(&idev->cnf);
+ neigh_sysctl_unregister(idev->nd_parms);
+ neigh_sysctl_register(dev, idev->nd_parms,
+@@ -2290,8 +2291,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
+ &ndisc_ifinfo_sysctl_change,
+ NULL);
+ addrconf_sysctl_register(idev, &idev->cnf);
+- }
+ #endif
++ snmp6_register_dev(idev);
++ }
+ break;
+ };
+
+@@ -4060,6 +4062,10 @@ int __init addrconf_init(void)
+ return err;
+
+ ip6_null_entry.rt6i_idev = in6_dev_get(&loopback_dev);
++#ifdef CONFIG_IPV6_MULTIPLE_TABLES
++ ip6_prohibit_entry.rt6i_idev = in6_dev_get(&loopback_dev);
++ ip6_blk_hole_entry.rt6i_idev = in6_dev_get(&loopback_dev);
++#endif
+
+ register_netdevice_notifier(&ipv6_dev_notf);
+
+diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c
+index fb39604..794b930 100644
+--- a/net/ipv6/exthdrs.c
++++ b/net/ipv6/exthdrs.c
+@@ -396,6 +396,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp)
+
+ switch (hdr->type) {
+ #ifdef CONFIG_IPV6_MIP6
++ case IPV6_SRCRT_TYPE_2:
+ break;
+ #endif
+ case IPV6_SRCRT_TYPE_0:
+@@ -651,6 +652,14 @@ EXPORT_SYMBOL_GPL(ipv6_invert_rthdr);
+ Hop-by-hop options.
+ **********************************/
+
++/*
++ * Note: we cannot rely on skb->dst before we assign it in ip6_route_input().
++ */
++static inline struct inet6_dev *ipv6_skb_idev(struct sk_buff *skb)
++{
++ return skb->dst ? ip6_dst_idev(skb->dst) : __in6_dev_get(skb->dev);
++}
++
+ /* Router Alert as of RFC 2711 */
+
+ static int ipv6_hop_ra(struct sk_buff **skbp, int optoff)
+@@ -677,25 +686,25 @@ static int ipv6_hop_jumbo(struct sk_buff **skbp, int optoff)
+ if (skb->nh.raw[optoff+1] != 4 || (optoff&3) != 2) {
+ LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n",
+ skb->nh.raw[optoff+1]);
+- IP6_INC_STATS_BH(ip6_dst_idev(skb->dst),
++ IP6_INC_STATS_BH(ipv6_skb_idev(skb),
+ IPSTATS_MIB_INHDRERRORS);
+ goto drop;
+ }
+
+ pkt_len = ntohl(*(__be32*)(skb->nh.raw+optoff+2));
+ if (pkt_len <= IPV6_MAXPLEN) {
+- IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
++ IP6_INC_STATS_BH(ipv6_skb_idev(skb), IPSTATS_MIB_INHDRERRORS);
+ icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2);
+ return 0;
+ }
+ if (skb->nh.ipv6h->payload_len) {
+- IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS);
++ IP6_INC_STATS_BH(ipv6_skb_idev(skb), IPSTATS_MIB_INHDRERRORS);
+ icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff);
+ return 0;
+ }
+
+ if (pkt_len > skb->len - sizeof(struct ipv6hdr)) {
+- IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INTRUNCATEDPKTS);
++ IP6_INC_STATS_BH(ipv6_skb_idev(skb), IPSTATS_MIB_INTRUNCATEDPKTS);
+ goto drop;
+ }
+
+diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
+index 61e7a6c..1b34ee5 100644
+--- a/net/ipv6/ip6_input.c
++++ b/net/ipv6/ip6_input.c
+@@ -235,7 +235,7 @@ int ip6_mc_input(struct sk_buff *skb)
+ IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INMCASTPKTS);
+
+ hdr = skb->nh.ipv6h;
+- deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) ||
++ deliver = unlikely(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI)) ||
+ ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL);
+
+ /*
+diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
+index 3055169..9fa3ffb 100644
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -449,10 +449,17 @@ int ip6_forward(struct sk_buff *skb)
+ */
+ if (xrlim_allow(dst, 1*HZ))
+ ndisc_send_redirect(skb, n, target);
+- } else if (ipv6_addr_type(&hdr->saddr)&(IPV6_ADDR_MULTICAST|IPV6_ADDR_LOOPBACK
+- |IPV6_ADDR_LINKLOCAL)) {
++ } else {
++ int addrtype = ipv6_addr_type(&hdr->saddr);
++
+ /* This check is security critical. */
+- goto error;
++ if (addrtype & (IPV6_ADDR_MULTICAST|IPV6_ADDR_LOOPBACK))
++ goto error;
++ if (addrtype & IPV6_ADDR_LINKLOCAL) {
++ icmpv6_send(skb, ICMPV6_DEST_UNREACH,
++ ICMPV6_NOT_NEIGHBOUR, 0, skb->dev);
++ goto error;
++ }
+ }
+
+ if (skb->len > dst_mtu(dst)) {
+diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
+index fa3fb50..d57853d 100644
+--- a/net/ipv6/proc.c
++++ b/net/ipv6/proc.c
+@@ -236,6 +236,7 @@ int snmp6_unregister_dev(struct inet6_dev *idev)
+ return -EINVAL;
+ remove_proc_entry(idev->stats.proc_dir_entry->name,
+ proc_net_devsnmp6);
++ idev->stats.proc_dir_entry = NULL;
+ return 0;
+ }
+
+diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c
+index 93c4223..dff33cc 100644
+--- a/net/ipv6/xfrm6_tunnel.c
++++ b/net/ipv6/xfrm6_tunnel.c
+@@ -261,7 +261,7 @@ static int xfrm6_tunnel_rcv(struct sk_buff *skb)
+ __be32 spi;
+
+ spi = xfrm6_tunnel_spi_lookup((xfrm_address_t *)&iph->saddr);
+- return xfrm6_rcv_spi(skb, spi);
++ return xfrm6_rcv_spi(skb, spi) > 0 ? : 0;
+ }
+
+ static int xfrm6_tunnel_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
+diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
+index b3a70eb..ce28fdd 100644
+--- a/net/netfilter/nf_conntrack_core.c
++++ b/net/netfilter/nf_conntrack_core.c
+@@ -315,7 +315,6 @@ static void
+ destroy_conntrack(struct nf_conntrack *nfct)
+ {
+ struct nf_conn *ct = (struct nf_conn *)nfct;
+- struct nf_conn_help *help = nfct_help(ct);
+ struct nf_conntrack_l3proto *l3proto;
+ struct nf_conntrack_l4proto *l4proto;
+ typeof(nf_conntrack_destroyed) destroyed;
+@@ -327,9 +326,6 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ nf_conntrack_event(IPCT_DESTROY, ct);
+ set_bit(IPS_DYING_BIT, &ct->status);
+
+- if (help && help->helper && help->helper->destroy)
+- help->helper->destroy(ct);
+-
+ /* To make sure we don't get any weird locking issues here:
+ * destroy_conntrack() MUST NOT be called with a write lock
+ * to nf_conntrack_lock!!! -HW */
+@@ -375,6 +371,10 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ static void death_by_timeout(unsigned long ul_conntrack)
+ {
+ struct nf_conn *ct = (void *)ul_conntrack;
++ struct nf_conn_help *help = nfct_help(ct);
++
++ if (help && help->helper && help->helper->destroy)
++ help->helper->destroy(ct);
+
+ write_lock_bh(&nf_conntrack_lock);
+ /* Inside lock so preempt is disabled on module removal path.
+diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c
+index 3c80558..b53bc64 100644
+--- a/net/netfilter/nf_conntrack_proto_sctp.c
++++ b/net/netfilter/nf_conntrack_proto_sctp.c
+@@ -469,7 +469,8 @@ static int sctp_new(struct nf_conn *conntrack, const struct sk_buff *skb,
+ SCTP_CONNTRACK_NONE, sch->type);
+
+ /* Invalid: delete conntrack */
+- if (newconntrack == SCTP_CONNTRACK_MAX) {
++ if (newconntrack == SCTP_CONNTRACK_NONE ||
++ newconntrack == SCTP_CONNTRACK_MAX) {
+ DEBUGP("nf_conntrack_sctp: invalid new deleting.\n");
+ return 0;
+ }
+diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c
+index de889f2..a86f36b 100644
+--- a/net/sched/sch_prio.c
++++ b/net/sched/sch_prio.c
+@@ -74,7 +74,7 @@ prio_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
+ band = res.classid;
+ }
+ band = TC_H_MIN(band) - 1;
+- if (band > q->bands)
++ if (band >= q->bands)
+ return q->queues[q->prio2band[0]];
+
+ return q->queues[band];
+diff --git a/net/sctp/socket.c b/net/sctp/socket.c
+index a1d026f..843c928 100644
+--- a/net/sctp/socket.c
++++ b/net/sctp/socket.c
+@@ -3847,7 +3847,7 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
+ memcpy(&temp, &from->ipaddr, sizeof(temp));
+ sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
+ addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
+- if(space_left < addrlen)
++ if (space_left < addrlen)
+ return -ENOMEM;
+ if (copy_to_user(to, &temp, addrlen))
+ return -EFAULT;
+@@ -3936,8 +3936,9 @@ done:
+ /* Helper function that copies local addresses to user and returns the number
+ * of addresses copied.
+ */
+-static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_addrs,
+- void __user *to)
++static int sctp_copy_laddrs_old(struct sock *sk, __u16 port,
++ int max_addrs, void *to,
++ int *bytes_copied)
+ {
+ struct list_head *pos, *next;
+ struct sctp_sockaddr_entry *addr;
+@@ -3954,10 +3955,10 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add
+ sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
+ &temp);
+ addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
+- if (copy_to_user(to, &temp, addrlen))
+- return -EFAULT;
++ memcpy(to, &temp, addrlen);
+
+ to += addrlen;
++ *bytes_copied += addrlen;
+ cnt ++;
+ if (cnt >= max_addrs) break;
+ }
+@@ -3965,8 +3966,8 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add
+ return cnt;
+ }
+
+-static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port,
+- void __user **to, size_t space_left)
++static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,
++ size_t space_left, int *bytes_copied)
+ {
+ struct list_head *pos, *next;
+ struct sctp_sockaddr_entry *addr;
+@@ -3983,14 +3984,14 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port,
+ sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
+ &temp);
+ addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
+- if(space_left<addrlen)
++ if (space_left < addrlen)
+ return -ENOMEM;
+- if (copy_to_user(*to, &temp, addrlen))
+- return -EFAULT;
++ memcpy(to, &temp, addrlen);
+
+- *to += addrlen;
++ to += addrlen;
+ cnt ++;
+ space_left -= addrlen;
++ bytes_copied += addrlen;
+ }
+
+ return cnt;
+@@ -4014,6 +4015,9 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
+ int addrlen;
+ rwlock_t *addr_lock;
+ int err = 0;
++ void *addrs;
++ void *buf;
++ int bytes_copied = 0;
+
+ if (len != sizeof(struct sctp_getaddrs_old))
+ return -EINVAL;
+@@ -4041,6 +4045,15 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
+
+ to = getaddrs.addrs;
+
++ /* Allocate space for a local instance of packed array to hold all
++ * the data. We store addresses here first and then put write them
++ * to the user in one shot.
++ */
++ addrs = kmalloc(sizeof(union sctp_addr) * getaddrs.addr_num,
++ GFP_KERNEL);
++ if (!addrs)
++ return -ENOMEM;
++
+ sctp_read_lock(addr_lock);
+
+ /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid
+@@ -4050,38 +4063,42 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
+ addr = list_entry(bp->address_list.next,
+ struct sctp_sockaddr_entry, list);
+ if (sctp_is_any(&addr->a)) {
+- cnt = sctp_copy_laddrs_to_user_old(sk, bp->port,
+- getaddrs.addr_num,
+- to);
+- if (cnt < 0) {
+- err = cnt;
+- goto unlock;
+- }
++ cnt = sctp_copy_laddrs_old(sk, bp->port,
++ getaddrs.addr_num,
++ addrs, &bytes_copied);
+ goto copy_getaddrs;
+ }
+ }
+
++ buf = addrs;
+ list_for_each(pos, &bp->address_list) {
+ addr = list_entry(pos, struct sctp_sockaddr_entry, list);
+ memcpy(&temp, &addr->a, sizeof(temp));
+ sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
+ addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
+- if (copy_to_user(to, &temp, addrlen)) {
+- err = -EFAULT;
+- goto unlock;
+- }
+- to += addrlen;
++ memcpy(buf, &temp, addrlen);
++ buf += addrlen;
++ bytes_copied += addrlen;
+ cnt ++;
+ if (cnt >= getaddrs.addr_num) break;
+ }
+
+ copy_getaddrs:
++ sctp_read_unlock(addr_lock);
++
++ /* copy the entire address list into the user provided space */
++ if (copy_to_user(to, addrs, bytes_copied)) {
++ err = -EFAULT;
++ goto error;
++ }
++
++ /* copy the leading structure back to user */
+ getaddrs.addr_num = cnt;
+ if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs_old)))
+ err = -EFAULT;
+
+-unlock:
+- sctp_read_unlock(addr_lock);
++error:
++ kfree(addrs);
+ return err;
+ }
+
+@@ -4101,7 +4118,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
+ rwlock_t *addr_lock;
+ int err = 0;
+ size_t space_left;
+- int bytes_copied;
++ int bytes_copied = 0;
++ void *addrs;
++ void *buf;
+
+ if (len <= sizeof(struct sctp_getaddrs))
+ return -EINVAL;
+@@ -4129,6 +4148,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
+ to = optval + offsetof(struct sctp_getaddrs,addrs);
+ space_left = len - sizeof(struct sctp_getaddrs) -
+ offsetof(struct sctp_getaddrs,addrs);
++ addrs = kmalloc(space_left, GFP_KERNEL);
++ if (!addrs)
++ return -ENOMEM;
+
+ sctp_read_lock(addr_lock);
+
+@@ -4139,41 +4161,47 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
+ addr = list_entry(bp->address_list.next,
+ struct sctp_sockaddr_entry, list);
+ if (sctp_is_any(&addr->a)) {
+- cnt = sctp_copy_laddrs_to_user(sk, bp->port,
+- &to, space_left);
++ cnt = sctp_copy_laddrs(sk, bp->port, addrs,
++ space_left, &bytes_copied);
+ if (cnt < 0) {
+ err = cnt;
+- goto unlock;
++ goto error;
+ }
+ goto copy_getaddrs;
+ }
+ }
+
++ buf = addrs;
+ list_for_each(pos, &bp->address_list) {
+ addr = list_entry(pos, struct sctp_sockaddr_entry, list);
+ memcpy(&temp, &addr->a, sizeof(temp));
+ sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
+ addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
+- if(space_left < addrlen)
+- return -ENOMEM; /*fixme: right error?*/
+- if (copy_to_user(to, &temp, addrlen)) {
+- err = -EFAULT;
+- goto unlock;
++ if (space_left < addrlen) {
++ err = -ENOMEM; /*fixme: right error?*/
++ goto error;
+ }
+- to += addrlen;
++ memcpy(buf, &temp, addrlen);
++ buf += addrlen;
++ bytes_copied += addrlen;
+ cnt ++;
+ space_left -= addrlen;
+ }
+
+ copy_getaddrs:
++ sctp_read_unlock(addr_lock);
++
++ if (copy_to_user(to, addrs, bytes_copied)) {
++ err = -EFAULT;
++ goto error;
++ }
+ if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num))
+ return -EFAULT;
+- bytes_copied = ((char __user *)to) - optval;
+ if (put_user(bytes_copied, optlen))
+ return -EFAULT;
+
+-unlock:
+- sctp_read_unlock(addr_lock);
++error:
++ kfree(addrs);
+ return err;
+ }
+
+@@ -4961,7 +4989,12 @@ int sctp_inet_listen(struct socket *sock, int backlog)
+ /* Allocate HMAC for generating cookie. */
+ if (sctp_hmac_alg) {
+ tfm = crypto_alloc_hash(sctp_hmac_alg, 0, CRYPTO_ALG_ASYNC);
+- if (!tfm) {
++ if (IS_ERR(tfm)) {
++ if (net_ratelimit()) {
++ printk(KERN_INFO
++ "SCTP: failed to load transform for %s: %ld\n",
++ sctp_hmac_alg, PTR_ERR(tfm));
++ }
+ err = -ENOSYS;
+ goto out;
+ }
+diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
+index db298b5..c678f5f 100644
+--- a/net/sunrpc/auth_gss/svcauth_gss.c
++++ b/net/sunrpc/auth_gss/svcauth_gss.c
+@@ -1196,13 +1196,7 @@ svcauth_gss_wrap_resp_integ(struct svc_rqst *rqstp)
+ if (xdr_buf_subsegment(resbuf, &integ_buf, integ_offset,
+ integ_len))
+ BUG();
+- if (resbuf->page_len == 0
+- && resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE
+- < PAGE_SIZE) {
+- BUG_ON(resbuf->tail[0].iov_len);
+- /* Use head for everything */
+- resv = &resbuf->head[0];
+- } else if (resbuf->tail[0].iov_base == NULL) {
++ if (resbuf->tail[0].iov_base == NULL) {
+ if (resbuf->head[0].iov_len + RPC_MAX_AUTH_SIZE > PAGE_SIZE)
+ goto out_err;
+ resbuf->tail[0].iov_base = resbuf->head[0].iov_base
+diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
+index 785c3e3..ba89293 100644
+--- a/net/xfrm/xfrm_policy.c
++++ b/net/xfrm/xfrm_policy.c
+@@ -782,6 +782,10 @@ struct xfrm_policy *xfrm_policy_byid(u8 type, int dir, u32 id, int delete,
+ struct hlist_head *chain;
+ struct hlist_node *entry;
+
++ *err = -ENOENT;
++ if (xfrm_policy_id2dir(id) != dir)
++ return NULL;
++
+ *err = 0;
+ write_lock_bh(&xfrm_policy_lock);
+ chain = xfrm_policy_byidx + idx_hash(id);
+diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
+index 6bc7e7c..8912c0f 100644
+--- a/scripts/basic/fixdep.c
++++ b/scripts/basic/fixdep.c
+@@ -249,6 +249,8 @@ void parse_config_file(char *map, size_t len)
+ found:
+ if (!memcmp(q - 7, "_MODULE", 7))
+ q -= 7;
++ if( (q-p-7) < 0 )
++ continue;
+ use_config(p+7, q-p-7);
+ }
+ }
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index c94291b..a6f8992 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -1751,6 +1751,7 @@ static int stac92xx_resume(struct hda_codec *codec)
+
+ stac92xx_init(codec);
+ stac92xx_set_config_regs(codec);
++ snd_hda_resume_ctls(codec, spec->mixer);
+ for (i = 0; i < spec->num_mixers; i++)
+ snd_hda_resume_ctls(codec, spec->mixers[i]);
+ if (spec->multiout.dig_out_nid)
diff --git a/packages/linux/linux-ezx-2.6.21/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.21/patches/pcap-ts.patch
new file mode 100755
index 0000000000..28b9c557d3
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/pcap-ts.patch
@@ -0,0 +1,404 @@
+Index: linux-2.6.21/drivers/input/touchscreen/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/input/touchscreen/Kconfig 2007-06-02 20:17:58.000000000 -0300
++++ linux-2.6.21/drivers/input/touchscreen/Kconfig 2007-06-02 20:18:40.000000000 -0300
+@@ -164,4 +164,13 @@
+ To compile this driver as a module, choose M here: the
+ module will be called ucb1400_ts.
+
++config TOUCHSCREEN_PCAP
++ tristate "Motorola PCAP touchscreen"
++ depends on EZX_PCAP
++ help
++ Say Y here if you have a Motorola EZX telephone and
++ want to support the built-in touchscreen.
++
++ If unsure, say N.
++
+ endif
+Index: linux-2.6.21/drivers/input/touchscreen/pcap_ts.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/input/touchscreen/pcap_ts.c 2007-06-02 20:19:39.000000000 -0300
+@@ -0,0 +1,372 @@
++/*
++ * pcap_ts.c - Touchscreen driver for Motorola PCAP2 based touchscreen as found
++ * in the EZX phone platform.
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ * Copyright (C) 2007 Daniel Ribeiro <drwyrm@gmail.com>
++ *
++ * Based on information found in the original Motorola 2.4.x ezx-ts.c driver.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * TODO:
++ * split this in a hardirq handler and a tasklet/bh
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/string.h>
++#include <linux/pm.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++
++#if 0
++#define DEBUGP(x, args ...) printk(x, ## args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++#define PRESSURE 1
++#define COORDINATE 2
++#define STANDBY 3
++
++extern int ezx_pcap_read(u_int8_t, u_int32_t *);
++extern int ezx_pcap_write(u_int8_t, u_int32_t);
++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
++
++struct pcap_ts {
++ int irq_xy;
++ int irq_touch;
++ struct input_dev *input;
++ struct timer_list timer;
++
++ u_int16_t x, y;
++ u_int16_t pressure;
++
++ u_int8_t read_state;
++};
++
++#define X_AXIS_MIN 0
++#define X_AXIS_MAX 1023
++
++#define Y_AXIS_MAX X_AXIS_MAX
++#define Y_AXIS_MIN X_AXIS_MIN
++
++#define PRESSURE_MAX X_AXIS_MAX
++#define PRESSURE_MIN X_AXIS_MIN
++
++/* if we try to read faster, pressure reading becomes unreliable */
++#define SAMPLE_INTERVAL (HZ/50)
++
++
++static void pcap_ts_mode(u_int32_t mode)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(SSP_PCAP_ADJ_ADC1_REGISTER, &tmp);
++ tmp &= ~SSP_PCAP_TOUCH_PANEL_POSITION_DETECT_MODE_MASK;
++ tmp |= mode;
++ ezx_pcap_write(SSP_PCAP_ADJ_ADC1_REGISTER, tmp);
++}
++
++/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE2 interrupt
++ * once the result of the conversion is available */
++static void pcap_ts_start_xy_read(struct pcap_ts *pcap_ts)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(SSP_PCAP_ADJ_ADC1_REGISTER, &tmp);
++ tmp &= SSP_PCAP_ADC_START_VALUE_SET_MASK;
++ tmp |= SSP_PCAP_ADC_START_VALUE;
++ ezx_pcap_write(SSP_PCAP_ADJ_ADC1_REGISTER, tmp);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ADC2_ASC, 1);
++}
++
++/* read the XY result from the ADC of PCAP2 */
++static void pcap_ts_get_xy_value(struct pcap_ts *pcap_ts)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(SSP_PCAP_ADJ_ADC2_REGISTER, &tmp);
++
++ if (pcap_ts->read_state == COORDINATE && !(tmp & 0x00400000)) {
++ pcap_ts->x = (tmp & SSP_PCAP_ADD1_VALUE_MASK);
++ pcap_ts->y = (tmp & SSP_PCAP_ADD2_VALUE_MASK)
++ >>SSP_PCAP_ADD2_VALUE_SHIFT;
++ } else {
++ pcap_ts->pressure = (tmp & SSP_PCAP_ADD2_VALUE_MASK)
++ >>SSP_PCAP_ADD2_VALUE_SHIFT;
++ }
++
++}
++
++/* PCAP2 interrupts us when ADC conversion result is available */
++static irqreturn_t pcap_ts_irq_xy(int irq, void *dev_id)
++{
++ struct pcap_ts *pcap_ts = dev_id;
++
++ pcap_ts_get_xy_value(pcap_ts);
++ DEBUGP(KERN_DEBUG "%s X=%4d, Y=%4d Z=%4d ",
++ pcap_ts->read_state == COORDINATE ? "COORD" : "PRESS",
++ pcap_ts->x, pcap_ts->y, pcap_ts->pressure);
++
++ switch (pcap_ts->read_state) {
++ case PRESSURE:
++ if (pcap_ts->pressure >= PRESSURE_MAX ||
++ pcap_ts->pressure <= PRESSURE_MIN ) {
++ /* pen has been released (or cant read pressure - WM)*/
++ DEBUGP("UP\n");
++ /* do nothing */
++ } else {
++ /* pen has been touched down */
++ DEBUGP("DOWN\n");
++ input_report_key(pcap_ts->input, BTN_TOUCH, 1);
++ input_report_abs(pcap_ts->input, ABS_PRESSURE, pcap_ts->pressure);
++ }
++ /* switch state machine into coordinate read mode */
++ pcap_ts->read_state = COORDINATE;
++ pcap_ts_mode(PCAP_TS_POSITION_XY_MEASUREMENT);
++ pcap_ts_start_xy_read(pcap_ts);
++ break;
++ case COORDINATE:
++ if (pcap_ts->x <= X_AXIS_MIN || pcap_ts->x >= X_AXIS_MAX ||
++ pcap_ts->y <= Y_AXIS_MIN || pcap_ts->y >= Y_AXIS_MAX) {
++ /* pen has been released */
++ DEBUGP("UP END\n");
++
++ input_report_key(pcap_ts->input, BTN_TOUCH, 0);
++ input_report_abs(pcap_ts->input, ABS_PRESSURE, 0);
++
++ /* no need for timer, we'll get interrupted with
++ * next touch down event */
++ del_timer(&pcap_ts->timer);
++
++ /* ask PCAP2 to interrupt us if touch event happens
++ * again */
++ pcap_ts->read_state = STANDBY;
++ pcap_ts_mode(PCAP_TS_STANDBY_MODE);
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_MSR_TSM, 0);
++ } else {
++ DEBUGP("DOWN\n");
++ input_report_abs(pcap_ts->input, ABS_X, pcap_ts->x);
++ input_report_abs(pcap_ts->input, ABS_Y, pcap_ts->y);
++
++ /* switch back to pressure read mode */
++ pcap_ts->read_state = PRESSURE;
++ pcap_ts_mode(PCAP_TS_PRESSURE_MEASUREMENT);
++ mod_timer(&pcap_ts->timer, jiffies + SAMPLE_INTERVAL);
++ }
++ input_sync(pcap_ts->input);
++ break;
++ default:
++ DEBUGP("ERROR\n");
++ break;
++ }
++
++ return IRQ_HANDLED;
++}
++
++/* PCAP2 interrupts us if the pen touches down (interrupts also on pen up - WM)*/
++static irqreturn_t pcap_ts_irq_touch(int irq, void *dev_id)
++{
++ struct pcap_ts *pcap_ts = dev_id;
++
++ /* mask Touchscreen interrupt bit, prevents further touch events
++ * from being reported to us until we're finished with reading
++ * both pressure and x/y from ADC */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_MSR_TSM, 1);
++
++ DEBUGP("touched!!\n");
++ pcap_ts_mode(PCAP_TS_PRESSURE_MEASUREMENT);
++ pcap_ts->read_state = PRESSURE;
++ pcap_ts_start_xy_read(pcap_ts);
++
++ return IRQ_HANDLED;
++}
++
++static void pcap_ts_timer_fn(unsigned long data)
++{
++ struct pcap_ts *pcap_ts = (struct pcap_ts *) data;
++
++ pcap_ts_start_xy_read(pcap_ts);
++}
++
++static int __init ezxts_probe(struct platform_device *pdev)
++{
++ int ret;
++ u_int32_t tmp;
++ struct pcap_ts *pcap_ts;
++ struct input_dev *input_dev;
++ int err = -ENOMEM;
++
++ pcap_ts = kzalloc(sizeof(*pcap_ts), GFP_KERNEL);
++ input_dev = input_allocate_device();
++ if (!pcap_ts || !input_dev)
++ goto fail;
++
++ pcap_ts->irq_xy = platform_get_irq(pdev, 0);
++ if (pcap_ts->irq_xy < 0) {
++ err = pcap_ts->irq_xy;
++ goto fail;
++ }
++
++ pcap_ts->irq_touch = platform_get_irq(pdev, 1);
++ if (pcap_ts->irq_touch < 0) {
++ err = pcap_ts->irq_touch;
++ goto fail;
++ }
++
++ // Some initialization before done in ssp_pcap_open()
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_TS_REFENB, 0);
++ // ack interrupts
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ISR_ADCDONE2I, 1);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ISR_TSI, 1);
++ // unmask interrupts
++ // ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_MSR_TSM, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_MSR_ADCDONE2M, 0);
++ // set adc bits? FIXME I dont think its necessary - WM
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC2_ADINC1, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC2_ADINC2, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_ATO0, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_ATO1, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_ATO2, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_ATO3, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_ATOX, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_MTR1, 0);
++ ezx_pcap_bit_set( SSP_PCAP_ADJ_BIT_ADC1_MTR2, 0);
++
++ ret = ezx_pcap_read(SSP_PCAP_ADJ_ADC1_REGISTER, &tmp);
++ if (ret < 0)
++ return ret;
++
++ tmp &= (~SSP_PCAP_TOUCH_PANEL_POSITION_DETECT_MODE_MASK);
++ tmp |= PCAP_TS_STANDBY_MODE;
++
++ ret = ezx_pcap_write(SSP_PCAP_ADJ_ADC1_REGISTER, tmp);
++ if (ret < 0)
++ return ret;
++
++ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, SA_INTERRUPT,
++ "pcap-ts X/Y", pcap_ts);
++ if (err < 0) {
++ printk(KERN_ERR "pcap_ts: can't grab xy irq %d: %d\n",
++ pcap_ts->irq_xy, err);
++ goto fail;
++ }
++
++ err = request_irq(pcap_ts->irq_touch, pcap_ts_irq_touch, SA_INTERRUPT,
++ "pcap-ts touch", pcap_ts);
++ if (err < 0) {
++ printk(KERN_ERR "pcap_ts: can't grab touch irq %d: %d\n",
++ pcap_ts->irq_touch, err);
++ goto fail_xy;
++ }
++
++ pcap_ts->input = input_dev;
++ init_timer(&pcap_ts->timer);
++ pcap_ts->timer.data = (unsigned long) pcap_ts;
++ pcap_ts->timer.function = &pcap_ts_timer_fn;
++
++ platform_set_drvdata(pdev, pcap_ts);
++
++ pcap_ts->read_state = STANDBY;
++ pcap_ts_mode(PCAP_TS_STANDBY_MODE);
++
++ /* enable pressure interrupt */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_MSR_TSM, 0);
++
++ input_dev->name = "pcap-touchscreen";
++ input_dev->phys = "ezxts/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0002;
++ input_dev->id.version = 0x0100;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = pcap_ts;
++
++ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
++ input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
++ input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0);
++ input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0);
++ input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN,
++ PRESSURE_MAX, 0, 0);
++
++ input_register_device(pcap_ts->input);
++
++ return 0;
++
++fail_xy:
++ free_irq(pcap_ts->irq_xy, pcap_ts);
++fail:
++ input_free_device(input_dev);
++ kfree(pcap_ts);
++
++ return err;
++}
++
++static int ezxts_remove(struct platform_device *pdev)
++{
++ struct pcap_ts *pcap_ts = platform_get_drvdata(pdev);
++
++ del_timer_sync(&pcap_ts->timer);
++
++ free_irq(pcap_ts->irq_touch, pcap_ts);
++ free_irq(pcap_ts->irq_xy, pcap_ts);
++
++ input_unregister_device(pcap_ts->input);
++ kfree(pcap_ts);
++
++ return 0;
++}
++
++static int ezxts_suspend(struct platform_device *dev, pm_message_t state)
++{
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ADC1_TS_REF_LOWPWR, 1);
++ return 0;
++}
++
++static int ezxts_resume(struct platform_device *dev)
++{
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_ADC1_TS_REF_LOWPWR, 0);
++ /* just in case we suspend with TSI masked. */
++ ezx_pcap_bit_set(SSP_PCAP_ADJ_BIT_MSR_TSM, 0);
++ return 0;
++}
++
++
++static struct platform_driver ezxts_driver = {
++ .probe = ezxts_probe,
++ .remove = ezxts_remove,
++ .suspend = ezxts_suspend,
++ .resume = ezxts_resume,
++ .driver = {
++ .name = "pcap-ts",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ezxts_init(void)
++{
++ return platform_driver_register(&ezxts_driver);
++}
++
++static void __exit ezxts_exit(void)
++{
++ platform_driver_unregister(&ezxts_driver);
++}
++
++module_init(ezxts_init);
++module_exit(ezxts_exit);
++
++MODULE_DESCRIPTION("Motorola PCAP2 touchscreen driver");
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/drivers/input/touchscreen/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/input/touchscreen/Makefile 2007-06-02 20:17:58.000000000 -0300
++++ linux-2.6.21/drivers/input/touchscreen/Makefile 2007-06-02 20:18:40.000000000 -0300
+@@ -16,3 +16,4 @@
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
++obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o
diff --git a/packages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch
new file mode 100755
index 0000000000..425a5b984c
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/pxa-kbd.patch
@@ -0,0 +1,534 @@
+Index: linux-2.6.21/arch/arm/mach-pxa/generic.c
+===================================================================
+--- linux-2.6.21.orig/arch/arm/mach-pxa/generic.c 2007-06-01 20:04:10.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-pxa/generic.c 2007-06-01 20:04:45.000000000 +0200
+@@ -42,6 +42,7 @@
+ #include <asm/arch/mmc.h>
+ #include <asm/arch/irda.h>
+ #include <asm/arch/i2c.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+
+@@ -430,6 +431,30 @@
+ .id = -1,
+ };
+
++static struct resource pxa_kbd_resources[] = {
++ {
++ .start = IRQ_KEYPAD,
++ .end = IRQ_KEYPAD,
++ .flags = IORESOURCE_IRQ,
++ }, {
++ .start = 0x41500000,
++ .end = 0x4150004c,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device kbd_device = {
++ .name = "pxa-keyboard",
++ .id = -1,
++ .resource = pxa_kbd_resources,
++ .num_resources = ARRAY_SIZE(pxa_kbd_resources),
++};
++
++void __init pxa_set_kbd_info(struct pxakbd_platform_data *info)
++{
++ kbd_device.dev.platform_data = info;
++}
++
+ static struct platform_device *devices[] __initdata = {
+ &pxamci_device,
+ &udc_device,
+@@ -444,6 +469,7 @@
+ #endif
+ &i2s_device,
+ &pxartc_device,
++ &kbd_device,
+ };
+
+ static int __init pxa_init(void)
+Index: linux-2.6.21/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/input/keyboard/Kconfig 2007-06-01 20:04:10.000000000 +0200
++++ linux-2.6.21/drivers/input/keyboard/Kconfig 2007-06-01 20:04:45.000000000 +0200
+@@ -229,4 +229,11 @@
+ To compile this driver as a module, choose M here: the
+ module will be called gpio-keys.
+
++config KEYBOARD_PXA
++ tristate "Intel PXA keyboard support"
++ depends on ARCH_PXA
++ help
++ This add support for a driver of the Intel PXA2xx keyboard
++ controller.
++
+ endif
+Index: linux-2.6.21/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.21.orig/drivers/input/keyboard/Makefile 2007-06-01 20:04:10.000000000 +0200
++++ linux-2.6.21/drivers/input/keyboard/Makefile 2007-06-01 20:04:45.000000000 +0200
+@@ -19,4 +19,4 @@
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+ obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
+ obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
+-
++obj-$(CONFIG_KEYBOARD_PXA) += pxakbd.o
+Index: linux-2.6.21/include/asm-arm/arch-pxa/kbd.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/include/asm-arm/arch-pxa/kbd.h 2007-06-01 20:04:45.000000000 +0200
+@@ -0,0 +1,28 @@
++/*
++ * kbd_pxa.h
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++#ifndef _KBD_PXA_H_
++#define _KBD_PXA_H_
++
++struct pxakbd_platform_data {
++ int (*init)(void); /* init gpio, etc. */
++ unsigned int scan_interval;
++ struct {
++ unsigned int rows;
++ unsigned int cols;
++ unsigned char *keycode;
++ } matrix;
++ struct {
++ unsigned int num;
++ unsigned char *keycode;
++ } direct;
++};
++
++#endif
+Index: linux-2.6.21/drivers/input/keyboard/pxakbd.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.21/drivers/input/keyboard/pxakbd.c 2007-06-02 10:41:13.000000000 +0200
+@@ -0,0 +1,403 @@
++/*
++ * Driver for Motorola EZX phone "keyboard"
++ *
++ * (C) 2006 by Harald Welte <laforge@openezx.org>
++ *
++ * May, 2007 - Daniel Ribeiro <drwyrm@gmail.com>
++ * pm callbacks
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/input.h>
++#include <linux/spinlock.h>
++#include <linux/platform_device.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/kbd.h>
++#include <asm/arch/irqs.h>
++#include <asm/arch/pxa-regs.h>
++
++#if 0
++#define DEBUGP(x, args ...) printk(x, ## args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++/* per-keyboard private data structure */
++struct pxakbd {
++ struct input_dev *input;
++ struct timer_list timer;
++ spinlock_t lock;
++
++ struct resource *res;
++ unsigned int irq;
++ u_int32_t kpc;
++ u_int32_t kpkdi;
++
++ struct pxakbd_platform_data *pd;
++};
++
++static int pxakbd_scan_direct(struct pxakbd *pxakbd)
++{
++ u_int32_t kpdk;
++ unsigned int i;
++ int num_pressed = 0;
++
++ kpdk = KPDK & 0x000000ff;
++ for (i = 0; i < pxakbd->pd->direct.num; i++) {
++ int pressed = 0;
++
++ if (kpdk & (1 << i)) {
++ pressed = 1;
++ num_pressed++;
++ DEBUGP("pxakbd: pressed: direct %u\n", i);
++ }
++ if (pxakbd->pd->direct.keycode[i] != KEY_RESERVED) {
++ DEBUGP( "pxakbd: sending to input layer: keycode = %d, pressed = %d\n", pxakbd->pd->direct.keycode[i], pressed );
++ input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i],
++ pressed);
++ }
++ }
++ return num_pressed;
++}
++
++/* read the full 8x8 matrix from the PXA27x keypad controller */
++static inline void __read_matrix(u_int8_t *matrix)
++{
++ u_int32_t tmp;
++ u_int8_t row;
++
++ /* Fill the matrix by rows */
++
++ tmp = KPASMKP0;
++ for (row=0; row<8; row++) {
++ /* zero the matrix on the first time, then keep ORing */
++ matrix[row] = ((tmp >> row) & 1);
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 1;
++ }
++
++ tmp = KPASMKP1;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 2;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 3;
++ }
++
++ tmp = KPASMKP2;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 4;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 5;
++ }
++
++ tmp = KPASMKP3;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 6;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 7;
++ }
++}
++
++/* compare current matrix with last, generate 'diff' events */
++static int __cmp_matrix_gen_events(struct pxakbd *pxakbd, u_int8_t *matrix)
++{
++ unsigned int i;
++ int num_pressed = 0;
++
++ /* iterate over the matrix */
++ for (i = 0; i < pxakbd->pd->matrix.rows; i++) {
++ unsigned int j;
++ for (j = 0; j < pxakbd->pd->matrix.cols; j++) {
++ u_int32_t scancode =
++ (i * pxakbd->pd->matrix.cols) + j;
++ int pressed = matrix[i] & (1 << j);
++
++ if (pressed) {
++ DEBUGP("pxakbd: pressed: %u/%u\n", i, j);
++ num_pressed++;
++ }
++
++ input_report_key(pxakbd->input,
++ pxakbd->pd->matrix.keycode[scancode], pressed);
++ }
++ }
++
++ return num_pressed;
++}
++
++/* scan the matrix keypad */
++static int pxakbd_scan_matrix(struct pxakbd *pxakbd)
++{
++ int num_pressed;
++ u_int32_t kpas;
++ u_int8_t matrix[8];
++
++ kpas = KPAS;
++
++ if ((kpas & KPAS_MUKP) == KPAS_MUKP_NONE) {
++ /* no keys pressed */
++ memset(matrix, 0, sizeof(matrix));
++ } else if ((kpas & KPAS_MUKP) == KPAS_MUKP_ONE) {
++ /* one key pressed */
++ u_int8_t row = (kpas & KPAS_RP) >> 4;
++ u_int8_t col = kpas & KPAS_CP;
++
++ if (row == 0x0f || col == 0x0f) {
++ printk(KERN_WARNING "pxakbd: col or row invalid!\n");
++ return -1;
++ }
++
++ /* clear the matrix and set the single pressed key */
++ memset(matrix, 0, sizeof(matrix));
++ matrix[row] |= (1 << col);
++ } else {
++ /* multiple keys pressed */
++ __read_matrix(matrix);
++ }
++
++ num_pressed = __cmp_matrix_gen_events(pxakbd, matrix);
++
++ return num_pressed;
++}
++
++static void pxakbd_timer_callback(unsigned long data)
++{
++ unsigned long flags;
++ struct pxakbd *pxakbd = (struct pxakbd *) data;
++ unsigned int num_pressed;
++
++ spin_lock_irqsave(&pxakbd->lock, flags);
++
++ num_pressed = pxakbd_scan_direct(pxakbd);
++ num_pressed += pxakbd_scan_matrix(pxakbd);
++
++ spin_unlock_irqrestore(&pxakbd->lock, flags);
++
++ /* propagate events up the input stack */
++ input_sync(pxakbd->input);
++}
++
++static irqreturn_t pxakbd_interrupt(int irq, void *dummy)
++{
++ struct pxakbd *pxakbd = dummy;
++ u_int32_t kpc;
++ int handled = 0;
++ int num_pressed = 0;
++
++ /* read and clear interrupt */
++ kpc = KPC;
++
++ if (kpc & KPC_DI) {
++ num_pressed += pxakbd_scan_direct(pxakbd);
++ handled = 1;
++ }
++
++ if (kpc & KPC_MI) {
++ while (KPAS & KPAS_SO) {
++ /* wait for scan to complete beforereading scan regs */
++ cpu_relax();
++ }
++ num_pressed += pxakbd_scan_matrix(pxakbd);
++ handled = 1;
++ }
++
++ /* If any keys are currently pressed, we need to start the timer to detect
++ * key release. */
++ if (num_pressed)
++ mod_timer(&pxakbd->timer, jiffies + pxakbd->pd->scan_interval);
++
++ /* propagate events up the input stack */
++ input_sync(pxakbd->input);
++
++ return IRQ_RETVAL(handled);
++}
++
++static int __init pxakbd_probe(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd;
++ struct input_dev *input_dev;
++ struct resource *r;
++ int i;
++ int ret = -ENOMEM;
++
++ int rows, cols, n_direct;
++
++ if (!pdev->dev.platform_data) {
++ printk(KERN_ERR "pxakbd: platform data not set\n");
++ ret = -ENODEV;
++ goto out;
++ }
++
++ pxakbd = kzalloc(sizeof(*pxakbd), GFP_KERNEL);
++ if (!pxakbd)
++ goto out;
++
++ input_dev = input_allocate_device();
++ if (!input_dev)
++ goto out_pxa;
++
++ spin_lock_init(&pxakbd->lock);
++ pxakbd->irq = platform_get_irq(pdev, 0);
++ r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!r || pxakbd->irq == NO_IRQ) {
++ printk(KERN_ERR "pxakbd: invalid resources\n");
++ ret = -EBUSY;
++ goto out_idev;
++ }
++
++ pxakbd->input = input_dev;
++ init_timer(&pxakbd->timer);
++ pxakbd->timer.function = pxakbd_timer_callback;
++ pxakbd->timer.data = (unsigned long) pxakbd;
++ pxakbd->pd = pdev->dev.platform_data;
++ pxakbd->res = r;
++
++ rows = pxakbd->pd->matrix.rows;
++ cols = pxakbd->pd->matrix.cols;
++ n_direct = pxakbd->pd->direct.num;
++
++ input_dev->name = "pxa-keyboard";
++ input_dev->phys = "pxakbd/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0001;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = pxakbd;
++
++ input_dev->evbit[0] = BIT(EV_KEY)|BIT(EV_REP);
++
++ input_dev->keycodesize = sizeof(unsigned char);
++ input_dev->keycodemax = (rows*cols)+n_direct;
++ input_dev->keycode = kmalloc(input_dev->keycodemax*input_dev->keycodesize,
++ GFP_KERNEL);
++ if (!input_dev->keycode){
++ ret = -ENOMEM;
++ goto out_idev;
++ }
++
++ memcpy(input_dev->keycode, pxakbd->pd->matrix.keycode, rows*cols);
++
++ memcpy(input_dev->keycode+(rows*cols),
++ pxakbd->pd->direct.keycode,
++ n_direct);
++
++ for (i = 0; i < rows*cols; i++)
++ set_bit(pxakbd->pd->matrix.keycode[i], input_dev->keybit);
++
++ for (i = 0; i < n_direct; i++)
++ set_bit(pxakbd->pd->direct.keycode[i], input_dev->keybit);
++
++ clear_bit(0, input_dev->keybit);
++
++ if (request_irq(pxakbd->irq, pxakbd_interrupt, 0, "pxakbd", pxakbd)) {
++ printk(KERN_ERR "pxakbd: can't request irq %d\n", pxakbd->irq);
++ ret = -EBUSY;
++ goto out_idev;
++ }
++
++ r = request_mem_region(r->start, 0x4c, "pxakbd");
++ if (!r) {
++ printk(KERN_ERR "pxakbd: can't request memregion\n");
++ ret = -EBUSY;
++ goto out_irq;
++ }
++
++ /* set up gpio */
++ pxakbd->pd->init();
++
++ /* set keypad control register */
++ KPC = (KPC_ASACT | /* automatic scan on activity */
++ KPC_ME | KPC_DE | /* matrix and direct keypad enabled */
++ ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */
++ ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */
++ ((pxakbd->pd->direct.num-1)<<6) | /* direct keys */
++ KPC_MS_ALL); /* scan all columns */
++
++ pxa_set_cken(CKEN19_KEYPAD, 1);
++
++ KPC |= (KPC_DIE | KPC_MIE); /* enable matrix and direct keyboard */
++
++ KPKDI = 0x40; /* matrix key debounce interval: 0x40 */
++
++ platform_set_drvdata(pdev, pxakbd);
++
++ return input_register_device(pxakbd->input);
++
++out_drvdata:
++ platform_set_drvdata(pdev, NULL);
++out_mem:
++ release_resource(r);
++out_irq:
++ free_irq(pxakbd->irq, pxakbd);
++out_idev:
++ kfree(input_dev->keycode);
++ input_free_device(input_dev);
++out_pxa:
++ kfree(pxakbd);
++out:
++ return ret;
++}
++
++static int pxakbd_remove(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ kfree(pxakbd->input->keycode);
++ input_unregister_device(pxakbd->input);
++ platform_set_drvdata(pdev, NULL);
++ release_resource(pxakbd->res);
++ free_irq(pxakbd->irq, pxakbd);
++ kfree(pxakbd);
++
++ return 0;
++}
++
++static int pxakbd_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ pxakbd->kpc = KPC;
++ pxakbd->kpkdi = KPKDI;
++
++ return 0;
++}
++
++static int pxakbd_resume(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ KPC = pxakbd->kpc;
++ KPKDI = pxakbd->kpkdi;
++
++ return 0;
++}
++
++static struct platform_driver pxakbd_driver = {
++ .probe = &pxakbd_probe,
++ .remove = &pxakbd_remove,
++ .suspend = &pxakbd_suspend,
++ .resume = &pxakbd_resume,
++ .driver = {
++ .name = "pxa-keyboard",
++ },
++};
++
++static int __devinit pxakbd_init(void)
++{
++ return platform_driver_register(&pxakbd_driver);
++}
++
++static void __exit pxakbd_exit(void)
++{
++ platform_driver_unregister(&pxakbd_driver);
++}
++
++module_init(pxakbd_init);
++module_exit(pxakbd_exit);
++
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_DESCRIPTION("Driver for Intel PXA27x keypad controller");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-06-01 20:04:45.000000000 +0200
++++ linux-2.6.21/include/asm-arm/arch-pxa/pxa-regs.h 2007-06-01 20:04:45.000000000 +0200
+@@ -2165,6 +2165,11 @@
+ #define KPMK_MKP (0x1 << 31)
+ #define KPAS_SO (0x1 << 31)
+ #define KPASMKPx_SO (0x1 << 31)
++#define KPAS_RP (0x000000f0)
++#define KPAS_CP (0x0000000f)
++#define KPAS_MUKP (0x7c000000)
++#define KPAS_MUKP_ONE (0x04000000)
++#define KPAS_MUKP_NONE (0x00000000)
+
+ /*
+ * UHC: USB Host Controller (OHCI-like) register definitions
diff --git a/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-support.2.patch b/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-support.2.patch
new file mode 100755
index 0000000000..d35e40f046
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/pxa27x-udc-support.2.patch
@@ -0,0 +1,3037 @@
+diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
+index 4097a86..5d3ea6e 100644
+--- a/drivers/usb/gadget/Kconfig
++++ b/drivers/usb/gadget/Kconfig
+@@ -111,6 +111,24 @@ config USB_PXA2XX
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+
++config USB_GADGET_PXA27X
++ boolean "PXA 27x"
++ depends on ARCH_PXA && PXA27x
++ help
++ Intel's PXA 27x series XScale processors include an integrated
++ full speed USB 1.1 device controller.
++
++ Say "y" to link the driver statically, or "m" to build a
++ dynamically linked module called "pxa2xx_udc" and force all
++ gadget drivers to also be dynamically linked.
++
++
++config USB_PXA27X
++ tristate
++ depends on USB_GADGET_PXA27X
++ default USB_GADGET
++ select USB_GADGET_SELECTED
++
+ # if there's only one gadget driver, using only two bulk endpoints,
+ # don't waste memory for the other endpoints
+ config USB_PXA2XX_SMALL
+diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
+index e71e086..7e508a6 100644
+--- a/drivers/usb/gadget/Makefile
++++ b/drivers/usb/gadget/Makefile
+@@ -4,6 +4,7 @@
+ obj-$(CONFIG_USB_DUMMY_HCD) += dummy_hcd.o
+ obj-$(CONFIG_USB_NET2280) += net2280.o
+ obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o
++obj-$(CONFIG_USB_PXA27X) += pxa27x_udc.o
+ obj-$(CONFIG_USB_GOKU) += goku_udc.o
+ obj-$(CONFIG_USB_OMAP) += omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o
+diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c
+index f28af06..e7d72ff 100644
+--- a/drivers/usb/gadget/epautoconf.c
++++ b/drivers/usb/gadget/epautoconf.c
+@@ -230,7 +230,8 @@ find_ep (struct usb_gadget *gadget, const char *name)
+ */
+ struct usb_ep * __devinit usb_ep_autoconfig (
+ struct usb_gadget *gadget,
+- struct usb_endpoint_descriptor *desc
++ struct usb_endpoint_descriptor *desc,
++ int config, int interface, int alt
+ )
+ {
+ struct usb_ep *ep;
+@@ -238,6 +239,11 @@ struct usb_ep * __devinit usb_ep_autoconfig (
+
+ type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+
++ /* If have ep_alloc() function use it! */
++ if (gadget->ops->ep_alloc)
++ return gadget->ops->ep_alloc(gadget, desc,
++ config, interface, alt);
++
+ /* First, apply chip-specific "best usage" knowledge.
+ * This might make a good usb_gadget_ops hook ...
+ */
+diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
+index 04e6b85..bc6de31 100644
+--- a/drivers/usb/gadget/ether.c
++++ b/drivers/usb/gadget/ether.c
+@@ -258,10 +258,6 @@ MODULE_PARM_DESC(host_addr, "Host Ethernet Address");
+ #define DEV_CONFIG_CDC
+ #endif
+
+-#ifdef CONFIG_USB_GADGET_PXA27X
+-#define DEV_CONFIG_CDC
+-#endif
+-
+ #ifdef CONFIG_USB_GADGET_S3C2410
+ #define DEV_CONFIG_CDC
+ #endif
+@@ -294,6 +290,10 @@ MODULE_PARM_DESC(host_addr, "Host Ethernet Address");
+ #define DEV_CONFIG_SUBSET
+ #endif
+
++#ifdef CONFIG_USB_GADGET_PXA27X
++#define DEV_CONFIG_SUBSET
++#endif
++
+ #ifdef CONFIG_USB_GADGET_SA1100
+ /* use non-CDC for backwards compatibility */
+ #define DEV_CONFIG_SUBSET
+@@ -2309,6 +2309,9 @@ eth_bind (struct usb_gadget *gadget)
+ * non-CDC to be compatible with ARM Linux-2.4 "usb-eth".
+ */
+ cdc = 0;
++ } else if (gadget_is_pxa27x(gadget)) {
++ /* hardware can't write zlps */
++ zlp = 0;
+ }
+
+ gcnum = usb_gadget_controller_number (gadget);
+@@ -2375,7 +2378,22 @@ eth_bind (struct usb_gadget *gadget)
+
+ /* all we really need is bulk IN/OUT */
+ usb_ep_autoconfig_reset (gadget);
+- in_ep = usb_ep_autoconfig (gadget, &fs_source_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_data_intf.bInterfaceNumber,
++ (int)rndis_data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_CONFIG_VALUE,
++ (int)data_intf.bInterfaceNumber,
++ (int)data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_SUBSET)
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_CONFIG_VALUE,
++ (int)subset_data_intf.bInterfaceNumber,
++ (int)subset_data_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
+ if (!in_ep) {
+ autoconf_fail:
+ dev_err (&gadget->dev,
+@@ -2385,7 +2403,22 @@ autoconf_fail:
+ }
+ in_ep->driver_data = in_ep; /* claim */
+
+- out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_data_intf.bInterfaceNumber,
++ (int)rndis_data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_CONFIG_VALUE,
++ (int)data_intf.bInterfaceNumber,
++ (int)data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_SUBSET)
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_CONFIG_VALUE,
++ (int)subset_data_intf.bInterfaceNumber,
++ (int)subset_data_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
+ if (!out_ep)
+ goto autoconf_fail;
+ out_ep->driver_data = out_ep; /* claim */
+@@ -2395,7 +2428,17 @@ autoconf_fail:
+ * Since some hosts expect one, try to allocate one anyway.
+ */
+ if (cdc || rndis) {
+- status_ep = usb_ep_autoconfig (gadget, &fs_status_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_control_intf.bInterfaceNumber,
++ (int)rndis_control_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc,
++ DEV_CONFIG_VALUE,
++ (int)control_intf.bInterfaceNumber,
++ (int)control_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
+ if (status_ep) {
+ status_ep->driver_data = status_ep; /* claim */
+ } else if (rndis) {
+@@ -2403,13 +2446,14 @@ autoconf_fail:
+ "can't run RNDIS on %s\n",
+ gadget->name);
+ return -ENODEV;
++ }
+ #ifdef DEV_CONFIG_CDC
+ /* pxa25x only does CDC subset; often used with RNDIS */
+- } else if (cdc) {
++ else if (cdc) {
+ control_intf.bNumEndpoints = 0;
+ /* FIXME remove endpoint from descriptor list */
+-#endif
+ }
++#endif
+ }
+ #endif
+
+diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
+index c6b6479..6af5fdd 100644
+--- a/drivers/usb/gadget/file_storage.c
++++ b/drivers/usb/gadget/file_storage.c
+@@ -3920,20 +3920,20 @@ static int __init fsg_bind(struct usb_gadget *gadget)
+
+ /* Find all the endpoints we will use */
+ usb_ep_autoconfig_reset(gadget);
+- ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+ fsg->bulk_in = ep;
+
+- ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+ fsg->bulk_out = ep;
+
+ if (transport_is_cbi()) {
+- ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
+index 2e3d662..f3b3291 100644
+--- a/drivers/usb/gadget/gadget_chips.h
++++ b/drivers/usb/gadget/gadget_chips.h
+@@ -177,5 +177,7 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
+ return 0x17;
+ else if (gadget_is_husb2dev(gadget))
+ return 0x18;
++ else if (gadget_is_pxa27x(gadget))
++ return 0x19;
+ return -ENOENT;
+ }
+diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c
+index d08a8d0..d51feb2 100644
+--- a/drivers/usb/gadget/gmidi.c
++++ b/drivers/usb/gadget/gmidi.c
+@@ -1204,7 +1204,7 @@ static int __devinit gmidi_bind(struct usb_gadget *gadget)
+ * but there may also be important quirks to address.
+ */
+ usb_ep_autoconfig_reset(gadget);
+- in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc);
++ in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc, 0, 0, 0);
+ if (!in_ep) {
+ autoconf_fail:
+ printk(KERN_ERR "%s: can't autoconfigure on %s\n",
+@@ -1214,7 +1214,7 @@ autoconf_fail:
+ EP_IN_NAME = in_ep->name;
+ in_ep->driver_data = in_ep; /* claim */
+
+- out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc);
++ out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc, 0, 0, 0);
+ if (!out_ep) {
+ goto autoconf_fail;
+ }
+diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c
+new file mode 100644
+index 0000000..d89ecc5
+--- /dev/null
++++ b/drivers/usb/gadget/pxa27x_udc.c
+@@ -0,0 +1,2354 @@
++/*
++ * linux/drivers/usb/gadget/pxa27x_udc.c
++ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers
++ *
++ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
++ * Copyright (C) 2003 Robert Schwebel, Pengutronix
++ * Copyright (C) 2003 Benedikt Spranger, Pengutronix
++ * Copyright (C) 2003 David Brownell
++ * Copyright (C) 2003 Joshua Wise
++ * Copyright (C) 2004 Intel Corporation
++ * Copyright (C) 2007 Rodolfo Giometti <giometti@linux.it>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#undef DEBUG
++/* #define VERBOSE DBG_VERBOSE */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/types.h>
++#include <linux/version.h>
++#include <linux/errno.h>
++#include <linux/delay.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/proc_fs.h>
++#include <linux/mm.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/platform_device.h>
++
++#include <asm/byteorder.h>
++#include <asm/dma.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/mach-types.h>
++#include <asm/unaligned.h>
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#include <linux/usb/ch9.h>
++#include <linux/usb_gadget.h>
++
++#include <asm/arch/udc.h>
++
++
++/*
++ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
++ * series processors.
++ * Such controller drivers work with a gadget driver. The gadget driver
++ * returns descriptors, implements configuration and data protocols used
++ * by the host to interact with this device, and allocates endpoints to
++ * the different protocol interfaces. The controller driver virtualizes
++ * usb hardware so that the gadget drivers will be more portable.
++ *
++ * This UDC hardware wants to implement a bit too much USB protocol, so
++ * it constrains the sorts of USB configuration change events that work.
++ * The errata for these chips are misleading; some "fixed" bugs from
++ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there.
++ */
++
++#define DRIVER_VERSION "08-Feb-2007"
++#define DRIVER_DESC "PXA 27x USB Device Controller driver"
++
++
++static const char driver_name [] = "pxa27x_udc";
++
++static const char ep0name [] = "ep0";
++
++
++#undef USE_DMA
++#undef DISABLE_TEST_MODE
++
++#ifdef CONFIG_PROC_FS
++#define UDC_PROC_FILE
++#endif
++
++#include "pxa27x_udc.h"
++
++#ifdef CONFIG_EMBEDDED
++/* few strings, and little code to use them */
++#undef DEBUG
++#undef UDC_PROC_FILE
++#endif
++
++#ifdef USE_DMA
++static int use_dma = 1;
++module_param(use_dma, bool, 0);
++MODULE_PARM_DESC (use_dma, "true to use dma");
++
++static void dma_nodesc_handler (int dmach, void *_ep);
++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req);
++
++#define DMASTR " (dma support)"
++
++#else /* !USE_DMA */
++#define DMASTR " (pio only)"
++#endif
++
++#ifdef CONFIG_USB_PXA27X_SMALL
++#define SIZE_STR " (small)"
++#else
++#define SIZE_STR ""
++#endif
++
++#ifdef DISABLE_TEST_MODE
++/* (mode == 0) == no undocumented chip tweaks
++ * (mode & 1) == double buffer bulk IN
++ * (mode & 2) == double buffer bulk OUT
++ * ... so mode = 3 (or 7, 15, etc) does it for both
++ */
++static ushort fifo_mode = 0;
++module_param(fifo_mode, ushort, 0);
++MODULE_PARM_DESC (fifo_mode, "pxa27x udc fifo mode");
++#endif
++
++#define UDCISR0_IR0 0x3
++#define UDCISR_INT_MASK (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP)
++#define UDCICR_INT_MASK UDCISR_INT_MASK
++
++#define UDCCSR_MASK (UDCCSR_FST | UDCCSR_DME)
++/* ---------------------------------------------------------------------------
++ * endpoint related parts of the api to the usb controller hardware,
++ * used by gadget driver; and the inner talker-to-hardware core.
++ * ---------------------------------------------------------------------------
++ */
++
++static void pxa27x_ep_fifo_flush (struct usb_ep *ep);
++static void nuke (struct pxa27x_ep *, int status);
++
++static void pio_irq_enable(int ep_num)
++{
++ if (ep_num < 16)
++ UDCICR0 |= 3 << (ep_num * 2);
++ else {
++ ep_num -= 16;
++ UDCICR1 |= 3 << (ep_num * 2);
++ }
++}
++
++static void pio_irq_disable(int ep_num)
++{
++ ep_num &= 0xf;
++ if (ep_num < 16)
++ UDCICR0 &= ~(3 << (ep_num * 2));
++ else {
++ ep_num -= 16;
++ UDCICR1 &= ~(3 << (ep_num * 2));
++ }
++}
++
++/* The UDCCR reg contains mask and interrupt status bits,
++ * so using '|=' isn't safe as it may ack an interrupt.
++ */
++#define UDCCR_MASK_BITS (UDCCR_OEN | UDCCR_UDE)
++
++static inline void udc_set_mask_UDCCR(int mask)
++{
++ UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_clear_mask_UDCCR(int mask)
++{
++ UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_ack_int_UDCCR(int mask)
++{
++ /* udccr contains the bits we dont want to change */
++ __u32 udccr = UDCCR & UDCCR_MASK_BITS;
++
++ UDCCR = udccr | (mask & ~UDCCR_MASK_BITS);
++}
++
++/*
++ * endpoint enable/disable
++ *
++ * we need to verify the descriptors used to enable endpoints. since pxa27x
++ * endpoint configurations are fixed, and are pretty much always enabled,
++ * there's not a lot to manage here.
++ *
++ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints,
++ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except
++ * for a single interface (with only the default altsetting) and for gadget
++ * drivers that don't halt endpoints (not reset by set_interface). that also
++ * means that if you use ISO, you must violate the USB spec rule that all
++ * iso endpoints must be in non-default altsettings.
++ */
++static int pxa27x_ep_enable (struct usb_ep *_ep,
++ const struct usb_endpoint_descriptor *desc)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_udc *dev;
++
++ ep = container_of (_ep, struct pxa27x_ep, ep);
++ if (!_ep || !desc || _ep->name == ep0name
++ || desc->bDescriptorType != USB_DT_ENDPOINT
++ || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) {
++ DMSG("%s, bad ep or descriptor\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ /* xfer types must match, except that interrupt ~= bulk */
++ if( ep->ep_type != USB_ENDPOINT_XFER_BULK
++ && desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
++ DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name);
++ return -EINVAL;
++ }
++
++ /* hardware _could_ do smaller, but driver doesn't */
++ if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK
++ && le16_to_cpu (desc->wMaxPacketSize)
++ != BULK_FIFO_SIZE)
++ || !desc->wMaxPacketSize) {
++ DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name);
++ return -ERANGE;
++ }
++
++ dev = ep->dev;
++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) {
++ DMSG("%s, bogus device state\n", __FUNCTION__);
++ return -ESHUTDOWN;
++ }
++
++ ep->desc = desc;
++ ep->dma = -1;
++ ep->stopped = 0;
++ ep->pio_irqs = ep->dma_irqs = 0;
++ ep->ep.maxpacket = le16_to_cpu (desc->wMaxPacketSize);
++
++ /* flush fifo (mostly for OUT buffers) */
++ pxa27x_ep_fifo_flush (_ep);
++
++ /* ... reset halt state too, if we could ... */
++
++#ifdef USE_DMA
++ /* for (some) bulk and ISO endpoints, try to get a DMA channel and
++ * bind it to the endpoint. otherwise use PIO.
++ */
++ DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type);
++ switch (ep->ep_type) {
++ case USB_ENDPOINT_XFER_ISOC:
++ if (le16_to_cpu(desc->wMaxPacketSize) % 32)
++ break;
++ // fall through
++ case USB_ENDPOINT_XFER_BULK:
++ if (!use_dma || !ep->reg_drcmr)
++ break;
++ ep->dma = pxa_request_dma ((char *)_ep->name,
++ (le16_to_cpu (desc->wMaxPacketSize) > 64)
++ ? DMA_PRIO_MEDIUM /* some iso */
++ : DMA_PRIO_LOW,
++ dma_nodesc_handler, ep);
++ if (ep->dma >= 0) {
++ *ep->reg_drcmr = DRCMR_MAPVLD | ep->dma;
++ DMSG("%s using dma%d\n", _ep->name, ep->dma);
++ }
++ default:
++ break;
++ }
++#endif
++ DBG(DBG_VERBOSE, "enabled %s\n", _ep->name);
++ return 0;
++}
++
++static int pxa27x_ep_disable (struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of (_ep, struct pxa27x_ep, ep);
++ if (!_ep || !ep->desc) {
++ DMSG("%s, %s not enabled\n", __FUNCTION__,
++ _ep ? ep->ep.name : NULL);
++ return -EINVAL;
++ }
++ nuke (ep, -ESHUTDOWN);
++
++#ifdef USE_DMA
++ if (ep->dma >= 0) {
++ *ep->reg_drcmr = 0;
++ pxa_free_dma (ep->dma);
++ ep->dma = -1;
++ }
++#endif
++
++ /* flush fifo (mostly for IN buffers) */
++ pxa27x_ep_fifo_flush (_ep);
++
++ ep->desc = 0;
++ ep->stopped = 1;
++
++ DBG(DBG_VERBOSE, "%s disabled\n", _ep->name);
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++/* for the pxa27x, these can just wrap kmalloc/kfree. gadget drivers
++ * must still pass correctly initialized endpoints, since other controller
++ * drivers may care about how it's currently set up (dma issues etc).
++ */
++
++/*
++ * pxa27x_ep_alloc_request - allocate a request data structure
++ */
++static struct usb_request *
++pxa27x_ep_alloc_request (struct usb_ep *_ep, unsigned int gfp_flags)
++{
++ struct pxa27x_request *req;
++
++ req = kmalloc (sizeof *req, gfp_flags);
++ if (!req)
++ return 0;
++
++ memset (req, 0, sizeof *req);
++ INIT_LIST_HEAD (&req->queue);
++ return &req->req;
++}
++
++
++/*
++ * pxa27x_ep_free_request - deallocate a request data structure
++ */
++static void
++pxa27x_ep_free_request (struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct pxa27x_request *req;
++
++ req = container_of(_req, struct pxa27x_request, req);
++ WARN_ON (!list_empty (&req->queue));
++ kfree(req);
++}
++
++
++/* PXA cache needs flushing with DMA I/O (it's dma-incoherent), but there's
++ * no device-affinity and the heap works perfectly well for i/o buffers.
++ * It wastes much less memory than dma_alloc_coherent() would, and even
++ * prevents cacheline (32 bytes wide) sharing problems.
++ */
++static void *
++pxa27x_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes,
++ dma_addr_t *dma, unsigned int gfp_flags)
++{
++ char *retval;
++
++ retval = kmalloc (bytes, gfp_flags & ~(__GFP_DMA|__GFP_HIGHMEM));
++ if (retval)
++ *dma = virt_to_bus (retval);
++ return retval;
++}
++
++static void
++pxa27x_ep_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma,
++ unsigned bytes)
++{
++ kfree (buf);
++}
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * done - retire a request; caller blocked irqs
++ */
++static void done(struct pxa27x_ep *ep, struct pxa27x_request *req, int status)
++{
++ list_del_init(&req->queue);
++ if (likely (req->req.status == -EINPROGRESS))
++ req->req.status = status;
++ else
++ status = req->req.status;
++
++ if (status && status != -ESHUTDOWN)
++ DBG(DBG_VERBOSE, "complete %s req %p stat %d len %u/%u\n",
++ ep->ep.name, &req->req, status,
++ req->req.actual, req->req.length);
++
++ /* don't modify queue heads during completion callback */
++ req->req.complete(&ep->ep, &req->req);
++}
++
++
++static inline void ep0_idle (struct pxa27x_udc *dev)
++{
++ dev->ep0state = EP0_IDLE;
++ LED_EP0_OFF;
++}
++
++static int
++write_packet(volatile u32 *uddr, struct pxa27x_request *req, unsigned max)
++{
++ u32 *buf;
++ int length, count, remain;
++
++ buf = (u32*)(req->req.buf + req->req.actual);
++ prefetch(buf);
++
++ /* how big will this packet be? */
++ length = min(req->req.length - req->req.actual, max);
++ req->req.actual += length;
++
++ remain = length & 0x3;
++ count = length & ~(0x3);
++
++ while (likely(count)) {
++ *uddr = *buf++;
++ count -= 4;
++ }
++
++ if (remain) {
++ volatile u8* reg=(u8*)uddr;
++ char *rd =(u8*)buf;
++
++ while (remain--) {
++ *reg=*rd++;
++ }
++ }
++
++ return length;
++}
++
++/*
++ * write to an IN endpoint fifo, as many packets as possible.
++ * irqs will use this to write the rest later.
++ * caller guarantees at least one packet buffer is ready (or a zlp).
++ */
++static int
++write_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ unsigned max;
++
++ max = le16_to_cpu(ep->desc->wMaxPacketSize);
++ do {
++ int count;
++ int is_last, is_short;
++
++ count = write_packet(ep->reg_udcdr, req, max);
++
++ /* last packet is usually short (or a zlp) */
++ if (unlikely (count != max))
++ is_last = is_short = 1;
++ else {
++ if (likely(req->req.length != req->req.actual)
++ || req->req.zero)
++ is_last = 0;
++ else
++ is_last = 1;
++ /* interrupt/iso maxpacket may not fill the fifo */
++ is_short = unlikely (max < ep->fifo_size);
++ }
++
++ DMSG("wrote %s count:%d bytes%s%s %d left %p\n",
++ ep->ep.name, count,
++ is_last ? "/L" : "", is_short ? "/S" : "",
++ req->req.length - req->req.actual, &req->req);
++
++ /* let loose that packet. maybe try writing another one,
++ * double buffering might work. TSP, TPC, and TFS
++ * bit values are the same for all normal IN endpoints.
++ */
++ *ep->reg_udccsr = UDCCSR_PC;
++ if (is_short)
++ *ep->reg_udccsr = UDCCSR_SP;
++
++ /* requests complete when all IN data is in the FIFO */
++ if (is_last) {
++ done (ep, req, 0);
++ if (list_empty(&ep->queue) || unlikely(ep->dma >= 0)) {
++ pio_irq_disable (ep->ep_num);
++#ifdef USE_DMA
++ /* unaligned data and zlps couldn't use dma */
++ if (unlikely(!list_empty(&ep->queue))) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request, queue);
++ kick_dma(ep,req);
++ return 0;
++ }
++#endif
++ }
++ return 1;
++ }
++
++ // TODO experiment: how robust can fifo mode tweaking be?
++ // double buffering is off in the default fifo mode, which
++ // prevents TFS from being set here.
++
++ } while (*ep->reg_udccsr & UDCCSR_FS);
++ return 0;
++}
++
++/* caller asserts req->pending (ep0 irq status nyet cleared); starts
++ * ep0 data stage. these chips want very simple state transitions.
++ */
++static inline
++void ep0start(struct pxa27x_udc *dev, u32 flags, const char *tag)
++{
++ UDCCSR0 = flags|UDCCSR0_SA|UDCCSR0_OPC;
++ UDCISR0 = UDCICR_INT(0, UDC_INT_FIFOERROR | UDC_INT_PACKETCMP);
++ dev->req_pending = 0;
++ DBG(DBG_VERY_NOISY, "%s %s, %02x/%02x\n",
++ __FUNCTION__, tag, UDCCSR0, flags);
++}
++
++static int
++write_ep0_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ unsigned count;
++ int is_short;
++
++ count = write_packet(&UDCDR0, req, EP0_FIFO_SIZE);
++ ep->dev->stats.write.bytes += count;
++
++ /* last packet "must be" short (or a zlp) */
++ is_short = (count != EP0_FIFO_SIZE);
++
++ DBG(DBG_VERY_NOISY, "ep0in %d bytes %d left %p\n", count,
++ req->req.length - req->req.actual, &req->req);
++
++ if (unlikely (is_short)) {
++ if (ep->dev->req_pending)
++ ep0start(ep->dev, UDCCSR0_IPR, "short IN");
++ else
++ UDCCSR0 = UDCCSR0_IPR;
++
++ count = req->req.length;
++ done (ep, req, 0);
++ ep0_idle(ep->dev);
++#if 0
++ /* This seems to get rid of lost status irqs in some cases:
++ * host responds quickly, or next request involves config
++ * change automagic, or should have been hidden, or ...
++ *
++ * FIXME get rid of all udelays possible...
++ */
++ if (count >= EP0_FIFO_SIZE) {
++ count = 100;
++ do {
++ if ((UDCCSR0 & UDCCSR0_OPC) != 0) {
++ /* clear OPC, generate ack */
++ UDCCSR0 = UDCCSR0_OPC;
++ break;
++ }
++ count--;
++ udelay(1);
++ } while (count);
++ }
++#endif
++ } else if (ep->dev->req_pending)
++ ep0start(ep->dev, 0, "IN");
++ return is_short;
++}
++
++
++/*
++ * read_fifo - unload packet(s) from the fifo we use for usb OUT
++ * transfers and put them into the request. caller should have made
++ * sure there's at least one packet ready.
++ *
++ * returns true if the request completed because of short packet or the
++ * request buffer having filled (and maybe overran till end-of-packet).
++ */
++static int
++read_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ for (;;) {
++ u32 *buf;
++ int bufferspace, count, is_short;
++
++ /* make sure there's a packet in the FIFO.*/
++ if (unlikely ((*ep->reg_udccsr & UDCCSR_PC) == 0))
++ break;
++ buf =(u32*) (req->req.buf + req->req.actual);
++ prefetchw(buf);
++ bufferspace = req->req.length - req->req.actual;
++
++ /* read all bytes from this packet */
++ if (likely (*ep->reg_udccsr & UDCCSR_BNE)) {
++ count = 0x3ff & *ep->reg_udcbcr;
++ req->req.actual += min (count, bufferspace);
++ } else /* zlp */
++ count = 0;
++
++ is_short = (count < ep->ep.maxpacket);
++ DMSG("read %s udccsr:%02x, count:%d bytes%s req %p %d/%d\n",
++ ep->ep.name, *ep->reg_udccsr, count,
++ is_short ? "/S" : "",
++ &req->req, req->req.actual, req->req.length);
++
++// dump_regs(ep->ep_num );
++ count = min(count, bufferspace);
++ while (likely (count > 0)) {
++ *buf++ = *ep->reg_udcdr;
++ count -= 4;
++ }
++ DMSG("Buf:0x%p\n", req->req.buf);
++
++ *ep->reg_udccsr = UDCCSR_PC;
++ /* RPC/RSP/RNE could now reflect the other packet buffer */
++
++ /* completion */
++ if (is_short || req->req.actual == req->req.length) {
++ done (ep, req, 0);
++ if (list_empty(&ep->queue))
++ pio_irq_disable (ep->ep_num);
++ return 1;
++ }
++
++ /* finished that packet. the next one may be waiting... */
++ }
++ return 0;
++}
++
++/*
++ * special ep0 version of the above. no UBCR0 or double buffering; status
++ * handshaking is magic. most device protocols don't need control-OUT.
++ * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other
++ * protocols do use them.
++ */
++static int
++read_ep0_fifo (struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ u32 *buf, word;
++ unsigned bufferspace;
++
++ buf = (u32*) (req->req.buf + req->req.actual);
++ bufferspace = req->req.length - req->req.actual;
++
++ while (UDCCSR0 & UDCCSR0_RNE) {
++ word = UDCDR0;
++
++ if (unlikely (bufferspace == 0)) {
++ /* this happens when the driver's buffer
++ * is smaller than what the host sent.
++ * discard the extra data.
++ */
++ if (req->req.status != -EOVERFLOW)
++ DMSG("%s overflow\n", ep->ep.name);
++ req->req.status = -EOVERFLOW;
++ } else {
++ *buf++ = word;
++ req->req.actual += 4;
++ bufferspace -= 4;
++ }
++ }
++
++ UDCCSR0 = UDCCSR0_OPC ;
++
++ /* completion */
++ if (req->req.actual >= req->req.length)
++ return 1;
++
++ /* finished that packet. the next one may be waiting... */
++ return 0;
++}
++
++#ifdef USE_DMA
++
++#define MAX_IN_DMA ((DCMD_LENGTH + 1) - BULK_FIFO_SIZE)
++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ u32 dcmd = 0;
++ u32 len = req->req.length;
++ u32 buf = req->req.dma;
++ u32 fifo = io_v2p ((u32)ep->reg_udcdr);
++
++ buf += req->req.actual;
++ len -= req->req.actual;
++ ep->dma_con = 0;
++
++ DMSG("%s: req:0x%p length:%d, actual:%d dma:%d\n",
++ __FUNCTION__, &req->req, req->req.length,
++ req->req.actual,ep->dma);
++
++ /* no-descriptor mode can be simple for bulk-in, iso-in, iso-out */
++ DCSR(ep->dma) = DCSR_NODESC;
++ if (buf & 0x3)
++ DALGN |= 1 << ep->dma;
++ else
++ DALGN &= ~(1 << ep->dma);
++
++ if (ep->dir_in) {
++ DSADR(ep->dma) = buf;
++ DTADR(ep->dma) = fifo;
++ if (len > MAX_IN_DMA) {
++ len= MAX_IN_DMA;
++ ep->dma_con =1 ;
++ } else if (len >= ep->ep.maxpacket) {
++ if ((ep->dma_con = (len % ep->ep.maxpacket) != 0))
++ len = ep->ep.maxpacket;
++ }
++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN
++ | DCMD_FLOWTRG | DCMD_INCSRCADDR;
++ } else {
++ DSADR(ep->dma) = fifo;
++ DTADR(ep->dma) = buf;
++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN
++ | DCMD_FLOWSRC | DCMD_INCTRGADDR;
++ }
++ *ep->reg_udccsr = UDCCSR_DME;
++ DCMD(ep->dma) = dcmd;
++ DCSR(ep->dma) = DCSR_NODESC | DCSR_EORIRQEN \
++ | ((ep->dir_in) ? DCSR_STOPIRQEN : 0);
++ *ep->reg_drcmr = ep->dma | DRCMR_MAPVLD;
++ DCSR(ep->dma) |= DCSR_RUN;
++}
++
++static void cancel_dma(struct pxa27x_ep *ep)
++{
++ struct pxa27x_request *req;
++ u32 tmp;
++
++ if (DCSR(ep->dma) == 0 || list_empty(&ep->queue))
++ return;
++
++ DMSG("hehe dma:%d,dcsr:0x%x\n", ep->dma, DCSR(ep->dma));
++ DCSR(ep->dma) = 0;
++ while ((DCSR(ep->dma) & DCSR_STOPSTATE) == 0)
++ cpu_relax();
++
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++ tmp = DCMD(ep->dma) & DCMD_LENGTH;
++ req->req.actual = req->req.length - tmp;
++
++ /* the last tx packet may be incomplete, so flush the fifo.
++ * FIXME correct req.actual if we can
++ */
++ *ep->reg_udccsr = UDCCSR_FEF;
++}
++
++static void dma_nodesc_handler(int dmach, void *_ep, struct pt_regs *r)
++{
++ struct pxa27x_ep *ep = _ep;
++ struct pxa27x_request *req, *req_next;
++ u32 dcsr, tmp, completed;
++
++ local_irq_disable();
++
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++
++ DMSG("%s, buf:0x%p\n",__FUNCTION__, req->req.buf);
++
++ ep->dma_irqs++;
++ ep->dev->stats.irqs++;
++ HEX_DISPLAY(ep->dev->stats.irqs);
++
++ completed = 0;
++
++ dcsr = DCSR(dmach);
++ DCSR(ep->dma) &= ~DCSR_RUN;
++
++ if (dcsr & DCSR_BUSERR) {
++ DCSR(dmach) = DCSR_BUSERR;
++ printk(KERN_ERR " Buss Error\n");
++ req->req.status = -EIO;
++ completed = 1;
++ } else if (dcsr & DCSR_ENDINTR) {
++ DCSR(dmach) = DCSR_ENDINTR;
++ if (ep->dir_in) {
++ tmp = req->req.length - req->req.actual;
++ /* Last packet is a short one*/
++ if ( tmp < ep->ep.maxpacket) {
++ int count = 0;
++
++ *ep->reg_udccsr = UDCCSR_SP | \
++ (*ep->reg_udccsr & UDCCSR_MASK);
++ /*Wait for packet out */
++ while( (count++ < 10000) && \
++ !(*ep->reg_udccsr & UDCCSR_FS));
++ if (count >= 10000)
++ DMSG("Failed to send packet\n");
++ else
++ DMSG("%s: short packet sent len:%d,"
++ "length:%d,actual:%d\n", __FUNCTION__,
++ tmp, req->req.length, req->req.actual);
++ req->req.actual = req->req.length;
++ completed = 1;
++ /* There are still packets to transfer */
++ } else if ( ep->dma_con) {
++ DMSG("%s: more packets,length:%d,actual:%d\n",
++ __FUNCTION__,req->req.length,
++ req->req.actual);
++ req->req.actual += ep->ep.maxpacket;
++ completed = 0;
++ } else {
++ DMSG("%s: no more packets,length:%d,"
++ "actual:%d\n", __FUNCTION__,
++ req->req.length, req->req.actual);
++ req->req.actual = req->req.length;
++ completed = 1;
++ }
++ } else {
++ req->req.actual = req->req.length;
++ completed = 1;
++ }
++ } else if (dcsr & DCSR_EORINTR) { //Only happened in OUT DMA
++ int remain,udccsr ;
++
++ DCSR(dmach) = DCSR_EORINTR;
++ remain = DCMD(dmach) & DCMD_LENGTH;
++ req->req.actual = req->req.length - remain;
++
++ udccsr = *ep->reg_udccsr;
++ if (udccsr & UDCCSR_SP) {
++ *ep->reg_udccsr = UDCCSR_PC | (udccsr & UDCCSR_MASK);
++ completed = 1;
++ }
++ DMSG("%s: length:%d actual:%d\n",
++ __FUNCTION__, req->req.length, req->req.actual);
++ } else
++ DMSG("%s: Others dma:%d DCSR:0x%x DCMD:0x%x\n",
++ __FUNCTION__, dmach, DCSR(dmach), DCMD(dmach));
++
++ if (likely(completed)) {
++ if (req->queue.next != &ep->queue) {
++ req_next = list_entry(req->queue.next,
++ struct pxa27x_request, queue);
++ kick_dma(ep, req_next);
++ }
++ done(ep, req, 0);
++ } else {
++ kick_dma(ep, req);
++ }
++
++ local_irq_enable();
++}
++
++#endif
++/*-------------------------------------------------------------------------*/
++
++static int
++pxa27x_ep_queue(struct usb_ep *_ep, struct usb_request *_req, unsigned int gfp_flags)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_request *req;
++ struct pxa27x_udc *dev;
++ unsigned long flags;
++
++ req = container_of(_req, struct pxa27x_request, req);
++ if (unlikely (!_req || !_req->complete || !_req->buf||
++ !list_empty(&req->queue))) {
++ DMSG("%s, bad params\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ DMSG("%s, ep point %d is queue\n", __FUNCTION__, ep->ep_num);
++
++ dev = ep->dev;
++ if (unlikely (!dev->driver
++ || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
++ DMSG("%s, bogus device state\n", __FUNCTION__);
++ return -ESHUTDOWN;
++ }
++
++ /* iso is always one packet per request, that's the only way
++ * we can report per-packet status. that also helps with dma.
++ */
++ if (unlikely (ep->ep_type == USB_ENDPOINT_XFER_ISOC
++ && req->req.length > le16_to_cpu
++ (ep->desc->wMaxPacketSize)))
++ return -EMSGSIZE;
++
++#ifdef USE_DMA
++ /* FIXME: caller may already have done the dma mapping */
++ if (ep->dma >= 0) {
++ _req->dma = dma_map_single(dev->dev, _req->buf, _req->length,
++ (ep->dir_in) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
++ }
++#endif
++
++ DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n",
++ _ep->name, _req, _req->length, _req->buf);
++
++ local_irq_save(flags);
++
++ _req->status = -EINPROGRESS;
++ _req->actual = 0;
++
++ /* kickstart this i/o queue? */
++ if (list_empty(&ep->queue) && !ep->stopped) {
++ if (ep->desc == 0 /* ep0 */) {
++ unsigned length = _req->length;
++
++ switch (dev->ep0state) {
++ case EP0_IN_DATA_PHASE:
++ dev->stats.write.ops++;
++ if (write_ep0_fifo(ep, req))
++ req = 0;
++ break;
++
++ case EP0_OUT_DATA_PHASE:
++ dev->stats.read.ops++;
++ if (dev->req_pending)
++ ep0start(dev, UDCCSR0_IPR, "OUT");
++ if (length == 0 || ((UDCCSR0 & UDCCSR0_RNE) != 0
++ && read_ep0_fifo(ep, req))) {
++ ep0_idle(dev);
++ done(ep, req, 0);
++ req = 0;
++ }
++ break;
++ case EP0_NO_ACTION:
++ ep0_idle(dev);
++ req=0;
++ break;
++ default:
++ DMSG("ep0 i/o, odd state %d\n", dev->ep0state);
++ local_irq_restore (flags);
++ return -EL2HLT;
++ }
++#ifdef USE_DMA
++ /* either start dma or prime pio pump */
++ } else if (ep->dma >= 0) {
++ kick_dma(ep, req);
++#endif
++ /* can the FIFO can satisfy the request immediately? */
++ } else if (ep->dir_in
++ && (*ep->reg_udccsr & UDCCSR_FS) != 0
++ && write_fifo(ep, req)) {
++ req = 0;
++ } else if ((*ep->reg_udccsr & UDCCSR_FS) != 0
++ && read_fifo(ep, req)) {
++ req = 0;
++ }
++ DMSG("req:%p,ep->desc:%p,ep->dma:%d\n", req, ep->desc, ep->dma);
++ if (likely (req && ep->desc) && ep->dma < 0)
++ pio_irq_enable(ep->ep_num);
++ }
++
++ /* pio or dma irq handler advances the queue. */
++ if (likely (req != 0))
++ list_add_tail(&req->queue, &ep->queue);
++ local_irq_restore(flags);
++
++ return 0;
++}
++
++
++/*
++ * nuke - dequeue ALL requests
++ */
++static void nuke(struct pxa27x_ep *ep, int status)
++{
++ struct pxa27x_request *req;
++
++ /* called with irqs blocked */
++#ifdef USE_DMA
++ if (ep->dma >= 0 && !ep->stopped)
++ cancel_dma(ep);
++#endif
++ while (!list_empty(&ep->queue)) {
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++ done(ep, req, status);
++ }
++ if (ep->desc)
++ pio_irq_disable (ep->ep_num);
++}
++
++
++/* dequeue JUST ONE request */
++static int pxa27x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_request *req;
++ unsigned long flags;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || ep->ep.name == ep0name)
++ return -EINVAL;
++
++ local_irq_save(flags);
++
++ /* make sure it's actually queued on this endpoint */
++ list_for_each_entry (req, &ep->queue, queue) {
++ if (&req->req == _req)
++ break;
++ }
++ if (&req->req != _req) {
++ local_irq_restore(flags);
++ return -EINVAL;
++ }
++
++#ifdef USE_DMA
++ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) {
++ cancel_dma(ep);
++ done(ep, req, -ECONNRESET);
++ /* restart i/o */
++ if (!list_empty(&ep->queue)) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request, queue);
++ kick_dma(ep, req);
++ }
++ } else
++#endif
++ done(ep, req, -ECONNRESET);
++
++ local_irq_restore(flags);
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++static int pxa27x_ep_set_halt(struct usb_ep *_ep, int value)
++{
++ struct pxa27x_ep *ep;
++ unsigned long flags;
++
++ DMSG("%s is called\n", __FUNCTION__);
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (unlikely (!_ep
++ || (!ep->desc && ep->ep.name != ep0name))
++ || ep->ep_type == USB_ENDPOINT_XFER_ISOC) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -EINVAL;
++ }
++ if (value == 0) {
++ /* this path (reset toggle+halt) is needed to implement
++ * SET_INTERFACE on normal hardware. but it can't be
++ * done from software on the PXA UDC, and the hardware
++ * forgets to do it as part of SET_INTERFACE automagic.
++ */
++ DMSG("only host can clear %s halt\n", _ep->name);
++ return -EROFS;
++ }
++
++ local_irq_save(flags);
++
++ if (ep->dir_in && ((*ep->reg_udccsr & UDCCSR_FS) == 0
++ || !list_empty(&ep->queue))) {
++ local_irq_restore(flags);
++ return -EAGAIN;
++ }
++
++ /* FST bit is the same for control, bulk in, bulk out, interrupt in */
++ *ep->reg_udccsr = UDCCSR_FST|UDCCSR_FEF;
++
++ /* ep0 needs special care */
++ if (!ep->desc) {
++ start_watchdog(ep->dev);
++ ep->dev->req_pending = 0;
++ ep->dev->ep0state = EP0_STALL;
++ LED_EP0_OFF;
++
++ /* and bulk/intr endpoints like dropping stalls too */
++ } else {
++ unsigned i;
++ for (i = 0; i < 1000; i += 20) {
++ if (*ep->reg_udccsr & UDCCSR_SST)
++ break;
++ udelay(20);
++ }
++ }
++ local_irq_restore(flags);
++
++ DBG(DBG_VERBOSE, "%s halt\n", _ep->name);
++ return 0;
++}
++
++static int pxa27x_ep_fifo_status(struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -ENODEV;
++ }
++ /* pxa can't report unclaimed bytes from IN fifos */
++ if (ep->dir_in)
++ return -EOPNOTSUPP;
++ if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN
++ || (*ep->reg_udccsr & UDCCSR_FS) == 0)
++ return 0;
++ else
++ return (*ep->reg_udcbcr & 0xfff) + 1;
++}
++
++static void pxa27x_ep_fifo_flush(struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return;
++ }
++
++ /* toggle and halt bits stay unchanged */
++
++ /* for OUT, just read and discard the FIFO contents. */
++ if (!ep->dir_in) {
++ while (((*ep->reg_udccsr) & UDCCSR_BNE) != 0)
++ (void) *ep->reg_udcdr;
++ return;
++ }
++
++ /* most IN status is the same, but ISO can't stall */
++ *ep->reg_udccsr = UDCCSR_PC|UDCCSR_FST|UDCCSR_TRN
++ | (ep->ep_type == USB_ENDPOINT_XFER_ISOC)
++ ? 0 : UDCCSR_SST;
++}
++
++
++static struct usb_ep_ops pxa27x_ep_ops = {
++ .enable = pxa27x_ep_enable,
++ .disable = pxa27x_ep_disable,
++
++ .alloc_request = pxa27x_ep_alloc_request,
++ .free_request = pxa27x_ep_free_request,
++
++ .alloc_buffer = pxa27x_ep_alloc_buffer,
++ .free_buffer = pxa27x_ep_free_buffer,
++
++ .queue = pxa27x_ep_queue,
++ .dequeue = pxa27x_ep_dequeue,
++
++ .set_halt = pxa27x_ep_set_halt,
++ .fifo_status = pxa27x_ep_fifo_status,
++ .fifo_flush = pxa27x_ep_fifo_flush,
++};
++
++
++/* ---------------------------------------------------------------------------
++ * device-scoped parts of the api to the usb controller hardware
++ * ---------------------------------------------------------------------------
++ */
++
++static inline void validate_fifo_size(struct pxa27x_ep *pxa_ep, u8 bmAttributes)
++{
++ switch (bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ pxa_ep->fifo_size = EP0_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_ISOC:
++ pxa_ep->fifo_size = ISO_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_BULK:
++ pxa_ep->fifo_size = BULK_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_INT:
++ pxa_ep->fifo_size = INT_FIFO_SIZE;
++ break;
++ default:
++ break;
++ }
++}
++
++#define NAME_SIZE 18
++struct usb_ep* pxa27x_ep_alloc(struct usb_gadget *gadget, struct usb_endpoint_descriptor *desc, int config, int interface, int alt)
++{
++ u32 tmp ;
++ unsigned i;
++ char* name;
++ struct usb_ep * ep = NULL;
++ struct pxa27x_ep *pxa_ep = NULL;
++ struct pxa27x_udc *dev = the_controller;
++
++ DMSG("pxa27x_config_ep is called\n");
++ DMSG(" usb endpoint descriptor is:\n"
++ " bLength:%d\n"
++ " bDescriptorType:%x\n"
++ " bEndpointAddress:%x\n"
++ " bmAttributes:%x\n"
++ " wMaxPacketSize:%d\n",
++ desc->bLength,
++ desc->bDescriptorType,desc->bEndpointAddress,
++ desc->bmAttributes,desc->wMaxPacketSize);
++
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if(!dev->ep[i].assigned) {
++ pxa_ep = &dev->ep[i];
++ pxa_ep->assigned = 1;
++ pxa_ep->ep_num = i;
++ break;
++ }
++ }
++ if (unlikely(i == UDC_EP_NUM)) {
++ printk(KERN_ERR __FILE__ ": Failed to find a spare endpoint\n");
++ return ep;
++ }
++
++
++ ep = &pxa_ep->ep;
++
++ pxa_ep->dev = dev;
++ pxa_ep->desc = desc;
++ pxa_ep->pio_irqs = pxa_ep->dma_irqs = 0;
++ pxa_ep->dma = -1;
++
++ if (!(desc->bEndpointAddress & 0xF))
++ desc->bEndpointAddress |= i;
++
++ if (!(desc->wMaxPacketSize)) {
++ validate_fifo_size(pxa_ep, desc->bmAttributes);
++ desc->wMaxPacketSize = pxa_ep->fifo_size;
++ } else
++ pxa_ep->fifo_size = desc->wMaxPacketSize;
++
++ pxa_ep->dir_in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0;
++ pxa_ep->ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++ pxa_ep->stopped = 1;
++ pxa_ep->dma_con = 0;
++ pxa_ep->config = config;
++ pxa_ep->interface = interface;
++ pxa_ep->aisn = alt;
++
++ pxa_ep->reg_udccsr = &UDCCSR0 + i;
++ pxa_ep->reg_udcbcr = &UDCBCR0 + i;
++ pxa_ep->reg_udcdr = &UDCDR0 + i ;
++ pxa_ep->reg_udccr = &UDCCRA - 1 + i;
++#ifdef USE_DMA
++ pxa_ep->reg_drcmr = &DRCMR24 + i;
++#endif
++
++ DMSG("udccsr=0x%8x, udcbcr=0x%8x, udcdr=0x%8x,"
++ "udccr0=0x%8x\n",
++ (unsigned)pxa_ep->reg_udccsr,
++ (unsigned)pxa_ep->reg_udcbcr,
++ (unsigned)pxa_ep->reg_udcdr,
++ (unsigned)pxa_ep->reg_udccr);
++
++ /* Configure UDCCR */
++ tmp = 0;
++ tmp |= (pxa_ep->config << UDCCONR_CN_S) & UDCCONR_CN;
++#if 0
++ tmp |= (pxa_ep->interface << UDCCONR_IN_S) & UDCCONR_IN;
++ tmp |= (pxa_ep->aisn << UDCCONR_AISN_S) & UDCCONR_AISN;
++#else
++ tmp |= (0 << UDCCONR_IN_S) & UDCCONR_IN;
++ tmp |= (0 << UDCCONR_AISN_S) & UDCCONR_AISN;
++#endif
++ tmp |= (desc->bEndpointAddress << UDCCONR_EN_S) & UDCCONR_EN;
++ tmp |= (pxa_ep->ep_type << UDCCONR_ET_S) & UDCCONR_ET;
++ tmp |= (pxa_ep->dir_in) ? UDCCONR_ED : 0;
++ tmp |= (min(pxa_ep->fifo_size, (unsigned)desc->wMaxPacketSize) \
++ << UDCCONR_MPS_S ) & UDCCONR_MPS;
++ tmp |= UDCCONR_DE | UDCCONR_EE;
++// tmp |= UDCCONR_EE;
++
++ *pxa_ep->reg_udccr = tmp;
++
++#ifdef USE_DMA
++ /* Only BULK use DMA */
++ if ((pxa_ep->ep_type & USB_ENDPOINT_XFERTYPE_MASK)\
++ == USB_ENDPOINT_XFER_BULK)
++ *pxa_ep->reg_udccsr = UDCCSR_DME;
++#endif
++
++ DMSG("UDCCR: 0x%p is 0x%x\n", pxa_ep->reg_udccr,*pxa_ep->reg_udccr);
++
++ /* Fill ep name*/
++ name = kmalloc(NAME_SIZE, GFP_KERNEL);
++ if (!name) {
++ printk(KERN_ERR "%s: Error\n", __FUNCTION__);
++ return NULL;
++ }
++
++ switch (pxa_ep->ep_type) {
++ case USB_ENDPOINT_XFER_BULK:
++ sprintf(name, "Bulk-%s-%d", (pxa_ep->dir_in ? "in":"out"), i);
++ break;
++ case USB_ENDPOINT_XFER_INT:
++ sprintf(name, "Interrupt-%s-%d", (pxa_ep->dir_in ? \
++ "in":"out"), i);
++ break;
++ default:
++ sprintf(name, "endpoint-%s-%d", (pxa_ep->dir_in ? \
++ "in":"out"), i);
++ break;
++ }
++ ep->name = name;
++
++ ep->ops = &pxa27x_ep_ops;
++ ep->maxpacket = min((ushort)pxa_ep->fifo_size, desc->wMaxPacketSize);
++
++ list_add_tail (&ep->ep_list, &gadget->ep_list);
++ return ep;
++}
++
++static int pxa27x_udc_get_frame(struct usb_gadget *_gadget)
++{
++ return (UDCFNR & 0x3FF);
++}
++
++static int pxa27x_udc_wakeup(struct usb_gadget *_gadget)
++{
++ /* host may not have enabled remote wakeup */
++ if ((UDCCR & UDCCR_DWRE) == 0)
++ return -EHOSTUNREACH;
++ udc_set_mask_UDCCR(UDCCR_UDR);
++ return 0;
++}
++
++static const struct usb_gadget_ops pxa27x_udc_ops = {
++ .ep_alloc = pxa27x_ep_alloc,
++ .get_frame = pxa27x_udc_get_frame,
++ .wakeup = pxa27x_udc_wakeup,
++ // current versions must always be self-powered
++};
++
++
++/*-------------------------------------------------------------------------*/
++
++#ifdef UDC_PROC_FILE
++
++static const char proc_node_name [] = "driver/udc";
++
++static int
++udc_proc_read(char *page, char **start, off_t off, int count,
++ int *eof, void *_dev)
++{
++ char *buf = page;
++ struct pxa27x_udc *dev = _dev;
++ char *next = buf;
++ unsigned size = count;
++ unsigned long flags;
++ int i, t;
++ u32 tmp;
++
++ if (off != 0)
++ return 0;
++
++ local_irq_save(flags);
++
++ /* basic device status */
++ t = scnprintf(next, size, DRIVER_DESC "\n"
++ "%s version: %s\nGadget driver: %s\n",
++ driver_name, DRIVER_VERSION SIZE_STR DMASTR,
++ dev->driver ? dev->driver->driver.name : "(none)");
++ size -= t;
++ next += t;
++
++ /* registers for device and ep0 */
++ t = scnprintf(next, size,
++ "uicr %02X.%02X, usir %02X.%02x, ufnr %02X\n",
++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR);
++ size -= t;
++ next += t;
++
++ tmp = UDCCR;
++ t = scnprintf(next, size,"udccr %02X =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n", tmp,
++ (tmp & UDCCR_OEN) ? " oen":"",
++ (tmp & UDCCR_AALTHNP) ? " aalthnp":"",
++ (tmp & UDCCR_AHNP) ? " rem" : "",
++ (tmp & UDCCR_BHNP) ? " rstir" : "",
++ (tmp & UDCCR_DWRE) ? " dwre" : "",
++ (tmp & UDCCR_SMAC) ? " smac" : "",
++ (tmp & UDCCR_EMCE) ? " emce" : "",
++ (tmp & UDCCR_UDR) ? " udr" : "",
++ (tmp & UDCCR_UDA) ? " uda" : "",
++ (tmp & UDCCR_UDE) ? " ude" : "",
++ (tmp & UDCCR_ACN) >> UDCCR_ACN_S,
++ (tmp & UDCCR_AIN) >> UDCCR_AIN_S,
++ (tmp & UDCCR_AAISN)>> UDCCR_AAISN_S );
++
++ size -= t;
++ next += t;
++
++ tmp = UDCCSR0;
++ t = scnprintf(next, size,
++ "udccsr0 %02X =%s%s%s%s%s%s%s\n", tmp,
++ (tmp & UDCCSR0_SA) ? " sa" : "",
++ (tmp & UDCCSR0_RNE) ? " rne" : "",
++ (tmp & UDCCSR0_FST) ? " fst" : "",
++ (tmp & UDCCSR0_SST) ? " sst" : "",
++ (tmp & UDCCSR0_DME) ? " dme" : "",
++ (tmp & UDCCSR0_IPR) ? " ipr" : "",
++ (tmp & UDCCSR0_OPC) ? " opc" : "");
++ size -= t;
++ next += t;
++
++ if (!dev->driver)
++ goto done;
++
++ t = scnprintf(next, size, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n",
++ dev->stats.write.bytes, dev->stats.write.ops,
++ dev->stats.read.bytes, dev->stats.read.ops,
++ dev->stats.irqs);
++ size -= t;
++ next += t;
++
++ /* dump endpoint queues */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep [i];
++ struct pxa27x_request *req;
++ int t;
++
++ if (i != 0) {
++ const struct usb_endpoint_descriptor *d;
++
++ d = ep->desc;
++ if (!d)
++ continue;
++ tmp = *dev->ep [i].reg_udccsr;
++ t = scnprintf(next, size,
++ "%s max %d %s udccs %02x udccr:0x%x\n",
++ ep->ep.name, le16_to_cpu (d->wMaxPacketSize),
++ (ep->dma >= 0) ? "dma" : "pio", tmp,
++ *dev->ep[i].reg_udccr);
++ /* TODO translate all five groups of udccs bits! */
++
++ } else /* ep0 should only have one transfer queued */
++ t = scnprintf(next, size, "ep0 max 16 pio irqs %lu\n",
++ ep->pio_irqs);
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++
++ if (list_empty(&ep->queue)) {
++ t = scnprintf(next, size, "\t(nothing queued)\n");
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++ continue;
++ }
++ list_for_each_entry(req, &ep->queue, queue) {
++#ifdef USE_DMA
++ if (ep->dma >= 0 && req->queue.prev == &ep->queue)
++ t = scnprintf(next, size,
++ "\treq %p len %d/%d "
++ "buf %p (dma%d dcmd %08x)\n",
++ &req->req, req->req.actual,
++ req->req.length, req->req.buf,
++ ep->dma, DCMD(ep->dma)
++ // low 13 bits == bytes-to-go
++ );
++ else
++#endif
++ t = scnprintf(next, size,
++ "\treq %p len %d/%d buf %p\n",
++ &req->req, req->req.actual,
++ req->req.length, req->req.buf);
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++ }
++ }
++
++done:
++ local_irq_restore(flags);
++ *eof = 1;
++ return count - size;
++}
++
++#define create_proc_files() \
++ create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev)
++#define remove_proc_files() \
++ remove_proc_entry(proc_node_name, NULL)
++
++#else /* !UDC_PROC_FILE */
++#define create_proc_files() do {} while (0)
++#define remove_proc_files() do {} while (0)
++
++#endif /* UDC_PROC_FILE */
++
++/* "function" sysfs attribute */
++static ssize_t
++show_function (struct device *_dev, struct device_attribute *attr, char *buf)
++{
++ struct pxa27x_udc *dev = dev_get_drvdata (_dev);
++
++ if (!dev->driver
++ || !dev->driver->function
++ || strlen (dev->driver->function) > PAGE_SIZE)
++ return 0;
++ return scnprintf (buf, PAGE_SIZE, "%s\n", dev->driver->function);
++}
++static DEVICE_ATTR (function, S_IRUGO, show_function, NULL);
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * udc_disable - disable USB device controller
++ */
++static void udc_disable(struct pxa27x_udc *dev)
++{
++ UDCICR0 = UDCICR1 = 0x00000000;
++
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++
++ /* Disable clock for USB device */
++ pxa_set_cken(CKEN11_USB, 0);
++
++ ep0_idle (dev);
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++
++ if (dev->mach->gpio_pullup)
++ GPCR(dev->mach->gpio_pullup) = GPIO_bit(dev->mach->gpio_pullup);
++ if (dev->mach->udc_command)
++ dev->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
++
++ make_usb_disappear();
++}
++
++
++/*
++ * udc_reinit - initialize software state
++ */
++static void udc_reinit(struct pxa27x_udc *dev)
++{
++ u32 i;
++
++ dev->ep0state = EP0_IDLE;
++
++ /* basic endpoint records init */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->stopped = 0;
++ ep->pio_irqs = ep->dma_irqs = 0;
++ }
++ dev->configuration = 0;
++ dev->interface = 0;
++ dev->alternate = 0;
++ /* the rest was statically initialized, and is read-only */
++}
++
++/* until it's enabled, this UDC should be completely invisible
++ * to any USB host.
++ */
++static void udc_enable (struct pxa27x_udc *dev)
++{
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++
++ /* Enable clock for USB device */
++ pxa_set_cken(CKEN11_USB, 1);
++
++ UDCICR0 = UDCICR1 = 0;
++
++ ep0_idle(dev);
++ dev->gadget.speed = USB_SPEED_FULL;
++ dev->stats.irqs = 0;
++
++ udc_set_mask_UDCCR(UDCCR_UDE);
++ udelay (2);
++ if (UDCCR & UDCCR_EMCE)
++ {
++ printk(KERN_ERR ": There are error in configuration, udc disabled\n");
++ }
++
++ /* caller must be able to sleep in order to cope
++ * with startup transients.
++ */
++ msleep(100);
++
++ /* enable suspend/resume and reset irqs */
++ UDCICR1 = UDCICR1_IECC | UDCICR1_IERU | UDCICR1_IESU | UDCICR1_IERS;
++
++ /* enable ep0 irqs */
++ UDCICR0 = UDCICR_INT(0,UDCICR_INT_MASK);
++#if 0
++ for(i=1; i < UDC_EP_NUM; i++) {
++ if (dev->ep[i].assigned)
++ pio_irq_enable(i);
++ }
++#endif
++
++ if (dev->mach->gpio_pullup)
++ GPSR(dev->mach->gpio_pullup) = GPIO_bit(dev->mach->gpio_pullup);
++ if (dev->mach->udc_command)
++ dev->mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
++
++ /* FIXME */
++ let_usb_appear();
++}
++
++
++/* when a driver is successfully registered, it will receive
++ * control requests including set_configuration(), which enables
++ * non-control requests. then usb traffic follows until a
++ * disconnect is reported. then a host may connect again, or
++ * the driver might get unbound.
++ */
++int usb_gadget_register_driver(struct usb_gadget_driver *driver)
++{
++ struct pxa27x_udc *dev = the_controller;
++ int retval;
++
++ DMSG("dev=0x%x, driver=0x%x, speed=%d, "
++ "bind=0x%x, unbind=0x%x, disconnect=0x%x, setup=0x%x\n",
++ (unsigned)dev, (unsigned)driver, driver->speed,
++ (unsigned)driver->bind, (unsigned)driver->unbind,
++ (unsigned)driver->disconnect, (unsigned)driver->setup);
++
++ if (!driver || driver->speed != USB_SPEED_FULL
++ || !driver->bind
++ || !driver->unbind
++ || !driver->disconnect
++ || !driver->setup)
++ return -EINVAL;
++ if (!dev)
++ return -ENODEV;
++ if (dev->driver)
++ return -EBUSY;
++
++ /* first hook up the driver ... */
++ dev->driver = driver;
++ dev->gadget.dev.driver = &driver->driver;
++
++ device_add(&dev->gadget.dev);
++ retval = driver->bind(&dev->gadget);
++ if (retval) {
++ DMSG("bind to driver %s --> error %d\n",
++ driver->driver.name, retval);
++ device_del (&dev->gadget.dev);
++
++ dev->driver = 0;
++ dev->gadget.dev.driver = 0;
++ return retval;
++ }
++ device_create_file(dev->dev, &dev_attr_function);
++
++ /* ... then enable host detection and ep0; and we're ready
++ * for set_configuration as well as eventual disconnect.
++ * NOTE: this shouldn't power up until later.
++ */
++ DMSG("registered gadget driver '%s'\n", driver->driver.name);
++ udc_enable(dev);
++ dump_state(dev);
++ return 0;
++}
++EXPORT_SYMBOL(usb_gadget_register_driver);
++
++static void
++stop_activity(struct pxa27x_udc *dev, struct usb_gadget_driver *driver)
++{
++ int i;
++
++ DMSG("Trace path 1\n");
++ /* don't disconnect drivers more than once */
++ if (dev->gadget.speed == USB_SPEED_UNKNOWN)
++ driver = 0;
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++
++ /* prevent new request submissions, kill any outstanding requests */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->stopped = 1;
++ nuke(ep, -ESHUTDOWN);
++ }
++ del_timer_sync(&dev->timer);
++
++ /* report disconnect; the driver is already quiesced */
++ if (driver)
++ driver->disconnect(&dev->gadget);
++
++ /* re-init driver-visible data structures */
++ udc_reinit(dev);
++}
++
++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
++{
++ struct pxa27x_udc *dev = the_controller;
++
++ if (!dev)
++ return -ENODEV;
++ if (!driver || driver != dev->driver)
++ return -EINVAL;
++
++ local_irq_disable();
++ udc_disable(dev);
++ stop_activity(dev, driver);
++ local_irq_enable();
++
++ driver->unbind(&dev->gadget);
++ dev->driver = 0;
++
++ device_del (&dev->gadget.dev);
++ device_remove_file(dev->dev, &dev_attr_function);
++
++ DMSG("unregistered gadget driver '%s'\n", driver->driver.name);
++ dump_state(dev);
++ return 0;
++}
++EXPORT_SYMBOL(usb_gadget_unregister_driver);
++
++#ifndef enable_disconnect_irq
++#define enable_disconnect_irq() do {} while (0)
++#define disable_disconnect_irq() do {} while (0)
++#endif
++
++
++/*-------------------------------------------------------------------------*/
++
++static inline void clear_ep_state (struct pxa27x_udc *dev)
++{
++ unsigned i;
++
++ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint
++ * fifos, and pending transactions mustn't be continued in any case.
++ */
++ for (i = 1; i < UDC_EP_NUM; i++)
++ nuke(&dev->ep[i], -ECONNABORTED);
++}
++
++static void udc_watchdog(unsigned long _dev)
++{
++ struct pxa27x_udc *dev = (void *)_dev;
++
++ local_irq_disable();
++ if (dev->ep0state == EP0_STALL
++ && (UDCCSR0 & UDCCSR0_FST) == 0
++ && (UDCCSR0 & UDCCSR0_SST) == 0) {
++ UDCCSR0 = UDCCSR0_FST|UDCCSR0_FTF;
++ DBG(DBG_VERBOSE, "ep0 re-stall\n");
++ start_watchdog(dev);
++ }
++ local_irq_enable();
++}
++
++static void handle_ep0 (struct pxa27x_udc *dev)
++{
++ u32 udccsr0 = UDCCSR0;
++ struct pxa27x_ep *ep = &dev->ep [0];
++ struct pxa27x_request *req;
++ union {
++ struct usb_ctrlrequest r;
++ u8 raw [8];
++ u32 word [2];
++ } u;
++
++ if (list_empty(&ep->queue))
++ req = 0;
++ else
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++
++ /* clear stall status */
++ if (udccsr0 & UDCCSR0_SST) {
++ nuke(ep, -EPIPE);
++ UDCCSR0 = UDCCSR0_SST;
++ del_timer(&dev->timer);
++ ep0_idle(dev);
++ }
++
++ /* previous request unfinished? non-error iff back-to-back ... */
++ if ((udccsr0 & UDCCSR0_SA) != 0 && dev->ep0state != EP0_IDLE) {
++ nuke(ep, 0);
++ del_timer(&dev->timer);
++ ep0_idle(dev);
++ }
++
++ switch (dev->ep0state) {
++ case EP0_NO_ACTION:
++ printk(KERN_INFO"%s: Busy\n", __FUNCTION__);
++ /*Fall through */
++ case EP0_IDLE:
++ /* late-breaking status? */
++ udccsr0 = UDCCSR0;
++
++ /* start control request? */
++ if (likely((udccsr0 & (UDCCSR0_OPC|UDCCSR0_SA|UDCCSR0_RNE))
++ == (UDCCSR0_OPC|UDCCSR0_SA|UDCCSR0_RNE))) {
++ int i;
++
++ nuke (ep, -EPROTO);
++ /* read SETUP packet */
++ for (i = 0; i < 2; i++) {
++ if (unlikely(!(UDCCSR0 & UDCCSR0_RNE))) {
++bad_setup:
++ DMSG("SETUP %d!\n", i);
++ goto stall;
++ }
++ u.word [i] = UDCDR0;
++ }
++ if (unlikely((UDCCSR0 & UDCCSR0_RNE) != 0))
++ goto bad_setup;
++
++ le16_to_cpus (&u.r.wValue);
++ le16_to_cpus (&u.r.wIndex);
++ le16_to_cpus (&u.r.wLength);
++
++ LED_EP0_ON;
++
++ DBG(DBG_VERBOSE, "SETUP %02x.%02x v%04x i%04x l%04x\n",
++ u.r.bRequestType, u.r.bRequest,
++ u.r.wValue, u.r.wIndex, u.r.wLength);
++ /* cope with automagic for some standard requests. */
++ dev->req_std = (u.r.bRequestType & USB_TYPE_MASK)
++ == USB_TYPE_STANDARD;
++ dev->req_config = 0;
++ dev->req_pending = 1;
++#if 0
++ switch (u.r.bRequest) {
++ /* hardware was supposed to hide this */
++ case USB_REQ_SET_CONFIGURATION:
++ case USB_REQ_SET_INTERFACE:
++ case USB_REQ_SET_ADDRESS:
++ printk(KERN_ERR "Should not come here\n");
++ break;
++ }
++
++#endif
++ if (u.r.bRequestType & USB_DIR_IN)
++ dev->ep0state = EP0_IN_DATA_PHASE;
++ else
++ dev->ep0state = EP0_OUT_DATA_PHASE;
++ i = dev->driver->setup(&dev->gadget, &u.r);
++
++ if (i < 0) {
++ /* hardware automagic preventing STALL... */
++ if (dev->req_config) {
++ /* hardware sometimes neglects to tell
++ * tell us about config change events,
++ * so later ones may fail...
++ */
++ WARN("config change %02x fail %d?\n",
++ u.r.bRequest, i);
++ return;
++ /* TODO experiment: if has_cfr,
++ * hardware didn't ACK; maybe we
++ * could actually STALL!
++ */
++ }
++ DBG(DBG_VERBOSE, "protocol STALL, "
++ "%02x err %d\n", UDCCSR0, i);
++stall:
++ /* the watchdog timer helps deal with cases
++ * where udc seems to clear FST wrongly, and
++ * then NAKs instead of STALLing.
++ */
++ ep0start(dev, UDCCSR0_FST|UDCCSR0_FTF, "stall");
++ start_watchdog(dev);
++ dev->ep0state = EP0_STALL;
++ LED_EP0_OFF;
++
++ /* deferred i/o == no response yet */
++ } else if (dev->req_pending) {
++ if (likely(dev->ep0state == EP0_IN_DATA_PHASE
++ || dev->req_std || u.r.wLength))
++ ep0start(dev, 0, "defer");
++ else
++ ep0start(dev, UDCCSR0_IPR, "defer/IPR");
++ }
++
++ /* expect at least one data or status stage irq */
++ return;
++
++ } else {
++ /* some random early IRQ:
++ * - we acked FST
++ * - IPR cleared
++ * - OPC got set, without SA (likely status stage)
++ */
++ UDCCSR0 = udccsr0 & (UDCCSR0_SA|UDCCSR0_OPC);
++ }
++ break;
++ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */
++ if (udccsr0 & UDCCSR0_OPC) {
++ UDCCSR0 = UDCCSR0_OPC|UDCCSR0_FTF;
++ DBG(DBG_VERBOSE, "ep0in premature status\n");
++ if (req)
++ done(ep, req, 0);
++ ep0_idle(dev);
++ } else /* irq was IPR clearing */ {
++ if (req) {
++ /* this IN packet might finish the request */
++ (void) write_ep0_fifo(ep, req);
++ } /* else IN token before response was written */
++ }
++ break;
++ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */
++ if (udccsr0 & UDCCSR0_OPC) {
++ if (req) {
++ /* this OUT packet might finish the request */
++ if (read_ep0_fifo(ep, req))
++ done(ep, req, 0);
++ /* else more OUT packets expected */
++ } /* else OUT token before read was issued */
++ } else /* irq was IPR clearing */ {
++ DBG(DBG_VERBOSE, "ep0out premature status\n");
++ if (req)
++ done(ep, req, 0);
++ ep0_idle(dev);
++ }
++ break;
++ case EP0_STALL:
++ UDCCSR0 = UDCCSR0_FST;
++ break;
++ }
++ UDCISR0 = UDCISR_INT(0, UDCISR_INT_MASK);
++}
++
++
++static void handle_ep(struct pxa27x_ep *ep)
++{
++ struct pxa27x_request *req;
++ int completed;
++ u32 udccsr=0;
++
++ DMSG("%s is called\n", __FUNCTION__);
++ do {
++ completed = 0;
++ if (likely (!list_empty(&ep->queue))) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request, queue);
++ } else
++ req = 0;
++
++// udccsr = *ep->reg_udccsr;
++ DMSG("%s: req:%p, udcisr0:0x%x udccsr %p:0x%x\n", __FUNCTION__,
++ req, UDCISR0, ep->reg_udccsr, *ep->reg_udccsr);
++ if (unlikely(ep->dir_in)) {
++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr;
++ if (unlikely (udccsr))
++ *ep->reg_udccsr = udccsr;
++
++ if (req && likely ((*ep->reg_udccsr & UDCCSR_FS) != 0))
++ completed = write_fifo(ep, req);
++
++ } else {
++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr;
++ if (unlikely(udccsr))
++ *ep->reg_udccsr = udccsr;
++
++ /* fifos can hold packets, ready for reading... */
++ if (likely(req)) {
++ completed = read_fifo(ep, req);
++ } else {
++ pio_irq_disable (ep->ep_num);
++ *ep->reg_udccsr = UDCCSR_FEF;
++ DMSG("%s: no req for out data\n",
++ __FUNCTION__);
++ }
++ }
++ ep->pio_irqs++;
++ } while (completed);
++}
++
++static void pxa27x_change_configuration (struct pxa27x_udc *dev)
++{
++ struct usb_ctrlrequest req ;
++
++ req.bRequestType = 0;
++ req.bRequest = USB_REQ_SET_CONFIGURATION;
++ req.wValue = dev->configuration;
++ req.wIndex = 0;
++ req.wLength = 0;
++
++ dev->ep0state = EP0_NO_ACTION;
++ dev->driver->setup(&dev->gadget, &req);
++
++}
++
++static void pxa27x_change_interface (struct pxa27x_udc *dev)
++{
++ struct usb_ctrlrequest req;
++
++ req.bRequestType = USB_RECIP_INTERFACE;
++ req.bRequest = USB_REQ_SET_INTERFACE;
++ req.wValue = dev->alternate;
++ req.wIndex = dev->interface;
++ req.wLength = 0;
++
++ dev->ep0state = EP0_NO_ACTION;
++ dev->driver->setup(&dev->gadget, &req);
++}
++
++/*
++ * pxa27x_udc_irq - interrupt handler
++ *
++ * avoid delays in ep0 processing. the control handshaking isn't always
++ * under software control (pxa250c0 and the pxa255 are better), and delays
++ * could cause usb protocol errors.
++ */
++static irqreturn_t pxa27x_udc_irq(int irq, void *_dev)
++{
++ struct pxa27x_udc *dev = _dev;
++ int handled;
++
++ dev->stats.irqs++;
++ HEX_DISPLAY(dev->stats.irqs);
++
++ DBG(DBG_VERBOSE, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
++ "UDCCR:0x%08x\n", UDCISR0, UDCISR1, UDCCR);
++
++ do {
++ u32 udcir = UDCISR1 & 0xF8000000;
++
++ handled = 0;
++
++ /* SUSpend Interrupt Request */
++ if (unlikely(udcir & UDCISR1_IRSU)) {
++ UDCISR1 = UDCISR1_IRSU;
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB suspend\n");
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver
++ && dev->driver->suspend)
++ dev->driver->suspend(&dev->gadget);
++ ep0_idle (dev);
++ }
++
++ /* RESume Interrupt Request */
++ if (unlikely(udcir & UDCISR1_IRRU)) {
++ UDCISR1 = UDCISR1_IRRU;
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB resume\n");
++
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver
++ && dev->driver->resume)
++ dev->driver->resume(&dev->gadget);
++ }
++
++ if (unlikely(udcir & UDCISR1_IRCC)) {
++ unsigned config, interface, alternate;
++
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB SET_CONFIGURATION or "
++ "SET_INTERFACE command received\n");
++
++ UDCCR |= UDCCR_SMAC;
++
++ config = (UDCCR & UDCCR_ACN) >> UDCCR_ACN_S;
++
++ if (dev->configuration != config) {
++ dev->configuration = config;
++ pxa27x_change_configuration(dev) ;
++ }
++
++ interface = (UDCCR & UDCCR_AIN) >> UDCCR_AIN_S;
++ alternate = (UDCCR & UDCCR_AAISN) >> UDCCR_AAISN_S;
++
++ if ( (dev->configuration != interface) || \
++ (dev->alternate != alternate)){
++ dev->interface = config;
++ dev->alternate = alternate;
++ pxa27x_change_interface(dev);
++ }
++
++ UDCISR1 = UDCISR1_IRCC;
++ DMSG("%s: con:%d,inter:%d,alt:%d\n",
++ __FUNCTION__, config,interface, alternate);
++ }
++
++ /* ReSeT Interrupt Request - USB reset */
++ if (unlikely(udcir & UDCISR1_IRRS)) {
++ UDCISR1 = UDCISR1_IRRS;
++ handled = 1;
++
++ if ((UDCCR & UDCCR_UDA) == 0) {
++ DBG(DBG_VERBOSE, "SB reset start\n");
++
++ /* reset driver and endpoints,
++ * in case that's not yet done
++ */
++ stop_activity (dev, dev->driver);
++
++ }
++ INFO("USB reset\n");
++ dev->gadget.speed = USB_SPEED_FULL;
++ memset(&dev->stats, 0, sizeof dev->stats);
++
++ } else {
++ u32 udcisr0 = UDCISR0 ;
++ u32 udcisr1 = UDCISR1 & 0xFFFF;
++ int i;
++
++ if (unlikely (!udcisr0 && !udcisr1))
++ continue;
++
++ DBG(DBG_VERY_NOISY, "irq %02x.%02x\n", udcisr1,udcisr0);
++
++ /* control traffic */
++ if (udcisr0 & UDCISR0_IR0) {
++ dev->ep[0].pio_irqs++;
++ handle_ep0(dev);
++ handled = 1;
++ }
++
++ udcisr0 >>= 2;
++ /* endpoint data transfers */
++ for (i = 1; udcisr0!=0 && i < 16; udcisr0>>=2,i++) {
++ UDCISR0 = UDCISR_INT(i, UDCISR_INT_MASK);
++
++ if (udcisr0 & UDC_INT_FIFOERROR)
++ printk(KERN_ERR" Endpoint %d Fifo error\n", i);
++ if (udcisr0 & UDC_INT_PACKETCMP) {
++ handle_ep(&dev->ep[i]);
++ handled = 1;
++ }
++
++ }
++
++ for (i = 0; udcisr1!=0 && i < 8; udcisr1 >>= 2, i++) {
++ UDCISR1 = UDCISR_INT(i, UDCISR_INT_MASK);
++
++ if (udcisr1 & UDC_INT_FIFOERROR) {
++ printk(KERN_ERR" Endpoint %d fifo error\n", (i+16));
++ }
++
++ if (udcisr1 & UDC_INT_PACKETCMP) {
++ handle_ep(&dev->ep[i+16]);
++ handled = 1;
++ }
++ }
++ }
++
++ /* we could also ask for 1 msec SOF (SIR) interrupts */
++
++ } while (handled);
++ return IRQ_HANDLED;
++}
++
++static void udc_init_ep(struct pxa27x_udc *dev)
++{
++ int i;
++
++ INIT_LIST_HEAD (&dev->gadget.ep_list);
++ INIT_LIST_HEAD (&dev->gadget.ep0->ep_list);
++
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->dma = -1;
++ if (i != 0) {
++ memset(ep, 0, sizeof(*ep));
++ }
++ INIT_LIST_HEAD (&ep->queue);
++ }
++}
++
++/*-------------------------------------------------------------------------*/
++
++static void nop_release (struct device *dev)
++{
++ DMSG("%s %s\n", __FUNCTION__, dev->bus_id);
++}
++
++/* this uses load-time allocation and initialization (instead of
++ * doing it at run-time) to save code, eliminate fault paths, and
++ * be more obviously correct.
++ */
++static struct pxa27x_udc memory = {
++ .gadget = {
++ .ops = &pxa27x_udc_ops,
++ .ep0 = &memory.ep[0].ep,
++ .name = driver_name,
++ .dev = {
++ .bus_id = "gadget",
++ .release = nop_release,
++ },
++ },
++
++ /* control endpoint */
++ .ep[0] = {
++ .ep = {
++ .name = ep0name,
++ .ops = &pxa27x_ep_ops,
++ .maxpacket = EP0_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .reg_udccsr = &UDCCSR0,
++ .reg_udcdr = &UDCDR0,
++ }
++};
++
++#define CP15R0_VENDOR_MASK 0xffffe000
++
++#define CP15R0_XSCALE_VALUE 0x69054000 /* intel/arm/xscale */
++
++/*
++ * probe - binds to the platform device
++ */
++static int pxa27x_udc_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = &memory;
++ int retval;
++ u32 chiprev;
++
++ /* insist on Intel/ARM/XScale */
++ asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
++ if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
++ printk(KERN_ERR "%s: not XScale!\n", driver_name);
++ return -ENODEV;
++ }
++ /* other non-static parts of init */
++ udc->dev = dev;
++ udc->mach = dev->platform_data;
++
++ /* FIXME */
++ if (udc->mach->gpio_pullup)
++ pxa_gpio_mode((udc->mach->gpio_pullup & GPIO_MD_MASK_NR) | \
++ GPIO_OUT | GPIO_DFLT_HIGH);
++
++ init_timer(&udc->timer);
++ udc->timer.function = udc_watchdog;
++ udc->timer.data = (unsigned long) udc;
++
++ device_initialize(&udc->gadget.dev);
++ udc->gadget.dev.parent = dev;
++ udc->gadget.dev.dma_mask = dev->dma_mask;
++
++ the_controller = udc;
++ dev_set_drvdata(dev, udc);
++
++ udc_disable(udc);
++ udc_init_ep(udc);
++ udc_reinit(udc);
++
++ /* irq setup after old hardware state is cleaned up */
++ retval = request_irq(IRQ_USB, pxa27x_udc_irq,
++ SA_INTERRUPT, driver_name, udc);
++ if (retval != 0) {
++ printk(KERN_ERR "%s: can't get irq %i, err %d\n",
++ driver_name, IRQ_USB, retval);
++ return -EBUSY;
++ }
++ udc->got_irq = 1;
++
++ create_proc_files();
++
++ return 0;
++}
++
++static int pxa27x_udc_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++
++ udc_disable(udc);
++ remove_proc_files();
++ usb_gadget_unregister_driver(udc->driver);
++
++ if (udc->got_irq) {
++ free_irq(IRQ_USB, udc);
++ udc->got_irq = 0;
++ }
++ if (machine_is_lubbock() && udc->got_disc) {
++ free_irq(LUBBOCK_USB_DISC_IRQ, udc);
++ udc->got_disc = 0;
++ }
++ dev_set_drvdata(dev, 0);
++ the_controller = 0;
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int pxa27x_udc_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++ int i;
++
++ DMSG("%s will go into SUSPEND_POWER_DOWN\n", __FUNCTION__);
++ udc->udccsr0 = UDCCSR0;
++ for(i=1; (i<UDC_EP_NUM); i++) {
++ if (udc->ep[i].assigned) {
++ struct pxa27x_ep *ep = &udc->ep[i];
++
++ ep->udccsr_value = *ep->reg_udccsr;
++ ep->udccr_value = *ep->reg_udccr;
++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n",
++ i, *ep->reg_udccsr, *ep->reg_udccr);
++ }
++ }
++
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++ pxa_set_cken(CKEN11_USB, 0);
++
++ return 0;
++}
++
++static int pxa27x_udc_resume(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++ int i;
++
++ DMSG("%s: udc resume\n", __FUNCTION__);
++
++ UDCCSR0 = udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME);
++ for (i=1; i < UDC_EP_NUM; i++) {
++ if (udc->ep[i].assigned) {
++ struct pxa27x_ep *ep = &udc->ep[i];
++
++ *ep->reg_udccsr = ep->udccsr_value;
++ *ep->reg_udccr = ep->udccr_value;
++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n",
++ i, *ep->reg_udccsr, *ep->reg_udccr);
++ }
++ }
++ udc_enable(udc);
++ /* OTGPH bit is set when sleep mode is entered.
++ * it indicates that OTG pad is retaining its state.
++ * Upon exit from sleep mode and before clearing OTGPH,
++ * Software must configure the USB OTG pad, UDC, and UHC
++ * to the state they were in before entering sleep mode.*/
++ PSSR |= PSSR_OTGPH;
++
++ return 0;
++}
++#else
++#define pxa27x_udc_suspend NULL
++#define pxa27x_udc_resume NULL
++#endif
++
++/*-------------------------------------------------------------------------*/
++
++static struct platform_driver pxa27x_udc_driver = {
++ .probe = pxa27x_udc_probe,
++ .remove = pxa27x_udc_remove,
++ .suspend = pxa27x_udc_suspend,
++ .resume = pxa27x_udc_resume,
++ .driver = {
++ .name = "pxa2xx-udc",
++ },
++};
++
++static int __init udc_init(void)
++{
++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
++ return platform_driver_register(&pxa27x_udc_driver);
++}
++module_init(udc_init);
++
++static void __exit udc_exit(void)
++{
++ platform_driver_unregister(&pxa27x_udc_driver);
++}
++module_exit(udc_exit);
++
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/usb/gadget/pxa27x_udc.h b/drivers/usb/gadget/pxa27x_udc.h
+new file mode 100644
+index 0000000..c4b72a2
+--- /dev/null
++++ b/drivers/usb/gadget/pxa27x_udc.h
+@@ -0,0 +1,329 @@
++/*
++ * linux/drivers/usb/gadget/pxa27x_udc.h
++ * Intel PXA27x on-chip full speed USB device controller
++ *
++ * Copyright (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
++ * Copyright (C) 2003 David Brownell
++ * Copyright (C) 2004 Intel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef __LINUX_USB_GADGET_PXA27X_H
++#define __LINUX_USB_GADGET_PXA27X_H
++
++#include <linux/types.h>
++
++struct pxa27x_udc;
++
++struct pxa27x_ep {
++ struct usb_ep ep;
++ struct pxa27x_udc *dev;
++
++ const struct usb_endpoint_descriptor *desc;
++ struct list_head queue;
++ unsigned long pio_irqs;
++ unsigned long dma_irqs;
++
++ int dma;
++ unsigned fifo_size;
++ unsigned ep_num;
++ unsigned ep_type;
++
++ unsigned stopped : 1;
++ unsigned dma_con : 1;
++ unsigned dir_in : 1;
++ unsigned assigned : 1;
++
++ unsigned config;
++ unsigned interface;
++ unsigned aisn;
++ /* UDCCSR = UDC Control/Status Register for this EP
++ * UBCR = UDC Byte Count Remaining (contents of OUT fifo)
++ * UDCDR = UDC Endpoint Data Register (the fifo)
++ * UDCCR = UDC Endpoint Configuration Registers
++ * DRCM = DMA Request Channel Map
++ */
++ volatile u32 *reg_udccsr;
++ volatile u32 *reg_udcbcr;
++ volatile u32 *reg_udcdr;
++ volatile u32 *reg_udccr;
++#ifdef USE_DMA
++ volatile u32 *reg_drcmr;
++#define drcmr(n) .reg_drcmr = & DRCMR ## n ,
++#else
++#define drcmr(n)
++#endif
++
++#ifdef CONFIG_PM
++ unsigned udccsr_value;
++ unsigned udccr_value;
++#endif
++};
++
++struct pxa27x_request {
++ struct usb_request req;
++ struct list_head queue;
++};
++
++enum ep0_state {
++ EP0_IDLE,
++ EP0_IN_DATA_PHASE,
++ EP0_OUT_DATA_PHASE,
++// EP0_END_XFER,
++ EP0_STALL,
++ EP0_NO_ACTION
++};
++
++#define EP0_FIFO_SIZE ((unsigned)16)
++#define BULK_FIFO_SIZE ((unsigned)64)
++#define ISO_FIFO_SIZE ((unsigned)256)
++#define INT_FIFO_SIZE ((unsigned)8)
++
++struct udc_stats {
++ struct ep0stats {
++ unsigned long ops;
++ unsigned long bytes;
++ } read, write;
++ unsigned long irqs;
++};
++
++#ifdef CONFIG_USB_PXA27X_SMALL
++/* when memory's tight, SMALL config saves code+data. */
++//#undef USE_DMA
++//#define UDC_EP_NUM 3
++#endif
++
++#ifndef UDC_EP_NUM
++#define UDC_EP_NUM 24
++#endif
++
++struct pxa27x_udc {
++ struct usb_gadget gadget;
++ struct usb_gadget_driver *driver;
++
++ enum ep0_state ep0state;
++ struct udc_stats stats;
++ unsigned got_irq : 1,
++ got_disc : 1,
++ has_cfr : 1,
++ req_pending : 1,
++ req_std : 1,
++ req_config : 1;
++
++#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
++ struct timer_list timer;
++
++ struct device *dev;
++ struct pxa2xx_udc_mach_info *mach;
++ u64 dma_mask;
++ struct pxa27x_ep ep [UDC_EP_NUM];
++
++ unsigned configuration,
++ interface,
++ alternate;
++#ifdef CONFIG_PM
++ unsigned udccsr0;
++#endif
++};
++
++/*-------------------------------------------------------------------------*/
++#if 0
++#ifdef DEBUG
++#define HEX_DISPLAY(n) do { \
++ if (machine_is_mainstone())\
++ { MST_LEDDAT1 = (n); } \
++ } while(0)
++
++#define HEX_DISPLAY1(n) HEX_DISPLAY(n)
++
++#define HEX_DISPLAY2(n) do { \
++ if (machine_is_mainstone()) \
++ { MST_LEDDAT2 = (n); } \
++ } while(0)
++
++#endif /* DEBUG */
++#endif
++/*-------------------------------------------------------------------------*/
++
++/* LEDs are only for debug */
++#ifndef HEX_DISPLAY
++#define HEX_DISPLAY(n) do {} while(0)
++#endif
++
++#ifndef LED_CONNECTED_ON
++#define LED_CONNECTED_ON do {} while(0)
++#define LED_CONNECTED_OFF do {} while(0)
++#endif
++#ifndef LED_EP0_ON
++#define LED_EP0_ON do {} while (0)
++#define LED_EP0_OFF do {} while (0)
++#endif
++
++static struct pxa27x_udc *the_controller;
++
++/*-------------------------------------------------------------------------*/
++
++/* one GPIO should be used to detect host disconnect */
++static inline int is_usb_connected(void)
++{
++ if (!the_controller->mach->udc_is_connected)
++ return 1;
++ return the_controller->mach->udc_is_connected();
++}
++
++/* one GPIO should force the host to see this device (or not) */
++static inline void make_usb_disappear(void)
++{
++ if (!the_controller->mach->udc_command)
++ return;
++ the_controller->mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
++}
++
++static inline void let_usb_appear(void)
++{
++ if (!the_controller->mach->udc_command)
++ return;
++ the_controller->mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
++}
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * Debugging support vanishes in non-debug builds. DBG_NORMAL should be
++ * mostly silent during normal use/testing, with no timing side-effects.
++ */
++#define DBG_NORMAL 1 /* error paths, device state transitions */
++#define DBG_VERBOSE 2 /* add some success path trace info */
++#define DBG_NOISY 3 /* ... even more: request level */
++#define DBG_VERY_NOISY 4 /* ... even more: packet level */
++
++#ifdef DEBUG
++
++static const char *state_name[] = {
++ "EP0_IDLE",
++ "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE",
++ "EP0_END_XFER", "EP0_STALL"
++};
++
++#define DMSG(stuff...) printk(KERN_ERR "udc: " stuff)
++
++#ifdef VERBOSE
++# define UDC_DEBUG DBG_VERBOSE
++#else
++# define UDC_DEBUG DBG_NORMAL
++#endif
++
++static void __attribute__ ((__unused__))
++dump_udccr(const char *label)
++{
++ u32 udccr = UDCCR;
++ DMSG("%s 0x%08x =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n",
++ label, udccr,
++ (udccr & UDCCR_OEN) ? " oen":"",
++ (udccr & UDCCR_AALTHNP) ? " aalthnp":"",
++ (udccr & UDCCR_AHNP) ? " rem" : "",
++ (udccr & UDCCR_BHNP) ? " rstir" : "",
++ (udccr & UDCCR_DWRE) ? " dwre" : "",
++ (udccr & UDCCR_SMAC) ? " smac" : "",
++ (udccr & UDCCR_EMCE) ? " emce" : "",
++ (udccr & UDCCR_UDR) ? " udr" : "",
++ (udccr & UDCCR_UDA) ? " uda" : "",
++ (udccr & UDCCR_UDE) ? " ude" : "",
++ (udccr & UDCCR_ACN) >> UDCCR_ACN_S,
++ (udccr & UDCCR_AIN) >> UDCCR_AIN_S,
++ (udccr & UDCCR_AAISN)>> UDCCR_AAISN_S );
++}
++
++static void __attribute__ ((__unused__))
++dump_udccsr0(const char *label)
++{
++ u32 udccsr0 = UDCCSR0;
++
++ DMSG("%s %s 0x%08x =%s%s%s%s%s%s%s\n",
++ label, state_name[the_controller->ep0state], udccsr0,
++ (udccsr0 & UDCCSR0_SA) ? " sa" : "",
++ (udccsr0 & UDCCSR0_RNE) ? " rne" : "",
++ (udccsr0 & UDCCSR0_FST) ? " fst" : "",
++ (udccsr0 & UDCCSR0_SST) ? " sst" : "",
++ (udccsr0 & UDCCSR0_DME) ? " dme" : "",
++ (udccsr0 & UDCCSR0_IPR) ? " ipr" : "",
++ (udccsr0 & UDCCSR0_OPC) ? " opr" : "");
++}
++
++static void __attribute__ ((__unused__))
++dump_state(struct pxa27x_udc *dev)
++{
++ unsigned i;
++
++ DMSG("%s, udcicr %02X.%02X, udcsir %02X.%02x, udcfnr %02X\n",
++ state_name[dev->ep0state],
++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR);
++ dump_udccr("udccr");
++
++ if (!dev->driver) {
++ DMSG("no gadget driver bound\n");
++ return;
++ } else
++ DMSG("ep0 driver '%s'\n", dev->driver->driver.name);
++
++
++ dump_udccsr0 ("udccsr0");
++ DMSG("ep0 IN %lu/%lu, OUT %lu/%lu\n",
++ dev->stats.write.bytes, dev->stats.write.ops,
++ dev->stats.read.bytes, dev->stats.read.ops);
++
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if (dev->ep [i].desc == 0)
++ continue;
++ DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccsr);
++ }
++}
++
++#if 0
++static void dump_regs(u8 ep)
++{
++ DMSG("EP:%d UDCCSR:0x%08x UDCBCR:0x%08x\n UDCCR:0x%08x\n",
++ ep,UDCCSN(ep), UDCBCN(ep), UDCCN(ep));
++}
++static void dump_req (struct pxa27x_request *req)
++{
++ struct usb_request *r = &req->req;
++
++ DMSG("%s: buf:0x%08x length:%d dma:0x%08x actual:%d\n",
++ __FUNCTION__, (unsigned)r->buf, r->length,
++ r->dma, r->actual);
++}
++#endif
++
++#else
++
++#define DMSG(stuff...) do{}while(0)
++
++#define dump_udccr(x) do{}while(0)
++#define dump_udccsr0(x) do{}while(0)
++#define dump_state(x) do{}while(0)
++
++#define UDC_DEBUG ((unsigned)0)
++
++#endif
++
++#define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0)
++
++#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff)
++#define INFO(stuff...) printk(KERN_INFO "udc: " stuff)
++
++
++#endif /* __LINUX_USB_GADGET_PXA27X_H */
+diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c
+index e552668..971e491 100644
+--- a/drivers/usb/gadget/serial.c
++++ b/drivers/usb/gadget/serial.c
+@@ -1378,20 +1378,20 @@ static int __init gs_bind(struct usb_gadget *gadget)
+
+ usb_ep_autoconfig_reset(gadget);
+
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_IN_NAME = ep->name;
+ ep->driver_data = ep; /* claim the endpoint */
+
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_OUT_NAME = ep->name;
+ ep->driver_data = ep; /* claim the endpoint */
+
+ if (use_acm) {
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc, 0, 0, 0);
+ if (!ep) {
+ printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name);
+ goto autoconf_fail;
+diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
+index 8c85e33..46ffe6c 100644
+--- a/drivers/usb/gadget/zero.c
++++ b/drivers/usb/gadget/zero.c
+@@ -1155,7 +1155,7 @@ zero_bind (struct usb_gadget *gadget)
+ * but there may also be important quirks to address.
+ */
+ usb_ep_autoconfig_reset (gadget);
+- ep = usb_ep_autoconfig (gadget, &fs_source_desc);
++ ep = usb_ep_autoconfig (gadget, &fs_source_desc, 0, 0, 0);
+ if (!ep) {
+ autoconf_fail:
+ printk (KERN_ERR "%s: can't autoconfigure on %s\n",
+@@ -1165,7 +1165,7 @@ autoconf_fail:
+ EP_IN_NAME = ep->name;
+ ep->driver_data = ep; /* claim */
+
+- ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
++ ep = usb_ep_autoconfig (gadget, &fs_sink_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_OUT_NAME = ep->name;
+diff --git a/include/linux/usb_gadget.h b/include/linux/usb_gadget.h
+index e17186d..64c81fd 100644
+--- a/include/linux/usb_gadget.h
++++ b/include/linux/usb_gadget.h
+@@ -445,10 +445,28 @@ usb_ep_fifo_flush (struct usb_ep *ep)
+
+ struct usb_gadget;
+
++/**
++ * struct usb_endpoint_config - possible configurations of a given endpoint
++ * @config: the configuration number
++ * @interface: the interface number
++ * @altinterface: the altinterface number
++ *
++ * Used as an array to pass information about the possible configurations
++ * of a given endpoint to the bus controller.
++ */
++struct usb_endpoint_config {
++ int config;
++ int interface;
++ int altinterface;
++};
++
+ /* the rest of the api to the controller hardware: device operations,
+ * which don't involve endpoints (or i/o).
+ */
+ struct usb_gadget_ops {
++ struct usb_ep* (*ep_alloc)(struct usb_gadget *gadget,
++ struct usb_endpoint_descriptor *desc,
++ int config, int interface, int alt);
+ int (*get_frame)(struct usb_gadget *);
+ int (*wakeup)(struct usb_gadget *);
+ int (*set_selfpowered) (struct usb_gadget *, int is_selfpowered);
+@@ -872,7 +890,8 @@ int usb_gadget_config_buf(const struct usb_config_descriptor *config,
+ /* utility wrapping a simple endpoint selection policy */
+
+ extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *,
+- struct usb_endpoint_descriptor *) __devinit;
++ struct usb_endpoint_descriptor *,
++ int, int, int) __devinit;
+
+ extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit;
+
diff --git a/packages/linux/linux-ezx-2.6.21/patches/series b/packages/linux/linux-ezx-2.6.21/patches/series
new file mode 100755
index 0000000000..5580b74bf8
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/patches/series
@@ -0,0 +1,93 @@
+patch-2.6.21.4
+
+ezx-core.patch
+# ezx-core TODO: should be ezx-common
+# look at the pxa-regs.h diff and put each definition on the proper patch
+# register a machine type for each phone model
+
+# enable this patch ONLY if you have STUART connected and dont forget
+# to change your cmdline if you want console on STUART.
+#ezx-enable-stuart.patch
+
+ezx-bp.patch
+# ezx-bp TODO:
+# try to run this as a module - this may solve timing issues for opentapi.
+# suspend/resume (not sure if it can be handled here)
+# implement 2nd gen handshake support
+# move platform device to ezx-phone.c
+
+ezx-pm.patch
+
+ezx-pcap.patch
+# ezx-pcap TODO:
+# implement a per board init reg array
+# move mmc functions to the ezx-phone.c mmc init
+# move vibrator level function to the vibrator driver
+
+
+a780-mci.patch
+e680-mci.patch
+a1200-mci.patch
+
+pxa27x-udc-support.2.patch
+
+ezx-emu.patch
+# ezx-emu TODO:
+# userspace interface for controling emu
+# read adc to find which accessory is plugged
+
+ezx-mtd-map.patch
+# ezx-mtd-map TODO:
+# at least the original partition should go on the ezx-phone.c file
+
+ezx-serial-bug-workaround.patch
+# ezx-serial-bug TODO:
+# does anyone have a phone with this bug?
+
+pxa-kbd.patch
+# pxa-kbd TODO:
+# test multi-key presses
+# ask Harald about driver status/sending mainline
+
+a780-kbd.patch
+e680-kbd.patch
+
+pcap-ts.patch
+a780-ts.patch
+e680-ts.patch
+a1200-ts.patch
+
+ezx-backlight.patch
+
+a780-flip.patch
+e680-locksw.patch
+
+a780-leds.patch
+e680-leds.patch
+
+a780-vibrator.patch
+
+# mux_cli patches
+mux_cli.patch
+mux-fix.patch
+mux-fix-init-errorpath.patch
+mux-remove-flipbuffers.patch
+mux-remove-get_halted_bit.patch
+mux-remove-usbh_finished_resume.patch
+mux-fix-makefile.patch
+mux-fix-tty-driver.patch
+mux-linux-2.6.21-fix.patch
+#mux-ifdef-ezx-features.patch
+#mux_debug.patch
+# mux_cli TODO:
+# merge patches
+# try to understand the code and cleanup (painful)
+
+# Global TODO:
+# compile everything as module and test for insmod/rmmod
+# can NOT run as module (yet)
+# pxa-ohci, ts0710_mux, ts0710_mux_usb, ezx-bp
+
+# incomplete
+#asoc-pxa-ssp.patch
+#ezx-asoc.patch
diff --git a/packages/linux/linux-ezx-2.6.21/update_patches.sh b/packages/linux/linux-ezx-2.6.21/update_patches.sh
new file mode 100644
index 0000000000..d63a1e8e7d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.21/update_patches.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+# Helper script to update patches and speedup filling the SRC_URI section of our .bb
+# Run it while in packages/linux/linux-ezx-2.6.x/
+
+[ -d patches ] && mtn drop -R patches
+rm -rf patches
+
+svn --quiet co http://svn.openezx.org/trunk/src/kernel-2.6/patches/ patches
+find patches -type f -print0
+mtn add patches patches/*
+
+cat patches/series | grep ^[0-9A-Za-z] | sed -e 's/.*/\tfile:\/\/patches\/\0;patch=1 \\/'
+ls -1 patches/defconfig-* | sed -e 's/.*/\tfile:\/\/\0 \\/'
+
diff --git a/packages/linux/linux-ezx/defconfig-a780 b/packages/linux/linux-ezx/defconfig-a780
deleted file mode 100644
index 313540dc4c..0000000000
--- a/packages/linux/linux-ezx/defconfig-a780
+++ /dev/null
@@ -1,1317 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13
-# Sun Jan 21 10:52:04 2007
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-# CONFIG_LOCALVERSION is not set
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-# CONFIG_SHMEM is not set
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-CONFIG_TINY_SHMEM=y
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=m
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-CONFIG_PXA_EZX=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_PXA_EZX_E680 is not set
-CONFIG_PXA_EZX_A780=y
-CONFIG_PXA27x=y
-CONFIG_IWMMXT=y
-CONFIG_PXA_SPI=y
-CONFIG_PXA_EZX_PCAP=y
-CONFIG_PXA_EZX_PCAP_EMU=m
-CONFIG_PXA_EZX_PCAP_EMU_USB=y
-# CONFIG_PXA_EZX_PCAP_EMU_UART is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS2,115200n8 console=tty1 noinitrd root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_NETBIOS_NS=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_PPTP=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=3
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-# CONFIG_MTD_CFI_I2 is not set
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=m
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=m
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-CONFIG_MTD_XIP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_SHARP_SL is not set
-CONFIG_MTD_PXA27x=m
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-CONFIG_MTD_DOCECC=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0x0
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH is not set
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ARCH_EZX_ROFLASH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-# CONFIG_DM_SNAPSHOT is not set
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=m
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_PXA=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=m
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_LINUX_LED is not set
-# CONFIG_BULVERDE_SRAM_DEV is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-CONFIG_TS0710_MUX=y
-CONFIG_TS0710_MUX_USB=y
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-CONFIG_I2C_PXA_SLAVE=y
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
-# CONFIG_I2C_ADCM2700 is not set
-# CONFIG_I2C_A780_CAMERA is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-CONFIG_SPI_DEBUG=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Motorola EZX devices
-#
-CONFIG_KEYPAD_A780=y
-# CONFIG_KEYPAD_E680 is not set
-CONFIG_KEYLIGHT_A780=y
-CONFIG_VIBRATOR_A780=y
-# CONFIG_FMRADIO_E680 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_A780=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_PARAMETERS=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_HP680 is not set
-CONFIG_BACKLIGHT_EZX=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Input Devices
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-CONFIG_USB_GADGET_DEBUG_FILES=y
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-# CONFIG_USB_ETH_RNDIS is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
-# CONFIG_INOTIFY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-CONFIG_CRAMFS=m
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-
-#
-# Dynamic Power Management
-#
-# CONFIG_DPM is not set
diff --git a/packages/linux/linux-ezx/defconfig-a780-laforge b/packages/linux/linux-ezx/defconfig-a780-laforge
deleted file mode 100644
index 560530a1ce..0000000000
--- a/packages/linux/linux-ezx/defconfig-a780-laforge
+++ /dev/null
@@ -1,1298 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13
-# Thu May 18 19:40:25 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION="-ezx6"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-# CONFIG_SHMEM is not set
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-CONFIG_TINY_SHMEM=y
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=m
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-CONFIG_PXA_EZX=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_PXA_EZX_E680 is not set
-CONFIG_PXA_EZX_A780=y
-CONFIG_PXA27x=y
-CONFIG_IWMMXT=y
-CONFIG_PXA_SPI=y
-CONFIG_PXA_EZX_PCAP=y
-CONFIG_PXA_EZX_PCAP_EMU=m
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=32M root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=1 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off console=ttyS2,115200n8 console=tty0"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=m
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_NETBIOS_NS=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_PPTP=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=3
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-# CONFIG_MTD_CFI_I2 is not set
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=m
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=m
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-CONFIG_MTD_XIP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_SHARP_SL is not set
-CONFIG_MTD_PXA27x=m
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-CONFIG_MTD_DOCECC=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0x0
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH is not set
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ARCH_EZX_ROFLASH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-# CONFIG_DM_SNAPSHOT is not set
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=m
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=m
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_PXA=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_PCAP=m
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=m
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_LINUX_LED is not set
-# CONFIG_BULVERDE_SRAM_DEV is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-CONFIG_I2C_PXA_SLAVE=y
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
-# CONFIG_I2C_ADCM2700 is not set
-# CONFIG_I2C_A780_CAMERA is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-CONFIG_SPI_DEBUG=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Motorola EZX devices
-#
-# CONFIG_KEYPAD_A780 is not set
-# CONFIG_KEYPAD_E680 is not set
-# CONFIG_KEYLIGHT_A780 is not set
-# CONFIG_FMRADIO_E680 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_PARAMETERS=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Input Devices
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-CONFIG_USB_GADGET_DEBUG_FILES=y
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-# CONFIG_USB_ETH_RNDIS is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
-# CONFIG_INOTIFY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-# CONFIG_TMPFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-CONFIG_CRAMFS=y
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-
-#
-# Dynamic Power Management
-#
-# CONFIG_DPM is not set
diff --git a/packages/linux/linux-ezx/defconfig-e680 b/packages/linux/linux-ezx/defconfig-e680
deleted file mode 100644
index ef5fef395f..0000000000
--- a/packages/linux/linux-ezx/defconfig-e680
+++ /dev/null
@@ -1,1314 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.13
-# Thu May 18 19:40:25 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION="-ezx6"
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-# CONFIG_SHMEM is not set
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-CONFIG_TINY_SHMEM=y
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=m
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-CONFIG_PXA_EZX=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-CONFIG_PXA_EZX_E680=y
-# CONFIG_PXA_EZX_A780 is not set
-CONFIG_PXA27x=y
-CONFIG_IWMMXT=y
-CONFIG_PXA_SPI=y
-CONFIG_PXA_EZX_PCAP=y
-CONFIG_PXA_EZX_PCAP_EMU=m
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=32M root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=1 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off console=ttyS2,115200n8 console=tty0"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_NETBIOS_NS=m
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-CONFIG_IP_NF_PPTP=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_MATCH_POLICY=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_AMANDA=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-# CONFIG_IP_NF_TARGET_ECN is not set
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AHESP=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_POLICY=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-CONFIG_NET_CLS_ROUTE=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=3
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-# CONFIG_MTD_CFI_I2 is not set
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=m
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=m
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-CONFIG_MTD_XIP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IMPA7 is not set
-# CONFIG_MTD_SHARP_SL is not set
-CONFIG_MTD_PXA27x=m
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-CONFIG_MTD_DOCECC=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED=y
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0x0
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_HIGH is not set
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ARCH_EZX_ROFLASH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-# CONFIG_DM_SNAPSHOT is not set
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=m
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_PXA=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_PCAP=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=m
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LEGACY_PTY_COUNT is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_LINUX_LED is not set
-# CONFIG_BULVERDE_SRAM_DEV is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-CONFIG_I2C_PXA_SLAVE=y
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
-# CONFIG_I2C_ADCM2700 is not set
-# CONFIG_I2C_A780_CAMERA is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-CONFIG_SPI_DEBUG=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Motorola EZX devices
-#
-# CONFIG_KEYPAD_A780 is not set
-# CONFIG_KEYPAD_E680 is not set
-# CONFIG_KEYLIGHT_A780 is not set
-# CONFIG_FMRADIO_E680 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_E680=y
-# CONFIG_LEDS_A780 is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_PARAMETERS=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_BACKLIGHT_EZX=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Input Devices
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-CONFIG_USB_GADGET_DEBUG_FILES=y
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-# CONFIG_USB_ETH_RNDIS is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
-# CONFIG_INOTIFY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-CONFIG_CRAMFS=m
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-
-#
-# Dynamic Power Management
-#
-# CONFIG_DPM is not set
diff --git a/packages/linux/linux-ezx/defconfig-rokr-e2 b/packages/linux/linux-ezx/defconfig-rokr-e2
deleted file mode 100644
index 6345a77a34..0000000000
--- a/packages/linux/linux-ezx/defconfig-rokr-e2
+++ /dev/null
@@ -1,904 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19.1
-# Thu Jan 4 18:45:14 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-CONFIG_ARCH_EZX=y
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_ARCH_EZX_SUMATRA=y
-# CONFIG_ARCH_EZX_A780 is not set
-CONFIG_PXA27x=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=32M console=tty0 video=pxafb:mode:240x320-8,active root=/dev/mmcblk0p1 rootdelay=1"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-# CONFIG_FPE_NWFPE is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-# CONFIG_PACKET is not set
-# CONFIG_UNIX is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_INET is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-# CONFIG_FW_LOADER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-# CONFIG_MTD_CHAR is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-# CONFIG_NETDEVICES is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_PXA is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_PXA is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_PXA2XX=y
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-
-#
-# Graphics support
-#
-# CONFIG_FIRMWARE_EDID is not set
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_PARAMETERS=y
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-CONFIG_FONT_6x11=y
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_INOTIFY is not set
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_FRAME_POINTER=y
-# CONFIG_DEBUG_USER is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-ezx/pxa-serial-gcc4.diff b/packages/linux/linux-ezx/pxa-serial-gcc4.diff
deleted file mode 100644
index 7f827965e9..0000000000
--- a/packages/linux/linux-ezx/pxa-serial-gcc4.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/pxa.c 2006-08-29 10:51:57.000000000 +0200
-+++ linux-2.6.16/drivers/serial/pxa.c 2006-08-29 10:52:38.545780000 +0200
-@@ -241,7 +241,7 @@
- /*
- * This handles the interrupt from one port.
- */
--static inline irqreturn_t
-+inline irqreturn_t
- serial_pxa_irq(int irq, void *dev_id, struct pt_regs *regs)
- {
- struct uart_pxa_port *up = (struct uart_pxa_port *)dev_id;
diff --git a/packages/linux/linux-ezx/sa1100-rtc-gcc4.diff b/packages/linux/linux-ezx/sa1100-rtc-gcc4.diff
deleted file mode 100644
index 6fd54ece3a..0000000000
--- a/packages/linux/linux-ezx/sa1100-rtc-gcc4.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/sa1100-rtc.c 2006-08-29 10:51:48.000000000 +0200
-+++ linux-2.6.16/drivers/char/sa1100-rtc.c 2006-08-29 10:52:14.995780000 +0200
-@@ -126,7 +126,7 @@
- tval->tm_mday = days + 1;
- }
-
--static irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
- {
- unsigned int rtsr = RTSR;
-
diff --git a/packages/linux/linux-ezx_2.6.16.13.bb b/packages/linux/linux-ezx_2.6.16.13.bb
deleted file mode 100644
index 2775a744d3..0000000000
--- a/packages/linux/linux-ezx_2.6.16.13.bb
+++ /dev/null
@@ -1,109 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
-SECTION = "kernel"
-AUTHOR = "Harald Welte and the OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-LICENSE = "GPL"
-DEPENDS += "quilt-native"
-EZX = "ezx9"
-PR = "${EZX}-r1"
-
-inherit kernel
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-ezx"
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-
-##############################################################
-# source and patches
-#
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
- http://www.openezx.org/download/patches-2.6.16-2.6.16.13-${EZX}.tar.bz2 \
- \
- file://logo_linux_clut224.ppm \
- file://defconfig-a780 \
- file://defconfig-e680"
-S = "${WORKDIR}/linux-2.6.16"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680)'
-
-CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 noinitrd"
-CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
-# uncomment if you want to boot over NFS
-#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
-# uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} mem=32M@0xA0000000 mem=16M@0xAC000000"
-
-###############################################################
-# module configs specific to this kernel
-#
-module_autoload_pxaficp_ir = "pxaficp_ir"
-module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
-do_ezxpatch() {
- mv ${WORKDIR}/patches ${S} && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_configure() {
- install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
- if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
- die "No default configuration for ${MACHINE} available."
- fi
-
- echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
- if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
- echo "CONFIG_AEABI=y" >> ${S}/.config
- echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
- else
- echo "# CONFIG_AEABI is not set" >> ${S}/.config
- echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
- fi
-
- sed -e '/CONFIG_AEABI/d' \
- -e '/CONFIG_OABI_COMPAT=/d' \
- -e '/CONFIG_CMDLINE=/d' \
- -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
- -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ABS_POS=/d' \
- '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
-
- yes '' | oe_runmake oldconfig
-}
-
-###############################################################
-# check the kernel is below the 1024*1024 byte limit for the boot-over usb
-#
-do_compile_append() {
- size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
- if [ $size -ge 1294336 ]; then
- rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
- echo "Size is $size"
- die "This kernel is too big for your EZX Phone. Please reduce the size of the kernel by making more of it modular."
- fi
-}
-
-###############################################################
-# put into deploy directory
-#
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_VERSION}-${MACHINE}.tgz -C ${D} lib
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_package after do_install
-addtask ezxpatch before do_patch after do_unpack
diff --git a/packages/linux/linux-ezx_2.6.19+2.6.20-rc2.bb b/packages/linux/linux-ezx_2.6.19+2.6.20-rc2.bb
deleted file mode 100644
index 8b65609687..0000000000
--- a/packages/linux/linux-ezx_2.6.19+2.6.20-rc2.bb
+++ /dev/null
@@ -1,124 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
-SECTION = "kernel"
-AUTHOR = "Harald Welte and the OpenEZX Team <openezx-devel@lists.openezx.org>"
-HOMEPAGE = "http://www.openezx.org"
-LICENSE = "GPL"
-DEPENDS += "quilt-native"
-EZX = "ezx0"
-PR = "${EZX}-r1"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_rokr-e2 = "1"
-
-inherit kernel
-
-KERNEL_RELEASE = "2.6.20-rc2"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-ezx"
-
-RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
-DMSRC = "http://people.openezx.org/dotmonkey/patch"
-
-##############################################################
-# source and patches
-#
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.19.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.20-rc2.bz2;patch=1 \
- ${DMSRC}/Kconfig.patch;patch=1;pnum=5 \
- ${DMSRC}/Makefile.patch;patch=1;pnum=5 \
- ${DMSRC}/head-xscale.S.patch;patch=1;pnum=5 \
- ${DMSRC}/sumatra.c.patch;patch=1;pnum=1 \
- ${DMSRC}/uncompress.h.patch;patch=1;pnum=5 \
- file://logo_linux_clut224.ppm \
- file://defconfig-${MACHINE}"
-
-S = "${WORKDIR}/linux-2.6.19"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(a780|e680|a1200|rokr-e2)'
-
-CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 noinitrd"
-CMDLINE_CON_rokr-e2 = "video=pxafb:mode:240x320-8,active console=ttyS2,115200n8 console=tty1"
-
-CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
-# uncomment if you want to boot over NFS
-#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
-# uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} mem=32M@0xA0000000 mem=16M@0xAC000000"
-CMDLINE_rokr-e2 = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
-
-###############################################################
-# module configs specific to this kernel
-#
-module_autoload_pxaficp_ir = "pxaficp_ir"
-module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
-do_ezxpatch() {
- #mv ${WORKDIR}/patches ${S} && cd ${S} && quilt push -av
- #rm -Rf patches .pc
- :
-}
-
-do_configure() {
- install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
- if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
- die "No default configuration for ${MACHINE} available."
- fi
-
- echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
- if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
- echo "CONFIG_AEABI=y" >> ${S}/.config
- echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
- else
- echo "# CONFIG_AEABI is not set" >> ${S}/.config
- echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
- fi
-
- sed -e '/CONFIG_AEABI/d' \
- -e '/CONFIG_OABI_COMPAT=/d' \
- -e '/CONFIG_CMDLINE=/d' \
- -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
- -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ABS_POS=/d' \
- '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
-
- yes '' | oe_runmake oldconfig
-}
-
-###############################################################
-# check the kernel is below the 1024*1024 byte limit for the boot-over usb
-#
-do_compile_append() {
- size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
- if [ $size -ge 1294336 ]; then
- rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
- echo "Size is $size"
- die "This kernel is too big for your EZX Phone. Please reduce the size of the kernel by making more of it modular."
- fi
-}
-
-###############################################################
-# put into deploy directory
-#
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${MACHINE}.tgz -C ${D} lib
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_package after do_install
-addtask ezxpatch before do_patch after do_unpack
diff --git a/packages/linux/linux-ezx_2.6.21.bb b/packages/linux/linux-ezx_2.6.21.bb
new file mode 100644
index 0000000000..8b111a2c44
--- /dev/null
+++ b/packages/linux/linux-ezx_2.6.21.bb
@@ -0,0 +1,153 @@
+DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
+SECTION = "kernel"
+AUTHOR = "Harald Welte and the OpenEZX Team <openezx-devel@lists.openezx.org>"
+HOMEPAGE = "http://www.openezx.org"
+LICENSE = "GPL"
+DEPENDS += "quilt-native"
+EZX = "ezxdev"
+PR = "${EZX}-r6"
+
+inherit kernel
+
+##############################################################
+# source and patches
+#
+SRC_URI = " \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://logo_linux_clut224.ppm \
+ \
+ file://patches/patch-2.6.21.4;patch=1 \
+ file://patches/ezx-core.patch;patch=1 \
+ file://patches/ezx-bp.patch;patch=1 \
+ file://patches/ezx-pm.patch;patch=1 \
+ file://patches/ezx-pcap.patch;patch=1 \
+ file://patches/a780-mci.patch;patch=1 \
+ file://patches/e680-mci.patch;patch=1 \
+ file://patches/a1200-mci.patch;patch=1 \
+ file://patches/pxa27x-udc-support.2.patch;patch=1 \
+ file://patches/ezx-emu.patch;patch=1 \
+ file://patches/ezx-mtd-map.patch;patch=1 \
+ file://patches/ezx-serial-bug-workaround.patch;patch=1 \
+ file://patches/pxa-kbd.patch;patch=1 \
+ file://patches/a780-kbd.patch;patch=1 \
+ file://patches/e680-kbd.patch;patch=1 \
+ file://patches/pcap-ts.patch;patch=1 \
+ file://patches/a780-ts.patch;patch=1 \
+ file://patches/e680-ts.patch;patch=1 \
+ file://patches/a1200-ts.patch;patch=1 \
+ file://patches/ezx-backlight.patch;patch=1 \
+ file://patches/a780-flip.patch;patch=1 \
+ file://patches/e680-locksw.patch;patch=1 \
+ file://patches/a780-leds.patch;patch=1 \
+ file://patches/e680-leds.patch;patch=1 \
+ file://patches/a780-vibrator.patch;patch=1 \
+ file://patches/mux_cli.patch;patch=1 \
+ file://patches/mux-fix.patch;patch=1 \
+ file://patches/mux-fix-init-errorpath.patch;patch=1 \
+ file://patches/mux-remove-flipbuffers.patch;patch=1 \
+ file://patches/mux-remove-get_halted_bit.patch;patch=1 \
+ file://patches/mux-remove-usbh_finished_resume.patch;patch=1 \
+ file://patches/mux-fix-makefile.patch;patch=1 \
+ file://patches/mux-fix-tty-driver.patch;patch=1 \
+ file://patches/mux-linux-2.6.21-fix.patch;patch=1 \
+ file://patches/defconfig-a1200 \
+ file://patches/defconfig-a780 \
+ file://patches/defconfig-e2 \
+ file://patches/defconfig-e6 \
+ file://patches/defconfig-e680 \
+ \
+ "
+
+S = "${WORKDIR}/linux-${PV}"
+
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = '(a780|e680|a1200)'
+
+# For now the code for serial console is disabled in compress.c
+#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 noinitrd"
+CMDLINE_CON = "console=tty1 noinitrd"
+
+CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
+# uncomment if you want to boot over NFS
+#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
+# uncomment to enable dyntick
+#CMDLINE_OTHER = "dyntick=enable"
+CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
+CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
+CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} mem=32M@0xA0000000 mem=16M@0xAC000000"
+
+###############################################################
+# module configs specific to this kernel
+#
+#module_autoload_pxaficp_ir = "pxaficp_ir"
+#module_autoload_snd-pcm-oss = "snd-pcm-oss"
+
+do_configure() {
+ install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
+
+ if [ ! -e ${WORKDIR}/patches/defconfig-${MACHINE} ]; then
+ die "No default configuration for ${MACHINE} available."
+ fi
+
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+
+ if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ #
+ # Logo configuration
+ #
+ echo "CONFIG_LOGO=y" >> ${S}/.config
+ echo "CONFIG_LOGO_LINUX_CLUT224=y" >> ${S}/.config
+
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
+ -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ABS_POS=/d' \
+ -e '/CONFIG_LOGO=/d' \
+ -e '/CONFIG_LOGO_LINUX_CLUT224=/d' \
+ '${WORKDIR}/patches/defconfig-${MACHINE}' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+}
+
+###############################################################
+# check the kernel is below the 1024*1024 byte limit for the boot-over usb
+#
+do_compile_append() {
+ size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
+ if [ $size -ge 1294336 ]; then
+ rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
+ echo "Size is $size"
+ echo "This kernel is too big for your EZX Phone. Please reduce the size of the kernel by making more of it modular."
+ fi
+}
+
+###############################################################
+# put into deploy directory
+#
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}-${DATETIME}.tgz -C ${D} lib
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_package after do_install
diff --git a/packages/linux/linux-geodegx_2.4.24.bb b/packages/linux/linux-geodegx_2.4.24.bb
index 70cb5f4fd7..968127c5f3 100644
--- a/packages/linux/linux-geodegx_2.4.24.bb
+++ b/packages/linux/linux-geodegx_2.4.24.bb
@@ -2,6 +2,8 @@
# Copyright (C) 2005, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
+COMPATIBLE_MACHINE = "geodegx"
+
KV = "2.4.24"
DESCRIPTION = "Linux kernel for the AMD Geode GX processor"
LICENSE = "GPL"
diff --git a/packages/linux/linux-geodelx_2.6.11.bb b/packages/linux/linux-geodelx_2.6.11.bb
index 890aa9483a..7605f68011 100644
--- a/packages/linux/linux-geodelx_2.6.11.bb
+++ b/packages/linux/linux-geodelx_2.6.11.bb
@@ -2,6 +2,8 @@
# Copyright (C) 2005-2006, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
+COMPATIBLE_MACHINE = "geodelx"
+
DESCRIPTION = "Linux kernel for the AMD Geode GX5535/LX5536"
HOMEPAGE = "http://www.amd.com/embedded"
LICENSE = "GPL"
diff --git a/packages/linux/linux-gta01.inc b/packages/linux/linux-gta01.inc
new file mode 100644
index 0000000000..8554d2413c
--- /dev/null
+++ b/packages/linux/linux-gta01.inc
@@ -0,0 +1,104 @@
+DESCRIPTION = "2.6 Linux Development Kernel for FIC Neo1973 (GTA01)"
+SECTION = "kernel"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+HOMEPAGE = "N/A"
+LICENSE = "GPL"
+DEPENDS += "quilt-native uboot-openmoko"
+
+inherit kernel
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-gta01"
+
+##############################################################
+# source and patches
+#
+SRC_URI = "http://ftp.de.kernel.org/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
+ file://defconfig-${VANILLA_VERSION}-${MACHINE}"
+S = "${WORKDIR}/linux-${VANILLA_VERSION}"
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = 'fic-gta01'
+
+CMDLINE_CON = "console=ttySAC0,115200n8"
+#CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
+# uncomment if you want to boot over NFS
+#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
+# uncomment to enable dyntick
+#CMDLINE_OTHER = "dyntick=enable"
+CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
+CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
+CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
+
+###############################################################
+# module configs specific to this kernel
+#
+
+# usb
+module_autoload_ohci-hcd = "ohci-hcd"
+module_autoload_hci_usb = "hci_usb"
+module_autoload_g_ether = "g_ether"
+# audio
+module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
+# sd/mmc
+module_autoload_s3cmci = "s3cmci"
+
+do_prepatch() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_configure() {
+ #install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
+
+ if [ ! -e ${WORKDIR}/defconfig-${VANILLA_VERSION}-${MACHINE} ]; then
+ die "No default configuration for ${MACHINE} available."
+ fi
+
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+
+ if [ "${TARGET_OS}" = "linux-gnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
+ -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ABS_POS=/d' \
+ '${WORKDIR}/defconfig-${VANILLA_VERSION}-${MACHINE}' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+}
+
+###############################################################
+# put into deploy directory and append u-boot header
+#
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib
+ ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
+ rm -f linux.bin.gz
+ gzip -9 linux.bin
+ ${STAGING_BINDIR_NATIVE}/uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "OpenMoko Kernel Image Neo1973(GTA01)" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}-latest.bin
+ rm -f linux.bin.gz
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask prepatch before do_patch after do_unpack
+addtask deploy before do_package after do_install
+
diff --git a/packages/linux/linux-gta01/defconfig-2.6.20-fic-gta01 b/packages/linux/linux-gta01/defconfig-2.6.20-fic-gta01
deleted file mode 100644
index e0a885fa0d..0000000000
--- a/packages/linux/linux-gta01/defconfig-2.6.20-fic-gta01
+++ /dev/null
@@ -1,1781 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Feb 15 23:04:12 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION="-moko8"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=m
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=m
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-CONFIG_ARCH_S3C2410=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# S3C24XX Implementations
-#
-# CONFIG_MACH_AML_M5900 is not set
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-# CONFIG_ARCH_BAST is not set
-# CONFIG_ARCH_H1940 is not set
-# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_SMDK2410 is not set
-CONFIG_MACH_QT2410=y
-CONFIG_MACH_GTA01=y
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_SMDK2413 is not set
-# CONFIG_MACH_VR1000 is not set
-# CONFIG_MACH_RX3715 is not set
-# CONFIG_MACH_OTOM is not set
-# CONFIG_MACH_NEXCODER_2440 is not set
-# CONFIG_MACH_VSTMS is not set
-CONFIG_S3C2410_CLOCK=y
-CONFIG_S3C2410_PM=y
-CONFIG_CPU_S3C2410_DMA=y
-CONFIG_CPU_S3C2410=y
-
-#
-# S3C2410 Boot
-#
-# CONFIG_S3C2410_BOOT_WATCHDOG is not set
-CONFIG_S3C2410_BOOT_ERROR_RESET=y
-
-#
-# S3C2410 Setup
-#
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM920T=y
-CONFIG_CPU_32v4T=y
-CONFIG_CPU_ABRT_EV4T=y
-CONFIG_CPU_CACHE_V4WT=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=200
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttySAC0,115200n8 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-# CONFIG_FPE_NWFPE is not set
-CONFIG_FPE_FASTFPE=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-CONFIG_DISABLE_CONSOLE_SUSPEND=y
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# CONFIG_NET_IPGRE_BROADCAST is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-CONFIG_TCP_MD5SIG=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NF_CONNTRACK_ENABLED=m
-CONFIG_NF_CONNTRACK_SUPPORT=y
-# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_CT_ACCT=y
-CONFIG_NF_CONNTRACK_MARK=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CT_PROTO_GRE=m
-CONFIG_NF_CT_PROTO_SCTP=m
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_NF_NAT=m
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_NF_NAT_SNMP_BASIC=m
-CONFIG_NF_NAT_PROTO_GRE=m
-CONFIG_NF_NAT_FTP=m
-CONFIG_NF_NAT_IRC=m
-CONFIG_NF_NAT_TFTP=m
-# CONFIG_NF_NAT_AMANDA is not set
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
-CONFIG_NF_NAT_SIP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-CONFIG_NF_CONNTRACK_IPV6=m
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-# CONFIG_IP6_NF_RAW is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_CLK_JIFFIES is not set
-CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
-# CONFIG_NET_SCH_CLK_CPU is not set
-
-#
-# Queueing/Scheduling
-#
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-
-#
-# Classification
-#
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_CLS_ACT is not set
-# CONFIG_NET_CLS_POLICE is not set
-# CONFIG_NET_CLS_IND is not set
-CONFIG_NET_ESTIMATOR=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_FIB_RULES=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_S3C2410=y
-CONFIG_MTD_NAND_S3C2410_BBT=y
-# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-CONFIG_MTD_NAND_S3C2410_HWECC=y
-CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_UB=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_SCAN_ASYNC=y
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-CONFIG_NET_PCI=y
-CONFIG_CS89x0=m
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=m
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_STOWAWAY=m
-CONFIG_KEYBOARD_GTA01=y
-CONFIG_KEYBOARD_QT2410=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_NR_TTY_DEVICES=4
-CONFIG_HW_CONSOLE=y
-CONFIG_VT_HW_CONSOLE_BINDING=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_S3C2410=y
-CONFIG_SERIAL_S3C2410_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_S3C2410_WATCHDOG=m
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TS0710_MUX is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-CONFIG_I2C_S3C2410=y
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-CONFIG_SENSORS_PCF50606=y
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_S3C24XX_GPIO=y
-CONFIG_SPI_S3C24XX=y
-
-#
-# SPI Protocol Masters
-#
-CONFIG_SPI_SLAVE_JBT6K74=y
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_S3C24XX=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_FIRMWARE_EDID is not set
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_S3C2410=y
-# CONFIG_FB_S3C2410_DEBUG is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-CONFIG_FONT_6x11=y
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_GTA01=y
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-CONFIG_SND_S3C24XX_SOC=y
-CONFIG_SND_S3C24XX_SOC_I2S=y
-CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-CONFIG_SND_SOC_WM8753=y
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-CONFIG_SND_SOC_WM8976=y
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_KARMA=y
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-CONFIG_USB_TRANCEVIBRATOR=m
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-CONFIG_USB_GADGET_S3C2410=y
-CONFIG_USB_S3C2410=y
-# CONFIG_USB_S3C2410_DEBUG is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_S3C=m
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-# CONFIG_RTC_HCTOSYS is not set
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_S3C=m
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAFFS_YAFFS1 is not set
-# CONFIG_YAFFS_DOES_ECC is not set
-# CONFIG_YAFFS_YAFFS2 is not set
-# CONFIG_YAFFS_AUTO_YAFFS2 is not set
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
-# CONFIG_YAFFS_SHORT_NAMES_IN_RAM is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_CIFS_WEAK_PW_HASH=y
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-CONFIG_DEBUG_S3C2410_PORT=y
-CONFIG_DEBUG_S3C2410_UART=0
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_GF128MUL=m
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=y
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-gta01/defconfig-2.6.21.3-fic-gta01 b/packages/linux/linux-gta01/defconfig-2.6.21.3-fic-gta01
new file mode 100644
index 0000000000..16b2ac1dab
--- /dev/null
+++ b/packages/linux/linux-gta01/defconfig-2.6.21.3-fic-gta01
@@ -0,0 +1,1857 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.3
+# Mon Jun 11 18:32:32 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-moko10"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+# CONFIG_S3C2410_BOOT_WATCHDOG is not set
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+CONFIG_S3C2410_PM_DEBUG=y
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_MACH_SMDK=y
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+CONFIG_MACH_QT2410=y
+CONFIG_MACH_NEO1973_GTA01=y
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+CONFIG_ARCH_S3C2440=y
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_MACH_HXD8=y
+# CONFIG_MACH_NEO1973_GTA02 is not set
+
+#
+# S3C2442 Machines
+#
+# CONFIG_SMDK2440_CPU2442 is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySAC0,115200n8 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+CONFIG_FPE_FASTFPE=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+CONFIG_DISABLE_CONSOLE_SUSPEND=y
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+CONFIG_NET_KEY=m
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FIFO=y
+# CONFIG_NET_SCH_CLK_JIFFIES is not set
+CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_FIB_RULES=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+CONFIG_MTD_NAND_S3C2410_BBT=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+CONFIG_NET_PCI=y
+CONFIG_CS89x0=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_GTA01=y
+CONFIG_KEYBOARD_QT2410=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_NR_TTY_DEVICES=4
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TS0710_MUX is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_SENSORS_PCF50606=y
+# CONFIG_SENSORS_PCF50633 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+CONFIG_SENSORS_TSL256X=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX=y
+CONFIG_SPI_S3C24XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+CONFIG_SPI_SLAVE_JBT6K74=y
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=m
+CONFIG_LEDS_GTA01=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GTA01=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+CONFIG_FB_S3C2410_DEBUG=y
+# CONFIG_FB_GLAMO is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=y
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C24XX_SOC_I2S=m
+CONFIG_SND_S3C24XX_SOC_SMDK2440=m
+CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m
+CONFIG_SND_SOC_WM8753=m
+CONFIG_SND_SOC_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+CONFIG_USB_GTCO=m
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+CONFIG_USB_SERIAL_SAFE_PADDED=y
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+CONFIG_USB_BERRY_CHARGE=m
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_HCTOSYS is not set
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_S3C=m
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01 b/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01
new file mode 100644
index 0000000000..90fc136986
--- /dev/null
+++ b/packages/linux/linux-gta01/defconfig-2.6.21.5-fic-gta01
@@ -0,0 +1,1857 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.3
+# Mon Jun 11 18:32:32 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-moko10"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+# CONFIG_S3C2410_BOOT_WATCHDOG is not set
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+CONFIG_S3C2410_PM_DEBUG=y
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_MACH_SMDK=y
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+CONFIG_MACH_QT2410=y
+CONFIG_MACH_NEO1973_GTA01=y
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+CONFIG_ARCH_S3C2440=y
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_MACH_HXD8=y
+# CONFIG_MACH_NEO1973_GTA02 is not set
+
+#
+# S3C2442 Machines
+#
+# CONFIG_SMDK2440_CPU2442 is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySAC0,115200n8 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+CONFIG_FPE_FASTFPE=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+CONFIG_DISABLE_CONSOLE_SUSPEND=y
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+CONFIG_NET_KEY=m
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FIFO=y
+# CONFIG_NET_SCH_CLK_JIFFIES is not set
+CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_FIB_RULES=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+CONFIG_MTD_NAND_S3C2410_BBT=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+CONFIG_NET_PCI=y
+CONFIG_CS89x0=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_GTA01=y
+CONFIG_KEYBOARD_QT2410=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_NR_TTY_DEVICES=4
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TS0710_MUX is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_SENSORS_PCF50606=y
+# CONFIG_SENSORS_PCF50633 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+CONFIG_SENSORS_TSL256X=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX=y
+CONFIG_SPI_S3C24XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+CONFIG_SPI_SLAVE_JBT6K74=y
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=m
+CONFIG_LEDS_GTA01=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GTA01=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+CONFIG_FB_S3C2410_DEBUG=y
+# CONFIG_FB_GLAMO is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=y
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C24XX_SOC_I2S=m
+CONFIG_SND_S3C24XX_SOC_SMDK2440=m
+CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m
+CONFIG_SND_SOC_WM8753=m
+CONFIG_SND_SOC_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+CONFIG_USB_GTCO=m
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+CONFIG_USB_SERIAL_SAFE_PADDED=y
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+CONFIG_USB_BERRY_CHARGE=m
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_HCTOSYS is not set
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_S3C=m
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-gta01/defconfig-fic-gta01 b/packages/linux/linux-gta01/defconfig-fic-gta01
deleted file mode 100644
index 40adbcd1a1..0000000000
--- a/packages/linux/linux-gta01/defconfig-fic-gta01
+++ /dev/null
@@ -1,1621 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17.14
-# Tue Feb 13 20:26:21 2007
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION="-moko7"
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=m
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=m
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-CONFIG_ARCH_S3C2410=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# S3C24XX Implementations
-#
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-# CONFIG_ARCH_BAST is not set
-# CONFIG_ARCH_H1940 is not set
-# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_SMDK2410 is not set
-CONFIG_MACH_QT2410=y
-CONFIG_MACH_GTA01=y
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_VR1000 is not set
-# CONFIG_MACH_RX3715 is not set
-# CONFIG_MACH_OTOM is not set
-# CONFIG_MACH_NEXCODER_2440 is not set
-CONFIG_CPU_S3C2410=y
-
-#
-# S3C2410 Boot
-#
-CONFIG_S3C2410_BOOT_ERROR_RESET=y
-
-#
-# S3C2410 Setup
-#
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-CONFIG_S3C2410_PM_DEBUG=y
-CONFIG_S3C2410_PM_CHECK=y
-CONFIG_S3C2410_PM_CHECK_CHUNKSIZE=64
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM920T=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4T=y
-CONFIG_CPU_CACHE_V4WT=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=200
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttySAC0,115200n8 ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-# CONFIG_FPE_NWFPE is not set
-CONFIG_FPE_FASTFPE=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-# CONFIG_NET_IPGRE_BROADCAST is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_CT_ACCT=y
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-CONFIG_IP_NF_PPTP=m
-CONFIG_IP_NF_H323=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-# CONFIG_IP_NF_TARGET_SAME is not set
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_NAT_H323=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-# CONFIG_IP6_NF_RAW is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_CLK_JIFFIES is not set
-CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
-# CONFIG_NET_SCH_CLK_CPU is not set
-
-#
-# Queueing/Scheduling
-#
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-
-#
-# Classification
-#
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-# CONFIG_CLS_U32_MARK is not set
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_CLS_ACT is not set
-# CONFIG_NET_CLS_POLICE is not set
-# CONFIG_NET_CLS_IND is not set
-CONFIG_NET_ESTIMATOR=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-CONFIG_NFTL=y
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_S3C2410=y
-CONFIG_MTD_NAND_S3C2410_BBT=y
-# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-# CONFIG_MTD_NAND_S3C2410_HWECC is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_UB=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-# CONFIG_DM_MIRROR is not set
-# CONFIG_DM_ZERO is not set
-# CONFIG_DM_MULTIPATH is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-CONFIG_NET_PCI=y
-CONFIG_CS89x0=y
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=m
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_GTA01=m
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_S3C2410=y
-CONFIG_SERIAL_S3C2410_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_S3C2410_RTC=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-# CONFIG_TS0710_MUX is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_PARPORT_LIGHT is not set
-CONFIG_I2C_S3C2410=y
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-CONFIG_SENSORS_PCF50606=y
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_S3C24XX_GPIO=y
-CONFIG_SPI_S3C24XX=y
-
-#
-# SPI Protocol Masters
-#
-CONFIG_SPI_SLAVE_JBT6K74=y
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_S3C2410=y
-# CONFIG_FB_S3C2410_DEBUG is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-CONFIG_FONT_6x11=y
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_GTA01=y
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-CONFIG_SND_S3C24XX_SOC=m
-CONFIG_SND_S3C24XX_SOC_I2S=m
-CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=m
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-CONFIG_SND_SOC_WM8753=m
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-CONFIG_SND_SOC_WM8976=m
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_LIBUSUAL=y
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ANYDATA=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-CONFIG_USB_GADGET_S3C2410=y
-CONFIG_USB_S3C2410=y
-# CONFIG_USB_S3C2410_DEBUG is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_S3C=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS_FS=m
-CONFIG_JFFS_FS_VERBOSE=0
-# CONFIG_JFFS_PROC_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_UNWIND_INFO=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-# CONFIG_DEBUG_ERRORS is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-CONFIG_DEBUG_S3C2410_PORT=y
-CONFIG_DEBUG_S3C2410_UART=0
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
diff --git a/packages/linux/linux-gta01/fix-EVIOCGRAB-semantics.patch b/packages/linux/linux-gta01/fix-EVIOCGRAB-semantics.patch
new file mode 100644
index 0000000000..3c96faa271
--- /dev/null
+++ b/packages/linux/linux-gta01/fix-EVIOCGRAB-semantics.patch
@@ -0,0 +1,97 @@
+diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
+index 12c7ab8..c7e741b 100644
+--- a/drivers/input/evdev.c
++++ b/drivers/input/evdev.c
+@@ -29,7 +29,7 @@ struct evdev {
+ char name[16];
+ struct input_handle handle;
+ wait_queue_head_t wait;
+- struct evdev_list *grab;
++ int grab;
+ struct list_head list;
+ };
+
+@@ -37,6 +37,7 @@ struct evdev_list {
+ struct input_event buffer[EVDEV_BUFFER_SIZE];
+ int head;
+ int tail;
++ int grab;
+ struct fasync_struct *fasync;
+ struct evdev *evdev;
+ struct list_head node;
+@@ -49,8 +50,7 @@ static void evdev_event(struct input_han
+ struct evdev *evdev = handle->private;
+ struct evdev_list *list;
+
+- if (evdev->grab) {
+- list = evdev->grab;
++ list_for_each_entry(list, &evdev->list, node) {
+
+ do_gettimeofday(&list->buffer[list->head].time);
+ list->buffer[list->head].type = type;
+@@ -59,17 +59,7 @@ static void evdev_event(struct input_han
+ list->head = (list->head + 1) & (EVDEV_BUFFER_SIZE - 1);
+
+ kill_fasync(&list->fasync, SIGIO, POLL_IN);
+- } else
+- list_for_each_entry(list, &evdev->list, node) {
+-
+- do_gettimeofday(&list->buffer[list->head].time);
+- list->buffer[list->head].type = type;
+- list->buffer[list->head].code = code;
+- list->buffer[list->head].value = value;
+- list->head = (list->head + 1) & (EVDEV_BUFFER_SIZE - 1);
+-
+- kill_fasync(&list->fasync, SIGIO, POLL_IN);
+- }
++ }
+
+ wake_up_interruptible(&evdev->wait);
+ }
+@@ -104,9 +94,10 @@ static int evdev_release(struct inode *
+ {
+ struct evdev_list *list = file->private_data;
+
+- if (list->evdev->grab == list) {
+- input_release_device(&list->evdev->handle);
+- list->evdev->grab = NULL;
++ if (list->grab) {
++ if(!--list->evdev->grab && list->evdev->exist)
++ input_release_device(&list->evdev->handle);
++ list->grab = 0;
+ }
+
+ evdev_fasync(-1, file, 0);
+@@ -483,17 +474,19 @@ static long evdev_ioctl_handler(struct f
+
+ case EVIOCGRAB:
+ if (p) {
+- if (evdev->grab)
+- return -EBUSY;
+- if (input_grab_device(&evdev->handle))
++ if (list->grab)
+ return -EBUSY;
+- evdev->grab = list;
++ if (!evdev->grab++)
++ if (input_grab_device(&evdev->handle))
++ return -EBUSY;
++ list->grab = 0;
+ return 0;
+ } else {
+- if (evdev->grab != list)
++ if (!list->grab)
+ return -EINVAL;
+- input_release_device(&evdev->handle);
+- evdev->grab = NULL;
++ if (!--evdev->grab)
++ input_release_device(&evdev->handle);
++ list->grab = 0;
+ return 0;
+ }
+
+-
+To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+Please read the FAQ at http://www.tux.org/lkml/
+
diff --git a/packages/linux/linux-gta01/udc-nomodule-misccr.patch b/packages/linux/linux-gta01/udc-nomodule-misccr.patch
deleted file mode 100644
index 0f84b56c2a..0000000000
--- a/packages/linux/linux-gta01/udc-nomodule-misccr.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Index: linux-2.6.17.14-fic1/drivers/usb/gadget/s3c2410_udc.c
-===================================================================
---- linux-2.6.17.14-fic1.orig/drivers/usb/gadget/s3c2410_udc.c 2006-11-03 01:22:14.000000000 +0100
-+++ linux-2.6.17.14-fic1/drivers/usb/gadget/s3c2410_udc.c 2006-11-03 12:41:52.000000000 +0100
-@@ -1492,7 +1492,7 @@
- return -ENODEV;
- if (udc->driver)
- return -EBUSY;
-- if (!driver->bind || !driver->unbind || !driver->setup
-+ if (!driver->bind || !driver->setup
- || driver->speed == USB_SPEED_UNKNOWN)
- return -EINVAL;
-
-@@ -1700,6 +1700,8 @@
- }
- dprintk(DEBUG_VERBOSE, "%s: got irq %i\n", gadget_name, IRQ_USBD);
-
-+ s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND0|S3C2410_MISCCR_USBSUSPND1, 0);
-+
- #ifdef ENABLE_SYSFS
- /* create device files */
- device_create_file(&pdev->dev, &dev_attr_regs);
diff --git a/packages/linux/linux-gta01_2.6.17.14.bb b/packages/linux/linux-gta01_2.6.17.14.bb
deleted file mode 100644
index 8f3c37753a..0000000000
--- a/packages/linux/linux-gta01_2.6.17.14.bb
+++ /dev/null
@@ -1,101 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for FIC Neo1973 (GTA01)"
-SECTION = "kernel"
-AUTHOR = "Harald Welte <laforge@openmoko.org>"
-HOMEPAGE = "N/A"
-LICENSE = "GPL"
-DEPENDS += "uboot-gta01"
-MOKOR = "moko7"
-PR = "${MOKOR}-r1"
-
-inherit kernel
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-gta01"
-#HWSRC = "http://people.gta01.openmoko.org/laforge/src/kernel/20060806"
-
-##############################################################
-# source and patches
-#
-SRC_URI = "http://ftp.de.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.14.tar.bz2 \
- svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=https \
- file://defconfig-${MACHINE}"
-S = "${WORKDIR}/linux-2.6.17.14"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_MACHINE = 'fic-gta01'
-
-CMDLINE_CON = "console=ttySAC0,115200n8"
-#CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
-# uncomment if you want to boot over NFS
-#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
-# uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
-
-###############################################################
-# module configs specific to this kernel
-#
-module_autoload_ohci-hcd = "ohci-hcd"
-module_autoload_g_ether = "g_ether"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-#module_autoload_snd-soc-corgi_c7x0 = "snd-soc-s3c24xx"
-
-do_prepatch() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_configure() {
- #install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
- if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
- die "No default configuration for ${MACHINE} available."
- fi
-
- echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
- if [ "${TARGET_OS}" == "linux-gnueabi" ]; then
- echo "CONFIG_AEABI=y" >> ${S}/.config
- echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
- else
- echo "# CONFIG_AEABI is not set" >> ${S}/.config
- echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
- fi
-
- sed -e '/CONFIG_AEABI/d' \
- -e '/CONFIG_OABI_COMPAT=/d' \
- -e '/CONFIG_CMDLINE=/d' \
- -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
- -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ABS_POS=/d' \
- '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
-
- yes '' | oe_runmake oldconfig
-}
-
-###############################################################
-# put into deploy directory and append u-boot header
-#
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib
- arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin
- rm -f linux.bin.gz
- gzip -9 linux.bin
- uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "OpenMoko Kernel Image Neo1973(GTA01)" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
- rm -f linux.bin.gz
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask prepatch before do_patch after do_unpack
-addtask deploy before do_package after do_install
-
diff --git a/packages/linux/linux-gta01_2.6.17.7.bb b/packages/linux/linux-gta01_2.6.17.7.bb
deleted file mode 100644
index cf4bfeb8ea..0000000000
--- a/packages/linux/linux-gta01_2.6.17.7.bb
+++ /dev/null
@@ -1,97 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for FIC GTA01"
-SECTION = "kernel"
-AUTHOR = "Harald Welte <hwelte@hmw-consulting.de>"
-HOMEPAGE = "N/A"
-LICENSE = "GPL"
-DEPENDS += "uboot-gta01"
-PR = "r4"
-
-inherit kernel
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-gta01"
-HWSRC = "http://people.gta01.hmw-consulting.de/laforge/src/kernel/20060806"
-
-##############################################################
-# source and patches
-#
-SRC_URI = "http://people.gta01.hmw-consulting.de/laforge/tmp/linux-2.6.17.7-gta01-lcm.tar.bz2 \
- file://defconfig-${MACHINE}"
-S = "${WORKDIR}/linux-2.6.17.7-new"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_MACHINE = 'fic-gta01'
-
-CMDLINE_CON = "console=ttySAC0,115200n8"
-#CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
-# uncomment if you want to boot over NFS
-#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
-# uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
-
-###############################################################
-# module configs specific to this kernel
-#
-#module_autoload_pxaficp_ir = "pxaficp_ir"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-
-do_prepatch() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_configure() {
- #install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
- if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
- die "No default configuration for ${MACHINE} available."
- fi
-
- echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
- if [ "${TARGET_OS}" == "linux-gnueabi" ]; then
- echo "CONFIG_AEABI=y" >> ${S}/.config
- echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
- else
- echo "# CONFIG_AEABI is not set" >> ${S}/.config
- echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
- fi
-
- sed -e '/CONFIG_AEABI/d' \
- -e '/CONFIG_OABI_COMPAT=/d' \
- -e '/CONFIG_CMDLINE=/d' \
- -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
- -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ABS_POS=/d' \
- '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
-
- yes '' | oe_runmake oldconfig
-}
-
-###############################################################
-# put into deploy directory and append u-boot header
-#
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${MACHINE}.tgz -C ${D} lib
- arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin
- rm -f linux.bin.gz
- gzip -9 linux.bin
- uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "Kernel Image QT2410" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
- rm -f linux.bin.gz
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask prepatch before do_patch after do_unpack
-addtask deploy before do_package after do_install
-
diff --git a/packages/linux/linux-gta01_2.6.20.bb b/packages/linux/linux-gta01_2.6.20.bb
deleted file mode 100644
index 406369d81f..0000000000
--- a/packages/linux/linux-gta01_2.6.20.bb
+++ /dev/null
@@ -1,102 +0,0 @@
-DESCRIPTION = "2.6 Linux Development Kernel for FIC Neo1973 (GTA01)"
-SECTION = "kernel"
-AUTHOR = "Harald Welte <laforge@openmoko.org>"
-HOMEPAGE = "N/A"
-LICENSE = "GPL"
-DEPENDS += "uboot-gta01"
-MOKOR = "moko8"
-PR = "${MOKOR}-r1"
-
-VANILLA_VERSION = "2.6.20"
-
-inherit kernel
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-gta01"
-
-##############################################################
-# source and patches
-#
-SRC_URI = "http://ftp.de.kernel.org/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
- svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=http \
- file://defconfig-${VANILLA_VERSION}-${MACHINE}"
-S = "${WORKDIR}/linux-${VANILLA_VERSION}"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_MACHINE = 'fic-gta01'
-
-CMDLINE_CON = "console=ttySAC0,115200n8"
-#CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
-# uncomment if you want to boot over NFS
-#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
-# uncomment to enable dyntick
-#CMDLINE_OTHER = "dyntick=enable"
-CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
-CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
-CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
-
-###############################################################
-# module configs specific to this kernel
-#
-module_autoload_ohci-hcd = "ohci-hcd"
-module_autoload_g_ether = "g_ether"
-#module_autoload_snd-pcm-oss = "snd-pcm-oss"
-#module_autoload_snd-soc-corgi_c7x0 = "snd-soc-s3c24xx"
-
-do_prepatch() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_configure() {
- #install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
-
- if [ ! -e ${WORKDIR}/defconfig-${VANILLA_VERSION}-${MACHINE} ]; then
- die "No default configuration for ${MACHINE} available."
- fi
-
- echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-
- if [ "${TARGET_OS}" == "linux-gnueabi" ]; then
- echo "CONFIG_AEABI=y" >> ${S}/.config
- echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
- else
- echo "# CONFIG_AEABI is not set" >> ${S}/.config
- echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
- fi
-
- sed -e '/CONFIG_AEABI/d' \
- -e '/CONFIG_OABI_COMPAT=/d' \
- -e '/CONFIG_CMDLINE=/d' \
- -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
- -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
- -e '/CONFIG_MTDRAM_ABS_POS=/d' \
- '${WORKDIR}/defconfig-${VANILLA_VERSION}-${MACHINE}' >>'${S}/.config'
-
- yes '' | oe_runmake oldconfig
-}
-
-###############################################################
-# put into deploy directory and append u-boot header
-#
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib
- ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
- rm -f linux.bin.gz
- gzip -9 linux.bin
- uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "OpenMoko Kernel Image Neo1973(GTA01)" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
- rm -f linux.bin.gz
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask prepatch before do_patch after do_unpack
-addtask deploy before do_package after do_install
-
diff --git a/packages/linux/linux-gta01_2.6.21.3.bb b/packages/linux/linux-gta01_2.6.21.3.bb
new file mode 100644
index 0000000000..18af85973a
--- /dev/null
+++ b/packages/linux/linux-gta01_2.6.21.3.bb
@@ -0,0 +1,10 @@
+require linux-gta01.inc
+
+SRC_URI += "svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=http"
+SRC_URI += "file://fix-EVIOCGRAB-semantics.patch;patch=1"
+
+MOKOR = "moko10"
+PR = "${MOKOR}-r4"
+
+VANILLA_VERSION = "2.6.21.3"
+
diff --git a/packages/linux/linux-gta01_2.6.21.5.bb b/packages/linux/linux-gta01_2.6.21.5.bb
new file mode 100644
index 0000000000..9463138cf0
--- /dev/null
+++ b/packages/linux/linux-gta01_2.6.21.5.bb
@@ -0,0 +1,10 @@
+require linux-gta01.inc
+
+SRC_URI += "svn://svn.openmoko.org/trunk/src/target/kernel;module=patches;proto=http"
+SRC_URI += "file://fix-EVIOCGRAB-semantics.patch;patch=1"
+
+MOKOR = "moko10"
+PR = "r2"
+
+VANILLA_VERSION = "2.6.21.5"
+
diff --git a/packages/linux/linux-h1940_2.6.11-bk1-h1940.bb b/packages/linux/linux-h1940_2.6.11-bk1-h1940.bb
index 242567634c..7624f32a8a 100644
--- a/packages/linux/linux-h1940_2.6.11-bk1-h1940.bb
+++ b/packages/linux/linux-h1940_2.6.11-bk1-h1940.bb
@@ -3,6 +3,7 @@ SECTION = "kernel"
LICENSE = "GPL"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "h1940"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.11.tar.bz2 \
${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/snapshots/old/patch-2.6.11-bk1.gz;patch=1 \
diff --git a/packages/linux/linux-h1940_2.6.14-h1940.bb b/packages/linux/linux-h1940_2.6.14-h1940.bb
index 750750f5d1..5a657eb0b5 100644
--- a/packages/linux/linux-h1940_2.6.14-h1940.bb
+++ b/packages/linux/linux-h1940_2.6.14-h1940.bb
@@ -3,6 +3,7 @@ SECTION = "kernel"
LICENSE = "GPL"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "h1940"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 \
http://rtpnet.nerim.net/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch;patch=1 \
diff --git a/packages/linux/linux-h1940_2.6.17-h1940.bb b/packages/linux/linux-h1940_2.6.17-h1940.bb
index 5fbe040810..f7ad0185f3 100644
--- a/packages/linux/linux-h1940_2.6.17-h1940.bb
+++ b/packages/linux/linux-h1940_2.6.17-h1940.bb
@@ -5,6 +5,7 @@ LICENSE = "GPL"
PR = "r1"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "h1940"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
http://rtpnet.nerim.net/ipaq/patches/2.6.17-1/v2.6.17-gitcurrent.patch;patch=1 \
diff --git a/packages/linux/linux-h6300-omap1_2.6.12-rc5.bb b/packages/linux/linux-h6300-omap1_2.6.12-rc5.bb
index 299d813964..58e85781a3 100644
--- a/packages/linux/linux-h6300-omap1_2.6.12-rc5.bb
+++ b/packages/linux/linux-h6300-omap1_2.6.12-rc5.bb
@@ -11,6 +11,8 @@ S = "${WORKDIR}/linux-2.6.12-rc5"
inherit kernel
+COMPATIBLE_MACHINE = "h6300"
+
do_configure_prepend() {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config
oe_runmake oldconfig
diff --git a/packages/linux/linux-h6300-omap1_2.6.14.3.bb b/packages/linux/linux-h6300-omap1_2.6.14.3.bb
index ea5aeeea1a..7726bad494 100644
--- a/packages/linux/linux-h6300-omap1_2.6.14.3.bb
+++ b/packages/linux/linux-h6300-omap1_2.6.14.3.bb
@@ -11,6 +11,8 @@ S = "${WORKDIR}/linux-2.6.14"
inherit kernel
+COMPATIBLE_MACHINE = "h6300"
+
do_configure_prepend() {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config
oe_runmake oldconfig
diff --git a/packages/linux/linux-h6300-omap1_2.6.16.16.bb b/packages/linux/linux-h6300-omap1_2.6.16.16.bb
index d1d82adde9..8b5f627846 100644
--- a/packages/linux/linux-h6300-omap1_2.6.16.16.bb
+++ b/packages/linux/linux-h6300-omap1_2.6.16.16.bb
@@ -12,6 +12,8 @@ S = "${WORKDIR}/linux-2.6.16"
inherit kernel
+COMPATIBLE_MACHINE = "h6300"
+
do_configure_prepend() {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config
oe_runmake oldconfig
diff --git a/packages/linux/linux-hackndev-2.6/palmld/defconfig b/packages/linux/linux-hackndev-2.6/palmld/defconfig
index e09cfed091..26d10ae1c8 100644
--- a/packages/linux/linux-hackndev-2.6/palmld/defconfig
+++ b/packages/linux/linux-hackndev-2.6/palmld/defconfig
@@ -1,15 +1,27 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-hnd0
-# Sun Oct 1 12:34:11 2006
+# Linux kernel version: 2.6.21-hnd2
+# Tue Jul 3 14:32:58 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -25,17 +37,22 @@ CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
-# CONFIG_MINIMAL_OOPS is not set
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
+# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
@@ -46,9 +63,9 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -66,7 +83,10 @@ CONFIG_MODULE_FORCE_UNLOAD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -84,18 +104,29 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -103,12 +134,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# Intel PXA2xx Implementations
@@ -117,12 +144,14 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
# CONFIG_ARCH_ESERIES is not set
# CONFIG_MACH_A620 is not set
# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
# CONFIG_ARCH_H1900 is not set
# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H3900 is not set
# CONFIG_MACH_H4000 is not set
# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_HX2750 is not set
@@ -134,26 +163,36 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
CONFIG_MACH_XSCALE_PALMLD=y
CONFIG_PALMLD_PCMCIA=m
# CONFIG_PALMLD_USB is not set
CONFIG_PALMLD_IDE=m
+CONFIG_PALMLD_BATTERY=m
+CONFIG_PALMLD_PM=y
+# CONFIG_MACH_XSCALE_PALMTREO650 is not set
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
# CONFIG_MACH_TUNGE2 is not set
# CONFIG_MACH_T3XSCALE is not set
# CONFIG_MACH_XSCALE_PALMTT5 is not set
# CONFIG_MACH_XSCALE_PALMTX is not set
# CONFIG_MACH_PALMZ72 is not set
# CONFIG_MACH_OMAP_PALMTC is not set
+# CONFIG_MACH_ZIRE31 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-CONFIG_PXA_RTC_EPOCH=1904
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
#
# Linux As Bootloader
@@ -169,27 +208,18 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
# CONFIG_ARMBOOT_PROC is not set
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_HAMCOP is not set
#
# Bus support
@@ -215,7 +245,6 @@ CONFIG_PCMCIA_PXA2XX=m
# CONFIG_PREEMPT is not set
# CONFIG_NO_IDLE_HZ is not set
CONFIG_HZ=100
-# CONFIG_AEABI is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -225,6 +254,8 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -234,6 +265,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
@@ -257,15 +290,16 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-CONFIG_APM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -281,7 +315,10 @@ CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -296,13 +333,19 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
#
@@ -328,7 +371,6 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -347,8 +389,8 @@ CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
+CONFIG_IRLAN=y
+CONFIG_IRNET=y
CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
@@ -357,7 +399,7 @@ CONFIG_IRDA_ULTRA=y
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not set
# CONFIG_IRDA_FAST_RR is not set
-CONFIG_IRDA_DEBUG=y
+# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
@@ -366,12 +408,11 @@ CONFIG_IRDA_DEBUG=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=y
+# CONFIG_IRTTY_SIR is not set
#
# Dongle support
#
-# CONFIG_DONGLE is not set
#
# Old SIR device drivers
@@ -385,15 +426,30 @@ CONFIG_IRTTY_SIR=y
#
# FIR device drivers
#
-# CONFIG_PXA_FICP is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+CONFIG_BT_BCM2035UART=m
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
#
# Device Drivers
@@ -405,6 +461,7 @@ CONFIG_WIRELESS_EXT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -414,7 +471,86 @@ CONFIG_FW_LOADER=y
#
# Memory Technology Devices (MTD)
#
-# CONFIG_MTD is not set
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_CFI_UTIL=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
#
# Parallel port support
@@ -424,6 +560,7 @@ CONFIG_FW_LOADER=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -435,7 +572,7 @@ CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -463,7 +600,6 @@ CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDE_GENERIC=y
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
# CONFIG_BLK_DEV_HD is not set
#
@@ -471,6 +607,12 @@ CONFIG_IDE_GENERIC=y
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
#
# Multi-device support (RAID and LVM)
@@ -523,38 +665,11 @@ CONFIG_NETDEVICES=y
#
# Wireless LAN (non-hamradio)
#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-CONFIG_HOSTAP_CS=m
-# CONFIG_ACX is not set
-CONFIG_NET_WIRELESS=y
+# CONFIG_NET_RADIO is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_LIBERTAS_CF8305 is not set
+# CONFIG_LIBERTAS_CF8381 is not set
+# CONFIG_LIBERTAS_CF8385 is not set
#
# PCMCIA network device support
@@ -565,16 +680,17 @@ CONFIG_NET_WIRELESS=y
# Wan interfaces
#
# CONFIG_WAN is not set
-CONFIG_PPP=m
+CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
# CONFIG_PPP_BSDCOMP is not set
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=y
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -589,6 +705,7 @@ CONFIG_PPP_DEFLATE=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
@@ -603,6 +720,7 @@ CONFIG_INPUT_TSDEV_SCREEN_X=320
CONFIG_INPUT_TSDEV_SCREEN_Y=480
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -614,8 +732,10 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_PALMIR=y
-CONFIG_KEYBOARD_PXA27X=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
@@ -623,12 +743,16 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_PALMTC is not set
CONFIG_TOUCHSCREEN_WM97XX=m
# CONFIG_TOUCHSCREEN_WM9705 is not set
CONFIG_TOUCHSCREEN_WM9712=y
# CONFIG_TOUCHSCREEN_WM9713 is not set
-CONFIG_TOUCHSCREEN_WM97XX_PXA=y
-CONFIG_TOUCHSCREEN_WM97XX_ACC=y
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
# CONFIG_INPUT_MISC is not set
#
@@ -645,12 +769,17 @@ CONFIG_SERIO_SERPORT=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
-# CONFIG_SERIAL_8250 is not set
+CONFIG_SERIAL_8250=m
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
@@ -658,28 +787,15 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-
-#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set
@@ -688,14 +804,11 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
#
# PCMCIA character devices
@@ -709,7 +822,11 @@ CONFIG_SA1100_RTC=y
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
#
# SPI support
@@ -727,45 +844,70 @@ CONFIG_SA1100_RTC=y
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
#
-# SoC drivers
+# L3 serial bus support
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
+# CONFIG_L3 is not set
#
# Misc devices
#
-CONFIG_BATTERY_MONITOR=y
+# CONFIG_BATTCHARGE_MONITOR is not set
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+# CONFIG_ADC is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
#
# LED drivers
#
+CONFIG_LEDS_PALMLD=m
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HWTIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_MMC_CARD=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_SHARED is not set
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
#
# Digital Video Broadcasting Devices
@@ -775,19 +917,33 @@ CONFIG_VIDEO_V4L2=y
#
# Graphics support
#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
#
# Console display driver support
@@ -796,21 +952,22 @@ CONFIG_FB_PXA=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
#
# Logo configuration
#
# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_PXAPWM=m
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
#
# Sound
@@ -840,7 +997,6 @@ CONFIG_SND_VERBOSE_PROCFS=y
# Generic devices
#
CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -861,9 +1017,21 @@ CONFIG_SND_PXA2XX_AC97=m
# CONFIG_SND_PDAUDIOCF is not set
#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -880,7 +1048,29 @@ CONFIG_USB_ARCH_HAS_OHCI=y
#
# USB Gadget Support
#
-# CONFIG_USB_GADGET is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+CONFIG_USB_GADGET_SX2=y
+CONFIG_USB_SX2=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
#
# MMC/SD Card support
@@ -891,14 +1081,35 @@ CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
-# CONFIG_MMC_ASIC3 is not set
-# CONFIG_MMC_WBSD_PALMT3 is not set
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_EPOCH=1904
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -907,14 +1118,17 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
CONFIG_MINIX_FS=y
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -941,8 +1155,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -952,13 +1168,16 @@ CONFIG_RAMFS=y
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
+# CONFIG_AUFS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_SQUASHFS is not set
+# CONFIG_SQUASHFS_LZMA is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1037,6 +1256,11 @@ CONFIG_NLS_KOI8_U=y
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1045,14 +1269,16 @@ CONFIG_NLS_UTF8=y
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
# CONFIG_SMALLOOPS is not set
# CONFIG_DEBUG_KERNEL is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_DEBUG_USER is not set
#
@@ -1065,7 +1291,11 @@ CONFIG_FRAME_POINTER=y
# Cryptographic options
#
CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
@@ -1074,7 +1304,13 @@ CONFIG_CRYPTO=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1088,6 +1324,7 @@ CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1097,9 +1334,13 @@ CONFIG_CRYPTO_ARC4=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-hackndev-2.6/palmt650/.mtn2git_empty b/packages/linux/linux-hackndev-2.6/palmt650/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmt650/.mtn2git_empty
diff --git a/packages/linux/linux-hackndev-2.6/palmt650/defconfig b/packages/linux/linux-hackndev-2.6/palmt650/defconfig
new file mode 100644
index 0000000000..a013bee63e
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmt650/defconfig
@@ -0,0 +1,1295 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hnd2
+# Thu Jul 19 11:45:05 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+CONFIG_MACH_XSCALE_PALMTREO650=y
+CONFIG_MACH_XSCALE_PALMTREO650_PM=y
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
+# CONFIG_MACH_TUNGE2 is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_XSCALE_PALMTT5 is not set
+# CONFIG_MACH_XSCALE_PALMTX is not set
+# CONFIG_MACH_PALMZ72 is not set
+# CONFIG_MACH_OMAP_PALMTC is not set
+# CONFIG_MACH_ZIRE31 is not set
+# CONFIG_GPIOED is not set
+# CONFIG_GPIOEDNG is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+# CONFIG_ARMBOOT_PROC is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_BCM2035UART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_PALMTC is not set
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+# CONFIG_BATTCHARGE_MONITOR is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_PALMT650=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_MMC_CARD is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2xx_I2SOUND is not set
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_SX2 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_EPOCH=1970
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_AUFS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_SQUASHFS_LZMA is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UNION_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_SMALLOOPS is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-hackndev-2.6/palmtc/.mtn2git_empty b/packages/linux/linux-hackndev-2.6/palmtc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtc/.mtn2git_empty
diff --git a/packages/linux/linux-hackndev-2.6/palmtc/defconfig b/packages/linux/linux-hackndev-2.6/palmtc/defconfig
new file mode 100644
index 0000000000..fac96dfd88
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtc/defconfig
@@ -0,0 +1,1208 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hnd0
+# Mon Apr 23 22:34:55 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_INITRAMFS_SOURCE is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_XSCALE_PALMTREO650 is not set
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
+# CONFIG_MACH_TUNGE2 is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_XSCALE_PALMTT5 is not set
+# CONFIG_MACH_XSCALE_PALMTX is not set
+# CONFIG_MACH_PALMZ72 is not set
+CONFIG_MACH_OMAP_PALMTC=y
+CONFIG_PALMTC_KEYBOARD=m
+# CONFIG_PALMTC_UCB1400 is not set
+CONFIG_PALMTC_PCMCIA=m
+# CONFIG_MACH_ZIRE31 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
+# CONFIG_ARMBOOT_PROC is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=m
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=m
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_LIBERTAS is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ACX is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIO_KEYS is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PALMTC=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=m
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+# CONFIG_BATTCHARGE_MONITOR is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HWTIMER=m
+CONFIG_LEDS_TRIGGER_MMC_CARD=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_SHARED is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2xx_I2SOUND is not set
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=m
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_SX2 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+CONFIG_RTC_EPOCH=1970
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=m
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_SQUASHFS_LZMA is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UNION_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_SMALLOOPS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-hackndev-2.6/palmtt3/.mtn2git_empty b/packages/linux/linux-hackndev-2.6/palmtt3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtt3/.mtn2git_empty
diff --git a/packages/linux/linux-hackndev-2.6/palmtt3/defconfig b/packages/linux/linux-hackndev-2.6/palmtt3/defconfig
new file mode 100644
index 0000000000..49b571a047
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtt3/defconfig
@@ -0,0 +1,1383 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hnd0
+# Mon Mar 5 03:36:29 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_XSCALE_PALMTREO650 is not set
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
+# CONFIG_MACH_TUNGE2 is not set
+CONFIG_MACH_T3XSCALE=y
+CONFIG_PALM_T3_BUTTONS=y
+CONFIG_PALM_T3_BATTERY=m
+# CONFIG_PALM_T3_GPIOED is not set
+# CONFIG_PALM_T3_GPIOEDNG is not set
+# CONFIG_MACH_XSCALE_PALMTT5 is not set
+# CONFIG_MACH_XSCALE_PALMTX is not set
+# CONFIG_MACH_PALMZ72 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_MACH_OMAP_PALMTC is not set
+# CONFIG_MACH_ZIRE31 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_RTC_EPOCH=1904
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+# CONFIG_ARMBOOT_PROC is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M root=/dev/ram0 init=/linuxrc initrd=0xA0400000,900332 max_loop=255"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=m
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIVHCI=m
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=m
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=m
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PALMT3 is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=3072
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+CONFIG_NETPOLL_RX=y
+CONFIG_NETPOLL_TRAP=y
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_STOWAWAY=y
+CONFIG_GPIO_KEYS=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_TSC2101=m
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_RAW=y
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+CONFIG_I2C_ALGOPXA=y
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_I2C_ADCM2650 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+CONFIG_TPS65010=m
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=m
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=m
+CONFIG_ADC_BATTERY=m
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+CONFIG_SOC_TSC2101=m
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTCHARGE_MONITOR=m
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2xx_I2SOUND=m
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_WBSD_PALMT3=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=m
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+CONFIG_EXT2_FS_XIP=y
+CONFIG_FS_XIP=y
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=852
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-2"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=m
+CONFIG_SQUASHFS_EMBEDDED=y
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=4
+CONFIG_SQUASHFS_VMALLOC=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_UNION_FS=m
+# CONFIG_UNION_FS_XATTR is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-2"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+CONFIG_NLS_CODEPAGE_866=m
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=y
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+CONFIG_NLS_KOI8_R=m
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_SMALLOOPS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-hackndev-2.6/palmtt5/.mtn2git_empty b/packages/linux/linux-hackndev-2.6/palmtt5/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtt5/.mtn2git_empty
diff --git a/packages/linux/linux-hackndev-2.6/palmtt5/defconfig b/packages/linux/linux-hackndev-2.6/palmtt5/defconfig
new file mode 100644
index 0000000000..4e9db0a136
--- /dev/null
+++ b/packages/linux/linux-hackndev-2.6/palmtt5/defconfig
@@ -0,0 +1,1314 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hnd2
+# Thu Jul 12 20:16:06 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_INITRAMFS_SOURCE is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_XSCALE_PALMTREO650 is not set
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
+# CONFIG_MACH_TUNGE2 is not set
+# CONFIG_MACH_T3XSCALE is not set
+CONFIG_MACH_XSCALE_PALMTT5=y
+# CONFIG_PALMT5_DEBUG is not set
+CONFIG_PALMT5_BATTERY=m
+CONFIG_PALMT5_PM=y
+# CONFIG_MACH_XSCALE_PALMTX is not set
+# CONFIG_MACH_PALMZ72 is not set
+# CONFIG_MACH_OMAP_PALMTC is not set
+# CONFIG_MACH_ZIRE31 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+# CONFIG_ARMBOOT_PROC is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+CONFIG_IRNET=y
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+CONFIG_BT_BCM2035UART=m
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_CFI_UTIL=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+# CONFIG_LIBERTAS is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=480
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_PALMTC is not set
+CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=m
+CONFIG_APM_POWER=m
+# CONFIG_BATTERY_DS2760 is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+# CONFIG_BATTCHARGE_MONITOR is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_ADC is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2xx_I2SOUND is not set
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_SX2 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_EPOCH=1904
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_AUFS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_SQUASHFS_LZMA is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UNION_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_SMALLOOPS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-hackndev-2.6/palmtx/defconfig b/packages/linux/linux-hackndev-2.6/palmtx/defconfig
index 536133f6aa..432e70379f 100644
--- a/packages/linux/linux-hackndev-2.6/palmtx/defconfig
+++ b/packages/linux/linux-hackndev-2.6/palmtx/defconfig
@@ -1,53 +1,74 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-hnd0
-# Thu Dec 14 14:24:35 2006
+# Linux kernel version: 2.6.21-hnd3
+# Wed Aug 8 12:55:12 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
-# CONFIG_MINIMAL_OOPS is not set
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
-CONFIG_UID16=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
-CONFIG_ELF_CORE=y
+# CONFIG_ELF_CORE is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -60,19 +81,22 @@ CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
+CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_DEADLINE is not set
CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
@@ -83,18 +107,29 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -102,12 +137,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# Intel PXA2xx Implementations
@@ -116,12 +147,14 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
# CONFIG_ARCH_ESERIES is not set
# CONFIG_MACH_A620 is not set
# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
# CONFIG_ARCH_H1900 is not set
# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H3900 is not set
# CONFIG_MACH_H4000 is not set
# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_HX2750 is not set
@@ -133,27 +166,35 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_XSCALE_PALMTREO650 is not set
+# CONFIG_MACH_XSCALE_TREO680 is not set
+# CONFIG_MACH_T700WX is not set
# CONFIG_MACH_TUNGE2 is not set
# CONFIG_MACH_T3XSCALE is not set
# CONFIG_MACH_XSCALE_PALMTT5 is not set
CONFIG_MACH_XSCALE_PALMTX=y
-CONFIG_PALMTX_AC97=m
-CONFIG_PALMTX_LCD=m
-# CONFIG_PALMTX_PCMCIA is not set
# CONFIG_PALMTX_DEBUG is not set
+CONFIG_PALMTX_BATTERY=m
+CONFIG_PALMTX_PM=y
# CONFIG_MACH_PALMZ72 is not set
# CONFIG_MACH_OMAP_PALMTC is not set
+# CONFIG_MACH_ZIRE31 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-CONFIG_PXA_RTC_EPOCH=1970
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
#
# Linux As Bootloader
@@ -169,27 +210,18 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
# CONFIG_ARMBOOT_PROC is not set
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_HAMCOP is not set
#
# Bus support
@@ -203,9 +235,11 @@ CONFIG_XSCALE_PMU=y
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
-CONFIG_NO_IDLE_HZ=y
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -215,6 +249,8 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -224,6 +260,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="mem=32M"
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
@@ -247,13 +285,16 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
#
-# CONFIG_PM is not set
-# CONFIG_APM is not set
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -264,12 +305,14 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
-CONFIG_NET_KEY=y
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -284,13 +327,19 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
#
@@ -316,7 +365,6 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -330,22 +378,22 @@ CONFIG_TCP_CONG_BIC=y
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
+# CONFIG_IRDA_ULTRA is not set
#
# IrDA options
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not set
# CONFIG_IRDA_FAST_RR is not set
-CONFIG_IRDA_DEBUG=y
+# CONFIG_IRDA_DEBUG is not set
#
# Infrared-port device drivers
@@ -354,29 +402,44 @@ CONFIG_IRDA_DEBUG=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+# CONFIG_IRTTY_SIR is not set
#
# Dongle support
#
-# CONFIG_DONGLE is not set
#
# Old SIR device drivers
#
-CONFIG_IRPORT_SIR=m
+# CONFIG_IRPORT_SIR is not set
#
# Old Serial dongle support
#
-# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
-CONFIG_PXA_FICP=m
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+# CONFIG_BT_HCIUART_H4 is not set
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_BCM2035UART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -387,7 +450,8 @@ CONFIG_PXA_FICP=m
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -407,6 +471,7 @@ CONFIG_FW_LOADER=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -414,11 +479,11 @@ CONFIG_FW_LOADER=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_NBD is not set
CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -432,6 +497,12 @@ CONFIG_BLK_DEV_INITRD=y
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
#
# Multi-device support (RAID and LVM)
@@ -463,11 +534,16 @@ CONFIG_NETDEVICES=y
#
# PHY device support
#
+# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
-# CONFIG_NET_ETHERNET is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
# Ethernet (1000 Mbit)
@@ -490,7 +566,7 @@ CONFIG_NETDEVICES=y
# Wan interfaces
#
# CONFIG_WAN is not set
-CONFIG_PPP=m
+CONFIG_PPP=y
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
# CONFIG_PPP_ASYNC is not set
@@ -500,6 +576,7 @@ CONFIG_PPP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=y
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -514,18 +591,19 @@ CONFIG_PPP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=m
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=480
+CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -537,8 +615,10 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_PXA27x=m
-CONFIG_KEYBOARD_PALMIR=m
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
@@ -547,20 +627,24 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=m
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_PALMTC is not set
+CONFIG_TOUCHSCREEN_WM97XX=y
# CONFIG_TOUCHSCREEN_WM9705 is not set
CONFIG_TOUCHSCREEN_WM9712=y
# CONFIG_TOUCHSCREEN_WM9713 is not set
-CONFIG_TOUCHSCREEN_WM97XX_PXA=y
-CONFIG_TOUCHSCREEN_WM97XX_ACC=y
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
+# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
-CONFIG_SERIO=m
-CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
@@ -570,6 +654,7 @@ CONFIG_SERIO_SERPORT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -583,64 +668,15 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-CONFIG_I2C_ALGOPXA=y
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELV is not set
-CONFIG_I2C_PXA=y
-CONFIG_I2C_PXA_SLAVE=y
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_I2C_ADCM2650 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-
-#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set
@@ -649,21 +685,22 @@ CONFIG_I2C_PXA_SLAVE=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-CONFIG_NVRAM=m
-CONFIG_SA1100_RTC=m
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
#
# SPI support
@@ -680,6 +717,7 @@ CONFIG_SPI_PXA2XX=y
#
# SPI Protocol Masters
#
+# CONFIG_SPI_AT25 is not set
#
# Dallas's 1-wire bus
@@ -689,67 +727,61 @@ CONFIG_SPI_PXA2XX=y
#
# Hardware Monitoring support
#
-CONFIG_HWMON=m
+# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# SoC drivers
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
#
# Misc devices
#
-CONFIG_BATTERY_MONITOR=m
+# CONFIG_BATTCHARGE_MONITOR is not set
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+# CONFIG_ADC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
#
# LED drivers
@@ -758,14 +790,39 @@ CONFIG_BATTERY_MONITOR=m
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+CONFIG_LEDS_TRIGGER_MMC_CARD=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_SHARED is not set
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+CONFIG_VIDEO_ADV_DEBUG=y
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_PXACI is not set
+
+#
+# Radio Adapters
+#
+
+#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
@@ -773,19 +830,33 @@ CONFIG_VIDEO_V4L2=y
#
# Graphics support
#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
#
# Console display driver support
@@ -794,43 +865,42 @@ CONFIG_FB_PXA=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
+CONFIG_FONTS=y
CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
#
# Logo configuration
#
CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_PXAPWM=m
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
# CONFIG_SND_SUPPORT_OLD_API is not set
# CONFIG_SND_VERBOSE_PROCFS is not set
@@ -840,10 +910,8 @@ CONFIG_SND_SEQUENCER_OSS=y
#
# Generic devices
#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
+CONFIG_SND_AC97_CODEC=y
# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
@@ -851,22 +919,26 @@ CONFIG_SND_AC97_BUS=m
#
# ALSA ARM devices
#
-# CONFIG_SND_A716 is not set
-# CONFIG_SND_H1910 is not set
-# CONFIG_SND_H2200 is not set
-# CONFIG_SND_H4000 is not set
-# CONFIG_SND_HTCMAGICIAN is not set
-# CONFIG_SND_HX4700 is not set
-# CONFIG_SND_HTCUNIVERSAL is not set
-# CONFIG_SND_H5XXX_AK4535 is not set
-CONFIG_SND_PXA2xx_I2SOUND=m
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
+# CONFIG_SND_PXA2xx_I2SOUND is not set
+CONFIG_SND_PXA2XX_PCM=y
+CONFIG_SND_PXA2XX_AC97=y
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -883,17 +955,19 @@ CONFIG_USB_ARCH_HAS_OHCI=y
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=m
+CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
+CONFIG_USB_PXA27X=y
# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_SX2 is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
@@ -901,11 +975,12 @@ CONFIG_USB_PXA27X=m
# CONFIG_USB_ZERO is not set
CONFIG_USB_ETH=m
# CONFIG_USB_ETH_RNDIS is not set
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_G_CHAR=m
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
@@ -916,14 +991,13 @@ CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
-# CONFIG_MMC_ASIC3 is not set
-# CONFIG_MMC_WBSD_PALMT3 is not set
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=m
+CONFIG_RTC_EPOCH=1970
#
# RTC interfaces
@@ -931,17 +1005,20 @@ CONFIG_RTC_CLASS=m
CONFIG_RTC_INTF_SYSFS=m
CONFIG_RTC_INTF_PROC=m
CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=m
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -950,18 +1027,20 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
-CONFIG_MINIX_FS=m
+# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
+# CONFIG_INOTIFY is not set
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
@@ -984,8 +1063,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -994,23 +1075,25 @@ CONFIG_RAMFS=y
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
-CONFIG_AFFS_FS=m
+# CONFIG_AFFS_FS is not set
+# CONFIG_AUFS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-CONFIG_SQUASHFS_VMALLOC=y
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_SQUASHFS_LZMA is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
-CONFIG_UNION_FS=m
+# CONFIG_UNION_FS is not set
#
# Network File Systems
@@ -1025,8 +1108,7 @@ CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1057,7 +1139,7 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
+CONFIG_NLS_CODEPAGE_866=y
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
@@ -1069,7 +1151,7 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
+CONFIG_NLS_ISO8859_2=y
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
@@ -1079,11 +1161,16 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
+CONFIG_NLS_KOI8_R=y
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1092,14 +1179,16 @@ CONFIG_NLS_UTF8=y
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
# CONFIG_SMALLOOPS is not set
# CONFIG_DEBUG_KERNEL is not set
CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_DEBUG_USER is not set
#
@@ -1111,7 +1200,42 @@ CONFIG_FRAME_POINTER=y
#
# Cryptographic options
#
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
@@ -1120,8 +1244,12 @@ CONFIG_FRAME_POINTER=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
-CONFIG_CRC16=m
+# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-hackndev-2.6/palmz72/defconfig b/packages/linux/linux-hackndev-2.6/palmz72/defconfig
index c31d272ac6..f8490491c4 100644
--- a/packages/linux/linux-hackndev-2.6/palmz72/defconfig
+++ b/packages/linux/linux-hackndev-2.6/palmz72/defconfig
@@ -1,15 +1,27 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-hnd0
-# Sat Feb 3 23:56:17 2007
+# Linux kernel version: 2.6.21-hnd2
+# Mon Jul 23 21:44:35 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -26,18 +38,24 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
-# CONFIG_MINIMAL_OOPS is not set
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
@@ -48,9 +66,9 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-# CONFIG_CORE_DUMP is not set
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -68,7 +86,10 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -86,18 +107,29 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -105,12 +137,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# Intel PXA2xx Implementations
@@ -119,12 +147,14 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
# CONFIG_ARCH_ESERIES is not set
# CONFIG_MACH_A620 is not set
# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
# CONFIG_ARCH_H1900 is not set
# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H3900 is not set
# CONFIG_MACH_H4000 is not set
# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_HX2750 is not set
@@ -136,8 +166,11 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
@@ -149,18 +182,17 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_XSCALE_PALMTT5 is not set
# CONFIG_MACH_XSCALE_PALMTX is not set
CONFIG_MACH_PALMZ72=y
-CONFIG_PALMZ72_PM=y
+CONFIG_PALMZ72_PM=m
CONFIG_PALMZ72_BATTERY=m
-CONFIG_GPIOED=m
-CONFIG_GPIOEDNG=m
# CONFIG_MACH_OMAP_PALMTC is not set
# CONFIG_MACH_ZIRE31 is not set
+CONFIG_GPIOED=m
+CONFIG_GPIOEDNG=m
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-CONFIG_PXA_RTC_EPOCH=1970
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
#
# Linux As Bootloader
@@ -176,27 +208,18 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
# CONFIG_ARMBOOT_PROC is not set
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_HAMCOP is not set
#
# Bus support
@@ -222,6 +245,8 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -231,6 +256,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="mem=32M"
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
@@ -260,8 +287,10 @@ CONFIG_BINFMT_ELF=y
#
CONFIG_PM=y
CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-CONFIG_APM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=m
#
# Networking
@@ -272,30 +301,42 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-# CONFIG_PACKET is not set
+CONFIG_PACKET=m
+# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
#
@@ -321,7 +362,6 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -340,9 +380,9 @@ CONFIG_IRDA=m
#
# IrDA protocols
#
-# CONFIG_IRLAN is not set
-# CONFIG_IRNET is not set
-# CONFIG_IRCOMM is not set
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
# CONFIG_IRDA_ULTRA is not set
#
@@ -369,27 +409,35 @@ CONFIG_IRTTY_SIR=m
#
# Old SIR device drivers
#
-# CONFIG_IRPORT_SIR is not set
+CONFIG_IRPORT_SIR=m
#
# Old Serial dongle support
#
+# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
CONFIG_PXA_FICP=m
CONFIG_BT=m
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_SCO is not set
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
CONFIG_BT_HCIUART=m
-# CONFIG_BT_HCIUART_H4 is not set
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIVHCI is not set
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_BCM2035UART=m
+CONFIG_BT_HCIVHCI=m
CONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=m
@@ -407,7 +455,8 @@ CONFIG_WIRELESS_EXT=y
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -417,7 +466,77 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Memory Technology Devices (MTD)
#
-# CONFIG_MTD is not set
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=m
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+# CONFIG_MTD_CHAR is not set
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
#
# Parallel port support
@@ -427,6 +546,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -438,7 +558,7 @@ CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -452,6 +572,12 @@ CONFIG_BLK_DEV_INITRD=y
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
#
# Multi-device support (RAID and LVM)
@@ -478,7 +604,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
+CONFIG_TUN=m
#
# PHY device support
@@ -492,6 +618,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
# Ethernet (1000 Mbit)
@@ -514,20 +641,23 @@ CONFIG_MII=y
# Wan interfaces
#
# CONFIG_WAN is not set
-CONFIG_PPP=y
+CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPP_DEFLATE is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+CONFIG_SLHC=m
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
#
# ISDN subsystem
@@ -538,17 +668,19 @@ CONFIG_PPP=y
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV=m
CONFIG_INPUT_TSDEV_SCREEN_X=320
CONFIG_INPUT_TSDEV_SCREEN_Y=480
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -560,9 +692,12 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_PXA27x=y
# CONFIG_KEYBOARD_PALMIR is not set
CONFIG_KEYBOARD_PALMWK=m
+CONFIG_KEYBOARD_GPIO=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
@@ -571,7 +706,12 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_PALMTC is not set
+CONFIG_TOUCHSCREEN_WM97XX=m
# CONFIG_TOUCHSCREEN_WM9705 is not set
CONFIG_TOUCHSCREEN_WM9712=y
# CONFIG_TOUCHSCREEN_WM9713 is not set
@@ -593,6 +733,7 @@ CONFIG_SERIO_SERPORT=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -606,51 +747,78 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
#
-# I2C support
+# IPMI
#
-# CONFIG_I2C is not set
+# CONFIG_IPMI_HANDLER is not set
#
-# L3 serial bus support
+# Watchdog Cards
#
-# CONFIG_L3 is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
#
-# Mice
+# TPM devices
#
-# CONFIG_BUSMOUSE is not set
+# CONFIG_TCG_TPM is not set
#
-# IPMI
+# I2C support
#
-# CONFIG_IPMI_HANDLER is not set
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
#
-# Watchdog Cards
+# I2C Algorithms
#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=m
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+CONFIG_I2C_ALGOPXA=m
#
-# Ftape, the floppy tape device driver
+# I2C Hardware Bus support
#
-# CONFIG_RAW_DRIVER is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
#
-# TPM devices
+# Miscellaneous I2C Chip support
#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_I2C_ADCM2650 is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_OV9640 is not set
+CONFIG_I2C_OV96XX=m
+CONFIG_I2C_DEBUG_CORE=y
+CONFIG_I2C_DEBUG_ALGO=y
+CONFIG_I2C_DEBUG_BUS=y
+CONFIG_I2C_DEBUG_CHIP=y
#
# SPI support
@@ -661,12 +829,13 @@ CONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#
-# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_BITBANG=m
CONFIG_SPI_PXA2XX=y
#
# SPI Protocol Masters
#
+# CONFIG_SPI_AT25 is not set
#
# Dallas's 1-wire bus
@@ -676,51 +845,112 @@ CONFIG_SPI_PXA2XX=y
#
# Hardware Monitoring support
#
-# CONFIG_HWMON is not set
+CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=m
+# CONFIG_BATTERY_DS2760 is not set
#
-# SoC drivers
+# L3 serial bus support
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
+# CONFIG_L3 is not set
#
# Misc devices
#
-CONFIG_BATTERY_MONITOR=y
# CONFIG_BATTCHARGE_MONITOR is not set
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+# CONFIG_ADC is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
#
CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS=m
#
# LED drivers
#
-CONFIG_LEDS_PALMZ72=y
+CONFIG_LEDS_PALMZ72=m
#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+CONFIG_LEDS_TRIGGER_MMC_CARD=m
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_SHARED is not set
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
@@ -732,18 +962,17 @@ CONFIG_VIDEO_V4L2=y
#
# Video Capture Adapters
#
-CONFIG_VIDEO_ADV_DEBUG=y
-# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_CPIA is not set
-
-#
-# Encoders and Decoders
-#
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_PXACI=m
#
# Radio Adapters
#
-# CONFIG_RADIO_MAESTRO is not set
#
# Digital Video Broadcasting Devices
@@ -753,19 +982,33 @@ CONFIG_VIDEO_ADV_DEBUG=y
#
# Graphics support
#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_PXAPWM is not set
CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
#
# Console display driver support
@@ -793,41 +1036,38 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_PXAPWM=y
-# CONFIG_LCD_CLASS_DEVICE is not set
#
# Sound
#
-CONFIG_SOUND=y
+CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_VERBOSE_PROCFS is not set
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+CONFIG_SND_DEBUG_DETECT=y
#
# Generic devices
#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
+CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
@@ -835,14 +1075,27 @@ CONFIG_SND_AC97_BUS=y
#
# ALSA ARM devices
#
-# CONFIG_SND_PXA2xx_I2SOUND is not set
-CONFIG_SND_PXA2XX_PCM=y
-CONFIG_SND_PXA2XX_AC97=y
+CONFIG_SND_PXA2xx_I2SOUND=m
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -859,46 +1112,50 @@ CONFIG_USB_ARCH_HAS_OHCI=y
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
+CONFIG_USB_PXA27X=m
# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_SX2 is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
+CONFIG_USB_ETH=m
# CONFIG_USB_ETH_RNDIS is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
#
-CONFIG_MMC=y
+CONFIG_MMC=m
# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_PXA=m
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
-# CONFIG_MMC_ASIC3 is not set
-# CONFIG_MMC_WBSD_PALMT3 is not set
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=m
+CONFIG_RTC_EPOCH=1970
#
# RTC interfaces
@@ -906,13 +1163,26 @@ CONFIG_RTC_CLASS=m
CONFIG_RTC_INTF_SYSFS=m
CONFIG_RTC_INTF_PROC=m
CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=m
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -921,10 +1191,12 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
@@ -933,7 +1205,7 @@ CONFIG_EXT2_FS=y
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
+CONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
@@ -955,8 +1227,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -966,22 +1240,25 @@ CONFIG_RAMFS=y
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
+# CONFIG_AUFS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_EMBEDDED=y
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_SQUASHFS_LZMA is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
-CONFIG_UNION_FS=m
+# CONFIG_UNION_FS is not set
#
# Network File Systems
@@ -1054,6 +1331,11 @@ CONFIG_NLS_KOI8_R=y
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1062,14 +1344,16 @@ CONFIG_NLS_UTF8=y
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
# CONFIG_SMALLOOPS is not set
# CONFIG_DEBUG_KERNEL is not set
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_FS is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_DEBUG_USER is not set
#
@@ -1082,16 +1366,27 @@ CONFIG_FRAME_POINTER=y
# Cryptographic options
#
CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1102,9 +1397,10 @@ CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_DEFLATE=m
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1114,8 +1410,13 @@ CONFIG_CRYPTO_ARC4=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-hackndev-2.6_svn.bb b/packages/linux/linux-hackndev-2.6_svn.bb
index a6e243a26d..fdae8f4ec1 100644
--- a/packages/linux/linux-hackndev-2.6_svn.bb
+++ b/packages/linux/linux-hackndev-2.6_svn.bb
@@ -2,11 +2,11 @@ DESCRIPTION = "Hack&Dev's Linux kernel for Palm devices."
HOMEPAGE = "http://www.hackndev.com/"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r3"
+PR = "r9"
-COMPATIBLE_MACHINE = "(palmtx|palmld|palmz72)"
+COMPATIBLE_MACHINE = "(palmld|palmtc|palmtt3|palmtt5|palmtx|palmz31|palmz72|palmt650)"
-SRC_URI = "svn://svn.sourceforge.net/svnroot/hackndev/linux4palm/linux;module=trunk;proto=https \
+SRC_URI = "svn://hackndev.svn.sourceforge.net/svnroot/hackndev/linux4palm/linux;module=trunk;proto=https \
file://defconfig"
SRC_URI_append_palmtx += "http://www.busybox.net/downloads/busybox-1.1.0.tar.bz2 \
@@ -18,16 +18,12 @@ S = "${WORKDIR}/trunk"
K_MAJOR = "2"
K_MINOR = "6"
-K_MICRO = "20"
-HHV="hnd0"
+K_MICRO = "21"
+HHV="hnd2"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-${HHV}"
inherit kernel
-PACKAGE_ARCH_palmtx = "palmtx"
-PACKAGE_ARCH_palmld = "palmld"
-PACKAGE_ARCH_palmz72 = "palmz72"
-
do_configure() {
if [ -f ${WORKDIR}/defconfig ]; then
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/defconfig
new file mode 100644
index 0000000000..91e02bd64c
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/aximx50/defconfig
@@ -0,0 +1,1495 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19-hh9
+# Tue Jan 23 23:52:25 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+CONFIG_MACH_X50=y
+CONFIG_X50_VGA=y
+CONFIG_X50_BUTTONS=m
+CONFIG_X50_TS=m
+CONFIG_DRAM_BASE=0xa8000000
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_PXA_FICP is not set
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=1
+CONFIG_MTD_CONCAT=m
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_ACX is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=480
+CONFIG_INPUT_TSDEV_SCREEN_Y=640
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_KEYBOARD_NEWTON=m
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+CONFIG_MOUSE_NAVPOINT=m
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_ADS7846_SSP=m
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=m
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+CONFIG_NVRAM=m
+CONFIG_SA1100_RTC=m
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+CONFIG_I2C_ISA=m
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_STUB=m
+CONFIG_I2C_PCA_ISA=m
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_RTC8564=m
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_PXA2XX=y
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+# CONFIG_W1_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=m
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1031=m
+# CONFIG_SENSORS_ADM9240 is not set
+CONFIG_SENSORS_ASB100=m
+# CONFIG_SENSORS_ATXP1 is not set
+CONFIG_SENSORS_DS1621=m
+# CONFIG_SENSORS_F71805F is not set
+CONFIG_SENSORS_FSCHER=m
+# CONFIG_SENSORS_FSCPOS is not set
+CONFIG_SENSORS_GL518SM=m
+# CONFIG_SENSORS_GL520SM is not set
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+# CONFIG_SENSORS_LM70 is not set
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+# CONFIG_SENSORS_LM92 is not set
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_SMSC47M1=m
+# CONFIG_SENSORS_SMSC47M192 is not set
+CONFIG_SENSORS_SMSC47B397=m
+# CONFIG_SENSORS_VT1211 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83627HF=m
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=m
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC_ADS7846_SSP=m
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+
+#
+# Radio Adapters
+#
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+CONFIG_FB_MBX=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+CONFIG_SND_VIRMIDI=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-15"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h2200/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/h2200/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h2200/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/h2200/defconfig
new file mode 100644
index 0000000000..8decacd4a2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h2200/defconfig
@@ -0,0 +1,1645 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17-hh2
+# Wed Nov 1 20:06:18 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_MINIMAL_OOPS is not set
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+# CONFIG_USELIB is not set
+# CONFIG_CORE_DUMP is not set
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_ARCH_H1900 is not set
+CONFIG_ARCH_H2200=y
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA25x=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+CONFIG_GPIO_KEYS=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_IPAQ_SAMCOP is not set
+CONFIG_IPAQ_HAMCOP=y
+CONFIG_IPAQ_SAMCOP_TOUCHSCREEN=y
+CONFIG_IPAQ_SAMCOP_DMA=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+CONFIG_PCMCIA_H2200=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/mmcblk0p1"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+CONFIG_FPE_FASTFPE=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+# CONFIG_IPV6_TUNNEL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_HAMCOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=m
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_AHA152X=m
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+# CONFIG_PCMCIA_SPECTRUM is not set
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_HOSTAP=m
+# CONFIG_HOSTAP_FIRMWARE is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ACX is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_KEYBOARD_NEWTON=m
+CONFIG_KEYBOARD_H2200=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELV is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS9490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_SAMCOP=y
+CONFIG_W1_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# SoC drivers
+#
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_H2200_BATTERY=y
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_H2200 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# Encoders and Decoders
+#
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_CX25840 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+
+#
+# V4L USB devices
+#
+
+#
+# Radio Adapters
+#
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=m
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_H2200=y
+CONFIG_LCD_H2200=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_A716 is not set
+# CONFIG_SND_H1910 is not set
+CONFIG_SND_H2200=y
+# CONFIG_SND_H4000 is not set
+# CONFIG_SND_HTCMAGICIAN is not set
+# CONFIG_SND_HX4700 is not set
+# CONFIG_SND_HTCUNIVERSAL is not set
+# CONFIG_SND_H5XXX_AK4535 is not set
+CONFIG_SND_PXA2xx_I2SOUND=y
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+CONFIG_SND_UDA1380=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+# CONFIG_MMC_ASIC3 is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+# CONFIG_REISERFS_FS_SECURITY is not set
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_QUOTA is not set
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+# CONFIG_XFS_RT is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+CONFIG_HFSPLUS_FS=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+CONFIG_RXRPC=m
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h3600/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/h3600/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h3600/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/h3600/defconfig
new file mode 100644
index 0000000000..7dd8772892
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h3600/defconfig
@@ -0,0 +1,1101 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17-hh2
+# Mon Nov 6 21:29:46 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_MINIMAL_OOPS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_USELIB=y
+CONFIG_CORE_DUMP=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+CONFIG_SA1100_H3600=y
+# CONFIG_SA1100_H3800 is not set
+CONFIG_SA1100_H3XXX=y
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_XDA is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+# CONFIG_H3600_SLEEVE is not set
+# CONFIG_SA1100_USB is not set
+CONFIG_IPAQ_H3600_LCD=y
+CONFIG_GPIO_KEYS=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+
+#
+# Processor Features
+#
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_SA1100_IPAQ=y
+
+#
+# SA1100-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+CONFIG_IPAQ_MICRO=m
+CONFIG_IPAQ_MICRO_BATTERY=m
+# CONFIG_IPAQ_SAMCOP is not set
+# CONFIG_IPAQ_HAMCOP is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_SA1100=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_SA1100_FIR=m
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SA1100 is not set
+CONFIG_MTD_IPAQ=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=m
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=m
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=m
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_FIRMWARE_EDID is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_SA11XX_UDA1341 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf-8"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h3900/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/h3900/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h3900/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/h3900/defconfig
new file mode 100644
index 0000000000..1ad5c9589b
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h3900/defconfig
@@ -0,0 +1,1260 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hh5
+# Sun Apr 1 09:55:56 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+CONFIG_MACH_H3900=y
+CONFIG_IPAQ_H3900_LCD=y
+CONFIG_IPAQ_H3900_BACKLIGHT=y
+CONFIG_IPAQ_H3900_BATTERY=y
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+# CONFIG_MTD_CHAR is not set
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_KEYBOARD_ASIC2=y
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ASIC2=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+# CONFIG_BATTERY_MONITOR is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+CONFIG_HTC_ASIC2=y
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_ASIC2=y
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h4000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/h4000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h4000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/h4000/defconfig
new file mode 100644
index 0000000000..f649d6f014
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h4000/defconfig
@@ -0,0 +1,1317 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hh5
+# Mon Apr 2 06:23:29 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+CONFIG_MACH_H4000=y
+CONFIG_MACH_H4300=y
+CONFIG_IPAQ_H4000_IRDA=y
+# CONFIG_IPAQ_H4000_UDC is not set
+CONFIG_IPAQ_H4000_LCD=y
+CONFIG_IPAQ_H4000_BACKLIGHT=y
+CONFIG_IPAQ_H4000_BUTTONS=y
+# CONFIG_IPAQ_H4000_BATT is not set
+CONFIG_IPAQ_H4000_BATTERY=y
+CONFIG_IPAQ_H4000_LEDS=y
+CONFIG_IPAQ_H4000_BT=y
+CONFIG_IPAQ_H4300_KBD=y
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SSP=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+# CONFIG_MTD_CHAR is not set
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_ADC_BATTERY=y
+CONFIG_APM_POWER=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_H4000=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h5000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/h5000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h5000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/h5000/defconfig
new file mode 100644
index 0000000000..d81f16f9c6
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/h5000/defconfig
@@ -0,0 +1,1252 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hh6
+# Wed Apr 4 17:25:07 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+CONFIG_ARCH_H5400=y
+CONFIG_IPAQ_H5400_BT=y
+CONFIG_IPAQ_H5400_LCD=y
+CONFIG_IPAQ_H5400_BL=y
+CONFIG_IPAQ_H5400_BATTERY=y
+CONFIG_IPAQ_H5400_LEDS=y
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_IPAQ_SAMCOP_FSI is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+# CONFIG_MTD_CHAR is not set
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IPAQ=y
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_SAMCOP=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_H5400_BUZZER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_DS2760_BATTERY=y
+# CONFIG_ADC_BATTERY is not set
+# CONFIG_APM_POWER is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+CONFIG_SOC_SAMCOP=y
+# CONFIG_SOC_HAMCOP is not set
+CONFIG_SOC_SAMCOP_DMA=y
+# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_SAMCOP=y
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SAMCOP=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/defconfig
new file mode 100644
index 0000000000..b9ce6faf0c
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/htcblueangel/defconfig
@@ -0,0 +1,1501 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19-hh6
+# Wed Dec 20 17:26:40 2006
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_USELIB=y
+CONFIG_CORE_DUMP=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+CONFIG_MACH_BLUEANGEL=y
+CONFIG_MACH_BLUEANGEL_LCD=y
+CONFIG_MACH_BLUEANGEL_BACKLIGHT=y
+CONFIG_MACH_BLUEANGEL_DS1WM=m
+# CONFIG_MACH_BLUEANGEL_PCMCIA is not set
+CONFIG_MACH_BLUEANGEL_SUSPEND=m
+# CONFIG_MACH_BLUEANGEL_LEDS is not set
+CONFIG_MACH_BLUEANGEL_KEYPAD=m
+# CONFIG_MACH_BLUEANGEL_AUDIO is not set
+CONFIG_MACH_BLUEANGEL_BATTERY=m
+CONFIG_MACH_BLUEANGEL_ROM=m
+CONFIG_MACH_BLUEANGEL_DPRAM=m
+CONFIG_MACH_BLUEANGEL_UDC=y
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SSP=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=y
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+# CONFIG_BT_HCIUART_H4 is not set
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=1
+CONFIG_MTD_CONCAT=m
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=y
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_ACX is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=m
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIO_KEYS is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_SA1100_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELV is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_PXA2XX is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_SOC_TSC2101 is not set
+CONFIG_SOC_TSC2200=y
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+CONFIG_USB_GADGET_DUMMY_HCD=y
+CONFIG_USB_DUMMY_HCD=m
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/defconfig
new file mode 100644
index 0000000000..ad5cce380d
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/htcuniversal/defconfig
@@ -0,0 +1,1447 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19-hh6
+# Sat Dec 16 20:23:29 2006
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_USELIB=y
+CONFIG_CORE_DUMP=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+CONFIG_MACH_HTCUNIVERSAL=y
+CONFIG_HTCUNIVERSAL_CORE=y
+CONFIG_HTCUNIVERSAL_UDC=y
+CONFIG_HTCUNIVERSAL_POWER=y
+CONFIG_HTCUNIVERSAL_BACKLIGHT=y
+CONFIG_HTCUNIVERSAL_LCD=y
+CONFIG_HTCUNIVERSAL_TS2=y
+CONFIG_HTCUNIVERSAL_BUTTONS=y
+CONFIG_HTCUNIVERSAL_BLUETOOTH=y
+CONFIG_HTCUNIVERSAL_PHONE=y
+CONFIG_HTCUNIVERSAL_AK4641=m
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+# CONFIG_BLK_DEV_SD is not set
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+# CONFIG_ACX_USB is not set
+CONFIG_ACX_MEM=y
+CONFIG_ACX_HTCUNIVERSAL=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_PXA27x=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELV is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_PXA2XX is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCUNIVERSAL=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=m
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=850
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="utf8"
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+CONFIG_NLS_CODEPAGE_865=y
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig
new file mode 100644
index 0000000000..49111f9b48
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig
@@ -0,0 +1,1879 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19-hh3
+# Wed Dec 6 04:42:47 2006
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+# CONFIG_USELIB is not set
+CONFIG_CORE_DUMP=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+CONFIG_MACH_H4700=y
+CONFIG_HX4700_NAVPOINT=y
+CONFIG_HX4700_CORE=y
+# CONFIG_HX4700_TS is not set
+CONFIG_HX4700_BLUETOOTH=y
+CONFIG_HX4700_PCMCIA=y
+CONFIG_HX4700_LCD=y
+CONFIG_HX4700_LEDS=y
+CONFIG_HX4700_BATTERY=y
+# CONFIG_HX4700_POWER is not set
+CONFIG_HX4700_UDC=y
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_IWMMXT=y
+CONFIG_PXA27x_VOLTAGE=m
+CONFIG_PXA27x_VOLTAGE_MAX158xx=m
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+# CONFIG_INET6_XFRM_MODE_BEET is not set
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_PXA_FICP is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+# CONFIG_BLK_DEV_SD is not set
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+# CONFIG_PCMCIA_SPECTRUM is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+CONFIG_ACX=y
+# CONFIG_ACX_USB is not set
+CONFIG_ACX_MEM=y
+CONFIG_ACX_HX4700=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=m
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_KEYBOARD_ASIC3=y
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+CONFIG_MOUSE_NAVPOINT=y
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_LIBPS2=m
+CONFIG_SERIO_RAW=m
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELV is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_DS2760_BATTERY=y
+CONFIG_ADC_BATTERY=y
+CONFIG_APM_POWER=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SN9C102=m
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HX4700=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+# CONFIG_USB_USBNET_MII is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+# CONFIG_REISERFS_FS_POSIX_ACL is not set
+# CONFIG_REISERFS_FS_SECURITY is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+CONFIG_HFSPLUS_FS=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/defconfig.main b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.main
index 576f9c3c5e..576f9c3c5e 100644
--- a/packages/linux/linux-handhelds-2.6/hx4700/defconfig.main
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.main
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/defconfig.old b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.old
index e34bdb7916..e34bdb7916 100644
--- a/packages/linux/linux-handhelds-2.6/hx4700/defconfig.old
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/hx4700/defconfig.old
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/magician/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/magician/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/magician/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/magician/defconfig
new file mode 100644
index 0000000000..d542ccef14
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/magician/defconfig
@@ -0,0 +1,1556 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-hh3
+# Sun Mar 25 13:00:41 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+CONFIG_MACH_MAGICIAN=y
+CONFIG_MAGICIAN_PM=y
+CONFIG_MAGICIAN_TS=m
+CONFIG_MAGICIAN_LCD=y
+CONFIG_MAGICIAN_CPLD=y
+CONFIG_MAGICIAN_DS1WM=y
+CONFIG_MAGICIAN_PHONE=m
+CONFIG_MAGICIAN_FLASH=m
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=m
+CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty0 noinitrd root=/dev/mmcblk0p2 ro mem=63M debug"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_DPM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=3
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=m
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=m
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+# CONFIG_SERIAL_PXA_IR is not set
+CONFIG_SERIAL_CORE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+CONFIG_TIHTC=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_MAGICIAN_BATTERY=y
+CONFIG_DS2760_BATTERY=y
+# CONFIG_ADC_BATTERY is not set
+CONFIG_APM_POWER=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+CONFIG_ADC_ADS7846_SSP=m
+# CONFIG_ADC_AD7877 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_MAGICIAN=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_LEDS_TRIGGER_SHARED is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+CONFIG_FONT_ACORN_8x8=y
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# Soc Platforms
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2xx_SOC=m
+CONFIG_SND_PXA2xx_SOC_I2S=m
+CONFIG_SND_PXA2xx_SOC_SSP=m
+CONFIG_SND_PXA2xx_SOC_MAGICIAN=m
+# CONFIG_SND_PXA2xx_SOC_BLUEANGEL is not set
+# CONFIG_SND_PXA2xx_SOC_H5000 is not set
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+CONFIG_USB_FILE_STORAGE_TEST=y
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/defconfig
new file mode 100644
index 0000000000..cf5cea0a4b
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.20/rx3000/defconfig
@@ -0,0 +1,1341 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19-hh8
+# Mon Jan 22 13:41:47 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# S3C24XX Implementations
+#
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_ARCH_BAST is not set
+CONFIG_PM_H1940=y
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VR1000 is not set
+CONFIG_MACH_RX3715=y
+CONFIG_RX3715_LEDS=m
+CONFIG_RX3715_BLUETOOTH=m
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_MACH_VSTMS is not set
+# CONFIG_MACH_G500 is not set
+CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C2410_PM=y
+CONFIG_CPU_S3C244X=y
+CONFIG_CPU_S3C2440=y
+
+#
+# S3C2410 Boot
+#
+# CONFIG_S3C2410_BOOT_WATCHDOG is not set
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+
+#
+# S3C2410 Setup
+#
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=2
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+# CONFIG_IP_NF_FTP is not set
+# CONFIG_IP_NF_IRC is not set
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+# CONFIG_STANDALONE is not set
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+CONFIG_ACX_RX3715=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIO_KEYS=y
+CONFIG_KEYBOARD_ASIC3=y
+# CONFIG_S3C2410_BUTTONS is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+# CONFIG_TOUCHSCREEN_WM9712 is not set
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_S3C2410_ALT is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=y
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=m
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_DS1WM=m
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_DS2760=m
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Hardware Monitoring - Battery
+#
+CONFIG_BATTERY_MONITOR=m
+CONFIG_RX3715_BATTERY=m
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_S3C24XX is not set
+CONFIG_LEDS_ASIC3=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_TIMER_ASIC3=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_S3C2410=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_RX3715=m
+CONFIG_SND_S3C2410=m
+# CONFIG_SND_S3C2410_DBG is not set
+# CONFIG_SND_S3C2410_DBG_DMA is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_S3C2440 is not set
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp1251"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+CONFIG_NLS_CODEPAGE_866=y
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+CONFIG_NLS_ISO8859_5=y
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+CONFIG_NLS_ISO8859_14=y
+# CONFIG_NLS_ISO8859_15 is not set
+CONFIG_NLS_KOI8_R=y
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_S3C2410_UART=2
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc
index 34765c738b..b2a71a84be 100644
--- a/packages/linux/linux-handhelds-2.6.inc
+++ b/packages/linux/linux-handhelds-2.6.inc
@@ -3,7 +3,7 @@ DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer h
LICENSE = "GPL"
COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE ?= '(asus730|aximx50|h1910|h2200|h3600|h3800|h3900|h4000|h5000|htcblueangel|htcuniversal|hx4700|jornada56x|magician|simpad|rx3000)'
+COMPATIBLE_MACHINE ?= '(asus620|asus730|aximx50|aximx50v|h1910|h2200|h3600|h3800|h3900|h4000|h5000|htcalpine|htcapache|htcblueangel|htchermes|htchimalaya|htcuniversal|htcwallaby|hx4700|looxc550|jornada56x|magician|rx1950|rx3000)'
# SRC_URI *must* be overriden in includer, but this is a good reference
SRC_URI ?= "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
@@ -15,12 +15,6 @@ S = "${WORKDIR}/kernel26"
inherit kernel
-FILES_kernel-image_hx4700 = ""
-ALLOW_EMPTY_hx4700 = "1"
-FILES_kernel-image_htcuniversal = ""
-ALLOW_EMPTY_htcuniversal = "1"
-
-
K_MAJOR ?= "${@bb.data.getVar('PV',d,1).split('-')[0].split('.')[0]}"
K_MINOR ?= "${@bb.data.getVar('PV',d,1).split('-')[0].split('.')[1]}"
@@ -70,4 +64,4 @@ do_deploy() {
do_deploy[dirs] = "${S}"
-addtask deploy before do_build after do_compile
+addtask deploy before do_package after do_install
diff --git a/packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/asus620/defconfig b/packages/linux/linux-handhelds-2.6/asus620/defconfig
new file mode 100644
index 0000000000..898cf0430e
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/asus620/defconfig
@@ -0,0 +1,1285 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:35 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+CONFIG_MACH_A620=y
+CONFIG_A620_LCD=y
+CONFIG_A620_BUTTONS=y
+CONFIG_A620_PCMCIA=y
+CONFIG_A620_TS=y
+# CONFIG_A620_FLASHFAKE is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/asus730/defconfig b/packages/linux/linux-handhelds-2.6/asus730/defconfig
new file mode 100644
index 0000000000..29729e0123
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/asus730/defconfig
@@ -0,0 +1,1377 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:35 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+CONFIG_MACH_A730=y
+# CONFIG_ASUS730_WM9712 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+CONFIG_SENSORS_PCA9535=y
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+# CONFIG_SND_RECON is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/aximx50/defconfig b/packages/linux/linux-handhelds-2.6/aximx50/defconfig
index 91e02bd64c..fcbcefeaf7 100644
--- a/packages/linux/linux-handhelds-2.6/aximx50/defconfig
+++ b/packages/linux/linux-handhelds-2.6/aximx50/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh9
-# Tue Jan 23 23:52:25 2007
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:36 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -33,6 +39,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -40,14 +47,17 @@ CONFIG_SYSVIPC=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
+# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -78,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -112,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -124,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# Intel PXA2xx Implementations
@@ -152,21 +168,26 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
CONFIG_MACH_X50=y
CONFIG_X50_VGA=y
-CONFIG_X50_BUTTONS=m
-CONFIG_X50_TS=m
+CONFIG_X50_BUTTONS=y
+CONFIG_X50_TS=y
CONFIG_DRAM_BASE=0xa8000000
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
#
# Linux As Bootloader
@@ -190,16 +211,9 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
#
# Bus support
@@ -214,9 +228,10 @@ CONFIG_XSCALE_PMU=y
# Kernel Features
#
CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -227,6 +242,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -236,11 +252,26 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -259,16 +290,16 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=m
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -279,13 +310,10 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
+CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_NET_KEY=m
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -294,84 +322,49 @@ CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
# CONFIG_IP_NF_QUEUE is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -388,10 +381,9 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
+# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
-CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -410,14 +402,14 @@ CONFIG_LLC=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -434,7 +426,7 @@ CONFIG_IRDA_DEBUG=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -444,30 +436,32 @@ CONFIG_IRTTY_SIR=m
#
# Old SIR device drivers
#
-CONFIG_IRPORT_SIR=m
+# CONFIG_IRPORT_SIR is not set
#
# Old Serial dongle support
#
-# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
-# CONFIG_PXA_FICP is not set
-CONFIG_BT=m
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_SCO is not set
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -478,7 +472,9 @@ CONFIG_WIRELESS_EXT=y
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -491,17 +487,18 @@ CONFIG_FW_LOADER=m
#
CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_CONCAT=m
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
@@ -512,14 +509,8 @@ CONFIG_MTD_BLOCK=y
#
# RAM/ROM/Flash chip drivers
#
-CONFIG_MTD_CFI=y
+# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
@@ -530,34 +521,26 @@ CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_SHARP_SL is not set
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -570,14 +553,7 @@ CONFIG_MTD_CFI_UTIL=y
#
# NAND Flash Device Drivers
#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=m
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND is not set
#
# OneNAND Flash Device Drivers
@@ -592,90 +568,29 @@ CONFIG_MTD_NAND_IDS=m
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-CONFIG_BLK_DEV_IDESCSI=m
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=m
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
+# CONFIG_IDE is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
+# CONFIG_SCSI is not set
# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transports
-#
-CONFIG_SCSI_SPI_ATTRS=m
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
@@ -707,7 +622,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
+# CONFIG_TUN is not set
#
# PHY device support
@@ -733,31 +648,23 @@ CONFIG_TUN=m
#
# Wireless LAN (non-hamradio)
#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_ACX is not set
+# CONFIG_NET_RADIO is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
-CONFIG_PPP=y
+CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
-CONFIG_SLHC=y
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -777,16 +684,12 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
-CONFIG_INPUT_TSDEV_SCREEN_X=480
-CONFIG_INPUT_TSDEV_SCREEN_Y=640
+# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -796,41 +699,36 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
-CONFIG_KEYBOARD_NEWTON=m
+# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
-# CONFIG_KEYBOARD_ASIC3 is not set
-# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
-CONFIG_MOUSE_NAVPOINT=m
+# CONFIG_MOUSE_NAVPOINT is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=m
-CONFIG_TOUCHSCREEN_ADS7846_SSP=m
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-# CONFIG_TOUCHSCREEN_WM9712 is not set
-# CONFIG_TOUCHSCREEN_WM9713 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=m
-# CONFIG_INPUT_MISC is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#
-CONFIG_SERIO=m
-CONFIG_SERIO_SERPORT=m
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
+# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
@@ -853,10 +751,13 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -868,14 +769,11 @@ CONFIG_UNIX98_PTYS=y
#
# CONFIG_WATCHDOG is not set
# CONFIG_HW_RANDOM is not set
-CONFIG_NVRAM=m
-CONFIG_SA1100_RTC=m
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -886,165 +784,70 @@ CONFIG_SA1100_RTC=m
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=m
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=m
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-CONFIG_I2C_ISA=m
-# CONFIG_I2C_OCORES is not set
-CONFIG_I2C_PARPORT_LIGHT=m
-CONFIG_I2C_STUB=m
-CONFIG_I2C_PCA_ISA=m
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-CONFIG_SENSORS_EEPROM=m
-CONFIG_SENSORS_PCF8574=m
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
+# CONFIG_I2C is not set
#
# SPI support
#
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=m
-CONFIG_SPI_PXA2XX=y
-
-#
-# SPI Protocol Masters
-#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
#
# Dallas's 1-wire bus
#
-CONFIG_W1=m
+# CONFIG_W1 is not set
#
-# 1-wire Bus Masters
+# Hardware Monitoring support
#
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_DS1WM is not set
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
#
-# 1-wire Slaves
+# L3 serial bus support
#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_DS2760=m
+# CONFIG_L3 is not set
#
-# Hardware Monitoring support
+# Misc devices
#
-CONFIG_HWMON=y
-CONFIG_HWMON_VID=m
-# CONFIG_SENSORS_ABITUGURU is not set
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1031=m
-# CONFIG_SENSORS_ADM9240 is not set
-CONFIG_SENSORS_ASB100=m
-# CONFIG_SENSORS_ATXP1 is not set
-CONFIG_SENSORS_DS1621=m
-# CONFIG_SENSORS_F71805F is not set
-CONFIG_SENSORS_FSCHER=m
-# CONFIG_SENSORS_FSCPOS is not set
-CONFIG_SENSORS_GL518SM=m
-# CONFIG_SENSORS_GL520SM is not set
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_LM63=m
-# CONFIG_SENSORS_LM70 is not set
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-# CONFIG_SENSORS_LM92 is not set
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_SMSC47M1=m
-# CONFIG_SENSORS_SMSC47M192 is not set
-CONFIG_SENSORS_SMSC47B397=m
-# CONFIG_SENSORS_VT1211 is not set
-CONFIG_SENSORS_W83781D=m
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83627HF=m
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Hardware Monitoring - Battery
-#
-CONFIG_BATTERY_MONITOR=m
#
-# L3 serial bus support
+# Multimedia Capabilities Port drivers
#
-CONFIG_L3=m
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
#
-# SoC drivers
+# Multifunction device drivers
#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
# CONFIG_SOC_MQ11XX is not set
# CONFIG_SOC_T7L66XB is not set
# CONFIG_SOC_TC6387XB is not set
# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-CONFIG_HTC_ASIC3_DS1WM=y
# CONFIG_SOC_TSC2101 is not set
# CONFIG_SOC_TSC2200 is not set
#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-CONFIG_ADC_ADS7846_SSP=m
-# CONFIG_ADC_AD7877 is not set
-# CONFIG_TIFM_CORE is not set
-
-#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
#
# LED drivers
@@ -1053,31 +856,16 @@ CONFIG_ADC_ADS7846_SSP=m
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=m
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L1_COMPAT is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-
-#
-# Radio Adapters
-#
+# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
@@ -1087,21 +875,30 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
# CONFIG_FB_PXA_PARAMETERS is not set
-CONFIG_FB_MBX=y
+# CONFIG_FB_MBX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_VSFB is not set
@@ -1111,15 +908,15 @@ CONFIG_FB_MBX=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
+# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
@@ -1127,65 +924,28 @@ CONFIG_FONT_MINI_4x6=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_LOGO is not set
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
+# CONFIG_SND is not set
#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-CONFIG_SND_VIRMIDI=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# SoC audio support
+# Open Sound System
#
-# CONFIG_SND_SOC is not set
+# CONFIG_SOUND_PRIME is not set
#
-# Open Sound System
+# HID Devices
#
-# CONFIG_SOUND_PRIME is not set
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -1219,13 +979,14 @@ CONFIG_USB_PXA27X=y
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
@@ -1234,16 +995,36 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -1251,11 +1032,8 @@ CONFIG_RTC_LIB=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT3_FS is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
@@ -1263,13 +1041,13 @@ CONFIG_JBD=y
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
+# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
@@ -1281,9 +1059,9 @@ CONFIG_AUTOFS4_FS=m
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
@@ -1310,20 +1088,8 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1333,16 +1099,17 @@ CONFIG_CRAMFS=m
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
+CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
@@ -1355,67 +1122,57 @@ CONFIG_SUNRPC=m
#
# Partition Types
#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-15"
-CONFIG_NLS_CODEPAGE_437=m
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
#
# Profiling support
@@ -1425,17 +1182,39 @@ CONFIG_NLS_UTF8=m
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_FS is not set
-CONFIG_FRAME_POINTER=y
# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1452,31 +1231,36 @@ CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1486,10 +1270,13 @@ CONFIG_CRYPTO_CRC32C=m
#
# Library routines
#
-CONFIG_CRC_CCITT=m
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/eteng500/defconfig b/packages/linux/linux-handhelds-2.6/eteng500/defconfig
new file mode 100644
index 0000000000..45c2ec3605
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/eteng500/defconfig
@@ -0,0 +1,1277 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:36 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_MACH_G500=y
+
+#
+# S3C2442 Machines
+#
+# CONFIG_MACH_RX1950 is not set
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+CONFIG_TOUCHSCREEN_S3C2410_ALT=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+# CONFIG_SERIAL_S3C2410_CONSOLE is not set
+CONFIG_SERIAL_CORE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2440=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_S3C2410_PORT is not set
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h1910/defconfig b/packages/linux/linux-handhelds-2.6/h1910/defconfig
new file mode 100644
index 0000000000..4a9bd9806e
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h1910/defconfig
@@ -0,0 +1,1352 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:37 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+CONFIG_ARCH_H1900=y
+CONFIG_IPAQ_H1900_LCD=y
+CONFIG_IPAQ_H1900_BUTTONS=y
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_H1910=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h2200/defconfig b/packages/linux/linux-handhelds-2.6/h2200/defconfig
index 8decacd4a2..287919d099 100644
--- a/packages/linux/linux-handhelds-2.6/h2200/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h2200/defconfig
@@ -1,15 +1,27 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-hh2
-# Wed Nov 1 20:06:18 2006
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:37 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -26,18 +38,24 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
-# CONFIG_MINIMAL_OOPS is not set
-# CONFIG_IKCONFIG_PROC is not set
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -49,9 +67,9 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-# CONFIG_USELIB is not set
-# CONFIG_CORE_DUMP is not set
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -69,36 +87,50 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -106,12 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
CONFIG_DMABOUNCE=y
#
@@ -121,9 +149,11 @@ CONFIG_DMABOUNCE=y
# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
# CONFIG_ARCH_ESERIES is not set
# CONFIG_MACH_A620 is not set
# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
# CONFIG_ARCH_H1900 is not set
CONFIG_ARCH_H2200=y
# CONFIG_MACH_H3900 is not set
@@ -139,18 +169,21 @@ CONFIG_ARCH_H2200=y
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
-# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA25x=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-CONFIG_GPIO_KEYS=y
#
# Linux As Bootloader
@@ -166,36 +199,17 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-
-#
-# Compaq/iPAQ Platforms
-#
-CONFIG_PXA_IPAQ=y
-
-#
-# XScale-based iPAQ
-#
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_IPAQ_SAMCOP is not set
-CONFIG_IPAQ_HAMCOP=y
-CONFIG_IPAQ_SAMCOP_TOUCHSCREEN=y
-CONFIG_IPAQ_SAMCOP_DMA=y
#
# Bus support
@@ -205,7 +219,7 @@ CONFIG_IPAQ_SAMCOP_DMA=y
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA_DEBUG=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
@@ -233,6 +247,8 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -240,13 +256,27 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/mmcblk0p1"
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
CONFIG_PXA25x_ALTERNATE_FREQS=y
#
@@ -258,22 +288,24 @@ CONFIG_PXA25x_ALTERNATE_FREQS=y
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
-CONFIG_FPE_FASTFPE=y
+# CONFIG_FPE_FASTFPE is not set
#
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
+# CONFIG_BINFMT_MISC is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -287,9 +319,7 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-CONFIG_NET_KEY=m
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -299,70 +329,48 @@ CONFIG_IP_PNP=y
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
-CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
# CONFIG_IP_NF_QUEUE is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -379,16 +387,14 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
+# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
-CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -402,14 +408,14 @@ CONFIG_LLC=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -426,7 +432,7 @@ CONFIG_IRDA_DEBUG=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -436,20 +442,20 @@ CONFIG_IRTTY_SIR=m
#
# Old SIR device drivers
#
-CONFIG_IRPORT_SIR=m
+# CONFIG_IRPORT_SIR is not set
#
# Old Serial dongle support
#
-# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=y
+CONFIG_PXA_FICP=y
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
@@ -462,26 +468,19 @@ CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=y
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
-CONFIG_IEEE80211=y
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=y
-CONFIG_IEEE80211_CRYPT_CCMP=y
-CONFIG_IEEE80211_CRYPT_TKIP=y
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
+# CONFIG_IEEE80211 is not set
#
# Device Drivers
@@ -494,6 +493,8 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -504,8 +505,9 @@ CONFIG_FW_LOADER=y
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_CMDLINE_PARTS is not set
@@ -515,11 +517,13 @@ CONFIG_MTD_PARTITIONS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -553,7 +557,9 @@ CONFIG_MTD_CFI_I2=y
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -567,7 +573,8 @@ CONFIG_MTD_CFI_I2=y
# NAND Flash Device Drivers
#
CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_H1900 is not set
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_HAMCOP=y
@@ -588,19 +595,16 @@ CONFIG_MTD_NAND_HAMCOP=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -608,6 +612,7 @@ CONFIG_BLK_DEV_INITRD=y
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -617,69 +622,30 @@ CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
CONFIG_BLK_DEV_IDECS=y
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_IDE_TASK_IOCTL is not set
#
# IDE chipset support/bugfixes
#
-CONFIG_IDE_GENERIC=m
+CONFIG_IDE_GENERIC=y
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=m
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
#
-# PCMCIA SCSI adapter support
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
#
-CONFIG_PCMCIA_AHA152X=m
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
+# CONFIG_ATA is not set
#
# Multi-device support (RAID and LVM)
@@ -706,7 +672,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
+# CONFIG_TUN is not set
#
# PHY device support
@@ -716,7 +682,6 @@ CONFIG_TUN=m
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=m
#
# Ethernet (1000 Mbit)
@@ -733,68 +698,28 @@ CONFIG_MII=m
#
# Wireless LAN (non-hamradio)
#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-CONFIG_PCMCIA_RAYCS=m
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-# CONFIG_PCMCIA_SPECTRUM is not set
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_HOSTAP=m
-# CONFIG_HOSTAP_FIRMWARE is not set
-CONFIG_HOSTAP_CS=m
-# CONFIG_ACX is not set
-CONFIG_NET_WIRELESS=y
+# CONFIG_NET_RADIO is not set
#
# PCMCIA network device support
#
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PCMCIA_AXNET=m
+# CONFIG_NET_PCMCIA is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -809,18 +734,17 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -830,21 +754,36 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
-CONFIG_KEYBOARD_NEWTON=m
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_H2200=y
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#
-CONFIG_SERIO=m
-CONFIG_SERIO_SERPORT=m
-# CONFIG_SERIO_LIBPS2 is not set
-CONFIG_SERIO_RAW=m
+# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
@@ -853,6 +792,7 @@ CONFIG_SERIO_RAW=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -866,16 +806,48 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -887,9 +859,9 @@ CONFIG_I2C_CHARDEV=y
#
# I2C Hardware Bus support
#
-# CONFIG_I2C_ELV is not set
-CONFIG_I2C_PXA=y
+CONFIG_I2C_PXA=m
# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
@@ -904,6 +876,7 @@ CONFIG_I2C_PXA=y
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCA9535 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
@@ -911,60 +884,6 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_DEBUG_CHIP is not set
#
-# L3 serial bus support
-#
-CONFIG_L3=m
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
# SPI support
#
# CONFIG_SPI is not set
@@ -978,10 +897,9 @@ CONFIG_W1=y
#
# 1-wire Bus Masters
#
-# CONFIG_W1_MASTER_DS9490 is not set
+# CONFIG_W1_MASTER_DS2490 is not set
# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_SAMCOP=y
-CONFIG_W1_DS1WM=y
+CONFIG_W1_MASTER_DS1WM=y
#
# 1-wire Slaves
@@ -989,35 +907,56 @@ CONFIG_W1_DS1WM=y
# CONFIG_W1_SLAVE_THERM is not set
# CONFIG_W1_SLAVE_SMEM is not set
# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_DS2760=y
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
#
-# SoC drivers
+# L3 serial bus support
#
-CONFIG_SOC_MQ11XX=y
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_SOC_TSC2101 is not set
+# CONFIG_L3 is not set
#
# Misc devices
#
-CONFIG_BATTERY_MONITOR=y
-CONFIG_H2200_BATTERY=y
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_SAMCOP=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+CONFIG_SOC_HAMCOP=y
+CONFIG_SOC_SAMCOP_DMA=y
+# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
@@ -1028,56 +967,22 @@ CONFIG_LEDS_CLASS=y
#
# LED drivers
#
-# CONFIG_LEDS_H2200 is not set
+CONFIG_LEDS_HAMCOP=y
#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=m
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L1_COMPAT is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-
-#
-# Radio Adapters
-#
+# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
@@ -1088,27 +993,42 @@ CONFIG_VIDEO_V4L2=y
#
# Graphics support
#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_H2200=y
+CONFIG_LCD_H2200=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
CONFIG_FB_MQ1100=y
# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=m
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
# CONFIG_FONT_8x16 is not set
@@ -1124,18 +1044,7 @@ CONFIG_FONT_MINI_4x6=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_BACKLIGHT_H2200=y
-CONFIG_LCD_H2200=y
+# CONFIG_LOGO is not set
#
# Sound
@@ -1145,17 +1054,15 @@ CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
@@ -1172,28 +1079,27 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# ALSA ARM devices
#
-# CONFIG_SND_A716 is not set
-# CONFIG_SND_H1910 is not set
-CONFIG_SND_H2200=y
-# CONFIG_SND_H4000 is not set
-# CONFIG_SND_HTCMAGICIAN is not set
-# CONFIG_SND_HX4700 is not set
-# CONFIG_SND_HTCUNIVERSAL is not set
-# CONFIG_SND_H5XXX_AK4535 is not set
-CONFIG_SND_PXA2xx_I2SOUND=y
+CONFIG_SND_H2200=m
+CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
#
# USB devices
#
-CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_AUDIO is not set
#
# PCMCIA devices
#
# CONFIG_SND_VXPOCKET is not set
# CONFIG_SND_PDAUDIOCF is not set
-CONFIG_SND_UDA1380=y
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
#
# Open Sound System
@@ -1201,6 +1107,12 @@ CONFIG_SND_UDA1380=y
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -1212,8 +1124,7 @@ CONFIG_USB=m
#
# Miscellaneous USB options
#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
@@ -1221,7 +1132,7 @@ CONFIG_USB_DEVICEFS=y
#
# USB Host Controller Drivers
#
-CONFIG_USB_ISP116X_HCD=m
+# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_CS=m
@@ -1238,14 +1149,12 @@ CONFIG_USB_SL811_CS=m
#
# may also be needed; see USB_STORAGE Help for more information
#
-# CONFIG_USB_STORAGE is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
@@ -1267,34 +1176,22 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
#
# USB Network Adapters
#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_ZD1201=m
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
@@ -1311,17 +1208,22 @@ CONFIG_USB_MON=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
#
# USB DSL modem support
@@ -1341,18 +1243,20 @@ CONFIG_USB_PXA2XX=y
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
#
# MMC/SD Card support
@@ -1363,88 +1267,92 @@ CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
# CONFIG_MMC_TMIO is not set
CONFIG_MMC_SAMCOP=y
-# CONFIG_MMC_ASIC3 is not set
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
#
CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-# CONFIG_REISERFS_FS_SECURITY is not set
-CONFIG_JFS_FS=m
-CONFIG_JFS_POSIX_ACL=y
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_XFS_FS=m
-CONFIG_XFS_EXPORT=y
-# CONFIG_XFS_QUOTA is not set
-CONFIG_XFS_SECURITY=y
-CONFIG_XFS_POSIX_ACL=y
-# CONFIG_XFS_RT is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
+# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=m
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=m
+CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_RW is not set
+# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-CONFIG_CONFIGFS_FS=m
+# CONFIG_CONFIGFS_FS is not set
#
# Miscellaneous filesystems
@@ -1452,15 +1360,15 @@ CONFIG_CONFIGFS_FS=m
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
-CONFIG_HFSPLUS_FS=m
+# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
@@ -1468,7 +1376,7 @@ CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1478,39 +1386,25 @@ CONFIG_CRAMFS=m
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
-CONFIG_CODA_FS=m
-# CONFIG_CODA_FS_OLD_API is not set
-CONFIG_AFS_FS=m
-CONFIG_RXRPC=m
-CONFIG_9P_FS=m
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
#
# Partition Types
@@ -1522,47 +1416,52 @@ CONFIG_MSDOS_PARTITION=y
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1570,30 +1469,39 @@ CONFIG_NLS_UTF8=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
-CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1605,29 +1513,41 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=y
-CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1637,9 +1557,13 @@ CONFIG_CRYPTO_CRC32C=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
-CONFIG_CRC16=y
+# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h2200/hamcop-h11.patch b/packages/linux/linux-handhelds-2.6/h2200/hamcop-h11.patch
new file mode 100644
index 0000000000..6d96cf435c
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h2200/hamcop-h11.patch
@@ -0,0 +1,20 @@
+--- include/linux/soc/hamcop_base.h.orig 2007-07-20 13:18:06.338543484 +0300
++++ include/linux/soc/hamcop_base.h 2007-07-20 13:19:02.853764103 +0300
+@@ -24,6 +24,8 @@
+ #ifndef HAMCOP_BASE_H
+ #define HAMCOP_BASE_H
+
++#include <linux/gpiodev.h>
++
+ struct hamcop_platform_data
+ {
+ struct gpiodev_ops gpiodev_ops;
+@@ -33,7 +35,7 @@
+
+ u16 clocksleep;
+ u16 pllcontrol;
+-}
++};
+
+ extern void hamcop_set_gpio_a (struct device *dev, u32 mask, u16 bits);
+ extern void hamcop_set_gpio_b (struct device *dev, u32 mask, u16 bits);
diff --git a/packages/linux/linux-handhelds-2.6/h3600/defconfig b/packages/linux/linux-handhelds-2.6/h3600/defconfig
index 7dd8772892..98701e2ab1 100644
--- a/packages/linux/linux-handhelds-2.6/h3600/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h3600/defconfig
@@ -1,15 +1,27 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-hh2
-# Mon Nov 6 21:29:46 2006
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:38 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -24,20 +36,28 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
+CONFIG_SWAP=y
CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -47,20 +67,19 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -68,36 +87,50 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
@@ -105,12 +138,8 @@ CONFIG_ARCH_SA1100=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# SA11x0 Implementations
@@ -125,6 +154,7 @@ CONFIG_SA1100_H3XXX=y
# CONFIG_SA1100_BADGE4 is not set
# CONFIG_SA1100_JORNADA56X is not set
# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
# CONFIG_SA1100_XDA is not set
# CONFIG_SA1100_HACKKIT is not set
# CONFIG_SA1100_LART is not set
@@ -133,9 +163,10 @@ CONFIG_SA1100_H3XXX=y
# CONFIG_SA1100_SIMPAD is not set
# CONFIG_SA1100_SSP is not set
# CONFIG_H3600_SLEEVE is not set
-# CONFIG_SA1100_USB is not set
+CONFIG_SA1100_USB=y
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
CONFIG_IPAQ_H3600_LCD=y
-CONFIG_GPIO_KEYS=y
#
# Linux As Bootloader
@@ -152,34 +183,15 @@ CONFIG_CPU_ABRT_EV4=y
CONFIG_CPU_CACHE_V4WB=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-CONFIG_SA1100_IPAQ=y
-
-#
-# SA1100-based iPAQ
-#
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-CONFIG_IPAQ_MICRO=m
-CONFIG_IPAQ_MICRO_BATTERY=m
-# CONFIG_IPAQ_SAMCOP is not set
-# CONFIG_IPAQ_HAMCOP is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
#
# Bus support
@@ -195,9 +207,10 @@ CONFIG_ISA=y
# Kernel Features
#
CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_NODES_SHIFT=2
CONFIG_SELECT_MEMORY_MODEL=y
@@ -209,6 +222,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
@@ -217,25 +232,27 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=m
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=m
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_SA1100=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_SA1110=y
#
# Floating point emulation
@@ -254,15 +271,16 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -273,7 +291,7 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
+CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
@@ -281,7 +299,10 @@ CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
@@ -292,14 +313,39 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -324,7 +370,6 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -338,14 +383,14 @@ CONFIG_TCP_CONG_BIC=y
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -353,7 +398,7 @@ CONFIG_IRDA_ULTRA=y
#
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
+CONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
@@ -362,7 +407,7 @@ CONFIG_IRDA_FAST_RR=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -381,8 +426,22 @@ CONFIG_IRTTY_SIR=m
#
# FIR device drivers
#
-CONFIG_SA1100_FIR=m
-# CONFIG_BT is not set
+# CONFIG_SA1100_FIR is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
#
@@ -394,7 +453,10 @@ CONFIG_SA1100_FIR=m
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -405,8 +467,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_CMDLINE_PARTS is not set
@@ -415,53 +478,39 @@ CONFIG_MTD_PARTITIONS=y
#
# User Modules And Translation Layers
#
-CONFIG_MTD_CHAR=y
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
#
-CONFIG_MTD_CFI=y
+# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SA1100 is not set
-CONFIG_MTD_IPAQ=y
# CONFIG_MTD_PLATRAM is not set
#
@@ -469,7 +518,9 @@ CONFIG_MTD_IPAQ=y
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -498,16 +549,15 @@ CONFIG_MTD_IPAQ=y
# Plug and Play support
#
# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -521,6 +571,12 @@ CONFIG_BLK_DEV_LOOP=m
#
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
#
# Multi-device support (RAID and LVM)
@@ -544,7 +600,7 @@ CONFIG_BLK_DEV_LOOP=m
# Network device support
#
CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
+# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
@@ -587,14 +643,15 @@ CONFIG_DUMMY=m
# CONFIG_WAN is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
+# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -609,29 +666,55 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=m
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_MICRO=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_IPAQ_MICRO=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -645,6 +728,7 @@ CONFIG_INPUT_TSDEV_SCREEN_Y=320
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -659,24 +743,10 @@ CONFIG_SERIAL_SA1100=y
CONFIG_SERIAL_SA1100_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# L3 serial bus support
-#
-CONFIG_L3=m
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -686,36 +756,24 @@ CONFIG_L3=m
#
# Watchdog Cards
#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-
-#
-# ISA-based Watchdog Cards
-#
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_WDT is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
+# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
#
# SPI support
@@ -731,29 +789,48 @@ CONFIG_SA1100_RTC=y
#
# Hardware Monitoring support
#
-CONFIG_HWMON=m
+# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+CONFIG_IPAQ_MICRO_BATTERY=y
#
-# SoC drivers
+# L3 serial bus support
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_SOC_TSC2101 is not set
+# CONFIG_L3 is not set
#
# Misc devices
#
-CONFIG_BATTERY_MONITOR=m
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_IPAQ_MICRO=y
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# Multimedia Capabilities Port drivers
@@ -763,7 +840,8 @@ CONFIG_BATTERY_MONITOR=m
#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
#
# LED drivers
@@ -772,12 +850,16 @@ CONFIG_BATTERY_MONITOR=m
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
#
# Digital Video Broadcasting Devices
@@ -787,18 +869,30 @@ CONFIG_VIDEO_V4L2=y
#
# Graphics support
#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_FIRMWARE_EDID is not set
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
CONFIG_FB_SA1100=y
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
#
# Console display driver support
@@ -807,60 +901,44 @@ CONFIG_FB_SA1100=y
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
+# CONFIG_LOGO is not set
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=m
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
+# CONFIG_SND is not set
#
-# ALSA ARM devices
+# Open Sound System
#
-# CONFIG_SND_SA11XX_UDA1341 is not set
+# CONFIG_SOUND_PRIME is not set
#
-# Open Sound System
+# HID Devices
#
-# CONFIG_SOUND_PRIME is not set
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -877,32 +955,75 @@ CONFIG_USB_ARCH_HAS_HCD=y
#
# USB Gadget Support
#
-# CONFIG_USB_GADGET is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
#
# MMC/SD Card support
#
-# CONFIG_MMC is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
#
# Real Time Clock
#
CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
#
-# CONFIG_EXT2_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -918,19 +1039,21 @@ CONFIG_DNOTIFY=y
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -945,16 +1068,19 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -964,16 +1090,17 @@ CONFIG_CRAMFS=m
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
+CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
@@ -992,9 +1119,9 @@ CONFIG_MSDOS_PARTITION=y
#
# Native Language Support
#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="utf-8"
-# CONFIG_NLS_CODEPAGE_437 is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
@@ -1015,10 +1142,10 @@ CONFIG_NLS_DEFAULT="utf-8"
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-# CONFIG_NLS_ISO8859_1 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
@@ -1031,7 +1158,12 @@ CONFIG_NLS_ASCII=m
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
#
# Profiling support
@@ -1041,15 +1173,39 @@ CONFIG_NLS_UTF8=m
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_DEBUG_USER is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1061,16 +1217,27 @@ CONFIG_FRAME_POINTER=y
# Cryptographic options
#
CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1078,12 +1245,13 @@ CONFIG_CRYPTO_DES=m
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1093,9 +1261,13 @@ CONFIG_CRYPTO_CRC32C=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h3800/defconfig b/packages/linux/linux-handhelds-2.6/h3800/defconfig
new file mode 100644
index 0000000000..6193ee260c
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h3800/defconfig
@@ -0,0 +1,1270 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:38 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+CONFIG_SA1100_H3800=y
+CONFIG_SA1100_H3XXX=y
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
+# CONFIG_SA1100_XDA is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+CONFIG_SA1100_USB=y
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_SA1110=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_SA1100_FIR is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC2=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ASIC2=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_ASIC2=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_HTC_ASIC2=y
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h3900/defconfig b/packages/linux/linux-handhelds-2.6/h3900/defconfig
index 52b2c8741e..93a03a3b1d 100644
--- a/packages/linux/linux-handhelds-2.6/h3900/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h3900/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh8
-# Mon Jan 22 05:03:33 2007
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:39 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -22,6 +28,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
@@ -32,6 +39,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -39,7 +47,9 @@ CONFIG_SYSVIPC=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
@@ -78,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -112,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -124,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
#
# Intel PXA2xx Implementations
@@ -155,13 +171,19 @@ CONFIG_IPAQ_H3900_BATTERY=y
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA25x=y
@@ -170,12 +192,6 @@ CONFIG_PXA25x=y
# Linux As Bootloader
#
# CONFIG_LAB is not set
-CONFIG_PXA_IPAQ=y
-
-#
-# XScale-based iPAQ
-#
-CONFIG_IPAQ_HANDHELD=y
#
# Processor Type
@@ -194,17 +210,9 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
#
# Bus support
@@ -213,21 +221,12 @@ CONFIG_KEXEC=y
#
# PCCARD (PCMCIA/CardBus) support
#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_PCMCIA_PXA2XX is not set
+# CONFIG_PCCARD is not set
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
CONFIG_AEABI=y
@@ -242,6 +241,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -251,11 +251,26 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -280,10 +295,10 @@ CONFIG_BINFMT_ELF=y
#
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -294,12 +309,9 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
+CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
@@ -321,11 +333,12 @@ CONFIG_IP_PNP=y
# CONFIG_INET_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -342,25 +355,15 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -398,8 +401,65 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
#
@@ -413,6 +473,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -423,7 +484,80 @@ CONFIG_FW_LOADER=y
#
# Memory Technology Devices (MTD)
#
-# CONFIG_MTD is not set
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
#
# Parallel port support
@@ -433,6 +567,7 @@ CONFIG_FW_LOADER=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -440,11 +575,7 @@ CONFIG_FW_LOADER=y
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=4
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -486,7 +617,55 @@ CONFIG_BLK_DEV_INITRD=y
#
# Network device support
#
-# CONFIG_NETDEVICES is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
@@ -509,6 +688,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -520,9 +700,11 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_ASIC2=y
# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
@@ -534,14 +716,15 @@ CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-# CONFIG_TOUCHSCREEN_WM9712 is not set
-# CONFIG_TOUCHSCREEN_WM9713 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
CONFIG_TOUCHSCREEN_ASIC2=y
-# CONFIG_INPUT_MISC is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -569,8 +752,10 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=32
@@ -589,17 +774,7 @@ CONFIG_LEGACY_PTY_COUNT=32
# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -663,11 +838,12 @@ CONFIG_I2C_PXA=m
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-
-#
-# Hardware Monitoring - Battery
-#
-# CONFIG_BATTERY_MONITOR is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
#
# L3 serial bus support
@@ -675,31 +851,34 @@ CONFIG_I2C_PXA=m
# CONFIG_L3 is not set
#
-# SoC drivers
-#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-CONFIG_HTC_ASIC2=y
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+CONFIG_ADC=y
# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
CONFIG_ADC_ASIC2=y
-# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_HTC_ASIC2=y
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
@@ -715,7 +894,11 @@ CONFIG_LEDS_CLASS=y
#
# LED Triggers
#
-# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
@@ -730,15 +913,25 @@ CONFIG_LEDS_CLASS=y
#
# Graphics support
#
-# CONFIG_FIRMWARE_EDID is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
@@ -770,12 +963,6 @@ CONFIG_FONT_MINI_4x6=y
# Logo configuration
#
# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
#
# Sound
@@ -785,7 +972,38 @@ CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-# CONFIG_SND is not set
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
#
# Open Sound System
@@ -793,6 +1011,12 @@ CONFIG_SOUND=y
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -831,6 +1055,7 @@ CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
@@ -839,7 +1064,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -864,6 +1088,7 @@ CONFIG_RTC_INTF_DEV=y
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -871,7 +1096,6 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
@@ -940,6 +1164,18 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -963,8 +1199,7 @@ CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -981,7 +1216,7 @@ CONFIG_MSDOS_PARTITION=y
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
@@ -1022,6 +1257,11 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1033,32 +1273,35 @@ CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
-# CONFIG_HEADERS_CHECK is not set
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
CONFIG_DEBUG_USER=y
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1071,9 +1314,11 @@ CONFIG_DEBUG_ERRORS=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
@@ -1082,9 +1327,13 @@ CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1092,12 +1341,13 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1107,6 +1357,7 @@ CONFIG_CRYPTO_DEFLATE=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
@@ -1114,3 +1365,5 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h4000/defconfig b/packages/linux/linux-handhelds-2.6/h4000/defconfig
index f17812c9f4..be5a4e8fa7 100644
--- a/packages/linux/linux-handhelds-2.6/h4000/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h4000/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh8
-# Mon Jan 22 05:03:36 2007
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:39 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -22,6 +28,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
@@ -32,6 +39,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -39,7 +47,9 @@ CONFIG_SYSVIPC=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
@@ -78,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -112,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -124,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
#
# Intel PXA2xx Implementations
@@ -141,16 +157,15 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_H2200 is not set
# CONFIG_MACH_H3900 is not set
CONFIG_MACH_H4000=y
-# CONFIG_IPAQ_H4000_SERIAL is not set
-CONFIG_IPAQ_H4000_UDC=y
+CONFIG_MACH_H4300=y
+CONFIG_IPAQ_H4000_IRDA=y
CONFIG_IPAQ_H4000_LCD=y
CONFIG_IPAQ_H4000_BACKLIGHT=y
-CONFIG_IPAQ_H4000_TS=y
+CONFIG_IPAQ_H4000_PCMCIA=y
CONFIG_IPAQ_H4000_BUTTONS=y
-CONFIG_IPAQ_H4000_BATT=y
CONFIG_IPAQ_H4000_LEDS=y
-CONFIG_IPAQ_H4000_BT=y
-CONFIG_IPAQ_H4300_KBD=m
+CONFIG_IPAQ_H4000_BT=m
+CONFIG_IPAQ_H4300_KBD=y
# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_HX2750 is not set
# CONFIG_ARCH_H5400 is not set
@@ -162,13 +177,19 @@ CONFIG_IPAQ_H4300_KBD=m
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA25x=y
@@ -178,12 +199,6 @@ CONFIG_PXA_SSP=y
# Linux As Bootloader
#
# CONFIG_LAB is not set
-CONFIG_PXA_IPAQ=y
-
-#
-# XScale-based iPAQ
-#
-CONFIG_IPAQ_HANDHELD=y
#
# Processor Type
@@ -202,17 +217,9 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
#
# Bus support
@@ -230,12 +237,12 @@ CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
-# CONFIG_PCMCIA_PXA2XX is not set
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
CONFIG_AEABI=y
@@ -250,6 +257,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -259,11 +267,26 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -288,10 +311,10 @@ CONFIG_BINFMT_ELF=y
#
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -302,12 +325,9 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
+CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
@@ -329,11 +349,12 @@ CONFIG_IP_PNP=y
# CONFIG_INET_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -350,25 +371,15 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -406,9 +417,73 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -421,6 +496,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -431,7 +507,90 @@ CONFIG_FW_LOADER=y
#
# Memory Technology Devices (MTD)
#
-# CONFIG_MTD is not set
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
#
# Parallel port support
@@ -441,6 +600,7 @@ CONFIG_FW_LOADER=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -448,11 +608,7 @@ CONFIG_FW_LOADER=y
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=4
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -494,7 +650,90 @@ CONFIG_BLK_DEV_INITRD=y
#
# Network device support
#
-# CONFIG_NETDEVICES is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+# CONFIG_ACX_MEM is not set
+CONFIG_ACX_CS=y
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
@@ -517,6 +756,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -528,16 +768,29 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_NAVPOINT is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -565,8 +818,10 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=32
@@ -585,10 +840,7 @@ CONFIG_LEGACY_PTY_COUNT=32
# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
#
# PCMCIA character devices
@@ -659,44 +911,48 @@ CONFIG_I2C_PXA=m
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
#
-# Hardware Monitoring - Battery
+# L3 serial bus support
#
-# CONFIG_BATTERY_MONITOR is not set
+# CONFIG_L3 is not set
#
-# L3 serial bus support
+# Misc devices
#
-# CONFIG_L3 is not set
#
-# SoC drivers
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
# CONFIG_SOC_MQ11XX is not set
# CONFIG_SOC_T7L66XB is not set
# CONFIG_SOC_TC6387XB is not set
# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_ASIC3_DS1WM is not set
# CONFIG_SOC_TSC2101 is not set
# CONFIG_SOC_TSC2200 is not set
#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_TIFM_CORE is not set
-
-#
# LED devices
#
CONFIG_NEW_LEDS=y
@@ -710,7 +966,11 @@ CONFIG_LEDS_ASIC3=y
#
# LED Triggers
#
-# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
@@ -725,15 +985,25 @@ CONFIG_LEDS_ASIC3=y
#
# Graphics support
#
-# CONFIG_FIRMWARE_EDID is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
@@ -765,12 +1035,6 @@ CONFIG_FONT_MINI_4x6=y
# Logo configuration
#
# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
#
# Sound
@@ -808,6 +1072,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_H4000=m
CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
#
# PCMCIA devices
@@ -827,6 +1092,12 @@ CONFIG_SND_UDA1380=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -865,6 +1136,7 @@ CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
#
# MMC/SD Card support
@@ -873,7 +1145,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -898,6 +1169,7 @@ CONFIG_RTC_INTF_DEV=y
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -905,7 +1177,6 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
@@ -974,6 +1245,7 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -997,8 +1269,7 @@ CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1015,7 +1286,7 @@ CONFIG_MSDOS_PARTITION=y
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
@@ -1056,6 +1327,11 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1067,32 +1343,35 @@ CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
-# CONFIG_HEADERS_CHECK is not set
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
CONFIG_DEBUG_USER=y
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1105,9 +1384,11 @@ CONFIG_DEBUG_ERRORS=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
@@ -1116,9 +1397,13 @@ CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1126,12 +1411,13 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1141,10 +1427,15 @@ CONFIG_CRYPTO_DEFLATE=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h5000/defconfig b/packages/linux/linux-handhelds-2.6/h5000/defconfig
new file mode 100644
index 0000000000..5648da3d69
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/h5000/defconfig
@@ -0,0 +1,1329 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:40 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+CONFIG_ARCH_H5400=y
+CONFIG_IPAQ_H5400_BT=m
+CONFIG_IPAQ_H5400_LCD=y
+CONFIG_IPAQ_H5400_BL=y
+CONFIG_IPAQ_H5400_POWER=y
+CONFIG_IPAQ_H5400_LEDS=y
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIODEV_KEYS=y
+CONFIG_GPIODEV_DIAGONAL=y
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_H5400_BUZZER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_SAMCOP=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+CONFIG_SOC_SAMCOP=y
+# CONFIG_SOC_HAMCOP is not set
+CONFIG_SOC_SAMCOP_DMA=y
+# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SAMCOP=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6/htcalpine/defconfig
new file mode 100644
index 0000000000..5baca8a55f
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcalpine/defconfig
@@ -0,0 +1,1277 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:41 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+CONFIG_MACH_HTCALPINE=y
+CONFIG_HTCALPINE_CPLD=y
+CONFIG_HTCALPINE_PHONE=m
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/htcapache/defconfig b/packages/linux/linux-handhelds-2.6/htcapache/defconfig
new file mode 100644
index 0000000000..962fc2628c
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcapache/defconfig
@@ -0,0 +1,1363 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:41 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_BOARD_IRQ_MAP_SMALL=y
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+CONFIG_MACH_HTCAPACHE=y
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+CONFIG_PXA27x_VOLTAGE=y
+CONFIG_PXA27x_VOLTAGE_MAX158xx=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIODEV_KEYS=y
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+CONFIG_ADC_AD7877=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCAPACHE=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_PCF8563=m
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig
index b9ce6faf0c..61bd7efb11 100644
--- a/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig
+++ b/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh6
-# Wed Dec 20 17:26:40 2006
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:42 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -22,6 +28,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
@@ -32,20 +39,22 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
-# CONFIG_MINIMAL_OOPS is not set
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
+# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
@@ -58,8 +67,6 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_RT_MUTEXES=y
@@ -81,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -115,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -127,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
#
# Intel PXA2xx Implementations
@@ -155,32 +168,36 @@ CONFIG_ARCH_PXA=y
CONFIG_MACH_BLUEANGEL=y
CONFIG_MACH_BLUEANGEL_LCD=y
CONFIG_MACH_BLUEANGEL_BACKLIGHT=y
-CONFIG_MACH_BLUEANGEL_DS1WM=m
-# CONFIG_MACH_BLUEANGEL_PCMCIA is not set
-CONFIG_MACH_BLUEANGEL_SUSPEND=m
-# CONFIG_MACH_BLUEANGEL_LEDS is not set
-CONFIG_MACH_BLUEANGEL_KEYPAD=m
-# CONFIG_MACH_BLUEANGEL_AUDIO is not set
-CONFIG_MACH_BLUEANGEL_BATTERY=m
-CONFIG_MACH_BLUEANGEL_ROM=m
-CONFIG_MACH_BLUEANGEL_DPRAM=m
-CONFIG_MACH_BLUEANGEL_UDC=y
+CONFIG_MACH_BLUEANGEL_DS1WM=y
+CONFIG_MACH_BLUEANGEL_PCMCIA=y
+CONFIG_MACH_BLUEANGEL_SUSPEND=y
+CONFIG_MACH_BLUEANGEL_LEDS=y
+CONFIG_MACH_BLUEANGEL_ASIC3_LEDS=y
+CONFIG_MACH_BLUEANGEL_KEYPAD=y
+CONFIG_MACH_BLUEANGEL_POWER=y
+CONFIG_MACH_BLUEANGEL_ROM=y
+CONFIG_MACH_BLUEANGEL_DPRAM=y
+CONFIG_MACH_BLUEANGEL_PHONE=m
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA25x=y
+CONFIG_PXA26x=y
CONFIG_PXA_SSP=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
#
# Linux As Bootloader
@@ -204,37 +221,36 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
+# Bus support
#
#
-# Bus support
+# PCCARD (PCMCIA/CardBus) support
#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
#
-# PCCARD (PCMCIA/CardBus) support
+# PC-card bridges
#
-# CONFIG_PCCARD is not set
+CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -245,6 +261,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -252,13 +269,28 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -277,16 +309,16 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -297,96 +329,61 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
+CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_NET_KEY=m
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
# CONFIG_IP_NF_QUEUE is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -403,10 +400,9 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
+# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
-CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -430,9 +426,9 @@ CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -459,40 +455,36 @@ CONFIG_IRTTY_SIR=y
#
# Old SIR device drivers
#
-CONFIG_IRPORT_SIR=m
+# CONFIG_IRPORT_SIR is not set
#
# Old Serial dongle support
#
-# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
CONFIG_PXA_FICP=y
-# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
-# CONFIG_BT_BNEP_MC_FILTER is not set
-# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
-# CONFIG_BT_HCIUSB is not set
CONFIG_BT_HCIUART=m
-# CONFIG_BT_HCIUART_H4 is not set
-# CONFIG_BT_HCIUART_BCSP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
CONFIG_WIRELESS_EXT=y
@@ -508,6 +500,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -520,36 +513,32 @@ CONFIG_FW_LOADER=y
#
CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=1
-CONFIG_MTD_CONCAT=m
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
-CONFIG_NFTL=y
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=y
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
#
-CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI=m
# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
@@ -560,11 +549,10 @@ CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_INTELEXT=m
# CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_CFI_UTIL=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
@@ -577,17 +565,18 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
# CONFIG_MTD_SHARP_SL is not set
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -600,17 +589,7 @@ CONFIG_MTD_CFI_UTIL=y
#
# NAND Flash Device Drivers
#
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_DISKONCHIP=y
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND is not set
#
# OneNAND Flash Device Drivers
@@ -625,17 +604,15 @@ CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-CONFIG_BLK_DEV_NBD=m
-# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -681,7 +658,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
+# CONFIG_TUN is not set
#
# PHY device support
@@ -714,22 +691,48 @@ CONFIG_NET_RADIO=y
# Obsolete Wireless cards support (pre-802.11)
#
# CONFIG_STRIP is not set
-# CONFIG_USB_ZD1201 is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_HOSTAP is not set
-# CONFIG_ACX is not set
+CONFIG_ACX=m
+# CONFIG_ACX_MEM is not set
+CONFIG_ACX_CS=y
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=m
@@ -754,11 +757,10 @@ CONFIG_INPUT=y
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=m
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -770,23 +772,31 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIO_KEYS is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-# CONFIG_INPUT_MOUSE is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_TSC2200=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-# CONFIG_TOUCHSCREEN_WM9712 is not set
-# CONFIG_TOUCHSCREEN_WM9713 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_TOUCHSCREEN_TSC2200=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -812,11 +822,15 @@ CONFIG_HW_CONSOLE=y
# Non-8250 serial port support
#
CONFIG_SERIAL_PXA=y
-# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -826,28 +840,20 @@ CONFIG_UNIX98_PTYS=y
#
# Watchdog Cards
#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SA1100_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_HW_RANDOM=y
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
-CONFIG_SA1100_RTC=y
+# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
+CONFIG_TIHTC=m
#
-# Ftape, the floppy tape device driver
+# PCMCIA character devices
#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -858,8 +864,8 @@ CONFIG_SA1100_RTC=y
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -871,8 +877,7 @@ CONFIG_I2C_CHARDEV=y
#
# I2C Hardware Bus support
#
-# CONFIG_I2C_ELV is not set
-CONFIG_I2C_PXA=y
+CONFIG_I2C_PXA=m
# CONFIG_I2C_PXA_SLAVE is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
@@ -899,78 +904,93 @@ CONFIG_I2C_PXA=y
#
# SPI support
#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
#
-# SPI Master Controller Drivers
+# Dallas's 1-wire bus
#
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_PXA2XX is not set
+CONFIG_W1=y
#
-# SPI Protocol Masters
+# 1-wire Bus Masters
#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
#
-# Dallas's 1-wire bus
+# 1-wire Slaves
#
-# CONFIG_W1 is not set
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
#
-# Hardware Monitoring - Battery
+# L3 serial bus support
#
-CONFIG_BATTERY_MONITOR=y
+# CONFIG_L3 is not set
#
-# L3 serial bus support
+# Misc devices
#
-CONFIG_L3=m
#
-# SoC drivers
+# Multimedia Capabilities Port drivers
#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+CONFIG_ADC_TSC2200_SSP=y
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
# CONFIG_SOC_MQ11XX is not set
# CONFIG_SOC_T7L66XB is not set
# CONFIG_SOC_TC6387XB is not set
# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
# CONFIG_SOC_TSC2101 is not set
CONFIG_SOC_TSC2200=y
#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_TIFM_CORE is not set
-
-#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
#
# LED drivers
#
+CONFIG_LEDS_ASIC3=y
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
@@ -981,20 +1001,29 @@ CONFIG_SOC_TSC2200=y
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_PXA is not set
@@ -1025,16 +1054,7 @@ CONFIG_FONT_MINI_4x6=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_LOGO is not set
#
# Sound
@@ -1044,10 +1064,14 @@ CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=m
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
@@ -1066,142 +1090,95 @@ CONFIG_SND_VERBOSE_PROCFS=y
# ALSA ARM devices
#
# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
#
-# USB devices
+# PCMCIA devices
#
-# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
#
# SoC audio support
#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-# CONFIG_USB_PRINTER is not set
+CONFIG_SND_SOC=m
#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+# SoC Platforms
#
#
-# may also be needed; see USB_STORAGE Help for more information
+# SoC Audio for the Atmel AT91
#
-# CONFIG_USB_LIBUSUAL is not set
#
-# USB Input Devices
+# SoC Audio for the Intel PXA2xx
#
-# CONFIG_USB_HID is not set
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SSP=m
+# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
+CONFIG_SND_PXA2XX_SOC_BLUEANGEL=m
+# CONFIG_SND_PXA2XX_SOC_H5000 is not set
#
-# USB HID Boot Protocol drivers
+# SoC Audio for the Freescale i.MX
#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
#
-# USB Imaging devices
+# SoC Audio for the Samsung S3C24XX
#
-# CONFIG_USB_MDC800 is not set
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
+# Open Sound System
#
+# CONFIG_SOUND_PRIME is not set
#
-# USB Serial Converter support
+# HID Devices
#
-# CONFIG_USB_SERIAL is not set
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
#
-# USB Miscellaneous drivers
+# USB support
#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
#
-# USB DSL modem support
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=m
-CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
@@ -1209,17 +1186,17 @@ CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
-CONFIG_USB_GADGET_DUMMY_HCD=y
-CONFIG_USB_DUMMY_HCD=m
-CONFIG_USB_GADGET_DUALSPEED=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
#
# MMC/SD Card support
@@ -1228,7 +1205,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -1237,7 +1213,35 @@ CONFIG_MMC_ASIC3=y
# Real Time Clock
#
CONFIG_RTC_LIB=y
-# CONFIG_RTC_CLASS is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -1260,13 +1264,13 @@ CONFIG_FS_MBCACHE=y
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
+# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
@@ -1307,17 +1311,19 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1327,25 +1333,20 @@ CONFIG_CRAMFS=m
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_LOCKD=m
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
+CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1362,47 +1363,52 @@ CONFIG_MSDOS_PARTITION=y
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1410,36 +1416,39 @@ CONFIG_NLS_UTF8=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
+CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
-# CONFIG_HEADERS_CHECK is not set
# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1456,31 +1465,36 @@ CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1490,12 +1504,13 @@ CONFIG_CRYPTO_CRC32C=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_DEC16=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig
new file mode 100644
index 0000000000..fbca916965
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig
@@ -0,0 +1,1275 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:42 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+CONFIG_MACH_HIMALAYA=y
+# CONFIG_MACH_HIMALAYA_ASIC3 is not set
+# CONFIG_MACH_HIMALAYA_ROM is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA26x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/htcsable/defconfig b/packages/linux/linux-handhelds-2.6/htcsable/defconfig
new file mode 100644
index 0000000000..897c9d88d9
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcsable/defconfig
@@ -0,0 +1,1387 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:43 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+CONFIG_MACH_HW6900=y
+CONFIG_HTCSABLE_LCD=y
+CONFIG_HTCSABLE_BACKLIGHT=y
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_HTCSABLE=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCSABLE=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig
index ad5cce380d..9441aca7b2 100644
--- a/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig
+++ b/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh6
-# Sat Dec 16 20:23:29 2006
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:43 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -22,33 +28,36 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
-CONFIG_POSIX_MQUEUE=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
-# CONFIG_MINIMAL_OOPS is not set
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
+# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -58,8 +67,6 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_USELIB=y
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_RT_MUTEXES=y
@@ -81,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -89,12 +98,12 @@ CONFIG_BLOCK=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
@@ -115,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -127,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
#
# Intel PXA2xx Implementations
@@ -154,10 +167,11 @@ CONFIG_HTCUNIVERSAL_UDC=y
CONFIG_HTCUNIVERSAL_POWER=y
CONFIG_HTCUNIVERSAL_BACKLIGHT=y
CONFIG_HTCUNIVERSAL_LCD=y
-CONFIG_HTCUNIVERSAL_TS2=y
+CONFIG_HTCUNIVERSAL_TS2=m
CONFIG_HTCUNIVERSAL_BUTTONS=y
-CONFIG_HTCUNIVERSAL_BLUETOOTH=y
-CONFIG_HTCUNIVERSAL_PHONE=y
+CONFIG_HTCUNIVERSAL_BLUETOOTH=m
+CONFIG_HTCUNIVERSAL_ASIC3_LEDS=y
+CONFIG_HTCUNIVERSAL_PHONE=m
CONFIG_HTCUNIVERSAL_AK4641=m
# CONFIG_MACH_HTCALPINE is not set
# CONFIG_MACH_MAGICIAN is not set
@@ -165,19 +179,23 @@ CONFIG_HTCUNIVERSAL_AK4641=m
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
+# CONFIG_PXA27x_VOLTAGE is not set
#
# Linux As Bootloader
@@ -199,22 +217,11 @@ CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
-# CONFIG_ARM_THUMB is not set
+CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
#
# Bus support
@@ -228,8 +235,8 @@ CONFIG_XSCALE_PMU=y
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
@@ -243,6 +250,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -250,13 +258,28 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -280,11 +303,11 @@ CONFIG_BINFMT_ELF=y
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -298,16 +321,13 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
@@ -317,21 +337,42 @@ CONFIG_IP_PNP_DHCP=y
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -369,14 +410,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
+CONFIG_IRLAN=y
# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -384,7 +425,7 @@ CONFIG_IRDA_ULTRA=y
#
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
+CONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
@@ -393,7 +434,7 @@ CONFIG_IRDA_FAST_RR=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -412,10 +453,7 @@ CONFIG_IRTTY_SIR=m
#
# FIR device drivers
#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
+CONFIG_PXA_FICP=y
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -429,14 +467,9 @@ CONFIG_BT_HIDP=m
#
# Bluetooth device drivers
#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
CONFIG_WIRELESS_EXT=y
@@ -451,6 +484,8 @@ CONFIG_WIRELESS_EXT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -461,7 +496,80 @@ CONFIG_FW_LOADER=y
#
# Memory Technology Devices (MTD)
#
-# CONFIG_MTD is not set
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
#
# Parallel port support
@@ -471,17 +579,15 @@ CONFIG_FW_LOADER=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -494,41 +600,8 @@ CONFIG_BLK_DEV_LOOP=y
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
+# CONFIG_SCSI is not set
# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_PROC_FS is not set
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
@@ -570,7 +643,6 @@ CONFIG_NETDEVICES=y
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=y
#
# Ethernet (1000 Mbit)
@@ -594,11 +666,10 @@ CONFIG_NET_RADIO=y
# Obsolete Wireless cards support (pre-802.11)
#
# CONFIG_STRIP is not set
-# CONFIG_USB_ZD1201 is not set
# CONFIG_HOSTAP is not set
CONFIG_ACX=m
-# CONFIG_ACX_USB is not set
CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
CONFIG_ACX_HTCUNIVERSAL=m
#
@@ -612,8 +683,8 @@ CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPPOE=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=m
# CONFIG_SHAPER is not set
@@ -640,6 +711,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -651,21 +723,35 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_ASIC3=y
CONFIG_KEYBOARD_PXA27x=y
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=m
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
@@ -686,11 +772,15 @@ CONFIG_HW_CONSOLE=y
# Non-8250 serial port support
#
CONFIG_SERIAL_PXA=y
-# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -701,15 +791,12 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -720,20 +807,19 @@ CONFIG_HW_RANDOM=y
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
#
-CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOBIT is not set
# CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set
#
# I2C Hardware Bus support
#
-# CONFIG_I2C_ELV is not set
CONFIG_I2C_PXA=m
# CONFIG_I2C_PXA_SLAVE is not set
# CONFIG_I2C_OCORES is not set
@@ -761,73 +847,39 @@ CONFIG_I2C_PXA=m
#
# SPI support
#
-CONFIG_SPI=y
-CONFIG_SPI_MASTER=y
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
#
-# SPI Master Controller Drivers
+# Dallas's 1-wire bus
#
-CONFIG_SPI_BITBANG=y
-# CONFIG_SPI_PXA2XX is not set
+CONFIG_W1=y
#
-# SPI Protocol Masters
+# 1-wire Bus Masters
#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
#
-# Dallas's 1-wire bus
+# 1-wire Slaves
#
-# CONFIG_W1 is not set
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
-CONFIG_HWMON=y
+# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Hardware Monitoring - Battery
-#
-CONFIG_BATTERY_MONITOR=y
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
#
# L3 serial bus support
@@ -835,42 +887,53 @@ CONFIG_BATTERY_MONITOR=y
# CONFIG_L3 is not set
#
-# SoC drivers
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
# CONFIG_SOC_MQ11XX is not set
# CONFIG_SOC_T7L66XB is not set
# CONFIG_SOC_TC6387XB is not set
# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
# CONFIG_SOC_TSC2101 is not set
# CONFIG_SOC_TSC2200 is not set
#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_TIFM_CORE is not set
-
-#
# LED devices
#
-# CONFIG_NEW_LEDS is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
#
# LED drivers
#
+CONFIG_LEDS_ASIC3=y
#
# LED Triggers
#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
@@ -881,21 +944,29 @@ CONFIG_HTC_ASIC3=y
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
@@ -912,8 +983,8 @@ CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
@@ -926,21 +997,12 @@ CONFIG_FONT_8x16=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_LOGO is not set
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
@@ -955,7 +1017,7 @@ CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PROCFS is not set
+CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
@@ -973,11 +1035,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_HTCUNIVERSAL=m
CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_RECON is not set
#
# SoC audio support
@@ -990,192 +1048,51 @@ CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
+# CONFIG_USB is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-CONFIG_USB_USBNET=y
-CONFIG_USB_NET_CDCETHER=y
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
# USB Gadget Support
#
-CONFIG_USB_GADGET=m
+CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
+CONFIG_USB_PXA27X=y
# CONFIG_USB_PXA27X_DMA is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FILE_STORAGE is not set
-CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
@@ -1184,7 +1101,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -1193,19 +1109,23 @@ CONFIG_MMC_ASIC3=y
# Real Time Clock
#
CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=m
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
#
# RTC interfaces
#
-CONFIG_RTC_INTF_SYSFS=m
-CONFIG_RTC_INTF_PROC=m
-CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -1213,13 +1133,10 @@ CONFIG_RTC_INTF_DEV=m
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=m
+CONFIG_RTC_DRV_SA1100=y
# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
@@ -1235,19 +1152,19 @@ CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
+# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
+# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
+# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
@@ -1261,8 +1178,8 @@ CONFIG_FUSE_FS=m
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=850
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
@@ -1287,7 +1204,8 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-CONFIG_CRAMFS=y
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1297,23 +1215,20 @@ CONFIG_CRAMFS=y
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_DIRECTIO=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="utf8"
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1334,7 +1249,7 @@ CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
@@ -1343,7 +1258,7 @@ CONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
-CONFIG_NLS_CODEPAGE_865=y
+# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
@@ -1352,8 +1267,8 @@ CONFIG_NLS_CODEPAGE_865=y
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
@@ -1365,12 +1280,17 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1378,17 +1298,39 @@ CONFIG_NLS_UTF8=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_FS is not set
-CONFIG_FRAME_POINTER=y
# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1405,6 +1347,7 @@ CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
@@ -1413,22 +1356,27 @@ CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
-CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1438,6 +1386,7 @@ CONFIG_CRYPTO_MICHAEL_MIC=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
@@ -1445,3 +1394,5 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig
new file mode 100644
index 0000000000..4e12808e75
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig
@@ -0,0 +1,1275 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:44 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
+CONFIG_SA1100_XDA=y
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+CONFIG_SA1100_USB=y
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_SA1110=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_SA1100_FIR is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_SA1100=y
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/defconfig b/packages/linux/linux-handhelds-2.6/hx4700/defconfig
index 8914f07dbb..ee58777be3 100644
--- a/packages/linux/linux-handhelds-2.6/hx4700/defconfig
+++ b/packages/linux/linux-handhelds-2.6/hx4700/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh3
-# Wed Dec 6 04:42:47 2006
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:40 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -33,20 +39,22 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
-# CONFIG_MINIMAL_OOPS is not set
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
+# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
@@ -59,8 +67,6 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-# CONFIG_USELIB is not set
-CONFIG_CORE_DUMP=y
CONFIG_SLAB=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_RT_MUTEXES=y
@@ -82,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -116,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -128,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
#
# Intel PXA2xx Implementations
@@ -148,11 +160,11 @@ CONFIG_ARCH_PXA=y
CONFIG_MACH_H4700=y
CONFIG_HX4700_NAVPOINT=y
CONFIG_HX4700_CORE=y
-CONFIG_HX4700_TS=y
-CONFIG_HX4700_BLUETOOTH=y
+CONFIG_HX4700_BLUETOOTH=m
CONFIG_HX4700_PCMCIA=y
CONFIG_HX4700_LCD=y
CONFIG_HX4700_LEDS=y
+CONFIG_HX4700_POWER2=y
# CONFIG_MACH_HX2750 is not set
# CONFIG_ARCH_H5400 is not set
# CONFIG_MACH_HIMALAYA is not set
@@ -163,20 +175,24 @@ CONFIG_HX4700_LEDS=y
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-CONFIG_IWMMXT=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
+CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
+# CONFIG_PXA27x_VOLTAGE is not set
#
# Linux As Bootloader
@@ -200,27 +216,9 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-CONFIG_PXA_IPAQ=y
-
-#
-# XScale-based iPAQ
-#
-CONFIG_IPAQ_HANDHELD=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
#
# Bus support
@@ -230,7 +228,7 @@ CONFIG_IPAQ_HANDHELD=y
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA_DEBUG=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
@@ -244,7 +242,7 @@ CONFIG_PCMCIA_PXA2XX=y
# Kernel Features
#
CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
@@ -258,6 +256,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -267,6 +266,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
@@ -279,7 +280,7 @@ CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
@@ -308,10 +309,11 @@ CONFIG_BINFMT_ELF=y
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
+# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -325,10 +327,7 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_NET_KEY=m
+# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -337,84 +336,49 @@ CONFIG_IP_PNP=y
# CONFIG_IP_PNP_DHCP is not set
# CONFIG_IP_PNP_BOOTP is not set
# CONFIG_IP_PNP_RARP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_TUNNEL=m
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
# CONFIG_IP_NF_QUEUE is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -431,10 +395,9 @@ CONFIG_IP_NF_IRC=m
#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
+# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
-CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -453,14 +416,14 @@ CONFIG_LLC=m
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y
#
@@ -477,7 +440,7 @@ CONFIG_IRDA_DEBUG=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -487,21 +450,20 @@ CONFIG_IRTTY_SIR=m
#
# Old SIR device drivers
#
-CONFIG_IRPORT_SIR=m
+# CONFIG_IRPORT_SIR is not set
#
# Old Serial dongle support
#
-# CONFIG_DONGLE_OLD is not set
#
# FIR device drivers
#
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
-# CONFIG_PXA_FICP is not set
+CONFIG_PXA_FICP=y
# CONFIG_MCS_FIR is not set
-CONFIG_BT=y
+CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
@@ -515,7 +477,7 @@ CONFIG_BT_HIDP=m
# Bluetooth device drivers
#
# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIBCM203X is not set
@@ -524,14 +486,9 @@ CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIDTL1 is not set
# CONFIG_BT_HCIBT3C is not set
# CONFIG_BT_HCIBLUECARD is not set
-CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
-CONFIG_IEEE80211=y
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=y
-CONFIG_IEEE80211_CRYPT_CCMP=y
-CONFIG_IEEE80211_CRYPT_TKIP=y
-# CONFIG_IEEE80211_SOFTMAC is not set
+# CONFIG_IEEE80211 is not set
CONFIG_WIRELESS_EXT=y
#
@@ -545,6 +502,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -556,7 +514,8 @@ CONFIG_FW_LOADER=y
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
@@ -567,6 +526,7 @@ CONFIG_MTD_PARTITIONS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
@@ -621,7 +581,9 @@ CONFIG_MTD_CFI_UTIL=y
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -649,102 +611,52 @@ CONFIG_MTD_CFI_UTIL=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=m
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_CDROM_PKTCDVD_BUFFERS=8
-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
-CONFIG_ATA_OVER_ETH=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
+CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECS=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
#
# IDE chipset support/bugfixes
#
-CONFIG_IDE_GENERIC=m
+CONFIG_IDE_GENERIC=y
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
+# CONFIG_SCSI is not set
# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
@@ -776,7 +688,7 @@ CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
+# CONFIG_TUN is not set
#
# PHY device support
@@ -786,7 +698,6 @@ CONFIG_TUN=m
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=m
#
# Ethernet (1000 Mbit)
@@ -821,52 +732,40 @@ CONFIG_NET_RADIO=y
#
# Wireless 802.11b ISA/PCI cards support
#
-CONFIG_HERMES=m
+# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
#
# Wireless 802.11b Pcmcia/Cardbus cards support
#
-CONFIG_PCMCIA_HERMES=m
-# CONFIG_PCMCIA_SPECTRUM is not set
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_USB_ZD1201=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-CONFIG_HOSTAP_CS=m
-CONFIG_ACX=y
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
# CONFIG_ACX_USB is not set
CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
CONFIG_ACX_HX4700=m
CONFIG_NET_WIRELESS=y
#
# PCMCIA network device support
#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_NET_PCMCIA is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=m
@@ -889,45 +788,52 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=m
+# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
-# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC3=y
# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
CONFIG_MOUSE_NAVPOINT=y
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
#
-CONFIG_SERIO=m
-CONFIG_SERIO_SERPORT=m
-CONFIG_SERIO_LIBPS2=m
-CONFIG_SERIO_RAW=m
+# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
@@ -942,11 +848,7 @@ CONFIG_HW_CONSOLE=y
#
# Serial drivers
#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250 is not set
#
# Non-8250 serial port support
@@ -954,10 +856,13 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -967,28 +872,13 @@ CONFIG_UNIX98_PTYS=y
#
# Watchdog Cards
#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_SA1100_WATCHDOG=m
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_HW_RANDOM=y
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
#
# PCMCIA character devices
@@ -1007,7 +897,7 @@ CONFIG_HW_RANDOM=y
# I2C support
#
CONFIG_I2C=m
-CONFIG_I2C_CHARDEV=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -1019,7 +909,6 @@ CONFIG_I2C_CHARDEV=m
#
# I2C Hardware Bus support
#
-# CONFIG_I2C_ELV is not set
CONFIG_I2C_PXA=m
# CONFIG_I2C_PXA_SLAVE is not set
# CONFIG_I2C_OCORES is not set
@@ -1037,6 +926,7 @@ CONFIG_I2C_PXA=m
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCA9535 is not set
# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
@@ -1052,82 +942,68 @@ CONFIG_I2C_PXA=m
#
# Dallas's 1-wire bus
#
-# CONFIG_W1 is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
-CONFIG_HWMON=y
+# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-CONFIG_BATTERY_MONITOR=y
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+CONFIG_ADC_BATTERY=y
#
# L3 serial bus support
#
-CONFIG_L3=m
+# CONFIG_L3 is not set
#
-# SoC drivers
+# Misc devices
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
#
-# Misc devices
+# Multimedia Capabilities Port drivers
#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
#
-# Multimedia Capabilities Port drivers
+# Multifunction device drivers
#
-# CONFIG_MCP is not set
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_TIFM_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
@@ -1145,7 +1021,7 @@ CONFIG_LEDS_ASIC3=y
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_TIMER_ASIC3=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
CONFIG_LEDS_TRIGGER_SHARED=y
@@ -1153,50 +1029,7 @@ CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-CONFIG_USB_SN9C102=m
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_USB_DSBR is not set
+# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
@@ -1207,15 +1040,25 @@ CONFIG_USB_SN9C102=m
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_PXA is not set
@@ -1230,10 +1073,10 @@ CONFIG_FB_W100=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
@@ -1246,16 +1089,7 @@ CONFIG_FONT_8x16=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_LOGO is not set
#
# Sound
@@ -1265,7 +1099,7 @@ CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=y
+CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
# CONFIG_SND_SEQUENCER is not set
@@ -1273,7 +1107,7 @@ CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
@@ -1293,6 +1127,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_HX4700=m
CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
#
# USB devices
@@ -1317,19 +1152,24 @@ CONFIG_SND_AK4641=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
+CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
@@ -1338,9 +1178,7 @@ CONFIG_USB=y
# USB Host Controller Drivers
#
# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_CS=m
@@ -1348,7 +1186,7 @@ CONFIG_USB_SL811_CS=m
# USB Device Class drivers
#
# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=m
+# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -1357,34 +1195,21 @@ CONFIG_USB_PRINTER=m
#
# may also be needed; see USB_STORAGE Help for more information
#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
+# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
@@ -1397,35 +1222,22 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
#
# USB Network Adapters
#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET_MII is not set
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
@@ -1447,6 +1259,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
@@ -1456,6 +1269,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
#
# USB DSL modem support
@@ -1475,18 +1289,20 @@ CONFIG_USB_PXA27X=y
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
CONFIG_USB_ETH=y
-# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_ETH_RNDIS=y
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
#
# MMC/SD Card support
@@ -1495,7 +1311,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -1507,7 +1322,7 @@ CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
+CONFIG_RTC_DEBUG=y
#
# RTC interfaces
@@ -1520,6 +1335,7 @@ CONFIG_RTC_INTF_DEV=y
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -1527,7 +1343,6 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
@@ -1538,39 +1353,21 @@ CONFIG_RTC_DRV_SA1100=y
# File systems
#
CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT3_FS is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-CONFIG_REISERFS_PROC_INFO=y
-CONFIG_REISERFS_FS_XATTR=y
-# CONFIG_REISERFS_FS_POSIX_ACL is not set
-# CONFIG_REISERFS_FS_SECURITY is not set
+# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_XFS_FS=m
-CONFIG_XFS_QUOTA=y
-CONFIG_XFS_SECURITY=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_XFS_RT=y
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=m
+# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
-CONFIG_QUOTACTL=y
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
@@ -1579,24 +1376,18 @@ CONFIG_DNOTIFY=y
#
# CD-ROM/DVD Filesystems
#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=m
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-CONFIG_NTFS_FS=m
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_RW is not set
+# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
@@ -1608,7 +1399,7 @@ CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-CONFIG_CONFIGFS_FS=m
+# CONFIG_CONFIGFS_FS is not set
#
# Miscellaneous filesystems
@@ -1616,15 +1407,14 @@ CONFIG_CONFIGFS_FS=m
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
-CONFIG_HFSPLUS_FS=m
+# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
@@ -1633,7 +1423,7 @@ CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
+# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1645,60 +1435,29 @@ CONFIG_CRAMFS=m
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
-CONFIG_NFS_DIRECTIO=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
-CONFIG_9P_FS=m
+# CONFIG_9P_FS is not set
#
# Partition Types
#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
@@ -1706,45 +1465,50 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
# CONFIG_PROFILING is not set
@@ -1752,37 +1516,39 @@ CONFIG_NLS_UTF8=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
-# CONFIG_HEADERS_CHECK is not set
# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
#
# Security options
@@ -1795,35 +1561,40 @@ CONFIG_DEBUG_ERRORS=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=y
-CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1833,10 +1604,13 @@ CONFIG_CRYPTO_CRC32C=m
#
# Library routines
#
-CONFIG_CRC_CCITT=m
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/looxc550/defconfig b/packages/linux/linux-handhelds-2.6/looxc550/defconfig
new file mode 100644
index 0000000000..f08efc536d
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/looxc550/defconfig
@@ -0,0 +1,1280 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:44 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+CONFIG_MACH_LOOXC550=y
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/magician/defconfig b/packages/linux/linux-handhelds-2.6/magician/defconfig
index 112a49f206..48b962c86a 100644
--- a/packages/linux/linux-handhelds-2.6/magician/defconfig
+++ b/packages/linux/linux-handhelds-2.6/magician/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh7
-# Tue Jan 9 15:26:27 2007
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:40 2007
#
CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -33,20 +39,23 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -59,7 +68,7 @@ CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
-# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
@@ -79,7 +88,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -87,7 +98,7 @@ CONFIG_BLOCK=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
+# CONFIG_IOSCHED_CFQ is not set
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
@@ -113,10 +124,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
@@ -125,6 +138,8 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+CONFIG_BOARD_IRQ_MAP_SMALL=y
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
#
# Intel PXA2xx Implementations
@@ -152,29 +167,31 @@ CONFIG_MACH_MAGICIAN=y
CONFIG_MAGICIAN_PM=y
CONFIG_MAGICIAN_TS=m
CONFIG_MAGICIAN_LCD=y
-CONFIG_MAGICIAN_CPLD=y
CONFIG_MAGICIAN_DS1WM=m
CONFIG_MAGICIAN_PHONE=m
-CONFIG_MAGICIAN_FLASH=m
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
# CONFIG_ARCH_ROVERP1 is not set
# CONFIG_ARCH_ROVERP5P is not set
# CONFIG_MACH_XSCALE_PALMLD is not set
# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
-CONFIG_IWMMXT=y
CONFIG_PXA_SSP=m
CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
+CONFIG_PXA27x_VOLTAGE=m
+CONFIG_PXA27x_VOLTAGE_MAX158xx=m
#
# Linux As Bootloader
@@ -198,20 +215,9 @@ CONFIG_CPU_CP15_MMU=y
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Platforms
-#
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
#
# Bus support
@@ -226,7 +232,7 @@ CONFIG_XSCALE_PMU=y
# Kernel Features
#
CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
@@ -240,6 +246,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -247,13 +254,28 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty0 noinitrd root=/dev/mmcblk0p2 ro mem=63M debug"
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
#
# CPU Frequency scaling
#
-# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=m
+CONFIG_PXA25x_ALTERNATE_FREQS=y
#
# Floating point emulation
@@ -279,8 +301,9 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -294,20 +317,20 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
+# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
@@ -315,17 +338,37 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -363,22 +406,22 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
+CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
#
# IrDA options
#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
@@ -387,11 +430,12 @@ CONFIG_IRCOMM=m
#
# SIR device drivers
#
-# CONFIG_IRTTY_SIR is not set
+CONFIG_IRTTY_SIR=y
#
# Dongle support
#
+# CONFIG_DONGLE is not set
#
# Old SIR device drivers
@@ -407,7 +451,7 @@ CONFIG_IRCOMM=m
#
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
+CONFIG_PXA_FICP=y
# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
@@ -423,7 +467,7 @@ CONFIG_BT_HIDP=m
# Bluetooth device drivers
#
CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUSB_SCO is not set
# CONFIG_BT_HCIUART is not set
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not set
@@ -442,28 +486,31 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
#
-CONFIG_CONNECTOR=m
+# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
-CONFIG_MTD=m
+CONFIG_MTD=y
CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=3
-# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
# CONFIG_MTD_BLOCK_RO is not set
# CONFIG_FTL is not set
@@ -503,8 +550,12 @@ CONFIG_MTD_CFI_UTIL=m
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_PHYSMAP=m
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
# CONFIG_MTD_SHARP_SL is not set
# CONFIG_MTD_PLATRAM is not set
@@ -513,7 +564,9 @@ CONFIG_MTD_CFI_UTIL=m
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -541,17 +594,16 @@ CONFIG_MTD_CFI_UTIL=m
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -634,9 +686,9 @@ CONFIG_PPP=m
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
CONFIG_SLHC=m
@@ -664,6 +716,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -675,21 +728,27 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-# CONFIG_TOUCHSCREEN_WM9712 is not set
-# CONFIG_TOUCHSCREEN_WM9713 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+CONFIG_TOUCHSCREEN_ADC_DEBOUNCE=m
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
@@ -719,9 +778,12 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_PXA=y
# CONFIG_SERIAL_PXA_CONSOLE is not set
CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
CONFIG_SERIAL_CORE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -737,10 +799,7 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_SA1100_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+CONFIG_TIHTC=m
# CONFIG_RAW_DRIVER is not set
#
@@ -751,8 +810,8 @@ CONFIG_UNIX98_PTYS=y
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=m
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -764,7 +823,7 @@ CONFIG_I2C_CHARDEV=m
#
# I2C Hardware Bus support
#
-CONFIG_I2C_PXA=y
+CONFIG_I2C_PXA=m
# CONFIG_I2C_PXA_SLAVE is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
@@ -797,15 +856,14 @@ CONFIG_I2C_PXA=y
#
# Dallas's 1-wire bus
#
-CONFIG_W1=m
-CONFIG_W1_CON=y
+CONFIG_W1=y
#
# 1-wire Bus Masters
#
# CONFIG_W1_MASTER_DS2490 is not set
# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=m
+CONFIG_W1_MASTER_DS1WM=y
#
# 1-wire Slaves
@@ -813,57 +871,19 @@ CONFIG_W1_MASTER_DS1WM=m
# CONFIG_W1_SLAVE_THERM is not set
# CONFIG_W1_SLAVE_SMEM is not set
# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_DS2760=m
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
-CONFIG_HWMON=y
+# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Hardware Monitoring - Battery
-#
-CONFIG_BATTERY_MONITOR=y
-CONFIG_MAGICIAN_BATTERY=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+CONFIG_ADC_BATTERY=y
#
# L3 serial bus support
@@ -871,30 +891,33 @@ CONFIG_MAGICIAN_BATTERY=m
# CONFIG_L3 is not set
#
-# SoC drivers
+# Misc devices
#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
#
-# Misc devices
+# Multimedia Capabilities Port drivers
#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=m
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
#
-# Multimedia Capabilities Port drivers
+# Multifunction device drivers
#
-# CONFIG_MCP is not set
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_TIFM_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
@@ -905,15 +928,16 @@ CONFIG_LEDS_CLASS=y
#
# LED drivers
#
-CONFIG_LEDS_MAGICIAN=m
+CONFIG_LEDS_MAGICIAN=y
#
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-# CONFIG_LEDS_TRIGGER_SHARED is not set
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
#
# Multimedia devices
@@ -929,15 +953,25 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
#
# Graphics support
#
-# CONFIG_FIRMWARE_EDID is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
@@ -952,15 +986,15 @@ CONFIG_FB_PXA=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
# CONFIG_FONT_8x16 is not set
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
-CONFIG_FONT_ACORN_8x8=y
-# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
@@ -969,29 +1003,25 @@ CONFIG_FONT_ACORN_8x8=y
# Logo configuration
#
# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
@@ -1007,8 +1037,8 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# ALSA ARM devices
#
-# CONFIG_SND_HTCMAGICIAN is not set
# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
#
# USB devices
@@ -1021,21 +1051,22 @@ CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_SOC=m
#
-# Soc Platforms
+# SoC Platforms
#
#
-# SoC Audio for the Intel PXA2xx
+# SoC Audio for the Atmel AT91
#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SSP=m
-CONFIG_SND_PXA2xx_SOC_MAGICIAN=m
-# CONFIG_SND_PXA2xx_SOC_BLUEANGEL is not set
#
-# SoC Audio for the Atmel AT91
+# SoC Audio for the Intel PXA2xx
#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SSP=m
+CONFIG_SND_PXA2XX_SOC_MAGICIAN=m
+# CONFIG_SND_PXA2XX_SOC_BLUEANGEL is not set
+# CONFIG_SND_PXA2XX_SOC_H5000 is not set
#
# SoC Audio for the Freescale i.MX
@@ -1044,10 +1075,6 @@ CONFIG_SND_PXA2xx_SOC_MAGICIAN=m
#
# SoC Audio for the Samsung S3C24XX
#
-
-#
-# Soc Codecs
-#
# CONFIG_SND_SOC_AC97_CODEC is not set
# CONFIG_SND_SOC_WM8711 is not set
# CONFIG_SND_SOC_WM8510 is not set
@@ -1057,6 +1084,7 @@ CONFIG_SND_PXA2xx_SOC_MAGICIAN=m
# CONFIG_SND_SOC_WM8772 is not set
# CONFIG_SND_SOC_WM8971 is not set
# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
# CONFIG_SND_SOC_WM8976 is not set
# CONFIG_SND_SOC_WM8974 is not set
# CONFIG_SND_SOC_WM8980 is not set
@@ -1071,6 +1099,12 @@ CONFIG_SND_SOC_UDA1380=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -1082,8 +1116,7 @@ CONFIG_USB=m
#
# Miscellaneous USB options
#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
@@ -1093,7 +1126,8 @@ CONFIG_USB_DEVICEFS=y
#
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SL811_HCD is not set
@@ -1115,7 +1149,10 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
#
# USB Input Devices
#
-# CONFIG_USB_HID is not set
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
@@ -1134,6 +1171,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
@@ -1170,6 +1208,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
@@ -1179,7 +1218,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
+# CONFIG_USB_IOWARRIOR is not set
#
# USB DSL modem support
@@ -1205,14 +1244,14 @@ CONFIG_USB_PXA27X=y
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=m
-# CONFIG_USB_ETH_RNDIS is not set
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_FILE_STORAGE_TEST=y
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
#
# MMC/SD Card support
@@ -1221,7 +1260,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
@@ -1232,7 +1270,7 @@ CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
+CONFIG_RTC_DEBUG=y
#
# RTC interfaces
@@ -1245,6 +1283,7 @@ CONFIG_RTC_INTF_DEV=y
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -1252,7 +1291,6 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
@@ -1263,19 +1301,13 @@ CONFIG_RTC_DRV_SA1100=y
# File systems
#
CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT3_FS is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
+# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
@@ -1327,8 +1359,18 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -1339,18 +1381,18 @@ CONFIG_RAMFS=y
#
# Network File Systems
#
-CONFIG_NFS_FS=m
+CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
@@ -1362,29 +1404,14 @@ CONFIG_RPCSEC_GSS_KRB5=m
#
# Partition Types
#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
@@ -1406,8 +1433,8 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
@@ -1425,43 +1452,48 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
+# CONFIG_PROFILING is not set
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
+# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
+CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
-# CONFIG_HEADERS_CHECK is not set
# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y
# CONFIG_DEBUG_ICEDCC is not set
@@ -1481,32 +1513,37 @@ CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
@@ -1515,10 +1552,13 @@ CONFIG_CRYPTO_TEST=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty b/packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/rx1950/defconfig b/packages/linux/linux-handhelds-2.6/rx1950/defconfig
new file mode 100644
index 0000000000..1f6647e94d
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6/rx1950/defconfig
@@ -0,0 +1,1319 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:45 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_MACH_G500 is not set
+CONFIG_CPU_S3C2442=y
+
+#
+# S3C2442 Machines
+#
+CONFIG_MACH_RX1950=y
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+CONFIG_TOUCHSCREEN_S3C2410_DEBUG=y
+CONFIG_TOUCHSCREEN_S3C2410_ALT=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_S3C2410 is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2440=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6/rx3000/defconfig b/packages/linux/linux-handhelds-2.6/rx3000/defconfig
index cf5cea0a4b..56ca6748ab 100644
--- a/packages/linux/linux-handhelds-2.6/rx3000/defconfig
+++ b/packages/linux/linux-handhelds-2.6/rx3000/defconfig
@@ -1,18 +1,24 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.19-hh8
-# Mon Jan 22 13:41:47 2007
+# Linux kernel version: 2.6.21-hh11
+# Wed Jul 11 07:31:45 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -21,6 +27,7 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
@@ -31,6 +38,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -38,14 +46,17 @@ CONFIG_SYSVIPC=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
-CONFIG_UID16=y
+# CONFIG_UID16 is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -68,7 +79,7 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
+# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -76,7 +87,9 @@ CONFIG_KMOD=y
# Block layer
#
CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -84,7 +97,7 @@ CONFIG_BLOCK=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
+# CONFIG_IOSCHED_CFQ is not set
CONFIG_DEFAULT_AS=y
# CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set
@@ -110,10 +123,12 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -122,49 +137,74 @@ CONFIG_ARCH_S3C2410=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=2
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
#
-# S3C24XX Implementations
+# S3C2400 Machines
#
-# CONFIG_MACH_AML_M5900 is not set
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-# CONFIG_ARCH_BAST is not set
-CONFIG_PM_H1940=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_SMDK2410 is not set
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
CONFIG_MACH_RX3715=y
-CONFIG_RX3715_LEDS=m
-CONFIG_RX3715_BLUETOOTH=m
-# CONFIG_MACH_HTCHERMES is not set
-# CONFIG_MACH_HTC_TRINITY is not set
-# CONFIG_MACH_OTOM is not set
+CONFIG_RX3000_BACKLIGHT=y
+CONFIG_RX3000_LEDS=y
+CONFIG_RX3000_BATTERY=y
+CONFIG_RX3000_BLUETOOTH=m
+CONFIG_RX3000_BUTTONS=y
+CONFIG_RX3000_SERIAL=y
+CONFIG_RX3000_TS=y
+CONFIG_RX3000_UDC=y
+# CONFIG_ARCH_S3C2440 is not set
# CONFIG_MACH_NEXCODER_2440 is not set
-# CONFIG_MACH_VSTMS is not set
# CONFIG_MACH_G500 is not set
-CONFIG_S3C2410_CLOCK=y
-CONFIG_S3C2410_PM=y
-CONFIG_CPU_S3C244X=y
-CONFIG_CPU_S3C2440=y
#
-# S3C2410 Boot
+# S3C2442 Machines
#
-# CONFIG_S3C2410_BOOT_WATCHDOG is not set
-CONFIG_S3C2410_BOOT_ERROR_RESET=y
+# CONFIG_MACH_RX1950 is not set
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
#
-# S3C2410 Setup
+# S3C2443 Machines
#
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=2
+# CONFIG_MACH_SMDK2443 is not set
#
# Linux As Bootloader
@@ -192,15 +232,7 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_KEXEC is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
+# CONFIG_OUTER_CACHE is not set
#
# Bus support
@@ -214,8 +246,8 @@ CONFIG_ARM_THUMB=y
#
# Kernel Features
#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=200
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
@@ -229,6 +261,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -236,8 +269,11 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE="keepinitrd"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_TXTOFFSET_DELTA=y
+CONFIG_TXTOFFSET_DELTA_VALUE=0x00090000
#
# Floating point emulation
@@ -255,17 +291,17 @@ CONFIG_FPE_NWFPE=y
#
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=y
+# CONFIG_BINFMT_MISC is not set
#
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -279,15 +315,15 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
@@ -298,14 +334,14 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -322,25 +358,15 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_SIP is not set
-CONFIG_IP_NF_QUEUE=y
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
#
# DCCP Configuration (EXPERIMENTAL)
@@ -383,17 +409,17 @@ CONFIG_IRDA=y
#
# IrDA protocols
#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
#
# IrDA options
#
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
+CONFIG_IRDA_DEBUG=y
#
# Infrared-port device drivers
@@ -402,7 +428,7 @@ CONFIG_IRDA_FAST_RR=y
#
# SIR device drivers
#
-CONFIG_IRTTY_SIR=m
+CONFIG_IRTTY_SIR=y
#
# Dongle support
@@ -421,14 +447,14 @@ CONFIG_IRTTY_SIR=m
#
# FIR device drivers
#
-CONFIG_BT=y
+CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
-# CONFIG_BT_BNEP_MC_FILTER is not set
-# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=m
#
@@ -448,23 +474,25 @@ CONFIG_WIRELESS_EXT=y
#
# Generic Driver Options
#
-# CONFIG_STANDALONE is not set
+CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
#
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
+# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_CMDLINE_PARTS is not set
@@ -473,7 +501,8 @@ CONFIG_MTD_PARTITIONS=y
#
# User Modules And Translation Layers
#
-CONFIG_MTD_CHAR=y
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
@@ -512,7 +541,9 @@ CONFIG_MTD_CFI_I2=y
#
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -531,8 +562,8 @@ CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_S3C2410=y
# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-CONFIG_MTD_NAND_S3C2410_HWECC=y
-# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
@@ -549,19 +580,15 @@ CONFIG_MTD_NAND_S3C2410_HWECC=y
#
# Plug and Play support
#
+# CONFIG_PNPACPI is not set
#
# Block devices
#
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -643,23 +670,24 @@ CONFIG_NET_RADIO=y
# CONFIG_HOSTAP is not set
CONFIG_ACX=m
CONFIG_ACX_MEM=y
-CONFIG_ACX_RX3715=m
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_RX3000=m
#
# Wan interfaces
#
# CONFIG_WAN is not set
-CONFIG_PPP=y
+CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=y
+CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=y
-CONFIG_PPP_BSDCOMP=y
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
-CONFIG_SLHC=y
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -684,6 +712,7 @@ CONFIG_INPUT=y
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
#
# Input Device Drivers
@@ -695,26 +724,32 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIO_KEYS=y
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
CONFIG_KEYBOARD_ASIC3=y
-# CONFIG_S3C2410_BUTTONS is not set
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-# CONFIG_TOUCHSCREEN_WM9712 is not set
-# CONFIG_TOUCHSCREEN_WM9713 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
CONFIG_TOUCHSCREEN_S3C2410=y
# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
# CONFIG_TOUCHSCREEN_S3C2410_ALT is not set
-# CONFIG_INPUT_MISC is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_ADC_DEBOUNCE is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -746,9 +781,10 @@ CONFIG_SERIAL_S3C2410=y
CONFIG_SERIAL_S3C2410_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_LEGACY_PTY_COUNT=32
#
# IPMI
@@ -758,22 +794,12 @@ CONFIG_LEGACY_PTY_COUNT=256
#
# Watchdog Cards
#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_S3C2410_WATCHDOG=y
-CONFIG_HW_RANDOM=y
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
+# CONFIG_TIHTC is not set
# CONFIG_RAW_DRIVER is not set
#
@@ -784,8 +810,8 @@ CONFIG_HW_RANDOM=y
#
# I2C support
#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
#
# I2C Algorithms
@@ -829,14 +855,13 @@ CONFIG_I2C_S3C2410=m
#
# Dallas's 1-wire bus
#
-CONFIG_W1=m
-CONFIG_W1_CON=y
+CONFIG_W1=y
#
# 1-wire Bus Masters
#
# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_DS1WM=m
+CONFIG_W1_MASTER_DS1WM=y
#
# 1-wire Slaves
@@ -844,19 +869,19 @@ CONFIG_W1_DS1WM=m
# CONFIG_W1_SLAVE_THERM is not set
# CONFIG_W1_SLAVE_SMEM is not set
# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_DS2760=m
+CONFIG_W1_SLAVE_DS2760=y
#
# Hardware Monitoring support
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
-
-#
-# Hardware Monitoring - Battery
-#
-CONFIG_BATTERY_MONITOR=m
-CONFIG_RX3715_BATTERY=m
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
#
# L3 serial bus support
@@ -864,28 +889,31 @@ CONFIG_RX3715_BATTERY=m
# CONFIG_L3 is not set
#
-# SoC drivers
-#
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-CONFIG_HTC_ASIC3_DS1WM=y
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP is not set
+CONFIG_ADC=y
# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_TIFM_CORE is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_EGPIO is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
#
# LED devices
@@ -904,7 +932,7 @@ CONFIG_LEDS_ASIC3=y
#
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_TIMER_ASIC3=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
CONFIG_LEDS_TRIGGER_SHARED=y
@@ -921,15 +949,26 @@ CONFIG_LEDS_TRIGGER_SHARED=y
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_IMAGEON is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_S3C2410=y
@@ -943,7 +982,7 @@ CONFIG_FB_S3C2410=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
# CONFIG_FONT_8x16 is not set
@@ -959,22 +998,12 @@ CONFIG_FONT_MINI_4x6=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_S3C2410=y
+# CONFIG_LOGO is not set
#
# Sound
#
-CONFIG_SOUND=m
+CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
@@ -1004,16 +1033,52 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# ALSA ARM devices
#
-CONFIG_SND_RX3715=m
-CONFIG_SND_S3C2410=m
-# CONFIG_SND_S3C2410_DBG is not set
-# CONFIG_SND_S3C2410_DBG_DMA is not set
+# CONFIG_SND_S3C2410 is not set
#
# SoC audio support
#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_UDA1380=m
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C24XX_SOC_I2S=m
+CONFIG_SND_S3C24XX_SOC_RX3000=m
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
#
# Open Sound System
@@ -1021,6 +1086,12 @@ CONFIG_SND_UDA1380=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -1067,7 +1138,6 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
# CONFIG_MMC_S3C2440 is not set
-# CONFIG_MMC_TIFM_SD is not set
# CONFIG_MMC_TMIO is not set
# CONFIG_MMC_SAMCOP is not set
CONFIG_MMC_ASIC3=y
@@ -1079,7 +1149,7 @@ CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
+CONFIG_RTC_DEBUG=y
#
# RTC interfaces
@@ -1092,6 +1162,7 @@ CONFIG_RTC_INTF_DEV=y
#
# RTC drivers
#
+# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1553 is not set
@@ -1099,7 +1170,6 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
CONFIG_RTC_DRV_S3C=y
# CONFIG_RTC_DRV_M48T86 is not set
@@ -1127,7 +1197,7 @@ CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
+# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
@@ -1140,7 +1210,7 @@ CONFIG_AUTOFS4_FS=m
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
+CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
@@ -1168,16 +1238,7 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -1188,10 +1249,20 @@ CONFIG_JFFS2_RTIME=y
#
# Network File Systems
#
-# CONFIG_NFS_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1201,33 +1272,18 @@ CONFIG_SMB_FS=m
#
# Partition Types
#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp1251"
+CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
@@ -1237,7 +1293,7 @@ CONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
-CONFIG_NLS_CODEPAGE_866=y
+# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
@@ -1245,44 +1301,71 @@ CONFIG_NLS_CODEPAGE_866=y
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1250=y
CONFIG_NLS_CODEPAGE_1251=y
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
-CONFIG_NLS_ISO8859_5=y
+# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
-CONFIG_NLS_ISO8859_14=y
+# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
-CONFIG_NLS_KOI8_R=y
+# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
+# CONFIG_PROFILING is not set
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_FS is not set
-CONFIG_FRAME_POINTER=y
# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_S3C2410_PORT is not set
CONFIG_DEBUG_S3C2410_UART=2
#
@@ -1297,19 +1380,25 @@ CONFIG_DEBUG_S3C2410_UART=2
CONFIG_CRYPTO=y
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
@@ -1317,12 +1406,13 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_TEST is not set
#
@@ -1332,6 +1422,7 @@ CONFIG_CRYPTO_DES=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
@@ -1339,3 +1430,4 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6_2.6.19-hh11.bb b/packages/linux/linux-handhelds-2.6_2.6.19-hh11.bb
deleted file mode 100644
index 77f55415ba..0000000000
--- a/packages/linux/linux-handhelds-2.6_2.6.19-hh11.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
-PR = "r1"
-
-DEFAULT_PREFERENCE = "-1"
-
-# Override where to look for defconfigs and patches,
-# we have per-kernel-release sets.
-FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.19/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.19"
-
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
- file://defconfig"
-
-require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.20-hh10.bb b/packages/linux/linux-handhelds-2.6_2.6.20-hh10.bb
new file mode 100644
index 0000000000..8e760267f4
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.20-hh10.bb
@@ -0,0 +1,15 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+# Override where to look for defconfigs and patches,
+# we have per-kernel-release sets.
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.20/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.20"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.20-hh1.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh10.bb
index b34d4630a0..b34d4630a0 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.20-hh1.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh10.bb
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh11.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh11.bb
new file mode 100644
index 0000000000..34e08451cc
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh11.bb
@@ -0,0 +1,12 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://hamcop-h11.patch;patch=1;pnum=0 \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh12.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh12.bb
new file mode 100644
index 0000000000..ec5844bfb5
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh12.bb
@@ -0,0 +1,11 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.20-hh2.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh13.bb
index b34d4630a0..b34d4630a0 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.20-hh2.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh13.bb
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh14.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh14.bb
new file mode 100644
index 0000000000..b34d4630a0
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh14.bb
@@ -0,0 +1,11 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh9.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh9.bb
new file mode 100644
index 0000000000..ec5844bfb5
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh9.bb
@@ -0,0 +1,11 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r1"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_cvs.bb b/packages/linux/linux-handhelds-2.6_cvs.bb
index 0f9a38b631..4e008f5b6e 100644
--- a/packages/linux/linux-handhelds-2.6_cvs.bb
+++ b/packages/linux/linux-handhelds-2.6_cvs.bb
@@ -2,14 +2,14 @@ SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
LICENSE = "GPL"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
-PR = "r5"
+PR = "r0"
DEFAULT_PREFERENCE = "-1"
K_MAJOR = "2"
K_MINOR = "6"
-K_MICRO = "20"
-HHV = "2"
+K_MICRO = "21"
+HHV = "14"
SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
file://defconfig"
diff --git a/packages/linux/linux-jlime-current.bb b/packages/linux/linux-jlime-current.bb
new file mode 100644
index 0000000000..68bcd4ab04
--- /dev/null
+++ b/packages/linux/linux-jlime-current.bb
@@ -0,0 +1,19 @@
+###########################################################################
+# Currently supports :
+# HP Jornada 620/660/680/690
+# HP Jornada 710/720/728
+# Nec Mobilepro 900c
+# Nec Mobilpro 770/880
+
+DESCRIPTION = "2.6 Linux Development Kernel for JLime supported Machines."
+SECTION = "kernel"
+LICENSE = "GPL"
+
+inherit kernel
+
+PR = "r1"
+
+SRC_URI = "git://filip.eu.org/jlime-current.git;protocol=git \
+ git://filip.eu.org/jlime.git;protocol=git"
+
+S = "${WORKDIR}/jlime-current"
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/.mtn2git_empty b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/.mtn2git_empty
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/defconfig b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/defconfig
new file mode 100644
index 0000000000..2a86055123
--- /dev/null
+++ b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/defconfig
@@ -0,0 +1,1245 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-rc5
+# Wed Apr 4 23:26:23 2007
+#
+CONFIG_SUPERH=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_7343_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+CONFIG_SH_HP6XX=y
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_7710VOIPGW is not set
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
+# CONFIG_SH_SHMIN is not set
+# CONFIG_SH_7206_SOLUTION_ENGINE is not set
+# CONFIG_SH_7619_SOLUTION_ENGINE is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH3=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+# CONFIG_CPU_SUBTYPE_SH7619 is not set
+
+#
+# SH-2A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7206 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7706 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+CONFIG_CPU_SUBTYPE_SH7709=y
+# CONFIG_CPU_SUBTYPE_SH7710 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+# CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+# CONFIG_CPU_SUBTYPE_SH7785 is not set
+
+#
+# SH4AL-DSP Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7343 is not set
+# CONFIG_CPU_SUBTYPE_SH7722 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_PAGE_OFFSET=0x80000000
+CONFIG_MEMORY_START=0x0d000000
+CONFIG_MEMORY_SIZE=0x00400000
+CONFIG_VSYSCALL=y
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+CONFIG_SH_WRITETHROUGH=y
+# CONFIG_SH_OCRAM is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+# CONFIG_SH_FPU_EMU is not set
+CONFIG_SH_DSP=y
+CONFIG_SH_ADC=y
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_PINT_IRQ=y
+CONFIG_CPU_HAS_IPR_IRQ=y
+CONFIG_CPU_HAS_SR_RB=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_TIMER_IRQ=16
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_SH_PCLK_FREQ=22110000
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+CONFIG_SH_DMA=y
+CONFIG_NR_ONCHIP_DMA_CHANNELS=4
+# CONFIG_NR_DMA_CHANNELS_BOOL is not set
+
+#
+# Companion Chips
+#
+CONFIG_HD6446X_SERIES=y
+CONFIG_HD64461=y
+# CONFIG_HD64465 is not set
+CONFIG_HD64461_IRQ=36
+CONFIG_HD64461_IOBASE=0xb0000000
+CONFIG_HD64461_ENABLER=y
+
+#
+# Additional SuperH Device Drivers
+#
+# CONFIG_PUSH_SWITCH is not set
+
+#
+# Kernel features
+#
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+# CONFIG_SMP is not set
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+CONFIG_ISA=y
+# CONFIG_PCI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_PROBE=y
+
+#
+# PCI Hotplug Support
+#
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options (EXPERIMENTAL)
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_NETDEBUG=y
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+# CONFIG_PARPORT_PC is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=y
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_PATA_LEGACY is not set
+# CONFIG_PATA_PCMCIA is not set
+# CONFIG_PATA_QDI is not set
+# CONFIG_PATA_WINBOND_VLB is not set
+CONFIG_PATA_PLATFORM=y
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_SMC91X is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+# CONFIG_PCMCIA_PCNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_TOUCHSCREEN_HP600=y
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_NR_UARTS=2
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=5
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_HP680=y
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frambuffer hardware drivers
+#
+# CONFIG_FB_EPSON1355 is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_HIT=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+CONFIG_FONT_PEARL_8x8=y
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SH=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+# CONFIG_EARLY_SCIF_CONSOLE is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/git-20070405-2.patch b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/git-20070405-2.patch
new file mode 100644
index 0000000000..205d62a952
--- /dev/null
+++ b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/git-20070405-2.patch
@@ -0,0 +1,1058 @@
+diff --git a/arch/sh/boards/hp6xx/setup.c b/arch/sh/boards/hp6xx/setup.c
+index b5a9664..5c6726d 100644
+--- a/arch/sh/boards/hp6xx/setup.c
++++ b/arch/sh/boards/hp6xx/setup.c
+@@ -2,6 +2,8 @@
+ * linux/arch/sh/boards/hp6xx/setup.c
+ *
+ * Copyright (C) 2002 Andriy Skulysh
++ * Copyright (C) 2007 Kristoffer Ericson <Kristoffer_e1@hotmail.com>
++ *
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License. See linux/COPYING for more information.
+@@ -10,6 +12,7 @@
+ */
+ #include <linux/types.h>
+ #include <linux/init.h>
++#include <linux/platform_device.h>
+ #include <asm/hd64461.h>
+ #include <asm/io.h>
+ #include <asm/irq.h>
+@@ -19,6 +22,41 @@
+ #define SCPCR 0xa4000116
+ #define SCPDR 0xa4000136
+
++/* CF Slot */
++static struct resource cf_ide_resources[] = {
++ [0] = {
++ .start = 0x15000000 + 0x1f0,
++ .end = 0x15000000 + 0x1f0 + 0x08 - 0x01,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = 0x15000000 + 0x1fe,
++ .end = 0x15000000 + 0x1fe + 0x01,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = 93,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device cf_ide_device = {
++ .name = "pata_platform",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(cf_ide_resources),
++ .resource = cf_ide_resources,
++};
++
++static struct platform_device *hp6xx_devices[] __initdata = {
++
++ &cf_ide_device,
++};
++
++static int __init hp6xx_devices_setup(void)
++{
++ return platform_add_devices(hp6xx_devices,ARRAY_SIZE(hp6xx_devices));
++}
++
+ static void __init hp6xx_setup(char **cmdline_p)
+ {
+ u8 v8;
+@@ -61,40 +99,12 @@ static void __init hp6xx_setup(char **cmdline_p)
+ ctrl_outw(v, SCPCR);
+ }
+
+-/*
+- * XXX: This is stupid, we should have a generic machine vector for the cchips
+- * and just wrap the platform setup code in to this, as it's the only thing
+- * that ends up being different.
+- */
++device_initcall(hp6xx_devices_setup);
++
+ struct sh_machine_vector mv_hp6xx __initmv = {
+ .mv_name = "hp6xx",
+ .mv_setup = hp6xx_setup,
+ .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM,
+-
+- .mv_inb = hd64461_inb,
+- .mv_inw = hd64461_inw,
+- .mv_inl = hd64461_inl,
+- .mv_outb = hd64461_outb,
+- .mv_outw = hd64461_outw,
+- .mv_outl = hd64461_outl,
+-
+- .mv_inb_p = hd64461_inb_p,
+- .mv_inw_p = hd64461_inw,
+- .mv_inl_p = hd64461_inl,
+- .mv_outb_p = hd64461_outb_p,
+- .mv_outw_p = hd64461_outw,
+- .mv_outl_p = hd64461_outl,
+-
+- .mv_insb = hd64461_insb,
+- .mv_insw = hd64461_insw,
+- .mv_insl = hd64461_insl,
+- .mv_outsb = hd64461_outsb,
+- .mv_outsw = hd64461_outsw,
+- .mv_outsl = hd64461_outsl,
+-
+- .mv_readw = hd64461_readw,
+- .mv_writew = hd64461_writew,
+-
+ .mv_irq_demux = hd64461_irq_demux,
+ };
+ ALIAS_MV(hp6xx)
+diff --git a/arch/sh/cchips/hd6446x/hd64461/setup.c b/arch/sh/cchips/hd6446x/hd64461/setup.c
+index 4d49b5c..f59e73f 100644
+--- a/arch/sh/cchips/hd6446x/hd64461/setup.c
++++ b/arch/sh/cchips/hd6446x/hd64461/setup.c
+@@ -122,7 +122,7 @@ int hd64461_irq_demux(int irq)
+ }
+ }
+ }
+- return __irq_demux(irq);
++ return (irq);
+ }
+
+ static struct irqaction irq0 = { hd64461_interrupt, IRQF_DISABLED, CPU_MASK_NONE, "HD64461", NULL, NULL };
+diff --git a/arch/sh/drivers/dma/dma-sh.c b/arch/sh/drivers/dma/dma-sh.c
+index 06ed060..b56fab8 100644
+--- a/arch/sh/drivers/dma/dma-sh.c
++++ b/arch/sh/drivers/dma/dma-sh.c
+@@ -19,6 +19,13 @@
+ #include <asm/io.h>
+ #include "dma-sh.h"
+
++#ifdef CONFIG_CPU_SUBTYPE_SH7709
++ #define DMTE0_IRQ 48
++ #define DMTE1_IRQ 49
++ #define DMTE2_IRQ 50
++ #define DMTE3_IRQ 51
++#endif
++
+ static int dmte_irq_map[] = {
+ DMTE0_IRQ,
+ DMTE1_IRQ,
+diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7709.c b/arch/sh/kernel/cpu/sh3/setup-sh7709.c
+index dc9b211..3e9bb0c 100644
+--- a/arch/sh/kernel/cpu/sh3/setup-sh7709.c
++++ b/arch/sh/kernel/cpu/sh3/setup-sh7709.c
+@@ -52,20 +52,29 @@ static int __init sh7709_devices_setup(void)
+ }
+ __initcall(sh7709_devices_setup);
+
+-#define IPRx(A,N) .addr=A, .shift=0*N*-1
++#define IPRx(A,N) .addr=A, .shift=N
+ #define IPRA(N) IPRx(0xfffffee2UL,N)
+ #define IPRB(N) IPRx(0xfffffee4UL,N)
++#define IPRC(N) IPRx(0xa4000016UL,N)
++#define IPRD(N) IPRx(0xa4000018UL,N)
+ #define IPRE(N) IPRx(0xa400001aUL,N)
+
+ static struct ipr_data sh7709_ipr_map[] = {
+- [16] = { IPRA(15-12), 2 }, /* TMU TUNI0 */
+- [17] = { IPRA(11-8), 4 }, /* TMU TUNI1 */
+- [22] = { IPRA(3-0), 2 }, /* RTC CUI */
+- [23 ... 26] = { IPRB(7-4), 3 }, /* SCI */
+- [27] = { IPRB(15-12), 2 }, /* WDT ITI */
+- [48 ... 51] = { IPRE(15-12), 7 }, /* DMA */
+- [52 ... 55] = { IPRE(11-8), 3 }, /* IRDA */
+- [56 ... 59] = { IPRE(7-4), 3 }, /* SCIF */
++ [16] = { IPRA(12), 2 }, /* TMU TUNI0 */
++ [17] = { IPRA(8), 4 }, /* TMU TUNI1 */
++ [18 ... 19] = { IPRA(4), 1 }, /* TMU TUNI1 */
++ [20 ... 22] = { IPRA(0), 2 }, /* RTC CUI */
++ [23 ... 26] = { IPRB(4), 3 }, /* SCI */
++ [27] = { IPRB(12), 2 }, /* WDT ITI */
++ [32] = { IPRC(0), 1 }, /* IRQ 0 */
++ [33] = { IPRC(4), 1 }, /* IRQ 1 */
++ [34] = { IPRC(8), 1 }, /* IRQ 2 APM */
++ [35] = { IPRC(12), 1 }, /* IRQ 3 TOUCHSCREEN */
++ [36] = { IPRD(0), 1 }, /* IRQ 4 */
++ [37] = { IPRD(4), 1 }, /* IRQ 5 */
++ [48 ... 51] = { IPRE(12), 7 }, /* DMA */
++ [52 ... 55] = { IPRE(8), 3 }, /* IRDA */
++ [56 ... 59] = { IPRE(4), 3 }, /* SCIF */
+ };
+
+ void __init init_IRQ_ipr()
+diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
+index f17e9c7..52a6323 100644
+--- a/drivers/input/keyboard/Kconfig
++++ b/drivers/input/keyboard/Kconfig
+@@ -68,6 +68,9 @@ config KEYBOARD_ATKBD_RDI_KEYCODES
+ right-hand column will be interpreted as the key shown in the
+ left-hand column.
+
++config KEYBOARD_HP680
++ tristate "HP 680 Keyboard Driver"
++
+ config KEYBOARD_SUNKBD
+ tristate "Sun Type 4 and Type 5 keyboard"
+ select SERIO
+diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
+index 586a0fe..09ee105 100644
+--- a/drivers/input/keyboard/Makefile
++++ b/drivers/input/keyboard/Makefile
+@@ -19,4 +19,4 @@ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+ obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
+ obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
+-
++obj-$(CONFIG_KEYBOARD_HP680) += scan_keyb.o hp680_keyb.o
+diff --git a/drivers/input/keyboard/hp680_keyb.c b/drivers/input/keyboard/hp680_keyb.c
+new file mode 100644
+index 0000000..d534a2c
+--- /dev/null
++++ b/drivers/input/keyboard/hp680_keyb.c
+@@ -0,0 +1,235 @@
++/*
++ * drivers/input/keyboard/hp680_keyb.c
++ *
++ * HP Jornada 680/690 scan keyboard
++ *
++ * Copyright (C) 2005 Andriy Skulysh
++ * Copyright (C) 2006 Paul Mundt
++ * Copyright (C) 2007 Kristoffer Ericson
++ *
++ * Splited from drivers/input/keyboard/hp600_keyb.c
++ *
++ * Copyright (C) 2000 YAEGASHI Takeshi
++ * HP600 keyboard scan routine and translation table
++ * Copyright (C) 2000 Niibe Yutaka
++ * HP620 keyboard translation table
++ */
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <asm/delay.h>
++#include <asm/io.h>
++#include "scan_keyb.h"
++
++#define PCCR 0xa4000104
++#define PDCR 0xa4000106
++#define PECR 0xa4000108
++#define PFCR 0xa400010a
++#define PCDR 0xa4000124
++#define PDDR 0xa4000126
++#define PEDR 0xa4000128
++#define PFDR 0xa400012a
++#define PGDR 0xa400012c
++#define PHDR 0xa400012e
++#define PJDR 0xa4000130
++#define PKDR 0xa4000132
++#define PLDR 0xa4000134
++
++/***************************************************************
++HP Jornada 680(SWEDISH version) keyboard
++[!] indicates Special Characters
++
++_______________________________________________________________________
++| ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 POWER|
++| 1 2 3 4 5 6 7 8 9 0 + ` BKPSPACE|
++|* Q W E R T Y U I O P ! ^ ENTER|
++| TAB A S D F G H J K L ! ! ' ENTER|
++| SHIFT Z X C V B N M , . - UP SHIFT|
++| CTRL WIN ALT ? =======SPACE======== ALTG DEL LEF DO RI ]
++-----------------------------------------------------------------------
++
++
++****************************************************************/
++
++
++
++/****************************************************************
++HP Jornada 690(Japanese version) keyboard scan matrix
++
++ PTC7 PTC6 PTC5 PTC4 PTC3 PTC2 PTC1 PTC0
++PTD1 REC Escape on/off Han/Zen Hira Eisu
++PTD5 REC Z on/off Enter : /
++PTD7 REC Right Down
++PTE0 REC Windows on/off
++PTE1 REC A on/off ] [ ;
++PTE3 REC Tab on/off ShirtR \ Up
++PTE6 REC Q on/off BS @ P
++PTE7 REC 1 on/off ^ - 0
++
++ PTF7 PTF6 PTF5 PTF4 PTF3 PTF2 PTF1 PTF0
++PTD1 F5 F4 F6 F7 F8 F3 F2 F1
++PTD5 N B M , . V C X
++PTD7 Muhen Alt Left
++PTE0 Henkan _ Del Space Ctrl
++PTE1 H G J K L F D S
++PTE3 ShiftL
++PTE6 Y T U I O R E W
++PTE7 6 5 7 8 9 4 3 2
++
++ PTG5 PTG4 PTG3 PTG0 PTH0
++* REC REW FWW Cover on/off
++
++
++ 7 6 5 4 3 2 1 0
++C: 0xffff 0xdf IP IP IP IP IP IP IP IP
++D: 0x6786 0x59 O I O IP I F O I
++E: 0x5045 0x00 O O F F O F O O
++F: 0xffff 0xff IP IP IP IP IP IP IP IP
++G: 0xaffe 0xfd I I IP IP IP IP IP I
++H: 0x70f2 0x49 O IP F F IP IP F I
++J: 0x0704 0x22 F F O IP F F O F
++K: 0x0100 0x10 F F F O F F F F
++L: 0x0c3c 0x26 F F IP F F IP IP F
++
++****************************************************************/
++
++static const unsigned char hp680_japanese_table[] = {
++/*
++ /* PTD1 */
++ /* ? ? ? ? Esc ? ? ? */
++ 0x3a, 0x70, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00,
++ /* F1 F2 F3 F8 F7 F6 F4 F5 */
++ 0x3b, 0x3c, 0x3d, 0x42, 0x41, 0x40, 0x3e, 0x3f,
++
++ /* PTD5 */
++ /* / : Enter ? Z ? ? ? */
++ 0x35, 0x28, 0x1c, 0x00, 0x2c, 0x00, 0x00, 0x00,
++ /* X C V . , M B N */
++ 0x2d, 0x2e, 0x2f, 0x34, 0x33, 0x32, 0x30, 0x31,
++
++ /* PTD7 */
++ /* Down Right ? ? ? ? ? ? */
++ 0x50, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ /* ? ? ? Left ? ? Alt ? */
++ 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x38, 0x7b,
++
++ /* PTE0 */
++ /* ? ? ? ? Win ? ? ? */
++ 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
++ /* Ctrl ? Space Del _ ? ? ? */
++ 0x1d, 0x00, 0x39, 0x53, 0x73, 0xf9, 0x00, 0x00,
++
++ /* PTE1 */
++ /* ; [ ] ? A ? ? ? */
++ 0x27, 0x1b, 0x2b, 0x00, 0x1e, 0x00, 0x00, 0x00,
++ /* S D F L K J G H */
++ 0x1f, 0x20, 0x21, 0x26, 0x25, 0x24, 0x22, 0x23,
++
++ /* PTE3 */
++ /* Up \ ShiftR ? Q ? ? ? */
++ 0x48, 0x7d, 0x36, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ /* ? ShiftL ? ? ? ? ? ? */
++ 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++
++ /* PTE6 */
++ /* P @ BS ? Q ? ? ? */
++ 0x19, 0x1a, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x00,
++ /* W E R O I U T Y */
++ 0x11, 0x12, 0x13, 0x18, 0x17, 0x16, 0x14, 0x15,
++
++ /* PTE7 */
++ /* 0 + = ? 1 ? ? ? */
++ 0x0b, 0x0c, 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00,
++ /* 2 3 4 9 8 7 5 6 */
++ 0x03, 0x04, 0x05, 0x0a, 0x09, 0x08, 0x06, 0x07,
++
++ /* **** */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++};
++
++static int hp680_japanese_scan_kbd(unsigned char *s)
++{
++ int i;
++ unsigned short ec_static,dc_static; /* = UINT16_t */
++ unsigned char matrix_switch[] = {
++ 0xfd, 0xff, /* PTD1 PD(1) */
++ 0xdf, 0xff, /* PTD5 PD(5) */
++ 0x7f, 0xff, /* PTD7 PD(7) */
++ 0xff, 0xfe, /* PTE0 PE(0) */
++ 0xff, 0xfd, /* PTE1 PE(1) */
++ 0xff, 0xf7, /* PTE3 PE(3) */
++ 0xff, 0xbf, /* PTE6 PE(6) */
++ 0xff, 0x7f, /* PTE7 PE(7) */
++ }, *t=matrix_switch;
++ /* PD(x) :
++ 1. 0xcc0c & (1~(1 << (2*(x)+1)))))
++ 2. (0xf0cf & 0xfffff) */
++ /* PE(x) :
++ 1. 0xcc0c & 0xffff
++ 2. 0xf0cf & (1~(1 << (2*(x)+1))))) */
++ unsigned short matrix_PDE[] = {
++ 0xcc04, 0xf0cf, /* PD(1) */
++ 0xc40c, 0xf0cf, /* PD(5) */
++ 0x4c0c, 0xf0cf, /* PD(7) */
++ 0xcc0c, 0xf0cd, /* PE(0) */
++ 0xcc0c, 0xf0c7, /* PE(1) */
++ 0xcc0c, 0xf04f, /* PE(3) */
++ 0xcc0c, 0xd0cf, /* PE(6) */
++ 0xcc0c, 0x70cf, /* PE(7) */
++ }
++ , *y=matrix_PDE;
++ /* Save these control reg bits */
++ dc_static = (ctrl_inw(PDCR) & (~0xcc0c));
++ ec_static = (ctrl_inw(PECR) & (~0xf0cf));
++
++ for(i=0; i<8; i++) {
++ /* disable output for all but the one we want to scan */
++ ctrl_outw((dc_static | *y++), PDCR);
++ ctrl_outw((ec_static | *y++), PECR);
++ udelay(5);
++
++ /* Get scanline row */
++ ctrl_outb(*t++, PDDR);
++ ctrl_outb(*t++, PEDR);
++ udelay(50);
++
++ /* Read data */
++ *s++=ctrl_inb(PCDR);
++ *s++=ctrl_inb(PFDR);
++ }
++ /* Scan no lines */
++ ctrl_outb(0xff, PDDR);
++ ctrl_outb(0xff, PEDR);
++
++ /* Enable all scanlines */
++ ctrl_outw((dc_static | (0x5555 & 0xcc0c)),PDCR);
++ ctrl_outw((ec_static | (0x5555 & 0xf0cf)),PECR);
++ /* Ignore extra keys and events */
++
++ *s++=ctrl_inb(PGDR);
++ *s++=ctrl_inb(PHDR);
++
++ return 0;
++}
++
++static struct scan_keyboard hp680_kbd = {
++ .scan = hp680_japanese_scan_kbd,
++ .table = hp680_japanese_table,
++ .length = 16,
++};
++
++static int __init hp680_kbd_init_hw(void)
++{
++ printk(KERN_INFO "HP680 matrix scan keyboard registered\n");
++ return register_scan_keyboard(&hp680_kbd);
++}
++
++static void __exit hp680_kbd_exit_hw(void)
++{
++ unregister_scan_keyboard(&hp680_kbd);
++}
++
++module_init(hp680_kbd_init_hw);
++module_exit(hp680_kbd_exit_hw);
++MODULE_LICENSE("GPL");
+diff --git a/drivers/input/keyboard/scan_keyb.c b/drivers/input/keyboard/scan_keyb.c
+new file mode 100644
+index 0000000..e65668b
+--- /dev/null
++++ b/drivers/input/keyboard/scan_keyb.c
+@@ -0,0 +1,148 @@
++/*
++ * Generic scan keyboard driver
++ *
++ * Copyright (C) 2000 YAEGASHI Takeshi
++ * Copyright (C) 2003 Andriy Skulysh
++ * Copyright (C) 2006 Paul Mundt
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/interrupt.h>
++#include <linux/kbd_kern.h>
++#include <linux/input.h>
++#include <linux/timer.h>
++#include "scan_keyb.h"
++
++#define SCANHZ (HZ/20)
++
++static int scan_jiffies;
++static struct scan_keyboard *keyboards;
++struct timer_list scan_timer;
++static char *hpkbd_name = "Hitachi scankeyboard";
++static char *hpkbd_phys = "input0";
++
++static void check_kbd(struct scan_keyboard *kbd,
++ unsigned char *new, unsigned char *old)
++{
++ const unsigned char *table = kbd->table;
++ int length = kbd->length;
++ int need_tasklet_schedule = 0;
++ unsigned int xor, bit;
++
++ while (length-- > 0) {
++ if ((xor = *new ^ *old) == 0)
++ table += 8;
++ else {
++ for (bit = 0x01; bit < 0x100; bit <<= 1) {
++ if (xor & bit) {
++ input_report_key(kbd->dev, *table,
++ !(*new & bit));
++ need_tasklet_schedule = 1;
++ }
++
++ table++;
++ }
++ }
++
++ new++;
++ old++;
++ }
++
++ if (need_tasklet_schedule) {
++ input_sync(kbd->dev);
++ tasklet_schedule(&keyboard_tasklet);
++ }
++}
++
++static void scan_kbd(unsigned long dummy)
++{
++ struct scan_keyboard *kbd;
++
++ scan_jiffies++;
++
++ for (kbd = keyboards; kbd != NULL; kbd = kbd->next) {
++ if (scan_jiffies & 1) {
++ if (!kbd->scan(kbd->s0))
++ check_kbd(kbd, kbd->s0, kbd->s1);
++ else
++ memcpy(kbd->s0, kbd->s1, kbd->length);
++ } else {
++ if (!kbd->scan(kbd->s1))
++ check_kbd(kbd, kbd->s1, kbd->s0);
++ else
++ memcpy(kbd->s1, kbd->s0, kbd->length);
++ }
++ }
++
++ mod_timer(&scan_timer, jiffies + SCANHZ);
++}
++
++int register_scan_keyboard(struct scan_keyboard *kbd)
++{
++ int i;
++
++ kbd->s0 = kmalloc(kbd->length, GFP_KERNEL);
++ if (kbd->s0 == NULL)
++ goto error;
++
++ kbd->s1 = kmalloc(kbd->length, GFP_KERNEL);
++ if (kbd->s1 == NULL)
++ goto error;
++
++ memset(kbd->s0, -1, kbd->length);
++ memset(kbd->s1, -1, kbd->length);
++
++ kbd->dev = input_allocate_device();
++ if (!kbd->dev)
++ goto error;
++
++ kbd->dev->name = hpkbd_name;
++ kbd->dev->phys = hpkbd_phys;
++ kbd->dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
++ //init_input_dev(kbd->dev);
++ kbd->dev->keycode = (unsigned char *)kbd->table;
++ kbd->dev->keycodesize = sizeof(unsigned char);
++ kbd->dev->keycodemax = ARRAY_SIZE(kbd->table);
++
++ for (i = 0; i < 128; i++)
++ if (kbd->table[i])
++ set_bit(kbd->table[i], kbd->dev->keybit);
++
++ clear_bit(0, kbd->dev->keybit);
++ input_register_device(kbd->dev);
++
++ kbd->next = keyboards;
++ keyboards = kbd;
++
++ init_timer(&scan_timer);
++ scan_timer.expires = jiffies + SCANHZ;
++ scan_timer.data = 0;
++ scan_timer.function = scan_kbd;
++ add_timer(&scan_timer);
++
++ return 0;
++
++error:
++ kfree(kbd->s1);
++ kfree(kbd->s0);
++
++ return -ENOMEM;
++}
++EXPORT_SYMBOL_GPL(register_scan_keyboard);
++
++void unregister_scan_keyboard(struct scan_keyboard *kbd)
++{
++ del_timer_sync(&scan_timer);
++ keyboards = kbd->next;
++ input_unregister_device(kbd->dev);
++ input_free_device(kbd->dev);
++}
++EXPORT_SYMBOL_GPL(unregister_scan_keyboard);
+diff --git a/drivers/input/keyboard/scan_keyb.h b/drivers/input/keyboard/scan_keyb.h
+new file mode 100644
+index 0000000..e50510f
+--- /dev/null
++++ b/drivers/input/keyboard/scan_keyb.h
+@@ -0,0 +1,16 @@
++#ifndef __DRIVER_CHAR_SCAN_KEYB_H
++#define __DRIVER_CHAR_SCAN_KEYB_H
++
++struct scan_keyboard {
++ struct scan_keyboard *next;
++ int (*scan)(unsigned char *buffer);
++ const unsigned char *table;
++ unsigned char *s0, *s1;
++ int length;
++ struct input_dev *dev;
++};
++
++int register_scan_keyboard(struct scan_keyboard *);
++void unregister_scan_keyboard(struct scan_keyboard *);
++
++#endif
+diff --git a/drivers/input/touchscreen/hp680_ts_input.c b/drivers/input/touchscreen/hp680_ts_input.c
+index 2490874..0450d28 100644
+--- a/drivers/input/touchscreen/hp680_ts_input.c
++++ b/drivers/input/touchscreen/hp680_ts_input.c
+@@ -18,12 +18,12 @@
+ #define PHDR 0xa400012e
+ #define SCPDR 0xa4000136
+
+-static void do_softint(void *data);
++static void do_softint(struct work_struct *work);
+
+ static struct input_dev *hp680_ts_dev;
+-static DECLARE_WORK(work, do_softint, 0);
++static DECLARE_DELAYED_WORK(work, do_softint);
+
+-static void do_softint(void *data)
++static void do_softint(struct work_struct *work)
+ {
+ int absx = 0, absy = 0;
+ u8 scpdr;
+@@ -68,9 +68,8 @@ static void do_softint(void *data)
+
+ static irqreturn_t hp680_ts_interrupt(int irq, void *dev)
+ {
+- disable_irq_nosync(irq);
++ disable_irq_nosync(irq);
+ schedule_delayed_work(&work, HZ / 20);
+-
+ return IRQ_HANDLED;
+ }
+
+@@ -108,7 +107,7 @@ static int __init hp680_ts_init(void)
+ return 0;
+
+ fail2: free_irq(HP680_TS_IRQ, NULL);
+- cancel_delayed_work(&work);
++ cancel_delayed_work(&work); /* delay_ts->work */
+ flush_scheduled_work();
+ fail1: input_free_device(hp680_ts_dev);
+ return err;
+diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c
+index 0899fcc..109329a 100644
+--- a/drivers/video/backlight/hp680_bl.c
++++ b/drivers/video/backlight/hp680_bl.c
+@@ -125,8 +125,8 @@ static int hp680bl_remove(struct platform_device *pdev)
+ {
+ struct backlight_device *bd = platform_get_drvdata(pdev);
+
+- hp680bl_data.brightness = 0;
+- hp680bl_data.power = 0;
++// hp680bl_data.brightness = 0;
++// hp680bl_data.power = 0;
+ hp680bl_send_intensity(bd);
+
+ backlight_device_unregister(bd);
+diff --git a/include/asm-sh/hd64461.h b/include/asm-sh/hd64461.h
+index 27e5c34..cd2e5f9 100644
+--- a/include/asm-sh/hd64461.h
++++ b/include/asm-sh/hd64461.h
+@@ -9,111 +9,122 @@
+ /* Constants for PCMCIA mappings */
+ #define HD64461_PCC_WINDOW 0x01000000
+
+-#define HD64461_PCC0_BASE 0xb8000000 /* area 6 */
+-#define HD64461_PCC0_ATTR (HD64461_PCC0_BASE)
+-#define HD64461_PCC0_COMM (HD64461_PCC0_BASE+HD64461_PCC_WINDOW)
+-#define HD64461_PCC0_IO (HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW)
+-
+-#define HD64461_PCC1_BASE 0xb4000000 /* area 5 */
+-#define HD64461_PCC1_ATTR (HD64461_PCC1_BASE)
+-#define HD64461_PCC1_COMM (HD64461_PCC1_BASE+HD64461_PCC_WINDOW)
+-
+-#define HD64461_STBCR 0x10000
+-#define HD64461_STBCR_CKIO_STBY 0x2000
+-#define HD64461_STBCR_SAFECKE_IST 0x1000
+-#define HD64461_STBCR_SLCKE_IST 0x0800
+-#define HD64461_STBCR_SAFECKE_OST 0x0400
+-#define HD64461_STBCR_SLCKE_OST 0x0200
+-#define HD64461_STBCR_SMIAST 0x0100
+-#define HD64461_STBCR_SLCDST 0x0080
+-#define HD64461_STBCR_SPC0ST 0x0040
+-#define HD64461_STBCR_SPC1ST 0x0020
+-#define HD64461_STBCR_SAFEST 0x0010
+-#define HD64461_STBCR_STM0ST 0x0008
+-#define HD64461_STBCR_STM1ST 0x0004
+-#define HD64461_STBCR_SIRST 0x0002
+-#define HD64461_STBCR_SURTST 0x0001
+-
+-#define HD64461_SYSCR 0x10002
+-#define HD64461_SCPUCR 0x10004
+-
+-#define HD64461_LCDCBAR 0x11000
+-#define HD64461_LCDCLOR 0x11002
+-#define HD64461_LCDCCR 0x11004
+-#define HD64461_LCDCCR_STBACK 0x0400
+-#define HD64461_LCDCCR_STREQ 0x0100
+-#define HD64461_LCDCCR_MOFF 0x0080
+-#define HD64461_LCDCCR_REFSEL 0x0040
+-#define HD64461_LCDCCR_EPON 0x0020
+-#define HD64461_LCDCCR_SPON 0x0010
+-
+-#define HD64461_LDR1 0x11010
++#define HD64461_PCC0_BASE 0xb8000000 /* area 6 */
++#define HD64461_PCC0_ATTR (HD64461_PCC0_BASE) /* 0xb8000000 */
++#define HD64461_PCC0_COMM (HD64461_PCC0_BASE+HD64461_PCC_WINDOW) /* 0xb9000000 */
++#define HD64461_PCC0_IO (HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW) /* 0xba000000 */
++
++#define HD64461_PCC1_BASE 0xb4000000 /* area 5 */
++#define HD64461_PCC1_ATTR (HD64461_PCC1_BASE) /* 0xb4000000 */
++#define HD64461_PCC1_COMM (HD64461_PCC1_BASE+HD64461_PCC_WINDOW) /* 0xb5000000 */
++
++/* if PORT < 0xf000 then ADDR = 0xa0000000 + PORT */
++#define HD64461_STBCR (CONFIG_HD64461_IOBASE)
++#define HD64461_STBCR_CKIO_STBY 0xa0002000
++#define HD64461_STBCR_SAFECKE_IST 0xa0001000
++#define HD64461_STBCR_SLCKE_IST 0xa0000800
++#define HD64461_STBCR_SAFECKE_OST 0xa0000400
++#define HD64461_STBCR_SLCKE_OST 0xa0000200
++#define HD64461_STBCR_SMIAST 0xa0000100
++#define HD64461_STBCR_SLCDST 0xa0000080
++#define HD64461_STBCR_SPC0ST 0xa0000040
++#define HD64461_STBCR_SPC1ST 0xa0000020
++#define HD64461_STBCR_SAFEST 0xa0000010
++#define HD64461_STBCR_STM0ST 0xa0000008
++#define HD64461_STBCR_STM1ST 0xa0000004
++#define HD64461_STBCR_SIRST 0xa0000002
++#define HD64461_STBCR_SURTST 0xa0000001
++
++/* if PORT < 0x20000 then ADDR = CONFIG_HD64461_IOBASE + PORT - 0x10000 */
++#define HD64461_SYSCR (CONFIG_HD64461_IOBASE + 0x10002 - 0x10000)
++#define HD64461_SCPUCR (CONFIG_HD64461_IOBASE + 0x10004 - 0x10000)
++#define HD64461_LCDCBAR (CONFIG_HD64461_IOBASE + 0x11000 - 0x10000)
++#define HD64461_LCDCLOR (CONFIG_HD64461_IOBASE + 0x11002 - 0x10000)
++#define HD64461_LCDCCR (CONFIG_HD64461_IOBASE + 0x11004 - 0x10000)
++
++
++/* if PORT < 0xf000 then ADDR = 0xa0000000 + PORT */
++#define HD64461_LCDCCR_STBACK (0xa0000000 + 0x0400)
++#define HD64461_LCDCCR_STREQ (0xa0000000 + 0x0100)
++#define HD64461_LCDCCR_MOFF (0xa0000000 + 0x0080)
++#define HD64461_LCDCCR_REFSEL (0xa0000000 + 0x0040)
++#define HD64461_LCDCCR_EPON (0xa0000000 + 0x0020)
++#define HD64461_LCDCCR_SPON (0xa0000000 + 0x0010)
++
++/* if PORT < 0x20000 then ADDR = CONFIG_HD64461_IOBASE + PORT - 0x10000 */
++#define HD64461_LDR1 (CONFIG_HD64461_IOBASE + 0x11010 - 0x10000)
++
++/* if PORT < 0xf000 then ADDR = 0xa0000000 + PORT */
+ #define HD64461_LDR1_DON 0x01
+ #define HD64461_LDR1_DINV 0x80
+
+-#define HD64461_LDR2 0x11012
+-#define HD64461_LDHNCR 0x11014
+-#define HD64461_LDHNSR 0x11016
+-#define HD64461_LDVNTR 0x11018
+-#define HD64461_LDVNDR 0x1101a
+-#define HD64461_LDVSPR 0x1101c
+-#define HD64461_LDR3 0x1101e
+-
+-#define HD64461_CPTWAR 0x11030
+-#define HD64461_CPTWDR 0x11032
+-#define HD64461_CPTRAR 0x11034
+-#define HD64461_CPTRDR 0x11036
+-
+-#define HD64461_GRDOR 0x11040
+-#define HD64461_GRSCR 0x11042
+-#define HD64461_GRCFGR 0x11044
++/* if PORT < 0x20000 then ADDR = CONFIG_HD64461_IOBASE + PORT - 0x10000 */
++#define HD64461_LDR2 (CONFIG_HD64461_IOBASE + 0x11012 - 0x10000)
++#define HD64461_LDHNCR (CONFIG_HD64461_IOBASE + 0x11014 - 0x10000)
++#define HD64461_LDHNSR (CONFIG_HD64461_IOBASE + 0x11016 - 0x10000)
++#define HD64461_LDVNTR (CONFIG_HD64461_IOBASE + 0x11018 - 0x10000)
++#define HD64461_LDVNDR (CONFIG_HD64461_IOBASE + 0x1101a - 0x10000)
++#define HD64461_LDVSPR (CONFIG_HD64461_IOBASE + 0x1101c - 0x10000)
++#define HD64461_LDR3 (CONFIG_HD64461_IOBASE + 0x1101e - 0x10000)
++
++#define HD64461_CPTWAR (CONFIG_HD64461_IOBASE + 0x11030 - 0x10000)
++#define HD64461_CPTWDR (CONFIG_HD64461_IOBASE + 0x11032 - 0x10000)
++#define HD64461_CPTRAR (CONFIG_HD64461_IOBASE + 0x11034 - 0x10000)
++#define HD64461_CPTRDR (CONFIG_HD64461_IOBASE + 0x11036 - 0x10000)
++
++#define HD64461_GRDOR (CONFIG_HD64461_IOBASE + 0x11040 - 0x10000)
++#define HD64461_GRSCR (CONFIG_HD64461_IOBASE + 0x11042 - 0x10000)
++#define HD64461_GRCFGR (CONFIG_HD64461_IOBASE + 0x11044 - 0x10000)
++
+ #define HD64461_GRCFGR_ACCSTATUS 0x10
+ #define HD64461_GRCFGR_ACCRESET 0x08
+-#define HD64461_GRCFGR_ACCSTART_BITBLT 0x06
+-#define HD64461_GRCFGR_ACCSTART_LINE 0x04
++#define HD64461_GRCFGR_ACCSTART_BITBLT 0x06
++#define HD64461_GRCFGR_ACCSTART_LINE 0x04
+ #define HD64461_GRCFGR_COLORDEPTH16 0x01
+
+-#define HD64461_LNSARH 0x11046
+-#define HD64461_LNSARL 0x11048
+-#define HD64461_LNAXLR 0x1104a
+-#define HD64461_LNDGR 0x1104c
+-#define HD64461_LNAXR 0x1104e
+-#define HD64461_LNERTR 0x11050
+-#define HD64461_LNMDR 0x11052
+-#define HD64461_BBTSSARH 0x11054
+-#define HD64461_BBTSSARL 0x11056
+-#define HD64461_BBTDSARH 0x11058
+-#define HD64461_BBTDSARL 0x1105a
+-#define HD64461_BBTDWR 0x1105c
+-#define HD64461_BBTDHR 0x1105e
+-#define HD64461_BBTPARH 0x11060
+-#define HD64461_BBTPARL 0x11062
+-#define HD64461_BBTMARH 0x11064
+-#define HD64461_BBTMARL 0x11066
+-#define HD64461_BBTROPR 0x11068
+-#define HD64461_BBTMDR 0x1106a
+-
++/* if PORT < 0x20000 then CONFIG_HD64461_IOBASE + PORT - 0x10000 */
++#define HD64461_LNSARH (CONFIG_HD64461_IOBASE + 0x11046 - 0x10000)
++#define HD64461_LNSARL (CONFIG_HD64461_IOBASE + 0x11048 - 0x10000)
++#define HD64461_LNAXLR (CONFIG_HD64461_IOBASE + 0x1104a - 0x10000)
++#define HD64461_LNDGR (CONFIG_HD64461_IOBASE + 0x1104c - 0x10000)
++#define HD64461_LNAXR (CONFIG_HD64461_IOBASE + 0x1104e - 0x10000)
++#define HD64461_LNERTR (CONFIG_HD64461_IOBASE + 0x11050 - 0x10000)
++#define HD64461_LNMDR (CONFIG_HD64461_IOBASE + 0x11052 - 0x10000)
++#define HD64461_BBTSSARH (CONFIG_HD64461_IOBASE + 0x11054 - 0x10000)
++#define HD64461_BBTSSARL (CONFIG_HD64461_IOBASE + 0x11056 - 0x10000)
++#define HD64461_BBTDSARH (CONFIG_HD64461_IOBASE + 0x11058 - 0x10000)
++#define HD64461_BBTDSARL (CONFIG_HD64461_IOBASE + 0x1105a - 0x10000)
++#define HD64461_BBTDWR (CONFIG_HD64461_IOBASE + 0x1105c - 0x10000)
++#define HD64461_BBTDHR (CONFIG_HD64461_IOBASE + 0x1105e - 0x10000)
++#define HD64461_BBTPARH (CONFIG_HD64461_IOBASE + 0x11060 - 0x10000)
++#define HD64461_BBTPARL (CONFIG_HD64461_IOBASE + 0x11062 - 0x10000)
++#define HD64461_BBTMARH (CONFIG_HD64461_IOBASE + 0x11064 - 0x10000)
++#define HD64461_BBTMARL (CONFIG_HD64461_IOBASE + 0x11066 - 0x10000)
++#define HD64461_BBTROPR (CONFIG_HD64461_IOBASE + 0x11068 - 0x10000)
++#define HD64461_BBTMDR (CONFIG_HD64461_IOBASE + 0x1106a - 0x10000)
++
++/* These must be like this, otherwise the Jornada will not boot! */
+ /* PC Card Controller Registers */
+-#define HD64461_PCC0ISR 0x12000 /* socket 0 interface status */
+-#define HD64461_PCC0GCR 0x12002 /* socket 0 general control */
+-#define HD64461_PCC0CSCR 0x12004 /* socket 0 card status change */
+-#define HD64461_PCC0CSCIER 0x12006 /* socket 0 card status change interrupt enable */
+-#define HD64461_PCC0SCR 0x12008 /* socket 0 software control */
+-#define HD64461_PCC1ISR 0x12010 /* socket 1 interface status */
+-#define HD64461_PCC1GCR 0x12012 /* socket 1 general control */
+-#define HD64461_PCC1CSCR 0x12014 /* socket 1 card status change */
+-#define HD64461_PCC1CSCIER 0x12016 /* socket 1 card status change interrupt enable */
+-#define HD64461_PCC1SCR 0x12018 /* socket 1 software control */
++#define HD64461_PCC0ISR (CONFIG_HD64461_IOBASE + 0x12000 - 0x10000) /* socket 0 interface status */
++#define HD64461_PCC0GCR (CONFIG_HD64461_IOBASE + 0x12002 - 0x10000) /* socket 0 general control */
++#define HD64461_PCC0CSCR (CONFIG_HD64461_IOBASE + 0x12004 - 0x10000) /* socket 0 card status change */
++#define HD64461_PCC0CSCIER (CONFIG_HD64461_IOBASE + 0x12006 - 0x10000) /* socket 0 card status change interrupt enable */
++#define HD64461_PCC0SCR (CONFIG_HD64461_IOBASE + 0x12008 - 0x10000) /* socket 0 software control */
++#define HD64461_PCC1ISR (CONFIG_HD64461_IOBASE + 0x12010 - 0x10000) /* socket 1 interface status */
++#define HD64461_PCC1GCR (CONFIG_HD64461_IOBASE + 0x12012 - 0x10000) /* socket 1 general control */
++#define HD64461_PCC1CSCR (CONFIG_HD64461_IOBASE + 0x12014 - 0x10000) /* socket 1 card status change */
++#define HD64461_PCC1CSCIER (CONFIG_HD64461_IOBASE + 0x12016 - 0x10000) /* socket 1 card status change interrupt enable */
++#define HD64461_PCC1SCR (CONFIG_HD64461_IOBASE + 0x12018 - 0x10000) /* socket 1 software control */
+
+ /* PCC Interface Status Register */
+-#define HD64461_PCCISR_READY 0x80 /* card ready */
+-#define HD64461_PCCISR_MWP 0x40 /* card write-protected */
+-#define HD64461_PCCISR_VS2 0x20 /* voltage select pin 2 */
+-#define HD64461_PCCISR_VS1 0x10 /* voltage select pin 1 */
+-#define HD64461_PCCISR_CD2 0x08 /* card detect 2 */
+-#define HD64461_PCCISR_CD1 0x04 /* card detect 1 */
+-#define HD64461_PCCISR_BVD2 0x02 /* battery 1 */
+-#define HD64461_PCCISR_BVD1 0x01 /* battery 1 */
++#define HD64461_PCCISR_READY 0x80 /* card ready */
++#define HD64461_PCCISR_MWP 0x40 /* card write-protected */
++#define HD64461_PCCISR_VS2 0x20 /* voltage select pin 2 */
++#define HD64461_PCCISR_VS1 0x10 /* voltage select pin 1 */
++#define HD64461_PCCISR_CD2 0x08 /* card detect 2 */
++#define HD64461_PCCISR_CD1 0x04 /* card detect 1 */
++#define HD64461_PCCISR_BVD2 0x02 /* battery 1 */
++#define HD64461_PCCISR_BVD1 0x01 /* battery 1 */
+
+ #define HD64461_PCCISR_PCD_MASK 0x0c /* card detect */
+ #define HD64461_PCCISR_BVD_MASK 0x03 /* battery voltage */
+@@ -160,29 +171,29 @@
+ #define HD64461_PCCSCR_VCC1 0x02 /* voltage control pin 1 */
+ #define HD64461_PCCSCR_SWP 0x01 /* write protect */
+
+-#define HD64461_P0OCR 0x1202a
+-#define HD64461_P1OCR 0x1202c
+-#define HD64461_PGCR 0x1202e
+-
+-#define HD64461_GPACR 0x14000
+-#define HD64461_GPBCR 0x14002
+-#define HD64461_GPCCR 0x14004
+-#define HD64461_GPDCR 0x14006
+-#define HD64461_GPADR 0x14010
+-#define HD64461_GPBDR 0x14012
+-#define HD64461_GPCDR 0x14014
+-#define HD64461_GPDDR 0x14016
+-#define HD64461_GPAICR 0x14020
+-#define HD64461_GPBICR 0x14022
+-#define HD64461_GPCICR 0x14024
+-#define HD64461_GPDICR 0x14026
+-#define HD64461_GPAISR 0x14040
+-#define HD64461_GPBISR 0x14042
+-#define HD64461_GPCISR 0x14044
+-#define HD64461_GPDISR 0x14046
+-
+-#define HD64461_NIRR 0x15000
+-#define HD64461_NIMR 0x15002
++#define HD64461_P0OCR (CONFIG_HD64461_IOBASE + 0x1202a - 0x10000)
++#define HD64461_P1OCR (CONFIG_HD64461_IOBASE + 0x1202c - 0x10000)
++#define HD64461_PGCR (CONFIG_HD64461_IOBASE + 0x1202e - 0x10000)
++
++#define HD64461_GPACR (CONFIG_HD64461_IOBASE + 0x14000 - 0x10000)
++#define HD64461_GPBCR (CONFIG_HD64461_IOBASE + 0x14002 - 0x10000)
++#define HD64461_GPCCR (CONFIG_HD64461_IOBASE + 0x14004 - 0x10000)
++#define HD64461_GPDCR (CONFIG_HD64461_IOBASE + 0x14006 - 0x10000)
++#define HD64461_GPADR (CONFIG_HD64461_IOBASE + 0x14010 - 0x10000)
++#define HD64461_GPBDR (CONFIG_HD64461_IOBASE + 0x14012 - 0x10000)
++#define HD64461_GPCDR (CONFIG_HD64461_IOBASE + 0x14014 - 0x10000)
++#define HD64461_GPDDR (CONFIG_HD64461_IOBASE + 0x14016 - 0x10000)
++#define HD64461_GPAICR (CONFIG_HD64461_IOBASE + 0x14020 - 0x10000)
++#define HD64461_GPBICR (CONFIG_HD64461_IOBASE + 0x14022 - 0x10000)
++#define HD64461_GPCICR (CONFIG_HD64461_IOBASE + 0x14024 - 0x10000)
++#define HD64461_GPDICR (CONFIG_HD64461_IOBASE + 0x14026 - 0x10000)
++#define HD64461_GPAISR (CONFIG_HD64461_IOBASE + 0x14040 - 0x10000)
++#define HD64461_GPBISR (CONFIG_HD64461_IOBASE + 0x14042 - 0x10000)
++#define HD64461_GPCISR (CONFIG_HD64461_IOBASE + 0x14044 - 0x10000)
++#define HD64461_GPDISR (CONFIG_HD64461_IOBASE + 0x14046 - 0x10000)
++
++#define HD64461_NIRR 0xb0005000 /* 0x10005000 */
++#define HD64461_NIMR 0xb0005002 /* 0x10005002 */
+
+ #define HD64461_IRQBASE OFFCHIP_IRQ_BASE
+ #define HD64461_IRQ_NUM 16
+diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h
+index a0e55b0..08848ee 100644
+--- a/include/asm-sh/io.h
++++ b/include/asm-sh/io.h
+@@ -143,6 +143,7 @@ void __raw_readsl(unsigned long addr, void *data, int longlen);
+ #define readl_relaxed(a) readl(a)
+
+ /* Simple MMIO */
++#ifndef CONFIG_CPU_SUBTYPE_SH7709
+ #define ioread8(a) readb(a)
+ #define ioread16(a) readw(a)
+ #define ioread16be(a) be16_to_cpu(__raw_readw((a)))
+@@ -154,6 +155,7 @@ void __raw_readsl(unsigned long addr, void *data, int longlen);
+ #define iowrite16be(v,a) __raw_writew(cpu_to_be16((v)),(a))
+ #define iowrite32(v,a) writel((v),(a))
+ #define iowrite32be(v,a) __raw_writel(cpu_to_be32((v)),(a))
++#endif
+
+ #define ioread8_rep(a,d,c) insb((a),(d),(c))
+ #define ioread16_rep(a,d,c) insw((a),(d),(c))
+@@ -163,6 +165,20 @@ void __raw_readsl(unsigned long addr, void *data, int longlen);
+ #define iowrite16_rep(a,s,c) outsw((a),(s),(c))
+ #define iowrite32_rep(a,s,c) outsl((a),(s),(c))
+
++#ifdef CONFIG_CPU_SUBTYPE_SH7709
++ #define ioread8(a) inb(a)
++ #define ioread16(a) inw(a)
++ #define ioread16be(a) be16_to_cpu(inw((a)))
++ #define ioread32(a) inl(a)
++ #define ioread32be(v,a) be32_to_cpu(inl((a)))
++
++ #define iowrite8(v,a) outb((v),(a))
++ #define iowrite16(v,a) outw((v),(a))
++ #define iowrite16be(v,a) outw(cpu_to_be16((v),(a)))
++ #define iowrite32(v,a) outl((v),(a))
++ #define iowrite32be(v,a) outl(cpu_to_be32((v),(a)))
++#endif
++
+ #define mmiowb() wmb() /* synco on SH-4A, otherwise a nop */
+
+ /*
+diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h
+index afe188f..95f9a1a 100644
+--- a/include/asm-sh/irq.h
++++ b/include/asm-sh/irq.h
+@@ -23,6 +23,40 @@
+ defined(CONFIG_CPU_SUBTYPE_SH7705)
+ # define ONCHIP_NR_IRQS 64 // Actually 61
+ # define PINT_NR_IRQS 16
++
++ #define INTC_IRR0 0xa4000004UL
++ #define INTC_IRR1 0xa4000006UL
++ #define INTC_IRR2 0xa4000008UL
++
++ #define INTC_IPRA 0xfffffee2UL
++ #define INTC_IPRB 0xfffffee4UL
++ #define INTC_IPRD 0xa4000018UL
++
++ #define INTC_INTER 0xa4000014UL
++
++ #define INTC_ICR0 0xfffffee0UL
++ #define INTC_ICR1 0xa4000010UL
++ #define INTC_ICR2 0xa4000012UL
++
++ #define PORT_PACR 0xa4000100UL
++ #define PORT_PBCR 0xa4000102UL
++ #define PORT_PCCR 0xa4000104UL
++ #define PORT_PFCR 0xa400010aUL
++
++ #define PORT_PADR 0xa4000120UL
++ #define PORT_PBDR 0xa4000122UL
++ #define PORT_PCDR 0xa4000124UL
++ #define PORT_PFDR 0xa400012aUL
++
++ #define PINT0_IRQ 40
++ #define PINT8_IRQ 41
++ #define PINT0_IPR_ADDR INTC_IPRD
++ #define PINT8_IPR_ADDR INTC_IPRD
++ #define PINT0_IPR_POS 3
++ #define PINT8_IPR_POS 2
++ #define PINT0_PRIORITY 2
++ #define PINT8_PRIORITY 2
++
+ #elif defined(CONFIG_CPU_SUBTYPE_SH7710)
+ # define ONCHIP_NR_IRQS 104
+ #elif defined(CONFIG_CPU_SUBTYPE_SH7750)
+diff --git a/sound/oss/sh_dac_audio.c b/sound/oss/sh_dac_audio.c
+index 7ea9acc..dcfcad0 100644
+--- a/sound/oss/sh_dac_audio.c
++++ b/sound/oss/sh_dac_audio.c
+@@ -32,6 +32,7 @@
+ #define MODNAME "sh_dac_audio"
+
+ #define TMU_TOCR_INIT 0x00
++#define TIMER1_IRQ 14
+
+ #define TMU1_TCR_INIT 0x0020 /* Clock/4, rising edge; interrupt on */
+ #define TMU1_TSTR_INIT 0x02 /* Bit to turn on TMU1 */
+@@ -104,7 +105,7 @@ static void dac_audio_set_rate(void)
+ unsigned long interval;
+ struct clk *clk;
+
+- clk = clk_get("module_clk");
++ clk = clk_get("module_clk", NULL);
+ interval = (clk_get_rate(clk) / 4) / rate;
+ clk_put(clk);
+ ctrl_outl(interval, TMU1_TCOR);
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/hp6xx-IRQ3.patch b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/hp6xx-IRQ3.patch
new file mode 100644
index 0000000000..c4819514d7
--- /dev/null
+++ b/packages/linux/linux-jlime-jornada6xx-2.6.21rc5/hp6xx-IRQ3.patch
@@ -0,0 +1,4 @@
+14c14
+< #define HP680_TS_IRQ IRQ3_IRQ
+---
+> #define HP680_TS_IRQ 35
diff --git a/packages/linux/linux-jlime-jornada6xx_2.6.21rc5.bb b/packages/linux/linux-jlime-jornada6xx_2.6.21rc5.bb
new file mode 100644
index 0000000000..82b54258b5
--- /dev/null
+++ b/packages/linux/linux-jlime-jornada6xx_2.6.21rc5.bb
@@ -0,0 +1,33 @@
+SECTION = "kernel"
+DESCRIPTION = "JLime Linux kernel for SuperH based Jornada 6xx"
+LICENSE = "GPL"
+PR = "r0"
+
+COMPATIBLE_HOST = "sh.*-linux"
+#COMPATIBLE_MACHINE = "jornada6xx"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.21-rc5 \
+ file://git-20070405-2.patch;patch=1 \
+ file://hp6xx-IRQ3.patch;patch=1 \
+ file://defconfig"
+
+
+S = "${WORKDIR}/git"
+
+inherit kernel
+
+#Lets let 3.4.x handle the compilation of this one
+KERNEL_CCSUFFIX = "-3.4.4"
+
+ARCH = "sh"
+KERNEL_IMAGETYPE = "zImage"
+FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/$(ARCH)/boot/$(KERNEL_IMAGETYPE) $(DEPLOY_DIR)/images/$(KERNEL_IMAGETYPE)
+}
diff --git a/packages/linux/linux-linkstationarm/.mtn2git_empty b/packages/linux/linux-linkstationarm/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-linkstationarm/.mtn2git_empty
diff --git a/packages/linux/linux-linkstationarm/defconfig b/packages/linux/linux-linkstationarm/defconfig
new file mode 100644
index 0000000000..0c11bab677
--- /dev/null
+++ b/packages/linux/linux-linkstationarm/defconfig
@@ -0,0 +1,1123 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.12.6
+# Tue Apr 3 15:51:24 2007
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_IOMAP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+# CONFIG_LOCALVERSION is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+CONFIG_ARCH_MV88fxx81=y
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+
+#
+# BUFFALO Features
+#
+CONFIG_BUFFALO_PLATFORM=y
+CONFIG_BUFFALO_LINKSTATION_LSGL=y
+# CONFIG_BUFFALO_TERASTATION_TEST is not set
+# CONFIG_BUFFALO_LSGL_SOFT_BOARDID is not set
+CONFIG_USE_RS5C372=y
+CONFIG_BUFFALO_USE_MICON=y
+
+#
+# mv88fxx81 Options
+#
+# CONFIG_ARCH_MV88f1181 is not set
+CONFIG_ARCH_MV88f5181=y
+CONFIG_MV88F5182=y
+# CONFIG_VOIP_RD2 is not set
+# CONFIG_MV_88W8660 is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+# CONFIG_USE_DSP is not set
+CONFIG_MV_DMA_COPYUSER=y
+
+#
+# egiga options
+#
+CONFIG_ETH_0_MACADDR="000000000051"
+# CONFIG_EGIGA_PROC is not set
+# CONFIG_EGIGA_MULTI_Q is not set
+# CONFIG_QUARTER_DECK is not set
+
+#
+# cesa options
+#
+CONFIG_MV_CESA=y
+# CONFIG_MV_CESA_TEST is not set
+CONFIG_SCSI_MVSATA=y
+CONFIG_MV88fxx81_PROC=y
+CONFIG_UBOOT_STRUCT=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+CONFIG_ISA_DMA_API=y
+CONFIG_PCI=y
+# CONFIG_PCI_LEGACY_PROC is not set
+# CONFIG_PCI_NAMES is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_REORDER is not set
+# CONFIG_DISCONTIGMEM is not set
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+# CONFIG_LEDS_CPU is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyAM0 root=/dev/nfs rw nfsroot=10.4.50.31:/home/rshitrit/cramfs-1.1/cramfs-1.1/shoko2 mem=32M ip=10.4.50.99:10.4.50.31:::ARM:eth0:none"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+CONFIG_FPE_FASTFPE=y
+# CONFIG_VFP is not set
+CONFIG_VFP_RUN_FAST_MODE=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_RETRY=0
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0xf0000000
+CONFIG_MTD_PHYSMAP_LEN=0x1000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=3
+CONFIG_BLK_DEV_RAM_SIZE=16384
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_IP_TCPDIAG=y
+# CONFIG_IP_TCPDIAG_IPV6 is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+CONFIG_ATALK=m
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+CONFIG_SK98LIN=y
+CONFIG_SK98LIN_NAPI=y
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+# CONFIG_MARVELL_HARDAP is not set
+# CONFIG_MARVELL_SOFTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_ISA is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Hardware Sensors Chip support
+#
+# CONFIG_I2C_SENSOR is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+
+#
+# Other I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_DPCM=y
+# CONFIG_USB_STORAGE_USBAT is not set
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+
+#
+# XFS support
+#
+CONFIG_XFS_FS=y
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_TGR192=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRYPTO_SERPENT=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=y
+CONFIG_CRYPTO_CAST6=y
+CONFIG_CRYPTO_TEA=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=y
+CONFIG_CRYPTO_ANUBIS=y
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
diff --git a/packages/linux/linux-linkstationarm/makefile.patch b/packages/linux/linux-linkstationarm/makefile.patch
new file mode 100644
index 0000000000..89d6d50594
--- /dev/null
+++ b/packages/linux/linux-linkstationarm/makefile.patch
@@ -0,0 +1,11 @@
+--- linux-2.6.12.old/Makefile 2005-08-28 23:41:01.000000000 +0000
++++ linux-2.6.12/Makefile 2007-04-07 17:56:02.000000000 +0000
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 12
+-EXTRAVERSION = -arm1
++EXTRAVERSION = .6-arm1
+ NAME=Woozy Numbat
+
+ # *DOCUMENTATION*
diff --git a/packages/linux/linux-linkstationarm_2.6.12.bb b/packages/linux/linux-linkstationarm_2.6.12.bb
new file mode 100644
index 0000000000..77703ad999
--- /dev/null
+++ b/packages/linux/linux-linkstationarm_2.6.12.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Linux Kernel for ARM based Buffalo Linkstations"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r2"
+
+COMPATIBLE_MACHINE = "lsarm"
+
+SRC_URI = "http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.tar.bz2 \
+ http://downloads.linkstationwiki.net/Users/timtimred/lsarm/2.6.12-compiler_fix.patch;patch=1 \
+ file://makefile.patch;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.12"
+
+inherit kernel
+
+export ARCH="arm"
+
+KERNEL_IMAGETYPE = "uImage"
+
+do_configure() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ ARCH=${ARCH} oe_runmake oldconfig
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/vmlinux.UBoot
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
diff --git a/packages/linux/linux-linkstationppc/.mtn2git_empty b/packages/linux/linux-linkstationppc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-linkstationppc/.mtn2git_empty
diff --git a/packages/linux/linux-linkstationppc/defconfig b/packages/linux/linux-linkstationppc/defconfig
new file mode 100644
index 0000000000..385f7826f0
--- /dev/null
+++ b/packages/linux/linux-linkstationppc/defconfig
@@ -0,0 +1,1981 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-rc4
+# Sun Mar 25 15:52:14 2007
+#
+# CONFIG_PPC64 is not set
+CONFIG_PPC32=y
+CONFIG_PPC_MERGE=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_IRQ_PER_CPU=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_PPC_UDBG_16550=y
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DEFAULT_UIMAGE=y
+
+#
+# Processor support
+#
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_82xx is not set
+# CONFIG_PPC_83xx is not set
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_86xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_E200 is not set
+CONFIG_6xx=y
+CONFIG_PPC_FPU=y
+# CONFIG_PPC_DCR_NATIVE is not set
+# CONFIG_PPC_DCR_MMIO is not set
+# CONFIG_ALTIVEC is not set
+CONFIG_PPC_STD_MMU=y
+CONFIG_PPC_STD_MMU_32=y
+# CONFIG_SMP is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Platform support
+#
+# CONFIG_PPC_MULTIPLATFORM is not set
+CONFIG_EMBEDDED6xx=y
+# CONFIG_APUS is not set
+# CONFIG_PPC_MPC52xx is not set
+# CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
+# CONFIG_KATANA is not set
+# CONFIG_WILLOW is not set
+# CONFIG_CPCI690 is not set
+# CONFIG_POWERPMC250 is not set
+# CONFIG_CHESTNUT is not set
+# CONFIG_SPRUCE is not set
+# CONFIG_HDPU is not set
+# CONFIG_EV64260 is not set
+# CONFIG_LOPEC is not set
+# CONFIG_MVME5100 is not set
+# CONFIG_PPLUS is not set
+# CONFIG_PRPMC750 is not set
+# CONFIG_PRPMC800 is not set
+# CONFIG_SANDPOINT is not set
+CONFIG_LINKSTATION=y
+# CONFIG_MPC7448HPC2 is not set
+# CONFIG_RADSTONE_PPC7D is not set
+# CONFIG_PAL4 is not set
+# CONFIG_EST8260 is not set
+# CONFIG_SBC82xx is not set
+# CONFIG_SBS8260 is not set
+# CONFIG_RPX8260 is not set
+# CONFIG_TQM8260 is not set
+# CONFIG_ADS8272 is not set
+# CONFIG_PQ2FADS is not set
+# CONFIG_EV64360 is not set
+CONFIG_PPC_GEN550=y
+CONFIG_MPC10X_BRIDGE=y
+CONFIG_MPC10X_OPENPIC=y
+# CONFIG_MPC10X_STORE_GATHERING is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_MPIC=y
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_PROC_DEVICETREE=y
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_MPIC_WEIRD is not set
+# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_FSL_SOC=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_PIMSM_V1 is not set
+# CONFIG_IP_PIMSM_V2 is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+# CONFIG_NF_CT_ACCT is not set
+# CONFIG_NF_CONNTRACK_MARK is not set
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+# CONFIG_NF_CONNTRACK_SANE is not set
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+# CONFIG_IP_NF_MATCH_TOS is not set
+CONFIG_IP_NF_MATCH_RECENT=m
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_SAME is not set
+# CONFIG_NF_NAT_SNMP_BASIC is not set
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_NF_CONNTRACK_IPV6 is not set
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+# CONFIG_VIA_FIR is not set
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+CONFIG_IEEE80211_DEBUG=y
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+CONFIG_IEEE80211_SOFTMAC_DEBUG=y
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0xffc00000
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+# CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=2
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+CONFIG_PATA_IT821X=y
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+CONFIG_PATA_SIL680=y
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+# CONFIG_MD_FAULTY is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_MAC_EMUMOUSEBTN is not set
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=y
+# CONFIG_TULIP_MWI is not set
+CONFIG_TULIP_MMIO=y
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+# CONFIG_ULI526X is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=y
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=y
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PASEMI is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=m
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_M41T00 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FONT_8x16=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA PowerMac devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PPC_OF=y
+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
+# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
+CONFIG_USB_OHCI_HCD_PCI=y
+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+CONFIG_USB_ACECAD=m
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
+CONFIG_USB_TOUCHSCREEN_ETURBO=y
+CONFIG_USB_TOUCHSCREEN_GUNZE=y
+CONFIG_USB_TOUCHSCREEN_DMC_TSC10=y
+CONFIG_USB_YEALINK=m
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+CONFIG_USB_ATI_REMOTE2=m
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+CONFIG_USB_APPLETOUCH=y
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=y
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+CONFIG_RTC_DRV_RS5C372=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+CONFIG_HFSPLUS_FS=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_VXFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+
+#
+# Instrumentation Support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUGGER is not set
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT is not set
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/packages/linux/linux-linkstationppc_2.6.21-rc5.bb b/packages/linux/linux-linkstationppc_2.6.21-rc5.bb
new file mode 100644
index 0000000000..7a6efb0059
--- /dev/null
+++ b/packages/linux/linux-linkstationppc_2.6.21-rc5.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Linux Kernel for the Buffalo Linkstation HG 2.6.21-rc5"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r0"
+
+DEPENDS = "dtc-native"
+COMPATIBLE_MACHINE = "(lsppchd|lsppchg)"
+
+SRC_URI = "http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
+ http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.21-rc5.bz2;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.20"
+
+inherit kernel
+
+export ARCH="powerpc"
+
+KERNEL_IMAGETYPE = "uImage"
+
+FILES_kernel-image += "/boot/kuroboxHG.dtb \
+ /boot/kuroboxHD.dtb"
+
+do_configure() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ ARCH=${ARCH} oe_runmake oldconfig
+}
+
+do_install_append() {
+ dtc -f -I dts -O dtb -o ${D}/boot/kuroboxHG.dtb -V 16 arch/${ARCH}/boot/dts/kuroboxHG.dts
+ dtc -f -I dts -O dtb -o ${D}/boot/kuroboxHD.dtb -V 16 arch/${ARCH}/boot/dts/kuroboxHD.dts
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/vmlinux.UBoot
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
diff --git a/packages/linux/linux-magicbox-2.6.18.6/.mtn2git_empty b/packages/linux/linux-magicbox-2.6.18.6/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/.mtn2git_empty
diff --git a/packages/linux/linux-magicbox-2.6.18.6/000-fix-makefile.patch b/packages/linux/linux-magicbox-2.6.18.6/000-fix-makefile.patch
new file mode 100644
index 0000000000..ce52a02b2f
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/000-fix-makefile.patch
@@ -0,0 +1,12 @@
+diff -ru linux-2.6.18/Makefile linux-2.6.18-magicbox/Makefile
+--- linux-2.6.18/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox/Makefile 2006-09-22 20:16:55.000000000 +0200
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 18
+-EXTRAVERSION = .6
++EXTRAVERSION = -magicbox2
+ NAME=Avast! A bilge rat!
+
+ # *DOCUMENTATION*
diff --git a/packages/linux/linux-magicbox-2.6.18.6/001-magicbox-board-2.6.18.patch b/packages/linux/linux-magicbox-2.6.18.6/001-magicbox-board-2.6.18.patch
new file mode 100644
index 0000000000..bd3214dacd
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/001-magicbox-board-2.6.18.patch
@@ -0,0 +1,381 @@
+diff -Nru linux-2.6.18/arch/ppc/platforms/4xx/Kconfig linux-2.6.18-magicbox/arch/ppc/platforms/4xx/Kconfig
+--- linux-2.6.18/arch/ppc/platforms/4xx/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox/arch/ppc/platforms/4xx/Kconfig 2006-09-22 03:38:30.000000000 +0200
+@@ -14,7 +14,7 @@
+ choice
+ prompt "Machine Type"
+ depends on 40x
+- default WALNUT
++ default MAGICBOX
+
+ config BUBINGA
+ bool "Bubinga"
+@@ -52,6 +52,12 @@
+ help
+ This option enables support for the IBM PPC405GP evaluation board.
+
++config MAGICBOX
++ bool "MagicBox"
++ select WANT_EARLY_SERIAL
++ help
++ This option enables support for the IBM PPC405EP evaluation board.
++
+ config XILINX_ML300
+ bool "Xilinx-ML300"
+ help
+@@ -173,7 +179,7 @@
+
+ config IBM_OCP
+ bool
+- depends on ASH || BAMBOO || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || YUCCA || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
++ depends on ASH || BAMBOO || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || YUCCA || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT || MAGICBOX
+ default y
+
+ config IBM_EMAC4
+@@ -183,7 +189,7 @@
+
+ config BIOS_FIXUP
+ bool
+- depends on BUBINGA || EP405 || SYCAMORE || WALNUT || CPCI405
++ depends on BUBINGA || EP405 || SYCAMORE || WALNUT || CPCI405 || MAGICBOX
+ default y
+
+ # OAK doesn't exist but wanted to keep this around for any future 403GCX boards
+@@ -194,7 +200,7 @@
+
+ config 405EP
+ bool
+- depends on BUBINGA
++ depends on BUBINGA || MAGICBOX
+ default y
+
+ config 405GP
+diff -Nru linux-2.6.18/arch/ppc/platforms/4xx/Makefile linux-2.6.18-magicbox/arch/ppc/platforms/4xx/Makefile
+--- linux-2.6.18/arch/ppc/platforms/4xx/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox/arch/ppc/platforms/4xx/Makefile 2006-09-22 03:37:18.000000000 +0200
+@@ -13,6 +13,7 @@
+ obj-$(CONFIG_REDWOOD_6) += redwood6.o
+ obj-$(CONFIG_SYCAMORE) += sycamore.o
+ obj-$(CONFIG_WALNUT) += walnut.o
++obj-$(CONFIG_MAGICBOX) += magicbox.o
+ obj-$(CONFIG_XILINX_ML300) += xilinx_ml300.o
+ obj-$(CONFIG_XILINX_ML403) += xilinx_ml403.o
+
+diff -Nru linux-2.6.18/arch/ppc/platforms/4xx/magicbox.c linux-2.6.18-magicbox/arch/ppc/platforms/4xx/magicbox.c
+--- linux-2.6.18/arch/ppc/platforms/4xx/magicbox.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-magicbox/arch/ppc/platforms/4xx/magicbox.c 2006-09-22 03:37:18.000000000 +0200
+@@ -0,0 +1,249 @@
++/*
++ * Support for IBM PPC 405EP-based MagicBox board
++ * Copyright (C) 2006 Karol Lewandowski
++ *
++ * Heavily based on bubinga.c
++ *
++ * Author: SAW (IBM), derived from walnut.c.
++ * Maintained by MontaVista Software <source@mvista.com>
++ *
++ * 2003 (c) MontaVista Softare Inc. This file is licensed under the
++ * terms of the GNU General Public License version 2. This program is
++ * licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/smp.h>
++#include <linux/threads.h>
++#include <linux/param.h>
++#include <linux/string.h>
++#include <linux/blkdev.h>
++#include <linux/pci.h>
++#include <linux/tty.h>
++#include <linux/serial.h>
++#include <linux/serial_core.h>
++
++#include <asm/system.h>
++#include <asm/pci-bridge.h>
++#include <asm/processor.h>
++#include <asm/machdep.h>
++#include <asm/page.h>
++#include <asm/time.h>
++#include <asm/io.h>
++#include <asm/kgdb.h>
++#include <asm/ocp.h>
++#include <asm/ibm_ocp_pci.h>
++
++#include <platforms/4xx/ibm405ep.h>
++
++#undef DEBUG
++
++#ifdef DEBUG
++#define DBG(x...) printk(x)
++#else
++#define DBG(x...)
++#endif
++
++extern bd_t __res;
++
++/* Some IRQs unique to board
++ * Used by the generic 405 PCI setup functions in ppc4xx_pci.c
++ */
++int __init
++ppc405_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
++{
++ static char pci_irq_table[][4] =
++ /*
++ * PCI IDSEL/INTPIN->INTLINE
++ * A B C D
++ */
++ {
++ {28, 28, 28, 28}, /* IDSEL 1 - PCI slot 1 */
++ {29, 29, 29, 29}, /* IDSEL 2 - PCI slot 2 */
++ {30, 30, 30, 30}, /* IDSEL 3 - PCI slot 3 */
++ {31, 31, 31, 31}, /* IDSEL 4 - PCI slot 4 */
++ };
++
++ const long min_idsel = 1, max_idsel = 4, irqs_per_slot = 4;
++ return PCI_IRQ_TABLE_LOOKUP;
++};
++
++
++/* The serial clock for the chip is an internal clock determined by
++ * different clock speeds/dividers.
++ * Calculate the proper input baud rate and setup the serial driver.
++ */
++static void __init
++magicbox_early_serial_map(void)
++{
++ u32 uart_div;
++ int uart_clock;
++ struct uart_port port;
++
++ /* Calculate the serial clock input frequency
++ *
++ * The base baud is the PLL OUTA (provided in the board info
++ * structure) divided by the external UART Divisor, divided
++ * by 16.
++ */
++ uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV);
++ uart_clock = __res.bi_procfreq / uart_div;
++
++ /* Setup serial port access */
++ memset(&port, 0, sizeof(port));
++ port.membase = (void*)ACTING_UART0_IO_BASE;
++ port.irq = ACTING_UART0_INT;
++ port.uartclk = uart_clock;
++ port.regshift = 0;
++ port.iotype = UPIO_MEM;
++ port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
++ port.line = 0;
++
++ if (early_serial_setup(&port) != 0) {
++ printk("Early serial init of port 0 failed\n");
++ }
++
++ port.membase = (void*)ACTING_UART1_IO_BASE;
++ port.irq = ACTING_UART1_INT;
++ port.line = 1;
++
++ if (early_serial_setup(&port) != 0) {
++ printk("Early serial init of port 1 failed\n");
++ }
++}
++
++void __init
++bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip)
++{
++ unsigned int bar_response, bar;
++ /*
++ * Expected PCI mapping:
++ *
++ * PLB addr PCI memory addr
++ * --------------------- ---------------------
++ * 0000'0000 - 7fff'ffff <--- 0000'0000 - 7fff'ffff
++ * 8000'0000 - Bfff'ffff ---> 8000'0000 - Bfff'ffff
++ *
++ * PLB addr PCI io addr
++ * --------------------- ---------------------
++ * e800'0000 - e800'ffff ---> 0000'0000 - 0001'0000
++ *
++ * The following code is simplified by assuming that the bootrom
++ * has been well behaved in following this mapping.
++ */
++
++#ifdef DEBUG
++ int i;
++
++ printk("ioremap PCLIO_BASE = 0x%x\n", pcip);
++ printk("PCI bridge regs before fixup \n");
++ for (i = 0; i <= 3; i++) {
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
++ }
++ printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
++ printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
++ printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
++ printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
++
++#endif
++
++ /* added for IBM boot rom version 1.15 bios bar changes -AK */
++
++ /* Disable region first */
++ out_le32((void *) &(pcip->pmm[0].ma), 0x00000000);
++ /* PLB starting addr, PCI: 0x80000000 */
++ out_le32((void *) &(pcip->pmm[0].la), 0x80000000);
++ /* PCI start addr, 0x80000000 */
++ out_le32((void *) &(pcip->pmm[0].pcila), PPC405_PCI_MEM_BASE);
++ /* 512MB range of PLB to PCI */
++ out_le32((void *) &(pcip->pmm[0].pciha), 0x00000000);
++ /* Enable no pre-fetch, enable region */
++ out_le32((void *) &(pcip->pmm[0].ma), ((0xffffffff -
++ (PPC405_PCI_UPPER_MEM -
++ PPC405_PCI_MEM_BASE)) | 0x01));
++
++ /* Disable region one */
++ out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].la), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
++ out_le32((void *) &(pcip->ptm1ms), 0x00000001);
++
++ /* Disable region two */
++ out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].la), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
++ out_le32((void *) &(pcip->ptm2ms), 0x00000000);
++ out_le32((void *) &(pcip->ptm2la), 0x00000000);
++
++ /* Zero config bars */
++ for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) {
++ early_write_config_dword(hose, hose->first_busno,
++ PCI_FUNC(hose->first_busno), bar,
++ 0x00000000);
++ early_read_config_dword(hose, hose->first_busno,
++ PCI_FUNC(hose->first_busno), bar,
++ &bar_response);
++ DBG("BUS %d, device %d, Function %d bar 0x%8.8x is 0x%8.8x\n",
++ hose->first_busno, PCI_SLOT(hose->first_busno),
++ PCI_FUNC(hose->first_busno), bar, bar_response);
++ }
++ /* end work arround */
++
++#ifdef DEBUG
++ printk("PCI bridge regs after fixup \n");
++ for (i = 0; i <= 3; i++) {
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
++ }
++ printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
++ printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
++ printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
++ printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
++
++#endif /* DEBUG */
++}
++
++void __init
++magicbox_setup_arch(void)
++{
++ ppc4xx_setup_arch();
++
++ ibm_ocp_set_emac(0, 1);
++
++ magicbox_early_serial_map();
++
++ /* Identify the system */
++ printk("MagicBox port (C) 2005 Karol Lewandowski <kl@jasmine.eu.org>\n");
++}
++
++void __init
++magicbox_map_io(void)
++{
++ ppc4xx_map_io();
++}
++
++void __init
++platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
++ unsigned long r6, unsigned long r7)
++{
++ ppc4xx_init(r3, r4, r5, r6, r7);
++
++ ppc_md.setup_arch = magicbox_setup_arch;
++ ppc_md.setup_io_mappings = magicbox_map_io;
++
++#ifdef CONFIG_KGDB
++ ppc_md.early_serial_map = magicbox_early_serial_map;
++#endif
++
++}
+diff -Nru linux-2.6.18/arch/ppc/platforms/4xx/magicbox.h linux-2.6.18-magicbox/arch/ppc/platforms/4xx/magicbox.h
+--- linux-2.6.18/arch/ppc/platforms/4xx/magicbox.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-magicbox/arch/ppc/platforms/4xx/magicbox.h 2006-09-22 03:37:18.000000000 +0200
+@@ -0,0 +1,47 @@
++/*
++ * Support for IBM PPC 405EP-based MagicBox board
++ *
++ * Heavily based on bubinga.h
++ *
++ *
++ * Author: SAW (IBM), derived from walnut.h.
++ * Maintained by MontaVista Software <source@mvista.com>
++ *
++ * 2003 (c) MontaVista Softare Inc. This file is licensed under the
++ * terms of the GNU General Public License version 2. This program is
++ * licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#ifdef __KERNEL__
++#ifndef __MAGICBOX_H__
++#define __MAGICBOX_H__
++
++#include <linux/config.h>
++#include <platforms/4xx/ibm405ep.h>
++#include <asm/ppcboot.h>
++
++/* Memory map for the "MagicBox" 405EP evaluation board -- generic 4xx. */
++
++/* The UART clock is based off an internal clock -
++ * define BASE_BAUD based on the internal clock and divider(s).
++ * Since BASE_BAUD must be a constant, we will initialize it
++ * using clock/divider values which OpenBIOS initializes
++ * for typical configurations at various CPU speeds.
++ * The base baud is calculated as (FWDA / EXT UART DIV / 16)
++ */
++#define BASE_BAUD 0
++
++/* Flash */
++#define PPC40x_FPGA_BASE 0xF0300000
++#define PPC40x_FPGA_REG_OFFS 1 /* offset to flash map reg */
++#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
++#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
++#define PPC40x_FLASH_LOW 0xFFF00000
++#define PPC40x_FLASH_HIGH 0xFFF80000
++#define PPC40x_FLASH_SIZE 0x80000
++
++#define PPC4xx_MACHINE_NAME "MagicBox"
++
++#endif /* __MAGICBOX_H__ */
++#endif /* __KERNEL__ */
+diff -Nru linux-2.6.18/include/asm-ppc/ibm4xx.h linux-2.6.18-magicbox/include/asm-ppc/ibm4xx.h
+--- linux-2.6.18/include/asm-ppc/ibm4xx.h 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox/include/asm-ppc/ibm4xx.h 2006-09-22 03:37:18.000000000 +0200
+@@ -18,6 +18,10 @@
+
+ #ifdef CONFIG_40x
+
++#if defined(CONFIG_MAGICBOX)
++#include <platforms/4xx/magicbox.h>
++#endif
++
+ #if defined(CONFIG_BUBINGA)
+ #include <platforms/4xx/bubinga.h>
+ #endif
diff --git a/packages/linux/linux-magicbox-2.6.18.6/002-magicbox-mtd-map-2.6.18.patch b/packages/linux/linux-magicbox-2.6.18.6/002-magicbox-mtd-map-2.6.18.patch
new file mode 100644
index 0000000000..f549f34420
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/002-magicbox-mtd-map-2.6.18.patch
@@ -0,0 +1,136 @@
+diff -Nru linux-2.6.18/drivers/mtd/maps/Kconfig linux-2.6.18-magicmap/drivers/mtd/maps/Kconfig
+--- linux-2.6.18/drivers/mtd/maps/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicmap/drivers/mtd/maps/Kconfig 2006-09-22 03:36:25.000000000 +0200
+@@ -323,6 +323,15 @@
+ Walnut board. If you have one of these boards and would like to
+ use the flash chips on it, say 'Y'.
+
++config MTD_MAGICMAP
++ tristate "Flash device mapped on IBM 405EP MagicBox"
++ depends on MTD_CFI && MTD_PARTITIONS && 40x && MAGICBOX
++ help
++ This enables access routines for the flash chips on the IBM 405EP
++ MagicBox board. If you have one of these boards and would like to
++ use the flash chips on it, say 'Y'.
++
++
+ config MTD_EBONY
+ tristate "Flash devices mapped on IBM 440GP Ebony"
+ depends on MTD_JEDECPROBE && EBONY
+diff -Nru linux-2.6.18/drivers/mtd/maps/Makefile linux-2.6.18-magicmap/drivers/mtd/maps/Makefile
+--- linux-2.6.18/drivers/mtd/maps/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicmap/drivers/mtd/maps/Makefile 2006-09-22 03:36:25.000000000 +0200
+@@ -58,6 +58,7 @@
+ obj-$(CONFIG_MTD_BEECH) += beech-mtd.o
+ obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o
+ obj-$(CONFIG_MTD_WALNUT) += walnut.o
++obj-$(CONFIG_MTD_MAGICMAP) += magicmap.o
+ obj-$(CONFIG_MTD_H720X) += h720x-flash.o
+ obj-$(CONFIG_MTD_SBC8240) += sbc8240.o
+ obj-$(CONFIG_MTD_NOR_TOTO) += omap-toto-flash.o
+diff -Nru linux-2.6.18/drivers/mtd/maps/magicmap.c linux-2.6.18-magicmap/drivers/mtd/maps/magicmap.c
+--- linux-2.6.18/drivers/mtd/maps/magicmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-magicmap/drivers/mtd/maps/magicmap.c 2006-09-22 03:36:25.000000000 +0200
+@@ -0,0 +1,102 @@
++/*
++ * magicmap.c: Copyleft 2005 Karol Lewandowski
++ *
++ * Mapping for MagicBox flash.
++ * Based on walnut.c.
++ *
++ * Heikki Lindholm <holindho@infradead.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++#include <linux/config.h>
++#include <asm/io.h>
++
++static struct mtd_info *flash;
++
++static struct map_info magic_map = {
++ .name = "Magically mapped flash",
++ .phys = 0xffc00000,
++ .size = 0x400000,
++ .bankwidth = 2,
++};
++
++static struct mtd_partition magic_partitions[] = {
++ {
++ .name = "kernel",
++ .offset = 0x0,
++ .size = 0x0e0000,
++ },
++ {
++ .name = "ramdisk",
++ .offset = 0x0e0000,
++ .size = 0x2c0000,
++ },
++ {
++ .name = "persistent",
++ .offset = 0x3a0000,
++ .size = 0x020000,
++ },
++ {
++ .name = "bootloader",
++ .offset = 0x3c0000,
++ .size = 0x040000,
++ .mask_flags = MTD_WRITEABLE,
++ },
++};
++
++int __init init_magic(void)
++{
++ magic_map.virt =
++ (void __iomem *)ioremap(magic_map.phys, magic_map.size);
++
++ if (!magic_map.virt) {
++ printk("Failed to ioremap flash.\n");
++ return -EIO;
++ }
++
++ simple_map_init(&magic_map);
++
++ flash = do_map_probe("cfi_probe", &magic_map);
++ if (flash) {
++ flash->owner = THIS_MODULE;
++ add_mtd_partitions(flash, magic_partitions,
++ ARRAY_SIZE(magic_partitions));
++ } else {
++ printk("map probe failed for flash\n");
++ return -ENXIO;
++ }
++
++ return 0;
++}
++
++static void __exit cleanup_magic(void)
++{
++ if (flash) {
++ del_mtd_partitions(flash);
++ map_destroy(flash);
++ }
++
++ if (magic_map.virt) {
++ iounmap((void *)magic_map.virt);
++ magic_map.virt = NULL;
++ }
++}
++
++module_init(init_magic);
++module_exit(cleanup_magic);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Karol Lewandowski");
++MODULE_DESCRIPTION("MTD map and partitions for IBM 405EP MagicBox boards");
diff --git a/packages/linux/linux-magicbox-2.6.18.6/010-load-ramdisk-even-if-rootdev-equals-ramdisk.patch b/packages/linux/linux-magicbox-2.6.18.6/010-load-ramdisk-even-if-rootdev-equals-ramdisk.patch
new file mode 100644
index 0000000000..d980be9d6c
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/010-load-ramdisk-even-if-rootdev-equals-ramdisk.patch
@@ -0,0 +1,16 @@
+--- linux-2.6.15-magicbox3/init/do_mounts_initrd.c~ 2005-08-31 00:26:43.000000000 +0200
++++ linux-2.6.15-magicbox3/init/do_mounts_initrd.c 2006-05-14 14:00:35.000000000 +0200
+@@ -112,8 +112,12 @@
+ * unless /dev/ram0 is supposed to be our actual root device,
+ * in that case the ram disk is just set up here, and gets
+ * mounted in the normal path.
++ *
++ * Not true for magicbox: someone put root=/dev/ram into
++ * bootloader defaults and prepared hundreds of boards...
++ * Fix issue there.
+ */
+- if (rd_load_image("/initrd.image") && ROOT_DEV != Root_RAM0) {
++ if (rd_load_image("/initrd.image")) {
+ sys_unlink("/initrd.image");
+ handle_initrd();
+ return 1;
diff --git a/packages/linux/linux-magicbox-2.6.18.6/config-2.6.18-magicbox2 b/packages/linux/linux-magicbox-2.6.18.6/config-2.6.18-magicbox2
new file mode 100644
index 0000000000..c181d182cf
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/config-2.6.18-magicbox2
@@ -0,0 +1,1204 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-magicbox2
+# Thu Dec 28 19:45:11 2006
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL=y
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+# CONFIG_FUTEX is not set
+# CONFIG_EPOLL is not set
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# Processor
+#
+# CONFIG_6xx is not set
+CONFIG_40x=y
+# CONFIG_44x is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+CONFIG_4xx=y
+CONFIG_WANT_EARLY_SERIAL=y
+
+#
+# IBM 4xx options
+#
+# CONFIG_BUBINGA is not set
+# CONFIG_CPCI405 is not set
+# CONFIG_EP405 is not set
+# CONFIG_REDWOOD_5 is not set
+# CONFIG_REDWOOD_6 is not set
+# CONFIG_SYCAMORE is not set
+# CONFIG_WALNUT is not set
+CONFIG_MAGICBOX=y
+# CONFIG_XILINX_ML300 is not set
+# CONFIG_XILINX_ML403 is not set
+CONFIG_IBM_OCP=y
+CONFIG_BIOS_FIXUP=y
+CONFIG_405EP=y
+CONFIG_PPC4xx_DMA=y
+CONFIG_PPC4xx_EDMA=y
+CONFIG_PPC_GEN550=y
+CONFIG_UART0_TTYS0=y
+# CONFIG_UART0_TTYS1 is not set
+CONFIG_NOT_COHERENT_CACHE=y
+
+#
+# Platform options
+#
+# CONFIG_PC_KEYBOARD is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+# CONFIG_SECCOMP is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_CONSISTENT_START=0xff100000
+CONFIG_CONSISTENT_SIZE=0x00200000
+CONFIG_BOOT_LOAD=0x00400000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPGRE_BROADCAST=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+CONFIG_NETFILTER_XT_MATCH_ESP=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_REALM=y
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_PPTP=m
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_IPRANGE=y
+CONFIG_IP_NF_MATCH_LAYER7=m
+# CONFIG_IP_NF_MATCH_LAYER7_DEBUG is not set
+CONFIG_IP_NF_MATCH_TOS=y
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_DSCP=y
+CONFIG_IP_NF_MATCH_AH=y
+CONFIG_IP_NF_MATCH_TTL=y
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=y
+CONFIG_IP_NF_MATCH_HASHLIMIT=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_IP_NF_TARGET_ULOG=y
+CONFIG_IP_NF_TARGET_TCPMSS=y
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=y
+CONFIG_IP_NF_TARGET_ECN=y
+# CONFIG_IP_NF_TARGET_DSCP is not set
+CONFIG_IP_NF_TARGET_TTL=y
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=y
+CONFIG_BRIDGE_EBT_BROUTE=y
+CONFIG_BRIDGE_EBT_T_FILTER=y
+CONFIG_BRIDGE_EBT_T_NAT=y
+CONFIG_BRIDGE_EBT_802_3=y
+CONFIG_BRIDGE_EBT_AMONG=y
+CONFIG_BRIDGE_EBT_ARP=y
+CONFIG_BRIDGE_EBT_IP=y
+CONFIG_BRIDGE_EBT_LIMIT=y
+CONFIG_BRIDGE_EBT_MARK=y
+CONFIG_BRIDGE_EBT_PKTTYPE=y
+CONFIG_BRIDGE_EBT_STP=y
+CONFIG_BRIDGE_EBT_VLAN=y
+CONFIG_BRIDGE_EBT_ARPREPLY=y
+CONFIG_BRIDGE_EBT_DNAT=y
+CONFIG_BRIDGE_EBT_MARK_T=y
+CONFIG_BRIDGE_EBT_REDIRECT=y
+CONFIG_BRIDGE_EBT_SNAT=y
+CONFIG_BRIDGE_EBT_LOG=y
+CONFIG_BRIDGE_EBT_ULOG=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+CONFIG_VLAN_8021Q=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+# CONFIG_NET_SCH_CBQ is not set
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=y
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=y
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=y
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+# CONFIG_NET_SCH_NETEM is not set
+CONFIG_NET_SCH_INGRESS=y
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=y
+CONFIG_NET_CLS_TCINDEX=y
+CONFIG_NET_CLS_ROUTE4=y
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+# CONFIG_CLS_U32_PERF is not set
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+# CONFIG_NET_CLS_RSVP6 is not set
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_MAGICMAP=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_IDEPCI is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_MAGICBOX_IDE=y
+CONFIG_BLK_DEV_MAGICBOX_PROTOTYPE=y
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_IBM_EMAC=y
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_EMAC_PHY_RX_CLK_FIX is not set
+# CONFIG_IBM_EMAC_DEBUG is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
+CONFIG_PCI_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_HOSTAP_PLX is not set
+CONFIG_HOSTAP_PCI=m
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_BOOKE_WDT is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_IBM_IIC=y
+# CONFIG_I2C_MPC is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_M41T00 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+CONFIG_SENSORS_LM75=y
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# IBM 40x options
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=y
+CONFIG_TEXTSEARCH_BM=y
+CONFIG_TEXTSEARCH_FSM=y
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_FS is not set
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+CONFIG_PPC_OCP=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/packages/linux/linux-magicbox-2.6.18.6/kernel-2.6.18-layer7-2.6.patch b/packages/linux/linux-magicbox-2.6.18.6/kernel-2.6.18-layer7-2.6.patch
new file mode 100644
index 0000000000..63e36d7a5c
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/kernel-2.6.18-layer7-2.6.patch
@@ -0,0 +1,2051 @@
+--- linux-2.6.18/include/linux/netfilter_ipv4/ip_conntrack.h 2006-09-19 22:42:06.000000000 -0500
++++ linux-2.6.18-layer7/include/linux/netfilter_ipv4/ip_conntrack.h 2006-09-24 10:17:45.000000000 -0500
+@@ -127,6 +127,15 @@ struct ip_conntrack
+ /* Traversed often, so hopefully in different cacheline to top */
+ /* These are my tuples; original and reply */
+ struct ip_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX];
++
++#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ struct {
++ char * app_proto; /* e.g. "http". NULL before decision. "unknown" after decision if no match */
++ char * app_data; /* application layer data so far. NULL after match decision */
++ unsigned int app_data_len;
++ } layer7;
++#endif
++
+ };
+
+ struct ip_conntrack_expect
+--- linux-2.6.18/include/linux/netfilter_ipv4/ipt_layer7.h 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/include/linux/netfilter_ipv4/ipt_layer7.h 2006-09-24 10:17:45.000000000 -0500
+@@ -0,0 +1,26 @@
++/*
++ By Matthew Strait <quadong@users.sf.net>, Dec 2003.
++ http://l7-filter.sf.net
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version
++ 2 of the License, or (at your option) any later version.
++ http://www.gnu.org/licenses/gpl.txt
++*/
++
++#ifndef _IPT_LAYER7_H
++#define _IPT_LAYER7_H
++
++#define MAX_PATTERN_LEN 8192
++#define MAX_PROTOCOL_LEN 256
++
++typedef char *(*proc_ipt_search) (char *, char, char *);
++
++struct ipt_layer7_info {
++ char protocol[MAX_PROTOCOL_LEN];
++ char invert:1;
++ char pattern[MAX_PATTERN_LEN];
++};
++
++#endif /* _IPT_LAYER7_H */
+--- linux-2.6.18/net/ipv4/netfilter/Kconfig 2006-09-19 22:42:06.000000000 -0500
++++ linux-2.6.18-layer7/net/ipv4/netfilter/Kconfig 2006-09-24 10:17:45.000000000 -0500
+@@ -248,6 +248,24 @@ config IP_NF_MATCH_IPRANGE
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP_NF_MATCH_LAYER7
++ tristate "Layer 7 match support (EXPERIMENTAL)"
++ depends on IP_NF_IPTABLES && IP_NF_CT_ACCT && IP_NF_CONNTRACK && EXPERIMENTAL
++ help
++ Say Y if you want to be able to classify connections (and their
++ packets) based on regular expression matching of their application
++ layer data. This is one way to classify applications such as
++ peer-to-peer filesharing systems that do not always use the same
++ port.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_MATCH_LAYER7_DEBUG
++ bool "Layer 7 debugging output"
++ depends on IP_NF_MATCH_LAYER7
++ help
++ Say Y to get lots of debugging output.
++
+ config IP_NF_MATCH_TOS
+ tristate "TOS match support"
+ depends on IP_NF_IPTABLES
+--- linux-2.6.18/net/ipv4/netfilter/Makefile 2006-09-19 22:42:06.000000000 -0500
++++ linux-2.6.18-layer7/net/ipv4/netfilter/Makefile 2006-09-24 10:17:45.000000000 -0500
+@@ -64,6 +64,8 @@ obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
+ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
+ obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o
+
++obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_layer7.o
++
+ # targets
+ obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
+ obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o
+--- linux-2.6.18/net/ipv4/netfilter/ip_conntrack_core.c 2006-09-19 22:42:06.000000000 -0500
++++ linux-2.6.18-layer7/net/ipv4/netfilter/ip_conntrack_core.c 2006-09-24 10:17:45.000000000 -0500
+@@ -338,6 +338,13 @@ destroy_conntrack(struct nf_conntrack *n
+ * too. */
+ ip_ct_remove_expectations(ct);
+
++ #if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ if(ct->layer7.app_proto)
++ kfree(ct->layer7.app_proto);
++ if(ct->layer7.app_data)
++ kfree(ct->layer7.app_data);
++ #endif
++
+ /* We overload first tuple to link into unconfirmed list. */
+ if (!is_confirmed(ct)) {
+ BUG_ON(list_empty(&ct->tuplehash[IP_CT_DIR_ORIGINAL].list));
+--- linux-2.6.18/net/ipv4/netfilter/ip_conntrack_standalone.c 2006-09-19 22:42:06.000000000 -0500
++++ linux-2.6.18-layer7/net/ipv4/netfilter/ip_conntrack_standalone.c 2006-09-24 10:17:45.000000000 -0500
+@@ -193,6 +193,12 @@ static int ct_seq_show(struct seq_file *
+ return -ENOSPC;
+ #endif
+
++#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ if(conntrack->layer7.app_proto)
++ if (seq_printf(s, "l7proto=%s ",conntrack->layer7.app_proto))
++ return 1;
++#endif
++
+ if (seq_printf(s, "use=%u\n", atomic_read(&conntrack->ct_general.use)))
+ return -ENOSPC;
+
+--- linux-2.6.18/net/ipv4/netfilter/ipt_layer7.c 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/net/ipv4/netfilter/ipt_layer7.c 2006-09-24 10:59:55.000000000 -0500
+@@ -0,0 +1,582 @@
++/*
++ Kernel module to match application layer (OSI layer 7)
++ data in connections.
++
++ http://l7-filter.sf.net
++
++ By Matthew Strait and Ethan Sommer, 2003-2005.
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version
++ 2 of the License, or (at your option) any later version.
++ http://www.gnu.org/licenses/gpl.txt
++
++ Based on ipt_string.c (C) 2000 Emmanuel Roger <winfield@freegates.be>
++ and cls_layer7.c (C) 2003 Matthew Strait, Ethan Sommer, Justin Levandoski
++*/
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_conntrack.h>
++#include <linux/proc_fs.h>
++#include <linux/ctype.h>
++#include <net/ip.h>
++#include <net/tcp.h>
++#include <linux/spinlock.h>
++
++#include "regexp/regexp.c"
++
++#include <linux/netfilter_ipv4/ipt_layer7.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++
++MODULE_AUTHOR("Matthew Strait <quadong@users.sf.net>, Ethan Sommer <sommere@users.sf.net>");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("iptables application layer match module");
++MODULE_VERSION("2.0");
++
++static int maxdatalen = 2048; // this is the default
++module_param(maxdatalen, int, 0444);
++MODULE_PARM_DESC(maxdatalen, "maximum bytes of data looked at by l7-filter");
++
++#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++ #define DPRINTK(format,args...) printk(format,##args)
++#else
++ #define DPRINTK(format,args...)
++#endif
++
++#define TOTAL_PACKETS master_conntrack->counters[IP_CT_DIR_ORIGINAL].packets + \
++ master_conntrack->counters[IP_CT_DIR_REPLY].packets
++
++/* Number of packets whose data we look at.
++This can be modified through /proc/net/layer7_numpackets */
++static int num_packets = 10;
++
++static struct pattern_cache {
++ char * regex_string;
++ regexp * pattern;
++ struct pattern_cache * next;
++} * first_pattern_cache = NULL;
++
++/* I'm new to locking. Here are my assumptions:
++
++- No one will write to /proc/net/layer7_numpackets over and over very fast;
++ if they did, nothing awful would happen.
++
++- This code will never be processing the same packet twice at the same time,
++ because iptables rules are traversed in order.
++
++- It doesn't matter if two packets from different connections are in here at
++ the same time, because they don't share any data.
++
++- It _does_ matter if two packets from the same connection (or one from a
++ master and one from its child) are here at the same time. In this case,
++ we have to protect the conntracks and the list of compiled patterns.
++*/
++DEFINE_RWLOCK(ct_lock);
++DEFINE_SPINLOCK(list_lock);
++
++#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++/* Converts an unfriendly string into a friendly one by
++replacing unprintables with periods and all whitespace with " ". */
++static char * friendly_print(unsigned char * s)
++{
++ char * f = kmalloc(strlen(s) + 1, GFP_ATOMIC);
++ int i;
++
++ if(!f) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in friendly_print, bailing.\n");
++ return NULL;
++ }
++
++ for(i = 0; i < strlen(s); i++){
++ if(isprint(s[i]) && s[i] < 128) f[i] = s[i];
++ else if(isspace(s[i])) f[i] = ' ';
++ else f[i] = '.';
++ }
++ f[i] = '\0';
++ return f;
++}
++
++static char dec2hex(int i)
++{
++ switch (i) {
++ case 0 ... 9:
++ return (char)(i + '0');
++ break;
++ case 10 ... 15:
++ return (char)(i - 10 + 'a');
++ break;
++ default:
++ if (net_ratelimit())
++ printk("Problem in dec2hex\n");
++ return '\0';
++ }
++}
++
++static char * hex_print(unsigned char * s)
++{
++ char * g = kmalloc(strlen(s)*3 + 1, GFP_ATOMIC);
++ int i;
++
++ if(!g) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in hex_print, bailing.\n");
++ return NULL;
++ }
++
++ for(i = 0; i < strlen(s); i++) {
++ g[i*3 ] = dec2hex(s[i]/16);
++ g[i*3 + 1] = dec2hex(s[i]%16);
++ g[i*3 + 2] = ' ';
++ }
++ g[i*3] = '\0';
++
++ return g;
++}
++#endif // DEBUG
++
++/* Use instead of regcomp. As we expect to be seeing the same regexps over and
++over again, it make sense to cache the results. */
++static regexp * compile_and_cache(char * regex_string, char * protocol)
++{
++ struct pattern_cache * node = first_pattern_cache;
++ struct pattern_cache * last_pattern_cache = first_pattern_cache;
++ struct pattern_cache * tmp;
++ unsigned int len;
++
++ while (node != NULL) {
++ if (!strcmp(node->regex_string, regex_string))
++ return node->pattern;
++
++ last_pattern_cache = node;/* points at the last non-NULL node */
++ node = node->next;
++ }
++
++ /* If we reach the end of the list, then we have not yet cached
++ the pattern for this regex. Let's do that now.
++ Be paranoid about running out of memory to avoid list corruption. */
++ tmp = kmalloc(sizeof(struct pattern_cache), GFP_ATOMIC);
++
++ if(!tmp) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in compile_and_cache, bailing.\n");
++ return NULL;
++ }
++
++ tmp->regex_string = kmalloc(strlen(regex_string) + 1, GFP_ATOMIC);
++ tmp->pattern = kmalloc(sizeof(struct regexp), GFP_ATOMIC);
++ tmp->next = NULL;
++
++ if(!tmp->regex_string || !tmp->pattern) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in compile_and_cache, bailing.\n");
++ kfree(tmp->regex_string);
++ kfree(tmp->pattern);
++ kfree(tmp);
++ return NULL;
++ }
++
++ /* Ok. The new node is all ready now. */
++ node = tmp;
++
++ if(first_pattern_cache == NULL) /* list is empty */
++ first_pattern_cache = node; /* make node the beginning */
++ else
++ last_pattern_cache->next = node; /* attach node to the end */
++
++ /* copy the string and compile the regex */
++ len = strlen(regex_string);
++ DPRINTK("About to compile this: \"%s\"\n", regex_string);
++ node->pattern = regcomp(regex_string, &len);
++ if ( !node->pattern ) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: Error compiling regexp \"%s\" (%s)\n", regex_string, protocol);
++ /* pattern is now cached as NULL, so we won't try again. */
++ }
++
++ strcpy(node->regex_string, regex_string);
++ return node->pattern;
++}
++
++static int can_handle(const struct sk_buff *skb)
++{
++ if(!skb->nh.iph) /* not IP */
++ return 0;
++ if(skb->nh.iph->protocol != IPPROTO_TCP &&
++ skb->nh.iph->protocol != IPPROTO_UDP &&
++ skb->nh.iph->protocol != IPPROTO_ICMP)
++ return 0;
++ return 1;
++}
++
++/* Returns offset the into the skb->data that the application data starts */
++static int app_data_offset(const struct sk_buff *skb)
++{
++ /* In case we are ported somewhere (ebtables?) where skb->nh.iph
++ isn't set, this can be gotten from 4*(skb->data[0] & 0x0f) as well. */
++ int ip_hl = 4*skb->nh.iph->ihl;
++
++ if( skb->nh.iph->protocol == IPPROTO_TCP ) {
++ /* 12 == offset into TCP header for the header length field.
++ Can't get this with skb->h.th->doff because the tcphdr
++ struct doesn't get set when routing (this is confirmed to be
++ true in Netfilter as well as QoS.) */
++ int tcp_hl = 4*(skb->data[ip_hl + 12] >> 4);
++
++ return ip_hl + tcp_hl;
++ } else if( skb->nh.iph->protocol == IPPROTO_UDP ) {
++ return ip_hl + 8; /* UDP header is always 8 bytes */
++ } else if( skb->nh.iph->protocol == IPPROTO_ICMP ) {
++ return ip_hl + 8; /* ICMP header is 8 bytes */
++ } else {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: tried to handle unknown protocol!\n");
++ return ip_hl + 8; /* something reasonable */
++ }
++}
++
++/* handles whether there's a match when we aren't appending data anymore */
++static int match_no_append(struct ip_conntrack * conntrack, struct ip_conntrack * master_conntrack,
++ enum ip_conntrack_info ctinfo, enum ip_conntrack_info master_ctinfo,
++ struct ipt_layer7_info * info)
++{
++ /* If we're in here, throw the app data away */
++ write_lock(&ct_lock);
++ if(master_conntrack->layer7.app_data != NULL) {
++
++ #ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++ if(!master_conntrack->layer7.app_proto) {
++ char * f = friendly_print(master_conntrack->layer7.app_data);
++ char * g = hex_print(master_conntrack->layer7.app_data);
++ DPRINTK("\nl7-filter gave up after %d bytes (%d packets):\n%s\n",
++ strlen(f), TOTAL_PACKETS, f);
++ kfree(f);
++ DPRINTK("In hex: %s\n", g);
++ kfree(g);
++ }
++ #endif
++
++ kfree(master_conntrack->layer7.app_data);
++ master_conntrack->layer7.app_data = NULL; /* don't free again */
++ }
++ write_unlock(&ct_lock);
++
++ if(master_conntrack->layer7.app_proto){
++ /* Here child connections set their .app_proto (for /proc/net/ip_conntrack) */
++ write_lock(&ct_lock);
++ if(!conntrack->layer7.app_proto) {
++ conntrack->layer7.app_proto = kmalloc(strlen(master_conntrack->layer7.app_proto)+1, GFP_ATOMIC);
++ if(!conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match_no_append, bailing.\n");
++ write_unlock(&ct_lock);
++ return 1;
++ }
++ strcpy(conntrack->layer7.app_proto, master_conntrack->layer7.app_proto);
++ }
++ write_unlock(&ct_lock);
++
++ return (!strcmp(master_conntrack->layer7.app_proto, info->protocol));
++ }
++ else {
++ /* If not classified, set to "unknown" to distinguish from
++ connections that are still being tested. */
++ write_lock(&ct_lock);
++ master_conntrack->layer7.app_proto = kmalloc(strlen("unknown")+1, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match_no_append, bailing.\n");
++ write_unlock(&ct_lock);
++ return 1;
++ }
++ strcpy(master_conntrack->layer7.app_proto, "unknown");
++ write_unlock(&ct_lock);
++ return 0;
++ }
++}
++
++/* add the new app data to the conntrack. Return number of bytes added. */
++static int add_data(struct ip_conntrack * master_conntrack,
++ char * app_data, int appdatalen)
++{
++ int length = 0, i;
++ int oldlength = master_conntrack->layer7.app_data_len;
++
++ // This is a fix for a race condition by Deti Fliegl. However, I'm not
++ // clear on whether the race condition exists or whether this really
++ // fixes it. I might just be being dense... Anyway, if it's not really
++ // a fix, all it does is waste a very small amount of time.
++ if(!master_conntrack->layer7.app_data) return 0;
++
++ /* Strip nulls. Make everything lower case (our regex lib doesn't
++ do case insensitivity). Add it to the end of the current data. */
++ for(i = 0; i < maxdatalen-oldlength-1 &&
++ i < appdatalen; i++) {
++ if(app_data[i] != '\0') {
++ master_conntrack->layer7.app_data[length+oldlength] =
++ /* the kernel version of tolower mungs 'upper ascii' */
++ isascii(app_data[i])? tolower(app_data[i]) : app_data[i];
++ length++;
++ }
++ }
++
++ master_conntrack->layer7.app_data[length+oldlength] = '\0';
++ master_conntrack->layer7.app_data_len = length + oldlength;
++
++ return length;
++}
++
++/* Returns true on match and false otherwise. */
++static int match(/* const */ struct sk_buff *skb,
++ const struct net_device *in, const struct net_device *out,
++ const struct xt_match *match, const void *matchinfo,
++ int offset, unsigned int protoff, int *hotdrop)
++{
++ struct ipt_layer7_info * info = (struct ipt_layer7_info *)matchinfo;
++ enum ip_conntrack_info master_ctinfo, ctinfo;
++ struct ip_conntrack *master_conntrack, *conntrack;
++ unsigned char * app_data;
++ unsigned int pattern_result, appdatalen;
++ regexp * comppattern;
++
++ if(!can_handle(skb)){
++ DPRINTK("layer7: This is some protocol I can't handle.\n");
++ return info->invert;
++ }
++
++ /* Treat parent & all its children together as one connection, except
++ for the purpose of setting conntrack->layer7.app_proto in the actual
++ connection. This makes /proc/net/ip_conntrack more satisfying. */
++ if(!(conntrack = ip_conntrack_get((struct sk_buff *)skb, &ctinfo)) ||
++ !(master_conntrack = ip_conntrack_get((struct sk_buff *)skb, &master_ctinfo))) {
++ //DPRINTK("layer7: packet is not from a known connection, giving up.\n");
++ return info->invert;
++ }
++
++ /* Try to get a master conntrack (and its master etc) for FTP, etc. */
++ while (master_ct(master_conntrack) != NULL)
++ master_conntrack = master_ct(master_conntrack);
++
++ /* if we've classified it or seen too many packets */
++ if(TOTAL_PACKETS > num_packets ||
++ master_conntrack->layer7.app_proto) {
++
++ pattern_result = match_no_append(conntrack, master_conntrack, ctinfo, master_ctinfo, info);
++
++ /* skb->cb[0] == seen. Avoid doing things twice if there are two l7
++ rules. I'm not sure that using cb for this purpose is correct, although
++ it says "put your private variables there". But it doesn't look like it
++ is being used for anything else in the skbs that make it here. How can
++ I write to cb without making the compiler angry? */
++ skb->cb[0] = 1; /* marking it seen here is probably irrelevant, but consistant */
++
++ return (pattern_result ^ info->invert);
++ }
++
++ if(skb_is_nonlinear(skb)){
++ if(skb_linearize(skb) != 0){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: failed to linearize packet, bailing.\n");
++ return info->invert;
++ }
++ }
++
++ /* now that the skb is linearized, it's safe to set these. */
++ app_data = skb->data + app_data_offset(skb);
++ appdatalen = skb->tail - app_data;
++
++ spin_lock_bh(&list_lock);
++ /* the return value gets checked later, when we're ready to use it */
++ comppattern = compile_and_cache(info->pattern, info->protocol);
++ spin_unlock_bh(&list_lock);
++
++ /* On the first packet of a connection, allocate space for app data */
++ write_lock(&ct_lock);
++ if(TOTAL_PACKETS == 1 && !skb->cb[0] && !master_conntrack->layer7.app_data) {
++ master_conntrack->layer7.app_data = kmalloc(maxdatalen, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_data){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
++ write_unlock(&ct_lock);
++ return info->invert;
++ }
++
++ master_conntrack->layer7.app_data[0] = '\0';
++ }
++ write_unlock(&ct_lock);
++
++ /* Can be here, but unallocated, if numpackets is increased near
++ the beginning of a connection */
++ if(master_conntrack->layer7.app_data == NULL)
++ return (info->invert); /* unmatched */
++
++ if(!skb->cb[0]){
++ int newbytes;
++ write_lock(&ct_lock);
++ newbytes = add_data(master_conntrack, app_data, appdatalen);
++ write_unlock(&ct_lock);
++
++ if(newbytes == 0) { /* didn't add any data */
++ skb->cb[0] = 1;
++ /* Didn't match before, not going to match now */
++ return info->invert;
++ }
++ }
++
++ /* If looking for "unknown", then never match. "Unknown" means that
++ we've given up; we're still trying with these packets. */
++ read_lock(&ct_lock);
++ if(!strcmp(info->protocol, "unknown")) {
++ pattern_result = 0;
++ /* If the regexp failed to compile, don't bother running it */
++ } else if(comppattern && regexec(comppattern, master_conntrack->layer7.app_data)) {
++ DPRINTK("layer7: matched %s\n", info->protocol);
++ pattern_result = 1;
++ } else pattern_result = 0;
++ read_unlock(&ct_lock);
++
++ if(pattern_result) {
++ write_lock(&ct_lock);
++ master_conntrack->layer7.app_proto = kmalloc(strlen(info->protocol)+1, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
++ write_unlock(&ct_lock);
++ return (pattern_result ^ info->invert);
++ }
++ strcpy(master_conntrack->layer7.app_proto, info->protocol);
++ write_unlock(&ct_lock);
++ }
++
++ /* mark the packet seen */
++ skb->cb[0] = 1;
++
++ return (pattern_result ^ info->invert);
++}
++
++static int checkentry(const char *tablename, const void *ip,
++ const struct xt_match *match, void *matchinfo, unsigned int matchsize,
++ unsigned int hook_mask)
++{
++// struct ipt_layer7_info * info = (struct ipt_layer7_info *)matchinfo;
++
++ if (matchsize != IPT_ALIGN(sizeof(struct ipt_layer7_info)))
++ return 0;
++
++ return 1;
++}
++
++static struct ipt_match layer7_match = {
++ .name = "layer7",
++ .match = &match,
++ .checkentry = &checkentry,
++ .matchsize = sizeof(struct ipt_layer7_info),
++ .me = THIS_MODULE
++};
++
++/* taken from drivers/video/modedb.c */
++static int my_atoi(const char *s)
++{
++ int val = 0;
++
++ for (;; s++) {
++ switch (*s) {
++ case '0'...'9':
++ val = 10*val+(*s-'0');
++ break;
++ default:
++ return val;
++ }
++ }
++}
++
++/* write out num_packets to userland. */
++static int layer7_read_proc(char* page, char ** start, off_t off, int count,
++ int* eof, void * data)
++{
++ if(num_packets > 99 && net_ratelimit())
++ printk(KERN_ERR "layer7: NOT REACHED. num_packets too big\n");
++
++ page[0] = num_packets/10 + '0';
++ page[1] = num_packets%10 + '0';
++ page[2] = '\n';
++ page[3] = '\0';
++
++ *eof=1;
++
++ return 3;
++}
++
++/* Read in num_packets from userland */
++static int layer7_write_proc(struct file* file, const char* buffer,
++ unsigned long count, void *data)
++{
++ char * foo = kmalloc(count, GFP_ATOMIC);
++
++ if(!foo){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory, bailing. num_packets unchanged.\n");
++ return count;
++ }
++
++ if(copy_from_user(foo, buffer, count)) {
++ return -EFAULT;
++ }
++
++
++ num_packets = my_atoi(foo);
++ kfree (foo);
++
++ /* This has an arbitrary limit to make the math easier. I'm lazy.
++ But anyway, 99 is a LOT! If you want more, you're doing it wrong! */
++ if(num_packets > 99) {
++ printk(KERN_WARNING "layer7: num_packets can't be > 99.\n");
++ num_packets = 99;
++ } else if(num_packets < 1) {
++ printk(KERN_WARNING "layer7: num_packets can't be < 1.\n");
++ num_packets = 1;
++ }
++
++ return count;
++}
++
++/* register the proc file */
++static void layer7_init_proc(void)
++{
++ struct proc_dir_entry* entry;
++ entry = create_proc_entry("layer7_numpackets", 0644, proc_net);
++ entry->read_proc = layer7_read_proc;
++ entry->write_proc = layer7_write_proc;
++}
++
++static void layer7_cleanup_proc(void)
++{
++ remove_proc_entry("layer7_numpackets", proc_net);
++}
++
++static int __init ipt_layer7_init(void)
++{
++ layer7_init_proc();
++ if(maxdatalen < 1) {
++ printk(KERN_WARNING "layer7: maxdatalen can't be < 1, using 1\n");
++ maxdatalen = 1;
++ }
++ /* This is not a hard limit. It's just here to prevent people from
++ bringing their slow machines to a grinding halt. */
++ else if(maxdatalen > 65536) {
++ printk(KERN_WARNING "layer7: maxdatalen can't be > 65536, using 65536\n");
++ maxdatalen = 65536;
++ }
++ return ipt_register_match(&layer7_match);
++}
++
++static void __exit ipt_layer7_fini(void)
++{
++ layer7_cleanup_proc();
++ ipt_unregister_match(&layer7_match);
++}
++
++module_init(ipt_layer7_init);
++module_exit(ipt_layer7_fini);
+--- linux-2.6.18/net/ipv4/netfilter/regexp/regexp.c 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/net/ipv4/netfilter/regexp/regexp.c 2006-09-24 10:17:45.000000000 -0500
+@@ -0,0 +1,1197 @@
++/*
++ * regcomp and regexec -- regsub and regerror are elsewhere
++ * @(#)regexp.c 1.3 of 18 April 87
++ *
++ * Copyright (c) 1986 by University of Toronto.
++ * Written by Henry Spencer. Not derived from licensed software.
++ *
++ * Permission is granted to anyone to use this software for any
++ * purpose on any computer system, and to redistribute it freely,
++ * subject to the following restrictions:
++ *
++ * 1. The author is not responsible for the consequences of use of
++ * this software, no matter how awful, even if they arise
++ * from defects in it.
++ *
++ * 2. The origin of this software must not be misrepresented, either
++ * by explicit claim or by omission.
++ *
++ * 3. Altered versions must be plainly marked as such, and must not
++ * be misrepresented as being the original software.
++ *
++ * Beware that some of this code is subtly aware of the way operator
++ * precedence is structured in regular expressions. Serious changes in
++ * regular-expression syntax might require a total rethink.
++ *
++ * This code was modified by Ethan Sommer to work within the kernel
++ * (it now uses kmalloc etc..)
++ *
++ * Modified slightly by Matthew Strait to use more modern C.
++ */
++
++#include "regexp.h"
++#include "regmagic.h"
++
++/* added by ethan and matt. Lets it work in both kernel and user space.
++(So iptables can use it, for instance.) Yea, it goes both ways... */
++#if __KERNEL__
++ #define malloc(foo) kmalloc(foo,GFP_ATOMIC)
++#else
++ #define printk(format,args...) printf(format,##args)
++#endif
++
++void regerror(char * s)
++{
++ printk("<3>Regexp: %s\n", s);
++ /* NOTREACHED */
++}
++
++/*
++ * The "internal use only" fields in regexp.h are present to pass info from
++ * compile to execute that permits the execute phase to run lots faster on
++ * simple cases. They are:
++ *
++ * regstart char that must begin a match; '\0' if none obvious
++ * reganch is the match anchored (at beginning-of-line only)?
++ * regmust string (pointer into program) that match must include, or NULL
++ * regmlen length of regmust string
++ *
++ * Regstart and reganch permit very fast decisions on suitable starting points
++ * for a match, cutting down the work a lot. Regmust permits fast rejection
++ * of lines that cannot possibly match. The regmust tests are costly enough
++ * that regcomp() supplies a regmust only if the r.e. contains something
++ * potentially expensive (at present, the only such thing detected is * or +
++ * at the start of the r.e., which can involve a lot of backup). Regmlen is
++ * supplied because the test in regexec() needs it and regcomp() is computing
++ * it anyway.
++ */
++
++/*
++ * Structure for regexp "program". This is essentially a linear encoding
++ * of a nondeterministic finite-state machine (aka syntax charts or
++ * "railroad normal form" in parsing technology). Each node is an opcode
++ * plus a "next" pointer, possibly plus an operand. "Next" pointers of
++ * all nodes except BRANCH implement concatenation; a "next" pointer with
++ * a BRANCH on both ends of it is connecting two alternatives. (Here we
++ * have one of the subtle syntax dependencies: an individual BRANCH (as
++ * opposed to a collection of them) is never concatenated with anything
++ * because of operator precedence.) The operand of some types of node is
++ * a literal string; for others, it is a node leading into a sub-FSM. In
++ * particular, the operand of a BRANCH node is the first node of the branch.
++ * (NB this is *not* a tree structure: the tail of the branch connects
++ * to the thing following the set of BRANCHes.) The opcodes are:
++ */
++
++/* definition number opnd? meaning */
++#define END 0 /* no End of program. */
++#define BOL 1 /* no Match "" at beginning of line. */
++#define EOL 2 /* no Match "" at end of line. */
++#define ANY 3 /* no Match any one character. */
++#define ANYOF 4 /* str Match any character in this string. */
++#define ANYBUT 5 /* str Match any character not in this string. */
++#define BRANCH 6 /* node Match this alternative, or the next... */
++#define BACK 7 /* no Match "", "next" ptr points backward. */
++#define EXACTLY 8 /* str Match this string. */
++#define NOTHING 9 /* no Match empty string. */
++#define STAR 10 /* node Match this (simple) thing 0 or more times. */
++#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
++#define OPEN 20 /* no Mark this point in input as start of #n. */
++ /* OPEN+1 is number 1, etc. */
++#define CLOSE 30 /* no Analogous to OPEN. */
++
++/*
++ * Opcode notes:
++ *
++ * BRANCH The set of branches constituting a single choice are hooked
++ * together with their "next" pointers, since precedence prevents
++ * anything being concatenated to any individual branch. The
++ * "next" pointer of the last BRANCH in a choice points to the
++ * thing following the whole choice. This is also where the
++ * final "next" pointer of each individual branch points; each
++ * branch starts with the operand node of a BRANCH node.
++ *
++ * BACK Normal "next" pointers all implicitly point forward; BACK
++ * exists to make loop structures possible.
++ *
++ * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
++ * BRANCH structures using BACK. Simple cases (one character
++ * per match) are implemented with STAR and PLUS for speed
++ * and to minimize recursive plunges.
++ *
++ * OPEN,CLOSE ...are numbered at compile time.
++ */
++
++/*
++ * A node is one char of opcode followed by two chars of "next" pointer.
++ * "Next" pointers are stored as two 8-bit pieces, high order first. The
++ * value is a positive offset from the opcode of the node containing it.
++ * An operand, if any, simply follows the node. (Note that much of the
++ * code generation knows about this implicit relationship.)
++ *
++ * Using two bytes for the "next" pointer is vast overkill for most things,
++ * but allows patterns to get big without disasters.
++ */
++#define OP(p) (*(p))
++#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
++#define OPERAND(p) ((p) + 3)
++
++/*
++ * See regmagic.h for one further detail of program structure.
++ */
++
++
++/*
++ * Utility definitions.
++ */
++#ifndef CHARBITS
++#define UCHARAT(p) ((int)*(unsigned char *)(p))
++#else
++#define UCHARAT(p) ((int)*(p)&CHARBITS)
++#endif
++
++#define FAIL(m) { regerror(m); return(NULL); }
++#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
++#define META "^$.[()|?+*\\"
++
++/*
++ * Flags to be passed up and down.
++ */
++#define HASWIDTH 01 /* Known never to match null string. */
++#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
++#define SPSTART 04 /* Starts with * or +. */
++#define WORST 0 /* Worst case. */
++
++/*
++ * Global work variables for regcomp().
++ */
++struct match_globals {
++char *reginput; /* String-input pointer. */
++char *regbol; /* Beginning of input, for ^ check. */
++char **regstartp; /* Pointer to startp array. */
++char **regendp; /* Ditto for endp. */
++char *regparse; /* Input-scan pointer. */
++int regnpar; /* () count. */
++char regdummy;
++char *regcode; /* Code-emit pointer; &regdummy = don't. */
++long regsize; /* Code size. */
++};
++
++/*
++ * Forward declarations for regcomp()'s friends.
++ */
++#ifndef STATIC
++#define STATIC static
++#endif
++STATIC char *reg(struct match_globals *g, int paren,int *flagp);
++STATIC char *regbranch(struct match_globals *g, int *flagp);
++STATIC char *regpiece(struct match_globals *g, int *flagp);
++STATIC char *regatom(struct match_globals *g, int *flagp);
++STATIC char *regnode(struct match_globals *g, char op);
++STATIC char *regnext(struct match_globals *g, char *p);
++STATIC void regc(struct match_globals *g, char b);
++STATIC void reginsert(struct match_globals *g, char op, char *opnd);
++STATIC void regtail(struct match_globals *g, char *p, char *val);
++STATIC void regoptail(struct match_globals *g, char *p, char *val);
++
++
++__kernel_size_t my_strcspn(const char *s1,const char *s2)
++{
++ char *scan1;
++ char *scan2;
++ int count;
++
++ count = 0;
++ for (scan1 = (char *)s1; *scan1 != '\0'; scan1++) {
++ for (scan2 = (char *)s2; *scan2 != '\0';) /* ++ moved down. */
++ if (*scan1 == *scan2++)
++ return(count);
++ count++;
++ }
++ return(count);
++}
++
++/*
++ - regcomp - compile a regular expression into internal code
++ *
++ * We can't allocate space until we know how big the compiled form will be,
++ * but we can't compile it (and thus know how big it is) until we've got a
++ * place to put the code. So we cheat: we compile it twice, once with code
++ * generation turned off and size counting turned on, and once "for real".
++ * This also means that we don't allocate space until we are sure that the
++ * thing really will compile successfully, and we never have to move the
++ * code and thus invalidate pointers into it. (Note that it has to be in
++ * one piece because free() must be able to free it all.)
++ *
++ * Beware that the optimization-preparation code in here knows about some
++ * of the structure of the compiled regexp.
++ */
++regexp *
++regcomp(char *exp,int *patternsize)
++{
++ register regexp *r;
++ register char *scan;
++ register char *longest;
++ register int len;
++ int flags;
++ struct match_globals g;
++
++ /* commented out by ethan
++ extern char *malloc();
++ */
++
++ if (exp == NULL)
++ FAIL("NULL argument");
++
++ /* First pass: determine size, legality. */
++ g.regparse = exp;
++ g.regnpar = 1;
++ g.regsize = 0L;
++ g.regcode = &g.regdummy;
++ regc(&g, MAGIC);
++ if (reg(&g, 0, &flags) == NULL)
++ return(NULL);
++
++ /* Small enough for pointer-storage convention? */
++ if (g.regsize >= 32767L) /* Probably could be 65535L. */
++ FAIL("regexp too big");
++
++ /* Allocate space. */
++ *patternsize=sizeof(regexp) + (unsigned)g.regsize;
++ r = (regexp *)malloc(sizeof(regexp) + (unsigned)g.regsize);
++ if (r == NULL)
++ FAIL("out of space");
++
++ /* Second pass: emit code. */
++ g.regparse = exp;
++ g.regnpar = 1;
++ g.regcode = r->program;
++ regc(&g, MAGIC);
++ if (reg(&g, 0, &flags) == NULL)
++ return(NULL);
++
++ /* Dig out information for optimizations. */
++ r->regstart = '\0'; /* Worst-case defaults. */
++ r->reganch = 0;
++ r->regmust = NULL;
++ r->regmlen = 0;
++ scan = r->program+1; /* First BRANCH. */
++ if (OP(regnext(&g, scan)) == END) { /* Only one top-level choice. */
++ scan = OPERAND(scan);
++
++ /* Starting-point info. */
++ if (OP(scan) == EXACTLY)
++ r->regstart = *OPERAND(scan);
++ else if (OP(scan) == BOL)
++ r->reganch++;
++
++ /*
++ * If there's something expensive in the r.e., find the
++ * longest literal string that must appear and make it the
++ * regmust. Resolve ties in favor of later strings, since
++ * the regstart check works with the beginning of the r.e.
++ * and avoiding duplication strengthens checking. Not a
++ * strong reason, but sufficient in the absence of others.
++ */
++ if (flags&SPSTART) {
++ longest = NULL;
++ len = 0;
++ for (; scan != NULL; scan = regnext(&g, scan))
++ if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
++ longest = OPERAND(scan);
++ len = strlen(OPERAND(scan));
++ }
++ r->regmust = longest;
++ r->regmlen = len;
++ }
++ }
++
++ return(r);
++}
++
++/*
++ - reg - regular expression, i.e. main body or parenthesized thing
++ *
++ * Caller must absorb opening parenthesis.
++ *
++ * Combining parenthesis handling with the base level of regular expression
++ * is a trifle forced, but the need to tie the tails of the branches to what
++ * follows makes it hard to avoid.
++ */
++static char *
++reg(struct match_globals *g, int paren, int *flagp /* Parenthesized? */ )
++{
++ register char *ret;
++ register char *br;
++ register char *ender;
++ register int parno = 0; /* 0 makes gcc happy */
++ int flags;
++
++ *flagp = HASWIDTH; /* Tentatively. */
++
++ /* Make an OPEN node, if parenthesized. */
++ if (paren) {
++ if (g->regnpar >= NSUBEXP)
++ FAIL("too many ()");
++ parno = g->regnpar;
++ g->regnpar++;
++ ret = regnode(g, OPEN+parno);
++ } else
++ ret = NULL;
++
++ /* Pick up the branches, linking them together. */
++ br = regbranch(g, &flags);
++ if (br == NULL)
++ return(NULL);
++ if (ret != NULL)
++ regtail(g, ret, br); /* OPEN -> first. */
++ else
++ ret = br;
++ if (!(flags&HASWIDTH))
++ *flagp &= ~HASWIDTH;
++ *flagp |= flags&SPSTART;
++ while (*g->regparse == '|') {
++ g->regparse++;
++ br = regbranch(g, &flags);
++ if (br == NULL)
++ return(NULL);
++ regtail(g, ret, br); /* BRANCH -> BRANCH. */
++ if (!(flags&HASWIDTH))
++ *flagp &= ~HASWIDTH;
++ *flagp |= flags&SPSTART;
++ }
++
++ /* Make a closing node, and hook it on the end. */
++ ender = regnode(g, (paren) ? CLOSE+parno : END);
++ regtail(g, ret, ender);
++
++ /* Hook the tails of the branches to the closing node. */
++ for (br = ret; br != NULL; br = regnext(g, br))
++ regoptail(g, br, ender);
++
++ /* Check for proper termination. */
++ if (paren && *g->regparse++ != ')') {
++ FAIL("unmatched ()");
++ } else if (!paren && *g->regparse != '\0') {
++ if (*g->regparse == ')') {
++ FAIL("unmatched ()");
++ } else
++ FAIL("junk on end"); /* "Can't happen". */
++ /* NOTREACHED */
++ }
++
++ return(ret);
++}
++
++/*
++ - regbranch - one alternative of an | operator
++ *
++ * Implements the concatenation operator.
++ */
++static char *
++regbranch(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ register char *chain;
++ register char *latest;
++ int flags;
++
++ *flagp = WORST; /* Tentatively. */
++
++ ret = regnode(g, BRANCH);
++ chain = NULL;
++ while (*g->regparse != '\0' && *g->regparse != '|' && *g->regparse != ')') {
++ latest = regpiece(g, &flags);
++ if (latest == NULL)
++ return(NULL);
++ *flagp |= flags&HASWIDTH;
++ if (chain == NULL) /* First piece. */
++ *flagp |= flags&SPSTART;
++ else
++ regtail(g, chain, latest);
++ chain = latest;
++ }
++ if (chain == NULL) /* Loop ran zero times. */
++ (void) regnode(g, NOTHING);
++
++ return(ret);
++}
++
++/*
++ - regpiece - something followed by possible [*+?]
++ *
++ * Note that the branching code sequences used for ? and the general cases
++ * of * and + are somewhat optimized: they use the same NOTHING node as
++ * both the endmarker for their branch list and the body of the last branch.
++ * It might seem that this node could be dispensed with entirely, but the
++ * endmarker role is not redundant.
++ */
++static char *
++regpiece(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ register char op;
++ register char *next;
++ int flags;
++
++ ret = regatom(g, &flags);
++ if (ret == NULL)
++ return(NULL);
++
++ op = *g->regparse;
++ if (!ISMULT(op)) {
++ *flagp = flags;
++ return(ret);
++ }
++
++ if (!(flags&HASWIDTH) && op != '?')
++ FAIL("*+ operand could be empty");
++ *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
++
++ if (op == '*' && (flags&SIMPLE))
++ reginsert(g, STAR, ret);
++ else if (op == '*') {
++ /* Emit x* as (x&|), where & means "self". */
++ reginsert(g, BRANCH, ret); /* Either x */
++ regoptail(g, ret, regnode(g, BACK)); /* and loop */
++ regoptail(g, ret, ret); /* back */
++ regtail(g, ret, regnode(g, BRANCH)); /* or */
++ regtail(g, ret, regnode(g, NOTHING)); /* null. */
++ } else if (op == '+' && (flags&SIMPLE))
++ reginsert(g, PLUS, ret);
++ else if (op == '+') {
++ /* Emit x+ as x(&|), where & means "self". */
++ next = regnode(g, BRANCH); /* Either */
++ regtail(g, ret, next);
++ regtail(g, regnode(g, BACK), ret); /* loop back */
++ regtail(g, next, regnode(g, BRANCH)); /* or */
++ regtail(g, ret, regnode(g, NOTHING)); /* null. */
++ } else if (op == '?') {
++ /* Emit x? as (x|) */
++ reginsert(g, BRANCH, ret); /* Either x */
++ regtail(g, ret, regnode(g, BRANCH)); /* or */
++ next = regnode(g, NOTHING); /* null. */
++ regtail(g, ret, next);
++ regoptail(g, ret, next);
++ }
++ g->regparse++;
++ if (ISMULT(*g->regparse))
++ FAIL("nested *?+");
++
++ return(ret);
++}
++
++/*
++ - regatom - the lowest level
++ *
++ * Optimization: gobbles an entire sequence of ordinary characters so that
++ * it can turn them into a single node, which is smaller to store and
++ * faster to run. Backslashed characters are exceptions, each becoming a
++ * separate node; the code is simpler that way and it's not worth fixing.
++ */
++static char *
++regatom(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ int flags;
++
++ *flagp = WORST; /* Tentatively. */
++
++ switch (*g->regparse++) {
++ case '^':
++ ret = regnode(g, BOL);
++ break;
++ case '$':
++ ret = regnode(g, EOL);
++ break;
++ case '.':
++ ret = regnode(g, ANY);
++ *flagp |= HASWIDTH|SIMPLE;
++ break;
++ case '[': {
++ register int class;
++ register int classend;
++
++ if (*g->regparse == '^') { /* Complement of range. */
++ ret = regnode(g, ANYBUT);
++ g->regparse++;
++ } else
++ ret = regnode(g, ANYOF);
++ if (*g->regparse == ']' || *g->regparse == '-')
++ regc(g, *g->regparse++);
++ while (*g->regparse != '\0' && *g->regparse != ']') {
++ if (*g->regparse == '-') {
++ g->regparse++;
++ if (*g->regparse == ']' || *g->regparse == '\0')
++ regc(g, '-');
++ else {
++ class = UCHARAT(g->regparse-2)+1;
++ classend = UCHARAT(g->regparse);
++ if (class > classend+1)
++ FAIL("invalid [] range");
++ for (; class <= classend; class++)
++ regc(g, class);
++ g->regparse++;
++ }
++ } else
++ regc(g, *g->regparse++);
++ }
++ regc(g, '\0');
++ if (*g->regparse != ']')
++ FAIL("unmatched []");
++ g->regparse++;
++ *flagp |= HASWIDTH|SIMPLE;
++ }
++ break;
++ case '(':
++ ret = reg(g, 1, &flags);
++ if (ret == NULL)
++ return(NULL);
++ *flagp |= flags&(HASWIDTH|SPSTART);
++ break;
++ case '\0':
++ case '|':
++ case ')':
++ FAIL("internal urp"); /* Supposed to be caught earlier. */
++ break;
++ case '?':
++ case '+':
++ case '*':
++ FAIL("?+* follows nothing");
++ break;
++ case '\\':
++ if (*g->regparse == '\0')
++ FAIL("trailing \\");
++ ret = regnode(g, EXACTLY);
++ regc(g, *g->regparse++);
++ regc(g, '\0');
++ *flagp |= HASWIDTH|SIMPLE;
++ break;
++ default: {
++ register int len;
++ register char ender;
++
++ g->regparse--;
++ len = my_strcspn((const char *)g->regparse, (const char *)META);
++ if (len <= 0)
++ FAIL("internal disaster");
++ ender = *(g->regparse+len);
++ if (len > 1 && ISMULT(ender))
++ len--; /* Back off clear of ?+* operand. */
++ *flagp |= HASWIDTH;
++ if (len == 1)
++ *flagp |= SIMPLE;
++ ret = regnode(g, EXACTLY);
++ while (len > 0) {
++ regc(g, *g->regparse++);
++ len--;
++ }
++ regc(g, '\0');
++ }
++ break;
++ }
++
++ return(ret);
++}
++
++/*
++ - regnode - emit a node
++ */
++static char * /* Location. */
++regnode(struct match_globals *g, char op)
++{
++ register char *ret;
++ register char *ptr;
++
++ ret = g->regcode;
++ if (ret == &g->regdummy) {
++ g->regsize += 3;
++ return(ret);
++ }
++
++ ptr = ret;
++ *ptr++ = op;
++ *ptr++ = '\0'; /* Null "next" pointer. */
++ *ptr++ = '\0';
++ g->regcode = ptr;
++
++ return(ret);
++}
++
++/*
++ - regc - emit (if appropriate) a byte of code
++ */
++static void
++regc(struct match_globals *g, char b)
++{
++ if (g->regcode != &g->regdummy)
++ *g->regcode++ = b;
++ else
++ g->regsize++;
++}
++
++/*
++ - reginsert - insert an operator in front of already-emitted operand
++ *
++ * Means relocating the operand.
++ */
++static void
++reginsert(struct match_globals *g, char op, char* opnd)
++{
++ register char *src;
++ register char *dst;
++ register char *place;
++
++ if (g->regcode == &g->regdummy) {
++ g->regsize += 3;
++ return;
++ }
++
++ src = g->regcode;
++ g->regcode += 3;
++ dst = g->regcode;
++ while (src > opnd)
++ *--dst = *--src;
++
++ place = opnd; /* Op node, where operand used to be. */
++ *place++ = op;
++ *place++ = '\0';
++ *place++ = '\0';
++}
++
++/*
++ - regtail - set the next-pointer at the end of a node chain
++ */
++static void
++regtail(struct match_globals *g, char *p, char *val)
++{
++ register char *scan;
++ register char *temp;
++ register int offset;
++
++ if (p == &g->regdummy)
++ return;
++
++ /* Find last node. */
++ scan = p;
++ for (;;) {
++ temp = regnext(g, scan);
++ if (temp == NULL)
++ break;
++ scan = temp;
++ }
++
++ if (OP(scan) == BACK)
++ offset = scan - val;
++ else
++ offset = val - scan;
++ *(scan+1) = (offset>>8)&0377;
++ *(scan+2) = offset&0377;
++}
++
++/*
++ - regoptail - regtail on operand of first argument; nop if operandless
++ */
++static void
++regoptail(struct match_globals *g, char *p, char *val)
++{
++ /* "Operandless" and "op != BRANCH" are synonymous in practice. */
++ if (p == NULL || p == &g->regdummy || OP(p) != BRANCH)
++ return;
++ regtail(g, OPERAND(p), val);
++}
++
++/*
++ * regexec and friends
++ */
++
++
++/*
++ * Forwards.
++ */
++STATIC int regtry(struct match_globals *g, regexp *prog, char *string);
++STATIC int regmatch(struct match_globals *g, char *prog);
++STATIC int regrepeat(struct match_globals *g, char *p);
++
++#ifdef DEBUG
++int regnarrate = 0;
++void regdump();
++STATIC char *regprop(char *op);
++#endif
++
++/*
++ - regexec - match a regexp against a string
++ */
++int
++regexec(regexp *prog, char *string)
++{
++ register char *s;
++ struct match_globals g;
++
++ /* Be paranoid... */
++ if (prog == NULL || string == NULL) {
++ printk("<3>Regexp: NULL parameter\n");
++ return(0);
++ }
++
++ /* Check validity of program. */
++ if (UCHARAT(prog->program) != MAGIC) {
++ printk("<3>Regexp: corrupted program\n");
++ return(0);
++ }
++
++ /* If there is a "must appear" string, look for it. */
++ if (prog->regmust != NULL) {
++ s = string;
++ while ((s = strchr(s, prog->regmust[0])) != NULL) {
++ if (strncmp(s, prog->regmust, prog->regmlen) == 0)
++ break; /* Found it. */
++ s++;
++ }
++ if (s == NULL) /* Not present. */
++ return(0);
++ }
++
++ /* Mark beginning of line for ^ . */
++ g.regbol = string;
++
++ /* Simplest case: anchored match need be tried only once. */
++ if (prog->reganch)
++ return(regtry(&g, prog, string));
++
++ /* Messy cases: unanchored match. */
++ s = string;
++ if (prog->regstart != '\0')
++ /* We know what char it must start with. */
++ while ((s = strchr(s, prog->regstart)) != NULL) {
++ if (regtry(&g, prog, s))
++ return(1);
++ s++;
++ }
++ else
++ /* We don't -- general case. */
++ do {
++ if (regtry(&g, prog, s))
++ return(1);
++ } while (*s++ != '\0');
++
++ /* Failure. */
++ return(0);
++}
++
++/*
++ - regtry - try match at specific point
++ */
++static int /* 0 failure, 1 success */
++regtry(struct match_globals *g, regexp *prog, char *string)
++{
++ register int i;
++ register char **sp;
++ register char **ep;
++
++ g->reginput = string;
++ g->regstartp = prog->startp;
++ g->regendp = prog->endp;
++
++ sp = prog->startp;
++ ep = prog->endp;
++ for (i = NSUBEXP; i > 0; i--) {
++ *sp++ = NULL;
++ *ep++ = NULL;
++ }
++ if (regmatch(g, prog->program + 1)) {
++ prog->startp[0] = string;
++ prog->endp[0] = g->reginput;
++ return(1);
++ } else
++ return(0);
++}
++
++/*
++ - regmatch - main matching routine
++ *
++ * Conceptually the strategy is simple: check to see whether the current
++ * node matches, call self recursively to see whether the rest matches,
++ * and then act accordingly. In practice we make some effort to avoid
++ * recursion, in particular by going through "ordinary" nodes (that don't
++ * need to know whether the rest of the match failed) by a loop instead of
++ * by recursion.
++ */
++static int /* 0 failure, 1 success */
++regmatch(struct match_globals *g, char *prog)
++{
++ register char *scan = prog; /* Current node. */
++ char *next; /* Next node. */
++
++#ifdef DEBUG
++ if (scan != NULL && regnarrate)
++ fprintf(stderr, "%s(\n", regprop(scan));
++#endif
++ while (scan != NULL) {
++#ifdef DEBUG
++ if (regnarrate)
++ fprintf(stderr, "%s...\n", regprop(scan));
++#endif
++ next = regnext(g, scan);
++
++ switch (OP(scan)) {
++ case BOL:
++ if (g->reginput != g->regbol)
++ return(0);
++ break;
++ case EOL:
++ if (*g->reginput != '\0')
++ return(0);
++ break;
++ case ANY:
++ if (*g->reginput == '\0')
++ return(0);
++ g->reginput++;
++ break;
++ case EXACTLY: {
++ register int len;
++ register char *opnd;
++
++ opnd = OPERAND(scan);
++ /* Inline the first character, for speed. */
++ if (*opnd != *g->reginput)
++ return(0);
++ len = strlen(opnd);
++ if (len > 1 && strncmp(opnd, g->reginput, len) != 0)
++ return(0);
++ g->reginput += len;
++ }
++ break;
++ case ANYOF:
++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) == NULL)
++ return(0);
++ g->reginput++;
++ break;
++ case ANYBUT:
++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) != NULL)
++ return(0);
++ g->reginput++;
++ break;
++ case NOTHING:
++ case BACK:
++ break;
++ case OPEN+1:
++ case OPEN+2:
++ case OPEN+3:
++ case OPEN+4:
++ case OPEN+5:
++ case OPEN+6:
++ case OPEN+7:
++ case OPEN+8:
++ case OPEN+9: {
++ register int no;
++ register char *save;
++
++ no = OP(scan) - OPEN;
++ save = g->reginput;
++
++ if (regmatch(g, next)) {
++ /*
++ * Don't set startp if some later
++ * invocation of the same parentheses
++ * already has.
++ */
++ if (g->regstartp[no] == NULL)
++ g->regstartp[no] = save;
++ return(1);
++ } else
++ return(0);
++ }
++ break;
++ case CLOSE+1:
++ case CLOSE+2:
++ case CLOSE+3:
++ case CLOSE+4:
++ case CLOSE+5:
++ case CLOSE+6:
++ case CLOSE+7:
++ case CLOSE+8:
++ case CLOSE+9:
++ {
++ register int no;
++ register char *save;
++
++ no = OP(scan) - CLOSE;
++ save = g->reginput;
++
++ if (regmatch(g, next)) {
++ /*
++ * Don't set endp if some later
++ * invocation of the same parentheses
++ * already has.
++ */
++ if (g->regendp[no] == NULL)
++ g->regendp[no] = save;
++ return(1);
++ } else
++ return(0);
++ }
++ break;
++ case BRANCH: {
++ register char *save;
++
++ if (OP(next) != BRANCH) /* No choice. */
++ next = OPERAND(scan); /* Avoid recursion. */
++ else {
++ do {
++ save = g->reginput;
++ if (regmatch(g, OPERAND(scan)))
++ return(1);
++ g->reginput = save;
++ scan = regnext(g, scan);
++ } while (scan != NULL && OP(scan) == BRANCH);
++ return(0);
++ /* NOTREACHED */
++ }
++ }
++ break;
++ case STAR:
++ case PLUS: {
++ register char nextch;
++ register int no;
++ register char *save;
++ register int min;
++
++ /*
++ * Lookahead to avoid useless match attempts
++ * when we know what character comes next.
++ */
++ nextch = '\0';
++ if (OP(next) == EXACTLY)
++ nextch = *OPERAND(next);
++ min = (OP(scan) == STAR) ? 0 : 1;
++ save = g->reginput;
++ no = regrepeat(g, OPERAND(scan));
++ while (no >= min) {
++ /* If it could work, try it. */
++ if (nextch == '\0' || *g->reginput == nextch)
++ if (regmatch(g, next))
++ return(1);
++ /* Couldn't or didn't -- back up. */
++ no--;
++ g->reginput = save + no;
++ }
++ return(0);
++ }
++ break;
++ case END:
++ return(1); /* Success! */
++ break;
++ default:
++ printk("<3>Regexp: memory corruption\n");
++ return(0);
++ break;
++ }
++
++ scan = next;
++ }
++
++ /*
++ * We get here only if there's trouble -- normally "case END" is
++ * the terminating point.
++ */
++ printk("<3>Regexp: corrupted pointers\n");
++ return(0);
++}
++
++/*
++ - regrepeat - repeatedly match something simple, report how many
++ */
++static int
++regrepeat(struct match_globals *g, char *p)
++{
++ register int count = 0;
++ register char *scan;
++ register char *opnd;
++
++ scan = g->reginput;
++ opnd = OPERAND(p);
++ switch (OP(p)) {
++ case ANY:
++ count = strlen(scan);
++ scan += count;
++ break;
++ case EXACTLY:
++ while (*opnd == *scan) {
++ count++;
++ scan++;
++ }
++ break;
++ case ANYOF:
++ while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
++ count++;
++ scan++;
++ }
++ break;
++ case ANYBUT:
++ while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
++ count++;
++ scan++;
++ }
++ break;
++ default: /* Oh dear. Called inappropriately. */
++ printk("<3>Regexp: internal foulup\n");
++ count = 0; /* Best compromise. */
++ break;
++ }
++ g->reginput = scan;
++
++ return(count);
++}
++
++/*
++ - regnext - dig the "next" pointer out of a node
++ */
++static char*
++regnext(struct match_globals *g, char *p)
++{
++ register int offset;
++
++ if (p == &g->regdummy)
++ return(NULL);
++
++ offset = NEXT(p);
++ if (offset == 0)
++ return(NULL);
++
++ if (OP(p) == BACK)
++ return(p-offset);
++ else
++ return(p+offset);
++}
++
++#ifdef DEBUG
++
++STATIC char *regprop();
++
++/*
++ - regdump - dump a regexp onto stdout in vaguely comprehensible form
++ */
++void
++regdump(regexp *r)
++{
++ register char *s;
++ register char op = EXACTLY; /* Arbitrary non-END op. */
++ register char *next;
++ /* extern char *strchr(); */
++
++
++ s = r->program + 1;
++ while (op != END) { /* While that wasn't END last time... */
++ op = OP(s);
++ printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */
++ next = regnext(s);
++ if (next == NULL) /* Next ptr. */
++ printf("(0)");
++ else
++ printf("(%d)", (s-r->program)+(next-s));
++ s += 3;
++ if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
++ /* Literal string, where present. */
++ while (*s != '\0') {
++ putchar(*s);
++ s++;
++ }
++ s++;
++ }
++ putchar('\n');
++ }
++
++ /* Header fields of interest. */
++ if (r->regstart != '\0')
++ printf("start `%c' ", r->regstart);
++ if (r->reganch)
++ printf("anchored ");
++ if (r->regmust != NULL)
++ printf("must have \"%s\"", r->regmust);
++ printf("\n");
++}
++
++/*
++ - regprop - printable representation of opcode
++ */
++static char *
++regprop(char *op)
++{
++#define BUFLEN 50
++ register char *p;
++ static char buf[BUFLEN];
++
++ strcpy(buf, ":");
++
++ switch (OP(op)) {
++ case BOL:
++ p = "BOL";
++ break;
++ case EOL:
++ p = "EOL";
++ break;
++ case ANY:
++ p = "ANY";
++ break;
++ case ANYOF:
++ p = "ANYOF";
++ break;
++ case ANYBUT:
++ p = "ANYBUT";
++ break;
++ case BRANCH:
++ p = "BRANCH";
++ break;
++ case EXACTLY:
++ p = "EXACTLY";
++ break;
++ case NOTHING:
++ p = "NOTHING";
++ break;
++ case BACK:
++ p = "BACK";
++ break;
++ case END:
++ p = "END";
++ break;
++ case OPEN+1:
++ case OPEN+2:
++ case OPEN+3:
++ case OPEN+4:
++ case OPEN+5:
++ case OPEN+6:
++ case OPEN+7:
++ case OPEN+8:
++ case OPEN+9:
++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "OPEN%d", OP(op)-OPEN);
++ p = NULL;
++ break;
++ case CLOSE+1:
++ case CLOSE+2:
++ case CLOSE+3:
++ case CLOSE+4:
++ case CLOSE+5:
++ case CLOSE+6:
++ case CLOSE+7:
++ case CLOSE+8:
++ case CLOSE+9:
++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "CLOSE%d", OP(op)-CLOSE);
++ p = NULL;
++ break;
++ case STAR:
++ p = "STAR";
++ break;
++ case PLUS:
++ p = "PLUS";
++ break;
++ default:
++ printk("<3>Regexp: corrupted opcode\n");
++ break;
++ }
++ if (p != NULL)
++ strncat(buf, p, BUFLEN-strlen(buf));
++ return(buf);
++}
++#endif
++
++
+--- linux-2.6.18/net/ipv4/netfilter/regexp/regexp.h 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/net/ipv4/netfilter/regexp/regexp.h 2006-09-24 10:17:45.000000000 -0500
+@@ -0,0 +1,41 @@
++/*
++ * Definitions etc. for regexp(3) routines.
++ *
++ * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
++ * not the System V one.
++ */
++
++#ifndef REGEXP_H
++#define REGEXP_H
++
++
++/*
++http://www.opensource.apple.com/darwinsource/10.3/expect-1/expect/expect.h ,
++which contains a version of this library, says:
++
++ *
++ * NSUBEXP must be at least 10, and no greater than 117 or the parser
++ * will not work properly.
++ *
++
++However, it looks rather like this library is limited to 10. If you think
++otherwise, let us know.
++*/
++
++#define NSUBEXP 10
++typedef struct regexp {
++ char *startp[NSUBEXP];
++ char *endp[NSUBEXP];
++ char regstart; /* Internal use only. */
++ char reganch; /* Internal use only. */
++ char *regmust; /* Internal use only. */
++ int regmlen; /* Internal use only. */
++ char program[1]; /* Unwarranted chumminess with compiler. */
++} regexp;
++
++regexp * regcomp(char *exp, int *patternsize);
++int regexec(regexp *prog, char *string);
++void regsub(regexp *prog, char *source, char *dest);
++void regerror(char *s);
++
++#endif
+--- linux-2.6.18/net/ipv4/netfilter/regexp/regmagic.h 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/net/ipv4/netfilter/regexp/regmagic.h 2006-09-24 10:17:45.000000000 -0500
+@@ -0,0 +1,5 @@
++/*
++ * The first byte of the regexp internal "program" is actually this magic
++ * number; the start node begins in the second byte.
++ */
++#define MAGIC 0234
+--- linux-2.6.18/net/ipv4/netfilter/regexp/regsub.c 1969-12-31 18:00:00.000000000 -0600
++++ linux-2.6.18-layer7/net/ipv4/netfilter/regexp/regsub.c 2006-09-24 10:17:45.000000000 -0500
+@@ -0,0 +1,95 @@
++/*
++ * regsub
++ * @(#)regsub.c 1.3 of 2 April 86
++ *
++ * Copyright (c) 1986 by University of Toronto.
++ * Written by Henry Spencer. Not derived from licensed software.
++ *
++ * Permission is granted to anyone to use this software for any
++ * purpose on any computer system, and to redistribute it freely,
++ * subject to the following restrictions:
++ *
++ * 1. The author is not responsible for the consequences of use of
++ * this software, no matter how awful, even if they arise
++ * from defects in it.
++ *
++ * 2. The origin of this software must not be misrepresented, either
++ * by explicit claim or by omission.
++ *
++ * 3. Altered versions must be plainly marked as such, and must not
++ * be misrepresented as being the original software.
++ *
++ *
++ * This code was modified by Ethan Sommer to work within the kernel
++ * (it now uses kmalloc etc..)
++ *
++ */
++#include "regexp.h"
++#include "regmagic.h"
++#include <linux/string.h>
++
++
++#ifndef CHARBITS
++#define UCHARAT(p) ((int)*(unsigned char *)(p))
++#else
++#define UCHARAT(p) ((int)*(p)&CHARBITS)
++#endif
++
++#if 0
++//void regerror(char * s)
++//{
++// printk("regexp(3): %s", s);
++// /* NOTREACHED */
++//}
++#endif
++
++/*
++ - regsub - perform substitutions after a regexp match
++ */
++void
++regsub(regexp * prog, char * source, char * dest)
++{
++ register char *src;
++ register char *dst;
++ register char c;
++ register int no;
++ register int len;
++
++ /* Not necessary and gcc doesn't like it -MLS */
++ /*extern char *strncpy();*/
++
++ if (prog == NULL || source == NULL || dest == NULL) {
++ regerror("NULL parm to regsub");
++ return;
++ }
++ if (UCHARAT(prog->program) != MAGIC) {
++ regerror("damaged regexp fed to regsub");
++ return;
++ }
++
++ src = source;
++ dst = dest;
++ while ((c = *src++) != '\0') {
++ if (c == '&')
++ no = 0;
++ else if (c == '\\' && '0' <= *src && *src <= '9')
++ no = *src++ - '0';
++ else
++ no = -1;
++
++ if (no < 0) { /* Ordinary character. */
++ if (c == '\\' && (*src == '\\' || *src == '&'))
++ c = *src++;
++ *dst++ = c;
++ } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) {
++ len = prog->endp[no] - prog->startp[no];
++ (void) strncpy(dst, prog->startp[no], len);
++ dst += len;
++ if (len != 0 && *(dst-1) == '\0') { /* strncpy hit NUL. */
++ regerror("damaged match string");
++ return;
++ }
++ }
++ }
++ *dst++ = '\0';
++}
diff --git a/packages/linux/linux-magicbox-2.6.18.6/magicbox2-ide-cf_2.6.18.patch b/packages/linux/linux-magicbox-2.6.18.6/magicbox2-ide-cf_2.6.18.patch
new file mode 100644
index 0000000000..113d5c4f85
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/magicbox2-ide-cf_2.6.18.patch
@@ -0,0 +1,221 @@
+diff -Nru linux-2.6.18/drivers/ide/Kconfig linux-2.6.18-magicbox2-cf-ide/drivers/ide/Kconfig
+--- linux-2.6.18/drivers/ide/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox2-cf-ide/drivers/ide/Kconfig 2006-12-28 19:33:33.000000000 +0100
+@@ -926,6 +926,24 @@
+
+ If unsure, say N.
+
++config BLK_DEV_MAGICBOX_IDE
++ bool "MagicBox 2.0 CF IDE support"
++ depends on 4xx && IDE=y && BLK_DEV_IDE=y
++ help
++ This option provides support for IDE on MagicBox 2.0 boards.
++
++ If unsure, say N.
++
++config BLK_DEV_MAGICBOX_PROTOTYPE
++ bool "Compile driver for prototype boards"
++ depends on BLK_DEV_MAGICBOX_IDE
++ help
++ Compile driver for first revision of MagicBox 2.0 boards
++ (wiring changes).
++
++ If unsure, say N.
++
++
+ choice
+ prompt "Type of MPC8xx IDE interface"
+ depends on BLK_DEV_MPC8xx_IDE
+diff -Nru linux-2.6.18/drivers/ide/Makefile linux-2.6.18-magicbox2-cf-ide/drivers/ide/Makefile
+--- linux-2.6.18/drivers/ide/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox2-cf-ide/drivers/ide/Makefile 2006-12-28 19:27:00.000000000 +0100
+@@ -36,6 +36,7 @@
+ # built-in only drivers from ppc/
+ ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o
+ ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += ppc/pmac.o
++ide-core-$(CONFIG_BLK_DEV_MAGICBOX_IDE) += ppc/magicbox_ide.o
+
+ # built-in only drivers from h8300/
+ ide-core-$(CONFIG_H8300) += h8300/ide-h8300.o
+diff -Nru linux-2.6.18/drivers/ide/ide.c linux-2.6.18-magicbox2-cf-ide/drivers/ide/ide.c
+--- linux-2.6.18/drivers/ide/ide.c 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-magicbox2-cf-ide/drivers/ide/ide.c 2006-12-28 19:27:00.000000000 +0100
+@@ -1836,6 +1836,13 @@
+ #ifdef CONFIG_H8300
+ h8300_ide_init();
+ #endif
++#ifdef CONFIG_BLK_DEV_MAGICBOX_IDE
++ {
++ extern void ide_magicbox_init();
++ ide_magicbox_init();
++ }
++#endif
++
+ }
+
+ void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
+diff -Nru linux-2.6.18/drivers/ide/ppc/magicbox_ide.c linux-2.6.18-magicbox2-cf-ide/drivers/ide/ppc/magicbox_ide.c
+--- linux-2.6.18/drivers/ide/ppc/magicbox_ide.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-magicbox2-cf-ide/drivers/ide/ppc/magicbox_ide.c 2006-12-30 21:00:18.000000000 +0100
+@@ -0,0 +1,161 @@
++/* Driver for MagicBox 2.0 onboard CompactFlash adapter.
++ * Written by Wojtek Kaniewski <wojtekka@toxygen.net>
++ *
++ * GNU General Public License.
++ */
++
++#include <linux/types.h>
++#include <linux/mm.h>
++#include <linux/interrupt.h>
++#include <linux/blkdev.h>
++#include <linux/hdreg.h>
++#include <linux/ide.h>
++#include <linux/delay.h>
++
++
++#define UIC0_PR 0xc4
++#define UIC0_TR 0xc5
++#define IRQ 25
++
++static int ide_offsets[IDE_NR_PORTS] = {0, 2, 4, 6, 8, 10, 12, 14, -1, -1};
++
++static u8 magicbox_ide_inb (unsigned long port)
++{
++ return (u8) (readw((void __iomem *) port) >> 8) & 255;
++}
++
++static u16 magicbox_ide_inw (unsigned long port)
++{
++ return (u16) readw((void __iomem *) port);
++}
++
++static void magicbox_ide_insw (unsigned long port, void *addr, u32 count)
++{
++ u16 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ *ptr = readw((void __iomem *) port);
++}
++
++static u32 magicbox_ide_inl (unsigned long port)
++{
++ return (u32) readl((void __iomem *) port);
++}
++
++static void magicbox_ide_insl (unsigned long port, void *addr, u32 count)
++{
++ u32 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ *ptr = readl((void __iomem *) port);
++}
++
++static void magicbox_ide_outb (u8 value, unsigned long port)
++{
++ writew(value << 8, (void __iomem *) port);
++}
++
++static void magicbox_ide_outbsync (ide_drive_t *drive, u8 value, unsigned long port)
++{
++ writew(value << 8, (void __iomem *) port);
++}
++
++static void magicbox_ide_outw (u16 value, unsigned long port)
++{
++ writew(value, (void __iomem *) port);
++}
++
++static void magicbox_ide_outsw (unsigned long port, void *addr, u32 count)
++{
++ u16 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ writew(*ptr, (void __iomem *) port);
++}
++
++static void magicbox_ide_outl (u32 value, unsigned long port)
++{
++ writel(value, (void __iomem *) port);
++}
++
++static void magicbox_ide_outsl (unsigned long port, void *addr, u32 count)
++{
++ u32 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ writel(*ptr, (void __iomem *) port);
++}
++
++
++static void __init ide_magicbox_register(unsigned long addr,
++ unsigned long caddr, int irq)
++{
++ hw_regs_t hw;
++ ide_hwif_t *hwif;
++
++ memset(&hw, 0, sizeof(hw));
++ ide_setup_ports(&hw, addr, ide_offsets, caddr + 12, 0, NULL,irq);
++
++ if (ide_register_hw(&hw, &hwif) != -1)
++ {
++ printk(KERN_NOTICE "magicbox-ide: Registered IDE-CF driver\n");
++ hwif->mmio = 2;
++ hwif->drives[0].unmask = 1;
++ hwif->OUTB = magicbox_ide_outb;
++ hwif->OUTBSYNC = magicbox_ide_outbsync;
++ hwif->OUTW = magicbox_ide_outw;
++ hwif->OUTL = magicbox_ide_outl;
++ hwif->OUTSW = magicbox_ide_outsw;
++ hwif->OUTSL = magicbox_ide_outsl;
++ hwif->INB = magicbox_ide_inb;
++ hwif->INW = magicbox_ide_inw;
++ hwif->INL = magicbox_ide_inl;
++ hwif->INSW = magicbox_ide_insw;
++ hwif->INSL = magicbox_ide_insl;
++ }
++}
++
++void __init ide_magicbox_init(void)
++{
++ volatile u16 *addr;
++ volatile u16 *caddr;
++
++ /* Turn on PerWE instead of PCIsomething */
++ mtdcr(DCRN_CPC0_PCI_BASE, mfdcr(DCRN_CPC0_PCI_BASE) | (0x80000000L >> 27));
++
++#ifdef CONFIG_BLK_DEV_MAGICBOX_PROTOTYPE
++ /* PerCS2 (CF's CS0): base 0xff100000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 2);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff11a000);
++ mtdcr(DCRN_EBC_BASE, 0x12);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++
++ /* PerCS1 (CF's CS1): base 0xff200000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 1);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff21a000);
++ mtdcr(DCRN_EBC_BASE, 0x11);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++#else
++ /* PerCS1 (CF's CS0): base 0xff100000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 1);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff11a000);
++ mtdcr(DCRN_EBC_BASE, 0x11);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++
++ /* PerCS2 (CF's CS1): base 0xff200000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 2);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff21a000);
++ mtdcr(DCRN_EBC_BASE, 0x12);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++#endif
++
++ /* Remap physical address space */
++ addr = ioremap_nocache(0xff100000, 4096);
++ caddr = ioremap_nocache(0xff200000, 4096);
++
++ /* Set interrupt to low-to-high-edge-triggered */
++ mtdcr(UIC0_TR, mfdcr(UIC0_TR) & ~(0x80000000L >> IRQ));
++ mtdcr(UIC0_PR, mfdcr(UIC0_PR) | (0x80000000L >> IRQ));
++
++ ide_magicbox_register((unsigned long)addr, (unsigned long)caddr, IRQ);
++}
diff --git a/packages/linux/linux-magicbox-2.6.18.6/squashfs-lzma-support.patch b/packages/linux/linux-magicbox-2.6.18.6/squashfs-lzma-support.patch
new file mode 100644
index 0000000000..212386e7bc
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/squashfs-lzma-support.patch
@@ -0,0 +1,890 @@
+diff -Naur linux-2.6.18.orig/fs/squashfs/LzmaDecode.c linux-2.6.18/fs/squashfs/LzmaDecode.c
+--- linux-2.6.18.orig/fs/squashfs/LzmaDecode.c 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.18/fs/squashfs/LzmaDecode.c 2006-10-14 03:56:43.000000000 -0700
+@@ -0,0 +1,663 @@
++/*
++ LzmaDecode.c
++ LZMA Decoder
++
++ LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this code, expressly permits you to
++ statically or dynamically link your code (or bind by name) to the
++ interfaces of this file without subjecting your linked code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#include "LzmaDecode.h"
++
++#ifndef Byte
++#define Byte unsigned char
++#endif
++
++#define kNumTopBits 24
++#define kTopValue ((UInt32)1 << kNumTopBits)
++
++#define kNumBitModelTotalBits 11
++#define kBitModelTotal (1 << kNumBitModelTotalBits)
++#define kNumMoveBits 5
++
++typedef struct _CRangeDecoder
++{
++ Byte *Buffer;
++ Byte *BufferLim;
++ UInt32 Range;
++ UInt32 Code;
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback;
++ int Result;
++ #endif
++ int ExtraBytes;
++} CRangeDecoder;
++
++Byte RangeDecoderReadByte(CRangeDecoder *rd)
++{
++ if (rd->Buffer == rd->BufferLim)
++ {
++ #ifdef _LZMA_IN_CB
++ UInt32 size;
++ rd->Result = rd->InCallback->Read(rd->InCallback, &rd->Buffer, &size);
++ rd->BufferLim = rd->Buffer + size;
++ if (size == 0)
++ #endif
++ {
++ rd->ExtraBytes = 1;
++ return 0xFF;
++ }
++ }
++ return (*rd->Buffer++);
++}
++
++/* #define ReadByte (*rd->Buffer++) */
++#define ReadByte (RangeDecoderReadByte(rd))
++
++void RangeDecoderInit(CRangeDecoder *rd,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ Byte *stream, UInt32 bufferSize
++ #endif
++ )
++{
++ int i;
++ #ifdef _LZMA_IN_CB
++ rd->InCallback = inCallback;
++ rd->Buffer = rd->BufferLim = 0;
++ #else
++ rd->Buffer = stream;
++ rd->BufferLim = stream + bufferSize;
++ #endif
++ rd->ExtraBytes = 0;
++ rd->Code = 0;
++ rd->Range = (0xFFFFFFFF);
++ for(i = 0; i < 5; i++)
++ rd->Code = (rd->Code << 8) | ReadByte;
++}
++
++#define RC_INIT_VAR UInt32 range = rd->Range; UInt32 code = rd->Code;
++#define RC_FLUSH_VAR rd->Range = range; rd->Code = code;
++#define RC_NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | ReadByte; }
++
++UInt32 RangeDecoderDecodeDirectBits(CRangeDecoder *rd, int numTotalBits)
++{
++ RC_INIT_VAR
++ UInt32 result = 0;
++ int i;
++ for (i = numTotalBits; i > 0; i--)
++ {
++ /* UInt32 t; */
++ range >>= 1;
++
++ result <<= 1;
++ if (code >= range)
++ {
++ code -= range;
++ result |= 1;
++ }
++ /*
++ t = (code - range) >> 31;
++ t &= 1;
++ code -= range & (t - 1);
++ result = (result + result) | (1 - t);
++ */
++ RC_NORMALIZE
++ }
++ RC_FLUSH_VAR
++ return result;
++}
++
++int RangeDecoderBitDecode(CProb *prob, CRangeDecoder *rd)
++{
++ UInt32 bound = (rd->Range >> kNumBitModelTotalBits) * *prob;
++ if (rd->Code < bound)
++ {
++ rd->Range = bound;
++ *prob += (kBitModelTotal - *prob) >> kNumMoveBits;
++ if (rd->Range < kTopValue)
++ {
++ rd->Code = (rd->Code << 8) | ReadByte;
++ rd->Range <<= 8;
++ }
++ return 0;
++ }
++ else
++ {
++ rd->Range -= bound;
++ rd->Code -= bound;
++ *prob -= (*prob) >> kNumMoveBits;
++ if (rd->Range < kTopValue)
++ {
++ rd->Code = (rd->Code << 8) | ReadByte;
++ rd->Range <<= 8;
++ }
++ return 1;
++ }
++}
++
++#define RC_GET_BIT2(prob, mi, A0, A1) \
++ UInt32 bound = (range >> kNumBitModelTotalBits) * *prob; \
++ if (code < bound) \
++ { A0; range = bound; *prob += (kBitModelTotal - *prob) >> kNumMoveBits; mi <<= 1; } \
++ else \
++ { A1; range -= bound; code -= bound; *prob -= (*prob) >> kNumMoveBits; mi = (mi + mi) + 1; } \
++ RC_NORMALIZE
++
++#define RC_GET_BIT(prob, mi) RC_GET_BIT2(prob, mi, ; , ;)
++
++int RangeDecoderBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
++{
++ int mi = 1;
++ int i;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ for(i = numLevels; i > 0; i--)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + mi;
++ RC_GET_BIT(prob, mi)
++ #else
++ mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd);
++ #endif
++ }
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return mi - (1 << numLevels);
++}
++
++int RangeDecoderReverseBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
++{
++ int mi = 1;
++ int i;
++ int symbol = 0;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ for(i = 0; i < numLevels; i++)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + mi;
++ RC_GET_BIT2(prob, mi, ; , symbol |= (1 << i))
++ #else
++ int bit = RangeDecoderBitDecode(probs + mi, rd);
++ mi = mi + mi + bit;
++ symbol |= (bit << i);
++ #endif
++ }
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++Byte LzmaLiteralDecode(CProb *probs, CRangeDecoder *rd)
++{
++ int symbol = 1;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ do
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + symbol;
++ RC_GET_BIT(prob, symbol)
++ #else
++ symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
++ #endif
++ }
++ while (symbol < 0x100);
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++Byte LzmaLiteralDecodeMatch(CProb *probs, CRangeDecoder *rd, Byte matchByte)
++{
++ int symbol = 1;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ do
++ {
++ int bit;
++ int matchBit = (matchByte >> 7) & 1;
++ matchByte <<= 1;
++ #ifdef _LZMA_LOC_OPT
++ {
++ CProb *prob = probs + ((1 + matchBit) << 8) + symbol;
++ RC_GET_BIT2(prob, symbol, bit = 0, bit = 1)
++ }
++ #else
++ bit = RangeDecoderBitDecode(probs + ((1 + matchBit) << 8) + symbol, rd);
++ symbol = (symbol << 1) | bit;
++ #endif
++ if (matchBit != bit)
++ {
++ while (symbol < 0x100)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + symbol;
++ RC_GET_BIT(prob, symbol)
++ #else
++ symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
++ #endif
++ }
++ break;
++ }
++ }
++ while (symbol < 0x100);
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++#define kNumPosBitsMax 4
++#define kNumPosStatesMax (1 << kNumPosBitsMax)
++
++#define kLenNumLowBits 3
++#define kLenNumLowSymbols (1 << kLenNumLowBits)
++#define kLenNumMidBits 3
++#define kLenNumMidSymbols (1 << kLenNumMidBits)
++#define kLenNumHighBits 8
++#define kLenNumHighSymbols (1 << kLenNumHighBits)
++
++#define LenChoice 0
++#define LenChoice2 (LenChoice + 1)
++#define LenLow (LenChoice2 + 1)
++#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
++#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
++#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
++
++int LzmaLenDecode(CProb *p, CRangeDecoder *rd, int posState)
++{
++ if(RangeDecoderBitDecode(p + LenChoice, rd) == 0)
++ return RangeDecoderBitTreeDecode(p + LenLow +
++ (posState << kLenNumLowBits), kLenNumLowBits, rd);
++ if(RangeDecoderBitDecode(p + LenChoice2, rd) == 0)
++ return kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid +
++ (posState << kLenNumMidBits), kLenNumMidBits, rd);
++ return kLenNumLowSymbols + kLenNumMidSymbols +
++ RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd);
++}
++
++#define kNumStates 12
++
++#define kStartPosModelIndex 4
++#define kEndPosModelIndex 14
++#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
++
++#define kNumPosSlotBits 6
++#define kNumLenToPosStates 4
++
++#define kNumAlignBits 4
++#define kAlignTableSize (1 << kNumAlignBits)
++
++#define kMatchMinLen 2
++
++#define IsMatch 0
++#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
++#define IsRepG0 (IsRep + kNumStates)
++#define IsRepG1 (IsRepG0 + kNumStates)
++#define IsRepG2 (IsRepG1 + kNumStates)
++#define IsRep0Long (IsRepG2 + kNumStates)
++#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
++#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
++#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
++#define LenCoder (Align + kAlignTableSize)
++#define RepLenCoder (LenCoder + kNumLenProbs)
++#define Literal (RepLenCoder + kNumLenProbs)
++
++#if Literal != LZMA_BASE_SIZE
++StopCompilingDueBUG
++#endif
++
++#ifdef _LZMA_OUT_READ
++
++typedef struct _LzmaVarState
++{
++ CRangeDecoder RangeDecoder;
++ Byte *Dictionary;
++ UInt32 DictionarySize;
++ UInt32 DictionaryPos;
++ UInt32 GlobalPos;
++ UInt32 Reps[4];
++ int lc;
++ int lp;
++ int pb;
++ int State;
++ int PreviousIsMatch;
++ int RemainLen;
++} LzmaVarState;
++
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++ )
++{
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ UInt32 i;
++ if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ vs->Dictionary = dictionary;
++ vs->DictionarySize = dictionarySize;
++ vs->DictionaryPos = 0;
++ vs->GlobalPos = 0;
++ vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1;
++ vs->lc = lc;
++ vs->lp = lp;
++ vs->pb = pb;
++ vs->State = 0;
++ vs->PreviousIsMatch = 0;
++ vs->RemainLen = 0;
++ dictionary[dictionarySize - 1] = 0;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++ RangeDecoderInit(&vs->RangeDecoder,
++ #ifdef _LZMA_IN_CB
++ inCallback
++ #else
++ inStream, inSize
++ #endif
++ );
++ return LZMA_RESULT_OK;
++}
++
++int LzmaDecode(unsigned char *buffer,
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ CRangeDecoder rd = vs->RangeDecoder;
++ int state = vs->State;
++ int previousIsMatch = vs->PreviousIsMatch;
++ Byte previousByte;
++ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << (vs->pb)) - 1;
++ UInt32 literalPosMask = (1 << (vs->lp)) - 1;
++ int lc = vs->lc;
++ int len = vs->RemainLen;
++ UInt32 globalPos = vs->GlobalPos;
++
++ Byte *dictionary = vs->Dictionary;
++ UInt32 dictionarySize = vs->DictionarySize;
++ UInt32 dictionaryPos = vs->DictionaryPos;
++
++ if (len == -1)
++ {
++ *outSizeProcessed = 0;
++ return LZMA_RESULT_OK;
++ }
++
++ while(len > 0 && nowPos < outSize)
++ {
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ len--;
++ }
++ if (dictionaryPos == 0)
++ previousByte = dictionary[dictionarySize - 1];
++ else
++ previousByte = dictionary[dictionaryPos - 1];
++#else
++
++int LzmaDecode(
++ Byte *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ CProb *p = (CProb *)buffer;
++ CRangeDecoder rd;
++ UInt32 i;
++ int state = 0;
++ int previousIsMatch = 0;
++ Byte previousByte = 0;
++ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << pb) - 1;
++ UInt32 literalPosMask = (1 << lp) - 1;
++ int len = 0;
++ if (bufferSize < numProbs * sizeof(CProb))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++ RangeDecoderInit(&rd,
++ #ifdef _LZMA_IN_CB
++ inCallback
++ #else
++ inStream, inSize
++ #endif
++ );
++#endif
++
++ *outSizeProcessed = 0;
++ while(nowPos < outSize)
++ {
++ int posState = (int)(
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & posStateMask);
++ #ifdef _LZMA_IN_CB
++ if (rd.Result != LZMA_RESULT_OK)
++ return rd.Result;
++ #endif
++ if (rd.ExtraBytes != 0)
++ return LZMA_RESULT_DATA_ERROR;
++ if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0)
++ {
++ CProb *probs = p + Literal + (LZMA_LIT_SIZE *
++ (((
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & literalPosMask) << lc) + (previousByte >> (8 - lc))));
++
++ if (state < 4) state = 0;
++ else if (state < 10) state -= 3;
++ else state -= 6;
++ if (previousIsMatch)
++ {
++ Byte matchByte;
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ matchByte = dictionary[pos];
++ #else
++ matchByte = outStream[nowPos - rep0];
++ #endif
++ previousByte = LzmaLiteralDecodeMatch(probs, &rd, matchByte);
++ previousIsMatch = 0;
++ }
++ else
++ previousByte = LzmaLiteralDecode(probs, &rd);
++ outStream[nowPos++] = previousByte;
++ #ifdef _LZMA_OUT_READ
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #endif
++ }
++ else
++ {
++ previousIsMatch = 1;
++ if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1)
++ {
++ if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0)
++ {
++ if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0)
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos;
++ #endif
++ if (
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ == 0)
++ return LZMA_RESULT_DATA_ERROR;
++ state = state < 7 ? 9 : 11;
++ #ifdef _LZMA_OUT_READ
++ pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ outStream[nowPos++] = previousByte;
++ continue;
++ }
++ }
++ else
++ {
++ UInt32 distance;
++ if(RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0)
++ distance = rep1;
++ else
++ {
++ if(RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0)
++ distance = rep2;
++ else
++ {
++ distance = rep3;
++ rep3 = rep2;
++ }
++ rep2 = rep1;
++ }
++ rep1 = rep0;
++ rep0 = distance;
++ }
++ len = LzmaLenDecode(p + RepLenCoder, &rd, posState);
++ state = state < 7 ? 8 : 11;
++ }
++ else
++ {
++ int posSlot;
++ rep3 = rep2;
++ rep2 = rep1;
++ rep1 = rep0;
++ state = state < 7 ? 7 : 10;
++ len = LzmaLenDecode(p + LenCoder, &rd, posState);
++ posSlot = RangeDecoderBitTreeDecode(p + PosSlot +
++ ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
++ kNumPosSlotBits), kNumPosSlotBits, &rd);
++ if (posSlot >= kStartPosModelIndex)
++ {
++ int numDirectBits = ((posSlot >> 1) - 1);
++ rep0 = ((2 | ((UInt32)posSlot & 1)) << numDirectBits);
++ if (posSlot < kEndPosModelIndex)
++ {
++ rep0 += RangeDecoderReverseBitTreeDecode(
++ p + SpecPos + rep0 - posSlot - 1, numDirectBits, &rd);
++ }
++ else
++ {
++ rep0 += RangeDecoderDecodeDirectBits(&rd,
++ numDirectBits - kNumAlignBits) << kNumAlignBits;
++ rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd);
++ }
++ }
++ else
++ rep0 = posSlot;
++ rep0++;
++ }
++ if (rep0 == (UInt32)(0))
++ {
++ /* it's for stream version */
++ len = -1;
++ break;
++ }
++ if (rep0 > nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ {
++ return LZMA_RESULT_DATA_ERROR;
++ }
++ len += kMatchMinLen;
++ do
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ outStream[nowPos++] = previousByte;
++ len--;
++ }
++ while(len > 0 && nowPos < outSize);
++ }
++ }
++
++ #ifdef _LZMA_OUT_READ
++ vs->RangeDecoder = rd;
++ vs->DictionaryPos = dictionaryPos;
++ vs->GlobalPos = globalPos + nowPos;
++ vs->Reps[0] = rep0;
++ vs->Reps[1] = rep1;
++ vs->Reps[2] = rep2;
++ vs->Reps[3] = rep3;
++ vs->State = state;
++ vs->PreviousIsMatch = previousIsMatch;
++ vs->RemainLen = len;
++ #endif
++
++ *outSizeProcessed = nowPos;
++ return LZMA_RESULT_OK;
++}
+diff -Naur linux-2.6.18.orig/fs/squashfs/LzmaDecode.h linux-2.6.18/fs/squashfs/LzmaDecode.h
+--- linux-2.6.18.orig/fs/squashfs/LzmaDecode.h 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.18/fs/squashfs/LzmaDecode.h 2006-10-14 03:56:43.000000000 -0700
+@@ -0,0 +1,100 @@
++/*
++ LzmaDecode.h
++ LZMA Decoder interface
++
++ LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this code, expressly permits you to
++ statically or dynamically link your code (or bind by name) to the
++ interfaces of this file without subjecting your linked code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#ifndef __LZMADECODE_H
++#define __LZMADECODE_H
++
++/* #define _LZMA_IN_CB */
++/* Use callback for input data */
++
++/* #define _LZMA_OUT_READ */
++/* Use read function for output data */
++
++/* #define _LZMA_PROB32 */
++/* It can increase speed on some 32-bit CPUs,
++ but memory usage will be doubled in that case */
++
++/* #define _LZMA_LOC_OPT */
++/* Enable local speed optimizations inside code */
++
++#ifndef UInt32
++#ifdef _LZMA_UINT32_IS_ULONG
++#define UInt32 unsigned long
++#else
++#define UInt32 unsigned int
++#endif
++#endif
++
++#ifdef _LZMA_PROB32
++#define CProb UInt32
++#else
++#define CProb unsigned short
++#endif
++
++#define LZMA_RESULT_OK 0
++#define LZMA_RESULT_DATA_ERROR 1
++#define LZMA_RESULT_NOT_ENOUGH_MEM 2
++
++#ifdef _LZMA_IN_CB
++typedef struct _ILzmaInCallback
++{
++ int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize);
++} ILzmaInCallback;
++#endif
++
++#define LZMA_BASE_SIZE 1846
++#define LZMA_LIT_SIZE 768
++
++/*
++bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb)
++bufferSize += 100 in case of _LZMA_OUT_READ
++by default CProb is unsigned short,
++but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int)
++*/
++
++#ifdef _LZMA_OUT_READ
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++);
++#endif
++
++int LzmaDecode(
++ unsigned char *buffer,
++ #ifndef _LZMA_OUT_READ
++ UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed);
++
++#endif
+diff -Naur linux-2.6.18.orig/fs/squashfs/inode.c linux-2.6.18/fs/squashfs/inode.c
+--- linux-2.6.18.orig/fs/squashfs/inode.c 2006-10-14 03:56:28.000000000 -0700
++++ linux-2.6.18/fs/squashfs/inode.c 2006-10-14 03:56:43.000000000 -0700
+@@ -4,6 +4,9 @@
+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
+ * Phillip Lougher <phillip@lougher.org.uk>
+ *
++ * LZMA decompressor support added by Oleg I. Vdovikin
++ * Copyright (c) 2005 Oleg I.Vdovikin <oleg@cs.msu.su>
++ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+@@ -21,6 +24,7 @@
+ * inode.c
+ */
+
++#define SQUASHFS_LZMA
+ #include <linux/types.h>
+ #include <linux/squashfs_fs.h>
+ #include <linux/module.h>
+@@ -44,6 +48,19 @@
+
+ #include "squashfs.h"
+
++#ifdef SQUASHFS_LZMA
++#include "LzmaDecode.h"
++
++/* default LZMA settings, should be in sync with mksquashfs */
++#define LZMA_LC 3
++#define LZMA_LP 0
++#define LZMA_PB 2
++
++#define LZMA_WORKSPACE_SIZE ((LZMA_BASE_SIZE + \
++ (LZMA_LIT_SIZE << (LZMA_LC + LZMA_LP))) * sizeof(CProb))
++
++#endif
++
+ static void squashfs_put_super(struct super_block *);
+ static int squashfs_statfs(struct dentry *, struct kstatfs *);
+ static int squashfs_symlink_readpage(struct file *file, struct page *page);
+@@ -63,6 +80,10 @@
+ static int squashfs_get_sb(struct file_system_type *, int, const char *, void *,
+ struct vfsmount *);
+
++#ifdef SQUASHFS_LZMA
++static unsigned char lzma_workspace[LZMA_WORKSPACE_SIZE];
++#endif
++
+ static struct file_system_type squashfs_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "squashfs",
+@@ -246,6 +267,15 @@
+ if (compressed) {
+ int zlib_err;
+
++#ifdef SQUASHFS_LZMA
++ if ((zlib_err = LzmaDecode(lzma_workspace,
++ LZMA_WORKSPACE_SIZE, LZMA_LC, LZMA_LP, LZMA_PB,
++ c_buffer, c_byte, buffer, msblk->read_size, &bytes)) != LZMA_RESULT_OK)
++ {
++ ERROR("lzma returned unexpected result 0x%x\n", zlib_err);
++ bytes = 0;
++ }
++#else
+ msblk->stream.next_in = c_buffer;
+ msblk->stream.avail_in = c_byte;
+ msblk->stream.next_out = buffer;
+@@ -260,7 +290,7 @@
+ bytes = 0;
+ } else
+ bytes = msblk->stream.total_out;
+-
++#endif
+ up(&msblk->read_data_mutex);
+ }
+
+@@ -964,10 +994,12 @@
+ }
+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
+ msblk = s->s_fs_info;
++#ifndef SQUASHFS_LZMA
+ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
+ ERROR("Failed to allocate zlib workspace\n");
+ goto failure;
+ }
++#endif
+ sblk = &msblk->sblk;
+
+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
+@@ -1140,7 +1172,9 @@
+ kfree(msblk->read_data);
+ kfree(msblk->block_cache);
+ kfree(msblk->fragment_index_2);
++#ifndef SQUASHFS_LZMA
+ vfree(msblk->stream.workspace);
++#endif
+ kfree(s->s_fs_info);
+ s->s_fs_info = NULL;
+ return -EINVAL;
+@@ -2060,7 +2094,9 @@
+ kfree(sbi->fragment_index);
+ kfree(sbi->fragment_index_2);
+ kfree(sbi->meta_index);
++#ifndef SQUASHFS_LZMA
+ vfree(sbi->stream.workspace);
++#endif
+ kfree(s->s_fs_info);
+ s->s_fs_info = NULL;
+ }
+
+diff -Naur linux-2.6.18.orig/fs/squashfs/Makefile linux-2.6.18/fs/squashfs/Makefile
+--- linux-2.6.18.orig/fs/squashfs/Makefile 2006-10-14 03:56:28.000000000 -0700
++++ linux-2.6.18/fs/squashfs/Makefile 2006-10-14 03:56:43.000000000 -0700
+@@ -5,3 +5,4 @@
+ obj-$(CONFIG_SQUASHFS) += squashfs.o
+ squashfs-y += inode.o
+ squashfs-y += squashfs2_0.o
++squashfs-y += LzmaDecode.o
diff --git a/packages/linux/linux-magicbox-2.6.18.6/squashfs3.1-patch b/packages/linux/linux-magicbox-2.6.18.6/squashfs3.1-patch
new file mode 100644
index 0000000000..9f24221335
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.18.6/squashfs3.1-patch
@@ -0,0 +1,4227 @@
+diff --new-file -urp linux-2.6.18/fs/Kconfig linux-2.6.18-squashfs3.1/fs/Kconfig
+--- linux-2.6.18/fs/Kconfig 2006-08-11 00:03:11.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/Kconfig 2006-08-21 00:13:12.000000000 +0100
+@@ -1249,6 +1249,71 @@ config CRAMFS
+
+ If unsure, say N.
+
++config SQUASHFS
++ tristate "SquashFS 3.1 - Squashed file system support"
++ select ZLIB_INFLATE
++ help
++ Saying Y here includes support for SquashFS 3.1 (a Compressed Read-Only File
++ System). Squashfs is a highly compressed read-only filesystem for Linux.
++ It uses zlib compression to compress both files, inodes and directories.
++ Inodes in the system are very small and all blocks are packed to minimise
++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
++ SquashFS 3.1 supports 64 bit filesystems and files (larger than 4GB), full
++ uid/gid information, hard links and timestamps.
++
++ Squashfs is intended for general read-only filesystem use, for archival
++ use (i.e. in cases where a .tar.gz file may be used), and in embedded
++ systems where low overhead is needed. Further information and filesystem tools
++ are available from http://squashfs.sourceforge.net.
++
++ If you want to compile this as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called squashfs. Note that the root file system (the one
++ containing the directory /) cannot be compiled as a module.
++
++ If unsure, say N.
++
++config SQUASHFS_EMBEDDED
++
++ bool "Additional options for memory-constrained systems"
++ depends on SQUASHFS
++ default n
++ help
++ Saying Y here allows you to specify cache sizes and how Squashfs
++ allocates memory. This is only intended for memory constrained
++ systems.
++
++ If unsure, say N.
++
++config SQUASHFS_FRAGMENT_CACHE_SIZE
++ int "Number of fragments cached" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default "3"
++ help
++ By default SquashFS caches the last 3 fragments read from
++ the filesystem. Increasing this amount may mean SquashFS
++ has to re-read fragments less often from disk, at the expense
++ of extra system memory. Decreasing this amount will mean
++ SquashFS uses less memory at the expense of extra reads from disk.
++
++ Note there must be at least one cached fragment. Anything
++ much more than three will probably not make much difference.
++
++config SQUASHFS_VMALLOC
++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default n
++ help
++ By default SquashFS uses kmalloc to obtain fragment cache memory.
++ Kmalloc memory is the standard kernel allocator, but it can fail
++ on memory constrained systems. Because of the way Vmalloc works,
++ Vmalloc can succeed when kmalloc fails. Specifying this option
++ will make SquashFS always use Vmalloc to allocate the
++ fragment cache memory.
++
++ If unsure, say N.
++
+ config VXFS_FS
+ tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+ help
+diff --new-file -urp linux-2.6.18/fs/Makefile linux-2.6.18-squashfs3.1/fs/Makefile
+--- linux-2.6.18/fs/Makefile 2006-08-11 00:03:12.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/Makefile 2006-08-21 00:13:12.000000000 +0100
+@@ -57,6 +57,7 @@ obj-$(CONFIG_EXT3_FS) += ext3/ # Before
+ obj-$(CONFIG_JBD) += jbd/
+ obj-$(CONFIG_EXT2_FS) += ext2/
+ obj-$(CONFIG_CRAMFS) += cramfs/
++obj-$(CONFIG_SQUASHFS) += squashfs/
+ obj-$(CONFIG_RAMFS) += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
+diff --new-file -urp linux-2.6.18/fs/squashfs/inode.c linux-2.6.18-squashfs3.1/fs/squashfs/inode.c
+--- linux-2.6.18/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/squashfs/inode.c 2006-08-21 00:15:29.000000000 +0100
+@@ -0,0 +1,2156 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * inode.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/zlib.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++
++static void squashfs_put_super(struct super_block *);
++static int squashfs_statfs(struct dentry *, struct kstatfs *);
++static int squashfs_symlink_readpage(struct file *file, struct page *page);
++static int squashfs_readpage(struct file *file, struct page *page);
++static int squashfs_readpage4K(struct file *file, struct page *page);
++static int squashfs_readdir(struct file *, void *, filldir_t);
++static struct inode *squashfs_alloc_inode(struct super_block *sb);
++static void squashfs_destroy_inode(struct inode *inode);
++static int init_inodecache(void);
++static void destroy_inodecache(void);
++static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
++ struct nameidata *);
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++static int squashfs_get_sb(struct file_system_type *, int, const char *, void *,
++ struct vfsmount *);
++
++static struct file_system_type squashfs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "squashfs",
++ .get_sb = squashfs_get_sb,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static struct super_operations squashfs_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
++ .readpage = squashfs_symlink_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops = {
++ .readpage = squashfs_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
++ .readpage = squashfs_readpage4K
++};
++
++static struct file_operations squashfs_dir_ops = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir
++};
++
++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
++ .lookup = squashfs_lookup
++};
++
++
++static struct buffer_head *get_block_length(struct super_block *s,
++ int *cur_index, int *offset, int *c_byte)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned short temp;
++ struct buffer_head *bh;
++
++ if (!(bh = sb_bread(s, *cur_index)))
++ goto out;
++
++ if (msblk->devblksize - *offset == 1) {
++ if (msblk->swap)
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ else
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ if (msblk->swap)
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ bh->b_data);
++ else
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ bh->b_data);
++ *c_byte = temp;
++ *offset = 1;
++ } else {
++ if (msblk->swap) {
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ } else {
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ }
++ *c_byte = temp;
++ *offset += 2;
++ }
++
++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
++ if (*offset == msblk->devblksize) {
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ *offset = 0;
++ }
++ if (*((unsigned char *) (bh->b_data + *offset)) !=
++ SQUASHFS_MARKER_BYTE) {
++ ERROR("Metadata block marker corrupt @ %x\n",
++ *cur_index);
++ brelse(bh);
++ goto out;
++ }
++ (*offset)++;
++ }
++ return bh;
++
++out:
++ return NULL;
++}
++
++
++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
++ msblk->devblksize_log2) + 2];
++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
++ unsigned int cur_index = index >> msblk->devblksize_log2;
++ int bytes, avail_bytes, b = 0, k;
++ char *c_buffer;
++ unsigned int compressed;
++ unsigned int c_byte = length;
++
++ if (c_byte) {
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ if (!(bh[0] = sb_getblk(s, cur_index)))
++ goto block_release;
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b, bh);
++ } else {
++ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
++ &c_byte)))
++ goto read_failure;
++
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b - 1, bh + 1);
++ }
++
++ if (compressed)
++ down(&msblk->read_data_mutex);
++
++ for (bytes = 0, k = 0; k < b; k++) {
++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
++ msblk->devblksize - offset :
++ c_byte - bytes;
++ wait_on_buffer(bh[k]);
++ if (!buffer_uptodate(bh[k]))
++ goto block_release;
++ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++
++ /*
++ * uncompress block
++ */
++ if (compressed) {
++ int zlib_err;
++
++ msblk->stream.next_in = c_buffer;
++ msblk->stream.avail_in = c_byte;
++ msblk->stream.next_out = buffer;
++ msblk->stream.avail_out = msblk->read_size;
++
++ if (((zlib_err = zlib_inflateInit(&msblk->stream)) != Z_OK) ||
++ ((zlib_err = zlib_inflate(&msblk->stream, Z_FINISH))
++ != Z_STREAM_END) || ((zlib_err =
++ zlib_inflateEnd(&msblk->stream)) != Z_OK)) {
++ ERROR("zlib_fs returned unexpected result 0x%x\n",
++ zlib_err);
++ bytes = 0;
++ } else
++ bytes = msblk->stream.total_out;
++
++ up(&msblk->read_data_mutex);
++ }
++
++ if (next_index)
++ *next_index = index + c_byte + (length ? 0 :
++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
++ ? 3 : 2));
++ return bytes;
++
++block_release:
++ while (--b >= 0)
++ brelse(bh[b]);
++
++read_failure:
++ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
++ return 0;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int n, i, bytes, return_length = length;
++ long long next_index;
++
++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++ while ( 1 ) {
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (msblk->block_cache[i].block == block)
++ break;
++
++ down(&msblk->block_cache_mutex);
++
++ if (i == SQUASHFS_CACHED_BLKS) {
++ /* read inode header block */
++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
++ n ; n --, i = (i + 1) %
++ SQUASHFS_CACHED_BLKS)
++ if (msblk->block_cache[i].block !=
++ SQUASHFS_USED_BLK)
++ break;
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->waitq, &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->block_cache_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->waitq, &wait);
++ continue;
++ }
++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
++
++ if (msblk->block_cache[i].block ==
++ SQUASHFS_INVALID_BLK) {
++ if (!(msblk->block_cache[i].data =
++ kmalloc(SQUASHFS_METADATA_SIZE,
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate cache"
++ "block\n");
++ up(&msblk->block_cache_mutex);
++ goto out;
++ }
++ }
++
++ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
++ up(&msblk->block_cache_mutex);
++
++ if (!(msblk->block_cache[i].length =
++ squashfs_read_data(s,
++ msblk->block_cache[i].data,
++ block, 0, &next_index))) {
++ ERROR("Unable to read cache block [%llx:%x]\n",
++ block, offset);
++ goto out;
++ }
++
++ down(&msblk->block_cache_mutex);
++ wake_up(&msblk->waitq);
++ msblk->block_cache[i].block = block;
++ msblk->block_cache[i].next_index = next_index;
++ TRACE("Read cache block [%llx:%x]\n", block, offset);
++ }
++
++ if (msblk->block_cache[i].block != block) {
++ up(&msblk->block_cache_mutex);
++ continue;
++ }
++
++ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
++ if (buffer)
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, length);
++ if (msblk->block_cache[i].length - offset == length) {
++ *next_block = msblk->block_cache[i].next_index;
++ *next_offset = 0;
++ } else {
++ *next_block = block;
++ *next_offset = offset + length;
++ }
++ up(&msblk->block_cache_mutex);
++ goto finish;
++ } else {
++ if (buffer) {
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, bytes);
++ buffer += bytes;
++ }
++ block = msblk->block_cache[i].next_index;
++ up(&msblk->block_cache_mutex);
++ length -= bytes;
++ offset = 0;
++ }
++ }
++
++finish:
++ return return_length;
++out:
++ return 0;
++}
++
++
++static int get_fragment_location(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
++ struct squashfs_fragment_entry fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment)
++{
++ down(&msblk->fragment_mutex);
++ fragment->locked --;
++ wake_up(&msblk->fragment_wait_queue);
++ up(&msblk->fragment_mutex);
++}
++
++
++SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length)
++{
++ int i, n;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++
++ while ( 1 ) {
++ down(&msblk->fragment_mutex);
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
++ msblk->fragment[i].block != start_block; i++);
++
++ if (i == SQUASHFS_CACHED_FRAGMENTS) {
++ for (i = msblk->next_fragment, n =
++ SQUASHFS_CACHED_FRAGMENTS; n &&
++ msblk->fragment[i].locked; n--, i = (i + 1) %
++ SQUASHFS_CACHED_FRAGMENTS);
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->fragment_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ continue;
++ }
++ msblk->next_fragment = (msblk->next_fragment + 1) %
++ SQUASHFS_CACHED_FRAGMENTS;
++
++ if (msblk->fragment[i].data == NULL)
++ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
++ (SQUASHFS_FILE_MAX_SIZE))) {
++ ERROR("Failed to allocate fragment "
++ "cache block\n");
++ up(&msblk->fragment_mutex);
++ goto out;
++ }
++
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].locked = 1;
++ up(&msblk->fragment_mutex);
++
++ if (!(msblk->fragment[i].length = squashfs_read_data(s,
++ msblk->fragment[i].data,
++ start_block, length, NULL))) {
++ ERROR("Unable to read fragment cache block "
++ "[%llx]\n", start_block);
++ msblk->fragment[i].locked = 0;
++ goto out;
++ }
++
++ msblk->fragment[i].block = start_block;
++ TRACE("New fragment %d, start block %lld, locked %d\n",
++ i, msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ msblk->fragment[i].locked++;
++ up(&msblk->fragment_mutex);
++ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
++ msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ return &msblk->fragment[i];
++
++out:
++ return NULL;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header *inodeb)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = inodeb->inode_number;
++ i->i_mtime.tv_sec = inodeb->mtime;
++ i->i_atime.tv_sec = inodeb->mtime;
++ i->i_ctime.tv_sec = inodeb->mtime;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header id, sid;
++ struct squashfs_base_inode_header *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_reg_inode_header *inodep = &id.reg;
++ struct squashfs_reg_inode_header *sinodep = &sid.reg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = 1;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ i->i_blksize = PAGE_CACHE_SIZE;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_LREG_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_lreg_inode_header *inodep = &id.lreg;
++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ i->i_blksize = PAGE_CACHE_SIZE;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header *inodep = &id.dir;
++ struct squashfs_dir_inode_header *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header *inodep = &id.dev;
++ struct squashfs_dev_inode_header *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ struct squashfs_ipc_inode_header *inodep = &id.ipc;
++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int read_fragment_index_table(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ /* Allocate fragment index table */
++ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ long long fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
++ &msblk->fragment_index[i], 1);
++ msblk->fragment_index[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget;
++ msblk->read_blocklist = read_blocklist;
++ msblk->read_fragment_index_table = read_fragment_index_table;
++
++ if (sblk->s_major == 1) {
++ if (!squashfs_1_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 1.0 support enabled\n");
++ return 0;
++ }
++ } else if (sblk->s_major == 2) {
++ if (!squashfs_2_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 2.0 support enabled\n");
++ return 0;
++ }
++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
++ SQUASHFS_MINOR) {
++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
++ "filesystem\n", sblk->s_major, sblk->s_minor);
++ SERROR("Please update your kernel\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static int squashfs_fill_super(struct super_block *s, void *data, int silent)
++{
++ struct squashfs_sb_info *msblk;
++ struct squashfs_super_block *sblk;
++ int i;
++ char b[BDEVNAME_SIZE];
++ struct inode *root;
++
++ TRACE("Entered squashfs_read_superblock\n");
++
++ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate superblock\n");
++ goto failure;
++ }
++ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
++ msblk = s->s_fs_info;
++ if (!(msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
++ ERROR("Failed to allocate zlib workspace\n");
++ goto failure;
++ }
++ sblk = &msblk->sblk;
++
++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
++ msblk->devblksize_log2 = ffz(~msblk->devblksize);
++
++ init_MUTEX(&msblk->read_data_mutex);
++ init_MUTEX(&msblk->read_page_mutex);
++ init_MUTEX(&msblk->block_cache_mutex);
++ init_MUTEX(&msblk->fragment_mutex);
++ init_MUTEX(&msblk->meta_index_mutex);
++
++ init_waitqueue_head(&msblk->waitq);
++ init_waitqueue_head(&msblk->fragment_wait_queue);
++
++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
++ sizeof(struct squashfs_super_block) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ SERROR("unable to read superblock\n");
++ goto failed_mount;
++ }
++
++ /* Check it is a SQUASHFS superblock */
++ msblk->swap = 0;
++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
++ struct squashfs_super_block ssblk;
++
++ WARNING("Mounting a different endian SQUASHFS "
++ "filesystem on %s\n", bdevname(s->s_bdev, b));
++
++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
++ msblk->swap = 1;
++ } else {
++ SERROR("Can't find a SQUASHFS superblock on %s\n",
++ bdevname(s->s_bdev, b));
++ goto failed_mount;
++ }
++ }
++
++ /* Check the MAJOR & MINOR versions */
++ if(!supported_squashfs_filesystem(msblk, silent))
++ goto failed_mount;
++
++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
++ TRACE("Inodes are %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_INODES
++ (sblk->flags) ? "un" : "");
++ TRACE("Data is %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
++ ? "un" : "");
++ TRACE("Check data is %s present in the filesystem\n",
++ SQUASHFS_CHECK_DATA(sblk->flags) ?
++ "" : "not");
++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
++ TRACE("Block size %d\n", sblk->block_size);
++ TRACE("Number of inodes %d\n", sblk->inodes);
++ if (sblk->s_major > 1)
++ TRACE("Number of fragments %d\n", sblk->fragments);
++ TRACE("Number of uids %d\n", sblk->no_uids);
++ TRACE("Number of gids %d\n", sblk->no_guids);
++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
++ if (sblk->s_major > 1)
++ TRACE("sblk->fragment_table_start %llx\n",
++ sblk->fragment_table_start);
++ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
++
++ s->s_flags |= MS_RDONLY;
++ s->s_op = &squashfs_ops;
++
++ /* Init inode_table block pointer array */
++ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
++ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
++ ERROR("Failed to allocate block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
++
++ msblk->next_cache = 0;
++
++ /* Allocate read_data block */
++ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
++ SQUASHFS_METADATA_SIZE :
++ sblk->block_size;
++
++ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_data block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate read_page block */
++ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_page block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate uid and gid tables */
++ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ goto failed_mount;
++ }
++ msblk->guid = msblk->uid + sblk->no_uids;
++
++ if (msblk->swap) {
++ unsigned int suid[sblk->no_uids + sblk->no_guids];
++
++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
++ sblk->no_guids), (sizeof(unsigned int) * 8));
++ } else
++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++
++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
++ goto allocate_root;
++
++ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
++ ERROR("Failed to allocate fragment block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
++ msblk->fragment[i].locked = 0;
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].data = NULL;
++ }
++
++ msblk->next_fragment = 0;
++
++ /* Allocate fragment index table */
++ if (msblk->read_fragment_index_table(s) == 0)
++ goto failed_mount;
++
++allocate_root:
++ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
++ goto failed_mount;
++
++ if ((s->s_root = d_alloc_root(root)) == NULL) {
++ ERROR("Root inode create failed\n");
++ iput(root);
++ goto failed_mount;
++ }
++
++ TRACE("Leaving squashfs_read_super\n");
++ return 0;
++
++failed_mount:
++ kfree(msblk->fragment_index);
++ kfree(msblk->fragment);
++ kfree(msblk->uid);
++ kfree(msblk->read_page);
++ kfree(msblk->read_data);
++ kfree(msblk->block_cache);
++ kfree(msblk->fragment_index_2);
++ vfree(msblk->stream.workspace);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ return -EINVAL;
++
++failure:
++ return -ENOMEM;
++}
++
++
++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
++{
++ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ TRACE("Entered squashfs_statfs\n");
++
++ buf->f_type = SQUASHFS_MAGIC;
++ buf->f_bsize = sblk->block_size;
++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
++ buf->f_bfree = buf->f_bavail = 0;
++ buf->f_files = sblk->inodes;
++ buf->f_ffree = 0;
++ buf->f_namelen = SQUASHFS_NAME_LEN;
++
++ return 0;
++}
++
++
++static int squashfs_symlink_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
++ long long block = SQUASHFS_I(inode)->start_block;
++ int offset = SQUASHFS_I(inode)->offset;
++ void *pageaddr = kmap(page);
++
++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
++ "%llx, offset %x\n", page->index,
++ SQUASHFS_I(inode)->start_block,
++ SQUASHFS_I(inode)->offset);
++
++ for (length = 0; length < index; length += bytes) {
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
++ block, offset, PAGE_CACHE_SIZE, &block,
++ &offset))) {
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
++ offset);
++ goto skip_read;
++ }
++ }
++
++ if (length != index) {
++ ERROR("(squashfs_symlink_readpage) length != index\n");
++ bytes = 0;
++ goto skip_read;
++ }
++
++ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
++ i_size_read(inode) - length;
++
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
++ offset, bytes, &block, &offset)))
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
++{
++ struct meta_index *meta = NULL;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
++
++ if(msblk->meta_index == NULL)
++ goto not_allocated;
++
++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
++ if (msblk->meta_index[i].inode_number == inode->i_ino &&
++ msblk->meta_index[i].offset >= offset &&
++ msblk->meta_index[i].offset <= index &&
++ msblk->meta_index[i].locked == 0) {
++ TRACE("locate_meta_index: entry %d, offset %d\n", i,
++ msblk->meta_index[i].offset);
++ meta = &msblk->meta_index[i];
++ offset = meta->offset;
++ }
++
++ if (meta)
++ meta->locked = 1;
++
++not_allocated:
++ up(&msblk->meta_index_mutex);
++
++ return meta;
++}
++
++
++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct meta_index *meta = NULL;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
++
++ if(msblk->meta_index == NULL) {
++ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
++ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
++ ERROR("Failed to allocate meta_index\n");
++ goto failed;
++ }
++ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
++ msblk->meta_index[i].inode_number = 0;
++ msblk->meta_index[i].locked = 0;
++ }
++ msblk->next_meta_index = 0;
++ }
++
++ for(i = SQUASHFS_META_NUMBER; i &&
++ msblk->meta_index[msblk->next_meta_index].locked; i --)
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ if(i == 0) {
++ TRACE("empty_meta_index: failed!\n");
++ goto failed;
++ }
++
++ TRACE("empty_meta_index: returned meta entry %d, %p\n",
++ msblk->next_meta_index,
++ &msblk->meta_index[msblk->next_meta_index]);
++
++ meta = &msblk->meta_index[msblk->next_meta_index];
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ meta->inode_number = inode->i_ino;
++ meta->offset = offset;
++ meta->skip = skip;
++ meta->entries = 0;
++ meta->locked = 1;
++
++failed:
++ up(&msblk->meta_index_mutex);
++ return meta;
++}
++
++
++void release_meta_index(struct inode *inode, struct meta_index *meta)
++{
++ meta->locked = 0;
++}
++
++
++static int read_block_index(struct super_block *s, int blocks, char *block_list,
++ long long *start_block, int *offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned int *block_listp;
++ int block = 0;
++
++ if (msblk->swap) {
++ char sblock_list[blocks << 2];
++
++ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
++ ((unsigned int *)sblock_list), blocks);
++ } else
++ if (!squashfs_get_cached_block(s, block_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++
++ for (block_listp = (unsigned int *) block_list; blocks;
++ block_listp++, blocks --)
++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
++
++ return block;
++
++failure:
++ return -1;
++}
++
++
++#define SIZE 256
++
++static inline int calculate_skip(int blocks) {
++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
++ return skip >= 7 ? 7 : skip + 1;
++}
++
++
++static int get_meta_index(struct inode *inode, int index,
++ long long *index_block, int *index_offset,
++ long long *data_block, char *block_list)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
++ int offset = 0;
++ struct meta_index *meta;
++ struct meta_entry *meta_entry;
++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
++ int cur_offset = SQUASHFS_I(inode)->offset;
++ long long cur_data_block = SQUASHFS_I(inode)->start_block;
++ int i;
++
++ index /= SQUASHFS_META_INDEXES * skip;
++
++ while ( offset < index ) {
++ meta = locate_meta_index(inode, index, offset + 1);
++
++ if (meta == NULL) {
++ if ((meta = empty_meta_index(inode, offset + 1,
++ skip)) == NULL)
++ goto all_done;
++ } else {
++ offset = index < meta->offset + meta->entries ? index :
++ meta->offset + meta->entries - 1;
++ meta_entry = &meta->meta_entry[offset - meta->offset];
++ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
++ cur_offset = meta_entry->offset;
++ cur_data_block = meta_entry->data_block;
++ TRACE("get_meta_index: offset %d, meta->offset %d, "
++ "meta->entries %d\n", offset, meta->offset,
++ meta->entries);
++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
++ " data_block 0x%llx\n", cur_index_block,
++ cur_offset, cur_data_block);
++ }
++
++ for (i = meta->offset + meta->entries; i <= index &&
++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
++ int blocks = skip * SQUASHFS_META_INDEXES;
++
++ while (blocks) {
++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
++ blocks;
++ int res = read_block_index(inode->i_sb, block,
++ block_list, &cur_index_block,
++ &cur_offset);
++
++ if (res == -1)
++ goto failed;
++
++ cur_data_block += res;
++ blocks -= block;
++ }
++
++ meta_entry = &meta->meta_entry[i - meta->offset];
++ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
++ meta_entry->offset = cur_offset;
++ meta_entry->data_block = cur_data_block;
++ meta->entries ++;
++ offset ++;
++ }
++
++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
++ meta->offset, meta->entries);
++
++ release_meta_index(inode, meta);
++ }
++
++all_done:
++ *index_block = cur_index_block;
++ *index_offset = cur_offset;
++ *data_block = cur_data_block;
++
++ return offset * SQUASHFS_META_INDEXES * skip;
++
++failed:
++ release_meta_index(inode, meta);
++ return -1;
++}
++
++
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize)
++{
++ long long block_ptr;
++ int offset;
++ long long block;
++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
++ block_list);
++
++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
++ block);
++
++ if(res == -1)
++ goto failure;
++
++ index -= res;
++
++ while ( index ) {
++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
++ int res = read_block_index(inode->i_sb, blocks, block_list,
++ &block_ptr, &offset);
++ if (res == -1)
++ goto failure;
++ block += res;
++ index -= blocks;
++ }
++
++ if (read_block_index(inode->i_sb, 1, block_list,
++ &block_ptr, &offset) == -1)
++ goto failure;
++ *bsize = *((unsigned int *) block_list);
++
++ return block;
++
++failure:
++ return 0;
++}
++
++
++static int squashfs_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char *block_list;
++ long long block;
++ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
++ void *pageaddr;
++ struct squashfs_fragment_cache *fragment = NULL;
++ char *data_ptr = msblk->read_page;
++
++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
++ int start_index = page->index & ~mask;
++ int end_index = start_index | mask;
++
++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) {
++ ERROR("Failed to allocate block_list\n");
++ goto skip_read;
++ }
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT))
++ goto skip_read;
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ if ((block = (msblk->read_blocklist)(inode, index, 1,
++ block_list, NULL, &bsize)) == 0)
++ goto skip_read;
++
++ down(&msblk->read_page_mutex);
++
++ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
++ block, bsize, NULL))) {
++ ERROR("Unable to read page, block %llx, size %x\n", block,
++ bsize);
++ up(&msblk->read_page_mutex);
++ goto skip_read;
++ }
++ } else {
++ if ((fragment = get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)->u.s1.fragment_size))
++ == NULL) {
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ (int) SQUASHFS_I(inode)->
++ u.s1.fragment_size);
++ goto skip_read;
++ }
++ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
++ (i_size_read(inode) & (sblk->block_size
++ - 1));
++ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
++ data_ptr = fragment->data;
++ }
++
++ for (i = start_index; i <= end_index && byte_offset < bytes;
++ i++, byte_offset += PAGE_CACHE_SIZE) {
++ struct page *push_page;
++ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
++ PAGE_CACHE_SIZE : bytes - byte_offset;
++
++ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
++ bytes, i, byte_offset, available_bytes);
++
++ if (i == page->index) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++ } else if ((push_page =
++ grab_cache_page_nowait(page->mapping, i))) {
++ pageaddr = kmap_atomic(push_page, KM_USER0);
++
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(push_page);
++ SetPageUptodate(push_page);
++ unlock_page(push_page);
++ page_cache_release(push_page);
++ }
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log))
++ up(&msblk->read_page_mutex);
++ else
++ release_cached_fragment(msblk, fragment);
++
++ kfree(block_list);
++ return 0;
++
++skip_read:
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ kfree(block_list);
++ return 0;
++}
++
++
++static int squashfs_readpage4K(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char *block_list;
++ long long block;
++ unsigned int bsize, bytes = 0;
++ void *pageaddr;
++
++ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT)) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ block_list = NULL;
++ goto skip_read;
++ }
++
++ if (!(block_list = kmalloc(SIZE, GFP_KERNEL))) {
++ ERROR("Failed to allocate block_list\n");
++ pageaddr = kmap_atomic(page, KM_USER0);
++ block_list = NULL;
++ goto skip_read;
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || page->index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ block = (msblk->read_blocklist)(inode, page->index, 1,
++ block_list, NULL, &bsize);
++
++ down(&msblk->read_page_mutex);
++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
++ bsize, NULL);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (bytes)
++ memcpy(pageaddr, msblk->read_page, bytes);
++ else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ block, bsize);
++ up(&msblk->read_page_mutex);
++ } else {
++ struct squashfs_fragment_cache *fragment =
++ get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (fragment) {
++ bytes = i_size_read(inode) & (sblk->block_size - 1);
++ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
++ u.s1.fragment_offset, bytes);
++ release_cached_fragment(msblk, fragment);
++ } else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block, (int)
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ }
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ kfree(block_list);
++ return 0;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ f_pos =- 3;
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length + 3;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index *index;
++ char *str;
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) +
++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_index\n");
++ goto failure;
++ }
++
++ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1);
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ kfree(str);
++failure:
++ return length + 3;
++}
++
++
++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ struct squashfs_dir_entry *dire;
++
++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto finish;
++ }
++
++ while(file->f_pos < 3) {
++ char *name;
++ int size, i_ino;
++
++ if(file->f_pos == 0) {
++ name = ".";
++ size = 1;
++ i_ino = i->i_ino;
++ } else {
++ name = "..";
++ size = 2;
++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
++ }
++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
++ (unsigned int) dirent, name, size, (int)
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]);
++
++ if (filldir(dirent, name, size,
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]) < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos += size;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ }
++ }
++
++finish:
++ kfree(dire);
++ return 0;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ struct squashfs_dir_entry *dire;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto exit_loop;
++ }
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %d\n", name,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ kfree(dire);
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++static void squashfs_put_super(struct super_block *s)
++{
++ int i;
++
++ if (s->s_fs_info) {
++ struct squashfs_sb_info *sbi = s->s_fs_info;
++ if (sbi->block_cache)
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (sbi->block_cache[i].block !=
++ SQUASHFS_INVALID_BLK)
++ kfree(sbi->block_cache[i].data);
++ if (sbi->fragment)
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
++ SQUASHFS_FREE(sbi->fragment[i].data);
++ kfree(sbi->fragment);
++ kfree(sbi->block_cache);
++ kfree(sbi->read_data);
++ kfree(sbi->read_page);
++ kfree(sbi->uid);
++ kfree(sbi->fragment_index);
++ kfree(sbi->fragment_index_2);
++ kfree(sbi->meta_index);
++ vfree(sbi->stream.workspace);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ }
++}
++
++
++static int squashfs_get_sb(struct file_system_type *fs_type, int flags,
++ const char *dev_name, void *data,
++ struct vfsmount *mnt)
++{
++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super,
++ mnt);
++}
++
++
++static int __init init_squashfs_fs(void)
++{
++ int err = init_inodecache();
++ if (err)
++ goto out;
++
++ printk(KERN_INFO "squashfs: version 3.1 (2006/08/19) "
++ "Phillip Lougher\n");
++
++ if ((err = register_filesystem(&squashfs_fs_type)))
++ destroy_inodecache();
++
++out:
++ return err;
++}
++
++
++static void __exit exit_squashfs_fs(void)
++{
++ unregister_filesystem(&squashfs_fs_type);
++ destroy_inodecache();
++}
++
++
++static kmem_cache_t * squashfs_inode_cachep;
++
++
++static struct inode *squashfs_alloc_inode(struct super_block *sb)
++{
++ struct squashfs_inode_info *ei;
++ ei = kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
++ if (!ei)
++ return NULL;
++ return &ei->vfs_inode;
++}
++
++
++static void squashfs_destroy_inode(struct inode *inode)
++{
++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
++}
++
++
++static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
++{
++ struct squashfs_inode_info *ei = foo;
++
++ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
++ SLAB_CTOR_CONSTRUCTOR)
++ inode_init_once(&ei->vfs_inode);
++}
++
++
++static int __init init_inodecache(void)
++{
++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
++ sizeof(struct squashfs_inode_info),
++ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
++ init_once, NULL);
++ if (squashfs_inode_cachep == NULL)
++ return -ENOMEM;
++ return 0;
++}
++
++
++static void destroy_inodecache(void)
++{
++ if (kmem_cache_destroy(squashfs_inode_cachep))
++ printk(KERN_INFO "squashfs_inode_cache: not all structures "
++ "were freed\n");
++}
++
++
++module_init(init_squashfs_fs);
++module_exit(exit_squashfs_fs);
++MODULE_DESCRIPTION("squashfs 3.1, a compressed read-only filesystem");
++MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
++MODULE_LICENSE("GPL");
+diff --new-file -urp linux-2.6.18/fs/squashfs/Makefile linux-2.6.18-squashfs3.1/fs/squashfs/Makefile
+--- linux-2.6.18/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/squashfs/Makefile 2006-08-21 00:13:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
++
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+diff --new-file -urp linux-2.6.18/fs/squashfs/squashfs2_0.c linux-2.6.18-squashfs3.1/fs/squashfs/squashfs2_0.c
+--- linux-2.6.18/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/squashfs/squashfs2_0.c 2006-08-21 00:14:55.000000000 +0100
+@@ -0,0 +1,779 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs2_0.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/zlib.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
++ struct nameidata *);
++
++static struct file_operations squashfs_dir_ops_2 = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir_2
++};
++
++static struct inode_operations squashfs_dir_inode_ops_2 = {
++ .lookup = squashfs_lookup_2
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static int read_fragment_index_table_2(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index_2,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ unsigned int fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
++ &msblk->fragment_index_2[i], 1);
++ msblk->fragment_index_2[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
++ struct squashfs_fragment_entry_2 fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry_2 sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = ino;
++ i->i_mtime.tv_sec = sblk->mkfs_time;
++ i->i_atime.tv_sec = sblk->mkfs_time;
++ i->i_ctime.tv_sec = sblk->mkfs_time;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_nlink = 1;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
++ - sblk->inode_table_start, offset);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header_2 id, sid;
++ struct squashfs_base_inode_header_2 *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
++ long long frag_blk;
++ unsigned int frag_size;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location_2(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ i->i_blksize = PAGE_CACHE_SIZE;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %x, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header_2 *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header_2 *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%x:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 *index;
++ char *str;
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) +
++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_index\n");
++ goto failure;
++ }
++
++ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1);
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index_2),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ kfree(str);
++failure:
++ return length;
++}
++
++
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ struct squashfs_dir_entry_2 *dire;
++
++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto finish;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos, SQUASHFS_MK_VFS_INODE(
++ dirh.start_block, dire->offset),
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ }
++ }
++
++finish:
++ kfree(dire);
++ return 0;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ kfree(dire);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ struct squashfs_dir_entry_2 *dire;
++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
++
++ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto exit_loop;
++ }
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (sorted && name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %lld\n", name,
++ dirh.start_block, dire->offset, ino);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ kfree(dire);
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget_2;
++ msblk->read_fragment_index_table = read_fragment_index_table_2;
++
++ sblk->bytes_used = sblk->bytes_used_2;
++ sblk->uid_start = sblk->uid_start_2;
++ sblk->guid_start = sblk->guid_start_2;
++ sblk->inode_table_start = sblk->inode_table_start_2;
++ sblk->directory_table_start = sblk->directory_table_start_2;
++ sblk->fragment_table_start = sblk->fragment_table_start_2;
++
++ return 1;
++}
+diff --new-file -urp linux-2.6.18/fs/squashfs/squashfs.h linux-2.6.18-squashfs3.1/fs/squashfs/squashfs.h
+--- linux-2.6.18/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/fs/squashfs/squashfs.h 2006-08-21 00:13:12.000000000 +0100
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...) {}
++#endif
++
++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...) do { \
++ if (!silent) \
++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++ } while(0)
++
++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index);
++extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment);
++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length);
++extern struct address_space_operations squashfs_symlink_aops;
++extern struct address_space_operations squashfs_aops;
++extern struct address_space_operations squashfs_aops_4K;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
+diff --new-file -urp linux-2.6.18/include/linux/squashfs_fs.h linux-2.6.18-squashfs3.1/include/linux/squashfs_fs.h
+--- linux-2.6.18/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/include/linux/squashfs_fs.h 2006-08-21 00:13:19.000000000 +0100
+@@ -0,0 +1,911 @@
++#ifndef SQUASHFS_FS
++#define SQUASHFS_FS
++
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs.h
++ */
++
++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#endif
++
++#ifdef CONFIG_SQUASHFS_VMALLOC
++#define SQUASHFS_ALLOC(a) vmalloc(a)
++#define SQUASHFS_FREE(a) vfree(a)
++#else
++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
++#define SQUASHFS_FREE(a) kfree(a)
++#endif
++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#define SQUASHFS_MAJOR 3
++#define SQUASHFS_MINOR 0
++#define SQUASHFS_MAGIC 0x73717368
++#define SQUASHFS_MAGIC_SWAP 0x68737173
++#define SQUASHFS_START 0
++
++/* size of metadata (inode and directory) blocks */
++#define SQUASHFS_METADATA_SIZE 8192
++#define SQUASHFS_METADATA_LOG 13
++
++/* default size of data blocks */
++#define SQUASHFS_FILE_SIZE 65536
++#define SQUASHFS_FILE_LOG 16
++
++#define SQUASHFS_FILE_MAX_SIZE 65536
++
++/* Max number of uids and gids */
++#define SQUASHFS_UIDS 256
++#define SQUASHFS_GUIDS 255
++
++/* Max length of filename (not 255) */
++#define SQUASHFS_NAME_LEN 256
++
++#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
++#define SQUASHFS_INVALID_BLK ((long long) -1)
++#define SQUASHFS_USED_BLK ((long long) -2)
++
++/* Filesystem flags */
++#define SQUASHFS_NOI 0
++#define SQUASHFS_NOD 1
++#define SQUASHFS_CHECK 2
++#define SQUASHFS_NOF 3
++#define SQUASHFS_NO_FRAG 4
++#define SQUASHFS_ALWAYS_FRAG 5
++#define SQUASHFS_DUPLICATE 6
++
++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
++
++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOI)
++
++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOD)
++
++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOF)
++
++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NO_FRAG)
++
++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_ALWAYS_FRAG)
++
++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_DUPLICATE)
++
++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_CHECK)
++
++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
++ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
++ (duplicate_checking << 6))
++
++/* Max number of types and file types */
++#define SQUASHFS_DIR_TYPE 1
++#define SQUASHFS_FILE_TYPE 2
++#define SQUASHFS_SYMLINK_TYPE 3
++#define SQUASHFS_BLKDEV_TYPE 4
++#define SQUASHFS_CHRDEV_TYPE 5
++#define SQUASHFS_FIFO_TYPE 6
++#define SQUASHFS_SOCKET_TYPE 7
++#define SQUASHFS_LDIR_TYPE 8
++#define SQUASHFS_LREG_TYPE 9
++
++/* 1.0 filesystem type definitions */
++#define SQUASHFS_TYPES 5
++#define SQUASHFS_IPC_TYPE 0
++
++/* Flag whether block is compressed or uncompressed, bit is set if block is
++ * uncompressed */
++#define SQUASHFS_COMPRESSED_BIT (1 << 15)
++
++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
++
++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
++
++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
++
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
++
++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
++
++/*
++ * Inode number ops. Inodes consist of a compressed block number, and an
++ * uncompressed offset within that block
++ */
++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
++
++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
++
++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
++ << 16) + (B)))
++
++/* Compute 32 bit VFS inode number from squashfs inode number */
++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
++ ((b) >> 2) + 1))
++/* XXX */
++
++/* Translate between VFS mode and squashfs mode */
++#define SQUASHFS_MODE(a) ((a) & 0xfff)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
++
++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
++ sizeof(long long))
++
++/* cached data constants for filesystem */
++#define SQUASHFS_CACHED_BLKS 8
++
++#define SQUASHFS_MAX_FILE_SIZE_LOG 64
++
++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
++
++#define SQUASHFS_MARKER_BYTE 0xff
++
++/* meta index cache */
++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
++#define SQUASHFS_META_ENTRIES 31
++#define SQUASHFS_META_NUMBER 8
++#define SQUASHFS_SLOTS 4
++
++struct meta_entry {
++ long long data_block;
++ unsigned int index_block;
++ unsigned short offset;
++ unsigned short pad;
++};
++
++struct meta_index {
++ unsigned int inode_number;
++ unsigned int offset;
++ unsigned short entries;
++ unsigned short skip;
++ unsigned short locked;
++ unsigned short pad;
++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
++};
++
++
++/*
++ * definitions for structures on disk
++ */
++
++typedef long long squashfs_block_t;
++typedef long long squashfs_inode_t;
++
++struct squashfs_super_block {
++ unsigned int s_magic;
++ unsigned int inodes;
++ unsigned int bytes_used_2;
++ unsigned int uid_start_2;
++ unsigned int guid_start_2;
++ unsigned int inode_table_start_2;
++ unsigned int directory_table_start_2;
++ unsigned int s_major:16;
++ unsigned int s_minor:16;
++ unsigned int block_size_1:16;
++ unsigned int block_log:16;
++ unsigned int flags:8;
++ unsigned int no_uids:8;
++ unsigned int no_guids:8;
++ unsigned int mkfs_time /* time of filesystem creation */;
++ squashfs_inode_t root_inode;
++ unsigned int block_size;
++ unsigned int fragments;
++ unsigned int fragment_table_start_2;
++ long long bytes_used;
++ long long uid_start;
++ long long guid_start;
++ long long inode_table_start;
++ long long directory_table_start;
++ long long fragment_table_start;
++ long long unused;
++} __attribute__ ((packed));
++
++struct squashfs_dir_index {
++ unsigned int index;
++ unsigned int start_block;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++#define SQUASHFS_BASE_INODE_HEADER \
++ unsigned int inode_type:4; \
++ unsigned int mode:12; \
++ unsigned int uid:8; \
++ unsigned int guid:8; \
++ unsigned int mtime; \
++ unsigned int inode_number;
++
++struct squashfs_base_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_lreg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ long long file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int parent_inode;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int i_count:16;
++ unsigned int parent_inode;
++ struct squashfs_dir_index index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header {
++ struct squashfs_base_inode_header base;
++ struct squashfs_dev_inode_header dev;
++ struct squashfs_symlink_inode_header symlink;
++ struct squashfs_reg_inode_header reg;
++ struct squashfs_lreg_inode_header lreg;
++ struct squashfs_dir_inode_header dir;
++ struct squashfs_ldir_inode_header ldir;
++ struct squashfs_ipc_inode_header ipc;
++};
++
++struct squashfs_dir_entry {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ int inode_number:16;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_header {
++ unsigned int count:8;
++ unsigned int start_block;
++ unsigned int inode_number;
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry {
++ long long start_block;
++ unsigned int size;
++ unsigned int unused;
++} __attribute__ ((packed));
++
++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
++extern int squashfs_uncompress_init(void);
++extern int squashfs_uncompress_exit(void);
++
++/*
++ * macros to convert each packed bitfield structure from little endian to big
++ * endian and vice versa. These are needed when creating or using a filesystem
++ * on a machine with different byte ordering to the target architecture.
++ *
++ */
++
++#define SQUASHFS_SWAP_START \
++ int bits;\
++ int b_pos;\
++ unsigned long long val;\
++ unsigned char *s;\
++ unsigned char *d;
++
++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
++ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
++}
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ipc_inode_header))\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dev_inode_header)); \
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_symlink_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_reg_inode_header));\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
++}
++
++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_lreg_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ldir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
++ SQUASHFS_SWAP((s)->index, d, 0, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
++ SQUASHFS_SWAP((s)->size, d, 64, 8);\
++}
++
++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
++ SQUASHFS_SWAP((s)->size, d, 64, 32);\
++}
++
++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 2);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 16)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
++}
++
++#define SQUASHFS_SWAP_INTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 4);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 32)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
++}
++
++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 64)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
++}
++
++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * bits / 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ bits)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++
++struct squashfs_base_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int type:4;
++ unsigned int offset:4;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
++ SQUASHFS_SWAP((s)->guid, d, 20, 4);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_ipc_inode_header_1));\
++ SQUASHFS_SWAP((s)->type, d, 24, 4);\
++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dev_inode_header_1));\
++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_1));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_reg_inode_header_1));\
++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dir_inode_header_1));\
++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
++}
++
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++
++struct squashfs_dir_index_2 {
++ unsigned int index:27;
++ unsigned int start_block:29;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_base_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++ unsigned int i_count:16;
++ struct squashfs_dir_index_2 index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header_2 {
++ struct squashfs_base_inode_header_2 base;
++ struct squashfs_dev_inode_header_2 dev;
++ struct squashfs_symlink_inode_header_2 symlink;
++ struct squashfs_reg_inode_header_2 reg;
++ struct squashfs_dir_inode_header_2 dir;
++ struct squashfs_ldir_inode_header_2 ldir;
++ struct squashfs_ipc_inode_header_2 ipc;
++};
++
++struct squashfs_dir_header_2 {
++ unsigned int count:8;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_dir_entry_2 {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry_2 {
++ unsigned int start_block;
++ unsigned int size;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dev_inode_header_2)); \
++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_2));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_reg_inode_header_2));\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_ldir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
++ SQUASHFS_SWAP((s)->index, d, 0, 27);\
++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
++ SQUASHFS_SWAP((s)->size, d, 56, 8);\
++}
++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
++ SQUASHFS_SWAP((s)->size, d, 32, 32);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
++
++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
++ sizeof(int))
++
++#endif
++
++#ifdef __KERNEL__
++
++/*
++ * macros used to swap each structure entry, taking into account
++ * bitfields and different bitfield placing conventions on differing
++ * architectures
++ */
++
++#include <asm/byteorder.h>
++
++#ifdef __BIG_ENDIAN
++ /* convert from little endian to big endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, b_pos)
++#else
++ /* convert from big endian to little endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, 64 - tbits - b_pos)
++#endif
++
++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
++ b_pos = pos % 8;\
++ val = 0;\
++ s = (unsigned char *)p + (pos / 8);\
++ d = ((unsigned char *) &val) + 7;\
++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
++ *d-- = *s++;\
++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
++}
++
++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
++
++#endif
++#endif
+diff --new-file -urp linux-2.6.18/include/linux/squashfs_fs_i.h linux-2.6.18-squashfs3.1/include/linux/squashfs_fs_i.h
+--- linux-2.6.18/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/include/linux/squashfs_fs_i.h 2006-08-21 00:13:19.000000000 +0100
+@@ -0,0 +1,45 @@
++#ifndef SQUASHFS_FS_I
++#define SQUASHFS_FS_I
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_i.h
++ */
++
++struct squashfs_inode_info {
++ long long start_block;
++ unsigned int offset;
++ union {
++ struct {
++ long long fragment_start_block;
++ unsigned int fragment_size;
++ unsigned int fragment_offset;
++ long long block_list_start;
++ } s1;
++ struct {
++ long long directory_index_start;
++ unsigned int directory_index_offset;
++ unsigned int directory_index_count;
++ unsigned int parent_inode;
++ } s2;
++ } u;
++ struct inode vfs_inode;
++};
++#endif
+diff --new-file -urp linux-2.6.18/include/linux/squashfs_fs_sb.h linux-2.6.18-squashfs3.1/include/linux/squashfs_fs_sb.h
+--- linux-2.6.18/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18-squashfs3.1/include/linux/squashfs_fs_sb.h 2006-08-21 00:16:48.000000000 +0100
+@@ -0,0 +1,75 @@
++#ifndef SQUASHFS_FS_SB
++#define SQUASHFS_FS_SB
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_sb.h
++ */
++
++#include <linux/squashfs_fs.h>
++
++struct squashfs_cache {
++ long long block;
++ int length;
++ long long next_index;
++ char *data;
++};
++
++struct squashfs_fragment_cache {
++ long long block;
++ int length;
++ unsigned int locked;
++ char *data;
++};
++
++struct squashfs_sb_info {
++ struct squashfs_super_block sblk;
++ int devblksize;
++ int devblksize_log2;
++ int swap;
++ struct squashfs_cache *block_cache;
++ struct squashfs_fragment_cache *fragment;
++ int next_cache;
++ int next_fragment;
++ int next_meta_index;
++ unsigned int *uid;
++ unsigned int *guid;
++ long long *fragment_index;
++ unsigned int *fragment_index_2;
++ unsigned int read_size;
++ char *read_data;
++ char *read_page;
++ struct semaphore read_data_mutex;
++ struct semaphore read_page_mutex;
++ struct semaphore block_cache_mutex;
++ struct semaphore fragment_mutex;
++ struct semaphore meta_index_mutex;
++ wait_queue_head_t waitq;
++ wait_queue_head_t fragment_wait_queue;
++ struct meta_index *meta_index;
++ z_stream stream;
++ struct inode *(*iget)(struct super_block *s, squashfs_inode_t
++ inode);
++ long long (*read_blocklist)(struct inode *inode, int
++ index, int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++ int (*read_fragment_index_table)(struct super_block *s);
++};
++#endif
+diff --new-file -urp linux-2.6.18/init/do_mounts_rd.c linux-2.6.18-squashfs3.1/init/do_mounts_rd.c
+--- linux-2.6.18/init/do_mounts_rd.c 2006-08-11 00:03:15.000000000 +0100
++++ linux-2.6.18-squashfs3.1/init/do_mounts_rd.c 2006-08-21 00:13:19.000000000 +0100
+@@ -5,6 +5,7 @@
+ #include <linux/ext2_fs.h>
+ #include <linux/romfs_fs.h>
+ #include <linux/cramfs_fs.h>
++#include <linux/squashfs_fs.h>
+ #include <linux/initrd.h>
+ #include <linux/string.h>
+
+@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
+ * numbers could not be found.
+ *
+ * We currently check for the following magic numbers:
++ * squashfs
+ * minix
+ * ext2
+ * romfs
+@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
+ struct ext2_super_block *ext2sb;
+ struct romfs_super_block *romfsb;
+ struct cramfs_super *cramfsb;
++ struct squashfs_super_block *squashfsb;
+ int nblocks = -1;
+ unsigned char *buf;
+
+@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
+ ext2sb = (struct ext2_super_block *) buf;
+ romfsb = (struct romfs_super_block *) buf;
+ cramfsb = (struct cramfs_super *) buf;
++ squashfsb = (struct squashfs_super_block *) buf;
+ memset(buf, 0xe5, size);
+
+ /*
+@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start
+ goto done;
+ }
+
++ /* squashfs is at block zero too */
++ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
++ printk(KERN_NOTICE
++ "RAMDISK: squashfs filesystem found at block %d\n",
++ start_block);
++ if (squashfsb->s_major < 3)
++ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ else
++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ goto done;
++ }
++
+ /*
+ * Read block 1 to test for minix and ext2 superblock
+ */
diff --git a/packages/linux/linux-magicbox-2.6.19.2/.mtn2git_empty b/packages/linux/linux-magicbox-2.6.19.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/.mtn2git_empty
diff --git a/packages/linux/linux-magicbox-2.6.19.2/001-magicbox_support.patch b/packages/linux/linux-magicbox-2.6.19.2/001-magicbox_support.patch
new file mode 100644
index 0000000000..7c609e5d02
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/001-magicbox_support.patch
@@ -0,0 +1,372 @@
+diff -urN linux.old/arch/ppc/platforms/4xx/Kconfig linux.dev/arch/ppc/platforms/4xx/Kconfig
+--- linux.old/arch/ppc/platforms/4xx/Kconfig 2006-11-29 22:57:37.000000000 +0100
++++ linux.dev/arch/ppc/platforms/4xx/Kconfig 2006-12-14 08:49:18.000000000 +0100
+@@ -52,6 +52,12 @@
+ help
+ This option enables support for the IBM PPC405GP evaluation board.
+
++config MAGICBOX
++ bool "MagicBox"
++ select WANT_EARLY_SERIAL
++ help
++ This option enables support for the IBM PPC405EP evaluation board.
++
+ config XILINX_ML300
+ bool "Xilinx-ML300"
+ help
+@@ -173,7 +179,7 @@
+
+ config IBM_OCP
+ bool
+- depends on ASH || BAMBOO || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || YUCCA || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
++ depends on ASH || BAMBOO || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || YUCCA || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT || MAGICBOX
+ default y
+
+ config IBM_EMAC4
+@@ -183,7 +189,7 @@
+
+ config BIOS_FIXUP
+ bool
+- depends on BUBINGA || EP405 || SYCAMORE || WALNUT || CPCI405
++ depends on BUBINGA || EP405 || SYCAMORE || WALNUT || CPCI405 || MAGICBOX
+ default y
+
+ # OAK doesn't exist but wanted to keep this around for any future 403GCX boards
+@@ -194,7 +200,7 @@
+
+ config 405EP
+ bool
+- depends on BUBINGA
++ depends on BUBINGA || MAGICBOX
+ default y
+
+ config 405GP
+diff -urN linux.old/arch/ppc/platforms/4xx/magicbox.c linux.dev/arch/ppc/platforms/4xx/magicbox.c
+--- linux.old/arch/ppc/platforms/4xx/magicbox.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/arch/ppc/platforms/4xx/magicbox.c 2006-12-14 08:48:56.000000000 +0100
+@@ -0,0 +1,249 @@
++/*
++ * Support for IBM PPC 405EP-based MagicBox board
++ * Copyright (C) 2006 Karol Lewandowski
++ *
++ * Heavily based on bubinga.c
++ *
++ * Author: SAW (IBM), derived from walnut.c.
++ * Maintained by MontaVista Software <source@mvista.com>
++ *
++ * 2003 (c) MontaVista Softare Inc. This file is licensed under the
++ * terms of the GNU General Public License version 2. This program is
++ * licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#include <linux/autoconf.h>
++#include <linux/init.h>
++#include <linux/smp.h>
++#include <linux/threads.h>
++#include <linux/param.h>
++#include <linux/string.h>
++#include <linux/blkdev.h>
++#include <linux/pci.h>
++#include <linux/tty.h>
++#include <linux/serial.h>
++#include <linux/serial_core.h>
++
++#include <asm/system.h>
++#include <asm/pci-bridge.h>
++#include <asm/processor.h>
++#include <asm/machdep.h>
++#include <asm/page.h>
++#include <asm/time.h>
++#include <asm/io.h>
++#include <asm/kgdb.h>
++#include <asm/ocp.h>
++#include <asm/ibm_ocp_pci.h>
++
++#include <platforms/4xx/ibm405ep.h>
++
++#undef DEBUG
++
++#ifdef DEBUG
++#define DBG(x...) printk(x)
++#else
++#define DBG(x...)
++#endif
++
++extern bd_t __res;
++
++/* Some IRQs unique to board
++ * Used by the generic 405 PCI setup functions in ppc4xx_pci.c
++ */
++int __init
++ppc405_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
++{
++ static char pci_irq_table[][4] =
++ /*
++ * PCI IDSEL/INTPIN->INTLINE
++ * A B C D
++ */
++ {
++ {28, 28, 28, 28}, /* IDSEL 1 - PCI slot 1 */
++ {29, 29, 29, 29}, /* IDSEL 2 - PCI slot 2 */
++ {30, 30, 30, 30}, /* IDSEL 3 - PCI slot 3 */
++ {31, 31, 31, 31}, /* IDSEL 4 - PCI slot 4 */
++ };
++
++ const long min_idsel = 1, max_idsel = 4, irqs_per_slot = 4;
++ return PCI_IRQ_TABLE_LOOKUP;
++};
++
++
++/* The serial clock for the chip is an internal clock determined by
++ * different clock speeds/dividers.
++ * Calculate the proper input baud rate and setup the serial driver.
++ */
++static void __init
++magicbox_early_serial_map(void)
++{
++ u32 uart_div;
++ int uart_clock;
++ struct uart_port port;
++
++ /* Calculate the serial clock input frequency
++ *
++ * The base baud is the PLL OUTA (provided in the board info
++ * structure) divided by the external UART Divisor, divided
++ * by 16.
++ */
++ uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV);
++ uart_clock = __res.bi_procfreq / uart_div;
++
++ /* Setup serial port access */
++ memset(&port, 0, sizeof(port));
++ port.membase = (void*)ACTING_UART0_IO_BASE;
++ port.irq = ACTING_UART0_INT;
++ port.uartclk = uart_clock;
++ port.regshift = 0;
++ port.iotype = SERIAL_IO_MEM;
++ port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST;
++ port.line = 0;
++
++ if (early_serial_setup(&port) != 0) {
++ printk("Early serial init of port 0 failed\n");
++ }
++
++ port.membase = (void*)ACTING_UART1_IO_BASE;
++ port.irq = ACTING_UART1_INT;
++ port.line = 1;
++
++ if (early_serial_setup(&port) != 0) {
++ printk("Early serial init of port 1 failed\n");
++ }
++}
++
++void __init
++bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip)
++{
++ unsigned int bar_response, bar;
++ /*
++ * Expected PCI mapping:
++ *
++ * PLB addr PCI memory addr
++ * --------------------- ---------------------
++ * 0000'0000 - 7fff'ffff <--- 0000'0000 - 7fff'ffff
++ * 8000'0000 - Bfff'ffff ---> 8000'0000 - Bfff'ffff
++ *
++ * PLB addr PCI io addr
++ * --------------------- ---------------------
++ * e800'0000 - e800'ffff ---> 0000'0000 - 0001'0000
++ *
++ * The following code is simplified by assuming that the bootrom
++ * has been well behaved in following this mapping.
++ */
++
++#ifdef DEBUG
++ int i;
++
++ printk("ioremap PCLIO_BASE = 0x%x\n", pcip);
++ printk("PCI bridge regs before fixup \n");
++ for (i = 0; i <= 3; i++) {
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
++ }
++ printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
++ printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
++ printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
++ printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
++
++#endif
++
++ /* added for IBM boot rom version 1.15 bios bar changes -AK */
++
++ /* Disable region first */
++ out_le32((void *) &(pcip->pmm[0].ma), 0x00000000);
++ /* PLB starting addr, PCI: 0x80000000 */
++ out_le32((void *) &(pcip->pmm[0].la), 0x80000000);
++ /* PCI start addr, 0x80000000 */
++ out_le32((void *) &(pcip->pmm[0].pcila), PPC405_PCI_MEM_BASE);
++ /* 512MB range of PLB to PCI */
++ out_le32((void *) &(pcip->pmm[0].pciha), 0x00000000);
++ /* Enable no pre-fetch, enable region */
++ out_le32((void *) &(pcip->pmm[0].ma), ((0xffffffff -
++ (PPC405_PCI_UPPER_MEM -
++ PPC405_PCI_MEM_BASE)) | 0x01));
++
++ /* Disable region one */
++ out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].la), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000);
++ out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
++ out_le32((void *) &(pcip->ptm1ms), 0x00000001);
++
++ /* Disable region two */
++ out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].la), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000);
++ out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
++ out_le32((void *) &(pcip->ptm2ms), 0x00000000);
++ out_le32((void *) &(pcip->ptm2la), 0x00000000);
++
++ /* Zero config bars */
++ for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) {
++ early_write_config_dword(hose, hose->first_busno,
++ PCI_FUNC(hose->first_busno), bar,
++ 0x00000000);
++ early_read_config_dword(hose, hose->first_busno,
++ PCI_FUNC(hose->first_busno), bar,
++ &bar_response);
++ DBG("BUS %d, device %d, Function %d bar 0x%8.8x is 0x%8.8x\n",
++ hose->first_busno, PCI_SLOT(hose->first_busno),
++ PCI_FUNC(hose->first_busno), bar, bar_response);
++ }
++ /* end work arround */
++
++#ifdef DEBUG
++ printk("PCI bridge regs after fixup \n");
++ for (i = 0; i <= 3; i++) {
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
++ printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
++ }
++ printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
++ printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
++ printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
++ printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
++
++#endif /* DEBUG */
++}
++
++void __init
++magicbox_setup_arch(void)
++{
++ ppc4xx_setup_arch();
++
++ ibm_ocp_set_emac(0, 1);
++
++ magicbox_early_serial_map();
++
++ /* Identify the system */
++ printk("MagicBox port (C) 2005 Karol Lewandowski <kl@jasmine.eu.org>\n");
++}
++
++void __init
++magicbox_map_io(void)
++{
++ ppc4xx_map_io();
++}
++
++void __init
++platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
++ unsigned long r6, unsigned long r7)
++{
++ ppc4xx_init(r3, r4, r5, r6, r7);
++
++ ppc_md.setup_arch = magicbox_setup_arch;
++ ppc_md.setup_io_mappings = magicbox_map_io;
++
++#ifdef CONFIG_KGDB
++ ppc_md.early_serial_map = bubinga_early_serial_map;
++#endif
++
++}
+diff -urN linux.old/arch/ppc/platforms/4xx/magicbox.h linux.dev/arch/ppc/platforms/4xx/magicbox.h
+--- linux.old/arch/ppc/platforms/4xx/magicbox.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/arch/ppc/platforms/4xx/magicbox.h 2006-12-14 08:48:56.000000000 +0100
+@@ -0,0 +1,47 @@
++/*
++ * Support for IBM PPC 405EP-based MagicBox board
++ *
++ * Heavily based on bubinga.h
++ *
++ *
++ * Author: SAW (IBM), derived from walnut.h.
++ * Maintained by MontaVista Software <source@mvista.com>
++ *
++ * 2003 (c) MontaVista Softare Inc. This file is licensed under the
++ * terms of the GNU General Public License version 2. This program is
++ * licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#ifdef __KERNEL__
++#ifndef __MAGICBOX_H__
++#define __MAGICBOX_H__
++
++#include <linux/autoconf.h>
++#include <platforms/4xx/ibm405ep.h>
++#include <asm/ppcboot.h>
++
++/* Memory map for the "MagicBox" 405EP evaluation board -- generic 4xx. */
++
++/* The UART clock is based off an internal clock -
++ * define BASE_BAUD based on the internal clock and divider(s).
++ * Since BASE_BAUD must be a constant, we will initialize it
++ * using clock/divider values which OpenBIOS initializes
++ * for typical configurations at various CPU speeds.
++ * The base baud is calculated as (FWDA / EXT UART DIV / 16)
++ */
++#define BASE_BAUD 0
++
++/* Flash */
++#define PPC40x_FPGA_BASE 0xF0300000
++#define PPC40x_FPGA_REG_OFFS 1 /* offset to flash map reg */
++#define PPC40x_FLASH_ONBD_N(x) (x & 0x02)
++#define PPC40x_FLASH_SRAM_SEL(x) (x & 0x01)
++#define PPC40x_FLASH_LOW 0xFFF00000
++#define PPC40x_FLASH_HIGH 0xFFF80000
++#define PPC40x_FLASH_SIZE 0x80000
++
++#define PPC4xx_MACHINE_NAME "MagicBox"
++
++#endif /* __MAGICBOX_H__ */
++#endif /* __KERNEL__ */
+diff -urN linux.old/arch/ppc/platforms/4xx/Makefile linux.dev/arch/ppc/platforms/4xx/Makefile
+--- linux.old/arch/ppc/platforms/4xx/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux.dev/arch/ppc/platforms/4xx/Makefile 2006-12-14 08:48:56.000000000 +0100
+@@ -13,6 +13,7 @@
+ obj-$(CONFIG_REDWOOD_6) += redwood6.o
+ obj-$(CONFIG_SYCAMORE) += sycamore.o
+ obj-$(CONFIG_WALNUT) += walnut.o
++obj-$(CONFIG_MAGICBOX) += magicbox.o
+ obj-$(CONFIG_XILINX_ML300) += xilinx_ml300.o
+ obj-$(CONFIG_XILINX_ML403) += xilinx_ml403.o
+
+diff -urN linux.old/include/asm-ppc/ibm4xx.h linux.dev/include/asm-ppc/ibm4xx.h
+--- linux.old/include/asm-ppc/ibm4xx.h 2006-11-29 22:57:37.000000000 +0100
++++ linux.dev/include/asm-ppc/ibm4xx.h 2006-12-14 08:48:56.000000000 +0100
+@@ -18,6 +18,10 @@
+
+ #ifdef CONFIG_40x
+
++#if defined(CONFIG_MAGICBOX)
++#include <platforms/4xx/magicbox.h>
++#endif
++
+ #if defined(CONFIG_BUBINGA)
+ #include <platforms/4xx/bubinga.h>
+ #endif
diff --git a/packages/linux/linux-magicbox-2.6.19.2/001-squashfs.patch b/packages/linux/linux-magicbox-2.6.19.2/001-squashfs.patch
new file mode 100644
index 0000000000..6881cd0bb1
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/001-squashfs.patch
@@ -0,0 +1,4170 @@
+diff -urN linux-2.6.19.old/fs/Kconfig linux-2.6.19.dev/fs/Kconfig
+--- linux-2.6.19.old/fs/Kconfig 2006-12-14 03:13:16.000000000 +0100
++++ linux-2.6.19.dev/fs/Kconfig 2006-12-14 03:13:16.000000000 +0100
+@@ -1457,6 +1457,71 @@
+
+ If unsure, say N.
+
++config SQUASHFS
++ tristate "SquashFS 3.0 - Squashed file system support"
++ select ZLIB_INFLATE
++ help
++ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
++ System). Squashfs is a highly compressed read-only filesystem for Linux.
++ It uses zlib compression to compress both files, inodes and directories.
++ Inodes in the system are very small and all blocks are packed to minimise
++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
++ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
++ uid/gid information, hard links and timestamps.
++
++ Squashfs is intended for general read-only filesystem use, for archival
++ use (i.e. in cases where a .tar.gz file may be used), and in embedded
++ systems where low overhead is needed. Further information and filesystem tools
++ are available from http://squashfs.sourceforge.net.
++
++ If you want to compile this as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called squashfs. Note that the root file system (the one
++ containing the directory /) cannot be compiled as a module.
++
++ If unsure, say N.
++
++config SQUASHFS_EMBEDDED
++
++ bool "Additional options for memory-constrained systems"
++ depends on SQUASHFS
++ default n
++ help
++ Saying Y here allows you to specify cache sizes and how Squashfs
++ allocates memory. This is only intended for memory constrained
++ systems.
++
++ If unsure, say N.
++
++config SQUASHFS_FRAGMENT_CACHE_SIZE
++ int "Number of fragments cached" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default "3"
++ help
++ By default SquashFS caches the last 3 fragments read from
++ the filesystem. Increasing this amount may mean SquashFS
++ has to re-read fragments less often from disk, at the expense
++ of extra system memory. Decreasing this amount will mean
++ SquashFS uses less memory at the expense of extra reads from disk.
++
++ Note there must be at least one cached fragment. Anything
++ much more than three will probably not make much difference.
++
++config SQUASHFS_VMALLOC
++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default n
++ help
++ By default SquashFS uses kmalloc to obtain fragment cache memory.
++ Kmalloc memory is the standard kernel allocator, but it can fail
++ on memory constrained systems. Because of the way Vmalloc works,
++ Vmalloc can succeed when kmalloc fails. Specifying this option
++ will make SquashFS always use Vmalloc to allocate the
++ fragment cache memory.
++
++ If unsure, say N.
++
+ config VXFS_FS
+ tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+ depends on BLOCK
+diff -urN linux-2.6.19.old/fs/Makefile linux-2.6.19.dev/fs/Makefile
+--- linux-2.6.19.old/fs/Makefile 2006-12-14 03:13:16.000000000 +0100
++++ linux-2.6.19.dev/fs/Makefile 2006-12-14 03:13:16.000000000 +0100
+@@ -67,6 +67,7 @@
+ obj-$(CONFIG_JBD2) += jbd2/
+ obj-$(CONFIG_EXT2_FS) += ext2/
+ obj-$(CONFIG_CRAMFS) += cramfs/
++obj-$(CONFIG_SQUASHFS) += squashfs/
+ obj-$(CONFIG_RAMFS) += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
+diff -urN linux-2.6.19.old/fs/squashfs/inode.c linux-2.6.19.dev/fs/squashfs/inode.c
+--- linux-2.6.19.old/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/inode.c 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,2124 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * inode.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++
++static void squashfs_put_super(struct super_block *);
++static int squashfs_statfs(struct dentry *, struct kstatfs *);
++static int squashfs_symlink_readpage(struct file *file, struct page *page);
++static int squashfs_readpage(struct file *file, struct page *page);
++static int squashfs_readpage4K(struct file *file, struct page *page);
++static int squashfs_readdir(struct file *, void *, filldir_t);
++static struct inode *squashfs_alloc_inode(struct super_block *sb);
++static void squashfs_destroy_inode(struct inode *inode);
++static int init_inodecache(void);
++static void destroy_inodecache(void);
++static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
++ struct nameidata *);
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++static int squashfs_get_sb(struct file_system_type *, int,
++ const char *, void *, struct vfsmount *);
++
++
++static z_stream stream;
++
++static struct file_system_type squashfs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "squashfs",
++ .get_sb = squashfs_get_sb,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static struct super_operations squashfs_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
++ .readpage = squashfs_symlink_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops = {
++ .readpage = squashfs_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
++ .readpage = squashfs_readpage4K
++};
++
++static struct file_operations squashfs_dir_ops = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir
++};
++
++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
++ .lookup = squashfs_lookup
++};
++
++
++static struct buffer_head *get_block_length(struct super_block *s,
++ int *cur_index, int *offset, int *c_byte)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned short temp;
++ struct buffer_head *bh;
++
++ if (!(bh = sb_bread(s, *cur_index)))
++ goto out;
++
++ if (msblk->devblksize - *offset == 1) {
++ if (msblk->swap)
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ else
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ if (msblk->swap)
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ bh->b_data);
++ else
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ bh->b_data);
++ *c_byte = temp;
++ *offset = 1;
++ } else {
++ if (msblk->swap) {
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ } else {
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ }
++ *c_byte = temp;
++ *offset += 2;
++ }
++
++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
++ if (*offset == msblk->devblksize) {
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ *offset = 0;
++ }
++ if (*((unsigned char *) (bh->b_data + *offset)) !=
++ SQUASHFS_MARKER_BYTE) {
++ ERROR("Metadata block marker corrupt @ %x\n",
++ *cur_index);
++ brelse(bh);
++ goto out;
++ }
++ (*offset)++;
++ }
++ return bh;
++
++out:
++ return NULL;
++}
++
++
++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
++ msblk->devblksize_log2) + 2];
++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
++ unsigned int cur_index = index >> msblk->devblksize_log2;
++ int bytes, avail_bytes, b = 0, k;
++ char *c_buffer;
++ unsigned int compressed;
++ unsigned int c_byte = length;
++
++ if (c_byte) {
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ if (!(bh[0] = sb_getblk(s, cur_index)))
++ goto block_release;
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b, bh);
++ } else {
++ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
++ &c_byte)))
++ goto read_failure;
++
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b - 1, bh + 1);
++ }
++
++ if (compressed)
++ down(&msblk->read_data_mutex);
++
++ for (bytes = 0, k = 0; k < b; k++) {
++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
++ msblk->devblksize - offset :
++ c_byte - bytes;
++ wait_on_buffer(bh[k]);
++ if (!buffer_uptodate(bh[k]))
++ goto block_release;
++ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++
++ /*
++ * uncompress block
++ */
++ if (compressed) {
++ int zlib_err;
++
++ stream.next_in = c_buffer;
++ stream.avail_in = c_byte;
++ stream.next_out = buffer;
++ stream.avail_out = msblk->read_size;
++
++ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
++ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
++ != Z_STREAM_END) || ((zlib_err =
++ zlib_inflateEnd(&stream)) != Z_OK)) {
++ ERROR("zlib_fs returned unexpected result 0x%x\n",
++ zlib_err);
++ bytes = 0;
++ } else
++ bytes = stream.total_out;
++
++ up(&msblk->read_data_mutex);
++ }
++
++ if (next_index)
++ *next_index = index + c_byte + (length ? 0 :
++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
++ ? 3 : 2));
++ return bytes;
++
++block_release:
++ while (--b >= 0)
++ brelse(bh[b]);
++
++read_failure:
++ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
++ return 0;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int n, i, bytes, return_length = length;
++ long long next_index;
++
++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++ while ( 1 ) {
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (msblk->block_cache[i].block == block)
++ break;
++
++ down(&msblk->block_cache_mutex);
++
++ if (i == SQUASHFS_CACHED_BLKS) {
++ /* read inode header block */
++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
++ n ; n --, i = (i + 1) %
++ SQUASHFS_CACHED_BLKS)
++ if (msblk->block_cache[i].block !=
++ SQUASHFS_USED_BLK)
++ break;
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->waitq, &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->block_cache_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->waitq, &wait);
++ continue;
++ }
++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
++
++ if (msblk->block_cache[i].block ==
++ SQUASHFS_INVALID_BLK) {
++ if (!(msblk->block_cache[i].data =
++ kmalloc(SQUASHFS_METADATA_SIZE,
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate cache"
++ "block\n");
++ up(&msblk->block_cache_mutex);
++ goto out;
++ }
++ }
++
++ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
++ up(&msblk->block_cache_mutex);
++
++ if (!(msblk->block_cache[i].length =
++ squashfs_read_data(s,
++ msblk->block_cache[i].data,
++ block, 0, &next_index))) {
++ ERROR("Unable to read cache block [%llx:%x]\n",
++ block, offset);
++ goto out;
++ }
++
++ down(&msblk->block_cache_mutex);
++ wake_up(&msblk->waitq);
++ msblk->block_cache[i].block = block;
++ msblk->block_cache[i].next_index = next_index;
++ TRACE("Read cache block [%llx:%x]\n", block, offset);
++ }
++
++ if (msblk->block_cache[i].block != block) {
++ up(&msblk->block_cache_mutex);
++ continue;
++ }
++
++ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
++ if (buffer)
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, length);
++ if (msblk->block_cache[i].length - offset == length) {
++ *next_block = msblk->block_cache[i].next_index;
++ *next_offset = 0;
++ } else {
++ *next_block = block;
++ *next_offset = offset + length;
++ }
++ up(&msblk->block_cache_mutex);
++ goto finish;
++ } else {
++ if (buffer) {
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, bytes);
++ buffer += bytes;
++ }
++ block = msblk->block_cache[i].next_index;
++ up(&msblk->block_cache_mutex);
++ length -= bytes;
++ offset = 0;
++ }
++ }
++
++finish:
++ return return_length;
++out:
++ return 0;
++}
++
++
++static int get_fragment_location(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
++ struct squashfs_fragment_entry fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment)
++{
++ down(&msblk->fragment_mutex);
++ fragment->locked --;
++ wake_up(&msblk->fragment_wait_queue);
++ up(&msblk->fragment_mutex);
++}
++
++
++SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length)
++{
++ int i, n;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++
++ while ( 1 ) {
++ down(&msblk->fragment_mutex);
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
++ msblk->fragment[i].block != start_block; i++);
++
++ if (i == SQUASHFS_CACHED_FRAGMENTS) {
++ for (i = msblk->next_fragment, n =
++ SQUASHFS_CACHED_FRAGMENTS; n &&
++ msblk->fragment[i].locked; n--, i = (i + 1) %
++ SQUASHFS_CACHED_FRAGMENTS);
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->fragment_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ continue;
++ }
++ msblk->next_fragment = (msblk->next_fragment + 1) %
++ SQUASHFS_CACHED_FRAGMENTS;
++
++ if (msblk->fragment[i].data == NULL)
++ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
++ (SQUASHFS_FILE_MAX_SIZE))) {
++ ERROR("Failed to allocate fragment "
++ "cache block\n");
++ up(&msblk->fragment_mutex);
++ goto out;
++ }
++
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].locked = 1;
++ up(&msblk->fragment_mutex);
++
++ if (!(msblk->fragment[i].length = squashfs_read_data(s,
++ msblk->fragment[i].data,
++ start_block, length, NULL))) {
++ ERROR("Unable to read fragment cache block "
++ "[%llx]\n", start_block);
++ msblk->fragment[i].locked = 0;
++ goto out;
++ }
++
++ msblk->fragment[i].block = start_block;
++ TRACE("New fragment %d, start block %lld, locked %d\n",
++ i, msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ msblk->fragment[i].locked++;
++ up(&msblk->fragment_mutex);
++ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
++ msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ return &msblk->fragment[i];
++
++out:
++ return NULL;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header *inodeb)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = inodeb->inode_number;
++ i->i_mtime.tv_sec = inodeb->mtime;
++ i->i_atime.tv_sec = inodeb->mtime;
++ i->i_ctime.tv_sec = inodeb->mtime;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header id, sid;
++ struct squashfs_base_inode_header *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_reg_inode_header *inodep = &id.reg;
++ struct squashfs_reg_inode_header *sinodep = &sid.reg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = 1;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_LREG_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_lreg_inode_header *inodep = &id.lreg;
++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header *inodep = &id.dir;
++ struct squashfs_dir_inode_header *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header *inodep = &id.dev;
++ struct squashfs_dev_inode_header *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ struct squashfs_ipc_inode_header *inodep = &id.ipc;
++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int read_fragment_index_table(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ /* Allocate fragment index table */
++ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ long long fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
++ &msblk->fragment_index[i], 1);
++ msblk->fragment_index[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget;
++ msblk->read_blocklist = read_blocklist;
++ msblk->read_fragment_index_table = read_fragment_index_table;
++
++ if (sblk->s_major == 1) {
++ if (!squashfs_1_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 1.0 support enabled\n");
++ return 0;
++ }
++ } else if (sblk->s_major == 2) {
++ if (!squashfs_2_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 2.0 support enabled\n");
++ return 0;
++ }
++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
++ SQUASHFS_MINOR) {
++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
++ "filesystem\n", sblk->s_major, sblk->s_minor);
++ SERROR("Please update your kernel\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static int squashfs_fill_super(struct super_block *s, void *data, int silent)
++{
++ struct squashfs_sb_info *msblk;
++ struct squashfs_super_block *sblk;
++ int i;
++ char b[BDEVNAME_SIZE];
++ struct inode *root;
++
++ TRACE("Entered squashfs_read_superblock\n");
++
++ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate superblock\n");
++ goto failure;
++ }
++ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
++ msblk = s->s_fs_info;
++ sblk = &msblk->sblk;
++
++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
++ msblk->devblksize_log2 = ffz(~msblk->devblksize);
++
++ init_MUTEX(&msblk->read_data_mutex);
++ init_MUTEX(&msblk->read_page_mutex);
++ init_MUTEX(&msblk->block_cache_mutex);
++ init_MUTEX(&msblk->fragment_mutex);
++ init_MUTEX(&msblk->meta_index_mutex);
++
++ init_waitqueue_head(&msblk->waitq);
++ init_waitqueue_head(&msblk->fragment_wait_queue);
++
++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
++ sizeof(struct squashfs_super_block) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ SERROR("unable to read superblock\n");
++ goto failed_mount;
++ }
++
++ /* Check it is a SQUASHFS superblock */
++ msblk->swap = 0;
++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
++ struct squashfs_super_block ssblk;
++
++ WARNING("Mounting a different endian SQUASHFS "
++ "filesystem on %s\n", bdevname(s->s_bdev, b));
++
++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
++ msblk->swap = 1;
++ } else {
++ SERROR("Can't find a SQUASHFS superblock on %s\n",
++ bdevname(s->s_bdev, b));
++ goto failed_mount;
++ }
++ }
++
++ /* Check the MAJOR & MINOR versions */
++ if(!supported_squashfs_filesystem(msblk, silent))
++ goto failed_mount;
++
++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
++ TRACE("Inodes are %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_INODES
++ (sblk->flags) ? "un" : "");
++ TRACE("Data is %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
++ ? "un" : "");
++ TRACE("Check data is %s present in the filesystem\n",
++ SQUASHFS_CHECK_DATA(sblk->flags) ?
++ "" : "not");
++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
++ TRACE("Block size %d\n", sblk->block_size);
++ TRACE("Number of inodes %d\n", sblk->inodes);
++ if (sblk->s_major > 1)
++ TRACE("Number of fragments %d\n", sblk->fragments);
++ TRACE("Number of uids %d\n", sblk->no_uids);
++ TRACE("Number of gids %d\n", sblk->no_guids);
++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
++ if (sblk->s_major > 1)
++ TRACE("sblk->fragment_table_start %llx\n",
++ sblk->fragment_table_start);
++ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
++
++ s->s_flags |= MS_RDONLY;
++ s->s_op = &squashfs_ops;
++
++ /* Init inode_table block pointer array */
++ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
++ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
++ ERROR("Failed to allocate block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
++
++ msblk->next_cache = 0;
++
++ /* Allocate read_data block */
++ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
++ SQUASHFS_METADATA_SIZE :
++ sblk->block_size;
++
++ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_data block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate read_page block */
++ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_page block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate uid and gid tables */
++ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ goto failed_mount;
++ }
++ msblk->guid = msblk->uid + sblk->no_uids;
++
++ if (msblk->swap) {
++ unsigned int suid[sblk->no_uids + sblk->no_guids];
++
++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
++ sblk->no_guids), (sizeof(unsigned int) * 8));
++ } else
++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++
++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
++ goto allocate_root;
++
++ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
++ ERROR("Failed to allocate fragment block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
++ msblk->fragment[i].locked = 0;
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].data = NULL;
++ }
++
++ msblk->next_fragment = 0;
++
++ /* Allocate fragment index table */
++ if (msblk->read_fragment_index_table(s) == 0)
++ goto failed_mount;
++
++allocate_root:
++ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
++ goto failed_mount;
++
++ if ((s->s_root = d_alloc_root(root)) == NULL) {
++ ERROR("Root inode create failed\n");
++ iput(root);
++ goto failed_mount;
++ }
++
++ TRACE("Leaving squashfs_read_super\n");
++ return 0;
++
++failed_mount:
++ kfree(msblk->fragment_index);
++ kfree(msblk->fragment);
++ kfree(msblk->uid);
++ kfree(msblk->read_page);
++ kfree(msblk->read_data);
++ kfree(msblk->block_cache);
++ kfree(msblk->fragment_index_2);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ return -EINVAL;
++
++failure:
++ return -ENOMEM;
++}
++
++
++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
++{
++ struct squashfs_sb_info *msblk = dentry->d_inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ TRACE("Entered squashfs_statfs\n");
++
++ buf->f_type = SQUASHFS_MAGIC;
++ buf->f_bsize = sblk->block_size;
++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
++ buf->f_bfree = buf->f_bavail = 0;
++ buf->f_files = sblk->inodes;
++ buf->f_ffree = 0;
++ buf->f_namelen = SQUASHFS_NAME_LEN;
++
++ return 0;
++}
++
++
++static int squashfs_symlink_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
++ long long block = SQUASHFS_I(inode)->start_block;
++ int offset = SQUASHFS_I(inode)->offset;
++ void *pageaddr = kmap(page);
++
++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
++ "%llx, offset %x\n", page->index,
++ SQUASHFS_I(inode)->start_block,
++ SQUASHFS_I(inode)->offset);
++
++ for (length = 0; length < index; length += bytes) {
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
++ block, offset, PAGE_CACHE_SIZE, &block,
++ &offset))) {
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
++ offset);
++ goto skip_read;
++ }
++ }
++
++ if (length != index) {
++ ERROR("(squashfs_symlink_readpage) length != index\n");
++ bytes = 0;
++ goto skip_read;
++ }
++
++ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
++ i_size_read(inode) - length;
++
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
++ offset, bytes, &block, &offset)))
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
++{
++ struct meta_index *meta = NULL;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
++
++ if(msblk->meta_index == NULL)
++ goto not_allocated;
++
++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
++ if (msblk->meta_index[i].inode_number == inode->i_ino &&
++ msblk->meta_index[i].offset >= offset &&
++ msblk->meta_index[i].offset <= index &&
++ msblk->meta_index[i].locked == 0) {
++ TRACE("locate_meta_index: entry %d, offset %d\n", i,
++ msblk->meta_index[i].offset);
++ meta = &msblk->meta_index[i];
++ offset = meta->offset;
++ }
++
++ if (meta)
++ meta->locked = 1;
++
++not_allocated:
++ up(&msblk->meta_index_mutex);
++
++ return meta;
++}
++
++
++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct meta_index *meta = NULL;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
++
++ if(msblk->meta_index == NULL) {
++ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
++ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
++ ERROR("Failed to allocate meta_index\n");
++ goto failed;
++ }
++ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
++ msblk->meta_index[i].inode_number = 0;
++ msblk->meta_index[i].locked = 0;
++ }
++ msblk->next_meta_index = 0;
++ }
++
++ for(i = SQUASHFS_META_NUMBER; i &&
++ msblk->meta_index[msblk->next_meta_index].locked; i --)
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ if(i == 0) {
++ TRACE("empty_meta_index: failed!\n");
++ goto failed;
++ }
++
++ TRACE("empty_meta_index: returned meta entry %d, %p\n",
++ msblk->next_meta_index,
++ &msblk->meta_index[msblk->next_meta_index]);
++
++ meta = &msblk->meta_index[msblk->next_meta_index];
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ meta->inode_number = inode->i_ino;
++ meta->offset = offset;
++ meta->skip = skip;
++ meta->entries = 0;
++ meta->locked = 1;
++
++failed:
++ up(&msblk->meta_index_mutex);
++ return meta;
++}
++
++
++void release_meta_index(struct inode *inode, struct meta_index *meta)
++{
++ meta->locked = 0;
++}
++
++
++static int read_block_index(struct super_block *s, int blocks, char *block_list,
++ long long *start_block, int *offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned int *block_listp;
++ int block = 0;
++
++ if (msblk->swap) {
++ char sblock_list[blocks << 2];
++
++ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
++ ((unsigned int *)sblock_list), blocks);
++ } else
++ if (!squashfs_get_cached_block(s, block_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++
++ for (block_listp = (unsigned int *) block_list; blocks;
++ block_listp++, blocks --)
++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
++
++ return block;
++
++failure:
++ return -1;
++}
++
++
++#define SIZE 256
++
++static inline int calculate_skip(int blocks) {
++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
++ return skip >= 7 ? 7 : skip + 1;
++}
++
++
++static int get_meta_index(struct inode *inode, int index,
++ long long *index_block, int *index_offset,
++ long long *data_block, char *block_list)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
++ int offset = 0;
++ struct meta_index *meta;
++ struct meta_entry *meta_entry;
++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
++ int cur_offset = SQUASHFS_I(inode)->offset;
++ long long cur_data_block = SQUASHFS_I(inode)->start_block;
++ int i;
++
++ index /= SQUASHFS_META_INDEXES * skip;
++
++ while ( offset < index ) {
++ meta = locate_meta_index(inode, index, offset + 1);
++
++ if (meta == NULL) {
++ if ((meta = empty_meta_index(inode, offset + 1,
++ skip)) == NULL)
++ goto all_done;
++ } else {
++ offset = index < meta->offset + meta->entries ? index :
++ meta->offset + meta->entries - 1;
++ meta_entry = &meta->meta_entry[offset - meta->offset];
++ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
++ cur_offset = meta_entry->offset;
++ cur_data_block = meta_entry->data_block;
++ TRACE("get_meta_index: offset %d, meta->offset %d, "
++ "meta->entries %d\n", offset, meta->offset,
++ meta->entries);
++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
++ " data_block 0x%llx\n", cur_index_block,
++ cur_offset, cur_data_block);
++ }
++
++ for (i = meta->offset + meta->entries; i <= index &&
++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
++ int blocks = skip * SQUASHFS_META_INDEXES;
++
++ while (blocks) {
++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
++ blocks;
++ int res = read_block_index(inode->i_sb, block,
++ block_list, &cur_index_block,
++ &cur_offset);
++
++ if (res == -1)
++ goto failed;
++
++ cur_data_block += res;
++ blocks -= block;
++ }
++
++ meta_entry = &meta->meta_entry[i - meta->offset];
++ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
++ meta_entry->offset = cur_offset;
++ meta_entry->data_block = cur_data_block;
++ meta->entries ++;
++ offset ++;
++ }
++
++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
++ meta->offset, meta->entries);
++
++ release_meta_index(inode, meta);
++ }
++
++all_done:
++ *index_block = cur_index_block;
++ *index_offset = cur_offset;
++ *data_block = cur_data_block;
++
++ return offset * SQUASHFS_META_INDEXES * skip;
++
++failed:
++ release_meta_index(inode, meta);
++ return -1;
++}
++
++
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize)
++{
++ long long block_ptr;
++ int offset;
++ long long block;
++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
++ block_list);
++
++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
++ block);
++
++ if(res == -1)
++ goto failure;
++
++ index -= res;
++
++ while ( index ) {
++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
++ int res = read_block_index(inode->i_sb, blocks, block_list,
++ &block_ptr, &offset);
++ if (res == -1)
++ goto failure;
++ block += res;
++ index -= blocks;
++ }
++
++ if (read_block_index(inode->i_sb, 1, block_list,
++ &block_ptr, &offset) == -1)
++ goto failure;
++ *bsize = *((unsigned int *) block_list);
++
++ return block;
++
++failure:
++ return 0;
++}
++
++
++static int squashfs_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char block_list[SIZE];
++ long long block;
++ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
++ void *pageaddr;
++ struct squashfs_fragment_cache *fragment = NULL;
++ char *data_ptr = msblk->read_page;
++
++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
++ int start_index = page->index & ~mask;
++ int end_index = start_index | mask;
++
++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT))
++ goto skip_read;
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ if ((block = (msblk->read_blocklist)(inode, index, 1,
++ block_list, NULL, &bsize)) == 0)
++ goto skip_read;
++
++ down(&msblk->read_page_mutex);
++
++ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
++ block, bsize, NULL))) {
++ ERROR("Unable to read page, block %llx, size %x\n", block,
++ bsize);
++ up(&msblk->read_page_mutex);
++ goto skip_read;
++ }
++ } else {
++ if ((fragment = get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)->u.s1.fragment_size))
++ == NULL) {
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ (int) SQUASHFS_I(inode)->
++ u.s1.fragment_size);
++ goto skip_read;
++ }
++ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
++ (i_size_read(inode) & (sblk->block_size
++ - 1));
++ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
++ data_ptr = fragment->data;
++ }
++
++ for (i = start_index; i <= end_index && byte_offset < bytes;
++ i++, byte_offset += PAGE_CACHE_SIZE) {
++ struct page *push_page;
++ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
++ PAGE_CACHE_SIZE : bytes - byte_offset;
++
++ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
++ bytes, i, byte_offset, available_bytes);
++
++ if (i == page->index) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++ } else if ((push_page =
++ grab_cache_page_nowait(page->mapping, i))) {
++ pageaddr = kmap_atomic(push_page, KM_USER0);
++
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(push_page);
++ SetPageUptodate(push_page);
++ unlock_page(push_page);
++ page_cache_release(push_page);
++ }
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log))
++ up(&msblk->read_page_mutex);
++ else
++ release_cached_fragment(msblk, fragment);
++
++ return 0;
++
++skip_read:
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++static int squashfs_readpage4K(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char block_list[SIZE];
++ long long block;
++ unsigned int bsize, bytes = 0;
++ void *pageaddr;
++
++ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT)) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ goto skip_read;
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || page->index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ block = (msblk->read_blocklist)(inode, page->index, 1,
++ block_list, NULL, &bsize);
++
++ down(&msblk->read_page_mutex);
++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
++ bsize, NULL);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (bytes)
++ memcpy(pageaddr, msblk->read_page, bytes);
++ else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ block, bsize);
++ up(&msblk->read_page_mutex);
++ } else {
++ struct squashfs_fragment_cache *fragment =
++ get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (fragment) {
++ bytes = i_size_read(inode) & (sblk->block_size - 1);
++ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
++ u.s1.fragment_offset, bytes);
++ release_cached_fragment(msblk, fragment);
++ } else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block, (int)
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ }
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ f_pos =- 3;
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length + 3;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
++ char str[SQUASHFS_NAME_LEN + 1];
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ return length + 3;
++}
++
++
++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
++
++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
++
++ while(file->f_pos < 3) {
++ char *name;
++ int size, i_ino;
++
++ if(file->f_pos == 0) {
++ name = ".";
++ size = 1;
++ i_ino = i->i_ino;
++ } else {
++ name = "..";
++ size = 2;
++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
++ }
++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
++ (unsigned int) dirent, name, size, (int)
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]);
++
++ if (filldir(dirent, name, size,
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]) < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos += size;
++ dirs_read++;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ dirs_read++;
++ }
++ }
++
++finish:
++ return dirs_read;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
++ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %d\n", name,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++static void squashfs_put_super(struct super_block *s)
++{
++ int i;
++
++ if (s->s_fs_info) {
++ struct squashfs_sb_info *sbi = s->s_fs_info;
++ if (sbi->block_cache)
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (sbi->block_cache[i].block !=
++ SQUASHFS_INVALID_BLK)
++ kfree(sbi->block_cache[i].data);
++ if (sbi->fragment)
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
++ SQUASHFS_FREE(sbi->fragment[i].data);
++ kfree(sbi->fragment);
++ kfree(sbi->block_cache);
++ kfree(sbi->read_data);
++ kfree(sbi->read_page);
++ kfree(sbi->uid);
++ kfree(sbi->fragment_index);
++ kfree(sbi->fragment_index_2);
++ kfree(sbi->meta_index);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ }
++}
++
++
++static int squashfs_get_sb(struct file_system_type *fs_type,
++ int flags, const char *dev_name, void *data,
++ struct vfsmount *mnt)
++{
++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
++}
++
++
++static int __init init_squashfs_fs(void)
++{
++ int err = init_inodecache();
++ if (err)
++ goto out;
++
++ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
++ "Phillip Lougher\n");
++
++ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
++ ERROR("Failed to allocate zlib workspace\n");
++ destroy_inodecache();
++ err = -ENOMEM;
++ goto out;
++ }
++
++ if ((err = register_filesystem(&squashfs_fs_type))) {
++ vfree(stream.workspace);
++ destroy_inodecache();
++ }
++
++out:
++ return err;
++}
++
++
++static void __exit exit_squashfs_fs(void)
++{
++ vfree(stream.workspace);
++ unregister_filesystem(&squashfs_fs_type);
++ destroy_inodecache();
++}
++
++
++static kmem_cache_t * squashfs_inode_cachep;
++
++
++static struct inode *squashfs_alloc_inode(struct super_block *sb)
++{
++ struct squashfs_inode_info *ei;
++ ei = kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
++ if (!ei)
++ return NULL;
++ return &ei->vfs_inode;
++}
++
++
++static void squashfs_destroy_inode(struct inode *inode)
++{
++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
++}
++
++
++static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
++{
++ struct squashfs_inode_info *ei = foo;
++
++ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
++ SLAB_CTOR_CONSTRUCTOR)
++ inode_init_once(&ei->vfs_inode);
++}
++
++
++static int __init init_inodecache(void)
++{
++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
++ sizeof(struct squashfs_inode_info),
++ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
++ init_once, NULL);
++ if (squashfs_inode_cachep == NULL)
++ return -ENOMEM;
++ return 0;
++}
++
++
++static void destroy_inodecache(void)
++{
++ kmem_cache_destroy(squashfs_inode_cachep);
++}
++
++
++module_init(init_squashfs_fs);
++module_exit(exit_squashfs_fs);
++MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
++MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.6.19.old/fs/squashfs/Makefile linux-2.6.19.dev/fs/squashfs/Makefile
+--- linux-2.6.19.old/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/Makefile 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
++
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+diff -urN linux-2.6.19.old/fs/squashfs/squashfs2_0.c linux-2.6.19.dev/fs/squashfs/squashfs2_0.c
+--- linux-2.6.19.old/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/squashfs2_0.c 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,758 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs2_0.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
++ struct nameidata *);
++
++static struct file_operations squashfs_dir_ops_2 = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir_2
++};
++
++static struct inode_operations squashfs_dir_inode_ops_2 = {
++ .lookup = squashfs_lookup_2
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static int read_fragment_index_table_2(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index_2,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ unsigned int fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
++ &msblk->fragment_index_2[i], 1);
++ msblk->fragment_index_2[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
++ struct squashfs_fragment_entry_2 fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry_2 sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = ino;
++ i->i_mtime.tv_sec = sblk->mkfs_time;
++ i->i_atime.tv_sec = sblk->mkfs_time;
++ i->i_ctime.tv_sec = sblk->mkfs_time;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_nlink = 1;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
++ - sblk->inode_table_start, offset);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header_2 id, sid;
++ struct squashfs_base_inode_header_2 *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
++ long long frag_blk;
++ unsigned int frag_size;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location_2(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ i->i_blksize = PAGE_CACHE_SIZE;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %x, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header_2 *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header_2 *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%x:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
++ char str[SQUASHFS_NAME_LEN + 1];
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index_2),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ return length;
++}
++
++
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
++
++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos, SQUASHFS_MK_VFS_INODE(
++ dirh.start_block, dire->offset),
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ dirs_read++;
++ }
++ }
++
++finish:
++ return dirs_read;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
++ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (sorted && name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %lld\n", name,
++ dirh.start_block, dire->offset, ino);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget_2;
++ msblk->read_fragment_index_table = read_fragment_index_table_2;
++
++ sblk->bytes_used = sblk->bytes_used_2;
++ sblk->uid_start = sblk->uid_start_2;
++ sblk->guid_start = sblk->guid_start_2;
++ sblk->inode_table_start = sblk->inode_table_start_2;
++ sblk->directory_table_start = sblk->directory_table_start_2;
++ sblk->fragment_table_start = sblk->fragment_table_start_2;
++
++ return 1;
++}
+diff -urN linux-2.6.19.old/fs/squashfs/squashfs.h linux-2.6.19.dev/fs/squashfs/squashfs.h
+--- linux-2.6.19.old/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/squashfs.h 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...) {}
++#endif
++
++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...) do { \
++ if (!silent) \
++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++ } while(0)
++
++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index);
++extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment);
++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length);
++extern struct address_space_operations squashfs_symlink_aops;
++extern struct address_space_operations squashfs_aops;
++extern struct address_space_operations squashfs_aops_4K;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
+diff -urN linux-2.6.19.old/include/linux/squashfs_fs.h linux-2.6.19.dev/include/linux/squashfs_fs.h
+--- linux-2.6.19.old/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/squashfs_fs.h 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,911 @@
++#ifndef SQUASHFS_FS
++#define SQUASHFS_FS
++
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs.h
++ */
++
++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#endif
++
++#ifdef CONFIG_SQUASHFS_VMALLOC
++#define SQUASHFS_ALLOC(a) vmalloc(a)
++#define SQUASHFS_FREE(a) vfree(a)
++#else
++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
++#define SQUASHFS_FREE(a) kfree(a)
++#endif
++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#define SQUASHFS_MAJOR 3
++#define SQUASHFS_MINOR 0
++#define SQUASHFS_MAGIC 0x73717368
++#define SQUASHFS_MAGIC_SWAP 0x68737173
++#define SQUASHFS_START 0
++
++/* size of metadata (inode and directory) blocks */
++#define SQUASHFS_METADATA_SIZE 8192
++#define SQUASHFS_METADATA_LOG 13
++
++/* default size of data blocks */
++#define SQUASHFS_FILE_SIZE 65536
++#define SQUASHFS_FILE_LOG 16
++
++#define SQUASHFS_FILE_MAX_SIZE 65536
++
++/* Max number of uids and gids */
++#define SQUASHFS_UIDS 256
++#define SQUASHFS_GUIDS 255
++
++/* Max length of filename (not 255) */
++#define SQUASHFS_NAME_LEN 256
++
++#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
++#define SQUASHFS_INVALID_BLK ((long long) -1)
++#define SQUASHFS_USED_BLK ((long long) -2)
++
++/* Filesystem flags */
++#define SQUASHFS_NOI 0
++#define SQUASHFS_NOD 1
++#define SQUASHFS_CHECK 2
++#define SQUASHFS_NOF 3
++#define SQUASHFS_NO_FRAG 4
++#define SQUASHFS_ALWAYS_FRAG 5
++#define SQUASHFS_DUPLICATE 6
++
++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
++
++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOI)
++
++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOD)
++
++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOF)
++
++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NO_FRAG)
++
++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_ALWAYS_FRAG)
++
++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_DUPLICATE)
++
++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_CHECK)
++
++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
++ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
++ (duplicate_checking << 6))
++
++/* Max number of types and file types */
++#define SQUASHFS_DIR_TYPE 1
++#define SQUASHFS_FILE_TYPE 2
++#define SQUASHFS_SYMLINK_TYPE 3
++#define SQUASHFS_BLKDEV_TYPE 4
++#define SQUASHFS_CHRDEV_TYPE 5
++#define SQUASHFS_FIFO_TYPE 6
++#define SQUASHFS_SOCKET_TYPE 7
++#define SQUASHFS_LDIR_TYPE 8
++#define SQUASHFS_LREG_TYPE 9
++
++/* 1.0 filesystem type definitions */
++#define SQUASHFS_TYPES 5
++#define SQUASHFS_IPC_TYPE 0
++
++/* Flag whether block is compressed or uncompressed, bit is set if block is
++ * uncompressed */
++#define SQUASHFS_COMPRESSED_BIT (1 << 15)
++
++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
++
++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
++
++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
++
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
++
++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
++
++/*
++ * Inode number ops. Inodes consist of a compressed block number, and an
++ * uncompressed offset within that block
++ */
++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
++
++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
++
++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
++ << 16) + (B)))
++
++/* Compute 32 bit VFS inode number from squashfs inode number */
++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
++ ((b) >> 2) + 1))
++/* XXX */
++
++/* Translate between VFS mode and squashfs mode */
++#define SQUASHFS_MODE(a) ((a) & 0xfff)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
++
++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
++ sizeof(long long))
++
++/* cached data constants for filesystem */
++#define SQUASHFS_CACHED_BLKS 8
++
++#define SQUASHFS_MAX_FILE_SIZE_LOG 64
++
++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
++
++#define SQUASHFS_MARKER_BYTE 0xff
++
++/* meta index cache */
++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
++#define SQUASHFS_META_ENTRIES 31
++#define SQUASHFS_META_NUMBER 8
++#define SQUASHFS_SLOTS 4
++
++struct meta_entry {
++ long long data_block;
++ unsigned int index_block;
++ unsigned short offset;
++ unsigned short pad;
++};
++
++struct meta_index {
++ unsigned int inode_number;
++ unsigned int offset;
++ unsigned short entries;
++ unsigned short skip;
++ unsigned short locked;
++ unsigned short pad;
++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
++};
++
++
++/*
++ * definitions for structures on disk
++ */
++
++typedef long long squashfs_block_t;
++typedef long long squashfs_inode_t;
++
++struct squashfs_super_block {
++ unsigned int s_magic;
++ unsigned int inodes;
++ unsigned int bytes_used_2;
++ unsigned int uid_start_2;
++ unsigned int guid_start_2;
++ unsigned int inode_table_start_2;
++ unsigned int directory_table_start_2;
++ unsigned int s_major:16;
++ unsigned int s_minor:16;
++ unsigned int block_size_1:16;
++ unsigned int block_log:16;
++ unsigned int flags:8;
++ unsigned int no_uids:8;
++ unsigned int no_guids:8;
++ unsigned int mkfs_time /* time of filesystem creation */;
++ squashfs_inode_t root_inode;
++ unsigned int block_size;
++ unsigned int fragments;
++ unsigned int fragment_table_start_2;
++ long long bytes_used;
++ long long uid_start;
++ long long guid_start;
++ long long inode_table_start;
++ long long directory_table_start;
++ long long fragment_table_start;
++ long long unused;
++} __attribute__ ((packed));
++
++struct squashfs_dir_index {
++ unsigned int index;
++ unsigned int start_block;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++#define SQUASHFS_BASE_INODE_HEADER \
++ unsigned int inode_type:4; \
++ unsigned int mode:12; \
++ unsigned int uid:8; \
++ unsigned int guid:8; \
++ unsigned int mtime; \
++ unsigned int inode_number;
++
++struct squashfs_base_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_lreg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ long long file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int parent_inode;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int i_count:16;
++ unsigned int parent_inode;
++ struct squashfs_dir_index index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header {
++ struct squashfs_base_inode_header base;
++ struct squashfs_dev_inode_header dev;
++ struct squashfs_symlink_inode_header symlink;
++ struct squashfs_reg_inode_header reg;
++ struct squashfs_lreg_inode_header lreg;
++ struct squashfs_dir_inode_header dir;
++ struct squashfs_ldir_inode_header ldir;
++ struct squashfs_ipc_inode_header ipc;
++};
++
++struct squashfs_dir_entry {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ int inode_number:16;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_header {
++ unsigned int count:8;
++ unsigned int start_block;
++ unsigned int inode_number;
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry {
++ long long start_block;
++ unsigned int size;
++ unsigned int unused;
++} __attribute__ ((packed));
++
++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
++extern int squashfs_uncompress_init(void);
++extern int squashfs_uncompress_exit(void);
++
++/*
++ * macros to convert each packed bitfield structure from little endian to big
++ * endian and vice versa. These are needed when creating or using a filesystem
++ * on a machine with different byte ordering to the target architecture.
++ *
++ */
++
++#define SQUASHFS_SWAP_START \
++ int bits;\
++ int b_pos;\
++ unsigned long long val;\
++ unsigned char *s;\
++ unsigned char *d;
++
++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
++ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
++}
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ipc_inode_header))\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dev_inode_header)); \
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_symlink_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_reg_inode_header));\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
++}
++
++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_lreg_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ldir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
++ SQUASHFS_SWAP((s)->index, d, 0, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
++ SQUASHFS_SWAP((s)->size, d, 64, 8);\
++}
++
++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
++ SQUASHFS_SWAP((s)->size, d, 64, 32);\
++}
++
++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 2);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 16)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
++}
++
++#define SQUASHFS_SWAP_INTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 4);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 32)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
++}
++
++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 64)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
++}
++
++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * bits / 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ bits)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++
++struct squashfs_base_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int type:4;
++ unsigned int offset:4;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
++ SQUASHFS_SWAP((s)->guid, d, 20, 4);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_ipc_inode_header_1));\
++ SQUASHFS_SWAP((s)->type, d, 24, 4);\
++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dev_inode_header_1));\
++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_1));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_reg_inode_header_1));\
++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dir_inode_header_1));\
++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
++}
++
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++
++struct squashfs_dir_index_2 {
++ unsigned int index:27;
++ unsigned int start_block:29;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_base_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++ unsigned int i_count:16;
++ struct squashfs_dir_index_2 index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header_2 {
++ struct squashfs_base_inode_header_2 base;
++ struct squashfs_dev_inode_header_2 dev;
++ struct squashfs_symlink_inode_header_2 symlink;
++ struct squashfs_reg_inode_header_2 reg;
++ struct squashfs_dir_inode_header_2 dir;
++ struct squashfs_ldir_inode_header_2 ldir;
++ struct squashfs_ipc_inode_header_2 ipc;
++};
++
++struct squashfs_dir_header_2 {
++ unsigned int count:8;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_dir_entry_2 {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry_2 {
++ unsigned int start_block;
++ unsigned int size;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dev_inode_header_2)); \
++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_2));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_reg_inode_header_2));\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_ldir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
++ SQUASHFS_SWAP((s)->index, d, 0, 27);\
++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
++ SQUASHFS_SWAP((s)->size, d, 56, 8);\
++}
++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
++ SQUASHFS_SWAP((s)->size, d, 32, 32);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
++
++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
++ sizeof(int))
++
++#endif
++
++#ifdef __KERNEL__
++
++/*
++ * macros used to swap each structure entry, taking into account
++ * bitfields and different bitfield placing conventions on differing
++ * architectures
++ */
++
++#include <asm/byteorder.h>
++
++#ifdef __BIG_ENDIAN
++ /* convert from little endian to big endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, b_pos)
++#else
++ /* convert from big endian to little endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, 64 - tbits - b_pos)
++#endif
++
++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
++ b_pos = pos % 8;\
++ val = 0;\
++ s = (unsigned char *)p + (pos / 8);\
++ d = ((unsigned char *) &val) + 7;\
++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
++ *d-- = *s++;\
++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
++}
++
++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
++
++#endif
++#endif
+diff -urN linux-2.6.19.old/include/linux/squashfs_fs_i.h linux-2.6.19.dev/include/linux/squashfs_fs_i.h
+--- linux-2.6.19.old/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/squashfs_fs_i.h 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,45 @@
++#ifndef SQUASHFS_FS_I
++#define SQUASHFS_FS_I
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_i.h
++ */
++
++struct squashfs_inode_info {
++ long long start_block;
++ unsigned int offset;
++ union {
++ struct {
++ long long fragment_start_block;
++ unsigned int fragment_size;
++ unsigned int fragment_offset;
++ long long block_list_start;
++ } s1;
++ struct {
++ long long directory_index_start;
++ unsigned int directory_index_offset;
++ unsigned int directory_index_count;
++ unsigned int parent_inode;
++ } s2;
++ } u;
++ struct inode vfs_inode;
++};
++#endif
+diff -urN linux-2.6.19.old/include/linux/squashfs_fs_sb.h linux-2.6.19.dev/include/linux/squashfs_fs_sb.h
+--- linux-2.6.19.old/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/squashfs_fs_sb.h 2006-12-14 03:13:16.000000000 +0100
+@@ -0,0 +1,74 @@
++#ifndef SQUASHFS_FS_SB
++#define SQUASHFS_FS_SB
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_sb.h
++ */
++
++#include <linux/squashfs_fs.h>
++
++struct squashfs_cache {
++ long long block;
++ int length;
++ long long next_index;
++ char *data;
++};
++
++struct squashfs_fragment_cache {
++ long long block;
++ int length;
++ unsigned int locked;
++ char *data;
++};
++
++struct squashfs_sb_info {
++ struct squashfs_super_block sblk;
++ int devblksize;
++ int devblksize_log2;
++ int swap;
++ struct squashfs_cache *block_cache;
++ struct squashfs_fragment_cache *fragment;
++ int next_cache;
++ int next_fragment;
++ int next_meta_index;
++ unsigned int *uid;
++ unsigned int *guid;
++ long long *fragment_index;
++ unsigned int *fragment_index_2;
++ unsigned int read_size;
++ char *read_data;
++ char *read_page;
++ struct semaphore read_data_mutex;
++ struct semaphore read_page_mutex;
++ struct semaphore block_cache_mutex;
++ struct semaphore fragment_mutex;
++ struct semaphore meta_index_mutex;
++ wait_queue_head_t waitq;
++ wait_queue_head_t fragment_wait_queue;
++ struct meta_index *meta_index;
++ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
++ inode);
++ long long (*read_blocklist)(struct inode *inode, int \
++ index, int readahead_blks, char *block_list, \
++ unsigned short **block_p, unsigned int *bsize);
++ int (*read_fragment_index_table)(struct super_block *s);
++};
++#endif
+diff -urN linux-2.6.19.old/init/do_mounts_rd.c linux-2.6.19.dev/init/do_mounts_rd.c
+--- linux-2.6.19.old/init/do_mounts_rd.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/init/do_mounts_rd.c 2006-12-14 03:13:16.000000000 +0100
+@@ -5,6 +5,7 @@
+ #include <linux/ext2_fs.h>
+ #include <linux/romfs_fs.h>
+ #include <linux/cramfs_fs.h>
++#include <linux/squashfs_fs.h>
+ #include <linux/initrd.h>
+ #include <linux/string.h>
+
+@@ -39,6 +40,7 @@
+ * numbers could not be found.
+ *
+ * We currently check for the following magic numbers:
++ * squashfs
+ * minix
+ * ext2
+ * romfs
+@@ -53,6 +55,7 @@
+ struct ext2_super_block *ext2sb;
+ struct romfs_super_block *romfsb;
+ struct cramfs_super *cramfsb;
++ struct squashfs_super_block *squashfsb;
+ int nblocks = -1;
+ unsigned char *buf;
+
+@@ -64,6 +67,7 @@
+ ext2sb = (struct ext2_super_block *) buf;
+ romfsb = (struct romfs_super_block *) buf;
+ cramfsb = (struct cramfs_super *) buf;
++ squashfsb = (struct squashfs_super_block *) buf;
+ memset(buf, 0xe5, size);
+
+ /*
+@@ -101,6 +105,15 @@
+ goto done;
+ }
+
++ /* squashfs is at block zero too */
++ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
++ printk(KERN_NOTICE
++ "RAMDISK: squashfs filesystem found at block %d\n",
++ start_block);
++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ goto done;
++ }
++
+ /*
+ * Read block 1 to test for minix and ext2 superblock
+ */
diff --git a/packages/linux/linux-magicbox-2.6.19.2/002-flash_map.patch b/packages/linux/linux-magicbox-2.6.19.2/002-flash_map.patch
new file mode 100644
index 0000000000..5d29a047d5
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/002-flash_map.patch
@@ -0,0 +1,147 @@
+diff -urN linux.old/drivers/mtd/maps/Kconfig linux.dev/drivers/mtd/maps/Kconfig
+--- linux.old/drivers/mtd/maps/Kconfig 2006-08-30 06:30:59.000000000 +0200
++++ linux.dev/drivers/mtd/maps/Kconfig 2006-08-30 06:11:51.000000000 +0200
+@@ -323,6 +323,15 @@
+ Walnut board. If you have one of these boards and would like to
+ use the flash chips on it, say 'Y'.
+
++config MTD_MAGICMAP
++ tristate "Flash device mapped on IBM 405EP MagicBox"
++ depends on MTD_CFI && MTD_PARTITIONS && 40x && MAGICBOX
++ help
++ This enables access routines for the flash chips on the IBM 405EP
++ MagicBox board. If you have one of these boards and would like to
++ use the flash chips on it, say 'Y'.
++
++
+ config MTD_EBONY
+ tristate "Flash devices mapped on IBM 440GP Ebony"
+ depends on MTD_JEDECPROBE && EBONY
+diff -urN linux.old/drivers/mtd/maps/magicmap.c linux.dev/drivers/mtd/maps/magicmap.c
+--- linux.old/drivers/mtd/maps/magicmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/drivers/mtd/maps/magicmap.c 2006-08-30 06:52:34.000000000 +0200
+@@ -0,0 +1,113 @@
++/*
++ * magicmap.c: Copyleft 2005 Karol Lewandowski
++ *
++ * Mapping for MagicBox flash.
++ * Based on walnut.c.
++ *
++ * Heikki Lindholm <holindho@infradead.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++#include <linux/autoconf.h>
++#include <asm/io.h>
++
++static struct mtd_info *flash;
++
++static struct map_info magic_map = {
++ .name = "Magically mapped flash",
++ .phys = 0xffc00000,
++ .size = 0x400000,
++ .bankwidth = 2,
++};
++
++static struct mtd_partition magic_partitions[] = {
++ {
++ .name = "linux",
++ .offset = 0x0,
++ .size = 0x3c0000,
++ },
++ {
++ .name = "rootfs",
++ .offset = 0x100000,
++ .size = 0x2c0000,
++ },
++ {
++ .name = "bootloader",
++ .offset = 0x3c0000,
++ .size = 0x040000,
++ .mask_flags = MTD_WRITEABLE,
++ },
++};
++
++int __init init_magic(void)
++{
++ u32 size, len;
++
++ magic_map.virt =
++ (void __iomem *)ioremap(magic_map.phys, magic_map.size);
++
++ if (!magic_map.virt) {
++ printk("Failed to ioremap flash.\n");
++ return -EIO;
++ }
++
++ simple_map_init(&magic_map);
++
++ flash = do_map_probe("cfi_probe", &magic_map);
++ if (flash) {
++ flash->owner = THIS_MODULE;
++ if (flash->read(flash, 12, sizeof(u32), &len, (char *) &size) ||
++ len != 4)
++ return -ENXIO;
++ size += 0x40; /* header size of the uImage */
++ if (size < 0x400000) {
++ /* skip to next erase block */
++ if (size & (flash->erasesize - 1)) {
++ size |= (flash->erasesize - 1);
++ size += 1;
++ }
++ magic_partitions[1].offset = size;
++ magic_partitions[1].size = magic_partitions[2].offset - size;
++ }
++
++ add_mtd_partitions(flash, magic_partitions,
++ ARRAY_SIZE(magic_partitions));
++ } else {
++ printk("map probe failed for flash\n");
++ return -ENXIO;
++ }
++
++ return 0;
++}
++
++static void __exit cleanup_magic(void)
++{
++ if (flash) {
++ del_mtd_partitions(flash);
++ map_destroy(flash);
++ }
++
++ if (magic_map.virt) {
++ iounmap((void *)magic_map.virt);
++ magic_map.virt = NULL;
++ }
++}
++
++module_init(init_magic);
++module_exit(cleanup_magic);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Karol Lewandowski");
++MODULE_DESCRIPTION("MTD map and partitions for IBM 405EP MagicBox boards");
+diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile
+--- linux.old/drivers/mtd/maps/Makefile 2006-08-30 06:30:59.000000000 +0200
++++ linux.dev/drivers/mtd/maps/Makefile 2006-08-30 06:11:51.000000000 +0200
+@@ -58,6 +58,7 @@
+ obj-$(CONFIG_MTD_BEECH) += beech-mtd.o
+ obj-$(CONFIG_MTD_ARCTIC) += arctic-mtd.o
+ obj-$(CONFIG_MTD_WALNUT) += walnut.o
++obj-$(CONFIG_MTD_MAGICMAP) += magicmap.o
+ obj-$(CONFIG_MTD_H720X) += h720x-flash.o
+ obj-$(CONFIG_MTD_SBC8240) += sbc8240.o
+ obj-$(CONFIG_MTD_NOR_TOTO) += omap-toto-flash.o
diff --git a/packages/linux/linux-magicbox-2.6.19.2/002-lzma_decompress.patch b/packages/linux/linux-magicbox-2.6.19.2/002-lzma_decompress.patch
new file mode 100644
index 0000000000..ca9767729c
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/002-lzma_decompress.patch
@@ -0,0 +1,780 @@
+--- linux-2.6.19.old/lib/Makefile 2007-04-18 17:41:22.679403384 +0200
++++ linux-2.6.19.dev/lib/Makefile 2007-04-18 17:41:43.303268080 +0200
+@@ -54,6 +54,7 @@
+ obj-$(CONFIG_AUDIT_GENERIC) += audit.o
+
+ obj-$(CONFIG_SWIOTLB) += swiotlb.o
++obj-y += LzmaDecode.o
+
+ hostprogs-y := gen_crc32table
+ clean-files := crc32table.h
+--- linux-2.6.19.old/lib/LzmaDecode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/lib/LzmaDecode.c 2006-12-14 03:13:20.000000000 +0100
+@@ -0,0 +1,663 @@
++/*
++ LzmaDecode.c
++ LZMA Decoder
++
++ LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this code, expressly permits you to
++ statically or dynamically link your code (or bind by name) to the
++ interfaces of this file without subjecting your linked code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#include <linux/LzmaDecode.h>
++
++#ifndef Byte
++#define Byte unsigned char
++#endif
++
++#define kNumTopBits 24
++#define kTopValue ((UInt32)1 << kNumTopBits)
++
++#define kNumBitModelTotalBits 11
++#define kBitModelTotal (1 << kNumBitModelTotalBits)
++#define kNumMoveBits 5
++
++typedef struct _CRangeDecoder
++{
++ Byte *Buffer;
++ Byte *BufferLim;
++ UInt32 Range;
++ UInt32 Code;
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback;
++ int Result;
++ #endif
++ int ExtraBytes;
++} CRangeDecoder;
++
++Byte RangeDecoderReadByte(CRangeDecoder *rd)
++{
++ if (rd->Buffer == rd->BufferLim)
++ {
++ #ifdef _LZMA_IN_CB
++ UInt32 size;
++ rd->Result = rd->InCallback->Read(rd->InCallback, &rd->Buffer, &size);
++ rd->BufferLim = rd->Buffer + size;
++ if (size == 0)
++ #endif
++ {
++ rd->ExtraBytes = 1;
++ return 0xFF;
++ }
++ }
++ return (*rd->Buffer++);
++}
++
++/* #define ReadByte (*rd->Buffer++) */
++#define ReadByte (RangeDecoderReadByte(rd))
++
++void RangeDecoderInit(CRangeDecoder *rd,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ Byte *stream, UInt32 bufferSize
++ #endif
++ )
++{
++ int i;
++ #ifdef _LZMA_IN_CB
++ rd->InCallback = inCallback;
++ rd->Buffer = rd->BufferLim = 0;
++ #else
++ rd->Buffer = stream;
++ rd->BufferLim = stream + bufferSize;
++ #endif
++ rd->ExtraBytes = 0;
++ rd->Code = 0;
++ rd->Range = (0xFFFFFFFF);
++ for(i = 0; i < 5; i++)
++ rd->Code = (rd->Code << 8) | ReadByte;
++}
++
++#define RC_INIT_VAR UInt32 range = rd->Range; UInt32 code = rd->Code;
++#define RC_FLUSH_VAR rd->Range = range; rd->Code = code;
++#define RC_NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | ReadByte; }
++
++UInt32 RangeDecoderDecodeDirectBits(CRangeDecoder *rd, int numTotalBits)
++{
++ RC_INIT_VAR
++ UInt32 result = 0;
++ int i;
++ for (i = numTotalBits; i > 0; i--)
++ {
++ /* UInt32 t; */
++ range >>= 1;
++
++ result <<= 1;
++ if (code >= range)
++ {
++ code -= range;
++ result |= 1;
++ }
++ /*
++ t = (code - range) >> 31;
++ t &= 1;
++ code -= range & (t - 1);
++ result = (result + result) | (1 - t);
++ */
++ RC_NORMALIZE
++ }
++ RC_FLUSH_VAR
++ return result;
++}
++
++int RangeDecoderBitDecode(CProb *prob, CRangeDecoder *rd)
++{
++ UInt32 bound = (rd->Range >> kNumBitModelTotalBits) * *prob;
++ if (rd->Code < bound)
++ {
++ rd->Range = bound;
++ *prob += (kBitModelTotal - *prob) >> kNumMoveBits;
++ if (rd->Range < kTopValue)
++ {
++ rd->Code = (rd->Code << 8) | ReadByte;
++ rd->Range <<= 8;
++ }
++ return 0;
++ }
++ else
++ {
++ rd->Range -= bound;
++ rd->Code -= bound;
++ *prob -= (*prob) >> kNumMoveBits;
++ if (rd->Range < kTopValue)
++ {
++ rd->Code = (rd->Code << 8) | ReadByte;
++ rd->Range <<= 8;
++ }
++ return 1;
++ }
++}
++
++#define RC_GET_BIT2(prob, mi, A0, A1) \
++ UInt32 bound = (range >> kNumBitModelTotalBits) * *prob; \
++ if (code < bound) \
++ { A0; range = bound; *prob += (kBitModelTotal - *prob) >> kNumMoveBits; mi <<= 1; } \
++ else \
++ { A1; range -= bound; code -= bound; *prob -= (*prob) >> kNumMoveBits; mi = (mi + mi) + 1; } \
++ RC_NORMALIZE
++
++#define RC_GET_BIT(prob, mi) RC_GET_BIT2(prob, mi, ; , ;)
++
++int RangeDecoderBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
++{
++ int mi = 1;
++ int i;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ for(i = numLevels; i > 0; i--)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + mi;
++ RC_GET_BIT(prob, mi)
++ #else
++ mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd);
++ #endif
++ }
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return mi - (1 << numLevels);
++}
++
++int RangeDecoderReverseBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
++{
++ int mi = 1;
++ int i;
++ int symbol = 0;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ for(i = 0; i < numLevels; i++)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + mi;
++ RC_GET_BIT2(prob, mi, ; , symbol |= (1 << i))
++ #else
++ int bit = RangeDecoderBitDecode(probs + mi, rd);
++ mi = mi + mi + bit;
++ symbol |= (bit << i);
++ #endif
++ }
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++Byte LzmaLiteralDecode(CProb *probs, CRangeDecoder *rd)
++{
++ int symbol = 1;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ do
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + symbol;
++ RC_GET_BIT(prob, symbol)
++ #else
++ symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
++ #endif
++ }
++ while (symbol < 0x100);
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++Byte LzmaLiteralDecodeMatch(CProb *probs, CRangeDecoder *rd, Byte matchByte)
++{
++ int symbol = 1;
++ #ifdef _LZMA_LOC_OPT
++ RC_INIT_VAR
++ #endif
++ do
++ {
++ int bit;
++ int matchBit = (matchByte >> 7) & 1;
++ matchByte <<= 1;
++ #ifdef _LZMA_LOC_OPT
++ {
++ CProb *prob = probs + ((1 + matchBit) << 8) + symbol;
++ RC_GET_BIT2(prob, symbol, bit = 0, bit = 1)
++ }
++ #else
++ bit = RangeDecoderBitDecode(probs + ((1 + matchBit) << 8) + symbol, rd);
++ symbol = (symbol << 1) | bit;
++ #endif
++ if (matchBit != bit)
++ {
++ while (symbol < 0x100)
++ {
++ #ifdef _LZMA_LOC_OPT
++ CProb *prob = probs + symbol;
++ RC_GET_BIT(prob, symbol)
++ #else
++ symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
++ #endif
++ }
++ break;
++ }
++ }
++ while (symbol < 0x100);
++ #ifdef _LZMA_LOC_OPT
++ RC_FLUSH_VAR
++ #endif
++ return symbol;
++}
++
++#define kNumPosBitsMax 4
++#define kNumPosStatesMax (1 << kNumPosBitsMax)
++
++#define kLenNumLowBits 3
++#define kLenNumLowSymbols (1 << kLenNumLowBits)
++#define kLenNumMidBits 3
++#define kLenNumMidSymbols (1 << kLenNumMidBits)
++#define kLenNumHighBits 8
++#define kLenNumHighSymbols (1 << kLenNumHighBits)
++
++#define LenChoice 0
++#define LenChoice2 (LenChoice + 1)
++#define LenLow (LenChoice2 + 1)
++#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
++#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
++#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
++
++int LzmaLenDecode(CProb *p, CRangeDecoder *rd, int posState)
++{
++ if(RangeDecoderBitDecode(p + LenChoice, rd) == 0)
++ return RangeDecoderBitTreeDecode(p + LenLow +
++ (posState << kLenNumLowBits), kLenNumLowBits, rd);
++ if(RangeDecoderBitDecode(p + LenChoice2, rd) == 0)
++ return kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid +
++ (posState << kLenNumMidBits), kLenNumMidBits, rd);
++ return kLenNumLowSymbols + kLenNumMidSymbols +
++ RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd);
++}
++
++#define kNumStates 12
++
++#define kStartPosModelIndex 4
++#define kEndPosModelIndex 14
++#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
++
++#define kNumPosSlotBits 6
++#define kNumLenToPosStates 4
++
++#define kNumAlignBits 4
++#define kAlignTableSize (1 << kNumAlignBits)
++
++#define kMatchMinLen 2
++
++#define IsMatch 0
++#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
++#define IsRepG0 (IsRep + kNumStates)
++#define IsRepG1 (IsRepG0 + kNumStates)
++#define IsRepG2 (IsRepG1 + kNumStates)
++#define IsRep0Long (IsRepG2 + kNumStates)
++#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
++#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
++#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
++#define LenCoder (Align + kAlignTableSize)
++#define RepLenCoder (LenCoder + kNumLenProbs)
++#define Literal (RepLenCoder + kNumLenProbs)
++
++#if Literal != LZMA_BASE_SIZE
++StopCompilingDueBUG
++#endif
++
++#ifdef _LZMA_OUT_READ
++
++typedef struct _LzmaVarState
++{
++ CRangeDecoder RangeDecoder;
++ Byte *Dictionary;
++ UInt32 DictionarySize;
++ UInt32 DictionaryPos;
++ UInt32 GlobalPos;
++ UInt32 Reps[4];
++ int lc;
++ int lp;
++ int pb;
++ int State;
++ int PreviousIsMatch;
++ int RemainLen;
++} LzmaVarState;
++
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++ )
++{
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ UInt32 i;
++ if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ vs->Dictionary = dictionary;
++ vs->DictionarySize = dictionarySize;
++ vs->DictionaryPos = 0;
++ vs->GlobalPos = 0;
++ vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1;
++ vs->lc = lc;
++ vs->lp = lp;
++ vs->pb = pb;
++ vs->State = 0;
++ vs->PreviousIsMatch = 0;
++ vs->RemainLen = 0;
++ dictionary[dictionarySize - 1] = 0;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++ RangeDecoderInit(&vs->RangeDecoder,
++ #ifdef _LZMA_IN_CB
++ inCallback
++ #else
++ inStream, inSize
++ #endif
++ );
++ return LZMA_RESULT_OK;
++}
++
++int LzmaDecode(unsigned char *buffer,
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ CRangeDecoder rd = vs->RangeDecoder;
++ int state = vs->State;
++ int previousIsMatch = vs->PreviousIsMatch;
++ Byte previousByte;
++ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << (vs->pb)) - 1;
++ UInt32 literalPosMask = (1 << (vs->lp)) - 1;
++ int lc = vs->lc;
++ int len = vs->RemainLen;
++ UInt32 globalPos = vs->GlobalPos;
++
++ Byte *dictionary = vs->Dictionary;
++ UInt32 dictionarySize = vs->DictionarySize;
++ UInt32 dictionaryPos = vs->DictionaryPos;
++
++ if (len == -1)
++ {
++ *outSizeProcessed = 0;
++ return LZMA_RESULT_OK;
++ }
++
++ while(len > 0 && nowPos < outSize)
++ {
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ len--;
++ }
++ if (dictionaryPos == 0)
++ previousByte = dictionary[dictionarySize - 1];
++ else
++ previousByte = dictionary[dictionaryPos - 1];
++#else
++
++int LzmaDecode(
++ Byte *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ CProb *p = (CProb *)buffer;
++ CRangeDecoder rd;
++ UInt32 i;
++ int state = 0;
++ int previousIsMatch = 0;
++ Byte previousByte = 0;
++ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << pb) - 1;
++ UInt32 literalPosMask = (1 << lp) - 1;
++ int len = 0;
++ if (bufferSize < numProbs * sizeof(CProb))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++ RangeDecoderInit(&rd,
++ #ifdef _LZMA_IN_CB
++ inCallback
++ #else
++ inStream, inSize
++ #endif
++ );
++#endif
++
++ *outSizeProcessed = 0;
++ while(nowPos < outSize)
++ {
++ int posState = (int)(
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & posStateMask);
++ #ifdef _LZMA_IN_CB
++ if (rd.Result != LZMA_RESULT_OK)
++ return rd.Result;
++ #endif
++ if (rd.ExtraBytes != 0)
++ return LZMA_RESULT_DATA_ERROR;
++ if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0)
++ {
++ CProb *probs = p + Literal + (LZMA_LIT_SIZE *
++ (((
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & literalPosMask) << lc) + (previousByte >> (8 - lc))));
++
++ if (state < 4) state = 0;
++ else if (state < 10) state -= 3;
++ else state -= 6;
++ if (previousIsMatch)
++ {
++ Byte matchByte;
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ matchByte = dictionary[pos];
++ #else
++ matchByte = outStream[nowPos - rep0];
++ #endif
++ previousByte = LzmaLiteralDecodeMatch(probs, &rd, matchByte);
++ previousIsMatch = 0;
++ }
++ else
++ previousByte = LzmaLiteralDecode(probs, &rd);
++ outStream[nowPos++] = previousByte;
++ #ifdef _LZMA_OUT_READ
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #endif
++ }
++ else
++ {
++ previousIsMatch = 1;
++ if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1)
++ {
++ if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0)
++ {
++ if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0)
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos;
++ #endif
++ if (
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ == 0)
++ return LZMA_RESULT_DATA_ERROR;
++ state = state < 7 ? 9 : 11;
++ #ifdef _LZMA_OUT_READ
++ pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ outStream[nowPos++] = previousByte;
++ continue;
++ }
++ }
++ else
++ {
++ UInt32 distance;
++ if(RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0)
++ distance = rep1;
++ else
++ {
++ if(RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0)
++ distance = rep2;
++ else
++ {
++ distance = rep3;
++ rep3 = rep2;
++ }
++ rep2 = rep1;
++ }
++ rep1 = rep0;
++ rep0 = distance;
++ }
++ len = LzmaLenDecode(p + RepLenCoder, &rd, posState);
++ state = state < 7 ? 8 : 11;
++ }
++ else
++ {
++ int posSlot;
++ rep3 = rep2;
++ rep2 = rep1;
++ rep1 = rep0;
++ state = state < 7 ? 7 : 10;
++ len = LzmaLenDecode(p + LenCoder, &rd, posState);
++ posSlot = RangeDecoderBitTreeDecode(p + PosSlot +
++ ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
++ kNumPosSlotBits), kNumPosSlotBits, &rd);
++ if (posSlot >= kStartPosModelIndex)
++ {
++ int numDirectBits = ((posSlot >> 1) - 1);
++ rep0 = ((2 | ((UInt32)posSlot & 1)) << numDirectBits);
++ if (posSlot < kEndPosModelIndex)
++ {
++ rep0 += RangeDecoderReverseBitTreeDecode(
++ p + SpecPos + rep0 - posSlot - 1, numDirectBits, &rd);
++ }
++ else
++ {
++ rep0 += RangeDecoderDecodeDirectBits(&rd,
++ numDirectBits - kNumAlignBits) << kNumAlignBits;
++ rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd);
++ }
++ }
++ else
++ rep0 = posSlot;
++ rep0++;
++ }
++ if (rep0 == (UInt32)(0))
++ {
++ /* it's for stream version */
++ len = -1;
++ break;
++ }
++ if (rep0 > nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ {
++ return LZMA_RESULT_DATA_ERROR;
++ }
++ len += kMatchMinLen;
++ do
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ outStream[nowPos++] = previousByte;
++ len--;
++ }
++ while(len > 0 && nowPos < outSize);
++ }
++ }
++
++ #ifdef _LZMA_OUT_READ
++ vs->RangeDecoder = rd;
++ vs->DictionaryPos = dictionaryPos;
++ vs->GlobalPos = globalPos + nowPos;
++ vs->Reps[0] = rep0;
++ vs->Reps[1] = rep1;
++ vs->Reps[2] = rep2;
++ vs->Reps[3] = rep3;
++ vs->State = state;
++ vs->PreviousIsMatch = previousIsMatch;
++ vs->RemainLen = len;
++ #endif
++
++ *outSizeProcessed = nowPos;
++ return LZMA_RESULT_OK;
++}
+--- linux-2.6.19.old/include/linux/LzmaDecode.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/LzmaDecode.h 2006-12-14 03:13:20.000000000 +0100
+@@ -0,0 +1,100 @@
++/*
++ LzmaDecode.h
++ LZMA Decoder interface
++
++ LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this code, expressly permits you to
++ statically or dynamically link your code (or bind by name) to the
++ interfaces of this file without subjecting your linked code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#ifndef __LZMADECODE_H
++#define __LZMADECODE_H
++
++/* #define _LZMA_IN_CB */
++/* Use callback for input data */
++
++/* #define _LZMA_OUT_READ */
++/* Use read function for output data */
++
++/* #define _LZMA_PROB32 */
++/* It can increase speed on some 32-bit CPUs,
++ but memory usage will be doubled in that case */
++
++/* #define _LZMA_LOC_OPT */
++/* Enable local speed optimizations inside code */
++
++#ifndef UInt32
++#ifdef _LZMA_UINT32_IS_ULONG
++#define UInt32 unsigned long
++#else
++#define UInt32 unsigned int
++#endif
++#endif
++
++#ifdef _LZMA_PROB32
++#define CProb UInt32
++#else
++#define CProb unsigned short
++#endif
++
++#define LZMA_RESULT_OK 0
++#define LZMA_RESULT_DATA_ERROR 1
++#define LZMA_RESULT_NOT_ENOUGH_MEM 2
++
++#ifdef _LZMA_IN_CB
++typedef struct _ILzmaInCallback
++{
++ int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize);
++} ILzmaInCallback;
++#endif
++
++#define LZMA_BASE_SIZE 1846
++#define LZMA_LIT_SIZE 768
++
++/*
++bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb)
++bufferSize += 100 in case of _LZMA_OUT_READ
++by default CProb is unsigned short,
++but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int)
++*/
++
++#ifdef _LZMA_OUT_READ
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++);
++#endif
++
++int LzmaDecode(
++ unsigned char *buffer,
++ #ifndef _LZMA_OUT_READ
++ UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed);
++
++#endif
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/003-squashfs_lzma.patch b/packages/linux/linux-magicbox-2.6.19.2/003-squashfs_lzma.patch
new file mode 100644
index 0000000000..6a21227dcb
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/003-squashfs_lzma.patch
@@ -0,0 +1,109 @@
+diff -urN linux-2.6.19.old/fs/squashfs/inode.c linux-2.6.19.dev/fs/squashfs/inode.c
+--- linux-2.6.19.old/fs/squashfs/inode.c 2006-12-14 03:13:20.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/inode.c 2006-12-14 03:13:20.000000000 +0100
+@@ -4,6 +4,9 @@
+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
+ * Phillip Lougher <phillip@lougher.org.uk>
+ *
++ * LZMA decompressor support added by Oleg I. Vdovikin
++ * Copyright (c) 2005 Oleg I.Vdovikin <oleg@cs.msu.su>
++ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+@@ -21,6 +24,7 @@
+ * inode.c
+ */
+
++#define SQUASHFS_LZMA
+ #include <linux/types.h>
+ #include <linux/squashfs_fs.h>
+ #include <linux/module.h>
+@@ -44,6 +48,19 @@
+
+ #include "squashfs.h"
+
++#ifdef SQUASHFS_LZMA
++#include <linux/LzmaDecode.h>
++
++/* default LZMA settings, should be in sync with mksquashfs */
++#define LZMA_LC 3
++#define LZMA_LP 0
++#define LZMA_PB 2
++
++#define LZMA_WORKSPACE_SIZE ((LZMA_BASE_SIZE + \
++ (LZMA_LIT_SIZE << (LZMA_LC + LZMA_LP))) * sizeof(CProb))
++
++#endif
++
+ static void squashfs_put_super(struct super_block *);
+ static int squashfs_statfs(struct dentry *, struct kstatfs *);
+ static int squashfs_symlink_readpage(struct file *file, struct page *page);
+@@ -64,7 +81,11 @@
+ const char *, void *, struct vfsmount *);
+
+
++#ifdef SQUASHFS_LZMA
++static unsigned char lzma_workspace[LZMA_WORKSPACE_SIZE];
++#else
+ static z_stream stream;
++#endif
+
+ static struct file_system_type squashfs_fs_type = {
+ .owner = THIS_MODULE,
+@@ -249,6 +270,15 @@
+ if (compressed) {
+ int zlib_err;
+
++#ifdef SQUASHFS_LZMA
++ if ((zlib_err = LzmaDecode(lzma_workspace,
++ LZMA_WORKSPACE_SIZE, LZMA_LC, LZMA_LP, LZMA_PB,
++ c_buffer, c_byte, buffer, msblk->read_size, &bytes)) != LZMA_RESULT_OK)
++ {
++ ERROR("lzma returned unexpected result 0x%x\n", zlib_err);
++ bytes = 0;
++ }
++#else
+ stream.next_in = c_buffer;
+ stream.avail_in = c_byte;
+ stream.next_out = buffer;
+@@ -263,7 +293,7 @@
+ bytes = 0;
+ } else
+ bytes = stream.total_out;
+-
++#endif
+ up(&msblk->read_data_mutex);
+ }
+
+@@ -2045,15 +2075,19 @@
+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
+ "Phillip Lougher\n");
+
++#ifndef SQUASHFS_LZMA
+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
+ ERROR("Failed to allocate zlib workspace\n");
+ destroy_inodecache();
+ err = -ENOMEM;
+ goto out;
+ }
++#endif
+
+ if ((err = register_filesystem(&squashfs_fs_type))) {
++#ifndef SQUASHFS_LZMA
+ vfree(stream.workspace);
++#endif
+ destroy_inodecache();
+ }
+
+@@ -2064,7 +2098,9 @@
+
+ static void __exit exit_squashfs_fs(void)
+ {
++#ifndef SQUASHFS_LZMA
+ vfree(stream.workspace);
++#endif
+ unregister_filesystem(&squashfs_fs_type);
+ destroy_inodecache();
+ }
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/004-extra_optimization.patch b/packages/linux/linux-magicbox-2.6.19.2/004-extra_optimization.patch
new file mode 100644
index 0000000000..3a8dfdcd00
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/004-extra_optimization.patch
@@ -0,0 +1,13 @@
+diff -urN linux-2.6.19.old/Makefile linux-2.6.19.dev/Makefile
+--- linux-2.6.19.old/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/Makefile 2006-12-14 03:13:23.000000000 +0100
+@@ -513,6 +513,9 @@
+ NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
+ CHECKFLAGS += $(NOSTDINC_FLAGS)
+
++# improve gcc optimization
++CFLAGS += $(call cc-option,-funit-at-a-time,)
++
+ # warn about C99 declaration after statement
+ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/006-gcc4_inline_fix.patch b/packages/linux/linux-magicbox-2.6.19.2/006-gcc4_inline_fix.patch
new file mode 100644
index 0000000000..32d0bc4713
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/006-gcc4_inline_fix.patch
@@ -0,0 +1,12 @@
+diff -urN linux-2.6.19.old/include/asm-mips/system.h linux-2.6.19.dev/include/asm-mips/system.h
+--- linux-2.6.19.old/include/asm-mips/system.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/asm-mips/system.h 2006-12-14 03:13:28.000000000 +0100
+@@ -311,7 +311,7 @@
+ if something tries to do an invalid xchg(). */
+ extern void __xchg_called_with_bad_pointer(void);
+
+-static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
++static __always_inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
+ {
+ switch (size) {
+ case 4:
diff --git a/packages/linux/linux-magicbox-2.6.19.2/007-samsung_flash.patch b/packages/linux/linux-magicbox-2.6.19.2/007-samsung_flash.patch
new file mode 100644
index 0000000000..e48fe04b0d
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/007-samsung_flash.patch
@@ -0,0 +1,37 @@
+diff -urN linux-2.6.19.old/drivers/mtd/chips/cfi_cmdset_0002.c linux-2.6.19.dev/drivers/mtd/chips/cfi_cmdset_0002.c
+--- linux-2.6.19.old/drivers/mtd/chips/cfi_cmdset_0002.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/drivers/mtd/chips/cfi_cmdset_0002.c 2006-12-14 03:13:30.000000000 +0100
+@@ -50,6 +50,7 @@
+ #define SST49LF004B 0x0060
+ #define SST49LF008A 0x005a
+ #define AT49BV6416 0x00d6
++#define MANUFACTURER_SAMSUNG 0x00ec
+
+ static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+@@ -293,12 +294,19 @@
+
+ if (extp->MajorVersion != '1' ||
+ (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
+- printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query "
+- "version %c.%c.\n", extp->MajorVersion,
+- extp->MinorVersion);
+- kfree(extp);
+- kfree(mtd);
+- return NULL;
++ if (cfi->mfr == MANUFACTURER_SAMSUNG &&
++ (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
++ printk(KERN_NOTICE " Newer Samsung flash detected, "
++ "should be compatibile with Amd/Fujitsu.\n");
++ }
++ else {
++ printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query "
++ "version %c.%c.\n", extp->MajorVersion,
++ extp->MinorVersion);
++ kfree(extp);
++ kfree(mtd);
++ return NULL;
++ }
+ }
+
+ /* Install our own private info structure */
diff --git a/packages/linux/linux-magicbox-2.6.19.2/009-revert_intel_flash_breakage.patch b/packages/linux/linux-magicbox-2.6.19.2/009-revert_intel_flash_breakage.patch
new file mode 100644
index 0000000000..ea06360c48
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/009-revert_intel_flash_breakage.patch
@@ -0,0 +1,169 @@
+--- linux.old/drivers/mtd/chips/cfi_cmdset_0001.c 2007-02-13 02:41:50.816650352 +0100
++++ linux.dev/drivers/mtd/chips/cfi_cmdset_0001.c 2007-02-13 02:42:13.782159064 +0100
+@@ -908,7 +908,7 @@
+
+ static int __xipram xip_wait_for_operation(
+ struct map_info *map, struct flchip *chip,
+- unsigned long adr, unsigned int chip_op_time )
++ unsigned long adr, int *chip_op_time )
+ {
+ struct cfi_private *cfi = map->fldrv_priv;
+ struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
+@@ -917,7 +917,7 @@
+ flstate_t oldstate, newstate;
+
+ start = xip_currtime();
+- usec = chip_op_time * 8;
++ usec = *chip_op_time * 8;
+ if (usec == 0)
+ usec = 500000;
+ done = 0;
+@@ -1027,8 +1027,8 @@
+ #define XIP_INVAL_CACHED_RANGE(map, from, size) \
+ INVALIDATE_CACHED_RANGE(map, from, size)
+
+-#define INVAL_CACHE_AND_WAIT(map, chip, cmd_adr, inval_adr, inval_len, usec) \
+- xip_wait_for_operation(map, chip, cmd_adr, usec)
++#define INVAL_CACHE_AND_WAIT(map, chip, cmd_adr, inval_adr, inval_len, p_usec) \
++ xip_wait_for_operation(map, chip, cmd_adr, p_usec)
+
+ #else
+
+@@ -1040,65 +1040,65 @@
+ static int inval_cache_and_wait_for_operation(
+ struct map_info *map, struct flchip *chip,
+ unsigned long cmd_adr, unsigned long inval_adr, int inval_len,
+- unsigned int chip_op_time)
++ int *chip_op_time )
+ {
+ struct cfi_private *cfi = map->fldrv_priv;
+ map_word status, status_OK = CMD(0x80);
+- int chip_state = chip->state;
+- unsigned int timeo, sleep_time;
++ int z, chip_state = chip->state;
++ unsigned long timeo;
+
+ spin_unlock(chip->mutex);
+ if (inval_len)
+ INVALIDATE_CACHED_RANGE(map, inval_adr, inval_len);
++ if (*chip_op_time)
++ cfi_udelay(*chip_op_time);
+ spin_lock(chip->mutex);
+
+- /* set our timeout to 8 times the expected delay */
+- timeo = chip_op_time * 8;
+- if (!timeo)
+- timeo = 500000;
+- sleep_time = chip_op_time / 2;
++ timeo = *chip_op_time * 8 * HZ / 1000000;
++ if (timeo < HZ/2)
++ timeo = HZ/2;
++ timeo += jiffies;
+
++ z = 0;
+ for (;;) {
++ if (chip->state != chip_state) {
++ /* Someone's suspended the operation: sleep */
++ DECLARE_WAITQUEUE(wait, current);
++
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ add_wait_queue(&chip->wq, &wait);
++ spin_unlock(chip->mutex);
++ schedule();
++ remove_wait_queue(&chip->wq, &wait);
++ timeo = jiffies + (HZ / 2); /* FIXME */
++ spin_lock(chip->mutex);
++ continue;
++ }
++
+ status = map_read(map, cmd_adr);
+ if (map_word_andequal(map, status, status_OK, status_OK))
+ break;
+
+- if (!timeo) {
++ /* OK Still waiting */
++ if (time_after(jiffies, timeo)) {
+ map_write(map, CMD(0x70), cmd_adr);
+ chip->state = FL_STATUS;
+ return -ETIME;
+ }
+
+- /* OK Still waiting. Drop the lock, wait a while and retry. */
++ /* Latency issues. Drop the lock, wait a while and retry */
++ z++;
+ spin_unlock(chip->mutex);
+- if (sleep_time >= 1000000/HZ) {
+- /*
+- * Half of the normal delay still remaining
+- * can be performed with a sleeping delay instead
+- * of busy waiting.
+- */
+- msleep(sleep_time/1000);
+- timeo -= sleep_time;
+- sleep_time = 1000000/HZ;
+- } else {
+- udelay(1);
+- cond_resched();
+- timeo--;
+- }
++ cfi_udelay(1);
+ spin_lock(chip->mutex);
+-
+- while (chip->state != chip_state) {
+- /* Someone's suspended the operation: sleep */
+- DECLARE_WAITQUEUE(wait, current);
+- set_current_state(TASK_UNINTERRUPTIBLE);
+- add_wait_queue(&chip->wq, &wait);
+- spin_unlock(chip->mutex);
+- schedule();
+- remove_wait_queue(&chip->wq, &wait);
+- spin_lock(chip->mutex);
+- }
+ }
+
++ if (!z) {
++ if (!--(*chip_op_time))
++ *chip_op_time = 1;
++ } else if (z > 1)
++ ++(*chip_op_time);
++
+ /* Done and happy. */
+ chip->state = FL_STATUS;
+ return 0;
+@@ -1107,7 +1107,8 @@
+ #endif
+
+ #define WAIT_TIMEOUT(map, chip, adr, udelay) \
+- INVAL_CACHE_AND_WAIT(map, chip, adr, 0, 0, udelay);
++ ({ int __udelay = (udelay); \
++ INVAL_CACHE_AND_WAIT(map, chip, adr, 0, 0, &__udelay); })
+
+
+ static int do_point_onechip (struct map_info *map, struct flchip *chip, loff_t adr, size_t len)
+@@ -1331,7 +1332,7 @@
+
+ ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
+ adr, map_bankwidth(map),
+- chip->word_write_time);
++ &chip->word_write_time);
+ if (ret) {
+ xip_enable(map, chip, adr);
+ printk(KERN_ERR "%s: word write error (status timeout)\n", map->name);
+@@ -1568,7 +1569,7 @@
+
+ ret = INVAL_CACHE_AND_WAIT(map, chip, cmd_adr,
+ adr, len,
+- chip->buffer_write_time);
++ &chip->buffer_write_time);
+ if (ret) {
+ map_write(map, CMD(0x70), cmd_adr);
+ chip->state = FL_STATUS;
+@@ -1703,7 +1704,7 @@
+
+ ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
+ adr, len,
+- chip->erase_time);
++ &chip->erase_time);
+ if (ret) {
+ map_write(map, CMD(0x70), adr);
+ chip->state = FL_STATUS;
diff --git a/packages/linux/linux-magicbox-2.6.19.2/010-disable_old_squashfs_compatibility.patch b/packages/linux/linux-magicbox-2.6.19.2/010-disable_old_squashfs_compatibility.patch
new file mode 100644
index 0000000000..4d556a4133
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/010-disable_old_squashfs_compatibility.patch
@@ -0,0 +1,21 @@
+diff -urN linux-2.6.19.old/fs/squashfs/Makefile linux-2.6.19.dev/fs/squashfs/Makefile
+--- linux-2.6.19.old/fs/squashfs/Makefile 2006-12-14 03:13:22.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/Makefile 2006-12-14 03:13:31.000000000 +0100
+@@ -4,4 +4,3 @@
+
+ obj-$(CONFIG_SQUASHFS) += squashfs.o
+ squashfs-y += inode.o
+-squashfs-y += squashfs2_0.o
+diff -urN linux-2.6.19.old/fs/squashfs/squashfs.h linux-2.6.19.dev/fs/squashfs/squashfs.h
+--- linux-2.6.19.old/fs/squashfs/squashfs.h 2006-12-14 03:13:20.000000000 +0100
++++ linux-2.6.19.dev/fs/squashfs/squashfs.h 2006-12-14 03:13:31.000000000 +0100
+@@ -24,6 +24,9 @@
+ #ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
+ #undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
+ #endif
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#endif
+
+ #ifdef SQUASHFS_TRACE
+ #define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
diff --git a/packages/linux/linux-magicbox-2.6.19.2/011-mips_boot.patch b/packages/linux/linux-magicbox-2.6.19.2/011-mips_boot.patch
new file mode 100644
index 0000000000..e97b6316a2
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/011-mips_boot.patch
@@ -0,0 +1,14 @@
+diff -urN linux-2.6.19.old/arch/mips/kernel/head.S linux-2.6.19.dev/arch/mips/kernel/head.S
+--- linux-2.6.19.old/arch/mips/kernel/head.S 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/arch/mips/kernel/head.S 2006-12-14 03:13:33.000000000 +0100
+@@ -129,6 +129,10 @@
+ #endif
+ .endm
+
++
++ j kernel_entry
++ nop
++
+ /*
+ * Reserved space for exception handlers.
+ * Necessary for machines which link their kernels at KSEG0.
diff --git a/packages/linux/linux-magicbox-2.6.19.2/012-mips_cpu_tlb.patch b/packages/linux/linux-magicbox-2.6.19.2/012-mips_cpu_tlb.patch
new file mode 100644
index 0000000000..90f2d9465f
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/012-mips_cpu_tlb.patch
@@ -0,0 +1,20 @@
+diff -Nur linux-2.6.17/arch/mips/mm/tlbex.c linux-2.6.17-owrt/arch/mips/mm/tlbex.c
+--- linux-2.6.17/arch/mips/mm/tlbex.c 2006-06-18 03:49:35.000000000 +0200
++++ linux-2.6.17-owrt/arch/mips/mm/tlbex.c 2006-06-18 12:48:27.000000000 +0200
+@@ -876,7 +876,6 @@
+ case CPU_R10000:
+ case CPU_R12000:
+ case CPU_R14000:
+- case CPU_4KC:
+ case CPU_SB1:
+ case CPU_SB1A:
+ case CPU_4KSC:
+@@ -904,6 +903,7 @@
+ tlbw(p);
+ break;
+
++ case CPU_4KC:
+ case CPU_4KEC:
+ case CPU_24K:
+ case CPU_34K:
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/050-mtdpart_redboot_partition_truncate.patch b/packages/linux/linux-magicbox-2.6.19.2/050-mtdpart_redboot_partition_truncate.patch
new file mode 100644
index 0000000000..2e2cde0f43
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/050-mtdpart_redboot_partition_truncate.patch
@@ -0,0 +1,61 @@
+Redboot supports storing the FIS directory and the RedBoot
+configuration information in the same block of flash memory. This is
+not the most common RedBoot configuration, but it is used on
+commercially available boards supported by the kernel.
+
+A recent patch to mtd/redboot.c (http://lkml.org/lkml/2006/3/20/410)
+which corrected the skipping of deleted table entries has exposed the
+latent problem of the kernel redboot parser running off the end of the
+FIS directory and interpreting the RedBoot configuration information
+as table entries.
+
+This patch terminates the table parsing when the first truly empty
+entry is found (table entry deletion only clears the first byte of the
+name, so two cleared bytes in a row indicates the end of the table),
+thereby supporting the combined redboot FIS directory and RedBoot
+configuration information flash layout scenario.
+
+Signed-off-by: Rod Whitby <rod@whitby.id.au>
+--
+
+Index: linux-2.6.19/drivers/mtd/redboot.c
+===================================================================
+--- linux-2.6.19.orig/drivers/mtd/redboot.c
++++ linux-2.6.19/drivers/mtd/redboot.c
+@@ -96,7 +96,19 @@ static int parse_redboot_partitions(stru
+ */
+ if (swab32(buf[i].size) == master->erasesize) {
+ int j;
+- for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) {
++ for (j = 0; j < numslots; ++j) {
++
++ /* A single 0xff denotes a deleted entry.
++ * Two of them in a row is the end of the table.
++ */
++ if (buf[j].name[0] == 0xff) {
++ if (buf[j].name[1] == 0xff) {
++ break;
++ } else {
++ continue;
++ }
++ }
++
+ /* The unsigned long fields were written with the
+ * wrong byte sex, name and pad have no byte sex.
+ */
+@@ -123,8 +135,13 @@ static int parse_redboot_partitions(stru
+ for (i = 0; i < numslots; i++) {
+ struct fis_list *new_fl, **prev;
+
+- if (buf[i].name[0] == 0xff)
+- continue;
++ if (buf[i].name[0] == 0xff) {
++ if (buf[i].name[1] == 0xff) {
++ break;
++ } else {
++ continue;
++ }
++ }
+ if (!redboot_checksum(&buf[i]))
+ break;
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/060-rootfs_split.patch b/packages/linux/linux-magicbox-2.6.19.2/060-rootfs_split.patch
new file mode 100644
index 0000000000..b4a55256bf
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/060-rootfs_split.patch
@@ -0,0 +1,414 @@
+diff -ur linux.old/drivers/mtd/Kconfig linux.dev/drivers/mtd/Kconfig
+--- linux.old/drivers/mtd/Kconfig 2007-01-10 20:10:37.000000000 +0100
++++ linux.dev/drivers/mtd/Kconfig 2007-02-19 23:00:53.739457000 +0100
+@@ -49,6 +49,11 @@
+ devices. Partitioning on NFTL 'devices' is a different - that's the
+ 'normal' form of partitioning used on a block device.
+
++config MTD_SPLIT_ROOTFS
++ bool "Automatically split rootfs partition for squashfs"
++ depends on MTD_PARTITIONS
++ default y
++
+ config MTD_REDBOOT_PARTS
+ tristate "RedBoot partition table parsing"
+ depends on MTD_PARTITIONS
+diff -ur linux.old/drivers/mtd/mtdpart.c linux.dev/drivers/mtd/mtdpart.c
+--- linux.old/drivers/mtd/mtdpart.c 2007-01-10 20:10:37.000000000 +0100
++++ linux.dev/drivers/mtd/mtdpart.c 2007-02-20 00:01:38.587355896 +0100
+@@ -20,6 +20,8 @@
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/mtd/compatmac.h>
++#include <linux/squashfs_fs.h>
++#include <linux/root_dev.h>
+
+ /* Our partition linked list */
+ static LIST_HEAD(mtd_partitions);
+@@ -303,6 +305,173 @@
+ return 0;
+ }
+
++static u_int32_t cur_offset = 0;
++static int add_mtd_partition(struct mtd_info *master, const struct mtd_partition *part, int i)
++{
++ struct mtd_part *slave;
++
++ /* allocate the partition structure */
++ slave = kmalloc (sizeof(*slave), GFP_KERNEL);
++ if (!slave) {
++ printk ("memory allocation error while creating partitions for \"%s\"\n",
++ master->name);
++ del_mtd_partitions(master);
++ return -ENOMEM;
++ }
++ memset(slave, 0, sizeof(*slave));
++ list_add(&slave->list, &mtd_partitions);
++
++ /* set up the MTD object for this partition */
++ slave->mtd.type = master->type;
++ slave->mtd.flags = master->flags & ~part->mask_flags;
++ slave->mtd.size = part->size;
++ slave->mtd.writesize = master->writesize;
++ slave->mtd.oobsize = master->oobsize;
++ slave->mtd.ecctype = master->ecctype;
++ slave->mtd.eccsize = master->eccsize;
++
++ slave->mtd.name = part->name;
++ slave->mtd.bank_size = master->bank_size;
++ slave->mtd.owner = master->owner;
++
++ slave->mtd.read = part_read;
++ slave->mtd.write = part_write;
++
++ if(master->point && master->unpoint){
++ slave->mtd.point = part_point;
++ slave->mtd.unpoint = part_unpoint;
++ }
++
++ if (master->read_oob)
++ slave->mtd.read_oob = part_read_oob;
++ if (master->write_oob)
++ slave->mtd.write_oob = part_write_oob;
++ if(master->read_user_prot_reg)
++ slave->mtd.read_user_prot_reg = part_read_user_prot_reg;
++ if(master->read_fact_prot_reg)
++ slave->mtd.read_fact_prot_reg = part_read_fact_prot_reg;
++ if(master->write_user_prot_reg)
++ slave->mtd.write_user_prot_reg = part_write_user_prot_reg;
++ if(master->lock_user_prot_reg)
++ slave->mtd.lock_user_prot_reg = part_lock_user_prot_reg;
++ if(master->get_user_prot_info)
++ slave->mtd.get_user_prot_info = part_get_user_prot_info;
++ if(master->get_fact_prot_info)
++ slave->mtd.get_fact_prot_info = part_get_fact_prot_info;
++ if (master->sync)
++ slave->mtd.sync = part_sync;
++ if (!i && master->suspend && master->resume) {
++ slave->mtd.suspend = part_suspend;
++ slave->mtd.resume = part_resume;
++ }
++ if (master->writev)
++ slave->mtd.writev = part_writev;
++ if (master->lock)
++ slave->mtd.lock = part_lock;
++ if (master->unlock)
++ slave->mtd.unlock = part_unlock;
++ if (master->block_isbad)
++ slave->mtd.block_isbad = part_block_isbad;
++ if (master->block_markbad)
++ slave->mtd.block_markbad = part_block_markbad;
++ slave->mtd.erase = part_erase;
++ slave->master = master;
++ slave->offset = part->offset;
++ slave->index = i;
++
++ if (slave->offset == MTDPART_OFS_APPEND)
++ slave->offset = cur_offset;
++ if (slave->offset == MTDPART_OFS_NXTBLK) {
++ slave->offset = cur_offset;
++ if ((cur_offset % master->erasesize) != 0) {
++ /* Round up to next erasesize */
++ slave->offset = ((cur_offset / master->erasesize) + 1) * master->erasesize;
++ printk(KERN_NOTICE "Moving partition %d: "
++ "0x%08x -> 0x%08x\n", i,
++ cur_offset, slave->offset);
++ }
++ }
++ if (slave->mtd.size == MTDPART_SIZ_FULL)
++ slave->mtd.size = master->size - slave->offset;
++ cur_offset = slave->offset + slave->mtd.size;
++
++ printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset,
++ slave->offset + slave->mtd.size, slave->mtd.name);
++
++ /* let's do some sanity checks */
++ if (slave->offset >= master->size) {
++ /* let's register it anyway to preserve ordering */
++ slave->offset = 0;
++ slave->mtd.size = 0;
++ printk ("mtd: partition \"%s\" is out of reach -- disabled\n",
++ part->name);
++ }
++ if (slave->offset + slave->mtd.size > master->size) {
++ slave->mtd.size = master->size - slave->offset;
++ printk ("mtd: partition \"%s\" extends beyond the end of device \"%s\" -- size truncated to %#x\n",
++ part->name, master->name, slave->mtd.size);
++ }
++ if (master->numeraseregions>1) {
++ /* Deal with variable erase size stuff */
++ int i;
++ struct mtd_erase_region_info *regions = master->eraseregions;
++
++ /* Find the first erase regions which is part of this partition. */
++ for (i=0; i < master->numeraseregions && slave->offset >= regions[i].offset; i++)
++ ;
++
++ for (i--; i < master->numeraseregions && slave->offset + slave->mtd.size > regions[i].offset; i++) {
++ if (slave->mtd.erasesize < regions[i].erasesize) {
++ slave->mtd.erasesize = regions[i].erasesize;
++ }
++ }
++ } else {
++ /* Single erase size */
++ slave->mtd.erasesize = master->erasesize;
++ }
++
++ if ((slave->mtd.flags & MTD_WRITEABLE) &&
++ (slave->offset % slave->mtd.erasesize)) {
++ /* Doesn't start on a boundary of major erase size */
++ /* FIXME: Let it be writable if it is on a boundary of _minor_ erase size though */
++ slave->mtd.flags &= ~MTD_WRITEABLE;
++ printk ("mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
++ part->name);
++ }
++ if ((slave->mtd.flags & MTD_WRITEABLE) &&
++ (slave->mtd.size % slave->mtd.erasesize)) {
++ slave->mtd.flags &= ~MTD_WRITEABLE;
++ printk ("mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
++ part->name);
++ }
++
++ slave->mtd.ecclayout = master->ecclayout;
++ if (master->block_isbad) {
++ uint32_t offs = 0;
++
++ while(offs < slave->mtd.size) {
++ if (master->block_isbad(master,
++ offs + slave->offset))
++ slave->mtd.ecc_stats.badblocks++;
++ offs += slave->mtd.erasesize;
++ }
++ }
++
++ if(part->mtdp)
++ { /* store the object pointer (caller may or may not register it */
++ *part->mtdp = &slave->mtd;
++ slave->registered = 0;
++ }
++ else
++ {
++ /* register our partition */
++ add_mtd_device(&slave->mtd);
++ slave->registered = 1;
++ }
++
++ return 0;
++}
++
+ /*
+ * This function, given a master MTD object and a partition table, creates
+ * and registers slave MTD objects which are bound to the master according to
+@@ -314,171 +483,53 @@
+ const struct mtd_partition *parts,
+ int nbparts)
+ {
+- struct mtd_part *slave;
+- u_int32_t cur_offset = 0;
+- int i;
++ struct mtd_partition *part;
++ int i, ret = 0;
+
+ printk (KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
+
+ for (i = 0; i < nbparts; i++) {
++ part = (struct mtd_partition *) &parts[i];
++ ret = add_mtd_partition(master, part, i);
++ if (ret)
++ return ret;
++ if (strcmp(part->name, "rootfs") == 0) {
++#ifdef CONFIG_MTD_SPLIT_ROOTFS
++ int len;
++ char buf[512];
++ struct squashfs_super_block *sb = (struct squashfs_super_block *) buf;
++#define ROOTFS_SPLIT_NAME "rootfs_data"
++ if ((master->read(master, part->offset, sizeof(struct squashfs_super_block), &len, buf) == 0) &&
++ (len == sizeof(struct squashfs_super_block)) &&
++ (*((u32 *) buf) == SQUASHFS_MAGIC) &&
++ (sb->bytes_used > 0)) {
++
++
++ part = kmalloc(sizeof(struct mtd_partition), GFP_KERNEL);
++ memcpy(part, &parts[i], sizeof(struct mtd_partition));
++
++ part->name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
++ strcpy(part->name, ROOTFS_SPLIT_NAME);
++
++ len = (u32) sb->bytes_used;
++ len += (part->offset & 0x000fffff);
++ len += (master->erasesize - 1);
++ len &= ~(master->erasesize - 1);
++ len -= (part->offset & 0x000fffff);
++ part->offset += len;
++ part->size -= len;
++
++ if (master->erasesize <= part->size)
++ ret = add_mtd_partition(master, part, i + 1);
++ else
++ kfree(part->name);
++ if (ret)
++ return ret;
+
+- /* allocate the partition structure */
+- slave = kmalloc (sizeof(*slave), GFP_KERNEL);
+- if (!slave) {
+- printk ("memory allocation error while creating partitions for \"%s\"\n",
+- master->name);
+- del_mtd_partitions(master);
+- return -ENOMEM;
+- }
+- memset(slave, 0, sizeof(*slave));
+- list_add(&slave->list, &mtd_partitions);
+-
+- /* set up the MTD object for this partition */
+- slave->mtd.type = master->type;
+- slave->mtd.flags = master->flags & ~parts[i].mask_flags;
+- slave->mtd.size = parts[i].size;
+- slave->mtd.writesize = master->writesize;
+- slave->mtd.oobsize = master->oobsize;
+- slave->mtd.ecctype = master->ecctype;
+- slave->mtd.eccsize = master->eccsize;
+-
+- slave->mtd.name = parts[i].name;
+- slave->mtd.bank_size = master->bank_size;
+- slave->mtd.owner = master->owner;
+-
+- slave->mtd.read = part_read;
+- slave->mtd.write = part_write;
+-
+- if(master->point && master->unpoint){
+- slave->mtd.point = part_point;
+- slave->mtd.unpoint = part_unpoint;
+- }
+-
+- if (master->read_oob)
+- slave->mtd.read_oob = part_read_oob;
+- if (master->write_oob)
+- slave->mtd.write_oob = part_write_oob;
+- if(master->read_user_prot_reg)
+- slave->mtd.read_user_prot_reg = part_read_user_prot_reg;
+- if(master->read_fact_prot_reg)
+- slave->mtd.read_fact_prot_reg = part_read_fact_prot_reg;
+- if(master->write_user_prot_reg)
+- slave->mtd.write_user_prot_reg = part_write_user_prot_reg;
+- if(master->lock_user_prot_reg)
+- slave->mtd.lock_user_prot_reg = part_lock_user_prot_reg;
+- if(master->get_user_prot_info)
+- slave->mtd.get_user_prot_info = part_get_user_prot_info;
+- if(master->get_fact_prot_info)
+- slave->mtd.get_fact_prot_info = part_get_fact_prot_info;
+- if (master->sync)
+- slave->mtd.sync = part_sync;
+- if (!i && master->suspend && master->resume) {
+- slave->mtd.suspend = part_suspend;
+- slave->mtd.resume = part_resume;
+- }
+- if (master->writev)
+- slave->mtd.writev = part_writev;
+- if (master->lock)
+- slave->mtd.lock = part_lock;
+- if (master->unlock)
+- slave->mtd.unlock = part_unlock;
+- if (master->block_isbad)
+- slave->mtd.block_isbad = part_block_isbad;
+- if (master->block_markbad)
+- slave->mtd.block_markbad = part_block_markbad;
+- slave->mtd.erase = part_erase;
+- slave->master = master;
+- slave->offset = parts[i].offset;
+- slave->index = i;
+-
+- if (slave->offset == MTDPART_OFS_APPEND)
+- slave->offset = cur_offset;
+- if (slave->offset == MTDPART_OFS_NXTBLK) {
+- slave->offset = cur_offset;
+- if ((cur_offset % master->erasesize) != 0) {
+- /* Round up to next erasesize */
+- slave->offset = ((cur_offset / master->erasesize) + 1) * master->erasesize;
+- printk(KERN_NOTICE "Moving partition %d: "
+- "0x%08x -> 0x%08x\n", i,
+- cur_offset, slave->offset);
++ kfree(part);
+ }
+- }
+- if (slave->mtd.size == MTDPART_SIZ_FULL)
+- slave->mtd.size = master->size - slave->offset;
+- cur_offset = slave->offset + slave->mtd.size;
+-
+- printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset,
+- slave->offset + slave->mtd.size, slave->mtd.name);
+-
+- /* let's do some sanity checks */
+- if (slave->offset >= master->size) {
+- /* let's register it anyway to preserve ordering */
+- slave->offset = 0;
+- slave->mtd.size = 0;
+- printk ("mtd: partition \"%s\" is out of reach -- disabled\n",
+- parts[i].name);
+- }
+- if (slave->offset + slave->mtd.size > master->size) {
+- slave->mtd.size = master->size - slave->offset;
+- printk ("mtd: partition \"%s\" extends beyond the end of device \"%s\" -- size truncated to %#x\n",
+- parts[i].name, master->name, slave->mtd.size);
+- }
+- if (master->numeraseregions>1) {
+- /* Deal with variable erase size stuff */
+- int i;
+- struct mtd_erase_region_info *regions = master->eraseregions;
+-
+- /* Find the first erase regions which is part of this partition. */
+- for (i=0; i < master->numeraseregions && slave->offset >= regions[i].offset; i++)
+- ;
+-
+- for (i--; i < master->numeraseregions && slave->offset + slave->mtd.size > regions[i].offset; i++) {
+- if (slave->mtd.erasesize < regions[i].erasesize) {
+- slave->mtd.erasesize = regions[i].erasesize;
+- }
+- }
+- } else {
+- /* Single erase size */
+- slave->mtd.erasesize = master->erasesize;
+- }
+-
+- if ((slave->mtd.flags & MTD_WRITEABLE) &&
+- (slave->offset % slave->mtd.erasesize)) {
+- /* Doesn't start on a boundary of major erase size */
+- /* FIXME: Let it be writable if it is on a boundary of _minor_ erase size though */
+- slave->mtd.flags &= ~MTD_WRITEABLE;
+- printk ("mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
+- parts[i].name);
+- }
+- if ((slave->mtd.flags & MTD_WRITEABLE) &&
+- (slave->mtd.size % slave->mtd.erasesize)) {
+- slave->mtd.flags &= ~MTD_WRITEABLE;
+- printk ("mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
+- parts[i].name);
+- }
+-
+- slave->mtd.ecclayout = master->ecclayout;
+- if (master->block_isbad) {
+- uint32_t offs = 0;
+-
+- while(offs < slave->mtd.size) {
+- if (master->block_isbad(master,
+- offs + slave->offset))
+- slave->mtd.ecc_stats.badblocks++;
+- offs += slave->mtd.erasesize;
+- }
+- }
+-
+- if(parts[i].mtdp)
+- { /* store the object pointer (caller may or may not register it */
+- *parts[i].mtdp = &slave->mtd;
+- slave->registered = 0;
+- }
+- else
+- {
+- /* register our partition */
+- add_mtd_device(&slave->mtd);
+- slave->registered = 1;
++#endif /* CONFIG_MTD_SPLIT_ROOTFS */
++ ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, i);
+ }
+ }
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/065-block2mtd_init.patch b/packages/linux/linux-magicbox-2.6.19.2/065-block2mtd_init.patch
new file mode 100644
index 0000000000..ef483bedd1
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/065-block2mtd_init.patch
@@ -0,0 +1,112 @@
+--- linux.old/drivers/mtd/devices/block2mtd.c 2007-03-02 01:00:13.866987272 +0100
++++ linux.dev/drivers/mtd/devices/block2mtd.c 2007-03-02 02:03:45.558522080 +0100
+@@ -16,6 +16,7 @@
+ #include <linux/list.h>
+ #include <linux/init.h>
+ #include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
+ #include <linux/buffer_head.h>
+ #include <linux/mutex.h>
+ #include <linux/mount.h>
+@@ -287,10 +288,11 @@
+
+
+ /* FIXME: ensure that mtd->size % erase_size == 0 */
+-static struct block2mtd_dev *add_device(char *devname, int erase_size)
++static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
+ {
+ struct block_device *bdev;
+ struct block2mtd_dev *dev;
++ struct mtd_partition *part;
+
+ if (!devname)
+ return NULL;
+@@ -330,14 +332,18 @@
+
+ /* Setup the MTD structure */
+ /* make the name contain the block device in */
+- dev->mtd.name = kmalloc(sizeof("block2mtd: ") + strlen(devname),
+- GFP_KERNEL);
++
++ if (!mtdname)
++ mtdname = devname;
++
++ dev->mtd.name = kmalloc(strlen(mtdname), GFP_KERNEL);
++
+ if (!dev->mtd.name)
+ goto devinit_err;
++
++ strcpy(dev->mtd.name, mtdname);
+
+- sprintf(dev->mtd.name, "block2mtd: %s", devname);
+-
+- dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
++ dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
+ dev->mtd.erasesize = erase_size;
+ dev->mtd.writesize = 1;
+ dev->mtd.type = MTD_RAM;
+@@ -349,15 +355,18 @@
+ dev->mtd.read = block2mtd_read;
+ dev->mtd.priv = dev;
+ dev->mtd.owner = THIS_MODULE;
+-
+- if (add_mtd_device(&dev->mtd)) {
++
++ part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
++ part->name = dev->mtd.name;
++ part->offset = 0;
++ part->size = dev->mtd.size;
++ if (add_mtd_partitions(&dev->mtd, part, 1)) {
+ /* Device didnt get added, so free the entry */
+ goto devinit_err;
+ }
+ list_add(&dev->list, &blkmtd_device_list);
+ INFO("mtd%d: [%s] erase_size = %dKiB [%d]", dev->mtd.index,
+- dev->mtd.name + strlen("blkmtd: "),
+- dev->mtd.erasesize >> 10, dev->mtd.erasesize);
++ mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
+ return dev;
+
+ devinit_err:
+@@ -430,9 +439,9 @@
+
+ static int block2mtd_setup2(const char *val)
+ {
+- char buf[80 + 12]; /* 80 for device, 12 for erase size */
++ char buf[80 + 12 + 80]; /* 80 for device, 12 for erase size, 80 for name */
+ char *str = buf;
+- char *token[2];
++ char *token[3];
+ char *name;
+ size_t erase_size = PAGE_SIZE;
+ int i, ret;
+@@ -443,7 +452,7 @@
+ strcpy(str, val);
+ kill_final_newline(str);
+
+- for (i = 0; i < 2; i++)
++ for (i = 0; i < 3; i++)
+ token[i] = strsep(&str, ",");
+
+ if (str)
+@@ -463,8 +472,10 @@
+ parse_err("illegal erase size");
+ }
+ }
++ if (token[2] && (strlen(token[2]) + 1 > 80))
++ parse_err("mtd device name too long");
+
+- add_device(name, erase_size);
++ add_device(name, erase_size, token[2]);
+
+ return 0;
+ }
+@@ -498,7 +509,7 @@
+
+
+ module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
+-MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
++MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
+
+ static int __init block2mtd_init(void)
+ {
diff --git a/packages/linux/linux-magicbox-2.6.19.2/100-cf_slot.patch b/packages/linux/linux-magicbox-2.6.19.2/100-cf_slot.patch
new file mode 100644
index 0000000000..b5e12438f2
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/100-cf_slot.patch
@@ -0,0 +1,2306 @@
+diff -purN linux.old/drivers/ide/ide.c linux.dev/drivers/ide/ide.c
+--- linux.old/drivers/ide/ide.c 2007-01-10 20:10:37.000000000 +0100
++++ linux.dev/drivers/ide/ide.c 2007-04-09 01:25:30.866800288 +0200
+@@ -1783,6 +1783,7 @@ done:
+
+ extern void pnpide_init(void);
+ extern void h8300_ide_init(void);
++extern void ide_magicbox_init(void);
+
+ /*
+ * probe_for_hwifs() finds/initializes "known" IDE interfaces
+@@ -1847,6 +1848,9 @@ static void __init probe_for_hwifs (void
+ #ifdef CONFIG_H8300
+ h8300_ide_init();
+ #endif
++#ifdef CONFIG_BLK_DEV_MAGICBOX_IDE
++ ide_magicbox_init();
++#endif
+ }
+
+ void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
+diff -purN linux.old/drivers/ide/ide.c.orig linux.dev/drivers/ide/ide.c.orig
+--- linux.old/drivers/ide/ide.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/drivers/ide/ide.c.orig 2007-01-10 20:10:37.000000000 +0100
+@@ -0,0 +1,2099 @@
++/*
++ * linux/drivers/ide/ide.c Version 7.00beta2 Mar 05 2003
++ *
++ * Copyright (C) 1994-1998 Linus Torvalds & authors (see below)
++ */
++
++/*
++ * Mostly written by Mark Lord <mlord@pobox.com>
++ * and Gadi Oxman <gadio@netvision.net.il>
++ * and Andre Hedrick <andre@linux-ide.org>
++ *
++ * See linux/MAINTAINERS for address of current maintainer.
++ *
++ * This is the multiple IDE interface driver, as evolved from hd.c.
++ * It supports up to MAX_HWIFS IDE interfaces, on one or more IRQs
++ * (usually 14 & 15).
++ * There can be up to two drives per interface, as per the ATA-2 spec.
++ *
++ * Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64
++ * Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64
++ * Tertiary: ide2, port 0x???; major=33; hde is minor=0; hdf is minor=64
++ * Quaternary: ide3, port 0x???; major=34; hdg is minor=0; hdh is minor=64
++ * ...
++ *
++ * From hd.c:
++ * |
++ * | It traverses the request-list, using interrupts to jump between functions.
++ * | As nearly all functions can be called within interrupts, we may not sleep.
++ * | Special care is recommended. Have Fun!
++ * |
++ * | modified by Drew Eckhardt to check nr of hd's from the CMOS.
++ * |
++ * | Thanks to Branko Lankester, lankeste@fwi.uva.nl, who found a bug
++ * | in the early extended-partition checks and added DM partitions.
++ * |
++ * | Early work on error handling by Mika Liljeberg (liljeber@cs.Helsinki.FI).
++ * |
++ * | IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
++ * | and general streamlining by Mark Lord (mlord@pobox.com).
++ *
++ * October, 1994 -- Complete line-by-line overhaul for linux 1.1.x, by:
++ *
++ * Mark Lord (mlord@pobox.com) (IDE Perf.Pkg)
++ * Delman Lee (delman@ieee.org) ("Mr. atdisk2")
++ * Scott Snyder (snyder@fnald0.fnal.gov) (ATAPI IDE cd-rom)
++ *
++ * This was a rewrite of just about everything from hd.c, though some original
++ * code is still sprinkled about. Think of it as a major evolution, with
++ * inspiration from lots of linux users, esp. hamish@zot.apana.org.au
++ *
++ * Version 1.0 ALPHA initial code, primary i/f working okay
++ * Version 1.3 BETA dual i/f on shared irq tested & working!
++ * Version 1.4 BETA added auto probing for irq(s)
++ * Version 1.5 BETA added ALPHA (untested) support for IDE cd-roms,
++ * ...
++ * Version 5.50 allow values as small as 20 for idebus=
++ * Version 5.51 force non io_32bit in drive_cmd_intr()
++ * change delay_10ms() to delay_50ms() to fix problems
++ * Version 5.52 fix incorrect invalidation of removable devices
++ * add "hdx=slow" command line option
++ * Version 5.60 start to modularize the driver; the disk and ATAPI
++ * drivers can be compiled as loadable modules.
++ * move IDE probe code to ide-probe.c
++ * move IDE disk code to ide-disk.c
++ * add support for generic IDE device subdrivers
++ * add m68k code from Geert Uytterhoeven
++ * probe all interfaces by default
++ * add ioctl to (re)probe an interface
++ * Version 6.00 use per device request queues
++ * attempt to optimize shared hwgroup performance
++ * add ioctl to manually adjust bandwidth algorithms
++ * add kerneld support for the probe module
++ * fix bug in ide_error()
++ * fix bug in the first ide_get_lock() call for Atari
++ * don't flush leftover data for ATAPI devices
++ * Version 6.01 clear hwgroup->active while the hwgroup sleeps
++ * support HDIO_GETGEO for floppies
++ * Version 6.02 fix ide_ack_intr() call
++ * check partition table on floppies
++ * Version 6.03 handle bad status bit sequencing in ide_wait_stat()
++ * Version 6.10 deleted old entries from this list of updates
++ * replaced triton.c with ide-dma.c generic PCI DMA
++ * added support for BIOS-enabled UltraDMA
++ * rename all "promise" things to "pdc4030"
++ * fix EZ-DRIVE handling on small disks
++ * Version 6.11 fix probe error in ide_scan_devices()
++ * fix ancient "jiffies" polling bugs
++ * mask all hwgroup interrupts on each irq entry
++ * Version 6.12 integrate ioctl and proc interfaces
++ * fix parsing of "idex=" command line parameter
++ * Version 6.13 add support for ide4/ide5 courtesy rjones@orchestream.com
++ * Version 6.14 fixed IRQ sharing among PCI devices
++ * Version 6.15 added SMP awareness to IDE drivers
++ * Version 6.16 fixed various bugs; even more SMP friendly
++ * Version 6.17 fix for newest EZ-Drive problem
++ * Version 6.18 default unpartitioned-disk translation now "BIOS LBA"
++ * Version 6.19 Re-design for a UNIFORM driver for all platforms,
++ * model based on suggestions from Russell King and
++ * Geert Uytterhoeven
++ * Promise DC4030VL now supported.
++ * add support for ide6/ide7
++ * delay_50ms() changed to ide_delay_50ms() and exported.
++ * Version 6.20 Added/Fixed Generic ATA-66 support and hwif detection.
++ * Added hdx=flash to allow for second flash disk
++ * detection w/o the hang loop.
++ * Added support for ide8/ide9
++ * Added idex=ata66 for the quirky chipsets that are
++ * ATA-66 compliant, but have yet to determine a method
++ * of verification of the 80c cable presence.
++ * Specifically Promise's PDC20262 chipset.
++ * Version 6.21 Fixing/Fixed SMP spinlock issue with insight from an old
++ * hat that clarified original low level driver design.
++ * Version 6.30 Added SMP support; fixed multmode issues. -ml
++ * Version 6.31 Debug Share INTR's and request queue streaming
++ * Native ATA-100 support
++ * Prep for Cascades Project
++ * Version 7.00alpha First named revision of ide rearrange
++ *
++ * Some additional driver compile-time options are in ./include/linux/ide.h
++ *
++ * To do, in likely order of completion:
++ * - modify kernel to obtain BIOS geometry for drives on 2nd/3rd/4th i/f
++ *
++ */
++
++#define REVISION "Revision: 7.00alpha2"
++#define VERSION "Id: ide.c 7.00a2 20020906"
++
++#undef REALLY_SLOW_IO /* most systems can safely undef this */
++
++#define _IDE_C /* Tell ide.h it's really us */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/string.h>
++#include <linux/kernel.h>
++#include <linux/timer.h>
++#include <linux/mm.h>
++#include <linux/interrupt.h>
++#include <linux/major.h>
++#include <linux/errno.h>
++#include <linux/genhd.h>
++#include <linux/blkpg.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/pci.h>
++#include <linux/delay.h>
++#include <linux/ide.h>
++#include <linux/completion.h>
++#include <linux/reboot.h>
++#include <linux/cdrom.h>
++#include <linux/seq_file.h>
++#include <linux/device.h>
++#include <linux/bitops.h>
++
++#include <asm/byteorder.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++
++
++/* default maximum number of failures */
++#define IDE_DEFAULT_MAX_FAILURES 1
++
++static const u8 ide_hwif_to_major[] = { IDE0_MAJOR, IDE1_MAJOR,
++ IDE2_MAJOR, IDE3_MAJOR,
++ IDE4_MAJOR, IDE5_MAJOR,
++ IDE6_MAJOR, IDE7_MAJOR,
++ IDE8_MAJOR, IDE9_MAJOR };
++
++static int idebus_parameter; /* holds the "idebus=" parameter */
++static int system_bus_speed; /* holds what we think is VESA/PCI bus speed */
++static int initializing; /* set while initializing built-in drivers */
++
++DECLARE_MUTEX(ide_cfg_sem);
++ __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
++
++#ifdef CONFIG_BLK_DEV_IDEPCI
++static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
++#endif
++
++#ifdef CONFIG_IDEDMA_AUTO
++int noautodma = 0;
++#else
++int noautodma = 1;
++#endif
++
++EXPORT_SYMBOL(noautodma);
++
++/*
++ * This is declared extern in ide.h, for access by other IDE modules:
++ */
++ide_hwif_t ide_hwifs[MAX_HWIFS]; /* master data repository */
++
++EXPORT_SYMBOL(ide_hwifs);
++
++/*
++ * Do not even *think* about calling this!
++ */
++static void init_hwif_data(ide_hwif_t *hwif, unsigned int index)
++{
++ unsigned int unit;
++
++ /* bulk initialize hwif & drive info with zeros */
++ memset(hwif, 0, sizeof(ide_hwif_t));
++
++ /* fill in any non-zero initial values */
++ hwif->index = index;
++ hwif->major = ide_hwif_to_major[index];
++
++ hwif->name[0] = 'i';
++ hwif->name[1] = 'd';
++ hwif->name[2] = 'e';
++ hwif->name[3] = '0' + index;
++
++ hwif->bus_state = BUSSTATE_ON;
++
++ hwif->atapi_dma = 0; /* disable all atapi dma */
++ hwif->ultra_mask = 0x80; /* disable all ultra */
++ hwif->mwdma_mask = 0x80; /* disable all mwdma */
++ hwif->swdma_mask = 0x80; /* disable all swdma */
++
++ init_completion(&hwif->gendev_rel_comp);
++
++ default_hwif_iops(hwif);
++ default_hwif_transport(hwif);
++ for (unit = 0; unit < MAX_DRIVES; ++unit) {
++ ide_drive_t *drive = &hwif->drives[unit];
++
++ drive->media = ide_disk;
++ drive->select.all = (unit<<4)|0xa0;
++ drive->hwif = hwif;
++ drive->ctl = 0x08;
++ drive->ready_stat = READY_STAT;
++ drive->bad_wstat = BAD_W_STAT;
++ drive->special.b.recalibrate = 1;
++ drive->special.b.set_geometry = 1;
++ drive->name[0] = 'h';
++ drive->name[1] = 'd';
++ drive->name[2] = 'a' + (index * MAX_DRIVES) + unit;
++ drive->max_failures = IDE_DEFAULT_MAX_FAILURES;
++ drive->using_dma = 0;
++ drive->vdma = 0;
++ INIT_LIST_HEAD(&drive->list);
++ init_completion(&drive->gendev_rel_comp);
++ }
++}
++
++static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
++{
++ hw_regs_t hw;
++
++ memset(&hw, 0, sizeof(hw_regs_t));
++
++ ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq);
++
++ memcpy(&hwif->hw, &hw, sizeof(hw));
++ memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports));
++
++ hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
++#ifdef CONFIG_BLK_DEV_HD
++ if (hwif->io_ports[IDE_DATA_OFFSET] == HD_DATA)
++ hwif->noprobe = 1; /* may be overridden by ide_setup() */
++#endif
++}
++
++extern void ide_arm_init(void);
++
++/*
++ * init_ide_data() sets reasonable default values into all fields
++ * of all instances of the hwifs and drives, but only on the first call.
++ * Subsequent calls have no effect (they don't wipe out anything).
++ *
++ * This routine is normally called at driver initialization time,
++ * but may also be called MUCH earlier during kernel "command-line"
++ * parameter processing. As such, we cannot depend on any other parts
++ * of the kernel (such as memory allocation) to be functioning yet.
++ *
++ * This is too bad, as otherwise we could dynamically allocate the
++ * ide_drive_t structs as needed, rather than always consuming memory
++ * for the max possible number (MAX_HWIFS * MAX_DRIVES) of them.
++ *
++ * FIXME: We should stuff the setup data into __init and copy the
++ * relevant hwifs/allocate them properly during boot.
++ */
++#define MAGIC_COOKIE 0x12345678
++static void __init init_ide_data (void)
++{
++ ide_hwif_t *hwif;
++ unsigned int index;
++ static unsigned long magic_cookie = MAGIC_COOKIE;
++
++ if (magic_cookie != MAGIC_COOKIE)
++ return; /* already initialized */
++ magic_cookie = 0;
++
++ /* Initialise all interface structures */
++ for (index = 0; index < MAX_HWIFS; ++index) {
++ hwif = &ide_hwifs[index];
++ init_hwif_data(hwif, index);
++ init_hwif_default(hwif, index);
++#if !defined(CONFIG_PPC32) || !defined(CONFIG_PCI)
++ hwif->irq = hwif->hw.irq =
++ ide_init_default_irq(hwif->io_ports[IDE_DATA_OFFSET]);
++#endif
++ }
++#ifdef CONFIG_IDE_ARM
++ initializing = 1;
++ ide_arm_init();
++ initializing = 0;
++#endif
++}
++
++/**
++ * ide_system_bus_speed - guess bus speed
++ *
++ * ide_system_bus_speed() returns what we think is the system VESA/PCI
++ * bus speed (in MHz). This is used for calculating interface PIO timings.
++ * The default is 40 for known PCI systems, 50 otherwise.
++ * The "idebus=xx" parameter can be used to override this value.
++ * The actual value to be used is computed/displayed the first time
++ * through. Drivers should only use this as a last resort.
++ *
++ * Returns a guessed speed in MHz.
++ */
++
++static int ide_system_bus_speed(void)
++{
++#ifdef CONFIG_PCI
++ static struct pci_device_id pci_default[] = {
++ { PCI_DEVICE(PCI_ANY_ID, PCI_ANY_ID) },
++ { }
++ };
++#else
++#define pci_default 0
++#endif /* CONFIG_PCI */
++
++ if (!system_bus_speed) {
++ if (idebus_parameter) {
++ /* user supplied value */
++ system_bus_speed = idebus_parameter;
++ } else if (pci_dev_present(pci_default)) {
++ /* safe default value for PCI */
++ system_bus_speed = 33;
++ } else {
++ /* safe default value for VESA and PCI */
++ system_bus_speed = 50;
++ }
++ printk(KERN_INFO "ide: Assuming %dMHz system bus speed "
++ "for PIO modes%s\n", system_bus_speed,
++ idebus_parameter ? "" : "; override with idebus=xx");
++ }
++ return system_bus_speed;
++}
++
++#ifdef CONFIG_PROC_FS
++struct proc_dir_entry *proc_ide_root;
++#endif
++
++static struct resource* hwif_request_region(ide_hwif_t *hwif,
++ unsigned long addr, int num)
++{
++ struct resource *res = request_region(addr, num, hwif->name);
++
++ if (!res)
++ printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX not free.\n",
++ hwif->name, addr, addr+num-1);
++ return res;
++}
++
++/**
++ * ide_hwif_request_regions - request resources for IDE
++ * @hwif: interface to use
++ *
++ * Requests all the needed resources for an interface.
++ * Right now core IDE code does this work which is deeply wrong.
++ * MMIO leaves it to the controller driver,
++ * PIO will migrate this way over time.
++ */
++
++int ide_hwif_request_regions(ide_hwif_t *hwif)
++{
++ unsigned long addr;
++ unsigned int i;
++
++ if (hwif->mmio == 2)
++ return 0;
++ BUG_ON(hwif->mmio == 1);
++ addr = hwif->io_ports[IDE_CONTROL_OFFSET];
++ if (addr && !hwif_request_region(hwif, addr, 1))
++ goto control_region_busy;
++ hwif->straight8 = 0;
++ addr = hwif->io_ports[IDE_DATA_OFFSET];
++ if ((addr | 7) == hwif->io_ports[IDE_STATUS_OFFSET]) {
++ if (!hwif_request_region(hwif, addr, 8))
++ goto data_region_busy;
++ hwif->straight8 = 1;
++ return 0;
++ }
++ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
++ addr = hwif->io_ports[i];
++ if (!hwif_request_region(hwif, addr, 1)) {
++ while (--i)
++ release_region(addr, 1);
++ goto data_region_busy;
++ }
++ }
++ return 0;
++
++data_region_busy:
++ addr = hwif->io_ports[IDE_CONTROL_OFFSET];
++ if (addr)
++ release_region(addr, 1);
++control_region_busy:
++ /* If any errors are return, we drop the hwif interface. */
++ return -EBUSY;
++}
++
++/**
++ * ide_hwif_release_regions - free IDE resources
++ *
++ * Note that we only release the standard ports,
++ * and do not even try to handle any extra ports
++ * allocated for weird IDE interface chipsets.
++ *
++ * Note also that we don't yet handle mmio resources here. More
++ * importantly our caller should be doing this so we need to
++ * restructure this as a helper function for drivers.
++ */
++
++void ide_hwif_release_regions(ide_hwif_t *hwif)
++{
++ u32 i = 0;
++
++ if (hwif->mmio == 2)
++ return;
++ if (hwif->io_ports[IDE_CONTROL_OFFSET])
++ release_region(hwif->io_ports[IDE_CONTROL_OFFSET], 1);
++ if (hwif->straight8) {
++ release_region(hwif->io_ports[IDE_DATA_OFFSET], 8);
++ return;
++ }
++ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
++ if (hwif->io_ports[i])
++ release_region(hwif->io_ports[i], 1);
++}
++
++/**
++ * ide_hwif_restore - restore hwif to template
++ * @hwif: hwif to update
++ * @tmp_hwif: template
++ *
++ * Restore hwif to a previous state by copying most settings
++ * from the template.
++ */
++
++static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
++{
++ hwif->hwgroup = tmp_hwif->hwgroup;
++
++ hwif->gendev.parent = tmp_hwif->gendev.parent;
++
++ hwif->proc = tmp_hwif->proc;
++
++ hwif->major = tmp_hwif->major;
++ hwif->straight8 = tmp_hwif->straight8;
++ hwif->bus_state = tmp_hwif->bus_state;
++
++ hwif->atapi_dma = tmp_hwif->atapi_dma;
++ hwif->ultra_mask = tmp_hwif->ultra_mask;
++ hwif->mwdma_mask = tmp_hwif->mwdma_mask;
++ hwif->swdma_mask = tmp_hwif->swdma_mask;
++
++ hwif->chipset = tmp_hwif->chipset;
++ hwif->hold = tmp_hwif->hold;
++
++#ifdef CONFIG_BLK_DEV_IDEPCI
++ hwif->pci_dev = tmp_hwif->pci_dev;
++ hwif->cds = tmp_hwif->cds;
++#endif
++
++ hwif->tuneproc = tmp_hwif->tuneproc;
++ hwif->speedproc = tmp_hwif->speedproc;
++ hwif->selectproc = tmp_hwif->selectproc;
++ hwif->reset_poll = tmp_hwif->reset_poll;
++ hwif->pre_reset = tmp_hwif->pre_reset;
++ hwif->resetproc = tmp_hwif->resetproc;
++ hwif->intrproc = tmp_hwif->intrproc;
++ hwif->maskproc = tmp_hwif->maskproc;
++ hwif->quirkproc = tmp_hwif->quirkproc;
++ hwif->busproc = tmp_hwif->busproc;
++
++ hwif->ata_input_data = tmp_hwif->ata_input_data;
++ hwif->ata_output_data = tmp_hwif->ata_output_data;
++ hwif->atapi_input_bytes = tmp_hwif->atapi_input_bytes;
++ hwif->atapi_output_bytes = tmp_hwif->atapi_output_bytes;
++
++ hwif->dma_setup = tmp_hwif->dma_setup;
++ hwif->dma_exec_cmd = tmp_hwif->dma_exec_cmd;
++ hwif->dma_start = tmp_hwif->dma_start;
++ hwif->ide_dma_end = tmp_hwif->ide_dma_end;
++ hwif->ide_dma_check = tmp_hwif->ide_dma_check;
++ hwif->ide_dma_on = tmp_hwif->ide_dma_on;
++ hwif->ide_dma_off_quietly = tmp_hwif->ide_dma_off_quietly;
++ hwif->ide_dma_test_irq = tmp_hwif->ide_dma_test_irq;
++ hwif->ide_dma_host_on = tmp_hwif->ide_dma_host_on;
++ hwif->ide_dma_host_off = tmp_hwif->ide_dma_host_off;
++ hwif->ide_dma_lostirq = tmp_hwif->ide_dma_lostirq;
++ hwif->ide_dma_timeout = tmp_hwif->ide_dma_timeout;
++
++ hwif->OUTB = tmp_hwif->OUTB;
++ hwif->OUTBSYNC = tmp_hwif->OUTBSYNC;
++ hwif->OUTW = tmp_hwif->OUTW;
++ hwif->OUTL = tmp_hwif->OUTL;
++ hwif->OUTSW = tmp_hwif->OUTSW;
++ hwif->OUTSL = tmp_hwif->OUTSL;
++
++ hwif->INB = tmp_hwif->INB;
++ hwif->INW = tmp_hwif->INW;
++ hwif->INL = tmp_hwif->INL;
++ hwif->INSW = tmp_hwif->INSW;
++ hwif->INSL = tmp_hwif->INSL;
++
++ hwif->sg_max_nents = tmp_hwif->sg_max_nents;
++
++ hwif->mmio = tmp_hwif->mmio;
++ hwif->rqsize = tmp_hwif->rqsize;
++ hwif->no_lba48 = tmp_hwif->no_lba48;
++
++#ifndef CONFIG_BLK_DEV_IDECS
++ hwif->irq = tmp_hwif->irq;
++#endif
++
++ hwif->dma_base = tmp_hwif->dma_base;
++ hwif->dma_master = tmp_hwif->dma_master;
++ hwif->dma_command = tmp_hwif->dma_command;
++ hwif->dma_vendor1 = tmp_hwif->dma_vendor1;
++ hwif->dma_status = tmp_hwif->dma_status;
++ hwif->dma_vendor3 = tmp_hwif->dma_vendor3;
++ hwif->dma_prdtable = tmp_hwif->dma_prdtable;
++
++ hwif->config_data = tmp_hwif->config_data;
++ hwif->select_data = tmp_hwif->select_data;
++ hwif->extra_base = tmp_hwif->extra_base;
++ hwif->extra_ports = tmp_hwif->extra_ports;
++ hwif->autodma = tmp_hwif->autodma;
++ hwif->udma_four = tmp_hwif->udma_four;
++ hwif->no_dsc = tmp_hwif->no_dsc;
++
++ hwif->hwif_data = tmp_hwif->hwif_data;
++}
++
++/**
++ * ide_unregister - free an IDE interface
++ * @index: index of interface (will change soon to a pointer)
++ *
++ * Perform the final unregister of an IDE interface. At the moment
++ * we don't refcount interfaces so this will also get split up.
++ *
++ * Locking:
++ * The caller must not hold the IDE locks
++ * The drive present/vanishing is not yet properly locked
++ * Take care with the callbacks. These have been split to avoid
++ * deadlocking the IDE layer. The shutdown callback is called
++ * before we take the lock and free resources. It is up to the
++ * caller to be sure there is no pending I/O here, and that
++ * the interface will not be reopened (present/vanishing locking
++ * isn't yet done BTW). After we commit to the final kill we
++ * call the cleanup callback with the ide locks held.
++ *
++ * Unregister restores the hwif structures to the default state.
++ * This is raving bonkers.
++ */
++
++void ide_unregister(unsigned int index)
++{
++ ide_drive_t *drive;
++ ide_hwif_t *hwif, *g;
++ static ide_hwif_t tmp_hwif; /* protected by ide_cfg_sem */
++ ide_hwgroup_t *hwgroup;
++ int irq_count = 0, unit;
++
++ BUG_ON(index >= MAX_HWIFS);
++
++ BUG_ON(in_interrupt());
++ BUG_ON(irqs_disabled());
++ down(&ide_cfg_sem);
++ spin_lock_irq(&ide_lock);
++ hwif = &ide_hwifs[index];
++ if (!hwif->present)
++ goto abort;
++ for (unit = 0; unit < MAX_DRIVES; ++unit) {
++ drive = &hwif->drives[unit];
++ if (!drive->present)
++ continue;
++ spin_unlock_irq(&ide_lock);
++ device_unregister(&drive->gendev);
++ wait_for_completion(&drive->gendev_rel_comp);
++ spin_lock_irq(&ide_lock);
++ }
++ hwif->present = 0;
++
++ spin_unlock_irq(&ide_lock);
++
++ destroy_proc_ide_interface(hwif);
++
++ hwgroup = hwif->hwgroup;
++ /*
++ * free the irq if we were the only hwif using it
++ */
++ g = hwgroup->hwif;
++ do {
++ if (g->irq == hwif->irq)
++ ++irq_count;
++ g = g->next;
++ } while (g != hwgroup->hwif);
++ if (irq_count == 1)
++ free_irq(hwif->irq, hwgroup);
++
++ spin_lock_irq(&ide_lock);
++ /*
++ * Note that we only release the standard ports,
++ * and do not even try to handle any extra ports
++ * allocated for weird IDE interface chipsets.
++ */
++ ide_hwif_release_regions(hwif);
++
++ /*
++ * Remove us from the hwgroup, and free
++ * the hwgroup if we were the only member
++ */
++ if (hwif->next == hwif) {
++ BUG_ON(hwgroup->hwif != hwif);
++ kfree(hwgroup);
++ } else {
++ /* There is another interface in hwgroup.
++ * Unlink us, and set hwgroup->drive and ->hwif to
++ * something sane.
++ */
++ g = hwgroup->hwif;
++ while (g->next != hwif)
++ g = g->next;
++ g->next = hwif->next;
++ if (hwgroup->hwif == hwif) {
++ /* Chose a random hwif for hwgroup->hwif.
++ * It's guaranteed that there are no drives
++ * left in the hwgroup.
++ */
++ BUG_ON(hwgroup->drive != NULL);
++ hwgroup->hwif = g;
++ }
++ BUG_ON(hwgroup->hwif == hwif);
++ }
++
++ /* More messed up locking ... */
++ spin_unlock_irq(&ide_lock);
++ device_unregister(&hwif->gendev);
++ wait_for_completion(&hwif->gendev_rel_comp);
++
++ /*
++ * Remove us from the kernel's knowledge
++ */
++ blk_unregister_region(MKDEV(hwif->major, 0), MAX_DRIVES<<PARTN_BITS);
++ kfree(hwif->sg_table);
++ unregister_blkdev(hwif->major, hwif->name);
++ spin_lock_irq(&ide_lock);
++
++ if (hwif->dma_base) {
++ (void) ide_release_dma(hwif);
++
++ hwif->dma_base = 0;
++ hwif->dma_master = 0;
++ hwif->dma_command = 0;
++ hwif->dma_vendor1 = 0;
++ hwif->dma_status = 0;
++ hwif->dma_vendor3 = 0;
++ hwif->dma_prdtable = 0;
++
++ hwif->extra_base = 0;
++ hwif->extra_ports = 0;
++ }
++
++ /* copy original settings */
++ tmp_hwif = *hwif;
++
++ /* restore hwif data to pristine status */
++ init_hwif_data(hwif, index);
++ init_hwif_default(hwif, index);
++
++ ide_hwif_restore(hwif, &tmp_hwif);
++
++abort:
++ spin_unlock_irq(&ide_lock);
++ up(&ide_cfg_sem);
++}
++
++EXPORT_SYMBOL(ide_unregister);
++
++
++/**
++ * ide_setup_ports - set up IDE interface ports
++ * @hw: register descriptions
++ * @base: base register
++ * @offsets: table of register offsets
++ * @ctrl: control register
++ * @ack_irq: IRQ ack
++ * @irq: interrupt lie
++ *
++ * Setup hw_regs_t structure described by parameters. You
++ * may set up the hw structure yourself OR use this routine to
++ * do it for you. This is basically a helper
++ *
++ */
++
++void ide_setup_ports ( hw_regs_t *hw,
++ unsigned long base, int *offsets,
++ unsigned long ctrl, unsigned long intr,
++ ide_ack_intr_t *ack_intr,
++/*
++ * ide_io_ops_t *iops,
++ */
++ int irq)
++{
++ int i;
++
++ memset(hw, 0, sizeof(hw_regs_t));
++ for (i = 0; i < IDE_NR_PORTS; i++) {
++ if (offsets[i] == -1) {
++ switch(i) {
++ case IDE_CONTROL_OFFSET:
++ hw->io_ports[i] = ctrl;
++ break;
++#if defined(CONFIG_AMIGA) || defined(CONFIG_MAC)
++ case IDE_IRQ_OFFSET:
++ hw->io_ports[i] = intr;
++ break;
++#endif /* (CONFIG_AMIGA) || (CONFIG_MAC) */
++ default:
++ hw->io_ports[i] = 0;
++ break;
++ }
++ } else {
++ hw->io_ports[i] = base + offsets[i];
++ }
++ }
++ hw->irq = irq;
++ hw->dma = NO_DMA;
++ hw->ack_intr = ack_intr;
++/*
++ * hw->iops = iops;
++ */
++}
++
++/**
++ * ide_register_hw_with_fixup - register IDE interface
++ * @hw: hardware registers
++ * @hwifp: pointer to returned hwif
++ * @fixup: fixup function
++ *
++ * Register an IDE interface, specifying exactly the registers etc.
++ * Set init=1 iff calling before probes have taken place.
++ *
++ * Returns -1 on error.
++ */
++
++int ide_register_hw_with_fixup(hw_regs_t *hw, ide_hwif_t **hwifp, void(*fixup)(ide_hwif_t *hwif))
++{
++ int index, retry = 1;
++ ide_hwif_t *hwif;
++
++ do {
++ for (index = 0; index < MAX_HWIFS; ++index) {
++ hwif = &ide_hwifs[index];
++ if (hwif->hw.io_ports[IDE_DATA_OFFSET] == hw->io_ports[IDE_DATA_OFFSET])
++ goto found;
++ }
++ for (index = 0; index < MAX_HWIFS; ++index) {
++ hwif = &ide_hwifs[index];
++ if (hwif->hold)
++ continue;
++ if ((!hwif->present && !hwif->mate && !initializing) ||
++ (!hwif->hw.io_ports[IDE_DATA_OFFSET] && initializing))
++ goto found;
++ }
++ for (index = 0; index < MAX_HWIFS; index++)
++ ide_unregister(index);
++ } while (retry--);
++ return -1;
++found:
++ if (hwif->present)
++ ide_unregister(index);
++ else if (!hwif->hold) {
++ init_hwif_data(hwif, index);
++ init_hwif_default(hwif, index);
++ }
++ if (hwif->present)
++ return -1;
++ memcpy(&hwif->hw, hw, sizeof(*hw));
++ memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
++ hwif->irq = hw->irq;
++ hwif->noprobe = 0;
++ hwif->chipset = hw->chipset;
++ hwif->gendev.parent = hw->dev;
++
++ if (!initializing) {
++ probe_hwif_init_with_fixup(hwif, fixup);
++ create_proc_ide_interfaces();
++ }
++
++ if (hwifp)
++ *hwifp = hwif;
++
++ return (initializing || hwif->present) ? index : -1;
++}
++
++EXPORT_SYMBOL(ide_register_hw_with_fixup);
++
++int ide_register_hw(hw_regs_t *hw, ide_hwif_t **hwifp)
++{
++ return ide_register_hw_with_fixup(hw, hwifp, NULL);
++}
++
++EXPORT_SYMBOL(ide_register_hw);
++
++/*
++ * Locks for IDE setting functionality
++ */
++
++DECLARE_MUTEX(ide_setting_sem);
++
++/**
++ * __ide_add_setting - add an ide setting option
++ * @drive: drive to use
++ * @name: setting name
++ * @rw: true if the function is read write
++ * @read_ioctl: function to call on read
++ * @write_ioctl: function to call on write
++ * @data_type: type of data
++ * @min: range minimum
++ * @max: range maximum
++ * @mul_factor: multiplication scale
++ * @div_factor: divison scale
++ * @data: private data field
++ * @set: setting
++ * @auto_remove: setting auto removal flag
++ *
++ * Removes the setting named from the device if it is present.
++ * The function takes the settings_lock to protect against
++ * parallel changes. This function must not be called from IRQ
++ * context. Returns 0 on success or -1 on failure.
++ *
++ * BUGS: This code is seriously over-engineered. There is also
++ * magic about how the driver specific features are setup. If
++ * a driver is attached we assume the driver settings are auto
++ * remove.
++ */
++
++static int __ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set, int auto_remove)
++{
++ ide_settings_t **p = (ide_settings_t **) &drive->settings, *setting = NULL;
++
++ down(&ide_setting_sem);
++ while ((*p) && strcmp((*p)->name, name) < 0)
++ p = &((*p)->next);
++ if ((setting = kzalloc(sizeof(*setting), GFP_KERNEL)) == NULL)
++ goto abort;
++ if ((setting->name = kmalloc(strlen(name) + 1, GFP_KERNEL)) == NULL)
++ goto abort;
++ strcpy(setting->name, name);
++ setting->rw = rw;
++ setting->read_ioctl = read_ioctl;
++ setting->write_ioctl = write_ioctl;
++ setting->data_type = data_type;
++ setting->min = min;
++ setting->max = max;
++ setting->mul_factor = mul_factor;
++ setting->div_factor = div_factor;
++ setting->data = data;
++ setting->set = set;
++
++ setting->next = *p;
++ if (auto_remove)
++ setting->auto_remove = 1;
++ *p = setting;
++ up(&ide_setting_sem);
++ return 0;
++abort:
++ up(&ide_setting_sem);
++ kfree(setting);
++ return -1;
++}
++
++int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set)
++{
++ return __ide_add_setting(drive, name, rw, read_ioctl, write_ioctl, data_type, min, max, mul_factor, div_factor, data, set, 1);
++}
++
++EXPORT_SYMBOL(ide_add_setting);
++
++/**
++ * __ide_remove_setting - remove an ide setting option
++ * @drive: drive to use
++ * @name: setting name
++ *
++ * Removes the setting named from the device if it is present.
++ * The caller must hold the setting semaphore.
++ */
++
++static void __ide_remove_setting (ide_drive_t *drive, char *name)
++{
++ ide_settings_t **p, *setting;
++
++ p = (ide_settings_t **) &drive->settings;
++
++ while ((*p) && strcmp((*p)->name, name))
++ p = &((*p)->next);
++ if ((setting = (*p)) == NULL)
++ return;
++
++ (*p) = setting->next;
++
++ kfree(setting->name);
++ kfree(setting);
++}
++
++/**
++ * ide_find_setting_by_ioctl - find a drive specific ioctl
++ * @drive: drive to scan
++ * @cmd: ioctl command to handle
++ *
++ * Scan's the device setting table for a matching entry and returns
++ * this or NULL if no entry is found. The caller must hold the
++ * setting semaphore
++ */
++
++static ide_settings_t *ide_find_setting_by_ioctl (ide_drive_t *drive, int cmd)
++{
++ ide_settings_t *setting = drive->settings;
++
++ while (setting) {
++ if (setting->read_ioctl == cmd || setting->write_ioctl == cmd)
++ break;
++ setting = setting->next;
++ }
++
++ return setting;
++}
++
++/**
++ * ide_find_setting_by_name - find a drive specific setting
++ * @drive: drive to scan
++ * @name: setting name
++ *
++ * Scan's the device setting table for a matching entry and returns
++ * this or NULL if no entry is found. The caller must hold the
++ * setting semaphore
++ */
++
++ide_settings_t *ide_find_setting_by_name (ide_drive_t *drive, char *name)
++{
++ ide_settings_t *setting = drive->settings;
++
++ while (setting) {
++ if (strcmp(setting->name, name) == 0)
++ break;
++ setting = setting->next;
++ }
++ return setting;
++}
++
++/**
++ * auto_remove_settings - remove driver specific settings
++ * @drive: drive
++ *
++ * Automatically remove all the driver specific settings for this
++ * drive. This function may sleep and must not be called from IRQ
++ * context. The caller must hold ide_setting_sem.
++ */
++
++static void auto_remove_settings (ide_drive_t *drive)
++{
++ ide_settings_t *setting;
++repeat:
++ setting = drive->settings;
++ while (setting) {
++ if (setting->auto_remove) {
++ __ide_remove_setting(drive, setting->name);
++ goto repeat;
++ }
++ setting = setting->next;
++ }
++}
++
++/**
++ * ide_read_setting - read an IDE setting
++ * @drive: drive to read from
++ * @setting: drive setting
++ *
++ * Read a drive setting and return the value. The caller
++ * must hold the ide_setting_sem when making this call.
++ *
++ * BUGS: the data return and error are the same return value
++ * so an error -EINVAL and true return of the same value cannot
++ * be told apart
++ */
++
++int ide_read_setting (ide_drive_t *drive, ide_settings_t *setting)
++{
++ int val = -EINVAL;
++ unsigned long flags;
++
++ if ((setting->rw & SETTING_READ)) {
++ spin_lock_irqsave(&ide_lock, flags);
++ switch(setting->data_type) {
++ case TYPE_BYTE:
++ val = *((u8 *) setting->data);
++ break;
++ case TYPE_SHORT:
++ val = *((u16 *) setting->data);
++ break;
++ case TYPE_INT:
++ case TYPE_INTA:
++ val = *((u32 *) setting->data);
++ break;
++ }
++ spin_unlock_irqrestore(&ide_lock, flags);
++ }
++ return val;
++}
++
++/**
++ * ide_spin_wait_hwgroup - wait for group
++ * @drive: drive in the group
++ *
++ * Wait for an IDE device group to go non busy and then return
++ * holding the ide_lock which guards the hwgroup->busy status
++ * and right to use it.
++ */
++
++int ide_spin_wait_hwgroup (ide_drive_t *drive)
++{
++ ide_hwgroup_t *hwgroup = HWGROUP(drive);
++ unsigned long timeout = jiffies + (3 * HZ);
++
++ spin_lock_irq(&ide_lock);
++
++ while (hwgroup->busy) {
++ unsigned long lflags;
++ spin_unlock_irq(&ide_lock);
++ local_irq_set(lflags);
++ if (time_after(jiffies, timeout)) {
++ local_irq_restore(lflags);
++ printk(KERN_ERR "%s: channel busy\n", drive->name);
++ return -EBUSY;
++ }
++ local_irq_restore(lflags);
++ spin_lock_irq(&ide_lock);
++ }
++ return 0;
++}
++
++EXPORT_SYMBOL(ide_spin_wait_hwgroup);
++
++/**
++ * ide_write_setting - read an IDE setting
++ * @drive: drive to read from
++ * @setting: drive setting
++ * @val: value
++ *
++ * Write a drive setting if it is possible. The caller
++ * must hold the ide_setting_sem when making this call.
++ *
++ * BUGS: the data return and error are the same return value
++ * so an error -EINVAL and true return of the same value cannot
++ * be told apart
++ *
++ * FIXME: This should be changed to enqueue a special request
++ * to the driver to change settings, and then wait on a sema for completion.
++ * The current scheme of polling is kludgy, though safe enough.
++ */
++
++int ide_write_setting (ide_drive_t *drive, ide_settings_t *setting, int val)
++{
++ int i;
++ u32 *p;
++
++ if (!capable(CAP_SYS_ADMIN))
++ return -EACCES;
++ if (!(setting->rw & SETTING_WRITE))
++ return -EPERM;
++ if (val < setting->min || val > setting->max)
++ return -EINVAL;
++ if (setting->set)
++ return setting->set(drive, val);
++ if (ide_spin_wait_hwgroup(drive))
++ return -EBUSY;
++ switch (setting->data_type) {
++ case TYPE_BYTE:
++ *((u8 *) setting->data) = val;
++ break;
++ case TYPE_SHORT:
++ *((u16 *) setting->data) = val;
++ break;
++ case TYPE_INT:
++ *((u32 *) setting->data) = val;
++ break;
++ case TYPE_INTA:
++ p = (u32 *) setting->data;
++ for (i = 0; i < 1 << PARTN_BITS; i++, p++)
++ *p = val;
++ break;
++ }
++ spin_unlock_irq(&ide_lock);
++ return 0;
++}
++
++static int set_io_32bit(ide_drive_t *drive, int arg)
++{
++ drive->io_32bit = arg;
++#ifdef CONFIG_BLK_DEV_DTC2278
++ if (HWIF(drive)->chipset == ide_dtc2278)
++ HWIF(drive)->drives[!drive->select.b.unit].io_32bit = arg;
++#endif /* CONFIG_BLK_DEV_DTC2278 */
++ return 0;
++}
++
++static int set_using_dma (ide_drive_t *drive, int arg)
++{
++#ifdef CONFIG_BLK_DEV_IDEDMA
++ if (!drive->id || !(drive->id->capability & 1))
++ return -EPERM;
++ if (HWIF(drive)->ide_dma_check == NULL)
++ return -EPERM;
++ if (arg) {
++ if (HWIF(drive)->ide_dma_check(drive)) return -EIO;
++ if (HWIF(drive)->ide_dma_on(drive)) return -EIO;
++ } else {
++ if (__ide_dma_off(drive))
++ return -EIO;
++ }
++ return 0;
++#else
++ return -EPERM;
++#endif
++}
++
++static int set_pio_mode (ide_drive_t *drive, int arg)
++{
++ struct request rq;
++
++ if (!HWIF(drive)->tuneproc)
++ return -ENOSYS;
++ if (drive->special.b.set_tune)
++ return -EBUSY;
++ ide_init_drive_cmd(&rq);
++ drive->tune_req = (u8) arg;
++ drive->special.b.set_tune = 1;
++ (void) ide_do_drive_cmd(drive, &rq, ide_wait);
++ return 0;
++}
++
++static int set_xfer_rate (ide_drive_t *drive, int arg)
++{
++ int err = ide_wait_cmd(drive,
++ WIN_SETFEATURES, (u8) arg,
++ SETFEATURES_XFER, 0, NULL);
++
++ if (!err && arg) {
++ ide_set_xfer_rate(drive, (u8) arg);
++ ide_driveid_update(drive);
++ }
++ return err;
++}
++
++/**
++ * ide_add_generic_settings - generic ide settings
++ * @drive: drive being configured
++ *
++ * Add the generic parts of the system settings to the /proc files and
++ * ioctls for this IDE device. The caller must not be holding the
++ * ide_setting_sem.
++ */
++
++void ide_add_generic_settings (ide_drive_t *drive)
++{
++/*
++ * drive setting name read/write access read ioctl write ioctl data type min max mul_factor div_factor data pointer set function
++ */
++ __ide_add_setting(drive, "io_32bit", drive->no_io_32bit ? SETTING_READ : SETTING_RW, HDIO_GET_32BIT, HDIO_SET_32BIT, TYPE_BYTE, 0, 1 + (SUPPORT_VLB_SYNC << 1), 1, 1, &drive->io_32bit, set_io_32bit, 0);
++ __ide_add_setting(drive, "keepsettings", SETTING_RW, HDIO_GET_KEEPSETTINGS, HDIO_SET_KEEPSETTINGS, TYPE_BYTE, 0, 1, 1, 1, &drive->keep_settings, NULL, 0);
++ __ide_add_setting(drive, "nice1", SETTING_RW, -1, -1, TYPE_BYTE, 0, 1, 1, 1, &drive->nice1, NULL, 0);
++ __ide_add_setting(drive, "pio_mode", SETTING_WRITE, -1, HDIO_SET_PIO_MODE, TYPE_BYTE, 0, 255, 1, 1, NULL, set_pio_mode, 0);
++ __ide_add_setting(drive, "unmaskirq", drive->no_unmask ? SETTING_READ : SETTING_RW, HDIO_GET_UNMASKINTR, HDIO_SET_UNMASKINTR, TYPE_BYTE, 0, 1, 1, 1, &drive->unmask, NULL, 0);
++ __ide_add_setting(drive, "using_dma", SETTING_RW, HDIO_GET_DMA, HDIO_SET_DMA, TYPE_BYTE, 0, 1, 1, 1, &drive->using_dma, set_using_dma, 0);
++ __ide_add_setting(drive, "init_speed", SETTING_RW, -1, -1, TYPE_BYTE, 0, 70, 1, 1, &drive->init_speed, NULL, 0);
++ __ide_add_setting(drive, "current_speed", SETTING_RW, -1, -1, TYPE_BYTE, 0, 70, 1, 1, &drive->current_speed, set_xfer_rate, 0);
++ __ide_add_setting(drive, "number", SETTING_RW, -1, -1, TYPE_BYTE, 0, 3, 1, 1, &drive->dn, NULL, 0);
++}
++
++/**
++ * system_bus_clock - clock guess
++ *
++ * External version of the bus clock guess used by very old IDE drivers
++ * for things like VLB timings. Should not be used.
++ */
++
++int system_bus_clock (void)
++{
++ return((int) ((!system_bus_speed) ? ide_system_bus_speed() : system_bus_speed ));
++}
++
++EXPORT_SYMBOL(system_bus_clock);
++
++static int generic_ide_suspend(struct device *dev, pm_message_t mesg)
++{
++ ide_drive_t *drive = dev->driver_data;
++ struct request rq;
++ struct request_pm_state rqpm;
++ ide_task_t args;
++
++ memset(&rq, 0, sizeof(rq));
++ memset(&rqpm, 0, sizeof(rqpm));
++ memset(&args, 0, sizeof(args));
++ rq.cmd_type = REQ_TYPE_PM_SUSPEND;
++ rq.special = &args;
++ rq.data = &rqpm;
++ rqpm.pm_step = ide_pm_state_start_suspend;
++ if (mesg.event == PM_EVENT_PRETHAW)
++ mesg.event = PM_EVENT_FREEZE;
++ rqpm.pm_state = mesg.event;
++
++ return ide_do_drive_cmd(drive, &rq, ide_wait);
++}
++
++static int generic_ide_resume(struct device *dev)
++{
++ ide_drive_t *drive = dev->driver_data;
++ struct request rq;
++ struct request_pm_state rqpm;
++ ide_task_t args;
++
++ memset(&rq, 0, sizeof(rq));
++ memset(&rqpm, 0, sizeof(rqpm));
++ memset(&args, 0, sizeof(args));
++ rq.cmd_type = REQ_TYPE_PM_RESUME;
++ rq.special = &args;
++ rq.data = &rqpm;
++ rqpm.pm_step = ide_pm_state_start_resume;
++ rqpm.pm_state = PM_EVENT_ON;
++
++ return ide_do_drive_cmd(drive, &rq, ide_head_wait);
++}
++
++int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
++ unsigned int cmd, unsigned long arg)
++{
++ ide_settings_t *setting;
++ ide_driver_t *drv;
++ int err = 0;
++ void __user *p = (void __user *)arg;
++
++ down(&ide_setting_sem);
++ if ((setting = ide_find_setting_by_ioctl(drive, cmd)) != NULL) {
++ if (cmd == setting->read_ioctl) {
++ err = ide_read_setting(drive, setting);
++ up(&ide_setting_sem);
++ return err >= 0 ? put_user(err, (long __user *)arg) : err;
++ } else {
++ if (bdev != bdev->bd_contains)
++ err = -EINVAL;
++ else
++ err = ide_write_setting(drive, setting, arg);
++ up(&ide_setting_sem);
++ return err;
++ }
++ }
++ up(&ide_setting_sem);
++
++ switch (cmd) {
++ case HDIO_OBSOLETE_IDENTITY:
++ case HDIO_GET_IDENTITY:
++ if (bdev != bdev->bd_contains)
++ return -EINVAL;
++ if (drive->id_read == 0)
++ return -ENOMSG;
++ if (copy_to_user(p, drive->id, (cmd == HDIO_GET_IDENTITY) ? sizeof(*drive->id) : 142))
++ return -EFAULT;
++ return 0;
++
++ case HDIO_GET_NICE:
++ return put_user(drive->dsc_overlap << IDE_NICE_DSC_OVERLAP |
++ drive->atapi_overlap << IDE_NICE_ATAPI_OVERLAP |
++ drive->nice0 << IDE_NICE_0 |
++ drive->nice1 << IDE_NICE_1 |
++ drive->nice2 << IDE_NICE_2,
++ (long __user *) arg);
++
++#ifdef CONFIG_IDE_TASK_IOCTL
++ case HDIO_DRIVE_TASKFILE:
++ if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
++ return -EACCES;
++ switch(drive->media) {
++ case ide_disk:
++ return ide_taskfile_ioctl(drive, cmd, arg);
++ default:
++ return -ENOMSG;
++ }
++#endif /* CONFIG_IDE_TASK_IOCTL */
++
++ case HDIO_DRIVE_CMD:
++ if (!capable(CAP_SYS_RAWIO))
++ return -EACCES;
++ return ide_cmd_ioctl(drive, cmd, arg);
++
++ case HDIO_DRIVE_TASK:
++ if (!capable(CAP_SYS_RAWIO))
++ return -EACCES;
++ return ide_task_ioctl(drive, cmd, arg);
++
++ case HDIO_SCAN_HWIF:
++ {
++ hw_regs_t hw;
++ int args[3];
++ if (!capable(CAP_SYS_RAWIO)) return -EACCES;
++ if (copy_from_user(args, p, 3 * sizeof(int)))
++ return -EFAULT;
++ memset(&hw, 0, sizeof(hw));
++ ide_init_hwif_ports(&hw, (unsigned long) args[0],
++ (unsigned long) args[1], NULL);
++ hw.irq = args[2];
++ if (ide_register_hw(&hw, NULL) == -1)
++ return -EIO;
++ return 0;
++ }
++ case HDIO_UNREGISTER_HWIF:
++ if (!capable(CAP_SYS_RAWIO)) return -EACCES;
++ /* (arg > MAX_HWIFS) checked in function */
++ ide_unregister(arg);
++ return 0;
++ case HDIO_SET_NICE:
++ if (!capable(CAP_SYS_ADMIN)) return -EACCES;
++ if (arg != (arg & ((1 << IDE_NICE_DSC_OVERLAP) | (1 << IDE_NICE_1))))
++ return -EPERM;
++ drive->dsc_overlap = (arg >> IDE_NICE_DSC_OVERLAP) & 1;
++ drv = *(ide_driver_t **)bdev->bd_disk->private_data;
++ if (drive->dsc_overlap && !drv->supports_dsc_overlap) {
++ drive->dsc_overlap = 0;
++ return -EPERM;
++ }
++ drive->nice1 = (arg >> IDE_NICE_1) & 1;
++ return 0;
++ case HDIO_DRIVE_RESET:
++ {
++ unsigned long flags;
++ if (!capable(CAP_SYS_ADMIN)) return -EACCES;
++
++ /*
++ * Abort the current command on the
++ * group if there is one, taking
++ * care not to allow anything else
++ * to be queued and to die on the
++ * spot if we miss one somehow
++ */
++
++ spin_lock_irqsave(&ide_lock, flags);
++
++ if (HWGROUP(drive)->resetting) {
++ spin_unlock_irqrestore(&ide_lock, flags);
++ return -EBUSY;
++ }
++
++ ide_abort(drive, "drive reset");
++
++ BUG_ON(HWGROUP(drive)->handler);
++
++ /* Ensure nothing gets queued after we
++ drop the lock. Reset will clear the busy */
++
++ HWGROUP(drive)->busy = 1;
++ spin_unlock_irqrestore(&ide_lock, flags);
++ (void) ide_do_reset(drive);
++
++ return 0;
++ }
++
++ case CDROMEJECT:
++ case CDROMCLOSETRAY:
++ return scsi_cmd_ioctl(file, bdev->bd_disk, cmd, p);
++
++ case HDIO_GET_BUSSTATE:
++ if (!capable(CAP_SYS_ADMIN))
++ return -EACCES;
++ if (put_user(HWIF(drive)->bus_state, (long __user *)arg))
++ return -EFAULT;
++ return 0;
++
++ case HDIO_SET_BUSSTATE:
++ if (!capable(CAP_SYS_ADMIN))
++ return -EACCES;
++ if (HWIF(drive)->busproc)
++ return HWIF(drive)->busproc(drive, (int)arg);
++ return -EOPNOTSUPP;
++ default:
++ return -EINVAL;
++ }
++}
++
++EXPORT_SYMBOL(generic_ide_ioctl);
++
++/*
++ * stridx() returns the offset of c within s,
++ * or -1 if c is '\0' or not found within s.
++ */
++static int __init stridx (const char *s, char c)
++{
++ char *i = strchr(s, c);
++ return (i && c) ? i - s : -1;
++}
++
++/*
++ * match_parm() does parsing for ide_setup():
++ *
++ * 1. the first char of s must be '='.
++ * 2. if the remainder matches one of the supplied keywords,
++ * the index (1 based) of the keyword is negated and returned.
++ * 3. if the remainder is a series of no more than max_vals numbers
++ * separated by commas, the numbers are saved in vals[] and a
++ * count of how many were saved is returned. Base10 is assumed,
++ * and base16 is allowed when prefixed with "0x".
++ * 4. otherwise, zero is returned.
++ */
++static int __init match_parm (char *s, const char *keywords[], int vals[], int max_vals)
++{
++ static const char *decimal = "0123456789";
++ static const char *hex = "0123456789abcdef";
++ int i, n;
++
++ if (*s++ == '=') {
++ /*
++ * Try matching against the supplied keywords,
++ * and return -(index+1) if we match one
++ */
++ if (keywords != NULL) {
++ for (i = 0; *keywords != NULL; ++i) {
++ if (!strcmp(s, *keywords++))
++ return -(i+1);
++ }
++ }
++ /*
++ * Look for a series of no more than "max_vals"
++ * numeric values separated by commas, in base10,
++ * or base16 when prefixed with "0x".
++ * Return a count of how many were found.
++ */
++ for (n = 0; (i = stridx(decimal, *s)) >= 0;) {
++ vals[n] = i;
++ while ((i = stridx(decimal, *++s)) >= 0)
++ vals[n] = (vals[n] * 10) + i;
++ if (*s == 'x' && !vals[n]) {
++ while ((i = stridx(hex, *++s)) >= 0)
++ vals[n] = (vals[n] * 0x10) + i;
++ }
++ if (++n == max_vals)
++ break;
++ if (*s == ',' || *s == ';')
++ ++s;
++ }
++ if (!*s)
++ return n;
++ }
++ return 0; /* zero = nothing matched */
++}
++
++#ifdef CONFIG_BLK_DEV_ALI14XX
++static int __initdata probe_ali14xx;
++extern int ali14xx_init(void);
++#endif
++#ifdef CONFIG_BLK_DEV_UMC8672
++static int __initdata probe_umc8672;
++extern int umc8672_init(void);
++#endif
++#ifdef CONFIG_BLK_DEV_DTC2278
++static int __initdata probe_dtc2278;
++extern int dtc2278_init(void);
++#endif
++#ifdef CONFIG_BLK_DEV_HT6560B
++static int __initdata probe_ht6560b;
++extern int ht6560b_init(void);
++#endif
++#ifdef CONFIG_BLK_DEV_QD65XX
++static int __initdata probe_qd65xx;
++extern int qd65xx_init(void);
++#endif
++
++static int __initdata is_chipset_set[MAX_HWIFS];
++
++/*
++ * ide_setup() gets called VERY EARLY during initialization,
++ * to handle kernel "command line" strings beginning with "hdx=" or "ide".
++ *
++ * Remember to update Documentation/ide.txt if you change something here.
++ */
++static int __init ide_setup(char *s)
++{
++ int i, vals[3];
++ ide_hwif_t *hwif;
++ ide_drive_t *drive;
++ unsigned int hw, unit;
++ const char max_drive = 'a' + ((MAX_HWIFS * MAX_DRIVES) - 1);
++ const char max_hwif = '0' + (MAX_HWIFS - 1);
++
++
++ if (strncmp(s,"hd",2) == 0 && s[2] == '=') /* hd= is for hd.c */
++ return 0; /* driver and not us */
++
++ if (strncmp(s,"ide",3) && strncmp(s,"idebus",6) && strncmp(s,"hd",2))
++ return 0;
++
++ printk(KERN_INFO "ide_setup: %s", s);
++ init_ide_data ();
++
++#ifdef CONFIG_BLK_DEV_IDEDOUBLER
++ if (!strcmp(s, "ide=doubler")) {
++ extern int ide_doubler;
++
++ printk(" : Enabled support for IDE doublers\n");
++ ide_doubler = 1;
++ return 1;
++ }
++#endif /* CONFIG_BLK_DEV_IDEDOUBLER */
++
++ if (!strcmp(s, "ide=nodma")) {
++ printk(" : Prevented DMA\n");
++ noautodma = 1;
++ return 1;
++ }
++
++#ifdef CONFIG_BLK_DEV_IDEPCI
++ if (!strcmp(s, "ide=reverse")) {
++ ide_scan_direction = 1;
++ printk(" : Enabled support for IDE inverse scan order.\n");
++ return 1;
++ }
++#endif /* CONFIG_BLK_DEV_IDEPCI */
++
++ /*
++ * Look for drive options: "hdx="
++ */
++ if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
++ const char *hd_words[] = {
++ "none", "noprobe", "nowerr", "cdrom", "serialize",
++ "autotune", "noautotune", "minus8", "swapdata", "bswap",
++ "noflush", "remap", "remap63", "scsi", NULL };
++ unit = s[2] - 'a';
++ hw = unit / MAX_DRIVES;
++ unit = unit % MAX_DRIVES;
++ hwif = &ide_hwifs[hw];
++ drive = &hwif->drives[unit];
++ if (strncmp(s + 4, "ide-", 4) == 0) {
++ strlcpy(drive->driver_req, s + 4, sizeof(drive->driver_req));
++ goto done;
++ }
++ switch (match_parm(&s[3], hd_words, vals, 3)) {
++ case -1: /* "none" */
++ case -2: /* "noprobe" */
++ drive->noprobe = 1;
++ goto done;
++ case -3: /* "nowerr" */
++ drive->bad_wstat = BAD_R_STAT;
++ hwif->noprobe = 0;
++ goto done;
++ case -4: /* "cdrom" */
++ drive->present = 1;
++ drive->media = ide_cdrom;
++ /* an ATAPI device ignores DRDY */
++ drive->ready_stat = 0;
++ hwif->noprobe = 0;
++ goto done;
++ case -5: /* "serialize" */
++ printk(" -- USE \"ide%d=serialize\" INSTEAD", hw);
++ goto do_serialize;
++ case -6: /* "autotune" */
++ drive->autotune = IDE_TUNE_AUTO;
++ goto obsolete_option;
++ case -7: /* "noautotune" */
++ drive->autotune = IDE_TUNE_NOAUTO;
++ goto obsolete_option;
++ case -9: /* "swapdata" */
++ case -10: /* "bswap" */
++ drive->bswap = 1;
++ goto done;
++ case -11: /* noflush */
++ drive->noflush = 1;
++ goto done;
++ case -12: /* "remap" */
++ drive->remap_0_to_1 = 1;
++ goto done;
++ case -13: /* "remap63" */
++ drive->sect0 = 63;
++ goto done;
++ case -14: /* "scsi" */
++ drive->scsi = 1;
++ goto done;
++ case 3: /* cyl,head,sect */
++ drive->media = ide_disk;
++ drive->ready_stat = READY_STAT;
++ drive->cyl = drive->bios_cyl = vals[0];
++ drive->head = drive->bios_head = vals[1];
++ drive->sect = drive->bios_sect = vals[2];
++ drive->present = 1;
++ drive->forced_geom = 1;
++ hwif->noprobe = 0;
++ goto done;
++ default:
++ goto bad_option;
++ }
++ }
++
++ if (s[0] != 'i' || s[1] != 'd' || s[2] != 'e')
++ goto bad_option;
++ /*
++ * Look for bus speed option: "idebus="
++ */
++ if (s[3] == 'b' && s[4] == 'u' && s[5] == 's') {
++ if (match_parm(&s[6], NULL, vals, 1) != 1)
++ goto bad_option;
++ if (vals[0] >= 20 && vals[0] <= 66) {
++ idebus_parameter = vals[0];
++ } else
++ printk(" -- BAD BUS SPEED! Expected value from 20 to 66");
++ goto done;
++ }
++ /*
++ * Look for interface options: "idex="
++ */
++ if (s[3] >= '0' && s[3] <= max_hwif) {
++ /*
++ * Be VERY CAREFUL changing this: note hardcoded indexes below
++ * (-8, -9, -10) are reserved to ease the hardcoding.
++ */
++ static const char *ide_words[] = {
++ "noprobe", "serialize", "autotune", "noautotune",
++ "reset", "dma", "ata66", "minus8", "minus9",
++ "minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb",
++ "dtc2278", "umc8672", "ali14xx", NULL };
++ hw = s[3] - '0';
++ hwif = &ide_hwifs[hw];
++ i = match_parm(&s[4], ide_words, vals, 3);
++
++ /*
++ * Cryptic check to ensure chipset not already set for hwif.
++ * Note: we can't depend on hwif->chipset here.
++ */
++ if ((i >= -18 && i <= -11) || (i > 0 && i <= 3)) {
++ /* chipset already specified */
++ if (is_chipset_set[hw])
++ goto bad_option;
++ if (i > -18 && i <= -11) {
++ /* these drivers are for "ide0=" only */
++ if (hw != 0)
++ goto bad_hwif;
++ /* chipset already specified for 2nd port */
++ if (is_chipset_set[hw+1])
++ goto bad_option;
++ }
++ is_chipset_set[hw] = 1;
++ printk("\n");
++ }
++
++ switch (i) {
++#ifdef CONFIG_BLK_DEV_ALI14XX
++ case -17: /* "ali14xx" */
++ probe_ali14xx = 1;
++ goto done;
++#endif
++#ifdef CONFIG_BLK_DEV_UMC8672
++ case -16: /* "umc8672" */
++ probe_umc8672 = 1;
++ goto done;
++#endif
++#ifdef CONFIG_BLK_DEV_DTC2278
++ case -15: /* "dtc2278" */
++ probe_dtc2278 = 1;
++ goto done;
++#endif
++#ifdef CONFIG_BLK_DEV_CMD640
++ case -14: /* "cmd640_vlb" */
++ {
++ extern int cmd640_vlb; /* flag for cmd640.c */
++ cmd640_vlb = 1;
++ goto done;
++ }
++#endif
++#ifdef CONFIG_BLK_DEV_HT6560B
++ case -13: /* "ht6560b" */
++ probe_ht6560b = 1;
++ goto done;
++#endif
++#ifdef CONFIG_BLK_DEV_QD65XX
++ case -12: /* "qd65xx" */
++ probe_qd65xx = 1;
++ goto done;
++#endif
++#ifdef CONFIG_BLK_DEV_4DRIVES
++ case -11: /* "four" drives on one set of ports */
++ {
++ ide_hwif_t *mate = &ide_hwifs[hw^1];
++ mate->drives[0].select.all ^= 0x20;
++ mate->drives[1].select.all ^= 0x20;
++ hwif->chipset = mate->chipset = ide_4drives;
++ mate->irq = hwif->irq;
++ memcpy(mate->io_ports, hwif->io_ports, sizeof(hwif->io_ports));
++ goto do_serialize;
++ }
++#endif /* CONFIG_BLK_DEV_4DRIVES */
++ case -10: /* minus10 */
++ case -9: /* minus9 */
++ case -8: /* minus8 */
++ goto bad_option;
++ case -7: /* ata66 */
++#ifdef CONFIG_BLK_DEV_IDEPCI
++ hwif->udma_four = 1;
++ goto obsolete_option;
++#else
++ goto bad_hwif;
++#endif
++ case -6: /* dma */
++ hwif->autodma = 1;
++ goto obsolete_option;
++ case -5: /* "reset" */
++ hwif->reset = 1;
++ goto obsolete_option;
++ case -4: /* "noautotune" */
++ hwif->drives[0].autotune = IDE_TUNE_NOAUTO;
++ hwif->drives[1].autotune = IDE_TUNE_NOAUTO;
++ goto obsolete_option;
++ case -3: /* "autotune" */
++ hwif->drives[0].autotune = IDE_TUNE_AUTO;
++ hwif->drives[1].autotune = IDE_TUNE_AUTO;
++ goto obsolete_option;
++ case -2: /* "serialize" */
++ do_serialize:
++ hwif->mate = &ide_hwifs[hw^1];
++ hwif->mate->mate = hwif;
++ hwif->serialized = hwif->mate->serialized = 1;
++ goto obsolete_option;
++
++ case -1: /* "noprobe" */
++ hwif->noprobe = 1;
++ goto done;
++
++ case 1: /* base */
++ vals[1] = vals[0] + 0x206; /* default ctl */
++ case 2: /* base,ctl */
++ vals[2] = 0; /* default irq = probe for it */
++ case 3: /* base,ctl,irq */
++ hwif->hw.irq = vals[2];
++ ide_init_hwif_ports(&hwif->hw, (unsigned long) vals[0], (unsigned long) vals[1], &hwif->irq);
++ memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
++ hwif->irq = vals[2];
++ hwif->noprobe = 0;
++ hwif->chipset = ide_forced;
++ goto obsolete_option;
++
++ case 0: goto bad_option;
++ default:
++ printk(" -- SUPPORT NOT CONFIGURED IN THIS KERNEL\n");
++ return 1;
++ }
++ }
++bad_option:
++ printk(" -- BAD OPTION\n");
++ return 1;
++obsolete_option:
++ printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n");
++ return 1;
++bad_hwif:
++ printk("-- NOT SUPPORTED ON ide%d", hw);
++done:
++ printk("\n");
++ return 1;
++}
++
++extern void pnpide_init(void);
++extern void h8300_ide_init(void);
++
++/*
++ * probe_for_hwifs() finds/initializes "known" IDE interfaces
++ */
++static void __init probe_for_hwifs (void)
++{
++#ifdef CONFIG_BLK_DEV_IDEPCI
++ ide_scan_pcibus(ide_scan_direction);
++#endif /* CONFIG_BLK_DEV_IDEPCI */
++
++#ifdef CONFIG_ETRAX_IDE
++ {
++ extern void init_e100_ide(void);
++ init_e100_ide();
++ }
++#endif /* CONFIG_ETRAX_IDE */
++#ifdef CONFIG_BLK_DEV_CMD640
++ {
++ extern void ide_probe_for_cmd640x(void);
++ ide_probe_for_cmd640x();
++ }
++#endif /* CONFIG_BLK_DEV_CMD640 */
++#ifdef CONFIG_BLK_DEV_IDE_PMAC
++ {
++ extern void pmac_ide_probe(void);
++ pmac_ide_probe();
++ }
++#endif /* CONFIG_BLK_DEV_IDE_PMAC */
++#ifdef CONFIG_BLK_DEV_GAYLE
++ {
++ extern void gayle_init(void);
++ gayle_init();
++ }
++#endif /* CONFIG_BLK_DEV_GAYLE */
++#ifdef CONFIG_BLK_DEV_FALCON_IDE
++ {
++ extern void falconide_init(void);
++ falconide_init();
++ }
++#endif /* CONFIG_BLK_DEV_FALCON_IDE */
++#ifdef CONFIG_BLK_DEV_MAC_IDE
++ {
++ extern void macide_init(void);
++ macide_init();
++ }
++#endif /* CONFIG_BLK_DEV_MAC_IDE */
++#ifdef CONFIG_BLK_DEV_Q40IDE
++ {
++ extern void q40ide_init(void);
++ q40ide_init();
++ }
++#endif /* CONFIG_BLK_DEV_Q40IDE */
++#ifdef CONFIG_BLK_DEV_BUDDHA
++ {
++ extern void buddha_init(void);
++ buddha_init();
++ }
++#endif /* CONFIG_BLK_DEV_BUDDHA */
++#ifdef CONFIG_BLK_DEV_IDEPNP
++ pnpide_init();
++#endif
++#ifdef CONFIG_H8300
++ h8300_ide_init();
++#endif
++}
++
++void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
++{
++#ifdef CONFIG_PROC_FS
++ ide_add_proc_entries(drive->proc, driver->proc, drive);
++#endif
++}
++
++EXPORT_SYMBOL(ide_register_subdriver);
++
++/**
++ * ide_unregister_subdriver - disconnect drive from driver
++ * @drive: drive to unplug
++ * @driver: driver
++ *
++ * Disconnect a drive from the driver it was attached to and then
++ * clean up the various proc files and other objects attached to it.
++ *
++ * Takes ide_setting_sem and ide_lock.
++ * Caller must hold none of the locks.
++ */
++
++void ide_unregister_subdriver(ide_drive_t *drive, ide_driver_t *driver)
++{
++ unsigned long flags;
++
++ down(&ide_setting_sem);
++ spin_lock_irqsave(&ide_lock, flags);
++#ifdef CONFIG_PROC_FS
++ ide_remove_proc_entries(drive->proc, driver->proc);
++#endif
++ auto_remove_settings(drive);
++ spin_unlock_irqrestore(&ide_lock, flags);
++ up(&ide_setting_sem);
++}
++
++EXPORT_SYMBOL(ide_unregister_subdriver);
++
++/*
++ * Probe module
++ */
++
++EXPORT_SYMBOL(ide_lock);
++
++static int ide_bus_match(struct device *dev, struct device_driver *drv)
++{
++ return 1;
++}
++
++static char *media_string(ide_drive_t *drive)
++{
++ switch (drive->media) {
++ case ide_disk:
++ return "disk";
++ case ide_cdrom:
++ return "cdrom";
++ case ide_tape:
++ return "tape";
++ case ide_floppy:
++ return "floppy";
++ default:
++ return "UNKNOWN";
++ }
++}
++
++static ssize_t media_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ return sprintf(buf, "%s\n", media_string(drive));
++}
++
++static ssize_t drivename_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ return sprintf(buf, "%s\n", drive->name);
++}
++
++static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ return sprintf(buf, "ide:m-%s\n", media_string(drive));
++}
++
++static struct device_attribute ide_dev_attrs[] = {
++ __ATTR_RO(media),
++ __ATTR_RO(drivename),
++ __ATTR_RO(modalias),
++ __ATTR_NULL
++};
++
++static int ide_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ int i = 0;
++ int length = 0;
++
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
++ "MEDIA=%s", media_string(drive));
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
++ "DRIVENAME=%s", drive->name);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
++ "MODALIAS=ide:m-%s", media_string(drive));
++ envp[i] = NULL;
++ return 0;
++}
++
++static int generic_ide_probe(struct device *dev)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ ide_driver_t *drv = to_ide_driver(dev->driver);
++
++ return drv->probe ? drv->probe(drive) : -ENODEV;
++}
++
++static int generic_ide_remove(struct device *dev)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ ide_driver_t *drv = to_ide_driver(dev->driver);
++
++ if (drv->remove)
++ drv->remove(drive);
++
++ return 0;
++}
++
++static void generic_ide_shutdown(struct device *dev)
++{
++ ide_drive_t *drive = to_ide_device(dev);
++ ide_driver_t *drv = to_ide_driver(dev->driver);
++
++ if (dev->driver && drv->shutdown)
++ drv->shutdown(drive);
++}
++
++struct bus_type ide_bus_type = {
++ .name = "ide",
++ .match = ide_bus_match,
++ .uevent = ide_uevent,
++ .probe = generic_ide_probe,
++ .remove = generic_ide_remove,
++ .shutdown = generic_ide_shutdown,
++ .dev_attrs = ide_dev_attrs,
++ .suspend = generic_ide_suspend,
++ .resume = generic_ide_resume,
++};
++
++EXPORT_SYMBOL_GPL(ide_bus_type);
++
++/*
++ * This is gets invoked once during initialization, to set *everything* up
++ */
++static int __init ide_init(void)
++{
++ int ret;
++
++ printk(KERN_INFO "Uniform Multi-Platform E-IDE driver " REVISION "\n");
++ system_bus_speed = ide_system_bus_speed();
++
++ ret = bus_register(&ide_bus_type);
++ if (ret < 0) {
++ printk(KERN_WARNING "IDE: bus_register error: %d\n", ret);
++ return ret;
++ }
++
++ init_ide_data();
++
++#ifdef CONFIG_PROC_FS
++ proc_ide_root = proc_mkdir("ide", NULL);
++#endif
++
++#ifdef CONFIG_BLK_DEV_ALI14XX
++ if (probe_ali14xx)
++ (void)ali14xx_init();
++#endif
++#ifdef CONFIG_BLK_DEV_UMC8672
++ if (probe_umc8672)
++ (void)umc8672_init();
++#endif
++#ifdef CONFIG_BLK_DEV_DTC2278
++ if (probe_dtc2278)
++ (void)dtc2278_init();
++#endif
++#ifdef CONFIG_BLK_DEV_HT6560B
++ if (probe_ht6560b)
++ (void)ht6560b_init();
++#endif
++#ifdef CONFIG_BLK_DEV_QD65XX
++ if (probe_qd65xx)
++ (void)qd65xx_init();
++#endif
++
++ initializing = 1;
++ /* Probe for special PCI and other "known" interface chipsets. */
++ probe_for_hwifs();
++ initializing = 0;
++
++#ifdef CONFIG_PROC_FS
++ proc_ide_create();
++#endif
++ return 0;
++}
++
++#ifdef MODULE
++static char *options = NULL;
++module_param(options, charp, 0);
++MODULE_LICENSE("GPL");
++
++static void __init parse_options (char *line)
++{
++ char *next = line;
++
++ if (line == NULL || !*line)
++ return;
++ while ((line = next) != NULL) {
++ if ((next = strchr(line,' ')) != NULL)
++ *next++ = 0;
++ if (!ide_setup(line))
++ printk (KERN_INFO "Unknown option '%s'\n", line);
++ }
++}
++
++int __init init_module (void)
++{
++ parse_options(options);
++ return ide_init();
++}
++
++void cleanup_module (void)
++{
++ int index;
++
++ for (index = 0; index < MAX_HWIFS; ++index)
++ ide_unregister(index);
++
++#ifdef CONFIG_PROC_FS
++ proc_ide_destroy();
++#endif
++
++ bus_unregister(&ide_bus_type);
++}
++
++#else /* !MODULE */
++
++__setup("", ide_setup);
++
++module_init(ide_init);
++
++#endif /* MODULE */
+diff -purN linux.old/drivers/ide/Kconfig linux.dev/drivers/ide/Kconfig
+--- linux.old/drivers/ide/Kconfig 2007-01-10 20:10:37.000000000 +0100
++++ linux.dev/drivers/ide/Kconfig 2007-04-09 01:15:27.570515264 +0200
+@@ -925,6 +925,14 @@ config BLK_DEV_MPC8xx_IDE
+
+ If unsure, say N.
+
++config BLK_DEV_MAGICBOX_IDE
++ bool "MagicBox 2.0 CF IDE support"
++ depends on 4xx && IDE
++ help
++ This option provides support for IDE on MagicBox 2.0 boards.
++
++ If unsure, say N.
++
+ choice
+ prompt "Type of MPC8xx IDE interface"
+ depends on BLK_DEV_MPC8xx_IDE
+diff -purN linux.old/drivers/ide/Makefile linux.dev/drivers/ide/Makefile
+--- linux.old/drivers/ide/Makefile 2007-01-10 20:10:37.000000000 +0100
++++ linux.dev/drivers/ide/Makefile 2007-04-09 00:23:29.332559488 +0200
+@@ -36,6 +36,7 @@ ide-core-$(CONFIG_BLK_DEV_Q40IDE) += leg
+ # built-in only drivers from ppc/
+ ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o
+ ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += ppc/pmac.o
++ide-core-$(CONFIG_BLK_DEV_MAGICBOX_IDE) += ppc/magicbox_ide.o
+
+ # built-in only drivers from h8300/
+ ide-core-$(CONFIG_H8300) += h8300/ide-h8300.o
+diff -purN linux.old/drivers/ide/ppc/magicbox_ide.c linux.dev/drivers/ide/ppc/magicbox_ide.c
+--- linux.old/drivers/ide/ppc/magicbox_ide.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/drivers/ide/ppc/magicbox_ide.c 2007-04-09 01:25:39.119545680 +0200
+@@ -0,0 +1,149 @@
++/* Driver for MagicBox 2.0 onboard CompactFlash adapter.
++ * Written by Wojtek Kaniewski <wojtekka@toxygen.net>
++ *
++ * GNU General Public License.
++ */
++
++#include <linux/types.h>
++#include <linux/mm.h>
++#include <linux/interrupt.h>
++#include <linux/blkdev.h>
++#include <linux/hdreg.h>
++#include <linux/ide.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++
++
++#define UIC0_PR 0xc4
++#define UIC0_TR 0xc5
++#define IRQ 25
++
++static int ide_offsets[IDE_NR_PORTS] = {0, 2, 4, 6, 8, 10, 12, 14, -1, -1};
++
++static u8 magicbox_ide_inb (unsigned long port)
++{
++ return (u8) (readw((void __iomem *) port) >> 8) & 255;
++}
++
++static u16 magicbox_ide_inw (unsigned long port)
++{
++ return (u16) readw((void __iomem *) port);
++}
++
++static void magicbox_ide_insw (unsigned long port, void *addr, u32 count)
++{
++ u16 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ *ptr = readw((void __iomem *) port);
++}
++
++static u32 magicbox_ide_inl (unsigned long port)
++{
++ return (u32) readl((void __iomem *) port);
++}
++
++static void magicbox_ide_insl (unsigned long port, void *addr, u32 count)
++{
++ u32 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ *ptr = readl((void __iomem *) port);
++}
++
++static void magicbox_ide_outb (u8 value, unsigned long port)
++{
++ writew(value << 8, (void __iomem *) port);
++}
++
++static void magicbox_ide_outbsync (ide_drive_t *drive, u8 value, unsigned long port)
++{
++ writew(value << 8, (void __iomem *) port);
++}
++
++static void magicbox_ide_outw (u16 value, unsigned long port)
++{
++ writew(value, (void __iomem *) port);
++}
++
++static void magicbox_ide_outsw (unsigned long port, void *addr, u32 count)
++{
++ u16 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ writew(*ptr, (void __iomem *) port);
++}
++
++static void magicbox_ide_outl (u32 value, unsigned long port)
++{
++ writel(value, (void __iomem *) port);
++}
++
++static void magicbox_ide_outsl (unsigned long port, void *addr, u32 count)
++{
++ u32 *ptr;
++
++ for (ptr = addr; count--; ptr++)
++ writel(*ptr, (void __iomem *) port);
++}
++
++
++static void __init ide_magicbox_register(unsigned long addr,
++ unsigned long caddr, int irq)
++{
++ hw_regs_t hw;
++ ide_hwif_t *hwif;
++
++ memset(&hw, 0, sizeof(hw));
++ ide_setup_ports(&hw, addr, ide_offsets, caddr + 12, 0, NULL,irq);
++
++ if (ide_register_hw(&hw, &hwif) != -1)
++ {
++ printk(KERN_NOTICE "magicbox-ide: Registered IDE-CF driver\n");
++ hwif->mmio = 2;
++ hwif->drives[0].unmask = 1;
++ hwif->OUTB = magicbox_ide_outb;
++ hwif->OUTBSYNC = magicbox_ide_outbsync;
++ hwif->OUTW = magicbox_ide_outw;
++ hwif->OUTL = magicbox_ide_outl;
++ hwif->OUTSW = magicbox_ide_outsw;
++ hwif->OUTSL = magicbox_ide_outsl;
++ hwif->INB = magicbox_ide_inb;
++ hwif->INW = magicbox_ide_inw;
++ hwif->INL = magicbox_ide_inl;
++ hwif->INSW = magicbox_ide_insw;
++ hwif->INSL = magicbox_ide_insl;
++ }
++}
++
++void __init ide_magicbox_init(void)
++{
++ volatile u16 *addr;
++ volatile u16 *caddr;
++
++ /* Turn on PerWE instead of PCIsomething */
++ mtdcr(DCRN_CPC0_PCI_BASE, mfdcr(DCRN_CPC0_PCI_BASE) | (0x80000000L >> 27));
++
++ /* PerCS1 (CF's CS0): base 0xff100000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 1);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff11a000);
++ mtdcr(DCRN_EBC_BASE, 0x11);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++
++ /* PerCS2 (CF's CS1): base 0xff200000, 16-bit, rw */
++ mtdcr(DCRN_EBC_BASE, 2);
++ mtdcr(DCRN_EBC_BASE + 1, 0xff21a000);
++ mtdcr(DCRN_EBC_BASE, 0x12);
++ mtdcr(DCRN_EBC_BASE + 1, 0x080bd800);
++
++ /* Remap physical address space */
++ addr = ioremap_nocache(0xff100000, 4096);
++ caddr = ioremap_nocache(0xff200000, 4096);
++
++ /* Set interrupt to low-to-high-edge-triggered */
++ mtdcr(UIC0_TR, mfdcr(UIC0_TR) & ~(0x80000000L >> IRQ));
++ mtdcr(UIC0_PR, mfdcr(UIC0_PR) | (0x80000000L >> IRQ));
++
++ ide_magicbox_register((unsigned long)addr, (unsigned long)caddr, IRQ);
++}
++
diff --git a/packages/linux/linux-magicbox-2.6.19.2/100-netfilter_layer7_2.8.patch b/packages/linux/linux-magicbox-2.6.19.2/100-netfilter_layer7_2.8.patch
new file mode 100644
index 0000000000..876423cac7
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/100-netfilter_layer7_2.8.patch
@@ -0,0 +1,2053 @@
+diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h
+--- linux.old/include/linux/netfilter_ipv4/ip_conntrack.h 2007-01-01 05:17:07.000000000 +0100
++++ linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h 2007-01-01 05:18:48.000000000 +0100
+@@ -127,6 +127,15 @@
+ /* Traversed often, so hopefully in different cacheline to top */
+ /* These are my tuples; original and reply */
+ struct ip_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX];
++
++#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ struct {
++ char * app_proto; /* e.g. "http". NULL before decision. "unknown" after decision if no match */
++ char * app_data; /* application layer data so far. NULL after match decision */
++ unsigned int app_data_len;
++ } layer7;
++#endif
++
+ };
+
+ struct ip_conntrack_expect
+diff -urN linux.old/include/linux/netfilter_ipv4/ipt_layer7.h linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h
+--- linux.old/include/linux/netfilter_ipv4/ipt_layer7.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,26 @@
++/*
++ By Matthew Strait <quadong@users.sf.net>, Dec 2003.
++ http://l7-filter.sf.net
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version
++ 2 of the License, or (at your option) any later version.
++ http://www.gnu.org/licenses/gpl.txt
++*/
++
++#ifndef _IPT_LAYER7_H
++#define _IPT_LAYER7_H
++
++#define MAX_PATTERN_LEN 8192
++#define MAX_PROTOCOL_LEN 256
++
++typedef char *(*proc_ipt_search) (char *, char, char *);
++
++struct ipt_layer7_info {
++ char protocol[MAX_PROTOCOL_LEN];
++ char invert:1;
++ char pattern[MAX_PATTERN_LEN];
++};
++
++#endif /* _IPT_LAYER7_H */
+diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/netfilter/ip_conntrack_core.c
+--- linux.old/net/ipv4/netfilter/ip_conntrack_core.c 2007-01-01 05:17:07.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/ip_conntrack_core.c 2007-01-01 05:18:48.000000000 +0100
+@@ -337,6 +337,13 @@
+ * too. */
+ ip_ct_remove_expectations(ct);
+
++ #if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ if(ct->layer7.app_proto)
++ kfree(ct->layer7.app_proto);
++ if(ct->layer7.app_data)
++ kfree(ct->layer7.app_data);
++ #endif
++
+ /* We overload first tuple to link into unconfirmed list. */
+ if (!is_confirmed(ct)) {
+ BUG_ON(list_empty(&ct->tuplehash[IP_CT_DIR_ORIGINAL].list));
+diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c
+--- linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-01-01 05:17:07.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c 2007-01-01 05:18:48.000000000 +0100
+@@ -192,6 +192,12 @@
+ return -ENOSPC;
+ #endif
+
++#if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
++ if(conntrack->layer7.app_proto)
++ if (seq_printf(s, "l7proto=%s ",conntrack->layer7.app_proto))
++ return 1;
++#endif
++
+ if (seq_printf(s, "use=%u\n", atomic_read(&conntrack->ct_general.use)))
+ return -ENOSPC;
+
+diff -urN linux.old/net/ipv4/netfilter/ipt_layer7.c linux.dev/net/ipv4/netfilter/ipt_layer7.c
+--- linux.old/net/ipv4/netfilter/ipt_layer7.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/ipt_layer7.c 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,573 @@
++/*
++ Kernel module to match application layer (OSI layer 7) data in connections.
++
++ http://l7-filter.sf.net
++
++ By Matthew Strait and Ethan Sommer, 2003-2006.
++
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version
++ 2 of the License, or (at your option) any later version.
++ http://www.gnu.org/licenses/gpl.txt
++
++ Based on ipt_string.c (C) 2000 Emmanuel Roger <winfield@freegates.be>
++ and cls_layer7.c (C) 2003 Matthew Strait, Ethan Sommer, Justin Levandoski
++*/
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_conntrack.h>
++#include <linux/proc_fs.h>
++#include <linux/ctype.h>
++#include <net/ip.h>
++#include <net/tcp.h>
++#include <linux/spinlock.h>
++
++#include "regexp/regexp.c"
++
++#include <linux/netfilter_ipv4/ipt_layer7.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++
++MODULE_AUTHOR("Matthew Strait <quadong@users.sf.net>, Ethan Sommer <sommere@users.sf.net>");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("iptables application layer match module");
++MODULE_VERSION("2.0");
++
++static int maxdatalen = 2048; // this is the default
++module_param(maxdatalen, int, 0444);
++MODULE_PARM_DESC(maxdatalen, "maximum bytes of data looked at by l7-filter");
++
++#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++ #define DPRINTK(format,args...) printk(format,##args)
++#else
++ #define DPRINTK(format,args...)
++#endif
++
++#define TOTAL_PACKETS master_conntrack->counters[IP_CT_DIR_ORIGINAL].packets + \
++ master_conntrack->counters[IP_CT_DIR_REPLY].packets
++
++/* Number of packets whose data we look at.
++This can be modified through /proc/net/layer7_numpackets */
++static int num_packets = 10;
++
++static struct pattern_cache {
++ char * regex_string;
++ regexp * pattern;
++ struct pattern_cache * next;
++} * first_pattern_cache = NULL;
++
++/* I'm new to locking. Here are my assumptions:
++
++- No one will write to /proc/net/layer7_numpackets over and over very fast;
++ if they did, nothing awful would happen.
++
++- This code will never be processing the same packet twice at the same time,
++ because iptables rules are traversed in order.
++
++- It doesn't matter if two packets from different connections are in here at
++ the same time, because they don't share any data.
++
++- It _does_ matter if two packets from the same connection (or one from a
++ master and one from its child) are here at the same time. In this case,
++ we have to protect the conntracks and the list of compiled patterns.
++*/
++DEFINE_RWLOCK(ct_lock);
++DEFINE_SPINLOCK(list_lock);
++
++#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++/* Converts an unfriendly string into a friendly one by
++replacing unprintables with periods and all whitespace with " ". */
++static char * friendly_print(unsigned char * s)
++{
++ char * f = kmalloc(strlen(s) + 1, GFP_ATOMIC);
++ int i;
++
++ if(!f) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in friendly_print, bailing.\n");
++ return NULL;
++ }
++
++ for(i = 0; i < strlen(s); i++){
++ if(isprint(s[i]) && s[i] < 128) f[i] = s[i];
++ else if(isspace(s[i])) f[i] = ' ';
++ else f[i] = '.';
++ }
++ f[i] = '\0';
++ return f;
++}
++
++static char dec2hex(int i)
++{
++ switch (i) {
++ case 0 ... 9:
++ return (char)(i + '0');
++ break;
++ case 10 ... 15:
++ return (char)(i - 10 + 'a');
++ break;
++ default:
++ if (net_ratelimit())
++ printk("Problem in dec2hex\n");
++ return '\0';
++ }
++}
++
++static char * hex_print(unsigned char * s)
++{
++ char * g = kmalloc(strlen(s)*3 + 1, GFP_ATOMIC);
++ int i;
++
++ if(!g) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in hex_print, bailing.\n");
++ return NULL;
++ }
++
++ for(i = 0; i < strlen(s); i++) {
++ g[i*3 ] = dec2hex(s[i]/16);
++ g[i*3 + 1] = dec2hex(s[i]%16);
++ g[i*3 + 2] = ' ';
++ }
++ g[i*3] = '\0';
++
++ return g;
++}
++#endif // DEBUG
++
++/* Use instead of regcomp. As we expect to be seeing the same regexps over and
++over again, it make sense to cache the results. */
++static regexp * compile_and_cache(char * regex_string, char * protocol)
++{
++ struct pattern_cache * node = first_pattern_cache;
++ struct pattern_cache * last_pattern_cache = first_pattern_cache;
++ struct pattern_cache * tmp;
++ unsigned int len;
++
++ while (node != NULL) {
++ if (!strcmp(node->regex_string, regex_string))
++ return node->pattern;
++
++ last_pattern_cache = node;/* points at the last non-NULL node */
++ node = node->next;
++ }
++
++ /* If we reach the end of the list, then we have not yet cached
++ the pattern for this regex. Let's do that now.
++ Be paranoid about running out of memory to avoid list corruption. */
++ tmp = kmalloc(sizeof(struct pattern_cache), GFP_ATOMIC);
++
++ if(!tmp) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in compile_and_cache, bailing.\n");
++ return NULL;
++ }
++
++ tmp->regex_string = kmalloc(strlen(regex_string) + 1, GFP_ATOMIC);
++ tmp->pattern = kmalloc(sizeof(struct regexp), GFP_ATOMIC);
++ tmp->next = NULL;
++
++ if(!tmp->regex_string || !tmp->pattern) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in compile_and_cache, bailing.\n");
++ kfree(tmp->regex_string);
++ kfree(tmp->pattern);
++ kfree(tmp);
++ return NULL;
++ }
++
++ /* Ok. The new node is all ready now. */
++ node = tmp;
++
++ if(first_pattern_cache == NULL) /* list is empty */
++ first_pattern_cache = node; /* make node the beginning */
++ else
++ last_pattern_cache->next = node; /* attach node to the end */
++
++ /* copy the string and compile the regex */
++ len = strlen(regex_string);
++ DPRINTK("About to compile this: \"%s\"\n", regex_string);
++ node->pattern = regcomp(regex_string, &len);
++ if ( !node->pattern ) {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: Error compiling regexp \"%s\" (%s)\n", regex_string, protocol);
++ /* pattern is now cached as NULL, so we won't try again. */
++ }
++
++ strcpy(node->regex_string, regex_string);
++ return node->pattern;
++}
++
++static int can_handle(const struct sk_buff *skb)
++{
++ if(!skb->nh.iph) /* not IP */
++ return 0;
++ if(skb->nh.iph->protocol != IPPROTO_TCP &&
++ skb->nh.iph->protocol != IPPROTO_UDP &&
++ skb->nh.iph->protocol != IPPROTO_ICMP)
++ return 0;
++ return 1;
++}
++
++/* Returns offset the into the skb->data that the application data starts */
++static int app_data_offset(const struct sk_buff *skb)
++{
++ /* In case we are ported somewhere (ebtables?) where skb->nh.iph
++ isn't set, this can be gotten from 4*(skb->data[0] & 0x0f) as well. */
++ int ip_hl = 4*skb->nh.iph->ihl;
++
++ if( skb->nh.iph->protocol == IPPROTO_TCP ) {
++ /* 12 == offset into TCP header for the header length field.
++ Can't get this with skb->h.th->doff because the tcphdr
++ struct doesn't get set when routing (this is confirmed to be
++ true in Netfilter as well as QoS.) */
++ int tcp_hl = 4*(skb->data[ip_hl + 12] >> 4);
++
++ return ip_hl + tcp_hl;
++ } else if( skb->nh.iph->protocol == IPPROTO_UDP ) {
++ return ip_hl + 8; /* UDP header is always 8 bytes */
++ } else if( skb->nh.iph->protocol == IPPROTO_ICMP ) {
++ return ip_hl + 8; /* ICMP header is 8 bytes */
++ } else {
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: tried to handle unknown protocol!\n");
++ return ip_hl + 8; /* something reasonable */
++ }
++}
++
++/* handles whether there's a match when we aren't appending data anymore */
++static int match_no_append(struct ip_conntrack * conntrack, struct ip_conntrack * master_conntrack,
++ enum ip_conntrack_info ctinfo, enum ip_conntrack_info master_ctinfo,
++ struct ipt_layer7_info * info)
++{
++ /* If we're in here, throw the app data away */
++ write_lock(&ct_lock);
++ if(master_conntrack->layer7.app_data != NULL) {
++
++ #ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
++ if(!master_conntrack->layer7.app_proto) {
++ char * f = friendly_print(master_conntrack->layer7.app_data);
++ char * g = hex_print(master_conntrack->layer7.app_data);
++ DPRINTK("\nl7-filter gave up after %d bytes (%d packets):\n%s\n",
++ strlen(f), TOTAL_PACKETS, f);
++ kfree(f);
++ DPRINTK("In hex: %s\n", g);
++ kfree(g);
++ }
++ #endif
++
++ kfree(master_conntrack->layer7.app_data);
++ master_conntrack->layer7.app_data = NULL; /* don't free again */
++ }
++ write_unlock(&ct_lock);
++
++ if(master_conntrack->layer7.app_proto){
++ /* Here child connections set their .app_proto (for /proc/net/ip_conntrack) */
++ write_lock(&ct_lock);
++ if(!conntrack->layer7.app_proto) {
++ conntrack->layer7.app_proto = kmalloc(strlen(master_conntrack->layer7.app_proto)+1, GFP_ATOMIC);
++ if(!conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match_no_append, bailing.\n");
++ write_unlock(&ct_lock);
++ return 1;
++ }
++ strcpy(conntrack->layer7.app_proto, master_conntrack->layer7.app_proto);
++ }
++ write_unlock(&ct_lock);
++
++ return (!strcmp(master_conntrack->layer7.app_proto, info->protocol));
++ }
++ else {
++ /* If not classified, set to "unknown" to distinguish from
++ connections that are still being tested. */
++ write_lock(&ct_lock);
++ master_conntrack->layer7.app_proto = kmalloc(strlen("unknown")+1, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match_no_append, bailing.\n");
++ write_unlock(&ct_lock);
++ return 1;
++ }
++ strcpy(master_conntrack->layer7.app_proto, "unknown");
++ write_unlock(&ct_lock);
++ return 0;
++ }
++}
++
++/* add the new app data to the conntrack. Return number of bytes added. */
++static int add_data(struct ip_conntrack * master_conntrack,
++ char * app_data, int appdatalen)
++{
++ int length = 0, i;
++ int oldlength = master_conntrack->layer7.app_data_len;
++
++ // This is a fix for a race condition by Deti Fliegl. However, I'm not
++ // clear on whether the race condition exists or whether this really
++ // fixes it. I might just be being dense... Anyway, if it's not really
++ // a fix, all it does is waste a very small amount of time.
++ if(!master_conntrack->layer7.app_data) return 0;
++
++ /* Strip nulls. Make everything lower case (our regex lib doesn't
++ do case insensitivity). Add it to the end of the current data. */
++ for(i = 0; i < maxdatalen-oldlength-1 &&
++ i < appdatalen; i++) {
++ if(app_data[i] != '\0') {
++ master_conntrack->layer7.app_data[length+oldlength] =
++ /* the kernel version of tolower mungs 'upper ascii' */
++ isascii(app_data[i])? tolower(app_data[i]) : app_data[i];
++ length++;
++ }
++ }
++
++ master_conntrack->layer7.app_data[length+oldlength] = '\0';
++ master_conntrack->layer7.app_data_len = length + oldlength;
++
++ return length;
++}
++
++/* Returns true on match and false otherwise. */
++static int match(const struct sk_buff *skbin,
++ const struct net_device *in, const struct net_device *out,
++ const struct xt_match *match, const void *matchinfo,
++ int offset, unsigned int protoff, int *hotdrop)
++{
++ /* sidestep const without getting a compiler warning... */
++ struct sk_buff * skb = (struct sk_buff *)skbin;
++
++ struct ipt_layer7_info * info = (struct ipt_layer7_info *)matchinfo;
++ enum ip_conntrack_info master_ctinfo, ctinfo;
++ struct ip_conntrack *master_conntrack, *conntrack;
++ unsigned char * app_data;
++ unsigned int pattern_result, appdatalen;
++ regexp * comppattern;
++
++ if(!can_handle(skb)){
++ DPRINTK("layer7: This is some protocol I can't handle.\n");
++ return info->invert;
++ }
++
++ /* Treat parent & all its children together as one connection, except
++ for the purpose of setting conntrack->layer7.app_proto in the actual
++ connection. This makes /proc/net/ip_conntrack more satisfying. */
++ if(!(conntrack = ip_conntrack_get((struct sk_buff *)skb, &ctinfo)) ||
++ !(master_conntrack = ip_conntrack_get((struct sk_buff *)skb, &master_ctinfo))) {
++ //DPRINTK("layer7: packet is not from a known connection, giving up.\n");
++ return info->invert;
++ }
++
++ /* Try to get a master conntrack (and its master etc) for FTP, etc. */
++ while (master_ct(master_conntrack) != NULL)
++ master_conntrack = master_ct(master_conntrack);
++
++ /* if we've classified it or seen too many packets */
++ if(TOTAL_PACKETS > num_packets ||
++ master_conntrack->layer7.app_proto) {
++
++ pattern_result = match_no_append(conntrack, master_conntrack, ctinfo, master_ctinfo, info);
++
++ /* skb->cb[0] == seen. Avoid doing things twice if there are two l7
++ rules. I'm not sure that using cb for this purpose is correct, although
++ it says "put your private variables there". But it doesn't look like it
++ is being used for anything else in the skbs that make it here. How can
++ I write to cb without making the compiler angry? */
++ skb->cb[0] = 1; /* marking it seen here is probably irrelevant, but consistant */
++
++ return (pattern_result ^ info->invert);
++ }
++
++ if(skb_is_nonlinear(skb)){
++ if(skb_linearize(skb) != 0){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: failed to linearize packet, bailing.\n");
++ return info->invert;
++ }
++ }
++
++ /* now that the skb is linearized, it's safe to set these. */
++ app_data = skb->data + app_data_offset(skb);
++ appdatalen = skb->tail - app_data;
++
++ spin_lock_bh(&list_lock);
++ /* the return value gets checked later, when we're ready to use it */
++ comppattern = compile_and_cache(info->pattern, info->protocol);
++ spin_unlock_bh(&list_lock);
++
++ /* On the first packet of a connection, allocate space for app data */
++ write_lock(&ct_lock);
++ if(TOTAL_PACKETS == 1 && !skb->cb[0] && !master_conntrack->layer7.app_data) {
++ master_conntrack->layer7.app_data = kmalloc(maxdatalen, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_data){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
++ write_unlock(&ct_lock);
++ return info->invert;
++ }
++
++ master_conntrack->layer7.app_data[0] = '\0';
++ }
++ write_unlock(&ct_lock);
++
++ /* Can be here, but unallocated, if numpackets is increased near
++ the beginning of a connection */
++ if(master_conntrack->layer7.app_data == NULL)
++ return (info->invert); /* unmatched */
++
++ if(!skb->cb[0]){
++ int newbytes;
++ write_lock(&ct_lock);
++ newbytes = add_data(master_conntrack, app_data, appdatalen);
++ write_unlock(&ct_lock);
++
++ if(newbytes == 0) { /* didn't add any data */
++ skb->cb[0] = 1;
++ /* Didn't match before, not going to match now */
++ return info->invert;
++ }
++ }
++
++ /* If looking for "unknown", then never match. "Unknown" means that
++ we've given up; we're still trying with these packets. */
++ read_lock(&ct_lock);
++ if(!strcmp(info->protocol, "unknown")) {
++ pattern_result = 0;
++ /* If the regexp failed to compile, don't bother running it */
++ } else if(comppattern && regexec(comppattern, master_conntrack->layer7.app_data)) {
++ DPRINTK("layer7: matched %s\n", info->protocol);
++ pattern_result = 1;
++ } else pattern_result = 0;
++ read_unlock(&ct_lock);
++
++ if(pattern_result) {
++ write_lock(&ct_lock);
++ master_conntrack->layer7.app_proto = kmalloc(strlen(info->protocol)+1, GFP_ATOMIC);
++ if(!master_conntrack->layer7.app_proto){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
++ write_unlock(&ct_lock);
++ return (pattern_result ^ info->invert);
++ }
++ strcpy(master_conntrack->layer7.app_proto, info->protocol);
++ write_unlock(&ct_lock);
++ }
++
++ /* mark the packet seen */
++ skb->cb[0] = 1;
++
++ return (pattern_result ^ info->invert);
++}
++
++static struct ipt_match layer7_match = {
++ .name = "layer7",
++ .match = &match,
++ .matchsize = sizeof(struct ipt_layer7_info),
++ .me = THIS_MODULE
++};
++
++/* taken from drivers/video/modedb.c */
++static int my_atoi(const char *s)
++{
++ int val = 0;
++
++ for (;; s++) {
++ switch (*s) {
++ case '0'...'9':
++ val = 10*val+(*s-'0');
++ break;
++ default:
++ return val;
++ }
++ }
++}
++
++/* write out num_packets to userland. */
++static int layer7_read_proc(char* page, char ** start, off_t off, int count,
++ int* eof, void * data)
++{
++ if(num_packets > 99 && net_ratelimit())
++ printk(KERN_ERR "layer7: NOT REACHED. num_packets too big\n");
++
++ page[0] = num_packets/10 + '0';
++ page[1] = num_packets%10 + '0';
++ page[2] = '\n';
++ page[3] = '\0';
++
++ *eof=1;
++
++ return 3;
++}
++
++/* Read in num_packets from userland */
++static int layer7_write_proc(struct file* file, const char* buffer,
++ unsigned long count, void *data)
++{
++ char * foo = kmalloc(count, GFP_ATOMIC);
++
++ if(!foo){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory, bailing. num_packets unchanged.\n");
++ return count;
++ }
++
++ if(copy_from_user(foo, buffer, count)) {
++ return -EFAULT;
++ }
++
++
++ num_packets = my_atoi(foo);
++ kfree (foo);
++
++ /* This has an arbitrary limit to make the math easier. I'm lazy.
++ But anyway, 99 is a LOT! If you want more, you're doing it wrong! */
++ if(num_packets > 99) {
++ printk(KERN_WARNING "layer7: num_packets can't be > 99.\n");
++ num_packets = 99;
++ } else if(num_packets < 1) {
++ printk(KERN_WARNING "layer7: num_packets can't be < 1.\n");
++ num_packets = 1;
++ }
++
++ return count;
++}
++
++/* register the proc file */
++static void layer7_init_proc(void)
++{
++ struct proc_dir_entry* entry;
++ entry = create_proc_entry("layer7_numpackets", 0644, proc_net);
++ entry->read_proc = layer7_read_proc;
++ entry->write_proc = layer7_write_proc;
++}
++
++static void layer7_cleanup_proc(void)
++{
++ remove_proc_entry("layer7_numpackets", proc_net);
++}
++
++static int __init ipt_layer7_init(void)
++{
++ need_conntrack();
++
++ layer7_init_proc();
++ if(maxdatalen < 1) {
++ printk(KERN_WARNING "layer7: maxdatalen can't be < 1, using 1\n");
++ maxdatalen = 1;
++ }
++ /* This is not a hard limit. It's just here to prevent people from
++ bringing their slow machines to a grinding halt. */
++ else if(maxdatalen > 65536) {
++ printk(KERN_WARNING "layer7: maxdatalen can't be > 65536, using 65536\n");
++ maxdatalen = 65536;
++ }
++ return ipt_register_match(&layer7_match);
++}
++
++static void __exit ipt_layer7_fini(void)
++{
++ layer7_cleanup_proc();
++ ipt_unregister_match(&layer7_match);
++}
++
++module_init(ipt_layer7_init);
++module_exit(ipt_layer7_fini);
+diff -urN linux.old/net/ipv4/netfilter/Kconfig linux.dev/net/ipv4/netfilter/Kconfig
+--- linux.old/net/ipv4/netfilter/Kconfig 2007-01-01 05:17:07.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/Kconfig 2007-01-01 05:18:48.000000000 +0100
+@@ -248,6 +248,24 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP_NF_MATCH_LAYER7
++ tristate "Layer 7 match support (EXPERIMENTAL)"
++ depends on IP_NF_IPTABLES && IP_NF_CT_ACCT && IP_NF_CONNTRACK && EXPERIMENTAL
++ help
++ Say Y if you want to be able to classify connections (and their
++ packets) based on regular expression matching of their application
++ layer data. This is one way to classify applications such as
++ peer-to-peer filesharing systems that do not always use the same
++ port.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_MATCH_LAYER7_DEBUG
++ bool "Layer 7 debugging output"
++ depends on IP_NF_MATCH_LAYER7
++ help
++ Say Y to get lots of debugging output.
++
+ config IP_NF_MATCH_TOS
+ tristate "TOS match support"
+ depends on IP_NF_IPTABLES
+diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
+--- linux.old/net/ipv4/netfilter/Makefile 2007-01-01 05:17:07.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/Makefile 2007-01-01 05:18:48.000000000 +0100
+@@ -63,6 +63,8 @@
+ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
+ obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o
+
++obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_layer7.o
++
+ # targets
+ obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
+ obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o
+diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.c linux.dev/net/ipv4/netfilter/regexp/regexp.c
+--- linux.old/net/ipv4/netfilter/regexp/regexp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/regexp/regexp.c 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,1197 @@
++/*
++ * regcomp and regexec -- regsub and regerror are elsewhere
++ * @(#)regexp.c 1.3 of 18 April 87
++ *
++ * Copyright (c) 1986 by University of Toronto.
++ * Written by Henry Spencer. Not derived from licensed software.
++ *
++ * Permission is granted to anyone to use this software for any
++ * purpose on any computer system, and to redistribute it freely,
++ * subject to the following restrictions:
++ *
++ * 1. The author is not responsible for the consequences of use of
++ * this software, no matter how awful, even if they arise
++ * from defects in it.
++ *
++ * 2. The origin of this software must not be misrepresented, either
++ * by explicit claim or by omission.
++ *
++ * 3. Altered versions must be plainly marked as such, and must not
++ * be misrepresented as being the original software.
++ *
++ * Beware that some of this code is subtly aware of the way operator
++ * precedence is structured in regular expressions. Serious changes in
++ * regular-expression syntax might require a total rethink.
++ *
++ * This code was modified by Ethan Sommer to work within the kernel
++ * (it now uses kmalloc etc..)
++ *
++ * Modified slightly by Matthew Strait to use more modern C.
++ */
++
++#include "regexp.h"
++#include "regmagic.h"
++
++/* added by ethan and matt. Lets it work in both kernel and user space.
++(So iptables can use it, for instance.) Yea, it goes both ways... */
++#if __KERNEL__
++ #define malloc(foo) kmalloc(foo,GFP_ATOMIC)
++#else
++ #define printk(format,args...) printf(format,##args)
++#endif
++
++void regerror(char * s)
++{
++ printk("<3>Regexp: %s\n", s);
++ /* NOTREACHED */
++}
++
++/*
++ * The "internal use only" fields in regexp.h are present to pass info from
++ * compile to execute that permits the execute phase to run lots faster on
++ * simple cases. They are:
++ *
++ * regstart char that must begin a match; '\0' if none obvious
++ * reganch is the match anchored (at beginning-of-line only)?
++ * regmust string (pointer into program) that match must include, or NULL
++ * regmlen length of regmust string
++ *
++ * Regstart and reganch permit very fast decisions on suitable starting points
++ * for a match, cutting down the work a lot. Regmust permits fast rejection
++ * of lines that cannot possibly match. The regmust tests are costly enough
++ * that regcomp() supplies a regmust only if the r.e. contains something
++ * potentially expensive (at present, the only such thing detected is * or +
++ * at the start of the r.e., which can involve a lot of backup). Regmlen is
++ * supplied because the test in regexec() needs it and regcomp() is computing
++ * it anyway.
++ */
++
++/*
++ * Structure for regexp "program". This is essentially a linear encoding
++ * of a nondeterministic finite-state machine (aka syntax charts or
++ * "railroad normal form" in parsing technology). Each node is an opcode
++ * plus a "next" pointer, possibly plus an operand. "Next" pointers of
++ * all nodes except BRANCH implement concatenation; a "next" pointer with
++ * a BRANCH on both ends of it is connecting two alternatives. (Here we
++ * have one of the subtle syntax dependencies: an individual BRANCH (as
++ * opposed to a collection of them) is never concatenated with anything
++ * because of operator precedence.) The operand of some types of node is
++ * a literal string; for others, it is a node leading into a sub-FSM. In
++ * particular, the operand of a BRANCH node is the first node of the branch.
++ * (NB this is *not* a tree structure: the tail of the branch connects
++ * to the thing following the set of BRANCHes.) The opcodes are:
++ */
++
++/* definition number opnd? meaning */
++#define END 0 /* no End of program. */
++#define BOL 1 /* no Match "" at beginning of line. */
++#define EOL 2 /* no Match "" at end of line. */
++#define ANY 3 /* no Match any one character. */
++#define ANYOF 4 /* str Match any character in this string. */
++#define ANYBUT 5 /* str Match any character not in this string. */
++#define BRANCH 6 /* node Match this alternative, or the next... */
++#define BACK 7 /* no Match "", "next" ptr points backward. */
++#define EXACTLY 8 /* str Match this string. */
++#define NOTHING 9 /* no Match empty string. */
++#define STAR 10 /* node Match this (simple) thing 0 or more times. */
++#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
++#define OPEN 20 /* no Mark this point in input as start of #n. */
++ /* OPEN+1 is number 1, etc. */
++#define CLOSE 30 /* no Analogous to OPEN. */
++
++/*
++ * Opcode notes:
++ *
++ * BRANCH The set of branches constituting a single choice are hooked
++ * together with their "next" pointers, since precedence prevents
++ * anything being concatenated to any individual branch. The
++ * "next" pointer of the last BRANCH in a choice points to the
++ * thing following the whole choice. This is also where the
++ * final "next" pointer of each individual branch points; each
++ * branch starts with the operand node of a BRANCH node.
++ *
++ * BACK Normal "next" pointers all implicitly point forward; BACK
++ * exists to make loop structures possible.
++ *
++ * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
++ * BRANCH structures using BACK. Simple cases (one character
++ * per match) are implemented with STAR and PLUS for speed
++ * and to minimize recursive plunges.
++ *
++ * OPEN,CLOSE ...are numbered at compile time.
++ */
++
++/*
++ * A node is one char of opcode followed by two chars of "next" pointer.
++ * "Next" pointers are stored as two 8-bit pieces, high order first. The
++ * value is a positive offset from the opcode of the node containing it.
++ * An operand, if any, simply follows the node. (Note that much of the
++ * code generation knows about this implicit relationship.)
++ *
++ * Using two bytes for the "next" pointer is vast overkill for most things,
++ * but allows patterns to get big without disasters.
++ */
++#define OP(p) (*(p))
++#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
++#define OPERAND(p) ((p) + 3)
++
++/*
++ * See regmagic.h for one further detail of program structure.
++ */
++
++
++/*
++ * Utility definitions.
++ */
++#ifndef CHARBITS
++#define UCHARAT(p) ((int)*(unsigned char *)(p))
++#else
++#define UCHARAT(p) ((int)*(p)&CHARBITS)
++#endif
++
++#define FAIL(m) { regerror(m); return(NULL); }
++#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
++#define META "^$.[()|?+*\\"
++
++/*
++ * Flags to be passed up and down.
++ */
++#define HASWIDTH 01 /* Known never to match null string. */
++#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
++#define SPSTART 04 /* Starts with * or +. */
++#define WORST 0 /* Worst case. */
++
++/*
++ * Global work variables for regcomp().
++ */
++struct match_globals {
++char *reginput; /* String-input pointer. */
++char *regbol; /* Beginning of input, for ^ check. */
++char **regstartp; /* Pointer to startp array. */
++char **regendp; /* Ditto for endp. */
++char *regparse; /* Input-scan pointer. */
++int regnpar; /* () count. */
++char regdummy;
++char *regcode; /* Code-emit pointer; &regdummy = don't. */
++long regsize; /* Code size. */
++};
++
++/*
++ * Forward declarations for regcomp()'s friends.
++ */
++#ifndef STATIC
++#define STATIC static
++#endif
++STATIC char *reg(struct match_globals *g, int paren,int *flagp);
++STATIC char *regbranch(struct match_globals *g, int *flagp);
++STATIC char *regpiece(struct match_globals *g, int *flagp);
++STATIC char *regatom(struct match_globals *g, int *flagp);
++STATIC char *regnode(struct match_globals *g, char op);
++STATIC char *regnext(struct match_globals *g, char *p);
++STATIC void regc(struct match_globals *g, char b);
++STATIC void reginsert(struct match_globals *g, char op, char *opnd);
++STATIC void regtail(struct match_globals *g, char *p, char *val);
++STATIC void regoptail(struct match_globals *g, char *p, char *val);
++
++
++__kernel_size_t my_strcspn(const char *s1,const char *s2)
++{
++ char *scan1;
++ char *scan2;
++ int count;
++
++ count = 0;
++ for (scan1 = (char *)s1; *scan1 != '\0'; scan1++) {
++ for (scan2 = (char *)s2; *scan2 != '\0';) /* ++ moved down. */
++ if (*scan1 == *scan2++)
++ return(count);
++ count++;
++ }
++ return(count);
++}
++
++/*
++ - regcomp - compile a regular expression into internal code
++ *
++ * We can't allocate space until we know how big the compiled form will be,
++ * but we can't compile it (and thus know how big it is) until we've got a
++ * place to put the code. So we cheat: we compile it twice, once with code
++ * generation turned off and size counting turned on, and once "for real".
++ * This also means that we don't allocate space until we are sure that the
++ * thing really will compile successfully, and we never have to move the
++ * code and thus invalidate pointers into it. (Note that it has to be in
++ * one piece because free() must be able to free it all.)
++ *
++ * Beware that the optimization-preparation code in here knows about some
++ * of the structure of the compiled regexp.
++ */
++regexp *
++regcomp(char *exp,int *patternsize)
++{
++ register regexp *r;
++ register char *scan;
++ register char *longest;
++ register int len;
++ int flags;
++ struct match_globals g;
++
++ /* commented out by ethan
++ extern char *malloc();
++ */
++
++ if (exp == NULL)
++ FAIL("NULL argument");
++
++ /* First pass: determine size, legality. */
++ g.regparse = exp;
++ g.regnpar = 1;
++ g.regsize = 0L;
++ g.regcode = &g.regdummy;
++ regc(&g, MAGIC);
++ if (reg(&g, 0, &flags) == NULL)
++ return(NULL);
++
++ /* Small enough for pointer-storage convention? */
++ if (g.regsize >= 32767L) /* Probably could be 65535L. */
++ FAIL("regexp too big");
++
++ /* Allocate space. */
++ *patternsize=sizeof(regexp) + (unsigned)g.regsize;
++ r = (regexp *)malloc(sizeof(regexp) + (unsigned)g.regsize);
++ if (r == NULL)
++ FAIL("out of space");
++
++ /* Second pass: emit code. */
++ g.regparse = exp;
++ g.regnpar = 1;
++ g.regcode = r->program;
++ regc(&g, MAGIC);
++ if (reg(&g, 0, &flags) == NULL)
++ return(NULL);
++
++ /* Dig out information for optimizations. */
++ r->regstart = '\0'; /* Worst-case defaults. */
++ r->reganch = 0;
++ r->regmust = NULL;
++ r->regmlen = 0;
++ scan = r->program+1; /* First BRANCH. */
++ if (OP(regnext(&g, scan)) == END) { /* Only one top-level choice. */
++ scan = OPERAND(scan);
++
++ /* Starting-point info. */
++ if (OP(scan) == EXACTLY)
++ r->regstart = *OPERAND(scan);
++ else if (OP(scan) == BOL)
++ r->reganch++;
++
++ /*
++ * If there's something expensive in the r.e., find the
++ * longest literal string that must appear and make it the
++ * regmust. Resolve ties in favor of later strings, since
++ * the regstart check works with the beginning of the r.e.
++ * and avoiding duplication strengthens checking. Not a
++ * strong reason, but sufficient in the absence of others.
++ */
++ if (flags&SPSTART) {
++ longest = NULL;
++ len = 0;
++ for (; scan != NULL; scan = regnext(&g, scan))
++ if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
++ longest = OPERAND(scan);
++ len = strlen(OPERAND(scan));
++ }
++ r->regmust = longest;
++ r->regmlen = len;
++ }
++ }
++
++ return(r);
++}
++
++/*
++ - reg - regular expression, i.e. main body or parenthesized thing
++ *
++ * Caller must absorb opening parenthesis.
++ *
++ * Combining parenthesis handling with the base level of regular expression
++ * is a trifle forced, but the need to tie the tails of the branches to what
++ * follows makes it hard to avoid.
++ */
++static char *
++reg(struct match_globals *g, int paren, int *flagp /* Parenthesized? */ )
++{
++ register char *ret;
++ register char *br;
++ register char *ender;
++ register int parno = 0; /* 0 makes gcc happy */
++ int flags;
++
++ *flagp = HASWIDTH; /* Tentatively. */
++
++ /* Make an OPEN node, if parenthesized. */
++ if (paren) {
++ if (g->regnpar >= NSUBEXP)
++ FAIL("too many ()");
++ parno = g->regnpar;
++ g->regnpar++;
++ ret = regnode(g, OPEN+parno);
++ } else
++ ret = NULL;
++
++ /* Pick up the branches, linking them together. */
++ br = regbranch(g, &flags);
++ if (br == NULL)
++ return(NULL);
++ if (ret != NULL)
++ regtail(g, ret, br); /* OPEN -> first. */
++ else
++ ret = br;
++ if (!(flags&HASWIDTH))
++ *flagp &= ~HASWIDTH;
++ *flagp |= flags&SPSTART;
++ while (*g->regparse == '|') {
++ g->regparse++;
++ br = regbranch(g, &flags);
++ if (br == NULL)
++ return(NULL);
++ regtail(g, ret, br); /* BRANCH -> BRANCH. */
++ if (!(flags&HASWIDTH))
++ *flagp &= ~HASWIDTH;
++ *flagp |= flags&SPSTART;
++ }
++
++ /* Make a closing node, and hook it on the end. */
++ ender = regnode(g, (paren) ? CLOSE+parno : END);
++ regtail(g, ret, ender);
++
++ /* Hook the tails of the branches to the closing node. */
++ for (br = ret; br != NULL; br = regnext(g, br))
++ regoptail(g, br, ender);
++
++ /* Check for proper termination. */
++ if (paren && *g->regparse++ != ')') {
++ FAIL("unmatched ()");
++ } else if (!paren && *g->regparse != '\0') {
++ if (*g->regparse == ')') {
++ FAIL("unmatched ()");
++ } else
++ FAIL("junk on end"); /* "Can't happen". */
++ /* NOTREACHED */
++ }
++
++ return(ret);
++}
++
++/*
++ - regbranch - one alternative of an | operator
++ *
++ * Implements the concatenation operator.
++ */
++static char *
++regbranch(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ register char *chain;
++ register char *latest;
++ int flags;
++
++ *flagp = WORST; /* Tentatively. */
++
++ ret = regnode(g, BRANCH);
++ chain = NULL;
++ while (*g->regparse != '\0' && *g->regparse != '|' && *g->regparse != ')') {
++ latest = regpiece(g, &flags);
++ if (latest == NULL)
++ return(NULL);
++ *flagp |= flags&HASWIDTH;
++ if (chain == NULL) /* First piece. */
++ *flagp |= flags&SPSTART;
++ else
++ regtail(g, chain, latest);
++ chain = latest;
++ }
++ if (chain == NULL) /* Loop ran zero times. */
++ (void) regnode(g, NOTHING);
++
++ return(ret);
++}
++
++/*
++ - regpiece - something followed by possible [*+?]
++ *
++ * Note that the branching code sequences used for ? and the general cases
++ * of * and + are somewhat optimized: they use the same NOTHING node as
++ * both the endmarker for their branch list and the body of the last branch.
++ * It might seem that this node could be dispensed with entirely, but the
++ * endmarker role is not redundant.
++ */
++static char *
++regpiece(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ register char op;
++ register char *next;
++ int flags;
++
++ ret = regatom(g, &flags);
++ if (ret == NULL)
++ return(NULL);
++
++ op = *g->regparse;
++ if (!ISMULT(op)) {
++ *flagp = flags;
++ return(ret);
++ }
++
++ if (!(flags&HASWIDTH) && op != '?')
++ FAIL("*+ operand could be empty");
++ *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
++
++ if (op == '*' && (flags&SIMPLE))
++ reginsert(g, STAR, ret);
++ else if (op == '*') {
++ /* Emit x* as (x&|), where & means "self". */
++ reginsert(g, BRANCH, ret); /* Either x */
++ regoptail(g, ret, regnode(g, BACK)); /* and loop */
++ regoptail(g, ret, ret); /* back */
++ regtail(g, ret, regnode(g, BRANCH)); /* or */
++ regtail(g, ret, regnode(g, NOTHING)); /* null. */
++ } else if (op == '+' && (flags&SIMPLE))
++ reginsert(g, PLUS, ret);
++ else if (op == '+') {
++ /* Emit x+ as x(&|), where & means "self". */
++ next = regnode(g, BRANCH); /* Either */
++ regtail(g, ret, next);
++ regtail(g, regnode(g, BACK), ret); /* loop back */
++ regtail(g, next, regnode(g, BRANCH)); /* or */
++ regtail(g, ret, regnode(g, NOTHING)); /* null. */
++ } else if (op == '?') {
++ /* Emit x? as (x|) */
++ reginsert(g, BRANCH, ret); /* Either x */
++ regtail(g, ret, regnode(g, BRANCH)); /* or */
++ next = regnode(g, NOTHING); /* null. */
++ regtail(g, ret, next);
++ regoptail(g, ret, next);
++ }
++ g->regparse++;
++ if (ISMULT(*g->regparse))
++ FAIL("nested *?+");
++
++ return(ret);
++}
++
++/*
++ - regatom - the lowest level
++ *
++ * Optimization: gobbles an entire sequence of ordinary characters so that
++ * it can turn them into a single node, which is smaller to store and
++ * faster to run. Backslashed characters are exceptions, each becoming a
++ * separate node; the code is simpler that way and it's not worth fixing.
++ */
++static char *
++regatom(struct match_globals *g, int *flagp)
++{
++ register char *ret;
++ int flags;
++
++ *flagp = WORST; /* Tentatively. */
++
++ switch (*g->regparse++) {
++ case '^':
++ ret = regnode(g, BOL);
++ break;
++ case '$':
++ ret = regnode(g, EOL);
++ break;
++ case '.':
++ ret = regnode(g, ANY);
++ *flagp |= HASWIDTH|SIMPLE;
++ break;
++ case '[': {
++ register int class;
++ register int classend;
++
++ if (*g->regparse == '^') { /* Complement of range. */
++ ret = regnode(g, ANYBUT);
++ g->regparse++;
++ } else
++ ret = regnode(g, ANYOF);
++ if (*g->regparse == ']' || *g->regparse == '-')
++ regc(g, *g->regparse++);
++ while (*g->regparse != '\0' && *g->regparse != ']') {
++ if (*g->regparse == '-') {
++ g->regparse++;
++ if (*g->regparse == ']' || *g->regparse == '\0')
++ regc(g, '-');
++ else {
++ class = UCHARAT(g->regparse-2)+1;
++ classend = UCHARAT(g->regparse);
++ if (class > classend+1)
++ FAIL("invalid [] range");
++ for (; class <= classend; class++)
++ regc(g, class);
++ g->regparse++;
++ }
++ } else
++ regc(g, *g->regparse++);
++ }
++ regc(g, '\0');
++ if (*g->regparse != ']')
++ FAIL("unmatched []");
++ g->regparse++;
++ *flagp |= HASWIDTH|SIMPLE;
++ }
++ break;
++ case '(':
++ ret = reg(g, 1, &flags);
++ if (ret == NULL)
++ return(NULL);
++ *flagp |= flags&(HASWIDTH|SPSTART);
++ break;
++ case '\0':
++ case '|':
++ case ')':
++ FAIL("internal urp"); /* Supposed to be caught earlier. */
++ break;
++ case '?':
++ case '+':
++ case '*':
++ FAIL("?+* follows nothing");
++ break;
++ case '\\':
++ if (*g->regparse == '\0')
++ FAIL("trailing \\");
++ ret = regnode(g, EXACTLY);
++ regc(g, *g->regparse++);
++ regc(g, '\0');
++ *flagp |= HASWIDTH|SIMPLE;
++ break;
++ default: {
++ register int len;
++ register char ender;
++
++ g->regparse--;
++ len = my_strcspn((const char *)g->regparse, (const char *)META);
++ if (len <= 0)
++ FAIL("internal disaster");
++ ender = *(g->regparse+len);
++ if (len > 1 && ISMULT(ender))
++ len--; /* Back off clear of ?+* operand. */
++ *flagp |= HASWIDTH;
++ if (len == 1)
++ *flagp |= SIMPLE;
++ ret = regnode(g, EXACTLY);
++ while (len > 0) {
++ regc(g, *g->regparse++);
++ len--;
++ }
++ regc(g, '\0');
++ }
++ break;
++ }
++
++ return(ret);
++}
++
++/*
++ - regnode - emit a node
++ */
++static char * /* Location. */
++regnode(struct match_globals *g, char op)
++{
++ register char *ret;
++ register char *ptr;
++
++ ret = g->regcode;
++ if (ret == &g->regdummy) {
++ g->regsize += 3;
++ return(ret);
++ }
++
++ ptr = ret;
++ *ptr++ = op;
++ *ptr++ = '\0'; /* Null "next" pointer. */
++ *ptr++ = '\0';
++ g->regcode = ptr;
++
++ return(ret);
++}
++
++/*
++ - regc - emit (if appropriate) a byte of code
++ */
++static void
++regc(struct match_globals *g, char b)
++{
++ if (g->regcode != &g->regdummy)
++ *g->regcode++ = b;
++ else
++ g->regsize++;
++}
++
++/*
++ - reginsert - insert an operator in front of already-emitted operand
++ *
++ * Means relocating the operand.
++ */
++static void
++reginsert(struct match_globals *g, char op, char* opnd)
++{
++ register char *src;
++ register char *dst;
++ register char *place;
++
++ if (g->regcode == &g->regdummy) {
++ g->regsize += 3;
++ return;
++ }
++
++ src = g->regcode;
++ g->regcode += 3;
++ dst = g->regcode;
++ while (src > opnd)
++ *--dst = *--src;
++
++ place = opnd; /* Op node, where operand used to be. */
++ *place++ = op;
++ *place++ = '\0';
++ *place++ = '\0';
++}
++
++/*
++ - regtail - set the next-pointer at the end of a node chain
++ */
++static void
++regtail(struct match_globals *g, char *p, char *val)
++{
++ register char *scan;
++ register char *temp;
++ register int offset;
++
++ if (p == &g->regdummy)
++ return;
++
++ /* Find last node. */
++ scan = p;
++ for (;;) {
++ temp = regnext(g, scan);
++ if (temp == NULL)
++ break;
++ scan = temp;
++ }
++
++ if (OP(scan) == BACK)
++ offset = scan - val;
++ else
++ offset = val - scan;
++ *(scan+1) = (offset>>8)&0377;
++ *(scan+2) = offset&0377;
++}
++
++/*
++ - regoptail - regtail on operand of first argument; nop if operandless
++ */
++static void
++regoptail(struct match_globals *g, char *p, char *val)
++{
++ /* "Operandless" and "op != BRANCH" are synonymous in practice. */
++ if (p == NULL || p == &g->regdummy || OP(p) != BRANCH)
++ return;
++ regtail(g, OPERAND(p), val);
++}
++
++/*
++ * regexec and friends
++ */
++
++
++/*
++ * Forwards.
++ */
++STATIC int regtry(struct match_globals *g, regexp *prog, char *string);
++STATIC int regmatch(struct match_globals *g, char *prog);
++STATIC int regrepeat(struct match_globals *g, char *p);
++
++#ifdef DEBUG
++int regnarrate = 0;
++void regdump();
++STATIC char *regprop(char *op);
++#endif
++
++/*
++ - regexec - match a regexp against a string
++ */
++int
++regexec(regexp *prog, char *string)
++{
++ register char *s;
++ struct match_globals g;
++
++ /* Be paranoid... */
++ if (prog == NULL || string == NULL) {
++ printk("<3>Regexp: NULL parameter\n");
++ return(0);
++ }
++
++ /* Check validity of program. */
++ if (UCHARAT(prog->program) != MAGIC) {
++ printk("<3>Regexp: corrupted program\n");
++ return(0);
++ }
++
++ /* If there is a "must appear" string, look for it. */
++ if (prog->regmust != NULL) {
++ s = string;
++ while ((s = strchr(s, prog->regmust[0])) != NULL) {
++ if (strncmp(s, prog->regmust, prog->regmlen) == 0)
++ break; /* Found it. */
++ s++;
++ }
++ if (s == NULL) /* Not present. */
++ return(0);
++ }
++
++ /* Mark beginning of line for ^ . */
++ g.regbol = string;
++
++ /* Simplest case: anchored match need be tried only once. */
++ if (prog->reganch)
++ return(regtry(&g, prog, string));
++
++ /* Messy cases: unanchored match. */
++ s = string;
++ if (prog->regstart != '\0')
++ /* We know what char it must start with. */
++ while ((s = strchr(s, prog->regstart)) != NULL) {
++ if (regtry(&g, prog, s))
++ return(1);
++ s++;
++ }
++ else
++ /* We don't -- general case. */
++ do {
++ if (regtry(&g, prog, s))
++ return(1);
++ } while (*s++ != '\0');
++
++ /* Failure. */
++ return(0);
++}
++
++/*
++ - regtry - try match at specific point
++ */
++static int /* 0 failure, 1 success */
++regtry(struct match_globals *g, regexp *prog, char *string)
++{
++ register int i;
++ register char **sp;
++ register char **ep;
++
++ g->reginput = string;
++ g->regstartp = prog->startp;
++ g->regendp = prog->endp;
++
++ sp = prog->startp;
++ ep = prog->endp;
++ for (i = NSUBEXP; i > 0; i--) {
++ *sp++ = NULL;
++ *ep++ = NULL;
++ }
++ if (regmatch(g, prog->program + 1)) {
++ prog->startp[0] = string;
++ prog->endp[0] = g->reginput;
++ return(1);
++ } else
++ return(0);
++}
++
++/*
++ - regmatch - main matching routine
++ *
++ * Conceptually the strategy is simple: check to see whether the current
++ * node matches, call self recursively to see whether the rest matches,
++ * and then act accordingly. In practice we make some effort to avoid
++ * recursion, in particular by going through "ordinary" nodes (that don't
++ * need to know whether the rest of the match failed) by a loop instead of
++ * by recursion.
++ */
++static int /* 0 failure, 1 success */
++regmatch(struct match_globals *g, char *prog)
++{
++ register char *scan = prog; /* Current node. */
++ char *next; /* Next node. */
++
++#ifdef DEBUG
++ if (scan != NULL && regnarrate)
++ fprintf(stderr, "%s(\n", regprop(scan));
++#endif
++ while (scan != NULL) {
++#ifdef DEBUG
++ if (regnarrate)
++ fprintf(stderr, "%s...\n", regprop(scan));
++#endif
++ next = regnext(g, scan);
++
++ switch (OP(scan)) {
++ case BOL:
++ if (g->reginput != g->regbol)
++ return(0);
++ break;
++ case EOL:
++ if (*g->reginput != '\0')
++ return(0);
++ break;
++ case ANY:
++ if (*g->reginput == '\0')
++ return(0);
++ g->reginput++;
++ break;
++ case EXACTLY: {
++ register int len;
++ register char *opnd;
++
++ opnd = OPERAND(scan);
++ /* Inline the first character, for speed. */
++ if (*opnd != *g->reginput)
++ return(0);
++ len = strlen(opnd);
++ if (len > 1 && strncmp(opnd, g->reginput, len) != 0)
++ return(0);
++ g->reginput += len;
++ }
++ break;
++ case ANYOF:
++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) == NULL)
++ return(0);
++ g->reginput++;
++ break;
++ case ANYBUT:
++ if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) != NULL)
++ return(0);
++ g->reginput++;
++ break;
++ case NOTHING:
++ case BACK:
++ break;
++ case OPEN+1:
++ case OPEN+2:
++ case OPEN+3:
++ case OPEN+4:
++ case OPEN+5:
++ case OPEN+6:
++ case OPEN+7:
++ case OPEN+8:
++ case OPEN+9: {
++ register int no;
++ register char *save;
++
++ no = OP(scan) - OPEN;
++ save = g->reginput;
++
++ if (regmatch(g, next)) {
++ /*
++ * Don't set startp if some later
++ * invocation of the same parentheses
++ * already has.
++ */
++ if (g->regstartp[no] == NULL)
++ g->regstartp[no] = save;
++ return(1);
++ } else
++ return(0);
++ }
++ break;
++ case CLOSE+1:
++ case CLOSE+2:
++ case CLOSE+3:
++ case CLOSE+4:
++ case CLOSE+5:
++ case CLOSE+6:
++ case CLOSE+7:
++ case CLOSE+8:
++ case CLOSE+9:
++ {
++ register int no;
++ register char *save;
++
++ no = OP(scan) - CLOSE;
++ save = g->reginput;
++
++ if (regmatch(g, next)) {
++ /*
++ * Don't set endp if some later
++ * invocation of the same parentheses
++ * already has.
++ */
++ if (g->regendp[no] == NULL)
++ g->regendp[no] = save;
++ return(1);
++ } else
++ return(0);
++ }
++ break;
++ case BRANCH: {
++ register char *save;
++
++ if (OP(next) != BRANCH) /* No choice. */
++ next = OPERAND(scan); /* Avoid recursion. */
++ else {
++ do {
++ save = g->reginput;
++ if (regmatch(g, OPERAND(scan)))
++ return(1);
++ g->reginput = save;
++ scan = regnext(g, scan);
++ } while (scan != NULL && OP(scan) == BRANCH);
++ return(0);
++ /* NOTREACHED */
++ }
++ }
++ break;
++ case STAR:
++ case PLUS: {
++ register char nextch;
++ register int no;
++ register char *save;
++ register int min;
++
++ /*
++ * Lookahead to avoid useless match attempts
++ * when we know what character comes next.
++ */
++ nextch = '\0';
++ if (OP(next) == EXACTLY)
++ nextch = *OPERAND(next);
++ min = (OP(scan) == STAR) ? 0 : 1;
++ save = g->reginput;
++ no = regrepeat(g, OPERAND(scan));
++ while (no >= min) {
++ /* If it could work, try it. */
++ if (nextch == '\0' || *g->reginput == nextch)
++ if (regmatch(g, next))
++ return(1);
++ /* Couldn't or didn't -- back up. */
++ no--;
++ g->reginput = save + no;
++ }
++ return(0);
++ }
++ break;
++ case END:
++ return(1); /* Success! */
++ break;
++ default:
++ printk("<3>Regexp: memory corruption\n");
++ return(0);
++ break;
++ }
++
++ scan = next;
++ }
++
++ /*
++ * We get here only if there's trouble -- normally "case END" is
++ * the terminating point.
++ */
++ printk("<3>Regexp: corrupted pointers\n");
++ return(0);
++}
++
++/*
++ - regrepeat - repeatedly match something simple, report how many
++ */
++static int
++regrepeat(struct match_globals *g, char *p)
++{
++ register int count = 0;
++ register char *scan;
++ register char *opnd;
++
++ scan = g->reginput;
++ opnd = OPERAND(p);
++ switch (OP(p)) {
++ case ANY:
++ count = strlen(scan);
++ scan += count;
++ break;
++ case EXACTLY:
++ while (*opnd == *scan) {
++ count++;
++ scan++;
++ }
++ break;
++ case ANYOF:
++ while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
++ count++;
++ scan++;
++ }
++ break;
++ case ANYBUT:
++ while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
++ count++;
++ scan++;
++ }
++ break;
++ default: /* Oh dear. Called inappropriately. */
++ printk("<3>Regexp: internal foulup\n");
++ count = 0; /* Best compromise. */
++ break;
++ }
++ g->reginput = scan;
++
++ return(count);
++}
++
++/*
++ - regnext - dig the "next" pointer out of a node
++ */
++static char*
++regnext(struct match_globals *g, char *p)
++{
++ register int offset;
++
++ if (p == &g->regdummy)
++ return(NULL);
++
++ offset = NEXT(p);
++ if (offset == 0)
++ return(NULL);
++
++ if (OP(p) == BACK)
++ return(p-offset);
++ else
++ return(p+offset);
++}
++
++#ifdef DEBUG
++
++STATIC char *regprop();
++
++/*
++ - regdump - dump a regexp onto stdout in vaguely comprehensible form
++ */
++void
++regdump(regexp *r)
++{
++ register char *s;
++ register char op = EXACTLY; /* Arbitrary non-END op. */
++ register char *next;
++ /* extern char *strchr(); */
++
++
++ s = r->program + 1;
++ while (op != END) { /* While that wasn't END last time... */
++ op = OP(s);
++ printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */
++ next = regnext(s);
++ if (next == NULL) /* Next ptr. */
++ printf("(0)");
++ else
++ printf("(%d)", (s-r->program)+(next-s));
++ s += 3;
++ if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
++ /* Literal string, where present. */
++ while (*s != '\0') {
++ putchar(*s);
++ s++;
++ }
++ s++;
++ }
++ putchar('\n');
++ }
++
++ /* Header fields of interest. */
++ if (r->regstart != '\0')
++ printf("start `%c' ", r->regstart);
++ if (r->reganch)
++ printf("anchored ");
++ if (r->regmust != NULL)
++ printf("must have \"%s\"", r->regmust);
++ printf("\n");
++}
++
++/*
++ - regprop - printable representation of opcode
++ */
++static char *
++regprop(char *op)
++{
++#define BUFLEN 50
++ register char *p;
++ static char buf[BUFLEN];
++
++ strcpy(buf, ":");
++
++ switch (OP(op)) {
++ case BOL:
++ p = "BOL";
++ break;
++ case EOL:
++ p = "EOL";
++ break;
++ case ANY:
++ p = "ANY";
++ break;
++ case ANYOF:
++ p = "ANYOF";
++ break;
++ case ANYBUT:
++ p = "ANYBUT";
++ break;
++ case BRANCH:
++ p = "BRANCH";
++ break;
++ case EXACTLY:
++ p = "EXACTLY";
++ break;
++ case NOTHING:
++ p = "NOTHING";
++ break;
++ case BACK:
++ p = "BACK";
++ break;
++ case END:
++ p = "END";
++ break;
++ case OPEN+1:
++ case OPEN+2:
++ case OPEN+3:
++ case OPEN+4:
++ case OPEN+5:
++ case OPEN+6:
++ case OPEN+7:
++ case OPEN+8:
++ case OPEN+9:
++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "OPEN%d", OP(op)-OPEN);
++ p = NULL;
++ break;
++ case CLOSE+1:
++ case CLOSE+2:
++ case CLOSE+3:
++ case CLOSE+4:
++ case CLOSE+5:
++ case CLOSE+6:
++ case CLOSE+7:
++ case CLOSE+8:
++ case CLOSE+9:
++ snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "CLOSE%d", OP(op)-CLOSE);
++ p = NULL;
++ break;
++ case STAR:
++ p = "STAR";
++ break;
++ case PLUS:
++ p = "PLUS";
++ break;
++ default:
++ printk("<3>Regexp: corrupted opcode\n");
++ break;
++ }
++ if (p != NULL)
++ strncat(buf, p, BUFLEN-strlen(buf));
++ return(buf);
++}
++#endif
++
++
+diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.h linux.dev/net/ipv4/netfilter/regexp/regexp.h
+--- linux.old/net/ipv4/netfilter/regexp/regexp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/regexp/regexp.h 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,41 @@
++/*
++ * Definitions etc. for regexp(3) routines.
++ *
++ * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
++ * not the System V one.
++ */
++
++#ifndef REGEXP_H
++#define REGEXP_H
++
++
++/*
++http://www.opensource.apple.com/darwinsource/10.3/expect-1/expect/expect.h ,
++which contains a version of this library, says:
++
++ *
++ * NSUBEXP must be at least 10, and no greater than 117 or the parser
++ * will not work properly.
++ *
++
++However, it looks rather like this library is limited to 10. If you think
++otherwise, let us know.
++*/
++
++#define NSUBEXP 10
++typedef struct regexp {
++ char *startp[NSUBEXP];
++ char *endp[NSUBEXP];
++ char regstart; /* Internal use only. */
++ char reganch; /* Internal use only. */
++ char *regmust; /* Internal use only. */
++ int regmlen; /* Internal use only. */
++ char program[1]; /* Unwarranted chumminess with compiler. */
++} regexp;
++
++regexp * regcomp(char *exp, int *patternsize);
++int regexec(regexp *prog, char *string);
++void regsub(regexp *prog, char *source, char *dest);
++void regerror(char *s);
++
++#endif
+diff -urN linux.old/net/ipv4/netfilter/regexp/regmagic.h linux.dev/net/ipv4/netfilter/regexp/regmagic.h
+--- linux.old/net/ipv4/netfilter/regexp/regmagic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/regexp/regmagic.h 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,5 @@
++/*
++ * The first byte of the regexp internal "program" is actually this magic
++ * number; the start node begins in the second byte.
++ */
++#define MAGIC 0234
+diff -urN linux.old/net/ipv4/netfilter/regexp/regsub.c linux.dev/net/ipv4/netfilter/regexp/regsub.c
+--- linux.old/net/ipv4/netfilter/regexp/regsub.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/net/ipv4/netfilter/regexp/regsub.c 2007-01-01 05:18:48.000000000 +0100
+@@ -0,0 +1,95 @@
++/*
++ * regsub
++ * @(#)regsub.c 1.3 of 2 April 86
++ *
++ * Copyright (c) 1986 by University of Toronto.
++ * Written by Henry Spencer. Not derived from licensed software.
++ *
++ * Permission is granted to anyone to use this software for any
++ * purpose on any computer system, and to redistribute it freely,
++ * subject to the following restrictions:
++ *
++ * 1. The author is not responsible for the consequences of use of
++ * this software, no matter how awful, even if they arise
++ * from defects in it.
++ *
++ * 2. The origin of this software must not be misrepresented, either
++ * by explicit claim or by omission.
++ *
++ * 3. Altered versions must be plainly marked as such, and must not
++ * be misrepresented as being the original software.
++ *
++ *
++ * This code was modified by Ethan Sommer to work within the kernel
++ * (it now uses kmalloc etc..)
++ *
++ */
++#include "regexp.h"
++#include "regmagic.h"
++#include <linux/string.h>
++
++
++#ifndef CHARBITS
++#define UCHARAT(p) ((int)*(unsigned char *)(p))
++#else
++#define UCHARAT(p) ((int)*(p)&CHARBITS)
++#endif
++
++#if 0
++//void regerror(char * s)
++//{
++// printk("regexp(3): %s", s);
++// /* NOTREACHED */
++//}
++#endif
++
++/*
++ - regsub - perform substitutions after a regexp match
++ */
++void
++regsub(regexp * prog, char * source, char * dest)
++{
++ register char *src;
++ register char *dst;
++ register char c;
++ register int no;
++ register int len;
++
++ /* Not necessary and gcc doesn't like it -MLS */
++ /*extern char *strncpy();*/
++
++ if (prog == NULL || source == NULL || dest == NULL) {
++ regerror("NULL parm to regsub");
++ return;
++ }
++ if (UCHARAT(prog->program) != MAGIC) {
++ regerror("damaged regexp fed to regsub");
++ return;
++ }
++
++ src = source;
++ dst = dest;
++ while ((c = *src++) != '\0') {
++ if (c == '&')
++ no = 0;
++ else if (c == '\\' && '0' <= *src && *src <= '9')
++ no = *src++ - '0';
++ else
++ no = -1;
++
++ if (no < 0) { /* Ordinary character. */
++ if (c == '\\' && (*src == '\\' || *src == '&'))
++ c = *src++;
++ *dst++ = c;
++ } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) {
++ len = prog->endp[no] - prog->startp[no];
++ (void) strncpy(dst, prog->startp[no], len);
++ dst += len;
++ if (len != 0 && *(dst-1) == '\0') { /* strncpy hit NUL. */
++ regerror("damaged match string");
++ return;
++ }
++ }
++ }
++ *dst++ = '\0';
++}
diff --git a/packages/linux/linux-magicbox-2.6.19.2/101-netfilter_layer7_pktmatch.patch b/packages/linux/linux-magicbox-2.6.19.2/101-netfilter_layer7_pktmatch.patch
new file mode 100644
index 0000000000..3d1e4819d6
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/101-netfilter_layer7_pktmatch.patch
@@ -0,0 +1,108 @@
+diff -ur linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h linux.dev2/include/linux/netfilter_ipv4/ipt_layer7.h
+--- linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h 2007-01-01 05:18:48.000000000 +0100
++++ linux.dev2/include/linux/netfilter_ipv4/ipt_layer7.h 2007-01-01 05:30:46.000000000 +0100
+@@ -21,6 +21,7 @@
+ char protocol[MAX_PROTOCOL_LEN];
+ char invert:1;
+ char pattern[MAX_PATTERN_LEN];
++ char pkt;
+ };
+
+ #endif /* _IPT_LAYER7_H */
+diff -ur linux.dev/net/ipv4/netfilter/ipt_layer7.c linux.dev2/net/ipv4/netfilter/ipt_layer7.c
+--- linux.dev/net/ipv4/netfilter/ipt_layer7.c 2007-01-01 05:18:48.000000000 +0100
++++ linux.dev2/net/ipv4/netfilter/ipt_layer7.c 2007-01-01 05:30:46.000000000 +0100
+@@ -296,33 +296,34 @@
+ }
+ }
+
+-/* add the new app data to the conntrack. Return number of bytes added. */
+-static int add_data(struct ip_conntrack * master_conntrack,
+- char * app_data, int appdatalen)
++static int add_datastr(char *target, int offset, char *app_data, int len)
+ {
+ int length = 0, i;
+- int oldlength = master_conntrack->layer7.app_data_len;
+-
+- // This is a fix for a race condition by Deti Fliegl. However, I'm not
+- // clear on whether the race condition exists or whether this really
+- // fixes it. I might just be being dense... Anyway, if it's not really
+- // a fix, all it does is waste a very small amount of time.
+- if(!master_conntrack->layer7.app_data) return 0;
++ if(!target) return 0;
+
+ /* Strip nulls. Make everything lower case (our regex lib doesn't
+ do case insensitivity). Add it to the end of the current data. */
+- for(i = 0; i < maxdatalen-oldlength-1 &&
+- i < appdatalen; i++) {
++ for(i = 0; i < maxdatalen-offset-1 && i < len; i++) {
+ if(app_data[i] != '\0') {
+- master_conntrack->layer7.app_data[length+oldlength] =
++ target[length+offset] =
+ /* the kernel version of tolower mungs 'upper ascii' */
+ isascii(app_data[i])? tolower(app_data[i]) : app_data[i];
+ length++;
+ }
+ }
++ target[length+offset] = '\0';
+
+- master_conntrack->layer7.app_data[length+oldlength] = '\0';
+- master_conntrack->layer7.app_data_len = length + oldlength;
++ return length;
++}
++
++/* add the new app data to the conntrack. Return number of bytes added. */
++static int add_data(struct ip_conntrack * master_conntrack,
++ char * app_data, int appdatalen)
++{
++ int length;
++
++ length = add_datastr(master_conntrack->layer7.app_data, master_conntrack->layer7.app_data_len, app_data, appdatalen);
++ master_conntrack->layer7.app_data_len += length;
+
+ return length;
+ }
+@@ -339,7 +340,7 @@
+ struct ipt_layer7_info * info = (struct ipt_layer7_info *)matchinfo;
+ enum ip_conntrack_info master_ctinfo, ctinfo;
+ struct ip_conntrack *master_conntrack, *conntrack;
+- unsigned char * app_data;
++ unsigned char *app_data, *tmp_data;
+ unsigned int pattern_result, appdatalen;
+ regexp * comppattern;
+
+@@ -362,8 +363,8 @@
+ master_conntrack = master_ct(master_conntrack);
+
+ /* if we've classified it or seen too many packets */
+- if(TOTAL_PACKETS > num_packets ||
+- master_conntrack->layer7.app_proto) {
++ if(!info->pkt && (TOTAL_PACKETS > num_packets ||
++ master_conntrack->layer7.app_proto)) {
+
+ pattern_result = match_no_append(conntrack, master_conntrack, ctinfo, master_ctinfo, info);
+
+@@ -394,6 +395,23 @@
+ comppattern = compile_and_cache(info->pattern, info->protocol);
+ spin_unlock_bh(&list_lock);
+
++ if (info->pkt) {
++ tmp_data = kmalloc(maxdatalen, GFP_ATOMIC);
++ if(!tmp_data){
++ if (net_ratelimit())
++ printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
++ return info->invert;
++ }
++
++ tmp_data[0] = '\0';
++ add_datastr(tmp_data, 0, app_data, appdatalen);
++ pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0);
++ kfree(tmp_data);
++ tmp_data = NULL;
++
++ return (pattern_result ^ info->invert);
++ }
++
+ /* On the first packet of a connection, allocate space for app data */
+ write_lock(&ct_lock);
+ if(TOTAL_PACKETS == 1 && !skb->cb[0] && !master_conntrack->layer7.app_data) {
diff --git a/packages/linux/linux-magicbox-2.6.19.2/110-ipp2p_0.8.1rc1.patch b/packages/linux/linux-magicbox-2.6.19.2/110-ipp2p_0.8.1rc1.patch
new file mode 100644
index 0000000000..e03f4d5676
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/110-ipp2p_0.8.1rc1.patch
@@ -0,0 +1,948 @@
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_ipp2p.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h 2006-12-14 03:13:39.000000000 +0100
+@@ -0,0 +1,31 @@
++#ifndef __IPT_IPP2P_H
++#define __IPT_IPP2P_H
++#define IPP2P_VERSION "0.8.1_rc1"
++
++struct ipt_p2p_info {
++ int cmd;
++ int debug;
++};
++
++#endif //__IPT_IPP2P_H
++
++#define SHORT_HAND_IPP2P 1 /* --ipp2p switch*/
++//#define SHORT_HAND_DATA 4 /* --ipp2p-data switch*/
++#define SHORT_HAND_NONE 5 /* no short hand*/
++
++#define IPP2P_EDK (1 << 1)
++#define IPP2P_DATA_KAZAA (1 << 2)
++#define IPP2P_DATA_EDK (1 << 3)
++#define IPP2P_DATA_DC (1 << 4)
++#define IPP2P_DC (1 << 5)
++#define IPP2P_DATA_GNU (1 << 6)
++#define IPP2P_GNU (1 << 7)
++#define IPP2P_KAZAA (1 << 8)
++#define IPP2P_BIT (1 << 9)
++#define IPP2P_APPLE (1 << 10)
++#define IPP2P_SOUL (1 << 11)
++#define IPP2P_WINMX (1 << 12)
++#define IPP2P_ARES (1 << 13)
++#define IPP2P_MUTE (1 << 14)
++#define IPP2P_WASTE (1 << 15)
++#define IPP2P_XDCC (1 << 16)
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_ipp2p.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_ipp2p.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_ipp2p.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_ipp2p.c 2006-12-14 03:13:39.000000000 +0100
+@@ -0,0 +1,881 @@
++#if defined(MODVERSIONS)
++#include <linux/modversions.h>
++#endif
++#include <linux/module.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/version.h>
++#include <linux/netfilter_ipv4/ipt_ipp2p.h>
++#include <net/tcp.h>
++#include <net/udp.h>
++
++#define get_u8(X,O) (*(__u8 *)(X + O))
++#define get_u16(X,O) (*(__u16 *)(X + O))
++#define get_u32(X,O) (*(__u32 *)(X + O))
++
++MODULE_AUTHOR("Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>");
++MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic.");
++MODULE_LICENSE("GPL");
++
++
++/*Search for UDP eDonkey/eMule/Kad commands*/
++int
++udp_search_edk (unsigned char *haystack, int packet_len)
++{
++ unsigned char *t = haystack;
++ t += 8;
++
++ switch (t[0]) {
++ case 0xe3:
++ { /*edonkey*/
++ switch (t[1])
++ {
++ /* client -> server status request */
++ case 0x96:
++ if (packet_len == 14) return ((IPP2P_EDK * 100) + 50);
++ break;
++ /* server -> client status request */
++ case 0x97: if (packet_len == 42) return ((IPP2P_EDK * 100) + 51);
++ break;
++ /* server description request */
++ /* e3 2a ff f0 .. | size == 6 */
++ case 0xa2: if ( (packet_len == 14) && ( get_u16(t,2) == __constant_htons(0xfff0) ) ) return ((IPP2P_EDK * 100) + 52);
++ break;
++ /* server description response */
++ /* e3 a3 ff f0 .. | size > 40 && size < 200 */
++ //case 0xa3: return ((IPP2P_EDK * 100) + 53);
++ // break;
++ case 0x9a: if (packet_len==26) return ((IPP2P_EDK * 100) + 54);
++ break;
++
++ case 0x92: if (packet_len==18) return ((IPP2P_EDK * 100) + 55);
++ break;
++ }
++ break;
++ }
++ case 0xe4:
++ {
++ switch (t[1])
++ {
++ /* e4 20 .. | size == 43 */
++ case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 60);
++ break;
++ /* e4 00 .. 00 | size == 35 ? */
++ case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 61);
++ break;
++ /* e4 10 .. 00 | size == 35 ? */
++ case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 62);
++ break;
++ /* e4 18 .. 00 | size == 35 ? */
++ case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 63);
++ break;
++ /* e4 52 .. | size = 44 */
++ case 0x52: if (packet_len == 44 ) return ((IPP2P_EDK * 100) + 64);
++ break;
++ /* e4 58 .. | size == 6 */
++ case 0x58: if (packet_len == 14 ) return ((IPP2P_EDK * 100) + 65);
++ break;
++ /* e4 59 .. | size == 2 */
++ case 0x59: if (packet_len == 10 )return ((IPP2P_EDK * 100) + 66);
++ break;
++ /* e4 28 .. | packet_len == 52,77,102,127... */
++ case 0x28: if (((packet_len-52) % 25) == 0) return ((IPP2P_EDK * 100) + 67);
++ break;
++ /* e4 50 xx xx | size == 4 */
++ case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 68);
++ break;
++ /* e4 40 xx xx | size == 48 */
++ case 0x40: if (packet_len == 56) return ((IPP2P_EDK * 100) + 69);
++ break;
++ }
++ break;
++ }
++ } /* end of switch (t[0]) */
++ return 0;
++}/*udp_search_edk*/
++
++
++/*Search for UDP Gnutella commands*/
++int
++udp_search_gnu (unsigned char *haystack, int packet_len)
++{
++ unsigned char *t = haystack;
++ t += 8;
++
++ if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 51);
++ if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 52);
++ return 0;
++}/*udp_search_gnu*/
++
++
++/*Search for UDP KaZaA commands*/
++int
++udp_search_kazaa (unsigned char *haystack, int packet_len)
++{
++ unsigned char *t = haystack;
++
++ if (t[packet_len-1] == 0x00){
++ t += (packet_len - 6);
++ if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100 +50);
++ }
++
++ return 0;
++}/*udp_search_kazaa*/
++
++/*Search for UDP DirectConnect commands*/
++int
++udp_search_directconnect (unsigned char *haystack, int packet_len)
++{
++ unsigned char *t = haystack;
++ if ((*(t + 8) == 0x24) && (*(t + packet_len - 1) == 0x7c)) {
++ t+=8;
++ if (memcmp(t, "SR ", 3) == 0) return ((IPP2P_DC * 100) + 60);
++ if (memcmp(t, "Ping ", 5) == 0) return ((IPP2P_DC * 100) + 61);
++ }
++ return 0;
++}/*udp_search_directconnect*/
++
++
++
++/*Search for UDP BitTorrent commands*/
++int
++udp_search_bit (unsigned char *haystack, int packet_len)
++{
++ switch(packet_len)
++ {
++ case 24:
++ /* ^ 00 00 04 17 27 10 19 80 */
++ if ((ntohl(get_u32(haystack, 8)) == 0x00000417) && (ntohl(get_u32(haystack, 12)) == 0x27101980))
++ return (IPP2P_BIT * 100 + 50);
++ break;
++ case 44:
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000400) && get_u32(haystack, 36) == __constant_htonl(0x00000104))
++ return (IPP2P_BIT * 100 + 51);
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000400))
++ return (IPP2P_BIT * 100 + 61);
++ break;
++ case 65:
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000404) && get_u32(haystack, 36) == __constant_htonl(0x00000104))
++ return (IPP2P_BIT * 100 + 52);
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000404))
++ return (IPP2P_BIT * 100 + 62);
++ break;
++ case 67:
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000406) && get_u32(haystack, 36) == __constant_htonl(0x00000104))
++ return (IPP2P_BIT * 100 + 53);
++ if (get_u32(haystack, 16) == __constant_htonl(0x00000406))
++ return (IPP2P_BIT * 100 + 63);
++ break;
++ case 211:
++ if (get_u32(haystack, 8) == __constant_htonl(0x00000405))
++ return (IPP2P_BIT * 100 + 54);
++ break;
++ case 29:
++ if ((get_u32(haystack, 8) == __constant_htonl(0x00000401)))
++ return (IPP2P_BIT * 100 + 55);
++ break;
++ case 52:
++ if (get_u32(haystack,8) == __constant_htonl(0x00000827) &&
++ get_u32(haystack,12) == __constant_htonl(0x37502950))
++ return (IPP2P_BIT * 100 + 80);
++ break;
++ default:
++ /* this packet does not have a constant size */
++ if (packet_len >= 40 && get_u32(haystack, 16) == __constant_htonl(0x00000402) && get_u32(haystack, 36) == __constant_htonl(0x00000104))
++ return (IPP2P_BIT * 100 + 56);
++ break;
++ }
++
++ /* some extra-bitcomet rules:
++ * "d1:" [a|r] "d2:id20:"
++ */
++ if (packet_len > 30 && get_u8(haystack, 8) == 'd' && get_u8(haystack, 9) == '1' && get_u8(haystack, 10) == ':' )
++ {
++ if (get_u8(haystack, 11) == 'a' || get_u8(haystack, 11) == 'r')
++ {
++ if (memcmp(haystack+12,"d2:id20:",8)==0)
++ return (IPP2P_BIT * 100 + 57);
++ }
++ }
++
++#if 0
++ /* bitlord rules */
++ /* packetlen must be bigger than 40 */
++ /* first 4 bytes are zero */
++ if (packet_len > 40 && get_u32(haystack, 8) == 0x00000000)
++ {
++ /* first rule: 00 00 00 00 01 00 00 xx xx xx xx 00 00 00 00*/
++ if (get_u32(haystack, 12) == 0x00000000 &&
++ get_u32(haystack, 16) == 0x00010000 &&
++ get_u32(haystack, 24) == 0x00000000 )
++ return (IPP2P_BIT * 100 + 71);
++
++ /* 00 01 00 00 0d 00 00 xx xx xx xx 00 00 00 00*/
++ if (get_u32(haystack, 12) == 0x00000001 &&
++ get_u32(haystack, 16) == 0x000d0000 &&
++ get_u32(haystack, 24) == 0x00000000 )
++ return (IPP2P_BIT * 100 + 71);
++
++
++ }
++#endif
++
++ return 0;
++}/*udp_search_bit*/
++
++
++
++/*Search for Ares commands*/
++//#define IPP2P_DEBUG_ARES
++int
++search_ares (const unsigned char *payload, const u16 plen)
++//int search_ares (unsigned char *haystack, int packet_len, int head_len)
++{
++// const unsigned char *t = haystack + head_len;
++
++ /* all ares packets start with */
++ if (payload[1] == 0 && (plen - payload[0]) == 3)
++ {
++ switch (payload[2])
++ {
++ case 0x5a:
++ /* ares connect */
++ if ( plen == 6 && payload[5] == 0x05 ) return ((IPP2P_ARES * 100) + 1);
++ break;
++ case 0x09:
++ /* ares search, min 3 chars --> 14 bytes
++ * lets define a search can be up to 30 chars --> max 34 bytes
++ */
++ if ( plen >= 14 && plen <= 34 ) return ((IPP2P_ARES * 100) + 1);
++ break;
++#ifdef IPP2P_DEBUG_ARES
++ default:
++ printk(KERN_DEBUG "Unknown Ares command %x recognized, len: %u \n", (unsigned int) payload[2],plen);
++#endif /* IPP2P_DEBUG_ARES */
++ }
++ }
++
++#if 0
++ /* found connect packet: 03 00 5a 04 03 05 */
++ /* new version ares 1.8: 03 00 5a xx xx 05 */
++ if ((plen) == 6){ /* possible connect command*/
++ if ((payload[0] == 0x03) && (payload[1] == 0x00) && (payload[2] == 0x5a) && (payload[5] == 0x05))
++ return ((IPP2P_ARES * 100) + 1);
++ }
++ if ((plen) == 60){ /* possible download command*/
++ if ((payload[59] == 0x0a) && (payload[58] == 0x0a)){
++ if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */
++ return ((IPP2P_ARES * 100) + 2);
++ }
++ }
++#endif
++
++ return 0;
++} /*search_ares*/
++
++/*Search for SoulSeek commands*/
++int
++search_soul (const unsigned char *payload, const u16 plen)
++{
++//#define IPP2P_DEBUG_SOUL
++ /* match: xx xx xx xx | xx = sizeof(payload) - 4 */
++ if (get_u32(payload, 0) == (plen - 4)){
++ const __u32 m=get_u32(payload, 4);
++ /* match 00 yy yy 00, yy can be everything */
++ if ( get_u8(payload, 4) == 0x00 && get_u8(payload, 7) == 0x00 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "0: Soulseek command 0x%x recognized\n",get_u32(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 1);
++ }
++
++ /* next match: 01 yy 00 00 | yy can be everything */
++ if ( get_u8(payload, 4) == 0x01 && get_u16(payload, 6) == 0x0000 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "1: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 2);
++ }
++
++ /* other soulseek commandos are: 1-5,7,9,13-18,22,23,26,28,35-37,40-46,50,51,60,62-69,91,92,1001 */
++ /* try to do this in an intelligent way */
++ /* get all small commandos */
++ switch(m)
++ {
++ case 7:
++ case 9:
++ case 22:
++ case 23:
++ case 26:
++ case 28:
++ case 50:
++ case 51:
++ case 60:
++ case 91:
++ case 92:
++ case 1001:
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "2: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 3);
++ }
++
++ if (m > 0 && m < 6 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "3: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 4);
++ }
++ if (m > 12 && m < 19 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "4: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 5);
++ }
++
++ if (m > 34 && m < 38 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "5: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 6);
++ }
++
++ if (m > 39 && m < 47 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "6: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 7);
++ }
++
++ if (m > 61 && m < 70 )
++ {
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "7: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 8);
++ }
++
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "unknown SOULSEEK command: 0x%x, first 16 bit: 0x%x, first 8 bit: 0x%x ,soulseek ???\n",get_u32(payload, 4),get_u16(payload, 4) >> 16,get_u8(payload, 4) >> 24);
++#endif /* IPP2P_DEBUG_SOUL */
++ }
++
++ /* match 14 00 00 00 01 yy 00 00 00 STRING(YY) 01 00 00 00 00 46|50 00 00 00 00 */
++ /* without size at the beginning !!! */
++ if ( get_u32(payload, 0) == 0x14 && get_u8(payload, 4) == 0x01 )
++ {
++ __u32 y=get_u32(payload, 5);
++ /* we need 19 chars + string */
++ if ( (y + 19) <= (plen) )
++ {
++ const unsigned char *w=payload+9+y;
++ if (get_u32(w, 0) == 0x01 && ( get_u16(w, 4) == 0x4600 || get_u16(w, 4) == 0x5000) && get_u32(w, 6) == 0x00);
++#ifdef IPP2P_DEBUG_SOUL
++ printk(KERN_DEBUG "Soulssek special client command recognized\n");
++#endif /* IPP2P_DEBUG_SOUL */
++ return ((IPP2P_SOUL * 100) + 9);
++ }
++ }
++ return 0;
++}
++
++
++/*Search for WinMX commands*/
++int
++search_winmx (const unsigned char *payload, const u16 plen)
++{
++//#define IPP2P_DEBUG_WINMX
++ if (((plen) == 4) && (memcmp(payload, "SEND", 4) == 0)) return ((IPP2P_WINMX * 100) + 1);
++ if (((plen) == 3) && (memcmp(payload, "GET", 3) == 0)) return ((IPP2P_WINMX * 100) + 2);
++ //if (packet_len < (head_len + 10)) return 0;
++ if (plen < 10) return 0;
++
++ if ((memcmp(payload, "SEND", 4) == 0) || (memcmp(payload, "GET", 3) == 0)){
++ u16 c=4;
++ const u16 end=plen-2;
++ u8 count=0;
++ while (c < end)
++ {
++ if (payload[c]== 0x20 && payload[c+1] == 0x22)
++ {
++ c++;
++ count++;
++ if (count>=2) return ((IPP2P_WINMX * 100) + 3);
++ }
++ c++;
++ }
++ }
++
++ if ( plen == 149 && payload[0] == '8' )
++ {
++#ifdef IPP2P_DEBUG_WINMX
++ printk(KERN_INFO "maybe WinMX\n");
++#endif
++ if (get_u32(payload,17) == 0 && get_u32(payload,21) == 0 && get_u32(payload,25) == 0 &&
++// get_u32(payload,33) == __constant_htonl(0x71182b1a) && get_u32(payload,37) == __constant_htonl(0x05050000) &&
++// get_u32(payload,133) == __constant_htonl(0x31097edf) && get_u32(payload,145) == __constant_htonl(0xdcb8f792))
++ get_u16(payload,39) == 0 && get_u16(payload,135) == __constant_htons(0x7edf) && get_u16(payload,147) == __constant_htons(0xf792))
++
++ {
++#ifdef IPP2P_DEBUG_WINMX
++ printk(KERN_INFO "got WinMX\n");
++#endif
++ return ((IPP2P_WINMX * 100) + 4);
++ }
++ }
++ return 0;
++} /*search_winmx*/
++
++
++/*Search for appleJuice commands*/
++int
++search_apple (const unsigned char *payload, const u16 plen)
++{
++ if ( (plen > 7) && (payload[6] == 0x0d) && (payload[7] == 0x0a) && (memcmp(payload, "ajprot", 6) == 0)) return (IPP2P_APPLE * 100);
++
++ return 0;
++}
++
++
++/*Search for BitTorrent commands*/
++int
++search_bittorrent (const unsigned char *payload, const u16 plen)
++{
++ if (plen > 20)
++ {
++ /* test for match 0x13+"BitTorrent protocol" */
++ if (payload[0] == 0x13)
++ {
++ if (memcmp(payload+1, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100);
++ }
++
++ /* get tracker commandos, all starts with GET /
++ * then it can follow: scrape| announce
++ * and then ?hash_info=
++ */
++ if (memcmp(payload,"GET /",5) == 0)
++ {
++ /* message scrape */
++ if ( memcmp(payload+5,"scrape?info_hash=",17)==0 ) return (IPP2P_BIT * 100 + 1);
++ /* message announce */
++ if ( memcmp(payload+5,"announce?info_hash=",19)==0 ) return (IPP2P_BIT * 100 + 2);
++ }
++ }
++ else
++ {
++ /* bitcomet encryptes the first packet, so we have to detect another
++ * one later in the flow */
++ /* first try failed, too many missdetections */
++ //if ( size == 5 && get_u32(t,0) == __constant_htonl(1) && t[4] < 3) return (IPP2P_BIT * 100 + 3);
++
++ /* second try: block request packets */
++ if ( plen == 17 && get_u32(payload,0) == __constant_htonl(0x0d) && payload[4] == 0x06 && get_u32(payload,13) == __constant_htonl(0x4000) ) return (IPP2P_BIT * 100 + 3);
++ }
++
++ return 0;
++}
++
++
++
++/*check for Kazaa get command*/
++int
++search_kazaa (const unsigned char *payload, const u16 plen)
++
++{
++ if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a) && memcmp(payload, "GET /.hash=", 11) == 0)
++ return (IPP2P_DATA_KAZAA * 100);
++
++ return 0;
++}
++
++
++/*check for gnutella get command*/
++int
++search_gnu (const unsigned char *payload, const u16 plen)
++{
++ if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
++ {
++ if (memcmp(payload, "GET /get/", 9) == 0) return ((IPP2P_DATA_GNU * 100) + 1);
++ if (memcmp(payload, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2);
++ }
++ return 0;
++}
++
++
++/*check for gnutella get commands and other typical data*/
++int
++search_all_gnu (const unsigned char *payload, const u16 plen)
++{
++
++ if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
++ {
++
++ if (memcmp(payload, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1);
++ if (memcmp(payload, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2);
++
++
++ if ((memcmp(payload, "GET /get/", 9) == 0) || (memcmp(payload, "GET /uri-res/", 13) == 0))
++ {
++ u16 c=8;
++ const u16 end=plen-22;
++ while (c < end) {
++ if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Gnutella-", 11) == 0) || (memcmp(&payload[c+2], "X-Queue:", 8) == 0)))
++ return ((IPP2P_GNU * 100) + 3);
++ c++;
++ }
++ }
++ }
++ return 0;
++}
++
++
++/*check for KaZaA download commands and other typical data*/
++int
++search_all_kazaa (const unsigned char *payload, const u16 plen)
++{
++ if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
++ {
++
++ if (memcmp(payload, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1);
++
++ if (memcmp(payload, "GET /", 5) == 0) {
++ u16 c = 8;
++ const u16 end=plen-22;
++ while (c < end) {
++ if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Kazaa-Username: ", 18) == 0) || (memcmp(&payload[c+2], "User-Agent: PeerEnabler/", 24) == 0)))
++ return ((IPP2P_KAZAA * 100) + 2);
++ c++;
++ }
++ }
++ }
++ return 0;
++}
++
++/*fast check for edonkey file segment transfer command*/
++int
++search_edk (const unsigned char *payload, const u16 plen)
++{
++ if (payload[0] != 0xe3)
++ return 0;
++ else {
++ if (payload[5] == 0x47)
++ return (IPP2P_DATA_EDK * 100);
++ else
++ return 0;
++ }
++}
++
++
++
++/*intensive but slower search for some edonkey packets including size-check*/
++int
++search_all_edk (const unsigned char *payload, const u16 plen)
++{
++ if (payload[0] != 0xe3)
++ return 0;
++ else {
++ //t += head_len;
++ const u16 cmd = get_u16(payload, 1);
++ if (cmd == (plen - 5)) {
++ switch (payload[5]) {
++ case 0x01: return ((IPP2P_EDK * 100) + 1); /*Client: hello or Server:hello*/
++ case 0x4c: return ((IPP2P_EDK * 100) + 9); /*Client: Hello-Answer*/
++ }
++ }
++ return 0;
++ }
++}
++
++
++/*fast check for Direct Connect send command*/
++int
++search_dc (const unsigned char *payload, const u16 plen)
++{
++
++ if (payload[0] != 0x24 )
++ return 0;
++ else {
++ if (memcmp(&payload[1], "Send|", 5) == 0)
++ return (IPP2P_DATA_DC * 100);
++ else
++ return 0;
++ }
++
++}
++
++
++/*intensive but slower check for all direct connect packets*/
++int
++search_all_dc (const unsigned char *payload, const u16 plen)
++{
++// unsigned char *t = haystack;
++
++ if (payload[0] == 0x24 && payload[plen-1] == 0x7c)
++ {
++ const unsigned char *t=&payload[1];
++ /* Client-Hub-Protocol */
++ if (memcmp(t, "Lock ", 5) == 0) return ((IPP2P_DC * 100) + 1);
++ /* Client-Client-Protocol, some are already recognized by client-hub (like lock) */
++ if (memcmp(t, "MyNick ", 7) == 0) return ((IPP2P_DC * 100) + 38);
++ }
++ return 0;
++}
++
++/*check for mute*/
++int
++search_mute (const unsigned char *payload, const u16 plen)
++{
++ if ( plen == 209 || plen == 345 || plen == 473 || plen == 609 || plen == 1121 )
++ {
++ //printk(KERN_DEBUG "size hit: %u",size);
++ if (memcmp(payload,"PublicKey: ",11) == 0 )
++ {
++ return ((IPP2P_MUTE * 100) + 0);
++
++/* if (memcmp(t+size-14,"\x0aEndPublicKey\x0a",14) == 0)
++ {
++ printk(KERN_DEBUG "end pubic key hit: %u",size);
++
++ }*/
++ }
++ }
++ return 0;
++}
++
++
++/* check for xdcc */
++int
++search_xdcc (const unsigned char *payload, const u16 plen)
++{
++ /* search in small packets only */
++ if (plen > 20 && plen < 200 && payload[plen-1] == 0x0a && payload[plen-2] == 0x0d && memcmp(payload,"PRIVMSG ",8) == 0)
++ {
++
++ u16 x=10;
++ const u16 end=plen - 13;
++
++ /* is seems to be a irc private massage, chedck for xdcc command */
++ while (x < end)
++ {
++ if (payload[x] == ':')
++ {
++ if ( memcmp(&payload[x+1],"xdcc send #",11) == 0 )
++ return ((IPP2P_XDCC * 100) + 0);
++ }
++ x++;
++ }
++ }
++ return 0;
++}
++
++/* search for waste */
++int search_waste(const unsigned char *payload, const u16 plen)
++{
++ if ( plen >= 8 && memcmp(payload,"GET.sha1:",9) == 0)
++ return ((IPP2P_WASTE * 100) + 0);
++
++ return 0;
++}
++
++
++static struct {
++ int command;
++ __u8 short_hand; /*for fucntions included in short hands*/
++ int packet_len;
++ int (*function_name) (const unsigned char *, const u16);
++} matchlist[] = {
++ {IPP2P_EDK,SHORT_HAND_IPP2P,20, &search_all_edk},
++// {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa},
++// {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk},
++// {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc},
++ {IPP2P_DC,SHORT_HAND_IPP2P,5, search_all_dc},
++// {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu},
++ {IPP2P_GNU,SHORT_HAND_IPP2P,5, &search_all_gnu},
++ {IPP2P_KAZAA,SHORT_HAND_IPP2P,5, &search_all_kazaa},
++ {IPP2P_BIT,SHORT_HAND_IPP2P,20, &search_bittorrent},
++ {IPP2P_APPLE,SHORT_HAND_IPP2P,5, &search_apple},
++ {IPP2P_SOUL,SHORT_HAND_IPP2P,5, &search_soul},
++ {IPP2P_WINMX,SHORT_HAND_IPP2P,2, &search_winmx},
++ {IPP2P_ARES,SHORT_HAND_IPP2P,5, &search_ares},
++ {IPP2P_MUTE,SHORT_HAND_NONE,200, &search_mute},
++ {IPP2P_WASTE,SHORT_HAND_NONE,5, &search_waste},
++ {IPP2P_XDCC,SHORT_HAND_NONE,5, &search_xdcc},
++ {0,0,0,NULL}
++};
++
++
++static struct {
++ int command;
++ __u8 short_hand; /*for fucntions included in short hands*/
++ int packet_len;
++ int (*function_name) (unsigned char *, int);
++} udp_list[] = {
++ {IPP2P_KAZAA,SHORT_HAND_IPP2P,14, &udp_search_kazaa},
++ {IPP2P_BIT,SHORT_HAND_IPP2P,23, &udp_search_bit},
++ {IPP2P_GNU,SHORT_HAND_IPP2P,11, &udp_search_gnu},
++ {IPP2P_EDK,SHORT_HAND_IPP2P,9, &udp_search_edk},
++ {IPP2P_DC,SHORT_HAND_IPP2P,12, &udp_search_directconnect},
++ {0,0,0,NULL}
++};
++
++
++static int
++match(const struct sk_buff *skb,
++ const struct net_device *in,
++ const struct net_device *out,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ const struct xt_match *match,
++#endif
++ const void *matchinfo,
++ int offset,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ unsigned int protoff,
++#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ const void *hdr,
++ u_int16_t datalen,
++#endif
++ int *hotdrop)
++{
++ const struct ipt_p2p_info *info = matchinfo;
++ unsigned char *haystack;
++ struct iphdr *ip = skb->nh.iph;
++ int p2p_result = 0, i = 0;
++// int head_len;
++ int hlen = ntohs(ip->tot_len)-(ip->ihl*4); /*hlen = packet-data length*/
++
++ /*must not be a fragment*/
++ if (offset) {
++ if (info->debug) printk("IPP2P.match: offset found %i \n",offset);
++ return 0;
++ }
++
++ /*make sure that skb is linear*/
++ if(skb_is_nonlinear(skb)){
++ if (info->debug) printk("IPP2P.match: nonlinear skb found\n");
++ return 0;
++ }
++
++
++ haystack=(char *)ip+(ip->ihl*4); /*haystack = packet data*/
++
++ switch (ip->protocol){
++ case IPPROTO_TCP: /*what to do with a TCP packet*/
++ {
++ struct tcphdr *tcph = (void *) ip + ip->ihl * 4;
++
++ if (tcph->fin) return 0; /*if FIN bit is set bail out*/
++ if (tcph->syn) return 0; /*if SYN bit is set bail out*/
++ if (tcph->rst) return 0; /*if RST bit is set bail out*/
++
++ haystack += tcph->doff * 4; /*get TCP-Header-Size*/
++ hlen -= tcph->doff * 4;
++ while (matchlist[i].command) {
++ if ((((info->cmd & matchlist[i].command) == matchlist[i].command) ||
++ ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) &&
++ (hlen > matchlist[i].packet_len)) {
++ p2p_result = matchlist[i].function_name(haystack, hlen);
++ if (p2p_result)
++ {
++ if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n",
++ p2p_result, NIPQUAD(ip->saddr),ntohs(tcph->source), NIPQUAD(ip->daddr),ntohs(tcph->dest),hlen);
++ return p2p_result;
++ }
++ }
++ i++;
++ }
++ return p2p_result;
++ }
++
++ case IPPROTO_UDP: /*what to do with an UDP packet*/
++ {
++ struct udphdr *udph = (void *) ip + ip->ihl * 4;
++
++ while (udp_list[i].command){
++ if ((((info->cmd & udp_list[i].command) == udp_list[i].command) ||
++ ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) &&
++ (hlen > udp_list[i].packet_len)) {
++ p2p_result = udp_list[i].function_name(haystack, hlen);
++ if (p2p_result){
++ if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n",
++ p2p_result, NIPQUAD(ip->saddr),ntohs(udph->source), NIPQUAD(ip->daddr),ntohs(udph->dest),hlen);
++ return p2p_result;
++ }
++ }
++ i++;
++ }
++ return p2p_result;
++ }
++
++ default: return 0;
++ }
++}
++
++
++
++static int
++checkentry(const char *tablename,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ const void *ip,
++ const struct xt_match *match,
++#else
++ const struct ipt_ip *ip,
++#endif
++ void *matchinfo,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
++ unsigned int matchsize,
++#endif
++ unsigned int hook_mask)
++{
++ /* Must specify -p tcp */
++/* if (ip->proto != IPPROTO_TCP || (ip->invflags & IPT_INV_PROTO)) {
++ * printk("ipp2p: Only works on TCP packets, use -p tcp\n");
++ * return 0;
++ * }*/
++ return 1;
++}
++
++
++
++
++static struct ipt_match ipp2p_match = {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ { NULL, NULL },
++ "ipp2p",
++ &match,
++ &checkentry,
++ NULL,
++ THIS_MODULE
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ .name = "ipp2p",
++ .match = &match,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ .matchsize = sizeof(struct ipt_p2p_info),
++#endif
++ .checkentry = &checkentry,
++ .me = THIS_MODULE,
++#endif
++};
++
++
++static int __init init(void)
++{
++ printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION);
++ return ipt_register_match(&ipp2p_match);
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_match(&ipp2p_match);
++ printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION);
++}
++
++module_init(init);
++module_exit(fini);
++
++
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Kconfig linux-2.6.19.dev/net/ipv4/netfilter/Kconfig
+--- linux-2.6.19.old/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:39.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:39.000000000 +0100
+@@ -248,6 +248,12 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP_NF_MATCH_IPP2P
++ tristate "IPP2P"
++ depends on IP_NF_IPTABLES
++ help
++ Module for matching traffic of various Peer-to-Peer applications
++
+ config IP_NF_MATCH_TOS
+ tristate "TOS match support"
+ depends on IP_NF_IPTABLES
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Makefile linux-2.6.19.dev/net/ipv4/netfilter/Makefile
+--- linux-2.6.19.old/net/ipv4/netfilter/Makefile 2006-12-14 03:13:39.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Makefile 2006-12-14 03:13:39.000000000 +0100
+@@ -62,7 +62,7 @@
+ obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
+ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
+ obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o
+-
++obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o
+ obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_layer7.o
+
+ # targets
diff --git a/packages/linux/linux-magicbox-2.6.19.2/120-openswan-2.4.0.kernel-2.6-natt.patch b/packages/linux/linux-magicbox-2.6.19.2/120-openswan-2.4.0.kernel-2.6-natt.patch
new file mode 100644
index 0000000000..2b4238c688
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/120-openswan-2.4.0.kernel-2.6-natt.patch
@@ -0,0 +1,171 @@
+diff -urN linux-2.6.19.old/include/net/xfrmudp.h linux-2.6.19.dev/include/net/xfrmudp.h
+--- linux-2.6.19.old/include/net/xfrmudp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/net/xfrmudp.h 2006-12-14 03:13:41.000000000 +0100
+@@ -0,0 +1,10 @@
++/*
++ * pointer to function for type that xfrm4_input wants, to permit
++ * decoupling of XFRM from udp.c
++ */
++#define HAVE_XFRM4_UDP_REGISTER
++
++typedef int (*xfrm4_rcv_encap_t)(struct sk_buff *skb, __u16 encap_type);
++extern int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func
++ , xfrm4_rcv_encap_t *oldfunc);
++extern int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func);
+diff -urN linux-2.6.19.old/net/ipv4/Kconfig linux-2.6.19.dev/net/ipv4/Kconfig
+--- linux-2.6.19.old/net/ipv4/Kconfig 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/Kconfig 2006-12-14 03:13:41.000000000 +0100
+@@ -273,6 +273,12 @@
+ Network), but can be distributed all over the Internet. If you want
+ to do that, say Y here and to "IP multicast routing" below.
+
++config IPSEC_NAT_TRAVERSAL
++ bool "IPSEC NAT-Traversal (KLIPS compatible)"
++ depends on INET
++ ---help---
++ Includes support for RFC3947/RFC3948 NAT-Traversal of ESP over UDP.
++
+ config IP_MROUTE
+ bool "IP: multicast routing"
+ depends on IP_MULTICAST
+diff -urN linux-2.6.19.old/net/ipv4/udp.c linux-2.6.19.dev/net/ipv4/udp.c
+--- linux-2.6.19.old/net/ipv4/udp.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/udp.c 2006-12-14 03:13:41.000000000 +0100
+@@ -108,11 +108,14 @@
+ #include <net/inet_common.h>
+ #include <net/checksum.h>
+ #include <net/xfrm.h>
++#include <net/xfrmudp.h>
+
+ /*
+ * Snmp MIB for the UDP layer
+ */
+
++static xfrm4_rcv_encap_t xfrm4_rcv_encap_func;
++
+ DEFINE_SNMP_STAT(struct udp_mib, udp_statistics) __read_mostly;
+
+ struct hlist_head udp_hash[UDP_HTABLE_SIZE];
+@@ -917,6 +920,42 @@
+ sk_common_release(sk);
+ }
+
++#if defined(CONFIG_XFRM) || defined(CONFIG_IPSEC_NAT_TRAVERSAL)
++
++/* if XFRM isn't a module, then register it directly. */
++#if 0 && !defined(CONFIG_XFRM_MODULE) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL)
++static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = xfrm4_rcv_encap;
++#else
++static xfrm4_rcv_encap_t xfrm4_rcv_encap_func = NULL;
++#endif
++
++int udp4_register_esp_rcvencap(xfrm4_rcv_encap_t func
++ , xfrm4_rcv_encap_t *oldfunc)
++{
++ if(oldfunc != NULL) {
++ *oldfunc = xfrm4_rcv_encap_func;
++ }
++
++#if 0
++ if(xfrm4_rcv_encap_func != NULL)
++ return -1;
++#endif
++
++ xfrm4_rcv_encap_func = func;
++ return 0;
++}
++
++int udp4_unregister_esp_rcvencap(xfrm4_rcv_encap_t func)
++{
++ if(xfrm4_rcv_encap_func != func)
++ return -1;
++
++ xfrm4_rcv_encap_func = NULL;
++ return 0;
++}
++#endif /* CONFIG_XFRM_MODULE || CONFIG_IPSEC_NAT_TRAVERSAL */
++
++
+ /* return:
+ * 1 if the the UDP system should process it
+ * 0 if we should drop this packet
+@@ -924,9 +963,9 @@
+ */
+ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
+ {
+-#ifndef CONFIG_XFRM
++#if !defined(CONFIG_XFRM) && !defined(CONFIG_IPSEC_NAT_TRAVERSAL)
+ return 1;
+-#else
++#else /* either CONFIG_XFRM or CONFIG_IPSEC_NAT_TRAVERSAL */
+ struct udp_sock *up = udp_sk(sk);
+ struct udphdr *uh;
+ struct iphdr *iph;
+@@ -939,11 +978,11 @@
+ /* if we're overly short, let UDP handle it */
+ len = skb->len - sizeof(struct udphdr);
+ if (len <= 0)
+- return 1;
++ return 2;
+
+ /* if this is not encapsulated socket, then just return now */
+ if (!encap_type)
+- return 1;
++ return 3;
+
+ /* If this is a paged skb, make sure we pull up
+ * whatever data we need to look at. */
+@@ -966,7 +1005,7 @@
+ len = sizeof(struct udphdr);
+ } else
+ /* Must be an IKE packet.. pass it through */
+- return 1;
++ return 4;
+ break;
+ case UDP_ENCAP_ESPINUDP_NON_IKE:
+ /* Check if this is a keepalive packet. If so, eat it. */
+@@ -979,7 +1018,7 @@
+ len = sizeof(struct udphdr) + 2 * sizeof(u32);
+ } else
+ /* Must be an IKE packet.. pass it through */
+- return 1;
++ return 5;
+ break;
+ }
+
+@@ -990,6 +1029,8 @@
+ */
+ if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
+ return 0;
++ if (skb_cloned(skb) && pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
++ return 0;
+
+ /* Now we can update and verify the packet length... */
+ iph = skb->nh.iph;
+@@ -1055,9 +1096,13 @@
+ return 0;
+ }
+ if (ret < 0) {
+- /* process the ESP packet */
+- ret = xfrm4_rcv_encap(skb, up->encap_type);
+- UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS);
++ if(xfrm4_rcv_encap_func != NULL) {
++ ret = (*xfrm4_rcv_encap_func)(skb, up->encap_type);
++ UDP_INC_STATS_BH(UDP_MIB_INDATAGRAMS);
++ } else {
++ UDP_INC_STATS_BH(UDP_MIB_INERRORS);
++ ret = 1;
++ }
+ return -ret;
+ }
+ /* FALLTHROUGH -- it's a UDP Packet */
+@@ -1639,3 +1684,9 @@
+ EXPORT_SYMBOL(udp_proc_register);
+ EXPORT_SYMBOL(udp_proc_unregister);
+ #endif
++
++#if defined(CONFIG_IPSEC_NAT_TRAVERSAL)
++EXPORT_SYMBOL(udp4_register_esp_rcvencap);
++EXPORT_SYMBOL(udp4_unregister_esp_rcvencap);
++#endif
++
diff --git a/packages/linux/linux-magicbox-2.6.19.2/130-netfilter-ipset.patch b/packages/linux/linux-magicbox-2.6.19.2/130-netfilter-ipset.patch
new file mode 100644
index 0000000000..8a35d8a6b4
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/130-netfilter-ipset.patch
@@ -0,0 +1,5851 @@
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,489 @@
++#ifndef _IP_SET_H
++#define _IP_SET_H
++
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Martin Josefsson <gandalf@wlug.westbo.se>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/*
++ * A sockopt of such quality has hardly ever been seen before on the open
++ * market! This little beauty, hardly ever used: above 64, so it's
++ * traditionally used for firewalling, not touched (even once!) by the
++ * 2.0, 2.2 and 2.4 kernels!
++ *
++ * Comes with its own certificate of authenticity, valid anywhere in the
++ * Free world!
++ *
++ * Rusty, 19.4.2000
++ */
++#define SO_IP_SET 83
++
++/*
++ * Heavily modify by Joakim Axelsson 08.03.2002
++ * - Made it more modulebased
++ *
++ * Additional heavy modifications by Jozsef Kadlecsik 22.02.2004
++ * - bindings added
++ * - in order to "deal with" backward compatibility, renamed to ipset
++ */
++
++/*
++ * Used so that the kernel module and ipset-binary can match their versions
++ */
++#define IP_SET_PROTOCOL_VERSION 2
++
++#define IP_SET_MAXNAMELEN 32 /* set names and set typenames */
++
++/* Lets work with our own typedef for representing an IP address.
++ * We hope to make the code more portable, possibly to IPv6...
++ *
++ * The representation works in HOST byte order, because most set types
++ * will perform arithmetic operations and compare operations.
++ *
++ * For now the type is an uint32_t.
++ *
++ * Make sure to ONLY use the functions when translating and parsing
++ * in order to keep the host byte order and make it more portable:
++ * parse_ip()
++ * parse_mask()
++ * parse_ipandmask()
++ * ip_tostring()
++ * (Joakim: where are they???)
++ */
++
++typedef uint32_t ip_set_ip_t;
++
++/* Sets are identified by an id in kernel space. Tweak with ip_set_id_t
++ * and IP_SET_INVALID_ID if you want to increase the max number of sets.
++ */
++typedef uint16_t ip_set_id_t;
++
++#define IP_SET_INVALID_ID 65535
++
++/* How deep we follow bindings */
++#define IP_SET_MAX_BINDINGS 6
++
++/*
++ * Option flags for kernel operations (ipt_set_info)
++ */
++#define IPSET_SRC 0x01 /* Source match/add */
++#define IPSET_DST 0x02 /* Destination match/add */
++#define IPSET_MATCH_INV 0x04 /* Inverse matching */
++
++/*
++ * Set types (flavours)
++ */
++#define IPSET_TYPE_IP 0 /* IP address type of set */
++#define IPSET_TYPE_PORT 1 /* Port type of set */
++
++/* Reserved keywords */
++#define IPSET_TOKEN_DEFAULT ":default:"
++#define IPSET_TOKEN_ALL ":all:"
++
++/* SO_IP_SET operation constants, and their request struct types.
++ *
++ * Operation ids:
++ * 0-99: commands with version checking
++ * 100-199: add/del/test/bind/unbind
++ * 200-299: list, save, restore
++ */
++
++/* Single shot operations:
++ * version, create, destroy, flush, rename and swap
++ *
++ * Sets are identified by name.
++ */
++
++#define IP_SET_REQ_STD \
++ unsigned op; \
++ unsigned version; \
++ char name[IP_SET_MAXNAMELEN]
++
++#define IP_SET_OP_CREATE 0x00000001 /* Create a new (empty) set */
++struct ip_set_req_create {
++ IP_SET_REQ_STD;
++ char typename[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_OP_DESTROY 0x00000002 /* Remove a (empty) set */
++struct ip_set_req_std {
++ IP_SET_REQ_STD;
++};
++
++#define IP_SET_OP_FLUSH 0x00000003 /* Remove all IPs in a set */
++/* Uses ip_set_req_std */
++
++#define IP_SET_OP_RENAME 0x00000004 /* Rename a set */
++/* Uses ip_set_req_create */
++
++#define IP_SET_OP_SWAP 0x00000005 /* Swap two sets */
++/* Uses ip_set_req_create */
++
++union ip_set_name_index {
++ char name[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++};
++
++#define IP_SET_OP_GET_BYNAME 0x00000006 /* Get set index by name */
++struct ip_set_req_get_set {
++ unsigned op;
++ unsigned version;
++ union ip_set_name_index set;
++};
++
++#define IP_SET_OP_GET_BYINDEX 0x00000007 /* Get set name by index */
++/* Uses ip_set_req_get_set */
++
++#define IP_SET_OP_VERSION 0x00000100 /* Ask kernel version */
++struct ip_set_req_version {
++ unsigned op;
++ unsigned version;
++};
++
++/* Double shots operations:
++ * add, del, test, bind and unbind.
++ *
++ * First we query the kernel to get the index and type of the target set,
++ * then issue the command. Validity of IP is checked in kernel in order
++ * to minimalize sockopt operations.
++ */
++
++/* Get minimal set data for add/del/test/bind/unbind IP */
++#define IP_SET_OP_ADT_GET 0x00000010 /* Get set and type */
++struct ip_set_req_adt_get {
++ unsigned op;
++ unsigned version;
++ union ip_set_name_index set;
++ char typename[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_REQ_BYINDEX \
++ unsigned op; \
++ ip_set_id_t index;
++
++struct ip_set_req_adt {
++ IP_SET_REQ_BYINDEX;
++};
++
++#define IP_SET_OP_ADD_IP 0x00000101 /* Add an IP to a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_DEL_IP 0x00000102 /* Remove an IP from a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_TEST_IP 0x00000103 /* Test an IP in a set */
++/* Uses ip_set_req_adt, with type specific addage */
++
++#define IP_SET_OP_BIND_SET 0x00000104 /* Bind an IP to a set */
++/* Uses ip_set_req_bind, with type specific addage */
++struct ip_set_req_bind {
++ IP_SET_REQ_BYINDEX;
++ char binding[IP_SET_MAXNAMELEN];
++};
++
++#define IP_SET_OP_UNBIND_SET 0x00000105 /* Unbind an IP from a set */
++/* Uses ip_set_req_bind, with type speficic addage
++ * index = 0 means unbinding for all sets */
++
++#define IP_SET_OP_TEST_BIND_SET 0x00000106 /* Test binding an IP to a set */
++/* Uses ip_set_req_bind, with type specific addage */
++
++/* Multiple shots operations: list, save, restore.
++ *
++ * - check kernel version and query the max number of sets
++ * - get the basic information on all sets
++ * and size required for the next step
++ * - get actual set data: header, data, bindings
++ */
++
++/* Get max_sets and the index of a queried set
++ */
++#define IP_SET_OP_MAX_SETS 0x00000020
++struct ip_set_req_max_sets {
++ unsigned op;
++ unsigned version;
++ ip_set_id_t max_sets; /* max_sets */
++ ip_set_id_t sets; /* real number of sets */
++ union ip_set_name_index set; /* index of set if name used */
++};
++
++/* Get the id and name of the sets plus size for next step */
++#define IP_SET_OP_LIST_SIZE 0x00000201
++#define IP_SET_OP_SAVE_SIZE 0x00000202
++struct ip_set_req_setnames {
++ unsigned op;
++ ip_set_id_t index; /* set to list/save */
++ size_t size; /* size to get setdata/bindings */
++ /* followed by sets number of struct ip_set_name_list */
++};
++
++struct ip_set_name_list {
++ char name[IP_SET_MAXNAMELEN];
++ char typename[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++ ip_set_id_t id;
++};
++
++/* The actual list operation */
++#define IP_SET_OP_LIST 0x00000203
++struct ip_set_req_list {
++ IP_SET_REQ_BYINDEX;
++ /* sets number of struct ip_set_list in reply */
++};
++
++struct ip_set_list {
++ ip_set_id_t index;
++ ip_set_id_t binding;
++ u_int32_t ref;
++ size_t header_size; /* Set header data of header_size */
++ size_t members_size; /* Set members data of members_size */
++ size_t bindings_size; /* Set bindings data of bindings_size */
++};
++
++struct ip_set_hash_list {
++ ip_set_ip_t ip;
++ ip_set_id_t binding;
++};
++
++/* The save operation */
++#define IP_SET_OP_SAVE 0x00000204
++/* Uses ip_set_req_list, in the reply replaced by
++ * sets number of struct ip_set_save plus a marker
++ * ip_set_save followed by ip_set_hash_save structures.
++ */
++struct ip_set_save {
++ ip_set_id_t index;
++ ip_set_id_t binding;
++ size_t header_size; /* Set header data of header_size */
++ size_t members_size; /* Set members data of members_size */
++};
++
++/* At restoring, ip == 0 means default binding for the given set: */
++struct ip_set_hash_save {
++ ip_set_ip_t ip;
++ ip_set_id_t id;
++ ip_set_id_t binding;
++};
++
++/* The restore operation */
++#define IP_SET_OP_RESTORE 0x00000205
++/* Uses ip_set_req_setnames followed by ip_set_restore structures
++ * plus a marker ip_set_restore, followed by ip_set_hash_save
++ * structures.
++ */
++struct ip_set_restore {
++ char name[IP_SET_MAXNAMELEN];
++ char typename[IP_SET_MAXNAMELEN];
++ ip_set_id_t index;
++ size_t header_size; /* Create data of header_size */
++ size_t members_size; /* Set members data of members_size */
++};
++
++static inline int bitmap_bytes(ip_set_ip_t a, ip_set_ip_t b)
++{
++ return 4 * ((((b - a + 8) / 8) + 3) / 4);
++}
++
++#ifdef __KERNEL__
++
++#define ip_set_printk(format, args...) \
++ do { \
++ printk("%s: %s: ", __FILE__, __FUNCTION__); \
++ printk(format "\n" , ## args); \
++ } while (0)
++
++#if defined(IP_SET_DEBUG)
++#define DP(format, args...) \
++ do { \
++ printk("%s: %s (DBG): ", __FILE__, __FUNCTION__);\
++ printk(format "\n" , ## args); \
++ } while (0)
++#define IP_SET_ASSERT(x) \
++ do { \
++ if (!(x)) \
++ printk("IP_SET_ASSERT: %s:%i(%s)\n", \
++ __FILE__, __LINE__, __FUNCTION__); \
++ } while (0)
++#else
++#define DP(format, args...)
++#define IP_SET_ASSERT(x)
++#endif
++
++struct ip_set;
++
++/*
++ * The ip_set_type definition - one per set type, e.g. "ipmap".
++ *
++ * Each individual set has a pointer, set->type, going to one
++ * of these structures. Function pointers inside the structure implement
++ * the real behaviour of the sets.
++ *
++ * If not mentioned differently, the implementation behind the function
++ * pointers of a set_type, is expected to return 0 if ok, and a negative
++ * errno (e.g. -EINVAL) on error.
++ */
++struct ip_set_type {
++ struct list_head list; /* next in list of set types */
++
++ /* test for IP in set (kernel: iptables -m set src|dst)
++ * return 0 if not in set, 1 if in set.
++ */
++ int (*testip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* test for IP in set (userspace: ipset -T set IP)
++ * return 0 if not in set, 1 if in set.
++ */
++ int (*testip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /*
++ * Size of the data structure passed by when
++ * adding/deletin/testing an entry.
++ */
++ size_t reqsize;
++
++ /* Add IP into set (userspace: ipset -A set IP)
++ * Return -EEXIST if the address is already in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address was not already in the set, 0 is returned.
++ */
++ int (*addip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /* Add IP into set (kernel: iptables ... -j SET set src|dst)
++ * Return -EEXIST if the address is already in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address was not already in the set, 0 is returned.
++ */
++ int (*addip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* remove IP from set (userspace: ipset -D set --entry x)
++ * Return -EEXIST if the address is NOT in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address really was in the set, 0 is returned.
++ */
++ int (*delip) (struct ip_set *set,
++ const void *data, size_t size,
++ ip_set_ip_t *ip);
++
++ /* remove IP from set (kernel: iptables ... -j SET --entry x)
++ * Return -EEXIST if the address is NOT in the set,
++ * and -ERANGE if the address lies outside the set bounds.
++ * If the address really was in the set, 0 is returned.
++ */
++ int (*delip_kernel) (struct ip_set *set,
++ const struct sk_buff * skb,
++ u_int32_t flags,
++ ip_set_ip_t *ip);
++
++ /* new set creation - allocated type specific items
++ */
++ int (*create) (struct ip_set *set,
++ const void *data, size_t size);
++
++ /* retry the operation after successfully tweaking the set
++ */
++ int (*retry) (struct ip_set *set);
++
++ /* set destruction - free type specific items
++ * There is no return value.
++ * Can be called only when child sets are destroyed.
++ */
++ void (*destroy) (struct ip_set *set);
++
++ /* set flushing - reset all bits in the set, or something similar.
++ * There is no return value.
++ */
++ void (*flush) (struct ip_set *set);
++
++ /* Listing: size needed for header
++ */
++ size_t header_size;
++
++ /* Listing: Get the header
++ *
++ * Fill in the information in "data".
++ * This function is always run after list_header_size() under a
++ * writelock on the set. Therefor is the length of "data" always
++ * correct.
++ */
++ void (*list_header) (const struct ip_set *set,
++ void *data);
++
++ /* Listing: Get the size for the set members
++ */
++ int (*list_members_size) (const struct ip_set *set);
++
++ /* Listing: Get the set members
++ *
++ * Fill in the information in "data".
++ * This function is always run after list_member_size() under a
++ * writelock on the set. Therefor is the length of "data" always
++ * correct.
++ */
++ void (*list_members) (const struct ip_set *set,
++ void *data);
++
++ char typename[IP_SET_MAXNAMELEN];
++ char typecode;
++ int protocol_version;
++
++ /* Set this to THIS_MODULE if you are a module, otherwise NULL */
++ struct module *me;
++};
++
++extern int ip_set_register_set_type(struct ip_set_type *set_type);
++extern void ip_set_unregister_set_type(struct ip_set_type *set_type);
++
++/* A generic ipset */
++struct ip_set {
++ char name[IP_SET_MAXNAMELEN]; /* the name of the set */
++ rwlock_t lock; /* lock for concurrency control */
++ ip_set_id_t id; /* set id for swapping */
++ ip_set_id_t binding; /* default binding for the set */
++ atomic_t ref; /* in kernel and in hash references */
++ struct ip_set_type *type; /* the set types */
++ void *data; /* pooltype specific data */
++};
++
++/* Structure to bind set elements to sets */
++struct ip_set_hash {
++ struct list_head list; /* list of clashing entries in hash */
++ ip_set_ip_t ip; /* ip from set */
++ ip_set_id_t id; /* set id */
++ ip_set_id_t binding; /* set we bind the element to */
++};
++
++/* register and unregister set references */
++extern ip_set_id_t ip_set_get_byname(const char name[IP_SET_MAXNAMELEN]);
++extern ip_set_id_t ip_set_get_byindex(ip_set_id_t id);
++extern void ip_set_put(ip_set_id_t id);
++
++/* API for iptables set match, and SET target */
++extern void ip_set_addip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++extern void ip_set_delip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++extern int ip_set_testip_kernel(ip_set_id_t id,
++ const struct sk_buff *skb,
++ const u_int32_t *flags);
++
++#endif /* __KERNEL__ */
++
++#endif /*_IP_SET_H*/
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_iphash.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_iphash.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_iphash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_iphash.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,30 @@
++#ifndef __IP_SET_IPHASH_H
++#define __IP_SET_IPHASH_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "iphash"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_iphash {
++ ip_set_ip_t *members; /* the iphash proper */
++ uint32_t initval; /* initval for jhash_1word */
++ uint32_t prime; /* prime for double hashing */
++ uint32_t hashsize; /* hash size */
++ uint16_t probes; /* max number of probes */
++ uint16_t resize; /* resize factor in percent */
++ ip_set_ip_t netmask; /* netmask */
++};
++
++struct ip_set_req_iphash_create {
++ uint32_t hashsize;
++ uint16_t probes;
++ uint16_t resize;
++ ip_set_ip_t netmask;
++};
++
++struct ip_set_req_iphash {
++ ip_set_ip_t ip;
++};
++
++#endif /* __IP_SET_IPHASH_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_ipmap.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_ipmap.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_ipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_ipmap.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,56 @@
++#ifndef __IP_SET_IPMAP_H
++#define __IP_SET_IPMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "ipmap"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_ipmap {
++ void *members; /* the ipmap proper */
++ ip_set_ip_t first_ip; /* host byte order, included in range */
++ ip_set_ip_t last_ip; /* host byte order, included in range */
++ ip_set_ip_t netmask; /* subnet netmask */
++ ip_set_ip_t sizeid; /* size of set in IPs */
++ u_int16_t hosts; /* number of hosts in a subnet */
++};
++
++struct ip_set_req_ipmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++ ip_set_ip_t netmask;
++};
++
++struct ip_set_req_ipmap {
++ ip_set_ip_t ip;
++};
++
++unsigned int
++mask_to_bits(ip_set_ip_t mask)
++{
++ unsigned int bits = 32;
++ ip_set_ip_t maskaddr;
++
++ if (mask == 0xFFFFFFFF)
++ return bits;
++
++ maskaddr = 0xFFFFFFFE;
++ while (--bits >= 0 && maskaddr != mask)
++ maskaddr <<= 1;
++
++ return bits;
++}
++
++ip_set_ip_t
++range_to_mask(ip_set_ip_t from, ip_set_ip_t to, unsigned int *bits)
++{
++ ip_set_ip_t mask = 0xFFFFFFFE;
++
++ *bits = 32;
++ while (--(*bits) >= 0 && mask && (to & mask) != from)
++ mask <<= 1;
++
++ return mask;
++}
++
++#endif /* __IP_SET_IPMAP_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_iptree.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_iptree.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_iptree.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_iptree.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,39 @@
++#ifndef __IP_SET_IPTREE_H
++#define __IP_SET_IPTREE_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "iptree"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_iptreed {
++ unsigned long expires[255]; /* x.x.x.ADDR */
++};
++
++struct ip_set_iptreec {
++ struct ip_set_iptreed *tree[255]; /* x.x.ADDR.* */
++};
++
++struct ip_set_iptreeb {
++ struct ip_set_iptreec *tree[255]; /* x.ADDR.*.* */
++};
++
++struct ip_set_iptree {
++ unsigned int timeout;
++ unsigned int gc_interval;
++#ifdef __KERNEL__
++ struct timer_list gc;
++ struct ip_set_iptreeb *tree[255]; /* ADDR.*.*.* */
++#endif
++};
++
++struct ip_set_req_iptree_create {
++ unsigned int timeout;
++};
++
++struct ip_set_req_iptree {
++ ip_set_ip_t ip;
++ unsigned int timeout;
++};
++
++#endif /* __IP_SET_IPTREE_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_jhash.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_jhash.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_jhash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_jhash.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,148 @@
++#ifndef _LINUX_IPSET_JHASH_H
++#define _LINUX_IPSET_JHASH_H
++
++/* This is a copy of linux/jhash.h but the types u32/u8 are changed
++ * to __u32/__u8 so that the header file can be included into
++ * userspace code as well. Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
++ */
++
++/* jhash.h: Jenkins hash support.
++ *
++ * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
++ *
++ * http://burtleburtle.net/bob/hash/
++ *
++ * These are the credits from Bob's sources:
++ *
++ * lookup2.c, by Bob Jenkins, December 1996, Public Domain.
++ * hash(), hash2(), hash3, and mix() are externally useful functions.
++ * Routines to test the hash are included if SELF_TEST is defined.
++ * You can use this free for any purpose. It has no warranty.
++ *
++ * Copyright (C) 2003 David S. Miller (davem@redhat.com)
++ *
++ * I've modified Bob's hash to be useful in the Linux kernel, and
++ * any bugs present are surely my fault. -DaveM
++ */
++
++/* NOTE: Arguments are modified. */
++#define __jhash_mix(a, b, c) \
++{ \
++ a -= b; a -= c; a ^= (c>>13); \
++ b -= c; b -= a; b ^= (a<<8); \
++ c -= a; c -= b; c ^= (b>>13); \
++ a -= b; a -= c; a ^= (c>>12); \
++ b -= c; b -= a; b ^= (a<<16); \
++ c -= a; c -= b; c ^= (b>>5); \
++ a -= b; a -= c; a ^= (c>>3); \
++ b -= c; b -= a; b ^= (a<<10); \
++ c -= a; c -= b; c ^= (b>>15); \
++}
++
++/* The golden ration: an arbitrary value */
++#define JHASH_GOLDEN_RATIO 0x9e3779b9
++
++/* The most generic version, hashes an arbitrary sequence
++ * of bytes. No alignment or length assumptions are made about
++ * the input key.
++ */
++static inline __u32 jhash(void *key, __u32 length, __u32 initval)
++{
++ __u32 a, b, c, len;
++ __u8 *k = key;
++
++ len = length;
++ a = b = JHASH_GOLDEN_RATIO;
++ c = initval;
++
++ while (len >= 12) {
++ a += (k[0] +((__u32)k[1]<<8) +((__u32)k[2]<<16) +((__u32)k[3]<<24));
++ b += (k[4] +((__u32)k[5]<<8) +((__u32)k[6]<<16) +((__u32)k[7]<<24));
++ c += (k[8] +((__u32)k[9]<<8) +((__u32)k[10]<<16)+((__u32)k[11]<<24));
++
++ __jhash_mix(a,b,c);
++
++ k += 12;
++ len -= 12;
++ }
++
++ c += length;
++ switch (len) {
++ case 11: c += ((__u32)k[10]<<24);
++ case 10: c += ((__u32)k[9]<<16);
++ case 9 : c += ((__u32)k[8]<<8);
++ case 8 : b += ((__u32)k[7]<<24);
++ case 7 : b += ((__u32)k[6]<<16);
++ case 6 : b += ((__u32)k[5]<<8);
++ case 5 : b += k[4];
++ case 4 : a += ((__u32)k[3]<<24);
++ case 3 : a += ((__u32)k[2]<<16);
++ case 2 : a += ((__u32)k[1]<<8);
++ case 1 : a += k[0];
++ };
++
++ __jhash_mix(a,b,c);
++
++ return c;
++}
++
++/* A special optimized version that handles 1 or more of __u32s.
++ * The length parameter here is the number of __u32s in the key.
++ */
++static inline __u32 jhash2(__u32 *k, __u32 length, __u32 initval)
++{
++ __u32 a, b, c, len;
++
++ a = b = JHASH_GOLDEN_RATIO;
++ c = initval;
++ len = length;
++
++ while (len >= 3) {
++ a += k[0];
++ b += k[1];
++ c += k[2];
++ __jhash_mix(a, b, c);
++ k += 3; len -= 3;
++ }
++
++ c += length * 4;
++
++ switch (len) {
++ case 2 : b += k[1];
++ case 1 : a += k[0];
++ };
++
++ __jhash_mix(a,b,c);
++
++ return c;
++}
++
++
++/* A special ultra-optimized versions that knows they are hashing exactly
++ * 3, 2 or 1 word(s).
++ *
++ * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
++ * done at the end is not done here.
++ */
++static inline __u32 jhash_3words(__u32 a, __u32 b, __u32 c, __u32 initval)
++{
++ a += JHASH_GOLDEN_RATIO;
++ b += JHASH_GOLDEN_RATIO;
++ c += initval;
++
++ __jhash_mix(a, b, c);
++
++ return c;
++}
++
++static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval)
++{
++ return jhash_3words(a, b, 0, initval);
++}
++
++static inline __u32 jhash_1word(__u32 a, __u32 initval)
++{
++ return jhash_3words(a, 0, 0, initval);
++}
++
++#endif /* _LINUX_IPSET_JHASH_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_macipmap.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_macipmap.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_macipmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_macipmap.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,38 @@
++#ifndef __IP_SET_MACIPMAP_H
++#define __IP_SET_MACIPMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "macipmap"
++#define MAX_RANGE 0x0000FFFF
++
++/* general flags */
++#define IPSET_MACIP_MATCHUNSET 1
++
++/* per ip flags */
++#define IPSET_MACIP_ISSET 1
++
++struct ip_set_macipmap {
++ void *members; /* the macipmap proper */
++ ip_set_ip_t first_ip; /* host byte order, included in range */
++ ip_set_ip_t last_ip; /* host byte order, included in range */
++ u_int32_t flags;
++};
++
++struct ip_set_req_macipmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++ u_int32_t flags;
++};
++
++struct ip_set_req_macipmap {
++ ip_set_ip_t ip;
++ unsigned char ethernet[ETH_ALEN];
++};
++
++struct ip_set_macip {
++ unsigned short flags;
++ unsigned char ethernet[ETH_ALEN];
++};
++
++#endif /* __IP_SET_MACIPMAP_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_malloc.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_malloc.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_malloc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_malloc.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,42 @@
++#ifndef _IP_SET_MALLOC_H
++#define _IP_SET_MALLOC_H
++
++#ifdef __KERNEL__
++
++/* Memory allocation and deallocation */
++static size_t max_malloc_size = 0;
++
++static inline void init_max_malloc_size(void)
++{
++#define CACHE(x) max_malloc_size = x;
++#include <linux/kmalloc_sizes.h>
++#undef CACHE
++}
++
++static inline void * ip_set_malloc_atomic(size_t bytes)
++{
++ if (bytes > max_malloc_size)
++ return __vmalloc(bytes, GFP_ATOMIC, PAGE_KERNEL);
++ else
++ return kmalloc(bytes, GFP_ATOMIC);
++}
++
++static inline void * ip_set_malloc(size_t bytes)
++{
++ if (bytes > max_malloc_size)
++ return vmalloc(bytes);
++ else
++ return kmalloc(bytes, GFP_KERNEL);
++}
++
++static inline void ip_set_free(void * data, size_t bytes)
++{
++ if (bytes > max_malloc_size)
++ vfree(data);
++ else
++ kfree(data);
++}
++
++#endif /* __KERNEL__ */
++
++#endif /*_IP_SET_MALLOC_H*/
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_nethash.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_nethash.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_nethash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_nethash.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,55 @@
++#ifndef __IP_SET_NETHASH_H
++#define __IP_SET_NETHASH_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "nethash"
++#define MAX_RANGE 0x0000FFFF
++
++struct ip_set_nethash {
++ ip_set_ip_t *members; /* the nethash proper */
++ uint32_t initval; /* initval for jhash_1word */
++ uint32_t prime; /* prime for double hashing */
++ uint32_t hashsize; /* hash size */
++ uint16_t probes; /* max number of probes */
++ uint16_t resize; /* resize factor in percent */
++ unsigned char cidr[30]; /* CIDR sizes */
++};
++
++struct ip_set_req_nethash_create {
++ uint32_t hashsize;
++ uint16_t probes;
++ uint16_t resize;
++};
++
++struct ip_set_req_nethash {
++ ip_set_ip_t ip;
++ unsigned char cidr;
++};
++
++static unsigned char shifts[] = {255, 253, 249, 241, 225, 193, 129, 1};
++
++static inline ip_set_ip_t
++pack(ip_set_ip_t ip, unsigned char cidr)
++{
++ ip_set_ip_t addr, *paddr = &addr;
++ unsigned char n, t, *a;
++
++ addr = htonl(ip & (0xFFFFFFFF << (32 - (cidr))));
++#ifdef __KERNEL__
++ DP("ip:%u.%u.%u.%u/%u", NIPQUAD(addr), cidr);
++#endif
++ n = cidr / 8;
++ t = cidr % 8;
++ a = &((unsigned char *)paddr)[n];
++ *a = *a /(1 << (8 - t)) + shifts[t];
++#ifdef __KERNEL__
++ DP("n: %u, t: %u, a: %u", n, t, *a);
++ DP("ip:%u.%u.%u.%u/%u, %u.%u.%u.%u",
++ HIPQUAD(ip), cidr, NIPQUAD(addr));
++#endif
++
++ return ntohl(addr);
++}
++
++#endif /* __IP_SET_NETHASH_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_portmap.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_portmap.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_portmap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_portmap.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef __IP_SET_PORTMAP_H
++#define __IP_SET_PORTMAP_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++#define SETTYPE_NAME "portmap"
++#define MAX_RANGE 0x0000FFFF
++#define INVALID_PORT (MAX_RANGE + 1)
++
++struct ip_set_portmap {
++ void *members; /* the portmap proper */
++ ip_set_ip_t first_port; /* host byte order, included in range */
++ ip_set_ip_t last_port; /* host byte order, included in range */
++};
++
++struct ip_set_req_portmap_create {
++ ip_set_ip_t from;
++ ip_set_ip_t to;
++};
++
++struct ip_set_req_portmap {
++ ip_set_ip_t port;
++};
++
++#endif /* __IP_SET_PORTMAP_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_prime.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_prime.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_set_prime.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_set_prime.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,34 @@
++#ifndef __IP_SET_PRIME_H
++#define __IP_SET_PRIME_H
++
++static inline unsigned make_prime_bound(unsigned nr)
++{
++ unsigned long long nr64 = nr;
++ unsigned long long x = 1;
++ nr = 1;
++ while (x <= nr64) { x <<= 2; nr <<= 1; }
++ return nr;
++}
++
++static inline int make_prime_check(unsigned nr)
++{
++ unsigned x = 3;
++ unsigned b = make_prime_bound(nr);
++ while (x <= b) {
++ if (0 == (nr % x)) return 0;
++ x += 2;
++ }
++ return 1;
++}
++
++static unsigned make_prime(unsigned nr)
++{
++ if (0 == (nr & 1)) nr--;
++ while (nr > 1) {
++ if (make_prime_check(nr)) return nr;
++ nr -= 2;
++ }
++ return 2;
++}
++
++#endif /* __IP_SET_PRIME_H */
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_set.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_set.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_set.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,21 @@
++#ifndef _IPT_SET_H
++#define _IPT_SET_H
++
++#include <linux/netfilter_ipv4/ip_set.h>
++
++struct ipt_set_info {
++ ip_set_id_t index;
++ u_int32_t flags[IP_SET_MAX_BINDINGS + 1];
++};
++
++/* match info */
++struct ipt_set_info_match {
++ struct ipt_set_info match_set;
++};
++
++struct ipt_set_info_target {
++ struct ipt_set_info add_set;
++ struct ipt_set_info del_set;
++};
++
++#endif /*_IPT_SET_H*/
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/listhelp.h linux-2.6.19.dev/include/linux/netfilter_ipv4/listhelp.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/listhelp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/listhelp.h 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,123 @@
++#ifndef _LISTHELP_H
++#define _LISTHELP_H
++#include <linux/list.h>
++
++/* Header to do more comprehensive job than linux/list.h; assume list
++ is first entry in structure. */
++
++/* Return pointer to first true entry, if any, or NULL. A macro
++ required to allow inlining of cmpfn. */
++#define LIST_FIND(head, cmpfn, type, args...) \
++({ \
++ const struct list_head *__i, *__j = NULL; \
++ \
++ ASSERT_READ_LOCK(head); \
++ list_for_each(__i, (head)) \
++ if (cmpfn((const type)__i , ## args)) { \
++ __j = __i; \
++ break; \
++ } \
++ (type)__j; \
++})
++
++#define LIST_FIND_W(head, cmpfn, type, args...) \
++({ \
++ const struct list_head *__i, *__j = NULL; \
++ \
++ ASSERT_WRITE_LOCK(head); \
++ list_for_each(__i, (head)) \
++ if (cmpfn((type)__i , ## args)) { \
++ __j = __i; \
++ break; \
++ } \
++ (type)__j; \
++})
++
++/* Just like LIST_FIND but we search backwards */
++#define LIST_FIND_B(head, cmpfn, type, args...) \
++({ \
++ const struct list_head *__i, *__j = NULL; \
++ \
++ ASSERT_READ_LOCK(head); \
++ list_for_each_prev(__i, (head)) \
++ if (cmpfn((const type)__i , ## args)) { \
++ __j = __i; \
++ break; \
++ } \
++ (type)__j; \
++})
++
++static inline int
++__list_cmp_same(const void *p1, const void *p2) { return p1 == p2; }
++
++/* Is this entry in the list? */
++static inline int
++list_inlist(struct list_head *head, const void *entry)
++{
++ return LIST_FIND(head, __list_cmp_same, void *, entry) != NULL;
++}
++
++/* Delete from list. */
++#ifdef CONFIG_NETFILTER_DEBUG
++#define LIST_DELETE(head, oldentry) \
++do { \
++ ASSERT_WRITE_LOCK(head); \
++ if (!list_inlist(head, oldentry)) \
++ printk("LIST_DELETE: %s:%u `%s'(%p) not in %s.\n", \
++ __FILE__, __LINE__, #oldentry, oldentry, #head); \
++ else list_del((struct list_head *)oldentry); \
++} while(0)
++#else
++#define LIST_DELETE(head, oldentry) list_del((struct list_head *)oldentry)
++#endif
++
++/* Append. */
++static inline void
++list_append(struct list_head *head, void *new)
++{
++ ASSERT_WRITE_LOCK(head);
++ list_add((new), (head)->prev);
++}
++
++/* Prepend. */
++static inline void
++list_prepend(struct list_head *head, void *new)
++{
++ ASSERT_WRITE_LOCK(head);
++ list_add(new, head);
++}
++
++/* Insert according to ordering function; insert before first true. */
++#define LIST_INSERT(head, new, cmpfn) \
++do { \
++ struct list_head *__i; \
++ ASSERT_WRITE_LOCK(head); \
++ list_for_each(__i, (head)) \
++ if ((new), (typeof (new))__i) \
++ break; \
++ list_add((struct list_head *)(new), __i->prev); \
++} while(0)
++
++/* If the field after the list_head is a nul-terminated string, you
++ can use these functions. */
++static inline int __list_cmp_name(const void *i, const char *name)
++{
++ return strcmp(name, i+sizeof(struct list_head)) == 0;
++}
++
++/* Returns false if same name already in list, otherwise does insert. */
++static inline int
++list_named_insert(struct list_head *head, void *new)
++{
++ if (LIST_FIND(head, __list_cmp_name, void *,
++ new + sizeof(struct list_head)))
++ return 0;
++ list_prepend(head, new);
++ return 1;
++}
++
++/* Find this named element in the list. */
++#define list_named_find(head, name) \
++LIST_FIND(head, __list_cmp_name, void *, name)
++
++#endif /*_LISTHELP_H*/
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,1989 @@
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module for IP set management */
++
++#include <linux/autoconf.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kmod.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/random.h>
++#include <linux/jhash.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <asm/semaphore.h>
++#include <linux/spinlock.h>
++#include <linux/vmalloc.h>
++
++#define ASSERT_READ_LOCK(x) /* dont use that */
++#define ASSERT_WRITE_LOCK(x)
++#include <linux/netfilter_ipv4/listhelp.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++
++static struct list_head set_type_list; /* all registered sets */
++static struct ip_set **ip_set_list; /* all individual sets */
++static DEFINE_RWLOCK(ip_set_lock); /* protects the lists and the hash */
++static DECLARE_MUTEX(ip_set_app_mutex); /* serializes user access */
++static ip_set_id_t ip_set_max = CONFIG_IP_NF_SET_MAX;
++static ip_set_id_t ip_set_bindings_hash_size = CONFIG_IP_NF_SET_HASHSIZE;
++static struct list_head *ip_set_hash; /* hash of bindings */
++static unsigned int ip_set_hash_random; /* random seed */
++
++/*
++ * Sets are identified either by the index in ip_set_list or by id.
++ * The id never changes and is used to find a key in the hash.
++ * The index may change by swapping and used at all other places
++ * (set/SET netfilter modules, binding value, etc.)
++ *
++ * Userspace requests are serialized by ip_set_mutex and sets can
++ * be deleted only from userspace. Therefore ip_set_list locking
++ * must obey the following rules:
++ *
++ * - kernel requests: read and write locking mandatory
++ * - user requests: read locking optional, write locking mandatory
++ */
++
++static inline void
++__ip_set_get(ip_set_id_t index)
++{
++ atomic_inc(&ip_set_list[index]->ref);
++}
++
++static inline void
++__ip_set_put(ip_set_id_t index)
++{
++ atomic_dec(&ip_set_list[index]->ref);
++}
++
++/*
++ * Binding routines
++ */
++
++static inline int
++ip_hash_cmp(const struct ip_set_hash *set_hash,
++ ip_set_id_t id, ip_set_ip_t ip)
++{
++ return set_hash->id == id && set_hash->ip == ip;
++}
++
++static ip_set_id_t
++ip_set_find_in_hash(ip_set_id_t id, ip_set_ip_t ip)
++{
++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random)
++ % ip_set_bindings_hash_size;
++ struct ip_set_hash *set_hash;
++
++ ASSERT_READ_LOCK(&ip_set_lock);
++ IP_SET_ASSERT(ip_set_list[id]);
++ DP("set: %s, ip: %u.%u.%u.%u", ip_set_list[id]->name, HIPQUAD(ip));
++
++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp,
++ struct ip_set_hash *, id, ip);
++
++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name,
++ HIPQUAD(ip),
++ set_hash != NULL ? ip_set_list[set_hash->binding]->name : "");
++
++ return (set_hash != NULL ? set_hash->binding : IP_SET_INVALID_ID);
++}
++
++static inline void
++__set_hash_del(struct ip_set_hash *set_hash)
++{
++ ASSERT_WRITE_LOCK(&ip_set_lock);
++ IP_SET_ASSERT(ip_set_list[set_hash->binding]);
++
++ __ip_set_put(set_hash->binding);
++ list_del(&set_hash->list);
++ kfree(set_hash);
++}
++
++static int
++ip_set_hash_del(ip_set_id_t id, ip_set_ip_t ip)
++{
++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random)
++ % ip_set_bindings_hash_size;
++ struct ip_set_hash *set_hash;
++
++ IP_SET_ASSERT(ip_set_list[id]);
++ DP("set: %s, ip: %u.%u.%u.%u", ip_set_list[id]->name, HIPQUAD(ip));
++ write_lock_bh(&ip_set_lock);
++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp,
++ struct ip_set_hash *, id, ip);
++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name,
++ HIPQUAD(ip),
++ set_hash != NULL ? ip_set_list[set_hash->binding]->name : "");
++
++ if (set_hash != NULL)
++ __set_hash_del(set_hash);
++ write_unlock_bh(&ip_set_lock);
++ return 0;
++}
++
++static int
++ip_set_hash_add(ip_set_id_t id, ip_set_ip_t ip, ip_set_id_t binding)
++{
++ u_int32_t key = jhash_2words(id, ip, ip_set_hash_random)
++ % ip_set_bindings_hash_size;
++ struct ip_set_hash *set_hash;
++ int ret = 0;
++
++ IP_SET_ASSERT(ip_set_list[id]);
++ IP_SET_ASSERT(ip_set_list[binding]);
++ DP("set: %s, ip: %u.%u.%u.%u, binding: %s", ip_set_list[id]->name,
++ HIPQUAD(ip), ip_set_list[binding]->name);
++ write_lock_bh(&ip_set_lock);
++ set_hash = LIST_FIND(&ip_set_hash[key], ip_hash_cmp,
++ struct ip_set_hash *, id, ip);
++ if (!set_hash) {
++ set_hash = kmalloc(sizeof(struct ip_set_hash), GFP_KERNEL);
++ if (!set_hash) {
++ ret = -ENOMEM;
++ goto unlock;
++ }
++ INIT_LIST_HEAD(&set_hash->list);
++ set_hash->id = id;
++ set_hash->ip = ip;
++ list_add(&ip_set_hash[key], &set_hash->list);
++ } else {
++ IP_SET_ASSERT(ip_set_list[set_hash->binding]);
++ DP("overwrite binding: %s",
++ ip_set_list[set_hash->binding]->name);
++ __ip_set_put(set_hash->binding);
++ }
++ set_hash->binding = binding;
++ __ip_set_get(set_hash->binding);
++ unlock:
++ write_unlock_bh(&ip_set_lock);
++ return ret;
++}
++
++#define FOREACH_HASH_DO(fn, args...) \
++({ \
++ ip_set_id_t __key; \
++ struct ip_set_hash *__set_hash; \
++ \
++ for (__key = 0; __key < ip_set_bindings_hash_size; __key++) { \
++ list_for_each_entry(__set_hash, &ip_set_hash[__key], list) \
++ fn(__set_hash , ## args); \
++ } \
++})
++
++#define FOREACH_HASH_RW_DO(fn, args...) \
++({ \
++ ip_set_id_t __key; \
++ struct ip_set_hash *__set_hash, *__n; \
++ \
++ ASSERT_WRITE_LOCK(&ip_set_lock); \
++ for (__key = 0; __key < ip_set_bindings_hash_size; __key++) { \
++ list_for_each_entry_safe(__set_hash, __n, &ip_set_hash[__key], list)\
++ fn(__set_hash , ## args); \
++ } \
++})
++
++/* Add, del and test set entries from kernel */
++
++#define follow_bindings(index, set, ip) \
++((index = ip_set_find_in_hash((set)->id, ip)) != IP_SET_INVALID_ID \
++ || (index = (set)->binding) != IP_SET_INVALID_ID)
++
++int
++ip_set_testip_kernel(ip_set_id_t index,
++ const struct sk_buff *skb,
++ const u_int32_t *flags)
++{
++ struct ip_set *set;
++ ip_set_ip_t ip;
++ int res, i = 0;
++
++ IP_SET_ASSERT(flags[i]);
++ read_lock_bh(&ip_set_lock);
++ do {
++ set = ip_set_list[index];
++ IP_SET_ASSERT(set);
++ DP("set %s, index %u", set->name, index);
++ read_lock_bh(&set->lock);
++ res = set->type->testip_kernel(set, skb, flags[i], &ip);
++ read_unlock_bh(&set->lock);
++ } while (res > 0
++ && flags[++i]
++ && follow_bindings(index, set, ip));
++ read_unlock_bh(&ip_set_lock);
++
++ return res;
++}
++
++void
++ip_set_addip_kernel(ip_set_id_t index,
++ const struct sk_buff *skb,
++ const u_int32_t *flags)
++{
++ struct ip_set *set;
++ ip_set_ip_t ip;
++ int res, i= 0;
++
++ IP_SET_ASSERT(flags[i]);
++ retry:
++ read_lock_bh(&ip_set_lock);
++ do {
++ set = ip_set_list[index];
++ IP_SET_ASSERT(set);
++ DP("set %s, index %u", set->name, index);
++ write_lock_bh(&set->lock);
++ res = set->type->addip_kernel(set, skb, flags[i], &ip);
++ write_unlock_bh(&set->lock);
++ } while ((res == 0 || res == -EEXIST)
++ && flags[++i]
++ && follow_bindings(index, set, ip));
++ read_unlock_bh(&ip_set_lock);
++
++ if (res == -EAGAIN
++ && set->type->retry
++ && (res = set->type->retry(set)) == 0)
++ goto retry;
++}
++
++void
++ip_set_delip_kernel(ip_set_id_t index,
++ const struct sk_buff *skb,
++ const u_int32_t *flags)
++{
++ struct ip_set *set;
++ ip_set_ip_t ip;
++ int res, i = 0;
++
++ IP_SET_ASSERT(flags[i]);
++ read_lock_bh(&ip_set_lock);
++ do {
++ set = ip_set_list[index];
++ IP_SET_ASSERT(set);
++ DP("set %s, index %u", set->name, index);
++ write_lock_bh(&set->lock);
++ res = set->type->delip_kernel(set, skb, flags[i], &ip);
++ write_unlock_bh(&set->lock);
++ } while ((res == 0 || res == -EEXIST)
++ && flags[++i]
++ && follow_bindings(index, set, ip));
++ read_unlock_bh(&ip_set_lock);
++}
++
++/* Register and deregister settype */
++
++static inline int
++set_type_equal(const struct ip_set_type *set_type, const char *str2)
++{
++ return !strncmp(set_type->typename, str2, IP_SET_MAXNAMELEN - 1);
++}
++
++static inline struct ip_set_type *
++find_set_type(const char *name)
++{
++ return LIST_FIND(&set_type_list,
++ set_type_equal,
++ struct ip_set_type *,
++ name);
++}
++
++int
++ip_set_register_set_type(struct ip_set_type *set_type)
++{
++ int ret = 0;
++
++ if (set_type->protocol_version != IP_SET_PROTOCOL_VERSION) {
++ ip_set_printk("'%s' uses wrong protocol version %u (want %u)",
++ set_type->typename,
++ set_type->protocol_version,
++ IP_SET_PROTOCOL_VERSION);
++ return -EINVAL;
++ }
++
++ write_lock_bh(&ip_set_lock);
++ if (find_set_type(set_type->typename)) {
++ /* Duplicate! */
++ ip_set_printk("'%s' already registered!",
++ set_type->typename);
++ ret = -EINVAL;
++ goto unlock;
++ }
++ if (!try_module_get(THIS_MODULE)) {
++ ret = -EFAULT;
++ goto unlock;
++ }
++ list_append(&set_type_list, set_type);
++ DP("'%s' registered.", set_type->typename);
++ unlock:
++ write_unlock_bh(&ip_set_lock);
++ return ret;
++}
++
++void
++ip_set_unregister_set_type(struct ip_set_type *set_type)
++{
++ write_lock_bh(&ip_set_lock);
++ if (!find_set_type(set_type->typename)) {
++ ip_set_printk("'%s' not registered?",
++ set_type->typename);
++ goto unlock;
++ }
++ LIST_DELETE(&set_type_list, set_type);
++ module_put(THIS_MODULE);
++ DP("'%s' unregistered.", set_type->typename);
++ unlock:
++ write_unlock_bh(&ip_set_lock);
++
++}
++
++/*
++ * Userspace routines
++ */
++
++/*
++ * Find set by name, reference it once. The reference makes sure the
++ * thing pointed to, does not go away under our feet. Drop the reference
++ * later, using ip_set_put().
++ */
++ip_set_id_t
++ip_set_get_byname(const char *name)
++{
++ ip_set_id_t i, index = IP_SET_INVALID_ID;
++
++ down(&ip_set_app_mutex);
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL
++ && strcmp(ip_set_list[i]->name, name) == 0) {
++ __ip_set_get(i);
++ index = i;
++ break;
++ }
++ }
++ up(&ip_set_app_mutex);
++ return index;
++}
++
++/*
++ * Find set by index, reference it once. The reference makes sure the
++ * thing pointed to, does not go away under our feet. Drop the reference
++ * later, using ip_set_put().
++ */
++ip_set_id_t
++ip_set_get_byindex(ip_set_id_t index)
++{
++ down(&ip_set_app_mutex);
++
++ if (index >= ip_set_max)
++ return IP_SET_INVALID_ID;
++
++ if (ip_set_list[index])
++ __ip_set_get(index);
++ else
++ index = IP_SET_INVALID_ID;
++
++ up(&ip_set_app_mutex);
++ return index;
++}
++
++/*
++ * If the given set pointer points to a valid set, decrement
++ * reference count by 1. The caller shall not assume the index
++ * to be valid, after calling this function.
++ */
++void ip_set_put(ip_set_id_t index)
++{
++ down(&ip_set_app_mutex);
++ if (ip_set_list[index])
++ __ip_set_put(index);
++ up(&ip_set_app_mutex);
++}
++
++/* Find a set by name or index */
++static ip_set_id_t
++ip_set_find_byname(const char *name)
++{
++ ip_set_id_t i, index = IP_SET_INVALID_ID;
++
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL
++ && strcmp(ip_set_list[i]->name, name) == 0) {
++ index = i;
++ break;
++ }
++ }
++ return index;
++}
++
++static ip_set_id_t
++ip_set_find_byindex(ip_set_id_t index)
++{
++ if (index >= ip_set_max || ip_set_list[index] == NULL)
++ index = IP_SET_INVALID_ID;
++
++ return index;
++}
++
++/*
++ * Add, del, test, bind and unbind
++ */
++
++static inline int
++__ip_set_testip(struct ip_set *set,
++ const void *data,
++ size_t size,
++ ip_set_ip_t *ip)
++{
++ int res;
++
++ read_lock_bh(&set->lock);
++ res = set->type->testip(set, data, size, ip);
++ read_unlock_bh(&set->lock);
++
++ return res;
++}
++
++static int
++__ip_set_addip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set = ip_set_list[index];
++ ip_set_ip_t ip;
++ int res;
++
++ IP_SET_ASSERT(set);
++ do {
++ write_lock_bh(&set->lock);
++ res = set->type->addip(set, data, size, &ip);
++ write_unlock_bh(&set->lock);
++ } while (res == -EAGAIN
++ && set->type->retry
++ && (res = set->type->retry(set)) == 0);
++
++ return res;
++}
++
++static int
++ip_set_addip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++
++ return __ip_set_addip(index,
++ data + sizeof(struct ip_set_req_adt),
++ size - sizeof(struct ip_set_req_adt));
++}
++
++static int
++ip_set_delip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set = ip_set_list[index];
++ ip_set_ip_t ip;
++ int res;
++
++ IP_SET_ASSERT(set);
++ write_lock_bh(&set->lock);
++ res = set->type->delip(set,
++ data + sizeof(struct ip_set_req_adt),
++ size - sizeof(struct ip_set_req_adt),
++ &ip);
++ write_unlock_bh(&set->lock);
++
++ return res;
++}
++
++static int
++ip_set_testip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set = ip_set_list[index];
++ ip_set_ip_t ip;
++ int res;
++
++ IP_SET_ASSERT(set);
++ res = __ip_set_testip(set,
++ data + sizeof(struct ip_set_req_adt),
++ size - sizeof(struct ip_set_req_adt),
++ &ip);
++
++ return (res > 0 ? -EEXIST : res);
++}
++
++static int
++ip_set_bindip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set = ip_set_list[index];
++ struct ip_set_req_bind *req_bind;
++ ip_set_id_t binding;
++ ip_set_ip_t ip;
++ int res;
++
++ IP_SET_ASSERT(set);
++ if (size < sizeof(struct ip_set_req_bind))
++ return -EINVAL;
++
++ req_bind = (struct ip_set_req_bind *) data;
++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) {
++ /* Default binding of a set */
++ char *binding_name;
++
++ if (size != sizeof(struct ip_set_req_bind) + IP_SET_MAXNAMELEN)
++ return -EINVAL;
++
++ binding_name = (char *)(data + sizeof(struct ip_set_req_bind));
++ binding_name[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ binding = ip_set_find_byname(binding_name);
++ if (binding == IP_SET_INVALID_ID)
++ return -ENOENT;
++
++ write_lock_bh(&ip_set_lock);
++ /* Sets as binding values are referenced */
++ if (set->binding != IP_SET_INVALID_ID)
++ __ip_set_put(set->binding);
++ set->binding = binding;
++ __ip_set_get(set->binding);
++ write_unlock_bh(&ip_set_lock);
++
++ return 0;
++ }
++ binding = ip_set_find_byname(req_bind->binding);
++ if (binding == IP_SET_INVALID_ID)
++ return -ENOENT;
++
++ res = __ip_set_testip(set,
++ data + sizeof(struct ip_set_req_bind),
++ size - sizeof(struct ip_set_req_bind),
++ &ip);
++ DP("set %s, ip: %u.%u.%u.%u, binding %s",
++ set->name, HIPQUAD(ip), ip_set_list[binding]->name);
++
++ if (res >= 0)
++ res = ip_set_hash_add(set->id, ip, binding);
++
++ return res;
++}
++
++#define FOREACH_SET_DO(fn, args...) \
++({ \
++ ip_set_id_t __i; \
++ struct ip_set *__set; \
++ \
++ for (__i = 0; __i < ip_set_max; __i++) { \
++ __set = ip_set_list[__i]; \
++ if (__set != NULL) \
++ fn(__set , ##args); \
++ } \
++})
++
++static inline void
++__set_hash_del_byid(struct ip_set_hash *set_hash, ip_set_id_t id)
++{
++ if (set_hash->id == id)
++ __set_hash_del(set_hash);
++}
++
++static inline void
++__unbind_default(struct ip_set *set)
++{
++ if (set->binding != IP_SET_INVALID_ID) {
++ /* Sets as binding values are referenced */
++ __ip_set_put(set->binding);
++ set->binding = IP_SET_INVALID_ID;
++ }
++}
++
++static int
++ip_set_unbindip(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set;
++ struct ip_set_req_bind *req_bind;
++ ip_set_ip_t ip;
++ int res;
++
++ DP("");
++ if (size < sizeof(struct ip_set_req_bind))
++ return -EINVAL;
++
++ req_bind = (struct ip_set_req_bind *) data;
++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ DP("%u %s", index, req_bind->binding);
++ if (index == IP_SET_INVALID_ID) {
++ /* unbind :all: */
++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) {
++ /* Default binding of sets */
++ write_lock_bh(&ip_set_lock);
++ FOREACH_SET_DO(__unbind_default);
++ write_unlock_bh(&ip_set_lock);
++ return 0;
++ } else if (strcmp(req_bind->binding, IPSET_TOKEN_ALL) == 0) {
++ /* Flush all bindings of all sets*/
++ write_lock_bh(&ip_set_lock);
++ FOREACH_HASH_RW_DO(__set_hash_del);
++ write_unlock_bh(&ip_set_lock);
++ return 0;
++ }
++ DP("unreachable reached!");
++ return -EINVAL;
++ }
++
++ set = ip_set_list[index];
++ IP_SET_ASSERT(set);
++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) {
++ /* Default binding of set */
++ ip_set_id_t binding = ip_set_find_byindex(set->binding);
++
++ if (binding == IP_SET_INVALID_ID)
++ return -ENOENT;
++
++ write_lock_bh(&ip_set_lock);
++ /* Sets in hash values are referenced */
++ __ip_set_put(set->binding);
++ set->binding = IP_SET_INVALID_ID;
++ write_unlock_bh(&ip_set_lock);
++
++ return 0;
++ } else if (strcmp(req_bind->binding, IPSET_TOKEN_ALL) == 0) {
++ /* Flush all bindings */
++
++ write_lock_bh(&ip_set_lock);
++ FOREACH_HASH_RW_DO(__set_hash_del_byid, set->id);
++ write_unlock_bh(&ip_set_lock);
++ return 0;
++ }
++
++ res = __ip_set_testip(set,
++ data + sizeof(struct ip_set_req_bind),
++ size - sizeof(struct ip_set_req_bind),
++ &ip);
++
++ DP("set %s, ip: %u.%u.%u.%u", set->name, HIPQUAD(ip));
++ if (res >= 0)
++ res = ip_set_hash_del(set->id, ip);
++
++ return res;
++}
++
++static int
++ip_set_testbind(ip_set_id_t index,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set = ip_set_list[index];
++ struct ip_set_req_bind *req_bind;
++ ip_set_id_t binding;
++ ip_set_ip_t ip;
++ int res;
++
++ IP_SET_ASSERT(set);
++ if (size < sizeof(struct ip_set_req_bind))
++ return -EINVAL;
++
++ req_bind = (struct ip_set_req_bind *) data;
++ req_bind->binding[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ if (strcmp(req_bind->binding, IPSET_TOKEN_DEFAULT) == 0) {
++ /* Default binding of set */
++ char *binding_name;
++
++ if (size != sizeof(struct ip_set_req_bind) + IP_SET_MAXNAMELEN)
++ return -EINVAL;
++
++ binding_name = (char *)(data + sizeof(struct ip_set_req_bind));
++ binding_name[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ binding = ip_set_find_byname(binding_name);
++ if (binding == IP_SET_INVALID_ID)
++ return -ENOENT;
++
++ res = (set->binding == binding) ? -EEXIST : 0;
++
++ return res;
++ }
++ binding = ip_set_find_byname(req_bind->binding);
++ if (binding == IP_SET_INVALID_ID)
++ return -ENOENT;
++
++
++ res = __ip_set_testip(set,
++ data + sizeof(struct ip_set_req_bind),
++ size - sizeof(struct ip_set_req_bind),
++ &ip);
++ DP("set %s, ip: %u.%u.%u.%u, binding %s",
++ set->name, HIPQUAD(ip), ip_set_list[binding]->name);
++
++ if (res >= 0)
++ res = (ip_set_find_in_hash(set->id, ip) == binding)
++ ? -EEXIST : 0;
++
++ return res;
++}
++
++static struct ip_set_type *
++find_set_type_rlock(const char *typename)
++{
++ struct ip_set_type *type;
++
++ read_lock_bh(&ip_set_lock);
++ type = find_set_type(typename);
++ if (type == NULL)
++ read_unlock_bh(&ip_set_lock);
++
++ return type;
++}
++
++static int
++find_free_id(const char *name,
++ ip_set_id_t *index,
++ ip_set_id_t *id)
++{
++ ip_set_id_t i;
++
++ *id = IP_SET_INVALID_ID;
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] == NULL) {
++ if (*id == IP_SET_INVALID_ID)
++ *id = *index = i;
++ } else if (strcmp(name, ip_set_list[i]->name) == 0)
++ /* Name clash */
++ return -EEXIST;
++ }
++ if (*id == IP_SET_INVALID_ID)
++ /* No free slot remained */
++ return -ERANGE;
++ /* Check that index is usable as id (swapping) */
++ check:
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL
++ && ip_set_list[i]->id == *id) {
++ *id = i;
++ goto check;
++ }
++ }
++ return 0;
++}
++
++/*
++ * Create a set
++ */
++static int
++ip_set_create(const char *name,
++ const char *typename,
++ ip_set_id_t restore,
++ const void *data,
++ size_t size)
++{
++ struct ip_set *set;
++ ip_set_id_t index, id;
++ int res = 0;
++
++ DP("setname: %s, typename: %s, id: %u", name, typename, restore);
++ /*
++ * First, and without any locks, allocate and initialize
++ * a normal base set structure.
++ */
++ set = kmalloc(sizeof(struct ip_set), GFP_KERNEL);
++ if (!set)
++ return -ENOMEM;
++ set->lock = RW_LOCK_UNLOCKED;
++ strncpy(set->name, name, IP_SET_MAXNAMELEN);
++ set->binding = IP_SET_INVALID_ID;
++ atomic_set(&set->ref, 0);
++
++ /*
++ * Next, take the &ip_set_lock, check that we know the type,
++ * and take a reference on the type, to make sure it
++ * stays available while constructing our new set.
++ *
++ * After referencing the type, we drop the &ip_set_lock,
++ * and let the new set construction run without locks.
++ */
++ set->type = find_set_type_rlock(typename);
++ if (set->type == NULL) {
++ /* Try loading the module */
++ char modulename[IP_SET_MAXNAMELEN + strlen("ip_set_") + 1];
++ strcpy(modulename, "ip_set_");
++ strcat(modulename, typename);
++ DP("try to load %s", modulename);
++ request_module(modulename);
++ set->type = find_set_type_rlock(typename);
++ }
++ if (set->type == NULL) {
++ ip_set_printk("no set type '%s', set '%s' not created",
++ typename, name);
++ res = -ENOENT;
++ goto out;
++ }
++ if (!try_module_get(set->type->me)) {
++ read_unlock_bh(&ip_set_lock);
++ res = -EFAULT;
++ goto out;
++ }
++ read_unlock_bh(&ip_set_lock);
++
++ /*
++ * Without holding any locks, create private part.
++ */
++ res = set->type->create(set, data, size);
++ if (res != 0)
++ goto put_out;
++
++ /* BTW, res==0 here. */
++
++ /*
++ * Here, we have a valid, constructed set. &ip_set_lock again,
++ * find free id/index and check that it is not already in
++ * ip_set_list.
++ */
++ write_lock_bh(&ip_set_lock);
++ if ((res = find_free_id(set->name, &index, &id)) != 0) {
++ DP("no free id!");
++ goto cleanup;
++ }
++
++ /* Make sure restore gets the same index */
++ if (restore != IP_SET_INVALID_ID && index != restore) {
++ DP("Can't restore, sets are screwed up");
++ res = -ERANGE;
++ goto cleanup;
++ }
++
++ /*
++ * Finally! Add our shiny new set to the list, and be done.
++ */
++ DP("create: '%s' created with index %u, id %u!", set->name, index, id);
++ set->id = id;
++ ip_set_list[index] = set;
++ write_unlock_bh(&ip_set_lock);
++ return res;
++
++ cleanup:
++ write_unlock_bh(&ip_set_lock);
++ set->type->destroy(set);
++ put_out:
++ module_put(set->type->me);
++ out:
++ kfree(set);
++ return res;
++}
++
++/*
++ * Destroy a given existing set
++ */
++static void
++ip_set_destroy_set(ip_set_id_t index)
++{
++ struct ip_set *set = ip_set_list[index];
++
++ IP_SET_ASSERT(set);
++ DP("set: %s", set->name);
++ write_lock_bh(&ip_set_lock);
++ FOREACH_HASH_RW_DO(__set_hash_del_byid, set->id);
++ if (set->binding != IP_SET_INVALID_ID)
++ __ip_set_put(set->binding);
++ ip_set_list[index] = NULL;
++ write_unlock_bh(&ip_set_lock);
++
++ /* Must call it without holding any lock */
++ set->type->destroy(set);
++ module_put(set->type->me);
++ kfree(set);
++}
++
++/*
++ * Destroy a set - or all sets
++ * Sets must not be referenced/used.
++ */
++static int
++ip_set_destroy(ip_set_id_t index)
++{
++ ip_set_id_t i;
++
++ /* ref modification always protected by the mutex */
++ if (index != IP_SET_INVALID_ID) {
++ if (atomic_read(&ip_set_list[index]->ref))
++ return -EBUSY;
++ ip_set_destroy_set(index);
++ } else {
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL
++ && (atomic_read(&ip_set_list[i]->ref)))
++ return -EBUSY;
++ }
++
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL)
++ ip_set_destroy_set(i);
++ }
++ }
++ return 0;
++}
++
++static void
++ip_set_flush_set(struct ip_set *set)
++{
++ DP("set: %s %u", set->name, set->id);
++
++ write_lock_bh(&set->lock);
++ set->type->flush(set);
++ write_unlock_bh(&set->lock);
++}
++
++/*
++ * Flush data in a set - or in all sets
++ */
++static int
++ip_set_flush(ip_set_id_t index)
++{
++ if (index != IP_SET_INVALID_ID) {
++ IP_SET_ASSERT(ip_set_list[index]);
++ ip_set_flush_set(ip_set_list[index]);
++ } else
++ FOREACH_SET_DO(ip_set_flush_set);
++
++ return 0;
++}
++
++/* Rename a set */
++static int
++ip_set_rename(ip_set_id_t index, const char *name)
++{
++ struct ip_set *set = ip_set_list[index];
++ ip_set_id_t i;
++ int res = 0;
++
++ DP("set: %s to %s", set->name, name);
++ write_lock_bh(&ip_set_lock);
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL
++ && strncmp(ip_set_list[i]->name,
++ name,
++ IP_SET_MAXNAMELEN - 1) == 0) {
++ res = -EEXIST;
++ goto unlock;
++ }
++ }
++ strncpy(set->name, name, IP_SET_MAXNAMELEN);
++ unlock:
++ write_unlock_bh(&ip_set_lock);
++ return res;
++}
++
++/*
++ * Swap two sets so that name/index points to the other.
++ * References are also swapped.
++ */
++static int
++ip_set_swap(ip_set_id_t from_index, ip_set_id_t to_index)
++{
++ struct ip_set *from = ip_set_list[from_index];
++ struct ip_set *to = ip_set_list[to_index];
++ char from_name[IP_SET_MAXNAMELEN];
++ u_int32_t from_ref;
++
++ DP("set: %s to %s", from->name, to->name);
++ /* Type can't be changed. Artifical restriction. */
++ if (from->type->typecode != to->type->typecode)
++ return -ENOEXEC;
++
++ /* No magic here: ref munging protected by the mutex */
++ write_lock_bh(&ip_set_lock);
++ strncpy(from_name, from->name, IP_SET_MAXNAMELEN);
++ from_ref = atomic_read(&from->ref);
++
++ strncpy(from->name, to->name, IP_SET_MAXNAMELEN);
++ atomic_set(&from->ref, atomic_read(&to->ref));
++ strncpy(to->name, from_name, IP_SET_MAXNAMELEN);
++ atomic_set(&to->ref, from_ref);
++
++ ip_set_list[from_index] = to;
++ ip_set_list[to_index] = from;
++
++ write_unlock_bh(&ip_set_lock);
++ return 0;
++}
++
++/*
++ * List set data
++ */
++
++static inline void
++__set_hash_bindings_size_list(struct ip_set_hash *set_hash,
++ ip_set_id_t id, size_t *size)
++{
++ if (set_hash->id == id)
++ *size += sizeof(struct ip_set_hash_list);
++}
++
++static inline void
++__set_hash_bindings_size_save(struct ip_set_hash *set_hash,
++ ip_set_id_t id, size_t *size)
++{
++ if (set_hash->id == id)
++ *size += sizeof(struct ip_set_hash_save);
++}
++
++static inline void
++__set_hash_bindings(struct ip_set_hash *set_hash,
++ ip_set_id_t id, void *data, int *used)
++{
++ if (set_hash->id == id) {
++ struct ip_set_hash_list *hash_list =
++ (struct ip_set_hash_list *)(data + *used);
++
++ hash_list->ip = set_hash->ip;
++ hash_list->binding = set_hash->binding;
++ *used += sizeof(struct ip_set_hash_list);
++ }
++}
++
++static int ip_set_list_set(ip_set_id_t index,
++ void *data,
++ int *used,
++ int len)
++{
++ struct ip_set *set = ip_set_list[index];
++ struct ip_set_list *set_list;
++
++ /* Pointer to our header */
++ set_list = (struct ip_set_list *) (data + *used);
++
++ DP("set: %s, used: %d %p %p", set->name, *used, data, data + *used);
++
++ /* Get and ensure header size */
++ if (*used + sizeof(struct ip_set_list) > len)
++ goto not_enough_mem;
++ *used += sizeof(struct ip_set_list);
++
++ read_lock_bh(&set->lock);
++ /* Get and ensure set specific header size */
++ set_list->header_size = set->type->header_size;
++ if (*used + set_list->header_size > len)
++ goto unlock_set;
++
++ /* Fill in the header */
++ set_list->index = index;
++ set_list->binding = set->binding;
++ set_list->ref = atomic_read(&set->ref);
++
++ /* Fill in set spefific header data */
++ set->type->list_header(set, data + *used);
++ *used += set_list->header_size;
++
++ /* Get and ensure set specific members size */
++ set_list->members_size = set->type->list_members_size(set);
++ if (*used + set_list->members_size > len)
++ goto unlock_set;
++
++ /* Fill in set spefific members data */
++ set->type->list_members(set, data + *used);
++ *used += set_list->members_size;
++ read_unlock_bh(&set->lock);
++
++ /* Bindings */
++
++ /* Get and ensure set specific bindings size */
++ set_list->bindings_size = 0;
++ FOREACH_HASH_DO(__set_hash_bindings_size_list,
++ set->id, &set_list->bindings_size);
++ if (*used + set_list->bindings_size > len)
++ goto not_enough_mem;
++
++ /* Fill in set spefific bindings data */
++ FOREACH_HASH_DO(__set_hash_bindings, set->id, data, used);
++
++ return 0;
++
++ unlock_set:
++ read_unlock_bh(&set->lock);
++ not_enough_mem:
++ DP("not enough mem, try again");
++ return -EAGAIN;
++}
++
++/*
++ * Save sets
++ */
++static int ip_set_save_set(ip_set_id_t index,
++ void *data,
++ int *used,
++ int len)
++{
++ struct ip_set *set;
++ struct ip_set_save *set_save;
++
++ /* Pointer to our header */
++ set_save = (struct ip_set_save *) (data + *used);
++
++ /* Get and ensure header size */
++ if (*used + sizeof(struct ip_set_save) > len)
++ goto not_enough_mem;
++ *used += sizeof(struct ip_set_save);
++
++ set = ip_set_list[index];
++ DP("set: %s, used: %u(%u) %p %p", set->name, *used, len,
++ data, data + *used);
++
++ read_lock_bh(&set->lock);
++ /* Get and ensure set specific header size */
++ set_save->header_size = set->type->header_size;
++ if (*used + set_save->header_size > len)
++ goto unlock_set;
++
++ /* Fill in the header */
++ set_save->index = index;
++ set_save->binding = set->binding;
++
++ /* Fill in set spefific header data */
++ set->type->list_header(set, data + *used);
++ *used += set_save->header_size;
++
++ DP("set header filled: %s, used: %u %p %p", set->name, *used,
++ data, data + *used);
++ /* Get and ensure set specific members size */
++ set_save->members_size = set->type->list_members_size(set);
++ if (*used + set_save->members_size > len)
++ goto unlock_set;
++
++ /* Fill in set spefific members data */
++ set->type->list_members(set, data + *used);
++ *used += set_save->members_size;
++ read_unlock_bh(&set->lock);
++ DP("set members filled: %s, used: %u %p %p", set->name, *used,
++ data, data + *used);
++ return 0;
++
++ unlock_set:
++ read_unlock_bh(&set->lock);
++ not_enough_mem:
++ DP("not enough mem, try again");
++ return -EAGAIN;
++}
++
++static inline void
++__set_hash_save_bindings(struct ip_set_hash *set_hash,
++ ip_set_id_t id,
++ void *data,
++ int *used,
++ int len,
++ int *res)
++{
++ if (*res == 0
++ && (id == IP_SET_INVALID_ID || set_hash->id == id)) {
++ struct ip_set_hash_save *hash_save =
++ (struct ip_set_hash_save *)(data + *used);
++ /* Ensure bindings size */
++ if (*used + sizeof(struct ip_set_hash_save) > len) {
++ *res = -ENOMEM;
++ return;
++ }
++ hash_save->id = set_hash->id;
++ hash_save->ip = set_hash->ip;
++ hash_save->binding = set_hash->binding;
++ *used += sizeof(struct ip_set_hash_save);
++ }
++}
++
++static int ip_set_save_bindings(ip_set_id_t index,
++ void *data,
++ int *used,
++ int len)
++{
++ int res = 0;
++ struct ip_set_save *set_save;
++
++ DP("used %u, len %u", *used, len);
++ /* Get and ensure header size */
++ if (*used + sizeof(struct ip_set_save) > len)
++ return -ENOMEM;
++
++ /* Marker */
++ set_save = (struct ip_set_save *) (data + *used);
++ set_save->index = IP_SET_INVALID_ID;
++ *used += sizeof(struct ip_set_save);
++
++ DP("marker added used %u, len %u", *used, len);
++ /* Fill in bindings data */
++ if (index != IP_SET_INVALID_ID)
++ /* Sets are identified by id in hash */
++ index = ip_set_list[index]->id;
++ FOREACH_HASH_DO(__set_hash_save_bindings, index, data, used, len, &res);
++
++ return res;
++}
++
++/*
++ * Restore sets
++ */
++static int ip_set_restore(void *data,
++ int len)
++{
++ int res = 0;
++ int line = 0, used = 0, members_size;
++ struct ip_set *set;
++ struct ip_set_hash_save *hash_save;
++ struct ip_set_restore *set_restore;
++ ip_set_id_t index;
++
++ /* Loop to restore sets */
++ while (1) {
++ line++;
++
++ DP("%u %u %u", used, sizeof(struct ip_set_restore), len);
++ /* Get and ensure header size */
++ if (used + sizeof(struct ip_set_restore) > len)
++ return line;
++ set_restore = (struct ip_set_restore *) (data + used);
++ used += sizeof(struct ip_set_restore);
++
++ /* Ensure data size */
++ if (used
++ + set_restore->header_size
++ + set_restore->members_size > len)
++ return line;
++
++ /* Check marker */
++ if (set_restore->index == IP_SET_INVALID_ID) {
++ line--;
++ goto bindings;
++ }
++
++ /* Try to create the set */
++ DP("restore %s %s", set_restore->name, set_restore->typename);
++ res = ip_set_create(set_restore->name,
++ set_restore->typename,
++ set_restore->index,
++ data + used,
++ set_restore->header_size);
++
++ if (res != 0)
++ return line;
++ used += set_restore->header_size;
++
++ index = ip_set_find_byindex(set_restore->index);
++ DP("index %u, restore_index %u", index, set_restore->index);
++ if (index != set_restore->index)
++ return line;
++ /* Try to restore members data */
++ set = ip_set_list[index];
++ members_size = 0;
++ DP("members_size %u reqsize %u",
++ set_restore->members_size, set->type->reqsize);
++ while (members_size + set->type->reqsize <=
++ set_restore->members_size) {
++ line++;
++ DP("members: %u, line %u", members_size, line);
++ res = __ip_set_addip(index,
++ data + used + members_size,
++ set->type->reqsize);
++ if (!(res == 0 || res == -EEXIST))
++ return line;
++ members_size += set->type->reqsize;
++ }
++
++ DP("members_size %u %u",
++ set_restore->members_size, members_size);
++ if (members_size != set_restore->members_size)
++ return line++;
++ used += set_restore->members_size;
++ }
++
++ bindings:
++ /* Loop to restore bindings */
++ while (used < len) {
++ line++;
++
++ DP("restore binding, line %u", line);
++ /* Get and ensure size */
++ if (used + sizeof(struct ip_set_hash_save) > len)
++ return line;
++ hash_save = (struct ip_set_hash_save *) (data + used);
++ used += sizeof(struct ip_set_hash_save);
++
++ /* hash_save->id is used to store the index */
++ index = ip_set_find_byindex(hash_save->id);
++ DP("restore binding index %u, id %u, %u -> %u",
++ index, hash_save->id, hash_save->ip, hash_save->binding);
++ if (index != hash_save->id)
++ return line;
++
++ set = ip_set_list[hash_save->id];
++ /* Null valued IP means default binding */
++ if (hash_save->ip)
++ res = ip_set_hash_add(set->id,
++ hash_save->ip,
++ hash_save->binding);
++ else {
++ IP_SET_ASSERT(set->binding == IP_SET_INVALID_ID);
++ write_lock_bh(&ip_set_lock);
++ set->binding = hash_save->binding;
++ __ip_set_get(set->binding);
++ write_unlock_bh(&ip_set_lock);
++ DP("default binding: %u", set->binding);
++ }
++ if (res != 0)
++ return line;
++ }
++ if (used != len)
++ return line;
++
++ return 0;
++}
++
++static int
++ip_set_sockfn_set(struct sock *sk, int optval, void *user, unsigned int len)
++{
++ void *data;
++ int res = 0; /* Assume OK */
++ unsigned *op;
++ struct ip_set_req_adt *req_adt;
++ ip_set_id_t index = IP_SET_INVALID_ID;
++ int (*adtfn)(ip_set_id_t index,
++ const void *data, size_t size);
++ struct fn_table {
++ int (*fn)(ip_set_id_t index,
++ const void *data, size_t size);
++ } adtfn_table[] =
++ { { ip_set_addip }, { ip_set_delip }, { ip_set_testip},
++ { ip_set_bindip}, { ip_set_unbindip }, { ip_set_testbind },
++ };
++
++ DP("optval=%d, user=%p, len=%d", optval, user, len);
++ if (!capable(CAP_NET_ADMIN))
++ return -EPERM;
++ if (optval != SO_IP_SET)
++ return -EBADF;
++ if (len <= sizeof(unsigned)) {
++ ip_set_printk("short userdata (want >%zu, got %u)",
++ sizeof(unsigned), len);
++ return -EINVAL;
++ }
++ data = vmalloc(len);
++ if (!data) {
++ DP("out of mem for %u bytes", len);
++ return -ENOMEM;
++ }
++ if (copy_from_user(data, user, len) != 0) {
++ res = -EFAULT;
++ goto done;
++ }
++ if (down_interruptible(&ip_set_app_mutex)) {
++ res = -EINTR;
++ goto done;
++ }
++
++ op = (unsigned *)data;
++ DP("op=%x", *op);
++
++ if (*op < IP_SET_OP_VERSION) {
++ /* Check the version at the beginning of operations */
++ struct ip_set_req_version *req_version =
++ (struct ip_set_req_version *) data;
++ if (req_version->version != IP_SET_PROTOCOL_VERSION) {
++ res = -EPROTO;
++ goto done;
++ }
++ }
++
++ switch (*op) {
++ case IP_SET_OP_CREATE:{
++ struct ip_set_req_create *req_create
++ = (struct ip_set_req_create *) data;
++
++ if (len <= sizeof(struct ip_set_req_create)) {
++ ip_set_printk("short CREATE data (want >%zu, got %u)",
++ sizeof(struct ip_set_req_create), len);
++ res = -EINVAL;
++ goto done;
++ }
++ req_create->name[IP_SET_MAXNAMELEN - 1] = '\0';
++ req_create->typename[IP_SET_MAXNAMELEN - 1] = '\0';
++ res = ip_set_create(req_create->name,
++ req_create->typename,
++ IP_SET_INVALID_ID,
++ data + sizeof(struct ip_set_req_create),
++ len - sizeof(struct ip_set_req_create));
++ goto done;
++ }
++ case IP_SET_OP_DESTROY:{
++ struct ip_set_req_std *req_destroy
++ = (struct ip_set_req_std *) data;
++
++ if (len != sizeof(struct ip_set_req_std)) {
++ ip_set_printk("invalid DESTROY data (want %zu, got %u)",
++ sizeof(struct ip_set_req_std), len);
++ res = -EINVAL;
++ goto done;
++ }
++ if (strcmp(req_destroy->name, IPSET_TOKEN_ALL) == 0) {
++ /* Destroy all sets */
++ index = IP_SET_INVALID_ID;
++ } else {
++ req_destroy->name[IP_SET_MAXNAMELEN - 1] = '\0';
++ index = ip_set_find_byname(req_destroy->name);
++
++ if (index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ }
++
++ res = ip_set_destroy(index);
++ goto done;
++ }
++ case IP_SET_OP_FLUSH:{
++ struct ip_set_req_std *req_flush =
++ (struct ip_set_req_std *) data;
++
++ if (len != sizeof(struct ip_set_req_std)) {
++ ip_set_printk("invalid FLUSH data (want %zu, got %u)",
++ sizeof(struct ip_set_req_std), len);
++ res = -EINVAL;
++ goto done;
++ }
++ if (strcmp(req_flush->name, IPSET_TOKEN_ALL) == 0) {
++ /* Flush all sets */
++ index = IP_SET_INVALID_ID;
++ } else {
++ req_flush->name[IP_SET_MAXNAMELEN - 1] = '\0';
++ index = ip_set_find_byname(req_flush->name);
++
++ if (index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ }
++ res = ip_set_flush(index);
++ goto done;
++ }
++ case IP_SET_OP_RENAME:{
++ struct ip_set_req_create *req_rename
++ = (struct ip_set_req_create *) data;
++
++ if (len != sizeof(struct ip_set_req_create)) {
++ ip_set_printk("invalid RENAME data (want %zu, got %u)",
++ sizeof(struct ip_set_req_create), len);
++ res = -EINVAL;
++ goto done;
++ }
++
++ req_rename->name[IP_SET_MAXNAMELEN - 1] = '\0';
++ req_rename->typename[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ index = ip_set_find_byname(req_rename->name);
++ if (index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ res = ip_set_rename(index, req_rename->typename);
++ goto done;
++ }
++ case IP_SET_OP_SWAP:{
++ struct ip_set_req_create *req_swap
++ = (struct ip_set_req_create *) data;
++ ip_set_id_t to_index;
++
++ if (len != sizeof(struct ip_set_req_create)) {
++ ip_set_printk("invalid SWAP data (want %zu, got %u)",
++ sizeof(struct ip_set_req_create), len);
++ res = -EINVAL;
++ goto done;
++ }
++
++ req_swap->name[IP_SET_MAXNAMELEN - 1] = '\0';
++ req_swap->typename[IP_SET_MAXNAMELEN - 1] = '\0';
++
++ index = ip_set_find_byname(req_swap->name);
++ if (index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ to_index = ip_set_find_byname(req_swap->typename);
++ if (to_index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ res = ip_set_swap(index, to_index);
++ goto done;
++ }
++ default:
++ break; /* Set identified by id */
++ }
++
++ /* There we may have add/del/test/bind/unbind/test_bind operations */
++ if (*op < IP_SET_OP_ADD_IP || *op > IP_SET_OP_TEST_BIND_SET) {
++ res = -EBADMSG;
++ goto done;
++ }
++ adtfn = adtfn_table[*op - IP_SET_OP_ADD_IP].fn;
++
++ if (len < sizeof(struct ip_set_req_adt)) {
++ ip_set_printk("short data in adt request (want >=%zu, got %u)",
++ sizeof(struct ip_set_req_adt), len);
++ res = -EINVAL;
++ goto done;
++ }
++ req_adt = (struct ip_set_req_adt *) data;
++
++ /* -U :all: :all:|:default: uses IP_SET_INVALID_ID */
++ if (!(*op == IP_SET_OP_UNBIND_SET
++ && req_adt->index == IP_SET_INVALID_ID)) {
++ index = ip_set_find_byindex(req_adt->index);
++ if (index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ }
++ res = adtfn(index, data, len);
++
++ done:
++ up(&ip_set_app_mutex);
++ vfree(data);
++ if (res > 0)
++ res = 0;
++ DP("final result %d", res);
++ return res;
++}
++
++static int
++ip_set_sockfn_get(struct sock *sk, int optval, void *user, int *len)
++{
++ int res = 0;
++ unsigned *op;
++ ip_set_id_t index = IP_SET_INVALID_ID;
++ void *data;
++ int copylen = *len;
++
++ DP("optval=%d, user=%p, len=%d", optval, user, *len);
++ if (!capable(CAP_NET_ADMIN))
++ return -EPERM;
++ if (optval != SO_IP_SET)
++ return -EBADF;
++ if (*len < sizeof(unsigned)) {
++ ip_set_printk("short userdata (want >=%zu, got %d)",
++ sizeof(unsigned), *len);
++ return -EINVAL;
++ }
++ data = vmalloc(*len);
++ if (!data) {
++ DP("out of mem for %d bytes", *len);
++ return -ENOMEM;
++ }
++ if (copy_from_user(data, user, *len) != 0) {
++ res = -EFAULT;
++ goto done;
++ }
++ if (down_interruptible(&ip_set_app_mutex)) {
++ res = -EINTR;
++ goto done;
++ }
++
++ op = (unsigned *) data;
++ DP("op=%x", *op);
++
++ if (*op < IP_SET_OP_VERSION) {
++ /* Check the version at the beginning of operations */
++ struct ip_set_req_version *req_version =
++ (struct ip_set_req_version *) data;
++ if (req_version->version != IP_SET_PROTOCOL_VERSION) {
++ res = -EPROTO;
++ goto done;
++ }
++ }
++
++ switch (*op) {
++ case IP_SET_OP_VERSION: {
++ struct ip_set_req_version *req_version =
++ (struct ip_set_req_version *) data;
++
++ if (*len != sizeof(struct ip_set_req_version)) {
++ ip_set_printk("invalid VERSION (want %zu, got %d)",
++ sizeof(struct ip_set_req_version),
++ *len);
++ res = -EINVAL;
++ goto done;
++ }
++
++ req_version->version = IP_SET_PROTOCOL_VERSION;
++ res = copy_to_user(user, req_version,
++ sizeof(struct ip_set_req_version));
++ goto done;
++ }
++ case IP_SET_OP_GET_BYNAME: {
++ struct ip_set_req_get_set *req_get
++ = (struct ip_set_req_get_set *) data;
++
++ if (*len != sizeof(struct ip_set_req_get_set)) {
++ ip_set_printk("invalid GET_BYNAME (want %zu, got %d)",
++ sizeof(struct ip_set_req_get_set), *len);
++ res = -EINVAL;
++ goto done;
++ }
++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0';
++ index = ip_set_find_byname(req_get->set.name);
++ req_get->set.index = index;
++ goto copy;
++ }
++ case IP_SET_OP_GET_BYINDEX: {
++ struct ip_set_req_get_set *req_get
++ = (struct ip_set_req_get_set *) data;
++
++ if (*len != sizeof(struct ip_set_req_get_set)) {
++ ip_set_printk("invalid GET_BYINDEX (want %zu, got %d)",
++ sizeof(struct ip_set_req_get_set), *len);
++ res = -EINVAL;
++ goto done;
++ }
++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0';
++ index = ip_set_find_byindex(req_get->set.index);
++ strncpy(req_get->set.name,
++ index == IP_SET_INVALID_ID ? ""
++ : ip_set_list[index]->name, IP_SET_MAXNAMELEN);
++ goto copy;
++ }
++ case IP_SET_OP_ADT_GET: {
++ struct ip_set_req_adt_get *req_get
++ = (struct ip_set_req_adt_get *) data;
++
++ if (*len != sizeof(struct ip_set_req_adt_get)) {
++ ip_set_printk("invalid ADT_GET (want %zu, got %d)",
++ sizeof(struct ip_set_req_adt_get), *len);
++ res = -EINVAL;
++ goto done;
++ }
++ req_get->set.name[IP_SET_MAXNAMELEN - 1] = '\0';
++ index = ip_set_find_byname(req_get->set.name);
++ if (index != IP_SET_INVALID_ID) {
++ req_get->set.index = index;
++ strncpy(req_get->typename,
++ ip_set_list[index]->type->typename,
++ IP_SET_MAXNAMELEN - 1);
++ } else {
++ res = -ENOENT;
++ goto done;
++ }
++ goto copy;
++ }
++ case IP_SET_OP_MAX_SETS: {
++ struct ip_set_req_max_sets *req_max_sets
++ = (struct ip_set_req_max_sets *) data;
++ ip_set_id_t i;
++
++ if (*len != sizeof(struct ip_set_req_max_sets)) {
++ ip_set_printk("invalid MAX_SETS (want %zu, got %d)",
++ sizeof(struct ip_set_req_max_sets), *len);
++ res = -EINVAL;
++ goto done;
++ }
++
++ if (strcmp(req_max_sets->set.name, IPSET_TOKEN_ALL) == 0) {
++ req_max_sets->set.index = IP_SET_INVALID_ID;
++ } else {
++ req_max_sets->set.name[IP_SET_MAXNAMELEN - 1] = '\0';
++ req_max_sets->set.index =
++ ip_set_find_byname(req_max_sets->set.name);
++ if (req_max_sets->set.index == IP_SET_INVALID_ID) {
++ res = -ENOENT;
++ goto done;
++ }
++ }
++ req_max_sets->max_sets = ip_set_max;
++ req_max_sets->sets = 0;
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] != NULL)
++ req_max_sets->sets++;
++ }
++ goto copy;
++ }
++ case IP_SET_OP_LIST_SIZE:
++ case IP_SET_OP_SAVE_SIZE: {
++ struct ip_set_req_setnames *req_setnames
++ = (struct ip_set_req_setnames *) data;
++ struct ip_set_name_list *name_list;
++ struct ip_set *set;
++ ip_set_id_t i;
++ int used;
++
++ if (*len < sizeof(struct ip_set_req_setnames)) {
++ ip_set_printk("short LIST_SIZE (want >=%zu, got %d)",
++ sizeof(struct ip_set_req_setnames), *len);
++ res = -EINVAL;
++ goto done;
++ }
++
++ req_setnames->size = 0;
++ used = sizeof(struct ip_set_req_setnames);
++ for (i = 0; i < ip_set_max; i++) {
++ if (ip_set_list[i] == NULL)
++ continue;
++ name_list = (struct ip_set_name_list *)
++ (data + used);
++ used += sizeof(struct ip_set_name_list);
++ if (used > copylen) {
++ res = -EAGAIN;
++ goto done;
++ }
++ set = ip_set_list[i];
++ /* Fill in index, name, etc. */
++ name_list->index = i;
++ name_list->id = set->id;
++ strncpy(name_list->name,
++ set->name,
++ IP_SET_MAXNAMELEN - 1);
++ strncpy(name_list->typename,
++ set->type->typename,
++ IP_SET_MAXNAMELEN - 1);
++ DP("filled %s of type %s, index %u\n",
++ name_list->name, name_list->typename,
++ name_list->index);
++ if (!(req_setnames->index == IP_SET_INVALID_ID
++ || req_setnames->index == i))
++ continue;
++ /* Update size */
++ switch (*op) {
++ case IP_SET_OP_LIST_SIZE: {
++ req_setnames->size += sizeof(struct ip_set_list)
++ + set->type->header_size
++ + set->type->list_members_size(set);
++ FOREACH_HASH_DO(__set_hash_bindings_size_list,
++ i, &req_setnames->size);
++ break;
++ }
++ case IP_SET_OP_SAVE_SIZE: {
++ req_setnames->size += sizeof(struct ip_set_save)
++ + set->type->header_size
++ + set->type->list_members_size(set);
++ FOREACH_HASH_DO(__set_hash_bindings_size_save,
++ i, &req_setnames->size);
++ break;
++ }
++ default:
++ break;
++ }
++ }
++ if (copylen != used) {
++ res = -EAGAIN;
++ goto done;
++ }
++ goto copy;
++ }
++ case IP_SET_OP_LIST: {
++ struct ip_set_req_list *req_list
++ = (struct ip_set_req_list *) data;
++ ip_set_id_t i;
++ int used;
++
++ if (*len < sizeof(struct ip_set_req_list)) {
++ ip_set_printk("short LIST (want >=%zu, got %d)",
++ sizeof(struct ip_set_req_list), *len);
++ res = -EINVAL;
++ goto done;
++ }
++ index = req_list->index;
++ if (index != IP_SET_INVALID_ID
++ && ip_set_find_byindex(index) != index) {
++ res = -ENOENT;
++ goto done;
++ }
++ used = 0;
++ if (index == IP_SET_INVALID_ID) {
++ /* List all sets */
++ for (i = 0; i < ip_set_max && res == 0; i++) {
++ if (ip_set_list[i] != NULL)
++ res = ip_set_list_set(i, data, &used, *len);
++ }
++ } else {
++ /* List an individual set */
++ res = ip_set_list_set(index, data, &used, *len);
++ }
++ if (res != 0)
++ goto done;
++ else if (copylen != used) {
++ res = -EAGAIN;
++ goto done;
++ }
++ goto copy;
++ }
++ case IP_SET_OP_SAVE: {
++ struct ip_set_req_list *req_save
++ = (struct ip_set_req_list *) data;
++ ip_set_id_t i;
++ int used;
++
++ if (*len < sizeof(struct ip_set_req_list)) {
++ ip_set_printk("short SAVE (want >=%zu, got %d)",
++ sizeof(struct ip_set_req_list), *len);
++ res = -EINVAL;
++ goto done;
++ }
++ index = req_save->index;
++ if (index != IP_SET_INVALID_ID
++ && ip_set_find_byindex(index) != index) {
++ res = -ENOENT;
++ goto done;
++ }
++ used = 0;
++ if (index == IP_SET_INVALID_ID) {
++ /* Save all sets */
++ for (i = 0; i < ip_set_max && res == 0; i++) {
++ if (ip_set_list[i] != NULL)
++ res = ip_set_save_set(i, data, &used, *len);
++ }
++ } else {
++ /* Save an individual set */
++ res = ip_set_save_set(index, data, &used, *len);
++ }
++ if (res == 0)
++ res = ip_set_save_bindings(index, data, &used, *len);
++
++ if (res != 0)
++ goto done;
++ else if (copylen != used) {
++ res = -EAGAIN;
++ goto done;
++ }
++ goto copy;
++ }
++ case IP_SET_OP_RESTORE: {
++ struct ip_set_req_setnames *req_restore
++ = (struct ip_set_req_setnames *) data;
++ int line;
++
++ if (*len < sizeof(struct ip_set_req_setnames)
++ || *len != req_restore->size) {
++ ip_set_printk("invalid RESTORE (want =%zu, got %d)",
++ req_restore->size, *len);
++ res = -EINVAL;
++ goto done;
++ }
++ line = ip_set_restore(data + sizeof(struct ip_set_req_setnames),
++ req_restore->size - sizeof(struct ip_set_req_setnames));
++ DP("ip_set_restore: %u", line);
++ if (line != 0) {
++ res = -EAGAIN;
++ req_restore->size = line;
++ copylen = sizeof(struct ip_set_req_setnames);
++ goto copy;
++ }
++ goto done;
++ }
++ default:
++ res = -EBADMSG;
++ goto done;
++ } /* end of switch(op) */
++
++ copy:
++ DP("set %s, copylen %u", index != IP_SET_INVALID_ID
++ && ip_set_list[index]
++ ? ip_set_list[index]->name
++ : ":all:", copylen);
++ if (res == 0)
++ res = copy_to_user(user, data, copylen);
++ else
++ copy_to_user(user, data, copylen);
++
++ done:
++ up(&ip_set_app_mutex);
++ vfree(data);
++ if (res > 0)
++ res = 0;
++ DP("final result %d", res);
++ return res;
++}
++
++static struct nf_sockopt_ops so_set = {
++ .pf = PF_INET,
++ .set_optmin = SO_IP_SET,
++ .set_optmax = SO_IP_SET + 1,
++ .set = &ip_set_sockfn_set,
++ .get_optmin = SO_IP_SET,
++ .get_optmax = SO_IP_SET + 1,
++ .get = &ip_set_sockfn_get,
++ .use = 0
++};
++
++static int max_sets, hash_size;
++module_param(max_sets, int, 0600);
++MODULE_PARM_DESC(max_sets, "maximal number of sets");
++module_param(hash_size, int, 0600);
++MODULE_PARM_DESC(hash_size, "hash size for bindings");
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("module implementing core IP set support");
++
++static int __init init(void)
++{
++ int res;
++ ip_set_id_t i;
++
++ get_random_bytes(&ip_set_hash_random, 4);
++ if (max_sets)
++ ip_set_max = max_sets;
++ ip_set_list = vmalloc(sizeof(struct ip_set *) * ip_set_max);
++ if (!ip_set_list) {
++ printk(KERN_ERR "Unable to create ip_set_list\n");
++ return -ENOMEM;
++ }
++ memset(ip_set_list, 0, sizeof(struct ip_set *) * ip_set_max);
++ if (hash_size)
++ ip_set_bindings_hash_size = hash_size;
++ ip_set_hash = vmalloc(sizeof(struct list_head) * ip_set_bindings_hash_size);
++ if (!ip_set_hash) {
++ printk(KERN_ERR "Unable to create ip_set_hash\n");
++ vfree(ip_set_list);
++ return -ENOMEM;
++ }
++ for (i = 0; i < ip_set_bindings_hash_size; i++)
++ INIT_LIST_HEAD(&ip_set_hash[i]);
++
++ INIT_LIST_HEAD(&set_type_list);
++
++ res = nf_register_sockopt(&so_set);
++ if (res != 0) {
++ ip_set_printk("SO_SET registry failed: %d", res);
++ vfree(ip_set_list);
++ vfree(ip_set_hash);
++ return res;
++ }
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ /* There can't be any existing set or binding */
++ nf_unregister_sockopt(&so_set);
++ vfree(ip_set_list);
++ vfree(ip_set_hash);
++ DP("these are the famous last words");
++}
++
++EXPORT_SYMBOL(ip_set_register_set_type);
++EXPORT_SYMBOL(ip_set_unregister_set_type);
++
++EXPORT_SYMBOL(ip_set_get_byname);
++EXPORT_SYMBOL(ip_set_get_byindex);
++EXPORT_SYMBOL(ip_set_put);
++
++EXPORT_SYMBOL(ip_set_addip_kernel);
++EXPORT_SYMBOL(ip_set_delip_kernel);
++EXPORT_SYMBOL(ip_set_testip_kernel);
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_iphash.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_iphash.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_iphash.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_iphash.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,379 @@
++/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing an ip hash set */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++#include <linux/vmalloc.h>
++#include <linux/random.h>
++
++#include <net/ip.h>
++
++#include <linux/netfilter_ipv4/ip_set_malloc.h>
++#include <linux/netfilter_ipv4/ip_set_iphash.h>
++#include <linux/netfilter_ipv4/ip_set_jhash.h>
++#include <linux/netfilter_ipv4/ip_set_prime.h>
++
++static inline __u32
++jhash_ip(const struct ip_set_iphash *map, ip_set_ip_t ip)
++{
++ return jhash_1word(ip, map->initval);
++}
++
++static inline __u32
++randhash_ip(const struct ip_set_iphash *map, ip_set_ip_t ip)
++{
++ return (1 + ip % map->prime);
++}
++
++static inline __u32
++hash_id(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ __u32 jhash, randhash, id;
++ u_int16_t i;
++
++ *hash_ip = ip & map->netmask;
++ jhash = jhash_ip(map, *hash_ip);
++ randhash = randhash_ip(map, *hash_ip);
++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u, %u.%u.%u.%u",
++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip), HIPQUAD(map->netmask));
++
++ for (i = 0; i < map->probes; i++) {
++ id = (jhash + i * randhash) % map->hashsize;
++ DP("hash key: %u", id);
++ if (map->members[id] == *hash_ip)
++ return id;
++ /* No shortcut at testing - there can be deleted
++ * entries. */
++ }
++ return UINT_MAX;
++}
++
++static inline int
++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ return (hash_id(set, ip, hash_ip) != UINT_MAX);
++}
++
++static int
++testip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_iphash *req =
++ (struct ip_set_req_iphash *) data;
++
++ if (size != sizeof(struct ip_set_req_iphash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iphash),
++ size);
++ return -EINVAL;
++ }
++ return __testip(set, req->ip, hash_ip);
++}
++
++static int
++testip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __testip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static inline int
++__addip(struct ip_set_iphash *map, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ __u32 jhash, randhash, probe;
++ u_int16_t i;
++
++ *hash_ip = ip & map->netmask;
++ jhash = jhash_ip(map, *hash_ip);
++ randhash = randhash_ip(map, *hash_ip);
++
++ for (i = 0; i < map->probes; i++) {
++ probe = (jhash + i * randhash) % map->hashsize;
++ if (map->members[probe] == *hash_ip)
++ return -EEXIST;
++ if (!map->members[probe]) {
++ map->members[probe] = *hash_ip;
++ return 0;
++ }
++ }
++ /* Trigger rehashing */
++ return -EAGAIN;
++}
++
++static int
++addip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_iphash *req =
++ (struct ip_set_req_iphash *) data;
++
++ if (size != sizeof(struct ip_set_req_iphash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iphash),
++ size);
++ return -EINVAL;
++ }
++ return __addip((struct ip_set_iphash *) set->data, req->ip, hash_ip);
++}
++
++static int
++addip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __addip((struct ip_set_iphash *) set->data,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static int retry(struct ip_set *set)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ ip_set_ip_t hash_ip, *members;
++ u_int32_t i, hashsize;
++ unsigned newbytes;
++ int res;
++ struct ip_set_iphash tmp = {
++ .hashsize = map->hashsize,
++ .probes = map->probes,
++ .resize = map->resize,
++ .netmask = map->netmask,
++ };
++
++ if (map->resize == 0)
++ return -ERANGE;
++
++ again:
++ res = 0;
++
++ /* Calculate new parameters */
++ get_random_bytes(&tmp.initval, 4);
++ hashsize = tmp.hashsize + (tmp.hashsize * map->resize)/100;
++ if (hashsize == tmp.hashsize)
++ hashsize++;
++ tmp.prime = make_prime(hashsize);
++
++ ip_set_printk("rehashing of set %s triggered: "
++ "hashsize grows from %u to %u",
++ set->name, tmp.hashsize, hashsize);
++ tmp.hashsize = hashsize;
++
++ newbytes = hashsize * sizeof(ip_set_ip_t);
++ tmp.members = ip_set_malloc_atomic(newbytes);
++ if (!tmp.members) {
++ DP("out of memory for %d bytes", newbytes);
++ return -ENOMEM;
++ }
++ memset(tmp.members, 0, newbytes);
++
++ write_lock_bh(&set->lock);
++ map = (struct ip_set_iphash *) set->data; /* Play safe */
++ for (i = 0; i < map->hashsize && res == 0; i++) {
++ if (map->members[i])
++ res = __addip(&tmp, map->members[i], &hash_ip);
++ }
++ if (res) {
++ /* Failure, try again */
++ write_unlock_bh(&set->lock);
++ ip_set_free(tmp.members, newbytes);
++ goto again;
++ }
++
++ /* Success at resizing! */
++ members = map->members;
++ hashsize = map->hashsize;
++
++ map->initval = tmp.initval;
++ map->prime = tmp.prime;
++ map->hashsize = tmp.hashsize;
++ map->members = tmp.members;
++ write_unlock_bh(&set->lock);
++
++ ip_set_free(members, hashsize * sizeof(ip_set_ip_t));
++
++ return 0;
++}
++
++static inline int
++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ ip_set_ip_t id = hash_id(set, ip, hash_ip);
++
++ if (id == UINT_MAX)
++ return -EEXIST;
++
++ map->members[id] = 0;
++ return 0;
++}
++
++static int
++delip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_iphash *req =
++ (struct ip_set_req_iphash *) data;
++
++ if (size != sizeof(struct ip_set_req_iphash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iphash),
++ size);
++ return -EINVAL;
++ }
++ return __delip(set, req->ip, hash_ip);
++}
++
++static int
++delip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __delip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ unsigned newbytes;
++ struct ip_set_req_iphash_create *req =
++ (struct ip_set_req_iphash_create *) data;
++ struct ip_set_iphash *map;
++
++ if (size != sizeof(struct ip_set_req_iphash_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iphash_create),
++ size);
++ return -EINVAL;
++ }
++
++ if (req->hashsize < 1) {
++ ip_set_printk("hashsize too small");
++ return -ENOEXEC;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_iphash), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_iphash));
++ return -ENOMEM;
++ }
++ get_random_bytes(&map->initval, 4);
++ map->prime = make_prime(req->hashsize);
++ map->hashsize = req->hashsize;
++ map->probes = req->probes;
++ map->resize = req->resize;
++ map->netmask = req->netmask;
++ newbytes = map->hashsize * sizeof(ip_set_ip_t);
++ map->members = ip_set_malloc(newbytes);
++ if (!map->members) {
++ DP("out of memory for %d bytes", newbytes);
++ kfree(map);
++ return -ENOMEM;
++ }
++ memset(map->members, 0, newbytes);
++
++ set->data = map;
++ return 0;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++
++ ip_set_free(map->members, map->hashsize * sizeof(ip_set_ip_t));
++ kfree(map);
++
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ memset(map->members, 0, map->hashsize * sizeof(ip_set_ip_t));
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ struct ip_set_req_iphash_create *header =
++ (struct ip_set_req_iphash_create *) data;
++
++ header->hashsize = map->hashsize;
++ header->probes = map->probes;
++ header->resize = map->resize;
++ header->netmask = map->netmask;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++
++ return (map->hashsize * sizeof(ip_set_ip_t));
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_iphash *map = (struct ip_set_iphash *) set->data;
++ int bytes = map->hashsize * sizeof(ip_set_ip_t);
++
++ memcpy(data, map->members, bytes);
++}
++
++static struct ip_set_type ip_set_iphash = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_IP,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_iphash),
++ .addip = &addip,
++ .addip_kernel = &addip_kernel,
++ .retry = &retry,
++ .delip = &delip,
++ .delip_kernel = &delip_kernel,
++ .testip = &testip,
++ .testip_kernel = &testip_kernel,
++ .header_size = sizeof(struct ip_set_req_iphash_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("iphash type of IP sets");
++
++static int __init init(void)
++{
++ init_max_malloc_size();
++ return ip_set_register_set_type(&ip_set_iphash);
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_iphash);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_ipmap.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_ipmap.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_ipmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_ipmap.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,313 @@
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing an IP set type: the single bitmap type */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++
++#include <linux/netfilter_ipv4/ip_set_ipmap.h>
++
++static inline ip_set_ip_t
++ip_to_id(const struct ip_set_ipmap *map, ip_set_ip_t ip)
++{
++ return (ip - map->first_ip)/map->hosts;
++}
++
++static inline int
++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return -ERANGE;
++
++ *hash_ip = ip & map->netmask;
++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u",
++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip));
++ return !!test_bit(ip_to_id(map, *hash_ip), map->members);
++}
++
++static int
++testip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_ipmap *req =
++ (struct ip_set_req_ipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_ipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_ipmap),
++ size);
++ return -EINVAL;
++ }
++ return __testip(set, req->ip, hash_ip);
++}
++
++static int
++testip_kernel(struct ip_set *set,
++ const struct sk_buff *skb,
++ u_int32_t flags,
++ ip_set_ip_t *hash_ip)
++{
++ int res;
++
++ DP("flag: %s src: %u.%u.%u.%u dst: %u.%u.%u.%u",
++ flags & IPSET_SRC ? "SRC" : "DST",
++ NIPQUAD(skb->nh.iph->saddr),
++ NIPQUAD(skb->nh.iph->daddr));
++
++ res = __testip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++ return (res < 0 ? 0 : res);
++}
++
++static inline int
++__addip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return -ERANGE;
++
++ *hash_ip = ip & map->netmask;
++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip));
++ if (test_and_set_bit(ip_to_id(map, *hash_ip), map->members))
++ return -EEXIST;
++
++ return 0;
++}
++
++static int
++addip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_ipmap *req =
++ (struct ip_set_req_ipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_ipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_ipmap),
++ size);
++ return -EINVAL;
++ }
++ DP("%u.%u.%u.%u", HIPQUAD(req->ip));
++ return __addip(set, req->ip, hash_ip);
++}
++
++static int
++addip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __addip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static inline int
++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return -ERANGE;
++
++ *hash_ip = ip & map->netmask;
++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip));
++ if (!test_and_clear_bit(ip_to_id(map, *hash_ip), map->members))
++ return -EEXIST;
++
++ return 0;
++}
++
++static int
++delip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_ipmap *req =
++ (struct ip_set_req_ipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_ipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_ipmap),
++ size);
++ return -EINVAL;
++ }
++ return __delip(set, req->ip, hash_ip);
++}
++
++static int
++delip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __delip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ int newbytes;
++ struct ip_set_req_ipmap_create *req =
++ (struct ip_set_req_ipmap_create *) data;
++ struct ip_set_ipmap *map;
++
++ if (size != sizeof(struct ip_set_req_ipmap_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_ipmap_create),
++ size);
++ return -EINVAL;
++ }
++
++ DP("from %u.%u.%u.%u to %u.%u.%u.%u",
++ HIPQUAD(req->from), HIPQUAD(req->to));
++
++ if (req->from > req->to) {
++ DP("bad ip range");
++ return -ENOEXEC;
++ }
++
++ if (req->to - req->from > MAX_RANGE) {
++ ip_set_printk("range too big (max %d addresses)",
++ MAX_RANGE);
++ return -ENOEXEC;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_ipmap), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_ipmap));
++ return -ENOMEM;
++ }
++ map->first_ip = req->from;
++ map->last_ip = req->to;
++ map->netmask = req->netmask;
++
++ if (req->netmask == 0xFFFFFFFF) {
++ map->hosts = 1;
++ map->sizeid = map->last_ip - map->first_ip + 1;
++ } else {
++ unsigned int mask_bits, netmask_bits;
++ ip_set_ip_t mask;
++
++ map->first_ip &= map->netmask; /* Should we better bark? */
++
++ mask = range_to_mask(map->first_ip, map->last_ip, &mask_bits);
++ netmask_bits = mask_to_bits(map->netmask);
++
++ if (!mask || netmask_bits <= mask_bits)
++ return -ENOEXEC;
++
++ map->hosts = 2 << (32 - netmask_bits - 1);
++ map->sizeid = 2 << (netmask_bits - mask_bits - 1);
++ }
++ newbytes = bitmap_bytes(0, map->sizeid - 1);
++ map->members = kmalloc(newbytes, GFP_KERNEL);
++ if (!map->members) {
++ DP("out of memory for %d bytes", newbytes);
++ kfree(map);
++ return -ENOMEM;
++ }
++ memset(map->members, 0, newbytes);
++
++ set->data = map;
++ return 0;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++
++ kfree(map->members);
++ kfree(map);
++
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++ memset(map->members, 0, bitmap_bytes(0, map->sizeid - 1));
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++ struct ip_set_req_ipmap_create *header =
++ (struct ip_set_req_ipmap_create *) data;
++
++ header->from = map->first_ip;
++ header->to = map->last_ip;
++ header->netmask = map->netmask;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++
++ return bitmap_bytes(0, map->sizeid - 1);
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_ipmap *map = (struct ip_set_ipmap *) set->data;
++ int bytes = bitmap_bytes(0, map->sizeid - 1);
++
++ memcpy(data, map->members, bytes);
++}
++
++static struct ip_set_type ip_set_ipmap = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_IP,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_ipmap),
++ .addip = &addip,
++ .addip_kernel = &addip_kernel,
++ .delip = &delip,
++ .delip_kernel = &delip_kernel,
++ .testip = &testip,
++ .testip_kernel = &testip_kernel,
++ .header_size = sizeof(struct ip_set_req_ipmap_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("ipmap type of IP sets");
++
++static int __init init(void)
++{
++ return ip_set_register_set_type(&ip_set_ipmap);
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_ipmap);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_iptree.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_iptree.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_iptree.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_iptree.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,510 @@
++/* Copyright (C) 2005 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing an IP set type: the iptree type */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/slab.h>
++#include <linux/delay.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++
++#include <linux/netfilter_ipv4/ip_set_iptree.h>
++
++/* Garbage collection interval in seconds: */
++#define IPTREE_GC_TIME 5*60
++/* Sleep so many milliseconds before trying again
++ * to delete the gc timer at destroying a set */
++#define IPTREE_DESTROY_SLEEP 100
++
++static kmem_cache_t *branch_cachep;
++static kmem_cache_t *leaf_cachep;
++
++#define ABCD(a,b,c,d,addrp) do { \
++ a = ((unsigned char *)addrp)[3]; \
++ b = ((unsigned char *)addrp)[2]; \
++ c = ((unsigned char *)addrp)[1]; \
++ d = ((unsigned char *)addrp)[0]; \
++} while (0)
++
++#define TESTIP_WALK(map, elem, branch) do { \
++ if ((map)->tree[elem]) { \
++ branch = (map)->tree[elem]; \
++ } else \
++ return 0; \
++} while (0)
++
++static inline int
++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++
++ *hash_ip = ip;
++ ABCD(a, b, c, d, hash_ip);
++ DP("%u %u %u %u timeout %u", a, b, c, d, map->timeout);
++ TESTIP_WALK(map, a, btree);
++ TESTIP_WALK(btree, b, ctree);
++ TESTIP_WALK(ctree, c, dtree);
++ DP("%lu %lu", dtree->expires[d], jiffies);
++ return !!(map->timeout ? (time_after(dtree->expires[d], jiffies))
++ : dtree->expires[d]);
++}
++
++static int
++testip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_iptree *req =
++ (struct ip_set_req_iptree *) data;
++
++ if (size != sizeof(struct ip_set_req_iptree)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iptree),
++ size);
++ return -EINVAL;
++ }
++ return __testip(set, req->ip, hash_ip);
++}
++
++static int
++testip_kernel(struct ip_set *set,
++ const struct sk_buff *skb,
++ u_int32_t flags,
++ ip_set_ip_t *hash_ip)
++{
++ int res;
++
++ DP("flag: %s src: %u.%u.%u.%u dst: %u.%u.%u.%u",
++ flags & IPSET_SRC ? "SRC" : "DST",
++ NIPQUAD(skb->nh.iph->saddr),
++ NIPQUAD(skb->nh.iph->daddr));
++
++ res = __testip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++ return (res < 0 ? 0 : res);
++}
++
++#define ADDIP_WALK(map, elem, branch, type, cachep) do { \
++ if ((map)->tree[elem]) { \
++ DP("found %u", elem); \
++ branch = (map)->tree[elem]; \
++ } else { \
++ branch = (type *) \
++ kmem_cache_alloc(cachep, GFP_KERNEL); \
++ if (branch == NULL) \
++ return -ENOMEM; \
++ memset(branch, 0, sizeof(*branch)); \
++ (map)->tree[elem] = branch; \
++ DP("alloc %u", elem); \
++ } \
++} while (0)
++
++static inline int
++__addip(struct ip_set *set, ip_set_ip_t ip, unsigned int timeout,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++ int ret = 0;
++
++ *hash_ip = ip;
++ ABCD(a, b, c, d, hash_ip);
++ DP("%u %u %u %u timeout %u", a, b, c, d, timeout);
++ ADDIP_WALK(map, a, btree, struct ip_set_iptreeb, branch_cachep);
++ ADDIP_WALK(btree, b, ctree, struct ip_set_iptreec, branch_cachep);
++ ADDIP_WALK(ctree, c, dtree, struct ip_set_iptreed, leaf_cachep);
++ if (dtree->expires[d]
++ && (!map->timeout || time_after(dtree->expires[d], jiffies)))
++ ret = -EEXIST;
++ dtree->expires[d] = map->timeout ? (timeout * HZ + jiffies) : 1;
++ DP("%u %lu", d, dtree->expires[d]);
++ return ret;
++}
++
++static int
++addip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_req_iptree *req =
++ (struct ip_set_req_iptree *) data;
++
++ if (size != sizeof(struct ip_set_req_iptree)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iptree),
++ size);
++ return -EINVAL;
++ }
++ DP("%u.%u.%u.%u %u", HIPQUAD(req->ip), req->timeout);
++ return __addip(set, req->ip,
++ req->timeout ? req->timeout : map->timeout,
++ hash_ip);
++}
++
++static int
++addip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++
++ return __addip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ map->timeout,
++ hash_ip);
++}
++
++#define DELIP_WALK(map, elem, branch) do { \
++ if ((map)->tree[elem]) { \
++ branch = (map)->tree[elem]; \
++ } else \
++ return -EEXIST; \
++} while (0)
++
++static inline int
++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++
++ *hash_ip = ip;
++ ABCD(a, b, c, d, hash_ip);
++ DELIP_WALK(map, a, btree);
++ DELIP_WALK(btree, b, ctree);
++ DELIP_WALK(ctree, c, dtree);
++
++ if (dtree->expires[d]) {
++ dtree->expires[d] = 0;
++ return 0;
++ }
++ return -EEXIST;
++}
++
++static int
++delip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_iptree *req =
++ (struct ip_set_req_iptree *) data;
++
++ if (size != sizeof(struct ip_set_req_iptree)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iptree),
++ size);
++ return -EINVAL;
++ }
++ return __delip(set, req->ip, hash_ip);
++}
++
++static int
++delip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __delip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++#define LOOP_WALK_BEGIN(map, i, branch) \
++ for (i = 0; i < 255; i++) { \
++ if (!(map)->tree[i]) \
++ continue; \
++ branch = (map)->tree[i]
++
++#define LOOP_WALK_END }
++
++static void ip_tree_gc(unsigned long ul_set)
++{
++ struct ip_set *set = (void *) ul_set;
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++ unsigned char i,j,k;
++
++ i = j = k = 0;
++ DP("gc: %s", set->name);
++ write_lock_bh(&set->lock);
++ LOOP_WALK_BEGIN(map, a, btree);
++ LOOP_WALK_BEGIN(btree, b, ctree);
++ LOOP_WALK_BEGIN(ctree, c, dtree);
++ for (d = 0; d < 255; d++) {
++ if (dtree->expires[d]) {
++ DP("gc: %u %u %u %u: expires %lu jiffies %lu",
++ a, b, c, d,
++ dtree->expires[d], jiffies);
++ if (map->timeout
++ && time_before(dtree->expires[d], jiffies))
++ dtree->expires[d] = 0;
++ else
++ k = 1;
++ }
++ }
++ if (k == 0) {
++ DP("gc: %s: leaf %u %u %u empty",
++ set->name, a, b, c);
++ kmem_cache_free(leaf_cachep, dtree);
++ ctree->tree[c] = NULL;
++ } else {
++ DP("gc: %s: leaf %u %u %u not empty",
++ set->name, a, b, c);
++ j = 1;
++ k = 0;
++ }
++ LOOP_WALK_END;
++ if (j == 0) {
++ DP("gc: %s: branch %u %u empty",
++ set->name, a, b);
++ kmem_cache_free(branch_cachep, ctree);
++ btree->tree[b] = NULL;
++ } else {
++ DP("gc: %s: branch %u %u not empty",
++ set->name, a, b);
++ i = 1;
++ j = k = 0;
++ }
++ LOOP_WALK_END;
++ if (i == 0) {
++ DP("gc: %s: branch %u empty",
++ set->name, a);
++ kmem_cache_free(branch_cachep, btree);
++ map->tree[a] = NULL;
++ } else {
++ DP("gc: %s: branch %u not empty",
++ set->name, a);
++ i = j = k = 0;
++ }
++ LOOP_WALK_END;
++ write_unlock_bh(&set->lock);
++
++ map->gc.expires = jiffies + map->gc_interval * HZ;
++ add_timer(&map->gc);
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ struct ip_set_req_iptree_create *req =
++ (struct ip_set_req_iptree_create *) data;
++ struct ip_set_iptree *map;
++
++ if (size != sizeof(struct ip_set_req_iptree_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_iptree_create),
++ size);
++ return -EINVAL;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_iptree), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_iptree));
++ return -ENOMEM;
++ }
++ memset(map, 0, sizeof(*map));
++ map->timeout = req->timeout;
++ set->data = map;
++
++ /* If there is no timeout for the entries,
++ * we still have to call gc because delete
++ * do not clean up empty branches */
++ map->gc_interval = IPTREE_GC_TIME;
++ init_timer(&map->gc);
++ map->gc.data = (unsigned long) set;
++ map->gc.function = ip_tree_gc;
++ map->gc.expires = jiffies + map->gc_interval * HZ;
++ add_timer(&map->gc);
++
++ return 0;
++}
++
++static void __flush(struct ip_set_iptree *map)
++{
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned int a,b,c;
++
++ LOOP_WALK_BEGIN(map, a, btree);
++ LOOP_WALK_BEGIN(btree, b, ctree);
++ LOOP_WALK_BEGIN(ctree, c, dtree);
++ kmem_cache_free(leaf_cachep, dtree);
++ LOOP_WALK_END;
++ kmem_cache_free(branch_cachep, ctree);
++ LOOP_WALK_END;
++ kmem_cache_free(branch_cachep, btree);
++ LOOP_WALK_END;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++
++ while (!del_timer(&map->gc))
++ msleep(IPTREE_DESTROY_SLEEP);
++ __flush(map);
++ kfree(map);
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ unsigned int timeout = map->timeout;
++
++ __flush(map);
++ memset(map, 0, sizeof(*map));
++ map->timeout = timeout;
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_req_iptree_create *header =
++ (struct ip_set_req_iptree_create *) data;
++
++ header->timeout = map->timeout;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++ unsigned int count = 0;
++
++ LOOP_WALK_BEGIN(map, a, btree);
++ LOOP_WALK_BEGIN(btree, b, ctree);
++ LOOP_WALK_BEGIN(ctree, c, dtree);
++ for (d = 0; d < 255; d++) {
++ if (dtree->expires[d]
++ && (!map->timeout || time_after(dtree->expires[d], jiffies)))
++ count++;
++ }
++ LOOP_WALK_END;
++ LOOP_WALK_END;
++ LOOP_WALK_END;
++
++ DP("members %u", count);
++ return (count * sizeof(struct ip_set_req_iptree));
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_iptree *map = (struct ip_set_iptree *) set->data;
++ struct ip_set_iptreeb *btree;
++ struct ip_set_iptreec *ctree;
++ struct ip_set_iptreed *dtree;
++ unsigned char a,b,c,d;
++ size_t offset = 0;
++ struct ip_set_req_iptree *entry;
++
++ LOOP_WALK_BEGIN(map, a, btree);
++ LOOP_WALK_BEGIN(btree, b, ctree);
++ LOOP_WALK_BEGIN(ctree, c, dtree);
++ for (d = 0; d < 255; d++) {
++ if (dtree->expires[d]
++ && (!map->timeout || time_after(dtree->expires[d], jiffies))) {
++ entry = (struct ip_set_req_iptree *)(data + offset);
++ entry->ip = ((a << 24) | (b << 16) | (c << 8) | d);
++ entry->timeout = !map->timeout ? 0
++ : (dtree->expires[d] - jiffies)/HZ;
++ offset += sizeof(struct ip_set_req_iptree);
++ }
++ }
++ LOOP_WALK_END;
++ LOOP_WALK_END;
++ LOOP_WALK_END;
++}
++
++static struct ip_set_type ip_set_iptree = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_IP,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_iptree),
++ .addip = &addip,
++ .addip_kernel = &addip_kernel,
++ .delip = &delip,
++ .delip_kernel = &delip_kernel,
++ .testip = &testip,
++ .testip_kernel = &testip_kernel,
++ .header_size = sizeof(struct ip_set_req_iptree_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("iptree type of IP sets");
++
++static int __init init(void)
++{
++ int ret;
++
++ branch_cachep = kmem_cache_create("ip_set_iptreeb",
++ sizeof(struct ip_set_iptreeb),
++ 0, 0, NULL, NULL);
++ if (!branch_cachep) {
++ printk(KERN_ERR "Unable to create ip_set_iptreeb slab cache\n");
++ ret = -ENOMEM;
++ goto out;
++ }
++ leaf_cachep = kmem_cache_create("ip_set_iptreed",
++ sizeof(struct ip_set_iptreed),
++ 0, 0, NULL, NULL);
++ if (!leaf_cachep) {
++ printk(KERN_ERR "Unable to create ip_set_iptreed slab cache\n");
++ ret = -ENOMEM;
++ goto free_branch;
++ }
++ ret = ip_set_register_set_type(&ip_set_iptree);
++ if (ret == 0)
++ goto out;
++
++ kmem_cache_destroy(leaf_cachep);
++ free_branch:
++ kmem_cache_destroy(branch_cachep);
++ out:
++ return ret;
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_iptree);
++ kmem_cache_destroy(leaf_cachep);
++ kmem_cache_destroy(branch_cachep);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_macipmap.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_macipmap.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_macipmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_macipmap.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,338 @@
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Martin Josefsson <gandalf@wlug.westbo.se>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing an IP set type: the macipmap type */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++#include <linux/if_ether.h>
++#include <linux/vmalloc.h>
++
++#include <linux/netfilter_ipv4/ip_set_malloc.h>
++#include <linux/netfilter_ipv4/ip_set_macipmap.h>
++
++static int
++testip(struct ip_set *set, const void *data, size_t size, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_macipmap *map = (struct ip_set_macipmap *) set->data;
++ struct ip_set_macip *table = (struct ip_set_macip *) map->members;
++ struct ip_set_req_macipmap *req = (struct ip_set_req_macipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_macipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_macipmap),
++ size);
++ return -EINVAL;
++ }
++
++ if (req->ip < map->first_ip || req->ip > map->last_ip)
++ return -ERANGE;
++
++ *hash_ip = req->ip;
++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u",
++ set->name, HIPQUAD(req->ip), HIPQUAD(*hash_ip));
++ if (test_bit(IPSET_MACIP_ISSET,
++ (void *) &table[req->ip - map->first_ip].flags)) {
++ return (memcmp(req->ethernet,
++ &table[req->ip - map->first_ip].ethernet,
++ ETH_ALEN) == 0);
++ } else {
++ return (map->flags & IPSET_MACIP_MATCHUNSET ? 1 : 0);
++ }
++}
++
++static int
++testip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++ struct ip_set_macip *table =
++ (struct ip_set_macip *) map->members;
++ ip_set_ip_t ip;
++
++ ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr);
++ DP("flag: %s src: %u.%u.%u.%u dst: %u.%u.%u.%u",
++ flags & IPSET_SRC ? "SRC" : "DST",
++ NIPQUAD(skb->nh.iph->saddr),
++ NIPQUAD(skb->nh.iph->daddr));
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return 0;
++
++ *hash_ip = ip;
++ DP("set: %s, ip:%u.%u.%u.%u, %u.%u.%u.%u",
++ set->name, HIPQUAD(ip), HIPQUAD(*hash_ip));
++ if (test_bit(IPSET_MACIP_ISSET,
++ (void *) &table[ip - map->first_ip].flags)) {
++ /* Is mac pointer valid?
++ * If so, compare... */
++ return (skb->mac.raw >= skb->head
++ && (skb->mac.raw + ETH_HLEN) <= skb->data
++ && (memcmp(eth_hdr(skb)->h_source,
++ &table[ip - map->first_ip].ethernet,
++ ETH_ALEN) == 0));
++ } else {
++ return (map->flags & IPSET_MACIP_MATCHUNSET ? 1 : 0);
++ }
++}
++
++/* returns 0 on success */
++static inline int
++__addip(struct ip_set *set,
++ ip_set_ip_t ip, unsigned char *ethernet, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++ struct ip_set_macip *table =
++ (struct ip_set_macip *) map->members;
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return -ERANGE;
++ if (test_and_set_bit(IPSET_MACIP_ISSET,
++ (void *) &table[ip - map->first_ip].flags))
++ return -EEXIST;
++
++ *hash_ip = ip;
++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip));
++ memcpy(&table[ip - map->first_ip].ethernet, ethernet, ETH_ALEN);
++ return 0;
++}
++
++static int
++addip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_macipmap *req =
++ (struct ip_set_req_macipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_macipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_macipmap),
++ size);
++ return -EINVAL;
++ }
++ return __addip(set, req->ip, req->ethernet, hash_ip);
++}
++
++static int
++addip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ ip_set_ip_t ip;
++
++ ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr);
++
++ if (!(skb->mac.raw >= skb->head
++ && (skb->mac.raw + ETH_HLEN) <= skb->data))
++ return -EINVAL;
++
++ return __addip(set, ip, eth_hdr(skb)->h_source, hash_ip);
++}
++
++static inline int
++__delip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++ struct ip_set_macip *table =
++ (struct ip_set_macip *) map->members;
++
++ if (ip < map->first_ip || ip > map->last_ip)
++ return -ERANGE;
++ if (!test_and_clear_bit(IPSET_MACIP_ISSET,
++ (void *)&table[ip - map->first_ip].flags))
++ return -EEXIST;
++
++ *hash_ip = ip;
++ DP("%u.%u.%u.%u, %u.%u.%u.%u", HIPQUAD(ip), HIPQUAD(*hash_ip));
++ return 0;
++}
++
++static int
++delip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_macipmap *req =
++ (struct ip_set_req_macipmap *) data;
++
++ if (size != sizeof(struct ip_set_req_macipmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_macipmap),
++ size);
++ return -EINVAL;
++ }
++ return __delip(set, req->ip, hash_ip);
++}
++
++static int
++delip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __delip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static inline size_t members_size(ip_set_id_t from, ip_set_id_t to)
++{
++ return (size_t)((to - from + 1) * sizeof(struct ip_set_macip));
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ int newbytes;
++ struct ip_set_req_macipmap_create *req =
++ (struct ip_set_req_macipmap_create *) data;
++ struct ip_set_macipmap *map;
++
++ if (size != sizeof(struct ip_set_req_macipmap_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_macipmap_create),
++ size);
++ return -EINVAL;
++ }
++
++ DP("from %u.%u.%u.%u to %u.%u.%u.%u",
++ HIPQUAD(req->from), HIPQUAD(req->to));
++
++ if (req->from > req->to) {
++ DP("bad ip range");
++ return -ENOEXEC;
++ }
++
++ if (req->to - req->from > MAX_RANGE) {
++ ip_set_printk("range too big (max %d addresses)",
++ MAX_RANGE);
++ return -ENOEXEC;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_macipmap), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_macipmap));
++ return -ENOMEM;
++ }
++ map->flags = req->flags;
++ map->first_ip = req->from;
++ map->last_ip = req->to;
++ newbytes = members_size(map->first_ip, map->last_ip);
++ map->members = ip_set_malloc(newbytes);
++ if (!map->members) {
++ DP("out of memory for %d bytes", newbytes);
++ kfree(map);
++ return -ENOMEM;
++ }
++ memset(map->members, 0, newbytes);
++
++ set->data = map;
++ return 0;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++
++ ip_set_free(map->members, members_size(map->first_ip, map->last_ip));
++ kfree(map);
++
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++ memset(map->members, 0, members_size(map->first_ip, map->last_ip));
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++ struct ip_set_req_macipmap_create *header =
++ (struct ip_set_req_macipmap_create *) data;
++
++ DP("list_header %x %x %u", map->first_ip, map->last_ip,
++ map->flags);
++
++ header->from = map->first_ip;
++ header->to = map->last_ip;
++ header->flags = map->flags;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++
++ return members_size(map->first_ip, map->last_ip);
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_macipmap *map =
++ (struct ip_set_macipmap *) set->data;
++
++ int bytes = members_size(map->first_ip, map->last_ip);
++
++ memcpy(data, map->members, bytes);
++}
++
++static struct ip_set_type ip_set_macipmap = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_IP,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_macipmap),
++ .addip = &addip,
++ .addip_kernel = &addip_kernel,
++ .delip = &delip,
++ .delip_kernel = &delip_kernel,
++ .testip = &testip,
++ .testip_kernel = &testip_kernel,
++ .header_size = sizeof(struct ip_set_req_macipmap_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("macipmap type of IP sets");
++
++static int __init init(void)
++{
++ init_max_malloc_size();
++ return ip_set_register_set_type(&ip_set_macipmap);
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_macipmap);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_nethash.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_nethash.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_nethash.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_nethash.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,449 @@
++/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing a cidr nethash set */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++#include <linux/vmalloc.h>
++#include <linux/random.h>
++
++#include <net/ip.h>
++
++#include <linux/netfilter_ipv4/ip_set_malloc.h>
++#include <linux/netfilter_ipv4/ip_set_nethash.h>
++#include <linux/netfilter_ipv4/ip_set_jhash.h>
++#include <linux/netfilter_ipv4/ip_set_prime.h>
++
++static inline __u32
++jhash_ip(const struct ip_set_nethash *map, ip_set_ip_t ip)
++{
++ return jhash_1word(ip, map->initval);
++}
++
++static inline __u32
++randhash_ip(const struct ip_set_nethash *map, ip_set_ip_t ip)
++{
++ return (1 + ip % map->prime);
++}
++
++static inline __u32
++hash_id_cidr(struct ip_set_nethash *map,
++ ip_set_ip_t ip,
++ unsigned char cidr,
++ ip_set_ip_t *hash_ip)
++{
++ __u32 jhash, randhash, id;
++ u_int16_t i;
++
++ *hash_ip = pack(ip, cidr);
++ jhash = jhash_ip(map, *hash_ip);
++ randhash = randhash_ip(map, *hash_ip);
++
++ for (i = 0; i < map->probes; i++) {
++ id = (jhash + i * randhash) % map->hashsize;
++ DP("hash key: %u", id);
++ if (map->members[id] == *hash_ip)
++ return id;
++ }
++ return UINT_MAX;
++}
++
++static inline __u32
++hash_id(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ __u32 id = UINT_MAX;
++ int i;
++
++ for (i = 0; i < 30 && map->cidr[i]; i++) {
++ id = hash_id_cidr(map, ip, map->cidr[i], hash_ip);
++ if (id != UINT_MAX)
++ break;
++ }
++ return id;
++}
++
++static inline int
++__testip_cidr(struct ip_set *set, ip_set_ip_t ip, unsigned char cidr,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++
++ return (hash_id_cidr(map, ip, cidr, hash_ip) != UINT_MAX);
++}
++
++static inline int
++__testip(struct ip_set *set, ip_set_ip_t ip, ip_set_ip_t *hash_ip)
++{
++ return (hash_id(set, ip, hash_ip) != UINT_MAX);
++}
++
++static int
++testip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_nethash *req =
++ (struct ip_set_req_nethash *) data;
++
++ if (size != sizeof(struct ip_set_req_nethash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_nethash),
++ size);
++ return -EINVAL;
++ }
++ return (req->cidr == 32 ? __testip(set, req->ip, hash_ip)
++ : __testip_cidr(set, req->ip, req->cidr, hash_ip));
++}
++
++static int
++testip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ return __testip(set,
++ ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr),
++ hash_ip);
++}
++
++static inline int
++__addip_base(struct ip_set_nethash *map, ip_set_ip_t ip)
++{
++ __u32 jhash, randhash, probe;
++ u_int16_t i;
++
++ jhash = jhash_ip(map, ip);
++ randhash = randhash_ip(map, ip);
++
++ for (i = 0; i < map->probes; i++) {
++ probe = (jhash + i * randhash) % map->hashsize;
++ if (map->members[probe] == ip)
++ return -EEXIST;
++ if (!map->members[probe]) {
++ map->members[probe] = ip;
++ return 0;
++ }
++ }
++ /* Trigger rehashing */
++ return -EAGAIN;
++}
++
++static inline int
++__addip(struct ip_set_nethash *map, ip_set_ip_t ip, unsigned char cidr,
++ ip_set_ip_t *hash_ip)
++{
++ *hash_ip = pack(ip, cidr);
++ DP("%u.%u.%u.%u/%u, %u.%u.%u.%u", HIPQUAD(ip), cidr, HIPQUAD(*hash_ip));
++
++ return __addip_base(map, *hash_ip);
++}
++
++static void
++update_cidr_sizes(struct ip_set_nethash *map, unsigned char cidr)
++{
++ unsigned char next;
++ int i;
++
++ for (i = 0; i < 30 && map->cidr[i]; i++) {
++ if (map->cidr[i] == cidr) {
++ return;
++ } else if (map->cidr[i] < cidr) {
++ next = map->cidr[i];
++ map->cidr[i] = cidr;
++ cidr = next;
++ }
++ }
++ if (i < 30)
++ map->cidr[i] = cidr;
++}
++
++static int
++addip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_nethash *req =
++ (struct ip_set_req_nethash *) data;
++ int ret;
++
++ if (size != sizeof(struct ip_set_req_nethash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_nethash),
++ size);
++ return -EINVAL;
++ }
++ ret = __addip((struct ip_set_nethash *) set->data,
++ req->ip, req->cidr, hash_ip);
++
++ if (ret == 0)
++ update_cidr_sizes((struct ip_set_nethash *) set->data,
++ req->cidr);
++
++ return ret;
++}
++
++static int
++addip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ int ret = -ERANGE;
++ ip_set_ip_t ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr);
++
++ if (map->cidr[0])
++ ret = __addip(map, ip, map->cidr[0], hash_ip);
++
++ return ret;
++}
++
++static int retry(struct ip_set *set)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ ip_set_ip_t *members;
++ u_int32_t i, hashsize;
++ unsigned newbytes;
++ int res;
++ struct ip_set_nethash tmp = {
++ .hashsize = map->hashsize,
++ .probes = map->probes,
++ .resize = map->resize
++ };
++
++ if (map->resize == 0)
++ return -ERANGE;
++
++ memcpy(tmp.cidr, map->cidr, 30 * sizeof(unsigned char));
++ again:
++ res = 0;
++
++ /* Calculate new parameters */
++ get_random_bytes(&tmp.initval, 4);
++ hashsize = tmp.hashsize + (tmp.hashsize * map->resize)/100;
++ if (hashsize == tmp.hashsize)
++ hashsize++;
++ tmp.prime = make_prime(hashsize);
++
++ ip_set_printk("rehashing of set %s triggered: "
++ "hashsize grows from %u to %u",
++ set->name, tmp.hashsize, hashsize);
++ tmp.hashsize = hashsize;
++
++ newbytes = hashsize * sizeof(ip_set_ip_t);
++ tmp.members = ip_set_malloc_atomic(newbytes);
++ if (!tmp.members) {
++ DP("out of memory for %d bytes", newbytes);
++ return -ENOMEM;
++ }
++ memset(tmp.members, 0, newbytes);
++
++ write_lock_bh(&set->lock);
++ map = (struct ip_set_nethash *) set->data; /* Play safe */
++ for (i = 0; i < map->hashsize && res == 0; i++) {
++ if (map->members[i])
++ res = __addip_base(&tmp, map->members[i]);
++ }
++ if (res) {
++ /* Failure, try again */
++ write_unlock_bh(&set->lock);
++ ip_set_free(tmp.members, newbytes);
++ goto again;
++ }
++
++ /* Success at resizing! */
++ members = map->members;
++ hashsize = map->hashsize;
++
++ map->initval = tmp.initval;
++ map->prime = tmp.prime;
++ map->hashsize = tmp.hashsize;
++ map->members = tmp.members;
++ write_unlock_bh(&set->lock);
++
++ ip_set_free(members, hashsize * sizeof(ip_set_ip_t));
++
++ return 0;
++}
++
++static inline int
++__delip(struct ip_set_nethash *map, ip_set_ip_t ip, unsigned char cidr,
++ ip_set_ip_t *hash_ip)
++{
++ ip_set_ip_t id = hash_id_cidr(map, ip, cidr, hash_ip);
++
++ if (id == UINT_MAX)
++ return -EEXIST;
++
++ map->members[id] = 0;
++ return 0;
++}
++
++static int
++delip(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_ip)
++{
++ struct ip_set_req_nethash *req =
++ (struct ip_set_req_nethash *) data;
++
++ if (size != sizeof(struct ip_set_req_nethash)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_nethash),
++ size);
++ return -EINVAL;
++ }
++ /* TODO: no garbage collection in map->cidr */
++ return __delip((struct ip_set_nethash *) set->data,
++ req->ip, req->cidr, hash_ip);
++}
++
++static int
++delip_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_ip)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ int ret = -ERANGE;
++ ip_set_ip_t ip = ntohl(flags & IPSET_SRC ? skb->nh.iph->saddr
++ : skb->nh.iph->daddr);
++
++ if (map->cidr[0])
++ ret = __delip(map, ip, map->cidr[0], hash_ip);
++
++ return ret;
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ unsigned newbytes;
++ struct ip_set_req_nethash_create *req =
++ (struct ip_set_req_nethash_create *) data;
++ struct ip_set_nethash *map;
++
++ if (size != sizeof(struct ip_set_req_nethash_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_nethash_create),
++ size);
++ return -EINVAL;
++ }
++
++ if (req->hashsize < 1) {
++ ip_set_printk("hashsize too small");
++ return -ENOEXEC;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_nethash), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_nethash));
++ return -ENOMEM;
++ }
++ get_random_bytes(&map->initval, 4);
++ map->prime = make_prime(req->hashsize);
++ map->hashsize = req->hashsize;
++ map->probes = req->probes;
++ map->resize = req->resize;
++ memset(map->cidr, 0, 30 * sizeof(unsigned char));
++ newbytes = map->hashsize * sizeof(ip_set_ip_t);
++ map->members = ip_set_malloc(newbytes);
++ if (!map->members) {
++ DP("out of memory for %d bytes", newbytes);
++ kfree(map);
++ return -ENOMEM;
++ }
++ memset(map->members, 0, newbytes);
++
++ set->data = map;
++ return 0;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++
++ ip_set_free(map->members, map->hashsize * sizeof(ip_set_ip_t));
++ kfree(map);
++
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ memset(map->members, 0, map->hashsize * sizeof(ip_set_ip_t));
++ memset(map->cidr, 0, 30 * sizeof(unsigned char));
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ struct ip_set_req_nethash_create *header =
++ (struct ip_set_req_nethash_create *) data;
++
++ header->hashsize = map->hashsize;
++ header->probes = map->probes;
++ header->resize = map->resize;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++
++ return (map->hashsize * sizeof(ip_set_ip_t));
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_nethash *map = (struct ip_set_nethash *) set->data;
++ int bytes = map->hashsize * sizeof(ip_set_ip_t);
++
++ memcpy(data, map->members, bytes);
++}
++
++static struct ip_set_type ip_set_nethash = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_IP,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_nethash),
++ .addip = &addip,
++ .addip_kernel = &addip_kernel,
++ .retry = &retry,
++ .delip = &delip,
++ .delip_kernel = &delip_kernel,
++ .testip = &testip,
++ .testip_kernel = &testip_kernel,
++ .header_size = sizeof(struct ip_set_req_nethash_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("nethash type of IP sets");
++
++static int __init init(void)
++{
++ return ip_set_register_set_type(&ip_set_nethash);
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_nethash);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_set_portmap.c linux-2.6.19.dev/net/ipv4/netfilter/ip_set_portmap.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_set_portmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_set_portmap.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,325 @@
++/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module implementing a port set type as a bitmap */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/tcp.h>
++#include <linux/udp.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/bitops.h>
++#include <linux/spinlock.h>
++
++#include <net/ip.h>
++
++#include <linux/netfilter_ipv4/ip_set_portmap.h>
++
++/* We must handle non-linear skbs */
++static inline ip_set_ip_t
++get_port(const struct sk_buff *skb, u_int32_t flags)
++{
++ struct iphdr *iph = skb->nh.iph;
++ u_int16_t offset = ntohs(iph->frag_off) & IP_OFFSET;
++
++ switch (iph->protocol) {
++ case IPPROTO_TCP: {
++ struct tcphdr tcph;
++
++ /* See comments at tcp_match in ip_tables.c */
++ if (offset)
++ return INVALID_PORT;
++
++ if (skb_copy_bits(skb, skb->nh.iph->ihl*4, &tcph, sizeof(tcph)) < 0)
++ /* No choice either */
++ return INVALID_PORT;
++
++ return ntohs(flags & IPSET_SRC ?
++ tcph.source : tcph.dest);
++ }
++ case IPPROTO_UDP: {
++ struct udphdr udph;
++
++ if (offset)
++ return INVALID_PORT;
++
++ if (skb_copy_bits(skb, skb->nh.iph->ihl*4, &udph, sizeof(udph)) < 0)
++ /* No choice either */
++ return INVALID_PORT;
++
++ return ntohs(flags & IPSET_SRC ?
++ udph.source : udph.dest);
++ }
++ default:
++ return INVALID_PORT;
++ }
++}
++
++static inline int
++__testport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++
++ if (port < map->first_port || port > map->last_port)
++ return -ERANGE;
++
++ *hash_port = port;
++ DP("set: %s, port:%u, %u", set->name, port, *hash_port);
++ return !!test_bit(port - map->first_port, map->members);
++}
++
++static int
++testport(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_port)
++{
++ struct ip_set_req_portmap *req =
++ (struct ip_set_req_portmap *) data;
++
++ if (size != sizeof(struct ip_set_req_portmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_portmap),
++ size);
++ return -EINVAL;
++ }
++ return __testport(set, req->port, hash_port);
++}
++
++static int
++testport_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_port)
++{
++ int res;
++ ip_set_ip_t port = get_port(skb, flags);
++
++ DP("flag %s port %u", flags & IPSET_SRC ? "SRC" : "DST", port);
++ if (port == INVALID_PORT)
++ return 0;
++
++ res = __testport(set, port, hash_port);
++
++ return (res < 0 ? 0 : res);
++}
++
++static inline int
++__addport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++
++ if (port < map->first_port || port > map->last_port)
++ return -ERANGE;
++ if (test_and_set_bit(port - map->first_port, map->members))
++ return -EEXIST;
++
++ *hash_port = port;
++ DP("port %u", port);
++ return 0;
++}
++
++static int
++addport(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_port)
++{
++ struct ip_set_req_portmap *req =
++ (struct ip_set_req_portmap *) data;
++
++ if (size != sizeof(struct ip_set_req_portmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_portmap),
++ size);
++ return -EINVAL;
++ }
++ return __addport(set, req->port, hash_port);
++}
++
++static int
++addport_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_port)
++{
++ ip_set_ip_t port = get_port(skb, flags);
++
++ if (port == INVALID_PORT)
++ return -EINVAL;
++
++ return __addport(set, port, hash_port);
++}
++
++static inline int
++__delport(struct ip_set *set, ip_set_ip_t port, ip_set_ip_t *hash_port)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++
++ if (port < map->first_port || port > map->last_port)
++ return -ERANGE;
++ if (!test_and_clear_bit(port - map->first_port, map->members))
++ return -EEXIST;
++
++ *hash_port = port;
++ DP("port %u", port);
++ return 0;
++}
++
++static int
++delport(struct ip_set *set, const void *data, size_t size,
++ ip_set_ip_t *hash_port)
++{
++ struct ip_set_req_portmap *req =
++ (struct ip_set_req_portmap *) data;
++
++ if (size != sizeof(struct ip_set_req_portmap)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_portmap),
++ size);
++ return -EINVAL;
++ }
++ return __delport(set, req->port, hash_port);
++}
++
++static int
++delport_kernel(struct ip_set *set, const struct sk_buff *skb,
++ u_int32_t flags, ip_set_ip_t *hash_port)
++{
++ ip_set_ip_t port = get_port(skb, flags);
++
++ if (port == INVALID_PORT)
++ return -EINVAL;
++
++ return __delport(set, port, hash_port);
++}
++
++static int create(struct ip_set *set, const void *data, size_t size)
++{
++ int newbytes;
++ struct ip_set_req_portmap_create *req =
++ (struct ip_set_req_portmap_create *) data;
++ struct ip_set_portmap *map;
++
++ if (size != sizeof(struct ip_set_req_portmap_create)) {
++ ip_set_printk("data length wrong (want %zu, have %zu)",
++ sizeof(struct ip_set_req_portmap_create),
++ size);
++ return -EINVAL;
++ }
++
++ DP("from %u to %u", req->from, req->to);
++
++ if (req->from > req->to) {
++ DP("bad port range");
++ return -ENOEXEC;
++ }
++
++ if (req->to - req->from > MAX_RANGE) {
++ ip_set_printk("range too big (max %d ports)",
++ MAX_RANGE);
++ return -ENOEXEC;
++ }
++
++ map = kmalloc(sizeof(struct ip_set_portmap), GFP_KERNEL);
++ if (!map) {
++ DP("out of memory for %d bytes",
++ sizeof(struct ip_set_portmap));
++ return -ENOMEM;
++ }
++ map->first_port = req->from;
++ map->last_port = req->to;
++ newbytes = bitmap_bytes(req->from, req->to);
++ map->members = kmalloc(newbytes, GFP_KERNEL);
++ if (!map->members) {
++ DP("out of memory for %d bytes", newbytes);
++ kfree(map);
++ return -ENOMEM;
++ }
++ memset(map->members, 0, newbytes);
++
++ set->data = map;
++ return 0;
++}
++
++static void destroy(struct ip_set *set)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++
++ kfree(map->members);
++ kfree(map);
++
++ set->data = NULL;
++}
++
++static void flush(struct ip_set *set)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++ memset(map->members, 0, bitmap_bytes(map->first_port, map->last_port));
++}
++
++static void list_header(const struct ip_set *set, void *data)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++ struct ip_set_req_portmap_create *header =
++ (struct ip_set_req_portmap_create *) data;
++
++ DP("list_header %u %u", map->first_port, map->last_port);
++
++ header->from = map->first_port;
++ header->to = map->last_port;
++}
++
++static int list_members_size(const struct ip_set *set)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++
++ return bitmap_bytes(map->first_port, map->last_port);
++}
++
++static void list_members(const struct ip_set *set, void *data)
++{
++ struct ip_set_portmap *map = (struct ip_set_portmap *) set->data;
++ int bytes = bitmap_bytes(map->first_port, map->last_port);
++
++ memcpy(data, map->members, bytes);
++}
++
++static struct ip_set_type ip_set_portmap = {
++ .typename = SETTYPE_NAME,
++ .typecode = IPSET_TYPE_PORT,
++ .protocol_version = IP_SET_PROTOCOL_VERSION,
++ .create = &create,
++ .destroy = &destroy,
++ .flush = &flush,
++ .reqsize = sizeof(struct ip_set_req_portmap),
++ .addip = &addport,
++ .addip_kernel = &addport_kernel,
++ .delip = &delport,
++ .delip_kernel = &delport_kernel,
++ .testip = &testport,
++ .testip_kernel = &testport_kernel,
++ .header_size = sizeof(struct ip_set_req_portmap_create),
++ .list_header = &list_header,
++ .list_members_size = &list_members_size,
++ .list_members = &list_members,
++ .me = THIS_MODULE,
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("portmap type of IP sets");
++
++static int __init init(void)
++{
++ return ip_set_register_set_type(&ip_set_portmap);
++}
++
++static void __exit fini(void)
++{
++ /* FIXME: possible race with ip_set_create() */
++ ip_set_unregister_set_type(&ip_set_portmap);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_set.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_set.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_set.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_set.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,105 @@
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Martin Josefsson <gandalf@wlug.westbo.se>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* Kernel module to match an IP set. */
++
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/skbuff.h>
++
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_set.h>
++#include <linux/netfilter_ipv4/ipt_set.h>
++
++static inline int
++match_set(const struct ipt_set_info *info,
++ const struct sk_buff *skb,
++ int inv)
++{
++ if (ip_set_testip_kernel(info->index, skb, info->flags))
++ inv = !inv;
++ return inv;
++}
++
++static int
++match(const struct sk_buff *skb,
++ const struct net_device *in,
++ const struct net_device *out,
++ const struct xt_match *match,
++ const void *matchinfo,
++ int offset,
++ unsigned int protoff,
++ int *hotdrop)
++{
++ const struct ipt_set_info_match *info = matchinfo;
++
++ return match_set(&info->match_set,
++ skb,
++ info->match_set.flags[0] & IPSET_MATCH_INV);
++}
++
++static int
++checkentry(const char *tablename,
++ const void *ip,
++ const struct xt_match *match,
++ void *matchinfo,
++ unsigned int hook_mask)
++{
++ struct ipt_set_info_match *info =
++ (struct ipt_set_info_match *) matchinfo;
++ ip_set_id_t index;
++
++ index = ip_set_get_byindex(info->match_set.index);
++
++ if (index == IP_SET_INVALID_ID) {
++ ip_set_printk("Cannot find set indentified by id %u to match",
++ info->match_set.index);
++ return 0; /* error */
++ }
++ if (info->match_set.flags[IP_SET_MAX_BINDINGS] != 0) {
++ ip_set_printk("That's nasty!");
++ return 0; /* error */
++ }
++
++ return 1;
++}
++
++static void destroy(const struct xt_match *match, void *matchinfo)
++{
++ struct ipt_set_info_match *info = matchinfo;
++
++ ip_set_put(info->match_set.index);
++}
++
++static struct ipt_match set_match = {
++ .name = "set",
++ .match = &match,
++ .matchsize = sizeof(struct ipt_set_info_match),
++ .checkentry = &checkentry,
++ .destroy = &destroy,
++ .me = THIS_MODULE
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("iptables IP set match module");
++
++static int __init init(void)
++{
++ return ipt_register_match(&set_match);
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_match(&set_match);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_SET.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_SET.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_SET.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_SET.c 2006-12-14 03:13:43.000000000 +0100
+@@ -0,0 +1,120 @@
++/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
++ * Patrick Schaaf <bof@bof.de>
++ * Martin Josefsson <gandalf@wlug.westbo.se>
++ * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* ipt_SET.c - netfilter target to manipulate IP sets */
++
++#include <linux/types.h>
++#include <linux/ip.h>
++#include <linux/timer.h>
++#include <linux/module.h>
++#include <linux/netfilter.h>
++#include <linux/netdevice.h>
++#include <linux/if.h>
++#include <linux/inetdevice.h>
++#include <net/protocol.h>
++#include <net/checksum.h>
++#include <linux/netfilter_ipv4.h>
++#include <linux/netfilter_ipv4/ip_nat_rule.h>
++#include <linux/netfilter_ipv4/ipt_set.h>
++
++static unsigned int
++target(struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ unsigned int hooknum,
++ const struct xt_target *target,
++ const void *targinfo)
++{
++ const struct ipt_set_info_target *info = targinfo;
++
++ if (info->add_set.index != IP_SET_INVALID_ID)
++ ip_set_addip_kernel(info->add_set.index,
++ *pskb,
++ info->add_set.flags);
++ if (info->del_set.index != IP_SET_INVALID_ID)
++ ip_set_delip_kernel(info->del_set.index,
++ *pskb,
++ info->del_set.flags);
++
++ return IPT_CONTINUE;
++}
++
++static int
++checkentry(const char *tablename,
++ const void *e,
++ const struct xt_target *target,
++ void *targinfo,
++ unsigned int hook_mask)
++{
++ struct ipt_set_info_target *info =
++ (struct ipt_set_info_target *) targinfo;
++ ip_set_id_t index;
++
++ if (info->add_set.index != IP_SET_INVALID_ID) {
++ index = ip_set_get_byindex(info->add_set.index);
++ if (index == IP_SET_INVALID_ID) {
++ ip_set_printk("cannot find add_set index %u as target",
++ info->add_set.index);
++ return 0; /* error */
++ }
++ }
++
++ if (info->del_set.index != IP_SET_INVALID_ID) {
++ index = ip_set_get_byindex(info->del_set.index);
++ if (index == IP_SET_INVALID_ID) {
++ ip_set_printk("cannot find del_set index %u as target",
++ info->del_set.index);
++ return 0; /* error */
++ }
++ }
++ if (info->add_set.flags[IP_SET_MAX_BINDINGS] != 0
++ || info->del_set.flags[IP_SET_MAX_BINDINGS] != 0) {
++ ip_set_printk("That's nasty!");
++ return 0; /* error */
++ }
++
++ return 1;
++}
++
++static void destroy(const struct xt_target *target, void *targetinfo)
++{
++ struct ipt_set_info_target *info = targetinfo;
++
++ if (info->add_set.index != IP_SET_INVALID_ID)
++ ip_set_put(info->add_set.index);
++ if (info->del_set.index != IP_SET_INVALID_ID)
++ ip_set_put(info->del_set.index);
++}
++
++static struct ipt_target SET_target = {
++ .name = "SET",
++ .target = target,
++ .targetsize = sizeof(struct ipt_set_info_target),
++ .checkentry = checkentry,
++ .destroy = destroy,
++ .me = THIS_MODULE
++};
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>");
++MODULE_DESCRIPTION("iptables IP set target module");
++
++static int __init init(void)
++{
++ return ipt_register_target(&SET_target);
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_target(&SET_target);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Kconfig linux-2.6.19.dev/net/ipv4/netfilter/Kconfig
+--- linux-2.6.19.old/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:41.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:43.000000000 +0100
+@@ -647,5 +647,106 @@
+ Allows altering the ARP packet payload: source and destination
+ hardware and network addresses.
+
++config IP_NF_SET
++ tristate "IP set support"
++ depends on INET && NETFILTER
++ help
++ This option adds IP set support to the kernel.
++ In order to define and use sets, you need the userspace utility
++ ipset(8).
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_MAX
++ int "Maximum number of IP sets"
++ default 256
++ range 2 65534
++ depends on IP_NF_SET
++ help
++ You can define here default value of the maximum number
++ of IP sets for the kernel.
++
++ The value can be overriden by the 'max_sets' module
++ parameter of the 'ip_set' module.
++
++config IP_NF_SET_HASHSIZE
++ int "Hash size for bindings of IP sets"
++ default 1024
++ depends on IP_NF_SET
++ help
++ You can define here default value of the hash size for
++ bindings of IP sets.
++
++ The value can be overriden by the 'hash_size' module
++ parameter of the 'ip_set' module.
++
++config IP_NF_SET_IPMAP
++ tristate "ipmap set support"
++ depends on IP_NF_SET
++ help
++ This option adds the ipmap set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_MACIPMAP
++ tristate "macipmap set support"
++ depends on IP_NF_SET
++ help
++ This option adds the macipmap set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_PORTMAP
++ tristate "portmap set support"
++ depends on IP_NF_SET
++ help
++ This option adds the portmap set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_IPHASH
++ tristate "iphash set support"
++ depends on IP_NF_SET
++ help
++ This option adds the iphash set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_NETHASH
++ tristate "nethash set support"
++ depends on IP_NF_SET
++ help
++ This option adds the nethash set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_SET_IPTREE
++ tristate "iptree set support"
++ depends on IP_NF_SET
++ help
++ This option adds the iptree set type support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_MATCH_SET
++ tristate "set match support"
++ depends on IP_NF_SET
++ help
++ Set matching matches against given IP sets.
++ You need the ipset utility to create and set up the sets.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++config IP_NF_TARGET_SET
++ tristate "SET target support"
++ depends on IP_NF_SET
++ help
++ The SET target makes possible to add/delete entries
++ in IP sets.
++ You need the ipset utility to create and set up the sets.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
++
+ endmenu
+
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Makefile linux-2.6.19.dev/net/ipv4/netfilter/Makefile
+--- linux-2.6.19.old/net/ipv4/netfilter/Makefile 2006-12-14 03:13:41.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Makefile 2006-12-14 03:13:43.000000000 +0100
+@@ -54,6 +54,7 @@
+
+ # matches
+ obj-$(CONFIG_IP_NF_MATCH_HASHLIMIT) += ipt_hashlimit.o
++obj-$(CONFIG_IP_NF_MATCH_SET) += ipt_set.o
+ obj-$(CONFIG_IP_NF_MATCH_IPRANGE) += ipt_iprange.o
+ obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
+ obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
+@@ -77,6 +78,17 @@
+ obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
+ obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o
+ obj-$(CONFIG_IP_NF_TARGET_TCPMSS) += ipt_TCPMSS.o
++obj-$(CONFIG_IP_NF_TARGET_SET) += ipt_SET.o
++
++# sets
++obj-$(CONFIG_IP_NF_SET) += ip_set.o
++obj-$(CONFIG_IP_NF_SET_IPMAP) += ip_set_ipmap.o
++obj-$(CONFIG_IP_NF_SET_PORTMAP) += ip_set_portmap.o
++obj-$(CONFIG_IP_NF_SET_MACIPMAP) += ip_set_macipmap.o
++obj-$(CONFIG_IP_NF_SET_IPHASH) += ip_set_iphash.o
++obj-$(CONFIG_IP_NF_SET_NETHASH) += ip_set_nethash.o
++obj-$(CONFIG_IP_NF_SET_IPTREE) += ip_set_iptree.o
++
+ obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o
+ obj-$(CONFIG_IP_NF_TARGET_TTL) += ipt_TTL.o
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/140-netfilter_time.patch b/packages/linux/linux-magicbox-2.6.19.2/140-netfilter_time.patch
new file mode 100644
index 0000000000..d217157d78
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/140-netfilter_time.patch
@@ -0,0 +1,241 @@
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_time.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_time.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_time.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_time.h 2006-12-14 03:13:45.000000000 +0100
+@@ -0,0 +1,18 @@
++#ifndef __ipt_time_h_included__
++#define __ipt_time_h_included__
++
++
++struct ipt_time_info {
++ u_int8_t days_match; /* 1 bit per day. -SMTWTFS */
++ u_int16_t time_start; /* 0 < time_start < 23*60+59 = 1439 */
++ u_int16_t time_stop; /* 0:0 < time_stat < 23:59 */
++
++ /* FIXME: Keep this one for userspace iptables binary compability: */
++ u_int8_t kerneltime; /* ignore skb time (and use kerneltime) or not. */
++
++ time_t date_start;
++ time_t date_stop;
++};
++
++
++#endif /* __ipt_time_h_included__ */
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_time.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_time.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_time.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_time.c 2006-12-14 03:13:45.000000000 +0100
+@@ -0,0 +1,178 @@
++/*
++ This is a module which is used for time matching
++ It is using some modified code from dietlibc (localtime() function)
++ that you can find at http://www.fefe.de/dietlibc/
++ This file is distributed under the terms of the GNU General Public
++ License (GPL). Copies of the GPL can be obtained from: ftp://prep.ai.mit.edu/pub/gnu/GPL
++ 2001-05-04 Fabrice MARIE <fabrice@netfilter.org> : initial development.
++ 2001-21-05 Fabrice MARIE <fabrice@netfilter.org> : bug fix in the match code,
++ thanks to "Zeng Yu" <zengy@capitel.com.cn> for bug report.
++ 2001-26-09 Fabrice MARIE <fabrice@netfilter.org> : force the match to be in LOCAL_IN or PRE_ROUTING only.
++ 2001-30-11 Fabrice : added the possibility to use the match in FORWARD/OUTPUT with a little hack,
++ added Nguyen Dang Phuoc Dong <dongnd@tlnet.com.vn> patch to support timezones.
++ 2004-05-02 Fabrice : added support for date matching, from an idea of Fabien COELHO.
++*/
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ipt_time.h>
++#include <linux/time.h>
++
++MODULE_AUTHOR("Fabrice MARIE <fabrice@netfilter.org>");
++MODULE_DESCRIPTION("Match arrival timestamp/date");
++MODULE_LICENSE("GPL");
++
++struct tm
++{
++ int tm_sec; /* Seconds. [0-60] (1 leap second) */
++ int tm_min; /* Minutes. [0-59] */
++ int tm_hour; /* Hours. [0-23] */
++ int tm_mday; /* Day. [1-31] */
++ int tm_mon; /* Month. [0-11] */
++ int tm_year; /* Year - 1900. */
++ int tm_wday; /* Day of week. [0-6] */
++ int tm_yday; /* Days in year.[0-365] */
++ int tm_isdst; /* DST. [-1/0/1]*/
++
++ long int tm_gmtoff; /* we don't care, we count from GMT */
++ const char *tm_zone; /* we don't care, we count from GMT */
++};
++
++void
++localtime(const u32 time, struct tm *r);
++
++static int
++match(const struct sk_buff *skb,
++ const struct net_device *in,
++ const struct net_device *out,
++ const struct xt_match *match,
++ const void *matchinfo,
++ int offset,
++ unsigned int protoff,
++ int *hotdrop)
++{
++ const struct ipt_time_info *info = matchinfo; /* match info for rule */
++ struct tm currenttime; /* time human readable */
++ u_int8_t days_of_week[7] = {64, 32, 16, 8, 4, 2, 1};
++ u_int16_t packet_time;
++
++ /* We might not have a timestamp, get one */
++ if (skb->tstamp.off_sec == 0)
++ __net_timestamp((struct sk_buff *)skb);
++
++ /* First we make sure we are in the date start-stop boundaries */
++ if ((skb->tstamp.off_sec < info->date_start) || (skb->tstamp.off_sec > info->date_stop))
++ return 0; /* We are outside the date boundaries */
++
++ /* Transform the timestamp of the packet, in a human readable form */
++ localtime(skb->tstamp.off_sec, &currenttime);
++
++ /* check if we match this timestamp, we start by the days... */
++ if ((days_of_week[currenttime.tm_wday] & info->days_match) != days_of_week[currenttime.tm_wday])
++ return 0; /* the day doesn't match */
++
++ /* ... check the time now */
++ packet_time = (currenttime.tm_hour * 60) + currenttime.tm_min;
++ if ((packet_time < info->time_start) || (packet_time > info->time_stop))
++ return 0;
++
++ /* here we match ! */
++ return 1;
++}
++
++static int
++checkentry(const char *tablename,
++ const void *ip,
++ const struct xt_match *match,
++ void *matchinfo,
++ unsigned int hook_mask)
++{
++ struct ipt_time_info *info = matchinfo; /* match info for rule */
++
++ /* First, check that we are in the correct hooks */
++ if (hook_mask
++ & ~((1 << NF_IP_PRE_ROUTING) | (1 << NF_IP_LOCAL_IN) | (1 << NF_IP_FORWARD) | (1 << NF_IP_LOCAL_OUT)))
++ {
++ printk("ipt_time: error, only valid for PRE_ROUTING, LOCAL_IN, FORWARD and OUTPUT)\n");
++ return 0;
++ }
++
++ /* Now check the coherence of the data ... */
++ if ((info->time_start > 1439) || /* 23*60+59 = 1439*/
++ (info->time_stop > 1439))
++ {
++ printk(KERN_WARNING "ipt_time: invalid argument\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++static struct ipt_match time_match = {
++ .name = "time",
++ .match = &match,
++ .matchsize = sizeof(struct ipt_time_info),
++ .checkentry = &checkentry,
++ .me = THIS_MODULE
++};
++
++static int __init init(void)
++{
++ printk("ipt_time loading\n");
++ return ipt_register_match(&time_match);
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_match(&time_match);
++ printk("ipt_time unloaded\n");
++}
++
++module_init(init);
++module_exit(fini);
++
++
++/* The part below is borowed and modified from dietlibc */
++
++/* seconds per day */
++#define SPD 24*60*60
++
++void
++localtime(const u32 time, struct tm *r) {
++ u32 i, timep;
++ extern struct timezone sys_tz;
++ const unsigned int __spm[12] =
++ { 0,
++ (31),
++ (31+28),
++ (31+28+31),
++ (31+28+31+30),
++ (31+28+31+30+31),
++ (31+28+31+30+31+30),
++ (31+28+31+30+31+30+31),
++ (31+28+31+30+31+30+31+31),
++ (31+28+31+30+31+30+31+31+30),
++ (31+28+31+30+31+30+31+31+30+31),
++ (31+28+31+30+31+30+31+31+30+31+30),
++ };
++ register u32 work;
++
++ timep = time - (sys_tz.tz_minuteswest * 60);
++ work=timep%(SPD);
++ r->tm_sec=work%60; work/=60;
++ r->tm_min=work%60; r->tm_hour=work/60;
++ work=timep/(SPD);
++ r->tm_wday=(4+work)%7;
++ for (i=1970; ; ++i) {
++ register time_t k= (!(i%4) && ((i%100) || !(i%400)))?366:365;
++ if (work>k)
++ work-=k;
++ else
++ break;
++ }
++ r->tm_year=i-1900;
++ for (i=11; i && __spm[i]>work; --i) ;
++ r->tm_mon=i;
++ r->tm_mday=work-__spm[i]+1;
++}
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Kconfig linux-2.6.19.dev/net/ipv4/netfilter/Kconfig
+--- linux-2.6.19.old/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:45.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:45.000000000 +0100
+@@ -263,6 +263,22 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++
++config IP_NF_MATCH_TIME
++ tristate 'TIME match support'
++ depends on IP_NF_IPTABLES
++ help
++ This option adds a `time' match, which allows you
++ to match based on the packet arrival time/date
++ (arrival time/date at the machine which netfilter is running on) or
++ departure time/date (for locally generated packets).
++
++ If you say Y here, try iptables -m time --help for more information.
++ If you want to compile it as a module, say M here and read
++
++ Documentation/modules.txt. If unsure, say `N'.
++
++
+ config IP_NF_MATCH_RECENT
+ tristate "recent match support"
+ depends on IP_NF_IPTABLES
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Makefile linux-2.6.19.dev/net/ipv4/netfilter/Makefile
+--- linux-2.6.19.old/net/ipv4/netfilter/Makefile 2006-12-14 03:13:45.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Makefile 2006-12-14 03:13:45.000000000 +0100
+@@ -58,6 +58,7 @@
+ obj-$(CONFIG_IP_NF_MATCH_IPRANGE) += ipt_iprange.o
+ obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
+ obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
++obj-$(CONFIG_IP_NF_MATCH_TIME) += ipt_time.o
+ obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
+ obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
+ obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
diff --git a/packages/linux/linux-magicbox-2.6.19.2/150-netfilter_imq.patch b/packages/linux/linux-magicbox-2.6.19.2/150-netfilter_imq.patch
new file mode 100644
index 0000000000..54324022a9
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/150-netfilter_imq.patch
@@ -0,0 +1,892 @@
+diff -urN linux-2.6.19/drivers/net/imq.c linux-2.6.19+imq/drivers/net/imq.c
+--- linux-2.6.19/drivers/net/imq.c 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19+imq/drivers/net/imq.c 2006-12-05 23:01:02.000000000 +1030
+@@ -0,0 +1,402 @@
++/*
++ * Pseudo-driver for the intermediate queue device.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ *
++ * Authors: Patrick McHardy, <kaber@trash.net>
++ *
++ * The first version was written by Martin Devera, <devik@cdi.cz>
++ *
++ * Credits: Jan Rafaj <imq2t@cedric.vabo.cz>
++ * - Update patch to 2.4.21
++ * Sebastian Strollo <sstrollo@nortelnetworks.com>
++ * - Fix "Dead-loop on netdevice imq"-issue
++ * Marcel Sebek <sebek64@post.cz>
++ * - Update to 2.6.2-rc1
++ *
++ * After some time of inactivity there is a group taking care
++ * of IMQ again: http://www.linuximq.net
++ *
++ *
++ * 2004/06/30 - New version of IMQ patch to kernels <=2.6.7 including
++ * the following changes:
++ *
++ * - Correction of ipv6 support "+"s issue (Hasso Tepper)
++ * - Correction of imq_init_devs() issue that resulted in
++ * kernel OOPS unloading IMQ as module (Norbert Buchmuller)
++ * - Addition of functionality to choose number of IMQ devices
++ * during kernel config (Andre Correa)
++ * - Addition of functionality to choose how IMQ hooks on
++ * PRE and POSTROUTING (after or before NAT) (Andre Correa)
++ * - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)
++ *
++ *
++ * 2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were
++ * released with almost no problems. 2.6.14-x was released
++ * with some important changes: nfcache was removed; After
++ * some weeks of trouble we figured out that some IMQ fields
++ * in skb were missing in skbuff.c - skb_clone and copy_skb_header.
++ * These functions are correctly patched by this new patch version.
++ *
++ * Thanks for all who helped to figure out all the problems with
++ * 2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,
++ * Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully
++ * I didn't forget anybody). I apologize again for my lack of time.
++ *
++ * More info at: http://www.linuximq.net/ (Andre Correa)
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/moduleparam.h>
++#include <linux/skbuff.h>
++#include <linux/netdevice.h>
++#include <linux/rtnetlink.h>
++#include <linux/if_arp.h>
++#include <linux/netfilter.h>
++#include <linux/netfilter_ipv4.h>
++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
++ #include <linux/netfilter_ipv6.h>
++#endif
++#include <linux/imq.h>
++#include <net/pkt_sched.h>
++
++extern int qdisc_restart1(struct net_device *dev);
++
++static nf_hookfn imq_nf_hook;
++
++static struct nf_hook_ops imq_ingress_ipv4 = {
++ .hook = imq_nf_hook,
++ .owner = THIS_MODULE,
++ .pf = PF_INET,
++ .hooknum = NF_IP_PRE_ROUTING,
++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
++ .priority = NF_IP_PRI_MANGLE + 1
++#else
++ .priority = NF_IP_PRI_NAT_DST + 1
++#endif
++};
++
++static struct nf_hook_ops imq_egress_ipv4 = {
++ .hook = imq_nf_hook,
++ .owner = THIS_MODULE,
++ .pf = PF_INET,
++ .hooknum = NF_IP_POST_ROUTING,
++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
++ .priority = NF_IP_PRI_LAST
++#else
++ .priority = NF_IP_PRI_NAT_SRC - 1
++#endif
++};
++
++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
++static struct nf_hook_ops imq_ingress_ipv6 = {
++ .hook = imq_nf_hook,
++ .owner = THIS_MODULE,
++ .pf = PF_INET6,
++ .hooknum = NF_IP6_PRE_ROUTING,
++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
++ .priority = NF_IP6_PRI_MANGLE + 1
++#else
++ .priority = NF_IP6_PRI_NAT_DST + 1
++#endif
++};
++
++static struct nf_hook_ops imq_egress_ipv6 = {
++ .hook = imq_nf_hook,
++ .owner = THIS_MODULE,
++ .pf = PF_INET6,
++ .hooknum = NF_IP6_POST_ROUTING,
++#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
++ .priority = NF_IP6_PRI_LAST
++#else
++ .priority = NF_IP6_PRI_NAT_SRC - 1
++#endif
++};
++#endif
++
++#if defined(CONFIG_IMQ_NUM_DEVS)
++static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;
++#else
++static unsigned int numdevs = 2;
++#endif
++
++static struct net_device *imq_devs;
++
++static struct net_device_stats *imq_get_stats(struct net_device *dev)
++{
++ return (struct net_device_stats *)dev->priv;
++}
++
++/* called for packets kfree'd in qdiscs at places other than enqueue */
++static void imq_skb_destructor(struct sk_buff *skb)
++{
++ struct nf_info *info = skb->nf_info;
++
++ if (info) {
++ if (info->indev)
++ dev_put(info->indev);
++ if (info->outdev)
++ dev_put(info->outdev);
++ kfree(info);
++ }
++}
++
++static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct net_device_stats *stats = (struct net_device_stats*) dev->priv;
++
++ stats->tx_bytes += skb->len;
++ stats->tx_packets++;
++
++ skb->imq_flags = 0;
++ skb->destructor = NULL;
++
++ dev->trans_start = jiffies;
++ nf_reinject(skb, skb->nf_info, NF_ACCEPT);
++ return 0;
++}
++
++static int imq_nf_queue(struct sk_buff *skb, struct nf_info *info, unsigned queue_num, void *data)
++{
++ struct net_device *dev;
++ struct net_device_stats *stats;
++ struct sk_buff *skb2 = NULL;
++ struct Qdisc *q;
++ unsigned int index = skb->imq_flags&IMQ_F_IFMASK;
++ int ret = -1;
++
++ if (index > numdevs)
++ return -1;
++
++ dev = imq_devs + index;
++ if (!(dev->flags & IFF_UP)) {
++ skb->imq_flags = 0;
++ nf_reinject(skb, info, NF_ACCEPT);
++ return 0;
++ }
++ dev->last_rx = jiffies;
++
++ if (skb->destructor) {
++ skb2 = skb;
++ skb = skb_clone(skb, GFP_ATOMIC);
++ if (!skb)
++ return -1;
++ }
++ skb->nf_info = info;
++
++ stats = (struct net_device_stats *)dev->priv;
++ stats->rx_bytes+= skb->len;
++ stats->rx_packets++;
++
++ spin_lock_bh(&dev->queue_lock);
++ q = dev->qdisc;
++ if (q->enqueue) {
++ q->enqueue(skb_get(skb), q);
++ if (skb_shared(skb)) {
++ skb->destructor = imq_skb_destructor;
++ kfree_skb(skb);
++ ret = 0;
++ }
++ }
++ if (spin_is_locked(&dev->_xmit_lock))
++ netif_schedule(dev);
++ else
++ while (!netif_queue_stopped(dev) && qdisc_restart1(dev) < 0)
++ /* NOTHING */;
++
++ spin_unlock_bh(&dev->queue_lock);
++
++ if (skb2)
++ kfree_skb(ret ? skb : skb2);
++
++ return ret;
++}
++
++static struct nf_queue_handler nfqh = {
++ .name = "imq",
++ .outfn = imq_nf_queue,
++};
++
++static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff **pskb,
++ const struct net_device *indev,
++ const struct net_device *outdev,
++ int (*okfn)(struct sk_buff *))
++{
++ if ((*pskb)->imq_flags & IMQ_F_ENQUEUE)
++ return NF_QUEUE;
++
++ return NF_ACCEPT;
++}
++
++
++static int __init imq_init_hooks(void)
++{
++ int err;
++
++ err = nf_register_queue_handler(PF_INET, &nfqh);
++ if (err > 0)
++ goto err1;
++ if ((err = nf_register_hook(&imq_ingress_ipv4)))
++ goto err2;
++ if ((err = nf_register_hook(&imq_egress_ipv4)))
++ goto err3;
++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
++ if ((err = nf_register_queue_handler(PF_INET6, &nfqh)))
++ goto err4;
++ if ((err = nf_register_hook(&imq_ingress_ipv6)))
++ goto err5;
++ if ((err = nf_register_hook(&imq_egress_ipv6)))
++ goto err6;
++#endif
++
++ return 0;
++
++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
++err6:
++ nf_unregister_hook(&imq_ingress_ipv6);
++err5:
++ nf_unregister_queue_handler(PF_INET6);
++err4:
++ nf_unregister_hook(&imq_egress_ipv6);
++#endif
++err3:
++ nf_unregister_hook(&imq_ingress_ipv4);
++err2:
++ nf_unregister_queue_handler(PF_INET);
++err1:
++ return err;
++}
++
++static void __exit imq_unhook(void)
++{
++ nf_unregister_hook(&imq_ingress_ipv4);
++ nf_unregister_hook(&imq_egress_ipv4);
++ nf_unregister_queue_handler(PF_INET);
++#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
++ nf_unregister_hook(&imq_ingress_ipv6);
++ nf_unregister_hook(&imq_egress_ipv6);
++ nf_unregister_queue_handler(PF_INET6);
++#endif
++}
++
++static int __init imq_dev_init(struct net_device *dev)
++{
++ dev->hard_start_xmit = imq_dev_xmit;
++ dev->type = ARPHRD_VOID;
++ dev->mtu = 1500;
++ dev->tx_queue_len = 30;
++ dev->flags = IFF_NOARP;
++ dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
++ if (dev->priv == NULL)
++ return -ENOMEM;
++ memset(dev->priv, 0, sizeof(struct net_device_stats));
++ dev->get_stats = imq_get_stats;
++
++ return 0;
++}
++
++static void imq_dev_uninit(struct net_device *dev)
++{
++ kfree(dev->priv);
++}
++
++static int __init imq_init_devs(void)
++{
++ struct net_device *dev;
++ int i,j;
++ j = numdevs;
++
++ if (!numdevs || numdevs > IMQ_MAX_DEVS) {
++ printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
++ IMQ_MAX_DEVS);
++ return -EINVAL;
++ }
++
++ imq_devs = kmalloc(sizeof(struct net_device) * numdevs, GFP_KERNEL);
++ if (!imq_devs)
++ return -ENOMEM;
++ memset(imq_devs, 0, sizeof(struct net_device) * numdevs);
++
++ /* we start counting at zero */
++ numdevs--;
++
++ for (i = 0, dev = imq_devs; i <= numdevs; i++, dev++) {
++ SET_MODULE_OWNER(dev);
++ strcpy(dev->name, "imq%d");
++ dev->init = imq_dev_init;
++ dev->uninit = imq_dev_uninit;
++
++ if (register_netdev(dev) < 0)
++ goto err_register;
++ }
++ printk(KERN_INFO "IMQ starting with %u devices...\n", j);
++ return 0;
++
++err_register:
++ for (; i; i--)
++ unregister_netdev(--dev);
++ kfree(imq_devs);
++ return -EIO;
++}
++
++static void imq_cleanup_devs(void)
++{
++ int i;
++ struct net_device *dev = imq_devs;
++
++ for (i = 0; i <= numdevs; i++)
++ unregister_netdev(dev++);
++
++ kfree(imq_devs);
++}
++
++static int __init imq_init_module(void)
++{
++ int err;
++
++ if ((err = imq_init_devs())) {
++ printk(KERN_ERR "IMQ: Error trying imq_init_devs()\n");
++ return err;
++ }
++ if ((err = imq_init_hooks())) {
++ printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
++ imq_cleanup_devs();
++ return err;
++ }
++
++ printk(KERN_INFO "IMQ driver loaded successfully.\n");
++
++#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
++ printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
++#else
++ printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
++#endif
++#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
++ printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
++#else
++ printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
++#endif
++
++ return 0;
++}
++
++static void __exit imq_cleanup_module(void)
++{
++ imq_unhook();
++ imq_cleanup_devs();
++ printk(KERN_INFO "IMQ driver unloaded successfully.\n");
++}
++
++
++module_init(imq_init_module);
++module_exit(imq_cleanup_module);
++
++module_param(numdevs, int, 0);
++MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");
++MODULE_AUTHOR("http://www.linuximq.net");
++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.6.19/drivers/net/Kconfig linux-2.6.19+imq/drivers/net/Kconfig
+--- linux-2.6.19/drivers/net/Kconfig 2006-12-01 14:05:30.000000000 +1030
++++ linux-2.6.19+imq/drivers/net/Kconfig 2006-12-05 23:03:52.000000000 +1030
+@@ -96,6 +96,129 @@
+ To compile this driver as a module, choose M here: the module
+ will be called eql. If unsure, say N.
+
++config IMQ
++ tristate "IMQ (intermediate queueing device) support"
++ depends on NETDEVICES && NETFILTER
++ ---help---
++ The IMQ device(s) is used as placeholder for QoS queueing
++ disciplines. Every packet entering/leaving the IP stack can be
++ directed through the IMQ device where it's enqueued/dequeued to the
++ attached qdisc. This allows you to treat network devices as classes
++ and distribute bandwidth among them. Iptables is used to specify
++ through which IMQ device, if any, packets travel.
++
++ More information at: http://www.linuximq.net/
++
++ To compile this driver as a module, choose M here: the module
++ will be called imq. If unsure, say N.
++
++choice
++ prompt "IMQ behavior (PRE/POSTROUTING)"
++ depends on IMQ
++ default IMQ_BEHAVIOR_BA
++ help
++
++ This settings defines how IMQ behaves in respect to its
++ hooking in PREROUTING and POSTROUTING.
++
++ IMQ can work in any of the following ways:
++
++ PREROUTING | POSTROUTING
++ -----------------|-------------------
++ #1 After NAT | After NAT
++ #2 After NAT | Before NAT
++ #3 Before NAT | After NAT
++ #4 Before NAT | Before NAT
++
++ The default behavior is to hook before NAT on PREROUTING
++ and after NAT on POSTROUTING (#3).
++
++ This settings are specially usefull when trying to use IMQ
++ to shape NATed clients.
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_AA
++ bool "IMQ AA"
++ help
++ This settings defines how IMQ behaves in respect to its
++ hooking in PREROUTING and POSTROUTING.
++
++ Choosing this option will make IMQ hook like this:
++
++ PREROUTING: After NAT
++ POSTROUTING: After NAT
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_AB
++ bool "IMQ AB"
++ help
++ This settings defines how IMQ behaves in respect to its
++ hooking in PREROUTING and POSTROUTING.
++
++ Choosing this option will make IMQ hook like this:
++
++ PREROUTING: After NAT
++ POSTROUTING: Before NAT
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_BA
++ bool "IMQ BA"
++ help
++ This settings defines how IMQ behaves in respect to its
++ hooking in PREROUTING and POSTROUTING.
++
++ Choosing this option will make IMQ hook like this:
++
++ PREROUTING: Before NAT
++ POSTROUTING: After NAT
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_BB
++ bool "IMQ BB"
++ help
++ This settings defines how IMQ behaves in respect to its
++ hooking in PREROUTING and POSTROUTING.
++
++ Choosing this option will make IMQ hook like this:
++
++ PREROUTING: Before NAT
++ POSTROUTING: Before NAT
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
++endchoice
++
++config IMQ_NUM_DEVS
++
++ int "Number of IMQ devices"
++ range 2 8
++ depends on IMQ
++ default "2"
++ help
++
++ This settings defines how many IMQ devices will be
++ created.
++
++ The default value is 2.
++
++ More information can be found at: www.linuximq.net
++
++ If not sure leave the default settings alone.
++
+ config TUN
+ tristate "Universal TUN/TAP device driver support"
+ select CRC32
+diff -urN linux-2.6.19/drivers/net/Makefile linux-2.6.19+imq/drivers/net/Makefile
+--- linux-2.6.19/drivers/net/Makefile 2006-12-01 14:05:30.000000000 +1030
++++ linux-2.6.19+imq/drivers/net/Makefile 2006-12-04 12:41:01.000000000 +1030
+@@ -124,6 +124,7 @@
+ obj-$(CONFIG_SLHC) += slhc.o
+
+ obj-$(CONFIG_DUMMY) += dummy.o
++obj-$(CONFIG_IMQ) += imq.o
+ obj-$(CONFIG_IFB) += ifb.o
+ obj-$(CONFIG_DE600) += de600.o
+ obj-$(CONFIG_DE620) += de620.o
+diff -urN linux-2.6.19/include/linux/imq.h linux-2.6.19+imq/include/linux/imq.h
+--- linux-2.6.19/include/linux/imq.h 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19+imq/include/linux/imq.h 2006-12-04 12:41:01.000000000 +1030
+@@ -0,0 +1,9 @@
++#ifndef _IMQ_H
++#define _IMQ_H
++
++#define IMQ_MAX_DEVS 16
++
++#define IMQ_F_IFMASK 0x7f
++#define IMQ_F_ENQUEUE 0x80
++
++#endif /* _IMQ_H */
+diff -urN linux-2.6.19/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.6.19+imq/include/linux/netfilter_ipv4/ipt_IMQ.h
+--- linux-2.6.19/include/linux/netfilter_ipv4/ipt_IMQ.h 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19+imq/include/linux/netfilter_ipv4/ipt_IMQ.h 2006-12-05 23:04:22.000000000 +1030
+@@ -0,0 +1,8 @@
++#ifndef _IPT_IMQ_H
++#define _IPT_IMQ_H
++
++struct ipt_imq_info {
++ unsigned int todev; /* target imq device */
++};
++
++#endif /* _IPT_IMQ_H */
+diff -urN linux-2.6.19/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.6.19+imq/include/linux/netfilter_ipv6/ip6t_IMQ.h
+--- linux-2.6.19/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19+imq/include/linux/netfilter_ipv6/ip6t_IMQ.h 2006-12-05 23:04:32.000000000 +1030
+@@ -0,0 +1,8 @@
++#ifndef _IP6T_IMQ_H
++#define _IP6T_IMQ_H
++
++struct ip6t_imq_info {
++ unsigned int todev; /* target imq device */
++};
++
++#endif /* _IP6T_IMQ_H */
+diff -urN linux-2.6.19/include/linux/skbuff.h linux-2.6.19+imq/include/linux/skbuff.h
+--- linux-2.6.19/include/linux/skbuff.h 2006-12-01 14:05:44.000000000 +1030
++++ linux-2.6.19+imq/include/linux/skbuff.h 2006-12-05 23:05:06.000000000 +1030
+@@ -292,6 +292,10 @@
+ #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
+ struct sk_buff *nfct_reasm;
+ #endif
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++ unsigned char imq_flags;
++ struct nf_info *nf_info;
++#endif
+ #ifdef CONFIG_BRIDGE_NETFILTER
+ struct nf_bridge_info *nf_bridge;
+ #endif
+diff -urN linux-2.6.19/net/core/dev.c linux-2.6.19+imq/net/core/dev.c
+--- linux-2.6.19/net/core/dev.c 2006-12-01 14:05:45.000000000 +1030
++++ linux-2.6.19+imq/net/core/dev.c 2006-12-05 23:05:40.000000000 +1030
+@@ -94,6 +94,9 @@
+ #include <linux/skbuff.h>
+ #include <net/sock.h>
+ #include <linux/rtnetlink.h>
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++#include <linux/imq.h>
++#endif
+ #include <linux/proc_fs.h>
+ #include <linux/seq_file.h>
+ #include <linux/stat.h>
+@@ -1344,7 +1347,11 @@
+ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ if (likely(!skb->next)) {
+- if (netdev_nit)
++ if (netdev_nit
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++ && !(skb->imq_flags & IMQ_F_ENQUEUE)
++#endif
++ )
+ dev_queue_xmit_nit(skb, dev);
+
+ if (netif_needs_gso(dev, skb)) {
+diff -urN linux-2.6.19/net/core/skbuff.c linux-2.6.19+imq/net/core/skbuff.c
+--- linux-2.6.19/net/core/skbuff.c 2006-12-01 14:05:45.000000000 +1030
++++ linux-2.6.19+imq/net/core/skbuff.c 2006-12-04 12:41:01.000000000 +1030
+@@ -482,6 +482,10 @@
+ C(nfct_reasm);
+ nf_conntrack_get_reasm(skb->nfct_reasm);
+ #endif
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++ C(imq_flags);
++ C(nf_info);
++#endif /*CONFIG_IMQ*/
+ #ifdef CONFIG_BRIDGE_NETFILTER
+ C(nf_bridge);
+ nf_bridge_get(skb->nf_bridge);
+@@ -546,6 +550,10 @@
+ #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
+ new->ipvs_property = old->ipvs_property;
+ #endif
++#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
++ new->imq_flags = old->imq_flags;
++ new->nf_info = old->nf_info;
++#endif /*CONFIG_IMQ*/
+ #ifdef CONFIG_BRIDGE_NETFILTER
+ new->nf_bridge = old->nf_bridge;
+ nf_bridge_get(old->nf_bridge);
+diff -urN linux-2.6.19/net/ipv4/netfilter/ipt_IMQ.c linux-2.6.19+imq/net/ipv4/netfilter/ipt_IMQ.c
+--- linux-2.6.19/net/ipv4/netfilter/ipt_IMQ.c 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19.2/net/ipv4/netfilter/ipt_IMQ.c 2007-01-25 09:59:34.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * This target marks packets to be enqueued to an imq device
++ */
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ipt_IMQ.h>
++#include <linux/imq.h>
++
++static unsigned int imq_target(struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ unsigned int hooknum,
++ const struct xt_target *target,
++ const void *targinfo)
++{
++ struct ipt_imq_info *mr = (struct ipt_imq_info*)targinfo;
++
++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;
++
++ return IPT_CONTINUE;
++}
++
++static int imq_checkentry(const char *tablename,
++ const void *e,
++ const struct xt_target *target,
++ void *targinfo,
++ unsigned int hook_mask)
++{
++ struct ipt_imq_info *mr;
++
++ mr = (struct ipt_imq_info*)targinfo;
++
++ if (mr->todev > IMQ_MAX_DEVS) {
++ printk(KERN_WARNING
++ "IMQ: invalid device specified, highest is %u\n",
++ IMQ_MAX_DEVS);
++ return 0;
++ }
++
++ return 1;
++}
++
++static struct ipt_target ipt_imq_reg = {
++ .name = "IMQ",
++ .target = imq_target,
++ .targetsize = sizeof(struct ipt_imq_info),
++ .checkentry = imq_checkentry,
++ .me = THIS_MODULE,
++ .table = "mangle"
++};
++
++static int __init init(void)
++{
++ if (ipt_register_target(&ipt_imq_reg))
++ return -EINVAL;
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ipt_unregister_target(&ipt_imq_reg);
++}
++
++module_init(init);
++module_exit(fini);
++
++MODULE_AUTHOR("http://www.linuximq.net");
++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.6.19/net/ipv4/netfilter/Kconfig linux-2.6.19+imq/net/ipv4/netfilter/Kconfig
+--- linux-2.6.19/net/ipv4/netfilter/Kconfig 2006-12-01 14:05:45.000000000 +1030
++++ linux-2.6.19+imq/net/ipv4/netfilter/Kconfig 2006-12-04 12:41:01.000000000 +1030
+@@ -533,6 +533,17 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP_NF_TARGET_IMQ
++ tristate "IMQ target support"
++ depends on IP_NF_MANGLE
++ help
++ This option adds a `IMQ' target which is used to specify if and
++ to which IMQ device packets should get enqueued/dequeued.
++
++ For more information visit: http://www.linuximq.net/
++
++ To compile it as a module, choose M here. If unsure, say N.
++
+ config IP_NF_TARGET_TOS
+ tristate "TOS target support"
+ depends on IP_NF_MANGLE
+diff -urN linux-2.6.19/net/ipv4/netfilter/Makefile linux-2.6.19+imq/net/ipv4/netfilter/Makefile
+--- linux-2.6.19/net/ipv4/netfilter/Makefile 2006-12-01 14:05:45.000000000 +1030
++++ linux-2.6.19+imq/net/ipv4/netfilter/Makefile 2006-12-04 12:41:01.000000000 +1030
+@@ -67,6 +67,7 @@
+ obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
+ obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o
+ obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
++obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
+ obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
+ obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
+diff -urN linux-2.6.19/net/ipv6/netfilter/ip6t_IMQ.c linux-2.6.19+imq/net/ipv6/netfilter/ip6t_IMQ.c
+--- linux-2.6.19/net/ipv6/netfilter/ip6t_IMQ.c 1970-01-01 09:30:00.000000000 +0930
++++ linux-2.6.19.2/net/ipv6/netfilter/ip6t_IMQ.c 2007-01-25 10:06:41.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * This target marks packets to be enqueued to an imq device
++ */
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv6/ip6_tables.h>
++#include <linux/netfilter_ipv6/ip6t_IMQ.h>
++#include <linux/imq.h>
++
++static unsigned int imq_target(struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ unsigned int hooknum,
++ const struct xt_target *target,
++ const void *targinfo)
++{
++ struct ip6t_imq_info *mr = (struct ip6t_imq_info*)targinfo;
++
++ (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;
++
++ return IP6T_CONTINUE;
++}
++
++static int imq_checkentry(const char *tablename,
++ const void *entry,
++ const struct xt_target *target,
++ void *targinfo,
++ unsigned int hook_mask)
++{
++ struct ip6t_imq_info *mr;
++
++ mr = (struct ip6t_imq_info*)targinfo;
++
++ if (mr->todev > IMQ_MAX_DEVS) {
++ printk(KERN_WARNING
++ "IMQ: invalid device specified, highest is %u\n",
++ IMQ_MAX_DEVS);
++ return 0;
++ }
++
++ return 1;
++}
++
++static struct ip6t_target ip6t_imq_reg = {
++ .name = "IMQ",
++ .target = imq_target,
++ .targetsize = sizeof(struct ip6t_imq_info),
++ .table = "mangle",
++ .checkentry = imq_checkentry,
++ .me = THIS_MODULE
++};
++
++static int __init init(void)
++{
++ if (ip6t_register_target(&ip6t_imq_reg))
++ return -EINVAL;
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ip6t_unregister_target(&ip6t_imq_reg);
++}
++
++module_init(init);
++module_exit(fini);
++
++MODULE_AUTHOR("http://www.linuximq.net");
++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.6.19/net/ipv6/netfilter/Kconfig linux-2.6.19+imq/net/ipv6/netfilter/Kconfig
+--- linux-2.6.19/net/ipv6/netfilter/Kconfig 2006-12-01 14:05:46.000000000 +1030
++++ linux-2.6.19+imq/net/ipv6/netfilter/Kconfig 2006-12-04 12:41:01.000000000 +1030
+@@ -163,6 +163,15 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP6_NF_TARGET_IMQ
++ tristate "IMQ target support"
++ depends on IP6_NF_MANGLE
++ help
++ This option adds a `IMQ' target which is used to specify if and
++ to which imq device packets should get enqueued/dequeued.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
+ config IP6_NF_TARGET_HL
+ tristate 'HL (hoplimit) target support'
+ depends on IP6_NF_MANGLE
+diff -urN linux-2.6.19/net/ipv6/netfilter/Makefile linux-2.6.19+imq/net/ipv6/netfilter/Makefile
+--- linux-2.6.19/net/ipv6/netfilter/Makefile 2006-12-01 14:05:46.000000000 +1030
++++ linux-2.6.19+imq/net/ipv6/netfilter/Makefile 2006-12-04 12:41:01.000000000 +1030
+@@ -13,6 +13,7 @@
+ obj-$(CONFIG_IP6_NF_MATCH_OWNER) += ip6t_owner.o
+ obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
+ obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
+ obj-$(CONFIG_IP6_NF_TARGET_HL) += ip6t_HL.o
+ obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
+ obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
+diff -urN linux-2.6.19/net/sched/sch_generic.c linux-2.6.19+imq/net/sched/sch_generic.c
+--- linux-2.6.19/net/sched/sch_generic.c 2006-12-01 14:05:46.000000000 +1030
++++ linux-2.6.19+imq/net/sched/sch_generic.c 2006-12-05 23:08:54.000000000 +1030
+@@ -87,7 +87,6 @@
+
+ NOTE: Called under dev->queue_lock with locally disabled BH.
+ */
+-
+ static inline int qdisc_restart(struct net_device *dev)
+ {
+ struct Qdisc *q = dev->qdisc;
+@@ -181,6 +180,11 @@
+ return q->q.qlen;
+ }
+
++int qdisc_restart1(struct net_device *dev)
++{
++ return qdisc_restart(dev);
++}
++
+ void __qdisc_run(struct net_device *dev)
+ {
+ if (unlikely(dev->qdisc == &noop_qdisc))
+@@ -617,3 +621,4 @@
+ EXPORT_SYMBOL(qdisc_reset);
+ EXPORT_SYMBOL(qdisc_lock_tree);
+ EXPORT_SYMBOL(qdisc_unlock_tree);
++EXPORT_SYMBOL(qdisc_restart1);
diff --git a/packages/linux/linux-magicbox-2.6.19.2/160-netfilter_route.patch b/packages/linux/linux-magicbox-2.6.19.2/160-netfilter_route.patch
new file mode 100644
index 0000000000..7e8491c3e3
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/160-netfilter_route.patch
@@ -0,0 +1,902 @@
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_ROUTE.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_ROUTE.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ipt_ROUTE.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ipt_ROUTE.h 2006-12-14 03:13:49.000000000 +0100
+@@ -0,0 +1,23 @@
++/* Header file for iptables ipt_ROUTE target
++ *
++ * (C) 2002 by Cédric de Launois <delaunois@info.ucl.ac.be>
++ *
++ * This software is distributed under GNU GPL v2, 1991
++ */
++#ifndef _IPT_ROUTE_H_target
++#define _IPT_ROUTE_H_target
++
++#define IPT_ROUTE_IFNAMSIZ 16
++
++struct ipt_route_target_info {
++ char oif[IPT_ROUTE_IFNAMSIZ]; /* Output Interface Name */
++ char iif[IPT_ROUTE_IFNAMSIZ]; /* Input Interface Name */
++ u_int32_t gw; /* IP address of gateway */
++ u_int8_t flags;
++};
++
++/* Values for "flags" field */
++#define IPT_ROUTE_CONTINUE 0x01
++#define IPT_ROUTE_TEE 0x02
++
++#endif /*_IPT_ROUTE_H_target*/
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv6/ip6t_ROUTE.h linux-2.6.19.dev/include/linux/netfilter_ipv6/ip6t_ROUTE.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv6/ip6t_ROUTE.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv6/ip6t_ROUTE.h 2006-12-14 03:13:49.000000000 +0100
+@@ -0,0 +1,23 @@
++/* Header file for iptables ip6t_ROUTE target
++ *
++ * (C) 2003 by Cédric de Launois <delaunois@info.ucl.ac.be>
++ *
++ * This software is distributed under GNU GPL v2, 1991
++ */
++#ifndef _IPT_ROUTE_H_target
++#define _IPT_ROUTE_H_target
++
++#define IP6T_ROUTE_IFNAMSIZ 16
++
++struct ip6t_route_target_info {
++ char oif[IP6T_ROUTE_IFNAMSIZ]; /* Output Interface Name */
++ char iif[IP6T_ROUTE_IFNAMSIZ]; /* Input Interface Name */
++ u_int32_t gw[4]; /* IPv6 address of gateway */
++ u_int8_t flags;
++};
++
++/* Values for "flags" field */
++#define IP6T_ROUTE_CONTINUE 0x01
++#define IP6T_ROUTE_TEE 0x02
++
++#endif /*_IP6T_ROUTE_H_target*/
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_ROUTE.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_ROUTE.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_ROUTE.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_ROUTE.c 2006-12-14 03:13:49.000000000 +0100
+@@ -0,0 +1,455 @@
++/*
++ * This implements the ROUTE target, which enables you to setup unusual
++ * routes not supported by the standard kernel routing table.
++ *
++ * Copyright (C) 2002 Cedric de Launois <delaunois@info.ucl.ac.be>
++ *
++ * v 1.11 2004/11/23
++ *
++ * This software is distributed under GNU GPL v2, 1991
++ */
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/ip.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#include <linux/netfilter_ipv4/ip_conntrack.h>
++#include <linux/netfilter_ipv4/ipt_ROUTE.h>
++#include <linux/netdevice.h>
++#include <linux/route.h>
++#include <linux/if_arp.h>
++#include <net/ip.h>
++#include <net/route.h>
++#include <net/icmp.h>
++#include <net/checksum.h>
++
++#if 0
++#define DEBUGP printk
++#else
++#define DEBUGP(format, args...)
++#endif
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Cedric de Launois <delaunois@info.ucl.ac.be>");
++MODULE_DESCRIPTION("iptables ROUTE target module");
++
++/* Try to route the packet according to the routing keys specified in
++ * route_info. Keys are :
++ * - ifindex :
++ * 0 if no oif preferred,
++ * otherwise set to the index of the desired oif
++ * - route_info->gw :
++ * 0 if no gateway specified,
++ * otherwise set to the next host to which the pkt must be routed
++ * If success, skb->dev is the output device to which the packet must
++ * be sent and skb->dst is not NULL
++ *
++ * RETURN: -1 if an error occured
++ * 1 if the packet was succesfully routed to the
++ * destination desired
++ * 0 if the kernel routing table could not route the packet
++ * according to the keys specified
++ */
++static int route(struct sk_buff *skb,
++ unsigned int ifindex,
++ const struct ipt_route_target_info *route_info)
++{
++ int err;
++ struct rtable *rt;
++ struct iphdr *iph = skb->nh.iph;
++ struct flowi fl = {
++ .oif = ifindex,
++ .nl_u = {
++ .ip4_u = {
++ .daddr = iph->daddr,
++ .saddr = 0,
++ .tos = RT_TOS(iph->tos),
++ .scope = RT_SCOPE_UNIVERSE,
++ }
++ }
++ };
++
++ /* The destination address may be overloaded by the target */
++ if (route_info->gw)
++ fl.fl4_dst = route_info->gw;
++
++ /* Trying to route the packet using the standard routing table. */
++ if ((err = ip_route_output_key(&rt, &fl))) {
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: couldn't route pkt (err: %i)",err);
++ return -1;
++ }
++
++ /* Drop old route. */
++ dst_release(skb->dst);
++ skb->dst = NULL;
++
++ /* Success if no oif specified or if the oif correspond to the
++ * one desired */
++ if (!ifindex || rt->u.dst.dev->ifindex == ifindex) {
++ skb->dst = &rt->u.dst;
++ skb->dev = skb->dst->dev;
++ skb->protocol = htons(ETH_P_IP);
++ return 1;
++ }
++
++ /* The interface selected by the routing table is not the one
++ * specified by the user. This may happen because the dst address
++ * is one of our own addresses.
++ */
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: failed to route as desired gw=%u.%u.%u.%u oif=%i (got oif=%i)\n",
++ NIPQUAD(route_info->gw), ifindex, rt->u.dst.dev->ifindex);
++
++ return 0;
++}
++
++
++/* Stolen from ip_finish_output2
++ * PRE : skb->dev is set to the device we are leaving by
++ * skb->dst is not NULL
++ * POST: the packet is sent with the link layer header pushed
++ * the packet is destroyed
++ */
++static void ip_direct_send(struct sk_buff *skb)
++{
++ struct dst_entry *dst = skb->dst;
++ struct hh_cache *hh = dst->hh;
++ struct net_device *dev = dst->dev;
++ int hh_len = LL_RESERVED_SPACE(dev);
++
++ /* Be paranoid, rather than too clever. */
++ if (unlikely(skb_headroom(skb) < hh_len && dev->hard_header)) {
++ struct sk_buff *skb2;
++
++ skb2 = skb_realloc_headroom(skb, LL_RESERVED_SPACE(dev));
++ if (skb2 == NULL) {
++ kfree_skb(skb);
++ return;
++ }
++ if (skb->sk)
++ skb_set_owner_w(skb2, skb->sk);
++ kfree_skb(skb);
++ skb = skb2;
++ }
++
++ if (hh) {
++ int hh_alen;
++
++ read_lock_bh(&hh->hh_lock);
++ hh_alen = HH_DATA_ALIGN(hh->hh_len);
++ memcpy(skb->data - hh_alen, hh->hh_data, hh_alen);
++ read_unlock_bh(&hh->hh_lock);
++ skb_push(skb, hh->hh_len);
++ hh->hh_output(skb);
++ } else if (dst->neighbour)
++ dst->neighbour->output(skb);
++ else {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ipt_ROUTE: no hdr & no neighbour cache!\n");
++ kfree_skb(skb);
++ }
++}
++
++
++/* PRE : skb->dev is set to the device we are leaving by
++ * POST: - the packet is directly sent to the skb->dev device, without
++ * pushing the link layer header.
++ * - the packet is destroyed
++ */
++static inline int dev_direct_send(struct sk_buff *skb)
++{
++ return dev_queue_xmit(skb);
++}
++
++
++static unsigned int route_oif(const struct ipt_route_target_info *route_info,
++ struct sk_buff *skb)
++{
++ unsigned int ifindex = 0;
++ struct net_device *dev_out = NULL;
++
++ /* The user set the interface name to use.
++ * Getting the current interface index.
++ */
++ if ((dev_out = dev_get_by_name(route_info->oif))) {
++ ifindex = dev_out->ifindex;
++ } else {
++ /* Unknown interface name : packet dropped */
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: oif interface %s not found\n", route_info->oif);
++ return NF_DROP;
++ }
++
++ /* Trying the standard way of routing packets */
++ switch (route(skb, ifindex, route_info)) {
++ case 1:
++ dev_put(dev_out);
++ if (route_info->flags & IPT_ROUTE_CONTINUE)
++ return IPT_CONTINUE;
++
++ ip_direct_send(skb);
++ return NF_STOLEN;
++
++ case 0:
++ /* Failed to send to oif. Trying the hard way */
++ if (route_info->flags & IPT_ROUTE_CONTINUE)
++ return NF_DROP;
++
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: forcing the use of %i\n",
++ ifindex);
++
++ /* We have to force the use of an interface.
++ * This interface must be a tunnel interface since
++ * otherwise we can't guess the hw address for
++ * the packet. For a tunnel interface, no hw address
++ * is needed.
++ */
++ if ((dev_out->type != ARPHRD_TUNNEL)
++ && (dev_out->type != ARPHRD_IPGRE)) {
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: can't guess the hw addr !\n");
++ dev_put(dev_out);
++ return NF_DROP;
++ }
++
++ /* Send the packet. This will also free skb
++ * Do not go through the POST_ROUTING hook because
++ * skb->dst is not set and because it will probably
++ * get confused by the destination IP address.
++ */
++ skb->dev = dev_out;
++ dev_direct_send(skb);
++ dev_put(dev_out);
++ return NF_STOLEN;
++
++ default:
++ /* Unexpected error */
++ dev_put(dev_out);
++ return NF_DROP;
++ }
++}
++
++
++static unsigned int route_iif(const struct ipt_route_target_info *route_info,
++ struct sk_buff *skb)
++{
++ struct net_device *dev_in = NULL;
++
++ /* Getting the current interface index. */
++ if (!(dev_in = dev_get_by_name(route_info->iif))) {
++ if (net_ratelimit())
++ DEBUGP("ipt_ROUTE: iif interface %s not found\n", route_info->iif);
++ return NF_DROP;
++ }
++
++ skb->dev = dev_in;
++ dst_release(skb->dst);
++ skb->dst = NULL;
++
++ netif_rx(skb);
++ dev_put(dev_in);
++ return NF_STOLEN;
++}
++
++
++static unsigned int route_gw(const struct ipt_route_target_info *route_info,
++ struct sk_buff *skb)
++{
++ if (route(skb, 0, route_info)!=1)
++ return NF_DROP;
++
++ if (route_info->flags & IPT_ROUTE_CONTINUE)
++ return IPT_CONTINUE;
++
++ ip_direct_send(skb);
++ return NF_STOLEN;
++}
++
++
++/* To detect and deter routed packet loopback when using the --tee option,
++ * we take a page out of the raw.patch book: on the copied skb, we set up
++ * a fake ->nfct entry, pointing to the local &route_tee_track. We skip
++ * routing packets when we see they already have that ->nfct.
++ */
++
++static struct ip_conntrack route_tee_track;
++
++static unsigned int ipt_route_target(struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ unsigned int hooknum,
++ const struct xt_target *target,
++ const void *targinfo)
++{
++ const struct ipt_route_target_info *route_info = targinfo;
++ struct sk_buff *skb = *pskb;
++ unsigned int res;
++
++ if (skb->nfct == &route_tee_track.ct_general) {
++ /* Loopback - a packet we already routed, is to be
++ * routed another time. Avoid that, now.
++ */
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ipt_ROUTE: loopback - DROP!\n");
++ return NF_DROP;
++ }
++
++ /* If we are at PREROUTING or INPUT hook
++ * the TTL isn't decreased by the IP stack
++ */
++ if (hooknum == NF_IP_PRE_ROUTING ||
++ hooknum == NF_IP_LOCAL_IN) {
++
++ struct iphdr *iph = skb->nh.iph;
++
++ if (iph->ttl <= 1) {
++ struct rtable *rt;
++ struct flowi fl = {
++ .oif = 0,
++ .nl_u = {
++ .ip4_u = {
++ .daddr = iph->daddr,
++ .saddr = iph->saddr,
++ .tos = RT_TOS(iph->tos),
++ .scope = ((iph->tos & RTO_ONLINK) ?
++ RT_SCOPE_LINK :
++ RT_SCOPE_UNIVERSE)
++ }
++ }
++ };
++
++ if (ip_route_output_key(&rt, &fl)) {
++ return NF_DROP;
++ }
++
++ if (skb->dev == rt->u.dst.dev) {
++ /* Drop old route. */
++ dst_release(skb->dst);
++ skb->dst = &rt->u.dst;
++
++ /* this will traverse normal stack, and
++ * thus call conntrack on the icmp packet */
++ icmp_send(skb, ICMP_TIME_EXCEEDED,
++ ICMP_EXC_TTL, 0);
++ }
++
++ return NF_DROP;
++ }
++
++ /*
++ * If we are at INPUT the checksum must be recalculated since
++ * the length could change as the result of a defragmentation.
++ */
++ if(hooknum == NF_IP_LOCAL_IN) {
++ iph->ttl = iph->ttl - 1;
++ iph->check = 0;
++ iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
++ } else {
++ ip_decrease_ttl(iph);
++ }
++ }
++
++ if ((route_info->flags & IPT_ROUTE_TEE)) {
++ /*
++ * Copy the *pskb, and route the copy. Will later return
++ * IPT_CONTINUE for the original skb, which should continue
++ * on its way as if nothing happened. The copy should be
++ * independantly delivered to the ROUTE --gw.
++ */
++ skb = skb_copy(*pskb, GFP_ATOMIC);
++ if (!skb) {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ipt_ROUTE: copy failed!\n");
++ return IPT_CONTINUE;
++ }
++ }
++
++ /* Tell conntrack to forget this packet since it may get confused
++ * when a packet is leaving with dst address == our address.
++ * Good idea ? Dunno. Need advice.
++ *
++ * NEW: mark the skb with our &route_tee_track, so we avoid looping
++ * on any already routed packet.
++ */
++ if (!(route_info->flags & IPT_ROUTE_CONTINUE)) {
++ nf_conntrack_put(skb->nfct);
++ skb->nfct = &route_tee_track.ct_general;
++ skb->nfctinfo = IP_CT_NEW;
++ nf_conntrack_get(skb->nfct);
++ }
++
++ if (route_info->oif[0] != '\0') {
++ res = route_oif(route_info, skb);
++ } else if (route_info->iif[0] != '\0') {
++ res = route_iif(route_info, skb);
++ } else if (route_info->gw) {
++ res = route_gw(route_info, skb);
++ } else {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ipt_ROUTE: no parameter !\n");
++ res = IPT_CONTINUE;
++ }
++
++ if ((route_info->flags & IPT_ROUTE_TEE))
++ res = IPT_CONTINUE;
++
++ return res;
++}
++
++
++static int ipt_route_checkentry(const char *tablename,
++ const void *e,
++ const struct xt_target *target,
++ void *targinfo,
++ unsigned int hook_mask)
++{
++ if (strcmp(tablename, "mangle") != 0) {
++ printk("ipt_ROUTE: bad table `%s', use the `mangle' table.\n",
++ tablename);
++ return 0;
++ }
++
++ if (hook_mask & ~( (1 << NF_IP_PRE_ROUTING)
++ | (1 << NF_IP_LOCAL_IN)
++ | (1 << NF_IP_FORWARD)
++ | (1 << NF_IP_LOCAL_OUT)
++ | (1 << NF_IP_POST_ROUTING))) {
++ printk("ipt_ROUTE: bad hook\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static struct ipt_target ipt_route_reg = {
++ .name = "ROUTE",
++ .target = ipt_route_target,
++ .targetsize = sizeof(struct ipt_route_target_info),
++ .checkentry = ipt_route_checkentry,
++ .me = THIS_MODULE,
++};
++
++static int __init init(void)
++{
++ /* Set up fake conntrack (stolen from raw.patch):
++ - to never be deleted, not in any hashes */
++ atomic_set(&route_tee_track.ct_general.use, 1);
++ /* - and look it like as a confirmed connection */
++ set_bit(IPS_CONFIRMED_BIT, &route_tee_track.status);
++ /* Initialize fake conntrack so that NAT will skip it */
++ route_tee_track.status |= IPS_NAT_DONE_MASK;
++
++ return ipt_register_target(&ipt_route_reg);
++}
++
++
++static void __exit fini(void)
++{
++ ipt_unregister_target(&ipt_route_reg);
++}
++
++module_init(init);
++module_exit(fini);
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Kconfig linux-2.6.19.dev/net/ipv4/netfilter/Kconfig
+--- linux-2.6.19.old/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:49.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Kconfig 2006-12-14 03:13:49.000000000 +0100
+@@ -494,6 +494,23 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP_NF_TARGET_ROUTE
++ tristate 'ROUTE target support'
++ depends on IP_NF_MANGLE
++ help
++ This option adds a `ROUTE' target, which enables you to setup unusual
++ routes. For example, the ROUTE lets you route a received packet through
++ an interface or towards a host, even if the regular destination of the
++ packet is the router itself. The ROUTE target is also able to change the
++ incoming interface of a packet.
++
++ The target can be or not a final target. It has to be used inside the
++ mangle table.
++
++ If you want to compile it as a module, say M here and read
++ Documentation/modules.txt. The module will be called ipt_ROUTE.o.
++ If unsure, say `N'.
++
+ config IP_NF_TARGET_NETMAP
+ tristate "NETMAP target support"
+ depends on IP_NF_NAT
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/Makefile linux-2.6.19.dev/net/ipv4/netfilter/Makefile
+--- linux-2.6.19.old/net/ipv4/netfilter/Makefile 2006-12-14 03:13:49.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/Makefile 2006-12-14 03:13:49.000000000 +0100
+@@ -74,6 +74,7 @@
+ obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
+ obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
+ obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
++obj-$(CONFIG_IP_NF_TARGET_ROUTE) += ipt_ROUTE.o
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
+ obj-$(CONFIG_IP_NF_TARGET_SAME) += ipt_SAME.o
+ obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
+diff -urN linux-2.6.19.old/net/ipv6/ipv6_syms.c linux-2.6.19.dev/net/ipv6/ipv6_syms.c
+--- linux-2.6.19.old/net/ipv6/ipv6_syms.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv6/ipv6_syms.c 2006-12-14 03:13:49.000000000 +0100
+@@ -11,6 +11,7 @@
+ EXPORT_SYMBOL(icmpv6_statistics);
+ EXPORT_SYMBOL(icmpv6_err_convert);
+ EXPORT_SYMBOL(ndisc_mc_map);
++EXPORT_SYMBOL(nd_tbl);
+ EXPORT_SYMBOL(register_inet6addr_notifier);
+ EXPORT_SYMBOL(unregister_inet6addr_notifier);
+ EXPORT_SYMBOL(ip6_route_output);
+diff -urN linux-2.6.19.old/net/ipv6/netfilter/ip6t_ROUTE.c linux-2.6.19.dev/net/ipv6/netfilter/ip6t_ROUTE.c
+--- linux-2.6.19.old/net/ipv6/netfilter/ip6t_ROUTE.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/ipv6/netfilter/ip6t_ROUTE.c 2006-12-14 03:13:49.000000000 +0100
+@@ -0,0 +1,302 @@
++/*
++ * This implements the ROUTE v6 target, which enables you to setup unusual
++ * routes not supported by the standard kernel routing table.
++ *
++ * Copyright (C) 2003 Cedric de Launois <delaunois@info.ucl.ac.be>
++ *
++ * v 1.1 2004/11/23
++ *
++ * This software is distributed under GNU GPL v2, 1991
++ */
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/ipv6.h>
++#include <linux/netfilter_ipv6/ip6_tables.h>
++#include <linux/netfilter_ipv6/ip6t_ROUTE.h>
++#include <linux/netdevice.h>
++#include <net/ipv6.h>
++#include <net/ndisc.h>
++#include <net/ip6_route.h>
++#include <linux/icmpv6.h>
++
++#if 1
++#define DEBUGP printk
++#else
++#define DEBUGP(format, args...)
++#endif
++
++#define NIP6(addr) \
++ ntohs((addr).s6_addr16[0]), \
++ ntohs((addr).s6_addr16[1]), \
++ ntohs((addr).s6_addr16[2]), \
++ ntohs((addr).s6_addr16[3]), \
++ ntohs((addr).s6_addr16[4]), \
++ ntohs((addr).s6_addr16[5]), \
++ ntohs((addr).s6_addr16[6]), \
++ ntohs((addr).s6_addr16[7])
++
++/* Route the packet according to the routing keys specified in
++ * route_info. Keys are :
++ * - ifindex :
++ * 0 if no oif preferred,
++ * otherwise set to the index of the desired oif
++ * - route_info->gw :
++ * 0 if no gateway specified,
++ * otherwise set to the next host to which the pkt must be routed
++ * If success, skb->dev is the output device to which the packet must
++ * be sent and skb->dst is not NULL
++ *
++ * RETURN: 1 if the packet was succesfully routed to the
++ * destination desired
++ * 0 if the kernel routing table could not route the packet
++ * according to the keys specified
++ */
++static int
++route6(struct sk_buff *skb,
++ unsigned int ifindex,
++ const struct ip6t_route_target_info *route_info)
++{
++ struct rt6_info *rt = NULL;
++ struct ipv6hdr *ipv6h = skb->nh.ipv6h;
++ struct in6_addr *gw = (struct in6_addr*)&route_info->gw;
++
++ DEBUGP("ip6t_ROUTE: called with: ");
++ DEBUGP("DST=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(ipv6h->daddr));
++ DEBUGP("GATEWAY=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(*gw));
++ DEBUGP("OUT=%s\n", route_info->oif);
++
++ if (ipv6_addr_any(gw))
++ rt = rt6_lookup(&ipv6h->daddr, &ipv6h->saddr, ifindex, 1);
++ else
++ rt = rt6_lookup(gw, &ipv6h->saddr, ifindex, 1);
++
++ if (!rt)
++ goto no_route;
++
++ DEBUGP("ip6t_ROUTE: routing gives: ");
++ DEBUGP("DST=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(rt->rt6i_dst.addr));
++ DEBUGP("GATEWAY=%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x ", NIP6(rt->rt6i_gateway));
++ DEBUGP("OUT=%s\n", rt->rt6i_dev->name);
++
++ if (ifindex && rt->rt6i_dev->ifindex!=ifindex)
++ goto wrong_route;
++
++ if (!rt->rt6i_nexthop) {
++ DEBUGP("ip6t_ROUTE: discovering neighbour\n");
++ rt->rt6i_nexthop = ndisc_get_neigh(rt->rt6i_dev, &rt->rt6i_dst.addr);
++ }
++
++ /* Drop old route. */
++ dst_release(skb->dst);
++ skb->dst = &rt->u.dst;
++ skb->dev = rt->rt6i_dev;
++ return 1;
++
++ wrong_route:
++ dst_release(&rt->u.dst);
++ no_route:
++ if (!net_ratelimit())
++ return 0;
++
++ printk("ip6t_ROUTE: no explicit route found ");
++ if (ifindex)
++ printk("via interface %s ", route_info->oif);
++ if (!ipv6_addr_any(gw))
++ printk("via gateway %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x", NIP6(*gw));
++ printk("\n");
++ return 0;
++}
++
++
++/* Stolen from ip6_output_finish
++ * PRE : skb->dev is set to the device we are leaving by
++ * skb->dst is not NULL
++ * POST: the packet is sent with the link layer header pushed
++ * the packet is destroyed
++ */
++static void ip_direct_send(struct sk_buff *skb)
++{
++ struct dst_entry *dst = skb->dst;
++ struct hh_cache *hh = dst->hh;
++
++ if (hh) {
++ read_lock_bh(&hh->hh_lock);
++ memcpy(skb->data - 16, hh->hh_data, 16);
++ read_unlock_bh(&hh->hh_lock);
++ skb_push(skb, hh->hh_len);
++ hh->hh_output(skb);
++ } else if (dst->neighbour)
++ dst->neighbour->output(skb);
++ else {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ip6t_ROUTE: no hdr & no neighbour cache!\n");
++ kfree_skb(skb);
++ }
++}
++
++
++static unsigned int
++route6_oif(const struct ip6t_route_target_info *route_info,
++ struct sk_buff *skb)
++{
++ unsigned int ifindex = 0;
++ struct net_device *dev_out = NULL;
++
++ /* The user set the interface name to use.
++ * Getting the current interface index.
++ */
++ if ((dev_out = dev_get_by_name(route_info->oif))) {
++ ifindex = dev_out->ifindex;
++ } else {
++ /* Unknown interface name : packet dropped */
++ if (net_ratelimit())
++ DEBUGP("ip6t_ROUTE: oif interface %s not found\n", route_info->oif);
++
++ if (route_info->flags & IP6T_ROUTE_CONTINUE)
++ return IP6T_CONTINUE;
++ else
++ return NF_DROP;
++ }
++
++ /* Trying the standard way of routing packets */
++ if (route6(skb, ifindex, route_info)) {
++ dev_put(dev_out);
++ if (route_info->flags & IP6T_ROUTE_CONTINUE)
++ return IP6T_CONTINUE;
++
++ ip_direct_send(skb);
++ return NF_STOLEN;
++ } else
++ return NF_DROP;
++}
++
++
++static unsigned int
++route6_gw(const struct ip6t_route_target_info *route_info,
++ struct sk_buff *skb)
++{
++ if (route6(skb, 0, route_info)) {
++ if (route_info->flags & IP6T_ROUTE_CONTINUE)
++ return IP6T_CONTINUE;
++
++ ip_direct_send(skb);
++ return NF_STOLEN;
++ } else
++ return NF_DROP;
++}
++
++
++static unsigned int
++ip6t_route_target(struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ unsigned int hooknum,
++ const struct xt_target *target,
++ const void *targinfo)
++{
++ const struct ip6t_route_target_info *route_info = targinfo;
++ struct sk_buff *skb = *pskb;
++ struct in6_addr *gw = (struct in6_addr*)&route_info->gw;
++ unsigned int res;
++
++ if (route_info->flags & IP6T_ROUTE_CONTINUE)
++ goto do_it;
++
++ /* If we are at PREROUTING or INPUT hook
++ * the TTL isn't decreased by the IP stack
++ */
++ if (hooknum == NF_IP6_PRE_ROUTING ||
++ hooknum == NF_IP6_LOCAL_IN) {
++
++ struct ipv6hdr *ipv6h = skb->nh.ipv6h;
++
++ if (ipv6h->hop_limit <= 1) {
++ /* Force OUTPUT device used as source address */
++ skb->dev = skb->dst->dev;
++
++ icmpv6_send(skb, ICMPV6_TIME_EXCEED,
++ ICMPV6_EXC_HOPLIMIT, 0, skb->dev);
++
++ return NF_DROP;
++ }
++
++ ipv6h->hop_limit--;
++ }
++
++ if ((route_info->flags & IP6T_ROUTE_TEE)) {
++ /*
++ * Copy the *pskb, and route the copy. Will later return
++ * IP6T_CONTINUE for the original skb, which should continue
++ * on its way as if nothing happened. The copy should be
++ * independantly delivered to the ROUTE --gw.
++ */
++ skb = skb_copy(*pskb, GFP_ATOMIC);
++ if (!skb) {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ip6t_ROUTE: copy failed!\n");
++ return IP6T_CONTINUE;
++ }
++ }
++
++do_it:
++ if (route_info->oif[0]) {
++ res = route6_oif(route_info, skb);
++ } else if (!ipv6_addr_any(gw)) {
++ res = route6_gw(route_info, skb);
++ } else {
++ if (net_ratelimit())
++ DEBUGP(KERN_DEBUG "ip6t_ROUTE: no parameter !\n");
++ res = IP6T_CONTINUE;
++ }
++
++ if ((route_info->flags & IP6T_ROUTE_TEE))
++ res = IP6T_CONTINUE;
++
++ return res;
++}
++
++
++static int
++ip6t_route_checkentry(const char *tablename,
++ const void *e,
++ const struct xt_target *target,
++ void *targinfo,
++ unsigned int hook_mask)
++{
++ if (strcmp(tablename, "mangle") != 0) {
++ printk("ip6t_ROUTE: can only be called from \"mangle\" table.\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static struct ip6t_target ip6t_route_reg = {
++ .name = "ROUTE",
++ .target = ip6t_route_target,
++ .targetsize = sizeof(struct ip6t_route_target_info),
++ .checkentry = ip6t_route_checkentry,
++ .me = THIS_MODULE
++};
++
++
++static int __init init(void)
++{
++ printk(KERN_DEBUG "registering ipv6 ROUTE target\n");
++ if (ip6t_register_target(&ip6t_route_reg))
++ return -EINVAL;
++
++ return 0;
++}
++
++
++static void __exit fini(void)
++{
++ ip6t_unregister_target(&ip6t_route_reg);
++}
++
++module_init(init);
++module_exit(fini);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.6.19.old/net/ipv6/netfilter/Kconfig linux-2.6.19.dev/net/ipv6/netfilter/Kconfig
+--- linux-2.6.19.old/net/ipv6/netfilter/Kconfig 2006-12-14 03:13:49.000000000 +0100
++++ linux-2.6.19.dev/net/ipv6/netfilter/Kconfig 2006-12-14 03:13:49.000000000 +0100
+@@ -162,6 +162,19 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config IP6_NF_TARGET_ROUTE
++ tristate "ROUTE target support"
++ depends on IP6_NF_MANGLE
++ help
++ This option adds a `ROUTE' target, which enables you to setup unusual
++ routes. The ROUTE target is also able to change the incoming interface
++ of a packet.
++
++ The target can be or not a final target. It has to be used inside the
++ mangle table.
++
++ Not working as a module.
++
+ config IP6_NF_MANGLE
+ tristate "Packet mangling"
+ depends on IP6_NF_IPTABLES
+diff -urN linux-2.6.19.old/net/ipv6/netfilter/Makefile linux-2.6.19.dev/net/ipv6/netfilter/Makefile
+--- linux-2.6.19.old/net/ipv6/netfilter/Makefile 2006-12-14 03:13:49.000000000 +0100
++++ linux-2.6.19.dev/net/ipv6/netfilter/Makefile 2006-12-14 03:13:49.000000000 +0100
+@@ -20,6 +20,7 @@
+ obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o
+ obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o
+ obj-$(CONFIG_IP6_NF_TARGET_REJECT) += ip6t_REJECT.o
++obj-$(CONFIG_IP6_NF_TARGET_ROUTE) += ip6t_ROUTE.o
+
+ # objects for l3 independent conntrack
+ nf_conntrack_ipv6-objs := nf_conntrack_l3proto_ipv6.o nf_conntrack_proto_icmpv6.o nf_conntrack_reasm.o
diff --git a/packages/linux/linux-magicbox-2.6.19.2/170-netfilter_chaostables.patch b/packages/linux/linux-magicbox-2.6.19.2/170-netfilter_chaostables.patch
new file mode 100644
index 0000000000..46d48a5d08
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/170-netfilter_chaostables.patch
@@ -0,0 +1,880 @@
+diff -ruN linux-2.6.19.1.orig/include/linux/netfilter/xt_CHAOS.h linux-2.6.19.1/include/linux/netfilter/xt_CHAOS.h
+--- linux-2.6.19.1.orig/include/linux/netfilter/xt_CHAOS.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/include/linux/netfilter/xt_CHAOS.h 2007-01-11 13:28:07.656144799 +0100
+@@ -0,0 +1,14 @@
++#ifndef _LINUX_XT_CHAOS_H
++#define _LINUX_XT_CHAOS_H 1
++
++enum xt_chaos_variant {
++ XTCHAOS_NORMAL,
++ XTCHAOS_TARPIT,
++ XTCHAOS_DELUDE,
++};
++
++struct xt_chaos_info {
++ enum xt_chaos_variant variant;
++};
++
++#endif /* _LINUX_XT_CHAOS_H */
+diff -ruN linux-2.6.19.1.orig/include/linux/netfilter/xt_portscan.h linux-2.6.19.1/include/linux/netfilter/xt_portscan.h
+--- linux-2.6.19.1.orig/include/linux/netfilter/xt_portscan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/include/linux/netfilter/xt_portscan.h 2007-01-11 13:28:07.656144799 +0100
+@@ -0,0 +1,8 @@
++#ifndef _LINUX_XT_PORTSCAN_H
++#define _LINUX_XT_PORTSCAN_H 1
++
++struct xt_portscan_info {
++ unsigned int match_stealth, match_syn, match_cn, match_gr;
++};
++
++#endif /* _LINUX_XT_PORTSCAN_H */
+diff -ruN linux-2.6.19.1.orig/net/netfilter/find_match.c linux-2.6.19.1/net/netfilter/find_match.c
+--- linux-2.6.19.1.orig/net/netfilter/find_match.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/net/netfilter/find_match.c 2007-01-11 13:28:12.191994379 +0100
+@@ -0,0 +1,37 @@
++/*
++ xt_request_find_match
++ by Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
++
++ Based upon linux-2.6.18.5/net/netfilter/x_tables.c:
++ Copyright (C) 2006-2006 Harald Welte <laforge@netfilter.org>
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2 as
++ published by the Free Software Foundation.
++*/
++
++#include <linux/err.h>
++#include <linux/netfilter_arp.h>
++#include <linux/socket.h>
++#include <linux/netfilter/x_tables.h>
++
++/*
++ * Yeah this code is sub-optimal, but the function is missing in
++ * mainline so far. -jengelh
++ */
++static struct xt_match *xt_request_find_match(int af, const char *name,
++ u8 revision)
++{
++ static const char *const xt_prefix[] = {
++ [AF_INET] = "ip",
++ [AF_INET6] = "ip6",
++ [NF_ARP] = "arp",
++ };
++ struct xt_match *match;
++
++ match = try_then_request_module(xt_find_match(af, name, revision),
++ "%st_%s", xt_prefix[af], name);
++ if(IS_ERR(match) || match == NULL)
++ return NULL;
++
++ return match;
++}
+diff -ruN linux-2.6.19.1.orig/net/netfilter/Kconfig linux-2.6.19.1/net/netfilter/Kconfig
+--- linux-2.6.19.1.orig/net/netfilter/Kconfig 2007-01-11 13:27:24.445577700 +0100
++++ linux-2.6.19.1/net/netfilter/Kconfig 2007-01-11 13:28:09.092097179 +0100
+@@ -122,6 +122,14 @@
+
+ # alphabetically ordered list of targets
+
++config NETFILTER_XT_TARGET_CHAOS
++ tristate '"CHAOS" target support'
++ depends on NETFILTER_XTABLES
++ help
++ This option adds a `CHAOS' target.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
+ config NETFILTER_XT_TARGET_CLASSIFY
+ tristate '"CLASSIFY" target support'
+ depends on NETFILTER_XTABLES
+@@ -148,6 +156,14 @@
+ <file:Documentation/modules.txt>. The module will be called
+ ipt_CONNMARK.o. If unsure, say `N'.
+
++config NETFILTER_XT_TARGET_DELUDE
++ tristate '"DELUDE" target support'
++ depends on NETFILTER_XTABLES
++ help
++ This option adds a `DELUDE' target.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
+ config NETFILTER_XT_TARGET_DSCP
+ tristate '"DSCP" target support'
+ depends on NETFILTER_XTABLES
+@@ -355,6 +371,14 @@
+
+ To compile it as a module, choose M here. If unsure, say N.
+
++config NETFILTER_XT_MATCH_PORTSCAN
++ tristate '"portscan" match support'
++ depends on NETFILTER_XTABLES
++ help
++ This option adds a 'portscan' match support.
++
++ To compile it as a module, choose M here. If unsure, say N.
++
+ config NETFILTER_XT_MATCH_MULTIPORT
+ tristate "Multiple port match support"
+ depends on NETFILTER_XTABLES
+diff -ruN linux-2.6.19.1.orig/net/netfilter/Makefile linux-2.6.19.1/net/netfilter/Makefile
+--- linux-2.6.19.1.orig/net/netfilter/Makefile 2007-01-11 13:27:24.445577700 +0100
++++ linux-2.6.19.1/net/netfilter/Makefile 2007-01-11 13:28:07.656144799 +0100
+@@ -23,8 +23,10 @@
+ obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o
+
+ # targets
++obj-$(CONFIG_NETFILTER_XT_TARGET_CHAOS) += xt_CHAOS.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_CLASSIFY) += xt_CLASSIFY.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMARK) += xt_CONNMARK.o
++obj-$(CONFIG_NETFILTER_XT_TARGET_DELUDE) += xt_DELUDE.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_MARK) += xt_MARK.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_NFQUEUE) += xt_NFQUEUE.o
+@@ -47,6 +49,7 @@
+ obj-$(CONFIG_NETFILTER_XT_MATCH_MARK) += xt_mark.o
+ obj-$(CONFIG_NETFILTER_XT_MATCH_MULTIPORT) += xt_multiport.o
+ obj-$(CONFIG_NETFILTER_XT_MATCH_POLICY) += xt_policy.o
++obj-$(CONFIG_NETFILTER_XT_MATCH_PORTSCAN) += xt_portscan.o
+ obj-$(CONFIG_NETFILTER_XT_MATCH_PKTTYPE) += xt_pkttype.o
+ obj-$(CONFIG_NETFILTER_XT_MATCH_QUOTA) += xt_quota.o
+ obj-$(CONFIG_NETFILTER_XT_MATCH_REALM) += xt_realm.o
+diff -ruN linux-2.6.19.1.orig/net/netfilter/xt_CHAOS.c linux-2.6.19.1/net/netfilter/xt_CHAOS.c
+--- linux-2.6.19.1.orig/net/netfilter/xt_CHAOS.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/net/netfilter/xt_CHAOS.c 2007-01-11 13:28:14.407920893 +0100
+@@ -0,0 +1,180 @@
++/*
++ CHAOS target for netfilter
++
++ Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
++ released under the terms of the GNU General Public
++ License version 2.x and only versions 2.x.
++*/
++#include <linux/icmp.h>
++#include <linux/in.h>
++#include <linux/ip.h>
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/stat.h>
++#include <linux/netfilter/x_tables.h>
++#include <linux/netfilter/xt_tcpudp.h>
++#include <linux/netfilter_ipv4/ipt_REJECT.h>
++#include <net/ip.h>
++#include <linux/netfilter/xt_CHAOS.h>
++#include "find_match.c"
++#define PFX KBUILD_MODNAME ": "
++
++/* Out of tree workarounds */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++# define HAVE_TARGUSERINFO 1
++#endif
++
++/* Module parameters */
++static unsigned int reject_percentage = ~0U * .01;
++static unsigned int delude_percentage = ~0U * .0101;
++module_param(reject_percentage, uint, S_IRUGO | S_IWUSR);
++module_param(delude_percentage, uint, S_IRUGO | S_IWUSR);
++
++/* References to other matches/targets */
++static struct xt_match *xm_tcp;
++static struct xt_target *xt_delude, *xt_reject, *xt_tarpit;
++
++/* Static data for other matches/targets */
++static const struct ipt_reject_info reject_params = {
++ .with = ICMP_HOST_UNREACH,
++};
++
++static const struct xt_tcp tcp_params = {
++ .spts = {0, ~0},
++ .dpts = {0, ~0},
++};
++
++/* CHAOS functions */
++static void xt_chaos_total(const struct xt_chaos_info *info,
++ struct sk_buff **pskb, const struct net_device *in,
++ const struct net_device *out, unsigned int hooknum)
++{
++ const int protoff = 4 * (*pskb)->nh.iph->ihl;
++ const int offset = ntohs((*pskb)->nh.iph->frag_off) & IP_OFFSET;
++ const struct xt_target *destiny;
++ int hotdrop = 0, ret;
++
++ ret = xm_tcp->match(*pskb, in, out, xm_tcp, &tcp_params,
++ offset, protoff, &hotdrop);
++ if(!ret || hotdrop || (unsigned int)net_random() > delude_percentage)
++ return;
++
++ destiny = (info->variant == XTCHAOS_TARPIT) ? xt_tarpit : xt_delude;
++#ifdef HAVE_TARGUSERINFO
++ destiny->target(pskb, in, out, hooknum, destiny, NULL, NULL);
++#else
++ destiny->target(pskb, in, out, hooknum, destiny, NULL);
++#endif
++ return;
++}
++
++static unsigned int xt_chaos_target(struct sk_buff **pskb,
++ const struct net_device *in, const struct net_device *out,
++ unsigned int hooknum, const struct xt_target *target, const void *targinfo
++#ifdef HAVE_TARGUSERINFO
++ ,
++ void *userinfo
++#endif
++ )
++{
++ /* Equivalent to:
++ * -A chaos -m statistic --mode random --probability \
++ * $reject_percentage -j REJECT --reject-with host-unreach;
++ * -A chaos -m statistic --mode random --probability \
++ * $delude_percentage -j DELUDE;
++ * -A chaos -j DROP;
++ */
++ const struct xt_chaos_info *info = targinfo;
++
++ if((unsigned int)net_random() <= reject_percentage)
++#ifdef HAVE_TARGUSERINFO
++ return xt_reject->target(pskb, in, out, hooknum, target,
++ &reject_params, userinfo);
++#else
++ return xt_reject->target(pskb, in, out, hooknum, target,
++ &reject_params);
++#endif
++
++ /* TARPIT/DELUDE may not be called from the OUTPUT chain */
++ if((*pskb)->nh.iph->protocol == IPPROTO_TCP &&
++ info->variant != XTCHAOS_NORMAL && hooknum != NF_IP_LOCAL_OUT)
++ xt_chaos_total(info, pskb, in, out, hooknum);
++
++ return NF_DROP;
++}
++
++static struct xt_target xt_chaos_info = {
++ .name = "CHAOS",
++ .target = xt_chaos_target,
++ .table = "filter",
++ .targetsize = sizeof(struct xt_chaos_info),
++ .hooks = (1 << NF_IP_LOCAL_IN) | (1 << NF_IP_FORWARD) |
++ (1 << NF_IP_LOCAL_OUT),
++ .family = AF_INET,
++ .me = THIS_MODULE,
++};
++
++static int __init xt_chaos_init(void)
++{
++ int ret = -EINVAL;
++
++ xm_tcp = xt_request_find_match(AF_INET, "tcp", 0);
++ if(xm_tcp == NULL) {
++ printk(KERN_WARNING PFX "Could not find \"tcp\" match\n");
++ return -EINVAL;
++ }
++
++ xt_reject = xt_request_find_target(AF_INET, "REJECT", 0);
++ if(xt_reject == NULL) {
++ printk(KERN_WARNING PFX "Could not find \"REJECT\" target\n");
++ goto out2;
++ }
++
++ xt_tarpit = xt_request_find_target(AF_INET, "TARPIT", 0);
++ if(xt_tarpit == NULL) {
++ printk(KERN_WARNING PFX "Could not find \"TARPIT\" target\n");
++ goto out3;
++ }
++
++ xt_delude = xt_request_find_target(AF_INET, "DELUDE", 0);
++ if(xt_delude == NULL) {
++ printk(KERN_WARNING PFX "Could not find \"DELUDE\" target\n");
++ goto out4;
++ }
++
++ if((ret = xt_register_target(&xt_chaos_info)) != 0) {
++ printk(KERN_WARNING PFX "xt_register_target returned "
++ "error %d\n", ret);
++ goto out5;
++ }
++
++ return 0;
++
++ out5:
++ module_put(xt_delude->me);
++ out4:
++ module_put(xt_tarpit->me);
++ out3:
++ module_put(xt_reject->me);
++ out2:
++ module_put(xm_tcp->me);
++ return ret;
++}
++
++static void __exit xt_chaos_exit(void)
++{
++ xt_unregister_target(&xt_chaos_info);
++ module_put(xm_tcp->me);
++ module_put(xt_reject->me);
++ module_put(xt_delude->me);
++ module_put(xt_tarpit->me);
++ return;
++}
++
++module_init(xt_chaos_init);
++module_exit(xt_chaos_exit);
++MODULE_AUTHOR("Jan Engelhardt <jengelh@gmx.de>");
++MODULE_DESCRIPTION("netfilter CHAOS target");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("ipt_CHAOS");
+diff -ruN linux-2.6.19.1.orig/net/netfilter/xt_DELUDE.c linux-2.6.19.1/net/netfilter/xt_DELUDE.c
+--- linux-2.6.19.1.orig/net/netfilter/xt_DELUDE.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/net/netfilter/xt_DELUDE.c 2007-01-11 13:28:07.656144799 +0100
+@@ -0,0 +1,265 @@
++/*
++ DELUDE target
++ Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2007
++
++ Based upon linux-2.6.18.5/net/ipv4/netfilter/ipt_REJECT.c:
++ (C) 1999-2001 Paul `Rusty' Russell
++ (C) 2002-2004 Netfilter Core Team <coreteam@netfilter.org>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License version 2 as
++ published by the Free Software Foundation.
++*/
++
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/ip.h>
++#include <linux/tcp.h>
++#include <linux/udp.h>
++#include <linux/icmp.h>
++#include <net/icmp.h>
++#include <net/ip.h>
++#include <net/tcp.h>
++#include <net/route.h>
++#include <net/dst.h>
++#include <linux/netfilter_ipv4/ip_tables.h>
++#ifdef CONFIG_BRIDGE_NETFILTER
++#include <linux/netfilter_bridge.h>
++#endif
++#define PFX KBUILD_MODNAME ": "
++
++/* Out of tree workarounds */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++# define HAVE_TARGINFOSIZE 1
++# define HAVE_TARGUSERINFO 1
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
++# define nfmark mark
++#endif
++
++static inline struct rtable *route_reverse(struct sk_buff *skb,
++ struct tcphdr *tcph, int hook)
++{
++ struct iphdr *iph = skb->nh.iph;
++ struct dst_entry *odst;
++ struct flowi fl = {};
++ struct rtable *rt;
++
++ /* We don't require ip forwarding to be enabled to be able to
++ * send a RST reply for bridged traffic. */
++ if (hook != NF_IP_FORWARD
++#ifdef CONFIG_BRIDGE_NETFILTER
++ || (skb->nf_bridge && skb->nf_bridge->mask & BRNF_BRIDGED)
++#endif
++ ) {
++ fl.nl_u.ip4_u.daddr = iph->saddr;
++ if (hook == NF_IP_LOCAL_IN)
++ fl.nl_u.ip4_u.saddr = iph->daddr;
++ fl.nl_u.ip4_u.tos = RT_TOS(iph->tos);
++
++ if (ip_route_output_key(&rt, &fl) != 0)
++ return NULL;
++ } else {
++ /* non-local src, find valid iif to satisfy
++ * rp-filter when calling ip_route_input. */
++ fl.nl_u.ip4_u.daddr = iph->daddr;
++ if (ip_route_output_key(&rt, &fl) != 0)
++ return NULL;
++
++ odst = skb->dst;
++ if (ip_route_input(skb, iph->saddr, iph->daddr,
++ RT_TOS(iph->tos), rt->u.dst.dev) != 0) {
++ dst_release(&rt->u.dst);
++ return NULL;
++ }
++ dst_release(&rt->u.dst);
++ rt = (struct rtable *)skb->dst;
++ skb->dst = odst;
++
++ fl.nl_u.ip4_u.daddr = iph->saddr;
++ fl.nl_u.ip4_u.saddr = iph->daddr;
++ fl.nl_u.ip4_u.tos = RT_TOS(iph->tos);
++ }
++
++ if (rt->u.dst.error) {
++ dst_release(&rt->u.dst);
++ return NULL;
++ }
++
++ fl.proto = IPPROTO_TCP;
++ fl.fl_ip_sport = tcph->dest;
++ fl.fl_ip_dport = tcph->source;
++
++ xfrm_lookup((struct dst_entry **)&rt, &fl, NULL, 0);
++
++ return rt;
++}
++
++static void send_reset(struct sk_buff *oldskb, int hook)
++{
++ struct sk_buff *nskb;
++ struct iphdr *iph = oldskb->nh.iph;
++ struct tcphdr _otcph, *oth, *tcph;
++ struct rtable *rt;
++ u_int16_t tmp_port;
++ u_int32_t tmp_addr;
++ int hh_len;
++
++ /* IP header checks: fragment. */
++ if (oldskb->nh.iph->frag_off & htons(IP_OFFSET))
++ return;
++
++ oth = skb_header_pointer(oldskb, oldskb->nh.iph->ihl * 4,
++ sizeof(_otcph), &_otcph);
++ if (oth == NULL)
++ return;
++
++ /* DELUDE only answers SYN. */
++ if(!oth->syn || oth->ack || oth->fin || oth->rst)
++ return;
++
++ /* Check checksum */
++ if (nf_ip_checksum(oldskb, hook, iph->ihl * 4, IPPROTO_TCP))
++ return;
++
++ if ((rt = route_reverse(oldskb, oth, hook)) == NULL)
++ return;
++
++ hh_len = LL_RESERVED_SPACE(rt->u.dst.dev);
++
++ /* We need a linear, writeable skb. We also need to expand
++ headroom in case hh_len of incoming interface < hh_len of
++ outgoing interface */
++ nskb = skb_copy_expand(oldskb, hh_len, skb_tailroom(oldskb),
++ GFP_ATOMIC);
++ if (!nskb) {
++ dst_release(&rt->u.dst);
++ return;
++ }
++
++ dst_release(nskb->dst);
++ nskb->dst = &rt->u.dst;
++
++ /* This packet will not be the same as the other: clear nf fields */
++ nf_reset(nskb);
++ nskb->nfmark = 0;
++ skb_init_secmark(nskb);
++
++ tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl);
++
++ /* Swap source and dest */
++ tmp_addr = nskb->nh.iph->saddr;
++ nskb->nh.iph->saddr = nskb->nh.iph->daddr;
++ nskb->nh.iph->daddr = tmp_addr;
++ tmp_port = tcph->source;
++ tcph->source = tcph->dest;
++ tcph->dest = tmp_port;
++
++ /* Truncate to length (no data) */
++ tcph->doff = sizeof(struct tcphdr)/4;
++ skb_trim(nskb, nskb->nh.iph->ihl*4 + sizeof(struct tcphdr));
++ nskb->nh.iph->tot_len = htons(nskb->len);
++
++ tcph->seq = oth->ack_seq;
++ tcph->ack_seq = 0;
++
++ /* Reset flags */
++ ((u_int8_t *)tcph)[13] = 0;
++ tcph->syn = tcph->ack = 1;
++
++ tcph->window = 0;
++ tcph->urg_ptr = 0;
++
++ /* Adjust TCP checksum */
++ tcph->check = 0;
++ tcph->check = tcp_v4_check(tcph, sizeof(struct tcphdr),
++ nskb->nh.iph->saddr,
++ nskb->nh.iph->daddr,
++ csum_partial((char *)tcph,
++ sizeof(struct tcphdr), 0));
++
++ /* Adjust IP TTL, DF */
++ nskb->nh.iph->ttl = dst_metric(nskb->dst, RTAX_HOPLIMIT);
++ /* Set DF, id = 0 */
++ nskb->nh.iph->frag_off = htons(IP_DF);
++ nskb->nh.iph->id = 0;
++
++ /* Adjust IP checksum */
++ nskb->nh.iph->check = 0;
++ nskb->nh.iph->check = ip_fast_csum((unsigned char *)nskb->nh.iph,
++ nskb->nh.iph->ihl);
++
++ /* "Never happens" */
++ if (nskb->len > dst_mtu(nskb->dst))
++ goto free_nskb;
++
++ nf_ct_attach(nskb, oldskb);
++
++ NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, nskb, NULL, nskb->dst->dev,
++ dst_output);
++ return;
++
++ free_nskb:
++ kfree_skb(nskb);
++ return;
++}
++
++static unsigned int xt_delude_target(struct sk_buff **pskb,
++ const struct net_device *in, const struct net_device *out,
++ unsigned int hooknum, const struct xt_target *target, const void *targinfo
++#ifdef HAVE_TARGUSERINFO
++ ,
++ void *userinfo
++#endif
++ )
++{
++ /* WARNING: This code causes reentry within iptables.
++ This means that the iptables jump stack is now crap. We
++ must return an absolute verdict. --RR */
++ send_reset(*pskb, hooknum);
++ return NF_DROP;
++}
++
++static int xt_delude_check(const char *tablename, const void *e_void,
++ const struct xt_target *target, void *targinfo,
++#ifdef HAVE_TARGINFOSIZE
++ unsigned int targinfosize,
++#endif
++ unsigned int hook_mask)
++{
++ if(hook_mask & ~((1 << NF_IP_LOCAL_IN) | (1 << NF_IP_FORWARD))) {
++ printk(KERN_WARNING PFX "DELUDE may not be used in chains "
++ "other than INPUT and FORWARD\n");
++ return 0;
++ }
++ return 1;
++}
++
++static struct xt_target xt_delude_info = {
++ .name = "DELUDE",
++ .target = xt_delude_target,
++ .checkentry = xt_delude_check,
++ .table = "filter",
++ .hooks = (1 << NF_IP_LOCAL_IN) | (1 << NF_IP_FORWARD) |
++ (1 << NF_IP_LOCAL_OUT),
++ .proto = IPPROTO_TCP,
++ .family = AF_INET,
++ .me = THIS_MODULE,
++};
++
++static int __init xt_delude_init(void)
++{
++ return xt_register_target(&xt_delude_info);
++}
++
++static void __exit xt_delude_exit(void)
++{
++ xt_unregister_target(&xt_delude_info);
++}
++
++module_init(xt_delude_init);
++module_exit(xt_delude_exit);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Jan Engelhardt <jengelh@gmx.de>");
++MODULE_DESCRIPTION("netfilter DELUDE target");
+diff -ruN linux-2.6.19.1.orig/net/netfilter/xt_portscan.c linux-2.6.19.1/net/netfilter/xt_portscan.c
+--- linux-2.6.19.1.orig/net/netfilter/xt_portscan.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1/net/netfilter/xt_portscan.c 2007-01-11 13:28:14.407920893 +0100
+@@ -0,0 +1,282 @@
++/*
++ portscan match for netfilter
++
++ Written by Jan Engelhardt, 2006 - 2007
++ released under the terms of the GNU General Public
++ License version 2.x and only versions 2.x.
++*/
++#include <linux/in.h>
++#include <linux/ip.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/skbuff.h>
++#include <linux/stat.h>
++#include <linux/tcp.h>
++#include <linux/types.h>
++#include <linux/version.h>
++#include <linux/netfilter/x_tables.h>
++#include <linux/netfilter/xt_tcpudp.h>
++#if defined(CONFIG_IP_NF_CONNTRACK) || defined(CONFIG_IP_NF_CONNTRACK_MODULE)
++# include <linux/netfilter_ipv4/ip_conntrack.h>
++#else /* linux-2.6.20+ */
++# include <net/netfilter/nf_nat_rule.h>
++#endif
++#include <linux/netfilter/xt_portscan.h>
++#define PFX KBUILD_MODNAME ": "
++
++/* Out of tree workarounds */
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++# define HAVE_MATCHINFOSIZE 1
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
++# define nfmark mark
++#endif
++
++enum {
++ TCP_FLAGS_ALL3 = TCP_FLAG_FIN | TCP_FLAG_RST | TCP_FLAG_SYN,
++ TCP_FLAGS_ALL4 = TCP_FLAGS_ALL3 | TCP_FLAG_ACK,
++ TCP_FLAGS_ALL6 = TCP_FLAGS_ALL4 | TCP_FLAG_PSH | TCP_FLAG_URG,
++};
++
++/* Module parameters */
++static unsigned int
++ connmark_mask = ~0,
++ packet_mask = ~0,
++ mark_seen = 0x9,
++ mark_synrcv = 0x1,
++ mark_closed = 0x2,
++ mark_synscan = 0x3,
++ mark_estab1 = 0x4,
++ mark_estab2 = 0x5,
++ mark_cnscan = 0x6,
++ mark_grscan = 0x7,
++ mark_valid = 0x8;
++
++module_param(connmark_mask, uint, S_IRUGO | S_IWUSR);
++module_param(packet_mask, uint, S_IRUGO | S_IWUSR);
++module_param(mark_seen, uint, S_IRUGO | S_IWUSR);
++module_param(mark_synrcv, uint, S_IRUGO | S_IWUSR);
++module_param(mark_closed, uint, S_IRUGO | S_IWUSR);
++module_param(mark_synscan, uint, S_IRUGO | S_IWUSR);
++module_param(mark_estab1, uint, S_IRUGO | S_IWUSR);
++module_param(mark_estab2, uint, S_IRUGO | S_IWUSR);
++module_param(mark_cnscan, uint, S_IRUGO | S_IWUSR);
++module_param(mark_grscan, uint, S_IRUGO | S_IWUSR);
++module_param(mark_valid, uint, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(connmark_mask, "only set specified bits in connection mark");
++MODULE_PARM_DESC(packet_mask, "only set specified bits in packet mark");
++MODULE_PARM_DESC(mark_seen, "nfmark value for packet-seen state");
++MODULE_PARM_DESC(mark_synrcv, "connmark value for SYN Received state");
++MODULE_PARM_DESC(mark_closed, "connmark value for closed state");
++MODULE_PARM_DESC(mark_synscan, "connmark value for SYN Scan state");
++MODULE_PARM_DESC(mark_estab1, "connmark value for Established-1 state");
++MODULE_PARM_DESC(mark_estab2, "connmark value for Established-2 state");
++MODULE_PARM_DESC(mark_cnscan, "connmark value for Connect Scan state");
++MODULE_PARM_DESC(mark_grscan, "connmark value for Grab Scan state");
++MODULE_PARM_DESC(mark_valid, "connmark value for Valid state");
++
++/* TCP flag functions */
++static inline int tflg_ack4(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL4) == TCP_FLAG_ACK;
++}
++
++static inline int tflg_ack6(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL6) == TCP_FLAG_ACK;
++}
++
++static inline int tflg_fin(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL3) == TCP_FLAG_FIN;
++}
++
++static inline int tflg_rst(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL3) == TCP_FLAG_RST;
++}
++
++static inline int tflg_rstack(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL4) ==
++ (TCP_FLAG_ACK | TCP_FLAG_RST);
++}
++
++static inline int tflg_syn(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL4) == TCP_FLAG_SYN;
++}
++
++static inline int tflg_synack(const struct tcphdr *th)
++{
++ return (tcp_flag_word(th) & TCP_FLAGS_ALL4) ==
++ (TCP_FLAG_SYN | TCP_FLAG_ACK);
++}
++
++/* portscan functions */
++static inline int xt_portscan_stealth(const struct tcphdr *th)
++{
++ /*
++ * "Connection refused" replies to our own probes must not be matched.
++ */
++ if(tflg_rstack(th))
++ return 0;
++
++ if(tflg_rst(th) && printk_ratelimit()) {
++ printk(KERN_WARNING PFX "Warning: Pure RST received\n");
++ return 0;
++ }
++
++ /*
++ * -p tcp ! --syn -m conntrack --ctstate INVALID: Looking for non-start
++ * packets that are not associated with any connection -- this will
++ * match most scan types (NULL, XMAS, FIN) and ridiculous flag
++ * combinations (SYN-RST, SYN-FIN, SYN-FIN-RST, FIN-RST, etc.).
++ */
++ return !tflg_syn(th);
++}
++
++static inline int xt_portscan_full(int mark, enum ip_conntrack_info ctstate,
++ int loopback, const struct tcphdr *tcph, int payload_len)
++{
++ if(mark == mark_estab2) {
++ /*
++ * -m connmark --mark $ESTAB2
++ */
++ if(tflg_ack4(tcph) && payload_len == 0)
++ return mark; /* keep mark */
++ else if(tflg_rst(tcph) || tflg_fin(tcph))
++ return mark_grscan;
++ else
++ return mark_valid;
++ } else if(mark == mark_estab1) {
++ /*
++ * -m connmark --mark $ESTAB1
++ */
++ if(tflg_rst(tcph) || tflg_fin(tcph))
++ return mark_cnscan;
++ else if(!loopback && tflg_ack4(tcph) && payload_len == 0)
++ return mark_estab2;
++ else
++ return mark_valid;
++ } else if(mark == mark_synrcv) {
++ /*
++ * -m connmark --mark $SYN
++ */
++ if(loopback && tflg_synack(tcph))
++ return mark; /* keep mark */
++ else if(loopback && tflg_rstack(tcph))
++ return mark_closed;
++ else if(tflg_ack6(tcph))
++ return mark_estab1;
++ else
++ return mark_synscan;
++ } else if(ctstate == IP_CT_NEW && tflg_syn(tcph)) {
++ /*
++ * -p tcp --syn --ctstate NEW
++ */
++ return mark_synrcv;
++ }
++ return mark;
++}
++
++static int xt_portscan_match(const struct sk_buff *skb,
++ const struct net_device *in, const struct net_device *out,
++ const struct xt_match *match, const void *matchinfo, int offset,
++ unsigned int protoff, int *hotdrop)
++{
++ const struct xt_portscan_info *info = matchinfo;
++ enum ip_conntrack_info ctstate;
++ struct ip_conntrack *ctdata;
++ const struct tcphdr *tcph;
++ struct tcphdr tcph_buf;
++
++ tcph = skb_header_pointer(skb, protoff, sizeof(tcph_buf), &tcph_buf);
++ if(tcph == NULL)
++ return 0;
++
++ /* Check for invalid packets: -m conntrack --ctstate INVALID */
++ if((ctdata = ip_conntrack_get(skb, &ctstate)) == NULL) {
++ if(info->match_stealth)
++ return xt_portscan_stealth(tcph);
++ /*
++ * If @ctdata is NULL, we cannot match the other scan
++ * types, return.
++ */
++ return 0;
++ }
++
++ /*
++ * If -m portscan was previously applied to this packet, the rules we
++ * simulate must not be run through again. And for speedup, do not call
++ * it either when the connection is already VALID.
++ */
++ if((ctdata->mark & connmark_mask) == mark_valid ||
++ (skb->nfmark & packet_mask) != mark_seen)
++ {
++ unsigned int n;
++ n = xt_portscan_full(ctdata->mark & connmark_mask, ctstate,
++ in == &loopback_dev, tcph,
++ skb->len - protoff - 4 * tcph->doff);
++
++ ctdata->mark = (ctdata->mark & ~connmark_mask) | n;
++ ((struct sk_buff *)skb)->nfmark =
++ (skb->nfmark & ~packet_mask) | mark_seen;
++ }
++
++ return (info->match_syn && ctdata->mark == mark_synscan) ||
++ (info->match_cn && ctdata->mark == mark_cnscan) ||
++ (info->match_gr && ctdata->mark == mark_grscan);
++}
++
++static int xt_portscan_checkentry(const char *tablename, const void *entry,
++ const struct xt_match *match, void *matchinfo,
++#ifdef HAVE_MATCHINFOSIZE
++ unsigned int matchinfosize,
++#endif
++ unsigned int hook_mask)
++{
++ const struct xt_portscan_info *info = matchinfo;
++#ifdef HAVE_MATCHINFOSIZE
++ if(matchinfosize != XT_ALIGN(sizeof(struct xt_portscan_info))) {
++ printk(KERN_WARNING PFX "matchinfosize %u != %Zu\n",
++ matchinfosize,
++ XT_ALIGN(sizeof(struct xt_portscan_info)));
++ return 0;
++ }
++#endif
++ if((info->match_stealth & ~1) || (info->match_syn & ~1) ||
++ (info->match_cn & ~1) || (info->match_gr & ~1)) {
++ printk(KERN_WARNING PFX "Invalid flags\n");
++ return 0;
++ }
++ return 1;
++}
++
++static struct xt_match xt_portscan = {
++ .name = "portscan",
++ .match = xt_portscan_match,
++ .checkentry = xt_portscan_checkentry,
++ .matchsize = sizeof(struct xt_portscan_info),
++ .proto = IPPROTO_TCP,
++ .family = AF_INET,
++ .me = THIS_MODULE,
++};
++
++static int __init xt_portscan_init(void)
++{
++ return xt_register_match(&xt_portscan);
++}
++
++static void __exit xt_portscan_exit(void)
++{
++ xt_unregister_match(&xt_portscan);
++ return;
++}
++
++module_init(xt_portscan_init);
++module_exit(xt_portscan_exit);
++MODULE_AUTHOR("Jan Engelhardt <jengelh@gmx.de>");
++MODULE_DESCRIPTION("netfilter portscan match module");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("ipt_portscan");
diff --git a/packages/linux/linux-magicbox-2.6.19.2/200-sched_esfq.patch b/packages/linux/linux-magicbox-2.6.19.2/200-sched_esfq.patch
new file mode 100644
index 0000000000..6830b833ad
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/200-sched_esfq.patch
@@ -0,0 +1,730 @@
+diff -urN linux-2.6.19.old/include/linux/pkt_sched.h linux-2.6.19.dev/include/linux/pkt_sched.h
+--- linux-2.6.19.old/include/linux/pkt_sched.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/linux/pkt_sched.h 2006-12-14 03:13:51.000000000 +0100
+@@ -146,8 +146,35 @@
+ *
+ * The only reason for this is efficiency, it is possible
+ * to change these parameters in compile time.
++ *
++ * If you need to play with these values use esfq instead.
+ */
+
++/* ESFQ section */
++
++enum
++{
++ /* traditional */
++ TCA_SFQ_HASH_CLASSIC,
++ TCA_SFQ_HASH_DST,
++ TCA_SFQ_HASH_SRC,
++ TCA_SFQ_HASH_FWMARK,
++ /* direct */
++ TCA_SFQ_HASH_DSTDIR,
++ TCA_SFQ_HASH_SRCDIR,
++ TCA_SFQ_HASH_FWMARKDIR,
++};
++
++struct tc_esfq_qopt
++{
++ unsigned quantum; /* Bytes per round allocated to flow */
++ int perturb_period; /* Period of hash perturbation */
++ __u32 limit; /* Maximal packets in queue */
++ unsigned divisor; /* Hash divisor */
++ unsigned flows; /* Maximal number of flows */
++ unsigned hash_kind; /* Hash function to use for flow identification */
++};
++
+ /* RED section */
+
+ enum
+diff -urN linux-2.6.19.old/net/sched/Kconfig linux-2.6.19.dev/net/sched/Kconfig
+--- linux-2.6.19.old/net/sched/Kconfig 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/sched/Kconfig 2006-12-14 03:13:51.000000000 +0100
+@@ -185,6 +185,28 @@
+ To compile this code as a module, choose M here: the
+ module will be called sch_sfq.
+
++config NET_SCH_ESFQ
++ tristate "ESFQ queue"
++ depends on NET_SCHED
++ ---help---
++ Say Y here if you want to use the Enhanced Stochastic Fairness
++ Queueing (ESFQ) packet scheduling algorithm for some of your network
++ devices or as a leaf discipline for a classful qdisc such as HTB or
++ CBQ (see the top of <file:net/sched/sch_esfq.c> for details and
++ references to the SFQ algorithm).
++
++ This is an enchanced SFQ version which allows you to control some
++ hardcoded values in the SFQ scheduler: queue depth, hash table size,
++ and queues limit.
++
++ ESFQ also adds control to the hash function used to identify packet
++ flows. The original SFQ hashes by individual flow (TCP session or UDP
++ stream); ESFQ can hash by src or dst IP as well, which can be more
++ fair to users in some networking situations.
++
++ To compile this code as a module, choose M here: the
++ module will be called sch_esfq.
++
+ config NET_SCH_TEQL
+ tristate "True Link Equalizer (TEQL)"
+ ---help---
+diff -urN linux-2.6.19.old/net/sched/Makefile linux-2.6.19.dev/net/sched/Makefile
+--- linux-2.6.19.old/net/sched/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/sched/Makefile 2006-12-14 03:13:51.000000000 +0100
+@@ -23,6 +23,7 @@
+ obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o
+ obj-$(CONFIG_NET_SCH_DSMARK) += sch_dsmark.o
+ obj-$(CONFIG_NET_SCH_SFQ) += sch_sfq.o
++obj-$(CONFIG_NET_SCH_ESFQ) += sch_esfq.o
+ obj-$(CONFIG_NET_SCH_TBF) += sch_tbf.o
+ obj-$(CONFIG_NET_SCH_TEQL) += sch_teql.o
+ obj-$(CONFIG_NET_SCH_PRIO) += sch_prio.o
+diff -urN linux-2.6.19.old/net/sched/sch_esfq.c linux-2.6.19.dev/net/sched/sch_esfq.c
+--- linux-2.6.19.old/net/sched/sch_esfq.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/net/sched/sch_esfq.c 2006-12-14 03:13:51.000000000 +0100
+@@ -0,0 +1,644 @@
++/*
++ * net/sched/sch_esfq.c Extended Stochastic Fairness Queueing discipline.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ *
++ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
++ *
++ * Changes: Alexander Atanasov, <alex@ssi.bg>
++ * Added dynamic depth,limit,divisor,hash_kind options.
++ * Added dst and src hashes.
++ *
++ * Alexander Clouter, <alex@digriz.org.uk>
++ * Ported ESFQ to Linux 2.6.
++ *
++ * Corey Hickey, <bugfood-c@fatooh.org>
++ * Maintenance of the Linux 2.6 port.
++ * Added fwmark hash (thanks to Robert Kurjata)
++ * Added direct hashing for src, dst, and fwmark.
++ *
++ */
++
++#include <linux/autoconf.h>
++#include <linux/module.h>
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <linux/bitops.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/jiffies.h>
++#include <linux/string.h>
++#include <linux/mm.h>
++#include <linux/socket.h>
++#include <linux/sockios.h>
++#include <linux/in.h>
++#include <linux/errno.h>
++#include <linux/interrupt.h>
++#include <linux/if_ether.h>
++#include <linux/inet.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/notifier.h>
++#include <linux/init.h>
++#include <net/ip.h>
++#include <linux/ipv6.h>
++#include <net/route.h>
++#include <linux/skbuff.h>
++#include <net/sock.h>
++#include <net/pkt_sched.h>
++
++
++/* Stochastic Fairness Queuing algorithm.
++ For more comments look at sch_sfq.c.
++ The difference is that you can change limit, depth,
++ hash table size and choose 7 hash types.
++
++ classic: same as in sch_sfq.c
++ dst: destination IP address
++ src: source IP address
++ fwmark: netfilter mark value
++ dst_direct:
++ src_direct:
++ fwmark_direct: direct hashing of the above sources
++
++ TODO:
++ make sfq_change work.
++*/
++
++
++/* This type should contain at least SFQ_DEPTH*2 values */
++typedef unsigned int esfq_index;
++
++struct esfq_head
++{
++ esfq_index next;
++ esfq_index prev;
++};
++
++struct esfq_sched_data
++{
++/* Parameters */
++ int perturb_period;
++ unsigned quantum; /* Allotment per round: MUST BE >= MTU */
++ int limit;
++ unsigned depth;
++ unsigned hash_divisor;
++ unsigned hash_kind;
++/* Variables */
++ struct timer_list perturb_timer;
++ int perturbation;
++ esfq_index tail; /* Index of current slot in round */
++ esfq_index max_depth; /* Maximal depth */
++
++ esfq_index *ht; /* Hash table */
++ esfq_index *next; /* Active slots link */
++ short *allot; /* Current allotment per slot */
++ unsigned short *hash; /* Hash value indexed by slots */
++ struct sk_buff_head *qs; /* Slot queue */
++ struct esfq_head *dep; /* Linked list of slots, indexed by depth */
++ unsigned dyn_min; /* For dynamic divisor adjustment; minimum value seen */
++ unsigned dyn_max; /* maximum value seen */
++ unsigned dyn_range; /* saved range */
++};
++
++static __inline__ unsigned esfq_hash_u32(struct esfq_sched_data *q,u32 h)
++{
++ int pert = q->perturbation;
++
++ if (pert)
++ h = (h<<pert) ^ (h>>(0x1F - pert));
++
++ h = ntohl(h) * 2654435761UL;
++ return h & (q->hash_divisor-1);
++}
++
++/* Hash input values directly into the "nearest" slot, taking into account the
++ * range of input values seen. This is most useful when the hash table is at
++ * least as large as the range of possible values. */
++static __inline__ unsigned esfq_hash_direct(struct esfq_sched_data *q, u32 h)
++{
++ /* adjust minimum and maximum */
++ if (h < q->dyn_min || h > q->dyn_max) {
++ q->dyn_min = h < q->dyn_min ? h : q->dyn_min;
++ q->dyn_max = h > q->dyn_max ? h : q->dyn_max;
++
++ /* find new range */
++ if ((q->dyn_range = q->dyn_max - q->dyn_min) >= q->hash_divisor)
++ printk(KERN_WARNING "ESFQ: (direct hash) Input range %u is larger than hash "
++ "table. See ESFQ README for details.\n", q->dyn_range);
++ }
++
++ /* hash input values into slot numbers */
++ if (q->dyn_min == q->dyn_max)
++ return 0; /* only one value seen; avoid division by 0 */
++ else
++ return (h - q->dyn_min) * (q->hash_divisor - 1) / q->dyn_range;
++}
++
++static __inline__ unsigned esfq_fold_hash_classic(struct esfq_sched_data *q, u32 h, u32 h1)
++{
++ int pert = q->perturbation;
++
++ /* Have we any rotation primitives? If not, WHY? */
++ h ^= (h1<<pert) ^ (h1>>(0x1F - pert));
++ h ^= h>>10;
++ return h & (q->hash_divisor-1);
++}
++
++static unsigned esfq_hash(struct esfq_sched_data *q, struct sk_buff *skb)
++{
++ u32 h, h2;
++ u32 hs;
++ u32 nfm;
++
++ switch (skb->protocol) {
++ case __constant_htons(ETH_P_IP):
++ {
++ struct iphdr *iph = skb->nh.iph;
++ h = iph->daddr;
++ hs = iph->saddr;
++ nfm = skb->nfmark;
++ h2 = hs^iph->protocol;
++ if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) &&
++ (iph->protocol == IPPROTO_TCP ||
++ iph->protocol == IPPROTO_UDP ||
++ iph->protocol == IPPROTO_SCTP ||
++ iph->protocol == IPPROTO_DCCP ||
++ iph->protocol == IPPROTO_ESP))
++ h2 ^= *(((u32*)iph) + iph->ihl);
++ break;
++ }
++ case __constant_htons(ETH_P_IPV6):
++ {
++ struct ipv6hdr *iph = skb->nh.ipv6h;
++ h = iph->daddr.s6_addr32[3];
++ hs = iph->saddr.s6_addr32[3];
++ nfm = skb->nfmark;
++ h2 = hs^iph->nexthdr;
++ if (iph->nexthdr == IPPROTO_TCP ||
++ iph->nexthdr == IPPROTO_UDP ||
++ iph->nexthdr == IPPROTO_SCTP ||
++ iph->nexthdr == IPPROTO_DCCP ||
++ iph->nexthdr == IPPROTO_ESP)
++ h2 ^= *(u32*)&iph[1];
++ break;
++ }
++ default:
++ h = (u32)(unsigned long)skb->dst;
++ hs = (u32)(unsigned long)skb->sk;
++ nfm = skb->nfmark;
++ h2 = hs^skb->protocol;
++ }
++ switch(q->hash_kind)
++ {
++ case TCA_SFQ_HASH_CLASSIC:
++ return esfq_fold_hash_classic(q, h, h2);
++ case TCA_SFQ_HASH_DST:
++ return esfq_hash_u32(q,h);
++ case TCA_SFQ_HASH_DSTDIR:
++ return esfq_hash_direct(q, ntohl(h));
++ case TCA_SFQ_HASH_SRC:
++ return esfq_hash_u32(q,hs);
++ case TCA_SFQ_HASH_SRCDIR:
++ return esfq_hash_direct(q, ntohl(hs));
++#ifdef CONFIG_NETFILTER
++ case TCA_SFQ_HASH_FWMARK:
++ return esfq_hash_u32(q,nfm);
++ case TCA_SFQ_HASH_FWMARKDIR:
++ return esfq_hash_direct(q,nfm);
++#endif
++ default:
++ if (net_ratelimit())
++ printk(KERN_WARNING "ESFQ: Unknown hash method. Falling back to classic.\n");
++ }
++ return esfq_fold_hash_classic(q, h, h2);
++}
++
++static inline void esfq_link(struct esfq_sched_data *q, esfq_index x)
++{
++ esfq_index p, n;
++ int d = q->qs[x].qlen + q->depth;
++
++ p = d;
++ n = q->dep[d].next;
++ q->dep[x].next = n;
++ q->dep[x].prev = p;
++ q->dep[p].next = q->dep[n].prev = x;
++}
++
++static inline void esfq_dec(struct esfq_sched_data *q, esfq_index x)
++{
++ esfq_index p, n;
++
++ n = q->dep[x].next;
++ p = q->dep[x].prev;
++ q->dep[p].next = n;
++ q->dep[n].prev = p;
++
++ if (n == p && q->max_depth == q->qs[x].qlen + 1)
++ q->max_depth--;
++
++ esfq_link(q, x);
++}
++
++static inline void esfq_inc(struct esfq_sched_data *q, esfq_index x)
++{
++ esfq_index p, n;
++ int d;
++
++ n = q->dep[x].next;
++ p = q->dep[x].prev;
++ q->dep[p].next = n;
++ q->dep[n].prev = p;
++ d = q->qs[x].qlen;
++ if (q->max_depth < d)
++ q->max_depth = d;
++
++ esfq_link(q, x);
++}
++
++static unsigned int esfq_drop(struct Qdisc *sch)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ esfq_index d = q->max_depth;
++ struct sk_buff *skb;
++ unsigned int len;
++
++ /* Queue is full! Find the longest slot and
++ drop a packet from it */
++
++ if (d > 1) {
++ esfq_index x = q->dep[d+q->depth].next;
++ skb = q->qs[x].prev;
++ len = skb->len;
++ __skb_unlink(skb, &q->qs[x]);
++ kfree_skb(skb);
++ esfq_dec(q, x);
++ sch->q.qlen--;
++ sch->qstats.drops++;
++ return len;
++ }
++
++ if (d == 1) {
++ /* It is difficult to believe, but ALL THE SLOTS HAVE LENGTH 1. */
++ d = q->next[q->tail];
++ q->next[q->tail] = q->next[d];
++ q->allot[q->next[d]] += q->quantum;
++ skb = q->qs[d].prev;
++ len = skb->len;
++ __skb_unlink(skb, &q->qs[d]);
++ kfree_skb(skb);
++ esfq_dec(q, d);
++ sch->q.qlen--;
++ q->ht[q->hash[d]] = q->depth;
++ sch->qstats.drops++;
++ return len;
++ }
++
++ return 0;
++}
++
++static int
++esfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ unsigned hash = esfq_hash(q, skb);
++ unsigned depth = q->depth;
++ esfq_index x;
++
++ x = q->ht[hash];
++ if (x == depth) {
++ q->ht[hash] = x = q->dep[depth].next;
++ q->hash[x] = hash;
++ }
++ __skb_queue_tail(&q->qs[x], skb);
++ esfq_inc(q, x);
++ if (q->qs[x].qlen == 1) { /* The flow is new */
++ if (q->tail == depth) { /* It is the first flow */
++ q->tail = x;
++ q->next[x] = x;
++ q->allot[x] = q->quantum;
++ } else {
++ q->next[x] = q->next[q->tail];
++ q->next[q->tail] = x;
++ q->tail = x;
++ }
++ }
++ if (++sch->q.qlen < q->limit-1) {
++ sch->bstats.bytes += skb->len;
++ sch->bstats.packets++;
++ return 0;
++ }
++
++ esfq_drop(sch);
++ return NET_XMIT_CN;
++}
++
++static int
++esfq_requeue(struct sk_buff *skb, struct Qdisc* sch)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ unsigned hash = esfq_hash(q, skb);
++ unsigned depth = q->depth;
++ esfq_index x;
++
++ x = q->ht[hash];
++ if (x == depth) {
++ q->ht[hash] = x = q->dep[depth].next;
++ q->hash[x] = hash;
++ }
++ __skb_queue_head(&q->qs[x], skb);
++ esfq_inc(q, x);
++ if (q->qs[x].qlen == 1) { /* The flow is new */
++ if (q->tail == depth) { /* It is the first flow */
++ q->tail = x;
++ q->next[x] = x;
++ q->allot[x] = q->quantum;
++ } else {
++ q->next[x] = q->next[q->tail];
++ q->next[q->tail] = x;
++ q->tail = x;
++ }
++ }
++ if (++sch->q.qlen < q->limit - 1) {
++ sch->qstats.requeues++;
++ return 0;
++ }
++
++ sch->qstats.drops++;
++ esfq_drop(sch);
++ return NET_XMIT_CN;
++}
++
++
++
++
++static struct sk_buff *
++esfq_dequeue(struct Qdisc* sch)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ struct sk_buff *skb;
++ unsigned depth = q->depth;
++ esfq_index a, old_a;
++
++ /* No active slots */
++ if (q->tail == depth)
++ return NULL;
++
++ a = old_a = q->next[q->tail];
++
++ /* Grab packet */
++ skb = __skb_dequeue(&q->qs[a]);
++ esfq_dec(q, a);
++ sch->q.qlen--;
++
++ /* Is the slot empty? */
++ if (q->qs[a].qlen == 0) {
++ q->ht[q->hash[a]] = depth;
++ a = q->next[a];
++ if (a == old_a) {
++ q->tail = depth;
++ return skb;
++ }
++ q->next[q->tail] = a;
++ q->allot[a] += q->quantum;
++ } else if ((q->allot[a] -= skb->len) <= 0) {
++ q->tail = a;
++ a = q->next[a];
++ q->allot[a] += q->quantum;
++ }
++
++ return skb;
++}
++
++static void
++esfq_reset(struct Qdisc* sch)
++{
++ struct sk_buff *skb;
++
++ while ((skb = esfq_dequeue(sch)) != NULL)
++ kfree_skb(skb);
++}
++
++static void esfq_perturbation(unsigned long arg)
++{
++ struct Qdisc *sch = (struct Qdisc*)arg;
++ struct esfq_sched_data *q = qdisc_priv(sch);
++
++ q->perturbation = net_random()&0x1F;
++
++ if (q->perturb_period) {
++ q->perturb_timer.expires = jiffies + q->perturb_period;
++ add_timer(&q->perturb_timer);
++ }
++}
++
++static int esfq_change(struct Qdisc *sch, struct rtattr *opt)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ struct tc_esfq_qopt *ctl = RTA_DATA(opt);
++ int old_perturb = q->perturb_period;
++
++ if (opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
++ return -EINVAL;
++
++ sch_tree_lock(sch);
++ q->quantum = ctl->quantum ? : psched_mtu(sch->dev);
++ q->perturb_period = ctl->perturb_period*HZ;
++// q->hash_divisor = ctl->divisor;
++// q->tail = q->limit = q->depth = ctl->flows;
++
++ if (ctl->limit)
++ q->limit = min_t(u32, ctl->limit, q->depth);
++
++ if (ctl->hash_kind) {
++ q->hash_kind = ctl->hash_kind;
++ if (q->hash_kind != TCA_SFQ_HASH_CLASSIC)
++ q->perturb_period = 0;
++ }
++
++ // is sch_tree_lock enough to do this ?
++ while (sch->q.qlen >= q->limit-1)
++ esfq_drop(sch);
++
++ if (old_perturb)
++ del_timer(&q->perturb_timer);
++ if (q->perturb_period) {
++ q->perturb_timer.expires = jiffies + q->perturb_period;
++ add_timer(&q->perturb_timer);
++ } else {
++ q->perturbation = 0;
++ }
++ sch_tree_unlock(sch);
++ return 0;
++}
++
++static int esfq_init(struct Qdisc *sch, struct rtattr *opt)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ struct tc_esfq_qopt *ctl;
++ esfq_index p = ~0UL/2;
++ int i;
++
++ if (opt && opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
++ return -EINVAL;
++
++ init_timer(&q->perturb_timer);
++ q->perturb_timer.data = (unsigned long)sch;
++ q->perturb_timer.function = esfq_perturbation;
++ q->perturbation = 0;
++ q->hash_kind = TCA_SFQ_HASH_CLASSIC;
++ q->max_depth = 0;
++ q->dyn_min = ~0U; /* maximum value for this type */
++ q->dyn_max = 0; /* dyn_min/dyn_max will be set properly upon first packet */
++ if (opt == NULL) {
++ q->quantum = psched_mtu(sch->dev);
++ q->perturb_period = 0;
++ q->hash_divisor = 1024;
++ q->tail = q->limit = q->depth = 128;
++
++ } else {
++ ctl = RTA_DATA(opt);
++ q->quantum = ctl->quantum ? : psched_mtu(sch->dev);
++ q->perturb_period = ctl->perturb_period*HZ;
++ q->hash_divisor = ctl->divisor ? : 1024;
++ q->tail = q->limit = q->depth = ctl->flows ? : 128;
++
++ if ( q->depth > p - 1 )
++ return -EINVAL;
++
++ if (ctl->limit)
++ q->limit = min_t(u32, ctl->limit, q->depth);
++
++ if (ctl->hash_kind) {
++ q->hash_kind = ctl->hash_kind;
++ }
++
++ if (q->perturb_period) {
++ q->perturb_timer.expires = jiffies + q->perturb_period;
++ add_timer(&q->perturb_timer);
++ }
++ }
++
++ q->ht = kmalloc(q->hash_divisor*sizeof(esfq_index), GFP_KERNEL);
++ if (!q->ht)
++ goto err_case;
++
++ q->dep = kmalloc((1+q->depth*2)*sizeof(struct esfq_head), GFP_KERNEL);
++ if (!q->dep)
++ goto err_case;
++ q->next = kmalloc(q->depth*sizeof(esfq_index), GFP_KERNEL);
++ if (!q->next)
++ goto err_case;
++
++ q->allot = kmalloc(q->depth*sizeof(short), GFP_KERNEL);
++ if (!q->allot)
++ goto err_case;
++ q->hash = kmalloc(q->depth*sizeof(unsigned short), GFP_KERNEL);
++ if (!q->hash)
++ goto err_case;
++ q->qs = kmalloc(q->depth*sizeof(struct sk_buff_head), GFP_KERNEL);
++ if (!q->qs)
++ goto err_case;
++
++ for (i=0; i< q->hash_divisor; i++)
++ q->ht[i] = q->depth;
++ for (i=0; i<q->depth; i++) {
++ skb_queue_head_init(&q->qs[i]);
++ q->dep[i+q->depth].next = i+q->depth;
++ q->dep[i+q->depth].prev = i+q->depth;
++ }
++
++ for (i=0; i<q->depth; i++)
++ esfq_link(q, i);
++ return 0;
++err_case:
++ del_timer(&q->perturb_timer);
++ if (q->ht)
++ kfree(q->ht);
++ if (q->dep)
++ kfree(q->dep);
++ if (q->next)
++ kfree(q->next);
++ if (q->allot)
++ kfree(q->allot);
++ if (q->hash)
++ kfree(q->hash);
++ if (q->qs)
++ kfree(q->qs);
++ return -ENOBUFS;
++}
++
++static void esfq_destroy(struct Qdisc *sch)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ del_timer(&q->perturb_timer);
++ if(q->ht)
++ kfree(q->ht);
++ if(q->dep)
++ kfree(q->dep);
++ if(q->next)
++ kfree(q->next);
++ if(q->allot)
++ kfree(q->allot);
++ if(q->hash)
++ kfree(q->hash);
++ if(q->qs)
++ kfree(q->qs);
++}
++
++static int esfq_dump(struct Qdisc *sch, struct sk_buff *skb)
++{
++ struct esfq_sched_data *q = qdisc_priv(sch);
++ unsigned char *b = skb->tail;
++ struct tc_esfq_qopt opt;
++
++ opt.quantum = q->quantum;
++ opt.perturb_period = q->perturb_period/HZ;
++
++ opt.limit = q->limit;
++ opt.divisor = q->hash_divisor;
++ opt.flows = q->depth;
++ opt.hash_kind = q->hash_kind;
++
++ RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
++
++ return skb->len;
++
++rtattr_failure:
++ skb_trim(skb, b - skb->data);
++ return -1;
++}
++
++static struct Qdisc_ops esfq_qdisc_ops =
++{
++ .next = NULL,
++ .cl_ops = NULL,
++ .id = "esfq",
++ .priv_size = sizeof(struct esfq_sched_data),
++ .enqueue = esfq_enqueue,
++ .dequeue = esfq_dequeue,
++ .requeue = esfq_requeue,
++ .drop = esfq_drop,
++ .init = esfq_init,
++ .reset = esfq_reset,
++ .destroy = esfq_destroy,
++ .change = NULL, /* esfq_change - needs more work */
++ .dump = esfq_dump,
++ .owner = THIS_MODULE,
++};
++
++static int __init esfq_module_init(void)
++{
++ return register_qdisc(&esfq_qdisc_ops);
++}
++static void __exit esfq_module_exit(void)
++{
++ unregister_qdisc(&esfq_qdisc_ops);
++}
++module_init(esfq_module_init)
++module_exit(esfq_module_exit)
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux-magicbox-2.6.19.2/201-multiple_default_gateways.patch b/packages/linux/linux-magicbox-2.6.19.2/201-multiple_default_gateways.patch
new file mode 100644
index 0000000000..4a3e327288
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/201-multiple_default_gateways.patch
@@ -0,0 +1,1243 @@
+diff -urN linux-2.6.19.old/include/linux/netfilter_ipv4/ip_nat.h linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_nat.h
+--- linux-2.6.19.old/include/linux/netfilter_ipv4/ip_nat.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/linux/netfilter_ipv4/ip_nat.h 2006-12-14 03:13:53.000000000 +0100
+@@ -63,6 +63,13 @@
+
+ struct ip_conntrack;
+
++/* Call input routing for SNAT-ed traffic */
++extern unsigned int ip_nat_route_input(unsigned int hooknum,
++ struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ int (*okfn)(struct sk_buff *));
++
+ /* Set up the info structure to map into this range. */
+ extern unsigned int ip_nat_setup_info(struct ip_conntrack *conntrack,
+ const struct ip_nat_range *range,
+diff -urN linux-2.6.19.old/include/linux/rtnetlink.h linux-2.6.19.dev/include/linux/rtnetlink.h
+--- linux-2.6.19.old/include/linux/rtnetlink.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/linux/rtnetlink.h 2006-12-14 03:13:53.000000000 +0100
+@@ -293,6 +293,8 @@
+ #define RTNH_F_DEAD 1 /* Nexthop is dead (used by multipath) */
+ #define RTNH_F_PERVASIVE 2 /* Do recursive gateway lookup */
+ #define RTNH_F_ONLINK 4 /* Gateway is forced on link */
++#define RTNH_F_SUSPECT 8 /* We don't know the real state */
++#define RTNH_F_BADSTATE (RTNH_F_DEAD | RTNH_F_SUSPECT)
+
+ /* Macros to handle hexthops */
+
+diff -urN linux-2.6.19.old/include/net/flow.h linux-2.6.19.dev/include/net/flow.h
+--- linux-2.6.19.old/include/net/flow.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/net/flow.h 2006-12-14 03:13:53.000000000 +0100
+@@ -19,6 +19,8 @@
+ __be32 daddr;
+ __be32 saddr;
+ __u32 fwmark;
++ __u32 lsrc;
++ __u32 gw;
+ __u8 tos;
+ __u8 scope;
+ } ip4_u;
+@@ -48,6 +50,8 @@
+ #define fl4_dst nl_u.ip4_u.daddr
+ #define fl4_src nl_u.ip4_u.saddr
+ #define fl4_fwmark nl_u.ip4_u.fwmark
++#define fl4_lsrc nl_u.ip4_u.lsrc
++#define fl4_gw nl_u.ip4_u.gw
+ #define fl4_tos nl_u.ip4_u.tos
+ #define fl4_scope nl_u.ip4_u.scope
+
+diff -urN linux-2.6.19.old/include/net/ip_fib.h linux-2.6.19.dev/include/net/ip_fib.h
+--- linux-2.6.19.old/include/net/ip_fib.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/net/ip_fib.h 2006-12-14 03:13:53.000000000 +0100
+@@ -196,7 +196,8 @@
+
+ static inline void fib_select_default(const struct flowi *flp, struct fib_result *res)
+ {
+- if (FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK)
++ if ((FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) ||
++ FIB_RES_NH(*res).nh_scope == RT_SCOPE_HOST)
+ ip_fib_main_table->tb_select_default(ip_fib_main_table, flp, res);
+ }
+
+@@ -212,6 +213,8 @@
+
+ #endif /* CONFIG_IP_MULTIPLE_TABLES */
+
++extern int fib_result_table(struct fib_result *res);
++
+ /* Exported by fib_frontend.c */
+ extern struct nla_policy rtm_ipv4_policy[];
+ extern void ip_fib_init(void);
+@@ -284,4 +287,6 @@
+ extern void fib_proc_exit(void);
+ #endif
+
++extern rwlock_t fib_nhflags_lock;
++
+ #endif /* _NET_FIB_H */
+diff -urN linux-2.6.19.old/include/net/route.h linux-2.6.19.dev/include/net/route.h
+--- linux-2.6.19.old/include/net/route.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/net/route.h 2006-12-14 03:13:53.000000000 +0100
+@@ -117,6 +117,7 @@
+ extern int ip_route_output_key(struct rtable **, struct flowi *flp);
+ extern int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk, int flags);
+ extern int ip_route_input(struct sk_buff*, __be32 dst, __be32 src, u8 tos, struct net_device *devin);
++extern int ip_route_input_lookup(struct sk_buff*, u32 dst, u32 src, u8 tos, struct net_device *devin, u32 lsrc);
+ extern unsigned short ip_rt_frag_needed(struct iphdr *iph, unsigned short new_mtu);
+ extern void ip_rt_send_redirect(struct sk_buff *skb);
+
+diff -urN linux-2.6.19.old/net/ipv4/fib_frontend.c linux-2.6.19.dev/net/ipv4/fib_frontend.c
+--- linux-2.6.19.old/net/ipv4/fib_frontend.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/fib_frontend.c 2006-12-14 03:13:53.000000000 +0100
+@@ -58,6 +58,8 @@
+ #define FIB_TABLE_HASHSZ 1
+ static struct hlist_head fib_table_hash[FIB_TABLE_HASHSZ];
+
++#define FIB_RES_TABLE(r) (RT_TABLE_MAIN)
++
+ #else
+
+ #define FIB_TABLE_HASHSZ 256
+@@ -100,6 +102,9 @@
+ rcu_read_unlock();
+ return NULL;
+ }
++
++#define FIB_RES_TABLE(r) (fib_result_table(r))
++
+ #endif /* CONFIG_IP_MULTIPLE_TABLES */
+
+ static void fib_flush(void)
+@@ -190,6 +195,9 @@
+ .tos = tos } },
+ .iif = oif };
+ struct fib_result res;
++ int table;
++ unsigned char prefixlen;
++ unsigned char scope;
+ int no_addr, rpf;
+ int ret;
+
+@@ -211,31 +219,35 @@
+ goto e_inval_res;
+ *spec_dst = FIB_RES_PREFSRC(res);
+ fib_combine_itag(itag, &res);
+-#ifdef CONFIG_IP_ROUTE_MULTIPATH
+- if (FIB_RES_DEV(res) == dev || res.fi->fib_nhs > 1)
+-#else
+ if (FIB_RES_DEV(res) == dev)
+-#endif
+ {
+ ret = FIB_RES_NH(res).nh_scope >= RT_SCOPE_HOST;
+ fib_res_put(&res);
+ return ret;
+ }
++ table = FIB_RES_TABLE(&res);
++ prefixlen = res.prefixlen;
++ scope = res.scope;
+ fib_res_put(&res);
+ if (no_addr)
+ goto last_resort;
+- if (rpf)
+- goto e_inval;
+ fl.oif = dev->ifindex;
+
+ ret = 0;
+ if (fib_lookup(&fl, &res) == 0) {
+- if (res.type == RTN_UNICAST) {
++ if (res.type == RTN_UNICAST &&
++ ((table == FIB_RES_TABLE(&res) &&
++ res.prefixlen >= prefixlen && res.scope >= scope) ||
++ !rpf)) {
+ *spec_dst = FIB_RES_PREFSRC(res);
+ ret = FIB_RES_NH(res).nh_scope >= RT_SCOPE_HOST;
++ fib_res_put(&res);
++ return ret;
+ }
+ fib_res_put(&res);
+ }
++ if (rpf)
++ goto e_inval;
+ return ret;
+
+ last_resort:
+@@ -836,9 +848,7 @@
+ switch (event) {
+ case NETDEV_UP:
+ fib_add_ifaddr(ifa);
+-#ifdef CONFIG_IP_ROUTE_MULTIPATH
+ fib_sync_up(ifa->ifa_dev->dev);
+-#endif
+ rt_cache_flush(-1);
+ break;
+ case NETDEV_DOWN:
+@@ -874,9 +884,7 @@
+ for_ifa(in_dev) {
+ fib_add_ifaddr(ifa);
+ } endfor_ifa(in_dev);
+-#ifdef CONFIG_IP_ROUTE_MULTIPATH
+ fib_sync_up(dev);
+-#endif
+ rt_cache_flush(-1);
+ break;
+ case NETDEV_DOWN:
+diff -urN linux-2.6.19.old/net/ipv4/fib_hash.c linux-2.6.19.dev/net/ipv4/fib_hash.c
+--- linux-2.6.19.old/net/ipv4/fib_hash.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/fib_hash.c 2006-12-14 03:13:53.000000000 +0100
+@@ -275,30 +275,38 @@
+ return err;
+ }
+
+-static int fn_hash_last_dflt=-1;
+-
+ static void
+ fn_hash_select_default(struct fib_table *tb, const struct flowi *flp, struct fib_result *res)
+ {
+- int order, last_idx;
++ int order, last_idx, last_dflt, last_nhsel;
++ struct fib_alias *first_fa = NULL;
++ struct hlist_head *head;
+ struct hlist_node *node;
+ struct fib_node *f;
+ struct fib_info *fi = NULL;
+ struct fib_info *last_resort;
+ struct fn_hash *t = (struct fn_hash*)tb->tb_data;
+- struct fn_zone *fz = t->fn_zones[0];
++ struct fn_zone *fz = t->fn_zones[res->prefixlen];
++ u32 k;
+
+ if (fz == NULL)
+ return;
+
++ k = fz_key(flp->fl4_dst, fz);
++ last_dflt = -2;
++ last_nhsel = 0;
+ last_idx = -1;
+ last_resort = NULL;
+ order = -1;
+
+ read_lock(&fib_hash_lock);
+- hlist_for_each_entry(f, node, &fz->fz_hash[0], fn_hash) {
++ head = &fz->fz_hash[fn_hash(k, fz)];
++ hlist_for_each_entry(f, node, head, fn_hash) {
+ struct fib_alias *fa;
+
++ if (f->fn_key != k)
++ continue;
++
+ list_for_each_entry(fa, &f->fn_alias, fa_list) {
+ struct fib_info *next_fi = fa->fa_info;
+
+@@ -306,41 +314,52 @@
+ fa->fa_type != RTN_UNICAST)
+ continue;
+
++ if (fa->fa_tos &&
++ fa->fa_tos != flp->fl4_tos)
++ continue;
+ if (next_fi->fib_priority > res->fi->fib_priority)
+ break;
+- if (!next_fi->fib_nh[0].nh_gw ||
+- next_fi->fib_nh[0].nh_scope != RT_SCOPE_LINK)
+- continue;
+ fa->fa_state |= FA_S_ACCESSED;
+
+- if (fi == NULL) {
+- if (next_fi != res->fi)
+- break;
+- } else if (!fib_detect_death(fi, order, &last_resort,
+- &last_idx, &fn_hash_last_dflt)) {
++ if (!first_fa) {
++ last_dflt = fa->fa_last_dflt;
++ first_fa = fa;
++ }
++ if (fi && !fib_detect_death(fi, order, &last_resort,
++ &last_idx, &last_dflt, &last_nhsel, flp)) {
+ if (res->fi)
+ fib_info_put(res->fi);
+ res->fi = fi;
+ atomic_inc(&fi->fib_clntref);
+- fn_hash_last_dflt = order;
++ first_fa->fa_last_dflt = order;
+ goto out;
+ }
+ fi = next_fi;
+ order++;
+ }
++ break;
+ }
+
+ if (order <= 0 || fi == NULL) {
+- fn_hash_last_dflt = -1;
++ if (fi && fi->fib_nhs > 1 &&
++ fib_detect_death(fi, order, &last_resort, &last_idx,
++ &last_dflt, &last_nhsel, flp) &&
++ last_resort == fi) {
++ read_lock_bh(&fib_nhflags_lock);
++ fi->fib_nh[last_nhsel].nh_flags &= ~RTNH_F_SUSPECT;
++ read_unlock_bh(&fib_nhflags_lock);
++ }
++ if (first_fa) first_fa->fa_last_dflt = -1;
+ goto out;
+ }
+
+- if (!fib_detect_death(fi, order, &last_resort, &last_idx, &fn_hash_last_dflt)) {
++ if (!fib_detect_death(fi, order, &last_resort, &last_idx,
++ &last_dflt, &last_nhsel, flp)) {
+ if (res->fi)
+ fib_info_put(res->fi);
+ res->fi = fi;
+ atomic_inc(&fi->fib_clntref);
+- fn_hash_last_dflt = order;
++ first_fa->fa_last_dflt = order;
+ goto out;
+ }
+
+@@ -350,8 +369,11 @@
+ res->fi = last_resort;
+ if (last_resort)
+ atomic_inc(&last_resort->fib_clntref);
++ read_lock_bh(&fib_nhflags_lock);
++ last_resort->fib_nh[last_nhsel].nh_flags &= ~RTNH_F_SUSPECT;
++ read_unlock_bh(&fib_nhflags_lock);
++ first_fa->fa_last_dflt = last_idx;
+ }
+- fn_hash_last_dflt = last_idx;
+ out:
+ read_unlock(&fib_hash_lock);
+ }
+@@ -447,6 +469,7 @@
+ write_lock_bh(&fib_hash_lock);
+ fi_drop = fa->fa_info;
+ fa->fa_info = fi;
++ fa->fa_last_dflt = -1;
+ fa->fa_type = cfg->fc_type;
+ fa->fa_scope = cfg->fc_scope;
+ state = fa->fa_state;
+@@ -506,6 +529,7 @@
+ new_fa->fa_type = cfg->fc_type;
+ new_fa->fa_scope = cfg->fc_scope;
+ new_fa->fa_state = 0;
++ new_fa->fa_last_dflt = -1;
+
+ /*
+ * Insert new entry to the list.
+diff -urN linux-2.6.19.old/net/ipv4/fib_lookup.h linux-2.6.19.dev/net/ipv4/fib_lookup.h
+--- linux-2.6.19.old/net/ipv4/fib_lookup.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/fib_lookup.h 2006-12-14 03:13:53.000000000 +0100
+@@ -9,6 +9,7 @@
+ struct list_head fa_list;
+ struct rcu_head rcu;
+ struct fib_info *fa_info;
++ int fa_last_dflt;
+ u8 fa_tos;
+ u8 fa_type;
+ u8 fa_scope;
+@@ -35,6 +36,7 @@
+ u8 tos, u32 prio);
+ extern int fib_detect_death(struct fib_info *fi, int order,
+ struct fib_info **last_resort,
+- int *last_idx, int *dflt);
++ int *last_idx, int *dflt, int *last_nhsel,
++ const struct flowi *flp);
+
+ #endif /* _FIB_LOOKUP_H */
+diff -urN linux-2.6.19.old/net/ipv4/fib_rules.c linux-2.6.19.dev/net/ipv4/fib_rules.c
+--- linux-2.6.19.old/net/ipv4/fib_rules.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/fib_rules.c 2006-12-14 03:13:53.000000000 +0100
+@@ -89,6 +89,11 @@
+ }
+ #endif
+
++int fib_result_table(struct fib_result *res)
++{
++ return res->r->table;
++}
++
+ int fib_lookup(struct flowi *flp, struct fib_result *res)
+ {
+ struct fib_lookup_arg arg = {
+@@ -140,7 +145,8 @@
+ void fib_select_default(const struct flowi *flp, struct fib_result *res)
+ {
+ if (res->r && res->r->action == FR_ACT_TO_TBL &&
+- FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) {
++ ((FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK) ||
++ FIB_RES_NH(*res).nh_scope == RT_SCOPE_HOST)) {
+ struct fib_table *tb;
+ if ((tb = fib_get_table(res->r->table)) != NULL)
+ tb->tb_select_default(tb, flp, res);
+diff -urN linux-2.6.19.old/net/ipv4/fib_semantics.c linux-2.6.19.dev/net/ipv4/fib_semantics.c
+--- linux-2.6.19.old/net/ipv4/fib_semantics.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/fib_semantics.c 2006-12-14 03:13:53.000000000 +0100
+@@ -55,6 +55,7 @@
+ static struct hlist_head *fib_info_laddrhash;
+ static unsigned int fib_hash_size;
+ static unsigned int fib_info_cnt;
++rwlock_t fib_nhflags_lock = RW_LOCK_UNLOCKED;
+
+ #define DEVINDEX_HASHBITS 8
+ #define DEVINDEX_HASHSIZE (1U << DEVINDEX_HASHBITS)
+@@ -190,7 +191,7 @@
+ #ifdef CONFIG_NET_CLS_ROUTE
+ nh->nh_tclassid != onh->nh_tclassid ||
+ #endif
+- ((nh->nh_flags^onh->nh_flags)&~RTNH_F_DEAD))
++ ((nh->nh_flags^onh->nh_flags)&~RTNH_F_BADSTATE))
+ return -1;
+ onh++;
+ } endfor_nexthops(fi);
+@@ -227,7 +228,7 @@
+ nfi->fib_priority == fi->fib_priority &&
+ memcmp(nfi->fib_metrics, fi->fib_metrics,
+ sizeof(fi->fib_metrics)) == 0 &&
+- ((nfi->fib_flags^fi->fib_flags)&~RTNH_F_DEAD) == 0 &&
++ ((nfi->fib_flags^fi->fib_flags)&~RTNH_F_BADSTATE) == 0 &&
+ (nfi->fib_nhs == 0 || nh_comp(fi, nfi) == 0))
+ return fi;
+ }
+@@ -319,26 +320,70 @@
+ }
+
+ int fib_detect_death(struct fib_info *fi, int order,
+- struct fib_info **last_resort, int *last_idx, int *dflt)
++ struct fib_info **last_resort, int *last_idx, int *dflt,
++ int *last_nhsel, const struct flowi *flp)
+ {
+ struct neighbour *n;
+- int state = NUD_NONE;
++ int nhsel;
++ int state;
++ struct fib_nh * nh;
++ u32 dst;
++ int flag, dead = 1;
++
++ /* change_nexthops(fi) { */
++ for (nhsel = 0, nh = fi->fib_nh; nhsel < fi->fib_nhs; nh++, nhsel++) {
++ if (flp->oif && flp->oif != nh->nh_oif)
++ continue;
++ if (flp->fl4_gw && flp->fl4_gw != nh->nh_gw && nh->nh_gw &&
++ nh->nh_scope == RT_SCOPE_LINK)
++ continue;
++ if (nh->nh_flags & RTNH_F_DEAD)
++ continue;
+
+- n = neigh_lookup(&arp_tbl, &fi->fib_nh[0].nh_gw, fi->fib_dev);
+- if (n) {
+- state = n->nud_state;
+- neigh_release(n);
+- }
+- if (state==NUD_REACHABLE)
+- return 0;
+- if ((state&NUD_VALID) && order != *dflt)
+- return 0;
+- if ((state&NUD_VALID) ||
+- (*last_idx<0 && order > *dflt)) {
+- *last_resort = fi;
+- *last_idx = order;
++ flag = 0;
++ if (nh->nh_dev->flags & IFF_NOARP) {
++ dead = 0;
++ goto setfl;
++ }
++
++ dst = nh->nh_gw;
++ if (!nh->nh_gw || nh->nh_scope != RT_SCOPE_LINK)
++ dst = flp->fl4_dst;
++
++ state = NUD_NONE;
++ n = neigh_lookup(&arp_tbl, &dst, nh->nh_dev);
++ if (n) {
++ state = n->nud_state;
++ neigh_release(n);
++ }
++ if (state==NUD_REACHABLE ||
++ ((state&NUD_VALID) && order != *dflt)) {
++ dead = 0;
++ goto setfl;
++ }
++ if (!(state&NUD_VALID))
++ flag = 1;
++ if (!dead)
++ goto setfl;
++ if ((state&NUD_VALID) ||
++ (*last_idx<0 && order >= *dflt)) {
++ *last_resort = fi;
++ *last_idx = order;
++ *last_nhsel = nhsel;
++ }
++
++ setfl:
++
++ read_lock_bh(&fib_nhflags_lock);
++ if (flag)
++ nh->nh_flags |= RTNH_F_SUSPECT;
++ else
++ nh->nh_flags &= ~RTNH_F_SUSPECT;
++ read_unlock_bh(&fib_nhflags_lock);
+ }
+- return 1;
++ /* } endfor_nexthops(fi) */
++
++ return dead;
+ }
+
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+@@ -508,8 +553,11 @@
+ return -EINVAL;
+ if ((dev = __dev_get_by_index(nh->nh_oif)) == NULL)
+ return -ENODEV;
+- if (!(dev->flags&IFF_UP))
+- return -ENETDOWN;
++ if (!(dev->flags&IFF_UP)) {
++ if (fi->fib_protocol != RTPROT_STATIC)
++ return -ENETDOWN;
++ nh->nh_flags |= RTNH_F_DEAD;
++ }
+ nh->nh_dev = dev;
+ dev_hold(dev);
+ nh->nh_scope = RT_SCOPE_LINK;
+@@ -529,24 +577,48 @@
+ /* It is not necessary, but requires a bit of thinking */
+ if (fl.fl4_scope < RT_SCOPE_LINK)
+ fl.fl4_scope = RT_SCOPE_LINK;
+- if ((err = fib_lookup(&fl, &res)) != 0)
+- return err;
++ err = fib_lookup(&fl, &res);
+ }
+- err = -EINVAL;
+- if (res.type != RTN_UNICAST && res.type != RTN_LOCAL)
+- goto out;
+- nh->nh_scope = res.scope;
+- nh->nh_oif = FIB_RES_OIF(res);
+- if ((nh->nh_dev = FIB_RES_DEV(res)) == NULL)
+- goto out;
+- dev_hold(nh->nh_dev);
+- err = -ENETDOWN;
+- if (!(nh->nh_dev->flags & IFF_UP))
+- goto out;
+- err = 0;
++ if (err) {
++ struct in_device *in_dev;
++
++ if (err != -ENETUNREACH ||
++ fi->fib_protocol != RTPROT_STATIC)
++ return err;
++
++ in_dev = inetdev_by_index(nh->nh_oif);
++ if (in_dev == NULL ||
++ in_dev->dev->flags & IFF_UP) {
++ if (in_dev)
++ in_dev_put(in_dev);
++ return err;
++ }
++ nh->nh_flags |= RTNH_F_DEAD;
++ nh->nh_scope = RT_SCOPE_LINK;
++ nh->nh_dev = in_dev->dev;
++ dev_hold(nh->nh_dev);
++ in_dev_put(in_dev);
++ } else {
++ err = -EINVAL;
++ if (res.type != RTN_UNICAST && res.type != RTN_LOCAL)
++ goto out;
++ nh->nh_scope = res.scope;
++ nh->nh_oif = FIB_RES_OIF(res);
++ if ((nh->nh_dev = FIB_RES_DEV(res)) == NULL)
++ goto out;
++ dev_hold(nh->nh_dev);
++ if (!(nh->nh_dev->flags & IFF_UP)) {
++ if (fi->fib_protocol != RTPROT_STATIC) {
++ err = -ENETDOWN;
++ goto out;
++ }
++ nh->nh_flags |= RTNH_F_DEAD;
++ }
++ err = 0;
+ out:
+- fib_res_put(&res);
+- return err;
++ fib_res_put(&res);
++ return err;
++ }
+ } else {
+ struct in_device *in_dev;
+
+@@ -557,8 +629,11 @@
+ if (in_dev == NULL)
+ return -ENODEV;
+ if (!(in_dev->dev->flags&IFF_UP)) {
+- in_dev_put(in_dev);
+- return -ENETDOWN;
++ if (fi->fib_protocol != RTPROT_STATIC) {
++ in_dev_put(in_dev);
++ return -ENETDOWN;
++ }
++ nh->nh_flags |= RTNH_F_DEAD;
+ }
+ nh->nh_dev = in_dev->dev;
+ dev_hold(nh->nh_dev);
+@@ -881,8 +956,12 @@
+ for_nexthops(fi) {
+ if (nh->nh_flags&RTNH_F_DEAD)
+ continue;
+- if (!flp->oif || flp->oif == nh->nh_oif)
+- break;
++ if (flp->oif && flp->oif != nh->nh_oif)
++ continue;
++ if (flp->fl4_gw && flp->fl4_gw != nh->nh_gw &&
++ nh->nh_gw && nh->nh_scope == RT_SCOPE_LINK)
++ continue;
++ break;
+ }
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+ if (nhsel < fi->fib_nhs) {
+@@ -1056,18 +1135,29 @@
+ prev_fi = fi;
+ dead = 0;
+ change_nexthops(fi) {
+- if (nh->nh_flags&RTNH_F_DEAD)
+- dead++;
+- else if (nh->nh_dev == dev &&
+- nh->nh_scope != scope) {
+- nh->nh_flags |= RTNH_F_DEAD;
++ if (nh->nh_flags&RTNH_F_DEAD) {
++ if (fi->fib_protocol!=RTPROT_STATIC ||
++ nh->nh_dev == NULL ||
++ __in_dev_get_rtnl(nh->nh_dev) == NULL ||
++ nh->nh_dev->flags&IFF_UP)
++ dead++;
++ } else if (nh->nh_dev == dev &&
++ nh->nh_scope != scope) {
++ write_lock_bh(&fib_nhflags_lock);
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+- spin_lock_bh(&fib_multipath_lock);
++ spin_lock(&fib_multipath_lock);
++ nh->nh_flags |= RTNH_F_DEAD;
+ fi->fib_power -= nh->nh_power;
+ nh->nh_power = 0;
+- spin_unlock_bh(&fib_multipath_lock);
++ spin_unlock(&fib_multipath_lock);
++#else
++ nh->nh_flags |= RTNH_F_DEAD;
+ #endif
+- dead++;
++ write_unlock_bh(&fib_nhflags_lock);
++ if (fi->fib_protocol!=RTPROT_STATIC ||
++ force ||
++ __in_dev_get_rtnl(dev) == NULL)
++ dead++;
+ }
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+ if (force > 1 && nh->nh_dev == dev) {
+@@ -1086,11 +1176,8 @@
+ return ret;
+ }
+
+-#ifdef CONFIG_IP_ROUTE_MULTIPATH
+-
+ /*
+- Dead device goes up. We wake up dead nexthops.
+- It takes sense only on multipath routes.
++ Dead device goes up or new address is added. We wake up dead nexthops.
+ */
+
+ int fib_sync_up(struct net_device *dev)
+@@ -1100,8 +1187,10 @@
+ struct hlist_head *head;
+ struct hlist_node *node;
+ struct fib_nh *nh;
+- int ret;
++ struct fib_result res;
++ int ret, rep;
+
++repeat:
+ if (!(dev->flags&IFF_UP))
+ return 0;
+
+@@ -1109,6 +1198,7 @@
+ hash = fib_devindex_hashfn(dev->ifindex);
+ head = &fib_info_devhash[hash];
+ ret = 0;
++ rep = 0;
+
+ hlist_for_each_entry(nh, node, head, nh_hash) {
+ struct fib_info *fi = nh->nh_parent;
+@@ -1121,19 +1211,37 @@
+ prev_fi = fi;
+ alive = 0;
+ change_nexthops(fi) {
+- if (!(nh->nh_flags&RTNH_F_DEAD)) {
+- alive++;
++ if (!(nh->nh_flags&RTNH_F_DEAD))
+ continue;
+- }
+ if (nh->nh_dev == NULL || !(nh->nh_dev->flags&IFF_UP))
+ continue;
+ if (nh->nh_dev != dev || !__in_dev_get_rtnl(dev))
+ continue;
++ if (nh->nh_gw && fi->fib_protocol == RTPROT_STATIC) {
++ struct flowi fl = {
++ .nl_u = { .ip4_u =
++ { .daddr = nh->nh_gw,
++ .scope = nh->nh_scope } },
++ .oif = nh->nh_oif,
++ };
++ if (fib_lookup(&fl, &res) != 0)
++ continue;
++ if (res.type != RTN_UNICAST &&
++ res.type != RTN_LOCAL) {
++ fib_res_put(&res);
++ continue;
++ }
++ nh->nh_scope = res.scope;
++ fib_res_put(&res);
++ rep = 1;
++ }
+ alive++;
++#ifdef CONFIG_IP_ROUTE_MULTIPATH
+ spin_lock_bh(&fib_multipath_lock);
+ nh->nh_power = 0;
+ nh->nh_flags &= ~RTNH_F_DEAD;
+ spin_unlock_bh(&fib_multipath_lock);
++#endif
+ } endfor_nexthops(fi)
+
+ if (alive > 0) {
+@@ -1141,10 +1249,14 @@
+ ret++;
+ }
+ }
++ if (rep)
++ goto repeat;
+
+ return ret;
+ }
+
++#ifdef CONFIG_IP_ROUTE_MULTIPATH
++
+ /*
+ The algorithm is suboptimal, but it provides really
+ fair weighted route distribution.
+@@ -1153,24 +1265,45 @@
+ void fib_select_multipath(const struct flowi *flp, struct fib_result *res)
+ {
+ struct fib_info *fi = res->fi;
+- int w;
++ int w, alive;
+
+ spin_lock_bh(&fib_multipath_lock);
++ if (flp->oif) {
++ int sel = -1;
++ w = -1;
++ change_nexthops(fi) {
++ if (flp->oif != nh->nh_oif)
++ continue;
++ if (flp->fl4_gw && flp->fl4_gw != nh->nh_gw &&
++ nh->nh_gw && nh->nh_scope == RT_SCOPE_LINK)
++ continue;
++ if (!(nh->nh_flags&RTNH_F_BADSTATE)) {
++ if (nh->nh_power > w) {
++ w = nh->nh_power;
++ sel = nhsel;
++ }
++ }
++ } endfor_nexthops(fi);
++ if (sel >= 0) {
++ spin_unlock_bh(&fib_multipath_lock);
++ res->nh_sel = sel;
++ return;
++ }
++ goto last_resort;
++ }
++
++repeat:
+ if (fi->fib_power <= 0) {
+ int power = 0;
+ change_nexthops(fi) {
+- if (!(nh->nh_flags&RTNH_F_DEAD)) {
++ if (!(nh->nh_flags&RTNH_F_BADSTATE)) {
+ power += nh->nh_weight;
+ nh->nh_power = nh->nh_weight;
+ }
+ } endfor_nexthops(fi);
+ fi->fib_power = power;
+- if (power <= 0) {
+- spin_unlock_bh(&fib_multipath_lock);
+- /* Race condition: route has just become dead. */
+- res->nh_sel = 0;
+- return;
+- }
++ if (power <= 0)
++ goto last_resort;
+ }
+
+
+@@ -1180,20 +1313,40 @@
+
+ w = jiffies % fi->fib_power;
+
++ alive = 0;
+ change_nexthops(fi) {
+- if (!(nh->nh_flags&RTNH_F_DEAD) && nh->nh_power) {
++ if (!(nh->nh_flags&RTNH_F_BADSTATE) && nh->nh_power) {
+ if ((w -= nh->nh_power) <= 0) {
+ nh->nh_power--;
+ fi->fib_power--;
+- res->nh_sel = nhsel;
+ spin_unlock_bh(&fib_multipath_lock);
++ res->nh_sel = nhsel;
+ return;
+ }
++ alive = 1;
++ }
++ } endfor_nexthops(fi);
++ if (alive) {
++ fi->fib_power = 0;
++ goto repeat;
++ }
++
++last_resort:
++
++ for_nexthops(fi) {
++ if (!(nh->nh_flags&RTNH_F_DEAD)) {
++ if (flp->oif && flp->oif != nh->nh_oif)
++ continue;
++ if (flp->fl4_gw && flp->fl4_gw != nh->nh_gw &&
++ nh->nh_gw && nh->nh_scope == RT_SCOPE_LINK)
++ continue;
++ spin_unlock_bh(&fib_multipath_lock);
++ res->nh_sel = nhsel;
++ return;
+ }
+ } endfor_nexthops(fi);
+
+ /* Race condition: route has just become dead. */
+- res->nh_sel = 0;
+ spin_unlock_bh(&fib_multipath_lock);
+ }
+ #endif
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_nat_core.c linux-2.6.19.dev/net/ipv4/netfilter/ip_nat_core.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_nat_core.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_nat_core.c 2006-12-14 03:13:53.000000000 +0100
+@@ -573,6 +573,53 @@
+ EXPORT_SYMBOL_GPL(ip_nat_port_range_to_nfattr);
+ #endif
+
++unsigned int
++ip_nat_route_input(unsigned int hooknum,
++ struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ int (*okfn)(struct sk_buff *))
++{
++ struct sk_buff *skb = *pskb;
++ struct iphdr *iph;
++ struct ip_conntrack *conn;
++ enum ip_conntrack_info ctinfo;
++ enum ip_conntrack_dir dir;
++ unsigned long statusbit;
++ u32 saddr;
++
++ if (!(conn = ip_conntrack_get(skb, &ctinfo)))
++ return NF_ACCEPT;
++
++ if (!(conn->status & IPS_NAT_DONE_MASK))
++ return NF_ACCEPT;
++ dir = CTINFO2DIR(ctinfo);
++ statusbit = IPS_SRC_NAT;
++ if (dir == IP_CT_DIR_REPLY)
++ statusbit ^= IPS_NAT_MASK;
++ if (!(conn->status & statusbit))
++ return NF_ACCEPT;
++
++ if (skb->dst)
++ return NF_ACCEPT;
++
++ if (skb->len < sizeof(struct iphdr))
++ return NF_ACCEPT;
++
++ /* use daddr in other direction as masquerade address (lsrc) */
++ iph = skb->nh.iph;
++ saddr = conn->tuplehash[!dir].tuple.dst.ip;
++ if (saddr == iph->saddr)
++ return NF_ACCEPT;
++
++ if (ip_route_input_lookup(skb, iph->daddr, iph->saddr, iph->tos,
++ skb->dev, saddr))
++ return NF_DROP;
++
++ return NF_ACCEPT;
++}
++EXPORT_SYMBOL_GPL(ip_nat_route_input);
++
+ static int __init ip_nat_init(void)
+ {
+ size_t i;
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ip_nat_standalone.c linux-2.6.19.dev/net/ipv4/netfilter/ip_nat_standalone.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ip_nat_standalone.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ip_nat_standalone.c 2006-12-14 03:13:53.000000000 +0100
+@@ -325,6 +325,14 @@
+ .hooknum = NF_IP_LOCAL_OUT,
+ .priority = NF_IP_PRI_NAT_DST,
+ },
++ /* Before routing, route before mangling */
++ {
++ .hook = ip_nat_route_input,
++ .owner = THIS_MODULE,
++ .pf = PF_INET,
++ .hooknum = NF_IP_PRE_ROUTING,
++ .priority = NF_IP_PRI_LAST-1,
++ },
+ /* After packet filtering, change source */
+ {
+ .hook = ip_nat_fn,
+diff -urN linux-2.6.19.old/net/ipv4/netfilter/ipt_MASQUERADE.c linux-2.6.19.dev/net/ipv4/netfilter/ipt_MASQUERADE.c
+--- linux-2.6.19.old/net/ipv4/netfilter/ipt_MASQUERADE.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/netfilter/ipt_MASQUERADE.c 2006-12-14 03:13:53.000000000 +0100
+@@ -85,13 +85,31 @@
+ return NF_ACCEPT;
+
+ mr = targinfo;
+- rt = (struct rtable *)(*pskb)->dst;
+- newsrc = inet_select_addr(out, rt->rt_gateway, RT_SCOPE_UNIVERSE);
+- if (!newsrc) {
+- printk("MASQUERADE: %s ate my IP address\n", out->name);
+- return NF_DROP;
++
++ {
++ struct flowi fl = { .nl_u = { .ip4_u =
++ { .daddr = (*pskb)->nh.iph->daddr,
++ .tos = (RT_TOS((*pskb)->nh.iph->tos) |
++ RTO_CONN),
++ .gw = ((struct rtable *) (*pskb)->dst)->rt_gateway,
++#ifdef CONFIG_IP_ROUTE_FWMARK
++ .fwmark = (*pskb)->nfmark
++#endif
++ } },
++ .oif = out->ifindex };
++ if (ip_route_output_key(&rt, &fl) != 0) {
++ /* Funky routing can do this. */
++ if (net_ratelimit())
++ printk("MASQUERADE:"
++ " No route: Rusty's brain broke!\n");
++ return NF_DROP;
++ }
+ }
+
++ newsrc = rt->rt_src;
++ DEBUGP("newsrc = %u.%u.%u.%u\n", NIPQUAD(newsrc));
++ ip_rt_put(rt);
++
+ write_lock_bh(&masq_lock);
+ ct->nat.masq_index = out->ifindex;
+ write_unlock_bh(&masq_lock);
+diff -urN linux-2.6.19.old/net/ipv4/route.c linux-2.6.19.dev/net/ipv4/route.c
+--- linux-2.6.19.old/net/ipv4/route.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/net/ipv4/route.c 2006-12-14 03:13:53.000000000 +0100
+@@ -1211,6 +1211,7 @@
+
+ /* Gateway is different ... */
+ rt->rt_gateway = new_gw;
++ if (rt->fl.fl4_gw) rt->fl.fl4_gw = new_gw;
+
+ /* Redirect received -> path was valid */
+ dst_confirm(&rth->u.dst);
+@@ -1647,6 +1648,7 @@
+ rth->fl.fl4_fwmark= skb->nfmark;
+ #endif
+ rth->fl.fl4_src = saddr;
++ rth->fl.fl4_lsrc = 0;
+ rth->rt_src = saddr;
+ #ifdef CONFIG_NET_CLS_ROUTE
+ rth->u.dst.tclassid = itag;
+@@ -1657,6 +1659,7 @@
+ dev_hold(rth->u.dst.dev);
+ rth->idev = in_dev_get(rth->u.dst.dev);
+ rth->fl.oif = 0;
++ rth->fl.fl4_gw = 0;
+ rth->rt_gateway = daddr;
+ rth->rt_spec_dst= spec_dst;
+ rth->rt_type = RTN_MULTICAST;
+@@ -1721,7 +1724,7 @@
+ struct fib_result* res,
+ struct in_device *in_dev,
+ __be32 daddr, __be32 saddr, u32 tos,
+- struct rtable **result)
++ u32 lsrc, struct rtable **result)
+ {
+
+ struct rtable *rth;
+@@ -1755,6 +1758,7 @@
+ flags |= RTCF_DIRECTSRC;
+
+ if (out_dev == in_dev && err && !(flags & (RTCF_NAT | RTCF_MASQ)) &&
++ !lsrc &&
+ (IN_DEV_SHARED_MEDIA(out_dev) ||
+ inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res))))
+ flags |= RTCF_DOREDIRECT;
+@@ -1794,6 +1798,7 @@
+ #endif
+ rth->fl.fl4_src = saddr;
+ rth->rt_src = saddr;
++ rth->fl.fl4_lsrc = lsrc;
+ rth->rt_gateway = daddr;
+ rth->rt_iif =
+ rth->fl.iif = in_dev->dev->ifindex;
+@@ -1801,6 +1806,7 @@
+ dev_hold(rth->u.dst.dev);
+ rth->idev = in_dev_get(rth->u.dst.dev);
+ rth->fl.oif = 0;
++ rth->fl.fl4_gw = 0;
+ rth->rt_spec_dst= spec_dst;
+
+ rth->u.dst.input = ip_forward;
+@@ -1822,19 +1828,21 @@
+ struct fib_result* res,
+ const struct flowi *fl,
+ struct in_device *in_dev,
+- __be32 daddr, __be32 saddr, u32 tos)
++ __be32 daddr, __be32 saddr, u32 tos,
++ u32 lsrc)
+ {
+ struct rtable* rth = NULL;
+ int err;
+ unsigned hash;
+
++ fib_select_default(fl, res);
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+- if (res->fi && res->fi->fib_nhs > 1 && fl->oif == 0)
++ if (res->fi && res->fi->fib_nhs > 1)
+ fib_select_multipath(fl, res);
+ #endif
+
+ /* create a routing cache entry */
+- err = __mkroute_input(skb, res, in_dev, daddr, saddr, tos, &rth);
++ err = __mkroute_input(skb, res, in_dev, daddr, saddr, tos, lsrc, &rth);
+ if (err)
+ return err;
+
+@@ -1847,7 +1855,8 @@
+ struct fib_result* res,
+ const struct flowi *fl,
+ struct in_device *in_dev,
+- __be32 daddr, __be32 saddr, u32 tos)
++ __be32 daddr, __be32 saddr, u32 tos,
++ u32 lsrc)
+ {
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH_CACHED
+ struct rtable* rth = NULL, *rtres;
+@@ -1863,7 +1872,7 @@
+ /* distinguish between multipath and singlepath */
+ if (hopcount < 2)
+ return ip_mkroute_input_def(skb, res, fl, in_dev, daddr,
+- saddr, tos);
++ saddr, tos, 0);
+
+ /* add all alternatives to the routing cache */
+ for (hop = 0; hop < hopcount; hop++) {
+@@ -1875,7 +1884,7 @@
+
+ /* create a routing cache entry */
+ err = __mkroute_input(skb, res, in_dev, daddr, saddr, tos,
+- &rth);
++ 0, &rth);
+ if (err)
+ return err;
+
+@@ -1895,7 +1904,7 @@
+ skb->dst = &rtres->u.dst;
+ return err;
+ #else /* CONFIG_IP_ROUTE_MULTIPATH_CACHED */
+- return ip_mkroute_input_def(skb, res, fl, in_dev, daddr, saddr, tos);
++ return ip_mkroute_input_def(skb, res, fl, in_dev, daddr, saddr, tos, lsrc);
+ #endif /* CONFIG_IP_ROUTE_MULTIPATH_CACHED */
+ }
+
+@@ -1911,20 +1920,20 @@
+ */
+
+ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
+- u8 tos, struct net_device *dev)
++ u8 tos, struct net_device *dev, u32 lsrc)
+ {
+ struct fib_result res;
+ struct in_device *in_dev = in_dev_get(dev);
+ struct flowi fl = { .nl_u = { .ip4_u =
+ { .daddr = daddr,
+- .saddr = saddr,
++ .saddr = lsrc? : saddr,
+ .tos = tos,
+ .scope = RT_SCOPE_UNIVERSE,
+ #ifdef CONFIG_IP_ROUTE_FWMARK
+ .fwmark = skb->nfmark
+ #endif
+ } },
+- .iif = dev->ifindex };
++ .iif = lsrc? loopback_dev.ifindex : dev->ifindex };
+ unsigned flags = 0;
+ u32 itag = 0;
+ struct rtable * rth;
+@@ -1957,6 +1966,12 @@
+ if (BADCLASS(daddr) || ZERONET(daddr) || LOOPBACK(daddr))
+ goto martian_destination;
+
++ if (lsrc) {
++ if (MULTICAST(lsrc) || BADCLASS(lsrc) ||
++ ZERONET(lsrc) || LOOPBACK(lsrc))
++ goto e_inval;
++ }
++
+ /*
+ * Now we are ready to route packet.
+ */
+@@ -1966,6 +1981,10 @@
+ goto no_route;
+ }
+ free_res = 1;
++ if (lsrc && res.type != RTN_UNICAST && res.type != RTN_NAT)
++ goto e_inval;
++ fl.iif = dev->ifindex;
++ fl.fl4_src = saddr;
+
+ RT_CACHE_STAT_INC(in_slow_tot);
+
+@@ -1990,7 +2009,7 @@
+ if (res.type != RTN_UNICAST)
+ goto martian_destination;
+
+- err = ip_mkroute_input(skb, &res, &fl, in_dev, daddr, saddr, tos);
++ err = ip_mkroute_input(skb, &res, &fl, in_dev, daddr, saddr, tos, lsrc);
+ if (err == -ENOBUFS)
+ goto e_nobufs;
+ if (err == -EINVAL)
+@@ -2005,6 +2024,8 @@
+ brd_input:
+ if (skb->protocol != htons(ETH_P_IP))
+ goto e_inval;
++ if (lsrc)
++ goto e_inval;
+
+ if (ZERONET(saddr))
+ spec_dst = inet_select_addr(dev, 0, RT_SCOPE_LINK);
+@@ -2047,6 +2068,7 @@
+ rth->u.dst.dev = &loopback_dev;
+ dev_hold(rth->u.dst.dev);
+ rth->idev = in_dev_get(rth->u.dst.dev);
++ rth->fl.fl4_gw = 0;
+ rth->rt_gateway = daddr;
+ rth->rt_spec_dst= spec_dst;
+ rth->u.dst.input= ip_local_deliver;
+@@ -2096,8 +2118,9 @@
+ goto e_inval;
+ }
+
+-int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr,
+- u8 tos, struct net_device *dev)
++static inline int
++ip_route_input_cached(struct sk_buff *skb, __be32 daddr, __be32 saddr,
++ u8 tos, struct net_device *dev, u32 lsrc)
+ {
+ struct rtable * rth;
+ unsigned hash;
+@@ -2112,6 +2135,7 @@
+ if (rth->fl.fl4_dst == daddr &&
+ rth->fl.fl4_src == saddr &&
+ rth->fl.iif == iif &&
++ rth->fl.fl4_lsrc == lsrc &&
+ rth->fl.oif == 0 &&
+ #ifdef CONFIG_IP_ROUTE_FWMARK
+ rth->fl.fl4_fwmark == skb->nfmark &&
+@@ -2160,7 +2184,19 @@
+ rcu_read_unlock();
+ return -EINVAL;
+ }
+- return ip_route_input_slow(skb, daddr, saddr, tos, dev);
++ return ip_route_input_slow(skb, daddr, saddr, tos, dev, lsrc);
++}
++
++int ip_route_input(struct sk_buff *skb, u32 daddr, u32 saddr,
++ u8 tos, struct net_device *dev)
++{
++ return ip_route_input_cached(skb, daddr, saddr, tos, dev, 0);
++}
++
++int ip_route_input_lookup(struct sk_buff *skb, u32 daddr, u32 saddr,
++ u8 tos, struct net_device *dev, u32 lsrc)
++{
++ return ip_route_input_cached(skb, daddr, saddr, tos, dev, lsrc);
+ }
+
+ static inline int __mkroute_output(struct rtable **result,
+@@ -2239,6 +2275,7 @@
+ rth->fl.fl4_tos = tos;
+ rth->fl.fl4_src = oldflp->fl4_src;
+ rth->fl.oif = oldflp->oif;
++ rth->fl.fl4_gw = oldflp->fl4_gw;
+ #ifdef CONFIG_IP_ROUTE_FWMARK
+ rth->fl.fl4_fwmark= oldflp->fl4_fwmark;
+ #endif
+@@ -2381,6 +2418,7 @@
+ struct flowi fl = { .nl_u = { .ip4_u =
+ { .daddr = oldflp->fl4_dst,
+ .saddr = oldflp->fl4_src,
++ .gw = oldflp->fl4_gw,
+ .tos = tos & IPTOS_RT_MASK,
+ .scope = ((tos & RTO_ONLINK) ?
+ RT_SCOPE_LINK :
+@@ -2486,6 +2524,7 @@
+ dev_out = &loopback_dev;
+ dev_hold(dev_out);
+ fl.oif = loopback_dev.ifindex;
++ fl.fl4_gw = 0;
+ res.type = RTN_LOCAL;
+ flags |= RTCF_LOCAL;
+ goto make_route;
+@@ -2493,7 +2532,7 @@
+
+ if (fib_lookup(&fl, &res)) {
+ res.fi = NULL;
+- if (oldflp->oif) {
++ if (oldflp->oif && dev_out->flags & IFF_UP) {
+ /* Apparently, routing tables are wrong. Assume,
+ that the destination is on link.
+
+@@ -2533,6 +2572,7 @@
+ dev_out = &loopback_dev;
+ dev_hold(dev_out);
+ fl.oif = dev_out->ifindex;
++ fl.fl4_gw = 0;
+ if (res.fi)
+ fib_info_put(res.fi);
+ res.fi = NULL;
+@@ -2540,13 +2580,12 @@
+ goto make_route;
+ }
+
++ if (res.type == RTN_UNICAST)
++ fib_select_default(&fl, &res);
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+- if (res.fi->fib_nhs > 1 && fl.oif == 0)
++ if (res.fi->fib_nhs > 1)
+ fib_select_multipath(&fl, &res);
+- else
+ #endif
+- if (!res.prefixlen && res.type == RTN_UNICAST && !fl.oif)
+- fib_select_default(&fl, &res);
+
+ if (!fl.fl4_src)
+ fl.fl4_src = FIB_RES_PREFSRC(res);
+@@ -2583,6 +2622,7 @@
+ rth->fl.fl4_src == flp->fl4_src &&
+ rth->fl.iif == 0 &&
+ rth->fl.oif == flp->oif &&
++ rth->fl.fl4_gw == flp->fl4_gw &&
+ #ifdef CONFIG_IP_ROUTE_FWMARK
+ rth->fl.fl4_fwmark == flp->fl4_fwmark &&
+ #endif
+@@ -3221,3 +3261,4 @@
+ EXPORT_SYMBOL(__ip_select_ident);
+ EXPORT_SYMBOL(ip_route_input);
+ EXPORT_SYMBOL(ip_route_output_key);
++EXPORT_SYMBOL(ip_route_input_lookup);
diff --git a/packages/linux/linux-magicbox-2.6.19.2/202-mips-freestanding.patch b/packages/linux/linux-magicbox-2.6.19.2/202-mips-freestanding.patch
new file mode 100644
index 0000000000..38fd5795d0
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/202-mips-freestanding.patch
@@ -0,0 +1,13 @@
+diff -urN linux-2.6.19.old/arch/mips/Makefile linux-2.6.19.dev/arch/mips/Makefile
+--- linux-2.6.19.old/arch/mips/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/arch/mips/Makefile 2006-12-14 03:13:55.000000000 +0100
+@@ -600,6 +600,9 @@
+ core-$(CONFIG_TOSHIBA_RBTX4938) += arch/mips/tx4938/common/
+ load-$(CONFIG_TOSHIBA_RBTX4938) += 0xffffffff80100000
+
++# temporary until string.h is fixed
++cflags-y += -ffreestanding
++
+ cflags-y += -Iinclude/asm-mips/mach-generic
+ drivers-$(CONFIG_PCI) += arch/mips/pci/
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/204-jffs2_eofdetect.patch b/packages/linux/linux-magicbox-2.6.19.2/204-jffs2_eofdetect.patch
new file mode 100644
index 0000000000..8037dd0671
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/204-jffs2_eofdetect.patch
@@ -0,0 +1,58 @@
+diff -urN linux-2.6.19.old/fs/jffs2/build.c linux-2.6.19.dev/fs/jffs2/build.c
+--- linux-2.6.19.old/fs/jffs2/build.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/fs/jffs2/build.c 2006-12-14 03:13:57.000000000 +0100
+@@ -107,6 +107,17 @@
+ dbg_fsbuild("scanned flash completely\n");
+ jffs2_dbg_dump_block_lists_nolock(c);
+
++ if (c->flags & (1 << 7)) {
++ printk("%s(): unlocking the mtd device... ", __func__);
++ if (c->mtd->unlock)
++ c->mtd->unlock(c->mtd, 0, c->mtd->size);
++ printk("done.\n");
++
++ printk("%s(): erasing all blocks after the end marker... ", __func__);
++ jffs2_erase_pending_blocks(c, -1);
++ printk("done.\n");
++ }
++
+ dbg_fsbuild("pass 1 starting\n");
+ c->flags |= JFFS2_SB_FLAG_BUILDING;
+ /* Now scan the directory tree, increasing nlink according to every dirent found. */
+diff -urN linux-2.6.19.old/fs/jffs2/scan.c linux-2.6.19.dev/fs/jffs2/scan.c
+--- linux-2.6.19.old/fs/jffs2/scan.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/fs/jffs2/scan.c 2006-12-14 03:13:57.000000000 +0100
+@@ -141,9 +141,12 @@
+
+ /* reset summary info for next eraseblock scan */
+ jffs2_sum_reset_collected(s);
+-
+- ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
+- buf_size, s);
++
++ if (c->flags & (1 << 7))
++ ret = BLK_STATE_ALLFF;
++ else
++ ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
++ buf_size, s);
+
+ if (ret < 0)
+ goto out;
+@@ -540,6 +543,17 @@
+ return err;
+ }
+
++ if ((buf[0] == 0xde) &&
++ (buf[1] == 0xad) &&
++ (buf[2] == 0xc0) &&
++ (buf[3] == 0xde)) {
++ /* end of filesystem. erase everything after this point */
++ printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
++ c->flags |= (1 << 7);
++
++ return BLK_STATE_ALLFF;
++ }
++
+ /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
+ ofs = 0;
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/207-powerpc_asm_segment_h.patch b/packages/linux/linux-magicbox-2.6.19.2/207-powerpc_asm_segment_h.patch
new file mode 100644
index 0000000000..c9859e2f29
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/207-powerpc_asm_segment_h.patch
@@ -0,0 +1,10 @@
+diff -urN linux-2.6.19.old/include/asm-powerpc/segment.h linux-2.6.19.dev/include/asm-powerpc/segment.h
+--- linux-2.6.19.old/include/asm-powerpc/segment.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/include/asm-powerpc/segment.h 2006-12-14 03:13:59.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef _ASM_SEGMENT_H
++#define _ASM_SEGMENT_H
++
++/* Only here because we have some old header files that expect it.. */
++
++#endif /* _ASM_SEGMENT_H */
diff --git a/packages/linux/linux-magicbox-2.6.19.2/208-rtl8110sb_fix.patch b/packages/linux/linux-magicbox-2.6.19.2/208-rtl8110sb_fix.patch
new file mode 100644
index 0000000000..620a9daab9
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/208-rtl8110sb_fix.patch
@@ -0,0 +1,25 @@
+diff -urN linux-2.6.19.old/drivers/net/r8169.c linux-2.6.19.dev/drivers/net/r8169.c
+--- linux-2.6.19.old/drivers/net/r8169.c 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/drivers/net/r8169.c 2006-12-14 03:14:01.000000000 +0100
+@@ -491,7 +491,7 @@
+ #endif
+
+ static const u16 rtl8169_intr_mask =
+- SYSErr | LinkChg | RxOverflow | RxFIFOOver | TxErr | TxOK | RxErr | RxOK;
++ LinkChg | RxOverflow | RxFIFOOver | TxErr | TxOK | RxErr | RxOK;
+ static const u16 rtl8169_napi_event =
+ RxOK | RxOverflow | RxFIFOOver | TxOK | TxErr;
+ static const unsigned int rtl8169_rx_config =
+@@ -2584,10 +2584,12 @@
+ if (!(status & rtl8169_intr_mask))
+ break;
+
++#if 0
+ if (unlikely(status & SYSErr)) {
+ rtl8169_pcierr_interrupt(dev);
+ break;
+ }
++#endif
+
+ if (status & LinkChg)
+ rtl8169_check_link_status(dev, tp, ioaddr);
diff --git a/packages/linux/linux-magicbox-2.6.19.2/209-mini_fo.patch b/packages/linux/linux-magicbox-2.6.19.2/209-mini_fo.patch
new file mode 100644
index 0000000000..a8e6d88d63
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/209-mini_fo.patch
@@ -0,0 +1,7807 @@
+diff -urN linux-2.6.19.old/fs/Kconfig linux-2.6.19.dev/fs/Kconfig
+--- linux-2.6.19.old/fs/Kconfig 2006-12-14 03:13:20.000000000 +0100
++++ linux-2.6.19.dev/fs/Kconfig 2006-12-14 03:14:03.000000000 +0100
+@@ -468,6 +468,9 @@
+ This option will enlarge your kernel, but it allows debugging of
+ ocfs2 filesystem issues.
+
++config MINI_FO
++ tristate "Mini fanout overlay filesystem"
++
+ config MINIX_FS
+ tristate "Minix fs support"
+ help
+diff -urN linux-2.6.19.old/fs/Makefile linux-2.6.19.dev/fs/Makefile
+--- linux-2.6.19.old/fs/Makefile 2006-12-14 03:13:20.000000000 +0100
++++ linux-2.6.19.dev/fs/Makefile 2006-12-14 03:14:03.000000000 +0100
+@@ -71,6 +71,7 @@
+ obj-$(CONFIG_RAMFS) += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
++obj-$(CONFIG_MINI_FO) += mini_fo/
+ obj-$(CONFIG_MINIX_FS) += minix/
+ obj-$(CONFIG_FAT_FS) += fat/
+ obj-$(CONFIG_MSDOS_FS) += msdos/
+diff -urN linux-2.6.19.old/fs/mini_fo/aux.c linux-2.6.19.dev/fs/mini_fo/aux.c
+--- linux-2.6.19.old/fs/mini_fo/aux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/aux.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,580 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++
++/* check if file exists in storage */
++int exists_in_storage(dentry_t *dentry)
++{
++ check_mini_fo_dentry(dentry);
++ if(dtost(dentry) == MODIFIED || dtost(dentry) == CREATED || dtost(dentry) == DEL_REWRITTEN)
++ return 1;
++ return 0;
++}
++
++/* check if dentry is in an existing state */
++int is_mini_fo_existant(dentry_t *dentry)
++{
++ check_mini_fo_dentry(dentry);
++
++ if(dtost(dentry) == DELETED || dtost(dentry) == NON_EXISTANT)
++ return 0;
++ else
++ return 1;
++}
++
++/*
++ * This function will create a negative storage dentry for
++ * dentry, what is required for many create like options.
++ * It will create the storage structure if necessary.
++ */
++int get_neg_sto_dentry(dentry_t *dentry)
++{
++ int err = 0;
++ unsigned int len;
++ const unsigned char *name;
++
++ if(!dentry ||
++ !dtopd(dentry) ||
++ !(dtost(dentry) == UNMODIFIED ||
++ dtost(dentry) == NON_EXISTANT ||
++ dtost(dentry) == DELETED)) {
++ printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: invalid dentry passed.\n");
++ err = -1;
++ goto out;
++ }
++ /* Have we got a neg. dentry already? */
++ if(dtohd2(dentry)) {
++ err = 0;
++ goto out;
++ }
++ if(dtost(dentry->d_parent) == UNMODIFIED) {
++ /* build sto struct */
++ err = build_sto_structure(dentry->d_parent->d_parent, dentry->d_parent);
++ if(err ||
++ dtost(dentry->d_parent) != MODIFIED) {
++ printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: ERROR building sto structure.\n");
++ err = -1;
++ goto out;
++ }
++ }
++
++ len = dentry->d_name.len;
++ name = dentry->d_name.name;
++
++ dtohd2(dentry) =
++ lookup_one_len(name, dtohd2(dentry->d_parent), len);
++
++ out:
++ return err;
++}
++
++int check_mini_fo_dentry(dentry_t *dentry)
++{
++ ASSERT(dentry != NULL);
++ ASSERT(dtopd(dentry) != NULL);
++ ASSERT((dtohd(dentry) != NULL) || (dtohd2(dentry) != NULL));
++
++/* if(dtost(dentry) == MODIFIED) { */
++/* ASSERT(dentry->d_inode != NULL); */
++/* ASSERT(dtohd(dentry) != NULL); */
++/* ASSERT(dtohd(dentry)->d_inode != NULL); */
++/* ASSERT(dtohd2(dentry) != NULL); */
++/* ASSERT(dtohd2(dentry)->d_inode != NULL); */
++/* } */
++/* else if(dtost(dentry) == UNMODIFIED) { */
++/* ASSERT(dentry->d_inode != NULL); */
++/* ASSERT( */
++/* } */
++ return 0;
++}
++
++int check_mini_fo_file(file_t *file)
++{
++ ASSERT(file != NULL);
++ ASSERT(ftopd(file) != NULL);
++ ASSERT(file->f_dentry != NULL);
++
++ /* violent checking, check depending of state and type
++ * if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {}
++ */
++ ASSERT((ftohf(file) != NULL) || (ftohf2(file) != NULL));
++ return 0;
++}
++
++int check_mini_fo_inode(inode_t *inode)
++{
++ ASSERT(inode != NULL);
++ ASSERT(itopd(inode) != NULL);
++ ASSERT((itohi(inode) != NULL) || (itohi2(inode) != NULL));
++ return 0;
++}
++
++/*
++ * will walk a base path as provided by get_mini_fo_bpath and return
++ * the (hopefully ;-) ) positive dentry of the renamed base dir.
++ *
++ * This does some work of path_init.
++ */
++dentry_t *bpath_walk(super_block_t *sb, char *bpath)
++{
++ int err;
++ struct nameidata nd;
++
++ /* be paranoid */
++ if(!bpath || bpath[0] != '/') {
++ printk(KERN_CRIT "mini_fo: bpath_walk: Invalid string.\n");
++ return NULL;
++ }
++ if(!sb || !stopd(sb)) {
++ printk(KERN_CRIT "mini_fo: bpath_walk: Invalid sb.\n");
++ return NULL;
++ }
++
++ /* setup nd as path_init does */
++ nd.last_type = LAST_ROOT; /* if there are only slashes... */
++ nd.flags = LOOKUP_FOLLOW;
++ /* fix this: how do I reach this lock?
++ * read_lock(&current->fs->lock); */
++ nd.mnt = mntget(stopd(sb)->hidden_mnt);
++ nd.dentry = dget(stopd(sb)->base_dir_dentry);
++ /* read_unlock(&current->fs->lock); */
++
++ err = path_walk(bpath+1, &nd);
++
++ /* validate */
++ if (err || !nd.dentry || !nd.dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
++ return NULL;
++ }
++ return nd.dentry;
++}
++
++
++/* returns the full path of the basefile incl. its name */
++int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len)
++{
++ char *buf_walker;
++ int len = 0;
++ dentry_t *sky_walker;
++
++ if(!dentry || !dtohd(dentry)) {
++ printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: invalid dentry passed.\n");
++ return -1;
++ }
++ sky_walker = dtohd(dentry);
++
++ do {
++ len += sky_walker->d_name.len + 1 ; /* 1 for '/' */
++ sky_walker = sky_walker->d_parent;
++ } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
++
++ /* 1 to oil the loop */
++ *bpath = (char*) kmalloc(len + 1, GFP_KERNEL);
++ if(!*bpath) {
++ printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: out of mem.\n");
++ return -1;
++ }
++ buf_walker = *bpath+len; /* put it on last char */
++ *buf_walker = '\n';
++ sky_walker = dtohd(dentry);
++
++ do {
++ buf_walker -= sky_walker->d_name.len;
++ strncpy(buf_walker,
++ sky_walker->d_name.name,
++ sky_walker->d_name.len);
++ *(--buf_walker) = '/';
++ sky_walker = sky_walker->d_parent;
++ } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
++
++ /* bpath_len doesn't count newline! */
++ *bpath_len = len;
++ return 0;
++}
++
++int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
++ dentry_t *src_dentry, struct vfsmount *src_mnt)
++{
++ void *buf;
++ mm_segment_t old_fs;
++ file_t *tgt_file;
++ file_t *src_file;
++ int bytes, len, tmp, err;
++ err = 0;
++
++ if(!(tgt_dentry->d_inode && src_dentry->d_inode)) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR, neg. dentry passed.\n");
++ err = -EINVAL;
++ goto out;
++ }
++
++ dget(tgt_dentry);
++ dget(src_dentry);
++ mntget(tgt_mnt);
++ mntget(src_mnt);
++
++ /* open file write only */
++ tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
++ if(!tgt_file || IS_ERR(tgt_file)) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
++ err = PTR_ERR(tgt_file);
++ goto out_err;
++ }
++
++ /* open file read only */
++ src_file = dentry_open(src_dentry, src_mnt, 0x0);
++ if(!src_file || IS_ERR(src_file)) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
++ err = PTR_ERR(src_file);
++
++ /* close target file */
++ fput(tgt_file);
++ goto out_err;
++ }
++
++ /* check if the filesystem(s) support read respective write */
++ if(!src_file->f_op->read || !tgt_file->f_op->write) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR, no fs read or write support.\n");
++ err = -EPERM;
++ goto out_close;
++ }
++
++ /* allocate a page for transfering the data */
++ buf = (void *) __get_free_page(GFP_KERNEL);
++ if(!buf) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR, out of kernel mem.\n");
++ goto out_err;
++ }
++
++ tgt_file->f_pos = 0;
++ src_file->f_pos = 0;
++
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ /* Doing this I assume that a read operation will return a full
++ * buffer while there is still data to read, and a less than
++ * full buffer when all data has been read.
++ */
++ bytes = len = PAGE_SIZE;
++ while(bytes == len) {
++ bytes = src_file->f_op->read(src_file, buf, len,
++ &src_file->f_pos);
++ tmp = tgt_file->f_op->write(tgt_file, buf, bytes,
++ &tgt_file->f_pos);
++ if(tmp != bytes) {
++ printk(KERN_CRIT "mini_fo_cp_cont: ERROR writing.\n");
++ goto out_close_unset;
++ }
++ }
++
++ free_page((unsigned long) buf);
++ set_fs(old_fs);
++ fput(tgt_file);
++ fput(src_file);
++ goto out;
++
++ out_close_unset:
++ free_page((unsigned long) buf);
++ set_fs(old_fs);
++
++ out_close:
++ fput(tgt_file);
++ fput(src_file);
++
++ out_err:
++ dput(tgt_dentry);
++ dput(src_dentry);
++
++ /* mk: not sure if this need to be done */
++ mntput(tgt_mnt);
++ mntput(src_mnt);
++
++ out:
++ return err;
++}
++
++/* mk:
++ * ndl (no-duplicate list) stuff
++ * This is used in mini_fo_readdir, to save the storage directory contents
++ * and later when reading base, match them against the list in order
++ * to avoid duplicates.
++ */
++
++/* add a file specified by name and len to the ndl
++ * Return values: 0 on success, <0 on failure.
++ */
++int ndl_add_entry(struct readdir_data *rd, const char *name, int len)
++{
++ struct ndl_entry *tmp_entry;
++
++ tmp_entry = (struct ndl_entry *)
++ kmalloc(sizeof(struct ndl_entry), GFP_KERNEL);
++ if(!tmp_entry) {
++ printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
++ return -ENOMEM;
++ }
++ tmp_entry->name = (char*) kmalloc(len, GFP_KERNEL);
++ if(!tmp_entry->name) {
++ printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
++ return -ENOMEM;
++ }
++ strncpy(tmp_entry->name, name, len);
++ tmp_entry->len = len;
++
++ list_add(&tmp_entry->list, &rd->ndl_list);
++ rd->ndl_size++;
++ return 0;
++}
++
++/* delete all list entries and free memory */
++void ndl_put_list(struct readdir_data *rd)
++{
++ struct list_head *tmp;
++ struct ndl_entry *tmp_entry;
++
++ if(rd->ndl_size <= 0)
++ return;
++ while(!list_empty(&rd->ndl_list)) {
++ tmp = rd->ndl_list.next;
++ list_del(tmp);
++ tmp_entry = list_entry(tmp, struct ndl_entry, list);
++ kfree(tmp_entry->name);
++ kfree(tmp_entry);
++ }
++ rd->ndl_size = 0;
++}
++
++/* Check if a file specified by name and len is in the ndl
++ * Return value: 0 if not in list, 1 if file is found in ndl.
++ */
++int ndl_check_entry(struct readdir_data *rd, const char *name, int len)
++{
++ struct list_head *tmp;
++ struct ndl_entry *tmp_entry;
++
++ if(rd->ndl_size <= 0)
++ return 0;
++
++ list_for_each(tmp, &rd->ndl_list) {
++ tmp_entry = list_entry(tmp, struct ndl_entry, list);
++ if(tmp_entry->len != len)
++ continue;
++ if(!strncmp(tmp_entry->name, name, len))
++ return 1;
++ }
++ return 0;
++}
++
++/* mk:
++ * Recursive function to create corresponding directorys in the storage fs.
++ * The function will build the storage directorys up to dentry.
++ */
++int build_sto_structure(dentry_t *dir, dentry_t *dentry)
++{
++ int err;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++
++ if(dentry->d_parent != dir) {
++ printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [1].\n");
++ return 1;
++ }
++
++ if(dtost(dir) != MODIFIED) {
++ err = build_sto_structure(dir->d_parent, dentry->d_parent);
++ if(err)
++ return err;
++ }
++
++ /* ok, coming back again. */
++ check_mini_fo_dentry(dentry);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ if(!hidden_sto_dentry) {
++ /*
++ * This is the case after creating the first
++ * hidden_sto_dentry.
++ * After one negative storage_dentry, all pointers to
++ * hidden_storage dentries are set to NULL. We need to
++ * create the negative dentry before we create the storage
++ * file.
++ */
++ unsigned int len;
++ const unsigned char *name;
++ len = dtohd(dentry)->d_name.len;
++ name = dtohd(dentry)->d_name.name;
++ hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
++ dtohd2(dentry) = hidden_sto_dentry;
++ }
++
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ /* lets be safe */
++ if(dtohd2(dir) != hidden_sto_dir_dentry) {
++ printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [2].\n");
++ return 1;
++ }
++
++ /* check for errors in lock_parent */
++ err = PTR_ERR(hidden_sto_dir_dentry);
++ if(IS_ERR(hidden_sto_dir_dentry)) {
++ printk(KERN_CRIT "mini_fo: build_sto_structure: lock_parent failed.\n");
++ return err;
++ }
++
++ err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ dir->d_inode->i_mode);
++
++ if(err) {
++ printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [1].\n");
++ /* was: unlock_dir(dir); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&dir->d_inode->i_mutex);
++#else
++ up(&dir->d_inode->i_sem);
++#endif
++ dput(dir);
++ return err;
++ }
++
++ /* everything ok! */
++ if(!dtohd2(dentry)->d_inode) {
++ printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [2].\n");
++ /* was: unlock_dir(dir); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&dir->d_inode->i_mutex);
++#else
++ up(&dir->d_inode->i_sem);
++#endif
++ dput(dir);
++ return 1;
++ }
++
++ /* interpose the new inode and set new state */
++ itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
++ dtopd(dentry)->state = MODIFIED;
++
++ /* initalize the wol list */
++ itopd(dentry->d_inode)->deleted_list_size = -1;
++ itopd(dentry->d_inode)->renamed_list_size = -1;
++ meta_build_lists(dentry);
++
++ fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
++ fist_copy_attr_timesizes(dir->d_inode,
++ hidden_sto_dir_dentry->d_inode);
++ dir->d_inode->i_nlink++;
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ return 0;
++}
++
++
++#if 0 /* unused */
++
++/*
++ * Read "len" bytes from "filename" into "buf".
++ * "buf" is in kernel space.
++ */
++int
++mini_fo_read_file(const char *filename, void *buf, int len)
++{
++ file_t *filp;
++ mm_segment_t oldfs;
++ int bytes;
++ /* Chroot? Maybe NULL isn't right here */
++ filp = filp_open(filename, O_RDONLY, 0);
++ if (!filp || IS_ERR(filp)) {
++ printk("mini_fo_read_file err %d\n", (int) PTR_ERR(filp));
++ return -1; /* or do something else */
++ }
++
++ if (!filp->f_op->read)
++ return -2; /* file(system) doesn't allow reads */
++
++ /* now read len bytes from offset 0 */
++ filp->f_pos = 0; /* start offset */
++ oldfs = get_fs();
++ set_fs(KERNEL_DS);
++ bytes = filp->f_op->read(filp, buf, len, &filp->f_pos);
++ set_fs(oldfs);
++
++ /* close the file */
++ fput(filp);
++
++ return bytes;
++}
++
++
++
++/*
++ * Write "len" bytes from "buf" to "filename"
++ * "buf" is in kernel space.
++ */
++int
++mini_fo_write_file(const char *filename, void *buf, int len)
++{
++ file_t *filp;
++ mm_segment_t oldfs;
++ int bytes;
++ /* Chroot? Maybe NULL isn't right here */
++ filp = filp_open(filename, O_RDWR|O_CREAT, 0640);
++ if (!filp || IS_ERR(filp)) {
++ printk("mini_fo_write_file err %d\n", (int) PTR_ERR(filp));
++ return -1; /* or do something else */
++ }
++
++ if (!filp->f_op->write)
++ return -2; /* file(system) doesn't allow writes */
++
++ /* now write len bytes from offset 0 */
++ filp->f_pos = 0; /* start offset */
++ oldfs = get_fs();
++ set_fs(KERNEL_DS);
++ bytes = filp->f_op->write(filp, buf, len, &filp->f_pos);
++ set_fs(oldfs);
++
++ /* close the file */
++ fput(filp);
++
++ return bytes;
++}
++
++#endif /* unused */
++
+diff -urN linux-2.6.19.old/fs/mini_fo/ChangeLog linux-2.6.19.dev/fs/mini_fo/ChangeLog
+--- linux-2.6.19.old/fs/mini_fo/ChangeLog 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/ChangeLog 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,281 @@
++2006-01-24 Markus Klotzbuecher <mk@mary.denx.de>
++
++ * Add tons of ugly ifdefs to Ed L. Cashin's mutex patch to
++ retain backwards compatibility.
++
++2006-01-24 Ed L. Cashin <ecashin@coraid.com>
++
++ * Support for the new mutex infrastructure
++ (7892f2f48d165a34b0b8130c8a195dfd807b8cb6)
++
++2005-10-15 Markus Klotzbuecher <mk@localhost.localdomain>
++
++ * Bugfix for a serious memory leak in mini_fo_follow_link.
++
++2005-09-21 Markus Klotzbuecher <mk@mary>
++
++ * new release 0.6.1
++
++ * fix of a compiler warning due to changes in 2.6.13
++
++2005-09-21 Klaus Wenninger <klaus.wenninger@siemens.com>
++
++ * file.c: readdir: fix for a bug that caused directory entries
++ to show up twice when using storage filesystems such as
++ minixfs or pramfs.
++
++2005-06-30 Eric Lammerts <eric@lammerts.org>
++
++ * fix for an oops when overwriting a binary thats beeing
++ executed.
++
++2005-06-09 <mk@mary>
++
++ * Renamed overlay to mini_fo-overlay.
++
++ * Added mini_fo-merge script to allow merging of storage and base
++ after making modifications.
++
++2005-05-22 root <mk@mary>
++
++ * Added overlay script that allows to easily mount mini_fo ontop
++ of a given base directory
++
++2005-05-10 <mk@mary>
++
++ * inode.c: xattr functions return -EOPNOSUPP instead of
++ -ENOSUPP, what confuses "ls -l"
++
++ * Changed license from LGPL to GPL.
++
++2005-05-08 root <mk@mary>
++
++ * Makefile: clean it up and added make install and make
++ uninstall.
++
++2005-05-06 <mk@mary>
++
++ * merged devel branch back to main. [v0-6-0-pre3]
++
++ * removed unused files print.c and fist_ioctl. [devel-0-0-18]
++
++ * ioctl: removed fist_ioctl stuff, that is not needed for
++ now.
++
++2005-05-03 <mk@mary>
++
++ * file.c: simplified mini_fo_open and mini_fo_setattr using
++ new state changing functions. [devel-0-0-17]
++
++ * inode.c: Fixed getattr state bug (see below) in 2.4 function
++ mini_fo_inode revalidate.
++
++ * inode.c: found an other bug in mini_fo_getattr. States are not
++ reliable in this function, as a file can be opened, unlinked and
++ the getattr function called. This results in a deleted dentry
++ with an inode. Fix is to ignore states and simply use the inode
++ available.
++
++2005-04-29 <mk@mary>
++
++ * file.c: Bugfix and cleanup in fasync and fsync. [devel-0-0-16]
++
++ * file.c: do not use mini_fo_lock so the generic version is
++ used (I guess).
++
++ * inode.c: getattr, never call getattr on lower files, as this
++ will cause the inum to change.
++
++ * inode.c: rename_reg_file renamed to rename_nondir, as it
++ doesn't matter as long it't not a dir. Removed all
++ rename_dev_file etc.
++
++ * tagged as devel-0-0-15
++
++ * inode.c: added support for chosing support for extended
++ attrs at compile time by XATTR define in mini_fo.h .
++
++ * inode.c: fixed mini_fo_getattr to use mini_fo inode and not
++ lower again, what avoids inode number changes that confused
++ rm again. This is the proper solution.
++
++2005-04-24 <mk@mary>
++
++ * all files: updated Copyright notive to 2005. [devel-0-0-14]
++
++ * inode.c: fixed mini_fo_getattr to not change the inode
++ number, even if lower files change.
++
++ * super.c: fixed a bug that caused deleted base file to show
++ up suddenly after some time, or after creating a special
++ file. The problem was that after some time or after special
++ file creating sync_sb_inodes is called by the vfs, that
++ called our mini_fo_put_inode. There was (wrongly) called
++ __meta_put_lists, that nuked the lists, although the inode
++ was going to continue its life. Moving __meta_put_lists to
++ mini_fo_clear_inode, where an inode is really destroyed,
++ solved the problem.
++
++
++2005-04-23 <mk@mary>
++
++ * state.c, aux.c: more cleaning up and
++ simplifications. [devel-0-0-13]
++
++ * inode.c: implemented mini_fo_getattr, that was required for
++ 2.6 because inode_revalidate has been remove there, and the
++ old "du" bug returned.
++
++
++2005-04-20 <mk@mary>
++
++ * aux.c: get_neg_sto_dentry(): allow to be called for dentries
++ in state UNMODIFIED, NON_EXISTANT _and_ DELETED.
++
++2005-04-19 <mk@mary>
++
++ * Fixed a bug under 2.6 that caused files deleted via mini_fo
++ not to be deleted properly and therefore the fs filled up
++ untill no memory was left. [devel-0-0-12]
++
++ * Added basic hard link support. This means that creating
++ hardlinks will work, but existing ones will be treated as
++ individual files. [devel-0-0-11]
++
++2005-04-17 <mk@mary>
++
++ * Bugfixes
++
++2005-04-13 root <mk@mary>
++
++ * Added file state.c for the state transition
++ functions. Doesn't work very well yet, though...
++
++2005-04-12 <mk@mary>
++
++ * Porting to 2.6 started, which is easier than expected, also
++ due to Olivier previous work.
++
++2005-04-08 <mk@mary>
++
++ * Fixed the bug that caused du to return invalid sizes of
++ directory trees. The problem was that
++ mini_fo_inode_revalidate didn't always copy the attributes
++ from the base inode properly.
++
++2005-04-01 Markus Klotzbuecher <mk@chasey>
++
++ * Merged devel branch back to main trunk and updated the
++ RELEASE notes. This will be 0-6-0-pre1.
++
++2005-03-31 Markus Klotzbuecher <mk@chasey>
++
++ * Fixed some bugs in rename_reg_file, that only showed up in
++ the kernel compile test. Kernel compiles cleanly ontop of
++ mini_fo, now also make mrproper etc. work. Seems pretty stable.
++
++2005-03-28 Markus Klotzbuecher <mk@chasey>
++
++ * Many, many directory renaming bugfixes and a lot of other
++ cleanup. Dir renaming seems to work relatively stable.
++
++2005-03-22 Markus Klotzbuecher <mk@chasey>
++
++ * Finished implementing lightweight directory renaming. Some
++ basic testing indicates it works fine.
++ Next is to implement testcases for the testsuite and confirm
++ everything is really working ok.
++
++2005-03-18 Markus Klotzbuecher <mk@chasey>
++
++ * Finished implementing meta.c stuff required for directory
++ renaming.
++
++2005-03-17 Markus Klotzbuecher <mk@chasey>
++
++ * Fixed all compile warnings + an extremly old bug that
++ somehow crept in while reworking the wol stuff to the META
++ system. Turning on -Werror again... :-)
++
++ * Fixed some bugs in the new rename_reg_file function.
++
++ * Rewrote mini_fo rename and split it into several
++ subfunctions, that handle the different types
++ seperately. Rewrote the regular file function aswell, as it
++ was implemented somewhat inefficient.
++
++2005-03-16 Markus Klotzbuecher <mk@chasey>
++
++ * Implemented new META subsystem, removed old WOL stuff in favor
++ if it.
++
++ * After some basic testing everything seems ok...
++
++2005-03-11 Markus Klotzbuecher <mk@chasey>
++
++ * Renaming a non regular file caused trouble because I always
++ tried to copy the contents. Now I only do this for regular
++ files. mini_fo_rename still isn't implemented properly, renaming
++ of device files, symlinks etc. results in a empty regular file
++ instead of the proper type.
++
++ * Directory renaming suddenly works! What a surprise! I guess
++ this is because renaming is implemented as making a copy and
++ removing the original. Still this might not work
++ everywhere...
++
++2005-03-09 Markus Klotzbuecher <mk@chasey>
++
++ * Bugfix, when a mini_fo directory that exists in storage
++ (state: MODIFIED, CREATED and DEL_REWRITTEN) is deleted, a
++ possibly existing WOL file contained in it needs to be
++ deleted too.
++
++ * Starting cleanup: defined state names in order to get rid of
++ the state numbers.
++
++2005-03-08 Markus Klotzbuecher <mk@chasey>
++
++ * Makefile fix, fist_ioctl was built against wrong sources if ARCH=um
++
++ * Fixed a bug in dentry.c, mini_fo_d_hash. In state 4 =
++ DEL_REWRITTEN the hash was calculated from the base dentry,
++ which was wrong and and caused assertions in
++ __mini_fo_hidden_dentry to fail.
++
++2005-02-21 <mk@mary>
++
++ * Implemented directory deleting (inode.c)
++
++ * main.c: made mini_fo_parse_options a little more robust.
++
++2004-12-22 <mk@mary>
++
++ * Makefile cleanup and uml stuff, removed unneccessary files
++
++ * Created a new and hopefully more informative README
++
++ * CHANGELOG: created a new CHANGELOG and added old entries reversely
++
++
++2004-10-24 Gleb Natapov <gleb@nbase.co.il>
++
++ * Fix: owner and group where not correctly copied from base to
++ storage.
++
++
++2004-10-05 Gleb Natapov <gleb@nbase.co.il>
++
++ * Implementation of fsync, fasync and lock mini_fo functions.
++
++
++2004-09-29 Bob Lee <bob@pantasys.com>
++
++ * Fix of a serious pointer bug
++
++
++2004-09-28 Gleb Natapov <gleb@nbase.co.il>
++
++ * Implementation of mini_fo_mknod and mini_fo_rename, support
++ for device files.
++
+diff -urN linux-2.6.19.old/fs/mini_fo/dentry.c linux-2.6.19.dev/fs/mini_fo/dentry.c
+--- linux-2.6.19.old/fs/mini_fo/dentry.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/dentry.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,244 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++
++/*
++ * THIS IS A BOOLEAN FUNCTION: returns 1 if valid, 0 otherwise.
++ */
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_d_revalidate(dentry_t *dentry, struct nameidata *nd)
++#else
++mini_fo_d_revalidate(dentry_t *dentry, int flags)
++#endif
++{
++ int err1 = 1; /* valid = 1, invalid = 0 */
++ int err2 = 1;
++ dentry_t *hidden_dentry;
++ dentry_t *hidden_sto_dentry;
++
++
++ check_mini_fo_dentry(dentry);
++
++ hidden_dentry = dtohd(dentry);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ if(hidden_dentry &&
++ hidden_dentry->d_op &&
++ hidden_dentry->d_op->d_revalidate) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, nd);
++#else
++ err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, flags);
++#endif
++ }
++ if(hidden_sto_dentry &&
++ hidden_sto_dentry->d_op &&
++ hidden_sto_dentry->d_op->d_revalidate) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
++ nd);
++#else
++ err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
++ flags);
++#endif
++ }
++
++ /* mk: if one of the lower level dentries are valid,
++ * the mini_fo dentry is too.
++ */
++ return (err1 || err2);
++}
++
++
++STATIC int
++mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
++{
++ int err = 0;
++ dentry_t *hidden_dentry;
++ dentry_t *hidden_sto_dentry;
++
++ /* hidden_dentry = mini_fo_hidden_dentry(dentry);
++ * hidden_sto_dentry = mini_fo_hidden_sto_dentry(dentry); */
++
++ /* state 1, 3, 4, 5: build the hash for the storage dentry */
++ if((dtopd(dentry)->state == MODIFIED) ||
++ (dtopd(dentry)->state == CREATED) ||
++ (dtopd(dentry)->state == DEL_REWRITTEN) ||
++ (dtopd(dentry)->state == DELETED)) {
++ hidden_sto_dentry = dtohd2(dentry);
++ if(hidden_sto_dentry &&
++ hidden_sto_dentry->d_op &&
++ hidden_sto_dentry->d_op->d_hash) {
++ err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
++ }
++ goto out;
++ }
++ /* state 2: build the hash for the base dentry */
++ if(dtopd(dentry)->state == UNMODIFIED) {
++ hidden_dentry = dtohd(dentry);
++ if(hidden_dentry &&
++ hidden_dentry->d_op &&
++ hidden_dentry->d_op->d_hash) {
++ err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
++ }
++ goto out;
++ }
++ /* state 6: build hash for the dentry that exists */
++ if(dtopd(dentry)->state == NON_EXISTANT) {
++ hidden_sto_dentry = dtohd2(dentry);
++ if(hidden_sto_dentry &&
++ hidden_sto_dentry->d_op &&
++ hidden_sto_dentry->d_op->d_hash) {
++ err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
++ goto out;
++ }
++ hidden_dentry = dtohd(dentry);
++ if(hidden_dentry &&
++ hidden_dentry->d_op &&
++ hidden_dentry->d_op->d_hash) {
++ err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
++ goto out;
++ }
++ }
++
++ printk(KERN_CRIT "mini_fo: d_hash: invalid state detected.\n");
++
++ out:
++ return err;
++}
++
++
++STATIC int
++mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
++{
++ int err;
++ dentry_t *hidden_dentry=NULL;
++
++ /* hidden_dentry = mini_fo_hidden_dentry(dentry); */
++ if(dtohd2(dentry))
++ hidden_dentry = dtohd2(dentry);
++ else if(dtohd(dentry))
++ hidden_dentry = dtohd(dentry);
++
++ if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
++ err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
++ } else {
++ err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
++ }
++
++ return err;
++}
++
++
++int
++mini_fo_d_delete(dentry_t *dentry)
++{
++ dentry_t *hidden_dentry;
++ dentry_t *hidden_sto_dentry;
++ int err = 0;
++
++ /* this could be a negative dentry, so check first */
++ if (!dtopd(dentry)) {
++ printk(KERN_CRIT "mini_fo_d_delete: negative dentry passed.\n");
++ goto out;
++ }
++ hidden_dentry = dtohd(dentry);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ if(hidden_dentry) {
++ if(hidden_dentry->d_op &&
++ hidden_dentry->d_op->d_delete) {
++ err = hidden_dentry->d_op->d_delete(hidden_dentry);
++ }
++ }
++ if(hidden_sto_dentry) {
++ if(hidden_sto_dentry->d_op &&
++ hidden_sto_dentry->d_op->d_delete) {
++ err = hidden_sto_dentry->d_op->d_delete(hidden_sto_dentry);
++ }
++ }
++
++ out:
++ return err;
++}
++
++
++void
++mini_fo_d_release(dentry_t *dentry)
++{
++ dentry_t *hidden_dentry;
++ dentry_t *hidden_sto_dentry;
++
++
++ /* this could be a negative dentry, so check first */
++ if (!dtopd(dentry)) {
++ printk(KERN_CRIT "mini_fo_d_release: no private data.\n");
++ goto out;
++ }
++ hidden_dentry = dtohd(dentry);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ if(hidden_dentry) {
++ /* decrement hidden dentry's counter and free its inode */
++ dput(hidden_dentry);
++ }
++ if(hidden_sto_dentry) {
++ /* decrement hidden dentry's counter and free its inode */
++ dput(hidden_sto_dentry);
++ }
++
++ /* free private data (mini_fo_dentry_info) here */
++ kfree(dtopd(dentry));
++ __dtopd(dentry) = NULL; /* just to be safe */
++ out:
++ return;
++}
++
++
++/*
++ * we don't really need mini_fo_d_iput, because dentry_iput will call iput() if
++ * mini_fo_d_iput is not defined. We left this implemented for ease of
++ * tracing/debugging.
++ */
++void
++mini_fo_d_iput(dentry_t *dentry, inode_t *inode)
++{
++ iput(inode);
++}
++
++
++struct dentry_operations mini_fo_dops = {
++ d_revalidate: mini_fo_d_revalidate,
++ d_hash: mini_fo_d_hash,
++ d_compare: mini_fo_d_compare,
++ d_release: mini_fo_d_release,
++ d_delete: mini_fo_d_delete,
++ d_iput: mini_fo_d_iput,
++};
+diff -urN linux-2.6.19.old/fs/mini_fo/file.c linux-2.6.19.dev/fs/mini_fo/file.c
+--- linux-2.6.19.old/fs/mini_fo/file.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/file.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,713 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++#define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1))
++
++/*******************
++ * File Operations *
++ *******************/
++
++STATIC loff_t
++mini_fo_llseek(file_t *file, loff_t offset, int origin)
++{
++ loff_t err;
++ file_t *hidden_file = NULL;
++
++ if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
++ /* Check if trying to llseek from a directory */
++ err = -EISDIR;
++ goto out;
++ }
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ } else {
++ hidden_file = ftohf(file);
++ }
++ }
++
++ /* always set hidden position to this one */
++ hidden_file->f_pos = file->f_pos;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ memcpy(&(hidden_file->f_ra),
++ &(file->f_ra),
++ sizeof(struct file_ra_state));
++#else
++ if (file->f_reada) { /* update readahead information if needed */
++ hidden_file->f_reada = file->f_reada;
++ hidden_file->f_ramax = file->f_ramax;
++ hidden_file->f_raend = file->f_raend;
++ hidden_file->f_ralen = file->f_ralen;
++ hidden_file->f_rawin = file->f_rawin;
++ }
++#endif
++ if (hidden_file->f_op && hidden_file->f_op->llseek)
++ err = hidden_file->f_op->llseek(hidden_file, offset, origin);
++ else
++ err = generic_file_llseek(hidden_file, offset, origin);
++
++ if (err < 0)
++ goto out;
++
++ if (err != file->f_pos) {
++ file->f_pos = err;
++ // ION maybe this?
++ // file->f_pos = hidden_file->f_pos;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ file->f_reada = 0;
++#endif
++ file->f_version++;
++ }
++
++ out:
++ return err;
++}
++
++
++/* mk: fanout capable */
++STATIC ssize_t
++mini_fo_read(file_t *file, char *buf, size_t count, loff_t *ppos)
++{
++ int err = -EINVAL;
++ file_t *hidden_file = NULL;
++ loff_t pos = *ppos;
++
++ if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
++ /* Check if trying to read from a directory */
++ /* printk(KERN_CRIT "mini_fo_read: ERROR: trying to read data from a directory.\n"); */
++ err = -EISDIR;
++ goto out;
++ }
++
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ } else {
++ hidden_file = ftohf(file);
++ }
++ }
++
++ if (!hidden_file->f_op || !hidden_file->f_op->read)
++ goto out;
++
++ err = hidden_file->f_op->read(hidden_file, buf, count, &pos);
++ *ppos = pos;
++
++ if (err >= 0) {
++ /* atime should also be updated for reads of size zero or more */
++ fist_copy_attr_atime(file->f_dentry->d_inode,
++ hidden_file->f_dentry->d_inode);
++ }
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ /*
++ * MAJOR HACK
++ * because pread() does not have any way to tell us that it is
++ * our caller, then we don't know for sure if we have to update
++ * the file positions. This hack relies on read() having passed us
++ * the "real" pointer of its struct file's f_pos field.
++ */
++ if (ppos == &file->f_pos)
++ hidden_file->f_pos = *ppos = pos;
++ if (hidden_file->f_reada) { /* update readahead information if needed */
++ file->f_reada = hidden_file->f_reada;
++ file->f_ramax = hidden_file->f_ramax;
++ file->f_raend = hidden_file->f_raend;
++ file->f_ralen = hidden_file->f_ralen;
++ file->f_rawin = hidden_file->f_rawin;
++ }
++#else
++ memcpy(&(file->f_ra),&(hidden_file->f_ra),sizeof(struct file_ra_state));
++#endif
++
++ out:
++ return err;
++}
++
++
++/* this mini_fo_write() does not modify data pages! */
++STATIC ssize_t
++mini_fo_write(file_t *file, const char *buf, size_t count, loff_t *ppos)
++{
++ int err = -EINVAL;
++ file_t *hidden_file = NULL;
++ inode_t *inode;
++ inode_t *hidden_inode;
++ loff_t pos = *ppos;
++
++ /* mk: fan out: */
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ } else {
++ /* This is bad! We have no storage file to write to. This
++ * should never happen because if a file is opened for
++ * writing, a copy should have been made earlier.
++ */
++ printk(KERN_CRIT "mini_fo: write : ERROR, no storage file to write.\n");
++ err = -EINVAL;
++ goto out;
++ }
++ }
++
++ inode = file->f_dentry->d_inode;
++ hidden_inode = itohi2(inode);
++ if(!hidden_inode) {
++ printk(KERN_CRIT "mini_fo: write: no sto inode found, not good.\n");
++ goto out;
++ }
++
++ if (!hidden_file->f_op || !hidden_file->f_op->write)
++ goto out;
++
++ /* adjust for append -- seek to the end of the file */
++ if (file->f_flags & O_APPEND)
++ pos = inode->i_size;
++
++ err = hidden_file->f_op->write(hidden_file, buf, count, &pos);
++
++ /*
++ * copy ctime and mtime from lower layer attributes
++ * atime is unchanged for both layers
++ */
++ if (err >= 0)
++ fist_copy_attr_times(inode, hidden_inode);
++
++ *ppos = pos;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ /*
++ * XXX: MAJOR HACK
++ *
++ * because pwrite() does not have any way to tell us that it is
++ * our caller, then we don't know for sure if we have to update
++ * the file positions. This hack relies on write() having passed us
++ * the "real" pointer of its struct file's f_pos field.
++ */
++ if (ppos == &file->f_pos)
++ hidden_file->f_pos = *ppos = pos;
++#endif
++ /* update this inode's size */
++ if (pos > inode->i_size)
++ inode->i_size = pos;
++
++ out:
++ return err;
++}
++
++/* Global variable to hold a file_t pointer.
++ * This serves to allow mini_fo_filldir function to know which file is
++ * beeing read, which is required for two reasons:
++ *
++ * - be able to call wol functions in order to avoid listing deleted
++ * base files.
++ * - if we're reading a directory which is in state 1, we need to
++ * maintain a list (in mini_fo_filldir) of which files allready
++ * have been copied to userspace,to detect files existing in base
++ * and storage and not list them twice.
++ */
++filldir_t mini_fo_filldir_orig;
++file_t *mini_fo_filldir_file;
++
++/* mainly copied from fs/readdir.c */
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
++ u64 ino, unsigned int d_type)
++#else
++mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
++ ino_t ino, unsigned int d_type)
++#endif
++{
++ struct getdents_callback * buf = (struct getdents_callback *) __buf;
++ file_t* file = mini_fo_filldir_file;
++
++ /* In theses states we filter meta files in storage (WOL) */
++ if(file && (dtopd(file->f_dentry)->state == MODIFIED ||
++ dtopd(file->f_dentry)->state == CREATED ||
++ dtopd(file->f_dentry)->state == DEL_REWRITTEN)) {
++
++ int tmp = strlen(META_FILENAME);
++ if(tmp == namlen) {
++ if(!strncmp(name, META_FILENAME, namlen))
++ return 0;
++ }
++ }
++
++ /* check if we are merging the contents of storage and base */
++ if(file && dtopd(file->f_dentry)->state == MODIFIED) {
++ /* check if we are still reading storage contents, if
++ * yes, we just save the name of the file for duplicate
++ * checking later. */
++
++ if(!ftopd(file)->rd.sto_done) {
++ /* put file into ndl list */
++ if(ndl_add_entry(&ftopd(file)->rd, name, namlen))
++ printk(KERN_CRIT "mini_fo_filldir: Error adding to ndl.\n");
++ } else {
++ /* check if file has been deleted */
++ if(meta_check_d_entry(file->f_dentry, name, namlen))
++ return 0;
++
++ /* do duplicate checking */
++ if(ndl_check_entry(&ftopd(file)->rd, name, namlen))
++ return 0;
++ }
++ }
++
++ return mini_fo_filldir_orig(buf, name, namlen, offset, ino, d_type);
++}
++
++
++STATIC int
++mini_fo_readdir(file_t *file, void *dirent, filldir_t filldir)
++{
++ int err = 0;/* mk: ??? -ENOTDIR; */
++ file_t *hidden_file = NULL;
++ file_t *hidden_sto_file = NULL;
++ inode_t *inode;
++ struct getdents_callback *buf;
++ int oldcount;
++
++#if defined(FIST_FILTER_NAME) || defined(FIST_FILTER_SCA)
++ struct mini_fo_getdents_callback buf;
++#endif /* FIST_FILTER_NAME || FIST_FILTER_SCA */
++
++ buf = (struct getdents_callback *) dirent;
++ oldcount = buf->count;
++ inode = file->f_dentry->d_inode;
++ mini_fo_filldir_file = file;
++ mini_fo_filldir_orig = filldir;
++
++ ftopd(file)->rd.sto_done = 0;
++ do {
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_sto_file = ftohf2(file);
++ err = vfs_readdir(hidden_sto_file, mini_fo_filldir, dirent);
++ file->f_pos = hidden_sto_file->f_pos;
++ if (err > 0)
++ fist_copy_attr_atime(inode, hidden_sto_file->f_dentry->d_inode);
++ /* not finshed yet, we'll be called again */
++ if (buf->count != oldcount)
++ break;
++ }
++
++ ftopd(file)->rd.sto_done = 1;
++
++ if(ftohf(file)) {
++ hidden_file = ftohf(file);
++ err = vfs_readdir(hidden_file, mini_fo_filldir, dirent);
++ file->f_pos = hidden_file->f_pos;
++ if (err > 0)
++ fist_copy_attr_atime(inode, hidden_file->f_dentry->d_inode);
++ }
++
++ }
++ } while (0);
++
++ /* mk:
++ * we need to check if all the directory data has been copied to userspace,
++ * or if we will be called again by userspace to complete the operation.
++ */
++ if(buf->count == oldcount) {
++ ndl_put_list(&ftopd(file)->rd);
++ }
++
++ /* unset this, safe */
++ mini_fo_filldir_file = NULL;
++ return err;
++}
++
++
++STATIC unsigned int
++mini_fo_poll(file_t *file, poll_table *wait)
++{
++ unsigned int mask = DEFAULT_POLLMASK;
++ file_t *hidden_file = NULL;
++
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ } else {
++ hidden_file = ftohf(file);
++ }
++ }
++
++ if (!hidden_file->f_op || !hidden_file->f_op->poll)
++ goto out;
++
++ mask = hidden_file->f_op->poll(hidden_file, wait);
++
++ out:
++ return mask;
++}
++
++/* FIST-LITE special version of mmap */
++STATIC int
++mini_fo_mmap(file_t *file, vm_area_t *vma)
++{
++ int err = 0;
++ file_t *hidden_file = NULL;
++
++ /* fanout capability */
++ if (ftopd(file) != NULL) {
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ } else {
++ hidden_file = ftohf(file);
++ }
++ }
++
++ ASSERT(hidden_file != NULL);
++ ASSERT(hidden_file->f_op != NULL);
++ ASSERT(hidden_file->f_op->mmap != NULL);
++
++ vma->vm_file = hidden_file;
++ err = hidden_file->f_op->mmap(hidden_file, vma);
++ get_file(hidden_file); /* make sure it doesn't get freed on us */
++ fput(file); /* no need to keep extra ref on ours */
++
++ return err;
++}
++
++
++
++STATIC int
++mini_fo_open(inode_t *inode, file_t *file)
++{
++ int err = 0;
++ int hidden_flags;
++ file_t *hidden_file = NULL;
++ dentry_t *hidden_dentry = NULL;
++
++ /* fanout stuff */
++ file_t *hidden_sto_file = NULL;
++ dentry_t *hidden_sto_dentry = NULL;
++
++ __ftopd(file) =
++ kmalloc(sizeof(struct mini_fo_file_info), GFP_KERNEL);
++ if (!ftopd(file)) {
++ err = -ENOMEM;
++ goto out;
++ }
++
++ /* init the readdir_helper structure */
++ INIT_LIST_HEAD(&ftopd(file)->rd.ndl_list);
++ ftopd(file)->rd.ndl_size = 0;
++
++ /* In certain paths this could stay uninitalized and cause trouble */
++ ftohf(file) = NULL;
++ ftohf2(file) = NULL;
++ hidden_flags = file->f_flags;
++
++ /* create storage files? */
++ if(dtost(file->f_dentry) == UNMODIFIED) {
++ if(!IS_WRITE_FLAG(file->f_flags)) {
++ hidden_dentry = dtohd(file->f_dentry);
++ dget(hidden_dentry);
++ /* dentry_open will decrement mnt refcnt if err.
++ * otherwise fput() will do an mntput() for us upon file close. */
++ mntget(stopd(inode->i_sb)->hidden_mnt);
++ hidden_file = dentry_open(hidden_dentry,
++ stopd(inode->i_sb)->hidden_mnt,
++ hidden_flags);
++ if (IS_ERR(hidden_file)) {
++ err = PTR_ERR(hidden_file);
++ dput(hidden_dentry);
++ goto out;
++ }
++ ftohf(file) = hidden_file; /* link two files */
++ goto out;
++ }
++ else {
++ if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
++ err = dir_unmod_to_mod(file->f_dentry);
++ } else
++ err = nondir_unmod_to_mod(file->f_dentry, 1);
++
++ if (err) {
++ printk("mini_fo_open: ERROR creating storage file.\n");
++ goto out;
++ }
++ }
++ }
++ hidden_sto_dentry = dtohd2(file->f_dentry);
++ dget(hidden_sto_dentry);
++
++ if(dtopd(file->f_dentry)->state == MODIFIED) {
++ /* Directorys are special, interpose on both lower level files */
++ if(S_ISDIR(itohi(inode)->i_mode)) {
++ /* check for invalid file types of lower level files */
++ if(!(S_ISDIR(itohi(inode)->i_mode) && S_ISDIR(itohi2(inode)->i_mode))) {
++ printk(KERN_CRIT "mini_fo_open: meta data corruption detected.\n");
++ dput(hidden_sto_dentry);
++ err = -EINVAL;
++ goto out;
++ }
++
++ /* lower level directorys are ok, open the base file */
++ hidden_dentry = dtohd(file->f_dentry);
++ dget(hidden_dentry);
++
++ mntget(stopd(inode->i_sb)->hidden_mnt);
++ hidden_file = dentry_open(hidden_dentry,
++ stopd(inode->i_sb)->hidden_mnt,
++ hidden_flags);
++ if (IS_ERR(hidden_file)) {
++ err = PTR_ERR(hidden_file);
++ dput(hidden_dentry);
++ dput(hidden_sto_dentry);
++ goto out;
++ }
++ ftohf(file) = hidden_file; /* link the two files */
++ }
++ }
++
++ if(!exists_in_storage(file->f_dentry)) {
++ printk(KERN_CRIT "mini_fo_open: invalid file state detected.\n");
++ err = -EINVAL;
++ dput(hidden_sto_dentry);
++
++ /* If the base file has been opened, we need to close it here */
++ if(ftohf(file)) {
++ if (hidden_file->f_op && hidden_file->f_op->flush)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ hidden_file->f_op->flush(hidden_file, NULL);
++#else
++ hidden_file->f_op->flush(hidden_file);
++#endif
++ dput(hidden_dentry);
++ }
++ goto out;
++ }
++
++ /* ok, now we can safely open the storage file */
++ mntget(stopd(inode->i_sb)->hidden_mnt2);
++ hidden_sto_file = dentry_open(hidden_sto_dentry,
++ stopd(inode->i_sb)->hidden_mnt2,
++ hidden_flags);
++
++ /* dentry_open dputs the dentry if it fails */
++ if (IS_ERR(hidden_sto_file)) {
++ err = PTR_ERR(hidden_sto_file);
++ /* close base file if open */
++ if(ftohf(file)) {
++ if (hidden_file->f_op && hidden_file->f_op->flush)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ hidden_file->f_op->flush(hidden_file, NULL);
++#else
++ hidden_file->f_op->flush(hidden_file);
++#endif
++ dput(hidden_dentry);
++ }
++ goto out;
++ }
++ ftohf2(file) = hidden_sto_file; /* link storage file */
++
++ out:
++ if (err < 0 && ftopd(file)) {
++ kfree(ftopd(file));
++ }
++ return err;
++}
++
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++mini_fo_flush(file_t *file, fl_owner_t id)
++#else
++mini_fo_flush(file_t *file)
++#endif
++{
++ int err1 = 0; /* assume ok (see open.c:close_fp) */
++ int err2 = 0;
++ file_t *hidden_file = NULL;
++
++ check_mini_fo_file(file);
++
++ /* mk: we don't do any state checking here, as its not worth the time.
++ * Just flush the lower level files if they exist.
++ */
++ if(ftopd(file) != NULL) {
++ if(ftohf(file) != NULL) {
++ hidden_file = ftohf(file);
++ if (hidden_file->f_op && hidden_file->f_op->flush)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ err1 = hidden_file->f_op->flush(hidden_file, id);
++#else
++ err1 = hidden_file->f_op->flush(hidden_file);
++#endif
++ }
++ if(ftohf2(file) != NULL) {
++ hidden_file = ftohf2(file);
++ if (hidden_file->f_op && hidden_file->f_op->flush)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ err2 = hidden_file->f_op->flush(hidden_file, id);
++#else
++ err2 = hidden_file->f_op->flush(hidden_file);
++#endif
++ }
++ }
++ return (err1 | err2);
++}
++
++
++STATIC int
++mini_fo_release(inode_t *inode, file_t *file)
++{
++ int err = 0;
++ file_t *hidden_file = NULL;
++
++ if (ftopd(file) != NULL) {
++ if(ftohf(file)) {
++ hidden_file = ftohf(file);
++ fput(hidden_file);
++ }
++ if(ftohf2(file)) {
++ hidden_file = ftohf2(file);
++ fput(hidden_file);
++ }
++ kfree(ftopd(file));
++ }
++ return err;
++}
++
++STATIC int
++mini_fo_fsync(file_t *file, dentry_t *dentry, int datasync)
++{
++ int err1 = 0;
++ int err2 = 0;
++ file_t *hidden_file = NULL;
++ dentry_t *hidden_dentry;
++
++ check_mini_fo_file(file);
++
++ if ((hidden_file = ftohf(file)) != NULL) {
++ hidden_dentry = dtohd(dentry);
++ if (hidden_file->f_op && hidden_file->f_op->fsync) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ err1 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ }
++
++ if ((hidden_file = ftohf2(file)) != NULL) {
++ hidden_dentry = dtohd2(dentry);
++ if (hidden_file->f_op && hidden_file->f_op->fsync) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ err2 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ }
++ else
++ goto err;
++
++err:
++ return (err1 || err2);
++}
++
++
++STATIC int
++mini_fo_fasync(int fd, file_t *file, int flag)
++{
++ int err1 = 0;
++ int err2 = 0;
++
++ file_t *hidden_file = NULL;
++
++ check_mini_fo_file(file);
++
++ if((hidden_file = ftohf(file)) != NULL) {
++ err1 = hidden_file->f_op->fasync(fd, hidden_file, flag);
++ }
++ if((hidden_file = ftohf2(file)) != NULL) {
++ err2 = hidden_file->f_op->fasync(fd, hidden_file, flag);
++ }
++
++ return (err1 || err2);
++}
++
++
++
++struct file_operations mini_fo_dir_fops =
++ {
++ read: generic_read_dir,
++ write: mini_fo_write,
++ readdir: mini_fo_readdir,
++ poll: mini_fo_poll,
++ /* ioctl: mini_fo_ioctl, */
++ mmap: mini_fo_mmap,
++ open: mini_fo_open,
++ flush: mini_fo_flush,
++ release: mini_fo_release,
++ fsync: mini_fo_fsync,
++ fasync: mini_fo_fasync,
++ /* not needed lock: mini_fo_lock, */
++ /* not needed: readv */
++ /* not needed: writev */
++ /* not implemented: sendpage */
++ /* not implemented: get_unmapped_area */
++ };
++
++struct file_operations mini_fo_main_fops =
++ {
++ llseek: mini_fo_llseek,
++ read: mini_fo_read,
++ write: mini_fo_write,
++ readdir: mini_fo_readdir,
++ poll: mini_fo_poll,
++ /* ioctl: mini_fo_ioctl, */
++ mmap: mini_fo_mmap,
++ open: mini_fo_open,
++ flush: mini_fo_flush,
++ release: mini_fo_release,
++ fsync: mini_fo_fsync,
++ fasync: mini_fo_fasync,
++ /* not needed: lock: mini_fo_lock, */
++ /* not needed: readv */
++ /* not needed: writev */
++ /* not implemented: sendpage */
++ /* not implemented: get_unmapped_area */
++ };
+diff -urN linux-2.6.19.old/fs/mini_fo/fist.h linux-2.6.19.dev/fs/mini_fo/fist.h
+--- linux-2.6.19.old/fs/mini_fo/fist.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/fist.h 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,252 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++
++/*
++ * $Id$
++ */
++
++#ifndef __FIST_H_
++#define __FIST_H_
++
++/*
++ * KERNEL ONLY CODE:
++ */
++#ifdef __KERNEL__
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
++#include <linux/autoconf.h>
++#else
++#include <linux/config.h>
++#endif
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++#ifdef CONFIG_MODVERSIONS
++# define MODVERSIONS
++# include <linux/modversions.h>
++#endif /* CONFIG_MODVERSIONS */
++#endif /* KERNEL_VERSION < 2.6.0 */
++#include <linux/sched.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/string.h>
++#include <linux/stat.h>
++#include <linux/errno.h>
++#include <linux/wait.h>
++#include <linux/limits.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++#include <linux/locks.h>
++#else
++#include <linux/buffer_head.h>
++#include <linux/pagemap.h>
++#include <linux/namei.h>
++#include <linux/module.h>
++#include <linux/mount.h>
++#include <linux/page-flags.h>
++#include <linux/writeback.h>
++#include <linux/statfs.h>
++#endif
++#include <linux/smp.h>
++#include <linux/smp_lock.h>
++#include <linux/file.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++#include <linux/poll.h>
++#include <linux/list.h>
++#include <linux/init.h>
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
++#include <linux/xattr.h>
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++#include <linux/security.h>
++#endif
++
++#include <linux/swap.h>
++
++#include <asm/system.h>
++#include <asm/segment.h>
++#include <asm/mman.h>
++#include <linux/seq_file.h>
++
++/*
++ * MACROS:
++ */
++
++/* those mapped to ATTR_* were copied from linux/fs.h */
++#define FA_MODE ATTR_MODE
++#define FA_UID ATTR_UID
++#define FA_GID ATTR_GID
++#define FA_SIZE ATTR_SIZE
++#define FA_ATIME ATTR_ATIME
++#define FA_MTIME ATTR_MTIME
++#define FA_CTIME ATTR_CTIME
++#define FA_ATIME_SET ATTR_ATIME_SET
++#define FA_MTIME_SET ATTR_MTIME_SET
++#define FA_FORCE ATTR_FORCE
++#define FA_ATTR_FLAGS ATTR_ATTR_FLAG
++
++/* must be greater than all other ATTR_* flags! */
++#define FA_NLINK 2048
++#define FA_BLKSIZE 4096
++#define FA_BLOCKS 8192
++#define FA_TIMES (FA_ATIME|FA_MTIME|FA_CTIME)
++#define FA_ALL 0
++
++/* macros to manage changes between kernels */
++#define INODE_DATA(i) (&(i)->i_data)
++
++#define MIN(x,y) ((x < y) ? (x) : (y))
++#define MAX(x,y) ((x > y) ? (x) : (y))
++#define MAXPATHLEN PATH_MAX
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
++# define lookup_one_len(a,b,c) lookup_one(a,b)
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8)
++# define generic_file_llseek default_llseek
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8) */
++
++#ifndef SEEK_SET
++# define SEEK_SET 0
++#endif /* not SEEK_SET */
++
++#ifndef SEEK_CUR
++# define SEEK_CUR 1
++#endif /* not SEEK_CUR */
++
++#ifndef SEEK_END
++# define SEEK_END 2
++#endif /* not SEEK_END */
++
++#ifndef DEFAULT_POLLMASK
++# define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
++#endif /* not DEFAULT_POLLMASK */
++
++/* XXX: fix this so fistgen generates kfree() code directly */
++#define kfree_s(a,b) kfree(a)
++
++/*
++ * TYPEDEFS:
++ */
++typedef struct dentry dentry_t;
++typedef struct file file_t;
++typedef struct inode inode_t;
++typedef inode_t vnode_t;
++typedef struct page page_t;
++typedef struct qstr qstr_t;
++typedef struct super_block super_block_t;
++typedef super_block_t vfs_t;
++typedef struct vm_area_struct vm_area_t;
++
++
++/*
++ * EXTERNALS:
++ */
++
++#define FPPF(str,page) printk("PPF %s 0x%x/%d: Lck:%d Err:%d Ref:%d Upd:%d Other::%d:%d:%d:%d:\n", \
++ str, \
++ (int) page, \
++ (int) page->index, \
++ (PageLocked(page) ? 1 : 0), \
++ (PageError(page) ? 1 : 0), \
++ (PageReferenced(page) ? 1 : 0), \
++ (Page_Uptodate(page) ? 1 : 0), \
++ (PageDecrAfter(page) ? 1 : 0), \
++ (PageSlab(page) ? 1 : 0), \
++ (PageSwapCache(page) ? 1 : 0), \
++ (PageReserved(page) ? 1 : 0) \
++ )
++#define EZKDBG printk("EZK %s:%d:%s\n",__FILE__,__LINE__,__FUNCTION__)
++#if 0
++# define EZKDBG1 printk("EZK %s:%d\n",__FILE__,__LINE__)
++#else
++# define EZKDBG1
++#endif
++
++extern int fist_get_debug_value(void);
++extern int fist_set_debug_value(int val);
++#if 0 /* mini_fo doesn't need these */
++extern void fist_dprint_internal(int level, char *str,...);
++extern void fist_print_dentry(char *str, const dentry_t *dentry);
++extern void fist_print_inode(char *str, const inode_t *inode);
++extern void fist_print_file(char *str, const file_t *file);
++extern void fist_print_buffer_flags(char *str, struct buffer_head *buffer);
++extern void fist_print_page_flags(char *str, page_t *page);
++extern void fist_print_page_bytes(char *str, page_t *page);
++extern void fist_print_pte_flags(char *str, const page_t *page);
++extern void fist_checkinode(inode_t *inode, char *msg);
++extern void fist_print_sb(char *str, const super_block_t *sb);
++
++/* §$% by mk: special debug functions */
++extern void fist_mk_print_dentry(char *str, const dentry_t *dentry);
++extern void fist_mk_print_inode(char *str, const inode_t *inode);
++
++extern char *add_indent(void);
++extern char *del_indent(void);
++#endif/* mini_fo doesn't need these */
++
++
++#define STATIC
++#define ASSERT(EX) \
++do { \
++ if (!(EX)) { \
++ printk(KERN_CRIT "ASSERTION FAILED: %s at %s:%d (%s)\n", #EX, \
++ __FILE__, __LINE__, __FUNCTION__); \
++ (*((char *)0))=0; \
++ } \
++} while (0)
++/* same ASSERT, but tell me who was the caller of the function */
++#define ASSERT2(EX) \
++do { \
++ if (!(EX)) { \
++ printk(KERN_CRIT "ASSERTION FAILED (caller): %s at %s:%d (%s)\n", #EX, \
++ file, line, func); \
++ (*((char *)0))=0; \
++ } \
++} while (0)
++
++#if 0 /* mini_fo doesn't need these */
++#define dprintk(format, args...) printk(KERN_DEBUG format, ##args)
++#define fist_dprint(level, str, args...) fist_dprint_internal(level, KERN_DEBUG str, ## args)
++#define print_entry_location() fist_dprint(4, "%sIN: %s %s:%d\n", add_indent(), __FUNCTION__, __FILE__, __LINE__)
++#define print_exit_location() fist_dprint(4, "%s OUT: %s %s:%d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__)
++#define print_exit_status(status) fist_dprint(4, "%s OUT: %s %s:%d, STATUS: %d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, status)
++#define print_exit_pointer(status) \
++do { \
++ if (IS_ERR(status)) \
++ fist_dprint(4, "%s OUT: %s %s:%d, RESULT: %ld\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
++ else \
++ fist_dprint(4, "%s OUT: %s %s:%d, RESULT: 0x%x\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
++} while (0)
++#endif/* mini_fo doesn't need these */
++
++#endif /* __KERNEL__ */
++
++
++/*
++ * DEFINITIONS FOR USER AND KERNEL CODE:
++ * (Note: ioctl numbers 1--9 are reserved for fistgen, the rest
++ * are auto-generated automatically based on the user's .fist file.)
++ */
++# define FIST_IOCTL_GET_DEBUG_VALUE _IOR(0x15, 1, int)
++# define FIST_IOCTL_SET_DEBUG_VALUE _IOW(0x15, 2, int)
++
++#endif /* not __FIST_H_ */
+diff -urN linux-2.6.19.old/fs/mini_fo/inode.c linux-2.6.19.dev/fs/mini_fo/inode.c
+--- linux-2.6.19.old/fs/mini_fo/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/inode.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,1573 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd)
++#else
++mini_fo_create(inode_t *dir, dentry_t *dentry, int mode)
++#endif
++{
++ int err = 0;
++
++ check_mini_fo_dentry(dentry);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err = create_sto_reg_file(dentry, mode, nd);
++#else
++ err = create_sto_reg_file(dentry, mode);
++#endif
++ check_mini_fo_dentry(dentry);
++ return err;
++}
++
++
++STATIC dentry_t *
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_lookup(inode_t *dir, dentry_t *dentry, struct nameidata* nd)
++#else
++mini_fo_lookup(inode_t *dir, dentry_t *dentry)
++#endif
++{
++ int err = 0;
++ dentry_t *hidden_dir_dentry;
++ dentry_t *hidden_dentry = NULL;
++
++ dentry_t *hidden_sto_dir_dentry;
++ dentry_t *hidden_sto_dentry = NULL;
++
++ /* whiteout flag */
++ int del_flag = 0;
++ char *bpath = NULL;
++
++ const char *name;
++ unsigned int namelen;
++
++ /* Don't allow lookups of META-files */
++ namelen = strlen(META_FILENAME);
++ if(namelen == dentry->d_name.len) {
++ if(!strncmp(dentry->d_name.name, META_FILENAME, namelen)) {
++ err = -ENOENT;
++ goto out;
++ }
++ }
++
++ hidden_dir_dentry = dtohd(dentry->d_parent);
++ hidden_sto_dir_dentry = dtohd2(dentry->d_parent);
++
++ name = dentry->d_name.name;
++ namelen = dentry->d_name.len;
++
++ /* must initialize dentry operations */
++ dentry->d_op = &mini_fo_dops;
++
++ /* setup the del_flag */
++ del_flag = __meta_check_d_entry(dir, name, namelen);
++ bpath = __meta_check_r_entry(dir, name, namelen);
++
++ /* perform the lookups of base and storage files:
++ *
++ * This caused some serious trouble, as a lookup_one_len passing
++ * a negative dentry oopses. Solution is to only do the lookup
++ * if the dentry is positive, else we set it to NULL
++ * More trouble, who said a *_dir_dentry can't be NULL?
++ */
++ if(bpath) {
++ /* Cross-Interposing (C), yeah! */
++ hidden_dentry = bpath_walk(dir->i_sb, bpath);
++ if(!hidden_dentry || !hidden_dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo_lookup: bpath_walk failed.\n");
++ err= -EINVAL;
++ goto out;
++ }
++
++ /* this can be set up safely without fear of spaghetti
++ * interposing as it is only used for copying times */
++ hidden_dir_dentry = hidden_dentry->d_parent;
++ kfree(bpath);
++ }
++ else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
++ hidden_dentry =
++ lookup_one_len(name, hidden_dir_dentry, namelen);
++ else
++ hidden_dentry = NULL;
++
++ if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
++ hidden_sto_dentry =
++ lookup_one_len(name, hidden_sto_dir_dentry, namelen);
++ else
++ hidden_sto_dentry = NULL;
++
++ /* catch error in lookup */
++ if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
++ /* mk: we need to call dput on the dentry, whose
++ * lookup_one_len operation failed, in order to avoid
++ * unmount trouble.
++ */
++ if(IS_ERR(hidden_dentry)) {
++ printk(KERN_CRIT "mini_fo_lookup: ERR from base dentry, lookup failed.\n");
++ err = PTR_ERR(hidden_dentry);
++ } else {
++ dput(hidden_dentry);
++ }
++ if(IS_ERR(hidden_sto_dentry)) {
++ printk(KERN_CRIT "mini_fo_lookup: ERR from storage dentry, lookup failed.\n");
++ err = PTR_ERR(hidden_sto_dentry);
++ } else {
++ dput(hidden_sto_dentry);
++ }
++ goto out;
++ }
++
++ /* allocate dentry private data */
++ __dtopd(dentry) = (struct mini_fo_dentry_info *)
++ kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
++
++ if (!dtopd(dentry)) {
++ err = -ENOMEM;
++ goto out_dput;
++ }
++
++ /* check for different states of the mini_fo file to be looked up. */
++
++ /* state 1, file has been modified */
++ if(hidden_dentry && hidden_sto_dentry &&
++ hidden_dentry->d_inode && hidden_sto_dentry->d_inode && !del_flag) {
++
++ /* update parent directory's atime */
++ fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
++
++ dtopd(dentry)->state = MODIFIED;
++ dtohd(dentry) = hidden_dentry;
++ dtohd2(dentry) = hidden_sto_dentry;
++
++ err = mini_fo_tri_interpose(hidden_dentry,
++ hidden_sto_dentry,
++ dentry, dir->i_sb, 1);
++ if (err) {
++ printk(KERN_CRIT "mini_fo_lookup: error interposing (state1).\n");
++ goto out_free;
++ }
++ goto out;
++ }
++ /* state 2, file is unmodified */
++ if(hidden_dentry && hidden_dentry->d_inode && !del_flag) {
++
++ fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
++
++ dtopd(dentry)->state = UNMODIFIED;
++ dtohd(dentry) = hidden_dentry;
++ dtohd2(dentry) = hidden_sto_dentry; /* could be negative */
++
++ err = mini_fo_tri_interpose(hidden_dentry,
++ hidden_sto_dentry,
++ dentry, dir->i_sb, 1);
++ if (err) {
++ printk(KERN_CRIT "mini_fo_lookup: error interposing (state2).\n");
++ goto out_free;
++ }
++ goto out;
++ }
++ /* state 3, file has been newly created */
++ if(hidden_sto_dentry && hidden_sto_dentry->d_inode && !del_flag) {
++
++ fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
++ dtopd(dentry)->state = CREATED;
++ dtohd(dentry) = hidden_dentry; /* could be negative */
++ dtohd2(dentry) = hidden_sto_dentry;
++
++ err = mini_fo_tri_interpose(hidden_dentry,
++ hidden_sto_dentry,
++ dentry, dir->i_sb, 1);
++ if (err) {
++ printk(KERN_CRIT "mini_fo_lookup: error interposing (state3).\n");
++ goto out_free;
++ }
++ goto out;
++ }
++
++ /* state 4, file has deleted and created again. */
++ if(hidden_dentry && hidden_sto_dentry &&
++ hidden_dentry->d_inode &&
++ hidden_sto_dentry->d_inode && del_flag) {
++
++ fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
++ dtopd(dentry)->state = DEL_REWRITTEN;
++ dtohd(dentry) = NULL;
++ dtohd2(dentry) = hidden_sto_dentry;
++
++ err = mini_fo_tri_interpose(NULL,
++ hidden_sto_dentry,
++ dentry, dir->i_sb, 1);
++ if (err) {
++ printk(KERN_CRIT "mini_fo_lookup: error interposing (state4).\n");
++ goto out_free;
++ }
++ /* We will never need this dentry again, as the file has been
++ * deleted from base */
++ dput(hidden_dentry);
++ goto out;
++ }
++ /* state 5, file has been deleted in base */
++ if(hidden_dentry && hidden_sto_dentry &&
++ hidden_dentry->d_inode &&
++ !hidden_sto_dentry->d_inode && del_flag) {
++
++ /* check which parents atime we need for updating */
++ if(hidden_sto_dir_dentry->d_inode)
++ fist_copy_attr_atime(dir,
++ hidden_sto_dir_dentry->d_inode);
++ else
++ fist_copy_attr_atime(dir,
++ hidden_dir_dentry->d_inode);
++
++ dtopd(dentry)->state = DELETED;
++ dtohd(dentry) = NULL;
++ dtohd2(dentry) = hidden_sto_dentry;
++
++ /* add negative dentry to dcache to speed up lookups */
++ d_add(dentry, NULL);
++ dput(hidden_dentry);
++ goto out;
++ }
++ /* state 6, file does not exist */
++ if(((hidden_dentry && !hidden_dentry->d_inode) ||
++ (hidden_sto_dentry && !hidden_sto_dentry->d_inode)) && !del_flag)
++ {
++ /* check which parents atime we need for updating */
++ if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
++ fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
++ else
++ fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
++
++ dtopd(dentry)->state = NON_EXISTANT;
++ dtohd(dentry) = hidden_dentry;
++ dtohd2(dentry) = hidden_sto_dentry;
++ d_add(dentry, NULL);
++ goto out;
++ }
++
++ /* if we get to here, were in an invalid state. bad. */
++ printk(KERN_CRIT "mini_fo_lookup: ERROR, meta data corruption detected.\n");
++
++ /* end state checking */
++ out_free:
++ d_drop(dentry); /* so that our bad dentry will get destroyed */
++ kfree(dtopd(dentry));
++ __dtopd(dentry) = NULL; /* be safe */
++
++ out_dput:
++ if(hidden_dentry)
++ dput(hidden_dentry);
++ if(hidden_sto_dentry)
++ dput(hidden_sto_dentry); /* drops usage count and marks for release */
++
++ out:
++ /* initalize wol if file exists and is directory */
++ if(dentry->d_inode) {
++ if(S_ISDIR(dentry->d_inode->i_mode)) {
++ itopd(dentry->d_inode)->deleted_list_size = -1;
++ itopd(dentry->d_inode)->renamed_list_size = -1;
++ meta_build_lists(dentry);
++ }
++ }
++ return ERR_PTR(err);
++}
++
++
++STATIC int
++mini_fo_link(dentry_t *old_dentry, inode_t *dir, dentry_t *new_dentry)
++{
++ int err;
++ dentry_t *hidden_old_dentry;
++ dentry_t *hidden_new_dentry;
++ dentry_t *hidden_dir_dentry;
++
++
++ check_mini_fo_dentry(old_dentry);
++ check_mini_fo_dentry(new_dentry);
++ check_mini_fo_inode(dir);
++
++ /* no links to directorys and existing targets target allowed */
++ if(S_ISDIR(old_dentry->d_inode->i_mode) ||
++ is_mini_fo_existant(new_dentry)) {
++ err = -EPERM;
++ goto out;
++ }
++
++ /* bring it directly from unmod to del_rew */
++ if(dtost(old_dentry) == UNMODIFIED) {
++ err = nondir_unmod_to_mod(old_dentry, 1);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++ err = meta_add_d_entry(old_dentry->d_parent,
++ old_dentry->d_name.name,
++ old_dentry->d_name.len);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++ dput(dtohd(old_dentry));
++ dtohd(old_dentry) = NULL;
++ dtost(old_dentry) = DEL_REWRITTEN;
++ }
++
++ err = get_neg_sto_dentry(new_dentry);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ hidden_old_dentry = dtohd2(old_dentry);
++ hidden_new_dentry = dtohd2(new_dentry);
++
++ dget(hidden_old_dentry);
++ dget(hidden_new_dentry);
++
++ /* was: hidden_dir_dentry = lock_parent(hidden_new_dentry); */
++ hidden_dir_dentry = dget(hidden_new_dentry->d_parent);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dir_dentry->d_inode->i_sem);
++#endif
++
++ err = vfs_link(hidden_old_dentry,
++ hidden_dir_dentry->d_inode,
++ hidden_new_dentry);
++ if (err || !hidden_new_dentry->d_inode)
++ goto out_lock;
++
++ dtost(new_dentry) = CREATED;
++ err = mini_fo_tri_interpose(NULL, hidden_new_dentry, new_dentry, dir->i_sb, 0);
++ if (err)
++ goto out_lock;
++
++ fist_copy_attr_timesizes(dir, hidden_new_dentry->d_inode);
++ /* propagate number of hard-links */
++ old_dentry->d_inode->i_nlink = itohi2(old_dentry->d_inode)->i_nlink;
++
++ out_lock:
++ /* was: unlock_dir(hidden_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_dir_dentry);
++
++ dput(hidden_new_dentry);
++ dput(hidden_old_dentry);
++ if (!new_dentry->d_inode)
++ d_drop(new_dentry);
++
++ out:
++ return err;
++}
++
++
++STATIC int
++mini_fo_unlink(inode_t *dir, dentry_t *dentry)
++{
++ int err = 0;
++
++ dget(dentry);
++ if(dtopd(dentry)->state == MODIFIED) {
++ err = nondir_mod_to_del(dentry);
++ goto out;
++ }
++ else if(dtopd(dentry)->state == UNMODIFIED) {
++ err = nondir_unmod_to_del(dentry);
++ goto out;
++ }
++ else if(dtopd(dentry)->state == CREATED) {
++ err = nondir_creat_to_del(dentry);
++ goto out;
++ }
++ else if(dtopd(dentry)->state == DEL_REWRITTEN) {
++ err = nondir_del_rew_to_del(dentry);
++ goto out;
++ }
++
++ printk(KERN_CRIT "mini_fo_unlink: ERROR, invalid state detected.\n");
++
++ out:
++ fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
++
++ if(!err) {
++ /* is this causing my pain? d_delete(dentry); */
++ d_drop(dentry);
++ }
++
++ dput(dentry);
++ return err;
++}
++
++
++STATIC int
++mini_fo_symlink(inode_t *dir, dentry_t *dentry, const char *symname)
++{
++ int err=0;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ umode_t mode;
++#endif
++
++ /* Fail if the symlink file exists */
++ if(!(dtost(dentry) == DELETED ||
++ dtost(dentry) == NON_EXISTANT)) {
++ err = -EEXIST;
++ goto out;
++ }
++
++ err = get_neg_sto_dentry(dentry);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++ hidden_sto_dentry = dtohd2(dentry);
++
++ dget(hidden_sto_dentry);
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ mode = S_IALLUGO;
++ err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry, symname, mode);
++#else
++ err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ symname);
++#endif
++ if (err || !hidden_sto_dentry->d_inode)
++ goto out_lock;
++
++ if(dtost(dentry) == DELETED) {
++ dtost(dentry) = DEL_REWRITTEN;
++ err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ } else if(dtost(dentry) == NON_EXISTANT) {
++ dtost(dentry) = CREATED;
++ err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
++
++ out_lock:
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++
++ dput(hidden_sto_dentry);
++ if (!dentry->d_inode)
++ d_drop(dentry);
++ out:
++ return err;
++}
++
++STATIC int
++mini_fo_mkdir(inode_t *dir, dentry_t *dentry, int mode)
++{
++ int err;
++
++ err = create_sto_dir(dentry, mode);
++
++ check_mini_fo_dentry(dentry);
++
++ return err;
++}
++
++
++STATIC int
++mini_fo_rmdir(inode_t *dir, dentry_t *dentry)
++{
++ int err = 0;
++
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++ dentry_t *meta_dentry;
++ inode_t *hidden_sto_dir = NULL;
++
++ check_mini_fo_dentry(dentry);
++ check_mini_fo_inode(dir);
++
++ dget(dentry);
++ if(dtopd(dentry)->state == MODIFIED) {
++ /* XXX: disabled, because it does not bother to check files on
++ * the original filesystem - just a hack, but better than simply
++ * removing it without testing */
++ err = -EINVAL;
++ goto out;
++
++ hidden_sto_dir = itohi2(dir);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was:hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ /* avoid destroying the hidden inode if the file is in use */
++ dget(hidden_sto_dentry);
++
++ /* Delete an old WOL file contained in the storage dir */
++ meta_dentry = lookup_one_len(META_FILENAME,
++ hidden_sto_dentry,
++ strlen(META_FILENAME));
++ if(meta_dentry->d_inode) {
++ err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
++ dput(meta_dentry);
++ if(!err)
++ d_delete(meta_dentry);
++ }
++
++ err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
++ dput(hidden_sto_dentry);
++ if(!err)
++ d_delete(hidden_sto_dentry);
++
++ /* propagate number of hard-links */
++ dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
++
++ dput(dtohd(dentry));
++
++ dtohd(dentry) = NULL;
++ dtopd(dentry)->state = DELETED;
++
++ /* carefull with R files */
++ if( __meta_is_r_entry(dir,
++ dentry->d_name.name,
++ dentry->d_name.len) == 1) {
++ err = meta_remove_r_entry(dentry->d_parent,
++ dentry->d_name.name,
++ dentry->d_name.len);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: rmdir: meta_remove_r_entry failed.\n");
++ goto out;
++ }
++ }
++ else {
++ /* ok, add deleted file to META */
++ meta_add_d_entry(dentry->d_parent,
++ dentry->d_name.name,
++ dentry->d_name.len);
++ }
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ goto out;
++ }
++ else if(dtopd(dentry)->state == UNMODIFIED) {
++ /* XXX: simply adding it to the delete list here is fscking dangerous!
++ * as a temporary hack, i will disable rmdir on unmodified directories
++ * for now.
++ */
++ err = -EINVAL;
++ goto out;
++
++ err = get_neg_sto_dentry(dentry);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ /* dput base dentry, this will relase the inode and free the
++ * dentry, as we will never need it again. */
++ dput(dtohd(dentry));
++ dtohd(dentry) = NULL;
++ dtopd(dentry)->state = DELETED;
++
++ /* add deleted file to META-file */
++ meta_add_d_entry(dentry->d_parent,
++ dentry->d_name.name,
++ dentry->d_name.len);
++ goto out;
++ }
++ else if(dtopd(dentry)->state == CREATED) {
++ hidden_sto_dir = itohi2(dir);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ /* avoid destroying the hidden inode if the file is in use */
++ dget(hidden_sto_dentry);
++
++ /* Delete an old WOL file contained in the storage dir */
++ meta_dentry = lookup_one_len(META_FILENAME,
++ hidden_sto_dentry,
++ strlen(META_FILENAME));
++ if(meta_dentry->d_inode) {
++ /* is this necessary? dget(meta_dentry); */
++ err = vfs_unlink(hidden_sto_dentry->d_inode,
++ meta_dentry);
++ dput(meta_dentry);
++ if(!err)
++ d_delete(meta_dentry);
++ }
++
++ err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
++ dput(hidden_sto_dentry);
++ if(!err)
++ d_delete(hidden_sto_dentry);
++
++ /* propagate number of hard-links */
++ dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
++ dtopd(dentry)->state = NON_EXISTANT;
++
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++
++ goto out;
++ }
++ else if(dtopd(dentry)->state == DEL_REWRITTEN) {
++ hidden_sto_dir = itohi2(dir);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ /* avoid destroying the hidden inode if the file is in use */
++ dget(hidden_sto_dentry);
++
++ /* Delete an old WOL file contained in the storage dir */
++ meta_dentry = lookup_one_len(META_FILENAME,
++ hidden_sto_dentry,
++ strlen(META_FILENAME));
++ if(meta_dentry->d_inode) {
++ /* is this necessary? dget(meta_dentry); */
++ err = vfs_unlink(hidden_sto_dentry->d_inode,
++ meta_dentry);
++ dput(meta_dentry);
++ if(!err)
++ d_delete(meta_dentry);
++ }
++
++ err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
++ dput(hidden_sto_dentry);
++ if(!err)
++ d_delete(hidden_sto_dentry);
++
++ /* propagate number of hard-links */
++ dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
++ dtopd(dentry)->state = DELETED;
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ goto out;
++ }
++
++ printk(KERN_CRIT "mini_fo_rmdir: ERROR, invalid state detected.\n");
++
++ out:
++ if(!err) {
++ d_drop(dentry);
++ }
++
++ fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
++ dput(dentry);
++
++ return err;
++}
++
++
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, dev_t dev)
++#else
++mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, int dev)
++#endif
++{
++ int err = 0;
++
++ check_mini_fo_dentry(dentry);
++
++ err = create_sto_nod(dentry, mode, dev);
++ if(err) {
++ printk(KERN_CRIT "mini_fo_mknod: creating sto nod failed.\n");
++ err = -EINVAL;
++ }
++
++ check_mini_fo_dentry(dentry);
++ return err;
++}
++
++
++STATIC int
++mini_fo_rename(inode_t *old_dir, dentry_t *old_dentry,
++ inode_t *new_dir, dentry_t *new_dentry)
++{
++ /* dispatch */
++ if(S_ISDIR(old_dentry->d_inode->i_mode))
++ return rename_directory(old_dir, old_dentry, new_dir, new_dentry);
++ return rename_nondir(old_dir, old_dentry, new_dir, new_dentry);
++
++}
++
++int rename_directory(inode_t *old_dir, dentry_t *old_dentry,
++ inode_t *new_dir, dentry_t *new_dentry)
++{
++ int err, bpath_len;
++ char *bpath;
++
++ dentry_t *hidden_old_dentry;
++ dentry_t *hidden_new_dentry;
++ dentry_t *hidden_old_dir_dentry;
++ dentry_t *hidden_new_dir_dentry;
++
++ err = 0;
++ bpath = NULL;
++ bpath_len = 0;
++
++ /* this is a test, chuck out if it works */
++ if(!(dtopd(new_dentry)->state == DELETED ||
++ dtopd(new_dentry)->state == NON_EXISTANT)) {
++ printk(KERN_CRIT "mini_fo: rename_directory: \
++ uh, ah, new_dentry not negative.\n");
++ /* return -1; */
++ }
++
++ /* state = UNMODIFIED */
++ if(dtopd(old_dentry)->state == UNMODIFIED) {
++ err = dir_unmod_to_mod(old_dentry);
++ if (err)
++ goto out;
++ }
++
++ /* state = MODIFIED */
++ if(dtopd(old_dentry)->state == MODIFIED) {
++ bpath = meta_check_r_entry(old_dentry->d_parent,
++ old_dentry->d_name.name,
++ old_dentry->d_name.len);
++ if(bpath) {
++ err = meta_remove_r_entry(old_dentry->d_parent,
++ old_dentry->d_name.name,
++ old_dentry->d_name.len);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: rename_directory:\
++ meta_remove_r_entry \
++ failed.\n");
++ goto out;
++ }
++ err = meta_add_r_entry(new_dentry->d_parent,
++ bpath,
++ strlen(bpath),
++ new_dentry->d_name.name,
++ new_dentry->d_name.len);
++ kfree(bpath);
++ }
++ else {/* wol it */
++ err = meta_add_d_entry(old_dentry->d_parent,
++ old_dentry->d_name.name,
++ old_dentry->d_name.len);
++ if (err)
++ goto out;
++ /* put it on rename list */
++ err = get_mini_fo_bpath(old_dentry,
++ &bpath,
++ &bpath_len);
++ if (err)
++ goto out;
++ err = meta_add_r_entry(new_dentry->d_parent,
++ bpath, bpath_len,
++ new_dentry->d_name.name,
++ new_dentry->d_name.len);
++ if (err)
++ goto out;
++ }
++ /* no state change, MODIFIED stays MODIFIED */
++ }
++ /* state = CREATED */
++ if(dtopd(old_dentry)->state == CREATED ||
++ dtopd(old_dentry)->state == DEL_REWRITTEN) {
++ if(dtohd(old_dentry))
++ dput(dtohd(old_dentry));
++
++ if(dtopd(new_dentry)->state == DELETED) {
++ dtopd(old_dentry)->state = DEL_REWRITTEN;
++ dtohd(old_dentry) = NULL;
++ }
++ else if(dtopd(new_dentry)->state == NON_EXISTANT) {
++ dtopd(old_dentry)->state = CREATED;
++ /* steal new dentry's neg. base dentry */
++ dtohd(old_dentry) = dtohd(new_dentry);
++ dtohd(new_dentry) = NULL;
++ }
++ }
++ if(dtopd(new_dentry)->state == UNMODIFIED ||
++ dtopd(new_dentry)->state == NON_EXISTANT) {
++ err = get_neg_sto_dentry(new_dentry);
++ if(err)
++ goto out;
++ }
++
++ /* now move sto file */
++ hidden_old_dentry = dtohd2(old_dentry);
++ hidden_new_dentry = dtohd2(new_dentry);
++
++ dget(hidden_old_dentry);
++ dget(hidden_new_dentry);
++
++ hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
++ hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
++ double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
++
++ err = vfs_rename(hidden_old_dir_dentry->d_inode, hidden_old_dentry,
++ hidden_new_dir_dentry->d_inode, hidden_new_dentry);
++ if(err)
++ goto out_lock;
++
++ fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
++ if (new_dir != old_dir)
++ fist_copy_attr_all(old_dir,
++ hidden_old_dir_dentry->d_inode);
++
++ out_lock:
++ /* double_unlock will dput the new/old parent dentries
++ * whose refcnts were incremented via get_parent above. */
++ double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
++ dput(hidden_new_dentry);
++ dput(hidden_old_dentry);
++
++ out:
++ return err;
++}
++
++int rename_nondir(inode_t *old_dir, dentry_t *old_dentry,
++ inode_t *new_dir, dentry_t *new_dentry)
++{
++ int err=0;
++
++ check_mini_fo_dentry(old_dentry);
++ check_mini_fo_dentry(new_dentry);
++ check_mini_fo_inode(old_dir);
++ check_mini_fo_inode(new_dir);
++
++ /* state: UNMODIFIED */
++ if(dtost(old_dentry) == UNMODIFIED) {
++ err = nondir_unmod_to_mod(old_dentry, 1);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++ }
++
++ /* the easy states */
++ if(exists_in_storage(old_dentry)) {
++
++ dentry_t *hidden_old_dentry;
++ dentry_t *hidden_new_dentry;
++ dentry_t *hidden_old_dir_dentry;
++ dentry_t *hidden_new_dir_dentry;
++
++ /* if old file is MODIFIED, add it to the deleted_list */
++ if(dtopd(old_dentry)->state == MODIFIED) {
++ meta_add_d_entry(old_dentry->d_parent,
++ old_dentry->d_name.name,
++ old_dentry->d_name.len);
++
++ dput(dtohd(old_dentry));
++ }
++ /* if old file is CREATED, we only release the base dentry */
++ if(dtopd(old_dentry)->state == CREATED) {
++ if(dtohd(old_dentry))
++ dput(dtohd(old_dentry));
++ }
++
++ /* now setup the new states (depends on new_dentry state) */
++ /* new dentry state = MODIFIED */
++ if(dtopd(new_dentry)->state == MODIFIED) {
++ meta_add_d_entry(new_dentry->d_parent,
++ new_dentry->d_name.name,
++ new_dentry->d_name.len);
++
++ /* new dentry will be d_put'ed later by the vfs
++ * so don't do it here
++ * dput(dtohd(new_dentry));
++ */
++ dtohd(old_dentry) = NULL;
++ dtopd(old_dentry)->state = DEL_REWRITTEN;
++ }
++ /* new dentry state = UNMODIFIED */
++ else if(dtopd(new_dentry)->state == UNMODIFIED) {
++ if(get_neg_sto_dentry(new_dentry))
++ return -EINVAL;
++
++ meta_add_d_entry(new_dentry->d_parent,
++ new_dentry->d_name.name,
++ new_dentry->d_name.len);
++
++ /* is this right??? */
++ /*dput(dtohd(new_dentry));*/
++ dtohd(old_dentry) = NULL;
++ dtopd(old_dentry)->state = DEL_REWRITTEN;
++ }
++ /* new dentry state = CREATED */
++ else if(dtopd(new_dentry)->state == CREATED) {
++ /* we keep the neg. base dentry (if exists) */
++ dtohd(old_dentry) = dtohd(new_dentry);
++ /* ...and set it to Null, or we'll get
++ * dcache.c:345 if it gets dput twice... */
++ dtohd(new_dentry) = NULL;
++ dtopd(old_dentry)->state = CREATED;
++ }
++ /* new dentry state = NON_EXISTANT */
++ else if(dtopd(new_dentry)->state == NON_EXISTANT) {
++ if(get_neg_sto_dentry(new_dentry))
++ return -EINVAL;
++
++ /* we keep the neg. base dentry (if exists) */
++ dtohd(old_dentry) = dtohd(new_dentry);
++ /* ...and set it to Null, or we'll get
++ * Dr. dcache.c:345 if it gets dput twice... */
++ dtohd(new_dentry) = NULL;
++ dtopd(old_dentry)->state = CREATED;
++ }
++ /* new dentry state = DEL_REWRITTEN or DELETED */
++ else if(dtopd(new_dentry)->state == DEL_REWRITTEN ||
++ dtopd(new_dentry)->state == DELETED) {
++ dtohd(old_dentry) = NULL;
++ dtopd(old_dentry)->state = DEL_REWRITTEN;
++ }
++ else { /* not possible, uhh, ahh */
++ printk(KERN_CRIT
++ "mini_fo: rename_reg_file: invalid state detected [1].\n");
++ return -1;
++ }
++
++ /* now we definitely have a sto file */
++ hidden_old_dentry = dtohd2(old_dentry);
++ hidden_new_dentry = dtohd2(new_dentry);
++
++ dget(hidden_old_dentry);
++ dget(hidden_new_dentry);
++
++ hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
++ hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
++ double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
++
++ err = vfs_rename(hidden_old_dir_dentry->d_inode,
++ hidden_old_dentry,
++ hidden_new_dir_dentry->d_inode,
++ hidden_new_dentry);
++ if(err)
++ goto out_lock;
++
++ fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
++ if (new_dir != old_dir)
++ fist_copy_attr_all(old_dir, hidden_old_dir_dentry->d_inode);
++
++ out_lock:
++ /* double_unlock will dput the new/old parent dentries
++ * whose refcnts were incremented via get_parent above.
++ */
++ double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
++ dput(hidden_new_dentry);
++ dput(hidden_old_dentry);
++ out:
++ return err;
++ }
++ else { /* invalid state */
++ printk(KERN_CRIT "mini_fo: rename_reg_file: ERROR: invalid state detected [2].\n");
++ return -1;
++ }
++}
++
++
++STATIC int
++mini_fo_readlink(dentry_t *dentry, char *buf, int bufsiz)
++{
++ int err=0;
++ dentry_t *hidden_dentry = NULL;
++
++ if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
++ hidden_dentry = dtohd2(dentry);
++ } else if(dtohd(dentry) && dtohd(dentry)->d_inode) {
++ hidden_dentry = dtohd(dentry);
++ } else {
++ goto out;
++ }
++
++ if (!hidden_dentry->d_inode->i_op ||
++ !hidden_dentry->d_inode->i_op->readlink) {
++ err = -EINVAL; goto out;
++ }
++
++ err = hidden_dentry->d_inode->i_op->readlink(hidden_dentry,
++ buf,
++ bufsiz);
++ if (err > 0)
++ fist_copy_attr_atime(dentry->d_inode, hidden_dentry->d_inode);
++
++ out:
++ return err;
++}
++
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
++static int mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
++#else
++static void* mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
++#endif
++{
++ char *buf;
++ int len = PAGE_SIZE, err;
++ mm_segment_t old_fs;
++
++ /* in 2.6 this is freed by mini_fo_put_link called by __do_follow_link */
++ buf = kmalloc(len, GFP_KERNEL);
++ if (!buf) {
++ err = -ENOMEM;
++ goto out;
++ }
++
++ /* read the symlink, and then we will follow it */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++ err = dentry->d_inode->i_op->readlink(dentry, buf, len);
++ set_fs(old_fs);
++ if (err < 0) {
++ kfree(buf);
++ buf = NULL;
++ goto out;
++ }
++ buf[err] = 0;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ nd_set_link(nd, buf);
++ err = 0;
++#else
++ err = vfs_follow_link(nd, buf);
++#endif
++
++ out:
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ kfree(buf);
++#endif
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
++ return err;
++#else
++ return ERR_PTR(err);
++#endif
++}
++
++STATIC
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
++void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd)
++#else
++void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
++#endif
++{
++ char *link;
++ link = nd_get_link(nd);
++ kfree(link);
++}
++#endif
++
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
++#else
++mini_fo_permission(inode_t *inode, int mask)
++#endif
++{
++ inode_t *hidden_inode;
++ int mode;
++ int err;
++
++ if(itohi2(inode)) {
++ hidden_inode = itohi2(inode);
++ } else {
++ hidden_inode = itohi(inode);
++ }
++ mode = inode->i_mode;
++
++ /* not really needed, as permission handles everything:
++ * err = vfs_permission(inode, mask);
++ * if (err)
++ * goto out;
++ */
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err = permission(hidden_inode, mask, nd);
++#else
++ err = permission(hidden_inode, mask);
++#endif
++
++ /* out: */
++ return err;
++}
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++STATIC int
++mini_fo_inode_revalidate(dentry_t *dentry)
++{
++ int err = 0;
++ dentry_t *hidden_dentry;
++ inode_t *hidden_inode;
++
++ ASSERT(dentry->d_inode);
++ ASSERT(itopd(dentry->d_inode));
++
++ if(itohi2(dentry->d_inode)) {
++ hidden_dentry = dtohd2(dentry);
++ hidden_inode = hidden_dentry->d_inode;
++ } else if(itohi(dentry->d_inode)) {
++ hidden_dentry = dtohd(dentry);
++ hidden_inode = hidden_dentry->d_inode;
++ } else {
++ printk(KERN_CRIT "mini_fo_inode_revalidate: ERROR, invalid state detected.\n");
++ err = -ENOENT;
++ goto out;
++ }
++ if (hidden_inode && hidden_inode->i_op && hidden_inode->i_op->revalidate){
++ err = hidden_inode->i_op->revalidate(hidden_dentry);
++ if (err)
++ goto out;
++ }
++ fist_copy_attr_all(dentry->d_inode, hidden_inode);
++ out:
++ return err;
++}
++#endif
++
++STATIC int
++mini_fo_setattr(dentry_t *dentry, struct iattr *ia)
++{
++ int err = 0;
++
++ check_mini_fo_dentry(dentry);
++
++ if(!is_mini_fo_existant(dentry)) {
++ printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [1].\n");
++ goto out;
++ }
++
++ if(dtost(dentry) == UNMODIFIED) {
++ if(!IS_COPY_FLAG(ia->ia_valid))
++ goto out; /* we ignore these changes to base */
++
++ if(S_ISDIR(dentry->d_inode->i_mode)) {
++ err = dir_unmod_to_mod(dentry);
++ } else {
++ /* we copy contents if file is not beeing truncated */
++ if(S_ISREG(dentry->d_inode->i_mode) &&
++ !(ia->ia_size == 0 && (ia->ia_valid & ATTR_SIZE))) {
++ err = nondir_unmod_to_mod(dentry, 1);
++ } else
++ err = nondir_unmod_to_mod(dentry, 0);
++ }
++ if(err) {
++ err = -EINVAL;
++ printk(KERN_CRIT "mini_fo_setattr: ERROR changing states.\n");
++ goto out;
++ }
++ }
++ if(!exists_in_storage(dentry)) {
++ printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [2].\n");
++ err = -EINVAL;
++ goto out;
++ }
++ ASSERT(dentry->d_inode);
++ ASSERT(dtohd2(dentry));
++ ASSERT(itopd(dentry->d_inode));
++ ASSERT(itohi2(dentry->d_inode));
++
++ err = notify_change(dtohd2(dentry), ia);
++ fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
++ out:
++ return err;
++}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++STATIC int
++mini_fo_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
++{
++ int err = 0;
++ dentry_t *hidden_dentry;
++
++ ASSERT(dentry->d_inode);
++ ASSERT(itopd(dentry->d_inode));
++
++ if(itohi2(dentry->d_inode)) {
++ hidden_dentry = dtohd2(dentry);
++ } else if(itohi(dentry->d_inode)) {
++ hidden_dentry = dtohd(dentry);
++ } else {
++ printk(KERN_CRIT "mini_fo_getattr: ERROR, invalid state detected.\n");
++ err = -ENOENT;
++ goto out;
++ }
++ fist_copy_attr_all(dentry->d_inode, hidden_dentry->d_inode);
++
++ ASSERT(hidden_dentry);
++ ASSERT(hidden_dentry->d_inode);
++ ASSERT(hidden_dentry->d_inode->i_op);
++
++ generic_fillattr(dentry->d_inode, stat);
++ if (!stat->blksize) {
++ struct super_block *s = hidden_dentry->d_inode->i_sb;
++ unsigned blocks;
++ blocks = (stat->size+s->s_blocksize-1) >> s->s_blocksize_bits;
++ stat->blocks = (s->s_blocksize / 512) * blocks;
++ stat->blksize = s->s_blocksize;
++ }
++ out:
++ return err;
++}
++#endif
++
++#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
++#if 0 /* no xattr_alloc() and xattr_free() */
++/* This is lifted from fs/xattr.c */
++static void *
++xattr_alloc(size_t size, size_t limit)
++{
++ void *ptr;
++
++ if (size > limit)
++ return ERR_PTR(-E2BIG);
++
++ if (!size) /* size request, no buffer is needed */
++ return NULL;
++ else if (size <= PAGE_SIZE)
++ ptr = kmalloc((unsigned long) size, GFP_KERNEL);
++ else
++ ptr = vmalloc((unsigned long) size);
++ if (!ptr)
++ return ERR_PTR(-ENOMEM);
++ return ptr;
++}
++
++static void
++xattr_free(void *ptr, size_t size)
++{
++ if (!size) /* size request, no buffer was needed */
++ return;
++ else if (size <= PAGE_SIZE)
++ kfree(ptr);
++ else
++ vfree(ptr);
++}
++#endif /* no xattr_alloc() and xattr_free() */
++
++/* BKL held by caller.
++ * dentry->d_inode->i_sem down
++ */
++STATIC int
++mini_fo_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) {
++ struct dentry *hidden_dentry = NULL;
++ int err = -EOPNOTSUPP;
++ /* Define these anyway so we don't need as much ifdef'ed code. */
++ char *encoded_name = NULL;
++ char *encoded_value = NULL;
++
++ check_mini_fo_dentry(dentry);
++
++ if(exists_in_storage(dentry))
++ hidden_dentry = dtohd2(dentry);
++ else
++ hidden_dentry = dtohd(dentry);
++
++ ASSERT(hidden_dentry);
++ ASSERT(hidden_dentry->d_inode);
++ ASSERT(hidden_dentry->d_inode->i_op);
++
++ if (hidden_dentry->d_inode->i_op->getxattr) {
++ encoded_name = (char *)name;
++ encoded_value = (char *)value;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ /* lock_kernel() already done by caller. */
++ err = hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, encoded_name, encoded_value, size);
++ /* unlock_kernel() will be done by caller. */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ return err;
++}
++
++/* BKL held by caller.
++ * dentry->d_inode->i_sem down
++ */
++STATIC int
++#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \
++ && LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,23)) \
++ || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
++mini_fo_setxattr(struct dentry *dentry, const char *name,
++ const void *value, size_t size, int flags)
++#else
++mini_fo_setxattr(struct dentry *dentry, const char *name,
++ void *value, size_t size, int flags)
++#endif
++
++{
++ struct dentry *hidden_dentry = NULL;
++ int err = -EOPNOTSUPP;
++
++ /* Define these anyway, so we don't have as much ifdef'ed code. */
++ char *encoded_value = NULL;
++ char *encoded_name = NULL;
++
++ check_mini_fo_dentry(dentry);
++
++ if(exists_in_storage(dentry))
++ hidden_dentry = dtohd2(dentry);
++ else
++ hidden_dentry = dtohd(dentry);
++
++ ASSERT(hidden_dentry);
++ ASSERT(hidden_dentry->d_inode);
++ ASSERT(hidden_dentry->d_inode->i_op);
++
++ if (hidden_dentry->d_inode->i_op->setxattr) {
++ encoded_name = (char *)name;
++ encoded_value = (char *)value;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ /* lock_kernel() already done by caller. */
++ err = hidden_dentry->d_inode->i_op->setxattr(hidden_dentry, encoded_name, encoded_value, size, flags);
++ /* unlock_kernel() will be done by caller. */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ return err;
++}
++
++/* BKL held by caller.
++ * dentry->d_inode->i_sem down
++ */
++STATIC int
++mini_fo_removexattr(struct dentry *dentry, const char *name) {
++ struct dentry *hidden_dentry = NULL;
++ int err = -EOPNOTSUPP;
++ char *encoded_name;
++
++ check_mini_fo_dentry(dentry);
++
++ if(exists_in_storage(dentry))
++ hidden_dentry = dtohd2(dentry);
++ else
++ hidden_dentry = dtohd(dentry);
++
++ ASSERT(hidden_dentry);
++ ASSERT(hidden_dentry->d_inode);
++ ASSERT(hidden_dentry->d_inode->i_op);
++
++ if (hidden_dentry->d_inode->i_op->removexattr) {
++ encoded_name = (char *)name;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ /* lock_kernel() already done by caller. */
++ err = hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, encoded_name);
++ /* unlock_kernel() will be done by caller. */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ return err;
++}
++
++/* BKL held by caller.
++ * dentry->d_inode->i_sem down
++ */
++STATIC int
++mini_fo_listxattr(struct dentry *dentry, char *list, size_t size) {
++ struct dentry *hidden_dentry = NULL;
++ int err = -EOPNOTSUPP;
++ char *encoded_list = NULL;
++
++ check_mini_fo_dentry(dentry);
++
++ if(exists_in_storage(dentry))
++ hidden_dentry = dtohd2(dentry);
++ else
++ hidden_dentry = dtohd(dentry);
++
++ ASSERT(hidden_dentry);
++ ASSERT(hidden_dentry->d_inode);
++ ASSERT(hidden_dentry->d_inode->i_op);
++
++ if (hidden_dentry->d_inode->i_op->listxattr) {
++ encoded_list = list;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_dentry->d_inode->i_sem);
++#endif
++ /* lock_kernel() already done by caller. */
++ err = hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, encoded_list, size);
++ /* unlock_kernel() will be done by caller. */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_dentry->d_inode->i_sem);
++#endif
++ }
++ return err;
++}
++# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
++
++struct inode_operations mini_fo_symlink_iops =
++ {
++ readlink: mini_fo_readlink,
++ follow_link: mini_fo_follow_link,
++ /* mk: permission: mini_fo_permission, */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ revalidate: mini_fo_inode_revalidate,
++#endif
++ setattr: mini_fo_setattr,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ getattr: mini_fo_getattr,
++ put_link: mini_fo_put_link,
++#endif
++
++#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
++ setxattr: mini_fo_setxattr,
++ getxattr: mini_fo_getxattr,
++ listxattr: mini_fo_listxattr,
++ removexattr: mini_fo_removexattr
++# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
++ };
++
++struct inode_operations mini_fo_dir_iops =
++ {
++ create: mini_fo_create,
++ lookup: mini_fo_lookup,
++ link: mini_fo_link,
++ unlink: mini_fo_unlink,
++ symlink: mini_fo_symlink,
++ mkdir: mini_fo_mkdir,
++ rmdir: mini_fo_rmdir,
++ mknod: mini_fo_mknod,
++ rename: mini_fo_rename,
++ /* no readlink/follow_link for non-symlinks */
++ // off because we have setattr
++ // truncate: mini_fo_truncate,
++ /* mk:permission: mini_fo_permission, */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ revalidate: mini_fo_inode_revalidate,
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ getattr: mini_fo_getattr,
++#endif
++ setattr: mini_fo_setattr,
++#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
++ setxattr: mini_fo_setxattr,
++ getxattr: mini_fo_getxattr,
++ listxattr: mini_fo_listxattr,
++ removexattr: mini_fo_removexattr
++# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
++ };
++
++struct inode_operations mini_fo_main_iops =
++ {
++ /* permission: mini_fo_permission, */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ revalidate: mini_fo_inode_revalidate,
++#endif
++ setattr: mini_fo_setattr,
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ getattr: mini_fo_getattr,
++#endif
++#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
++ setxattr: mini_fo_setxattr,
++ getxattr: mini_fo_getxattr,
++ listxattr: mini_fo_listxattr,
++ removexattr: mini_fo_removexattr
++# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
++ };
+diff -urN linux-2.6.19.old/fs/mini_fo/main.c linux-2.6.19.dev/fs/mini_fo/main.c
+--- linux-2.6.19.old/fs/mini_fo/main.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/main.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,423 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++#include <linux/module.h>
++
++/* This definition must only appear after we include <linux/module.h> */
++#ifndef MODULE_LICENSE
++# define MODULE_LICENSE(bison)
++#endif /* not MODULE_LICENSE */
++
++/*
++ * This is the mini_fo tri interpose function, which extends the
++ * functionality of the regular interpose by interposing a higher
++ * level inode on top of two lower level ones: the base filesystem
++ * inode and the storage filesystem inode.
++ *
++ * sb we pass is mini_fo's super_block
++ */
++int
++mini_fo_tri_interpose(dentry_t *hidden_dentry,
++ dentry_t *hidden_sto_dentry,
++ dentry_t *dentry, super_block_t *sb, int flag)
++{
++ inode_t *hidden_inode = NULL;
++ inode_t *hidden_sto_inode = NULL; /* store corresponding storage inode */
++ int err = 0;
++ inode_t *inode;
++
++ /* Pointer to hidden_sto_inode if exists, else to hidden_inode.
++ * This is used to copy the attributes of the correct inode. */
++ inode_t *master_inode;
++
++ if(hidden_dentry)
++ hidden_inode = hidden_dentry->d_inode;
++ if(hidden_sto_dentry)
++ hidden_sto_inode = hidden_sto_dentry->d_inode;
++
++ ASSERT(dentry->d_inode == NULL);
++
++ /* mk: One of the inodes associated with the dentrys is likely to
++ * be NULL, so carefull:
++ */
++ ASSERT((hidden_inode != NULL) || (hidden_sto_inode != NULL));
++
++ if(hidden_sto_inode)
++ master_inode = hidden_sto_inode;
++ else
++ master_inode = hidden_inode;
++
++ /*
++ * We allocate our new inode below, by calling iget.
++ * iget will call our read_inode which will initialize some
++ * of the new inode's fields
++ */
++
++ /*
++ * original: inode = iget(sb, hidden_inode->i_ino);
++ */
++ inode = iget(sb, iunique(sb, 25));
++ if (!inode) {
++ err = -EACCES; /* should be impossible??? */
++ goto out;
++ }
++
++ /*
++ * interpose the inode if not already interposed
++ * this is possible if the inode is being reused
++ * XXX: what happens if we get_empty_inode() but there's another already?
++ * for now, ASSERT() that this can't happen; fix later.
++ */
++ if (itohi(inode) != NULL) {
++ printk(KERN_CRIT "mini_fo_tri_interpose: itohi(inode) != NULL.\n");
++ }
++ if (itohi2(inode) != NULL) {
++ printk(KERN_CRIT "mini_fo_tri_interpose: itohi2(inode) != NULL.\n");
++ }
++
++ /* mk: Carefull, igrab can't handle NULL inodes (ok, why should it?), so
++ * we need to check here:
++ */
++ if(hidden_inode)
++ itohi(inode) = igrab(hidden_inode);
++ else
++ itohi(inode) = NULL;
++
++ if(hidden_sto_inode)
++ itohi2(inode) = igrab(hidden_sto_inode);
++ else
++ itohi2(inode) = NULL;
++
++
++ /* Use different set of inode ops for symlinks & directories*/
++ if (S_ISLNK(master_inode->i_mode))
++ inode->i_op = &mini_fo_symlink_iops;
++ else if (S_ISDIR(master_inode->i_mode))
++ inode->i_op = &mini_fo_dir_iops;
++
++ /* Use different set of file ops for directories */
++ if (S_ISDIR(master_inode->i_mode))
++ inode->i_fop = &mini_fo_dir_fops;
++
++ /* properly initialize special inodes */
++ if (S_ISBLK(master_inode->i_mode) || S_ISCHR(master_inode->i_mode) ||
++ S_ISFIFO(master_inode->i_mode) || S_ISSOCK(master_inode->i_mode)) {
++ init_special_inode(inode, master_inode->i_mode, master_inode->i_rdev);
++ }
++
++ /* Fix our inode's address operations to that of the lower inode */
++ if (inode->i_mapping->a_ops != master_inode->i_mapping->a_ops) {
++ inode->i_mapping->a_ops = master_inode->i_mapping->a_ops;
++ }
++
++ /* only (our) lookup wants to do a d_add */
++ if (flag)
++ d_add(dentry, inode);
++ else
++ d_instantiate(dentry, inode);
++
++ ASSERT(dtopd(dentry) != NULL);
++
++ /* all well, copy inode attributes */
++ fist_copy_attr_all(inode, master_inode);
++
++ out:
++ return err;
++}
++
++/* parse mount options "base=" and "sto=" */
++dentry_t *
++mini_fo_parse_options(super_block_t *sb, char *options)
++{
++ dentry_t *hidden_root = ERR_PTR(-EINVAL);
++ dentry_t *hidden_root2 = ERR_PTR(-EINVAL);
++ struct nameidata nd, nd2;
++ char *name, *tmp, *end;
++ int err = 0;
++
++ /* We don't want to go off the end of our arguments later on. */
++ for (end = options; *end; end++);
++
++ while (options < end) {
++ tmp = options;
++ while (*tmp && *tmp != ',')
++ tmp++;
++ *tmp = '\0';
++ if (!strncmp("base=", options, 5)) {
++ name = options + 5;
++ printk(KERN_INFO "mini_fo: using base directory: %s\n", name);
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ if (path_init(name, LOOKUP_FOLLOW, &nd))
++ err = path_walk(name, &nd);
++#else
++ err = path_lookup(name, LOOKUP_FOLLOW, &nd);
++#endif
++ if (err) {
++ printk(KERN_CRIT "mini_fo: error accessing hidden directory '%s'\n", name);
++ hidden_root = ERR_PTR(err);
++ goto out;
++ }
++ hidden_root = nd.dentry;
++ stopd(sb)->base_dir_dentry = nd.dentry;
++ stopd(sb)->hidden_mnt = nd.mnt;
++
++ } else if(!strncmp("sto=", options, 4)) {
++ /* parse the storage dir */
++ name = options + 4;
++ printk(KERN_INFO "mini_fo: using storage directory: %s\n", name);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ if(path_init(name, LOOKUP_FOLLOW, &nd2))
++ err = path_walk(name, &nd2);
++#else
++ err = path_lookup(name, LOOKUP_FOLLOW, &nd2);
++#endif
++ if(err) {
++ printk(KERN_CRIT "mini_fo: error accessing hidden storage directory '%s'\n", name);
++
++ hidden_root2 = ERR_PTR(err);
++ goto out;
++ }
++ hidden_root2 = nd2.dentry;
++ stopd(sb)->storage_dir_dentry = nd2.dentry;
++ stopd(sb)->hidden_mnt2 = nd2.mnt;
++ stohs2(sb) = hidden_root2->d_sb;
++
++ /* validate storage dir, this is done in
++ * mini_fo_read_super for the base directory.
++ */
++ if (IS_ERR(hidden_root2)) {
++ printk(KERN_WARNING "mini_fo_parse_options: storage dentry lookup failed (err = %ld)\n", PTR_ERR(hidden_root2));
++ goto out;
++ }
++ if (!hidden_root2->d_inode) {
++ printk(KERN_WARNING "mini_fo_parse_options: no storage dir to interpose on.\n");
++ goto out;
++ }
++ stohs2(sb) = hidden_root2->d_sb;
++ } else {
++ printk(KERN_WARNING "mini_fo: unrecognized option '%s'\n", options);
++ hidden_root = ERR_PTR(-EINVAL);
++ goto out;
++ }
++ options = tmp + 1;
++ }
++
++ out:
++ if(IS_ERR(hidden_root2))
++ return hidden_root2;
++ return hidden_root;
++}
++
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++static int
++#else
++super_block_t *
++#endif
++mini_fo_read_super(super_block_t *sb, void *raw_data, int silent)
++{
++ dentry_t *hidden_root;
++ int err = 0;
++
++ if (!raw_data) {
++ printk(KERN_WARNING "mini_fo_read_super: missing argument\n");
++ err = -EINVAL;
++ goto out;
++ }
++ /*
++ * Allocate superblock private data
++ */
++ __stopd(sb) = kmalloc(sizeof(struct mini_fo_sb_info), GFP_KERNEL);
++ if (!stopd(sb)) {
++ printk(KERN_WARNING "%s: out of memory\n", __FUNCTION__);
++ err = -ENOMEM;
++ goto out;
++ }
++ stohs(sb) = NULL;
++
++ hidden_root = mini_fo_parse_options(sb, raw_data);
++ if (IS_ERR(hidden_root)) {
++ printk(KERN_WARNING "mini_fo_read_super: lookup_dentry failed (err = %ld)\n", PTR_ERR(hidden_root));
++ err = PTR_ERR(hidden_root);
++ goto out_free;
++ }
++ if (!hidden_root->d_inode) {
++ printk(KERN_WARNING "mini_fo_read_super: no directory to interpose on\n");
++ goto out_free;
++ }
++ stohs(sb) = hidden_root->d_sb;
++
++ /*
++ * Linux 2.4.2-ac3 and beyond has code in
++ * mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
++ * to be populated. If not set, all write()s under that sb will
++ * return 0.
++ *
++ * Linux 2.4.4+ automatically sets s_maxbytes to MAX_NON_LFS;
++ * the filesystem should override it only if it supports LFS.
++ */
++ /* non-SCA code is good to go with LFS */
++ sb->s_maxbytes = hidden_root->d_sb->s_maxbytes;
++
++ sb->s_op = &mini_fo_sops;
++ /*
++ * we can't use d_alloc_root if we want to use
++ * our own interpose function unchanged,
++ * so we simply replicate *most* of the code in d_alloc_root here
++ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ sb->s_root = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
++#else
++ sb->s_root = d_alloc(NULL, &(const struct qstr){hash: 0, name: "/", len : 1});
++#endif
++ if (IS_ERR(sb->s_root)) {
++ printk(KERN_WARNING "mini_fo_read_super: d_alloc failed\n");
++ err = -ENOMEM;
++ goto out_dput;
++ }
++
++ sb->s_root->d_op = &mini_fo_dops;
++ sb->s_root->d_sb = sb;
++ sb->s_root->d_parent = sb->s_root;
++
++ /* link the upper and lower dentries */
++ __dtopd(sb->s_root) = (struct mini_fo_dentry_info *)
++ kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
++ if (!dtopd(sb->s_root)) {
++ err = -ENOMEM;
++ goto out_dput2;
++ }
++ dtopd(sb->s_root)->state = MODIFIED;
++ dtohd(sb->s_root) = hidden_root;
++
++ /* fanout relevant, interpose on storage root dentry too */
++ dtohd2(sb->s_root) = stopd(sb)->storage_dir_dentry;
++
++ /* ...and call tri-interpose to interpose root dir inodes
++ * if (mini_fo_interpose(hidden_root, sb->s_root, sb, 0))
++ */
++ if(mini_fo_tri_interpose(hidden_root, dtohd2(sb->s_root), sb->s_root, sb, 0))
++ goto out_dput2;
++
++ /* initalize the wol list */
++ itopd(sb->s_root->d_inode)->deleted_list_size = -1;
++ itopd(sb->s_root->d_inode)->renamed_list_size = -1;
++ meta_build_lists(sb->s_root);
++
++ goto out;
++
++ out_dput2:
++ dput(sb->s_root);
++ out_dput:
++ dput(hidden_root);
++ dput(dtohd2(sb->s_root)); /* release the hidden_sto_dentry too */
++ out_free:
++ kfree(stopd(sb));
++ __stopd(sb) = NULL;
++ out:
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ return err;
++#else
++ if (err) {
++ return ERR_PTR(err);
++ } else {
++ return sb;
++ }
++#endif
++}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++static int mini_fo_get_sb(struct file_system_type *fs_type,
++ int flags, const char *dev_name,
++ void *raw_data, struct vfsmount *mnt)
++{
++ return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super, mnt);
++}
++#else
++static struct super_block *mini_fo_get_sb(struct file_system_type *fs_type,
++ int flags, const char *dev_name,
++ void *raw_data)
++{
++ return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super);
++}
++#endif
++
++void mini_fo_kill_block_super(struct super_block *sb)
++{
++ generic_shutdown_super(sb);
++ /*
++ * XXX: BUG: Halcrow: Things get unstable sometime after this point:
++ * lib/rwsem-spinlock.c:127: spin_is_locked on uninitialized
++ * fs/fs-writeback.c:402: spin_lock(fs/super.c:a0381828) already
++ * locked by fs/fs-writeback.c/402
++ *
++ * Apparently, someone's not releasing a lock on sb_lock...
++ */
++}
++
++static struct file_system_type mini_fo_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "mini_fo",
++ .get_sb = mini_fo_get_sb,
++ .kill_sb = mini_fo_kill_block_super,
++ .fs_flags = 0,
++};
++
++
++#else
++static DECLARE_FSTYPE(mini_fo_fs_type, "mini_fo", mini_fo_read_super, 0);
++#endif
++
++static int __init init_mini_fo_fs(void)
++{
++ printk("Registering mini_fo version $Id$\n");
++ return register_filesystem(&mini_fo_fs_type);
++}
++static void __exit exit_mini_fo_fs(void)
++{
++ printk("Unregistering mini_fo version $Id$\n");
++ unregister_filesystem(&mini_fo_fs_type);
++}
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++EXPORT_NO_SYMBOLS;
++#endif
++
++MODULE_AUTHOR("Erez Zadok <ezk@cs.sunysb.edu>");
++MODULE_DESCRIPTION("FiST-generated mini_fo filesystem");
++MODULE_LICENSE("GPL");
++
++/* MODULE_PARM(fist_debug_var, "i"); */
++/* MODULE_PARM_DESC(fist_debug_var, "Debug level"); */
++
++module_init(init_mini_fo_fs)
++module_exit(exit_mini_fo_fs)
+diff -urN linux-2.6.19.old/fs/mini_fo/Makefile linux-2.6.19.dev/fs/mini_fo/Makefile
+--- linux-2.6.19.old/fs/mini_fo/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/Makefile 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,17 @@
++#
++# Makefile for mini_fo 2.4 and 2.6 Linux kernels
++#
++# Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version
++# 2 of the License, or (at your option) any later version.
++#
++
++obj-$(CONFIG_MINI_FO) := mini_fo.o
++mini_fo-objs := meta.o dentry.o file.o inode.o main.o super.o state.o aux.o
++
++# dependencies
++${mini_fo-objs}: mini_fo.h fist.h
++
+diff -urN linux-2.6.19.old/fs/mini_fo/meta.c linux-2.6.19.dev/fs/mini_fo/meta.c
+--- linux-2.6.19.old/fs/mini_fo/meta.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/meta.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,1000 @@
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif /* HAVE_CONFIG_H */
++#include "fist.h"
++#include "mini_fo.h"
++
++int meta_build_lists(dentry_t *dentry)
++{
++ struct mini_fo_inode_info *inode_info;
++
++ dentry_t *meta_dentry = 0;
++ file_t *meta_file = 0;
++ mm_segment_t old_fs;
++ void *buf;
++
++ int bytes, len;
++ struct vfsmount *meta_mnt;
++ char *entry;
++
++ inode_info = itopd(dentry->d_inode);
++ if(!(inode_info->deleted_list_size == -1 &&
++ inode_info->renamed_list_size == -1)) {
++ printk(KERN_CRIT "mini_fo: meta_build_lists: \
++ Error, list(s) not virgin.\n");
++ return -1;
++ }
++
++ /* init our meta lists */
++ INIT_LIST_HEAD(&inode_info->deleted_list);
++ inode_info->deleted_list_size = 0;
++
++ INIT_LIST_HEAD(&inode_info->renamed_list);
++ inode_info->renamed_list_size = 0;
++
++ /* might there be a META-file? */
++ if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
++ meta_dentry = lookup_one_len(META_FILENAME,
++ dtohd2(dentry),
++ strlen(META_FILENAME));
++ if(!meta_dentry->d_inode) {
++ dput(meta_dentry);
++ goto out_ok;
++ }
++ /* $%& err, is this correct? */
++ meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
++ mntget(meta_mnt);
++
++
++ /* open META-file for reading */
++ meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
++ if(!meta_file || IS_ERR(meta_file)) {
++ printk(KERN_CRIT "mini_fo: meta_build_lists: \
++ ERROR opening META file.\n");
++ goto out_err;
++ }
++
++ /* check if fs supports reading */
++ if(!meta_file->f_op->read) {
++ printk(KERN_CRIT "mini_fo: meta_build_lists: \
++ ERROR, fs does not support reading.\n");
++ goto out_err_close;
++ }
++
++ /* allocate a page for transfering the data */
++ buf = (void *) __get_free_page(GFP_KERNEL);
++ if(!buf) {
++ printk(KERN_CRIT "mini_fo: meta_build_lists: \
++ ERROR, out of mem.\n");
++ goto out_err_close;
++ }
++ meta_file->f_pos = 0;
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++ do {
++ char *c;
++ bytes = meta_file->f_op->read(meta_file, buf, PAGE_SIZE, &meta_file->f_pos);
++ if(bytes == PAGE_SIZE) {
++ /* trim a cut off filename and adjust f_pos to get it next time */
++ for(c = (char*) buf+PAGE_SIZE;
++ *c != '\n';
++ c--, bytes--, meta_file->f_pos--);
++ }
++ entry = (char *) buf;
++ while(entry < (char *) buf+bytes) {
++
++ char *old_path;
++ char *dir_name;
++ int old_len, new_len;
++
++ /* len without '\n'*/
++ len = (int) (strchr(entry, '\n') - entry);
++ switch (*entry) {
++ case 'D':
++ /* format: "D filename" */
++ meta_list_add_d_entry(dentry,
++ entry+2,
++ len-2);
++ break;
++ case 'R':
++ /* format: "R path/xy/dir newDir" */
++ old_path = entry+2;
++ dir_name = strchr(old_path, ' ') + 1;
++ old_len = dir_name - old_path - 1;
++ new_len = ((int) entry) + len - ((int ) dir_name);
++ meta_list_add_r_entry(dentry,
++ old_path,
++ old_len,
++ dir_name,
++ new_len);
++ break;
++ default:
++ /* unknown entry type detected */
++ break;
++ }
++ entry += len+1;
++ }
++
++ } while(meta_file->f_pos < meta_dentry->d_inode->i_size);
++
++ free_page((unsigned long) buf);
++ set_fs(old_fs);
++ fput(meta_file);
++ }
++ goto out_ok;
++
++ out_err_close:
++ fput(meta_file);
++ out_err:
++ mntput(meta_mnt);
++ dput(meta_dentry);
++ return -1;
++ out_ok:
++ return 1; /* check this!!! inode_info->wol_size; */
++}
++
++/* cleanups up all lists and free's the mem by dentry */
++int meta_put_lists(dentry_t *dentry)
++{
++ if(!dentry || !dentry->d_inode) {
++ printk("mini_fo: meta_put_lists: invalid dentry passed.\n");
++ return -1;
++ }
++ return __meta_put_lists(dentry->d_inode);
++}
++
++/* cleanups up all lists and free's the mem by inode */
++int __meta_put_lists(inode_t *inode)
++{
++ int err = 0;
++ if(!inode || !itopd(inode)) {
++ printk("mini_fo: __meta_put_lists: invalid inode passed.\n");
++ return -1;
++ }
++ err = __meta_put_d_list(inode);
++ err |= __meta_put_r_list(inode);
++ return err;
++}
++
++int meta_sync_lists(dentry_t *dentry)
++{
++ int err = 0;
++ if(!dentry || !dentry->d_inode) {
++ printk("mini_fo: meta_sync_lists: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++ err = meta_sync_d_list(dentry, 0);
++ err |= meta_sync_r_list(dentry, 1);
++ return err;
++}
++
++
++/* remove all D entries from the renamed list and free the mem */
++int __meta_put_d_list(inode_t *inode)
++{
++ struct list_head *tmp;
++ struct deleted_entry *del_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!inode || !itopd(inode)) {
++ printk(KERN_CRIT "mini_fo: __meta_put_d_list: \
++ invalid inode passed.\n");
++ return -1;
++ }
++ inode_info = itopd(inode);
++
++ /* nuke the DELETED-list */
++ if(inode_info->deleted_list_size <= 0)
++ return 0;
++
++ while(!list_empty(&inode_info->deleted_list)) {
++ tmp = inode_info->deleted_list.next;
++ list_del(tmp);
++ del_entry = list_entry(tmp, struct deleted_entry, list);
++ kfree(del_entry->name);
++ kfree(del_entry);
++ }
++ inode_info->deleted_list_size = 0;
++
++ return 0;
++}
++
++/* remove all R entries from the renamed list and free the mem */
++int __meta_put_r_list(inode_t *inode)
++{
++ struct list_head *tmp;
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!inode || !itopd(inode)) {
++ printk(KERN_CRIT "mini_fo: meta_put_r_list: invalid inode.\n");
++ return -1;
++ }
++ inode_info = itopd(inode);
++
++ /* nuke the RENAMED-list */
++ if(inode_info->renamed_list_size <= 0)
++ return 0;
++
++ while(!list_empty(&inode_info->renamed_list)) {
++ tmp = inode_info->renamed_list.next;
++ list_del(tmp);
++ ren_entry = list_entry(tmp, struct renamed_entry, list);
++ kfree(ren_entry->new_name);
++ kfree(ren_entry->old_name);
++ kfree(ren_entry);
++ }
++ inode_info->renamed_list_size = 0;
++
++ return 0;
++}
++
++int meta_add_d_entry(dentry_t *dentry, const char *name, int len)
++{
++ int err = 0;
++ err = meta_list_add_d_entry(dentry, name, len);
++ err |= meta_write_d_entry(dentry,name,len);
++ return err;
++}
++
++/* add a D entry to the deleted list */
++int meta_list_add_d_entry(dentry_t *dentry, const char *name, int len)
++{
++ struct deleted_entry *del_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++ inode_info = itopd(dentry->d_inode);
++
++ if(inode_info->deleted_list_size < 0)
++ return -1;
++
++ del_entry = (struct deleted_entry *)
++ kmalloc(sizeof(struct deleted_entry), GFP_KERNEL);
++ del_entry->name = (char*) kmalloc(len, GFP_KERNEL);
++ if(!del_entry || !del_entry->name) {
++ printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
++ out of mem.\n");
++ kfree(del_entry->name);
++ kfree(del_entry);
++ return -ENOMEM;
++ }
++
++ strncpy(del_entry->name, name, len);
++ del_entry->len = len;
++
++ list_add(&del_entry->list, &inode_info->deleted_list);
++ inode_info->deleted_list_size++;
++ return 0;
++}
++
++int meta_add_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len)
++{
++ int err = 0;
++ err = meta_list_add_r_entry(dentry,
++ old_name, old_len,
++ new_name, new_len);
++ err |= meta_write_r_entry(dentry,
++ old_name, old_len,
++ new_name, new_len);
++ return err;
++}
++
++/* add a R entry to the renamed list */
++int meta_list_add_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len)
++{
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++ inode_info = itopd(dentry->d_inode);
++
++ if(inode_info->renamed_list_size < 0)
++ return -1;
++
++ ren_entry = (struct renamed_entry *)
++ kmalloc(sizeof(struct renamed_entry), GFP_KERNEL);
++ ren_entry->old_name = (char*) kmalloc(old_len, GFP_KERNEL);
++ ren_entry->new_name = (char*) kmalloc(new_len, GFP_KERNEL);
++
++ if(!ren_entry || !ren_entry->old_name || !ren_entry->new_name) {
++ printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
++ out of mem.\n");
++ kfree(ren_entry->new_name);
++ kfree(ren_entry->old_name);
++ kfree(ren_entry);
++ return -ENOMEM;
++ }
++
++ strncpy(ren_entry->old_name, old_name, old_len);
++ ren_entry->old_len = old_len;
++ strncpy(ren_entry->new_name, new_name, new_len);
++ ren_entry->new_len = new_len;
++
++ list_add(&ren_entry->list, &inode_info->renamed_list);
++ inode_info->renamed_list_size++;
++ return 0;
++}
++
++
++int meta_remove_r_entry(dentry_t *dentry, const char *name, int len)
++{
++ int err = 0;
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT
++ "mini_fo: meta_remove_r_entry: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++
++ err = meta_list_remove_r_entry(dentry, name, len);
++ err |= meta_sync_lists(dentry);
++ return err;
++}
++
++int meta_list_remove_r_entry(dentry_t *dentry, const char *name, int len)
++{
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT
++ "mini_fo: meta_list_remove_r_entry: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++ return __meta_list_remove_r_entry(dentry->d_inode, name, len);
++}
++
++int __meta_list_remove_r_entry(inode_t *inode, const char *name, int len)
++{
++ struct list_head *tmp;
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!inode || !itopd(inode))
++ printk(KERN_CRIT
++ "mini_fo: __meta_list_remove_r_entry: \
++ invalid inode passed.\n");
++ inode_info = itopd(inode);
++
++ if(inode_info->renamed_list_size < 0)
++ return -1;
++ if(inode_info->renamed_list_size == 0)
++ return 1;
++
++ list_for_each(tmp, &inode_info->renamed_list) {
++ ren_entry = list_entry(tmp, struct renamed_entry, list);
++ if(ren_entry->new_len != len)
++ continue;
++
++ if(!strncmp(ren_entry->new_name, name, len)) {
++ list_del(tmp);
++ kfree(ren_entry->new_name);
++ kfree(ren_entry->old_name);
++ kfree(ren_entry);
++ inode_info->renamed_list_size--;
++ return 0;
++ }
++ }
++ return 1;
++}
++
++
++/* append a single D entry to the meta file */
++int meta_write_d_entry(dentry_t *dentry, const char *name, int len)
++{
++ dentry_t *meta_dentry = 0;
++ file_t *meta_file = 0;
++ mm_segment_t old_fs;
++
++ int bytes, err;
++ struct vfsmount *meta_mnt = 0;
++ char *buf;
++
++ err = 0;
++
++ if(itopd(dentry->d_inode)->deleted_list_size < 0) {
++ err = -1;
++ goto out;
++ }
++
++ if(dtopd(dentry)->state == UNMODIFIED) {
++ err = build_sto_structure(dentry->d_parent, dentry);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
++ build_sto_structure failed.\n");
++ goto out;
++ }
++ }
++ meta_dentry = lookup_one_len(META_FILENAME,
++ dtohd2(dentry), strlen (META_FILENAME));
++
++ /* We need to create a META-file */
++ if(!meta_dentry->d_inode) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry,
++ S_IRUSR | S_IWUSR,
++ NULL);
++#else
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry,
++ S_IRUSR | S_IWUSR);
++#endif
++ }
++ /* open META-file for writing */
++ meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
++ if(!meta_file || IS_ERR(meta_file)) {
++ printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
++ ERROR opening meta file.\n");
++ mntput(meta_mnt); /* $%& is this necessary? */
++ dput(meta_dentry);
++ err = -1;
++ goto out;
++ }
++
++ /* check if fs supports writing */
++ if(!meta_file->f_op->write) {
++ printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
++ ERROR, fs does not support writing.\n");
++ goto out_err_close;
++ }
++
++ meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ /* size: len for name, 1 for \n and 2 for "D " */
++ buf = (char *) kmalloc(len+3, GFP_KERNEL);
++ if (!buf) {
++ printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
++ out of mem.\n");
++ return -ENOMEM;
++ }
++
++ buf[0] = 'D';
++ buf[1] = ' ';
++ strncpy(buf+2, name, len);
++ buf[len+2] = '\n';
++ bytes = meta_file->f_op->write(meta_file, buf, len+3,
++ &meta_file->f_pos);
++ if(bytes != len+3) {
++ printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
++ ERROR writing.\n");
++ err = -1;
++ }
++ kfree(buf);
++ set_fs(old_fs);
++
++ out_err_close:
++ fput(meta_file);
++ out:
++ return err;
++}
++
++/* append a single R entry to the meta file */
++int meta_write_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len)
++{
++ dentry_t *meta_dentry = 0;
++ file_t *meta_file = 0;
++ mm_segment_t old_fs;
++
++ int bytes, err, buf_len;
++ struct vfsmount *meta_mnt = 0;
++ char *buf;
++
++
++ err = 0;
++
++ if(itopd(dentry->d_inode)->renamed_list_size < 0) {
++ err = -1;
++ goto out;
++ }
++
++ /* build the storage structure? */
++ if(dtopd(dentry)->state == UNMODIFIED) {
++ err = build_sto_structure(dentry->d_parent, dentry);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
++ build_sto_structure failed.\n");
++ goto out;
++ }
++ }
++ meta_dentry = lookup_one_len(META_FILENAME,
++ dtohd2(dentry),
++ strlen (META_FILENAME));
++ if(!meta_dentry->d_inode) {
++ /* We need to create a META-file */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR, NULL);
++#else
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR);
++#endif
++ }
++ /* open META-file for writing */
++ meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
++ if(!meta_file || IS_ERR(meta_file)) {
++ printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
++ ERROR opening meta file.\n");
++ mntput(meta_mnt);
++ dput(meta_dentry);
++ err = -1;
++ goto out;
++ }
++
++ /* check if fs supports writing */
++ if(!meta_file->f_op->write) {
++ printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
++ ERROR, fs does not support writing.\n");
++ goto out_err_close;
++ }
++
++ meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ /* size: 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
++ buf_len = old_len + new_len + 4;
++ buf = (char *) kmalloc(buf_len, GFP_KERNEL);
++ if (!buf) {
++ printk(KERN_CRIT "mini_fo: meta_write_r_entry: out of mem.\n");
++ return -ENOMEM;
++ }
++
++ buf[0] = 'R';
++ buf[1] = ' ';
++ strncpy(buf + 2, old_name, old_len);
++ buf[old_len + 2] = ' ';
++ strncpy(buf + old_len + 3, new_name, new_len);
++ buf[buf_len -1] = '\n';
++ bytes = meta_file->f_op->write(meta_file, buf, buf_len, &meta_file->f_pos);
++ if(bytes != buf_len) {
++ printk(KERN_CRIT "mini_fo: meta_write_r_entry: ERROR writing.\n");
++ err = -1;
++ }
++
++ kfree(buf);
++ set_fs(old_fs);
++
++ out_err_close:
++ fput(meta_file);
++ out:
++ return err;
++}
++
++/* sync D list to disk, append data if app_flag is 1 */
++/* check the meta_mnt, which seems not to be used (properly) */
++
++int meta_sync_d_list(dentry_t *dentry, int app_flag)
++{
++ dentry_t *meta_dentry;
++ file_t *meta_file;
++ mm_segment_t old_fs;
++
++ int bytes, err;
++ struct vfsmount *meta_mnt;
++ char *buf;
++
++ struct list_head *tmp;
++ struct deleted_entry *del_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ err = 0;
++ meta_file=0;
++ meta_mnt=0;
++
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ invalid inode passed.\n");
++ err = -1;
++ goto out;
++ }
++ inode_info = itopd(dentry->d_inode);
++
++ if(inode_info->deleted_list_size < 0) {
++ err = -1;
++ goto out;
++ }
++
++ /* ok, there is something to sync */
++
++ /* build the storage structure? */
++ if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
++ err = build_sto_structure(dentry->d_parent, dentry);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ build_sto_structure failed.\n");
++ goto out;
++ }
++ }
++ meta_dentry = lookup_one_len(META_FILENAME,
++ dtohd2(dentry),
++ strlen(META_FILENAME));
++ if(!meta_dentry->d_inode) {
++ /* We need to create a META-file */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR, NULL);
++#else
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR);
++#endif
++ app_flag = 0;
++ }
++ /* need we truncate the meta file? */
++ if(!app_flag) {
++ struct iattr newattrs;
++ newattrs.ia_size = 0;
++ newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&meta_dentry->d_inode->i_mutex);
++#else
++ down(&meta_dentry->d_inode->i_sem);
++#endif
++ err = notify_change(meta_dentry, &newattrs);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&meta_dentry->d_inode->i_mutex);
++#else
++ up(&meta_dentry->d_inode->i_sem);
++#endif
++
++ if(err || meta_dentry->d_inode->i_size != 0) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ ERROR truncating meta file.\n");
++ goto out_err_close;
++ }
++ }
++
++ /* open META-file for writing */
++ meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
++ if(!meta_file || IS_ERR(meta_file)) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ ERROR opening meta file.\n");
++ /* we don't mntget so we dont't mntput (for now)
++ * mntput(meta_mnt);
++ */
++ dput(meta_dentry);
++ err = -1;
++ goto out;
++ }
++
++ /* check if fs supports writing */
++ if(!meta_file->f_op->write) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ ERROR, fs does not support writing.\n");
++ goto out_err_close;
++ }
++
++ meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ /* here we go... */
++ list_for_each(tmp, &inode_info->deleted_list) {
++ del_entry = list_entry(tmp, struct deleted_entry, list);
++
++ /* size: len for name, 1 for \n and 2 for "D " */
++ buf = (char *) kmalloc(del_entry->len+3, GFP_KERNEL);
++ if (!buf) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ out of mem.\n");
++ return -ENOMEM;
++ }
++
++ buf[0] = 'D';
++ buf[1] = ' ';
++ strncpy(buf+2, del_entry->name, del_entry->len);
++ buf[del_entry->len+2] = '\n';
++ bytes = meta_file->f_op->write(meta_file, buf,
++ del_entry->len+3,
++ &meta_file->f_pos);
++ if(bytes != del_entry->len+3) {
++ printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
++ ERROR writing.\n");
++ err |= -1;
++ }
++ kfree(buf);
++ }
++ set_fs(old_fs);
++
++ out_err_close:
++ fput(meta_file);
++ out:
++ return err;
++
++}
++
++int meta_sync_r_list(dentry_t *dentry, int app_flag)
++{
++ dentry_t *meta_dentry;
++ file_t *meta_file;
++ mm_segment_t old_fs;
++
++ int bytes, err, buf_len;
++ struct vfsmount *meta_mnt;
++ char *buf;
++
++ struct list_head *tmp;
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ err = 0;
++ meta_file=0;
++ meta_mnt=0;
++
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ invalid dentry passed.\n");
++ err = -1;
++ goto out;
++ }
++ inode_info = itopd(dentry->d_inode);
++
++ if(inode_info->deleted_list_size < 0) {
++ err = -1;
++ goto out;
++ }
++
++ /* ok, there is something to sync */
++
++ /* build the storage structure? */
++ if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
++ err = build_sto_structure(dentry->d_parent, dentry);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ build_sto_structure failed.\n");
++ goto out;
++ }
++ }
++ meta_dentry = lookup_one_len(META_FILENAME,
++ dtohd2(dentry),
++ strlen(META_FILENAME));
++ if(!meta_dentry->d_inode) {
++ /* We need to create a META-file */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR, NULL);
++#else
++ vfs_create(dtohd2(dentry)->d_inode,
++ meta_dentry, S_IRUSR | S_IWUSR);
++#endif
++ app_flag = 0;
++ }
++ /* need we truncate the meta file? */
++ if(!app_flag) {
++ struct iattr newattrs;
++ newattrs.ia_size = 0;
++ newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&meta_dentry->d_inode->i_mutex);
++#else
++ down(&meta_dentry->d_inode->i_sem);
++#endif
++ err = notify_change(meta_dentry, &newattrs);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&meta_dentry->d_inode->i_mutex);
++#else
++ up(&meta_dentry->d_inode->i_sem);
++#endif
++ if(err || meta_dentry->d_inode->i_size != 0) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ ERROR truncating meta file.\n");
++ goto out_err_close;
++ }
++ }
++
++ /* open META-file for writing */
++ meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
++ if(!meta_file || IS_ERR(meta_file)) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ ERROR opening meta file.\n");
++ /* we don't mntget so we dont't mntput (for now)
++ * mntput(meta_mnt);
++ */
++ dput(meta_dentry);
++ err = -1;
++ goto out;
++ }
++
++ /* check if fs supports writing */
++ if(!meta_file->f_op->write) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ ERROR, fs does not support writing.\n");
++ goto out_err_close;
++ }
++
++ meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ /* here we go... */
++ list_for_each(tmp, &inode_info->renamed_list) {
++ ren_entry = list_entry(tmp, struct renamed_entry, list);
++ /* size:
++ * 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
++ buf_len = ren_entry->old_len + ren_entry->new_len + 4;
++ buf = (char *) kmalloc(buf_len, GFP_KERNEL);
++ if (!buf) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ out of mem.\n");
++ return -ENOMEM;
++ }
++ buf[0] = 'R';
++ buf[1] = ' ';
++ strncpy(buf + 2, ren_entry->old_name, ren_entry->old_len);
++ buf[ren_entry->old_len + 2] = ' ';
++ strncpy(buf + ren_entry->old_len + 3,
++ ren_entry->new_name, ren_entry->new_len);
++ buf[buf_len - 1] = '\n';
++ bytes = meta_file->f_op->write(meta_file, buf,
++ buf_len, &meta_file->f_pos);
++ if(bytes != buf_len) {
++ printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
++ ERROR writing.\n");
++ err |= -1;
++ }
++ kfree(buf);
++ }
++ set_fs(old_fs);
++
++ out_err_close:
++ fput(meta_file);
++ out:
++ return err;
++}
++
++int meta_check_d_entry(dentry_t *dentry, const char *name, int len)
++{
++ if(!dentry || !dentry->d_inode)
++ printk(KERN_CRIT "mini_fo: meta_check_d_dentry: \
++ invalid dentry passed.\n");
++ return __meta_check_d_entry(dentry->d_inode, name, len);
++}
++
++int __meta_check_d_entry(inode_t *inode, const char *name, int len)
++{
++ struct list_head *tmp;
++ struct deleted_entry *del_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!inode || !itopd(inode))
++ printk(KERN_CRIT "mini_fo: __meta_check_d_dentry: \
++ invalid inode passed.\n");
++
++ inode_info = itopd(inode);
++
++ if(inode_info->deleted_list_size <= 0)
++ return 0;
++
++ list_for_each(tmp, &inode_info->deleted_list) {
++ del_entry = list_entry(tmp, struct deleted_entry, list);
++ if(del_entry->len != len)
++ continue;
++
++ if(!strncmp(del_entry->name, name, len))
++ return 1;
++ }
++ return 0;
++}
++
++/*
++ * check if file has been renamed and return path to orig. base dir.
++ * Implements no error return values so far, what of course sucks.
++ * String is null terminated.'
++ */
++char* meta_check_r_entry(dentry_t *dentry, const char *name, int len)
++{
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
++ invalid dentry passed.\n");
++ return NULL;
++ }
++ return __meta_check_r_entry(dentry->d_inode, name, len);
++}
++
++char* __meta_check_r_entry(inode_t *inode, const char *name, int len)
++{
++ struct list_head *tmp;
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++ char *old_path;
++
++ if(!inode || !itopd(inode)) {
++ printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
++ invalid inode passed.\n");
++ return NULL;
++ }
++ inode_info = itopd(inode);
++
++ if(inode_info->renamed_list_size <= 0)
++ return NULL;
++
++ list_for_each(tmp, &inode_info->renamed_list) {
++ ren_entry = list_entry(tmp, struct renamed_entry, list);
++ if(ren_entry->new_len != len)
++ continue;
++
++ if(!strncmp(ren_entry->new_name, name, len)) {
++ old_path = (char *)
++ kmalloc(ren_entry->old_len+1, GFP_KERNEL);
++ strncpy(old_path,
++ ren_entry->old_name,
++ ren_entry->old_len);
++ old_path[ren_entry->old_len]='\0';
++ return old_path;
++ }
++ }
++ return NULL;
++}
++
++/*
++ * This version only checks if entry exists and return:
++ * 1 if exists,
++ * 0 if not,
++ * -1 if error.
++ */
++int meta_is_r_entry(dentry_t *dentry, const char *name, int len)
++{
++ if(!dentry || !dentry->d_inode) {
++ printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
++ invalid dentry passed.\n");
++ return -1;
++ }
++ return __meta_is_r_entry(dentry->d_inode, name, len);
++}
++
++int __meta_is_r_entry(inode_t *inode, const char *name, int len)
++{
++ struct list_head *tmp;
++ struct renamed_entry *ren_entry;
++ struct mini_fo_inode_info *inode_info;
++
++ if(!inode || !itopd(inode)) {
++ printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
++ invalid inode passed.\n");
++ return -1;
++ }
++ inode_info = itopd(inode);
++
++ if(inode_info->renamed_list_size <= 0)
++ return -1;
++
++ list_for_each(tmp, &inode_info->renamed_list) {
++ ren_entry = list_entry(tmp, struct renamed_entry, list);
++ if(ren_entry->new_len != len)
++ continue;
++
++ if(!strncmp(ren_entry->new_name, name, len))
++ return 1;
++ }
++ return 0;
++}
++
+diff -urN linux-2.6.19.old/fs/mini_fo/mini_fo.h linux-2.6.19.dev/fs/mini_fo/mini_fo.h
+--- linux-2.6.19.old/fs/mini_fo/mini_fo.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/mini_fo.h 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,510 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifndef __MINI_FO_H_
++#define __MINI_FO_H_
++
++#ifdef __KERNEL__
++
++/* META stuff */
++#define META_FILENAME "META_dAfFgHE39ktF3HD2sr"
++
++/* use xattrs? */
++#define XATTR
++
++/* File attributes that when changed, result in a file beeing copied to storage */
++#define COPY_FLAGS ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE
++
++/*
++ * mini_fo filestates
++ */
++#define MODIFIED 1
++#define UNMODIFIED 2
++#define CREATED 3
++#define DEL_REWRITTEN 4
++#define DELETED 5
++#define NON_EXISTANT 6
++
++/* fist file systems superblock magic */
++# define MINI_FO_SUPER_MAGIC 0xf15f
++
++/*
++ * STRUCTURES:
++ */
++
++/* mini_fo inode data in memory */
++struct mini_fo_inode_info {
++ inode_t *wii_inode;
++ inode_t *wii_inode2; /* pointer to storage inode */
++
++ /* META-data lists */
++ /* deleted list, ex wol */
++ struct list_head deleted_list;
++ int deleted_list_size;
++
++ /* renamed list */
++ struct list_head renamed_list;
++ int renamed_list_size;
++
++ /* add other lists here ... */
++};
++
++/* mini_fo dentry data in memory */
++struct mini_fo_dentry_info {
++ dentry_t *wdi_dentry;
++ dentry_t *wdi_dentry2; /* pointer to storage dentry */
++ unsigned int state; /* state of the mini_fo dentry */
++};
++
++
++/* mini_fo super-block data in memory */
++struct mini_fo_sb_info {
++ super_block_t *wsi_sb, *wsi_sb2; /* mk: might point to the same sb */
++ struct vfsmount *hidden_mnt, *hidden_mnt2;
++ dentry_t *base_dir_dentry;
++ dentry_t *storage_dir_dentry;
++ ;
++};
++
++/* readdir_data, readdir helper struct */
++struct readdir_data {
++ struct list_head ndl_list; /* linked list head ptr */
++ int ndl_size; /* list size */
++ int sto_done; /* flag to show that the storage dir entries have
++ * all been read an now follow base entries */
++};
++
++/* file private data. */
++struct mini_fo_file_info {
++ struct file *wfi_file;
++ struct file *wfi_file2; /* pointer to storage file */
++ struct readdir_data rd;
++};
++
++/* struct ndl_entry */
++struct ndl_entry {
++ struct list_head list;
++ char *name;
++ int len;
++};
++
++/********************************
++ * META-data structures
++ ********************************/
++
++/* deleted entry */
++struct deleted_entry {
++ struct list_head list;
++ char *name;
++ int len;
++};
++
++/* renamed entry */
++struct renamed_entry {
++ struct list_head list;
++ char *old_name; /* old directory with full path */
++ int old_len; /* length of above string */
++ char *new_name; /* new directory name */
++ int new_len; /* length of above string */
++};
++
++/* attr_change entry */
++struct attr_change_entry {
++ struct list_head list;
++ char *name;
++ int len;
++};
++
++/* link entry */
++struct link_entry {
++ struct list_head list;
++ int links_moved;
++ int inum_base;
++ int inum_sto;
++ char *weird_name;
++ int weird_name_len;
++};
++
++
++/* Some other stuff required for mini_fo_filldir64, copied from
++ * fs/readdir.c
++ */
++
++#define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1))
++#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
++
++
++struct linux_dirent64 {
++ u64 d_ino;
++ s64 d_off;
++ unsigned short d_reclen;
++ unsigned char d_type;
++ char d_name[0];
++};
++
++
++struct getdents_callback64 {
++ struct linux_dirent64 * current_dir;
++ struct linux_dirent64 * previous;
++ int count;
++ int error;
++};
++
++struct linux_dirent {
++ unsigned long d_ino;
++ unsigned long d_off;
++ unsigned short d_reclen;
++ char d_name[1];
++};
++
++struct getdents_callback {
++ struct linux_dirent * current_dir;
++ struct linux_dirent * previous;
++ int count;
++ int error;
++};
++
++
++/*
++ * MACROS:
++ */
++
++/* file TO private_data */
++# define ftopd(file) ((struct mini_fo_file_info *)((file)->private_data))
++# define __ftopd(file) ((file)->private_data)
++/* file TO hidden_file */
++# define ftohf(file) ((ftopd(file))->wfi_file)
++# define ftohf2(file) ((ftopd(file))->wfi_file2)
++
++/* inode TO private_data */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->i_private)
++# define __itopd(ino) ((ino)->i_private)
++#else
++# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->u.generic_ip)
++# define __itopd(ino) ((ino)->u.generic_ip)
++#endif
++/* inode TO hidden_inode */
++# define itohi(ino) (itopd(ino)->wii_inode)
++# define itohi2(ino) (itopd(ino)->wii_inode2)
++
++/* superblock TO private_data */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++# define stopd(super) ((struct mini_fo_sb_info *)(super)->s_fs_info)
++# define __stopd(super) ((super)->s_fs_info)
++#else
++# define stopd(super) ((struct mini_fo_sb_info *)(super)->u.generic_sbp)
++# define __stopd(super) ((super)->u.generic_sbp)
++#endif
++
++/* unused? # define vfs2priv stopd */
++/* superblock TO hidden_superblock */
++
++# define stohs(super) (stopd(super)->wsi_sb)
++# define stohs2(super) (stopd(super)->wsi_sb2)
++
++/* dentry TO private_data */
++# define dtopd(dentry) ((struct mini_fo_dentry_info *)(dentry)->d_fsdata)
++# define __dtopd(dentry) ((dentry)->d_fsdata)
++/* dentry TO hidden_dentry */
++# define dtohd(dent) (dtopd(dent)->wdi_dentry)
++# define dtohd2(dent) (dtopd(dent)->wdi_dentry2)
++
++/* dentry to state */
++# define dtost(dent) (dtopd(dent)->state)
++# define sbt(sb) ((sb)->s_type->name)
++
++#define IS_WRITE_FLAG(flag) (flag & (O_RDWR | O_WRONLY | O_APPEND))
++#define IS_COPY_FLAG(flag) (flag & (COPY_FLAGS))
++
++/* macros to simplify non-SCA code */
++# define MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages)
++# define MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages)
++# define FREE_PAGE_POINTERS(hidden_pages, num)
++# define FREE_PAGEDATA_POINTERS(hidden_pages_data, num)
++# define FOR_EACH_PAGE
++# define CURRENT_HIDDEN_PAGE hidden_page
++# define CURRENT_HIDDEN_PAGEDATA hidden_page_data
++# define CURRENT_HIDDEN_PAGEINDEX page->index
++
++/*
++ * EXTERNALS:
++ */
++extern struct file_operations mini_fo_main_fops;
++extern struct file_operations mini_fo_dir_fops;
++extern struct inode_operations mini_fo_main_iops;
++extern struct inode_operations mini_fo_dir_iops;
++extern struct inode_operations mini_fo_symlink_iops;
++extern struct super_operations mini_fo_sops;
++extern struct dentry_operations mini_fo_dops;
++extern struct vm_operations_struct mini_fo_shared_vmops;
++extern struct vm_operations_struct mini_fo_private_vmops;
++extern struct address_space_operations mini_fo_aops;
++
++#if 0 /* unused by mini_fo */
++extern int mini_fo_interpose(dentry_t *hidden_dentry, dentry_t *this_dentry, super_block_t *sb, int flag);
++#if defined(FIST_FILTER_DATA) || defined(FIST_FILTER_SCA)
++extern page_t *mini_fo_get1page(file_t *file, int index);
++extern int mini_fo_fill_zeros(file_t *file, page_t *page, unsigned from);
++# endif /* FIST_FILTER_DATA || FIST_FILTER_SCA */
++
++
++# define mini_fo_hidden_dentry(d) __mini_fo_hidden_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
++# define mini_fo_hidden_sto_dentry(d) __mini_fo_hidden_sto_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
++
++extern dentry_t *__mini_fo_hidden_dentry(char *file, char *func, int line, dentry_t *this_dentry);
++extern dentry_t *__mini_fo_hidden_sto_dentry(char *file, char *func, int line, dentry_t *this_dentry);
++
++extern int mini_fo_read_file(const char *filename, void *buf, int len);
++extern int mini_fo_write_file(const char *filename, void *buf, int len);
++extern dentry_t *fist_lookup(dentry_t *dir, const char *name, vnode_t **out, uid_t uid, gid_t gid);
++#endif /* unused by mini_fo */
++
++/* state transition functions */
++extern int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag);
++extern int nondir_del_rew_to_del(dentry_t *dentry);
++extern int nondir_creat_to_del(dentry_t *dentry);
++extern int nondir_mod_to_del(dentry_t *dentry);
++extern int nondir_unmod_to_del(dentry_t *dentry);
++
++extern int dir_unmod_to_mod(dentry_t *dentry);
++
++/* rename specials */
++extern int rename_directory(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
++extern int rename_nondir(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
++
++/* misc stuff */
++extern int mini_fo_tri_interpose(dentry_t *hidden_dentry,
++ dentry_t *hidden_sto_dentry,
++ dentry_t *dentry,
++ super_block_t *sb, int flag);
++
++extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
++ dentry_t *src_dentry, struct vfsmount *src_mnt);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
++
++extern int create_sto_nod(dentry_t *dentry, int mode, dev_t dev);
++extern int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd);
++#else
++extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode);
++
++extern int create_sto_nod(dentry_t *dentry, int mode, int dev);
++extern int create_sto_reg_file(dentry_t *dentry, int mode);
++#endif
++
++extern int create_sto_dir(dentry_t *dentry, int mode);
++
++extern int exists_in_storage(dentry_t *dentry);
++extern int is_mini_fo_existant(dentry_t *dentry);
++extern int get_neg_sto_dentry(dentry_t *dentry);
++extern int build_sto_structure(dentry_t *dir, dentry_t *dentry);
++extern int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len);
++extern dentry_t *bpath_walk(super_block_t *sb, char *bpath);
++extern int bpath_put(dentry_t *dentry);
++
++/* check_mini_fo types functions */
++extern int check_mini_fo_dentry(dentry_t *dentry);
++extern int check_mini_fo_file(file_t *file);
++extern int check_mini_fo_inode(inode_t *inode);
++
++/* General meta functions, can be called from outside of meta.c */
++extern int meta_build_lists(dentry_t *dentry);
++extern int meta_put_lists(dentry_t *dentry);
++extern int __meta_put_lists(inode_t *inode);
++
++extern int meta_add_d_entry(dentry_t *dentry, const char *name, int len);
++extern int meta_add_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len);
++
++extern int meta_remove_r_entry(dentry_t *dentry, const char *name, int len);
++
++extern int meta_check_d_entry(dentry_t *dentry, const char *name, int len);
++extern int __meta_check_d_entry(inode_t *inode, const char *name, int len);
++
++extern char* meta_check_r_entry(dentry_t *dentry, const char *name, int len);
++extern char* __meta_check_r_entry(inode_t *inode, const char *name, int len);
++extern int meta_is_r_entry(dentry_t *dentry, const char *name, int len);
++extern int __meta_is_r_entry(inode_t *inode, const char *name, int len);
++
++/* Specific meta functions, should be called only inside meta.c */
++extern int __meta_put_d_list(inode_t *inode);
++extern int __meta_put_r_list(inode_t *inode);
++
++extern int meta_list_add_d_entry(dentry_t *dentry,
++ const char *name, int len);
++extern int meta_list_add_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len);
++
++extern int meta_list_remove_r_entry(dentry_t *dentry,
++ const char *name, int len);
++
++extern int __meta_list_remove_r_entry(inode_t *inode,
++ const char *name, int len);
++
++extern int meta_write_d_entry(dentry_t *dentry, const char *name, int len);
++extern int meta_write_r_entry(dentry_t *dentry,
++ const char *old_name, int old_len,
++ const char *new_name, int new_len);
++
++extern int meta_sync_lists(dentry_t *dentry);
++extern int meta_sync_d_list(dentry_t *dentry, int app_flag);
++extern int meta_sync_r_list(dentry_t *dentry, int app_flag);
++
++/* ndl stuff */
++extern int ndl_add_entry(struct readdir_data *rd, const char *name, int len);
++extern void ndl_put_list(struct readdir_data *rd);
++extern int ndl_check_entry(struct readdir_data *rd,
++ const char *name, int len);
++
++
++# define copy_inode_size(dst, src) \
++ dst->i_size = src->i_size; \
++ dst->i_blocks = src->i_blocks;
++
++static inline void
++fist_copy_attr_atime(inode_t *dest, const inode_t *src)
++{
++ ASSERT(dest != NULL);
++ ASSERT(src != NULL);
++ dest->i_atime = src->i_atime;
++}
++static inline void
++fist_copy_attr_times(inode_t *dest, const inode_t *src)
++{
++ ASSERT(dest != NULL);
++ ASSERT(src != NULL);
++ dest->i_atime = src->i_atime;
++ dest->i_mtime = src->i_mtime;
++ dest->i_ctime = src->i_ctime;
++}
++static inline void
++fist_copy_attr_timesizes(inode_t *dest, const inode_t *src)
++{
++ ASSERT(dest != NULL);
++ ASSERT(src != NULL);
++ dest->i_atime = src->i_atime;
++ dest->i_mtime = src->i_mtime;
++ dest->i_ctime = src->i_ctime;
++ copy_inode_size(dest, src);
++}
++static inline void
++fist_copy_attr_all(inode_t *dest, const inode_t *src)
++{
++ ASSERT(dest != NULL);
++ ASSERT(src != NULL);
++ dest->i_mode = src->i_mode;
++ dest->i_nlink = src->i_nlink;
++ dest->i_uid = src->i_uid;
++ dest->i_gid = src->i_gid;
++ dest->i_rdev = src->i_rdev;
++ dest->i_atime = src->i_atime;
++ dest->i_mtime = src->i_mtime;
++ dest->i_ctime = src->i_ctime;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
++ dest->i_blksize = src->i_blksize;
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12)
++ dest->i_blkbits = src->i_blkbits;
++# endif /* linux 2.4.12 and newer */
++ copy_inode_size(dest, src);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++ dest->i_attr_flags = src->i_attr_flags;
++#else
++ dest->i_flags = src->i_flags;
++#endif
++}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++/* copied from linux/fs.h */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++static inline void double_lock(struct dentry *d1, struct dentry *d2)
++{
++ struct mutex *m1 = &d1->d_inode->i_mutex;
++ struct mutex *m2 = &d2->d_inode->i_mutex;
++ if (m1 != m2) {
++ if ((unsigned long) m1 < (unsigned long) m2) {
++ struct mutex *tmp = m2;
++ m2 = m1; m1 = tmp;
++ }
++ mutex_lock(m1);
++ }
++ mutex_lock(m2);
++}
++
++static inline void double_unlock(struct dentry *d1, struct dentry *d2)
++{
++ struct mutex *m1 = &d1->d_inode->i_mutex;
++ struct mutex *m2 = &d2->d_inode->i_mutex;
++ mutex_unlock(m1);
++ if (m1 != m2)
++ mutex_unlock(m2);
++ dput(d1);
++ dput(d2);
++}
++
++#else
++static inline void double_down(struct semaphore *s1, struct semaphore *s2)
++{
++ if (s1 != s2) {
++ if ((unsigned long) s1 < (unsigned long) s2) {
++ struct semaphore *tmp = s2;
++ s2 = s1; s1 = tmp;
++ }
++ down(s1);
++ }
++ down(s2);
++}
++
++static inline void double_up(struct semaphore *s1, struct semaphore *s2)
++{
++ up(s1);
++ if (s1 != s2)
++ up(s2);
++}
++
++static inline void double_lock(struct dentry *d1, struct dentry *d2)
++{
++ double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
++}
++
++static inline void double_unlock(struct dentry *d1, struct dentry *d2)
++{
++ double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
++ dput(d1);
++ dput(d2);
++}
++#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
++#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
++#endif /* __KERNEL__ */
++
++/*
++ * Definitions for user and kernel code
++ */
++
++/* ioctls */
++
++#endif /* not __MINI_FO_H_ */
+diff -urN linux-2.6.19.old/fs/mini_fo/mini_fo-merge linux-2.6.19.dev/fs/mini_fo/mini_fo-merge
+--- linux-2.6.19.old/fs/mini_fo/mini_fo-merge 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/mini_fo-merge 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,180 @@
++#!/bin/bash
++#
++# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version
++# 2 of the License, or (at your option) any later version.
++#
++
++BASE=
++STO=
++HELP=
++DRYRUN=
++VERBOSE=
++TMP="/tmp/"
++META_NAME="META_dAfFgHE39ktF3HD2sr"
++SKIP_DEL_LIST="skip-delete-list.mini_fo-merge"
++
++COMMAND=
++exec_command()
++{
++ if [ x$DRYRUN == "xset" ]; then
++ echo " would run: $COMMAND"
++ elif ! [ x$DRYRUN == "xset" ]; then
++ if [ x$VERBOSE == "xset" ]; then
++ echo " running: $COMMAND"
++ fi
++ eval $COMMAND
++ fi
++}
++
++usage()
++{
++cat <<EOF
++
++USAGE: $0 -b <base dir> -s <storage dir>
++Version 0.1
++
++This script merges the contents of a mini_fo storage file system back
++to the base file system.
++
++!!! Warning: This will modify the base filesystem and can destroy data
++ if used wrongly.
++
++Options:
++ -b <base dir>
++ the directory of the base file system.
++
++ -s <storage dir>
++ the directory of the storage file system.
++
++ -d dry run, will not change anything and print the commands that
++ would be executed.
++
++ -t tmp dir for storing temporary file. default: $TMP
++
++ -v show what operations are performed.
++
++ -h displays this message.
++
++EOF
++}
++
++# parse parameters
++while getopts hdvt:b:s: OPTS
++ do
++ case $OPTS in
++ h) HELP="set";;
++ d) DRYRUN="set";;
++ v) VERBOSE="set";;
++ b) BASE="$OPTARG";;
++ s) STO="$OPTARG";;
++ t) TMP="$OPTARG";;
++ ?) usage
++ exit 1;;
++ esac
++done
++
++if [ "x$HELP" == "xset" ]; then
++ usage
++ exit -1
++fi
++
++if ! [ -d "$BASE" ] || ! [ -d "$STO" ]; then
++ echo -e "$0:\n Error, -s and/or -b argument missing. type $0 -h for help."
++ exit -1;
++fi
++
++# get full paths
++pushd $STO; STO=`pwd`; popd
++pushd $BASE; BASE=`pwd`; popd
++TMP=${TMP%/}
++
++
++cat<<EOF
++###############################################################################
++# mini_fo-merge
++#
++# base dir: $BASE
++# storage dir: $STO
++# meta filename: $META_NAME
++# dry run: $DRYRUN
++# verbose: $VERBOSE
++# tmp files: $TMP
++###############################################################################
++
++EOF
++
++rm $TMP/$SKIP_DEL_LIST
++
++# first process all renamed dirs
++echo "Merging renamed directories..."
++pushd $STO &> /dev/null
++find . -name $META_NAME -type f -print0 | xargs -0 -e grep -e '^R ' | tr -s ':R' ' ' | while read ENTRY; do
++ echo "entry: $ENTRY"
++ META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
++ OLD_B_DIR=`echo $ENTRY | cut -d ' ' -f 2 | sed -e 's/\///'`
++ NEW_NAME=`echo $ENTRY | cut -d ' ' -f 3`
++ NEW_B_DIR=`echo $META_FILE | sed -e "s/$META_NAME/$NEW_NAME/" | sed -e 's/^\.\///'`
++ echo "META_FILE: $META_FILE"
++ echo "OLD_B_DIR: $OLD_B_DIR"
++ echo "NEW_NAME: $NEW_NAME"
++ echo "NEW_B_DIR: $NEW_B_DIR"
++
++ pushd $BASE &> /dev/null
++ # remove an existing dir in storage
++ COMMAND="rm -rf $NEW_B_DIR"; exec_command
++ COMMAND="cp -R $OLD_B_DIR $NEW_B_DIR"; exec_command
++ echo ""
++ popd &> /dev/null
++
++ # remember this dir to exclude it from deleting later
++ echo $NEW_B_DIR >> $TMP/$SKIP_DEL_LIST
++done
++
++# delete all whiteouted files from base
++echo -e "\nDeleting whiteout'ed files from base file system..."
++find . -name $META_NAME -type f -print0 | xargs -0 -e grep -e '^D ' | sed -e 's/:D//' | while read ENTRY; do
++ META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
++ DEL_NAME=`echo $ENTRY | cut -d ' ' -f 2`
++ DEL_FILE=`echo $META_FILE | sed -e "s/$META_NAME/$DEL_NAME/" | sed -e 's/^\.\///'`
++ grep -x $DEL_FILE $TMP/$SKIP_DEL_LIST &> /dev/null
++ if [ $? -ne 0 ]; then
++ pushd $BASE &> /dev/null
++ COMMAND="rm -rf $DEL_FILE"; exec_command
++ popd &> /dev/null
++ else
++ echo " excluding: $DEL_FILE as in skip-del-list."
++ fi
++done
++
++# create all dirs and update permissions
++echo -e "\nSetting up directory structures in base file system..."
++find . -type d | sed -e 's/^\.\///' | while read DIR; do
++ PERMS=`stat -c %a $DIR`
++ DIR_UID=`stat -c %u $DIR`
++ DIR_GID=`stat -c %g $DIR`
++ pushd $BASE &> /dev/null
++ if ! [ -d $DIR ]; then
++ COMMAND="mkdir -p $DIR"; exec_command
++ fi
++ COMMAND="chmod $PERMS $DIR"; exec_command
++ COMMAND="chown $DIR_UID:$DIR_GID $DIR"; exec_command
++ popd &> /dev/null
++done
++
++# merge all non-directory files
++echo -e "\nMerging all non-directory files...."
++for i in b c p f l s; do
++ find . -type $i | sed -e 's/^\.\///' | grep -v "$META_NAME" | while read FILE; do
++ pushd $BASE #&> /dev/null
++ COMMAND="cp -df $STO/$FILE $BASE/$FILE"; exec_command
++ popd &> /dev/null
++ done
++done
++popd &> /dev/null
++
++#rm $TMP/$SKIP_DEL_LIST
++
++echo "Done!"
+diff -urN linux-2.6.19.old/fs/mini_fo/mini_fo-overlay linux-2.6.19.dev/fs/mini_fo/mini_fo-overlay
+--- linux-2.6.19.old/fs/mini_fo/mini_fo-overlay 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/mini_fo-overlay 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,130 @@
++#!/bin/bash
++#
++# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License
++# as published by the Free Software Foundation; either version
++# 2 of the License, or (at your option) any later version.
++#
++
++HELP=
++SUFF=
++MNTP=
++MNT_DIR="/mnt"
++STO=
++STO_DIR="/tmp"
++BASE=
++
++usage()
++{
++cat <<EOF
++
++Usage: $0 [-s suffix] [-d sto_dir_dir] [-m mount point] base_dir
++Version 0.1
++
++This script overlays the given base directory using the mini_fo file
++system. If only the base directory base_dir is given, $0
++will use a storage directory called "sto-<base_dir_name>" in $STO_DIR,
++and mount point "mini_fo-<base_dir_dir>" in $MNT_DIR.
++
++Options:
++ -s <suffix>
++ add given suffix to storage directory and the mount
++ point. This is usefull for overlaying one base directory
++ several times and avoiding conflicts with storage directory
++ names and mount points.
++
++ -d <sto_dir_dir>
++ change the directory in which the storage directory will be
++ created (default is currently "$STO_DIR".
++
++ -m <mount point>
++ use an alternative directory to create the mini_fo
++ mountpoint (default is currently "$MNT_DIR".
++
++ -h displays this message.
++
++EOF
++exit 1;
++}
++
++while getopts hm:s:d: OPTS
++ do
++ case $OPTS in
++ s) SUFF="$OPTARG";;
++ d) STO_DIR="$OPTARG";;
++ m) MNT_DIR="$OPTARG";;
++ h) HELP="set";;
++ ?) usage
++ exit 1;;
++ esac
++done
++shift $(($OPTIND - 1))
++
++BASE="$1"
++
++if [ "x$HELP" == "xset" ]; then
++ usage
++ exit -1
++fi
++
++# fix suffix
++if [ "x$SUFF" != "x" ]; then
++ SUFF="-$SUFF"
++fi
++
++# kill trailing slashes
++MNT_DIR=${MNT_DIR%/}
++STO_DIR=${STO_DIR%/}
++BASE=${BASE%/}
++
++
++if ! [ -d "$BASE" ]; then
++ echo "invalid base dir $BASE, run $0 -h for help."
++ exit -1
++fi
++
++# check opts
++if ! [ -d "$MNT_DIR" ]; then
++ echo "invalid mount dir $MNT_DIR, run $0 -h for help."
++ exit -1
++fi
++
++if ! [ -d "$STO_DIR" ]; then
++ echo "invalid sto_dir_dir $STO_DIR, run $0 -h for help."
++ exit -1
++fi
++
++MNTP="$MNT_DIR/mini_fo-`basename $BASE`$SUFF"
++STO="$STO_DIR/sto-`basename $BASE`$SUFF"
++
++# create the mount point if it doesn't exist
++mkdir -p $MNTP
++if [ $? -ne 0 ]; then
++ echo "Error, failed to create mount point $MNTP"
++fi
++
++mkdir -p $STO
++if [ $? -ne 0 ]; then
++ echo "Error, failed to create storage dir $STO"
++fi
++
++# check if fs is already mounted
++mount | grep mini_fo | grep $MNTP &> /dev/null
++if [ $? -eq 0 ]; then
++ echo "Error, existing mini_fo mount at $MNTP."
++ exit -1
++fi
++
++mount | grep mini_fo | grep $STO &> /dev/null
++if [ $? -eq 0 ]; then
++ echo "Error, $STO seems to be used already."
++ exit -1
++fi
++
++# mount
++mount -t mini_fo -o base=$BASE,sto=$STO $BASE $MNTP
++
++if [ $? -ne 0 ]; then
++ echo "Error, mounting failed, maybe no permisson to mount?"
++fi
+diff -urN linux-2.6.19.old/fs/mini_fo/mmap.c linux-2.6.19.dev/fs/mini_fo/mmap.c
+--- linux-2.6.19.old/fs/mini_fo/mmap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/mmap.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,637 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif /* HAVE_CONFIG_H */
++
++#include "fist.h"
++#include "mini_fo.h"
++
++
++#ifdef FIST_COUNT_WRITES
++/* for counting writes in the middle vs. regular writes */
++unsigned long count_writes = 0, count_writes_middle = 0;
++#endif /* FIST_COUNT_WRITES */
++
++/* forward declaration of commit write and prepare write */
++STATIC int mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to);
++STATIC int mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to);
++
++
++/*
++ * Function for handling creation of holes when lseek-ing past the
++ * end of the file and then writing some data.
++ */
++int
++mini_fo_fill_zeros(file_t* file, page_t *page, unsigned from)
++{
++ int err = 0;
++ dentry_t *dentry = file->f_dentry;
++ inode_t *inode = dentry->d_inode;
++ page_t *tmp_page;
++ int index;
++
++ print_entry_location();
++
++ for (index = inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
++ tmp_page = mini_fo_get1page(file, index);
++ if (IS_ERR(tmp_page)) {
++ err = PTR_ERR(tmp_page);
++ goto out;
++ }
++
++ /*
++ * zero out rest of the contents of the page between the appropriate
++ * offsets.
++ */
++ memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
++
++ if (! (err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
++ err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
++
++ page_cache_release(tmp_page);
++ if (err < 0)
++ goto out;
++ if (current->need_resched)
++ schedule();
++ }
++
++ /* zero out appropriate parts of last page */
++
++ /*
++ * if the encoding type is block, then adjust the 'from' (where the
++ * zeroing will start) offset appropriately
++ */
++ from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
++
++ if ((from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0) {
++
++ memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, from - (inode->i_size & ~PAGE_CACHE_MASK));
++ if (! (err = mini_fo_prepare_write(file, page, 0, PAGE_CACHE_SIZE)))
++ err = mini_fo_commit_write(file, page, 0, PAGE_CACHE_SIZE);
++
++ if (err < 0)
++ goto out;
++ if (current->need_resched)
++ schedule();
++ }
++
++ out:
++ print_exit_status(err);
++ return err;
++}
++
++
++
++STATIC int
++mini_fo_writepage(page_t *page)
++{
++ int err = -EIO;
++ inode_t *inode;
++ inode_t *hidden_inode;
++ page_t *hidden_page;
++ char *kaddr, *hidden_kaddr;
++
++ print_entry_location();
++
++ inode = page->mapping->host;
++ hidden_inode = itohi(inode);
++
++ /*
++ * writepage is called when shared mmap'ed files need to write
++ * their pages, while prepare/commit_write are called from the
++ * non-paged write() interface. (However, in 2.3 the two interfaces
++ * share the same cache, while in 2.2 they didn't.)
++ *
++ * So we pretty much have to duplicate much of what commit_write does.
++ */
++
++ /* find lower page (returns a locked page) */
++ hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
++ if (!hidden_page)
++ goto out;
++
++ /* get page address, and encode it */
++ kaddr = (char *) kmap(page);
++ hidden_kaddr = (char*) kmap(hidden_page);
++ mini_fo_encode_block(kaddr, hidden_kaddr, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
++ /* if encode_block could fail, then return error */
++ kunmap(page);
++ kunmap(hidden_page);
++
++ /* call lower writepage (expects locked page) */
++ err = hidden_inode->i_mapping->a_ops->writepage(hidden_page);
++
++ /*
++ * update mtime and ctime of lower level file system
++ * mini_fo' mtime and ctime are updated by generic_file_write
++ */
++ hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,1)
++ UnlockPage(hidden_page); /* b/c grab_cache_page locked it */
++# endif /* kernel older than 2.4.1 */
++ page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
++
++ if (err)
++ ClearPageUptodate(page);
++ else
++ SetPageUptodate(page);
++ out:
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1)
++ UnlockPage(page);
++# endif /* kernel 2.4.1 and newer */
++ print_exit_status(err);
++ return err;
++}
++
++
++/*
++ * get one page from cache or lower f/s, return error otherwise.
++ * returns unlocked, up-to-date page (if ok), with increased refcnt.
++ */
++page_t *
++mini_fo_get1page(file_t *file, int index)
++{
++ page_t *page;
++ dentry_t *dentry;
++ inode_t *inode;
++ struct address_space *mapping;
++ int err;
++
++ print_entry_location();
++
++ dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
++ inode = dentry->d_inode;
++ mapping = inode->i_mapping;
++
++ fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
++ if (index < 0) {
++ printk("%s BUG: index=%d\n", __FUNCTION__, index);
++ page = ERR_PTR(-EIO);
++ goto out;
++ }
++ page = read_cache_page(mapping,
++ index,
++ (filler_t *) mapping->a_ops->readpage,
++ (void *) file);
++ if (IS_ERR(page))
++ goto out;
++ wait_on_page(page);
++ if (!Page_Uptodate(page)) {
++ lock_page(page);
++ err = mapping->a_ops->readpage(file, page);
++ if (err) {
++ page = ERR_PTR(err);
++ goto out;
++ }
++ wait_on_page(page);
++ if (!Page_Uptodate(page)) {
++ page = ERR_PTR(-EIO);
++ goto out;
++ }
++ }
++
++ out:
++ print_exit_pointer(page);
++ return page;
++}
++
++
++/*
++ * get one page from cache or lower f/s, return error otherwise.
++ * similar to get1page, but doesn't guarantee that it will return
++ * an unlocked page.
++ */
++page_t *
++mini_fo_get1page_cached(file_t *file, int index)
++{
++ page_t *page;
++ dentry_t *dentry;
++ inode_t *inode;
++ struct address_space *mapping;
++ int err;
++
++ print_entry_location();
++
++ dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
++ inode = dentry->d_inode;
++ mapping = inode->i_mapping;
++
++ fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
++ if (index < 0) {
++ printk("%s BUG: index=%d\n", __FUNCTION__, index);
++ page = ERR_PTR(-EIO);
++ goto out;
++ }
++ page = read_cache_page(mapping,
++ index,
++ (filler_t *) mapping->a_ops->readpage,
++ (void *) file);
++ if (IS_ERR(page))
++ goto out;
++
++ out:
++ print_exit_pointer(page);
++ return page;
++}
++
++
++/*
++ * readpage is called from generic_page_read and the fault handler.
++ * If your file system uses generic_page_read for the read op, it
++ * must implement readpage.
++ *
++ * Readpage expects a locked page, and must unlock it.
++ */
++STATIC int
++mini_fo_do_readpage(file_t *file, page_t *page)
++{
++ int err = -EIO;
++ dentry_t *dentry;
++ file_t *hidden_file = NULL;
++ dentry_t *hidden_dentry;
++ inode_t *inode;
++ inode_t *hidden_inode;
++ char *page_data;
++ page_t *hidden_page;
++ char *hidden_page_data;
++ int real_size;
++
++ print_entry_location();
++
++ dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
++ if (ftopd(file) != NULL)
++ hidden_file = ftohf(file);
++ hidden_dentry = dtohd(dentry);
++ inode = dentry->d_inode;
++ hidden_inode = itohi(inode);
++
++ fist_dprint(7, "%s: requesting page %d from file %s\n", __FUNCTION__, page->index, dentry->d_name.name);
++
++ MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages);
++ MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
++ FOR_EACH_PAGE
++ CURRENT_HIDDEN_PAGE = NULL;
++
++ /* find lower page (returns a locked page) */
++ FOR_EACH_PAGE {
++ fist_dprint(8, "%s: Current page index = %d\n", __FUNCTION__, CURRENT_HIDDEN_PAGEINDEX);
++ CURRENT_HIDDEN_PAGE = read_cache_page(hidden_inode->i_mapping,
++ CURRENT_HIDDEN_PAGEINDEX,
++ (filler_t *) hidden_inode->i_mapping->a_ops->readpage,
++ (void *) hidden_file);
++ if (IS_ERR(CURRENT_HIDDEN_PAGE)) {
++ err = PTR_ERR(CURRENT_HIDDEN_PAGE);
++ CURRENT_HIDDEN_PAGE = NULL;
++ goto out_release;
++ }
++ }
++
++ /*
++ * wait for the page data to show up
++ * (signaled by readpage as unlocking the page)
++ */
++ FOR_EACH_PAGE {
++ wait_on_page(CURRENT_HIDDEN_PAGE);
++ if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
++ /*
++ * call readpage() again if we returned from wait_on_page with a
++ * page that's not up-to-date; that can happen when a partial
++ * page has a few buffers which are ok, but not the whole
++ * page.
++ */
++ lock_page(CURRENT_HIDDEN_PAGE);
++ err = hidden_inode->i_mapping->a_ops->readpage(hidden_file,
++ CURRENT_HIDDEN_PAGE);
++ if (err) {
++ CURRENT_HIDDEN_PAGE = NULL;
++ goto out_release;
++ }
++ wait_on_page(CURRENT_HIDDEN_PAGE);
++ if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
++ err = -EIO;
++ goto out_release;
++ }
++ }
++ }
++
++ /* map pages, get their addresses */
++ page_data = (char *) kmap(page);
++ FOR_EACH_PAGE
++ CURRENT_HIDDEN_PAGEDATA = (char *) kmap(CURRENT_HIDDEN_PAGE);
++
++ /* if decode_block could fail, then return error */
++ err = 0;
++ real_size = hidden_inode->i_size - (page->index << PAGE_CACHE_SHIFT);
++ if (real_size <= 0)
++ memset(page_data, 0, PAGE_CACHE_SIZE);
++ else if (real_size < PAGE_CACHE_SIZE) {
++ mini_fo_decode_block(hidden_page_data, page_data, real_size, inode, inode->i_sb, page->index);
++ memset(page_data + real_size, 0, PAGE_CACHE_SIZE - real_size);
++ } else
++ mini_fo_decode_block(hidden_page_data, page_data, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
++
++ FOR_EACH_PAGE
++ kunmap(CURRENT_HIDDEN_PAGE);
++ kunmap(page);
++
++ out_release:
++ FOR_EACH_PAGE
++ if (CURRENT_HIDDEN_PAGE)
++ page_cache_release(CURRENT_HIDDEN_PAGE); /* undo read_cache_page */
++
++ FREE_PAGE_POINTERS(hidden_pages, num_hidden_pages);
++ FREE_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
++
++ out:
++ if (err == 0)
++ SetPageUptodate(page);
++ else
++ ClearPageUptodate(page);
++
++ print_exit_status(err);
++ return err;
++}
++
++
++STATIC int
++mini_fo_readpage(file_t *file, page_t *page)
++{
++ int err;
++ print_entry_location();
++
++ err = mini_fo_do_readpage(file, page);
++
++ /*
++ * we have to unlock our page, b/c we _might_ have gotten a locked page.
++ * but we no longer have to wakeup on our page here, b/c UnlockPage does
++ * it
++ */
++ UnlockPage(page);
++
++ print_exit_status(err);
++ return err;
++}
++
++
++STATIC int
++mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to)
++{
++ int err = 0;
++
++ print_entry_location();
++
++ /*
++ * we call kmap(page) only here, and do the kunmap
++ * and the actual downcalls, including unlockpage and uncache
++ * in commit_write.
++ */
++ kmap(page);
++
++ /* fast path for whole page writes */
++ if (from == 0 && to == PAGE_CACHE_SIZE)
++ goto out;
++ /* read the page to "revalidate" our data */
++ /* call the helper function which doesn't unlock the page */
++ if (!Page_Uptodate(page))
++ err = mini_fo_do_readpage(file, page);
++
++ out:
++ print_exit_status(err);
++ return err;
++}
++
++
++
++STATIC int
++mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to)
++{
++ int err = -ENOMEM;
++ inode_t *inode;
++ inode_t *hidden_inode;
++ page_t *hidden_page;
++ file_t *hidden_file = NULL;
++ loff_t pos;
++ unsigned bytes = to - from;
++ unsigned hidden_from, hidden_to, hidden_bytes;
++
++ print_entry_location();
++
++ inode = page->mapping->host; /* CPW: Moved below print_entry_location */
++ hidden_inode = itohi(inode);
++
++ ASSERT(file != NULL);
++ /*
++ * here we have a kmapped page, with data from the user copied
++ * into it. we need to encode_block it, and then call the lower
++ * commit_write. We also need to simulate same behavior of
++ * generic_file_write, and call prepare_write on the lower f/s first.
++ */
++#ifdef FIST_COUNT_WRITES
++ count_writes++;
++# endif /* FIST_COUNT_WRITES */
++
++ /* this is append and/or extend -- we can't have holes so fill them in */
++ if (page->index > (hidden_inode->i_size >> PAGE_CACHE_SHIFT)) {
++ page_t *tmp_page;
++ int index;
++ for (index = hidden_inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
++ tmp_page = mini_fo_get1page(file, index);
++ if (IS_ERR(tmp_page)) {
++ err = PTR_ERR(tmp_page);
++ goto out;
++ }
++ /* zero out the contents of the page at the appropriate offsets */
++ memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
++ if (!(err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
++ err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
++ page_cache_release(tmp_page);
++ if (err < 0)
++ goto out;
++ if (current->need_resched)
++ schedule();
++ }
++ }
++
++ if (ftopd(file) != NULL)
++ hidden_file = ftohf(file);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_inode->i_mutex);
++#else
++ down(&hidden_inode->i_sem);
++#endif
++ /* find lower page (returns a locked page) */
++ hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
++ if (!hidden_page)
++ goto out;
++
++#if FIST_ENCODING_BLOCKSIZE > 1
++# error encoding_blocksize greater than 1 is not yet supported
++# endif /* FIST_ENCODING_BLOCKSIZE > 1 */
++
++ hidden_from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
++ hidden_to = ((to + FIST_ENCODING_BLOCKSIZE - 1) & (~(FIST_ENCODING_BLOCKSIZE - 1)));
++ if ((page->index << PAGE_CACHE_SHIFT) + to > hidden_inode->i_size) {
++
++ /*
++ * if this call to commit_write had introduced holes and the code
++ * for handling holes was invoked, then the beginning of this page
++ * must be zeroed out
++ * zero out bytes from 'size_of_file%pagesize' to 'from'.
++ */
++ if ((hidden_from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0)
++ memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, hidden_from - (inode->i_size & ~PAGE_CACHE_MASK));
++
++ }
++ hidden_bytes = hidden_to - hidden_from;
++
++ /* call lower prepare_write */
++ err = -EINVAL;
++ if (hidden_inode->i_mapping &&
++ hidden_inode->i_mapping->a_ops &&
++ hidden_inode->i_mapping->a_ops->prepare_write)
++ err = hidden_inode->i_mapping->a_ops->prepare_write(hidden_file,
++ hidden_page,
++ hidden_from,
++ hidden_to);
++ if (err)
++ /* don't leave locked pages behind, esp. on an ENOSPC */
++ goto out_unlock;
++
++ fist_dprint(8, "%s: encoding %d bytes\n", __FUNCTION__, hidden_bytes);
++ mini_fo_encode_block((char *) page_address(page) + hidden_from, (char*) page_address(hidden_page) + hidden_from, hidden_bytes, inode, inode->i_sb, page->index);
++ /* if encode_block could fail, then goto unlock and return error */
++
++ /* call lower commit_write */
++ err = hidden_inode->i_mapping->a_ops->commit_write(hidden_file,
++ hidden_page,
++ hidden_from,
++ hidden_to);
++
++ if (err < 0)
++ goto out_unlock;
++
++ err = bytes; /* convert error to no. of bytes */
++
++ inode->i_blocks = hidden_inode->i_blocks;
++ /* we may have to update i_size */
++ pos = (page->index << PAGE_CACHE_SHIFT) + to;
++ if (pos > inode->i_size)
++ inode->i_size = pos;
++
++ /*
++ * update mtime and ctime of lower level file system
++ * mini_fo' mtime and ctime are updated by generic_file_write
++ */
++ hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
++
++ mark_inode_dirty_sync(inode);
++
++ out_unlock:
++ UnlockPage(hidden_page);
++ page_cache_release(hidden_page);
++ kunmap(page); /* kmap was done in prepare_write */
++ out:
++ /* we must set our page as up-to-date */
++ if (err < 0)
++ ClearPageUptodate(page);
++ else
++ SetPageUptodate(page);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_inode->i_mutex);
++#else
++ up(&hidden_inode->i_sem);
++#endif
++ print_exit_status(err);
++ return err; /* assume all is ok */
++}
++
++
++STATIC int
++mini_fo_bmap(struct address_space *mapping, long block)
++{
++ int err = 0;
++ inode_t *inode;
++ inode_t *hidden_inode;
++
++ print_entry_location();
++
++ inode = (inode_t *) mapping->host;
++ hidden_inode = itohi(inode);
++
++ if (hidden_inode->i_mapping->a_ops->bmap)
++ err = hidden_inode->i_mapping->a_ops->bmap(hidden_inode->i_mapping, block);
++ print_exit_location();
++ return err;
++}
++
++
++/*
++ * This function is copied verbatim from mm/filemap.c.
++ * XXX: It should be simply moved to some header file instead -- bug Al about it!
++ */
++static inline int sync_page(struct page *page)
++{
++ struct address_space *mapping = page->mapping;
++
++ if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
++ return mapping->a_ops->sync_page(page);
++ return 0;
++}
++
++
++/*
++ * XXX: we may not need this function if not FIST_FILTER_DATA.
++ * FIXME: for FIST_FILTER_SCA, get all lower pages and sync them each.
++ */
++STATIC int
++mini_fo_sync_page(page_t *page)
++{
++ int err = 0;
++ inode_t *inode;
++ inode_t *hidden_inode;
++ page_t *hidden_page;
++
++ print_entry_location();
++
++ inode = page->mapping->host; /* CPW: Moved below print_entry_location */
++ hidden_inode = itohi(inode);
++
++ /* find lower page (returns a locked page) */
++ hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
++ if (!hidden_page)
++ goto out;
++
++ err = sync_page(hidden_page);
++
++ UnlockPage(hidden_page); /* b/c grab_cache_page locked it */
++ page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
++
++ out:
++ print_exit_status(err);
++ return err;
++}
+diff -urN linux-2.6.19.old/fs/mini_fo/README linux-2.6.19.dev/fs/mini_fo/README
+--- linux-2.6.19.old/fs/mini_fo/README 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/README 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,163 @@
++README for the mini_fo overlay file system
++=========================================
++
++
++WHAT IS MINI_FO?
++----------------
++
++mini_fo is a virtual kernel file system that can make read-only
++file systems writable. This is done by redirecting modifying operations
++to a writeable location called "storage directory", and leaving the
++original data in the "base directory" untouched. When reading, the
++file system merges the modifed and original data so that only the
++newest versions will appear. This occurs transparently to the user,
++who can access the data like on any other read-write file system.
++
++Base and storage directories may be located on the same or on
++different partitions and may be of different file system types. While
++the storage directory obviously needs to be writable, the base may or
++may not be writable, what doesn't matter as it will no be modified
++anyway.
++
++
++WHAT IS GOOD FOR?
++-----------------
++
++The primary purpose of the mini_fo file system is to allow easy
++software updates to embedded systems, that often store their root
++file system in a read-only flash file system, but there are many
++more as for example sandboxing, or for allowing live-cds to
++permanently store information.
++
++
++BUILDING
++--------
++This should be simple. Adjust the Makefile to point to the correct
++kernel headers you want to build the module for. Then:
++
++ # make
++
++should build "mini_fo.o" for a 2.4 kernel or "mini_fo.ko" for a 2.6
++kernel.
++
++If you are building the module for you current kernel, you can install
++the module (as root):
++
++ # make install
++
++or uninstall with
++
++ # make uninstall
++
++
++USING THE FILE SYSTEM
++--------------------
++
++the general mount syntax is:
++
++ mount -t mini_fo -o base=<base directory>,sto=<storage directory>\
++ <base directory> <mount point>
++
++Example:
++
++You have mounted a cdrom to /mnt/cdrom and want to modifiy some files
++on it:
++
++load the module (as root)
++
++ # insmod mini_fo.o for a 2.4 kernel or
++
++ # insmod mini_fo.ko for a 2.6 kernel
++
++
++create a storage dir in tmp and a mountpoint for mini_fo:
++
++ # mkdir /tmp/sto
++ # mkdir /mnt/mini_fo
++
++and mount the mini_fo file system:
++
++ # mount -t mini_fo -o base=/mnt/cdrom,sto=/tmp/sto /mnt/cdrom /mnt/mini_fo
++
++
++Now the data stored on the cd can be accessed via the mini_fo
++mountpoint just like any read-write file system, files can be modified
++and deleted, new ones can be created and so on. When done unmount the
++file system:
++
++ # unmount /mnt/mini_fo
++
++Note that if the file system is mounted again using the same storage
++file system, of course it will appear in the modified state again. If
++you remount it using an new empty storage directory, it will be
++unmodified. Therefore by executing:
++
++ # cd /tmp/sto
++ # rm -rf *
++
++you can nuke all the changes you made to the original file system. But
++ remember NEVER do this while the mini_fo file system is mounted!
++
++
++Alternatively you can use the mini_fo-overlay bash script, that
++simplifies managing mini_fo mounts. See TOOLS Section.
++
++
++TOOLS
++-----
++
++mini_fo-merge (experimental):
++
++This is a bash script that will merge changes contained in the storage
++directory back to the base directory. This allows mini_fo to function
++as a cache file system by overlaying a slow (network, ...) file system
++and using a fast (ramdisk, ...) as storage. When done, changes can be
++merged back to the (slow) base with mini_fo-merge. See "mini_fo-merge
++-h" for details.
++
++It can be usefull for merging changes back after a successfull test
++(patches, software updates...)
++
++
++mini_fo-overlay:
++
++This bash script simplifies managing one or more mini_fo mounts. For
++overlaying a directory called "basedir1", you can just call:
++
++ # mini_fo-overlay basedir1
++
++This will mount mini_fo with "basedir1" as base, "/tmp/sto-basedir1/"
++as storage to "/mnt/mini_fo-basedir1/". It has more options though,
++type "mini_fo-overlay -h" for details.
++
++
++DOCUMENTATION, REPORTING BUGS, GETTING HELP
++-------------------------------------------
++
++Please visit the mini_fo project page at:
++
++http://www.denx.de/twiki/bin/view/Know/MiniFOHome
++
++
++WARNINGS
++--------
++
++Never modify the base or the storage directorys while the mini_fo
++file system is mounted, or you might crash you system. Simply accessing
++and reading should not cause any trouble.
++
++Exporting a mini_fo mount point via NFS has not been tested, and may
++or may not work.
++
++Check the RELEASE_NOTES for details on bugs and features.
++
++
++
++Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++
++This program is free software; you can redistribute it and/or
++modify it under the terms of the GNU General Public License
++as published by the Free Software Foundation; either version
++2 of the License, or (at your option) any later version.
++
++
+diff -urN linux-2.6.19.old/fs/mini_fo/RELEASE_NOTES linux-2.6.19.dev/fs/mini_fo/RELEASE_NOTES
+--- linux-2.6.19.old/fs/mini_fo/RELEASE_NOTES 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/RELEASE_NOTES 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,111 @@
++Release: mini_fo-0.6.1 (v0-6-1)
++Date: 21.09.2005
++
++
++Changes:
++--------
++v0-6-1:
++
++- bugfixes (see ChangeLog)
++
++- two helper scripts "mini_fo_merge" and "mini_fo_overlay" (see
++ README for details).
++
++v0-6-0:
++
++- Support for 2.4 and 2.6 (see Makefile)
++
++- Partial hard link support (creating works as expected, but already
++ existing links in the base file system will be treated as if they
++ were individual files).
++
++- Various bugfixes and cleanups.
++
++
++v0-6-0-pre1:
++
++- This is mini_fo-0-6-0-pre1! This release is a complete rewrite of
++ many vital mini_fo parts such as the old whiteout list code which
++ has been replaced by the new META subsystem.
++
++- Light weight directory renaming implemented. This means if a
++ directory is renamed via the mini_fo filesystem this will no longer
++ result in a complete copy in storage, instead only one empty
++ directory will be created. All base filed contained in the original
++ directory stay there until modified.
++
++- Special files (creating, renaming, deleting etc.) now working.
++
++- Many bugfixes and cleanup, mini_fo is now a lot more stable.
++
++
++v0-5-10:
++
++- Final release of the 0-5-* versions. Next will be a complete rewrite
++ of many features. This release contains several bugfixes related to
++ directory renaming.
++
++
++v0-5-10-pre6:
++
++- Lots of cleanup and several bugfixes related to directory deleting
++
++- Directory renaming suddenly works, what is most likely due to the
++ fact tha that "mv" is smart: if the classic rename doesn't work it
++ will assume that source and target file are on different fs and will
++ copy the directory and try to remove the source directory. Until
++ directory removing wasn't implemented, it would fail to do this and
++ rollback.
++ So, directory renaming works for now, but it doesn't yet do what you
++ would expect from a overlay fs, so use with care.
++
++
++v0-5-10-pre5:
++
++- implemented directory deleting
++- made parsing of mount options more stable
++- New format of mount options! (See README)
++- I can't reproduce the unknown panic with 2.4.25 anymore, so I'll
++ happily assume it never existed!
++
++
++Implemented features:
++---------------------
++
++- creating hard links (see BUGS on already existing hard links)
++- lightweight directory renaming
++- renaming device files, pipes, sockets, etc.
++- creating, renaming, deleting of special files
++- deleting directorys
++- general directory reading (simple "ls" )
++- creating files in existing directorys
++- creating directorys
++- renaming files.
++- reading and writing files (involves opening)
++- appending to files (creates copy in storage)
++- deleting files
++- llseek works too, what allows editors to work
++- persistency (a deleted file stay deleted over remounts)
++- use of symbolic links
++- creating of device files
++
++
++Not (yet) implemented features:
++-------------------------------
++
++- full hard link support.
++
++
++
++BUGS:
++-----
++
++Hard links in the base file system will be treated as individual
++files, not as links to one inode.
++
++The main problem with hard links isn't allowing to create them, but
++their pure existence. If you modify a base hard link, the changes made
++will only show up on this link, the other link will remain in the
++original state. I hope to fix this someday. Please note that this does
++not effect the special hard links '.' and '..', that are handled
++seperately by the lower fs.
+diff -urN linux-2.6.19.old/fs/mini_fo/state.c linux-2.6.19.dev/fs/mini_fo/state.c
+--- linux-2.6.19.old/fs/mini_fo/state.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/state.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,620 @@
++/*
++ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif /* HAVE_CONFIG_H */
++
++#include "fist.h"
++#include "mini_fo.h"
++
++
++/* create the storage file, setup new states */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd)
++#else
++int create_sto_reg_file(dentry_t *dentry, int mode)
++#endif
++{
++ int err = 0;
++ inode_t *dir;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++
++ if(exists_in_storage(dentry)) {
++ printk(KERN_CRIT "mini_fo: create_sto_file: wrong type or state.\n");
++ err = -EINVAL;
++ goto out;
++ }
++ err = get_neg_sto_dentry(dentry);
++
++ if (err) {
++ printk(KERN_CRIT "mini_fo: create_sto_file: ERROR getting neg. sto dentry.\n");
++ goto out;
++ }
++
++ dir = dentry->d_parent->d_inode;
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* lock parent */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ err = PTR_ERR(hidden_sto_dir_dentry);
++ if (IS_ERR(hidden_sto_dir_dentry))
++ goto out;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err = vfs_create(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ mode, nd);
++#else
++ err = vfs_create(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ mode);
++#endif
++ if(err) {
++ printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file.\n");
++ goto out_lock;
++ }
++
++ if(!dtohd2(dentry)->d_inode) {
++ printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file [2].\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++
++ /* interpose the new inode */
++ if(dtost(dentry) == DELETED) {
++ dtost(dentry) = DEL_REWRITTEN;
++ err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtost(dentry) == NON_EXISTANT) {
++ dtost(dentry) = CREATED;
++ err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtost(dentry) == UNMODIFIED) {
++ dtost(dentry) = MODIFIED;
++ /* interpose on new inode */
++ if(itohi2(dentry->d_inode) != NULL) {
++ printk(KERN_CRIT "mini_fo: create_sto_file: invalid inode detected.\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++ itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
++ }
++ fist_copy_attr_timesizes(dentry->d_parent->d_inode,
++ hidden_sto_dir_dentry->d_inode);
++
++ out_lock:
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ out:
++ return err;
++}
++
++/* create the sto dir, setup states */
++int create_sto_dir(dentry_t *dentry, int mode)
++{
++ int err = 0;
++ inode_t *dir;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++
++ /* had to take the "!S_ISDIR(mode))" check out, because it failed */
++ if(exists_in_storage(dentry)) {
++ printk(KERN_CRIT "mini_fo: create_sto_dir: wrong type or state.\\
++n");
++ err = -EINVAL;
++ goto out;
++ }
++
++ err = get_neg_sto_dentry(dentry);
++ if(err) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ dir = dentry->d_parent->d_inode;
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ err = PTR_ERR(hidden_sto_dir_dentry);
++ if (IS_ERR(hidden_sto_dir_dentry))
++ goto out;
++
++ err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ mode);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir.\n");
++ goto out_lock;
++ }
++
++ if(!dtohd2(dentry)->d_inode) {
++ printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir [2].\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++
++ /* interpose the new inode */
++ if(dtost(dentry) == DELETED) {
++ dtost(dentry) = DEL_REWRITTEN;
++ err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtopd(dentry)->state == NON_EXISTANT) {
++ dtopd(dentry)->state = CREATED;
++ err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtopd(dentry)->state == UNMODIFIED) {
++ dtopd(dentry)->state = MODIFIED;
++ /* interpose on new inode */
++ if(itohi2(dentry->d_inode) != NULL) {
++ printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR, invalid inode detected.\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++ itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
++ }
++
++ fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
++
++ /* initalize the wol list */
++ itopd(dentry->d_inode)->deleted_list_size = -1;
++ itopd(dentry->d_inode)->renamed_list_size = -1;
++ meta_build_lists(dentry);
++
++
++ out_lock:
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ out:
++ return err;
++}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++int create_sto_nod(dentry_t *dentry, int mode, dev_t dev)
++#else
++int create_sto_nod(dentry_t *dentry, int mode, int dev)
++#endif
++{
++ int err = 0;
++ inode_t *dir;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++
++ if(exists_in_storage(dentry)) {
++ err = -EEXIST;
++ goto out;
++ }
++ err = get_neg_sto_dentry(dentry);
++
++ if (err) {
++ printk(KERN_CRIT "mini_fo: create_sto_nod: ERROR getting neg. sto dentry.\n");
++ goto out;
++ }
++
++ dir = dentry->d_parent->d_inode;
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* lock parent */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ err = PTR_ERR(hidden_sto_dir_dentry);
++ if (IS_ERR(hidden_sto_dir_dentry))
++ goto out;
++
++ err = vfs_mknod(hidden_sto_dir_dentry->d_inode, hidden_sto_dentry, mode, dev);
++ if(err)
++ goto out_lock;
++
++ if(!dtohd2(dentry)->d_inode) {
++ printk(KERN_CRIT "mini_fo: create_sto_nod: creating storage inode failed [1].\n");
++ err = -EINVAL; /* return something indicating failure */
++ goto out_lock;
++ }
++
++ /* interpose the new inode */
++ if(dtost(dentry) == DELETED) {
++ dtost(dentry) = DEL_REWRITTEN;
++ err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtost(dentry) == NON_EXISTANT) {
++ dtost(dentry) = CREATED;
++ err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
++ if(err)
++ goto out_lock;
++ }
++ else if(dtost(dentry) == UNMODIFIED) {
++ dtost(dentry) = MODIFIED;
++ /* interpose on new inode */
++ if(itohi2(dentry->d_inode) != NULL) {
++ printk(KERN_CRIT "mini_fo: create_sto_nod: error, invalid inode detected.\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++ itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
++ }
++
++ fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
++
++ out_lock:
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ out:
++ return err;
++}
++
++
++/* unimplemented (and possibly not usefull):
++
++ nondir-del_to_del_rew
++ nondir-non_exist_to_creat
++
++ dir-unmod_to_del
++ dir-mod_to_del
++ dir-creat_to_del
++ dir-del_rew_to_del
++ dir-del_to_del_rew
++ dir-non_exist_to_creat
++*/
++
++
++/* bring a file of any type from state UNMODIFIED to MODIFIED */
++int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag)
++{
++ int err = 0;
++ struct vfsmount *tgt_mnt;
++ struct vfsmount *src_mnt;
++ dentry_t *tgt_dentry;
++ dentry_t *src_dentry;
++ dentry_t *hidden_sto_dentry;
++ dentry_t *hidden_sto_dir_dentry;
++
++ check_mini_fo_dentry(dentry);
++
++ if((dtost(dentry) != UNMODIFIED) ||
++ S_ISDIR(dentry->d_inode->i_mode)) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
++ wrong type or state.\n");
++ err = -1;
++ goto out;
++ }
++ err = get_neg_sto_dentry(dentry);
++
++ if (err) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
++ ERROR getting neg. sto dentry.\n");
++ goto out;
++ }
++
++ /* create sto file */
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* lock parent */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ err = PTR_ERR(hidden_sto_dir_dentry);
++ if (IS_ERR(hidden_sto_dir_dentry))
++ goto out;
++
++ /* handle different types of nondirs */
++ if(S_ISCHR(dentry->d_inode->i_mode) ||
++ S_ISBLK(dentry->d_inode->i_mode)) {
++ err = vfs_mknod(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ dtohd(dentry)->d_inode->i_mode,
++ dtohd(dentry)->d_inode->i_rdev);
++ }
++
++ else if(S_ISREG(dentry->d_inode->i_mode)) {
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ err = vfs_create(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ dtohd(dentry)->d_inode->i_mode, NULL);
++#else
++ err = vfs_create(hidden_sto_dir_dentry->d_inode,
++ hidden_sto_dentry,
++ dtohd(dentry)->d_inode->i_mode);
++#endif
++ }
++ if(err) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
++ ERROR creating sto file.\n");
++ goto out_lock;
++ }
++
++ /* interpose on new inode */
++ if(itohi2(dentry->d_inode) != NULL) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
++ ERROR, invalid inode detected.\n");
++ err = -EINVAL;
++ goto out_lock;
++ }
++
++ itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
++
++ fist_copy_attr_timesizes(dentry->d_parent->d_inode,
++ hidden_sto_dir_dentry->d_inode);
++ dtost(dentry) = MODIFIED;
++
++ /* copy contents if regular file and cp_flag = 1 */
++ if((cp_flag == 1) && S_ISREG(dentry->d_inode->i_mode)) {
++
++ /* unlock first */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ dput(hidden_sto_dir_dentry);
++
++ tgt_dentry = dtohd2(dentry);
++ tgt_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
++ src_dentry = dtohd(dentry);
++ src_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt;
++
++ err = mini_fo_cp_cont(tgt_dentry, tgt_mnt,
++ src_dentry, src_mnt);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
++ ERROR copying contents.\n");
++ }
++ goto out;
++ }
++
++ out_lock:
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++ out:
++ return err;
++}
++
++/* this function is currently identical to nondir_creat_to_del */
++int nondir_del_rew_to_del(dentry_t *dentry)
++{
++ return nondir_creat_to_del(dentry);
++}
++
++int nondir_creat_to_del(dentry_t *dentry)
++{
++ int err = 0;
++
++ inode_t *hidden_sto_dir_inode;
++ dentry_t *hidden_sto_dir_dentry;
++ dentry_t *hidden_sto_dentry;
++
++ check_mini_fo_dentry(dentry);
++
++ /* for now this function serves for both state DEL_REWRITTEN and
++ * CREATED */
++ if(!(dtost(dentry) == CREATED || (dtost(dentry) == DEL_REWRITTEN)) ||
++ S_ISDIR(dentry->d_inode->i_mode)) {
++ printk(KERN_CRIT "mini_fo: nondir_mod_to_del/del_rew_to_del: \
++ wrong type or state.\n");
++ err = -1;
++ goto out;
++ }
++
++ hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ /* avoid destroying the hidden inode if the file is in use */
++ dget(hidden_sto_dentry);
++ err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
++ dput(hidden_sto_dentry);
++ if(!err)
++ d_delete(hidden_sto_dentry);
++
++ /* propagate number of hard-links */
++ dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
++
++ dtost(dentry) = NON_EXISTANT;
++
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++
++ out:
++ return err;
++}
++
++int nondir_mod_to_del(dentry_t *dentry)
++{
++ int err;
++ dentry_t *hidden_sto_dentry;
++ inode_t *hidden_sto_dir_inode;
++ dentry_t *hidden_sto_dir_dentry;
++
++ check_mini_fo_dentry(dentry);
++
++ if(dtost(dentry) != MODIFIED ||
++ S_ISDIR(dentry->d_inode->i_mode)) {
++ printk(KERN_CRIT "mini_fo: nondir_mod_to_del: \
++ wrong type or state.\n");
++ err = -1;
++ goto out;
++ }
++
++ hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
++ hidden_sto_dentry = dtohd2(dentry);
++
++ /* was hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
++ hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ down(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++
++ /* avoid destroying the hidden inode if the file is in use */
++ dget(hidden_sto_dentry);
++ err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
++ dput(hidden_sto_dentry);
++ if(!err)
++ d_delete(hidden_sto_dentry);
++
++ /* propagate number of hard-links */
++ dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
++
++ /* dput base dentry, this will relase the inode and free the
++ * dentry, as we will never need it again. */
++ dput(dtohd(dentry));
++ dtohd(dentry) = NULL;
++ dtost(dentry) = DELETED;
++
++ /* add deleted file to META-file */
++ meta_add_d_entry(dentry->d_parent,
++ dentry->d_name.name,
++ dentry->d_name.len);
++
++ /* was: unlock_dir(hidden_sto_dir_dentry); */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
++#else
++ up(&hidden_sto_dir_dentry->d_inode->i_sem);
++#endif
++ dput(hidden_sto_dir_dentry);
++
++ out:
++ return err;
++}
++
++int nondir_unmod_to_del(dentry_t *dentry)
++{
++ int err = 0;
++
++ check_mini_fo_dentry(dentry);
++
++ if(dtost(dentry) != UNMODIFIED ||
++ S_ISDIR(dentry->d_inode->i_mode)) {
++ printk(KERN_CRIT "mini_fo: nondir_unmod_to_del: \
++ wrong type or state.\n");
++ err = -1;
++ goto out;
++ }
++
++ /* next we have to get a negative dentry for the storage file */
++ err = get_neg_sto_dentry(dentry);
++
++ if(err)
++ goto out;
++
++ /* add deleted file to META lists */
++ err = meta_add_d_entry(dentry->d_parent,
++ dentry->d_name.name,
++ dentry->d_name.len);
++
++ if(err)
++ goto out;
++
++ /* dput base dentry, this will relase the inode and free the
++ * dentry, as we will never need it again. */
++ dput(dtohd(dentry));
++ dtohd(dentry) = NULL;
++ dtost(dentry) = DELETED;
++
++ out:
++ return err;
++}
++
++/* bring a dir from state UNMODIFIED to MODIFIED */
++int dir_unmod_to_mod(dentry_t *dentry)
++{
++ int err;
++
++ check_mini_fo_dentry(dentry);
++
++ if(dtost(dentry) != UNMODIFIED ||
++ !S_ISDIR(dentry->d_inode->i_mode)) {
++ printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
++ wrong type or state.\n");
++ err = -1;
++ goto out;
++ }
++
++ /* this creates our dir incl. sto. structure */
++ err = build_sto_structure(dentry->d_parent, dentry);
++ if(err) {
++ printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
++ build_sto_structure failed.\n");
++ goto out;
++ }
++ out:
++ return err;
++}
++
+diff -urN linux-2.6.19.old/fs/mini_fo/super.c linux-2.6.19.dev/fs/mini_fo/super.c
+--- linux-2.6.19.old/fs/mini_fo/super.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.dev/fs/mini_fo/super.c 2006-12-14 03:14:03.000000000 +0100
+@@ -0,0 +1,281 @@
++/*
++ * Copyright (c) 1997-2003 Erez Zadok
++ * Copyright (c) 2001-2003 Stony Brook University
++ *
++ * For specific licensing information, see the COPYING file distributed with
++ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
++ *
++ * This Copyright notice must be kept intact and distributed with all
++ * fistgen sources INCLUDING sources generated by fistgen.
++ */
++/*
++ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * $Id$
++ */
++
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "fist.h"
++#include "mini_fo.h"
++
++
++STATIC void
++mini_fo_read_inode(inode_t *inode)
++{
++ static struct address_space_operations mini_fo_empty_aops;
++
++ __itopd(inode) = kmalloc(sizeof(struct mini_fo_inode_info), GFP_KERNEL);
++ if (!itopd(inode)) {
++ printk("<0>%s:%s:%d: No kernel memory!\n", __FILE__, __FUNCTION__, __LINE__);
++ ASSERT(NULL);
++ }
++ itohi(inode) = NULL;
++ itohi2(inode) = NULL;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ inode->i_version++;
++#else
++ inode->i_version = ++event; /* increment inode version */
++#endif
++ inode->i_op = &mini_fo_main_iops;
++ inode->i_fop = &mini_fo_main_fops;
++#if 0
++ /*
++ * XXX: To export a file system via NFS, it has to have the
++ * FS_REQUIRES_DEV flag, so turn it on. But should we inherit it from
++ * the lower file system, or can we allow our file system to be exported
++ * even if the lower one cannot be natively exported.
++ */
++ inode->i_sb->s_type->fs_flags |= FS_REQUIRES_DEV;
++ /*
++ * OK, the above was a hack, which is now turned off because it may
++ * cause a panic/oops on some systems. The correct way to export a
++ * "nodev" filesystem is via using nfs-utils > 1.0 and the "fsid=" export
++ * parameter, which requires 2.4.20 or later.
++ */
++#endif
++ /* I don't think ->a_ops is ever allowed to be NULL */
++ inode->i_mapping->a_ops = &mini_fo_empty_aops;
++}
++
++
++#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
++/*
++ * No need to call write_inode() on the lower inode, as it
++ * will have been marked 'dirty' anyway. But we might need
++ * to write some of our own stuff to disk.
++ */
++STATIC void
++mini_fo_write_inode(inode_t *inode, int sync)
++{
++ print_entry_location();
++ print_exit_location();
++}
++#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
++
++
++STATIC void
++mini_fo_put_inode(inode_t *inode)
++{
++ /*
++ * This is really funky stuff:
++ * Basically, if i_count == 1, iput will then decrement it and this inode will be destroyed.
++ * It is currently holding a reference to the hidden inode.
++ * Therefore, it needs to release that reference by calling iput on the hidden inode.
++ * iput() _will_ do it for us (by calling our clear_inode), but _only_ if i_nlink == 0.
++ * The problem is, NFS keeps i_nlink == 1 for silly_rename'd files.
++ * So we must for our i_nlink to 0 here to trick iput() into calling our clear_inode.
++ */
++ if (atomic_read(&inode->i_count) == 1)
++ inode->i_nlink = 0;
++}
++
++
++#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
++/*
++ * we now define delete_inode, because there are two VFS paths that may
++ * destroy an inode: one of them calls clear inode before doing everything
++ * else that's needed, and the other is fine. This way we truncate the inode
++ * size (and its pages) and then clear our own inode, which will do an iput
++ * on our and the lower inode.
++ */
++STATIC void
++mini_fo_delete_inode(inode_t *inode)
++{
++ print_entry_location();
++
++ fist_checkinode(inode, "mini_fo_delete_inode IN");
++ inode->i_size = 0; /* every f/s seems to do that */
++ clear_inode(inode);
++
++ print_exit_location();
++}
++#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
++
++
++/* final actions when unmounting a file system */
++STATIC void
++mini_fo_put_super(super_block_t *sb)
++{
++ if (stopd(sb)) {
++ mntput(stopd(sb)->hidden_mnt);
++ mntput(stopd(sb)->hidden_mnt2);
++
++ /* mk: no! dput(stopd(sb)->base_dir_dentry);
++ dput(stopd(sb)->storage_dir_dentry); */
++
++ kfree(stopd(sb));
++ __stopd(sb) = NULL;
++ }
++}
++
++
++#ifdef NOT_NEEDED
++/*
++ * This is called in do_umount before put_super.
++ * The superblock lock is not held yet.
++ * We probably do not need to define this or call write_super
++ * on the hidden_sb, because sync_supers() will get to hidden_sb
++ * sooner or later. But it is also called from file_fsync()...
++ */
++STATIC void
++mini_fo_write_super(super_block_t *sb)
++{
++ return;
++}
++#endif /* NOT_NEEDED */
++
++
++STATIC int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++mini_fo_statfs(struct dentry *d, struct kstatfs *buf)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++mini_fo_statfs(super_block_t *sb, struct kstatfs *buf)
++#else
++mini_fo_statfs(super_block_t *sb, struct statfs *buf)
++#endif
++{
++ int err = 0;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ struct dentry *hidden_d;
++
++ hidden_d = dtohd(d);
++ err = vfs_statfs(hidden_d, buf);
++#else
++ super_block_t *hidden_sb;
++
++ hidden_sb = stohs(sb);
++ err = vfs_statfs(hidden_sb, buf);
++#endif
++
++ return err;
++}
++
++
++/*
++ * XXX: not implemented. This is not allowed yet.
++ * Should we call this on the hidden_sb? Probably not.
++ */
++STATIC int
++mini_fo_remount_fs(super_block_t *sb, int *flags, char *data)
++{
++ //printk(KERN_CRIT "mini_fo_remount_fs: WARNING, this function is umimplemented.\n");
++ return -ENOSYS;
++}
++
++
++/*
++ * Called by iput() when the inode reference count reached zero
++ * and the inode is not hashed anywhere. Used to clear anything
++ * that needs to be, before the inode is completely destroyed and put
++ * on the inode free list.
++ */
++STATIC void
++mini_fo_clear_inode(inode_t *inode)
++{
++ /*
++ * Decrement a reference to a hidden_inode, which was incremented
++ * by our read_inode when it was created initially.
++ */
++
++ /* release the wol_list */
++ if(S_ISDIR(inode->i_mode)) {
++ __meta_put_lists(inode);
++ }
++
++ /* mk: fan out fun */
++ if(itohi(inode))
++ iput(itohi(inode));
++ if(itohi2(inode))
++ iput(itohi2(inode));
++
++ // XXX: why this assertion fails?
++ // because it doesn't like us
++ // ASSERT((inode->i_state & I_DIRTY) == 0);
++ kfree(itopd(inode));
++ __itopd(inode) = NULL;
++}
++
++
++/*
++ * Called in do_umount() if the MNT_FORCE flag was used and this
++ * function is defined. See comment in linux/fs/super.c:do_umount().
++ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
++ * code can actually succeed and won't leave tasks that need handling.
++ *
++ * PS. I wonder if this is somehow useful to undo damage that was
++ * left in the kernel after a user level file server (such as amd)
++ * dies.
++ */
++STATIC void
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++mini_fo_umount_begin(struct vfsmount *mnt, int flags)
++{
++ struct vfsmount *hidden_mnt;
++
++ hidden_mnt = stopd(mnt->mnt_sb)->hidden_mnt;
++
++ if (hidden_mnt->mnt_sb->s_op->umount_begin)
++ hidden_mnt->mnt_sb->s_op->umount_begin(hidden_mnt, flags);
++
++}
++#else
++mini_fo_umount_begin(super_block_t *sb)
++{
++ super_block_t *hidden_sb;
++
++ hidden_sb = stohs(sb);
++
++ if (hidden_sb->s_op->umount_begin)
++ hidden_sb->s_op->umount_begin(hidden_sb);
++
++}
++#endif
++
++
++struct super_operations mini_fo_sops =
++{
++ read_inode: mini_fo_read_inode,
++#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
++ write_inode: mini_fo_write_inode,
++#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
++ put_inode: mini_fo_put_inode,
++#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
++ delete_inode: mini_fo_delete_inode,
++#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
++ put_super: mini_fo_put_super,
++ statfs: mini_fo_statfs,
++ remount_fs: mini_fo_remount_fs,
++ clear_inode: mini_fo_clear_inode,
++ umount_begin: mini_fo_umount_begin,
++};
diff --git a/packages/linux/linux-magicbox-2.6.19.2/210-d80211_compat.patch b/packages/linux/linux-magicbox-2.6.19.2/210-d80211_compat.patch
new file mode 100644
index 0000000000..555151ba7f
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/210-d80211_compat.patch
@@ -0,0 +1,11 @@
+--- linux.old/include/linux/netdevice.h 2006-12-30 18:49:37.916951328 +0100
++++ linux.dev/include/linux/netdevice.h 2006-12-30 18:49:49.573179312 +0100
+@@ -526,6 +526,8 @@
+ struct class_device class_dev;
+ /* space for optional statistics and wireless sysfs groups */
+ struct attribute_group *sysfs_groups[3];
++
++ void *ieee80211_ptr;
+ };
+
+ #define NETDEV_ALIGN 32
diff --git a/packages/linux/linux-magicbox-2.6.19.2/211-no_block2mtd_readahead.patch b/packages/linux/linux-magicbox-2.6.19.2/211-no_block2mtd_readahead.patch
new file mode 100644
index 0000000000..719fb37ff9
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/211-no_block2mtd_readahead.patch
@@ -0,0 +1,11 @@
+--- linux.old/drivers/mtd/devices/block2mtd.c 2007-02-01 20:13:47.147274772 +0100
++++ linux/drivers/mtd/devices/block2mtd.c 2007-02-01 20:19:59.753034993 +0100
+@@ -40,7 +40,7 @@
+ static LIST_HEAD(blkmtd_device_list);
+
+
+-#define PAGE_READAHEAD 64
++#define PAGE_READAHEAD 0
+ static void cache_readahead(struct address_space *mapping, int index)
+ {
+ filler_t *filler = (filler_t*)mapping->a_ops->readpage;
diff --git a/packages/linux/linux-magicbox-2.6.19.2/212-block2mtd_erase_scan.patch b/packages/linux/linux-magicbox-2.6.19.2/212-block2mtd_erase_scan.patch
new file mode 100644
index 0000000000..76b4f5d4c9
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/212-block2mtd_erase_scan.patch
@@ -0,0 +1,11 @@
+--- linux.dev/drivers/mtd/devices/block2mtd.c.old 2007-02-18 14:08:59.519952312 +0100
++++ linux.dev/drivers/mtd/devices/block2mtd.c 2007-02-18 14:09:04.219237912 +0100
+@@ -111,7 +111,7 @@
+ if (IS_ERR(page))
+ return PTR_ERR(page);
+
+- max = (u_long*)page_address(page) + PAGE_SIZE;
++ max = (u_long*) ((u8 *) page_address(page) + PAGE_SIZE);
+ for (p=(u_long*)page_address(page); p<max; p++)
+ if (*p != -1UL) {
+ lock_page(page);
diff --git a/packages/linux/linux-magicbox-2.6.19.2/510-Yaffs.patch b/packages/linux/linux-magicbox-2.6.19.2/510-Yaffs.patch
new file mode 100644
index 0000000000..d7b9c976b4
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/510-Yaffs.patch
@@ -0,0 +1,13085 @@
+diff -urN linux.old/fs/Kconfig linux.dev/fs/Kconfig
+--- linux.old/fs/Kconfig 2006-11-29 22:57:37.000000000 +0100
++++ linux.dev/fs/Kconfig 2006-12-14 04:21:47.000000000 +0100
+@@ -1202,6 +1202,8 @@
+ To compile the EFS file system support as a module, choose M here: the
+ module will be called efs.
+
++source "fs/yaffs2/Kconfig"
++
+ config JFFS_FS
+ tristate "Journalling Flash File System (JFFS) support"
+ depends on MTD && BLOCK
+diff -urN linux.old/fs/Makefile linux.dev/fs/Makefile
+--- linux.old/fs/Makefile 2006-11-29 22:57:37.000000000 +0100
++++ linux.dev/fs/Makefile 2006-12-14 04:21:47.000000000 +0100
+@@ -114,3 +114,4 @@
+ obj-$(CONFIG_DEBUG_FS) += debugfs/
+ obj-$(CONFIG_OCFS2_FS) += ocfs2/
+ obj-$(CONFIG_GFS2_FS) += gfs2/
++obj-$(CONFIG_YAFFS_FS) += yaffs2/
+diff -urN linux.old/fs/yaffs2/devextras.h linux.dev/fs/yaffs2/devextras.h
+--- linux.old/fs/yaffs2/devextras.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/devextras.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,265 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * devextras.h
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ * This file is just holds extra declarations used during development.
++ * Most of these are from kernel includes placed here so we can use them in
++ * applications.
++ *
++ * $Id: devextras.h,v 1.2 2005/08/11 02:37:49 marty Exp $
++ *
++ */
++
++#ifndef __EXTRAS_H__
++#define __EXTRAS_H__
++
++#if defined WIN32
++#define __inline__ __inline
++#define new newHack
++#endif
++
++#if !(defined __KERNEL__) || (defined WIN32)
++
++/* User space defines */
++
++typedef unsigned char __u8;
++typedef unsigned short __u16;
++typedef unsigned __u32;
++
++/*
++ * Simple doubly linked list implementation.
++ *
++ * Some of the internal functions ("__xxx") are useful when
++ * manipulating whole lists rather than single entries, as
++ * sometimes we already know the next/prev entries and we can
++ * generate better code by using them directly rather than
++ * using the generic single-entry routines.
++ */
++
++#define prefetch(x) 1
++
++struct list_head {
++ struct list_head *next, *prev;
++};
++
++#define LIST_HEAD_INIT(name) { &(name), &(name) }
++
++#define LIST_HEAD(name) \
++ struct list_head name = LIST_HEAD_INIT(name)
++
++#define INIT_LIST_HEAD(ptr) do { \
++ (ptr)->next = (ptr); (ptr)->prev = (ptr); \
++} while (0)
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static __inline__ void __list_add(struct list_head *new,
++ struct list_head *prev,
++ struct list_head *next)
++{
++ next->prev = new;
++ new->next = next;
++ new->prev = prev;
++ prev->next = new;
++}
++
++/**
++ * list_add - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it after
++ *
++ * Insert a new entry after the specified head.
++ * This is good for implementing stacks.
++ */
++static __inline__ void list_add(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head, head->next);
++}
++
++/**
++ * list_add_tail - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ */
++static __inline__ void list_add_tail(struct list_head *new,
++ struct list_head *head)
++{
++ __list_add(new, head->prev, head);
++}
++
++/*
++ * Delete a list entry by making the prev/next entries
++ * point to each other.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static __inline__ void __list_del(struct list_head *prev,
++ struct list_head *next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++
++/**
++ * list_del - deletes entry from list.
++ * @entry: the element to delete from the list.
++ * Note: list_empty on entry does not return true after this, the entry is
++ * in an undefined state.
++ */
++static __inline__ void list_del(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++}
++
++/**
++ * list_del_init - deletes entry from list and reinitialize it.
++ * @entry: the element to delete from the list.
++ */
++static __inline__ void list_del_init(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ INIT_LIST_HEAD(entry);
++}
++
++/**
++ * list_empty - tests whether a list is empty
++ * @head: the list to test.
++ */
++static __inline__ int list_empty(struct list_head *head)
++{
++ return head->next == head;
++}
++
++/**
++ * list_splice - join two lists
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ */
++static __inline__ void list_splice(struct list_head *list,
++ struct list_head *head)
++{
++ struct list_head *first = list->next;
++
++ if (first != list) {
++ struct list_head *last = list->prev;
++ struct list_head *at = head->next;
++
++ first->prev = head;
++ head->next = first;
++
++ last->next = at;
++ at->prev = last;
++ }
++}
++
++/**
++ * list_entry - get the struct for this entry
++ * @ptr: the &struct list_head pointer.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_entry(ptr, type, member) \
++ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
++
++/**
++ * list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop counter.
++ * @head: the head for your list.
++ */
++#define list_for_each(pos, head) \
++ for (pos = (head)->next, prefetch(pos->next); pos != (head); \
++ pos = pos->next, prefetch(pos->next))
++
++/**
++ * list_for_each_safe - iterate over a list safe against removal
++ * of list entry
++ * @pos: the &struct list_head to use as a loop counter.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ */
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++
++/*
++ * File types
++ */
++#define DT_UNKNOWN 0
++#define DT_FIFO 1
++#define DT_CHR 2
++#define DT_DIR 4
++#define DT_BLK 6
++#define DT_REG 8
++#define DT_LNK 10
++#define DT_SOCK 12
++#define DT_WHT 14
++
++#ifndef WIN32
++#include <sys/stat.h>
++#endif
++
++/*
++ * Attribute flags. These should be or-ed together to figure out what
++ * has been changed!
++ */
++#define ATTR_MODE 1
++#define ATTR_UID 2
++#define ATTR_GID 4
++#define ATTR_SIZE 8
++#define ATTR_ATIME 16
++#define ATTR_MTIME 32
++#define ATTR_CTIME 64
++#define ATTR_ATIME_SET 128
++#define ATTR_MTIME_SET 256
++#define ATTR_FORCE 512 /* Not a change, but a change it */
++#define ATTR_ATTR_FLAG 1024
++
++struct iattr {
++ unsigned int ia_valid;
++ unsigned ia_mode;
++ unsigned ia_uid;
++ unsigned ia_gid;
++ unsigned ia_size;
++ unsigned ia_atime;
++ unsigned ia_mtime;
++ unsigned ia_ctime;
++ unsigned int ia_attr_flags;
++};
++
++#define KERN_DEBUG
++
++#else
++
++#ifndef WIN32
++#include <linux/types.h>
++#include <linux/list.h>
++#include <linux/fs.h>
++#include <linux/stat.h>
++#endif
++
++#endif
++
++#if defined WIN32
++#undef new
++#endif
++
++#endif
+diff -urN linux.old/fs/yaffs2/Kconfig linux.dev/fs/yaffs2/Kconfig
+--- linux.old/fs/yaffs2/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/Kconfig 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,135 @@
++#
++# YAFFS file system configurations
++#
++
++config YAFFS_FS
++ tristate "YAFFS2 file system support"
++ default n
++ depends on MTD
++ select YAFFS_YAFFS1
++ select YAFFS_YAFFS2
++ help
++ YAFFS2, or Yet Another Flash Filing System, is a filing system
++ optimised for NAND Flash chips.
++
++ To compile the YAFFS2 file system support as a module, choose M here:
++ the module will be called yaffs2.
++
++ If unsure, say N.
++
++ Further information on YAFFS2 is available at
++ <http://www.aleph1.co.uk/yaffs/>.
++
++config YAFFS_YAFFS1
++ bool "512 byte / page devices"
++ depends on YAFFS_FS
++ default y
++ help
++ Enable YAFFS1 support -- yaffs for 512 byte / page devices
++
++ If unsure, say Y.
++
++config YAFFS_DOES_ECC
++ bool "Lets Yaffs do its own ECC"
++ depends on YAFFS_FS && YAFFS_YAFFS1
++ default n
++ help
++ This enables Yaffs to use its own ECC functions instead of using
++ the ones from the generic MTD-NAND driver.
++
++ If unsure, say N.
++
++config YAFFS_ECC_WRONG_ORDER
++ bool "Use the same ecc byte order as Steven Hill's nand_ecc.c"
++ depends on YAFFS_FS && YAFFS_DOES_ECC
++ default n
++ help
++ This makes yaffs_ecc.c use the same ecc byte order as
++ Steven Hill's nand_ecc.c. If not set, then you get the
++ same ecc byte order as SmartMedia.
++
++ If unsure, say N.
++
++config YAFFS_YAFFS2
++ bool "2048 byte (or larger) / page devices"
++ depends on YAFFS_FS
++ default y
++ help
++ Enable YAFFS2 support -- yaffs for >= 2048 byte / page larger devices
++
++ If unsure, say Y.
++
++config YAFFS_AUTO_YAFFS2
++ bool "Autoselect yaffs2 format"
++ depends on YAFFS_YAFFS2
++ default y
++ help
++ Without this, you need to explicitely use yaffs2 as the file
++ system type. With this, you can say "yaffs" and yaffs or yaffs2
++ will be used depending on the device page size.
++
++ If unsure, say Y.
++
++config YAFFS_DISABLE_LAZY_LOAD
++ bool "Disable lazy loading"
++ depends on YAFFS_YAFFS2
++ default n
++ help
++ "Lazy loading" defers loading file details until they are
++ required. This saves mount time, but makes the first look-up
++ a bit longer.
++
++ Lazy loading will only happen if enabled by this option being 'n'
++ and if the appropriate tags are available, else yaffs2 will
++ automatically fall back to immediate loading and do the right
++ thing.
++
++ Lazy laoding will be required by checkpointing.
++
++ Setting this to 'y' will disable lazy loading.
++
++ If unsure, say N.
++
++config YAFFS_DISABLE_WIDE_TNODES
++ bool "Turn off wide tnodes"
++ depends on YAFFS_FS
++ default n
++ help
++ Wide tnodes are only used for large NAND arrays (>=32MB for
++ 512-byte page devices and >=128MB for 2k page devices). They use
++ slightly more RAM but are faster since they eliminate chunk group
++ searching.
++
++ Setting this to 'y' will force tnode width to 16 bits and make
++ large arrays slower.
++
++ If unsure, say N.
++
++config YAFFS_ALWAYS_CHECK_CHUNK_ERASED
++ bool "Force chunk erase check"
++ depends on YAFFS_FS
++ default n
++ help
++ Normally YAFFS only checks chunks before writing until an erased
++ chunk is found. This helps to detect any partially written chunks
++ that might have happened due to power loss.
++
++ Enabling this forces on the test that chunks are erased in flash
++ before writing to them. This takes more time but is potentially a
++ bit more secure.
++
++ Suggest setting Y during development and ironing out driver issues
++ etc. Suggest setting to N if you want faster writing.
++
++ If unsure, say Y.
++
++config YAFFS_SHORT_NAMES_IN_RAM
++ bool "Cache short names in RAM"
++ depends on YAFFS_FS
++ default y
++ help
++ If this config is set, then short names are stored with the
++ yaffs_Object. This costs an extra 16 bytes of RAM per object,
++ but makes look-ups faster.
++
++ If unsure, say Y.
+diff -urN linux.old/fs/yaffs2/Makefile linux.dev/fs/yaffs2/Makefile
+--- linux.old/fs/yaffs2/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/Makefile 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,10 @@
++#
++# Makefile for the linux YAFFS filesystem routines.
++#
++
++obj-$(CONFIG_YAFFS_FS) += yaffs.o
++
++yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
++yaffs-y += yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
++yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
++yaffs-y += yaffs_mtdif.o yaffs_mtdif2.o
+diff -urN linux.old/fs/yaffs2/moduleconfig.h linux.dev/fs/yaffs2/moduleconfig.h
+--- linux.old/fs/yaffs2/moduleconfig.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/moduleconfig.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,32 @@
++#ifndef __YAFFS_CONFIG_H__
++#define __YAFFS_CONFIG_H__
++
++#ifdef YAFFS_OUT_OF_TREE
++
++/* DO NOT UNSET THESE THREE. YAFFS2 will not compile if you do. */
++#define CONFIG_YAFFS_FS
++#define CONFIG_YAFFS_YAFFS1
++#define CONFIG_YAFFS_YAFFS2
++
++/* These options are independent of each other. Select those that matter. */
++
++/* Default: Not selected */
++/* Meaning: Yaffs does its own ECC, rather than using MTD ECC */
++//#define CONFIG_YAFFS_DOES_ECC
++
++/* Default: Not selected */
++/* Meaning: ECC byte order is 'wrong'. Only meaningful if */
++/* CONFIG_YAFFS_DOES_ECC is set */
++//#define CONFIG_YAFFS_ECC_WRONG_ORDER
++
++/* Default: Selected */
++/* Meaning: Disables testing whether chunks are erased before writing to them*/
++#define CONFIG_YAFFS_DISABLE_CHUNK_ERASED_CHECK
++
++/* Default: Selected */
++/* Meaning: Cache short names, taking more RAM, but faster look-ups */
++#define CONFIG_YAFFS_SHORT_NAMES_IN_RAM
++
++#endif /* YAFFS_OUT_OF_TREE */
++
++#endif /* __YAFFS_CONFIG_H__ */
+diff -urN linux.old/fs/yaffs2/yaffs_checkptrw.c linux.dev/fs/yaffs2/yaffs_checkptrw.c
+--- linux.old/fs/yaffs2/yaffs_checkptrw.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_checkptrw.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,384 @@
++/* YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++const char *yaffs_checkptrw_c_version =
++ "$Id: yaffs_checkptrw.c,v 1.11 2006/11/11 23:27:04 charles Exp $";
++
++
++#include "yaffs_checkptrw.h"
++
++
++static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
++{
++
++ int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
++
++ T(YAFFS_TRACE_CHECKPOINT,
++ (TSTR("checkpt blocks available = %d" TENDSTR),
++ blocksAvailable));
++
++
++ return (blocksAvailable <= 0) ? 0 : 1;
++}
++
++
++
++static int yaffs_CheckpointErase(yaffs_Device *dev)
++{
++
++ int i;
++
++
++ if(!dev->eraseBlockInNAND)
++ return 0;
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
++ dev->internalStartBlock,dev->internalEndBlock));
++
++ for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
++ if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
++ if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
++ bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
++ dev->nErasedBlocks++;
++ dev->nFreeChunks += dev->nChunksPerBlock;
++ }
++ else {
++ dev->markNANDBlockBad(dev,i);
++ bi->blockState = YAFFS_BLOCK_STATE_DEAD;
++ }
++ }
++ }
++
++ dev->blocksInCheckpoint = 0;
++
++ return 1;
++}
++
++
++static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
++{
++ int i;
++ int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
++ T(YAFFS_TRACE_CHECKPOINT,
++ (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
++ dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
++
++ if(dev->checkpointNextBlock >= 0 &&
++ dev->checkpointNextBlock <= dev->internalEndBlock &&
++ blocksAvailable > 0){
++
++ for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
++ if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
++ dev->checkpointNextBlock = i + 1;
++ dev->checkpointCurrentBlock = i;
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
++ return;
++ }
++ }
++ }
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
++
++ dev->checkpointNextBlock = -1;
++ dev->checkpointCurrentBlock = -1;
++}
++
++static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
++{
++ int i;
++ yaffs_ExtendedTags tags;
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start: blocks %d next %d" TENDSTR),
++ dev->blocksInCheckpoint, dev->checkpointNextBlock));
++
++ if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
++ for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
++ int chunk = i * dev->nChunksPerBlock;
++ int realignedChunk = chunk - dev->chunkOffset;
++
++ dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
++ i, tags.objectId,tags.sequenceNumber,tags.eccResult));
++
++ if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
++ /* Right kind of block */
++ dev->checkpointNextBlock = tags.objectId;
++ dev->checkpointCurrentBlock = i;
++ dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
++ dev->blocksInCheckpoint++;
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
++ return;
++ }
++ }
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
++
++ dev->checkpointNextBlock = -1;
++ dev->checkpointCurrentBlock = -1;
++}
++
++
++int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
++{
++
++ /* Got the functions we need? */
++ if (!dev->writeChunkWithTagsToNAND ||
++ !dev->readChunkWithTagsFromNAND ||
++ !dev->eraseBlockInNAND ||
++ !dev->markNANDBlockBad)
++ return 0;
++
++ if(forWriting && !yaffs_CheckpointSpaceOk(dev))
++ return 0;
++
++ if(!dev->checkpointBuffer)
++ dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
++ if(!dev->checkpointBuffer)
++ return 0;
++
++
++ dev->checkpointPageSequence = 0;
++
++ dev->checkpointOpenForWrite = forWriting;
++
++ dev->checkpointByteCount = 0;
++ dev->checkpointCurrentBlock = -1;
++ dev->checkpointCurrentChunk = -1;
++ dev->checkpointNextBlock = dev->internalStartBlock;
++
++ /* Erase all the blocks in the checkpoint area */
++ if(forWriting){
++ memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
++ dev->checkpointByteOffset = 0;
++ return yaffs_CheckpointErase(dev);
++
++
++ } else {
++ int i;
++ /* Set to a value that will kick off a read */
++ dev->checkpointByteOffset = dev->nDataBytesPerChunk;
++ /* A checkpoint block list of 1 checkpoint block per 16 block is (hopefully)
++ * going to be way more than we need */
++ dev->blocksInCheckpoint = 0;
++ dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
++ dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
++ for(i = 0; i < dev->checkpointMaxBlocks; i++)
++ dev->checkpointBlockList[i] = -1;
++ }
++
++ return 1;
++}
++
++static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
++{
++
++ int chunk;
++ int realignedChunk;
++
++ yaffs_ExtendedTags tags;
++
++ if(dev->checkpointCurrentBlock < 0){
++ yaffs_CheckpointFindNextErasedBlock(dev);
++ dev->checkpointCurrentChunk = 0;
++ }
++
++ if(dev->checkpointCurrentBlock < 0)
++ return 0;
++
++ tags.chunkDeleted = 0;
++ tags.objectId = dev->checkpointNextBlock; /* Hint to next place to look */
++ tags.chunkId = dev->checkpointPageSequence + 1;
++ tags.sequenceNumber = YAFFS_SEQUENCE_CHECKPOINT_DATA;
++ tags.byteCount = dev->nDataBytesPerChunk;
++ if(dev->checkpointCurrentChunk == 0){
++ /* First chunk we write for the block? Set block state to
++ checkpoint */
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
++ bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
++ dev->blocksInCheckpoint++;
++ }
++
++ chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
++
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
++ chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
++
++ realignedChunk = chunk - dev->chunkOffset;
++
++ dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
++ dev->checkpointByteOffset = 0;
++ dev->checkpointPageSequence++;
++ dev->checkpointCurrentChunk++;
++ if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
++ dev->checkpointCurrentChunk = 0;
++ dev->checkpointCurrentBlock = -1;
++ }
++ memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
++
++ return 1;
++}
++
++
++int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
++{
++ int i=0;
++ int ok = 1;
++
++
++ __u8 * dataBytes = (__u8 *)data;
++
++
++
++ if(!dev->checkpointBuffer)
++ return 0;
++
++ while(i < nBytes && ok) {
++
++
++
++ dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
++ dev->checkpointByteOffset++;
++ i++;
++ dataBytes++;
++ dev->checkpointByteCount++;
++
++
++ if(dev->checkpointByteOffset < 0 ||
++ dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
++ ok = yaffs_CheckpointFlushBuffer(dev);
++
++ }
++
++ return i;
++}
++
++int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
++{
++ int i=0;
++ int ok = 1;
++ yaffs_ExtendedTags tags;
++
++
++ int chunk;
++ int realignedChunk;
++
++ __u8 *dataBytes = (__u8 *)data;
++
++ if(!dev->checkpointBuffer)
++ return 0;
++
++ while(i < nBytes && ok) {
++
++
++ if(dev->checkpointByteOffset < 0 ||
++ dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
++
++ if(dev->checkpointCurrentBlock < 0){
++ yaffs_CheckpointFindNextCheckpointBlock(dev);
++ dev->checkpointCurrentChunk = 0;
++ }
++
++ if(dev->checkpointCurrentBlock < 0)
++ ok = 0;
++ else {
++
++ chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
++ dev->checkpointCurrentChunk;
++
++ realignedChunk = chunk - dev->chunkOffset;
++
++ /* read in the next chunk */
++ /* printf("read checkpoint page %d\n",dev->checkpointPage); */
++ dev->readChunkWithTagsFromNAND(dev, realignedChunk,
++ dev->checkpointBuffer,
++ &tags);
++
++ if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
++ tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
++ ok = 0;
++
++ dev->checkpointByteOffset = 0;
++ dev->checkpointPageSequence++;
++ dev->checkpointCurrentChunk++;
++
++ if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
++ dev->checkpointCurrentBlock = -1;
++ }
++ }
++
++ if(ok){
++ *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
++ dev->checkpointByteOffset++;
++ i++;
++ dataBytes++;
++ dev->checkpointByteCount++;
++ }
++ }
++
++ return i;
++}
++
++int yaffs_CheckpointClose(yaffs_Device *dev)
++{
++
++ if(dev->checkpointOpenForWrite){
++ if(dev->checkpointByteOffset != 0)
++ yaffs_CheckpointFlushBuffer(dev);
++ } else {
++ int i;
++ for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
++ if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
++ bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
++ else {
++ // Todo this looks odd...
++ }
++ }
++ YFREE(dev->checkpointBlockList);
++ dev->checkpointBlockList = NULL;
++ }
++
++ dev->nFreeChunks -= dev->blocksInCheckpoint * dev->nChunksPerBlock;
++ dev->nErasedBlocks -= dev->blocksInCheckpoint;
++
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
++ dev->checkpointByteCount));
++
++ if(dev->checkpointBuffer){
++ /* free the buffer */
++ YFREE(dev->checkpointBuffer);
++ dev->checkpointBuffer = NULL;
++ return 1;
++ }
++ else
++ return 0;
++
++}
++
++int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
++{
++ /* Erase the first checksum block */
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
++
++ if(!yaffs_CheckpointSpaceOk(dev))
++ return 0;
++
++ return yaffs_CheckpointErase(dev);
++}
++
++
++
+diff -urN linux.old/fs/yaffs2/yaffs_checkptrw.h linux.dev/fs/yaffs2/yaffs_checkptrw.h
+--- linux.old/fs/yaffs2/yaffs_checkptrw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_checkptrw.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,18 @@
++#ifndef __YAFFS_CHECKPTRW_H__
++#define __YAFFS_CHECKPTRW_H__
++
++#include "yaffs_guts.h"
++
++int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting);
++
++int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes);
++
++int yaffs_CheckpointRead(yaffs_Device *dev,void *data, int nBytes);
++
++int yaffs_CheckpointClose(yaffs_Device *dev);
++
++int yaffs_CheckpointInvalidateStream(yaffs_Device *dev);
++
++
++#endif
++
+diff -urN linux.old/fs/yaffs2/yaffs_ecc.c linux.dev/fs/yaffs2/yaffs_ecc.c
+--- linux.old/fs/yaffs2/yaffs_ecc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_ecc.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,333 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * yaffs_ecc.c: ECC generation/correction algorithms.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * version 2.1 as published by the Free Software Foundation.
++ */
++
++ /*
++ * This code implements the ECC algorithm used in SmartMedia.
++ *
++ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
++ * The two unused bit are set to 1.
++ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
++ * blocks are used on a 512-byte NAND page.
++ *
++ */
++
++/* Table generated by gen-ecc.c
++ * Using a table means we do not have to calculate p1..p4 and p1'..p4'
++ * for each byte of data. These are instead provided in a table in bits7..2.
++ * Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore
++ * this bytes influence on the line parity.
++ */
++
++const char *yaffs_ecc_c_version =
++ "$Id: yaffs_ecc.c,v 1.7 2006/09/14 22:02:46 charles Exp $";
++
++#include "yportenv.h"
++
++#include "yaffs_ecc.h"
++
++static const unsigned char column_parity_table[] = {
++ 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
++ 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
++ 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
++ 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
++ 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
++ 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
++ 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
++ 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
++ 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
++ 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
++ 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
++ 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
++ 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
++ 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
++ 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
++ 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
++ 0xa9, 0xfc, 0xf0, 0xa5, 0xcc, 0x99, 0x95, 0xc0,
++ 0xc0, 0x95, 0x99, 0xcc, 0xa5, 0xf0, 0xfc, 0xa9,
++ 0x3c, 0x69, 0x65, 0x30, 0x59, 0x0c, 0x00, 0x55,
++ 0x55, 0x00, 0x0c, 0x59, 0x30, 0x65, 0x69, 0x3c,
++ 0x30, 0x65, 0x69, 0x3c, 0x55, 0x00, 0x0c, 0x59,
++ 0x59, 0x0c, 0x00, 0x55, 0x3c, 0x69, 0x65, 0x30,
++ 0xa5, 0xf0, 0xfc, 0xa9, 0xc0, 0x95, 0x99, 0xcc,
++ 0xcc, 0x99, 0x95, 0xc0, 0xa9, 0xfc, 0xf0, 0xa5,
++ 0x0c, 0x59, 0x55, 0x00, 0x69, 0x3c, 0x30, 0x65,
++ 0x65, 0x30, 0x3c, 0x69, 0x00, 0x55, 0x59, 0x0c,
++ 0x99, 0xcc, 0xc0, 0x95, 0xfc, 0xa9, 0xa5, 0xf0,
++ 0xf0, 0xa5, 0xa9, 0xfc, 0x95, 0xc0, 0xcc, 0x99,
++ 0x95, 0xc0, 0xcc, 0x99, 0xf0, 0xa5, 0xa9, 0xfc,
++ 0xfc, 0xa9, 0xa5, 0xf0, 0x99, 0xcc, 0xc0, 0x95,
++ 0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
++ 0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
++};
++
++/* Count the bits in an unsigned char or a U32 */
++
++static int yaffs_CountBits(unsigned char x)
++{
++ int r = 0;
++ while (x) {
++ if (x & 1)
++ r++;
++ x >>= 1;
++ }
++ return r;
++}
++
++static int yaffs_CountBits32(unsigned x)
++{
++ int r = 0;
++ while (x) {
++ if (x & 1)
++ r++;
++ x >>= 1;
++ }
++ return r;
++}
++
++/* Calculate the ECC for a 256-byte block of data */
++void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
++{
++ unsigned int i;
++
++ unsigned char col_parity = 0;
++ unsigned char line_parity = 0;
++ unsigned char line_parity_prime = 0;
++ unsigned char t;
++ unsigned char b;
++
++ for (i = 0; i < 256; i++) {
++ b = column_parity_table[*data++];
++ col_parity ^= b;
++
++ if (b & 0x01) // odd number of bits in the byte
++ {
++ line_parity ^= i;
++ line_parity_prime ^= ~i;
++ }
++
++ }
++
++ ecc[2] = (~col_parity) | 0x03;
++
++ t = 0;
++ if (line_parity & 0x80)
++ t |= 0x80;
++ if (line_parity_prime & 0x80)
++ t |= 0x40;
++ if (line_parity & 0x40)
++ t |= 0x20;
++ if (line_parity_prime & 0x40)
++ t |= 0x10;
++ if (line_parity & 0x20)
++ t |= 0x08;
++ if (line_parity_prime & 0x20)
++ t |= 0x04;
++ if (line_parity & 0x10)
++ t |= 0x02;
++ if (line_parity_prime & 0x10)
++ t |= 0x01;
++ ecc[1] = ~t;
++
++ t = 0;
++ if (line_parity & 0x08)
++ t |= 0x80;
++ if (line_parity_prime & 0x08)
++ t |= 0x40;
++ if (line_parity & 0x04)
++ t |= 0x20;
++ if (line_parity_prime & 0x04)
++ t |= 0x10;
++ if (line_parity & 0x02)
++ t |= 0x08;
++ if (line_parity_prime & 0x02)
++ t |= 0x04;
++ if (line_parity & 0x01)
++ t |= 0x02;
++ if (line_parity_prime & 0x01)
++ t |= 0x01;
++ ecc[0] = ~t;
++
++#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
++ // Swap the bytes into the wrong order
++ t = ecc[0];
++ ecc[0] = ecc[1];
++ ecc[1] = t;
++#endif
++}
++
++
++/* Correct the ECC on a 256 byte block of data */
++
++int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
++ const unsigned char *test_ecc)
++{
++ unsigned char d0, d1, d2; /* deltas */
++
++ d0 = read_ecc[0] ^ test_ecc[0];
++ d1 = read_ecc[1] ^ test_ecc[1];
++ d2 = read_ecc[2] ^ test_ecc[2];
++
++ if ((d0 | d1 | d2) == 0)
++ return 0; /* no error */
++
++ if (((d0 ^ (d0 >> 1)) & 0x55) == 0x55 &&
++ ((d1 ^ (d1 >> 1)) & 0x55) == 0x55 &&
++ ((d2 ^ (d2 >> 1)) & 0x54) == 0x54) {
++ /* Single bit (recoverable) error in data */
++
++ unsigned byte;
++ unsigned bit;
++
++#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
++ // swap the bytes to correct for the wrong order
++ unsigned char t;
++
++ t = d0;
++ d0 = d1;
++ d1 = t;
++#endif
++
++ bit = byte = 0;
++
++ if (d1 & 0x80)
++ byte |= 0x80;
++ if (d1 & 0x20)
++ byte |= 0x40;
++ if (d1 & 0x08)
++ byte |= 0x20;
++ if (d1 & 0x02)
++ byte |= 0x10;
++ if (d0 & 0x80)
++ byte |= 0x08;
++ if (d0 & 0x20)
++ byte |= 0x04;
++ if (d0 & 0x08)
++ byte |= 0x02;
++ if (d0 & 0x02)
++ byte |= 0x01;
++
++ if (d2 & 0x80)
++ bit |= 0x04;
++ if (d2 & 0x20)
++ bit |= 0x02;
++ if (d2 & 0x08)
++ bit |= 0x01;
++
++ data[byte] ^= (1 << bit);
++
++ return 1; /* Corrected the error */
++ }
++
++ if ((yaffs_CountBits(d0) +
++ yaffs_CountBits(d1) +
++ yaffs_CountBits(d2)) == 1) {
++ /* Reccoverable error in ecc */
++
++ read_ecc[0] = test_ecc[0];
++ read_ecc[1] = test_ecc[1];
++ read_ecc[2] = test_ecc[2];
++
++ return 1; /* Corrected the error */
++ }
++
++ /* Unrecoverable error */
++
++ return -1;
++
++}
++
++
++/*
++ * ECCxxxOther does ECC calcs on arbitrary n bytes of data
++ */
++void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
++ yaffs_ECCOther * eccOther)
++{
++ unsigned int i;
++
++ unsigned char col_parity = 0;
++ unsigned line_parity = 0;
++ unsigned line_parity_prime = 0;
++ unsigned char b;
++
++ for (i = 0; i < nBytes; i++) {
++ b = column_parity_table[*data++];
++ col_parity ^= b;
++
++ if (b & 0x01) {
++ /* odd number of bits in the byte */
++ line_parity ^= i;
++ line_parity_prime ^= ~i;
++ }
++
++ }
++
++ eccOther->colParity = (col_parity >> 2) & 0x3f;
++ eccOther->lineParity = line_parity;
++ eccOther->lineParityPrime = line_parity_prime;
++}
++
++int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
++ yaffs_ECCOther * read_ecc,
++ const yaffs_ECCOther * test_ecc)
++{
++ unsigned char cDelta; /* column parity delta */
++ unsigned lDelta; /* line parity delta */
++ unsigned lDeltaPrime; /* line parity delta */
++ unsigned bit;
++
++ cDelta = read_ecc->colParity ^ test_ecc->colParity;
++ lDelta = read_ecc->lineParity ^ test_ecc->lineParity;
++ lDeltaPrime = read_ecc->lineParityPrime ^ test_ecc->lineParityPrime;
++
++ if ((cDelta | lDelta | lDeltaPrime) == 0)
++ return 0; /* no error */
++
++ if (lDelta == ~lDeltaPrime &&
++ (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
++ {
++ /* Single bit (recoverable) error in data */
++
++ bit = 0;
++
++ if (cDelta & 0x20)
++ bit |= 0x04;
++ if (cDelta & 0x08)
++ bit |= 0x02;
++ if (cDelta & 0x02)
++ bit |= 0x01;
++
++ if(lDelta >= nBytes)
++ return -1;
++
++ data[lDelta] ^= (1 << bit);
++
++ return 1; /* corrected */
++ }
++
++ if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
++ yaffs_CountBits(cDelta)) == 1) {
++ /* Reccoverable error in ecc */
++
++ *read_ecc = *test_ecc;
++ return 1; /* corrected */
++ }
++
++ /* Unrecoverable error */
++
++ return -1;
++
++}
++
+diff -urN linux.old/fs/yaffs2/yaffs_ecc.h linux.dev/fs/yaffs2/yaffs_ecc.h
+--- linux.old/fs/yaffs2/yaffs_ecc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_ecc.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,44 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * yaffs_ecc.c: ECC generation/correction algorithms.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++ /*
++ * This code implements the ECC algorithm used in SmartMedia.
++ *
++ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
++ * The two unused bit are set to 1.
++ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
++ * blocks are used on a 512-byte NAND page.
++ *
++ */
++
++#ifndef __YAFFS_ECC_H__
++#define __YAFFS_ECC_H__
++
++typedef struct {
++ unsigned char colParity;
++ unsigned lineParity;
++ unsigned lineParityPrime;
++} yaffs_ECCOther;
++
++void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
++int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
++ const unsigned char *test_ecc);
++
++void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
++ yaffs_ECCOther * ecc);
++int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
++ yaffs_ECCOther * read_ecc,
++ const yaffs_ECCOther * test_ecc);
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_fs.c linux.dev/fs/yaffs2/yaffs_fs.c
+--- linux.old/fs/yaffs2/yaffs_fs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_fs.c 2006-12-14 04:33:02.000000000 +0100
+@@ -0,0 +1,2136 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_fs.c
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This is the file system front-end to YAFFS that hooks it up to
++ * the VFS.
++ *
++ * Special notes:
++ * >> 2.4: sb->u.generic_sbp points to the yaffs_Device associated with
++ * this superblock
++ * >> 2.6: sb->s_fs_info points to the yaffs_Device associated with this
++ * superblock
++ * >> inode->u.generic_ip points to the associated yaffs_Object.
++ *
++ * Acknowledgements:
++ * * Luc van OostenRyck for numerous patches.
++ * * Nick Bane for numerous patches.
++ * * Nick Bane for 2.5/2.6 integration.
++ * * Andras Toth for mknod rdev issue.
++ * * Michael Fischer for finding the problem with inode inconsistency.
++ * * Some code bodily lifted from JFFS2.
++ */
++
++const char *yaffs_fs_c_version =
++ "$Id: yaffs_fs.c,v 1.54 2006/10/24 18:09:15 charles Exp $";
++extern const char *yaffs_guts_c_version;
++
++#include <linux/autoconf.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/list.h>
++#include <linux/fs.h>
++#include <linux/proc_fs.h>
++#include <linux/smp_lock.h>
++#include <linux/pagemap.h>
++#include <linux/mtd/mtd.h>
++#include <linux/interrupt.h>
++#include <linux/string.h>
++#include <linux/ctype.h>
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++
++#include <linux/statfs.h> /* Added NCB 15-8-2003 */
++#include <asm/statfs.h>
++#define UnlockPage(p) unlock_page(p)
++#define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags)
++
++/* FIXME: use sb->s_id instead ? */
++#define yaffs_devname(sb, buf) bdevname(sb->s_bdev, buf)
++
++#else
++
++#include <linux/locks.h>
++#define BDEVNAME_SIZE 0
++#define yaffs_devname(sb, buf) kdevname(sb->s_dev)
++
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
++/* added NCB 26/5/2006 for 2.4.25-vrs2-tcl1 kernel */
++#define __user
++#endif
++
++#endif
++
++#include <asm/uaccess.h>
++
++#include "yportenv.h"
++#include "yaffs_guts.h"
++
++unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS |
++ YAFFS_TRACE_BAD_BLOCKS
++ /* | 0xFFFFFFFF */;
++
++#include <linux/mtd/mtd.h>
++#include "yaffs_mtdif.h"
++#include "yaffs_mtdif2.h"
++
++/*#define T(x) printk x */
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
++#define yaffs_InodeToObject(iptr) ((yaffs_Object *)((iptr)->i_private))
++#else
++#define yaffs_InodeToObject(iptr) ((yaffs_Object *)((iptr)->u.generic_ip))
++#endif
++#define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode)
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->s_fs_info)
++#else
++#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp)
++#endif
++
++static void yaffs_put_super(struct super_block *sb);
++
++static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
++ loff_t * pos);
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_file_flush(struct file *file, fl_owner_t id);
++#else
++static int yaffs_file_flush(struct file *file);
++#endif
++
++static int yaffs_sync_object(struct file *file, struct dentry *dentry,
++ int datasync);
++
++static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir);
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
++ struct nameidata *n);
++static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
++ struct nameidata *n);
++#else
++static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode);
++static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry);
++#endif
++static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
++ struct dentry *dentry);
++static int yaffs_unlink(struct inode *dir, struct dentry *dentry);
++static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
++ const char *symname);
++static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
++ dev_t dev);
++#else
++static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
++ int dev);
++#endif
++static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
++ struct inode *new_dir, struct dentry *new_dentry);
++static int yaffs_setattr(struct dentry *dentry, struct iattr *attr);
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_sync_fs(struct super_block *sb, int wait);
++static void yaffs_write_super(struct super_block *sb);
++#else
++static int yaffs_sync_fs(struct super_block *sb);
++static int yaffs_write_super(struct super_block *sb);
++#endif
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf);
++#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf);
++#else
++static int yaffs_statfs(struct super_block *sb, struct statfs *buf);
++#endif
++static void yaffs_read_inode(struct inode *inode);
++
++static void yaffs_put_inode(struct inode *inode);
++static void yaffs_delete_inode(struct inode *);
++static void yaffs_clear_inode(struct inode *);
++
++static int yaffs_readpage(struct file *file, struct page *page);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_writepage(struct page *page, struct writeback_control *wbc);
++#else
++static int yaffs_writepage(struct page *page);
++#endif
++static int yaffs_prepare_write(struct file *f, struct page *pg,
++ unsigned offset, unsigned to);
++static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
++ unsigned to);
++
++static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
++ int buflen);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
++static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
++#else
++static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
++#endif
++
++static struct address_space_operations yaffs_file_address_operations = {
++ .readpage = yaffs_readpage,
++ .writepage = yaffs_writepage,
++ .prepare_write = yaffs_prepare_write,
++ .commit_write = yaffs_commit_write,
++};
++
++static struct file_operations yaffs_file_operations = {
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
++ .read = do_sync_read,
++ .write = do_sync_write,
++ .aio_read = generic_file_aio_read,
++ .aio_write = generic_file_aio_write,
++#else
++ .read = generic_file_read,
++ .write = generic_file_write,
++#endif
++ .mmap = generic_file_mmap,
++ .flush = yaffs_file_flush,
++ .fsync = yaffs_sync_object,
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++ .sendfile = generic_file_sendfile,
++#endif
++
++};
++
++static struct inode_operations yaffs_file_inode_operations = {
++ .setattr = yaffs_setattr,
++};
++
++static struct inode_operations yaffs_symlink_inode_operations = {
++ .readlink = yaffs_readlink,
++ .follow_link = yaffs_follow_link,
++ .setattr = yaffs_setattr,
++};
++
++static struct inode_operations yaffs_dir_inode_operations = {
++ .create = yaffs_create,
++ .lookup = yaffs_lookup,
++ .link = yaffs_link,
++ .unlink = yaffs_unlink,
++ .symlink = yaffs_symlink,
++ .mkdir = yaffs_mkdir,
++ .rmdir = yaffs_unlink,
++ .mknod = yaffs_mknod,
++ .rename = yaffs_rename,
++ .setattr = yaffs_setattr,
++};
++
++static struct file_operations yaffs_dir_operations = {
++ .read = generic_read_dir,
++ .readdir = yaffs_readdir,
++ .fsync = yaffs_sync_object,
++};
++
++static struct super_operations yaffs_super_ops = {
++ .statfs = yaffs_statfs,
++ .read_inode = yaffs_read_inode,
++ .put_inode = yaffs_put_inode,
++ .put_super = yaffs_put_super,
++ .delete_inode = yaffs_delete_inode,
++ .clear_inode = yaffs_clear_inode,
++ .sync_fs = yaffs_sync_fs,
++ .write_super = yaffs_write_super,
++};
++
++static void yaffs_GrossLock(yaffs_Device * dev)
++{
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking\n"));
++
++ down(&dev->grossLock);
++}
++
++static void yaffs_GrossUnlock(yaffs_Device * dev)
++{
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking\n"));
++ up(&dev->grossLock);
++
++}
++
++static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
++ int buflen)
++{
++ unsigned char *alias;
++ int ret;
++
++ yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
++
++ yaffs_GrossLock(dev);
++
++ alias = yaffs_GetSymlinkAlias(yaffs_DentryToObject(dentry));
++
++ yaffs_GrossUnlock(dev);
++
++ if (!alias)
++ return -ENOMEM;
++
++ ret = vfs_readlink(dentry, buffer, buflen, alias);
++ kfree(alias);
++ return ret;
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
++static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
++#else
++static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
++#endif
++{
++ unsigned char *alias;
++ int ret;
++ yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
++
++ yaffs_GrossLock(dev);
++
++ alias = yaffs_GetSymlinkAlias(yaffs_DentryToObject(dentry));
++
++ yaffs_GrossUnlock(dev);
++
++ if (!alias)
++ {
++ ret = -ENOMEM;
++ goto out;
++ }
++
++ ret = vfs_follow_link(nd, alias);
++ kfree(alias);
++out:
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
++ return ERR_PTR (ret);
++#else
++ return ret;
++#endif
++}
++
++struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
++ yaffs_Object * obj);
++
++/*
++ * Lookup is used to find objects in the fs
++ */
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++
++static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
++ struct nameidata *n)
++#else
++static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry)
++#endif
++{
++ yaffs_Object *obj;
++ struct inode *inode = NULL; /* NCB 2.5/2.6 needs NULL here */
++
++ yaffs_Device *dev = yaffs_InodeToObject(dir)->myDev;
++
++ yaffs_GrossLock(dev);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_lookup for %d:%s\n",
++ yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
++
++ obj =
++ yaffs_FindObjectByName(yaffs_InodeToObject(dir),
++ dentry->d_name.name);
++
++ obj = yaffs_GetEquivalentObject(obj); /* in case it was a hardlink */
++
++ /* Can't hold gross lock when calling yaffs_get_inode() */
++ yaffs_GrossUnlock(dev);
++
++ if (obj) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_lookup found %d\n", obj->objectId));
++
++ inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
++
++ if (inode) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_loookup dentry \n"));
++/* #if 0 asserted by NCB for 2.5/6 compatability - falls through to
++ * d_add even if NULL inode */
++#if 0
++ /*dget(dentry); // try to solve directory bug */
++ d_add(dentry, inode);
++
++ /* return dentry; */
++ return NULL;
++#endif
++ }
++
++ } else {
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_lookup not found\n"));
++
++ }
++
++/* added NCB for 2.5/6 compatability - forces add even if inode is
++ * NULL which creates dentry hash */
++ d_add(dentry, inode);
++
++ return NULL;
++ /* return (ERR_PTR(-EIO)); */
++
++}
++
++/* For now put inode is just for debugging
++ * Put inode is called when the inode **structure** is put.
++ */
++static void yaffs_put_inode(struct inode *inode)
++{
++ T(YAFFS_TRACE_OS,
++ ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
++ atomic_read(&inode->i_count)));
++
++}
++
++/* clear is called to tell the fs to release any per-inode data it holds */
++static void yaffs_clear_inode(struct inode *inode)
++{
++ yaffs_Object *obj;
++ yaffs_Device *dev;
++
++ obj = yaffs_InodeToObject(inode);
++
++ T(YAFFS_TRACE_OS,
++ ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
++ atomic_read(&inode->i_count),
++ obj ? "object exists" : "null object"));
++
++ if (obj) {
++ dev = obj->myDev;
++ yaffs_GrossLock(dev);
++
++ /* Clear the association between the inode and
++ * the yaffs_Object.
++ */
++ obj->myInode = NULL;
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
++ inode->i_private = NULL;
++#else
++ inode->u.generic_ip = NULL;
++#endif
++
++ /* If the object freeing was deferred, then the real
++ * free happens now.
++ * This should fix the inode inconsistency problem.
++ */
++
++ yaffs_HandleDeferedFree(obj);
++
++ yaffs_GrossUnlock(dev);
++ }
++
++}
++
++/* delete is called when the link count is zero and the inode
++ * is put (ie. nobody wants to know about it anymore, time to
++ * delete the file).
++ * NB Must call clear_inode()
++ */
++static void yaffs_delete_inode(struct inode *inode)
++{
++ yaffs_Object *obj = yaffs_InodeToObject(inode);
++ yaffs_Device *dev;
++
++ T(YAFFS_TRACE_OS,
++ ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
++ atomic_read(&inode->i_count),
++ obj ? "object exists" : "null object"));
++
++ if (obj) {
++ dev = obj->myDev;
++ yaffs_GrossLock(dev);
++ yaffs_DeleteFile(obj);
++ yaffs_GrossUnlock(dev);
++ }
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
++ truncate_inode_pages (&inode->i_data, 0);
++#endif
++ clear_inode(inode);
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_file_flush(struct file *file, fl_owner_t id)
++#else
++static int yaffs_file_flush(struct file *file)
++#endif
++{
++ yaffs_Object *obj = yaffs_DentryToObject(file->f_dentry);
++
++ yaffs_Device *dev = obj->myDev;
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_file_flush object %d (%s)\n", obj->objectId,
++ obj->dirty ? "dirty" : "clean"));
++
++ yaffs_GrossLock(dev);
++
++ yaffs_FlushFile(obj, 1);
++
++ yaffs_GrossUnlock(dev);
++
++ return 0;
++}
++
++static int yaffs_readpage_nolock(struct file *f, struct page *pg)
++{
++ /* Lifted from jffs2 */
++
++ yaffs_Object *obj;
++ unsigned char *pg_buf;
++ int ret;
++
++ yaffs_Device *dev;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage at %08x, size %08x\n",
++ (unsigned)(pg->index << PAGE_CACHE_SHIFT),
++ (unsigned)PAGE_CACHE_SIZE));
++
++ obj = yaffs_DentryToObject(f->f_dentry);
++
++ dev = obj->myDev;
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++ BUG_ON(!PageLocked(pg));
++#else
++ if (!PageLocked(pg))
++ PAGE_BUG(pg);
++#endif
++
++ pg_buf = kmap(pg);
++ /* FIXME: Can kmap fail? */
++
++ yaffs_GrossLock(dev);
++
++ ret =
++ yaffs_ReadDataFromFile(obj, pg_buf, pg->index << PAGE_CACHE_SHIFT,
++ PAGE_CACHE_SIZE);
++
++ yaffs_GrossUnlock(dev);
++
++ if (ret >= 0)
++ ret = 0;
++
++ if (ret) {
++ ClearPageUptodate(pg);
++ SetPageError(pg);
++ } else {
++ SetPageUptodate(pg);
++ ClearPageError(pg);
++ }
++
++ flush_dcache_page(pg);
++ kunmap(pg);
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage done\n"));
++ return ret;
++}
++
++static int yaffs_readpage_unlock(struct file *f, struct page *pg)
++{
++ int ret = yaffs_readpage_nolock(f, pg);
++ UnlockPage(pg);
++ return ret;
++}
++
++static int yaffs_readpage(struct file *f, struct page *pg)
++{
++ return yaffs_readpage_unlock(f, pg);
++}
++
++/* writepage inspired by/stolen from smbfs */
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_writepage(struct page *page, struct writeback_control *wbc)
++#else
++static int yaffs_writepage(struct page *page)
++#endif
++{
++ struct address_space *mapping = page->mapping;
++ loff_t offset = (loff_t) page->index << PAGE_CACHE_SHIFT;
++ struct inode *inode;
++ unsigned long end_index;
++ char *buffer;
++ yaffs_Object *obj;
++ int nWritten = 0;
++ unsigned nBytes;
++
++ if (!mapping)
++ BUG();
++ inode = mapping->host;
++ if (!inode)
++ BUG();
++
++ if (offset > inode->i_size) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG
++ "yaffs_writepage at %08x, inode size = %08x!!!\n",
++ (unsigned)(page->index << PAGE_CACHE_SHIFT),
++ (unsigned)inode->i_size));
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG " -> don't care!!\n"));
++ unlock_page(page);
++ return 0;
++ }
++
++ end_index = inode->i_size >> PAGE_CACHE_SHIFT;
++
++ /* easy case */
++ if (page->index < end_index) {
++ nBytes = PAGE_CACHE_SIZE;
++ } else {
++ nBytes = inode->i_size & (PAGE_CACHE_SIZE - 1);
++ }
++
++ get_page(page);
++
++ buffer = kmap(page);
++
++ obj = yaffs_InodeToObject(inode);
++ yaffs_GrossLock(obj->myDev);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_writepage at %08x, size %08x\n",
++ (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "writepag0: obj = %05x, ino = %05x\n",
++ (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
++
++ nWritten =
++ yaffs_WriteDataToFile(obj, buffer, page->index << PAGE_CACHE_SHIFT,
++ nBytes, 0);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "writepag1: obj = %05x, ino = %05x\n",
++ (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
++
++ yaffs_GrossUnlock(obj->myDev);
++
++ kunmap(page);
++ SetPageUptodate(page);
++ UnlockPage(page);
++ put_page(page);
++
++ return (nWritten == nBytes) ? 0 : -ENOSPC;
++}
++
++static int yaffs_prepare_write(struct file *f, struct page *pg,
++ unsigned offset, unsigned to)
++{
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_prepair_write\n"));
++ if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
++ return yaffs_readpage_nolock(f, pg);
++
++ return 0;
++
++}
++
++static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
++ unsigned to)
++{
++
++ void *addr = page_address(pg) + offset;
++ loff_t pos = (((loff_t) pg->index) << PAGE_CACHE_SHIFT) + offset;
++ int nBytes = to - offset;
++ int nWritten;
++
++ unsigned spos = pos;
++ unsigned saddr = (unsigned)addr;
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_commit_write addr %x pos %x nBytes %d\n", saddr,
++ spos, nBytes));
++
++ nWritten = yaffs_file_write(f, addr, nBytes, &pos);
++
++ if (nWritten != nBytes) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG
++ "yaffs_commit_write not same size nWritten %d nBytes %d\n",
++ nWritten, nBytes));
++ SetPageError(pg);
++ ClearPageUptodate(pg);
++ } else {
++ SetPageUptodate(pg);
++ }
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_commit_write returning %d\n",
++ nWritten == nBytes ? 0 : nWritten));
++
++ return nWritten == nBytes ? 0 : nWritten;
++
++}
++
++static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj)
++{
++ if (inode && obj) {
++
++
++ /* Check mode against the variant type and attempt to repair if broken. */
++ __u32 mode = obj->yst_mode;
++ switch( obj->variantType ){
++ case YAFFS_OBJECT_TYPE_FILE :
++ if( ! S_ISREG(mode) ){
++ obj->yst_mode &= ~S_IFMT;
++ obj->yst_mode |= S_IFREG;
++ }
++
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK :
++ if( ! S_ISLNK(mode) ){
++ obj->yst_mode &= ~S_IFMT;
++ obj->yst_mode |= S_IFLNK;
++ }
++
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY :
++ if( ! S_ISDIR(mode) ){
++ obj->yst_mode &= ~S_IFMT;
++ obj->yst_mode |= S_IFDIR;
++ }
++
++ break;
++ case YAFFS_OBJECT_TYPE_UNKNOWN :
++ case YAFFS_OBJECT_TYPE_HARDLINK :
++ case YAFFS_OBJECT_TYPE_SPECIAL :
++ default:
++ /* TODO? */
++ break;
++ }
++
++ inode->i_ino = obj->objectId;
++ inode->i_mode = obj->yst_mode;
++ inode->i_uid = obj->yst_uid;
++ inode->i_gid = obj->yst_gid;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
++ inode->i_blksize = inode->i_sb->s_blocksize;
++#endif
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++
++ inode->i_rdev = old_decode_dev(obj->yst_rdev);
++ inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
++ inode->i_atime.tv_nsec = 0;
++ inode->i_mtime.tv_sec = (time_t) obj->yst_mtime;
++ inode->i_mtime.tv_nsec = 0;
++ inode->i_ctime.tv_sec = (time_t) obj->yst_ctime;
++ inode->i_ctime.tv_nsec = 0;
++#else
++ inode->i_rdev = obj->yst_rdev;
++ inode->i_atime = obj->yst_atime;
++ inode->i_mtime = obj->yst_mtime;
++ inode->i_ctime = obj->yst_ctime;
++#endif
++ inode->i_size = yaffs_GetObjectFileLength(obj);
++ inode->i_blocks = (inode->i_size + 511) >> 9;
++
++ inode->i_nlink = yaffs_GetObjectLinkCount(obj);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG
++ "yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
++ inode->i_mode, inode->i_uid, inode->i_gid,
++ (int)inode->i_size, atomic_read(&inode->i_count)));
++
++ switch (obj->yst_mode & S_IFMT) {
++ default: /* fifo, device or socket */
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++ init_special_inode(inode, obj->yst_mode,
++ old_decode_dev(obj->yst_rdev));
++#else
++ init_special_inode(inode, obj->yst_mode,
++ (dev_t) (obj->yst_rdev));
++#endif
++ break;
++ case S_IFREG: /* file */
++ inode->i_op = &yaffs_file_inode_operations;
++ inode->i_fop = &yaffs_file_operations;
++ inode->i_mapping->a_ops =
++ &yaffs_file_address_operations;
++ break;
++ case S_IFDIR: /* directory */
++ inode->i_op = &yaffs_dir_inode_operations;
++ inode->i_fop = &yaffs_dir_operations;
++ break;
++ case S_IFLNK: /* symlink */
++ inode->i_op = &yaffs_symlink_inode_operations;
++ break;
++ }
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
++ inode->i_private = obj;
++#else
++ inode->u.generic_ip = obj;
++#endif
++ obj->myInode = inode;
++
++ } else {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_FileInode invalid parameters\n"));
++ }
++
++}
++
++struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
++ yaffs_Object * obj)
++{
++ struct inode *inode;
++
++ if (!sb) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_get_inode for NULL super_block!!\n"));
++ return NULL;
++
++ }
++
++ if (!obj) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_get_inode for NULL object!!\n"));
++ return NULL;
++
++ }
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_get_inode for object %d\n", obj->objectId));
++
++ inode = iget(sb, obj->objectId);
++
++ /* NB Side effect: iget calls back to yaffs_read_inode(). */
++ /* iget also increments the inode's i_count */
++ /* NB You can't be holding grossLock or deadlock will happen! */
++
++ return inode;
++}
++
++static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
++ loff_t * pos)
++{
++ yaffs_Object *obj;
++ int nWritten, ipos;
++ struct inode *inode;
++ yaffs_Device *dev;
++
++ obj = yaffs_DentryToObject(f->f_dentry);
++
++ dev = obj->myDev;
++
++ yaffs_GrossLock(dev);
++
++ inode = f->f_dentry->d_inode;
++
++ if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND) {
++ ipos = inode->i_size;
++ } else {
++ ipos = *pos;
++ }
++
++ if (!obj) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_file_write: hey obj is null!\n"));
++ } else {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG
++ "yaffs_file_write about to write writing %d bytes"
++ "to object %d at %d\n",
++ n, obj->objectId, ipos));
++ }
++
++ nWritten = yaffs_WriteDataToFile(obj, buf, ipos, n, 0);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_file_write writing %d bytes, %d written at %d\n",
++ n, nWritten, ipos));
++ if (nWritten > 0) {
++ ipos += nWritten;
++ *pos = ipos;
++ if (ipos > inode->i_size) {
++ inode->i_size = ipos;
++ inode->i_blocks = (ipos + 511) >> 9;
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG
++ "yaffs_file_write size updated to %d bytes, "
++ "%d blocks\n",
++ ipos, (int)(inode->i_blocks)));
++ }
++
++ }
++ yaffs_GrossUnlock(dev);
++ return nWritten == 0 ? -ENOSPC : nWritten;
++}
++
++static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
++{
++ yaffs_Object *obj;
++ yaffs_Device *dev;
++ struct inode *inode = f->f_dentry->d_inode;
++ unsigned long offset, curoffs;
++ struct list_head *i;
++ yaffs_Object *l;
++
++ char name[YAFFS_MAX_NAME_LENGTH + 1];
++
++ obj = yaffs_DentryToObject(f->f_dentry);
++ dev = obj->myDev;
++
++ yaffs_GrossLock(dev);
++
++ offset = f->f_pos;
++
++ T(YAFFS_TRACE_OS, ("yaffs_readdir: starting at %d\n", (int)offset));
++
++ if (offset == 0) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_readdir: entry . ino %d \n",
++ (int)inode->i_ino));
++ if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR)
++ < 0) {
++ goto out;
++ }
++ offset++;
++ f->f_pos++;
++ }
++ if (offset == 1) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_readdir: entry .. ino %d \n",
++ (int)f->f_dentry->d_parent->d_inode->i_ino));
++ if (filldir
++ (dirent, "..", 2, offset,
++ f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
++ goto out;
++ }
++ offset++;
++ f->f_pos++;
++ }
++
++ curoffs = 1;
++
++ /* If the directory has changed since the open or last call to
++ readdir, rewind to after the 2 canned entries. */
++
++ if (f->f_version != inode->i_version) {
++ offset = 2;
++ f->f_pos = offset;
++ f->f_version = inode->i_version;
++ }
++
++ list_for_each(i, &obj->variant.directoryVariant.children) {
++ curoffs++;
++ if (curoffs >= offset) {
++ l = list_entry(i, yaffs_Object, siblings);
++
++ yaffs_GetObjectName(l, name,
++ YAFFS_MAX_NAME_LENGTH + 1);
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_readdir: %s inode %d\n", name,
++ yaffs_GetObjectInode(l)));
++
++ if (filldir(dirent,
++ name,
++ strlen(name),
++ offset,
++ yaffs_GetObjectInode(l),
++ yaffs_GetObjectType(l))
++ < 0) {
++ goto up_and_out;
++ }
++
++ offset++;
++ f->f_pos++;
++ }
++ }
++
++ up_and_out:
++ out:
++
++ yaffs_GrossUnlock(dev);
++
++ return 0;
++}
++
++/*
++ * File creation. Allocate an inode, and we're done..
++ */
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
++ dev_t rdev)
++#else
++static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
++ int rdev)
++#endif
++{
++ struct inode *inode;
++
++ yaffs_Object *obj = NULL;
++ yaffs_Device *dev;
++
++ yaffs_Object *parent = yaffs_InodeToObject(dir);
++
++ int error = -ENOSPC;
++ uid_t uid = current->fsuid;
++ gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
++
++ if((dir->i_mode & S_ISGID) && S_ISDIR(mode))
++ mode |= S_ISGID;
++
++ if (parent) {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_mknod: parent object %d type %d\n",
++ parent->objectId, parent->variantType));
++ } else {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_mknod: could not get parent object\n"));
++ return -EPERM;
++ }
++
++ T(YAFFS_TRACE_OS, ("yaffs_mknod: making oject for %s, "
++ "mode %x dev %x\n",
++ dentry->d_name.name, mode, rdev));
++
++ dev = parent->myDev;
++
++ yaffs_GrossLock(dev);
++
++ switch (mode & S_IFMT) {
++ default:
++ /* Special (socket, fifo, device...) */
++ T(YAFFS_TRACE_OS, (KERN_DEBUG
++ "yaffs_mknod: making special\n"));
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++ obj =
++ yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
++ gid, old_encode_dev(rdev));
++#else
++ obj =
++ yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
++ gid, rdev);
++#endif
++ break;
++ case S_IFREG: /* file */
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
++ obj =
++ yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
++ gid);
++ break;
++ case S_IFDIR: /* directory */
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_mknod: making directory\n"));
++ obj =
++ yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
++ uid, gid);
++ break;
++ case S_IFLNK: /* symlink */
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
++ obj = NULL; /* Do we ever get here? */
++ break;
++ }
++
++ /* Can not call yaffs_get_inode() with gross lock held */
++ yaffs_GrossUnlock(dev);
++
++ if (obj) {
++ inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
++ d_instantiate(dentry, inode);
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_mknod created object %d count = %d\n",
++ obj->objectId, atomic_read(&inode->i_count)));
++ error = 0;
++ } else {
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_mknod failed making object\n"));
++ error = -ENOMEM;
++ }
++
++ return error;
++}
++
++static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
++{
++ int retVal;
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mkdir\n"));
++ retVal = yaffs_mknod(dir, dentry, mode | S_IFDIR, 0);
++#if 0
++ /* attempt to fix dir bug - didn't work */
++ if (!retVal) {
++ dget(dentry);
++ }
++#endif
++ return retVal;
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
++ struct nameidata *n)
++#else
++static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode)
++#endif
++{
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_create\n"));
++ return yaffs_mknod(dir, dentry, mode | S_IFREG, 0);
++}
++
++static int yaffs_unlink(struct inode *dir, struct dentry *dentry)
++{
++ int retVal;
++
++ yaffs_Device *dev;
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_unlink %d:%s\n", (int)(dir->i_ino),
++ dentry->d_name.name));
++
++ dev = yaffs_InodeToObject(dir)->myDev;
++
++ yaffs_GrossLock(dev);
++
++ retVal = yaffs_Unlink(yaffs_InodeToObject(dir), dentry->d_name.name);
++
++ if (retVal == YAFFS_OK) {
++ dentry->d_inode->i_nlink--;
++ dir->i_version++;
++ yaffs_GrossUnlock(dev);
++ mark_inode_dirty(dentry->d_inode);
++ return 0;
++ }
++ yaffs_GrossUnlock(dev);
++ return -ENOTEMPTY;
++}
++
++/*
++ * Create a link...
++ */
++static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
++ struct dentry *dentry)
++{
++ struct inode *inode = old_dentry->d_inode;
++ yaffs_Object *obj = NULL;
++ yaffs_Object *link = NULL;
++ yaffs_Device *dev;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_link\n"));
++
++ obj = yaffs_InodeToObject(inode);
++ dev = obj->myDev;
++
++ yaffs_GrossLock(dev);
++
++ if (!S_ISDIR(inode->i_mode)) /* Don't link directories */
++ {
++ link =
++ yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
++ obj);
++ }
++
++ if (link) {
++ old_dentry->d_inode->i_nlink = yaffs_GetObjectLinkCount(obj);
++ d_instantiate(dentry, old_dentry->d_inode);
++ atomic_inc(&old_dentry->d_inode->i_count);
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_link link count %d i_count %d\n",
++ old_dentry->d_inode->i_nlink,
++ atomic_read(&old_dentry->d_inode->i_count)));
++
++ }
++
++ yaffs_GrossUnlock(dev);
++
++ if (link) {
++
++ return 0;
++ }
++
++ return -EPERM;
++}
++
++static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
++ const char *symname)
++{
++ yaffs_Object *obj;
++ yaffs_Device *dev;
++ uid_t uid = current->fsuid;
++ gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_symlink\n"));
++
++ dev = yaffs_InodeToObject(dir)->myDev;
++ yaffs_GrossLock(dev);
++ obj = yaffs_MknodSymLink(yaffs_InodeToObject(dir), dentry->d_name.name,
++ S_IFLNK | S_IRWXUGO, uid, gid, symname);
++ yaffs_GrossUnlock(dev);
++
++ if (obj) {
++
++ struct inode *inode;
++
++ inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
++ d_instantiate(dentry, inode);
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink created OK\n"));
++ return 0;
++ } else {
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink not created\n"));
++
++ }
++
++ return -ENOMEM;
++}
++
++static int yaffs_sync_object(struct file *file, struct dentry *dentry,
++ int datasync)
++{
++
++ yaffs_Object *obj;
++ yaffs_Device *dev;
++
++ obj = yaffs_DentryToObject(dentry);
++
++ dev = obj->myDev;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_object\n"));
++ yaffs_GrossLock(dev);
++ yaffs_FlushFile(obj, 1);
++ yaffs_GrossUnlock(dev);
++ return 0;
++}
++
++/*
++ * The VFS layer already does all the dentry stuff for rename.
++ *
++ * NB: POSIX says you can rename an object over an old object of the same name
++ */
++static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
++ struct inode *new_dir, struct dentry *new_dentry)
++{
++ yaffs_Device *dev;
++ int retVal = YAFFS_FAIL;
++ yaffs_Object *target;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_rename\n"));
++ dev = yaffs_InodeToObject(old_dir)->myDev;
++
++ yaffs_GrossLock(dev);
++
++ /* Check if the target is an existing directory that is not empty. */
++ target =
++ yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
++ new_dentry->d_name.name);
++
++
++
++ if (target &&
++ target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
++ !list_empty(&target->variant.directoryVariant.children)) {
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "target is non-empty dir\n"));
++
++ retVal = YAFFS_FAIL;
++ } else {
++
++ /* Now does unlinking internally using shadowing mechanism */
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "calling yaffs_RenameObject\n"));
++
++ retVal =
++ yaffs_RenameObject(yaffs_InodeToObject(old_dir),
++ old_dentry->d_name.name,
++ yaffs_InodeToObject(new_dir),
++ new_dentry->d_name.name);
++
++ }
++ yaffs_GrossUnlock(dev);
++
++ if (retVal == YAFFS_OK) {
++ if(target) {
++ new_dentry->d_inode->i_nlink--;
++ mark_inode_dirty(new_dentry->d_inode);
++ }
++
++ return 0;
++ } else {
++ return -ENOTEMPTY;
++ }
++
++}
++
++static int yaffs_setattr(struct dentry *dentry, struct iattr *attr)
++{
++ struct inode *inode = dentry->d_inode;
++ int error;
++ yaffs_Device *dev;
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_setattr of object %d\n",
++ yaffs_InodeToObject(inode)->objectId));
++
++ if ((error = inode_change_ok(inode, attr)) == 0) {
++
++ dev = yaffs_InodeToObject(inode)->myDev;
++ yaffs_GrossLock(dev);
++ if (yaffs_SetAttributes(yaffs_InodeToObject(inode), attr) ==
++ YAFFS_OK) {
++ error = 0;
++ } else {
++ error = -EPERM;
++ }
++ yaffs_GrossUnlock(dev);
++ if (!error)
++ error = inode_setattr(inode, attr);
++ }
++ return error;
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf)
++{
++ yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
++ struct super_block *sb = dentry->d_sb;
++#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf)
++{
++ yaffs_Device *dev = yaffs_SuperToDevice(sb);
++#else
++static int yaffs_statfs(struct super_block *sb, struct statfs *buf)
++{
++ yaffs_Device *dev = yaffs_SuperToDevice(sb);
++#endif
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_statfs\n"));
++
++ yaffs_GrossLock(dev);
++
++ buf->f_type = YAFFS_MAGIC;
++ buf->f_bsize = sb->s_blocksize;
++ buf->f_namelen = 255;
++ if (sb->s_blocksize > dev->nDataBytesPerChunk) {
++
++ buf->f_blocks =
++ (dev->endBlock - dev->startBlock +
++ 1) * dev->nChunksPerBlock / (sb->s_blocksize /
++ dev->nDataBytesPerChunk);
++ buf->f_bfree =
++ yaffs_GetNumberOfFreeChunks(dev) / (sb->s_blocksize /
++ dev->nDataBytesPerChunk);
++ } else {
++
++ buf->f_blocks =
++ (dev->endBlock - dev->startBlock +
++ 1) * dev->nChunksPerBlock * (dev->nDataBytesPerChunk /
++ sb->s_blocksize);
++ buf->f_bfree =
++ yaffs_GetNumberOfFreeChunks(dev) * (dev->nDataBytesPerChunk /
++ sb->s_blocksize);
++ }
++ buf->f_files = 0;
++ buf->f_ffree = 0;
++ buf->f_bavail = buf->f_bfree;
++
++ yaffs_GrossUnlock(dev);
++ return 0;
++}
++
++
++
++static int yaffs_do_sync_fs(struct super_block *sb)
++{
++
++ yaffs_Device *dev = yaffs_SuperToDevice(sb);
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_do_sync_fs\n"));
++
++ if(sb->s_dirt) {
++ yaffs_GrossLock(dev);
++
++ if(dev)
++ yaffs_CheckpointSave(dev);
++
++ yaffs_GrossUnlock(dev);
++
++ sb->s_dirt = 0;
++ }
++ return 0;
++}
++
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static void yaffs_write_super(struct super_block *sb)
++#else
++static int yaffs_write_super(struct super_block *sb)
++#endif
++{
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_write_super\n"));
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
++ return 0; /* yaffs_do_sync_fs(sb);*/
++#endif
++}
++
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_sync_fs(struct super_block *sb, int wait)
++#else
++static int yaffs_sync_fs(struct super_block *sb)
++#endif
++{
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_fs\n"));
++
++ return 0; /* yaffs_do_sync_fs(sb);*/
++
++}
++
++
++static void yaffs_read_inode(struct inode *inode)
++{
++ /* NB This is called as a side effect of other functions, but
++ * we had to release the lock to prevent deadlocks, so
++ * need to lock again.
++ */
++
++ yaffs_Object *obj;
++ yaffs_Device *dev = yaffs_SuperToDevice(inode->i_sb);
++
++ T(YAFFS_TRACE_OS,
++ (KERN_DEBUG "yaffs_read_inode for %d\n", (int)inode->i_ino));
++
++ yaffs_GrossLock(dev);
++
++ obj = yaffs_FindObjectByNumber(dev, inode->i_ino);
++
++ yaffs_FillInodeFromObject(inode, obj);
++
++ yaffs_GrossUnlock(dev);
++}
++
++static LIST_HEAD(yaffs_dev_list);
++
++static void yaffs_put_super(struct super_block *sb)
++{
++ yaffs_Device *dev = yaffs_SuperToDevice(sb);
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_put_super\n"));
++
++ yaffs_GrossLock(dev);
++
++ yaffs_FlushEntireDeviceCache(dev);
++
++ if (dev->putSuperFunc) {
++ dev->putSuperFunc(sb);
++ }
++
++ yaffs_CheckpointSave(dev);
++ yaffs_Deinitialise(dev);
++
++ yaffs_GrossUnlock(dev);
++
++ /* we assume this is protected by lock_kernel() in mount/umount */
++ list_del(&dev->devList);
++
++ if(dev->spareBuffer){
++ YFREE(dev->spareBuffer);
++ dev->spareBuffer = NULL;
++ }
++
++ kfree(dev);
++}
++
++
++static void yaffs_MTDPutSuper(struct super_block *sb)
++{
++
++ struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
++
++ if (mtd->sync) {
++ mtd->sync(mtd);
++ }
++
++ put_mtd_device(mtd);
++}
++
++
++static void yaffs_MarkSuperBlockDirty(void *vsb)
++{
++ struct super_block *sb = (struct super_block *)vsb;
++
++ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_MarkSuperBlockDirty() sb = %p\n",sb));
++// if(sb)
++// sb->s_dirt = 1;
++}
++
++static struct super_block *yaffs_internal_read_super(int yaffsVersion,
++ struct super_block *sb,
++ void *data, int silent)
++{
++ int nBlocks;
++ struct inode *inode = NULL;
++ struct dentry *root;
++ yaffs_Device *dev = 0;
++ char devname_buf[BDEVNAME_SIZE + 1];
++ struct mtd_info *mtd;
++ int err;
++
++ sb->s_magic = YAFFS_MAGIC;
++ sb->s_op = &yaffs_super_ops;
++
++ if (!sb)
++ printk(KERN_INFO "yaffs: sb is NULL\n");
++ else if (!sb->s_dev)
++ printk(KERN_INFO "yaffs: sb->s_dev is NULL\n");
++ else if (!yaffs_devname(sb, devname_buf))
++ printk(KERN_INFO "yaffs: devname is NULL\n");
++ else
++ printk(KERN_INFO "yaffs: dev is %d name is \"%s\"\n",
++ sb->s_dev,
++ yaffs_devname(sb, devname_buf));
++
++ sb->s_blocksize = PAGE_CACHE_SIZE;
++ sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
++ T(YAFFS_TRACE_OS, ("yaffs_read_super: Using yaffs%d\n", yaffsVersion));
++ T(YAFFS_TRACE_OS,
++ ("yaffs_read_super: block size %d\n", (int)(sb->s_blocksize)));
++
++#ifdef CONFIG_YAFFS_DISABLE_WRITE_VERIFY
++ T(YAFFS_TRACE_OS,
++ ("yaffs: Write verification disabled. All guarantees "
++ "null and void\n"));
++#endif
++
++ T(YAFFS_TRACE_ALWAYS, ("yaffs: Attempting MTD mount on %u.%u, "
++ "\"%s\"\n",
++ MAJOR(sb->s_dev), MINOR(sb->s_dev),
++ yaffs_devname(sb, devname_buf)));
++
++ /* Check it's an mtd device..... */
++ if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR) {
++ return NULL; /* This isn't an mtd device */
++ }
++ /* Get the device */
++ mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
++ if (!mtd) {
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device #%u doesn't appear to exist\n",
++ MINOR(sb->s_dev)));
++ return NULL;
++ }
++ /* Check it's NAND */
++ if (mtd->type != MTD_NANDFLASH) {
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device is not NAND it's type %d\n", mtd->type));
++ return NULL;
++ }
++
++ T(YAFFS_TRACE_OS, (" erase %p\n", mtd->erase));
++ T(YAFFS_TRACE_OS, (" read %p\n", mtd->read));
++ T(YAFFS_TRACE_OS, (" write %p\n", mtd->write));
++ T(YAFFS_TRACE_OS, (" readoob %p\n", mtd->read_oob));
++ T(YAFFS_TRACE_OS, (" writeoob %p\n", mtd->write_oob));
++ T(YAFFS_TRACE_OS, (" block_isbad %p\n", mtd->block_isbad));
++ T(YAFFS_TRACE_OS, (" block_markbad %p\n", mtd->block_markbad));
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ T(YAFFS_TRACE_OS, (" writesize %d\n", mtd->writesize));
++#else
++ T(YAFFS_TRACE_OS, (" oobblock %d\n", mtd->oobblock));
++#endif
++ T(YAFFS_TRACE_OS, (" oobsize %d\n", mtd->oobsize));
++ T(YAFFS_TRACE_OS, (" erasesize %d\n", mtd->erasesize));
++ T(YAFFS_TRACE_OS, (" size %d\n", mtd->size));
++
++#ifdef CONFIG_YAFFS_AUTO_YAFFS2
++
++ if (yaffsVersion == 1 &&
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ mtd->writesize >= 2048) {
++#else
++ mtd->oobblock >= 2048) {
++#endif
++ T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs2\n"));
++ yaffsVersion = 2;
++ }
++
++ /* Added NCB 26/5/2006 for completeness */
++ if (yaffsVersion == 2 &&
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ mtd->writesize == 512) {
++#else
++ mtd->oobblock == 512) {
++#endif
++ T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs1\n"));
++ yaffsVersion = 1;
++ }
++
++#endif
++
++ if (yaffsVersion == 2) {
++ /* Check for version 2 style functions */
++ if (!mtd->erase ||
++ !mtd->block_isbad ||
++ !mtd->block_markbad ||
++ !mtd->read ||
++ !mtd->write ||
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ !mtd->read_oob || !mtd->write_oob) {
++#else
++ !mtd->write_ecc ||
++ !mtd->read_ecc || !mtd->read_oob || !mtd->write_oob) {
++#endif
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device does not support required "
++ "functions\n"));;
++ return NULL;
++ }
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ if (mtd->writesize < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
++#else
++ if (mtd->oobblock < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
++#endif
++ mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) {
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device does not have the "
++ "right page sizes\n"));
++ return NULL;
++ }
++ } else {
++ /* Check for V1 style functions */
++ if (!mtd->erase ||
++ !mtd->read ||
++ !mtd->write ||
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ !mtd->read_oob || !mtd->write_oob) {
++#else
++ !mtd->write_ecc ||
++ !mtd->read_ecc || !mtd->read_oob || !mtd->write_oob) {
++#endif
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device does not support required "
++ "functions\n"));;
++ return NULL;
++ }
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ if (mtd->writesize < YAFFS_BYTES_PER_CHUNK ||
++#else
++ if (mtd->oobblock < YAFFS_BYTES_PER_CHUNK ||
++#endif
++ mtd->oobsize != YAFFS_BYTES_PER_SPARE) {
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs: MTD device does not support have the "
++ "right page sizes\n"));
++ return NULL;
++ }
++ }
++
++ /* OK, so if we got here, we have an MTD that's NAND and looks
++ * like it has the right capabilities
++ * Set the yaffs_Device up for mtd
++ */
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++ sb->s_fs_info = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
++#else
++ sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
++#endif
++ if (!dev) {
++ /* Deep shit could not allocate device structure */
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs_read_super: Failed trying to allocate "
++ "yaffs_Device. \n"));
++ return NULL;
++ }
++
++ memset(dev, 0, sizeof(yaffs_Device));
++ dev->genericDevice = mtd;
++ dev->name = mtd->name;
++
++ /* Set up the memory size parameters.... */
++
++ nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
++ dev->startBlock = 0;
++ dev->endBlock = nBlocks - 1;
++ dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
++ dev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
++ dev->nReservedBlocks = 5;
++ dev->nShortOpCaches = 10; /* Enable short op caching */
++
++ /* ... and the functions. */
++ if (yaffsVersion == 2) {
++ dev->writeChunkWithTagsToNAND =
++ nandmtd2_WriteChunkWithTagsToNAND;
++ dev->readChunkWithTagsFromNAND =
++ nandmtd2_ReadChunkWithTagsFromNAND;
++ dev->markNANDBlockBad = nandmtd2_MarkNANDBlockBad;
++ dev->queryNANDBlock = nandmtd2_QueryNANDBlock;
++ dev->spareBuffer = YMALLOC(mtd->oobsize);
++ dev->isYaffs2 = 1;
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ dev->nDataBytesPerChunk = mtd->writesize;
++ dev->nChunksPerBlock = mtd->erasesize / mtd->writesize;
++#else
++ dev->nDataBytesPerChunk = mtd->oobblock;
++ dev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
++#endif
++ nBlocks = mtd->size / mtd->erasesize;
++
++ dev->nCheckpointReservedBlocks = 0;
++ dev->startBlock = 0;
++ dev->endBlock = nBlocks - 1;
++ } else {
++ dev->writeChunkToNAND = nandmtd_WriteChunkToNAND;
++ dev->readChunkFromNAND = nandmtd_ReadChunkFromNAND;
++ dev->isYaffs2 = 0;
++ }
++ /* ... and common functions */
++ dev->eraseBlockInNAND = nandmtd_EraseBlockInNAND;
++ dev->initialiseNAND = nandmtd_InitialiseNAND;
++
++ dev->putSuperFunc = yaffs_MTDPutSuper;
++
++ dev->superBlock = (void *)sb;
++ dev->markSuperBlockDirty = yaffs_MarkSuperBlockDirty;
++
++
++#ifndef CONFIG_YAFFS_DOES_ECC
++ dev->useNANDECC = 1;
++#endif
++
++#ifdef CONFIG_YAFFS_DISABLE_WIDE_TNODES
++ dev->wideTnodesDisabled = 1;
++#endif
++
++ /* we assume this is protected by lock_kernel() in mount/umount */
++ list_add_tail(&dev->devList, &yaffs_dev_list);
++
++ init_MUTEX(&dev->grossLock);
++
++ yaffs_GrossLock(dev);
++
++ err = yaffs_GutsInitialise(dev);
++
++ T(YAFFS_TRACE_OS,
++ ("yaffs_read_super: guts initialised %s\n",
++ (err == YAFFS_OK) ? "OK" : "FAILED"));
++
++ /* Release lock before yaffs_get_inode() */
++ yaffs_GrossUnlock(dev);
++
++ /* Create root inode */
++ if (err == YAFFS_OK)
++ inode = yaffs_get_inode(sb, S_IFDIR | 0755, 0,
++ yaffs_Root(dev));
++
++ if (!inode)
++ return NULL;
++
++ inode->i_op = &yaffs_dir_inode_operations;
++ inode->i_fop = &yaffs_dir_operations;
++
++ T(YAFFS_TRACE_OS, ("yaffs_read_super: got root inode\n"));
++
++ root = d_alloc_root(inode);
++
++ T(YAFFS_TRACE_OS, ("yaffs_read_super: d_alloc_root done\n"));
++
++ if (!root) {
++ iput(inode);
++ return NULL;
++ }
++ sb->s_root = root;
++
++ T(YAFFS_TRACE_OS, ("yaffs_read_super: done\n"));
++ return sb;
++}
++
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
++ int silent)
++{
++ return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs_read_super(struct file_system_type *fs,
++ int flags, const char *dev_name,
++ void *data, struct vfsmount *mnt)
++{
++
++ return get_sb_bdev(fs, flags, dev_name, data,
++ yaffs_internal_read_super_mtd, mnt);
++}
++#else
++static struct super_block *yaffs_read_super(struct file_system_type *fs,
++ int flags, const char *dev_name,
++ void *data)
++{
++
++ return get_sb_bdev(fs, flags, dev_name, data,
++ yaffs_internal_read_super_mtd);
++}
++#endif
++
++static struct file_system_type yaffs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "yaffs",
++ .get_sb = yaffs_read_super,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV,
++};
++#else
++static struct super_block *yaffs_read_super(struct super_block *sb, void *data,
++ int silent)
++{
++ return yaffs_internal_read_super(1, sb, data, silent);
++}
++
++static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super,
++ FS_REQUIRES_DEV);
++#endif
++
++
++#ifdef CONFIG_YAFFS_YAFFS2
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
++ int silent)
++{
++ return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
++}
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static int yaffs2_read_super(struct file_system_type *fs,
++ int flags, const char *dev_name, void *data,
++ struct vfsmount *mnt)
++{
++ return get_sb_bdev(fs, flags, dev_name, data,
++ yaffs2_internal_read_super_mtd, mnt);
++}
++#else
++static struct super_block *yaffs2_read_super(struct file_system_type *fs,
++ int flags, const char *dev_name,
++ void *data)
++{
++
++ return get_sb_bdev(fs, flags, dev_name, data,
++ yaffs2_internal_read_super_mtd);
++}
++#endif
++
++static struct file_system_type yaffs2_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "yaffs2",
++ .get_sb = yaffs2_read_super,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV,
++};
++#else
++static struct super_block *yaffs2_read_super(struct super_block *sb,
++ void *data, int silent)
++{
++ return yaffs_internal_read_super(2, sb, data, silent);
++}
++
++static DECLARE_FSTYPE(yaffs2_fs_type, "yaffs2", yaffs2_read_super,
++ FS_REQUIRES_DEV);
++#endif
++
++#endif /* CONFIG_YAFFS_YAFFS2 */
++
++static struct proc_dir_entry *my_proc_entry;
++
++static char *yaffs_dump_dev(char *buf, yaffs_Device * dev)
++{
++ buf += sprintf(buf, "startBlock......... %d\n", dev->startBlock);
++ buf += sprintf(buf, "endBlock........... %d\n", dev->endBlock);
++ buf += sprintf(buf, "chunkGroupBits..... %d\n", dev->chunkGroupBits);
++ buf += sprintf(buf, "chunkGroupSize..... %d\n", dev->chunkGroupSize);
++ buf += sprintf(buf, "nErasedBlocks...... %d\n", dev->nErasedBlocks);
++ buf += sprintf(buf, "nTnodesCreated..... %d\n", dev->nTnodesCreated);
++ buf += sprintf(buf, "nFreeTnodes........ %d\n", dev->nFreeTnodes);
++ buf += sprintf(buf, "nObjectsCreated.... %d\n", dev->nObjectsCreated);
++ buf += sprintf(buf, "nFreeObjects....... %d\n", dev->nFreeObjects);
++ buf += sprintf(buf, "nFreeChunks........ %d\n", dev->nFreeChunks);
++ buf += sprintf(buf, "nPageWrites........ %d\n", dev->nPageWrites);
++ buf += sprintf(buf, "nPageReads......... %d\n", dev->nPageReads);
++ buf += sprintf(buf, "nBlockErasures..... %d\n", dev->nBlockErasures);
++ buf += sprintf(buf, "nGCCopies.......... %d\n", dev->nGCCopies);
++ buf +=
++ sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
++ buf +=
++ sprintf(buf, "passiveGCs......... %d\n",
++ dev->passiveGarbageCollections);
++ buf += sprintf(buf, "nRetriedWrites..... %d\n", dev->nRetriedWrites);
++ buf += sprintf(buf, "nRetireBlocks...... %d\n", dev->nRetiredBlocks);
++ buf += sprintf(buf, "eccFixed........... %d\n", dev->eccFixed);
++ buf += sprintf(buf, "eccUnfixed......... %d\n", dev->eccUnfixed);
++ buf += sprintf(buf, "tagsEccFixed....... %d\n", dev->tagsEccFixed);
++ buf += sprintf(buf, "tagsEccUnfixed..... %d\n", dev->tagsEccUnfixed);
++ buf += sprintf(buf, "cacheHits.......... %d\n", dev->cacheHits);
++ buf += sprintf(buf, "nDeletedFiles...... %d\n", dev->nDeletedFiles);
++ buf += sprintf(buf, "nUnlinkedFiles..... %d\n", dev->nUnlinkedFiles);
++ buf +=
++ sprintf(buf, "nBackgroudDeletions %d\n", dev->nBackgroundDeletions);
++ buf += sprintf(buf, "useNANDECC......... %d\n", dev->useNANDECC);
++ buf += sprintf(buf, "isYaffs2........... %d\n", dev->isYaffs2);
++
++ return buf;
++}
++
++static int yaffs_proc_read(char *page,
++ char **start,
++ off_t offset, int count, int *eof, void *data)
++{
++ struct list_head *item;
++ char *buf = page;
++ int step = offset;
++ int n = 0;
++
++ /* Get proc_file_read() to step 'offset' by one on each sucessive call.
++ * We use 'offset' (*ppos) to indicate where we are in devList.
++ * This also assumes the user has posted a read buffer large
++ * enough to hold the complete output; but that's life in /proc.
++ */
++
++ *(int *)start = 1;
++
++ /* Print header first */
++ if (step == 0) {
++ buf += sprintf(buf, "YAFFS built:" __DATE__ " " __TIME__
++ "\n%s\n%s\n", yaffs_fs_c_version,
++ yaffs_guts_c_version);
++ }
++
++ /* hold lock_kernel while traversing yaffs_dev_list */
++ lock_kernel();
++
++ /* Locate and print the Nth entry. Order N-squared but N is small. */
++ list_for_each(item, &yaffs_dev_list) {
++ yaffs_Device *dev = list_entry(item, yaffs_Device, devList);
++ if (n < step) {
++ n++;
++ continue;
++ }
++ buf += sprintf(buf, "\nDevice %d \"%s\"\n", n, dev->name);
++ buf = yaffs_dump_dev(buf, dev);
++ break;
++ }
++ unlock_kernel();
++
++ return buf - page < count ? buf - page : count;
++}
++
++/**
++ * Set the verbosity of the warnings and error messages.
++ *
++ */
++
++static struct {
++ char *mask_name;
++ unsigned mask_bitfield;
++} mask_flags[] = {
++ {"allocate", YAFFS_TRACE_ALLOCATE},
++ {"always", YAFFS_TRACE_ALWAYS},
++ {"bad_blocks", YAFFS_TRACE_BAD_BLOCKS},
++ {"buffers", YAFFS_TRACE_BUFFERS},
++ {"bug", YAFFS_TRACE_BUG},
++ {"deletion", YAFFS_TRACE_DELETION},
++ {"erase", YAFFS_TRACE_ERASE},
++ {"error", YAFFS_TRACE_ERROR},
++ {"gc_detail", YAFFS_TRACE_GC_DETAIL},
++ {"gc", YAFFS_TRACE_GC},
++ {"mtd", YAFFS_TRACE_MTD},
++ {"nandaccess", YAFFS_TRACE_NANDACCESS},
++ {"os", YAFFS_TRACE_OS},
++ {"scan_debug", YAFFS_TRACE_SCAN_DEBUG},
++ {"scan", YAFFS_TRACE_SCAN},
++ {"tracing", YAFFS_TRACE_TRACING},
++ {"write", YAFFS_TRACE_WRITE},
++ {"all", 0xffffffff},
++ {"none", 0},
++ {NULL, 0},
++};
++
++static int yaffs_proc_write(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ unsigned rg = 0, mask_bitfield;
++ char *end, *mask_name;
++ int i;
++ int done = 0;
++ int add, len;
++ int pos = 0;
++
++ rg = yaffs_traceMask;
++
++ while (!done && (pos < count)) {
++ done = 1;
++ while ((pos < count) && isspace(buf[pos])) {
++ pos++;
++ }
++
++ switch (buf[pos]) {
++ case '+':
++ case '-':
++ case '=':
++ add = buf[pos];
++ pos++;
++ break;
++
++ default:
++ add = ' ';
++ break;
++ }
++ mask_name = NULL;
++ mask_bitfield = simple_strtoul(buf + pos, &end, 0);
++ if (end > buf + pos) {
++ mask_name = "numeral";
++ len = end - (buf + pos);
++ done = 0;
++ } else {
++
++ for (i = 0; mask_flags[i].mask_name != NULL; i++) {
++ len = strlen(mask_flags[i].mask_name);
++ if (strncmp(buf + pos, mask_flags[i].mask_name, len) == 0) {
++ mask_name = mask_flags[i].mask_name;
++ mask_bitfield = mask_flags[i].mask_bitfield;
++ done = 0;
++ break;
++ }
++ }
++ }
++
++ if (mask_name != NULL) {
++ pos += len;
++ done = 0;
++ switch(add) {
++ case '-':
++ rg &= ~mask_bitfield;
++ break;
++ case '+':
++ rg |= mask_bitfield;
++ break;
++ case '=':
++ rg = mask_bitfield;
++ break;
++ default:
++ rg |= mask_bitfield;
++ break;
++ }
++ }
++ }
++
++ yaffs_traceMask = rg;
++ if (rg & YAFFS_TRACE_ALWAYS) {
++ for (i = 0; mask_flags[i].mask_name != NULL; i++) {
++ char flag;
++ flag = ((rg & mask_flags[i].mask_bitfield) == mask_flags[i].mask_bitfield) ? '+' : '-';
++ printk("%c%s\n", flag, mask_flags[i].mask_name);
++ }
++ }
++
++ return count;
++}
++
++/* Stuff to handle installation of file systems */
++struct file_system_to_install {
++ struct file_system_type *fst;
++ int installed;
++};
++
++static struct file_system_to_install fs_to_install[] = {
++//#ifdef CONFIG_YAFFS_YAFFS1
++ {&yaffs_fs_type, 0},
++//#endif
++//#ifdef CONFIG_YAFFS_YAFFS2
++ {&yaffs2_fs_type, 0},
++//#endif
++ {NULL, 0}
++};
++
++static int __init init_yaffs_fs(void)
++{
++ int error = 0;
++ struct file_system_to_install *fsinst;
++
++ T(YAFFS_TRACE_ALWAYS,
++ ("yaffs " __DATE__ " " __TIME__ " Installing. \n"));
++
++ /* Install the proc_fs entry */
++ my_proc_entry = create_proc_entry("yaffs",
++ S_IRUGO | S_IFREG,
++ &proc_root);
++
++ if (my_proc_entry) {
++ my_proc_entry->write_proc = yaffs_proc_write;
++ my_proc_entry->read_proc = yaffs_proc_read;
++ my_proc_entry->data = NULL;
++ } else {
++ return -ENOMEM;
++ }
++
++ /* Now add the file system entries */
++
++ fsinst = fs_to_install;
++
++ while (fsinst->fst && !error) {
++ error = register_filesystem(fsinst->fst);
++ if (!error) {
++ fsinst->installed = 1;
++ }
++ fsinst++;
++ }
++
++ /* Any errors? uninstall */
++ if (error) {
++ fsinst = fs_to_install;
++
++ while (fsinst->fst) {
++ if (fsinst->installed) {
++ unregister_filesystem(fsinst->fst);
++ fsinst->installed = 0;
++ }
++ fsinst++;
++ }
++ }
++
++ return error;
++}
++
++static void __exit exit_yaffs_fs(void)
++{
++
++ struct file_system_to_install *fsinst;
++
++ T(YAFFS_TRACE_ALWAYS, ("yaffs " __DATE__ " " __TIME__
++ " removing. \n"));
++
++ remove_proc_entry("yaffs", &proc_root);
++
++ fsinst = fs_to_install;
++
++ while (fsinst->fst) {
++ if (fsinst->installed) {
++ unregister_filesystem(fsinst->fst);
++ fsinst->installed = 0;
++ }
++ fsinst++;
++ }
++
++}
++
++module_init(init_yaffs_fs)
++module_exit(exit_yaffs_fs)
++
++MODULE_DESCRIPTION("YAFFS2 - a NAND specific flash file system");
++MODULE_AUTHOR("Charles Manning, Aleph One Ltd., 2002-2006");
++MODULE_LICENSE("GPL");
+diff -urN linux.old/fs/yaffs2/yaffs_guts.c linux.dev/fs/yaffs2/yaffs_guts.c
+--- linux.old/fs/yaffs2/yaffs_guts.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_guts.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,6675 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++const char *yaffs_guts_c_version =
++ "$Id: yaffs_guts.c,v 1.45 2006/11/14 03:07:17 charles Exp $";
++
++#include "yportenv.h"
++
++#include "yaffsinterface.h"
++#include "yaffs_guts.h"
++#include "yaffs_tagsvalidity.h"
++
++#include "yaffs_tagscompat.h"
++#ifndef CONFIG_YAFFS_OWN_SORT
++#include "yaffs_qsort.h"
++#endif
++#include "yaffs_nand.h"
++
++#include "yaffs_checkptrw.h"
++
++#include "yaffs_nand.h"
++#include "yaffs_packedtags2.h"
++
++
++#ifdef CONFIG_YAFFS_WINCE
++void yfsd_LockYAFFS(BOOL fsLockOnly);
++void yfsd_UnlockYAFFS(BOOL fsLockOnly);
++#endif
++
++#define YAFFS_PASSIVE_GC_CHUNKS 2
++
++#include "yaffs_ecc.h"
++
++
++/* Robustification (if it ever comes about...) */
++static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
++static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
++static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags * tags);
++static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
++ const yaffs_ExtendedTags * tags);
++
++/* Other local prototypes */
++static int yaffs_UnlinkObject( yaffs_Object *obj);
++static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
++
++static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
++
++static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
++ const __u8 * buffer,
++ yaffs_ExtendedTags * tags,
++ int useReserve);
++static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
++ int chunkInNAND, int inScan);
++
++static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
++ yaffs_ObjectType type);
++static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
++ yaffs_Object * obj);
++static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
++ int force, int isShrink, int shadows);
++static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
++static int yaffs_CheckStructures(void);
++static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
++ int chunkOffset, int *limit);
++static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
++
++static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
++
++static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
++static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
++ int lineNo);
++
++static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND);
++
++static int yaffs_UnlinkWorker(yaffs_Object * obj);
++static void yaffs_DestroyObject(yaffs_Object * obj);
++
++static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
++ int chunkInObject);
++
++loff_t yaffs_GetFileSize(yaffs_Object * obj);
++
++static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
++
++static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
++
++#ifdef YAFFS_PARANOID
++static int yaffs_CheckFileSanity(yaffs_Object * in);
++#else
++#define yaffs_CheckFileSanity(in)
++#endif
++
++static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
++static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
++
++static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
++
++
++
++/* Function to calculate chunk and offset */
++
++static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
++{
++ if(dev->chunkShift){
++ /* Easy-peasy power of 2 case */
++ *chunk = (__u32)(addr >> dev->chunkShift);
++ *offset = (__u32)(addr & dev->chunkMask);
++ }
++ else if(dev->crumbsPerChunk)
++ {
++ /* Case where we're using "crumbs" */
++ *offset = (__u32)(addr & dev->crumbMask);
++ addr >>= dev->crumbShift;
++ *chunk = ((__u32)addr)/dev->crumbsPerChunk;
++ *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
++ }
++ else
++ YBUG();
++}
++
++/* Function to return the number of shifts for a power of 2 greater than or equal
++ * to the given number
++ * Note we don't try to cater for all possible numbers and this does not have to
++ * be hellishly efficient.
++ */
++
++static __u32 ShiftsGE(__u32 x)
++{
++ int extraBits;
++ int nShifts;
++
++ nShifts = extraBits = 0;
++
++ while(x>1){
++ if(x & 1) extraBits++;
++ x>>=1;
++ nShifts++;
++ }
++
++ if(extraBits)
++ nShifts++;
++
++ return nShifts;
++}
++
++/* Function to return the number of shifts to get a 1 in bit 0
++ */
++
++static __u32 ShiftDiv(__u32 x)
++{
++ int nShifts;
++
++ nShifts = 0;
++
++ if(!x) return 0;
++
++ while( !(x&1)){
++ x>>=1;
++ nShifts++;
++ }
++
++ return nShifts;
++}
++
++
++
++/*
++ * Temporary buffer manipulations.
++ */
++
++static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
++{
++ int i, j;
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ if (dev->tempBuffer[i].line == 0) {
++ dev->tempBuffer[i].line = lineNo;
++ if ((i + 1) > dev->maxTemp) {
++ dev->maxTemp = i + 1;
++ for (j = 0; j <= i; j++)
++ dev->tempBuffer[j].maxLine =
++ dev->tempBuffer[j].line;
++ }
++
++ return dev->tempBuffer[i].buffer;
++ }
++ }
++
++ T(YAFFS_TRACE_BUFFERS,
++ (TSTR("Out of temp buffers at line %d, other held by lines:"),
++ lineNo));
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
++ }
++ T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
++
++ /*
++ * If we got here then we have to allocate an unmanaged one
++ * This is not good.
++ */
++
++ dev->unmanagedTempAllocations++;
++ return YMALLOC(dev->nDataBytesPerChunk);
++
++}
++
++static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
++ int lineNo)
++{
++ int i;
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ if (dev->tempBuffer[i].buffer == buffer) {
++ dev->tempBuffer[i].line = 0;
++ return;
++ }
++ }
++
++ if (buffer) {
++ /* assume it is an unmanaged one. */
++ T(YAFFS_TRACE_BUFFERS,
++ (TSTR("Releasing unmanaged temp buffer in line %d" TENDSTR),
++ lineNo));
++ YFREE(buffer);
++ dev->unmanagedTempDeallocations++;
++ }
++
++}
++
++/*
++ * Determine if we have a managed buffer.
++ */
++int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
++{
++ int i;
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ if (dev->tempBuffer[i].buffer == buffer)
++ return 1;
++
++ }
++
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if( dev->srCache[i].data == buffer )
++ return 1;
++
++ }
++
++ if (buffer == dev->checkpointBuffer)
++ return 1;
++
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
++ return 0;
++}
++
++/*
++ * Chunk bitmap manipulations
++ */
++
++static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
++{
++ if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
++ blk));
++ YBUG();
++ }
++ return dev->chunkBits +
++ (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
++}
++
++static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
++{
++ __u8 *blkBits = yaffs_BlockBits(dev, blk);
++
++ memset(blkBits, 0, dev->chunkBitmapStride);
++}
++
++static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
++{
++ __u8 *blkBits = yaffs_BlockBits(dev, blk);
++
++ blkBits[chunk / 8] &= ~(1 << (chunk & 7));
++}
++
++static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
++{
++ __u8 *blkBits = yaffs_BlockBits(dev, blk);
++
++ blkBits[chunk / 8] |= (1 << (chunk & 7));
++}
++
++static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
++{
++ __u8 *blkBits = yaffs_BlockBits(dev, blk);
++ return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
++}
++
++static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
++{
++ __u8 *blkBits = yaffs_BlockBits(dev, blk);
++ int i;
++ for (i = 0; i < dev->chunkBitmapStride; i++) {
++ if (*blkBits)
++ return 1;
++ blkBits++;
++ }
++ return 0;
++}
++
++/*
++ * Simple hash function. Needs to have a reasonable spread
++ */
++
++static Y_INLINE int yaffs_HashFunction(int n)
++{
++ n = abs(n);
++ return (n % YAFFS_NOBJECT_BUCKETS);
++}
++
++/*
++ * Access functions to useful fake objects
++ */
++
++yaffs_Object *yaffs_Root(yaffs_Device * dev)
++{
++ return dev->rootDir;
++}
++
++yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
++{
++ return dev->lostNFoundDir;
++}
++
++
++/*
++ * Erased NAND checking functions
++ */
++
++int yaffs_CheckFF(__u8 * buffer, int nBytes)
++{
++ /* Horrible, slow implementation */
++ while (nBytes--) {
++ if (*buffer != 0xFF)
++ return 0;
++ buffer++;
++ }
++ return 1;
++}
++
++static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND)
++{
++
++ int retval = YAFFS_OK;
++ __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
++ yaffs_ExtendedTags tags;
++ int result;
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
++
++ if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
++ retval = YAFFS_FAIL;
++
++
++ if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
++ T(YAFFS_TRACE_NANDACCESS,
++ (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
++ retval = YAFFS_FAIL;
++ }
++
++ yaffs_ReleaseTempBuffer(dev, data, __LINE__);
++
++ return retval;
++
++}
++
++static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
++ const __u8 * data,
++ yaffs_ExtendedTags * tags,
++ int useReserve)
++{
++ int chunk;
++
++ int writeOk = 0;
++ int erasedOk = 1;
++ int attempts = 0;
++ yaffs_BlockInfo *bi;
++
++ yaffs_InvalidateCheckpoint(dev);
++
++ do {
++ chunk = yaffs_AllocateChunk(dev, useReserve,&bi);
++
++ if (chunk >= 0) {
++ /* First check this chunk is erased, if it needs checking.
++ * The checking policy (unless forced always on) is as follows:
++ * Check the first page we try to write in a block.
++ * - If the check passes then we don't need to check any more.
++ * - If the check fails, we check again...
++ * If the block has been erased, we don't need to check.
++ *
++ * However, if the block has been prioritised for gc, then
++ * we think there might be something odd about this block
++ * and stop using it.
++ *
++ * Rationale:
++ * We should only ever see chunks that have not been erased
++ * if there was a partially written chunk due to power loss
++ * This checking policy should catch that case with very
++ * few checks and thus save a lot of checks that are most likely not
++ * needed.
++ */
++
++ if(bi->gcPrioritise){
++ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
++ } else {
++#ifdef CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED
++
++ bi->skipErasedCheck = 0;
++
++#endif
++ if(!bi->skipErasedCheck){
++ erasedOk = yaffs_CheckChunkErased(dev, chunk);
++ if(erasedOk && !bi->gcPrioritise)
++ bi->skipErasedCheck = 1;
++ }
++
++ if (!erasedOk) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>> yaffs chunk %d was not erased"
++ TENDSTR), chunk));
++ } else {
++ writeOk =
++ yaffs_WriteChunkWithTagsToNAND(dev, chunk,
++ data, tags);
++ }
++
++ attempts++;
++
++ if (writeOk) {
++ /*
++ * Copy the data into the robustification buffer.
++ * NB We do this at the end to prevent duplicates in the case of a write error.
++ * Todo
++ */
++ yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
++
++ } else {
++ /* The erased check or write failed */
++ yaffs_HandleWriteChunkError(dev, chunk, erasedOk);
++ }
++ }
++ }
++
++ } while (chunk >= 0 && !writeOk);
++
++ if (attempts > 1) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("**>> yaffs write required %d attempts" TENDSTR),
++ attempts));
++ dev->nRetriedWrites += (attempts - 1);
++ }
++
++ return chunk;
++}
++
++/*
++ * Block retiring for handling a broken block.
++ */
++
++static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
++{
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
++
++ yaffs_InvalidateCheckpoint(dev);
++
++ yaffs_MarkBlockBad(dev, blockInNAND);
++
++ bi->blockState = YAFFS_BLOCK_STATE_DEAD;
++ bi->gcPrioritise = 0;
++ bi->needsRetiring = 0;
++
++ dev->nRetiredBlocks++;
++}
++
++/*
++ * Functions for robustisizing TODO
++ *
++ */
++
++static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags * tags)
++{
++}
++
++static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
++ const yaffs_ExtendedTags * tags)
++{
++}
++
++void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
++{
++ if(!bi->gcPrioritise){
++ bi->gcPrioritise = 1;
++ dev->hasPendingPrioritisedGCs = 1;
++ bi->chunkErrorStrikes ++;
++
++ if(bi->chunkErrorStrikes > 3){
++ bi->needsRetiring = 1; /* Too many stikes, so retire this */
++ T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
++
++ }
++
++ }
++}
++
++static void yaffs_ReportOddballBlocks(yaffs_Device *dev)
++{
++ int i;
++
++ for(i = dev->internalStartBlock; i <= dev->internalEndBlock && (yaffs_traceMask & YAFFS_TRACE_BAD_BLOCKS); i++){
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
++ if(bi->needsRetiring || bi->gcPrioritise)
++ T(YAFFS_TRACE_BAD_BLOCKS,(TSTR("yaffs block %d%s%s" TENDSTR),
++ i,
++ bi->needsRetiring ? " needs retiring" : "",
++ bi->gcPrioritise ? " gc prioritised" : ""));
++
++ }
++}
++
++static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
++{
++
++ int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
++
++ yaffs_HandleChunkError(dev,bi);
++
++
++ if(erasedOk ) {
++ /* Was an actual write failure, so mark the block for retirement */
++ bi->needsRetiring = 1;
++ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
++
++
++ }
++
++ /* Delete the chunk */
++ yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
++}
++
++
++/*---------------- Name handling functions ------------*/
++
++static __u16 yaffs_CalcNameSum(const YCHAR * name)
++{
++ __u16 sum = 0;
++ __u16 i = 1;
++
++ YUCHAR *bname = (YUCHAR *) name;
++ if (bname) {
++ while ((*bname) && (i <= YAFFS_MAX_NAME_LENGTH)) {
++
++#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
++ sum += yaffs_toupper(*bname) * i;
++#else
++ sum += (*bname) * i;
++#endif
++ i++;
++ bname++;
++ }
++ }
++ return sum;
++}
++
++static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
++{
++#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
++ if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
++ yaffs_strcpy(obj->shortName, name);
++ } else {
++ obj->shortName[0] = _Y('\0');
++ }
++#endif
++ obj->sum = yaffs_CalcNameSum(name);
++}
++
++/*-------------------- TNODES -------------------
++
++ * List of spare tnodes
++ * The list is hooked together using the first pointer
++ * in the tnode.
++ */
++
++/* yaffs_CreateTnodes creates a bunch more tnodes and
++ * adds them to the tnode free list.
++ * Don't use this function directly
++ */
++
++static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
++{
++ int i;
++ int tnodeSize;
++ yaffs_Tnode *newTnodes;
++ __u8 *mem;
++ yaffs_Tnode *curr;
++ yaffs_Tnode *next;
++ yaffs_TnodeList *tnl;
++
++ if (nTnodes < 1)
++ return YAFFS_OK;
++
++ /* Calculate the tnode size in bytes for variable width tnode support.
++ * Must be a multiple of 32-bits */
++ tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
++
++ /* make these things */
++
++ newTnodes = YMALLOC(nTnodes * tnodeSize);
++ mem = (__u8 *)newTnodes;
++
++ if (!newTnodes) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ /* Hook them into the free list */
++#if 0
++ for (i = 0; i < nTnodes - 1; i++) {
++ newTnodes[i].internal[0] = &newTnodes[i + 1];
++#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ newTnodes[i].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
++#endif
++ }
++
++ newTnodes[nTnodes - 1].internal[0] = dev->freeTnodes;
++#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ newTnodes[nTnodes - 1].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
++#endif
++ dev->freeTnodes = newTnodes;
++#else
++ /* New hookup for wide tnodes */
++ for(i = 0; i < nTnodes -1; i++) {
++ curr = (yaffs_Tnode *) &mem[i * tnodeSize];
++ next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
++ curr->internal[0] = next;
++ }
++
++ curr = (yaffs_Tnode *) &mem[(nTnodes - 1) * tnodeSize];
++ curr->internal[0] = dev->freeTnodes;
++ dev->freeTnodes = (yaffs_Tnode *)mem;
++
++#endif
++
++
++ dev->nFreeTnodes += nTnodes;
++ dev->nTnodesCreated += nTnodes;
++
++ /* Now add this bunch of tnodes to a list for freeing up.
++ * NB If we can't add this to the management list it isn't fatal
++ * but it just means we can't free this bunch of tnodes later.
++ */
++
++ tnl = YMALLOC(sizeof(yaffs_TnodeList));
++ if (!tnl) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs: Could not add tnodes to management list" TENDSTR)));
++
++ } else {
++ tnl->tnodes = newTnodes;
++ tnl->next = dev->allocatedTnodeList;
++ dev->allocatedTnodeList = tnl;
++ }
++
++ T(YAFFS_TRACE_ALLOCATE, (TSTR("yaffs: Tnodes added" TENDSTR)));
++
++ return YAFFS_OK;
++}
++
++/* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
++
++static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
++{
++ yaffs_Tnode *tn = NULL;
++
++ /* If there are none left make more */
++ if (!dev->freeTnodes) {
++ yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
++ }
++
++ if (dev->freeTnodes) {
++ tn = dev->freeTnodes;
++#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ if (tn->internal[YAFFS_NTNODES_INTERNAL] != (void *)1) {
++ /* Hoosterman, this thing looks like it isn't in the list */
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: Tnode list bug 1" TENDSTR)));
++ }
++#endif
++ dev->freeTnodes = dev->freeTnodes->internal[0];
++ dev->nFreeTnodes--;
++ }
++
++ return tn;
++}
++
++static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
++{
++ yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
++
++ if(tn)
++ memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
++
++ return tn;
++}
++
++/* FreeTnode frees up a tnode and puts it back on the free list */
++static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
++{
++ if (tn) {
++#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ if (tn->internal[YAFFS_NTNODES_INTERNAL] != 0) {
++ /* Hoosterman, this thing looks like it is already in the list */
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: Tnode list bug 2" TENDSTR)));
++ }
++ tn->internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
++#endif
++ tn->internal[0] = dev->freeTnodes;
++ dev->freeTnodes = tn;
++ dev->nFreeTnodes++;
++ }
++}
++
++static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
++{
++ /* Free the list of allocated tnodes */
++ yaffs_TnodeList *tmp;
++
++ while (dev->allocatedTnodeList) {
++ tmp = dev->allocatedTnodeList->next;
++
++ YFREE(dev->allocatedTnodeList->tnodes);
++ YFREE(dev->allocatedTnodeList);
++ dev->allocatedTnodeList = tmp;
++
++ }
++
++ dev->freeTnodes = NULL;
++ dev->nFreeTnodes = 0;
++}
++
++static void yaffs_InitialiseTnodes(yaffs_Device * dev)
++{
++ dev->allocatedTnodeList = NULL;
++ dev->freeTnodes = NULL;
++ dev->nFreeTnodes = 0;
++ dev->nTnodesCreated = 0;
++
++}
++
++
++void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
++{
++ __u32 *map = (__u32 *)tn;
++ __u32 bitInMap;
++ __u32 bitInWord;
++ __u32 wordInMap;
++ __u32 mask;
++
++ pos &= YAFFS_TNODES_LEVEL0_MASK;
++ val >>= dev->chunkGroupBits;
++
++ bitInMap = pos * dev->tnodeWidth;
++ wordInMap = bitInMap /32;
++ bitInWord = bitInMap & (32 -1);
++
++ mask = dev->tnodeMask << bitInWord;
++
++ map[wordInMap] &= ~mask;
++ map[wordInMap] |= (mask & (val << bitInWord));
++
++ if(dev->tnodeWidth > (32-bitInWord)) {
++ bitInWord = (32 - bitInWord);
++ wordInMap++;;
++ mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
++ map[wordInMap] &= ~mask;
++ map[wordInMap] |= (mask & (val >> bitInWord));
++ }
++}
++
++__u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
++{
++ __u32 *map = (__u32 *)tn;
++ __u32 bitInMap;
++ __u32 bitInWord;
++ __u32 wordInMap;
++ __u32 val;
++
++ pos &= YAFFS_TNODES_LEVEL0_MASK;
++
++ bitInMap = pos * dev->tnodeWidth;
++ wordInMap = bitInMap /32;
++ bitInWord = bitInMap & (32 -1);
++
++ val = map[wordInMap] >> bitInWord;
++
++ if(dev->tnodeWidth > (32-bitInWord)) {
++ bitInWord = (32 - bitInWord);
++ wordInMap++;;
++ val |= (map[wordInMap] << bitInWord);
++ }
++
++ val &= dev->tnodeMask;
++ val <<= dev->chunkGroupBits;
++
++ return val;
++}
++
++/* ------------------- End of individual tnode manipulation -----------------*/
++
++/* ---------Functions to manipulate the look-up tree (made up of tnodes) ------
++ * The look up tree is represented by the top tnode and the number of topLevel
++ * in the tree. 0 means only the level 0 tnode is in the tree.
++ */
++
++/* FindLevel0Tnode finds the level 0 tnode, if one exists. */
++static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
++ yaffs_FileStructure * fStruct,
++ __u32 chunkId)
++{
++
++ yaffs_Tnode *tn = fStruct->top;
++ __u32 i;
++ int requiredTallness;
++ int level = fStruct->topLevel;
++
++ /* Check sane level and chunk Id */
++ if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
++ return NULL;
++ }
++
++ if (chunkId > YAFFS_MAX_CHUNK_ID) {
++ return NULL;
++ }
++
++ /* First check we're tall enough (ie enough topLevel) */
++
++ i = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
++ requiredTallness = 0;
++ while (i) {
++ i >>= YAFFS_TNODES_INTERNAL_BITS;
++ requiredTallness++;
++ }
++
++ if (requiredTallness > fStruct->topLevel) {
++ /* Not tall enough, so we can't find it, return NULL. */
++ return NULL;
++ }
++
++ /* Traverse down to level 0 */
++ while (level > 0 && tn) {
++ tn = tn->
++ internal[(chunkId >>
++ ( YAFFS_TNODES_LEVEL0_BITS +
++ (level - 1) *
++ YAFFS_TNODES_INTERNAL_BITS)
++ ) &
++ YAFFS_TNODES_INTERNAL_MASK];
++ level--;
++
++ }
++
++ return tn;
++}
++
++/* AddOrFindLevel0Tnode finds the level 0 tnode if it exists, otherwise first expands the tree.
++ * This happens in two steps:
++ * 1. If the tree isn't tall enough, then make it taller.
++ * 2. Scan down the tree towards the level 0 tnode adding tnodes if required.
++ *
++ * Used when modifying the tree.
++ *
++ * If the tn argument is NULL, then a fresh tnode will be added otherwise the specified tn will
++ * be plugged into the ttree.
++ */
++
++static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
++ yaffs_FileStructure * fStruct,
++ __u32 chunkId,
++ yaffs_Tnode *passedTn)
++{
++
++ int requiredTallness;
++ int i;
++ int l;
++ yaffs_Tnode *tn;
++
++ __u32 x;
++
++
++ /* Check sane level and page Id */
++ if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
++ return NULL;
++ }
++
++ if (chunkId > YAFFS_MAX_CHUNK_ID) {
++ return NULL;
++ }
++
++ /* First check we're tall enough (ie enough topLevel) */
++
++ x = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
++ requiredTallness = 0;
++ while (x) {
++ x >>= YAFFS_TNODES_INTERNAL_BITS;
++ requiredTallness++;
++ }
++
++
++ if (requiredTallness > fStruct->topLevel) {
++ /* Not tall enough,gotta make the tree taller */
++ for (i = fStruct->topLevel; i < requiredTallness; i++) {
++
++ tn = yaffs_GetTnode(dev);
++
++ if (tn) {
++ tn->internal[0] = fStruct->top;
++ fStruct->top = tn;
++ } else {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("yaffs: no more tnodes" TENDSTR)));
++ }
++ }
++
++ fStruct->topLevel = requiredTallness;
++ }
++
++ /* Traverse down to level 0, adding anything we need */
++
++ l = fStruct->topLevel;
++ tn = fStruct->top;
++
++ if(l > 0) {
++ while (l > 0 && tn) {
++ x = (chunkId >>
++ ( YAFFS_TNODES_LEVEL0_BITS +
++ (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
++ YAFFS_TNODES_INTERNAL_MASK;
++
++
++ if((l>1) && !tn->internal[x]){
++ /* Add missing non-level-zero tnode */
++ tn->internal[x] = yaffs_GetTnode(dev);
++
++ } else if(l == 1) {
++ /* Looking from level 1 at level 0 */
++ if (passedTn) {
++ /* If we already have one, then release it.*/
++ if(tn->internal[x])
++ yaffs_FreeTnode(dev,tn->internal[x]);
++ tn->internal[x] = passedTn;
++
++ } else if(!tn->internal[x]) {
++ /* Don't have one, none passed in */
++ tn->internal[x] = yaffs_GetTnode(dev);
++ }
++ }
++
++ tn = tn->internal[x];
++ l--;
++ }
++ } else {
++ /* top is level 0 */
++ if(passedTn) {
++ memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
++ yaffs_FreeTnode(dev,passedTn);
++ }
++ }
++
++ return tn;
++}
++
++static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
++ yaffs_ExtendedTags * tags, int objectId,
++ int chunkInInode)
++{
++ int j;
++
++ for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
++ if (yaffs_CheckChunkBit
++ (dev, theChunk / dev->nChunksPerBlock,
++ theChunk % dev->nChunksPerBlock)) {
++ yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
++ tags);
++ if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
++ /* found it; */
++ return theChunk;
++
++ }
++ }
++ theChunk++;
++ }
++ return -1;
++}
++
++
++/* DeleteWorker scans backwards through the tnode tree and deletes all the
++ * chunks and tnodes in the file
++ * Returns 1 if the tree was deleted.
++ * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
++ */
++
++static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
++ int chunkOffset, int *limit)
++{
++ int i;
++ int chunkInInode;
++ int theChunk;
++ yaffs_ExtendedTags tags;
++ int foundChunk;
++ yaffs_Device *dev = in->myDev;
++
++ int allDone = 1;
++
++ if (tn) {
++ if (level > 0) {
++
++ for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
++ i--) {
++ if (tn->internal[i]) {
++ if (limit && (*limit) < 0) {
++ allDone = 0;
++ } else {
++ allDone =
++ yaffs_DeleteWorker(in,
++ tn->
++ internal
++ [i],
++ level -
++ 1,
++ (chunkOffset
++ <<
++ YAFFS_TNODES_INTERNAL_BITS)
++ + i,
++ limit);
++ }
++ if (allDone) {
++ yaffs_FreeTnode(dev,
++ tn->
++ internal[i]);
++ tn->internal[i] = NULL;
++ }
++ }
++
++ }
++ return (allDone) ? 1 : 0;
++ } else if (level == 0) {
++ int hitLimit = 0;
++
++ for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
++ i--) {
++ theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
++ if (theChunk) {
++
++ chunkInInode =
++ (chunkOffset <<
++ YAFFS_TNODES_LEVEL0_BITS) + i;
++
++ foundChunk =
++ yaffs_FindChunkInGroup(dev,
++ theChunk,
++ &tags,
++ in->objectId,
++ chunkInInode);
++
++ if (foundChunk > 0) {
++ yaffs_DeleteChunk(dev,
++ foundChunk, 1,
++ __LINE__);
++ in->nDataChunks--;
++ if (limit) {
++ *limit = *limit - 1;
++ if (*limit <= 0) {
++ hitLimit = 1;
++ }
++ }
++
++ }
++
++ yaffs_PutLevel0Tnode(dev,tn,i,0);
++ }
++
++ }
++ return (i < 0) ? 1 : 0;
++
++ }
++
++ }
++
++ return 1;
++
++}
++
++static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
++{
++
++ yaffs_BlockInfo *theBlock;
++
++ T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
++
++ theBlock = yaffs_GetBlockInfo(dev, chunk / dev->nChunksPerBlock);
++ if (theBlock) {
++ theBlock->softDeletions++;
++ dev->nFreeChunks++;
++ }
++}
++
++/* SoftDeleteWorker scans backwards through the tnode tree and soft deletes all the chunks in the file.
++ * All soft deleting does is increment the block's softdelete count and pulls the chunk out
++ * of the tnode.
++ * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
++ */
++
++static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
++ __u32 level, int chunkOffset)
++{
++ int i;
++ int theChunk;
++ int allDone = 1;
++ yaffs_Device *dev = in->myDev;
++
++ if (tn) {
++ if (level > 0) {
++
++ for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
++ i--) {
++ if (tn->internal[i]) {
++ allDone =
++ yaffs_SoftDeleteWorker(in,
++ tn->
++ internal[i],
++ level - 1,
++ (chunkOffset
++ <<
++ YAFFS_TNODES_INTERNAL_BITS)
++ + i);
++ if (allDone) {
++ yaffs_FreeTnode(dev,
++ tn->
++ internal[i]);
++ tn->internal[i] = NULL;
++ } else {
++ /* Hoosterman... how could this happen? */
++ }
++ }
++ }
++ return (allDone) ? 1 : 0;
++ } else if (level == 0) {
++
++ for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
++ theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
++ if (theChunk) {
++ /* Note this does not find the real chunk, only the chunk group.
++ * We make an assumption that a chunk group is not larger than
++ * a block.
++ */
++ yaffs_SoftDeleteChunk(dev, theChunk);
++ yaffs_PutLevel0Tnode(dev,tn,i,0);
++ }
++
++ }
++ return 1;
++
++ }
++
++ }
++
++ return 1;
++
++}
++
++static void yaffs_SoftDeleteFile(yaffs_Object * obj)
++{
++ if (obj->deleted &&
++ obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
++ if (obj->nDataChunks <= 0) {
++ /* Empty file with no duplicate object headers, just delete it immediately */
++ yaffs_FreeTnode(obj->myDev,
++ obj->variant.fileVariant.top);
++ obj->variant.fileVariant.top = NULL;
++ T(YAFFS_TRACE_TRACING,
++ (TSTR("yaffs: Deleting empty file %d" TENDSTR),
++ obj->objectId));
++ yaffs_DoGenericObjectDeletion(obj);
++ } else {
++ yaffs_SoftDeleteWorker(obj,
++ obj->variant.fileVariant.top,
++ obj->variant.fileVariant.
++ topLevel, 0);
++ obj->softDeleted = 1;
++ }
++ }
++}
++
++/* Pruning removes any part of the file structure tree that is beyond the
++ * bounds of the file (ie that does not point to chunks).
++ *
++ * A file should only get pruned when its size is reduced.
++ *
++ * Before pruning, the chunks must be pulled from the tree and the
++ * level 0 tnode entries must be zeroed out.
++ * Could also use this for file deletion, but that's probably better handled
++ * by a special case.
++ */
++
++static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
++ __u32 level, int del0)
++{
++ int i;
++ int hasData;
++
++ if (tn) {
++ hasData = 0;
++
++ for (i = 0; i < YAFFS_NTNODES_INTERNAL; i++) {
++ if (tn->internal[i] && level > 0) {
++ tn->internal[i] =
++ yaffs_PruneWorker(dev, tn->internal[i],
++ level - 1,
++ (i == 0) ? del0 : 1);
++ }
++
++ if (tn->internal[i]) {
++ hasData++;
++ }
++ }
++
++ if (hasData == 0 && del0) {
++ /* Free and return NULL */
++
++ yaffs_FreeTnode(dev, tn);
++ tn = NULL;
++ }
++
++ }
++
++ return tn;
++
++}
++
++static int yaffs_PruneFileStructure(yaffs_Device * dev,
++ yaffs_FileStructure * fStruct)
++{
++ int i;
++ int hasData;
++ int done = 0;
++ yaffs_Tnode *tn;
++
++ if (fStruct->topLevel > 0) {
++ fStruct->top =
++ yaffs_PruneWorker(dev, fStruct->top, fStruct->topLevel, 0);
++
++ /* Now we have a tree with all the non-zero branches NULL but the height
++ * is the same as it was.
++ * Let's see if we can trim internal tnodes to shorten the tree.
++ * We can do this if only the 0th element in the tnode is in use
++ * (ie all the non-zero are NULL)
++ */
++
++ while (fStruct->topLevel && !done) {
++ tn = fStruct->top;
++
++ hasData = 0;
++ for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
++ if (tn->internal[i]) {
++ hasData++;
++ }
++ }
++
++ if (!hasData) {
++ fStruct->top = tn->internal[0];
++ fStruct->topLevel--;
++ yaffs_FreeTnode(dev, tn);
++ } else {
++ done = 1;
++ }
++ }
++ }
++
++ return YAFFS_OK;
++}
++
++/*-------------------- End of File Structure functions.-------------------*/
++
++/* yaffs_CreateFreeObjects creates a bunch more objects and
++ * adds them to the object free list.
++ */
++static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
++{
++ int i;
++ yaffs_Object *newObjects;
++ yaffs_ObjectList *list;
++
++ if (nObjects < 1)
++ return YAFFS_OK;
++
++ /* make these things */
++ newObjects = YMALLOC(nObjects * sizeof(yaffs_Object));
++
++ if (!newObjects) {
++ T(YAFFS_TRACE_ALLOCATE,
++ (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ /* Hook them into the free list */
++ for (i = 0; i < nObjects - 1; i++) {
++ newObjects[i].siblings.next =
++ (struct list_head *)(&newObjects[i + 1]);
++ }
++
++ newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
++ dev->freeObjects = newObjects;
++ dev->nFreeObjects += nObjects;
++ dev->nObjectsCreated += nObjects;
++
++ /* Now add this bunch of Objects to a list for freeing up. */
++
++ list = YMALLOC(sizeof(yaffs_ObjectList));
++ if (!list) {
++ T(YAFFS_TRACE_ALLOCATE,
++ (TSTR("Could not add objects to management list" TENDSTR)));
++ } else {
++ list->objects = newObjects;
++ list->next = dev->allocatedObjectList;
++ dev->allocatedObjectList = list;
++ }
++
++ return YAFFS_OK;
++}
++
++
++/* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
++static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
++{
++ yaffs_Object *tn = NULL;
++
++ /* If there are none left make more */
++ if (!dev->freeObjects) {
++ yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
++ }
++
++ if (dev->freeObjects) {
++ tn = dev->freeObjects;
++ dev->freeObjects =
++ (yaffs_Object *) (dev->freeObjects->siblings.next);
++ dev->nFreeObjects--;
++
++ /* Now sweeten it up... */
++
++ memset(tn, 0, sizeof(yaffs_Object));
++ tn->myDev = dev;
++ tn->chunkId = -1;
++ tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
++ INIT_LIST_HEAD(&(tn->hardLinks));
++ INIT_LIST_HEAD(&(tn->hashLink));
++ INIT_LIST_HEAD(&tn->siblings);
++
++ /* Add it to the lost and found directory.
++ * NB Can't put root or lostNFound in lostNFound so
++ * check if lostNFound exists first
++ */
++ if (dev->lostNFoundDir) {
++ yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
++ }
++ }
++
++ return tn;
++}
++
++static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
++ __u32 mode)
++{
++
++ yaffs_Object *obj =
++ yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
++ if (obj) {
++ obj->fake = 1; /* it is fake so it has no NAND presence... */
++ obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
++ obj->unlinkAllowed = 0; /* ... or unlink it */
++ obj->deleted = 0;
++ obj->unlinked = 0;
++ obj->yst_mode = mode;
++ obj->myDev = dev;
++ obj->chunkId = 0; /* Not a valid chunk. */
++ }
++
++ return obj;
++
++}
++
++static void yaffs_UnhashObject(yaffs_Object * tn)
++{
++ int bucket;
++ yaffs_Device *dev = tn->myDev;
++
++ /* If it is still linked into the bucket list, free from the list */
++ if (!list_empty(&tn->hashLink)) {
++ list_del_init(&tn->hashLink);
++ bucket = yaffs_HashFunction(tn->objectId);
++ dev->objectBucket[bucket].count--;
++ }
++
++}
++
++/* FreeObject frees up a Object and puts it back on the free list */
++static void yaffs_FreeObject(yaffs_Object * tn)
++{
++
++ yaffs_Device *dev = tn->myDev;
++
++#ifdef __KERNEL__
++ if (tn->myInode) {
++ /* We're still hooked up to a cached inode.
++ * Don't delete now, but mark for later deletion
++ */
++ tn->deferedFree = 1;
++ return;
++ }
++#endif
++
++ yaffs_UnhashObject(tn);
++
++ /* Link into the free list. */
++ tn->siblings.next = (struct list_head *)(dev->freeObjects);
++ dev->freeObjects = tn;
++ dev->nFreeObjects++;
++}
++
++#ifdef __KERNEL__
++
++void yaffs_HandleDeferedFree(yaffs_Object * obj)
++{
++ if (obj->deferedFree) {
++ yaffs_FreeObject(obj);
++ }
++}
++
++#endif
++
++static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
++{
++ /* Free the list of allocated Objects */
++
++ yaffs_ObjectList *tmp;
++
++ while (dev->allocatedObjectList) {
++ tmp = dev->allocatedObjectList->next;
++ YFREE(dev->allocatedObjectList->objects);
++ YFREE(dev->allocatedObjectList);
++
++ dev->allocatedObjectList = tmp;
++ }
++
++ dev->freeObjects = NULL;
++ dev->nFreeObjects = 0;
++}
++
++static void yaffs_InitialiseObjects(yaffs_Device * dev)
++{
++ int i;
++
++ dev->allocatedObjectList = NULL;
++ dev->freeObjects = NULL;
++ dev->nFreeObjects = 0;
++
++ for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
++ INIT_LIST_HEAD(&dev->objectBucket[i].list);
++ dev->objectBucket[i].count = 0;
++ }
++
++}
++
++static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
++{
++ static int x = 0;
++ int i;
++ int l = 999;
++ int lowest = 999999;
++
++ /* First let's see if we can find one that's empty. */
++
++ for (i = 0; i < 10 && lowest > 0; i++) {
++ x++;
++ x %= YAFFS_NOBJECT_BUCKETS;
++ if (dev->objectBucket[x].count < lowest) {
++ lowest = dev->objectBucket[x].count;
++ l = x;
++ }
++
++ }
++
++ /* If we didn't find an empty list, then try
++ * looking a bit further for a short one
++ */
++
++ for (i = 0; i < 10 && lowest > 3; i++) {
++ x++;
++ x %= YAFFS_NOBJECT_BUCKETS;
++ if (dev->objectBucket[x].count < lowest) {
++ lowest = dev->objectBucket[x].count;
++ l = x;
++ }
++
++ }
++
++ return l;
++}
++
++static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
++{
++ int bucket = yaffs_FindNiceObjectBucket(dev);
++
++ /* Now find an object value that has not already been taken
++ * by scanning the list.
++ */
++
++ int found = 0;
++ struct list_head *i;
++
++ __u32 n = (__u32) bucket;
++
++ /* yaffs_CheckObjectHashSanity(); */
++
++ while (!found) {
++ found = 1;
++ n += YAFFS_NOBJECT_BUCKETS;
++ if (1 || dev->objectBucket[bucket].count > 0) {
++ list_for_each(i, &dev->objectBucket[bucket].list) {
++ /* If there is already one in the list */
++ if (i
++ && list_entry(i, yaffs_Object,
++ hashLink)->objectId == n) {
++ found = 0;
++ }
++ }
++ }
++ }
++
++
++ return n;
++}
++
++static void yaffs_HashObject(yaffs_Object * in)
++{
++ int bucket = yaffs_HashFunction(in->objectId);
++ yaffs_Device *dev = in->myDev;
++
++ list_add(&in->hashLink, &dev->objectBucket[bucket].list);
++ dev->objectBucket[bucket].count++;
++
++}
++
++yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
++{
++ int bucket = yaffs_HashFunction(number);
++ struct list_head *i;
++ yaffs_Object *in;
++
++ list_for_each(i, &dev->objectBucket[bucket].list) {
++ /* Look if it is in the list */
++ if (i) {
++ in = list_entry(i, yaffs_Object, hashLink);
++ if (in->objectId == number) {
++#ifdef __KERNEL__
++ /* Don't tell the VFS about this one if it is defered free */
++ if (in->deferedFree)
++ return NULL;
++#endif
++
++ return in;
++ }
++ }
++ }
++
++ return NULL;
++}
++
++yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
++ yaffs_ObjectType type)
++{
++
++ yaffs_Object *theObject;
++
++ if (number < 0) {
++ number = yaffs_CreateNewObjectNumber(dev);
++ }
++
++ theObject = yaffs_AllocateEmptyObject(dev);
++
++ if (theObject) {
++ theObject->fake = 0;
++ theObject->renameAllowed = 1;
++ theObject->unlinkAllowed = 1;
++ theObject->objectId = number;
++ yaffs_HashObject(theObject);
++ theObject->variantType = type;
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_WinFileTimeNow(theObject->win_atime);
++ theObject->win_ctime[0] = theObject->win_mtime[0] =
++ theObject->win_atime[0];
++ theObject->win_ctime[1] = theObject->win_mtime[1] =
++ theObject->win_atime[1];
++
++#else
++
++ theObject->yst_atime = theObject->yst_mtime =
++ theObject->yst_ctime = Y_CURRENT_TIME;
++#endif
++ switch (type) {
++ case YAFFS_OBJECT_TYPE_FILE:
++ theObject->variant.fileVariant.fileSize = 0;
++ theObject->variant.fileVariant.scannedFileSize = 0;
++ theObject->variant.fileVariant.shrinkSize = 0xFFFFFFFF; /* max __u32 */
++ theObject->variant.fileVariant.topLevel = 0;
++ theObject->variant.fileVariant.top =
++ yaffs_GetTnode(dev);
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ INIT_LIST_HEAD(&theObject->variant.directoryVariant.
++ children);
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ /* No action required */
++ break;
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ /* todo this should not happen */
++ break;
++ }
++ }
++
++ return theObject;
++}
++
++static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
++ int number,
++ yaffs_ObjectType type)
++{
++ yaffs_Object *theObject = NULL;
++
++ if (number > 0) {
++ theObject = yaffs_FindObjectByNumber(dev, number);
++ }
++
++ if (!theObject) {
++ theObject = yaffs_CreateNewObject(dev, number, type);
++ }
++
++ return theObject;
++
++}
++
++
++static YCHAR *yaffs_CloneString(const YCHAR * str)
++{
++ YCHAR *newStr = NULL;
++
++ if (str && *str) {
++ newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
++ yaffs_strcpy(newStr, str);
++ }
++
++ return newStr;
++
++}
++
++/*
++ * Mknod (create) a new object.
++ * equivalentObject only has meaning for a hard link;
++ * aliasString only has meaning for a sumlink.
++ * rdev only has meaning for devices (a subset of special objects)
++ */
++
++static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
++ yaffs_Object * parent,
++ const YCHAR * name,
++ __u32 mode,
++ __u32 uid,
++ __u32 gid,
++ yaffs_Object * equivalentObject,
++ const YCHAR * aliasString, __u32 rdev)
++{
++ yaffs_Object *in;
++
++ yaffs_Device *dev = parent->myDev;
++
++ /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
++ if (yaffs_FindObjectByName(parent, name)) {
++ return NULL;
++ }
++
++ in = yaffs_CreateNewObject(dev, -1, type);
++
++ if (in) {
++ in->chunkId = -1;
++ in->valid = 1;
++ in->variantType = type;
++
++ in->yst_mode = mode;
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_WinFileTimeNow(in->win_atime);
++ in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
++ in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
++
++#else
++ in->yst_atime = in->yst_mtime = in->yst_ctime = Y_CURRENT_TIME;
++
++ in->yst_rdev = rdev;
++ in->yst_uid = uid;
++ in->yst_gid = gid;
++#endif
++ in->nDataChunks = 0;
++
++ yaffs_SetObjectName(in, name);
++ in->dirty = 1;
++
++ yaffs_AddObjectToDirectory(parent, in);
++
++ in->myDev = parent->myDev;
++
++ switch (type) {
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ in->variant.symLinkVariant.alias =
++ yaffs_CloneString(aliasString);
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ in->variant.hardLinkVariant.equivalentObject =
++ equivalentObject;
++ in->variant.hardLinkVariant.equivalentObjectId =
++ equivalentObject->objectId;
++ list_add(&in->hardLinks, &equivalentObject->hardLinks);
++ break;
++ case YAFFS_OBJECT_TYPE_FILE:
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ /* do nothing */
++ break;
++ }
++
++ if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
++ /* Could not create the object header, fail the creation */
++ yaffs_DestroyObject(in);
++ in = NULL;
++ }
++
++ }
++
++ return in;
++}
++
++yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid)
++{
++ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
++ uid, gid, NULL, NULL, 0);
++}
++
++yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid)
++{
++ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
++ mode, uid, gid, NULL, NULL, 0);
++}
++
++yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
++{
++ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
++ uid, gid, NULL, NULL, rdev);
++}
++
++yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid,
++ const YCHAR * alias)
++{
++ return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
++ uid, gid, NULL, alias, 0);
++}
++
++/* yaffs_Link returns the object id of the equivalent object.*/
++yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
++ yaffs_Object * equivalentObject)
++{
++ /* Get the real object in case we were fed a hard link as an equivalent object */
++ equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
++
++ if (yaffs_MknodObject
++ (YAFFS_OBJECT_TYPE_HARDLINK, parent, name, 0, 0, 0,
++ equivalentObject, NULL, 0)) {
++ return equivalentObject;
++ } else {
++ return NULL;
++ }
++
++}
++
++static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
++ const YCHAR * newName, int force, int shadows)
++{
++ int unlinkOp;
++ int deleteOp;
++
++ yaffs_Object *existingTarget;
++
++ if (newDir == NULL) {
++ newDir = obj->parent; /* use the old directory */
++ }
++
++ if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
++ TENDSTR)));
++ YBUG();
++ }
++
++ /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
++ if (obj->myDev->isYaffs2) {
++ unlinkOp = (newDir == obj->myDev->unlinkedDir);
++ } else {
++ unlinkOp = (newDir == obj->myDev->unlinkedDir
++ && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
++ }
++
++ deleteOp = (newDir == obj->myDev->deletedDir);
++
++ existingTarget = yaffs_FindObjectByName(newDir, newName);
++
++ /* If the object is a file going into the unlinked directory,
++ * then it is OK to just stuff it in since duplicate names are allowed.
++ * else only proceed if the new name does not exist and if we're putting
++ * it into a directory.
++ */
++ if ((unlinkOp ||
++ deleteOp ||
++ force ||
++ (shadows > 0) ||
++ !existingTarget) &&
++ newDir->variantType == YAFFS_OBJECT_TYPE_DIRECTORY) {
++ yaffs_SetObjectName(obj, newName);
++ obj->dirty = 1;
++
++ yaffs_AddObjectToDirectory(newDir, obj);
++
++ if (unlinkOp)
++ obj->unlinked = 1;
++
++ /* If it is a deletion then we mark it as a shrink for gc purposes. */
++ if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
++ return YAFFS_OK;
++ }
++
++ return YAFFS_FAIL;
++}
++
++int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
++ yaffs_Object * newDir, const YCHAR * newName)
++{
++ yaffs_Object *obj;
++ yaffs_Object *existingTarget;
++ int force = 0;
++
++#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
++ /* Special case for case insemsitive systems (eg. WinCE).
++ * While look-up is case insensitive, the name isn't.
++ * Therefore we might want to change x.txt to X.txt
++ */
++ if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
++ force = 1;
++ }
++#endif
++
++ obj = yaffs_FindObjectByName(oldDir, oldName);
++ /* Check new name to long. */
++ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
++ yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
++ /* ENAMETOOLONG */
++ return YAFFS_FAIL;
++ else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
++ yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
++ /* ENAMETOOLONG */
++ return YAFFS_FAIL;
++
++ if (obj && obj->renameAllowed) {
++
++ /* Now do the handling for an existing target, if there is one */
++
++ existingTarget = yaffs_FindObjectByName(newDir, newName);
++ if (existingTarget &&
++ existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
++ !list_empty(&existingTarget->variant.directoryVariant.children)) {
++ /* There is a target that is a non-empty directory, so we fail */
++ return YAFFS_FAIL; /* EEXIST or ENOTEMPTY */
++ } else if (existingTarget && existingTarget != obj) {
++ /* Nuke the target first, using shadowing,
++ * but only if it isn't the same object
++ */
++ yaffs_ChangeObjectName(obj, newDir, newName, force,
++ existingTarget->objectId);
++ yaffs_UnlinkObject(existingTarget);
++ }
++
++ return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0);
++ }
++ return YAFFS_FAIL;
++}
++
++/*------------------------- Block Management and Page Allocation ----------------*/
++
++static int yaffs_InitialiseBlocks(yaffs_Device * dev)
++{
++ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
++
++ dev->allocationBlock = -1; /* force it to get a new one */
++
++ /* Todo we're assuming the malloc will pass. */
++ dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
++ if(!dev->blockInfo){
++ dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
++ dev->blockInfoAlt = 1;
++ }
++ else
++ dev->blockInfoAlt = 0;
++
++ /* Set up dynamic blockinfo stuff. */
++ dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
++ dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
++ if(!dev->chunkBits){
++ dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
++ dev->chunkBitsAlt = 1;
++ }
++ else
++ dev->chunkBitsAlt = 0;
++
++ if (dev->blockInfo && dev->chunkBits) {
++ memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo));
++ memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks);
++ return YAFFS_OK;
++ }
++
++ return YAFFS_FAIL;
++
++}
++
++static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
++{
++ if(dev->blockInfoAlt)
++ YFREE_ALT(dev->blockInfo);
++ else
++ YFREE(dev->blockInfo);
++ dev->blockInfoAlt = 0;
++
++ dev->blockInfo = NULL;
++
++ if(dev->chunkBitsAlt)
++ YFREE_ALT(dev->chunkBits);
++ else
++ YFREE(dev->chunkBits);
++ dev->chunkBitsAlt = 0;
++ dev->chunkBits = NULL;
++}
++
++static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
++ yaffs_BlockInfo * bi)
++{
++ int i;
++ __u32 seq;
++ yaffs_BlockInfo *b;
++
++ if (!dev->isYaffs2)
++ return 1; /* disqualification only applies to yaffs2. */
++
++ if (!bi->hasShrinkHeader)
++ return 1; /* can gc */
++
++ /* Find the oldest dirty sequence number if we don't know it and save it
++ * so we don't have to keep recomputing it.
++ */
++ if (!dev->oldestDirtySequence) {
++ seq = dev->sequenceNumber;
++
++ for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
++ i++) {
++ b = yaffs_GetBlockInfo(dev, i);
++ if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
++ (b->pagesInUse - b->softDeletions) <
++ dev->nChunksPerBlock && b->sequenceNumber < seq) {
++ seq = b->sequenceNumber;
++ }
++ }
++ dev->oldestDirtySequence = seq;
++ }
++
++ /* Can't do gc of this block if there are any blocks older than this one that have
++ * discarded pages.
++ */
++ return (bi->sequenceNumber <= dev->oldestDirtySequence);
++
++}
++
++/* FindDiretiestBlock is used to select the dirtiest block (or close enough)
++ * for garbage collection.
++ */
++
++static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
++ int aggressive)
++{
++
++ int b = dev->currentDirtyChecker;
++
++ int i;
++ int iterations;
++ int dirtiest = -1;
++ int pagesInUse;
++ int prioritised=0;
++ yaffs_BlockInfo *bi;
++ static int nonAggressiveSkip = 0;
++ int pendingPrioritisedExist = 0;
++
++ /* First let's see if we need to grab a prioritised block */
++ if(dev->hasPendingPrioritisedGCs){
++ for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
++
++ bi = yaffs_GetBlockInfo(dev, i);
++ if(bi->gcPrioritise) {
++ pendingPrioritisedExist = 1;
++ if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
++ yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
++ pagesInUse = (bi->pagesInUse - bi->softDeletions);
++ dirtiest = i;
++ prioritised = 1;
++ aggressive = 1; /* Fool the non-aggressive skip logiv below */
++ }
++ }
++ }
++
++ if(!pendingPrioritisedExist) /* None found, so we can clear this */
++ dev->hasPendingPrioritisedGCs = 0;
++ }
++
++ /* If we're doing aggressive GC then we are happy to take a less-dirty block, and
++ * search harder.
++ * else (we're doing a leasurely gc), then we only bother to do this if the
++ * block has only a few pages in use.
++ */
++
++ nonAggressiveSkip--;
++
++ if (!aggressive && (nonAggressiveSkip > 0)) {
++ return -1;
++ }
++
++ if(!prioritised)
++ pagesInUse =
++ (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
++
++ if (aggressive) {
++ iterations =
++ dev->internalEndBlock - dev->internalStartBlock + 1;
++ } else {
++ iterations =
++ dev->internalEndBlock - dev->internalStartBlock + 1;
++ iterations = iterations / 16;
++ if (iterations > 200) {
++ iterations = 200;
++ }
++ }
++
++ for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
++ b++;
++ if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
++ b = dev->internalStartBlock;
++ }
++
++ if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("**>> Block %d is not valid" TENDSTR), b));
++ YBUG();
++ }
++
++ bi = yaffs_GetBlockInfo(dev, b);
++
++#if 0
++ if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
++ dirtiest = b;
++ pagesInUse = 0;
++ }
++ else
++#endif
++
++ if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
++ (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
++ yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
++ dirtiest = b;
++ pagesInUse = (bi->pagesInUse - bi->softDeletions);
++ }
++ }
++
++ dev->currentDirtyChecker = b;
++
++ if (dirtiest > 0) {
++ T(YAFFS_TRACE_GC,
++ (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
++ dev->nChunksPerBlock - pagesInUse,prioritised));
++ }
++
++ dev->oldestDirtySequence = 0;
++
++ if (dirtiest > 0) {
++ nonAggressiveSkip = 4;
++ }
++
++ return dirtiest;
++}
++
++static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
++{
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
++
++ int erasedOk = 0;
++
++ /* If the block is still healthy erase it and mark as clean.
++ * If the block has had a data failure, then retire it.
++ */
++
++ T(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
++ (TSTR("yaffs_BlockBecameDirty block %d state %d %s"TENDSTR),
++ blockNo, bi->blockState, (bi->needsRetiring) ? "needs retiring" : ""));
++
++ bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
++
++ if (!bi->needsRetiring) {
++ yaffs_InvalidateCheckpoint(dev);
++ erasedOk = yaffs_EraseBlockInNAND(dev, blockNo);
++ if (!erasedOk) {
++ dev->nErasureFailures++;
++ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("**>> Erasure failed %d" TENDSTR), blockNo));
++ }
++ }
++
++ if (erasedOk && (yaffs_traceMask & YAFFS_TRACE_ERASE)) {
++ int i;
++ for (i = 0; i < dev->nChunksPerBlock; i++) {
++ if (!yaffs_CheckChunkErased
++ (dev, blockNo * dev->nChunksPerBlock + i)) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ (">>Block %d erasure supposedly OK, but chunk %d not erased"
++ TENDSTR), blockNo, i));
++ }
++ }
++ }
++
++ if (erasedOk) {
++ /* Clean it up... */
++ bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
++ dev->nErasedBlocks++;
++ bi->pagesInUse = 0;
++ bi->softDeletions = 0;
++ bi->hasShrinkHeader = 0;
++ bi->skipErasedCheck = 1; /* This is clean, so no need to check */
++ bi->gcPrioritise = 0;
++ yaffs_ClearChunkBits(dev, blockNo);
++
++ T(YAFFS_TRACE_ERASE,
++ (TSTR("Erased block %d" TENDSTR), blockNo));
++ } else {
++ dev->nFreeChunks -= dev->nChunksPerBlock; /* We lost a block of free space */
++
++ yaffs_RetireBlock(dev, blockNo);
++ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("**>> Block %d retired" TENDSTR), blockNo));
++ }
++}
++
++static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
++{
++ int i;
++
++ yaffs_BlockInfo *bi;
++
++ if (dev->nErasedBlocks < 1) {
++ /* Hoosterman we've got a problem.
++ * Can't get space to gc
++ */
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
++
++ return -1;
++ }
++
++ /* Find an empty block. */
++
++ for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
++ dev->allocationBlockFinder++;
++ if (dev->allocationBlockFinder < dev->internalStartBlock
++ || dev->allocationBlockFinder > dev->internalEndBlock) {
++ dev->allocationBlockFinder = dev->internalStartBlock;
++ }
++
++ bi = yaffs_GetBlockInfo(dev, dev->allocationBlockFinder);
++
++ if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
++ bi->blockState = YAFFS_BLOCK_STATE_ALLOCATING;
++ dev->sequenceNumber++;
++ bi->sequenceNumber = dev->sequenceNumber;
++ dev->nErasedBlocks--;
++ T(YAFFS_TRACE_ALLOCATE,
++ (TSTR("Allocated block %d, seq %d, %d left" TENDSTR),
++ dev->allocationBlockFinder, dev->sequenceNumber,
++ dev->nErasedBlocks));
++ return dev->allocationBlockFinder;
++ }
++ }
++
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("yaffs tragedy: no more eraased blocks, but there should have been %d"
++ TENDSTR), dev->nErasedBlocks));
++
++ return -1;
++}
++
++
++// Check if there's space to allocate...
++// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
++static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
++{
++ int reservedChunks;
++ int reservedBlocks = dev->nReservedBlocks;
++ int checkpointBlocks;
++
++ checkpointBlocks = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
++ if(checkpointBlocks < 0)
++ checkpointBlocks = 0;
++
++ reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
++
++ return (dev->nFreeChunks > reservedChunks);
++}
++
++static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
++{
++ int retVal;
++ yaffs_BlockInfo *bi;
++
++ if (dev->allocationBlock < 0) {
++ /* Get next block to allocate off */
++ dev->allocationBlock = yaffs_FindBlockForAllocation(dev);
++ dev->allocationPage = 0;
++ }
++
++ if (!useReserve && !yaffs_CheckSpaceForAllocation(dev)) {
++ /* Not enough space to allocate unless we're allowed to use the reserve. */
++ return -1;
++ }
++
++ if (dev->nErasedBlocks < dev->nReservedBlocks
++ && dev->allocationPage == 0) {
++ T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
++ }
++
++ /* Next page please.... */
++ if (dev->allocationBlock >= 0) {
++ bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
++
++ retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
++ dev->allocationPage;
++ bi->pagesInUse++;
++ yaffs_SetChunkBit(dev, dev->allocationBlock,
++ dev->allocationPage);
++
++ dev->allocationPage++;
++
++ dev->nFreeChunks--;
++
++ /* If the block is full set the state to full */
++ if (dev->allocationPage >= dev->nChunksPerBlock) {
++ bi->blockState = YAFFS_BLOCK_STATE_FULL;
++ dev->allocationBlock = -1;
++ }
++
++ if(blockUsedPtr)
++ *blockUsedPtr = bi;
++
++ return retVal;
++ }
++
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
++
++ return -1;
++}
++
++static int yaffs_GetErasedChunks(yaffs_Device * dev)
++{
++ int n;
++
++ n = dev->nErasedBlocks * dev->nChunksPerBlock;
++
++ if (dev->allocationBlock > 0) {
++ n += (dev->nChunksPerBlock - dev->allocationPage);
++ }
++
++ return n;
++
++}
++
++static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
++{
++ int oldChunk;
++ int newChunk;
++ int chunkInBlock;
++ int markNAND;
++ int retVal = YAFFS_OK;
++ int cleanups = 0;
++ int i;
++ int isCheckpointBlock;
++
++ int chunksBefore = yaffs_GetErasedChunks(dev);
++ int chunksAfter;
++
++ yaffs_ExtendedTags tags;
++
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, block);
++
++ yaffs_Object *object;
++
++ isCheckpointBlock = (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT);
++
++ bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
++
++ T(YAFFS_TRACE_TRACING,
++ (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
++ bi->pagesInUse, bi->hasShrinkHeader));
++
++ /*yaffs_VerifyFreeChunks(dev); */
++
++ bi->hasShrinkHeader = 0; /* clear the flag so that the block can erase */
++
++ /* Take off the number of soft deleted entries because
++ * they're going to get really deleted during GC.
++ */
++ dev->nFreeChunks -= bi->softDeletions;
++
++ dev->isDoingGC = 1;
++
++ if (isCheckpointBlock ||
++ !yaffs_StillSomeChunkBits(dev, block)) {
++ T(YAFFS_TRACE_TRACING,
++ (TSTR
++ ("Collecting block %d that has no chunks in use" TENDSTR),
++ block));
++ yaffs_BlockBecameDirty(dev, block);
++ } else {
++
++ __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
++
++ for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
++ chunkInBlock < dev->nChunksPerBlock
++ && yaffs_StillSomeChunkBits(dev, block);
++ chunkInBlock++, oldChunk++) {
++ if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
++
++ /* This page is in use and might need to be copied off */
++
++ markNAND = 1;
++
++ yaffs_InitialiseTags(&tags);
++
++ yaffs_ReadChunkWithTagsFromNAND(dev, oldChunk,
++ buffer, &tags);
++
++ object =
++ yaffs_FindObjectByNumber(dev,
++ tags.objectId);
++
++ T(YAFFS_TRACE_GC_DETAIL,
++ (TSTR
++ ("Collecting page %d, %d %d %d " TENDSTR),
++ chunkInBlock, tags.objectId, tags.chunkId,
++ tags.byteCount));
++
++ if (!object) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("page %d in gc has no object "
++ TENDSTR), oldChunk));
++ }
++
++ if (object && object->deleted
++ && tags.chunkId != 0) {
++ /* Data chunk in a deleted file, throw it away
++ * It's a soft deleted data chunk,
++ * No need to copy this, just forget about it and
++ * fix up the object.
++ */
++
++ object->nDataChunks--;
++
++ if (object->nDataChunks <= 0) {
++ /* remeber to clean up the object */
++ dev->gcCleanupList[cleanups] =
++ tags.objectId;
++ cleanups++;
++ }
++ markNAND = 0;
++ } else if (0
++ /* Todo object && object->deleted && object->nDataChunks == 0 */
++ ) {
++ /* Deleted object header with no data chunks.
++ * Can be discarded and the file deleted.
++ */
++ object->chunkId = 0;
++ yaffs_FreeTnode(object->myDev,
++ object->variant.
++ fileVariant.top);
++ object->variant.fileVariant.top = NULL;
++ yaffs_DoGenericObjectDeletion(object);
++
++ } else if (object) {
++ /* It's either a data chunk in a live file or
++ * an ObjectHeader, so we're interested in it.
++ * NB Need to keep the ObjectHeaders of deleted files
++ * until the whole file has been deleted off
++ */
++ tags.serialNumber++;
++
++ dev->nGCCopies++;
++
++ if (tags.chunkId == 0) {
++ /* It is an object Id,
++ * We need to nuke the shrinkheader flags first
++ * We no longer want the shrinkHeader flag since its work is done
++ * and if it is left in place it will mess up scanning.
++ * Also, clear out any shadowing stuff
++ */
++
++ yaffs_ObjectHeader *oh;
++ oh = (yaffs_ObjectHeader *)buffer;
++ oh->isShrink = 0;
++ oh->shadowsObject = -1;
++ tags.extraShadows = 0;
++ tags.extraIsShrinkHeader = 0;
++ }
++
++ newChunk =
++ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &tags, 1);
++
++ if (newChunk < 0) {
++ retVal = YAFFS_FAIL;
++ } else {
++
++ /* Ok, now fix up the Tnodes etc. */
++
++ if (tags.chunkId == 0) {
++ /* It's a header */
++ object->chunkId = newChunk;
++ object->serial = tags.serialNumber;
++ } else {
++ /* It's a data chunk */
++ yaffs_PutChunkIntoFile
++ (object,
++ tags.chunkId,
++ newChunk, 0);
++ }
++ }
++ }
++
++ yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
++
++ }
++ }
++
++ yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
++
++
++ /* Do any required cleanups */
++ for (i = 0; i < cleanups; i++) {
++ /* Time to delete the file too */
++ object =
++ yaffs_FindObjectByNumber(dev,
++ dev->gcCleanupList[i]);
++ if (object) {
++ yaffs_FreeTnode(dev,
++ object->variant.fileVariant.
++ top);
++ object->variant.fileVariant.top = NULL;
++ T(YAFFS_TRACE_GC,
++ (TSTR
++ ("yaffs: About to finally delete object %d"
++ TENDSTR), object->objectId));
++ yaffs_DoGenericObjectDeletion(object);
++ object->myDev->nDeletedFiles--;
++ }
++
++ }
++
++ }
++
++ if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
++ T(YAFFS_TRACE_GC,
++ (TSTR
++ ("gc did not increase free chunks before %d after %d"
++ TENDSTR), chunksBefore, chunksAfter));
++ }
++
++ dev->isDoingGC = 0;
++
++ return YAFFS_OK;
++}
++
++/* New garbage collector
++ * If we're very low on erased blocks then we do aggressive garbage collection
++ * otherwise we do "leasurely" garbage collection.
++ * Aggressive gc looks further (whole array) and will accept less dirty blocks.
++ * Passive gc only inspects smaller areas and will only accept more dirty blocks.
++ *
++ * The idea is to help clear out space in a more spread-out manner.
++ * Dunno if it really does anything useful.
++ */
++static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
++{
++ int block;
++ int aggressive;
++ int gcOk = YAFFS_OK;
++ int maxTries = 0;
++
++ int checkpointBlockAdjust;
++
++ if (dev->isDoingGC) {
++ /* Bail out so we don't get recursive gc */
++ return YAFFS_OK;
++ }
++
++ /* This loop should pass the first time.
++ * We'll only see looping here if the erase of the collected block fails.
++ */
++
++ do {
++ maxTries++;
++
++ checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
++ if(checkpointBlockAdjust < 0)
++ checkpointBlockAdjust = 0;
++
++ if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust)) {
++ /* We need a block soon...*/
++ aggressive = 1;
++ } else {
++ /* We're in no hurry */
++ aggressive = 0;
++ }
++
++ block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
++
++ if (block > 0) {
++ dev->garbageCollections++;
++ if (!aggressive) {
++ dev->passiveGarbageCollections++;
++ }
++
++ T(YAFFS_TRACE_GC,
++ (TSTR
++ ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
++ dev->nErasedBlocks, aggressive));
++
++ gcOk = yaffs_GarbageCollectBlock(dev, block);
++ }
++
++ if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
++ T(YAFFS_TRACE_GC,
++ (TSTR
++ ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
++ TENDSTR), dev->nErasedBlocks, maxTries, block));
++ }
++ } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
++ && (maxTries < 2));
++
++ return aggressive ? gcOk : YAFFS_OK;
++}
++
++/*------------------------- TAGS --------------------------------*/
++
++static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
++ int chunkInObject)
++{
++ return (tags->chunkId == chunkInObject &&
++ tags->objectId == objectId && !tags->chunkDeleted) ? 1 : 0;
++
++}
++
++
++/*-------------------- Data file manipulation -----------------*/
++
++static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
++ yaffs_ExtendedTags * tags)
++{
++ /*Get the Tnode, then get the level 0 offset chunk offset */
++ yaffs_Tnode *tn;
++ int theChunk = -1;
++ yaffs_ExtendedTags localTags;
++ int retVal = -1;
++
++ yaffs_Device *dev = in->myDev;
++
++ if (!tags) {
++ /* Passed a NULL, so use our own tags space */
++ tags = &localTags;
++ }
++
++ tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
++
++ if (tn) {
++ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
++
++ retVal =
++ yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
++ chunkInInode);
++ }
++ return retVal;
++}
++
++static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
++ yaffs_ExtendedTags * tags)
++{
++ /* Get the Tnode, then get the level 0 offset chunk offset */
++ yaffs_Tnode *tn;
++ int theChunk = -1;
++ yaffs_ExtendedTags localTags;
++
++ yaffs_Device *dev = in->myDev;
++ int retVal = -1;
++
++ if (!tags) {
++ /* Passed a NULL, so use our own tags space */
++ tags = &localTags;
++ }
++
++ tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
++
++ if (tn) {
++
++ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
++
++ retVal =
++ yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
++ chunkInInode);
++
++ /* Delete the entry in the filestructure (if found) */
++ if (retVal != -1) {
++ yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
++ }
++ } else {
++ /*T(("No level 0 found for %d\n", chunkInInode)); */
++ }
++
++ if (retVal == -1) {
++ /* T(("Could not find %d to delete\n",chunkInInode)); */
++ }
++ return retVal;
++}
++
++#ifdef YAFFS_PARANOID
++
++static int yaffs_CheckFileSanity(yaffs_Object * in)
++{
++ int chunk;
++ int nChunks;
++ int fSize;
++ int failed = 0;
++ int objId;
++ yaffs_Tnode *tn;
++ yaffs_Tags localTags;
++ yaffs_Tags *tags = &localTags;
++ int theChunk;
++ int chunkDeleted;
++
++ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
++ /* T(("Object not a file\n")); */
++ return YAFFS_FAIL;
++ }
++
++ objId = in->objectId;
++ fSize = in->variant.fileVariant.fileSize;
++ nChunks =
++ (fSize + in->myDev->nDataBytesPerChunk - 1) / in->myDev->nDataBytesPerChunk;
++
++ for (chunk = 1; chunk <= nChunks; chunk++) {
++ tn = yaffs_FindLevel0Tnode(in->myDev, &in->variant.fileVariant,
++ chunk);
++
++ if (tn) {
++
++ theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
++
++ if (yaffs_CheckChunkBits
++ (dev, theChunk / dev->nChunksPerBlock,
++ theChunk % dev->nChunksPerBlock)) {
++
++ yaffs_ReadChunkTagsFromNAND(in->myDev, theChunk,
++ tags,
++ &chunkDeleted);
++ if (yaffs_TagsMatch
++ (tags, in->objectId, chunk, chunkDeleted)) {
++ /* found it; */
++
++ }
++ } else {
++
++ failed = 1;
++ }
++
++ } else {
++ /* T(("No level 0 found for %d\n", chunk)); */
++ }
++ }
++
++ return failed ? YAFFS_FAIL : YAFFS_OK;
++}
++
++#endif
++
++static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
++ int chunkInNAND, int inScan)
++{
++ /* NB inScan is zero unless scanning.
++ * For forward scanning, inScan is > 0;
++ * for backward scanning inScan is < 0
++ */
++
++ yaffs_Tnode *tn;
++ yaffs_Device *dev = in->myDev;
++ int existingChunk;
++ yaffs_ExtendedTags existingTags;
++ yaffs_ExtendedTags newTags;
++ unsigned existingSerial, newSerial;
++
++ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
++ /* Just ignore an attempt at putting a chunk into a non-file during scanning
++ * If it is not during Scanning then something went wrong!
++ */
++ if (!inScan) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs tragedy:attempt to put data chunk into a non-file"
++ TENDSTR)));
++ YBUG();
++ }
++
++ yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
++ return YAFFS_OK;
++ }
++
++ tn = yaffs_AddOrFindLevel0Tnode(dev,
++ &in->variant.fileVariant,
++ chunkInInode,
++ NULL);
++ if (!tn) {
++ return YAFFS_FAIL;
++ }
++
++ existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
++
++ if (inScan != 0) {
++ /* If we're scanning then we need to test for duplicates
++ * NB This does not need to be efficient since it should only ever
++ * happen when the power fails during a write, then only one
++ * chunk should ever be affected.
++ *
++ * Correction for YAFFS2: This could happen quite a lot and we need to think about efficiency! TODO
++ * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
++ */
++
++ if (existingChunk != 0) {
++ /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
++ * thus we have to do a FindChunkInFile to get the real chunk id.
++ *
++ * We have a duplicate now we need to decide which one to use:
++ *
++ * Backwards scanning YAFFS2: The old one is what we use, dump the new one.
++ * Forward scanning YAFFS2: The new one is what we use, dump the old one.
++ * YAFFS1: Get both sets of tags and compare serial numbers.
++ */
++
++ if (inScan > 0) {
++ /* Only do this for forward scanning */
++ yaffs_ReadChunkWithTagsFromNAND(dev,
++ chunkInNAND,
++ NULL, &newTags);
++
++ /* Do a proper find */
++ existingChunk =
++ yaffs_FindChunkInFile(in, chunkInInode,
++ &existingTags);
++ }
++
++ if (existingChunk <= 0) {
++ /*Hoosterman - how did this happen? */
++
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs tragedy: existing chunk < 0 in scan"
++ TENDSTR)));
++
++ }
++
++ /* NB The deleted flags should be false, otherwise the chunks will
++ * not be loaded during a scan
++ */
++
++ newSerial = newTags.serialNumber;
++ existingSerial = existingTags.serialNumber;
++
++ if ((inScan > 0) &&
++ (in->myDev->isYaffs2 ||
++ existingChunk <= 0 ||
++ ((existingSerial + 1) & 3) == newSerial)) {
++ /* Forward scanning.
++ * Use new
++ * Delete the old one and drop through to update the tnode
++ */
++ yaffs_DeleteChunk(dev, existingChunk, 1,
++ __LINE__);
++ } else {
++ /* Backward scanning or we want to use the existing one
++ * Use existing.
++ * Delete the new one and return early so that the tnode isn't changed
++ */
++ yaffs_DeleteChunk(dev, chunkInNAND, 1,
++ __LINE__);
++ return YAFFS_OK;
++ }
++ }
++
++ }
++
++ if (existingChunk == 0) {
++ in->nDataChunks++;
++ }
++
++ yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
++
++ return YAFFS_OK;
++}
++
++static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
++ __u8 * buffer)
++{
++ int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
++
++ if (chunkInNAND >= 0) {
++ return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
++ buffer,NULL);
++ } else {
++ T(YAFFS_TRACE_NANDACCESS,
++ (TSTR("Chunk %d not found zero instead" TENDSTR),
++ chunkInNAND));
++ /* get sane (zero) data if you read a hole */
++ memset(buffer, 0, in->myDev->nDataBytesPerChunk);
++ return 0;
++ }
++
++}
++
++void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
++{
++ int block;
++ int page;
++ yaffs_ExtendedTags tags;
++ yaffs_BlockInfo *bi;
++
++ if (chunkId <= 0)
++ return;
++
++ dev->nDeletions++;
++ block = chunkId / dev->nChunksPerBlock;
++ page = chunkId % dev->nChunksPerBlock;
++
++ bi = yaffs_GetBlockInfo(dev, block);
++
++ T(YAFFS_TRACE_DELETION,
++ (TSTR("line %d delete of chunk %d" TENDSTR), lyn, chunkId));
++
++ if (markNAND &&
++ bi->blockState != YAFFS_BLOCK_STATE_COLLECTING && !dev->isYaffs2) {
++
++ yaffs_InitialiseTags(&tags);
++
++ tags.chunkDeleted = 1;
++
++ yaffs_WriteChunkWithTagsToNAND(dev, chunkId, NULL, &tags);
++ yaffs_HandleUpdateChunk(dev, chunkId, &tags);
++ } else {
++ dev->nUnmarkedDeletions++;
++ }
++
++ /* Pull out of the management area.
++ * If the whole block became dirty, this will kick off an erasure.
++ */
++ if (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING ||
++ bi->blockState == YAFFS_BLOCK_STATE_FULL ||
++ bi->blockState == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
++ bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) {
++ dev->nFreeChunks++;
++
++ yaffs_ClearChunkBit(dev, block, page);
++
++ bi->pagesInUse--;
++
++ if (bi->pagesInUse == 0 &&
++ !bi->hasShrinkHeader &&
++ bi->blockState != YAFFS_BLOCK_STATE_ALLOCATING &&
++ bi->blockState != YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
++ yaffs_BlockBecameDirty(dev, block);
++ }
++
++ } else {
++ /* T(("Bad news deleting chunk %d\n",chunkId)); */
++ }
++
++}
++
++static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
++ const __u8 * buffer, int nBytes,
++ int useReserve)
++{
++ /* Find old chunk Need to do this to get serial number
++ * Write new one and patch into tree.
++ * Invalidate old tags.
++ */
++
++ int prevChunkId;
++ yaffs_ExtendedTags prevTags;
++
++ int newChunkId;
++ yaffs_ExtendedTags newTags;
++
++ yaffs_Device *dev = in->myDev;
++
++ yaffs_CheckGarbageCollection(dev);
++
++ /* Get the previous chunk at this location in the file if it exists */
++ prevChunkId = yaffs_FindChunkInFile(in, chunkInInode, &prevTags);
++
++ /* Set up new tags */
++ yaffs_InitialiseTags(&newTags);
++
++ newTags.chunkId = chunkInInode;
++ newTags.objectId = in->objectId;
++ newTags.serialNumber =
++ (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
++ newTags.byteCount = nBytes;
++
++ newChunkId =
++ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
++ useReserve);
++
++ if (newChunkId >= 0) {
++ yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
++
++ if (prevChunkId >= 0) {
++ yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
++
++ }
++
++ yaffs_CheckFileSanity(in);
++ }
++ return newChunkId;
++
++}
++
++/* UpdateObjectHeader updates the header on NAND for an object.
++ * If name is not NULL, then that new name is used.
++ */
++int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
++ int isShrink, int shadows)
++{
++
++ yaffs_BlockInfo *bi;
++
++ yaffs_Device *dev = in->myDev;
++
++ int prevChunkId;
++ int retVal = 0;
++ int result = 0;
++
++ int newChunkId;
++ yaffs_ExtendedTags newTags;
++
++ __u8 *buffer = NULL;
++ YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
++
++ yaffs_ObjectHeader *oh = NULL;
++
++ if (!in->fake || force) {
++
++ yaffs_CheckGarbageCollection(dev);
++
++ buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
++ oh = (yaffs_ObjectHeader *) buffer;
++
++ prevChunkId = in->chunkId;
++
++ if (prevChunkId >= 0) {
++ result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
++ buffer, NULL);
++ memcpy(oldName, oh->name, sizeof(oh->name));
++ }
++
++ memset(buffer, 0xFF, dev->nDataBytesPerChunk);
++
++ oh->type = in->variantType;
++ oh->yst_mode = in->yst_mode;
++ oh->shadowsObject = shadows;
++
++#ifdef CONFIG_YAFFS_WINCE
++ oh->win_atime[0] = in->win_atime[0];
++ oh->win_ctime[0] = in->win_ctime[0];
++ oh->win_mtime[0] = in->win_mtime[0];
++ oh->win_atime[1] = in->win_atime[1];
++ oh->win_ctime[1] = in->win_ctime[1];
++ oh->win_mtime[1] = in->win_mtime[1];
++#else
++ oh->yst_uid = in->yst_uid;
++ oh->yst_gid = in->yst_gid;
++ oh->yst_atime = in->yst_atime;
++ oh->yst_mtime = in->yst_mtime;
++ oh->yst_ctime = in->yst_ctime;
++ oh->yst_rdev = in->yst_rdev;
++#endif
++ if (in->parent) {
++ oh->parentObjectId = in->parent->objectId;
++ } else {
++ oh->parentObjectId = 0;
++ }
++
++ if (name && *name) {
++ memset(oh->name, 0, sizeof(oh->name));
++ yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
++ } else if (prevChunkId) {
++ memcpy(oh->name, oldName, sizeof(oh->name));
++ } else {
++ memset(oh->name, 0, sizeof(oh->name));
++ }
++
++ oh->isShrink = isShrink;
++
++ switch (in->variantType) {
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ /* Should not happen */
++ break;
++ case YAFFS_OBJECT_TYPE_FILE:
++ oh->fileSize =
++ (oh->parentObjectId == YAFFS_OBJECTID_DELETED
++ || oh->parentObjectId ==
++ YAFFS_OBJECTID_UNLINKED) ? 0 : in->variant.
++ fileVariant.fileSize;
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ oh->equivalentObjectId =
++ in->variant.hardLinkVariant.equivalentObjectId;
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ yaffs_strncpy(oh->alias,
++ in->variant.symLinkVariant.alias,
++ YAFFS_MAX_ALIAS_LENGTH);
++ oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
++ break;
++ }
++
++ /* Tags */
++ yaffs_InitialiseTags(&newTags);
++ in->serial++;
++ newTags.chunkId = 0;
++ newTags.objectId = in->objectId;
++ newTags.serialNumber = in->serial;
++
++ /* Add extra info for file header */
++
++ newTags.extraHeaderInfoAvailable = 1;
++ newTags.extraParentObjectId = oh->parentObjectId;
++ newTags.extraFileLength = oh->fileSize;
++ newTags.extraIsShrinkHeader = oh->isShrink;
++ newTags.extraEquivalentObjectId = oh->equivalentObjectId;
++ newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
++ newTags.extraObjectType = in->variantType;
++
++ /* Create new chunk in NAND */
++ newChunkId =
++ yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
++ (prevChunkId >= 0) ? 1 : 0);
++
++ if (newChunkId >= 0) {
++
++ in->chunkId = newChunkId;
++
++ if (prevChunkId >= 0) {
++ yaffs_DeleteChunk(dev, prevChunkId, 1,
++ __LINE__);
++ }
++
++ if(!yaffs_ObjectHasCachedWriteData(in))
++ in->dirty = 0;
++
++ /* If this was a shrink, then mark the block that the chunk lives on */
++ if (isShrink) {
++ bi = yaffs_GetBlockInfo(in->myDev,
++ newChunkId /in->myDev-> nChunksPerBlock);
++ bi->hasShrinkHeader = 1;
++ }
++
++ }
++
++ retVal = newChunkId;
++
++ }
++
++ if (buffer)
++ yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
++
++ return retVal;
++}
++
++/*------------------------ Short Operations Cache ----------------------------------------
++ * In many situations where there is no high level buffering (eg WinCE) a lot of
++ * reads might be short sequential reads, and a lot of writes may be short
++ * sequential writes. eg. scanning/writing a jpeg file.
++ * In these cases, a short read/write cache can provide a huge perfomance benefit
++ * with dumb-as-a-rock code.
++ * In Linux, the page cache provides read buffering aand the short op cache provides write
++ * buffering.
++ *
++ * There are a limited number (~10) of cache chunks per device so that we don't
++ * need a very intelligent search.
++ */
++
++static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj)
++{
++ yaffs_Device *dev = obj->myDev;
++ int i;
++ yaffs_ChunkCache *cache;
++ int nCaches = obj->myDev->nShortOpCaches;
++
++ for(i = 0; i < nCaches; i++){
++ cache = &dev->srCache[i];
++ if (cache->object == obj &&
++ cache->dirty)
++ return 1;
++ }
++
++ return 0;
++}
++
++
++static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
++{
++ yaffs_Device *dev = obj->myDev;
++ int lowest = -99; /* Stop compiler whining. */
++ int i;
++ yaffs_ChunkCache *cache;
++ int chunkWritten = 0;
++ int nCaches = obj->myDev->nShortOpCaches;
++
++ if (nCaches > 0) {
++ do {
++ cache = NULL;
++
++ /* Find the dirty cache for this object with the lowest chunk id. */
++ for (i = 0; i < nCaches; i++) {
++ if (dev->srCache[i].object == obj &&
++ dev->srCache[i].dirty) {
++ if (!cache
++ || dev->srCache[i].chunkId <
++ lowest) {
++ cache = &dev->srCache[i];
++ lowest = cache->chunkId;
++ }
++ }
++ }
++
++ if (cache && !cache->locked) {
++ /* Write it out and free it up */
++
++ chunkWritten =
++ yaffs_WriteChunkDataToObject(cache->object,
++ cache->chunkId,
++ cache->data,
++ cache->nBytes,
++ 1);
++ cache->dirty = 0;
++ cache->object = NULL;
++ }
++
++ } while (cache && chunkWritten > 0);
++
++ if (cache) {
++ /* Hoosterman, disk full while writing cache out. */
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("yaffs tragedy: no space during cache write" TENDSTR)));
++
++ }
++ }
++
++}
++
++/*yaffs_FlushEntireDeviceCache(dev)
++ *
++ *
++ */
++
++void yaffs_FlushEntireDeviceCache(yaffs_Device *dev)
++{
++ yaffs_Object *obj;
++ int nCaches = dev->nShortOpCaches;
++ int i;
++
++ /* Find a dirty object in the cache and flush it...
++ * until there are no further dirty objects.
++ */
++ do {
++ obj = NULL;
++ for( i = 0; i < nCaches && !obj; i++) {
++ if (dev->srCache[i].object &&
++ dev->srCache[i].dirty)
++ obj = dev->srCache[i].object;
++
++ }
++ if(obj)
++ yaffs_FlushFilesChunkCache(obj);
++
++ } while(obj);
++
++}
++
++
++/* Grab us a cache chunk for use.
++ * First look for an empty one.
++ * Then look for the least recently used non-dirty one.
++ * Then look for the least recently used dirty one...., flush and look again.
++ */
++static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
++{
++ int i;
++ int usage;
++ int theOne;
++
++ if (dev->nShortOpCaches > 0) {
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if (!dev->srCache[i].object)
++ return &dev->srCache[i];
++ }
++
++ return NULL;
++
++ theOne = -1;
++ usage = 0; /* just to stop the compiler grizzling */
++
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if (!dev->srCache[i].dirty &&
++ ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
++ theOne < 0)) {
++ usage = dev->srCache[i].lastUse;
++ theOne = i;
++ }
++ }
++
++
++ return theOne >= 0 ? &dev->srCache[theOne] : NULL;
++ } else {
++ return NULL;
++ }
++
++}
++
++static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
++{
++ yaffs_ChunkCache *cache;
++ yaffs_Object *theObj;
++ int usage;
++ int i;
++ int pushout;
++
++ if (dev->nShortOpCaches > 0) {
++ /* Try find a non-dirty one... */
++
++ cache = yaffs_GrabChunkCacheWorker(dev);
++
++ if (!cache) {
++ /* They were all dirty, find the last recently used object and flush
++ * its cache, then find again.
++ * NB what's here is not very accurate, we actually flush the object
++ * the last recently used page.
++ */
++
++ /* With locking we can't assume we can use entry zero */
++
++ theObj = NULL;
++ usage = -1;
++ cache = NULL;
++ pushout = -1;
++
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if (dev->srCache[i].object &&
++ !dev->srCache[i].locked &&
++ (dev->srCache[i].lastUse < usage || !cache))
++ {
++ usage = dev->srCache[i].lastUse;
++ theObj = dev->srCache[i].object;
++ cache = &dev->srCache[i];
++ pushout = i;
++ }
++ }
++
++ if (!cache || cache->dirty) {
++ /* Flush and try again */
++ yaffs_FlushFilesChunkCache(theObj);
++ cache = yaffs_GrabChunkCacheWorker(dev);
++ }
++
++ }
++ return cache;
++ } else
++ return NULL;
++
++}
++
++/* Find a cached chunk */
++static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
++ int chunkId)
++{
++ yaffs_Device *dev = obj->myDev;
++ int i;
++ if (dev->nShortOpCaches > 0) {
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if (dev->srCache[i].object == obj &&
++ dev->srCache[i].chunkId == chunkId) {
++ dev->cacheHits++;
++
++ return &dev->srCache[i];
++ }
++ }
++ }
++ return NULL;
++}
++
++/* Mark the chunk for the least recently used algorithym */
++static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
++ int isAWrite)
++{
++
++ if (dev->nShortOpCaches > 0) {
++ if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
++ /* Reset the cache usages */
++ int i;
++ for (i = 1; i < dev->nShortOpCaches; i++) {
++ dev->srCache[i].lastUse = 0;
++ }
++ dev->srLastUse = 0;
++ }
++
++ dev->srLastUse++;
++
++ cache->lastUse = dev->srLastUse;
++
++ if (isAWrite) {
++ cache->dirty = 1;
++ }
++ }
++}
++
++/* Invalidate a single cache page.
++ * Do this when a whole page gets written,
++ * ie the short cache for this page is no longer valid.
++ */
++static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
++{
++ if (object->myDev->nShortOpCaches > 0) {
++ yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
++
++ if (cache) {
++ cache->object = NULL;
++ }
++ }
++}
++
++/* Invalidate all the cache pages associated with this object
++ * Do this whenever ther file is deleted or resized.
++ */
++static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
++{
++ int i;
++ yaffs_Device *dev = in->myDev;
++
++ if (dev->nShortOpCaches > 0) {
++ /* Invalidate it. */
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ if (dev->srCache[i].object == in) {
++ dev->srCache[i].object = NULL;
++ }
++ }
++ }
++}
++
++/*--------------------- Checkpointing --------------------*/
++
++
++static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
++{
++ yaffs_CheckpointValidity cp;
++ cp.structType = sizeof(cp);
++ cp.magic = YAFFS_MAGIC;
++ cp.version = YAFFS_CHECKPOINT_VERSION;
++ cp.head = (head) ? 1 : 0;
++
++ return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
++ 1 : 0;
++}
++
++static int yaffs_ReadCheckpointValidityMarker(yaffs_Device *dev, int head)
++{
++ yaffs_CheckpointValidity cp;
++ int ok;
++
++ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
++
++ if(ok)
++ ok = (cp.structType == sizeof(cp)) &&
++ (cp.magic == YAFFS_MAGIC) &&
++ (cp.version == YAFFS_CHECKPOINT_VERSION) &&
++ (cp.head == ((head) ? 1 : 0));
++ return ok ? 1 : 0;
++}
++
++static void yaffs_DeviceToCheckpointDevice(yaffs_CheckpointDevice *cp,
++ yaffs_Device *dev)
++{
++ cp->nErasedBlocks = dev->nErasedBlocks;
++ cp->allocationBlock = dev->allocationBlock;
++ cp->allocationPage = dev->allocationPage;
++ cp->nFreeChunks = dev->nFreeChunks;
++
++ cp->nDeletedFiles = dev->nDeletedFiles;
++ cp->nUnlinkedFiles = dev->nUnlinkedFiles;
++ cp->nBackgroundDeletions = dev->nBackgroundDeletions;
++ cp->sequenceNumber = dev->sequenceNumber;
++ cp->oldestDirtySequence = dev->oldestDirtySequence;
++
++}
++
++static void yaffs_CheckpointDeviceToDevice(yaffs_Device *dev,
++ yaffs_CheckpointDevice *cp)
++{
++ dev->nErasedBlocks = cp->nErasedBlocks;
++ dev->allocationBlock = cp->allocationBlock;
++ dev->allocationPage = cp->allocationPage;
++ dev->nFreeChunks = cp->nFreeChunks;
++
++ dev->nDeletedFiles = cp->nDeletedFiles;
++ dev->nUnlinkedFiles = cp->nUnlinkedFiles;
++ dev->nBackgroundDeletions = cp->nBackgroundDeletions;
++ dev->sequenceNumber = cp->sequenceNumber;
++ dev->oldestDirtySequence = cp->oldestDirtySequence;
++}
++
++
++static int yaffs_WriteCheckpointDevice(yaffs_Device *dev)
++{
++ yaffs_CheckpointDevice cp;
++ __u32 nBytes;
++ __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
++
++ int ok;
++
++ /* Write device runtime values*/
++ yaffs_DeviceToCheckpointDevice(&cp,dev);
++ cp.structType = sizeof(cp);
++
++ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
++
++ /* Write block info */
++ if(ok) {
++ nBytes = nBlocks * sizeof(yaffs_BlockInfo);
++ ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
++ }
++
++ /* Write chunk bits */
++ if(ok) {
++ nBytes = nBlocks * dev->chunkBitmapStride;
++ ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
++ }
++ return ok ? 1 : 0;
++
++}
++
++static int yaffs_ReadCheckpointDevice(yaffs_Device *dev)
++{
++ yaffs_CheckpointDevice cp;
++ __u32 nBytes;
++ __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
++
++ int ok;
++
++ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
++ if(!ok)
++ return 0;
++
++ if(cp.structType != sizeof(cp))
++ return 0;
++
++
++ yaffs_CheckpointDeviceToDevice(dev,&cp);
++
++ nBytes = nBlocks * sizeof(yaffs_BlockInfo);
++
++ ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
++
++ if(!ok)
++ return 0;
++ nBytes = nBlocks * dev->chunkBitmapStride;
++
++ ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
++
++ return ok ? 1 : 0;
++}
++
++static void yaffs_ObjectToCheckpointObject(yaffs_CheckpointObject *cp,
++ yaffs_Object *obj)
++{
++
++ cp->objectId = obj->objectId;
++ cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
++ cp->chunkId = obj->chunkId;
++ cp->variantType = obj->variantType;
++ cp->deleted = obj->deleted;
++ cp->softDeleted = obj->softDeleted;
++ cp->unlinked = obj->unlinked;
++ cp->fake = obj->fake;
++ cp->renameAllowed = obj->renameAllowed;
++ cp->unlinkAllowed = obj->unlinkAllowed;
++ cp->serial = obj->serial;
++ cp->nDataChunks = obj->nDataChunks;
++
++ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
++ cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
++ else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
++ cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
++}
++
++static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
++{
++
++ yaffs_Object *parent;
++
++ obj->objectId = cp->objectId;
++
++ if(cp->parentId)
++ parent = yaffs_FindOrCreateObjectByNumber(
++ obj->myDev,
++ cp->parentId,
++ YAFFS_OBJECT_TYPE_DIRECTORY);
++ else
++ parent = NULL;
++
++ if(parent)
++ yaffs_AddObjectToDirectory(parent, obj);
++
++ obj->chunkId = cp->chunkId;
++ obj->variantType = cp->variantType;
++ obj->deleted = cp->deleted;
++ obj->softDeleted = cp->softDeleted;
++ obj->unlinked = cp->unlinked;
++ obj->fake = cp->fake;
++ obj->renameAllowed = cp->renameAllowed;
++ obj->unlinkAllowed = cp->unlinkAllowed;
++ obj->serial = cp->serial;
++ obj->nDataChunks = cp->nDataChunks;
++
++ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
++ obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
++ else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
++ obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
++
++ if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
++ obj->lazyLoaded = 1;
++}
++
++
++
++static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
++ __u32 level, int chunkOffset)
++{
++ int i;
++ yaffs_Device *dev = in->myDev;
++ int ok = 1;
++ int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
++
++ if (tn) {
++ if (level > 0) {
++
++ for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
++ if (tn->internal[i]) {
++ ok = yaffs_CheckpointTnodeWorker(in,
++ tn->internal[i],
++ level - 1,
++ (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
++ }
++ }
++ } else if (level == 0) {
++ __u32 baseOffset = chunkOffset << YAFFS_TNODES_LEVEL0_BITS;
++ /* printf("write tnode at %d\n",baseOffset); */
++ ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
++ if(ok)
++ ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
++ }
++ }
++
++ return ok;
++
++}
++
++static int yaffs_WriteCheckpointTnodes(yaffs_Object *obj)
++{
++ __u32 endMarker = ~0;
++ int ok = 1;
++
++ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
++ ok = yaffs_CheckpointTnodeWorker(obj,
++ obj->variant.fileVariant.top,
++ obj->variant.fileVariant.topLevel,
++ 0);
++ if(ok)
++ ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
++ sizeof(endMarker));
++ }
++
++ return ok ? 1 : 0;
++}
++
++static int yaffs_ReadCheckpointTnodes(yaffs_Object *obj)
++{
++ __u32 baseChunk;
++ int ok = 1;
++ yaffs_Device *dev = obj->myDev;
++ yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
++ yaffs_Tnode *tn;
++
++ ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
++
++ while(ok && (~baseChunk)){
++ /* Read level 0 tnode */
++
++ /* printf("read tnode at %d\n",baseChunk); */
++ tn = yaffs_GetTnodeRaw(dev);
++ if(tn)
++ ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
++ (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
++ else
++ ok = 0;
++
++ if(tn && ok){
++ ok = yaffs_AddOrFindLevel0Tnode(dev,
++ fileStructPtr,
++ baseChunk,
++ tn) ? 1 : 0;
++ }
++
++ if(ok)
++ ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
++
++ }
++
++ return ok ? 1 : 0;
++}
++
++
++static int yaffs_WriteCheckpointObjects(yaffs_Device *dev)
++{
++ yaffs_Object *obj;
++ yaffs_CheckpointObject cp;
++ int i;
++ int ok = 1;
++ struct list_head *lh;
++
++
++ /* Iterate through the objects in each hash entry,
++ * dumping them to the checkpointing stream.
++ */
++
++ for(i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++){
++ list_for_each(lh, &dev->objectBucket[i].list) {
++ if (lh) {
++ obj = list_entry(lh, yaffs_Object, hashLink);
++ if (!obj->deferedFree) {
++ yaffs_ObjectToCheckpointObject(&cp,obj);
++ cp.structType = sizeof(cp);
++
++ T(YAFFS_TRACE_CHECKPOINT,(
++ TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
++ cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
++
++ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
++
++ if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
++ ok = yaffs_WriteCheckpointTnodes(obj);
++ }
++ }
++ }
++ }
++ }
++
++ /* Dump end of list */
++ memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
++ cp.structType = sizeof(cp);
++
++ if(ok)
++ ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
++
++ return ok ? 1 : 0;
++}
++
++static int yaffs_ReadCheckpointObjects(yaffs_Device *dev)
++{
++ yaffs_Object *obj;
++ yaffs_CheckpointObject cp;
++ int ok = 1;
++ int done = 0;
++ yaffs_Object *hardList = NULL;
++
++ while(ok && !done) {
++ ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
++ if(cp.structType != sizeof(cp)) {
++ /* printf("structure parsing failed\n"); */
++ ok = 0;
++ }
++
++ if(ok && cp.objectId == ~0)
++ done = 1;
++ else if(ok){
++ obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
++ cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
++ if(obj) {
++ yaffs_CheckpointObjectToObject(obj,&cp);
++ if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
++ ok = yaffs_ReadCheckpointTnodes(obj);
++ } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
++ obj->hardLinks.next =
++ (struct list_head *)
++ hardList;
++ hardList = obj;
++ }
++
++ }
++ }
++ }
++
++ if(ok)
++ yaffs_HardlinkFixup(dev,hardList);
++
++ return ok ? 1 : 0;
++}
++
++static int yaffs_WriteCheckpointData(yaffs_Device *dev)
++{
++
++ int ok;
++
++ ok = yaffs_CheckpointOpen(dev,1);
++
++ if(ok)
++ ok = yaffs_WriteCheckpointValidityMarker(dev,1);
++ if(ok)
++ ok = yaffs_WriteCheckpointDevice(dev);
++ if(ok)
++ ok = yaffs_WriteCheckpointObjects(dev);
++ if(ok)
++ ok = yaffs_WriteCheckpointValidityMarker(dev,0);
++
++ if(!yaffs_CheckpointClose(dev))
++ ok = 0;
++
++ if(ok)
++ dev->isCheckpointed = 1;
++ else
++ dev->isCheckpointed = 0;
++
++ return dev->isCheckpointed;
++}
++
++static int yaffs_ReadCheckpointData(yaffs_Device *dev)
++{
++ int ok;
++
++ ok = yaffs_CheckpointOpen(dev,0); /* open for read */
++
++ if(ok)
++ ok = yaffs_ReadCheckpointValidityMarker(dev,1);
++ if(ok)
++ ok = yaffs_ReadCheckpointDevice(dev);
++ if(ok)
++ ok = yaffs_ReadCheckpointObjects(dev);
++ if(ok)
++ ok = yaffs_ReadCheckpointValidityMarker(dev,0);
++
++
++
++ if(!yaffs_CheckpointClose(dev))
++ ok = 0;
++
++ if(ok)
++ dev->isCheckpointed = 1;
++ else
++ dev->isCheckpointed = 0;
++
++ return ok ? 1 : 0;
++
++}
++
++static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
++{
++ if(dev->isCheckpointed ||
++ dev->blocksInCheckpoint > 0){
++ dev->isCheckpointed = 0;
++ yaffs_CheckpointInvalidateStream(dev);
++ if(dev->superBlock && dev->markSuperBlockDirty)
++ dev->markSuperBlockDirty(dev->superBlock);
++ }
++}
++
++
++int yaffs_CheckpointSave(yaffs_Device *dev)
++{
++ yaffs_ReportOddballBlocks(dev);
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
++
++ if(!dev->isCheckpointed)
++ yaffs_WriteCheckpointData(dev);
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
++
++ return dev->isCheckpointed;
++}
++
++int yaffs_CheckpointRestore(yaffs_Device *dev)
++{
++ int retval;
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
++
++ retval = yaffs_ReadCheckpointData(dev);
++
++ T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
++
++ yaffs_ReportOddballBlocks(dev);
++
++ return retval;
++}
++
++/*--------------------- File read/write ------------------------
++ * Read and write have very similar structures.
++ * In general the read/write has three parts to it
++ * An incomplete chunk to start with (if the read/write is not chunk-aligned)
++ * Some complete chunks
++ * An incomplete chunk to end off with
++ *
++ * Curve-balls: the first chunk might also be the last chunk.
++ */
++
++int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
++ int nBytes)
++{
++
++ int chunk;
++ int start;
++ int nToCopy;
++ int n = nBytes;
++ int nDone = 0;
++ yaffs_ChunkCache *cache;
++
++ yaffs_Device *dev;
++
++ dev = in->myDev;
++
++ while (n > 0) {
++ //chunk = offset / dev->nDataBytesPerChunk + 1;
++ //start = offset % dev->nDataBytesPerChunk;
++ yaffs_AddrToChunk(dev,offset,&chunk,&start);
++ chunk++;
++
++ /* OK now check for the curveball where the start and end are in
++ * the same chunk.
++ */
++ if ((start + n) < dev->nDataBytesPerChunk) {
++ nToCopy = n;
++ } else {
++ nToCopy = dev->nDataBytesPerChunk - start;
++ }
++
++ cache = yaffs_FindChunkCache(in, chunk);
++
++ /* If the chunk is already in the cache or it is less than a whole chunk
++ * then use the cache (if there is caching)
++ * else bypass the cache.
++ */
++ if (cache || nToCopy != dev->nDataBytesPerChunk) {
++ if (dev->nShortOpCaches > 0) {
++
++ /* If we can't find the data in the cache, then load it up. */
++
++ if (!cache) {
++ cache = yaffs_GrabChunkCache(in->myDev);
++ cache->object = in;
++ cache->chunkId = chunk;
++ cache->dirty = 0;
++ cache->locked = 0;
++ yaffs_ReadChunkDataFromObject(in, chunk,
++ cache->
++ data);
++ cache->nBytes = 0;
++ }
++
++ yaffs_UseChunkCache(dev, cache, 0);
++
++ cache->locked = 1;
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++ memcpy(buffer, &cache->data[start], nToCopy);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++#endif
++ cache->locked = 0;
++ } else {
++ /* Read into the local buffer then copy..*/
++
++ __u8 *localBuffer =
++ yaffs_GetTempBuffer(dev, __LINE__);
++ yaffs_ReadChunkDataFromObject(in, chunk,
++ localBuffer);
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++ memcpy(buffer, &localBuffer[start], nToCopy);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++#endif
++ yaffs_ReleaseTempBuffer(dev, localBuffer,
++ __LINE__);
++ }
++
++ } else {
++#ifdef CONFIG_YAFFS_WINCE
++ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
++
++ /* Under WinCE can't do direct transfer. Need to use a local buffer.
++ * This is because we otherwise screw up WinCE's memory mapper
++ */
++ yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++ memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
++#endif
++
++#else
++ /* A full chunk. Read directly into the supplied buffer. */
++ yaffs_ReadChunkDataFromObject(in, chunk, buffer);
++#endif
++ }
++
++ n -= nToCopy;
++ offset += nToCopy;
++ buffer += nToCopy;
++ nDone += nToCopy;
++
++ }
++
++ return nDone;
++}
++
++int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
++ int nBytes, int writeThrough)
++{
++
++ int chunk;
++ int start;
++ int nToCopy;
++ int n = nBytes;
++ int nDone = 0;
++ int nToWriteBack;
++ int startOfWrite = offset;
++ int chunkWritten = 0;
++ int nBytesRead;
++
++ yaffs_Device *dev;
++
++ dev = in->myDev;
++
++ while (n > 0 && chunkWritten >= 0) {
++ //chunk = offset / dev->nDataBytesPerChunk + 1;
++ //start = offset % dev->nDataBytesPerChunk;
++ yaffs_AddrToChunk(dev,offset,&chunk,&start);
++ chunk++;
++
++ /* OK now check for the curveball where the start and end are in
++ * the same chunk.
++ */
++
++ if ((start + n) < dev->nDataBytesPerChunk) {
++ nToCopy = n;
++
++ /* Now folks, to calculate how many bytes to write back....
++ * If we're overwriting and not writing to then end of file then
++ * we need to write back as much as was there before.
++ */
++
++ nBytesRead =
++ in->variant.fileVariant.fileSize -
++ ((chunk - 1) * dev->nDataBytesPerChunk);
++
++ if (nBytesRead > dev->nDataBytesPerChunk) {
++ nBytesRead = dev->nDataBytesPerChunk;
++ }
++
++ nToWriteBack =
++ (nBytesRead >
++ (start + n)) ? nBytesRead : (start + n);
++
++ } else {
++ nToCopy = dev->nDataBytesPerChunk - start;
++ nToWriteBack = dev->nDataBytesPerChunk;
++ }
++
++ if (nToCopy != dev->nDataBytesPerChunk) {
++ /* An incomplete start or end chunk (or maybe both start and end chunk) */
++ if (dev->nShortOpCaches > 0) {
++ yaffs_ChunkCache *cache;
++ /* If we can't find the data in the cache, then load the cache */
++ cache = yaffs_FindChunkCache(in, chunk);
++
++ if (!cache
++ && yaffs_CheckSpaceForAllocation(in->
++ myDev)) {
++ cache = yaffs_GrabChunkCache(in->myDev);
++ cache->object = in;
++ cache->chunkId = chunk;
++ cache->dirty = 0;
++ cache->locked = 0;
++ yaffs_ReadChunkDataFromObject(in, chunk,
++ cache->
++ data);
++ }
++ else if(cache &&
++ !cache->dirty &&
++ !yaffs_CheckSpaceForAllocation(in->myDev)){
++ /* Drop the cache if it was a read cache item and
++ * no space check has been made for it.
++ */
++ cache = NULL;
++ }
++
++ if (cache) {
++ yaffs_UseChunkCache(dev, cache, 1);
++ cache->locked = 1;
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++
++ memcpy(&cache->data[start], buffer,
++ nToCopy);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++#endif
++ cache->locked = 0;
++ cache->nBytes = nToWriteBack;
++
++ if (writeThrough) {
++ chunkWritten =
++ yaffs_WriteChunkDataToObject
++ (cache->object,
++ cache->chunkId,
++ cache->data, cache->nBytes,
++ 1);
++ cache->dirty = 0;
++ }
++
++ } else {
++ chunkWritten = -1; /* fail the write */
++ }
++ } else {
++ /* An incomplete start or end chunk (or maybe both start and end chunk)
++ * Read into the local buffer then copy, then copy over and write back.
++ */
++
++ __u8 *localBuffer =
++ yaffs_GetTempBuffer(dev, __LINE__);
++
++ yaffs_ReadChunkDataFromObject(in, chunk,
++ localBuffer);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++
++ memcpy(&localBuffer[start], buffer, nToCopy);
++
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++#endif
++ chunkWritten =
++ yaffs_WriteChunkDataToObject(in, chunk,
++ localBuffer,
++ nToWriteBack,
++ 0);
++
++ yaffs_ReleaseTempBuffer(dev, localBuffer,
++ __LINE__);
++
++ }
++
++ } else {
++
++#ifdef CONFIG_YAFFS_WINCE
++ /* Under WinCE can't do direct transfer. Need to use a local buffer.
++ * This is because we otherwise screw up WinCE's memory mapper
++ */
++ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_UnlockYAFFS(TRUE);
++#endif
++ memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_LockYAFFS(TRUE);
++#endif
++ chunkWritten =
++ yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
++ dev->nDataBytesPerChunk,
++ 0);
++ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
++#else
++ /* A full chunk. Write directly from the supplied buffer. */
++ chunkWritten =
++ yaffs_WriteChunkDataToObject(in, chunk, buffer,
++ dev->nDataBytesPerChunk,
++ 0);
++#endif
++ /* Since we've overwritten the cached data, we better invalidate it. */
++ yaffs_InvalidateChunkCache(in, chunk);
++ }
++
++ if (chunkWritten >= 0) {
++ n -= nToCopy;
++ offset += nToCopy;
++ buffer += nToCopy;
++ nDone += nToCopy;
++ }
++
++ }
++
++ /* Update file object */
++
++ if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
++ in->variant.fileVariant.fileSize = (startOfWrite + nDone);
++ }
++
++ in->dirty = 1;
++
++ return nDone;
++}
++
++
++/* ---------------------- File resizing stuff ------------------ */
++
++static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
++{
++
++ yaffs_Device *dev = in->myDev;
++ int oldFileSize = in->variant.fileVariant.fileSize;
++
++ int lastDel = 1 + (oldFileSize - 1) / dev->nDataBytesPerChunk;
++
++ int startDel = 1 + (newSize + dev->nDataBytesPerChunk - 1) /
++ dev->nDataBytesPerChunk;
++ int i;
++ int chunkId;
++
++ /* Delete backwards so that we don't end up with holes if
++ * power is lost part-way through the operation.
++ */
++ for (i = lastDel; i >= startDel; i--) {
++ /* NB this could be optimised somewhat,
++ * eg. could retrieve the tags and write them without
++ * using yaffs_DeleteChunk
++ */
++
++ chunkId = yaffs_FindAndDeleteChunkInFile(in, i, NULL);
++ if (chunkId > 0) {
++ if (chunkId <
++ (dev->internalStartBlock * dev->nChunksPerBlock)
++ || chunkId >=
++ ((dev->internalEndBlock +
++ 1) * dev->nChunksPerBlock)) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("Found daft chunkId %d for %d" TENDSTR),
++ chunkId, i));
++ } else {
++ in->nDataChunks--;
++ yaffs_DeleteChunk(dev, chunkId, 1, __LINE__);
++ }
++ }
++ }
++
++}
++
++int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
++{
++
++ int oldFileSize = in->variant.fileVariant.fileSize;
++ int newSizeOfPartialChunk;
++ int newFullChunks;
++
++ yaffs_Device *dev = in->myDev;
++
++ yaffs_AddrToChunk(dev, newSize, &newFullChunks, &newSizeOfPartialChunk);
++
++ yaffs_FlushFilesChunkCache(in);
++ yaffs_InvalidateWholeChunkCache(in);
++
++ yaffs_CheckGarbageCollection(dev);
++
++ if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
++ return yaffs_GetFileSize(in);
++ }
++
++ if (newSize == oldFileSize) {
++ return oldFileSize;
++ }
++
++ if (newSize < oldFileSize) {
++
++ yaffs_PruneResizedChunks(in, newSize);
++
++ if (newSizeOfPartialChunk != 0) {
++ int lastChunk = 1 + newFullChunks;
++
++ __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
++
++ /* Got to read and rewrite the last chunk with its new size and zero pad */
++ yaffs_ReadChunkDataFromObject(in, lastChunk,
++ localBuffer);
++
++ memset(localBuffer + newSizeOfPartialChunk, 0,
++ dev->nDataBytesPerChunk - newSizeOfPartialChunk);
++
++ yaffs_WriteChunkDataToObject(in, lastChunk, localBuffer,
++ newSizeOfPartialChunk, 1);
++
++ yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
++ }
++
++ in->variant.fileVariant.fileSize = newSize;
++
++ yaffs_PruneFileStructure(dev, &in->variant.fileVariant);
++ }
++ /* Write a new object header.
++ * show we've shrunk the file, if need be
++ * Do this only if the file is not in the deleted directories.
++ */
++ if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
++ in->parent->objectId != YAFFS_OBJECTID_DELETED) {
++ yaffs_UpdateObjectHeader(in, NULL, 0,
++ (newSize < oldFileSize) ? 1 : 0, 0);
++ }
++
++ return newSize;
++}
++
++loff_t yaffs_GetFileSize(yaffs_Object * obj)
++{
++ obj = yaffs_GetEquivalentObject(obj);
++
++ switch (obj->variantType) {
++ case YAFFS_OBJECT_TYPE_FILE:
++ return obj->variant.fileVariant.fileSize;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ return yaffs_strlen(obj->variant.symLinkVariant.alias);
++ default:
++ return 0;
++ }
++}
++
++
++
++int yaffs_FlushFile(yaffs_Object * in, int updateTime)
++{
++ int retVal;
++ if (in->dirty) {
++ yaffs_FlushFilesChunkCache(in);
++ if (updateTime) {
++#ifdef CONFIG_YAFFS_WINCE
++ yfsd_WinFileTimeNow(in->win_mtime);
++#else
++
++ in->yst_mtime = Y_CURRENT_TIME;
++
++#endif
++ }
++
++ retVal =
++ (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
++ 0) ? YAFFS_OK : YAFFS_FAIL;
++ } else {
++ retVal = YAFFS_OK;
++ }
++
++ return retVal;
++
++}
++
++static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
++{
++
++ /* First off, invalidate the file's data in the cache, without flushing. */
++ yaffs_InvalidateWholeChunkCache(in);
++
++ if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
++ /* Move to the unlinked directory so we have a record that it was deleted. */
++ yaffs_ChangeObjectName(in, in->myDev->deletedDir, NULL, 0, 0);
++
++ }
++
++ yaffs_RemoveObjectFromDirectory(in);
++ yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
++ in->chunkId = -1;
++
++ yaffs_FreeObject(in);
++ return YAFFS_OK;
++
++}
++
++/* yaffs_DeleteFile deletes the whole file data
++ * and the inode associated with the file.
++ * It does not delete the links associated with the file.
++ */
++static int yaffs_UnlinkFile(yaffs_Object * in)
++{
++
++ int retVal;
++ int immediateDeletion = 0;
++
++ if (1) {
++#ifdef __KERNEL__
++ if (!in->myInode) {
++ immediateDeletion = 1;
++
++ }
++#else
++ if (in->inUse <= 0) {
++ immediateDeletion = 1;
++
++ }
++#endif
++ if (immediateDeletion) {
++ retVal =
++ yaffs_ChangeObjectName(in, in->myDev->deletedDir,
++ NULL, 0, 0);
++ T(YAFFS_TRACE_TRACING,
++ (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
++ in->objectId));
++ in->deleted = 1;
++ in->myDev->nDeletedFiles++;
++ if (0 && in->myDev->isYaffs2) {
++ yaffs_ResizeFile(in, 0);
++ }
++ yaffs_SoftDeleteFile(in);
++ } else {
++ retVal =
++ yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
++ NULL, 0, 0);
++ }
++
++ }
++ return retVal;
++}
++
++int yaffs_DeleteFile(yaffs_Object * in)
++{
++ int retVal = YAFFS_OK;
++
++ if (in->nDataChunks > 0) {
++ /* Use soft deletion if there is data in the file */
++ if (!in->unlinked) {
++ retVal = yaffs_UnlinkFile(in);
++ }
++ if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
++ in->deleted = 1;
++ in->myDev->nDeletedFiles++;
++ yaffs_SoftDeleteFile(in);
++ }
++ return in->deleted ? YAFFS_OK : YAFFS_FAIL;
++ } else {
++ /* The file has no data chunks so we toss it immediately */
++ yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
++ in->variant.fileVariant.top = NULL;
++ yaffs_DoGenericObjectDeletion(in);
++
++ return YAFFS_OK;
++ }
++}
++
++static int yaffs_DeleteDirectory(yaffs_Object * in)
++{
++ /* First check that the directory is empty. */
++ if (list_empty(&in->variant.directoryVariant.children)) {
++ return yaffs_DoGenericObjectDeletion(in);
++ }
++
++ return YAFFS_FAIL;
++
++}
++
++static int yaffs_DeleteSymLink(yaffs_Object * in)
++{
++ YFREE(in->variant.symLinkVariant.alias);
++
++ return yaffs_DoGenericObjectDeletion(in);
++}
++
++static int yaffs_DeleteHardLink(yaffs_Object * in)
++{
++ /* remove this hardlink from the list assocaited with the equivalent
++ * object
++ */
++ list_del(&in->hardLinks);
++ return yaffs_DoGenericObjectDeletion(in);
++}
++
++static void yaffs_DestroyObject(yaffs_Object * obj)
++{
++ switch (obj->variantType) {
++ case YAFFS_OBJECT_TYPE_FILE:
++ yaffs_DeleteFile(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ yaffs_DeleteDirectory(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ yaffs_DeleteSymLink(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ yaffs_DeleteHardLink(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ yaffs_DoGenericObjectDeletion(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ break; /* should not happen. */
++ }
++}
++
++static int yaffs_UnlinkWorker(yaffs_Object * obj)
++{
++
++ if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
++ return yaffs_DeleteHardLink(obj);
++ } else if (!list_empty(&obj->hardLinks)) {
++ /* Curve ball: We're unlinking an object that has a hardlink.
++ *
++ * This problem arises because we are not strictly following
++ * The Linux link/inode model.
++ *
++ * We can't really delete the object.
++ * Instead, we do the following:
++ * - Select a hardlink.
++ * - Unhook it from the hard links
++ * - Unhook it from its parent directory (so that the rename can work)
++ * - Rename the object to the hardlink's name.
++ * - Delete the hardlink
++ */
++
++ yaffs_Object *hl;
++ int retVal;
++ YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
++
++ hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
++
++ list_del_init(&hl->hardLinks);
++ list_del_init(&hl->siblings);
++
++ yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
++
++ retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
++
++ if (retVal == YAFFS_OK) {
++ retVal = yaffs_DoGenericObjectDeletion(hl);
++ }
++ return retVal;
++
++ } else {
++ switch (obj->variantType) {
++ case YAFFS_OBJECT_TYPE_FILE:
++ return yaffs_UnlinkFile(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ return yaffs_DeleteDirectory(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ return yaffs_DeleteSymLink(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ return yaffs_DoGenericObjectDeletion(obj);
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ default:
++ return YAFFS_FAIL;
++ }
++ }
++}
++
++
++static int yaffs_UnlinkObject( yaffs_Object *obj)
++{
++
++ if (obj && obj->unlinkAllowed) {
++ return yaffs_UnlinkWorker(obj);
++ }
++
++ return YAFFS_FAIL;
++
++}
++int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
++{
++ yaffs_Object *obj;
++
++ obj = yaffs_FindObjectByName(dir, name);
++ return yaffs_UnlinkObject(obj);
++}
++
++/*----------------------- Initialisation Scanning ---------------------- */
++
++static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
++ int backwardScanning)
++{
++ yaffs_Object *obj;
++
++ if (!backwardScanning) {
++ /* Handle YAFFS1 forward scanning case
++ * For YAFFS1 we always do the deletion
++ */
++
++ } else {
++ /* Handle YAFFS2 case (backward scanning)
++ * If the shadowed object exists then ignore.
++ */
++ if (yaffs_FindObjectByNumber(dev, objId)) {
++ return;
++ }
++ }
++
++ /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
++ * We put it in unlinked dir to be cleaned up after the scanning
++ */
++ obj =
++ yaffs_FindOrCreateObjectByNumber(dev, objId,
++ YAFFS_OBJECT_TYPE_FILE);
++ yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
++ obj->variant.fileVariant.shrinkSize = 0;
++ obj->valid = 1; /* So that we don't read any other info for this file */
++
++}
++
++typedef struct {
++ int seq;
++ int block;
++} yaffs_BlockIndex;
++
++
++static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList)
++{
++ yaffs_Object *hl;
++ yaffs_Object *in;
++
++ while (hardList) {
++ hl = hardList;
++ hardList = (yaffs_Object *) (hardList->hardLinks.next);
++
++ in = yaffs_FindObjectByNumber(dev,
++ hl->variant.hardLinkVariant.
++ equivalentObjectId);
++
++ if (in) {
++ /* Add the hardlink pointers */
++ hl->variant.hardLinkVariant.equivalentObject = in;
++ list_add(&hl->hardLinks, &in->hardLinks);
++ } else {
++ /* Todo Need to report/handle this better.
++ * Got a problem... hardlink to a non-existant object
++ */
++ hl->variant.hardLinkVariant.equivalentObject = NULL;
++ INIT_LIST_HEAD(&hl->hardLinks);
++
++ }
++
++ }
++
++}
++
++
++
++
++
++static int ybicmp(const void *a, const void *b){
++ register int aseq = ((yaffs_BlockIndex *)a)->seq;
++ register int bseq = ((yaffs_BlockIndex *)b)->seq;
++ register int ablock = ((yaffs_BlockIndex *)a)->block;
++ register int bblock = ((yaffs_BlockIndex *)b)->block;
++ if( aseq == bseq )
++ return ablock - bblock;
++ else
++ return aseq - bseq;
++
++}
++
++static int yaffs_Scan(yaffs_Device * dev)
++{
++ yaffs_ExtendedTags tags;
++ int blk;
++ int blockIterator;
++ int startIterator;
++ int endIterator;
++ int nBlocksToScan = 0;
++ int result;
++
++ int chunk;
++ int c;
++ int deleted;
++ yaffs_BlockState state;
++ yaffs_Object *hardList = NULL;
++ yaffs_Object *hl;
++ yaffs_BlockInfo *bi;
++ int sequenceNumber;
++ yaffs_ObjectHeader *oh;
++ yaffs_Object *in;
++ yaffs_Object *parent;
++ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
++
++ __u8 *chunkData;
++
++ yaffs_BlockIndex *blockIndex = NULL;
++
++ if (dev->isYaffs2) {
++ T(YAFFS_TRACE_SCAN,
++ (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ //TODO Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
++
++ T(YAFFS_TRACE_SCAN,
++ (TSTR("yaffs_Scan starts intstartblk %d intendblk %d..." TENDSTR),
++ dev->internalStartBlock, dev->internalEndBlock));
++
++ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
++
++ dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
++
++ if (dev->isYaffs2) {
++ blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
++ }
++
++ /* Scan all the blocks to determine their state */
++ for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
++ bi = yaffs_GetBlockInfo(dev, blk);
++ yaffs_ClearChunkBits(dev, blk);
++ bi->pagesInUse = 0;
++ bi->softDeletions = 0;
++
++ yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
++
++ bi->blockState = state;
++ bi->sequenceNumber = sequenceNumber;
++
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
++ state, sequenceNumber));
++
++ if (state == YAFFS_BLOCK_STATE_DEAD) {
++ T(YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("block %d is bad" TENDSTR), blk));
++ } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("Block empty " TENDSTR)));
++ dev->nErasedBlocks++;
++ dev->nFreeChunks += dev->nChunksPerBlock;
++ } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
++
++ /* Determine the highest sequence number */
++ if (dev->isYaffs2 &&
++ sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
++ sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
++
++ blockIndex[nBlocksToScan].seq = sequenceNumber;
++ blockIndex[nBlocksToScan].block = blk;
++
++ nBlocksToScan++;
++
++ if (sequenceNumber >= dev->sequenceNumber) {
++ dev->sequenceNumber = sequenceNumber;
++ }
++ } else if (dev->isYaffs2) {
++ /* TODO: Nasty sequence number! */
++ T(YAFFS_TRACE_SCAN,
++ (TSTR
++ ("Block scanning block %d has bad sequence number %d"
++ TENDSTR), blk, sequenceNumber));
++
++ }
++ }
++ }
++
++ /* Sort the blocks
++ * Dungy old bubble sort for now...
++ */
++ if (dev->isYaffs2) {
++ yaffs_BlockIndex temp;
++ int i;
++ int j;
++
++ for (i = 0; i < nBlocksToScan; i++)
++ for (j = i + 1; j < nBlocksToScan; j++)
++ if (blockIndex[i].seq > blockIndex[j].seq) {
++ temp = blockIndex[j];
++ blockIndex[j] = blockIndex[i];
++ blockIndex[i] = temp;
++ }
++ }
++
++ /* Now scan the blocks looking at the data. */
++ if (dev->isYaffs2) {
++ startIterator = 0;
++ endIterator = nBlocksToScan - 1;
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
++ } else {
++ startIterator = dev->internalStartBlock;
++ endIterator = dev->internalEndBlock;
++ }
++
++ /* For each block.... */
++ for (blockIterator = startIterator; blockIterator <= endIterator;
++ blockIterator++) {
++
++ if (dev->isYaffs2) {
++ /* get the block to scan in the correct order */
++ blk = blockIndex[blockIterator].block;
++ } else {
++ blk = blockIterator;
++ }
++
++ bi = yaffs_GetBlockInfo(dev, blk);
++ state = bi->blockState;
++
++ deleted = 0;
++
++ /* For each chunk in each block that needs scanning....*/
++ for (c = 0; c < dev->nChunksPerBlock &&
++ state == YAFFS_BLOCK_STATE_NEEDS_SCANNING; c++) {
++ /* Read the tags and decide what to do */
++ chunk = blk * dev->nChunksPerBlock + c;
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
++ &tags);
++
++ /* Let's have a good look at this chunk... */
++
++ if (!dev->isYaffs2 && tags.chunkDeleted) {
++ /* YAFFS1 only...
++ * A deleted chunk
++ */
++ deleted++;
++ dev->nFreeChunks++;
++ /*T((" %d %d deleted\n",blk,c)); */
++ } else if (!tags.chunkUsed) {
++ /* An unassigned chunk in the block
++ * This means that either the block is empty or
++ * this is the one being allocated from
++ */
++
++ if (c == 0) {
++ /* We're looking at the first chunk in the block so the block is unused */
++ state = YAFFS_BLOCK_STATE_EMPTY;
++ dev->nErasedBlocks++;
++ } else {
++ /* this is the block being allocated from */
++ T(YAFFS_TRACE_SCAN,
++ (TSTR
++ (" Allocating from %d %d" TENDSTR),
++ blk, c));
++ state = YAFFS_BLOCK_STATE_ALLOCATING;
++ dev->allocationBlock = blk;
++ dev->allocationPage = c;
++ dev->allocationBlockFinder = blk;
++ /* Set it to here to encourage the allocator to go forth from here. */
++
++ /* Yaffs2 sanity check:
++ * This should be the one with the highest sequence number
++ */
++ if (dev->isYaffs2
++ && (dev->sequenceNumber !=
++ bi->sequenceNumber)) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("yaffs: Allocation block %d was not highest sequence id:"
++ " block seq = %d, dev seq = %d"
++ TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
++ }
++ }
++
++ dev->nFreeChunks += (dev->nChunksPerBlock - c);
++ } else if (tags.chunkId > 0) {
++ /* chunkId > 0 so it is a data chunk... */
++ unsigned int endpos;
++
++ yaffs_SetChunkBit(dev, blk, c);
++ bi->pagesInUse++;
++
++ in = yaffs_FindOrCreateObjectByNumber(dev,
++ tags.
++ objectId,
++ YAFFS_OBJECT_TYPE_FILE);
++ /* PutChunkIntoFile checks for a clash (two data chunks with
++ * the same chunkId).
++ */
++ yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,
++ 1);
++ endpos =
++ (tags.chunkId - 1) * dev->nDataBytesPerChunk +
++ tags.byteCount;
++ if (in->variantType == YAFFS_OBJECT_TYPE_FILE
++ && in->variant.fileVariant.scannedFileSize <
++ endpos) {
++ in->variant.fileVariant.
++ scannedFileSize = endpos;
++ if (!dev->useHeaderFileSize) {
++ in->variant.fileVariant.
++ fileSize =
++ in->variant.fileVariant.
++ scannedFileSize;
++ }
++
++ }
++ /* T((" %d %d data %d %d\n",blk,c,tags.objectId,tags.chunkId)); */
++ } else {
++ /* chunkId == 0, so it is an ObjectHeader.
++ * Thus, we read in the object header and make the object
++ */
++ yaffs_SetChunkBit(dev, blk, c);
++ bi->pagesInUse++;
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
++ chunkData,
++ NULL);
++
++ oh = (yaffs_ObjectHeader *) chunkData;
++
++ in = yaffs_FindObjectByNumber(dev,
++ tags.objectId);
++ if (in && in->variantType != oh->type) {
++ /* This should not happen, but somehow
++ * Wev'e ended up with an objectId that has been reused but not yet
++ * deleted, and worse still it has changed type. Delete the old object.
++ */
++
++ yaffs_DestroyObject(in);
++
++ in = 0;
++ }
++
++ in = yaffs_FindOrCreateObjectByNumber(dev,
++ tags.
++ objectId,
++ oh->type);
++
++ if (oh->shadowsObject > 0) {
++ yaffs_HandleShadowedObject(dev,
++ oh->
++ shadowsObject,
++ 0);
++ }
++
++ if (in->valid) {
++ /* We have already filled this one. We have a duplicate and need to resolve it. */
++
++ unsigned existingSerial = in->serial;
++ unsigned newSerial = tags.serialNumber;
++
++ if (dev->isYaffs2 ||
++ ((existingSerial + 1) & 3) ==
++ newSerial) {
++ /* Use new one - destroy the exisiting one */
++ yaffs_DeleteChunk(dev,
++ in->chunkId,
++ 1, __LINE__);
++ in->valid = 0;
++ } else {
++ /* Use existing - destroy this one. */
++ yaffs_DeleteChunk(dev, chunk, 1,
++ __LINE__);
++ }
++ }
++
++ if (!in->valid &&
++ (tags.objectId == YAFFS_OBJECTID_ROOT ||
++ tags.objectId == YAFFS_OBJECTID_LOSTNFOUND)) {
++ /* We only load some info, don't fiddle with directory structure */
++ in->valid = 1;
++ in->variantType = oh->type;
++
++ in->yst_mode = oh->yst_mode;
++#ifdef CONFIG_YAFFS_WINCE
++ in->win_atime[0] = oh->win_atime[0];
++ in->win_ctime[0] = oh->win_ctime[0];
++ in->win_mtime[0] = oh->win_mtime[0];
++ in->win_atime[1] = oh->win_atime[1];
++ in->win_ctime[1] = oh->win_ctime[1];
++ in->win_mtime[1] = oh->win_mtime[1];
++#else
++ in->yst_uid = oh->yst_uid;
++ in->yst_gid = oh->yst_gid;
++ in->yst_atime = oh->yst_atime;
++ in->yst_mtime = oh->yst_mtime;
++ in->yst_ctime = oh->yst_ctime;
++ in->yst_rdev = oh->yst_rdev;
++#endif
++ in->chunkId = chunk;
++
++ } else if (!in->valid) {
++ /* we need to load this info */
++
++ in->valid = 1;
++ in->variantType = oh->type;
++
++ in->yst_mode = oh->yst_mode;
++#ifdef CONFIG_YAFFS_WINCE
++ in->win_atime[0] = oh->win_atime[0];
++ in->win_ctime[0] = oh->win_ctime[0];
++ in->win_mtime[0] = oh->win_mtime[0];
++ in->win_atime[1] = oh->win_atime[1];
++ in->win_ctime[1] = oh->win_ctime[1];
++ in->win_mtime[1] = oh->win_mtime[1];
++#else
++ in->yst_uid = oh->yst_uid;
++ in->yst_gid = oh->yst_gid;
++ in->yst_atime = oh->yst_atime;
++ in->yst_mtime = oh->yst_mtime;
++ in->yst_ctime = oh->yst_ctime;
++ in->yst_rdev = oh->yst_rdev;
++#endif
++ in->chunkId = chunk;
++
++ yaffs_SetObjectName(in, oh->name);
++ in->dirty = 0;
++
++ /* directory stuff...
++ * hook up to parent
++ */
++
++ parent =
++ yaffs_FindOrCreateObjectByNumber
++ (dev, oh->parentObjectId,
++ YAFFS_OBJECT_TYPE_DIRECTORY);
++ if (parent->variantType ==
++ YAFFS_OBJECT_TYPE_UNKNOWN) {
++ /* Set up as a directory */
++ parent->variantType =
++ YAFFS_OBJECT_TYPE_DIRECTORY;
++ INIT_LIST_HEAD(&parent->variant.
++ directoryVariant.
++ children);
++ } else if (parent->variantType !=
++ YAFFS_OBJECT_TYPE_DIRECTORY)
++ {
++ /* Hoosterman, another problem....
++ * We're trying to use a non-directory as a directory
++ */
++
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs tragedy: attempting to use non-directory as"
++ " a directory in scan. Put in lost+found."
++ TENDSTR)));
++ parent = dev->lostNFoundDir;
++ }
++
++ yaffs_AddObjectToDirectory(parent, in);
++
++ if (0 && (parent == dev->deletedDir ||
++ parent == dev->unlinkedDir)) {
++ in->deleted = 1; /* If it is unlinked at start up then it wants deleting */
++ dev->nDeletedFiles++;
++ }
++ /* Note re hardlinks.
++ * Since we might scan a hardlink before its equivalent object is scanned
++ * we put them all in a list.
++ * After scanning is complete, we should have all the objects, so we run through this
++ * list and fix up all the chains.
++ */
++
++ switch (in->variantType) {
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ /* Todo got a problem */
++ break;
++ case YAFFS_OBJECT_TYPE_FILE:
++ if (dev->isYaffs2
++ && oh->isShrink) {
++ /* Prune back the shrunken chunks */
++ yaffs_PruneResizedChunks
++ (in, oh->fileSize);
++ /* Mark the block as having a shrinkHeader */
++ bi->hasShrinkHeader = 1;
++ }
++
++ if (dev->useHeaderFileSize)
++
++ in->variant.fileVariant.
++ fileSize =
++ oh->fileSize;
++
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ in->variant.hardLinkVariant.
++ equivalentObjectId =
++ oh->equivalentObjectId;
++ in->hardLinks.next =
++ (struct list_head *)
++ hardList;
++ hardList = in;
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ in->variant.symLinkVariant.
++ alias =
++ yaffs_CloneString(oh->alias);
++ break;
++ }
++
++ if (parent == dev->deletedDir) {
++ yaffs_DestroyObject(in);
++ bi->hasShrinkHeader = 1;
++ }
++ }
++ }
++ }
++
++ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
++ /* If we got this far while scanning, then the block is fully allocated.*/
++ state = YAFFS_BLOCK_STATE_FULL;
++ }
++
++ bi->blockState = state;
++
++ /* Now let's see if it was dirty */
++ if (bi->pagesInUse == 0 &&
++ !bi->hasShrinkHeader &&
++ bi->blockState == YAFFS_BLOCK_STATE_FULL) {
++ yaffs_BlockBecameDirty(dev, blk);
++ }
++
++ }
++
++ if (blockIndex) {
++ YFREE(blockIndex);
++ }
++
++
++ /* Ok, we've done all the scanning.
++ * Fix up the hard link chains.
++ * We should now have scanned all the objects, now it's time to add these
++ * hardlinks.
++ */
++
++ yaffs_HardlinkFixup(dev,hardList);
++
++ /* Handle the unlinked files. Since they were left in an unlinked state we should
++ * just delete them.
++ */
++ {
++ struct list_head *i;
++ struct list_head *n;
++
++ yaffs_Object *l;
++ /* Soft delete all the unlinked files */
++ list_for_each_safe(i, n,
++ &dev->unlinkedDir->variant.directoryVariant.
++ children) {
++ if (i) {
++ l = list_entry(i, yaffs_Object, siblings);
++ yaffs_DestroyObject(l);
++ }
++ }
++ }
++
++ yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
++
++ T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
++
++ return YAFFS_OK;
++}
++
++static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
++{
++ __u8 *chunkData;
++ yaffs_ObjectHeader *oh;
++ yaffs_Device *dev = in->myDev;
++ yaffs_ExtendedTags tags;
++ int result;
++
++#if 0
++ T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
++ in->objectId,
++ in->lazyLoaded ? "not yet" : "already"));
++#endif
++
++ if(in->lazyLoaded){
++ in->lazyLoaded = 0;
++ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
++ oh = (yaffs_ObjectHeader *) chunkData;
++
++ in->yst_mode = oh->yst_mode;
++#ifdef CONFIG_YAFFS_WINCE
++ in->win_atime[0] = oh->win_atime[0];
++ in->win_ctime[0] = oh->win_ctime[0];
++ in->win_mtime[0] = oh->win_mtime[0];
++ in->win_atime[1] = oh->win_atime[1];
++ in->win_ctime[1] = oh->win_ctime[1];
++ in->win_mtime[1] = oh->win_mtime[1];
++#else
++ in->yst_uid = oh->yst_uid;
++ in->yst_gid = oh->yst_gid;
++ in->yst_atime = oh->yst_atime;
++ in->yst_mtime = oh->yst_mtime;
++ in->yst_ctime = oh->yst_ctime;
++ in->yst_rdev = oh->yst_rdev;
++
++#endif
++ yaffs_SetObjectName(in, oh->name);
++
++ if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
++ in->variant.symLinkVariant.alias =
++ yaffs_CloneString(oh->alias);
++
++ yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
++ }
++}
++
++static int yaffs_ScanBackwards(yaffs_Device * dev)
++{
++ yaffs_ExtendedTags tags;
++ int blk;
++ int blockIterator;
++ int startIterator;
++ int endIterator;
++ int nBlocksToScan = 0;
++
++ int chunk;
++ int result;
++ int c;
++ int deleted;
++ yaffs_BlockState state;
++ yaffs_Object *hardList = NULL;
++ yaffs_BlockInfo *bi;
++ int sequenceNumber;
++ yaffs_ObjectHeader *oh;
++ yaffs_Object *in;
++ yaffs_Object *parent;
++ int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
++ int itsUnlinked;
++ __u8 *chunkData;
++
++ int fileSize;
++ int isShrink;
++ int foundChunksInBlock;
++ int equivalentObjectId;
++
++
++ yaffs_BlockIndex *blockIndex = NULL;
++ int altBlockIndex = 0;
++
++ if (!dev->isYaffs2) {
++ T(YAFFS_TRACE_SCAN,
++ (TSTR("yaffs_ScanBackwards is only for YAFFS2!" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ T(YAFFS_TRACE_SCAN,
++ (TSTR
++ ("yaffs_ScanBackwards starts intstartblk %d intendblk %d..."
++ TENDSTR), dev->internalStartBlock, dev->internalEndBlock));
++
++
++ dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
++
++ blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
++
++ if(!blockIndex) {
++ blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
++ altBlockIndex = 1;
++ }
++
++ if(!blockIndex) {
++ T(YAFFS_TRACE_SCAN,
++ (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ chunkData = yaffs_GetTempBuffer(dev, __LINE__);
++
++ /* Scan all the blocks to determine their state */
++ for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
++ bi = yaffs_GetBlockInfo(dev, blk);
++ yaffs_ClearChunkBits(dev, blk);
++ bi->pagesInUse = 0;
++ bi->softDeletions = 0;
++
++ yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
++
++ bi->blockState = state;
++ bi->sequenceNumber = sequenceNumber;
++
++ if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
++ bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
++
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
++ state, sequenceNumber));
++
++
++ if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
++ /* todo .. fix free space ? */
++
++ } else if (state == YAFFS_BLOCK_STATE_DEAD) {
++ T(YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("block %d is bad" TENDSTR), blk));
++ } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("Block empty " TENDSTR)));
++ dev->nErasedBlocks++;
++ dev->nFreeChunks += dev->nChunksPerBlock;
++ } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
++
++ /* Determine the highest sequence number */
++ if (dev->isYaffs2 &&
++ sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
++ sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
++
++ blockIndex[nBlocksToScan].seq = sequenceNumber;
++ blockIndex[nBlocksToScan].block = blk;
++
++ nBlocksToScan++;
++
++ if (sequenceNumber >= dev->sequenceNumber) {
++ dev->sequenceNumber = sequenceNumber;
++ }
++ } else if (dev->isYaffs2) {
++ /* TODO: Nasty sequence number! */
++ T(YAFFS_TRACE_SCAN,
++ (TSTR
++ ("Block scanning block %d has bad sequence number %d"
++ TENDSTR), blk, sequenceNumber));
++
++ }
++ }
++ }
++
++ T(YAFFS_TRACE_SCAN,
++ (TSTR("%d blocks to be sorted..." TENDSTR), nBlocksToScan));
++
++
++
++ YYIELD();
++
++ /* Sort the blocks */
++#ifndef CONFIG_YAFFS_USE_OWN_SORT
++ {
++ /* Use qsort now. */
++ qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
++ }
++#else
++ {
++ /* Dungy old bubble sort... */
++
++ yaffs_BlockIndex temp;
++ int i;
++ int j;
++
++ for (i = 0; i < nBlocksToScan; i++)
++ for (j = i + 1; j < nBlocksToScan; j++)
++ if (blockIndex[i].seq > blockIndex[j].seq) {
++ temp = blockIndex[j];
++ blockIndex[j] = blockIndex[i];
++ blockIndex[i] = temp;
++ }
++ }
++#endif
++
++ YYIELD();
++
++ T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
++
++ /* Now scan the blocks looking at the data. */
++ startIterator = 0;
++ endIterator = nBlocksToScan - 1;
++ T(YAFFS_TRACE_SCAN_DEBUG,
++ (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
++
++ /* For each block.... backwards */
++ for (blockIterator = endIterator; blockIterator >= startIterator;
++ blockIterator--) {
++ /* Cooperative multitasking! This loop can run for so
++ long that watchdog timers expire. */
++ YYIELD();
++
++ /* get the block to scan in the correct order */
++ blk = blockIndex[blockIterator].block;
++
++ bi = yaffs_GetBlockInfo(dev, blk);
++ state = bi->blockState;
++
++ deleted = 0;
++
++ /* For each chunk in each block that needs scanning.... */
++ foundChunksInBlock = 0;
++ for (c = dev->nChunksPerBlock - 1; c >= 0 &&
++ (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
++ state == YAFFS_BLOCK_STATE_ALLOCATING); c--) {
++ /* Scan backwards...
++ * Read the tags and decide what to do
++ */
++ chunk = blk * dev->nChunksPerBlock + c;
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
++ &tags);
++
++ /* Let's have a good look at this chunk... */
++
++ if (!tags.chunkUsed) {
++ /* An unassigned chunk in the block.
++ * If there are used chunks after this one, then
++ * it is a chunk that was skipped due to failing the erased
++ * check. Just skip it so that it can be deleted.
++ * But, more typically, We get here when this is an unallocated
++ * chunk and his means that either the block is empty or
++ * this is the one being allocated from
++ */
++
++ if(foundChunksInBlock)
++ {
++ /* This is a chunk that was skipped due to failing the erased check */
++
++ } else if (c == 0) {
++ /* We're looking at the first chunk in the block so the block is unused */
++ state = YAFFS_BLOCK_STATE_EMPTY;
++ dev->nErasedBlocks++;
++ } else {
++ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
++ state == YAFFS_BLOCK_STATE_ALLOCATING) {
++ if(dev->sequenceNumber == bi->sequenceNumber) {
++ /* this is the block being allocated from */
++
++ T(YAFFS_TRACE_SCAN,
++ (TSTR
++ (" Allocating from %d %d"
++ TENDSTR), blk, c));
++
++ state = YAFFS_BLOCK_STATE_ALLOCATING;
++ dev->allocationBlock = blk;
++ dev->allocationPage = c;
++ dev->allocationBlockFinder = blk;
++ }
++ else {
++ /* This is a partially written block that is not
++ * the current allocation block. This block must have
++ * had a write failure, so set up for retirement.
++ */
++
++ bi->needsRetiring = 1;
++ bi->gcPrioritise = 1;
++
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("Partially written block %d being set for retirement" TENDSTR),
++ blk));
++ }
++
++ }
++
++ }
++
++ dev->nFreeChunks++;
++
++ } else if (tags.chunkId > 0) {
++ /* chunkId > 0 so it is a data chunk... */
++ unsigned int endpos;
++ __u32 chunkBase =
++ (tags.chunkId - 1) * dev->nDataBytesPerChunk;
++
++ foundChunksInBlock = 1;
++
++
++ yaffs_SetChunkBit(dev, blk, c);
++ bi->pagesInUse++;
++
++ in = yaffs_FindOrCreateObjectByNumber(dev,
++ tags.
++ objectId,
++ YAFFS_OBJECT_TYPE_FILE);
++ if (in->variantType == YAFFS_OBJECT_TYPE_FILE
++ && chunkBase <
++ in->variant.fileVariant.shrinkSize) {
++ /* This has not been invalidated by a resize */
++ yaffs_PutChunkIntoFile(in, tags.chunkId,
++ chunk, -1);
++
++ /* File size is calculated by looking at the data chunks if we have not
++ * seen an object header yet. Stop this practice once we find an object header.
++ */
++ endpos =
++ (tags.chunkId -
++ 1) * dev->nDataBytesPerChunk +
++ tags.byteCount;
++
++ if (!in->valid && /* have not got an object header yet */
++ in->variant.fileVariant.
++ scannedFileSize < endpos) {
++ in->variant.fileVariant.
++ scannedFileSize = endpos;
++ in->variant.fileVariant.
++ fileSize =
++ in->variant.fileVariant.
++ scannedFileSize;
++ }
++
++ } else {
++ /* This chunk has been invalidated by a resize, so delete */
++ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
++
++ }
++ } else {
++ /* chunkId == 0, so it is an ObjectHeader.
++ * Thus, we read in the object header and make the object
++ */
++ foundChunksInBlock = 1;
++
++ yaffs_SetChunkBit(dev, blk, c);
++ bi->pagesInUse++;
++
++ oh = NULL;
++ in = NULL;
++
++ if (tags.extraHeaderInfoAvailable) {
++ in = yaffs_FindOrCreateObjectByNumber
++ (dev, tags.objectId,
++ tags.extraObjectType);
++ }
++
++ if (!in ||
++#ifdef CONFIG_YAFFS_DISABLE_LAZY_LOAD
++ !in->valid ||
++#endif
++ tags.extraShadows ||
++ (!in->valid &&
++ (tags.objectId == YAFFS_OBJECTID_ROOT ||
++ tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
++ ) {
++
++ /* If we don't have valid info then we need to read the chunk
++ * TODO In future we can probably defer reading the chunk and
++ * living with invalid data until needed.
++ */
++
++ result = yaffs_ReadChunkWithTagsFromNAND(dev,
++ chunk,
++ chunkData,
++ NULL);
++
++ oh = (yaffs_ObjectHeader *) chunkData;
++
++ if (!in)
++ in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
++
++ }
++
++ if (!in) {
++ /* TODO Hoosterman we have a problem! */
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs tragedy: Could not make object for object %d "
++ "at chunk %d during scan"
++ TENDSTR), tags.objectId, chunk));
++
++ }
++
++ if (in->valid) {
++ /* We have already filled this one.
++ * We have a duplicate that will be discarded, but
++ * we first have to suck out resize info if it is a file.
++ */
++
++ if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
++ ((oh &&
++ oh-> type == YAFFS_OBJECT_TYPE_FILE)||
++ (tags.extraHeaderInfoAvailable &&
++ tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
++ ) {
++ __u32 thisSize =
++ (oh) ? oh->fileSize : tags.
++ extraFileLength;
++ __u32 parentObjectId =
++ (oh) ? oh->
++ parentObjectId : tags.
++ extraParentObjectId;
++ unsigned isShrink =
++ (oh) ? oh->isShrink : tags.
++ extraIsShrinkHeader;
++
++ /* If it is deleted (unlinked at start also means deleted)
++ * we treat the file size as being zeroed at this point.
++ */
++ if (parentObjectId ==
++ YAFFS_OBJECTID_DELETED
++ || parentObjectId ==
++ YAFFS_OBJECTID_UNLINKED) {
++ thisSize = 0;
++ isShrink = 1;
++ }
++
++ if (isShrink &&
++ in->variant.fileVariant.
++ shrinkSize > thisSize) {
++ in->variant.fileVariant.
++ shrinkSize =
++ thisSize;
++ }
++
++ if (isShrink) {
++ bi->hasShrinkHeader = 1;
++ }
++
++ }
++ /* Use existing - destroy this one. */
++ yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
++
++ }
++
++ if (!in->valid &&
++ (tags.objectId == YAFFS_OBJECTID_ROOT ||
++ tags.objectId ==
++ YAFFS_OBJECTID_LOSTNFOUND)) {
++ /* We only load some info, don't fiddle with directory structure */
++ in->valid = 1;
++
++ if(oh) {
++ in->variantType = oh->type;
++
++ in->yst_mode = oh->yst_mode;
++#ifdef CONFIG_YAFFS_WINCE
++ in->win_atime[0] = oh->win_atime[0];
++ in->win_ctime[0] = oh->win_ctime[0];
++ in->win_mtime[0] = oh->win_mtime[0];
++ in->win_atime[1] = oh->win_atime[1];
++ in->win_ctime[1] = oh->win_ctime[1];
++ in->win_mtime[1] = oh->win_mtime[1];
++#else
++ in->yst_uid = oh->yst_uid;
++ in->yst_gid = oh->yst_gid;
++ in->yst_atime = oh->yst_atime;
++ in->yst_mtime = oh->yst_mtime;
++ in->yst_ctime = oh->yst_ctime;
++ in->yst_rdev = oh->yst_rdev;
++
++#endif
++ } else {
++ in->variantType = tags.extraObjectType;
++ in->lazyLoaded = 1;
++ }
++
++ in->chunkId = chunk;
++
++ } else if (!in->valid) {
++ /* we need to load this info */
++
++ in->valid = 1;
++ in->chunkId = chunk;
++
++ if(oh) {
++ in->variantType = oh->type;
++
++ in->yst_mode = oh->yst_mode;
++#ifdef CONFIG_YAFFS_WINCE
++ in->win_atime[0] = oh->win_atime[0];
++ in->win_ctime[0] = oh->win_ctime[0];
++ in->win_mtime[0] = oh->win_mtime[0];
++ in->win_atime[1] = oh->win_atime[1];
++ in->win_ctime[1] = oh->win_ctime[1];
++ in->win_mtime[1] = oh->win_mtime[1];
++#else
++ in->yst_uid = oh->yst_uid;
++ in->yst_gid = oh->yst_gid;
++ in->yst_atime = oh->yst_atime;
++ in->yst_mtime = oh->yst_mtime;
++ in->yst_ctime = oh->yst_ctime;
++ in->yst_rdev = oh->yst_rdev;
++#endif
++
++ if (oh->shadowsObject > 0)
++ yaffs_HandleShadowedObject(dev,
++ oh->
++ shadowsObject,
++ 1);
++
++
++ yaffs_SetObjectName(in, oh->name);
++ parent =
++ yaffs_FindOrCreateObjectByNumber
++ (dev, oh->parentObjectId,
++ YAFFS_OBJECT_TYPE_DIRECTORY);
++
++ fileSize = oh->fileSize;
++ isShrink = oh->isShrink;
++ equivalentObjectId = oh->equivalentObjectId;
++
++ }
++ else {
++ in->variantType = tags.extraObjectType;
++ parent =
++ yaffs_FindOrCreateObjectByNumber
++ (dev, tags.extraParentObjectId,
++ YAFFS_OBJECT_TYPE_DIRECTORY);
++ fileSize = tags.extraFileLength;
++ isShrink = tags.extraIsShrinkHeader;
++ equivalentObjectId = tags.extraEquivalentObjectId;
++ in->lazyLoaded = 1;
++
++ }
++ in->dirty = 0;
++
++ /* directory stuff...
++ * hook up to parent
++ */
++
++ if (parent->variantType ==
++ YAFFS_OBJECT_TYPE_UNKNOWN) {
++ /* Set up as a directory */
++ parent->variantType =
++ YAFFS_OBJECT_TYPE_DIRECTORY;
++ INIT_LIST_HEAD(&parent->variant.
++ directoryVariant.
++ children);
++ } else if (parent->variantType !=
++ YAFFS_OBJECT_TYPE_DIRECTORY)
++ {
++ /* Hoosterman, another problem....
++ * We're trying to use a non-directory as a directory
++ */
++
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("yaffs tragedy: attempting to use non-directory as"
++ " a directory in scan. Put in lost+found."
++ TENDSTR)));
++ parent = dev->lostNFoundDir;
++ }
++
++ yaffs_AddObjectToDirectory(parent, in);
++
++ itsUnlinked = (parent == dev->deletedDir) ||
++ (parent == dev->unlinkedDir);
++
++ if (isShrink) {
++ /* Mark the block as having a shrinkHeader */
++ bi->hasShrinkHeader = 1;
++ }
++
++ /* Note re hardlinks.
++ * Since we might scan a hardlink before its equivalent object is scanned
++ * we put them all in a list.
++ * After scanning is complete, we should have all the objects, so we run
++ * through this list and fix up all the chains.
++ */
++
++ switch (in->variantType) {
++ case YAFFS_OBJECT_TYPE_UNKNOWN:
++ /* Todo got a problem */
++ break;
++ case YAFFS_OBJECT_TYPE_FILE:
++
++ if (in->variant.fileVariant.
++ scannedFileSize < fileSize) {
++ /* This covers the case where the file size is greater
++ * than where the data is
++ * This will happen if the file is resized to be larger
++ * than its current data extents.
++ */
++ in->variant.fileVariant.fileSize = fileSize;
++ in->variant.fileVariant.scannedFileSize =
++ in->variant.fileVariant.fileSize;
++ }
++
++ if (isShrink &&
++ in->variant.fileVariant.shrinkSize > fileSize) {
++ in->variant.fileVariant.shrinkSize = fileSize;
++ }
++
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ if(!itsUnlinked) {
++ in->variant.hardLinkVariant.equivalentObjectId =
++ equivalentObjectId;
++ in->hardLinks.next =
++ (struct list_head *) hardList;
++ hardList = in;
++ }
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ /* Do nothing */
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ if(oh)
++ in->variant.symLinkVariant.alias =
++ yaffs_CloneString(oh->
++ alias);
++ break;
++ }
++
++ }
++ }
++ }
++
++ if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
++ /* If we got this far while scanning, then the block is fully allocated. */
++ state = YAFFS_BLOCK_STATE_FULL;
++ }
++
++ bi->blockState = state;
++
++ /* Now let's see if it was dirty */
++ if (bi->pagesInUse == 0 &&
++ !bi->hasShrinkHeader &&
++ bi->blockState == YAFFS_BLOCK_STATE_FULL) {
++ yaffs_BlockBecameDirty(dev, blk);
++ }
++
++ }
++
++ if (altBlockIndex)
++ YFREE_ALT(blockIndex);
++ else
++ YFREE(blockIndex);
++
++ /* Ok, we've done all the scanning.
++ * Fix up the hard link chains.
++ * We should now have scanned all the objects, now it's time to add these
++ * hardlinks.
++ */
++ yaffs_HardlinkFixup(dev,hardList);
++
++
++ /*
++ * Sort out state of unlinked and deleted objects.
++ */
++ {
++ struct list_head *i;
++ struct list_head *n;
++
++ yaffs_Object *l;
++
++ /* Soft delete all the unlinked files */
++ list_for_each_safe(i, n,
++ &dev->unlinkedDir->variant.directoryVariant.
++ children) {
++ if (i) {
++ l = list_entry(i, yaffs_Object, siblings);
++ yaffs_DestroyObject(l);
++ }
++ }
++
++ /* Soft delete all the deletedDir files */
++ list_for_each_safe(i, n,
++ &dev->deletedDir->variant.directoryVariant.
++ children) {
++ if (i) {
++ l = list_entry(i, yaffs_Object, siblings);
++ yaffs_DestroyObject(l);
++
++ }
++ }
++ }
++
++ yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
++
++ T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
++
++ return YAFFS_OK;
++}
++
++/*------------------------------ Directory Functions ----------------------------- */
++
++static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
++{
++ yaffs_Device *dev = obj->myDev;
++
++ if(dev && dev->removeObjectCallback)
++ dev->removeObjectCallback(obj);
++
++ list_del_init(&obj->siblings);
++ obj->parent = NULL;
++}
++
++
++static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
++ yaffs_Object * obj)
++{
++
++ if (!directory) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: Trying to add an object to a null pointer directory"
++ TENDSTR)));
++ YBUG();
++ }
++ if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: Trying to add an object to a non-directory"
++ TENDSTR)));
++ YBUG();
++ }
++
++ if (obj->siblings.prev == NULL) {
++ /* Not initialised */
++ INIT_LIST_HEAD(&obj->siblings);
++
++ } else if (!list_empty(&obj->siblings)) {
++ /* If it is holed up somewhere else, un hook it */
++ yaffs_RemoveObjectFromDirectory(obj);
++ }
++ /* Now add it */
++ list_add(&obj->siblings, &directory->variant.directoryVariant.children);
++ obj->parent = directory;
++
++ if (directory == obj->myDev->unlinkedDir
++ || directory == obj->myDev->deletedDir) {
++ obj->unlinked = 1;
++ obj->myDev->nUnlinkedFiles++;
++ obj->renameAllowed = 0;
++ }
++}
++
++yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
++ const YCHAR * name)
++{
++ int sum;
++
++ struct list_head *i;
++ YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
++
++ yaffs_Object *l;
++
++ if (!name) {
++ return NULL;
++ }
++
++ if (!directory) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: yaffs_FindObjectByName: null pointer directory"
++ TENDSTR)));
++ YBUG();
++ }
++ if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
++ YBUG();
++ }
++
++ sum = yaffs_CalcNameSum(name);
++
++ list_for_each(i, &directory->variant.directoryVariant.children) {
++ if (i) {
++ l = list_entry(i, yaffs_Object, siblings);
++
++ yaffs_CheckObjectDetailsLoaded(l);
++
++ /* Special case for lost-n-found */
++ if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
++ if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
++ return l;
++ }
++ } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
++ {
++ /* LostnFound cunk called Objxxx
++ * Do a real check
++ */
++ yaffs_GetObjectName(l, buffer,
++ YAFFS_MAX_NAME_LENGTH);
++ if (yaffs_strcmp(name, buffer) == 0) {
++ return l;
++ }
++
++ }
++ }
++ }
++
++ return NULL;
++}
++
++
++#if 0
++int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
++ int (*fn) (yaffs_Object *))
++{
++ struct list_head *i;
++ yaffs_Object *l;
++
++ if (!theDir) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: yaffs_FindObjectByName: null pointer directory"
++ TENDSTR)));
++ YBUG();
++ }
++ if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
++ YBUG();
++ }
++
++ list_for_each(i, &theDir->variant.directoryVariant.children) {
++ if (i) {
++ l = list_entry(i, yaffs_Object, siblings);
++ if (l && !fn(l)) {
++ return YAFFS_FAIL;
++ }
++ }
++ }
++
++ return YAFFS_OK;
++
++}
++#endif
++
++/* GetEquivalentObject dereferences any hard links to get to the
++ * actual object.
++ */
++
++yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
++{
++ if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
++ /* We want the object id of the equivalent object, not this one */
++ obj = obj->variant.hardLinkVariant.equivalentObject;
++ }
++ return obj;
++
++}
++
++int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
++{
++ memset(name, 0, buffSize * sizeof(YCHAR));
++
++ yaffs_CheckObjectDetailsLoaded(obj);
++
++ if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
++ yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
++ } else if (obj->chunkId <= 0) {
++ YCHAR locName[20];
++ /* make up a name */
++ yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
++ obj->objectId);
++ yaffs_strncpy(name, locName, buffSize - 1);
++
++ }
++#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
++ else if (obj->shortName[0]) {
++ yaffs_strcpy(name, obj->shortName);
++ }
++#endif
++ else {
++ int result;
++ __u8 *buffer = yaffs_GetTempBuffer(obj->myDev, __LINE__);
++
++ yaffs_ObjectHeader *oh = (yaffs_ObjectHeader *) buffer;
++
++ memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
++
++ if (obj->chunkId >= 0) {
++ result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
++ obj->chunkId, buffer,
++ NULL);
++ }
++ yaffs_strncpy(name, oh->name, buffSize - 1);
++
++ yaffs_ReleaseTempBuffer(obj->myDev, buffer, __LINE__);
++ }
++
++ return yaffs_strlen(name);
++}
++
++int yaffs_GetObjectFileLength(yaffs_Object * obj)
++{
++
++ /* Dereference any hard linking */
++ obj = yaffs_GetEquivalentObject(obj);
++
++ if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
++ return obj->variant.fileVariant.fileSize;
++ }
++ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
++ return yaffs_strlen(obj->variant.symLinkVariant.alias);
++ } else {
++ /* Only a directory should drop through to here */
++ return obj->myDev->nDataBytesPerChunk;
++ }
++}
++
++int yaffs_GetObjectLinkCount(yaffs_Object * obj)
++{
++ int count = 0;
++ struct list_head *i;
++
++ if (!obj->unlinked) {
++ count++; /* the object itself */
++ }
++ list_for_each(i, &obj->hardLinks) {
++ count++; /* add the hard links; */
++ }
++ return count;
++
++}
++
++int yaffs_GetObjectInode(yaffs_Object * obj)
++{
++ obj = yaffs_GetEquivalentObject(obj);
++
++ return obj->objectId;
++}
++
++unsigned yaffs_GetObjectType(yaffs_Object * obj)
++{
++ obj = yaffs_GetEquivalentObject(obj);
++
++ switch (obj->variantType) {
++ case YAFFS_OBJECT_TYPE_FILE:
++ return DT_REG;
++ break;
++ case YAFFS_OBJECT_TYPE_DIRECTORY:
++ return DT_DIR;
++ break;
++ case YAFFS_OBJECT_TYPE_SYMLINK:
++ return DT_LNK;
++ break;
++ case YAFFS_OBJECT_TYPE_HARDLINK:
++ return DT_REG;
++ break;
++ case YAFFS_OBJECT_TYPE_SPECIAL:
++ if (S_ISFIFO(obj->yst_mode))
++ return DT_FIFO;
++ if (S_ISCHR(obj->yst_mode))
++ return DT_CHR;
++ if (S_ISBLK(obj->yst_mode))
++ return DT_BLK;
++ if (S_ISSOCK(obj->yst_mode))
++ return DT_SOCK;
++ default:
++ return DT_REG;
++ break;
++ }
++}
++
++YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
++{
++ obj = yaffs_GetEquivalentObject(obj);
++ if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
++ return yaffs_CloneString(obj->variant.symLinkVariant.alias);
++ } else {
++ return yaffs_CloneString(_Y(""));
++ }
++}
++
++#ifndef CONFIG_YAFFS_WINCE
++
++int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
++{
++ unsigned int valid = attr->ia_valid;
++
++ if (valid & ATTR_MODE)
++ obj->yst_mode = attr->ia_mode;
++ if (valid & ATTR_UID)
++ obj->yst_uid = attr->ia_uid;
++ if (valid & ATTR_GID)
++ obj->yst_gid = attr->ia_gid;
++
++ if (valid & ATTR_ATIME)
++ obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
++ if (valid & ATTR_CTIME)
++ obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
++ if (valid & ATTR_MTIME)
++ obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
++
++ if (valid & ATTR_SIZE)
++ yaffs_ResizeFile(obj, attr->ia_size);
++
++ yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
++
++ return YAFFS_OK;
++
++}
++int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
++{
++ unsigned int valid = 0;
++
++ attr->ia_mode = obj->yst_mode;
++ valid |= ATTR_MODE;
++ attr->ia_uid = obj->yst_uid;
++ valid |= ATTR_UID;
++ attr->ia_gid = obj->yst_gid;
++ valid |= ATTR_GID;
++
++ Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
++ valid |= ATTR_ATIME;
++ Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
++ valid |= ATTR_CTIME;
++ Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
++ valid |= ATTR_MTIME;
++
++ attr->ia_size = yaffs_GetFileSize(obj);
++ valid |= ATTR_SIZE;
++
++ attr->ia_valid = valid;
++
++ return YAFFS_OK;
++
++}
++
++#endif
++
++#if 0
++int yaffs_DumpObject(yaffs_Object * obj)
++{
++ YCHAR name[257];
++
++ yaffs_GetObjectName(obj, name, 256);
++
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
++ " chunk %d type %d size %d\n"
++ TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
++ obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
++ yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
++
++ return YAFFS_OK;
++}
++#endif
++
++/*---------------------------- Initialisation code -------------------------------------- */
++
++static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
++{
++
++ /* Common functions, gotta have */
++ if (!dev->eraseBlockInNAND || !dev->initialiseNAND)
++ return 0;
++
++#ifdef CONFIG_YAFFS_YAFFS2
++
++ /* Can use the "with tags" style interface for yaffs1 or yaffs2 */
++ if (dev->writeChunkWithTagsToNAND &&
++ dev->readChunkWithTagsFromNAND &&
++ !dev->writeChunkToNAND &&
++ !dev->readChunkFromNAND &&
++ dev->markNANDBlockBad && dev->queryNANDBlock)
++ return 1;
++#endif
++
++ /* Can use the "spare" style interface for yaffs1 */
++ if (!dev->isYaffs2 &&
++ !dev->writeChunkWithTagsToNAND &&
++ !dev->readChunkWithTagsFromNAND &&
++ dev->writeChunkToNAND &&
++ dev->readChunkFromNAND &&
++ !dev->markNANDBlockBad && !dev->queryNANDBlock)
++ return 1;
++
++ return 0; /* bad */
++}
++
++
++static void yaffs_CreateInitialDirectories(yaffs_Device *dev)
++{
++ /* Initialise the unlinked, deleted, root and lost and found directories */
++
++ dev->lostNFoundDir = dev->rootDir = NULL;
++ dev->unlinkedDir = dev->deletedDir = NULL;
++
++ dev->unlinkedDir =
++ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_UNLINKED, S_IFDIR);
++ dev->deletedDir =
++ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_DELETED, S_IFDIR);
++
++ dev->rootDir =
++ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_ROOT,
++ YAFFS_ROOT_MODE | S_IFDIR);
++ dev->lostNFoundDir =
++ yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
++ YAFFS_LOSTNFOUND_MODE | S_IFDIR);
++ yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
++}
++
++int yaffs_GutsInitialise(yaffs_Device * dev)
++{
++ unsigned x;
++ int bits;
++
++ T(YAFFS_TRACE_TRACING, (TSTR("yaffs: yaffs_GutsInitialise()" TENDSTR)));
++
++ /* Check stuff that must be set */
++
++ if (!dev) {
++ T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Need a device" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ dev->internalStartBlock = dev->startBlock;
++ dev->internalEndBlock = dev->endBlock;
++ dev->blockOffset = 0;
++ dev->chunkOffset = 0;
++ dev->nFreeChunks = 0;
++
++ if (dev->startBlock == 0) {
++ dev->internalStartBlock = dev->startBlock + 1;
++ dev->internalEndBlock = dev->endBlock + 1;
++ dev->blockOffset = 1;
++ dev->chunkOffset = dev->nChunksPerBlock;
++ }
++
++ /* Check geometry parameters. */
++
++ if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
++ (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
++ dev->nChunksPerBlock < 2 ||
++ dev->nReservedBlocks < 2 ||
++ dev->internalStartBlock <= 0 ||
++ dev->internalEndBlock <= 0 ||
++ dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2) // otherwise it is too small
++ ) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
++ TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
++ return YAFFS_FAIL;
++ }
++
++ if (yaffs_InitialiseNAND(dev) != YAFFS_OK) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: InitialiseNAND failed" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ /* Got the right mix of functions? */
++ if (!yaffs_CheckDevFunctions(dev)) {
++ /* Function missing */
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR
++ ("yaffs: device function(s) missing or wrong\n" TENDSTR)));
++
++ return YAFFS_FAIL;
++ }
++
++ /* This is really a compilation check. */
++ if (!yaffs_CheckStructures()) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs_CheckStructures failed\n" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ if (dev->isMounted) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: device already mounted\n" TENDSTR)));
++ return YAFFS_FAIL;
++ }
++
++ /* Finished with most checks. One or two more checks happen later on too. */
++
++ dev->isMounted = 1;
++
++
++
++ /* OK now calculate a few things for the device */
++
++ /*
++ * Calculate all the chunk size manipulation numbers:
++ */
++ /* Start off assuming it is a power of 2 */
++ dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
++ dev->chunkMask = (1<<dev->chunkShift) - 1;
++
++ if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
++ /* Yes it is a power of 2, disable crumbs */
++ dev->crumbMask = 0;
++ dev->crumbShift = 0;
++ dev->crumbsPerChunk = 0;
++ } else {
++ /* Not a power of 2, use crumbs instead */
++ dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
++ dev->crumbMask = (1<<dev->crumbShift)-1;
++ dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
++ dev->chunkShift = 0;
++ dev->chunkMask = 0;
++ }
++
++
++ /*
++ * Calculate chunkGroupBits.
++ * We need to find the next power of 2 > than internalEndBlock
++ */
++
++ x = dev->nChunksPerBlock * (dev->internalEndBlock + 1);
++
++ bits = ShiftsGE(x);
++
++ /* Set up tnode width if wide tnodes are enabled. */
++ if(!dev->wideTnodesDisabled){
++ /* bits must be even so that we end up with 32-bit words */
++ if(bits & 1)
++ bits++;
++ if(bits < 16)
++ dev->tnodeWidth = 16;
++ else
++ dev->tnodeWidth = bits;
++ }
++ else
++ dev->tnodeWidth = 16;
++
++ dev->tnodeMask = (1<<dev->tnodeWidth)-1;
++
++ /* Level0 Tnodes are 16 bits or wider (if wide tnodes are enabled),
++ * so if the bitwidth of the
++ * chunk range we're using is greater than 16 we need
++ * to figure out chunk shift and chunkGroupSize
++ */
++
++ if (bits <= dev->tnodeWidth)
++ dev->chunkGroupBits = 0;
++ else
++ dev->chunkGroupBits = bits - dev->tnodeWidth;
++
++
++ dev->chunkGroupSize = 1 << dev->chunkGroupBits;
++
++ if (dev->nChunksPerBlock < dev->chunkGroupSize) {
++ /* We have a problem because the soft delete won't work if
++ * the chunk group size > chunks per block.
++ * This can be remedied by using larger "virtual blocks".
++ */
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("yaffs: chunk group too large\n" TENDSTR)));
++
++ return YAFFS_FAIL;
++ }
++
++ /* OK, we've finished verifying the device, lets continue with initialisation */
++
++ /* More device initialisation */
++ dev->garbageCollections = 0;
++ dev->passiveGarbageCollections = 0;
++ dev->currentDirtyChecker = 0;
++ dev->bufferedBlock = -1;
++ dev->doingBufferedBlockRewrite = 0;
++ dev->nDeletedFiles = 0;
++ dev->nBackgroundDeletions = 0;
++ dev->nUnlinkedFiles = 0;
++ dev->eccFixed = 0;
++ dev->eccUnfixed = 0;
++ dev->tagsEccFixed = 0;
++ dev->tagsEccUnfixed = 0;
++ dev->nErasureFailures = 0;
++ dev->nErasedBlocks = 0;
++ dev->isDoingGC = 0;
++ dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
++
++ /* Initialise temporary buffers and caches. */
++ {
++ int i;
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ dev->tempBuffer[i].line = 0; /* not in use */
++ dev->tempBuffer[i].buffer =
++ YMALLOC_DMA(dev->nDataBytesPerChunk);
++ }
++ }
++
++ if (dev->nShortOpCaches > 0) {
++ int i;
++
++ if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
++ dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
++ }
++
++ dev->srCache =
++ YMALLOC(dev->nShortOpCaches * sizeof(yaffs_ChunkCache));
++
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ dev->srCache[i].object = NULL;
++ dev->srCache[i].lastUse = 0;
++ dev->srCache[i].dirty = 0;
++ dev->srCache[i].data = YMALLOC_DMA(dev->nDataBytesPerChunk);
++ }
++ dev->srLastUse = 0;
++ }
++
++ dev->cacheHits = 0;
++
++ dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
++
++ if (dev->isYaffs2) {
++ dev->useHeaderFileSize = 1;
++ }
++
++ yaffs_InitialiseBlocks(dev);
++ yaffs_InitialiseTnodes(dev);
++ yaffs_InitialiseObjects(dev);
++
++ yaffs_CreateInitialDirectories(dev);
++
++
++ /* Now scan the flash. */
++ if (dev->isYaffs2) {
++ if(yaffs_CheckpointRestore(dev)) {
++ T(YAFFS_TRACE_CHECKPOINT,
++ (TSTR("yaffs: restored from checkpoint" TENDSTR)));
++ } else {
++
++ /* Clean up the mess caused by an aborted checkpoint load
++ * and scan backwards.
++ */
++ yaffs_DeinitialiseBlocks(dev);
++ yaffs_DeinitialiseTnodes(dev);
++ yaffs_DeinitialiseObjects(dev);
++ yaffs_InitialiseBlocks(dev);
++ yaffs_InitialiseTnodes(dev);
++ yaffs_InitialiseObjects(dev);
++ yaffs_CreateInitialDirectories(dev);
++
++ yaffs_ScanBackwards(dev);
++ }
++ }else
++ yaffs_Scan(dev);
++
++ /* Zero out stats */
++ dev->nPageReads = 0;
++ dev->nPageWrites = 0;
++ dev->nBlockErasures = 0;
++ dev->nGCCopies = 0;
++ dev->nRetriedWrites = 0;
++
++ dev->nRetiredBlocks = 0;
++
++ yaffs_VerifyFreeChunks(dev);
++
++ T(YAFFS_TRACE_TRACING,
++ (TSTR("yaffs: yaffs_GutsInitialise() done.\n" TENDSTR)));
++ return YAFFS_OK;
++
++}
++
++void yaffs_Deinitialise(yaffs_Device * dev)
++{
++ if (dev->isMounted) {
++ int i;
++
++ yaffs_DeinitialiseBlocks(dev);
++ yaffs_DeinitialiseTnodes(dev);
++ yaffs_DeinitialiseObjects(dev);
++ if (dev->nShortOpCaches > 0) {
++
++ for (i = 0; i < dev->nShortOpCaches; i++) {
++ YFREE(dev->srCache[i].data);
++ }
++
++ YFREE(dev->srCache);
++ }
++
++ YFREE(dev->gcCleanupList);
++
++ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
++ YFREE(dev->tempBuffer[i].buffer);
++ }
++
++ dev->isMounted = 0;
++ }
++
++}
++
++static int yaffs_CountFreeChunks(yaffs_Device * dev)
++{
++ int nFree;
++ int b;
++
++ yaffs_BlockInfo *blk;
++
++ for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
++ b++) {
++ blk = yaffs_GetBlockInfo(dev, b);
++
++ switch (blk->blockState) {
++ case YAFFS_BLOCK_STATE_EMPTY:
++ case YAFFS_BLOCK_STATE_ALLOCATING:
++ case YAFFS_BLOCK_STATE_COLLECTING:
++ case YAFFS_BLOCK_STATE_FULL:
++ nFree +=
++ (dev->nChunksPerBlock - blk->pagesInUse +
++ blk->softDeletions);
++ break;
++ default:
++ break;
++ }
++
++ }
++
++ return nFree;
++}
++
++int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
++{
++ /* This is what we report to the outside world */
++
++ int nFree;
++ int nDirtyCacheChunks;
++ int blocksForCheckpoint;
++
++#if 1
++ nFree = dev->nFreeChunks;
++#else
++ nFree = yaffs_CountFreeChunks(dev);
++#endif
++
++ nFree += dev->nDeletedFiles;
++
++ /* Now count the number of dirty chunks in the cache and subtract those */
++
++ {
++ int i;
++ for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
++ if (dev->srCache[i].dirty)
++ nDirtyCacheChunks++;
++ }
++ }
++
++ nFree -= nDirtyCacheChunks;
++
++ nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
++
++ /* Now we figure out how much to reserve for the checkpoint and report that... */
++ blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
++ if(blocksForCheckpoint < 0)
++ blocksForCheckpoint = 0;
++
++ nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
++
++ if (nFree < 0)
++ nFree = 0;
++
++ return nFree;
++
++}
++
++static int yaffs_freeVerificationFailures;
++
++static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
++{
++ int counted = yaffs_CountFreeChunks(dev);
++
++ int difference = dev->nFreeChunks - counted;
++
++ if (difference) {
++ T(YAFFS_TRACE_ALWAYS,
++ (TSTR("Freechunks verification failure %d %d %d" TENDSTR),
++ dev->nFreeChunks, counted, difference));
++ yaffs_freeVerificationFailures++;
++ }
++}
++
++/*---------------------------------------- YAFFS test code ----------------------*/
++
++#define yaffs_CheckStruct(structure,syze, name) \
++ if(sizeof(structure) != syze) \
++ { \
++ T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
++ name,syze,sizeof(structure))); \
++ return YAFFS_FAIL; \
++ }
++
++static int yaffs_CheckStructures(void)
++{
++/* yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
++/* yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
++/* yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
++#ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
++#endif
++ yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
++
++ return YAFFS_OK;
++}
+diff -urN linux.old/fs/yaffs2/yaffs_guts.h linux.dev/fs/yaffs2/yaffs_guts.h
+--- linux.old/fs/yaffs2/yaffs_guts.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_guts.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,893 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_guts.h: Configuration etc for yaffs_guts
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ * $Id: yaffs_guts.h,v 1.25 2006/10/13 08:52:49 charles Exp $
++ */
++
++#ifndef __YAFFS_GUTS_H__
++#define __YAFFS_GUTS_H__
++
++#include "devextras.h"
++#include "yportenv.h"
++
++#define YAFFS_OK 1
++#define YAFFS_FAIL 0
++
++/* Give us a Y=0x59,
++ * Give us an A=0x41,
++ * Give us an FF=0xFF
++ * Give us an S=0x53
++ * And what have we got...
++ */
++#define YAFFS_MAGIC 0x5941FF53
++
++#define YAFFS_NTNODES_LEVEL0 16
++#define YAFFS_TNODES_LEVEL0_BITS 4
++#define YAFFS_TNODES_LEVEL0_MASK 0xf
++
++#define YAFFS_NTNODES_INTERNAL (YAFFS_NTNODES_LEVEL0 / 2)
++#define YAFFS_TNODES_INTERNAL_BITS (YAFFS_TNODES_LEVEL0_BITS - 1)
++#define YAFFS_TNODES_INTERNAL_MASK 0x7
++#define YAFFS_TNODES_MAX_LEVEL 6
++
++#ifndef CONFIG_YAFFS_NO_YAFFS1
++#define YAFFS_BYTES_PER_SPARE 16
++#define YAFFS_BYTES_PER_CHUNK 512
++#define YAFFS_CHUNK_SIZE_SHIFT 9
++#define YAFFS_CHUNKS_PER_BLOCK 32
++#define YAFFS_BYTES_PER_BLOCK (YAFFS_CHUNKS_PER_BLOCK*YAFFS_BYTES_PER_CHUNK)
++#endif
++
++#define YAFFS_MIN_YAFFS2_CHUNK_SIZE 1024
++#define YAFFS_MIN_YAFFS2_SPARE_SIZE 32
++
++#define YAFFS_MAX_CHUNK_ID 0x000FFFFF
++
++#define YAFFS_UNUSED_OBJECT_ID 0x0003FFFF
++
++#define YAFFS_ALLOCATION_NOBJECTS 100
++#define YAFFS_ALLOCATION_NTNODES 100
++#define YAFFS_ALLOCATION_NLINKS 100
++
++#define YAFFS_NOBJECT_BUCKETS 256
++
++
++#define YAFFS_OBJECT_SPACE 0x40000
++
++#define YAFFS_NCHECKPOINT_OBJECTS 5000
++
++#define YAFFS_CHECKPOINT_VERSION 2
++
++#ifdef CONFIG_YAFFS_UNICODE
++#define YAFFS_MAX_NAME_LENGTH 127
++#define YAFFS_MAX_ALIAS_LENGTH 79
++#else
++#define YAFFS_MAX_NAME_LENGTH 255
++#define YAFFS_MAX_ALIAS_LENGTH 159
++#endif
++
++#define YAFFS_SHORT_NAME_LENGTH 15
++
++/* Some special object ids for pseudo objects */
++#define YAFFS_OBJECTID_ROOT 1
++#define YAFFS_OBJECTID_LOSTNFOUND 2
++#define YAFFS_OBJECTID_UNLINKED 3
++#define YAFFS_OBJECTID_DELETED 4
++
++/* Sseudo object ids for checkpointing */
++#define YAFFS_OBJECTID_SB_HEADER 0x10
++#define YAFFS_OBJECTID_CHECKPOINT_DATA 0x20
++#define YAFFS_SEQUENCE_CHECKPOINT_DATA 0x21
++
++/* */
++
++#define YAFFS_MAX_SHORT_OP_CACHES 20
++
++#define YAFFS_N_TEMP_BUFFERS 4
++
++/* Sequence numbers are used in YAFFS2 to determine block allocation order.
++ * The range is limited slightly to help distinguish bad numbers from good.
++ * This also allows us to perhaps in the future use special numbers for
++ * special purposes.
++ * EFFFFF00 allows the allocation of 8 blocks per second (~1Mbytes) for 15 years,
++ * and is a larger number than the lifetime of a 2GB device.
++ */
++#define YAFFS_LOWEST_SEQUENCE_NUMBER 0x00001000
++#define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00
++
++/* ChunkCache is used for short read/write operations.*/
++typedef struct {
++ struct yaffs_ObjectStruct *object;
++ int chunkId;
++ int lastUse;
++ int dirty;
++ int nBytes; /* Only valid if the cache is dirty */
++ int locked; /* Can't push out or flush while locked. */
++#ifdef CONFIG_YAFFS_YAFFS2
++ __u8 *data;
++#else
++ __u8 data[YAFFS_BYTES_PER_CHUNK];
++#endif
++} yaffs_ChunkCache;
++
++
++
++/* Tags structures in RAM
++ * NB This uses bitfield. Bitfields should not straddle a u32 boundary otherwise
++ * the structure size will get blown out.
++ */
++
++#ifndef CONFIG_YAFFS_NO_YAFFS1
++typedef struct {
++ unsigned chunkId:20;
++ unsigned serialNumber:2;
++ unsigned byteCount:10;
++ unsigned objectId:18;
++ unsigned ecc:12;
++ unsigned unusedStuff:2;
++
++} yaffs_Tags;
++
++typedef union {
++ yaffs_Tags asTags;
++ __u8 asBytes[8];
++} yaffs_TagsUnion;
++
++#endif
++
++/* Stuff used for extended tags in YAFFS2 */
++
++typedef enum {
++ YAFFS_ECC_RESULT_UNKNOWN,
++ YAFFS_ECC_RESULT_NO_ERROR,
++ YAFFS_ECC_RESULT_FIXED,
++ YAFFS_ECC_RESULT_UNFIXED
++} yaffs_ECCResult;
++
++typedef enum {
++ YAFFS_OBJECT_TYPE_UNKNOWN,
++ YAFFS_OBJECT_TYPE_FILE,
++ YAFFS_OBJECT_TYPE_SYMLINK,
++ YAFFS_OBJECT_TYPE_DIRECTORY,
++ YAFFS_OBJECT_TYPE_HARDLINK,
++ YAFFS_OBJECT_TYPE_SPECIAL
++} yaffs_ObjectType;
++
++typedef struct {
++
++ unsigned validMarker0;
++ unsigned chunkUsed; /* Status of the chunk: used or unused */
++ unsigned objectId; /* If 0 then this is not part of an object (unused) */
++ unsigned chunkId; /* If 0 then this is a header, else a data chunk */
++ unsigned byteCount; /* Only valid for data chunks */
++
++ /* The following stuff only has meaning when we read */
++ yaffs_ECCResult eccResult;
++ unsigned blockBad;
++
++ /* YAFFS 1 stuff */
++ unsigned chunkDeleted; /* The chunk is marked deleted */
++ unsigned serialNumber; /* Yaffs1 2-bit serial number */
++
++ /* YAFFS2 stuff */
++ unsigned sequenceNumber; /* The sequence number of this block */
++
++ /* Extra info if this is an object header (YAFFS2 only) */
++
++ unsigned extraHeaderInfoAvailable; /* There is extra info available if this is not zero */
++ unsigned extraParentObjectId; /* The parent object */
++ unsigned extraIsShrinkHeader; /* Is it a shrink header? */
++ unsigned extraShadows; /* Does this shadow another object? */
++
++ yaffs_ObjectType extraObjectType; /* What object type? */
++
++ unsigned extraFileLength; /* Length if it is a file */
++ unsigned extraEquivalentObjectId; /* Equivalent object Id if it is a hard link */
++
++ unsigned validMarker1;
++
++} yaffs_ExtendedTags;
++
++/* Spare structure for YAFFS1 */
++typedef struct {
++ __u8 tagByte0;
++ __u8 tagByte1;
++ __u8 tagByte2;
++ __u8 tagByte3;
++ __u8 pageStatus; /* set to 0 to delete the chunk */
++ __u8 blockStatus;
++ __u8 tagByte4;
++ __u8 tagByte5;
++ __u8 ecc1[3];
++ __u8 tagByte6;
++ __u8 tagByte7;
++ __u8 ecc2[3];
++} yaffs_Spare;
++
++/*Special structure for passing through to mtd */
++struct yaffs_NANDSpare {
++ yaffs_Spare spare;
++ int eccres1;
++ int eccres2;
++};
++
++/* Block data in RAM */
++
++typedef enum {
++ YAFFS_BLOCK_STATE_UNKNOWN = 0,
++
++ YAFFS_BLOCK_STATE_SCANNING,
++ YAFFS_BLOCK_STATE_NEEDS_SCANNING,
++ /* The block might have something on it (ie it is allocating or full, perhaps empty)
++ * but it needs to be scanned to determine its true state.
++ * This state is only valid during yaffs_Scan.
++ * NB We tolerate empty because the pre-scanner might be incapable of deciding
++ * However, if this state is returned on a YAFFS2 device, then we expect a sequence number
++ */
++
++ YAFFS_BLOCK_STATE_EMPTY,
++ /* This block is empty */
++
++ YAFFS_BLOCK_STATE_ALLOCATING,
++ /* This block is partially allocated.
++ * At least one page holds valid data.
++ * This is the one currently being used for page
++ * allocation. Should never be more than one of these
++ */
++
++ YAFFS_BLOCK_STATE_FULL,
++ /* All the pages in this block have been allocated.
++ */
++
++ YAFFS_BLOCK_STATE_DIRTY,
++ /* All pages have been allocated and deleted.
++ * Erase me, reuse me.
++ */
++
++ YAFFS_BLOCK_STATE_CHECKPOINT,
++ /* This block is assigned to holding checkpoint data.
++ */
++
++ YAFFS_BLOCK_STATE_COLLECTING,
++ /* This block is being garbage collected */
++
++ YAFFS_BLOCK_STATE_DEAD
++ /* This block has failed and is not in use */
++} yaffs_BlockState;
++
++typedef struct {
++
++ int softDeletions:10; /* number of soft deleted pages */
++ int pagesInUse:10; /* number of pages in use */
++ yaffs_BlockState blockState:4; /* One of the above block states */
++ __u32 needsRetiring:1; /* Data has failed on this block, need to get valid data off */
++ /* and retire the block. */
++ __u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
++ __u32 gcPrioritise: 1; /* An ECC check or bank check has failed on this block.
++ It should be prioritised for GC */
++ __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
++
++#ifdef CONFIG_YAFFS_YAFFS2
++ __u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
++ __u32 sequenceNumber; /* block sequence number for yaffs2 */
++#endif
++
++} yaffs_BlockInfo;
++
++/* -------------------------- Object structure -------------------------------*/
++/* This is the object structure as stored on NAND */
++
++typedef struct {
++ yaffs_ObjectType type;
++
++ /* Apply to everything */
++ int parentObjectId;
++ __u16 sum__NoLongerUsed; /* checksum of name. No longer used */
++ YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
++
++ /* Thes following apply to directories, files, symlinks - not hard links */
++ __u32 yst_mode; /* protection */
++
++#ifdef CONFIG_YAFFS_WINCE
++ __u32 notForWinCE[5];
++#else
++ __u32 yst_uid;
++ __u32 yst_gid;
++ __u32 yst_atime;
++ __u32 yst_mtime;
++ __u32 yst_ctime;
++#endif
++
++ /* File size applies to files only */
++ int fileSize;
++
++ /* Equivalent object id applies to hard links only. */
++ int equivalentObjectId;
++
++ /* Alias is for symlinks only. */
++ YCHAR alias[YAFFS_MAX_ALIAS_LENGTH + 1];
++
++ __u32 yst_rdev; /* device stuff for block and char devices (major/min) */
++
++#ifdef CONFIG_YAFFS_WINCE
++ __u32 win_ctime[2];
++ __u32 win_atime[2];
++ __u32 win_mtime[2];
++ __u32 roomToGrow[4];
++#else
++ __u32 roomToGrow[10];
++#endif
++
++ int shadowsObject; /* This object header shadows the specified object if > 0 */
++
++ /* isShrink applies to object headers written when we shrink the file (ie resize) */
++ __u32 isShrink;
++
++} yaffs_ObjectHeader;
++
++/*--------------------------- Tnode -------------------------- */
++
++union yaffs_Tnode_union {
++#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
++ union yaffs_Tnode_union *internal[YAFFS_NTNODES_INTERNAL + 1];
++#else
++ union yaffs_Tnode_union *internal[YAFFS_NTNODES_INTERNAL];
++#endif
++/* __u16 level0[YAFFS_NTNODES_LEVEL0]; */
++
++};
++
++typedef union yaffs_Tnode_union yaffs_Tnode;
++
++struct yaffs_TnodeList_struct {
++ struct yaffs_TnodeList_struct *next;
++ yaffs_Tnode *tnodes;
++};
++
++typedef struct yaffs_TnodeList_struct yaffs_TnodeList;
++
++/*------------------------ Object -----------------------------*/
++/* An object can be one of:
++ * - a directory (no data, has children links
++ * - a regular file (data.... not prunes :->).
++ * - a symlink [symbolic link] (the alias).
++ * - a hard link
++ */
++
++typedef struct {
++ __u32 fileSize;
++ __u32 scannedFileSize;
++ __u32 shrinkSize;
++ int topLevel;
++ yaffs_Tnode *top;
++} yaffs_FileStructure;
++
++typedef struct {
++ struct list_head children; /* list of child links */
++} yaffs_DirectoryStructure;
++
++typedef struct {
++ YCHAR *alias;
++} yaffs_SymLinkStructure;
++
++typedef struct {
++ struct yaffs_ObjectStruct *equivalentObject;
++ __u32 equivalentObjectId;
++} yaffs_HardLinkStructure;
++
++typedef union {
++ yaffs_FileStructure fileVariant;
++ yaffs_DirectoryStructure directoryVariant;
++ yaffs_SymLinkStructure symLinkVariant;
++ yaffs_HardLinkStructure hardLinkVariant;
++} yaffs_ObjectVariant;
++
++struct yaffs_ObjectStruct {
++ __u8 deleted:1; /* This should only apply to unlinked files. */
++ __u8 softDeleted:1; /* it has also been soft deleted */
++ __u8 unlinked:1; /* An unlinked file. The file should be in the unlinked directory.*/
++ __u8 fake:1; /* A fake object has no presence on NAND. */
++ __u8 renameAllowed:1; /* Some objects are not allowed to be renamed. */
++ __u8 unlinkAllowed:1;
++ __u8 dirty:1; /* the object needs to be written to flash */
++ __u8 valid:1; /* When the file system is being loaded up, this
++ * object might be created before the data
++ * is available (ie. file data records appear before the header).
++ */
++ __u8 lazyLoaded:1; /* This object has been lazy loaded and is missing some detail */
++
++ __u8 deferedFree:1; /* For Linux kernel. Object is removed from NAND, but is
++ * still in the inode cache. Free of object is defered.
++ * until the inode is released.
++ */
++
++ __u8 serial; /* serial number of chunk in NAND. Cached here */
++ __u16 sum; /* sum of the name to speed searching */
++
++ struct yaffs_DeviceStruct *myDev; /* The device I'm on */
++
++ struct list_head hashLink; /* list of objects in this hash bucket */
++
++ struct list_head hardLinks; /* all the equivalent hard linked objects */
++
++ /* directory structure stuff */
++ /* also used for linking up the free list */
++ struct yaffs_ObjectStruct *parent;
++ struct list_head siblings;
++
++ /* Where's my object header in NAND? */
++ int chunkId;
++
++ int nDataChunks; /* Number of data chunks attached to the file. */
++
++ __u32 objectId; /* the object id value */
++
++ __u32 yst_mode;
++
++#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
++ YCHAR shortName[YAFFS_SHORT_NAME_LENGTH + 1];
++#endif
++
++#ifndef __KERNEL__
++ __u32 inUse;
++#endif
++
++#ifdef CONFIG_YAFFS_WINCE
++ __u32 win_ctime[2];
++ __u32 win_mtime[2];
++ __u32 win_atime[2];
++#else
++ __u32 yst_uid;
++ __u32 yst_gid;
++ __u32 yst_atime;
++ __u32 yst_mtime;
++ __u32 yst_ctime;
++#endif
++
++ __u32 yst_rdev;
++
++#ifdef __KERNEL__
++ struct inode *myInode;
++
++#endif
++
++ yaffs_ObjectType variantType;
++
++ yaffs_ObjectVariant variant;
++
++};
++
++typedef struct yaffs_ObjectStruct yaffs_Object;
++
++struct yaffs_ObjectList_struct {
++ yaffs_Object *objects;
++ struct yaffs_ObjectList_struct *next;
++};
++
++typedef struct yaffs_ObjectList_struct yaffs_ObjectList;
++
++typedef struct {
++ struct list_head list;
++ int count;
++} yaffs_ObjectBucket;
++
++
++/* yaffs_CheckpointObject holds the definition of an object as dumped
++ * by checkpointing.
++ */
++
++typedef struct {
++ int structType;
++ __u32 objectId;
++ __u32 parentId;
++ int chunkId;
++
++ yaffs_ObjectType variantType:3;
++ __u8 deleted:1;
++ __u8 softDeleted:1;
++ __u8 unlinked:1;
++ __u8 fake:1;
++ __u8 renameAllowed:1;
++ __u8 unlinkAllowed:1;
++ __u8 serial;
++
++ int nDataChunks;
++ __u32 fileSizeOrEquivalentObjectId;
++
++}yaffs_CheckpointObject;
++
++/*--------------------- Temporary buffers ----------------
++ *
++ * These are chunk-sized working buffers. Each device has a few
++ */
++
++typedef struct {
++ __u8 *buffer;
++ int line; /* track from whence this buffer was allocated */
++ int maxLine;
++} yaffs_TempBuffer;
++
++/*----------------- Device ---------------------------------*/
++
++struct yaffs_DeviceStruct {
++ struct list_head devList;
++ const char *name;
++
++ /* Entry parameters set up way early. Yaffs sets up the rest.*/
++ int nDataBytesPerChunk; /* Should be a power of 2 >= 512 */
++ int nChunksPerBlock; /* does not need to be a power of 2 */
++ int nBytesPerSpare; /* spare area size */
++ int startBlock; /* Start block we're allowed to use */
++ int endBlock; /* End block we're allowed to use */
++ int nReservedBlocks; /* We want this tuneable so that we can reduce */
++ /* reserved blocks on NOR and RAM. */
++
++ /* Stuff used by the partitioned checkpointing mechanism */
++ int checkpointStartBlock;
++ int checkpointEndBlock;
++
++ /* Stuff used by the shared space checkpointing mechanism */
++ /* If this value is zero, then this mechanism is disabled */
++
++ int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
++
++
++
++
++ int nShortOpCaches; /* If <= 0, then short op caching is disabled, else
++ * the number of short op caches (don't use too many)
++ */
++
++ int useHeaderFileSize; /* Flag to determine if we should use file sizes from the header */
++
++ int useNANDECC; /* Flag to decide whether or not to use NANDECC */
++
++ void *genericDevice; /* Pointer to device context
++ * On an mtd this holds the mtd pointer.
++ */
++ void *superBlock;
++
++ /* NAND access functions (Must be set before calling YAFFS)*/
++
++ int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
++ int chunkInNAND, const __u8 * data,
++ const yaffs_Spare * spare);
++ int (*readChunkFromNAND) (struct yaffs_DeviceStruct * dev,
++ int chunkInNAND, __u8 * data,
++ yaffs_Spare * spare);
++ int (*eraseBlockInNAND) (struct yaffs_DeviceStruct * dev,
++ int blockInNAND);
++ int (*initialiseNAND) (struct yaffs_DeviceStruct * dev);
++
++#ifdef CONFIG_YAFFS_YAFFS2
++ int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct * dev,
++ int chunkInNAND, const __u8 * data,
++ const yaffs_ExtendedTags * tags);
++ int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct * dev,
++ int chunkInNAND, __u8 * data,
++ yaffs_ExtendedTags * tags);
++ int (*markNANDBlockBad) (struct yaffs_DeviceStruct * dev, int blockNo);
++ int (*queryNANDBlock) (struct yaffs_DeviceStruct * dev, int blockNo,
++ yaffs_BlockState * state, int *sequenceNumber);
++#endif
++
++ int isYaffs2;
++
++ /* The removeObjectCallback function must be supplied by OS flavours that
++ * need it. The Linux kernel does not use this, but yaffs direct does use
++ * it to implement the faster readdir
++ */
++ void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
++
++ /* Callback to mark the superblock dirsty */
++ void (*markSuperBlockDirty)(void * superblock);
++
++ int wideTnodesDisabled; /* Set to disable wide tnodes */
++
++
++ /* End of stuff that must be set before initialisation. */
++
++ /* Runtime parameters. Set up by YAFFS. */
++
++ __u16 chunkGroupBits; /* 0 for devices <= 32MB. else log2(nchunks) - 16 */
++ __u16 chunkGroupSize; /* == 2^^chunkGroupBits */
++
++ /* Stuff to support wide tnodes */
++ __u32 tnodeWidth;
++ __u32 tnodeMask;
++
++ /* Stuff to support various file offses to chunk/offset translations */
++ /* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
++ __u32 crumbMask;
++ __u32 crumbShift;
++ __u32 crumbsPerChunk;
++
++ /* Straight shifting for nDataBytesPerChunk being a power of 2 */
++ __u32 chunkShift;
++ __u32 chunkMask;
++
++
++#ifdef __KERNEL__
++
++ struct semaphore sem; /* Semaphore for waiting on erasure.*/
++ struct semaphore grossLock; /* Gross locking semaphore */
++ __u8 *spareBuffer; /* For mtdif2 use. Don't know the size of the buffer
++ * at compile time so we have to allocate it.
++ */
++ void (*putSuperFunc) (struct super_block * sb);
++#endif
++
++ int isMounted;
++
++ int isCheckpointed;
++
++
++ /* Stuff to support block offsetting to support start block zero */
++ int internalStartBlock;
++ int internalEndBlock;
++ int blockOffset;
++ int chunkOffset;
++
++
++ /* Runtime checkpointing stuff */
++ int checkpointPageSequence; /* running sequence number of checkpoint pages */
++ int checkpointByteCount;
++ int checkpointByteOffset;
++ __u8 *checkpointBuffer;
++ int checkpointOpenForWrite;
++ int blocksInCheckpoint;
++ int checkpointCurrentChunk;
++ int checkpointCurrentBlock;
++ int checkpointNextBlock;
++ int *checkpointBlockList;
++ int checkpointMaxBlocks;
++
++ /* Block Info */
++ yaffs_BlockInfo *blockInfo;
++ __u8 *chunkBits; /* bitmap of chunks in use */
++ unsigned blockInfoAlt:1; /* was allocated using alternative strategy */
++ unsigned chunkBitsAlt:1; /* was allocated using alternative strategy */
++ int chunkBitmapStride; /* Number of bytes of chunkBits per block.
++ * Must be consistent with nChunksPerBlock.
++ */
++
++ int nErasedBlocks;
++ int allocationBlock; /* Current block being allocated off */
++ __u32 allocationPage;
++ int allocationBlockFinder; /* Used to search for next allocation block */
++
++ /* Runtime state */
++ int nTnodesCreated;
++ yaffs_Tnode *freeTnodes;
++ int nFreeTnodes;
++ yaffs_TnodeList *allocatedTnodeList;
++
++ int isDoingGC;
++
++ int nObjectsCreated;
++ yaffs_Object *freeObjects;
++ int nFreeObjects;
++
++ yaffs_ObjectList *allocatedObjectList;
++
++ yaffs_ObjectBucket objectBucket[YAFFS_NOBJECT_BUCKETS];
++
++ int nFreeChunks;
++
++ int currentDirtyChecker; /* Used to find current dirtiest block */
++
++ __u32 *gcCleanupList; /* objects to delete at the end of a GC. */
++
++ /* Statistcs */
++ int nPageWrites;
++ int nPageReads;
++ int nBlockErasures;
++ int nErasureFailures;
++ int nGCCopies;
++ int garbageCollections;
++ int passiveGarbageCollections;
++ int nRetriedWrites;
++ int nRetiredBlocks;
++ int eccFixed;
++ int eccUnfixed;
++ int tagsEccFixed;
++ int tagsEccUnfixed;
++ int nDeletions;
++ int nUnmarkedDeletions;
++
++ int hasPendingPrioritisedGCs; /* We think this device might have pending prioritised gcs */
++
++ /* Special directories */
++ yaffs_Object *rootDir;
++ yaffs_Object *lostNFoundDir;
++
++ /* Buffer areas for storing data to recover from write failures TODO
++ * __u8 bufferedData[YAFFS_CHUNKS_PER_BLOCK][YAFFS_BYTES_PER_CHUNK];
++ * yaffs_Spare bufferedSpare[YAFFS_CHUNKS_PER_BLOCK];
++ */
++
++ int bufferedBlock; /* Which block is buffered here? */
++ int doingBufferedBlockRewrite;
++
++ yaffs_ChunkCache *srCache;
++ int srLastUse;
++
++ int cacheHits;
++
++ /* Stuff for background deletion and unlinked files.*/
++ yaffs_Object *unlinkedDir; /* Directory where unlinked and deleted files live. */
++ yaffs_Object *deletedDir; /* Directory where deleted objects are sent to disappear. */
++ yaffs_Object *unlinkedDeletion; /* Current file being background deleted.*/
++ int nDeletedFiles; /* Count of files awaiting deletion;*/
++ int nUnlinkedFiles; /* Count of unlinked files. */
++ int nBackgroundDeletions; /* Count of background deletions. */
++
++
++ yaffs_TempBuffer tempBuffer[YAFFS_N_TEMP_BUFFERS];
++ int maxTemp;
++ int unmanagedTempAllocations;
++ int unmanagedTempDeallocations;
++
++ /* yaffs2 runtime stuff */
++ unsigned sequenceNumber; /* Sequence number of currently allocating block */
++ unsigned oldestDirtySequence;
++
++};
++
++typedef struct yaffs_DeviceStruct yaffs_Device;
++
++/* The static layout of bllock usage etc is stored in the super block header */
++typedef struct {
++ int StructType;
++ int version;
++ int checkpointStartBlock;
++ int checkpointEndBlock;
++ int startBlock;
++ int endBlock;
++ int rfu[100];
++} yaffs_SuperBlockHeader;
++
++/* The CheckpointDevice structure holds the device information that changes at runtime and
++ * must be preserved over unmount/mount cycles.
++ */
++typedef struct {
++ int structType;
++ int nErasedBlocks;
++ int allocationBlock; /* Current block being allocated off */
++ __u32 allocationPage;
++ int nFreeChunks;
++
++ int nDeletedFiles; /* Count of files awaiting deletion;*/
++ int nUnlinkedFiles; /* Count of unlinked files. */
++ int nBackgroundDeletions; /* Count of background deletions. */
++
++ /* yaffs2 runtime stuff */
++ unsigned sequenceNumber; /* Sequence number of currently allocating block */
++ unsigned oldestDirtySequence;
++
++} yaffs_CheckpointDevice;
++
++
++typedef struct {
++ int structType;
++ __u32 magic;
++ __u32 version;
++ __u32 head;
++} yaffs_CheckpointValidity;
++
++/* Function to manipulate block info */
++static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
++{
++ if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
++ blk));
++ YBUG();
++ }
++ return &dev->blockInfo[blk - dev->internalStartBlock];
++}
++
++/*----------------------- YAFFS Functions -----------------------*/
++
++int yaffs_GutsInitialise(yaffs_Device * dev);
++void yaffs_Deinitialise(yaffs_Device * dev);
++
++int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev);
++
++int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
++ yaffs_Object * newDir, const YCHAR * newName);
++
++int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name);
++int yaffs_DeleteFile(yaffs_Object * obj);
++
++int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize);
++int yaffs_GetObjectFileLength(yaffs_Object * obj);
++int yaffs_GetObjectInode(yaffs_Object * obj);
++unsigned yaffs_GetObjectType(yaffs_Object * obj);
++int yaffs_GetObjectLinkCount(yaffs_Object * obj);
++
++int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr);
++int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr);
++
++/* File operations */
++int yaffs_ReadDataFromFile(yaffs_Object * obj, __u8 * buffer, loff_t offset,
++ int nBytes);
++int yaffs_WriteDataToFile(yaffs_Object * obj, const __u8 * buffer, loff_t offset,
++ int nBytes, int writeThrough);
++int yaffs_ResizeFile(yaffs_Object * obj, loff_t newSize);
++
++yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid);
++int yaffs_FlushFile(yaffs_Object * obj, int updateTime);
++
++/* Flushing and checkpointing */
++void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
++
++int yaffs_CheckpointSave(yaffs_Device *dev);
++int yaffs_CheckpointRestore(yaffs_Device *dev);
++
++/* Directory operations */
++yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid);
++yaffs_Object *yaffs_FindObjectByName(yaffs_Object * theDir, const YCHAR * name);
++int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
++ int (*fn) (yaffs_Object *));
++
++yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number);
++
++/* Link operations */
++yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
++ yaffs_Object * equivalentObject);
++
++yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj);
++
++/* Symlink operations */
++yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid,
++ const YCHAR * alias);
++YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj);
++
++/* Special inodes (fifos, sockets and devices) */
++yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
++ __u32 mode, __u32 uid, __u32 gid, __u32 rdev);
++
++/* Special directories */
++yaffs_Object *yaffs_Root(yaffs_Device * dev);
++yaffs_Object *yaffs_LostNFound(yaffs_Device * dev);
++
++#ifdef CONFIG_YAFFS_WINCE
++/* CONFIG_YAFFS_WINCE special stuff */
++void yfsd_WinFileTimeNow(__u32 target[2]);
++#endif
++
++#ifdef __KERNEL__
++
++void yaffs_HandleDeferedFree(yaffs_Object * obj);
++#endif
++
++/* Debug dump */
++int yaffs_DumpObject(yaffs_Object * obj);
++
++void yaffs_GutsTest(yaffs_Device * dev);
++
++/* A few useful functions */
++void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
++void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn);
++int yaffs_CheckFF(__u8 * buffer, int nBytes);
++void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffsinterface.h linux.dev/fs/yaffs2/yaffsinterface.h
+--- linux.old/fs/yaffs2/yaffsinterface.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffsinterface.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffsinterface.h: Interface to the guts of yaffs.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ */
++
++#ifndef __YAFFSINTERFACE_H__
++#define __YAFFSINTERFACE_H__
++
++int yaffs_Initialise(unsigned nBlocks);
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_mtdif2.c linux.dev/fs/yaffs2/yaffs_mtdif2.c
+--- linux.old/fs/yaffs2/yaffs_mtdif2.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_mtdif2.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,234 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_mtdif.c NAND mtd wrapper functions.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++/* mtd interface for YAFFS2 */
++
++const char *yaffs_mtdif2_c_version =
++ "$Id: yaffs_mtdif2.c,v 1.15 2006/11/08 06:24:34 charles Exp $";
++
++#include "yportenv.h"
++
++
++#include "yaffs_mtdif2.h"
++
++#include "linux/mtd/mtd.h"
++#include "linux/types.h"
++#include "linux/time.h"
++
++#include "yaffs_packedtags2.h"
++
++int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags * tags)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#else
++ size_t dummy;
++#endif
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++
++ yaffs_PackedTags2 pt;
++
++ T(YAFFS_TRACE_MTD,
++ (TSTR
++ ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
++ TENDSTR), chunkInNAND, data, tags));
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ if (tags)
++ yaffs_PackTags2(&pt, tags);
++ else
++ BUG(); /* both tags and data should always be present */
++
++ if (data) {
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = sizeof(pt);
++ ops.len = dev->nDataBytesPerChunk;
++ ops.ooboffs = 0;
++ ops.datbuf = (__u8 *)data;
++ ops.oobbuf = (void *)&pt;
++ retval = mtd->write_oob(mtd, addr, &ops);
++ } else
++ BUG(); /* both tags and data should always be present */
++#else
++ if (tags) {
++ yaffs_PackTags2(&pt, tags);
++ }
++
++ if (data && tags) {
++ if (dev->useNANDECC)
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, (__u8 *) & pt, NULL);
++ else
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, (__u8 *) & pt, NULL);
++ } else {
++ if (data)
++ retval =
++ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (tags)
++ retval =
++ mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
++ (__u8 *) & pt);
++
++ }
++#endif
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
++ __u8 * data, yaffs_ExtendedTags * tags)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#endif
++ size_t dummy;
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++
++ yaffs_PackedTags2 pt;
++
++ T(YAFFS_TRACE_MTD,
++ (TSTR
++ ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
++ TENDSTR), chunkInNAND, data, tags));
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ if (data && !tags)
++ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data);
++ else if (tags) {
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = sizeof(pt);
++ ops.len = data ? dev->nDataBytesPerChunk : sizeof(pt);
++ ops.ooboffs = 0;
++ ops.datbuf = data;
++ ops.oobbuf = dev->spareBuffer;
++ retval = mtd->read_oob(mtd, addr, &ops);
++ }
++#else
++ if (data && tags) {
++ if (dev->useNANDECC) {
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, dev->spareBuffer,
++ NULL);
++ } else {
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, dev->spareBuffer,
++ NULL);
++ }
++ } else {
++ if (data)
++ retval =
++ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (tags)
++ retval =
++ mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
++ dev->spareBuffer);
++ }
++#endif
++
++ memcpy(&pt, dev->spareBuffer, sizeof(pt));
++
++ if (tags)
++ yaffs_UnpackTags2(tags, &pt);
++
++ if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
++ tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++ int retval;
++ T(YAFFS_TRACE_MTD,
++ (TSTR("nandmtd2_MarkNANDBlockBad %d" TENDSTR), blockNo));
++
++ retval =
++ mtd->block_markbad(mtd,
++ blockNo * dev->nChunksPerBlock *
++ dev->nDataBytesPerChunk);
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++
++}
++
++int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
++ yaffs_BlockState * state, int *sequenceNumber)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++ int retval;
++
++ T(YAFFS_TRACE_MTD,
++ (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), blockNo));
++ retval =
++ mtd->block_isbad(mtd,
++ blockNo * dev->nChunksPerBlock *
++ dev->nDataBytesPerChunk);
++
++ if (retval) {
++ T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
++
++ *state = YAFFS_BLOCK_STATE_DEAD;
++ *sequenceNumber = 0;
++ } else {
++ yaffs_ExtendedTags t;
++ nandmtd2_ReadChunkWithTagsFromNAND(dev,
++ blockNo *
++ dev->nChunksPerBlock, NULL,
++ &t);
++
++ if (t.chunkUsed) {
++ *sequenceNumber = t.sequenceNumber;
++ *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
++ } else {
++ *sequenceNumber = 0;
++ *state = YAFFS_BLOCK_STATE_EMPTY;
++ }
++ }
++ T(YAFFS_TRACE_MTD,
++ (TSTR("block is bad seq %d state %d" TENDSTR), *sequenceNumber,
++ *state));
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
+diff -urN linux.old/fs/yaffs2/yaffs_mtdif2.h linux.dev/fs/yaffs2/yaffs_mtdif2.h
+--- linux.old/fs/yaffs2/yaffs_mtdif2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_mtdif2.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,29 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_mtdif.c NAND mtd wrapper functions.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#ifndef __YAFFS_MTDIF2_H__
++#define __YAFFS_MTDIF2_H__
++
++#include "yaffs_guts.h"
++int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags * tags);
++int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
++ __u8 * data, yaffs_ExtendedTags * tags);
++int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
++int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
++ yaffs_BlockState * state, int *sequenceNumber);
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_mtdif.c linux.dev/fs/yaffs2/yaffs_mtdif.c
+--- linux.old/fs/yaffs2/yaffs_mtdif.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_mtdif.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,243 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_mtdif.c NAND mtd wrapper functions.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++const char *yaffs_mtdif_c_version =
++ "$Id: yaffs_mtdif.c,v 1.17 2006/11/29 20:21:12 charles Exp $";
++
++#include "yportenv.h"
++
++
++#include "yaffs_mtdif.h"
++
++#include "linux/mtd/mtd.h"
++#include "linux/types.h"
++#include "linux/time.h"
++#include "linux/mtd/nand.h"
++
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
++static struct nand_oobinfo yaffs_oobinfo = {
++ .useecc = 1,
++ .eccbytes = 6,
++ .eccpos = {8, 9, 10, 13, 14, 15}
++};
++
++static struct nand_oobinfo yaffs_noeccinfo = {
++ .useecc = 0,
++};
++#endif
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
++{
++ oob[0] = spare->tagByte0;
++ oob[1] = spare->tagByte1;
++ oob[2] = spare->tagByte2;
++ oob[3] = spare->tagByte3;
++ oob[4] = spare->tagByte4;
++ oob[5] = spare->tagByte5 & 0x3f;
++ oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
++ oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
++ oob[6] = spare->tagByte6;
++ oob[7] = spare->tagByte7;
++}
++
++static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
++{
++ struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
++ spare->tagByte0 = oob[0];
++ spare->tagByte1 = oob[1];
++ spare->tagByte2 = oob[2];
++ spare->tagByte3 = oob[3];
++ spare->tagByte4 = oob[4];
++ spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
++ spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
++ spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
++ spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
++ spare->tagByte6 = oob[6];
++ spare->tagByte7 = oob[7];
++ spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
++
++ nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
++}
++#endif
++
++int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data, const yaffs_Spare * spare)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#endif
++ size_t dummy;
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ __u8 spareAsBytes[8]; /* OOB */
++
++ if (data && !spare)
++ retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data);
++ else if (spare) {
++ if (dev->useNANDECC) {
++ translate_spare2oob(spare, spareAsBytes);
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = 8; /* temp hack */
++ } else {
++ ops.mode = MTD_OOB_RAW;
++ ops.ooblen = YAFFS_BYTES_PER_SPARE;
++ }
++ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
++ ops.datbuf = (u8 *)data;
++ ops.ooboffs = 0;
++ ops.oobbuf = spareAsBytes;
++ retval = mtd->write_oob(mtd, addr, &ops);
++ }
++#else
++ __u8 *spareAsBytes = (__u8 *) spare;
++
++ if (data && spare) {
++ if (dev->useNANDECC)
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_oobinfo);
++ else
++ retval =
++ mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_noeccinfo);
++ } else {
++ if (data)
++ retval =
++ mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (spare)
++ retval =
++ mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
++ &dummy, spareAsBytes);
++ }
++#endif
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
++ yaffs_Spare * spare)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ struct mtd_oob_ops ops;
++#endif
++ size_t dummy;
++ int retval = 0;
++
++ loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
++ __u8 spareAsBytes[8]; /* OOB */
++
++ if (data && !spare)
++ retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data);
++ else if (spare) {
++ if (dev->useNANDECC) {
++ ops.mode = MTD_OOB_AUTO;
++ ops.ooblen = 8; /* temp hack */
++ } else {
++ ops.mode = MTD_OOB_RAW;
++ ops.ooblen = YAFFS_BYTES_PER_SPARE;
++ }
++ ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
++ ops.datbuf = data;
++ ops.ooboffs = 0;
++ ops.oobbuf = spareAsBytes;
++ retval = mtd->read_oob(mtd, addr, &ops);
++ if (dev->useNANDECC)
++ translate_oob2spare(spare, spareAsBytes);
++ }
++#else
++ __u8 *spareAsBytes = (__u8 *) spare;
++
++ if (data && spare) {
++ if (dev->useNANDECC) {
++ /* Careful, this call adds 2 ints */
++ /* to the end of the spare data. Calling function */
++ /* should allocate enough memory for spare, */
++ /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_oobinfo);
++ } else {
++ retval =
++ mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
++ &dummy, data, spareAsBytes,
++ &yaffs_noeccinfo);
++ }
++ } else {
++ if (data)
++ retval =
++ mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
++ data);
++ if (spare)
++ retval =
++ mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
++ &dummy, spareAsBytes);
++ }
++#endif
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
++{
++ struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
++ __u32 addr =
++ ((loff_t) blockNumber) * dev->nDataBytesPerChunk
++ * dev->nChunksPerBlock;
++ struct erase_info ei;
++ int retval = 0;
++
++ ei.mtd = mtd;
++ ei.addr = addr;
++ ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
++ ei.time = 1000;
++ ei.retries = 2;
++ ei.callback = NULL;
++ ei.priv = (u_long) dev;
++
++ /* Todo finish off the ei if required */
++
++ sema_init(&dev->sem, 0);
++
++ retval = mtd->erase(mtd, &ei);
++
++ if (retval == 0)
++ return YAFFS_OK;
++ else
++ return YAFFS_FAIL;
++}
++
++int nandmtd_InitialiseNAND(yaffs_Device * dev)
++{
++ return YAFFS_OK;
++}
++
+diff -urN linux.old/fs/yaffs2/yaffs_mtdif.h linux.dev/fs/yaffs2/yaffs_mtdif.h
+--- linux.old/fs/yaffs2/yaffs_mtdif.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_mtdif.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_mtdif.h NAND mtd interface wrappers
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ * $Id: yaffs_mtdif.h,v 1.3 2005/08/11 01:07:43 marty Exp $
++ */
++
++#ifndef __YAFFS_MTDIF_H__
++#define __YAFFS_MTDIF_H__
++
++#include "yaffs_guts.h"
++
++int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data, const yaffs_Spare * spare);
++int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
++ yaffs_Spare * spare);
++int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
++int nandmtd_InitialiseNAND(yaffs_Device * dev);
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_nand.c linux.dev/fs/yaffs2/yaffs_nand.c
+--- linux.old/fs/yaffs2/yaffs_nand.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_nand.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,135 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++const char *yaffs_nand_c_version =
++ "$Id: yaffs_nand.c,v 1.5 2006/11/08 09:52:12 charles Exp $";
++
++#include "yaffs_nand.h"
++#include "yaffs_tagscompat.h"
++#include "yaffs_tagsvalidity.h"
++
++
++int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
++ __u8 * buffer,
++ yaffs_ExtendedTags * tags)
++{
++ int result;
++ yaffs_ExtendedTags localTags;
++
++ int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
++
++ /* If there are no tags provided, use local tags to get prioritised gc working */
++ if(!tags)
++ tags = &localTags;
++
++ if (dev->readChunkWithTagsFromNAND)
++ result = dev->readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer,
++ tags);
++ else
++ result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev,
++ realignedChunkInNAND,
++ buffer,
++ tags);
++ if(tags &&
++ tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
++
++ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
++ yaffs_HandleChunkError(dev,bi);
++ }
++
++ return result;
++}
++
++int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ const __u8 * buffer,
++ yaffs_ExtendedTags * tags)
++{
++ chunkInNAND -= dev->chunkOffset;
++
++
++ if (tags) {
++ tags->sequenceNumber = dev->sequenceNumber;
++ tags->chunkUsed = 1;
++ if (!yaffs_ValidateTags(tags)) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("Writing uninitialised tags" TENDSTR)));
++ YBUG();
++ }
++ T(YAFFS_TRACE_WRITE,
++ (TSTR("Writing chunk %d tags %d %d" TENDSTR), chunkInNAND,
++ tags->objectId, tags->chunkId));
++ } else {
++ T(YAFFS_TRACE_ERROR, (TSTR("Writing with no tags" TENDSTR)));
++ YBUG();
++ }
++
++ if (dev->writeChunkWithTagsToNAND)
++ return dev->writeChunkWithTagsToNAND(dev, chunkInNAND, buffer,
++ tags);
++ else
++ return yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(dev,
++ chunkInNAND,
++ buffer,
++ tags);
++}
++
++int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
++{
++ blockNo -= dev->blockOffset;
++
++;
++ if (dev->markNANDBlockBad)
++ return dev->markNANDBlockBad(dev, blockNo);
++ else
++ return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
++}
++
++int yaffs_QueryInitialBlockState(yaffs_Device * dev,
++ int blockNo,
++ yaffs_BlockState * state,
++ unsigned *sequenceNumber)
++{
++ blockNo -= dev->blockOffset;
++
++ if (dev->queryNANDBlock)
++ return dev->queryNANDBlock(dev, blockNo, state, sequenceNumber);
++ else
++ return yaffs_TagsCompatabilityQueryNANDBlock(dev, blockNo,
++ state,
++ sequenceNumber);
++}
++
++
++int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
++ int blockInNAND)
++{
++ int result;
++
++ blockInNAND -= dev->blockOffset;
++
++
++ dev->nBlockErasures++;
++ result = dev->eraseBlockInNAND(dev, blockInNAND);
++
++ return result;
++}
++
++int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev)
++{
++ return dev->initialiseNAND(dev);
++}
++
++
++
+diff -urN linux.old/fs/yaffs2/yaffs_nandemul2k.h linux.dev/fs/yaffs2/yaffs_nandemul2k.h
+--- linux.old/fs/yaffs2/yaffs_nandemul2k.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_nandemul2k.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,42 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ * yaffs_nandemul2k.h: Interface to emulated NAND functions (2k page size)
++ *
++ * $Id: yaffs_nandemul2k.h,v 1.2 2005/08/11 02:37:49 marty Exp $
++ */
++
++#ifndef __YAFFS_NANDEMUL2K_H__
++#define __YAFFS_NANDEMUL2K_H__
++
++#include "yaffs_guts.h"
++
++int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND, const __u8 * data,
++ yaffs_ExtendedTags * tags);
++int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND, __u8 * data,
++ yaffs_ExtendedTags * tags);
++int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
++int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
++ yaffs_BlockState * state, int *sequenceNumber);
++int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
++ int blockInNAND);
++int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
++int nandemul2k_GetBytesPerChunk(void);
++int nandemul2k_GetChunksPerBlock(void);
++int nandemul2k_GetNumberOfBlocks(void);
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_nand.h linux.dev/fs/yaffs2/yaffs_nand.h
+--- linux.old/fs/yaffs2/yaffs_nand.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_nand.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,43 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#ifndef __YAFFS_NAND_H__
++#define __YAFFS_NAND_H__
++#include "yaffs_guts.h"
++
++
++
++int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
++ __u8 * buffer,
++ yaffs_ExtendedTags * tags);
++
++int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ const __u8 * buffer,
++ yaffs_ExtendedTags * tags);
++
++int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo);
++
++int yaffs_QueryInitialBlockState(yaffs_Device * dev,
++ int blockNo,
++ yaffs_BlockState * state,
++ unsigned *sequenceNumber);
++
++int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
++ int blockInNAND);
++
++int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev);
++
++#endif
++
+diff -urN linux.old/fs/yaffs2/yaffs_packedtags1.c linux.dev/fs/yaffs2/yaffs_packedtags1.c
+--- linux.old/fs/yaffs2/yaffs_packedtags1.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_packedtags1.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,39 @@
++#include "yaffs_packedtags1.h"
++#include "yportenv.h"
++
++void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t)
++{
++ pt->chunkId = t->chunkId;
++ pt->serialNumber = t->serialNumber;
++ pt->byteCount = t->byteCount;
++ pt->objectId = t->objectId;
++ pt->ecc = 0;
++ pt->deleted = (t->chunkDeleted) ? 0 : 1;
++ pt->unusedStuff = 0;
++ pt->shouldBeFF = 0xFFFFFFFF;
++
++}
++
++void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt)
++{
++ static const __u8 allFF[] =
++ { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
++0xff };
++
++ if (memcmp(allFF, pt, sizeof(yaffs_PackedTags1))) {
++ t->blockBad = 0;
++ if (pt->shouldBeFF != 0xFFFFFFFF) {
++ t->blockBad = 1;
++ }
++ t->chunkUsed = 1;
++ t->objectId = pt->objectId;
++ t->chunkId = pt->chunkId;
++ t->byteCount = pt->byteCount;
++ t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
++ t->chunkDeleted = (pt->deleted) ? 0 : 1;
++ t->serialNumber = pt->serialNumber;
++ } else {
++ memset(t, 0, sizeof(yaffs_ExtendedTags));
++
++ }
++}
+diff -urN linux.old/fs/yaffs2/yaffs_packedtags1.h linux.dev/fs/yaffs2/yaffs_packedtags1.h
+--- linux.old/fs/yaffs2/yaffs_packedtags1.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_packedtags1.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,22 @@
++// This is used to pack YAFFS1 tags, not YAFFS2 tags.
++
++#ifndef __YAFFS_PACKEDTAGS1_H__
++#define __YAFFS_PACKEDTAGS1_H__
++
++#include "yaffs_guts.h"
++
++typedef struct {
++ unsigned chunkId:20;
++ unsigned serialNumber:2;
++ unsigned byteCount:10;
++ unsigned objectId:18;
++ unsigned ecc:12;
++ unsigned deleted:1;
++ unsigned unusedStuff:1;
++ unsigned shouldBeFF;
++
++} yaffs_PackedTags1;
++
++void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
++void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_packedtags2.c linux.dev/fs/yaffs2/yaffs_packedtags2.c
+--- linux.old/fs/yaffs2/yaffs_packedtags2.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_packedtags2.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,184 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * yaffs_packedtags2.c: Tags packing for YAFFS2
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public License
++ * version 2.1 as published by the Free Software Foundation.
++ */
++
++#include "yaffs_packedtags2.h"
++#include "yportenv.h"
++#include "yaffs_tagsvalidity.h"
++
++/* This code packs a set of extended tags into a binary structure for
++ * NAND storage
++ */
++
++/* Some of the information is "extra" struff which can be packed in to
++ * speed scanning
++ * This is defined by having the EXTRA_HEADER_INFO_FLAG set.
++ */
++
++/* Extra flags applied to chunkId */
++
++#define EXTRA_HEADER_INFO_FLAG 0x80000000
++#define EXTRA_SHRINK_FLAG 0x40000000
++#define EXTRA_SHADOWS_FLAG 0x20000000
++#define EXTRA_SPARE_FLAGS 0x10000000
++
++#define ALL_EXTRA_FLAGS 0xF0000000
++
++/* Also, the top 4 bits of the object Id are set to the object type. */
++#define EXTRA_OBJECT_TYPE_SHIFT (28)
++#define EXTRA_OBJECT_TYPE_MASK ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT)
++
++static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt)
++{
++ T(YAFFS_TRACE_MTD,
++ (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR),
++ pt->t.objectId, pt->t.chunkId, pt->t.byteCount,
++ pt->t.sequenceNumber));
++}
++
++static void yaffs_DumpTags2(const yaffs_ExtendedTags * t)
++{
++ T(YAFFS_TRACE_MTD,
++ (TSTR
++ ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte "
++ "%d del %d ser %d seq %d"
++ TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId,
++ t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber,
++ t->sequenceNumber));
++
++}
++
++void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t)
++{
++ pt->t.chunkId = t->chunkId;
++ pt->t.sequenceNumber = t->sequenceNumber;
++ pt->t.byteCount = t->byteCount;
++ pt->t.objectId = t->objectId;
++
++ if (t->chunkId == 0 && t->extraHeaderInfoAvailable) {
++ /* Store the extra header info instead */
++ /* We save the parent object in the chunkId */
++ pt->t.chunkId = EXTRA_HEADER_INFO_FLAG
++ | t->extraParentObjectId;
++ if (t->extraIsShrinkHeader) {
++ pt->t.chunkId |= EXTRA_SHRINK_FLAG;
++ }
++ if (t->extraShadows) {
++ pt->t.chunkId |= EXTRA_SHADOWS_FLAG;
++ }
++
++ pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK;
++ pt->t.objectId |=
++ (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
++
++ if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
++ pt->t.byteCount = t->extraEquivalentObjectId;
++ } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
++ pt->t.byteCount = t->extraFileLength;
++ } else {
++ pt->t.byteCount = 0;
++ }
++ }
++
++ yaffs_DumpPackedTags2(pt);
++ yaffs_DumpTags2(t);
++
++#ifndef YAFFS_IGNORE_TAGS_ECC
++ {
++ yaffs_ECCCalculateOther((unsigned char *)&pt->t,
++ sizeof(yaffs_PackedTags2TagsPart),
++ &pt->ecc);
++ }
++#endif
++}
++
++void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
++{
++
++ memset(t, 0, sizeof(yaffs_ExtendedTags));
++
++ yaffs_InitialiseTags(t);
++
++ if (pt->t.sequenceNumber != 0xFFFFFFFF) {
++ /* Page is in use */
++#ifdef YAFFS_IGNORE_TAGS_ECC
++ {
++ t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
++ }
++#else
++ {
++ yaffs_ECCOther ecc;
++ int result;
++ yaffs_ECCCalculateOther((unsigned char *)&pt->t,
++ sizeof
++ (yaffs_PackedTags2TagsPart),
++ &ecc);
++ result =
++ yaffs_ECCCorrectOther((unsigned char *)&pt->t,
++ sizeof
++ (yaffs_PackedTags2TagsPart),
++ &pt->ecc, &ecc);
++ switch(result){
++ case 0:
++ t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
++ break;
++ case 1:
++ t->eccResult = YAFFS_ECC_RESULT_FIXED;
++ break;
++ case -1:
++ t->eccResult = YAFFS_ECC_RESULT_UNFIXED;
++ break;
++ default:
++ t->eccResult = YAFFS_ECC_RESULT_UNKNOWN;
++ }
++ }
++#endif
++ t->blockBad = 0;
++ t->chunkUsed = 1;
++ t->objectId = pt->t.objectId;
++ t->chunkId = pt->t.chunkId;
++ t->byteCount = pt->t.byteCount;
++ t->chunkDeleted = 0;
++ t->serialNumber = 0;
++ t->sequenceNumber = pt->t.sequenceNumber;
++
++ /* Do extra header info stuff */
++
++ if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) {
++ t->chunkId = 0;
++ t->byteCount = 0;
++
++ t->extraHeaderInfoAvailable = 1;
++ t->extraParentObjectId =
++ pt->t.chunkId & (~(ALL_EXTRA_FLAGS));
++ t->extraIsShrinkHeader =
++ (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
++ t->extraShadows =
++ (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
++ t->extraObjectType =
++ pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT;
++ t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
++
++ if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
++ t->extraEquivalentObjectId = pt->t.byteCount;
++ } else {
++ t->extraFileLength = pt->t.byteCount;
++ }
++ }
++ }
++
++ yaffs_DumpPackedTags2(pt);
++ yaffs_DumpTags2(t);
++
++}
+diff -urN linux.old/fs/yaffs2/yaffs_packedtags2.h linux.dev/fs/yaffs2/yaffs_packedtags2.h
+--- linux.old/fs/yaffs2/yaffs_packedtags2.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_packedtags2.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,23 @@
++/* This is used to pack YAFFS2 tags, not YAFFS1tags. */
++
++#ifndef __YAFFS_PACKEDTAGS2_H__
++#define __YAFFS_PACKEDTAGS2_H__
++
++#include "yaffs_guts.h"
++#include "yaffs_ecc.h"
++
++typedef struct {
++ unsigned sequenceNumber;
++ unsigned objectId;
++ unsigned chunkId;
++ unsigned byteCount;
++} yaffs_PackedTags2TagsPart;
++
++typedef struct {
++ yaffs_PackedTags2TagsPart t;
++ yaffs_ECCOther ecc;
++} yaffs_PackedTags2;
++
++void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
++void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_qsort.c linux.dev/fs/yaffs2/yaffs_qsort.c
+--- linux.old/fs/yaffs2/yaffs_qsort.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_qsort.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,156 @@
++/*
++ * Copyright (c) 1992, 1993
++ * The Regents of the University of California. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. Neither the name of the University nor the names of its contributors
++ * may be used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++#include "yportenv.h"
++//#include <linux/string.h>
++
++/*
++ * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
++ */
++#define swapcode(TYPE, parmi, parmj, n) { \
++ long i = (n) / sizeof (TYPE); \
++ register TYPE *pi = (TYPE *) (parmi); \
++ register TYPE *pj = (TYPE *) (parmj); \
++ do { \
++ register TYPE t = *pi; \
++ *pi++ = *pj; \
++ *pj++ = t; \
++ } while (--i > 0); \
++}
++
++#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
++ es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
++
++static __inline void
++swapfunc(char *a, char *b, int n, int swaptype)
++{
++ if (swaptype <= 1)
++ swapcode(long, a, b, n)
++ else
++ swapcode(char, a, b, n)
++}
++
++#define swap(a, b) \
++ if (swaptype == 0) { \
++ long t = *(long *)(a); \
++ *(long *)(a) = *(long *)(b); \
++ *(long *)(b) = t; \
++ } else \
++ swapfunc(a, b, es, swaptype)
++
++#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype)
++
++static __inline char *
++med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
++{
++ return cmp(a, b) < 0 ?
++ (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
++ :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
++}
++
++#define min(a,b) (((a) < (b)) ? (a) : (b))
++void
++qsort(void *aa, size_t n, size_t es, int (*cmp)(const void *, const void *))
++{
++ char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
++ int d, r, swaptype, swap_cnt;
++ register char *a = aa;
++
++loop: SWAPINIT(a, es);
++ swap_cnt = 0;
++ if (n < 7) {
++ for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
++ for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
++ pl -= es)
++ swap(pl, pl - es);
++ return;
++ }
++ pm = (char *)a + (n / 2) * es;
++ if (n > 7) {
++ pl = (char *)a;
++ pn = (char *)a + (n - 1) * es;
++ if (n > 40) {
++ d = (n / 8) * es;
++ pl = med3(pl, pl + d, pl + 2 * d, cmp);
++ pm = med3(pm - d, pm, pm + d, cmp);
++ pn = med3(pn - 2 * d, pn - d, pn, cmp);
++ }
++ pm = med3(pl, pm, pn, cmp);
++ }
++ swap(a, pm);
++ pa = pb = (char *)a + es;
++
++ pc = pd = (char *)a + (n - 1) * es;
++ for (;;) {
++ while (pb <= pc && (r = cmp(pb, a)) <= 0) {
++ if (r == 0) {
++ swap_cnt = 1;
++ swap(pa, pb);
++ pa += es;
++ }
++ pb += es;
++ }
++ while (pb <= pc && (r = cmp(pc, a)) >= 0) {
++ if (r == 0) {
++ swap_cnt = 1;
++ swap(pc, pd);
++ pd -= es;
++ }
++ pc -= es;
++ }
++ if (pb > pc)
++ break;
++ swap(pb, pc);
++ swap_cnt = 1;
++ pb += es;
++ pc -= es;
++ }
++ if (swap_cnt == 0) { /* Switch to insertion sort */
++ for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
++ for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
++ pl -= es)
++ swap(pl, pl - es);
++ return;
++ }
++
++ pn = (char *)a + n * es;
++ r = min(pa - (char *)a, pb - pa);
++ vecswap(a, pb - r, r);
++ r = min((long)(pd - pc), (long)(pn - pd - es));
++ vecswap(pb, pn - r, r);
++ if ((r = pb - pa) > es)
++ qsort(a, r / es, es, cmp);
++ if ((r = pd - pc) > es) {
++ /* Iterate rather than recurse to save stack space */
++ a = pn - r;
++ n = r / es;
++ goto loop;
++ }
++/* qsort(pn - r, r / es, es, cmp);*/
++}
+diff -urN linux.old/fs/yaffs2/yaffs_qsort.h linux.dev/fs/yaffs2/yaffs_qsort.h
+--- linux.old/fs/yaffs2/yaffs_qsort.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_qsort.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_qsort.h: Interface to BSD-licensed qsort routine.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ * $Id: yaffs_qsort.h,v 1.2 2006/11/07 23:20:09 charles Exp $
++ */
++
++#ifndef __YAFFS_QSORT_H__
++#define __YAFFS_QSORT_H__
++
++extern void qsort (void *const base, size_t total_elems, size_t size,
++ int (*cmp)(const void *, const void *));
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_tagscompat.c linux.dev/fs/yaffs2/yaffs_tagscompat.c
+--- linux.old/fs/yaffs2/yaffs_tagscompat.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_tagscompat.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,532 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_tagscompat.h: Tags compatability layer to use YAFFS1 formatted NAND.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * $Id: yaffs_tagscompat.c,v 1.8 2005/11/29 20:54:32 marty Exp $
++ */
++
++#include "yaffs_guts.h"
++#include "yaffs_tagscompat.h"
++#include "yaffs_ecc.h"
++
++static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND);
++#ifdef NOTYET
++static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND);
++static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_Spare * spare);
++static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
++ const yaffs_Spare * spare);
++static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND);
++#endif
++
++static const char yaffs_countBitsTable[256] = {
++ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
++ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
++ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
++ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
++ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
++ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
++ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
++ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
++};
++
++static int yaffs_CountBits(__u8 x)
++{
++ int retVal;
++ retVal = yaffs_countBitsTable[x];
++ return retVal;
++}
++
++/********** Tags ECC calculations *********/
++
++void yaffs_CalcECC(const __u8 * data, yaffs_Spare * spare)
++{
++ yaffs_ECCCalculate(data, spare->ecc1);
++ yaffs_ECCCalculate(&data[256], spare->ecc2);
++}
++
++void yaffs_CalcTagsECC(yaffs_Tags * tags)
++{
++ /* Calculate an ecc */
++
++ unsigned char *b = ((yaffs_TagsUnion *) tags)->asBytes;
++ unsigned i, j;
++ unsigned ecc = 0;
++ unsigned bit = 0;
++
++ tags->ecc = 0;
++
++ for (i = 0; i < 8; i++) {
++ for (j = 1; j & 0xff; j <<= 1) {
++ bit++;
++ if (b[i] & j) {
++ ecc ^= bit;
++ }
++ }
++ }
++
++ tags->ecc = ecc;
++
++}
++
++int yaffs_CheckECCOnTags(yaffs_Tags * tags)
++{
++ unsigned ecc = tags->ecc;
++
++ yaffs_CalcTagsECC(tags);
++
++ ecc ^= tags->ecc;
++
++ if (ecc && ecc <= 64) {
++ /* TODO: Handle the failure better. Retire? */
++ unsigned char *b = ((yaffs_TagsUnion *) tags)->asBytes;
++
++ ecc--;
++
++ b[ecc / 8] ^= (1 << (ecc & 7));
++
++ /* Now recvalc the ecc */
++ yaffs_CalcTagsECC(tags);
++
++ return 1; /* recovered error */
++ } else if (ecc) {
++ /* Wierd ecc failure value */
++ /* TODO Need to do somethiong here */
++ return -1; /* unrecovered error */
++ }
++
++ return 0;
++}
++
++/********** Tags **********/
++
++static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
++ yaffs_Tags * tagsPtr)
++{
++ yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
++
++ yaffs_CalcTagsECC(tagsPtr);
++
++ sparePtr->tagByte0 = tu->asBytes[0];
++ sparePtr->tagByte1 = tu->asBytes[1];
++ sparePtr->tagByte2 = tu->asBytes[2];
++ sparePtr->tagByte3 = tu->asBytes[3];
++ sparePtr->tagByte4 = tu->asBytes[4];
++ sparePtr->tagByte5 = tu->asBytes[5];
++ sparePtr->tagByte6 = tu->asBytes[6];
++ sparePtr->tagByte7 = tu->asBytes[7];
++}
++
++static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
++ yaffs_Tags * tagsPtr)
++{
++ yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
++ int result;
++
++ tu->asBytes[0] = sparePtr->tagByte0;
++ tu->asBytes[1] = sparePtr->tagByte1;
++ tu->asBytes[2] = sparePtr->tagByte2;
++ tu->asBytes[3] = sparePtr->tagByte3;
++ tu->asBytes[4] = sparePtr->tagByte4;
++ tu->asBytes[5] = sparePtr->tagByte5;
++ tu->asBytes[6] = sparePtr->tagByte6;
++ tu->asBytes[7] = sparePtr->tagByte7;
++
++ result = yaffs_CheckECCOnTags(tagsPtr);
++ if (result > 0) {
++ dev->tagsEccFixed++;
++ } else if (result < 0) {
++ dev->tagsEccUnfixed++;
++ }
++}
++
++static void yaffs_SpareInitialise(yaffs_Spare * spare)
++{
++ memset(spare, 0xFF, sizeof(yaffs_Spare));
++}
++
++static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND, const __u8 * data,
++ yaffs_Spare * spare)
++{
++ if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR("**>> yaffs chunk %d is not valid" TENDSTR),
++ chunkInNAND));
++ return YAFFS_FAIL;
++ }
++
++ dev->nPageWrites++;
++ return dev->writeChunkToNAND(dev, chunkInNAND, data, spare);
++}
++
++static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND,
++ __u8 * data,
++ yaffs_Spare * spare,
++ yaffs_ECCResult * eccResult,
++ int doErrorCorrection)
++{
++ int retVal;
++ yaffs_Spare localSpare;
++
++ dev->nPageReads++;
++
++ if (!spare && data) {
++ /* If we don't have a real spare, then we use a local one. */
++ /* Need this for the calculation of the ecc */
++ spare = &localSpare;
++ }
++
++ if (!dev->useNANDECC) {
++ retVal = dev->readChunkFromNAND(dev, chunkInNAND, data, spare);
++ if (data && doErrorCorrection) {
++ /* Do ECC correction */
++ /* Todo handle any errors */
++ int eccResult1, eccResult2;
++ __u8 calcEcc[3];
++
++ yaffs_ECCCalculate(data, calcEcc);
++ eccResult1 =
++ yaffs_ECCCorrect(data, spare->ecc1, calcEcc);
++ yaffs_ECCCalculate(&data[256], calcEcc);
++ eccResult2 =
++ yaffs_ECCCorrect(&data[256], spare->ecc2, calcEcc);
++
++ if (eccResult1 > 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>yaffs ecc error fix performed on chunk %d:0"
++ TENDSTR), chunkInNAND));
++ dev->eccFixed++;
++ } else if (eccResult1 < 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>yaffs ecc error unfixed on chunk %d:0"
++ TENDSTR), chunkInNAND));
++ dev->eccUnfixed++;
++ }
++
++ if (eccResult2 > 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>yaffs ecc error fix performed on chunk %d:1"
++ TENDSTR), chunkInNAND));
++ dev->eccFixed++;
++ } else if (eccResult2 < 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>yaffs ecc error unfixed on chunk %d:1"
++ TENDSTR), chunkInNAND));
++ dev->eccUnfixed++;
++ }
++
++ if (eccResult1 || eccResult2) {
++ /* We had a data problem on this page */
++ yaffs_HandleReadDataError(dev, chunkInNAND);
++ }
++
++ if (eccResult1 < 0 || eccResult2 < 0)
++ *eccResult = YAFFS_ECC_RESULT_UNFIXED;
++ else if (eccResult1 > 0 || eccResult2 > 0)
++ *eccResult = YAFFS_ECC_RESULT_FIXED;
++ else
++ *eccResult = YAFFS_ECC_RESULT_NO_ERROR;
++ }
++ } else {
++ /* Must allocate enough memory for spare+2*sizeof(int) */
++ /* for ecc results from device. */
++ struct yaffs_NANDSpare nspare;
++ retVal =
++ dev->readChunkFromNAND(dev, chunkInNAND, data,
++ (yaffs_Spare *) & nspare);
++ memcpy(spare, &nspare, sizeof(yaffs_Spare));
++ if (data && doErrorCorrection) {
++ if (nspare.eccres1 > 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>mtd ecc error fix performed on chunk %d:0"
++ TENDSTR), chunkInNAND));
++ } else if (nspare.eccres1 < 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>mtd ecc error unfixed on chunk %d:0"
++ TENDSTR), chunkInNAND));
++ }
++
++ if (nspare.eccres2 > 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>mtd ecc error fix performed on chunk %d:1"
++ TENDSTR), chunkInNAND));
++ } else if (nspare.eccres2 < 0) {
++ T(YAFFS_TRACE_ERROR,
++ (TSTR
++ ("**>>mtd ecc error unfixed on chunk %d:1"
++ TENDSTR), chunkInNAND));
++ }
++
++ if (nspare.eccres1 || nspare.eccres2) {
++ /* We had a data problem on this page */
++ yaffs_HandleReadDataError(dev, chunkInNAND);
++ }
++
++ if (nspare.eccres1 < 0 || nspare.eccres2 < 0)
++ *eccResult = YAFFS_ECC_RESULT_UNFIXED;
++ else if (nspare.eccres1 > 0 || nspare.eccres2 > 0)
++ *eccResult = YAFFS_ECC_RESULT_FIXED;
++ else
++ *eccResult = YAFFS_ECC_RESULT_NO_ERROR;
++
++ }
++ }
++ return retVal;
++}
++
++#ifdef NOTYET
++static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
++ int chunkInNAND)
++{
++
++ static int init = 0;
++ static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
++ static __u8 data[YAFFS_BYTES_PER_CHUNK];
++ /* Might as well always allocate the larger size for */
++ /* dev->useNANDECC == true; */
++ static __u8 spare[sizeof(struct yaffs_NANDSpare)];
++
++ dev->readChunkFromNAND(dev, chunkInNAND, data, (yaffs_Spare *) spare);
++
++ if (!init) {
++ memset(cmpbuf, 0xff, YAFFS_BYTES_PER_CHUNK);
++ init = 1;
++ }
++
++ if (memcmp(cmpbuf, data, YAFFS_BYTES_PER_CHUNK))
++ return YAFFS_FAIL;
++ if (memcmp(cmpbuf, spare, 16))
++ return YAFFS_FAIL;
++
++ return YAFFS_OK;
++
++}
++#endif
++
++/*
++ * Functions for robustisizing
++ */
++
++static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
++{
++ int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
++
++ /* Mark the block for retirement */
++ yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
++ T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
++ (TSTR("**>>Block %d marked for retirement" TENDSTR), blockInNAND));
++
++ /* TODO:
++ * Just do a garbage collection on the affected block
++ * then retire the block
++ * NB recursion
++ */
++}
++
++#ifdef NOTYET
++static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND)
++{
++}
++
++static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
++ const __u8 * data,
++ const yaffs_Spare * spare)
++{
++}
++
++static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
++ const yaffs_Spare * spare)
++{
++}
++
++static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND)
++{
++ int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
++
++ /* Mark the block for retirement */
++ yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
++ /* Delete the chunk */
++ yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
++}
++
++static int yaffs_VerifyCompare(const __u8 * d0, const __u8 * d1,
++ const yaffs_Spare * s0, const yaffs_Spare * s1)
++{
++
++ if (memcmp(d0, d1, YAFFS_BYTES_PER_CHUNK) != 0 ||
++ s0->tagByte0 != s1->tagByte0 ||
++ s0->tagByte1 != s1->tagByte1 ||
++ s0->tagByte2 != s1->tagByte2 ||
++ s0->tagByte3 != s1->tagByte3 ||
++ s0->tagByte4 != s1->tagByte4 ||
++ s0->tagByte5 != s1->tagByte5 ||
++ s0->tagByte6 != s1->tagByte6 ||
++ s0->tagByte7 != s1->tagByte7 ||
++ s0->ecc1[0] != s1->ecc1[0] ||
++ s0->ecc1[1] != s1->ecc1[1] ||
++ s0->ecc1[2] != s1->ecc1[2] ||
++ s0->ecc2[0] != s1->ecc2[0] ||
++ s0->ecc2[1] != s1->ecc2[1] || s0->ecc2[2] != s1->ecc2[2]) {
++ return 0;
++ }
++
++ return 1;
++}
++#endif /* NOTYET */
++
++int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags *
++ eTags)
++{
++ yaffs_Spare spare;
++ yaffs_Tags tags;
++
++ yaffs_SpareInitialise(&spare);
++
++ if (eTags->chunkDeleted) {
++ spare.pageStatus = 0;
++ } else {
++ tags.objectId = eTags->objectId;
++ tags.chunkId = eTags->chunkId;
++ tags.byteCount = eTags->byteCount;
++ tags.serialNumber = eTags->serialNumber;
++
++ if (!dev->useNANDECC && data) {
++ yaffs_CalcECC(data, &spare);
++ }
++ yaffs_LoadTagsIntoSpare(&spare, &tags);
++
++ }
++
++ return yaffs_WriteChunkToNAND(dev, chunkInNAND, data, &spare);
++}
++
++int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ __u8 * data,
++ yaffs_ExtendedTags * eTags)
++{
++
++ yaffs_Spare spare;
++ yaffs_Tags tags;
++ yaffs_ECCResult eccResult;
++
++ static yaffs_Spare spareFF;
++ static int init;
++
++ if (!init) {
++ memset(&spareFF, 0xFF, sizeof(spareFF));
++ init = 1;
++ }
++
++ if (yaffs_ReadChunkFromNAND
++ (dev, chunkInNAND, data, &spare, &eccResult, 1)) {
++ /* eTags may be NULL */
++ if (eTags) {
++
++ int deleted =
++ (yaffs_CountBits(spare.pageStatus) < 7) ? 1 : 0;
++
++ eTags->chunkDeleted = deleted;
++ eTags->eccResult = eccResult;
++ eTags->blockBad = 0; /* We're reading it */
++ /* therefore it is not a bad block */
++ eTags->chunkUsed =
++ (memcmp(&spareFF, &spare, sizeof(spareFF)) !=
++ 0) ? 1 : 0;
++
++ if (eTags->chunkUsed) {
++ yaffs_GetTagsFromSpare(dev, &spare, &tags);
++
++ eTags->objectId = tags.objectId;
++ eTags->chunkId = tags.chunkId;
++ eTags->byteCount = tags.byteCount;
++ eTags->serialNumber = tags.serialNumber;
++ }
++ }
++
++ return YAFFS_OK;
++ } else {
++ return YAFFS_FAIL;
++ }
++}
++
++int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
++ int blockInNAND)
++{
++
++ yaffs_Spare spare;
++
++ memset(&spare, 0xff, sizeof(yaffs_Spare));
++
++ spare.blockStatus = 'Y';
++
++ yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL,
++ &spare);
++ yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1,
++ NULL, &spare);
++
++ return YAFFS_OK;
++
++}
++
++int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
++ int blockNo, yaffs_BlockState *
++ state,
++ int *sequenceNumber)
++{
++
++ yaffs_Spare spare0, spare1;
++ static yaffs_Spare spareFF;
++ static int init;
++ yaffs_ECCResult dummy;
++
++ if (!init) {
++ memset(&spareFF, 0xFF, sizeof(spareFF));
++ init = 1;
++ }
++
++ *sequenceNumber = 0;
++
++ yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock, NULL,
++ &spare0, &dummy, 1);
++ yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock + 1, NULL,
++ &spare1, &dummy, 1);
++
++ if (yaffs_CountBits(spare0.blockStatus & spare1.blockStatus) < 7)
++ *state = YAFFS_BLOCK_STATE_DEAD;
++ else if (memcmp(&spareFF, &spare0, sizeof(spareFF)) == 0)
++ *state = YAFFS_BLOCK_STATE_EMPTY;
++ else
++ *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
++
++ return YAFFS_OK;
++}
+diff -urN linux.old/fs/yaffs2/yaffs_tagscompat.h linux.dev/fs/yaffs2/yaffs_tagscompat.h
+--- linux.old/fs/yaffs2/yaffs_tagscompat.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_tagscompat.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,40 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yaffs_ramdisk.h: yaffs ram disk component
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * $Id: yaffs_tagscompat.h,v 1.2 2005/08/11 02:33:03 marty Exp $
++ */
++
++/* This provides a ram disk under yaffs.
++ * NB this is not intended for NAND emulation.
++ * Use this with dev->useNANDECC enabled, then ECC overheads are not required.
++ */
++#ifndef __YAFFS_TAGSCOMPAT_H__
++#define __YAFFS_TAGSCOMPAT_H__
++
++#include "yaffs_guts.h"
++int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ const __u8 * data,
++ const yaffs_ExtendedTags *
++ tags);
++int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
++ int chunkInNAND,
++ __u8 * data,
++ yaffs_ExtendedTags *
++ tags);
++int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
++ int blockNo);
++int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
++ int blockNo, yaffs_BlockState *
++ state, int *sequenceNumber);
++
++#endif
+diff -urN linux.old/fs/yaffs2/yaffs_tagsvalidity.c linux.dev/fs/yaffs2/yaffs_tagsvalidity.c
+--- linux.old/fs/yaffs2/yaffs_tagsvalidity.c 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_tagsvalidity.c 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,31 @@
++
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * $Id: yaffs_tagsvalidity.c,v 1.2 2005/08/11 02:33:03 marty Exp $
++ */
++
++#include "yaffs_tagsvalidity.h"
++
++void yaffs_InitialiseTags(yaffs_ExtendedTags * tags)
++{
++ memset(tags, 0, sizeof(yaffs_ExtendedTags));
++ tags->validMarker0 = 0xAAAAAAAA;
++ tags->validMarker1 = 0x55555555;
++}
++
++int yaffs_ValidateTags(yaffs_ExtendedTags * tags)
++{
++ return (tags->validMarker0 == 0xAAAAAAAA &&
++ tags->validMarker1 == 0x55555555);
++
++}
+diff -urN linux.old/fs/yaffs2/yaffs_tagsvalidity.h linux.dev/fs/yaffs2/yaffs_tagsvalidity.h
+--- linux.old/fs/yaffs2/yaffs_tagsvalidity.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yaffs_tagsvalidity.h 2006-12-14 04:21:47.000000000 +0100
+@@ -0,0 +1,25 @@
++
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * $Id: yaffs_tagsvalidity.h,v 1.2 2005/08/11 02:33:03 marty Exp $
++ */
++//yaffs_tagsvalidity.h
++
++#ifndef __YAFFS_TAGS_VALIDITY_H__
++#define __YAFFS_TAGS_VALIDITY_H__
++
++#include "yaffs_guts.h"
++
++void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
++int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
++#endif
+diff -urN linux.old/fs/yaffs2/yportenv.h linux.dev/fs/yaffs2/yportenv.h
+--- linux.old/fs/yaffs2/yportenv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux.dev/fs/yaffs2/yportenv.h 2006-12-14 04:26:06.000000000 +0100
+@@ -0,0 +1,165 @@
++/*
++ * YAFFS: Yet another FFS. A NAND-flash specific file system.
++ * yportenv.h: Portable services used by yaffs. This is done to allow
++ * simple migration from kernel space into app space for testing.
++ *
++ * Copyright (C) 2002 Aleph One Ltd.
++ * for Toby Churchill Ltd and Brightstar Engineering
++ *
++ * Created by Charles Manning <charles@aleph1.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
++ *
++ * $Id: yportenv.h,v 1.11 2006/05/21 09:39:12 charles Exp $
++ *
++ */
++
++#ifndef __YPORTENV_H__
++#define __YPORTENV_H__
++
++#if defined CONFIG_YAFFS_WINCE
++
++#include "ywinceenv.h"
++
++#elif defined __KERNEL__
++
++#include "moduleconfig.h"
++
++/* Linux kernel */
++#include <linux/autoconf.h>
++#include <linux/kernel.h>
++#include <linux/version.h>
++#include <linux/mm.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <linux/vmalloc.h>
++
++#define YCHAR char
++#define YUCHAR unsigned char
++#define _Y(x) x
++#define yaffs_strcpy(a,b) strcpy(a,b)
++#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
++#define yaffs_strlen(s) strlen(s)
++#define yaffs_sprintf sprintf
++#define yaffs_toupper(a) toupper(a)
++
++#define Y_INLINE inline
++
++#define YAFFS_LOSTNFOUND_NAME "lost+found"
++#define YAFFS_LOSTNFOUND_PREFIX "obj"
++
++/* #define YPRINTF(x) printk x */
++#define YMALLOC(x) kmalloc(x,GFP_KERNEL)
++#define YFREE(x) kfree(x)
++#define YMALLOC_ALT(x) vmalloc(x)
++#define YFREE_ALT(x) vfree(x)
++#define YMALLOC_DMA(x) YMALLOC(x)
++
++// KR - added for use in scan so processes aren't blocked indefinitely.
++#define YYIELD() schedule()
++
++#define YAFFS_ROOT_MODE 0666
++#define YAFFS_LOSTNFOUND_MODE 0666
++
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
++#define Y_CURRENT_TIME CURRENT_TIME.tv_sec
++#define Y_TIME_CONVERT(x) (x).tv_sec
++#else
++#define Y_CURRENT_TIME CURRENT_TIME
++#define Y_TIME_CONVERT(x) (x)
++#endif
++
++#define yaffs_SumCompare(x,y) ((x) == (y))
++#define yaffs_strcmp(a,b) strcmp(a,b)
++
++#define TENDSTR "\n"
++#define TSTR(x) KERN_WARNING x
++#define TOUT(p) printk p
++
++#elif defined CONFIG_YAFFS_DIRECT
++
++/* Direct interface */
++#include "ydirectenv.h"
++
++#elif defined CONFIG_YAFFS_UTIL
++
++/* Stuff for YAFFS utilities */
++
++#include "stdlib.h"
++#include "stdio.h"
++#include "string.h"
++
++#include "devextras.h"
++
++#define YMALLOC(x) malloc(x)
++#define YFREE(x) free(x)
++#define YMALLOC_ALT(x) malloc(x)
++#define YFREE_ALT(x) free(x)
++
++#define YCHAR char
++#define YUCHAR unsigned char
++#define _Y(x) x
++#define yaffs_strcpy(a,b) strcpy(a,b)
++#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
++#define yaffs_strlen(s) strlen(s)
++#define yaffs_sprintf sprintf
++#define yaffs_toupper(a) toupper(a)
++
++#define Y_INLINE inline
++
++/* #define YINFO(s) YPRINTF(( __FILE__ " %d %s\n",__LINE__,s)) */
++/* #define YALERT(s) YINFO(s) */
++
++#define TENDSTR "\n"
++#define TSTR(x) x
++#define TOUT(p) printf p
++
++#define YAFFS_LOSTNFOUND_NAME "lost+found"
++#define YAFFS_LOSTNFOUND_PREFIX "obj"
++/* #define YPRINTF(x) printf x */
++
++#define YAFFS_ROOT_MODE 0666
++#define YAFFS_LOSTNFOUND_MODE 0666
++
++#define yaffs_SumCompare(x,y) ((x) == (y))
++#define yaffs_strcmp(a,b) strcmp(a,b)
++
++#else
++/* Should have specified a configuration type */
++#error Unknown configuration
++
++#endif
++
++extern unsigned yaffs_traceMask;
++
++#define YAFFS_TRACE_ERROR 0x00000001
++#define YAFFS_TRACE_OS 0x00000002
++#define YAFFS_TRACE_ALLOCATE 0x00000004
++#define YAFFS_TRACE_SCAN 0x00000008
++#define YAFFS_TRACE_BAD_BLOCKS 0x00000010
++#define YAFFS_TRACE_ERASE 0x00000020
++#define YAFFS_TRACE_GC 0x00000040
++#define YAFFS_TRACE_WRITE 0x00000080
++#define YAFFS_TRACE_TRACING 0x00000100
++#define YAFFS_TRACE_DELETION 0x00000200
++#define YAFFS_TRACE_BUFFERS 0x00000400
++#define YAFFS_TRACE_NANDACCESS 0x00000800
++#define YAFFS_TRACE_GC_DETAIL 0x00001000
++#define YAFFS_TRACE_SCAN_DEBUG 0x00002000
++#define YAFFS_TRACE_MTD 0x00004000
++#define YAFFS_TRACE_CHECKPOINT 0x00008000
++#define YAFFS_TRACE_ALWAYS 0x40000000
++#define YAFFS_TRACE_BUG 0x80000000
++
++#define T(mask,p) do{ if((mask) & (yaffs_traceMask | YAFFS_TRACE_ERROR)) TOUT(p);} while(0)
++
++#ifndef CONFIG_YAFFS_WINCE
++#define YBUG() T(YAFFS_TRACE_BUG,(TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),__LINE__))
++#endif
++
++#endif
diff --git a/packages/linux/linux-magicbox-2.6.19.2/600-x86_lzma.patch b/packages/linux/linux-magicbox-2.6.19.2/600-x86_lzma.patch
new file mode 100644
index 0000000000..1a948839b0
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/600-x86_lzma.patch
@@ -0,0 +1,1167 @@
+diff -Naur linux-old/arch/i386/boot/compressed/LzmaDecode.c linux-lzma/arch/i386/boot/compressed/LzmaDecode.c
+--- linux-old/arch/i386/boot/compressed/LzmaDecode.c 1969-12-31 19:00:00.000000000 -0500
++++ linux-lzma/arch/i386/boot/compressed/LzmaDecode.c 2005-06-05 00:07:38.000000000 -0400
+@@ -0,0 +1,586 @@
++/*
++ LzmaDecode.c
++ LZMA Decoder (optimized for Speed version)
++
++ LZMA SDK 4.17 Copyright (c) 1999-2005 Igor Pavlov (2005-04-05)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this Code, expressly permits you to
++ statically or dynamically link your Code (or bind by name) to the
++ interfaces of this file without subjecting your linked Code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#include "LzmaDecode.h"
++
++#ifndef Byte
++#define Byte unsigned char
++#endif
++
++#define kNumTopBits 24
++#define kTopValue ((UInt32)1 << kNumTopBits)
++
++#define kNumBitModelTotalBits 11
++#define kBitModelTotal (1 << kNumBitModelTotalBits)
++#define kNumMoveBits 5
++
++#define RC_READ_BYTE (*Buffer++)
++
++#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \
++ { int i; for(i = 0; i < 5; i++) { RC_TEST; Code = (Code << 8) | RC_READ_BYTE; }}
++
++#ifdef _LZMA_IN_CB
++
++#define RC_TEST { if (Buffer == BufferLim) \
++ { UInt32 size; int result = InCallback->Read(InCallback, &Buffer, &size); if (result != LZMA_RESULT_OK) return result; \
++ BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }}
++
++#define RC_INIT Buffer = BufferLim = 0; RC_INIT2
++
++#else
++
++#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; }
++
++#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2
++
++#endif
++
++#define RC_NORMALIZE if (Range < kTopValue) { RC_TEST; Range <<= 8; Code = (Code << 8) | RC_READ_BYTE; }
++
++#define IfBit0(p) RC_NORMALIZE; bound = (Range >> kNumBitModelTotalBits) * *(p); if (Code < bound)
++#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) >> kNumMoveBits;
++#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) >> kNumMoveBits;
++
++#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \
++ { UpdateBit0(p); mi <<= 1; A0; } else \
++ { UpdateBit1(p); mi = (mi + mi) + 1; A1; }
++
++#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)
++
++#define RangeDecoderBitTreeDecode(probs, numLevels, res) \
++ { int i = numLevels; res = 1; \
++ do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \
++ res -= (1 << numLevels); }
++
++
++#define kNumPosBitsMax 4
++#define kNumPosStatesMax (1 << kNumPosBitsMax)
++
++#define kLenNumLowBits 3
++#define kLenNumLowSymbols (1 << kLenNumLowBits)
++#define kLenNumMidBits 3
++#define kLenNumMidSymbols (1 << kLenNumMidBits)
++#define kLenNumHighBits 8
++#define kLenNumHighSymbols (1 << kLenNumHighBits)
++
++#define LenChoice 0
++#define LenChoice2 (LenChoice + 1)
++#define LenLow (LenChoice2 + 1)
++#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
++#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
++#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
++
++
++#define kNumStates 12
++#define kNumLitStates 7
++
++#define kStartPosModelIndex 4
++#define kEndPosModelIndex 14
++#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
++
++#define kNumPosSlotBits 6
++#define kNumLenToPosStates 4
++
++#define kNumAlignBits 4
++#define kAlignTableSize (1 << kNumAlignBits)
++
++#define kMatchMinLen 2
++
++#define IsMatch 0
++#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
++#define IsRepG0 (IsRep + kNumStates)
++#define IsRepG1 (IsRepG0 + kNumStates)
++#define IsRepG2 (IsRepG1 + kNumStates)
++#define IsRep0Long (IsRepG2 + kNumStates)
++#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
++#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
++#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
++#define LenCoder (Align + kAlignTableSize)
++#define RepLenCoder (LenCoder + kNumLenProbs)
++#define Literal (RepLenCoder + kNumLenProbs)
++
++#if Literal != LZMA_BASE_SIZE
++StopCompilingDueBUG
++#endif
++
++#ifdef _LZMA_OUT_READ
++
++typedef struct _LzmaVarState
++{
++ Byte *Buffer;
++ Byte *BufferLim;
++ UInt32 Range;
++ UInt32 Code;
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback;
++ #endif
++ Byte *Dictionary;
++ UInt32 DictionarySize;
++ UInt32 DictionaryPos;
++ UInt32 GlobalPos;
++ UInt32 Reps[4];
++ int lc;
++ int lp;
++ int pb;
++ int State;
++ int RemainLen;
++ Byte TempDictionary[4];
++} LzmaVarState;
++
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++ )
++{
++ Byte *Buffer;
++ Byte *BufferLim;
++ UInt32 Range;
++ UInt32 Code;
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ UInt32 i;
++ if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ vs->Dictionary = dictionary;
++ vs->DictionarySize = dictionarySize;
++ vs->DictionaryPos = 0;
++ vs->GlobalPos = 0;
++ vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1;
++ vs->lc = lc;
++ vs->lp = lp;
++ vs->pb = pb;
++ vs->State = 0;
++ vs->RemainLen = 0;
++ dictionary[dictionarySize - 1] = 0;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++
++ #ifdef _LZMA_IN_CB
++ RC_INIT;
++ #else
++ RC_INIT(inStream, inSize);
++ #endif
++ vs->Buffer = Buffer;
++ vs->BufferLim = BufferLim;
++ vs->Range = Range;
++ vs->Code = Code;
++ #ifdef _LZMA_IN_CB
++ vs->InCallback = InCallback;
++ #endif
++
++ return LZMA_RESULT_OK;
++}
++
++int LzmaDecode(unsigned char *buffer,
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ LzmaVarState *vs = (LzmaVarState *)buffer;
++ Byte *Buffer = vs->Buffer;
++ Byte *BufferLim = vs->BufferLim;
++ UInt32 Range = vs->Range;
++ UInt32 Code = vs->Code;
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback = vs->InCallback;
++ #endif
++ CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
++ int state = vs->State;
++ Byte previousByte;
++ UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << (vs->pb)) - 1;
++ UInt32 literalPosMask = (1 << (vs->lp)) - 1;
++ int lc = vs->lc;
++ int len = vs->RemainLen;
++ UInt32 globalPos = vs->GlobalPos;
++
++ Byte *dictionary = vs->Dictionary;
++ UInt32 dictionarySize = vs->DictionarySize;
++ UInt32 dictionaryPos = vs->DictionaryPos;
++
++ Byte tempDictionary[4];
++ if (dictionarySize == 0)
++ {
++ dictionary = tempDictionary;
++ dictionarySize = 1;
++ tempDictionary[0] = vs->TempDictionary[0];
++ }
++
++ if (len == -1)
++ {
++ *outSizeProcessed = 0;
++ return LZMA_RESULT_OK;
++ }
++
++ while(len != 0 && nowPos < outSize)
++ {
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ len--;
++ }
++ if (dictionaryPos == 0)
++ previousByte = dictionary[dictionarySize - 1];
++ else
++ previousByte = dictionary[dictionaryPos - 1];
++#else
++
++int LzmaDecode(
++ Byte *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *InCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed)
++{
++ UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
++ CProb *p = (CProb *)buffer;
++
++ UInt32 i;
++ int state = 0;
++ Byte previousByte = 0;
++ UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
++ UInt32 nowPos = 0;
++ UInt32 posStateMask = (1 << pb) - 1;
++ UInt32 literalPosMask = (1 << lp) - 1;
++ int len = 0;
++
++ Byte *Buffer;
++ Byte *BufferLim;
++ UInt32 Range;
++ UInt32 Code;
++
++ if (bufferSize < numProbs * sizeof(CProb))
++ return LZMA_RESULT_NOT_ENOUGH_MEM;
++ for (i = 0; i < numProbs; i++)
++ p[i] = kBitModelTotal >> 1;
++
++
++ #ifdef _LZMA_IN_CB
++ RC_INIT;
++ #else
++ RC_INIT(inStream, inSize);
++ #endif
++#endif
++
++ *outSizeProcessed = 0;
++ while(nowPos < outSize)
++ {
++ CProb *prob;
++ UInt32 bound;
++ int posState = (int)(
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & posStateMask);
++
++ prob = p + IsMatch + (state << kNumPosBitsMax) + posState;
++ IfBit0(prob)
++ {
++ int symbol = 1;
++ UpdateBit0(prob)
++ prob = p + Literal + (LZMA_LIT_SIZE *
++ (((
++ (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ )
++ & literalPosMask) << lc) + (previousByte >> (8 - lc))));
++
++ if (state >= kNumLitStates)
++ {
++ int matchByte;
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ matchByte = dictionary[pos];
++ #else
++ matchByte = outStream[nowPos - rep0];
++ #endif
++ do
++ {
++ int bit;
++ CProb *probLit;
++ matchByte <<= 1;
++ bit = (matchByte & 0x100);
++ probLit = prob + 0x100 + bit + symbol;
++ RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break)
++ }
++ while (symbol < 0x100);
++ }
++ while (symbol < 0x100)
++ {
++ CProb *probLit = prob + symbol;
++ RC_GET_BIT(probLit, symbol)
++ }
++ previousByte = (Byte)symbol;
++
++ outStream[nowPos++] = previousByte;
++ #ifdef _LZMA_OUT_READ
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #endif
++ if (state < 4) state = 0;
++ else if (state < 10) state -= 3;
++ else state -= 6;
++ }
++ else
++ {
++ UpdateBit1(prob);
++ prob = p + IsRep + state;
++ IfBit0(prob)
++ {
++ UpdateBit0(prob);
++ rep3 = rep2;
++ rep2 = rep1;
++ rep1 = rep0;
++ state = state < kNumLitStates ? 0 : 3;
++ prob = p + LenCoder;
++ }
++ else
++ {
++ UpdateBit1(prob);
++ prob = p + IsRepG0 + state;
++ IfBit0(prob)
++ {
++ UpdateBit0(prob);
++ prob = p + IsRep0Long + (state << kNumPosBitsMax) + posState;
++ IfBit0(prob)
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos;
++ #endif
++ UpdateBit0(prob);
++ if (nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos
++ #endif
++ == 0)
++ return LZMA_RESULT_DATA_ERROR;
++ state = state < kNumLitStates ? 9 : 11;
++ #ifdef _LZMA_OUT_READ
++ pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ outStream[nowPos++] = previousByte;
++ continue;
++ }
++ else
++ {
++ UpdateBit1(prob);
++ }
++ }
++ else
++ {
++ UInt32 distance;
++ UpdateBit1(prob);
++ prob = p + IsRepG1 + state;
++ IfBit0(prob)
++ {
++ UpdateBit0(prob);
++ distance = rep1;
++ }
++ else
++ {
++ UpdateBit1(prob);
++ prob = p + IsRepG2 + state;
++ IfBit0(prob)
++ {
++ UpdateBit0(prob);
++ distance = rep2;
++ }
++ else
++ {
++ UpdateBit1(prob);
++ distance = rep3;
++ rep3 = rep2;
++ }
++ rep2 = rep1;
++ }
++ rep1 = rep0;
++ rep0 = distance;
++ }
++ state = state < kNumLitStates ? 8 : 11;
++ prob = p + RepLenCoder;
++ }
++ {
++ int numBits, offset;
++ CProb *probLen = prob + LenChoice;
++ IfBit0(probLen)
++ {
++ UpdateBit0(probLen);
++ probLen = prob + LenLow + (posState << kLenNumLowBits);
++ offset = 0;
++ numBits = kLenNumLowBits;
++ }
++ else
++ {
++ UpdateBit1(probLen);
++ probLen = prob + LenChoice2;
++ IfBit0(probLen)
++ {
++ UpdateBit0(probLen);
++ probLen = prob + LenMid + (posState << kLenNumMidBits);
++ offset = kLenNumLowSymbols;
++ numBits = kLenNumMidBits;
++ }
++ else
++ {
++ UpdateBit1(probLen);
++ probLen = prob + LenHigh;
++ offset = kLenNumLowSymbols + kLenNumMidSymbols;
++ numBits = kLenNumHighBits;
++ }
++ }
++ RangeDecoderBitTreeDecode(probLen, numBits, len);
++ len += offset;
++ }
++
++ if (state < 4)
++ {
++ int posSlot;
++ state += kNumLitStates;
++ prob = p + PosSlot +
++ ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
++ kNumPosSlotBits);
++ RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot);
++ if (posSlot >= kStartPosModelIndex)
++ {
++ int numDirectBits = ((posSlot >> 1) - 1);
++ rep0 = (2 | ((UInt32)posSlot & 1));
++ if (posSlot < kEndPosModelIndex)
++ {
++ rep0 <<= numDirectBits;
++ prob = p + SpecPos + rep0 - posSlot - 1;
++ }
++ else
++ {
++ numDirectBits -= kNumAlignBits;
++ do
++ {
++ RC_NORMALIZE
++ Range >>= 1;
++ rep0 <<= 1;
++ if (Code >= Range)
++ {
++ Code -= Range;
++ rep0 |= 1;
++ }
++ }
++ while (--numDirectBits != 0);
++ prob = p + Align;
++ rep0 <<= kNumAlignBits;
++ numDirectBits = kNumAlignBits;
++ }
++ {
++ int i = 1;
++ int mi = 1;
++ do
++ {
++ CProb *prob3 = prob + mi;
++ RC_GET_BIT2(prob3, mi, ; , rep0 |= i);
++ i <<= 1;
++ }
++ while(--numDirectBits != 0);
++ }
++ }
++ else
++ rep0 = posSlot;
++ if (++rep0 == (UInt32)(0))
++ {
++ /* it's for stream version */
++ len = -1;
++ break;
++ }
++ }
++
++ len += kMatchMinLen;
++ if (rep0 > nowPos
++ #ifdef _LZMA_OUT_READ
++ + globalPos || rep0 > dictionarySize
++ #endif
++ )
++ return LZMA_RESULT_DATA_ERROR;
++ do
++ {
++ #ifdef _LZMA_OUT_READ
++ UInt32 pos = dictionaryPos - rep0;
++ if (pos >= dictionarySize)
++ pos += dictionarySize;
++ previousByte = dictionary[pos];
++ dictionary[dictionaryPos] = previousByte;
++ if (++dictionaryPos == dictionarySize)
++ dictionaryPos = 0;
++ #else
++ previousByte = outStream[nowPos - rep0];
++ #endif
++ len--;
++ outStream[nowPos++] = previousByte;
++ }
++ while(len != 0 && nowPos < outSize);
++ }
++ }
++ RC_NORMALIZE;
++
++ #ifdef _LZMA_OUT_READ
++ vs->Buffer = Buffer;
++ vs->BufferLim = BufferLim;
++ vs->Range = Range;
++ vs->Code = Code;
++ vs->DictionaryPos = dictionaryPos;
++ vs->GlobalPos = globalPos + nowPos;
++ vs->Reps[0] = rep0;
++ vs->Reps[1] = rep1;
++ vs->Reps[2] = rep2;
++ vs->Reps[3] = rep3;
++ vs->State = state;
++ vs->RemainLen = len;
++ vs->TempDictionary[0] = tempDictionary[0];
++ #endif
++
++ *outSizeProcessed = nowPos;
++ return LZMA_RESULT_OK;
++}
+diff -Naur linux-old/arch/i386/boot/compressed/LzmaDecode.h linux-lzma/arch/i386/boot/compressed/LzmaDecode.h
+--- linux-old/arch/i386/boot/compressed/LzmaDecode.h 1969-12-31 19:00:00.000000000 -0500
++++ linux-lzma/arch/i386/boot/compressed/LzmaDecode.h 2005-06-05 00:07:39.000000000 -0400
+@@ -0,0 +1,100 @@
++/*
++ LzmaDecode.h
++ LZMA Decoder interface
++
++ LZMA SDK 4.16 Copyright (c) 1999-2005 Igor Pavlov (2005-03-18)
++ http://www.7-zip.org/
++
++ LZMA SDK is licensed under two licenses:
++ 1) GNU Lesser General Public License (GNU LGPL)
++ 2) Common Public License (CPL)
++ It means that you can select one of these two licenses and
++ follow rules of that license.
++
++ SPECIAL EXCEPTION:
++ Igor Pavlov, as the author of this code, expressly permits you to
++ statically or dynamically link your code (or bind by name) to the
++ interfaces of this file without subjecting your linked code to the
++ terms of the CPL or GNU LGPL. Any modifications or additions
++ to this file, however, are subject to the LGPL or CPL terms.
++*/
++
++#ifndef __LZMADECODE_H
++#define __LZMADECODE_H
++
++/* #define _LZMA_IN_CB */
++/* Use callback for input data */
++
++/* #define _LZMA_OUT_READ */
++/* Use read function for output data */
++
++/* #define _LZMA_PROB32 */
++/* It can increase speed on some 32-bit CPUs,
++ but memory usage will be doubled in that case */
++
++/* #define _LZMA_LOC_OPT */
++/* Enable local speed optimizations inside code */
++
++#ifndef UInt32
++#ifdef _LZMA_UINT32_IS_ULONG
++#define UInt32 unsigned long
++#else
++#define UInt32 unsigned int
++#endif
++#endif
++
++#ifdef _LZMA_PROB32
++#define CProb UInt32
++#else
++#define CProb unsigned short
++#endif
++
++#define LZMA_RESULT_OK 0
++#define LZMA_RESULT_DATA_ERROR 1
++#define LZMA_RESULT_NOT_ENOUGH_MEM 2
++
++#ifdef _LZMA_IN_CB
++typedef struct _ILzmaInCallback
++{
++ int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize);
++} ILzmaInCallback;
++#endif
++
++#define LZMA_BASE_SIZE 1846
++#define LZMA_LIT_SIZE 768
++
++/*
++bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb)
++bufferSize += 100 in case of _LZMA_OUT_READ
++by default CProb is unsigned short,
++but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int)
++*/
++
++#ifdef _LZMA_OUT_READ
++int LzmaDecoderInit(
++ unsigned char *buffer, UInt32 bufferSize,
++ int lc, int lp, int pb,
++ unsigned char *dictionary, UInt32 dictionarySize,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback
++ #else
++ unsigned char *inStream, UInt32 inSize
++ #endif
++);
++#endif
++
++int LzmaDecode(
++ unsigned char *buffer,
++ #ifndef _LZMA_OUT_READ
++ UInt32 bufferSize,
++ int lc, int lp, int pb,
++ #ifdef _LZMA_IN_CB
++ ILzmaInCallback *inCallback,
++ #else
++ unsigned char *inStream, UInt32 inSize,
++ #endif
++ #endif
++ unsigned char *outStream, UInt32 outSize,
++ UInt32 *outSizeProcessed);
++
++#endif
+diff -Naur linux-old/arch/i386/boot/compressed/Makefile linux-lzma/arch/i386/boot/compressed/Makefile
+--- linux-old/arch/i386/boot/compressed/Makefile 2005-06-04 21:53:40.000000000 -0400
++++ linux-lzma/arch/i386/boot/compressed/Makefile 2005-06-05 00:25:23.000000000 -0400
+@@ -2,24 +2,33 @@
+ # linux/arch/i386/boot/compressed/Makefile
+ #
+ # create a compressed vmlinux image from the original vmlinux
++# patched by Ming-Ching Tiew <mctiew@yahoo.com> for kernel 2.6
++# requires program 'lzma' from LZMA SDK ( http://www.7-zip.org/ ) to work
++# $ mkdir lzma
++# $ cd lzma
++# $ tar tvjf ../lzma417.tar.bz2
++# $ cd SRC/7zip/Compress/LZMA_Alone
++# $ dos2unix makefile
++# $ make
++# $ su
++# # cp lzma /usr/bin
+ #
+-
+-targets := vmlinux vmlinux.bin vmlinux.bin.gz head.o misc.o piggy.o
++targets := vmlinux vmlinux.bin vmlinux.bin.lzma head.o lzma_misc.o piggy.o
+ EXTRA_AFLAGS := -traditional
+
+ LDFLAGS_vmlinux := -Ttext $(IMAGE_OFFSET) -e startup_32
+
+-$(obj)/vmlinux: $(obj)/head.o $(obj)/misc.o $(obj)/piggy.o FORCE
++$(obj)/vmlinux: $(obj)/head.o $(obj)/lzma_misc.o $(obj)/piggy.o FORCE
+ $(call if_changed,ld)
+ @:
+
+ $(obj)/vmlinux.bin: vmlinux FORCE
+ $(call if_changed,objcopy)
+
+-$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
+- $(call if_changed,gzip)
++$(obj)/vmlinux.bin.lzma: $(obj)/vmlinux.bin FORCE
++ $(call if_changed,lzma)
+
+ LDFLAGS_piggy.o := -r --format binary --oformat elf32-i386 -T
+
+-$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
++$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.lzma FORCE
+ $(call if_changed,ld)
+diff -Naur linux-old/arch/i386/boot/compressed/lzma_misc.c linux-lzma/arch/i386/boot/compressed/lzma_misc.c
+--- linux-old/arch/i386/boot/compressed/lzma_misc.c 1969-12-31 19:00:00.000000000 -0500
++++ linux-lzma/arch/i386/boot/compressed/lzma_misc.c 2005-06-04 21:33:48.000000000 -0400
+@@ -0,0 +1,412 @@
++/*
++ * lzma_misc.c
++ *
++ * Decompress LZMA compressed vmlinuz
++ * Version 0.9 Copyright (c) Ming-Ching Tiew mctiew@yahoo.com
++ * Program adapted from misc.c for 2.6 kernel
++ * Date: 3 June 2005
++ * Source released under GPL
++ */
++
++#include <linux/linkage.h>
++#include <linux/vmalloc.h>
++#include <linux/tty.h>
++#include <linux/screen_info.h>
++#include <asm/io.h>
++
++#define OF(args) args
++#define STATIC static
++
++#undef memset
++#undef memcpy
++
++/*
++ * Why do we do this? Don't ask me..
++ *
++ * Incomprehensible are the ways of bootloaders.
++ */
++static void* memcpy(void *, __const void *, size_t);
++
++typedef unsigned char uch;
++typedef unsigned short ush;
++typedef unsigned long ulg;
++
++#define WSIZE 0x8000 /* Window size must be at least 32k, */
++ /* and a power of two */
++
++static uch *inbuf; /* input buffer */
++
++static unsigned insize = 0; /* valid bytes in inbuf */
++static unsigned inptr = 0; /* index of next byte to be processed in inbuf */
++
++#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
++
++/* Diagnostic functions */
++#ifdef DEBUG
++# define Assert(cond,msg) {if(!(cond)) error(msg);}
++# define Trace(x) fprintf x
++# define Tracev(x) {if (verbose) fprintf x ;}
++# define Tracevv(x) {if (verbose>1) fprintf x ;}
++# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
++# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
++#else
++# define Assert(cond,msg)
++# define Trace(x)
++# define Tracev(x)
++# define Tracevv(x)
++# define Tracec(c,x)
++# define Tracecv(c,x)
++#endif
++
++static int fill_inbuf(void);
++static void error(char *m);
++
++/*
++ * This is set up by the setup-routine at boot-time
++ */
++static unsigned char *real_mode; /* Pointer to real-mode data */
++
++#define RM_EXT_MEM_K (*(unsigned short *)(real_mode + 0x2))
++#ifndef STANDARD_MEMORY_BIOS_CALL
++#define RM_ALT_MEM_K (*(unsigned long *)(real_mode + 0x1e0))
++#endif
++#define RM_SCREEN_INFO (*(struct screen_info *)(real_mode+0))
++
++extern char input_data[];
++extern int input_len;
++
++static long bytes_out = 0;
++static uch *output_data;
++
++static void putstr(const char *);
++
++extern int end;
++static long free_mem_ptr = (long)&end;
++static long free_mem_end_ptr;
++
++#define INPLACE_MOVE_ROUTINE 0x1000
++#define LOW_BUFFER_START 0x2000
++#define LOW_BUFFER_MAX 0x90000
++#define HEAP_SIZE 0x3000
++static unsigned int low_buffer_end, low_buffer_size;
++static int high_loaded =0;
++static uch *high_buffer_start /* = (uch *)(((ulg)&end) + HEAP_SIZE)*/;
++
++static char *vidmem = (char *)0xb8000;
++static int vidport;
++static int lines, cols;
++
++static void scroll(void)
++{
++ int i;
++
++ memcpy ( vidmem, vidmem + cols * 2, ( lines - 1 ) * cols * 2 );
++ for ( i = ( lines - 1 ) * cols * 2; i < lines * cols * 2; i += 2 )
++ vidmem[i] = ' ';
++}
++
++static void putstr(const char *s)
++{
++ int x,y,pos;
++ char c;
++
++ x = RM_SCREEN_INFO.orig_x;
++ y = RM_SCREEN_INFO.orig_y;
++
++ while ( ( c = *s++ ) != '\0' ) {
++ if ( c == '\n' ) {
++ x = 0;
++ if ( ++y >= lines ) {
++ scroll();
++ y--;
++ }
++ } else {
++ vidmem [ ( x + cols * y ) * 2 ] = c;
++ if ( ++x >= cols ) {
++ x = 0;
++ if ( ++y >= lines ) {
++ scroll();
++ y--;
++ }
++ }
++ }
++ }
++
++ RM_SCREEN_INFO.orig_x = x;
++ RM_SCREEN_INFO.orig_y = y;
++
++ pos = (x + cols * y) * 2; /* Update cursor position */
++ outb_p(14, vidport);
++ outb_p(0xff & (pos >> 9), vidport+1);
++ outb_p(15, vidport);
++ outb_p(0xff & (pos >> 1), vidport+1);
++}
++
++static void* memcpy(void* __dest, __const void* __src,
++ size_t __n)
++{
++ int i;
++ char *d = (char *)__dest, *s = (char *)__src;
++
++ for (i=0;i<__n;i++) d[i] = s[i];
++ return __dest;
++}
++
++/* ===========================================================================
++ * Fill the input buffer. This is called only when the buffer is empty
++ * and at least one byte is really needed.
++ */
++static int fill_inbuf(void)
++{
++ if (insize != 0) {
++ error("ran out of input data");
++ }
++
++ inbuf = input_data;
++ insize = input_len;
++ inptr = 1;
++ return inbuf[0];
++}
++
++static void error(char *x)
++{
++ putstr("\n\n");
++ putstr(x);
++ putstr("\n\n -- System halted");
++
++ while(1); /* Halt */
++}
++
++#define STACK_SIZE (4096)
++
++long user_stack [STACK_SIZE];
++
++struct {
++ long * a;
++ short b;
++ } stack_start = { & user_stack [STACK_SIZE] , __BOOT_DS };
++
++static void setup_normal_output_buffer(void)
++{
++#ifdef STANDARD_MEMORY_BIOS_CALL
++ if (RM_EXT_MEM_K < 1024) error("Less than 2MB of memory");
++#else
++ if ((RM_ALT_MEM_K > RM_EXT_MEM_K ? RM_ALT_MEM_K : RM_EXT_MEM_K) < 1024) error("Less than 2MB of memory");
++#endif
++ output_data = (char *)0x100000; /* Points to 1M */
++ free_mem_end_ptr = (long)real_mode;
++}
++
++struct moveparams {
++ uch *low_buffer_start; int lcount;
++ uch *high_buffer_start; int hcount;
++};
++
++static void setup_output_buffer_if_we_run_high(struct moveparams *mv)
++{
++ high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE);
++#ifdef STANDARD_MEMORY_BIOS_CALL
++ if (RM_EXT_MEM_K < (3*1024)) error("Less than 4MB of memory");
++#else
++ if ((RM_ALT_MEM_K > RM_EXT_MEM_K ? RM_ALT_MEM_K : RM_EXT_MEM_K) <
++ (3*1024))
++ error("Less than 4MB of memory");
++#endif
++ mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START;
++ low_buffer_end = ((unsigned int)real_mode > LOW_BUFFER_MAX
++ ? LOW_BUFFER_MAX : (unsigned int)real_mode) & ~0xfff;
++ low_buffer_size = low_buffer_end - LOW_BUFFER_START;
++ high_loaded = 1;
++ free_mem_end_ptr = (long)high_buffer_start;
++ if ( (0x100000 + low_buffer_size) > ((ulg)high_buffer_start)) {
++ high_buffer_start = (uch *)(0x100000 + low_buffer_size);
++ mv->hcount = 0; /* say: we need not to move high_buffer */
++ }
++ else mv->hcount = -1;
++ mv->high_buffer_start = high_buffer_start;
++}
++
++static void close_output_buffer_if_we_run_high(struct moveparams *mv)
++{
++ if (bytes_out > low_buffer_size) {
++ mv->lcount = low_buffer_size;
++ if (mv->hcount)
++ mv->hcount = bytes_out - low_buffer_size;
++ } else {
++ mv->lcount = bytes_out;
++ mv->hcount = 0;
++ }
++}
++
++// When using LZMA in callback, the compressed length is not needed.
++// Otherwise you need a special version of lzma compression program
++// which will pad the compressed length in the header.
++#define _LZMA_IN_CB
++#include "LzmaDecode.h"
++#include "LzmaDecode.c"
++
++#ifdef _LZMA_IN_CB
++static int read_byte(void *object, unsigned char **buffer, UInt32 *bufferSize);
++#endif
++
++
++/*
++ * Do the lzma decompression
++ * When using LZMA in callback, the end of input stream is automatically determined
++ */
++static int lzma_unzip(void)
++{
++
++ unsigned int i; /* temp value */
++ unsigned int lc; /* literal context bits */
++ unsigned int lp; /* literal pos state bits */
++ unsigned int pb; /* pos state bits */
++ unsigned char* workspace;
++ unsigned int uncompressedSize = 0;
++ unsigned char* p;
++
++#ifdef _LZMA_IN_CB
++ ILzmaInCallback callback;
++ callback.Read = read_byte;
++#else
++ unsigned char* inputbuf;
++ unsigned int lzma_workspace_size;
++ unsigned int compressedSize = 0;
++#endif
++
++ /* lzma args */
++ i = get_byte();
++ lc = i % 9, i = i / 9;
++ lp = i % 5, pb = i / 5;
++
++ /* skip dictionary size */
++ for (i = 0; i < 4; i++)
++ get_byte();
++ // get uncompressedSize
++ p= (char*)&uncompressedSize;
++ for (i = 0; i < 4; i++)
++ *p++ = get_byte();
++
++ //get compressedSize
++#ifdef _LZMA_IN_CB
++ for (i = 0; i < 4; i++)
++ get_byte();
++#else
++ p= (char*)&compressedSize;
++ for (i = 0; i < 4; i++)
++ *p++ = get_byte();
++#endif
++
++#if 0
++ if ( (lc == 5 ) && (lp == 0 ) && ( pb == 0 ))
++ {
++ putstr("got prop!\n");
++ }
++
++#ifndef _LZMA_IN_CB
++ if( compressedSize == 496722 )
++ {
++ putstr( "got the right sizes\n");
++ }
++ else if ( compressedSize > 496722 )
++ {
++ putstr( "greater !\n");
++ }
++ else if ( compressedSize < 496722 )
++ putstr( "smaller!\n");
++
++#endif
++ if ( uncompressedSize == 1187168 )
++ {
++ putstr( "got the right uncompressed size \n");
++ }else if ( uncompressedSize > 1187168 )
++ {
++ putstr( "uncompressedSize greater!\n");
++ }else
++ putstr( "uncompressedSize smaller!|n");
++#endif
++
++ // point it beyond uncompresedSize
++ workspace = high_buffer_start + uncompressedSize;
++ //
++#ifndef _LZMA_IN_CB
++ lzma_workspace_size = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp))) * sizeof(CProb);
++ inputbuf = high_buffer_start + uncompressedSize + lzma_workspace_size;
++ // read the compressed data
++ for( i=0; i < compressedSize; i++)
++ {
++ if ( i % ( 1024 * 10 ) == 0 )
++ putstr(".");
++ *inputbuf++ = get_byte();
++ }
++#endif
++
++ /* decompress kernel */
++#ifdef _LZMA_IN_CB
++ if (LzmaDecode(workspace, ~0, lc, lp, pb,
++ &callback,
++#else
++ if (LzmaDecode(workspace, lzma_workspace_size, lc, lp, pb,
++ inputbuf - compressedSize, compressedSize,
++#endif
++ (unsigned char*)high_buffer_start, uncompressedSize, &i) == LZMA_RESULT_OK)
++ {
++ if ( i != uncompressedSize )
++ error( "kernel corrupted!\n");
++ //copy it back to low_buffer
++ if( uncompressedSize > low_buffer_size )
++ {
++ memcpy((char*)LOW_BUFFER_START, high_buffer_start, low_buffer_size);
++ memcpy(high_buffer_start, high_buffer_start+low_buffer_size,
++ uncompressedSize-low_buffer_size);
++ }
++ else
++ memcpy((char*)LOW_BUFFER_START, high_buffer_start, uncompressedSize );
++ bytes_out = i;
++ return 0;
++ }
++ return 1;
++}
++
++
++#ifdef _LZMA_IN_CB
++static int read_byte(void *object, unsigned char **buffer, UInt32 *bufferSize)
++{
++ static unsigned int i = 0;
++ static unsigned char val;
++ *bufferSize = 1;
++ val = get_byte();
++ *buffer = &val;
++ if ( i++ % ( 1024 * 50 ) == 0 )
++ putstr(".");
++ return LZMA_RESULT_OK;
++}
++#endif
++
++asmlinkage int decompress_kernel(struct moveparams *mv, void *rmode)
++{
++ real_mode = rmode;
++
++ if (RM_SCREEN_INFO.orig_video_mode == 7) {
++ vidmem = (char *) 0xb0000;
++ vidport = 0x3b4;
++ } else {
++ vidmem = (char *) 0xb8000;
++ vidport = 0x3d4;
++ }
++
++ lines = RM_SCREEN_INFO.orig_video_lines;
++ cols = RM_SCREEN_INFO.orig_video_cols;
++
++ if (free_mem_ptr < 0x100000) setup_normal_output_buffer();
++ else setup_output_buffer_if_we_run_high(mv);
++
++ putstr("LZMA vmlinuz: Ming-Ching Tiew <mctiew@yahoo.com> ...");
++ if( lzma_unzip() != 0 )
++ {
++ error("inflate error\n");
++ }
++ putstr("Ok, booting the kernel.\n");
++ if (high_loaded) close_output_buffer_if_we_run_high(mv);
++ return high_loaded;
++}
+diff -urN linux-2.6.19.2/scripts/Makefile.lib linux-2.6.19.2.new/scripts/Makefile.lib
+--- linux-2.6.19.2/scripts/Makefile.lib 2007-01-10 20:10:37.000000000 +0100
++++ linux-2.6.19.2.new/scripts/Makefile.lib 2007-04-15 23:51:54.000000000 +0200
+@@ -162,4 +162,9 @@
+ quiet_cmd_gzip = GZIP $@
+ cmd_gzip = gzip -f -9 < $< > $@
+
+-
++# LZMA
++#
++quiet_cmd_lzma = LZMA $@
++cmd_lzma = lzma e $< $@ -lc7 -lp0 -pb0
++# to use lzmacomp,
++# cmd_lzma = lzmacomp $< 700 > $@
diff --git a/packages/linux/linux-magicbox-2.6.19.2/700-airprime.patch b/packages/linux/linux-magicbox-2.6.19.2/700-airprime.patch
new file mode 100644
index 0000000000..5eafe1da27
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/700-airprime.patch
@@ -0,0 +1,12 @@
+diff -urN linux-2.6.19.2-old/drivers/usb/serial/airprime.c linux-2.6.19.2-dev/drivers/usb/serial/airprime.c
+--- linux-2.6.19.2-old/drivers/usb/serial/airprime.c 2007-05-01 14:11:28.000000000 -0700
++++ linux-2.6.19.2-dev/drivers/usb/serial/airprime.c 2007-05-01 14:12:03.000000000 -0700
+@@ -20,6 +20,8 @@
+ { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */
+ { USB_DEVICE(0x1410, 0x1110) }, /* Novatel Wireless Merlin CDMA */
+ { USB_DEVICE(0x1410, 0x1100) }, /* ExpressCard34 Qualcomm 3G CDMA */
++ { USB_DEVICE(0x1410, 0x1130) }, /* Novatel Wireless S720 CDMA/EV-DO */
++ { USB_DEVICE(0x1410, 0x2110) }, /* Novatel Wireless U720 CDMA/EV-DO */
+ { },
+ };
+ MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/packages/linux/linux-magicbox-2.6.19.2/900-headers_type_and_time.patch b/packages/linux/linux-magicbox-2.6.19.2/900-headers_type_and_time.patch
new file mode 100644
index 0000000000..2ed6f39e6b
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/900-headers_type_and_time.patch
@@ -0,0 +1,48 @@
+diff -urN linux-2.6.19.old/include/linux/time.h linux-2.6.19.dev/include/linux/time.h
+--- linux-2.6.19.old/include/linux/time.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/linux/time.h 2006-12-14 03:14:05.000000000 +0100
+@@ -1,6 +1,10 @@
+ #ifndef _LINUX_TIME_H
+ #define _LINUX_TIME_H
+
++#ifndef __KERNEL__
++#include <time.h>
++#else
++
+ #include <linux/types.h>
+
+ #ifdef __KERNEL__
+@@ -223,4 +227,6 @@
+ */
+ #define TIMER_ABSTIME 0x01
+
++#endif /* __KERNEL__ DEBIAN */
++
+ #endif
+diff -urN linux-2.6.19.old/include/linux/types.h linux-2.6.19.dev/include/linux/types.h
+--- linux-2.6.19.old/include/linux/types.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/linux/types.h 2006-12-14 03:14:05.000000000 +0100
+@@ -1,6 +1,14 @@
+ #ifndef _LINUX_TYPES_H
+ #define _LINUX_TYPES_H
+
++/* Debian: Use userland types instead. */
++#ifndef __KERNEL__
++# include <sys/types.h>
++/* For other kernel headers. */
++# include <linux/posix_types.h>
++# include <asm/types.h>
++#else
++
+ #ifdef __KERNEL__
+
+ #define BITS_TO_LONGS(bits) \
+@@ -156,6 +164,8 @@
+
+ #endif /* __KERNEL_STRICT_NAMES */
+
++#endif /* __KERNEL__ DEBIAN */
++
+ /*
+ * Below are truly Linux-specific types that should never collide with
+ * any application/library that wants linux/types.h.
diff --git a/packages/linux/linux-magicbox-2.6.19.2/901-asm_bitops_include.patch b/packages/linux/linux-magicbox-2.6.19.2/901-asm_bitops_include.patch
new file mode 100644
index 0000000000..ec18e9b102
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/901-asm_bitops_include.patch
@@ -0,0 +1,11 @@
+diff -urN linux-2.6.19.old/include/asm-mips/bitops.h linux-2.6.19.dev/include/asm-mips/bitops.h
+--- linux-2.6.19.old/include/asm-mips/bitops.h 2006-11-29 22:57:37.000000000 +0100
++++ linux-2.6.19.dev/include/asm-mips/bitops.h 2006-12-14 03:14:07.000000000 +0100
+@@ -11,6 +11,7 @@
+
+ #include <linux/compiler.h>
+ #include <linux/types.h>
++#include <asm/war.h>
+ #include <asm/bug.h>
+ #include <asm/byteorder.h> /* sigh ... */
+ #include <asm/cpu-features.h>
diff --git a/packages/linux/linux-magicbox-2.6.19.2/902-darwin_scripts_include.patch b/packages/linux/linux-magicbox-2.6.19.2/902-darwin_scripts_include.patch
new file mode 100644
index 0000000000..f5f187e9b7
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/902-darwin_scripts_include.patch
@@ -0,0 +1,145 @@
+diff -urN linux-2.6.19.1/scripts/mod/file2alias.c linux-2.6.19.1.new/scripts/mod/file2alias.c
+--- linux-2.6.19.1/scripts/mod/file2alias.c 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/mod/file2alias.c 2007-01-02 15:28:47.000000000 +0100
+@@ -37,7 +37,21 @@
+ * even potentially has different endianness and word sizes, since
+ * we handle those differences explicitly below */
+ #include "../../include/linux/mod_devicetable.h"
++#ifndef __APPLE__
+ #include "../../include/linux/input.h"
++#else
++#define EV_MAX 0x1f
++#define KEY_MUTE 113
++#define KEY_MIN_INTERESTING KEY_MUTE
++#define KEY_MAX 0x1ff
++#define REL_MAX 0x0f
++#define ABS_MAX 0x3f
++#define MSC_MAX 0x07
++#define LED_MAX 0x0f
++#define SND_MAX 0x07
++#define FF_MAX 0x7f
++#define SW_MAX 0x0f
++#endif
+
+ #define ADD(str, sep, cond, field) \
+ do { \
+diff -urN linux-2.6.19.1/scripts/mod/mk_elfconfig.c linux-2.6.19.1.new/scripts/mod/mk_elfconfig.c
+--- linux-2.6.19.1/scripts/mod/mk_elfconfig.c 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/mod/mk_elfconfig.c 2007-01-02 15:43:57.000000000 +0100
+@@ -1,7 +1,11 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#ifndef __APPLE__
+ #include <elf.h>
++#else
++#include "../../../../../tools/sstrip/include/elf.h"
++#endif
+
+ int
+ main(int argc, char **argv)
+diff -urN linux-2.6.19.1/scripts/mod/modpost.h linux-2.6.19.1.new/scripts/mod/modpost.h
+--- linux-2.6.19.1/scripts/mod/modpost.h 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/mod/modpost.h 2007-01-02 15:40:55.000000000 +0100
+@@ -7,7 +7,11 @@
+ #include <sys/mman.h>
+ #include <fcntl.h>
+ #include <unistd.h>
++#ifndef __APPLE__
+ #include <elf.h>
++#else
++#include "../../../../../tools/sstrip/include/elf.h"
++#endif
+
+ #include "elfconfig.h"
+
+diff -urN linux-2.6.19.1/scripts/mod/sumversion.c linux-2.6.19.1.new/scripts/mod/sumversion.c
+--- linux-2.6.19.1/scripts/mod/sumversion.c 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/mod/sumversion.c 2007-01-02 15:30:23.000000000 +0100
+@@ -8,6 +8,9 @@
+ #include <errno.h>
+ #include <string.h>
+ #include "modpost.h"
++#ifdef __APPLE__
++#include <limits.h>
++#endif
+
+ /*
+ * Stolen form Cryptographic API.
+diff -urN linux-2.6.19.1/scripts/kconfig linux-2.6.19.1.new/scripts/kconfig/Makefile
+--- linux-2.6.19.1/scripts/kconfig/Makefile 2007-01-04 17:49:35.000000000 +0100
++++ linux-2.6.19.1.new/scripts/kconfig/Makefile 2007-01-04 17:50:37.000000000 +0100
+@@ -87,6 +87,9 @@
+ # we really need to do so. (Do not call gcc as part of make mrproper)
+ HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
+ HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
++ifeq ($(shell uname -s),Darwin)
++HOST_LOADLIBES += -lncurses
++endif
+
+ HOST_EXTRACFLAGS += -DLOCALE
+
+diff -urN linux-2.6.19.1/scripts/genksyms/parse.y linux-2.6.19.1.new/scripts/genksyms/parse.y
+--- linux-2.6.19.1/scripts/genksyms/parse.y 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/genksyms/parse.y 2007-01-04 19:20:55.000000000 +0100
+@@ -24,7 +24,9 @@
+ %{
+
+ #include <assert.h>
++#ifndef __APPLE__
+ #include <malloc.h>
++#endif
+ #include "genksyms.h"
+
+ static int is_typedef;
+diff -urN linux-2.6.19.1/scripts/genksyms/parse.c_shipped linux-2.6.19.1.new/scripts/genksyms/parse.c_shipped
+--- linux-2.6.19.1/scripts/genksyms/parse.c_shipped 2007-01-04 19:34:09.000000000 +0100
++++ linux-2.6.19.1.new/scripts/genksyms/parse.c_shipped 2007-01-04 19:34:02.000000000 +0100
+@@ -144,7 +144,9 @@
+
+
+ #include <assert.h>
++#ifndef __APPLE__
+ #include <malloc.h>
++#endif
+ #include "genksyms.h"
+
+ static int is_typedef;
+--- linux-2.6.19.1/scripts/kallsyms.c 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/scripts/kallsyms.c 2007-01-04 19:46:38.000000000 +0100
+@@ -30,6 +30,35 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <ctype.h>
++#ifdef __APPLE__
++/* Darwin has no memmem implementation, this one is ripped of the uClibc-0.9.28 source */
++void *memmem (const void *haystack, size_t haystack_len,
++ const void *needle, size_t needle_len)
++{
++ const char *begin;
++ const char *const last_possible
++ = (const char *) haystack + haystack_len - needle_len;
++
++ if (needle_len == 0)
++ /* The first occurrence of the empty string is deemed to occur at
++ the beginning of the string. */
++ return (void *) haystack;
++
++ /* Sanity check, otherwise the loop might search through the whole
++ memory. */
++ if (__builtin_expect (haystack_len < needle_len, 0))
++ return NULL;
++
++ for (begin = (const char *) haystack; begin <= last_possible; ++begin)
++ if (begin[0] == ((const char *) needle)[0] &&
++ !memcmp ((const void *) &begin[1],
++ (const void *) ((const char *) needle + 1),
++ needle_len - 1))
++ return (void *) begin;
++
++ return NULL;
++}
++#endif
+
+ #define KSYM_NAME_LEN 127
+
diff --git a/packages/linux/linux-magicbox-2.6.19.2/903-stddef_include.patch b/packages/linux/linux-magicbox-2.6.19.2/903-stddef_include.patch
new file mode 100644
index 0000000000..6ce8558c34
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/903-stddef_include.patch
@@ -0,0 +1,17 @@
+--- linux-2.6.19.2/include/linux/stddef.h.old 2007-02-14 03:34:54.861805424 +0100
++++ linux-2.6.19.2/include/linux/stddef.h 2007-02-14 03:35:06.331061832 +0100
+@@ -16,6 +16,7 @@
+ false = 0,
+ true = 1
+ };
++#endif /* __KERNEL__ */
+
+ #undef offsetof
+ #ifdef __compiler_offsetof
+@@ -23,6 +24,5 @@
+ #else
+ #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
+ #endif
+-#endif /* __KERNEL__ */
+
+ #endif
diff --git a/packages/linux/linux-magicbox-2.6.19.2/904-ls_time_locale.patch b/packages/linux/linux-magicbox-2.6.19.2/904-ls_time_locale.patch
new file mode 100644
index 0000000000..cc4a392b8f
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/904-ls_time_locale.patch
@@ -0,0 +1,24 @@
+diff -urN linux-2.6.19.2/scripts/gen_initramfs_list.sh linux-2.6.19.2.new/scripts/gen_initramfs_list.sh
+--- linux-2.6.19.2/scripts/gen_initramfs_list.sh 2007-01-10 20:10:37.000000000 +0100
++++ linux-2.6.19.2.new/scripts/gen_initramfs_list.sh 2007-05-03 16:25:06.000000000 +0200
+@@ -120,9 +120,9 @@
+ ;;
+ "nod")
+ local dev_type=
+- local maj=$(LC_ALL=C ls -l "${location}" | \
++ local maj=$(LC_ALL=C ls --time-style=locale -l "${location}" | \
+ gawk '{sub(/,/, "", $5); print $5}')
+- local min=$(LC_ALL=C ls -l "${location}" | \
++ local min=$(LC_ALL=C ls --time-style=locale -l "${location}" | \
+ gawk '{print $6}')
+
+ if [ -b "${location}" ]; then
+@@ -133,7 +133,7 @@
+ str="${ftype} ${name} ${str} ${dev_type} ${maj} ${min}"
+ ;;
+ "slink")
+- local target=$(LC_ALL=C ls -l "${location}" | \
++ local target=$(LC_ALL=C ls --time-style=locale -l "${location}" | \
+ gawk '{print $11}')
+ str="${ftype} ${name} ${target} ${str}"
+ ;;
diff --git a/packages/linux/linux-magicbox-2.6.19.2/config-magicbox2 b/packages/linux/linux-magicbox-2.6.19.2/config-magicbox2
new file mode 100644
index 0000000000..04815104f4
--- /dev/null
+++ b/packages/linux/linux-magicbox-2.6.19.2/config-magicbox2
@@ -0,0 +1,1619 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.19.2
+# Fri May 4 19:41:19 2007
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# Processor
+#
+# CONFIG_6xx is not set
+CONFIG_40x=y
+# CONFIG_44x is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_MATH_EMULATION=y
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+CONFIG_4xx=y
+CONFIG_WANT_EARLY_SERIAL=y
+
+#
+# IBM 4xx options
+#
+# CONFIG_BUBINGA is not set
+# CONFIG_CPCI405 is not set
+# CONFIG_EP405 is not set
+# CONFIG_REDWOOD_5 is not set
+# CONFIG_REDWOOD_6 is not set
+# CONFIG_SYCAMORE is not set
+# CONFIG_WALNUT is not set
+CONFIG_MAGICBOX=y
+# CONFIG_XILINX_ML300 is not set
+# CONFIG_XILINX_ML403 is not set
+CONFIG_IBM_OCP=y
+CONFIG_BIOS_FIXUP=y
+CONFIG_405EP=y
+CONFIG_PPC4xx_DMA=y
+CONFIG_PPC4xx_EDMA=y
+CONFIG_PPC_GEN550=y
+CONFIG_UART0_TTYS0=y
+# CONFIG_UART0_TTYS1 is not set
+CONFIG_NOT_COHERENT_CACHE=y
+
+#
+# Platform options
+#
+# CONFIG_PC_KEYBOARD is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=100
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0,115200 init=/etc/preinit"
+# CONFIG_PM is not set
+# CONFIG_SECCOMP is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA is not set
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+# CONFIG_YENTA_O2 is not set
+# CONFIG_YENTA_RICOH is not set
+# CONFIG_YENTA_TI is not set
+# CONFIG_YENTA_TOSHIBA is not set
+CONFIG_PCCARD_NONSTATIC=m
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_CONSISTENT_START=0xff100000
+CONFIG_CONSISTENT_SIZE=0x00200000
+CONFIG_BOOT_LOAD=0x00400000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
+CONFIG_IP_ROUTE_MULTIPATH_RR=m
+CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_DRR=m
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IPSEC_NAT_TRAVERSAL=y
+# CONFIG_IP_MROUTE is not set
+CONFIG_ARPD=y
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=m
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=y
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_VENO=m
+# CONFIG_DEFAULT_BIC is not set
+# CONFIG_DEFAULT_CUBIC is not set
+# CONFIG_DEFAULT_HTCP is not set
+CONFIG_DEFAULT_VEGAS=y
+# CONFIG_DEFAULT_WESTWOOD is not set
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="vegas"
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+CONFIG_IPV6_ROUTER_PREF=y
+# CONFIG_IPV6_ROUTE_INFO is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CHAOS=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DELUDE=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_PORTSCAN=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_H323=m
+CONFIG_IP_NF_SIP=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_LAYER7=m
+# CONFIG_IP_NF_MATCH_LAYER7_DEBUG is not set
+CONFIG_IP_NF_MATCH_IPP2P=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_TIME=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_TARGET_ROUTE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_NAT_H323=m
+CONFIG_IP_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_IMQ=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_SET=m
+CONFIG_IP_NF_SET_MAX=256
+CONFIG_IP_NF_SET_HASHSIZE=1024
+CONFIG_IP_NF_SET_IPMAP=m
+CONFIG_IP_NF_SET_MACIPMAP=m
+CONFIG_IP_NF_SET_PORTMAP=m
+CONFIG_IP_NF_SET_IPHASH=m
+CONFIG_IP_NF_SET_NETHASH=m
+CONFIG_IP_NF_SET_IPTREE=m
+CONFIG_IP_NF_MATCH_SET=m
+CONFIG_IP_NF_TARGET_SET=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_ROUTE=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_IMQ=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+CONFIG_IP_DCCP=m
+CONFIG_INET_DCCP_DIAG=m
+CONFIG_IP_DCCP_ACKVEC=y
+
+#
+# DCCP CCIDs Configuration (EXPERIMENTAL)
+#
+CONFIG_IP_DCCP_CCID2=m
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+CONFIG_IP_DCCP_CCID3=m
+CONFIG_IP_DCCP_TFRC_LIB=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+CONFIG_ATM_CLIP_NO_ICMP=y
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+CONFIG_ATM_BR2684_IPFILTER=y
+CONFIG_BRIDGE=y
+CONFIG_VLAN_8021Q=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+CONFIG_LLC2=m
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_ESFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+# CONFIG_NET_ACT_SIMP is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+CONFIG_HAMRADIO=y
+
+#
+# Packet Radio protocols
+#
+CONFIG_AX25=m
+# CONFIG_AX25_DAMA_SLAVE is not set
+# CONFIG_NETROM is not set
+# CONFIG_ROSE is not set
+
+#
+# AX.25 network device drivers
+#
+CONFIG_MKISS=m
+# CONFIG_6PACK is not set
+# CONFIG_BPQETHER is not set
+# CONFIG_BAYCOM_SER_FDX is not set
+# CONFIG_BAYCOM_SER_HDX is not set
+# CONFIG_YAM is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_FIB_RULES=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_SPLIT_ROOTFS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_MAGICMAP=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_BLK_DEV_IDEPCI is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_MAGICBOX_IDE=y
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_IFB=m
+# CONFIG_DUMMY is not set
+CONFIG_BONDING=m
+# CONFIG_EQUALIZER is not set
+CONFIG_IMQ=m
+# CONFIG_IMQ_BEHAVIOR_AA is not set
+# CONFIG_IMQ_BEHAVIOR_AB is not set
+CONFIG_IMQ_BEHAVIOR_BA=y
+# CONFIG_IMQ_BEHAVIOR_BB is not set
+CONFIG_IMQ_NUM_DEVS=2
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_IBM_EMAC=y
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_EMAC_PHY_RX_CLK_FIX is not set
+# CONFIG_IBM_EMAC_DEBUG is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+CONFIG_E100=m
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+# CONFIG_IPW2200_RADIOTAP is not set
+# CONFIG_IPW2200_PROMISCUOUS is not set
+# CONFIG_IPW2200_QOS is not set
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_ATMEL=m
+CONFIG_PCI_ATMEL=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# ATM drivers
+#
+CONFIG_ATM_DUMMY=m
+CONFIG_ATM_TCP=m
+# CONFIG_ATM_LANAI is not set
+# CONFIG_ATM_ENI is not set
+# CONFIG_ATM_FIRESTREAM is not set
+# CONFIG_ATM_ZATM is not set
+# CONFIG_ATM_NICSTAR is not set
+# CONFIG_ATM_IDT77252 is not set
+# CONFIG_ATM_AMBASSADOR is not set
+# CONFIG_ATM_HORIZON is not set
+# CONFIG_ATM_IA is not set
+# CONFIG_ATM_FORE200E_MAYBE is not set
+# CONFIG_ATM_HE is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=m
+
+#
+# Old ISDN4Linux
+#
+# CONFIG_ISDN_I4L is not set
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+# CONFIG_CAPI_AVM is not set
+
+#
+# Active Eicon DIVA Server cards
+#
+# CONFIG_CAPI_EICON is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_BOOKE_WDT is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+
+#
+# Video decoders
+#
+
+#
+# Video and audio decoders
+#
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_VIVI is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINI_FO=y
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_YAFFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# IBM 40x options
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+CONFIG_PPC_OCP=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+CONFIG_INITRAMFS_SOURCE=""
diff --git a/packages/linux/linux-magicbox_2.6.18.6.bb b/packages/linux/linux-magicbox_2.6.18.6.bb
new file mode 100644
index 0000000000..fde955ce9a
--- /dev/null
+++ b/packages/linux/linux-magicbox_2.6.18.6.bb
@@ -0,0 +1,79 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for Magicbox ver 1.1 and 2.0 router boards"
+LICENSE = "GPL"
+PR = "r2"
+DEPENDS = "u-boot"
+
+COMPATIBLE_MACHINE = "magicbox"
+
+KERNEL_CCSUFFIX = "-3.4.4"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://000-fix-makefile.patch;patch=1 \
+ file://001-magicbox-board-2.6.18.patch;patch=1 \
+ file://002-magicbox-mtd-map-2.6.18.patch;patch=1 \
+ file://010-load-ramdisk-even-if-rootdev-equals-ramdisk.patch;patch=1 \
+ file://magicbox2-ide-cf_2.6.18.patch;patch=1 \
+ file://squashfs3.1-patch;patch=1 \
+ file://squashfs-lzma-support.patch;patch=1 \
+ file://kernel-2.6.18-layer7-2.6.patch;patch=1 \
+ file://config-2.6.18-magicbox2\
+"
+
+
+S = "${WORKDIR}/linux-${PV}"
+
+inherit kernel
+
+
+FILES_kernel-image = "/boot/zImage.elf"
+
+export OS = "Linux"
+ARCH = "ppc"
+KERNEL_IMAGETYPE = "zImage"
+KERNEL_OUTPUT = "arch/ppc/boot/images/zImage.elf"
+
+
+
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/config-2.6.18-magicbox2 ${S}/.config
+}
+
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+
+
+do_install_append () {
+ install -d ${DEPLOY_DIR}/images
+ install -m 0755 arch/ppc/boot/images/zImage.elf ${DEPLOY_DIR}/images/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
+ install -m 0755 vmlinux ${DEPLOY_DIR}/images/
+ powerpc-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR}/images/vmlinux ${DEPLOY_DIR}/images/linux.bin
+ gzip -f -9 ${DEPLOY_DIR}/images/linux.bin
+ mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "ppc405"+${PV} -d ${DEPLOY_DIR}/images/linux.bin.gz ${DEPLOY_DIR}/images/uImage-${PV}-${MACHINE}-${DATETIME}.bin
+ rm ${DEPLOY_DIR}/images/vmlinux
+ rm ${DEPLOY_DIR}/images/linux.bin.gz
+
+
+}
+
+
+pkg_postinst_kernel () {
+ true
+}
+
+pkg_postrm_kernel () {
+ true
+}
+
+
diff --git a/packages/linux/linux-magicbox_2.6.19.2.bb b/packages/linux/linux-magicbox_2.6.19.2.bb
new file mode 100644
index 0000000000..438eaac478
--- /dev/null
+++ b/packages/linux/linux-magicbox_2.6.19.2.bb
@@ -0,0 +1,115 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for Magicbox ver 1.1 and 2.0 router boards"
+LICENSE = "GPL"
+PR = "r3"
+DEPENDS = "u-boot"
+
+COMPATIBLE_MACHINE = "magicbox"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://001-squashfs.patch;patch=1 \
+ file://002-lzma_decompress.patch;patch=1 \
+ file://003-squashfs_lzma.patch;patch=1 \
+ file://004-extra_optimization.patch;patch=1 \
+ file://006-gcc4_inline_fix.patch;patch=1 \
+ file://007-samsung_flash.patch;patch=1 \
+ file://009-revert_intel_flash_breakage.patch;patch=1 \
+ file://010-disable_old_squashfs_compatibility.patch;patch=1 \
+ file://011-mips_boot.patch;patch=1 \
+ file://012-mips_cpu_tlb.patch;patch=1 \
+ file://050-mtdpart_redboot_partition_truncate.patch;patch=1 \
+ file://060-rootfs_split.patch;patch=1 \
+ file://100-netfilter_layer7_2.8.patch;patch=1 \
+ file://101-netfilter_layer7_pktmatch.patch;patch=1 \
+ file://110-ipp2p_0.8.1rc1.patch;patch=1 \
+ file://120-openswan-2.4.0.kernel-2.6-natt.patch;patch=1 \
+ file://130-netfilter-ipset.patch;patch=1 \
+ file://140-netfilter_time.patch;patch=1 \
+ file://150-netfilter_imq.patch;patch=1 \
+ file://160-netfilter_route.patch;patch=1 \
+ file://170-netfilter_chaostables.patch;patch=1 \
+ file://200-sched_esfq.patch;patch=1 \
+ file://201-multiple_default_gateways.patch;patch=1 \
+ file://202-mips-freestanding.patch;patch=1 \
+ file://204-jffs2_eofdetect.patch;patch=1 \
+ file://207-powerpc_asm_segment_h.patch;patch=1 \
+ file://210-d80211_compat.patch;patch=1 \
+ file://211-no_block2mtd_readahead.patch;patch=1 \
+ file://212-block2mtd_erase_scan.patch;patch=1 \
+ file://510-Yaffs.patch;patch=1 \
+ file://600-x86_lzma.patch;patch=1 \
+ file://700-airprime.patch;patch=1 \
+ file://900-headers_type_and_time.patch;patch=1 \
+ file://901-asm_bitops_include.patch;patch=1 \
+ file://902-darwin_scripts_include.patch;patch=1 \
+ file://903-stddef_include.patch;patch=1 \
+ file://904-ls_time_locale.patch;patch=1 \
+ file://001-magicbox_support.patch;patch=1 \
+ file://002-flash_map.patch;patch=1 \
+ file://100-cf_slot.patch;patch=1 \
+
+ file://config-magicbox2\
+"
+
+
+S = "${WORKDIR}/linux-${PV}"
+
+inherit kernel
+
+
+FILES_kernel-image = "/boot/zImage.elf"
+
+export OS = "Linux"
+ARCH = "ppc"
+KERNEL_IMAGETYPE = "zImage"
+KERNEL_OUTPUT = "arch/ppc/boot/images/zImage.elf"
+
+
+
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/config-magicbox2 ${S}/.config
+}
+
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+
+
+do_install_append () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 arch/ppc/boot/images/zImage.elf ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
+ install -m 0755 vmlinux ${DEPLOY_DIR_IMAGE}/
+ powerpc${TARGET_VENDOR}-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR_IMAGE}/vmlinux \
+ ${DEPLOY_DIR_IMAGE}/linux.bin
+ gzip -f -9 ${DEPLOY_DIR_IMAGE}/linux.bin
+ cp -a ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/linux-${PV}-${MACHINE}-${DATETIME}.bin.gz
+ mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 -n "magicbox"-${PV} \
+ -d ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
+ rm ${DEPLOY_DIR_IMAGE}/vmlinux
+ rm ${DEPLOY_DIR_IMAGE}/linux.bin.gz
+
+
+}
+
+
+pkg_postinst_kernel () {
+ true
+}
+
+pkg_postrm_kernel () {
+ true
+}
+
+
diff --git a/packages/linux/linux-mtx-1-2.4.27/48-pptp.patch b/packages/linux/linux-mtx-1-2.4.27/48-pptp.patch
new file mode 100644
index 0000000000..5896f90370
--- /dev/null
+++ b/packages/linux/linux-mtx-1-2.4.27/48-pptp.patch
@@ -0,0 +1,5092 @@
+diff -uNr linux_org/Documentation/Configure.help linux/Documentation/Configure.help
+--- linux_org/Documentation/Configure.help 2006-10-27 14:08:20.000000000 +0200
++++ linux/Documentation/Configure.help 2006-10-27 14:11:52.000000000 +0200
+@@ -2848,6 +2848,31 @@
+ If you want to compile it as a module, say M here and read
+ <file:Documentation/modules.txt>. If unsure, say `Y'.
+
++PPTP conntrack and NAT support
++CONFIG_IP_NF_PPTP
++ This module adds support for PPTP (Point to Point Tunnelling Protocol,
++ RFC2637) conncection tracking and NAT.
++
++ If you are running PPTP sessions over a stateful firewall or NAT box,
++ you may want to enable this feature.
++
++ Please note that not all PPTP modes of operation are supported yet.
++ For more info, read top of the file net/ipv4/netfilter/ip_conntrack_pptp.c
++
++ If you want to compile it as a module, say M here and read
++ Documentation/modules.txt. If unsure, say `N'.
++
++GRE protocol conntrack and NAT support
++CONFIG_IP_NF_CT_PROTO_GRE
++ This module adds generic support for connection tracking and NAT of the
++ GRE protocol (RFC1701, RFC2784). Please note that this will only work
++ with GRE connections using the key field of the GRE header.
++
++ You will need GRE support to enable PPTP support.
++
++ If you want to compile it as a module, say `M' here and read
++ Documentation/modules.txt. If unsire, say `N'.
++
+ User space queueing via NETLINK
+ CONFIG_IP_NF_QUEUE
+ Netfilter has the ability to queue packets to user space: the
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_conntrack.h linux/include/linux/netfilter_ipv4/ip_conntrack.h
+--- linux_org/include/linux/netfilter_ipv4/ip_conntrack.h 2004-11-24 12:13:57.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_conntrack.h 2006-10-27 14:11:52.000000000 +0200
+@@ -50,19 +50,23 @@
+
+ #include <linux/netfilter_ipv4/ip_conntrack_tcp.h>
+ #include <linux/netfilter_ipv4/ip_conntrack_icmp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
+
+ /* per conntrack: protocol private data */
+ union ip_conntrack_proto {
+ /* insert conntrack proto private data here */
++ struct ip_ct_gre gre;
+ struct ip_ct_tcp tcp;
+ struct ip_ct_icmp icmp;
+ };
+
+ union ip_conntrack_expect_proto {
+ /* insert expect proto private data here */
++ struct ip_ct_gre_expect gre;
+ };
+
+ /* Add protocol helper include file here */
++#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
+ #include <linux/netfilter_ipv4/ip_conntrack_amanda.h>
+
+ #include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
+@@ -71,6 +75,7 @@
+ /* per expectation: application helper private data */
+ union ip_conntrack_expect_help {
+ /* insert conntrack helper private data (expect) here */
++ struct ip_ct_pptp_expect exp_pptp_info;
+ struct ip_ct_amanda_expect exp_amanda_info;
+ struct ip_ct_ftp_expect exp_ftp_info;
+ struct ip_ct_irc_expect exp_irc_info;
+@@ -85,16 +90,19 @@
+ /* per conntrack: application helper private data */
+ union ip_conntrack_help {
+ /* insert conntrack helper private data (master) here */
++ struct ip_ct_pptp_master ct_pptp_info;
+ struct ip_ct_ftp_master ct_ftp_info;
+ struct ip_ct_irc_master ct_irc_info;
+ };
+
+ #ifdef CONFIG_IP_NF_NAT_NEEDED
+ #include <linux/netfilter_ipv4/ip_nat.h>
++#include <linux/netfilter_ipv4/ip_nat_pptp.h>
+
+ /* per conntrack: nat application helper private data */
+ union ip_conntrack_nat_help {
+ /* insert nat helper private data here */
++ struct ip_nat_pptp nat_pptp_info;
+ };
+ #endif
+
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_conntrack_pptp.h linux/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
+--- linux_org/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_conntrack_pptp.h 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,313 @@
++/* PPTP constants and structs */
++#ifndef _CONNTRACK_PPTP_H
++#define _CONNTRACK_PPTP_H
++
++/* state of the control session */
++enum pptp_ctrlsess_state {
++ PPTP_SESSION_NONE, /* no session present */
++ PPTP_SESSION_ERROR, /* some session error */
++ PPTP_SESSION_STOPREQ, /* stop_sess request seen */
++ PPTP_SESSION_REQUESTED, /* start_sess request seen */
++ PPTP_SESSION_CONFIRMED, /* session established */
++};
++
++/* state of the call inside the control session */
++enum pptp_ctrlcall_state {
++ PPTP_CALL_NONE,
++ PPTP_CALL_ERROR,
++ PPTP_CALL_OUT_REQ,
++ PPTP_CALL_OUT_CONF,
++ PPTP_CALL_IN_REQ,
++ PPTP_CALL_IN_REP,
++ PPTP_CALL_IN_CONF,
++ PPTP_CALL_CLEAR_REQ,
++};
++
++
++/* conntrack private data */
++struct ip_ct_pptp_master {
++ enum pptp_ctrlsess_state sstate; /* session state */
++
++ /* everything below is going to be per-expectation in newnat,
++ * since there could be more than one call within one session */
++ enum pptp_ctrlcall_state cstate; /* call state */
++ u_int16_t pac_call_id; /* call id of PAC, host byte order */
++ u_int16_t pns_call_id; /* call id of PNS, host byte order */
++};
++
++/* conntrack_expect private member */
++struct ip_ct_pptp_expect {
++ enum pptp_ctrlcall_state cstate; /* call state */
++ u_int16_t pac_call_id; /* call id of PAC */
++ u_int16_t pns_call_id; /* call id of PNS */
++};
++
++
++#ifdef __KERNEL__
++
++#include <linux/netfilter_ipv4/lockhelp.h>
++DECLARE_LOCK_EXTERN(ip_pptp_lock);
++
++#define IP_CONNTR_PPTP PPTP_CONTROL_PORT
++
++union pptp_ctrl_union {
++ void *rawreq;
++ struct PptpStartSessionRequest *sreq;
++ struct PptpStartSessionReply *srep;
++ struct PptpStopSessionReqest *streq;
++ struct PptpStopSessionReply *strep;
++ struct PptpOutCallRequest *ocreq;
++ struct PptpOutCallReply *ocack;
++ struct PptpInCallRequest *icreq;
++ struct PptpInCallReply *icack;
++ struct PptpInCallConnected *iccon;
++ struct PptpClearCallRequest *clrreq;
++ struct PptpCallDisconnectNotify *disc;
++ struct PptpWanErrorNotify *wanerr;
++ struct PptpSetLinkInfo *setlink;
++};
++
++
++
++#define PPTP_CONTROL_PORT 1723
++
++#define PPTP_PACKET_CONTROL 1
++#define PPTP_PACKET_MGMT 2
++
++#define PPTP_MAGIC_COOKIE 0x1a2b3c4d
++
++struct pptp_pkt_hdr {
++ __u16 packetLength;
++ __u16 packetType;
++ __u32 magicCookie;
++};
++
++/* PptpControlMessageType values */
++#define PPTP_START_SESSION_REQUEST 1
++#define PPTP_START_SESSION_REPLY 2
++#define PPTP_STOP_SESSION_REQUEST 3
++#define PPTP_STOP_SESSION_REPLY 4
++#define PPTP_ECHO_REQUEST 5
++#define PPTP_ECHO_REPLY 6
++#define PPTP_OUT_CALL_REQUEST 7
++#define PPTP_OUT_CALL_REPLY 8
++#define PPTP_IN_CALL_REQUEST 9
++#define PPTP_IN_CALL_REPLY 10
++#define PPTP_IN_CALL_CONNECT 11
++#define PPTP_CALL_CLEAR_REQUEST 12
++#define PPTP_CALL_DISCONNECT_NOTIFY 13
++#define PPTP_WAN_ERROR_NOTIFY 14
++#define PPTP_SET_LINK_INFO 15
++
++#define PPTP_MSG_MAX 15
++
++/* PptpGeneralError values */
++#define PPTP_ERROR_CODE_NONE 0
++#define PPTP_NOT_CONNECTED 1
++#define PPTP_BAD_FORMAT 2
++#define PPTP_BAD_VALUE 3
++#define PPTP_NO_RESOURCE 4
++#define PPTP_BAD_CALLID 5
++#define PPTP_REMOVE_DEVICE_ERROR 6
++
++struct PptpControlHeader {
++ __u16 messageType;
++ __u16 reserved;
++};
++
++/* FramingCapability Bitmap Values */
++#define PPTP_FRAME_CAP_ASYNC 0x1
++#define PPTP_FRAME_CAP_SYNC 0x2
++
++/* BearerCapability Bitmap Values */
++#define PPTP_BEARER_CAP_ANALOG 0x1
++#define PPTP_BEARER_CAP_DIGITAL 0x2
++
++struct PptpStartSessionRequest {
++ __u16 protocolVersion;
++ __u8 reserved1;
++ __u8 reserved2;
++ __u32 framingCapability;
++ __u32 bearerCapability;
++ __u16 maxChannels;
++ __u16 firmwareRevision;
++ __u8 hostName[64];
++ __u8 vendorString[64];
++};
++
++/* PptpStartSessionResultCode Values */
++#define PPTP_START_OK 1
++#define PPTP_START_GENERAL_ERROR 2
++#define PPTP_START_ALREADY_CONNECTED 3
++#define PPTP_START_NOT_AUTHORIZED 4
++#define PPTP_START_UNKNOWN_PROTOCOL 5
++
++struct PptpStartSessionReply {
++ __u16 protocolVersion;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u32 framingCapability;
++ __u32 bearerCapability;
++ __u16 maxChannels;
++ __u16 firmwareRevision;
++ __u8 hostName[64];
++ __u8 vendorString[64];
++};
++
++/* PptpStopReasons */
++#define PPTP_STOP_NONE 1
++#define PPTP_STOP_PROTOCOL 2
++#define PPTP_STOP_LOCAL_SHUTDOWN 3
++
++struct PptpStopSessionRequest {
++ __u8 reason;
++};
++
++/* PptpStopSessionResultCode */
++#define PPTP_STOP_OK 1
++#define PPTP_STOP_GENERAL_ERROR 2
++
++struct PptpStopSessionReply {
++ __u8 resultCode;
++ __u8 generalErrorCode;
++};
++
++struct PptpEchoRequest {
++ __u32 identNumber;
++};
++
++/* PptpEchoReplyResultCode */
++#define PPTP_ECHO_OK 1
++#define PPTP_ECHO_GENERAL_ERROR 2
++
++struct PptpEchoReply {
++ __u32 identNumber;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 reserved;
++};
++
++/* PptpFramingType */
++#define PPTP_ASYNC_FRAMING 1
++#define PPTP_SYNC_FRAMING 2
++#define PPTP_DONT_CARE_FRAMING 3
++
++/* PptpCallBearerType */
++#define PPTP_ANALOG_TYPE 1
++#define PPTP_DIGITAL_TYPE 2
++#define PPTP_DONT_CARE_BEARER_TYPE 3
++
++struct PptpOutCallRequest {
++ __u16 callID;
++ __u16 callSerialNumber;
++ __u32 minBPS;
++ __u32 maxBPS;
++ __u32 bearerType;
++ __u32 framingType;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u16 reserved1;
++ __u16 phoneNumberLength;
++ __u16 reserved2;
++ __u8 phoneNumber[64];
++ __u8 subAddress[64];
++};
++
++/* PptpCallResultCode */
++#define PPTP_OUTCALL_CONNECT 1
++#define PPTP_OUTCALL_GENERAL_ERROR 2
++#define PPTP_OUTCALL_NO_CARRIER 3
++#define PPTP_OUTCALL_BUSY 4
++#define PPTP_OUTCALL_NO_DIAL_TONE 5
++#define PPTP_OUTCALL_TIMEOUT 6
++#define PPTP_OUTCALL_DONT_ACCEPT 7
++
++struct PptpOutCallReply {
++ __u16 callID;
++ __u16 peersCallID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 causeCode;
++ __u32 connectSpeed;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u32 physChannelID;
++};
++
++struct PptpInCallRequest {
++ __u16 callID;
++ __u16 callSerialNumber;
++ __u32 callBearerType;
++ __u32 physChannelID;
++ __u16 dialedNumberLength;
++ __u16 dialingNumberLength;
++ __u8 dialedNumber[64];
++ __u8 dialingNumber[64];
++ __u8 subAddress[64];
++};
++
++/* PptpInCallResultCode */
++#define PPTP_INCALL_ACCEPT 1
++#define PPTP_INCALL_GENERAL_ERROR 2
++#define PPTP_INCALL_DONT_ACCEPT 3
++
++struct PptpInCallReply {
++ __u16 callID;
++ __u16 peersCallID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u16 reserved;
++};
++
++struct PptpInCallConnected {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 connectSpeed;
++ __u16 packetWindow;
++ __u16 packetProcDelay;
++ __u32 callFramingType;
++};
++
++struct PptpClearCallRequest {
++ __u16 callID;
++ __u16 reserved;
++};
++
++struct PptpCallDisconnectNotify {
++ __u16 callID;
++ __u8 resultCode;
++ __u8 generalErrorCode;
++ __u16 causeCode;
++ __u16 reserved;
++ __u8 callStatistics[128];
++};
++
++struct PptpWanErrorNotify {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 crcErrors;
++ __u32 framingErrors;
++ __u32 hardwareOverRuns;
++ __u32 bufferOverRuns;
++ __u32 timeoutErrors;
++ __u32 alignmentErrors;
++};
++
++struct PptpSetLinkInfo {
++ __u16 peersCallID;
++ __u16 reserved;
++ __u32 sendAccm;
++ __u32 recvAccm;
++};
++
++
++struct pptp_priv_data {
++ __u16 call_id;
++ __u16 mcall_id;
++ __u16 pcall_id;
++};
++
++#endif /* __KERNEL__ */
++#endif /* _CONNTRACK_PPTP_H */
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h linux/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+--- linux_org/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 1970-01-01 01:00:00.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,123 @@
++#ifndef _CONNTRACK_PROTO_GRE_H
++#define _CONNTRACK_PROTO_GRE_H
++#include <asm/byteorder.h>
++
++/* GRE PROTOCOL HEADER */
++
++/* GRE Version field */
++#define GRE_VERSION_1701 0x0
++#define GRE_VERSION_PPTP 0x1
++
++/* GRE Protocol field */
++#define GRE_PROTOCOL_PPTP 0x880B
++
++/* GRE Flags */
++#define GRE_FLAG_C 0x80
++#define GRE_FLAG_R 0x40
++#define GRE_FLAG_K 0x20
++#define GRE_FLAG_S 0x10
++#define GRE_FLAG_A 0x80
++
++#define GRE_IS_C(f) ((f)&GRE_FLAG_C)
++#define GRE_IS_R(f) ((f)&GRE_FLAG_R)
++#define GRE_IS_K(f) ((f)&GRE_FLAG_K)
++#define GRE_IS_S(f) ((f)&GRE_FLAG_S)
++#define GRE_IS_A(f) ((f)&GRE_FLAG_A)
++
++/* GRE is a mess: Four different standards */
++struct gre_hdr {
++#if defined(__LITTLE_ENDIAN_BITFIELD)
++ __u16 rec:3,
++ srr:1,
++ seq:1,
++ key:1,
++ routing:1,
++ csum:1,
++ version:3,
++ reserved:4,
++ ack:1;
++#elif defined(__BIG_ENDIAN_BITFIELD)
++ __u16 csum:1,
++ routing:1,
++ key:1,
++ seq:1,
++ srr:1,
++ rec:3,
++ ack:1,
++ reserved:4,
++ version:3;
++#else
++#error "Adjust your <asm/byteorder.h> defines"
++#endif
++ __u16 protocol;
++};
++
++/* modified GRE header for PPTP */
++struct gre_hdr_pptp {
++ __u8 flags; /* bitfield */
++ __u8 version; /* should be GRE_VERSION_PPTP */
++ __u16 protocol; /* should be GRE_PROTOCOL_PPTP */
++ __u16 payload_len; /* size of ppp payload, not inc. gre header */
++ __u16 call_id; /* peer's call_id for this session */
++ __u32 seq; /* sequence number. Present if S==1 */
++ __u32 ack; /* seq number of highest packet recieved by */
++ /* sender in this session */
++};
++
++
++/* this is part of ip_conntrack */
++struct ip_ct_gre {
++ unsigned int stream_timeout;
++ unsigned int timeout;
++};
++
++/* this is part of ip_conntrack_expect */
++struct ip_ct_gre_expect {
++ struct ip_ct_gre_keymap *keymap_orig, *keymap_reply;
++};
++
++#ifdef __KERNEL__
++struct ip_conntrack_expect;
++
++/* structure for original <-> reply keymap */
++struct ip_ct_gre_keymap {
++ struct list_head list;
++
++ struct ip_conntrack_tuple tuple;
++};
++
++
++/* add new tuple->key_reply pair to keymap */
++int ip_ct_gre_keymap_add(struct ip_conntrack_expect *exp,
++ struct ip_conntrack_tuple *t,
++ int reply);
++
++/* change an existing keymap entry */
++void ip_ct_gre_keymap_change(struct ip_ct_gre_keymap *km,
++ struct ip_conntrack_tuple *t);
++
++/* delete keymap entries */
++void ip_ct_gre_keymap_destroy(struct ip_conntrack_expect *exp);
++
++
++/* get pointer to gre key, if present */
++static inline u_int32_t *gre_key(struct gre_hdr *greh)
++{
++ if (!greh->key)
++ return NULL;
++ if (greh->csum || greh->routing)
++ return (u_int32_t *) (greh+sizeof(*greh)+4);
++ return (u_int32_t *) (greh+sizeof(*greh));
++}
++
++/* get pointer ot gre csum, if present */
++static inline u_int16_t *gre_csum(struct gre_hdr *greh)
++{
++ if (!greh->csum)
++ return NULL;
++ return (u_int16_t *) (greh+sizeof(*greh));
++}
++
++#endif /* __KERNEL__ */
++
++#endif /* _CONNTRACK_PROTO_GRE_H */
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_conntrack_tuple.h linux/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
+--- linux_org/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2003-11-17 02:07:46.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2006-10-27 14:11:52.000000000 +0200
+@@ -14,7 +14,7 @@
+ union ip_conntrack_manip_proto
+ {
+ /* Add other protocols here. */
+- u_int16_t all;
++ u_int32_t all;
+
+ struct {
+ u_int16_t port;
+@@ -25,6 +25,9 @@
+ struct {
+ u_int16_t id;
+ } icmp;
++ struct {
++ u_int32_t key;
++ } gre;
+ };
+
+ /* The manipulable part of the tuple. */
+@@ -44,7 +47,7 @@
+ u_int32_t ip;
+ union {
+ /* Add other protocols here. */
+- u_int16_t all;
++ u_int64_t all;
+
+ struct {
+ u_int16_t port;
+@@ -55,6 +58,11 @@
+ struct {
+ u_int8_t type, code;
+ } icmp;
++ struct {
++ u_int16_t protocol;
++ u_int8_t version;
++ u_int32_t key;
++ } gre;
+ } u;
+
+ /* The protocol. */
+@@ -80,10 +88,16 @@
+ #ifdef __KERNEL__
+
+ #define DUMP_TUPLE(tp) \
+-DEBUGP("tuple %p: %u %u.%u.%u.%u:%hu -> %u.%u.%u.%u:%hu\n", \
++DEBUGP("tuple %p: %u %u.%u.%u.%u:%u -> %u.%u.%u.%u:%u\n", \
+ (tp), (tp)->dst.protonum, \
+- NIPQUAD((tp)->src.ip), ntohs((tp)->src.u.all), \
+- NIPQUAD((tp)->dst.ip), ntohs((tp)->dst.u.all))
++ NIPQUAD((tp)->src.ip), ntohl((tp)->src.u.all), \
++ NIPQUAD((tp)->dst.ip), ntohl((tp)->dst.u.all))
++
++#define DUMP_TUPLE_RAW(x) \
++ DEBUGP("tuple %p: %u %u.%u.%u.%u:0x%08x -> %u.%u.%u.%u:0x%08x\n",\
++ (x), (x)->dst.protonum, \
++ NIPQUAD((x)->src.ip), ntohl((x)->src.u.all), \
++ NIPQUAD((x)->dst.ip), ntohl((x)->dst.u.all))
+
+ #define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
+
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_conntrack_tuple.h.orig linux/include/linux/netfilter_ipv4/ip_conntrack_tuple.h.orig
+--- linux_org/include/linux/netfilter_ipv4/ip_conntrack_tuple.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_conntrack_tuple.h.orig 2003-11-17 02:07:46.000000000 +0100
+@@ -0,0 +1,139 @@
++#ifndef _IP_CONNTRACK_TUPLE_H
++#define _IP_CONNTRACK_TUPLE_H
++
++/* A `tuple' is a structure containing the information to uniquely
++ identify a connection. ie. if two packets have the same tuple, they
++ are in the same connection; if not, they are not.
++
++ We divide the structure along "manipulatable" and
++ "non-manipulatable" lines, for the benefit of the NAT code.
++*/
++
++/* The protocol-specific manipulable parts of the tuple: always in
++ network order! */
++union ip_conntrack_manip_proto
++{
++ /* Add other protocols here. */
++ u_int16_t all;
++
++ struct {
++ u_int16_t port;
++ } tcp;
++ struct {
++ u_int16_t port;
++ } udp;
++ struct {
++ u_int16_t id;
++ } icmp;
++};
++
++/* The manipulable part of the tuple. */
++struct ip_conntrack_manip
++{
++ u_int32_t ip;
++ union ip_conntrack_manip_proto u;
++};
++
++/* This contains the information to distinguish a connection. */
++struct ip_conntrack_tuple
++{
++ struct ip_conntrack_manip src;
++
++ /* These are the parts of the tuple which are fixed. */
++ struct {
++ u_int32_t ip;
++ union {
++ /* Add other protocols here. */
++ u_int16_t all;
++
++ struct {
++ u_int16_t port;
++ } tcp;
++ struct {
++ u_int16_t port;
++ } udp;
++ struct {
++ u_int8_t type, code;
++ } icmp;
++ } u;
++
++ /* The protocol. */
++ u_int16_t protonum;
++ } dst;
++};
++
++/* This is optimized opposed to a memset of the whole structure. Everything we
++ * really care about is the source/destination unions */
++#define IP_CT_TUPLE_U_BLANK(tuple) \
++ do { \
++ (tuple)->src.u.all = 0; \
++ (tuple)->dst.u.all = 0; \
++ } while (0)
++
++enum ip_conntrack_dir
++{
++ IP_CT_DIR_ORIGINAL,
++ IP_CT_DIR_REPLY,
++ IP_CT_DIR_MAX
++};
++
++#ifdef __KERNEL__
++
++#define DUMP_TUPLE(tp) \
++DEBUGP("tuple %p: %u %u.%u.%u.%u:%hu -> %u.%u.%u.%u:%hu\n", \
++ (tp), (tp)->dst.protonum, \
++ NIPQUAD((tp)->src.ip), ntohs((tp)->src.u.all), \
++ NIPQUAD((tp)->dst.ip), ntohs((tp)->dst.u.all))
++
++#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
++
++/* If we're the first tuple, it's the original dir. */
++#define DIRECTION(h) ((enum ip_conntrack_dir)(&(h)->ctrack->tuplehash[1] == (h)))
++
++/* Connections have two entries in the hash table: one for each way */
++struct ip_conntrack_tuple_hash
++{
++ struct list_head list;
++
++ struct ip_conntrack_tuple tuple;
++
++ /* this == &ctrack->tuplehash[DIRECTION(this)]. */
++ struct ip_conntrack *ctrack;
++};
++
++#endif /* __KERNEL__ */
++
++static inline int ip_ct_tuple_src_equal(const struct ip_conntrack_tuple *t1,
++ const struct ip_conntrack_tuple *t2)
++{
++ return t1->src.ip == t2->src.ip
++ && t1->src.u.all == t2->src.u.all;
++}
++
++static inline int ip_ct_tuple_dst_equal(const struct ip_conntrack_tuple *t1,
++ const struct ip_conntrack_tuple *t2)
++{
++ return t1->dst.ip == t2->dst.ip
++ && t1->dst.u.all == t2->dst.u.all
++ && t1->dst.protonum == t2->dst.protonum;
++}
++
++static inline int ip_ct_tuple_equal(const struct ip_conntrack_tuple *t1,
++ const struct ip_conntrack_tuple *t2)
++{
++ return ip_ct_tuple_src_equal(t1, t2) && ip_ct_tuple_dst_equal(t1, t2);
++}
++
++static inline int ip_ct_tuple_mask_cmp(const struct ip_conntrack_tuple *t,
++ const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_tuple *mask)
++{
++ return !(((t->src.ip ^ tuple->src.ip) & mask->src.ip)
++ || ((t->dst.ip ^ tuple->dst.ip) & mask->dst.ip)
++ || ((t->src.u.all ^ tuple->src.u.all) & mask->src.u.all)
++ || ((t->dst.u.all ^ tuple->dst.u.all) & mask->dst.u.all)
++ || ((t->dst.protonum ^ tuple->dst.protonum)
++ & mask->dst.protonum));
++}
++
++#endif /* _IP_CONNTRACK_TUPLE_H */
+diff -uNr linux_org/include/linux/netfilter_ipv4/ip_nat_pptp.h linux/include/linux/netfilter_ipv4/ip_nat_pptp.h
+--- linux_org/include/linux/netfilter_ipv4/ip_nat_pptp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux/include/linux/netfilter_ipv4/ip_nat_pptp.h 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,11 @@
++/* PPTP constants and structs */
++#ifndef _NAT_PPTP_H
++#define _NAT_PPTP_H
++
++/* conntrack private data */
++struct ip_nat_pptp {
++ u_int16_t pns_call_id; /* NAT'ed PNS call id */
++ u_int16_t pac_call_id; /* NAT'ed PAC call id */
++};
++
++#endif /* _NAT_PPTP_H */
+diff -uNr linux_org/net/ipv4/netfilter/Config.in linux/net/ipv4/netfilter/Config.in
+--- linux_org/net/ipv4/netfilter/Config.in 2003-08-13 19:19:30.000000000 +0200
++++ linux/net/ipv4/netfilter/Config.in 2006-10-27 14:11:52.000000000 +0200
+@@ -7,6 +7,11 @@
+ tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP_NF_CONNTRACK
+ if [ "$CONFIG_IP_NF_CONNTRACK" != "n" ]; then
+ dep_tristate ' FTP protocol support' CONFIG_IP_NF_FTP $CONFIG_IP_NF_CONNTRACK
++ dep_tristate ' GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
++ dep_tristate ' PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CONNTRACK
++ if [ "$CONFIG_IP_NF_PPTP" != "n" ]; then
++ bool ' PPTP verbose debug' CONFIG_IP_NF_PPTP_DEBUG
++ fi
+ dep_tristate ' Amanda protocol support' CONFIG_IP_NF_AMANDA $CONFIG_IP_NF_CONNTRACK
+ dep_tristate ' TFTP protocol support' CONFIG_IP_NF_TFTP $CONFIG_IP_NF_CONNTRACK
+ dep_tristate ' IRC protocol support' CONFIG_IP_NF_IRC $CONFIG_IP_NF_CONNTRACK
+@@ -67,6 +72,20 @@
+ fi
+ fi
+ bool ' NAT of local connections (READ HELP)' CONFIG_IP_NF_NAT_LOCAL
++ if [ "$CONFIG_IP_NF_PPTP" = "m" ]; then
++ define_tristate CONFIG_IP_NF_NAT_PPTP m
++ else
++ if [ "$CONFIG_IP_NF_PPTP" = "y" ]; then
++ define_tristate CONFIG_IP_NF_NAT_PPTP $CONFIG_IP_NF_NAT
++ fi
++ fi
++ if [ "$CONFIG_IP_NF_CT_PROTO_GRE" = "m" ]; then
++ define_tristate CONFIG_IP_NF_NAT_PROTO_GRE m
++ else
++ if [ "$CONFIG_IP_NF_CT_PROTO_GRE" = "y" ]; then
++ define_tristate CONFIG_IP_NF_NAT_PROTO_GRE $CONFIG_IP_NF_NAT
++ fi
++ fi
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ dep_tristate ' Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
+ fi
+diff -uNr linux_org/net/ipv4/netfilter/Makefile linux/net/ipv4/netfilter/Makefile
+--- linux_org/net/ipv4/netfilter/Makefile 2003-08-13 19:19:30.000000000 +0200
++++ linux/net/ipv4/netfilter/Makefile 2006-10-27 14:11:52.000000000 +0200
+@@ -30,8 +30,21 @@
+
+ # connection tracking
+ obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o
++
++# connection tracking protocol helpers
++obj-$(CONFIG_IP_NF_CT_PROTO_GRE) += ip_conntrack_proto_gre.o
++ifdef CONFIG_IP_NF_CT_PROTO_GRE
++ export-objs += ip_conntrack_proto_gre.o
++endif
++
++# NAT protocol helpers
++obj-$(CONFIG_IP_NF_NAT_PROTO_GRE) += ip_nat_proto_gre.o
+
+ # connection tracking helpers
++obj-$(CONFIG_IP_NF_PPTP) += ip_conntrack_pptp.o
++ifdef CONFIG_IP_NF_NAT_PPTP
++ export-objs += ip_conntrack_pptp.o
++endif
+ obj-$(CONFIG_IP_NF_AMANDA) += ip_conntrack_amanda.o
+ ifdef CONFIG_IP_NF_AMANDA
+ export-objs += ip_conntrack_amanda.o
+@@ -49,6 +62,7 @@
+ endif
+
+ # NAT helpers
++obj-$(CONFIG_IP_NF_NAT_PPTP) += ip_nat_pptp.o
+ obj-$(CONFIG_IP_NF_NAT_AMANDA) += ip_nat_amanda.o
+ obj-$(CONFIG_IP_NF_NAT_TFTP) += ip_nat_tftp.o
+ obj-$(CONFIG_IP_NF_NAT_FTP) += ip_nat_ftp.o
+diff -uNr linux_org/net/ipv4/netfilter/ip_conntrack_core.c linux/net/ipv4/netfilter/ip_conntrack_core.c
+--- linux_org/net/ipv4/netfilter/ip_conntrack_core.c 2004-11-24 12:14:04.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_conntrack_core.c 2006-10-27 14:11:52.000000000 +0200
+@@ -142,6 +142,8 @@
+ tuple->dst.ip = iph->daddr;
+ tuple->dst.protonum = iph->protocol;
+
++ tuple->src.u.all = tuple->dst.u.all = 0;
++
+ ret = protocol->pkt_to_tuple((u_int32_t *)iph + iph->ihl,
+ len - 4*iph->ihl,
+ tuple);
+@@ -157,6 +159,8 @@
+ inverse->dst.ip = orig->src.ip;
+ inverse->dst.protonum = orig->dst.protonum;
+
++ inverse->src.u.all = inverse->dst.u.all = 0;
++
+ return protocol->invert_tuple(inverse, orig);
+ }
+
+@@ -945,8 +949,8 @@
+ * so there is no need to use the tuple lock too */
+
+ DEBUGP("ip_conntrack_expect_related %p\n", related_to);
+- DEBUGP("tuple: "); DUMP_TUPLE(&expect->tuple);
+- DEBUGP("mask: "); DUMP_TUPLE(&expect->mask);
++ DEBUGP("tuple: "); DUMP_TUPLE_RAW(&expect->tuple);
++ DEBUGP("mask: "); DUMP_TUPLE_RAW(&expect->mask);
+
+ old = LIST_FIND(&ip_conntrack_expect_list, resent_expect,
+ struct ip_conntrack_expect *, &expect->tuple,
+@@ -1063,15 +1067,14 @@
+
+ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
+ WRITE_LOCK(&ip_conntrack_expect_tuple_lock);
+-
+ DEBUGP("change_expect:\n");
+- DEBUGP("exp tuple: "); DUMP_TUPLE(&expect->tuple);
+- DEBUGP("exp mask: "); DUMP_TUPLE(&expect->mask);
+- DEBUGP("newtuple: "); DUMP_TUPLE(newtuple);
++ DEBUGP("exp tuple: "); DUMP_TUPLE_RAW(&expect->tuple);
++ DEBUGP("exp mask: "); DUMP_TUPLE_RAW(&expect->mask);
++ DEBUGP("newtuple: "); DUMP_TUPLE_RAW(newtuple);
+ if (expect->ct_tuple.dst.protonum == 0) {
+ /* Never seen before */
+ DEBUGP("change expect: never seen before\n");
+- if (!ip_ct_tuple_equal(&expect->tuple, newtuple)
++ if (!ip_ct_tuple_mask_cmp(&expect->tuple, newtuple, &expect->mask)
+ && LIST_FIND(&ip_conntrack_expect_list, expect_clash,
+ struct ip_conntrack_expect *, newtuple, &expect->mask)) {
+ /* Force NAT to find an unused tuple */
+diff -uNr linux_org/net/ipv4/netfilter/ip_conntrack_core.c.orig linux/net/ipv4/netfilter/ip_conntrack_core.c.orig
+--- linux_org/net/ipv4/netfilter/ip_conntrack_core.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_conntrack_core.c.orig 2004-11-24 12:14:04.000000000 +0100
+@@ -0,0 +1,1446 @@
++/* Connection state tracking for netfilter. This is separated from,
++ but required by, the NAT layer; it can also be used by an iptables
++ extension. */
++
++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General
++ * Public Licence.
++ *
++ * 23 Apr 2001: Harald Welte <laforge@gnumonks.org>
++ * - new API and handling of conntrack/nat helpers
++ * - now capable of multiple expectations for one master
++ * 16 Jul 2002: Harald Welte <laforge@gnumonks.org>
++ * - add usage/reference counts to ip_conntrack_expect
++ * - export ip_conntrack[_expect]_{find_get,put} functions
++ * */
++
++#include <linux/version.h>
++#include <linux/config.h>
++#include <linux/types.h>
++#include <linux/ip.h>
++#include <linux/netfilter.h>
++#include <linux/netfilter_ipv4.h>
++#include <linux/module.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/vmalloc.h>
++#include <linux/brlock.h>
++#include <net/checksum.h>
++#include <linux/stddef.h>
++#include <linux/sysctl.h>
++#include <linux/slab.h>
++#include <linux/random.h>
++#include <linux/jhash.h>
++/* For ERR_PTR(). Yeah, I know... --RR */
++#include <linux/fs.h>
++
++/* This rwlock protects the main hash table, protocol/helper/expected
++ registrations, conntrack timers*/
++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_conntrack_lock)
++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_conntrack_lock)
++
++#include <linux/netfilter_ipv4/ip_conntrack.h>
++#include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
++#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
++#include <linux/netfilter_ipv4/ip_conntrack_core.h>
++#include <linux/netfilter_ipv4/listhelp.h>
++
++#define IP_CONNTRACK_VERSION "2.1"
++
++#if 0
++#define DEBUGP printk
++#else
++#define DEBUGP(format, args...)
++#endif
++
++DECLARE_RWLOCK(ip_conntrack_lock);
++DECLARE_RWLOCK(ip_conntrack_expect_tuple_lock);
++
++void (*ip_conntrack_destroyed)(struct ip_conntrack *conntrack) = NULL;
++LIST_HEAD(ip_conntrack_expect_list);
++LIST_HEAD(protocol_list);
++static LIST_HEAD(helpers);
++unsigned int ip_conntrack_htable_size = 0;
++int ip_conntrack_max = 0;
++static atomic_t ip_conntrack_count = ATOMIC_INIT(0);
++struct list_head *ip_conntrack_hash;
++static kmem_cache_t *ip_conntrack_cachep;
++
++extern struct ip_conntrack_protocol ip_conntrack_generic_protocol;
++
++static inline int proto_cmpfn(const struct ip_conntrack_protocol *curr,
++ u_int8_t protocol)
++{
++ return protocol == curr->proto;
++}
++
++struct ip_conntrack_protocol *__ip_ct_find_proto(u_int8_t protocol)
++{
++ struct ip_conntrack_protocol *p;
++
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ p = LIST_FIND(&protocol_list, proto_cmpfn,
++ struct ip_conntrack_protocol *, protocol);
++ if (!p)
++ p = &ip_conntrack_generic_protocol;
++
++ return p;
++}
++
++struct ip_conntrack_protocol *ip_ct_find_proto(u_int8_t protocol)
++{
++ struct ip_conntrack_protocol *p;
++
++ READ_LOCK(&ip_conntrack_lock);
++ p = __ip_ct_find_proto(protocol);
++ READ_UNLOCK(&ip_conntrack_lock);
++ return p;
++}
++
++inline void
++ip_conntrack_put(struct ip_conntrack *ct)
++{
++ IP_NF_ASSERT(ct);
++ IP_NF_ASSERT(ct->infos[0].master);
++ /* nf_conntrack_put wants to go via an info struct, so feed it
++ one at random. */
++ nf_conntrack_put(&ct->infos[0]);
++}
++
++static int ip_conntrack_hash_rnd_initted;
++static unsigned int ip_conntrack_hash_rnd;
++
++static u_int32_t
++hash_conntrack(const struct ip_conntrack_tuple *tuple)
++{
++#if 0
++ dump_tuple(tuple);
++#endif
++ return (jhash_3words(tuple->src.ip,
++ (tuple->dst.ip ^ tuple->dst.protonum),
++ (tuple->src.u.all | (tuple->dst.u.all << 16)),
++ ip_conntrack_hash_rnd) % ip_conntrack_htable_size);
++}
++
++inline int
++get_tuple(const struct iphdr *iph, size_t len,
++ struct ip_conntrack_tuple *tuple,
++ struct ip_conntrack_protocol *protocol)
++{
++ int ret;
++
++ /* Never happen */
++ if (iph->frag_off & htons(IP_OFFSET)) {
++ printk("ip_conntrack_core: Frag of proto %u.\n",
++ iph->protocol);
++ return 0;
++ }
++ /* Guarantee 8 protocol bytes: if more wanted, use len param */
++ else if (iph->ihl * 4 + 8 > len)
++ return 0;
++
++ tuple->src.ip = iph->saddr;
++ tuple->dst.ip = iph->daddr;
++ tuple->dst.protonum = iph->protocol;
++
++ ret = protocol->pkt_to_tuple((u_int32_t *)iph + iph->ihl,
++ len - 4*iph->ihl,
++ tuple);
++ return ret;
++}
++
++static int
++invert_tuple(struct ip_conntrack_tuple *inverse,
++ const struct ip_conntrack_tuple *orig,
++ const struct ip_conntrack_protocol *protocol)
++{
++ inverse->src.ip = orig->dst.ip;
++ inverse->dst.ip = orig->src.ip;
++ inverse->dst.protonum = orig->dst.protonum;
++
++ return protocol->invert_tuple(inverse, orig);
++}
++
++
++/* ip_conntrack_expect helper functions */
++
++/* Compare tuple parts depending on mask. */
++static inline int expect_cmp(const struct ip_conntrack_expect *i,
++ const struct ip_conntrack_tuple *tuple)
++{
++ MUST_BE_READ_LOCKED(&ip_conntrack_expect_tuple_lock);
++ return ip_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask);
++}
++
++static void
++destroy_expect(struct ip_conntrack_expect *exp)
++{
++ DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use));
++ IP_NF_ASSERT(atomic_read(&exp->use) == 0);
++ IP_NF_ASSERT(!timer_pending(&exp->timeout));
++
++ kfree(exp);
++}
++
++inline void ip_conntrack_expect_put(struct ip_conntrack_expect *exp)
++{
++ IP_NF_ASSERT(exp);
++
++ if (atomic_dec_and_test(&exp->use)) {
++ /* usage count dropped to zero */
++ destroy_expect(exp);
++ }
++}
++
++static inline struct ip_conntrack_expect *
++__ip_ct_expect_find(const struct ip_conntrack_tuple *tuple)
++{
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ MUST_BE_READ_LOCKED(&ip_conntrack_expect_tuple_lock);
++ return LIST_FIND(&ip_conntrack_expect_list, expect_cmp,
++ struct ip_conntrack_expect *, tuple);
++}
++
++/* Find a expectation corresponding to a tuple. */
++struct ip_conntrack_expect *
++ip_conntrack_expect_find_get(const struct ip_conntrack_tuple *tuple)
++{
++ struct ip_conntrack_expect *exp;
++
++ READ_LOCK(&ip_conntrack_lock);
++ READ_LOCK(&ip_conntrack_expect_tuple_lock);
++ exp = __ip_ct_expect_find(tuple);
++ if (exp)
++ atomic_inc(&exp->use);
++ READ_UNLOCK(&ip_conntrack_expect_tuple_lock);
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ return exp;
++}
++
++/* remove one specific expectation from all lists and drop refcount,
++ * does _NOT_ delete the timer. */
++static void __unexpect_related(struct ip_conntrack_expect *expect)
++{
++ DEBUGP("unexpect_related(%p)\n", expect);
++ MUST_BE_WRITE_LOCKED(&ip_conntrack_lock);
++
++ /* we're not allowed to unexpect a confirmed expectation! */
++ IP_NF_ASSERT(!expect->sibling);
++
++ /* delete from global and local lists */
++ list_del(&expect->list);
++ list_del(&expect->expected_list);
++
++ /* decrement expect-count of master conntrack */
++ if (expect->expectant)
++ expect->expectant->expecting--;
++
++ ip_conntrack_expect_put(expect);
++}
++
++/* remove one specific expecatation from all lists, drop refcount
++ * and expire timer.
++ * This function can _NOT_ be called for confirmed expects! */
++static void unexpect_related(struct ip_conntrack_expect *expect)
++{
++ IP_NF_ASSERT(expect->expectant);
++ IP_NF_ASSERT(expect->expectant->helper);
++ /* if we are supposed to have a timer, but we can't delete
++ * it: race condition. __unexpect_related will
++ * be calledd by timeout function */
++ if (expect->expectant->helper->timeout
++ && !del_timer(&expect->timeout))
++ return;
++
++ __unexpect_related(expect);
++}
++
++/* delete all unconfirmed expectations for this conntrack */
++static void remove_expectations(struct ip_conntrack *ct, int drop_refcount)
++{
++ struct list_head *exp_entry, *next;
++ struct ip_conntrack_expect *exp;
++
++ DEBUGP("remove_expectations(%p)\n", ct);
++
++ list_for_each_safe(exp_entry, next, &ct->sibling_list) {
++ exp = list_entry(exp_entry, struct ip_conntrack_expect,
++ expected_list);
++
++ /* we skip established expectations, as we want to delete
++ * the un-established ones only */
++ if (exp->sibling) {
++ DEBUGP("remove_expectations: skipping established %p of %p\n", exp->sibling, ct);
++ if (drop_refcount) {
++ /* Indicate that this expectations parent is dead */
++ ip_conntrack_put(exp->expectant);
++ exp->expectant = NULL;
++ }
++ continue;
++ }
++
++ IP_NF_ASSERT(list_inlist(&ip_conntrack_expect_list, exp));
++ IP_NF_ASSERT(exp->expectant == ct);
++
++ /* delete expectation from global and private lists */
++ unexpect_related(exp);
++ }
++}
++
++static void
++clean_from_lists(struct ip_conntrack *ct)
++{
++ unsigned int ho, hr;
++
++ DEBUGP("clean_from_lists(%p)\n", ct);
++ MUST_BE_WRITE_LOCKED(&ip_conntrack_lock);
++
++ ho = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
++ hr = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);
++ LIST_DELETE(&ip_conntrack_hash[ho], &ct->tuplehash[IP_CT_DIR_ORIGINAL]);
++ LIST_DELETE(&ip_conntrack_hash[hr], &ct->tuplehash[IP_CT_DIR_REPLY]);
++
++ /* Destroy all un-established, pending expectations */
++ remove_expectations(ct, 1);
++}
++
++static void
++destroy_conntrack(struct nf_conntrack *nfct)
++{
++ struct ip_conntrack *ct = (struct ip_conntrack *)nfct, *master = NULL;
++ struct ip_conntrack_protocol *proto;
++
++ DEBUGP("destroy_conntrack(%p)\n", ct);
++ IP_NF_ASSERT(atomic_read(&nfct->use) == 0);
++ IP_NF_ASSERT(!timer_pending(&ct->timeout));
++
++ /* To make sure we don't get any weird locking issues here:
++ * destroy_conntrack() MUST NOT be called with a write lock
++ * to ip_conntrack_lock!!! -HW */
++ proto = ip_ct_find_proto(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.protonum);
++ if (proto && proto->destroy)
++ proto->destroy(ct);
++
++ if (ip_conntrack_destroyed)
++ ip_conntrack_destroyed(ct);
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* Make sure don't leave any orphaned expectations lying around */
++ if (ct->expecting)
++ remove_expectations(ct, 1);
++
++ /* Delete our master expectation */
++ if (ct->master) {
++ if (ct->master->expectant) {
++ /* can't call __unexpect_related here,
++ * since it would screw up expect_list */
++ list_del(&ct->master->expected_list);
++ master = ct->master->expectant;
++ }
++ kfree(ct->master);
++ }
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ if (master)
++ ip_conntrack_put(master);
++
++ DEBUGP("destroy_conntrack: returning ct=%p to slab\n", ct);
++ kmem_cache_free(ip_conntrack_cachep, ct);
++ atomic_dec(&ip_conntrack_count);
++}
++
++static void death_by_timeout(unsigned long ul_conntrack)
++{
++ struct ip_conntrack *ct = (void *)ul_conntrack;
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ clean_from_lists(ct);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ ip_conntrack_put(ct);
++}
++
++static inline int
++conntrack_tuple_cmp(const struct ip_conntrack_tuple_hash *i,
++ const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack *ignored_conntrack)
++{
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ return i->ctrack != ignored_conntrack
++ && ip_ct_tuple_equal(tuple, &i->tuple);
++}
++
++static struct ip_conntrack_tuple_hash *
++__ip_conntrack_find(const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack *ignored_conntrack)
++{
++ struct ip_conntrack_tuple_hash *h;
++ unsigned int hash = hash_conntrack(tuple);
++
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ h = LIST_FIND(&ip_conntrack_hash[hash],
++ conntrack_tuple_cmp,
++ struct ip_conntrack_tuple_hash *,
++ tuple, ignored_conntrack);
++ return h;
++}
++
++/* Find a connection corresponding to a tuple. */
++struct ip_conntrack_tuple_hash *
++ip_conntrack_find_get(const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack *ignored_conntrack)
++{
++ struct ip_conntrack_tuple_hash *h;
++
++ READ_LOCK(&ip_conntrack_lock);
++ h = __ip_conntrack_find(tuple, ignored_conntrack);
++ if (h)
++ atomic_inc(&h->ctrack->ct_general.use);
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ return h;
++}
++
++static inline struct ip_conntrack *
++__ip_conntrack_get(struct nf_ct_info *nfct, enum ip_conntrack_info *ctinfo)
++{
++ struct ip_conntrack *ct
++ = (struct ip_conntrack *)nfct->master;
++
++ /* ctinfo is the index of the nfct inside the conntrack */
++ *ctinfo = nfct - ct->infos;
++ IP_NF_ASSERT(*ctinfo >= 0 && *ctinfo < IP_CT_NUMBER);
++ return ct;
++}
++
++/* Return conntrack and conntrack_info given skb->nfct->master */
++struct ip_conntrack *
++ip_conntrack_get(struct sk_buff *skb, enum ip_conntrack_info *ctinfo)
++{
++ if (skb->nfct)
++ return __ip_conntrack_get(skb->nfct, ctinfo);
++ return NULL;
++}
++
++/* Confirm a connection given skb->nfct; places it in hash table */
++int
++__ip_conntrack_confirm(struct nf_ct_info *nfct)
++{
++ unsigned int hash, repl_hash;
++ struct ip_conntrack *ct;
++ enum ip_conntrack_info ctinfo;
++
++ ct = __ip_conntrack_get(nfct, &ctinfo);
++
++ /* ipt_REJECT uses ip_conntrack_attach to attach related
++ ICMP/TCP RST packets in other direction. Actual packet
++ which created connection will be IP_CT_NEW or for an
++ expected connection, IP_CT_RELATED. */
++ if (CTINFO2DIR(ctinfo) != IP_CT_DIR_ORIGINAL)
++ return NF_ACCEPT;
++
++ hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
++ repl_hash = hash_conntrack(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);
++
++ /* We're not in hash table, and we refuse to set up related
++ connections for unconfirmed conns. But packet copies and
++ REJECT will give spurious warnings here. */
++ /* IP_NF_ASSERT(atomic_read(&ct->ct_general.use) == 1); */
++
++ /* No external references means noone else could have
++ confirmed us. */
++ IP_NF_ASSERT(!is_confirmed(ct));
++ DEBUGP("Confirming conntrack %p\n", ct);
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* See if there's one in the list already, including reverse:
++ NAT could have grabbed it without realizing, since we're
++ not in the hash. If there is, we lost race. */
++ if (!LIST_FIND(&ip_conntrack_hash[hash],
++ conntrack_tuple_cmp,
++ struct ip_conntrack_tuple_hash *,
++ &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, NULL)
++ && !LIST_FIND(&ip_conntrack_hash[repl_hash],
++ conntrack_tuple_cmp,
++ struct ip_conntrack_tuple_hash *,
++ &ct->tuplehash[IP_CT_DIR_REPLY].tuple, NULL)) {
++ list_prepend(&ip_conntrack_hash[hash],
++ &ct->tuplehash[IP_CT_DIR_ORIGINAL]);
++ list_prepend(&ip_conntrack_hash[repl_hash],
++ &ct->tuplehash[IP_CT_DIR_REPLY]);
++ /* Timer relative to confirmation time, not original
++ setting time, otherwise we'd get timer wrap in
++ weird delay cases. */
++ ct->timeout.expires += jiffies;
++ add_timer(&ct->timeout);
++ atomic_inc(&ct->ct_general.use);
++ set_bit(IPS_CONFIRMED_BIT, &ct->status);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ return NF_ACCEPT;
++ }
++
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ return NF_DROP;
++}
++
++/* Returns true if a connection correspondings to the tuple (required
++ for NAT). */
++int
++ip_conntrack_tuple_taken(const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack *ignored_conntrack)
++{
++ struct ip_conntrack_tuple_hash *h;
++
++ READ_LOCK(&ip_conntrack_lock);
++ h = __ip_conntrack_find(tuple, ignored_conntrack);
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ return h != NULL;
++}
++
++/* Returns conntrack if it dealt with ICMP, and filled in skb fields */
++struct ip_conntrack *
++icmp_error_track(struct sk_buff *skb,
++ enum ip_conntrack_info *ctinfo,
++ unsigned int hooknum)
++{
++ const struct iphdr *iph = skb->nh.iph;
++ struct icmphdr *hdr;
++ struct ip_conntrack_tuple innertuple, origtuple;
++ struct iphdr *inner;
++ size_t datalen;
++ struct ip_conntrack_protocol *innerproto;
++ struct ip_conntrack_tuple_hash *h;
++
++ IP_NF_ASSERT(iph->protocol == IPPROTO_ICMP);
++ IP_NF_ASSERT(skb->nfct == NULL);
++
++ hdr = (struct icmphdr *)((u_int32_t *)iph + iph->ihl);
++ inner = (struct iphdr *)(hdr + 1);
++ datalen = skb->len - iph->ihl*4 - sizeof(*hdr);
++
++ if (skb->len < iph->ihl * 4 + sizeof(*hdr) + sizeof(*iph)) {
++ DEBUGP("icmp_error_track: too short\n");
++ return NULL;
++ }
++
++ if (hdr->type != ICMP_DEST_UNREACH
++ && hdr->type != ICMP_SOURCE_QUENCH
++ && hdr->type != ICMP_TIME_EXCEEDED
++ && hdr->type != ICMP_PARAMETERPROB
++ && hdr->type != ICMP_REDIRECT)
++ return NULL;
++
++ /* Ignore ICMP's containing fragments (shouldn't happen) */
++ if (inner->frag_off & htons(IP_OFFSET)) {
++ DEBUGP("icmp_error_track: fragment of proto %u\n",
++ inner->protocol);
++ return NULL;
++ }
++
++ /* Ignore it if the checksum's bogus. */
++ if (ip_compute_csum((unsigned char *)hdr, sizeof(*hdr) + datalen)) {
++ DEBUGP("icmp_error_track: bad csum\n");
++ return NULL;
++ }
++
++ innerproto = ip_ct_find_proto(inner->protocol);
++ /* Are they talking about one of our connections? */
++ if (inner->ihl * 4 + 8 > datalen
++ || !get_tuple(inner, datalen, &origtuple, innerproto)) {
++ DEBUGP("icmp_error: ! get_tuple p=%u (%u*4+%u dlen=%u)\n",
++ inner->protocol, inner->ihl, 8,
++ datalen);
++ return NULL;
++ }
++
++ /* Ordinarily, we'd expect the inverted tupleproto, but it's
++ been preserved inside the ICMP. */
++ if (!invert_tuple(&innertuple, &origtuple, innerproto)) {
++ DEBUGP("icmp_error_track: Can't invert tuple\n");
++ return NULL;
++ }
++
++ *ctinfo = IP_CT_RELATED;
++
++ h = ip_conntrack_find_get(&innertuple, NULL);
++ if (!h) {
++ /* Locally generated ICMPs will match inverted if they
++ haven't been SNAT'ed yet */
++ /* FIXME: NAT code has to handle half-done double NAT --RR */
++ if (hooknum == NF_IP_LOCAL_OUT)
++ h = ip_conntrack_find_get(&origtuple, NULL);
++
++ if (!h) {
++ DEBUGP("icmp_error_track: no match\n");
++ return NULL;
++ }
++ /* Reverse direction from that found */
++ if (DIRECTION(h) != IP_CT_DIR_REPLY)
++ *ctinfo += IP_CT_IS_REPLY;
++ } else {
++ if (DIRECTION(h) == IP_CT_DIR_REPLY)
++ *ctinfo += IP_CT_IS_REPLY;
++ }
++
++ /* Update skb to refer to this connection */
++ skb->nfct = &h->ctrack->infos[*ctinfo];
++ return h->ctrack;
++}
++
++/* There's a small race here where we may free a just-assured
++ connection. Too bad: we're in trouble anyway. */
++static inline int unreplied(const struct ip_conntrack_tuple_hash *i)
++{
++ return !(test_bit(IPS_ASSURED_BIT, &i->ctrack->status));
++}
++
++static int early_drop(struct list_head *chain)
++{
++ /* Traverse backwards: gives us oldest, which is roughly LRU */
++ struct ip_conntrack_tuple_hash *h;
++ int dropped = 0;
++
++ READ_LOCK(&ip_conntrack_lock);
++ h = LIST_FIND_B(chain, unreplied, struct ip_conntrack_tuple_hash *);
++ if (h)
++ atomic_inc(&h->ctrack->ct_general.use);
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ if (!h)
++ return dropped;
++
++ if (del_timer(&h->ctrack->timeout)) {
++ death_by_timeout((unsigned long)h->ctrack);
++ dropped = 1;
++ }
++ ip_conntrack_put(h->ctrack);
++ return dropped;
++}
++
++static inline int helper_cmp(const struct ip_conntrack_helper *i,
++ const struct ip_conntrack_tuple *rtuple)
++{
++ return ip_ct_tuple_mask_cmp(rtuple, &i->tuple, &i->mask);
++}
++
++struct ip_conntrack_helper *ip_ct_find_helper(const struct ip_conntrack_tuple *tuple)
++{
++ return LIST_FIND(&helpers, helper_cmp,
++ struct ip_conntrack_helper *,
++ tuple);
++}
++
++/* Allocate a new conntrack: we return -ENOMEM if classification
++ failed due to stress. Otherwise it really is unclassifiable. */
++static struct ip_conntrack_tuple_hash *
++init_conntrack(const struct ip_conntrack_tuple *tuple,
++ struct ip_conntrack_protocol *protocol,
++ struct sk_buff *skb)
++{
++ struct ip_conntrack *conntrack;
++ struct ip_conntrack_tuple repl_tuple;
++ size_t hash;
++ struct ip_conntrack_expect *expected;
++ int i;
++ static unsigned int drop_next = 0;
++
++ if (!ip_conntrack_hash_rnd_initted) {
++ get_random_bytes(&ip_conntrack_hash_rnd, 4);
++ ip_conntrack_hash_rnd_initted = 1;
++ }
++
++ hash = hash_conntrack(tuple);
++
++ if (ip_conntrack_max &&
++ atomic_read(&ip_conntrack_count) >= ip_conntrack_max) {
++ /* Try dropping from random chain, or else from the
++ chain about to put into (in case they're trying to
++ bomb one hash chain). */
++ unsigned int next = (drop_next++)%ip_conntrack_htable_size;
++
++ if (!early_drop(&ip_conntrack_hash[next])
++ && !early_drop(&ip_conntrack_hash[hash])) {
++ if (net_ratelimit())
++ printk(KERN_WARNING
++ "ip_conntrack: table full, dropping"
++ " packet.\n");
++ return ERR_PTR(-ENOMEM);
++ }
++ }
++
++ if (!invert_tuple(&repl_tuple, tuple, protocol)) {
++ DEBUGP("Can't invert tuple.\n");
++ return NULL;
++ }
++
++ conntrack = kmem_cache_alloc(ip_conntrack_cachep, GFP_ATOMIC);
++ if (!conntrack) {
++ DEBUGP("Can't allocate conntrack.\n");
++ return ERR_PTR(-ENOMEM);
++ }
++
++ memset(conntrack, 0, sizeof(*conntrack));
++ atomic_set(&conntrack->ct_general.use, 1);
++ conntrack->ct_general.destroy = destroy_conntrack;
++ conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple = *tuple;
++ conntrack->tuplehash[IP_CT_DIR_ORIGINAL].ctrack = conntrack;
++ conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = repl_tuple;
++ conntrack->tuplehash[IP_CT_DIR_REPLY].ctrack = conntrack;
++ for (i=0; i < IP_CT_NUMBER; i++)
++ conntrack->infos[i].master = &conntrack->ct_general;
++
++ if (!protocol->new(conntrack, skb->nh.iph, skb->len)) {
++ kmem_cache_free(ip_conntrack_cachep, conntrack);
++ return NULL;
++ }
++ /* Don't set timer yet: wait for confirmation */
++ init_timer(&conntrack->timeout);
++ conntrack->timeout.data = (unsigned long)conntrack;
++ conntrack->timeout.function = death_by_timeout;
++
++ INIT_LIST_HEAD(&conntrack->sibling_list);
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* Need finding and deleting of expected ONLY if we win race */
++ READ_LOCK(&ip_conntrack_expect_tuple_lock);
++ expected = LIST_FIND(&ip_conntrack_expect_list, expect_cmp,
++ struct ip_conntrack_expect *, tuple);
++ READ_UNLOCK(&ip_conntrack_expect_tuple_lock);
++
++ /* If master is not in hash table yet (ie. packet hasn't left
++ this machine yet), how can other end know about expected?
++ Hence these are not the droids you are looking for (if
++ master ct never got confirmed, we'd hold a reference to it
++ and weird things would happen to future packets). */
++ if (expected && !is_confirmed(expected->expectant))
++ expected = NULL;
++
++ /* Look up the conntrack helper for master connections only */
++ if (!expected)
++ conntrack->helper = ip_ct_find_helper(&repl_tuple);
++
++ /* If the expectation is dying, then this is a looser. */
++ if (expected
++ && expected->expectant->helper->timeout
++ && ! del_timer(&expected->timeout))
++ expected = NULL;
++
++ if (expected) {
++ DEBUGP("conntrack: expectation arrives ct=%p exp=%p\n",
++ conntrack, expected);
++ /* Welcome, Mr. Bond. We've been expecting you... */
++ __set_bit(IPS_EXPECTED_BIT, &conntrack->status);
++ conntrack->master = expected;
++ expected->sibling = conntrack;
++ LIST_DELETE(&ip_conntrack_expect_list, expected);
++ expected->expectant->expecting--;
++ nf_conntrack_get(&master_ct(conntrack)->infos[0]);
++ }
++ atomic_inc(&ip_conntrack_count);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ if (expected && expected->expectfn)
++ expected->expectfn(conntrack);
++ return &conntrack->tuplehash[IP_CT_DIR_ORIGINAL];
++}
++
++/* On success, returns conntrack ptr, sets skb->nfct and ctinfo */
++static inline struct ip_conntrack *
++resolve_normal_ct(struct sk_buff *skb,
++ struct ip_conntrack_protocol *proto,
++ int *set_reply,
++ unsigned int hooknum,
++ enum ip_conntrack_info *ctinfo)
++{
++ struct ip_conntrack_tuple tuple;
++ struct ip_conntrack_tuple_hash *h;
++
++ IP_NF_ASSERT((skb->nh.iph->frag_off & htons(IP_OFFSET)) == 0);
++
++ if (!get_tuple(skb->nh.iph, skb->len, &tuple, proto))
++ return NULL;
++
++ /* look for tuple match */
++ h = ip_conntrack_find_get(&tuple, NULL);
++ if (!h) {
++ h = init_conntrack(&tuple, proto, skb);
++ if (!h)
++ return NULL;
++ if (IS_ERR(h))
++ return (void *)h;
++ }
++
++ /* It exists; we have (non-exclusive) reference. */
++ if (DIRECTION(h) == IP_CT_DIR_REPLY) {
++ *ctinfo = IP_CT_ESTABLISHED + IP_CT_IS_REPLY;
++ /* Please set reply bit if this packet OK */
++ *set_reply = 1;
++ } else {
++ /* Once we've had two way comms, always ESTABLISHED. */
++ if (test_bit(IPS_SEEN_REPLY_BIT, &h->ctrack->status)) {
++ DEBUGP("ip_conntrack_in: normal packet for %p\n",
++ h->ctrack);
++ *ctinfo = IP_CT_ESTABLISHED;
++ } else if (test_bit(IPS_EXPECTED_BIT, &h->ctrack->status)) {
++ DEBUGP("ip_conntrack_in: related packet for %p\n",
++ h->ctrack);
++ *ctinfo = IP_CT_RELATED;
++ } else {
++ DEBUGP("ip_conntrack_in: new packet for %p\n",
++ h->ctrack);
++ *ctinfo = IP_CT_NEW;
++ }
++ *set_reply = 0;
++ }
++ skb->nfct = &h->ctrack->infos[*ctinfo];
++ return h->ctrack;
++}
++
++/* Netfilter hook itself. */
++unsigned int ip_conntrack_in(unsigned int hooknum,
++ struct sk_buff **pskb,
++ const struct net_device *in,
++ const struct net_device *out,
++ int (*okfn)(struct sk_buff *))
++{
++ struct ip_conntrack *ct;
++ enum ip_conntrack_info ctinfo;
++ struct ip_conntrack_protocol *proto;
++ int set_reply;
++ int ret;
++
++ /* FIXME: Do this right please. --RR */
++ (*pskb)->nfcache |= NFC_UNKNOWN;
++
++/* Doesn't cover locally-generated broadcast, so not worth it. */
++#if 0
++ /* Ignore broadcast: no `connection'. */
++ if ((*pskb)->pkt_type == PACKET_BROADCAST) {
++ printk("Broadcast packet!\n");
++ return NF_ACCEPT;
++ } else if (((*pskb)->nh.iph->daddr & htonl(0x000000FF))
++ == htonl(0x000000FF)) {
++ printk("Should bcast: %u.%u.%u.%u->%u.%u.%u.%u (sk=%p, ptype=%u)\n",
++ NIPQUAD((*pskb)->nh.iph->saddr),
++ NIPQUAD((*pskb)->nh.iph->daddr),
++ (*pskb)->sk, (*pskb)->pkt_type);
++ }
++#endif
++
++ /* Previously seen (loopback)? Ignore. Do this before
++ fragment check. */
++ if ((*pskb)->nfct)
++ return NF_ACCEPT;
++
++ /* Gather fragments. */
++ if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) {
++ *pskb = ip_ct_gather_frags(*pskb);
++ if (!*pskb)
++ return NF_STOLEN;
++ }
++
++ proto = ip_ct_find_proto((*pskb)->nh.iph->protocol);
++
++ /* It may be an icmp error... */
++ if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP
++ && icmp_error_track(*pskb, &ctinfo, hooknum))
++ return NF_ACCEPT;
++
++ if (!(ct = resolve_normal_ct(*pskb, proto,&set_reply,hooknum,&ctinfo)))
++ /* Not valid part of a connection */
++ return NF_ACCEPT;
++
++ if (IS_ERR(ct))
++ /* Too stressed to deal. */
++ return NF_DROP;
++
++ IP_NF_ASSERT((*pskb)->nfct);
++
++ ret = proto->packet(ct, (*pskb)->nh.iph, (*pskb)->len, ctinfo);
++ if (ret == -1) {
++ /* Invalid */
++ nf_conntrack_put((*pskb)->nfct);
++ (*pskb)->nfct = NULL;
++ return NF_ACCEPT;
++ }
++
++ if (ret != NF_DROP && ct->helper) {
++ ret = ct->helper->help((*pskb)->nh.iph, (*pskb)->len,
++ ct, ctinfo);
++ if (ret == -1) {
++ /* Invalid */
++ nf_conntrack_put((*pskb)->nfct);
++ (*pskb)->nfct = NULL;
++ return NF_ACCEPT;
++ }
++ }
++ if (set_reply)
++ set_bit(IPS_SEEN_REPLY_BIT, &ct->status);
++
++ return ret;
++}
++
++int invert_tuplepr(struct ip_conntrack_tuple *inverse,
++ const struct ip_conntrack_tuple *orig)
++{
++ return invert_tuple(inverse, orig, ip_ct_find_proto(orig->dst.protonum));
++}
++
++static inline int resent_expect(const struct ip_conntrack_expect *i,
++ const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_tuple *mask)
++{
++ DEBUGP("resent_expect\n");
++ DEBUGP(" tuple: "); DUMP_TUPLE(&i->tuple);
++ DEBUGP("ct_tuple: "); DUMP_TUPLE(&i->ct_tuple);
++ DEBUGP("test tuple: "); DUMP_TUPLE(tuple);
++ return (((i->ct_tuple.dst.protonum == 0 && ip_ct_tuple_equal(&i->tuple, tuple))
++ || (i->ct_tuple.dst.protonum && ip_ct_tuple_equal(&i->ct_tuple, tuple)))
++ && ip_ct_tuple_equal(&i->mask, mask));
++}
++
++/* Would two expected things clash? */
++static inline int expect_clash(const struct ip_conntrack_expect *i,
++ const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_tuple *mask)
++{
++ /* Part covered by intersection of masks must be unequal,
++ otherwise they clash */
++ struct ip_conntrack_tuple intersect_mask
++ = { { i->mask.src.ip & mask->src.ip,
++ { i->mask.src.u.all & mask->src.u.all } },
++ { i->mask.dst.ip & mask->dst.ip,
++ { i->mask.dst.u.all & mask->dst.u.all },
++ i->mask.dst.protonum & mask->dst.protonum } };
++
++ return ip_ct_tuple_mask_cmp(&i->tuple, tuple, &intersect_mask);
++}
++
++inline void ip_conntrack_unexpect_related(struct ip_conntrack_expect *expect)
++{
++ WRITE_LOCK(&ip_conntrack_lock);
++ unexpect_related(expect);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++}
++
++static void expectation_timed_out(unsigned long ul_expect)
++{
++ struct ip_conntrack_expect *expect = (void *) ul_expect;
++
++ DEBUGP("expectation %p timed out\n", expect);
++ WRITE_LOCK(&ip_conntrack_lock);
++ __unexpect_related(expect);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++}
++
++/* Add a related connection. */
++int ip_conntrack_expect_related(struct ip_conntrack *related_to,
++ struct ip_conntrack_expect *expect)
++{
++ struct ip_conntrack_expect *old, *new;
++ int ret = 0;
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* Because of the write lock, no reader can walk the lists,
++ * so there is no need to use the tuple lock too */
++
++ DEBUGP("ip_conntrack_expect_related %p\n", related_to);
++ DEBUGP("tuple: "); DUMP_TUPLE(&expect->tuple);
++ DEBUGP("mask: "); DUMP_TUPLE(&expect->mask);
++
++ old = LIST_FIND(&ip_conntrack_expect_list, resent_expect,
++ struct ip_conntrack_expect *, &expect->tuple,
++ &expect->mask);
++ if (old) {
++ /* Helper private data may contain offsets but no pointers
++ pointing into the payload - otherwise we should have to copy
++ the data filled out by the helper over the old one */
++ DEBUGP("expect_related: resent packet\n");
++ if (related_to->helper->timeout) {
++ if (!del_timer(&old->timeout)) {
++ /* expectation is dying. Fall through */
++ old = NULL;
++ } else {
++ old->timeout.expires = jiffies +
++ related_to->helper->timeout * HZ;
++ add_timer(&old->timeout);
++ }
++ }
++
++ if (old) {
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ return -EEXIST;
++ }
++ } else if (related_to->helper->max_expected &&
++ related_to->expecting >= related_to->helper->max_expected) {
++ /* old == NULL */
++ if (!(related_to->helper->flags &
++ IP_CT_HELPER_F_REUSE_EXPECT)) {
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ if (net_ratelimit())
++ printk(KERN_WARNING
++ "ip_conntrack: max number of expected "
++ "connections %i of %s reached for "
++ "%u.%u.%u.%u->%u.%u.%u.%u\n",
++ related_to->helper->max_expected,
++ related_to->helper->name,
++ NIPQUAD(related_to->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip),
++ NIPQUAD(related_to->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip));
++ return -EPERM;
++ }
++ DEBUGP("ip_conntrack: max number of expected "
++ "connections %i of %s reached for "
++ "%u.%u.%u.%u->%u.%u.%u.%u, reusing\n",
++ related_to->helper->max_expected,
++ related_to->helper->name,
++ NIPQUAD(related_to->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip),
++ NIPQUAD(related_to->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip));
++
++ /* choose the the oldest expectation to evict */
++ list_for_each_entry(old, &related_to->sibling_list,
++ expected_list)
++ if (old->sibling == NULL)
++ break;
++
++ /* We cannot fail since related_to->expecting is the number
++ * of unconfirmed expectations */
++ IP_NF_ASSERT(old && old->sibling == NULL);
++
++ /* newnat14 does not reuse the real allocated memory
++ * structures but rather unexpects the old and
++ * allocates a new. unexpect_related will decrement
++ * related_to->expecting.
++ */
++ unexpect_related(old);
++ ret = -EPERM;
++ } else if (LIST_FIND(&ip_conntrack_expect_list, expect_clash,
++ struct ip_conntrack_expect *, &expect->tuple,
++ &expect->mask)) {
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ DEBUGP("expect_related: busy!\n");
++ return -EBUSY;
++ }
++
++ new = (struct ip_conntrack_expect *)
++ kmalloc(sizeof(struct ip_conntrack_expect), GFP_ATOMIC);
++ if (!new) {
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ DEBUGP("expect_relaed: OOM allocating expect\n");
++ return -ENOMEM;
++ }
++
++ DEBUGP("new expectation %p of conntrack %p\n", new, related_to);
++ memcpy(new, expect, sizeof(*expect));
++ new->expectant = related_to;
++ new->sibling = NULL;
++ atomic_set(&new->use, 1);
++
++ /* add to expected list for this connection */
++ list_add_tail(&new->expected_list, &related_to->sibling_list);
++ /* add to global list of expectations */
++ list_prepend(&ip_conntrack_expect_list, &new->list);
++ /* add and start timer if required */
++ if (related_to->helper->timeout) {
++ init_timer(&new->timeout);
++ new->timeout.data = (unsigned long)new;
++ new->timeout.function = expectation_timed_out;
++ new->timeout.expires = jiffies +
++ related_to->helper->timeout * HZ;
++ add_timer(&new->timeout);
++ }
++ related_to->expecting++;
++
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ return ret;
++}
++
++/* Change tuple in an existing expectation */
++int ip_conntrack_change_expect(struct ip_conntrack_expect *expect,
++ struct ip_conntrack_tuple *newtuple)
++{
++ int ret;
++
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ WRITE_LOCK(&ip_conntrack_expect_tuple_lock);
++
++ DEBUGP("change_expect:\n");
++ DEBUGP("exp tuple: "); DUMP_TUPLE(&expect->tuple);
++ DEBUGP("exp mask: "); DUMP_TUPLE(&expect->mask);
++ DEBUGP("newtuple: "); DUMP_TUPLE(newtuple);
++ if (expect->ct_tuple.dst.protonum == 0) {
++ /* Never seen before */
++ DEBUGP("change expect: never seen before\n");
++ if (!ip_ct_tuple_equal(&expect->tuple, newtuple)
++ && LIST_FIND(&ip_conntrack_expect_list, expect_clash,
++ struct ip_conntrack_expect *, newtuple, &expect->mask)) {
++ /* Force NAT to find an unused tuple */
++ ret = -1;
++ } else {
++ memcpy(&expect->ct_tuple, &expect->tuple, sizeof(expect->tuple));
++ memcpy(&expect->tuple, newtuple, sizeof(expect->tuple));
++ ret = 0;
++ }
++ } else {
++ /* Resent packet */
++ DEBUGP("change expect: resent packet\n");
++ if (ip_ct_tuple_equal(&expect->tuple, newtuple)) {
++ ret = 0;
++ } else {
++ /* Force NAT to choose again the same port */
++ ret = -1;
++ }
++ }
++ WRITE_UNLOCK(&ip_conntrack_expect_tuple_lock);
++
++ return ret;
++}
++
++/* Alter reply tuple (maybe alter helper). If it's already taken,
++ return 0 and don't do alteration. */
++int ip_conntrack_alter_reply(struct ip_conntrack *conntrack,
++ const struct ip_conntrack_tuple *newreply)
++{
++ WRITE_LOCK(&ip_conntrack_lock);
++ if (__ip_conntrack_find(newreply, conntrack)) {
++ WRITE_UNLOCK(&ip_conntrack_lock);
++ return 0;
++ }
++ /* Should be unconfirmed, so not in hash table yet */
++ IP_NF_ASSERT(!is_confirmed(conntrack));
++
++ DEBUGP("Altering reply tuple of %p to ", conntrack);
++ DUMP_TUPLE(newreply);
++
++ conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = *newreply;
++ if (!conntrack->master && list_empty(&conntrack->sibling_list))
++ conntrack->helper = ip_ct_find_helper(newreply);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ return 1;
++}
++
++int ip_conntrack_helper_register(struct ip_conntrack_helper *me)
++{
++ MOD_INC_USE_COUNT;
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ list_prepend(&helpers, me);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ return 0;
++}
++
++static inline int unhelp(struct ip_conntrack_tuple_hash *i,
++ const struct ip_conntrack_helper *me)
++{
++ if (i->ctrack->helper == me) {
++ /* Get rid of any expected. */
++ remove_expectations(i->ctrack, 0);
++ /* And *then* set helper to NULL */
++ i->ctrack->helper = NULL;
++ }
++ return 0;
++}
++
++void ip_conntrack_helper_unregister(struct ip_conntrack_helper *me)
++{
++ unsigned int i;
++
++ /* Need write lock here, to delete helper. */
++ WRITE_LOCK(&ip_conntrack_lock);
++ LIST_DELETE(&helpers, me);
++
++ /* Get rid of expecteds, set helpers to NULL. */
++ for (i = 0; i < ip_conntrack_htable_size; i++)
++ LIST_FIND_W(&ip_conntrack_hash[i], unhelp,
++ struct ip_conntrack_tuple_hash *, me);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ /* Someone could be still looking at the helper in a bh. */
++ br_write_lock_bh(BR_NETPROTO_LOCK);
++ br_write_unlock_bh(BR_NETPROTO_LOCK);
++
++ MOD_DEC_USE_COUNT;
++}
++
++/* Refresh conntrack for this many jiffies. */
++void ip_ct_refresh(struct ip_conntrack *ct, unsigned long extra_jiffies)
++{
++ IP_NF_ASSERT(ct->timeout.data == (unsigned long)ct);
++
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* If not in hash table, timer will not be active yet */
++ if (!is_confirmed(ct))
++ ct->timeout.expires = extra_jiffies;
++ else {
++ /* Need del_timer for race avoidance (may already be dying). */
++ if (del_timer(&ct->timeout)) {
++ ct->timeout.expires = jiffies + extra_jiffies;
++ add_timer(&ct->timeout);
++ }
++ }
++ WRITE_UNLOCK(&ip_conntrack_lock);
++}
++
++/* Returns new sk_buff, or NULL */
++struct sk_buff *
++ip_ct_gather_frags(struct sk_buff *skb)
++{
++ struct sock *sk = skb->sk;
++#ifdef CONFIG_NETFILTER_DEBUG
++ unsigned int olddebug = skb->nf_debug;
++#endif
++ if (sk) {
++ sock_hold(sk);
++ skb_orphan(skb);
++ }
++
++ local_bh_disable();
++ skb = ip_defrag(skb);
++ local_bh_enable();
++
++ if (!skb) {
++ if (sk) sock_put(sk);
++ return skb;
++ } else if (skb_is_nonlinear(skb) && skb_linearize(skb, GFP_ATOMIC) != 0) {
++ kfree_skb(skb);
++ if (sk) sock_put(sk);
++ return NULL;
++ }
++
++ if (sk) {
++ skb_set_owner_w(skb, sk);
++ sock_put(sk);
++ }
++
++ ip_send_check(skb->nh.iph);
++ skb->nfcache |= NFC_ALTERED;
++#ifdef CONFIG_NETFILTER_DEBUG
++ /* Packet path as if nothing had happened. */
++ skb->nf_debug = olddebug;
++#endif
++ return skb;
++}
++
++/* Used by ipt_REJECT. */
++static void ip_conntrack_attach(struct sk_buff *nskb, struct nf_ct_info *nfct)
++{
++ struct ip_conntrack *ct;
++ enum ip_conntrack_info ctinfo;
++
++ ct = __ip_conntrack_get(nfct, &ctinfo);
++
++ /* This ICMP is in reverse direction to the packet which
++ caused it */
++ if (CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL)
++ ctinfo = IP_CT_RELATED + IP_CT_IS_REPLY;
++ else
++ ctinfo = IP_CT_RELATED;
++
++ /* Attach new skbuff, and increment count */
++ nskb->nfct = &ct->infos[ctinfo];
++ atomic_inc(&ct->ct_general.use);
++}
++
++static inline int
++do_kill(const struct ip_conntrack_tuple_hash *i,
++ int (*kill)(const struct ip_conntrack *i, void *data),
++ void *data)
++{
++ return kill(i->ctrack, data);
++}
++
++/* Bring out ya dead! */
++static struct ip_conntrack_tuple_hash *
++get_next_corpse(int (*kill)(const struct ip_conntrack *i, void *data),
++ void *data, unsigned int *bucket)
++{
++ struct ip_conntrack_tuple_hash *h = NULL;
++
++ READ_LOCK(&ip_conntrack_lock);
++ for (; !h && *bucket < ip_conntrack_htable_size; (*bucket)++) {
++ h = LIST_FIND(&ip_conntrack_hash[*bucket], do_kill,
++ struct ip_conntrack_tuple_hash *, kill, data);
++ }
++ if (h)
++ atomic_inc(&h->ctrack->ct_general.use);
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ return h;
++}
++
++void
++ip_ct_selective_cleanup(int (*kill)(const struct ip_conntrack *i, void *data),
++ void *data)
++{
++ struct ip_conntrack_tuple_hash *h;
++ unsigned int bucket = 0;
++
++ while ((h = get_next_corpse(kill, data, &bucket)) != NULL) {
++ /* Time to push up daises... */
++ if (del_timer(&h->ctrack->timeout))
++ death_by_timeout((unsigned long)h->ctrack);
++ /* ... else the timer will get him soon. */
++
++ ip_conntrack_put(h->ctrack);
++ }
++}
++
++/* Fast function for those who don't want to parse /proc (and I don't
++ blame them). */
++/* Reversing the socket's dst/src point of view gives us the reply
++ mapping. */
++static int
++getorigdst(struct sock *sk, int optval, void *user, int *len)
++{
++ struct ip_conntrack_tuple_hash *h;
++ struct ip_conntrack_tuple tuple;
++
++ IP_CT_TUPLE_U_BLANK(&tuple);
++ tuple.src.ip = sk->rcv_saddr;
++ tuple.src.u.tcp.port = sk->sport;
++ tuple.dst.ip = sk->daddr;
++ tuple.dst.u.tcp.port = sk->dport;
++ tuple.dst.protonum = IPPROTO_TCP;
++
++ /* We only do TCP at the moment: is there a better way? */
++ if (strcmp(sk->prot->name, "TCP") != 0) {
++ DEBUGP("SO_ORIGINAL_DST: Not a TCP socket\n");
++ return -ENOPROTOOPT;
++ }
++
++ if ((unsigned int) *len < sizeof(struct sockaddr_in)) {
++ DEBUGP("SO_ORIGINAL_DST: len %u not %u\n",
++ *len, sizeof(struct sockaddr_in));
++ return -EINVAL;
++ }
++
++ h = ip_conntrack_find_get(&tuple, NULL);
++ if (h) {
++ struct sockaddr_in sin;
++
++ sin.sin_family = AF_INET;
++ sin.sin_port = h->ctrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.dst.u.tcp.port;
++ sin.sin_addr.s_addr = h->ctrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.dst.ip;
++
++ DEBUGP("SO_ORIGINAL_DST: %u.%u.%u.%u %u\n",
++ NIPQUAD(sin.sin_addr.s_addr), ntohs(sin.sin_port));
++ ip_conntrack_put(h->ctrack);
++ if (copy_to_user(user, &sin, sizeof(sin)) != 0)
++ return -EFAULT;
++ else
++ return 0;
++ }
++ DEBUGP("SO_ORIGINAL_DST: Can't find %u.%u.%u.%u/%u-%u.%u.%u.%u/%u.\n",
++ NIPQUAD(tuple.src.ip), ntohs(tuple.src.u.tcp.port),
++ NIPQUAD(tuple.dst.ip), ntohs(tuple.dst.u.tcp.port));
++ return -ENOENT;
++}
++
++static struct nf_sockopt_ops so_getorigdst
++= { { NULL, NULL }, PF_INET,
++ 0, 0, NULL, /* Setsockopts */
++ SO_ORIGINAL_DST, SO_ORIGINAL_DST+1, &getorigdst,
++ 0, NULL };
++
++static int kill_all(const struct ip_conntrack *i, void *data)
++{
++ return 1;
++}
++
++/* Mishearing the voices in his head, our hero wonders how he's
++ supposed to kill the mall. */
++void ip_conntrack_cleanup(void)
++{
++ ip_ct_attach = NULL;
++ /* This makes sure all current packets have passed through
++ netfilter framework. Roll on, two-stage module
++ delete... */
++ br_write_lock_bh(BR_NETPROTO_LOCK);
++ br_write_unlock_bh(BR_NETPROTO_LOCK);
++
++ i_see_dead_people:
++ ip_ct_selective_cleanup(kill_all, NULL);
++ if (atomic_read(&ip_conntrack_count) != 0) {
++ schedule();
++ goto i_see_dead_people;
++ }
++
++ kmem_cache_destroy(ip_conntrack_cachep);
++ vfree(ip_conntrack_hash);
++ nf_unregister_sockopt(&so_getorigdst);
++}
++
++static int hashsize = 0;
++MODULE_PARM(hashsize, "i");
++
++int __init ip_conntrack_init(void)
++{
++ unsigned int i;
++ int ret;
++
++ /* Idea from tcp.c: use 1/16384 of memory. On i386: 32MB
++ * machine has 256 buckets. >= 1GB machines have 8192 buckets. */
++ if (hashsize) {
++ ip_conntrack_htable_size = hashsize;
++ } else {
++ ip_conntrack_htable_size
++ = (((num_physpages << PAGE_SHIFT) / 16384)
++ / sizeof(struct list_head));
++ if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))
++ ip_conntrack_htable_size = 8192;
++ if (ip_conntrack_htable_size < 16)
++ ip_conntrack_htable_size = 16;
++ }
++ ip_conntrack_max = 8 * ip_conntrack_htable_size;
++
++ printk("ip_conntrack version %s (%u buckets, %d max)"
++ " - %Zd bytes per conntrack\n", IP_CONNTRACK_VERSION,
++ ip_conntrack_htable_size, ip_conntrack_max,
++ sizeof(struct ip_conntrack));
++
++ ret = nf_register_sockopt(&so_getorigdst);
++ if (ret != 0) {
++ printk(KERN_ERR "Unable to register netfilter socket option\n");
++ return ret;
++ }
++
++ ip_conntrack_hash = vmalloc(sizeof(struct list_head)
++ * ip_conntrack_htable_size);
++ if (!ip_conntrack_hash) {
++ printk(KERN_ERR "Unable to create ip_conntrack_hash\n");
++ goto err_unreg_sockopt;
++ }
++
++ ip_conntrack_cachep = kmem_cache_create("ip_conntrack",
++ sizeof(struct ip_conntrack), 0,
++ SLAB_HWCACHE_ALIGN, NULL, NULL);
++ if (!ip_conntrack_cachep) {
++ printk(KERN_ERR "Unable to create ip_conntrack slab cache\n");
++ goto err_free_hash;
++ }
++ /* Don't NEED lock here, but good form anyway. */
++ WRITE_LOCK(&ip_conntrack_lock);
++ /* Sew in builtin protocols. */
++ list_append(&protocol_list, &ip_conntrack_protocol_tcp);
++ list_append(&protocol_list, &ip_conntrack_protocol_udp);
++ list_append(&protocol_list, &ip_conntrack_protocol_icmp);
++ WRITE_UNLOCK(&ip_conntrack_lock);
++
++ for (i = 0; i < ip_conntrack_htable_size; i++)
++ INIT_LIST_HEAD(&ip_conntrack_hash[i]);
++
++ /* For use by ipt_REJECT */
++ ip_ct_attach = ip_conntrack_attach;
++ return ret;
++
++err_free_hash:
++ vfree(ip_conntrack_hash);
++err_unreg_sockopt:
++ nf_unregister_sockopt(&so_getorigdst);
++
++ return -ENOMEM;
++}
+diff -uNr linux_org/net/ipv4/netfilter/ip_conntrack_pptp.c linux/net/ipv4/netfilter/ip_conntrack_pptp.c
+--- linux_org/net/ipv4/netfilter/ip_conntrack_pptp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_conntrack_pptp.c 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,637 @@
++/*
++ * ip_conntrack_pptp.c - Version 1.9
++ *
++ * Connection tracking support for PPTP (Point to Point Tunneling Protocol).
++ * PPTP is a a protocol for creating virtual private networks.
++ * It is a specification defined by Microsoft and some vendors
++ * working with Microsoft. PPTP is built on top of a modified
++ * version of the Internet Generic Routing Encapsulation Protocol.
++ * GRE is defined in RFC 1701 and RFC 1702. Documentation of
++ * PPTP can be found in RFC 2637
++ *
++ * (C) 2000-2003 by Harald Welte <laforge@gnumonks.org>
++ *
++ * Development of this code funded by Astaro AG (http://www.astaro.com/)
++ *
++ * Limitations:
++ * - We blindly assume that control connections are always
++ * established in PNS->PAC direction. This is a violation
++ * of RFFC2673
++ *
++ * TODO: - finish support for multiple calls within one session
++ * (needs expect reservations in newnat)
++ * - testing of incoming PPTP calls
++ *
++ * Changes:
++ * 2002-02-05 - Version 1.3
++ * - Call ip_conntrack_unexpect_related() from
++ * pptp_timeout_related() to destroy expectations in case
++ * CALL_DISCONNECT_NOTIFY or tcp fin packet was seen
++ * (Philip Craig <philipc@snapgear.com>)
++ * - Add Version information at module loadtime
++ * 2002-02-10 - Version 1.6
++ * - move to C99 style initializers
++ * - remove second expectation if first arrives
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/netfilter.h>
++#include <linux/ip.h>
++#include <net/checksum.h>
++#include <net/tcp.h>
++
++#include <linux/netfilter_ipv4/lockhelp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
++#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
++
++#define IP_CT_PPTP_VERSION "1.9"
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("Netfilter connection tracking helper module for PPTP");
++
++DECLARE_LOCK(ip_pptp_lock);
++
++#if 0
++#include "ip_conntrack_pptp_priv.h"
++#define DEBUGP(format, args...) printk(KERN_DEBUG __FILE__ ":" __FUNCTION__ \
++ ": " format, ## args)
++#else
++#define DEBUGP(format, args...)
++#endif
++
++#define SECS *HZ
++#define MINS * 60 SECS
++#define HOURS * 60 MINS
++#define DAYS * 24 HOURS
++
++#define PPTP_GRE_TIMEOUT (10 MINS)
++#define PPTP_GRE_STREAM_TIMEOUT (5 DAYS)
++
++static int pptp_expectfn(struct ip_conntrack *ct)
++{
++ struct ip_conntrack *master;
++ struct ip_conntrack_expect *exp;
++
++ DEBUGP("increasing timeouts\n");
++ /* increase timeout of GRE data channel conntrack entry */
++ ct->proto.gre.timeout = PPTP_GRE_TIMEOUT;
++ ct->proto.gre.stream_timeout = PPTP_GRE_STREAM_TIMEOUT;
++
++ master = master_ct(ct);
++ if (!master) {
++ DEBUGP(" no master!!!\n");
++ return 0;
++ }
++
++ exp = ct->master;
++ if (!exp) {
++ DEBUGP("no expectation!!\n");
++ return 0;
++ }
++
++ DEBUGP("completing tuples with ct info\n");
++ /* we can do this, since we're unconfirmed */
++ if (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.gre.key ==
++ htonl(master->help.ct_pptp_info.pac_call_id)) {
++ /* assume PNS->PAC */
++ ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.gre.key =
++ htonl(master->help.ct_pptp_info.pns_call_id);
++ ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.gre.key =
++ htonl(master->help.ct_pptp_info.pns_call_id);
++ } else {
++ /* assume PAC->PNS */
++ ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.gre.key =
++ htonl(master->help.ct_pptp_info.pac_call_id);
++ ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.gre.key =
++ htonl(master->help.ct_pptp_info.pac_call_id);
++ }
++
++ /* delete other expectation */
++ if (exp->expected_list.next != &exp->expected_list) {
++ struct ip_conntrack_expect *other_exp;
++ struct list_head *cur_item, *next;
++
++ for (cur_item = master->sibling_list.next;
++ cur_item != &master->sibling_list; cur_item = next) {
++ next = cur_item->next;
++ other_exp = list_entry(cur_item,
++ struct ip_conntrack_expect,
++ expected_list);
++ /* remove only if occurred at same sequence number */
++ if (other_exp != exp && other_exp->seq == exp->seq) {
++ DEBUGP("unexpecting other direction\n");
++ ip_ct_gre_keymap_destroy(other_exp);
++ ip_conntrack_unexpect_related(other_exp);
++ }
++ }
++ }
++
++ return 0;
++}
++
++/* timeout GRE data connections */
++static int pptp_timeout_related(struct ip_conntrack *ct)
++{
++ struct list_head *cur_item, *next;
++ struct ip_conntrack_expect *exp;
++
++ /* FIXME: do we have to lock something ? */
++ for (cur_item = ct->sibling_list.next;
++ cur_item != &ct->sibling_list; cur_item = next) {
++ next = cur_item->next;
++ exp = list_entry(cur_item, struct ip_conntrack_expect,
++ expected_list);
++
++ ip_ct_gre_keymap_destroy(exp);
++ if (!exp->sibling) {
++ ip_conntrack_unexpect_related(exp);
++ continue;
++ }
++
++ DEBUGP("setting timeout of conntrack %p to 0\n",
++ exp->sibling);
++ exp->sibling->proto.gre.timeout = 0;
++ exp->sibling->proto.gre.stream_timeout = 0;
++ ip_ct_refresh(exp->sibling, 0);
++ }
++
++ return 0;
++}
++
++/* expect GRE connections (PNS->PAC and PAC->PNS direction) */
++static inline int
++exp_gre(struct ip_conntrack *master,
++ u_int32_t seq,
++ u_int16_t callid,
++ u_int16_t peer_callid)
++{
++ struct ip_conntrack_expect exp;
++ struct ip_conntrack_tuple inv_tuple;
++
++ memset(&exp, 0, sizeof(exp));
++ /* tuple in original direction, PNS->PAC */
++ exp.tuple.src.ip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip;
++ exp.tuple.src.u.gre.key = htonl(ntohs(peer_callid));
++ exp.tuple.dst.ip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip;
++ exp.tuple.dst.u.gre.key = htonl(ntohs(callid));
++ exp.tuple.dst.u.gre.protocol = __constant_htons(GRE_PROTOCOL_PPTP);
++ exp.tuple.dst.u.gre.version = GRE_VERSION_PPTP;
++ exp.tuple.dst.protonum = IPPROTO_GRE;
++
++ exp.mask.src.ip = 0xffffffff;
++ exp.mask.src.u.all = 0;
++ exp.mask.dst.u.all = 0;
++ exp.mask.dst.u.gre.key = 0xffffffff;
++ exp.mask.dst.u.gre.version = 0xff;
++ exp.mask.dst.u.gre.protocol = 0xffff;
++ exp.mask.dst.ip = 0xffffffff;
++ exp.mask.dst.protonum = 0xffff;
++
++ exp.seq = seq;
++ exp.expectfn = pptp_expectfn;
++
++ exp.help.exp_pptp_info.pac_call_id = ntohs(callid);
++ exp.help.exp_pptp_info.pns_call_id = ntohs(peer_callid);
++
++ DEBUGP("calling expect_related ");
++ DUMP_TUPLE_RAW(&exp.tuple);
++
++ /* Add GRE keymap entries */
++ if (ip_ct_gre_keymap_add(&exp, &exp.tuple, 0) != 0)
++ return 1;
++
++ invert_tuplepr(&inv_tuple, &exp.tuple);
++ if (ip_ct_gre_keymap_add(&exp, &inv_tuple, 1) != 0) {
++ ip_ct_gre_keymap_destroy(&exp);
++ return 1;
++ }
++
++ if (ip_conntrack_expect_related(master, &exp) != 0) {
++ ip_ct_gre_keymap_destroy(&exp);
++ DEBUGP("cannot expect_related()\n");
++ return 1;
++ }
++
++ /* tuple in reply direction, PAC->PNS */
++ exp.tuple.src.ip = master->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip;
++ exp.tuple.src.u.gre.key = htonl(ntohs(callid));
++ exp.tuple.dst.ip = master->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip;
++ exp.tuple.dst.u.gre.key = htonl(ntohs(peer_callid));
++
++ DEBUGP("calling expect_related ");
++ DUMP_TUPLE_RAW(&exp.tuple);
++
++ /* Add GRE keymap entries */
++ ip_ct_gre_keymap_add(&exp, &exp.tuple, 0);
++ invert_tuplepr(&inv_tuple, &exp.tuple);
++ ip_ct_gre_keymap_add(&exp, &inv_tuple, 1);
++ /* FIXME: cannot handle error correctly, since we need to free
++ * the above keymap :( */
++
++ if (ip_conntrack_expect_related(master, &exp) != 0) {
++ /* free the second pair of keypmaps */
++ ip_ct_gre_keymap_destroy(&exp);
++ DEBUGP("cannot expect_related():\n");
++ return 1;
++ }
++
++ return 0;
++}
++
++static inline int
++pptp_inbound_pkt(struct tcphdr *tcph,
++ struct pptp_pkt_hdr *pptph,
++ size_t datalen,
++ struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo)
++{
++ struct PptpControlHeader *ctlh;
++ union pptp_ctrl_union pptpReq;
++
++ struct ip_ct_pptp_master *info = &ct->help.ct_pptp_info;
++ u_int16_t msg, *cid, *pcid;
++ u_int32_t seq;
++
++ ctlh = (struct PptpControlHeader *)
++ ((char *) pptph + sizeof(struct pptp_pkt_hdr));
++ pptpReq.rawreq = (void *)
++ ((char *) ctlh + sizeof(struct PptpControlHeader));
++
++ msg = ntohs(ctlh->messageType);
++ DEBUGP("inbound control message %s\n", strMName[msg]);
++
++ switch (msg) {
++ case PPTP_START_SESSION_REPLY:
++ /* server confirms new control session */
++ if (info->sstate < PPTP_SESSION_REQUESTED) {
++ DEBUGP("%s without START_SESS_REQUEST\n",
++ strMName[msg]);
++ break;
++ }
++ if (pptpReq.srep->resultCode == PPTP_START_OK)
++ info->sstate = PPTP_SESSION_CONFIRMED;
++ else
++ info->sstate = PPTP_SESSION_ERROR;
++ break;
++
++ case PPTP_STOP_SESSION_REPLY:
++ /* server confirms end of control session */
++ if (info->sstate > PPTP_SESSION_STOPREQ) {
++ DEBUGP("%s without STOP_SESS_REQUEST\n",
++ strMName[msg]);
++ break;
++ }
++ if (pptpReq.strep->resultCode == PPTP_STOP_OK)
++ info->sstate = PPTP_SESSION_NONE;
++ else
++ info->sstate = PPTP_SESSION_ERROR;
++ break;
++
++ case PPTP_OUT_CALL_REPLY:
++ /* server accepted call, we now expect GRE frames */
++ if (info->sstate != PPTP_SESSION_CONFIRMED) {
++ DEBUGP("%s but no session\n", strMName[msg]);
++ break;
++ }
++ if (info->cstate != PPTP_CALL_OUT_REQ &&
++ info->cstate != PPTP_CALL_OUT_CONF) {
++ DEBUGP("%s without OUTCALL_REQ\n", strMName[msg]);
++ break;
++ }
++ if (pptpReq.ocack->resultCode != PPTP_OUTCALL_CONNECT) {
++ info->cstate = PPTP_CALL_NONE;
++ break;
++ }
++
++ cid = &pptpReq.ocack->callID;
++ pcid = &pptpReq.ocack->peersCallID;
++
++ info->pac_call_id = ntohs(*cid);
++
++ if (htons(info->pns_call_id) != *pcid) {
++ DEBUGP("%s for unknown callid %u\n",
++ strMName[msg], ntohs(*pcid));
++ break;
++ }
++
++ DEBUGP("%s, CID=%X, PCID=%X\n", strMName[msg],
++ ntohs(*cid), ntohs(*pcid));
++
++ info->cstate = PPTP_CALL_OUT_CONF;
++
++ seq = ntohl(tcph->seq) + ((void *)pcid - (void *)pptph);
++ if (exp_gre(ct, seq, *cid, *pcid) != 0)
++ printk("ip_conntrack_pptp: error during exp_gre\n");
++ break;
++
++ case PPTP_IN_CALL_REQUEST:
++ /* server tells us about incoming call request */
++ if (info->sstate != PPTP_SESSION_CONFIRMED) {
++ DEBUGP("%s but no session\n", strMName[msg]);
++ break;
++ }
++ pcid = &pptpReq.icack->peersCallID;
++ DEBUGP("%s, PCID=%X\n", strMName[msg], ntohs(*pcid));
++ info->cstate = PPTP_CALL_IN_REQ;
++ info->pac_call_id= ntohs(*pcid);
++ break;
++
++ case PPTP_IN_CALL_CONNECT:
++ /* server tells us about incoming call established */
++ if (info->sstate != PPTP_SESSION_CONFIRMED) {
++ DEBUGP("%s but no session\n", strMName[msg]);
++ break;
++ }
++ if (info->sstate != PPTP_CALL_IN_REP
++ && info->sstate != PPTP_CALL_IN_CONF) {
++ DEBUGP("%s but never sent IN_CALL_REPLY\n",
++ strMName[msg]);
++ break;
++ }
++
++ pcid = &pptpReq.iccon->peersCallID;
++ cid = &info->pac_call_id;
++
++ if (info->pns_call_id != ntohs(*pcid)) {
++ DEBUGP("%s for unknown CallID %u\n",
++ strMName[msg], ntohs(*cid));
++ break;
++ }
++
++ DEBUGP("%s, PCID=%X\n", strMName[msg], ntohs(*pcid));
++ info->cstate = PPTP_CALL_IN_CONF;
++
++ /* we expect a GRE connection from PAC to PNS */
++ seq = ntohl(tcph->seq) + ((void *)pcid - (void *)pptph);
++ if (exp_gre(ct, seq, *cid, *pcid) != 0)
++ printk("ip_conntrack_pptp: error during exp_gre\n");
++
++ break;
++
++ case PPTP_CALL_DISCONNECT_NOTIFY:
++ /* server confirms disconnect */
++ cid = &pptpReq.disc->callID;
++ DEBUGP("%s, CID=%X\n", strMName[msg], ntohs(*cid));
++ info->cstate = PPTP_CALL_NONE;
++
++ /* untrack this call id, unexpect GRE packets */
++ pptp_timeout_related(ct);
++ break;
++
++ case PPTP_WAN_ERROR_NOTIFY:
++ break;
++
++ case PPTP_ECHO_REQUEST:
++ case PPTP_ECHO_REPLY:
++ /* I don't have to explain these ;) */
++ break;
++ default:
++ DEBUGP("invalid %s (TY=%d)\n", (msg <= PPTP_MSG_MAX)
++ ? strMName[msg]:strMName[0], msg);
++ break;
++ }
++
++ return NF_ACCEPT;
++
++}
++
++static inline int
++pptp_outbound_pkt(struct tcphdr *tcph,
++ struct pptp_pkt_hdr *pptph,
++ size_t datalen,
++ struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo)
++{
++ struct PptpControlHeader *ctlh;
++ union pptp_ctrl_union pptpReq;
++ struct ip_ct_pptp_master *info = &ct->help.ct_pptp_info;
++ u_int16_t msg, *cid, *pcid;
++
++ ctlh = (struct PptpControlHeader *) ((void *) pptph + sizeof(*pptph));
++ pptpReq.rawreq = (void *) ((void *) ctlh + sizeof(*ctlh));
++
++ msg = ntohs(ctlh->messageType);
++ DEBUGP("outbound control message %s\n", strMName[msg]);
++
++ switch (msg) {
++ case PPTP_START_SESSION_REQUEST:
++ /* client requests for new control session */
++ if (info->sstate != PPTP_SESSION_NONE) {
++ DEBUGP("%s but we already have one",
++ strMName[msg]);
++ }
++ info->sstate = PPTP_SESSION_REQUESTED;
++ break;
++ case PPTP_STOP_SESSION_REQUEST:
++ /* client requests end of control session */
++ info->sstate = PPTP_SESSION_STOPREQ;
++ break;
++
++ case PPTP_OUT_CALL_REQUEST:
++ /* client initiating connection to server */
++ if (info->sstate != PPTP_SESSION_CONFIRMED) {
++ DEBUGP("%s but no session\n",
++ strMName[msg]);
++ break;
++ }
++ info->cstate = PPTP_CALL_OUT_REQ;
++ /* track PNS call id */
++ cid = &pptpReq.ocreq->callID;
++ DEBUGP("%s, CID=%X\n", strMName[msg], ntohs(*cid));
++ info->pns_call_id = ntohs(*cid);
++ break;
++ case PPTP_IN_CALL_REPLY:
++ /* client answers incoming call */
++ if (info->cstate != PPTP_CALL_IN_REQ
++ && info->cstate != PPTP_CALL_IN_REP) {
++ DEBUGP("%s without incall_req\n",
++ strMName[msg]);
++ break;
++ }
++ if (pptpReq.icack->resultCode != PPTP_INCALL_ACCEPT) {
++ info->cstate = PPTP_CALL_NONE;
++ break;
++ }
++ pcid = &pptpReq.icack->peersCallID;
++ if (info->pac_call_id != ntohs(*pcid)) {
++ DEBUGP("%s for unknown call %u\n",
++ strMName[msg], ntohs(*pcid));
++ break;
++ }
++ DEBUGP("%s, CID=%X\n", strMName[msg], ntohs(*pcid));
++ /* part two of the three-way handshake */
++ info->cstate = PPTP_CALL_IN_REP;
++ info->pns_call_id = ntohs(pptpReq.icack->callID);
++ break;
++
++ case PPTP_CALL_CLEAR_REQUEST:
++ /* client requests hangup of call */
++ if (info->sstate != PPTP_SESSION_CONFIRMED) {
++ DEBUGP("CLEAR_CALL but no session\n");
++ break;
++ }
++ /* FUTURE: iterate over all calls and check if
++ * call ID is valid. We don't do this without newnat,
++ * because we only know about last call */
++ info->cstate = PPTP_CALL_CLEAR_REQ;
++ break;
++ case PPTP_SET_LINK_INFO:
++ break;
++ case PPTP_ECHO_REQUEST:
++ case PPTP_ECHO_REPLY:
++ /* I don't have to explain these ;) */
++ break;
++ default:
++ DEBUGP("invalid %s (TY=%d)\n", (msg <= PPTP_MSG_MAX)?
++ strMName[msg]:strMName[0], msg);
++ /* unknown: no need to create GRE masq table entry */
++ break;
++ }
++
++ return NF_ACCEPT;
++}
++
++
++/* track caller id inside control connection, call expect_related */
++static int
++conntrack_pptp_help(const struct iphdr *iph, size_t len,
++ struct ip_conntrack *ct, enum ip_conntrack_info ctinfo)
++
++{
++ struct pptp_pkt_hdr *pptph;
++
++ struct tcphdr *tcph = (void *) iph + iph->ihl * 4;
++ u_int32_t tcplen = len - iph->ihl * 4;
++ u_int32_t datalen = tcplen - tcph->doff * 4;
++ void *datalimit;
++ int dir = CTINFO2DIR(ctinfo);
++ struct ip_ct_pptp_master *info = &ct->help.ct_pptp_info;
++
++ int oldsstate, oldcstate;
++ int ret;
++
++ /* don't do any tracking before tcp handshake complete */
++ if (ctinfo != IP_CT_ESTABLISHED
++ && ctinfo != IP_CT_ESTABLISHED+IP_CT_IS_REPLY) {
++ DEBUGP("ctinfo = %u, skipping\n", ctinfo);
++ return NF_ACCEPT;
++ }
++
++ /* not a complete TCP header? */
++ if (tcplen < sizeof(struct tcphdr) || tcplen < tcph->doff * 4) {
++ DEBUGP("tcplen = %u\n", tcplen);
++ return NF_ACCEPT;
++ }
++
++ /* checksum invalid? */
++ if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
++ csum_partial((char *) tcph, tcplen, 0))) {
++ printk(KERN_NOTICE __FILE__ ": bad csum\n");
++ /* W2K PPTP server sends TCP packets with wrong checksum :(( */
++ //return NF_ACCEPT;
++ }
++
++ if (tcph->fin || tcph->rst) {
++ DEBUGP("RST/FIN received, timeouting GRE\n");
++ /* can't do this after real newnat */
++ info->cstate = PPTP_CALL_NONE;
++
++ /* untrack this call id, unexpect GRE packets */
++ pptp_timeout_related(ct);
++ }
++
++
++ pptph = (struct pptp_pkt_hdr *) ((void *) tcph + tcph->doff * 4);
++ datalimit = (void *) pptph + datalen;
++
++ /* not a full pptp packet header? */
++ if ((void *) pptph+sizeof(*pptph) >= datalimit) {
++ DEBUGP("no full PPTP header, can't track\n");
++ return NF_ACCEPT;
++ }
++
++ /* if it's not a control message we can't do anything with it */
++ if (ntohs(pptph->packetType) != PPTP_PACKET_CONTROL ||
++ ntohl(pptph->magicCookie) != PPTP_MAGIC_COOKIE) {
++ DEBUGP("not a control packet\n");
++ return NF_ACCEPT;
++ }
++
++ oldsstate = info->sstate;
++ oldcstate = info->cstate;
++
++ LOCK_BH(&ip_pptp_lock);
++
++ /* FIXME: We just blindly assume that the control connection is always
++ * established from PNS->PAC. However, RFC makes no guarantee */
++ if (dir == IP_CT_DIR_ORIGINAL)
++ /* client -> server (PNS -> PAC) */
++ ret = pptp_outbound_pkt(tcph, pptph, datalen, ct, ctinfo);
++ else
++ /* server -> client (PAC -> PNS) */
++ ret = pptp_inbound_pkt(tcph, pptph, datalen, ct, ctinfo);
++ DEBUGP("sstate: %d->%d, cstate: %d->%d\n",
++ oldsstate, info->sstate, oldcstate, info->cstate);
++ UNLOCK_BH(&ip_pptp_lock);
++
++ return ret;
++}
++
++/* control protocol helper */
++static struct ip_conntrack_helper pptp = {
++ .list = { NULL, NULL },
++ .name = "pptp",
++ .flags = IP_CT_HELPER_F_REUSE_EXPECT,
++ .me = THIS_MODULE,
++ .max_expected = 2,
++ .timeout = 0,
++ .tuple = { .src = { .ip = 0,
++ .u = { .tcp = { .port =
++ __constant_htons(PPTP_CONTROL_PORT) } }
++ },
++ .dst = { .ip = 0,
++ .u = { .all = 0 },
++ .protonum = IPPROTO_TCP
++ }
++ },
++ .mask = { .src = { .ip = 0,
++ .u = { .tcp = { .port = 0xffff } }
++ },
++ .dst = { .ip = 0,
++ .u = { .all = 0 },
++ .protonum = 0xffff
++ }
++ },
++ .help = conntrack_pptp_help
++};
++
++/* ip_conntrack_pptp initialization */
++static int __init init(void)
++{
++ int retcode;
++
++ DEBUGP(__FILE__ ": registering helper\n");
++ if ((retcode = ip_conntrack_helper_register(&pptp))) {
++ printk(KERN_ERR "Unable to register conntrack application "
++ "helper for pptp: %d\n", retcode);
++ return -EIO;
++ }
++
++ printk("ip_conntrack_pptp version %s loaded\n", IP_CT_PPTP_VERSION);
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ip_conntrack_helper_unregister(&pptp);
++ printk("ip_conntrack_pptp version %s unloaded\n", IP_CT_PPTP_VERSION);
++}
++
++module_init(init);
++module_exit(fini);
++
++EXPORT_SYMBOL(ip_pptp_lock);
+diff -uNr linux_org/net/ipv4/netfilter/ip_conntrack_pptp_priv.h linux/net/ipv4/netfilter/ip_conntrack_pptp_priv.h
+--- linux_org/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,24 @@
++#ifndef _IP_CT_PPTP_PRIV_H
++#define _IP_CT_PPTP_PRIV_H
++
++/* PptpControlMessageType names */
++static const char *strMName[] = {
++ "UNKNOWN_MESSAGE",
++ "START_SESSION_REQUEST",
++ "START_SESSION_REPLY",
++ "STOP_SESSION_REQUEST",
++ "STOP_SESSION_REPLY",
++ "ECHO_REQUEST",
++ "ECHO_REPLY",
++ "OUT_CALL_REQUEST",
++ "OUT_CALL_REPLY",
++ "IN_CALL_REQUEST",
++ "IN_CALL_REPLY",
++ "IN_CALL_CONNECT",
++ "CALL_CLEAR_REQUEST",
++ "CALL_DISCONNECT_NOTIFY",
++ "WAN_ERROR_NOTIFY",
++ "SET_LINK_INFO"
++};
++
++#endif
+diff -uNr linux_org/net/ipv4/netfilter/ip_conntrack_proto_gre.c linux/net/ipv4/netfilter/ip_conntrack_proto_gre.c
+--- linux_org/net/ipv4/netfilter/ip_conntrack_proto_gre.c 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,343 @@
++/*
++ * ip_conntrack_proto_gre.c - Version 1.2
++ *
++ * Connection tracking protocol helper module for GRE.
++ *
++ * GRE is a generic encapsulation protocol, which is generally not very
++ * suited for NAT, as it has no protocol-specific part as port numbers.
++ *
++ * It has an optional key field, which may help us distinguishing two
++ * connections between the same two hosts.
++ *
++ * GRE is defined in RFC 1701 and RFC 1702, as well as RFC 2784
++ *
++ * PPTP is built on top of a modified version of GRE, and has a mandatory
++ * field called "CallID", which serves us for the same purpose as the key
++ * field in plain GRE.
++ *
++ * Documentation about PPTP can be found in RFC 2637
++ *
++ * (C) 2000-2003 by Harald Welte <laforge@gnumonks.org>
++ *
++ * Development of this code funded by Astaro AG (http://www.astaro.com/)
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/timer.h>
++#include <linux/netfilter.h>
++#include <linux/ip.h>
++#include <linux/in.h>
++#include <linux/list.h>
++
++#include <linux/netfilter_ipv4/lockhelp.h>
++
++DECLARE_RWLOCK(ip_ct_gre_lock);
++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_ct_gre_lock)
++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_ct_gre_lock)
++
++#include <linux/netfilter_ipv4/listhelp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
++#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
++#include <linux/netfilter_ipv4/ip_conntrack_core.h>
++
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
++#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("netfilter connection tracking protocol helper for GRE");
++
++/* shamelessly stolen from ip_conntrack_proto_udp.c */
++#define GRE_TIMEOUT (30*HZ)
++#define GRE_STREAM_TIMEOUT (180*HZ)
++
++#if 0
++#define DEBUGP(format, args...) printk(KERN_DEBUG __FILE__ ":" __FUNCTION__ \
++ ": " format, ## args)
++#define DUMP_TUPLE_GRE(x) printk("%u.%u.%u.%u:0x%x -> %u.%u.%u.%u:0x%x:%u:0x%x\n", \
++ NIPQUAD((x)->src.ip), ntohl((x)->src.u.gre.key), \
++ NIPQUAD((x)->dst.ip), ntohl((x)->dst.u.gre.key), \
++ (x)->dst.u.gre.version, \
++ ntohs((x)->dst.u.gre.protocol))
++#else
++#define DEBUGP(x, args...)
++#define DUMP_TUPLE_GRE(x)
++#endif
++
++/* GRE KEYMAP HANDLING FUNCTIONS */
++static LIST_HEAD(gre_keymap_list);
++
++static inline int gre_key_cmpfn(const struct ip_ct_gre_keymap *km,
++ const struct ip_conntrack_tuple *t)
++{
++ return ((km->tuple.src.ip == t->src.ip) &&
++ (km->tuple.dst.ip == t->dst.ip) &&
++ (km->tuple.dst.protonum == t->dst.protonum) &&
++ (km->tuple.dst.u.all == t->dst.u.all));
++}
++
++/* look up the source key for a given tuple */
++static u_int32_t gre_keymap_lookup(struct ip_conntrack_tuple *t)
++{
++ struct ip_ct_gre_keymap *km;
++ u_int32_t key;
++
++ READ_LOCK(&ip_ct_gre_lock);
++ km = LIST_FIND(&gre_keymap_list, gre_key_cmpfn,
++ struct ip_ct_gre_keymap *, t);
++ if (!km) {
++ READ_UNLOCK(&ip_ct_gre_lock);
++ return 0;
++ }
++
++ key = km->tuple.src.u.gre.key;
++ READ_UNLOCK(&ip_ct_gre_lock);
++
++ return key;
++}
++
++/* add a single keymap entry, associate with specified expect */
++int ip_ct_gre_keymap_add(struct ip_conntrack_expect *exp,
++ struct ip_conntrack_tuple *t, int reply)
++{
++ struct ip_ct_gre_keymap *km;
++
++ km = kmalloc(sizeof(*km), GFP_ATOMIC);
++ if (!km)
++ return -1;
++
++ /* initializing list head should be sufficient */
++ memset(km, 0, sizeof(*km));
++
++ memcpy(&km->tuple, t, sizeof(*t));
++
++ if (!reply)
++ exp->proto.gre.keymap_orig = km;
++ else
++ exp->proto.gre.keymap_reply = km;
++
++ DEBUGP("adding new entry %p: ", km);
++ DUMP_TUPLE_GRE(&km->tuple);
++
++ WRITE_LOCK(&ip_ct_gre_lock);
++ list_append(&gre_keymap_list, km);
++ WRITE_UNLOCK(&ip_ct_gre_lock);
++
++ return 0;
++}
++
++/* change the tuple of a keymap entry (used by nat helper) */
++void ip_ct_gre_keymap_change(struct ip_ct_gre_keymap *km,
++ struct ip_conntrack_tuple *t)
++{
++ DEBUGP("changing entry %p to: ", km);
++ DUMP_TUPLE_GRE(t);
++
++ WRITE_LOCK(&ip_ct_gre_lock);
++ memcpy(&km->tuple, t, sizeof(km->tuple));
++ WRITE_UNLOCK(&ip_ct_gre_lock);
++}
++
++/* destroy the keymap entries associated with specified expect */
++void ip_ct_gre_keymap_destroy(struct ip_conntrack_expect *exp)
++{
++ DEBUGP("entering for exp %p\n", exp);
++ WRITE_LOCK(&ip_ct_gre_lock);
++ if (exp->proto.gre.keymap_orig) {
++ DEBUGP("removing %p from list\n", exp->proto.gre.keymap_orig);
++ list_del(&exp->proto.gre.keymap_orig->list);
++ kfree(exp->proto.gre.keymap_orig);
++ exp->proto.gre.keymap_orig = NULL;
++ }
++ if (exp->proto.gre.keymap_reply) {
++ DEBUGP("removing %p from list\n", exp->proto.gre.keymap_reply);
++ list_del(&exp->proto.gre.keymap_reply->list);
++ kfree(exp->proto.gre.keymap_reply);
++ exp->proto.gre.keymap_reply = NULL;
++ }
++ WRITE_UNLOCK(&ip_ct_gre_lock);
++}
++
++
++/* PUBLIC CONNTRACK PROTO HELPER FUNCTIONS */
++
++/* invert gre part of tuple */
++static int gre_invert_tuple(struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_tuple *orig)
++{
++ tuple->dst.u.gre.protocol = orig->dst.u.gre.protocol;
++ tuple->dst.u.gre.version = orig->dst.u.gre.version;
++
++ tuple->dst.u.gre.key = orig->src.u.gre.key;
++ tuple->src.u.gre.key = orig->dst.u.gre.key;
++
++ return 1;
++}
++
++/* gre hdr info to tuple */
++static int gre_pkt_to_tuple(const void *datah, size_t datalen,
++ struct ip_conntrack_tuple *tuple)
++{
++ struct gre_hdr *grehdr = (struct gre_hdr *) datah;
++ struct gre_hdr_pptp *pgrehdr = (struct gre_hdr_pptp *) datah;
++ u_int32_t srckey;
++
++ /* core guarantees 8 protocol bytes, no need for size check */
++
++ tuple->dst.u.gre.version = grehdr->version;
++ tuple->dst.u.gre.protocol = grehdr->protocol;
++
++ switch (grehdr->version) {
++ case GRE_VERSION_1701:
++ if (!grehdr->key) {
++ DEBUGP("Can't track GRE without key\n");
++ return 0;
++ }
++ tuple->dst.u.gre.key = *(gre_key(grehdr));
++ break;
++
++ case GRE_VERSION_PPTP:
++ if (ntohs(grehdr->protocol) != GRE_PROTOCOL_PPTP) {
++ DEBUGP("GRE_VERSION_PPTP but unknown proto\n");
++ return 0;
++ }
++ tuple->dst.u.gre.key = htonl(ntohs(pgrehdr->call_id));
++ break;
++
++ default:
++ printk(KERN_WARNING "unknown GRE version %hu\n",
++ tuple->dst.u.gre.version);
++ return 0;
++ }
++
++ srckey = gre_keymap_lookup(tuple);
++
++#if 0
++ DEBUGP("found src key %x for tuple ", ntohl(srckey));
++ DUMP_TUPLE_GRE(tuple);
++#endif
++ tuple->src.u.gre.key = srckey;
++
++ return 1;
++}
++
++/* print gre part of tuple */
++static unsigned int gre_print_tuple(char *buffer,
++ const struct ip_conntrack_tuple *tuple)
++{
++ return sprintf(buffer, "version=%d protocol=0x%04x srckey=0x%x dstkey=0x%x ",
++ tuple->dst.u.gre.version,
++ ntohs(tuple->dst.u.gre.protocol),
++ ntohl(tuple->src.u.gre.key),
++ ntohl(tuple->dst.u.gre.key));
++}
++
++/* print private data for conntrack */
++static unsigned int gre_print_conntrack(char *buffer,
++ const struct ip_conntrack *ct)
++{
++ return sprintf(buffer, "timeout=%u, stream_timeout=%u ",
++ (ct->proto.gre.timeout / HZ),
++ (ct->proto.gre.stream_timeout / HZ));
++}
++
++/* Returns verdict for packet, and may modify conntrack */
++static int gre_packet(struct ip_conntrack *ct,
++ struct iphdr *iph, size_t len,
++ enum ip_conntrack_info conntrackinfo)
++{
++ /* If we've seen traffic both ways, this is a GRE connection.
++ * Extend timeout. */
++ if (ct->status & IPS_SEEN_REPLY) {
++ ip_ct_refresh(ct, ct->proto.gre.stream_timeout);
++ /* Also, more likely to be important, and not a probe. */
++ set_bit(IPS_ASSURED_BIT, &ct->status);
++ } else
++ ip_ct_refresh(ct, ct->proto.gre.timeout);
++
++ return NF_ACCEPT;
++}
++
++/* Called when a new connection for this protocol found. */
++static int gre_new(struct ip_conntrack *ct,
++ struct iphdr *iph, size_t len)
++{
++ DEBUGP(": ");
++ DUMP_TUPLE_GRE(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
++
++ /* initialize to sane value. Ideally a conntrack helper
++ * (e.g. in case of pptp) is increasing them */
++ ct->proto.gre.stream_timeout = GRE_STREAM_TIMEOUT;
++ ct->proto.gre.timeout = GRE_TIMEOUT;
++
++ return 1;
++}
++
++/* Called when a conntrack entry has already been removed from the hashes
++ * and is about to be deleted from memory */
++static void gre_destroy(struct ip_conntrack *ct)
++{
++ struct ip_conntrack_expect *master = ct->master;
++
++ DEBUGP(" entering\n");
++
++ if (!master) {
++ DEBUGP("no master exp for ct %p\n", ct);
++ return;
++ }
++
++ ip_ct_gre_keymap_destroy(master);
++}
++
++/* protocol helper struct */
++static struct ip_conntrack_protocol gre = { { NULL, NULL }, IPPROTO_GRE,
++ "gre",
++ gre_pkt_to_tuple,
++ gre_invert_tuple,
++ gre_print_tuple,
++ gre_print_conntrack,
++ gre_packet,
++ gre_new,
++ gre_destroy,
++ NULL,
++ THIS_MODULE };
++
++/* ip_conntrack_proto_gre initialization */
++static int __init init(void)
++{
++ int retcode;
++
++ if ((retcode = ip_conntrack_protocol_register(&gre))) {
++ printk(KERN_ERR "Unable to register conntrack protocol "
++ "helper for gre: %d\n", retcode);
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ struct list_head *pos, *n;
++
++ /* delete all keymap entries */
++ WRITE_LOCK(&ip_ct_gre_lock);
++ list_for_each_safe(pos, n, &gre_keymap_list) {
++ DEBUGP("deleting keymap %p at module unload time\n", pos);
++ list_del(pos);
++ kfree(pos);
++ }
++ WRITE_UNLOCK(&ip_ct_gre_lock);
++
++ ip_conntrack_protocol_unregister(&gre);
++}
++
++EXPORT_SYMBOL(ip_ct_gre_keymap_add);
++EXPORT_SYMBOL(ip_ct_gre_keymap_change);
++EXPORT_SYMBOL(ip_ct_gre_keymap_destroy);
++
++module_init(init);
++module_exit(fini);
+diff -uNr linux_org/net/ipv4/netfilter/ip_nat_core.c linux/net/ipv4/netfilter/ip_nat_core.c
+--- linux_org/net/ipv4/netfilter/ip_nat_core.c 2004-11-24 12:14:04.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_nat_core.c 2006-10-27 14:11:52.000000000 +0200
+@@ -430,7 +430,7 @@
+ *tuple = *orig_tuple;
+ while ((rptr = find_best_ips_proto_fast(tuple, mr, conntrack, hooknum))
+ != NULL) {
+- DEBUGP("Found best for "); DUMP_TUPLE(tuple);
++ DEBUGP("Found best for "); DUMP_TUPLE_RAW(tuple);
+ /* 3) The per-protocol part of the manip is made to
+ map into the range to make a unique tuple. */
+
+@@ -572,9 +572,9 @@
+ HOOK2MANIP(hooknum)==IP_NAT_MANIP_SRC ? "SRC" : "DST",
+ conntrack);
+ DEBUGP("Original: ");
+- DUMP_TUPLE(&orig_tp);
++ DUMP_TUPLE_RAW(&orig_tp);
+ DEBUGP("New: ");
+- DUMP_TUPLE(&new_tuple);
++ DUMP_TUPLE_RAW(&new_tuple);
+ #endif
+
+ /* We now have two tuples (SRCIP/SRCPT/DSTIP/DSTPT):
+diff -uNr linux_org/net/ipv4/netfilter/ip_nat_core.c.orig linux/net/ipv4/netfilter/ip_nat_core.c.orig
+--- linux_org/net/ipv4/netfilter/ip_nat_core.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_nat_core.c.orig 2004-11-24 12:14:04.000000000 +0100
+@@ -0,0 +1,1014 @@
++/* NAT for netfilter; shared with compatibility layer. */
++
++/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General
++ Public Licence. */
++#include <linux/version.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/timer.h>
++#include <linux/skbuff.h>
++#include <linux/netfilter_ipv4.h>
++#include <linux/brlock.h>
++#include <linux/vmalloc.h>
++#include <net/checksum.h>
++#include <net/icmp.h>
++#include <net/ip.h>
++#include <net/tcp.h> /* For tcp_prot in getorigdst */
++
++#define ASSERT_READ_LOCK(x) MUST_BE_READ_LOCKED(&ip_nat_lock)
++#define ASSERT_WRITE_LOCK(x) MUST_BE_WRITE_LOCKED(&ip_nat_lock)
++
++#include <linux/netfilter_ipv4/ip_conntrack.h>
++#include <linux/netfilter_ipv4/ip_conntrack_core.h>
++#include <linux/netfilter_ipv4/ip_conntrack_protocol.h>
++#include <linux/netfilter_ipv4/ip_nat.h>
++#include <linux/netfilter_ipv4/ip_nat_protocol.h>
++#include <linux/netfilter_ipv4/ip_nat_core.h>
++#include <linux/netfilter_ipv4/ip_nat_helper.h>
++#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
++#include <linux/netfilter_ipv4/listhelp.h>
++
++#if 0
++#define DEBUGP printk
++#else
++#define DEBUGP(format, args...)
++#endif
++
++DECLARE_RWLOCK(ip_nat_lock);
++DECLARE_RWLOCK_EXTERN(ip_conntrack_lock);
++
++/* Calculated at init based on memory size */
++static unsigned int ip_nat_htable_size;
++
++static struct list_head *bysource;
++static struct list_head *byipsproto;
++LIST_HEAD(protos);
++LIST_HEAD(helpers);
++
++extern struct ip_nat_protocol unknown_nat_protocol;
++
++/* We keep extra hashes for each conntrack, for fast searching. */
++static inline size_t
++hash_by_ipsproto(u_int32_t src, u_int32_t dst, u_int16_t proto)
++{
++ /* Modified src and dst, to ensure we don't create two
++ identical streams. */
++ return (src + dst + proto) % ip_nat_htable_size;
++}
++
++static inline size_t
++hash_by_src(const struct ip_conntrack_manip *manip, u_int16_t proto)
++{
++ /* Original src, to ensure we map it consistently if poss. */
++ return (manip->ip + manip->u.all + proto) % ip_nat_htable_size;
++}
++
++/* Noone using conntrack by the time this called. */
++static void ip_nat_cleanup_conntrack(struct ip_conntrack *conn)
++{
++ struct ip_nat_info *info = &conn->nat.info;
++ unsigned int hs, hp;
++
++ if (!info->initialized)
++ return;
++
++ IP_NF_ASSERT(info->bysource.conntrack);
++ IP_NF_ASSERT(info->byipsproto.conntrack);
++
++ hs = hash_by_src(&conn->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src,
++ conn->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.dst.protonum);
++
++ hp = hash_by_ipsproto(conn->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip,
++ conn->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip,
++ conn->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.dst.protonum);
++
++ WRITE_LOCK(&ip_nat_lock);
++ LIST_DELETE(&bysource[hs], &info->bysource);
++ LIST_DELETE(&byipsproto[hp], &info->byipsproto);
++ WRITE_UNLOCK(&ip_nat_lock);
++}
++
++/* We do checksum mangling, so if they were wrong before they're still
++ * wrong. Also works for incomplete packets (eg. ICMP dest
++ * unreachables.) */
++u_int16_t
++ip_nat_cheat_check(u_int32_t oldvalinv, u_int32_t newval, u_int16_t oldcheck)
++{
++ u_int32_t diffs[] = { oldvalinv, newval };
++ return csum_fold(csum_partial((char *)diffs, sizeof(diffs),
++ oldcheck^0xFFFF));
++}
++
++static inline int cmp_proto(const struct ip_nat_protocol *i, int proto)
++{
++ return i->protonum == proto;
++}
++
++struct ip_nat_protocol *
++find_nat_proto(u_int16_t protonum)
++{
++ struct ip_nat_protocol *i;
++
++ MUST_BE_READ_LOCKED(&ip_nat_lock);
++ i = LIST_FIND(&protos, cmp_proto, struct ip_nat_protocol *, protonum);
++ if (!i)
++ i = &unknown_nat_protocol;
++ return i;
++}
++
++/* Is this tuple already taken? (not by us) */
++int
++ip_nat_used_tuple(const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack *ignored_conntrack)
++{
++ /* Conntrack tracking doesn't keep track of outgoing tuples; only
++ incoming ones. NAT means they don't have a fixed mapping,
++ so we invert the tuple and look for the incoming reply.
++
++ We could keep a separate hash if this proves too slow. */
++ struct ip_conntrack_tuple reply;
++
++ invert_tuplepr(&reply, tuple);
++ return ip_conntrack_tuple_taken(&reply, ignored_conntrack);
++}
++
++/* Does tuple + the source manip come within the range mr */
++static int
++in_range(const struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_manip *manip,
++ const struct ip_nat_multi_range *mr)
++{
++ struct ip_nat_protocol *proto = find_nat_proto(tuple->dst.protonum);
++ unsigned int i;
++ struct ip_conntrack_tuple newtuple = { *manip, tuple->dst };
++
++ for (i = 0; i < mr->rangesize; i++) {
++ /* If we are allowed to map IPs, then we must be in the
++ range specified, otherwise we must be unchanged. */
++ if (mr->range[i].flags & IP_NAT_RANGE_MAP_IPS) {
++ if (ntohl(newtuple.src.ip) < ntohl(mr->range[i].min_ip)
++ || (ntohl(newtuple.src.ip)
++ > ntohl(mr->range[i].max_ip)))
++ continue;
++ } else {
++ if (newtuple.src.ip != tuple->src.ip)
++ continue;
++ }
++
++ if ((mr->range[i].flags & IP_NAT_RANGE_PROTO_SPECIFIED)
++ && proto->in_range(&newtuple, IP_NAT_MANIP_SRC,
++ &mr->range[i].min, &mr->range[i].max))
++ return 1;
++ }
++ return 0;
++}
++
++static inline int
++src_cmp(const struct ip_nat_hash *i,
++ const struct ip_conntrack_tuple *tuple,
++ const struct ip_nat_multi_range *mr)
++{
++ return (i->conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum
++ == tuple->dst.protonum
++ && i->conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip
++ == tuple->src.ip
++ && i->conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.all
++ == tuple->src.u.all
++ && in_range(tuple,
++ &i->conntrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.src,
++ mr));
++}
++
++/* Only called for SRC manip */
++static struct ip_conntrack_manip *
++find_appropriate_src(const struct ip_conntrack_tuple *tuple,
++ const struct ip_nat_multi_range *mr)
++{
++ unsigned int h = hash_by_src(&tuple->src, tuple->dst.protonum);
++ struct ip_nat_hash *i;
++
++ MUST_BE_READ_LOCKED(&ip_nat_lock);
++ i = LIST_FIND(&bysource[h], src_cmp, struct ip_nat_hash *, tuple, mr);
++ if (i)
++ return &i->conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src;
++ else
++ return NULL;
++}
++
++#ifdef CONFIG_IP_NF_NAT_LOCAL
++/* If it's really a local destination manip, it may need to do a
++ source manip too. */
++static int
++do_extra_mangle(u_int32_t var_ip, u_int32_t *other_ipp)
++{
++ struct rtable *rt;
++
++ /* FIXME: IPTOS_TOS(iph->tos) --RR */
++ if (ip_route_output(&rt, var_ip, 0, 0, 0) != 0) {
++ DEBUGP("do_extra_mangle: Can't get route to %u.%u.%u.%u\n",
++ NIPQUAD(var_ip));
++ return 0;
++ }
++
++ *other_ipp = rt->rt_src;
++ ip_rt_put(rt);
++ return 1;
++}
++#endif
++
++/* Simple way to iterate through all. */
++static inline int fake_cmp(const struct ip_nat_hash *i,
++ u_int32_t src, u_int32_t dst, u_int16_t protonum,
++ unsigned int *score,
++ const struct ip_conntrack *conntrack)
++{
++ /* Compare backwards: we're dealing with OUTGOING tuples, and
++ inside the conntrack is the REPLY tuple. Don't count this
++ conntrack. */
++ if (i->conntrack != conntrack
++ && i->conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip == dst
++ && i->conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip == src
++ && (i->conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.dst.protonum
++ == protonum))
++ (*score)++;
++ return 0;
++}
++
++static inline unsigned int
++count_maps(u_int32_t src, u_int32_t dst, u_int16_t protonum,
++ const struct ip_conntrack *conntrack)
++{
++ unsigned int score = 0;
++ unsigned int h;
++
++ MUST_BE_READ_LOCKED(&ip_nat_lock);
++ h = hash_by_ipsproto(src, dst, protonum);
++ LIST_FIND(&byipsproto[h], fake_cmp, struct ip_nat_hash *,
++ src, dst, protonum, &score, conntrack);
++
++ return score;
++}
++
++/* For [FUTURE] fragmentation handling, we want the least-used
++ src-ip/dst-ip/proto triple. Fairness doesn't come into it. Thus
++ if the range specifies 1.2.3.4 ports 10000-10005 and 1.2.3.5 ports
++ 1-65535, we don't do pro-rata allocation based on ports; we choose
++ the ip with the lowest src-ip/dst-ip/proto usage.
++
++ If an allocation then fails (eg. all 6 ports used in the 1.2.3.4
++ range), we eliminate that and try again. This is not the most
++ efficient approach, but if you're worried about that, don't hand us
++ ranges you don't really have. */
++static struct ip_nat_range *
++find_best_ips_proto(struct ip_conntrack_tuple *tuple,
++ const struct ip_nat_multi_range *mr,
++ const struct ip_conntrack *conntrack,
++ unsigned int hooknum)
++{
++ unsigned int i;
++ struct {
++ const struct ip_nat_range *range;
++ unsigned int score;
++ struct ip_conntrack_tuple tuple;
++ } best = { NULL, 0xFFFFFFFF };
++ u_int32_t *var_ipp, *other_ipp, saved_ip, orig_dstip;
++ static unsigned int randomness = 0;
++
++ if (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) {
++ var_ipp = &tuple->src.ip;
++ saved_ip = tuple->dst.ip;
++ other_ipp = &tuple->dst.ip;
++ } else {
++ var_ipp = &tuple->dst.ip;
++ saved_ip = tuple->src.ip;
++ other_ipp = &tuple->src.ip;
++ }
++ /* Don't do do_extra_mangle unless neccessary (overrides
++ explicit socket bindings, for example) */
++ orig_dstip = tuple->dst.ip;
++
++ IP_NF_ASSERT(mr->rangesize >= 1);
++ for (i = 0; i < mr->rangesize; i++) {
++ /* Host order */
++ u_int32_t minip, maxip, j;
++
++ /* Don't do ranges which are already eliminated. */
++ if (mr->range[i].flags & IP_NAT_RANGE_FULL) {
++ continue;
++ }
++
++ if (mr->range[i].flags & IP_NAT_RANGE_MAP_IPS) {
++ minip = ntohl(mr->range[i].min_ip);
++ maxip = ntohl(mr->range[i].max_ip);
++ } else
++ minip = maxip = ntohl(*var_ipp);
++
++ randomness++;
++ for (j = 0; j < maxip - minip + 1; j++) {
++ unsigned int score;
++
++ *var_ipp = htonl(minip + (randomness + j)
++ % (maxip - minip + 1));
++
++ /* Reset the other ip in case it was mangled by
++ * do_extra_mangle last time. */
++ *other_ipp = saved_ip;
++
++#ifdef CONFIG_IP_NF_NAT_LOCAL
++ if (hooknum == NF_IP_LOCAL_OUT
++ && *var_ipp != orig_dstip
++ && !do_extra_mangle(*var_ipp, other_ipp)) {
++ DEBUGP("Range %u %u.%u.%u.%u rt failed!\n",
++ i, NIPQUAD(*var_ipp));
++ /* Can't route? This whole range part is
++ * probably screwed, but keep trying
++ * anyway. */
++ continue;
++ }
++#endif
++
++ /* Count how many others map onto this. */
++ score = count_maps(tuple->src.ip, tuple->dst.ip,
++ tuple->dst.protonum, conntrack);
++ if (score < best.score) {
++ /* Optimization: doesn't get any better than
++ this. */
++ if (score == 0)
++ return (struct ip_nat_range *)
++ &mr->range[i];
++
++ best.score = score;
++ best.tuple = *tuple;
++ best.range = &mr->range[i];
++ }
++ }
++ }
++ *tuple = best.tuple;
++
++ /* Discard const. */
++ return (struct ip_nat_range *)best.range;
++}
++
++/* Fast version doesn't iterate through hash chains, but only handles
++ common case of single IP address (null NAT, masquerade) */
++static struct ip_nat_range *
++find_best_ips_proto_fast(struct ip_conntrack_tuple *tuple,
++ const struct ip_nat_multi_range *mr,
++ const struct ip_conntrack *conntrack,
++ unsigned int hooknum)
++{
++ if (mr->rangesize != 1
++ || (mr->range[0].flags & IP_NAT_RANGE_FULL)
++ || ((mr->range[0].flags & IP_NAT_RANGE_MAP_IPS)
++ && mr->range[0].min_ip != mr->range[0].max_ip))
++ return find_best_ips_proto(tuple, mr, conntrack, hooknum);
++
++ if (mr->range[0].flags & IP_NAT_RANGE_MAP_IPS) {
++ if (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC)
++ tuple->src.ip = mr->range[0].min_ip;
++ else {
++ /* Only do extra mangle when required (breaks
++ socket binding) */
++#ifdef CONFIG_IP_NF_NAT_LOCAL
++ if (tuple->dst.ip != mr->range[0].min_ip
++ && hooknum == NF_IP_LOCAL_OUT
++ && !do_extra_mangle(mr->range[0].min_ip,
++ &tuple->src.ip))
++ return NULL;
++#endif
++ tuple->dst.ip = mr->range[0].min_ip;
++ }
++ }
++
++ /* Discard const. */
++ return (struct ip_nat_range *)&mr->range[0];
++}
++
++static int
++get_unique_tuple(struct ip_conntrack_tuple *tuple,
++ const struct ip_conntrack_tuple *orig_tuple,
++ const struct ip_nat_multi_range *mrr,
++ struct ip_conntrack *conntrack,
++ unsigned int hooknum)
++{
++ struct ip_nat_protocol *proto
++ = find_nat_proto(orig_tuple->dst.protonum);
++ struct ip_nat_range *rptr;
++ unsigned int i;
++ int ret;
++
++ /* We temporarily use flags for marking full parts, but we
++ always clean up afterwards */
++ struct ip_nat_multi_range *mr = (void *)mrr;
++
++ /* 1) If this srcip/proto/src-proto-part is currently mapped,
++ and that same mapping gives a unique tuple within the given
++ range, use that.
++
++ This is only required for source (ie. NAT/masq) mappings.
++ So far, we don't do local source mappings, so multiple
++ manips not an issue. */
++ if (hooknum == NF_IP_POST_ROUTING) {
++ struct ip_conntrack_manip *manip;
++
++ manip = find_appropriate_src(orig_tuple, mr);
++ if (manip) {
++ /* Apply same source manipulation. */
++ *tuple = ((struct ip_conntrack_tuple)
++ { *manip, orig_tuple->dst });
++ DEBUGP("get_unique_tuple: Found current src map\n");
++ return 1;
++ }
++ }
++
++ /* 2) Select the least-used IP/proto combination in the given
++ range.
++ */
++ *tuple = *orig_tuple;
++ while ((rptr = find_best_ips_proto_fast(tuple, mr, conntrack, hooknum))
++ != NULL) {
++ DEBUGP("Found best for "); DUMP_TUPLE(tuple);
++ /* 3) The per-protocol part of the manip is made to
++ map into the range to make a unique tuple. */
++
++ /* Only bother mapping if it's not already in range
++ and unique */
++ if ((!(rptr->flags & IP_NAT_RANGE_PROTO_SPECIFIED)
++ || proto->in_range(tuple, HOOK2MANIP(hooknum),
++ &rptr->min, &rptr->max))
++ && !ip_nat_used_tuple(tuple, conntrack)) {
++ ret = 1;
++ goto clear_fulls;
++ } else {
++ if (proto->unique_tuple(tuple, rptr,
++ HOOK2MANIP(hooknum),
++ conntrack)) {
++ /* Must be unique. */
++ IP_NF_ASSERT(!ip_nat_used_tuple(tuple,
++ conntrack));
++ ret = 1;
++ goto clear_fulls;
++ } else if (HOOK2MANIP(hooknum) == IP_NAT_MANIP_DST) {
++ /* Try implicit source NAT; protocol
++ may be able to play with ports to
++ make it unique. */
++ struct ip_nat_range r
++ = { IP_NAT_RANGE_MAP_IPS,
++ tuple->src.ip, tuple->src.ip,
++ { 0 }, { 0 } };
++ DEBUGP("Trying implicit mapping\n");
++ if (proto->unique_tuple(tuple, &r,
++ IP_NAT_MANIP_SRC,
++ conntrack)) {
++ /* Must be unique. */
++ IP_NF_ASSERT(!ip_nat_used_tuple
++ (tuple, conntrack));
++ ret = 1;
++ goto clear_fulls;
++ }
++ }
++ DEBUGP("Protocol can't get unique tuple %u.\n",
++ hooknum);
++ }
++
++ /* Eliminate that from range, and try again. */
++ rptr->flags |= IP_NAT_RANGE_FULL;
++ *tuple = *orig_tuple;
++ }
++
++ ret = 0;
++
++ clear_fulls:
++ /* Clear full flags. */
++ IP_NF_ASSERT(mr->rangesize >= 1);
++ for (i = 0; i < mr->rangesize; i++)
++ mr->range[i].flags &= ~IP_NAT_RANGE_FULL;
++
++ return ret;
++}
++
++static inline int
++helper_cmp(const struct ip_nat_helper *helper,
++ const struct ip_conntrack_tuple *tuple)
++{
++ return ip_ct_tuple_mask_cmp(tuple, &helper->tuple, &helper->mask);
++}
++
++/* Where to manip the reply packets (will be reverse manip). */
++static unsigned int opposite_hook[NF_IP_NUMHOOKS]
++= { [NF_IP_PRE_ROUTING] = NF_IP_POST_ROUTING,
++ [NF_IP_POST_ROUTING] = NF_IP_PRE_ROUTING,
++#ifdef CONFIG_IP_NF_NAT_LOCAL
++ [NF_IP_LOCAL_OUT] = NF_IP_LOCAL_IN,
++ [NF_IP_LOCAL_IN] = NF_IP_LOCAL_OUT,
++#endif
++};
++
++unsigned int
++ip_nat_setup_info(struct ip_conntrack *conntrack,
++ const struct ip_nat_multi_range *mr,
++ unsigned int hooknum)
++{
++ struct ip_conntrack_tuple new_tuple, inv_tuple, reply;
++ struct ip_conntrack_tuple orig_tp;
++ struct ip_nat_info *info = &conntrack->nat.info;
++ int in_hashes = info->initialized;
++
++ MUST_BE_WRITE_LOCKED(&ip_nat_lock);
++ IP_NF_ASSERT(hooknum == NF_IP_PRE_ROUTING
++ || hooknum == NF_IP_POST_ROUTING
++ || hooknum == NF_IP_LOCAL_IN
++ || hooknum == NF_IP_LOCAL_OUT);
++ IP_NF_ASSERT(info->num_manips < IP_NAT_MAX_MANIPS);
++ IP_NF_ASSERT(!(info->initialized & (1 << HOOK2MANIP(hooknum))));
++
++ /* What we've got will look like inverse of reply. Normally
++ this is what is in the conntrack, except for prior
++ manipulations (future optimization: if num_manips == 0,
++ orig_tp =
++ conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple) */
++ invert_tuplepr(&orig_tp,
++ &conntrack->tuplehash[IP_CT_DIR_REPLY].tuple);
++
++#if 0
++ {
++ unsigned int i;
++
++ DEBUGP("Hook %u (%s), ", hooknum,
++ HOOK2MANIP(hooknum)==IP_NAT_MANIP_SRC ? "SRC" : "DST");
++ DUMP_TUPLE(&orig_tp);
++ DEBUGP("Range %p: ", mr);
++ for (i = 0; i < mr->rangesize; i++) {
++ DEBUGP("%u:%s%s%s %u.%u.%u.%u - %u.%u.%u.%u %u - %u\n",
++ i,
++ (mr->range[i].flags & IP_NAT_RANGE_MAP_IPS)
++ ? " MAP_IPS" : "",
++ (mr->range[i].flags
++ & IP_NAT_RANGE_PROTO_SPECIFIED)
++ ? " PROTO_SPECIFIED" : "",
++ (mr->range[i].flags & IP_NAT_RANGE_FULL)
++ ? " FULL" : "",
++ NIPQUAD(mr->range[i].min_ip),
++ NIPQUAD(mr->range[i].max_ip),
++ mr->range[i].min.all,
++ mr->range[i].max.all);
++ }
++ }
++#endif
++
++ do {
++ if (!get_unique_tuple(&new_tuple, &orig_tp, mr, conntrack,
++ hooknum)) {
++ DEBUGP("ip_nat_setup_info: Can't get unique for %p.\n",
++ conntrack);
++ return NF_DROP;
++ }
++
++#if 0
++ DEBUGP("Hook %u (%s) %p\n", hooknum,
++ HOOK2MANIP(hooknum)==IP_NAT_MANIP_SRC ? "SRC" : "DST",
++ conntrack);
++ DEBUGP("Original: ");
++ DUMP_TUPLE(&orig_tp);
++ DEBUGP("New: ");
++ DUMP_TUPLE(&new_tuple);
++#endif
++
++ /* We now have two tuples (SRCIP/SRCPT/DSTIP/DSTPT):
++ the original (A/B/C/D') and the mangled one (E/F/G/H').
++
++ We're only allowed to work with the SRC per-proto
++ part, so we create inverses of both to start, then
++ derive the other fields we need. */
++
++ /* Reply connection: simply invert the new tuple
++ (G/H/E/F') */
++ invert_tuplepr(&reply, &new_tuple);
++
++ /* Alter conntrack table so it recognizes replies.
++ If fail this race (reply tuple now used), repeat. */
++ } while (!ip_conntrack_alter_reply(conntrack, &reply));
++
++ /* FIXME: We can simply used existing conntrack reply tuple
++ here --RR */
++ /* Create inverse of original: C/D/A/B' */
++ invert_tuplepr(&inv_tuple, &orig_tp);
++
++ /* Has source changed?. */
++ if (!ip_ct_tuple_src_equal(&new_tuple, &orig_tp)) {
++ /* In this direction, a source manip. */
++ info->manips[info->num_manips++] =
++ ((struct ip_nat_info_manip)
++ { IP_CT_DIR_ORIGINAL, hooknum,
++ IP_NAT_MANIP_SRC, new_tuple.src });
++
++ IP_NF_ASSERT(info->num_manips < IP_NAT_MAX_MANIPS);
++
++ /* In the reverse direction, a destination manip. */
++ info->manips[info->num_manips++] =
++ ((struct ip_nat_info_manip)
++ { IP_CT_DIR_REPLY, opposite_hook[hooknum],
++ IP_NAT_MANIP_DST, orig_tp.src });
++ IP_NF_ASSERT(info->num_manips <= IP_NAT_MAX_MANIPS);
++ }
++
++ /* Has destination changed? */
++ if (!ip_ct_tuple_dst_equal(&new_tuple, &orig_tp)) {
++ /* In this direction, a destination manip */
++ info->manips[info->num_manips++] =
++ ((struct ip_nat_info_manip)
++ { IP_CT_DIR_ORIGINAL, hooknum,
++ IP_NAT_MANIP_DST, reply.src });
++
++ IP_NF_ASSERT(info->num_manips < IP_NAT_MAX_MANIPS);
++
++ /* In the reverse direction, a source manip. */
++ info->manips[info->num_manips++] =
++ ((struct ip_nat_info_manip)
++ { IP_CT_DIR_REPLY, opposite_hook[hooknum],
++ IP_NAT_MANIP_SRC, inv_tuple.src });
++ IP_NF_ASSERT(info->num_manips <= IP_NAT_MAX_MANIPS);
++ }
++
++ /* If there's a helper, assign it; based on new tuple. */
++ if (!conntrack->master)
++ info->helper = LIST_FIND(&helpers, helper_cmp, struct ip_nat_helper *,
++ &reply);
++
++ /* It's done. */
++ info->initialized |= (1 << HOOK2MANIP(hooknum));
++
++ if (in_hashes) {
++ IP_NF_ASSERT(info->bysource.conntrack);
++ replace_in_hashes(conntrack, info);
++ } else {
++ place_in_hashes(conntrack, info);
++ }
++
++ return NF_ACCEPT;
++}
++
++void replace_in_hashes(struct ip_conntrack *conntrack,
++ struct ip_nat_info *info)
++{
++ /* Source has changed, so replace in hashes. */
++ unsigned int srchash
++ = hash_by_src(&conntrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.src,
++ conntrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.dst.protonum);
++ /* We place packet as seen OUTGOUNG in byips_proto hash
++ (ie. reverse dst and src of reply packet. */
++ unsigned int ipsprotohash
++ = hash_by_ipsproto(conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.dst.ip,
++ conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.src.ip,
++ conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.dst.protonum);
++
++ IP_NF_ASSERT(info->bysource.conntrack == conntrack);
++ MUST_BE_WRITE_LOCKED(&ip_nat_lock);
++
++ list_del(&info->bysource.list);
++ list_del(&info->byipsproto.list);
++
++ list_prepend(&bysource[srchash], &info->bysource);
++ list_prepend(&byipsproto[ipsprotohash], &info->byipsproto);
++}
++
++void place_in_hashes(struct ip_conntrack *conntrack,
++ struct ip_nat_info *info)
++{
++ unsigned int srchash
++ = hash_by_src(&conntrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.src,
++ conntrack->tuplehash[IP_CT_DIR_ORIGINAL]
++ .tuple.dst.protonum);
++ /* We place packet as seen OUTGOUNG in byips_proto hash
++ (ie. reverse dst and src of reply packet. */
++ unsigned int ipsprotohash
++ = hash_by_ipsproto(conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.dst.ip,
++ conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.src.ip,
++ conntrack->tuplehash[IP_CT_DIR_REPLY]
++ .tuple.dst.protonum);
++
++ IP_NF_ASSERT(!info->bysource.conntrack);
++
++ MUST_BE_WRITE_LOCKED(&ip_nat_lock);
++ info->byipsproto.conntrack = conntrack;
++ info->bysource.conntrack = conntrack;
++
++ list_prepend(&bysource[srchash], &info->bysource);
++ list_prepend(&byipsproto[ipsprotohash], &info->byipsproto);
++}
++
++static void
++manip_pkt(u_int16_t proto, struct iphdr *iph, size_t len,
++ const struct ip_conntrack_manip *manip,
++ enum ip_nat_manip_type maniptype,
++ __u32 *nfcache)
++{
++ *nfcache |= NFC_ALTERED;
++ find_nat_proto(proto)->manip_pkt(iph, len, manip, maniptype);
++
++ if (maniptype == IP_NAT_MANIP_SRC) {
++ iph->check = ip_nat_cheat_check(~iph->saddr, manip->ip,
++ iph->check);
++ iph->saddr = manip->ip;
++ } else {
++ iph->check = ip_nat_cheat_check(~iph->daddr, manip->ip,
++ iph->check);
++ iph->daddr = manip->ip;
++ }
++#if 0
++ if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
++ DEBUGP("IP: checksum on packet bad.\n");
++
++ if (proto == IPPROTO_TCP) {
++ void *th = (u_int32_t *)iph + iph->ihl;
++ if (tcp_v4_check(th, len - 4*iph->ihl, iph->saddr, iph->daddr,
++ csum_partial((char *)th, len-4*iph->ihl, 0)))
++ DEBUGP("TCP: checksum on packet bad\n");
++ }
++#endif
++}
++
++static inline int exp_for_packet(struct ip_conntrack_expect *exp,
++ struct sk_buff **pskb)
++{
++ struct ip_conntrack_protocol *proto;
++ int ret = 1;
++
++ MUST_BE_READ_LOCKED(&ip_conntrack_lock);
++ proto = __ip_ct_find_proto((*pskb)->nh.iph->protocol);
++ if (proto->exp_matches_pkt)
++ ret = proto->exp_matches_pkt(exp, pskb);
++
++ return ret;
++}
++
++/* Do packet manipulations according to binding. */
++unsigned int
++do_bindings(struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo,
++ struct ip_nat_info *info,
++ unsigned int hooknum,
++ struct sk_buff **pskb)
++{
++ unsigned int i;
++ struct ip_nat_helper *helper;
++ enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo);
++ int is_tcp = (*pskb)->nh.iph->protocol == IPPROTO_TCP;
++
++ /* Need nat lock to protect against modification, but neither
++ conntrack (referenced) and helper (deleted with
++ synchronize_bh()) can vanish. */
++ READ_LOCK(&ip_nat_lock);
++ for (i = 0; i < info->num_manips; i++) {
++ /* raw socket (tcpdump) may have clone of incoming
++ skb: don't disturb it --RR */
++ if (skb_cloned(*pskb) && !(*pskb)->sk) {
++ struct sk_buff *nskb = skb_copy(*pskb, GFP_ATOMIC);
++ if (!nskb) {
++ READ_UNLOCK(&ip_nat_lock);
++ return NF_DROP;
++ }
++ kfree_skb(*pskb);
++ *pskb = nskb;
++ }
++
++ if (info->manips[i].direction == dir
++ && info->manips[i].hooknum == hooknum) {
++ DEBUGP("Mangling %p: %s to %u.%u.%u.%u %u\n",
++ *pskb,
++ info->manips[i].maniptype == IP_NAT_MANIP_SRC
++ ? "SRC" : "DST",
++ NIPQUAD(info->manips[i].manip.ip),
++ htons(info->manips[i].manip.u.all));
++ manip_pkt((*pskb)->nh.iph->protocol,
++ (*pskb)->nh.iph,
++ (*pskb)->len,
++ &info->manips[i].manip,
++ info->manips[i].maniptype,
++ &(*pskb)->nfcache);
++ }
++ }
++ helper = info->helper;
++ READ_UNLOCK(&ip_nat_lock);
++
++ if (helper) {
++ struct ip_conntrack_expect *exp = NULL;
++ struct list_head *cur_item;
++ int ret = NF_ACCEPT;
++ int helper_called = 0;
++
++ DEBUGP("do_bindings: helper existing for (%p)\n", ct);
++
++ /* Always defragged for helpers */
++ IP_NF_ASSERT(!((*pskb)->nh.iph->frag_off
++ & htons(IP_MF|IP_OFFSET)));
++
++ /* Have to grab read lock before sibling_list traversal */
++ READ_LOCK(&ip_conntrack_lock);
++ list_for_each_prev(cur_item, &ct->sibling_list) {
++ exp = list_entry(cur_item, struct ip_conntrack_expect,
++ expected_list);
++
++ /* if this expectation is already established, skip */
++ if (exp->sibling)
++ continue;
++
++ if (exp_for_packet(exp, pskb)) {
++ /* FIXME: May be true multiple times in the
++ * case of UDP!! */
++ DEBUGP("calling nat helper (exp=%p) for packet\n", exp);
++ ret = helper->help(ct, exp, info, ctinfo,
++ hooknum, pskb);
++ if (ret != NF_ACCEPT) {
++ READ_UNLOCK(&ip_conntrack_lock);
++ return ret;
++ }
++ helper_called = 1;
++ }
++ }
++ /* Helper might want to manip the packet even when there is no
++ * matching expectation for this packet */
++ if (!helper_called && helper->flags & IP_NAT_HELPER_F_ALWAYS) {
++ DEBUGP("calling nat helper for packet without expectation\n");
++ ret = helper->help(ct, NULL, info, ctinfo,
++ hooknum, pskb);
++ if (ret != NF_ACCEPT) {
++ READ_UNLOCK(&ip_conntrack_lock);
++ return ret;
++ }
++ }
++ READ_UNLOCK(&ip_conntrack_lock);
++
++ /* Adjust sequence number only once per packet
++ * (helper is called at all hooks) */
++ if (is_tcp && (hooknum == NF_IP_POST_ROUTING
++ || hooknum == NF_IP_LOCAL_IN)) {
++ DEBUGP("ip_nat_core: adjusting sequence number\n");
++ /* future: put this in a l4-proto specific function,
++ * and call this function here. */
++ ip_nat_seq_adjust(*pskb, ct, ctinfo);
++ }
++
++ return ret;
++
++ } else
++ return NF_ACCEPT;
++
++ /* not reached */
++}
++
++unsigned int
++icmp_reply_translation(struct sk_buff *skb,
++ struct ip_conntrack *conntrack,
++ unsigned int hooknum,
++ int dir)
++{
++ struct iphdr *iph = skb->nh.iph;
++ struct icmphdr *hdr = (struct icmphdr *)((u_int32_t *)iph + iph->ihl);
++ struct iphdr *inner = (struct iphdr *)(hdr + 1);
++ size_t datalen = skb->len - ((void *)inner - (void *)iph);
++ unsigned int i;
++ struct ip_nat_info *info = &conntrack->nat.info;
++
++ IP_NF_ASSERT(skb->len >= iph->ihl*4 + sizeof(struct icmphdr));
++ /* Must be RELATED */
++ IP_NF_ASSERT(skb->nfct
++ - ((struct ip_conntrack *)skb->nfct->master)->infos
++ == IP_CT_RELATED
++ || skb->nfct
++ - ((struct ip_conntrack *)skb->nfct->master)->infos
++ == IP_CT_RELATED+IP_CT_IS_REPLY);
++
++ /* Redirects on non-null nats must be dropped, else they'll
++ start talking to each other without our translation, and be
++ confused... --RR */
++ if (hdr->type == ICMP_REDIRECT) {
++ /* Don't care about races here. */
++ if (info->initialized
++ != ((1 << IP_NAT_MANIP_SRC) | (1 << IP_NAT_MANIP_DST))
++ || info->num_manips != 0)
++ return NF_DROP;
++ }
++
++ DEBUGP("icmp_reply_translation: translating error %p hook %u dir %s\n",
++ skb, hooknum, dir == IP_CT_DIR_ORIGINAL ? "ORIG" : "REPLY");
++ /* Note: May not be from a NAT'd host, but probably safest to
++ do translation always as if it came from the host itself
++ (even though a "host unreachable" coming from the host
++ itself is a bit weird).
++
++ More explanation: some people use NAT for anonymizing.
++ Also, CERT recommends dropping all packets from private IP
++ addresses (although ICMP errors from internal links with
++ such addresses are not too uncommon, as Alan Cox points
++ out) */
++
++ READ_LOCK(&ip_nat_lock);
++ for (i = 0; i < info->num_manips; i++) {
++ DEBUGP("icmp_reply: manip %u dir %s hook %u\n",
++ i, info->manips[i].direction == IP_CT_DIR_ORIGINAL ?
++ "ORIG" : "REPLY", info->manips[i].hooknum);
++
++ if (info->manips[i].direction != dir)
++ continue;
++
++ /* Mapping the inner packet is just like a normal
++ packet, except it was never src/dst reversed, so
++ where we would normally apply a dst manip, we apply
++ a src, and vice versa. */
++ if (info->manips[i].hooknum == hooknum) {
++ DEBUGP("icmp_reply: inner %s -> %u.%u.%u.%u %u\n",
++ info->manips[i].maniptype == IP_NAT_MANIP_SRC
++ ? "DST" : "SRC",
++ NIPQUAD(info->manips[i].manip.ip),
++ ntohs(info->manips[i].manip.u.udp.port));
++ manip_pkt(inner->protocol, inner,
++ skb->len - ((void *)inner - (void *)iph),
++ &info->manips[i].manip,
++ !info->manips[i].maniptype,
++ &skb->nfcache);
++ /* Outer packet needs to have IP header NATed like
++ it's a reply. */
++
++ /* Use mapping to map outer packet: 0 give no
++ per-proto mapping */
++ DEBUGP("icmp_reply: outer %s -> %u.%u.%u.%u\n",
++ info->manips[i].maniptype == IP_NAT_MANIP_SRC
++ ? "SRC" : "DST",
++ NIPQUAD(info->manips[i].manip.ip));
++ manip_pkt(0, iph, skb->len,
++ &info->manips[i].manip,
++ info->manips[i].maniptype,
++ &skb->nfcache);
++ }
++ }
++ READ_UNLOCK(&ip_nat_lock);
++
++ /* Since we mangled inside ICMP packet, recalculate its
++ checksum from scratch. (Hence the handling of incorrect
++ checksums in conntrack, so we don't accidentally fix one.) */
++ hdr->checksum = 0;
++ hdr->checksum = ip_compute_csum((unsigned char *)hdr,
++ sizeof(*hdr) + datalen);
++
++ return NF_ACCEPT;
++}
++
++int __init ip_nat_init(void)
++{
++ size_t i;
++
++ /* Leave them the same for the moment. */
++ ip_nat_htable_size = ip_conntrack_htable_size;
++
++ /* One vmalloc for both hash tables */
++ bysource = vmalloc(sizeof(struct list_head) * ip_nat_htable_size*2);
++ if (!bysource) {
++ return -ENOMEM;
++ }
++ byipsproto = bysource + ip_nat_htable_size;
++
++ /* Sew in builtin protocols. */
++ WRITE_LOCK(&ip_nat_lock);
++ list_append(&protos, &ip_nat_protocol_tcp);
++ list_append(&protos, &ip_nat_protocol_udp);
++ list_append(&protos, &ip_nat_protocol_icmp);
++ WRITE_UNLOCK(&ip_nat_lock);
++
++ for (i = 0; i < ip_nat_htable_size; i++) {
++ INIT_LIST_HEAD(&bysource[i]);
++ INIT_LIST_HEAD(&byipsproto[i]);
++ }
++
++ /* FIXME: Man, this is a hack. <SIGH> */
++ IP_NF_ASSERT(ip_conntrack_destroyed == NULL);
++ ip_conntrack_destroyed = &ip_nat_cleanup_conntrack;
++
++ return 0;
++}
++
++/* Clear NAT section of all conntracks, in case we're loaded again. */
++static int clean_nat(const struct ip_conntrack *i, void *data)
++{
++ memset((void *)&i->nat, 0, sizeof(i->nat));
++ return 0;
++}
++
++/* Not __exit: called from ip_nat_standalone.c:init_or_cleanup() --RR */
++void ip_nat_cleanup(void)
++{
++ ip_ct_selective_cleanup(&clean_nat, NULL);
++ ip_conntrack_destroyed = NULL;
++ vfree(bysource);
++}
+diff -uNr linux_org/net/ipv4/netfilter/ip_nat_pptp.c linux/net/ipv4/netfilter/ip_nat_pptp.c
+--- linux_org/net/ipv4/netfilter/ip_nat_pptp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_nat_pptp.c 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,475 @@
++/*
++ * ip_nat_pptp.c - Version 1.5
++ *
++ * NAT support for PPTP (Point to Point Tunneling Protocol).
++ * PPTP is a a protocol for creating virtual private networks.
++ * It is a specification defined by Microsoft and some vendors
++ * working with Microsoft. PPTP is built on top of a modified
++ * version of the Internet Generic Routing Encapsulation Protocol.
++ * GRE is defined in RFC 1701 and RFC 1702. Documentation of
++ * PPTP can be found in RFC 2637
++ *
++ * (C) 2000-2003 by Harald Welte <laforge@gnumonks.org>
++ *
++ * Development of this code funded by Astaro AG (http://www.astaro.com/)
++ *
++ * TODO: - Support for multiple calls within one session
++ * (needs netfilter newnat code)
++ * - NAT to a unique tuple, not to TCP source port
++ * (needs netfilter tuple reservation)
++ *
++ * Changes:
++ * 2002-02-10 - Version 1.3
++ * - Use ip_nat_mangle_tcp_packet() because of cloned skb's
++ * in local connections (Philip Craig <philipc@snapgear.com>)
++ * - add checks for magicCookie and pptp version
++ * - make argument list of pptp_{out,in}bound_packet() shorter
++ * - move to C99 style initializers
++ * - print version number at module loadtime
++ * 2003-09-22 - Version 1.5
++ * - use SNATed tcp sourceport as callid, since we get called before
++ * TCP header is mangled (Philip Craig <philipc@snapgear.com>)
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/tcp.h>
++#include <net/tcp.h>
++#include <linux/netfilter_ipv4/ip_nat.h>
++#include <linux/netfilter_ipv4/ip_nat_rule.h>
++#include <linux/netfilter_ipv4/ip_nat_helper.h>
++#include <linux/netfilter_ipv4/ip_nat_pptp.h>
++#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
++#include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
++
++#define IP_NAT_PPTP_VERSION "1.5"
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("Netfilter NAT helper module for PPTP");
++
++
++#if 0
++#include "ip_conntrack_pptp_priv.h"
++#define DEBUGP(format, args...) printk(KERN_DEBUG __FILE__ ":" __FUNCTION__ \
++ ": " format, ## args)
++#else
++#define DEBUGP(format, args...)
++#endif
++
++static unsigned int
++pptp_nat_expected(struct sk_buff **pskb,
++ unsigned int hooknum,
++ struct ip_conntrack *ct,
++ struct ip_nat_info *info)
++{
++ struct ip_conntrack *master = master_ct(ct);
++ struct ip_nat_multi_range mr;
++ struct ip_ct_pptp_master *ct_pptp_info;
++ struct ip_nat_pptp *nat_pptp_info;
++ u_int32_t newip, newcid;
++ int ret;
++
++ IP_NF_ASSERT(info);
++ IP_NF_ASSERT(master);
++ IP_NF_ASSERT(!(info->initialized & (1 << HOOK2MANIP(hooknum))));
++
++ DEBUGP("we have a connection!\n");
++
++ LOCK_BH(&ip_pptp_lock);
++ ct_pptp_info = &master->help.ct_pptp_info;
++ nat_pptp_info = &master->nat.help.nat_pptp_info;
++
++ /* need to alter GRE tuple because conntrack expectfn() used 'wrong'
++ * (unmanipulated) values */
++ if (HOOK2MANIP(hooknum) == IP_NAT_MANIP_DST) {
++ DEBUGP("completing tuples with NAT info \n");
++ /* we can do this, since we're unconfirmed */
++ if (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.gre.key ==
++ htonl(ct_pptp_info->pac_call_id)) {
++ /* assume PNS->PAC */
++ ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.gre.key =
++ htonl(nat_pptp_info->pns_call_id);
++ ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.gre.key =
++ htonl(nat_pptp_info->pns_call_id);
++ newip = master->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip;
++ newcid = htonl(nat_pptp_info->pac_call_id);
++ } else {
++ /* assume PAC->PNS */
++ ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u.gre.key =
++ htonl(nat_pptp_info->pac_call_id);
++ ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.gre.key =
++ htonl(nat_pptp_info->pac_call_id);
++ newip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip;
++ newcid = htonl(nat_pptp_info->pns_call_id);
++ }
++ } else {
++ if (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.gre.key ==
++ htonl(ct_pptp_info->pac_call_id)) {
++ /* assume PNS->PAC */
++ newip = master->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip;
++ newcid = htonl(ct_pptp_info->pns_call_id);
++ }
++ else {
++ /* assume PAC->PNS */
++ newip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip;
++ newcid = htonl(ct_pptp_info->pac_call_id);
++ }
++ }
++
++ mr.rangesize = 1;
++ mr.range[0].flags = IP_NAT_RANGE_MAP_IPS | IP_NAT_RANGE_PROTO_SPECIFIED;
++ mr.range[0].min_ip = mr.range[0].max_ip = newip;
++ mr.range[0].min = mr.range[0].max =
++ ((union ip_conntrack_manip_proto ) { newcid });
++ DEBUGP("change ip to %u.%u.%u.%u\n",
++ NIPQUAD(newip));
++ DEBUGP("change key to 0x%x\n", ntohl(newcid));
++ ret = ip_nat_setup_info(ct, &mr, hooknum);
++
++ UNLOCK_BH(&ip_pptp_lock);
++
++ return ret;
++
++}
++
++/* outbound packets == from PNS to PAC */
++static inline unsigned int
++pptp_outbound_pkt(struct sk_buff **pskb,
++ struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo,
++ struct ip_conntrack_expect *exp)
++
++{
++ struct iphdr *iph = (*pskb)->nh.iph;
++ struct tcphdr *tcph = (void *) iph + iph->ihl*4;
++ struct pptp_pkt_hdr *pptph = (struct pptp_pkt_hdr *)
++ ((void *)tcph + tcph->doff*4);
++
++ struct PptpControlHeader *ctlh;
++ union pptp_ctrl_union pptpReq;
++ struct ip_ct_pptp_master *ct_pptp_info = &ct->help.ct_pptp_info;
++ struct ip_nat_pptp *nat_pptp_info = &ct->nat.help.nat_pptp_info;
++
++ u_int16_t msg, *cid = NULL, new_callid;
++
++ /* FIXME: size checks !!! */
++ ctlh = (struct PptpControlHeader *) ((void *) pptph + sizeof(*pptph));
++ pptpReq.rawreq = (void *) ((void *) ctlh + sizeof(*ctlh));
++
++ new_callid = htons(ct_pptp_info->pns_call_id);
++
++ switch (msg = ntohs(ctlh->messageType)) {
++ case PPTP_OUT_CALL_REQUEST:
++ cid = &pptpReq.ocreq->callID;
++ /* FIXME: ideally we would want to reserve a call ID
++ * here. current netfilter NAT core is not able to do
++ * this :( For now we use TCP source port. This breaks
++ * multiple calls within one control session */
++
++ /* save original call ID in nat_info */
++ nat_pptp_info->pns_call_id = ct_pptp_info->pns_call_id;
++
++ /* don't use tcph->source since we are at a DSTmanip
++ * hook (e.g. PREROUTING) and pkt is not mangled yet */
++ new_callid = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.tcp.port;
++
++ /* save new call ID in ct info */
++ ct_pptp_info->pns_call_id = ntohs(new_callid);
++ break;
++ case PPTP_IN_CALL_REPLY:
++ cid = &pptpReq.icreq->callID;
++ break;
++ case PPTP_CALL_CLEAR_REQUEST:
++ cid = &pptpReq.clrreq->callID;
++ break;
++ default:
++ DEBUGP("unknown outbound packet 0x%04x:%s\n", msg,
++ (msg <= PPTP_MSG_MAX)? strMName[msg]:strMName[0]);
++ /* fall through */
++
++ case PPTP_SET_LINK_INFO:
++ /* only need to NAT in case PAC is behind NAT box */
++ case PPTP_START_SESSION_REQUEST:
++ case PPTP_START_SESSION_REPLY:
++ case PPTP_STOP_SESSION_REQUEST:
++ case PPTP_STOP_SESSION_REPLY:
++ case PPTP_ECHO_REQUEST:
++ case PPTP_ECHO_REPLY:
++ /* no need to alter packet */
++ return NF_ACCEPT;
++ }
++
++ IP_NF_ASSERT(cid);
++
++ DEBUGP("altering call id from 0x%04x to 0x%04x\n",
++ ntohs(*cid), ntohs(new_callid));
++
++ /* mangle packet */
++ ip_nat_mangle_tcp_packet(pskb, ct, ctinfo, (void *)cid - (void *)pptph,
++ sizeof(new_callid), (char *)&new_callid,
++ sizeof(new_callid));
++
++ return NF_ACCEPT;
++}
++
++/* inbound packets == from PAC to PNS */
++static inline unsigned int
++pptp_inbound_pkt(struct sk_buff **pskb,
++ struct ip_conntrack *ct,
++ enum ip_conntrack_info ctinfo,
++ struct ip_conntrack_expect *oldexp)
++{
++ struct iphdr *iph = (*pskb)->nh.iph;
++ struct tcphdr *tcph = (void *) iph + iph->ihl*4;
++ struct pptp_pkt_hdr *pptph = (struct pptp_pkt_hdr *)
++ ((void *)tcph + tcph->doff*4);
++
++ struct PptpControlHeader *ctlh;
++ union pptp_ctrl_union pptpReq;
++ struct ip_ct_pptp_master *ct_pptp_info = &ct->help.ct_pptp_info;
++ struct ip_nat_pptp *nat_pptp_info = &ct->nat.help.nat_pptp_info;
++
++ u_int16_t msg, new_cid = 0, new_pcid, *pcid = NULL, *cid = NULL;
++ u_int32_t old_dst_ip;
++
++ struct ip_conntrack_tuple t, inv_t;
++ struct ip_conntrack_tuple *orig_t, *reply_t;
++
++ /* FIXME: size checks !!! */
++ ctlh = (struct PptpControlHeader *) ((void *) pptph + sizeof(*pptph));
++ pptpReq.rawreq = (void *) ((void *) ctlh + sizeof(*ctlh));
++
++ new_pcid = htons(nat_pptp_info->pns_call_id);
++
++ switch (msg = ntohs(ctlh->messageType)) {
++ case PPTP_OUT_CALL_REPLY:
++ pcid = &pptpReq.ocack->peersCallID;
++ cid = &pptpReq.ocack->callID;
++ if (!oldexp) {
++ DEBUGP("outcall but no expectation\n");
++ break;
++ }
++ old_dst_ip = oldexp->tuple.dst.ip;
++ t = oldexp->tuple;
++ invert_tuplepr(&inv_t, &t);
++
++ /* save original PAC call ID in nat_info */
++ nat_pptp_info->pac_call_id = ct_pptp_info->pac_call_id;
++
++ /* alter expectation */
++ orig_t = &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple;
++ reply_t = &ct->tuplehash[IP_CT_DIR_REPLY].tuple;
++ if (t.src.ip == orig_t->src.ip && t.dst.ip == orig_t->dst.ip) {
++ /* expectation for PNS->PAC direction */
++ t.src.u.gre.key = htonl(nat_pptp_info->pns_call_id);
++ t.dst.u.gre.key = htonl(ct_pptp_info->pac_call_id);
++ inv_t.src.ip = reply_t->src.ip;
++ inv_t.dst.ip = reply_t->dst.ip;
++ inv_t.src.u.gre.key = htonl(nat_pptp_info->pac_call_id);
++ inv_t.dst.u.gre.key = htonl(ct_pptp_info->pns_call_id);
++ } else {
++ /* expectation for PAC->PNS direction */
++ t.src.u.gre.key = htonl(nat_pptp_info->pac_call_id);
++ t.dst.u.gre.key = htonl(ct_pptp_info->pns_call_id);
++ inv_t.src.ip = orig_t->src.ip;
++ inv_t.dst.ip = orig_t->dst.ip;
++ inv_t.src.u.gre.key = htonl(nat_pptp_info->pns_call_id);
++ inv_t.dst.u.gre.key = htonl(ct_pptp_info->pac_call_id);
++ }
++
++ if (!ip_conntrack_change_expect(oldexp, &t)) {
++ DEBUGP("successfully changed expect\n");
++ } else {
++ DEBUGP("can't change expect\n");
++ }
++ ip_ct_gre_keymap_change(oldexp->proto.gre.keymap_orig, &t);
++ ip_ct_gre_keymap_change(oldexp->proto.gre.keymap_reply, &inv_t);
++ break;
++ case PPTP_IN_CALL_CONNECT:
++ pcid = &pptpReq.iccon->peersCallID;
++ if (!oldexp)
++ break;
++ old_dst_ip = oldexp->tuple.dst.ip;
++ t = oldexp->tuple;
++
++ /* alter expectation, no need for callID */
++ if (t.dst.ip == ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.ip) {
++ /* expectation for PNS->PAC direction */
++ t.src.ip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip;
++ } else {
++ /* expectation for PAC->PNS direction */
++ t.dst.ip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip;
++ }
++
++ if (!ip_conntrack_change_expect(oldexp, &t)) {
++ DEBUGP("successfully changed expect\n");
++ } else {
++ DEBUGP("can't change expect\n");
++ }
++ break;
++ case PPTP_IN_CALL_REQUEST:
++ /* only need to nat in case PAC is behind NAT box */
++ break;
++ case PPTP_WAN_ERROR_NOTIFY:
++ pcid = &pptpReq.wanerr->peersCallID;
++ break;
++ case PPTP_CALL_DISCONNECT_NOTIFY:
++ pcid = &pptpReq.disc->callID;
++ break;
++
++ default:
++ DEBUGP("unknown inbound packet %s\n",
++ (msg <= PPTP_MSG_MAX)? strMName[msg]:strMName[0]);
++ /* fall through */
++
++ case PPTP_START_SESSION_REQUEST:
++ case PPTP_START_SESSION_REPLY:
++ case PPTP_STOP_SESSION_REQUEST:
++ case PPTP_STOP_SESSION_REPLY:
++ case PPTP_ECHO_REQUEST:
++ case PPTP_ECHO_REPLY:
++ /* no need to alter packet */
++ return NF_ACCEPT;
++ }
++
++ /* mangle packet */
++ IP_NF_ASSERT(pcid);
++ DEBUGP("altering peer call id from 0x%04x to 0x%04x\n",
++ ntohs(*pcid), ntohs(new_pcid));
++ ip_nat_mangle_tcp_packet(pskb, ct, ctinfo, (void *)pcid - (void *)pptph,
++ sizeof(new_pcid), (char *)&new_pcid,
++ sizeof(new_pcid));
++
++ if (new_cid) {
++ IP_NF_ASSERT(cid);
++ DEBUGP("altering call id from 0x%04x to 0x%04x\n",
++ ntohs(*cid), ntohs(new_cid));
++ ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
++ (void *)cid - (void *)pptph,
++ sizeof(new_cid), (char *)&new_cid,
++ sizeof(new_cid));
++ }
++
++ /* great, at least we don't need to resize packets */
++ return NF_ACCEPT;
++}
++
++
++static unsigned int tcp_help(struct ip_conntrack *ct,
++ struct ip_conntrack_expect *exp,
++ struct ip_nat_info *info,
++ enum ip_conntrack_info ctinfo,
++ unsigned int hooknum, struct sk_buff **pskb)
++{
++ struct iphdr *iph = (*pskb)->nh.iph;
++ struct tcphdr *tcph = (void *) iph + iph->ihl*4;
++ unsigned int datalen = (*pskb)->len - iph->ihl*4 - tcph->doff*4;
++ struct pptp_pkt_hdr *pptph;
++
++ int dir;
++
++ DEBUGP("entering\n");
++
++ /* Only mangle things once: DST for original direction
++ and SRC for reply direction. */
++ dir = CTINFO2DIR(ctinfo);
++ if (!((HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC
++ && dir == IP_CT_DIR_ORIGINAL)
++ || (HOOK2MANIP(hooknum) == IP_NAT_MANIP_DST
++ && dir == IP_CT_DIR_REPLY))) {
++ DEBUGP("Not touching dir %s at hook %s\n",
++ dir == IP_CT_DIR_ORIGINAL ? "ORIG" : "REPLY",
++ hooknum == NF_IP_POST_ROUTING ? "POSTROUTING"
++ : hooknum == NF_IP_PRE_ROUTING ? "PREROUTING"
++ : hooknum == NF_IP_LOCAL_OUT ? "OUTPUT"
++ : hooknum == NF_IP_LOCAL_IN ? "INPUT" : "???");
++ return NF_ACCEPT;
++ }
++
++ /* if packet is too small, just skip it */
++ if (datalen < sizeof(struct pptp_pkt_hdr)+
++ sizeof(struct PptpControlHeader)) {
++ DEBUGP("pptp packet too short\n");
++ return NF_ACCEPT;
++ }
++
++ pptph = (struct pptp_pkt_hdr *) ((void *)tcph + tcph->doff*4);
++
++ /* if it's not a control message, we can't handle it */
++ if (ntohs(pptph->packetType) != PPTP_PACKET_CONTROL ||
++ ntohl(pptph->magicCookie) != PPTP_MAGIC_COOKIE) {
++ DEBUGP("not a pptp control packet\n");
++ return NF_ACCEPT;
++ }
++
++ LOCK_BH(&ip_pptp_lock);
++
++ if (dir == IP_CT_DIR_ORIGINAL) {
++ /* reuqests sent by client to server (PNS->PAC) */
++ pptp_outbound_pkt(pskb, ct, ctinfo, exp);
++ } else {
++ /* response from the server to the client (PAC->PNS) */
++ pptp_inbound_pkt(pskb, ct, ctinfo, exp);
++ }
++
++ UNLOCK_BH(&ip_pptp_lock);
++
++ return NF_ACCEPT;
++}
++
++/* nat helper struct for control connection */
++static struct ip_nat_helper pptp_tcp_helper = {
++ .list = { NULL, NULL },
++ .name = "pptp",
++ .flags = IP_NAT_HELPER_F_ALWAYS,
++ .me = THIS_MODULE,
++ .tuple = { .src = { .ip = 0,
++ .u = { .tcp = { .port =
++ __constant_htons(PPTP_CONTROL_PORT) }
++ }
++ },
++ .dst = { .ip = 0,
++ .u = { .all = 0 },
++ .protonum = IPPROTO_TCP
++ }
++ },
++
++ .mask = { .src = { .ip = 0,
++ .u = { .tcp = { .port = 0xFFFF } }
++ },
++ .dst = { .ip = 0,
++ .u = { .all = 0 },
++ .protonum = 0xFFFF
++ }
++ },
++ .help = tcp_help,
++ .expect = pptp_nat_expected
++};
++
++
++static int __init init(void)
++{
++ DEBUGP("%s: registering NAT helper\n", __FILE__);
++ if (ip_nat_helper_register(&pptp_tcp_helper)) {
++ printk(KERN_ERR "Unable to register NAT application helper "
++ "for pptp\n");
++ return -EIO;
++ }
++
++ printk("ip_nat_pptp version %s loaded\n", IP_NAT_PPTP_VERSION);
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ DEBUGP("cleanup_module\n" );
++ ip_nat_helper_unregister(&pptp_tcp_helper);
++ printk("ip_nat_pptp version %s unloaded\n", IP_NAT_PPTP_VERSION);
++}
++
++module_init(init);
++module_exit(fini);
+diff -uNr linux_org/net/ipv4/netfilter/ip_nat_proto_gre.c linux/net/ipv4/netfilter/ip_nat_proto_gre.c
+--- linux_org/net/ipv4/netfilter/ip_nat_proto_gre.c 1970-01-01 01:00:00.000000000 +0100
++++ linux/net/ipv4/netfilter/ip_nat_proto_gre.c 2006-10-27 14:11:52.000000000 +0200
+@@ -0,0 +1,225 @@
++/*
++ * ip_nat_proto_gre.c - Version 1.2
++ *
++ * NAT protocol helper module for GRE.
++ *
++ * GRE is a generic encapsulation protocol, which is generally not very
++ * suited for NAT, as it has no protocol-specific part as port numbers.
++ *
++ * It has an optional key field, which may help us distinguishing two
++ * connections between the same two hosts.
++ *
++ * GRE is defined in RFC 1701 and RFC 1702, as well as RFC 2784
++ *
++ * PPTP is built on top of a modified version of GRE, and has a mandatory
++ * field called "CallID", which serves us for the same purpose as the key
++ * field in plain GRE.
++ *
++ * Documentation about PPTP can be found in RFC 2637
++ *
++ * (C) 2000-2003 by Harald Welte <laforge@gnumonks.org>
++ *
++ * Development of this code funded by Astaro AG (http://www.astaro.com/)
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/ip.h>
++#include <linux/netfilter_ipv4/ip_nat.h>
++#include <linux/netfilter_ipv4/ip_nat_rule.h>
++#include <linux/netfilter_ipv4/ip_nat_protocol.h>
++#include <linux/netfilter_ipv4/ip_conntrack_proto_gre.h>
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("Netfilter NAT protocol helper module for GRE");
++
++#if 0
++#define DEBUGP(format, args...) printk(KERN_DEBUG __FILE__ ":" __FUNCTION__ \
++ ": " format, ## args)
++#else
++#define DEBUGP(x, args...)
++#endif
++
++/* is key in given range between min and max */
++static int
++gre_in_range(const struct ip_conntrack_tuple *tuple,
++ enum ip_nat_manip_type maniptype,
++ const union ip_conntrack_manip_proto *min,
++ const union ip_conntrack_manip_proto *max)
++{
++ u_int32_t key;
++
++ if (maniptype == IP_NAT_MANIP_SRC)
++ key = tuple->src.u.gre.key;
++ else
++ key = tuple->dst.u.gre.key;
++
++ return ntohl(key) >= ntohl(min->gre.key)
++ && ntohl(key) <= ntohl(max->gre.key);
++}
++
++/* generate unique tuple ... */
++static int
++gre_unique_tuple(struct ip_conntrack_tuple *tuple,
++ const struct ip_nat_range *range,
++ enum ip_nat_manip_type maniptype,
++ const struct ip_conntrack *conntrack)
++{
++ u_int32_t min, i, range_size;
++ u_int32_t key = 0, *keyptr;
++
++ if (maniptype == IP_NAT_MANIP_SRC)
++ keyptr = &tuple->src.u.gre.key;
++ else
++ keyptr = &tuple->dst.u.gre.key;
++
++ if (!(range->flags & IP_NAT_RANGE_PROTO_SPECIFIED)) {
++
++ switch (tuple->dst.u.gre.version) {
++ case 0:
++ DEBUGP("NATing GRE version 0 (ct=%p)\n",
++ conntrack);
++ min = 1;
++ range_size = 0xffffffff;
++ break;
++ case GRE_VERSION_PPTP:
++ DEBUGP("%p: NATing GRE PPTP\n",
++ conntrack);
++ min = 1;
++ range_size = 0xffff;
++ break;
++ default:
++ printk(KERN_WARNING "nat_gre: unknown GRE version\n");
++ return 0;
++ break;
++ }
++
++ } else {
++ min = ntohl(range->min.gre.key);
++ range_size = ntohl(range->max.gre.key) - min + 1;
++ }
++
++ DEBUGP("min = %u, range_size = %u\n", min, range_size);
++
++ for (i = 0; i < range_size; i++, key++) {
++ *keyptr = htonl(min + key % range_size);
++ if (!ip_nat_used_tuple(tuple, conntrack))
++ return 1;
++ }
++
++ DEBUGP("%p: no NAT mapping\n", conntrack);
++
++ return 0;
++}
++
++/* manipulate a GRE packet according to maniptype */
++static void
++gre_manip_pkt(struct iphdr *iph, size_t len,
++ const struct ip_conntrack_manip *manip,
++ enum ip_nat_manip_type maniptype)
++{
++ struct gre_hdr *greh = (struct gre_hdr *)((u_int32_t *)iph+iph->ihl);
++ struct gre_hdr_pptp *pgreh = (struct gre_hdr_pptp *) greh;
++
++ /* we only have destination manip of a packet, since 'source key'
++ * is not present in the packet itself */
++ if (maniptype == IP_NAT_MANIP_DST) {
++ /* key manipulation is always dest */
++ switch (greh->version) {
++ case 0:
++ if (!greh->key) {
++ DEBUGP("can't nat GRE w/o key\n");
++ break;
++ }
++ if (greh->csum) {
++ /* FIXME: Never tested this code... */
++ *(gre_csum(greh)) =
++ ip_nat_cheat_check(~*(gre_key(greh)),
++ manip->u.gre.key,
++ *(gre_csum(greh)));
++ }
++ *(gre_key(greh)) = manip->u.gre.key;
++ break;
++ case GRE_VERSION_PPTP:
++ DEBUGP("call_id -> 0x%04x\n",
++ ntohl(manip->u.gre.key));
++ pgreh->call_id = htons(ntohl(manip->u.gre.key));
++ break;
++ default:
++ DEBUGP("can't nat unknown GRE version\n");
++ break;
++ }
++ }
++}
++
++/* print out a nat tuple */
++static unsigned int
++gre_print(char *buffer,
++ const struct ip_conntrack_tuple *match,
++ const struct ip_conntrack_tuple *mask)
++{
++ unsigned int len = 0;
++
++ if (mask->dst.u.gre.version)
++ len += sprintf(buffer + len, "version=%d ",
++ ntohs(match->dst.u.gre.version));
++
++ if (mask->dst.u.gre.protocol)
++ len += sprintf(buffer + len, "protocol=0x%x ",
++ ntohs(match->dst.u.gre.protocol));
++
++ if (mask->src.u.gre.key)
++ len += sprintf(buffer + len, "srckey=0x%x ",
++ ntohl(match->src.u.gre.key));
++
++ if (mask->dst.u.gre.key)
++ len += sprintf(buffer + len, "dstkey=0x%x ",
++ ntohl(match->src.u.gre.key));
++
++ return len;
++}
++
++/* print a range of keys */
++static unsigned int
++gre_print_range(char *buffer, const struct ip_nat_range *range)
++{
++ if (range->min.gre.key != 0
++ || range->max.gre.key != 0xFFFF) {
++ if (range->min.gre.key == range->max.gre.key)
++ return sprintf(buffer, "key 0x%x ",
++ ntohl(range->min.gre.key));
++ else
++ return sprintf(buffer, "keys 0x%u-0x%u ",
++ ntohl(range->min.gre.key),
++ ntohl(range->max.gre.key));
++ } else
++ return 0;
++}
++
++/* nat helper struct */
++static struct ip_nat_protocol gre =
++ { { NULL, NULL }, "GRE", IPPROTO_GRE,
++ gre_manip_pkt,
++ gre_in_range,
++ gre_unique_tuple,
++ gre_print,
++ gre_print_range
++ };
++
++static int __init init(void)
++{
++ if (ip_nat_protocol_register(&gre))
++ return -EIO;
++
++ return 0;
++}
++
++static void __exit fini(void)
++{
++ ip_nat_protocol_unregister(&gre);
++}
++
++module_init(init);
++module_exit(fini);
diff --git a/packages/linux/linux-mtx-1_2.4.27.bb b/packages/linux/linux-mtx-1_2.4.27.bb
index e46c3c723d..512f3ac14d 100644
--- a/packages/linux/linux-mtx-1_2.4.27.bb
+++ b/packages/linux/linux-mtx-1_2.4.27.bb
@@ -36,12 +36,14 @@ SRC_URI = "cvs://cvs:cvs@ftp.linux-mips.org/home/cvs;module=linux;tag=linux_2_4_
file://27-usbd-amd-pb1x00-kit-23may2003-usbd.diff;patch=1 \
file://29-au1000-pci-config-clear-errors.diff;patch=1 \
file://42-usb-ohci-fixes.patch;patch=1 \
+ file://48-pptp.patch;patch=1 \
file://defconfig-mtx-1"
S = "${WORKDIR}/linux"
inherit kernel
+COMPATIBLE_MACHINE = "mtx-1"
COMPATIBLE_HOST = "mipsel.*-linux"
ARCH = "mips"
KERNEL_OUTPUT = "arch/mips/zboot/images/mtx-1.flash.bin"
diff --git a/packages/linux/linux-mtx-1u_2.4.27.bb b/packages/linux/linux-mtx-1u_2.4.27.bb
index 8ab1c5bbd1..00132f54cd 100644
--- a/packages/linux/linux-mtx-1u_2.4.27.bb
+++ b/packages/linux/linux-mtx-1u_2.4.27.bb
@@ -1,5 +1,7 @@
include linux-mtx-1_2.4.27.bb
+COMPATIBLE_MACHINE = "mtx-1u"
+
PR = "r11"
SRC_URI += "\
diff --git a/packages/linux/linux-mtx-2-2.4.27/45-acm-tty-and-sb2.patch b/packages/linux/linux-mtx-2-2.4.27/45-acm-tty-and-sb2.patch
new file mode 100644
index 0000000000..4561facb73
--- /dev/null
+++ b/packages/linux/linux-mtx-2-2.4.27/45-acm-tty-and-sb2.patch
@@ -0,0 +1,721 @@
+--- linux/drivers/usb/acm.c-orig 2007-04-13 18:32:16.352672105 +0200
++++ linux/drivers/usb/acm.c 2007-04-13 18:33:21.063526545 +0200
+@@ -124,6 +124,9 @@
+ #define ACM_CTRL_PARITY 0x20
+ #define ACM_CTRL_OVERRUN 0x40
+
++// some devices don't have one comm and one data interface, but only one interface with endpoints for comm and data
++#define SINGLE_IF_ACM 0x01
++
+ /*
+ * Line speed and caracter encoding.
+ */
+@@ -139,6 +142,8 @@
+ * Internal driver structures.
+ */
+
++#define TD_SIZE 16384
++
+ struct acm {
+ struct usb_device *dev; /* the coresponding usb device */
+ struct usb_interface *iface; /* the interfaces - +0 control +1 data */
+@@ -153,12 +158,23 @@
+ unsigned int minor; /* acm minor number */
+ unsigned char throttle; /* throttled by tty layer */
+ unsigned char clocal; /* termios CLOCAL */
++ unsigned long throttle_start;
++ unsigned char resubmit_to_unthrottle; /* Leftover data from last operation */
++ unsigned char *throttle_data;
++ int td_len;
++ int td_busy;
++ unsigned char used_interfaces;
++ struct semaphore mutex;
+ };
+
++#define mutex_lock(x) down(x)
++#define mutex_unlock(x) up(x)
++
+ /* global params controlling max sizes for read, write, control */
+ static int maxszr = 0;
+ static int maxszw = 0;
+ static int maxszc = 0;
++static int nonlegacy = 0;
+
+ static struct usb_driver acm_driver;
+ static struct tty_driver acm_tty_driver;
+@@ -167,6 +183,95 @@
+ #define ACM_READY(acm) (acm && acm->dev && acm->used)
+
+ /*
++ * Helper functions to optimize throttleing
++ */
++static int
++acm_fill_tty(struct urb *urb, struct tty_struct *tty, unsigned char *data, int length)
++{
++ struct acm *acm = urb->context;
++ int n = 0;
++ /*printk("acm_fill_tty: %d bytes\n", length);*/
++ if (!urb->status && !acm->throttle) {
++ for (n = 0; n < length && !acm->throttle; n++) {
++ /* if we insert more than TTY_FLIPBUF_SIZE characters,
++ * we drop them. */
++ if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
++ tty_flip_buffer_push(tty);
++ }
++ tty_insert_flip_char(tty, data[n], 0);
++ }
++ tty_flip_buffer_push(tty);
++ }
++ /*printk("copied %d bytes.\n", n);*/
++ return n;
++}
++
++static int
++acm_shift_if_throttle(unsigned char *data, int *length, int shift_by)
++{
++ if (shift_by < *length) {
++ dbg("need to shift uncopied %d bytes to front.", *length - shift_by);
++ memmove(data, data + shift_by, *length - shift_by);
++ *length -= shift_by;
++ return 1;
++ }
++ return 0;
++}
++
++static int
++acm_buffer_if_thottle(struct acm *acm, unsigned char *data, int start, int *length)
++{
++ int copied = *length;
++ if (start < *length) {
++ int space = TD_SIZE - acm->td_len;
++ int needed = *length - start;
++ copied = (space < needed)? space: needed;
++ dbg("need to push %d to throttle buffer, can copy %d.",
++ needed, copied);
++ memcpy(acm->throttle_data + acm->td_len, data, copied);
++ acm->td_len += copied;
++ *length -= copied;
++ }
++ return copied;
++}
++
++static int
++acm_empty_throttle(struct urb *urb, struct tty_struct *tty)
++{
++ unsigned long flags;
++ struct acm *acm = urb->context;
++
++ save_flags(flags);
++ cli();
++
++ if (acm->td_busy) {
++ restore_flags(flags);
++ return 0;
++ }
++ acm->td_busy = 1;
++ restore_flags(flags);
++
++ if (acm->td_len > 0) {
++
++ dbg("acm_empty_throttle: trying to empty throttle buffer: %d bytes.",
++ acm->td_len);
++
++ /* if there has been something left from previous operations
++ * we try to complete this before looking at the urb */
++ int copied = acm_fill_tty(urb, tty, acm->throttle_data, acm->td_len);
++ if (acm_shift_if_throttle(acm->throttle_data, &acm->td_len, copied)) {
++ /* we were unable to empty the throttle data, so we can't
++ * copy anything more now */
++ acm->td_busy = 0;
++ return 0;
++ }
++ acm->td_len = 0;
++ }
++ acm->td_busy = 0;
++ return 1;
++}
++
++/*
+ * Functions for ACM control messages.
+ */
+
+@@ -174,7 +279,10 @@
+ {
+ int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
+ request, USB_RT_ACM, value, acm->iface[0].altsetting[0].bInterfaceNumber, buf, len, HZ * 5);
+- dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
++ if (retval < 0)
++ err("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
++ else
++ dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
+ return retval < 0 ? retval : 0;
+ }
+
+@@ -191,10 +299,12 @@
+ struct acm *acm = urb->context;
+ struct usb_ctrlrequest *dr = urb->transfer_buffer;
+ unsigned char *data = (unsigned char *)(dr + 1);
+- int newctrl;
++ int newctrl, s1, s2;
+
+ if (!ACM_READY(acm)) return;
+
++ //err("acm_ctrl_irq %p %i", urb, dr->bRequestType);
++
+ if (urb->status < 0) {
+ dbg("nonzero ctrl irq status received: %d", urb->status);
+ return;
+@@ -226,8 +336,15 @@
+
+ return;
+
++ case 0x2a:
++ s1 = le32_to_cpup((__u32 *) data);
++ s2 = le32_to_cpup((__u32 *) (data+4));
++
++ dbg("acm.c: ctrl 0x2a: idx %i len %i speed %i %i", dr->wIndex, dr->wLength, s1, s2);
++ return;
++
+ default:
+- dbg("unknown control event received: request %d index %d len %d data0 %d data1 %d",
++ err("unknown control event received: request %d index %d len %d data0 %d data1 %d",
+ dr->bRequest, dr->wIndex, dr->wLength, data[0], data[1]);
+ return;
+ }
+@@ -238,36 +355,39 @@
+ struct acm *acm = urb->context;
+ struct tty_struct *tty = acm->tty;
+ unsigned char *data = urb->transfer_buffer;
+- int i = 0;
++ int copied = 0;
++ int buffered = 0;
+
+ if (!ACM_READY(acm)) return;
+
+- if (urb->status)
+- dbg("nonzero read bulk status received: %d", urb->status);
++ if (urb->status) {
++ err("nonzero read bulk status received: %d", urb->status);
++ }
+
+- if (!urb->status && !acm->throttle) {
+- for (i = 0; i < urb->actual_length && !acm->throttle; i++) {
+- /* if we insert more than TTY_FLIPBUF_SIZE characters,
+- * we drop them. */
+- if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
+- tty_flip_buffer_push(tty);
+- }
+- tty_insert_flip_char(tty, data[i], 0);
+- }
+- tty_flip_buffer_push(tty);
++ if (!acm_empty_throttle(urb, tty)) {
++ dbg("could not empty throttle buffer, entering throttle state, acm->td_busy: %d.", acm->td_busy);
+ }
+
++ /* got here, either there was nothing in the throttle data or it could
++ * all be copied without throttleing again */
++ copied = acm_fill_tty(urb, tty, data, urb->actual_length);
+ if (acm->throttle) {
+- memmove(data, data + i, urb->actual_length - i);
+- urb->actual_length -= i;
+- return;
++ int length = urb->actual_length;
++ buffered = acm_buffer_if_thottle(acm, data, copied, &urb->actual_length);
++ if (buffered < length - copied
++ && acm_shift_if_throttle(data, &urb->actual_length, copied + buffered)) {
++ dbg("need to resubmit to unthrottle\n");
++ acm->resubmit_to_unthrottle = 1;
++ return;
++ }
+ }
+
+ urb->actual_length = 0;
+ urb->dev = acm->dev;
+
+- if (usb_submit_urb(urb))
++ if (usb_submit_urb(urb)) {
+ dbg("failed resubmitting read urb");
++ }
+ }
+
+ static void acm_write_bulk(struct urb *urb)
+@@ -283,6 +403,9 @@
+ mark_bh(IMMEDIATE_BH);
+ }
+
++static int unlinking_in_progress=0;
++static int closing=0;
++
+ static void acm_softint(void *private)
+ {
+ struct acm *acm = private;
+@@ -306,34 +429,57 @@
+
+ if (!acm || !acm->dev) return -EINVAL;
+
++ mutex_lock (&acm->mutex);
++
+ tty->driver_data = acm;
+ acm->tty = tty;
+
+ MOD_INC_USE_COUNT;
+
+- lock_kernel();
++ if ( closing )
++ err("acm_tty_open: potential possibility of race condition detected");
++
++ if ( unlinking_in_progress ) {
++ err("acm_tty_open: cannot open because unlinking_in_progress %i", acm->used);
++ mutex_unlock (&acm->mutex);
++ return -1;
++ }
+
+- if (acm->used++) {
+- unlock_kernel();
+- return 0;
+- }
++ if (acm->used) {
++ acm->used++;
++ mutex_unlock (&acm->mutex);
++ return 0;
++ }
+
+- unlock_kernel();
++ unlinking_in_progress=1;
++ err("acm_tty_open: %i %p !!", acm->used, tty);
++
++ acm->resubmit_to_unthrottle = 0;
++ acm->td_len = 0;
++ acm->td_busy = 0;
+
+ acm->ctrlurb.dev = acm->dev;
+ if (usb_submit_urb(&acm->ctrlurb))
+- dbg("usb_submit_urb(ctrl irq) failed");
++ dbg("acm open: usb_submit_urb(ctrl irq) failed");
++ else
++ dbg("acm open: ctrlurb %p submitted", &acm->ctrlurb);
++
++ acm->used++;
++ acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS);
+
+ acm->readurb.dev = acm->dev;
+ if (usb_submit_urb(&acm->readurb))
+- dbg("usb_submit_urb(read bulk) failed");
+-
+- acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS);
++ dbg("acm open: usb_submit_urb(read bulk) failed");
++ else
++ dbg("acm open: readurb %p submitted", &acm->readurb);
+
+- /* force low_latency on so that our tty_push actually forces the data through,
++ /* force low_latency on so that our tty_push actually forces the data through,
+ otherwise it is scheduled, and with high data rates data can get lost. */
+ tty->low_latency = 1;
+
++ unlinking_in_progress=0;
++ mutex_unlock (&acm->mutex);
++
+ return 0;
+ }
+
+@@ -343,19 +489,35 @@
+
+ if (!acm || !acm->used) return;
+
+- if (!--acm->used) {
+- if (acm->dev) {
+- acm_set_control(acm, acm->ctrlout = 0);
+- usb_unlink_urb(&acm->ctrlurb);
+- usb_unlink_urb(&acm->writeurb);
+- usb_unlink_urb(&acm->readurb);
+- } else {
+- tty_unregister_devfs(&acm_tty_driver, acm->minor);
+- acm_table[acm->minor] = NULL;
+- kfree(acm);
+- }
++ mutex_lock (&acm->mutex);
++
++ closing = 1;
++ if (--acm->used) {
++ closing=0;
++ MOD_DEC_USE_COUNT;
++ mutex_unlock (&acm->mutex);
++ return;
++ }
++ unlinking_in_progress = 1;
++
++ err("acm_tty_close: %i %p", acm->used, tty);
++
++ if (acm->dev) {
++ acm_set_control(acm, acm->ctrlout = 0);
++ usb_unlink_urb(&acm->ctrlurb);
++ usb_unlink_urb(&acm->writeurb);
++ usb_unlink_urb(&acm->readurb);
++ } else {
++ tty_unregister_devfs(&acm_tty_driver, acm->minor);
++ acm_table[acm->minor] = NULL;
++ kfree(acm->throttle_data);
++ kfree(acm);
+ }
++
++ closing=0;
++ unlinking_in_progress = 0;
+ MOD_DEC_USE_COUNT;
++ mutex_unlock (&acm->mutex);
+ }
+
+ static int acm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
+@@ -363,8 +525,16 @@
+ struct acm *acm = tty->driver_data;
+
+ if (!ACM_READY(acm)) return -EINVAL;
+- if (acm->writeurb.status == -EINPROGRESS) return 0;
+- if (!count) return 0;
++
++ if (acm->writeurb.status == -EINPROGRESS) {
++ dbg("tty_write in progress");
++ return 0;
++ }
++
++ if (!count) {
++ dbg("tty_write: nothing to write");
++ return 0;
++ }
+
+ count = (count > acm->writesize) ? acm->writesize : count;
+
+@@ -401,22 +571,44 @@
+ {
+ struct acm *acm = tty->driver_data;
+ if (!ACM_READY(acm)) return;
++ dbg("acm_tty_throttle ON %ld ---> %ld", jiffies-acm->throttle_start, jiffies);
+ acm->throttle = 1;
++ acm->throttle_start = jiffies;
+ }
+
+ static void acm_tty_unthrottle(struct tty_struct *tty)
+ {
+ struct acm *acm = tty->driver_data;
+ if (!ACM_READY(acm)) return;
++ dbg("acm_tty_throttle OFF %ld ---> %ld", jiffies, jiffies-acm->throttle_start);
+ acm->throttle = 0;
+- if (acm->readurb.status != -EINPROGRESS)
++
++ if (!acm_empty_throttle(&acm->readurb, tty)) {
++ if (acm->td_busy) {
++ printk("***** pending acm_empty_throttle!\n");
++ } else {
++ dbg("throttle not emptied.\n");
++ }
++ }
++
++ if (acm->resubmit_to_unthrottle != 0) {
++ dbg("resubmit_to_unthrottle: acm_read_bulk");
++ acm->resubmit_to_unthrottle = 0;
+ acm_read_bulk(&acm->readurb);
++ }
+ }
+
+ static void acm_tty_break_ctl(struct tty_struct *tty, int state)
+ {
+ struct acm *acm = tty->driver_data;
++
+ if (!ACM_READY(acm)) return;
++
++ if (nonlegacy) {
++ err("non-legacy port, skipping acm_tty_break_ctl");
++ return;
++ }
++
+ if (acm_send_break(acm, state ? 0xffff : 0))
+ dbg("send break failed");
+ }
+@@ -455,7 +647,19 @@
+ case TIOCMBIC: newctrl &= ~mask; break;
+ }
+
+- if (acm->ctrlout == newctrl) return 0;
++ if (acm->ctrlout == newctrl) {
++ dbg("acm_tty_ioctl: set old state %x", newctrl);
++ return 0;
++ }
++
++ err("acm_tty_ioctl: %s%s%s -> dtr%s rts%s (%lx)",
++ cmd==TIOCMBIC?"Clear":(cmd==TIOCMBIS?"Set":"SET"),
++ mask & ACM_CTRL_DTR ? " DTR":"",
++ mask & ACM_CTRL_RTS ? " RTS":"",
++ newctrl & ACM_CTRL_DTR ? "+":"-",
++ newctrl & ACM_CTRL_RTS ? "+":"-",
++ arg);
++
+ return acm_set_control(acm, acm->ctrlout = newctrl);
+ }
+
+@@ -483,6 +687,12 @@
+
+ if (!ACM_READY(acm)) return;
+
++ if (nonlegacy) {
++ acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
++ dbg("non-legacy port, skipping acm_tty_set_termios");
++ return;
++ }
++
+ newline.speed = cpu_to_le32p(acm_tty_speed +
+ (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
+ newline.stopbits = termios->c_cflag & CSTOPB ? 2 : 0;
+@@ -518,34 +727,64 @@
+ struct usb_config_descriptor *cfacm;
+ struct usb_interface_descriptor *ifcom, *ifdata;
+ struct usb_endpoint_descriptor *epctrl, *epread, *epwrite;
+- int readsize, ctrlsize, minor, i, j;
++ int readsize, ctrlsize, minor, i;
+ unsigned char *buf;
++ unsigned char used_interfaces=2;
+
+ for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
+
+ cfacm = dev->config + i;
+
+- dbg("probing config %d", cfacm->bConfigurationValue);
++ ifcom = cfacm->interface[ifnum].altsetting + 0;
++
++ if (id->driver_info == SINGLE_IF_ACM) {
++ printk("using single_if_acm\n");
++ struct usb_endpoint_descriptor *ep=ifcom->endpoint;
++ int k;
++
++ if (ifcom->bNumEndpoints != 3) {
++ continue;
++ }
++
++ epctrl = epread = epwrite = NULL;
++ for (k=0; k<3; ++k, ++ep) {
++ if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT &&
++ (ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ epctrl = ep;
++ } else if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK &&
++ (ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ epread = ep;
++ } else if ( (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK) {
++ epwrite = ep;
++ }
++ }
+
+- for (j = 0; j < cfacm->bNumInterfaces - 1; j++) {
++ if ( !epctrl || !epread || !epwrite ) {
++ dbg("SINGLE_IF_ACM acm_probe inv eps epctrl %s epread %s epwrite %s", epctrl?"ok":"missing",
++ epread?"ok":"missing", epwrite?"ok":"missing");
++ dbg("SINGLE_IF_ACM Invalid enpoint configuration");
++ continue;
++ }
+
+- if (usb_interface_claimed(cfacm->interface + j) ||
+- usb_interface_claimed(cfacm->interface + j + 1))
++ used_interfaces = 1;
++ } else {
++ if ((ifnum+1)>=cfacm->bNumInterfaces || usb_interface_claimed(cfacm->interface + ifnum + 1)) {
++ // no data interface available
+ continue;
++ }
+
+- ifcom = cfacm->interface[j].altsetting + 0;
+- ifdata = cfacm->interface[j + 1].altsetting + 0;
++ ifdata = cfacm->interface[ifnum + 1].altsetting + 0;
+
+ if (ifdata->bInterfaceClass != 10 || ifdata->bNumEndpoints < 2) {
+- ifcom = cfacm->interface[j + 1].altsetting + 0;
+- ifdata = cfacm->interface[j].altsetting + 0;
++ ifcom = cfacm->interface[ifnum + 1].altsetting + 0;
++ ifdata = cfacm->interface[ifnum].altsetting + 0;
+ if (ifdata->bInterfaceClass != 10 || ifdata->bNumEndpoints < 2)
+ continue;
+ }
+
+ if (ifcom->bInterfaceClass != 2 || ifcom->bInterfaceSubClass != 2 ||
+- ifcom->bInterfaceProtocol < 1 || ifcom->bInterfaceProtocol > 6 ||
+- ifcom->bNumEndpoints < 1)
++ ifcom->bInterfaceProtocol < 1 || ifcom->bInterfaceProtocol > 6 ||
++ ifcom->bNumEndpoints < 1)
+ continue;
+
+ epctrl = ifcom->endpoint + 0;
+@@ -553,76 +792,86 @@
+ epwrite = ifdata->endpoint + 1;
+
+ if ((epctrl->bEndpointAddress & 0x80) != 0x80 || (epctrl->bmAttributes & 3) != 3 ||
+- (epread->bmAttributes & 3) != 2 || (epwrite->bmAttributes & 3) != 2 ||
+- ((epread->bEndpointAddress & 0x80) ^ (epwrite->bEndpointAddress & 0x80)) != 0x80)
++ (epread->bmAttributes & 3) != 2 || (epwrite->bmAttributes & 3) != 2 ||
++ ((epread->bEndpointAddress & 0x80) ^ (epwrite->bEndpointAddress & 0x80)) != 0x80)
+ continue;
+
+- dbg("using interface %d\n", j);
+-
+ if ((epread->bEndpointAddress & 0x80) != 0x80) {
+ epread = ifdata->endpoint + 1;
+ epwrite = ifdata->endpoint + 0;
+ }
++ }
+
+- usb_set_configuration(dev, cfacm->bConfigurationValue);
++ usb_set_configuration(dev, cfacm->bConfigurationValue);
+
+- for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
+- if (acm_table[minor]) {
+- err("no more free acm devices");
+- return NULL;
+- }
++ for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
++ if (acm_table[minor]) {
++ err("no more free acm devices");
++ return NULL;
++ }
+
+- if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) {
+- err("out of memory");
+- return NULL;
+- }
+- memset(acm, 0, sizeof(struct acm));
++ if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) {
++ err("out of memory");
++ return NULL;
++ }
++ memset(acm, 0, sizeof(struct acm));
+
+- ctrlsize = (epctrl->wMaxPacketSize > maxszc)?
+- epctrl->wMaxPacketSize: maxszc;
+- readsize = (epread->wMaxPacketSize > maxszr)?
+- epread->wMaxPacketSize: maxszr;
+- acm->writesize = (epwrite->wMaxPacketSize > maxszw)?
+- epwrite->wMaxPacketSize: maxszw;
+-
+- acm->iface = cfacm->interface + j;
+- acm->minor = minor;
+- acm->dev = dev;
+-
+- acm->tqueue.routine = acm_softint;
+- acm->tqueue.data = acm;
+-
+- if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) {
+- err("out of memory");
+- kfree(acm);
+- return NULL;
+- }
++ ctrlsize = (epctrl->wMaxPacketSize > maxszc)?
++ epctrl->wMaxPacketSize: maxszc;
++ readsize = (epread->wMaxPacketSize > maxszr)?
++ epread->wMaxPacketSize: maxszr;
++ acm->writesize = (epwrite->wMaxPacketSize > maxszw)?
++ epwrite->wMaxPacketSize: maxszw;
++
++ init_MUTEX (&acm->mutex);
++ if (!(acm->throttle_data = kmalloc(TD_SIZE * sizeof (*acm->throttle_data), GFP_KERNEL))) {
++ err("out of memory (throttle_data)");
++ kfree(acm);
++ return NULL;
++ }
++ acm->iface = cfacm->interface + ifnum;
++ acm->minor = minor;
++ acm->dev = dev;
+
+- FILL_INT_URB(&acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress),
+- buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
++ acm->used_interfaces = used_interfaces;
+
+- FILL_BULK_URB(&acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress),
+- buf += ctrlsize, readsize, acm_read_bulk, acm);
+- acm->readurb.transfer_flags |= USB_NO_FSBR;
++ acm->tqueue.routine = acm_softint;
++ acm->tqueue.data = acm;
+
+- FILL_BULK_URB(&acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress),
+- buf += readsize, acm->writesize, acm_write_bulk, acm);
+- acm->writeurb.transfer_flags |= USB_NO_FSBR;
++ if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) {
++ err("out of memory (urb buf)");
++ kfree(acm);
++ return NULL;
++ }
+
+- printk(KERN_INFO "ttyACM%d: USB ACM device\n", minor);
++ FILL_INT_URB(&acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress),
++ buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
+
+- acm_set_control(acm, acm->ctrlout);
++ FILL_BULK_URB(&acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress),
++ buf += ctrlsize, readsize, acm_read_bulk, acm);
++ acm->readurb.transfer_flags |= USB_NO_FSBR;
+
+- acm->line.speed = cpu_to_le32(9600);
+- acm->line.databits = 8;
+- acm_set_line(acm, &acm->line);
++ FILL_BULK_URB(&acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress),
++ buf += readsize, acm->writesize, acm_write_bulk, acm);
++ acm->writeurb.transfer_flags |= USB_NO_FSBR;
+
+- usb_driver_claim_interface(&acm_driver, acm->iface + 0, acm);
+- usb_driver_claim_interface(&acm_driver, acm->iface + 1, acm);
++ printk(KERN_INFO "ttyACM%d: USB ACM device C %p W %p R %p %x\n", minor, &acm->ctrlurb,
++ &acm->writeurb, &acm->readurb, acm->ctrlout);
++
++ acm_set_control(acm, acm->ctrlout);
+
+- tty_register_devfs(&acm_tty_driver, 0, minor);
+- return acm_table[minor] = acm;
++ acm->line.speed = cpu_to_le32(9600);
++ acm->line.databits = 8;
++ acm_set_line(acm, &acm->line);
++
++ if ( acm->used_interfaces == 2 ) {
++ // only just checked interface is claimed automatically, so claim data interface too
++ usb_driver_claim_interface(&acm_driver, acm->iface + 1, acm);
+ }
++
++ tty_register_devfs(&acm_tty_driver, 0, minor);
++
++ return acm_table[minor] = acm;
+ }
+
+ return NULL;
+@@ -646,7 +895,9 @@
+ kfree(acm->ctrlurb.transfer_buffer);
+
+ usb_driver_release_interface(&acm_driver, acm->iface + 0);
+- usb_driver_release_interface(&acm_driver, acm->iface + 1);
++ if ( acm->used_interfaces == 2 ) {
++ usb_driver_release_interface(&acm_driver, acm->iface + 1);
++ }
+
+ if (!acm->used) {
+ tty_unregister_devfs(&acm_tty_driver, acm->minor);
+@@ -665,6 +916,9 @@
+
+ static struct usb_device_id acm_ids[] = {
+ { USB_DEVICE(0x22B8, 0x1005) }, /* Motorola TimePort 280 */
++ { USB_DEVICE(0x05C6, 0x7001), driver_info: SINGLE_IF_ACM }, /* Siemens HC15/HC25 */
++ { USB_DEVICE(0x0681, 0x003e), driver_info: SINGLE_IF_ACM }, /* Siemens HC15/HC25 */
++ { USB_DEVICE(0x22B8, 0x1006) },
+ { USB_DEVICE_INFO(USB_CLASS_COMM, 0, 0) },
+ { USB_DEVICE_INFO(USB_CLASS_COMM, 2, 0) },
+ { }
+@@ -735,7 +989,7 @@
+ return -1;
+ }
+
+- info(DRIVER_VERSION ":" DRIVER_DESC);
++ info(DRIVER_VERSION ":" DRIVER_DESC "(non-legacy %d)", nonlegacy);
+
+ return 0;
+ }
+@@ -759,7 +1013,9 @@
+ MODULE_PARM(maxszc, "i");
+ MODULE_PARM_DESC(maxszc, "User specified USB endpoint control size");
+
++MODULE_PARM(nonlegacy, "i");
++MODULE_PARM_DESC(nonlegacy, "Set this to 1 to for use with non-legacy device");
++
+ MODULE_AUTHOR( DRIVER_AUTHOR );
+ MODULE_DESCRIPTION( DRIVER_DESC );
+ MODULE_LICENSE("GPL");
+-
diff --git a/packages/linux/linux-mtx-2-2.4.27/45-acm-tty.patch b/packages/linux/linux-mtx-2-2.4.27/45-acm-tty.patch
deleted file mode 100644
index 028d10ad9a..0000000000
--- a/packages/linux/linux-mtx-2-2.4.27/45-acm-tty.patch
+++ /dev/null
@@ -1,252 +0,0 @@
---- linux/drivers/usb/acm.c~45-acm-tty.patch 2006-06-07 11:21:21.648422000 +0200
-+++ linux/drivers/usb/acm.c 2006-06-09 17:20:51.735793750 +0200
-@@ -139,6 +139,8 @@
- * Internal driver structures.
- */
-
-+#define TD_SIZE 16384
-+
- struct acm {
- struct usb_device *dev; /* the coresponding usb device */
- struct usb_interface *iface; /* the interfaces - +0 control +1 data */
-@@ -153,6 +155,11 @@
- unsigned int minor; /* acm minor number */
- unsigned char throttle; /* throttled by tty layer */
- unsigned char clocal; /* termios CLOCAL */
-+ unsigned long throttle_start;
-+ unsigned char resubmit_to_unthrottle; /* Leftover data from last operation */
-+ unsigned char *throttle_data;
-+ int td_len;
-+ int td_busy;
- };
-
- /* global params controlling max sizes for read, write, control */
-@@ -166,6 +173,96 @@
-
- #define ACM_READY(acm) (acm && acm->dev && acm->used)
-
-+
-+/*
-+ * Helper functions to optimize throttleing
-+ */
-+static int
-+acm_fill_tty(struct urb *urb, struct tty_struct *tty, unsigned char *data, int length)
-+{
-+ struct acm *acm = urb->context;
-+ int n = 0;
-+ /*printk("acm_fill_tty: %d bytes\n", length);*/
-+ if (!urb->status && !acm->throttle) {
-+ for (n = 0; n < length && !acm->throttle; n++) {
-+ /* if we insert more than TTY_FLIPBUF_SIZE characters,
-+ * we drop them. */
-+ if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
-+ tty_flip_buffer_push(tty);
-+ }
-+ tty_insert_flip_char(tty, data[n], 0);
-+ }
-+ tty_flip_buffer_push(tty);
-+ }
-+ /*printk("copied %d bytes.\n", n);*/
-+ return n;
-+}
-+
-+static int
-+acm_shift_if_throttle(unsigned char *data, int *length, int shift_by)
-+{
-+ if (shift_by < *length) {
-+ dbg("need to shift uncopied %d bytes to front.", *length - shift_by);
-+ memmove(data, data + shift_by, *length - shift_by);
-+ *length -= shift_by;
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+static int
-+acm_buffer_if_thottle(struct acm *acm, unsigned char *data, int start, int *length)
-+{
-+ int copied = *length;
-+ if (start < *length) {
-+ int space = TD_SIZE - acm->td_len;
-+ int needed = *length - start;
-+ copied = (space < needed)? space: needed;
-+ dbg("need to push %d to throttle buffer, can copy %d.",
-+ needed, copied);
-+ memcpy(acm->throttle_data + acm->td_len, data, copied);
-+ acm->td_len += copied;
-+ *length -= copied;
-+ }
-+ return copied;
-+}
-+
-+static int
-+acm_empty_throttle(struct urb *urb, struct tty_struct *tty)
-+{
-+ unsigned long flags;
-+ struct acm *acm = urb->context;
-+
-+ save_flags(flags);
-+ cli();
-+
-+ if (acm->td_busy) {
-+ restore_flags(flags);
-+ return 0;
-+ }
-+ acm->td_busy = 1;
-+ restore_flags(flags);
-+
-+ if (acm->td_len > 0) {
-+
-+ dbg("acm_empty_throttle: trying to empty throttle buffer: %d bytes.",
-+ acm->td_len);
-+
-+ /* if there has been something left from previous operations
-+ * we try to complete this before looking at the urb */
-+ int copied = acm_fill_tty(urb, tty, acm->throttle_data, acm->td_len);
-+ if (acm_shift_if_throttle(acm->throttle_data, &acm->td_len, copied)) {
-+ /* we were unable to empty the throttle data, so we can't
-+ * copy anything more now */
-+ acm->td_busy = 0;
-+ return 0;
-+ }
-+ acm->td_len = 0;
-+ }
-+ acm->td_busy = 0;
-+ return 1;
-+}
-+
- /*
- * Functions for ACM control messages.
- */
-@@ -238,36 +335,40 @@
- struct acm *acm = urb->context;
- struct tty_struct *tty = acm->tty;
- unsigned char *data = urb->transfer_buffer;
-- int i = 0;
-+ int copied = 0;
-+ int buffered = 0;
-
- if (!ACM_READY(acm)) return;
-
-- if (urb->status)
-+ if (urb->status) {
- dbg("nonzero read bulk status received: %d", urb->status);
-+ }
-
-- if (!urb->status && !acm->throttle) {
-- for (i = 0; i < urb->actual_length && !acm->throttle; i++) {
-- /* if we insert more than TTY_FLIPBUF_SIZE characters,
-- * we drop them. */
-- if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
-- tty_flip_buffer_push(tty);
-- }
-- tty_insert_flip_char(tty, data[i], 0);
-- }
-- tty_flip_buffer_push(tty);
-+ dbg("acm_read_bulk, calling acm_empty_throttle()");
-+ if (!acm_empty_throttle(urb, tty)) {
-+ dbg("could not empty throttle buffer, entering throttle state, acm->td_busy: %d.", acm->td_busy);
- }
-
-+ /* got here, either there was nothing in the throttle data or it could
-+ * all be copied without throttleing again */
-+ copied = acm_fill_tty(urb, tty, data, urb->actual_length);
- if (acm->throttle) {
-- memmove(data, data + i, urb->actual_length - i);
-- urb->actual_length -= i;
-- return;
-+ int length = urb->actual_length;
-+ buffered = acm_buffer_if_thottle(acm, data, copied, &urb->actual_length);
-+ if (buffered < length - copied
-+ && acm_shift_if_throttle(data, &urb->actual_length, copied + buffered)) {
-+ printk("need to resubmit to unthrottle\n");
-+ acm->resubmit_to_unthrottle = 1;
-+ return;
-+ }
- }
-
- urb->actual_length = 0;
- urb->dev = acm->dev;
-
-- if (usb_submit_urb(urb))
-+ if (usb_submit_urb(urb)) {
- dbg("failed resubmitting read urb");
-+ }
- }
-
- static void acm_write_bulk(struct urb *urb)
-@@ -330,7 +431,12 @@
-
- acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS);
-
-- /* force low_latency on so that our tty_push actually forces the data through,
-+ acm->resubmit_to_unthrottle = 0;
-+ acm->td_len = 0;
-+ acm->td_busy = 0;
-+ acm->throttle_data = kmalloc(TD_SIZE * sizeof (*acm->throttle_data), GFP_KERNEL);
-+
-+ /* force low_latency on so that our tty_push actually forces the data through,
- otherwise it is scheduled, and with high data rates data can get lost. */
- tty->low_latency = 1;
-
-@@ -352,6 +458,7 @@
- } else {
- tty_unregister_devfs(&acm_tty_driver, acm->minor);
- acm_table[acm->minor] = NULL;
-+ kfree(acm->throttle_data);
- kfree(acm);
- }
- }
-@@ -363,8 +470,16 @@
- struct acm *acm = tty->driver_data;
-
- if (!ACM_READY(acm)) return -EINVAL;
-- if (acm->writeurb.status == -EINPROGRESS) return 0;
-- if (!count) return 0;
-+
-+ if (acm->writeurb.status == -EINPROGRESS) {
-+ dbg("tty_write in progress");
-+ return 0;
-+ }
-+
-+ if (!count) {
-+ dbg("tty_write: nothing to write");
-+ return 0;
-+ }
-
- count = (count > acm->writesize) ? acm->writesize : count;
-
-@@ -401,16 +516,32 @@
- {
- struct acm *acm = tty->driver_data;
- if (!ACM_READY(acm)) return;
-+ dbg("acm_tty_throttle ON %ld ---> %ld", jiffies-acm->throttle_start, jiffies);
- acm->throttle = 1;
-+ acm->throttle_start = jiffies;
- }
-
- static void acm_tty_unthrottle(struct tty_struct *tty)
- {
- struct acm *acm = tty->driver_data;
- if (!ACM_READY(acm)) return;
-+ dbg("acm_tty_throttle OFF %ld ---> %ld", jiffies, jiffies-acm->throttle_start);
- acm->throttle = 0;
-- if (acm->readurb.status != -EINPROGRESS)
-+
-+ dbg("acm_tty_unthrottle, calling acm_empty_throttle()");
-+ if (!acm_empty_throttle(&acm->readurb, tty)) {
-+ if (acm->td_busy) {
-+ printk("***** pending acm_empty_throttle!\n");
-+ } else {
-+ dbg("throttle not emptied.\n");
-+ }
-+ }
-+
-+ if (acm->resubmit_to_unthrottle != 0) {
-+ dbg("resubmit_to_unthrottle: acm_read_bulk");
-+ acm->resubmit_to_unthrottle = 0;
- acm_read_bulk(&acm->readurb);
-+ }
- }
-
- static void acm_tty_break_ctl(struct tty_struct *tty, int state)
diff --git a/packages/linux/linux-mtx-2_2.4.27.bb b/packages/linux/linux-mtx-2_2.4.27.bb
index 83769faf95..29c938a5c4 100644
--- a/packages/linux/linux-mtx-2_2.4.27.bb
+++ b/packages/linux/linux-mtx-2_2.4.27.bb
@@ -39,7 +39,7 @@ SRC_URI += "cvs://cvs:cvs@ftp.linux-mips.org/home/cvs;module=linux;tag=linux_2_4
file://42-usb-ohci-fixes.patch;patch=1 \
file://43-usbserial-27-32-backport.diff;patch=1 \
file://44-dbdma-and-au1550_psc.diff;patch=1 \
- file://45-acm-tty.patch;patch=1 \
+ file://45-acm-tty-and-sb2.patch;patch=1 \
file://46-otg.patch;patch=1 \
file://47-au1000_eth.patch;patch=1 \
file://48-pptp.patch;patch=1 \
@@ -51,6 +51,7 @@ S = "${WORKDIR}/linux"
inherit kernel
+COMPATIBLE_MACHINE = "mtx-2"
COMPATIBLE_HOST = "mipsel.*-linux"
ARCH = "mips"
KERNEL_OUTPUT = "arch/mips/zboot/images/mtx-2.flash.bin"
diff --git a/packages/linux/linux-mtx-3_2.6.15.4.bb b/packages/linux/linux-mtx-3_2.6.15.4.bb
index fe523c879c..1bddcfdd3b 100644
--- a/packages/linux/linux-mtx-3_2.6.15.4.bb
+++ b/packages/linux/linux-mtx-3_2.6.15.4.bb
@@ -1,5 +1,4 @@
DESCRIPTION = "Linux kernel for MTX-3 (Surfbox3)"
-MAINTAINER = "Bruno Randolf <bruno.randolf@4g-systems.biz>"
HOMEPAGE = "http://meshcube.org/meshwiki/"
LICENSE = "GPL"
KV = "${PV}"
diff --git a/packages/linux/linux-mtx-3_2.6.15.bb b/packages/linux/linux-mtx-3_2.6.15.bb
index a5ea530425..3dba1fe6a0 100644
--- a/packages/linux/linux-mtx-3_2.6.15.bb
+++ b/packages/linux/linux-mtx-3_2.6.15.bb
@@ -1,5 +1,4 @@
DESCRIPTION = "Linux kernel for MTX-3 (Surfbox3)"
-MAINTAINER = "Bruno Randolf <bruno.randolf@4g-systems.biz>"
HOMEPAGE = "http://meshcube.org/meshwiki/"
LICENSE = "GPL"
KV = "${PV}"
@@ -18,6 +17,7 @@ S = "${WORKDIR}/linux"
inherit kernel
+COMPATIBLE_MACHINE = "mtx-3"
COMPATIBLE_HOST = "arm.*-linux"
ARCH = "arm"
KERNEL_OUTPUT = "arch/arm/zboot/images/mtx-3.flash.bin"
diff --git a/packages/linux/linux-netvista-2.4.27/netvista_defconfig b/packages/linux/linux-netvista-2.4.27/netvista_defconfig
deleted file mode 100644
index 1e7e5c25ba..0000000000
--- a/packages/linux/linux-netvista-2.4.27/netvista_defconfig
+++ /dev/null
@@ -1,1309 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_X86=y
-# CONFIG_SBUS is not set
-CONFIG_UID16=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-
-#
-# Processor type and features
-#
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-CONFIG_M586=y
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MELAN is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_L1_CACHE_SHIFT=5
-CONFIG_X86_USE_STRING_486=y
-CONFIG_X86_ALIGNMENT_16=y
-CONFIG_X86_PPRO_FENCE=y
-# CONFIG_X86_F00F_WORKS_OK is not set
-CONFIG_X86_MCE=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-CONFIG_MICROCODE=m
-CONFIG_X86_MSR=m
-# CONFIG_X86_CPUID is not set
-# CONFIG_EDD is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-# CONFIG_HIGHMEM is not set
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_SMP is not set
-CONFIG_X86_UP_APIC=y
-CONFIG_X86_UP_IOAPIC=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-# CONFIG_X86_TSC_DISABLE is not set
-
-#
-# General setup
-#
-CONFIG_NET=y
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_ISA=y
-CONFIG_PCI_NAMES=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-# CONFIG_PCMCIA is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-# CONFIG_HOTPLUG_PCI_COMPAQ is not set
-# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-# CONFIG_HOTPLUG_PCI_IBM is not set
-# CONFIG_HOTPLUG_PCI_ACPI is not set
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_MISC=m
-CONFIG_OOM_KILLER=y
-CONFIG_PM=y
-CONFIG_APM=y
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-CONFIG_APM_DO_ENABLE=y
-CONFIG_APM_CPU_IDLE=y
-# CONFIG_APM_DISPLAY_BLANK is not set
-CONFIG_APM_RTC_IS_GMT=y
-# CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
-
-#
-# ACPI Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_BUS=y
-CONFIG_ACPI_INTERPRETER=y
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
-CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_ASUS=y
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_DEBUG=y
-# CONFIG_ACPI_RELAXED_AML is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=m
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-# CONFIG_NFTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_AMDSTD is not set
-# CONFIG_MTD_SHARP is not set
-# CONFIG_MTD_JEDEC is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PNC2000 is not set
-# CONFIG_MTD_SC520CDP is not set
-# CONFIG_MTD_NETSC520 is not set
-# CONFIG_MTD_SBC_GXX is not set
-# CONFIG_MTD_ELAN_104NC is not set
-# CONFIG_MTD_DILNETPC is not set
-# CONFIG_MTD_MIXMEM is not set
-# CONFIG_MTD_OCTAGON is not set
-# CONFIG_MTD_VMAX is not set
-# CONFIG_MTD_SCx200_DOCFLASH is not set
-# CONFIG_MTD_L440GX is not set
-# CONFIG_MTD_AMD76XROM is not set
-# CONFIG_MTD_ICH2ROM is not set
-# CONFIG_MTD_NETtel is not set
-# CONFIG_MTD_SCB2_FLASH is not set
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-CONFIG_MTD_BLKMTD=m
-# CONFIG_MTD_DOC1000 is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOCPROBE is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-CONFIG_PARPORT_SERIAL=m
-CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_SUPERIO=y
-# CONFIG_PARPORT_PC_PCMCIA is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_IP22 is not set
-# CONFIG_PARPORT_OTHER is not set
-CONFIG_PARPORT_1284=y
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=m
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_CISS_MONITOR_THREAD is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_BLK_STATS=y
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-# CONFIG_BLK_DEV_LVM is not set
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_NETLINK_DEV=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_TFTP is not set
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-CONFIG_IP_NF_MATCH_MAC=m
-CONFIG_IP_NF_MATCH_PKTTYPE=m
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-# CONFIG_IP_NF_MATCH_RECENT is not set
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH_ESP=m
-CONFIG_IP_NF_MATCH_LENGTH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_TCPMSS=m
-CONFIG_IP_NF_MATCH_HELPER=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_CONNTRACK=m
-CONFIG_IP_NF_MATCH_UNCLEAN=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_MIRROR=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_NAT_LOCAL=y
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-# CONFIG_IP_NF_ARP_MANGLE is not set
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_COMPAT_IPFWADM=m
-CONFIG_IP_NF_NAT_NEEDED=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-
-#
-# IPv6: Netfilter Configuration
-#
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP6_NF_MATCH_MAC=m
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-CONFIG_IP6_NF_MATCH_MULTIPORT=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_MARK=m
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_AHESP is not set
-CONFIG_IP6_NF_MATCH_LENGTH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_MARK=m
-# CONFIG_KHTTPD is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-CONFIG_BRIDGE=m
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_LLC is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-# CONFIG_PHONE_IXJ is not set
-# CONFIG_PHONE_IXJ_PCMCIA is not set
-
-#
-# ATA/IDE/MFM/RLL support
-#
-CONFIG_IDE=y
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-CONFIG_BLK_DEV_IDE=y
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-# CONFIG_IDEDISK_STROKE is not set
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=m
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-CONFIG_BLK_DEV_IDESCSI=m
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_BLK_DEV_GENERIC is not set
-CONFIG_IDEPCI_SHARE_IRQ=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_PCI_WIP is not set
-# CONFIG_BLK_DEV_ADMA100 is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_WDC_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_AMD74XX_OVERRIDE is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_HPT34X_AUTODMA is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_PDC202XX_BURST is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
-# CONFIG_BLK_DEV_ATARAID_SII is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=m
-CONFIG_BLK_DEV_SD=m
-CONFIG_SD_EXTRA_DEVS=40
-CONFIG_CHR_DEV_ST=m
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-CONFIG_BLK_DEV_SR_VENDOR=y
-CONFIG_SR_EXTRA_DEVS=2
-CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_MEGARAID2 is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CPQFCTS is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_NCR53C8XX is not set
-# CONFIG_SCSI_SYM53C8XX is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_BOOT is not set
-# CONFIG_FUSION_ISENSE is not set
-# CONFIG_FUSION_CTL is not set
-# CONFIG_FUSION_LAN is not set
-
-#
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_PCI is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-# CONFIG_SUNLANCE is not set
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNBMAC is not set
-# CONFIG_SUNQE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_TULIP is not set
-# CONFIG_DE4X5 is not set
-# CONFIG_DGRS is not set
-# CONFIG_DM9102 is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPRO100_PIO is not set
-# CONFIG_E100 is not set
-# CONFIG_LNE390 is not set
-# CONFIG_FEALNX is not set
-CONFIG_NATSEMI=y
-# CONFIG_NE2K_PCI is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_NE3210 is not set
-# CONFIG_ES3210 is not set
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=m
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNDANCE_MMIO is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_RHINE_MMIO is not set
-# CONFIG_WINBOND_840 is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_STRIP=m
-CONFIG_WAVELAN=m
-CONFIG_ARLAN=m
-CONFIG_AIRONET4500=m
-CONFIG_AIRONET4500_NONCS=m
-# CONFIG_AIRONET4500_PNP is not set
-# CONFIG_AIRONET4500_PCI is not set
-# CONFIG_AIRONET4500_ISA is not set
-# CONFIG_AIRONET4500_I365 is not set
-CONFIG_AIRONET4500_PROC=m
-CONFIG_AIRO=m
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-# CONFIG_TMD_HERMES is not set
-CONFIG_PCI_HERMES=m
-CONFIG_NET_WIRELESS=y
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-# CONFIG_IRPORT_SIR is not set
-# CONFIG_DONGLE is not set
-# CONFIG_USB_IRDA is not set
-CONFIG_NSC_FIR=m
-CONFIG_WINBOND_FIR=m
-# CONFIG_TOSHIBA_OLD is not set
-CONFIG_TOSHIBA_FIR=m
-CONFIG_SMC_IRCC_FIR=m
-CONFIG_ALI_FIR=m
-CONFIG_VLSI_FIR=m
-# CONFIG_VIA_IRCC_FIR is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Input core support
-#
-CONFIG_INPUT=y
-CONFIG_INPUT_KEYBDEV=y
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=800
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=600
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-CONFIG_SERIAL_SHARE_IRQ=y
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-CONFIG_PPDEV=m
-# CONFIG_TIPAR is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=y
-CONFIG_PSMOUSE=y
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-# CONFIG_INPUT_SERIO is not set
-# CONFIG_INPUT_SERPORT is not set
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_IPMI_PANIC_EVENT is not set
-# CONFIG_IPMI_DEVICE_INTERFACE is not set
-# CONFIG_IPMI_KCS is not set
-# CONFIG_IPMI_WATCHDOG is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_SCx200 is not set
-# CONFIG_SCx200_GPIO is not set
-# CONFIG_AMD_RNG is not set
-# CONFIG_INTEL_RNG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_AMD_PM768 is not set
-CONFIG_NVRAM=m
-CONFIG_RTC=m
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-
-#
-# Direct Rendering Manager (XFree86 DRI support)
-#
-CONFIG_DRM=y
-# CONFIG_DRM_OLD is not set
-CONFIG_DRM_NEW=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_GAMMA is not set
-# CONFIG_DRM_R128 is not set
-CONFIG_DRM_RADEON=m
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I810_XFREE_41 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_MWAVE is not set
-# CONFIG_OBMOUSE is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-# CONFIG_VIDEO_W9966 is not set
-CONFIG_VIDEO_CPIA=m
-# CONFIG_VIDEO_CPIA_PP is not set
-CONFIG_VIDEO_CPIA_USB=m
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_VIDEO_MEYE is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_MIROPCM20_RDS is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_QFMT_V2 is not set
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BEFS_DEBUG is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=y
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-# CONFIG_UMSDOS_FS is not set
-CONFIG_VFAT_FS=m
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_CRAMFS=m
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-CONFIG_DEVFS_FS=y
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
-CONFIG_DEVPTS_FS=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-CONFIG_ROMFS_FS=m
-CONFIG_EXT2_FS=y
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_TRACE is not set
-# CONFIG_XFS_DEBUG is not set
-
-#
-# Network File Systems
-#
-CONFIG_CODA_FS=m
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_ROOT_NFS is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_TCP=y
-CONFIG_SUNRPC=m
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-# CONFIG_SMB_UNIX is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_ZISOFS_FS=m
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_SMB_NLS=y
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ISO8859_1=m
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=m
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Console drivers
-#
-CONFIG_VGA_CONSOLE=y
-CONFIG_VIDEO_SELECT=y
-# CONFIG_MDA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_CLGEN is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_CYBER2000 is not set
-CONFIG_FB_VESA=y
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_HGA is not set
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_IT8181 is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FBCON_ADVANCED is not set
-CONFIG_FBCON_CFB8=y
-CONFIG_FBCON_CFB16=y
-CONFIG_FBCON_CFB24=y
-CONFIG_FBCON_CFB32=y
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-# CONFIG_FBCON_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-# CONFIG_SOUND_ALI5455 is not set
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_FORTE is not set
-CONFIG_SOUND_ICH=m
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_TVMIXER is not set
-# CONFIG_SOUND_AD1980 is not set
-# CONFIG_SOUND_WM97XX is not set
-
-#
-# USB support
-#
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_EHCI_HCD is not set
-CONFIG_USB_UHCI=m
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=y
-# CONFIG_USB_SL811HS_ALT is not set
-# CONFIG_USB_SL811HS is not set
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_EMI26 is not set
-CONFIG_USB_MIDI=m
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_HP8200e=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_AIPTEK=m
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-CONFIG_USB_SCANNER=m
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-CONFIG_USB_IBMCAM=m
-# CONFIG_USB_KONICAWC is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_PWC=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_DABUSB is not set
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_CATC=m
-CONFIG_USB_CDCETHER=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_USS720=m
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-CONFIG_USB_SERIAL_IPAQ=m
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-CONFIG_USB_RIO500=m
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_TIGL is not set
-# CONFIG_USB_BRLVGER is not set
-CONFIG_USB_LCD=m
-
-#
-# Support for USB gadgets
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# Bluetooth support
-#
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_SCO=m
-# CONFIG_BLUEZ_RFCOMM is not set
-CONFIG_BLUEZ_BNEP=m
-# CONFIG_BLUEZ_BNEP_MC_FILTER is not set
-# CONFIG_BLUEZ_BNEP_PROTO_FILTER is not set
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BLUEZ_HCIUSB=m
-CONFIG_BLUEZ_HCIUSB_SCO=y
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_H4=y
-# CONFIG_BLUEZ_HCIUART_BCSP is not set
-# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
-# CONFIG_BLUEZ_HCIBFUSB is not set
-# CONFIG_BLUEZ_HCIDTL1 is not set
-# CONFIG_BLUEZ_HCIBT3C is not set
-# CONFIG_BLUEZ_HCIBLUECARD is not set
-# CONFIG_BLUEZ_HCIBTUART is not set
-CONFIG_BLUEZ_HCIVHCI=m
-
-#
-# Kernel hacking
-#
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=0
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=y
-CONFIG_CRYPTO_MD4=y
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA512=y
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=y
-CONFIG_CRYPTO_TWOFISH=y
-CONFIG_CRYPTO_SERPENT=y
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_CAST5=y
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_ARC4 is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_FW_LOADER is not set
diff --git a/packages/linux/linux-netvista_2.4.27.bb b/packages/linux/linux-netvista_2.4.27.bb
deleted file mode 100644
index 2b2721c7c4..0000000000
--- a/packages/linux/linux-netvista_2.4.27.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Linux kernel x86 for IBM Netvista"
-LICENSE = "GPL"
-PR = "r4"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-${PV}.tar.bz2 \
- file://netvista_defconfig"
-S = "${WORKDIR}/linux-${PV}"
-
-COMPATIBLE_HOST='i.86.*-linux'
-
-inherit kernel
-
-KERNEL_CCSUFFIX = "-3.3.4"
-ARCH = "i386"
-KERNEL_IMAGETYPE = "bzImage"
-
-# Avoid getting the kernel in the rootfs
-FILES_kernel = ""
-ALLOW_EMPTY_kernel = "1"
-PACKAGES += "kernel-image"
-FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
-
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/netvista_defconfig ${S}/.config
-}
diff --git a/packages/linux/linux-nokia800-2.6.18-osso29/.mtn2git_empty b/packages/linux/linux-nokia800-2.6.18-osso29/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-nokia800-2.6.18-osso29/.mtn2git_empty
diff --git a/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/.mtn2git_empty b/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/.mtn2git_empty
diff --git a/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/defconfig b/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/defconfig
new file mode 100644
index 0000000000..ef33d828c1
--- /dev/null
+++ b/packages/linux/linux-nokia800-2.6.18-osso29/nokia770/defconfig
@@ -0,0 +1,1342 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-rc2-omap1
+# Fri Feb 10 15:29:21 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+
+#
+# OMAP Feature Selections
+#
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+CONFIG_OMAP_COMPONENT_VERSION=y
+CONFIG_OMAP_GPIO_SWITCH=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_STI=y
+CONFIG_OMAP_STI_CONSOLE=y
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+CONFIG_OMAP_LL_DEBUG_UART1=y
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+
+#
+# OMAP Core Type
+#
+# CONFIG_ARCH_OMAP730 is not set
+# CONFIG_ARCH_OMAP15XX is not set
+CONFIG_ARCH_OMAP16XX=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_OMAP_H2 is not set
+# CONFIG_MACH_OMAP_H3 is not set
+# CONFIG_MACH_OMAP_OSK is not set
+CONFIG_MACH_NOKIA770=y
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
+CONFIG_OMAP_ARM_216MHZ=y
+# CONFIG_OMAP_ARM_192MHZ is not set
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+CONFIG_OMAP_DSP_TASK_MULTIOPEN=y
+CONFIG_OMAP_DSP_FBEXPORT=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=1f03 rootfstype=jffs2 time"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIBRF6150=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=y
+# CONFIG_PROC_EVENTS is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_TOTO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_OMAP_HW=y
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+# CONFIG_MTD_ONENAND_SYNC_READ is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ATMEL is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_OMAP=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_OMAP is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+CONFIG_OMAP_RNG=y
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_OMAP_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+CONFIG_I2C_OMAP=y
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_TPS65010 is not set
+CONFIG_SENSORS_TLV320AIC23=y
+# CONFIG_GPIOEXPANDER_OMAP is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP_UWIRE=y
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+CONFIG_FB_OMAP_LCDC_EXTERNAL=y
+CONFIG_FB_OMAP_LCDC_HWA742=y
+CONFIG_FB_OMAP_MANUAL_UPDATE=y
+CONFIG_FB_OMAP_LCD_LPH8923=y
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+# CONFIG_FB_OMAP_DMA_TUNE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_DUMMY=y
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_OMAP_AIC23=y
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_BANDWIDTH=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=y
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+CONFIG_USB_SERIAL_PL2303=y
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_OMAP=y
+CONFIG_USB_OMAP=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+CONFIG_USB_FILE_STORAGE_TEST=y
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BROKEN_RFD=y
+CONFIG_MMC_BULKTRANSFER=y
+CONFIG_MMC_OMAP=y
+
+#
+# Synchronous Serial Interfaces (SSI)
+#
+CONFIG_OMAP_UWIRE=y
+# CONFIG_OMAP_TSC2101 is not set
+
+#
+# CBUS support
+#
+CONFIG_CBUS=y
+CONFIG_CBUS_TAHVO=y
+CONFIG_CBUS_TAHVO_USER=y
+CONFIG_CBUS_TAHVO_USB=y
+# CONFIG_CBUS_TAHVO_USB_HOST_BY_DEFAULT is not set
+CONFIG_CBUS_RETU=y
+CONFIG_CBUS_RETU_USER=y
+CONFIG_CBUS_RETU_POWERBUTTON=y
+CONFIG_CBUS_RETU_RTC=y
+CONFIG_CBUS_RETU_WDT=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+# CONFIG_ROOT_NFS is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=y
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_CAPABILITIES is not set
+# CONFIG_SECURITY_ROOTPLUG is not set
+# CONFIG_SECURITY_SECLVL is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/.mtn2git_empty b/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/.mtn2git_empty
diff --git a/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/defconfig b/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/defconfig
new file mode 100644
index 0000000000..fe5060fa19
--- /dev/null
+++ b/packages/linux/linux-nokia800-2.6.18-osso29/nokia800/defconfig
@@ -0,0 +1,1315 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-omap1
+# Fri May 18 15:29:54 2007
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+
+#
+# TI OMAP Implementations
+#
+# CONFIG_ARCH_OMAP1 is not set
+CONFIG_ARCH_OMAP2=y
+
+#
+# OMAP Feature Selections
+#
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_BOOT_TAG=y
+CONFIG_OMAP_BOOT_REASON=y
+CONFIG_OMAP_COMPONENT_VERSION=y
+CONFIG_OMAP_GPIO_SWITCH=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_STI=y
+CONFIG_OMAP_STI_CONSOLE=y
+# CONFIG_OMAP_MCBSP is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+CONFIG_OMAP_DSP_TASK_MULTIOPEN=y
+CONFIG_OMAP_DSP_FBEXPORT=y
+CONFIG_MACH_OMAP_GENERIC=y
+
+#
+# OMAP Core Type
+#
+CONFIG_ARCH_OMAP24XX=y
+CONFIG_ARCH_OMAP2420=y
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_NOKIA_N800=y
+CONFIG_MACH_OMAP2_TUSB6010=y
+# CONFIG_MACH_OMAP_H4 is not set
+# CONFIG_MACH_OMAP_APOLLON is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_V6=y
+# CONFIG_CPU_32v6K is not set
+CONFIG_CPU_32v6=y
+CONFIG_CPU_ABRT_EV6=y
+CONFIG_CPU_CACHE_V6=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V6=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=128
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_LEDS=y
+# CONFIG_LEDS_TIMER is not set
+# CONFIG_LEDS_CPU is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x10C08000
+CONFIG_ZBOOT_ROM_BSS=0x10200000
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_CMDLINE="root=1f03 rootfstype=jffs2"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+# CONFIG_NETFILTER_NETLINK_LOG is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=y
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_IPRANGE is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_RECENT is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_DSCP is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
+CONFIG_IP_NF_FILTER=y
+# CONFIG_IP_NF_TARGET_REJECT is not set
+# CONFIG_IP_NF_TARGET_LOG is not set
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IP_NF_TARGET_IDLETIMER=y
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBRF6150 is not set
+CONFIG_BT_HCIH4P=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+CONFIG_MTD_ONENAND=y
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_GENERIC is not set
+CONFIG_MTD_ONENAND_OMAP2=y
+CONFIG_MTD_ONENAND_OTP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_SYNC_TTY=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OMAP is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_OMAP_RNG=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+CONFIG_I2C_OMAP=y
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_SENSORS_TLV320AIC23 is not set
+# CONFIG_GPIOEXPANDER_OMAP is not set
+CONFIG_MENELAUS=y
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_OMAP_UWIRE is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_TSC2301=y
+CONFIG_SPI_TSC2301_KEYPAD=y
+CONFIG_SPI_TSC2301_TOUCHSCREEN=y
+CONFIG_SPI_TSC2301_AUDIO=y
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+CONFIG_SENSORS_TMP105=y
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP is not set
+CONFIG_LEDS_OMAP_PWM=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=y
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
+
+#
+# Encoders and Decoders
+#
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_CX2341X is not set
+# CONFIG_VIDEO_CX25840 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+CONFIG_VIDEO_OMAP_CAMERA=y
+# CONFIG_VIDEO_CAMERA_SENSOR_OV9640 is not set
+CONFIG_VIDEO_CAMERA_SENSOR_TCM825X=y
+
+#
+# Radio Adapters
+#
+CONFIG_RADIO_TEA5761=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_VIDEO_BUF=y
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FB_OMAP=y
+CONFIG_FB_OMAP_LCDC_EXTERNAL=y
+# CONFIG_FB_OMAP_LCDC_HWA742 is not set
+CONFIG_FB_OMAP_LCDC_BLIZZARD=y
+# CONFIG_FB_OMAP_MANUAL_UPDATE is not set
+CONFIG_FB_OMAP_LCD_MIPID=y
+CONFIG_FB_OMAP_BOOTLOADER_INIT=y
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=4
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_OMAP=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_OMAP_AIC23 is not set
+# CONFIG_SND_OMAP_TSC2101 is not set
+CONFIG_SND_OMAP24XX_EAC=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_TUSB6010=y
+CONFIG_USB_TUSB6010_TEST=y
+# CONFIG_USB_MUSB_HOST is not set
+CONFIG_USB_MUSB_PERIPHERAL=y
+# CONFIG_USB_MUSB_OTG is not set
+CONFIG_USB_GADGET_MUSB_HDRC=y
+# CONFIG_USB_INVENTRA_FIFO is not set
+# CONFIG_USB_INVENTRA_DMA is not set
+# CONFIG_USB_TI_CPPI_DMA is not set
+CONFIG_USB_TUSB_OMAP_DMA=y
+CONFIG_USB_INVENTRA_HCD_LOGGING=1
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_OMAP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# Synchronous Serial Interfaces (SSI)
+#
+# CONFIG_OMAP_TSC2101 is not set
+
+#
+# CBUS support
+#
+CONFIG_CBUS=y
+CONFIG_CBUS_TAHVO=y
+CONFIG_CBUS_TAHVO_USER=y
+CONFIG_CBUS_RETU=y
+CONFIG_CBUS_RETU_USER=y
+CONFIG_CBUS_RETU_POWERBUTTON=y
+CONFIG_CBUS_RETU_RTC=y
+CONFIG_CBUS_RETU_WDT=y
+CONFIG_CBUS_RETU_HEADSET=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+# CONFIG_SECURITY_CAPABILITIES is not set
+# CONFIG_SECURITY_SECLVL is not set
+CONFIG_SECURITY_LOWMEM=y
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-nokia800.inc b/packages/linux/linux-nokia800.inc
new file mode 100644
index 0000000000..48a88320e2
--- /dev/null
+++ b/packages/linux/linux-nokia800.inc
@@ -0,0 +1,40 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for Nokia 770/800"
+LICENSE = "GPL"
+
+KERNEL_OUTPUT = "arch/${ARCH}/boot/compressed/${KERNEL_IMAGETYPE}"
+
+inherit kernel
+
+RPROVIDES_kernel-image = "hostap-modules"
+
+COMPATIBLE_MACHINE = "nokia770|nokia800"
+
+do_configure_prepend() {
+
+ rm -f ${S}/.config || true
+
+ if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ '${WORKDIR}/defconfig' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
diff --git a/packages/linux/linux-nokia800_2.6.18-osso29.bb b/packages/linux/linux-nokia800_2.6.18-osso29.bb
new file mode 100644
index 0000000000..617c6dfad2
--- /dev/null
+++ b/packages/linux/linux-nokia800_2.6.18-osso29.bb
@@ -0,0 +1,9 @@
+require linux-nokia800.inc
+
+PR = "r2"
+SRC_URI = "http://repository.maemo.org/pool/maemo3.0/free/source/kernel-source-rx-34_2.6.18.orig.tar.gz \
+ http://repository.maemo.org/pool/maemo3.0/free/source/kernel-source-rx-34_2.6.18-osso29.diff.gz;patch=1 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-g"
+
diff --git a/packages/linux/linux-omap1-2.6.18-omap1/defconfig b/packages/linux/linux-omap1-2.6.18-omap1/defconfig
index 7906b901ea..3efaf468f6 100644
--- a/packages/linux/linux-omap1-2.6.18-omap1/defconfig
+++ b/packages/linux/linux-omap1-2.6.18-omap1/defconfig
@@ -915,6 +915,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
CONFIG_SND_OMAP_AIC23=y
# CONFIG_SND_OMAP_TSC2101 is not set
+# CONFIG_SND_OMAP_TSC2102 is not set
#
# USB devices
diff --git a/packages/linux/linux-omap1-2.6.20-omap1/defconfig.eabi b/packages/linux/linux-omap1-2.6.20-omap1/defconfig.eabi
index a47a7b004d..640e5e349a 100644
--- a/packages/linux/linux-omap1-2.6.20-omap1/defconfig.eabi
+++ b/packages/linux/linux-omap1-2.6.20-omap1/defconfig.eabi
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.20-omap1
-# Thu Mar 1 14:34:27 2007
+# Mon Apr 30 16:19:37 2007
#
CONFIG_ARM=y
CONFIG_GENERIC_TIME=y
@@ -520,6 +520,7 @@ CONFIG_BLK_DEV_IDECS=m
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
#
@@ -535,8 +536,52 @@ CONFIG_BLK_DEV_IDECS=m
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
#
# Serial ATA (prod) and Parallel ATA (experimental) drivers
@@ -1017,6 +1062,18 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
#
# may also be needed; see USB_STORAGE Help for more information
#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
@@ -1046,6 +1103,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
#
# USB Network Adapters
@@ -1065,7 +1123,45 @@ CONFIG_USB_MON=y
#
# USB Serial Converter support
#
-# CONFIG_USB_SERIAL is not set
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+CONFIG_USB_SERIAL_IR=m
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
#
# USB Miscellaneous drivers
diff --git a/packages/linux/linux-omap1.inc b/packages/linux/linux-omap1.inc
index ac7d398122..e2b168e454 100644
--- a/packages/linux/linux-omap1.inc
+++ b/packages/linux/linux-omap1.inc
@@ -7,8 +7,7 @@ COMPATIBLE_MACHINE = "omap5912osk"
inherit kernel
-KERNEL_IMAGETYPE = "vmlinux"
-KERNEL_OUTPUT = "${KERNEL_IMAGETYPE}"
+KERNEL_IMAGETYPE = "uImage"
module_autoload_ohci-hcd_omap5912osk = "ohci-hcd"
@@ -22,15 +21,9 @@ do_configure_prepend() {
oe_runmake oldconfig
}
-
do_deploy() {
- if [ "${MACHINE}" == "omap5912osk" ]; then
- install -d ${DEPLOY_DIR_IMAGE}
- ${OBJCOPY} -O binary -R .note -R .comment -S ${KERNEL_OUTPUT} ${S}/linux.bin
- gzip -f -9 ${S}/linux.bin
- mkimage -A arm -O linux -T kernel -C gzip -a 0x10008000 -e 0x10008000 -n "OE" -d ${S}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}-${MACHINE}-${DATETIME}.bin
- rm ${S}/linux.bin.gz
- fi
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
}
do_deploy[dirs] = "${S}"
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/.mtn2git_empty b/packages/linux/linux-palm-omap1-2.6.22-omap1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/.mtn2git_empty
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/.mtn2git_empty b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/.mtn2git_empty
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/defconfig b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/defconfig
new file mode 100644
index 0000000000..72d52d2dcd
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt/defconfig
@@ -0,0 +1,882 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22-omap1
+# Sat Jul 14 20:09:05 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+# CONFIG_ARCH_OMAP3 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_RESET_CLOCKS is not set
+# CONFIG_OMAP_BOOT_TAG is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+CONFIG_OMAP_MMU_FWK=y
+CONFIG_OMAP_MBOX_FWK=y
+CONFIG_OMAP_MPU_TIMER=y
+# CONFIG_OMAP_32K_TIMER is not set
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+CONFIG_OMAP_LL_DEBUG_UART2=y
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+CONFIG_OMAP_SERIAL_WAKE=y
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+# CONFIG_OMAP_DSP_TASK_MULTIOPEN is not set
+CONFIG_OMAP_DSP_FBEXPORT=y
+
+#
+# OMAP Core Type
+#
+# CONFIG_ARCH_OMAP730 is not set
+CONFIG_ARCH_OMAP15XX=y
+# CONFIG_ARCH_OMAP16XX is not set
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_VOICEBLUE is not set
+# CONFIG_MACH_OMAP_PALMTE is not set
+# CONFIG_MACH_OMAP_PALMZ71 is not set
+CONFIG_MACH_OMAP_PALMTT=y
+# CONFIG_MACH_SX1 is not set
+# CONFIG_MACH_AMS_DELTA is not set
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_150MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+# CONFIG_MACH_OMAP_APOLLON_PLUS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM925T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/mmcblk0p2 rw init=/init"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_TSC2102 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP_UWIRE=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+CONFIG_LEDS_OMAP=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_OMAP=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2
+# CONFIG_FB_OMAP_DMA_TUNE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_OMAP=y
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/.mtn2git_empty b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/.mtn2git_empty
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/defconfig b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/defconfig
new file mode 100644
index 0000000000..72d52d2dcd
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmtt2/defconfig
@@ -0,0 +1,882 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22-omap1
+# Sat Jul 14 20:09:05 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+# CONFIG_ARCH_OMAP3 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_RESET_CLOCKS is not set
+# CONFIG_OMAP_BOOT_TAG is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+CONFIG_OMAP_MMU_FWK=y
+CONFIG_OMAP_MBOX_FWK=y
+CONFIG_OMAP_MPU_TIMER=y
+# CONFIG_OMAP_32K_TIMER is not set
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+CONFIG_OMAP_LL_DEBUG_UART2=y
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+CONFIG_OMAP_SERIAL_WAKE=y
+CONFIG_OMAP_DSP=y
+# CONFIG_OMAP_DSP_MBCMD_VERBOSE is not set
+# CONFIG_OMAP_DSP_TASK_MULTIOPEN is not set
+CONFIG_OMAP_DSP_FBEXPORT=y
+
+#
+# OMAP Core Type
+#
+# CONFIG_ARCH_OMAP730 is not set
+CONFIG_ARCH_OMAP15XX=y
+# CONFIG_ARCH_OMAP16XX is not set
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_VOICEBLUE is not set
+# CONFIG_MACH_OMAP_PALMTE is not set
+# CONFIG_MACH_OMAP_PALMZ71 is not set
+CONFIG_MACH_OMAP_PALMTT=y
+# CONFIG_MACH_SX1 is not set
+# CONFIG_MACH_AMS_DELTA is not set
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_150MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+# CONFIG_MACH_OMAP_APOLLON_PLUS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM925T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/mmcblk0p2 rw init=/init"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_TSC2102 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP_UWIRE=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_OMAP_DEBUG is not set
+CONFIG_LEDS_OMAP=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_OMAP=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2
+# CONFIG_FB_OMAP_DMA_TUNE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_OMAP=y
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/.mtn2git_empty b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/.mtn2git_empty
diff --git a/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/defconfig b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/defconfig
new file mode 100644
index 0000000000..6901a43736
--- /dev/null
+++ b/packages/linux/linux-palm-omap1-2.6.22-omap1/palmz71/defconfig
@@ -0,0 +1,875 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22-omap1
+# Sat Jul 14 19:19:02 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-z71"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+# CONFIG_ARCH_OMAP3 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_RESET_CLOCKS is not set
+# CONFIG_OMAP_BOOT_TAG is not set
+# CONFIG_OMAP_GPIO_SWITCH is not set
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MMU_FWK is not set
+# CONFIG_OMAP_MBOX_FWK is not set
+CONFIG_OMAP_MPU_TIMER=y
+# CONFIG_OMAP_32K_TIMER is not set
+CONFIG_OMAP_LL_DEBUG_UART1=y
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+CONFIG_OMAP_SERIAL_WAKE=y
+# CONFIG_OMAP_DSP is not set
+
+#
+# OMAP Core Type
+#
+# CONFIG_ARCH_OMAP730 is not set
+CONFIG_ARCH_OMAP15XX=y
+# CONFIG_ARCH_OMAP16XX is not set
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_INNOVATOR is not set
+# CONFIG_MACH_VOICEBLUE is not set
+# CONFIG_MACH_OMAP_PALMTE is not set
+CONFIG_MACH_OMAP_PALMZ71=y
+# CONFIG_MACH_OMAP_PALMTT is not set
+# CONFIG_MACH_SX1 is not set
+# CONFIG_MACH_AMS_DELTA is not set
+# CONFIG_MACH_OMAP_GENERIC is not set
+
+#
+# OMAP CPU Speed
+#
+CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER=y
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_150MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+# CONFIG_MACH_OMAP_APOLLON_PLUS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM925T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=320
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_TSC2102 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_OMAP_UWIRE=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_TSC2101 is not set
+# CONFIG_SPI_TSC2102 is not set
+# CONFIG_SPI_TSC2301 is not set
+# CONFIG_SPI_SPIDEV is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_OMAP=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_OMAP=y
+# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2
+# CONFIG_FB_OMAP_DMA_TUNE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_OMAP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_OMAP=y
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-palm-omap1_2.6.22-omap1.bb b/packages/linux/linux-palm-omap1_2.6.22-omap1.bb
new file mode 100644
index 0000000000..fdfe740770
--- /dev/null
+++ b/packages/linux/linux-palm-omap1_2.6.22-omap1.bb
@@ -0,0 +1,46 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for OMAP1-based Palm devicess"
+LICENSE = "GPL"
+
+COMPATIBLE_MACHINE = "(palmz71|palmtt|palmtt2)"
+
+inherit kernel
+
+DEPENDS = ""
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
+ http://www.muru.com/linux/omap/patches/patch-2.6.22-omap1.bz2;patch=1 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-2.6.22"
+
+PR = "r2"
+
+do_configure() {
+
+ if [ -f ${WORKDIR}/defconfig ]; then
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config || die "No configuration for ${MACHINE} available."
+ else
+ die "No configuration for ${MACHINE} available."
+ fi
+
+
+ if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+ yes '' | oe_runmake oldconfig
+
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-qemuarm b/packages/linux/linux-rp-2.6.17/defconfig-qemuarm
index abb6726556..e34fe5c090 100644
--- a/packages/linux/linux-rp-2.6.17/defconfig-qemuarm
+++ b/packages/linux/linux-rp-2.6.17/defconfig-qemuarm
@@ -616,10 +616,7 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-qemux86 b/packages/linux/linux-rp-2.6.17/defconfig-qemux86
index fb66874b90..6fe280985f 100644
--- a/packages/linux/linux-rp-2.6.17/defconfig-qemux86
+++ b/packages/linux/linux-rp-2.6.17/defconfig-qemux86
@@ -39,7 +39,7 @@ CONFIG_INITRAMFS_SOURCE=""
CONFIG_UID16=y
CONFIG_VM86=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
@@ -812,13 +812,10 @@ CONFIG_INPUT=y
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
# CONFIG_INPUT_POWER is not set
@@ -831,8 +828,8 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_INPORT is not set
# CONFIG_MOUSE_LOGIBM is not set
@@ -880,8 +877,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_CORE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_LEGACY_PTYS is not set
CONFIG_PRINTER=y
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
@@ -1224,7 +1220,7 @@ CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
+CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
# CONFIG_USB_SL811_HCD is not set
@@ -1263,7 +1259,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
+CONFIG_USB_WACOM=y
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-akita b/packages/linux/linux-rp-2.6.20/defconfig-akita
index 249466ac87..c89d954696 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-akita
+++ b/packages/linux/linux-rp-2.6.20/defconfig-akita
@@ -1,13 +1,23 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Thu Mar 23 22:11:12 2006
+# Linux kernel version: 2.6.20
+# Thu Mar 29 12:24:24 2007
#
CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -24,16 +34,22 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -45,11 +61,9 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -60,7 +74,6 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -68,6 +81,10 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -85,16 +102,28 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -102,20 +131,16 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
#
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
# CONFIG_MACH_HX2750 is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
@@ -123,10 +148,9 @@ CONFIG_MACH_AKITA=y
CONFIG_MACH_SPITZ=y
CONFIG_MACH_BORZOI=y
CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
CONFIG_PXA_SHARP_Cxx00=y
CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
#
# Processor Type
@@ -137,13 +161,16 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
CONFIG_SHARP_SCOOP=y
@@ -171,7 +198,9 @@ CONFIG_PCMCIA_PXA2XX=y
#
CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -181,6 +210,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
CONFIG_ALIGNMENT_TRAP=y
#
@@ -188,7 +218,9 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
#
# CPU Frequency scaling
@@ -212,7 +244,6 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -220,6 +251,7 @@ CONFIG_BINFMT_MISC=m
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
CONFIG_APM=y
#
@@ -236,6 +268,7 @@ CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -249,11 +282,17 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -261,11 +300,21 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IP_VS is not set
CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -273,22 +322,12 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
CONFIG_IP_NF_QUEUE=m
#
@@ -319,7 +358,6 @@ CONFIG_IP_NF_QUEUE=m
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -378,6 +416,7 @@ CONFIG_IRCOMM=m
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -409,6 +448,8 @@ CONFIG_IEEE80211=m
CONFIG_IEEE80211_CRYPT_WEP=m
CONFIG_IEEE80211_CRYPT_CCMP=m
CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -421,6 +462,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -442,11 +484,13 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -472,6 +516,7 @@ CONFIG_MTD_ROM=y
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
@@ -481,7 +526,6 @@ CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -496,6 +540,7 @@ CONFIG_MTD_SHARP_SL=y
#
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_H1900 is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
@@ -525,7 +570,7 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -533,6 +578,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -562,6 +608,8 @@ CONFIG_IDE_GENERIC=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -581,20 +629,21 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DEBUG is not set
#
@@ -607,10 +656,17 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_PCMCIA_SYM53C500 is not set
#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
@@ -652,6 +708,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=m
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
# Ethernet (1000 Mbit)
@@ -669,6 +726,7 @@ CONFIG_MII=m
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
#
# Obsolete Wireless cards support (pre-802.11)
@@ -695,6 +753,7 @@ CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -728,6 +787,7 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -742,6 +802,7 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
@@ -765,6 +826,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
# CONFIG_INPUT_MOUSE is not set
@@ -775,6 +837,10 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
@@ -790,6 +856,7 @@ CONFIG_INPUT_UINPUT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -820,15 +887,12 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
-# Ftape, the floppy tape device driver
-#
-
-#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
@@ -840,7 +904,6 @@ CONFIG_UNIX98_PTYS=y
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
#
# I2C support
@@ -860,6 +923,7 @@ CONFIG_I2C=y
#
CONFIG_I2C_PXA=y
# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
@@ -899,10 +963,7 @@ CONFIG_I2C_PXA=y
#
# Misc devices
#
-
-#
-# Multimedia Capabilities Port drivers
-#
+# CONFIG_TIFM_CORE is not set
#
# Multi-Function Devices
@@ -913,35 +974,54 @@ CONFIG_I2C_PXA=y
#
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED drivers
+#
CONFIG_LEDS_SPITZ=y
# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
#
# Graphics support
#
+CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
# CONFIG_FB_VIRTUAL is not set
@@ -967,14 +1047,20 @@ CONFIG_FONT_8x16=y
#
# Logo configuration
#
-# CONFIG_LOGO is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_DEVICE=y
CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
#
# Sound
@@ -987,23 +1073,27 @@ CONFIG_SOUND=m
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
CONFIG_SND_SEQUENCER=m
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_SEQUENCER_OSS is not set
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
#
# Generic devices
#
CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1024,6 +1114,8 @@ CONFIG_SND_USB_AUDIO=m
#
# PCMCIA devices
#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
#
# SoC audio support
@@ -1039,23 +1131,37 @@ CONFIG_SND_SOC=m
#
CONFIG_SND_PXA2xx_SOC=m
CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
+# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
#
# Soc Codecs
#
# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
# CONFIG_SND_SOC_WM8731 is not set
CONFIG_SND_SOC_WM8750=m
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8772 is not set
# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
# CONFIG_SND_SOC_WM9713 is not set
# CONFIG_SND_SOC_WM9712 is not set
# CONFIG_SND_SOC_UDA1380 is not set
@@ -1065,12 +1171,19 @@ CONFIG_SND_SOC_WM8750=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
@@ -1096,7 +1209,6 @@ CONFIG_USB_SL811_CS=m
#
# USB Device Class drivers
#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
@@ -1118,13 +1230,13 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
@@ -1139,9 +1251,7 @@ CONFIG_USB_WACOM=m
# CONFIG_USB_ACECAD is not set
CONFIG_USB_KBTAB=m
CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
+# CONFIG_USB_TOUCHSCREEN is not set
# CONFIG_USB_YEALINK is not set
CONFIG_USB_XPAD=m
CONFIG_USB_ATI_REMOTE=m
@@ -1156,31 +1266,23 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not set
CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
CONFIG_USB_MON=y
#
@@ -1192,8 +1294,9 @@ CONFIG_USB_MON=y
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
CONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -1201,6 +1304,7 @@ CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
@@ -1225,15 +1329,20 @@ CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
# CONFIG_USB_SERIAL_OPTION is not set
CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_EZUSB=y
#
@@ -1241,16 +1350,20 @@ CONFIG_USB_EZUSB=y
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_PHIDGET is not set
CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1270,6 +1383,7 @@ CONFIG_USB_PXA27X=m
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
CONFIG_USB_ZERO=m
@@ -1279,6 +1393,7 @@ CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
#
# MMC/SD Card support
@@ -1287,13 +1402,16 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
#
# Real Time Clock
#
+CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -1301,16 +1419,24 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -1320,16 +1446,19 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=m
# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
# CONFIG_JBD_DEBUG is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1356,11 +1485,12 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
# CONFIG_CONFIGFS_FS is not set
#
@@ -1373,18 +1503,20 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
@@ -1404,9 +1536,14 @@ CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
@@ -1417,7 +1554,9 @@ CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1490,6 +1629,11 @@ CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
CONFIG_PROFILING=y
@@ -1499,26 +1643,33 @@ CONFIG_OPROFILE=m
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_DETECT_SOFTLOCKUP is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
# CONFIG_FORCED_INLINING is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1532,7 +1683,12 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
@@ -1541,9 +1697,14 @@ CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
@@ -1553,6 +1714,7 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_TEST=m
@@ -1564,9 +1726,14 @@ CONFIG_CRYPTO_TEST=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-c7x0 b/packages/linux/linux-rp-2.6.20/defconfig-c7x0
index 1d702f60c0..452e0a669c 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-c7x0
+++ b/packages/linux/linux-rp-2.6.20/defconfig-c7x0
@@ -1,13 +1,23 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Mon May 22 09:00:01 2006
+# Linux kernel version: 2.6.20
+# Thu Mar 29 13:32:11 2007
#
CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -24,16 +34,22 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -45,11 +61,9 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -60,7 +74,6 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -68,6 +81,10 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -85,16 +102,28 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -102,20 +131,16 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
#
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
# CONFIG_MACH_HX2750 is not set
CONFIG_PXA_SHARPSL_25x=y
# CONFIG_PXA_SHARPSL_27x is not set
@@ -125,9 +150,9 @@ CONFIG_MACH_SHEPHERD=y
CONFIG_MACH_HUSKY=y
# CONFIG_MACH_TOSA is not set
CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
CONFIG_PXA_SHARP_C7xx=y
CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
#
# Processor Type
@@ -138,13 +163,16 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
CONFIG_SHARP_SCOOP=y
@@ -172,7 +200,9 @@ CONFIG_PCMCIA_PXA2XX=y
#
CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -182,6 +212,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
CONFIG_ALIGNMENT_TRAP=y
#
@@ -189,7 +220,10 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
+CONFIG_CPU_FREQ_PXA25x=y
+CONFIG_KEXEC=y
#
# CPU Frequency scaling
@@ -206,7 +240,6 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
#
# Floating point emulation
@@ -225,7 +258,6 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -233,6 +265,7 @@ CONFIG_BINFMT_MISC=m
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
CONFIG_APM=y
#
@@ -249,6 +282,7 @@ CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -262,11 +296,17 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -274,11 +314,21 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IP_VS is not set
CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -286,22 +336,12 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
CONFIG_IP_NF_QUEUE=m
#
@@ -332,7 +372,6 @@ CONFIG_IP_NF_QUEUE=m
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -391,6 +430,7 @@ CONFIG_IRCOMM=m
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -422,6 +462,8 @@ CONFIG_IEEE80211=m
CONFIG_IEEE80211_CRYPT_WEP=m
CONFIG_IEEE80211_CRYPT_CCMP=m
CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -434,6 +476,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -455,11 +498,13 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -485,6 +530,7 @@ CONFIG_MTD_ROM=y
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
@@ -494,7 +540,6 @@ CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -509,6 +554,7 @@ CONFIG_MTD_SHARP_SL=y
#
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_H1900 is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
@@ -538,7 +584,7 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -546,6 +592,7 @@ CONFIG_BLK_DEV_RAM_COUNT=16
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -575,6 +622,8 @@ CONFIG_IDE_GENERIC=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -594,20 +643,21 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DEBUG is not set
#
@@ -620,10 +670,17 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_PCMCIA_SYM53C500 is not set
#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
@@ -665,6 +722,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=m
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
# Ethernet (1000 Mbit)
@@ -682,6 +740,7 @@ CONFIG_MII=m
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
#
# Obsolete Wireless cards support (pre-802.11)
@@ -708,6 +767,7 @@ CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -741,6 +801,7 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -755,6 +816,7 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
@@ -778,6 +840,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_CORGI=y
# CONFIG_KEYBOARD_SPITZ is not set
# CONFIG_INPUT_MOUSE is not set
@@ -788,6 +851,10 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
@@ -803,6 +870,7 @@ CONFIG_INPUT_UINPUT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -833,15 +901,12 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
-# Ftape, the floppy tape device driver
-#
-
-#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
@@ -853,7 +918,6 @@ CONFIG_UNIX98_PTYS=y
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
#
# I2C support
@@ -873,6 +937,7 @@ CONFIG_I2C_ALGOBIT=y
#
CONFIG_I2C_PXA=y
# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
@@ -912,10 +977,7 @@ CONFIG_I2C_PXA=y
#
# Misc devices
#
-
-#
-# Multimedia Capabilities Port drivers
-#
+# CONFIG_TIFM_CORE is not set
#
# Multi-Function Devices
@@ -926,56 +988,93 @@ CONFIG_I2C_PXA=y
#
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED drivers
+#
CONFIG_LEDS_CORGI=y
# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
-# Video For Linux
+# Video Capture Adapters
#
#
-# Video Adapters
+# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
#
# Radio Adapters
#
-# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
#
# Graphics support
#
+CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
CONFIG_FB_W100=y
# CONFIG_FB_VIRTUAL is not set
@@ -1004,13 +1103,16 @@ CONFIG_FONT_8x16=y
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
#
# Sound
@@ -1023,23 +1125,27 @@ CONFIG_SOUND=m
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
CONFIG_SND_SEQUENCER=m
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_SEQUENCER_OSS is not set
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
#
# Generic devices
#
CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1060,6 +1166,8 @@ CONFIG_SND_USB_AUDIO=m
#
# PCMCIA devices
#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
#
# SoC audio support
@@ -1075,23 +1183,37 @@ CONFIG_SND_SOC=m
#
CONFIG_SND_PXA2xx_SOC=m
CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
CONFIG_SND_PXA2xx_SOC_CORGI=m
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
+# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
#
# Soc Codecs
#
# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
CONFIG_SND_SOC_WM8731=m
# CONFIG_SND_SOC_WM8750 is not set
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8772 is not set
# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
# CONFIG_SND_SOC_WM9713 is not set
# CONFIG_SND_SOC_WM9712 is not set
# CONFIG_SND_SOC_UDA1380 is not set
@@ -1101,12 +1223,19 @@ CONFIG_SND_SOC_WM8731=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
@@ -1129,7 +1258,6 @@ CONFIG_USB_SL811_CS=m
#
# USB Device Class drivers
#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
@@ -1151,13 +1279,13 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
@@ -1172,9 +1300,7 @@ CONFIG_USB_WACOM=m
# CONFIG_USB_ACECAD is not set
CONFIG_USB_KBTAB=m
CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
+# CONFIG_USB_TOUCHSCREEN is not set
# CONFIG_USB_YEALINK is not set
CONFIG_USB_XPAD=m
CONFIG_USB_ATI_REMOTE=m
@@ -1189,37 +1315,23 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
# USB Network Adapters
#
CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not set
CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
CONFIG_USB_MON=y
#
@@ -1231,8 +1343,9 @@ CONFIG_USB_MON=y
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
CONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
@@ -1240,6 +1353,7 @@ CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
@@ -1264,14 +1378,20 @@ CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_EZUSB=y
#
@@ -1279,16 +1399,20 @@ CONFIG_USB_EZUSB=y
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_PHIDGET is not set
CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1309,6 +1433,7 @@ CONFIG_USB_PXA2XX=y
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
CONFIG_USB_ZERO=m
@@ -1318,6 +1443,7 @@ CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
#
# MMC/SD Card support
@@ -1326,13 +1452,16 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
#
# Real Time Clock
#
+CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -1340,16 +1469,24 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -1358,14 +1495,17 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1392,11 +1532,12 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
# CONFIG_CONFIGFS_FS is not set
#
@@ -1409,18 +1550,20 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
@@ -1440,9 +1583,14 @@ CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
@@ -1453,7 +1601,9 @@ CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1526,6 +1676,11 @@ CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
CONFIG_PROFILING=y
@@ -1535,26 +1690,33 @@ CONFIG_OPROFILE=m
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
# CONFIG_FORCED_INLINING is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1568,7 +1730,12 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
@@ -1577,9 +1744,14 @@ CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
@@ -1589,6 +1761,7 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_TEST=m
@@ -1600,9 +1773,14 @@ CONFIG_CRYPTO_TEST=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-collie b/packages/linux/linux-rp-2.6.20/defconfig-collie
index f488d42d93..422ed94df3 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-collie
+++ b/packages/linux/linux-rp-2.6.20/defconfig-collie
@@ -1,15 +1,23 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Tue Jul 4 16:35:35 2006
+# Linux kernel version: 2.6.20.4
+# Fri Apr 6 23:20:59 2007
#
CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -26,29 +34,36 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
-CONFIG_ELF_CORE=y
+# CONFIG_ELF_CORE is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -66,7 +81,10 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -84,18 +102,28 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
@@ -103,12 +131,6 @@ CONFIG_ARCH_SA1100=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
#
# SA11x0 Implementations
@@ -138,11 +160,14 @@ CONFIG_CPU_ABRT_EV4=y
CONFIG_CPU_CACHE_V4WB=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
-CONFIG_KEXEC=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
CONFIG_SHARP_LOCOMO=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARP_SCOOP=y
@@ -186,6 +211,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
@@ -194,8 +220,8 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
#
# CPU Frequency scaling
@@ -227,6 +253,7 @@ CONFIG_BINFMT_MISC=m
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
CONFIG_APM=y
#
@@ -238,11 +265,12 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -258,10 +286,15 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -273,9 +306,17 @@ CONFIG_IPV6=m
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -283,23 +324,12 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
CONFIG_IP_NF_QUEUE=m
#
@@ -330,7 +360,6 @@ CONFIG_IP_NF_QUEUE=m
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -390,6 +419,7 @@ CONFIG_IRTTY_SIR=m
CONFIG_USB_IRDA=m
# CONFIG_SIGMATEL_FIR is not set
CONFIG_SA1100_FIR=m
+# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -434,6 +464,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -454,12 +485,14 @@ CONFIG_MTD_PARTITIONS=y
#
# User Modules And Translation Layers
#
-CONFIG_MTD_CHAR=y
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -486,12 +519,15 @@ CONFIG_MTD_SHARP=y
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_SA1100=y
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
@@ -540,7 +576,8 @@ CONFIG_BLK_DEV_LOOP=m
#
# ATA/ATAPI/MFM/RLL support
#
-CONFIG_IDE=y
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=m
#
@@ -571,6 +608,8 @@ CONFIG_BLK_DEV_IDECS=m
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -590,14 +629,16 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
#
# SCSI low-level drivers
@@ -606,7 +647,6 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
@@ -629,10 +669,17 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_PCMCIA_SYM53C500 is not set
#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
@@ -734,6 +781,7 @@ CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -767,6 +815,7 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -781,11 +830,12 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
#
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
@@ -805,6 +855,7 @@ CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_LOCOMO=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
@@ -822,6 +873,7 @@ CONFIG_KEYBOARD_LOCOMO=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -852,15 +904,12 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
-# Ftape, the floppy tape device driver
-#
-
-#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
@@ -872,7 +921,6 @@ CONFIG_UNIX98_PTYS=y
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
#
# I2C support
@@ -891,6 +939,7 @@ CONFIG_I2C=m
# I2C Hardware Bus support
#
# CONFIG_I2C_ELEKTOR is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
@@ -913,8 +962,19 @@ CONFIG_I2C=m
#
# SPI support
#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_LOCOMO=m
+
+#
+# SPI Protocol Masters
+#
#
# Dallas's 1-wire bus
@@ -930,6 +990,7 @@ CONFIG_I2C=m
#
# Misc devices
#
+# CONFIG_TIFM_CORE is not set
#
# Multimedia Capabilities Port drivers
@@ -937,7 +998,6 @@ CONFIG_I2C=m
CONFIG_MCP=y
CONFIG_MCP_SA11X0=y
CONFIG_MCP_UCB1200=y
-# CONFIG_MCP_UCB1200_AUDIO is not set
CONFIG_MCP_UCB1200_TS=m
#
@@ -948,12 +1008,12 @@ CONFIG_MCP_UCB1200_TS=m
# LED devices
#
CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS=m
#
# LED drivers
#
-# CONFIG_LEDS_LOCOMO is not set
+CONFIG_LEDS_LOCOMO=m
#
# LED Triggers
@@ -961,6 +1021,7 @@ CONFIG_LEDS_CLASS=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=m
# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
#
# Multimedia devices
@@ -978,6 +1039,7 @@ CONFIG_VIDEO_V4L2=y
# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_PMS is not set
# CONFIG_VIDEO_CPIA is not set
@@ -985,35 +1047,24 @@ CONFIG_VIDEO_V4L2=y
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
#
# V4L USB devices
#
+# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_USB_DSBR is not set
+# CONFIG_VIDEO_USBVISION is not set
# CONFIG_USB_VICAM is not set
# CONFIG_USB_IBMCAM is not set
# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
# CONFIG_USB_OV511 is not set
# CONFIG_USB_SE401 is not set
# CONFIG_USB_SN9C102 is not set
# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
# CONFIG_USB_ZC0301 is not set
# CONFIG_USB_PWC is not set
@@ -1025,13 +1076,13 @@ CONFIG_VIDEO_V4L2=y
# CONFIG_RADIO_RTRACK2 is not set
# CONFIG_RADIO_AZTECH is not set
# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_MAESTRO is not set
# CONFIG_RADIO_SF16FMI is not set
# CONFIG_RADIO_SF16FMR2 is not set
# CONFIG_RADIO_TERRATEC is not set
# CONFIG_RADIO_TRUST is not set
# CONFIG_RADIO_TYPHOON is not set
# CONFIG_RADIO_ZOLTRIX is not set
+# CONFIG_USB_DSBR is not set
#
# Digital Video Broadcasting Devices
@@ -1042,12 +1093,13 @@ CONFIG_VIDEO_V4L2=y
#
# Graphics support
#
+CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_FIRMWARE_EDID is not set
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
CONFIG_FB_SA1100=y
@@ -1077,18 +1129,12 @@ CONFIG_FONT_8x8=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
+# CONFIG_LOGO is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
CONFIG_BACKLIGHT_LOCOMO=y
#
@@ -1147,6 +1193,11 @@ CONFIG_SND_DUMMY=m
# CONFIG_SOUND_PRIME is not set
#
+# HID Devices
+#
+CONFIG_HID=m
+
+#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
@@ -1195,13 +1246,13 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
@@ -1237,12 +1288,14 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET_MII=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
CONFIG_USB_NET_CDC_SUBSET=m
# CONFIG_USB_ALI_M5632 is not set
@@ -1251,7 +1304,6 @@ CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
# CONFIG_USB_EPSON2888 is not set
CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
CONFIG_USB_MON=y
#
@@ -1263,8 +1315,8 @@ CONFIG_USB_MON=y
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ANYDATA=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_WHITEHEAT=m
@@ -1298,15 +1350,20 @@ CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_HP4X=m
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_EZUSB=y
#
@@ -1314,16 +1371,20 @@ CONFIG_USB_EZUSB=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1333,9 +1394,8 @@ CONFIG_USB_EZUSB=y
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
# CONFIG_USB_GADGET_PXA27X is not set
@@ -1343,24 +1403,17 @@ CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_AT91 is not set
-CONFIG_USB_GADGET_SA1100=y
-CONFIG_USB_SA1100=y
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_FILE_STORAGE_TEST=y
-CONFIG_USB_G_SERIAL=m
#
# MMC/SD Card support
#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
+CONFIG_MMC=m
+CONFIG_MMC_DEBUG=y
+CONFIG_MMC_BLOCK=m
+# CONFIG_MMC_TIFM_SD is not set
+CONFIG_MMC_SPI=m
#
# Real Time Clock
@@ -1369,6 +1422,7 @@ CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -1376,33 +1430,45 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
#
-CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS=m
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1429,8 +1495,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1445,13 +1513,14 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=m
@@ -1486,7 +1555,9 @@ CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1556,7 +1627,12 @@ CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
#
# Profiling support
@@ -1567,27 +1643,33 @@ CONFIG_NLS_UTF8=y
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_FORCED_INLINING is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1601,7 +1683,12 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
@@ -1610,9 +1697,14 @@ CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
@@ -1622,6 +1714,7 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_TEST=m
@@ -1633,9 +1726,14 @@ CONFIG_CRYPTO_TEST=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
+CONFIG_CRC16=m
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-hx2000 b/packages/linux/linux-rp-2.6.20/defconfig-hx2000
index 296c462641..2a67a2d045 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-hx2000
+++ b/packages/linux/linux-rp-2.6.20/defconfig-hx2000
@@ -776,7 +776,10 @@ CONFIG_MFD_TSC2101=y
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
# Digital Video Broadcasting Devices
@@ -1159,3 +1162,4 @@ CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-ipaq-pxa270 b/packages/linux/linux-rp-2.6.20/defconfig-ipaq-pxa270
deleted file mode 100644
index cb7cce7bdd..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-ipaq-pxa270
+++ /dev/null
@@ -1,1021 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1-git7
-# Sat Nov 19 23:13:51 2005
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_CLEAN_COMPILE is not set
-CONFIG_BROKEN=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_KEYS=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-CONFIG_ISA_DMA_API=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_AIRO is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_WBSD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-# CONFIG_TMPFS is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-poodle b/packages/linux/linux-rp-2.6.20/defconfig-poodle
index deacd170f2..13616c08f1 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-poodle
+++ b/packages/linux/linux-rp-2.6.20/defconfig-poodle
@@ -1653,3 +1653,4 @@ CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-qemuarm b/packages/linux/linux-rp-2.6.20/defconfig-qemuarm
index e34fe5c090..f70b6db7c7 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-qemuarm
+++ b/packages/linux/linux-rp-2.6.20/defconfig-qemuarm
@@ -415,7 +415,7 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_SIZE=51200
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -752,7 +752,9 @@ CONFIG_NEW_LEDS=y
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
#
@@ -1188,3 +1190,4 @@ CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-qemux86 b/packages/linux/linux-rp-2.6.20/defconfig-qemux86
index 6fe280985f..08e0a0c6c7 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-qemux86
+++ b/packages/linux/linux-rp-2.6.20/defconfig-qemux86
@@ -428,8 +428,10 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=51200
+CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -975,7 +977,9 @@ CONFIG_HWMON=y
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
#
@@ -1560,3 +1564,4 @@ CONFIG_X86_HT=y
CONFIG_X86_BIOS_REBOOT=y
CONFIG_X86_TRAMPOLINE=y
CONFIG_KTIME_SCALAR=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-spitz b/packages/linux/linux-rp-2.6.20/defconfig-spitz
index 824fd57aaa..4ee5b814fb 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-spitz
+++ b/packages/linux/linux-rp-2.6.20/defconfig-spitz
@@ -1,15 +1,23 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sun Sep 3 23:29:17 2006
+# Linux kernel version: 2.6.20
+# Tue Jun 26 23:12:35 2007
#
CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
@@ -26,17 +34,22 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -49,6 +62,8 @@ CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -66,7 +81,10 @@ CONFIG_KMOD=y
#
# Block layer
#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
#
# IO Schedulers
@@ -84,18 +102,28 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -103,12 +131,6 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
#
# Intel PXA2xx Implementations
@@ -118,6 +140,7 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
# CONFIG_MACH_HX2750 is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
@@ -125,10 +148,9 @@ CONFIG_MACH_AKITA=y
CONFIG_MACH_SPITZ=y
CONFIG_MACH_BORZOI=y
CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
CONFIG_PXA_SHARP_Cxx00=y
CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
#
# Processor Type
@@ -139,13 +161,16 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
CONFIG_SHARP_SCOOP=y
@@ -174,7 +199,8 @@ CONFIG_PCMCIA_PXA2XX=y
CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -184,6 +210,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
CONFIG_ALIGNMENT_TRAP=y
#
@@ -191,8 +218,9 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rw fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
#
# CPU Frequency scaling
@@ -216,7 +244,6 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -224,6 +251,7 @@ CONFIG_BINFMT_MISC=m
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
CONFIG_APM=y
#
@@ -240,6 +268,7 @@ CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -255,10 +284,15 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
#
# IP: Virtual Server Configuration
@@ -270,9 +304,17 @@ CONFIG_IPV6=m
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -280,23 +322,12 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NETFILTER_XTABLES is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
CONFIG_IP_NF_QUEUE=m
#
@@ -327,7 +358,6 @@ CONFIG_IP_NF_QUEUE=m
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -386,6 +416,7 @@ CONFIG_IRCOMM=m
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -431,6 +462,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
#
# Connector - unified userspace <-> kernelspace linker
@@ -452,11 +484,13 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -482,6 +516,7 @@ CONFIG_MTD_ROM=y
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
@@ -505,6 +540,7 @@ CONFIG_MTD_SHARP_SL=y
#
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_H1900 is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
@@ -542,6 +578,7 @@ CONFIG_BLK_DEV_LOOP=y
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -571,6 +608,8 @@ CONFIG_IDE_GENERIC=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -590,20 +629,21 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DEBUG is not set
#
@@ -616,10 +656,17 @@ CONFIG_SCSI_MULTI_LUN=y
# CONFIG_PCMCIA_SYM53C500 is not set
#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
@@ -661,6 +708,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=m
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
# Ethernet (1000 Mbit)
@@ -705,6 +753,7 @@ CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
@@ -738,6 +787,7 @@ CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
@@ -752,6 +802,7 @@ CONFIG_PPP_BSDCOMP=m
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
#
# Userland interfaces
@@ -775,6 +826,7 @@ CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
CONFIG_KEYBOARD_SPITZ=y
# CONFIG_INPUT_MOUSE is not set
@@ -785,6 +837,10 @@ CONFIG_TOUCHSCREEN_CORGI=y
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
@@ -800,6 +856,7 @@ CONFIG_INPUT_UINPUT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -830,15 +887,12 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
-# Ftape, the floppy tape device driver
-#
-
-#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
@@ -850,7 +904,6 @@ CONFIG_UNIX98_PTYS=y
# TPM devices
#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
#
# I2C support
@@ -870,6 +923,7 @@ CONFIG_I2C=y
#
CONFIG_I2C_PXA=y
# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set
@@ -909,6 +963,7 @@ CONFIG_I2C_PXA=y
#
# Misc devices
#
+# CONFIG_TIFM_CORE is not set
#
# Multi-Function Devices
@@ -932,11 +987,14 @@ CONFIG_LEDS_SPITZ=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
#
@@ -948,12 +1006,13 @@ CONFIG_USB_DABUSB=m
#
# Graphics support
#
+CONFIG_FIRMWARE_EDID=y
CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_S1D13XXX is not set
@@ -962,6 +1021,7 @@ CONFIG_FB_PXA_LCD_QVGA=y
# CONFIG_FB_PXA_LCD_VGA is not set
CONFIG_FB_PXA_OVERLAY=y
# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
# CONFIG_FB_VIRTUAL is not set
@@ -991,10 +1051,10 @@ CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
# CONFIG_LOGO_OZ240_CLUT224 is not set
# CONFIG_LOGO_OZ480_CLUT224 is not set
-CONFIG_LOGO_OZ640_CLUT224=y
+# CONFIG_LOGO_OZ640_CLUT224 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
@@ -1034,7 +1094,6 @@ CONFIG_SND_DEBUG=y
# Generic devices
#
CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
@@ -1073,6 +1132,7 @@ CONFIG_SND_SOC=m
CONFIG_SND_PXA2xx_SOC=m
CONFIG_SND_PXA2xx_SOC_I2S=m
CONFIG_SND_PXA2xx_SOC_SPITZ=m
+# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
#
# SoC Audio for the Atmel AT91
@@ -1083,15 +1143,25 @@ CONFIG_SND_PXA2xx_SOC_SPITZ=m
#
#
+# SoC Audio for the Samsung S3C24XX
+#
+
+#
# Soc Codecs
#
# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
# CONFIG_SND_SOC_WM8731 is not set
CONFIG_SND_SOC_WM8750=m
# CONFIG_SND_SOC_WM8753 is not set
# CONFIG_SND_SOC_WM8772 is not set
# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
# CONFIG_SND_SOC_WM9713 is not set
# CONFIG_SND_SOC_WM9712 is not set
# CONFIG_SND_SOC_UDA1380 is not set
@@ -1101,6 +1171,12 @@ CONFIG_SND_SOC_WM8750=m
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
#
# USB support
@@ -1154,13 +1230,13 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
@@ -1196,16 +1272,17 @@ CONFIG_USB_CATC=m
CONFIG_USB_KAWETH=m
CONFIG_USB_PEGASUS=m
CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
CONFIG_USB_USBNET=m
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=m
# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
# CONFIG_USB_NET_CDC_SUBSET is not set
CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
CONFIG_USB_MON=y
#
@@ -1217,8 +1294,8 @@ CONFIG_USB_MON=y
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
CONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
@@ -1252,16 +1329,20 @@ CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
# CONFIG_USB_SERIAL_OPTION is not set
CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_EZUSB=y
#
@@ -1269,16 +1350,20 @@ CONFIG_USB_EZUSB=y
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_PHIDGET is not set
CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1308,6 +1393,7 @@ CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
#
# MMC/SD Card support
@@ -1316,6 +1402,7 @@ CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
#
# Real Time Clock
@@ -1324,6 +1411,7 @@ CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -1331,17 +1419,24 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
# RTC drivers
#
# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_M48T86 is not set
CONFIG_RTC_DRV_SA1100=y
# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
@@ -1351,16 +1446,19 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1387,8 +1485,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1403,18 +1503,20 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=m
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
@@ -1434,9 +1536,14 @@ CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
@@ -1447,7 +1554,9 @@ CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
@@ -1520,6 +1629,11 @@ CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
CONFIG_PROFILING=y
@@ -1529,27 +1643,33 @@ CONFIG_OPROFILE=m
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_DETECT_SOFTLOCKUP is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_FORCED_INLINING is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1563,7 +1683,12 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
@@ -1572,9 +1697,14 @@ CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
@@ -1584,6 +1714,7 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_TEST=m
@@ -1595,9 +1726,14 @@ CONFIG_CRYPTO_TEST=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
CONFIG_LIBCRC32C=m
+CONFIG_LZO=m
CONFIG_ZLIB_INFLATE=m
CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash b/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash
new file mode 100644
index 0000000000..2cbd1cc704
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash
@@ -0,0 +1,1604 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Sun Sep 3 23:29:17 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_PXA_SHARPSL_25x is not set
+CONFIG_PXA_SHARPSL_27x=y
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+CONFIG_PXA27x=y
+# CONFIG_PXA_KEYS is not set
+CONFIG_IWMMXT=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rw fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_CORGI is not set
+CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_LOGO_OHAND_CLUT224 is not set
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+CONFIG_LOGO_OZ640_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_AC97_BUS=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# Soc Platforms
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2xx_SOC=m
+CONFIG_SND_PXA2xx_SOC_I2S=m
+CONFIG_SND_PXA2xx_SOC_SPITZ=m
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8731 is not set
+CONFIG_SND_SOC_WM8750=m
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+# CONFIG_SND_SOC_UDA1380 is not set
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-tosa b/packages/linux/linux-rp-2.6.20/defconfig-tosa
index 4144e5cf38..4360f7a179 100644
--- a/packages/linux/linux-rp-2.6.20/defconfig-tosa
+++ b/packages/linux/linux-rp-2.6.20/defconfig-tosa
@@ -935,6 +935,9 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
# Video For Linux
@@ -1606,3 +1609,4 @@ CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_GENERIC_ALLOCATOR=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch
index 9ece71331a..bf20f46a05 100644
--- a/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch
+++ b/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch
@@ -5,28 +5,38 @@
include/linux/serial_core.h | 1 +
4 files changed, 16 insertions(+), 3 deletions(-)
-Index: git/drivers/serial/8250.c
+Index: linux-2.6.20/drivers/serial/8250.c
===================================================================
---- git.orig/drivers/serial/8250.c 2006-10-31 16:29:50.000000000 +0000
-+++ git/drivers/serial/8250.c 2006-10-31 16:29:53.000000000 +0000
-@@ -2429,7 +2429,12 @@ static struct uart_driver serial8250_reg
+--- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
++++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
+@@ -2429,7 +2429,12 @@
.driver_name = "serial",
.dev_name = "ttyS",
.major = TTY_MAJOR,
+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 3,
-+ .name_base = 3,
++ .minor = 64 + 4,
++ .name_base = 4,
+#else
.minor = 64,
+#endif
.nr = UART_NR,
.cons = SERIAL8250_CONSOLE,
};
-Index: git/drivers/serial/serial_core.c
+Index: linux-2.6.20/drivers/serial/serial_core.c
===================================================================
---- git.orig/drivers/serial/serial_core.c 2006-10-31 16:09:17.000000000 +0000
-+++ git/drivers/serial/serial_core.c 2006-10-31 16:29:53.000000000 +0000
-@@ -2183,6 +2183,7 @@ int uart_register_driver(struct uart_dri
+--- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
+@@ -2068,7 +2068,8 @@
+ printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
+ port->dev ? port->dev->bus_id : "",
+ port->dev ? ": " : "",
+- drv->dev_name, port->line, address, port->irq, uart_type(port));
++ drv->dev_name, port->line + drv->name_base, address, port->irq,
++ uart_type(port));
+ }
+
+ static void
+@@ -2183,6 +2184,7 @@
normal->owner = drv->owner;
normal->driver_name = drv->driver_name;
normal->name = drv->dev_name;
@@ -34,11 +44,11 @@ Index: git/drivers/serial/serial_core.c
normal->major = drv->major;
normal->minor_start = drv->minor;
normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: git/include/linux/serial_core.h
+Index: linux-2.6.20/include/linux/serial_core.h
===================================================================
---- git.orig/include/linux/serial_core.h 2006-10-31 16:09:45.000000000 +0000
-+++ git/include/linux/serial_core.h 2006-10-31 16:30:36.000000000 +0000
-@@ -339,6 +339,7 @@ struct uart_driver {
+--- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
+@@ -341,6 +341,7 @@
struct module *owner;
const char *driver_name;
const char *dev_name;
@@ -46,11 +56,11 @@ Index: git/include/linux/serial_core.h
int major;
int minor;
int nr;
-Index: git/drivers/serial/serial_cs.c
+Index: linux-2.6.20/drivers/serial/serial_cs.c
===================================================================
---- git.orig/drivers/serial/serial_cs.c 2006-10-31 16:09:17.000000000 +0000
-+++ git/drivers/serial/serial_cs.c 2006-10-31 16:29:53.000000000 +0000
-@@ -390,7 +390,7 @@ static int setup_serial(struct pcmcia_de
+--- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
+@@ -390,7 +390,7 @@
kio_addr_t iobase, int irq)
{
struct uart_port port;
@@ -59,12 +69,12 @@ Index: git/drivers/serial/serial_cs.c
memset(&port, 0, sizeof (struct uart_port));
port.iobase = iobase;
-@@ -411,10 +411,16 @@ static int setup_serial(struct pcmcia_de
+@@ -411,10 +411,16 @@
return -EINVAL;
}
+#if CONFIG_SERIAL_PXA
-+ linestart = 3;
++ linestart = 4;
+#else
+ linestart = 0;
+#endif
diff --git a/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch
new file mode 100644
index 0000000000..da83fdf5eb
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch
@@ -0,0 +1,519 @@
+Index: linux-2.6.20/arch/arm/mach-pxa/spitz.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/spitz.c
++++ linux-2.6.20/arch/arm/mach-pxa/spitz.c
+@@ -244,6 +244,13 @@ static struct platform_device spitzkbd_d
+ .id = -1,
+ };
+
++/*
++ * Spitz Remote Control Device
++ */
++static struct platform_device sharpsl_rc_device = {
++ .name = "sharpsl-remote-control",
++ .id = -1,
++};
+
+ /*
+ * Spitz LEDs
+@@ -476,6 +483,7 @@ static struct platform_device *devices[]
+ &spitzscoop_device,
+ &spitzssp_device,
+ &spitzkbd_device,
++ &sharpsl_rc_device,
+ &spitzts_device,
+ &spitzbl_device,
+ &spitzled_device,
+Index: linux-2.6.20/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/Kconfig
++++ linux-2.6.20/drivers/input/keyboard/Kconfig
+@@ -154,6 +154,17 @@ config KEYBOARD_SPITZ
+ To compile this driver as a module, choose M here: the
+ module will be called spitzkbd.
+
++config SHARPSL_RC
++ tristate "Sharp SL-Cxx00 Remote Control"
++ depends on PXA_SHARPSL
++ default y
++ help
++ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
++ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
++
++ To compile this driver as a module, choose M here: the
++ module will be called sharpsl_rc.
++
+ config KEYBOARD_AMIGA
+ tristate "Amiga keyboard"
+ depends on AMIGA
+Index: linux-2.6.20/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/Makefile
++++ linux-2.6.20/drivers/input/keyboard/Makefile
+@@ -14,6 +14,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
+ obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
+ obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
+ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
+ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+Index: linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
+===================================================================
+--- /dev/null
++++ linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
+@@ -0,0 +1,291 @@
++/*
++ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
++ *
++ * Copyright (c) 2004-2005 Richard Purdie
++ *
++ * Based on corgikbd.c and Sharp's RC driver
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#define DEBUG 1
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/interrupt.h>
++#include <linux/jiffies.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++
++#ifdef CONFIG_MACH_SPITZ
++#include <asm/arch/spitz.h>
++#endif
++#ifdef CONFIG_MACH_CORGI
++#include <asm/arch/corgi.h>
++#endif
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/sharpsl.h>
++#include <asm/hardware/sharpsl_pm.h>
++
++#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
++
++struct remote_control_key {
++ unsigned char min;
++ unsigned char max;
++ unsigned char key;
++};
++
++#ifdef CONFIG_MACH_SPITZ
++#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE spitzscoop2_device
++#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
++#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++#ifdef CONFIG_MACH_CORGI
++#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE corgiscoop_device
++#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
++#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ //These need to be fixed for the CE-RH1's values
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++
++#define RELEASE_HI 230
++#define MAX_EARPHONE 6
++#define RC_POLL_MS 10
++#define RC_FINISH_MS 500
++#define WAIT_STATE 3
++#define NOISE_THRESHOLD 100
++
++struct sharpsl_rc {
++ struct input_dev *input;
++ struct device *dev;
++
++ spinlock_t lock;
++ struct timer_list rctimer;
++ struct timer_list rctimer_finish;
++
++ unsigned int handling_press;
++ unsigned int noise;
++ unsigned int state;
++ unsigned int last_key;
++};
++
++static int get_remocon_raw(void)
++{
++ int i, val;
++
++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
++ for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
++ if (val >= remote_keys[i].min
++ && val <= remote_keys[i].max) {
++ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
++ return remote_keys[i].key;
++ }
++ }
++ return 0;
++}
++
++static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct sharpsl_rc *data = dev_id;
++ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
++ if (!data->handling_press) {
++ DPRINTK("handling interrupt");
++ data->handling_press = 1;
++ data->noise = 0;
++ data->state = 0;
++ data->last_key = 0;
++
++ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ }
++ return IRQ_HANDLED;
++}
++
++static void sharpsl_rc_timer_callback(unsigned long dataPtr)
++{
++ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
++ int timer = 1;
++ int key = get_remocon_raw();
++ DPRINTK("timer callback, key: %d", key);
++
++ //wait for value to stabilize
++ if (data->state < WAIT_STATE) {
++ if (data->last_key != key) {
++ ++data->noise;
++ if (data->noise > NOISE_THRESHOLD) {
++ DPRINTK("too much noise, bailing");
++ timer = 0;
++ }
++ data->state = 0;
++ } else {
++ ++data->state;
++ }
++ data->last_key = key;
++
++ //stable value, send event
++ } else if (data->state == WAIT_STATE) {
++ data->noise = 0;
++ //non-key returned, skip the rest of the states and bail now
++ if (data->last_key == 0) {
++ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
++ timer = 0;
++ //send button press
++ } else {
++ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
++ input_report_key(data->input, data->last_key, 1);
++ }
++ ++data->state;
++
++ //wait until key is released
++ } else if (data->state < WAIT_STATE * 2) {
++ if (key == data->last_key
++ && data->noise < NOISE_THRESHOLD) {
++ data->state = WAIT_STATE + 1;
++ ++data->noise;
++ } else {
++ ++data->state;
++ }
++ //key is released, send event
++ } else {
++ //send button release
++ DPRINTK("release key %d", data->last_key);
++ input_report_key(data->input, data->last_key, 0);
++ timer = 0;
++ }
++ if (timer) {
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ } else {
++ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++ data->handling_press = 0;
++ }
++}
++
++static int __init sharpsl_rc_probe(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc;
++ struct input_dev *input_dev;
++ int i, ret;
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
++
++ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
++ input_dev = input_allocate_device();
++ if (!sharpsl_rc || !input_dev) {
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, sharpsl_rc);
++
++ sharpsl_rc->dev = &pdev->dev;
++ sharpsl_rc->input = input_dev;
++ spin_lock_init(&sharpsl_rc->lock);
++
++ /* Init Remote Control Timer */
++ init_timer(&sharpsl_rc->rctimer);
++ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
++ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
++
++ input_dev->name = "Sharp Remote Control CE-RHX";
++ input_dev->phys = "sharpsl_rc/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0100;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = sharpsl_rc;
++
++ input_dev->evbit[0] = BIT(EV_KEY);
++
++ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
++ set_bit(remote_keys[i].key, input_dev->keybit);
++
++ input_register_device(sharpsl_rc->input);
++
++ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
++ ret = request_irq(REMOTE_IRQ_INT,
++ sharpsl_rc_interrupt,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "sharpsl_rc",
++ sharpsl_rc);
++ if (ret < 0) {
++ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return ret;
++ }
++
++ return 0;
++}
++
++static int sharpsl_rc_remove(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
++
++ free_irq(REMOTE_IRQ_INT, sharpsl_rc);
++ del_timer_sync(&sharpsl_rc->rctimer);
++ input_unregister_device(sharpsl_rc->input);
++ kfree(sharpsl_rc);
++
++ return 0;
++}
++
++static struct platform_driver sharpsl_rc_driver = {
++ .probe = sharpsl_rc_probe,
++ .remove = sharpsl_rc_remove,
++ .suspend = NULL,
++ .resume = NULL,
++ .driver = {
++ .name = "sharpsl-remote-control",
++ },
++};
++
++static int __devinit sharpsl_rc_init(void)
++{
++ printk("sharpsl_rc_init\n");
++ return platform_driver_register(&sharpsl_rc_driver);
++}
++
++static void __exit sharpsl_rc_exit(void)
++{
++ printk("sharpsl_rc_exit\n");
++ platform_driver_unregister(&sharpsl_rc_driver);
++}
++
++module_init(sharpsl_rc_init);
++module_exit(sharpsl_rc_exit);
++
++MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
++MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
++MODULE_DESCRIPTION("SharpSL Remote Control Driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.20/drivers/input/keyboard/spitzkbd.c
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/spitzkbd.c
++++ linux-2.6.20/drivers/input/keyboard/spitzkbd.c
+@@ -19,6 +19,7 @@
+ #include <linux/jiffies.h>
+ #include <linux/module.h>
+ #include <linux/slab.h>
++#include <linux/kmod.h>
+
+ #include <asm/arch/spitz.h>
+ #include <asm/arch/hardware.h>
+@@ -279,13 +280,21 @@ static irqreturn_t spitzkbd_hinge_isr(in
+ static int sharpsl_hinge_state;
+ static int hinge_count;
+
++void spitzkbd_handle_sharpsl_rc(void *arg) {
++ request_module("sharpsl_rc");
++}
++
++DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
++
+ static void spitzkbd_hinge_timer(unsigned long data)
+ {
+ struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
+ unsigned long state;
+ unsigned long flags;
++ unsigned int headphone, remote;
+
+ state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
++ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
+ state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
+ if (state != sharpsl_hinge_state) {
+ hinge_count = 0;
+@@ -299,9 +308,18 @@ static void spitzkbd_hinge_timer(unsigne
+
+ input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
+ input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
+- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
++
++ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
++ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
++
++ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
++ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
+ input_sync(spitzkbd_data->input);
+
++ if (remote) {
++ schedule_work(&spitzkbd_work);
++ }
++
+ spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
+ } else {
+ mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
+@@ -394,6 +412,7 @@ static int __init spitzkbd_probe(struct
+ set_bit(SW_LID, input_dev->swbit);
+ set_bit(SW_TABLET_MODE, input_dev->swbit);
+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
++ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
+
+ err = input_register_device(input_dev);
+ if (err)
+@@ -431,9 +450,12 @@ static int __init spitzkbd_probe(struct
+ request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd SWB", spitzkbd);
+- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd HP", spitzkbd);
++ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "Spitzkbd HP Type", spitzkbd);
+
+ return 0;
+
+@@ -454,6 +476,7 @@ static int spitzkbd_remove(struct platfo
+ free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
++ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
+
+ del_timer_sync(&spitzkbd->htimer);
+Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl.h
++++ linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
+@@ -50,15 +50,10 @@ void spitz_wait_hsync(void);
+
+ #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
+
+-/* MAX1111 Channel Definitions */
+-#define MAX1111_BATT_VOLT 4u
+-#define MAX1111_BATT_TEMP 2u
+-#define MAX1111_ACIN_VOLT 6u
+-
+ extern struct battery_thresh spitz_battery_levels_acin[];
+ extern struct battery_thresh spitz_battery_levels_noac[];
+ void sharpsl_pm_pxa_init(void);
+ void sharpsl_pm_pxa_remove(void);
+-int sharpsl_pm_pxa_read_max1111(int channel);
++
+
+
+Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl_pm.c
++++ linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
+@@ -135,6 +135,8 @@ int sharpsl_pm_pxa_read_max1111(int chan
+ | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
+ }
+
++EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
++
+ void sharpsl_pm_pxa_init(void)
+ {
+ pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
+Index: linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
+===================================================================
+--- linux-2.6.20.orig/include/asm-arm/hardware/sharpsl_pm.h
++++ linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
+@@ -104,3 +104,10 @@ irqreturn_t sharpsl_ac_isr(int irq, void
+ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
+ irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
+
++/* MAX1111 Channel Definitions */
++#define MAX1111_REMCOM 0u
++#define MAX1111_BATT_VOLT 4u
++#define MAX1111_BATT_TEMP 2u
++#define MAX1111_ACIN_VOLT 6u
++
++int sharpsl_pm_pxa_read_max1111(int channel);
+Index: linux-2.6.20/include/linux/input.h
+===================================================================
+--- linux-2.6.20.orig/include/linux/input.h
++++ linux-2.6.20/include/linux/input.h
+@@ -602,6 +602,7 @@ struct input_absinfo {
+ #define SW_LID 0x00 /* set = lid shut */
+ #define SW_TABLET_MODE 0x01 /* set = tablet mode */
+ #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
++#define SW_REMOTE_INSERT 0x04 /* set = remote */
+ #define SW_MAX 0x0f
+
+ /*
+Index: linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/spitz_pm.c
++++ linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
+@@ -161,6 +161,13 @@ static int spitz_should_wakeup(unsigned
+ if (resume_on_alarm && (PEDR & PWER_RTC))
+ is_resume |= PWER_RTC;
+
++ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
++
++ //remote/headphone interrupt, wakeup
++ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
++ is_resume |= PWER_RTC;
++ }
++
+ dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
+ return is_resume;
+ }
diff --git a/packages/linux/linux-rp-2.6.21/.mtn2git_empty b/packages/linux/linux-rp-2.6.21/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/.mtn2git_empty
diff --git a/packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch b/packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch
new file mode 100644
index 0000000000..b5439c62e7
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch
@@ -0,0 +1,17 @@
+Index: linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c
+===================================================================
+--- linux-2.6.21.orig/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:45:39.000000000 +0100
++++ linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:47:30.000000000 +0100
+@@ -2666,6 +2666,12 @@
+ iface = netdev_priv(dev);
+ local = iface->local;
+
++ if(dev->base_addr == 0)
++ {
++ printk(KERN_DEBUG "%s: IRQ before base_addr set\n", dev->name);
++ return IRQ_HANDLED;
++ }
++
+ prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
+
+ if (local->func->card_present && !local->func->card_present(local)) {
diff --git a/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch
new file mode 100644
index 0000000000..4414b21191
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch
@@ -0,0 +1,12 @@
+Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
+===================================================================
+--- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
++++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
+@@ -488,7 +488,6 @@
+ PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
+ PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
+ PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
+- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
+ PCMCIA_DEVICE_NULL,
+ };
+ MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-akita b/packages/linux/linux-rp-2.6.21/defconfig-akita
new file mode 100644
index 0000000000..748ab41d22
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-akita
@@ -0,0 +1,1743 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Thu Mar 29 12:24:24 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_PXA_SHARPSL_25x is not set
+CONFIG_PXA_SHARPSL_27x=y
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_CORGI is not set
+CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+
+#
+# Soc Platforms
+#
+CONFIG_SND_PXA2xx_SOC=m
+CONFIG_SND_PXA2xx_SOC_I2S=m
+CONFIG_SND_PXA2xx_SOC_SPITZ=m
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SPITZ=m
+# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+CONFIG_SND_SOC_WM8750=m
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+# CONFIG_SND_SOC_UDA1380 is not set
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86
new file mode 100644
index 0000000000..d439d89813
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86
@@ -0,0 +1,1606 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Mon Jun 11 12:01:43 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+CONFIG_MPENTIUMII=y
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_HPET_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=y
+CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_HOTPLUG_CPU is not set
+# CONFIG_COMPAT_VDSO is not set
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_IBM is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_PCI_MSI=y
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_K8_NB=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_SONY_LAPTOP is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SEAGATE is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_MAC_EMUMOUSEBTN is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+# CONFIG_EL1 is not set
+# CONFIG_EL2 is not set
+# CONFIG_ELPLUS is not set
+# CONFIG_EL16 is not set
+# CONFIG_EL3 is not set
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_LANCE=m
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_SMC9194=m
+# CONFIG_NET_VENDOR_RACAL is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+CONFIG_TULIP_MWI=y
+CONFIG_TULIP_MMIO=y
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+# CONFIG_E2100 is not set
+# CONFIG_EWRK3 is not set
+# CONFIG_EEXPRESS is not set
+# CONFIG_EEXPRESS_PRO is not set
+# CONFIG_HPLAN_PLUS is not set
+# CONFIG_HPLAN is not set
+# CONFIG_LP486E is not set
+# CONFIG_ETH16I is not set
+CONFIG_NE2000=y
+# CONFIG_ZNET is not set
+# CONFIG_SEEQ8005 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_PCNET32_NAPI=y
+CONFIG_AMD8111_ETH=m
+CONFIG_AMD8111E_NAPI=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_ADAPTEC_STARFIRE_NAPI=y
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_FORCEDETH_NAPI=y
+CONFIG_CS89x0=m
+CONFIG_DGRS=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=y
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+CONFIG_8139TOO_PIO=y
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+CONFIG_SC92031=m
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_ACENIC=m
+CONFIG_ACENIC_OMIT_TIGON_I=y
+CONFIG_DL2K=m
+CONFIG_E1000=m
+CONFIG_E1000_NAPI=y
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+CONFIG_R8169_NAPI=y
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+CONFIG_SKY2=m
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_POWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+CONFIG_AGP=m
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+# CONFIG_DRM is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multi-Function Devices
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+# CONFIG_FB_VESA_STD is not set
+CONFIG_FB_VESA_TNG=y
+CONFIG_FB_VESA_DEFAULT_MODE="640x480-16@60"
+CONFIG_VIDEO_SELECT=y
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ISA devices
+#
+# CONFIG_SND_ADLIB is not set
+# CONFIG_SND_AD1816A is not set
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_ALS100 is not set
+# CONFIG_SND_AZT2320 is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_DT019X is not set
+# CONFIG_SND_ES968 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_MIRO is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+# CONFIG_SND_WAVEFRONT is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+CONFIG_SND_AC97_POWER_SAVE=y
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+CONFIG_USB_WACOM=y
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Instrumentation Support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_AES_586 is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+# CONFIG_LZO is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-c7x0 b/packages/linux/linux-rp-2.6.21/defconfig-c7x0
new file mode 100644
index 0000000000..e8efdd4de2
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-c7x0
@@ -0,0 +1,1786 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Thu Mar 29 13:32:11 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
+CONFIG_PXA_SHARPSL_25x=y
+# CONFIG_PXA_SHARPSL_27x is not set
+# CONFIG_MACH_POODLE is not set
+CONFIG_MACH_CORGI=y
+CONFIG_MACH_SHEPHERD=y
+CONFIG_MACH_HUSKY=y
+# CONFIG_MACH_TOSA is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SHARP_C7xx=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_CPU_FREQ_PXA25x=y
+CONFIG_KEXEC=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CORGI=y
+# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+CONFIG_USB_DSBR=m
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# Soc Platforms
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_CORGI=m
+# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+CONFIG_SND_SOC_WM8731=m
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+# CONFIG_SND_SOC_UDA1380 is not set
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-collie b/packages/linux/linux-rp-2.6.21/defconfig-collie
new file mode 100644
index 0000000000..422ed94df3
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-collie
@@ -0,0 +1,1739 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20.4
+# Fri Apr 6 23:20:59 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+CONFIG_SA1100_COLLIE=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_SHARP_LOCOMO=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_SA1100=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_SA1100_FIR=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_OBSOLETE_CHIPS=y
+CONFIG_MTD_SHARP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SA1100=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_LOCOMO=y
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELEKTOR is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_LOCOMO=m
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_MCP=y
+CONFIG_MCP_SA11X0=y
+CONFIG_MCP_UCB1200=y
+CONFIG_MCP_UCB1200_TS=m
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_LOCOMO=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_RADIO_SF16FMR2 is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_SA1100=y
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_LOCOMO=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+CONFIG_MMC_DEBUG=y
+CONFIG_MMC_BLOCK=m
+# CONFIG_MMC_TIFM_SD is not set
+CONFIG_MMC_SPI=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_LZO=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-hx2000 b/packages/linux/linux-rp-2.6.21/defconfig-hx2000
new file mode 100644
index 0000000000..2a67a2d045
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-hx2000
@@ -0,0 +1,1165 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-rc2
+# Mon Jan 1 01:49:04 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_MACH_HX2750=y
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+CONFIG_PXA_KEYS=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+CONFIG_PM_DEBUG=y
+# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_TSC2101=y
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multi-Function Devices
+#
+CONFIG_MFD_TSC2101=y
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_HX2750=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-poodle b/packages/linux/linux-rp-2.6.21/defconfig-poodle
new file mode 100644
index 0000000000..13616c08f1
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-poodle
@@ -0,0 +1,1656 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Mon Jul 10 23:38:56 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_HX2750 is not set
+CONFIG_PXA_SHARPSL_25x=y
+# CONFIG_PXA_SHARPSL_27x is not set
+CONFIG_MACH_POODLE=y
+# CONFIG_MACH_CORGI is not set
+# CONFIG_MACH_SHEPHERD is not set
+# CONFIG_MACH_HUSKY is not set
+# CONFIG_MACH_TOSA is not set
+CONFIG_PXA25x=y
+# CONFIG_PXA_KEYS is not set
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+CONFIG_SHARP_LOCOMO=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA25x=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_LOCOMO=y
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_LOCOMO=y
+# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+
+#
+# Encoders and Decoders
+#
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_CX25840 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_EM28XX is not set
+CONFIG_USB_DSBR=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_LOGO_OHAND_CLUT224 is not set
+CONFIG_LOGO_OZ240_CLUT224=y
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_LOCOMO=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# Soc Platforms
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2xx_SOC=m
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
+# CONFIG_SND_MAINSTONE_BASEBAND is not set
+# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
+# CONFIG_SND_PXA2xx_SOC_CORGI is not set
+# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
+CONFIG_SND_PXA2xx_SOC_POODLE=m
+# CONFIG_SND_PXA2xx_SOC_TOSA is not set
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+CONFIG_SND_SOC_WM8731=m
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+# CONFIG_SND_SOC_UDA1380 is not set
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-qemuarm b/packages/linux/linux-rp-2.6.21/defconfig-qemuarm
new file mode 100644
index 0000000000..f70b6db7c7
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-qemuarm
@@ -0,0 +1,1193 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Sat Aug 26 22:45:02 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_VERSATILE=y
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Versatile platform type
+#
+CONFIG_ARCH_VERSATILE_PB=y
+# CONFIG_MACH_VERSATILE_AB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_KEXEC is not set
+CONFIG_ARM_VIC=y
+CONFIG_ICST307=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+CONFIG_PCI=y
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_AFS_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=51200
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+CONFIG_SCSI_SYM53C8XX_2=y
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_POWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_AMBAKMI=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+# CONFIG_LEDS_CLASS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+CONFIG_FB_ARMCLCD=y
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+CONFIG_USB_WACOM=y
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-qemux86 b/packages/linux/linux-rp-2.6.21/defconfig-qemux86
new file mode 100644
index 0000000000..08e0a0c6c7
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-qemux86
@@ -0,0 +1,1567 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Mon Oct 16 19:42:42 2006
+#
+CONFIG_X86_32=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_VM86=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+CONFIG_M386=y
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_F00F_BUG=y
+CONFIG_X86_INTEL_USERCOPY=y
+# CONFIG_HPET_TIMER is not set
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=y
+CONFIG_X86_MCE_P4THERMAL=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+# CONFIG_REGPARM is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_HOTPLUG_CPU is not set
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+# CONFIG_ACPI_HOTKEY is not set
+CONFIG_ACPI_FAN=y
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_PCI_MSI is not set
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+# CONFIG_IP_NF_FTP is not set
+# CONFIG_IP_NF_IRC is not set
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=51200
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CS5535 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+CONFIG_SCSI_DPT_I2O=m
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+CONFIG_SCSI_SATA=y
+# CONFIG_SCSI_SATA_AHCI is not set
+# CONFIG_SCSI_SATA_SVW is not set
+CONFIG_SCSI_ATA_PIIX=y
+# CONFIG_SCSI_SATA_MV is not set
+# CONFIG_SCSI_SATA_NV is not set
+# CONFIG_SCSI_PDC_ADMA is not set
+# CONFIG_SCSI_SATA_QSTOR is not set
+# CONFIG_SCSI_SATA_PROMISE is not set
+CONFIG_SCSI_SATA_SX4=m
+# CONFIG_SCSI_SATA_SIL is not set
+# CONFIG_SCSI_SATA_SIL24 is not set
+CONFIG_SCSI_SATA_SIS=m
+# CONFIG_SCSI_SATA_ULI is not set
+# CONFIG_SCSI_SATA_VIA is not set
+# CONFIG_SCSI_SATA_VITESSE is not set
+CONFIG_SCSI_SATA_INTEL_COMBINED=y
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+CONFIG_SCSI_IPR=m
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_IEEE1394=y
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+# CONFIG_IEEE1394_OUI_DB is not set
+# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
+# CONFIG_IEEE1394_EXPORT_FULL_API is not set
+
+#
+# Device Drivers
+#
+
+#
+# Texas Instruments PCILynx requires I2C
+#
+CONFIG_IEEE1394_OHCI1394=y
+
+#
+# Protocol Drivers
+#
+# CONFIG_IEEE1394_VIDEO1394 is not set
+# CONFIG_IEEE1394_SBP2 is not set
+# CONFIG_IEEE1394_ETH1394 is not set
+# CONFIG_IEEE1394_DV1394 is not set
+CONFIG_IEEE1394_RAWIO=y
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_ISA=y
+# CONFIG_E2100 is not set
+# CONFIG_EWRK3 is not set
+# CONFIG_EEXPRESS is not set
+# CONFIG_EEXPRESS_PRO is not set
+# CONFIG_HPLAN_PLUS is not set
+# CONFIG_HPLAN is not set
+# CONFIG_LP486E is not set
+# CONFIG_ETH16I is not set
+CONFIG_NE2000=y
+# CONFIG_ZNET is not set
+# CONFIG_SEEQ8005 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_AC3200 is not set
+# CONFIG_APRICOT is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+CONFIG_NE2K_PCI=y
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_POWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+CONFIG_AGP=y
+# CONFIG_AGP_ALI is not set
+# CONFIG_AGP_ATI is not set
+# CONFIG_AGP_AMD is not set
+# CONFIG_AGP_AMD64 is not set
+CONFIG_AGP_INTEL=y
+# CONFIG_AGP_NVIDIA is not set
+# CONFIG_AGP_SIS is not set
+# CONFIG_AGP_SWORKS is not set
+# CONFIG_AGP_VIA is not set
+# CONFIG_AGP_EFFICEON is not set
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_I810 is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
+# CONFIG_MWAVE is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+
+#
+# Multi-Function Devices
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+# CONFIG_FB_VESA_STD is not set
+CONFIG_FB_VESA_TNG=y
+CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
+CONFIG_VIDEO_SELECT=y
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_AC97_BUS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ISA devices
+#
+# CONFIG_SND_ADLIB is not set
+# CONFIG_SND_AD1816A is not set
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_ALS100 is not set
+# CONFIG_SND_AZT2320 is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_DT019X is not set
+# CONFIG_SND_ES968 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_MIRO is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+# CONFIG_SND_WAVEFRONT is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+CONFIG_USB_WACOM=y
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGETKIT is not set
+CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Instrumentation Support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_UNWIND_INFO is not set
+CONFIG_EARLY_PRINTK=y
+CONFIG_STACK_BACKTRACE_COLS=2
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-spitz b/packages/linux/linux-rp-2.6.21/defconfig-spitz
new file mode 100644
index 0000000000..e1c2c10352
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-spitz
@@ -0,0 +1,1741 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Wed Jun 13 15:37:54 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_PXA_SHARPSL_25x is not set
+CONFIG_PXA_SHARPSL_27x=y
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable quiet"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_CORGI is not set
+CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+# CONFIG_SND_DEBUG_DETECT is not set
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SPITZ=m
+CONFIG_SND_SOC_WM8750=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_LZO=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-tosa b/packages/linux/linux-rp-2.6.21/defconfig-tosa
new file mode 100644
index 0000000000..4360f7a179
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/defconfig-tosa
@@ -0,0 +1,1612 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-rc5-git5
+# Tue Mar 14 09:05:26 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_HX2750 is not set
+CONFIG_PXA_SHARPSL_25x=y
+# CONFIG_PXA_SHARPSL_27x is not set
+# CONFIG_MACH_POODLE is not set
+# CONFIG_MACH_CORGI is not set
+# CONFIG_MACH_SHEPHERD is not set
+# CONFIG_MACH_HUSKY is not set
+CONFIG_MACH_TOSA=y
+CONFIG_PXA25x=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_TOSHIBA_TC6393XB=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA25x=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+# CONFIG_IP_NF_PPTP is not set
+CONFIG_IP_NF_QUEUE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_TMIO=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+CONFIG_KEYBOARD_TOSA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_TOUCHSCREEN_WM97XX=y
+# CONFIG_TOUCHSCREEN_WM9705 is not set
+CONFIG_TOUCHSCREEN_WM9712=y
+# CONFIG_TOUCHSCREEN_WM9713 is not set
+# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multi-Function Devices
+#
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TOSA=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_VIDEO_AUDIO_DECODER is not set
+# CONFIG_VIDEO_DECODER is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_W100 is not set
+CONFIG_FB_TMIO=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CORGI=y
+# CONFIG_BACKLIGHT_HP680 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_BUS=y
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=y
+
+#
+# Soc Platforms
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2xx_SOC=y
+CONFIG_SND_PXA2xx_SOC_AC97=y
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
+# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
+# CONFIG_SND_PXA2xx_SOC_CORGI is not set
+# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
+CONFIG_SND_PXA2xx_SOC_TOSA=y
+
+#
+# Soc Codecs
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+CONFIG_SND_SOC_WM9712=y
+# CONFIG_SND_SOC_UDA1380 is not set
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+# CONFIG_USB_ACECAD is not set
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+CONFIG_USB_MTOUCH=m
+# CONFIG_USB_ITMTOUCH is not set
+CONFIG_USB_EGALAX=m
+# CONFIG_USB_YEALINK is not set
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Multimedia devices
+#
+CONFIG_USB_DABUSB=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_DSBR=m
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_PWC is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_SQUASHFS_VMALLOC is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_GENERIC_ALLOCATOR=y
+# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch
new file mode 100644
index 0000000000..641fd19e50
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch
@@ -0,0 +1,209 @@
+This is a patch that I've been maintaining for a few years, and I'd
+really like to see it added to the mainstream zaurus kernel so I can
+finally stop distributing my own.
+
+This patch only effects the card while in monitor mode, and does not
+cause any known stability issues.
+
+http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
+
+Rick Farina (Zero_Chaos)
+
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
+@@ -69,6 +69,9 @@
+ iface = netdev_priv(dev);
+ local = iface->local;
+
++ if (local->iw_mode == IW_MODE_MONITOR)
++ goto xmit;
++
+ if (skb->len < ETH_HLEN) {
+ printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
+ "(len=%d)\n", dev->name, skb->len);
+@@ -234,6 +237,7 @@
+ memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
+ }
+
++xmit:
+ iface->stats.tx_packets++;
+ iface->stats.tx_bytes += skb->len;
+
+@@ -404,8 +408,6 @@
+ }
+
+ if (skb->len < 24) {
+- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
+- "(len=%d)\n", dev->name, skb->len);
+ ret = 0;
+ iface->stats.tx_dropped++;
+ goto fail;
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
+@@ -1005,6 +1005,35 @@
+ return fid;
+ }
+
++static int prism2_monitor_enable(struct net_device *dev)
++{
++ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
++ printk(KERN_DEBUG "Port type setting for monitor mode "
++ "failed\n");
++ return -EOPNOTSUPP;
++ }
++
++ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
++ 0, NULL, NULL)) {
++ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
++ return -EOPNOTSUPP;
++ }
++
++ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
++ HFA384X_WEPFLAGS_PRIVACYINVOKED |
++ HFA384X_WEPFLAGS_HOSTENCRYPT |
++ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
++ printk(KERN_DEBUG "WEP flags setting failed\n");
++ return -EOPNOTSUPP;
++ }
++
++ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
++ printk(KERN_DEBUG "Could not set promiscuous mode\n");
++ return -EOPNOTSUPP;
++ }
++
++ return 0;
++}
+
+ static int prism2_reset_port(struct net_device *dev)
+ {
+@@ -1031,6 +1060,10 @@
+ "port\n", dev->name);
+ }
+
++ if (local->iw_mode == IW_MODE_MONITOR)
++ /* force mode 0x0a after port 0 reset */
++ return prism2_monitor_enable(dev);
++
+ /* It looks like at least some STA firmware versions reset
+ * fragmentation threshold back to 2346 after enable command. Restore
+ * the configured value, if it differs from this default. */
+@@ -1466,6 +1499,10 @@
+ return 1;
+ }
+
++ if (local->iw_mode == IW_MODE_MONITOR)
++ /* force mode 0x0a after port 0 reset */
++ prism2_monitor_enable(dev);
++
+ local->hw_ready = 1;
+ local->hw_reset_tries = 0;
+ local->hw_resetting = 0;
+@@ -3156,6 +3193,7 @@
+ local->func->hw_config = prism2_hw_config;
+ local->func->hw_reset = prism2_hw_reset;
+ local->func->hw_shutdown = prism2_hw_shutdown;
++ local->func->monitor_enable = prism2_monitor_enable;
+ local->func->reset_port = prism2_reset_port;
+ local->func->schedule_reset = prism2_schedule_reset;
+ #ifdef PRISM2_DOWNLOAD_SUPPORT
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
+@@ -1104,33 +1104,7 @@
+
+ printk(KERN_DEBUG "Enabling monitor mode\n");
+ hostap_monitor_set_type(local);
+-
+- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
+- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
+- printk(KERN_DEBUG "Port type setting for monitor mode "
+- "failed\n");
+- return -EOPNOTSUPP;
+- }
+-
+- /* Host decrypt is needed to get the IV and ICV fields;
+- * however, monitor mode seems to remove WEP flag from frame
+- * control field */
+- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
+- HFA384X_WEPFLAGS_HOSTENCRYPT |
+- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
+- printk(KERN_DEBUG "WEP flags setting failed\n");
+- return -EOPNOTSUPP;
+- }
+-
+- if (local->func->reset_port(dev) ||
+- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
+- (HFA384X_TEST_MONITOR << 8),
+- 0, NULL, NULL)) {
+- printk(KERN_DEBUG "Setting monitor mode failed\n");
+- return -EOPNOTSUPP;
+- }
+-
+- return 0;
++ return local->func->reset_port(dev);
+ }
+
+
+@@ -1199,7 +1173,7 @@
+ local->iw_mode = *mode;
+
+ if (local->iw_mode == IW_MODE_MONITOR)
+- hostap_monitor_mode_enable(local);
++ return hostap_monitor_mode_enable(local);
+ else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
+ !local->fw_encrypt_ok) {
+ printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
+@@ -331,7 +331,7 @@
+ if (local->iw_mode == IW_MODE_REPEAT)
+ return HFA384X_PORTTYPE_WDS;
+ if (local->iw_mode == IW_MODE_MONITOR)
+- return HFA384X_PORTTYPE_PSEUDO_IBSS;
++ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
+ return HFA384X_PORTTYPE_HOSTAP;
+ }
+
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
+@@ -48,6 +48,8 @@
+ { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
+ /* Samsung MagicLAN SWL-2210P */
+ { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
++ /* NETGEAR MA311 */
++ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
+ { 0 }
+ };
+
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
+@@ -101,6 +101,7 @@
+ { 0xc250, 0x0002 } /* EMTAC A2424i */,
+ { 0xd601, 0x0002 } /* Z-Com XI300 */,
+ { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
++ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
+ { 0, 0}
+ };
+
+Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
+diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
+--- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
++++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
+@@ -575,6 +575,7 @@
+ int (*hw_config)(struct net_device *dev, int initial);
+ void (*hw_reset)(struct net_device *dev);
+ void (*hw_shutdown)(struct net_device *dev, int no_disable);
++ int (*monitor_enable)(struct net_device *dev);
+ int (*reset_port)(struct net_device *dev);
+ void (*schedule_reset)(local_info_t *local);
+ int (*download)(local_info_t *local,
diff --git a/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch b/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch
new file mode 100644
index 0000000000..380349f809
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch
@@ -0,0 +1,88 @@
+This patch should resolve problem when people get eth0 (orinoco_cs) instead of wlan0 (hostap_cs)
+with their WiFi cards.
+
+Patch will NEVER been accepted upstream.
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+Index: linux/drivers/net/wireless/orinoco_cs.c
+===================================================================
+--- linux.orig/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:04:10.000000000 +0200
++++ linux/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:17:43.000000000 +0200
+@@ -453,33 +453,21 @@
+ "Pavel Roskin <proski@gnu.org>, et al)";
+
+ static struct pcmcia_device_id orinoco_cs_ids[] = {
+- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */
+- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */
+ PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */
+- PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */
+- PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */
+ PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */
+ PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */
+ PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */
+ PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */
+ PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */
+- PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */
+ PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */
+ PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */
+ PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */
+- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */
+- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */
+- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), /* Compaq HNW-100 11 Mbps Wireless Adapter */
+ PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */
+- PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */
+ PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */
+ PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */
+- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */
+ PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */
+ PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008), /* CONTEC FLEXSCAN/FX-DDS110-PCC */
+ PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), /* Conceptronic CON11Cpro, EMTAC A2424i */
+- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), /* Safeway 802.11b, ZCOMAX AirRunner/XI-300 */
+- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), /* D-Link DCF660, Sandisk Connect SDWCFB-000 */
+ PCMCIA_DEVICE_PROD_ID12(" ", "IEEE 802.11 Wireless LAN/PC Card", 0x3b6e20c8, 0xefccafe9),
+ PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3),
+ PCMCIA_DEVICE_PROD_ID12("ACTIONTEC", "PRISM Wireless LAN PC Card", 0x393089da, 0xa71e69d5),
+@@ -487,31 +475,25 @@
+ PCMCIA_DEVICE_PROD_ID123("AIRVAST", "IEEE 802.11b Wireless PCMCIA Card", "HFA3863", 0xea569531, 0x4bcb9645, 0x355cb092),
+ PCMCIA_DEVICE_PROD_ID12("Allied Telesyn", "AT-WCL452 Wireless PCMCIA Radio", 0x5cd01705, 0x4271660f),
+ PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25", 0x78fc06ee, 0xdb9aa842),
+- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25", 0x78fc06ee, 0x45a50c1e),
+ PCMCIA_DEVICE_PROD_ID12("Avaya Communication", "Avaya Wireless PC Card", 0xd8a43b78, 0x0d341169),
+ PCMCIA_DEVICE_PROD_ID12("BENQ", "AWL100 PCMCIA ADAPTER", 0x35dadc74, 0x01f7fedb),
+ PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-PCM-L11G", 0x2decece3, 0xf57ca4b3),
+- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G", 0x2decece3, 0x82067c18),
+ PCMCIA_DEVICE_PROD_ID12("Cabletron", "RoamAbout 802.11 DS", 0x32d445f5, 0xedeffd90),
+- PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card", 0x54f7c49c, 0x15a75e5b),
+ PCMCIA_DEVICE_PROD_ID123("corega", "WL PCCL-11", "ISL37300P", 0x0a21501a, 0x59868926, 0xc9049a39),
+ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11", 0x5261440f, 0xa6405584),
+ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11", 0x5261440f, 0xdf6115f9),
+ PCMCIA_DEVICE_PROD_ID12("corega_K.K.", "Wireless_LAN_PCCB-11", 0x29e33311, 0xee7a27ae),
+ PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card", 0x71b18589, 0xf144e3ac),
+- PCMCIA_DEVICE_PROD_ID12("D", "Link DWL-650 11Mbps WLAN Card", 0x71b18589, 0xb6f1b0ab),
+ PCMCIA_DEVICE_PROD_ID12("D-Link Corporation", "D-Link DWL-650H 11Mbps WLAN Adapter", 0xef544d24, 0xcd8ea916),
+ PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100", 0xfdd73470, 0xe0b6f146),
+ PCMCIA_DEVICE_PROD_ID12("ELSA", "AirLancer MC-11", 0x4507a33a, 0xef54f0e3),
+ PCMCIA_DEVICE_PROD_ID12("HyperLink", "Wireless PC Card 11Mbps", 0x56cc3f1a, 0x0bcf220c),
+ PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0),
+ PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless 2011 LAN PC Card", 0x816cc815, 0x07f58077),
+- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE", 0x74c5e40d, 0xdb472a18),
+ PCMCIA_DEVICE_PROD_ID12("INTERSIL", "I-GATE 11M PC Card / PC Card plus", 0x74c5e40d, 0x8304ff77),
+ PCMCIA_DEVICE_PROD_ID12("Intersil", "PRISM 2_5 PCMCIA ADAPTER", 0x4b801a17, 0x6345a0bf),
+ PCMCIA_DEVICE_PROD_ID123("Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P", 0x4b801a17, 0xf222ec2d, 0x630d52b2),
+ PCMCIA_DEVICE_PROD_ID12("LeArtery", "SYNCBYAIR 11Mbps Wireless LAN PC Card", 0x7e3b326a, 0x49893e92),
+- PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card", 0x0733cc81, 0x0c52f395),
+ PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/IEEE", 0x23eb9949, 0xc562e72a),
+ PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11", 0x481e0094, 0x7360e410),
+ PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11G", 0x481e0094, 0xf57ca4b3),
+@@ -529,10 +511,8 @@
+ PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26),
+ PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b),
+ PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2532W-B EliteConnect Wireless Adapter", 0xc4f8b18b, 0x196bd757),
+- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2632W", 0xc4f8b18b, 0x474a1f2a),
+ PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e),
+ PCMCIA_DEVICE_PROD_ID123("The Linksys Group, Inc.", "Instant Wireless Network PC Card", "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
+- PCMCIA_DEVICE_PROD_ID12("ZoomAir 11Mbps High", "Rate wireless Networking", 0x273fe3db, 0x32a1eaee),
+ PCMCIA_DEVICE_NULL,
+ };
+ MODULE_DEVICE_TABLE(pcmcia, orinoco_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch
new file mode 100644
index 0000000000..bf20f46a05
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch
@@ -0,0 +1,90 @@
+---
+ drivers/serial/8250.c | 5 +++++
+ drivers/serial/serial_core.c | 1 +
+ drivers/serial/serial_cs.c | 12 +++++++++---
+ include/linux/serial_core.h | 1 +
+ 4 files changed, 16 insertions(+), 3 deletions(-)
+
+Index: linux-2.6.20/drivers/serial/8250.c
+===================================================================
+--- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
++++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
+@@ -2429,7 +2429,12 @@
+ .driver_name = "serial",
+ .dev_name = "ttyS",
+ .major = TTY_MAJOR,
++#ifdef CONFIG_SERIAL_PXA
++ .minor = 64 + 4,
++ .name_base = 4,
++#else
+ .minor = 64,
++#endif
+ .nr = UART_NR,
+ .cons = SERIAL8250_CONSOLE,
+ };
+Index: linux-2.6.20/drivers/serial/serial_core.c
+===================================================================
+--- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
+@@ -2068,7 +2068,8 @@
+ printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
+ port->dev ? port->dev->bus_id : "",
+ port->dev ? ": " : "",
+- drv->dev_name, port->line, address, port->irq, uart_type(port));
++ drv->dev_name, port->line + drv->name_base, address, port->irq,
++ uart_type(port));
+ }
+
+ static void
+@@ -2183,6 +2184,7 @@
+ normal->owner = drv->owner;
+ normal->driver_name = drv->driver_name;
+ normal->name = drv->dev_name;
++ normal->name_base = drv->name_base;
+ normal->major = drv->major;
+ normal->minor_start = drv->minor;
+ normal->type = TTY_DRIVER_TYPE_SERIAL;
+Index: linux-2.6.20/include/linux/serial_core.h
+===================================================================
+--- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
+@@ -341,6 +341,7 @@
+ struct module *owner;
+ const char *driver_name;
+ const char *dev_name;
++ int name_base;
+ int major;
+ int minor;
+ int nr;
+Index: linux-2.6.20/drivers/serial/serial_cs.c
+===================================================================
+--- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
++++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
+@@ -390,7 +390,7 @@
+ kio_addr_t iobase, int irq)
+ {
+ struct uart_port port;
+- int line;
++ int line, linestart;
+
+ memset(&port, 0, sizeof (struct uart_port));
+ port.iobase = iobase;
+@@ -411,10 +411,16 @@
+ return -EINVAL;
+ }
+
++#if CONFIG_SERIAL_PXA
++ linestart = 4;
++#else
++ linestart = 0;
++#endif
++
+ info->line[info->ndev] = line;
+- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
++ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
+ info->node[info->ndev].major = TTY_MAJOR;
+- info->node[info->ndev].minor = 0x40 + line;
++ info->node[info->ndev].minor = 0x40 + line + linestart;
+ if (info->ndev > 0)
+ info->node[info->ndev - 1].next = &info->node[info->ndev];
+ info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
new file mode 100644
index 0000000000..18bf4268fc
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
@@ -0,0 +1,155 @@
+
+From: Petr Vandrovec <vandrove@vc.cvut.cz>
+
+Patch below adds support for using different prescaler than 16 for 16c950
+chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
+card, which comes (apparently) with 806kHz clocks, and so you have to
+program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
+
+To get card properly running you also have to add lines below to
+/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
+50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
+specifying baud_rate in serial_cs, I assume that specifying it in
+serial.opts is right way to do this type of things.
+
+Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
+baud rate passed to uart code was uartclk / 16 while correct value for
+these devices (and for 16c950) is uartclk / 4.
+
+Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
+baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
+devices exist, but we should not ignore spd_cust, user probably knows why
+he asked for spd_cust.
+
+serial.opts:
+
+case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
+'0279,950b-2-GPRS Modem---')
+ SERIAL_OPTS="baud_base 50400"
+ ;;
+esac
+
+Cc: David Woodhouse <dwmw2@infradead.org>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+---
+
+ drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
+ 1 files changed, 64 insertions(+), 18 deletions(-)
+
+diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
+--- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
++++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
+@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
+ serial_unlink_irq_chain(up);
+ }
+
+-static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
++static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
++ unsigned int *prescaler)
+ {
+- unsigned int quot;
+-
+- /*
+- * Handle magic divisors for baud rates above baud_base on
+- * SMSC SuperIO chips.
++ /*
++ * Use special handling only if user did not supply its own divider.
++ * spd_cust is defined in terms of baud_base, so always use default
++ * prescaler when spd_cust is requested.
+ */
+- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
+- baud == (port->uartclk/4))
+- quot = 0x8001;
+- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
+- baud == (port->uartclk/8))
+- quot = 0x8002;
+- else
+- quot = uart_get_divisor(port, baud);
+
+- return quot;
++ *prescaler = 16;
++ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
++ unsigned int quot = port->uartclk / baud;
++
++ /*
++ * Handle magic divisors for baud rates above baud_base on
++ * SMSC SuperIO chips.
++ */
++ if (port->flags & UPF_MAGIC_MULTIPLIER) {
++ if (quot == 4) {
++ return 0x8001;
++ } else if (quot == 8) {
++ return 0x8002;
++ }
++ }
++ if (port->type == PORT_16C950) {
++ /*
++ * This computes TCR value (4 to 16), not CPR value (which can
++ * be between 1.000 and 31.875) - chip I have uses XTAL of
++ * 806400Hz, and so a division by 7 is required to get 115200Bd.
++ * I'm leaving CPR disabled for now, until someone will
++ * hit even more exotic XTAL (it is needed to get 500kbps
++ * or 1000kbps from 18.432MHz XTAL, but I have no device
++ * which would benefit from doing that).
++ *
++ * If we can use divide by 16, use it. Otherwise look for
++ * better prescaler, from 15 to 4. If quotient cannot
++ * be divided by any integer value between 4 and 15, use 4.
++ */
++ if (quot & 0x0F) {
++ unsigned int div;
++
++ for (div = 15; div > 4; div--) {
++ if (quot % div == 0) {
++ break;
++ }
++ }
++ *prescaler = div;
++ return quot / div;
++ }
++ }
++ }
++ return uart_get_divisor(port, baud);
+ }
+
+ static void
+@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
+ struct uart_8250_port *up = (struct uart_8250_port *)port;
+ unsigned char cval, fcr = 0;
+ unsigned long flags;
+- unsigned int baud, quot;
++ unsigned int baud, quot, prescaler;
+
+ switch (termios->c_cflag & CSIZE) {
+ case CS5:
+@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
+ /*
+ * Ask the core to calculate the divisor for us.
+ */
+- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
+- quot = serial8250_get_divisor(port, baud);
++
++ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
++ } else {
++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
++ }
++ quot = serial8250_get_divisor(port, baud, &prescaler);
+
+ /*
+ * Oxford Semi 952 rev B workaround
+@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
+ serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
+
+ /*
++ * Program prescaler for 16C950 chips.
++ */
++ if (up->port.type == PORT_16C950) {
++ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
++ }
++
++ /*
+ * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
+ * is written without DLAB set, this mode will be disabled.
+ */
+_
diff --git a/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch
new file mode 100644
index 0000000000..da83fdf5eb
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch
@@ -0,0 +1,519 @@
+Index: linux-2.6.20/arch/arm/mach-pxa/spitz.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/spitz.c
++++ linux-2.6.20/arch/arm/mach-pxa/spitz.c
+@@ -244,6 +244,13 @@ static struct platform_device spitzkbd_d
+ .id = -1,
+ };
+
++/*
++ * Spitz Remote Control Device
++ */
++static struct platform_device sharpsl_rc_device = {
++ .name = "sharpsl-remote-control",
++ .id = -1,
++};
+
+ /*
+ * Spitz LEDs
+@@ -476,6 +483,7 @@ static struct platform_device *devices[]
+ &spitzscoop_device,
+ &spitzssp_device,
+ &spitzkbd_device,
++ &sharpsl_rc_device,
+ &spitzts_device,
+ &spitzbl_device,
+ &spitzled_device,
+Index: linux-2.6.20/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/Kconfig
++++ linux-2.6.20/drivers/input/keyboard/Kconfig
+@@ -154,6 +154,17 @@ config KEYBOARD_SPITZ
+ To compile this driver as a module, choose M here: the
+ module will be called spitzkbd.
+
++config SHARPSL_RC
++ tristate "Sharp SL-Cxx00 Remote Control"
++ depends on PXA_SHARPSL
++ default y
++ help
++ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
++ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
++
++ To compile this driver as a module, choose M here: the
++ module will be called sharpsl_rc.
++
+ config KEYBOARD_AMIGA
+ tristate "Amiga keyboard"
+ depends on AMIGA
+Index: linux-2.6.20/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/Makefile
++++ linux-2.6.20/drivers/input/keyboard/Makefile
+@@ -14,6 +14,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
+ obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
+ obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
+ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
+ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+Index: linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
+===================================================================
+--- /dev/null
++++ linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
+@@ -0,0 +1,291 @@
++/*
++ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
++ *
++ * Copyright (c) 2004-2005 Richard Purdie
++ *
++ * Based on corgikbd.c and Sharp's RC driver
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#define DEBUG 1
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/interrupt.h>
++#include <linux/jiffies.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++
++#ifdef CONFIG_MACH_SPITZ
++#include <asm/arch/spitz.h>
++#endif
++#ifdef CONFIG_MACH_CORGI
++#include <asm/arch/corgi.h>
++#endif
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/sharpsl.h>
++#include <asm/hardware/sharpsl_pm.h>
++
++#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
++
++struct remote_control_key {
++ unsigned char min;
++ unsigned char max;
++ unsigned char key;
++};
++
++#ifdef CONFIG_MACH_SPITZ
++#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE spitzscoop2_device
++#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
++#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++#ifdef CONFIG_MACH_CORGI
++#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE corgiscoop_device
++#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
++#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ //These need to be fixed for the CE-RH1's values
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++
++#define RELEASE_HI 230
++#define MAX_EARPHONE 6
++#define RC_POLL_MS 10
++#define RC_FINISH_MS 500
++#define WAIT_STATE 3
++#define NOISE_THRESHOLD 100
++
++struct sharpsl_rc {
++ struct input_dev *input;
++ struct device *dev;
++
++ spinlock_t lock;
++ struct timer_list rctimer;
++ struct timer_list rctimer_finish;
++
++ unsigned int handling_press;
++ unsigned int noise;
++ unsigned int state;
++ unsigned int last_key;
++};
++
++static int get_remocon_raw(void)
++{
++ int i, val;
++
++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
++ for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
++ if (val >= remote_keys[i].min
++ && val <= remote_keys[i].max) {
++ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
++ return remote_keys[i].key;
++ }
++ }
++ return 0;
++}
++
++static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct sharpsl_rc *data = dev_id;
++ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
++ if (!data->handling_press) {
++ DPRINTK("handling interrupt");
++ data->handling_press = 1;
++ data->noise = 0;
++ data->state = 0;
++ data->last_key = 0;
++
++ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ }
++ return IRQ_HANDLED;
++}
++
++static void sharpsl_rc_timer_callback(unsigned long dataPtr)
++{
++ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
++ int timer = 1;
++ int key = get_remocon_raw();
++ DPRINTK("timer callback, key: %d", key);
++
++ //wait for value to stabilize
++ if (data->state < WAIT_STATE) {
++ if (data->last_key != key) {
++ ++data->noise;
++ if (data->noise > NOISE_THRESHOLD) {
++ DPRINTK("too much noise, bailing");
++ timer = 0;
++ }
++ data->state = 0;
++ } else {
++ ++data->state;
++ }
++ data->last_key = key;
++
++ //stable value, send event
++ } else if (data->state == WAIT_STATE) {
++ data->noise = 0;
++ //non-key returned, skip the rest of the states and bail now
++ if (data->last_key == 0) {
++ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
++ timer = 0;
++ //send button press
++ } else {
++ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
++ input_report_key(data->input, data->last_key, 1);
++ }
++ ++data->state;
++
++ //wait until key is released
++ } else if (data->state < WAIT_STATE * 2) {
++ if (key == data->last_key
++ && data->noise < NOISE_THRESHOLD) {
++ data->state = WAIT_STATE + 1;
++ ++data->noise;
++ } else {
++ ++data->state;
++ }
++ //key is released, send event
++ } else {
++ //send button release
++ DPRINTK("release key %d", data->last_key);
++ input_report_key(data->input, data->last_key, 0);
++ timer = 0;
++ }
++ if (timer) {
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ } else {
++ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++ data->handling_press = 0;
++ }
++}
++
++static int __init sharpsl_rc_probe(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc;
++ struct input_dev *input_dev;
++ int i, ret;
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
++
++ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
++ input_dev = input_allocate_device();
++ if (!sharpsl_rc || !input_dev) {
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, sharpsl_rc);
++
++ sharpsl_rc->dev = &pdev->dev;
++ sharpsl_rc->input = input_dev;
++ spin_lock_init(&sharpsl_rc->lock);
++
++ /* Init Remote Control Timer */
++ init_timer(&sharpsl_rc->rctimer);
++ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
++ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
++
++ input_dev->name = "Sharp Remote Control CE-RHX";
++ input_dev->phys = "sharpsl_rc/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0100;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = sharpsl_rc;
++
++ input_dev->evbit[0] = BIT(EV_KEY);
++
++ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
++ set_bit(remote_keys[i].key, input_dev->keybit);
++
++ input_register_device(sharpsl_rc->input);
++
++ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
++ ret = request_irq(REMOTE_IRQ_INT,
++ sharpsl_rc_interrupt,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "sharpsl_rc",
++ sharpsl_rc);
++ if (ret < 0) {
++ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return ret;
++ }
++
++ return 0;
++}
++
++static int sharpsl_rc_remove(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
++
++ free_irq(REMOTE_IRQ_INT, sharpsl_rc);
++ del_timer_sync(&sharpsl_rc->rctimer);
++ input_unregister_device(sharpsl_rc->input);
++ kfree(sharpsl_rc);
++
++ return 0;
++}
++
++static struct platform_driver sharpsl_rc_driver = {
++ .probe = sharpsl_rc_probe,
++ .remove = sharpsl_rc_remove,
++ .suspend = NULL,
++ .resume = NULL,
++ .driver = {
++ .name = "sharpsl-remote-control",
++ },
++};
++
++static int __devinit sharpsl_rc_init(void)
++{
++ printk("sharpsl_rc_init\n");
++ return platform_driver_register(&sharpsl_rc_driver);
++}
++
++static void __exit sharpsl_rc_exit(void)
++{
++ printk("sharpsl_rc_exit\n");
++ platform_driver_unregister(&sharpsl_rc_driver);
++}
++
++module_init(sharpsl_rc_init);
++module_exit(sharpsl_rc_exit);
++
++MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
++MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
++MODULE_DESCRIPTION("SharpSL Remote Control Driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.20/drivers/input/keyboard/spitzkbd.c
+===================================================================
+--- linux-2.6.20.orig/drivers/input/keyboard/spitzkbd.c
++++ linux-2.6.20/drivers/input/keyboard/spitzkbd.c
+@@ -19,6 +19,7 @@
+ #include <linux/jiffies.h>
+ #include <linux/module.h>
+ #include <linux/slab.h>
++#include <linux/kmod.h>
+
+ #include <asm/arch/spitz.h>
+ #include <asm/arch/hardware.h>
+@@ -279,13 +280,21 @@ static irqreturn_t spitzkbd_hinge_isr(in
+ static int sharpsl_hinge_state;
+ static int hinge_count;
+
++void spitzkbd_handle_sharpsl_rc(void *arg) {
++ request_module("sharpsl_rc");
++}
++
++DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
++
+ static void spitzkbd_hinge_timer(unsigned long data)
+ {
+ struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
+ unsigned long state;
+ unsigned long flags;
++ unsigned int headphone, remote;
+
+ state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
++ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
+ state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
+ if (state != sharpsl_hinge_state) {
+ hinge_count = 0;
+@@ -299,9 +308,18 @@ static void spitzkbd_hinge_timer(unsigne
+
+ input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
+ input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
+- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
++
++ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
++ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
++
++ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
++ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
+ input_sync(spitzkbd_data->input);
+
++ if (remote) {
++ schedule_work(&spitzkbd_work);
++ }
++
+ spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
+ } else {
+ mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
+@@ -394,6 +412,7 @@ static int __init spitzkbd_probe(struct
+ set_bit(SW_LID, input_dev->swbit);
+ set_bit(SW_TABLET_MODE, input_dev->swbit);
+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
++ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
+
+ err = input_register_device(input_dev);
+ if (err)
+@@ -431,9 +450,12 @@ static int __init spitzkbd_probe(struct
+ request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd SWB", spitzkbd);
+- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd HP", spitzkbd);
++ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "Spitzkbd HP Type", spitzkbd);
+
+ return 0;
+
+@@ -454,6 +476,7 @@ static int spitzkbd_remove(struct platfo
+ free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
++ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
+
+ del_timer_sync(&spitzkbd->htimer);
+Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl.h
++++ linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
+@@ -50,15 +50,10 @@ void spitz_wait_hsync(void);
+
+ #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
+
+-/* MAX1111 Channel Definitions */
+-#define MAX1111_BATT_VOLT 4u
+-#define MAX1111_BATT_TEMP 2u
+-#define MAX1111_ACIN_VOLT 6u
+-
+ extern struct battery_thresh spitz_battery_levels_acin[];
+ extern struct battery_thresh spitz_battery_levels_noac[];
+ void sharpsl_pm_pxa_init(void);
+ void sharpsl_pm_pxa_remove(void);
+-int sharpsl_pm_pxa_read_max1111(int channel);
++
+
+
+Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl_pm.c
++++ linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
+@@ -135,6 +135,8 @@ int sharpsl_pm_pxa_read_max1111(int chan
+ | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
+ }
+
++EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
++
+ void sharpsl_pm_pxa_init(void)
+ {
+ pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
+Index: linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
+===================================================================
+--- linux-2.6.20.orig/include/asm-arm/hardware/sharpsl_pm.h
++++ linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
+@@ -104,3 +104,10 @@ irqreturn_t sharpsl_ac_isr(int irq, void
+ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
+ irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
+
++/* MAX1111 Channel Definitions */
++#define MAX1111_REMCOM 0u
++#define MAX1111_BATT_VOLT 4u
++#define MAX1111_BATT_TEMP 2u
++#define MAX1111_ACIN_VOLT 6u
++
++int sharpsl_pm_pxa_read_max1111(int channel);
+Index: linux-2.6.20/include/linux/input.h
+===================================================================
+--- linux-2.6.20.orig/include/linux/input.h
++++ linux-2.6.20/include/linux/input.h
+@@ -602,6 +602,7 @@ struct input_absinfo {
+ #define SW_LID 0x00 /* set = lid shut */
+ #define SW_TABLET_MODE 0x01 /* set = tablet mode */
+ #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
++#define SW_REMOTE_INSERT 0x04 /* set = remote */
+ #define SW_MAX 0x0f
+
+ /*
+Index: linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
+===================================================================
+--- linux-2.6.20.orig/arch/arm/mach-pxa/spitz_pm.c
++++ linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
+@@ -161,6 +161,13 @@ static int spitz_should_wakeup(unsigned
+ if (resume_on_alarm && (PEDR & PWER_RTC))
+ is_resume |= PWER_RTC;
+
++ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
++
++ //remote/headphone interrupt, wakeup
++ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
++ is_resume |= PWER_RTC;
++ }
++
+ dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
+ return is_resume;
+ }
diff --git a/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch
new file mode 100644
index 0000000000..405d4ec124
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch
@@ -0,0 +1,4191 @@
+ fs/Kconfig | 65 +
+ fs/Makefile | 1
+ fs/squashfs/Makefile | 7
+ fs/squashfs/inode.c | 2124 +++++++++++++++++++++++++++++++++++++++++
+ fs/squashfs/squashfs.h | 86 +
+ fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
+ include/linux/squashfs_fs.h | 911 +++++++++++++++++
+ include/linux/squashfs_fs_i.h | 45
+ include/linux/squashfs_fs_sb.h | 74 +
+ init/do_mounts_rd.c | 13
+ 10 files changed, 4083 insertions(+)
+
+Index: git/fs/Kconfig
+===================================================================
+--- git.orig/fs/Kconfig 2006-10-31 16:09:22.000000000 +0000
++++ git/fs/Kconfig 2006-10-31 21:26:45.000000000 +0000
+@@ -1407,6 +1407,71 @@ config CRAMFS
+
+ If unsure, say N.
+
++config SQUASHFS
++ tristate "SquashFS 3.0 - Squashed file system support"
++ select ZLIB_INFLATE
++ help
++ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
++ System). Squashfs is a highly compressed read-only filesystem for Linux.
++ It uses zlib compression to compress both files, inodes and directories.
++ Inodes in the system are very small and all blocks are packed to minimise
++ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
++ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
++ uid/gid information, hard links and timestamps.
++
++ Squashfs is intended for general read-only filesystem use, for archival
++ use (i.e. in cases where a .tar.gz file may be used), and in embedded
++ systems where low overhead is needed. Further information and filesystem tools
++ are available from http://squashfs.sourceforge.net.
++
++ If you want to compile this as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called squashfs. Note that the root file system (the one
++ containing the directory /) cannot be compiled as a module.
++
++ If unsure, say N.
++
++config SQUASHFS_EMBEDDED
++
++ bool "Additional options for memory-constrained systems"
++ depends on SQUASHFS
++ default n
++ help
++ Saying Y here allows you to specify cache sizes and how Squashfs
++ allocates memory. This is only intended for memory constrained
++ systems.
++
++ If unsure, say N.
++
++config SQUASHFS_FRAGMENT_CACHE_SIZE
++ int "Number of fragments cached" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default "3"
++ help
++ By default SquashFS caches the last 3 fragments read from
++ the filesystem. Increasing this amount may mean SquashFS
++ has to re-read fragments less often from disk, at the expense
++ of extra system memory. Decreasing this amount will mean
++ SquashFS uses less memory at the expense of extra reads from disk.
++
++ Note there must be at least one cached fragment. Anything
++ much more than three will probably not make much difference.
++
++config SQUASHFS_VMALLOC
++ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default n
++ help
++ By default SquashFS uses kmalloc to obtain fragment cache memory.
++ Kmalloc memory is the standard kernel allocator, but it can fail
++ on memory constrained systems. Because of the way Vmalloc works,
++ Vmalloc can succeed when kmalloc fails. Specifying this option
++ will make SquashFS always use Vmalloc to allocate the
++ fragment cache memory.
++
++ If unsure, say N.
++
+ config VXFS_FS
+ tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+ depends on BLOCK
+Index: git/fs/Makefile
+===================================================================
+--- git.orig/fs/Makefile 2006-10-31 16:09:22.000000000 +0000
++++ git/fs/Makefile 2006-10-31 21:26:45.000000000 +0000
+@@ -67,6 +67,7 @@ obj-$(CONFIG_JBD) += jbd/
+ obj-$(CONFIG_JBD2) += jbd2/
+ obj-$(CONFIG_EXT2_FS) += ext2/
+ obj-$(CONFIG_CRAMFS) += cramfs/
++obj-$(CONFIG_SQUASHFS) += squashfs/
+ obj-$(CONFIG_RAMFS) += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
+Index: git/fs/squashfs/inode.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/fs/squashfs/inode.c 2006-11-01 18:01:32.000000000 +0000
+@@ -0,0 +1,2124 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * inode.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++
++static void squashfs_put_super(struct super_block *);
++static int squashfs_statfs(struct dentry *, struct kstatfs *);
++static int squashfs_symlink_readpage(struct file *file, struct page *page);
++static int squashfs_readpage(struct file *file, struct page *page);
++static int squashfs_readpage4K(struct file *file, struct page *page);
++static int squashfs_readdir(struct file *, void *, filldir_t);
++static struct inode *squashfs_alloc_inode(struct super_block *sb);
++static void squashfs_destroy_inode(struct inode *inode);
++static int init_inodecache(void);
++static void destroy_inodecache(void);
++static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
++ struct nameidata *);
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++static int squashfs_get_sb(struct file_system_type *, int,
++ const char *, void *, struct vfsmount *);
++
++
++static z_stream stream;
++
++static struct file_system_type squashfs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "squashfs",
++ .get_sb = squashfs_get_sb,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static struct super_operations squashfs_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
++ .readpage = squashfs_symlink_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops = {
++ .readpage = squashfs_readpage
++};
++
++SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
++ .readpage = squashfs_readpage4K
++};
++
++static struct file_operations squashfs_dir_ops = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir
++};
++
++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
++ .lookup = squashfs_lookup
++};
++
++
++static struct buffer_head *get_block_length(struct super_block *s,
++ int *cur_index, int *offset, int *c_byte)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned short temp;
++ struct buffer_head *bh;
++
++ if (!(bh = sb_bread(s, *cur_index)))
++ goto out;
++
++ if (msblk->devblksize - *offset == 1) {
++ if (msblk->swap)
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ else
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ if (msblk->swap)
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ bh->b_data);
++ else
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ bh->b_data);
++ *c_byte = temp;
++ *offset = 1;
++ } else {
++ if (msblk->swap) {
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ } else {
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ }
++ *c_byte = temp;
++ *offset += 2;
++ }
++
++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
++ if (*offset == msblk->devblksize) {
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ *offset = 0;
++ }
++ if (*((unsigned char *) (bh->b_data + *offset)) !=
++ SQUASHFS_MARKER_BYTE) {
++ ERROR("Metadata block marker corrupt @ %x\n",
++ *cur_index);
++ brelse(bh);
++ goto out;
++ }
++ (*offset)++;
++ }
++ return bh;
++
++out:
++ return NULL;
++}
++
++
++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
++ msblk->devblksize_log2) + 2];
++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
++ unsigned int cur_index = index >> msblk->devblksize_log2;
++ int bytes, avail_bytes, b = 0, k;
++ char *c_buffer;
++ unsigned int compressed;
++ unsigned int c_byte = length;
++
++ if (c_byte) {
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ if (!(bh[0] = sb_getblk(s, cur_index)))
++ goto block_release;
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b, bh);
++ } else {
++ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
++ &c_byte)))
++ goto read_failure;
++
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED(c_byte);
++ c_buffer = compressed ? msblk->read_data : buffer;
++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ for (b = 1; bytes < c_byte; b++) {
++ if (!(bh[b] = sb_getblk(s, ++cur_index)))
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b - 1, bh + 1);
++ }
++
++ if (compressed)
++ down(&msblk->read_data_mutex);
++
++ for (bytes = 0, k = 0; k < b; k++) {
++ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
++ msblk->devblksize - offset :
++ c_byte - bytes;
++ wait_on_buffer(bh[k]);
++ if (!buffer_uptodate(bh[k]))
++ goto block_release;
++ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++
++ /*
++ * uncompress block
++ */
++ if (compressed) {
++ int zlib_err;
++
++ stream.next_in = c_buffer;
++ stream.avail_in = c_byte;
++ stream.next_out = buffer;
++ stream.avail_out = msblk->read_size;
++
++ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
++ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
++ != Z_STREAM_END) || ((zlib_err =
++ zlib_inflateEnd(&stream)) != Z_OK)) {
++ ERROR("zlib_fs returned unexpected result 0x%x\n",
++ zlib_err);
++ bytes = 0;
++ } else
++ bytes = stream.total_out;
++
++ up(&msblk->read_data_mutex);
++ }
++
++ if (next_index)
++ *next_index = index + c_byte + (length ? 0 :
++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
++ ? 3 : 2));
++ return bytes;
++
++block_release:
++ while (--b >= 0)
++ brelse(bh[b]);
++
++read_failure:
++ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
++ return 0;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int n, i, bytes, return_length = length;
++ long long next_index;
++
++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++ while ( 1 ) {
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (msblk->block_cache[i].block == block)
++ break;
++
++ down(&msblk->block_cache_mutex);
++
++ if (i == SQUASHFS_CACHED_BLKS) {
++ /* read inode header block */
++ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
++ n ; n --, i = (i + 1) %
++ SQUASHFS_CACHED_BLKS)
++ if (msblk->block_cache[i].block !=
++ SQUASHFS_USED_BLK)
++ break;
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->waitq, &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->block_cache_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->waitq, &wait);
++ continue;
++ }
++ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
++
++ if (msblk->block_cache[i].block ==
++ SQUASHFS_INVALID_BLK) {
++ if (!(msblk->block_cache[i].data =
++ kmalloc(SQUASHFS_METADATA_SIZE,
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate cache"
++ "block\n");
++ up(&msblk->block_cache_mutex);
++ goto out;
++ }
++ }
++
++ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
++ up(&msblk->block_cache_mutex);
++
++ if (!(msblk->block_cache[i].length =
++ squashfs_read_data(s,
++ msblk->block_cache[i].data,
++ block, 0, &next_index))) {
++ ERROR("Unable to read cache block [%llx:%x]\n",
++ block, offset);
++ goto out;
++ }
++
++ down(&msblk->block_cache_mutex);
++ wake_up(&msblk->waitq);
++ msblk->block_cache[i].block = block;
++ msblk->block_cache[i].next_index = next_index;
++ TRACE("Read cache block [%llx:%x]\n", block, offset);
++ }
++
++ if (msblk->block_cache[i].block != block) {
++ up(&msblk->block_cache_mutex);
++ continue;
++ }
++
++ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
++ if (buffer)
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, length);
++ if (msblk->block_cache[i].length - offset == length) {
++ *next_block = msblk->block_cache[i].next_index;
++ *next_offset = 0;
++ } else {
++ *next_block = block;
++ *next_offset = offset + length;
++ }
++ up(&msblk->block_cache_mutex);
++ goto finish;
++ } else {
++ if (buffer) {
++ memcpy(buffer, msblk->block_cache[i].data +
++ offset, bytes);
++ buffer += bytes;
++ }
++ block = msblk->block_cache[i].next_index;
++ up(&msblk->block_cache_mutex);
++ length -= bytes;
++ offset = 0;
++ }
++ }
++
++finish:
++ return return_length;
++out:
++ return 0;
++}
++
++
++static int get_fragment_location(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
++ struct squashfs_fragment_entry fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment)
++{
++ down(&msblk->fragment_mutex);
++ fragment->locked --;
++ wake_up(&msblk->fragment_wait_queue);
++ up(&msblk->fragment_mutex);
++}
++
++
++SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length)
++{
++ int i, n, nf;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++
++ while ( 1 ) {
++ down(&msblk->fragment_mutex);
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
++ msblk->fragment[i].block != start_block; i++);
++
++ if (i == SQUASHFS_CACHED_FRAGMENTS) {
++ nf = (msblk->next_fragment + 1) %
++ SQUASHFS_CACHED_FRAGMENTS;
++ for (i = msblk->next_fragment, n =
++ SQUASHFS_CACHED_FRAGMENTS; n &&
++ msblk->fragment[i].locked; n--, i = (i + 1) %
++ SQUASHFS_CACHED_FRAGMENTS);
++
++ if (n == 0) {
++ wait_queue_t wait;
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ up(&msblk->fragment_mutex);
++ schedule();
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&msblk->fragment_wait_queue,
++ &wait);
++ continue;
++ }
++ msblk->next_fragment = nf;
++
++ if (msblk->fragment[i].data == NULL)
++ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
++ (SQUASHFS_FILE_MAX_SIZE))) {
++ ERROR("Failed to allocate fragment "
++ "cache block\n");
++ up(&msblk->fragment_mutex);
++ goto out;
++ }
++
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].locked = 1;
++ up(&msblk->fragment_mutex);
++
++ if (!(msblk->fragment[i].length = squashfs_read_data(s,
++ msblk->fragment[i].data,
++ start_block, length, NULL))) {
++ ERROR("Unable to read fragment cache block "
++ "[%llx]\n", start_block);
++ msblk->fragment[i].locked = 0;
++ goto out;
++ }
++
++ msblk->fragment[i].block = start_block;
++ TRACE("New fragment %d, start block %lld, locked %d\n",
++ i, msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ msblk->fragment[i].locked++;
++ up(&msblk->fragment_mutex);
++ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
++ msblk->fragment[i].block,
++ msblk->fragment[i].locked);
++ break;
++ }
++
++ return &msblk->fragment[i];
++
++out:
++ return NULL;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header *inodeb)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = inodeb->inode_number;
++ i->i_mtime.tv_sec = inodeb->mtime;
++ i->i_atime.tv_sec = inodeb->mtime;
++ i->i_ctime.tv_sec = inodeb->mtime;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header id, sid;
++ struct squashfs_base_inode_header *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_reg_inode_header *inodep = &id.reg;
++ struct squashfs_reg_inode_header *sinodep = &sid.reg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = 1;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_LREG_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_lreg_inode_header *inodep = &id.lreg;
++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header *inodep = &id.dir;
++ struct squashfs_dir_inode_header *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header *inodep = &id.dev;
++ struct squashfs_dev_inode_header *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ struct squashfs_ipc_inode_header *inodep = &id.ipc;
++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
++ goto failed_read1;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int read_fragment_index_table(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ /* Allocate fragment index table */
++ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ long long fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
++ &msblk->fragment_index[i], 1);
++ msblk->fragment_index[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget;
++ msblk->read_blocklist = read_blocklist;
++ msblk->read_fragment_index_table = read_fragment_index_table;
++
++ if (sblk->s_major == 1) {
++ if (!squashfs_1_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 1.0 support enabled\n");
++ return 0;
++ }
++ } else if (sblk->s_major == 2) {
++ if (!squashfs_2_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with "
++ "Squashfs 2.0 support enabled\n");
++ return 0;
++ }
++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
++ SQUASHFS_MINOR) {
++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
++ "filesystem\n", sblk->s_major, sblk->s_minor);
++ SERROR("Please update your kernel\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static int squashfs_fill_super(struct super_block *s, void *data, int silent)
++{
++ struct squashfs_sb_info *msblk;
++ struct squashfs_super_block *sblk;
++ int i;
++ char b[BDEVNAME_SIZE];
++ struct inode *root;
++
++ TRACE("Entered squashfs_read_superblock\n");
++
++ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
++ GFP_KERNEL))) {
++ ERROR("Failed to allocate superblock\n");
++ goto failure;
++ }
++ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
++ msblk = s->s_fs_info;
++ sblk = &msblk->sblk;
++
++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
++ msblk->devblksize_log2 = ffz(~msblk->devblksize);
++
++ init_MUTEX(&msblk->read_data_mutex);
++ init_MUTEX(&msblk->read_page_mutex);
++ init_MUTEX(&msblk->block_cache_mutex);
++ init_MUTEX(&msblk->fragment_mutex);
++ init_MUTEX(&msblk->meta_index_mutex);
++
++ init_waitqueue_head(&msblk->waitq);
++ init_waitqueue_head(&msblk->fragment_wait_queue);
++
++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
++ sizeof(struct squashfs_super_block) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ SERROR("unable to read superblock\n");
++ goto failed_mount;
++ }
++
++ /* Check it is a SQUASHFS superblock */
++ msblk->swap = 0;
++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
++ struct squashfs_super_block ssblk;
++
++ WARNING("Mounting a different endian SQUASHFS "
++ "filesystem on %s\n", bdevname(s->s_bdev, b));
++
++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
++ msblk->swap = 1;
++ } else {
++ SERROR("Can't find a SQUASHFS superblock on %s\n",
++ bdevname(s->s_bdev, b));
++ goto failed_mount;
++ }
++ }
++
++ /* Check the MAJOR & MINOR versions */
++ if(!supported_squashfs_filesystem(msblk, silent))
++ goto failed_mount;
++
++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
++ TRACE("Inodes are %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_INODES
++ (sblk->flags) ? "un" : "");
++ TRACE("Data is %scompressed\n",
++ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
++ ? "un" : "");
++ TRACE("Check data is %s present in the filesystem\n",
++ SQUASHFS_CHECK_DATA(sblk->flags) ?
++ "" : "not");
++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
++ TRACE("Block size %d\n", sblk->block_size);
++ TRACE("Number of inodes %d\n", sblk->inodes);
++ if (sblk->s_major > 1)
++ TRACE("Number of fragments %d\n", sblk->fragments);
++ TRACE("Number of uids %d\n", sblk->no_uids);
++ TRACE("Number of gids %d\n", sblk->no_guids);
++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
++ if (sblk->s_major > 1)
++ TRACE("sblk->fragment_table_start %llx\n",
++ sblk->fragment_table_start);
++ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
++
++ s->s_flags |= MS_RDONLY;
++ s->s_op = &squashfs_ops;
++
++ /* Init inode_table block pointer array */
++ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
++ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
++ ERROR("Failed to allocate block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
++
++ msblk->next_cache = 0;
++
++ /* Allocate read_data block */
++ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
++ SQUASHFS_METADATA_SIZE :
++ sblk->block_size;
++
++ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_data block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate read_page block */
++ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
++ ERROR("Failed to allocate read_page block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate uid and gid tables */
++ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ goto failed_mount;
++ }
++ msblk->guid = msblk->uid + sblk->no_uids;
++
++ if (msblk->swap) {
++ unsigned int suid[sblk->no_uids + sblk->no_guids];
++
++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
++ sblk->no_guids), (sizeof(unsigned int) * 8));
++ } else
++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++
++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
++ goto allocate_root;
++
++ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
++ ERROR("Failed to allocate fragment block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
++ msblk->fragment[i].locked = 0;
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].data = NULL;
++ }
++
++ msblk->next_fragment = 0;
++
++ /* Allocate fragment index table */
++ if (msblk->read_fragment_index_table(s) == 0)
++ goto failed_mount;
++
++allocate_root:
++ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
++ goto failed_mount;
++
++ if ((s->s_root = d_alloc_root(root)) == NULL) {
++ ERROR("Root inode create failed\n");
++ iput(root);
++ goto failed_mount;
++ }
++
++ TRACE("Leaving squashfs_read_super\n");
++ return 0;
++
++failed_mount:
++ kfree(msblk->fragment_index);
++ kfree(msblk->fragment);
++ kfree(msblk->uid);
++ kfree(msblk->read_page);
++ kfree(msblk->read_data);
++ kfree(msblk->block_cache);
++ kfree(msblk->fragment_index_2);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ return -EINVAL;
++
++failure:
++ return -ENOMEM;
++}
++
++
++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
++{
++ struct super_block *s = dentry->d_sb;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ TRACE("Entered squashfs_statfs\n");
++
++ buf->f_type = SQUASHFS_MAGIC;
++ buf->f_bsize = sblk->block_size;
++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
++ buf->f_bfree = buf->f_bavail = 0;
++ buf->f_files = sblk->inodes;
++ buf->f_ffree = 0;
++ buf->f_namelen = SQUASHFS_NAME_LEN;
++
++ return 0;
++}
++
++
++static int squashfs_symlink_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
++ long long block = SQUASHFS_I(inode)->start_block;
++ int offset = SQUASHFS_I(inode)->offset;
++ void *pageaddr = kmap(page);
++
++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
++ "%llx, offset %x\n", page->index,
++ SQUASHFS_I(inode)->start_block,
++ SQUASHFS_I(inode)->offset);
++
++ for (length = 0; length < index; length += bytes) {
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
++ block, offset, PAGE_CACHE_SIZE, &block,
++ &offset))) {
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
++ offset);
++ goto skip_read;
++ }
++ }
++
++ if (length != index) {
++ ERROR("(squashfs_symlink_readpage) length != index\n");
++ bytes = 0;
++ goto skip_read;
++ }
++
++ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
++ i_size_read(inode) - length;
++
++ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
++ offset, bytes, &block, &offset)))
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
++{
++ struct meta_index *meta = NULL;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
++
++ if(msblk->meta_index == NULL)
++ goto not_allocated;
++
++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
++ if (msblk->meta_index[i].inode_number == inode->i_ino &&
++ msblk->meta_index[i].offset >= offset &&
++ msblk->meta_index[i].offset <= index &&
++ msblk->meta_index[i].locked == 0) {
++ TRACE("locate_meta_index: entry %d, offset %d\n", i,
++ msblk->meta_index[i].offset);
++ meta = &msblk->meta_index[i];
++ offset = meta->offset;
++ }
++
++ if (meta)
++ meta->locked = 1;
++
++not_allocated:
++ up(&msblk->meta_index_mutex);
++
++ return meta;
++}
++
++
++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct meta_index *meta = NULL;
++ int i;
++
++ down(&msblk->meta_index_mutex);
++
++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
++
++ if(msblk->meta_index == NULL) {
++ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
++ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
++ ERROR("Failed to allocate meta_index\n");
++ goto failed;
++ }
++ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
++ msblk->meta_index[i].inode_number = 0;
++ msblk->meta_index[i].locked = 0;
++ }
++ msblk->next_meta_index = 0;
++ }
++
++ for(i = SQUASHFS_META_NUMBER; i &&
++ msblk->meta_index[msblk->next_meta_index].locked; i --)
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ if(i == 0) {
++ TRACE("empty_meta_index: failed!\n");
++ goto failed;
++ }
++
++ TRACE("empty_meta_index: returned meta entry %d, %p\n",
++ msblk->next_meta_index,
++ &msblk->meta_index[msblk->next_meta_index]);
++
++ meta = &msblk->meta_index[msblk->next_meta_index];
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ meta->inode_number = inode->i_ino;
++ meta->offset = offset;
++ meta->skip = skip;
++ meta->entries = 0;
++ meta->locked = 1;
++
++failed:
++ up(&msblk->meta_index_mutex);
++ return meta;
++}
++
++
++void release_meta_index(struct inode *inode, struct meta_index *meta)
++{
++ meta->locked = 0;
++}
++
++
++static int read_block_index(struct super_block *s, int blocks, char *block_list,
++ long long *start_block, int *offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned int *block_listp;
++ int block = 0;
++
++ if (msblk->swap) {
++ char sblock_list[blocks << 2];
++
++ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
++ ((unsigned int *)sblock_list), blocks);
++ } else
++ if (!squashfs_get_cached_block(s, block_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Unable to read block list [%llx:%x]\n",
++ *start_block, *offset);
++ goto failure;
++ }
++
++ for (block_listp = (unsigned int *) block_list; blocks;
++ block_listp++, blocks --)
++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
++
++ return block;
++
++failure:
++ return -1;
++}
++
++
++#define SIZE 256
++
++static inline int calculate_skip(int blocks) {
++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
++ return skip >= 7 ? 7 : skip + 1;
++}
++
++
++static int get_meta_index(struct inode *inode, int index,
++ long long *index_block, int *index_offset,
++ long long *data_block, char *block_list)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
++ int offset = 0;
++ struct meta_index *meta;
++ struct meta_entry *meta_entry;
++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
++ int cur_offset = SQUASHFS_I(inode)->offset;
++ long long cur_data_block = SQUASHFS_I(inode)->start_block;
++ int i;
++
++ index /= SQUASHFS_META_INDEXES * skip;
++
++ while ( offset < index ) {
++ meta = locate_meta_index(inode, index, offset + 1);
++
++ if (meta == NULL) {
++ if ((meta = empty_meta_index(inode, offset + 1,
++ skip)) == NULL)
++ goto all_done;
++ } else {
++ offset = index < meta->offset + meta->entries ? index :
++ meta->offset + meta->entries - 1;
++ meta_entry = &meta->meta_entry[offset - meta->offset];
++ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
++ cur_offset = meta_entry->offset;
++ cur_data_block = meta_entry->data_block;
++ TRACE("get_meta_index: offset %d, meta->offset %d, "
++ "meta->entries %d\n", offset, meta->offset,
++ meta->entries);
++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
++ " data_block 0x%llx\n", cur_index_block,
++ cur_offset, cur_data_block);
++ }
++
++ for (i = meta->offset + meta->entries; i <= index &&
++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
++ int blocks = skip * SQUASHFS_META_INDEXES;
++
++ while (blocks) {
++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
++ blocks;
++ int res = read_block_index(inode->i_sb, block,
++ block_list, &cur_index_block,
++ &cur_offset);
++
++ if (res == -1)
++ goto failed;
++
++ cur_data_block += res;
++ blocks -= block;
++ }
++
++ meta_entry = &meta->meta_entry[i - meta->offset];
++ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
++ meta_entry->offset = cur_offset;
++ meta_entry->data_block = cur_data_block;
++ meta->entries ++;
++ offset ++;
++ }
++
++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
++ meta->offset, meta->entries);
++
++ release_meta_index(inode, meta);
++ }
++
++all_done:
++ *index_block = cur_index_block;
++ *index_offset = cur_offset;
++ *data_block = cur_data_block;
++
++ return offset * SQUASHFS_META_INDEXES * skip;
++
++failed:
++ release_meta_index(inode, meta);
++ return -1;
++}
++
++
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize)
++{
++ long long block_ptr;
++ int offset;
++ long long block;
++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
++ block_list);
++
++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
++ block);
++
++ if(res == -1)
++ goto failure;
++
++ index -= res;
++
++ while ( index ) {
++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
++ int res = read_block_index(inode->i_sb, blocks, block_list,
++ &block_ptr, &offset);
++ if (res == -1)
++ goto failure;
++ block += res;
++ index -= blocks;
++ }
++
++ if (read_block_index(inode->i_sb, 1, block_list,
++ &block_ptr, &offset) == -1)
++ goto failure;
++ *bsize = *((unsigned int *) block_list);
++
++ return block;
++
++failure:
++ return 0;
++}
++
++
++static int squashfs_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char block_list[SIZE];
++ long long block;
++ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
++ void *pageaddr;
++ struct squashfs_fragment_cache *fragment = NULL;
++ char *data_ptr = msblk->read_page;
++
++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
++ int start_index = page->index & ~mask;
++ int end_index = start_index | mask;
++
++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT))
++ goto skip_read;
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ if ((block = (msblk->read_blocklist)(inode, index, 1,
++ block_list, NULL, &bsize)) == 0)
++ goto skip_read;
++
++ down(&msblk->read_page_mutex);
++
++ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
++ block, bsize, NULL))) {
++ ERROR("Unable to read page, block %llx, size %x\n", block,
++ bsize);
++ up(&msblk->read_page_mutex);
++ goto skip_read;
++ }
++ } else {
++ if ((fragment = get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)->u.s1.fragment_size))
++ == NULL) {
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ (int) SQUASHFS_I(inode)->
++ u.s1.fragment_size);
++ goto skip_read;
++ }
++ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
++ (i_size_read(inode) & (sblk->block_size
++ - 1));
++ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
++ data_ptr = fragment->data;
++ }
++
++ for (i = start_index; i <= end_index && byte_offset < bytes;
++ i++, byte_offset += PAGE_CACHE_SIZE) {
++ struct page *push_page;
++ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
++ PAGE_CACHE_SIZE : bytes - byte_offset;
++
++ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
++ bytes, i, byte_offset, available_bytes);
++
++ if (i == page->index) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++ } else if ((push_page =
++ grab_cache_page_nowait(page->mapping, i))) {
++ pageaddr = kmap_atomic(push_page, KM_USER0);
++
++ memcpy(pageaddr, data_ptr + byte_offset,
++ available_bytes);
++ memset(pageaddr + available_bytes, 0,
++ PAGE_CACHE_SIZE - available_bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(push_page);
++ SetPageUptodate(push_page);
++ unlock_page(push_page);
++ page_cache_release(push_page);
++ }
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < (i_size_read(inode) >>
++ sblk->block_log))
++ up(&msblk->read_page_mutex);
++ else
++ release_cached_fragment(msblk, fragment);
++
++ return 0;
++
++skip_read:
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++static int squashfs_readpage4K(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char block_list[SIZE];
++ long long block;
++ unsigned int bsize, bytes = 0;
++ void *pageaddr;
++
++ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
++ page->index,
++ SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT)) {
++ pageaddr = kmap_atomic(page, KM_USER0);
++ goto skip_read;
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || page->index < (i_size_read(inode) >>
++ sblk->block_log)) {
++ block = (msblk->read_blocklist)(inode, page->index, 1,
++ block_list, NULL, &bsize);
++
++ down(&msblk->read_page_mutex);
++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
++ bsize, NULL);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (bytes)
++ memcpy(pageaddr, msblk->read_page, bytes);
++ else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ block, bsize);
++ up(&msblk->read_page_mutex);
++ } else {
++ struct squashfs_fragment_cache *fragment =
++ get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block,
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ pageaddr = kmap_atomic(page, KM_USER0);
++ if (fragment) {
++ bytes = i_size_read(inode) & (sblk->block_size - 1);
++ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
++ u.s1.fragment_offset, bytes);
++ release_cached_fragment(msblk, fragment);
++ } else
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->
++ u.s1.fragment_start_block, (int)
++ SQUASHFS_I(inode)-> u.s1.fragment_size);
++ }
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ f_pos =- 3;
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length + 3;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
++ char str[SQUASHFS_NAME_LEN + 1];
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ return length + 3;
++}
++
++
++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
++
++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
++
++ while(file->f_pos < 3) {
++ char *name;
++ int size, i_ino;
++
++ if(file->f_pos == 0) {
++ name = ".";
++ size = 1;
++ i_ino = i->i_ino;
++ } else {
++ name = "..";
++ size = 2;
++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
++ }
++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
++ (unsigned int) dirent, name, size, (int)
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]);
++
++ if (filldir(dirent, name, size,
++ file->f_pos, i_ino,
++ squashfs_filetype_table[1]) < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos += size;
++ dirs_read++;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ dirs_read++;
++ }
++ }
++
++finish:
++ return dirs_read;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header dirh;
++ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
++ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %d\n", name,
++ dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++static void squashfs_put_super(struct super_block *s)
++{
++ int i;
++
++ if (s->s_fs_info) {
++ struct squashfs_sb_info *sbi = s->s_fs_info;
++ if (sbi->block_cache)
++ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
++ if (sbi->block_cache[i].block !=
++ SQUASHFS_INVALID_BLK)
++ kfree(sbi->block_cache[i].data);
++ if (sbi->fragment)
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
++ SQUASHFS_FREE(sbi->fragment[i].data);
++ kfree(sbi->fragment);
++ kfree(sbi->block_cache);
++ kfree(sbi->read_data);
++ kfree(sbi->read_page);
++ kfree(sbi->uid);
++ kfree(sbi->fragment_index);
++ kfree(sbi->fragment_index_2);
++ kfree(sbi->meta_index);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ }
++}
++
++
++static int squashfs_get_sb(struct file_system_type *fs_type,
++ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
++{
++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
++}
++
++
++static int __init init_squashfs_fs(void)
++{
++ int err = init_inodecache();
++ if (err)
++ goto out;
++
++ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
++ "Phillip Lougher\n");
++
++ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
++ ERROR("Failed to allocate zlib workspace\n");
++ destroy_inodecache();
++ err = -ENOMEM;
++ goto out;
++ }
++
++ if ((err = register_filesystem(&squashfs_fs_type))) {
++ vfree(stream.workspace);
++ destroy_inodecache();
++ }
++
++out:
++ return err;
++}
++
++
++static void __exit exit_squashfs_fs(void)
++{
++ vfree(stream.workspace);
++ unregister_filesystem(&squashfs_fs_type);
++ destroy_inodecache();
++}
++
++
++static kmem_cache_t * squashfs_inode_cachep;
++
++
++static struct inode *squashfs_alloc_inode(struct super_block *sb)
++{
++ struct squashfs_inode_info *ei;
++ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
++ if (!ei)
++ return NULL;
++ return &ei->vfs_inode;
++}
++
++
++static void squashfs_destroy_inode(struct inode *inode)
++{
++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
++}
++
++
++static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
++{
++ struct squashfs_inode_info *ei = foo;
++
++ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
++ SLAB_CTOR_CONSTRUCTOR)
++ inode_init_once(&ei->vfs_inode);
++}
++
++
++static int __init init_inodecache(void)
++{
++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
++ sizeof(struct squashfs_inode_info),
++ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
++ init_once, NULL);
++ if (squashfs_inode_cachep == NULL)
++ return -ENOMEM;
++ return 0;
++}
++
++
++static void destroy_inodecache(void)
++{
++ kmem_cache_destroy(squashfs_inode_cachep);
++}
++
++
++module_init(init_squashfs_fs);
++module_exit(exit_squashfs_fs);
++MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
++MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
+Index: git/fs/squashfs/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/fs/squashfs/Makefile 2006-10-31 21:26:45.000000000 +0000
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
++
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+Index: git/fs/squashfs/squashfs2_0.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/fs/squashfs/squashfs2_0.c 2006-11-01 18:01:49.000000000 +0000
+@@ -0,0 +1,757 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs2_0.c
++ */
++
++#include <linux/types.h>
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/smp_lock.h>
++#include <linux/slab.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/init.h>
++#include <linux/dcache.h>
++#include <linux/wait.h>
++#include <linux/zlib.h>
++#include <linux/blkdev.h>
++#include <linux/vmalloc.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++
++#include "squashfs.h"
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
++ struct nameidata *);
++
++static struct file_operations squashfs_dir_ops_2 = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir_2
++};
++
++static struct inode_operations squashfs_dir_inode_ops_2 = {
++ .lookup = squashfs_lookup_2
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static int read_fragment_index_table_2(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index_2,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ unsigned int fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
++ &msblk->fragment_index_2[i], 1);
++ msblk->fragment_index_2[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
++ struct squashfs_fragment_entry_2 fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry_2 sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++static struct inode *squashfs_new_inode(struct super_block *s,
++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ struct inode *i = new_inode(s);
++
++ if (i) {
++ i->i_ino = ino;
++ i->i_mtime.tv_sec = sblk->mkfs_time;
++ i->i_atime.tv_sec = sblk->mkfs_time;
++ i->i_ctime.tv_sec = sblk->mkfs_time;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_nlink = 1;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++ }
++
++ return i;
++}
++
++
++static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
++{
++ struct inode *i;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
++ - sblk->inode_table_start, offset);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header_2 id, sid;
++ struct squashfs_base_inode_header_2 *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_iget\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
++ long long frag_blk;
++ unsigned int frag_size;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location_2(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ if (sblk->block_size > 4096)
++ i->i_data.a_ops = &squashfs_aops;
++ else
++ i->i_data.a_ops = &squashfs_aops_4K;
++
++ TRACE("File inode %x:%x, start_block %x, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header_2 *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header_2 *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
++ goto failed_read1;
++
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ insert_inode_hash(i);
++ return i;
++
++failed_read:
++ ERROR("Unable to read inode [%x:%x]\n", block, offset);
++
++failed_read1:
++ return NULL;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
++ char str[SQUASHFS_NAME_LEN + 1];
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index_2),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ return length;
++}
++
++
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
++ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
++
++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos, SQUASHFS_MK_VFS_INODE(
++ dirh.start_block, dire->offset),
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ dirs_read++;
++ }
++ }
++
++finish:
++ return dirs_read;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
++ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (sorted && name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %lld\n", name,
++ dirh.start_block, dire->offset, ino);
++
++ inode = (msblk->iget)(i->i_sb, ino);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->iget = squashfs_iget_2;
++ msblk->read_fragment_index_table = read_fragment_index_table_2;
++
++ sblk->bytes_used = sblk->bytes_used_2;
++ sblk->uid_start = sblk->uid_start_2;
++ sblk->guid_start = sblk->guid_start_2;
++ sblk->inode_table_start = sblk->inode_table_start_2;
++ sblk->directory_table_start = sblk->directory_table_start_2;
++ sblk->fragment_table_start = sblk->fragment_table_start_2;
++
++ return 1;
++}
+Index: git/fs/squashfs/squashfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/fs/squashfs/squashfs.h 2006-10-31 21:26:45.000000000 +0000
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...) {}
++#endif
++
++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...) do { \
++ if (!silent) \
++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++ } while(0)
++
++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index);
++extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment);
++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length);
++extern struct address_space_operations squashfs_symlink_aops;
++extern struct address_space_operations squashfs_aops;
++extern struct address_space_operations squashfs_aops_4K;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
+Index: git/include/linux/squashfs_fs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/include/linux/squashfs_fs.h 2006-10-31 21:26:45.000000000 +0000
+@@ -0,0 +1,911 @@
++#ifndef SQUASHFS_FS
++#define SQUASHFS_FS
++
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs.h
++ */
++
++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#endif
++
++#ifdef CONFIG_SQUASHFS_VMALLOC
++#define SQUASHFS_ALLOC(a) vmalloc(a)
++#define SQUASHFS_FREE(a) vfree(a)
++#else
++#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
++#define SQUASHFS_FREE(a) kfree(a)
++#endif
++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#define SQUASHFS_MAJOR 3
++#define SQUASHFS_MINOR 0
++#define SQUASHFS_MAGIC 0x73717368
++#define SQUASHFS_MAGIC_SWAP 0x68737173
++#define SQUASHFS_START 0
++
++/* size of metadata (inode and directory) blocks */
++#define SQUASHFS_METADATA_SIZE 8192
++#define SQUASHFS_METADATA_LOG 13
++
++/* default size of data blocks */
++#define SQUASHFS_FILE_SIZE 65536
++#define SQUASHFS_FILE_LOG 16
++
++#define SQUASHFS_FILE_MAX_SIZE 65536
++
++/* Max number of uids and gids */
++#define SQUASHFS_UIDS 256
++#define SQUASHFS_GUIDS 255
++
++/* Max length of filename (not 255) */
++#define SQUASHFS_NAME_LEN 256
++
++#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
++#define SQUASHFS_INVALID_BLK ((long long) -1)
++#define SQUASHFS_USED_BLK ((long long) -2)
++
++/* Filesystem flags */
++#define SQUASHFS_NOI 0
++#define SQUASHFS_NOD 1
++#define SQUASHFS_CHECK 2
++#define SQUASHFS_NOF 3
++#define SQUASHFS_NO_FRAG 4
++#define SQUASHFS_ALWAYS_FRAG 5
++#define SQUASHFS_DUPLICATE 6
++
++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
++
++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOI)
++
++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOD)
++
++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOF)
++
++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NO_FRAG)
++
++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_ALWAYS_FRAG)
++
++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_DUPLICATE)
++
++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_CHECK)
++
++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
++ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
++ (duplicate_checking << 6))
++
++/* Max number of types and file types */
++#define SQUASHFS_DIR_TYPE 1
++#define SQUASHFS_FILE_TYPE 2
++#define SQUASHFS_SYMLINK_TYPE 3
++#define SQUASHFS_BLKDEV_TYPE 4
++#define SQUASHFS_CHRDEV_TYPE 5
++#define SQUASHFS_FIFO_TYPE 6
++#define SQUASHFS_SOCKET_TYPE 7
++#define SQUASHFS_LDIR_TYPE 8
++#define SQUASHFS_LREG_TYPE 9
++
++/* 1.0 filesystem type definitions */
++#define SQUASHFS_TYPES 5
++#define SQUASHFS_IPC_TYPE 0
++
++/* Flag whether block is compressed or uncompressed, bit is set if block is
++ * uncompressed */
++#define SQUASHFS_COMPRESSED_BIT (1 << 15)
++
++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
++
++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
++
++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
++
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
++
++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
++
++/*
++ * Inode number ops. Inodes consist of a compressed block number, and an
++ * uncompressed offset within that block
++ */
++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
++
++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
++
++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
++ << 16) + (B)))
++
++/* Compute 32 bit VFS inode number from squashfs inode number */
++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
++ ((b) >> 2) + 1))
++/* XXX */
++
++/* Translate between VFS mode and squashfs mode */
++#define SQUASHFS_MODE(a) ((a) & 0xfff)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
++
++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
++ sizeof(long long))
++
++/* cached data constants for filesystem */
++#define SQUASHFS_CACHED_BLKS 8
++
++#define SQUASHFS_MAX_FILE_SIZE_LOG 64
++
++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
++
++#define SQUASHFS_MARKER_BYTE 0xff
++
++/* meta index cache */
++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
++#define SQUASHFS_META_ENTRIES 31
++#define SQUASHFS_META_NUMBER 8
++#define SQUASHFS_SLOTS 4
++
++struct meta_entry {
++ long long data_block;
++ unsigned int index_block;
++ unsigned short offset;
++ unsigned short pad;
++};
++
++struct meta_index {
++ unsigned int inode_number;
++ unsigned int offset;
++ unsigned short entries;
++ unsigned short skip;
++ unsigned short locked;
++ unsigned short pad;
++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
++};
++
++
++/*
++ * definitions for structures on disk
++ */
++
++typedef long long squashfs_block_t;
++typedef long long squashfs_inode_t;
++
++struct squashfs_super_block {
++ unsigned int s_magic;
++ unsigned int inodes;
++ unsigned int bytes_used_2;
++ unsigned int uid_start_2;
++ unsigned int guid_start_2;
++ unsigned int inode_table_start_2;
++ unsigned int directory_table_start_2;
++ unsigned int s_major:16;
++ unsigned int s_minor:16;
++ unsigned int block_size_1:16;
++ unsigned int block_log:16;
++ unsigned int flags:8;
++ unsigned int no_uids:8;
++ unsigned int no_guids:8;
++ unsigned int mkfs_time /* time of filesystem creation */;
++ squashfs_inode_t root_inode;
++ unsigned int block_size;
++ unsigned int fragments;
++ unsigned int fragment_table_start_2;
++ long long bytes_used;
++ long long uid_start;
++ long long guid_start;
++ long long inode_table_start;
++ long long directory_table_start;
++ long long fragment_table_start;
++ long long unused;
++} __attribute__ ((packed));
++
++struct squashfs_dir_index {
++ unsigned int index;
++ unsigned int start_block;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++#define SQUASHFS_BASE_INODE_HEADER \
++ unsigned int inode_type:4; \
++ unsigned int mode:12; \
++ unsigned int uid:8; \
++ unsigned int guid:8; \
++ unsigned int mtime; \
++ unsigned int inode_number;
++
++struct squashfs_base_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_lreg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ long long file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int parent_inode;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int i_count:16;
++ unsigned int parent_inode;
++ struct squashfs_dir_index index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header {
++ struct squashfs_base_inode_header base;
++ struct squashfs_dev_inode_header dev;
++ struct squashfs_symlink_inode_header symlink;
++ struct squashfs_reg_inode_header reg;
++ struct squashfs_lreg_inode_header lreg;
++ struct squashfs_dir_inode_header dir;
++ struct squashfs_ldir_inode_header ldir;
++ struct squashfs_ipc_inode_header ipc;
++};
++
++struct squashfs_dir_entry {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ int inode_number:16;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_header {
++ unsigned int count:8;
++ unsigned int start_block;
++ unsigned int inode_number;
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry {
++ long long start_block;
++ unsigned int size;
++ unsigned int unused;
++} __attribute__ ((packed));
++
++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
++extern int squashfs_uncompress_init(void);
++extern int squashfs_uncompress_exit(void);
++
++/*
++ * macros to convert each packed bitfield structure from little endian to big
++ * endian and vice versa. These are needed when creating or using a filesystem
++ * on a machine with different byte ordering to the target architecture.
++ *
++ */
++
++#define SQUASHFS_SWAP_START \
++ int bits;\
++ int b_pos;\
++ unsigned long long val;\
++ unsigned char *s;\
++ unsigned char *d;
++
++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
++ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
++}
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ipc_inode_header))\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dev_inode_header)); \
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_symlink_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_reg_inode_header));\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
++}
++
++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_lreg_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ldir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
++ SQUASHFS_SWAP((s)->index, d, 0, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
++ SQUASHFS_SWAP((s)->size, d, 64, 8);\
++}
++
++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
++ SQUASHFS_SWAP((s)->size, d, 64, 32);\
++}
++
++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 2);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 16)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
++}
++
++#define SQUASHFS_SWAP_INTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 4);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 32)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
++}
++
++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 64)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
++}
++
++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * bits / 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ bits)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++
++struct squashfs_base_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int type:4;
++ unsigned int offset:4;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
++ SQUASHFS_SWAP((s)->guid, d, 20, 4);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_ipc_inode_header_1));\
++ SQUASHFS_SWAP((s)->type, d, 24, 4);\
++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dev_inode_header_1));\
++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_1));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_reg_inode_header_1));\
++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dir_inode_header_1));\
++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
++}
++
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++
++struct squashfs_dir_index_2 {
++ unsigned int index:27;
++ unsigned int start_block:29;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_base_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++ unsigned int i_count:16;
++ struct squashfs_dir_index_2 index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header_2 {
++ struct squashfs_base_inode_header_2 base;
++ struct squashfs_dev_inode_header_2 dev;
++ struct squashfs_symlink_inode_header_2 symlink;
++ struct squashfs_reg_inode_header_2 reg;
++ struct squashfs_dir_inode_header_2 dir;
++ struct squashfs_ldir_inode_header_2 ldir;
++ struct squashfs_ipc_inode_header_2 ipc;
++};
++
++struct squashfs_dir_header_2 {
++ unsigned int count:8;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_dir_entry_2 {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry_2 {
++ unsigned int start_block;
++ unsigned int size;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dev_inode_header_2)); \
++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_2));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_reg_inode_header_2));\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_ldir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
++ SQUASHFS_SWAP((s)->index, d, 0, 27);\
++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
++ SQUASHFS_SWAP((s)->size, d, 56, 8);\
++}
++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
++ SQUASHFS_SWAP((s)->size, d, 32, 32);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
++
++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
++ sizeof(int))
++
++#endif
++
++#ifdef __KERNEL__
++
++/*
++ * macros used to swap each structure entry, taking into account
++ * bitfields and different bitfield placing conventions on differing
++ * architectures
++ */
++
++#include <asm/byteorder.h>
++
++#ifdef __BIG_ENDIAN
++ /* convert from little endian to big endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, b_pos)
++#else
++ /* convert from big endian to little endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, 64 - tbits - b_pos)
++#endif
++
++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
++ b_pos = pos % 8;\
++ val = 0;\
++ s = (unsigned char *)p + (pos / 8);\
++ d = ((unsigned char *) &val) + 7;\
++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
++ *d-- = *s++;\
++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
++}
++
++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
++
++#endif
++#endif
+Index: git/include/linux/squashfs_fs_i.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/include/linux/squashfs_fs_i.h 2006-10-31 21:26:45.000000000 +0000
+@@ -0,0 +1,45 @@
++#ifndef SQUASHFS_FS_I
++#define SQUASHFS_FS_I
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_i.h
++ */
++
++struct squashfs_inode_info {
++ long long start_block;
++ unsigned int offset;
++ union {
++ struct {
++ long long fragment_start_block;
++ unsigned int fragment_size;
++ unsigned int fragment_offset;
++ long long block_list_start;
++ } s1;
++ struct {
++ long long directory_index_start;
++ unsigned int directory_index_offset;
++ unsigned int directory_index_count;
++ unsigned int parent_inode;
++ } s2;
++ } u;
++ struct inode vfs_inode;
++};
++#endif
+Index: git/include/linux/squashfs_fs_sb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ git/include/linux/squashfs_fs_sb.h 2006-10-31 21:26:45.000000000 +0000
+@@ -0,0 +1,74 @@
++#ifndef SQUASHFS_FS_SB
++#define SQUASHFS_FS_SB
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006
++ * Phillip Lougher <phillip@lougher.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_sb.h
++ */
++
++#include <linux/squashfs_fs.h>
++
++struct squashfs_cache {
++ long long block;
++ int length;
++ long long next_index;
++ char *data;
++};
++
++struct squashfs_fragment_cache {
++ long long block;
++ int length;
++ unsigned int locked;
++ char *data;
++};
++
++struct squashfs_sb_info {
++ struct squashfs_super_block sblk;
++ int devblksize;
++ int devblksize_log2;
++ int swap;
++ struct squashfs_cache *block_cache;
++ struct squashfs_fragment_cache *fragment;
++ int next_cache;
++ int next_fragment;
++ int next_meta_index;
++ unsigned int *uid;
++ unsigned int *guid;
++ long long *fragment_index;
++ unsigned int *fragment_index_2;
++ unsigned int read_size;
++ char *read_data;
++ char *read_page;
++ struct semaphore read_data_mutex;
++ struct semaphore read_page_mutex;
++ struct semaphore block_cache_mutex;
++ struct semaphore fragment_mutex;
++ struct semaphore meta_index_mutex;
++ wait_queue_head_t waitq;
++ wait_queue_head_t fragment_wait_queue;
++ struct meta_index *meta_index;
++ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
++ inode);
++ long long (*read_blocklist)(struct inode *inode, int \
++ index, int readahead_blks, char *block_list, \
++ unsigned short **block_p, unsigned int *bsize);
++ int (*read_fragment_index_table)(struct super_block *s);
++};
++#endif
+Index: git/init/do_mounts_rd.c
+===================================================================
+--- git.orig/init/do_mounts_rd.c 2006-10-31 16:09:47.000000000 +0000
++++ git/init/do_mounts_rd.c 2006-10-31 21:26:45.000000000 +0000
+@@ -5,6 +5,7 @@
+ #include <linux/ext2_fs.h>
+ #include <linux/romfs_fs.h>
+ #include <linux/cramfs_fs.h>
++#include <linux/squashfs_fs.h>
+ #include <linux/initrd.h>
+ #include <linux/string.h>
+
+@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
+ * numbers could not be found.
+ *
+ * We currently check for the following magic numbers:
++ * squashfs
+ * minix
+ * ext2
+ * romfs
+@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
+ struct ext2_super_block *ext2sb;
+ struct romfs_super_block *romfsb;
+ struct cramfs_super *cramfsb;
++ struct squashfs_super_block *squashfsb;
+ int nblocks = -1;
+ unsigned char *buf;
+
+@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
+ ext2sb = (struct ext2_super_block *) buf;
+ romfsb = (struct romfs_super_block *) buf;
+ cramfsb = (struct cramfs_super *) buf;
++ squashfsb = (struct squashfs_super_block *) buf;
+ memset(buf, 0xe5, size);
+
+ /*
+@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
+ goto done;
+ }
+
++ /* squashfs is at block zero too */
++ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
++ printk(KERN_NOTICE
++ "RAMDISK: squashfs filesystem found at block %d\n",
++ start_block);
++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ goto done;
++ }
++
+ /*
+ * Read block 1 to test for minix and ext2 superblock
+ */
diff --git a/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch b/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
new file mode 100644
index 0000000000..b1b0fc3549
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
@@ -0,0 +1,3141 @@
+diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt
+index ee277dd..93d6e6e 100644
+--- a/Documentation/fb/vesafb.txt
++++ b/Documentation/fb/vesafb.txt
+@@ -2,16 +2,18 @@
+ What is vesafb?
+ ===============
+
+-This is a generic driver for a graphic framebuffer on intel boxes.
++Vesafb is a generic framebuffer driver for x86 and x86_64 boxes.
+
+-The idea is simple: Turn on graphics mode at boot time with the help
+-of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
+-(and other) ports do.
++VESA BIOS Extensions Version 2.0 are required, because we need access to
++a linear frame buffer. VBE 3.0 is required if you want to use modes with a
++higher (than the standard 60 Hz) refresh rate.
+
+-This means we decide at boot time whenever we want to run in text or
+-graphics mode. Switching mode later on (in protected mode) is
+-impossible; BIOS calls work in real mode only. VESA BIOS Extensions
+-Version 2.0 are required, because we need a linear frame buffer.
++The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
++and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
++technology it uses (vm86). Vesafb-tng has more features than vesafb
++(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
++video mode without rebooting, selecting a mode by providing its
++modedb name, and more).
+
+ Advantages:
+
+@@ -29,26 +31,35 @@ Disadvantages:
+ How to use it?
+ ==============
+
+-Switching modes is done using the vga=... boot parameter. Read
+-Documentation/svga.txt for details.
++If you are running a 32-bit x86 system and you decide to use vesafb-tng,
++you can either compile the driver into the kernel or use it as a module.
++The graphics mode you want to use is in both cases specified using the
++standard modedb format.
+
+-You should compile in both vgacon (for text mode) and vesafb (for
+-graphics mode). Which of them takes over the console depends on
+-whenever the specified mode is text or graphics.
++If your system doesn't support vm86 calls, things get a little more tricky.
++Since on such systems you can't do BIOS calls from protected mode in which
++kernel runs, you have to decide at boot time whenever you want to run in text
++or in graphics mode. Switching mode later on is impossible. Switching modes
++is done using the vga=... boot parameter. Read Documentation/svga.txt for
++details. Below is a more detailed description of what to do on systems using
++the standard vesafb driver.
+
+-The graphic modes are NOT in the list which you get if you boot with
+-vga=ask and hit return. The mode you wish to use is derived from the
+-VESA mode number. Here are those VESA mode numbers:
++You should compile in both vgacon (for text mode) and vesafb (for graphics
++mode). Which of them takes over the console depends on whenever the
++specified mode is text or graphics.
++
++The graphic modes are NOT in the list which you get if you boot with vga=ask
++and hit return. The mode you wish to use is derived from the VESA mode number.
++Here are those VESA mode numbers:
+
+ | 640x480 800x600 1024x768 1280x1024
+ ----+-------------------------------------
+-256 | 0x101 0x103 0x105 0x107
+-32k | 0x110 0x113 0x116 0x119
+-64k | 0x111 0x114 0x117 0x11A
+-16M | 0x112 0x115 0x118 0x11B
++256 | 0x101 0x103 0x105 0x107
++32k | 0x110 0x113 0x116 0x119
++64k | 0x111 0x114 0x117 0x11A
++16M | 0x112 0x115 0x118 0x11B
+
+-The video mode number of the Linux kernel is the VESA mode number plus
+-0x200.
++The video mode number of the Linux kernel is the VESA mode number plus 0x200.
+
+ Linux_kernel_mode_number = VESA_mode_number + 0x200
+
+@@ -56,15 +67,15 @@ So the table for the Kernel mode numbers are:
+
+ | 640x480 800x600 1024x768 1280x1024
+ ----+-------------------------------------
+-256 | 0x301 0x303 0x305 0x307
+-32k | 0x310 0x313 0x316 0x319
+-64k | 0x311 0x314 0x317 0x31A
+-16M | 0x312 0x315 0x318 0x31B
++256 | 0x301 0x303 0x305 0x307
++32k | 0x310 0x313 0x316 0x319
++64k | 0x311 0x314 0x317 0x31A
++16M | 0x312 0x315 0x318 0x31B
+
+-To enable one of those modes you have to specify "vga=ask" in the
+-lilo.conf file and rerun LILO. Then you can type in the desired
+-mode at the "vga=ask" prompt. For example if you like to use
+-1024x768x256 colors you have to say "305" at this prompt.
++To enable one of those modes you have to specify "vga=ask" in the lilo.conf
++file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
++prompt. For example if you like to use 1024x768x256 colors you have to say
++"305" at this prompt.
+
+ If this does not work, this might be because your BIOS does not support
+ linear framebuffers or because it does not support this mode at all.
+@@ -72,11 +83,12 @@ Even if your board does, it might be the BIOS which does not. VESA BIOS
+ Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
+ "bad mode number" message if something goes wrong.
+
+-1. Note: LILO cannot handle hex, for booting directly with
++1. Note: LILO cannot handle hex, for booting directly with
+ "vga=mode-number" you have to transform the numbers to decimal.
+ 2. Note: Some newer versions of LILO appear to work with those hex values,
+ if you set the 0x in front of the numbers.
+
++
+ X11
+ ===
+
+@@ -84,98 +96,164 @@ XF68_FBDev should work just fine, but it is non-accelerated. Running
+ another (accelerated) X-Server like XF86_SVGA might or might not work.
+ It depends on X-Server and graphics board.
+
+-The X-Server must restore the video mode correctly, else you end up
++The X-Server must restore the video mode correctly, or else you end up
+ with a broken console (and vesafb cannot do anything about this).
++With vesafb-tng chances are that the console will be restored properly
++even if the X server messes up the video mode.
+
+
+ Refresh rates
+ =============
+
+-There is no way to change the vesafb video mode and/or timings after
+-booting linux. If you are not happy with the 60 Hz refresh rate, you
+-have these options:
++With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
++the refresh rate either at boot time (by specifying the @<rr> part of
++the mode name) or later, using the fbset utility.
++
++If you want to use the default BIOS refresh rate while switching modes
++on a running system, set pixclock to 0.
+
+- * configure and load the DOS-Tools for your the graphics board (if
+- available) and boot linux with loadlin.
+- * use a native driver (matroxfb/atyfb) instead if vesafb. If none
++With VBE 2.0 there is no way to change the mode timings after booting
++Linux. If you are not happy with the 60 Hz refresh rate, you have
++the following options:
++
++ * Configure and load the DOS tools for your the graphics board (if
++ available) and boot Linux with loadlin.
++ * Use a native driver (matroxfb/atyfb) instead of vesafb. If none
+ is available, write a new one!
+- * VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
+- support nor the specs, so I have not checked this yet.
++ * Use a BIOS editor to change the default refresh rate (such an
++ editor does exist at least for ATI Radeon BIOSes).
++ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
++ use a kernel patch (vesafb-rrc) to hard-code some mode timings in
++ the kernel and use these while setting the video mode at boot time.
++
++Note that there are some boards (nVidia 59**, 57** and newer models)
++claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
++CRTC values provided by software such as vesafb-tng. You'll not be able
++to adjust the refresh rate if you're using one of these boards.
+
+
+ Configuration
+ =============
+
+-The VESA BIOS provides protected mode interface for changing
+-some parameters. vesafb can use it for palette changes and
+-to pan the display. It is turned off by default because it
+-seems not to work with some BIOS versions, but there are options
+-to turn it on.
+-
+-You can pass options to vesafb using "video=vesafb:option" on
+-the kernel command line. Multiple options should be separated
+-by comma, like this: "video=vesafb:ypan,invers"
+-
+-Accepted options:
+-
+-invers no comment...
+-
+-ypan enable display panning using the VESA protected mode
+- interface. The visible screen is just a window of the
+- video memory, console scrolling is done by changing the
+- start of the window.
+- pro: * scrolling (fullscreen) is fast, because there is
+- no need to copy around data.
+- * You'll get scrollback (the Shift-PgUp thing),
+- the video memory can be used as scrollback buffer
+- kontra: * scrolling only parts of the screen causes some
+- ugly flicker effects (boot logo flickers for
+- example).
+-
+-ywrap Same as ypan, but assumes your gfx board can wrap-around
+- the video memory (i.e. starts reading from top if it
+- reaches the end of video memory). Faster than ypan.
+-
+-redraw scroll by redrawing the affected part of the screen, this
+- is the safe (and slow) default.
+-
+-
+-vgapal Use the standard vga registers for palette changes.
+- This is the default.
+-pmipal Use the protected mode interface for palette changes.
+-
+-mtrr:n setup memory type range registers for the vesafb framebuffer
+- where n:
+- 0 - disabled (equivalent to nomtrr) (default)
+- 1 - uncachable
+- 2 - write-back
+- 3 - write-combining
+- 4 - write-through
+-
+- If you see the following in dmesg, choose the type that matches the
+- old one. In this example, use "mtrr:2".
++The VESA BIOS provides protected mode interface for changing some parameters.
++vesafb can use it for palette changes and to pan the display. It is turned
++off by default because it seems not to work with some BIOS versions, but
++there are options to turn it on.
++
++You can pass options to vesafb using "video=vesafb:option" on the kernel
++command line. Multiple options should be separated by a comma, like this:
++"video=vesafb:ypan,1024x768-32@85"
++
++Note that vesafb-tng still uses the "video=vesafb:option" format of the
++kernel command line video parameter. "video=vesafb-tng:xxx" is incorrect.
++
++Accepted options (both vesafb and vesafb-tng):
++
++ypan Enable display panning using the VESA protected mode interface
++ The visible screen is just a window of the video memory,
++ console scrolling is done by changing the start of the window.
++ pro: * scrolling (fullscreen) is fast, because there is
++ no need to copy around data.
++ * you'll get scrollback (the Shift-PgUp thing),
++ the video memory can be used as scrollback buffer
++ con: * scrolling only parts of the screen causes some
++ ugly flicker effects (boot logo flickers for
++ example).
++
++ywrap Same as ypan, but assumes your gfx board can wrap-around the video
++ memory (i.e. starts reading from top if it reaches the end of
++ video memory). Faster than ypan.
++
++redraw Scroll by redrawing the affected part of the screen, this is the
++ safe (and slow) default.
++
++vgapal Use the standard VGA registers for palette changes.
++
++pmipal Use the protected mode interface for palette changes.
++ This is the default is the protected mode interface is available.
++
++mtrr:n Setup memory type range registers for the vesafb framebuffer
++ where n:
++ 0 - disabled (equivalent to nomtrr) (default)
++ 1 - uncachable
++ 2 - write-back
++ 3 - write-combining
++ 4 - write-through
++
++ If you see the following in dmesg, choose the type that matches
++ the old one. In this example, use "mtrr:2".
+ ...
+ mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
+ ...
+
+-nomtrr disable mtrr
++nomtrr Do not use memory type range registers for vesafb.
+
+ vremap:n
+ remap 'n' MiB of video RAM. If 0 or not specified, remap memory
+- according to video mode. (2.5.66 patch/idea by Antonino Daplas
+- reversed to give override possibility (allocate more fb memory
+- than the kernel would) to 2.4 by tmb@iki.fi)
++ according to video mode. (2.5.66 patch/idea by Antonino Daplas
++ reversed to give override possibility (allocate more fb memory
++ than the kernel would) to 2.4 by tmb@iki.fi)
+
+ vtotal:n
+ if the video BIOS of your card incorrectly determines the total
+ amount of video RAM, use this option to override the BIOS (in MiB).
+
+-Have fun!
++Options accepted only by vesafb-tng:
++
++<mode> The mode you want to set, in the standard modedb format. Refer to
++ modedb.txt for a detailed description. If you specify a mode that is
++ not supported by your board's BIOS, vesafb-tng will attempt to set a
++ similar mode. The list of supported modes can be found in
++ /proc/fbx/modes, where x is the framebuffer number (usually 0).
++ When vesafb-tng is compiled as a module, the mode string should be
++ provided as a value of the parameter 'mode'.
++
++vbemode:x
++ Force the use of VBE mode x. The mode will only be set if it's
++ found in the VBE-provided list of supported modes.
++ NOTE: The mode number 'x' should be specified in VESA mode number
++ notation, not the Linux kernel one (eg. 257 instead of 769).
++ HINT: If you use this option because normal <mode> parameter does
++ not work for you and you use a X server, you'll probably want to
++ set the 'nocrtc' option to ensure that the video mode is properly
++ restored after console <-> X switches.
++
++nocrtc Do not use CRTC timings while setting the video mode. This option
++ makes sence only with VBE 3.0 compliant systems. Use it if you have
++ problems with modes set in the standard way. Note that using this
++ option means that any refresh rate adjustments will be ignored
++ and the refresh rate will stay at your BIOS default (60 Hz).
++
++noedid Do not try to fetch and use EDID-provided modes.
++
++noblank Disable hardware blanking.
++
++gtf Force the use of VESA's GTF (Generalized Timing Formula). Specifying
++ this will cause vesafb to skip its internal modedb and EDID-modedb
++ and jump straight to the GTF part of the code (normally used only if
++ everything else failed). This can be useful if you want to get as
++ much as possible from your graphics board but your BIOS doesn't
++ support modes with the refresh rates you require. Note that you may
++ need to specify the maxhf, maxvf and maxclk parameters if they are not
++ provided by the EDID block.
++
++Additionally, the following parameters may be provided. They all override the
++EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
++the correct values for maxhf, maxvf and maxclk for your hardware.
++
++maxhf:n Maximum horizontal frequency (in kHz).
++maxvf:n Maximum vertical frequency (in Hz).
++maxclk:n Maximum pixel clock (in MHz).
+
+- Gerd
++Have fun!
+
+ --
++Original document for the vesafb driver by
+ Gerd Knorr <kraxel@goldbach.in-berlin.de>
+
+-Minor (mostly typo) changes
+-by Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
++Minor (mostly typo) changes by
++Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
++
++Extended documentation for vm86, VBE 3.0 and vesafb-tng by
++Michal Januszewski <spock@gentoo.org>
++
+diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
+index 2c5b5cc..2c2d4b5 100644
+--- a/arch/i386/boot/video.S
++++ b/arch/i386/boot/video.S
+@@ -163,10 +163,12 @@ basret: ret
+ # parameters in the default 80x25 mode -- these are set directly,
+ # because some very obscure BIOSes supply insane values.
+ mode_params:
++#ifdef CONFIG_FB_VESA_STD
+ #ifdef CONFIG_VIDEO_SELECT
+ cmpb $0, graphic_mode
+ jnz mopar_gr
+ #endif
++#endif
+ movb $0x03, %ah # Read cursor position
+ xorb %bh, %bh
+ int $0x10
+@@ -199,6 +201,7 @@ mopar2: movb %al, %fs:(PARAM_VIDEO_LINES)
+ ret
+
+ #ifdef CONFIG_VIDEO_SELECT
++#ifdef CONFIG_FB_VESA_STD
+ # Fetching of VESA frame buffer parameters
+ mopar_gr:
+ leaw modelist+1024, %di
+@@ -281,6 +284,7 @@ dac_done:
+ movw %es, %fs:(PARAM_VESAPM_SEG)
+ movw %di, %fs:(PARAM_VESAPM_OFF)
+ no_pm: ret
++#endif
+
+ # The video mode menu
+ mode_menu:
+@@ -495,10 +499,12 @@ mode_set:
+
+ cmpb $VIDEO_FIRST_V7>>8, %ah
+ jz setv7
+-
++
++#ifdef CONFIG_FB_VESA_STD
+ cmpb $VIDEO_FIRST_VESA>>8, %ah
+ jnc check_vesa
+-
++#endif
++
+ orb %ah, %ah
+ jz setmenu
+
+@@ -570,6 +576,7 @@ setr1: lodsw
+ movw -4(%si), %ax # Fetch mode ID
+ jmp _m_s
+
++#ifdef CONFIG_FB_VESA_STD
+ check_vesa:
+ leaw modelist+1024, %di
+ subb $VIDEO_FIRST_VESA>>8, %bh
+@@ -603,6 +610,7 @@ check_vesa:
+ ret
+
+ _setbad: jmp setbad # Ugly...
++#endif
+
+ # Recalculate vertical display end registers -- this fixes various
+ # inconsistencies of extended modes on many adapters. Called when
+diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
+index 1393523..8a05f95 100644
+--- a/drivers/char/sysrq.c
++++ b/drivers/char/sysrq.c
+@@ -240,7 +240,7 @@ static void send_sig_all(int sig)
+ struct task_struct *p;
+
+ for_each_process(p) {
+- if (p->mm && !is_init(p))
++ if (p->mm && !is_init(p) && !(p->flags & PF_BORROWED_MM))
+ /* Not swapper, init nor kernel thread */
+ force_sig(sig, p);
+ }
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 4e83f01..ae122fd 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -547,8 +547,22 @@ config FB_TGA
+ cards. Say Y if you have one of those.
+
+ config FB_VESA
+- bool "VESA VGA graphics support"
+- depends on (FB = y) && X86
++ tristate "VESA VGA graphics support"
++ depends on (FB = y) && (X86 || X86_64)
++ help
++ This is the frame buffer device driver for generic VESA 2.0
++ compliant graphic cards. The older VESA 1.2 cards are not supported.
++ You will get a boot time penguin logo at no additional cost. Please
++ read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
++
++choice
++ prompt "VESA driver type"
++ depends on FB_VESA
++ default FB_VESA_STD if X86_64
++ default FB_VESA_TNG if X86
++
++config FB_VESA_STD
++ bool "vesafb"
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+@@ -557,7 +571,43 @@ config FB_VESA
+ This is the frame buffer device driver for generic VESA 2.0
+ compliant graphic cards. The older VESA 1.2 cards are not supported.
+ You will get a boot time penguin logo at no additional cost. Please
+- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
++ read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
++ are experiencing problems with vesafb-tng or if you own a 64-bit system.
++
++ Note that this driver cannot be compiled as a module.
++
++config FB_VESA_TNG
++ bool "vesafb-tng"
++ depends on !X86_64
++ select FB_MODE_HELPERS
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ This is an enhanced generic frame buffer device driver for
++ VBE 2.0 compliant graphic cards. It can take advantage of VBE 3.0
++ features (refresh rate adjustment) when these are available.
++ The driver also makes it possible to change the video mode
++ on the fly and to switch back to text mode when it's unloaded.
++
++ If the driver is compiled as a module, the module will be called
++ vesafb-tng.
++
++endchoice
++
++config FB_VESA_DEFAULT_MODE
++ string "VESA default mode"
++ depends on FB_VESA_TNG
++ default "640x480@60"
++ help
++ This option is used to determine the default mode vesafb is
++ supposed to switch to in case no mode is provided as a kernel
++ command line parameter.
++
++config VIDEO_SELECT
++ bool
++ depends on FB_VESA
++ default y
+
+ config FB_IMAC
+ bool "Intel-based Macintosh Framebuffer Support"
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index 309a26d..e57b0e7 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -102,7 +102,11 @@ obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/
+ obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
+
+ # Platform or fallback drivers go here
+-obj-$(CONFIG_FB_VESA) += vesafb.o
++ifeq ($(CONFIG_FB_VESA_STD),y)
++ obj-y += vesafb.o
++else
++ obj-$(CONFIG_FB_VESA) += vesafb-thread.o vesafb-tng.o
++endif
+ obj-$(CONFIG_FB_IMAC) += imacfb.o
+ obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
+ obj-$(CONFIG_FB_OF) += offb.o
+diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
+index 3cfea31..bfb39cc 100644
+--- a/drivers/video/fbmem.c
++++ b/drivers/video/fbmem.c
+@@ -1408,6 +1408,7 @@ fbmem_init(void)
+ printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
+ fb_class = NULL;
+ }
++
+ return 0;
+ }
+
+diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
+index 5df41f6..f838a53 100644
+--- a/drivers/video/modedb.c
++++ b/drivers/video/modedb.c
+@@ -674,6 +674,7 @@ void fb_var_to_videomode(struct fb_videomode *mode,
+ {
+ u32 pixclock, hfreq, htotal, vtotal;
+
++ mode->refresh = 0;
+ mode->name = NULL;
+ mode->xres = var->xres;
+ mode->yres = var->yres;
+@@ -1025,3 +1026,4 @@ EXPORT_SYMBOL(fb_find_best_mode);
+ EXPORT_SYMBOL(fb_find_nearest_mode);
+ EXPORT_SYMBOL(fb_videomode_to_modelist);
+ EXPORT_SYMBOL(fb_find_mode);
++EXPORT_SYMBOL(fb_destroy_modelist);
+diff --git a/drivers/video/vesafb-thread.c b/drivers/video/vesafb-thread.c
+new file mode 100644
+index 0000000..543e202
+--- /dev/null
++++ b/drivers/video/vesafb-thread.c
+@@ -0,0 +1,751 @@
++/*
++ * Framebuffer driver for VBE 2.0+ compliant graphic boards.
++ * Kernel thread and vm86 routines.
++ *
++ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
++ *
++ */
++
++#include <linux/workqueue.h>
++#include <linux/completion.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/mm.h>
++#include <linux/delay.h>
++#include <linux/signal.h>
++#include <linux/freezer.h>
++#include <linux/suspend.h>
++#include <linux/unistd.h>
++#include <video/vesa.h>
++#include <video/edid.h>
++#include <asm/mman.h>
++#include <asm/page.h>
++#include <asm/vm86.h>
++#include <asm/thread_info.h>
++#include <asm/uaccess.h>
++#include <asm/mmu_context.h>
++#include "edid.h"
++
++static int errno;
++
++static DECLARE_COMPLETION(vesafb_th_completion);
++static DECLARE_MUTEX(vesafb_task_list_sem);
++static LIST_HEAD(vesafb_task_list);
++static DECLARE_WAIT_QUEUE_HEAD(vesafb_wait);
++
++static struct vm86_struct vm86;
++static int vesafb_pid = 0;
++
++#define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
++#define VM86_PUSHW(x) \
++do { \
++ vm86.regs.esp -= 2; \
++ *(u16*)(STACK_ADDR + vm86.regs.esp) = x; \
++} while(0);
++
++/* Stack, the return code and buffers will be put into
++ * one contiguous memory chunk:
++ *
++ * [ STACK | RET_CODE | BUFFER ]
++ *
++ * Some video BIOSes (sis6326) try to store data somewhere
++ * in 0x7000-0x7fff, so we zeromap more memory to be safe.
++ */
++#define IVTBDA_SIZE PAGE_SIZE
++#define RET_CODE_SIZE 0x0010
++#define STACK_SIZE 0x0500
++#define BUFFER_SIZE 0x10000
++
++/* The amount of memory that will be allocated should be a multiple
++ * of PAGE_SIZE. */
++#define __MEM_SIZE (RET_CODE_SIZE + STACK_SIZE + BUFFER_SIZE)
++#define REAL_MEM_SIZE (((__MEM_SIZE / PAGE_SIZE) + 1) * PAGE_SIZE)
++
++#define IVTBDA_ADDR 0x00000
++#define STACK_ADDR (IVTBDA_ADDR + IVTBDA_SIZE)
++#define RET_CODE_ADDR (STACK_ADDR + STACK_SIZE)
++#define BUF_ADDR (RET_CODE_ADDR + RET_CODE_SIZE)
++
++#define FLAG_D (1 << 10)
++
++/* Syscalls used by the vesafb thread */
++static int vm86old(struct vm86_struct __user* v86)
++{
++ long res;
++ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
++ : "=a" (res)
++ : "0" (__NR_vm86old), "ri" ((long)(v86)) : "memory");
++
++ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
++ errno = -res;
++ res = -1;
++ }
++ return (int)res;
++}
++
++static int ioperm(unsigned long a, unsigned long b, unsigned long c)
++{
++ long res;
++ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
++ : "=a" (res)
++ : "0" (__NR_ioperm), "ri" ((long)(a)), "c" ((long)(b)),
++ "d" ((long)(c)) : "memory");
++
++ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
++ errno = -res;
++ res = -1;
++ }
++ return (int)res;
++}
++
++/* Segment prefix opcodes */
++enum {
++ P_CS = 0x2e,
++ P_SS = 0x36,
++ P_DS = 0x3e,
++ P_ES = 0x26,
++ P_FS = 0x64,
++ P_GS = 0x65
++};
++
++/* Emulated vm86 ins instruction */
++static void vm86_ins(int size)
++{
++ u32 edx, edi;
++ edx = vm86.regs.edx & 0xffff;
++ edi = (vm86.regs.edi & 0xffff) + (u32)(vm86.regs.es << 4);
++
++ if (vm86.regs.eflags & FLAG_D)
++ asm volatile ("std\n");
++ else
++ asm volatile ("cld\n");
++
++ switch (size) {
++ case 4:
++ asm volatile ("insl\n" : "=D" (edi) : "d" (edx), "0" (edi));
++ break;
++ case 2:
++ asm volatile ("insw\n" : "=D" (edi) : "d" (edx), "0" (edi));
++ break;
++ case 1:
++ asm volatile ("insb\n" : "=D" (edi) : "d" (edx), "0" (edi));
++ break;
++ }
++
++ if (vm86.regs.eflags & FLAG_D)
++ asm volatile ("cld\n");
++
++ edi -= (u32)(vm86.regs.es << 4);
++
++ vm86.regs.edi &= 0xffff0000;
++ vm86.regs.edi |= edi & 0xffff;
++}
++
++static void vm86_rep_ins(int size)
++{
++ u16 cx = vm86.regs.ecx;
++ while (cx--)
++ vm86_ins(size);
++
++ vm86.regs.ecx &= 0xffff0000;
++}
++
++/* Emulated vm86 outs instruction */
++static void vm86_outs(int size, int segment)
++{
++ u32 edx, esi, base;
++
++ edx = vm86.regs.edx & 0xffff;
++ esi = vm86.regs.esi & 0xffff;
++
++ switch (segment) {
++ case P_CS: base = vm86.regs.cs; break;
++ case P_SS: base = vm86.regs.ss; break;
++ case P_ES: base = vm86.regs.es; break;
++ case P_FS: base = vm86.regs.fs; break;
++ case P_GS: base = vm86.regs.gs; break;
++ default: base = vm86.regs.ds; break;
++ }
++
++ esi += base << 4;
++
++ if (vm86.regs.eflags & FLAG_D)
++ asm volatile ("std\n");
++ else
++ asm volatile ("cld\n");
++
++ switch (size) {
++ case 4:
++ asm volatile ("outsl\n" : "=S" (esi) : "d" (edx), "0" (esi));
++ break;
++ case 2:
++ asm volatile ("outsw\n" : "=S" (esi) : "d" (edx), "0" (esi));
++ break;
++ case 1:
++ asm volatile ("outsb\n" : "=S" (esi) : "d" (edx), "0" (esi));
++ break;
++ }
++
++ if (vm86.regs.eflags & FLAG_D)
++ asm volatile ("cld");
++
++ esi -= base << 4;
++ vm86.regs.esi &= 0xffff0000;
++ vm86.regs.esi |= (esi & 0xffff);
++}
++
++static void vm86_rep_outs(int size, int segment)
++{
++ u16 cx = vm86.regs.ecx;
++ while (cx--)
++ vm86_outs(size, segment);
++
++ vm86.regs.ecx &= 0xffff0000;
++}
++
++static int vm86_do_unknown(void)
++{
++ u8 data32 = 0, segment = P_DS, rep = 0;
++ u8 *instr;
++ int ret = 0, i = 0;
++
++ instr = (u8*)((vm86.regs.cs << 4) + vm86.regs.eip);
++
++ while (1) {
++ switch(instr[i]) {
++ case 0x66: /* operand size prefix */
++ data32 = 1 - data32;
++ i++;
++ break;
++ case 0xf2: /* repnz */
++ case 0xf3: /* rep */
++ rep = 1;
++ i++;
++ break;
++ case P_CS: /* segment prefix */
++ case P_SS:
++ case P_DS:
++ case P_ES:
++ case P_FS:
++ case P_GS:
++ segment = instr[i];
++ i++;
++ break;
++ case 0xf0: /* LOCK - ignored */
++ case 0x67: /* address size prefix - ignored */
++ i++;
++ break;
++ case 0x6c: /* insb */
++ if (rep)
++ vm86_rep_ins(1);
++ else
++ vm86_ins(1);
++ i++;
++ goto out;
++ case 0x6d: /* insw / insd */
++ if (rep) {
++ if (data32)
++ vm86_rep_ins(4);
++ else
++ vm86_rep_ins(2);
++ } else {
++ if (data32)
++ vm86_ins(4);
++ else
++ vm86_ins(2);
++ }
++ i++;
++ goto out;
++ case 0x6e: /* outsb */
++ if (rep)
++ vm86_rep_outs(1, segment);
++ else
++ vm86_outs(1, segment);
++ i++;
++ goto out;
++ case 0x6f: /* outsw / outsd */
++ if (rep) {
++ if (data32)
++ vm86_rep_outs(4, segment);
++ else
++ vm86_rep_outs(2, segment);
++ } else {
++ if (data32)
++ vm86_outs(4, segment);
++ else
++ vm86_outs(2, segment);
++ }
++ i++;
++ goto out;
++ case 0xe4: /* inb xx */
++ asm volatile (
++ "inb %w1, %b0"
++ : "=a" (vm86.regs.eax)
++ : "d" (instr[i+1]), "0" (vm86.regs.eax));
++ i += 2;
++ goto out;
++ case 0xe5: /* inw xx / ind xx */
++ if (data32) {
++ asm volatile (
++ "inl %w1, %0"
++ : "=a" (vm86.regs.eax)
++ : "d" (instr[i+1]),
++ "0" (vm86.regs.eax));
++ } else {
++ asm volatile (
++ "inw %w1, %w0"
++ : "=a" (vm86.regs.eax)
++ : "d" (instr[i+1]),
++ "0" (vm86.regs.eax));
++ }
++ i += 2;
++ goto out;
++
++ case 0xec: /* inb dx */
++ asm volatile (
++ "inb %w1, %b0"
++ : "=a" (vm86.regs.eax)
++ : "d" (vm86.regs.edx), "0" (vm86.regs.eax));
++ i++;
++ goto out;
++ case 0xed: /* inw dx / ind dx */
++ if (data32) {
++ asm volatile (
++ "inl %w1, %0"
++ : "=a" (vm86.regs.eax)
++ : "d" (vm86.regs.edx));
++ } else {
++ asm volatile (
++ "inw %w1, %w0"
++ : "=a" (vm86.regs.eax)
++ : "d" (vm86.regs.edx));
++ }
++ i++;
++ goto out;
++ case 0xe6: /* outb xx */
++ asm volatile (
++ "outb %b0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax), "d" (instr[i+1]));
++ i += 2;
++ goto out;
++ case 0xe7: /* outw xx / outd xx */
++ if (data32) {
++ asm volatile (
++ "outl %0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax),
++ "d" (instr[i+1]));
++ } else {
++ asm volatile (
++ "outw %w0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax),
++ "d" (instr[i+1]));
++ }
++ i += 2;
++ goto out;
++ case 0xee: /* outb dx */
++ asm volatile (
++ "outb %b0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax), "d" (vm86.regs.edx));
++ i++;
++ goto out;
++ case 0xef: /* outw dx / outd dx */
++ if (data32) {
++ asm volatile (
++ "outl %0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax),
++ "d" (vm86.regs.edx));
++ } else {
++ asm volatile (
++ "outw %w0, %w1"
++ : /* no return value */
++ : "a" (vm86.regs.eax),
++ "d" (vm86.regs.edx));
++ }
++ i++;
++ goto out;
++ default:
++ printk(KERN_ERR "vesafb: BUG, opcode 0x%x emulation "
++ "not supported (EIP: 0x%lx)\n",
++ instr[i], (u32)(vm86.regs.cs << 4) +
++ vm86.regs.eip);
++ ret = 1;
++ goto out;
++ }
++ }
++out: vm86.regs.eip += i;
++ return ret;
++}
++
++void vesafb_do_vm86(struct vm86_regs *regs)
++{
++ unsigned int ret;
++ u8 *retcode = (void*)RET_CODE_ADDR;
++
++ memset(&vm86,0,sizeof(vm86));
++ memcpy(&vm86.regs, regs, sizeof(struct vm86_regs));
++
++ /* The return code */
++ retcode[0] = 0xcd; /* int opcode */
++ retcode[1] = 0xff; /* int number (255) */
++
++ /* We use int 0xff to get back to protected mode */
++ memset(&vm86.int_revectored, 0, sizeof(vm86.int_revectored));
++ ((unsigned char *)&vm86.int_revectored)[0xff / 8] |= (1 << (0xff % 8));
++
++ /*
++ * We want to call int 0x10, so we set:
++ * CS = 0x42 = 0x10 * 4 + 2
++ * IP = 0x40 = 0x10 * 4
++ * and SS:ESP. It's up to the caller to set the rest of the registers.
++ */
++ vm86.regs.eflags = DEFAULT_VM86_FLAGS;
++ vm86.regs.cs = *(unsigned short *)0x42;
++ vm86.regs.eip = *(unsigned short *)0x40;
++ vm86.regs.ss = (STACK_ADDR >> 4);
++ vm86.regs.esp = ((STACK_ADDR & 0x0000f) + STACK_SIZE);
++
++ /* These will be fetched off the stack when we come to an iret in the
++ * int's 0x10 code. */
++ VM86_PUSHW(DEFAULT_VM86_FLAGS);
++ VM86_PUSHW((RET_CODE_ADDR >> 4)); /* return code segment */
++ VM86_PUSHW((RET_CODE_ADDR & 0x0000f)); /* return code offset */
++
++ while(1) {
++ ret = vm86old(&vm86);
++
++ if (VM86_TYPE(ret) == VM86_INTx) {
++ int vint = VM86_ARG(ret);
++
++ /* If exit from vm86 was caused by int 0xff, then
++ * we're done.. */
++ if (vint == 0xff)
++ goto out;
++
++ /* .. otherwise, we have to call the int handler
++ * manually */
++ VM86_PUSHW(vm86.regs.eflags);
++ VM86_PUSHW(vm86.regs.cs);
++ VM86_PUSHW(vm86.regs.eip);
++
++ vm86.regs.cs = *(u16 *)((vint << 2) + 2);
++ vm86.regs.eip = *(u16 *)(vint << 2);
++ vm86.regs.eflags &= ~(VIF_MASK | TF_MASK);
++ } else if (VM86_TYPE(ret) == VM86_UNKNOWN) {
++ if (vm86_do_unknown())
++ goto out;
++ } else {
++ printk(KERN_ERR "vesafb: BUG, returned from "
++ "vm86 with %x (EIP: 0x%lx)\n",
++ ret, (u32)(vm86.regs.cs << 4) +
++ vm86.regs.eip);
++ goto out;
++ }
++ }
++
++out: /* copy the registers' state back to the caller's struct */
++ memcpy(regs, &vm86.regs, sizeof(struct vm86_regs));
++}
++
++static int vesafb_remap_pfn_range(unsigned long start, unsigned long end,
++ unsigned long pgoff, unsigned long prot,
++ int type)
++{
++ struct vm_area_struct *vma;
++ struct mm_struct *mm = current->mm;
++ int ret = 0;
++
++ vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
++ if (!vma)
++ return -ENOMEM;
++ memset(vma, 0, sizeof(*vma));
++ down_write(&mm->mmap_sem);
++ vma->vm_mm = mm;
++ vma->vm_start = start;
++ vma->vm_end = end;
++ vma->vm_flags = VM_READ | VM_WRITE | VM_EXEC;
++ vma->vm_flags |= mm->def_flags;
++ vma->vm_page_prot.pgprot = prot;
++ vma->vm_pgoff = pgoff;
++
++ if ((ret = insert_vm_struct(mm, vma))) {
++ up_write(&mm->mmap_sem);
++ kmem_cache_free(vm_area_cachep, vma);
++ return ret;
++ }
++
++ if (type) {
++ ret = zeromap_page_range(vma,
++ vma->vm_start,
++ vma->vm_end - vma->vm_start,
++ vma->vm_page_prot);
++ } else {
++ vma->vm_flags |= VM_SHARED;
++ ret = remap_pfn_range(vma,
++ vma->vm_start,
++ vma->vm_pgoff,
++ vma->vm_end - vma->vm_start,
++ vma->vm_page_prot);
++ }
++ up_write(&mm->mmap_sem);
++ return ret;
++}
++
++static inline int vesafb_init_mem(void)
++{
++ int ret = 0;
++
++ /* The memory chunks we're remapping here should be multiples
++ * of PAGE_SIZE. */
++ ret += vesafb_remap_pfn_range(0x00000, IVTBDA_SIZE, 0,
++ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
++ ret += vesafb_remap_pfn_range(IVTBDA_SIZE, REAL_MEM_SIZE, 0,
++ PROT_READ | PROT_EXEC | PROT_WRITE, 1);
++ ret += vesafb_remap_pfn_range(0x9f000, 0x100000,
++ 0x9f000 >> PAGE_SHIFT,
++ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
++ if (ret)
++ printk(KERN_ERR "vesafb thread: memory remapping failed\n");
++
++ return ret;
++}
++
++#define vesafb_get_string(str) \
++{ \
++ /* The address is in the form ssssoooo, where oooo = offset, \
++ * ssss = segment */ \
++ addr = ((p_vbe(tsk->buf)->str & 0xffff0000) >> 12) + \
++ (p_vbe(tsk->buf)->str & 0x0000ffff); \
++ \
++ /* The data is in ROM which is shared between processes, so we \
++ * just translate the real mode address into one visible from \
++ * kernel space */ \
++ if (addr >= 0xa0000) { \
++ p_vbe(tsk->buf)->str = (u32) __va(addr); \
++ \
++ /* The data is in the buffer, we just have to convert the \
++ * address so that it points into the buffer user provided. */ \
++ } else if (addr > BUF_ADDR && addr < BUF_ADDR + \
++ sizeof(struct vesafb_vbe_ib)) { \
++ addr -= BUF_ADDR; \
++ p_vbe(tsk->buf)->str = (u32) (tsk->buf + addr); \
++ \
++ /* This should never happen: someone was insane enough to put \
++ * the data somewhere in RAM.. */ \
++ } else { \
++ p_vbe(tsk->buf)->str = (u32) ""; \
++ } \
++}
++
++void vesafb_handle_getvbeib(struct vesafb_task *tsk)
++{
++ int addr, res;
++
++ tsk->regs.es = (BUF_ADDR >> 4);
++ tsk->regs.edi = (BUF_ADDR & 0x000f);
++ strncpy(p_vbe(BUF_ADDR)->vbe_signature, "VBE2", 4);
++
++ vesafb_do_vm86(&tsk->regs);
++ memcpy(tsk->buf, (void*)(BUF_ADDR), sizeof(struct vesafb_vbe_ib));
++
++ /* The OEM fields were not defined prior to VBE 2.0 */
++ if (p_vbe(tsk->buf)->vbe_version >= 0x200) {
++ vesafb_get_string(oem_string_ptr);
++ vesafb_get_string(oem_vendor_name_ptr);
++ vesafb_get_string(oem_product_name_ptr);
++ vesafb_get_string(oem_product_rev_ptr);
++ }
++
++ /* This is basically the same as vesafb_get_string() */
++ addr = ((p_vbe(tsk->buf)->mode_list_ptr & 0xffff0000) >> 12) +
++ (p_vbe(tsk->buf)->mode_list_ptr & 0x0000ffff);
++
++ if (addr >= 0xa0000) {
++ p_vbe(tsk->buf)->mode_list_ptr = (u32) __va(addr);
++ } else if (addr > BUF_ADDR && addr < BUF_ADDR +
++ sizeof(struct vesafb_vbe_ib)) {
++ addr -= BUF_ADDR;
++ p_vbe(tsk->buf)->mode_list_ptr = (u32) (tsk->buf + addr);
++ } else {
++ res = 0;
++ printk(KERN_WARNING "vesafb: warning, copying modelist "
++ "from somewhere in RAM!\n");
++ while (*(u16*)(addr+res) != 0xffff &&
++ res < (sizeof(p_vbe(tsk->buf)->reserved) - 2)) {
++ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) =
++ *(u16*)(addr+res);
++ res += 2;
++ }
++ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) = 0xffff;
++ }
++}
++
++int vesafb_handle_tasks(void)
++{
++ struct vesafb_task *tsk;
++ struct list_head *curr, *next;
++ int ret = 0;
++
++ down(&vesafb_task_list_sem);
++ list_for_each_safe(curr, next, &vesafb_task_list) {
++ tsk = list_entry(curr, struct vesafb_task, node);
++
++ if (tsk->flags & TF_EXIT) {
++ ret = 1;
++ goto task_done;
++ }
++ if (tsk->flags & TF_GETVBEIB) {
++ vesafb_handle_getvbeib(tsk);
++ goto task_done;
++ }
++ /* Do we need to store a pointer to the buffer in ES:EDI? */
++ if (tsk->flags & TF_BUF_DI) {
++ tsk->regs.es = (BUF_ADDR >> 4);
++ tsk->regs.edi = (BUF_ADDR & 0x000f);
++ }
++ /* Sometimes the pointer has to be in ES:EBX. */
++ if (tsk->flags & TF_BUF_BX) {
++ tsk->regs.es = (BUF_ADDR >> 4);
++ tsk->regs.ebx = (BUF_ADDR & 0x000f);
++ }
++ if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
++ memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
++
++ vesafb_do_vm86(&tsk->regs);
++
++ if (tsk->flags & TF_RETURN_BUF)
++ memcpy(tsk->buf, (void*)BUF_ADDR, tsk->buf_len);
++
++task_done: list_del(curr);
++ complete(&tsk->done);
++ }
++
++ /* If we're going to kill this thread, don't allow any elements
++ * to be added to the task list. */
++ if (!ret)
++ up(&vesafb_task_list_sem);
++
++ return ret;
++}
++
++/*
++ * This 'hybrid' thread serves as a backend for vesafb-tng, handling all vm86
++ * calls. It is started as a kernel thread. It then creates its own mm struct,
++ * thus separating itself from any userspace processes. At this moment, it
++ * stops being a kernel thread (kernel threads have mm = NULL) and becomes
++ * a 'hybrid' thread -- one that has full access to kernel space, yet runs
++ * with its own address space.
++ *
++ * This is necessary because in order to make vm86 calls some parts of the
++ * first 1MB of RAM have to be setup to mimic the real mode. These are:
++ * - interrupt vector table [0x00000-0x003ff]
++ * - BIOS data area [0x00400-0x004ff]
++ * - Extended BIOS data area [0x9fc00-0x9ffff]
++ * - the video RAM [0xa0000-0xbffff]
++ * - video BIOS [0xc0000-0xcffff]
++ * - motherboard BIOS [0xf0000-0xfffff]
++ */
++int vesafb_thread(void *unused)
++{
++ int err = 0;
++
++ set_fs(KERNEL_DS);
++ daemonize("vesafb");
++
++ if (set_new_mm()) {
++ err = -ENOMEM;
++ goto thr_end;
++ }
++ if (vesafb_init_mem()) {
++ err = -ENOMEM;
++ goto thr_end;
++ }
++
++ DPRINTK("started vesafb thread\n");
++
++ /* Having an IO bitmap makes things faster as we avoid GPFs
++ * when running vm86 code. We can live if it fails, though,
++ * so don't bother checking for errors. */
++ ioperm(0,1024,1);
++ set_user_nice(current, -10);
++
++ complete(&vesafb_th_completion);
++
++ while (1) {
++ if (vesafb_handle_tasks())
++ break;
++ wait_event_interruptible(vesafb_wait,
++ !list_empty(&vesafb_task_list));
++ try_to_freeze();
++ }
++
++out: DPRINTK("exiting the vesafb thread\n");
++ vesafb_pid = -1;
++
++ /* Now that all callers know this thread is no longer running
++ * (pid < 0), allow them to continue. */
++ up(&vesafb_task_list_sem);
++ return err;
++thr_end:
++ down(&vesafb_task_list_sem);
++ complete(&vesafb_th_completion);
++ goto out;
++}
++
++int vesafb_queue_task(struct vesafb_task *tsk)
++{
++ down(&vesafb_task_list_sem);
++ if (vesafb_pid < 0)
++ return -1;
++ list_add_tail(&tsk->node, &vesafb_task_list);
++ up(&vesafb_task_list_sem);
++ wake_up(&vesafb_wait);
++ return 0;
++}
++
++int vesafb_wait_for_thread(void)
++{
++ /* PID 0 means that the thread is still initializing. */
++ if (vesafb_pid < 0)
++ return -1;
++ wait_for_completion(&vesafb_th_completion);
++ return 0;
++}
++
++int __init vesafb_init_thread(void)
++{
++ vesafb_pid = kernel_thread(vesafb_thread,NULL,0);
++ return 0;
++}
++
++#ifdef MODULE
++void __exit vesafb_kill_thread(void)
++{
++ struct vesafb_task *tsk;
++ if (vesafb_pid <= 0)
++ return;
++
++ vesafb_create_task(tsk);
++ if (!tsk)
++ return;
++ tsk->flags |= TF_EXIT;
++ vesafb_queue_task(tsk);
++ vesafb_wait_for_task(tsk);
++ kfree(tsk);
++ return;
++}
++module_exit(vesafb_kill_thread);
++#endif
++module_init(vesafb_init_thread);
++
++EXPORT_SYMBOL_GPL(vesafb_queue_task);
++EXPORT_SYMBOL_GPL(vesafb_wait_for_thread);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Michal Januszewski");
++
+diff --git a/drivers/video/vesafb-tng.c b/drivers/video/vesafb-tng.c
+new file mode 100644
+index 0000000..b4d4394
+--- /dev/null
++++ b/drivers/video/vesafb-tng.c
+@@ -0,0 +1,1586 @@
++/*
++ * Framebuffer driver for VBE 2.0+ compliant graphic boards
++ *
++ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
++ * Based upon vesafb code by Gerd Knorr <kraxel@goldbach.in-berlin.de>
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/mm.h>
++#include <linux/tty.h>
++#include <linux/delay.h>
++#include <linux/fb.h>
++#include <linux/ioport.h>
++#include <linux/init.h>
++#include <linux/proc_fs.h>
++#include <linux/completion.h>
++#include <linux/platform_device.h>
++#include <video/edid.h>
++#include <video/vesa.h>
++#include <video/vga.h>
++#include <asm/io.h>
++#include <asm/mtrr.h>
++#include <asm/page.h>
++#include <asm/pgtable.h>
++#include "edid.h"
++
++#define dac_reg (0x3c8)
++#define dac_val (0x3c9)
++
++#define VESAFB_NEED_EXACT_RES 1
++#define VESAFB_NEED_EXACT_DEPTH 2
++
++/* --------------------------------------------------------------------- */
++
++static struct fb_var_screeninfo vesafb_defined __initdata = {
++ .activate = FB_ACTIVATE_NOW,
++ .height = 0,
++ .width = 0,
++ .right_margin = 32,
++ .upper_margin = 16,
++ .lower_margin = 4,
++ .vsync_len = 4,
++ .vmode = FB_VMODE_NONINTERLACED,
++};
++
++static struct fb_fix_screeninfo vesafb_fix __initdata = {
++ .id = "VESA VGA",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .accel = FB_ACCEL_NONE,
++};
++
++static int mtrr = 0; /* disable mtrr by default */
++static int blank = 1; /* enable blanking by default */
++static int ypan = 0; /* 0 - nothing, 1 - ypan, 2 - ywrap */
++static int pmi_setpal = 1; /* pmi for palette changes */
++static u16 *pmi_base = NULL; /* protected mode interface location */
++static void (*pmi_start)(void) = NULL;
++static void (*pmi_pal)(void) = NULL;
++static struct vesafb_vbe_ib vbe_ib;
++static struct vesafb_mode_ib *vbe_modes;
++static int vbe_modes_cnt = 0;
++static struct fb_info *vesafb_info = NULL;
++static int nocrtc = 0; /* ignore CRTC settings */
++static int noedid __initdata = 0; /* don't try DDC transfers */
++static int vram_remap __initdata = 0; /* set amount of memory to be used */
++static int vram_total __initdata = 0; /* set total amount of memory */
++static u16 maxclk __initdata = 0; /* maximum pixel clock */
++static u16 maxvf __initdata = 0; /* maximum vertical frequency */
++static u16 maxhf __initdata = 0; /* maximum horizontal frequency */
++static int gtf __initdata = 0; /* forces use of the GTF */
++static char *mode_option __initdata = NULL;
++static u16 vbemode __initdata = 0;
++
++/* --------------------------------------------------------------------- */
++
++static int vesafb_find_vbe_mode(int xres, int yres, int depth,
++ unsigned char flags)
++{
++ int i, match = -1, h = 0, d = 0x7fffffff;
++
++ for (i = 0; i < vbe_modes_cnt; i++) {
++ h = abs(vbe_modes[i].x_res - xres) +
++ abs(vbe_modes[i].y_res - yres) +
++ abs(depth - vbe_modes[i].depth);
++ if (h == 0)
++ return i;
++ if (h < d || (h == d && vbe_modes[i].depth > depth)) {
++ d = h;
++ match = i;
++ }
++ }
++ i = 1;
++
++ if (flags & VESAFB_NEED_EXACT_DEPTH && vbe_modes[match].depth != depth)
++ i = 0;
++ if (flags & VESAFB_NEED_EXACT_RES && d > 24)
++ i = 0;
++ if (i != 0)
++ return match;
++ else
++ return -1;
++}
++
++static int vesafb_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ int offset;
++
++ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
++
++ /* It turns out it's not the best idea to do panning via vm86,
++ * so we only allow it if we have a PMI. */
++ if (pmi_start) {
++ __asm__ __volatile__(
++ "call *(%%edi)"
++ : /* no return value */
++ : "a" (0x4f07), /* EAX */
++ "b" (0), /* EBX */
++ "c" (offset), /* ECX */
++ "d" (offset >> 16), /* EDX */
++ "D" (&pmi_start)); /* EDI */
++ }
++ return 0;
++}
++
++static int vesafb_blank(int blank, struct fb_info *info)
++{
++ struct vesafb_task *tsk;
++ int err = 1;
++
++ if (vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
++ int loop = 10000;
++ u8 seq = 0, crtc17 = 0;
++
++ if (blank == FB_BLANK_POWERDOWN) {
++ seq = 0x20;
++ crtc17 = 0x00;
++ err = 0;
++ } else {
++ seq = 0x00;
++ crtc17 = 0x80;
++ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
++ }
++
++ vga_wseq(NULL, 0x00, 0x01);
++ seq |= vga_rseq(NULL, 0x01) & ~0x20;
++ vga_wseq(NULL, 0x00, seq);
++
++ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
++ while (loop--);
++ vga_wcrt(NULL, 0x17, crtc17);
++ vga_wseq(NULL, 0x00, 0x03);
++ } else {
++ vesafb_create_task (tsk);
++ if (!tsk)
++ return -ENOMEM;
++ tsk->regs.eax = 0x4f10;
++ switch (blank) {
++ case FB_BLANK_UNBLANK:
++ tsk->regs.ebx = 0x0001;
++ break;
++ case FB_BLANK_NORMAL:
++ tsk->regs.ebx = 0x0101; /* standby */
++ break;
++ case FB_BLANK_POWERDOWN:
++ tsk->regs.ebx = 0x0401; /* powerdown */
++ break;
++ default:
++ goto out;
++ }
++ tsk->flags = TF_CALL;
++ if (!vesafb_queue_task (tsk))
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) == 0x004f)
++ err = 0;
++out: kfree(tsk);
++ }
++ return err;
++}
++
++static int vesafb_setpalette(struct vesafb_pal_entry *entries, int count,
++ int start, struct fb_info *info)
++{
++ struct vesafb_task *tsk;
++ int i = ((struct vesafb_par*)info->par)->mode_idx;
++ int ret = 0;
++
++ /* We support palette modifications for 8 bpp modes only, so
++ * there can never be more than 256 entries. */
++ if (start + count > 256)
++ return -EINVAL;
++
++ /* Use VGA registers if mode is VGA-compatible. */
++ if (i >= 0 && i < vbe_modes_cnt &&
++ vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
++ for (i = 0; i < count; i++) {
++ outb_p(start + i, dac_reg);
++ outb_p(entries[i].red, dac_val);
++ outb_p(entries[i].green, dac_val);
++ outb_p(entries[i].blue, dac_val);
++ }
++ } else if (pmi_setpal) {
++ __asm__ __volatile__(
++ "call *(%%esi)"
++ : /* no return value */
++ : "a" (0x4f09), /* EAX */
++ "b" (0), /* EBX */
++ "c" (count), /* ECX */
++ "d" (start), /* EDX */
++ "D" (entries), /* EDI */
++ "S" (&pmi_pal)); /* ESI */
++ } else {
++ vesafb_create_task (tsk);
++ if (!tsk)
++ return -ENOMEM;
++ tsk->regs.eax = 0x4f09;
++ tsk->regs.ebx = 0x0;
++ tsk->regs.ecx = count;
++ tsk->regs.edx = start;
++ tsk->buf = entries;
++ tsk->buf_len = sizeof(struct vesafb_pal_entry) * count;
++ tsk->flags = TF_CALL | TF_BUF_DI;
++
++ if (!vesafb_queue_task (tsk))
++ vesafb_wait_for_task(tsk);
++ if ((tsk->regs.eax & 0xffff) != 0x004f)
++ ret = 1;
++ kfree(tsk);
++ }
++ return ret;
++}
++
++static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned transp,
++ struct fb_info *info)
++{
++ struct vesafb_pal_entry entry;
++ int shift = 16 - info->var.green.length;
++ int ret = 0;
++
++ if (regno >= info->cmap.len)
++ return -EINVAL;
++
++ if (info->var.bits_per_pixel == 8) {
++ entry.red = red >> shift;
++ entry.green = green >> shift;
++ entry.blue = blue >> shift;
++ entry.pad = 0;
++
++ ret = vesafb_setpalette(&entry, 1, regno, info);
++ } else if (regno < 16) {
++ switch (info->var.bits_per_pixel) {
++ case 16:
++ if (info->var.red.offset == 10) {
++ /* 1:5:5:5 */
++ ((u32*) (info->pseudo_palette))[regno] =
++ ((red & 0xf800) >> 1) |
++ ((green & 0xf800) >> 6) |
++ ((blue & 0xf800) >> 11);
++ } else {
++ /* 0:5:6:5 */
++ ((u32*) (info->pseudo_palette))[regno] =
++ ((red & 0xf800) ) |
++ ((green & 0xfc00) >> 5) |
++ ((blue & 0xf800) >> 11);
++ }
++ break;
++
++ case 24:
++ case 32:
++ red >>= 8;
++ green >>= 8;
++ blue >>= 8;
++ ((u32 *)(info->pseudo_palette))[regno] =
++ (red << info->var.red.offset) |
++ (green << info->var.green.offset) |
++ (blue << info->var.blue.offset);
++ break;
++ }
++ }
++ return ret;
++}
++
++static int vesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
++{
++ struct vesafb_pal_entry *entries;
++ int shift = 16 - info->var.green.length;
++ int i, ret = 0;
++
++ if (info->var.bits_per_pixel == 8) {
++ if (cmap->start + cmap->len > info->cmap.start +
++ info->cmap.len || cmap->start < info->cmap.start)
++ return -EINVAL;
++
++ entries = vmalloc(sizeof(struct vesafb_pal_entry) * cmap->len);
++ if (!entries)
++ return -ENOMEM;
++ for (i = 0; i < cmap->len; i++) {
++ entries[i].red = cmap->red[i] >> shift;
++ entries[i].green = cmap->green[i] >> shift;
++ entries[i].blue = cmap->blue[i] >> shift;
++ entries[i].pad = 0;
++ }
++ ret = vesafb_setpalette(entries, cmap->len, cmap->start, info);
++ vfree(entries);
++ } else {
++ /* For modes with bpp > 8, we only set the pseudo palette in
++ * the fb_info struct. We rely on vesafb_setcolreg to do all
++ * sanity checking. */
++ for (i = 0; i < cmap->len; i++) {
++ ret += vesafb_setcolreg(cmap->start + i, cmap->red[i],
++ cmap->green[i], cmap->blue[i],
++ 0, info);
++ }
++ }
++ return ret;
++}
++
++static int vesafb_set_par(struct fb_info *info)
++{
++ struct vesafb_par *par = (struct vesafb_par *) info->par;
++ struct vesafb_task *tsk;
++ struct vesafb_crtc_ib *crtc = NULL;
++ struct vesafb_mode_ib *mode = NULL;
++ int i, err = 0, depth = info->var.bits_per_pixel;
++
++ if (depth > 8 && depth != 32)
++ depth = info->var.red.length + info->var.green.length +
++ info->var.blue.length;
++
++ i = vesafb_find_vbe_mode(info->var.xres, info->var.yres, depth,
++ VESAFB_NEED_EXACT_RES |
++ VESAFB_NEED_EXACT_DEPTH);
++ if (i >= 0)
++ mode = &vbe_modes[i];
++ else
++ return -EINVAL;
++
++ vesafb_create_task (tsk);
++ if (!tsk)
++ return -ENOMEM;
++ tsk->regs.eax = 0x4f02;
++ tsk->regs.ebx = mode->mode_id | 0x4000; /* use LFB */
++ tsk->flags = TF_CALL;
++
++ if (vbe_ib.vbe_version >= 0x0300 && !nocrtc &&
++ info->var.pixclock != 0) {
++ tsk->regs.ebx |= 0x0800; /* use CRTC data */
++ tsk->flags |= TF_BUF_DI;
++ crtc = kmalloc(sizeof(struct vesafb_crtc_ib), GFP_KERNEL);
++ if (!crtc) {
++ err = -ENOMEM;
++ goto out;
++ }
++ crtc->horiz_start = info->var.xres + info->var.right_margin;
++ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
++ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
++
++ crtc->vert_start = info->var.yres + info->var.lower_margin;
++ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
++ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
++
++ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
++ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
++ (crtc->vert_total * crtc->horiz_total)));
++ crtc->flags = 0;
++
++ if (info->var.vmode & FB_VMODE_DOUBLE)
++ crtc->flags |= 0x1;
++ if (info->var.vmode & FB_VMODE_INTERLACED)
++ crtc->flags |= 0x2;
++ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
++ crtc->flags |= 0x4;
++ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
++ crtc->flags |= 0x8;
++ memcpy(&par->crtc, crtc, sizeof(struct vesafb_crtc_ib));
++ } else
++ memset(&par->crtc, 0, sizeof(struct vesafb_crtc_ib));
++
++ tsk->buf = (void*)crtc;
++ tsk->buf_len = sizeof(struct vesafb_crtc_ib);
++
++ if (vesafb_queue_task (tsk)) {
++ err = -EINVAL;
++ goto out;
++ }
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f) {
++ printk(KERN_ERR "vesafb: mode switch failed (eax: 0x%lx)\n",
++ tsk->regs.eax);
++ err = -EINVAL;
++ goto out;
++ }
++ par->mode_idx = i;
++
++ /* For 8bpp modes, always try to set the DAC to 8 bits. */
++ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
++ mode->bits_per_pixel <= 8) {
++ vesafb_reset_task(tsk);
++ tsk->flags = TF_CALL;
++ tsk->regs.eax = 0x4f08;
++ tsk->regs.ebx = 0x0800;
++
++ if (!vesafb_queue_task (tsk))
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f ||
++ ((tsk->regs.ebx & 0xff00) >> 8) != 8) {
++ /* We've failed to set the DAC palette format -
++ * time to correct var. */
++ info->var.red.length = 6;
++ info->var.green.length = 6;
++ info->var.blue.length = 6;
++ }
++ }
++
++ info->fix.visual = (info->var.bits_per_pixel == 8) ?
++ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
++ info->fix.line_length = mode->bytes_per_scan_line;
++
++ DPRINTK("set new mode %dx%d-%d (0x%x)\n",
++ info->var.xres, info->var.yres, info->var.bits_per_pixel,
++ mode->mode_id);
++
++out: if (crtc != NULL)
++ kfree(crtc);
++ kfree(tsk);
++
++ return err;
++}
++
++static void vesafb_setup_var(struct fb_var_screeninfo *var, struct fb_info *info,
++ struct vesafb_mode_ib *mode)
++{
++ var->xres = mode->x_res;
++ var->yres = mode->y_res;
++ var->xres_virtual = mode->x_res;
++ var->yres_virtual = (ypan) ?
++ info->fix.smem_len / mode->bytes_per_scan_line :
++ mode->y_res;
++ var->xoffset = 0;
++ var->yoffset = 0;
++ var->bits_per_pixel = mode->bits_per_pixel;
++
++ if (var->bits_per_pixel == 15)
++ var->bits_per_pixel = 16;
++
++ if (var->bits_per_pixel > 8) {
++ var->red.offset = mode->red_off;
++ var->red.length = mode->red_len;
++ var->green.offset = mode->green_off;
++ var->green.length = mode->green_len;
++ var->blue.offset = mode->blue_off;
++ var->blue.length = mode->blue_len;
++ var->transp.offset = mode->rsvd_off;
++ var->transp.length = mode->rsvd_len;
++
++ DPRINTK("directcolor: size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
++ mode->rsvd_len,
++ mode->red_len,
++ mode->green_len,
++ mode->blue_len,
++ mode->rsvd_off,
++ mode->red_off,
++ mode->green_off,
++ mode->blue_off);
++ } else {
++ var->red.offset = 0;
++ var->green.offset = 0;
++ var->blue.offset = 0;
++ var->transp.offset = 0;
++
++ /* We're assuming that we can switch the DAC to 8 bits. If
++ * this proves to be incorrect, we'll update the fields
++ * later in set_par(). */
++ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
++ var->red.length = 8;
++ var->green.length = 8;
++ var->blue.length = 8;
++ var->transp.length = 0;
++ } else {
++ var->red.length = 6;
++ var->green.length = 6;
++ var->blue.length = 6;
++ var->transp.length = 0;
++ }
++ }
++}
++
++static void inline vesafb_check_limits(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct fb_videomode *mode;
++
++ if (!var->pixclock)
++ return;
++ if (vbe_ib.vbe_version < 0x0300) {
++ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
++ return;
++ }
++ if (!fb_validate_mode(var, info))
++ return;
++ mode = fb_find_best_mode(var, &info->modelist);
++ if (mode) {
++ DPRINTK("find_best_mode: %d %d @ %d (vmode: %d)\n",
++ mode->xres, mode->yres, mode->refresh, mode->vmode);
++ if (mode->xres == var->xres && mode->yres == var->yres &&
++ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
++ fb_videomode_to_var(var, mode);
++ return;
++ }
++ }
++ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
++ return;
++ /* Use default refresh rate */
++ var->pixclock = 0;
++}
++
++static int vesafb_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ int match = -1;
++ int depth = var->red.length + var->green.length + var->blue.length;
++
++ /* Various apps will use bits_per_pixel to set the color depth,
++ * which is theoretically incorrect, but which we'll try to handle
++ * here. */
++ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
++ depth = var->bits_per_pixel;
++ match = vesafb_find_vbe_mode(var->xres, var->yres, depth,
++ VESAFB_NEED_EXACT_RES);
++
++ if (match == -1) {
++ DPRINTK("vesafb: mode %dx%d-%d not found\n", var->xres,
++ var->yres, depth);
++ return -EINVAL;
++ }
++
++ vesafb_setup_var(var, info, &vbe_modes[match]);
++ DPRINTK("found mode 0x%x (%dx%d-%dbpp)\n",
++ vbe_modes[match].mode_id, vbe_modes[match].x_res,
++ vbe_modes[match].y_res, vbe_modes[match].depth);
++
++ /* Check whether we have remapped enough memory for this mode. */
++ if (var->yres * vbe_modes[match].bytes_per_scan_line >
++ info->fix.smem_len) {
++ return -EINVAL;
++ }
++
++ if ((var->vmode & FB_VMODE_DOUBLE) &&
++ !(vbe_modes[match].mode_attr & 0x100))
++ var->vmode &= ~FB_VMODE_DOUBLE;
++ if ((var->vmode & FB_VMODE_INTERLACED) &&
++ !(vbe_modes[match].mode_attr & 0x200))
++ var->vmode &= ~FB_VMODE_INTERLACED;
++ vesafb_check_limits(var, info);
++ return 0;
++}
++
++static int vesafb_open(struct fb_info *info, int user)
++{
++ struct vesafb_task *tsk = NULL;
++ struct vesafb_par *par = info->par;
++ int cnt = atomic_read(&par->ref_count);
++
++ if (!cnt) {
++ vesafb_create_task(tsk);
++ if (!tsk)
++ goto out;
++
++ /* Get the VBE state buffer size. We want all available
++ * hardware state data (CL = 0x0f). */
++ tsk->regs.eax = 0x4f04;
++ tsk->regs.ecx = 0x000f;
++ tsk->regs.edx = 0x0000;
++ tsk->flags = TF_CALL;
++
++ if (vesafb_queue_task(tsk))
++ goto out;
++
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f) {
++ printk(KERN_WARNING "vesafb: VBE state buffer size "
++ "cannot be determined (eax: 0x%lx)\n",
++ tsk->regs.eax);
++ goto out;
++ }
++
++ par->vbe_state_size = 64 * (tsk->regs.ebx & 0xffff);
++ par->vbe_state = kzalloc(par->vbe_state_size, GFP_KERNEL);
++ if (!par->vbe_state)
++ goto out;
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f04;
++ tsk->regs.ecx = 0x000f;
++ tsk->regs.edx = 0x0001;
++ tsk->flags = TF_CALL | TF_BUF_BX | TF_RETURN_BUF;
++ tsk->buf = (void*)(par->vbe_state);
++ tsk->buf_len = par->vbe_state_size;
++
++ if (vesafb_queue_task(tsk))
++ goto getstate_failed;
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f) {
++ printk(KERN_WARNING "vesafb: VBE get state call "
++ "failed (eax: 0x%lx)\n", tsk->regs.eax);
++ goto getstate_failed;
++ }
++ }
++out:
++ atomic_inc(&par->ref_count);
++ if (tsk)
++ kfree(tsk);
++ return 0;
++
++getstate_failed:
++ kfree(par->vbe_state);
++ par->vbe_state = NULL;
++ par->vbe_state_size = 0;
++ goto out;
++}
++
++static int vesafb_release(struct fb_info *info, int user)
++{
++ struct vesafb_task *tsk = NULL;
++ struct vesafb_par *par = info->par;
++ int cnt = atomic_read(&par->ref_count);
++
++ if (!cnt)
++ return -EINVAL;
++
++ if (cnt == 1 && par->vbe_state && par->vbe_state_size) {
++ vesafb_create_task(tsk);
++ if (!tsk)
++ goto out;
++
++ tsk->regs.eax = 0x0003;
++ tsk->regs.ebx = 0x0000;
++ tsk->flags = TF_CALL;
++
++ if (vesafb_queue_task(tsk))
++ goto out;
++
++ vesafb_wait_for_task(tsk);
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f04;
++ tsk->regs.ecx = 0x000f;
++ tsk->regs.edx = 0x0002;
++ tsk->buf = (void*)(par->vbe_state);
++ tsk->buf_len = par->vbe_state_size;
++ tsk->flags = TF_CALL | TF_BUF_BX;
++
++ if (vesafb_queue_task(tsk))
++ goto out;
++
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f)
++ printk(KERN_WARNING "vesafb: VBE state restore call "
++ "failed (eax: 0x%lx)\n",
++ tsk->regs.eax);
++ }
++out:
++ atomic_dec(&par->ref_count);
++ if (tsk)
++ kfree(tsk);
++ return 0;
++}
++
++static int __init vesafb_probe(struct platform_device *device);
++
++static struct fb_ops vesafb_ops = {
++ .owner = THIS_MODULE,
++ .fb_open = vesafb_open,
++ .fb_release = vesafb_release,
++ .fb_setcolreg = vesafb_setcolreg,
++ .fb_setcmap = vesafb_setcmap,
++ .fb_pan_display = vesafb_pan_display,
++ .fb_blank = vesafb_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_check_var = vesafb_check_var,
++ .fb_set_par = vesafb_set_par
++};
++
++static struct platform_driver vesafb_driver = {
++ .probe = vesafb_probe,
++ .driver = {
++ .name = "vesafb",
++ },
++};
++
++static struct platform_device *vesafb_device;
++
++#ifndef MODULE
++int __init vesafb_setup(char *options)
++{
++ char *this_opt;
++
++ if (!options || !*options)
++ return 0;
++
++ DPRINTK("options %s\n",options);
++
++ while ((this_opt = strsep(&options, ",")) != NULL) {
++ if (!*this_opt) continue;
++
++ DPRINTK("this_opt: %s\n",this_opt);
++
++ if (! strcmp(this_opt, "redraw"))
++ ypan=0;
++ else if (! strcmp(this_opt, "ypan"))
++ ypan=1;
++ else if (! strcmp(this_opt, "ywrap"))
++ ypan=2;
++ else if (! strcmp(this_opt, "vgapal"))
++ pmi_setpal=0;
++ else if (! strcmp(this_opt, "pmipal"))
++ pmi_setpal=1;
++ else if (! strncmp(this_opt, "mtrr:", 5))
++ mtrr = simple_strtoul(this_opt+5, NULL, 0);
++ else if (! strcmp(this_opt, "nomtrr"))
++ mtrr=0;
++ else if (! strcmp(this_opt, "nocrtc"))
++ nocrtc=1;
++ else if (! strcmp(this_opt, "noedid"))
++ noedid=1;
++ else if (! strcmp(this_opt, "noblank"))
++ blank=0;
++ else if (! strcmp(this_opt, "gtf"))
++ gtf=1;
++ else if (! strncmp(this_opt, "vtotal:", 7))
++ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
++ else if (! strncmp(this_opt, "vremap:", 7))
++ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
++ else if (! strncmp(this_opt, "maxhf:", 6))
++ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
++ else if (! strncmp(this_opt, "maxvf:", 6))
++ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
++ else if (! strncmp(this_opt, "maxclk:", 7))
++ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
++ else if (! strncmp(this_opt, "vbemode:", 8))
++ vbemode = simple_strtoul(this_opt + 8, NULL,0);
++ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
++ DPRINTK("mode_option: %s\n",this_opt);
++ mode_option = this_opt;
++ } else {
++ printk(KERN_WARNING
++ "vesafb: unrecognized option %s\n", this_opt);
++ }
++ }
++
++ return 0;
++}
++#endif /* !MODULE */
++
++static int vesafb_read_proc_modes(char *buf, char **start, off_t offset,
++ int len, int *eof, void *private)
++{
++ int clen = 0, i;
++
++ for (i = 0; i < vbe_modes_cnt; i++) {
++ clen += min(snprintf(buf + clen, len - clen, "%dx%d-%d\n", vbe_modes[i].x_res,
++ vbe_modes[i].y_res, vbe_modes[i].depth), len - clen);
++ }
++ *eof = 1;
++ return clen;
++}
++
++static int vesafb_read_proc_vbe_info(char *buf, char **start, off_t offset,
++ int len, int *eof, void *private)
++{
++ int clen = 0;
++
++ clen += min(snprintf(buf + clen, len, "Version: %d.%d\n",
++ ((vbe_ib.vbe_version & 0xff00) >> 8),
++ vbe_ib.vbe_version & 0xff), len);
++ clen += min(snprintf(buf + clen, len - clen, "Vendor: %s\n",
++ (char*)vbe_ib.oem_vendor_name_ptr), len - clen);
++ clen += min(snprintf(buf + clen, len - clen, "Product: %s\n",
++ (char*)vbe_ib.oem_product_name_ptr), len - clen);
++ clen += min(snprintf(buf + clen, len - clen, "OEM rev: %s\n",
++ (char*)vbe_ib.oem_product_rev_ptr), len - clen);
++ clen += min(snprintf(buf + clen, len - clen, "OEM string: %s\n",
++ (char*)vbe_ib.oem_string_ptr), len - clen);
++
++ *eof = 1;
++ return clen;
++}
++
++static int __init inline vesafb_vbe_getinfo(struct vesafb_task *tsk)
++{
++ tsk->regs.eax = 0x4f00;
++ tsk->flags = TF_CALL | TF_GETVBEIB;
++ tsk->buf = &vbe_ib;
++ tsk->buf_len = sizeof(vbe_ib);
++ if (vesafb_queue_task (tsk))
++ return -EINVAL;
++ vesafb_wait_for_task(tsk);
++
++ if (vbe_ib.vbe_version < 0x0200) {
++ printk(KERN_ERR "vesafb: Sorry, pre-VBE 2.0 cards are "
++ "not supported.\n");
++ return -EINVAL;
++ }
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f) {
++ printk(KERN_ERR "vesafb: Getting mode info block failed "
++ "(eax=0x%x)\n", (u32)tsk->regs.eax);
++ return -EINVAL;
++ }
++
++ printk(KERN_INFO "vesafb: %s, %s, %s (OEM: %s)\n",
++ (char*)vbe_ib.oem_vendor_name_ptr,
++ (char*)vbe_ib.oem_product_name_ptr,
++ (char*)vbe_ib.oem_product_rev_ptr,
++ (char*)vbe_ib.oem_string_ptr);
++
++ printk(KERN_INFO "vesafb: VBE version: %d.%d\n",
++ ((vbe_ib.vbe_version & 0xff00) >> 8),
++ vbe_ib.vbe_version & 0xff);
++ return 0;
++}
++
++static int __init inline vesafb_vbe_getmodes(struct vesafb_task *tsk)
++{
++ u16 *mode = 0;
++ int off = 0;
++
++ /* Count available modes. */
++ mode = (u16*)vbe_ib.mode_list_ptr;
++ while (*mode != 0xffff) {
++ vbe_modes_cnt++;
++ mode++;
++ }
++
++ vbe_modes = kmalloc(sizeof(struct vesafb_mode_ib)*
++ vbe_modes_cnt, GFP_KERNEL);
++ if (!vbe_modes)
++ return -ENOMEM;
++
++ /* Get mode info for all available modes. */
++ mode = (u16*)vbe_ib.mode_list_ptr;
++
++ while (*mode != 0xffff) {
++ struct vesafb_mode_ib *mib;
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f01;
++ tsk->regs.ecx = (u32) *mode;
++ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
++ tsk->buf = vbe_modes+off;
++ tsk->buf_len = sizeof(struct vesafb_mode_ib);
++ if (vesafb_queue_task(tsk))
++ return -EINVAL;
++ vesafb_wait_for_task(tsk);
++ mib = p_mode(tsk->buf);
++ mib->mode_id = *mode;
++
++ /* We only want modes that are supported with the currennt
++ * hardware configuration (D0), color (D3), graphics (D4)
++ * and that have support for the LFB (D7). */
++ if ((mib->mode_attr & 0x99) == 0x99 &&
++ mib->bits_per_pixel >= 8) {
++ off++;
++ } else {
++ vbe_modes_cnt--;
++ }
++ mode++;
++ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
++ /* Handle 8bpp modes and modes with broken color component
++ * lengths. */
++ if (mib->depth == 0 ||
++ (mib->depth == 24 && mib->bits_per_pixel == 32))
++ mib->depth = mib->bits_per_pixel;
++ }
++
++ return 0;
++}
++
++static int __init inline vesafb_vbe_getpmi(struct vesafb_task *tsk)
++{
++ int i;
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f0a;
++ tsk->regs.ebx = 0x0;
++ tsk->flags = TF_CALL;
++ if (vesafb_queue_task(tsk))
++ return -EINVAL;
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f || tsk->regs.es < 0xc000) {
++ pmi_setpal = ypan = 0;
++ } else {
++ pmi_base = (u16*)phys_to_virt(((u32)tsk->regs.es << 4) +
++ tsk->regs.edi);
++ pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
++ pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
++ printk(KERN_INFO "vesafb: protected mode interface info at "
++ "%04x:%04x\n",
++ (u16)tsk->regs.es, (u16)tsk->regs.edi);
++ printk(KERN_INFO "vesafb: pmi: set display start = %p, "
++ "set palette = %p\n", pmi_start, pmi_pal);
++
++ if (pmi_base[3]) {
++ printk(KERN_INFO "vesafb: pmi: ports = ");
++ for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++)
++ printk("%x ",pmi_base[i]);
++ printk("\n");
++
++ /*
++ * memory areas not supported (yet?)
++ *
++ * Rules are: we have to set up a descriptor for the
++ * requested memory area and pass it in the ES register
++ * to the BIOS function.
++ */
++ if (pmi_base[i] != 0xffff) {
++ printk(KERN_INFO "vesafb: can't handle memory "
++ "requests, pmi disabled\n");
++ ypan = pmi_setpal = 0;
++ }
++ }
++ }
++ return 0;
++}
++
++static int __init inline vesafb_vbe_getedid(struct vesafb_task *tsk,
++ struct fb_info *info)
++{
++ int res = 0;
++
++ if (noedid || vbe_ib.vbe_version < 0x0300)
++ return -EINVAL;
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f15;
++ tsk->regs.ebx = 0;
++ tsk->regs.ecx = 0;
++ if (vesafb_queue_task(tsk))
++ return -EINVAL;
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) != 0x004f)
++ return -EINVAL;
++
++ if ((tsk->regs.ebx & 0x3) == 3) {
++ printk(KERN_INFO "vesafb: VBIOS/hardware supports both "
++ "DDC1 and DDC2 transfers\n");
++ } else if ((tsk->regs.ebx & 0x3) == 2) {
++ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC2 "
++ "transfers\n");
++ } else if ((tsk->regs.ebx & 0x3) == 1) {
++ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC1 "
++ "transfers\n");
++ } else {
++ printk(KERN_INFO "vesafb: VBIOS/hardware doesn't support "
++ "DDC transfers\n");
++ return -EINVAL;
++ }
++
++ vesafb_reset_task(tsk);
++ tsk->regs.eax = 0x4f15;
++ tsk->regs.ebx = 1;
++ tsk->regs.ecx = tsk->regs.edx = 0;
++ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
++ tsk->buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
++ tsk->buf_len = EDID_LENGTH;
++
++ if (vesafb_queue_task(tsk)) {
++ res = -EINVAL;
++ goto out;
++ }
++ vesafb_wait_for_task(tsk);
++
++ if ((tsk->regs.eax & 0xffff) == 0x004f) {
++ fb_edid_to_monspecs(tsk->buf, &info->monspecs);
++ fb_videomode_to_modelist(info->monspecs.modedb,
++ info->monspecs.modedb_len, &info->modelist);
++ if (info->monspecs.vfmax && info->monspecs.hfmax) {
++ /* If the maximum pixel clock wasn't specified in
++ * the EDID block, set it to 300 MHz. */
++ if (info->monspecs.dclkmax == 0)
++ info->monspecs.dclkmax = 300 * 1000000;
++ info->monspecs.gtf = 1;
++ } else {
++ res = -EINVAL;
++ }
++ }
++
++out: kfree(tsk->buf);
++ return res;
++}
++
++static void __init inline vesafb_vbe_getmonspecs(struct vesafb_task *tsk,
++ struct fb_info *info)
++{
++ struct fb_var_screeninfo var;
++ int i;
++ memset(&info->monspecs, 0, sizeof(struct fb_monspecs));
++
++ /* If we didn't get all necessary data from the EDID block,
++ * mark it as incompatible with the GTF. */
++ if (vesafb_vbe_getedid(tsk, info))
++ info->monspecs.gtf = 0;
++
++ /* Kernel command line overrides. */
++ if (maxclk)
++ info->monspecs.dclkmax = maxclk * 1000000;
++ if (maxvf)
++ info->monspecs.vfmax = maxvf;
++ if (maxhf)
++ info->monspecs.hfmax = maxhf * 1000;
++
++ /* In case DDC transfers are not supported the user can provide
++ * monitor limits manually. Lower limits are set to "safe" values. */
++ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
++ info->monspecs.dclkmin = 0;
++ info->monspecs.vfmin = 60;
++ info->monspecs.hfmin = 29000;
++ info->monspecs.gtf = 1;
++ }
++
++ if (info->monspecs.gtf) {
++ printk(KERN_INFO
++ "vesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
++ "clk = %d MHz\n", info->monspecs.vfmax,
++ (int)(info->monspecs.hfmax / 1000),
++ (int)(info->monspecs.dclkmax / 1000000));
++ /* Add valid VESA video modes to our modelist. */
++ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
++ fb_videomode_to_var(&var, (struct fb_videomode *)
++ &vesa_modes[i]);
++ if (!fb_validate_mode(&var, info))
++ fb_add_videomode((struct fb_videomode *)
++ &vesa_modes[i],
++ &info->modelist);
++ }
++ } else {
++ /* Add all VESA video modes to our modelist. */
++ fb_videomode_to_modelist((struct fb_videomode *)vesa_modes,
++ VESA_MODEDB_SIZE, &info->modelist);
++ printk(KERN_INFO "vesafb: no monitor limits have been set\n");
++ }
++ return;
++}
++
++static int __init inline vesafb_vbe_init(struct fb_info *info)
++{
++ struct vesafb_task *tsk;
++ int res = 0;
++
++ vesafb_create_task(tsk);
++ if (!tsk)
++ return -EINVAL;
++ if ((res = vesafb_vbe_getinfo(tsk)) != 0)
++ goto out;
++ if ((res = vesafb_vbe_getmodes(tsk)) != 0)
++ goto out;
++ if (pmi_setpal || ypan)
++ vesafb_vbe_getpmi(tsk);
++
++ INIT_LIST_HEAD(&info->modelist);
++ vesafb_vbe_getmonspecs(tsk, info);
++
++out: kfree(tsk);
++ return res;
++}
++
++static int __init decode_mode(u32 *xres, u32 *yres, u32 *bpp, u32 *refresh)
++{
++ int len = strlen(mode_option), i, err = 0;
++ u8 res_specified = 0, bpp_specified = 0, refresh_specified = 0,
++ yres_specified = 0;
++
++ for (i = len-1; i >= 0; i--) {
++ switch (mode_option[i]) {
++ case '@':
++ len = i;
++ if (!refresh_specified && !bpp_specified &&
++ !yres_specified) {
++ *refresh = simple_strtoul(&mode_option[i+1],
++ NULL, 0);
++ refresh_specified = 1;
++ } else
++ goto out;
++ break;
++ case '-':
++ len = i;
++ if (!bpp_specified && !yres_specified) {
++ *bpp = simple_strtoul(&mode_option[i+1],
++ NULL, 0);
++ bpp_specified = 1;
++ } else
++ goto out;
++ break;
++ case 'x':
++ if (!yres_specified) {
++ *yres = simple_strtoul(&mode_option[i+1],
++ NULL, 0);
++ yres_specified = 1;
++ } else
++ goto out;
++ break;
++ case '0'...'9':
++ break;
++ default:
++ goto out;
++ }
++ }
++
++ if (i < 0 && yres_specified) {
++ *xres = simple_strtoul(mode_option, NULL, 0);
++ res_specified = 1;
++ }
++
++out: if (!res_specified || !yres_specified) {
++ printk(KERN_ERR "vesafb: invalid resolution, "
++ "%s not specified\n",
++ (!res_specified) ? "width" : "height");
++ err = -EINVAL;
++ }
++
++ return err;
++}
++
++static int __init vesafb_init_set_mode(struct fb_info *info)
++{
++ struct fb_videomode *fbmode;
++ struct fb_videomode mode;
++ int i, modeid, refresh = 0;
++ u8 refresh_specified = 0;
++
++ if (!mode_option)
++ mode_option = CONFIG_FB_VESA_DEFAULT_MODE;
++
++ if (vbemode > 0) {
++ for (i = 0; i < vbe_modes_cnt; i++) {
++ if (vbe_modes[i].mode_id == vbemode) {
++ info->var.vmode = FB_VMODE_NONINTERLACED;
++ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
++ vesafb_setup_var(&info->var, info,
++ &vbe_modes[i]);
++ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
++ 60, &info->var, info);
++ /* With pixclock set to 0, the default BIOS
++ * timings will be used in set_par(). */
++ info->var.pixclock = 0;
++ modeid = i;
++ goto out;
++ }
++ }
++ printk(KERN_INFO "specified VBE mode %d not found\n",
++ vbemode);
++ vbemode = 0;
++ }
++
++ /* Decode the mode specified on the kernel command line. We save
++ * the depth into bits_per_pixel, which is wrong, but will work
++ * anyway. */
++ if (decode_mode(&info->var.xres, &info->var.yres,
++ &info->var.bits_per_pixel, &refresh))
++ return -EINVAL;
++ if (refresh)
++ refresh_specified = 1;
++ else
++ refresh = 60;
++
++ /* Look for a matching VBE mode. We can live if an exact match
++ * cannot be found. */
++ modeid = vesafb_find_vbe_mode(info->var.xres, info->var.yres,
++ info->var.bits_per_pixel, 0);
++
++ if (modeid == -1) {
++ return -EINVAL;
++ } else {
++ info->var.vmode = FB_VMODE_NONINTERLACED;
++ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
++ vesafb_setup_var(&info->var, info, &vbe_modes[modeid]);
++ }
++ if (vbe_ib.vbe_version < 0x0300) {
++ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
++ &info->var, info);
++ goto out;
++ }
++ if (!gtf) {
++ struct fb_videomode tmode;
++
++ if (refresh_specified) {
++ fb_var_to_videomode(&tmode, &info->var);
++ tmode.refresh = refresh;
++ fbmode = fb_find_nearest_mode(&tmode,
++ &info->modelist);
++ } else
++ fbmode = fb_find_best_mode(&info->var,
++ &info->modelist);
++
++ if (fbmode->xres == info->var.xres &&
++ fbmode->yres == info->var.yres &&
++ !(fbmode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))
++ && (!refresh_specified ||
++ abs(refresh - fbmode->refresh) <= 5)) {
++ fb_videomode_to_var(&info->var, fbmode);
++ return modeid;
++ }
++ }
++ i = FB_MAXTIMINGS;
++ if (!info->monspecs.gtf)
++ i = FB_IGNOREMON | FB_VSYNCTIMINGS;
++ else if (refresh_specified)
++ i = FB_VSYNCTIMINGS;
++ if (!fb_get_mode(i, refresh, &info->var, info))
++ goto out;
++ if (info->monspecs.gtf &&
++ !fb_get_mode(FB_MAXTIMINGS, 0, &info->var, info))
++ goto out;
++ /* Use default refresh rate */
++ printk(KERN_WARNING "vesafb: using default BIOS refresh rate\n");
++ info->var.pixclock = 0;
++
++out:
++ fb_var_to_videomode(&mode, &info->var);
++ fb_add_videomode(&mode, &info->modelist);
++ return modeid;
++}
++
++static int __init vesafb_probe(struct platform_device *dev)
++{
++ char entry[16];
++ struct fb_info *info;
++ struct vesafb_mode_ib *mode = NULL;
++ int err = 0, i, h;
++ unsigned int size_vmode;
++ unsigned int size_remap;
++ unsigned int size_total;
++
++ vesafb_info = info = framebuffer_alloc(sizeof(struct vesafb_par) +
++ sizeof(u32) * 256, &dev->dev);
++ if (!info)
++ return -ENOMEM;
++
++ if (vesafb_wait_for_thread()) {
++ printk(KERN_ERR "vesafb: vesafb thread not running\n");
++ framebuffer_release(info);
++ return -EINVAL;
++ }
++
++ if (vesafb_vbe_init(info)) {
++ printk(KERN_ERR "vesafb: vbe_init failed\n");
++ err = -EINVAL;
++ goto out;
++ }
++
++ vesafb_fix.ypanstep = ypan ? 1 : 0;
++ vesafb_fix.ywrapstep = (ypan>1) ? 1 : 0;
++
++ info->pseudo_palette = ((u8*)info->par + sizeof(struct vesafb_par));
++ info->fbops = &vesafb_ops;
++ info->var = vesafb_defined;
++ info->fix = vesafb_fix;
++
++ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
++ err = -ENXIO;
++ goto out;
++ }
++
++ i = vesafb_init_set_mode(info);
++ if (i < 0) {
++ err = -EINVAL;
++ goto out_cmap;
++ } else
++ mode = &vbe_modes[i];
++
++ /* Disable blanking if the user requested so. */
++ if (!blank) {
++ info->fbops->fb_blank = NULL;
++ }
++
++ /* Find out how much IO memory is required for the mode with
++ * the highest resolution. */
++ size_remap = 0;
++ for (i = 0; i < vbe_modes_cnt; i++) {
++ h = vbe_modes[i].bytes_per_scan_line * vbe_modes[i].y_res;
++ if (h > size_remap)
++ size_remap = h;
++ }
++ size_remap *= 2;
++
++ /* size_vmode -- that is the amount of memory needed for the
++ * used video mode, i.e. the minimum amount of
++ * memory we need. */
++ if (mode != NULL) {
++ size_vmode = info->var.yres * mode->bytes_per_scan_line;
++ } else {
++ size_vmode = info->var.yres * info->var.xres *
++ ((info->var.bits_per_pixel + 7) >> 3);
++ }
++
++ /* size_total -- all video memory we have. Used for mtrr
++ * entries, ressource allocation and bounds
++ * checking. */
++ size_total = vbe_ib.total_memory * 65536;
++ if (vram_total)
++ size_total = vram_total * 1024 * 1024;
++ if (size_total < size_vmode)
++ size_total = size_vmode;
++ ((struct vesafb_par*)(info->par))->mem_total = size_total;
++
++ /* size_remap -- the amount of video memory we are going to
++ * use for vesafb. With modern cards it is no
++ * option to simply use size_total as th
++ * wastes plenty of kernel address space. */
++ if (vram_remap)
++ size_remap = vram_remap * 1024 * 1024;
++ if (size_remap < size_vmode)
++ size_remap = size_vmode;
++ if (size_remap > size_total)
++ size_remap = size_total;
++
++ info->fix.smem_len = size_remap;
++ info->fix.smem_start = mode->phys_base_ptr;
++
++ /* We have to set it here, because when setup_var() was called,
++ * smem_len wasn't defined yet. */
++ info->var.yres_virtual = info->fix.smem_len /
++ mode->bytes_per_scan_line;
++
++ if (ypan && info->var.yres_virtual > info->var.yres) {
++ printk(KERN_INFO "vesafb: scrolling: %s "
++ "using protected mode interface, "
++ "yres_virtual=%d\n",
++ (ypan > 1) ? "ywrap" : "ypan",info->var.yres_virtual);
++ } else {
++ printk(KERN_INFO "vesafb: scrolling: redraw\n");
++ info->var.yres_virtual = info->var.yres;
++ ypan = 0;
++ }
++
++ info->flags = FBINFO_FLAG_DEFAULT |
++ (ypan) ? FBINFO_HWACCEL_YPAN : 0;
++
++ if (!ypan)
++ info->fbops->fb_pan_display = NULL;
++
++ if (!request_mem_region(info->fix.smem_start, size_total, "vesafb")) {
++ printk(KERN_WARNING "vesafb: cannot reserve video memory at "
++ "0x%lx\n", info->fix.smem_start);
++ /* We cannot make this fatal. Sometimes this comes from magic
++ spaces our resource handlers simply don't know about. */
++ }
++
++ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
++
++ if (!info->screen_base) {
++ printk(KERN_ERR
++ "vesafb: abort, cannot ioremap video memory "
++ "0x%x @ 0x%lx\n",
++ info->fix.smem_len, info->fix.smem_start);
++ err = -EIO;
++ goto out_mem;
++ }
++
++ /* Request failure does not faze us, as vgacon probably has this
++ region already (FIXME) */
++ request_region(0x3c0, 32, "vesafb");
++
++#ifdef CONFIG_MTRR
++ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
++ int temp_size = size_total;
++ unsigned int type = 0;
++
++ switch (mtrr) {
++ case 1:
++ type = MTRR_TYPE_UNCACHABLE;
++ break;
++ case 2:
++ type = MTRR_TYPE_WRBACK;
++ break;
++ case 3:
++ type = MTRR_TYPE_WRCOMB;
++ break;
++ case 4:
++ type = MTRR_TYPE_WRTHROUGH;
++ break;
++ default:
++ type = 0;
++ break;
++ }
++
++ if (type) {
++ int rc;
++
++ /* Find the largest power-of-two */
++ while (temp_size & (temp_size - 1))
++ temp_size &= (temp_size - 1);
++
++ /* Try and find a power of two to add */
++ do {
++ rc = mtrr_add(info->fix.smem_start,
++ temp_size, type, 1);
++ temp_size >>= 1;
++ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
++ }
++ }
++#endif /* CONFIG_MTRR */
++
++ if (register_framebuffer(info) < 0) {
++ printk(KERN_ERR
++ "vesafb: failed to register framebuffer device\n");
++ err = -EINVAL;
++ goto out_mem;
++ }
++
++ printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
++ "using %dk, total %dk\n", info->fix.smem_start,
++ info->screen_base, size_remap/1024, size_total/1024);
++ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
++ info->fix.id);
++
++ sprintf(entry, "fb%d", info->node);
++ proc_mkdir(entry, 0);
++
++ sprintf(entry, "fb%d/modes", info->node);
++ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_modes, NULL);
++
++ sprintf(entry, "fb%d/vbe_info", info->node);
++ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_vbe_info, NULL);
++ return 0;
++
++out_mem:
++ release_mem_region(info->fix.smem_start, size_total);
++ if (!list_empty(&info->modelist))
++ fb_destroy_modelist(&info->modelist);
++ fb_destroy_modedb(info->monspecs.modedb);
++out_cmap:
++ fb_dealloc_cmap(&info->cmap);
++out:
++ framebuffer_release(info);
++ vesafb_info = NULL;
++ kfree(vbe_modes);
++ vbe_modes = NULL;
++ return err;
++}
++
++int __init vesafb_init(void)
++{
++ int ret;
++#ifndef MODULE
++ char *option = NULL;
++
++ if (fb_get_options("vesafb", &option))
++ return -ENODEV;
++ vesafb_setup(option);
++#endif
++ ret = platform_driver_register(&vesafb_driver);
++
++ if (!ret) {
++ vesafb_device = platform_device_alloc("vesafb", 0);
++
++ if (vesafb_device)
++ ret = platform_device_add(vesafb_device);
++ else
++ ret = -ENOMEM;
++
++ if (ret) {
++ platform_device_put(vesafb_device);
++ platform_driver_unregister(&vesafb_driver);
++ }
++ }
++ return ret;
++}
++
++module_init(vesafb_init);
++
++#ifdef MODULE
++void __exit vesafb_exit(void)
++{
++ char entry[16];
++
++ if (vesafb_info)
++ unregister_framebuffer(vesafb_info);
++
++ platform_device_unregister(vesafb_device);
++ platform_driver_unregister(&vesafb_driver);
++
++ if (vesafb_info) {
++ struct vesafb_par *par = (struct vesafb_par*)vesafb_info->par;
++
++ sprintf(entry, "fb%d/modes", vesafb_info->node);
++ remove_proc_entry(entry, NULL);
++
++ sprintf(entry, "fb%d/vbe_info", vesafb_info->node);
++ remove_proc_entry(entry, NULL);
++
++ sprintf(entry, "fb%d", vesafb_info->node);
++ remove_proc_entry(entry, NULL);
++
++ iounmap(vesafb_info->screen_base);
++ release_mem_region(vesafb_info->fix.smem_start,
++ par->mem_total);
++ fb_dealloc_cmap(&vesafb_info->cmap);
++ if (!list_empty(&vesafb_info->modelist))
++ fb_destroy_modelist(&vesafb_info->modelist);
++ fb_destroy_modedb(vesafb_info->monspecs.modedb);
++ framebuffer_release(vesafb_info);
++ }
++
++ if (vbe_modes != NULL)
++ kfree(vbe_modes);
++}
++
++module_exit(vesafb_exit);
++
++static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
++{
++ return 0;
++}
++static inline int param_set_scroll(const char *val, struct kernel_param *kp)
++{
++ ypan = 0;
++
++ if (! strcmp(val, "redraw"))
++ ypan = 0;
++ else if (! strcmp(val, "ypan"))
++ ypan = 1;
++ else if (! strcmp(val, "ywrap"))
++ ypan = 2;
++
++ return 0;
++}
++
++#define param_check_scroll(name, p) __param_check(name, p, void);
++
++module_param_named(scroll, ypan, scroll, 0);
++MODULE_PARM_DESC(scroll,"Scrolling mode, set to 'redraw', 'ypan' or 'ywrap'");
++module_param_named(vgapal, pmi_setpal, invbool, 0);
++MODULE_PARM_DESC(vgapal,"bool: set palette using VGA registers");
++module_param_named(pmipal, pmi_setpal, bool, 0);
++MODULE_PARM_DESC(pmipal,"bool: set palette using PMI calls");
++module_param(mtrr, uint, 0);
++MODULE_PARM_DESC(mtrr,"Memory Type Range Registers setting. Use 0 to disable.");
++module_param(blank, bool, 1);
++MODULE_PARM_DESC(blank,"bool: enable hardware blanking");
++module_param(nocrtc, bool, 0);
++MODULE_PARM_DESC(nocrtc,"bool: ignore CRTC timings when setting modes");
++module_param(noedid, bool, 0);
++MODULE_PARM_DESC(noedid,"bool: ignore EDID-provided monitor limits "
++ "when setting modes");
++module_param(gtf, bool, 0);
++MODULE_PARM_DESC(gtf,"bool: force use of VESA GTF to calculate mode timings");
++module_param(vram_remap, uint, 0);
++MODULE_PARM_DESC(vram_remap,"Set amount of video memory to be used [MiB]");
++module_param(vram_total, uint, 0);
++MODULE_PARM_DESC(vram_total,"Set total amount of video memoery [MiB]");
++module_param(maxclk, ushort, 0);
++MODULE_PARM_DESC(maxclk,"Maximum pixelclock [MHz], overrides EDID data");
++module_param(maxhf, ushort, 0);
++MODULE_PARM_DESC(maxhf,"Maximum horizontal frequency [kHz], "
++ "overrides EDID data");
++module_param(maxvf, ushort, 0);
++MODULE_PARM_DESC(maxvf,"Maximum vertical frequency [Hz], "
++ "overrides EDID data");
++module_param_named(mode, mode_option, charp, 0);
++MODULE_PARM_DESC(mode, "Specify resolution as "
++ "\"<xres>x<yres>[-<bpp>][@<refresh>]\"");
++module_param(vbemode, ushort, 0);
++MODULE_PARM_DESC(vbemode,"VBE mode number to set, overrides 'mode' setting");
++
++#endif /* MODULE */
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Michal Januszewski");
++MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
++
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index 4463735..7283e48 100644
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -1390,6 +1390,8 @@ extern void mmput(struct mm_struct *);
+ extern struct mm_struct *get_task_mm(struct task_struct *task);
+ /* Remove the current tasks stale references to the old mm_struct */
+ extern void mm_release(struct task_struct *, struct mm_struct *);
++/* Create a new mm for a kernel thread */
++extern int set_new_mm(void);
+
+ extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
+ extern void flush_thread(void);
+diff --git a/include/video/vesa.h b/include/video/vesa.h
+new file mode 100644
+index 0000000..bb5abcf
+--- /dev/null
++++ b/include/video/vesa.h
+@@ -0,0 +1,150 @@
++#if 0
++#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , \
++ ## args)
++#else
++#define DPRINTK(fmt, args...)
++#endif
++
++#define p_crtc(arg) ((struct vesafb_crtc_ib*)(arg))
++#define p_vbe(arg) ((struct vesafb_vbe_ib*)(arg))
++#define p_mode(arg) ((struct vesafb_mode_ib*)(arg))
++
++struct vesafb_task {
++ u8 flags;
++ void *buf;
++ int buf_len;
++ struct vm86_regs regs;
++ struct list_head node;
++ struct completion done;
++};
++
++/* Vesafb task flags and masks */
++#define TF_CALL 0x00
++#define TF_EXIT 0x01
++#define TF_GETVBEIB 0x02
++#define TF_BUF_DI 0x04
++#define TF_BUF_BX 0x08
++#define TF_RETURN_BUF 0x10
++
++/* Macros and functions for manipulating vesafb tasks */
++#define vesafb_create_task(task) \
++do { \
++ task = kmalloc(sizeof(struct vesafb_task), GFP_ATOMIC); \
++ if (task) \
++ memset(task, 0, sizeof(struct vesafb_task)); \
++ init_completion(&task->done); \
++} while (0)
++
++#define vesafb_wait_for_task(task) wait_for_completion(&task->done);
++#define vesafb_reset_task(task) init_completion(&task->done);
++int vesafb_queue_task(struct vesafb_task *task);
++
++/* Functions for controlling the vesafb thread */
++int vesafb_wait_for_thread(void);
++
++#define VBE_CAP_CAN_SWITCH_DAC 0x01
++#define VBE_CAP_VGACOMPAT 0x02
++
++/* This struct is 512 bytes long */
++struct vesafb_vbe_ib {
++ char vbe_signature[4];
++ u16 vbe_version;
++ u32 oem_string_ptr;
++ u32 capabilities;
++ u32 mode_list_ptr;
++ u16 total_memory;
++ u16 oem_software_rev;
++ u32 oem_vendor_name_ptr;
++ u32 oem_product_name_ptr;
++ u32 oem_product_rev_ptr;
++ u8 reserved[222];
++ char oem_data[256];
++} __attribute__ ((packed));
++
++struct vesafb_crtc_ib {
++ u16 horiz_total;
++ u16 horiz_start;
++ u16 horiz_end;
++ u16 vert_total;
++ u16 vert_start;
++ u16 vert_end;
++ u8 flags;
++ u32 pixel_clock;
++ u16 refresh_rate;
++ u8 reserved[40];
++} __attribute__ ((packed));
++
++#define VBE_MODE_VGACOMPAT 0x20
++
++struct vesafb_mode_ib {
++ /* for all VBE revisions */
++ u16 mode_attr;
++ u8 winA_attr;
++ u8 winB_attr;
++ u16 win_granularity;
++ u16 win_size;
++ u16 winA_seg;
++ u16 winB_seg;
++ u32 win_func_ptr;
++ u16 bytes_per_scan_line;
++
++ /* for VBE 1.2+ */
++ u16 x_res;
++ u16 y_res;
++ u8 x_char_size;
++ u8 y_char_size;
++ u8 planes;
++ u8 bits_per_pixel;
++ u8 banks;
++ u8 memory_model;
++ u8 bank_size;
++ u8 image_pages;
++ u8 reserved1;
++
++ /* Direct color fields for direct/6 and YUV/7 memory models. */
++ /* Offsets are bit positions of lsb in the mask. */
++ u8 red_len;
++ u8 red_off;
++ u8 green_len;
++ u8 green_off;
++ u8 blue_len;
++ u8 blue_off;
++ u8 rsvd_len;
++ u8 rsvd_off;
++ u8 direct_color_info; /* direct color mode attributes */
++
++ /* for VBE 2.0+ */
++ u32 phys_base_ptr;
++ u8 reserved2[6];
++
++ /* for VBE 3.0+ */
++ u16 lin_bytes_per_scan_line;
++ u8 bnk_image_pages;
++ u8 lin_image_pages;
++ u8 lin_red_len;
++ u8 lin_red_off;
++ u8 lin_green_len;
++ u8 lin_green_off;
++ u8 lin_blue_len;
++ u8 lin_blue_off;
++ u8 lin_rsvd_len;
++ u8 lin_rsvd_off;
++ u32 max_pixel_clock;
++ u16 mode_id;
++ u8 depth;
++} __attribute__ ((packed));
++
++struct vesafb_pal_entry {
++ u_char blue, green, red, pad;
++} __attribute__ ((packed));
++
++struct vesafb_par {
++ u8 *vbe_state;
++ int vbe_state_size;
++ atomic_t ref_count;
++
++ u32 mem_total;
++ int mode_idx;
++ struct vesafb_crtc_ib crtc;
++};
++
+diff --git a/kernel/fork.c b/kernel/fork.c
+index fc723e5..dc8f93b 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -100,6 +100,7 @@ struct kmem_cache *fs_cachep;
+
+ /* SLAB cache for vm_area_struct structures */
+ struct kmem_cache *vm_area_cachep;
++EXPORT_SYMBOL_GPL(vm_area_cachep);
+
+ /* SLAB cache for mm_struct structures (tsk->mm) */
+ static struct kmem_cache *mm_cachep;
+@@ -399,6 +400,40 @@ void mmput(struct mm_struct *mm)
+ EXPORT_SYMBOL_GPL(mmput);
+
+ /**
++ * set_new_mm - allocate, init and activate a new mm for a kernel thread
++ */
++int set_new_mm(void)
++{
++ struct mm_struct *mm;
++ struct task_struct *tsk = current;
++ struct mm_struct *active_mm;
++
++ mm = mm_alloc();
++ if (!mm)
++ goto fail_nomem;
++ if (init_new_context(current,mm))
++ goto fail_nocontext;
++
++ task_lock(tsk);
++ tsk->flags |= PF_BORROWED_MM;
++ active_mm = tsk->active_mm;
++ current->mm = mm;
++ current->active_mm = mm;
++ activate_mm(active_mm, mm);
++ task_unlock(current);
++
++ /* Drop the previous active_mm */
++ mmdrop(active_mm);
++ return 0;
++
++fail_nocontext:
++ mmdrop(mm);
++fail_nomem:
++ return -EINVAL;
++}
++EXPORT_SYMBOL_GPL(set_new_mm);
++
++/**
+ * get_task_mm - acquire a reference to the task's mm
+ *
+ * Returns %NULL if the task has no mm. Checks PF_BORROWED_MM (meaning
+diff --git a/mm/memory.c b/mm/memory.c
+index 563792f..a9519ea 100644
+--- a/mm/memory.c
++++ b/mm/memory.c
+@@ -1193,6 +1193,7 @@ int zeromap_page_range(struct vm_area_struct *vma,
+ } while (pgd++, addr = next, addr != end);
+ return err;
+ }
++EXPORT_SYMBOL_GPL(zeromap_page_range);
+
+ pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
+ {
+diff --git a/mm/mmap.c b/mm/mmap.c
+index 9717337..6fa5b1c 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -2024,6 +2024,7 @@ int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
+ vma_link(mm, vma, prev, rb_link, rb_parent);
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(insert_vm_struct);
+
+ /*
+ * Copy the vma structure to a new location in the same mm,
diff --git a/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch
new file mode 100644
index 0000000000..191de3af22
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch
@@ -0,0 +1,208 @@
+Index: linux-tosa/drivers/input/touchscreen/wm9712.c
+===================================================================
+--- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
+@@ -1,7 +1,7 @@
+ /*
+ * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
+ *
+- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
++ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
+ * Author: Liam Girdwood
+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
+ * Parts Copyright : Ian Molton <spyro@f2s.com>
+@@ -13,6 +13,12 @@
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
++ * Revision history
++ * 4th Jul 2005 Initial version.
++ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
++ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
++ * touchscreen interference.
++ *
+ */
+
+ #include <linux/module.h>
+@@ -28,6 +34,10 @@
+ #define WM9705_VERSION "0.60"
+ #define DEFAULT_PRESSURE 0xb0c0
+
++#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
++#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
++#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
++
+ /*
+ * Debug
+ */
+@@ -243,6 +253,36 @@
+ return wm->dig[2] & WM9712_PDEN;
+ }
+
++
++#ifdef CONFIG_MACH_TOSA
++/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
++ * before sampling the Y axis of the touchscreen */
++static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
++ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
++ if (adcsel == WM97XX_ADCSEL_Y) {
++ wait_time = wm97xx_calc_lcd_waittime(wm);
++
++ CCNT_ON();
++
++ if (wait_time) {
++ /* wait for LCD rising edge */
++ wm_machinfo->wait_hsync();
++ /* get clock */
++ CCNT(timer1);
++ CCNT(timer2);
++
++ while ((timer2 - timer1) < wait_time) {
++ CCNT(timer2);
++ }
++ }
++ }
++}
++
++static inline void wm9712_lcd_sync_off(void) {
++ CCNT_OFF();
++}
++#endif
++
+ /*
+ * Read a sample from the WM9712 adc in polling mode.
+ */
+@@ -260,6 +300,9 @@
+ /* set up digitiser */
+ if (adcsel & 0x8000)
+ adcsel = ((adcsel & 0x7fff) + 3) << 12;
++ #ifdef CONFIG_MACH_TOSA
++ wm9712_lcd_sync_on(wm, adcsel);
++ #endif
+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
+
+ /* wait 3 AC97 time slots + delay for conversion */
+@@ -282,6 +325,10 @@
+
+ *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
+
++ #ifdef CONFIG_MACH_TOSA
++ wm9712_lcd_sync_off();
++ #endif
++
+ /* check we have correct sample */
+ if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
+ dbg ("adc wrong sample, read %x got %x", adcsel,
+@@ -303,11 +350,12 @@
+ static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
+ {
+ int rc;
+-
+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
+ return rc;
++
+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
+ return rc;
++
+ if (pil && !five_wire) {
+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
+ return rc;
+Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
+===================================================================
+--- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
+@@ -2,7 +2,7 @@
+ * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
+ * and WM9713 AC97 Codecs.
+ *
+- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
++ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
+ * Author: Liam Girdwood
+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
+ * Parts Copyright : Ian Molton <spyro@f2s.com>
+@@ -67,6 +67,9 @@
+ * GPIOs) and 2.6 power management.
+ * 29th Nov 2004 Added WM9713 support.
+ * 4th Jul 2005 Moved codec specific code out to seperate files.
++ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
++ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
++ * touchscreen interference.
+ */
+
+ #include <linux/module.h>
+@@ -94,6 +97,7 @@
+ static DECLARE_MUTEX(gpio_sem);
+ static LIST_HEAD(wm97xx_misc_list);
+ static struct wm97xx* wm_codec = NULL;
++struct wm97xx_machinfo *wm_machinfo;
+
+ /*
+ * WM97xx - enable/disable AUX ADC sysfs
+@@ -832,6 +836,23 @@
+ mdev->remove(wm_codec);
+ }
+
++#ifdef CONFIG_MACH_TOSA
++/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
++ * before sampling the Y axis of the touchscreen */
++unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
++ unsigned long hsync_time = wm_machinfo->get_hsync_time();
++ return hsync_time;
++}
++
++void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
++ wm_machinfo = machinfo;
++}
++
++void wm97xx_unset_machinfo() {
++ wm_machinfo = NULL;
++}
++#endif
++
+ static struct device_driver wm97xx_driver = {
+ .name = "ac97",
+ .bus = &ac97_bus_type,
+@@ -861,6 +882,9 @@
+ EXPORT_SYMBOL_GPL(wm97xx_reg_write);
+ EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
+ EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
++EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
++EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
++EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
+
+ module_init(wm97xx_init);
+ module_exit(wm97xx_exit);
+Index: linux-tosa/include/linux/wm97xx.h
+===================================================================
+--- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
++++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
+@@ -207,6 +207,7 @@
+
+ struct wm97xx;
+ extern struct wm97xx_codec_drv wm97xx_codec;
++extern struct wm97xx_machinfo *wm_machinfo;
+
+ /*
+ * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
+@@ -253,6 +254,11 @@
+ struct list_head list;
+ };
+
++struct wm97xx_machinfo {
++ unsigned long (*get_hsync_time)(void);
++ void (*wait_hsync)(void);
++};
++
+ int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
+ void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
+
+@@ -281,4 +287,9 @@
+ int wm97xx_acc_startup(struct wm97xx* wm);
+ void wm97xx_acc_shutdown(struct wm97xx* wm);
+
++
++unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
++void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
++void wm97xx_unset_machinfo(void);
++
+ #endif
diff --git a/packages/linux/linux-rp.inc b/packages/linux/linux-rp.inc
index 63342d5b3f..14890a2283 100644
--- a/packages/linux/linux-rp.inc
+++ b/packages/linux/linux-rp.inc
@@ -11,6 +11,7 @@ RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
JLSRC = "http://www.cs.wisc.edu/~lenz/zaurus/files"
BASRC = "http://www.orca.cx/zaurus/patches"
CHSRC = "http://oz.drigon.com/patches"
+TKSRC = "http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches"
##############################################################
# Compensate for sucky bootloader on all Sharp Zaurus models
@@ -20,13 +21,19 @@ ALLOW_EMPTY = "1"
EXTRA_OEMAKE = "OPENZAURUS_RELEASE=-${DISTRO_VERSION}"
COMPATIBLE_HOST = "(arm|i.86).*-linux"
-COMPATIBLE_MACHINE = '(collie|poodle|c7x0|akita|spitz|tosa|hx2000|qemuarm|qemux86)'
+COMPATIBLE_MACHINE = '(collie|poodle|c7x0|akita|spitz|tosa|hx2000|qemuarm|qemux86|bootcdx86)'
KERNEL_IMAGETYPE_qemux86 = "bzImage"
+KERNEL_IMAGETYPE_bootcdx86 = "bzImage"
+
+KERNEL_CUSTOM_NAME ?= ""
+KERNEL_DEPLOY_NAME ?= "${KERNEL_IMAGETYPE}-${PV}-${KERNEL_CUSTOM_NAME}${MACHINE}-${DATETIME}.bin"
+KERNEL_SYMLINK_NAME ?= "${KERNEL_IMAGETYPE}-${KERNEL_CUSTOM_NAME}${MACHINE}.bin"
+KERNEL_DEFCONFIG ?= "defconfig-${MACHINE}"
CMDLINE_CON = "console=ttyS0,115200n8 console=tty1 noinitrd"
CMDLINE_CON_collie = "console=ttySA0,115200n8 console=tty1 noinitrd"
-CMDLINE_ROOT = "root=/dev/mtdblock2 rootfstype=jffs2"
-CMDLINE_ROOT_spitz = "root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw"
+CMDLINE_ROOT ?= "root=/dev/mtdblock2 rootfstype=jffs2"
+CMDLINE_ROOT_spitz ?= "root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw"
CMDLINE_OTHER = "dyntick=enable"
CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
@@ -58,27 +65,29 @@ module_autoload_snd-soc-corgi_c7x0 = "snd-soc-corgi"
module_autoload_snd-soc-spitz_akita = "snd-soc-spitz"
module_autoload_snd-soc-spitz_spitz = "snd-soc-spitz"
module_autoload_snd-soc-poodle_poodle = "snd-soc-poodle"
+module_autoload_locomo-spi_collie = "locomo-spi"
+module_autoload_mmc_block_collie = "mmc_block"
do_configure() {
rm -f ${S}/.config
- if [ "${MACHINE}" == "tosa" ]; then
+ if [ "${MACHINE}" = "tosa" ]; then
gcc_version=`${KERNEL_CC} -dumpversion`
- if [ "${gcc_version}" == "4.0.1" ] || [ "${gcc_version}" == "4.0.2" ]; then
+ if [ "${gcc_version}" = "4.0.1" ] || [ "${gcc_version}" = "4.0.2" ]; then
die "tosa kernel wont work with gcc 4.0.x"
fi
fi
- if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
+ if [ ! -e ${WORKDIR}/${KERNEL_DEFCONFIG} ]; then
die "No default configuration for ${MACHINE} available."
fi
- if [ "${MACHINE}" == "collie" ]; then
+ if [ "${MACHINE}" = "collie" ]; then
mempos=`echo "obase=16; $mem * 1024 * 1024" | bc`
rdsize=`echo "$rd * 1024" | bc`
total=`expr $mem + $rd`
addr=`echo "obase=16; ibase=16; C0000000 + $mempos" | bc`
- if [ "$rd" == "0" ]
+ if [ "$rd" = "0" ]
then
echo "No RAMDISK"
echo "# CONFIG_MTD_MTDRAM_SA1100 is not set" >> ${S}/.config
@@ -93,7 +102,7 @@ do_configure() {
echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
- #if [ "${ENABLE_ELPP}" == "yes" ]; then
+ #if [ "${ENABLE_ELPP}" = "yes" ]; then
# echo "# Enhanced Linux Progress Patch" >> ${S}/.config
# echo "CONFIG_FB_ELPP=y" >> ${S}/.config
# echo "CONFIG_LOGO=y" >> ${S}/.config
@@ -102,7 +111,7 @@ do_configure() {
# echo "# CONFIG_FB_ELPP is not set" >> ${S}/.config
#fi
- if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then
echo "CONFIG_AEABI=y" >> ${S}/.config
echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
else
@@ -110,7 +119,7 @@ do_configure() {
echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
fi
- if [ "${DISTRO}" == "openzaurus" -a "${MACHINE}" != "collie" ]; then
+ if [ "${DISTRO}" = "openzaurus" -a "${MACHINE}" != "collie" ]; then
case ${MACHINE} in
c7x0 | akita | spitz )
echo "CONFIG_LOGO_OZ640_CLUT224=y" >> ${S}/.config
@@ -131,7 +140,7 @@ do_configure() {
echo "CONFIG_LOGO=y" >> ${S}/.config
echo "# CONFIG_LOGO_LINUX_CLUT224 is not set" >> ${S}/.config
echo "# CONFIG_LOGO_OHAND_CLUT224 is not set" >> ${S}/.config
- elif [ "${DISTRO}" == "poky" -a "${MACHINE}" != "collie" ]; then
+ elif [ "${DISTRO}" = "poky" -a "${MACHINE}" != "collie" ]; then
echo "CONFIG_LOGO=y" >> ${S}/.config
echo "CONFIG_LOGO_OHAND_CLUT224=y" >> ${S}/.config
echo "# CONFIG_LOGO_OZ240_CLUT224 is not set" >> ${S}/.config
@@ -160,7 +169,7 @@ do_configure() {
-e '/CONFIG_LOGO_OZ240_CLUT224=/d' \
-e '/CONFIG_LOGO_OZ480_CLUT224=/d' \
-e '/CONFIG_LOGO_OZ640_CLUT224=/d' \
- '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
+ '${WORKDIR}/${KERNEL_DEFCONFIG}' >>'${S}/.config'
yes '' | oe_runmake oldconfig
}
@@ -190,11 +199,12 @@ do_compile_append() {
}
do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
- rm -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
- ln -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_VERSION}-${MACHINE}.tgz -C ${D} lib
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_DEPLOY_NAME}
+ cd ${DEPLOY_DIR_IMAGE}
+ rm -f ${KERNEL_SYMLINK_NAME}
+ ln -s ${KERNEL_DEPLOY_NAME} ${KERNEL_SYMLINK_NAME}
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_VERSION}-${MACHINE}.tgz -C ${D} lib
}
do_deploy[dirs] = "${S}"
diff --git a/packages/linux/linux-rp_2.6.17.bb b/packages/linux/linux-rp_2.6.17.bb
index 717ef5a523..211c5a43cf 100644
--- a/packages/linux/linux-rp_2.6.17.bb
+++ b/packages/linux/linux-rp_2.6.17.bb
@@ -1,6 +1,6 @@
require linux-rp.inc
-PR = "r33"
+PR = "r35"
# Handy URLs
# git://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
@@ -27,7 +27,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
${RPSRC}/spectrumcs_fix-r0.patch;patch=1 \
file://00-hostap.patch;patch=1;status=merged \
file://10-pcnet.patch;patch=1;status=merged \
- file://asoc-v0.12.4_2.6.17.patch;patch=1 \
+ file://asoc-v0.12.4_2.6.17.patch;patch=1 \
${RPSRC}/hx2750_base-r27.patch;patch=1 \
${RPSRC}/hx2750_bl-r7.patch;patch=1 \
${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
diff --git a/packages/linux/linux-rp_2.6.20.bb b/packages/linux/linux-rp_2.6.20.bb
index 3504014ffd..b818b0f3e8 100644
--- a/packages/linux/linux-rp_2.6.20.bb
+++ b/packages/linux/linux-rp_2.6.20.bb
@@ -1,6 +1,6 @@
require linux-rp.inc
-PR = "r5"
+PR = "r19"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
@@ -14,6 +14,7 @@ PR = "r5"
# Patches submitted upstream are towards top of this list
# Hacks should clearly named and at the bottom
SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
+ http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.6.bz2;patch=1 \
http://opensource.wolfsonmicro.com/~lg/asoc/asoc-v0.13.3.patch;patch=1;status=merged \
${RPSRC}/oprofile_always_bt_arm-r0.patch;patch=1 \
${RPSRC}/lzo_kernel-r0.patch;patch=1 \
@@ -39,6 +40,7 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
${RPSRC}/poodle_pm-r3.patch;patch=1 \
${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
${RPSRC}/w100_extaccel-r0.patch;patch=1 \
+ ${RPSRC}/w100_extmem-r0.patch;patch=1 \
file://hostap-monitor-mode.patch;patch=1 \
file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
@@ -52,12 +54,13 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
file://squashfs3.0-2.6.15.patch;patch=1;status=external \
file://vesafb-tng-1.0-rc2-2.6.20-rc2.patch;patch=1;status=external \
+ file://sharpsl-rc-r1.patch;patch=1 \
file://defconfig-c7x0 \
file://defconfig-hx2000 \
file://defconfig-collie \
file://defconfig-poodle \
file://defconfig-akita \
- file://defconfig-spitz \
+ file://defconfig-spitz* \
file://defconfig-qemuarm \
file://defconfig-qemux86 \
file://defconfig-tosa "
@@ -74,14 +77,21 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
# These patches are extracted from Pavel Machek's git tree
# (diff against vanilla kernel)
+
SRC_URI_append_collie = "\
- ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-r0.patch;patch=1 \
- ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
- ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
- file://collie-mcp-r1.patch;patch=1 \
- ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
-# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
+ ${TKSRC}/mtd-sharp-flash-hack-r2.patch;patch=1 \
+ ${TKSRC}/ucb1x00-touch-audio-r1.patch;patch=1 \
+ ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
+ ${TKSRC}/sa1100-udc-r2.patch;patch=1 \
+ ${TKSRC}/mmc_spi-r4.patch;patch=1 \
+ ${TKSRC}/locomo-r0.patch;patch=1 \
+ ${TKSRC}/collie-kexec.patch;patch=1 \
+ ${TKSRC}/locomo_spi-r3.patch;patch=1 \
+ ${TKSRC}/sharpsl_pm.patch;patch=1 \
+ ${TKSRC}/collie_pm-2.patch;patch=1 \
+ ${TKSRC}/locomokeyb_suspendkey.patch;patch=1 \
+ ${TKSRC}/pcmcia_suspend.patch;patch=1 \
+ ${TKSRC}/ucb1x00_suspend.patch;patch=1 \
"
SRC_URI_append_tosa = "\
diff --git a/packages/linux/linux-rp_2.6.21.bb b/packages/linux/linux-rp_2.6.21.bb
new file mode 100644
index 0000000000..3f155942e9
--- /dev/null
+++ b/packages/linux/linux-rp_2.6.21.bb
@@ -0,0 +1,116 @@
+require linux-rp.inc
+
+PR = "r10"
+
+# Handy URLs
+# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
+# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
+# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
+# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
+# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
+# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
+# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
+
+# Patches submitted upstream are towards top of this list
+# Hacks should clearly named and at the bottom
+SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 \
+ ${RPSRC}/lzo_kernel-r0.patch;patch=1 \
+ ${RPSRC}/lzo_jffs2-r0.patch;patch=1 \
+ ${RPSRC}/lzo_crypto-r1.patch;patch=1 \
+ ${RPSRC}/lzo_jffs2_lzomode-r0.patch;patch=1 \
+ ${RPSRC}/lzo_jffs2_sysfs-r0.patch;patch=1 \
+ ${RPSRC}/hx2750_base-r28.patch;patch=1 \
+ ${RPSRC}/hx2750_bl-r9.patch;patch=1 \
+ ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
+ ${RPSRC}/pxa_keys-r7.patch;patch=1 \
+ ${RPSRC}/tsc2101-r16.patch;patch=1 \
+ ${RPSRC}/hx2750_test1-r6.patch;patch=1 \
+ ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
+ ${RPSRC}/input_power-r7.patch;patch=1 \
+ ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
+ ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
+ ${RPSRC}/pm_changes-r1.patch;patch=1 \
+ ${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
+ ${RPSRC}/usb_pxa27x_udc-r4.patch;patch=1 \
+ ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
+ ${RPSRC}/poodle_pm-r4.patch;patch=1 \
+ ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
+ ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
+ ${RPSRC}/asoc_fix_typo-r0.patch;patch=1 \
+ ${RPSRC}/qemuarm_scsi_fix-r0.patch;patch=1 \
+ file://hostap-monitor-mode.patch;patch=1 \
+ file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
+ ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
+ ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
+ ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
+ ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
+ ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
+ ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
+ ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
+ file://pxa-serial-hack.patch;patch=1;status=hack \
+ file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
+ file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
+ file://squashfs3.0-2.6.15.patch;patch=1;status=external \
+ file://vesafb-tng-1.0-rc2-2.6.20-rc2.patch;patch=1;status=external \
+ file://sharpsl-rc-r1.patch;patch=1 \
+ file://defconfig-c7x0 \
+ file://defconfig-hx2000 \
+ file://defconfig-collie \
+ file://defconfig-poodle \
+ file://defconfig-akita \
+ file://defconfig-spitz \
+ file://defconfig-qemuarm \
+ file://defconfig-qemux86 \
+ file://defconfig-bootcdx86 \
+ file://defconfig-tosa "
+
+# Add this to enable pm debug code (useful with a serial lead)
+# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
+
+# Disabled until I find the reason this gives issues with cdc_subset
+# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
+
+# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
+# (Pavel Machek's git tree has updated versions of this?)
+# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
+
+SRC_URI_append_collie = "\
+ ${TKSRC}/mtd-sharp-flash-hack-r2.patch;patch=1 \
+ ${TKSRC}/ucb1x00-touch-audio-r1.patch;patch=1 \
+ ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
+ ${TKSRC}/sa1100-udc-r2.patch;patch=1 \
+ ${TKSRC}/mmc_spi-r4.patch;patch=1 \
+ ${TKSRC}/locomo-r0.patch;patch=1 \
+ ${TKSRC}/collie-kexec.patch;patch=1 \
+ ${TKSRC}/locomo_spi-r4.patch;patch=1 \
+ ${TKSRC}/sharpsl_pm-r2.patch;patch=1 \
+ ${TKSRC}/collie_pm-r2.patch;patch=1 \
+ ${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \
+ ${TKSRC}/pcmcia_suspend.patch;patch=1 \
+ ${TKSRC}/ucb1x00_suspend.patch;patch=1 \
+"
+
+SRC_URI_append_tosa = "\
+ ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
+ ${CHSRC}/tmio-core-r4.patch;patch=1 \
+ file://tmio-tc6393-r8.patch;patch=1 \
+ file://tmio-nand-r7.patch;patch=1 \
+ file://tmio-ohci-r6.patch;patch=1 \
+ ${CHSRC}/tmio-fb-r6.patch;patch=1 \
+ file://tosa-keyboard-r18.patch;patch=1 \
+ ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
+ ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
+ ${DOSRC}/tosa-power-r17.patch;patch=1 \
+ file://tosa-tmio-lcd-r10.patch;patch=1 \
+ ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
+ ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
+ file://wm9712-suspend-cold-res-r2.patch;patch=1 \
+ file://sharpsl-pm-postresume-r1.patch;patch=1 \
+ ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
+ ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
+ file://wm9712-reset-loop-r2.patch;patch=1 \
+ file://tosa-lcdnoise-r1.patch;patch=1 \
+ file://wm97xx-lcdnoise-r0.patch;patch=1 "
+# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
+
+S = "${WORKDIR}/linux-2.6.21"
diff --git a/packages/linux/linux-sequoia_2.6.21.bb b/packages/linux/linux-sequoia_2.6.21.bb
new file mode 100644
index 0000000000..1fa520e914
--- /dev/null
+++ b/packages/linux/linux-sequoia_2.6.21.bb
@@ -0,0 +1,60 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for AMCC's Sequoia dev board"
+LICENSE = "GPL"
+PR = "r0"
+#DEPENDS = "u-boot"
+
+COMPATIBLE_MACHINE = "sequoia"
+
+#DENX git kernel
+#Same as in AMCC's sequoia dev kit
+SRC_URI ="git://www.denx.de/git/linux-2.6-denx.git;protocol=git;tag=78157a82fa20719f7e3307307755888e9af2c0e9 \
+ file://sequoia_defconfig "
+
+
+S = "${WORKDIR}/git"
+
+inherit kernel
+
+export ARCH="ppc"
+
+KERNEL_IMAGETYPE = "zImage.elf"
+
+do_configure() {
+ install -m 644 ${WORKDIR}/sequoia_defconfig ${S}/.config
+ make ARCH=${ARCH} oldconfig
+}
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers a$
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ install -d ${STAGING_KERNEL_DIR}/include/asm
+ cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE} \
+ ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+#seems like 2.6.21 kernel images have moved (or is this only for the Denx kernel ?)
+#so we need to copy the kernel image where kernel.bbclass expects it to be
+do_install_prepend() {
+ install -m 0644 arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE} \
+ arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
diff --git a/packages/linux/linux-smdk2440-2.6.19/smdk2440-touchscreen-r2.patch b/packages/linux/linux-smdk2440-2.6.19/smdk2440-touchscreen-r2.patch
deleted file mode 100644
index d785cb885f..0000000000
--- a/packages/linux/linux-smdk2440-2.6.19/smdk2440-touchscreen-r2.patch
+++ /dev/null
@@ -1,532 +0,0 @@
-Index: linux-2.6.19/drivers/input/touchscreen/s3c2410_ts.c
-===================================================================
---- /dev/null
-+++ linux-2.6.19/drivers/input/touchscreen/s3c2410_ts.c
-@@ -0,0 +1,351 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Copyright (c) 2004 Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * iPAQ H1940 touchscreen support
-+ *
-+ * ChangeLog
-+ *
-+ * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at>
-+ * - added clock (de-)allocation code
-+ *
-+ * 2005-03-06: Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * - h1940_ -> s3c2410 (this driver is now also used on the n30
-+ * machines :P)
-+ * - Debug messages are now enabled with the config option
-+ * TOUCHSCREEN_S3C2410_DEBUG
-+ * - Changed the way the value are read
-+ * - Input subsystem should now work
-+ * - Use ioremap and readl/writel
-+ *
-+ * 2005-03-23: Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * - Make use of some undocumented features of the touchscreen
-+ * controller
-+ *
-+ */
-+
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/input.h>
-+#include <linux/init.h>
-+#include <linux/serio.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/clk.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+
-+#include <asm/arch/regs-adc.h>
-+#include <asm/arch/regs-gpio.h>
-+#include <asm/arch/ts.h>
-+
-+/* For ts.dev.id.version */
-+#define S3C2410TSVERSION 0x0101
-+
-+#define WAIT4INT(x) (((x)<<8) | \
-+ S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+ S3C2410_ADCTSC_XY_PST(3))
-+
-+#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+ S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
-+
-+#define DEBUG_LVL KERN_DEBUG
-+
-+MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
-+MODULE_DESCRIPTION("s3c2410 touchscreen driver");
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * Definitions & global arrays.
-+ */
-+
-+
-+static char *s3c2410ts_name = "s3c2410 TouchScreen";
-+
-+/*
-+ * Per-touchscreen data.
-+ */
-+
-+struct s3c2410ts {
-+ struct input_dev *dev;
-+ long xp;
-+ long yp;
-+ int count;
-+ int shift;
-+};
-+
-+static struct s3c2410ts ts;
-+static void __iomem *base_addr;
-+
-+static inline void s3c2410_ts_connect(void)
-+{
-+ s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
-+}
-+
-+static void touch_timer_fire(unsigned long data)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+ int updown;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+ if (updown) {
-+ if (ts.count != 0) {
-+ ts.xp >>= ts.shift;
-+ ts.yp >>= ts.shift;
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ {
-+ struct timeval tv;
-+ do_gettimeofday(&tv);
-+ printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
-+ }
-+#endif
-+
-+ input_report_abs(ts.dev, ABS_Y, ts.xp);
-+ input_report_abs(ts.dev, ABS_X, ts.yp);
-+
-+ input_report_key(ts.dev, BTN_TOUCH, 1);
-+ input_report_abs(ts.dev, ABS_PRESSURE, 1);
-+ input_sync(ts.dev);
-+ }
-+
-+ ts.count = 0;
-+
-+ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+ } else {
-+ ts.count = 0;
-+
-+ input_report_abs(ts.dev, ABS_Y, ts.xp);
-+ input_report_abs(ts.dev, ABS_X, ts.yp);
-+
-+ input_report_key(ts.dev, BTN_TOUCH, 0);
-+ input_report_abs(ts.dev, ABS_PRESSURE, 0);
-+ input_sync(ts.dev);
-+
-+ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+ }
-+}
-+
-+static struct timer_list touch_timer =
-+ TIMER_INITIALIZER(touch_timer_fire, 0, 0);
-+
-+static irqreturn_t stylus_updown(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+ int updown;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+ /* TODO we should never get an interrupt with updown set while
-+ * the timer is running, but maybe we ought to verify that the
-+ * timer isn't running anyways. */
-+
-+ if (updown)
-+ touch_timer_fire(0);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+
-+static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
-+ ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
-+ ts.count++;
-+
-+ if (ts.count < (1<<ts.shift)) {
-+ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+ } else {
-+ mod_timer(&touch_timer, jiffies+1);
-+ writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static struct clk *adc_clock;
-+
-+/*
-+ * The functions for inserting/removing us as a module.
-+ */
-+
-+static int __init s3c2410ts_probe(struct platform_device *pdev)
-+{
-+ struct s3c2410_ts_mach_info *info;
-+ struct input_dev *input_dev;
-+
-+ info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
-+
-+ if (!info)
-+ {
-+ printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
-+ return -EINVAL;
-+ }
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ printk(DEBUG_LVL "Entering s3c2410ts_init\n");
-+#endif
-+
-+ adc_clock = clk_get(NULL, "adc");
-+ if (!adc_clock) {
-+ printk(KERN_ERR "failed to get adc clock source\n");
-+ return -ENOENT;
-+ }
-+ clk_enable(adc_clock);
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ printk(DEBUG_LVL "got and enabled clock\n");
-+#endif
-+
-+ base_addr=ioremap(S3C2410_PA_ADC,0x20);
-+ if (base_addr == NULL) {
-+ printk(KERN_ERR "Failed to remap register block\n");
-+ return -ENOMEM;
-+ }
-+
-+
-+ /* Configure GPIOs */
-+ s3c2410_ts_connect();
-+
-+ if ((info->presc&0xff) > 0)
-+ writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
-+ base_addr+S3C2410_ADCCON);
-+ else
-+ writel(0,base_addr+S3C2410_ADCCON);
-+
-+
-+ /* Initialise registers */
-+ if ((info->delay&0xffff) > 0)
-+ writel(info->delay & 0xffff, base_addr+S3C2410_ADCDLY);
-+
-+ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+
-+ /* Initialise input stuff */
-+ memset(&ts, 0, sizeof(struct s3c2410ts));
-+ input_dev = input_allocate_device();
-+
-+ if (!input_dev) {
-+ printk(KERN_ERR "Unable to allocate the input device !!\n");
-+ return -ENOMEM;
-+ }
-+
-+ ts.dev = input_dev;
-+ ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
-+ ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
-+ input_set_abs_params(ts.dev, ABS_X, 0x10, 0x3FF, 0, 0);
-+ input_set_abs_params(ts.dev, ABS_Y, 0x10, 0x3FF, 0, 0);
-+ input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
-+
-+ ts.dev->private = &ts;
-+ ts.dev->name = s3c2410ts_name;
-+ ts.dev->id.bustype = BUS_RS232;
-+ ts.dev->id.vendor = 0xDEAD;
-+ ts.dev->id.product = 0xBEEF;
-+ ts.dev->id.version = S3C2410TSVERSION;
-+
-+ ts.shift = info->oversampling_shift;
-+
-+ /* Get irqs */
-+ if (request_irq(IRQ_ADC, stylus_action, SA_SAMPLE_RANDOM,
-+ "s3c2410_action", ts.dev)) {
-+ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
-+ iounmap(base_addr);
-+ return -EIO;
-+ }
-+ if (request_irq(IRQ_TC, stylus_updown, SA_SAMPLE_RANDOM,
-+ "s3c2410_action", ts.dev)) {
-+ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
-+ iounmap(base_addr);
-+ return -EIO;
-+ }
-+
-+ printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
-+
-+ /* All went ok, so register to the input system */
-+ input_register_device(ts.dev);
-+
-+ return 0;
-+}
-+
-+static int s3c2410ts_remove(struct platform_device *pdev)
-+{
-+ disable_irq(IRQ_ADC);
-+ disable_irq(IRQ_TC);
-+ free_irq(IRQ_TC,ts.dev);
-+ free_irq(IRQ_ADC,ts.dev);
-+
-+ if (adc_clock) {
-+ clk_disable(adc_clock);
-+ clk_put(adc_clock);
-+ adc_clock = NULL;
-+ }
-+
-+ input_unregister_device(ts.dev);
-+ iounmap(base_addr);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver s3c2410ts_driver = {
-+ .driver = {
-+ .name = "s3c2410-ts",
-+ .owner = THIS_MODULE,
-+ },
-+ .probe = s3c2410ts_probe,
-+ .remove = s3c2410ts_remove,
-+};
-+
-+
-+static int __init s3c2410ts_init(void)
-+{
-+ return platform_driver_register(&s3c2410ts_driver);
-+}
-+
-+static void __exit s3c2410ts_exit(void)
-+{
-+ platform_driver_unregister(&s3c2410ts_driver);
-+}
-+
-+module_init(s3c2410ts_init);
-+module_exit(s3c2410ts_exit);
-+
-+/*
-+ Local variables:
-+ compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
-+ c-basic-offset: 8
-+ End:
-+*/
-Index: linux-2.6.19/arch/arm/mach-s3c2410/devs.c
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/devs.c
-+++ linux-2.6.19/arch/arm/mach-s3c2410/devs.c
-@@ -28,6 +28,7 @@
- #include <asm/irq.h>
-
- #include <asm/arch/regs-serial.h>
-+#include <asm/arch/ts.h>
-
- #include "devs.h"
- #include "cpu.h"
-@@ -204,6 +205,23 @@ struct platform_device s3c_device_nand =
-
- EXPORT_SYMBOL(s3c_device_nand);
-
-+/* Touchscreen */
-+struct platform_device s3c_device_ts = {
-+ .name = "s3c2410-ts",
-+ .id = -1,
-+};
-+
-+EXPORT_SYMBOL(s3c_device_ts);
-+
-+static struct s3c2410_ts_mach_info s3c2410ts_info;
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
-+{
-+ memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
-+ s3c_device_ts.dev.platform_data = &s3c2410ts_info;
-+}
-+EXPORT_SYMBOL(set_s3c2410ts_info);
-+
- /* USB Device (Gadget)*/
-
- static struct resource s3c_usbgadget_resource[] = {
-Index: linux-2.6.19/arch/arm/mach-s3c2410/devs.h
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/devs.h
-+++ linux-2.6.19/arch/arm/mach-s3c2410/devs.h
-@@ -41,6 +41,8 @@ extern struct platform_device s3c_device
- extern struct platform_device s3c_device_timer3;
-
- extern struct platform_device s3c_device_usbgadget;
-+extern struct platform_device s3c_device_ts;
-+
-
- /* s3c2440 specific devices */
-
-Index: linux-2.6.19/arch/arm/mach-s3c2410/mach-smdk2440.c
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/mach-smdk2440.c
-+++ linux-2.6.19/arch/arm/mach-s3c2410/mach-smdk2440.c
-@@ -38,6 +38,7 @@
-
- #include <asm/arch/idle.h>
- #include <asm/arch/fb.h>
-+#include <asm/arch/ts.h>
-
- #include "s3c2410.h"
- #include "s3c2440.h"
-@@ -177,6 +178,7 @@ static struct platform_device *smdk2440_
- &s3c_device_wdt,
- &s3c_device_i2c,
- &s3c_device_iis,
-+ &s3c_device_ts,
- };
-
- static struct s3c24xx_board smdk2440_board __initdata = {
-@@ -184,6 +186,13 @@ static struct s3c24xx_board smdk2440_boa
- .devices_count = ARRAY_SIZE(smdk2440_devices)
- };
-
-+static struct s3c2410_ts_mach_info smdk2440_ts_cfg __initdata = {
-+ .delay = 10000,
-+ .presc = 49,
-+ .oversampling_shift = 2,
-+};
-+
-+
- static void __init smdk2440_map_io(void)
- {
- s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
-@@ -195,6 +204,7 @@ static void __init smdk2440_map_io(void)
- static void __init smdk2440_machine_init(void)
- {
- s3c24xx_fb_set_platdata(&smdk2440_lcd_cfg);
-+ set_s3c2410ts_info(&smdk2440_ts_cfg);
-
- smdk_machine_init();
- }
-Index: linux-2.6.19/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.19.orig/drivers/input/touchscreen/Kconfig
-+++ linux-2.6.19/drivers/input/touchscreen/Kconfig
-@@ -49,6 +49,25 @@ config TOUCHSCREEN_CORGI
- To compile this driver as a module, choose M here: the
- module will be called corgi_ts.
-
-+config TOUCHSCREEN_S3C2410
-+ tristate "Samsung S3C2410 touchscreen input driver"
-+ depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
-+ select SERIO
-+ help
-+ Say Y here if you have the s3c2410 touchscreen.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called s3c2410_ts.
-+
-+config TOUCHSCREEN_S3C2410_DEBUG
-+ boolean "Samsung S3C2410 touchscreen debug messages"
-+ depends on TOUCHSCREEN_S3C2410
-+ help
-+ Select this if you want debug messages
-+
-+
- config TOUCHSCREEN_GUNZE
- tristate "Gunze AHL-51S touchscreen"
- select SERIO
-Index: linux-2.6.19/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.19.orig/drivers/input/touchscreen/Makefile
-+++ linux-2.6.19/drivers/input/touchscreen/Makefile
-@@ -15,3 +15,4 @@ obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680
- obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
-+obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
-Index: linux-2.6.19/include/asm-arm/arch-s3c2410/ts.h
-===================================================================
---- /dev/null
-+++ linux-2.6.19/include/asm-arm/arch-s3c2410/ts.h
-@@ -0,0 +1,28 @@
-+/* linux/include/asm/arch-s3c2410/ts.h
-+ *
-+ * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ *
-+ * Changelog:
-+ * 24-Mar-2005 RTP Created file
-+ * 03-Aug-2005 RTP Renamed to ts.h
-+ */
-+
-+#ifndef __ASM_ARM_TS_H
-+#define __ASM_ARM_TS_H
-+
-+struct s3c2410_ts_mach_info {
-+ int delay;
-+ int presc;
-+ int oversampling_shift;
-+};
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
-+
-+#endif /* __ASM_ARM_TS_H */
-+
-Index: linux-2.6.19/include/asm-arm/arch-s3c2410/regs-adc.h
-===================================================================
---- linux-2.6.19.orig/include/asm-arm/arch-s3c2410/regs-adc.h
-+++ linux-2.6.19/include/asm-arm/arch-s3c2410/regs-adc.h
-@@ -41,7 +41,7 @@
- #define S3C2410_ADCTSC_XP_SEN (1<<4)
- #define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3)
- #define S3C2410_ADCTSC_AUTO_PST (1<<2)
--#define S3C2410_ADCTSC_XY_PST (0x3<<0)
-+#define S3C2410_ADCTSC_XY_PST(x) (((x)&0x3)<<0)
-
- /* ADCDAT0 Bits */
- #define S3C2410_ADCDAT0_UPDOWN (1<<15)
diff --git a/packages/linux/linux-smdk2440-2.6.20+git/.mtn2git_empty b/packages/linux/linux-smdk2440-2.6.20+git/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-smdk2440-2.6.20+git/.mtn2git_empty
diff --git a/packages/linux/linux-smdk2440-2.6.20+git/0001-Enable-cs8900A-network-device-for-smdk2440-board.patch b/packages/linux/linux-smdk2440-2.6.20+git/0001-Enable-cs8900A-network-device-for-smdk2440-board.patch
new file mode 100644
index 0000000000..bf8a0081dd
--- /dev/null
+++ b/packages/linux/linux-smdk2440-2.6.20+git/0001-Enable-cs8900A-network-device-for-smdk2440-board.patch
@@ -0,0 +1,92 @@
+From 44c48cf15a3072185ce3541a127a89bfbb2b346f Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@gg-desktop.wolfsonmicro.main>
+Date: Fri, 6 Apr 2007 15:47:13 +0100
+Subject: [PATCH] Enable cs8900A network device for smdk2440 board.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ arch/arm/mach-s3c2440/mach-smdk2440.c | 7 ++++++-
+ drivers/net/cs89x0.c | 20 ++++++++++++++++++--
+ 2 files changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2440/mach-smdk2440.c b/arch/arm/mach-s3c2440/mach-smdk2440.c
+index c17eb5b..fb36665 100644
+--- a/arch/arm/mach-s3c2440/mach-smdk2440.c
++++ b/arch/arm/mach-s3c2440/mach-smdk2440.c
+@@ -69,7 +69,12 @@ static struct map_desc smdk2440_iodesc[] __initdata = {
+ .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
+ .length = SZ_4M,
+ .type = MT_DEVICE,
+- }
++ }, {
++ .virtual = (u32)S3C2410_ADDR(0x04000000) ,
++ .pfn = __phys_to_pfn(S3C2410_CS3 + (1<<24)),
++ .length = SZ_16M,
++ .type = MT_DEVICE,
++ }
+ };
+
+ #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
+diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c
+index 4612f71..534653e 100644
+--- a/drivers/net/cs89x0.c
++++ b/drivers/net/cs89x0.c
+@@ -187,6 +187,10 @@ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0};
+ #include <asm/irq.h>
+ static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
+ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
++#elif defined(CONFIG_ARCH_S3C2440)
++static unsigned int netcard_portlist[] __initdata = {S3C2410_ADDR(0x04000000) + 0x300 , 0};
++static unsigned int cs8900_irq_map[] = {IRQ_EINT9, 0, 0, 0};
++static unsigned char cs8900_mac[] = {0xDE,0xAD,0xBE,0xEF,0x01,0x02};
+ #elif defined(CONFIG_ARCH_PNX010X)
+ #include <asm/irq.h>
+ #include <asm/arch/gpio.h>
+@@ -719,6 +723,14 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
+
+ printk( "[Cirrus EEPROM] ");
+ }
++#if defined(CONFIG_ARCH_S3C2440)
++ else
++ {
++ for (i=0; i < ETH_ALEN; i++) {
++ dev->dev_addr[i] = cs8900_mac[i];
++ }
++ }
++#endif
+
+ printk("\n");
+
+@@ -802,7 +814,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
+ } else {
+ i = lp->isa_config & INT_NO_MASK;
+ if (lp->chip_type == CS8900) {
+-#if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
++#if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X) || defined(CONFIG_ARCH_S3C2410)
+ i = cs8900_irq_map[0];
+ #else
+ /* Translate the IRQ using the IRQ mapping table. */
+@@ -1309,7 +1321,7 @@ net_open(struct net_device *dev)
+ else
+ #endif
+ {
+-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
++#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S3C2410)
+ if (((1 << dev->irq) & lp->irq_map) == 0) {
+ printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
+ dev->name, dev->irq, lp->irq_map);
+@@ -1324,7 +1336,11 @@ net_open(struct net_device *dev)
+ writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
+ #endif
+ write_irq(dev, lp->chip_type, dev->irq);
++#if !defined(CONFIG_ARCH_S3C2440)
+ ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
++#else
++ ret = request_irq(dev->irq, &net_interrupt, IRQF_DISABLED | IRQF_TRIGGER_HIGH, dev->name, dev);
++#endif
+ if (ret) {
+ if (net_debug)
+ printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);
+--
+1.5.1
+
diff --git a/packages/linux/linux-smdk2440/defconfig-smdk2440 b/packages/linux/linux-smdk2440/defconfig-smdk2440
index 5bdf67e850..8805af7413 100644
--- a/packages/linux/linux-smdk2440/defconfig-smdk2440
+++ b/packages/linux/linux-smdk2440/defconfig-smdk2440
@@ -1,11 +1,14 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Thu Jan 4 13:31:25 2007
+# Linux kernel version: 2.6.21-rc6
+# Fri Apr 6 15:53:13 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -15,6 +18,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -33,6 +37,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -41,6 +46,7 @@ CONFIG_SYSVIPC=y
# CONFIG_IKCONFIG is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
@@ -120,6 +126,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -128,55 +135,73 @@ CONFIG_ARCH_S3C2410=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_PM_SIMTEC=y
+# CONFIG_S3C2410_BOOT_WATCHDOG is not set
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+CONFIG_S3C2410_DMA_DEBUG=y
+CONFIG_MACH_SMDK=y
#
-# S3C24XX Implementations
+# S3C2400 Machines
#
-# CONFIG_MACH_AML_M5900 is not set
-CONFIG_MACH_ANUBIS=y
-CONFIG_MACH_OSIRIS=y
-CONFIG_ARCH_BAST=y
-CONFIG_BAST_PC104_IRQ=y
-CONFIG_PM_H1940=y
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+CONFIG_ARCH_SMDK2410=y
CONFIG_ARCH_H1940=y
+CONFIG_PM_H1940=y
CONFIG_MACH_N30=y
-CONFIG_MACH_SMDK=y
-CONFIG_ARCH_SMDK2410=y
-CONFIG_ARCH_S3C2440=y
-CONFIG_SMDK2440_CPU2440=y
-CONFIG_SMDK2440_CPU2442=y
-CONFIG_MACH_S3C2413=y
-CONFIG_MACH_SMDK2413=y
-CONFIG_MACH_VR1000=y
-CONFIG_MACH_RX3715=y
+CONFIG_ARCH_BAST=y
CONFIG_MACH_OTOM=y
-CONFIG_MACH_NEXCODER_2440=y
-# CONFIG_MACH_VSTMS is not set
-CONFIG_S3C2410_CLOCK=y
-CONFIG_S3C2410_PM=y
-CONFIG_CPU_S3C2410_DMA=y
-CONFIG_CPU_S3C2410=y
-CONFIG_S3C2412_PM=y
+# CONFIG_MACH_AML_M5900 is not set
+CONFIG_BAST_PC104_IRQ=y
+CONFIG_MACH_VR1000=y
+# CONFIG_MACH_QT2410 is not set
CONFIG_CPU_S3C2412=y
-CONFIG_CPU_S3C244X=y
+CONFIG_S3C2412_DMA=y
+CONFIG_S3C2412_PM=y
+
+#
+# S3C2412 Machines
+#
+CONFIG_MACH_SMDK2413=y
+CONFIG_MACH_S3C2413=y
+# CONFIG_MACH_VSTMS is not set
CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+CONFIG_MACH_ANUBIS=y
+CONFIG_MACH_OSIRIS=y
+CONFIG_MACH_RX3715=y
+CONFIG_ARCH_S3C2440=y
+CONFIG_MACH_NEXCODER_2440=y
+CONFIG_SMDK2440_CPU2440=y
CONFIG_CPU_S3C2442=y
#
-# S3C2410 Boot
+# S3C2442 Machines
#
-# CONFIG_S3C2410_BOOT_WATCHDOG is not set
-# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+CONFIG_SMDK2440_CPU2442=y
#
-# S3C2410 Setup
+# S3C2443 Machines
#
-CONFIG_S3C2410_DMA=y
-CONFIG_S3C2410_DMA_DEBUG=y
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_PM_SIMTEC=y
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+# CONFIG_MACH_SMDK2443 is not set
#
# Processor Type
@@ -203,6 +228,7 @@ CONFIG_CPU_CP15_MMU=y
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
#
# Bus support
@@ -232,6 +258,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_ALIGNMENT_TRAP=y
#
@@ -241,6 +268,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="root=/dev/nfs ip=auto rw init=/bin/bash console=ttySAC0"
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
#
# Floating point emulation
@@ -268,7 +296,7 @@ CONFIG_PM=y
CONFIG_PM_LEGACY=y
# CONFIG_PM_DEBUG is not set
# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+# CONFIG_APM_EMULATION is not set
#
# Networking
@@ -284,6 +312,7 @@ CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -368,6 +397,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -393,6 +423,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
@@ -486,6 +517,7 @@ CONFIG_PARPORT_1284=y
# Plug and Play support
#
# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -499,7 +531,6 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_ATA_OVER_ETH=m
@@ -528,7 +559,6 @@ CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_IDE_BAST=y
# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
# CONFIG_BLK_DEV_HD is not set
#
@@ -665,6 +695,7 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_GPIO is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
@@ -675,8 +706,6 @@ CONFIG_MOUSE_PS2=y
# CONFIG_INPUT_JOYSTICK is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
@@ -844,12 +873,13 @@ CONFIG_SPI_MASTER=y
#
CONFIG_SPI_BITBANG=y
# CONFIG_SPI_BUTTERFLY is not set
-CONFIG_SPI_S3C24XX_GPIO=y
# CONFIG_SPI_S3C24XX is not set
+CONFIG_SPI_S3C24XX_GPIO=y
#
# SPI Protocol Masters
#
+# CONFIG_SPI_AT25 is not set
#
# Dallas's 1-wire bus
@@ -865,6 +895,7 @@ CONFIG_HWMON_VID=m
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
@@ -906,7 +937,11 @@ CONFIG_SENSORS_LM85=m
#
# Misc devices
#
-# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
#
# LED devices
@@ -935,8 +970,26 @@ CONFIG_SENSORS_LM85=m
#
# Graphics support
#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frambuffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
#
# Console display driver support
@@ -944,7 +997,19 @@ CONFIG_FIRMWARE_EDID=y
# CONFIG_VGA_CONSOLE is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
#
# Sound
@@ -978,6 +1043,7 @@ CONFIG_SND_DEBUG_DETECT=y
# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
#
# ALSA ARM devices
@@ -989,16 +1055,12 @@ CONFIG_SND_DEBUG_DETECT=y
# CONFIG_SND_USB_AUDIO is not set
#
-# SoC audio support
+# System on Chip audio support
#
CONFIG_SND_SOC=m
#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
+# SoC Platforms
#
#
@@ -1006,7 +1068,7 @@ CONFIG_SND_SOC=m
#
#
-# SoC Audio for the Freescale i.MX
+# SoC Audio for the Intel PXA2xx
#
#
@@ -1015,26 +1077,12 @@ CONFIG_SND_SOC=m
CONFIG_SND_S3C24XX_SOC=m
CONFIG_SND_S3C24XX_SOC_I2S=m
CONFIG_SND_S3C24XX_SOC_SMDK2440=m
+# CONFIG_SND_S3C24XX_SOC_SMDK2440_WM8956 is not set
#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8711=m
-CONFIG_SND_SOC_WM8510=m
-CONFIG_SND_SOC_WM8731=m
-CONFIG_SND_SOC_WM8750=m
-CONFIG_SND_SOC_WM8753=m
-CONFIG_SND_SOC_WM8772=m
-CONFIG_SND_SOC_WM8971=m
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-CONFIG_SND_SOC_WM8974=m
-CONFIG_SND_SOC_WM8980=m
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
+# SoC Audio for the Freescale i.MX
+#
CONFIG_SND_SOC_UDA1380=m
-CONFIG_SND_SOC_AK4535=m
#
# Open Sound System
@@ -1045,6 +1093,7 @@ CONFIG_SND_SOC_AK4535=m
# HID Devices
#
CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -1059,10 +1108,8 @@ CONFIG_USB=y
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_MULTITHREAD_PROBE is not set
# CONFIG_USB_OTG is not set
#
@@ -1070,7 +1117,8 @@ CONFIG_USB_DEVICEFS=y
#
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SL811_HCD is not set
@@ -1093,7 +1141,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# USB Input Devices
#
CONFIG_USB_HID=y
-# CONFIG_USB_HID_POWERBOOK is not set
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
# CONFIG_USB_AIPTEK is not set
@@ -1108,6 +1156,7 @@ CONFIG_USB_HID=y
# CONFIG_USB_ATI_REMOTE2 is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
#
# USB Imaging devices
@@ -1145,6 +1194,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
@@ -1154,6 +1204,7 @@ CONFIG_USB_MON=y
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1368,15 +1419,16 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
@@ -1387,6 +1439,7 @@ CONFIG_DEBUG_INFO=y
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_ERRORS is not set
CONFIG_DEBUG_LL=y
@@ -1416,4 +1469,4 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-smdk2440/smdk2440-touchscreen-r3.patch b/packages/linux/linux-smdk2440/smdk2440-touchscreen-r3.patch
deleted file mode 100644
index d03fd94017..0000000000
--- a/packages/linux/linux-smdk2440/smdk2440-touchscreen-r3.patch
+++ /dev/null
@@ -1,529 +0,0 @@
-Index: linux-2.6.19/arch/arm/mach-s3c2410/devs.c
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/devs.c
-+++ linux-2.6.19/arch/arm/mach-s3c2410/devs.c
-@@ -26,6 +26,7 @@
- #include <asm/hardware.h>
- #include <asm/io.h>
- #include <asm/irq.h>
-+#include <asm/arch/ts.h>
-
- #include <asm/arch/regs-serial.h>
-
-@@ -204,6 +205,23 @@ struct platform_device s3c_device_nand =
-
- EXPORT_SYMBOL(s3c_device_nand);
-
-+/* Touchscreen */
-+struct platform_device s3c_device_ts = {
-+ .name = "s3c2410-ts",
-+ .id = -1,
-+};
-+
-+EXPORT_SYMBOL(s3c_device_ts);
-+
-+static struct s3c2410_ts_mach_info s3c2410ts_info;
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
-+{
-+ memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
-+ s3c_device_ts.dev.platform_data = &s3c2410ts_info;
-+}
-+EXPORT_SYMBOL(set_s3c2410ts_info);
-+
- /* USB Device (Gadget)*/
-
- static struct resource s3c_usbgadget_resource[] = {
-Index: linux-2.6.19/arch/arm/mach-s3c2410/devs.h
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/devs.h
-+++ linux-2.6.19/arch/arm/mach-s3c2410/devs.h
-@@ -41,6 +41,7 @@ extern struct platform_device s3c_device
- extern struct platform_device s3c_device_timer3;
-
- extern struct platform_device s3c_device_usbgadget;
-+extern struct platform_device s3c_device_ts;
-
- /* s3c2440 specific devices */
-
-Index: linux-2.6.19/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.19.orig/drivers/input/touchscreen/Kconfig
-+++ linux-2.6.19/drivers/input/touchscreen/Kconfig
-@@ -49,6 +49,24 @@ config TOUCHSCREEN_CORGI
- To compile this driver as a module, choose M here: the
- module will be called corgi_ts.
-
-+config TOUCHSCREEN_S3C2410
-+ tristate "Samsung S3C2410 touchscreen input driver"
-+ depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
-+ select SERIO
-+ help
-+ Say Y here if you have the s3c2410 touchscreen.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called s3c2410_ts.
-+
-+config TOUCHSCREEN_S3C2410_DEBUG
-+ boolean "Samsung S3C2410 touchscreen debug messages"
-+ depends on TOUCHSCREEN_S3C2410
-+ help
-+ Select this if you want debug messages
-+
- config TOUCHSCREEN_GUNZE
- tristate "Gunze AHL-51S touchscreen"
- select SERIO
-Index: linux-2.6.19/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.19.orig/drivers/input/touchscreen/Makefile
-+++ linux-2.6.19/drivers/input/touchscreen/Makefile
-@@ -15,3 +15,5 @@ obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680
- obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
- obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
-+obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
-+
-Index: linux-2.6.19/drivers/input/touchscreen/s3c2410_ts.c
-===================================================================
---- /dev/null
-+++ linux-2.6.19/drivers/input/touchscreen/s3c2410_ts.c
-@@ -0,0 +1,350 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Copyright (c) 2004 Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * iPAQ H1940 touchscreen support
-+ *
-+ * ChangeLog
-+ *
-+ * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at>
-+ * - added clock (de-)allocation code
-+ *
-+ * 2005-03-06: Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * - h1940_ -> s3c2410 (this driver is now also used on the n30
-+ * machines :P)
-+ * - Debug messages are now enabled with the config option
-+ * TOUCHSCREEN_S3C2410_DEBUG
-+ * - Changed the way the value are read
-+ * - Input subsystem should now work
-+ * - Use ioremap and readl/writel
-+ *
-+ * 2005-03-23: Arnaud Patard <arnaud.patard@rtp-net.org>
-+ * - Make use of some undocumented features of the touchscreen
-+ * controller
-+ *
-+ */
-+
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/input.h>
-+#include <linux/init.h>
-+#include <linux/serio.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/clk.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+
-+#include <asm/arch/regs-adc.h>
-+#include <asm/arch/regs-gpio.h>
-+#include <asm/arch/ts.h>
-+
-+/* For ts.dev.id.version */
-+#define S3C2410TSVERSION 0x0101
-+
-+#define WAIT4INT(x) (((x)<<8) | \
-+ S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+ S3C2410_ADCTSC_XY_PST(3))
-+
-+#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
-+ S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
-+
-+#define DEBUG_LVL KERN_DEBUG
-+
-+MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
-+MODULE_DESCRIPTION("s3c2410 touchscreen driver");
-+MODULE_LICENSE("GPL");
-+
-+/*
-+ * Definitions & global arrays.
-+ */
-+
-+
-+static char *s3c2410ts_name = "s3c2410 TouchScreen";
-+
-+/*
-+ * Per-touchscreen data.
-+ */
-+
-+struct s3c2410ts {
-+ struct input_dev *dev;
-+ long xp;
-+ long yp;
-+ int count;
-+ int shift;
-+};
-+
-+static struct s3c2410ts ts;
-+static void __iomem *base_addr;
-+
-+static inline void s3c2410_ts_connect(void)
-+{
-+ s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
-+ s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
-+}
-+
-+static void touch_timer_fire(unsigned long data)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+ int updown;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+ if (updown) {
-+ if (ts.count != 0) {
-+ ts.xp >>= ts.shift;
-+ ts.yp >>= ts.shift;
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ {
-+ struct timeval tv;
-+ do_gettimeofday(&tv);
-+ printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
-+ }
-+#endif
-+
-+ input_report_abs(ts.dev, ABS_X, ts.xp);
-+ input_report_abs(ts.dev, ABS_Y, ts.yp);
-+
-+ input_report_key(ts.dev, BTN_TOUCH, 1);
-+ input_report_abs(ts.dev, ABS_PRESSURE, 1);
-+ input_sync(ts.dev);
-+ }
-+
-+ ts.xp = 0;
-+ ts.yp = 0;
-+ ts.count = 0;
-+
-+ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+ } else {
-+ ts.count = 0;
-+
-+ input_report_key(ts.dev, BTN_TOUCH, 0);
-+ input_report_abs(ts.dev, ABS_PRESSURE, 0);
-+ input_sync(ts.dev);
-+
-+ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+ }
-+}
-+
-+static struct timer_list touch_timer =
-+ TIMER_INITIALIZER(touch_timer_fire, 0, 0);
-+
-+static irqreturn_t stylus_updown(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+ int updown;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
-+
-+ /* TODO we should never get an interrupt with updown set while
-+ * the timer is running, but maybe we ought to verify that the
-+ * timer isn't running anyways. */
-+
-+ if (updown)
-+ touch_timer_fire(0);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+
-+static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned long data0;
-+ unsigned long data1;
-+
-+ data0 = readl(base_addr+S3C2410_ADCDAT0);
-+ data1 = readl(base_addr+S3C2410_ADCDAT1);
-+
-+ ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
-+ ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
-+ ts.count++;
-+
-+ if (ts.count < (1<<ts.shift)) {
-+ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
-+ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
-+ } else {
-+ mod_timer(&touch_timer, jiffies+1);
-+ writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static struct clk *adc_clock;
-+
-+/*
-+ * The functions for inserting/removing us as a module.
-+ */
-+
-+static int __init s3c2410ts_probe(struct platform_device *pdev)
-+{
-+ struct s3c2410_ts_mach_info *info;
-+ struct input_dev *input_dev;
-+
-+ info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
-+
-+ if (!info)
-+ {
-+ printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
-+ return -EINVAL;
-+ }
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ printk(DEBUG_LVL "Entering s3c2410ts_init\n");
-+#endif
-+
-+ adc_clock = clk_get(NULL, "adc");
-+ if (!adc_clock) {
-+ printk(KERN_ERR "failed to get adc clock source\n");
-+ return -ENOENT;
-+ }
-+ clk_enable(adc_clock);
-+
-+#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
-+ printk(DEBUG_LVL "got and enabled clock\n");
-+#endif
-+
-+ base_addr=ioremap(S3C2410_PA_ADC,0x20);
-+ if (base_addr == NULL) {
-+ printk(KERN_ERR "Failed to remap register block\n");
-+ return -ENOMEM;
-+ }
-+
-+
-+ /* Configure GPIOs */
-+ s3c2410_ts_connect();
-+
-+ if ((info->presc&0xff) > 0)
-+ writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
-+ base_addr+S3C2410_ADCCON);
-+ else
-+ writel(0,base_addr+S3C2410_ADCCON);
-+
-+
-+ /* Initialise registers */
-+ if ((info->delay&0xffff) > 0)
-+ writel(info->delay & 0xffff, base_addr+S3C2410_ADCDLY);
-+
-+ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
-+
-+ /* Initialise input stuff */
-+ memset(&ts, 0, sizeof(struct s3c2410ts));
-+ input_dev = input_allocate_device();
-+
-+ if (!input_dev) {
-+ printk(KERN_ERR "Unable to allocate the input device !!\n");
-+ return -ENOMEM;
-+ }
-+
-+ ts.dev = input_dev;
-+ ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
-+ ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
-+ input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
-+ input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
-+ input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
-+
-+ ts.dev->private = &ts;
-+ ts.dev->name = s3c2410ts_name;
-+ ts.dev->id.bustype = BUS_RS232;
-+ ts.dev->id.vendor = 0xDEAD;
-+ ts.dev->id.product = 0xBEEF;
-+ ts.dev->id.version = S3C2410TSVERSION;
-+
-+ ts.shift = info->oversampling_shift;
-+
-+ /* Get irqs */
-+ if (request_irq(IRQ_ADC, stylus_action, SA_SAMPLE_RANDOM,
-+ "s3c2410_action", ts.dev)) {
-+ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
-+ iounmap(base_addr);
-+ return -EIO;
-+ }
-+ if (request_irq(IRQ_TC, stylus_updown, SA_SAMPLE_RANDOM,
-+ "s3c2410_action", ts.dev)) {
-+ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
-+ iounmap(base_addr);
-+ return -EIO;
-+ }
-+
-+ printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
-+
-+ /* All went ok, so register to the input system */
-+ input_register_device(ts.dev);
-+
-+ return 0;
-+}
-+
-+static int s3c2410ts_remove(struct platform_device *pdev)
-+{
-+ disable_irq(IRQ_ADC);
-+ disable_irq(IRQ_TC);
-+ free_irq(IRQ_TC,ts.dev);
-+ free_irq(IRQ_ADC,ts.dev);
-+
-+ if (adc_clock) {
-+ clk_disable(adc_clock);
-+ clk_put(adc_clock);
-+ adc_clock = NULL;
-+ }
-+
-+ input_unregister_device(ts.dev);
-+ iounmap(base_addr);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver s3c2410ts_driver = {
-+ .driver = {
-+ .name = "s3c2410-ts",
-+ .owner = THIS_MODULE,
-+ },
-+ .probe = s3c2410ts_probe,
-+ .remove = s3c2410ts_remove,
-+};
-+
-+
-+static int __init s3c2410ts_init(void)
-+{
-+ return platform_driver_register(&s3c2410ts_driver);
-+}
-+
-+static void __exit s3c2410ts_exit(void)
-+{
-+ platform_driver_unregister(&s3c2410ts_driver);
-+}
-+
-+module_init(s3c2410ts_init);
-+module_exit(s3c2410ts_exit);
-+
-+/*
-+ Local variables:
-+ compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
-+ c-basic-offset: 8
-+ End:
-+*/
-Index: linux-2.6.19/include/asm-arm/arch-s3c2410/regs-adc.h
-===================================================================
---- linux-2.6.19.orig/include/asm-arm/arch-s3c2410/regs-adc.h
-+++ linux-2.6.19/include/asm-arm/arch-s3c2410/regs-adc.h
-@@ -41,7 +41,7 @@
- #define S3C2410_ADCTSC_XP_SEN (1<<4)
- #define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3)
- #define S3C2410_ADCTSC_AUTO_PST (1<<2)
--#define S3C2410_ADCTSC_XY_PST (0x3<<0)
-+#define S3C2410_ADCTSC_XY_PST(x) (((x)&0x3)<<0)
-
- /* ADCDAT0 Bits */
- #define S3C2410_ADCDAT0_UPDOWN (1<<15)
-Index: linux-2.6.19/include/asm-arm/arch-s3c2410/ts.h
-===================================================================
---- /dev/null
-+++ linux-2.6.19/include/asm-arm/arch-s3c2410/ts.h
-@@ -0,0 +1,28 @@
-+/* linux/include/asm/arch-s3c2410/ts.h
-+ *
-+ * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ *
-+ * Changelog:
-+ * 24-Mar-2005 RTP Created file
-+ * 03-Aug-2005 RTP Renamed to ts.h
-+ */
-+
-+#ifndef __ASM_ARM_TS_H
-+#define __ASM_ARM_TS_H
-+
-+struct s3c2410_ts_mach_info {
-+ int delay;
-+ int presc;
-+ int oversampling_shift;
-+};
-+
-+void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
-+
-+#endif /* __ASM_ARM_TS_H */
-+
-Index: linux-2.6.19/arch/arm/mach-s3c2410/mach-smdk2440.c
-===================================================================
---- linux-2.6.19.orig/arch/arm/mach-s3c2410/mach-smdk2440.c
-+++ linux-2.6.19/arch/arm/mach-s3c2410/mach-smdk2440.c
-@@ -35,6 +35,7 @@
- #include <asm/arch/regs-serial.h>
- #include <asm/arch/regs-gpio.h>
- #include <asm/arch/regs-lcd.h>
-+#include <asm/arch/ts.h>
-
- #include <asm/arch/idle.h>
- #include <asm/arch/fb.h>
-@@ -177,6 +178,7 @@ static struct platform_device *smdk2440_
- &s3c_device_wdt,
- &s3c_device_i2c,
- &s3c_device_iis,
-+ &s3c_device_ts,
- };
-
- static struct s3c24xx_board smdk2440_board __initdata = {
-@@ -184,6 +186,12 @@ static struct s3c24xx_board smdk2440_boa
- .devices_count = ARRAY_SIZE(smdk2440_devices)
- };
-
-+static struct s3c2410_ts_mach_info qt2410_ts_cfg = {
-+ .delay = 10000,
-+ .presc = 49,
-+ .oversampling_shift = 2,
-+};
-+
- static void __init smdk2440_map_io(void)
- {
- s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
-@@ -195,6 +203,7 @@ static void __init smdk2440_map_io(void)
- static void __init smdk2440_machine_init(void)
- {
- s3c24xx_fb_set_platdata(&smdk2440_lcd_cfg);
-+ set_s3c2410ts_info(&qt2410_ts_cfg);
-
- smdk_machine_init();
- }
diff --git a/packages/linux/linux-smdk2440_2.6.19.bb b/packages/linux/linux-smdk2440_2.6.19.bb
deleted file mode 100644
index 6b839bddf8..0000000000
--- a/packages/linux/linux-smdk2440_2.6.19.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "Linux Kernel for smdk2440 compatible machines"
-SECTION = "kernel"
-LICENSE = "GPL"
-PR = "r1"
-
-GGSRC = "http://www.xora.org.uk/oe/patches/"
-
-SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- ${GGSRC}smdk2440-cs89x0-r1.patch;patch=1 \
- file://smdk2440-touchscreen-r3.patch;patch=1 \
- http://opensource.wolfsonmicro.com/~lg/asoc/asoc-v0.12.6.patch;patch=1 \
- file://defconfig-smdk2440"
-
-S = "${WORKDIR}/linux-${PV}"
-
-inherit kernel
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = "smdk2440"
-KERNEL_IMAGETYPE = "zImage"
-
-do_configure() {
- install ${WORKDIR}/defconfig-smdk2440 ${S}/.config
- #oe_runmake s3c2410_defconfig
- oe_runmake oldconfig
-}
-
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
- rm -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
- ln -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
- tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_VERSION}-${MACHINE}.tgz -C ${D} lib
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_package after do_install
-
diff --git a/packages/linux/linux-smdk2440_2.6.20+git.bb b/packages/linux/linux-smdk2440_2.6.20+git.bb
new file mode 100644
index 0000000000..ea9cbfb91a
--- /dev/null
+++ b/packages/linux/linux-smdk2440_2.6.20+git.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "Linux Kernel for smdk2440 compatible machines"
+SECTION = "kernel"
+LICENSE = "GPL"
+PR = "r1"
+
+GGSRC = "http://www.xora.org.uk/oe/patches/"
+
+SRC_URI = "git://opensource.wolfsonmicro.com/linux-2.6-asoc-ggdev;protocol=git;tag=asoc-merge-0002 \
+ file://0001-Enable-cs8900A-network-device-for-smdk2440-board.patch;patch=1 \
+ file://defconfig-smdk2440"
+
+S = "${WORKDIR}/git"
+
+inherit kernel
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "smdk2440"
+KERNEL_IMAGETYPE = "zImage"
+
+do_configure() {
+ install ${WORKDIR}/defconfig-smdk2440 ${S}/.config
+ #oe_runmake s3c2410_defconfig
+ oe_runmake oldconfig
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
+ rm -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ ln -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${MACHINE}.tgz -C ${D} lib
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_package after do_install
+
+KERNEL_RELEASE = "2.6.21"
diff --git a/packages/linux/linux-smdk2443/.mtn2git_empty b/packages/linux/linux-smdk2443/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-smdk2443/.mtn2git_empty
diff --git a/packages/linux/linux-smdk2443/0020-Add-ASoC-S3C24xx-platform-support.patch b/packages/linux/linux-smdk2443/0020-Add-ASoC-S3C24xx-platform-support.patch
new file mode 100644
index 0000000000..3c79c17422
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0020-Add-ASoC-S3C24xx-platform-support.patch
@@ -0,0 +1,1077 @@
+From a958d8bfdf4fd043471012560a7e9a089d81390e Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam@localhost.localdomain>
+Date: Sun, 4 Mar 2007 16:56:28 +0000
+Subject: [PATCH] Add ASoC S3C24xx platform support.
+
+Signed-off-by: Ben Dooks <ben@simtec.co.uk>
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
+---
+ sound/soc/Kconfig | 1 +
+ sound/soc/Makefile | 2 +-
+ sound/soc/s3c24xx/Kconfig | 16 ++
+ sound/soc/s3c24xx/Makefile | 7 +
+ sound/soc/s3c24xx/s3c24xx-i2s.c | 439 +++++++++++++++++++++++++++++++++++++
+ sound/soc/s3c24xx/s3c24xx-i2s.h | 35 +++
+ sound/soc/s3c24xx/s3c24xx-pcm.c | 462 +++++++++++++++++++++++++++++++++++++++
+ sound/soc/s3c24xx/s3c24xx-pcm.h | 32 +++
+ 8 files changed, 993 insertions(+), 1 deletions(-)
+ create mode 100644 sound/soc/s3c24xx/Kconfig
+ create mode 100644 sound/soc/s3c24xx/Makefile
+ create mode 100644 sound/soc/s3c24xx/s3c24xx-i2s.c
+ create mode 100644 sound/soc/s3c24xx/s3c24xx-i2s.h
+ create mode 100644 sound/soc/s3c24xx/s3c24xx-pcm.c
+ create mode 100644 sound/soc/s3c24xx/s3c24xx-pcm.h
+
+diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
+index ec821a5..74a5f5f 100644
+--- a/sound/soc/Kconfig
++++ b/sound/soc/Kconfig
+@@ -24,6 +24,7 @@ menu "SoC Platforms"
+ depends on SND_SOC
+ source "sound/soc/at91/Kconfig"
+ source "sound/soc/pxa/Kconfig"
++source "sound/soc/s3c24xx/Kconfig"
+ endmenu
+
+ # Supported codecs
+diff --git a/sound/soc/Makefile b/sound/soc/Makefile
+index 98e6f49..0ae2e49 100644
+--- a/sound/soc/Makefile
++++ b/sound/soc/Makefile
+@@ -1,4 +1,4 @@
+ snd-soc-core-objs := soc-core.o soc-dapm.o
+
+ obj-$(CONFIG_SND_SOC) += snd-soc-core.o
+-obj-$(CONFIG_SND_SOC) += codecs/ at91/ pxa/
++obj-$(CONFIG_SND_SOC) += codecs/ at91/ pxa/ s3c24xx/
+diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
+new file mode 100644
+index 0000000..433da9f
+--- /dev/null
++++ b/sound/soc/s3c24xx/Kconfig
+@@ -0,0 +1,16 @@
++menu "SoC Audio for the Samsung S3C24XX"
++
++config SND_S3C24XX_SOC
++ tristate "SoC Audio for the Samsung S3C24XX chips"
++ depends on ARCH_S3C2410 && SND
++ select SND_PCM
++ help
++ Say Y or M if you want to add support for codecs attached to
++ the S3C24XX AC97, I2S or SSP interface. You will also need
++ to select the audio interfaces to support below.
++
++config SND_S3C24XX_SOC_I2S
++ tristate
++
++endmenu
++
+diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
+new file mode 100644
+index 0000000..56200d7
+--- /dev/null
++++ b/sound/soc/s3c24xx/Makefile
+@@ -0,0 +1,7 @@
++# S3c24XX Platform Support
++snd-soc-s3c24xx-objs := s3c24xx-pcm.o
++snd-soc-s3c24xx-i2s-objs := s3c24xx-i2s.o
++
++obj-$(CONFIG_SND_S3C24XX_SOC) += snd-soc-s3c24xx.o
++obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
++
+diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.c b/sound/soc/s3c24xx/s3c24xx-i2s.c
+new file mode 100644
+index 0000000..df655a5
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c24xx-i2s.c
+@@ -0,0 +1,439 @@
++/*
++ * s3c24xx-i2s.c -- ALSA Soc Audio Layer
++ *
++ * (c) 2006 Wolfson Microelectronics PLC.
++ * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * (c) 2004-2005 Simtec Electronics
++ * http://armlinux.simtec.co.uk/
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ *
++ * Revision history
++ * 11th Dec 2006 Merged with Simtec driver
++ * 10th Nov 2006 Initial version.
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/delay.h>
++#include <linux/clk.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/initval.h>
++#include <sound/soc.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/audio.h>
++#include <asm/dma.h>
++#include <asm/arch/dma.h>
++
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-i2s.h"
++
++#define S3C24XX_I2S_DEBUG 0
++#if S3C24XX_I2S_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++static struct s3c2410_dma_client s3c24xx_dma_client_out = {
++ .name = "I2S PCM Stereo out"
++};
++
++static struct s3c2410_dma_client s3c24xx_dma_client_in = {
++ .name = "I2S PCM Stereo in"
++};
++
++static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_out = {
++ .client = &s3c24xx_dma_client_out,
++ .channel = DMACH_I2S_OUT,
++ .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO
++};
++
++static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_in = {
++ .client = &s3c24xx_dma_client_in,
++ .channel = DMACH_I2S_IN,
++ .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO
++};
++
++struct s3c24xx_i2s_info {
++ void __iomem *regs;
++ struct clk *iis_clk;
++};
++static struct s3c24xx_i2s_info s3c24xx_i2s;
++
++static void s3c24xx_snd_txctrl(int on)
++{
++ u32 iisfcon;
++ u32 iiscon;
++ u32 iismod;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ iisfcon = readl(s3c24xx_i2s.regs + S3C2410_IISFCON);
++ iiscon = readl(s3c24xx_i2s.regs + S3C2410_IISCON);
++ iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++
++ DBG("r: IISCON: %lx IISMOD: %lx IISFCON: %lx\n", iiscon, iismod, iisfcon);
++
++ if (on) {
++ iisfcon |= S3C2410_IISFCON_TXDMA | S3C2410_IISFCON_TXENABLE;
++ iiscon |= S3C2410_IISCON_TXDMAEN | S3C2410_IISCON_IISEN;
++ iiscon &= ~S3C2410_IISCON_TXIDLE;
++ iismod |= S3C2410_IISMOD_TXMODE;
++
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ writel(iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON);
++ writel(iiscon, s3c24xx_i2s.regs + S3C2410_IISCON);
++ } else {
++ /* note, we have to disable the FIFOs otherwise bad things
++ * seem to happen when the DMA stops. According to the
++ * Samsung supplied kernel, this should allow the DMA
++ * engine and FIFOs to reset. If this isn't allowed, the
++ * DMA engine will simply freeze randomly.
++ */
++
++ iisfcon &= ~S3C2410_IISFCON_TXENABLE;
++ iisfcon &= ~S3C2410_IISFCON_TXDMA;
++ iiscon |= S3C2410_IISCON_TXIDLE;
++ iiscon &= ~S3C2410_IISCON_TXDMAEN;
++ iismod &= ~S3C2410_IISMOD_TXMODE;
++
++ writel(iiscon, s3c24xx_i2s.regs + S3C2410_IISCON);
++ writel(iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON);
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ }
++
++ DBG("w: IISCON: %lx IISMOD: %lx IISFCON: %lx\n", iiscon, iismod, iisfcon);
++}
++
++static void s3c24xx_snd_rxctrl(int on)
++{
++ u32 iisfcon;
++ u32 iiscon;
++ u32 iismod;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ iisfcon = readl(s3c24xx_i2s.regs + S3C2410_IISFCON);
++ iiscon = readl(s3c24xx_i2s.regs + S3C2410_IISCON);
++ iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++
++ DBG("r: IISCON: %lx IISMOD: %lx IISFCON: %lx\n", iiscon, iismod, iisfcon);
++
++ if (on) {
++ iisfcon |= S3C2410_IISFCON_RXDMA | S3C2410_IISFCON_RXENABLE;
++ iiscon |= S3C2410_IISCON_RXDMAEN | S3C2410_IISCON_IISEN;
++ iiscon &= ~S3C2410_IISCON_RXIDLE;
++ iismod |= S3C2410_IISMOD_RXMODE;
++
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ writel(iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON);
++ writel(iiscon, s3c24xx_i2s.regs + S3C2410_IISCON);
++ } else {
++ /* note, we have to disable the FIFOs otherwise bad things
++ * seem to happen when the DMA stops. According to the
++ * Samsung supplied kernel, this should allow the DMA
++ * engine and FIFOs to reset. If this isn't allowed, the
++ * DMA engine will simply freeze randomly.
++ */
++
++ iisfcon &= ~S3C2410_IISFCON_RXENABLE;
++ iisfcon &= ~S3C2410_IISFCON_RXDMA;
++ iiscon |= S3C2410_IISCON_RXIDLE;
++ iiscon &= ~S3C2410_IISCON_RXDMAEN;
++ iismod &= ~S3C2410_IISMOD_RXMODE;
++
++ writel(iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON);
++ writel(iiscon, s3c24xx_i2s.regs + S3C2410_IISCON);
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ }
++
++ DBG("w: IISCON: %lx IISMOD: %lx IISFCON: %lx\n", iiscon, iismod, iisfcon);
++}
++
++/*
++ * Wait for the LR signal to allow synchronisation to the L/R clock
++ * from the codec. May only be needed for slave mode.
++ */
++static int s3c24xx_snd_lrsync(void)
++{
++ u32 iiscon;
++ unsigned long timeout = jiffies + msecs_to_jiffies(5);
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ while (1) {
++ iiscon = readl(s3c24xx_i2s.regs + S3C2410_IISCON);
++ if (iiscon & S3C2410_IISCON_LRINDEX)
++ break;
++
++ if (timeout < jiffies)
++ return -ETIMEDOUT;
++ }
++
++ return 0;
++}
++
++/*
++ * Check whether CPU is the master or slave
++ */
++static inline int s3c24xx_snd_is_clkmaster(void)
++{
++ DBG("Entered %s\n", __FUNCTION__);
++
++ return (readl(s3c24xx_i2s.regs + S3C2410_IISMOD) & S3C2410_IISMOD_SLAVE) ? 0:1;
++}
++
++/*
++ * Set S3C24xx I2S DAI format
++ */
++static int s3c24xx_i2s_set_fmt(struct snd_soc_cpu_dai *cpu_dai,
++ unsigned int fmt)
++{
++ u32 iismod;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++ DBG("hw_params r: IISMOD: %lx \n", iismod);
++
++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++ case SND_SOC_DAIFMT_CBM_CFM:
++ iismod |= S3C2410_IISMOD_SLAVE;
++ break;
++ case SND_SOC_DAIFMT_CBS_CFS:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++ case SND_SOC_DAIFMT_LEFT_J:
++ iismod |= S3C2410_IISMOD_MSB;
++ break;
++ case SND_SOC_DAIFMT_I2S:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ DBG("hw_params w: IISMOD: %lx \n", iismod);
++ return 0;
++}
++
++static int s3c24xx_i2s_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ u32 iismod;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ rtd->dai->cpu_dai->dma_data = &s3c24xx_i2s_pcm_stereo_out;
++ else
++ rtd->dai->cpu_dai->dma_data = &s3c24xx_i2s_pcm_stereo_in;
++
++ /* Working copies of register */
++ iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++ DBG("hw_params r: IISMOD: %lx\n", iismod);
++
++ switch (params_format(params)) {
++ case SNDRV_PCM_FORMAT_S8:
++ break;
++ case SNDRV_PCM_FORMAT_S16_LE:
++ iismod |= S3C2410_IISMOD_16BIT;
++ break;
++ }
++
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ DBG("hw_params w: IISMOD: %lx\n", iismod);
++ return 0;
++}
++
++static int s3c24xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ int ret = 0;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ case SNDRV_PCM_TRIGGER_RESUME:
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ if (!s3c24xx_snd_is_clkmaster()) {
++ ret = s3c24xx_snd_lrsync();
++ if (ret)
++ goto exit_err;
++ }
++
++ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
++ s3c24xx_snd_rxctrl(1);
++ else
++ s3c24xx_snd_txctrl(1);
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
++ s3c24xx_snd_rxctrl(0);
++ else
++ s3c24xx_snd_txctrl(0);
++ break;
++ default:
++ ret = -EINVAL;
++ break;
++ }
++
++exit_err:
++ return ret;
++}
++
++/*
++ * Set S3C24xx Clock source
++ */
++static int s3c24xx_i2s_set_sysclk(struct snd_soc_cpu_dai *cpu_dai,
++ int clk_id, unsigned int freq, int dir)
++{
++ u32 iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ iismod &= ~S3C2440_IISMOD_MPLL;
++
++ switch (clk_id) {
++ case S3C24XX_CLKSRC_PCLK:
++ break;
++ case S3C24XX_CLKSRC_MPLL:
++ iismod |= S3C2440_IISMOD_MPLL;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ writel(iismod, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ return 0;
++}
++
++/*
++ * Set S3C24xx Clock dividers
++ */
++static int s3c24xx_i2s_set_clkdiv(struct snd_soc_cpu_dai *cpu_dai,
++ int div_id, int div)
++{
++ u32 reg;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ switch (div_id) {
++ case S3C24XX_DIV_MCLK:
++ reg = readl(s3c24xx_i2s.regs + S3C2410_IISMOD) & ~S3C2410_IISMOD_FS_MASK;
++ writel(reg | div, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ break;
++ case S3C24XX_DIV_BCLK:
++ reg = readl(s3c24xx_i2s.regs + S3C2410_IISMOD) & ~(S3C2410_IISMOD_384FS);
++ writel(reg | div, s3c24xx_i2s.regs + S3C2410_IISMOD);
++ break;
++ case S3C24XX_DIV_PRESCALER:
++ writel(div, s3c24xx_i2s.regs + S3C2410_IISPSR);
++ reg = readl(s3c24xx_i2s.regs + S3C2410_IISCON);
++ writel(reg | S3C2410_IISCON_PSCEN, s3c24xx_i2s.regs + S3C2410_IISCON);
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++/*
++ * To avoid duplicating clock code, allow machine driver to
++ * get the clockrate from here.
++ */
++u32 s3c24xx_i2s_get_clockrate(void)
++{
++ return clk_get_rate(s3c24xx_i2s.iis_clk);
++}
++EXPORT_SYMBOL_GPL(s3c24xx_i2s_get_clockrate);
++
++static int s3c24xx_i2s_probe(struct platform_device *pdev)
++{
++ DBG("Entered %s\n", __FUNCTION__);
++
++ s3c24xx_i2s.regs = ioremap(S3C2410_PA_IIS, 0x100);
++ if (s3c24xx_i2s.regs == NULL)
++ return -ENXIO;
++
++ s3c24xx_i2s.iis_clk=clk_get(&pdev->dev, "iis");
++ if (s3c24xx_i2s.iis_clk == NULL) {
++ DBG("failed to get iis_clock\n");
++ return -ENODEV;
++ }
++ clk_enable(s3c24xx_i2s.iis_clk);
++
++ /* Configure the I2S pins in correct mode */
++ s3c2410_gpio_cfgpin(S3C2410_GPE0, S3C2410_GPE0_I2SLRCK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE1, S3C2410_GPE1_I2SSCLK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE2, S3C2410_GPE2_CDCLK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE3, S3C2410_GPE3_I2SSDI);
++ s3c2410_gpio_cfgpin(S3C2410_GPE4, S3C2410_GPE4_I2SSDO);
++
++ writel(S3C2410_IISCON_IISEN, s3c24xx_i2s.regs + S3C2410_IISCON);
++
++ s3c24xx_snd_txctrl(0);
++ s3c24xx_snd_rxctrl(0);
++
++ return 0;
++}
++
++#define S3C24XX_I2S_RATES \
++ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
++ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
++ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
++
++struct snd_soc_cpu_dai s3c24xx_i2s_dai = {
++ .name = "s3c24xx-i2s",
++ .id = 0,
++ .type = SND_SOC_DAI_I2S,
++ .probe = s3c24xx_i2s_probe,
++ .playback = {
++ .channels_min = 2,
++ .channels_max = 2,
++ .rates = S3C24XX_I2S_RATES,
++ .formats = SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE,},
++ .capture = {
++ .channels_min = 2,
++ .channels_max = 2,
++ .rates = S3C24XX_I2S_RATES,
++ .formats = SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE,},
++ .ops = {
++ .trigger = s3c24xx_i2s_trigger,
++ .hw_params = s3c24xx_i2s_hw_params,},
++ .dai_ops = {
++ .set_fmt = s3c24xx_i2s_set_fmt,
++ .set_clkdiv = s3c24xx_i2s_set_clkdiv,
++ .set_sysclk = s3c24xx_i2s_set_sysclk,
++ },
++};
++EXPORT_SYMBOL_GPL(s3c24xx_i2s_dai);
++
++/* Module information */
++MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
++MODULE_DESCRIPTION("s3c24xx I2S SoC Interface");
++MODULE_LICENSE("GPL");
+diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.h b/sound/soc/s3c24xx/s3c24xx-i2s.h
+new file mode 100644
+index 0000000..f9ca04e
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c24xx-i2s.h
+@@ -0,0 +1,35 @@
++/*
++ * s3c24xx-i2s.c -- ALSA Soc Audio Layer
++ *
++ * Copyright 2005 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory
++ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 10th Nov 2006 Initial version.
++ */
++
++#ifndef S3C24XXI2S_H_
++#define S3C24XXI2S_H_
++
++/* clock sources */
++#define S3C24XX_CLKSRC_PCLK 0
++#define S3C24XX_CLKSRC_MPLL 1
++
++/* Clock dividers */
++#define S3C24XX_DIV_MCLK 0
++#define S3C24XX_DIV_BCLK 1
++#define S3C24XX_DIV_PRESCALER 2
++
++/* prescaler */
++#define S3C24XX_PRESCALE(a,b) \
++ (((a - 1) << S3C2410_IISPSR_INTSHIFT) | ((b - 1) << S3C2410_IISPSR_EXTSHFIT))
++
++u32 s3c24xx_i2s_get_clockrate(void);
++
++#endif /*S3C24XXI2S_H_*/
+diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c
+new file mode 100644
+index 0000000..867f1b3
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c24xx-pcm.c
+@@ -0,0 +1,462 @@
++/*
++ * s3c24xx-pcm.c -- ALSA Soc Audio Layer
++ *
++ * (c) 2006 Wolfson Microelectronics PLC.
++ * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * (c) 2004-2005 Simtec Electronics
++ * http://armlinux.simtec.co.uk/
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 11th Dec 2006 Merged with Simtec driver
++ * 10th Nov 2006 Initial version.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/slab.h>
++#include <linux/dma-mapping.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++
++#include <asm/dma.h>
++#include <asm/io.h>
++#include <asm/hardware.h>
++#include <asm/arch/dma.h>
++#include <asm/arch/audio.h>
++
++#include "s3c24xx-pcm.h"
++
++#define S3C24XX_PCM_DEBUG 0
++#if S3C24XX_PCM_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++static const struct snd_pcm_hardware s3c24xx_pcm_hardware = {
++ .info = SNDRV_PCM_INFO_INTERLEAVED |
++ SNDRV_PCM_INFO_BLOCK_TRANSFER |
++ SNDRV_PCM_INFO_MMAP |
++ SNDRV_PCM_INFO_MMAP_VALID,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE |
++ SNDRV_PCM_FMTBIT_U16_LE |
++ SNDRV_PCM_FMTBIT_U8 |
++ SNDRV_PCM_FMTBIT_S8,
++ .channels_min = 2,
++ .channels_max = 2,
++ .buffer_bytes_max = 128*1024,
++ .period_bytes_min = PAGE_SIZE,
++ .period_bytes_max = PAGE_SIZE*2,
++ .periods_min = 2,
++ .periods_max = 128,
++ .fifo_size = 32,
++};
++
++struct s3c24xx_runtime_data {
++ spinlock_t lock;
++ int state;
++ unsigned int dma_loaded;
++ unsigned int dma_limit;
++ unsigned int dma_period;
++ dma_addr_t dma_start;
++ dma_addr_t dma_pos;
++ dma_addr_t dma_end;
++ struct s3c24xx_pcm_dma_params *params;
++};
++
++/* s3c24xx_pcm_enqueue
++ *
++ * place a dma buffer onto the queue for the dma system
++ * to handle.
++*/
++static void s3c24xx_pcm_enqueue(struct snd_pcm_substream *substream)
++{
++ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++ dma_addr_t pos = prtd->dma_pos;
++ int ret;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ while (prtd->dma_loaded < prtd->dma_limit) {
++ unsigned long len = prtd->dma_period;
++
++ DBG("dma_loaded: %d\n",prtd->dma_loaded);
++
++ if ((pos + len) > prtd->dma_end) {
++ len = prtd->dma_end - pos;
++ DBG(KERN_DEBUG "%s: corrected dma len %ld\n",
++ __FUNCTION__, len);
++ }
++
++ ret = s3c2410_dma_enqueue(prtd->params->channel, substream, pos, len);
++
++ if (ret == 0) {
++ prtd->dma_loaded++;
++ pos += prtd->dma_period;
++ if (pos >= prtd->dma_end)
++ pos = prtd->dma_start;
++ } else
++ break;
++ }
++
++ prtd->dma_pos = pos;
++}
++
++static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
++ void *dev_id, int size,
++ enum s3c2410_dma_buffresult result)
++{
++ struct snd_pcm_substream *substream = dev_id;
++ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ if (result == S3C2410_RES_ABORT || result == S3C2410_RES_ERR)
++ return;
++
++ if (substream)
++ snd_pcm_period_elapsed(substream);
++
++ spin_lock(&prtd->lock);
++ if (prtd->state & ST_RUNNING) {
++ prtd->dma_loaded--;
++ s3c24xx_pcm_enqueue(substream);
++ }
++
++ spin_unlock(&prtd->lock);
++}
++
++static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ struct s3c24xx_runtime_data *prtd = runtime->private_data;
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct s3c24xx_pcm_dma_params *dma = rtd->dai->cpu_dai->dma_data;
++ unsigned long totbytes = params_buffer_bytes(params);
++ int ret=0;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ /* return if this is a bufferless transfer e.g.
++ * codec <--> BT codec or GSM modem -- lg FIXME */
++ if (!dma)
++ return 0;
++
++ /* prepare DMA */
++ prtd->params = dma;
++
++ DBG("params %p, client %p, channel %d\n", prtd->params,
++ prtd->params->client, prtd->params->channel);
++
++ ret = s3c2410_dma_request(prtd->params->channel,
++ prtd->params->client, NULL);
++
++ if (ret) {
++ DBG(KERN_ERR "failed to get dma channel\n");
++ return ret;
++ }
++
++ /* channel needs configuring for mem=>device, increment memory addr,
++ * sync to pclk, half-word transfers to the IIS-FIFO. */
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
++ s3c2410_dma_devconfig(prtd->params->channel,
++ S3C2410_DMASRC_MEM, S3C2410_DISRCC_INC |
++ S3C2410_DISRCC_APB, prtd->params->dma_addr);
++
++ s3c2410_dma_config(prtd->params->channel,
++ 2, S3C2410_DCON_SYNC_PCLK | S3C2410_DCON_HANDSHAKE);
++ } else {
++ s3c2410_dma_config(prtd->params->channel,
++ 2, S3C2410_DCON_HANDSHAKE | S3C2410_DCON_SYNC_PCLK);
++
++ s3c2410_dma_devconfig(prtd->params->channel,
++ S3C2410_DMASRC_HW, 0x3,
++ prtd->params->dma_addr);
++ }
++
++ s3c2410_dma_set_buffdone_fn(prtd->params->channel,
++ s3c24xx_audio_buffdone);
++
++ snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
++
++ runtime->dma_bytes = totbytes;
++
++ spin_lock_irq(&prtd->lock);
++ prtd->dma_loaded = 0;
++ prtd->dma_limit = runtime->hw.periods_min;
++ prtd->dma_period = params_period_bytes(params);
++ prtd->dma_start = runtime->dma_addr;
++ prtd->dma_pos = prtd->dma_start;
++ prtd->dma_end = prtd->dma_start + totbytes;
++ spin_unlock_irq(&prtd->lock);
++
++ return 0;
++}
++
++static int s3c24xx_pcm_hw_free(struct snd_pcm_substream *substream)
++{
++ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ /* TODO - do we need to ensure DMA flushed */
++ snd_pcm_set_runtime_buffer(substream, NULL);
++
++ if (prtd->params) {
++ s3c2410_dma_free(prtd->params->channel, prtd->params->client);
++ prtd->params = NULL;
++ }
++
++ return 0;
++}
++
++static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream)
++{
++ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++ int ret = 0;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ /* return if this is a bufferless transfer e.g.
++ * codec <--> BT codec or GSM modem -- lg FIXME */
++ if (!prtd->params)
++ return 0;
++
++ /* flush the DMA channel */
++ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_FLUSH);
++ prtd->dma_loaded = 0;
++ prtd->dma_pos = prtd->dma_start;
++
++ /* enqueue dma buffers */
++ s3c24xx_pcm_enqueue(substream);
++
++ return ret;
++}
++
++static int s3c24xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++ int ret = 0;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ spin_lock(&prtd->lock);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ case SNDRV_PCM_TRIGGER_RESUME:
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ prtd->state |= ST_RUNNING;
++ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_START);
++ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STARTED);
++ break;
++
++ case SNDRV_PCM_TRIGGER_STOP:
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ prtd->state &= ~ST_RUNNING;
++ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STOP);
++ break;
++
++ default:
++ ret = -EINVAL;
++ break;
++ }
++
++ spin_unlock(&prtd->lock);
++
++ return ret;
++}
++
++static snd_pcm_uframes_t s3c24xx_pcm_pointer(struct snd_pcm_substream *substream)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ struct s3c24xx_runtime_data *prtd = runtime->private_data;
++ unsigned long res;
++ dma_addr_t src, dst;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ spin_lock(&prtd->lock);
++ s3c2410_dma_getposition(prtd->params->channel, &src, &dst);
++
++ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
++ res = dst - prtd->dma_start;
++ else
++ res = src - prtd->dma_start;
++
++ spin_unlock(&prtd->lock);
++
++ DBG("Pointer %x %x\n",src,dst);
++
++ /* we seem to be getting the odd error from the pcm library due
++ * to out-of-bounds pointers. this is maybe due to the dma engine
++ * not having loaded the new values for the channel before being
++ * callled... (todo - fix )
++ */
++
++ if (res >= snd_pcm_lib_buffer_bytes(substream)) {
++ if (res == snd_pcm_lib_buffer_bytes(substream))
++ res = 0;
++ }
++
++ return bytes_to_frames(substream->runtime, res);
++}
++
++static int s3c24xx_pcm_open(struct snd_pcm_substream *substream)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ struct s3c24xx_runtime_data *prtd;
++
++ int ret;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ snd_soc_set_runtime_hwparams(substream, &s3c24xx_pcm_hardware);
++
++ prtd = kzalloc(sizeof(struct s3c24xx_runtime_data), GFP_KERNEL);
++ if (prtd == NULL)
++ return -ENOMEM;
++
++ runtime->private_data = prtd;
++ return 0;
++}
++
++static int s3c24xx_pcm_close(struct snd_pcm_substream *substream)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++ struct s3c24xx_runtime_data *prtd = runtime->private_data;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ if (prtd)
++ kfree(prtd);
++ else
++ DBG("s3c24xx_pcm_close called with prtd == NULL\n");
++
++ return 0;
++}
++
++static int s3c24xx_pcm_mmap(struct snd_pcm_substream *substream,
++ struct vm_area_struct *vma)
++{
++ struct snd_pcm_runtime *runtime = substream->runtime;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
++ runtime->dma_area,
++ runtime->dma_addr,
++ runtime->dma_bytes);
++}
++
++static struct snd_pcm_ops s3c24xx_pcm_ops = {
++ .open = s3c24xx_pcm_open,
++ .close = s3c24xx_pcm_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = s3c24xx_pcm_hw_params,
++ .hw_free = s3c24xx_pcm_hw_free,
++ .prepare = s3c24xx_pcm_prepare,
++ .trigger = s3c24xx_pcm_trigger,
++ .pointer = s3c24xx_pcm_pointer,
++ .mmap = s3c24xx_pcm_mmap,
++};
++
++static int s3c24xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
++{
++ struct snd_pcm_substream *substream = pcm->streams[stream].substream;
++ struct snd_dma_buffer *buf = &substream->dma_buffer;
++ size_t size = s3c24xx_pcm_hardware.buffer_bytes_max;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ buf->dev.type = SNDRV_DMA_TYPE_DEV;
++ buf->dev.dev = pcm->card->dev;
++ buf->private_data = NULL;
++ buf->area = dma_alloc_writecombine(pcm->card->dev, size,
++ &buf->addr, GFP_KERNEL);
++ if (!buf->area)
++ return -ENOMEM;
++ buf->bytes = size;
++ return 0;
++}
++
++static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
++{
++ struct snd_pcm_substream *substream;
++ struct snd_dma_buffer *buf;
++ int stream;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ for (stream = 0; stream < 2; stream++) {
++ substream = pcm->streams[stream].substream;
++ if (!substream)
++ continue;
++
++ buf = &substream->dma_buffer;
++ if (!buf->area)
++ continue;
++
++ dma_free_writecombine(pcm->card->dev, buf->bytes,
++ buf->area, buf->addr);
++ buf->area = NULL;
++ }
++}
++
++static u64 s3c24xx_pcm_dmamask = DMA_32BIT_MASK;
++
++static int s3c24xx_pcm_new(struct snd_card *card, struct snd_soc_codec_dai *dai,
++ struct snd_pcm *pcm)
++{
++ int ret = 0;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ if (!card->dev->dma_mask)
++ card->dev->dma_mask = &s3c24xx_pcm_dmamask;
++ if (!card->dev->coherent_dma_mask)
++ card->dev->coherent_dma_mask = 0xffffffff;
++
++ if (dai->playback.channels_min) {
++ ret = s3c24xx_pcm_preallocate_dma_buffer(pcm,
++ SNDRV_PCM_STREAM_PLAYBACK);
++ if (ret)
++ goto out;
++ }
++
++ if (dai->capture.channels_min) {
++ ret = s3c24xx_pcm_preallocate_dma_buffer(pcm,
++ SNDRV_PCM_STREAM_CAPTURE);
++ if (ret)
++ goto out;
++ }
++ out:
++ return ret;
++}
++
++struct snd_soc_platform s3c24xx_soc_platform = {
++ .name = "s3c24xx-audio",
++ .pcm_ops = &s3c24xx_pcm_ops,
++ .pcm_new = s3c24xx_pcm_new,
++ .pcm_free = s3c24xx_pcm_free_dma_buffers,
++};
++
++EXPORT_SYMBOL_GPL(s3c24xx_soc_platform);
++
++MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
++MODULE_DESCRIPTION("Samsung S3C24XX PCM DMA module");
++MODULE_LICENSE("GPL");
+diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.h b/sound/soc/s3c24xx/s3c24xx-pcm.h
+new file mode 100644
+index 0000000..5dced4a
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c24xx-pcm.h
+@@ -0,0 +1,32 @@
++/*
++ * s3c24xx-pcm.h --
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * ALSA PCM interface for the Samsung S3C24xx CPU
++ */
++
++#ifndef _S3C24XX_PCM_H
++#define _S3C24XX_PCM_H
++
++#define ST_RUNNING (1<<0)
++#define ST_OPENED (1<<1)
++
++struct s3c24xx_pcm_dma_params {
++ struct s3c2410_dma_client *client; /* stream identifier */
++ int channel; /* Channel ID */
++ dma_addr_t dma_addr;
++};
++
++#define S3C24XX_DAI_I2S 0
++
++extern struct snd_soc_cpu_dai s3c24xx_i2s_dai;
++
++/* platform data */
++extern struct snd_soc_platform s3c24xx_soc_platform;
++extern struct snd_ac97_bus_ops s3c24xx_ac97_ops;
++
++#endif
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0021-Add-Neo1973-ASoC-support.patch b/packages/linux/linux-smdk2443/0021-Add-Neo1973-ASoC-support.patch
new file mode 100644
index 0000000000..4b518241b8
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0021-Add-Neo1973-ASoC-support.patch
@@ -0,0 +1,763 @@
+From eb7cbe67158924a0de114664ce5251fcad418b12 Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam@localhost.localdomain>
+Date: Sun, 4 Mar 2007 16:58:40 +0000
+Subject: [PATCH] Add Neo1973 ASoC support.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/Kconfig | 9 +
+ sound/soc/s3c24xx/Makefile | 4 +
+ sound/soc/s3c24xx/lm4857.h | 15 +
+ sound/soc/s3c24xx/neo1973_wm8753.c | 686 ++++++++++++++++++++++++++++++++++++
+ 4 files changed, 714 insertions(+), 0 deletions(-)
+ create mode 100644 sound/soc/s3c24xx/lm4857.h
+ create mode 100644 sound/soc/s3c24xx/neo1973_wm8753.c
+
+diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
+index 433da9f..c414886 100644
+--- a/sound/soc/s3c24xx/Kconfig
++++ b/sound/soc/s3c24xx/Kconfig
+@@ -12,5 +12,14 @@ config SND_S3C24XX_SOC
+ config SND_S3C24XX_SOC_I2S
+ tristate
+
++config SND_S3C24XX_SOC_NEO1973_WM8753
++ tristate "SoC I2S Audio support for NEO1973 - WM8753"
++ depends on SND_S3C24XX_SOC && MACH_GTA01
++ select SND_S3C24XX_SOC_I2S
++ select SND_SOC_WM8753
++ help
++ Say Y if you want to add support for SoC audio on smdk2440
++ with the WM8753.
++
+ endmenu
+
+diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
+index 56200d7..7b5c6fe 100644
+--- a/sound/soc/s3c24xx/Makefile
++++ b/sound/soc/s3c24xx/Makefile
+@@ -5,3 +5,7 @@ snd-soc-s3c24xx-i2s-objs := s3c24xx-i2s.o
+ obj-$(CONFIG_SND_S3C24XX_SOC) += snd-soc-s3c24xx.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
+
++# S3C24XX Machine Support
++snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
++
++obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
+diff --git a/sound/soc/s3c24xx/lm4857.h b/sound/soc/s3c24xx/lm4857.h
+new file mode 100644
+index 0000000..382d6c4
+--- /dev/null
++++ b/sound/soc/s3c24xx/lm4857.h
+@@ -0,0 +1,15 @@
++#ifndef LM4857_H_
++#define LM4857_H_
++
++/* The register offsets in the cache array */
++#define LM4857_MVOL 0
++#define LM4857_LVOL 1
++#define LM4857_RVOL 2
++#define LM4857_CTRL 3
++
++/* the shifts required to set these bits */
++#define LM4857_3D 5
++#define LM4857_WAKEUP 5
++#define LM4857_EPGAIN 4
++
++#endif /*LM4857_H_*/
+diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c
+new file mode 100644
+index 0000000..46a70e3
+--- /dev/null
++++ b/sound/soc/s3c24xx/neo1973_wm8753.c
+@@ -0,0 +1,686 @@
++/*
++ * neo1973_wm8753.c -- SoC audio for Neo1973
++ *
++ * Copyright 2007 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory
++ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 20th Jan 2007 Initial version.
++ * 05th Feb 2007 Rename all to Neo1973
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/i2c.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/audio.h>
++#include <asm/io.h>
++#include <asm/arch/spi-gpio.h>
++#include "../codecs/wm8753.h"
++#include "lm4857.h"
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-i2s.h"
++
++#define NEO1973_DEBUG 0
++#if NEO1973_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++/* define the scenarios */
++#define NEO_AUDIO_OFF 0
++#define NEO_GSM_CALL_AUDIO_HANDSET 1
++#define NEO_GSM_CALL_AUDIO_HEADSET 2
++#define NEO_GSM_CALL_AUDIO_BLUETOOTH 3
++#define NEO_STEREO_TO_SPEAKERS 4
++#define NEO_STEREO_TO_HEADPHONES 5
++#define NEO_CAPTURE_HANDSET 6
++#define NEO_CAPTURE_HEADSET 7
++#define NEO_CAPTURE_BLUETOOTH 8
++
++static struct snd_soc_machine neo1973;
++static struct i2c_client *i2c;
++
++static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ unsigned int pll_out = 0, bclk = 0;
++ int ret = 0;
++ unsigned long iis_clkrate;
++
++ iis_clkrate = s3c24xx_i2s_get_clockrate();
++
++ switch (params_rate(params)) {
++ case 8000:
++ case 16000:
++ pll_out = 12288000;
++ break;
++ case 48000:
++ bclk = WM8753_BCLK_DIV_4;
++ pll_out = 12288000;
++ break;
++ case 96000:
++ bclk = WM8753_BCLK_DIV_2;
++ pll_out = 12288000;
++ break;
++ case 11025:
++ bclk = WM8753_BCLK_DIV_16;
++ pll_out = 11289600;
++ break;
++ case 22050:
++ bclk = WM8753_BCLK_DIV_8;
++ pll_out = 11289600;
++ break;
++ case 44100:
++ bclk = WM8753_BCLK_DIV_4;
++ pll_out = 11289600;
++ break;
++ case 88200:
++ bclk = WM8753_BCLK_DIV_2;
++ pll_out = 11289600;
++ break;
++ }
++
++ /* set codec DAI configuration */
++ ret = codec_dai->dai_ops.set_fmt(codec_dai,
++ SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
++ if (ret < 0)
++ return ret;
++
++ /* set cpu DAI configuration */
++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai,
++ SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
++ if (ret < 0)
++ return ret;
++
++ /* set the codec system clock for DAC and ADC */
++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_MCLK, pll_out,
++ SND_SOC_CLOCK_IN);
++ if (ret < 0)
++ return ret;
++
++ /* set MCLK division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK,
++ S3C2410_IISMOD_32FS );
++ if (ret < 0)
++ return ret;
++
++ /* set codec BCLK division for sample rate */
++ ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8753_BCLKDIV, bclk);
++ if (ret < 0)
++ return ret;
++
++ /* set prescaler division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER,
++ S3C24XX_PRESCALE(4,4));
++ if (ret < 0)
++ return ret;
++
++ /* codec PLL input is PCLK/4 */
++ ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1, iis_clkrate/4,
++ pll_out);
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++static int neo1973_hifi_hw_free(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++
++ /* disable the PLL */
++ return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1, 0, 0);
++}
++
++/*
++ * Neo1973 WM8753 HiFi DAI opserations.
++ */
++static struct snd_soc_ops neo1973_hifi_ops = {
++ .hw_params = neo1973_hifi_hw_params,
++ .hw_free = neo1973_hifi_hw_free,
++};
++
++static int neo1973_voice_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ unsigned int pcmdiv = 0;
++ int ret = 0;
++ unsigned long iis_clkrate;
++
++ /* todo: gg where is sysclk coming from for voice ?? */
++ iis_clkrate = s3c24xx_i2s_get_clockrate();
++
++ if (params_rate(params) != 8000)
++ return -EINVAL;
++ if(params_channels(params) != 1)
++ return -EINVAL;
++
++ pcmdiv = WM8753_PCM_DIV_6; /* 2.048 MHz */
++
++ /* todo: gg check mode (DSP_B) against CSR datasheet */
++ /* set codec DAI configuration */
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
++ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
++ if (ret < 0)
++ return ret;
++
++ /* set the codec system clock for DAC and ADC */
++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_PCMCLK, 12288000,
++ SND_SOC_CLOCK_IN);
++ if (ret < 0)
++ return ret;
++
++ /* set codec PCM division for sample rate */
++ ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8753_PCMDIV, pcmdiv);
++ if (ret < 0)
++ return ret;
++
++ /* configue and enable PLL for 12.288MHz output */
++ ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2, iis_clkrate/4,
++ 12288000);
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++static int neo1973_voice_hw_free(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++
++ /* disable the PLL */
++ return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2, 0, 0);
++}
++
++static struct snd_soc_ops neo1973_voice_ops = {
++ .hw_params = neo1973_voice_hw_params,
++ .hw_free = neo1973_voice_hw_free,
++};
++
++static int neo1973_scenario = 0;
++
++static int neo1973_get_scenario(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ ucontrol->value.integer.value[0] = neo1973_scenario;
++ return 0;
++}
++
++static int set_scenario_endpoints(struct snd_soc_codec *codec, int scenario)
++{
++ switch(neo1973_scenario) {
++ case NEO_AUDIO_OFF:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_GSM_CALL_AUDIO_HANDSET:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 1);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 1);
++ break;
++ case NEO_GSM_CALL_AUDIO_HEADSET:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 1);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 1);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_GSM_CALL_AUDIO_BLUETOOTH:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 1);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_STEREO_TO_SPEAKERS:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_STEREO_TO_HEADPHONES:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 1);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_CAPTURE_HANDSET:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 1);
++ break;
++ case NEO_CAPTURE_HEADSET:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 1);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ case NEO_CAPTURE_BLUETOOTH:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ break;
++ default:
++ snd_soc_dapm_set_endpoint(codec, "Audio Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line Out", 0);
++ snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
++ snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
++ snd_soc_dapm_set_endpoint(codec, "Call Mic", 0);
++ }
++
++ snd_soc_dapm_sync_endpoints(codec);
++
++ return 0;
++}
++
++static int neo1973_set_scenario(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
++
++ if (neo1973_scenario == ucontrol->value.integer.value[0])
++ return 0;
++
++ neo1973_scenario = ucontrol->value.integer.value[0];
++
++ set_scenario_endpoints(codec, neo1973_scenario);
++
++ return 1;
++}
++
++static u8 lm4857_regs[4] = {0x00, 0x40, 0x80, 0xC0};
++
++static void lm4857_write_regs( void )
++{
++ if( i2c_master_send(i2c, lm4857_regs, 4) != 4)
++ printk(KERN_WARNING "lm4857: i2c write failed\n");
++}
++
++static int lm4857_get_reg(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ int reg=kcontrol->private_value & 0xFF;
++ int shift = (kcontrol->private_value >> 8) & 0x0F;
++ int mask = (kcontrol->private_value >> 16) & 0xFF;
++
++ ucontrol->value.integer.value[0] = (lm4857_regs[reg] >> shift) & mask;
++
++ return 0;
++}
++
++static int lm4857_set_reg(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ int reg = kcontrol->private_value & 0xFF;
++ int shift = (kcontrol->private_value >> 8) & 0x0F;
++ int mask = (kcontrol->private_value >> 16) & 0xFF;
++
++ if (((lm4857_regs[reg] >> shift ) & mask) ==
++ ucontrol->value.integer.value[0])
++ return 0;
++
++ lm4857_regs[reg] &= ~ (mask << shift);
++ lm4857_regs[reg] |= ucontrol->value.integer.value[0] << shift;
++
++ lm4857_write_regs();
++ return 1;
++}
++
++static int lm4857_get_mode(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ u8 value = lm4857_regs[LM4857_CTRL] & 0x0F;
++
++ if (value)
++ value -= 5;
++
++ ucontrol->value.integer.value[0] = value;
++ return 0;
++}
++
++static int lm4857_set_mode(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ u8 value = ucontrol->value.integer.value[0];
++
++ if (value)
++ value += 5;
++
++ if ((lm4857_regs[LM4857_CTRL] & 0x0F) == value)
++ return 0;
++
++ lm4857_regs[LM4857_CTRL] &= 0xF0;
++ lm4857_regs[LM4857_CTRL] |= value;
++
++ lm4857_write_regs();
++ return 1;
++}
++
++static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
++ SND_SOC_DAPM_LINE("Audio Out", NULL),
++ SND_SOC_DAPM_LINE("GSM Line Out", NULL),
++ SND_SOC_DAPM_LINE("GSM Line In", NULL),
++ SND_SOC_DAPM_MIC("Headset Mic", NULL),
++ SND_SOC_DAPM_MIC("Call Mic", NULL),
++};
++
++
++/* example machine audio_mapnections */
++static const char* audio_map[][3] = {
++
++ /* Connections to the lm4857 amp */
++ {"Audio Out", NULL, "LOUT1"},
++ {"Audio Out", NULL, "ROUT1"},
++
++ /* Connections to the GSM Module */
++ {"GSM Line Out", NULL, "MONO1"},
++ {"GSM Line Out", NULL, "MONO2"},
++ {"RXP", NULL, "GSM Line In"},
++ {"RXN", NULL, "GSM Line In"},
++
++ /* Connections to Headset */
++ {"MIC1", NULL, "Mic Bias"},
++ {"Mic Bias", NULL, "Headset Mic"},
++
++ /* Call Mic */
++ {"MIC2", NULL, "Mic Bias"},
++ {"MIC2N", NULL, "Mic Bias"},
++ {"Mic Bias", NULL, "Call Mic"},
++
++ /* Connect the ALC pins */
++ {"ACIN", NULL, "ACOP"},
++
++ {NULL, NULL, NULL},
++};
++
++static const char *lm4857_mode[] = {
++ "Off",
++ "Call Speaker",
++ "Stereo Speakers",
++ "Stereo Speakers + Headphones",
++ "Headphones"
++};
++
++static const struct soc_enum lm4857_mode_enum[] = {
++ SOC_ENUM_SINGLE_EXT(5, lm4857_mode),
++};
++
++static const char *neo_scenarios[] = {
++ "Off",
++ "GSM Handset",
++ "GSM Headset",
++ "GSM Bluetooth",
++ "Speakers",
++ "Headphones",
++ "Capture Handset",
++ "Capture Headset",
++ "Capture Bluetooth"
++};
++
++static const struct soc_enum neo_scenario_enum[] = {
++ SOC_ENUM_SINGLE_EXT(9,neo_scenarios),
++};
++
++static const struct snd_kcontrol_new wm8753_neo1973_controls[] = {
++ SOC_SINGLE_EXT("Amp Left Playback Volume", LM4857_LVOL, 0, 31, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_SINGLE_EXT("Amp Right Playback Volume", LM4857_RVOL, 0, 31, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_SINGLE_EXT("Amp Mono Playback Volume", LM4857_MVOL, 0, 31, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_ENUM_EXT("Amp Mode", lm4857_mode_enum[0],
++ lm4857_get_mode, lm4857_set_mode),
++ SOC_ENUM_EXT("Neo Mode", neo_scenario_enum[0],
++ neo1973_get_scenario, neo1973_set_scenario),
++ SOC_SINGLE_EXT("Amp Spk 3D Playback Switch", LM4857_LVOL, 5, 1, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_SINGLE_EXT("Amp HP 3d Playback Switch", LM4857_RVOL, 5, 1, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_SINGLE_EXT("Amp Fast Wakeup Playback Switch", LM4857_CTRL, 5, 1, 0,
++ lm4857_get_reg, lm4857_set_reg),
++ SOC_SINGLE_EXT("Amp Earpiece 6dB Playback Switch", LM4857_CTRL, 4, 1, 0,
++ lm4857_get_reg, lm4857_set_reg),
++};
++
++/*
++ * This is an example machine initialisation for a wm8753 connected to a
++ * neo1973 II. It is missing logic to detect hp/mic insertions and logic
++ * to re-route the audio in such an event.
++ */
++static int neo1973_wm8753_init(struct snd_soc_codec *codec)
++{
++ int i, err;
++
++ /* set up NC codec pins */
++ snd_soc_dapm_set_endpoint(codec, "LOUT2", 0);
++ snd_soc_dapm_set_endpoint(codec, "ROUT2", 0);
++ snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
++ snd_soc_dapm_set_endpoint(codec, "OUT4", 0);
++ snd_soc_dapm_set_endpoint(codec, "LINE1", 0);
++ snd_soc_dapm_set_endpoint(codec, "LINE2", 0);
++
++
++ /* set endpoints to default mode */
++ set_scenario_endpoints(codec, NEO_AUDIO_OFF);
++
++ /* Add neo1973 specific widgets */
++ for(i = 0; i < ARRAY_SIZE(wm8753_dapm_widgets); i++)
++ snd_soc_dapm_new_control(codec, &wm8753_dapm_widgets[i]);
++
++ /* add neo1973 specific controls */
++ for (i = 0; i < ARRAY_SIZE(wm8753_neo1973_controls); i++) {
++ if ((err = snd_ctl_add(codec->card,
++ snd_soc_cnew(&wm8753_neo1973_controls[i],codec, NULL))) < 0)
++ return err;
++ }
++
++ /* set up neo1973 specific audio path audio_mapnects */
++ for(i = 0; audio_map[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1],
++ audio_map[i][2]);
++ }
++
++ snd_soc_dapm_sync_endpoints(codec);
++ return 0;
++}
++
++/*
++ * BT Codec DAI
++ */
++static struct snd_soc_cpu_dai bt_dai =
++{ .name = "Bluetooth",
++ .id = 0,
++ .type = SND_SOC_DAI_PCM,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = SNDRV_PCM_RATE_8000,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = SNDRV_PCM_RATE_8000,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++};
++
++static struct snd_soc_dai_link neo1973_dai[] = {
++{ /* Hifi Playback - for similatious use with voice below */
++ .name = "WM8753",
++ .stream_name = "WM8753 HiFi",
++ .cpu_dai = &s3c24xx_i2s_dai,
++ .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
++ .init = neo1973_wm8753_init,
++ .ops = &neo1973_hifi_ops,
++},
++{ /* Voice via BT */
++ .name = "Bluetooth",
++ .stream_name = "Voice",
++ .cpu_dai = &bt_dai,
++ .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
++ .ops = &neo1973_voice_ops,
++},
++};
++
++static struct snd_soc_machine neo1973 = {
++ .name = "neo1973",
++ .dai_link = neo1973_dai,
++ .num_links = ARRAY_SIZE(neo1973_dai),
++};
++
++static struct wm8753_setup_data neo1973_wm8753_setup = {
++ .i2c_address = 0x1a,
++};
++
++static struct snd_soc_device neo1973_snd_devdata = {
++ .machine = &neo1973,
++ .platform = &s3c24xx_soc_platform,
++ .codec_dev = &soc_codec_dev_wm8753,
++ .codec_data = &neo1973_wm8753_setup,
++};
++
++static struct i2c_client client_template;
++
++static unsigned short normal_i2c[] = { 0x7C, I2C_CLIENT_END };
++
++/* Magic definition of all other variables and things */
++I2C_CLIENT_INSMOD;
++
++static int lm4857_amp_probe(struct i2c_adapter *adap, int addr, int kind)
++{
++ int ret;
++
++ client_template.adapter = adap;
++ client_template.addr = addr;
++
++ DBG("Entering %s\n", __FUNCTION__);
++
++ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
++ if (i2c == NULL){
++ return -ENOMEM;
++ }
++ memcpy(i2c, &client_template, sizeof(struct i2c_client));
++
++ ret = i2c_attach_client(i2c);
++ if (ret < 0) {
++ DBG("failed to attach codec at addr %x\n", addr);
++ goto exit_err;
++ }
++
++ lm4857_write_regs();
++
++ return ret;
++
++exit_err:
++ kfree(i2c);
++ return ret;
++}
++
++static int lm4857_i2c_detach(struct i2c_client *client)
++{
++ i2c_detach_client(client);
++ kfree(client);
++ return 0;
++}
++
++static int lm4857_i2c_attach(struct i2c_adapter *adap)
++{
++ return i2c_probe(adap, &addr_data, lm4857_amp_probe);
++}
++
++#define I2C_DRIVERID_LM4857 0xA5A5 /* liam - need a proper id */
++
++/* corgi i2c codec control layer */
++static struct i2c_driver lm4857_i2c_driver = {
++ .driver = {
++ .name = "LM4857 I2C Amp",
++ .owner = THIS_MODULE,
++ },
++ .id = I2C_DRIVERID_LM4857,
++ .attach_adapter = lm4857_i2c_attach,
++ .detach_client = lm4857_i2c_detach,
++ .command = NULL,
++};
++
++static struct i2c_client client_template = {
++ .name = "LM4857",
++ .driver = &lm4857_i2c_driver,
++};
++
++static struct platform_device *neo1973_snd_device;
++
++static int __init neo1973_init(void)
++{
++ int ret;
++
++ neo1973_snd_device = platform_device_alloc("soc-audio", -1);
++ if (!neo1973_snd_device)
++ return -ENOMEM;
++
++ platform_set_drvdata(neo1973_snd_device, &neo1973_snd_devdata);
++ neo1973_snd_devdata.dev = &neo1973_snd_device->dev;
++ ret = platform_device_add(neo1973_snd_device);
++
++ if (ret)
++ platform_device_put(neo1973_snd_device);
++
++ ret = i2c_add_driver(&lm4857_i2c_driver);
++ if (ret != 0)
++ printk(KERN_ERR "can't add i2c driver");
++
++ return ret;
++}
++
++static void __exit neo1973_exit(void)
++{
++ platform_device_unregister(neo1973_snd_device);
++}
++
++module_init(neo1973_init);
++module_exit(neo1973_exit);
++
++/* Module information */
++MODULE_AUTHOR("Graeme Gregory, graeme.gregory@wolfsonmicro.com, www.wolfsonmicro.com");
++MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973");
++MODULE_LICENSE("GPL");
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0022-Add-initial-ASoC-SMDK2440-support.patch b/packages/linux/linux-smdk2443/0022-Add-initial-ASoC-SMDK2440-support.patch
new file mode 100644
index 0000000000..01b51d925e
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0022-Add-initial-ASoC-SMDK2440-support.patch
@@ -0,0 +1,373 @@
+From a6171bfad4671fe525ae2c8cddd4f6a7f739e346 Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam@localhost.localdomain>
+Date: Sun, 4 Mar 2007 17:00:59 +0000
+Subject: [PATCH] Add initial ASoC SMDK2440 support.
+
+Signed-off-by: Ben Dooks <ben@simtec.co.uk>
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/Kconfig | 7 +
+ sound/soc/s3c24xx/Makefile | 2 +
+ sound/soc/s3c24xx/smdk2440.c | 320 ++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 329 insertions(+), 0 deletions(-)
+ create mode 100644 sound/soc/s3c24xx/smdk2440.c
+
+diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
+index c414886..99fe902 100644
+--- a/sound/soc/s3c24xx/Kconfig
++++ b/sound/soc/s3c24xx/Kconfig
+@@ -21,5 +21,12 @@ config SND_S3C24XX_SOC_NEO1973_WM8753
+ Say Y if you want to add support for SoC audio on smdk2440
+ with the WM8753.
+
++config SND_S3C24XX_SOC_SMDK2440
++ tristate "SoC I2S Audio support for SMDK2440"
++ depends on SND_S3C24XX_SOC && MACH_SMDK
++ select SND_S3C24XX_SOC_I2S
++ help
++ Say Y if you want to add support for SoC audio on SMDK2440
++
+ endmenu
+
+diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
+index 7b5c6fe..b991052 100644
+--- a/sound/soc/s3c24xx/Makefile
++++ b/sound/soc/s3c24xx/Makefile
+@@ -7,5 +7,7 @@ obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
+
+ # S3C24XX Machine Support
+ snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
++snd-soc-smdk2440-objs := smdk2440.o
+
+ obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
++obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440) += snd-soc-smdk2440.o
+diff --git a/sound/soc/s3c24xx/smdk2440.c b/sound/soc/s3c24xx/smdk2440.c
+new file mode 100644
+index 0000000..9885a5e
+--- /dev/null
++++ b/sound/soc/s3c24xx/smdk2440.c
+@@ -0,0 +1,320 @@
++/*
++ * smdk2440.c -- ALSA Soc Audio Layer
++ *
++ * (c) 2006 Wolfson Microelectronics PLC.
++ * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * (c) 2004-2005 Simtec Electronics
++ * http://armlinux.simtec.co.uk/
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This module is a modified version of the s3c24xx I2S driver supplied by
++ * Ben Dooks of Simtec and rejigged to the ASoC style at Wolfson Microelectronics
++ *
++ * Revision history
++ * 11th Dec 2006 Merged with Simtec driver
++ * 10th Nov 2006 Initial version.
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/audio.h>
++#include <asm/io.h>
++#include <asm/arch/spi-gpio.h>
++#include "../codecs/uda1380.h"
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-i2s.h"
++
++#define SMDK2440_DEBUG 0
++#if SMDK2440_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++/* audio clock in Hz */
++#define SMDK_CLOCK_SOURCE S3C24XX_CLKSRC_MPLL
++#define SMDK_CRYSTAL_CLOCK 16934400
++
++static int smdk2440_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->codec;
++
++ DBG("Entered smdk2440_startup\n");
++
++ return 0;
++}
++
++static int smdk2440_shutdown(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->codec;
++
++ DBG("Entered smdk2440_shutdown\n");
++
++ return 0;
++}
++
++static int smdk2440_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ unsigned long iis_clkrate;
++ int div, div256, div384, diff256, diff384, bclk, mclk;
++ int ret;
++ unsigned int rate=params_rate(params);
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ iis_clkrate = s3c24xx_i2s_get_clockrate();
++
++ /* Using PCLK doesnt seem to suit audio particularly well on these cpu's
++ */
++
++ div256 = iis_clkrate / (rate * 256);
++ div384 = iis_clkrate / (rate * 384);
++
++ if (((iis_clkrate / div256) - (rate * 256)) <
++ ((rate * 256) - (iis_clkrate / (div256 + 1)))) {
++ diff256 = (iis_clkrate / div256) - (rate * 256);
++ } else {
++ div256++;
++ diff256 = (iis_clkrate / div256) - (rate * 256);
++ }
++
++ if (((iis_clkrate / div384) - (rate * 384)) <
++ ((rate * 384) - (iis_clkrate / (div384 + 1)))) {
++ diff384 = (iis_clkrate / div384) - (rate * 384);
++ } else {
++ div384++;
++ diff384 = (iis_clkrate / div384) - (rate * 384);
++ }
++
++ DBG("diff256 %d, diff384 %d\n", diff256, diff384);
++
++ if (diff256<=diff384) {
++ DBG("Selected 256FS\n");
++ div = div256 - 1;
++ bclk = S3C2410_IISMOD_256FS;
++ } else {
++ DBG("Selected 384FS\n");
++ div = div384 - 1;
++ bclk = S3C2410_IISMOD_384FS;
++ }
++
++ /* set codec DAI configuration */
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
++ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
++ if (ret < 0)
++ return ret;
++
++ /* set cpu DAI configuration */
++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
++ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
++ if (ret < 0)
++ return ret;
++
++ /* set the audio system clock for DAC and ADC */
++ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai, S3C24XX_CLKSRC_PCLK,
++ rate, SND_SOC_CLOCK_OUT);
++ if (ret < 0)
++ return ret;
++
++ /* set MCLK division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK, S3C2410_IISMOD_32FS );
++ if (ret < 0)
++ return ret;
++
++ /* set BCLK division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_BCLK, bclk);
++ if (ret < 0)
++ return ret;
++
++ /* set prescaler division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER,
++ S3C24XX_PRESCALE(div,div));
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++static struct snd_soc_ops smdk2440_ops = {
++ .startup = smdk2440_startup,
++ .shutdown = smdk2440_shutdown,
++ .hw_params = smdk2440_hw_params,
++};
++
++/* smdk2440 machine dapm widgets */
++static const struct snd_soc_dapm_widget smdk2440_dapm_widgets[] = {
++SND_SOC_DAPM_HP("Headphone Jack", NULL),
++SND_SOC_DAPM_MIC("Mic Jack", NULL),
++SND_SOC_DAPM_LINE("Line Jack", NULL),
++};
++
++/* smdk2440 machine audio map (connections to the codec pins) */
++static const char* audio_map[][3] = {
++ /* headphone connected to HPOUT */
++ {"Headphone Jack", NULL, "HPOUT"},
++
++ /* mic is connected to MICIN (via right channel of headphone jack) */
++ {"MICIN", NULL, "Mic Jack"},
++ {"MICIN", NULL, "Line Jack"},
++
++ {NULL, NULL, NULL},
++};
++
++/*
++ * Logic for a UDA1341 as attached to SMDK2440
++ */
++static int smdk2440_uda1341_init(struct snd_soc_codec *codec)
++{
++ int i, err;
++
++ DBG("Staring smdk2440 init\n");
++
++ /* Add smdk2440 specific widgets */
++ for(i = 0; i < ARRAY_SIZE(smdk2440_dapm_widgets); i++) {
++ snd_soc_dapm_new_control(codec, &smdk2440_dapm_widgets[i]);
++ }
++
++ /* Set up smdk2440 specific audio path audio_mapnects */
++ for(i = 0; audio_map[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, audio_map[i][0],
++ audio_map[i][1], audio_map[i][2]);
++ }
++
++ snd_soc_dapm_sync_endpoints(codec);
++
++ DBG("Ending smdk2440 init\n");
++
++ return 0;
++}
++
++/* s3c24xx digital audio interface glue - connects codec <--> CPU */
++static struct snd_soc_dai_link s3c24xx_dai = {
++ .name = "WM8731",
++ .stream_name = "WM8731",
++ .cpu_dai = &s3c24xx_i2s_dai,
++ .codec_dai = &uda1380_dai,
++ .init = smdk2440_uda1341_init,
++ .ops = &smdk2440_ops,
++};
++
++/* smdk2440 audio machine driver */
++static struct snd_soc_machine snd_soc_machine_smdk2440 = {
++ .name = "SMDK2440",
++ .dai_link = &s3c24xx_dai,
++ .num_links = 1,
++};
++
++static struct uda1380_setup_data smdk2440_uda1380_setup = {
++ .i2c_address = 0x00,
++};
++
++/* s3c24xx audio subsystem */
++static struct snd_soc_device s3c24xx_snd_devdata = {
++ .machine = &snd_soc_machine_smdk2440,
++ .platform = &s3c24xx_soc_platform,
++ .codec_dev = &soc_codec_dev_uda1380,
++ .codec_data = &smdk2440_uda1380_setup,
++};
++
++static struct platform_device *s3c24xx_snd_device;
++
++struct smdk2440_spi_device {
++ struct device *dev;
++};
++
++static struct smdk2440_spi_device smdk2440_spi_devdata = {
++};
++
++struct s3c2410_spigpio_info smdk2440_spi_devinfo = {
++ .pin_clk = S3C2410_GPF4,
++ .pin_mosi = S3C2410_GPF5,
++ .pin_miso = S3C2410_GPF6,
++ //.board_size,
++ //.board_info,
++ .chip_select=NULL,
++};
++
++static struct platform_device *smdk2440_spi_device;
++
++static int __init smdk2440_init(void)
++{
++ int ret;
++
++ if (!machine_is_smdk2440() && !machine_is_s3c2440()) {
++ DBG("%d\n",machine_arch_type);
++ DBG("Not a SMDK2440\n");
++ return -ENODEV;
++ }
++
++ s3c24xx_snd_device = platform_device_alloc("soc-audio", -1);
++ if (!s3c24xx_snd_device) {
++ DBG("platform_dev_alloc failed\n");
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(s3c24xx_snd_device, &s3c24xx_snd_devdata);
++ s3c24xx_snd_devdata.dev = &s3c24xx_snd_device->dev;
++ ret = platform_device_add(s3c24xx_snd_device);
++
++ if (ret)
++ platform_device_put(s3c24xx_snd_device);
++
++ // Create a bitbanged SPI device
++
++ smdk2440_spi_device = platform_device_alloc("s3c24xx-spi-gpio",-1);
++ if (!smdk2440_spi_device) {
++ DBG("smdk2440_spi_device : platform_dev_alloc failed\n");
++ return -ENOMEM;
++ }
++ DBG("Return Code %d\n",ret);
++
++ platform_set_drvdata(smdk2440_spi_device, &smdk2440_spi_devdata);
++ smdk2440_spi_devdata.dev = &smdk2440_spi_device->dev;
++ smdk2440_spi_devdata.dev->platform_data = &smdk2440_spi_devinfo;
++ ret = platform_device_add(smdk2440_spi_device);
++
++ if (ret)
++ platform_device_put(smdk2440_spi_device);
++
++ return ret;
++}
++
++static void __exit smdk2440_exit(void)
++{
++ platform_device_unregister(s3c24xx_snd_device);
++}
++
++module_init(smdk2440_init);
++module_exit(smdk2440_exit);
++
++/* Module information */
++MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
++MODULE_DESCRIPTION("ALSA SoC SMDK2440");
++MODULE_LICENSE("GPL");
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0023-Add-ASoC-SMDK2440-support-for-WM8956-codec.patch b/packages/linux/linux-smdk2443/0023-Add-ASoC-SMDK2440-support-for-WM8956-codec.patch
new file mode 100644
index 0000000000..a1609ff6e6
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0023-Add-ASoC-SMDK2440-support-for-WM8956-codec.patch
@@ -0,0 +1,391 @@
+From 2799ad808892eff7367ebc3e329ab3e7d00ccdac Mon Sep 17 00:00:00 2001
+From: Liam Girdwood <liam@localhost.localdomain>
+Date: Sun, 4 Mar 2007 17:05:34 +0000
+Subject: [PATCH] Add ASoC SMDK2440 support for WM8956 codec.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/Kconfig | 9 +
+ sound/soc/s3c24xx/Makefile | 3 +
+ sound/soc/s3c24xx/smdk2440_wm8956.c | 335 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 347 insertions(+), 0 deletions(-)
+ create mode 100644 sound/soc/s3c24xx/smdk2440_wm8956.c
+
+diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
+index 99fe902..2b4bd21 100644
+--- a/sound/soc/s3c24xx/Kconfig
++++ b/sound/soc/s3c24xx/Kconfig
+@@ -28,5 +28,14 @@ config SND_S3C24XX_SOC_SMDK2440
+ help
+ Say Y if you want to add support for SoC audio on SMDK2440
+
++config SND_S3C24XX_SOC_SMDK2440_WM8956
++ tristate "SoC I2S WM8956 Audio support for SMDK2440"
++ depends on SND_S3C24XX_SOC && MACH_SMDK
++ select SND_S3C24XX_SOC_I2S
++ select SND_SOC_WM8956
++ help
++ Say Y if you want to add support for SoC audio on SMDK2440
++ with WM8956.
++
+ endmenu
+
+diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
+index b991052..2759e88 100644
+--- a/sound/soc/s3c24xx/Makefile
++++ b/sound/soc/s3c24xx/Makefile
+@@ -8,6 +8,9 @@ obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
+ # S3C24XX Machine Support
+ snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
+ snd-soc-smdk2440-objs := smdk2440.o
++snd-soc-smdk2440-wm8956-objs := smdk2440-wm8956.o
+
+ obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440) += snd-soc-smdk2440.o
++obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440_WM8956) += snd-soc-smdk2440-wm8956.o
++
+diff --git a/sound/soc/s3c24xx/smdk2440_wm8956.c b/sound/soc/s3c24xx/smdk2440_wm8956.c
+new file mode 100644
+index 0000000..89960eb
+--- /dev/null
++++ b/sound/soc/s3c24xx/smdk2440_wm8956.c
+@@ -0,0 +1,335 @@
++/*
++ * smdk2440.c -- ALSA Soc Audio Layer
++ *
++ * (c) 2006 Wolfson Microelectronics PLC.
++ * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * (c) 2004-2005 Simtec Electronics
++ * http://armlinux.simtec.co.uk/
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This module is a modified version of the s3c24xx I2S driver supplied by
++ * Ben Dooks of Simtec and rejigged to the ASoC style at Wolfson Microelectronics
++ *
++ * Revision history
++ * 11th Dec 2006 Merged with Simtec driver
++ * 10th Nov 2006 Initial version.
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/audio.h>
++#include <asm/io.h>
++#include <asm/arch/spi-gpio.h>
++#include "../codecs/wm8956.h"
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-i2s.h"
++
++#define SMDK2440_DEBUG 0
++#if SMDK2440_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++/* audio clock in Hz */
++#define SMDK_CLOCK_SOURCE S3C24XX_CLKSRC_MPLL
++#define SMDK_CRYSTAL_CLOCK 12000000
++
++static int smdk2440_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->codec;
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ return 0;
++}
++
++static int smdk2440_shutdown(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->codec;
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ return 0;
++}
++
++static int smdk2440_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ int bclk, mclk;
++ int ret;
++ int pll;
++ int div=0,sysclkdiv=0;
++ unsigned int rate = params_rate(params);
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ /* Work out the pll dividers */
++ switch(rate)
++ {
++ case 8000:
++ case 16000:
++ case 32000:
++ case 48000:
++ pll=12288000;
++ break;
++ case 96000:
++ pll=24576000;
++ break;
++ case 11025:
++ case 22050:
++ case 44100:
++ pll=11289600;
++ break;
++ case 88200:
++ pll=22579200;
++ break;
++ default:
++ pll=12288000;
++ }
++
++ /* Work out the DAV Div */
++ switch(rate)
++ {
++ case 96000:
++ case 88200:
++ case 48000:
++ case 44100:
++ div=0;
++ break;
++ case 32000:
++ div=1;
++ break;
++ case 22050;
++ div=2;
++ break;
++ case 16000:
++ div=1;
++ sysclkdiv=2;
++ break;
++ case 11025:
++ div=4;
++ break;
++ case 8000:
++ div=6;
++ break;
++ }
++
++ /* set codec DAI configuration */
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
++ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
++ if (ret < 0)
++ return ret;
++
++ ret = codec_dai->dai_ops.set_pll(codec_dai, 0, SMDK_CRYSTAL_CLOCK, pll);
++ if (ret < 0)
++ return ret;
++
++ ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8956_SYSCLKDIV, sysclkdiv);
++ if (ret < 0)
++ return ret;
++
++ ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8956_DACDIV, div);
++ if (ret < 0)
++ return ret;
++
++ /* set cpu DAI configuration */
++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
++ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
++ if (ret < 0)
++ return ret;
++
++ /* set the audio system clock for DAC and ADC */
++ /* 12Mhz crystal for this example */
++ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai, S3C24XX_CLKSRC_MPLL,
++ SMDK_CRYSTAL_CLOCK, SND_SOC_CLOCK_OUT);
++ if (ret < 0)
++ return ret;
++
++ /* set MCLK division for sample rate */
++ ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK, S3C2410_IISMOD_32FS );
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++static struct snd_soc_ops smdk2440_ops = {
++ .startup = smdk2440_startup,
++ .shutdown = smdk2440_shutdown,
++ .hw_params = smdk2440_hw_params,
++};
++
++/* smdk2440 machine dapm widgets */
++static const struct snd_soc_dapm_widget smdk2440_dapm_widgets[] = {
++SND_SOC_DAPM_HP("Headphone Jack", NULL),
++SND_SOC_DAPM_MIC("Mic Jack", NULL),
++SND_SOC_DAPM_LINE("Line Jack", NULL),
++};
++
++/* smdk2440 machine audio map (connections to the codec pins) */
++static const char* audio_map[][3] = {
++ /* headphone connected to HPOUT */
++ {"Headphone Jack", NULL, "HPOUT"},
++ {"MICIN", NULL, "Mic Jack"},
++ {"MICIN", NULL, "Line Jack"},
++
++ {NULL, NULL, NULL},
++};
++
++/*
++ * Logic for a wm8956 as attached to SMDK2440
++ */
++static int smdk2440_wm8956_init(struct snd_soc_codec *codec)
++{
++ int i, err;
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++
++ /* Add smdk2440 specific widgets */
++ for(i = 0; i < ARRAY_SIZE(smdk2440_dapm_widgets); i++) {
++ snd_soc_dapm_new_control(codec, &smdk2440_dapm_widgets[i]);
++ }
++
++ /* Set up smdk2440 specific audio path audio_mapnects */
++ for(i = 0; audio_map[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, audio_map[i][0],
++ audio_map[i][1], audio_map[i][2]);
++ }
++
++ snd_soc_dapm_sync_endpoints(codec);
++
++ return 0;
++}
++
++/* s3c24xx digital audio interface glue - connects codec <--> CPU */
++static struct snd_soc_dai_link s3c24xx_dai = {
++ .name = "WM8731",
++ .stream_name = "WM8731",
++ .cpu_dai = &s3c24xx_i2s_dai,
++ .codec_dai = &wm8956_dai,
++ .init = smdk2440_wm8956_init,
++ .ops = &smdk2440_ops,
++};
++
++/* smdk2440 audio machine driver */
++static struct snd_soc_machine snd_soc_machine_smdk2440 = {
++ .name = "SMDK2440",
++ .dai_link = &s3c24xx_dai,
++ .num_links = 1,
++};
++
++static struct wm8956_setup_data smdk2440_wm8956_setup = {
++ .i2c_address = 0x00,
++};
++
++/* s3c24xx audio subsystem */
++static struct snd_soc_device s3c24xx_snd_devdata = {
++ .machine = &snd_soc_machine_smdk2440,
++ .platform = &s3c24xx_soc_platform,
++ .codec_dev = &soc_codec_dev_wm8956,
++ .codec_data = &smdk2440_wm8956_setup,
++};
++
++static struct platform_device *s3c24xx_snd_device;
++
++struct smdk2440_spi_device {
++ struct device *dev;
++};
++
++static struct smdk2440_spi_device smdk2440_spi_devdata = {
++};
++
++struct s3c2410_spigpio_info smdk2440_spi_devinfo = {
++ .pin_clk = S3C2410_GPF4,
++ .pin_mosi = S3C2410_GPF5,
++ .pin_miso = S3C2410_GPF6,
++ //.board_size,
++ //.board_info,
++ .chip_select=NULL,
++};
++
++static struct platform_device *smdk2440_spi_device;
++
++static int __init smdk2440_init(void)
++{
++ int ret;
++
++ if (!machine_is_smdk2440() && !machine_is_s3c2440()) {
++ DBG("%d\n",machine_arch_type);
++ DBG("Not a SMDK2440\n");
++ return -ENODEV;
++ }
++
++ s3c24xx_snd_device = platform_device_alloc("soc-audio", -1);
++ if (!s3c24xx_snd_device) {
++ DBG("platform_dev_alloc failed\n");
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(s3c24xx_snd_device, &s3c24xx_snd_devdata);
++ s3c24xx_snd_devdata.dev = &s3c24xx_snd_device->dev;
++ ret = platform_device_add(s3c24xx_snd_device);
++
++ if (ret)
++ platform_device_put(s3c24xx_snd_device);
++
++ // Create a bitbanged SPI device
++
++ smdk2440_spi_device = platform_device_alloc("s3c24xx-spi-gpio",-1);
++ if (!smdk2440_spi_device) {
++ DBG("smdk2440_spi_device : platform_dev_alloc failed\n");
++ return -ENOMEM;
++ }
++ DBG("Return Code %d\n",ret);
++
++ platform_set_drvdata(smdk2440_spi_device, &smdk2440_spi_devdata);
++ smdk2440_spi_devdata.dev = &smdk2440_spi_device->dev;
++ smdk2440_spi_devdata.dev->platform_data = &smdk2440_spi_devinfo;
++ ret = platform_device_add(smdk2440_spi_device);
++
++ if (ret)
++ platform_device_put(smdk2440_spi_device);
++
++ return ret;
++}
++
++static void __exit smdk2440_exit(void)
++{
++ platform_device_unregister(s3c24xx_snd_device);
++}
++
++module_init(smdk2440_init);
++module_exit(smdk2440_exit);
++
++/* Module information */
++MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
++MODULE_DESCRIPTION("ALSA SoC SMDK2440");
++MODULE_LICENSE("GPL");
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0033-arch-hardware.h-is-no-longer-allowed-to-be-directly.patch b/packages/linux/linux-smdk2443/0033-arch-hardware.h-is-no-longer-allowed-to-be-directly.patch
new file mode 100644
index 0000000000..2dc2a6ac41
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0033-arch-hardware.h-is-no-longer-allowed-to-be-directly.patch
@@ -0,0 +1,41 @@
+From 3108e2dc553b3014294a6915471198c94c643657 Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 14:19:43 +0100
+Subject: [PATCH] arch/hardware.h is no longer allowed to be directly included. So changed
+to include hardware.h
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/neo1973_wm8753.c | 2 +-
+ sound/soc/s3c24xx/smdk2440.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c
+index 46a70e3..34e03cd 100644
+--- a/sound/soc/s3c24xx/neo1973_wm8753.c
++++ b/sound/soc/s3c24xx/neo1973_wm8753.c
+@@ -33,7 +33,7 @@
+ #include <asm/arch/regs-iis.h>
+ #include <asm/arch/regs-clock.h>
+ #include <asm/arch/regs-gpio.h>
+-#include <asm/arch/hardware.h>
++#include <asm/hardware.h>
+ #include <asm/arch/audio.h>
+ #include <asm/io.h>
+ #include <asm/arch/spi-gpio.h>
+diff --git a/sound/soc/s3c24xx/smdk2440.c b/sound/soc/s3c24xx/smdk2440.c
+index 9885a5e..5363fe1 100644
+--- a/sound/soc/s3c24xx/smdk2440.c
++++ b/sound/soc/s3c24xx/smdk2440.c
+@@ -37,7 +37,7 @@
+ #include <asm/arch/regs-iis.h>
+ #include <asm/arch/regs-clock.h>
+ #include <asm/arch/regs-gpio.h>
+-#include <asm/arch/hardware.h>
++#include <asm/hardware.h>
+ #include <asm/arch/audio.h>
+ #include <asm/io.h>
+ #include <asm/arch/spi-gpio.h>
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0034-Export-ac97_dai.patch b/packages/linux/linux-smdk2443/0034-Export-ac97_dai.patch
new file mode 100644
index 0000000000..d159d92ea3
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0034-Export-ac97_dai.patch
@@ -0,0 +1,39 @@
+From 5927769216ec15b725f224e3e60ed9884c192704 Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 15:18:27 +0100
+Subject: [PATCH] Export ac97_dai
+
+This is required so that machine drivers can use this codec.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/codecs/ac97.c | 1 +
+ sound/soc/codecs/ac97.h | 1 +
+ 2 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/sound/soc/codecs/ac97.c b/sound/soc/codecs/ac97.c
+index 55bc55e..0cdef97 100644
+--- a/sound/soc/codecs/ac97.c
++++ b/sound/soc/codecs/ac97.c
+@@ -60,6 +60,7 @@ static struct snd_soc_codec_dai ac97_dai = {
+ .ops = {
+ .prepare = ac97_prepare,},
+ };
++EXPORT_SYMBOL_GPL(ac97_dai);
+
+ static unsigned int ac97_read(struct snd_soc_codec *codec,
+ unsigned int reg)
+diff --git a/sound/soc/codecs/ac97.h b/sound/soc/codecs/ac97.h
+index 930ddfc..2bf6d69 100644
+--- a/sound/soc/codecs/ac97.h
++++ b/sound/soc/codecs/ac97.h
+@@ -14,5 +14,6 @@
+ #define __LINUX_SND_SOC_AC97_H
+
+ extern struct snd_soc_codec_device soc_codec_dev_ac97;
++extern struct snd_soc_codec_dai ac97_dai;
+
+ #endif
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0035-Fix-power-and-PLL.patch b/packages/linux/linux-smdk2443/0035-Fix-power-and-PLL.patch
new file mode 100644
index 0000000000..c498da69fe
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0035-Fix-power-and-PLL.patch
@@ -0,0 +1,63 @@
+From fc2b709436ef9069dac1e2b46a8acb94a7169e8d Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 15:25:43 +0100
+Subject: [PATCH] Fix power and PLL
+
+bit 0 of POWER1 has oposite meaning to the rest of the bits so write this
+to zero to enable chip.
+
+enable the fractional PLL by enabling the correct bit in register.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/codecs/wm8956.c | 4 ++--
+ sound/soc/codecs/wm8960.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/sound/soc/codecs/wm8956.c b/sound/soc/codecs/wm8956.c
+index 6e1bbc9..d88f572 100644
+--- a/sound/soc/codecs/wm8956.c
++++ b/sound/soc/codecs/wm8956.c
+@@ -314,7 +314,7 @@ static int wm8956_dapm_event(struct snd_soc_codec *codec, int event)
+ }
+ #endif
+ // tmp
+- wm8956_write(codec, WM8956_POWER1, 0xffff);
++ wm8956_write(codec, WM8956_POWER1, 0xfffe);
+ wm8956_write(codec, WM8956_POWER2, 0xffff);
+ wm8956_write(codec, WM8956_POWER3, 0xffff);
+ codec->dapm_state = event;
+@@ -388,7 +388,7 @@ static int wm8956_set_dai_pll(struct snd_soc_codec_dai *codec_dai,
+ return -EINVAL;
+
+ reg = wm8956_read_reg_cache(codec, WM8956_PLLN) & 0x1e0;
+- wm8956_write(codec, WM8956_PLLN, reg | (pll_div.pre_div << 4)
++ wm8956_write(codec, WM8956_PLLN, reg | (1<<5) | (pll_div.pre_div << 4)
+ | pll_div.n);
+ wm8956_write(codec, WM8956_PLLK1, pll_div.k >> 16 );
+ wm8956_write(codec, WM8956_PLLK2, (pll_div.k >> 8) & 0xff);
+diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
+index a754742..24cbb36 100644
+--- a/sound/soc/codecs/wm8960.c
++++ b/sound/soc/codecs/wm8960.c
+@@ -356,7 +356,7 @@ static int wm8960_dapm_event(struct snd_soc_codec *codec, int event)
+ }
+ #endif
+ // tmp
+- wm8960_write(codec, WM8960_POWER1, 0xffff);
++ wm8960_write(codec, WM8960_POWER1, 0xfffe);
+ wm8960_write(codec, WM8960_POWER2, 0xffff);
+ wm8960_write(codec, WM8960_POWER3, 0xffff);
+ codec->dapm_state = event;
+@@ -430,7 +430,7 @@ static int wm8960_set_dai_pll(struct snd_soc_codec_dai *codec_dai,
+ return -EINVAL;
+
+ reg = wm8960_read_reg_cache(codec, WM8960_PLLN) & 0x1e0;
+- wm8960_write(codec, WM8960_PLLN, reg | (pll_div.pre_div << 4)
++ wm8960_write(codec, WM8960_PLLN, reg | (1<<5) | (pll_div.pre_div << 4)
+ | pll_div.n);
+ wm8960_write(codec, WM8960_PLLK1, pll_div.k >> 16 );
+ wm8960_write(codec, WM8960_PLLK2, (pll_div.k >> 8) & 0xff);
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0036-Move-s3c24xx_i2s_dai-and-add-dma_size.patch b/packages/linux/linux-smdk2443/0036-Move-s3c24xx_i2s_dai-and-add-dma_size.patch
new file mode 100644
index 0000000000..3b013db336
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0036-Move-s3c24xx_i2s_dai-and-add-dma_size.patch
@@ -0,0 +1,48 @@
+From 129287fa3ed3c4caf14e9d9f70bec2f3a42ea00d Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 15:31:30 +0100
+Subject: [PATCH] Move s3c24xx_i2s_dai and add dma_size
+
+move s3c24xx_i2s_dai from pcm.h to i2s.h where it should be
+
+add a dma_size parameter to the dma params as I2S and AC97 use different
+writing widths to the FIFO.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/s3c24xx-i2s.h | 2 ++
+ sound/soc/s3c24xx/s3c24xx-pcm.h | 3 +--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.h b/sound/soc/s3c24xx/s3c24xx-i2s.h
+index f9ca04e..537b4ec 100644
+--- a/sound/soc/s3c24xx/s3c24xx-i2s.h
++++ b/sound/soc/s3c24xx/s3c24xx-i2s.h
+@@ -32,4 +32,6 @@
+
+ u32 s3c24xx_i2s_get_clockrate(void);
+
++extern struct snd_soc_cpu_dai s3c24xx_i2s_dai;
++
+ #endif /*S3C24XXI2S_H_*/
+diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.h b/sound/soc/s3c24xx/s3c24xx-pcm.h
+index 5dced4a..5619fdc 100644
+--- a/sound/soc/s3c24xx/s3c24xx-pcm.h
++++ b/sound/soc/s3c24xx/s3c24xx-pcm.h
+@@ -19,12 +19,11 @@ struct s3c24xx_pcm_dma_params {
+ struct s3c2410_dma_client *client; /* stream identifier */
+ int channel; /* Channel ID */
+ dma_addr_t dma_addr;
++ int dma_size; /* Size of the DMA transfer */
+ };
+
+ #define S3C24XX_DAI_I2S 0
+
+-extern struct snd_soc_cpu_dai s3c24xx_i2s_dai;
+-
+ /* platform data */
+ extern struct snd_soc_platform s3c24xx_soc_platform;
+ extern struct snd_ac97_bus_ops s3c24xx_ac97_ops;
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0037-Use-dma_size-parameter-and-fix-buffdone-oops.patch b/packages/linux/linux-smdk2443/0037-Use-dma_size-parameter-and-fix-buffdone-oops.patch
new file mode 100644
index 0000000000..720f3b4868
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0037-Use-dma_size-parameter-and-fix-buffdone-oops.patch
@@ -0,0 +1,104 @@
+From b0679d107622f7480a6629d3e92af714d9ea78b4 Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 15:34:29 +0100
+Subject: [PATCH] Use dma_size parameter and fix buffdone oops
+
+Make use of the dma_size parameter in i2s.c and pcm.c
+
+Move the access of prtd in buffdone until after we have checked for an
+abort as flush may be called when prtd is no longer valid.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/s3c24xx-i2s.c | 6 ++++--
+ sound/soc/s3c24xx/s3c24xx-pcm.c | 16 +++++++++-------
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.c b/sound/soc/s3c24xx/s3c24xx-i2s.c
+index df655a5..8ca314d 100644
+--- a/sound/soc/s3c24xx/s3c24xx-i2s.c
++++ b/sound/soc/s3c24xx/s3c24xx-i2s.c
+@@ -61,13 +61,15 @@ static struct s3c2410_dma_client s3c24xx_dma_client_in = {
+ static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_out = {
+ .client = &s3c24xx_dma_client_out,
+ .channel = DMACH_I2S_OUT,
+- .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO
++ .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO,
++ .dma_size = 2,
+ };
+
+ static struct s3c24xx_pcm_dma_params s3c24xx_i2s_pcm_stereo_in = {
+ .client = &s3c24xx_dma_client_in,
+ .channel = DMACH_I2S_IN,
+- .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO
++ .dma_addr = S3C2410_PA_IIS + S3C2410_IISFIFO,
++ .dma_size = 2,
+ };
+
+ struct s3c24xx_i2s_info {
+diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c
+index 867f1b3..dc28bc6 100644
+--- a/sound/soc/s3c24xx/s3c24xx-pcm.c
++++ b/sound/soc/s3c24xx/s3c24xx-pcm.c
+@@ -38,7 +38,7 @@
+
+ #include "s3c24xx-pcm.h"
+
+-#define S3C24XX_PCM_DEBUG 0
++#define S3C24XX_PCM_DEBUG 1
+ #if S3C24XX_PCM_DEBUG
+ #define DBG(x...) printk(KERN_DEBUG x)
+ #else
+@@ -119,13 +119,15 @@ static void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
+ enum s3c2410_dma_buffresult result)
+ {
+ struct snd_pcm_substream *substream = dev_id;
+- struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
++ struct s3c24xx_runtime_data *prtd;
+
+ DBG("Entered %s\n", __FUNCTION__);
+
+ if (result == S3C2410_RES_ABORT || result == S3C2410_RES_ERR)
+ return;
+
++ prtd = substream->runtime->private_data;
++
+ if (substream)
+ snd_pcm_period_elapsed(substream);
+
+@@ -177,10 +179,12 @@ static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream,
+ S3C2410_DISRCC_APB, prtd->params->dma_addr);
+
+ s3c2410_dma_config(prtd->params->channel,
+- 2, S3C2410_DCON_SYNC_PCLK | S3C2410_DCON_HANDSHAKE);
++ prtd->params->dma_size,
++ S3C2410_DCON_SYNC_PCLK | S3C2410_DCON_HANDSHAKE);
+ } else {
+ s3c2410_dma_config(prtd->params->channel,
+- 2, S3C2410_DCON_HANDSHAKE | S3C2410_DCON_SYNC_PCLK);
++ prtd->params->dma_size,
++ S3C2410_DCON_HANDSHAKE | S3C2410_DCON_SYNC_PCLK);
+
+ s3c2410_dma_devconfig(prtd->params->channel,
+ S3C2410_DMASRC_HW, 0x3,
+@@ -214,7 +218,7 @@ static int s3c24xx_pcm_hw_free(struct snd_pcm_substream *substream)
+
+ /* TODO - do we need to ensure DMA flushed */
+ snd_pcm_set_runtime_buffer(substream, NULL);
+-
++
+ if (prtd->params) {
+ s3c2410_dma_free(prtd->params->channel, prtd->params->client);
+ prtd->params = NULL;
+@@ -321,8 +325,6 @@ static int s3c24xx_pcm_open(struct snd_pcm_substream *substream)
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct s3c24xx_runtime_data *prtd;
+
+- int ret;
+-
+ DBG("Entered %s\n", __FUNCTION__);
+
+ snd_soc_set_runtime_hwparams(substream, &s3c24xx_pcm_hardware);
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/0038-Add-smdk2443-s3c2443-ac97-and-wm9710-support.patch b/packages/linux/linux-smdk2443/0038-Add-smdk2443-s3c2443-ac97-and-wm9710-support.patch
new file mode 100644
index 0000000000..9fa7e557f0
--- /dev/null
+++ b/packages/linux/linux-smdk2443/0038-Add-smdk2443-s3c2443-ac97-and-wm9710-support.patch
@@ -0,0 +1,724 @@
+From e3a91813a659447bd20de014902fc5b1d95272aa Mon Sep 17 00:00:00 2001
+From: Graeme Gregory <gg@a10082.wolfsonmicro.main>
+Date: Mon, 26 Mar 2007 15:47:09 +0100
+Subject: [PATCH] Add smdk2443 s3c2443-ac97 and wm9710 support
+
+This is the machine driver for smdk2443 with wm9710
+
+Also the s3c2443-ac97 driver for use with the above machine driver.
+
+Signed-off-by: Graeme Gregory <gg@opensource.wolfsonmicro.com>
+---
+ sound/soc/s3c24xx/Kconfig | 15 ++
+ sound/soc/s3c24xx/Makefile | 5 +-
+ sound/soc/s3c24xx/s3c2443-ac97.c | 438 +++++++++++++++++++++++++++++++++++
+ sound/soc/s3c24xx/s3c24xx-ac97.h | 25 ++
+ sound/soc/s3c24xx/smdk2443_wm9710.c | 162 +++++++++++++
+ 5 files changed, 644 insertions(+), 1 deletions(-)
+ create mode 100644 sound/soc/s3c24xx/s3c2443-ac97.c
+ create mode 100644 sound/soc/s3c24xx/s3c24xx-ac97.h
+ create mode 100644 sound/soc/s3c24xx/smdk2443_wm9710.c
+
+diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
+index 2b4bd21..c41ac49 100644
+--- a/sound/soc/s3c24xx/Kconfig
++++ b/sound/soc/s3c24xx/Kconfig
+@@ -12,6 +12,12 @@ config SND_S3C24XX_SOC
+ config SND_S3C24XX_SOC_I2S
+ tristate
+
++config SND_S3C2443_SOC_AC97
++ tristate
++ select AC97_BUS
++ select SND_AC97_CODEC
++ select SND_SOC_AC97_BUS
++
+ config SND_S3C24XX_SOC_NEO1973_WM8753
+ tristate "SoC I2S Audio support for NEO1973 - WM8753"
+ depends on SND_S3C24XX_SOC && MACH_GTA01
+@@ -37,5 +43,14 @@ config SND_S3C24XX_SOC_SMDK2440_WM8956
+ Say Y if you want to add support for SoC audio on SMDK2440
+ with WM8956.
+
++config SND_S3C24XX_SOC_SMDK2443_WM9710
++ tristate "SoC I2S Audio support for SMDK2443 - WM9710"
++ depends on SND_S3C24XX_SOC && MACH_SMDK2443
++ select SND_S3C2443_SOC_AC97
++ select SND_SOC_AC97_CODEC
++ help
++ Say Y if you want to add support for SoC audio on smdk2443
++ with the WM9710.
++
+ endmenu
+
+diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
+index 2759e88..3594155 100644
+--- a/sound/soc/s3c24xx/Makefile
++++ b/sound/soc/s3c24xx/Makefile
+@@ -1,16 +1,19 @@
+ # S3c24XX Platform Support
+ snd-soc-s3c24xx-objs := s3c24xx-pcm.o
+ snd-soc-s3c24xx-i2s-objs := s3c24xx-i2s.o
++snd-soc-s3c2443-ac97-objs := s3c2443-ac97.o
+
+ obj-$(CONFIG_SND_S3C24XX_SOC) += snd-soc-s3c24xx.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
++obj-$(CONFIG_SND_S3C2443_SOC_AC97) += snd-soc-s3c2443-ac97.o
+
+ # S3C24XX Machine Support
+ snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
+ snd-soc-smdk2440-objs := smdk2440.o
+ snd-soc-smdk2440-wm8956-objs := smdk2440-wm8956.o
++snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o
+
+ obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440) += snd-soc-smdk2440.o
+ obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440_WM8956) += snd-soc-smdk2440-wm8956.o
+-
++obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o
+diff --git a/sound/soc/s3c24xx/s3c2443-ac97.c b/sound/soc/s3c24xx/s3c2443-ac97.c
+new file mode 100644
+index 0000000..db5996b
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c2443-ac97.c
+@@ -0,0 +1,438 @@
++/*
++ * s3c24xx-i2s.c -- ALSA Soc Audio Layer
++ *
++ * (c) 2006 Wolfson Microelectronics PLC.
++ * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * Copyright (C) 2005, Sean Choi <sh428.choi@samsung.com>
++ * All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Revision history
++ * 21st Mar 2007 Initial Version
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/wait.h>
++#include <linux/delay.h>
++#include <linux/clk.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/ac97_codec.h>
++#include <sound/initval.h>
++#include <sound/soc.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/arch/regs-ac97.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/audio.h>
++#include <asm/dma.h>
++#include <asm/arch/dma.h>
++
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-ac97.h"
++
++#define S3C2443_I2S_DEBUG 1
++#if S3C2443_I2S_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++struct s3c24xx_ac97_info {
++ void __iomem *regs;
++ struct clk *ac97_clk;
++};
++static struct s3c24xx_ac97_info s3c24xx_ac97;
++
++static struct completion CAR_completion;
++static u32 waitingForMask;
++static DECLARE_MUTEX(CAR_mutex);
++
++static unsigned short s3c2443_ac97_read(struct snd_ac97 *ac97,
++ unsigned short reg)
++{
++ u32 ac_glbctrl;
++ u32 ac_codec_cmd;
++ u32 stat, addr, data;
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ down(&CAR_mutex);
++
++ // Initialise the completion used in ISR
++ init_completion(&CAR_completion);
++
++ waitingForMask = S3C_AC97_GLBSTAT_CODECREADY;
++ ac_codec_cmd = readl(s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++ ac_codec_cmd = S3C_AC97_CODEC_CMD_READ | AC_CMD_ADDR(reg);
++ writel(ac_codec_cmd, s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++
++ udelay(50);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl |= S3C_AC97_GLBCTRL_CODECREADYIE;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++ wait_for_completion(&CAR_completion);
++
++ stat = readl(s3c24xx_ac97.regs + S3C_AC97_STAT);
++ addr = (stat >> 16) & 0x7f;
++ data = (stat & 0xffff);
++
++ DBG("AC97 Read %x %x\n", addr, data);
++
++ if (addr != reg) {
++ printk("req addr = %02x, rep addr = %02x\n", reg, addr);
++ }
++
++ up(&CAR_mutex);
++
++ return (unsigned short)data;
++}
++
++static void s3c2443_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
++ unsigned short val)
++{
++ u32 ac_glbctrl;
++ u32 ac_codec_cmd;
++
++ DBG("Entered %s\n",__FUNCTION__);
++
++ down(&CAR_mutex);
++
++ DBG("AC97 Write %x:%x\n", reg,val);
++
++ init_completion(&CAR_completion);
++
++ waitingForMask = S3C_AC97_GLBSTAT_CODECREADY;
++ ac_codec_cmd = readl(s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++ ac_codec_cmd = AC_CMD_ADDR(reg) | AC_CMD_DATA(val);
++ writel(ac_codec_cmd, s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++
++ udelay(50);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl |= S3C_AC97_GLBCTRL_CODECREADYIE;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++ wait_for_completion(&CAR_completion);
++
++ ac_codec_cmd = readl(s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++ ac_codec_cmd |= S3C_AC97_CODEC_CMD_READ;
++ writel(ac_codec_cmd, s3c24xx_ac97.regs + S3C_AC97_CODEC_CMD);
++
++ up(&CAR_mutex);
++
++}
++
++static void s3c2443_ac97_warm_reset(struct snd_ac97 *ac97)
++{
++ u32 ac_glbctrl;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl = S3C_AC97_GLBCTRL_WARMRESET;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl = 0;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++}
++
++static void s3c2443_ac97_cold_reset(struct snd_ac97 *ac97)
++{
++ u32 ac_glbctrl;
++
++ DBG("Entered %s\n", __FUNCTION__);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl = S3C_AC97_GLBCTRL_COLDRESET;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl = 0;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl = S3C_AC97_GLBCTRL_ACLINKON;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl |= S3C_AC97_GLBCTRL_TRANSFERDATAENABLE;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl |= S3C_AC97_GLBCTRL_PCMOUTTM_DMA | S3C_AC97_GLBCTRL_PCMINTM_DMA |
++ S3C_AC97_GLBCTRL_MICINTM_DMA;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++}
++
++static irqreturn_t s3c2443_ac97_irq(int irq, void *dev_id)
++{
++ int gsr;
++ u32 ac_glbctrl;
++
++ gsr = readl(s3c24xx_ac97.regs + S3C_AC97_GLBSTAT) & waitingForMask;
++
++ if (gsr) {
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl &= ~S3C_AC97_GLBCTRL_CODECREADYIE;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ complete(&CAR_completion);
++ }
++ return IRQ_HANDLED;
++}
++
++struct snd_ac97_bus_ops soc_ac97_ops = {
++ .read = s3c2443_ac97_read,
++ .write = s3c2443_ac97_write,
++ .warm_reset = s3c2443_ac97_warm_reset,
++ .reset = s3c2443_ac97_cold_reset,
++};
++
++static struct s3c2410_dma_client s3c2443_dma_client_out = {
++ .name = "AC97 PCM Stereo out"
++};
++
++static struct s3c2410_dma_client s3c2443_dma_client_in = {
++ .name = "AC97 PCM Stereo in"
++};
++
++static struct s3c2410_dma_client s3c2443_dma_client_micin = {
++ .name = "AC97 Mic Mono in"
++};
++
++static struct s3c24xx_pcm_dma_params s3c2443_ac97_pcm_stereo_out = {
++ .client = &s3c2443_dma_client_out,
++ .channel = DMACH_PCM_OUT,
++ .dma_addr = S3C2440_PA_AC97 + S3C_AC97_PCM_DATA,
++ .dma_size = 4,
++};
++
++static struct s3c24xx_pcm_dma_params s3c2443_ac97_pcm_stereo_in = {
++ .client = &s3c2443_dma_client_in,
++ .channel = DMACH_PCM_IN,
++ .dma_addr = S3C2440_PA_AC97 + S3C_AC97_PCM_DATA,
++ .dma_size = 4,
++};
++
++static struct s3c24xx_pcm_dma_params s3c2443_ac97_mic_mono_in = {
++ .client = &s3c2443_dma_client_micin,
++ .channel = DMACH_MIC_IN,
++ .dma_addr = S3C2440_PA_AC97 + S3C_AC97_MIC_DATA,
++ .dma_size = 4,
++};
++
++#ifdef CONFIG_PM
++static int s3c2443_ac97_suspend(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++
++ return 0;
++}
++
++static int s3c2443_ac97_resume(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++ return 0;
++}
++
++#else
++#define s3c2443_ac97_suspend NULL
++#define s3c2443_ac97_resume NULL
++#endif
++
++static int s3c2443_ac97_probe(struct platform_device *pdev)
++{
++ int ret;
++ u32 ac_glbctrl;
++
++ s3c24xx_ac97.regs = ioremap(S3C2440_PA_AC97, 0x100);
++ if (s3c24xx_ac97.regs == NULL)
++ return -ENXIO;
++
++ s3c24xx_ac97.ac97_clk=clk_get(&pdev->dev, "ac97");
++ if (s3c24xx_ac97.ac97_clk == NULL) {
++ DBG("failed to get ac97_clock\n");
++ return -ENODEV;
++ }
++ clk_enable(s3c24xx_ac97.ac97_clk);
++
++ s3c2410_gpio_cfgpin(S3C2410_GPE0, S3C2443_GPE0_AC_nRESET);
++ s3c2410_gpio_cfgpin(S3C2410_GPE1, S3C2443_GPE1_AC_SYNC);
++ s3c2410_gpio_cfgpin(S3C2410_GPE2, S3C2443_GPE2_AC_BITCLK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE3, S3C2443_GPE3_AC_SDI);
++ s3c2410_gpio_cfgpin(S3C2410_GPE4, S3C2443_GPE4_AC_SDO);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl = S3C_AC97_GLBCTRL_COLDRESET;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl = 0;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ ac_glbctrl = S3C_AC97_GLBCTRL_ACLINKON;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ udelay(1000);
++
++ ac_glbctrl |= S3C_AC97_GLBCTRL_TRANSFERDATAENABLE;
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++ ret = request_irq(IRQ_S3C2443_AC97, s3c2443_ac97_irq, SA_INTERRUPT, "AC97", NULL);
++ if (ret)
++ printk("Interrupt request failed.\n");
++
++ return ret;
++}
++
++static void s3c2443_ac97_remove(struct platform_device *pdev)
++{
++
++}
++
++static int s3c2443_ac97_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ cpu_dai->dma_data = &s3c2443_ac97_pcm_stereo_out;
++ else
++ cpu_dai->dma_data = &s3c2443_ac97_pcm_stereo_in;
++
++ return 0;
++}
++
++static int s3c2443_ac97_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ u32 ac_glbctrl;
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ switch(cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ case SNDRV_PCM_TRIGGER_RESUME:
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
++ ac_glbctrl |= S3C_AC97_GLBCTRL_PCMINTM_DMA;
++ else
++ ac_glbctrl |= S3C_AC97_GLBCTRL_PCMOUTTM_DMA;
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
++ ac_glbctrl &= ~S3C_AC97_GLBCTRL_PCMINTM_MASK;
++ else
++ ac_glbctrl &= ~S3C_AC97_GLBCTRL_PCMOUTTM_MASK;
++ break;
++ }
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++ return 0;
++}
++
++static int s3c2443_ac97_hw_mic_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ return -ENODEV;
++ else
++ cpu_dai->dma_data = &s3c2443_ac97_mic_mono_in;
++
++ return 0;
++}
++
++static int s3c2443_ac97_mic_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ u32 ac_glbctrl;
++
++ ac_glbctrl = readl(s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++ switch(cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ case SNDRV_PCM_TRIGGER_RESUME:
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ ac_glbctrl |= S3C_AC97_GLBCTRL_PCMINTM_DMA;
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ ac_glbctrl &= ~S3C_AC97_GLBCTRL_PCMINTM_MASK;
++ }
++ writel(ac_glbctrl, s3c24xx_ac97.regs + S3C_AC97_GLBCTRL);
++
++ return 0;
++}
++
++#define s3c2443_AC97_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
++ SNDRV_PCM_RATE_48000)
++
++struct snd_soc_cpu_dai s3c2443_ac97_dai[] = {
++{
++ .name = "s3c2443-ac97",
++ .id = 0,
++ .type = SND_SOC_DAI_AC97,
++ .probe = s3c2443_ac97_probe,
++ .remove = s3c2443_ac97_remove,
++ .suspend = s3c2443_ac97_suspend,
++ .resume = s3c2443_ac97_resume,
++ .playback = {
++ .stream_name = "AC97 Playback",
++ .channels_min = 2,
++ .channels_max = 2,
++ .rates = s3c2443_AC97_RATES,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++ .capture = {
++ .stream_name = "AC97 Capture",
++ .channels_min = 2,
++ .channels_max = 2,
++ .rates = s3c2443_AC97_RATES,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++ .ops = {
++ .hw_params = s3c2443_ac97_hw_params,
++ .trigger = s3c2443_ac97_trigger},
++},
++{
++ .name = "pxa2xx-ac97-mic",
++ .id = 1,
++ .type = SND_SOC_DAI_AC97,
++ .capture = {
++ .stream_name = "AC97 Mic Capture",
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = s3c2443_AC97_RATES,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,},
++ .ops = {
++ .hw_params = s3c2443_ac97_hw_mic_params,
++ .trigger = s3c2443_ac97_mic_trigger,},
++},
++};
++
++EXPORT_SYMBOL_GPL(s3c2443_ac97_dai);
++EXPORT_SYMBOL_GPL(soc_ac97_ops);
++
++MODULE_AUTHOR("Graeme Gregory");
++MODULE_DESCRIPTION("AC97 driver for the Samsung s3c2443 chip");
++MODULE_LICENSE("GPL");
+diff --git a/sound/soc/s3c24xx/s3c24xx-ac97.h b/sound/soc/s3c24xx/s3c24xx-ac97.h
+new file mode 100644
+index 0000000..afddff0
+--- /dev/null
++++ b/sound/soc/s3c24xx/s3c24xx-ac97.h
+@@ -0,0 +1,25 @@
++/*
++ * s3c24xx-i2s.c -- ALSA Soc Audio Layer
++ *
++ * Copyright 2005 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory
++ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 10th Nov 2006 Initial version.
++ */
++
++#ifndef S3C24XXAC97_H_
++#define S3C24XXAC97_H_
++
++#define AC_CMD_ADDR(x) (x<<16)
++#define AC_CMD_DATA(x) (x&0xffff)
++
++extern struct snd_soc_cpu_dai s3c2443_ac97_dai[];
++
++#endif /*S3C24XXI2S_H_*/
+diff --git a/sound/soc/s3c24xx/smdk2443_wm9710.c b/sound/soc/s3c24xx/smdk2443_wm9710.c
+new file mode 100644
+index 0000000..66c13cf
+--- /dev/null
++++ b/sound/soc/s3c24xx/smdk2443_wm9710.c
+@@ -0,0 +1,162 @@
++/*
++ * smdk2443_wm9710.c -- SoC audio for smdk2443
++ *
++ * Copyright 2007 Wolfson Microelectronics PLC.
++ * Author: Graeme Gregory
++ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 8th Mar 2007 Initial version.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/device.h>
++#include <linux/i2c.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/hardware.h>
++#include <asm/arch/audio.h>
++#include <asm/io.h>
++#include <asm/arch/spi-gpio.h>
++#include "../codecs/ac97.h"
++#include "s3c24xx-pcm.h"
++#include "s3c24xx-ac97.h"
++
++#define SMDK2443_DEBUG 1
++#if SMDK2443_DEBUG
++#define DBG(x...) printk(KERN_DEBUG x)
++#else
++#define DBG(x...)
++#endif
++
++static struct snd_soc_machine smdk2443;
++
++static int smdk2443_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ return 0;
++}
++
++static int smdk2443_resume(struct platform_device *pdev)
++{
++ return 0;
++}
++
++static int smdk2443_probe(struct platform_device *pdev)
++{
++ return 0;
++}
++
++static int smdk2443_remove(struct platform_device *pdev)
++{
++ return 0;
++}
++
++static const struct snd_soc_dapm_widget smdk2443_dapm_widgets[] = {
++ SND_SOC_DAPM_MIC("Mic (Internal)", NULL),
++};
++
++/* example machine interconnections */
++static const char* intercon[][3] = {
++
++ /* mic is connected to mic1 - with bias */
++ {"MIC1", NULL, "Mic Bias"},
++ {"Mic Bias", NULL, "Mic (Internal)"},
++
++ {NULL, NULL, NULL},
++};
++
++static int smdk2443_wm9710_init(struct snd_soc_codec *codec)
++{
++ int i;
++
++ /* set up smdk2443 NC codec pins */
++ snd_soc_dapm_set_endpoint(codec, "RXP", 0);
++ snd_soc_dapm_set_endpoint(codec, "RXN", 0);
++
++ /* Add smdk2443 specific widgets */
++ for(i = 0; i < ARRAY_SIZE(smdk2443_dapm_widgets); i++) {
++ snd_soc_dapm_new_control(codec, &smdk2443_dapm_widgets[i]);
++ }
++
++ /* set up smdk2443 specific audio path interconnects */
++ for(i = 0; intercon[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, intercon[i][0], intercon[i][1], intercon[i][2]);
++ }
++
++ snd_soc_dapm_sync_endpoints(codec);
++ return 0;
++}
++
++static struct snd_soc_dai_link smdk2443_dai[] = {
++{
++ .name = "AC97",
++ .stream_name = "AC97 HiFi",
++ .cpu_dai = &s3c2443_ac97_dai[0],
++ .codec_dai = &ac97_dai,
++ .init = smdk2443_wm9710_init,
++},
++};
++
++static struct snd_soc_machine smdk2443 = {
++ .name = "SMDK2443",
++ .probe = smdk2443_probe,
++ .remove = smdk2443_remove,
++ .suspend_pre = smdk2443_suspend,
++ .resume_post = smdk2443_resume,
++ .dai_link = smdk2443_dai,
++ .num_links = ARRAY_SIZE(smdk2443_dai),
++};
++
++static struct snd_soc_device smdk2443_snd_ac97_devdata = {
++ .machine = &smdk2443,
++ .platform = &s3c24xx_soc_platform,
++ .codec_dev = &soc_codec_dev_ac97,
++};
++
++static struct platform_device *smdk2443_snd_ac97_device;
++
++static int __init smdk2443_init(void)
++{
++ int ret;
++
++ smdk2443_snd_ac97_device = platform_device_alloc("soc-audio", -1);
++ if (!smdk2443_snd_ac97_device)
++ return -ENOMEM;
++
++ platform_set_drvdata(smdk2443_snd_ac97_device, &smdk2443_snd_ac97_devdata);
++ smdk2443_snd_ac97_devdata.dev = &smdk2443_snd_ac97_device->dev;
++
++ if((ret = platform_device_add(smdk2443_snd_ac97_device)) != 0)
++ platform_device_put(smdk2443_snd_ac97_device);
++
++ return ret;
++}
++
++static void __exit smdk2443_exit(void)
++{
++ platform_device_unregister(smdk2443_snd_ac97_device);
++}
++
++module_init(smdk2443_init);
++module_exit(smdk2443_exit);
++
++/* Module information */
++MODULE_AUTHOR("Graeme Gregory, graeme.gregory@wolfsonmicro.com, www.wolfsonmicro.com");
++MODULE_DESCRIPTION("ALSA SoC WM9710 SMDK2443");
++MODULE_LICENSE("GPL");
+--
+1.5.0.3
+
diff --git a/packages/linux/linux-smdk2443/asoc-mainline.patch b/packages/linux/linux-smdk2443/asoc-mainline.patch
new file mode 100644
index 0000000000..82018af24f
--- /dev/null
+++ b/packages/linux/linux-smdk2443/asoc-mainline.patch
@@ -0,0 +1,142 @@
+Index: git/arch/arm/mach-s3c2443/mach-smdk2443.c
+===================================================================
+--- git.orig/arch/arm/mach-s3c2443/mach-smdk2443.c 2007-03-27 13:25:05.000000000 +0100
++++ git/arch/arm/mach-s3c2443/mach-smdk2443.c 2007-03-27 13:44:19.000000000 +0100
+@@ -69,6 +69,11 @@
+ .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
+ .length = SZ_4M,
+ .type = MT_DEVICE,
++ }, {
++ .virtual = (u32)S3C2410_ADDR(0x02000000) ,
++ .pfn = __phys_to_pfn(0x09000000),
++ .length = SZ_1M,
++ .type = MT_DEVICE,
+ }
+ };
+
+Index: git/drivers/net/cs89x0.c
+===================================================================
+--- git.orig/drivers/net/cs89x0.c 2007-03-27 13:25:08.000000000 +0100
++++ git/drivers/net/cs89x0.c 2007-03-27 13:44:19.000000000 +0100
+@@ -187,6 +187,10 @@
+ #include <asm/irq.h>
+ static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
+ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};
++#elif defined(CONFIG_ARCH_S3C2440)
++static unsigned int netcard_portlist[] __initdata = {S3C2410_ADDR(0x02000000) + 0x300 , 0};
++static unsigned int cs8900_irq_map[] = {IRQ_EINT13, 0, 0, 0};
++static unsigned char cs8900_mac[] = {0xDE,0xAD,0xBE,0xEF,0x01,0x02};
+ #elif defined(CONFIG_ARCH_PNX010X)
+ #include <asm/irq.h>
+ #include <asm/arch/gpio.h>
+@@ -719,6 +723,14 @@
+
+ printk( "[Cirrus EEPROM] ");
+ }
++#if defined(CONFIG_ARCH_S3C2440)
++ else
++ {
++ for (i=0; i < ETH_ALEN; i++) {
++ dev->dev_addr[i] = cs8900_mac[i];
++ }
++ }
++#endif
+
+ printk("\n");
+
+@@ -802,7 +814,7 @@
+ } else {
+ i = lp->isa_config & INT_NO_MASK;
+ if (lp->chip_type == CS8900) {
+-#if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
++#if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X) || defined(CONFIG_ARCH_S3C2410)
+ i = cs8900_irq_map[0];
+ #else
+ /* Translate the IRQ using the IRQ mapping table. */
+@@ -1309,7 +1321,7 @@
+ else
+ #endif
+ {
+-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
++#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_ARCH_S3C2410)
+ if (((1 << dev->irq) & lp->irq_map) == 0) {
+ printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
+ dev->name, dev->irq, lp->irq_map);
+@@ -1324,7 +1336,11 @@
+ writereg(dev, PP_BusCTL, ENABLE_IRQ | MEMORY_ON);
+ #endif
+ write_irq(dev, lp->chip_type, dev->irq);
++#if !defined(CONFIG_ARCH_S3C2440)
+ ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);
++#else
++ ret = request_irq(dev->irq, &net_interrupt, IRQF_DISABLED | IRQF_TRIGGER_HIGH, dev->name, dev);
++#endif
+ if (ret) {
+ if (net_debug)
+ printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);
+Index: git/include/asm-arm/arch-s3c2410/regs-ac97.h
+===================================================================
+--- git.orig/include/asm-arm/arch-s3c2410/regs-ac97.h 2007-03-27 13:25:14.000000000 +0100
++++ git/include/asm-arm/arch-s3c2410/regs-ac97.h 2007-03-27 13:44:19.000000000 +0100
+@@ -13,11 +13,55 @@
+ #ifndef __ASM_ARCH_REGS_AC97_H
+ #define __ASM_ARCH_REGS_AC97_H __FILE__
+
+-#define S3C_AC97_GLBCTRL (0x00)
+-#define S3C_AC97_GLBSTAT (0x04)
+-#define S3C_AC97_CODEC_CMD (0x08)
+-#define S3C_AC97_PCM_ADDR (0x10)
+-#define S3C_AC97_PCM_DATA (0x18)
+-#define S3C_AC97_MIC_DATA (0x1C)
++#define S3C_AC97_GLBCTRL (0x00)
++
++#define S3C_AC97_GLBCTRL_CODECREADYIE (1<<22)
++#define S3C_AC97_GLBCTRL_PCMOUTURIE (1<<21)
++#define S3C_AC97_GLBCTRL_PCMINORIE (1<<20)
++#define S3C_AC97_GLBCTRL_MICINORIE (1<<19)
++#define S3C_AC97_GLBCTRL_PCMOUTTIE (1<<18)
++#define S3C_AC97_GLBCTRL_PCMINTIE (1<<17)
++#define S3C_AC97_GLBCTRL_MICINTIE (1<<16)
++#define S3C_AC97_GLBCTRL_PCMOUTTM_OFF (0<<12)
++#define S3C_AC97_GLBCTRL_PCMOUTTM_PIO (1<<12)
++#define S3C_AC97_GLBCTRL_PCMOUTTM_DMA (2<<12)
++#define S3C_AC97_GLBCTRL_PCMOUTTM_MASK (3<<12)
++#define S3C_AC97_GLBCTRL_PCMINTM_OFF (0<<10)
++#define S3C_AC97_GLBCTRL_PCMINTM_PIO (1<<10)
++#define S3C_AC97_GLBCTRL_PCMINTM_DMA (2<<10)
++#define S3C_AC97_GLBCTRL_PCMINTM_MASK (3<<10)
++#define S3C_AC97_GLBCTRL_MICINTM_OFF (0<<8)
++#define S3C_AC97_GLBCTRL_MICINTM_PIO (1<<8)
++#define S3C_AC97_GLBCTRL_MICINTM_DMA (2<<8)
++#define S3C_AC97_GLBCTRL_MICINTM_MASK (3<<8)
++#define S3C_AC97_GLBCTRL_TRANSFERDATAENABLE (1<<3)
++#define S3C_AC97_GLBCTRL_ACLINKON (1<<2)
++#define S3C_AC97_GLBCTRL_WARMRESET (1<<1)
++#define S3C_AC97_GLBCTRL_COLDRESET (1<<0)
++
++#define S3C_AC97_GLBSTAT (0x04)
++
++#define S3C_AC97_GLBSTAT_CODECREADY (1<<22)
++#define S3C_AC97_GLBSTAT_PCMOUTUR (1<<21)
++#define S3C_AC97_GLBSTAT_PCMINORI (1<<20)
++#define S3C_AC97_GLBSTAT_MICINORI (1<<19)
++#define S3C_AC97_GLBSTAT_PCMOUTTI (1<<18)
++#define S3C_AC97_GLBSTAT_PCMINTI (1<<17)
++#define S3C_AC97_GLBSTAT_MICINTI (1<<16)
++#define S3C_AC97_GLBSTAT_MAINSTATE_IDLE (0<<0)
++#define S3C_AC97_GLBSTAT_MAINSTATE_INIT (1<<0)
++#define S3C_AC97_GLBSTAT_MAINSTATE_READY (2<<0)
++#define S3C_AC97_GLBSTAT_MAINSTATE_ACTIVE (3<<0)
++#define S3C_AC97_GLBSTAT_MAINSTATE_LP (4<<0)
++#define S3C_AC97_GLBSTAT_MAINSTATE_WARM (5<<0)
++
++#define S3C_AC97_CODEC_CMD (0x08)
++
++#define S3C_AC97_CODEC_CMD_READ (1<<23)
++
++#define S3C_AC97_STAT (0x0c)
++#define S3C_AC97_PCM_ADDR (0x10)
++#define S3C_AC97_PCM_DATA (0x18)
++#define S3C_AC97_MIC_DATA (0x1C)
+
+ #endif /* __ASM_ARCH_REGS_AC97_H */
diff --git a/packages/linux/linux-smdk2443/defconfig-smdk2443 b/packages/linux/linux-smdk2443/defconfig-smdk2443
new file mode 100644
index 0000000000..e8aea8c586
--- /dev/null
+++ b/packages/linux/linux-smdk2443/defconfig-smdk2443
@@ -0,0 +1,1480 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-rc2
+# Tue Mar 13 10:50:46 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_PM_SIMTEC=y
+# CONFIG_S3C2410_BOOT_WATCHDOG is not set
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+CONFIG_S3C2410_DMA_DEBUG=n
+CONFIG_MACH_SMDK=y
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+CONFIG_ARCH_SMDK2410=y
+CONFIG_ARCH_H1940=y
+CONFIG_PM_H1940=y
+CONFIG_MACH_N30=y
+CONFIG_ARCH_BAST=y
+CONFIG_MACH_OTOM=y
+# CONFIG_MACH_AML_M5900 is not set
+CONFIG_BAST_PC104_IRQ=y
+CONFIG_MACH_VR1000=y
+# CONFIG_MACH_QT2410 is not set
+CONFIG_CPU_S3C2412=y
+CONFIG_S3C2412_DMA=y
+CONFIG_S3C2412_PM=y
+
+#
+# S3C2412 Machines
+#
+CONFIG_MACH_SMDK2413=y
+CONFIG_MACH_S3C2413=y
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+CONFIG_MACH_ANUBIS=y
+CONFIG_MACH_OSIRIS=y
+CONFIG_MACH_RX3715=y
+CONFIG_ARCH_S3C2440=y
+CONFIG_MACH_NEXCODER_2440=y
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_CPU_S3C2442=y
+
+#
+# S3C2442 Machines
+#
+CONFIG_SMDK2440_CPU2442=y
+CONFIG_CPU_S3C2443=y
+CONFIG_S3C2443_DMA=y
+
+#
+# S3C2443 Machines
+#
+CONFIG_MACH_SMDK2443=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/nfs ip=auto cs89x0_media=rj45 rw console=ttySAC0,115200"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_APM_EMULATION is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+# CONFIG_PACKET is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_16=y
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IMPA7 is not set
+CONFIG_MTD_BAST=y
+CONFIG_MTD_BAST_MAXSIZE=4
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+# CONFIG_PARPORT_PC is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+CONFIG_PARPORT_1284=y
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECD=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDE_BAST=y
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+CONFIG_NET_PCI=y
+# CONFIG_AC3200 is not set
+# CONFIG_APRICOT is not set
+CONFIG_CS89x0=y
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_N_HDLC is not set
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=8
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+# CONFIG_SERIAL_8250_FOURPORT is not set
+# CONFIG_SERIAL_8250_ACCENT is not set
+# CONFIG_SERIAL_8250_BOCA is not set
+# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=y
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=y
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELEKTOR is not set
+CONFIG_I2C_ISA=m
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=m
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_BUTTERFLY is not set
+# CONFIG_SPI_S3C24XX is not set
+CONFIG_SPI_S3C24XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+CONFIG_SENSORS_LM75=m
+# CONFIG_SENSORS_LM77 is not set
+CONFIG_SENSORS_LM78=m
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+CONFIG_SENSORS_LM85=m
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frambuffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+CONFIG_SND_DEBUG_DETECT=y
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C2443_SOC_AC97=m
+# CONFIG_SND_S3C24XX_SOC_SMDK2440 is not set
+# CONFIG_SND_S3C24XX_SOC_SMDK2440_WM8956 is not set
+CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710=m
+
+#
+# SoC Audio for the Freescale i.MX
+#
+CONFIG_SND_SOC_AC97_CODEC=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_MINIX_SUBPARTITION is not set
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-smdk2443_2.6.20+git.bb b/packages/linux/linux-smdk2443_2.6.20+git.bb
new file mode 100644
index 0000000000..6d129baea1
--- /dev/null
+++ b/packages/linux/linux-smdk2443_2.6.20+git.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "Linux Kernel for smdk2443 compatible machines"
+SECTION = "kernel"
+LICENSE = "GPL"
+DEPENDS += "u-boot-mkimage-openmoko-native"
+
+PR = "r1"
+
+GGSRC = "http://www.xora.org.uk/oe/patches/"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.21-rc5 \
+ file://0020-Add-ASoC-S3C24xx-platform-support.patch;patch=1 \
+ file://0021-Add-Neo1973-ASoC-support.patch;patch=1 \
+ file://0022-Add-initial-ASoC-SMDK2440-support.patch;patch=1 \
+ file://0023-Add-ASoC-SMDK2440-support-for-WM8956-codec.patch;patch=1 \
+ file://0034-Export-ac97_dai.patch;patch=1 \
+ file://0036-Move-s3c24xx_i2s_dai-and-add-dma_size.patch;patch=1 \
+ file://0037-Use-dma_size-parameter-and-fix-buffdone-oops.patch;patch=1 \
+ file://0038-Add-smdk2443-s3c2443-ac97-and-wm9710-support.patch;patch=1 \
+ file://asoc-mainline.patch;patch=1 \
+ file://defconfig-smdk2443"
+
+S = "${WORKDIR}/git"
+
+inherit kernel
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "smdk2443"
+KERNEL_IMAGETYPE = "zImage"
+
+do_configure() {
+ install ${WORKDIR}/defconfig-smdk2443 ${S}/.config
+ oe_runmake oldconfig
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
+ rm -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ ln -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${MACHINE}.tgz -C ${D} lib
+ ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
+ rm -f linux.bin.gz
+ gzip -9 linux.bin
+ uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "smdk2443 kernel" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
+ rm -f linux.bin.gz
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_package after do_install
+
+KERNEL_RELEASE = "2.6.21-rc5"
diff --git a/packages/linux/linux-titan-sh4-2.6.17/titan-config b/packages/linux/linux-titan-sh4-2.6.17/titan-config
deleted file mode 100644
index c7a0fc9b8e..0000000000
--- a/packages/linux/linux-titan-sh4-2.6.17/titan-config
+++ /dev/null
@@ -1,1551 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Thu Jul 6 12:42:07 2006
-#
-CONFIG_SUPERH=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=m
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System type
-#
-# CONFIG_SH_SOLUTION_ENGINE is not set
-# CONFIG_SH_7751_SOLUTION_ENGINE is not set
-# CONFIG_SH_7300_SOLUTION_ENGINE is not set
-# CONFIG_SH_73180_SOLUTION_ENGINE is not set
-# CONFIG_SH_7751_SYSTEMH is not set
-# CONFIG_SH_STB1_HARP is not set
-# CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP6XX is not set
-# CONFIG_SH_CQREEK is not set
-# CONFIG_SH_DMIDA is not set
-# CONFIG_SH_EC3104 is not set
-# CONFIG_SH_SATURN is not set
-# CONFIG_SH_DREAMCAST is not set
-# CONFIG_SH_CAT68701 is not set
-# CONFIG_SH_BIGSUR is not set
-# CONFIG_SH_SH2000 is not set
-# CONFIG_SH_ADX is not set
-# CONFIG_SH_MPC1211 is not set
-# CONFIG_SH_SH03 is not set
-# CONFIG_SH_SECUREEDGE5410 is not set
-# CONFIG_SH_HS7751RVOIP is not set
-# CONFIG_SH_RTS7751R2D is not set
-# CONFIG_SH_R7780RP is not set
-# CONFIG_SH_EDOSK7705 is not set
-# CONFIG_SH_SH4202_MICRODEV is not set
-# CONFIG_SH_LANDISK is not set
-CONFIG_SH_TITAN=y
-# CONFIG_SH_UNKNOWN is not set
-
-#
-# Processor selection
-#
-CONFIG_CPU_SH4=y
-
-#
-# SH-2 Processor Support
-#
-# CONFIG_CPU_SUBTYPE_SH7604 is not set
-
-#
-# SH-3 Processor Support
-#
-# CONFIG_CPU_SUBTYPE_SH7300 is not set
-# CONFIG_CPU_SUBTYPE_SH7705 is not set
-# CONFIG_CPU_SUBTYPE_SH7707 is not set
-# CONFIG_CPU_SUBTYPE_SH7708 is not set
-# CONFIG_CPU_SUBTYPE_SH7709 is not set
-
-#
-# SH-4 Processor Support
-#
-# CONFIG_CPU_SUBTYPE_SH7750 is not set
-# CONFIG_CPU_SUBTYPE_SH7091 is not set
-# CONFIG_CPU_SUBTYPE_SH7750R is not set
-# CONFIG_CPU_SUBTYPE_SH7750S is not set
-CONFIG_CPU_SUBTYPE_SH7751=y
-CONFIG_CPU_SUBTYPE_SH7751R=y
-# CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
-
-#
-# ST40 Processor Support
-#
-# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
-# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-
-#
-# SH-4A Processor Support
-#
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
-# CONFIG_CPU_SUBTYPE_SH7770 is not set
-# CONFIG_CPU_SUBTYPE_SH7780 is not set
-
-#
-# Memory management options
-#
-CONFIG_MMU=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-
-#
-# Cache configuration
-#
-# CONFIG_SH_DIRECT_MAPPED is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
-CONFIG_MEMORY_START=0x08030000
-CONFIG_MEMORY_SIZE=0x7fd0000
-
-#
-# Processor features
-#
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_SH_RTC=y
-CONFIG_SH_FPU=y
-# CONFIG_SH_STORE_QUEUES is not set
-CONFIG_CPU_HAS_INTEVT=y
-CONFIG_CPU_HAS_SR_RB=y
-
-#
-# Timer support
-#
-CONFIG_SH_TMU=y
-CONFIG_SH_PCLK_FREQ=30000000
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# DMA support
-#
-CONFIG_SH_DMA=y
-CONFIG_NR_ONCHIP_DMA_CHANNELS=8
-# CONFIG_NR_DMA_CHANNELS_BOOL is not set
-
-#
-# Companion Chips
-#
-# CONFIG_HD6446X_SERIES is not set
-
-#
-# Kernel features
-#
-# CONFIG_KEXEC is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_SMP is not set
-
-#
-# Boot options
-#
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x009e0000
-# CONFIG_UBC_WAKEUP is not set
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/sm0p2"
-
-#
-# Bus options
-#
-CONFIG_PCI=y
-CONFIG_SH_PCIDMA_NONCOHERENT=y
-CONFIG_PCI_AUTO=y
-CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-CONFIG_HOTPLUG_PCI=y
-# CONFIG_HOTPLUG_PCI_FAKE is not set
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-# CONFIG_HOTPLUG_PCI_SHPC is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_FLAT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options (EXPERIMENTAL)
-#
-# CONFIG_PM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-CONFIG_NET_KEY=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_ROUTE_FWMARK is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
-CONFIG_IP_ROUTE_MULTIPATH_RR=m
-CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
-CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
-CONFIG_IP_ROUTE_MULTIPATH_DRR=m
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-CONFIG_NET_IPIP=y
-CONFIG_NET_IPGRE=y
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=y
-CONFIG_INET_ESP=y
-CONFIG_INET_IPCOMP=y
-CONFIG_INET_XFRM_TUNNEL=y
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=y
-CONFIG_INET6_ESP=y
-CONFIG_INET6_IPCOMP=y
-CONFIG_INET6_XFRM_TUNNEL=y
-CONFIG_INET6_TUNNEL=y
-CONFIG_IPV6_TUNNEL=y
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_BRIDGE_NETFILTER=y
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=m
-CONFIG_NETFILTER_NETLINK_QUEUE=m
-CONFIG_NETFILTER_NETLINK_LOG=m
-CONFIG_NETFILTER_XTABLES=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_CT_ACCT=y
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK_EVENTS=y
-CONFIG_IP_NF_CONNTRACK_NETLINK=m
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-CONFIG_IP_NF_NETBIOS_NS=m
-CONFIG_IP_NF_TFTP=m
-# CONFIG_IP_NF_AMANDA is not set
-CONFIG_IP_NF_PPTP=m
-CONFIG_IP_NF_H323=m
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_DSCP=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_MATCH_HASHLIMIT=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_SAME=m
-CONFIG_IP_NF_NAT_SNMP_BASIC=m
-CONFIG_IP_NF_NAT_IRC=m
-CONFIG_IP_NF_NAT_FTP=m
-CONFIG_IP_NF_NAT_TFTP=m
-CONFIG_IP_NF_NAT_PPTP=m
-CONFIG_IP_NF_NAT_H323=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_DSCP=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-CONFIG_IP6_NF_QUEUE=m
-CONFIG_IP6_NF_IPTABLES=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_OWNER=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_LOG=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_RAW=m
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-CONFIG_BRIDGE=y
-CONFIG_VLAN_8021Q=y
-# CONFIG_DECNET is not set
-CONFIG_LLC=y
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-
-#
-# Queueing/Scheduling
-#
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_INGRESS=m
-
-#
-# Classification
-#
-CONFIG_NET_CLS=y
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_STACK=32
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_PEDIT=m
-# CONFIG_NET_ACT_SIMP is not set
-CONFIG_NET_CLS_IND=y
-CONFIG_NET_ESTIMATOR=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=y
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=y
-CONFIG_IEEE80211_CRYPT_CCMP=y
-CONFIG_IEEE80211_CRYPT_TKIP=y
-CONFIG_IEEE80211_SOFTMAC=m
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=m
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-CONFIG_FTL=m
-CONFIG_NFTL=m
-# CONFIG_NFTL_RW is not set
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_SOLUTIONENGINE is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-CONFIG_BLK_SSFDC=y
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-CONFIG_ATA_OVER_ETH=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_IFB is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-CONFIG_PHYLIB=m
-
-#
-# MII PHY device drivers
-#
-CONFIG_MARVELL_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_CICADA_PHY=m
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_STNIC is not set
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_SMC91X is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NE2000 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-# CONFIG_8139TOO_PIO is not set
-CONFIG_8139TOO_TUNE_TWISTER=y
-# CONFIG_8139TOO_8129 is not set
-CONFIG_8139_OLD_RX_RESET=y
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_IPW2100 is not set
-# CONFIG_IPW2200 is not set
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-CONFIG_PRISM54=m
-# CONFIG_HOSTAP is not set
-CONFIG_BCM43XX=m
-CONFIG_BCM43XX_DEBUG=y
-CONFIG_BCM43XX_DMA=y
-CONFIG_BCM43XX_PIO=y
-CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
-# CONFIG_BCM43XX_DMA_MODE is not set
-# CONFIG_BCM43XX_PIO_MODE is not set
-CONFIG_NET_WIRELESS=y
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-CONFIG_SLIP=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-# CONFIG_SLIP_MODE_SLIP6 is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SH_SCI=y
-CONFIG_SERIAL_SH_SCI_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_SH_WDT=m
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_ARK3116=m
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_REISERFS_FS=m
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-CONFIG_XFS_FS=m
-CONFIG_XFS_EXPORT=y
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=m
-CONFIG_UDF_FS=m
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-CONFIG_CONFIGFS_FS=m
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-CONFIG_9P_FS=m
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=m
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=16
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_SH_STANDARD_BIOS is not set
-CONFIG_EARLY_SCIF_CONSOLE=y
-# CONFIG_EARLY_PRINTK is not set
-# CONFIG_KGDB is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=m
-CONFIG_TEXTSEARCH_BM=m
-CONFIG_TEXTSEARCH_FSM=m
diff --git a/packages/linux/linux-titan-sh4-2.6.21/.mtn2git_empty b/packages/linux/linux-titan-sh4-2.6.21/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.21/.mtn2git_empty
diff --git a/packages/linux/linux-titan-sh4-2.6.21/no-mm-mutex.patch b/packages/linux/linux-titan-sh4-2.6.21/no-mm-mutex.patch
new file mode 100644
index 0000000000..a1b10eed9f
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.21/no-mm-mutex.patch
@@ -0,0 +1,47 @@
+Patch out the use of mutex's to protect the copy/clear user page
+operations. These functions sleep, and therefore the mutex's cause
+scheduling while atomic errors. Now this actually opens up the
+possiblity of some corruption (not actually seen in practice, but
+theoretically possible) and therefore is not the correct fix, but all
+proposed replacements have so far been even more problematic.
+
+diff --git a/arch/sh/mm/pg-sh4.c b/arch/sh/mm/pg-sh4.c
+index df69da9..7bc36a4 100644
+--- a/arch/sh/mm/pg-sh4.c
++++ b/arch/sh/mm/pg-sh4.c
+@@ -37,7 +37,7 @@ void clear_user_page(void *to, unsigned
+ unsigned long flags;
+
+ entry = pfn_pte(phys_addr >> PAGE_SHIFT, PAGE_KERNEL);
+- mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
++// mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
+ set_pte(pte, entry);
+ local_irq_save(flags);
+ flush_tlb_one(get_asid(), p3_addr);
+@@ -45,7 +45,7 @@ void clear_user_page(void *to, unsigned
+ update_mmu_cache(NULL, p3_addr, entry);
+ __clear_user_page((void *)p3_addr, to);
+ pte_clear(&init_mm, p3_addr, pte);
+- mutex_unlock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
++// mutex_unlock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
+ }
+ }
+
+@@ -73,7 +73,7 @@ void copy_user_page(void *to, void *from
+ unsigned long flags;
+
+ entry = pfn_pte(phys_addr >> PAGE_SHIFT, PAGE_KERNEL);
+- mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
++// mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
+ set_pte(pte, entry);
+ local_irq_save(flags);
+ flush_tlb_one(get_asid(), p3_addr);
+@@ -81,7 +81,7 @@ void copy_user_page(void *to, void *from
+ update_mmu_cache(NULL, p3_addr, entry);
+ __copy_user_page((void *)p3_addr, from, to);
+ pte_clear(&init_mm, p3_addr, pte);
+- mutex_unlock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
++// mutex_unlock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
+ }
+ }
+
diff --git a/packages/linux/linux-titan-sh4-2.6.21/titan-config b/packages/linux/linux-titan-sh4-2.6.21/titan-config
new file mode 100644
index 0000000000..d103deb0a5
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.21/titan-config
@@ -0,0 +1,1798 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-rc1
+# Wed Feb 28 00:47:30 2007
+#
+CONFIG_SUPERH=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_7343_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_7710VOIPGW is not set
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+CONFIG_SH_TITAN=y
+# CONFIG_SH_SHMIN is not set
+# CONFIG_SH_7206_SOLUTION_ENGINE is not set
+# CONFIG_SH_7619_SOLUTION_ENGINE is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+# CONFIG_CPU_SUBTYPE_SH7619 is not set
+
+#
+# SH-2A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7206 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7706 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+# CONFIG_CPU_SUBTYPE_SH7710 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+# CONFIG_CPU_SUBTYPE_SH7785 is not set
+
+#
+# SH4AL-DSP Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7343 is not set
+# CONFIG_CPU_SUBTYPE_SH7722 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_PAGE_OFFSET=0x80000000
+CONFIG_MEMORY_START=0x08030000
+CONFIG_MEMORY_SIZE=0x7fd0000
+CONFIG_VSYSCALL=y
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_SH_FPU=y
+# CONFIG_SH_DSP is not set
+# CONFIG_SH_STORE_QUEUES is not set
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_IPR_IRQ=y
+CONFIG_CPU_HAS_SR_RB=y
+CONFIG_CPU_HAS_PTEA=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_TIMER_IRQ=16
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_SH_PCLK_FREQ=30000000
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+# CONFIG_SH_DMA is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+
+#
+# Additional SuperH Device Drivers
+#
+# CONFIG_PUSH_SWITCH is not set
+
+#
+# Kernel features
+#
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_VOLUNTARY=y
+# CONFIG_PREEMPT is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x009e0000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,38400N81 earlyprintk=serial,,38400 root=/dev/nfs ip=:::::eth1:autoconf profile=2 rw"
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_FAKE is not set
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options (EXPERIMENTAL)
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+CONFIG_NET_KEY=y
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
+CONFIG_IP_ROUTE_MULTIPATH_RR=m
+CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_DRR=m
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_XFRM_TUNNEL=y
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=y
+CONFIG_INET6_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
+CONFIG_INET6_XFRM_MODE_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_BEET=y
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+CONFIG_VLAN_8021Q=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FIFO=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+# CONFIG_NET_ACT_SIMP is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_FIB_RULES=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_IFB is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+# CONFIG_8139TOO_8129 is not set
+CONFIG_8139_OLD_RX_RESET=y
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+# CONFIG_ZD1211RW is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_NR_UARTS=2
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SH_WDT=m
+# CONFIG_SH_WDT_MMAP is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SH=m
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4DEV_FS=m
+# CONFIG_EXT4DEV_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=m
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+CONFIG_EARLY_SCIF_CONSOLE=y
+CONFIG_EARLY_SCIF_CONSOLE_PORT=0xffe80000
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_4KSTACKS is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-titan-sh4/titan-flash.patch b/packages/linux/linux-titan-sh4/titan-flash.patch
index fc633f3e05..c84adcdb8c 100644
--- a/packages/linux/linux-titan-sh4/titan-flash.patch
+++ b/packages/linux/linux-titan-sh4/titan-flash.patch
@@ -1,14 +1,14 @@
-
Add the driver for onboard flash.
The quality of this driver means that it has not been included in the
-upstream CVS.
-This implements the block device translation layer to match what the
+upstream kernel sources.
+This implements a block device translation layer to match what the
onboard firmware implements.
-diff -duNr linux-2.6.16-orig/drivers/block/Kconfig linux-2.6.16/drivers/block/Kconfig
---- linux-2.6.16-orig/drivers/block/Kconfig 2006-06-29 16:12:57.000000000 +1000
-+++ linux-2.6.16/drivers/block/Kconfig 2006-06-29 16:13:27.000000000 +1000
-@@ -190,6 +190,13 @@
+diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
+index 58c1deb..9668ac7 100644
+--- a/drivers/block/Kconfig
++++ b/drivers/block/Kconfig
+@@ -186,6 +186,13 @@ config BLK_DEV_DAC960
To compile this driver as a module, choose M here: the
module will be called DAC960.
@@ -16,16 +16,17 @@ diff -duNr linux-2.6.16-orig/drivers/block/Kconfig linux-2.6.16/drivers/block/Kc
+ tristate "SmartMedia(TM) Driver (sm)"
+ depends on SH_TITAN
+ help
-+ Say Y here if you want the SmartMedia chip enabled.
++ Say Y here if you want the SmartMedia chip enabled.
+ Otherwise say N.
+
config BLK_DEV_UMEM
tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)"
depends on PCI && EXPERIMENTAL
-diff -duNr linux-2.6.16-orig/drivers/block/Makefile linux-2.6.16/drivers/block/Makefile
---- linux-2.6.16-orig/drivers/block/Makefile 2006-06-29 16:12:57.000000000 +1000
-+++ linux-2.6.16/drivers/block/Makefile 2006-06-29 16:13:27.000000000 +1000
-@@ -21,6 +21,7 @@
+diff --git a/drivers/block/Makefile b/drivers/block/Makefile
+index dd88e33..37fc9e8 100644
+--- a/drivers/block/Makefile
++++ b/drivers/block/Makefile
+@@ -19,6 +19,7 @@ obj-$(CONFIG_BLK_DEV_XD) += xd.o
obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o
obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o
obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o
@@ -33,10 +34,12 @@ diff -duNr linux-2.6.16-orig/drivers/block/Makefile linux-2.6.16/drivers/block/M
obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o
obj-$(CONFIG_BLK_DEV_UMEM) += umem.o
-diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ssfdc.c
---- linux-2.6.16-orig/drivers/block/ssfdc.c 1970-01-01 10:00:00.000000000 +1000
-+++ linux-2.6.16/drivers/block/ssfdc.c 2006-06-29 16:13:50.000000000 +1000
-@@ -0,0 +1,2742 @@
+diff --git a/drivers/block/ssfdc.c b/drivers/block/ssfdc.c
+new file mode 100644
+index 0000000..482d617
+--- /dev/null
++++ b/drivers/block/ssfdc.c
+@@ -0,0 +1,2733 @@
+/* $id: $
+ssfdc.c - Solid State Flopyy Disk Card
+
@@ -102,7 +105,6 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+#include <linux/errno.h>
+#include <linux/major.h>
+#include <linux/init.h>
-+#include <linux/devfs_fs_kernel.h>
+#include <asm/uaccess.h>
+#include <asm/hardirq.h>
+#include <linux/bio.h>
@@ -122,7 +124,6 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+static ssfdc_dev *ssfdc[MAX_SSFDC];
+
+static int ssfdc_open(struct inode *i_node, struct file *fptr);
-+static int ssfdc_getgeo(struct block_device *bdev, struct hd_geometry *geo);
+static int ssfdc_release(struct inode *i_node, struct file *fptr);
+static int ssfdc_ioctl(struct inode *i_node, struct file *fptr, unsigned cmd, unsigned long arg);
+static int ssfdc_revalidate(struct gendisk *disk);
@@ -131,7 +132,6 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+static struct block_device_operations ssfdc_fops = {
+ .owner = THIS_MODULE,
+ .open = ssfdc_open,
-+ .getgeo = ssfdc_getgeo,
+ .release = ssfdc_release,
+ .ioctl = ssfdc_ioctl,
+ // bjm out .revalidate_disk = ssfdc_revalidate,
@@ -2387,7 +2387,10 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+
+static int ssfdc_ioctl(struct inode *i_node, struct file *fptr, unsigned cmd, unsigned long arg)
+{
-+ int drive, int_val;
++ int err, drive, int_val;
++ unsigned char heads, sectors;
++ unsigned int cylinders;
++ struct hd_geometry geo;
+ ssfdc_dev *psm;
+
+#if DEBUG_SSFDC
@@ -2428,33 +2431,28 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+ printk(KERN_DEBUG "ssfdc_ioctl(BLKGETSIZE) not handled.\n");
+#endif
+ break;
++
++ case HDIO_GETGEO:
++ if ((void *) arg == NULL) return -EINVAL;
++ if (!access_ok(VERIFY_WRITE, (void __user *)arg, sizeof(geo)))
++ return -EFAULT;
++ if ((err=CheckLogCHS( psm, &cylinders, &heads, &sectors)))
++ return ssfdc_maperror(err);
++ memset(&geo, 0, sizeof(geo));
++ geo.cylinders = cylinders;
++ geo.heads = heads;
++ geo.sectors = sectors;
++ geo.start = get_start_sect(i_node->i_bdev);
++ if (copy_to_user((void *) arg, &geo, sizeof(geo)))
++ return -EFAULT;
++ if (copy_to_user((void *) arg, &geo, sizeof(geo)))
++ return -EFAULT;
++ return 0;
+ }
+ return -EINVAL;
+}
+
+
-+static int ssfdc_getgeo(struct block_device *bdev, struct hd_geometry *geo)
-+{
-+ unsigned char heads, sectors;
-+ unsigned int cylinders;
-+ struct gendisk *disk = bdev->bd_disk;
-+ ssfdc_dev *psm = disk->private_data;
-+ int drive = psm->sm_minor;
-+ int err;
-+
-+ if (drive < 0 || drive >= MAX_SSFDC)
-+ return -ENODEV;
-+
-+ err = CheckLogCHS(psm, &cylinders, &heads, &sectors);
-+ if (err)
-+ return ssfdc_maperror(err);
-+
-+ geo->heads = heads;
-+ geo->sectors = sectors;
-+ geo->cylinders = cylinders;
-+ return 0;
-+}
-+
+
+static int ssfdc_revalidate(struct gendisk *disk)
+{
@@ -2514,14 +2512,11 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+ goto busy_error;
+ }
+
-+ devfs_mk_dir("sm");
-+
+ for ( i=0; i < MAX_SSFDC; ++i) {
+ disks[i]->major = SSFDC_MAJOR;
+ disks[i]->first_minor = i << SSFDC_PARTN_BITS;
+ disks[i]->fops = &ssfdc_fops;
+ sprintf(disks[i]->disk_name, "sm%d", i);
-+ sprintf(disks[i]->devfs_name, "sm/%d", i);
+ disks[i]->private_data = ssfdc[i];
+ ssfdc_init_device(ssfdc[i], i << SSFDC_PARTN_BITS,
+ CPLD_BASE_ADDRESS + SMART_MEDIA_ONE_OFFSET);
@@ -2592,7 +2587,6 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+
+ if (unregister_blkdev(SSFDC_MAJOR, "smartmedia"))
+ printk(KERN_WARNING "smartmedia: cannot unregister blkdev\n");
-+ devfs_remove("sm");
+}
+
+#if DEBUG_SSFDC
@@ -2779,9 +2773,11 @@ diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ss
+MODULE_LICENSE("GPL");
+
+/* End of Linux Driver Modifications */
-diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.h linux-2.6.16/drivers/block/ssfdc.h
---- linux-2.6.16-orig/drivers/block/ssfdc.h 1970-01-01 10:00:00.000000000 +1000
-+++ linux-2.6.16/drivers/block/ssfdc.h 2006-06-29 16:13:27.000000000 +1000
+diff --git a/drivers/block/ssfdc.h b/drivers/block/ssfdc.h
+new file mode 100644
+index 0000000..06f4a3c
+--- /dev/null
++++ b/drivers/block/ssfdc.h
@@ -0,0 +1,372 @@
+/* $id: $ */
+#ifndef _SSFDC_H
diff --git a/packages/linux/linux-titan-sh4_2.6.17.bb b/packages/linux/linux-titan-sh4_2.6.17.bb
deleted file mode 100644
index 5069510bfe..0000000000
--- a/packages/linux/linux-titan-sh4_2.6.17.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "Linux kernel for SH4 based TITAN router appliance"
-LICENSE = "GPL"
-PR = "r2"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- cvs://anonymous@linuxsh.cvs.sourceforge.net/cvsroot/linuxsh;module=linux;date=20060726 \
- file://titan-flash.patch;patch=1 \
- file://titan-pcibios-scan-update.patch;patch=1 \
- file://titan-config"
-S = "${WORKDIR}/linux-${PV}"
-
-COMPATIBLE_HOST = 'sh4.*-linux'
-COMPATIBLE_MACHINE = "titan"
-
-inherit kernel
-
-ARCH = "sh"
-KERNEL_IMAGETYPE = "zImage"
-KERNEL_OUTPUT = "arch/${ARCH}/boot/${KERNEL_IMAGETYPE}"
-
-#
-# The linux-sh cvs tree is a "drop in source tree" and needs to be copied
-# over the top of the normal linux source since it only includes modified
-# files.
-#
-do_unpack_extra(){
- cp -pPR ${WORKDIR}/linux/* ${S}
-}
-addtask unpack_extra after do_unpack before do_patch
-
-#
-# Use an updated defconfig which includes the flash driver
-# The flash driver quality doesn't allow it to be a part of the main kernel
-#
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/titan-config ${S}/arch/sh/configs/titan_defconfig
- yes '' | oe_runmake titan_defconfig
-}
-
-#
-# Should I make the nfs boot image?
-#
-#do_deploy_titan() {
-# To NFS boot you need to objcopy the image...
-# ${HOST_PREFIX}objcopy -O binary -R .note -R .comment -S arch/sh/boot/compressed/vmlinux ${DEPLOY_DIR}/linux.bin
-#}
-#addtask deploy before do_build after do_compile
diff --git a/packages/linux/linux-titan-sh4_2.6.21.bb b/packages/linux/linux-titan-sh4_2.6.21.bb
new file mode 100644
index 0000000000..ee890e2415
--- /dev/null
+++ b/packages/linux/linux-titan-sh4_2.6.21.bb
@@ -0,0 +1,29 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for SH4 based TITAN (NP51R/LinkGear Series 100) router appliance"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://titan-flash.patch;patch=1 \
+ file://titan-pcibios-scan-update.patch;patch=1 \
+ file://no-mm-mutex.patch;patch=1 \
+ file://titan-config"
+S = "${WORKDIR}/linux-${PV}"
+
+COMPATIBLE_HOST = 'sh4.*-linux'
+COMPATIBLE_MACHINE = "titan"
+
+inherit kernel
+
+ARCH = "sh"
+KERNEL_IMAGETYPE = "zImage"
+KERNEL_OUTPUT = "arch/${ARCH}/boot/${KERNEL_IMAGETYPE}"
+
+#
+# Use an updated defconfig which includes the flash driver
+# The flash driver quality doesn't allow it to be a part of the main kernel
+#
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/titan-config ${S}/arch/sh/configs/titan_defconfig
+ yes '' | oe_runmake titan_defconfig
+}
diff --git a/packages/linux/linux-tornado-omap2/.mtn2git_empty b/packages/linux/linux-tornado-omap2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2/.mtn2git_empty
diff --git a/packages/linux/linux-tornado-omap2/htctornado/.mtn2git_empty b/packages/linux/linux-tornado-omap2/htctornado/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2/htctornado/.mtn2git_empty
diff --git a/packages/linux/linux-tornado-omap2/htctornado/defconfig b/packages/linux/linux-tornado-omap2/htctornado/defconfig
new file mode 100644
index 0000000000..9be1116739
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2/htctornado/defconfig
@@ -0,0 +1,894 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16.16-omap2
+# Thu Apr 12 17:14:27 2007
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+# CONFIG_SYSVIPC is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+CONFIG_ARCH_OMAP1=y
+# CONFIG_ARCH_OMAP2 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_RESET_CLOCKS is not set
+# CONFIG_OMAP_BOOT_TAG is not set
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_MPU_TIMER=y
+# CONFIG_OMAP_32K_TIMER is not set
+CONFIG_OMAP_LL_DEBUG_UART1=y
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
+
+#
+# OMAP Core Type
+#
+CONFIG_ARCH_OMAP730=y
+# CONFIG_ARCH_OMAP15XX is not set
+# CONFIG_ARCH_OMAP16XX is not set
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP_PERSEUS2 is not set
+
+#
+# OMAP CPU Speed
+#
+# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
+CONFIG_OMAP_ARM_195MHZ=y
+# CONFIG_OMAP_ARM_182MHZ is not set
+# CONFIG_OMAP_ARM_168MHZ is not set
+# CONFIG_OMAP_ARM_120MHZ is not set
+# CONFIG_OMAP_ARM_60MHZ is not set
+# CONFIG_OMAP_ARM_30MHZ is not set
+CONFIG_MACH_TORNADO=y
+CONFIG_EFB_DEBUG=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+CONFIG_KEXEC=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=1
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+# CONFIG_NETDEVICES is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OMAP is not set
+CONFIG_TORNADO_KEYPAD=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP730_WATCHDOG=y
+CONFIG_TORNADO_VIBRATOR=y
+CONFIG_TORNADO_LEDS=y
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_OMAP_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_OMAP is not set
+CONFIG_FB_VSFB=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_TORNADO=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_OMAP_AIC23 is not set
+# CONFIG_SND_OMAP_TSC2101 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_OMAP=y
+CONFIG_USB_OMAP=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
+# CONFIG_MMC_BULKTRANSFER is not set
+CONFIG_MMC_OMAP=y
+
+#
+# Synchronous Serial Interfaces (SSI)
+#
+# CONFIG_OMAP_UWIRE is not set
+# CONFIG_OMAP_TSC2101 is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+# CONFIG_SECURITY_CAPABILITIES is not set
+# CONFIG_SECURITY_SECLVL is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff --git a/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch b/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch
new file mode 100644
index 0000000000..ff0aaaac27
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch
@@ -0,0 +1,5134 @@
+diff -Naur linux-2.6.16/arch/alpha/kernel/setup.c linux-2.6.16.16/arch/alpha/kernel/setup.c
+--- linux-2.6.16/arch/alpha/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/alpha/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
+@@ -24,6 +24,7 @@
+ #include <linux/config.h> /* CONFIG_ALPHA_LCA etc */
+ #include <linux/mc146818rtc.h>
+ #include <linux/console.h>
++#include <linux/cpu.h>
+ #include <linux/errno.h>
+ #include <linux/init.h>
+ #include <linux/string.h>
+@@ -477,6 +478,22 @@
+ #undef PFN_PHYS
+ #undef PFN_MAX
+
++static int __init
++register_cpus(void)
++{
++ int i;
++
++ for_each_possible_cpu(i) {
++ struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
++ if (!p)
++ return -ENOMEM;
++ register_cpu(p, i, NULL);
++ }
++ return 0;
++}
++
++arch_initcall(register_cpus);
++
+ void __init
+ setup_arch(char **cmdline_p)
+ {
+diff -Naur linux-2.6.16/arch/alpha/kernel/smp.c linux-2.6.16.16/arch/alpha/kernel/smp.c
+--- linux-2.6.16/arch/alpha/kernel/smp.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/alpha/kernel/smp.c 2006-05-11 04:56:24.000000000 +0300
+@@ -439,7 +439,7 @@
+ if ((cpu->flags & 0x1cc) == 0x1cc) {
+ smp_num_probed++;
+ /* Assume here that "whami" == index */
+- cpu_set(i, cpu_possible_map);
++ cpu_set(i, cpu_present_mask);
+ cpu->pal_revision = boot_cpu_palrev;
+ }
+
+@@ -450,9 +450,8 @@
+ }
+ } else {
+ smp_num_probed = 1;
+- cpu_set(boot_cpuid, cpu_possible_map);
++ cpu_set(boot_cpuid, cpu_present_mask);
+ }
+- cpu_present_mask = cpumask_of_cpu(boot_cpuid);
+
+ printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
+ smp_num_probed, cpu_possible_map.bits[0]);
+@@ -488,9 +487,8 @@
+ smp_prepare_boot_cpu(void)
+ {
+ /*
+- * Mark the boot cpu (current cpu) as both present and online
++ * Mark the boot cpu (current cpu) as online
+ */
+- cpu_set(smp_processor_id(), cpu_present_mask);
+ cpu_set(smp_processor_id(), cpu_online_map);
+ }
+
+diff -Naur linux-2.6.16/arch/alpha/lib/strncpy.S linux-2.6.16.16/arch/alpha/lib/strncpy.S
+--- linux-2.6.16/arch/alpha/lib/strncpy.S 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/alpha/lib/strncpy.S 2006-05-11 04:56:24.000000000 +0300
+@@ -43,8 +43,8 @@
+
+ .align 4
+ $multiword:
+- subq $24, 1, $2 # clear the final bits in the prev word
+- or $2, $24, $2
++ subq $27, 1, $2 # clear the final bits in the prev word
++ or $2, $27, $2
+ zapnot $1, $2, $1
+ subq $18, 1, $18
+
+@@ -70,8 +70,8 @@
+ bne $18, 0b
+
+ 1: ldq_u $1, 0($16) # clear the leading bits in the final word
+- subq $27, 1, $2
+- or $2, $27, $2
++ subq $24, 1, $2
++ or $2, $24, $2
+
+ zap $1, $2, $1
+ stq_u $1, 0($16)
+diff -Naur linux-2.6.16/arch/i386/kernel/apm.c linux-2.6.16.16/arch/i386/kernel/apm.c
+--- linux-2.6.16/arch/i386/kernel/apm.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/apm.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1081,7 +1081,7 @@
+ break;
+ }
+
+- if (error == APM_NOT_ENGAGED && state != APM_STATE_READY) {
++ if (error == APM_NOT_ENGAGED) {
+ static int tried;
+ int eng_error;
+ if (tried++ == 0) {
+diff -Naur linux-2.6.16/arch/i386/kernel/cpu/amd.c linux-2.6.16.16/arch/i386/kernel/cpu/amd.c
+--- linux-2.6.16/arch/i386/kernel/cpu/amd.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/cpu/amd.c 2006-05-11 04:56:24.000000000 +0300
+@@ -207,6 +207,8 @@
+ set_bit(X86_FEATURE_K7, c->x86_capability);
+ break;
+ }
++ if (c->x86 >= 6)
++ set_bit(X86_FEATURE_FXSAVE_LEAK, c->x86_capability);
+
+ display_cacheinfo(c);
+
+diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/Kconfig linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/Kconfig
+--- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/Kconfig 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/Kconfig 2006-05-11 04:56:24.000000000 +0300
+@@ -203,6 +203,7 @@
+ config X86_LONGHAUL
+ tristate "VIA Cyrix III Longhaul"
+ select CPU_FREQ_TABLE
++ depends on BROKEN
+ help
+ This adds the CPUFreq driver for VIA Samuel/CyrixIII,
+ VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T
+diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
+--- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2006-05-11 04:56:24.000000000 +0300
+@@ -244,7 +244,7 @@
+ for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {
+ if ((i<2) && (has_N44_O17_errata[policy->cpu]))
+ p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
+- else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000)
++ else if (has_N60_errata[policy->cpu] && ((stock_freq * i)/8) < 2000000)
+ p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
+ else
+ p4clockmod_table[i].frequency = (stock_freq * i)/8;
+diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
+--- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2006-05-11 04:56:24.000000000 +0300
+@@ -75,7 +75,9 @@
+ __asm__ __volatile__(
+ "out %%al, (%%dx)\n"
+ : "=D" (result)
+- : "a" (command), "b" (function), "c" (0), "d" (smi_port), "D" (0), "S" (magic)
++ : "a" (command), "b" (function), "c" (0), "d" (smi_port),
++ "D" (0), "S" (magic)
++ : "memory"
+ );
+
+ dprintk("result is %x\n", result);
+diff -Naur linux-2.6.16/arch/i386/kernel/dmi_scan.c linux-2.6.16.16/arch/i386/kernel/dmi_scan.c
+--- linux-2.6.16/arch/i386/kernel/dmi_scan.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/dmi_scan.c 2006-05-11 04:56:24.000000000 +0300
+@@ -106,7 +106,7 @@
+ struct dmi_device *dev;
+
+ for (i = 0; i < count; i++) {
+- char *d = ((char *) dm) + (i * 2);
++ char *d = (char *)(dm + 1) + (i * 2);
+
+ /* Skip disabled device */
+ if ((*d & 0x80) == 0)
+diff -Naur linux-2.6.16/arch/i386/kernel/vm86.c linux-2.6.16.16/arch/i386/kernel/vm86.c
+--- linux-2.6.16/arch/i386/kernel/vm86.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/i386/kernel/vm86.c 2006-05-11 04:56:24.000000000 +0300
+@@ -43,6 +43,7 @@
+ #include <linux/smp_lock.h>
+ #include <linux/highmem.h>
+ #include <linux/ptrace.h>
++#include <linux/audit.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+@@ -252,6 +253,7 @@
+ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk)
+ {
+ struct tss_struct *tss;
++ long eax;
+ /*
+ * make sure the vm86() system call doesn't try to do anything silly
+ */
+@@ -305,13 +307,19 @@
+ tsk->thread.screen_bitmap = info->screen_bitmap;
+ if (info->flags & VM86_SCREEN_BITMAP)
+ mark_screen_rdonly(tsk->mm);
++ __asm__ __volatile__("xorl %eax,%eax; movl %eax,%fs; movl %eax,%gs\n\t");
++ __asm__ __volatile__("movl %%eax, %0\n" :"=r"(eax));
++
++ /*call audit_syscall_exit since we do not exit via the normal paths */
++ if (unlikely(current->audit_context))
++ audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
++
+ __asm__ __volatile__(
+- "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs\n\t"
+ "movl %0,%%esp\n\t"
+ "movl %1,%%ebp\n\t"
+ "jmp resume_userspace"
+ : /* no outputs */
+- :"r" (&info->regs), "r" (task_thread_info(tsk)) : "ax");
++ :"r" (&info->regs), "r" (task_thread_info(tsk)));
+ /* we never return here */
+ }
+
+diff -Naur linux-2.6.16/arch/m32r/kernel/m32r_ksyms.c linux-2.6.16.16/arch/m32r/kernel/m32r_ksyms.c
+--- linux-2.6.16/arch/m32r/kernel/m32r_ksyms.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/kernel/m32r_ksyms.c 2006-05-11 04:56:24.000000000 +0300
+@@ -38,10 +38,6 @@
+ EXPORT_SYMBOL(__delay);
+ EXPORT_SYMBOL(__const_udelay);
+
+-EXPORT_SYMBOL(__get_user_1);
+-EXPORT_SYMBOL(__get_user_2);
+-EXPORT_SYMBOL(__get_user_4);
+-
+ EXPORT_SYMBOL(strpbrk);
+ EXPORT_SYMBOL(strstr);
+
+diff -Naur linux-2.6.16/arch/m32r/kernel/setup.c linux-2.6.16.16/arch/m32r/kernel/setup.c
+--- linux-2.6.16/arch/m32r/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
+@@ -9,6 +9,7 @@
+
+ #include <linux/config.h>
+ #include <linux/init.h>
++#include <linux/kernel.h>
+ #include <linux/stddef.h>
+ #include <linux/fs.h>
+ #include <linux/sched.h>
+@@ -218,8 +219,6 @@
+ extern unsigned long setup_memory(void);
+ #endif /* CONFIG_DISCONTIGMEM */
+
+-#define M32R_PCC_PCATCR 0x00ef7014 /* will move to m32r.h */
+-
+ void __init setup_arch(char **cmdline_p)
+ {
+ ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
+@@ -268,15 +267,14 @@
+ paging_init();
+ }
+
+-static struct cpu cpu[NR_CPUS];
++static struct cpu cpu_devices[NR_CPUS];
+
+ static int __init topology_init(void)
+ {
+- int cpu_id;
++ int i;
+
+- for (cpu_id = 0; cpu_id < NR_CPUS; cpu_id++)
+- if (cpu_possible(cpu_id))
+- register_cpu(&cpu[cpu_id], cpu_id, NULL);
++ for_each_present_cpu(i)
++ register_cpu(&cpu_devices[i], i, NULL);
+
+ return 0;
+ }
+diff -Naur linux-2.6.16/arch/m32r/kernel/smpboot.c linux-2.6.16.16/arch/m32r/kernel/smpboot.c
+--- linux-2.6.16/arch/m32r/kernel/smpboot.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/kernel/smpboot.c 2006-05-11 04:56:24.000000000 +0300
+@@ -39,8 +39,10 @@
+ * Martin J. Bligh : Added support for multi-quad systems
+ */
+
++#include <linux/module.h>
+ #include <linux/config.h>
+ #include <linux/init.h>
++#include <linux/kernel.h>
+ #include <linux/mm.h>
+ #include <linux/smp_lock.h>
+ #include <linux/irq.h>
+@@ -72,11 +74,15 @@
+
+ /* Bitmask of currently online CPUs */
+ cpumask_t cpu_online_map;
++EXPORT_SYMBOL(cpu_online_map);
+
+ cpumask_t cpu_bootout_map;
+ cpumask_t cpu_bootin_map;
+-cpumask_t cpu_callout_map;
+ static cpumask_t cpu_callin_map;
++cpumask_t cpu_callout_map;
++EXPORT_SYMBOL(cpu_callout_map);
++cpumask_t cpu_possible_map = CPU_MASK_ALL;
++EXPORT_SYMBOL(cpu_possible_map);
+
+ /* Per CPU bogomips and other parameters */
+ struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned;
+@@ -110,7 +116,6 @@
+
+ void smp_prepare_boot_cpu(void);
+ void smp_prepare_cpus(unsigned int);
+-static void smp_tune_scheduling(void);
+ static void init_ipi_lock(void);
+ static void do_boot_cpu(int);
+ int __cpu_up(unsigned int);
+@@ -177,6 +182,9 @@
+ }
+ for (phys_id = 0 ; phys_id < nr_cpu ; phys_id++)
+ physid_set(phys_id, phys_cpu_present_map);
++#ifndef CONFIG_HOTPLUG_CPU
++ cpu_present_map = cpu_possible_map;
++#endif
+
+ show_mp_info(nr_cpu);
+
+@@ -186,7 +194,6 @@
+ * Setup boot CPU information
+ */
+ smp_store_cpu_info(0); /* Final full version of the data */
+- smp_tune_scheduling();
+
+ /*
+ * If SMP should be disabled, then really disable it!
+@@ -230,11 +237,6 @@
+ Dprintk("Boot done.\n");
+ }
+
+-static void __init smp_tune_scheduling(void)
+-{
+- /* Nothing to do. */
+-}
+-
+ /*
+ * init_ipi_lock : Initialize IPI locks.
+ */
+@@ -629,4 +631,3 @@
+ physid_2_cpu[phys_id] = -1;
+ cpu_2_physid[cpu_id] = -1;
+ }
+-
+diff -Naur linux-2.6.16/arch/m32r/lib/getuser.S linux-2.6.16.16/arch/m32r/lib/getuser.S
+--- linux-2.6.16/arch/m32r/lib/getuser.S 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/lib/getuser.S 1970-01-01 02:00:00.000000000 +0200
+@@ -1,88 +0,0 @@
+-/*
+- * __get_user functions.
+- *
+- * (C) Copyright 2001 Hirokazu Takata
+- *
+- * These functions have a non-standard call interface
+- * to make them more efficient, especially as they
+- * return an error value in addition to the "real"
+- * return value.
+- */
+-
+-#include <linux/config.h>
+-
+-/*
+- * __get_user_X
+- *
+- * Inputs: r0 contains the address
+- *
+- * Outputs: r0 is error code (0 or -EFAULT)
+- * r1 contains zero-extended value
+- *
+- * These functions should not modify any other registers,
+- * as they get called from within inline assembly.
+- */
+-
+-#ifdef CONFIG_ISA_DUAL_ISSUE
+-
+- .text
+- .balign 4
+- .globl __get_user_1
+-__get_user_1:
+-1: ldub r1, @r0 || ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __get_user_2
+-__get_user_2:
+-2: lduh r1, @r0 || ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __get_user_4
+-__get_user_4:
+-3: ld r1, @r0 || ldi r0, #0
+- jmp r14
+-
+-bad_get_user:
+- ldi r1, #0 || ldi r0, #-14
+- jmp r14
+-
+-#else /* not CONFIG_ISA_DUAL_ISSUE */
+-
+- .text
+- .balign 4
+- .globl __get_user_1
+-__get_user_1:
+-1: ldub r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __get_user_2
+-__get_user_2:
+-2: lduh r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __get_user_4
+-__get_user_4:
+-3: ld r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+-bad_get_user:
+- ldi r1, #0
+- ldi r0, #-14
+- jmp r14
+-
+-#endif /* not CONFIG_ISA_DUAL_ISSUE */
+-
+-.section __ex_table,"a"
+- .long 1b,bad_get_user
+- .long 2b,bad_get_user
+- .long 3b,bad_get_user
+-.previous
+-
+- .end
+diff -Naur linux-2.6.16/arch/m32r/lib/Makefile linux-2.6.16.16/arch/m32r/lib/Makefile
+--- linux-2.6.16/arch/m32r/lib/Makefile 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/lib/Makefile 2006-05-11 04:56:24.000000000 +0300
+@@ -2,6 +2,6 @@
+ # Makefile for M32R-specific library files..
+ #
+
+-lib-y := checksum.o ashxdi3.o memset.o memcpy.o getuser.o \
+- putuser.o delay.o strlen.o usercopy.o csum_partial_copy.o
++lib-y := checksum.o ashxdi3.o memset.o memcpy.o \
++ delay.o strlen.o usercopy.o csum_partial_copy.o
+
+diff -Naur linux-2.6.16/arch/m32r/lib/putuser.S linux-2.6.16.16/arch/m32r/lib/putuser.S
+--- linux-2.6.16/arch/m32r/lib/putuser.S 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/m32r/lib/putuser.S 1970-01-01 02:00:00.000000000 +0200
+@@ -1,84 +0,0 @@
+-/*
+- * __put_user functions.
+- *
+- * (C) Copyright 1998 Linus Torvalds
+- * (C) Copyright 2001 Hirokazu Takata
+- *
+- * These functions have a non-standard call interface
+- * to make them more efficient.
+- */
+-
+-#include <linux/config.h>
+-
+-/*
+- * __put_user_X
+- *
+- * Inputs: r0 contains the address
+- * r1 contains the value
+- *
+- * Outputs: r0 is error code (0 or -EFAULT)
+- * r1 is corrupted (will contain "current_task").
+- *
+- * These functions should not modify any other registers,
+- * as they get called from within inline assembly.
+- */
+-
+-#ifdef CONFIG_ISA_DUAL_ISSUE
+-
+- .text
+- .balign 4
+- .globl __put_user_1
+-__put_user_1:
+-1: stb r1, @r0 || ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __put_user_2
+-__put_user_2:
+-2: sth r1, @r0 || ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __put_user_4
+-__put_user_4:
+-3: st r1, @r0 || ldi r0, #0
+- jmp r14
+-
+-bad_put_user:
+- ldi r0, #-14 || jmp r14
+-
+-#else /* not CONFIG_ISA_DUAL_ISSUE */
+-
+- .text
+- .balign 4
+- .globl __put_user_1
+-__put_user_1:
+-1: stb r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __put_user_2
+-__put_user_2:
+-2: sth r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+- .balign 4
+- .globl __put_user_4
+-__put_user_4:
+-3: st r1, @r0
+- ldi r0, #0
+- jmp r14
+-
+-bad_put_user:
+- ldi r0, #-14
+- jmp r14
+-
+-#endif /* not CONFIG_ISA_DUAL_ISSUE */
+-
+-.section __ex_table,"a"
+- .long 1b,bad_put_user
+- .long 2b,bad_put_user
+- .long 3b,bad_put_user
+-.previous
+diff -Naur linux-2.6.16/arch/mips/kernel/branch.c linux-2.6.16.16/arch/mips/kernel/branch.c
+--- linux-2.6.16/arch/mips/kernel/branch.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/mips/kernel/branch.c 2006-05-11 04:56:24.000000000 +0300
+@@ -184,7 +184,7 @@
+ bit = (insn.i_format.rt >> 2);
+ bit += (bit != 0);
+ bit += 23;
+- switch (insn.i_format.rt) {
++ switch (insn.i_format.rt & 3) {
+ case 0: /* bc1f */
+ case 2: /* bc1fl */
+ if (~fcr31 & (1 << bit))
+diff -Naur linux-2.6.16/arch/mips/mm/c-r4k.c linux-2.6.16.16/arch/mips/mm/c-r4k.c
+--- linux-2.6.16/arch/mips/mm/c-r4k.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/mips/mm/c-r4k.c 2006-05-11 04:56:24.000000000 +0300
+@@ -154,7 +154,8 @@
+
+ static inline void tx49_blast_icache32_page_indexed(unsigned long page)
+ {
+- unsigned long start = page;
++ unsigned long indexmask = current_cpu_data.icache.waysize - 1;
++ unsigned long start = INDEX_BASE + (page & indexmask);
+ unsigned long end = start + PAGE_SIZE;
+ unsigned long ws_inc = 1UL << current_cpu_data.icache.waybit;
+ unsigned long ws_end = current_cpu_data.icache.ways <<
+diff -Naur linux-2.6.16/arch/powerpc/kernel/pci_64.c linux-2.6.16.16/arch/powerpc/kernel/pci_64.c
+--- linux-2.6.16/arch/powerpc/kernel/pci_64.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/powerpc/kernel/pci_64.c 2006-05-11 04:56:24.000000000 +0300
+@@ -78,6 +78,7 @@
+
+ /* Cached ISA bridge dev. */
+ struct pci_dev *ppc64_isabridge_dev = NULL;
++EXPORT_SYMBOL_GPL(ppc64_isabridge_dev);
+
+ static void fixup_broken_pcnet32(struct pci_dev* dev)
+ {
+diff -Naur linux-2.6.16/arch/powerpc/kernel/setup_64.c linux-2.6.16.16/arch/powerpc/kernel/setup_64.c
+--- linux-2.6.16/arch/powerpc/kernel/setup_64.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/powerpc/kernel/setup_64.c 2006-05-11 04:56:24.000000000 +0300
+@@ -256,12 +256,10 @@
+ /*
+ * Initialize stab / SLB management except on iSeries
+ */
+- if (!firmware_has_feature(FW_FEATURE_ISERIES)) {
+- if (cpu_has_feature(CPU_FTR_SLB))
+- slb_initialize();
+- else
+- stab_initialize(lpaca->stab_real);
+- }
++ if (cpu_has_feature(CPU_FTR_SLB))
++ slb_initialize();
++ else if (!firmware_has_feature(FW_FEATURE_ISERIES))
++ stab_initialize(lpaca->stab_real);
+
+ DBG(" <- early_setup()\n");
+ }
+diff -Naur linux-2.6.16/arch/powerpc/kernel/signal_64.c linux-2.6.16.16/arch/powerpc/kernel/signal_64.c
+--- linux-2.6.16/arch/powerpc/kernel/signal_64.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/powerpc/kernel/signal_64.c 2006-05-11 04:56:24.000000000 +0300
+@@ -213,7 +213,7 @@
+ /* Default to using normal stack */
+ newsp = regs->gpr[1];
+
+- if (ka->sa.sa_flags & SA_ONSTACK) {
++ if ((ka->sa.sa_flags & SA_ONSTACK) && current->sas_ss_size) {
+ if (! on_sig_stack(regs->gpr[1]))
+ newsp = (current->sas_ss_sp + current->sas_ss_size);
+ }
+diff -Naur linux-2.6.16/arch/x86_64/ia32/Makefile linux-2.6.16.16/arch/x86_64/ia32/Makefile
+--- linux-2.6.16/arch/x86_64/ia32/Makefile 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/x86_64/ia32/Makefile 2006-05-11 04:56:24.000000000 +0300
+@@ -27,5 +27,5 @@
+ $(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
+ $(call if_changed,syscall)
+
+-AFLAGS_vsyscall-sysenter.o = -m32
+-AFLAGS_vsyscall-syscall.o = -m32
++AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
++AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
+diff -Naur linux-2.6.16/arch/x86_64/kernel/entry.S linux-2.6.16.16/arch/x86_64/kernel/entry.S
+--- linux-2.6.16/arch/x86_64/kernel/entry.S 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/x86_64/kernel/entry.S 2006-05-11 04:56:24.000000000 +0300
+@@ -180,6 +180,10 @@
+ *
+ * XXX if we had a free scratch register we could save the RSP into the stack frame
+ * and report it properly in ps. Unfortunately we haven't.
++ *
++ * When user can change the frames always force IRET. That is because
++ * it deals with uncanonical addresses better. SYSRET has trouble
++ * with them due to bugs in both AMD and Intel CPUs.
+ */
+
+ ENTRY(system_call)
+@@ -254,7 +258,10 @@
+ xorl %esi,%esi # oldset -> arg2
+ call ptregscall_common
+ 1: movl $_TIF_NEED_RESCHED,%edi
+- jmp sysret_check
++ /* Use IRET because user could have changed frame. This
++ works because ptregscall_common has called FIXUP_TOP_OF_STACK. */
++ cli
++ jmp int_with_check
+
+ badsys:
+ movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
+@@ -280,7 +287,8 @@
+ call syscall_trace_leave
+ RESTORE_TOP_OF_STACK %rbx
+ RESTORE_REST
+- jmp ret_from_sys_call
++ /* Use IRET because user could have changed frame */
++ jmp int_ret_from_sys_call
+ CFI_ENDPROC
+
+ /*
+@@ -408,25 +416,9 @@
+ CFI_ADJUST_CFA_OFFSET -8
+ CFI_REGISTER rip, r11
+ SAVE_REST
+- movq %r11, %r15
+- CFI_REGISTER rip, r15
+ FIXUP_TOP_OF_STACK %r11
+ call sys_execve
+- GET_THREAD_INFO(%rcx)
+- bt $TIF_IA32,threadinfo_flags(%rcx)
+- CFI_REMEMBER_STATE
+- jc exec_32bit
+ RESTORE_TOP_OF_STACK %r11
+- movq %r15, %r11
+- CFI_REGISTER rip, r11
+- RESTORE_REST
+- pushq %r11
+- CFI_ADJUST_CFA_OFFSET 8
+- CFI_REL_OFFSET rip, 0
+- ret
+-
+-exec_32bit:
+- CFI_RESTORE_STATE
+ movq %rax,RAX(%rsp)
+ RESTORE_REST
+ jmp int_ret_from_sys_call
+diff -Naur linux-2.6.16/arch/x86_64/kernel/pci-gart.c linux-2.6.16.16/arch/x86_64/kernel/pci-gart.c
+--- linux-2.6.16/arch/x86_64/kernel/pci-gart.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/x86_64/kernel/pci-gart.c 2006-05-11 04:56:24.000000000 +0300
+@@ -114,10 +114,6 @@
+ static void free_iommu(unsigned long offset, int size)
+ {
+ unsigned long flags;
+- if (size == 1) {
+- clear_bit(offset, iommu_gart_bitmap);
+- return;
+- }
+ spin_lock_irqsave(&iommu_bitmap_lock, flags);
+ __clear_bit_string(iommu_gart_bitmap, offset, size);
+ spin_unlock_irqrestore(&iommu_bitmap_lock, flags);
+diff -Naur linux-2.6.16/arch/x86_64/kernel/process.c linux-2.6.16.16/arch/x86_64/kernel/process.c
+--- linux-2.6.16/arch/x86_64/kernel/process.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/x86_64/kernel/process.c 2006-05-11 04:56:24.000000000 +0300
+@@ -527,8 +527,6 @@
+ int cpu = smp_processor_id();
+ struct tss_struct *tss = &per_cpu(init_tss, cpu);
+
+- unlazy_fpu(prev_p);
+-
+ /*
+ * Reload esp0, LDT and the page table pointer:
+ */
+@@ -591,6 +589,12 @@
+ prev->userrsp = read_pda(oldrsp);
+ write_pda(oldrsp, next->userrsp);
+ write_pda(pcurrent, next_p);
++
++ /* This must be here to ensure both math_state_restore() and
++ kernel_fpu_begin() work consistently.
++ And the AMD workaround requires it to be after DS reload. */
++ unlazy_fpu(prev_p);
++
+ write_pda(kernelstack,
+ task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
+
+diff -Naur linux-2.6.16/arch/x86_64/kernel/setup.c linux-2.6.16.16/arch/x86_64/kernel/setup.c
+--- linux-2.6.16/arch/x86_64/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/arch/x86_64/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
+@@ -909,6 +909,10 @@
+ if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58))
+ set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
+
++ /* Enable workaround for FXSAVE leak */
++ if (c->x86 >= 6)
++ set_bit(X86_FEATURE_FXSAVE_LEAK, &c->x86_capability);
++
+ r = get_model_name(c);
+ if (!r) {
+ switch (c->x86) {
+diff -Naur linux-2.6.16/block/genhd.c linux-2.6.16.16/block/genhd.c
+--- linux-2.6.16/block/genhd.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/block/genhd.c 2006-05-11 04:56:24.000000000 +0300
+@@ -16,8 +16,6 @@
+ #include <linux/kobj_map.h>
+ #include <linux/buffer_head.h>
+
+-#define MAX_PROBE_HASH 255 /* random */
+-
+ static struct subsystem block_subsys;
+
+ static DECLARE_MUTEX(block_subsys_sem);
+@@ -30,108 +28,29 @@
+ struct blk_major_name *next;
+ int major;
+ char name[16];
+-} *major_names[MAX_PROBE_HASH];
++} *major_names[BLKDEV_MAJOR_HASH_SIZE];
+
+ /* index in the above - for now: assume no multimajor ranges */
+ static inline int major_to_index(int major)
+ {
+- return major % MAX_PROBE_HASH;
+-}
+-
+-struct blkdev_info {
+- int index;
+- struct blk_major_name *bd;
+-};
+-
+-/*
+- * iterate over a list of blkdev_info structures. allows
+- * the major_names array to be iterated over from outside this file
+- * must be called with the block_subsys_sem held
+- */
+-void *get_next_blkdev(void *dev)
+-{
+- struct blkdev_info *info;
+-
+- if (dev == NULL) {
+- info = kmalloc(sizeof(*info), GFP_KERNEL);
+- if (!info)
+- goto out;
+- info->index=0;
+- info->bd = major_names[info->index];
+- if (info->bd)
+- goto out;
+- } else {
+- info = dev;
+- }
+-
+- while (info->index < ARRAY_SIZE(major_names)) {
+- if (info->bd)
+- info->bd = info->bd->next;
+- if (info->bd)
+- goto out;
+- /*
+- * No devices on this chain, move to the next
+- */
+- info->index++;
+- info->bd = (info->index < ARRAY_SIZE(major_names)) ?
+- major_names[info->index] : NULL;
+- if (info->bd)
+- goto out;
+- }
+-
+-out:
+- return info;
+-}
+-
+-void *acquire_blkdev_list(void)
+-{
+- down(&block_subsys_sem);
+- return get_next_blkdev(NULL);
+-}
+-
+-void release_blkdev_list(void *dev)
+-{
+- up(&block_subsys_sem);
+- kfree(dev);
++ return major % BLKDEV_MAJOR_HASH_SIZE;
+ }
+
++#ifdef CONFIG_PROC_FS
+
+-/*
+- * Count the number of records in the blkdev_list.
+- * must be called with the block_subsys_sem held
+- */
+-int count_blkdev_list(void)
++void blkdev_show(struct seq_file *f, off_t offset)
+ {
+- struct blk_major_name *n;
+- int i, count;
+-
+- count = 0;
++ struct blk_major_name *dp;
+
+- for (i = 0; i < ARRAY_SIZE(major_names); i++) {
+- for (n = major_names[i]; n; n = n->next)
+- count++;
++ if (offset < BLKDEV_MAJOR_HASH_SIZE) {
++ down(&block_subsys_sem);
++ for (dp = major_names[offset]; dp; dp = dp->next)
++ seq_printf(f, "%3d %s\n", dp->major, dp->name);
++ up(&block_subsys_sem);
+ }
+-
+- return count;
+-}
+-
+-/*
+- * extract the major and name values from a blkdev_info struct
+- * passed in as a void to *dev. Must be called with
+- * block_subsys_sem held
+- */
+-int get_blkdev_info(void *dev, int *major, char **name)
+-{
+- struct blkdev_info *info = dev;
+-
+- if (info->bd == NULL)
+- return 1;
+-
+- *major = info->bd->major;
+- *name = info->bd->name;
+- return 0;
+ }
+
++#endif /* CONFIG_PROC_FS */
+
+ int register_blkdev(unsigned int major, const char *name)
+ {
+diff -Naur linux-2.6.16/Documentation/dvb/get_dvb_firmware linux-2.6.16.16/Documentation/dvb/get_dvb_firmware
+--- linux-2.6.16/Documentation/dvb/get_dvb_firmware 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/Documentation/dvb/get_dvb_firmware 2006-05-11 04:56:24.000000000 +0300
+@@ -240,9 +240,9 @@
+ }
+
+ sub nxt2002 {
+- my $sourcefile = "Broadband4PC_4_2_11.zip";
++ my $sourcefile = "Technisat_DVB-PC_4_4_COMPACT.zip";
+ my $url = "http://www.bbti.us/download/windows/$sourcefile";
+- my $hash = "c6d2ea47a8f456d887ada0cfb718ff2a";
++ my $hash = "476befae8c7c1bb9648954060b1eec1f";
+ my $outfile = "dvb-fe-nxt2002.fw";
+ my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
+
+@@ -250,8 +250,8 @@
+
+ wgetfile($sourcefile, $url);
+ unzip($sourcefile, $tmpdir);
+- verify("$tmpdir/SkyNETU.sys", $hash);
+- extract("$tmpdir/SkyNETU.sys", 375832, 5908, $outfile);
++ verify("$tmpdir/SkyNET.sys", $hash);
++ extract("$tmpdir/SkyNET.sys", 331624, 5908, $outfile);
+
+ $outfile;
+ }
+diff -Naur linux-2.6.16/drivers/base/cpu.c linux-2.6.16.16/drivers/base/cpu.c
+--- linux-2.6.16/drivers/base/cpu.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/base/cpu.c 2006-05-11 04:56:24.000000000 +0300
+@@ -141,7 +141,7 @@
+ return error;
+ }
+
+-struct sys_device *get_cpu_sysdev(int cpu)
++struct sys_device *get_cpu_sysdev(unsigned cpu)
+ {
+ if (cpu < NR_CPUS)
+ return cpu_sys_devices[cpu];
+diff -Naur linux-2.6.16/drivers/base/firmware_class.c linux-2.6.16.16/drivers/base/firmware_class.c
+--- linux-2.6.16/drivers/base/firmware_class.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/base/firmware_class.c 2006-05-11 04:56:24.000000000 +0300
+@@ -211,18 +211,20 @@
+ fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
+ {
+ u8 *new_data;
++ int new_size = fw_priv->alloc_size;
+
+ if (min_size <= fw_priv->alloc_size)
+ return 0;
+
+- new_data = vmalloc(fw_priv->alloc_size + PAGE_SIZE);
++ new_size = ALIGN(min_size, PAGE_SIZE);
++ new_data = vmalloc(new_size);
+ if (!new_data) {
+ printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
+ /* Make sure that we don't keep incomplete data */
+ fw_load_abort(fw_priv);
+ return -ENOMEM;
+ }
+- fw_priv->alloc_size += PAGE_SIZE;
++ fw_priv->alloc_size = new_size;
+ if (fw_priv->fw->data) {
+ memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
+ vfree(fw_priv->fw->data);
+diff -Naur linux-2.6.16/drivers/base/node.c linux-2.6.16.16/drivers/base/node.c
+--- linux-2.6.16/drivers/base/node.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/base/node.c 2006-05-11 04:56:24.000000000 +0300
+@@ -106,7 +106,7 @@
+ other_node = 0;
+ for (i = 0; i < MAX_NR_ZONES; i++) {
+ struct zone *z = &pg->node_zones[i];
+- for (cpu = 0; cpu < NR_CPUS; cpu++) {
++ for_each_online_cpu(cpu) {
+ struct per_cpu_pageset *ps = zone_pcp(z,cpu);
+ numa_hit += ps->numa_hit;
+ numa_miss += ps->numa_miss;
+diff -Naur linux-2.6.16/drivers/block/cciss.c linux-2.6.16.16/drivers/block/cciss.c
+--- linux-2.6.16/drivers/block/cciss.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/block/cciss.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1181,6 +1181,53 @@
+ return 0;
+ }
+
++static inline void complete_buffers(struct bio *bio, int status)
++{
++ while (bio) {
++ struct bio *xbh = bio->bi_next;
++ int nr_sectors = bio_sectors(bio);
++
++ bio->bi_next = NULL;
++ blk_finished_io(len);
++ bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
++ bio = xbh;
++ }
++
++}
++
++static void cciss_softirq_done(struct request *rq)
++{
++ CommandList_struct *cmd = rq->completion_data;
++ ctlr_info_t *h = hba[cmd->ctlr];
++ unsigned long flags;
++ u64bit temp64;
++ int i, ddir;
++
++ if (cmd->Request.Type.Direction == XFER_READ)
++ ddir = PCI_DMA_FROMDEVICE;
++ else
++ ddir = PCI_DMA_TODEVICE;
++
++ /* command did not need to be retried */
++ /* unmap the DMA mapping for all the scatter gather elements */
++ for(i=0; i<cmd->Header.SGList; i++) {
++ temp64.val32.lower = cmd->SG[i].Addr.lower;
++ temp64.val32.upper = cmd->SG[i].Addr.upper;
++ pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
++ }
++
++ complete_buffers(rq->bio, rq->errors);
++
++#ifdef CCISS_DEBUG
++ printk("Done with %p\n", rq);
++#endif /* CCISS_DEBUG */
++
++ spin_lock_irqsave(&h->lock, flags);
++ end_that_request_last(rq, rq->errors);
++ cmd_free(h, cmd,1);
++ spin_unlock_irqrestore(&h->lock, flags);
++}
++
+ /* This function will check the usage_count of the drive to be updated/added.
+ * If the usage_count is zero then the drive information will be updated and
+ * the disk will be re-registered with the kernel. If not then it will be
+@@ -1249,6 +1296,8 @@
+
+ blk_queue_max_sectors(disk->queue, 512);
+
++ blk_queue_softirq_done(disk->queue, cciss_softirq_done);
++
+ disk->queue->queuedata = hba[ctlr];
+
+ blk_queue_hardsect_size(disk->queue,
+@@ -2148,20 +2197,6 @@
+ addQ (&(h->cmpQ), c);
+ }
+ }
+-
+-static inline void complete_buffers(struct bio *bio, int status)
+-{
+- while (bio) {
+- struct bio *xbh = bio->bi_next;
+- int nr_sectors = bio_sectors(bio);
+-
+- bio->bi_next = NULL;
+- blk_finished_io(len);
+- bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
+- bio = xbh;
+- }
+-
+-}
+ /* Assumes that CCISS_LOCK(h->ctlr) is held. */
+ /* Zeros out the error record and then resends the command back */
+ /* to the controller */
+@@ -2179,39 +2214,6 @@
+ start_io(h);
+ }
+
+-static void cciss_softirq_done(struct request *rq)
+-{
+- CommandList_struct *cmd = rq->completion_data;
+- ctlr_info_t *h = hba[cmd->ctlr];
+- unsigned long flags;
+- u64bit temp64;
+- int i, ddir;
+-
+- if (cmd->Request.Type.Direction == XFER_READ)
+- ddir = PCI_DMA_FROMDEVICE;
+- else
+- ddir = PCI_DMA_TODEVICE;
+-
+- /* command did not need to be retried */
+- /* unmap the DMA mapping for all the scatter gather elements */
+- for(i=0; i<cmd->Header.SGList; i++) {
+- temp64.val32.lower = cmd->SG[i].Addr.lower;
+- temp64.val32.upper = cmd->SG[i].Addr.upper;
+- pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
+- }
+-
+- complete_buffers(rq->bio, rq->errors);
+-
+-#ifdef CCISS_DEBUG
+- printk("Done with %p\n", rq);
+-#endif /* CCISS_DEBUG */
+-
+- spin_lock_irqsave(&h->lock, flags);
+- end_that_request_last(rq, rq->errors);
+- cmd_free(h, cmd,1);
+- spin_unlock_irqrestore(&h->lock, flags);
+-}
+-
+ /* checks the status of the job and calls complete buffers to mark all
+ * buffers for the completed job. Note that this function does not need
+ * to hold the hba/queue lock.
+@@ -3269,8 +3271,8 @@
+ unregister_blkdev(hba[i]->major, hba[i]->devname);
+ clean1:
+ release_io_mem(hba[i]);
+- free_hba(i);
+ hba[i]->busy_initializing = 0;
++ free_hba(i);
+ return(-1);
+ }
+
+diff -Naur linux-2.6.16/drivers/char/agp/efficeon-agp.c linux-2.6.16.16/drivers/char/agp/efficeon-agp.c
+--- linux-2.6.16/drivers/char/agp/efficeon-agp.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/agp/efficeon-agp.c 2006-05-11 04:56:24.000000000 +0300
+@@ -64,6 +64,12 @@
+ {.mask = 0x00000001, .type = 0}
+ };
+
++/* This function does the same thing as mask_memory() for this chipset... */
++static inline unsigned long efficeon_mask_memory(unsigned long addr)
++{
++ return addr | 0x00000001;
++}
++
+ static struct aper_size_info_lvl2 efficeon_generic_sizes[4] =
+ {
+ {256, 65536, 0},
+@@ -251,7 +257,7 @@
+ last_page = NULL;
+ for (i = 0; i < count; i++) {
+ int index = pg_start + i;
+- unsigned long insert = mem->memory[i];
++ unsigned long insert = efficeon_mask_memory(mem->memory[i]);
+
+ page = (unsigned int *) efficeon_private.l1_table[index >> 10];
+
+diff -Naur linux-2.6.16/drivers/char/cs5535_gpio.c linux-2.6.16.16/drivers/char/cs5535_gpio.c
+--- linux-2.6.16/drivers/char/cs5535_gpio.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/cs5535_gpio.c 2006-05-11 04:56:24.000000000 +0300
+@@ -241,9 +241,10 @@
+ static void __exit cs5535_gpio_cleanup(void)
+ {
+ dev_t dev_id = MKDEV(major, 0);
++
++ cdev_del(&cs5535_gpio_cdev);
+ unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
+- if (gpio_base != 0)
+- release_region(gpio_base, CS5535_GPIO_SIZE);
++ release_region(gpio_base, CS5535_GPIO_SIZE);
+ }
+
+ module_init(cs5535_gpio_init);
+diff -Naur linux-2.6.16/drivers/char/ipmi/ipmi_bt_sm.c linux-2.6.16.16/drivers/char/ipmi/ipmi_bt_sm.c
+--- linux-2.6.16/drivers/char/ipmi/ipmi_bt_sm.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/ipmi/ipmi_bt_sm.c 2006-05-11 04:56:24.000000000 +0300
+@@ -165,7 +165,7 @@
+ {
+ unsigned int i;
+
+- if ((size < 2) || (size > IPMI_MAX_MSG_LENGTH))
++ if ((size < 2) || (size > (IPMI_MAX_MSG_LENGTH - 2)))
+ return -1;
+
+ if ((bt->state != BT_STATE_IDLE) && (bt->state != BT_STATE_HOSED))
+diff -Naur linux-2.6.16/drivers/char/Kconfig linux-2.6.16.16/drivers/char/Kconfig
+--- linux-2.6.16/drivers/char/Kconfig 2006-05-18 01:12:22.000000000 +0300
++++ linux-2.6.16.16/drivers/char/Kconfig 2006-05-17 21:41:29.000000000 +0300
+@@ -187,6 +187,7 @@
+ config ISI
+ tristate "Multi-Tech multiport card support (EXPERIMENTAL)"
+ depends on SERIAL_NONSTANDARD
++ select FW_LOADER
+ help
+ This is a driver for the Multi-Tech cards which provide several
+ serial ports. The driver is experimental and can currently only be
+diff -Naur linux-2.6.16/drivers/char/snsc.c linux-2.6.16.16/drivers/char/snsc.c
+--- linux-2.6.16/drivers/char/snsc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/snsc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -391,7 +391,8 @@
+ format_module_id(devnamep, geo_module(geoid),
+ MODULE_FORMAT_BRIEF);
+ devnamep = devname + strlen(devname);
+- sprintf(devnamep, "#%d", geo_slab(geoid));
++ sprintf(devnamep, "^%d#%d", geo_slot(geoid),
++ geo_slab(geoid));
+
+ /* allocate sysctl device data */
+ scd = kmalloc(sizeof (struct sysctl_data_s),
+diff -Naur linux-2.6.16/drivers/char/sonypi.c linux-2.6.16.16/drivers/char/sonypi.c
+--- linux-2.6.16/drivers/char/sonypi.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/sonypi.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1341,6 +1341,9 @@
+ else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
+ PCI_DEVICE_ID_INTEL_ICH6_1, NULL)))
+ sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
++ else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
++ PCI_DEVICE_ID_INTEL_ICH7_1, NULL)))
++ sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
+ else
+ sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2;
+
+diff -Naur linux-2.6.16/drivers/char/tipar.c linux-2.6.16.16/drivers/char/tipar.c
+--- linux-2.6.16/drivers/char/tipar.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/tipar.c 2006-05-11 04:56:24.000000000 +0300
+@@ -515,7 +515,7 @@
+ err = PTR_ERR(tipar_class);
+ goto out_chrdev;
+ }
+- if (parport_register_driver(&tipar_driver) || tp_count == 0) {
++ if (parport_register_driver(&tipar_driver)) {
+ printk(KERN_ERR "tipar: unable to register with parport\n");
+ err = -EIO;
+ goto out_class;
+diff -Naur linux-2.6.16/drivers/char/tlclk.c linux-2.6.16.16/drivers/char/tlclk.c
+--- linux-2.6.16/drivers/char/tlclk.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/tlclk.c 2006-05-11 04:56:24.000000000 +0300
+@@ -327,7 +327,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(received_ref_clk3a, S_IWUGO, NULL,
++static DEVICE_ATTR(received_ref_clk3a, (S_IWUSR|S_IWGRP), NULL,
+ store_received_ref_clk3a);
+
+
+@@ -349,7 +349,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(received_ref_clk3b, S_IWUGO, NULL,
++static DEVICE_ATTR(received_ref_clk3b, (S_IWUSR|S_IWGRP), NULL,
+ store_received_ref_clk3b);
+
+
+@@ -371,7 +371,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clk3b_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clk3b_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clk3b_output);
+
+ static ssize_t store_enable_clk3a_output(struct device *d,
+@@ -392,7 +392,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clk3a_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clk3a_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clk3a_output);
+
+ static ssize_t store_enable_clkb1_output(struct device *d,
+@@ -413,7 +413,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clkb1_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clkb1_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clkb1_output);
+
+
+@@ -435,7 +435,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clka1_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clka1_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clka1_output);
+
+ static ssize_t store_enable_clkb0_output(struct device *d,
+@@ -456,7 +456,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clkb0_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clkb0_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clkb0_output);
+
+ static ssize_t store_enable_clka0_output(struct device *d,
+@@ -477,7 +477,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(enable_clka0_output, S_IWUGO, NULL,
++static DEVICE_ATTR(enable_clka0_output, (S_IWUSR|S_IWGRP), NULL,
+ store_enable_clka0_output);
+
+ static ssize_t store_select_amcb2_transmit_clock(struct device *d,
+@@ -519,7 +519,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(select_amcb2_transmit_clock, S_IWUGO, NULL,
++static DEVICE_ATTR(select_amcb2_transmit_clock, (S_IWUSR|S_IWGRP), NULL,
+ store_select_amcb2_transmit_clock);
+
+ static ssize_t store_select_amcb1_transmit_clock(struct device *d,
+@@ -560,7 +560,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(select_amcb1_transmit_clock, S_IWUGO, NULL,
++static DEVICE_ATTR(select_amcb1_transmit_clock, (S_IWUSR|S_IWGRP), NULL,
+ store_select_amcb1_transmit_clock);
+
+ static ssize_t store_select_redundant_clock(struct device *d,
+@@ -581,7 +581,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(select_redundant_clock, S_IWUGO, NULL,
++static DEVICE_ATTR(select_redundant_clock, (S_IWUSR|S_IWGRP), NULL,
+ store_select_redundant_clock);
+
+ static ssize_t store_select_ref_frequency(struct device *d,
+@@ -602,7 +602,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(select_ref_frequency, S_IWUGO, NULL,
++static DEVICE_ATTR(select_ref_frequency, (S_IWUSR|S_IWGRP), NULL,
+ store_select_ref_frequency);
+
+ static ssize_t store_filter_select(struct device *d,
+@@ -623,7 +623,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(filter_select, S_IWUGO, NULL, store_filter_select);
++static DEVICE_ATTR(filter_select, (S_IWUSR|S_IWGRP), NULL, store_filter_select);
+
+ static ssize_t store_hardware_switching_mode(struct device *d,
+ struct device_attribute *attr, const char *buf, size_t count)
+@@ -643,7 +643,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(hardware_switching_mode, S_IWUGO, NULL,
++static DEVICE_ATTR(hardware_switching_mode, (S_IWUSR|S_IWGRP), NULL,
+ store_hardware_switching_mode);
+
+ static ssize_t store_hardware_switching(struct device *d,
+@@ -664,7 +664,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(hardware_switching, S_IWUGO, NULL,
++static DEVICE_ATTR(hardware_switching, (S_IWUSR|S_IWGRP), NULL,
+ store_hardware_switching);
+
+ static ssize_t store_refalign (struct device *d,
+@@ -684,7 +684,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(refalign, S_IWUGO, NULL, store_refalign);
++static DEVICE_ATTR(refalign, (S_IWUSR|S_IWGRP), NULL, store_refalign);
+
+ static ssize_t store_mode_select (struct device *d,
+ struct device_attribute *attr, const char *buf, size_t count)
+@@ -704,7 +704,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(mode_select, S_IWUGO, NULL, store_mode_select);
++static DEVICE_ATTR(mode_select, (S_IWUSR|S_IWGRP), NULL, store_mode_select);
+
+ static ssize_t store_reset (struct device *d,
+ struct device_attribute *attr, const char *buf, size_t count)
+@@ -724,7 +724,7 @@
+ return strnlen(buf, count);
+ }
+
+-static DEVICE_ATTR(reset, S_IWUGO, NULL, store_reset);
++static DEVICE_ATTR(reset, (S_IWUSR|S_IWGRP), NULL, store_reset);
+
+ static struct attribute *tlclk_sysfs_entries[] = {
+ &dev_attr_current_ref.attr,
+@@ -767,6 +767,7 @@
+ printk(KERN_ERR "tlclk: can't get major %d.\n", tlclk_major);
+ return ret;
+ }
++ tlclk_major = ret;
+ alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
+ if (!alarm_events)
+ goto out1;
+diff -Naur linux-2.6.16/drivers/char/tty_io.c linux-2.6.16.16/drivers/char/tty_io.c
+--- linux-2.6.16/drivers/char/tty_io.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/char/tty_io.c 2006-05-11 04:56:24.000000000 +0300
+@@ -2706,7 +2706,11 @@
+ }
+ task_lock(p);
+ if (p->files) {
+- rcu_read_lock();
++ /*
++ * We don't take a ref to the file, so we must
++ * hold ->file_lock instead.
++ */
++ spin_lock(&p->files->file_lock);
+ fdt = files_fdtable(p->files);
+ for (i=0; i < fdt->max_fds; i++) {
+ filp = fcheck_files(p->files, i);
+@@ -2721,7 +2725,7 @@
+ break;
+ }
+ }
+- rcu_read_unlock();
++ spin_unlock(&p->files->file_lock);
+ }
+ task_unlock(p);
+ } while_each_task_pid(session, PIDTYPE_SID, p);
+diff -Naur linux-2.6.16/drivers/edac/Kconfig linux-2.6.16.16/drivers/edac/Kconfig
+--- linux-2.6.16/drivers/edac/Kconfig 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/edac/Kconfig 2006-05-11 04:56:24.000000000 +0300
+@@ -71,7 +71,7 @@
+
+ config EDAC_E752X
+ tristate "Intel e752x (e7520, e7525, e7320)"
+- depends on EDAC_MM_EDAC && PCI
++ depends on EDAC_MM_EDAC && PCI && HOTPLUG
+ help
+ Support for error detection and correction on the Intel
+ E7520, E7525, E7320 server chipsets.
+diff -Naur linux-2.6.16/drivers/i2c/busses/i2c-i801.c linux-2.6.16.16/drivers/i2c/busses/i2c-i801.c
+--- linux-2.6.16/drivers/i2c/busses/i2c-i801.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/i2c/busses/i2c-i801.c 2006-05-11 04:56:24.000000000 +0300
+@@ -478,6 +478,11 @@
+ ret = i801_transaction();
+ }
+
++ /* Some BIOSes don't like it when PEC is enabled at reboot or resume
++ time, so we forcibly disable it after every transaction. */
++ if (hwpec)
++ outb_p(0, SMBAUXCTL);
++
+ if(block)
+ return ret;
+ if(ret)
+diff -Naur linux-2.6.16/drivers/i2c/chips/m41t00.c linux-2.6.16.16/drivers/i2c/chips/m41t00.c
+--- linux-2.6.16/drivers/i2c/chips/m41t00.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/i2c/chips/m41t00.c 2006-05-11 04:56:24.000000000 +0300
+@@ -129,13 +129,13 @@
+ if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0)
+ || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f)
+ < 0)
+- || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x7f)
++ || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x3f)
+ < 0)
+- || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x7f)
++ || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x3f)
+ < 0)
+- || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x7f)
++ || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x1f)
+ < 0)
+- || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0x7f)
++ || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0xff)
+ < 0))
+
+ dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n");
+diff -Naur linux-2.6.16/drivers/ide/pci/alim15x3.c linux-2.6.16.16/drivers/ide/pci/alim15x3.c
+--- linux-2.6.16/drivers/ide/pci/alim15x3.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/ide/pci/alim15x3.c 2006-05-11 04:56:24.000000000 +0300
+@@ -731,6 +731,8 @@
+
+ if(m5229_revision <= 0x20)
+ tmpbyte = (tmpbyte & (~0x02)) | 0x01;
++ else if (m5229_revision == 0xc7)
++ tmpbyte |= 0x03;
+ else
+ tmpbyte |= 0x01;
+
+diff -Naur linux-2.6.16/drivers/ieee1394/sbp2.c linux-2.6.16.16/drivers/ieee1394/sbp2.c
+--- linux-2.6.16/drivers/ieee1394/sbp2.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/ieee1394/sbp2.c 2006-05-11 04:56:24.000000000 +0300
+@@ -495,22 +495,17 @@
+ /*
+ * This function finds the sbp2_command for a given outstanding SCpnt.
+ * Only looks at the inuse list.
++ * Must be called with scsi_id->sbp2_command_orb_lock held.
+ */
+-static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt)
++static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(
++ struct scsi_id_instance_data *scsi_id, void *SCpnt)
+ {
+ struct sbp2_command_info *command;
+- unsigned long flags;
+
+- spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
+- if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
+- list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list) {
+- if (command->Current_SCpnt == SCpnt) {
+- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
++ if (!list_empty(&scsi_id->sbp2_command_orb_inuse))
++ list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list)
++ if (command->Current_SCpnt == SCpnt)
+ return command;
+- }
+- }
+- }
+- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
+ return NULL;
+ }
+
+@@ -579,17 +574,15 @@
+
+ /*
+ * This function moves a command to the completed orb list.
++ * Must be called with scsi_id->sbp2_command_orb_lock held.
+ */
+-static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id,
+- struct sbp2_command_info *command)
++static void sbp2util_mark_command_completed(
++ struct scsi_id_instance_data *scsi_id,
++ struct sbp2_command_info *command)
+ {
+- unsigned long flags;
+-
+- spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
+ list_del(&command->list);
+ sbp2util_free_command_dma(command);
+ list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
+- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
+ }
+
+ /*
+@@ -2177,7 +2170,9 @@
+ * Matched status with command, now grab scsi command pointers and check status
+ */
+ SCpnt = command->Current_SCpnt;
++ spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
+ sbp2util_mark_command_completed(scsi_id, command);
++ spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
+
+ if (SCpnt) {
+
+@@ -2513,6 +2508,7 @@
+ (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
+ struct sbp2scsi_host_info *hi = scsi_id->hi;
+ struct sbp2_command_info *command;
++ unsigned long flags;
+
+ SBP2_ERR("aborting sbp2 command");
+ scsi_print_command(SCpnt);
+@@ -2523,6 +2519,7 @@
+ * Right now, just return any matching command structures
+ * to the free pool.
+ */
++ spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
+ command = sbp2util_find_command_for_SCpnt(scsi_id, SCpnt);
+ if (command) {
+ SBP2_DEBUG("Found command to abort");
+@@ -2540,6 +2537,7 @@
+ command->Current_done(command->Current_SCpnt);
+ }
+ }
++ spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
+
+ /*
+ * Initiate a fetch agent reset.
+diff -Naur linux-2.6.16/drivers/macintosh/therm_adt746x.c linux-2.6.16.16/drivers/macintosh/therm_adt746x.c
+--- linux-2.6.16/drivers/macintosh/therm_adt746x.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/macintosh/therm_adt746x.c 2006-05-11 04:56:24.000000000 +0300
+@@ -627,8 +627,8 @@
+ if(therm_type == ADT7460)
+ device_create_file(&of_dev->dev, &dev_attr_sensor2_fan_speed);
+
+-#ifndef CONFIG_I2C_KEYWEST
+- request_module("i2c-keywest");
++#ifndef CONFIG_I2C_POWERMAC
++ request_module("i2c-powermac");
+ #endif
+
+ return i2c_add_driver(&thermostat_driver);
+diff -Naur linux-2.6.16/drivers/md/dm.c linux-2.6.16.16/drivers/md/dm.c
+--- linux-2.6.16/drivers/md/dm.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/md/dm.c 2006-05-11 04:56:24.000000000 +0300
+@@ -533,30 +533,35 @@
+
+ } else {
+ /*
+- * Create two copy bios to deal with io that has
+- * been split across a target.
++ * Handle a bvec that must be split between two or more targets.
+ */
+ struct bio_vec *bv = bio->bi_io_vec + ci->idx;
++ sector_t remaining = to_sector(bv->bv_len);
++ unsigned int offset = 0;
+
+- clone = split_bvec(bio, ci->sector, ci->idx,
+- bv->bv_offset, max);
+- __map_bio(ti, clone, tio);
+-
+- ci->sector += max;
+- ci->sector_count -= max;
+- ti = dm_table_find_target(ci->map, ci->sector);
+-
+- len = to_sector(bv->bv_len) - max;
+- clone = split_bvec(bio, ci->sector, ci->idx,
+- bv->bv_offset + to_bytes(max), len);
+- tio = alloc_tio(ci->md);
+- tio->io = ci->io;
+- tio->ti = ti;
+- memset(&tio->info, 0, sizeof(tio->info));
+- __map_bio(ti, clone, tio);
++ do {
++ if (offset) {
++ ti = dm_table_find_target(ci->map, ci->sector);
++ max = max_io_len(ci->md, ci->sector, ti);
++
++ tio = alloc_tio(ci->md);
++ tio->io = ci->io;
++ tio->ti = ti;
++ memset(&tio->info, 0, sizeof(tio->info));
++ }
++
++ len = min(remaining, max);
++
++ clone = split_bvec(bio, ci->sector, ci->idx,
++ bv->bv_offset + offset, len);
++
++ __map_bio(ti, clone, tio);
++
++ ci->sector += len;
++ ci->sector_count -= len;
++ offset += to_bytes(len);
++ } while (remaining -= len);
+
+- ci->sector += len;
+- ci->sector_count -= len;
+ ci->idx++;
+ }
+ }
+@@ -1093,6 +1098,7 @@
+ {
+ struct dm_table *map = NULL;
+ DECLARE_WAITQUEUE(wait, current);
++ struct bio *def;
+ int r = -EINVAL;
+
+ down(&md->suspend_lock);
+@@ -1152,9 +1158,11 @@
+ /* were we interrupted ? */
+ r = -EINTR;
+ if (atomic_read(&md->pending)) {
++ clear_bit(DMF_BLOCK_IO, &md->flags);
++ def = bio_list_get(&md->deferred);
++ __flush_deferred_io(md, def);
+ up_write(&md->io_lock);
+ unlock_fs(md);
+- clear_bit(DMF_BLOCK_IO, &md->flags);
+ goto out;
+ }
+ up_write(&md->io_lock);
+diff -Naur linux-2.6.16/drivers/md/dm-snap.c linux-2.6.16.16/drivers/md/dm-snap.c
+--- linux-2.6.16/drivers/md/dm-snap.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/md/dm-snap.c 2006-05-11 04:56:24.000000000 +0300
+@@ -542,8 +542,12 @@
+ {
+ struct dm_snapshot *s = (struct dm_snapshot *) ti->private;
+
++ /* Prevent further origin writes from using this snapshot. */
++ /* After this returns there can be no new kcopyd jobs. */
+ unregister_snapshot(s);
+
++ kcopyd_client_destroy(s->kcopyd_client);
++
+ exit_exception_table(&s->pending, pending_cache);
+ exit_exception_table(&s->complete, exception_cache);
+
+@@ -552,7 +556,7 @@
+
+ dm_put_device(ti, s->origin);
+ dm_put_device(ti, s->cow);
+- kcopyd_client_destroy(s->kcopyd_client);
++
+ kfree(s);
+ }
+
+diff -Naur linux-2.6.16/drivers/md/kcopyd.c linux-2.6.16.16/drivers/md/kcopyd.c
+--- linux-2.6.16/drivers/md/kcopyd.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/md/kcopyd.c 2006-05-11 04:56:24.000000000 +0300
+@@ -44,6 +44,9 @@
+ struct page_list *pages;
+ unsigned int nr_pages;
+ unsigned int nr_free_pages;
++
++ wait_queue_head_t destroyq;
++ atomic_t nr_jobs;
+ };
+
+ static struct page_list *alloc_pl(void)
+@@ -293,10 +296,15 @@
+ int read_err = job->read_err;
+ unsigned int write_err = job->write_err;
+ kcopyd_notify_fn fn = job->fn;
++ struct kcopyd_client *kc = job->kc;
+
+- kcopyd_put_pages(job->kc, job->pages);
++ kcopyd_put_pages(kc, job->pages);
+ mempool_free(job, _job_pool);
+ fn(read_err, write_err, context);
++
++ if (atomic_dec_and_test(&kc->nr_jobs))
++ wake_up(&kc->destroyq);
++
+ return 0;
+ }
+
+@@ -431,6 +439,7 @@
+ */
+ static void dispatch_job(struct kcopyd_job *job)
+ {
++ atomic_inc(&job->kc->nr_jobs);
+ push(&_pages_jobs, job);
+ wake();
+ }
+@@ -670,6 +679,9 @@
+ return r;
+ }
+
++ init_waitqueue_head(&kc->destroyq);
++ atomic_set(&kc->nr_jobs, 0);
++
+ client_add(kc);
+ *result = kc;
+ return 0;
+@@ -677,6 +689,9 @@
+
+ void kcopyd_client_destroy(struct kcopyd_client *kc)
+ {
++ /* Wait for completion of all jobs submitted by this client. */
++ wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
++
+ dm_io_put(kc->nr_pages);
+ client_free_pages(kc);
+ client_del(kc);
+diff -Naur linux-2.6.16/drivers/media/dvb/dvb-usb/cxusb.c linux-2.6.16.16/drivers/media/dvb/dvb-usb/cxusb.c
+--- linux-2.6.16/drivers/media/dvb/dvb-usb/cxusb.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/media/dvb/dvb-usb/cxusb.c 2006-05-11 04:56:24.000000000 +0300
+@@ -149,6 +149,15 @@
+ return cxusb_ctrl_msg(d, CMD_POWER_OFF, &b, 1, NULL, 0);
+ }
+
++static int cxusb_bluebird_power_ctrl(struct dvb_usb_device *d, int onoff)
++{
++ u8 b = 0;
++ if (onoff)
++ return cxusb_ctrl_msg(d, CMD_POWER_ON, &b, 1, NULL, 0);
++ else
++ return 0;
++}
++
+ static int cxusb_streaming_ctrl(struct dvb_usb_device *d, int onoff)
+ {
+ u8 buf[2] = { 0x03, 0x00 };
+@@ -505,7 +514,7 @@
+ .size_of_priv = sizeof(struct cxusb_state),
+
+ .streaming_ctrl = cxusb_streaming_ctrl,
+- .power_ctrl = cxusb_power_ctrl,
++ .power_ctrl = cxusb_bluebird_power_ctrl,
+ .frontend_attach = cxusb_lgdt3303_frontend_attach,
+ .tuner_attach = cxusb_lgh064f_tuner_attach,
+
+@@ -545,7 +554,7 @@
+ .size_of_priv = sizeof(struct cxusb_state),
+
+ .streaming_ctrl = cxusb_streaming_ctrl,
+- .power_ctrl = cxusb_power_ctrl,
++ .power_ctrl = cxusb_bluebird_power_ctrl,
+ .frontend_attach = cxusb_dee1601_frontend_attach,
+ .tuner_attach = cxusb_dee1601_tuner_attach,
+
+@@ -594,7 +603,7 @@
+ .size_of_priv = sizeof(struct cxusb_state),
+
+ .streaming_ctrl = cxusb_streaming_ctrl,
+- .power_ctrl = cxusb_power_ctrl,
++ .power_ctrl = cxusb_bluebird_power_ctrl,
+ .frontend_attach = cxusb_mt352_frontend_attach,
+ .tuner_attach = cxusb_lgz201_tuner_attach,
+
+@@ -634,7 +643,7 @@
+ .size_of_priv = sizeof(struct cxusb_state),
+
+ .streaming_ctrl = cxusb_streaming_ctrl,
+- .power_ctrl = cxusb_power_ctrl,
++ .power_ctrl = cxusb_bluebird_power_ctrl,
+ .frontend_attach = cxusb_mt352_frontend_attach,
+ .tuner_attach = cxusb_dtt7579_tuner_attach,
+
+diff -Naur linux-2.6.16/drivers/media/video/Kconfig linux-2.6.16.16/drivers/media/video/Kconfig
+--- linux-2.6.16/drivers/media/video/Kconfig 2006-05-18 01:12:22.000000000 +0300
++++ linux-2.6.16.16/drivers/media/video/Kconfig 2006-05-17 21:41:30.000000000 +0300
+@@ -349,6 +349,7 @@
+ config VIDEO_DECODER
+ tristate "Add support for additional video chipsets"
+ depends on VIDEO_DEV && I2C && EXPERIMENTAL
++ select FW_LOADER
+ ---help---
+ Say Y here to compile drivers for SAA7115, SAA7127 and CX25840
+ video decoders.
+diff -Naur linux-2.6.16/drivers/media/video/saa7127.c linux-2.6.16.16/drivers/media/video/saa7127.c
+--- linux-2.6.16/drivers/media/video/saa7127.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/media/video/saa7127.c 2006-05-11 04:56:24.000000000 +0300
+@@ -141,6 +141,7 @@
+ static const struct i2c_reg_value saa7129_init_config_extra[] = {
+ { SAA7127_REG_OUTPUT_PORT_CONTROL, 0x38 },
+ { SAA7127_REG_VTRIG, 0xfa },
++ { 0, 0 }
+ };
+
+ static const struct i2c_reg_value saa7127_init_config_common[] = {
+diff -Naur linux-2.6.16/drivers/media/video/tuner-types.c linux-2.6.16.16/drivers/media/video/tuner-types.c
+--- linux-2.6.16/drivers/media/video/tuner-types.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/media/video/tuner-types.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1087,8 +1087,8 @@
+ /* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */
+
+ static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = {
+- { 16 * 175.75 /*MHz*/, 0x01, },
+- { 16 * 410.25 /*MHz*/, 0x02, },
++ { 16 * 130.00 /*MHz*/, 0x01, },
++ { 16 * 364.50 /*MHz*/, 0x02, },
+ { 16 * 999.99 , 0x08, },
+ };
+
+diff -Naur linux-2.6.16/drivers/mtd/nand/Kconfig linux-2.6.16.16/drivers/mtd/nand/Kconfig
+--- linux-2.6.16/drivers/mtd/nand/Kconfig 2006-05-18 01:12:23.000000000 +0300
++++ linux-2.6.16.16/drivers/mtd/nand/Kconfig 2006-05-17 22:32:57.000000000 +0300
+@@ -184,15 +184,14 @@
+ Even if you leave this disabled, you can enable BBT writes at module
+ load time (assuming you build diskonchip as a module) with the module
+ parameter "inftl_bbt_write=1".
+-
+- config MTD_NAND_SHARPSL
+- bool "Support for NAND Flash on Sharp SL Series (C7xx + others)"
+- depends on MTD_NAND && ARCH_PXA
+-
+- config MTD_NAND_NANDSIM
+- bool "Support for NAND Flash Simulator"
+- depends on MTD_NAND && MTD_PARTITIONS
+
++config MTD_NAND_SHARPSL
++ tristate "Support for NAND Flash on Sharp SL Series (C7xx + others)"
++ depends on MTD_NAND && ARCH_PXA
++
++config MTD_NAND_NANDSIM
++ tristate "Support for NAND Flash Simulator"
++ depends on MTD_NAND && MTD_PARTITIONS
+ help
+ The simulator may simulate verious NAND flash chips for the
+ MTD nand layer.
+@@ -200,7 +199,6 @@
+ config MTD_NAND_OMAP_HW
+ bool "OMAP HW NAND Flash controller support"
+ depends on ARM && ARCH_OMAP16XX && MTD_NAND
+-
+ help
+ Driver for TI OMAP16xx hardware NAND flash controller.
+
+diff -Naur linux-2.6.16/drivers/net/e1000/e1000_main.c linux-2.6.16.16/drivers/net/e1000/e1000_main.c
+--- linux-2.6.16/drivers/net/e1000/e1000_main.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/e1000/e1000_main.c 2006-05-11 04:56:24.000000000 +0300
+@@ -3851,6 +3851,7 @@
+ skb_shinfo(skb)->nr_frags++;
+ skb->len += length;
+ skb->data_len += length;
++ skb->truesize += length;
+ }
+
+ e1000_rx_checksum(adapter, staterr,
+diff -Naur linux-2.6.16/drivers/net/irda/irda-usb.c linux-2.6.16.16/drivers/net/irda/irda-usb.c
+--- linux-2.6.16/drivers/net/irda/irda-usb.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/irda/irda-usb.c 2006-05-11 04:56:24.000000000 +0300
+@@ -740,7 +740,7 @@
+ struct sk_buff *newskb;
+ struct sk_buff *dataskb;
+ struct urb *next_urb;
+- int docopy;
++ unsigned int len, docopy;
+
+ IRDA_DEBUG(2, "%s(), len=%d\n", __FUNCTION__, urb->actual_length);
+
+@@ -851,10 +851,11 @@
+ dataskb->dev = self->netdev;
+ dataskb->mac.raw = dataskb->data;
+ dataskb->protocol = htons(ETH_P_IRDA);
++ len = dataskb->len;
+ netif_rx(dataskb);
+
+ /* Keep stats up to date */
+- self->stats.rx_bytes += dataskb->len;
++ self->stats.rx_bytes += len;
+ self->stats.rx_packets++;
+ self->netdev->last_rx = jiffies;
+
+diff -Naur linux-2.6.16/drivers/net/sky2.c linux-2.6.16.16/drivers/net/sky2.c
+--- linux-2.6.16/drivers/net/sky2.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/sky2.c 2006-05-11 04:56:24.000000000 +0300
+@@ -579,8 +579,8 @@
+ reg = gma_read16(hw, port, GM_PHY_ADDR);
+ gma_write16(hw, port, GM_PHY_ADDR, reg | GM_PAR_MIB_CLR);
+
+- for (i = 0; i < GM_MIB_CNT_SIZE; i++)
+- gma_read16(hw, port, GM_MIB_CNT_BASE + 8 * i);
++ for (i = GM_MIB_CNT_BASE; i <= GM_MIB_CNT_END; i += 4)
++ gma_read16(hw, port, i);
+ gma_write16(hw, port, GM_PHY_ADDR, reg);
+
+ /* transmit control */
+diff -Naur linux-2.6.16/drivers/net/sky2.h linux-2.6.16.16/drivers/net/sky2.h
+--- linux-2.6.16/drivers/net/sky2.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/sky2.h 2006-05-11 04:56:24.000000000 +0300
+@@ -1380,6 +1380,7 @@
+ /* MIB Counters */
+ #define GM_MIB_CNT_BASE 0x0100 /* Base Address of MIB Counters */
+ #define GM_MIB_CNT_SIZE 44 /* Number of MIB Counters */
++#define GM_MIB_CNT_END 0x025C /* Last MIB counter */
+
+ /*
+ * MIB Counters base address definitions (low word) -
+diff -Naur linux-2.6.16/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.16.16/drivers/net/wireless/hostap/hostap_80211_tx.c
+--- linux-2.6.16/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-05-11 04:56:24.000000000 +0300
+@@ -469,7 +469,7 @@
+ }
+
+ if (local->ieee_802_1x && meta->ethertype == ETH_P_PAE && tx.crypt &&
+- !(fc & IEEE80211_FCTL_VERS)) {
++ !(fc & IEEE80211_FCTL_PROTECTED)) {
+ no_encrypt = 1;
+ PDEBUG(DEBUG_EXTRA2, "%s: TX: IEEE 802.1X - passing "
+ "unencrypted EAPOL frame\n", dev->name);
+diff -Naur linux-2.6.16/drivers/net/wireless/ipw2200.c linux-2.6.16.16/drivers/net/wireless/ipw2200.c
+--- linux-2.6.16/drivers/net/wireless/ipw2200.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/wireless/ipw2200.c 2006-05-11 04:56:24.000000000 +0300
+@@ -9956,9 +9956,8 @@
+ return -EINVAL;
+ down(&p->sem);
+ memcpy(&p->eeprom[eeprom->offset], bytes, eeprom->len);
+- for (i = IPW_EEPROM_DATA;
+- i < IPW_EEPROM_DATA + IPW_EEPROM_IMAGE_SIZE; i++)
+- ipw_write8(p, i, p->eeprom[i]);
++ for (i = 0; i < IPW_EEPROM_IMAGE_SIZE; i++)
++ ipw_write8(p, i + IPW_EEPROM_DATA, p->eeprom[i]);
+ up(&p->sem);
+ return 0;
+ }
+diff -Naur linux-2.6.16/drivers/net/wireless/Kconfig linux-2.6.16.16/drivers/net/wireless/Kconfig
+--- linux-2.6.16/drivers/net/wireless/Kconfig 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/net/wireless/Kconfig 2006-05-11 04:56:24.000000000 +0300
+@@ -239,7 +239,8 @@
+
+ config AIRO
+ tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
+- depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)
++ depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)
++ select CRYPTO
+ ---help---
+ This is the standard Linux driver to support Cisco/Aironet ISA and
+ PCI 802.11 wireless cards.
+@@ -374,6 +375,7 @@
+ config PCMCIA_SPECTRUM
+ tristate "Symbol Spectrum24 Trilogy PCMCIA card support"
+ depends on NET_RADIO && PCMCIA && HERMES
++ select FW_LOADER
+ ---help---
+
+ This is a driver for 802.11b cards using RAM-loadable Symbol
+@@ -387,6 +389,7 @@
+ config AIRO_CS
+ tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
+ depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
++ select CRYPTO
+ ---help---
+ This is the standard Linux driver to support Cisco/Aironet PCMCIA
+ 802.11 wireless cards. This driver is the same as the Aironet
+diff -Naur linux-2.6.16/drivers/pcmcia/ds.c linux-2.6.16.16/drivers/pcmcia/ds.c
+--- linux-2.6.16/drivers/pcmcia/ds.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/pcmcia/ds.c 2006-05-11 04:56:24.000000000 +0300
+@@ -546,7 +546,7 @@
+ tmp = vers1->str + vers1->ofs[i];
+
+ length = strlen(tmp) + 1;
+- if ((length < 3) || (length > 255))
++ if ((length < 2) || (length > 255))
+ continue;
+
+ p_dev->prod_id[i] = kmalloc(sizeof(char) * length,
+diff -Naur linux-2.6.16/drivers/scsi/3w-9xxx.c linux-2.6.16.16/drivers/scsi/3w-9xxx.c
+--- linux-2.6.16/drivers/scsi/3w-9xxx.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/scsi/3w-9xxx.c 2006-05-11 04:56:24.000000000 +0300
+@@ -85,7 +85,7 @@
+ #include "3w-9xxx.h"
+
+ /* Globals */
+-#define TW_DRIVER_VERSION "2.26.02.005"
++#define TW_DRIVER_VERSION "2.26.02.007"
+ static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT];
+ static unsigned int twa_device_extension_count;
+ static int twa_major = -1;
+@@ -1944,9 +1944,13 @@
+ }
+ if (tw_dev->srb[request_id]->use_sg == 1) {
+ struct scatterlist *sg = (struct scatterlist *)tw_dev->srb[request_id]->request_buffer;
+- char *buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
++ char *buf;
++ unsigned long flags = 0;
++ local_irq_save(flags);
++ buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
+ memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length);
+ kunmap_atomic(buf - sg->offset, KM_IRQ0);
++ local_irq_restore(flags);
+ }
+ }
+ } /* End twa_scsiop_execute_scsi_complete() */
+diff -Naur linux-2.6.16/drivers/scsi/3w-xxxx.c linux-2.6.16.16/drivers/scsi/3w-xxxx.c
+--- linux-2.6.16/drivers/scsi/3w-xxxx.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/scsi/3w-xxxx.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1508,10 +1508,12 @@
+ struct scsi_cmnd *cmd = tw_dev->srb[request_id];
+ void *buf;
+ unsigned int transfer_len;
++ unsigned long flags = 0;
+
+ if (cmd->use_sg) {
+ struct scatterlist *sg =
+ (struct scatterlist *)cmd->request_buffer;
++ local_irq_save(flags);
+ buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
+ transfer_len = min(sg->length, len);
+ } else {
+@@ -1526,6 +1528,7 @@
+
+ sg = (struct scatterlist *)cmd->request_buffer;
+ kunmap_atomic(buf - sg->offset, KM_IRQ0);
++ local_irq_restore(flags);
+ }
+ }
+
+diff -Naur linux-2.6.16/drivers/scsi/sata_mv.c linux-2.6.16.16/drivers/scsi/sata_mv.c
+--- linux-2.6.16/drivers/scsi/sata_mv.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/scsi/sata_mv.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1102,6 +1102,7 @@
+ void __iomem *port_mmio = mv_ap_base(ap);
+ struct mv_port_priv *pp = ap->private_data;
+ u32 out_ptr;
++ u8 ata_status;
+
+ out_ptr = readl(port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
+
+@@ -1109,6 +1110,8 @@
+ assert(((out_ptr >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK) ==
+ pp->rsp_consumer);
+
++ ata_status = pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT;
++
+ /* increment our consumer index... */
+ pp->rsp_consumer = mv_inc_q_index(&pp->rsp_consumer);
+
+@@ -1123,7 +1126,7 @@
+ writelfl(out_ptr, port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
+
+ /* Return ATA status register for completed CRPB */
+- return (pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT);
++ return ata_status;
+ }
+
+ /**
+@@ -1192,7 +1195,6 @@
+ u32 hc_irq_cause;
+ int shift, port, port0, hard_port, handled;
+ unsigned int err_mask;
+- u8 ata_status = 0;
+
+ if (hc == 0) {
+ port0 = 0;
+@@ -1210,6 +1212,7 @@
+ hc,relevant,hc_irq_cause);
+
+ for (port = port0; port < port0 + MV_PORTS_PER_HC; port++) {
++ u8 ata_status = 0;
+ ap = host_set->ports[port];
+ hard_port = port & MV_PORT_MASK; /* range 0-3 */
+ handled = 0; /* ensure ata_status is set if handled++ */
+diff -Naur linux-2.6.16/drivers/usb/core/message.c linux-2.6.16.16/drivers/usb/core/message.c
+--- linux-2.6.16/drivers/usb/core/message.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/usb/core/message.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1388,11 +1388,13 @@
+ if (dev->state != USB_STATE_ADDRESS)
+ usb_disable_device (dev, 1); // Skip ep0
+
+- i = dev->bus_mA - cp->desc.bMaxPower * 2;
+- if (i < 0)
+- dev_warn(&dev->dev, "new config #%d exceeds power "
+- "limit by %dmA\n",
+- configuration, -i);
++ if (cp) {
++ i = dev->bus_mA - cp->desc.bMaxPower * 2;
++ if (i < 0)
++ dev_warn(&dev->dev, "new config #%d exceeds power "
++ "limit by %dmA\n",
++ configuration, -i);
++ }
+
+ if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+ USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
+diff -Naur linux-2.6.16/drivers/usb/host/ehci-sched.c linux-2.6.16.16/drivers/usb/host/ehci-sched.c
+--- linux-2.6.16/drivers/usb/host/ehci-sched.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/usb/host/ehci-sched.c 2006-05-11 04:56:24.000000000 +0300
+@@ -707,6 +707,7 @@
+ } else {
+ u32 addr;
+ int think_time;
++ int hs_transfers;
+
+ addr = dev->ttport << 24;
+ if (!ehci_is_TDI(ehci)
+@@ -719,6 +720,7 @@
+ think_time = dev->tt ? dev->tt->think_time : 0;
+ stream->tt_usecs = NS_TO_US (think_time + usb_calc_bus_time (
+ dev->speed, is_input, 1, maxp));
++ hs_transfers = max (1u, (maxp + 187) / 188);
+ if (is_input) {
+ u32 tmp;
+
+@@ -727,12 +729,11 @@
+ stream->usecs = HS_USECS_ISO (1);
+ stream->raw_mask = 1;
+
+- /* pessimistic c-mask */
+- tmp = usb_calc_bus_time (USB_SPEED_FULL, 1, 0, maxp)
+- / (125 * 1000);
+- stream->raw_mask |= 3 << (tmp + 9);
++ /* c-mask as specified in USB 2.0 11.18.4 3.c */
++ tmp = (1 << (hs_transfers + 2)) - 1;
++ stream->raw_mask |= tmp << (8 + 2);
+ } else
+- stream->raw_mask = smask_out [maxp / 188];
++ stream->raw_mask = smask_out [hs_transfers - 1];
+ bandwidth = stream->usecs + stream->c_usecs;
+ bandwidth /= 1 << (interval + 2);
+
+diff -Naur linux-2.6.16/drivers/usb/serial/console.c linux-2.6.16.16/drivers/usb/serial/console.c
+--- linux-2.6.16/drivers/usb/serial/console.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/usb/serial/console.c 2006-05-11 04:56:24.000000000 +0300
+@@ -54,7 +54,7 @@
+ * serial.c code, except that the specifier is "ttyUSB" instead
+ * of "ttyS".
+ */
+-static int __init usb_console_setup(struct console *co, char *options)
++static int usb_console_setup(struct console *co, char *options)
+ {
+ struct usbcons_info *info = &usbcons_info;
+ int baud = 9600;
+diff -Naur linux-2.6.16/drivers/usb/serial/option.c linux-2.6.16.16/drivers/usb/serial/option.c
+--- linux-2.6.16/drivers/usb/serial/option.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/usb/serial/option.c 2006-05-11 04:56:24.000000000 +0300
+@@ -582,14 +582,14 @@
+ portdata = usb_get_serial_port_data(port);
+
+ /* Do indat endpoints first */
+- for (j = 0; j <= N_IN_URB; ++j) {
++ for (j = 0; j < N_IN_URB; ++j) {
+ portdata->in_urbs[j] = option_setup_urb (serial,
+ port->bulk_in_endpointAddress, USB_DIR_IN, port,
+ portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
+ }
+
+ /* outdat endpoints */
+- for (j = 0; j <= N_OUT_URB; ++j) {
++ for (j = 0; j < N_OUT_URB; ++j) {
+ portdata->out_urbs[j] = option_setup_urb (serial,
+ port->bulk_out_endpointAddress, USB_DIR_OUT, port,
+ portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
+diff -Naur linux-2.6.16/drivers/usb/storage/Kconfig linux-2.6.16.16/drivers/usb/storage/Kconfig
+--- linux-2.6.16/drivers/usb/storage/Kconfig 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/usb/storage/Kconfig 2006-05-11 04:56:24.000000000 +0300
+@@ -48,7 +48,8 @@
+
+ config USB_STORAGE_ISD200
+ bool "ISD-200 USB/ATA Bridge support"
+- depends on USB_STORAGE && BLK_DEV_IDE
++ depends on USB_STORAGE
++ depends on BLK_DEV_IDE=y || BLK_DEV_IDE=USB_STORAGE
+ ---help---
+ Say Y here if you want to use USB Mass Store devices based
+ on the In-Systems Design ISD-200 USB/ATA bridge.
+diff -Naur linux-2.6.16/drivers/video/cfbimgblt.c linux-2.6.16.16/drivers/video/cfbimgblt.c
+--- linux-2.6.16/drivers/video/cfbimgblt.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/video/cfbimgblt.c 2006-05-11 04:56:24.000000000 +0300
+@@ -169,7 +169,7 @@
+
+ while (j--) {
+ l--;
+- color = (*s & 1 << (FB_BIT_NR(l))) ? fgcolor : bgcolor;
++ color = (*s & (1 << l)) ? fgcolor : bgcolor;
+ val |= FB_SHIFT_HIGH(color, shift);
+
+ /* Did the bitshift spill bits to the next long? */
+diff -Naur linux-2.6.16/drivers/video/fbmem.c linux-2.6.16.16/drivers/video/fbmem.c
+--- linux-2.6.16/drivers/video/fbmem.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/video/fbmem.c 2006-05-11 04:56:24.000000000 +0300
+@@ -669,13 +669,19 @@
+ total_size = info->fix.smem_len;
+
+ if (p > total_size)
+- return 0;
++ return -EFBIG;
+
+- if (count >= total_size)
++ if (count > total_size) {
++ err = -EFBIG;
+ count = total_size;
++ }
++
++ if (count + p > total_size) {
++ if (!err)
++ err = -ENOSPC;
+
+- if (count + p > total_size)
+ count = total_size - p;
++ }
+
+ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count,
+ GFP_KERNEL);
+@@ -717,7 +723,7 @@
+
+ kfree(buffer);
+
+- return (err) ? err : cnt;
++ return (cnt) ? cnt : err;
+ }
+
+ #ifdef CONFIG_KMOD
+diff -Naur linux-2.6.16/drivers/video/i810/i810_main.c linux-2.6.16.16/drivers/video/i810/i810_main.c
+--- linux-2.6.16/drivers/video/i810/i810_main.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/drivers/video/i810/i810_main.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1508,7 +1508,7 @@
+ int size = ((cursor->image.width + 7) >> 3) *
+ cursor->image.height;
+ int i;
+- u8 *data = kmalloc(64 * 8, GFP_KERNEL);
++ u8 *data = kmalloc(64 * 8, GFP_ATOMIC);
+
+ if (data == NULL)
+ return -ENOMEM;
+diff -Naur linux-2.6.16/fs/9p/vfs_inode.c linux-2.6.16.16/fs/9p/vfs_inode.c
+--- linux-2.6.16/fs/9p/vfs_inode.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/9p/vfs_inode.c 2006-05-11 04:56:24.000000000 +0300
+@@ -614,6 +614,7 @@
+
+ sb = dir->i_sb;
+ v9ses = v9fs_inode2v9ses(dir);
++ dentry->d_op = &v9fs_dentry_operations;
+ dirfid = v9fs_fid_lookup(dentry->d_parent);
+
+ if (!dirfid) {
+@@ -681,8 +682,6 @@
+ goto FreeFcall;
+
+ fid->qid = fcall->params.rstat.stat.qid;
+-
+- dentry->d_op = &v9fs_dentry_operations;
+ v9fs_stat2inode(&fcall->params.rstat.stat, inode, inode->i_sb);
+
+ d_add(dentry, inode);
+diff -Naur linux-2.6.16/fs/char_dev.c linux-2.6.16.16/fs/char_dev.c
+--- linux-2.6.16/fs/char_dev.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/char_dev.c 2006-05-11 04:56:24.000000000 +0300
+@@ -15,6 +15,7 @@
+ #include <linux/module.h>
+ #include <linux/smp_lock.h>
+ #include <linux/devfs_fs_kernel.h>
++#include <linux/seq_file.h>
+
+ #include <linux/kobject.h>
+ #include <linux/kobj_map.h>
+@@ -26,8 +27,6 @@
+
+ static struct kobj_map *cdev_map;
+
+-#define MAX_PROBE_HASH 255 /* random */
+-
+ static DECLARE_MUTEX(chrdevs_lock);
+
+ static struct char_device_struct {
+@@ -38,93 +37,29 @@
+ char name[64];
+ struct file_operations *fops;
+ struct cdev *cdev; /* will die */
+-} *chrdevs[MAX_PROBE_HASH];
++} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
+
+ /* index in the above */
+ static inline int major_to_index(int major)
+ {
+- return major % MAX_PROBE_HASH;
+-}
+-
+-struct chrdev_info {
+- int index;
+- struct char_device_struct *cd;
+-};
+-
+-void *get_next_chrdev(void *dev)
+-{
+- struct chrdev_info *info;
+-
+- if (dev == NULL) {
+- info = kmalloc(sizeof(*info), GFP_KERNEL);
+- if (!info)
+- goto out;
+- info->index=0;
+- info->cd = chrdevs[info->index];
+- if (info->cd)
+- goto out;
+- } else {
+- info = dev;
+- }
+-
+- while (info->index < ARRAY_SIZE(chrdevs)) {
+- if (info->cd)
+- info->cd = info->cd->next;
+- if (info->cd)
+- goto out;
+- /*
+- * No devices on this chain, move to the next
+- */
+- info->index++;
+- info->cd = (info->index < ARRAY_SIZE(chrdevs)) ?
+- chrdevs[info->index] : NULL;
+- if (info->cd)
+- goto out;
+- }
+-
+-out:
+- return info;
+-}
+-
+-void *acquire_chrdev_list(void)
+-{
+- down(&chrdevs_lock);
+- return get_next_chrdev(NULL);
+-}
+-
+-void release_chrdev_list(void *dev)
+-{
+- up(&chrdevs_lock);
+- kfree(dev);
++ return major % CHRDEV_MAJOR_HASH_SIZE;
+ }
+
++#ifdef CONFIG_PROC_FS
+
+-int count_chrdev_list(void)
++void chrdev_show(struct seq_file *f, off_t offset)
+ {
+ struct char_device_struct *cd;
+- int i, count;
+-
+- count = 0;
+
+- for (i = 0; i < ARRAY_SIZE(chrdevs) ; i++) {
+- for (cd = chrdevs[i]; cd; cd = cd->next)
+- count++;
++ if (offset < CHRDEV_MAJOR_HASH_SIZE) {
++ down(&chrdevs_lock);
++ for (cd = chrdevs[offset]; cd; cd = cd->next)
++ seq_printf(f, "%3d %s\n", cd->major, cd->name);
++ up(&chrdevs_lock);
+ }
+-
+- return count;
+ }
+
+-int get_chrdev_info(void *dev, int *major, char **name)
+-{
+- struct chrdev_info *info = dev;
+-
+- if (info->cd == NULL)
+- return 1;
+-
+- *major = info->cd->major;
+- *name = info->cd->name;
+- return 0;
+-}
++#endif /* CONFIG_PROC_FS */
+
+ /*
+ * Register a single major with a specified minor range.
+diff -Naur linux-2.6.16/fs/cifs/cifsencrypt.c linux-2.6.16.16/fs/cifs/cifsencrypt.c
+--- linux-2.6.16/fs/cifs/cifsencrypt.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/cifs/cifsencrypt.c 2006-05-11 04:56:24.000000000 +0300
+@@ -56,9 +56,6 @@
+ int rc = 0;
+ char smb_signature[20];
+
+- /* BB remember to initialize sequence number elsewhere and initialize mac_signing key elsewhere BB */
+- /* BB remember to add code to save expected sequence number in midQ entry BB */
+-
+ if((cifs_pdu == NULL) || (server == NULL))
+ return -EINVAL;
+
+@@ -85,20 +82,33 @@
+ static int cifs_calc_signature2(const struct kvec * iov, int n_vec,
+ const char * key, char * signature)
+ {
+- struct MD5Context context;
+-
+- if((iov == NULL) || (signature == NULL))
+- return -EINVAL;
++ struct MD5Context context;
++ int i;
+
+- MD5Init(&context);
+- MD5Update(&context,key,CIFS_SESSION_KEY_SIZE+16);
++ if((iov == NULL) || (signature == NULL))
++ return -EINVAL;
+
+-/* MD5Update(&context,cifs_pdu->Protocol,cifs_pdu->smb_buf_length); */ /* BB FIXME BB */
++ MD5Init(&context);
++ MD5Update(&context,key,CIFS_SESSION_KEY_SIZE+16);
++ for(i=0;i<n_vec;i++) {
++ if(iov[i].iov_base == NULL) {
++ cERROR(1,("null iovec entry"));
++ return -EIO;
++ } else if(iov[i].iov_len == 0)
++ break; /* bail out if we are sent nothing to sign */
++ /* The first entry includes a length field (which does not get
++ signed that occupies the first 4 bytes before the header */
++ if(i==0) {
++ if (iov[0].iov_len <= 8 ) /* cmd field at offset 9 */
++ break; /* nothing to sign or corrupt header */
++ MD5Update(&context,iov[0].iov_base+4, iov[0].iov_len-4);
++ } else
++ MD5Update(&context,iov[i].iov_base, iov[i].iov_len);
++ }
+
+- MD5Final(signature,&context);
++ MD5Final(signature,&context);
+
+- return -EOPNOTSUPP;
+-/* return 0; */
++ return 0;
+ }
+
+
+diff -Naur linux-2.6.16/fs/cifs/dir.c linux-2.6.16.16/fs/cifs/dir.c
+--- linux-2.6.16/fs/cifs/dir.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/cifs/dir.c 2006-05-11 04:56:24.000000000 +0300
+@@ -441,6 +441,20 @@
+ cifs_sb = CIFS_SB(parent_dir_inode->i_sb);
+ pTcon = cifs_sb->tcon;
+
++ /*
++ * Don't allow the separator character in a path component.
++ * The VFS will not allow "/", but "\" is allowed by posix.
++ */
++ if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)) {
++ int i;
++ for (i = 0; i < direntry->d_name.len; i++)
++ if (direntry->d_name.name[i] == '\\') {
++ cFYI(1, ("Invalid file name"));
++ FreeXid(xid);
++ return ERR_PTR(-EINVAL);
++ }
++ }
++
+ /* can not grab the rename sem here since it would
+ deadlock in the cases (beginning of sys_rename itself)
+ in which we already have the sb rename sem */
+diff -Naur linux-2.6.16/fs/compat.c linux-2.6.16.16/fs/compat.c
+--- linux-2.6.16/fs/compat.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/compat.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1215,6 +1215,10 @@
+ if (ret < 0)
+ goto out;
+
++ ret = security_file_permission(file, type == READ ? MAY_READ:MAY_WRITE);
++ if (ret)
++ goto out;
++
+ fnv = NULL;
+ if (type == READ) {
+ fn = file->f_op->read;
+diff -Naur linux-2.6.16/fs/ext3/resize.c linux-2.6.16.16/fs/ext3/resize.c
+--- linux-2.6.16/fs/ext3/resize.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/ext3/resize.c 2006-05-11 04:56:24.000000000 +0300
+@@ -974,6 +974,7 @@
+ if (o_blocks_count != le32_to_cpu(es->s_blocks_count)) {
+ ext3_warning(sb, __FUNCTION__,
+ "multiple resizers run on filesystem!");
++ unlock_super(sb);
+ err = -EBUSY;
+ goto exit_put;
+ }
+diff -Naur linux-2.6.16/fs/fuse/file.c linux-2.6.16.16/fs/fuse/file.c
+--- linux-2.6.16/fs/fuse/file.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/fuse/file.c 2006-05-11 04:56:24.000000000 +0300
+@@ -397,8 +397,12 @@
+ return -EINTR;
+
+ err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
+- if (!err)
+- fuse_send_readpages(data.req, file, inode);
++ if (!err) {
++ if (data.req->num_pages)
++ fuse_send_readpages(data.req, file, inode);
++ else
++ fuse_put_request(fc, data.req);
++ }
+ return err;
+ }
+
+diff -Naur linux-2.6.16/fs/locks.c linux-2.6.16.16/fs/locks.c
+--- linux-2.6.16/fs/locks.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/locks.c 2006-05-11 04:56:24.000000000 +0300
+@@ -432,15 +432,14 @@
+ */
+ static int lease_init(struct file *filp, int type, struct file_lock *fl)
+ {
++ if (assign_type(fl, type) != 0)
++ return -EINVAL;
++
+ fl->fl_owner = current->files;
+ fl->fl_pid = current->tgid;
+
+ fl->fl_file = filp;
+ fl->fl_flags = FL_LEASE;
+- if (assign_type(fl, type) != 0) {
+- locks_free_lock(fl);
+- return -EINVAL;
+- }
+ fl->fl_start = 0;
+ fl->fl_end = OFFSET_MAX;
+ fl->fl_ops = NULL;
+@@ -452,16 +451,19 @@
+ static int lease_alloc(struct file *filp, int type, struct file_lock **flp)
+ {
+ struct file_lock *fl = locks_alloc_lock();
+- int error;
++ int error = -ENOMEM;
+
+ if (fl == NULL)
+- return -ENOMEM;
++ goto out;
+
+ error = lease_init(filp, type, fl);
+- if (error)
+- return error;
++ if (error) {
++ locks_free_lock(fl);
++ fl = NULL;
++ }
++out:
+ *flp = fl;
+- return 0;
++ return error;
+ }
+
+ /* Check if two locks overlap each other.
+@@ -1337,6 +1339,7 @@
+ goto out;
+
+ if (my_before != NULL) {
++ *flp = *my_before;
+ error = lease->fl_lmops->fl_change(my_before, arg);
+ goto out;
+ }
+@@ -2212,7 +2215,12 @@
+
+ lock_kernel();
+ j = 0;
+- rcu_read_lock();
++
++ /*
++ * We are not taking a ref to the file structures, so
++ * we need to acquire ->file_lock.
++ */
++ spin_lock(&files->file_lock);
+ fdt = files_fdtable(files);
+ for (;;) {
+ unsigned long set;
+@@ -2230,7 +2238,7 @@
+ set >>= 1;
+ }
+ }
+- rcu_read_unlock();
++ spin_unlock(&files->file_lock);
+ unlock_kernel();
+ }
+ EXPORT_SYMBOL(steal_locks);
+diff -Naur linux-2.6.16/fs/nfsd/nfs3proc.c linux-2.6.16.16/fs/nfsd/nfs3proc.c
+--- linux-2.6.16/fs/nfsd/nfs3proc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/nfsd/nfs3proc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -682,7 +682,7 @@
+ PROC(lookup, dirop, dirop, fhandle2, RC_NOCACHE, ST+FH+pAT+pAT),
+ PROC(access, access, access, fhandle, RC_NOCACHE, ST+pAT+1),
+ PROC(readlink, readlink, readlink, fhandle, RC_NOCACHE, ST+pAT+1+NFS3_MAXPATHLEN/4),
+- PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE),
++ PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE/4),
+ PROC(write, write, write, fhandle, RC_REPLBUFF, ST+WC+4),
+ PROC(create, create, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
+ PROC(mkdir, mkdir, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
+diff -Naur linux-2.6.16/fs/nfsd/nfs4proc.c linux-2.6.16.16/fs/nfsd/nfs4proc.c
+--- linux-2.6.16/fs/nfsd/nfs4proc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/nfsd/nfs4proc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -975,7 +975,7 @@
+ */
+ static struct svc_procedure nfsd_procedures4[2] = {
+ PROC(null, void, void, void, RC_NOCACHE, 1),
+- PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE)
++ PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE/4)
+ };
+
+ struct svc_version nfsd_version4 = {
+diff -Naur linux-2.6.16/fs/nfsd/nfsproc.c linux-2.6.16.16/fs/nfsd/nfsproc.c
+--- linux-2.6.16/fs/nfsd/nfsproc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/nfsd/nfsproc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -553,7 +553,7 @@
+ PROC(none, void, void, none, RC_NOCACHE, ST),
+ PROC(lookup, diropargs, diropres, fhandle, RC_NOCACHE, ST+FH+AT),
+ PROC(readlink, readlinkargs, readlinkres, none, RC_NOCACHE, ST+1+NFS_MAXPATHLEN/4),
+- PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE),
++ PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE/4),
+ PROC(none, void, void, none, RC_NOCACHE, ST),
+ PROC(write, writeargs, attrstat, fhandle, RC_REPLBUFF, ST+AT),
+ PROC(create, createargs, diropres, fhandle, RC_REPLBUFF, ST+FH+AT),
+diff -Naur linux-2.6.16/fs/open.c linux-2.6.16.16/fs/open.c
+--- linux-2.6.16/fs/open.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/open.c 2006-05-11 04:56:24.000000000 +0300
+@@ -330,7 +330,10 @@
+
+ asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length)
+ {
+- return do_sys_ftruncate(fd, length, 1);
++ long ret = do_sys_ftruncate(fd, length, 1);
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ /* LFS versions of truncate are only needed on 32 bit machines */
+@@ -342,7 +345,10 @@
+
+ asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length)
+ {
+- return do_sys_ftruncate(fd, length, 0);
++ long ret = do_sys_ftruncate(fd, length, 0);
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+ #endif
+
+@@ -1083,20 +1089,30 @@
+
+ asmlinkage long sys_open(const char __user *filename, int flags, int mode)
+ {
++ long ret;
++
+ if (force_o_largefile())
+ flags |= O_LARGEFILE;
+
+- return do_sys_open(AT_FDCWD, filename, flags, mode);
++ ret = do_sys_open(AT_FDCWD, filename, flags, mode);
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+ EXPORT_SYMBOL_GPL(sys_open);
+
+ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
+ int mode)
+ {
++ long ret;
++
+ if (force_o_largefile())
+ flags |= O_LARGEFILE;
+
+- return do_sys_open(dfd, filename, flags, mode);
++ ret = do_sys_open(dfd, filename, flags, mode);
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+ EXPORT_SYMBOL_GPL(sys_openat);
+
+diff -Naur linux-2.6.16/fs/partitions/check.c linux-2.6.16.16/fs/partitions/check.c
+--- linux-2.6.16/fs/partitions/check.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/partitions/check.c 2006-05-11 04:56:24.000000000 +0300
+@@ -345,6 +345,7 @@
+ char *name;
+ static char *block_str = "block:";
+ int size;
++ char *s;
+
+ size = strlen(block_str) + strlen(disk->disk_name) + 1;
+ name = kmalloc(size, GFP_KERNEL);
+@@ -352,6 +353,10 @@
+ return NULL;
+ strcpy(name, block_str);
+ strcat(name, disk->disk_name);
++ /* ewww... some of these buggers have / in name... */
++ s = strchr(name, '/');
++ if (s)
++ *s = '!';
+ return name;
+ }
+
+diff -Naur linux-2.6.16/fs/proc/base.c linux-2.6.16.16/fs/proc/base.c
+--- linux-2.6.16/fs/proc/base.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/proc/base.c 2006-05-11 04:56:24.000000000 +0300
+@@ -294,16 +294,20 @@
+
+ files = get_files_struct(task);
+ if (files) {
+- rcu_read_lock();
++ /*
++ * We are not taking a ref to the file structure, so we must
++ * hold ->file_lock.
++ */
++ spin_lock(&files->file_lock);
+ file = fcheck_files(files, fd);
+ if (file) {
+ *mnt = mntget(file->f_vfsmnt);
+ *dentry = dget(file->f_dentry);
+- rcu_read_unlock();
++ spin_unlock(&files->file_lock);
+ put_files_struct(files);
+ return 0;
+ }
+- rcu_read_unlock();
++ spin_unlock(&files->file_lock);
+ put_files_struct(files);
+ }
+ return -ENOENT;
+@@ -1485,7 +1489,12 @@
+ if (!files)
+ goto out_unlock;
+ inode->i_mode = S_IFLNK;
+- rcu_read_lock();
++
++ /*
++ * We are not taking a ref to the file structure, so we must
++ * hold ->file_lock.
++ */
++ spin_lock(&files->file_lock);
+ file = fcheck_files(files, fd);
+ if (!file)
+ goto out_unlock2;
+@@ -1493,7 +1502,7 @@
+ inode->i_mode |= S_IRUSR | S_IXUSR;
+ if (file->f_mode & 2)
+ inode->i_mode |= S_IWUSR | S_IXUSR;
+- rcu_read_unlock();
++ spin_unlock(&files->file_lock);
+ put_files_struct(files);
+ inode->i_op = &proc_pid_link_inode_operations;
+ inode->i_size = 64;
+@@ -1503,7 +1512,7 @@
+ return NULL;
+
+ out_unlock2:
+- rcu_read_unlock();
++ spin_unlock(&files->file_lock);
+ put_files_struct(files);
+ out_unlock:
+ iput(inode);
+diff -Naur linux-2.6.16/fs/proc/proc_misc.c linux-2.6.16.16/fs/proc/proc_misc.c
+--- linux-2.6.16/fs/proc/proc_misc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/proc/proc_misc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -249,144 +249,60 @@
+ return seq_open(file, &cpuinfo_op);
+ }
+
+-enum devinfo_states {
+- CHR_HDR,
+- CHR_LIST,
+- BLK_HDR,
+- BLK_LIST,
+- DEVINFO_DONE
+-};
+-
+-struct devinfo_state {
+- void *chrdev;
+- void *blkdev;
+- unsigned int num_records;
+- unsigned int cur_record;
+- enum devinfo_states state;
++static struct file_operations proc_cpuinfo_operations = {
++ .open = cpuinfo_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = seq_release,
+ };
+
+-static void *devinfo_start(struct seq_file *f, loff_t *pos)
++static int devinfo_show(struct seq_file *f, void *v)
+ {
+- struct devinfo_state *info = f->private;
++ int i = *(loff_t *) v;
+
+- if (*pos) {
+- if ((info) && (*pos <= info->num_records))
+- return info;
+- return NULL;
++ if (i < CHRDEV_MAJOR_HASH_SIZE) {
++ if (i == 0)
++ seq_printf(f, "Character devices:\n");
++ chrdev_show(f, i);
++ } else {
++ i -= CHRDEV_MAJOR_HASH_SIZE;
++ if (i == 0)
++ seq_printf(f, "\nBlock devices:\n");
++ blkdev_show(f, i);
+ }
+- info = kmalloc(sizeof(*info), GFP_KERNEL);
+- f->private = info;
+- info->chrdev = acquire_chrdev_list();
+- info->blkdev = acquire_blkdev_list();
+- info->state = CHR_HDR;
+- info->num_records = count_chrdev_list();
+- info->num_records += count_blkdev_list();
+- info->num_records += 2; /* Character and Block headers */
+- *pos = 1;
+- info->cur_record = *pos;
+- return info;
++ return 0;
+ }
+
+-static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
++static void *devinfo_start(struct seq_file *f, loff_t *pos)
+ {
+- int idummy;
+- char *ndummy;
+- struct devinfo_state *info = f->private;
+-
+- switch (info->state) {
+- case CHR_HDR:
+- info->state = CHR_LIST;
+- (*pos)++;
+- /*fallthrough*/
+- case CHR_LIST:
+- if (get_chrdev_info(info->chrdev,&idummy,&ndummy)) {
+- /*
+- * The character dev list is complete
+- */
+- info->state = BLK_HDR;
+- } else {
+- info->chrdev = get_next_chrdev(info->chrdev);
+- }
+- (*pos)++;
+- break;
+- case BLK_HDR:
+- info->state = BLK_LIST;
+- (*pos)++;
+- break;
+- case BLK_LIST:
+- if (get_blkdev_info(info->blkdev,&idummy,&ndummy)) {
+- /*
+- * The block dev list is complete
+- */
+- info->state = DEVINFO_DONE;
+- } else {
+- info->blkdev = get_next_blkdev(info->blkdev);
+- }
+- (*pos)++;
+- break;
+- case DEVINFO_DONE:
+- (*pos)++;
+- info->cur_record = *pos;
+- info = NULL;
+- break;
+- default:
+- break;
+- }
+- if (info)
+- info->cur_record = *pos;
+- return info;
++ if (*pos < (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
++ return pos;
++ return NULL;
+ }
+
+-static void devinfo_stop(struct seq_file *f, void *v)
++static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
+ {
+- struct devinfo_state *info = f->private;
+-
+- if (info) {
+- release_chrdev_list(info->chrdev);
+- release_blkdev_list(info->blkdev);
+- f->private = NULL;
+- kfree(info);
+- }
++ (*pos)++;
++ if (*pos >= (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
++ return NULL;
++ return pos;
+ }
+
+-static int devinfo_show(struct seq_file *f, void *arg)
++static void devinfo_stop(struct seq_file *f, void *v)
+ {
+- int major;
+- char *name;
+- struct devinfo_state *info = f->private;
+-
+- switch(info->state) {
+- case CHR_HDR:
+- seq_printf(f,"Character devices:\n");
+- /* fallthrough */
+- case CHR_LIST:
+- if (!get_chrdev_info(info->chrdev,&major,&name))
+- seq_printf(f,"%3d %s\n",major,name);
+- break;
+- case BLK_HDR:
+- seq_printf(f,"\nBlock devices:\n");
+- /* fallthrough */
+- case BLK_LIST:
+- if (!get_blkdev_info(info->blkdev,&major,&name))
+- seq_printf(f,"%3d %s\n",major,name);
+- break;
+- default:
+- break;
+- }
+-
+- return 0;
++ /* Nothing to do */
+ }
+
+-static struct seq_operations devinfo_op = {
+- .start = devinfo_start,
+- .next = devinfo_next,
+- .stop = devinfo_stop,
+- .show = devinfo_show,
++static struct seq_operations devinfo_ops = {
++ .start = devinfo_start,
++ .next = devinfo_next,
++ .stop = devinfo_stop,
++ .show = devinfo_show
+ };
+
+-static int devinfo_open(struct inode *inode, struct file *file)
++static int devinfo_open(struct inode *inode, struct file *filp)
+ {
+- return seq_open(file, &devinfo_op);
++ return seq_open(filp, &devinfo_ops);
+ }
+
+ static struct file_operations proc_devinfo_operations = {
+@@ -396,13 +312,6 @@
+ .release = seq_release,
+ };
+
+-static struct file_operations proc_cpuinfo_operations = {
+- .open = cpuinfo_open,
+- .read = seq_read,
+- .llseek = seq_lseek,
+- .release = seq_release,
+-};
+-
+ extern struct seq_operations vmstat_op;
+ static int vmstat_open(struct inode *inode, struct file *file)
+ {
+diff -Naur linux-2.6.16/fs/proc/vmcore.c linux-2.6.16.16/fs/proc/vmcore.c
+--- linux-2.6.16/fs/proc/vmcore.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/proc/vmcore.c 2006-05-11 04:56:24.000000000 +0300
+@@ -103,8 +103,8 @@
+ size_t buflen, loff_t *fpos)
+ {
+ ssize_t acc = 0, tmp;
+- size_t tsz, nr_bytes;
+- u64 start;
++ size_t tsz;
++ u64 start, nr_bytes;
+ struct vmcore *curr_m = NULL;
+
+ if (buflen == 0 || *fpos >= vmcore_size)
+diff -Naur linux-2.6.16/fs/reiserfs/xattr_acl.c linux-2.6.16.16/fs/reiserfs/xattr_acl.c
+--- linux-2.6.16/fs/reiserfs/xattr_acl.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/reiserfs/xattr_acl.c 2006-05-11 04:56:24.000000000 +0300
+@@ -408,8 +408,9 @@
+ acl = reiserfs_get_acl(inode, ACL_TYPE_DEFAULT);
+ reiserfs_read_unlock_xattrs(inode->i_sb);
+ reiserfs_read_unlock_xattr_i(inode);
+- ret = acl ? 1 : 0;
+- posix_acl_release(acl);
++ ret = (acl && !IS_ERR(acl));
++ if (ret)
++ posix_acl_release(acl);
+ }
+
+ return ret;
+diff -Naur linux-2.6.16/fs/smbfs/dir.c linux-2.6.16.16/fs/smbfs/dir.c
+--- linux-2.6.16/fs/smbfs/dir.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/smbfs/dir.c 2006-05-11 04:56:24.000000000 +0300
+@@ -434,6 +434,11 @@
+ if (dentry->d_name.len > SMB_MAXNAMELEN)
+ goto out;
+
++ /* Do not allow lookup of names with backslashes in */
++ error = -EINVAL;
++ if (memchr(dentry->d_name.name, '\\', dentry->d_name.len))
++ goto out;
++
+ lock_kernel();
+ error = smb_proc_getattr(dentry, &finfo);
+ #ifdef SMBFS_PARANOIA
+diff -Naur linux-2.6.16/fs/sysfs/dir.c linux-2.6.16.16/fs/sysfs/dir.c
+--- linux-2.6.16/fs/sysfs/dir.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/sysfs/dir.c 2006-05-11 04:56:24.000000000 +0300
+@@ -302,6 +302,7 @@
+ * Drop reference from dget() on entrance.
+ */
+ dput(dentry);
++ kobj->dentry = NULL;
+ }
+
+ int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
+diff -Naur linux-2.6.16/fs/sysfs/file.c linux-2.6.16.16/fs/sysfs/file.c
+--- linux-2.6.16/fs/sysfs/file.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/sysfs/file.c 2006-05-11 04:56:24.000000000 +0300
+@@ -183,7 +183,7 @@
+ return -ENOMEM;
+
+ if (count >= PAGE_SIZE)
+- count = PAGE_SIZE;
++ count = PAGE_SIZE - 1;
+ error = copy_from_user(buffer->page,buf,count);
+ buffer->needs_read_fill = 1;
+ return error ? -EFAULT : count;
+diff -Naur linux-2.6.16/fs/sysfs/inode.c linux-2.6.16.16/fs/sysfs/inode.c
+--- linux-2.6.16/fs/sysfs/inode.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/sysfs/inode.c 2006-05-11 04:56:24.000000000 +0300
+@@ -227,12 +227,16 @@
+ void sysfs_hash_and_remove(struct dentry * dir, const char * name)
+ {
+ struct sysfs_dirent * sd;
+- struct sysfs_dirent * parent_sd = dir->d_fsdata;
++ struct sysfs_dirent * parent_sd;
++
++ if (!dir)
++ return;
+
+ if (dir->d_inode == NULL)
+ /* no inode means this hasn't been made visible yet */
+ return;
+
++ parent_sd = dir->d_fsdata;
+ mutex_lock(&dir->d_inode->i_mutex);
+ list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
+ if (!sd->s_element)
+diff -Naur linux-2.6.16/fs/sysfs/symlink.c linux-2.6.16.16/fs/sysfs/symlink.c
+--- linux-2.6.16/fs/sysfs/symlink.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/sysfs/symlink.c 2006-05-11 04:56:24.000000000 +0300
+@@ -66,6 +66,7 @@
+ if (!error)
+ return 0;
+
++ kobject_put(target);
+ kfree(sl->link_name);
+ exit2:
+ kfree(sl);
+diff -Naur linux-2.6.16/fs/xfs/linux-2.6/xfs_aops.c linux-2.6.16.16/fs/xfs/linux-2.6/xfs_aops.c
+--- linux-2.6.16/fs/xfs/linux-2.6/xfs_aops.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/xfs/linux-2.6/xfs_aops.c 2006-05-11 04:56:24.000000000 +0300
+@@ -616,7 +616,7 @@
+ acceptable = (type == IOMAP_UNWRITTEN);
+ else if (buffer_delay(bh))
+ acceptable = (type == IOMAP_DELAY);
+- else if (buffer_mapped(bh))
++ else if (buffer_dirty(bh) && buffer_mapped(bh))
+ acceptable = (type == 0);
+ else
+ break;
+diff -Naur linux-2.6.16/fs/xfs/linux-2.6/xfs_iops.c linux-2.6.16.16/fs/xfs/linux-2.6/xfs_iops.c
+--- linux-2.6.16/fs/xfs/linux-2.6/xfs_iops.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/fs/xfs/linux-2.6/xfs_iops.c 2006-05-11 04:56:24.000000000 +0300
+@@ -673,8 +673,7 @@
+ if (ia_valid & ATTR_ATIME) {
+ vattr.va_mask |= XFS_AT_ATIME;
+ vattr.va_atime = attr->ia_atime;
+- if (ia_valid & ATTR_ATIME_SET)
+- inode->i_atime = attr->ia_atime;
++ inode->i_atime = attr->ia_atime;
+ }
+ if (ia_valid & ATTR_MTIME) {
+ vattr.va_mask |= XFS_AT_MTIME;
+diff -Naur linux-2.6.16/include/asm-i386/cpufeature.h linux-2.6.16.16/include/asm-i386/cpufeature.h
+--- linux-2.6.16/include/asm-i386/cpufeature.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-i386/cpufeature.h 2006-05-11 04:56:24.000000000 +0300
+@@ -70,6 +70,7 @@
+ #define X86_FEATURE_P3 (3*32+ 6) /* P3 */
+ #define X86_FEATURE_P4 (3*32+ 7) /* P4 */
+ #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */
++#define X86_FEATURE_FXSAVE_LEAK (3*32+10) /* FXSAVE leaks FOP/FIP/FOP */
+
+ /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
+ #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */
+diff -Naur linux-2.6.16/include/asm-i386/i387.h linux-2.6.16.16/include/asm-i386/i387.h
+--- linux-2.6.16/include/asm-i386/i387.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-i386/i387.h 2006-05-11 04:56:24.000000000 +0300
+@@ -13,6 +13,7 @@
+
+ #include <linux/sched.h>
+ #include <linux/init.h>
++#include <linux/kernel_stat.h>
+ #include <asm/processor.h>
+ #include <asm/sigcontext.h>
+ #include <asm/user.h>
+@@ -38,17 +39,38 @@
+ extern void kernel_fpu_begin(void);
+ #define kernel_fpu_end() do { stts(); preempt_enable(); } while(0)
+
++/* We need a safe address that is cheap to find and that is already
++ in L1 during context switch. The best choices are unfortunately
++ different for UP and SMP */
++#ifdef CONFIG_SMP
++#define safe_address (__per_cpu_offset[0])
++#else
++#define safe_address (kstat_cpu(0).cpustat.user)
++#endif
++
+ /*
+ * These must be called with preempt disabled
+ */
+ static inline void __save_init_fpu( struct task_struct *tsk )
+ {
++ /* Use more nops than strictly needed in case the compiler
++ varies code */
+ alternative_input(
+- "fnsave %1 ; fwait ;" GENERIC_NOP2,
+- "fxsave %1 ; fnclex",
++ "fnsave %[fx] ;fwait;" GENERIC_NOP8 GENERIC_NOP4,
++ "fxsave %[fx]\n"
++ "bt $7,%[fsw] ; jnc 1f ; fnclex\n1:",
+ X86_FEATURE_FXSR,
+- "m" (tsk->thread.i387.fxsave)
+- :"memory");
++ [fx] "m" (tsk->thread.i387.fxsave),
++ [fsw] "m" (tsk->thread.i387.fxsave.swd) : "memory");
++ /* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception
++ is pending. Clear the x87 state here by setting it to fixed
++ values. safe_address is a random variable that should be in L1 */
++ alternative_input(
++ GENERIC_NOP8 GENERIC_NOP2,
++ "emms\n\t" /* clear stack tags */
++ "fildl %[addr]", /* set F?P to defined value */
++ X86_FEATURE_FXSAVE_LEAK,
++ [addr] "m" (safe_address));
+ task_thread_info(tsk)->status &= ~TS_USEDFPU;
+ }
+
+diff -Naur linux-2.6.16/include/asm-i386/pgtable-2level.h linux-2.6.16.16/include/asm-i386/pgtable-2level.h
+--- linux-2.6.16/include/asm-i386/pgtable-2level.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-i386/pgtable-2level.h 2006-05-11 04:56:24.000000000 +0300
+@@ -18,6 +18,9 @@
+ #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
+ #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
+
++#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
++#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
++
+ #define ptep_get_and_clear(mm,addr,xp) __pte(xchg(&(xp)->pte_low, 0))
+ #define pte_same(a, b) ((a).pte_low == (b).pte_low)
+ #define pte_page(x) pfn_to_page(pte_pfn(x))
+diff -Naur linux-2.6.16/include/asm-i386/pgtable-3level.h linux-2.6.16.16/include/asm-i386/pgtable-3level.h
+--- linux-2.6.16/include/asm-i386/pgtable-3level.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-i386/pgtable-3level.h 2006-05-11 04:56:24.000000000 +0300
+@@ -85,6 +85,26 @@
+ #define pmd_offset(pud, address) ((pmd_t *) pud_page(*(pud)) + \
+ pmd_index(address))
+
++/*
++ * For PTEs and PDEs, we must clear the P-bit first when clearing a page table
++ * entry, so clear the bottom half first and enforce ordering with a compiler
++ * barrier.
++ */
++static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
++{
++ ptep->pte_low = 0;
++ smp_wmb();
++ ptep->pte_high = 0;
++}
++
++static inline void pmd_clear(pmd_t *pmd)
++{
++ u32 *tmp = (u32 *)pmd;
++ *tmp = 0;
++ smp_wmb();
++ *(tmp + 1) = 0;
++}
++
+ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
+ {
+ pte_t res;
+diff -Naur linux-2.6.16/include/asm-i386/pgtable.h linux-2.6.16.16/include/asm-i386/pgtable.h
+--- linux-2.6.16/include/asm-i386/pgtable.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-i386/pgtable.h 2006-05-11 04:56:24.000000000 +0300
+@@ -204,12 +204,10 @@
+ extern unsigned long pg0[];
+
+ #define pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
+-#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
+
+ /* To avoid harmful races, pmd_none(x) should check only the lower when PAE */
+ #define pmd_none(x) (!(unsigned long)pmd_val(x))
+ #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
+-#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
+ #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
+
+
+@@ -269,7 +267,7 @@
+ pte_t pte;
+ if (full) {
+ pte = *ptep;
+- *ptep = __pte(0);
++ pte_clear(mm, addr, ptep);
+ } else {
+ pte = ptep_get_and_clear(mm, addr, ptep);
+ }
+diff -Naur linux-2.6.16/include/asm-m32r/smp.h linux-2.6.16.16/include/asm-m32r/smp.h
+--- linux-2.6.16/include/asm-m32r/smp.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-m32r/smp.h 2006-05-11 04:56:24.000000000 +0300
+@@ -67,7 +67,8 @@
+ #define raw_smp_processor_id() (current_thread_info()->cpu)
+
+ extern cpumask_t cpu_callout_map;
+-#define cpu_possible_map cpu_callout_map
++extern cpumask_t cpu_possible_map;
++extern cpumask_t cpu_present_map;
+
+ static __inline__ int hard_smp_processor_id(void)
+ {
+diff -Naur linux-2.6.16/include/asm-m32r/uaccess.h linux-2.6.16.16/include/asm-m32r/uaccess.h
+--- linux-2.6.16/include/asm-m32r/uaccess.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-m32r/uaccess.h 2006-05-11 04:56:24.000000000 +0300
+@@ -5,17 +5,9 @@
+ * linux/include/asm-m32r/uaccess.h
+ *
+ * M32R version.
+- * Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org>
++ * Copyright (C) 2004, 2006 Hirokazu Takata <takata at linux-m32r.org>
+ */
+
+-#undef UACCESS_DEBUG
+-
+-#ifdef UACCESS_DEBUG
+-#define UAPRINTK(args...) printk(args)
+-#else
+-#define UAPRINTK(args...)
+-#endif /* UACCESS_DEBUG */
+-
+ /*
+ * User space memory access functions
+ */
+@@ -38,27 +30,29 @@
+ #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
+
+ #ifdef CONFIG_MMU
++
+ #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
+ #define USER_DS MAKE_MM_SEG(PAGE_OFFSET)
+-#else
+-#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
+-#define USER_DS MAKE_MM_SEG(0xFFFFFFFF)
+-#endif /* CONFIG_MMU */
+-
+ #define get_ds() (KERNEL_DS)
+-#ifdef CONFIG_MMU
+ #define get_fs() (current_thread_info()->addr_limit)
+ #define set_fs(x) (current_thread_info()->addr_limit = (x))
+-#else
++
++#else /* not CONFIG_MMU */
++
++#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
++#define USER_DS MAKE_MM_SEG(0xFFFFFFFF)
++#define get_ds() (KERNEL_DS)
++
+ static inline mm_segment_t get_fs(void)
+ {
+- return USER_DS;
++ return USER_DS;
+ }
+
+ static inline void set_fs(mm_segment_t s)
+ {
+ }
+-#endif /* CONFIG_MMU */
++
++#endif /* not CONFIG_MMU */
+
+ #define segment_eq(a,b) ((a).seg == (b).seg)
+
+@@ -83,9 +77,9 @@
+ " subx %0, %0\n" \
+ " cmpu %4, %1\n" \
+ " subx %0, %5\n" \
+- : "=&r"(flag), "=r"(sum) \
+- : "1"(addr), "r"((int)(size)), \
+- "r"(current_thread_info()->addr_limit.seg), "r"(0) \
++ : "=&r" (flag), "=r" (sum) \
++ : "1" (addr), "r" ((int)(size)), \
++ "r" (current_thread_info()->addr_limit.seg), "r" (0) \
+ : "cbit" ); \
+ flag; })
+
+@@ -113,10 +107,10 @@
+ #else
+ static inline int access_ok(int type, const void *addr, unsigned long size)
+ {
+- extern unsigned long memory_start, memory_end;
+- unsigned long val = (unsigned long)addr;
++ extern unsigned long memory_start, memory_end;
++ unsigned long val = (unsigned long)addr;
+
+- return ((val >= memory_start) && ((val + size) < memory_end));
++ return ((val >= memory_start) && ((val + size) < memory_end));
+ }
+ #endif /* CONFIG_MMU */
+
+@@ -155,39 +149,6 @@
+ * accesses to the same area of user memory).
+ */
+
+-extern void __get_user_1(void);
+-extern void __get_user_2(void);
+-extern void __get_user_4(void);
+-
+-#ifndef MODULE
+-#define __get_user_x(size,ret,x,ptr) \
+- __asm__ __volatile__( \
+- " mv r0, %0\n" \
+- " mv r1, %1\n" \
+- " bl __get_user_" #size "\n" \
+- " mv %0, r0\n" \
+- " mv %1, r1\n" \
+- : "=r"(ret), "=r"(x) \
+- : "0"(ptr) \
+- : "r0", "r1", "r14" )
+-#else /* MODULE */
+-/*
+- * Use "jl" instead of "bl" for MODULE
+- */
+-#define __get_user_x(size,ret,x,ptr) \
+- __asm__ __volatile__( \
+- " mv r0, %0\n" \
+- " mv r1, %1\n" \
+- " seth lr, #high(__get_user_" #size ")\n" \
+- " or3 lr, lr, #low(__get_user_" #size ")\n" \
+- " jl lr\n" \
+- " mv %0, r0\n" \
+- " mv %1, r1\n" \
+- : "=r"(ret), "=r"(x) \
+- : "0"(ptr) \
+- : "r0", "r1", "r14" )
+-#endif
+-
+ /* Careful: we have to cast the result to the type of the pointer for sign
+ reasons */
+ /**
+@@ -208,20 +169,7 @@
+ * On error, the variable @x is set to zero.
+ */
+ #define get_user(x,ptr) \
+-({ int __ret_gu; \
+- unsigned long __val_gu; \
+- __chk_user_ptr(ptr); \
+- switch(sizeof (*(ptr))) { \
+- case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \
+- case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; \
+- case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; \
+- default: __get_user_x(X,__ret_gu,__val_gu,ptr); break; \
+- } \
+- (x) = (__typeof__(*(ptr)))__val_gu; \
+- __ret_gu; \
+-})
+-
+-extern void __put_user_bad(void);
++ __get_user_check((x),(ptr),sizeof(*(ptr)))
+
+ /**
+ * put_user: - Write a simple value into user space.
+@@ -240,8 +188,7 @@
+ * Returns zero on success, or -EFAULT on error.
+ */
+ #define put_user(x,ptr) \
+- __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
+-
++ __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
+
+ /**
+ * __get_user: - Get a simple variable from user space, with less checking.
+@@ -264,8 +211,64 @@
+ * On error, the variable @x is set to zero.
+ */
+ #define __get_user(x,ptr) \
+- __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
++ __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
+
++#define __get_user_nocheck(x,ptr,size) \
++({ \
++ long __gu_err = 0; \
++ unsigned long __gu_val; \
++ might_sleep(); \
++ __get_user_size(__gu_val,(ptr),(size),__gu_err); \
++ (x) = (__typeof__(*(ptr)))__gu_val; \
++ __gu_err; \
++})
++
++#define __get_user_check(x,ptr,size) \
++({ \
++ long __gu_err = -EFAULT; \
++ unsigned long __gu_val = 0; \
++ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
++ might_sleep(); \
++ if (access_ok(VERIFY_READ,__gu_addr,size)) \
++ __get_user_size(__gu_val,__gu_addr,(size),__gu_err); \
++ (x) = (__typeof__(*(ptr)))__gu_val; \
++ __gu_err; \
++})
++
++extern long __get_user_bad(void);
++
++#define __get_user_size(x,ptr,size,retval) \
++do { \
++ retval = 0; \
++ __chk_user_ptr(ptr); \
++ switch (size) { \
++ case 1: __get_user_asm(x,ptr,retval,"ub"); break; \
++ case 2: __get_user_asm(x,ptr,retval,"uh"); break; \
++ case 4: __get_user_asm(x,ptr,retval,""); break; \
++ default: (x) = __get_user_bad(); \
++ } \
++} while (0)
++
++#define __get_user_asm(x, addr, err, itype) \
++ __asm__ __volatile__( \
++ " .fillinsn\n" \
++ "1: ld"itype" %1,@%2\n" \
++ " .fillinsn\n" \
++ "2:\n" \
++ ".section .fixup,\"ax\"\n" \
++ " .balign 4\n" \
++ "3: ldi %0,%3\n" \
++ " seth r14,#high(2b)\n" \
++ " or3 r14,r14,#low(2b)\n" \
++ " jmp r14\n" \
++ ".previous\n" \
++ ".section __ex_table,\"a\"\n" \
++ " .balign 4\n" \
++ " .long 1b,3b\n" \
++ ".previous" \
++ : "=&r" (err), "=&r" (x) \
++ : "r" (addr), "i" (-EFAULT), "0" (err) \
++ : "r14", "memory")
+
+ /**
+ * __put_user: - Write a simple value into user space, with less checking.
+@@ -287,11 +290,13 @@
+ * Returns zero on success, or -EFAULT on error.
+ */
+ #define __put_user(x,ptr) \
+- __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++ __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
++
+
+ #define __put_user_nocheck(x,ptr,size) \
+ ({ \
+ long __pu_err; \
++ might_sleep(); \
+ __put_user_size((x),(ptr),(size),__pu_err); \
+ __pu_err; \
+ })
+@@ -308,28 +313,28 @@
+ })
+
+ #if defined(__LITTLE_ENDIAN__)
+-#define __put_user_u64(x, addr, err) \
+- __asm__ __volatile__( \
+- " .fillinsn\n" \
+- "1: st %L1,@%2\n" \
+- " .fillinsn\n" \
+- "2: st %H1,@(4,%2)\n" \
+- " .fillinsn\n" \
+- "3:\n" \
+- ".section .fixup,\"ax\"\n" \
+- " .balign 4\n" \
+- "4: ldi %0,%3\n" \
+- " seth r14,#high(3b)\n" \
+- " or3 r14,r14,#low(3b)\n" \
+- " jmp r14\n" \
+- ".previous\n" \
+- ".section __ex_table,\"a\"\n" \
+- " .balign 4\n" \
+- " .long 1b,4b\n" \
+- " .long 2b,4b\n" \
+- ".previous" \
+- : "=&r"(err) \
+- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
++#define __put_user_u64(x, addr, err) \
++ __asm__ __volatile__( \
++ " .fillinsn\n" \
++ "1: st %L1,@%2\n" \
++ " .fillinsn\n" \
++ "2: st %H1,@(4,%2)\n" \
++ " .fillinsn\n" \
++ "3:\n" \
++ ".section .fixup,\"ax\"\n" \
++ " .balign 4\n" \
++ "4: ldi %0,%3\n" \
++ " seth r14,#high(3b)\n" \
++ " or3 r14,r14,#low(3b)\n" \
++ " jmp r14\n" \
++ ".previous\n" \
++ ".section __ex_table,\"a\"\n" \
++ " .balign 4\n" \
++ " .long 1b,4b\n" \
++ " .long 2b,4b\n" \
++ ".previous" \
++ : "=&r" (err) \
++ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
+ : "r14", "memory")
+
+ #elif defined(__BIG_ENDIAN__)
+@@ -353,13 +358,15 @@
+ " .long 1b,4b\n" \
+ " .long 2b,4b\n" \
+ ".previous" \
+- : "=&r"(err) \
+- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
++ : "=&r" (err) \
++ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
+ : "r14", "memory")
+ #else
+ #error no endian defined
+ #endif
+
++extern void __put_user_bad(void);
++
+ #define __put_user_size(x,ptr,size,retval) \
+ do { \
+ retval = 0; \
+@@ -398,52 +405,8 @@
+ " .balign 4\n" \
+ " .long 1b,3b\n" \
+ ".previous" \
+- : "=&r"(err) \
+- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
+- : "r14", "memory")
+-
+-#define __get_user_nocheck(x,ptr,size) \
+-({ \
+- long __gu_err; \
+- unsigned long __gu_val; \
+- __get_user_size(__gu_val,(ptr),(size),__gu_err); \
+- (x) = (__typeof__(*(ptr)))__gu_val; \
+- __gu_err; \
+-})
+-
+-extern long __get_user_bad(void);
+-
+-#define __get_user_size(x,ptr,size,retval) \
+-do { \
+- retval = 0; \
+- __chk_user_ptr(ptr); \
+- switch (size) { \
+- case 1: __get_user_asm(x,ptr,retval,"ub"); break; \
+- case 2: __get_user_asm(x,ptr,retval,"uh"); break; \
+- case 4: __get_user_asm(x,ptr,retval,""); break; \
+- default: (x) = __get_user_bad(); \
+- } \
+-} while (0)
+-
+-#define __get_user_asm(x, addr, err, itype) \
+- __asm__ __volatile__( \
+- " .fillinsn\n" \
+- "1: ld"itype" %1,@%2\n" \
+- " .fillinsn\n" \
+- "2:\n" \
+- ".section .fixup,\"ax\"\n" \
+- " .balign 4\n" \
+- "3: ldi %0,%3\n" \
+- " seth r14,#high(2b)\n" \
+- " or3 r14,r14,#low(2b)\n" \
+- " jmp r14\n" \
+- ".previous\n" \
+- ".section __ex_table,\"a\"\n" \
+- " .balign 4\n" \
+- " .long 1b,3b\n" \
+- ".previous" \
+- : "=&r"(err), "=&r"(x) \
+- : "r"(addr), "i"(-EFAULT), "0"(err) \
++ : "=&r" (err) \
++ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
+ : "r14", "memory")
+
+ /*
+@@ -453,7 +416,6 @@
+ * anything, so this is accurate.
+ */
+
+-
+ /*
+ * Copy To/From Userspace
+ */
+@@ -511,8 +473,9 @@
+ " .long 2b,9b\n" \
+ " .long 3b,9b\n" \
+ ".previous\n" \
+- : "=&r"(__dst), "=&r"(__src), "=&r"(size), "=&r"(__c) \
+- : "0"(to), "1"(from), "2"(size), "3"(size / 4) \
++ : "=&r" (__dst), "=&r" (__src), "=&r" (size), \
++ "=&r" (__c) \
++ : "0" (to), "1" (from), "2" (size), "3" (size / 4) \
+ : "r14", "memory"); \
+ } while (0)
+
+@@ -573,8 +536,9 @@
+ " .long 2b,7b\n" \
+ " .long 3b,7b\n" \
+ ".previous\n" \
+- : "=&r"(__dst), "=&r"(__src), "=&r"(size), "=&r"(__c) \
+- : "0"(to), "1"(from), "2"(size), "3"(size / 4) \
++ : "=&r" (__dst), "=&r" (__src), "=&r" (size), \
++ "=&r" (__c) \
++ : "0" (to), "1" (from), "2" (size), "3" (size / 4) \
+ : "r14", "memory"); \
+ } while (0)
+
+@@ -676,7 +640,7 @@
+ #define copy_from_user(to,from,n) \
+ ({ \
+ might_sleep(); \
+-__generic_copy_from_user((to),(from),(n)); \
++ __generic_copy_from_user((to),(from),(n)); \
+ })
+
+ long __must_check strncpy_from_user(char *dst, const char __user *src,
+diff -Naur linux-2.6.16/include/asm-mips/bitops.h linux-2.6.16.16/include/asm-mips/bitops.h
+--- linux-2.6.16/include/asm-mips/bitops.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-mips/bitops.h 2006-05-11 04:56:24.000000000 +0300
+@@ -654,7 +654,12 @@
+ {
+ #ifdef CONFIG_32BIT
+ #ifdef CONFIG_CPU_MIPS32
+- __asm__ ("clz %0, %1" : "=r" (word) : "r" (word));
++ __asm__ (
++ " .set mips32 \n"
++ " clz %0, %1 \n"
++ " .set mips0 \n"
++ : "=r" (word)
++ : "r" (word));
+
+ return 32 - word;
+ #else
+@@ -678,7 +683,12 @@
+ #ifdef CONFIG_64BIT
+ #ifdef CONFIG_CPU_MIPS64
+
+- __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
++ __asm__ (
++ " .set mips64 \n"
++ " dclz %0, %1 \n"
++ " .set mips0 \n"
++ : "=r" (word)
++ : "r" (word));
+
+ return 64 - word;
+ #else
+diff -Naur linux-2.6.16/include/asm-mips/byteorder.h linux-2.6.16.16/include/asm-mips/byteorder.h
+--- linux-2.6.16/include/asm-mips/byteorder.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-mips/byteorder.h 2006-05-11 04:56:24.000000000 +0300
+@@ -19,7 +19,9 @@
+ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
+ {
+ __asm__(
++ " .set mips32r2 \n"
+ " wsbh %0, %1 \n"
++ " .set mips0 \n"
+ : "=r" (x)
+ : "r" (x));
+
+@@ -30,8 +32,10 @@
+ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
+ {
+ __asm__(
++ " .set mips32r2 \n"
+ " wsbh %0, %1 \n"
+ " rotr %0, %0, 16 \n"
++ " .set mips0 \n"
+ : "=r" (x)
+ : "r" (x));
+
+diff -Naur linux-2.6.16/include/asm-mips/interrupt.h linux-2.6.16.16/include/asm-mips/interrupt.h
+--- linux-2.6.16/include/asm-mips/interrupt.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-mips/interrupt.h 2006-05-11 04:56:24.000000000 +0300
+@@ -20,7 +20,9 @@
+ " .set reorder \n"
+ " .set noat \n"
+ #ifdef CONFIG_CPU_MIPSR2
++ " .set mips32r2 \n"
+ " ei \n"
++ " .set mips0 \n"
+ #else
+ " mfc0 $1,$12 \n"
+ " ori $1,0x1f \n"
+@@ -63,7 +65,9 @@
+ " .set push \n"
+ " .set noat \n"
+ #ifdef CONFIG_CPU_MIPSR2
++ " .set mips32r2 \n"
+ " di \n"
++ " .set mips0 \n"
+ #else
+ " mfc0 $1,$12 \n"
+ " ori $1,0x1f \n"
+@@ -103,8 +107,10 @@
+ " .set reorder \n"
+ " .set noat \n"
+ #ifdef CONFIG_CPU_MIPSR2
++ " .set mips32r2 \n"
+ " di \\result \n"
+ " andi \\result, 1 \n"
++ " .set mips0 \n"
+ #else
+ " mfc0 \\result, $12 \n"
+ " ori $1, \\result, 0x1f \n"
+@@ -133,9 +139,11 @@
+ * Slow, but doesn't suffer from a relativly unlikely race
+ * condition we're having since days 1.
+ */
++ " .set mips32r2 \n"
+ " beqz \\flags, 1f \n"
+ " di \n"
+ " ei \n"
++ " .set mips0 \n"
+ "1: \n"
+ #elif defined(CONFIG_CPU_MIPSR2)
+ /*
+diff -Naur linux-2.6.16/include/asm-mips/r4kcache.h linux-2.6.16.16/include/asm-mips/r4kcache.h
+--- linux-2.6.16/include/asm-mips/r4kcache.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-mips/r4kcache.h 2006-05-11 04:56:24.000000000 +0300
+@@ -37,7 +37,7 @@
+ " cache %0, %1 \n" \
+ " .set pop \n" \
+ : \
+- : "i" (op), "m" (*(unsigned char *)(addr)))
++ : "i" (op), "R" (*(unsigned char *)(addr)))
+
+ static inline void flush_icache_line_indexed(unsigned long addr)
+ {
+diff -Naur linux-2.6.16/include/asm-powerpc/floppy.h linux-2.6.16.16/include/asm-powerpc/floppy.h
+--- linux-2.6.16/include/asm-powerpc/floppy.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-powerpc/floppy.h 2006-05-11 04:56:24.000000000 +0300
+@@ -35,6 +35,7 @@
+ #ifdef CONFIG_PCI
+
+ #include <linux/pci.h>
++#include <asm/ppc-pci.h> /* for ppc64_isabridge_dev */
+
+ #define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
+
+@@ -52,12 +53,12 @@
+ if (bus_addr
+ && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
+ /* different from last time -- unmap prev */
+- pci_unmap_single(NULL, bus_addr, prev_size, prev_dir);
++ pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
+ bus_addr = 0;
+ }
+
+ if (!bus_addr) /* need to map it */
+- bus_addr = pci_map_single(NULL, addr, size, dir);
++ bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
+
+ /* remember this one as prev */
+ prev_addr = addr;
+diff -Naur linux-2.6.16/include/asm-x86_64/cpufeature.h linux-2.6.16.16/include/asm-x86_64/cpufeature.h
+--- linux-2.6.16/include/asm-x86_64/cpufeature.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-x86_64/cpufeature.h 2006-05-11 04:56:24.000000000 +0300
+@@ -64,6 +64,7 @@
+ #define X86_FEATURE_REP_GOOD (3*32+ 4) /* rep microcode works well on this CPU */
+ #define X86_FEATURE_CONSTANT_TSC (3*32+5) /* TSC runs at constant rate */
+ #define X86_FEATURE_SYNC_RDTSC (3*32+6) /* RDTSC syncs CPU core */
++#define X86_FEATURE_FXSAVE_LEAK (3*32+7) /* FIP/FOP/FDP leaks through FXSAVE */
+
+ /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
+ #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */
+diff -Naur linux-2.6.16/include/asm-x86_64/i387.h linux-2.6.16.16/include/asm-x86_64/i387.h
+--- linux-2.6.16/include/asm-x86_64/i387.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/asm-x86_64/i387.h 2006-05-11 04:56:24.000000000 +0300
+@@ -72,6 +72,23 @@
+ #define set_fpu_swd(t,val) ((t)->thread.i387.fxsave.swd = (val))
+ #define set_fpu_fxsr_twd(t,val) ((t)->thread.i387.fxsave.twd = (val))
+
++#define X87_FSW_ES (1 << 7) /* Exception Summary */
++
++/* AMD CPUs don't save/restore FDP/FIP/FOP unless an exception
++ is pending. Clear the x87 state here by setting it to fixed
++ values. The kernel data segment can be sometimes 0 and sometimes
++ new user value. Both should be ok.
++ Use the PDA as safe address because it should be already in L1. */
++static inline void clear_fpu_state(struct i387_fxsave_struct *fx)
++{
++ if (unlikely(fx->swd & X87_FSW_ES))
++ asm volatile("fnclex");
++ alternative_input(ASM_NOP8 ASM_NOP2,
++ " emms\n" /* clear stack tags */
++ " fildl %%gs:0", /* load to clear state */
++ X86_FEATURE_FXSAVE_LEAK);
++}
++
+ static inline int restore_fpu_checking(struct i387_fxsave_struct *fx)
+ {
+ int err;
+@@ -119,6 +136,7 @@
+ #endif
+ if (unlikely(err))
+ __clear_user(fx, sizeof(struct i387_fxsave_struct));
++ /* No need to clear here because the caller clears USED_MATH */
+ return err;
+ }
+
+@@ -149,7 +167,7 @@
+ "i" (offsetof(__typeof__(*tsk),
+ thread.i387.fxsave)));
+ #endif
+- __asm__ __volatile__("fnclex");
++ clear_fpu_state(&tsk->thread.i387.fxsave);
+ }
+
+ static inline void kernel_fpu_begin(void)
+diff -Naur linux-2.6.16/include/linux/cpu.h linux-2.6.16.16/include/linux/cpu.h
+--- linux-2.6.16/include/linux/cpu.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/cpu.h 2006-05-11 04:56:24.000000000 +0300
+@@ -32,7 +32,7 @@
+ };
+
+ extern int register_cpu(struct cpu *, int, struct node *);
+-extern struct sys_device *get_cpu_sysdev(int cpu);
++extern struct sys_device *get_cpu_sysdev(unsigned cpu);
+ #ifdef CONFIG_HOTPLUG_CPU
+ extern void unregister_cpu(struct cpu *, struct node *);
+ #endif
+diff -Naur linux-2.6.16/include/linux/cpumask.h linux-2.6.16.16/include/linux/cpumask.h
+--- linux-2.6.16/include/linux/cpumask.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/cpumask.h 2006-05-11 04:56:24.000000000 +0300
+@@ -408,6 +408,7 @@
+ })
+
+ #define for_each_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map)
++#define for_each_possible_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map)
+ #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map)
+ #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
+
+diff -Naur linux-2.6.16/include/linux/fb.h linux-2.6.16.16/include/linux/fb.h
+--- linux-2.6.16/include/linux/fb.h 2006-05-18 01:12:24.000000000 +0300
++++ linux-2.6.16.16/include/linux/fb.h 2006-05-17 21:41:31.000000000 +0300
+@@ -840,12 +840,10 @@
+ #define FB_LEFT_POS(bpp) (32 - bpp)
+ #define FB_SHIFT_HIGH(val, bits) ((val) >> (bits))
+ #define FB_SHIFT_LOW(val, bits) ((val) << (bits))
+-#define FB_BIT_NR(b) (7 - (b))
+ #else
+ #define FB_LEFT_POS(bpp) (0)
+ #define FB_SHIFT_HIGH(val, bits) ((val) << (bits))
+ #define FB_SHIFT_LOW(val, bits) ((val) >> (bits))
+-#define FB_BIT_NR(b) (b)
+ #endif
+
+ /*
+diff -Naur linux-2.6.16/include/linux/fs.h linux-2.6.16.16/include/linux/fs.h
+--- linux-2.6.16/include/linux/fs.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/fs.h 2006-05-11 04:56:24.000000000 +0300
+@@ -1383,6 +1383,7 @@
+ extern void bd_release(struct block_device *);
+
+ /* fs/char_dev.c */
++#define CHRDEV_MAJOR_HASH_SIZE 255
+ extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
+ extern int register_chrdev_region(dev_t, unsigned, const char *);
+ extern int register_chrdev(unsigned int, const char *,
+@@ -1390,25 +1391,17 @@
+ extern int unregister_chrdev(unsigned int, const char *);
+ extern void unregister_chrdev_region(dev_t, unsigned);
+ extern int chrdev_open(struct inode *, struct file *);
+-extern int get_chrdev_list(char *);
+-extern void *acquire_chrdev_list(void);
+-extern int count_chrdev_list(void);
+-extern void *get_next_chrdev(void *);
+-extern int get_chrdev_info(void *, int *, char **);
+-extern void release_chrdev_list(void *);
++extern void chrdev_show(struct seq_file *,off_t);
+
+ /* fs/block_dev.c */
++#define BLKDEV_MAJOR_HASH_SIZE 255
+ #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
+ extern const char *__bdevname(dev_t, char *buffer);
+ extern const char *bdevname(struct block_device *bdev, char *buffer);
+ extern struct block_device *lookup_bdev(const char *);
+ extern struct block_device *open_bdev_excl(const char *, int, void *);
+ extern void close_bdev_excl(struct block_device *);
+-extern void *acquire_blkdev_list(void);
+-extern int count_blkdev_list(void);
+-extern void *get_next_blkdev(void *);
+-extern int get_blkdev_info(void *, int *, char **);
+-extern void release_blkdev_list(void *);
++extern void blkdev_show(struct seq_file *,off_t);
+
+ extern void init_special_inode(struct inode *, umode_t, dev_t);
+
+diff -Naur linux-2.6.16/include/linux/mm.h linux-2.6.16.16/include/linux/mm.h
+--- linux-2.6.16/include/linux/mm.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/mm.h 2006-05-11 04:56:24.000000000 +0300
+@@ -229,10 +229,9 @@
+ unsigned long private; /* Mapping-private opaque data:
+ * usually used for buffer_heads
+ * if PagePrivate set; used for
+- * swp_entry_t if PageSwapCache.
+- * When page is free, this
++ * swp_entry_t if PageSwapCache;
+ * indicates order in the buddy
+- * system.
++ * system if PG_buddy is set.
+ */
+ struct address_space *mapping; /* If low bit clear, points to
+ * inode address_space, or NULL.
+diff -Naur linux-2.6.16/include/linux/page-flags.h linux-2.6.16.16/include/linux/page-flags.h
+--- linux-2.6.16/include/linux/page-flags.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/page-flags.h 2006-05-11 04:56:24.000000000 +0300
+@@ -74,7 +74,9 @@
+ #define PG_mappedtodisk 16 /* Has blocks allocated on-disk */
+ #define PG_reclaim 17 /* To be reclaimed asap */
+ #define PG_nosave_free 18 /* Free, should not be written */
+-#define PG_uncached 19 /* Page has been mapped as uncached */
++#define PG_buddy 19 /* Page is free, on buddy lists */
++
++#define PG_uncached 20 /* Page has been mapped as uncached */
+
+ /*
+ * Global page accounting. One instance per CPU. Only unsigned longs are
+@@ -319,6 +321,10 @@
+ #define SetPageNosaveFree(page) set_bit(PG_nosave_free, &(page)->flags)
+ #define ClearPageNosaveFree(page) clear_bit(PG_nosave_free, &(page)->flags)
+
++#define PageBuddy(page) test_bit(PG_buddy, &(page)->flags)
++#define __SetPageBuddy(page) __set_bit(PG_buddy, &(page)->flags)
++#define __ClearPageBuddy(page) __clear_bit(PG_buddy, &(page)->flags)
++
+ #define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags)
+ #define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags)
+ #define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags)
+diff -Naur linux-2.6.16/include/linux/proc_fs.h linux-2.6.16.16/include/linux/proc_fs.h
+--- linux-2.6.16/include/linux/proc_fs.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/proc_fs.h 2006-05-11 04:56:24.000000000 +0300
+@@ -78,7 +78,7 @@
+ struct vmcore {
+ struct list_head list;
+ unsigned long long paddr;
+- unsigned long size;
++ unsigned long long size;
+ loff_t offset;
+ };
+
+diff -Naur linux-2.6.16/include/linux/raid/raid1.h linux-2.6.16.16/include/linux/raid/raid1.h
+--- linux-2.6.16/include/linux/raid/raid1.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/raid/raid1.h 2006-05-11 04:56:24.000000000 +0300
+@@ -130,6 +130,6 @@
+ * with failure when last write completes (and all failed).
+ * Record that bi_end_io was called with this flag...
+ */
+-#define R1BIO_Returned 4
++#define R1BIO_Returned 6
+
+ #endif
+diff -Naur linux-2.6.16/include/linux/rtc.h linux-2.6.16.16/include/linux/rtc.h
+--- linux-2.6.16/include/linux/rtc.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/linux/rtc.h 2006-05-11 04:56:24.000000000 +0300
+@@ -11,8 +11,6 @@
+ #ifndef _LINUX_RTC_H_
+ #define _LINUX_RTC_H_
+
+-#include <linux/interrupt.h>
+-
+ /*
+ * The struct used to pass data via the following ioctl. Similar to the
+ * struct tm in <time.h>, but it needs to be here so that the kernel
+@@ -95,6 +93,8 @@
+
+ #ifdef __KERNEL__
+
++#include <linux/interrupt.h>
++
+ typedef struct rtc_task {
+ void (*func)(void *private_data);
+ void *private_data;
+diff -Naur linux-2.6.16/include/net/ip.h linux-2.6.16.16/include/net/ip.h
+--- linux-2.6.16/include/net/ip.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/net/ip.h 2006-05-11 04:56:24.000000000 +0300
+@@ -95,6 +95,7 @@
+ extern int ip_mr_input(struct sk_buff *skb);
+ extern int ip_output(struct sk_buff *skb);
+ extern int ip_mc_output(struct sk_buff *skb);
++extern int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *));
+ extern int ip_do_nat(struct sk_buff *skb);
+ extern void ip_send_check(struct iphdr *ip);
+ extern int ip_queue_xmit(struct sk_buff *skb, int ipfragok);
+diff -Naur linux-2.6.16/include/net/sctp/structs.h linux-2.6.16.16/include/net/sctp/structs.h
+--- linux-2.6.16/include/net/sctp/structs.h 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/include/net/sctp/structs.h 2006-05-11 04:56:24.000000000 +0300
+@@ -702,6 +702,7 @@
+ __u8 tsn_gap_acked; /* Is this chunk acked by a GAP ACK? */
+ __s8 fast_retransmit; /* Is this chunk fast retransmitted? */
+ __u8 tsn_missing_report; /* Data chunk missing counter. */
++ __u8 data_accepted; /* At least 1 chunk in this packet accepted */
+ };
+
+ void sctp_chunk_hold(struct sctp_chunk *);
+diff -Naur linux-2.6.16/ipc/shm.c linux-2.6.16.16/ipc/shm.c
+--- linux-2.6.16/ipc/shm.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/ipc/shm.c 2006-05-11 04:56:24.000000000 +0300
+@@ -161,6 +161,8 @@
+ ret = shmem_mmap(file, vma);
+ if (ret == 0) {
+ vma->vm_ops = &shm_vm_ops;
++ if (!(vma->vm_flags & VM_WRITE))
++ vma->vm_flags &= ~VM_MAYWRITE;
+ shm_inc(file->f_dentry->d_inode->i_ino);
+ }
+
+diff -Naur linux-2.6.16/ipc/util.c linux-2.6.16.16/ipc/util.c
+--- linux-2.6.16/ipc/util.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/ipc/util.c 2006-05-11 04:56:24.000000000 +0300
+@@ -182,8 +182,7 @@
+ if(new == NULL)
+ return size;
+ new->size = newsize;
+- memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size +
+- sizeof(struct ipc_id_ary));
++ memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size);
+ for(i=size;i<newsize;i++) {
+ new->p[i] = NULL;
+ }
+diff -Naur linux-2.6.16/kernel/auditsc.c linux-2.6.16.16/kernel/auditsc.c
+--- linux-2.6.16/kernel/auditsc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/auditsc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -966,11 +966,6 @@
+ if (context->in_syscall) {
+ struct audit_context *newctx;
+
+-#if defined(__NR_vm86) && defined(__NR_vm86old)
+- /* vm86 mode should only be entered once */
+- if (major == __NR_vm86 || major == __NR_vm86old)
+- return;
+-#endif
+ #if AUDIT_DEBUG
+ printk(KERN_ERR
+ "audit(:%d) pid=%d in syscall=%d;"
+diff -Naur linux-2.6.16/kernel/exec_domain.c linux-2.6.16.16/kernel/exec_domain.c
+--- linux-2.6.16/kernel/exec_domain.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/exec_domain.c 2006-05-11 04:56:24.000000000 +0300
+@@ -140,6 +140,7 @@
+ ep = lookup_exec_domain(personality);
+ if (ep == current_thread_info()->exec_domain) {
+ current->personality = personality;
++ module_put(ep->module);
+ return 0;
+ }
+
+diff -Naur linux-2.6.16/kernel/fork.c linux-2.6.16.16/kernel/fork.c
+--- linux-2.6.16/kernel/fork.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/fork.c 2006-05-11 04:56:24.000000000 +0300
+@@ -720,7 +720,7 @@
+ free_fdset (new_fdt->open_fds, new_fdt->max_fdset);
+ free_fd_array(new_fdt->fd, new_fdt->max_fds);
+ kmem_cache_free(files_cachep, newf);
+- goto out;
++ return NULL;
+ }
+
+ static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
+diff -Naur linux-2.6.16/kernel/power/process.c linux-2.6.16.16/kernel/power/process.c
+--- linux-2.6.16/kernel/power/process.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/power/process.c 2006-05-11 04:56:24.000000000 +0300
+@@ -25,8 +25,7 @@
+ (p->flags & PF_NOFREEZE) ||
+ (p->exit_state == EXIT_ZOMBIE) ||
+ (p->exit_state == EXIT_DEAD) ||
+- (p->state == TASK_STOPPED) ||
+- (p->state == TASK_TRACED))
++ (p->state == TASK_STOPPED))
+ return 0;
+ return 1;
+ }
+diff -Naur linux-2.6.16/kernel/ptrace.c linux-2.6.16.16/kernel/ptrace.c
+--- linux-2.6.16/kernel/ptrace.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/ptrace.c 2006-05-11 04:56:24.000000000 +0300
+@@ -57,10 +57,6 @@
+ signal_wake_up(child, 1);
+ }
+ }
+- if (child->signal->flags & SIGNAL_GROUP_EXIT) {
+- sigaddset(&child->pending.signal, SIGKILL);
+- signal_wake_up(child, 1);
+- }
+ spin_unlock(&child->sighand->siglock);
+ }
+
+@@ -82,7 +78,8 @@
+ SET_LINKS(child);
+ }
+
+- ptrace_untrace(child);
++ if (child->state == TASK_TRACED)
++ ptrace_untrace(child);
+ }
+
+ /*
+diff -Naur linux-2.6.16/kernel/sched.c linux-2.6.16.16/kernel/sched.c
+--- linux-2.6.16/kernel/sched.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/sched.c 2006-05-11 04:56:24.000000000 +0300
+@@ -237,6 +237,7 @@
+
+ task_t *migration_thread;
+ struct list_head migration_queue;
++ int cpu;
+ #endif
+
+ #ifdef CONFIG_SCHEDSTATS
+@@ -1660,6 +1661,9 @@
+ /*
+ * double_rq_lock - safely lock two runqueues
+ *
++ * We must take them in cpu order to match code in
++ * dependent_sleeper and wake_dependent_sleeper.
++ *
+ * Note this does not disable interrupts like task_rq_lock,
+ * you need to do so manually before calling.
+ */
+@@ -1671,7 +1675,7 @@
+ spin_lock(&rq1->lock);
+ __acquire(rq2->lock); /* Fake it out ;) */
+ } else {
+- if (rq1 < rq2) {
++ if (rq1->cpu < rq2->cpu) {
+ spin_lock(&rq1->lock);
+ spin_lock(&rq2->lock);
+ } else {
+@@ -1707,7 +1711,7 @@
+ __acquires(this_rq->lock)
+ {
+ if (unlikely(!spin_trylock(&busiest->lock))) {
+- if (busiest < this_rq) {
++ if (busiest->cpu < this_rq->cpu) {
+ spin_unlock(&this_rq->lock);
+ spin_lock(&busiest->lock);
+ spin_lock(&this_rq->lock);
+@@ -6035,6 +6039,7 @@
+ rq->push_cpu = 0;
+ rq->migration_thread = NULL;
+ INIT_LIST_HEAD(&rq->migration_queue);
++ rq->cpu = i;
+ #endif
+ atomic_set(&rq->nr_iowait, 0);
+
+diff -Naur linux-2.6.16/kernel/signal.c linux-2.6.16.16/kernel/signal.c
+--- linux-2.6.16/kernel/signal.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/signal.c 2006-05-11 04:56:24.000000000 +0300
+@@ -975,7 +975,6 @@
+ if (t == NULL)
+ /* restart balancing at this thread */
+ t = p->signal->curr_target = p;
+- BUG_ON(t->tgid != p->tgid);
+
+ while (!wants_signal(sig, t)) {
+ t = next_thread(t);
+@@ -1689,6 +1688,7 @@
+ /* Let the debugger run. */
+ set_current_state(TASK_TRACED);
+ spin_unlock_irq(&current->sighand->siglock);
++ try_to_freeze();
+ read_lock(&tasklist_lock);
+ if (likely(current->ptrace & PT_PTRACED) &&
+ likely(current->parent != current->real_parent ||
+@@ -1942,9 +1942,9 @@
+ /* Let the debugger run. */
+ ptrace_stop(signr, signr, info);
+
+- /* We're back. Did the debugger cancel the sig or group_exit? */
++ /* We're back. Did the debugger cancel the sig? */
+ signr = current->exit_code;
+- if (signr == 0 || current->signal->flags & SIGNAL_GROUP_EXIT)
++ if (signr == 0)
+ continue;
+
+ current->exit_code = 0;
+diff -Naur linux-2.6.16/kernel/sys.c linux-2.6.16.16/kernel/sys.c
+--- linux-2.6.16/kernel/sys.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/sys.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1657,7 +1657,19 @@
+ (cputime_eq(current->signal->it_prof_expires, cputime_zero) ||
+ new_rlim.rlim_cur <= cputime_to_secs(
+ current->signal->it_prof_expires))) {
+- cputime_t cputime = secs_to_cputime(new_rlim.rlim_cur);
++ unsigned long rlim_cur = new_rlim.rlim_cur;
++ cputime_t cputime;
++
++ if (rlim_cur == 0) {
++ /*
++ * The caller is asking for an immediate RLIMIT_CPU
++ * expiry. But we use the zero value to mean "it was
++ * never set". So let's cheat and make it one second
++ * instead
++ */
++ rlim_cur = 1;
++ }
++ cputime = secs_to_cputime(rlim_cur);
+ read_lock(&tasklist_lock);
+ spin_lock_irq(&current->sighand->siglock);
+ set_process_cpu_timer(current, CPUCLOCK_PROF,
+diff -Naur linux-2.6.16/kernel/uid16.c linux-2.6.16.16/kernel/uid16.c
+--- linux-2.6.16/kernel/uid16.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/kernel/uid16.c 2006-05-11 04:56:24.000000000 +0300
+@@ -20,43 +20,67 @@
+
+ asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group)
+ {
+- return sys_chown(filename, low2highuid(user), low2highgid(group));
++ long ret = sys_chown(filename, low2highuid(user), low2highgid(group));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group)
+ {
+- return sys_lchown(filename, low2highuid(user), low2highgid(group));
++ long ret = sys_lchown(filename, low2highuid(user), low2highgid(group));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group)
+ {
+- return sys_fchown(fd, low2highuid(user), low2highgid(group));
++ long ret = sys_fchown(fd, low2highuid(user), low2highgid(group));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid)
+ {
+- return sys_setregid(low2highgid(rgid), low2highgid(egid));
++ long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setgid16(old_gid_t gid)
+ {
+- return sys_setgid(low2highgid(gid));
++ long ret = sys_setgid(low2highgid(gid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid)
+ {
+- return sys_setreuid(low2highuid(ruid), low2highuid(euid));
++ long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setuid16(old_uid_t uid)
+ {
+- return sys_setuid(low2highuid(uid));
++ long ret = sys_setuid(low2highuid(uid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid)
+ {
+- return sys_setresuid(low2highuid(ruid), low2highuid(euid),
+- low2highuid(suid));
++ long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),
++ low2highuid(suid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid)
+@@ -72,8 +96,11 @@
+
+ asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid)
+ {
+- return sys_setresgid(low2highgid(rgid), low2highgid(egid),
+- low2highgid(sgid));
++ long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),
++ low2highgid(sgid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid)
+@@ -89,12 +116,18 @@
+
+ asmlinkage long sys_setfsuid16(old_uid_t uid)
+ {
+- return sys_setfsuid(low2highuid(uid));
++ long ret = sys_setfsuid(low2highuid(uid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ asmlinkage long sys_setfsgid16(old_gid_t gid)
+ {
+- return sys_setfsgid(low2highgid(gid));
++ long ret = sys_setfsgid(low2highgid(gid));
++ /* avoid REGPARM breakage on x86: */
++ prevent_tail_call(ret);
++ return ret;
+ }
+
+ static int groups16_to_user(old_gid_t __user *grouplist,
+diff -Naur linux-2.6.16/Makefile linux-2.6.16.16/Makefile
+--- linux-2.6.16/Makefile 2006-05-18 01:12:20.000000000 +0300
++++ linux-2.6.16.16/Makefile 2006-05-17 21:41:27.000000000 +0300
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 16
+-EXTRAVERSION =
++EXTRAVERSION = .16
+ NAME=Sliding Snow Leopard
+
+ # *DOCUMENTATION*
+diff -Naur linux-2.6.16/mm/madvise.c linux-2.6.16.16/mm/madvise.c
+--- linux-2.6.16/mm/madvise.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/mm/madvise.c 2006-05-11 04:56:24.000000000 +0300
+@@ -168,6 +168,9 @@
+ return -EINVAL;
+ }
+
++ if ((vma->vm_flags & (VM_SHARED|VM_WRITE)) != (VM_SHARED|VM_WRITE))
++ return -EACCES;
++
+ mapping = vma->vm_file->f_mapping;
+
+ offset = (loff_t)(start - vma->vm_start)
+diff -Naur linux-2.6.16/mm/page_alloc.c linux-2.6.16.16/mm/page_alloc.c
+--- linux-2.6.16/mm/page_alloc.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/mm/page_alloc.c 2006-05-11 04:56:24.000000000 +0300
+@@ -153,7 +153,8 @@
+ 1 << PG_reclaim |
+ 1 << PG_slab |
+ 1 << PG_swapcache |
+- 1 << PG_writeback );
++ 1 << PG_writeback |
++ 1 << PG_buddy );
+ set_page_count(page, 0);
+ reset_page_mapcount(page);
+ page->mapping = NULL;
+@@ -224,12 +225,12 @@
+
+ static inline void set_page_order(struct page *page, int order) {
+ set_page_private(page, order);
+- __SetPagePrivate(page);
++ __SetPageBuddy(page);
+ }
+
+ static inline void rmv_page_order(struct page *page)
+ {
+- __ClearPagePrivate(page);
++ __ClearPageBuddy(page);
+ set_page_private(page, 0);
+ }
+
+@@ -268,11 +269,13 @@
+ * This function checks whether a page is free && is the buddy
+ * we can do coalesce a page and its buddy if
+ * (a) the buddy is not in a hole &&
+- * (b) the buddy is free &&
+- * (c) the buddy is on the buddy system &&
+- * (d) a page and its buddy have the same order.
+- * for recording page's order, we use page_private(page) and PG_private.
++ * (b) the buddy is in the buddy system &&
++ * (c) a page and its buddy have the same order.
++ *
++ * For recording whether a page is in the buddy system, we use PG_buddy.
++ * Setting, clearing, and testing PG_buddy is serialized by zone->lock.
+ *
++ * For recording page's order, we use page_private(page).
+ */
+ static inline int page_is_buddy(struct page *page, int order)
+ {
+@@ -281,10 +284,10 @@
+ return 0;
+ #endif
+
+- if (PagePrivate(page) &&
+- (page_order(page) == order) &&
+- page_count(page) == 0)
++ if (PageBuddy(page) && page_order(page) == order) {
++ BUG_ON(page_count(page) != 0);
+ return 1;
++ }
+ return 0;
+ }
+
+@@ -301,7 +304,7 @@
+ * as necessary, plus some accounting needed to play nicely with other
+ * parts of the VM system.
+ * At each level, we keep a list of pages, which are heads of continuous
+- * free pages of length of (1 << order) and marked with PG_Private.Page's
++ * free pages of length of (1 << order) and marked with PG_buddy. Page's
+ * order is recorded in page_private(page) field.
+ * So when we are allocating or freeing one, we can derive the state of the
+ * other. That is, if we allocate a small block, and both were
+@@ -364,7 +367,8 @@
+ 1 << PG_slab |
+ 1 << PG_swapcache |
+ 1 << PG_writeback |
+- 1 << PG_reserved ))))
++ 1 << PG_reserved |
++ 1 << PG_buddy ))))
+ bad_page(page);
+ if (PageDirty(page))
+ __ClearPageDirty(page);
+@@ -522,7 +526,8 @@
+ 1 << PG_slab |
+ 1 << PG_swapcache |
+ 1 << PG_writeback |
+- 1 << PG_reserved ))))
++ 1 << PG_reserved |
++ 1 << PG_buddy ))))
+ bad_page(page);
+
+ /*
+diff -Naur linux-2.6.16/net/atm/clip.c linux-2.6.16.16/net/atm/clip.c
+--- linux-2.6.16/net/atm/clip.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/atm/clip.c 2006-05-11 04:56:24.000000000 +0300
+@@ -613,12 +613,19 @@
+
+
+ static int clip_device_event(struct notifier_block *this,unsigned long event,
+- void *dev)
++ void *arg)
+ {
++ struct net_device *dev = arg;
++
++ if (event == NETDEV_UNREGISTER) {
++ neigh_ifdown(&clip_tbl, dev);
++ return NOTIFY_DONE;
++ }
++
+ /* ignore non-CLIP devices */
+- if (((struct net_device *) dev)->type != ARPHRD_ATM ||
+- ((struct net_device *) dev)->hard_start_xmit != clip_start_xmit)
++ if (dev->type != ARPHRD_ATM || dev->hard_start_xmit != clip_start_xmit)
+ return NOTIFY_DONE;
++
+ switch (event) {
+ case NETDEV_UP:
+ DPRINTK("clip_device_event NETDEV_UP\n");
+@@ -686,14 +693,12 @@
+ static void atmarpd_close(struct atm_vcc *vcc)
+ {
+ DPRINTK("atmarpd_close\n");
+- atmarpd = NULL; /* assumed to be atomic */
+- barrier();
+- unregister_inetaddr_notifier(&clip_inet_notifier);
+- unregister_netdevice_notifier(&clip_dev_notifier);
+- if (skb_peek(&sk_atm(vcc)->sk_receive_queue))
+- printk(KERN_ERR "atmarpd_close: closing with requests "
+- "pending\n");
++
++ rtnl_lock();
++ atmarpd = NULL;
+ skb_queue_purge(&sk_atm(vcc)->sk_receive_queue);
++ rtnl_unlock();
++
+ DPRINTK("(done)\n");
+ module_put(THIS_MODULE);
+ }
+@@ -714,7 +719,12 @@
+
+ static int atm_init_atmarp(struct atm_vcc *vcc)
+ {
+- if (atmarpd) return -EADDRINUSE;
++ rtnl_lock();
++ if (atmarpd) {
++ rtnl_unlock();
++ return -EADDRINUSE;
++ }
++
+ if (start_timer) {
+ start_timer = 0;
+ init_timer(&idle_timer);
+@@ -731,10 +741,7 @@
+ vcc->push = NULL;
+ vcc->pop = NULL; /* crash */
+ vcc->push_oam = NULL; /* crash */
+- if (register_netdevice_notifier(&clip_dev_notifier))
+- printk(KERN_ERR "register_netdevice_notifier failed\n");
+- if (register_inetaddr_notifier(&clip_inet_notifier))
+- printk(KERN_ERR "register_inetaddr_notifier failed\n");
++ rtnl_unlock();
+ return 0;
+ }
+
+@@ -992,6 +999,8 @@
+
+ clip_tbl_hook = &clip_tbl;
+ register_atm_ioctl(&clip_ioctl_ops);
++ register_netdevice_notifier(&clip_dev_notifier);
++ register_inetaddr_notifier(&clip_inet_notifier);
+
+ #ifdef CONFIG_PROC_FS
+ {
+@@ -1012,6 +1021,9 @@
+
+ remove_proc_entry("arp", atm_proc_root);
+
++ unregister_inetaddr_notifier(&clip_inet_notifier);
++ unregister_netdevice_notifier(&clip_dev_notifier);
++
+ deregister_atm_ioctl(&clip_ioctl_ops);
+
+ /* First, stop the idle timer, so it stops banging
+diff -Naur linux-2.6.16/net/bridge/br_netfilter.c linux-2.6.16.16/net/bridge/br_netfilter.c
+--- linux-2.6.16/net/bridge/br_netfilter.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/bridge/br_netfilter.c 2006-05-11 04:56:24.000000000 +0300
+@@ -739,6 +739,15 @@
+ return NF_STOLEN;
+ }
+
++static int br_nf_dev_queue_xmit(struct sk_buff *skb)
++{
++ if (skb->protocol == htons(ETH_P_IP) &&
++ skb->len > skb->dev->mtu &&
++ !(skb_shinfo(skb)->ufo_size || skb_shinfo(skb)->tso_size))
++ return ip_fragment(skb, br_dev_queue_push_xmit);
++ else
++ return br_dev_queue_push_xmit(skb);
++}
+
+ /* PF_BRIDGE/POST_ROUTING ********************************************/
+ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
+@@ -798,7 +807,7 @@
+ realoutdev = nf_bridge->netoutdev;
+ #endif
+ NF_HOOK(pf, NF_IP_POST_ROUTING, skb, NULL, realoutdev,
+- br_dev_queue_push_xmit);
++ br_nf_dev_queue_xmit);
+
+ return NF_STOLEN;
+
+@@ -843,7 +852,7 @@
+ if ((out->hard_start_xmit == br_dev_xmit &&
+ okfn != br_nf_forward_finish &&
+ okfn != br_nf_local_out_finish &&
+- okfn != br_dev_queue_push_xmit)
++ okfn != br_nf_dev_queue_xmit)
+ #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
+ || ((out->priv_flags & IFF_802_1Q_VLAN) &&
+ VLAN_DEV_INFO(out)->real_dev->hard_start_xmit == br_dev_xmit)
+diff -Naur linux-2.6.16/net/core/dev.c linux-2.6.16.16/net/core/dev.c
+--- linux-2.6.16/net/core/dev.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/core/dev.c 2006-05-11 04:56:24.000000000 +0300
+@@ -2932,11 +2932,11 @@
+
+ switch(dev->reg_state) {
+ case NETREG_REGISTERING:
++ dev->reg_state = NETREG_REGISTERED;
+ err = netdev_register_sysfs(dev);
+ if (err)
+ printk(KERN_ERR "%s: failed sysfs registration (%d)\n",
+ dev->name, err);
+- dev->reg_state = NETREG_REGISTERED;
+ break;
+
+ case NETREG_UNREGISTERING:
+diff -Naur linux-2.6.16/net/core/sock.c linux-2.6.16.16/net/core/sock.c
+--- linux-2.6.16/net/core/sock.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/core/sock.c 2006-05-11 04:56:24.000000000 +0300
+@@ -404,8 +404,9 @@
+ if (!valbool) {
+ sk->sk_bound_dev_if = 0;
+ } else {
+- if (optlen > IFNAMSIZ)
+- optlen = IFNAMSIZ;
++ if (optlen > IFNAMSIZ - 1)
++ optlen = IFNAMSIZ - 1;
++ memset(devname, 0, sizeof(devname));
+ if (copy_from_user(devname, optval, optlen)) {
+ ret = -EFAULT;
+ break;
+diff -Naur linux-2.6.16/net/ipv4/fib_trie.c linux-2.6.16.16/net/ipv4/fib_trie.c
+--- linux-2.6.16/net/ipv4/fib_trie.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/fib_trie.c 2006-05-11 04:56:24.000000000 +0300
+@@ -314,11 +314,6 @@
+ kfree(container_of(head, struct leaf, rcu));
+ }
+
+-static inline void free_leaf(struct leaf *leaf)
+-{
+- call_rcu(&leaf->rcu, __leaf_free_rcu);
+-}
+-
+ static void __leaf_info_free_rcu(struct rcu_head *head)
+ {
+ kfree(container_of(head, struct leaf_info, rcu));
+@@ -357,7 +352,12 @@
+
+ static inline void tnode_free(struct tnode *tn)
+ {
+- call_rcu(&tn->rcu, __tnode_free_rcu);
++ if(IS_LEAF(tn)) {
++ struct leaf *l = (struct leaf *) tn;
++ call_rcu_bh(&l->rcu, __leaf_free_rcu);
++ }
++ else
++ call_rcu(&tn->rcu, __tnode_free_rcu);
+ }
+
+ static struct leaf *leaf_new(void)
+diff -Naur linux-2.6.16/net/ipv4/ip_output.c linux-2.6.16.16/net/ipv4/ip_output.c
+--- linux-2.6.16/net/ipv4/ip_output.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/ip_output.c 2006-05-11 04:56:24.000000000 +0300
+@@ -86,8 +86,6 @@
+
+ int sysctl_ip_default_ttl = IPDEFTTL;
+
+-static int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*));
+-
+ /* Generate a checksum for an outgoing IP datagram. */
+ __inline__ void ip_send_check(struct iphdr *iph)
+ {
+@@ -421,7 +419,7 @@
+ * single device frame, and queue such a frame for sending.
+ */
+
+-static int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
++int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
+ {
+ struct iphdr *iph;
+ int raw = 0;
+@@ -673,6 +671,8 @@
+ return err;
+ }
+
++EXPORT_SYMBOL(ip_fragment);
++
+ int
+ ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
+ {
+@@ -1249,11 +1249,7 @@
+ iph->tos = inet->tos;
+ iph->tot_len = htons(skb->len);
+ iph->frag_off = df;
+- if (!df) {
+- __ip_select_ident(iph, &rt->u.dst, 0);
+- } else {
+- iph->id = htons(inet->id++);
+- }
++ ip_select_ident(iph, &rt->u.dst, sk);
+ iph->ttl = ttl;
+ iph->protocol = sk->sk_protocol;
+ iph->saddr = rt->rt_src;
+diff -Naur linux-2.6.16/net/ipv4/netfilter/ip_conntrack_netlink.c linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_netlink.c
+--- linux-2.6.16/net/ipv4/netfilter/ip_conntrack_netlink.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_netlink.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1619,7 +1619,7 @@
+ printk("ctnetlink: unregistering from nfnetlink.\n");
+
+ #ifdef CONFIG_IP_NF_CONNTRACK_EVENTS
+- ip_conntrack_unregister_notifier(&ctnl_notifier_exp);
++ ip_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
+ ip_conntrack_unregister_notifier(&ctnl_notifier);
+ #endif
+
+diff -Naur linux-2.6.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
+--- linux-2.6.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c 2006-05-11 04:56:24.000000000 +0300
+@@ -235,12 +235,15 @@
+ flag = 1;
+ }
+
+- /* Cookie Ack/Echo chunks not the first OR
+- Init / Init Ack / Shutdown compl chunks not the only chunks */
+- if ((sch->type == SCTP_CID_COOKIE_ACK
++ /*
++ * Cookie Ack/Echo chunks not the first OR
++ * Init / Init Ack / Shutdown compl chunks not the only chunks
++ * OR zero-length.
++ */
++ if (((sch->type == SCTP_CID_COOKIE_ACK
+ || sch->type == SCTP_CID_COOKIE_ECHO
+ || flag)
+- && count !=0 ) {
++ && count !=0) || !sch->length) {
+ DEBUGP("Basic checks failed\n");
+ return 1;
+ }
+diff -Naur linux-2.6.16/net/ipv4/route.c linux-2.6.16.16/net/ipv4/route.c
+--- linux-2.6.16/net/ipv4/route.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/route.c 2006-05-11 04:56:24.000000000 +0300
+@@ -2750,7 +2750,10 @@
+ /* Reserve room for dummy headers, this skb can pass
+ through good chunk of routing engine.
+ */
+- skb->mac.raw = skb->data;
++ skb->mac.raw = skb->nh.raw = skb->data;
++
++ /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */
++ skb->nh.iph->protocol = IPPROTO_ICMP;
+ skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
+
+ if (rta[RTA_SRC - 1])
+diff -Naur linux-2.6.16/net/ipv4/tcp_output.c linux-2.6.16.16/net/ipv4/tcp_output.c
+--- linux-2.6.16/net/ipv4/tcp_output.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv4/tcp_output.c 2006-05-11 04:56:24.000000000 +0300
+@@ -537,7 +537,9 @@
+ buff = sk_stream_alloc_skb(sk, nsize, GFP_ATOMIC);
+ if (buff == NULL)
+ return -ENOMEM; /* We'll just try again later. */
+- sk_charge_skb(sk, buff);
++
++ buff->truesize = skb->len - len;
++ skb->truesize -= buff->truesize;
+
+ /* Correct the sequence numbers. */
+ TCP_SKB_CB(buff)->seq = TCP_SKB_CB(skb)->seq + len;
+diff -Naur linux-2.6.16/net/ipv6/exthdrs.c linux-2.6.16.16/net/ipv6/exthdrs.c
+--- linux-2.6.16/net/ipv6/exthdrs.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv6/exthdrs.c 2006-05-11 04:56:24.000000000 +0300
+@@ -489,6 +489,18 @@
+ {
+ struct inet6_skb_parm *opt = IP6CB(skb);
+
++ /*
++ * skb->nh.raw is equal to skb->data, and
++ * skb->h.raw - skb->nh.raw is always equal to
++ * sizeof(struct ipv6hdr) by definition of
++ * hop-by-hop options.
++ */
++ if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + 8) ||
++ !pskb_may_pull(skb, sizeof(struct ipv6hdr) + ((skb->h.raw[1] + 1) << 3))) {
++ kfree_skb(skb);
++ return -1;
++ }
++
+ opt->hop = sizeof(struct ipv6hdr);
+ if (ip6_parse_tlv(tlvprochopopt_lst, skb)) {
+ skb->h.raw += (skb->h.raw[1]+1)<<3;
+diff -Naur linux-2.6.16/net/ipv6/xfrm6_policy.c linux-2.6.16.16/net/ipv6/xfrm6_policy.c
+--- linux-2.6.16/net/ipv6/xfrm6_policy.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/ipv6/xfrm6_policy.c 2006-05-11 04:56:24.000000000 +0300
+@@ -191,16 +191,18 @@
+ static inline void
+ _decode_session6(struct sk_buff *skb, struct flowi *fl)
+ {
+- u16 offset = sizeof(struct ipv6hdr);
++ u16 offset = skb->h.raw - skb->nh.raw;
+ struct ipv6hdr *hdr = skb->nh.ipv6h;
+- struct ipv6_opt_hdr *exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset);
+- u8 nexthdr = skb->nh.ipv6h->nexthdr;
++ struct ipv6_opt_hdr *exthdr;
++ u8 nexthdr = skb->nh.raw[IP6CB(skb)->nhoff];
+
+ memset(fl, 0, sizeof(struct flowi));
+ ipv6_addr_copy(&fl->fl6_dst, &hdr->daddr);
+ ipv6_addr_copy(&fl->fl6_src, &hdr->saddr);
+
+ while (pskb_may_pull(skb, skb->nh.raw + offset + 1 - skb->data)) {
++ exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset);
++
+ switch (nexthdr) {
+ case NEXTHDR_ROUTING:
+ case NEXTHDR_HOP:
+diff -Naur linux-2.6.16/net/netfilter/nf_conntrack_netlink.c linux-2.6.16.16/net/netfilter/nf_conntrack_netlink.c
+--- linux-2.6.16/net/netfilter/nf_conntrack_netlink.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/netfilter/nf_conntrack_netlink.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1641,7 +1641,7 @@
+ printk("ctnetlink: unregistering from nfnetlink.\n");
+
+ #ifdef CONFIG_NF_CONNTRACK_EVENTS
+- nf_conntrack_unregister_notifier(&ctnl_notifier_exp);
++ nf_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
+ nf_conntrack_unregister_notifier(&ctnl_notifier);
+ #endif
+
+diff -Naur linux-2.6.16/net/netfilter/nf_conntrack_proto_sctp.c linux-2.6.16.16/net/netfilter/nf_conntrack_proto_sctp.c
+--- linux-2.6.16/net/netfilter/nf_conntrack_proto_sctp.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/netfilter/nf_conntrack_proto_sctp.c 2006-05-11 04:56:24.000000000 +0300
+@@ -240,12 +240,15 @@
+ flag = 1;
+ }
+
+- /* Cookie Ack/Echo chunks not the first OR
+- Init / Init Ack / Shutdown compl chunks not the only chunks */
+- if ((sch->type == SCTP_CID_COOKIE_ACK
++ /*
++ * Cookie Ack/Echo chunks not the first OR
++ * Init / Init Ack / Shutdown compl chunks not the only chunks
++ * OR zero-length.
++ */
++ if (((sch->type == SCTP_CID_COOKIE_ACK
+ || sch->type == SCTP_CID_COOKIE_ECHO
+ || flag)
+- && count !=0 ) {
++ && count !=0) || !sch->length) {
+ DEBUGP("Basic checks failed\n");
+ return 1;
+ }
+diff -Naur linux-2.6.16/net/sctp/inqueue.c linux-2.6.16.16/net/sctp/inqueue.c
+--- linux-2.6.16/net/sctp/inqueue.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/sctp/inqueue.c 2006-05-11 04:56:24.000000000 +0300
+@@ -149,6 +149,7 @@
+ /* This is the first chunk in the packet. */
+ chunk->singleton = 1;
+ ch = (sctp_chunkhdr_t *) chunk->skb->data;
++ chunk->data_accepted = 0;
+ }
+
+ chunk->chunk_hdr = ch;
+diff -Naur linux-2.6.16/net/sctp/sm_statefuns.c linux-2.6.16.16/net/sctp/sm_statefuns.c
+--- linux-2.6.16/net/sctp/sm_statefuns.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/sctp/sm_statefuns.c 2006-05-11 04:56:24.000000000 +0300
+@@ -636,8 +636,9 @@
+ */
+ chunk->subh.cookie_hdr =
+ (struct sctp_signed_cookie *)chunk->skb->data;
+- skb_pull(chunk->skb,
+- ntohs(chunk->chunk_hdr->length) - sizeof(sctp_chunkhdr_t));
++ if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
++ sizeof(sctp_chunkhdr_t)))
++ goto nomem;
+
+ /* 5.1 D) Upon reception of the COOKIE ECHO chunk, Endpoint
+ * "Z" will reply with a COOKIE ACK chunk after building a TCB
+@@ -965,7 +966,8 @@
+ */
+ chunk->subh.hb_hdr = (sctp_heartbeathdr_t *) chunk->skb->data;
+ paylen = ntohs(chunk->chunk_hdr->length) - sizeof(sctp_chunkhdr_t);
+- skb_pull(chunk->skb, paylen);
++ if (!pskb_pull(chunk->skb, paylen))
++ goto nomem;
+
+ reply = sctp_make_heartbeat_ack(asoc, chunk,
+ chunk->subh.hb_hdr, paylen);
+@@ -1860,8 +1862,9 @@
+ * are in good shape.
+ */
+ chunk->subh.cookie_hdr = (struct sctp_signed_cookie *)chunk->skb->data;
+- skb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
+- sizeof(sctp_chunkhdr_t));
++ if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
++ sizeof(sctp_chunkhdr_t)))
++ goto nomem;
+
+ /* In RFC 2960 5.2.4 3, if both Verification Tags in the State Cookie
+ * of a duplicate COOKIE ECHO match the Verification Tags of the
+@@ -5151,7 +5154,9 @@
+ int tmp;
+ __u32 tsn;
+ int account_value;
++ struct sctp_tsnmap *map = (struct sctp_tsnmap *)&asoc->peer.tsn_map;
+ struct sock *sk = asoc->base.sk;
++ int rcvbuf_over = 0;
+
+ data_hdr = chunk->subh.data_hdr = (sctp_datahdr_t *)chunk->skb->data;
+ skb_pull(chunk->skb, sizeof(sctp_datahdr_t));
+@@ -5162,10 +5167,16 @@
+ /* ASSERT: Now skb->data is really the user data. */
+
+ /*
+- * if we are established, and we have used up our receive
+- * buffer memory, drop the frame
++ * If we are established, and we have used up our receive buffer
++ * memory, think about droping the frame.
++ * Note that we have an opportunity to improve performance here.
++ * If we accept one chunk from an skbuff, we have to keep all the
++ * memory of that skbuff around until the chunk is read into user
++ * space. Therefore, once we accept 1 chunk we may as well accept all
++ * remaining chunks in the skbuff. The data_accepted flag helps us do
++ * that.
+ */
+- if (asoc->state == SCTP_STATE_ESTABLISHED) {
++ if ((asoc->state == SCTP_STATE_ESTABLISHED) && (!chunk->data_accepted)) {
+ /*
+ * If the receive buffer policy is 1, then each
+ * association can allocate up to sk_rcvbuf bytes
+@@ -5176,9 +5187,25 @@
+ account_value = atomic_read(&asoc->rmem_alloc);
+ else
+ account_value = atomic_read(&sk->sk_rmem_alloc);
+-
+- if (account_value > sk->sk_rcvbuf)
+- return SCTP_IERROR_IGNORE_TSN;
++ if (account_value > sk->sk_rcvbuf) {
++ /*
++ * We need to make forward progress, even when we are
++ * under memory pressure, so we always allow the
++ * next tsn after the ctsn ack point to be accepted.
++ * This lets us avoid deadlocks in which we have to
++ * drop frames that would otherwise let us drain the
++ * receive queue.
++ */
++ if ((sctp_tsnmap_get_ctsn(map) + 1) != tsn)
++ return SCTP_IERROR_IGNORE_TSN;
++
++ /*
++ * We're going to accept the frame but we should renege
++ * to make space for it. This will send us down that
++ * path later in this function.
++ */
++ rcvbuf_over = 1;
++ }
+ }
+
+ /* Process ECN based congestion.
+@@ -5226,6 +5253,7 @@
+ datalen -= sizeof(sctp_data_chunk_t);
+
+ deliver = SCTP_CMD_CHUNK_ULP;
++ chunk->data_accepted = 1;
+
+ /* Think about partial delivery. */
+ if ((datalen >= asoc->rwnd) && (!asoc->ulpq.pd_mode)) {
+@@ -5242,7 +5270,8 @@
+ * large spill over.
+ */
+ if (!asoc->rwnd || asoc->rwnd_over ||
+- (datalen > asoc->rwnd + asoc->frag_point)) {
++ (datalen > asoc->rwnd + asoc->frag_point) ||
++ rcvbuf_over) {
+
+ /* If this is the next TSN, consider reneging to make
+ * room. Note: Playing nice with a confused sender. A
+@@ -5250,8 +5279,8 @@
+ * space and in the future we may want to detect and
+ * do more drastic reneging.
+ */
+- if (sctp_tsnmap_has_gap(&asoc->peer.tsn_map) &&
+- (sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + 1) == tsn) {
++ if (sctp_tsnmap_has_gap(map) &&
++ (sctp_tsnmap_get_ctsn(map) + 1) == tsn) {
+ SCTP_DEBUG_PRINTK("Reneging for tsn:%u\n", tsn);
+ deliver = SCTP_CMD_RENEGE;
+ } else {
+diff -Naur linux-2.6.16/net/sctp/sm_statetable.c linux-2.6.16.16/net/sctp/sm_statetable.c
+--- linux-2.6.16/net/sctp/sm_statetable.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/sctp/sm_statetable.c 2006-05-11 04:56:24.000000000 +0300
+@@ -366,9 +366,9 @@
+ /* SCTP_STATE_EMPTY */ \
+ {.fn = sctp_sf_ootb, .name = "sctp_sf_ootb"}, \
+ /* SCTP_STATE_CLOSED */ \
+- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
++ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
+ /* SCTP_STATE_COOKIE_WAIT */ \
+- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
++ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
+ /* SCTP_STATE_COOKIE_ECHOED */ \
+ {.fn = sctp_sf_do_ecne, .name = "sctp_sf_do_ecne"}, \
+ /* SCTP_STATE_ESTABLISHED */ \
+@@ -380,7 +380,7 @@
+ /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
+ {.fn = sctp_sf_do_ecne, .name = "sctp_sf_do_ecne"}, \
+ /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
+- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
++ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
+ } /* TYPE_SCTP_ECN_ECNE */
+
+ #define TYPE_SCTP_ECN_CWR { \
+@@ -401,7 +401,7 @@
+ /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
+ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
+ /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
+- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
++ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
+ } /* TYPE_SCTP_ECN_CWR */
+
+ #define TYPE_SCTP_SHUTDOWN_COMPLETE { \
+@@ -647,7 +647,7 @@
+ /* SCTP_STATE_EMPTY */ \
+ {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
+ /* SCTP_STATE_CLOSED */ \
+- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
++ {.fn = sctp_sf_error_closed, .name = "sctp_sf_error_closed"}, \
+ /* SCTP_STATE_COOKIE_WAIT */ \
+ {.fn = sctp_sf_do_prm_requestheartbeat, \
+ .name = "sctp_sf_do_prm_requestheartbeat"}, \
+diff -Naur linux-2.6.16/net/sctp/ulpqueue.c linux-2.6.16.16/net/sctp/ulpqueue.c
+--- linux-2.6.16/net/sctp/ulpqueue.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/net/sctp/ulpqueue.c 2006-05-11 04:56:24.000000000 +0300
+@@ -279,6 +279,7 @@
+ static struct sctp_ulpevent *sctp_make_reassembled_event(struct sk_buff_head *queue, struct sk_buff *f_frag, struct sk_buff *l_frag)
+ {
+ struct sk_buff *pos;
++ struct sk_buff *new = NULL;
+ struct sctp_ulpevent *event;
+ struct sk_buff *pnext, *last;
+ struct sk_buff *list = skb_shinfo(f_frag)->frag_list;
+@@ -297,11 +298,33 @@
+ */
+ if (last)
+ last->next = pos;
+- else
+- skb_shinfo(f_frag)->frag_list = pos;
++ else {
++ if (skb_cloned(f_frag)) {
++ /* This is a cloned skb, we can't just modify
++ * the frag_list. We need a new skb to do that.
++ * Instead of calling skb_unshare(), we'll do it
++ * ourselves since we need to delay the free.
++ */
++ new = skb_copy(f_frag, GFP_ATOMIC);
++ if (!new)
++ return NULL; /* try again later */
++
++ new->sk = f_frag->sk;
++
++ skb_shinfo(new)->frag_list = pos;
++ } else
++ skb_shinfo(f_frag)->frag_list = pos;
++ }
+
+ /* Remove the first fragment from the reassembly queue. */
+ __skb_unlink(f_frag, queue);
++
++ /* if we did unshare, then free the old skb and re-assign */
++ if (new) {
++ kfree_skb(f_frag);
++ f_frag = new;
++ }
++
+ while (pos) {
+
+ pnext = pos->next;
+diff -Naur linux-2.6.16/security/keys/key.c linux-2.6.16.16/security/keys/key.c
+--- linux-2.6.16/security/keys/key.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/security/keys/key.c 2006-05-11 04:56:24.000000000 +0300
+@@ -785,6 +785,10 @@
+
+ key_check(keyring);
+
++ key_ref = ERR_PTR(-ENOTDIR);
++ if (keyring->type != &key_type_keyring)
++ goto error_2;
++
+ down_write(&keyring->sem);
+
+ /* if we're going to allocate a new key, we're going to have
+diff -Naur linux-2.6.16/security/keys/keyring.c linux-2.6.16.16/security/keys/keyring.c
+--- linux-2.6.16/security/keys/keyring.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/security/keys/keyring.c 2006-05-11 04:56:24.000000000 +0300
+@@ -437,6 +437,7 @@
+ /*
+ * search the given keyring only (no recursion)
+ * - keyring must be locked by caller
++ * - caller must guarantee that the keyring is a keyring
+ */
+ key_ref_t __keyring_search_one(key_ref_t keyring_ref,
+ const struct key_type *ktype,
+diff -Naur linux-2.6.16/security/selinux/ss/mls.c linux-2.6.16.16/security/selinux/ss/mls.c
+--- linux-2.6.16/security/selinux/ss/mls.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/security/selinux/ss/mls.c 2006-05-11 04:56:24.000000000 +0300
+@@ -264,7 +264,7 @@
+
+ if (!selinux_mls_enabled) {
+ if (def_sid != SECSID_NULL && oldc)
+- *scontext += strlen(*scontext);
++ *scontext += strlen(*scontext)+1;
+ return 0;
+ }
+
+diff -Naur linux-2.6.16/sound/isa/opti9xx/opti92x-ad1848.c linux-2.6.16.16/sound/isa/opti9xx/opti92x-ad1848.c
+--- linux-2.6.16/sound/isa/opti9xx/opti92x-ad1848.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/sound/isa/opti9xx/opti92x-ad1848.c 2006-05-11 04:56:24.000000000 +0300
+@@ -2088,9 +2088,11 @@
+ int error;
+ struct platform_device *device;
+
++#ifdef CONFIG_PNP
+ pnp_register_card_driver(&opti9xx_pnpc_driver);
+ if (snd_opti9xx_pnp_is_probed)
+ return 0;
++#endif
+ if (! is_isapnp_selected()) {
+ error = platform_driver_register(&snd_opti9xx_driver);
+ if (error < 0)
+@@ -2102,7 +2104,9 @@
+ }
+ platform_driver_unregister(&snd_opti9xx_driver);
+ }
++#ifdef CONFIG_PNP
+ pnp_unregister_card_driver(&opti9xx_pnpc_driver);
++#endif
+ #ifdef MODULE
+ printk(KERN_ERR "no OPTi " CHIP_NAME " soundcard found\n");
+ #endif
+@@ -2115,7 +2119,9 @@
+ platform_device_unregister(snd_opti9xx_platform_device);
+ platform_driver_unregister(&snd_opti9xx_driver);
+ }
++#ifdef CONFIG_PNP
+ pnp_unregister_card_driver(&opti9xx_pnpc_driver);
++#endif
+ }
+
+ module_init(alsa_card_opti9xx_init)
+diff -Naur linux-2.6.16/sound/oss/dmasound/tas_common.c linux-2.6.16.16/sound/oss/dmasound/tas_common.c
+--- linux-2.6.16/sound/oss/dmasound/tas_common.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/sound/oss/dmasound/tas_common.c 2006-05-11 04:56:24.000000000 +0300
+@@ -195,8 +195,8 @@
+
+ printk(KERN_INFO "tas driver [%s])\n", driver_name);
+
+-#ifndef CONFIG_I2C_KEYWEST
+- request_module("i2c-keywest");
++#ifndef CONFIG_I2C_POWERMAC
++ request_module("i2c-powermac");
+ #endif
+ tas_node = find_devices("deq");
+ if (tas_node == NULL)
+diff -Naur linux-2.6.16/sound/pci/hda/patch_realtek.c linux-2.6.16.16/sound/pci/hda/patch_realtek.c
+--- linux-2.6.16/sound/pci/hda/patch_realtek.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/sound/pci/hda/patch_realtek.c 2006-05-11 04:56:24.000000000 +0300
+@@ -2948,6 +2948,8 @@
+ { .modelname = "basic", .config = ALC260_BASIC },
+ { .pci_subvendor = 0x104d, .pci_subdevice = 0x81bb,
+ .config = ALC260_BASIC }, /* Sony VAIO */
++ { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729,
++ .config = ALC260_BASIC }, /* CTL Travel Master U553W */
+ { .modelname = "hp", .config = ALC260_HP },
+ { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
+ { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },
+diff -Naur linux-2.6.16/sound/ppc/daca.c linux-2.6.16.16/sound/ppc/daca.c
+--- linux-2.6.16/sound/ppc/daca.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/sound/ppc/daca.c 2006-05-11 04:56:24.000000000 +0300
+@@ -256,7 +256,7 @@
+
+ #ifdef CONFIG_KMOD
+ if (current->fs->root)
+- request_module("i2c-keywest");
++ request_module("i2c-powermac");
+ #endif /* CONFIG_KMOD */
+
+ mix = kmalloc(sizeof(*mix), GFP_KERNEL);
+diff -Naur linux-2.6.16/sound/ppc/tumbler.c linux-2.6.16.16/sound/ppc/tumbler.c
+--- linux-2.6.16/sound/ppc/tumbler.c 2006-03-20 07:53:29.000000000 +0200
++++ linux-2.6.16.16/sound/ppc/tumbler.c 2006-05-11 04:56:24.000000000 +0300
+@@ -1314,7 +1314,7 @@
+
+ #ifdef CONFIG_KMOD
+ if (current->fs->root)
+- request_module("i2c-keywest");
++ request_module("i2c-powermac");
+ #endif /* CONFIG_KMOD */
+
+ mix = kmalloc(sizeof(*mix), GFP_KERNEL);
diff --git a/packages/linux/linux-tornado-omap2/tornado-20070320.patch b/packages/linux/linux-tornado-omap2/tornado-20070320.patch
new file mode 100644
index 0000000000..30a7752415
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2/tornado-20070320.patch
@@ -0,0 +1,6081 @@
+Index: linux-2.6.16/arch/arm/boot/compressed/misc.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/boot/compressed/misc.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/boot/compressed/misc.c 2007-04-12 10:36:19.000000000 +0200
+@@ -22,6 +22,19 @@
+
+ #include <asm/arch/uncompress.h>
+
++#include <linux/autoconf.h>
++
++#ifdef CONFIG_EFB_DEBUG
++# define SCREEN_W 240
++# define SCREEN_H 320
++#endif
++
++
++static unsigned short *vram = 0;
++static unsigned int current_pix = 0;
++static unsigned int y = 0;
++
++
+ #ifdef STANDALONE_DEBUG
+ #define putstr printf
+ #endif
+@@ -260,6 +273,38 @@
+ return inbuf[0];
+ }
+
++#ifdef CONFIG_EFB_DEBUG
++/*
++ * put a new pixel. on the frame buffer
++ */
++static void putpix(void)
++{
++ if (current_pix == SCREEN_W) {
++ current_pix = 0;
++ }
++ vram[current_pix] = 0xFFFF;
++ ++current_pix;
++ vram[current_pix] = 0x0;
++ ++current_pix;
++}
++
++/*
++ * clear the whole screen
++ */
++static void clear_screen(void)
++{
++ unsigned int i;
++
++ vram = (unsigned short *)0x20001020;
++ current_pix = 0;
++
++ for (i = 0; i < SCREEN_W * SCREEN_H; ++i) {
++ vram[i] = 0;
++ }
++}
++#endif
++
++
+ /* ===========================================================================
+ * Write the output window window[0..outcnt-1] and update crc and bytes_out.
+ * (Used for the decompressed data only.)
+@@ -280,7 +325,8 @@
+ bytes_out += (ulg)outcnt;
+ output_ptr += (ulg)outcnt;
+ outcnt = 0;
+- putstr(".");
++/* putstr("."); */
++ putpix();
+ }
+
+ #ifndef arch_error
+@@ -291,7 +337,7 @@
+ {
+ arch_error(x);
+
+- putstr("\n\n");
++/* putstr("\n\n"); */
+ putstr(x);
+ putstr("\n\n -- System halted");
+
+@@ -309,12 +355,16 @@
+ free_mem_ptr_end = free_mem_ptr_end_p;
+ __machine_arch_type = arch_id;
+
++#ifdef CONFIG_EFB_DEBUG
++ clear_screen();
++#endif
++
+ arch_decomp_setup();
+
+ makecrc();
+- putstr("Uncompressing Linux...");
++/* putstr("Uncompressing Linux..."); */
+ gunzip();
+- putstr(" done, booting the kernel.\n");
++/* putstr(" done, booting the kernel.\n"); */
+ return output_ptr;
+ }
+ #else
+Index: linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,797 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.16.2-omap1
++# Tue Aug 1 01:17:51 2006
++#
++CONFIG_ARM=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++# CONFIG_SYSVIPC is not set
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_SYSCTL is not set
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_UID16=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_EMBEDDED=y
++# CONFIG_KALLSYMS is not set
++CONFIG_HOTPLUG=y
++# CONFIG_PRINTK is not set
++# CONFIG_BUG is not set
++# CONFIG_ELF_CORE is not set
++# CONFIG_BASE_FULL is not set
++# CONFIG_FUTEX is not set
++# CONFIG_EPOLL is not set
++# CONFIG_SHMEM is not set
++CONFIG_CC_ALIGN_FUNCTIONS=0
++CONFIG_CC_ALIGN_LABELS=0
++CONFIG_CC_ALIGN_LOOPS=0
++CONFIG_CC_ALIGN_JUMPS=0
++CONFIG_SLAB=y
++CONFIG_TINY_SHMEM=y
++CONFIG_BASE_SMALL=1
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++# CONFIG_MODULES is not set
++
++#
++# Block layer
++#
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++CONFIG_IOSCHED_DEADLINE=y
++# CONFIG_IOSCHED_CFQ is not set
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_IOP3XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++CONFIG_ARCH_OMAP=y
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_AT91RM9200 is not set
++
++#
++# TI OMAP Implementations
++#
++CONFIG_ARCH_OMAP_OTG=y
++CONFIG_ARCH_OMAP1=y
++# CONFIG_ARCH_OMAP2 is not set
++
++#
++# OMAP Feature Selections
++#
++# CONFIG_OMAP_RESET_CLOCKS is not set
++# CONFIG_OMAP_BOOT_TAG is not set
++# CONFIG_OMAP_MUX is not set
++CONFIG_OMAP_MPU_TIMER=y
++# CONFIG_OMAP_32K_TIMER is not set
++CONFIG_OMAP_LL_DEBUG_UART1=y
++# CONFIG_OMAP_LL_DEBUG_UART2 is not set
++# CONFIG_OMAP_LL_DEBUG_UART3 is not set
++
++#
++# OMAP Core Type
++#
++CONFIG_ARCH_OMAP730=y
++# CONFIG_ARCH_OMAP15XX is not set
++# CONFIG_ARCH_OMAP16XX is not set
++
++#
++# OMAP Board Type
++#
++# CONFIG_MACH_OMAP_PERSEUS2 is not set
++
++#
++# OMAP CPU Speed
++#
++# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
++CONFIG_OMAP_ARM_195MHZ=y
++# CONFIG_OMAP_ARM_182MHZ is not set
++# CONFIG_OMAP_ARM_168MHZ is not set
++# CONFIG_OMAP_ARM_120MHZ is not set
++# CONFIG_OMAP_ARM_60MHZ is not set
++# CONFIG_OMAP_ARM_30MHZ is not set
++CONFIG_MACH_TORNADO=y
++CONFIG_EFB_DEBUG=y
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++
++#
++# Processor Features
++#
++# CONFIG_ARM_THUMB is not set
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++CONFIG_KEXEC=y
++
++#
++# Bus support
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++CONFIG_PREEMPT=y
++# CONFIG_NO_IDLE_HZ is not set
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# CONFIG_XIP_KERNEL is not set
++
++#
++# CPU Frequency scaling
++#
++# CONFIG_CPU_FREQ is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++# CONFIG_APM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++CONFIG_NET_KEY=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++# CONFIG_IPV6 is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++# CONFIG_BLK_DEV_LOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=1
++CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++# CONFIG_NETDEVICES is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++
++#
++# Ethernet (10 or 100Mbit)
++#
++# CONFIG_NET_ETHERNET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_OMAP is not set
++CONFIG_TORNADO_KEYPAD=y
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_OMAP730_WATCHDOG=y
++CONFIG_TORNADO_VIBRATOR=y
++CONFIG_TORNADO_LEDS=y
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_OMAP_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia Capabilities Port drivers
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++CONFIG_FB=y
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_OMAP is not set
++CONFIG_FB_VSFB=y
++# CONFIG_FB_VIRTUAL is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
++CONFIG_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++CONFIG_FONT_6x11=y
++# CONFIG_FONT_7x14 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++# CONFIG_FONT_MINI_4x6 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_10x18 is not set
++
++#
++# Logo configuration
++#
++# CONFIG_LOGO is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_DEVICE=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_TORNADO=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++CONFIG_USB_GADGET_DEBUG_FILES=y
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++CONFIG_USB_GADGET_OMAP=y
++CONFIG_USB_OMAP=y
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=y
++# CONFIG_USB_ETH_RNDIS is not set
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=y
++# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
++# CONFIG_MMC_BULKTRANSFER is not set
++CONFIG_MMC_OMAP=y
++
++#
++# Synchronous Serial Interfaces (SSI)
++#
++# CONFIG_OMAP_UWIRE is not set
++# CONFIG_OMAP_TSC2101 is not set
++
++#
++# CBUS support
++#
++# CONFIG_CBUS is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++# CONFIG_MSDOS_FS is not set
++# CONFIG_VFAT_FS is not set
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_SYSFS=y
++# CONFIG_TMPFS is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_RELAYFS_FS is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++# CONFIG_NLS is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++# CONFIG_MAGIC_SYSRQ is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_DEBUG_PREEMPT=y
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_FORCED_INLINING is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_WAITQ is not set
++CONFIG_DEBUG_ERRORS=y
++# CONFIG_DEBUG_LL is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
+Index: linux-2.6.16/arch/arm/configs/tornado_defconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/configs/tornado_defconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,849 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.16.9-omap1
++# Tue Mar 20 11:07:50 2007
++#
++CONFIG_ARM=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++# CONFIG_SYSVIPC is not set
++CONFIG_POSIX_MQUEUE=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_UID16=y
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_EMBEDDED=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++# CONFIG_ELF_CORE is not set
++# CONFIG_BASE_FULL is not set
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_CC_ALIGN_FUNCTIONS=0
++CONFIG_CC_ALIGN_LABELS=0
++CONFIG_CC_ALIGN_LOOPS=0
++CONFIG_CC_ALIGN_JUMPS=0
++CONFIG_SLAB=y
++CONFIG_TINY_SHMEM=y
++CONFIG_BASE_SMALL=1
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++CONFIG_OBSOLETE_MODPARM=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++
++#
++# Block layer
++#
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++CONFIG_IOSCHED_DEADLINE=y
++# CONFIG_IOSCHED_CFQ is not set
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_IOP3XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++CONFIG_ARCH_OMAP=y
++# CONFIG_ARCH_VERSATILE is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_AT91RM9200 is not set
++
++#
++# TI OMAP Implementations
++#
++CONFIG_ARCH_OMAP_OTG=y
++CONFIG_ARCH_OMAP1=y
++# CONFIG_ARCH_OMAP2 is not set
++
++#
++# OMAP Feature Selections
++#
++# CONFIG_OMAP_RESET_CLOCKS is not set
++# CONFIG_OMAP_BOOT_TAG is not set
++# CONFIG_OMAP_MUX is not set
++CONFIG_OMAP_MPU_TIMER=y
++# CONFIG_OMAP_32K_TIMER is not set
++CONFIG_OMAP_LL_DEBUG_UART1=y
++# CONFIG_OMAP_LL_DEBUG_UART2 is not set
++# CONFIG_OMAP_LL_DEBUG_UART3 is not set
++
++#
++# OMAP Core Type
++#
++CONFIG_ARCH_OMAP730=y
++# CONFIG_ARCH_OMAP15XX is not set
++# CONFIG_ARCH_OMAP16XX is not set
++
++#
++# OMAP Board Type
++#
++# CONFIG_MACH_OMAP_PERSEUS2 is not set
++
++#
++# OMAP CPU Speed
++#
++# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
++CONFIG_OMAP_ARM_195MHZ=y
++# CONFIG_OMAP_ARM_182MHZ is not set
++# CONFIG_OMAP_ARM_168MHZ is not set
++# CONFIG_OMAP_ARM_120MHZ is not set
++# CONFIG_OMAP_ARM_60MHZ is not set
++# CONFIG_OMAP_ARM_30MHZ is not set
++CONFIG_MACH_TORNADO=y
++CONFIG_EFB_DEBUG=y
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++
++#
++# Processor Features
++#
++# CONFIG_ARM_THUMB is not set
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++CONFIG_KEXEC=y
++
++#
++# Bus support
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++CONFIG_PREEMPT=y
++# CONFIG_NO_IDLE_HZ is not set
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# CONFIG_XIP_KERNEL is not set
++
++#
++# CPU Frequency scaling
++#
++# CONFIG_CPU_FREQ is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++CONFIG_PM=y
++CONFIG_PM_LEGACY=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_APM=y
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++CONFIG_NET_KEY=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++# CONFIG_IPV6 is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++# CONFIG_BLK_DEV_LOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=1
++CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++# CONFIG_NETDEVICES is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++
++#
++# Ethernet (10 or 100Mbit)
++#
++# CONFIG_NET_ETHERNET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_OMAP is not set
++CONFIG_TORNADO_KEYPAD=y
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_OMAP730_WATCHDOG=y
++CONFIG_TORNADO_VIBRATOR=y
++CONFIG_TORNADO_LEDS=y
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_OMAP_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia Capabilities Port drivers
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++CONFIG_FB=y
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_OMAP is not set
++CONFIG_FB_VSFB=y
++# CONFIG_FB_VIRTUAL is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
++CONFIG_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++CONFIG_FONT_6x11=y
++# CONFIG_FONT_7x14 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++# CONFIG_FONT_MINI_4x6 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_10x18 is not set
++
++#
++# Logo configuration
++#
++# CONFIG_LOGO is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++CONFIG_BACKLIGHT_DEVICE=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_TORNADO=y
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++CONFIG_SND_SEQUENCER=y
++# CONFIG_SND_SEQ_DUMMY is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=y
++CONFIG_SND_PCM_OSS=y
++CONFIG_SND_SEQUENCER_OSS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_VIRMIDI is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# ALSA ARM devices
++#
++# CONFIG_SND_OMAP_AIC23 is not set
++# CONFIG_SND_OMAP_TSC2101 is not set
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++CONFIG_USB_GADGET_DEBUG_FILES=y
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++CONFIG_USB_GADGET_OMAP=y
++CONFIG_USB_OMAP=y
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=y
++# CONFIG_USB_ETH_RNDIS is not set
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=y
++# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
++# CONFIG_MMC_BULKTRANSFER is not set
++CONFIG_MMC_OMAP=y
++
++#
++# Synchronous Serial Interfaces (SSI)
++#
++# CONFIG_OMAP_UWIRE is not set
++# CONFIG_OMAP_TSC2101 is not set
++
++#
++# CBUS support
++#
++# CONFIG_CBUS is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++# CONFIG_MSDOS_FS is not set
++# CONFIG_VFAT_FS is not set
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_SYSFS=y
++# CONFIG_TMPFS is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_RELAYFS_FS is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++# CONFIG_NLS is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++# CONFIG_MAGIC_SYSRQ is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_DEBUG_PREEMPT=y
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_FORCED_INLINING is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_WAITQ is not set
++CONFIG_DEBUG_ERRORS=y
++# CONFIG_DEBUG_LL is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++CONFIG_SECURITY=y
++CONFIG_SECURITY_NETWORK=y
++# CONFIG_SECURITY_NETWORK_XFRM is not set
++# CONFIG_SECURITY_CAPABILITIES is not set
++# CONFIG_SECURITY_SECLVL is not set
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
+Index: linux-2.6.16/arch/arm/Kconfig
+===================================================================
+--- linux-2.6.16.orig/arch/arm/Kconfig 2007-04-12 10:36:06.000000000 +0200
++++ linux-2.6.16/arch/arm/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -298,6 +298,23 @@
+ depends on CPU_XSCALE && !XSCALE_PMU_TIMER
+ default y
+
++config KEXEC
++ bool "Kexec system call (EXPERIMENTAL)"
++ depends on EXPERIMENTAL
++ help
++ kexec is a system call that implements the ability to shutdown your
++ current kernel, and to start another kernel. It is like a reboot
++ but it is indepedent of the system firmware. And like a reboot
++ you can start any kernel with it, not just Linux.
++
++ The name comes from the similiarity to the exec system call.
++
++ It is an ongoing process to be certain the hardware in a machine
++ is properly shutdown, so do not be surprised if this code does not
++ initially work for you. It may help to enable device hotplugging
++ support. As of this writing the exact hardware interface is
++ strongly in flux, so no good recommendation can be made.
++
+ endmenu
+
+ source "arch/arm/common/Kconfig"
+Index: linux-2.6.16/arch/arm/kernel/calls.S
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/calls.S 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/calls.S 2007-04-12 10:36:19.000000000 +0200
+@@ -198,7 +198,7 @@
+ CALL(sys_sigaltstack_wrapper)
+ CALL(sys_sendfile)
+ CALL(sys_ni_syscall)
+- CALL(sys_ni_syscall)
++ CALL(sys_kexec_load)
+ /* 190 */ CALL(sys_vfork_wrapper)
+ CALL(sys_getrlimit)
+ CALL(sys_mmap2)
+Index: linux-2.6.16/arch/arm/kernel/head.S
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/head.S 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/head.S 2007-04-12 10:36:19.000000000 +0200
+@@ -36,6 +36,79 @@
+ #define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET)
+
+ /*
++ * debug macros, while the MMU is of
++ */
++.macro pix_ok /* blue */
++#ifdef CONFIG_EFB_DEBUG
++ mov r12, #0x0014
++ add r12, r12, #0x00140000
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ add r11, r11, #4
++#endif
++.endm
++
++.macro pix_ko /* red */
++#ifdef CONFIG_EFB_DEBUG
++ mov r12, #0xF800
++ add r12, r12, #0xF8000000
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ add r11, r11, #4
++#endif
++.endm
++
++.macro pix_ctr /* white */
++#ifdef CONFIG_EFB_DEBUG
++ mov r12, #-1
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ add r11, r11, #4
++#endif
++.endm
++
++/*
++ * a more mmu aware code: the frame buffer is mapped at 0xD0001020,
++ * see arch/arm/mach-omap/debug.c
++ */
++.macro pix_mmu /* black pixel */
++#ifdef CONFIG_EFB_DEBUG
++ mov r11, #0xD0000000
++ add r11, r11, #0x1000
++ add r11, r11, #0x20
++/* mov r12, #0x00FF */
++/* add r12, r12, #0x00FF0000 */
++ mov r12, #0
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++ str r12, [r11]
++ add r11, r11, #4
++#endif
++.endm
++
++/*
+ * swapper_pg_dir is the virtual address of the initial page table.
+ * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must
+ * make sure that KERNEL_RAM_ADDR is correctly set. Currently, we expect
+@@ -80,14 +153,31 @@
+ __INIT
+ .type stext, %function
+ ENTRY(stext)
++
++ /*
++ * r11 stores the beginning of the VRAM (0x20001020)
++ */
++ mov r11, #0x20000000
++ add r11, r11, #0x1000
++ add r11, r11, #0x20
++
++ pix_ok
++
+ msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
+ @ and irqs disabled
+ bl __lookup_processor_type @ r5=procinfo r9=cpuid
+ movs r10, r5 @ invalid processor (r5=0)?
+ beq __error_p @ yes, error 'p'
++
++ pix_ok
++
+ bl __lookup_machine_type @ r5=machinfo
+ movs r8, r5 @ invalid machine (r5=0)?
+ beq __error_a @ yes, error 'a'
++
++ pix_ok
++
++
+ bl __create_page_tables
+
+ /*
+@@ -232,14 +322,22 @@
+ .align 5
+ .type __turn_mmu_on, %function
+ __turn_mmu_on:
++
++ pix_ok
++
+ mov r0, r0
+ mcr p15, 0, r0, c1, c0, 0 @ write control reg
+ mrc p15, 0, r3, c0, c0, 0 @ read id reg
+ mov r3, r3
+ mov r3, r3
++
++ pix_mmu
++
+ mov pc, r13
+
+
++1:
++ b 1b
+
+ /*
+ * Setup the initial page tables. We only setup the barest
+@@ -363,6 +461,18 @@
+ str r3, [r0]
+ #endif
+ #endif
++
++#ifdef CONFIG_EFB_DEBUG
++ /*
++ * map frame buffer from 0x20000000 to 0xD0000000
++ * in order to help debugging
++ */
++ add r0, r4, #0xD0000000 >> 18
++ mov r3, #0x20000000
++ add r3, r3, r7
++ str r3, [r0]
++#endif
++
+ mov pc, lr
+ .ltorg
+
+@@ -380,6 +490,7 @@
+
+ .type __error_p, %function
+ __error_p:
++ pix_ko
+ #ifdef CONFIG_DEBUG_LL
+ adr r0, str_p1
+ bl printascii
+@@ -390,6 +501,7 @@
+
+ .type __error_a, %function
+ __error_a:
++ pix_ko
+ #ifdef CONFIG_DEBUG_LL
+ mov r4, r1 @ preserve machine ID
+ adr r0, str_a1
+Index: linux-2.6.16/arch/arm/kernel/machine_kexec.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/kernel/machine_kexec.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,77 @@
++/*
++ * machine_kexec.c - handle transition of Linux booting another kernel
++ */
++
++#include <linux/mm.h>
++#include <linux/kexec.h>
++#include <linux/delay.h>
++#include <linux/reboot.h>
++#include <asm/pgtable.h>
++#include <asm/pgalloc.h>
++#include <asm/mmu_context.h>
++#include <asm/io.h>
++#include <asm/cacheflush.h>
++#include <asm/mach-types.h>
++
++const extern unsigned char relocate_new_kernel[];
++const extern unsigned int relocate_new_kernel_size;
++
++extern unsigned long kexec_start_address;
++extern unsigned long kexec_indirection_page;
++extern unsigned long kexec_mach_type;
++
++/*
++ * Provide a dummy crash_notes definition while crash dump arrives to arm.
++ * This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
++ */
++/* note_buf_t *crash_notes; */
++
++int machine_kexec_prepare(struct kimage *image)
++{
++ return 0;
++}
++
++void machine_kexec_cleanup(struct kimage *image)
++{
++}
++
++void machine_shutdown(void)
++{
++}
++
++void machine_crash_shutdown(struct pt_regs *regs)
++{
++}
++
++void machine_kexec(struct kimage *image)
++{
++ unsigned long page_list;
++ unsigned long reboot_code_buffer_phys;
++ void *reboot_code_buffer;
++
++
++ page_list = image->head & PAGE_MASK;
++
++ /* we need both effective and real address here */
++ reboot_code_buffer_phys =
++ page_to_pfn(image->control_code_page) << PAGE_SHIFT;
++ reboot_code_buffer = page_address(image->control_code_page);
++
++ /* Prepare parameters for reboot_code_buffer*/
++ kexec_start_address = image->start;
++ kexec_indirection_page = page_list;
++ kexec_mach_type = machine_arch_type;
++
++ /* copy our kernel relocation code to the control code page */
++ memcpy(reboot_code_buffer,
++ relocate_new_kernel, relocate_new_kernel_size);
++
++
++ flush_icache_range(reboot_code_buffer,
++ reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
++ printk(KERN_INFO "Bye!\n");
++
++ cpu_proc_fin();
++ setup_mm_for_reboot(0); /* mode is not used, so just pass 0*/
++ cpu_reset(reboot_code_buffer_phys);
++}
+Index: linux-2.6.16/arch/arm/kernel/Makefile
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/Makefile 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -21,6 +21,7 @@
+ obj-$(CONFIG_PCI) += bios32.o
+ obj-$(CONFIG_SMP) += smp.o
+ obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
++obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
+
+ obj-$(CONFIG_IWMMXT) += iwmmxt.o
+ AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
+Index: linux-2.6.16/arch/arm/kernel/relocate_kernel.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/kernel/relocate_kernel.S 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,74 @@
++/*
++ * relocate_kernel.S - put the kernel image in place to boot
++ */
++
++#include <asm/kexec.h>
++
++ .globl relocate_new_kernel
++relocate_new_kernel:
++
++ ldr r0,kexec_indirection_page
++ ldr r1,kexec_start_address
++
++
++0: /* top, read another word for the indirection page */
++ ldr r3, [r0],#4
++
++ /* Is it a destination page. Put destination address to r4 */
++ tst r3,#1,0
++ beq 1f
++ bic r4,r3,#1
++ b 0b
++1:
++ /* Is it an indirection page */
++ tst r3,#2,0
++ beq 1f
++ bic r0,r3,#2
++ b 0b
++1:
++
++ /* are we done ? */
++ tst r3,#4,0
++ beq 1f
++ b 2f
++
++1:
++ /* is it source ? */
++ tst r3,#8,0
++ beq 0b
++ bic r3,r3,#8
++ mov r6,#1024
++9:
++ ldr r5,[r3],#4
++ str r5,[r4],#4
++ subs r6,r6,#1
++ bne 9b
++ b 0b
++
++2:
++ /* Jump to relocated kernel */
++ mov lr,r1
++ mov r0,#0
++ ldr r1,kexec_mach_type
++ mov r2,#0
++ mov pc,lr
++
++ .globl kexec_start_address
++kexec_start_address:
++ .long 0x0
++
++ .globl kexec_indirection_page
++kexec_indirection_page:
++ .long 0x0
++
++ .globl kexec_mach_type
++kexec_mach_type:
++ .long 0x0
++
++relocate_new_kernel_end:
++
++ .globl relocate_new_kernel_size
++relocate_new_kernel_size:
++ .long relocate_new_kernel_end - relocate_new_kernel
++
++
+Index: linux-2.6.16/arch/arm/kernel/setup.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/setup.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/setup.c 2007-04-12 10:36:19.000000000 +0200
+@@ -768,6 +768,16 @@
+ memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
+ saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
+ parse_cmdline(cmdline_p, from);
++
++#ifdef CONFIG_EFB_DEBUG
++ /*
++ * paging_init is going to wipe out any section other than the
++ * kernel code and data allocated in head.S so the framebuffer
++ * is going not to be available during paging_init.
++ */
++ efb_disable();
++#endif
++
+ paging_init(&meminfo, mdesc);
+ request_standard_resources(&meminfo, mdesc);
+
+Index: linux-2.6.16/arch/arm/kernel/traps.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/traps.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/traps.c 2007-04-12 10:36:19.000000000 +0200
+@@ -55,10 +55,10 @@
+ void dump_backtrace_entry(unsigned long where, unsigned long from)
+ {
+ #ifdef CONFIG_KALLSYMS
+- printk("[<%08lx>] ", where);
++/* printk("[<%08lx>] ", where); */
+ print_symbol("(%s) ", where);
+- printk("from [<%08lx>] ", from);
+- print_symbol("(%s)\n", from);
++/* printk("from [<%08lx>] ", from); */
++/* print_symbol("(%s)\n", from); */
+ #else
+ printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
+ #endif
+@@ -205,7 +205,7 @@
+
+ printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
+ print_modules();
+- __show_regs(regs);
++/* __show_regs(regs); */
+ printk("Process %s (pid: %d, stack limit = 0x%p)\n",
+ tsk->comm, tsk->pid, thread + 1);
+
+@@ -547,7 +547,7 @@
+ current->pid, current->comm, no);
+ dump_instr(regs);
+ if (user_mode(regs)) {
+- __show_regs(regs);
++/* __show_regs(regs); */
+ c_backtrace(regs->ARM_fp, processor_mode(regs));
+ }
+ }
+Index: linux-2.6.16/arch/arm/lib/backtrace.S
+===================================================================
+--- linux-2.6.16.orig/arch/arm/lib/backtrace.S 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/lib/backtrace.S 2007-04-12 10:36:19.000000000 +0200
+@@ -103,7 +103,9 @@
+ .align 0
+ 1007: ldr r0, =.Lbad
+ mov r1, frame
++#ifdef CONFIG_PRINTK
+ bl printk
++#endif
+ LOADREGS(fd, sp!, {r4 - r8, pc})
+ .ltorg
+ .previous
+@@ -138,12 +140,16 @@
+ ldr r2, [stack], #-4
+ mov r1, reg
+ adr r0, .Lfp
++#ifdef CONFIG_PRINTK
+ bl printk
++#endif
+ 2: subs reg, reg, #1
+ bpl 1b
+ teq r7, #0
+ adrne r0, .Lcr
++#ifdef CONFIG_PRINTK
+ blne printk
++#endif
+ mov r0, stack
+ LOADREGS(fd, sp!, {instr, reg, stack, r7, pc})
+
+Index: linux-2.6.16/arch/arm/mach-omap1/clock.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:19.000000000 +0200
+@@ -267,11 +267,13 @@
+ if (!ptr->rate)
+ return -EINVAL;
+
++#if 0
+ /*
+ * In most cases we should not need to reprogram DPLL.
+ * Reprogramming the DPLL is tricky, it must be done from SRAM.
+ */
+ omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
++#endif
+
+ ck_dpll1.rate = ptr->pll_rate;
+ propagate_rate(&ck_dpll1);
+@@ -774,12 +776,13 @@
+ omap_writew(1, ARM_RSTCT2);
+ omap_writew(0x400, ARM_IDLECT1);
+
++
+ /*
+ * According to OMAP5910 Erratum SYS_DMA_1, bit DMACK_REQ (bit 8)
+ * of the ARM_IDLECT2 register must be set to zero. The power-on
+ * default value of this bit is one.
+ */
+- omap_writew(0x0000, ARM_IDLECT2); /* Turn LCD clock off also */
++ omap_writew(0x0008, ARM_IDLECT2); /* But keep LCD clock active ... */
+
+ /*
+ * Only enable those clocks we will need, let the drivers
+Index: linux-2.6.16/arch/arm/mach-omap1/clock.h
+===================================================================
+--- linux-2.6.16.orig/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:19.000000000 +0200
+@@ -182,7 +182,7 @@
+ static struct clk arm_ck = {
+ .name = "arm_ck",
+ .parent = &ck_dpll1,
+- .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
++ .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | CLOCK_IN_OMAP730 |
+ CLOCK_IN_OMAP310 | RATE_CKCTL | RATE_PROPAGATES |
+ ALWAYS_ENABLED,
+ .rate_offset = CKCTL_ARMDIV_OFFSET,
+@@ -196,7 +196,7 @@
+ .name = "armper_ck",
+ .parent = &ck_dpll1,
+ .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
+- CLOCK_IN_OMAP310 | RATE_CKCTL |
++ CLOCK_IN_OMAP310 | CLOCK_IN_OMAP730 | RATE_CKCTL |
+ CLOCK_IDLE_CONTROL,
+ .enable_reg = (void __iomem *)ARM_IDLECT2,
+ .enable_bit = EN_PERCK,
+@@ -715,6 +715,20 @@
+ .disable = &omap1_clk_disable_generic,
+ };
+
++static struct clk mmc_ck_730 = {
++ .name = "mmc_ck",
++ .id = 3,
++ /* Functional clock is direct from ULPD, interface clock is ARMPER */
++ .parent = &armper_ck.clk,
++ .rate = 48000000,
++ .flags = CLOCK_IN_OMAP730 |
++ RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
++ .enable_reg = (void __iomem *)SOFT_REQ_REG,
++ .enable_bit = 12,
++ .enable = &omap1_clk_enable_generic,
++ .disable = &omap1_clk_disable_generic,
++};
++
+ static struct clk virtual_ck_mpu = {
+ .name = "mpu",
+ .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
+@@ -799,6 +813,7 @@
+ &bclk_1510, &bclk_16xx,
+ &mmc1_ck,
+ &mmc2_ck,
++ &mmc_ck_730,
+ /* Virtual clocks */
+ &virtual_ck_mpu,
+ &i2c_fck,
+Index: linux-2.6.16/arch/arm/mach-omap1/efb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/mach-omap1/efb.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,200 @@
++/*
++** efb.c for efb in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Wed Apr 5 18:55:08 2006 nico
++** Last update Thu May 11 13:50:52 2006 nico
++*/
++
++/*
++ *
++ * early frame buffer debug routines.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++#include <asm/mach-types.h>
++#include <asm/arch/efb.h>
++
++static void efb_move_screen_up(void);
++static void blit_char(unsigned int x, unsigned int y, char c);
++
++#define PIX16(R, G, B) (((R >> 3) << 11) | ((G >> 2) << 5) | ((B >> 3)))
++
++
++/* 0xD0000000 is where OMAP730_SRAM is mapped by head.S */
++/*
++ * Windows CE seems to have physical frame buffer mapped to
++ * 0x20001020. we try to keep this space available at virtual address
++ * 0xD0001020 during kernel boot. This is strange as this is not page
++ * aligned. However even if I don't know how to do it, there must be a
++ * way to configure the framebuffer location inside the sram.
++ *
++ * TODO: see omap730 TRM.
++ */
++static unsigned short __initdata *vram = (unsigned short *)0xD0001020;
++
++/*
++ * no attribute since it is used by efb_putstr which has no
++ * attribute ...
++ */
++static int enabled = 0;
++
++unsigned int efb_width;
++unsigned int efb_height;
++
++void __init efb_init(void)
++{
++ unsigned int i;
++
++ /*
++ * only htc typhoon is known to have 176x220 screen. all other
++ * machines have 320x240 screens.
++ */
++ if (machine_is_typhoon()) {
++ efb_width = 176;
++ efb_height = 220;
++ } else {
++ efb_width = 240;
++ efb_height = 320;
++ }
++
++ for (i = 0; i < efb_width * efb_height; ++i) {
++ vram[i] = 0;
++ }
++
++ efb_enable();
++}
++
++
++/*
++ * Write a pixel with color (r,g,b) at screen coordinate (x,y)
++ */
++static void __init dbg_pix(int x, int y, int r, int g, int b)
++{
++ unsigned short pix = PIX16(r, g, b);
++
++ vram[y * efb_width + x] = pix;
++}
++
++
++static __initdata int x = 1;
++static __initdata int y = 0;
++
++
++/*
++ * put string s to the frame buffer using the 5x5 font.
++ *
++ * this functions has no __init attribute since it is can be called in printk.
++ */
++void efb_putstr(const char *s)
++{
++ if (enabled == 0)
++ return ;
++
++ while (*s) {
++ if (*s == '\n')
++ goto newline;
++ blit_char(x, y, *s);
++ x += 6;
++
++ if (x + 6 > efb_width) {
++ newline:
++ if (y + 6 > efb_height - 6)
++ efb_move_screen_up();
++ else
++ y += 6;
++ x = 1;
++ }
++ ++s;
++ }
++}
++
++#define NR_LINE (efb_height / 6)
++
++#define FONT_WIDTH 5
++#define FONT_HEIGHT 5
++
++/*
++ * blit a char on the screen at position (x,y)
++ */
++static __init void blit_char(unsigned int x, unsigned int y, char c)
++{
++ const char *cur_font;
++ int i, j;
++
++ /*
++ * do not blit glyph if some part of it are ofscreen.
++ */
++ if (x + FONT_WIDTH > efb_width)
++ return;
++ if (y + FONT_HEIGHT > efb_height)
++ return;
++
++ cur_font = efb_font[(unsigned int)c];
++ for (j= 0; j < FONT_HEIGHT; ++j) {
++ for (i = 0; i < FONT_WIDTH; ++i) {
++ if (cur_font[j * FONT_WIDTH + i])
++ dbg_pix(x + i, y + j, 255, 255, 255);
++ else
++ dbg_pix(x + i, y + j, 0, 0, 0);
++ }
++ }
++}
++
++/*
++ * perform some basic one way scrolling.
++ *
++ * for each line l do
++ * clear line l
++ * break if l is the last line
++ * copy next line over l
++ * done
++ *
++ * It is not possible to scroll back.
++ */
++static void __init efb_move_screen_up(void)
++{
++ int i, k;
++ int start1, start2;
++
++ for (k = 0; 1; ++k) {
++ start1 = efb_width * 6 * k;
++ start2 = efb_width * 6 * (k + 1);
++ /* clear the n current line */
++ for (i = 0; i < 6 * efb_width; ++i)
++ vram[start1 + i] = 0;
++ if (k == NR_LINE - 1)
++ break;
++ /* copy the next line to the current line */
++ for (i = 0; i < 6 * efb_width; ++i)
++ vram[start1 + i] = vram[start2 +i];
++ }
++}
++
++void __init efb_disable(void)
++{
++ enabled = 0;
++}
++
++void __init efb_enable(void)
++{
++ enabled = 1;
++}
+Index: linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,982 @@
++
++/*
++ * file generated by makecfont.pl and bmp2c
++ * resources for a simple 5x5 font
++ */
++
++const char efb_font[255][25] = {
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* lpar.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* rpar.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* star.bmp */
++ {
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* dash.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* dot.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* slash.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* 0.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 1.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 2.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 3.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 4.bmp */
++ {
++ 0xFF, 0x00, 0xFF, 0x00, 0x00,
++ 0xFF, 0x00, 0xFF, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* 5.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ },
++ /* 6.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 7.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* 8.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* 9.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* ddot.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* not available */
++ { 0x00 },
++ /* lchev.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0xFF, 0xFF, 0x00,
++ 0xFF, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* eq.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* rchev.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* A.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* B.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* C.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* D.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* E.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* F.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* G.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* H.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* I.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* J.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* K.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
++ 0xFF, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* L.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* M.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* N.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* O.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* P.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* Q.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0xFF,
++ },
++ /* R.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* S.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* T.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* U.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* V.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* W.bmp */
++ {
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ },
++ /* X.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* Y.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* Z.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* ldash.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* aslash.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* rdash.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* not available */
++ { 0x00 },
++ /* _.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* not available */
++ { 0x00 },
++ /* a.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* b.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* c.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* d.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* e.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* f.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* g.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* h.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* i.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* j.bmp */
++ {
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* k.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
++ 0xFF, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* l.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* m.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* n.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* o.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* p.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* q.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0xFF, 0x00, 0xFF,
++ },
++ /* r.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* s.bmp */
++ {
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* t.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* u.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
++ },
++ /* v.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* w.bmp */
++ {
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ },
++ /* x.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ },
++ /* y.bmp */
++ {
++ 0xFF, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0xFF, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0x00, 0x00, 0x00, 0x00,
++ },
++ /* z.bmp */
++ {
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0xFF, 0x00, 0x00, 0x00,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ },
++ /* not available */
++ { 0x00 },
++ /* pipe.bmp */
++ {
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ 0x00, 0x00, 0xFF, 0x00, 0x00,
++ },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++ /* not available */
++ { 0x00 },
++};
++
++/* c'étais vraiment tres intéressant */
+Index: linux-2.6.16/arch/arm/mach-omap1/io.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/mach-omap1/io.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-omap1/io.c 2007-04-12 10:36:19.000000000 +0200
+@@ -20,6 +20,8 @@
+ #include <asm/arch/tc.h>
+ #include <asm/arch/omapfb.h>
+
++#include <asm/arch/efb.h>
++
+ extern int omap1_clk_init(void);
+ extern void omap_check_revision(void);
+ extern void omap_sram_init(void);
+@@ -49,7 +51,7 @@
+ .pfn = __phys_to_pfn(OMAP730_DSPREG_START),
+ .length = OMAP730_DSPREG_SIZE,
+ .type = MT_DEVICE
+- }
++ },
+ };
+ #endif
+
+@@ -143,4 +145,3 @@
+
+ omap1_mux_init();
+ }
+-
+Index: linux-2.6.16/arch/arm/mach-omap1/Kconfig
+===================================================================
+--- linux-2.6.16.orig/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -171,3 +171,10 @@
+
+ source "arch/arm/plat-omap/dsp/Kconfig"
+
++source "arch/arm/mach-omap1/tornado/Kconfig"
++
++config EFB_DEBUG
++ bool "Early Frame Buffer debugging routines"
++ depends on MACH_TORNADO
++ help
++ Output in the framebuffer of the HTC phones as early as possible (experimental, ...).
+Index: linux-2.6.16/arch/arm/mach-omap1/Makefile
+===================================================================
+--- linux-2.6.16.orig/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -37,3 +37,5 @@
+ led-$(CONFIG_MACH_OMAP_OSK) += leds-osk.o
+ obj-$(CONFIG_LEDS) += $(led-y)
+
++obj-y += tornado/
++obj-$(CONFIG_EFB_DEBUG) += efb.o efb-font5x5.o
+Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,5 @@
++config MACH_TORNADO
++ bool "HTC Tornado Support"
++ depends on ARCH_OMAP730
++ help
++ HTC Tornado smartphone support (AKA SPV C600, QTEK 8310, ...)
+Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,11 @@
++##
++## Makefile for linux-on-tornado in /home/nico/work/tornado/linux-tornado
++##
++## Made by nico
++## Login <nico@chac.le-poulpe.net>
++##
++## Started on Wed Apr 5 17:20:58 2006 nico
++## Last update Thu May 11 12:34:33 2006 nico
++##
++
++obj-$(CONFIG_MACH_TORNADO) += tornado.o
+Index: linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,242 @@
++/*
++** tornado.c for linux-on-tornado in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Wed Apr 5 17:20:24 2006 nico
++** Last update Fri Jul 7 01:31:54 2006 nico
++*/
++
++/*
++ *
++ * HTC Tornado init stuff
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/arch/omap730.h>
++#include <asm/page.h>
++#include <asm/memory.h>
++#include <asm/arch/common.h>
++#include <asm/arch/board.h>
++#include <asm/arch/efb.h>
++#include <asm/arch/io.h>
++#include <asm/arch/irqs.h>
++#include <asm/arch/gpio.h>
++
++#include <linux/delay.h>
++
++#define TORNADO_GPIO_DM 35
++#define TORNADO_GPIO_DP 36
++
++static void __init
++tornado_map_io(void)
++{
++
++ omap1_map_common_io();
++
++#ifdef CONFIG_EFB_DEBUG
++ /*
++ * reenable simple framebuffer output on HTC typhoon:
++ * now safe to do it: sram has been remapped.
++ */
++ efb_enable();
++#endif
++ printk("tornado_map_io done.\n");
++}
++
++static void __init
++tornado_usb_enable(void)
++{
++ unsigned int tries = 20;
++ printk("trying to enable USB.\n");
++
++ /* force USB_EN GPIO to 0 */
++ do {
++ omap_set_gpio_direction(33, 0); /* output */
++ omap_set_gpio_dataout(33, 0); /* low */
++ --tries;
++ } while(omap_get_gpio_datain(33) && tries);
++ if (tries) {
++ printk("unable to reset USB_EN GPIO after 20 tries.\n");
++ printk("I will try to continue anyway: USB may not be available.\n");
++ }
++ printk("USB_EN to 0 after %i tries.\n", tries);
++
++ omap_set_gpio_dataout(73, 0);
++
++ omap_set_gpio_direction(TORNADO_GPIO_DM, 1); /* input */
++
++ /* get uart control from GSM */
++
++ /* select GPIO35 for D_MCLK_OUT */
++ /* select GPIO36 for D_CRESET */
++ omap_writel(omap_readl(OMAP730_IO_CONF_3) & 0xffffffcc, OMAP730_IO_CONF_3);
++ omap_writel(omap_readl(OMAP730_IO_CONF_3) | 0x000000cc, OMAP730_IO_CONF_3);
++
++
++ omap_set_gpio_direction(TORNADO_GPIO_DP, 1); /* input */
++
++ /* select D_DM, D_DP for D_DM and disable PE_DM control */
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xff1fffff, OMAP730_IO_CONF_2);
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x00100000, OMAP730_IO_CONF_2);
++ mdelay(100);
++
++ /* select USB_VBUSI for D_VBUSI, enable PE_VIBUSI pull enable control */
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xf1ffffff, OMAP730_IO_CONF_2);
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x01000000, OMAP730_IO_CONF_2);
++
++ /* set USB_VBUS_CTRL */
++ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1);
++}
++
++static void __init
++tornado_usb_otg(void)
++{
++ /* clock configuration */
++ omap_writew(omap_readw(ULPD_SOFT_REQ) | (1 << 8) | SOFT_USB_CLK_REQ, ULPD_SOFT_REQ);
++
++ // clk_enable(&l3_ocpi_ck);
++ omap_writew(omap_readw(ARM_IDLECT3) | (1 << 0), ARM_IDLECT3);
++
++ /* pin muxing */
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 2), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 3), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 15), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 23), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 26), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 24), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 10), OMAP730_MODE_1);
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 11), OMAP730_MODE_1);
++}
++
++static struct omap_usb_config tornado_usb_config __initdata =
++{
++ .register_dev = 1,
++ .register_host = 0,
++ .otg = 0,
++ .hmc_mode = 4,
++ .pins[0] = 2,
++ .pins[1] = 0,
++ .pins[2] = 0,
++};
++
++static struct omap_mmc_config tornado_mmc_config __initdata =
++{
++ .mmc[0] = {
++ .enabled = 1,
++ .nomux = 1,
++ .wire4 = 1,
++ .power_pin = -1,
++ .switch_pin = -1,
++ }
++};
++
++static struct omap_board_config_kernel tornado_config[] =
++{
++ { OMAP_TAG_USB, &tornado_usb_config },
++ { OMAP_TAG_MMC, &tornado_mmc_config },
++};
++
++static void __init
++tornado_mmc_init(void)
++{
++ unsigned int tries;
++
++# define OMAP_MMC_REG_SYSC (0xfffb7800 + 0x32)
++# define OMAP_MMC_REG_SYSS (0xfffb7800 + 0x34)
++# define OMAP_MMC_REG_CTO (0xfffb7800 + 0x0e)
++# define OMAP_MMC_REG_DTO (0xfffb7800 + 0x1c)
++
++ /* put mmc host into reset ... */
++ omap_writew(1, OMAP_MMC_REG_SYSC);
++
++ tries = 100;
++ while (omap_readw(OMAP_MMC_REG_SYSS) == 0 && tries) {
++ mdelay(50);
++ --tries;
++ }
++ printk("MMC host reset done: remaining tries: %i\n", tries);
++
++ /* force mode 0 for D_SMC_DAT3, D_SMC_DAT2, D_SMC, no pull up enable */
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 8), OMAP730_IO_CONF_2);
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 12), OMAP730_IO_CONF_2);
++ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 16), OMAP730_IO_CONF_2);
++}
++
++struct platform_device gsm_device = {
++ .name = "typhoon-gsm",
++ .id = 1
++};
++
++static struct platform_device *devices[] __initdata = {
++ &gsm_device,
++};
++
++static void __init
++tornado_init(void)
++{
++ printk("Tornado init.\n");
++ omap_board_config = tornado_config;
++ omap_board_config_size = ARRAY_SIZE(tornado_config);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++
++ if (omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) {
++ /*
++ * disable a potentially running watchdog timer before
++ * it kills us.
++ */
++ printk("OMAP730 Watchdog seems to be activated, disabling it for now.\n");
++ omap_writel(0xF5, OMAP_WDT_TIMER_MODE);
++ omap_writel(0xA0, OMAP_WDT_TIMER_MODE);
++ }
++
++ tornado_usb_otg();
++ tornado_usb_enable();
++ tornado_mmc_init();
++}
++
++static void __init
++tornado_init_irq(void)
++{
++ printk("tornado_init_irq.\n");
++ omap1_init_common_hw();
++ omap_init_irq();
++ omap_gpio_init();
++}
++
++MACHINE_START(TORNADO, "HTC Tornado")
++ /* Maintainer: Nicolas Schichan <nico@chac.le-poulpe.net> */
++ .phys_io = 0xfff00000,
++ .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
++ .boot_params = 0x10000100,
++ .map_io = tornado_map_io,
++ .init_irq = tornado_init_irq,
++ .init_machine = tornado_init,
++ .timer = &omap_timer,
++MACHINE_END
+Index: linux-2.6.16/arch/arm/plat-omap/sram.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/plat-omap/sram.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/arch/arm/plat-omap/sram.c 2007-04-12 10:36:19.000000000 +0200
+@@ -33,9 +33,12 @@
+ #define OMAP2_SRAM_PUB_VA 0xd0000800
+
+ #if defined(CONFIG_ARCH_OMAP24XX)
+-#define SRAM_BOOTLOADER_SZ 0x00
++# define SRAM_BOOTLOADER_SZ 0x00
++#elif defined(CONFIG_EFB_DEBUG)
++/* reserve memory for frame buffer too ... */
++# define SRAM_BOOTLOADER_SZ (0x1020 + 320 * 240 * 2)
+ #else
+-#define SRAM_BOOTLOADER_SZ 0x80
++# define SRAM_BOOTLOADER_SZ 0x80
+ #endif
+
+ #define VA_REQINFOPERM0 IO_ADDRESS(0x68005048)
+Index: linux-2.6.16/arch/arm/plat-omap/usb.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/plat-omap/usb.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/plat-omap/usb.c 2007-04-12 10:36:19.000000000 +0200
+@@ -123,11 +123,11 @@
+ * - only peripherals may use the internal D+/D- pulldowns
+ * - OTG support on this port not yet written
+ */
+-
+- USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4);
+- if (!is_device)
+- USB_TRANSCEIVER_CTRL_REG |= (3 << 1);
+-
++ if (!cpu_is_omap730()) {
++ USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4);
++ if (!is_device)
++ USB_TRANSCEIVER_CTRL_REG |= (3 << 1);
++ }
+ return 3 << 16;
+ }
+
+@@ -457,6 +457,11 @@
+ syscon &= ~DEV_IDLE_EN;
+ udc_device.dev.platform_data = config;
+ /* FIXME patch IRQ numbers for omap730 */
++ if (cpu_is_omap730()) {
++ udc_resources[1].start = INT_730_USB_GENI;
++ udc_resources[2].start = INT_730_USB_NON_ISO;
++ udc_resources[3].start = INT_730_USB_ISO;
++ }
+ status = platform_device_register(&udc_device);
+ if (status)
+ pr_debug("can't register UDC device, %d\n", status);
+Index: linux-2.6.16/arch/arm/tools/mach-types
+===================================================================
+--- linux-2.6.16.orig/arch/arm/tools/mach-types 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/arch/arm/tools/mach-types 2007-04-12 10:36:19.000000000 +0200
+@@ -969,3 +969,4 @@
+ fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
+ dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
+ gesbc9312 MACH_GESBC9312 GESBC9312 958
++htc_tornado MACH_TORNADO TORNADO 6665
+Index: linux-2.6.16/ChangeLog
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/ChangeLog 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,3 @@
++2006-04-10 nico <nico@localhost.localdomain>
++
++ * wizard-keypad.c: support for arrow keys (GPIO based).
+Index: linux-2.6.16/drivers/char/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/char/Kconfig 2007-04-12 10:36:08.000000000 +0200
++++ linux-2.6.16/drivers/char/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -678,6 +678,21 @@
+
+ If unsure, say N.
+
++config TORNADO_VIBRATOR
++ tristate "HTC Tornado vibrator"
++ depends on MACH_TORNADO
++ help
++ HTC Tornado vibrator support. supports for misc
++ device with minor number 240. implements two IOCTLs:
++ VIBRATOR_ENABLE and VIBRATOR_DISABLE.
++
++config TORNADO_LEDS
++ tristate "HTC Tornado led driver"
++ depends on MACH_TORNADO
++ help
++ HTC Tornado led driver. misc device with minor
++ number 241.
++
+ config NVRAM
+ tristate "/dev/nvram support"
+ depends on ATARI || X86 || ARM || GENERIC_NVRAM
+Index: linux-2.6.16/drivers/char/Makefile
+===================================================================
+--- linux-2.6.16.orig/drivers/char/Makefile 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/char/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -97,6 +97,10 @@
+
+ obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o
+ obj-$(CONFIG_TCG_TPM) += tpm/
++
++obj-$(CONFIG_TORNADO_VIBRATOR) += tornado-vibrator.o
++obj-$(CONFIG_TORNADO_LEDS) += tornado-leds.o
++
+ # Files generated that shall be removed upon make clean
+ clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c
+
+Index: linux-2.6.16/drivers/char/tornado-leds.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/char/tornado-leds.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,253 @@
++/*
++** tornado-leds.c for leds in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Mon Apr 17 11:19:59 2006 nico
++** Last update Thu May 25 15:32:23 2006 nico
++*/
++
++/*
++ *
++ * HTC Tornado LED driver.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++#include <linux/init.h>
++#include <linux/miscdevice.h>
++#include <linux/moduleparam.h>
++#include <linux/fs.h>
++#include <linux/bitops.h>
++
++#include <asm/arch/gpio.h>
++
++#define LEDS_MINOR 241
++
++/*
++ * ioctl definitions.
++ */
++#define IOCTL_LED_ENABLE 0x4242 /* param: color */
++#define IOCTL_LED_BLINK 0x4243 /* param: color */
++#define IOCTL_LED_DISABLE 0x4244 /* no param */
++#define IOCTL_KPLED_ENABLE 0x4245 /* no param */
++#define IOCTL_KPLED_DISABLE 0x4246 /* no param */
++
++#define PARAM_LED_RED 0x666
++#define PARAM_LED_GREEN 0x667
++#define PARAM_LED_BLUE 0x668
++
++/*
++ * hw def
++ */
++#define TORNADO_LED_BASE 0xFFFBA800
++/* PM Reg: enable led clock when set to 1 */
++#define TORNADO_LED_PMR 0xFFFBA801
++
++/* TORNADO_LED_ENABLE register layout */
++/*
++ bit 7: ON
++ bit 6: BLINK
++ bit 5-3: off time.
++ bit 0-2: on time.
++
++*/
++
++#define TORNADO_GPIO_LED_GREEN 79
++#define TORNADO_GPIO_LED_RED 128
++#define TORNADO_GPIO_LED_BLUE 140
++#define TORNADO_GPIO_KPLED 16
++
++
++/* in TORNADO_LED_ENABLE */
++#define LED_ON (1 << 7)
++#define LED_BLINK (1 << 6)
++#define LED_ONTIME(x) ((x) & 0x7)
++#define LED_OFFTIME(x) (((x) & 0x7) << 3)
++
++#define LED_BASE_REG __REG8(TORNADO_LED_BASE)
++#define LED_PM_REG __REG8(TORNADO_LED_PMR)
++
++static unsigned long use;
++
++static int
++tornado_leds_open(struct inode *inode, struct file *file)
++{
++ /* ensure exclusive access */
++ if (test_and_set_bit(0, &use))
++ return -EBUSY;
++
++ return 0;
++}
++
++static int led_set_color(unsigned long color)
++{
++ switch (color) {
++ case PARAM_LED_RED:
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 1);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
++ break;
++ case PARAM_LED_GREEN:
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 1);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
++ break;
++ case PARAM_LED_BLUE:
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 1);
++ break;
++ default:
++ return -EINVAL;
++ }
++ return 0;
++}
++
++/*
++ * FIXME: on the HTC Tornado, the blue led is not the same as the
++ * red/green led, there may be some gpio changes / special register
++ * settings for this.
++ */
++static int
++tornado_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case IOCTL_LED_ENABLE:
++ LED_PM_REG = 0; /* disable blink clock */
++ LED_BASE_REG = LED_ON;
++ return led_set_color(arg);
++
++ case IOCTL_LED_BLINK:
++ LED_PM_REG = 1;
++ LED_BASE_REG = 0x7F; /* LED_BLINK | LED_ONTIME(1) | LED_OFFTIME(3); */
++ printk("IOCTL_LED_BLINK (reg = %02x).\n", LED_BASE_REG);
++ return led_set_color(arg);
++
++ case IOCTL_LED_DISABLE:
++ LED_PM_REG = 0;
++ LED_BASE_REG = 0;
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
++ break;
++
++ case IOCTL_KPLED_ENABLE:
++ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 1);
++ break;
++
++ case IOCTL_KPLED_DISABLE:
++ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0);
++ break;
++ default:
++ return -EINVAL;
++ }
++ return 0;
++}
++
++static int
++tornado_leds_release(struct inode *inode, struct file *file)
++{
++ use = 0;
++ return 0;
++}
++
++struct file_operations tornado_leds_fops =
++{
++ .owner = THIS_MODULE,
++ .ioctl = tornado_leds_ioctl,
++ .open = tornado_leds_open,
++ .release = tornado_leds_release,
++};
++
++struct miscdevice tornado_leds_device =
++{
++ .minor = LEDS_MINOR,
++ .name = "tornado-leds",
++ .fops = &tornado_leds_fops,
++};
++
++static int __init
++tornado_leds_init(void)
++{
++ int ret;
++
++ omap_request_gpio(TORNADO_GPIO_LED_RED);
++ omap_request_gpio(TORNADO_GPIO_LED_GREEN);
++ omap_request_gpio(TORNADO_GPIO_LED_BLUE);
++ omap_request_gpio(TORNADO_GPIO_KPLED);
++
++ ret = misc_register(&tornado_leds_device);
++ if (ret)
++ return ret;
++
++ /*
++ * init hw
++ */
++ /* clear GSM_LPG1 and select GPIO_140 & LPG1 pullup enable control */
++ omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x20, OMAP730_IO_CONF_10);
++ omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd0, OMAP730_IO_CONF_10);
++
++/* omap_set_gpio_dataout(140, 1); */
++
++ /* clear GSM_LPG2 and select GPIO_141 & LPG2 pullup enable control */
++ omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x200, OMAP730_IO_CONF_10);
++ omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd00, OMAP730_IO_CONF_10);
++
++/* omap_set_gpio_dataout(141, 1); */
++
++ omap_set_gpio_direction(TORNADO_GPIO_LED_RED, 0); /* out */
++ omap_set_gpio_direction(TORNADO_GPIO_LED_GREEN, 0); /* out */
++ omap_set_gpio_direction(TORNADO_GPIO_LED_BLUE, 0); /* out */
++ omap_set_gpio_direction(TORNADO_GPIO_KPLED, 0); /* out */
++
++ /* enable lpg1 and lpg2 */
++ omap_writel(omap_readl(OMAP730_MODE_1) | (3 << 28), OMAP730_MODE_1);
++
++ /* disable led activation */
++ LED_PM_REG = 0;
++ LED_BASE_REG = 0;
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
++ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0);
++
++ printk("HTC Tornado led driver.\n");
++ return 0;
++}
++
++static void __exit
++tornado_leds_exit(void)
++{
++ misc_deregister(&tornado_leds_device);
++
++ /* disable lpg 1 and lpg2 */
++ omap_writel(omap_readl(OMAP730_MODE_1) & ~(3 << 28), OMAP730_MODE_1);
++ LED_BASE_REG = 0;
++ LED_PM_REG = 0;
++ omap_free_gpio(TORNADO_GPIO_LED_RED);
++ omap_free_gpio(TORNADO_GPIO_LED_GREEN);
++ omap_free_gpio(TORNADO_GPIO_LED_BLUE);
++ omap_free_gpio(TORNADO_GPIO_KPLED);
++}
++
++module_init(tornado_leds_init);
++module_exit(tornado_leds_exit);
++
++MODULE_AUTHOR("Nicolas Schichan");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/char/tornado-vibrator.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/char/tornado-vibrator.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,144 @@
++/*
++** tornado-vibrator.c for vibrator in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Mon Apr 10 15:21:27 2006 nico
++** Last update Thu May 25 13:44:23 2006 nico
++*/
++
++#include <linux/init.h>
++#include <linux/miscdevice.h>
++#include <linux/moduleparam.h>
++#include <linux/fs.h>
++#include <linux/bitops.h>
++
++#include <asm/arch/gpio.h>
++#include "tornado-vibrator.h"
++
++/*
++ *
++ * HTC Tornado vibrator driver.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++/*
++ * quite a simple driver: only put GPIO 34 in OUT mode and set it to 1
++ * to enable the vibrator or 0 to disable it.
++ */
++
++static long use;
++
++/*
++ * ensure only process opens the file, ad set GPIO direction to 0 (OUT)
++ */
++static int
++tornado_vibrator_open(struct inode *inode, struct file *file)
++{
++ if (test_and_set_bit(0, &use))
++ return -EBUSY;
++
++
++ /* out GPIO */
++ omap_set_gpio_direction(TORNADO_VIBRATOR_GPIO, 0);
++ return 0;
++}
++
++/*
++ * device ioctl handler. only VIBRATOR_ENABLE or VIBRATOR_DISABLE are
++ * recognized.
++ */
++static int
++tornado_vibrator_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case VIBRATOR_ENABLE:
++ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 1);
++ return 0;
++ case VIBRATOR_DISABLE:
++ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0);
++ return 0;
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
++/*
++ * set use variable to zero so that the next open on the file
++ * successes.
++ */
++static int
++tornado_vibrator_release(struct inode *inode, struct file *file)
++{
++ use = 0;
++ return 0;
++}
++
++struct file_operations tornado_vibrator_fops =
++{
++ .owner = THIS_MODULE,
++ .ioctl = tornado_vibrator_ioctl,
++ .open = tornado_vibrator_open,
++ .release = tornado_vibrator_release,
++};
++
++struct miscdevice tornado_vibrator_dev =
++{
++ .minor = VIBRATOR_MINOR,
++ .name = "tornado-vibrator",
++ .fops = &tornado_vibrator_fops,
++};
++
++/*
++ * make sure we can use the GPIO and register the device.
++ */
++static int __init
++tornado_vibrator_init(void)
++{
++ int ret;
++
++ if (omap_request_gpio(TORNADO_VIBRATOR_GPIO))
++ return -EBUSY;
++
++ ret = misc_register(&tornado_vibrator_dev);
++ if (ret)
++ return ret;
++
++ printk("HTC Tornado Vibrator driver.\n");
++ return 0;
++}
++
++/*
++ * deregister device and free the GPIO.
++ */
++static void __init
++tornado_vibrator_exit(void)
++{
++ misc_deregister(&tornado_vibrator_dev);
++ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0);
++ omap_free_gpio(TORNADO_VIBRATOR_GPIO);
++}
++
++module_init(tornado_vibrator_init);
++module_exit(tornado_vibrator_exit);
++
++MODULE_AUTHOR("Nicolas Schichan");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/char/tornado-vibrator.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/char/tornado-vibrator.h 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,44 @@
++/*
++** tornado-vibrator.h for vibrator in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Mon Apr 10 15:54:33 2006 nico
++** Last update Thu May 25 13:44:38 2006 nico
++*/
++
++/*
++ *
++ * HTC Tornado vibrator driver
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++
++#ifndef __TORNADO_VIBRATOR
++# define __TORNADO_VIBRATOR
++
++# define VIBRATOR_ENABLE 0x42
++# define VIBRATOR_DISABLE 0x43
++
++# define VIBRATOR_MINOR 240
++
++# define TORNADO_VIBRATOR_GPIO 34
++
++#endif /* !__TORNADO_VIBRATOR */
+Index: linux-2.6.16/drivers/char/vt.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/vt.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/char/vt.c 2007-04-12 10:36:19.000000000 +0200
+@@ -2155,6 +2155,8 @@
+
+ #ifdef CONFIG_VT_CONSOLE
+
++extern int in_printk;
++
+ /*
+ * Console on virtual terminal
+ *
+@@ -2169,6 +2171,7 @@
+ const ushort *start;
+ ushort cnt = 0;
+ ushort myx;
++ unsigned char old_color = 0;
+
+ /* console busy or not yet initialized */
+ if (!printable || test_and_set_bit(0, &printing))
+@@ -2196,6 +2199,11 @@
+
+ start = (ushort *)vc->vc_pos;
+
++ if (in_printk) {
++ old_color = vc->vc_color;
++ vc->vc_color = 0x2;
++ update_attr(vc);
++ }
+ /* Contrived structure to try to emulate original need_wrap behaviour
+ * Problems caused when we have need_wrap set on '\n' character */
+ while (count--) {
+@@ -2242,6 +2250,10 @@
+ }
+ }
+ set_cursor(vc);
++ if (in_printk) {
++ vc->vc_color = old_color;
++ update_attr(vc);
++ }
+
+ quit:
+ clear_bit(0, &printing);
+Index: linux-2.6.16/drivers/char/watchdog/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/char/watchdog/Kconfig 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/char/watchdog/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -656,4 +656,10 @@
+ Support for TI OMAP1610/OMAP1710/OMAP2420 watchdog. Say 'Y' here to enable the
+ OMAP1610/OMAP1710 watchdog timer.
+
++config OMAP730_WATCHDOG
++ tristate "OMAP730/OMAP850 Watchdog"
++ depends on WATCHDOG && ARCH_OMAP730
++ help
++ Support for TI OMAP730/OMAP850 Watchdog.
++
+ endmenu
+Index: linux-2.6.16/drivers/char/watchdog/Makefile
+===================================================================
+--- linux-2.6.16.orig/drivers/char/watchdog/Makefile 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/char/watchdog/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -28,6 +28,7 @@
+ obj-$(CONFIG_IXP2000_WATCHDOG) += ixp2000_wdt.o
+ obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o
+ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
++obj-$(CONFIG_OMAP730_WATCHDOG) += omap730_wdt.o
+ obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o
+ obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o
+ obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o
+Index: linux-2.6.16/drivers/char/watchdog/omap730_wdt.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/char/watchdog/omap730_wdt.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,225 @@
++/*
++** omap730_wdt.c for linux-typhoon/tornado in /home/nico/work/spvc500/linux-omap-typhoon
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Thu Mar 16 14:42:35 2006 nico
++** Last update Thu May 11 13:56:24 2006 nico
++*/
++
++/*
++ *
++ * OMAP730 watchdog driver.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++/*
++ * based on omap_wdt.c.
++ */
++
++#include <linux/module.h>
++#include <linux/config.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/fs.h>
++#include <linux/mm.h>
++#include <linux/miscdevice.h>
++#include <linux/watchdog.h>
++#include <linux/reboot.h>
++#include <linux/smp_lock.h>
++#include <linux/init.h>
++#include <linux/err.h>
++
++#include <asm/io.h>
++#include <asm/uaccess.h>
++#include <asm/hardware.h>
++#include <asm/bitops.h>
++/* #include <asm/hardware/clock.h> */
++
++#include <linux/moduleparam.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/delay.h>
++
++#define WDT_EN 0
++#define WDT_DISABLE_ON_CLOSE 1
++
++static unsigned long omap_wdt_users;
++static struct miscdevice omap_wdt_miscdev; /* Forward declaration */
++
++/*
++ * TRM says that the same value cannot be used to reinitialize the
++ * watchdog timer, so alternate 0xFFFF 0xFFFE.
++ */
++static void
++omap730_wdt_ping(void)
++{
++ static int mod = 0;
++
++ if (mod)
++ omap_writel(0xFFFF, OMAP_WDT_LOAD_TIM);
++ else
++ omap_writel(0xFFFE, OMAP_WDT_LOAD_TIM);
++
++ mod = (mod + 1) & 0x1;
++}
++
++static void
++omap730_wdt_enable(void)
++{
++ unsigned long wdt_ctl;
++ unsigned long arm_idlect2;
++
++ omap_writel(0x8000, OMAP_WDT_TIMER_MODE);
++ wdt_ctl = omap_readl(OMAP_WDT_TIMER);
++
++ arm_idlect2 = omap_readl(ARM_IDLECT2);
++ arm_idlect2 |= 0x1; /* enable watchdog clock */
++ omap_writel(arm_idlect2, ARM_IDLECT2);
++
++}
++
++static void
++omap730_wdt_disable(void)
++{
++ unsigned long arm_idlect2;
++
++ if ((omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) == 0x8000) {
++
++ arm_idlect2 = omap_readl(ARM_IDLECT2);
++ arm_idlect2 &= ~0x1; /* disable watchdog clock */
++ omap_writel(arm_idlect2, ARM_IDLECT2);
++
++ /*
++ * sequence required to disable watchdog. do not try
++ * to disable watchdog if timer is not active (see
++ * TRM).
++ */
++ omap_writel(0xF5, OMAP_WDT_TIMER_MODE);
++ omap_writel(0xA0, OMAP_WDT_TIMER_MODE);
++ }
++}
++
++/*
++ * Allow only one person to hold it open
++ */
++static int
++omap730_wdt_open(struct inode *inode, struct file *file)
++{
++ if (test_and_set_bit(WDT_EN, &omap_wdt_users))
++ return -EBUSY;
++
++ omap730_wdt_enable();
++ return 0;
++}
++
++static int
++omap730_wdt_release(struct inode *inode, struct file *file)
++{
++ if (omap_wdt_users && test_bit(WDT_DISABLE_ON_CLOSE, &omap_wdt_users)) {
++ printk("omap730_wdt: disabling watchdog.\n");
++ omap730_wdt_disable();
++ } else {
++ printk(KERN_CRIT "omap730_wdt: Unexpected close: watchdog still active !\n");
++ }
++ omap_wdt_users = 0;
++ return 0;
++}
++
++static ssize_t
++omap730_wdt_write(struct file *file, const char *data, size_t len, loff_t * ppos)
++{
++ if (len) {
++#ifndef CONFIG_WATCHDOG_NOWAYOUT
++ size_t i;
++
++ for (i = 0; i < len; ++i) {
++ char c;
++ if (get_user(c, data + i))
++ return -EFAULT;
++ if (c == 'V') {
++ printk("watchdog will be disabled on close.\n");
++ set_bit(WDT_DISABLE_ON_CLOSE, (unsigned long*)&omap_wdt_users);
++ }
++ }
++#endif
++ omap730_wdt_ping();
++ return 1;
++ }
++ return 0;
++}
++
++/*
++ * KISS: only support KEEPALIVE for now.
++ */
++static int
++omap730_wdt_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ switch (cmd) {
++ case WDIOC_KEEPALIVE:
++ omap730_wdt_ping();
++ return 0;
++ default:
++ return -ENOIOCTLCMD;
++ }
++}
++
++static struct file_operations omap_wdt_fops = {
++ .owner = THIS_MODULE,
++ .write = omap730_wdt_write,
++ .ioctl = omap730_wdt_ioctl,
++ .open = omap730_wdt_open,
++ .release = omap730_wdt_release,
++};
++
++static struct miscdevice omap_wdt_miscdev = {
++ .minor = WATCHDOG_MINOR,
++ .name = "omap730_wdt",
++ .fops = &omap_wdt_fops
++};
++
++static int __init
++omap730_wdt_init(void)
++{
++ int ret;
++
++ ret = misc_register(&omap_wdt_miscdev);
++
++ if (ret)
++ return ret;
++
++ omap730_wdt_disable();
++ printk(KERN_INFO "TI OMAP Watchdog Timer for OMAP730\n");
++
++ return 0;
++}
++
++static void __exit
++omap730_wdt_exit(void)
++{
++ misc_deregister(&omap_wdt_miscdev);
++}
++
++module_init(omap730_wdt_init);
++module_exit(omap730_wdt_exit);
++
++MODULE_AUTHOR("Nicolas Schichan");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/input/keyboard/Kconfig 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/input/keyboard/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -193,6 +193,13 @@
+ To compile this driver as a module, choose M here: the
+ module will be called omap-keypad.
+
++config TORNADO_KEYPAD
++ bool "HTC Tornado keypad support"
++ depends on MACH_TORNADO
++ help
++ Say y here if you want to use the keypad of your HTC Tornado
++ Phone.
++
+ config OMAP_PS2
+ tristate "TI OMAP Innovator 1510 PS/2 keyboard & mouse support"
+ depends on ARCH_OMAP15XX && MACH_OMAP_INNOVATOR
+Index: linux-2.6.16/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.16.orig/drivers/input/keyboard/Makefile 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/input/keyboard/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -16,4 +16,5 @@
+ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
++obj-$(CONFIG_TORNADO_KEYPAD) += tornado-keypad.o
+ obj-$(CONFIG_OMAP_PS2) += innovator_ps2.o
+Index: linux-2.6.16/drivers/input/keyboard/omap-keypad.c
+===================================================================
+--- linux-2.6.16.orig/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:19.000000000 +0200
+@@ -43,7 +43,7 @@
+ #include <asm/mach-types.h>
+ #include <asm/arch/mux.h>
+
+-#undef NEW_BOARD_LEARNING_MODE
++#define NEW_BOARD_LEARNING_MODE
+
+ static void omap_kp_tasklet(unsigned long);
+ static void omap_kp_timer(unsigned long);
+@@ -292,6 +292,7 @@
+ struct omap_kp_platform_data *pdata = pdev->dev.platform_data;
+ int i;
+
++ printk("omap_kp_probe.\n");
+ if (!pdata->rows || !pdata->cols || !pdata->keymap) {
+ printk(KERN_ERR "No rows, cols or keymap from pdata\n");
+ return -EINVAL;
+Index: linux-2.6.16/drivers/input/keyboard/tornado-keypad.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/input/keyboard/tornado-keypad.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,463 @@
++/*
++** wizard-keypad.c for wizard-keypad in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Thu Apr 6 17:27:18 2006 nico
++** Last update Thu May 25 14:12:34 2006 nico
++*/
++
++/*
++ * HTC Tornado keypad driver.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++/*
++ * based on omap-keypad.c
++ */
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/types.h>
++#include <linux/input.h>
++
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++#include <asm/mach-types.h>
++#include <asm/delay.h>
++
++#undef DEBUG
++// #define DEBUG
++
++struct input_dev *tornado_kp_dev = NULL;
++
++static unsigned char kp_state[8];
++static void tornado_kp_tasklet(unsigned long);
++static void tornado_kp_gpio_tasklet(unsigned long);
++static DECLARE_TASKLET_DISABLED(kp_tasklet, tornado_kp_tasklet, 0);
++static DECLARE_TASKLET_DISABLED(kp_gpio_tasklet, tornado_kp_gpio_tasklet, 0);
++static struct timer_list kp_timer;
++static struct timer_list kp_gpio_timer;
++
++unsigned int gpio_mask = 0;
++unsigned int kp_gpio = 0;
++
++#define TORNADO_KP_GPIO 76
++
++/*
++ * key tables. a bit more complex than those in the omap-keypad
++ * driver: HTC devices keys events tends to trigger two or more
++ * row/col.
++ */
++struct htc_key
++{
++ /*
++ * input key constant as defined in input.h
++ */
++ int key;
++ /* rc stands for row/col
++ * 2 * k -> col;
++ * 2 * k + 1-> row
++ */
++ char rc[6];
++};
++
++struct gpio_key
++{
++ int key;
++ unsigned int mask;
++};
++
++static struct htc_key *htc_keys = NULL;
++static unsigned int htc_keys_size = 0;
++static struct gpio_key *gpio_keys = 0;
++static unsigned int gpio_keys_size= 0;
++
++
++/*
++ * Tornado stuff ...
++ */
++static struct htc_key tornado_keys[] =
++{
++ /* misc keys below the screen */
++ { KEY_F3, { 1,3 } }, /* SK1 */
++ { KEY_BACKSPACE, { 4,3 } },
++ { KEY_HOME, { 3,3 } },
++ { KEY_F4, { 2,3 } }, /* SK2 */
++ { KEY_F5, { 3,5 } }, /* compose */
++ { KEY_ESC, { 4,5 } }, /* hangup */
++
++ /* digit keys */
++ { KEY_1, { 1,0 } },
++ { KEY_2, { 2,0 } },
++ { KEY_3, { 3,0 } },
++ { KEY_4, { 4,0 } },
++ { KEY_5, { 1,1 } },
++ { KEY_6, { 2,1 } },
++ { KEY_7, { 3,1 } },
++ { KEY_8, { 4,1 } },
++ { KEY_9, { 1,2 } },
++ { KEY_0, { 2,2 } },
++ { KEY_KPASTERISK, { 3,2 } },
++ { KEY_SPACE, { 4,2 } },
++
++ /* side buttons: currently bogus */
++/* { KEY_CAMERA, { 5,6, 6,6 } }, */
++/* { KEY_VOLUMEUP, { 4,6, 5,6 } }, */
++/* { KEY_VOLUMEDOWN, { 7,6, 6,6 } }, */
++/* { KEY_FAVORITES, { 2,6, 3,6 } } */
++
++ /* add side keys: photo, volume, ...*/
++
++};
++
++static struct gpio_key tornado_gpio_keys[] =
++{
++ { KEY_ENTER, 0x1 },
++ { KEY_LEFT, 0x19 },
++ { KEY_RIGHT, 0x7 },
++ { KEY_UP, 0x15 },
++ { KEY_DOWN, 0xB },
++};
++
++/*
++ * handy macros for kp register manipulation
++ */
++# define KBD_MASKIT __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT)
++# define KBC __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBC)
++# define KBR_LATCH __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBR_LATCH)
++
++/*
++ * return the key code understood by input_report_key
++ */
++static int
++tornado_find_key(unsigned char *new_state, unsigned int *key_state)
++{
++ int i;
++ unsigned char changed;
++
++ /* scan normal keypad keys*/
++ for (i = 0; i < htc_keys_size; ++i) {
++ struct htc_key *wk = &htc_keys[i];
++ int j;
++ int pressed = 0;
++
++ for (j = 0; j < 3; ++j) {
++ int col;
++ int row;
++
++ col = wk->rc[2 * j];
++ row = wk->rc[2 * j + 1];
++
++
++ /* end of key list reached: OK */
++ if (row == 0 && col == 0) {
++ goto ok;
++ }
++
++ changed = new_state[col] ^ kp_state[col];
++ pressed |= new_state[col] & (1 << row);
++
++
++ /* if state of the row/col has not changed, try another key */
++ if ( (changed & (1 << row)) == 0) {
++ break ;
++ }
++
++ if (j == 2) {
++ ok:
++ /*
++ * all events have been scanned for
++ * this key: we found it !
++ */
++ *key_state = pressed;
++ return wk->key;
++ }
++ }
++ }
++ return -1;
++}
++
++/*
++ * read row and col register and update the state array.
++ */
++static void
++tornado_scan_keypad(unsigned char *state)
++{
++ unsigned int col;
++
++ /* scan MPUIO keypad keys */
++ KBC = 0xFF;
++ for (col = 0; col < 8; ++col) {
++ KBC = ~(1 << col) & 0xFF;
++ udelay(4);
++ state[col] = ~(KBR_LATCH) & 0xFF;
++ }
++ KBC = 0x00;
++
++ udelay(2);
++}
++
++/*
++ * returns 1 if a key was pressed or 0 if a key was released.
++ */
++static int
++tornado_key_pressed(unsigned char *state)
++{
++ unsigned int col;
++ int key_down = 0;
++
++ for (col = 0; col < 8; ++col) {
++#ifdef DEBUG
++ unsigned char changed;
++ unsigned int row;
++
++ changed = kp_state[col] ^ state[col];
++
++ for (row = 0; row < 8; ++row) {
++ unsigned int pressed;
++
++ pressed = state[col] & (1 << row);
++ if (changed & (1 << row)) {
++ printk("key down: %i-%i: %s\n", col, row, pressed ? "pressed" : "released");
++ }
++
++ }
++#endif
++ key_down |= state[col];
++ }
++
++ return key_down;
++}
++
++/*
++ * the real work is done here: at the end, if a key is pressed, keep
++ * kp interrupt masked and schedule a call to the tasklet after a bit
++ * (mod_timer ...). this is done to avoid the trigger of too much kp
++ * interrupts .
++ */
++static void
++tornado_kp_tasklet(unsigned long param)
++{
++ unsigned char state[8];
++ int key_down;
++ int pressed = 0;
++ int key;
++
++ tornado_scan_keypad(state);
++ key_down = tornado_key_pressed(state);
++
++ key = tornado_find_key(state, &pressed);
++ if (key != -1) {
++
++ input_report_key(tornado_kp_dev, key, pressed);
++ }
++
++ memcpy(kp_state, state, sizeof (kp_state));
++
++ if (key_down) {
++ /*
++ * if a key is down, poll the keypad and keep irq
++ * disabled
++ */
++ int delay = HZ / 20;
++
++ mod_timer(&kp_timer, jiffies + delay);
++ } else
++ KBD_MASKIT = 0;
++}
++
++static void
++tornado_kp_timer(unsigned long data)
++{
++ tasklet_schedule(&kp_tasklet);
++}
++
++/*
++ * nothing is done here: disable KP interrupts and schedule a call to
++ * tornado_kp_tasklet.
++ */
++static irqreturn_t
++tornado_kp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ /* disable keypad interrupts and schedule the tasklet */
++ KBD_MASKIT = 1;
++ tasklet_schedule(&kp_tasklet);
++
++ return IRQ_HANDLED;
++}
++
++static void
++tornado_kp_gpio_tasklet(unsigned long param)
++{
++ unsigned int mask;
++ unsigned int changed;
++ unsigned int pressed;
++ static int old_key = 0;
++ int key;
++ int i;
++
++
++ /* GPIO are active low ! */
++ mask = !omap_get_gpio_datain(76);
++ mask |= !omap_get_gpio_datain(80) << 1;
++ mask |= !omap_get_gpio_datain(81) << 2;
++ mask |= !omap_get_gpio_datain(82) << 3;
++ mask |= !omap_get_gpio_datain(83) << 4;
++
++ pressed = mask & 0x1;
++
++
++ changed = mask ^ gpio_mask;
++ if (changed == 0)
++ goto end;
++
++ if (pressed == 0)
++ key = 0;
++ else {
++ key = 0;
++ for (i = 0; i < 5; ++i) {
++ if (gpio_keys[i].mask == mask) {
++ key = gpio_keys[i].key;
++ break;
++ }
++ }
++ }
++
++ if (key != old_key) {
++ if (old_key)
++ input_report_key(tornado_kp_dev, old_key, 0);
++ if (key)
++ input_report_key(tornado_kp_dev, key, 1);
++ old_key = key;
++ }
++
++ gpio_mask = mask;
++
++ end:
++ if (pressed) {
++ int delay = HZ / 20;
++ mod_timer(&kp_gpio_timer, jiffies + delay);
++ } else {
++ enable_irq(OMAP_GPIO_IRQ(kp_gpio));
++ }
++}
++
++static irqreturn_t
++tornado_kp_gpio_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ disable_irq(OMAP_GPIO_IRQ(kp_gpio));
++ tasklet_schedule(&kp_gpio_tasklet);
++ return IRQ_HANDLED;
++}
++
++static void
++tornado_kp_gpio_timer(unsigned long data)
++{
++ tasklet_schedule(&kp_gpio_tasklet);
++}
++
++static int __init
++tornado_kp_init(void)
++{
++ unsigned int i;
++
++ printk("HTC Tornado Keypad Driver.\n");
++
++ KBD_MASKIT = 1;
++
++ /* select key tables */
++ if (machine_is_htc_tornado()) {
++ htc_keys = tornado_keys;
++ htc_keys_size = ARRAY_SIZE(tornado_keys);
++ gpio_keys = tornado_gpio_keys;
++ gpio_keys_size = ARRAY_SIZE(tornado_gpio_keys);
++ kp_gpio = TORNADO_KP_GPIO;
++
++ printk("Using HTC Tornado keymap.\n");
++ } else {
++ printk("machine is unknown: not loading driver.\n");
++ return -EINVAL;
++ }
++
++ tornado_kp_dev = input_allocate_device();
++ if (tornado_kp_dev == NULL) {
++ printk("unable to allocate tornado_kp_dev.\n");
++ return -ENOMEM;
++ }
++ tornado_kp_dev->name = "tornado-keypad";
++
++
++ init_timer(&kp_timer);
++ kp_timer.function = tornado_kp_timer;
++ tasklet_enable(&kp_tasklet);
++ if (request_irq(INT_730_MPUIO_KEYPAD, tornado_kp_interrupt, 0, "tornado-keypad", 0)) {
++ printk("unable to get IRQ for tornado-keypad.\n");
++ return -EBUSY;
++ }
++
++ set_bit(EV_KEY, tornado_kp_dev->evbit);
++ for (i = 0; i < KEY_MAX; ++i) {
++ set_bit(i, tornado_kp_dev->keybit);
++ }
++ input_register_device(tornado_kp_dev);
++
++ if (kp_gpio) {
++ /* request arrow keys GPIOS */
++ if (omap_request_gpio(kp_gpio) < 0) {
++ printk("unable to request GPIO %i\n", 76);
++ return -EBUSY;
++ }
++ /* set gpio mode to IN for all kp gpios */
++ omap_set_gpio_direction(kp_gpio, 1);
++ omap_set_gpio_direction(80, 1);
++ omap_set_gpio_direction(81, 1);
++ omap_set_gpio_direction(82, 1);
++ omap_set_gpio_direction(83, 1);
++
++ init_timer(&kp_gpio_timer);
++ kp_gpio_timer.function = tornado_kp_gpio_timer;
++ tasklet_enable(&kp_gpio_tasklet);
++
++ /* be notified when keys are pressed */
++ if (request_irq(OMAP_GPIO_IRQ(kp_gpio), tornado_kp_gpio_interrupt, SA_TRIGGER_FALLING, "tornado-kp-gpio", 0)) {
++ printk("unable to request GPIO IRQ %i\n", 76);
++ return -EBUSY;
++ }
++ }
++
++ tornado_scan_keypad(kp_state);
++ KBD_MASKIT = 0;
++ return 0;
++}
++
++void __exit
++tornado_kp_exit(void)
++{
++ KBD_MASKIT = 1;
++}
++
++module_init(tornado_kp_init);
++module_exit(tornado_kp_exit);
++
++MODULE_AUTHOR("Nicolas Schichan <nico@chac.le-poulpe.net>");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("HTC Tornado Keypad Driver");
+Index: linux-2.6.16/drivers/mmc/omap.c
+===================================================================
+--- linux-2.6.16.orig/drivers/mmc/omap.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/mmc/omap.c 2007-04-12 10:36:19.000000000 +0200
+@@ -160,10 +160,10 @@
+ u32 resptype;
+ u32 cmdtype;
+
+- pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s%s%s\n",
++ pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s\n",
+ host->id, cmd->opcode, cmd->arg,
+- (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "",
+- (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "",
++/* (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "", */
++/* (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "", */
+ (cmd->flags & MMC_RSP_CRC) ? ", CRC" : "",
+ (cmd->flags & MMC_RSP_BUSY) ? ", busy notification" : "");
+
+Index: linux-2.6.16/drivers/mmc/omap.h
+===================================================================
+--- linux-2.6.16.orig/drivers/mmc/omap.h 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/mmc/omap.h 2007-04-12 10:36:19.000000000 +0200
+@@ -1,31 +1,66 @@
+ #ifndef DRIVERS_MEDIA_MMC_OMAP_H
+ #define DRIVERS_MEDIA_MMC_OMAP_H
+
+-#define OMAP_MMC_REG_CMD 0x00
+-#define OMAP_MMC_REG_ARGL 0x04
+-#define OMAP_MMC_REG_ARGH 0x08
+-#define OMAP_MMC_REG_CON 0x0c
+-#define OMAP_MMC_REG_STAT 0x10
+-#define OMAP_MMC_REG_IE 0x14
+-#define OMAP_MMC_REG_CTO 0x18
+-#define OMAP_MMC_REG_DTO 0x1c
+-#define OMAP_MMC_REG_DATA 0x20
+-#define OMAP_MMC_REG_BLEN 0x24
+-#define OMAP_MMC_REG_NBLK 0x28
+-#define OMAP_MMC_REG_BUF 0x2c
+-#define OMAP_MMC_REG_SDIO 0x34
+-#define OMAP_MMC_REG_REV 0x3c
+-#define OMAP_MMC_REG_RSP0 0x40
+-#define OMAP_MMC_REG_RSP1 0x44
+-#define OMAP_MMC_REG_RSP2 0x48
+-#define OMAP_MMC_REG_RSP3 0x4c
+-#define OMAP_MMC_REG_RSP4 0x50
+-#define OMAP_MMC_REG_RSP5 0x54
+-#define OMAP_MMC_REG_RSP6 0x58
+-#define OMAP_MMC_REG_RSP7 0x5c
+-#define OMAP_MMC_REG_IOSR 0x60
+-#define OMAP_MMC_REG_SYSC 0x64
+-#define OMAP_MMC_REG_SYSS 0x68
++#ifdef CONFIG_ARCH_OMAP730
++/*
++ * unlike other omap architectures, omap730 has 16bits MMC register
++ * offsets ...
++ */
++# define OMAP_MMC_REG_CMD 0x00
++# define OMAP_MMC_REG_ARGL 0x02
++# define OMAP_MMC_REG_ARGH 0x04
++# define OMAP_MMC_REG_CON 0x06
++# define OMAP_MMC_REG_STAT 0x08
++# define OMAP_MMC_REG_IE 0x0a
++# define OMAP_MMC_REG_CTO 0x0c
++# define OMAP_MMC_REG_DTO 0x0e
++# define OMAP_MMC_REG_DATA 0x10
++# define OMAP_MMC_REG_BLEN 0x12
++# define OMAP_MMC_REG_NBLK 0x14
++# define OMAP_MMC_REG_BUF 0x16
++# define OMAP_MMC_REG_SDIO 0x1a
++# define OMAP_MMC_REG_REV 0x1e
++# define OMAP_MMC_REG_RSP0 0x20
++# define OMAP_MMC_REG_RSP1 0x22
++# define OMAP_MMC_REG_RSP2 0x24
++# define OMAP_MMC_REG_RSP3 0x26
++# define OMAP_MMC_REG_RSP4 0x28
++# define OMAP_MMC_REG_RSP5 0x2a
++# define OMAP_MMC_REG_RSP6 0x2c
++# define OMAP_MMC_REG_RSP7 0x2e
++# define OMAP_MMC_REG_IOSR 0x30
++# define OMAP_MMC_REG_SYSC 0x32
++# define OMAP_MMC_REG_SYSS 0x34
++
++#else
++
++# define OMAP_MMC_REG_CMD 0x00
++# define OMAP_MMC_REG_ARGL 0x04
++# define OMAP_MMC_REG_ARGH 0x08
++# define OMAP_MMC_REG_CON 0x0c
++# define OMAP_MMC_REG_STAT 0x10
++# define OMAP_MMC_REG_IE 0x14
++# define OMAP_MMC_REG_CTO 0x18
++# define OMAP_MMC_REG_DTO 0x1c
++# define OMAP_MMC_REG_DATA 0x20
++# define OMAP_MMC_REG_BLEN 0x24
++# define OMAP_MMC_REG_NBLK 0x28
++# define OMAP_MMC_REG_BUF 0x2c
++# define OMAP_MMC_REG_SDIO 0x34
++# define OMAP_MMC_REG_REV 0x3c
++# define OMAP_MMC_REG_RSP0 0x40
++# define OMAP_MMC_REG_RSP1 0x44
++# define OMAP_MMC_REG_RSP2 0x48
++# define OMAP_MMC_REG_RSP3 0x4c
++# define OMAP_MMC_REG_RSP4 0x50
++# define OMAP_MMC_REG_RSP5 0x54
++# define OMAP_MMC_REG_RSP6 0x58
++# define OMAP_MMC_REG_RSP7 0x5c
++# define OMAP_MMC_REG_IOSR 0x60
++# define OMAP_MMC_REG_SYSC 0x64
++# define OMAP_MMC_REG_SYSS 0x68
++
++#endif
+
+ #define OMAP_MMC_STAT_CARD_ERR (1 << 14)
+ #define OMAP_MMC_STAT_CARD_IRQ (1 << 13)
+Index: linux-2.6.16/drivers/usb/gadget/omap_udc.c
+===================================================================
+--- linux-2.6.16.orig/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:19.000000000 +0200
+@@ -60,7 +60,7 @@
+ #undef USB_TRACE
+
+ /* bulk DMA seems to be behaving for both IN and OUT */
+-#define USE_DMA
++/* #define USE_DMA */
+
+ /* ISO too */
+ #define USE_ISO
+@@ -2147,7 +2147,8 @@
+ /* boards that don't have VBUS sensing can't autogate 48MHz;
+ * can't enter deep sleep while a gadget driver is active.
+ */
+- if (machine_is_omap_innovator() || machine_is_omap_osk())
++ if (machine_is_omap_innovator() || machine_is_omap_osk() ||
++ machine_is_htc_tornado())
+ omap_vbus_session(&udc->gadget, 1);
+
+ done:
+@@ -2170,7 +2171,8 @@
+ if (udc->dc_clk != NULL)
+ omap_udc_enable_clock(1);
+
+- if (machine_is_omap_innovator() || machine_is_omap_osk())
++ if (machine_is_omap_innovator() || machine_is_omap_osk() ||
++ machine_is_htc_tornado())
+ omap_vbus_session(&udc->gadget, 0);
+
+ if (udc->transceiver)
+Index: linux-2.6.16/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/video/backlight/Kconfig 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/video/backlight/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -58,3 +58,10 @@
+ If you have a HP Jornada 680, say y to enable the
+ backlight driver.
+
++
++config BACKLIGHT_TORNADO
++ tristate "HTC Tornado Backlight Driver."
++ depends on BACKLIGHT_DEVICE && MACH_TORNADO
++ default y
++ help
++ Backlight driver for the HTC Tornado smartphones.
+Index: linux-2.6.16/drivers/video/backlight/Makefile
+===================================================================
+--- linux-2.6.16.orig/drivers/video/backlight/Makefile 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/video/backlight/Makefile 2007-04-12 10:36:19.000000000 +0200
+@@ -5,3 +5,4 @@
+ obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
+ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_SHARP_LOCOMO) += locomolcd.o
++obj-$(CONFIG_BACKLIGHT_TORNADO) += tornado-bl.o
+\ No newline at end of file
+Index: linux-2.6.16/drivers/video/backlight/tornado-bl.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/video/backlight/tornado-bl.c 2007-04-12 10:36:19.000000000 +0200
+@@ -0,0 +1,224 @@
++/*
++** tornado-bl.c for bl in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Wed Apr 12 16:53:40 2006 nico
++** Last update Thu May 25 13:53:14 2006 nico
++*/
++
++/*
++ *
++ * HTC Tornado & Typhoon backlight driver.
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/spinlock.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++#include <linux/platform_device.h>
++
++#include <asm/mach-types.h>
++#include <asm/arch/gpio.h>
++#include <linux/delay.h>
++
++#define TORNADO_LCD_RESET_GPIO 15
++#define TORNADO_LCD_OUT_EN_GPIO 77
++#define TORNADO_LCD_POWER_GPIO 121
++#define TORNADO_BL_GPIO 126
++#define TORNADO_LCD_INTENSITY_GPIO 124
++#define TORNADO_LCD_CLOCK_GPIO 127
++
++static int tornado_bl_powermode = FB_BLANK_UNBLANK;
++static int current_intensity = 1;
++
++
++/*
++ * TODO: see TRM to disable also the internal lcd clock and reenable
++ * it when needed.
++ */
++static int
++tornado_bl_set_power(struct backlight_device *bd, int state)
++{
++ if (state == tornado_bl_powermode)
++ return 0;
++ switch (state) {
++ case FB_BLANK_NORMAL:
++ case FB_BLANK_VSYNC_SUSPEND:
++ case FB_BLANK_HSYNC_SUSPEND:
++ case FB_BLANK_POWERDOWN:
++ omap_set_gpio_dataout(TORNADO_BL_GPIO, 0);
++ omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 0);
++ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, 0);
++
++ omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 0);
++ omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 0);
++ omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 0);
++ break;
++
++ case FB_BLANK_UNBLANK:
++ omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 1);
++ omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 1);
++ omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 1);
++
++ omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 1);
++ /* restore previous lcd intensity */
++ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, current_intensity);
++ /*
++ * need to sleep a little bit to allow lcd clock to
++ * resume completly. avoids a white flickering screen
++ * that would otherwise be visible for a few
++ * milliseconds.
++ *
++ * we use schedule timoueout here to allow any process
++ * that might want to use the CPU to run. this should
++ * not be a problem here.
++ */
++ schedule_timeout_interruptible(10);
++ omap_set_gpio_dataout(TORNADO_BL_GPIO, 1);
++ break;
++ }
++ tornado_bl_powermode = state;
++ return 0;
++}
++
++static int
++tornado_bl_get_power(struct backlight_device *bd)
++{
++ return tornado_bl_powermode;
++}
++
++static int
++tornado_bl_get_intensity(struct backlight_device *bd)
++{
++ return current_intensity;
++}
++
++static int
++tornado_bl_set_intensity(struct backlight_device *bd, int intensity)
++{
++ if (intensity < 0)
++ intensity = 0;
++ if (intensity > 1)
++ intensity = 1;
++ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, intensity);
++ current_intensity = intensity;
++
++ return 0;
++}
++
++static struct backlight_properties tornado_bl = {
++ .owner = THIS_MODULE,
++ .get_power = tornado_bl_get_power,
++ .max_brightness = 1,
++ .set_power = tornado_bl_set_power,
++ .set_brightness = tornado_bl_set_intensity,
++ .get_brightness = tornado_bl_get_intensity,
++};
++
++static struct backlight_device *tornado_backlight_device;
++
++static int __init
++tornado_bl_probe(struct device *dev)
++{
++ tornado_backlight_device = backlight_device_register("tornado-bl", NULL, &tornado_bl);
++ if (IS_ERR(tornado_backlight_device))
++ return PTR_ERR(tornado_backlight_device);
++ return 0;
++}
++
++static int __init
++tornado_bl_remove(struct device *dev)
++{
++ printk("deregistering tornado-bl device.\n");
++ backlight_device_unregister(tornado_backlight_device);
++ return 0;
++}
++
++static struct device_driver tornado_bl_driver = {
++ .name = "tornado-bl",
++ .bus = &platform_bus_type,
++ .probe = tornado_bl_probe,
++ .remove = tornado_bl_remove,
++ .suspend = NULL,
++ .resume = NULL,
++};
++
++static struct platform_device tornado_bl_device = {
++ .name = "tornado-bl",
++ .id = -1,
++};
++
++
++static int __init
++tornado_bl_init(void)
++{
++ int ret;
++
++ omap_request_gpio(TORNADO_LCD_RESET_GPIO);
++ omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO);
++ omap_request_gpio(TORNADO_LCD_POWER_GPIO);
++ omap_request_gpio(TORNADO_BL_GPIO);
++ omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO);
++ omap_request_gpio(TORNADO_LCD_CLOCK_GPIO);
++
++ ret = driver_register(&tornado_bl_driver);
++ if (ret)
++ goto error;
++
++ ret = platform_device_register(&tornado_bl_device);
++ if (ret)
++ goto error;
++
++ omap_set_gpio_direction(TORNADO_BL_GPIO, 0); /* out */
++ printk("HTC Tornado Backlight driver.\n");
++ return 0;
++
++ error:
++ platform_device_unregister(&tornado_bl_device);
++ driver_unregister(&tornado_bl_driver);
++ omap_free_gpio(TORNADO_BL_GPIO);
++ return ret;
++}
++
++static void __exit
++tornado_bl_exit(void)
++{
++ /* FIXME: this freezes the system when unloading ... */
++ platform_device_unregister(&tornado_bl_device);
++ driver_unregister(&tornado_bl_driver);
++ omap_request_gpio(TORNADO_LCD_RESET_GPIO);
++ omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO);
++ omap_request_gpio(TORNADO_LCD_POWER_GPIO);
++ omap_request_gpio(TORNADO_BL_GPIO);
++ omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO);
++ omap_request_gpio(TORNADO_LCD_CLOCK_GPIO);
++}
++
++module_init(tornado_bl_init);
++module_exit(tornado_bl_exit);
++
++MODULE_AUTHOR("Nicolas Schichan");
++MODULE_DESCRIPTION("HTC Tornado LCD Backlight driver.");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.16/drivers/video/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/video/Kconfig 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/video/Kconfig 2007-04-12 10:36:19.000000000 +0200
+@@ -1428,6 +1428,16 @@
+
+ source "drivers/video/omap/Kconfig"
+
++config FB_VSFB
++ bool "VSFB for HTC OMAP based phones"
++ depends on FB && MACH_TORNADO
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ Hacked version of the original VSFB for HTC based OMAP
++ smartphones (320x240 screen and vram at 0x20001020).
++
+ config FB_VIRTUAL
+ tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
+ depends on FB
+Index: linux-2.6.16/drivers/video/logo/Kconfig
+===================================================================
+--- linux-2.6.16.orig/drivers/video/logo/Kconfig 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/video/logo/Kconfig 2007-04-12 10:36:20.000000000 +0200
+@@ -71,4 +71,3 @@
+ default y
+
+ endmenu
+-
+Index: linux-2.6.16/drivers/video/logo/logo.c
+===================================================================
+--- linux-2.6.16.orig/drivers/video/logo/logo.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/drivers/video/logo/logo.c 2007-04-12 10:36:20.000000000 +0200
+@@ -35,7 +35,6 @@
+ extern const struct linux_logo logo_superh_clut224;
+ extern const struct linux_logo logo_m32r_clut224;
+
+-
+ const struct linux_logo *fb_find_logo(int depth)
+ {
+ const struct linux_logo *logo = NULL;
+@@ -102,6 +101,7 @@
+ /* M32R Linux logo */
+ logo = &logo_m32r_clut224;
+ #endif
++
+ }
+ return logo;
+ }
+Index: linux-2.6.16/drivers/video/Makefile
+===================================================================
+--- linux-2.6.16.orig/drivers/video/Makefile 2007-04-12 10:36:07.000000000 +0200
++++ linux-2.6.16/drivers/video/Makefile 2007-04-12 10:36:20.000000000 +0200
+@@ -100,6 +100,7 @@
+ obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
+ obj-$(CONFIG_FB_OF) += offb.o
+ obj-$(CONFIG_FB_OMAP) += omap/ cfbcopyarea.o cfbfillrect.o cfbimgblt.o
++obj-$(CONFIG_FB_VSFB) += vsfb.o
+
+ # the test framebuffer is last
+ obj-$(CONFIG_FB_VIRTUAL) += vfb.o
+Index: linux-2.6.16/drivers/video/vsfb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/drivers/video/vsfb.c 2007-04-12 10:36:20.000000000 +0200
+@@ -0,0 +1,187 @@
++/*
++ * linux/drivers/video/vsfb.c
++ *
++ * Copyright (C) 2003 Ian Molton
++ *
++ * Based on acornfb by Russell King
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Frame buffer code for Simple platforms
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/ctype.h>
++#include <linux/mm.h>
++#include <linux/tty.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/fb.h>
++#include <linux/ioport.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/mach-types.h>
++#include <asm/uaccess.h>
++
++#include <linux/config.h>
++
++#undef FBCON_HAS_CFB8
++#undef FBCON_HAS_CFB2
++#undef FBCON_HAS_CFB4
++#undef FBCON_HAS_CFB32
++
++/* for screen geometry information */
++#include <asm/arch/efb.h>
++
++#define DEFAULT_BPP 16
++#define SCREEN_BASE (0x20001020)
++
++static struct fb_info fb_info;
++static u32 colreg[17]; // Copied from other driver - but is 17 correct?
++
++
++static int
++vsfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
++ u_int trans, struct fb_info *info)
++{
++ if (regno > 16)
++ return 1;
++
++ ((u32 *)(info->pseudo_palette))[regno] = (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
++
++ return 0;
++}
++
++/* extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); */
++
++static struct fb_ops vsfb_ops = {
++ .owner = THIS_MODULE,
++ .fb_setcolreg = vsfb_setcolreg,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_cursor = NULL,
++};
++
++/*
++ * some members are initialized with 0: they will be properly
++ * initialized at run time, depending on the machine we are running
++ * on.
++ */
++static struct fb_var_screeninfo vsfb_var = {
++ .xres = 0,
++ .yres = 0,
++ .xres_virtual = 0,
++ .yres_virtual = 0,
++ .bits_per_pixel = 16,
++ .red = { 11, 5, 0 },
++ .green = { 5, 6, 0 },
++ .blue = { 0, 5, 0 },
++ .activate = FB_ACTIVATE_NOW,
++ .height = -1,
++ .width = -1,
++ .vmode = FB_VMODE_NONINTERLACED,
++ .pixclock = 12500, /* same as pixclock as P2 frame buffer driver. */
++};
++
++static struct fb_fix_screeninfo vsfb_fix = {
++ .id = "HTC VSFB",
++ .smem_start = SCREEN_BASE,
++ .smem_len = 0,
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .line_length = 0,
++ .accel = FB_ACCEL_NONE,
++};
++
++#define OMAP_LCDC_BASE 0xfffec000
++#define OMAP_LCDC_CONTROL (OMAP_LCDC_BASE + 0x00)
++#define OMAP_LCDC_STATUS (OMAP_LCDC_BASE + 0x10)
++#define OMAP_DMA_LCD_BASE 0xfffee300
++#define OMAP_DMA_LCD_CCR (OMAP_DMA_LCD_BASE + 0xc2)
++#define OMAP_DMA_LCD_CTRL (OMAP_DMA_LCD_BASE + 0xc4)
++
++int __init
++vsfb_init(void)
++{
++
++ printk("VSFB Frame buffer driver for HTC OMAP Based Phones.\n");
++
++ fb_info.fix = vsfb_fix;
++ fb_info.var = vsfb_var;
++
++ fb_info.fbops = &vsfb_ops;
++ fb_info.flags = FBINFO_FLAG_DEFAULT;
++ fb_info.pseudo_palette = colreg;
++ fb_alloc_cmap(&fb_info.cmap, 16, 0);
++
++ if (machine_is_typhoon()) {
++ fb_info.var.xres = 176;
++ fb_info.var.yres = 220;
++ } else {
++ fb_info.var.xres = 240;
++ fb_info.var.yres = 320;
++ }
++
++ fb_info.var.xres_virtual = fb_info.var.xres;
++ fb_info.var.yres_virtual = fb_info.var.yres;
++ fb_info.fix.line_length = fb_info.var.xres * 2;
++ fb_info.fix.smem_len = fb_info.var.xres * fb_info.var.yres * 2;
++
++#ifdef CONFIG_EFB_DEBUG
++ /*
++ * disable efb so that only one acces the frame buffer
++ */
++ efb_disable();
++#endif
++
++
++ /* Try to grab our phys memory space... */
++ if (!(request_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len, "HTC vsfb"))){
++#ifdef CONFIG_EFB_DEBUG
++ efb_enable();
++#endif
++ printk("unable to request addr %p (len %i) for HTC VSFB.\n", fb_info.fix.smem_start, fb_info.fix.smem_len);
++ return -ENOMEM;
++ }
++
++ /* Try to map this so we can access it */
++ fb_info.screen_base = ioremap(fb_info.fix.smem_start, fb_info.fix.smem_len);
++ if (!fb_info.screen_base) {
++#ifdef CONFIG_EFB_DEBUG
++ efb_enable();
++#endif
++ printk("unable to ioremap %p for HTC vsfb.\n", fb_info.fix.smem_start);
++ release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len);
++ return -EIO;
++ }
++
++ printk(KERN_INFO "vsfb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n",
++ fb_info.fix.smem_start, fb_info.screen_base, fb_info.fix.smem_len/1024);
++
++ if (register_framebuffer(&fb_info) < 0){
++#ifdef CONFIG_EFB_DEBUG
++ efb_enable();
++#endif
++ iounmap(fb_info.screen_base);
++ release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++module_init(vsfb_init);
++MODULE_AUTHOR("Nicolas Schichan (based on VSFB by Ian Molton (based on acornfb by RMK and parts of anakinfb))");
++MODULE_DESCRIPTION("HTC Very Simple framebuffer driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.16/include/asm-arm/arch-omap/efb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/include/asm-arm/arch-omap/efb.h 2007-04-12 10:36:20.000000000 +0200
+@@ -0,0 +1,56 @@
++/*
++** efb.h for efb in /home/nico/work/tornado/linux-tornado
++**
++** Made by nico
++** Login <nico@chac.le-poulpe.net>
++**
++** Started on Wed Apr 5 18:58:04 2006 nico
++** Last update Thu May 11 13:58:28 2006 nico
++*/
++
++/*
++ *
++ *
++ * Copyright (C) 2006 Nicolas Schichan
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301, USA.
++ *
++ */
++
++#ifndef _EFB_H
++# define _EFB_H
++
++# include <linux/init.h>
++
++/*
++ * TODO: add __init and __initdata where applicable.
++ */
++
++void efb_init(void);
++void efb_putstr(const char *str);
++
++void efb_disable(void);
++void efb_enable(void);
++
++/* #define EFB_WIDTH 240 */
++/* #define EFB_HEIGHT 320 */
++
++extern const char efb_font[255][25];
++
++extern unsigned int efb_width;
++extern unsigned int efb_height;
++
++#endif /* !_EFB_H */
+Index: linux-2.6.16/include/asm-arm/arch-omap/omap730.h
+===================================================================
+--- linux-2.6.16.orig/include/asm-arm/arch-omap/omap730.h 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/include/asm-arm/arch-omap/omap730.h 2007-04-12 10:36:20.000000000 +0200
+@@ -99,4 +99,3 @@
+ #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00)
+
+ #endif /* __ASM_ARCH_OMAP730_H */
+-
+Index: linux-2.6.16/include/asm-arm/kexec.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.16/include/asm-arm/kexec.h 2007-04-12 10:36:20.000000000 +0200
+@@ -0,0 +1,33 @@
++#ifndef _ARM_KEXEC_H
++#define _ARM_KEXEC_H
++
++#ifdef CONFIG_KEXEC
++
++/* Maximum physical address we can use pages from */
++#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
++/* Maximum address we can reach in physical address mode */
++#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
++/* Maximum address we can use for the control code buffer */
++#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
++
++#define KEXEC_CONTROL_CODE_SIZE 4096
++
++#define KEXEC_ARCH KEXEC_ARCH_ARM
++
++#ifndef __ASSEMBLY__
++
++#define MAX_NOTE_BYTES 1024
++
++struct kimage;
++
++static inline void crash_setup_regs(struct pt_regs *newregs,
++ struct pt_regs *oldregs)
++{
++ /* Dummy implementation for now */
++}
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* CONFIG_KEXEC */
++
++#endif /* _ARM_KEXEC_H */
+Index: linux-2.6.16/include/asm-arm/unistd.h
+===================================================================
+--- linux-2.6.16.orig/include/asm-arm/unistd.h 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/include/asm-arm/unistd.h 2007-04-12 10:36:20.000000000 +0200
+@@ -216,7 +216,7 @@
+ #define __NR_sigaltstack (__NR_SYSCALL_BASE+186)
+ #define __NR_sendfile (__NR_SYSCALL_BASE+187)
+ /* 188 reserved */
+- /* 189 reserved */
++#define __NR_sys_kexec_load (__NR_SYSCALL_BASE+189) /* 189 was reserved, temporarily use it for sys_kexec_load */
+ #define __NR_vfork (__NR_SYSCALL_BASE+190)
+ #define __NR_ugetrlimit (__NR_SYSCALL_BASE+191) /* SuS compliant getrlimit */
+ #define __NR_mmap2 (__NR_SYSCALL_BASE+192)
+Index: linux-2.6.16/include/linux/kexec.h
+===================================================================
+--- linux-2.6.16.orig/include/linux/kexec.h 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/include/linux/kexec.h 2007-04-12 10:36:20.000000000 +0200
+@@ -119,6 +119,7 @@
+ #define KEXEC_ARCH_PPC (20 << 16)
+ #define KEXEC_ARCH_PPC64 (21 << 16)
+ #define KEXEC_ARCH_IA_64 (50 << 16)
++#define KEXEC_ARCH_ARM (40 << 16)
+ #define KEXEC_ARCH_S390 (22 << 16)
+ #define KEXEC_ARCH_SH (42 << 16)
+
+Index: linux-2.6.16/init/main.c
+===================================================================
+--- linux-2.6.16.orig/init/main.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16/init/main.c 2007-04-12 10:36:20.000000000 +0200
+@@ -58,6 +58,10 @@
+ #include <asm/smp.h>
+ #endif
+
++#ifdef CONFIG_EFB_DEBUG
++#include <asm/arch/efb.h>
++#endif
++
+ /*
+ * This is one of the first .c files built. Error out early if we have compiler
+ * trouble.
+@@ -442,6 +446,12 @@
+ {
+ char * command_line;
+ extern struct kernel_param __start___param[], __stop___param[];
++
++#ifdef CONFIG_EFB_DEBUG
++ efb_init();
++ efb_putstr("Rock'n Roll !\n");
++#endif
++
+ /*
+ * Interrupts are still disabled. Do necessary setups, then
+ * enable them
+Index: linux-2.6.16/kernel/printk.c
+===================================================================
+--- linux-2.6.16.orig/kernel/printk.c 2007-04-12 10:36:08.000000000 +0200
++++ linux-2.6.16/kernel/printk.c 2007-04-12 10:36:20.000000000 +0200
+@@ -34,12 +34,16 @@
+
+ #include <asm/uaccess.h>
+
++#include <asm/arch/efb.h>
++
+ #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
+
+-#ifdef CONFIG_DEBUG_LL
+-extern void printascii(char *);
++#ifdef CONFIG_EFB_DEBUG
++#include <asm/arch/efb.h>
+ #endif
+
++int in_printk;
++
+ /* printk's without a loglevel use this.. */
+ #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
+
+@@ -367,10 +371,12 @@
+ {
+ struct console *con;
+
++ in_printk = 1;
+ for (con = console_drivers; con; con = con->next) {
+ if ((con->flags & CON_ENABLED) && con->write)
+ con->write(con, &LOG_BUF(start), end - start);
+ }
++ in_printk = 0;
+ }
+
+ /*
+@@ -551,8 +557,8 @@
+ /* Emit the output into the temporary buffer */
+ printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args);
+
+-#ifdef CONFIG_DEBUG_LL
+- printascii(printk_buf);
++#ifdef CONFIG_EFB_DEBUG
++ efb_putstr(printk_buf);
+ #endif
+
+ /*
diff --git a/packages/linux/linux-tornado-omap2_2.6.16.16.bb b/packages/linux/linux-tornado-omap2_2.6.16.16.bb
new file mode 100644
index 0000000000..f76442401f
--- /dev/null
+++ b/packages/linux/linux-tornado-omap2_2.6.16.16.bb
@@ -0,0 +1,49 @@
+DESCRIPTION = "Linux kernel for HTC Tornado/Typhoon/Hurricane phones."
+SECTION = "kernel"
+LICENSE = "GPL"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
+ http://www.muru.com/linux/omap/patches/old/patch-2.6.16-omap2.bz2;patch=1 \
+ file://linux-2.6.16.16.patch;patch=1 \
+ file://tornado-20070320.patch;patch=1 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-2.6.16"
+
+inherit kernel
+
+COMPATIBLE_MACHINE = "htctornado"
+
+do_configure() {
+
+ rm -f ${S}/.config
+
+ if [ ! -e ${WORKDIR}/defconfig ]; then
+ die "No default configuration for ${MACHINE} available."
+ fi
+
+
+ if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ '${WORKDIR}/defconfig' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_populate_staging after do_compile
diff --git a/packages/linux/linux-turbostation/defconfig b/packages/linux/linux-turbostation/defconfig
index f24c1feb61..094f6f3708 100644
--- a/packages/linux/linux-turbostation/defconfig
+++ b/packages/linux/linux-turbostation/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.1
-# Fri Mar 2 18:26:20 2007
+# Linux kernel version: 2.6.20.2
+# Sun Mar 11 15:29:33 2007
#
CONFIG_MMU=y
CONFIG_GENERIC_HARDIRQS=y
@@ -39,7 +39,8 @@ CONFIG_SYSVIPC=y
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
@@ -70,8 +71,8 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_KMOD=y
#
@@ -89,11 +90,11 @@ CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_DEFAULT_IOSCHED="deadline"
#
# Processor
@@ -108,7 +109,7 @@ CONFIG_PPC_FPU=y
# CONFIG_PPC_DCR_NATIVE is not set
# CONFIG_ALTIVEC is not set
# CONFIG_TAU is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
# CONFIG_CPU_FREQ is not set
# CONFIG_WANT_EARLY_SERIAL is not set
CONFIG_PPC_GEN550=y
@@ -172,7 +173,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set
CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
+CONFIG_BINFMT_MISC=m
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/ram rtc-rs5c372.probe=0,0x32"
# CONFIG_PM is not set
@@ -285,9 +286,87 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+# CONFIG_VIA_FIR is not set
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -298,7 +377,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -409,7 +488,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
@@ -419,7 +498,9 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=40960
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
CONFIG_ATA_OVER_ETH=m
#
@@ -450,7 +531,7 @@ CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
@@ -568,7 +649,23 @@ CONFIG_SATA_SIL=y
#
# Multi-device support (RAID and LVM)
#
-# CONFIG_MD is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_MD_FAULTY is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+# CONFIG_DM_MULTIPATH is not set
#
# Fusion MPT device support
@@ -601,7 +698,7 @@ CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
+CONFIG_TUN=m
#
# ARCnet devices
@@ -616,6 +713,7 @@ CONFIG_DUMMY=y
# Ethernet (10 or 100Mbit)
#
# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
#
# Ethernet (1000 Mbit)
@@ -655,7 +753,33 @@ CONFIG_R1000=y
#
# Wireless LAN (non-hamradio)
#
-# CONFIG_NET_RADIO is not set
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
#
# Wan interfaces
@@ -663,13 +787,27 @@ CONFIG_R1000=y
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+CONFIG_SLIP_MODE_SLIP6=y
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
#
# ISDN subsystem
@@ -720,7 +858,7 @@ CONFIG_SERIO_SERPORT=y
# Character devices
#
CONFIG_VT=y
-# CONFIG_VT_CONSOLE is not set
+CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
@@ -754,9 +892,10 @@ CONFIG_UNIX98_PTYS=y
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=y
-# CONFIG_NVRAM is not set
-# CONFIG_GEN_RTC is not set
+CONFIG_HW_RANDOM=m
+CONFIG_NVRAM=m
+CONFIG_GEN_RTC=m
+CONFIG_GEN_RTC_X=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
@@ -773,14 +912,14 @@ CONFIG_HW_RANDOM=y
# I2C support
#
CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
+CONFIG_I2C_CHARDEV=m
#
# I2C Algorithms
#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
@@ -819,7 +958,6 @@ CONFIG_I2C_MPC=y
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_M41T00 is not set
# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_S35390A is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -888,13 +1026,172 @@ CONFIG_HWMON=y
#
# Multimedia devices
#
-# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+# CONFIG_VIDEO_CX88 is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+
+#
+# V4L USB devices
+#
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_29XXX=y
+CONFIG_VIDEO_PVRUSB2_24XXX=y
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_USBVISION=m
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
#
# Digital Video Broadcasting Devices
#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
+CONFIG_DVB=y
+CONFIG_DVB_CORE=m
+# CONFIG_DVB_CORE_ATTACH is not set
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+# CONFIG_DVB_B2C2_FLEXCOP is not set
+
+#
+# Supported BT878 Adapters
+#
+
+#
+# Supported Pluto2 Adapters
+#
+# CONFIG_DVB_PLUTO2 is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+# CONFIG_DVB_CX24110 is not set
+# CONFIG_DVB_CX24123 is not set
+CONFIG_DVB_TDA8083=m
+# CONFIG_DVB_MT312 is not set
+# CONFIG_DVB_VES1X93 is not set
+# CONFIG_DVB_S5H1420 is not set
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+# CONFIG_DVB_SP8870 is not set
+# CONFIG_DVB_SP887X is not set
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+# CONFIG_DVB_L64781 is not set
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+# CONFIG_DVB_TDA10021 is not set
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+# CONFIG_DVB_NXT200X is not set
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+# CONFIG_DVB_BCM3510 is not set
+CONFIG_DVB_LGDT330X=m
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUNER_MT2060=m
+CONFIG_DVB_TUNER_LGH06XF=m
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6421 is not set
+# CONFIG_DVB_TUA6100 is not set
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
#
# Graphics support
@@ -906,20 +1203,121 @@ CONFIG_HWMON=y
#
# Console display driver support
#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
-# CONFIG_SOUND is not set
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA PowerMac devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
#
# HID Devices
#
-CONFIG_HID=y
+CONFIG_HID=m
#
# USB support
@@ -942,9 +1340,9 @@ CONFIG_USB_DEVICEFS=y
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
@@ -955,8 +1353,8 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
#
# USB Device Class drivers
#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -965,23 +1363,26 @@ CONFIG_USB_PRINTER=y
#
# may also be needed; see USB_STORAGE Help for more information
#
-CONFIG_USB_STORAGE=y
+CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
#
# USB Input Devices
#
-# CONFIG_USB_HID is not set
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
@@ -994,28 +1395,41 @@ CONFIG_USB_STORAGE=y
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
+CONFIG_USB_YEALINK=m
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+CONFIG_USB_ATI_REMOTE2=m
+CONFIG_USB_KEYSPAN_REMOTE=m
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
#
# USB Network Adapters
#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_NET_ZAURUS=m
# CONFIG_USB_MON is not set
#
@@ -1026,64 +1440,81 @@ CONFIG_USB_STORAGE=y
# USB Serial Converter support
#
CONFIG_USB_SERIAL=m
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
CONFIG_USB_SERIAL_VISOR=m
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
#
# USB Miscellaneous drivers
#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
# CONFIG_USB_TEST is not set
#
@@ -1175,34 +1606,42 @@ CONFIG_RTC_DRV_RS5C372=y
#
# File systems
#
-CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
# CONFIG_EXT2_FS_SECURITY is not set
# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS=m
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
# CONFIG_EXT3_FS_SECURITY is not set
# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
+CONFIG_JBD=m
# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+# CONFIG_XFS_SECURITY is not set
+CONFIG_XFS_POSIX_ACL=y
+# CONFIG_XFS_RT is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
+CONFIG_QUOTACTL=y
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
+CONFIG_FUSE_FS=m
#
# CD-ROM/DVD Filesystems
@@ -1259,7 +1698,7 @@ CONFIG_JFFS2_FS_SECURITY=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_CRAMFS is not set
+CONFIG_CRAMFS=m
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -1402,7 +1841,7 @@ CONFIG_CRYPTO_MANAGER=y
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
@@ -1415,11 +1854,11 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
+CONFIG_CRYPTO_AES=m
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_DEFLATE is not set
diff --git a/packages/linux/linux-turbostation/linux-2.6.16_arch_ppc_syslib_open_pic.c b/packages/linux/linux-turbostation/linux-2.6.16_arch_ppc_syslib_open_pic.c
deleted file mode 100644
index 05b2a41e7f..0000000000
--- a/packages/linux/linux-turbostation/linux-2.6.16_arch_ppc_syslib_open_pic.c
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-2.6.20.1/arch/ppc/syslib/open_pic.c
-===================================================================
---- linux-2.6.20.1.orig/arch/ppc/syslib/open_pic.c 2007-02-20 07:34:32.000000000 +0100
-+++ linux-2.6.20.1/arch/ppc/syslib/open_pic.c 2007-02-26 02:26:56.000000000 +0100
-@@ -318,7 +318,8 @@
- #ifdef CONFIG_EPIC_SERIAL_MODE
- /* Have to start from ground zero.
- */
-- openpic_reset();
-+ // 2005.09.06, JohnsonCheng Fixed USB device Oops bug
-+ //openpic_reset();
- #endif
-
- if (ppc_md.progress) ppc_md.progress("openpic: enter", 0x122);
diff --git a/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Kconfig b/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Kconfig
deleted file mode 100644
index 6cd91368f4..0000000000
--- a/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Kconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: linux-2.6.20.1/drivers/i2c/chips/Kconfig
-===================================================================
---- linux-2.6.20.1.orig/drivers/i2c/chips/Kconfig 2007-02-20 07:34:32.000000000 +0100
-+++ linux-2.6.20.1/drivers/i2c/chips/Kconfig 2007-02-26 02:27:27.000000000 +0100
-@@ -125,4 +125,12 @@
- This driver can also be built as a module. If so, the module
- will be called max6875.
-
-+config SENSORS_S35390A
-+ tristate "S-35390A RTC chip"
-+ depends on I2C && PPC32 && SANDPOINT
-+ help
-+ If you say yes here you get support for the S-35390A RTC chip/
-+
-+ This driver can also be built as a module. If so, the module
-+ will be called i2c-s3531a
- endmenu
diff --git a/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Makefile b/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Makefile
deleted file mode 100644
index 3378609724..0000000000
--- a/packages/linux/linux-turbostation/linux-2.6.16_drivers_i2c_chips_Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.20.1/drivers/i2c/chips/Makefile
-===================================================================
---- linux-2.6.20.1.orig/drivers/i2c/chips/Makefile 2007-02-20 07:34:32.000000000 +0100
-+++ linux-2.6.20.1/drivers/i2c/chips/Makefile 2007-02-26 02:27:43.000000000 +0100
-@@ -12,6 +12,7 @@
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
- obj-$(CONFIG_ISP1301_OMAP) += isp1301_omap.o
- obj-$(CONFIG_TPS65010) += tps65010.o
-+obj-$(CONFIG_SENSORS_S35390A) += i2c-s3531a.o
-
- ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
diff --git a/packages/linux/linux-turbostation/linux-2.6.16_drivers_mtd_maps_physmap.c b/packages/linux/linux-turbostation/linux-2.6.16_drivers_mtd_maps_physmap.c
index b73b227220..e1895af53a 100644
--- a/packages/linux/linux-turbostation/linux-2.6.16_drivers_mtd_maps_physmap.c
+++ b/packages/linux/linux-turbostation/linux-2.6.16_drivers_mtd_maps_physmap.c
@@ -1,8 +1,8 @@
-Index: linux-2.6.21-rc2-git3/drivers/mtd/maps/physmap.c
+Index: linux-2.6.20.2/drivers/mtd/maps/physmap.c
===================================================================
---- linux-2.6.21-rc2-git3.orig/drivers/mtd/maps/physmap.c 2007-03-06 01:06:56.000000000 +0100
-+++ linux-2.6.21-rc2-git3/drivers/mtd/maps/physmap.c 2007-03-06 01:12:35.000000000 +0100
-@@ -134,13 +134,43 @@
+--- linux-2.6.20.2.orig/drivers/mtd/maps/physmap.c 2007-03-11 15:22:25.000000000 +0100
++++ linux-2.6.20.2/drivers/mtd/maps/physmap.c 2007-03-11 15:28:18.000000000 +0100
+@@ -134,13 +134,53 @@
}
info->mtd->owner = THIS_MODULE;
@@ -11,27 +11,37 @@ Index: linux-2.6.21-rc2-git3/drivers/mtd/maps/physmap.c
+ .name = "u-boot",
+ .offset = 0x00F00000,
+ .size = 0x00040000,
-+ .mask_flags = MTD_WRITEABLE, /* force read-only */
++ .mask_flags = MTD_WRITEABLE,
+ },
+ {
-+ .name = "kernel", /* default kernel image */
++ .name = "kernel",
+ .offset = 0x00000000,
-+ .size = 0x00280000,
++ .size = 0x00200000,
+ },
+ {
+ .name = "rootfs",
-+ .offset = 0x00280000,
-+ .size = 0x00C80000,
++ .offset = 0x00200000,
++ .size = 0x00D00000,
+ },
+ {
-+ .name = "empty",
++ .name = "u-boot env",
+ .offset = 0x00F40000,
-+ .size = 0x000A0000,
++ .size = 0x00020000,
+ },
+ {
-+ .name = "u-boot env",
-+ .offset = 0x00FE0000,
++ .name = "u-boot2",
++ .offset = 0x00F60000,
++ .size = 0x00040000,
++ },
++ {
++ .name = "u-boot2 env",
++ .offset = 0x00FA0000,
+ .size = 0x00020000,
++ },
++ {
++ .name = "sysconf",
++ .offset = 0x00FC0000,
++ .size = 0x00040000,
+ }
+};
+
@@ -43,7 +53,7 @@ Index: linux-2.6.21-rc2-git3/drivers/mtd/maps/physmap.c
return 0;
}
-
-+ physmap_set_partitions(TS101_partitions, 5);
++ physmap_set_partitions(TS101_partitions, 7);
if (physmap_data->nr_parts) {
printk(KERN_NOTICE "Using physmap partition information\n");
add_mtd_partitions(info->mtd, physmap_data->parts,
diff --git a/packages/linux/linux-turbostation/linux-2.6.16_drivers_net_r8169.c b/packages/linux/linux-turbostation/linux-2.6.16_drivers_net_r8169.c
deleted file mode 100644
index 8ba15e1a84..0000000000
--- a/packages/linux/linux-turbostation/linux-2.6.16_drivers_net_r8169.c
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: linux-2.6.20.1/drivers/net/r8169.c
-===================================================================
---- linux-2.6.20.1.orig/drivers/net/r8169.c 2007-02-26 03:33:53.000000000 +0100
-+++ linux-2.6.20.1/drivers/net/r8169.c 2007-02-26 03:34:21.000000000 +0100
-@@ -1522,7 +1522,7 @@
- goto err_out_disable_2;
-
- /* save power state before pci_enable_device overwrites it */
-- pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
-+ pm_cap = 220; // pci_find_capability(pdev, PCI_CAP_ID_PM)
- if (pm_cap) {
- u16 pwr_command, acpi_idle_state;
-
diff --git a/packages/linux/linux-turbostation_2.6.20.1.bb b/packages/linux/linux-turbostation_2.6.20.1.bb
deleted file mode 100644
index 6e08b9ecff..0000000000
--- a/packages/linux/linux-turbostation_2.6.20.1.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-DESCRIPTION = "Linux Kernel for the QNAP TurboStation platform"
-SECTION = "kernel"
-LICENSE = "GPL"
-DEPENDS = "uboot-utils"
-PR = "r4"
-
-# notes on iom def kernel:
-#
-# can probably remove :
-# BLK_DEV_RAM ?
-# MD_RAID5
-# QUOTA
-# QFMT_V2
-# DNOTIFY?
-# MSDOS_FS, VFAT_FS, NTFS_FS?
-#
-# USB_GADGET? - USB_GADGET_NET2280, USB_ETH, USB_ETH_RNDIS
-#
-#
-# should add:
-# EXT3_FS
-# PACKET_MMAP ?
-# i2c_chardev?
-# usb audio:
-# USB_EMI62?
-# USB_EMI26?
-
-COMPATIBLE_MACHINE = "turbostation"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://001_r1000.diff;patch=1 \
- file://linux-2.6.16_arch_ppc_platforms_sandpoint.h;patch=1 \
- file://linux-2.6.16_drivers_i2c_chips_Makefile;patch=1 \
- file://002_qnap-pic.diff;patch=1 \
- file://linux-2.6.16_arch_ppc_syslib_Makefile;patch=1 \
- file://linux-2.6.16_drivers_mtd_maps_physmap.c;patch=1 \
- file://linux-2.6.16_arch_ppc_syslib_mpc10x_common.c;patch=1 \
- file://linux-2.6.16_drivers_net_r8169.c;patch=1 \
- file://linux-2.6.16_arch_ppc_platforms_Makefile;patch=1 \
- file://linux-2.6.16_arch_ppc_syslib_open_pic.c;patch=1 \
- file://linux-2.6.16_include_asm-ppc_mpc10x.h;patch=1 \
- file://linux-2.6.16_arch_ppc_platforms_sandpoint.c;patch=1 \
- file://linux-2.6.16_drivers_i2c_chips_Kconfig;patch=1 \
- file://defconfig"
-
-S = "${WORKDIR}/linux-${PV}"
-
-inherit kernel
-
-KERNEL_IMAGETYPE = "uImage"
-KERNEL_OUTPUT = "arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE}"
-# Override arch. The kernel stuff is in arch/ppc, not arch/powerpc in our case
-ARCH = ppc
-
-do_configure() {
- install -m 644 ${WORKDIR}/defconfig ${S}/.config
- make ARCH=ppc oldconfig
-}
-
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
-}
-
-#ppc build leaves the kernel in a different place
-#do_movekernel() {
-#
-#}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_build after do_compile
-
-
diff --git a/packages/linux/linux-turbostation_2.6.20.2.bb b/packages/linux/linux-turbostation_2.6.20.2.bb
new file mode 100644
index 0000000000..84701e4a6a
--- /dev/null
+++ b/packages/linux/linux-turbostation_2.6.20.2.bb
@@ -0,0 +1,51 @@
+DESCRIPTION = "Linux Kernel for the QNAP TurboStation platform"
+SECTION = "kernel"
+LICENSE = "GPL"
+DEPENDS = "uboot-utils"
+PR = "r1"
+
+COMPATIBLE_MACHINE = "turbostation"
+
+RDEPENDS_kernel-module-zd1211rw += "zd1211-firmware"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://001_r1000.diff;patch=1 \
+ file://linux-2.6.16_arch_ppc_platforms_sandpoint.h;patch=1 \
+ file://002_qnap-pic.diff;patch=1 \
+ file://linux-2.6.16_arch_ppc_syslib_Makefile;patch=1 \
+ file://linux-2.6.16_drivers_mtd_maps_physmap.c;patch=1 \
+ file://linux-2.6.16_arch_ppc_syslib_mpc10x_common.c;patch=1 \
+ file://linux-2.6.16_arch_ppc_platforms_Makefile;patch=1 \
+ file://linux-2.6.16_include_asm-ppc_mpc10x.h;patch=1 \
+ file://linux-2.6.16_arch_ppc_platforms_sandpoint.c;patch=1 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-${PV}"
+
+inherit kernel
+
+KERNEL_IMAGETYPE = "uImage"
+KERNEL_OUTPUT = "arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE}"
+# Override arch. The kernel stuff is in arch/ppc, not arch/powerpc in our case
+ARCH = ppc
+
+do_configure() {
+ install -m 644 ${WORKDIR}/defconfig ${S}/.config
+ make ARCH=ppc oldconfig
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+#ppc build leaves the kernel in a different place
+#do_movekernel() {
+#
+#}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
+
diff --git a/packages/linux/linux-x86-2.6.20/defconfig b/packages/linux/linux-x86-2.6.20/defconfig
deleted file mode 100644
index 2b7dc6a3f7..0000000000
--- a/packages/linux/linux-x86-2.6.20/defconfig
+++ /dev/null
@@ -1,1535 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Tue Feb 20 09:02:49 2007
-#
-CONFIG_X86_64=y
-CONFIG_64BIT=y
-CONFIG_X86=y
-CONFIG_ZONE_DMA32=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_EARLY_PRINTK=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_DMI=y
-CONFIG_AUDIT_ARCH=y
-CONFIG_GENERIC_BUG=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_X86_PC=y
-# CONFIG_X86_VSMP is not set
-# CONFIG_MK8 is not set
-# CONFIG_MPSC is not set
-# CONFIG_MCORE2 is not set
-CONFIG_GENERIC_CPU=y
-CONFIG_X86_L1_CACHE_BYTES=128
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_X86_INTERNODE_CACHE_BYTES=128
-CONFIG_X86_TSC=y
-CONFIG_X86_GOOD_APIC=y
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-CONFIG_X86_HT=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_MTRR=y
-CONFIG_SMP=y
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-# CONFIG_NUMA is not set
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-CONFIG_RESOURCES_64BIT=y
-CONFIG_NR_CPUS=8
-# CONFIG_HOTPLUG_CPU is not set
-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-CONFIG_HPET_TIMER=y
-CONFIG_IOMMU=y
-# CONFIG_CALGARY_IOMMU is not set
-CONFIG_SWIOTLB=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_INTEL=y
-CONFIG_X86_MCE_AMD=y
-# CONFIG_KEXEC is not set
-# CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x200000
-CONFIG_SECCOMP=y
-# CONFIG_CC_STACKPROTECTOR is not set
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_REORDER is not set
-CONFIG_K8_NB=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_ISA_DMA_API=y
-CONFIG_GENERIC_PENDING_IRQ=y
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI etc.)
-#
-CONFIG_PCI=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_HT_IRQ=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats / Emulations
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_MISC=y
-# CONFIG_IA32_EMULATION is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_AX88796 is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_MSI_LAPTOP is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-# CONFIG_QLA3XXX is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-CONFIG_RTC=m
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-CONFIG_AGP=y
-CONFIG_AGP_AMD64=y
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_VIA is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-CONFIG_VIDEO_SELECT=y
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_DEVICE=y
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_MTS64 is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=m
-CONFIG_RTC_CLASS=m
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=m
-CONFIG_RTC_INTF_PROC=m
-CONFIG_RTC_INTF_DEV=m
-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-
-#
-# RTC drivers
-#
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_TEST=m
-CONFIG_RTC_DRV_V3020=m
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# Virtualization
-#
-# CONFIG_KVM is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_UNUSED_SYMBOLS=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=m
-CONFIG_CRYPTO_HMAC=m
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_GF128MUL=m
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-# CONFIG_CRYPTO_TWOFISH_X86_64 is not set
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-# CONFIG_CRYPTO_AES_X86_64 is not set
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-x86-2.6.20/i486-defconfig b/packages/linux/linux-x86-2.6.20/i486-defconfig
new file mode 100644
index 0000000000..d0c170f9eb
--- /dev/null
+++ b/packages/linux/linux-x86-2.6.20/i486-defconfig
@@ -0,0 +1,1649 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Wed Jul 4 16:53:32 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+CONFIG_M686=y
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_XADD=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_HPET_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+# CONFIG_X86_MCE_P4THERMAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+# CONFIG_HIGHPTE is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_HOTPLUG_CPU is not set
+CONFIG_COMPAT_VDSO=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+# CONFIG_ACPI_HOTKEY is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_PCI_MSI is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_K8_NB=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_MSI_LAPTOP is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CS5535 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_IEEE1394=y
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+# CONFIG_IEEE1394_OUI_DB is not set
+# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
+# CONFIG_IEEE1394_EXPORT_FULL_API is not set
+
+#
+# Device Drivers
+#
+
+#
+# Texas Instruments PCILynx requires I2C
+#
+CONFIG_IEEE1394_OHCI1394=y
+
+#
+# Protocol Drivers
+#
+# CONFIG_IEEE1394_VIDEO1394 is not set
+# CONFIG_IEEE1394_SBP2 is not set
+# CONFIG_IEEE1394_ETH1394 is not set
+# CONFIG_IEEE1394_DV1394 is not set
+CONFIG_IEEE1394_RAWIO=y
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=y
+# CONFIG_PCNET32_NAPI is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+CONFIG_E100=m
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+CONFIG_NE2K_PCI=m
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+CONFIG_RTC=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+CONFIG_AGP=y
+# CONFIG_AGP_ALI is not set
+# CONFIG_AGP_ATI is not set
+# CONFIG_AGP_AMD is not set
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=y
+# CONFIG_AGP_NVIDIA is not set
+# CONFIG_AGP_SIS is not set
+# CONFIG_AGP_SWORKS is not set
+# CONFIG_AGP_VIA is not set
+# CONFIG_AGP_EFFICEON is not set
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_I810 is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_K8TEMP is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_RTCTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+CONFIG_SND_ENS1371=y
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Instrumentation Support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-x86-2.6.20/i586-defconfig b/packages/linux/linux-x86-2.6.20/i586-defconfig
new file mode 100644
index 0000000000..b06f535e7b
--- /dev/null
+++ b/packages/linux/linux-x86-2.6.20/i586-defconfig
@@ -0,0 +1,2705 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Sat May 26 01:56:02 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+CONFIG_M586=y
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_XADD=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_F00F_BUG=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_ALIGNMENT_16=y
+CONFIG_HPET_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+# CONFIG_X86_MCE_P4THERMAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+# CONFIG_HIGHPTE is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_HOTPLUG_CPU is not set
+CONFIG_COMPAT_VDSO=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+# CONFIG_ACPI_HOTKEY is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+# CONFIG_APM_DO_ENABLE is not set
+# CONFIG_APM_CPU_IDLE is not set
+# CONFIG_APM_DISPLAY_BLANK is not set
+# CONFIG_APM_RTC_IS_GMT is not set
+# CONFIG_APM_ALLOW_INTS is not set
+# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_HOTPLUG_PCI_PCIE is not set
+CONFIG_PCIEAER=y
+# CONFIG_PCI_MSI is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+CONFIG_SCx200=m
+CONFIG_SCx200HR_TIMER=m
+CONFIG_K8_NB=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=m
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_COMPAQ=m
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+CONFIG_HOTPLUG_PCI_IBM=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+CONFIG_HOTPLUG_PCI_SHPC=m
+# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=m
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=y
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+CONFIG_MTD_ABSENT=y
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_SC520CDP is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_AMD76XROM is not set
+# CONFIG_MTD_ICHXROM is not set
+# CONFIG_MTD_ESB2ROM is not set
+# CONFIG_MTD_CK804XROM is not set
+# CONFIG_MTD_SCB2_FLASH is not set
+# CONFIG_MTD_L440GX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+# CONFIG_MTD_PMC551_BUGFIX is not set
+# CONFIG_MTD_PMC551_DEBUG is not set
+CONFIG_MTD_DATAFLASH=m
+CONFIG_MTD_M25P80=m
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_BLOCK2MTD=y
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+CONFIG_MTD_NAND_CAFE=y
+CONFIG_MTD_NAND_CS553X=y
+
+#
+# OneNAND Flash Device Drivers
+#
+CONFIG_MTD_ONENAND=m
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_OTP is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_PC_PCMCIA is not set
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PARPORT_NOT_PC=y
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+CONFIG_PARIDE=m
+CONFIG_PARIDE_PARPORT=y
+
+#
+# Parallel IDE high-level drivers
+#
+CONFIG_PARIDE_PD=m
+CONFIG_PARIDE_PCD=m
+CONFIG_PARIDE_PF=m
+CONFIG_PARIDE_PT=m
+CONFIG_PARIDE_PG=m
+
+#
+# Parallel IDE protocol modules
+#
+CONFIG_PARIDE_ATEN=m
+CONFIG_PARIDE_BPCK=m
+CONFIG_PARIDE_BPCK6=m
+CONFIG_PARIDE_COMM=m
+CONFIG_PARIDE_DSTR=m
+CONFIG_PARIDE_FIT2=m
+CONFIG_PARIDE_FIT3=m
+CONFIG_PARIDE_EPAT=m
+# CONFIG_PARIDE_EPATC8 is not set
+CONFIG_PARIDE_EPIA=m
+CONFIG_PARIDE_FRIQ=m
+CONFIG_PARIDE_FRPW=m
+CONFIG_PARIDE_KBIC=m
+CONFIG_PARIDE_KTTI=m
+CONFIG_PARIDE_ON20=m
+CONFIG_PARIDE_ON26=m
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+CONFIG_BLK_DEV_UMEM=m
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_SGI_IOC4 is not set
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+# CONFIG_MSI_LAPTOP is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=y
+CONFIG_BLK_DEV_ALI15X3=y
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=y
+CONFIG_BLK_DEV_ATIIXP=y
+CONFIG_BLK_DEV_CMD64X=y
+CONFIG_BLK_DEV_TRIFLEX=y
+CONFIG_BLK_DEV_CY82C693=y
+CONFIG_BLK_DEV_CS5520=y
+CONFIG_BLK_DEV_CS5530=y
+CONFIG_BLK_DEV_CS5535=y
+CONFIG_BLK_DEV_HPT34X=y
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=y
+CONFIG_BLK_DEV_JMICRON=y
+CONFIG_BLK_DEV_SC1200=y
+CONFIG_BLK_DEV_PIIX=y
+CONFIG_BLK_DEV_IT821X=y
+CONFIG_BLK_DEV_NS87415=y
+CONFIG_BLK_DEV_PDC202XX_OLD=y
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=y
+CONFIG_BLK_DEV_SVWKS=y
+CONFIG_BLK_DEV_SIIMAGE=y
+CONFIG_BLK_DEV_SIS5513=y
+CONFIG_BLK_DEV_SLC90E66=y
+CONFIG_BLK_DEV_TRM290=y
+CONFIG_BLK_DEV_VIA82CXXX=y
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+
+#
+# SCSI low-level drivers
+#
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+CONFIG_AIC7XXX_DEBUG_ENABLE=y
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC7XXX_OLD=m
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=5000
+# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
+CONFIG_AIC79XX_DEBUG_ENABLE=y
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+CONFIG_AIC94XX_DEBUG=y
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+# CONFIG_SCSI_OMIT_FLASHPOINT is not set
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_NSP32=m
+CONFIG_SCSI_DEBUG=m
+CONFIG_SCSI_SRP=m
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_SVW=y
+CONFIG_ATA_PIIX=y
+CONFIG_SATA_MV=y
+CONFIG_SATA_NV=y
+CONFIG_PDC_ADMA=y
+CONFIG_SATA_QSTOR=y
+CONFIG_SATA_PROMISE=y
+CONFIG_SATA_SX4=y
+CONFIG_SATA_SIL=y
+CONFIG_SATA_SIL24=y
+CONFIG_SATA_SIS=y
+CONFIG_SATA_ULI=y
+CONFIG_SATA_VIA=y
+CONFIG_SATA_VITESSE=y
+CONFIG_SATA_INTEL_COMBINED=y
+CONFIG_PATA_ALI=y
+CONFIG_PATA_AMD=y
+CONFIG_PATA_ARTOP=y
+CONFIG_PATA_ATIIXP=y
+CONFIG_PATA_CMD64X=y
+CONFIG_PATA_CS5520=y
+CONFIG_PATA_CS5530=y
+CONFIG_PATA_CS5535=y
+CONFIG_PATA_CYPRESS=y
+CONFIG_PATA_EFAR=y
+CONFIG_ATA_GENERIC=y
+CONFIG_PATA_HPT366=y
+CONFIG_PATA_HPT37X=y
+CONFIG_PATA_HPT3X2N=y
+CONFIG_PATA_HPT3X3=y
+CONFIG_PATA_IT821X=y
+CONFIG_PATA_JMICRON=y
+CONFIG_PATA_TRIFLEX=y
+CONFIG_PATA_MARVELL=y
+CONFIG_PATA_MPIIX=y
+CONFIG_PATA_OLDPIIX=y
+CONFIG_PATA_NETCELL=y
+CONFIG_PATA_NS87410=y
+CONFIG_PATA_OPTI=y
+CONFIG_PATA_OPTIDMA=y
+# CONFIG_PATA_PCMCIA is not set
+CONFIG_PATA_PDC_OLD=y
+CONFIG_PATA_RADISYS=y
+CONFIG_PATA_RZ1000=y
+CONFIG_PATA_SC1200=y
+CONFIG_PATA_SERVERWORKS=y
+CONFIG_PATA_PDC2027X=y
+CONFIG_PATA_SIL680=y
+CONFIG_PATA_SIS=y
+CONFIG_PATA_VIA=y
+CONFIG_PATA_WINBOND=y
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_IEEE1394=y
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+# CONFIG_IEEE1394_OUI_DB is not set
+CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
+CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
+# CONFIG_IEEE1394_EXPORT_FULL_API is not set
+
+#
+# Device Drivers
+#
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_OHCI1394=y
+
+#
+# Protocol Drivers
+#
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_DV1394=m
+CONFIG_IEEE1394_RAWIO=y
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_NET_SB1000=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_CICADA_PHY=m
+CONFIG_VITESSE_PHY=m
+CONFIG_SMSC_PHY=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_FIXED_PHY=m
+# CONFIG_FIXED_MII_10_FDX is not set
+# CONFIG_FIXED_MII_100_FDX is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+# CONFIG_PCMCIA_XIRCOM is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+# CONFIG_PCNET32_NAPI is not set
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_DGRS=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+CONFIG_SKY2=m
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_IPW2100=m
+# CONFIG_IPW2100_MONITOR is not set
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+# CONFIG_IPW2200_MONITOR is not set
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_PCMCIA_SPECTRUM is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_ATMEL is not set
+# CONFIG_PCMCIA_WL3501 is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+# CONFIG_HOSTAP_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=m
+
+#
+# Old ISDN4Linux
+#
+# CONFIG_ISDN_I4L is not set
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+# CONFIG_ISDN_DRV_AVMB1_AVM_CS is not set
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+
+#
+# Active Eicon DIVA Server cards
+#
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+# CONFIG_ISDN_DIVAS_BRIPCI is not set
+# CONFIG_ISDN_DIVAS_PRIPCI is not set
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_HW_RANDOM_GEODE=m
+CONFIG_HW_RANDOM_VIA=m
+# CONFIG_NVRAM is not set
+CONFIG_RTC=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+CONFIG_AGP=y
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=y
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+CONFIG_MWAVE=m
+# CONFIG_SCx200_GPIO is not set
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+CONFIG_CS5535_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_TELCLOCK=m
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_ISA=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_SCx200_ACB=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_STUB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+# CONFIG_VIDEO_BT848_DVB is not set
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+# CONFIG_VIDEO_SAA7134_OSS is not set
+# CONFIG_VIDEO_SAA7134_DVB is not set
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+# CONFIG_VIDEO_CX88_DVB is not set
+CONFIG_VIDEO_CAFE_CCIC=m
+
+#
+# V4L USB devices
+#
+CONFIG_VIDEO_PVRUSB2=m
+# CONFIG_VIDEO_PVRUSB2_29XXX is not set
+# CONFIG_VIDEO_PVRUSB2_24XXX is not set
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+
+#
+# Radio Adapters
+#
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_USB_DSBR=m
+
+#
+# Digital Video Broadcasting Devices
+#
+CONFIG_DVB=y
+CONFIG_DVB_CORE=m
+# CONFIG_DVB_CORE_ATTACH is not set
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+CONFIG_DVB_FE_CUSTOMISE=y
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUNER_MT2060=m
+CONFIG_DVB_TUNER_LGH06XF=m
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_TUA6100=m
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_VIDEOBUF=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+CONFIG_FB_HGA=m
+# CONFIG_FB_HGA_ACCEL is not set
+CONFIG_FB_S1D13XXX=m
+CONFIG_FB_NVIDIA=m
+# CONFIG_FB_NVIDIA_I2C is not set
+CONFIG_FB_RIVA=m
+# CONFIG_FB_RIVA_I2C is not set
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_I810=m
+# CONFIG_FB_I810_GTF is not set
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+CONFIG_FB_MATROX=m
+# CONFIG_FB_MATROX_MILLENIUM is not set
+# CONFIG_FB_MATROX_MYSTIQUE is not set
+# CONFIG_FB_MATROX_G is not set
+CONFIG_FB_MATROX_I2C=m
+# CONFIG_FB_MATROX_MULTIHEAD is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY=m
+# CONFIG_FB_ATY_CT is not set
+# CONFIG_FB_ATY_GX is not set
+CONFIG_FB_SAVAGE=m
+# CONFIG_FB_SAVAGE_I2C is not set
+# CONFIG_FB_SAVAGE_ACCEL is not set
+CONFIG_FB_SIS=m
+# CONFIG_FB_SIS_300 is not set
+# CONFIG_FB_SIS_315 is not set
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+# CONFIG_FB_3DFX_ACCEL is not set
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_CYBLA=m
+CONFIG_FB_TRIDENT=m
+# CONFIG_FB_TRIDENT_ACCEL is not set
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_GX=m
+# CONFIG_FB_GEODE_GX_SET_FBSIZE is not set
+CONFIG_FB_GEODE_GX1=m
+CONFIG_FB_VIRTUAL=m
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_RTCTIMER=m
+CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+# CONFIG_SND_FM801_TEA575X_BOOL is not set
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=y
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=y
+CONFIG_SOUND_BT878=m
+CONFIG_SOUND_ES1371=m
+CONFIG_SOUND_ICH=m
+CONFIG_SOUND_TRIDENT=m
+CONFIG_SOUND_MSNDCLAS=m
+CONFIG_MSNDCLAS_INIT_FILE="/etc/sound/msndinit.bin"
+CONFIG_MSNDCLAS_PERM_FILE="/etc/sound/msndperm.bin"
+CONFIG_SOUND_MSNDPIN=m
+CONFIG_MSNDPIN_INIT_FILE="/etc/sound/pndspini.bin"
+CONFIG_MSNDPIN_PERM_FILE="/etc/sound/pndsperm.bin"
+CONFIG_SOUND_VIA82CXXX=m
+# CONFIG_MIDI_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+CONFIG_SOUND_CS4232=m
+CONFIG_SOUND_SSCAPE=m
+CONFIG_SOUND_VMIDI=m
+CONFIG_SOUND_TRIX=m
+CONFIG_SOUND_MSS=m
+CONFIG_SOUND_MPU401=m
+CONFIG_SOUND_PAS=m
+CONFIG_SOUND_PSS=m
+# CONFIG_PSS_MIXER is not set
+CONFIG_SOUND_SB=m
+CONFIG_SOUND_YM3812=m
+CONFIG_SOUND_UART6850=m
+CONFIG_SOUND_AEDSP16=m
+# CONFIG_SC6600 is not set
+# CONFIG_AEDSP16_MSS is not set
+# CONFIG_AEDSP16_SBPRO is not set
+# CONFIG_AEDSP16_MPU401 is not set
+CONFIG_SOUND_TVMIXER=m
+CONFIG_SOUND_KAHLUA=m
+CONFIG_AC97_BUS=y
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+CONFIG_USB_ISP116X_HCD=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_U132_HCD is not set
+CONFIG_USB_SL811_HCD=y
+# CONFIG_USB_SL811_CS is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+CONFIG_USB_ACECAD=m
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
+CONFIG_USB_TOUCHSCREEN_ETURBO=y
+CONFIG_USB_TOUCHSCREEN_GUNZE=y
+CONFIG_USB_TOUCHSCREEN_DMC_TSC10=y
+CONFIG_USB_YEALINK=m
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+CONFIG_USB_ATI_REMOTE2=m
+CONFIG_USB_KEYSPAN_REMOTE=m
+CONFIG_USB_APPLETOUCH=m
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_TEST=m
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+
+#
+# InfiniBand support
+#
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_USER_MAD=m
+CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_INFINIBAND_ADDR_TRANS=y
+CONFIG_INFINIBAND_MTHCA=m
+CONFIG_INFINIBAND_MTHCA_DEBUG=y
+CONFIG_INFINIBAND_AMSO1100=m
+# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB=m
+CONFIG_INFINIBAND_IPOIB_DEBUG=y
+# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+CONFIG_INFINIBAND_SRP=m
+CONFIG_INFINIBAND_ISER=m
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+CONFIG_EDAC=m
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_AMD76X=m
+CONFIG_EDAC_E7XXX=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82875P=m
+CONFIG_EDAC_I82860=m
+CONFIG_EDAC_R82600=m
+CONFIG_EDAC_POLL=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# DMA Engine support
+#
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+CONFIG_VXFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+CONFIG_RXRPC=m
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+CONFIG_DLM=m
+CONFIG_DLM_TCP=y
+# CONFIG_DLM_SCTP is not set
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-x86-2.6.20/i686-defconfig b/packages/linux/linux-x86-2.6.20/i686-defconfig
new file mode 100644
index 0000000000..b06f535e7b
--- /dev/null
+++ b/packages/linux/linux-x86-2.6.20/i686-defconfig
@@ -0,0 +1,2705 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Sat May 26 01:56:02 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+# CONFIG_CPUSETS is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+CONFIG_M586=y
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_XADD=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_F00F_BUG=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_ALIGNMENT_16=y
+CONFIG_HPET_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+# CONFIG_X86_MCE_P4THERMAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+# CONFIG_HIGHPTE is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_HOTPLUG_CPU is not set
+CONFIG_COMPAT_VDSO=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+# CONFIG_ACPI_HOTKEY is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=m
+CONFIG_ACPI_SBS=m
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+# CONFIG_APM_DO_ENABLE is not set
+# CONFIG_APM_CPU_IDLE is not set
+# CONFIG_APM_DISPLAY_BLANK is not set
+# CONFIG_APM_RTC_IS_GMT is not set
+# CONFIG_APM_ALLOW_INTS is not set
+# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_HOTPLUG_PCI_PCIE is not set
+CONFIG_PCIEAER=y
+# CONFIG_PCI_MSI is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+CONFIG_SCx200=m
+CONFIG_SCx200HR_TIMER=m
+CONFIG_K8_NB=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=m
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=m
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_HOTPLUG_PCI_COMPAQ=m
+# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
+CONFIG_HOTPLUG_PCI_IBM=m
+CONFIG_HOTPLUG_PCI_ACPI=m
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+CONFIG_HOTPLUG_PCI_SHPC=m
+# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=m
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=y
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+CONFIG_MTD_ABSENT=y
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_SC520CDP is not set
+# CONFIG_MTD_TS5500 is not set
+# CONFIG_MTD_AMD76XROM is not set
+# CONFIG_MTD_ICHXROM is not set
+# CONFIG_MTD_ESB2ROM is not set
+# CONFIG_MTD_CK804XROM is not set
+# CONFIG_MTD_SCB2_FLASH is not set
+# CONFIG_MTD_L440GX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+# CONFIG_MTD_PMC551_BUGFIX is not set
+# CONFIG_MTD_PMC551_DEBUG is not set
+CONFIG_MTD_DATAFLASH=m
+CONFIG_MTD_M25P80=m
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_BLOCK2MTD=y
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+CONFIG_MTD_NAND_CAFE=y
+CONFIG_MTD_NAND_CS553X=y
+
+#
+# OneNAND Flash Device Drivers
+#
+CONFIG_MTD_ONENAND=m
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_OTP is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_PC_PCMCIA is not set
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PARPORT_NOT_PC=y
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+CONFIG_PARIDE=m
+CONFIG_PARIDE_PARPORT=y
+
+#
+# Parallel IDE high-level drivers
+#
+CONFIG_PARIDE_PD=m
+CONFIG_PARIDE_PCD=m
+CONFIG_PARIDE_PF=m
+CONFIG_PARIDE_PT=m
+CONFIG_PARIDE_PG=m
+
+#
+# Parallel IDE protocol modules
+#
+CONFIG_PARIDE_ATEN=m
+CONFIG_PARIDE_BPCK=m
+CONFIG_PARIDE_BPCK6=m
+CONFIG_PARIDE_COMM=m
+CONFIG_PARIDE_DSTR=m
+CONFIG_PARIDE_FIT2=m
+CONFIG_PARIDE_FIT3=m
+CONFIG_PARIDE_EPAT=m
+# CONFIG_PARIDE_EPATC8 is not set
+CONFIG_PARIDE_EPIA=m
+CONFIG_PARIDE_FRIQ=m
+CONFIG_PARIDE_FRPW=m
+CONFIG_PARIDE_KBIC=m
+CONFIG_PARIDE_KTTI=m
+CONFIG_PARIDE_ON20=m
+CONFIG_PARIDE_ON26=m
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+# CONFIG_CISS_SCSI_TAPE is not set
+CONFIG_BLK_DEV_DAC960=m
+CONFIG_BLK_DEV_UMEM=m
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_SX8=m
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_SGI_IOC4 is not set
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+# CONFIG_MSI_LAPTOP is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=y
+CONFIG_BLK_DEV_ALI15X3=y
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=y
+CONFIG_BLK_DEV_ATIIXP=y
+CONFIG_BLK_DEV_CMD64X=y
+CONFIG_BLK_DEV_TRIFLEX=y
+CONFIG_BLK_DEV_CY82C693=y
+CONFIG_BLK_DEV_CS5520=y
+CONFIG_BLK_DEV_CS5530=y
+CONFIG_BLK_DEV_CS5535=y
+CONFIG_BLK_DEV_HPT34X=y
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=y
+CONFIG_BLK_DEV_JMICRON=y
+CONFIG_BLK_DEV_SC1200=y
+CONFIG_BLK_DEV_PIIX=y
+CONFIG_BLK_DEV_IT821X=y
+CONFIG_BLK_DEV_NS87415=y
+CONFIG_BLK_DEV_PDC202XX_OLD=y
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=y
+CONFIG_BLK_DEV_SVWKS=y
+CONFIG_BLK_DEV_SIIMAGE=y
+CONFIG_BLK_DEV_SIS5513=y
+CONFIG_BLK_DEV_SLC90E66=y
+CONFIG_BLK_DEV_TRM290=y
+CONFIG_BLK_DEV_VIA82CXXX=y
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_TGT=m
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+
+#
+# SCSI low-level drivers
+#
+CONFIG_ISCSI_TCP=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+CONFIG_AIC7XXX_DEBUG_ENABLE=y
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC7XXX_OLD=m
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=5000
+# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
+CONFIG_AIC79XX_DEBUG_ENABLE=y
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+CONFIG_AIC94XX_DEBUG=y
+CONFIG_SCSI_DPT_I2O=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+# CONFIG_SCSI_OMIT_FLASHPOINT is not set
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_EATA=m
+# CONFIG_SCSI_EATA_TAGGED_QUEUE is not set
+# CONFIG_SCSI_EATA_LINKED_COMMANDS is not set
+CONFIG_SCSI_EATA_MAX_TAGS=16
+CONFIG_SCSI_FUTURE_DOMAIN=m
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+CONFIG_SCSI_LPFC=m
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_NSP32=m
+CONFIG_SCSI_DEBUG=m
+CONFIG_SCSI_SRP=m
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_SVW=y
+CONFIG_ATA_PIIX=y
+CONFIG_SATA_MV=y
+CONFIG_SATA_NV=y
+CONFIG_PDC_ADMA=y
+CONFIG_SATA_QSTOR=y
+CONFIG_SATA_PROMISE=y
+CONFIG_SATA_SX4=y
+CONFIG_SATA_SIL=y
+CONFIG_SATA_SIL24=y
+CONFIG_SATA_SIS=y
+CONFIG_SATA_ULI=y
+CONFIG_SATA_VIA=y
+CONFIG_SATA_VITESSE=y
+CONFIG_SATA_INTEL_COMBINED=y
+CONFIG_PATA_ALI=y
+CONFIG_PATA_AMD=y
+CONFIG_PATA_ARTOP=y
+CONFIG_PATA_ATIIXP=y
+CONFIG_PATA_CMD64X=y
+CONFIG_PATA_CS5520=y
+CONFIG_PATA_CS5530=y
+CONFIG_PATA_CS5535=y
+CONFIG_PATA_CYPRESS=y
+CONFIG_PATA_EFAR=y
+CONFIG_ATA_GENERIC=y
+CONFIG_PATA_HPT366=y
+CONFIG_PATA_HPT37X=y
+CONFIG_PATA_HPT3X2N=y
+CONFIG_PATA_HPT3X3=y
+CONFIG_PATA_IT821X=y
+CONFIG_PATA_JMICRON=y
+CONFIG_PATA_TRIFLEX=y
+CONFIG_PATA_MARVELL=y
+CONFIG_PATA_MPIIX=y
+CONFIG_PATA_OLDPIIX=y
+CONFIG_PATA_NETCELL=y
+CONFIG_PATA_NS87410=y
+CONFIG_PATA_OPTI=y
+CONFIG_PATA_OPTIDMA=y
+# CONFIG_PATA_PCMCIA is not set
+CONFIG_PATA_PDC_OLD=y
+CONFIG_PATA_RADISYS=y
+CONFIG_PATA_RZ1000=y
+CONFIG_PATA_SC1200=y
+CONFIG_PATA_SERVERWORKS=y
+CONFIG_PATA_PDC2027X=y
+CONFIG_PATA_SIL680=y
+CONFIG_PATA_SIS=y
+CONFIG_PATA_VIA=y
+CONFIG_PATA_WINBOND=y
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_IEEE1394=y
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+# CONFIG_IEEE1394_OUI_DB is not set
+CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
+CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
+# CONFIG_IEEE1394_EXPORT_FULL_API is not set
+
+#
+# Device Drivers
+#
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_OHCI1394=y
+
+#
+# Protocol Drivers
+#
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_DV1394=m
+CONFIG_IEEE1394_RAWIO=y
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_NET_SB1000=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_CICADA_PHY=m
+CONFIG_VITESSE_PHY=m
+CONFIG_SMSC_PHY=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_FIXED_PHY=m
+# CONFIG_FIXED_MII_10_FDX is not set
+# CONFIG_FIXED_MII_100_FDX is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+# CONFIG_PCMCIA_XIRCOM is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+# CONFIG_PCNET32_NAPI is not set
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_DGRS=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+CONFIG_SKY2=m
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_IPW2100=m
+# CONFIG_IPW2100_MONITOR is not set
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+# CONFIG_IPW2200_MONITOR is not set
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_PCMCIA_SPECTRUM is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_ATMEL is not set
+# CONFIG_PCMCIA_WL3501 is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_PCI=m
+# CONFIG_HOSTAP_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=m
+
+#
+# Old ISDN4Linux
+#
+# CONFIG_ISDN_I4L is not set
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+CONFIG_CAPI_AVM=y
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+# CONFIG_ISDN_DRV_AVMB1_AVM_CS is not set
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+
+#
+# Active Eicon DIVA Server cards
+#
+CONFIG_CAPI_EICON=y
+CONFIG_ISDN_DIVAS=m
+# CONFIG_ISDN_DIVAS_BRIPCI is not set
+# CONFIG_ISDN_DIVAS_PRIPCI is not set
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+CONFIG_HW_RANDOM_GEODE=m
+CONFIG_HW_RANDOM_VIA=m
+# CONFIG_NVRAM is not set
+CONFIG_RTC=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+CONFIG_AGP=y
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=y
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_I810=m
+CONFIG_DRM_I830=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_VIA=m
+CONFIG_DRM_SAVAGE=m
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+CONFIG_MWAVE=m
+# CONFIG_SCx200_GPIO is not set
+CONFIG_PC8736x_GPIO=m
+CONFIG_NSC_GPIO=m
+CONFIG_CS5535_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+CONFIG_HANGCHECK_TIMER=m
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_TELCLOCK=m
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD756_S4882=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_I810=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_ISA=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+CONFIG_SCx200_ACB=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_STUB=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+CONFIG_I2C_VOODOO3=m
+CONFIG_I2C_PCA_ISA=m
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_HDAPS=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+# CONFIG_VIDEO_BT848_DVB is not set
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+# CONFIG_VIDEO_SAA7134_OSS is not set
+# CONFIG_VIDEO_SAA7134_DVB is not set
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+# CONFIG_VIDEO_CX88_DVB is not set
+CONFIG_VIDEO_CAFE_CCIC=m
+
+#
+# V4L USB devices
+#
+CONFIG_VIDEO_PVRUSB2=m
+# CONFIG_VIDEO_PVRUSB2_29XXX is not set
+# CONFIG_VIDEO_PVRUSB2_24XXX is not set
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+
+#
+# Radio Adapters
+#
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_USB_DSBR=m
+
+#
+# Digital Video Broadcasting Devices
+#
+CONFIG_DVB=y
+CONFIG_DVB_CORE=m
+# CONFIG_DVB_CORE_ATTACH is not set
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+CONFIG_DVB_FE_CUSTOMISE=y
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUNER_MT2060=m
+CONFIG_DVB_TUNER_LGH06XF=m
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_TUA6100=m
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_VIDEOBUF=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+CONFIG_FB_HGA=m
+# CONFIG_FB_HGA_ACCEL is not set
+CONFIG_FB_S1D13XXX=m
+CONFIG_FB_NVIDIA=m
+# CONFIG_FB_NVIDIA_I2C is not set
+CONFIG_FB_RIVA=m
+# CONFIG_FB_RIVA_I2C is not set
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_I810=m
+# CONFIG_FB_I810_GTF is not set
+CONFIG_FB_INTEL=m
+# CONFIG_FB_INTEL_DEBUG is not set
+CONFIG_FB_INTEL_I2C=y
+CONFIG_FB_MATROX=m
+# CONFIG_FB_MATROX_MILLENIUM is not set
+# CONFIG_FB_MATROX_MYSTIQUE is not set
+# CONFIG_FB_MATROX_G is not set
+CONFIG_FB_MATROX_I2C=m
+# CONFIG_FB_MATROX_MULTIHEAD is not set
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY=m
+# CONFIG_FB_ATY_CT is not set
+# CONFIG_FB_ATY_GX is not set
+CONFIG_FB_SAVAGE=m
+# CONFIG_FB_SAVAGE_I2C is not set
+# CONFIG_FB_SAVAGE_ACCEL is not set
+CONFIG_FB_SIS=m
+# CONFIG_FB_SIS_300 is not set
+# CONFIG_FB_SIS_315 is not set
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+# CONFIG_FB_3DFX_ACCEL is not set
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_CYBLA=m
+CONFIG_FB_TRIDENT=m
+# CONFIG_FB_TRIDENT_ACCEL is not set
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_GX=m
+# CONFIG_FB_GEODE_GX_SET_FBSIZE is not set
+CONFIG_FB_GEODE_GX1=m
+CONFIG_FB_VIRTUAL=m
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_RTCTIMER=m
+CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=y
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+# CONFIG_SND_FM801_TEA575X_BOOL is not set
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=y
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=y
+CONFIG_SOUND_BT878=m
+CONFIG_SOUND_ES1371=m
+CONFIG_SOUND_ICH=m
+CONFIG_SOUND_TRIDENT=m
+CONFIG_SOUND_MSNDCLAS=m
+CONFIG_MSNDCLAS_INIT_FILE="/etc/sound/msndinit.bin"
+CONFIG_MSNDCLAS_PERM_FILE="/etc/sound/msndperm.bin"
+CONFIG_SOUND_MSNDPIN=m
+CONFIG_MSNDPIN_INIT_FILE="/etc/sound/pndspini.bin"
+CONFIG_MSNDPIN_PERM_FILE="/etc/sound/pndsperm.bin"
+CONFIG_SOUND_VIA82CXXX=m
+# CONFIG_MIDI_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+CONFIG_SOUND_CS4232=m
+CONFIG_SOUND_SSCAPE=m
+CONFIG_SOUND_VMIDI=m
+CONFIG_SOUND_TRIX=m
+CONFIG_SOUND_MSS=m
+CONFIG_SOUND_MPU401=m
+CONFIG_SOUND_PAS=m
+CONFIG_SOUND_PSS=m
+# CONFIG_PSS_MIXER is not set
+CONFIG_SOUND_SB=m
+CONFIG_SOUND_YM3812=m
+CONFIG_SOUND_UART6850=m
+CONFIG_SOUND_AEDSP16=m
+# CONFIG_SC6600 is not set
+# CONFIG_AEDSP16_MSS is not set
+# CONFIG_AEDSP16_SBPRO is not set
+# CONFIG_AEDSP16_MPU401 is not set
+CONFIG_SOUND_TVMIXER=m
+CONFIG_SOUND_KAHLUA=m
+CONFIG_AC97_BUS=y
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+CONFIG_USB_ISP116X_HCD=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_U132_HCD is not set
+CONFIG_USB_SL811_HCD=y
+# CONFIG_USB_SL811_CS is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT_POWERBOOK=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+CONFIG_LOGITECH_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_AIPTEK=m
+CONFIG_USB_WACOM=m
+CONFIG_USB_ACECAD=m
+CONFIG_USB_KBTAB=m
+CONFIG_USB_POWERMATE=m
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
+CONFIG_USB_TOUCHSCREEN_ETURBO=y
+CONFIG_USB_TOUCHSCREEN_GUNZE=y
+CONFIG_USB_TOUCHSCREEN_DMC_TSC10=y
+CONFIG_USB_YEALINK=m
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+CONFIG_USB_ATI_REMOTE2=m
+CONFIG_USB_KEYSPAN_REMOTE=m
+CONFIG_USB_APPLETOUCH=m
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_TEST=m
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_TIFM_SD=m
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+
+#
+# InfiniBand support
+#
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_USER_MAD=m
+CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_INFINIBAND_ADDR_TRANS=y
+CONFIG_INFINIBAND_MTHCA=m
+CONFIG_INFINIBAND_MTHCA_DEBUG=y
+CONFIG_INFINIBAND_AMSO1100=m
+# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB=m
+CONFIG_INFINIBAND_IPOIB_DEBUG=y
+# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+CONFIG_INFINIBAND_SRP=m
+CONFIG_INFINIBAND_ISER=m
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+CONFIG_EDAC=m
+
+#
+# Reporting subsystems
+#
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_MM_EDAC=m
+CONFIG_EDAC_AMD76X=m
+CONFIG_EDAC_E7XXX=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82875P=m
+CONFIG_EDAC_I82860=m
+CONFIG_EDAC_R82600=m
+CONFIG_EDAC_POLL=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# DMA Engine support
+#
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+CONFIG_VXFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+CONFIG_RXRPC=m
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+CONFIG_DLM=m
+CONFIG_DLM_TCP=y
+# CONFIG_DLM_SCTP is not set
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-x86-2.6.20/netvista/.mtn2git_empty b/packages/linux/linux-x86-2.6.20/netvista/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-x86-2.6.20/netvista/.mtn2git_empty
diff --git a/packages/linux/linux-x86-2.6.20/netvista/defconfig b/packages/linux/linux-x86-2.6.20/netvista/defconfig
new file mode 100644
index 0000000000..4db3370642
--- /dev/null
+++ b/packages/linux/linux-x86-2.6.20/netvista/defconfig
@@ -0,0 +1,1720 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Thu Apr 5 12:46:55 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+# CONFIG_SMP is not set
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+CONFIG_M586=y
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_XADD=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_F00F_BUG=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_ALIGNMENT_16=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_HPET_TIMER=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_X86_UP_APIC is not set
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_COMPAT_VDSO=y
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_SLEEP_PROC_FS=y
+# CONFIG_ACPI_SLEEP_PROC_SLEEP is not set
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+# CONFIG_ACPI_HOTKEY is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+CONFIG_ACPI_IBM=m
+# CONFIG_ACPI_IBM_DOCK is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+
+#
+# APM (Advanced Power Management) BIOS Support
+#
+CONFIG_APM=y
+CONFIG_APM_IGNORE_USER_SUSPEND=y
+CONFIG_APM_DO_ENABLE=y
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+# CONFIG_APM_RTC_IS_GMT is not set
+CONFIG_APM_ALLOW_INTS=y
+# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=y
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV_FD=y
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_MSI_LAPTOP is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CS5535 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_IEEE1394=y
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+# CONFIG_IEEE1394_OUI_DB is not set
+# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
+# CONFIG_IEEE1394_EXPORT_FULL_API is not set
+
+#
+# Device Drivers
+#
+
+#
+# Texas Instruments PCILynx requires I2C
+#
+CONFIG_IEEE1394_OHCI1394=y
+
+#
+# Protocol Drivers
+#
+# CONFIG_IEEE1394_VIDEO1394 is not set
+# CONFIG_IEEE1394_SBP2 is not set
+# CONFIG_IEEE1394_ETH1394 is not set
+# CONFIG_IEEE1394_DV1394 is not set
+CONFIG_IEEE1394_RAWIO=y
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+CONFIG_TULIP_MMIO=y
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+# CONFIG_PCNET32_NAPI is not set
+CONFIG_AMD8111_ETH=m
+CONFIG_AMD8111E_NAPI=y
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_DGRS=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+CONFIG_ATMEL=m
+# CONFIG_PCI_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=800
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=600
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=m
+CONFIG_INPUT_TSDEV_SCREEN_X=800
+CONFIG_INPUT_TSDEV_SCREEN_Y=600
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+CONFIG_RTC=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+CONFIG_AGP=y
+# CONFIG_AGP_ALI is not set
+# CONFIG_AGP_ATI is not set
+# CONFIG_AGP_AMD is not set
+# CONFIG_AGP_AMD64 is not set
+CONFIG_AGP_INTEL=y
+# CONFIG_AGP_NVIDIA is not set
+# CONFIG_AGP_SIS is not set
+# CONFIG_AGP_SWORKS is not set
+# CONFIG_AGP_VIA is not set
+# CONFIG_AGP_EFFICEON is not set
+CONFIG_DRM=y
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_I810 is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_K8TEMP is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=y
+CONFIG_FB_VESA=y
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_RTCTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+CONFIG_SND_CS5535AUDIO=m
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=m
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+CONFIG_SOUND_SB=m
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_KAHLUA is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+CONFIG_USB_TOUCHSCREEN=m
+CONFIG_USB_TOUCHSCREEN_EGALAX=y
+CONFIG_USB_TOUCHSCREEN_PANJIT=y
+CONFIG_USB_TOUCHSCREEN_3M=y
+CONFIG_USB_TOUCHSCREEN_ITM=y
+CONFIG_USB_TOUCHSCREEN_ETURBO=y
+CONFIG_USB_TOUCHSCREEN_GUNZE=y
+CONFIG_USB_TOUCHSCREEN_DMC_TSC10=y
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_TEST=m
+CONFIG_RTC_DRV_V3020=m
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Instrumentation Support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-x86_2.6.20.bb b/packages/linux/linux-x86_2.6.20.bb
index 5db1563733..969fd55f0e 100644
--- a/packages/linux/linux-x86_2.6.20.bb
+++ b/packages/linux/linux-x86_2.6.20.bb
@@ -1,10 +1,14 @@
DESCRIPTION = "Linux Kernel for x86 compatible machines"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r0"
+PR = "r3"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 "
+
+SRC_URI_append_x86 = "file://i486-defconfig"
+SRC_URI_append_i586-generic = "file://i586-defconfig"
+SRC_URI_append_i686-generic = "file://i686-defconfig"
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://defconfig"
S = "${WORKDIR}/linux-${PV}"
@@ -13,7 +17,24 @@ inherit kernel
COMPATIBLE_HOST = "i.86.*-linux"
KERNEL_IMAGETYPE = "bzImage"
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+do_configure_prepend_x86() {
+ install -m 0644 ${WORKDIR}/i486-defconfig ${S}/.config
}
+do_configure_prepend_i586-generic() {
+ install -m 0644 ${WORKDIR}/i586-defconfig ${S}/.config
+}
+
+do_configure_prepend_i686() {
+ install -m 0644 ${WORKDIR}/i686-defconfig ${S}/.config
+}
+
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/i386/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_populate_staging after do_compile
diff --git a/packages/linux/linux-xxs1500_2.4.21.bb b/packages/linux/linux-xxs1500_2.4.21.bb
index 4754b17046..2775208680 100644
--- a/packages/linux/linux-xxs1500_2.4.21.bb
+++ b/packages/linux/linux-xxs1500_2.4.21.bb
@@ -13,6 +13,8 @@ S = "${WORKDIR}/linux"
inherit kernel
+COMPATIBLE_MACHINE = "xxs1500"
+
PACKAGE_ARCH = "xxs1500"
ARCH = "mips"
KERNEL_OUTPUT = "arch/mips/zboot/images/xxs1500.flash.srec"
diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc
new file mode 100644
index 0000000000..3ded7ec467
--- /dev/null
+++ b/packages/linux/linux.inc
@@ -0,0 +1,79 @@
+DESCRIPTION = "Linux Kernel"
+SECTION = "kernel"
+LICENSE = "GPL"
+
+# These devices need mkimage to generate a kernel image
+DEPENDS_kb9202 = "u-boot-mkimage-openmoko-native"
+DEPENDS_at32stk1000 = "u-boot-mkimage-openmoko-native"
+DEPENDS_atngw100 = "u-boot-mkimage-openmoko-native"
+DEPENDS_at91sam9263ek = "u-boot-mkimage-openmoko-native"
+DEPENDS_sarge-at91 = "u-boot-mkimage-openmoko-native"
+
+inherit kernel
+
+KERNEL_IMAGETYPE_alix = "bzImage"
+KERNEL_IMAGETYPE_progear = "bzImage"
+KERNEL_IMAGETYPE_simpad = "zImage"
+KERNEL_IMAGETYPE_kb9202 = "uImage"
+KERNEL_IMAGETYPE_atngw100 = "uImage"
+KERNEL_IMAGETYPE_at32stk1000 = "uImage"
+KERNEL_IMAGETYPE_at91sam9263ek = "uImage"
+KERNEL_IMAGETYPE_sarge-at91 = "uImage"
+
+# Specify the commandline for you device here:
+
+#boot from mmc
+CMDLINE_at91sam9263ek = "mem=64M console=ttyS0,115200 root=/dev/mmcblk0p1 rootfstype=ext2 rootdelay=5"
+#boot from nfs
+#CMDLINE_at91sam9263ek = "mem=64M console=ttyS0,115200 root=301 root=/dev/nfs nfsroot=172.20.3.1:/data/at91 ip=172.20.0.5:::255.255.0.0"
+
+do_configure_prepend() {
+ echo "" > ${S}/.config
+
+ if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ < '${WORKDIR}/defconfig' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+}
+
+do_install_prepend() {
+ if test -e arch/${ARCH}/boot/Image ; then
+ ln -f arch/${ARCH}/boot/Image arch/${ARCH}/boot/uImage
+ fi
+
+ if test -e arch/${ARCH}/boot/images/uImage ; then
+ ln -f arch/${ARCH}/boot/images/uImage arch/${ARCH}/boot/uImage
+ fi
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz -C ${D} lib
+
+ if test "x${KERNEL_IMAGETYPE}" = "xuImage" ; then
+ ${OBJCOPY} -O binary -R .note -R .comment -S vmlinux linux.bin
+ rm -f linux.bin.gz
+ gzip -9 linux.bin
+ uboot-mkimage -A ${ARCH} -O linux -T kernel -C gzip -a 20008000 -e 20008000 -n "${DISTRO_NAME} Kernel for ${MACHINE}" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin
+ rm -f linux.bin.gz
+ fi
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask prepatch before do_patch after do_unpack
+addtask deploy before do_package after do_install
+
diff --git a/packages/linux/linux/alix/.mtn2git_empty b/packages/linux/linux/alix/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/alix/.mtn2git_empty
diff --git a/packages/linux/linux/alix/defconfig b/packages/linux/linux/alix/defconfig
new file mode 100644
index 0000000000..c1c82931bb
--- /dev/null
+++ b/packages/linux/linux/alix/defconfig
@@ -0,0 +1,1787 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22
+# Tue Aug 7 15:04:11 2007
+#
+CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_X86=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+# CONFIG_AUDITSYSCALL is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+# CONFIG_SMP is not set
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+CONFIG_MGEODE_LX=y
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_X86_XADD=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_USE_3DNOW=y
+CONFIG_X86_TSC=y
+CONFIG_X86_MINIMUM_CPU_MODEL=4
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_UP_APIC=y
+CONFIG_X86_UP_IOAPIC=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+# CONFIG_X86_MCE_P4THERMAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+# CONFIG_VMSPLIT_3G is not set
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_2G_OPT is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_NR_QUICK=1
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+CONFIG_HZ_1000=y
+CONFIG_HZ=1000
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_COMPAT_VDSO is not set
+
+#
+# Power management options (ACPI, APM)
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+
+#
+# ACPI (Advanced Configuration and Power Interface) Support
+#
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_SLEEP_PROC_FS=y
+# CONFIG_ACPI_SLEEP_PROC_SLEEP is not set
+# CONFIG_ACPI_PROCFS is not set
+# CONFIG_ACPI_AC is not set
+# CONFIG_ACPI_BATTERY is not set
+# CONFIG_ACPI_BUTTON is not set
+# CONFIG_ACPI_FAN is not set
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_THERMAL=m
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+CONFIG_ACPI_DEBUG=y
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+# CONFIG_ACPI_SBS is not set
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=m
+# CONFIG_X86_POWERNOW_K6 is not set
+# CONFIG_X86_POWERNOW_K7 is not set
+# CONFIG_X86_POWERNOW_K8 is not set
+CONFIG_X86_GX_SUSPMOD=m
+# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+# CONFIG_X86_SPEEDSTEP_ICH is not set
+# CONFIG_X86_SPEEDSTEP_SMI is not set
+# CONFIG_X86_P4_CLOCKMOD is not set
+# CONFIG_X86_CPUFREQ_NFORCE2 is not set
+# CONFIG_X86_LONGRUN is not set
+# CONFIG_X86_LONGHAUL is not set
+# CONFIG_X86_E_POWERSAVER is not set
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+# CONFIG_X86_SPEEDSTEP_LIB is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+# CONFIG_HT_IRQ is not set
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_IBM_ASM is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_SONY_LAPTOP is not set
+# CONFIG_THINKPAD_ACPI is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+CONFIG_PATA_CS5535=y
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+# CONFIG_SC92031 is not set
+# CONFIG_NET_POCKET is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+# CONFIG_USB_NET_AX8817X is not set
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+# CONFIG_USB_BELKIN is not set
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=y
+# CONFIG_INPUT_WISTRON_BTNS is not set
+# CONFIG_INPUT_ATLAS_BTNS is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_INTEL is not set
+# CONFIG_HW_RANDOM_AMD is not set
+CONFIG_HW_RANDOM_GEODE=y
+# CONFIG_HW_RANDOM_VIA is not set
+# CONFIG_NVRAM is not set
+CONFIG_RTC=y
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+CONFIG_CS5535_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+CONFIG_HPET=y
+# CONFIG_HPET_RTC_IRQ is not set
+CONFIG_HPET_MMAP=y
+CONFIG_HANGCHECK_TIMER=m
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+CONFIG_SCx200_ACB=m
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_K8TEMP is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_CORETEMP is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+CONFIG_SENSORS_W83627HF=m
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_SENSORS_APPLESMC is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_HECUBA is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_LE80578 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_GX=y
+# CONFIG_FB_GEODE_GX_SET_FBSIZE is not set
+# CONFIG_FB_GEODE_GX1 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_RTCTIMER=m
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+CONFIG_SND_CS5535AUDIO=m
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+# CONFIG_EDAC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+# CONFIG_RTC_INTF_PROC is not set
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+# CONFIG_KS0108 is not set
+
+#
+# Virtualization
+#
+# CONFIG_KVM is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+# CONFIG_NCP_FS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+CONFIG_NLS_CODEPAGE_852=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Instrumentation Support
+#
+# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ABLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_CRYPTO_DEV_GEODE=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux/at32stk1000/.mtn2git_empty b/packages/linux/linux/at32stk1000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/at32stk1000/.mtn2git_empty
diff --git a/packages/linux/linux/at32stk1000/defconfig b/packages/linux/linux/at32stk1000/defconfig
new file mode 100644
index 0000000000..290dce50c5
--- /dev/null
+++ b/packages/linux/linux/at32stk1000/defconfig
@@ -0,0 +1,849 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Sat Jun 2 10:40:44 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+# CONFIG_TASK_XACCT is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+CONFIG_BOARD_ATSTK1002=y
+CONFIG_BOARD_ATSTK1000=y
+CONFIG_LOADER_U_BOOT=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+# CONFIG_OWNERSHIP_TRACE is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Bus options
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=m
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux/at91sam9263ek/.mtn2git_empty b/packages/linux/linux/at91sam9263ek/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/at91sam9263ek/.mtn2git_empty
diff --git a/packages/linux/linux/at91sam9263ek/defconfig b/packages/linux/linux/at91sam9263ek/defconfig
new file mode 100644
index 0000000000..c72ab82873
--- /dev/null
+++ b/packages/linux/linux/at91sam9263ek/defconfig
@@ -0,0 +1,1184 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20-rc1
+# Mon Jan 8 16:06:54 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+CONFIG_ARCH_AT91SAM9263=y
+
+#
+# AT91SAM9263 Board Type
+#
+CONFIG_MACH_AT91SAM9263EK=y
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_AT91=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_MULTITHREAD_PROBE is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+# CONFIG_USB_ETH is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_AT91=m
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux/ep93xx/.mtn2git_empty b/packages/linux/linux/ep93xx/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/ep93xx/.mtn2git_empty
diff --git a/packages/linux/linux/ep93xx/defconfig b/packages/linux/linux/ep93xx/defconfig
new file mode 100644
index 0000000000..e42a804b5a
--- /dev/null
+++ b/packages/linux/linux/ep93xx/defconfig
@@ -0,0 +1,1176 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-rc1-git9
+# Sat Jul 15 20:13:41 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_RUNTIME_PHYS_OFFSET=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_RT_MUTEXES=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+CONFIG_CRUNCH=y
+
+#
+# EP93xx Platforms
+#
+CONFIG_MACH_EDB9302=y
+CONFIG_MACH_EDB9315=y
+CONFIG_MACH_EDB9315A=y
+CONFIG_MACH_GESBC9312=y
+# CONFIG_MACH_MICRO9 is not set
+CONFIG_MACH_TS72XX=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+CONFIG_ARM_VIC=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyAM0,57600 root=/dev/nfs ip=bootp"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+CONFIG_FPE_NWFPE_XP=y
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
+CONFIG_INET6_XFRM_MODE_TUNNEL=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_TS7250=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_EP93XX_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+# CONFIG_I2C_EP93XX is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+CONFIG_I2C_DEBUG_CORE=y
+CONFIG_I2C_DEBUG_ALGO=y
+CONFIG_I2C_DEBUG_BUS=y
+CONFIG_I2C_DEBUG_CHIP=y
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+
+#
+# Input core support is needed for USB HID input layer or HIDBP support
+#
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=y
+CONFIG_USB_RTL8150=y
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=y
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_M48T86=y
+CONFIG_RTC_DRV_EP93XX=y
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_DEBUG_SLAB=y
+# CONFIG_DEBUG_SLAB_LEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+CONFIG_DEBUG_SPINLOCK=y
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_WAITQ=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux/kb9202/.mtn2git_empty b/packages/linux/linux/kb9202/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/kb9202/.mtn2git_empty
diff --git a/packages/linux/linux/kb9202/defconfig b/packages/linux/linux/kb9202/defconfig
new file mode 100644
index 0000000000..c16537d9d6
--- /dev/null
+++ b/packages/linux/linux/kb9202/defconfig
@@ -0,0 +1,780 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.13-rc2
+# Sun Aug 14 19:26:59 2005
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+# CONFIG_EXPERIMENTAL is not set
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_SWAP is not set
+# CONFIG_SYSVIPC is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+# CONFIG_KOBJECT_UEVENT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+CONFIG_ARCH_AT91=y
+CONFIG_ARCH_AT91RM9200=y
+
+#
+# AT91RM9200 Implementations
+#
+# CONFIG_ARCH_AT91RM9200DK is not set
+# CONFIG_MACH_AT91RM9200EK is not set
+# CONFIG_MACH_CSB337 is not set
+# CONFIG_MACH_CSB637 is not set
+# CONFIG_MACH_CARMEVA is not set
+CONFIG_MACH_KB9200=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+
+#
+# Bus support
+#
+CONFIG_ISA_DMA_API=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_NO_IDLE_HZ is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x10000000
+CONFIG_ZBOOT_ROM_BSS=0x20040000
+CONFIG_ZBOOT_ROM=y
+CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+CONFIG_DEBUG_DRIVER=y
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=y
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_IP_TCPDIAG is not set
+# CONFIG_IP_TCPDIAG_IPV6 is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_ARM_AT91_ETHER=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_AT91RM9200_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_AT91_SPI is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+CONFIG_USB_STORAGE_DEBUG=y
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+
+#
+# XFS support
+#
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_DEVPTS_FS_XATTR=y
+# CONFIG_DEVPTS_FS_SECURITY is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff --git a/packages/linux/linux/n2100/.mtn2git_empty b/packages/linux/linux/n2100/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/n2100/.mtn2git_empty
diff --git a/packages/linux/linux/n2100/defconfig b/packages/linux/linux/n2100/defconfig
new file mode 100644
index 0000000000..26c07e9c99
--- /dev/null
+++ b/packages/linux/linux/n2100/defconfig
@@ -0,0 +1,1843 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20.2
+# Wed Mar 14 01:43:59 2007
+#
+CONFIG_ARM=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-foonas"
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+CONFIG_ARCH_IOP32X=y
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# IOP32x Implementation Options
+#
+
+#
+# IOP32x Platform Types
+#
+# CONFIG_MACH_GLANTANK is not set
+# CONFIG_ARCH_IQ80321 is not set
+# CONFIG_ARCH_IQ31244 is not set
+CONFIG_MACH_N2100=y
+CONFIG_PLAT_IOP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/mtdblock3 rootfstype=jffs2 rs5c372.probe=0,0x32"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_VLSI_FIR is not set
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0xFF000000
+CONFIG_MTD_PHYSMAP_LEN=0x01000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_NAND_CAFE is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=40960
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+CONFIG_SATA_SIL=y
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_MD_FAULTY is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=y
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+CONFIG_R1000=y
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+CONFIG_SLIP_MODE_SLIP6=y
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_NR_UARTS=1
+CONFIG_SERIAL_8250_RUNTIME_UARTS=1
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
+CONFIG_NVRAM=m
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_IOP3XX=y
+CONFIG_I2C_ISA=m
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+# CONFIG_VIDEO_CX88 is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+
+#
+# V4L USB devices
+#
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_29XXX=y
+CONFIG_VIDEO_PVRUSB2_24XXX=y
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_USBVISION=m
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
+
+#
+# Digital Video Broadcasting Devices
+#
+CONFIG_DVB=y
+CONFIG_DVB_CORE=m
+# CONFIG_DVB_CORE_ATTACH is not set
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+# CONFIG_DVB_B2C2_FLEXCOP is not set
+
+#
+# Supported BT878 Adapters
+#
+
+#
+# Supported Pluto2 Adapters
+#
+# CONFIG_DVB_PLUTO2 is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+# CONFIG_DVB_CX24110 is not set
+# CONFIG_DVB_CX24123 is not set
+CONFIG_DVB_TDA8083=m
+# CONFIG_DVB_MT312 is not set
+# CONFIG_DVB_VES1X93 is not set
+# CONFIG_DVB_S5H1420 is not set
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+# CONFIG_DVB_SP8870 is not set
+# CONFIG_DVB_SP887X is not set
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+# CONFIG_DVB_L64781 is not set
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+# CONFIG_DVB_TDA10021 is not set
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+# CONFIG_DVB_NXT200X is not set
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+# CONFIG_DVB_BCM3510 is not set
+CONFIG_DVB_LGDT330X=m
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUNER_MT2060=m
+CONFIG_DVB_TUNER_LGH06XF=m
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6421 is not set
+# CONFIG_DVB_TUA6100 is not set
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+CONFIG_USB_YEALINK=m
+CONFIG_USB_XPAD=m
+CONFIG_USB_ATI_REMOTE=m
+CONFIG_USB_ATI_REMOTE2=m
+CONFIG_USB_KEYSPAN_REMOTE=m
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+CONFIG_RTC_DRV_RS5C372=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+# CONFIG_XFS_SECURITY is not set
+CONFIG_XFS_POSIX_ACL=y
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux/n2100/n2100-r8169-parity.patch b/packages/linux/linux/n2100/n2100-r8169-parity.patch
new file mode 100644
index 0000000000..aeaeee9ff7
--- /dev/null
+++ b/packages/linux/linux/n2100/n2100-r8169-parity.patch
@@ -0,0 +1,39 @@
+http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=4058/1
+
+From: Lennert Buytenhek
+
+On the n2100, both onboard r8169 ports exhibit PCI parity problems.
+Set the ->broken_parity_status flag for both ports so that the r8169
+drivers knows it should ignore error interrupts.
+
+
+--- linux-2.6.19.orig/arch/arm/mach-iop32x/n2100.c
++++ linux-2.6.19/arch/arm/mach-iop32x/n2100.c
+@@ -123,9 +123,26 @@ static struct hw_pci n2100_pci __initdat
+
+ static int __init n2100_pci_init(void)
+ {
+- if (machine_is_n2100())
++ if (machine_is_n2100()) {
++ int i;
++
+ pci_common_init(&n2100_pci);
+
++ /*
++ * Both r8169 chips on the n2100 exhibit PCI parity
++ * problems. Set the ->broken_parity_status flag for
++ * both ports so that the r8169 driver knows it should
++ * ignore error interrupts.
++ */
++ for (i = 1; i <= 2; i++) {
++ struct pci_dev *dev;
++
++ dev = pci_get_bus_and_slot(0, PCI_DEVFN(i, 0));
++ if (dev != NULL)
++ dev->broken_parity_status = 1;
++ }
++ }
++
+ return 0;
+ }
+
diff --git a/packages/linux/linux/n2100/rtc-rs5c372-n2100.patch b/packages/linux/linux/n2100/rtc-rs5c372-n2100.patch
new file mode 100644
index 0000000000..8849312a44
--- /dev/null
+++ b/packages/linux/linux/n2100/rtc-rs5c372-n2100.patch
@@ -0,0 +1,13 @@
+Autodetect the RTC chip.
+
+--- a/drivers/rtc/rtc-rs5c372.c
++++ b/drivers/rtc/rtc-rs5c372.c
+@@ -16,7 +16,7 @@ #include <linux/bcd.h>
+ #define DRV_VERSION "0.3"
+
+ /* Addresses to scan */
+-static unsigned short normal_i2c[] = { /* 0x32,*/ I2C_CLIENT_END };
++static unsigned short normal_i2c[] = { 0x32, I2C_CLIENT_END };
+
+ /* Insmod parameters */
+ I2C_CLIENT_INSMOD;
diff --git a/packages/linux/linux/progear/progear_bl-r6.patch b/packages/linux/linux/progear/progear_bl-r6.patch
deleted file mode 100644
index 6ac01714b7..0000000000
--- a/packages/linux/linux/progear/progear_bl-r6.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Add control of LCD backlight for Frontpath ProGear HX1050+.
-Patch is based on http://downloads.sf.net/progear/progear-lcd-0.2.tar.gz
-driver by M Schacht.
-
-Signed-Off-By: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
----
-Patch follow kernel version 2.6.20
-
- Kconfig | 8 +++
- Makefile | 1
- progear_bl.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 163 insertions(+)
-
-Index: git/drivers/video/backlight/Kconfig
-===================================================================
---- git.orig/drivers/video/backlight/Kconfig 2006-12-29 17:31:36.511043439 +0100
-+++ git/drivers/video/backlight/Kconfig 2007-02-07 08:57:31.020095845 +0100
-@@ -66,3 +66,11 @@
- If you have a HP Jornada 680, say y to enable the
- backlight driver.
-
-+config BACKLIGHT_PROGEAR
-+ tristate "Frontpath ProGear Backlight Driver"
-+ depends on BACKLIGHT_DEVICE && PCI && X86
-+ default y
-+ help
-+ If you have a Frontpath ProGear say Y to enable the
-+ backlight driver.
-+
-Index: git/drivers/video/backlight/progear_bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/video/backlight/progear_bl.c 2007-02-07 08:55:46.813993140 +0100
-@@ -0,0 +1,154 @@
-+/*
-+ * Backlight Driver for Frontpath ProGear HX1050+
-+ *
-+ * Copyright (c) 2006 Marcin Juszkiewicz
-+ *
-+ * Based on Progear LCD driver by M Schacht
-+ * <mschacht at alumni dot washington dot edu>
-+ *
-+ * Based on Sharp's Corgi Backlight Driver
-+ * Based on Backlight Driver for HP Jornada 680
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/fb.h>
-+#include <linux/backlight.h>
-+#include <linux/pci.h>
-+#include <asm/uaccess.h>
-+
-+#define PMU_LPCR 0xB0
-+#define SB_MPS1 0x61
-+#define HW_LEVEL_MAX 0x77
-+#define HW_LEVEL_MIN 0x4f
-+
-+static struct pci_dev *pmu_dev = NULL;
-+static struct pci_dev *sb_dev = NULL;
-+
-+static int progearbl_set_intensity(struct backlight_device *bd)
-+{
-+ int intensity = bd->props->brightness;
-+
-+ if (bd->props->power != FB_BLANK_UNBLANK)
-+ intensity = 0;
-+ if (bd->props->fb_blank != FB_BLANK_UNBLANK)
-+ intensity = 0;
-+
-+ pci_write_config_byte(pmu_dev, PMU_LPCR, intensity + HW_LEVEL_MIN);
-+
-+ return 0;
-+}
-+
-+static int progearbl_get_intensity(struct backlight_device *bd)
-+{
-+ u8 intensity;
-+ pci_read_config_byte(pmu_dev, PMU_LPCR, &intensity);
-+
-+ return intensity - HW_LEVEL_MIN;
-+}
-+
-+static struct backlight_properties progearbl_data = {
-+ .owner = THIS_MODULE,
-+ .get_brightness = progearbl_get_intensity,
-+ .update_status = progearbl_set_intensity,
-+};
-+
-+static int progearbl_probe(struct platform_device *pdev)
-+{
-+ u8 temp;
-+ struct backlight_device *progear_backlight_device;
-+
-+ pmu_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, 0);
-+ if (!pmu_dev) {
-+ printk("ALI M7101 PMU not found.\n");
-+ return -ENODEV;
-+ }
-+
-+ sb_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, 0);
-+ if (!sb_dev) {
-+ printk("ALI 1533 SB not found.\n");
-+ pci_dev_put(pmu_dev);
-+ return -ENODEV;
-+ }
-+
-+ /* Set SB_MPS1 to enable brightness control. */
-+ pci_read_config_byte(sb_dev, SB_MPS1, &temp);
-+ pci_write_config_byte(sb_dev, SB_MPS1, temp | 0x20);
-+
-+ progear_backlight_device = backlight_device_register("progear-bl",
-+ &pdev->dev, NULL,
-+ &progearbl_data);
-+ if (IS_ERR(progear_backlight_device))
-+ return PTR_ERR(progear_backlight_device);
-+
-+ platform_set_drvdata(pdev, progear_backlight_device);
-+
-+ progearbl_data.power = FB_BLANK_UNBLANK;
-+ progearbl_data.brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
-+ progearbl_data.max_brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
-+ progearbl_set_intensity(progear_backlight_device);
-+
-+ return 0;
-+}
-+
-+static int progearbl_remove(struct platform_device *pdev)
-+{
-+ struct backlight_device *bd = platform_get_drvdata(pdev);
-+ backlight_device_unregister(bd);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver progearbl_driver = {
-+ .probe = progearbl_probe,
-+ .remove = progearbl_remove,
-+ .driver = {
-+ .name = "progear-bl",
-+ },
-+};
-+
-+static struct platform_device *progearbl_device;
-+
-+static int __init progearbl_init(void)
-+{
-+ int ret = platform_driver_register(&progearbl_driver);
-+
-+ if (!ret) {
-+ progearbl_device = platform_device_alloc("progear-bl", -1);
-+ if (!progearbl_device)
-+ return -ENOMEM;
-+
-+ ret = platform_device_add(progearbl_device);
-+
-+ if (ret) {
-+ platform_device_put(progearbl_device);
-+ platform_driver_unregister(&progearbl_driver);
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+static void __exit progearbl_exit(void)
-+{
-+ pci_dev_put(pmu_dev);
-+ pci_dev_put(sb_dev);
-+
-+ platform_device_unregister(progearbl_device);
-+ platform_driver_unregister(&progearbl_driver);
-+}
-+
-+module_init(progearbl_init);
-+module_exit(progearbl_exit);
-+
-+MODULE_AUTHOR("Marcin Juszkiewicz <linux@hrw.one.pl>");
-+MODULE_DESCRIPTION("ProGear Backlight Driver");
-+MODULE_LICENSE("GPL");
-Index: git/drivers/video/backlight/Makefile
-===================================================================
---- git.orig/drivers/video/backlight/Makefile 2006-12-29 17:31:36.511043439 +0100
-+++ git/drivers/video/backlight/Makefile 2007-02-06 21:34:54.503712923 +0100
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
- obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
- obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
-+obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
diff --git a/packages/linux/linux/sarge-at91/.mtn2git_empty b/packages/linux/linux/sarge-at91/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/sarge-at91/.mtn2git_empty
diff --git a/packages/linux/linux/sarge-at91/2.6.21-sarge-kernel.patch b/packages/linux/linux/sarge-at91/2.6.21-sarge-kernel.patch
new file mode 100644
index 0000000000..7b5f408c37
--- /dev/null
+++ b/packages/linux/linux/sarge-at91/2.6.21-sarge-kernel.patch
@@ -0,0 +1,238 @@
+diff -Nurp ../linux-2.6.21.4/arch/arm/boot/compressed/head-at91rm9200.S ./arch/arm/boot/compressed/head-at91rm9200.S
+--- ../linux-2.6.21.4/arch/arm/boot/compressed/head-at91rm9200.S 2007-06-12 22:29:12.000000000 +0200
++++ ./arch/arm/boot/compressed/head-at91rm9200.S 2007-06-12 02:57:07.000000000 +0200
+@@ -73,6 +73,12 @@
+ cmp r7, r3
+ beq 99f
+
++ @ AT91RM9200
++ mov r3, #(MACH_TYPE_AT91RM9200 & 0xff)
++ orr r3, r3, #(MACH_TYPE_AT91RM9200 & 0xff00)
++ cmp r7, r3
++ beq 99f
++
+ @ Unknown board, use the AT91RM9200DK board
+ @ mov r7, #MACH_TYPE_AT91RM9200
+ mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
+diff -Nurp ../linux-2.6.21.4/arch/arm/mach-at91/board-sarge.c ./arch/arm/mach-at91/board-sarge.c
+--- ../linux-2.6.21.4/arch/arm/mach-at91/board-sarge.c 1970-01-01 01:00:00.000000000 +0100
++++ ./arch/arm/mach-at91/board-sarge.c 2007-06-12 02:57:07.000000000 +0200
+@@ -0,0 +1,190 @@
++/*
++ * linux/arch/arm/mach-at91/board-sarge.c
++ *
++ * Copyright (C) 2007 BlackMesaEast staff
++ *
++ * mcgregor@blackmesaeast.com.pl
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91rm9200_mc.h>
++
++#include "generic.h"
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 3 = USART0 .. USART3
++ * 4 = DBGU
++ */
++static struct at91_uart_config __initdata sarge_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 5,
++ .tty_map = { 4, 1, 0, 2, 3 } /* ttyS0, ..., ttyS4 */
++};
++
++static void __init sarge_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91rm9200_initialize(18432000, AT91RM9200_PQFP);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&sarge_uart_config);
++}
++
++static void __init sarge_init_irq(void)
++{
++ at91rm9200_init_interrupts(NULL);
++}
++
++static struct at91_eth_data __initdata sarge_eth_data = {
++ .phy_irq_pin = AT91_PIN_PB1,
++ .is_rmii = 0,
++};
++
++static struct at91_usbh_data __initdata sarge_usbh_data = {
++ .ports = 1,
++};
++
++static struct at91_udc_data __initdata sarge_udc_data = {
++ .vbus_pin = AT91_PIN_PA20,
++ .pullup_pin = AT91_PIN_PA21,
++};
++
++static struct at91_cf_data __initdata sarge_cf_data = {
++ .det_pin = AT91_PIN_PB24,
++ .rst_pin = AT91_PIN_PB23,
++ // .irq_pin = ... not connected
++ // .vcc_pin = ... always powered
++};
++
++static struct at91_mmc_data __initdata sarge_mmc_data = {
++ .det_pin = AT91_PIN_PB0,
++ .slot_b = 0,
++ .wire4 = 1,
++ .wp_pin = AT91_PIN_PB2,
++};
++
++
++
++static struct spi_board_info sarge_spi_devices[] = {
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ }
++};
++
++static struct mtd_partition __initdata sarge_nand_partition[] = {
++ {
++ .name = "NAND Partition 1",
++ .offset = 0,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct mtd_partition *nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(sarge_nand_partition);
++ return sarge_nand_partition;
++}
++
++static struct at91_nand_data __initdata sarge_nand_data = {
++ .ale = 22,
++ .cle = 21,
++ .det_pin = AT91_PIN_PB22,
++ .rdy_pin = AT91_PIN_PB22,
++ // .enable_pin = ... not there
++ .partition_info = nand_partitions,
++};
++
++#define SARGE_FLASH_BASE AT91_CHIPSELECT_0
++#define SARGE_FLASH_SIZE 0x200000
++
++static struct physmap_flash_data sarge_flash_data = {
++ .width = 2,
++};
++
++static struct resource sarge_flash_resource = {
++ .start = SARGE_FLASH_BASE,
++ .end = SARGE_FLASH_BASE + SARGE_FLASH_SIZE - 1,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device sarge_flash = {
++ .name = "physmap-flash",
++ .id = 0,
++ .dev = {
++ .platform_data = &sarge_flash_data,
++ },
++ .resource = &sarge_flash_resource,
++ .num_resources = 1,
++};
++
++static void __init sarge_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* Ethernet */
++ at91_add_device_eth(&sarge_eth_data);
++ /* USB Host */
++ at91_add_device_usbh(&sarge_usbh_data);
++ /* USB Device */
++ at91_add_device_udc(&sarge_udc_data);
++ at91_set_multi_drive(sarge_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */
++ /* Compact Flash */
++ at91_add_device_cf(&sarge_cf_data);
++ /* I2C */
++ at91_add_device_i2c();
++ /* SPI */
++ at91_add_device_spi(sarge_spi_devices, ARRAY_SIZE(sarge_spi_devices));
++
++ /* MMC */
++ at91_add_device_mmc(0, &sarge_mmc_data);
++ /* NAND */
++ at91_add_device_nand(&sarge_nand_data);
++ /* NOR Flash */
++ platform_device_register(&sarge_flash);
++}
++MACHINE_START(AT91RM9200, "Sarge AT91RM9200 SBC")
++ /* Maintainer: mcgregor@blackmesaeast.com.pl */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91rm9200_timer,
++ .map_io = sarge_map_io,
++ .init_irq = sarge_init_irq,
++ .init_machine = sarge_board_init,
++MACHINE_END
+diff -Nurp ../linux-2.6.21.4/arch/arm/mach-at91/Kconfig ./arch/arm/mach-at91/Kconfig
+--- ../linux-2.6.21.4/arch/arm/mach-at91/Kconfig 2007-06-12 22:29:12.000000000 +0200
++++ ./arch/arm/mach-at91/Kconfig 2007-06-12 03:00:28.000000000 +0200
+@@ -90,6 +90,13 @@ config MACH_KAFA
+ help
+ Select this if you are using Sperry-Sun's KAFA board.
+
++config MACH_SARGE
++ bool "Black Mesa East Sarge SBC"
++ depends on ARCH_AT91RM9200
++ help
++ Select this if you are using BlackMesaEast Sarge PCB
++ <http://blackmesaeast.com.pl>
++
+ config MACH_CHUB
+ bool "Promwad Chub board"
+ depends on ARCH_AT91RM9200
+diff -Nurp ../linux-2.6.21.4/arch/arm/mach-at91/Makefile ./arch/arm/mach-at91/Makefile
+--- ../linux-2.6.21.4/arch/arm/mach-at91/Makefile 2007-06-12 22:29:12.000000000 +0200
++++ ./arch/arm/mach-at91/Makefile 2007-06-12 03:00:47.000000000 +0200
+@@ -29,6 +29,7 @@ obj-$(CONFIG_MACH_KB9200) += board-kb920
+ obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
+ obj-$(CONFIG_MACH_KAFA) += board-kafa.o
+ obj-$(CONFIG_MACH_CHUB) += board-chub.o
++obj-$(CONFIG_MACH_SARGE) += board-sarge.o
+
+ # AT91SAM9260 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
diff --git a/packages/linux/linux/sarge-at91/2.6.21-sarge-mmc.patch b/packages/linux/linux/sarge-at91/2.6.21-sarge-mmc.patch
new file mode 100644
index 0000000000..01bbaeb73e
--- /dev/null
+++ b/packages/linux/linux/sarge-at91/2.6.21-sarge-mmc.patch
@@ -0,0 +1,87 @@
+diff -Nurp ../linux-2.6.21.4/drivers/mmc/at91_mci.c ./drivers/mmc/at91_mci.c
+--- ../linux-2.6.21.4/drivers/mmc/at91_mci.c 2007-06-12 22:29:12.000000000 +0200
++++ ./drivers/mmc/at91_mci.c 2007-06-12 03:52:55.000000000 +0200
+@@ -421,8 +421,11 @@ static unsigned int at91_mci_send_comman
+ if (cmd->opcode == MMC_STOP_TRANSMISSION)
+ cmdr |= AT91_MCI_TRCMD_STOP;
+
+- if (host->bus_mode == MMC_BUSMODE_OPENDRAIN)
+- cmdr |= AT91_MCI_OPDCMD;
++ //if (host->bus_mode == MMC_BUSMODE_OPENDRAIN)
++ // cmdr |= AT91_MCI_OPDCMD;
++
++ if (!(1/**machine_is_sarge*/) && host->bus_mode == MMC_BUSMODE_OPENDRAIN)
++ cmdr |= AT91_MCI_OPDCMD;
+
+ /*
+ * Set the arguments and send the command
+@@ -739,7 +742,13 @@ static irqreturn_t at91_mci_irq(int irq,
+ at91_mci_write(host, AT91_MCI_IDR, 0xffffffff);
+ at91mci_completed_command(host);
+ } else
++// at91_mci_write(host, AT91_MCI_IDR, int_status);
++ {
++ if (1 /*machine_is_sarge()*/)
++ at91_mci_write(host, AT91_MCI_IDR, (int_status & ~AT91_MCI_TXRDY) );
++ else
+ at91_mci_write(host, AT91_MCI_IDR, int_status);
++ }
+
+ return IRQ_HANDLED;
+ }
+diff -Nurp ../linux-2.6.21.4/drivers/mmc/mmc_block.c ./drivers/mmc/mmc_block.c
+--- ../linux-2.6.21.4/drivers/mmc/mmc_block.c 2007-06-07 23:27:31.000000000 +0200
++++ ./drivers/mmc/mmc_block.c 2007-06-12 04:19:36.000000000 +0200
+@@ -256,10 +256,24 @@ static int mmc_blk_issue_rq(struct mmc_q
+ * this rule as they support querying the number of
+ * successfully written sectors.
+ */
+- if (rq_data_dir(req) != READ &&
++// if (rq_data_dir(req) != READ &&
++ if ((1/**machine_is_sarge*/))
++ {
++ if (rq_data_dir(req) != READ)
++ brq.data.blocks = 1;
++ }
++ else if (rq_data_dir(req) != READ &&
++
+ !(card->host->caps & MMC_CAP_MULTIWRITE) &&
+ !mmc_card_sd(card))
+ brq.data.blocks = 1;
++
++
++
++
++
++
++
+
+ if (brq.data.blocks > 1) {
+ brq.data.flags |= MMC_DATA_MULTI;
+diff -Nurp ../linux-2.6.21.4/drivers/mmc/mmc.c ./drivers/mmc/mmc.c
+--- ../linux-2.6.21.4/drivers/mmc/mmc.c 2007-06-07 23:27:31.000000000 +0200
++++ ./drivers/mmc/mmc.c 2007-06-12 04:10:05.000000000 +0200
+@@ -1500,12 +1500,22 @@ static void mmc_setup(struct mmc_host *h
+ mmc_set_ios(host);
+
+ mmc_read_csds(host);
+-
++ /*
+ if (host->mode == MMC_MODE_SD) {
+ mmc_read_scrs(host);
+ mmc_read_switch_caps(host);
+ } else
+ mmc_process_ext_csds(host);
++ */
++
++ if (!(1/*machine_is_sarge*/))
++ {
++ if (host->mode == MMC_MODE_SD) {
++ mmc_read_scrs(host);
++ mmc_read_switch_caps(host);
++ } else
++ mmc_process_ext_csds(host);
++ }
+ }
+
+
diff --git a/packages/linux/linux/sarge-at91/2.6.21-sarge-phy.patch b/packages/linux/linux/sarge-at91/2.6.21-sarge-phy.patch
new file mode 100644
index 0000000000..25ce15eb94
--- /dev/null
+++ b/packages/linux/linux/sarge-at91/2.6.21-sarge-phy.patch
@@ -0,0 +1,400 @@
+diff -Nurp ../linux-2.6.21.4/drivers/net/arm/at91_ether.c ./drivers/net/arm/at91_ether.c
+--- ../linux-2.6.21.4/drivers/net/arm/at91_ether.c 2007-06-12 22:29:12.000000000 +0200
++++ ./drivers/net/arm/at91_ether.c 2007-06-12 03:11:16.000000000 +0200
+@@ -235,6 +235,11 @@ static irqreturn_t at91ether_phy_interru
+ if (!(phy & (1 << 7)))
+ goto done;
+ }
++ else if (lp->phy_type == MII_STE100P_ID) {
++ read_phy(lp->phy_address, MII_STE100P_XCSIIS_REG, &phy); /* ack interrupt in STE100P PHY */
++ if (!(phy & 0x007F))
++ goto done;
++ }
+
+ update_linkspeed(dev, 0);
+
+@@ -303,6 +308,11 @@ static void enable_phyirq(struct net_dev
+ dsintr = dsintr | 0x3; /* set bits 0,1 */
+ write_phy(lp->phy_address, MII_DPMICR_REG, dsintr);
+ }
++ else if (lp->phy_type == MII_STE100P_ID) { /* for STE100P PHY */
++ read_phy(lp->phy_address, MII_STE100P_XIE_REG, &dsintr);
++
++ dsintr |= 0x007F;
++ }
+
+ disable_mdi();
+ spin_unlock_irq(&lp->lock);
+@@ -359,6 +369,11 @@ static void disable_phyirq(struct net_de
+ dsintr = dsintr & ~0x3c; /* clear bits 2..5 */
+ write_phy(lp->phy_address, MII_DPMISR_REG, dsintr);
+ }
++ else if (lp->phy_type == MII_STE100P_ID) { /* for STE100P PHY */
++ read_phy(lp->phy_address, MII_STE100P_XIE_REG, &dsintr);
++ dsintr &= 0xFF80;
++ write_phy(lp->phy_address, MII_STE100P_XIE_REG, dsintr);
++ }
+
+ disable_mdi();
+ spin_unlock_irq(&lp->lock);
+@@ -1117,6 +1132,8 @@ static int __init at91ether_setup(unsign
+ printk(KERN_INFO "%s: Teridian 78Q21x3 PHY\n", dev->name);
+ else if (phy_type == MII_LAN83C185_ID)
+ printk(KERN_INFO "%s: SMSC LAN83C185 PHY\n", dev->name);
++ else if (phy_type == MII_STE100P_ID)
++ printk(KERN_INFO "%s: STE100P PHY\n", dev->name);
+
+ return 0;
+ }
+@@ -1159,6 +1176,7 @@ static int __init at91ether_probe(struct
+ case MII_KS8721_ID: /* Micrel KS8721: PHY_ID1 = 0x22, PHY_ID2 = 0x1610 */
+ case MII_T78Q21x3_ID: /* Teridian 78Q21x3: PHY_ID1 = 0x0E, PHY_ID2 = 7237 */
+ case MII_LAN83C185_ID: /* SMSC LAN83C185: PHY_ID1 = 0x0007, PHY_ID2 = 0xC0A1 */
++ case MII_STE100P_ID: /* STE100P: PHY_ID1 = 0x1C04, PHY_ID2 = 0x0000 */
+ detected = at91ether_setup(phy_id, phy_address, pdev, ether_clk);
+ break;
+ }
+diff -Nurp ../linux-2.6.21.4/drivers/net/arm/at91_ether.h ./drivers/net/arm/at91_ether.h
+--- ../linux-2.6.21.4/drivers/net/arm/at91_ether.h 2007-06-12 22:29:12.000000000 +0200
++++ ./drivers/net/arm/at91_ether.h 2007-06-12 03:07:54.000000000 +0200
+@@ -29,6 +29,15 @@
+ #define MII_ISINTS_REG 19
+ #define MII_LEDCTRL_REG 20
+
++/* STE100P specific registers */
++#define MII_STE100P_XCSIIS_REG 0x11
++#define MII_STE100P_XIE_REG 0x12
++#define MII_XCR_REG 0x00
++#define MII_XCR_ISOLATE 0x0400
++
++/* STE100P PHY */
++#define MII_STE100P_ID 0x1c040010
++
+ /* Realtek RTL8201 PHY */
+ #define MII_RTL8201_ID 0x00008200
+
+diff -Nurp ../linux-2.6.21.4/drivers/net/phy/Kconfig ./drivers/net/phy/Kconfig
+--- ../linux-2.6.21.4/drivers/net/phy/Kconfig 2007-06-07 23:27:31.000000000 +0200
++++ ./drivers/net/phy/Kconfig 2007-06-12 03:12:16.000000000 +0200
+@@ -62,6 +62,12 @@ config BROADCOM_PHY
+ ---help---
+ Currently supports the BCM5411, BCM5421 and BCM5461 PHYs.
+
++config STE100P_PHY
++ tristate "Drivers for the STE100P PHY"
++ depends on PHYLIB
++ ---help---
++ Currently supports the ste100p
++
+ config FIXED_PHY
+ tristate "Drivers for PHY emulation on fixed speed/link"
+ depends on PHYLIB
+diff -Nurp ../linux-2.6.21.4/drivers/net/phy/Makefile ./drivers/net/phy/Makefile
+--- ../linux-2.6.21.4/drivers/net/phy/Makefile 2007-06-07 23:27:31.000000000 +0200
++++ ./drivers/net/phy/Makefile 2007-06-12 03:12:29.000000000 +0200
+@@ -12,3 +12,4 @@ obj-$(CONFIG_SMSC_PHY) += smsc.o
+ obj-$(CONFIG_VITESSE_PHY) += vitesse.o
+ obj-$(CONFIG_BROADCOM_PHY) += broadcom.o
+ obj-$(CONFIG_FIXED_PHY) += fixed.o
++obj-$(CONFIG_STE100P_PHY) += ste100p.o
+diff -Nurp ../linux-2.6.21.4/drivers/net/phy/ste100p.c ./drivers/net/phy/ste100p.c
+--- ../linux-2.6.21.4/drivers/net/phy/ste100p.c 1970-01-01 01:00:00.000000000 +0100
++++ ./drivers/net/phy/ste100p.c 2007-06-12 02:52:31.000000000 +0200
+@@ -0,0 +1,297 @@
++/*
++ * drivers/net/phy/ste100p.c
++ *
++ * Driver for STE100P PHYs
++ *
++ * Author: Grzegorz Rajtar mcgregor@blackmesaeast.com.pl
++ *
++ * Copyright (c) 2007 Black Mesa East
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/unistd.h>
++#include <linux/slab.h>
++#include <linux/interrupt.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/spinlock.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/mii.h>
++#include <linux/ethtool.h>
++#include <linux/phy.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++
++/* Control register and bitmasks*/
++#define MII_STE100P_XCR_REG 0x00
++#define MII_STE100P_XCR_RESET 1 << 15
++#define MII_STE100P_XCR_LOOPBACK 1 << 14
++#define MII_STE100P_XCR_SPEED 1 << 13
++#define MII_STE100P_XCR_AN 1 << 12
++#define MII_STE100P_XCR_PWRDN 1 << 11
++#define MII_STE100P_XCR_ISOLATE 1 << 10
++#define MII_STE100P_XCR_RSTRT_AN 1 << 9
++#define MII_STE100P_XCR_FULL_DUP 1 << 8
++#define MII_STE100P_XCR_COLLEN 1 << 7
++
++
++/* Iinterrupt register and bitmasks */
++#define MII_STE100P_XIE_REG 0x12
++#define MII_STE100P_XIE_ANCE 1 << 6
++#define MII_STE100P_XIE_RFE 1 << 5
++#define MII_STE100P_XIE_LDE 1 << 4
++#define MII_STE100P_XIE_ANAE 1 << 3
++#define MII_STE100P_XIE_PDFE 1 << 2
++#define MII_STE100P_XIE_ANPE 1 << 1
++#define MII_STE100P_XIE_REFE 1
++#define MII_STE100P_XIE_ALL \
++(MII_STE100P_XIE_ANCE | MII_STE100P_XIE_RFE | MII_STE100P_XIE_LDE | \
++ MII_STE100P_XIE_ANAE | MII_STE100P_XIE_PDFE | MII_STE100P_XIE_ANPE | MII_STE100P_XIE_REFE)
++
++/* Iinterrupt status register and bitmasks */
++#define MII_STE100P_XCSIIS_REG 0x11
++#define MII_STE100P_XCSIIS_SPEED 1 << 9
++#define MII_STE100P_XCSIIS_DUPLEX 1 << 8
++#define MII_STE100P_XCSIIS_PAUSE 1 << 7
++#define MII_STE100P_XCSIIS_ANC 1 << 6
++#define MII_STE100P_XCSIIS_RFD 1 << 5
++#define MII_STE100P_XCSIIS_LS 1 << 4
++#define MII_STE100P_XCSIIS_ANAR 1 << 3
++#define MII_STE100P_XCSIIS_PDF 1 << 2
++#define MII_STE100P_XCSIIS_ANPR 1 << 1
++#define MII_STE100P_XCSIIS_REF 1
++
++/* 100-TX register and bitmasks*/
++#define MII_STE100P_100CTR_REG 0x13
++#define MII_STE100P_100CTR_DISERR 1 << 13
++#define MII_STE100P_100CTR_ANC 1 << 12
++#define MII_STE100P_100CTR_ENRLB 1 << 9
++#define MII_STE100P_100CTR_ENDCR 1 << 8
++#define MII_STE100P_100CTR_ENRZI 1 << 7
++#define MII_STE100P_100CTR_EN4B5B 1 << 6
++#define MII_STE100P_100CTR_ISOTX 1 << 5
++#define MII_STE100P_100CTR_CMODE_MASK 0x001C
++#define MII_STE100P_100CTR_DISMLT 1 << 1
++#define MII_STE100P_100CTR_DISCRM 1
++
++/* Auto-negotiation register and bitmasks*/
++#define MII_STE100P_ANA_REG 0x04
++#define MII_STE100P_ANA_NXTPG 1 << 15
++#define MII_STE100P_ANA_RF 1 << 13
++#define MII_STE100P_ANA_FC 1 << 10
++#define MII_STE100P_ANA_T4 1 << 9
++#define MII_STE100P_ANA_TXF 1 << 8
++#define MII_STE100P_ANA_TXH 1 << 7
++#define MII_STE100P_ANA_10F 1 << 6
++#define MII_STE100P_ANA_10H 1 << 5
++#define MII_STE100P_ANA_SF 0x0000
++#define MII_STE100P_ANA_SF_MASK 0x000F
++
++/* PHY chip ID regs */
++#define MII_STE100P_PID1_REG 0x02
++#define MII_STE100P_PID2_REG 0x03
++
++#define MII_STE100P_PHYID_VAL 0x1C040000
++#define MII_STE100P_PHYID_MASK 0xFFFF0000
++
++
++
++MODULE_DESCRIPTION("STE100P PHY driver");
++MODULE_AUTHOR("Grzegorz Rajtar <mcgregor@blackmesaeast.com.pl>");
++MODULE_LICENSE("GPL");
++
++static int ste100p_config_intr(struct phy_device *phydev)
++{
++ int temp;
++ temp = phy_read(phydev, MII_STE100P_XIE_REG);
++
++ if(PHY_INTERRUPT_ENABLED == phydev->interrupts )
++ temp |= MII_STE100P_XIE_ALL;
++ else
++ {
++ temp &= ~(MII_STE100P_XIE_ALL);
++ //clear interrupt status register
++ phy_read(phydev, MII_STE100P_XCSIIS_REG);
++ }
++
++ temp = phy_write(phydev, MII_STE100P_XIE_REG, temp);
++
++ return temp;
++}
++
++static int ste100p_config_aneg(struct phy_device *phydev)
++{
++ int err;
++
++ int temp = phy_read(phydev, MII_STE100P_XCR_REG);
++ int temp2;
++
++ /* Isolate the PHY */
++
++ err = phy_write(phydev, MII_STE100P_XCR_REG, temp | MII_STE100P_XCR_ISOLATE);
++
++ //read for isolate latch
++ temp = phy_read(phydev, MII_STE100P_XCR_REG);
++
++ if (err < 0)
++ return err;
++
++ /* Set the Auto_negotiation Advertisement Register */
++ /* MII advertising for Next page, 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3 */
++ err = phy_write(phydev, MII_STE100P_ANA_REG,
++ MII_STE100P_ANA_NXTPG | MII_STE100P_ANA_TXF | MII_STE100P_ANA_TXH |
++ MII_STE100P_ANA_10F | MII_STE100P_ANA_10H | MII_STE100P_ANA_SF);
++
++ if (err < 0)
++ return err;
++
++ err = phy_write(phydev, MII_STE100P_XCR_REG,
++ temp | MII_STE100P_XCR_AN /*| MII_STE100P_XCR_SPEED */ | MII_STE100P_XCR_FULL_DUP);
++
++ if (err < 0)
++ return err;
++
++ /* Restart auto negotiation */
++
++ err = phy_write(phydev, MII_STE100P_XCR_REG,
++ (temp | MII_STE100P_XCR_AN | MII_STE100P_XCR_RSTRT_AN) & (~MII_STE100P_XCR_ISOLATE));
++
++ //read for isolate latch
++ phy_read(phydev, MII_STE100P_XCR_REG);
++
++ if (err < 0)
++ return err;
++
++ /* Configure the new settings */
++ err = genphy_config_aneg(phydev);
++
++ if (err < 0)
++ return err;
++
++ return 0;
++}
++
++static int ste100p_config_init(struct phy_device *phydev)
++{
++ int err;
++ int temp;
++ int temp_xcr;
++
++ /* Isolate the PHY */
++
++ temp_xcr = phy_read(phydev, MII_STE100P_XCR_REG);
++
++ err = phy_write(phydev, MII_STE100P_XCR_REG,
++ ((temp_xcr | MII_STE100P_XCR_ISOLATE) & (~MII_STE100P_XCR_AN)));
++
++ //read for isolate latch
++ temp_xcr = phy_read(phydev, MII_STE100P_XCR_REG);
++
++ err = phy_write(phydev, MII_STE100P_XCR_REG,
++ temp_xcr & (~MII_STE100P_XCR_ISOLATE));
++
++ //read for isolate latch
++ phy_read(phydev, MII_STE100P_XCR_REG);
++
++ if (err < 0)
++ return err;
++
++ temp = phy_read(phydev, MII_STE100P_ANA_REG);
++
++ err = phy_write(phydev, MII_STE100P_ANA_REG, temp
++ | MII_STE100P_ANA_FC | MII_STE100P_ANA_TXF
++ | MII_STE100P_ANA_TXH | MII_STE100P_ANA_10F | MII_STE100P_ANA_10H);
++
++ if (err < 0)
++ return err;
++
++ /* Reconnect the PHY, and enable Autonegotiation */
++ err = phy_write(phydev, MII_STE100P_XCR_REG, (temp_xcr | MII_STE100P_XCR_AN
++ | MII_STE100P_XCR_RSTRT_AN) & (~MII_STE100P_XCR_ISOLATE));
++
++ //read for isolate latch
++ phy_read(phydev, MII_STE100P_XCR_REG);
++
++ if (err < 0)
++ return err;
++
++ return 0;
++}
++
++static int ste100p_ack_interrupt(struct phy_device *phydev)
++{
++ int intmask = 1;
++ int rep = 0;
++
++ //clear multiple interrupts;
++ do
++ {
++ intmask = phy_read(phydev, MII_STE100P_XCSIIS_REG);
++ rep++;
++ } while ((intmask & MII_STE100P_XIE_ALL) != 0 && rep < 25);
++
++ return 0;
++}
++
++
++static int ste100p_suspend(struct phy_device *phydev)
++{
++ int temp = phy_read(phydev, MII_STE100P_XCR_REG);
++ temp = phy_write(phydev, MII_STE100P_XCR_REG, temp | MII_STE100P_XCR_PWRDN);
++ //read for latch XCR REG
++ phy_read(phydev, MII_STE100P_XCR_REG);
++ return temp;
++}
++
++static int ste100p_resume(struct phy_device *phydev)
++{
++ int temp;
++ temp = phy_write(phydev, MII_STE100P_XCR_REG, temp & (~MII_STE100P_XCR_PWRDN));
++ //read for latch XCR REG
++ phy_read(phydev, MII_STE100P_XCR_REG);
++ return temp;
++}
++
++static struct phy_driver ste100p_driver = {
++ .phy_id = MII_STE100P_PHYID_VAL,
++ .name = "STE100P",
++ .phy_id_mask = MII_STE100P_PHYID_MASK,
++ .features = PHY_BASIC_FEATURES,
++ .flags = PHY_HAS_INTERRUPT,
++ .config_init = &ste100p_config_init,
++ .config_intr = &ste100p_config_intr,
++ .config_aneg = &ste100p_config_aneg,
++ .suspend = &ste100p_suspend,
++ .resume = &ste100p_resume,
++ .ack_interrupt = &ste100p_ack_interrupt,
++ .read_status = &genphy_read_status,
++ .driver = { .owner = THIS_MODULE,},
++};
++
++static int __init ste100p_init(void)
++{
++ return phy_driver_register(&ste100p_driver);
++}
++
++static void __exit ste100p_exit(void)
++{
++ phy_driver_unregister(&ste100p_driver);
++}
++
++module_init(ste100p_init);
++module_exit(ste100p_exit);
diff --git a/packages/linux/linux/sarge-at91/defconfig b/packages/linux/linux/sarge-at91/defconfig
new file mode 100644
index 0000000000..36d48a7b49
--- /dev/null
+++ b/packages/linux/linux/sarge-at91/defconfig
@@ -0,0 +1,1909 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.4
+# Wed Jun 13 02:03:51 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Atmel AT91 System-on-Chip
+#
+CONFIG_ARCH_AT91RM9200=y
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+# CONFIG_ARCH_AT91SAM9263 is not set
+# CONFIG_ARCH_AT91SAM9RL is not set
+
+#
+# AT91RM9200 Board Type
+#
+# CONFIG_MACH_ONEARM is not set
+# CONFIG_ARCH_AT91RM9200DK is not set
+# CONFIG_MACH_AT91RM9200EK is not set
+# CONFIG_MACH_CSB337 is not set
+# CONFIG_MACH_CSB637 is not set
+# CONFIG_MACH_CARMEVA is not set
+# CONFIG_MACH_ATEB9200 is not set
+# CONFIG_MACH_KB9200 is not set
+# CONFIG_MACH_KAFA is not set
+CONFIG_MACH_SARGE=y
+# CONFIG_MACH_CHUB is not set
+
+#
+# AT91 Board Options
+#
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+CONFIG_ATMEL_TCLIB=y
+CONFIG_AT91_SLOW_CLOCK=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_AT91_CF=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=32M console=ttyS0,115200 root=fe01 rw"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_APM_EMULATION is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_PIMSM_V1 is not set
+# CONFIG_IP_PIMSM_V2 is not set
+CONFIG_ARPD=y
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+# CONFIG_IPV6_ROUTE_INFO is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+CONFIG_DECNET=m
+CONFIG_DECNET_ROUTER=y
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+CONFIG_IPX_INTERN=y
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+CONFIG_LAPB=m
+CONFIG_ECONET=m
+CONFIG_ECONET_AUNUDP=y
+CONFIG_ECONET_NATIVE=y
+CONFIG_WAN_ROUTER=m
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+# CONFIG_ESI_DONGLE is not set
+# CONFIG_ACTISYS_DONGLE is not set
+# CONFIG_TEKRAM_DONGLE is not set
+# CONFIG_TOIM3232_DONGLE is not set
+# CONFIG_LITELINK_DONGLE is not set
+# CONFIG_MA600_DONGLE is not set
+# CONFIG_GIRBIL_DONGLE is not set
+# CONFIG_MCP2120_DONGLE is not set
+# CONFIG_OLD_BELKIN_DONGLE is not set
+# CONFIG_ACT200L_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_FIB_RULES=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_M25P80=y
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+# CONFIG_PARPORT_PC is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_IDEDISK is not set
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+CONFIG_STE100P_PHY=m
+# CONFIG_FIXED_PHY is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_ARM_AT91_ETHER=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+CONFIG_STRIP=m
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+CONFIG_WAN=y
+# CONFIG_HDLC is not set
+# CONFIG_DLCI is not set
+# CONFIG_WAN_ROUTER_DRIVERS is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=m
+
+#
+# Old ISDN4Linux
+#
+CONFIG_ISDN_I4L=m
+# CONFIG_ISDN_PPP is not set
+# CONFIG_ISDN_AUDIO is not set
+
+#
+# ISDN feature submodules
+#
+# CONFIG_ISDN_DRV_LOOP is not set
+# CONFIG_ISDN_DIVERSION is not set
+
+#
+# ISDN4Linux hardware drivers
+#
+
+#
+# Passive cards
+#
+# CONFIG_ISDN_DRV_HISAX is not set
+
+#
+# Active cards
+#
+
+#
+# Siemens Gigaset
+#
+# CONFIG_ISDN_DRV_GIGASET is not set
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
+CONFIG_CAPI_TRACE=y
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIDRV=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+# CONFIG_CAPI_AVM is not set
+
+#
+# Active Eicon DIVA Server cards
+#
+# CONFIG_CAPI_EICON is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+# CONFIG_IPMI_DEVICE_INTERFACE is not set
+# CONFIG_IPMI_SI is not set
+# CONFIG_IPMI_WATCHDOG is not set
+# CONFIG_IPMI_POWEROFF is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91RM9200_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_AT91_SPI is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_AT91=y
+CONFIG_I2C_AT91_CLOCKRATE=100000
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_MAX6875=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ATMEL is not set
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_BUTTERFLY is not set
+CONFIG_SPI_AT91=y
+CONFIG_SPI_AT91_MANUAL_CS=y
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=m
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+CONFIG_SENSORS_DS1621=m
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+# CONFIG_LEDS_CLASS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D15605 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_VX_LIB=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+CONFIG_SND_AT91_SOC=m
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+CONFIG_OBSOLETE_OSS=y
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+CONFIG_SOUND_TVMIXER=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DEBUG=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=m
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+# CONFIG_USB_FILE_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_AT91=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_AT91RM9200=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+# CONFIG_REISERFS_FS_POSIX_ACL is not set
+# CONFIG_REISERFS_FS_SECURITY is not set
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=y
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=y
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+CONFIG_MINIX_SUBPARTITION=y
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 is not set
+CONFIG_NLS_ISO8859_2=m
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+CONFIG_DEBUG_SPINLOCK=y
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_DEBUG_KOBJECT=y
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux/simpad/defconfig b/packages/linux/linux/simpad/defconfig
index a718a46989..33f08a0593 100644
--- a/packages/linux/linux/simpad/defconfig
+++ b/packages/linux/linux/simpad/defconfig
@@ -1,11 +1,14 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Mon Feb 12 16:35:21 2007
+# Linux kernel version: 2.6.21
+# Sat Jul 7 00:02:55 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -15,6 +18,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -34,16 +38,18 @@ CONFIG_LOCALVERSION="oe1"
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_IPC_NS=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_SYSFS_DEPRECATED is not set
# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
@@ -71,8 +77,9 @@ CONFIG_BASE_SMALL=0
# Loadable module support
#
CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -121,6 +128,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -166,6 +174,7 @@ CONFIG_CPU_CP15_MMU=y
#
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
#
# Bus support
@@ -179,7 +188,7 @@ CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
+# CONFIG_PCMCIA_IOCTL is not set
#
# PC-card bridges
@@ -207,6 +216,7 @@ CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_LEDS=y
CONFIG_LEDS_TIMER=y
# CONFIG_LEDS_CPU is not set
@@ -217,8 +227,9 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mtdparts=sa1100:512k(boot),1m(kernel),-(root) console=ttySA0 root=1f02 noinitrd mem=64M jffs2_orphaned_inodes=delete rootfstype=jffs2"
+CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
#
# CPU Frequency scaling
@@ -248,10 +259,10 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
+CONFIG_PM_LEGACY=y
# CONFIG_PM_DEBUG is not set
# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -268,6 +279,7 @@ CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -415,6 +427,7 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
#
@@ -521,6 +534,7 @@ CONFIG_MTD_SA1100=y
# Plug and Play support
#
# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -533,14 +547,36 @@ CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
#
-# CONFIG_IDE is not set
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
@@ -576,10 +612,10 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# Network device support
#
CONFIG_NETDEVICES=y
-CONFIG_DUMMY=y
+CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
+CONFIG_TUN=m
#
# ARCnet devices
@@ -663,12 +699,12 @@ CONFIG_NET_WIRELESS=y
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
-# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_FMVJ18X=m
CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
+CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m
-# CONFIG_PCMCIA_AXNET is not set
+CONFIG_PCMCIA_AXNET=m
#
# Wan interfaces
@@ -681,7 +717,7 @@ CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
+CONFIG_PPP_MPPE=m
CONFIG_PPPOE=m
# CONFIG_SLIP is not set
CONFIG_SLHC=m
@@ -718,11 +754,19 @@ CONFIG_INPUT_EVBUG=y
#
# Input Device Drivers
#
-# CONFIG_INPUT_KEYBOARD is not set
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_KEYBOARD_NEWTON=m
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_GPIO=y
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
#
# Hardware I/O ports
@@ -767,7 +811,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
@@ -815,7 +859,11 @@ CONFIG_HWMON=y
#
# Misc devices
#
-# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
#
# Multimedia Capabilities Port drivers
@@ -852,15 +900,26 @@ CONFIG_MCP_UCB1200_SWITCHES=y
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_SIMPAD=y
+CONFIG_LCD_SIMPAD=y
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frambuffer hardware drivers
+#
# CONFIG_FB_SA1100 is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_MQ200=y
@@ -885,7 +944,6 @@ CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
@@ -905,7 +963,8 @@ CONFIG_SOUND=y
#
# HID Devices
#
-CONFIG_HID=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -927,6 +986,7 @@ CONFIG_USB_ARCH_HAS_HCD=y
#
# MMC/SD Card support
#
+# CONFIG_MMC_SPI_BLOCK is not set
# CONFIG_MMC is not set
#
@@ -959,20 +1019,22 @@ CONFIG_FS_POSIX_ACL=y
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
+CONFIG_ROMFS_FS=m
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
+CONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set
CONFIG_GENERIC_ACL=y
#
# CD-ROM/DVD Filesystems
#
-# CONFIG_ISO9660_FS is not set
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
# CONFIG_UDF_FS is not set
#
@@ -1028,20 +1090,28 @@ CONFIG_CRAMFS=m
#
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
# CONFIG_NFSD is not set
-# CONFIG_ROOT_NFS is not set
+CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
@@ -1117,16 +1187,17 @@ CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
@@ -1137,6 +1208,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y
@@ -1151,7 +1223,46 @@ CONFIG_DEBUG_LL=y
#
# Cryptographic options
#
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
#
# Library routines
@@ -1164,4 +1275,5 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch b/packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch
deleted file mode 100644
index 6b315de79d..0000000000
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch
+++ /dev/null
@@ -1,1776 +0,0 @@
-diff -uNr linux-2.6.20.vanilla/drivers/video/Kconfig linux-2.6.20/drivers/video/Kconfig
---- linux-2.6.20.vanilla/drivers/video/Kconfig 2007-02-10 19:02:14.000000000 +0100
-+++ linux-2.6.20/drivers/video/Kconfig 2007-02-11 16:39:54.000000000 +0100
-@@ -1147,6 +1147,18 @@
- help
- If you have a S3 Trio say Y. Say N for S3 Virge.
-
-+config FB_MQ200
-+ bool "MQ200 Driver"
-+ depends on (FB = y) && ARM && ARCH_SA1100
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ This is a MQ200 driver tested only on Simens SIMpads. You may need to
-+ boot your SIMpad with a 2.4 SIMpad Kernel first in order to use this
-+ driver. This is also needed if the SIMpad lost his power
-+ connection (empty accu or accu disconnect).
-+
- config FB_SAVAGE
- tristate "S3 Savage support"
- depends on FB && PCI && EXPERIMENTAL
-diff -uNr linux-2.6.20.vanilla/drivers/video/Makefile linux-2.6.20/drivers/video/Makefile
---- linux-2.6.20.vanilla/drivers/video/Makefile 2007-02-10 19:02:14.000000000 +0100
-+++ linux-2.6.20/drivers/video/Makefile 2007-02-11 16:40:07.000000000 +0100
-@@ -30,6 +30,7 @@
- obj-$(CONFIG_FB_PM2) += pm2fb.o
- obj-$(CONFIG_FB_PM3) += pm3fb.o
-
-+obj-$(CONFIG_FB_MQ200) += mq200/
- obj-$(CONFIG_FB_MATROX) += matrox/
- obj-$(CONFIG_FB_RIVA) += riva/ vgastate.o
- obj-$(CONFIG_FB_NVIDIA) += nvidia/
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/Makefile linux-2.6.20/drivers/video/mq200/Makefile
---- linux-2.6.20.vanilla/drivers/video/mq200/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/Makefile 2007-02-11 16:41:44.000000000 +0100
-@@ -0,0 +1,6 @@
-+# Makefile for mq200 video driver
-+# 4 Aug 2003, Holger Hans Peter Freyther
-+# 2 Jan 2007, mr nice
-+
-+obj-$(CONFIG_FB_MQ200) += mq_skeleton.o mq_external.o
-+
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/drivers/video/mq200/mq200_data.h
---- linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq200_data.h 2007-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,893 @@
-+/*
-+ * From ucLinux mq200fb.c and mq200fb.h
-+ */
-+
-+#ifndef __MQ200_FB_H__
-+#define __MQ200_FB_H__
-+
-+struct mq200_io_regions {
-+ u32 fb_size; /* framebuffer size */
-+ unsigned long phys_mmio_base; /* physical register memory base */
-+ unsigned long virt_mmio_base; /* virtual start of registers */
-+ unsigned long phys_fb_base; /* physical address of frame buffer */
-+ unsigned long virt_fb_base; /* virtual start of the framebuffer */
-+};
-+
-+#define MQ200_MONITOR_HORI_RES(info) info->monitor_info.horizontal_res
-+#define MQ200_MONITOR_VERT_RES(info) info->monitor_info.vertical_res
-+#define MQ200_MONITOR_DEPTH(info) info->monitor_info.depth
-+#define MQ200_MONITOR_LINE_LENGTH(info) info->monitor_info.line_length
-+
-+struct mq200_monitor_info {
-+ unsigned int horizontal_res;
-+ unsigned int vertical_res;
-+ unsigned int depth;
-+ unsigned int refresh;
-+ unsigned int line_length;
-+ unsigned long flags;
-+};
-+
-+
-+/**
-+ * Addresses of Module
-+ */
-+#define MQ200_FB_BASE (x) (x + 0x1800000) /* framebuffer */
-+#define MQ200_FB_SIZE 0x200000 /* framebuffer size in bytes */
-+#define MQ200_REGS_BASE(x) (x + 0x1e00000) /* start of registers area */
-+#define MQ200_REGS_SIZE 0x200000 /* registers area size */
-+
-+#define PMU_OFFSET 0x00000 /* power management */
-+#define CPU_OFFSET 0x02000 /* CPU interface */
-+#define MIU_OFFSET 0x04000 /* memory controller */
-+#define IN_OFFSET 0x08000 /* interrupt controller */
-+#define GC_OFFSET 0x0a000 /* graphics controller 1&2 */
-+#define GE_OFFSET 0x0c000 /* graphics engine */
-+#define FPI_OFFSET 0x0e000 /* flat panel controller */
-+#define CP1_OFFSET 0x10000 /* color palette 1 */
-+#define DC_OFFSET 0x14000 /* device configuration */
-+#define PCI_OFFSET 0x16000 /* PCI configuration */
-+#define PSF_OFFSET 0x18000 /* ??? */
-+
-+
-+/****
-+ * Registers
-+ */
-+
-+/* power management unit */
-+#define PMR(addr) (addr + PCI_OFFSET + 0x40)/* power management
-+ register */
-+#define PMR_VALUE 0x06210001 /* expected read value of PMR register */
-+#define PM00R(addr) (addr + PMU_OFFSET + 0x00) /* power management unit
-+ configuration
-+ register */
-+#define PM01R(addr) (addr + PMU_OFFSET + 0x04) /* D1 state control */
-+#define PM02R(addr) (addr + PMU_OFFSET + 0x08) /* d2 state control */
-+#define PM06R(addr) (addr + PMU_OFFSET + 0x18) /* PLL 2 programming */
-+#define PM07R(addr) (addr + PMU_OFFSET + 0x1c) /* PLL 3 programming */
-+
-+#define PMCSR(addr) (addr + PCI_OFFSET + 0x44) /* power management
-+ control/status
-+ register */
-+
-+/* memory interface unit */
-+#define MM00R(addr) (addr + MIU_OFFSET + 0x00)/* MIU interface control
-+ 0 */
-+#define MM01R(addr) (addr + MIU_OFFSET + 0x04) /* MIU interface control
-+ 1 */
-+#define MM02R(addr) (addr + MIU_OFFSET + 0x08) /* memory interface
-+ control 2 */
-+#define MM03R(addr) (addr + MIU_OFFSET + 0x0c) /* memory interface
-+ control 3 */
-+#define MM04R(addr) (addr + MIU_OFFSET + 0x10) /* memory interface
-+ control 4 */
-+/* graphics controller 1 module */
-+#define GC00R(addr) (addr + GC_OFFSET + 0x00) /* graphics controller 1
-+ control */
-+#define GC01R(addr) (addr + GC_OFFSET + 0x04) /* graphics controller
-+ CRT control */
-+#define GC02R(addr) (addr + GC_OFFSET + 0x08) /* horizontal display 1
-+ control */
-+#define GC03R(addr) (addr + GC_OFFSET + 0x0c) /* vertical display 1
-+ control */
-+#define GC04R(addr) (addr + GC_OFFSET + 0x10) /* horizontal sync 1
-+ control */
-+#define GC05R(addr) (addr + GC_OFFSET + 0x14) /* vertical sync 1
-+ control */
-+#define GC07R(addr) (addr + GC_OFFSET + 0x1c) /* vertical display 1
-+ count */
-+#define GC08R(addr) (addr + GC_OFFSET + 0x20) /* horizontal window 1
-+ control */
-+#define GC09R(addr) (addr + GC_OFFSET + 0x24) /* vertical window 1
-+ control */
-+#define GC0AR(addr) (addr + GC_OFFSET + 0x28) /* alternate horizontal
-+ window 1 control */
-+#define GC0BR(addr) (addr + GC_OFFSET + 0x2c) /* alternate vertical
-+ window 1 control */
-+#define GC0CR(addr) (addr + GC_OFFSET + 0x30) /* window 1
-+ start address */
-+#define GC0DR(addr) (addr + GC_OFFSET + 0x34) /* alternate window 1
-+ start address */
-+#define GC0ER(addr) (addr + GC_OFFSET + 0x38) /* window 1 stride */
-+#define GC0FR(addr) (addr + GC_OFFSET + 0x3c) /* reserved */
-+#define GC10R(addr) (addr + GC_OFFSET + 0x40) /* hardware cursor 1
-+ position */
-+#define GC11R(addr) (addr + GC_OFFSET + 0x44) /* hardware cursor 1
-+ start address and
-+ offset */
-+#define GC12R(addr) (addr + GC_OFFSET + 0x48) /* hardware cursor 1
-+ foreground color */
-+#define GC13R(addr) (addr + GC_OFFSET + 0x4c) /* hardware cursor 1
-+ background color */
-+/* graphics engine */
-+#define ROP_SRCCOPY 0xCC /* dest = source */
-+#define ROP_SRCPAINT 0xEE /* dest = source OR dest */
-+#define ROP_SRCAND 0x88 /* dest = source AND dest */
-+#define ROP_SRCINVERT 0x66 /* dest = source XOR dest */
-+#define ROP_SRCERASE 0x44 /* dest = source AND (NOT dest) */
-+#define ROP_NOTSRCCOPY 0x33 /* dest = NOT source */
-+#define ROP_NOTSRCERASE 0x11 /* dest = (NOT source) AND (NOT dest) */
-+#define ROP_MERGECOPY 0xC0 /* dest = source AND pattern */
-+#define ROP_MERGEPAINT 0xBB /* dest = (NOT source) OR dest */
-+#define ROP_PATCOPY 0xF0 /* dest = pattern */
-+#define ROP_PATPAINT 0xFB /* dest = DPSnoo */
-+#define ROP_PATINVERT 0x5A /* dest = pattern XOR dest */
-+#define ROP_DSTINVERT 0x55 /* dest = NOT dest */
-+#define ROP_BLACKNESS 0x00 /* dest = BLACK */
-+#define ROP_WHITENESS 0xFF /* dest = WHITE */
-+
-+#define GE00R(addr) (addr + GE_OFFSET + 0x00) /* primary drawing command
-+ register */
-+#define GE01R(addr) (addr + GE_OFFSET + 0x04) /* primary width and
-+ height register */
-+#define GE02R(addr) (addr + GE_OFFSET + 0x08) /* primary destination
-+ address register */
-+#define GE03R(addr) (addr + GE_OFFSET + 0x0c) /* primary source XY
-+ register */
-+#define GE04R(addr) (addr + GE_OFFSET + 0x10) /* primary color compare
-+ register */
-+#define GE05R(addr) (addr + GE_OFFSET + 0x14) /* primary clip left/top
-+ register */
-+#define GE06R(addr) (addr + GE_OFFSET + 0x18) /* primary clip
-+ right/bottom register
-+ */
-+#define GE07R(addr) (addr + GE_OFFSET + 0x1c) /* primary source and
-+ pattern offset
-+ register */
-+#define GE08R(addr) (addr + GE_OFFSET + 0x20) /* primary foreground
-+ color
-+ register/rectangle
-+ fill register */
-+#define GE09R(addr) (addr + GE_OFFSET + 0x24) /* source stride/offset
-+ register */
-+#define GE0AR(addr) (addr + GE_OFFSET + 0x28) /* destination stride
-+ register and color
-+ depth */
-+#define GE0BR(addr) (addr + GE_OFFSET + 0x2c) /* image base address
-+ register */
-+#define GE40R(addr) (addr + GE_OFFSET + 0x100) /* mono pattern register
-+ 0 */
-+#define GE41R(addr) (addr + GE_OFFSET + 0x104) /* mono pattern register
-+ 1 */
-+#define GE42R(addr) (addr + GE_OFFSET + 0x108) /* foreground color
-+ register */
-+#define GE43R(addr) (addr + GE_OFFSET + 0x10c) /* background color
-+ register */
-+/* color palette */
-+#define C1xxR(addr, regno) \
-+ (addr + CP1_OFFSET + (regno) * 4) /* graphics controller color
-+ palette 1 */
-+/* device configuration */
-+#define DC00R(addr) (addr + DC_OFFSET + 0x00) /* device configuration
-+ register 0 */
-+#define DC_RESET 0x4000
-+/* PCI configuration space */
-+#define PC00R(addr) (addr + PCI_OFFSET + 0x00)/* device ID/vendor ID
-+ register */
-+/* Flatpanel Control */
-+#define FP00R(addr) (addr + FPI_OFFSET + 0x00) /* Flat Panel Control 0 */
-+#define FP01R(addr) (addr + FPI_OFFSET + 0x04) /* Flat Panel Output Pin */
-+#define FP02R(addr) (addr + FPI_OFFSET + 0x08) /* Flat Panel Gener Purpose
-+ Outout Control Register */
-+#define FP03R(addr) (addr + FPI_OFFSET + 0x0c) /* General Purpose I/O Port
-+ Control Register */
-+#define FP04R(addr) (addr + FPI_OFFSET + 0x10) /* STN Panel Control Register */
-+#define FP05R(addr) (addr + FPI_OFFSET + 0x14) /* D-STN Half Frame Buffer
-+ Control Register -By Guess */
-+#define FP0FR(addr) (addr + FPI_OFFSET + 0x3c) /* Pulse Width Modulation
-+ Control Register */
-+#define FRCTL_PATTERN_COUNT 32
-+#define FP10R(addr) (addr + FPI_OFFSET + 0x40) /* Frame-Rate Control Pattern
-+ Register */
-+#define FP11R(addr) (addr + FPI_OFFSET + 0x44)
-+#define FP2FR(addr) (addr + FPI_OFFSET + 0xc0) /* Frame-Rate Control Weight
-+ Registers */
-+
-+
-+
-+
-+/* power management miscellaneous control */
-+union pm00r {
-+ struct {
-+ u32 pll1_n_b5 :1; /* PLL 1 N parameter bit 5 is 0 */
-+ u32 reserved_1 :1;
-+ u32 pll2_enbl :1; /* PLL 2 enable */
-+ u32 pll3_enbl :1; /* PLL 3 enable */
-+ u32 reserved_2 :1;
-+ u32 pwr_st_ctrl :1; /* power state status control */
-+ u32 reserved_3 :2;
-+
-+ u32 ge_enbl :1; /* graphics engine enable */
-+ u32 ge_bsy_gl :1; /* graphics engine force busy (global) */
-+ u32 ge_bsy_lcl :1; /* graphics engine force busy (local) */
-+ u32 ge_clock :2; /* graphics engine clock select */
-+ u32 ge_cmd_fifo :1; /* graphics engine command FIFO reset */
-+ u32 ge_src_fifo :1; /* graphics engine CPU source FIFO reset */
-+ u32 miu_pwr_seq :1; /* memory interface unit power sequencing
-+ enable */
-+
-+ u32 d3_mem_rfsh :1; /* D3 memory refresh */
-+ u32 d4_mem_rfsh :1; /* D4 memory refresh */
-+ u32 gpwr_intrvl :2; /* general power sequencing interval */
-+ u32 fppwr_intrvl:2; /* flat panel power sequencing interval */
-+ u32 gpwr_seq_ctr:1; /* general power sequencing interval control */
-+ u32 pmu_tm :1; /* PMU test mode */
-+
-+ u32 pwr_state :2; /* power state (read only) */
-+ u32 pwr_seq_st :1; /* power sequencing active status (read
-+ only) */
-+ u32 reserved_4 :5;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* D1 state control */
-+union pm01r {
-+ struct {
-+ u32 osc_enbl :1; /* D1 oscillator enable */
-+ u32 pll1_enbl :1; /* D1 PLL 1 enable */
-+ u32 pll2_enbl :1; /* D1 PLL 2 enable */
-+ u32 pll3_enbl :1; /* D1 PLL 3 enable */
-+ u32 miu_enbl :1; /* D1 Memory Interface Unit (MIU) enable */
-+ u32 mem_rfsh :1; /* D1 memory refresh enable */
-+ u32 ge_enbl :1; /* D1 Graphics Engine (GE) enable */
-+ u32 reserved_1 :1;
-+
-+ u32 crt_enbl :1; /* D1 CRT enable */
-+ u32 fpd_enbl :1; /* D1 Flat Panel enable */
-+ u32 reserved_2 :6;
-+
-+ u32 ctl1_enbl :1; /* D1 controller 1 enable */
-+ u32 win1_enbl :1; /* D1 window 1 enable */
-+ u32 awin1_enbl :1; /* D1 alternate window 1 enable */
-+ u32 cur1_enbl :1; /* D1 cursor 1 enable */
-+ u32 reserved_3 :4;
-+
-+ u32 ctl2_enbl :1; /* D1 controller 2 enable */
-+ u32 win2_enbl :1; /* D1 window 2 enable */
-+ u32 awin2_enbl :1; /* D1 alternate window 2 enable */
-+ u32 cur2_enbl :1; /* D1 cursor 2 enable */
-+ u32 reserved_4 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* D2 state control */
-+union pm02r {
-+ struct {
-+ u32 osc_enbl :1; /* D2 oscillator enable */
-+ u32 pll1_enbl :1; /* D2 PLL 1 enable */
-+ u32 pll2_enbl :1; /* D2 PLL 2 enable */
-+ u32 pll3_enbl :1; /* D2 PLL 3 enable */
-+ u32 miu_enbl :1; /* D2 Memory Interface Unit (MIU) enable */
-+ u32 mem_rfsh :1; /* D2 memory refresh enable */
-+ u32 ge_enbl :1; /* D2 Graphics Engine (GE) enable */
-+ u32 reserved_1 :1;
-+
-+ u32 crt_enbl :1; /* D2 CRT enable */
-+ u32 fpd_enbl :1; /* D2 Flat Panel enable */
-+ u32 reserved_2 :6;
-+
-+ u32 ctl1_enbl :1; /* D2 controller 1 enable */
-+ u32 win1_enbl :1; /* D2 window 1 enable */
-+ u32 awin1_enbl :1; /* D2 alternate window 1 enable */
-+ u32 cur1_enbl :1; /* D2 cursor 1 enable */
-+ u32 reserved_3 :4;
-+
-+ u32 ctl2_enbl :1; /* D2 controller 2 enable */
-+ u32 win2_enbl :1; /* D2 window 2 enable */
-+ u32 awin2_enbl :1; /* D2 alternate window 2 enable */
-+ u32 cur2_enbl :1; /* D2 cursor 2 enable */
-+ u32 reserved_4 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* PLL 2 programming */
-+union pm06r {
-+ struct {
-+ u32 clk_src :1; /* PLL 2 reference clock source */
-+ u32 bypass :1; /* PLL 2 bypass */
-+ u32 reserved_1 :2;
-+ u32 p_par :3; /* PLL 2 P parameter */
-+ u32 reserved_2 :1;
-+
-+ u32 n_par :5; /* PLL 2 N parameter */
-+ u32 reserved_3 :3;
-+
-+ u32 m_par :8; /* PLL 2 M parameter */
-+
-+ u32 reserved_4 :4;
-+ u32 trim :4; /* PLL 2 trim value */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* PLL 3 programming */
-+union pm07r {
-+ struct {
-+ u32 clk_src :1; /* PLL 3 reference clock source */
-+ u32 bypass :1; /* PLL 3 bypass */
-+ u32 reserved_1 :2;
-+ u32 p_par :3; /* PLL 3 P parameter */
-+ u32 reserved_2 :1;
-+
-+ u32 n_par :5; /* PLL 3 N parameter */
-+ u32 reserved_3 :3;
-+
-+ u32 m_par :8; /* PLL 3 M parameter */
-+
-+ u32 reserved_4 :4;
-+ u32 trim :4; /* PLL 3 trim value */
-+ } part;
-+ u32 whole;
-+};
-+
-+
-+
-+/* MIU interface control 1 */
-+union mm00r {
-+ struct {
-+ u32 miu_enbl :1; /* MIU enable bit */
-+ u32 mr_dsbl :1; /* MIU reset disable bit */
-+ u32 edr_dsbl :1; /* embedded DRAM reset disable bit */
-+ u32 reserved_1 :29;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* MIU interface control 2 */
-+union mm01r {
-+ struct {
-+ u32 mc_src :1; /* memory clock source */
-+ u32 msr_enbl :1; /* memory slow refresh enable bit */
-+ u32 pb_cpu :1; /* page break enable for CPU */
-+ u32 pb_gc1 :1; /* page break enable for GC1 */
-+ u32 pb_gc2 :1; /* page break enable for GC2 */
-+ u32 pb_stn_r :1; /* page break enable for STN read */
-+ u32 pb_stn_w :1; /* page break enable for STN write */
-+ u32 pb_ge :1; /* page break enable for GE */
-+ u32 reserved_1 :4;
-+ u32 mr_interval :14; /* normal memory refresh time interval */
-+ u32 reserved_2 :4;
-+ u32 edarm_enbl :1; /* embedded DRAM auto-refresh mode enable */
-+ u32 eds_enbl :1; /* EDRAM standby enable for EDRAM normal
-+ mode operation */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* memory interface control 3 */
-+union mm02r {
-+ struct {
-+ u32 bs_ :2;
-+ u32 bs_stnr :2; /* burst count for STN read memory cycles */
-+ u32 bs_stnw :2; /* burst count for STN write memroy cycles */
-+ u32 bs_ge :2; /* burst count for graphics engine
-+ read/write memroy cycles */
-+ u32 bs_cpuw :2; /* burst count for CPU write memory cycles */
-+ u32 fifo_gc1 :4; /* GC1 display refresh FIFO threshold */
-+ u32 fifo_gc2 :4; /* GC2 display refresh FIFO threshold */
-+ u32 fifo_stnr :4; /* STN read FIFO threshold */
-+ u32 fifo_stnw :4; /* STN write FIFO threshold */
-+ u32 fifo_ge_src :3; /* GE source read FIFO threshold */
-+ u32 fifo_ge_dst :3; /* GE destination read FIFO threshold */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* memory interface control 4 */
-+union mm03r {
-+ struct {
-+ u32 rd_late_req :1; /* read latency request */
-+ u32 reserved_1 :31;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* memory interface control 5 */
-+union mm04r {
-+ struct {
-+ u32 latency :3; /* EDRAM latency */
-+ u32 dmm_cyc :1; /* enable for the dummy cycle insertion
-+ between read and write cycles */
-+ u32 pre_dmm_cyc :1; /* enable for the dummy cycle insertion
-+ between read/write and precharge cycles
-+ for the same bank */
-+ u32 reserved_1 :3;
-+ u32 bnk_act_cls :2; /* bank activate command to bank close
-+ command timing interval control */
-+ u32 bnk_act_rw :1; /* bank activate command to read/wirte
-+ command timing interval control */
-+ u32 bnk_cls_act :1; /* bank close command to bank activate
-+ command timing interval control */
-+ u32 trc :1; /* row cycle time */
-+ u32 reserved_2 :3;
-+ u32 delay_r :2; /* programmable delay for read clock */
-+ u32 delay_m :2; /* programmable delay for internal memory
-+ clock */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* graphics controller 1 register */
-+union gc00r {
-+ struct {
-+ u32 ctl_enbl :1; /* Controller 1 Enable */
-+ u32 hc_reset :1; /* Horizontal Counter 1 Reset */
-+ u32 vc_reset :1; /* Vertical Counter 1 Reset */
-+ u32 iwin_enbl :1; /* Image Window 1 Enable */
-+ u32 gcd :4; /* Graphics Color Depth (GCD) */
-+
-+ u32 hc_enbl :1; /* Hardware Cursor 1 Enable */
-+ u32 reserved_1 :2;
-+ u32 aiwin_enbl :1; /* Alternate Image Window Enable */
-+ u32 agcd :4; /* Alternate Graphics Color Depth (AGCD) */
-+
-+ u32 g1rclk_src :2; /* G1RCLK Source */
-+ u32 tm0 :1; /* Test Mode 0 */
-+ u32 tm1 :1; /* Test Mode 1 */
-+ u32 fd :3; /* G1MCLK First Clock Divisor (FD1) */
-+ u32 reserved_2 :1;
-+
-+ u32 sd :8; /* G1MCLK Second Clock Divisor (SD1) */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* graphics controller CRT control */
-+union gc01r {
-+ struct {
-+ u32 dac_enbl :2; /* CRT DAC enable */
-+ u32 hsync_out :1; /* CRT HSYNC output during power down mode */
-+ u32 vsync_out :1; /* CRT VSYNC output during power down mode */
-+ u32 hsync_ctl :2; /* CRT HSYNC control */
-+ u32 vsync_ctl :2; /* CRT VSYNC control */
-+ /**/
-+ u32 hsync_pol :1; /* CRT HSYNC polarity */
-+ u32 vsync_pol :1; /* CRT VSYNC polarity */
-+ u32 sync_p_enbl :1; /* sync pedestal enable */
-+ u32 blnk_p_enbl :1; /* blank pedestal enable */
-+ u32 c_sync_enbl :1; /* composite sync enable */
-+ u32 vref_sel :1; /* VREF select */
-+ u32 mn_sns_enbl :1; /* monitor sense enable */
-+ u32 ct_out_enbl :1; /* constant output enable */
-+ /**/
-+ u32 dac_out_lvl :8; /* monitor sense DAC output level */
-+ /**/
-+ u32 blue_dac_r :1; /* blue DAC sense result */
-+ u32 green_dac_r :1; /* green DAC sense result */
-+ u32 red_dac_r :1; /* red DAC sense result */
-+ u32 reserved_1 :1;
-+ u32 mon_col_sel :1; /* mono/color monitor select */
-+ u32 reserved_2 :3;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* horizontal display 1 control */
-+union gc02r {
-+ struct {
-+ u32 hd1t :12; /* horizontal display 1 total */
-+ u32 reserved_1 :4;
-+
-+ u32 hd1e :12; /* horizontal display 1 end */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* vertical display 1 control */
-+union gc03r {
-+ struct {
-+ u32 vd1t :12; /* vertical display 1 total */
-+ u32 reserved_1 :4;
-+
-+ u32 vd1e :12; /* vertical display 1 end */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* horizontal sync 1 control */
-+union gc04r {
-+ struct {
-+ u32 hs1s :12; /* horizontal sync 1 start */
-+ u32 reserved_1 :4;
-+
-+ u32 hs1e :12; /* horizontal sync 1 end */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* vertical sync 1 control */
-+union gc05r {
-+ struct {
-+ u32 vs1s :12; /* vertical sync 1 start */
-+ u32 reserved_1 :4;
-+
-+ u32 vs1e :12; /* vertical sync 1 end */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* vertical display 1 count */
-+union gc07r {
-+ struct {
-+ u32 vd_cnt :12; /* vertical display 1 count */
-+ u32 reverved_1 :20;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* horizontal window 1 control */
-+union gc08r {
-+ struct {
-+ u32 hw1s :12; /* horizontal window 1 start (HW1S) */
-+ u32 reserved_1 :4;
-+
-+ u32 hw1w :12; /* horizontal window 1 width (HW1W) */
-+ u32 w1ald :4; /* window 1 additional line data */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* vertical window 1 control */
-+union gc09r {
-+ struct {
-+ u32 vw1s :12; /* vertical window 1 start */
-+ u32 reserved_1 :4;
-+ u32 vw1h :12; /* vertical window 1 height */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* window 1 start address */
-+union gc0cr {
-+ struct {
-+ u32 w1sa :21; /* window 1 start address */
-+ u32 reserved_1 :11;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* window 1 stride */
-+union gc0er {
-+ struct {
-+ s16 w1st; /* window 1 stride */
-+ s16 aw1st; /* alternate window 1 stride */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* hardware cursor 1 position */
-+union gc10r {
-+ struct {
-+ u32 hc1s :12; /* horizontal cursor 1 start */
-+ u32 reserved_1 :4;
-+ u32 vc1s :12; /* vertical cursor 1 start */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* hardware cursor 1 start address and offset */
-+union gc11r {
-+ struct {
-+ u32 hc1sa :11; /* hardware cursor 1 start address */
-+ u32 reserved_1 :5;
-+ u32 hc1o :6; /* horizontal cursor 1 offset */
-+ u32 reserved_2 :2;
-+ u32 vc1o :6; /* vertical cursor 1 offset */
-+ u32 reserved_3 :2;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* hardware cursor 1 foreground color */
-+union gc12r {
-+ struct {
-+ u32 hc1fc :24; /* hardware cursor 1 foreground color */
-+ u32 reserved_1 :8;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* hardware cursor 1 background color */
-+union gc13r {
-+ struct {
-+ u32 hc1bc :24; /* hardware cursor 1 background color */
-+ u32 reserved_1 :8;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* primary drawing command register */
-+union ge00r {
-+ struct {
-+ u32 rop :8; /* raster operation */
-+ /**/
-+ u32 cmd_typ :3; /* command type */
-+ u32 x_dir :1; /* x direction */
-+ u32 y_dir :1; /* y direction */
-+ u32 src_mem :1; /* source memory */
-+ u32 mon_src :1; /* mono source */
-+ u32 mon_ptn :1; /* mono pattern */
-+ /**/
-+ u32 dst_trns_e :1; /* destination transparency enable */
-+ u32 dst_trns_p :1; /* destination transparency polarity */
-+ u32 mon_trns_e :1; /* mono source or mono pattern transparency
-+ enable */
-+ u32 mon_trns_p :1; /* mono transparency polarity */
-+ u32 mod_sel :1; /* memory to screen or off screen to screen
-+ mode select */
-+ u32 alpha_sel :2; /* Alpha byte mask selection */
-+ u32 sol_col :1; /* solid color */
-+ /**/
-+ u32 stride_eq :1; /* source stride is equal to destination
-+ stride */
-+ u32 rop2_sel :1; /* ROP2 code selection */
-+ u32 clipping :1; /* enable clipping */
-+ u32 auto_exec :1; /* auto execute */
-+ u32 reserved_1 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* primary width and height register */
-+union ge01r {
-+ struct {
-+ u32 width :12; /* source/destination window width */
-+ u32 reserved_1 :4;
-+
-+ u32 height :12; /* source/destination window height */
-+ u32 reserved_2 :1;
-+ u32 reserved_3 :3;
-+ } bitblt;
-+ struct {
-+ u32 dm :17;
-+ u32 axis_major :12;
-+ u32 x_y :1; /* x-major or y-major */
-+ u32 last_pix :1; /* decision to draw or not to draw the last
-+ pixel of the line */
-+ u32 reserved_1 :1;
-+ } bresenham;
-+ u32 whole;
-+};
-+
-+/* primary destination address register */
-+union ge02r {
-+ struct {
-+ u32 dst_x :12; /* destination x position */
-+ u32 reserved_1 :1;
-+ u32 h_offset :3; /* mono/color pattern horizontal offset */
-+
-+ u32 dst_y :12; /* destination y position */
-+ u32 reserved_2 :1;
-+ u32 v_offset :3; /* mono/color pattern vertical offset */
-+ } window;
-+ struct {
-+ u32 x :12; /* starting x coordinate */
-+ u32 dm :17; /* 17 bits major-axis delta */
-+ u32 reserved_1 :3;
-+ } line;
-+ u32 whole;
-+};
-+
-+/* source XY register/line draw starting Y coordinate and mintor axis delta */
-+union ge03r {
-+ struct {
-+ u32 src_x :12; /* source X position */
-+ u32 reserved_1 :4;
-+
-+ u32 src_y :12; /* source Y position */
-+ u32 reserved_2 :4;
-+ } window;
-+ struct {
-+ u32 start_y :12; /* starting Y coordinate */
-+ u32 dn :17; /* 17 bits minor-axis delta */
-+ u32 reserved_1 :3;
-+ } line;
-+ u32 whole;
-+};
-+
-+/* clip left/top register */
-+union ge05r {
-+ struct {
-+ u32 left :12; /* left edge of clipping rectangle */
-+ u32 reserved_1 :4;
-+
-+ u32 top :12; /* top edge of clipping rectangle */
-+ u32 reserved_2 :4;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* source stride/offset register */
-+union ge09r {
-+ struct {
-+ u32 src_strid :12; /* source line stride */
-+ u32 reserved_1 :13;
-+ u32 strt_bit :3; /* initial mono source bit offset */
-+ u32 strt_byte :3; /* initial mono/color source byte offset */
-+ u32 reserved_2 :1;
-+ } line;
-+ struct {
-+ u32 strt_bit :5; /* initial mono source bit offset */
-+ u32 reserved_1 :1;
-+ u32 amount :10; /* number of 16 bytes amount that MIU need
-+ to fetch from frame buffer */
-+
-+ u32 reserved_2 :9;
-+ u32 bit_spc :7; /* bit space between lines */
-+ } pack_mono;
-+ struct {
-+ u32 strt_bit :3; /* initial mono source bit offset */
-+ u32 strt_byte :3; /* initial mono/color source byte offset */
-+ u32 amount :10; /* number of 16 bytes amount that MIU need
-+ to fetch from frame buffer */
-+
-+ u32 reserved_1 :9;
-+ u32 bit_spc :3; /* bit space between lines */
-+ u32 byt_spc :4; /* byte space between lines */
-+ } pack_color;
-+ u32 whole;
-+};
-+
-+/* destination stride register and color depth */
-+union ge0ar {
-+ struct {
-+ u32 dst_strid :12; /* destination line stride and color depth */
-+ u32 reserved_1 :18;
-+ u32 col_dpth :2; /* color depth */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* graphics controller color pallete */
-+union c1xxr {
-+ struct {
-+ u8 red; /* red color pallete */
-+ u8 green; /* green/gray color pallete */
-+ u8 blue; /* blue color palette */
-+ u8 reserved_1;
-+ } part;
-+ u32 whole;
-+};
-+
-+/* devicee configuration register 0 */
-+union dc00r {
-+ struct {
-+ u32 osc_bypass :1; /* oscillator bypass */
-+ u32 osc_enbl :1; /* oscillator enable */
-+ u32 pll1_bypass :1; /* PLL1 bypass */
-+ u32 pll1_enbl :1; /* PLL1 enable */
-+ u32 pll1_p_par :3; /* PLL1 P parameter */
-+ u32 cpu_div :1; /* CPU interface clock divisor */
-+ u32 pll1_n_par :5; /* PLL1 N parameter */
-+ u32 saisc :1; /* StrongARM interface synchronizer control */
-+ u32 s_chp_reset :1; /* software chip reset */
-+ u32 mem_enbl :1; /* memory standby enable */
-+ u32 pll1_m_par :8; /* PLL 1 M parameter */
-+ u32 osc_shaper :1; /* oscillator shaper disable */
-+ u32 fast_pwr :1; /* fast power sequencing */
-+ u32 osc_frq :2; /* oscillator frequency select */
-+ u32 pll1_trim :4; /* PLL 1 trim value */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* device ID/vendor ID register */
-+union pc00r {
-+ struct {
-+ u16 device; /* device ID */
-+ u16 vendor; /* vendor ID */
-+ } part;
-+ u32 whole;
-+};
-+
-+/* Flat Panel Control Register */
-+union fp00r {
-+ struct {
-+ u32 flatp_enbl : 2; /* Flat Panel Interface Enable */
-+ u32 flatp_type : 2; /* Flat Panel Type */
-+ u32 mono : 1; /* Mono/Color Panel Select */
-+ u32 flatp_intf : 3; /* Flat Panel Interface */
-+ u32 dither_pat : 2; /* Dither Pattern */
-+ u32 reserved : 2; /* Reserved Must Be 0*/
-+ u32 dither_col : 3; /* Dither Base Color */
-+ u32 alt_win_ctl: 1; /* Alternate Window Control */
-+ u32 frc_ctl : 2; /* FRC Control */
-+ u32 dither_adj1: 6; /* Dither Pattern Adjust 1 */
-+ u32 dither_adj2: 3; /* Dither Pattern Adjust 2 */
-+ u32 dither_adj3: 1; /* Dither Pattern Adjust 3 */
-+ u32 test_mode0 : 1; /* Test Mode 0 */
-+ u32 test_mode1 : 1; /* Test Mode 1 */
-+ u32 test_mode2 : 1; /* Test Mode 2 */
-+ u32 test_mode3 : 1; /* Test Mode 3 */
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp01r {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp02r {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp03r {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp04r {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp05r {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+union fp0fr {
-+ struct {
-+ u32 dummy;
-+ } part;
-+ u32 whole;
-+};
-+
-+
-+
-+
-+/****
-+ * Others
-+ */
-+
-+#define CHIPNAME "MQ-200"
-+
-+extern void mq200_external_setpal(unsigned regno, unsigned long color, unsigned long addr);
-+extern void mq200_external_setqmode(struct mq200_monitor_info*, unsigned long, spinlock_t *);
-+extern void mq200_external_offdisplay(unsigned long);
-+extern void mq200_external_ondisplay (unsigned long);
-+extern int mq200_external_probe(unsigned long);
-+
-+
-+
-+#endif
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/drivers/video/mq200/mq_external.c
---- linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq_external.c 2007-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,427 @@
-+/*
-+ * Copyright (C) 2005 Holger Hans Peter Freyther
-+ *
-+ * Based ON:
-+ *
-+ * linux/drivers/video/mq200fb.c -- MQ-200 for a frame buffer device
-+ * based on linux/driver/video/pm2fb.c
-+ *
-+ * Copyright (C) 2000 Lineo, Japan
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive
-+ * for more details.
-+ */
-+
-+#include <asm/types.h>
-+#include <asm/io.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+
-+#include "mq200_data.h"
-+
-+
-+#if 1
-+#define PRINTK(args...) printk(args)
-+#else
-+#define PRINTK(args...)
-+#endif
-+
-+
-+/****
-+ * power state transition to "state".
-+ */
-+static void
-+power_state_transition(unsigned long register_base, int state)
-+{
-+ int i;
-+ writel(state, PMCSR(register_base));
-+ for (i = 1; ; i++) {
-+ udelay(100);
-+ if ((readl(PMCSR(register_base)) & 0x3) == state) {
-+ break;
-+ }
-+ }
-+}
-+
-+
-+/****
-+ * device configuration initialization.
-+ */
-+static void
-+dc_reset(unsigned long register_base)
-+{
-+ union dc00r dc00r;
-+
-+ /* Reset First */
-+ dc00r.whole = DC_RESET;
-+ writel(dc00r.whole, DC00R(register_base));
-+ udelay(10);
-+
-+
-+ dc00r.whole = 0xEF2082A;
-+ writel(dc00r.whole, DC00R(register_base));
-+ udelay(5);
-+ PRINTK(CHIPNAME ": DC00R = %xx\n", readl(DC00R(register_base)));
-+}
-+
-+
-+/****
-+ * initialize memory interface unit.
-+ */
-+static void
-+miu_reset(unsigned long register_base)
-+{
-+ union mm00r mm00r;
-+ union mm01r mm01r;
-+ union mm02r mm02r;
-+ union mm03r mm03r;
-+ union mm04r mm04r;
-+
-+ /* MIU interface control 1 */
-+ mm00r.whole = 0x4;
-+ writel(mm00r.whole, MM00R(register_base));
-+ udelay(5);
-+ writel(0, MM00R(register_base));
-+ udelay(50);
-+
-+ /* MIU interface control 2
-+ * o PLL 1 output is used as memory clock source.
-+ */
-+ mm01r.whole = 0x4143e086;
-+ writel(mm01r.whole, MM01R(register_base));
-+
-+ /* memory interface control 3 */
-+ mm02r.whole = 0x6d6aabff;
-+ writel(mm02r.whole, MM02R(register_base));
-+
-+ /* memory interface control 5 */
-+ mm04r.whole = 0x10d;
-+ writel(mm04r.whole, MM04R(register_base));
-+
-+ /* memory interface control 4 */
-+ mm03r.whole = 0x1;
-+ writel(mm03r.whole, MM03R(register_base));
-+ mdelay(10);
-+
-+ /* MIU interface control 1 */
-+ mm00r.whole = 0x3;
-+ writel(mm00r.whole, MM00R(register_base));
-+ mdelay(50);
-+}
-+
-+/****
-+ *
-+ */
-+static
-+void fpctrl_reset(unsigned long addr)
-+{
-+ /*
-+ * We're in D0 State, let us set the FPCTRL
-+ */
-+ union fp00r fp00r;
-+ union fp01r fp01r;
-+ union fp02r fp02r;
-+ union fp03r fp03r;
-+ union fp04r fp04r;
-+ union fp0fr fp0fr;
-+
-+ fp00r.whole = 0x6320;
-+ writel(fp00r.whole, FP00R(addr));
-+
-+ fp01r.whole = 0x20;
-+ writel(fp01r.whole, FP01R(addr));
-+
-+ fp04r.whole = 0xBD0001;
-+ writel(fp04r.whole, FP04R(addr));
-+
-+ /* Set Flat Panel General Purpose register first */
-+ fp02r.whole = 0x0;
-+ writel(fp02r.whole, FP02R(addr));
-+
-+ fp03r.whole = 0x0;
-+ writel(fp03r.whole, FP03R(addr));
-+
-+ fp0fr.whole = 0xA16c44;
-+ writel(fp0fr.whole, FP0FR(addr));
-+
-+
-+ /* Set them again */
-+ fp02r.whole = 0x0;
-+ writel(fp02r.whole, FP02R(addr));
-+
-+ fp03r.whole = 0x0;
-+ writel(fp03r.whole, FP03R(addr));
-+}
-+
-+
-+/****
-+ * initialize power management unit.
-+ */
-+static void
-+pmu_reset(unsigned long register_base)
-+{
-+ union pm00r pm00r;
-+ union pm01r pm01r;
-+ union pm02r pm02r;
-+// union pm06r pm06r;
-+// union pm07r pm07r;
-+
-+ /* power management miscellaneous control
-+ * o GE is driven by PLL 1 clock.
-+ */
-+ pm00r.whole = 0xc0900;
-+ writel(pm00r.whole, PM00R(register_base));
-+
-+ /* D1 state control */
-+ pm01r.whole = 0x5000271;
-+ writel(pm01r.whole, PM01R(register_base));
-+
-+ /* D2 state control */
-+ pm02r.whole = 0x271;
-+ writel(pm02r.whole, PM02R(register_base));
-+
-+#if 0
-+ /* PLL 2 programming */
-+ pm06r.whole = 0xE90830;
-+ writel(pm06r.whole, PM06R(register_base));
-+
-+ /* PLL 3 programming */
-+ pm07r.whole = 0xE90830;
-+ writel(pm07r.whole, PM07R(register_base));
-+#endif
-+}
-+
-+/****
-+ * initialize graphics controller 1.
-+ */
-+static void
-+gc1_reset(unsigned long register_base, spinlock_t *lock )
-+{
-+ unsigned long flags;
-+ union gc00r gc00r;
-+ union gc01r gc01r;
-+ union gc02r gc02r;
-+ union gc03r gc03r;
-+ union gc04r gc04r;
-+ union gc05r gc05r;
-+ union gc08r gc08r;
-+ union gc09r gc09r;
-+// union gc0er gc0er;
-+// union gc11r gc11r;
-+ union pm00r pm00r;
-+ union pm06r pm06r;
-+
-+ spin_lock_irqsave(lock, flags);
-+
-+ /* graphics controller CRT control */
-+ gc01r.whole = 0x800;
-+ writel(gc01r.whole, GC01R(register_base));
-+
-+ /* horizontal display 1 control */
-+ gc02r.whole = 0x320041e;
-+ writel(gc02r.whole, GC02R(register_base));
-+
-+ /* vertical display 1 control */
-+ gc03r.whole = 0x2570273;
-+ writel(gc03r.whole, GC03R(register_base));
-+
-+ /* horizontal sync 1 control */
-+ gc04r.whole = 0x3c70347;
-+ writel(gc04r.whole, GC04R(register_base));
-+
-+ /* vertical sync 1 control */
-+ gc05r.whole = 0x25d0259;
-+ writel(gc05r.whole, GC05R(register_base));
-+
-+ /* horizontal window 1 control */
-+ gc08r.whole = 0x131f0000;
-+ writel(gc08r.whole, GC08R(register_base));
-+
-+ /* vertical window 1 control */
-+ gc09r.whole = 0x2570000;
-+ writel(gc09r.whole, GC09R(register_base));
-+
-+#if 0
-+ /* alternate horizontal window 1 control */
-+ writel(0, GC0AR(register_base));
-+
-+ /* alternate vertical window 1 control */
-+ writel(0, GC0BR(register_base));
-+
-+ /* window 1 start address */
-+ writel(0x2004100, GC0CR(register_base));
-+
-+ /* alternate window 1 start address */
-+ writel(0, GC0DR(register_base));
-+
-+ /* window 1 stride */
-+ gc0er.whole = 0x5100048;
-+ writel(gc0er.whole, GC0ER(register_base));
-+
-+ /* reserved register - ??? - */
-+ writel(0x31f, GC0FR(register_base));
-+#endif
-+
-+#if 0
-+ /* hardware cursor 1 position */
-+ writel(0, GC10R(register_base));
-+
-+ /* hardware cursor 1 start address and offset */
-+ gc11r.whole = 0x5100048;
-+ writel(gc11r.whole, GC11R(register_base));
-+
-+ /* hardware cursor 1 foreground color */
-+ writel(0x00ffffff, GC12R(register_base));
-+
-+ /* hardware cursor 1 background color */
-+ writel(0x00000000, GC13R(register_base));
-+#endif
-+
-+ /* PLL 2 programming */
-+ pm06r.whole = 0xE90830;
-+ writel(pm06r.whole, PM06R(register_base));
-+
-+
-+ /* graphics controller 1 register
-+ * o GC1 clock source is PLL 2.
-+ * o hardware cursor is disabled.
-+ */
-+ gc00r.whole = 0x10200C8;
-+ writel(gc00r.whole, GC00R(register_base));
-+
-+ /*
-+ * Enable PLL2 in the PM Register
-+ */
-+ pm00r.whole = readl(PM00R(register_base));
-+ pm00r.part.pll2_enbl = 0x1;
-+ writel(pm00r.whole, PM00R(register_base));
-+
-+ spin_unlock_irqrestore(lock, flags);
-+}
-+
-+
-+/****
-+ * initialize graphics engine.
-+ */
-+static void
-+ge_reset(unsigned long register_base)
-+{
-+ /* drawing command register */
-+ writel(0, GE00R(register_base));
-+
-+ /* promary width and height register */
-+ writel(0, GE01R(register_base));
-+
-+ /* primary destination address register */
-+ writel(0, GE02R(register_base));
-+
-+ /* primary source XY register */
-+ writel(0, GE03R(register_base));
-+
-+ /* primary color compare register */
-+ writel(0, GE04R(register_base));
-+
-+ /* primary clip left/top register */
-+ writel(0, GE05R(register_base));
-+
-+ /* primary clip right/bottom register */
-+ writel(0, GE06R(register_base));
-+
-+ /* primary source and pattern offset register */
-+ writel(0, GE07R(register_base));
-+
-+ /* primary foreground color register/rectangle fill color depth */
-+ writel(0, GE08R(register_base));
-+
-+ /* source stride/offset register */
-+ writel(0, GE09R(register_base));
-+
-+ /* destination stride register and color depth */
-+ writel(0, GE0AR(register_base));
-+
-+ /* image base address register */
-+ writel(0, GE0BR(register_base));
-+}
-+
-+
-+/****
-+ * initialize Color Palette 1.
-+ */
-+static void
-+cp1_reset(unsigned long addr_info)
-+{
-+ int i;
-+
-+ for (i = 0; i < 256; i++)
-+ writel(0, C1xxR(addr_info, i));
-+}
-+
-+
-+
-+
-+/*
-+ * Below functions are called from the skeleton
-+ */
-+void mq200_external_setpal(unsigned regno, unsigned long color, unsigned long addr)
-+{
-+ writel(color,C1xxR(addr,regno));
-+}
-+
-+void mq200_external_setqmode(struct mq200_monitor_info* info,
-+ unsigned long addr, spinlock_t *lock)
-+{
-+ dc_reset(addr); /* device configuration */
-+
-+ power_state_transition(addr, 0); /* transition to D0 state */
-+ pmu_reset(addr); /* power management unit */
-+ miu_reset(addr); /* memory interface unit */
-+ ge_reset(addr); /* graphics engine */
-+ fpctrl_reset(addr); /* reset the panel settings */
-+ gc1_reset(addr, lock); /* graphics controller 1 */
-+ cp1_reset(addr); /* color palette 1 */
-+ mq200_external_ondisplay(addr);
-+}
-+
-+void mq200_external_offdisplay(unsigned long addr)
-+{
-+ /*
-+ * Move the MQ200 to D3 mode
-+ */
-+ power_state_transition(addr, 3);
-+}
-+
-+/**
-+ * to be called after mq200_external_setqmode
-+ */
-+void mq200_external_ondisplay (unsigned long addr)
-+{
-+ /*
-+ * Set the framebuffer details
-+ */
-+ #warning FIX HERE AS WELL
-+ union gc00r gc00r;
-+ union fp00r fp00r;
-+ gc00r.whole = readl(GC00R(addr));
-+ fp00r.whole = readl(FP00R(addr));
-+
-+ if(!(gc00r.whole & 0x1)) {
-+ gc00r.whole |= 1;
-+ writel(gc00r.whole, GC00R(addr));
-+ }
-+
-+ fp00r.whole |= 0x01;
-+ writel(fp00r.whole, FP00R(addr));
-+}
-+
-+int mq200_external_probe(unsigned long addr)
-+{
-+ union pc00r pc00r;
-+ if(readl(PMR(addr)) != PMR_VALUE)
-+ return 0;
-+
-+ pc00r.whole = readl(PC00R(addr));
-+ printk(KERN_INFO "mq200 video driver found Vendor:%d Device:%d\n",
-+ pc00r.part.device, pc00r.part.vendor);
-+ return 1;
-+}
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.20/drivers/video/mq200/mq_skeleton.c
---- linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq_skeleton.c 2007-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,401 @@
-+/*
-+ * Author: Holger Hans Peter Freyther
-+ *
-+ *
-+ * This implements the frame buffer driver interface to communicate
-+ * with the kernel.
-+ * It uses the mq200 routines from the ucLinux driver from Lineo
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/autoconf.h>
-+#include <linux/platform_device.h>
-+#include <linux/module.h>
-+#include <linux/fb.h>
-+#include <linux/types.h>
-+#include <linux/spinlock.h>
-+
-+#include "mq200_data.h"
-+
-+#if CONFIG_SA1100_SIMPAD
-+/*
-+ * Siemens SIMpad specefic data
-+ */
-+#include <asm/arch/simpad.h>
-+#include <asm/arch/hardware.h>
-+
-+#define MQ200_REGIONS simpad_mq200_regions
-+#define MQ200_MONITOR simpad_mq200_panel
-+
-+static struct mq200_io_regions simpad_mq200_regions = {
-+ .fb_size = MQ200_FB_SIZE,
-+ .phys_mmio_base = 0x4be00000,
-+ .virt_mmio_base = 0xf2e00000,
-+ .phys_fb_base = 0x4b800000,
-+ .virt_fb_base = 0xf2800000,
-+};
-+
-+static struct mq200_monitor_info simpad_mq200_panel = {
-+ .horizontal_res = 800,
-+ .vertical_res = 600,
-+ .depth = 16,
-+ .refresh = 60,
-+ .line_length = 1600,
-+ .flags = 0x00130004,
-+};
-+
-+extern long get_cs3_shadow(void);
-+extern void set_cs3_bit(int value);
-+extern void clear_cs3_bit(int value);
-+#endif
-+
-+
-+
-+struct mq200_info {
-+ struct fb_info fb_info;
-+ struct mq200_io_regions io_regions;
-+ struct mq200_monitor_info monitor_info;
-+
-+ /* palette */
-+ u32 pseudo_palette[17]; /* 16 colors + 1 in reserve not that well documented... */
-+ spinlock_t lock;
-+};
-+
-+
-+
-+static int mq200_blank( int blank_mode, struct fb_info *info )
-+{
-+#ifdef CONFIG_SA1100_SIMPAD
-+ if(blank_mode ){
-+ clear_cs3_bit(DISPLAY_ON);
-+ }else {
-+ set_cs3_bit(DISPLAY_ON);
-+ }
-+#endif
-+ return 0;
-+}
-+
-+
-+static int mq200_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info )
-+{ /* TODO do we need sanity checks here */
-+ return 0;
-+}
-+
-+
-+static int mq200_set_par( struct fb_info *info )
-+{
-+ /* TODO set paraemeter */
-+ return 0;
-+}
-+
-+static int mq200_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info )
-+{
-+ struct mq200_info *p;
-+ unsigned long color;
-+ u32* pal = info->pseudo_palette;
-+
-+ p = info->par;
-+
-+ if(regno > 255 )
-+ return 1;
-+
-+ switch( info->var.bits_per_pixel ){
-+ case 16:
-+ pal[regno] =
-+ ((red & 0xf800) >> 0) |
-+ ((green & 0xf800) >> 5) | ((blue & 0xf800) >> 11);
-+ break;
-+ case 24:
-+ pal[regno] =
-+ ((red & 0xff00) << 8) |
-+ ((green & 0xff00)) | ((blue & 0xff00) >> 8);
-+ break;
-+ case 32:
-+ pal[regno] =
-+ ((red & 0xff00) >> 8) |
-+ ((green & 0xff00)) | ((blue & 0xff00) << 8);
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ red &= 0xFF;
-+ green &= 0xFF;
-+ blue &= 0xFF;
-+
-+ color = red | (green << 8) | (blue << 16);
-+ mq200_external_setpal(regno, color, p->io_regions.virt_mmio_base);
-+
-+ return 0;
-+}
-+
-+
-+
-+
-+static struct fb_ops mq200_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_check_var = mq200_check_var,
-+ .fb_set_par = mq200_set_par,
-+ .fb_setcolreg = mq200_setcolreg,
-+#ifdef FB_SOFT_CURSOR
-+ .fb_cursor = soft_cursor, /* FIXME use hardware cursor */
-+#endif
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_blank = mq200_blank,
-+};
-+
-+
-+/*********************************************************************
-+ *
-+ * Device driver and module init code
-+ * this will register to the fb layer later
-+ *
-+ *********************************************************************/
-+static void mq200_internal_init_color( struct fb_bitfield* red,
-+ struct fb_bitfield* green,
-+ struct fb_bitfield* blue,
-+ int bpp )
-+{
-+ switch ( bpp )
-+ {
-+ case 16:
-+ red->offset = 11;
-+ green->offset = 5;
-+ blue->offset = 0;
-+
-+ red->length = 5;
-+ green->length = 6;
-+ blue->length = 5;
-+ break;
-+ case 24:
-+ red->offset = 16;
-+ green->offset = 8;
-+ blue->offset = 0;
-+
-+ red->length = 8;
-+ green->length = 8;
-+ blue->length = 8;
-+ break;
-+ case 32:
-+ red->offset = 0;
-+ green->offset = 8;
-+ blue->offset = 16;
-+
-+ red->length = 8;
-+ green->length = 8;
-+ blue->length = 8;
-+ case 8: /* fall through */
-+ default:
-+ red->offset = green->offset = blue->offset = 0;
-+ red->length = green->length = blue->length = bpp;
-+ break;
-+ }
-+
-+}
-+
-+
-+static struct mq200_info* __init mq200_internal_init_fbinfo(void)
-+{
-+ struct mq200_info *info = NULL;
-+
-+ info = (struct mq200_info*)kmalloc(sizeof(*info), GFP_KERNEL);
-+ if(!info)
-+ return NULL;
-+
-+ /*
-+ * Initialize memory
-+ */
-+ memset(info, 0, sizeof(struct mq200_info) );
-+ spin_lock_init(&info->lock);
-+
-+ /* set the base IO addresses */
-+ info->io_regions = MQ200_REGIONS;
-+ info->monitor_info = MQ200_MONITOR;
-+
-+ info->fb_info.screen_base = (char *)info->io_regions.virt_fb_base;
-+
-+ /* fb_fix_screeninfo filling */
-+ strcpy(info->fb_info.fix.id, "MQ200_FB" );
-+ info->fb_info.fix.smem_start = info->io_regions.phys_fb_base;
-+ info->fb_info.fix.smem_len = info->io_regions.fb_size; /* - CURSOR_IMAGE */
-+ info->fb_info.fix.mmio_start = info->io_regions.phys_mmio_base;
-+ info->fb_info.fix.mmio_len = MQ200_REGS_SIZE;
-+ info->fb_info.fix.type = FB_TYPE_PACKED_PIXELS;
-+ info->fb_info.fix.accel = FB_ACCEL_NONE;
-+ info->fb_info.fix.line_length = MQ200_MONITOR_LINE_LENGTH(info);
-+
-+ if(MQ200_MONITOR_DEPTH(info) <= 8 )
-+ info->fb_info.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-+ else if( MQ200_MONITOR_DEPTH(info) >= 16 )
-+ info->fb_info.fix.visual = FB_VISUAL_DIRECTCOLOR;
-+ else
-+ panic("Calling mq200 with wrong display data\n");
-+
-+ /* set the variable screen info */
-+ info->fb_info.var.xres = MQ200_MONITOR_HORI_RES(info);
-+ info->fb_info.var.yres = MQ200_MONITOR_VERT_RES(info);
-+ info->fb_info.var.xres_virtual = MQ200_MONITOR_HORI_RES(info);
-+ info->fb_info.var.yres_virtual = MQ200_MONITOR_VERT_RES(info);
-+ info->fb_info.var.bits_per_pixel = MQ200_MONITOR_DEPTH(info);
-+
-+ mq200_internal_init_color(&info->fb_info.var.red,
-+ &info->fb_info.var.green,
-+ &info->fb_info.var.blue,
-+ MQ200_MONITOR_DEPTH(info) );
-+
-+ info->fb_info.var.transp.length = info->fb_info.var.transp.offset = 0;
-+ info->fb_info.var.height = info->fb_info.var.width = -1;
-+
-+ info->fb_info.var.vmode = FB_VMODE_NONINTERLACED;
-+ info->fb_info.var.pixclock = 10000;
-+ info->fb_info.var.left_margin = info->fb_info.var.right_margin = 16;
-+ info->fb_info.var.upper_margin = info->fb_info.var.lower_margin = 16;
-+ info->fb_info.var.hsync_len = info->fb_info.var.vsync_len = 8;
-+
-+ info->fb_info.var.nonstd = 0;
-+ info->fb_info.var.activate = FB_ACTIVATE_NOW;
-+ info->fb_info.var.accel_flags = 0;
-+
-+ return info;
-+}
-+
-+
-+extern void mq200_register_attributes(struct device* );
-+/*
-+ * gets called from the bus
-+ * we will register our framebuffer from here
-+ */
-+static int __init mq200_probe(struct device *dev)
-+{
-+ struct mq200_info *info = NULL;
-+ int retv= 0;
-+
-+ info = mq200_internal_init_fbinfo();
-+ if(!mq200_external_probe(info->io_regions.virt_mmio_base))
-+ goto error_out;
-+
-+
-+ GAFR &= ~(1<<3);
-+ GPSR |= (1<<3);
-+ GPDR |= (1<<3);
-+
-+ mq200_external_setqmode(&info->monitor_info,
-+ info->io_regions.virt_mmio_base,
-+ &info->lock);
-+
-+ info->fb_info.fbops = &mq200_ops;
-+ info->fb_info.flags = FBINFO_FLAG_DEFAULT;
-+
-+ mq200_check_var(&info->fb_info.var, &info->fb_info );
-+
-+ fb_alloc_cmap(&info->fb_info.cmap, 1 << MQ200_MONITOR_DEPTH(info), 0 );
-+
-+ info->fb_info.pseudo_palette = (void*)info->pseudo_palette;
-+
-+ /* save the pointer to the mq200 struct in var */
-+ info->fb_info.par = info;
-+
-+ retv = register_framebuffer(&info->fb_info );
-+ if(retv < 0)
-+ goto error_out;
-+
-+
-+ /* will get unset if retv != 0 */
-+ dev_set_drvdata(dev, info );
-+ return retv;
-+
-+/*
-+ * Free the info and exit
-+ */
-+error_out:
-+ kfree(info);
-+ return -EINVAL;
-+}
-+
-+#ifdef CONFIG_PM
-+static struct mq200_info* get_mq200_info( struct device *dev)
-+{
-+ return dev_get_drvdata(dev);
-+}
-+
-+static unsigned long get_mmio_base( struct device *dev )
-+{
-+ struct mq200_info *info = get_mq200_info(dev);
-+ return info->io_regions.virt_mmio_base;
-+}
-+
-+static struct mq200_monitor_info* get_monitor_info( struct device *dev)
-+{
-+ struct mq200_info *info = get_mq200_info(dev);
-+ return &info->monitor_info;
-+}
-+
-+static spinlock_t* get_spinlock( struct device *dev)
-+{
-+ return &get_mq200_info(dev)->lock;
-+}
-+
-+/*
-+ * FIXME: make sure we only call mq200_external_offdisplay only once
-+ * a 2nd time will hang the kernel -zecke
-+ *
-+ * FIXME: save the content of the framebuffer inside dev->saved_state
-+ * so on resume we can memcpy it back into the buffer and userspace
-+ * does not need to redraw
-+ *
-+ * functions for suspending and resuming
-+ */
-+static int mq200_suspend(struct device *dev, pm_message_t state)
-+{
-+
-+ mq200_external_offdisplay( get_mmio_base(dev) );
-+ clear_cs3_bit(DISPLAY_ON);
-+
-+
-+ return 0;
-+}
-+
-+static int mq200_resume(struct device *dev)
-+{
-+ unsigned long mem = get_mmio_base(dev);
-+ struct mq200_monitor_info *monitor = get_monitor_info(dev);
-+ mq200_external_setqmode(monitor, mem, get_spinlock(dev) );
-+
-+
-+ /*
-+ * Set display on if it was on
-+ */
-+ set_cs3_bit(DISPLAY_ON);
-+
-+ return 0;
-+}
-+
-+
-+#endif
-+
-+
-+static struct device_driver mq200fb_driver = {
-+ .name = "simpad-mq200",
-+ .bus = &platform_bus_type,
-+ .probe = mq200_probe, /* will be called after we've registered the driver */
-+ .suspend = mq200_suspend,
-+ .resume = mq200_resume
-+};
-+
-+int __devinit mq200_init(void)
-+{
-+ return driver_register(&mq200fb_driver);
-+}
-+
-+module_init(mq200_init);
-+MODULE_DESCRIPTION("MQ200 framebuffer driver");
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Holger Hans Peter Freyther");
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch b/packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch
deleted file mode 100644
index 3f28d9eace..0000000000
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/Kconfig linux-2.6.20/drivers/mfd/Kconfig
---- linux-2.6.20.vanilla/drivers/mfd/Kconfig 2007-02-10 19:01:56.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/Kconfig 2007-02-14 16:30:15.000000000 +0100
-@@ -23,4 +23,7 @@
- tristate "Touchscreen interface support"
- depends on MCP_UCB1200 && INPUT
-
-+config MCP_UCB1200_SWITCHES
-+ tristate "SIMpad Switches support"
-+ depends on MCP_UCB1200 && INPUT
- endmenu
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/Makefile linux-2.6.20/drivers/mfd/Makefile
---- linux-2.6.20.vanilla/drivers/mfd/Makefile 2007-02-10 19:01:56.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/Makefile 2007-02-14 16:30:15.000000000 +0100
-@@ -6,7 +6,7 @@
- obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
- obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-ts.o
--
-+obj-$(CONFIG_MCP_UCB1200_SWITCHES) += ucb1x00-switches.o
- ifeq ($(CONFIG_SA1100_ASSABET),y)
- obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
- endif
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/ucb1x00-switches.c linux-2.6.20/drivers/mfd/ucb1x00-switches.c
---- linux-2.6.20.vanilla/drivers/mfd/ucb1x00-switches.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/ucb1x00-switches.c 2007-02-14 16:32:57.000000000 +0100
-@@ -0,0 +1,204 @@
-+/*
-+ * linux/drivers/mfd/ucb1x00-switches.c
-+ *
-+ * Copyright (C) 2007 Bernhard Guillon.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ *
-+ * This driver is for the Switches of Siemens SIMpad (CL4,SL4,SLC), T-Sinus-Pad and
-+ * Swisscom WP50 devices.
-+ *
-+ * Six switches are routed to GPIO pins on the UCB1300: S3 -- S8.
-+ *
-+ * This driver is based on the 2.4 ucb1x00-switches, the 2.6 ucb1x00-assabet
-+ * and the ucb1x00-ts driver.
-+ *
-+ */
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/input.h>
-+#include <linux/device.h>
-+
-+#include <asm/dma.h>
-+
-+#include "ucb1x00.h"
-+
-+struct ucb1x00_switches {
-+ struct input_dev *idev;
-+ struct ucb1x00 *ucb;
-+};
-+
-+static void ucb1x00_dev_irq(int idx, void *id)
-+{
-+ static unsigned short int last;
-+ unsigned short int this;
-+ struct ucb1x00_switches *switches = id;
-+ struct input_dev *idev = switches->idev;
-+ ucb1x00_enable(switches->ucb);
-+
-+ this=~ucb1x00_io_read(switches->ucb);
-+ if (this==last) {
-+ return;
-+ }
-+
-+ last=this;
-+ switch (idx) {
-+
-+ case 0:
-+
-+ if
-+ ((this & (1<<0)) != 0) input_report_key(idev, KEY_PROG1, 1);
-+ else
-+ input_report_key(idev, KEY_PROG1, 0);
-+ break;
-+
-+ case 1:
-+
-+ if
-+ ((this & (1<<1)) != 0) input_report_key(idev, KEY_PROG2, 1);
-+ else
-+ input_report_key(idev, KEY_PROG2, 0);
-+ break;
-+
-+ case 2:
-+
-+ if
-+ ((this & (1<<2)) != 0) input_report_key(idev, KEY_UP, 1);
-+ else
-+ input_report_key(idev, KEY_UP, 0);
-+ break;
-+
-+ case 3:
-+
-+ if
-+ ((this & (1<<3)) != 0) input_report_key(idev, KEY_DOWN, 1);
-+ else
-+ input_report_key(idev, KEY_DOWN, 0);
-+ break;
-+
-+ case 4:
-+
-+ if
-+ ((this & (1<<4)) != 0) input_report_key(idev, KEY_LEFT, 1);
-+ else
-+ input_report_key(idev, KEY_LEFT, 0);
-+ break;
-+
-+ case 5:
-+
-+ if
-+ ((this & (1<<5)) != 0) input_report_key(idev, KEY_RIGHT, 1);
-+ else
-+ input_report_key(idev, KEY_RIGHT, 0);
-+ break;
-+
-+ default:
-+
-+ printk(KERN_DEBUG "switches-ucb1x00 is BUGGY!!! \n");
-+
-+ }
-+}
-+
-+static int ucb1x00_switches_add(struct ucb1x00_dev *dev)
-+{
-+ struct ucb1x00_switches *switches;
-+ struct input_dev *idev;
-+ int err,i;
-+
-+ switches = kzalloc(sizeof(struct ucb1x00_switches), GFP_KERNEL);
-+ idev = input_allocate_device();
-+
-+ if (!switches || !idev) {
-+ err = -ENOMEM;
-+ goto fail;
-+ }
-+
-+ switches->ucb = dev->ucb;
-+
-+ idev->private = switches;
-+ idev->name = "SIMpad Switches";
-+ idev->id.product = switches->ucb->id;
-+
-+ __set_bit(EV_KEY, idev->evbit);
-+ __set_bit(EV_REP, idev->evbit);
-+ __set_bit(KEY_PROG1, idev->keybit);
-+ __set_bit(KEY_PROG2, idev->keybit);
-+ __set_bit(KEY_UP, idev->keybit);
-+ __set_bit(KEY_DOWN, idev->keybit);
-+ __set_bit(KEY_LEFT, idev->keybit);
-+ __set_bit(KEY_RIGHT, idev->keybit);
-+
-+ err = input_register_device(idev);
-+ if (err)
-+ goto fail;
-+ switches->idev = idev;
-+ dev->priv = switches;
-+
-+ ucb1x00_enable(switches->ucb);
-+
-+ ucb1x00_io_set_dir(switches->ucb,
-+ UCB_IO_0 | UCB_IO_1 | UCB_IO_2 |
-+ UCB_IO_3 | UCB_IO_4 | UCB_IO_5,
-+ UCB_IO_8 | UCB_IO_9);
-+
-+ ucb1x00_disable(switches->ucb);
-+
-+ for (i = 0; i < 6; ++i) {
-+ ucb1x00_enable_irq(switches->ucb, i, UCB_RISING | UCB_FALLING);
-+ if (ucb1x00_hook_irq(switches->ucb, i, ucb1x00_dev_irq, switches) < 0) {
-+ printk(KERN_ERR "unable to hook IRQ for "
-+ "UCB1300 SWITCH_%d\n", i);
-+ return -EBUSY;
-+ }
-+ }
-+
-+ return 0;
-+
-+fail:
-+ input_free_device(idev);
-+ kfree(switches);
-+ return err;
-+
-+}
-+
-+static void ucb1x00_switches_remove(struct ucb1x00_dev *dev)
-+{
-+ int i;
-+ struct ucb1x00_switches *switches = dev->priv;
-+ input_unregister_device(switches->idev);
-+
-+ for (i = 5; i >= 0; --i) {
-+ ucb1x00_disable_irq(switches->ucb, i, UCB_RISING | UCB_FALLING);
-+
-+ /* Only error conditions are ENOENT and EINVAL; silently
-+ * ignore:
-+ */
-+ ucb1x00_free_irq(switches->ucb, i, NULL);
-+ }
-+ ucb1x00_disable(switches->ucb);
-+ kfree(switches);
-+}
-+
-+static struct ucb1x00_driver ucb1x00_switches_driver = {
-+ .add = ucb1x00_switches_add,
-+ .remove = ucb1x00_switches_remove,
-+};
-+
-+static int __init ucb1x00_switches_init(void)
-+{
-+ return ucb1x00_register_driver(&ucb1x00_switches_driver);
-+}
-+
-+static void __exit ucb1x00_switches_exit(void)
-+{
-+ ucb1x00_unregister_driver(&ucb1x00_switches_driver);
-+}
-+
-+module_init(ucb1x00_switches_init);
-+module_exit(ucb1x00_switches_exit);
-+
-+MODULE_AUTHOR("Bernhard Guillon <Bernhard.Guillon@opensimpad.org>");
-+MODULE_DESCRIPTION("UCB1x00 Switches driver for Siemens SIMpad");
-+MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-GPIO-MMC-mod.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-GPIO-MMC-mod.patch
new file mode 100644
index 0000000000..22f220de8a
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-GPIO-MMC-mod.patch
@@ -0,0 +1,1650 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mmc/Kconfig linux-2.6.21/drivers/mmc/Kconfig
+--- linux-2.6.21.vanilla/drivers/mmc/Kconfig 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/mmc/Kconfig 2007-05-30 18:26:18.000000000 +0200
+@@ -4,6 +4,12 @@
+
+ menu "MMC/SD Card support"
+
++config MMC_SPI_BLOCK
++ tristate "MMC support for SIMpad over GPIO"
++ help
++ Say Y here to enable MMC block device over GPIO
++ if you have done the MMC-Mod. For Module say M.
++
+ config MMC
+ tristate "MMC support"
+ help
+diff -uNr linux-2.6.21.vanilla/drivers/mmc/Makefile linux-2.6.21/drivers/mmc/Makefile
+--- linux-2.6.21.vanilla/drivers/mmc/Makefile 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/mmc/Makefile 2007-05-30 18:26:18.000000000 +0200
+@@ -2,6 +2,8 @@
+ # Makefile for the kernel mmc device drivers.
+ #
+
++obj-$(CONFIG_MMC_SPI_BLOCK) += mmc_spi_block.o
++
+ #
+ # Core
+ #
+diff -uNr linux-2.6.21.vanilla/drivers/mmc/mmc_spi_block.c linux-2.6.21/drivers/mmc/mmc_spi_block.c
+--- linux-2.6.21.vanilla/drivers/mmc/mmc_spi_block.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/mmc/mmc_spi_block.c 2007-05-30 18:30:58.000000000 +0200
+@@ -0,0 +1,1618 @@
++/*
++ * Copyright (c) Cl�ent Ballabriga, 2005 - GPL
++ * Copyright (c) Guylhem Aznar, 2005 - GPL
++ *
++ * Please check http://externe.net/zaurus/simpad-bluetooth reference design first.
++ *
++ * Based on Madsuk/Rohde work on a MMC driver for the WRT54G.
++ *
++ * This is an ugly hack of a driver. I am surprised if it ever works!
++ * So please use a real driver or contribute one to the 2.4/2.6 mmc framework
++ *
++ * mrdata: ported to 2.6
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <linux/sched.h>
++#include <linux/kernel.h>
++#include <linux/fs.h>
++#include <linux/errno.h>
++#include <linux/hdreg.h>
++#include <linux/kdev_t.h>
++#include <linux/blkdev.h>
++#include <linux/spinlock.h>
++#include <linux/time.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++
++#include <linux/platform_device.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/simpad.h>
++#include <asm/arch/gpio.h>
++
++static int major = 121;
++
++#define DEVICE_NAME "mmc_spi"
++
++static int hd_sizes[1<<6];
++static int hd_blocksizes[1<<6];
++static int hd_hardsectsizes[1<<6];
++static int hd_maxsect[1<<6];
++static struct hd_struct hd[1<<6];
++
++static struct gendisk *mmc_disk;
++
++static struct platform_device *mmc_dev; /* the one and only instance */
++
++static spinlock_t mmc_spi_lock;
++
++/*
++ * *******************************************************************
++ *
++ * This is the only configurable part.
++ *
++ * *******************************************************************
++ *
++ */
++
++// #define DEBUG 1
++// #define DEBUG_HD 1
++// #define CHECK_MEDIA_CHANGE // for developement ONLY, not working yet
++
++/* Let that include where it is or compilation fails on INIT_REQUEST/CURRENT */
++
++
++/*
++ * If you are using different GPIOs in your hardware hack, you must
++ * first make sure they are unused for other functions and then
++ * configure them here.
++ *
++ * On the simpad I use spare pins from the UART1 (internal serial port -> DECT 20-polig):
++ *
++ * Funktion PIN ## Original direction GPIO ## SPI function New direction SD/MMC
++ * - DCD PIN 08 (in) GPIO 23 DO - new name: DI -> MISO (in) PIN 7 Data Out
++ * - DTR PIN 11 (out) GPIO 07 CS (out) PIN 1 Chip Select
++ * - RI PIN 14 (in) GPIO 19 CLK (out) PIN 5 Clock
++ * - DSR PIN 16 (in) GPIO 06 DI - new name: DO -> MOSI (out) PIN 2 Data In
++ *
++ *
++ * SPI: MISO = Master In / Slave OUT MOSI = Master Out / Slave In
++ *
++ * Don't worry about in/out original function - the GPIOs will be
++ * reprogrammed.
++ */
++
++#define GPIO_SD_DI 23
++#define GPIO_SD_CS 7
++#define GPIO_SD_CLK 19
++#define GPIO_SD_DO 6
++
++// #define FAST_GPIO_SD_DI GPIO_GPIO23
++// #define FAST_GPIO_SD_CS GPIO_GPIO7
++// #define FAST_GPIO_SD_CLK GPIO_GPIO19
++// #define FAST_GPIO_SD_DO GPIO_GPIO6
++
++#define FAST_GPIO_SD_DI GPIO_UART1_DCD
++#define FAST_GPIO_SD_CS GPIO_UART1_DTR
++#define FAST_GPIO_SD_CLK GPIO_UART1_RI
++#define FAST_GPIO_SD_DO GPIO_UART1_DSR
++
++/*
++ * *******************************************************************
++ *
++ * Do not change anything below !
++ *
++ * *******************************************************************
++ *
++ */
++
++/* GPIO states */
++#define LOW 0
++#define HIGH 1
++
++#define INPUT 0
++#define OUTPUT 1
++
++#define PRESENT 1
++#define ABSENT 0
++
++typedef unsigned int uint32;
++typedef unsigned long u32_t;
++typedef unsigned short u16_t;
++typedef unsigned char u8_t;
++
++static struct timer_list mmc_timer;
++
++// static struct timeval s_zeit, e_zeit;
++
++/* start with no card */
++static int mmc_media_detect = 0;
++static int mmc_media_changed = 1;
++
++
++/////////////////////
++// prototypes
++static int mmc_open(struct inode *inode, struct file *filp);
++static int mmc_release(struct inode *inode, struct file *filp);
++static int mmc_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);
++static void mmc_request(request_queue_t *q);
++
++
++/*
++ * *******************************************************************
++ *
++ * Begin GPIO hardware access functions.
++ *
++ * *******************************************************************
++ *
++ */
++
++#define gpio_read(a) ((GPLR & a) ? 1 : 0)
++#define gpio_write_high(a) GPSR = a
++#define gpio_write_low(a) GPCR = a
++
++/* set MMC_Chip_Select to HIGH (MMC/SD-Card inaktiv) */
++#define MMC_Disable() gpio_write_high( FAST_GPIO_SD_CS)
++
++/* set MMC_Chip_Select to LOW (MMC/SD-Card aktiv) */
++#define MMC_Enable() gpio_write_low( FAST_GPIO_SD_CS)
++
++/*
++ * *******************************************************************
++ *
++ * Begin SPI hardware access functions.
++ *
++ * *******************************************************************
++ *
++ */
++static int mmc_spi_media_detect(void)
++{
++// FIXME: add card detection/test by SPI
++
++ return 1;
++}
++
++static int mmc_spi_hardware_init(void)
++{
++ printk("\nmmc: GPIO init\n");
++
++ /* cut existing functions */
++ gpio_set_alternative_function(GPIO_SD_CLK, 0);
++ gpio_set_alternative_function(GPIO_SD_DI, 0);
++ gpio_set_alternative_function(GPIO_SD_DO, 0);
++ gpio_set_alternative_function(GPIO_SD_CS, 0);
++
++ /* remap directions and set state of spi pins */
++ gpio_direction_output(GPIO_SD_CLK, 0);
++ gpio_direction_input(GPIO_SD_DI);
++ gpio_direction_output(GPIO_SD_DO, 0);
++ gpio_direction_output(GPIO_SD_CS, 0);
++
++ printk("mmc: initialising MMC\n");
++
++ /* Start */
++ MMC_Disable();
++ gpio_write_low( FAST_GPIO_SD_CLK);
++ gpio_write_high( FAST_GPIO_SD_DO);
++ return 0;
++}
++
++/* return what has been read, write the parameter */
++/* Clockrate round about 1,2 MHz */
++
++static unsigned char mmc_spi_readwrite(unsigned char data_out)
++{
++ unsigned char i;
++ unsigned char result = 0;
++
++ for(i = 0x80 ; i != 0 ; i >>= 1)
++ {
++ if (data_out & i)
++ {
++ gpio_write_high( FAST_GPIO_SD_DO);
++ }
++ else
++ {
++ gpio_write_low( FAST_GPIO_SD_DO);
++ }
++
++ gpio_write_high( FAST_GPIO_SD_CLK);
++
++ if (gpio_read( FAST_GPIO_SD_DI) == 1)
++ {
++ result |= i;
++ }
++
++ gpio_write_low( FAST_GPIO_SD_CLK);
++
++ }
++
++ gpio_write_high( FAST_GPIO_SD_DO);
++
++ return (result);
++}
++
++/* return what has been read, write the parameter */
++/* Clockrate round 200 kHz */
++
++static unsigned char mmc_spi_readwrite_slow(unsigned char data_out)
++{
++ unsigned char i;
++ unsigned char result = 0;
++
++ for(i = 0x80 ; i != 0 ; i >>= 1)
++ {
++ if (data_out & i)
++ {
++ gpio_write_high( FAST_GPIO_SD_DO);
++ }
++ else
++ {
++ gpio_write_low( FAST_GPIO_SD_DO);
++ }
++
++ udelay(10);
++
++ gpio_write_high( FAST_GPIO_SD_CLK);
++
++ udelay(10);
++
++ if (gpio_read( FAST_GPIO_SD_DI) == 1)
++ {
++ result |= i;
++ }
++
++ udelay(10);
++
++ gpio_write_low( FAST_GPIO_SD_CLK);
++
++ udelay(10);
++
++ }
++
++ gpio_write_high( FAST_GPIO_SD_DO);
++
++ udelay(10);
++
++ // printk("Send Byte = 0x%2X Receive Byte = 0x%2X \n", data_out, result);
++
++ return (result);
++}
++
++/* return what has been read */
++
++static unsigned char mmc_spi_read_only(void)
++{
++ unsigned char i;
++ unsigned char result = 0;
++
++ for(i = 0x80 ; i != 0 ; i >>= 1)
++ {
++
++ gpio_write_high( FAST_GPIO_SD_CLK);
++
++ if (gpio_read( FAST_GPIO_SD_DI) == 1)
++ {
++ result |= i;
++ }
++
++ gpio_write_low( FAST_GPIO_SD_CLK);
++
++ }
++
++ return (result);
++}
++
++/* write the parameter */
++/* Clockrate round about 3,6 MHz */
++
++static unsigned char mmc_spi_write_only(unsigned char data_out)
++{
++ unsigned char i;
++ unsigned char result = 0;
++
++ for(i = 0x80 ; i != 0 ; i >>= 1)
++ {
++
++ if (data_out & i)
++ {
++ gpio_write_high( FAST_GPIO_SD_DO);
++ }
++ else
++ {
++ gpio_write_low( FAST_GPIO_SD_DO);
++ }
++
++ gpio_write_high( FAST_GPIO_SD_CLK);
++
++ gpio_write_low( FAST_GPIO_SD_CLK);
++
++ }
++
++ gpio_write_high( FAST_GPIO_SD_DO);
++
++ return (result);
++}
++
++
++/**
++ * this function was contributed by: rcichielo from openwrt forums
++ *
++ * Comments added by Marc DENTY on 2007-03-20
++ *
++ * Sequence to read a card's "CID" bytes (name, serial number etc)
++ *
++ * Send: 4ah,00h,00h,00h,00h,00h - CMD10, no args, null CRC
++ * Read: xx - NCR Time
++ * Read: xx - Command Response (Should be 00h)
++ * Read: until FEh is received - Wait for Data token
++ * Read: yy * 16 - Get 16 bytes from CID
++ * Read: zz - Read CRC lo byte
++ * Read: zz - Read CRC hi byte
++ *
++ * Useful locations in the returned data packet:
++ *
++ * 03h-08h Manufacturers's name in ascii
++ * 0ah-0dh Card's 32 bit serial number
++ */
++/**
++ * Comments added by Cyril CATTIAUX on 2007-03-21
++ *
++ * CID format specification (from Sandisk SD Product Manual v1.9)
++ *
++ * cid[00 ] Manufacturer ID (unsigned byte)
++ * cid[01-02] OEM/Application ID (ASCII)
++ * cid[03-07] Product Name (ASCII)
++ * cid[08 ] Product Revistion (BCD coded number)
++ * cid[09-12] Serial Number (32-bit unsigned int)
++ * cid[13-14] Reserved(bit 12->15) - Manufacture Date(bit 0->11)
++ * cid[15 ] CRC7(bit 1->7) - Not used, allways 1 (bit 0)
++*/
++static int mmc_read_cid(unsigned char *cid)
++{
++ unsigned char result = 0;
++ int i;
++
++ MMC_Enable();
++
++ /* wait */
++ for (i = 0; i < 4; i++)
++ {
++ result=mmc_spi_readwrite(0xff);
++ }
++
++ /* issue CID (card identification data) read request */
++ mmc_spi_readwrite(0xff);
++ mmc_spi_readwrite(0x40 | 10);
++ mmc_spi_readwrite(0x00);
++ mmc_spi_readwrite(0x00);
++ mmc_spi_readwrite(0x00);
++ mmc_spi_readwrite(0x00);
++ mmc_spi_readwrite(0x95);
++
++ for (i = 0; i < 8; i++)
++ {
++ result=mmc_spi_readwrite(0xff);
++
++ if(result == 0x00)
++ break;
++ }
++
++ if (result != 0x00) {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return(1);
++ }
++
++ for (i = 0; i < 8; i++) {
++ result = mmc_spi_readwrite(0xff);
++ if (result == 0xfe) break;
++ }
++
++ if (result != 0xfe) {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return(2);
++ }
++
++ for (i = 0; i < 16; i++) {
++ result = mmc_spi_readwrite(0xff);
++ cid[i] = result;
++ }
++
++ mmc_spi_readwrite(0xff);
++ mmc_spi_readwrite(0xff);
++
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++
++ return 0;
++}
++
++
++/**
++ * Comments added by Cyril CATTIAUX on 2007-03-21
++ *
++ * CID format specification (from Sandisk SD Product Manual v1.9)
++ *
++ * cid[00 ] Manufacturer ID (unsigned byte)
++ * cid[01-02] OEM/Application ID (ASCII)
++ * cid[03-07] Product Name (ASCII)
++ * cid[08 ] Product Revision (BCD coded 2 digit number)
++ * cid[09-12] Serial Number (32-bit unsigned int)
++ * cid[13-14] Manufacture Date(bit 0->11) (BCD coded 3 digit number YYM offset from 2000) - Reserved(bit 12->15)
++ * cid[15 ] Not used, allways 1 (bit 0) - CRC7(bit 1->7)
++*/
++static void mmc_show_cid_info(void)
++{
++ int i, result;
++ unsigned short tmps;
++ unsigned char cid[16];
++
++ char manufacturer_id;
++ char oem_id[3];
++ char product_name[6];
++ unsigned char product_revision_h, product_revision_l;
++ unsigned int product_sn;
++ unsigned short product_date_y;
++ unsigned char product_date_m;
++
++ result = mmc_read_cid(cid);
++
++ if (result == 0)
++ {
++ printk("mmc_init: MMC/SD Card ID: ");
++ for (i=0; i<16; i++) {
++ printk("%02X ", cid[i]);
++ }
++ manufacturer_id=cid[0];
++ strncpy(oem_id, &cid[1], 2);
++ oem_id[2]='\0';
++ strncpy(product_name, &cid[3], 5);
++ product_name[5]='\0';
++ product_revision_h=(cid[8] >> 4) & 0xf;
++ product_revision_l=cid[8] & 0xf;
++ product_sn=(cid[9]<<24) + (cid[10]<<16) + (cid[11]<<8) + cid[12];
++ tmps=((cid[13]<<8) + cid[14]) & 0x0fff;
++ product_date_y=2000 + (((tmps >> 8) & 0xf) * 10) + ((tmps >> 4) & 0xf);
++ product_date_m=tmps & 0xf;
++
++ printk("\nManufacturer ID : %02X\n", manufacturer_id);
++ printk("OEM/Application ID: %s\n", oem_id);
++ printk("Product name : %s\n", product_name);
++ printk("Product revision : %d.%d\n", product_revision_h, product_revision_l);
++ printk("Product SN : %08X\n", product_sn);
++ printk("Product Date : %d-%d\n", product_date_y, product_date_m);
++
++ } else {
++ printk("mmc_init: impossible to get card indentification info for reason code: %02x", result);
++ }
++}
++
++
++/*
++static int mmc_spi_hw_test(void)
++{
++ unsigned char result, k;
++
++ unsigned int i, j, t;
++
++ printk("mmc_spi_hw_test -> \n\n");
++ k = 0x55;
++ for ( i = 0 ; i < 5; i++) {
++
++ printk("\n0x%2X - ", k);
++ for ( j = 0 ; j < 8; j++ ) {
++ do_gettimeofday( &s_zeit );
++ result = mmc_spi_readwrite_slow(k);
++ do_gettimeofday( &e_zeit );
++
++ if ( result != k ) {
++ printk("!>ERROR<! Transfer = 0x%2X Receive = 0x%2X Trail = %d \n", k, result, j);
++ // i = 255; j = 1000;
++ }
++
++ t = (e_zeit.tv_sec-s_zeit.tv_sec)*1000000+(e_zeit.tv_usec-s_zeit.tv_usec);
++ printk("Durchlauf: %i Versuch: %i von 8 -> Laufzeit: 0x%X s\n", i , j, t);
++ udelay(200);
++ }
++ printk("ready ");
++
++ // k++;
++ }
++ printk("ready ");
++ printk("\n\n");
++ return (0);
++}
++*/
++
++/*
++static int mmc_spi_speed_test(void)
++{
++ unsigned int i, j, k, l, t;
++
++ MMC_Disable();
++
++ for (k = 1; k < 6; k++)
++ {
++ l = 10000 * k;
++ for (j = 0; j < 5; j++)
++ {
++ do_gettimeofday( &s_zeit );
++ for (i = 0; i < l; i++)
++ mmc_spi_readwrite(0xff);
++ do_gettimeofday( &e_zeit );
++ t = (e_zeit.tv_sec-s_zeit.tv_sec)*1000000+(e_zeit.tv_usec-s_zeit.tv_usec);
++ printk("mmc_spi_readwrite: Laufzeit %u x : 0x%X \n", l, t);
++ }
++ }
++
++ for (k = 1; k < 1; k++)
++ {
++ l = 10000 * k;
++ for (j = 0; j < 1; j++)
++ {
++ do_gettimeofday( &s_zeit );
++ for (i = 0; i < l; i++)
++ mmc_spi_readwrite_slow(0xff);
++ do_gettimeofday( &e_zeit );
++ t = (e_zeit.tv_sec-s_zeit.tv_sec)*1000000+(e_zeit.tv_usec-s_zeit.tv_usec);
++ printk("mmc_spi_readwrite_slow: Laufzeit %u x : 0x%X \n", l, t);
++ }
++ }
++
++ for (k = 1; k < 6; k++)
++ {
++ l = 10000 * k;
++ for (j = 0; j < 5; j++)
++ {
++ do_gettimeofday( &s_zeit );
++ for (i = 0; i < l; i++)
++ mmc_spi_read_only();
++ do_gettimeofday( &e_zeit );
++ t = (e_zeit.tv_sec-s_zeit.tv_sec)*1000000+(e_zeit.tv_usec-s_zeit.tv_usec);
++ printk("mmc_spi_read_only: Laufzeit %u x : 0x%X \n", l, t);
++ }
++ }
++
++ for (k = 1; k < 6; k++)
++ {
++ l = 10000 * k;
++ for (j = 0; j < 5; j++)
++ {
++ do_gettimeofday( &s_zeit );
++ for (i = 0; i < l; i++)
++ mmc_spi_write_only(0xff);
++ do_gettimeofday( &e_zeit );
++ t = (e_zeit.tv_sec-s_zeit.tv_sec)*1000000+(e_zeit.tv_usec-s_zeit.tv_usec);
++ printk("mmc_spi_write_only: Laufzeit %u x : 0x%X \n", l, t);
++ }
++ }
++
++ return (1);
++
++}
++*/
++
++
++static int mmc_spi_card_init(void)
++{
++ unsigned char result = 0;
++ short i, j;
++
++// unsigned long flags;
++
++ // save_flags(flags);
++ // cli();
++
++/*
++ printk("GPIO_SD_CS dir: %u alt: %u\n", gpio_getdir(&gp, GPIO_SD_CS), gpio_getalt(&gp, GPIO_SD_CS));
++ printk("GPIO_SD_DI dir: %u alt: %u\n", gpio_getdir(&gp, GPIO_SD_DI), gpio_getalt(&gp, GPIO_SD_DI));
++ printk("GPIO_SD_DO dir: %u alt: %u\n", gpio_getdir(&gp, GPIO_SD_DO), gpio_getalt(&gp, GPIO_SD_DO));
++ printk("GPIO_SD_CS dir: %u alt: %u\n", gpio_getdir(&gp, GPIO_SD_CLK), gpio_getalt(&gp, GPIO_SD_CLK));
++*/
++
++ // printk("\nmmc: mmc_spi_hw_test() *START*\n");
++
++ // mmc_spi_hw_test();
++
++ printk("\nmmc: card init 1/2 (CMD0)\n");
++
++ for (j = 0; j < 10; j++)
++ {
++ MMC_Disable();
++
++ for (i = 0; i < 10; i++)
++ mmc_spi_readwrite_slow(0xff);
++
++ MMC_Enable();
++
++ mmc_spi_readwrite_slow(0xff);
++
++ mmc_spi_readwrite_slow(0x40);
++
++ for (i = 0; i < 4; i++) {
++
++ mmc_spi_readwrite_slow(0x00);
++
++ }
++
++ mmc_spi_readwrite_slow(0x95);
++
++ for (i = 0; i < 8; i++) {
++
++ result = mmc_spi_readwrite_slow(0xff);
++
++#ifdef DEBUG_HD
++ if (result != 0xff) {
++ if (result > 0x1F && result < 0x80)
++ printk("mmc: resp. (CMD0) Versuch(%d) BYTE: %d result = 0x%X Zeichen = %c\n", j, i, result, result);
++ else
++ printk("mmc: resp. (CMD0) Versuch(%d) BYTE: %d result = 0x%X\n", j, i, result);
++ }
++#endif
++ if (result == 0x01)
++ break;
++ }
++
++ if (result == 0x01)
++ break;
++
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++
++ mdelay(60);
++ }
++
++ if (result != 0x01) {
++
++ printk("mmc: card init 1/2 error: %d (CMD0) failed\n", result);
++ printk(" -> Hint: MMC/SD-Card realy (fully) inserted ?\n");
++
++ return (1);
++ }
++
++ printk("mmc: card init 1/2 (CMD0) success\n\n");
++
++ mdelay(1);
++
++ printk("mmc: card init 2/2 (CMD1)\n");
++ for (j = 0; j < 10; j++) {
++
++ mmc_spi_readwrite_slow(0xff);
++ mmc_spi_readwrite_slow(0x41);
++ for (i = 0; i < 4; i++)
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x95);
++ for (i = 0; i < 8; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++#ifdef DEBUG_HD
++ // if (result >= 32 && result <= 127)
++ // printk("mmc: response (CMD1) Versuch(%d) start token BYTE: %d result = 0x%X Zeichen = %c\n", j, i, result, result);
++ // else
++ // printk("mmc: response (CMD1) Versuch(%d) start token BYTE: %d result = 0x%X\n", j, i, result);
++#endif
++ if (result == 0x00)
++ break;
++ }
++
++ mmc_spi_readwrite_slow(0xff);
++
++ if (result == 0x00) {
++ printk("mmc: card init 2/2 (CMD1) success\n\n");
++
++ mmc_spi_readwrite_slow(0xff);
++ mmc_spi_readwrite_slow(0x4d);
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x95);
++ for (i = 0; i < 6; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++#ifdef DEBUG_HD
++ // if (result > 31 && result < 128)
++ // printk("mmc: response (CMD13) Versuch(%d) start token BYTE: %d result = 0x%X Zeichen = %c\n", j, i, result, result);
++ // else
++ // printk("mmc: response (CMD13) Versuch(%d) start token BYTE: %d result = 0x%X\n", j, i, result);
++#endif
++ // if (result == 0x00)
++ // break;
++ }
++ // mdelay(60);
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // mmc_spi_readwrite_slow(0xff);
++ // mdelay(10);
++
++ // restore_flags(flags);
++
++ return (0);
++ }
++ mdelay(60);
++ }
++ return (2);
++}
++
++
++static int mmc_spi_card_config(void)
++{
++ unsigned char result = 0;
++ short i, j;
++ unsigned char csd[32];
++ unsigned int c_size;
++ unsigned int c_size_mult;
++ unsigned int mult;
++ unsigned int read_bl_len;
++ unsigned int blocknr = 0;
++ unsigned int block_len = 0;
++ unsigned int size = 0;
++ unsigned char rd_buffer[528];
++// unsigned long flags;
++
++ MMC_Enable();
++
++ mmc_spi_readwrite_slow(0xff);
++ result = mmc_spi_readwrite_slow(0x51);
++ // mmc_spi_readwrite_slow(0x4A);
++ // mmc_spi_readwrite_slow(0x40+0x0D);
++ // mmc_spi_readwrite_slow(0x42);
++ for (i = 0; i < 4; i++)
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x95);
++
++ // printk("mmc: (CMD17) response von 0x51 result = 0x%X\n", result);
++
++ for (i = 0; i < 8; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++#ifdef DEBUG_HD
++ // printk("mmc: (CMD17) response (start token) result = 0x%X\n", result);
++#endif
++ if (result == 0x00)
++ break;
++ }
++ if (result != 0x00) {
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // restore_flags(flags);
++ // mmc_spi_readwrite_slow(0xff);
++ return (1);
++ }
++ // restore_flags(flags);
++ for (i = 0; i < 8; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++ rd_buffer[i] = result;
++#ifdef DEBUG_HD
++ /*
++ if (result >= 32 && result <= 127)
++ printk("mmc: CMD17 response (start token) result = 0x%X Zeichen = %c\n", result, result);
++ else
++ printk("mmc: CMD17 response (start token) result = 0x%X\n", result);
++ */
++#endif
++ // if (result == 0xfe)
++ // break;
++ }
++ /*
++ if (result != 0xfe) {
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ mmc_spi_readwrite_slow(0xff);
++ return(1);
++ }
++ */
++
++ for (i = 8; i < 520; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++ rd_buffer[i] = result;
++ }
++ for (i = 0; i < 2; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++ }
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // mmc_spi_readwrite_slow(0xff);
++
++ printk("Buffer - Start\n");
++
++ for ( i = 0 ; i < 33 ; i++) {
++ printk("\r\n%4X - ", i*16);
++ for ( j = 0 ; j < 16 ; j++) {
++ if ( rd_buffer[i*16+j] < 16)
++ printk("0%X ", rd_buffer[i*16+j]);
++ else
++ printk("%2X ", rd_buffer[i*16+j]);
++ }
++ for ( j = 0 ; j < 16 ; j++) {
++ if ( rd_buffer[i*16+j] < ' ')
++ printk(".");
++ else
++ printk("%c", rd_buffer[i*16+j]);
++ }
++ }
++
++ printk("\nBuffer - Ende\n");
++
++ mmc_show_cid_info();
++
++ for(j = 0 ; j < 1; j++) {
++ MMC_Enable();
++
++ // mdelay(1);
++
++ // save_flags(flags);
++ // cli();
++ mmc_spi_readwrite_slow(0xff);
++ mmc_spi_readwrite_slow(0x49);
++ // mmc_spi_readwrite_slow(0x4A);
++ // mmc_spi_readwrite_slow(0x40+0x0D);
++ // mmc_spi_readwrite_slow(0x42);
++ for (i = 0; i < 4; i++)
++ mmc_spi_readwrite_slow(0x00);
++ mmc_spi_readwrite_slow(0x95);
++ for (i = 0; i < 8; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++#ifdef DEBUG_HD
++ // printk("mmc: (CMD9) response (start token) result = 0x%X\n", result);
++#endif
++ if (result == 0x00)
++ break;
++ }
++ // restore_flags(flags);
++ if (result != 0x00) {
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // mmc_spi_readwrite_slow(0xff);
++ return (1);
++ }
++ for (i = 0; i < 22; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++#ifdef DEBUG_HD
++ if (result >= 32 && result <= 127)
++ printk("mmc: response (start token) result = 0x%X Zeichen = %c\n", result, result);
++ else
++ printk("mmc: response (start token) result = 0x%X\n", result);
++#endif
++ if (result == 0xfe)
++ break;
++ }
++ if (result == 0xfe)
++ break;
++
++ if (result != 0xfe) {
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // mmc_spi_readwrite_slow(0xff);
++ }
++ mdelay(60);
++ }
++
++ if (result != 0xfe) {
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ printk("mmc: mmc card config (CMD9) failed result = 0x%X\n\n", result);
++ return (2);
++ }
++ for (i = 0; i < 16; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++ csd[i] = result;
++ }
++ for (i = 0; i < 2; i++) {
++ result = mmc_spi_readwrite_slow(0xff);
++ }
++ MMC_Disable();
++ mmc_spi_readwrite_slow(0xff);
++ // mmc_spi_readwrite_slow(0xff);
++
++ if (result == 0x00)
++ return (3);
++
++ c_size = (csd[8] & 0xC0) + (csd[7] << 8) + ((csd[6] & 0x03) << 16);
++ c_size >>= 6;
++ c_size_mult = (csd[10] & 0x80) + ((csd[9] & 0x03) << 8);
++ c_size_mult >>= 7;
++ read_bl_len = csd[5] & 0x0f;
++ mult = 1;
++ mult <<= c_size_mult + 2;
++ blocknr = (c_size + 1) * mult;
++ block_len = 1;
++ block_len <<= read_bl_len;
++ size = block_len * blocknr;
++ size >>= 10;
++
++ for (i = 0; i < (1 << 6); i++) {
++ hd_blocksizes[i] = 1024;
++ hd_hardsectsizes[i] = block_len;
++ hd_maxsect[i] = 256;
++ }
++ hd_sizes[0] = size;
++ hd[0].nr_sects = blocknr;
++
++ printk("Size = %d, hardsectsize = %d, sectors = %d\n",
++ size, block_len, blocknr);
++
++ return 0;
++}
++
++
++/*
++ * *******************************************************************
++ *
++ * End of SPI hardware access functions.
++ *
++ * *******************************************************************
++ */
++
++
++static int mmc_spi_write_block(unsigned int dest_addr, unsigned char *data)
++{
++ unsigned int address;
++ unsigned char result = 0;
++ unsigned char ab0, ab1, ab2, ab3;
++ int i;
++
++ address = dest_addr;
++
++ ab3 = 0xff & (address >> 24);
++ ab2 = 0xff & (address >> 16);
++ ab1 = 0xff & (address >> 8);
++ ab0 = 0xff & address;
++
++ MMC_Enable();
++
++ mmc_spi_readwrite(0xff);
++
++ mmc_spi_readwrite(0x58);
++ mmc_spi_readwrite(ab3); /* msb */
++ mmc_spi_readwrite(ab2);
++ mmc_spi_readwrite(ab1);
++ mmc_spi_readwrite(ab0); /* lsb */
++ mmc_spi_readwrite(0xff);
++
++ for (i = 0; i < 8; i++)
++ {
++ result = mmc_spi_readwrite(0xff);
++ if (result == 0x00)
++ {
++ break;
++ }
++ }
++
++ if (result != 0x00)
++ {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return (1);
++ }
++
++ mmc_spi_readwrite(0xfe);
++
++ for (i = 0; i < 512; i += 32)
++ {
++ mmc_spi_write_only(data[i]);
++ mmc_spi_write_only(data[i+1]);
++ mmc_spi_write_only(data[i+2]);
++ mmc_spi_write_only(data[i+3]);
++ mmc_spi_write_only(data[i+4]);
++ mmc_spi_write_only(data[i+5]);
++ mmc_spi_write_only(data[i+6]);
++ mmc_spi_write_only(data[i+7]);
++ mmc_spi_write_only(data[i+8]);
++ mmc_spi_write_only(data[i+9]);
++ mmc_spi_write_only(data[i+10]);
++ mmc_spi_write_only(data[i+11]);
++ mmc_spi_write_only(data[i+12]);
++ mmc_spi_write_only(data[i+13]);
++ mmc_spi_write_only(data[i+14]);
++ mmc_spi_write_only(data[i+15]);
++ mmc_spi_write_only(data[i+16]);
++ mmc_spi_write_only(data[i+17]);
++ mmc_spi_write_only(data[i+18]);
++ mmc_spi_write_only(data[i+19]);
++ mmc_spi_write_only(data[i+20]);
++ mmc_spi_write_only(data[i+21]);
++ mmc_spi_write_only(data[i+22]);
++ mmc_spi_write_only(data[i+23]);
++ mmc_spi_write_only(data[i+24]);
++ mmc_spi_write_only(data[i+25]);
++ mmc_spi_write_only(data[i+26]);
++ mmc_spi_write_only(data[i+27]);
++ mmc_spi_write_only(data[i+28]);
++ mmc_spi_write_only(data[i+29]);
++ mmc_spi_write_only(data[i+30]);
++ mmc_spi_write_only(data[i+31]);
++ }
++
++ mmc_spi_readwrite(0xff);
++ mmc_spi_readwrite(0xff);
++
++ for (i = 0; i < 1000000; i++)
++ {
++ result = mmc_spi_readwrite(0xff);
++ if (result == 0xff)
++ {
++ break;
++ }
++ }
++
++ if (result != 0xff)
++ {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return (3);
++ }
++
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return (0);
++}
++
++static int mmc_spi_read_block(unsigned char *data, unsigned int src_addr)
++{
++ unsigned int address;
++ unsigned char result = 0;
++ unsigned char ab0, ab1, ab2, ab3;
++ unsigned long flags;
++ int i, j;
++
++ address = src_addr;
++
++ ab3 = 0xff & (address >> 24);
++ ab2 = 0xff & (address >> 16);
++ ab1 = 0xff & (address >> 8);
++ ab0 = 0xff & address;
++
++ MMC_Enable();
++
++ mmc_spi_readwrite(0xff);
++
++ mmc_spi_readwrite(0x51);
++ mmc_spi_readwrite(ab3); /* msb */
++ mmc_spi_readwrite(ab2);
++ mmc_spi_readwrite(ab1);
++ mmc_spi_readwrite(ab0); /* lsb */
++ mmc_spi_readwrite(0xff);
++
++ for (i = 0; i < 8; i++)
++ {
++ result = mmc_spi_readwrite(0xff);
++ if (result == 0x00)
++ {
++ break;
++ }
++ }
++
++ if (result != 0x00)
++ {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return (1);
++ }
++
++ for (i = 0; i < 100000; i++)
++ {
++ result = mmc_spi_readwrite(0xff);
++ if (result == 0xfe)
++ {
++ break;
++ }
++ }
++
++ if (result != 0xfe)
++ {
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++ return (2);
++ }
++
++ for (i = 0; i < 512; i += 32 )
++ {
++ data[i] = mmc_spi_read_only();
++ data[i+1] = mmc_spi_read_only();
++ data[i+2] = mmc_spi_read_only();
++ data[i+3] = mmc_spi_read_only();
++ data[i+4] = mmc_spi_read_only();
++ data[i+5] = mmc_spi_read_only();
++ data[i+6] = mmc_spi_read_only();
++ data[i+7] = mmc_spi_read_only();
++ data[i+8] = mmc_spi_read_only();
++ data[i+9] = mmc_spi_read_only();
++ data[i+10] = mmc_spi_read_only();
++ data[i+11] = mmc_spi_read_only();
++ data[i+12] = mmc_spi_read_only();
++ data[i+13] = mmc_spi_read_only();
++ data[i+14] = mmc_spi_read_only();
++ data[i+15] = mmc_spi_read_only();
++ data[i+16] = mmc_spi_read_only();
++ data[i+17] = mmc_spi_read_only();
++ data[i+18] = mmc_spi_read_only();
++ data[i+19] = mmc_spi_read_only();
++ data[i+20] = mmc_spi_read_only();
++ data[i+21] = mmc_spi_read_only();
++ data[i+22] = mmc_spi_read_only();
++ data[i+23] = mmc_spi_read_only();
++ data[i+24] = mmc_spi_read_only();
++ data[i+25] = mmc_spi_read_only();
++ data[i+26] = mmc_spi_read_only();
++ data[i+27] = mmc_spi_read_only();
++ data[i+28] = mmc_spi_read_only();
++ data[i+29] = mmc_spi_read_only();
++ data[i+30] = mmc_spi_read_only();
++ data[i+31] = mmc_spi_read_only();
++ }
++
++ result = mmc_spi_readwrite(0xff);
++ result = mmc_spi_readwrite(0xff);
++
++ MMC_Disable();
++ mmc_spi_readwrite(0xff);
++
++ return (0);
++}
++
++/*
++static int mmc_revalidate(kdev_t dev)
++{
++ int target, max_p, start, i;
++
++ mmc_media_detect = mmc_spi_media_detect();
++
++ if (mmc_media_detect == 0)
++ {
++ return -ENODEV;
++ }
++
++ target = DEVICE_NR(dev);
++
++ max_p = hd_gendisk.max_p;
++ start = target << 6;
++ for (i = max_p - 1; i >= 0; i--)
++ {
++ int minor = start + i;
++ invalidate_device(MKDEV(MAJOR_NR, minor), 1);
++ hd_gendisk.part[minor].start_sect = 0;
++ hd_gendisk.part[minor].nr_sects = 0;
++ }
++
++ grok_partitions(&hd_gendisk, target, 1 << 6, hd_sizes[0] * 2);
++
++ return 0;
++}
++*/
++
++
++static int mmc_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++ unsigned long arg)
++{
++ if (!inode || !inode->i_rdev)
++ return -EINVAL;
++
++ switch (cmd) {
++#if 0
++ case BLKGETSIZE:
++ return put_user(hd[MINOR(inode->i_rdev)].nr_sects,
++ (unsigned long *)arg);
++ case BLKGETSIZE64:
++ return put_user((u64) hd[MINOR(inode->i_rdev)].
++ nr_sects, (u64 *) arg);
++ case BLKRRPART:
++ if (!capable(CAP_SYS_ADMIN))
++ return -EACCES;
++
++ return mmc_revalidate(inode->i_rdev);
++#endif
++ case HDIO_GETGEO:
++ {
++ struct block_device *bdev = inode->i_bdev;
++ struct hd_geometry *loc, g;
++ loc = (struct hd_geometry *)arg;
++ if (!loc)
++ return -EINVAL;
++ memset(loc, 0, sizeof(struct hd_geometry));
++ g.heads = 4;
++ g.sectors = 16;
++ g.cylinders = get_capacity(bdev->bd_disk) / (4*16);
++ g.start = get_start_sect(bdev);
++ return copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0;
++ }
++ default:
++ return -ENOTTY;
++ }
++}
++
++
++/*
++static int mmc_check_media_change(kdev_t dev)
++{
++ (void) dev;
++ if (mmc_media_changed == 1)
++ {
++ mmc_media_changed = 0;
++ return 1;
++ }
++ else
++ {
++ return 0;
++ }
++}
++*/
++
++
++/*
++static int mmc_init(void)
++{
++ int result;
++
++ result = mmc_spi_hardware_init();
++
++ if (result != 0)
++ {
++ printk("mmc: error %d in mmc_spi_hardware_init\n", result);
++ return -1;
++ }
++
++
++ result = mmc_spi_hw_test();
++
++ if (result != 0)
++ {
++ printk("\n mmc: mmc_spi_hw_test i.O. \n\n");
++ return -1;
++ }
++
++
++ result = mmc_spi_speed_test();
++
++ if (result != 0)
++ {
++ printk("\n mmc: mmc_spi_speed_test i.O. \n\n");
++ return -1;
++ }
++
++
++ result = mmc_spi_card_init();
++ mdelay(50);
++ if (result != 0)
++ {
++ // Give it an extra shot
++ // result = mmc_spi_card_init();
++ if (result != 0)
++ {
++ printk("mmc: error %d in mmc_card_init\n", result);
++ return -1;
++ }
++ }
++
++ result = mmc_spi_card_config();
++ if (result != 0)
++ {
++ printk("mmc: error %d in mmc_card_config\n", result);
++ return -1;
++ }
++
++
++ return 0;
++}
++*/
++
++/*
++static void mmc_exit(void)
++{
++}
++*/
++
++
++/*
++static void mmc_check_media(void)
++{
++ int old_state, new_state;
++ int result;
++
++ old_state = mmc_media_detect;
++ new_state = mmc_spi_media_detect();
++
++ if (old_state != new_state)
++ {
++ mmc_media_changed = 1;
++ if (new_state == PRESENT)
++ {
++ result = mmc_init();
++ if (result != 0)
++ {
++ printk("mmc: error %d in mmc_init\n", result);
++ }
++ else
++ {
++ mmc_exit();
++ }
++ }
++ }
++
++#ifdef CHECK_MEDIA_CHANGE
++ del_timer(&mmc_timer);
++ mmc_timer.expires = jiffies + 10*HZ;
++ add_timer(&mmc_timer);
++#endif
++
++}
++*/
++
++
++/* NB: There might be several requests in the queue, simply dequeuing only one
++ and not checking for more will cause a stall because the block subsystem
++ will not call this function again unless the queue is "plugged" which can
++ only happen if it runs empty... */
++static void mmc_spi_request(struct request_queue *q)
++{
++ struct request *req;
++ int ret;
++
++ unsigned int mmc_address;
++ unsigned char *buffer_address;
++ int nr_sectors;
++ int i;
++ int result, success;
++
++ if (blk_queue_plugged(q)) {
++ return;
++ }
++
++ spin_lock(&mmc_spi_lock);
++ for(;;) {
++ req = elv_next_request(q);
++ if (!req)
++ break;
++
++ if (!blk_fs_request(req)) {
++ printk("not a blk_fs_request\n");
++ spin_unlock(&mmc_spi_lock);
++ continue;
++ }
++
++ mmc_address = req->sector * hd_hardsectsizes[0];
++ buffer_address = req->buffer;
++ nr_sectors = req->current_nr_sectors;
++ success = 1;
++ if (rq_data_dir(req) == READ) {
++ spin_unlock_irq(q->queue_lock);
++ for (i = 0; i < nr_sectors; i++) {
++ result = mmc_spi_read_block(buffer_address, mmc_address);
++ if (unlikely(result < 0)) {
++ printk(KERN_ERR "mmi_spi_block: error reading block (%d)\n", result);
++ success = 0;
++ break;
++ }
++ mmc_address += hd_hardsectsizes[0];
++ buffer_address += hd_hardsectsizes[0];
++ }
++ spin_lock_irq(q->queue_lock);
++ } else {
++ spin_unlock_irq(q->queue_lock);
++ for (i = 0; i < nr_sectors; i++) {
++ result = mmc_spi_write_block(mmc_address, buffer_address);
++ if (unlikely(result < 0)) {
++ printk(KERN_ERR "mmi_spi_block: error writing block (%d)\n", result);
++ success = 0;
++ break;
++ }
++ mmc_address += hd_hardsectsizes[0];
++ buffer_address += hd_hardsectsizes[0];
++ }
++ spin_lock_irq(q->queue_lock);
++ }
++ ret = end_that_request_chunk(req, success, nr_sectors * hd_hardsectsizes[0]);
++ if (!ret) {
++ blkdev_dequeue_request(req);
++ end_that_request_last(req, 0);
++ }
++ }
++ spin_unlock(&mmc_spi_lock);
++}
++
++
++static int mmc_open(struct inode *inode, struct file *filp)
++{
++ // int device;
++ (void) filp;
++ mmc_media_detect = mmc_spi_media_detect();
++
++ if (mmc_media_detect == 0)
++ return -ENODEV;
++
++ return 0;
++}
++
++static int mmc_release(struct inode *inode, struct file *filp)
++{
++ return 0;
++}
++
++
++static struct block_device_operations mmc_spi_bdops = {
++ .open = mmc_open,
++ .release = mmc_release,
++ .ioctl = mmc_ioctl,
++ .owner = THIS_MODULE,
++#if 0
++ .check_media_change = mmc_check_media_change,
++ .revalidate = mmc_revalidate,
++#endif
++};
++
++static int detect_card(void)
++{
++ int result;
++
++ result = mmc_spi_card_init();
++ if (result != 0) {
++ // Give it an extra shot
++ result = mmc_spi_card_init();
++ if (result != 0) {
++ printk(KERN_ERR "mmc_spi_block: error in mmc_card_init (%d)\n", result);
++ return -ENODEV;
++ }
++ }
++
++ result = mmc_spi_card_config();
++ // result = mmc_spi_speed_test();
++ if (result != 0) {
++ printk(KERN_ERR "mmc_spi_block: error in mmc_card_config (%d)\n", result);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++/* Fills in the gendisk structure from the received card
++ data. */
++static int gendisk_init(struct device *dev, struct gendisk *gd)
++{
++ if (!gd)
++ return -EINVAL;
++
++ gd->major = major;
++ gd->first_minor = 0; /* only one device supported */
++ gd->fops = &mmc_spi_bdops;
++ gd->driverfs_dev = dev;
++
++ gd->queue = blk_init_queue(mmc_spi_request,NULL);
++
++ if (!gd->queue)
++ return -ENOMEM;
++
++ sprintf(gd->disk_name, "mmcblk");
++
++ blk_queue_hardsect_size(gd->queue, hd_hardsectsizes[0]);
++
++ set_capacity(gd, hd_sizes[0]<<1);
++
++ return 0;
++}
++
++static int gendisk_fini(struct gendisk *gd)
++{
++ BUG_ON(!gd);
++
++ if (gd->queue)
++ blk_cleanup_queue(gd->queue);
++
++ del_gendisk(gd);
++}
++
++/* platform driver device instance routines */
++static int mmc_spi_probe(struct platform_device *pdev)
++{
++ int result;
++ printk("$Id: mmc_spi_block.c,v 1.04 2007/05/25 23:27:16 mrdata Exp $\n");
++
++ result = mmc_spi_hardware_init();
++ if (result != 0) {
++ printk(KERN_ERR "mmc_spi_block: error in mmc_spi_hardware_init (%d)\n", result);
++ result = -ENODEV;
++ return result;
++ }
++
++ result = detect_card();
++ if (result < 0)
++ return result;
++
++ mmc_media_detect = 1;
++
++ result = register_blkdev(major, DEVICE_NAME);
++ if (result < 0)
++ return result;
++
++ if (!major)
++ major = result;
++
++ /* allow 8 partitions per device */
++ BUG_ON(mmc_disk!=NULL);
++ mmc_disk = alloc_disk(1 << 3);
++ if (!mmc_disk) {
++ result = -ENOMEM;
++ goto out;
++ }
++
++ result = gendisk_init(&pdev->dev, mmc_disk);
++ if (result < 0)
++ goto out;
++
++ add_disk(mmc_disk);
++
++ /*init_timer(&mmc_timer);
++ mmc_timer.expires = jiffies + HZ;
++ mmc_timer.function = (void *)mmc_check_media;
++ add_timer(&mmc_timer); */
++ return 0;
++
++out:
++ if (mmc_disk)
++ put_disk(mmc_disk);
++
++ unregister_blkdev(major, DEVICE_NAME);
++ return result;
++}
++
++static int mmc_spi_remove(struct platform_device *dev)
++{
++ int ret;
++
++ if (mmc_disk) {
++ gendisk_fini(mmc_disk);
++ put_disk(mmc_disk);
++ }
++
++ ret = unregister_blkdev(major, DEVICE_NAME);
++ return ret;
++}
++
++struct platform_driver mmc_spi_driver = {
++ .probe = mmc_spi_probe,
++ .remove = mmc_spi_remove,
++ .driver = {
++ .name = "mmc_spi",
++ .owner = THIS_MODULE,
++ },
++};
++
++
++/* module init/exit */
++static int __init mmc_block_spi_init(void)
++{
++ int ret;
++ spin_lock_init(&mmc_spi_lock);
++
++ ret = platform_driver_register(&mmc_spi_driver);
++ if (ret < 0)
++ return ret;
++
++ /* we just support one device */
++ mmc_dev = platform_device_register_simple("mmc_spi", -1, NULL, 0);
++ if (IS_ERR(mmc_dev))
++ return PTR_ERR(mmc_dev);
++
++ return 0;
++}
++
++
++static void __exit mmc_block_spi_exit(void)
++{
++ platform_driver_unregister(&mmc_spi_driver);
++ if (mmc_dev)
++ platform_device_unregister(mmc_dev);
++}
++
++
++module_init(mmc_block_spi_init);
++module_exit(mmc_block_spi_exit);
++
++MODULE_AUTHOR("Madsuk,Rohde,TaGana,Carsten Juttner <carjay@gmx.net>,Guylhem Aznar <mmc-driver@externe.net>,mrdata");
++MODULE_DESCRIPTION("Driver for MMC/SD-Cards in SPI mode by GPIO");
++MODULE_SUPPORTED_DEVICE("SIMpad");
++MODULE_LICENSE("GPL");
++
++module_param(major, int, 0444);
++MODULE_PARM_DESC(major, "specify the major device number for the MMC/SD SPI driver");
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-battery-old-way-but-also-with-sysfs.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-battery-old-way-but-also-with-sysfs.patch
new file mode 100644
index 0000000000..ee18ff2bb0
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-battery-old-way-but-also-with-sysfs.patch
@@ -0,0 +1,571 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/Makefile linux-2.6.21/drivers/mfd/Makefile
+--- linux-2.6.21.vanilla/drivers/mfd/Makefile 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/mfd/Makefile 2007-05-30 18:43:10.000000000 +0200
+@@ -12,3 +12,7 @@
+ ifeq ($(CONFIG_SA1100_ASSABET),y)
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
+ endif
++
++ifeq ($(CONFIG_SA1100_SIMPAD),y)
++obj-$(CONFIG_MCP_UCB1200) += ucb1x00-simpad.o
++endif
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/ucb1x00-simpad.c linux-2.6.21/drivers/mfd/ucb1x00-simpad.c
+--- linux-2.6.21.vanilla/drivers/mfd/ucb1x00-simpad.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/mfd/ucb1x00-simpad.c 2007-05-30 18:35:48.000000000 +0200
+@@ -0,0 +1,226 @@
++/*
++ * linux/drivers/mfd/ucb1x00-simpad.c
++ *
++ * Copyright (C) 2001-2003 Russell King, All Rights Reserved.
++ * 2007/03/18 mrdata:
++ * - adapted ucb1x00-assabet.c
++ * - transfer ucb1x00-simpad.c from kernel24
++ * to new structur of kernel26
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License.
++ *
++ * We handle the machine-specific bits of the UCB1x00 driver here.
++ */
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/proc_fs.h>
++#include <linux/device.h>
++
++#include <linux/apm-emulation.h>
++
++#include <asm/dma.h>
++
++#include <asm/arch/simpad.h>
++#include <asm/arch-sa1100/simpad_pm.h>
++
++#include "ucb1x00.h"
++#include "ucb1x00-simpad.h"
++
++#define UCB1X00_ATTR(name,input,designation) \
++static ssize_t name##_show(struct class_device *dev, char *buf) \
++{ \
++ struct ucb1x00 *ucb = classdev_to_ucb1x00(dev); \
++ int val; \
++ ucb1x00_adc_enable(ucb); \
++ val = ucb1x00_adc_read(ucb, input, UCB_NOSYNC); \
++ ucb1x00_adc_disable(ucb); \
++ return sprintf(buf, "%d\n", CALIBRATE_##designation(val)); \
++} \
++static CLASS_DEVICE_ATTR(name,0444,name##_show,NULL)
++
++UCB1X00_ATTR(vbatt, UCB_ADC_INP_AD1, BATTERY);
++UCB1X00_ATTR(vcharger, UCB_ADC_INP_AD2, SUPPLY);
++UCB1X00_ATTR(icharger, UCB_ADC_INP_AD3, CHARGING);
++
++static struct ucb1x00 *ucb_alt;
++
++#define UCB1X00_WERT(name,input,designation) \
++static int ucb1x00_simpad_read_##name(struct ucb1x00 *ucb_alt) \
++{ \
++ int val; \
++ ucb1x00_adc_enable(ucb_alt); \
++ val = ucb1x00_adc_read(ucb_alt, input, UCB_NOSYNC); \
++ ucb1x00_adc_disable(ucb_alt); \
++ return CALIBRATE_##designation(val); \
++}
++
++UCB1X00_WERT(vbatt, UCB_ADC_INP_AD1, BATTERY);
++UCB1X00_WERT(vcharger, UCB_ADC_INP_AD2, SUPPLY);
++UCB1X00_WERT(icharger, UCB_ADC_INP_AD3, CHARGING);
++
++static int ucb1x00_simpad_add(struct ucb1x00_dev *dev)
++{
++ class_device_create_file(&dev->ucb->cdev, &class_device_attr_vbatt);
++ class_device_create_file(&dev->ucb->cdev, &class_device_attr_vcharger);
++ class_device_create_file(&dev->ucb->cdev, &class_device_attr_icharger);
++ ucb_alt = dev->ucb;
++ return 0;
++}
++
++static void ucb1x00_simpad_remove(struct ucb1x00_dev *dev)
++{
++ class_device_remove_file(&dev->ucb->cdev, &class_device_attr_icharger);
++ class_device_remove_file(&dev->ucb->cdev, &class_device_attr_vcharger);
++ class_device_remove_file(&dev->ucb->cdev, &class_device_attr_vbatt);
++}
++
++static struct ucb1x00_driver ucb1x00_simpad_driver = {
++ .add = ucb1x00_simpad_add,
++ .remove = ucb1x00_simpad_remove,
++};
++
++static int __init ucb1x00_simpad_init(void)
++{
++ apm_get_power_status = simpad_apm_get_power_status;
++ return ucb1x00_register_driver(&ucb1x00_simpad_driver);
++}
++
++static void __exit ucb1x00_simpad_exit(void)
++{
++ apm_get_power_status = NULL;
++ ucb1x00_unregister_driver(&ucb1x00_simpad_driver);
++}
++
++/****************************************************************************/
++/* Functions exported for use by the kernel and kernel modules */
++/****************************************************************************/
++
++int simpad_get_battery(struct simpad_battery_apm *bstat)
++{
++ int icharger, vcharger, vbatt;
++
++ if ( ucb_alt ) {
++ icharger = ucb1x00_simpad_read_icharger( ucb_alt );
++ vcharger = ucb1x00_simpad_read_vcharger( ucb_alt );
++ vbatt = ucb1x00_simpad_read_vbatt( ucb_alt );
++ } else {
++ bstat->ac_status = SIMPAD_AC_STATUS_AC_UNKNOWN;
++ bstat->status = SIMPAD_BATT_STATUS_UNKNOWN;
++ bstat->percentage = 0x64; // lets say 100%
++ bstat->life = 330; // lets say a long time
++ return 0;
++ }
++
++ /* AC status */
++ bstat->ac_status = SIMPAD_AC_STATUS_AC_OFFLINE;
++ if ( vcharger>MIN_SUPPLY ) {
++ bstat->ac_status = SIMPAD_AC_STATUS_AC_ONLINE;
++ }
++
++ /* charging */
++ bstat->status = 0x0;
++ if ( icharger >= CHARGING_LED_LEVEL )
++ bstat->status = SIMPAD_BATT_STATUS_CHARGING;
++
++ if ( vbatt > BATT_LOW )
++ bstat->status |= SIMPAD_BATT_STATUS_HIGH;
++ else if ( vbatt < BATT_CRITICAL )
++ bstat->status |= SIMPAD_BATT_STATUS_CRITICAL;
++ else
++ bstat->status |= SIMPAD_BATT_STATUS_LOW;
++
++ if (bstat->status & SIMPAD_BATT_STATUS_CHARGING) {
++ if (icharger > CHARGING_MAX_LEVEL)
++ icharger = CHARGING_MAX_LEVEL;
++ if (icharger < CHARGING_LED_LEVEL)
++ icharger = CHARGING_LED_LEVEL;
++
++ bstat->percentage = 100 - 100 * (icharger - CHARGING_LED_LEVEL) /
++ (CHARGING_MAX_LEVEL - CHARGING_LED_LEVEL);
++ } else {
++ if (vbatt > BATT_FULL)
++ vbatt = BATT_FULL;
++ if (vbatt < BATT_EMPTY)
++ vbatt = BATT_EMPTY;
++
++ bstat->percentage = 100 * (vbatt - BATT_EMPTY) / (BATT_FULL - BATT_EMPTY);
++ }
++
++ /* let's assume: full load is 7h */
++ /* bstat->life = 420*bstat->percentage/100; */
++ /* mrdata: think, 4h is more realistic */
++ bstat->life = 240*(bstat->percentage)/100;
++
++#if 0
++ printk("get_battery: ac: %02x / ch: %02x / perc: %02x / life: %d \n",
++ bstat->ac_status, bstat->status,
++ bstat->percentage, bstat->life );
++#endif
++
++ return 0;
++}
++
++void simpad_apm_get_power_status(struct apm_power_info *info)
++{
++ struct simpad_battery_apm bstat;
++ unsigned char ac = APM_AC_UNKNOWN;
++ unsigned char level = APM_BATTERY_STATUS_UNKNOWN;
++ int status, result;
++
++ result = simpad_get_battery(&bstat);
++ if (result) {
++ printk("%s: unable to access battery information: result=%d\n", __FUNCTION__, result);
++ return;
++ }
++
++ switch (bstat.ac_status) {
++ case SIMPAD_AC_STATUS_AC_OFFLINE:
++ ac = APM_AC_OFFLINE;
++ break;
++ case SIMPAD_AC_STATUS_AC_ONLINE:
++ ac = APM_AC_ONLINE;
++ break;
++ case SIMPAD_AC_STATUS_AC_BACKUP:
++ ac = APM_AC_BACKUP;
++ break;
++ }
++
++ info->ac_line_status = ac;
++
++ status = bstat.status;
++ if (status & (SIMPAD_BATT_STATUS_CHARGING | SIMPAD_BATT_STATUS_CHARGE_MAIN))
++ level = APM_BATTERY_STATUS_CHARGING;
++ else if (status & (SIMPAD_BATT_STATUS_HIGH | SIMPAD_BATT_STATUS_FULL))
++ level = APM_BATTERY_STATUS_HIGH;
++ else if (status & SIMPAD_BATT_STATUS_LOW)
++ level = APM_BATTERY_STATUS_LOW;
++ else if (status & SIMPAD_BATT_STATUS_CRITICAL)
++ level = APM_BATTERY_STATUS_CRITICAL;
++
++ info->battery_status = level;
++ info->battery_flag = info->battery_status;
++
++ info->battery_life = bstat.percentage;
++
++ /* we have a dumb battery - so we know nothing */
++ info->time = bstat.life;
++ info->units = APM_UNITS_MINS;
++
++#if 0
++ printk("apm_get_power: ac: %02x / bs: %02x / bf: %02x / perc: %02x / life: %d\n",
++ info->ac_line_status, info->battery_status, info->battery_flag,
++ info->battery_life, info->time );
++#endif
++ return;
++}
++
++module_init(ucb1x00_simpad_init);
++module_exit(ucb1x00_simpad_exit);
++
++
++MODULE_AUTHOR("Juergen Messerer <juergen.messerer@freesurf.ch>");
++MODULE_DESCRIPTION("SIMpad noddy testing only example ADC driver");
++MODULE_LICENSE("GPL");
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/ucb1x00-simpad.h linux-2.6.21/drivers/mfd/ucb1x00-simpad.h
+--- linux-2.6.21.vanilla/drivers/mfd/ucb1x00-simpad.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/mfd/ucb1x00-simpad.h 2007-05-30 18:35:48.000000000 +0200
+@@ -0,0 +1,86 @@
++/*
++ * linux/drivers/mfd/ucb1x00-simpad.h
++ *
++ * Copyright (C) 2001 Russell King, All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License.
++ */
++#ifndef UCB1300_SIMPAD_H
++#define UCB1300_SIMPAD_H
++
++/*
++ * Conversion from AD -> mV
++ * 7.5V = 1023 7.33137mV/Digit
++ *
++ * 400 Units == 9.7V
++ * a = ADC value
++ * 2007/03/24 mrdata:
++ * according UCB1300 datasheet ADC error max. 3 LSB
++ * 5-95% of full scale -> 3*7.33137mV = 21.99mV
++ * // old
++ * 21 = ADC error
++ * 12600 = Divident to get 2*7.3242
++ * 860 = Divider to get 2*7.3242
++ * 170 = Voltagedrop over
++ *
++ * // new
++ * 3 = ADC error
++ * 12610 = Divident to get 2*7.33139
++ * 860 = Divider to get 2*7.33139
++ * 170 = Voltagedrop over
++ */
++// #define CALIBRATE_BATTERY(a) ((((a + 21)*12600)/860) + 170)
++#define CALIBRATE_BATTERY(a) ((((a + 3)*12610)/860) + 170)
++
++/*
++ * We have two types of batteries a small and a large one
++ * To get the right value we to distinguish between those two
++ * 450 Units == 15 V
++ */
++#ifdef SMALL_BATTERY
++#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 51)
++#define MIN_SUPPLY 8500 /* Less then 8.5V means no powersupply */
++#else
++#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 45)
++//#define MIN_SUPPLY 14000 /* Less then 14V means no powersupply */
++#define MIN_SUPPLY 12000 /* Less then 12V means no powersupply */
++#endif
++
++/*
++ * Charging Current
++ * if value is >= 50 then charging is on
++ */
++// #define CALIBRATE_CHARGING(a) (((a) * 1000) / (152/4))
++#define CALIBRATE_CHARGING(a) (a)
++//#define CHARGING_LED_LEVEL 50
++
++#ifdef CONFIG_SA1100_SIMPAD_SINUSPAD
++
++// type small battery
++#define CHARGING_LED_LEVEL 12
++#define CHARGING_MAX_LEVEL 120
++#define BATT_FULL 8100
++#define BATT_LOW 7300
++#define BATT_CRITICAL 6700
++#define BATT_EMPTY 6400
++
++#else // CONFIG_SA1100_SIMPAD_SINUSPAD
++
++// type large battery
++// because of ADC error CHARGING_LED_LEVEL can changed
++// from 27 to 28
++#define CHARGING_LED_LEVEL 27
++#define CHARGING_MAX_LEVEL 265
++// BATT_FULL with SIMPAD_AC_STATUS_AC_OFFLINE
++#define BATT_FULL 8100
++#define BATT_LOW 7400
++#define BATT_CRITICAL 6800
++#define BATT_EMPTY 6500
++
++#endif // CONFIG_SA1100_SIMPAD_SINUSPAD
++
++// int simpad_get_battery(struct simpad_battery_apm *bstat);
++
++#endif
+diff -uNr linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad_pm.h linux-2.6.21/include/asm-arm/arch-sa1100/simpad_pm.h
+--- linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad_pm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/include/asm-arm/arch-sa1100/simpad_pm.h 2007-05-30 18:36:07.000000000 +0200
+@@ -0,0 +1,236 @@
++/*
++* Abstraction interface for microcontroller connection to rest of system
++*
++* Copyright 2003 Peter Pregler
++* Copyright 2000,1 Compaq Computer Corporation.
++*
++* Use consistent with the GNU GPL is permitted,
++* provided that this copyright notice is
++* preserved in its entirety in all copies and derived works.
++*
++* COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
++* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
++* FITNESS FOR ANY PARTICULAR PURPOSE.
++*
++* Author: Peter Pregler (based on work for ipaq by Andrew Christian)
++*
++*/
++
++#ifndef __SIMPAD_HAL_H
++#define __SIMPAD_HAL_H
++
++#include <linux/apm-emulation.h>
++
++struct simpad_battery_apm {
++ unsigned char ac_status; /* line connected yes/no */
++ unsigned char status; /* battery loading yes/no */
++ unsigned char percentage; /* percentage loaded */
++ unsigned short life; /* life till empty */
++};
++
++extern void simpad_apm_get_power_status(struct apm_power_info *);
++
++// extern int simpad_get_battery(struct simpad_battery_apm *bstat);
++
++/* These should match the apm_bios.h definitions */
++#define SIMPAD_AC_STATUS_AC_OFFLINE 0x00
++#define SIMPAD_AC_STATUS_AC_ONLINE 0x01
++#define SIMPAD_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */
++#define SIMPAD_AC_STATUS_AC_UNKNOWN 0xff
++
++
++/* These bitfields are rarely "or'd" together */
++#define SIMPAD_BATT_STATUS_HIGH 0x01
++#define SIMPAD_BATT_STATUS_LOW 0x02
++#define SIMPAD_BATT_STATUS_CRITICAL 0x04
++#define SIMPAD_BATT_STATUS_CHARGING 0x08
++#define SIMPAD_BATT_STATUS_CHARGE_MAIN 0x10
++#define SIMPAD_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
++#define SIMPAD_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */
++#define SIMPAD_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
++#define SIMPAD_BATT_STATUS_NOBATT 0x80
++#define SIMPAD_BATT_STATUS_UNKNOWN 0xff
++
++#if 0 // FIXME
++#include <linux/simpad_ts.h>
++
++enum simpad_asset_type {
++ ASSET_TCHAR = 0,
++ ASSET_SHORT,
++ ASSET_LONG
++};
++
++#define TTYPE(_type) (((unsigned int)_type) << 8)
++#define TCHAR(_len) (TTYPE(ASSET_TCHAR) | (_len))
++#define TSHORT TTYPE(ASSET_SHORT)
++#define TLONG TTYPE(ASSET_LONG)
++#define ASSET(_type,_num) ((((unsigned int)_type)<<16) | (_num))
++
++#define ASSET_HM_VERSION ASSET( TCHAR(10), 0 ) /* 1.1, 1.2 */
++#define ASSET_SERIAL_NUMBER ASSET( TCHAR(40), 1 ) /* Unique iPAQ serial number */
++#define ASSET_MODULE_ID ASSET( TCHAR(20), 2 ) /* E.g., "iPAQ 3700" */
++#define ASSET_PRODUCT_REVISION ASSET( TCHAR(10), 3 ) /* 1.0, 2.0 */
++#define ASSET_PRODUCT_ID ASSET( TSHORT, 4 ) /* 2 = Palm-sized computer */
++#define ASSET_FRAME_RATE ASSET( TSHORT, 5 )
++#define ASSET_PAGE_MODE ASSET( TSHORT, 6 ) /* 0 = Flash memory */
++#define ASSET_COUNTRY_ID ASSET( TSHORT, 7 ) /* 0 = USA */
++#define ASSET_IS_COLOR_DISPLAY ASSET( TSHORT, 8 ) /* Boolean, 1 = yes */
++#define ASSET_ROM_SIZE ASSET( TSHORT, 9 ) /* 16, 32 */
++#define ASSET_RAM_SIZE ASSET( TSHORT, 10 ) /* 32768 */
++#define ASSET_HORIZONTAL_PIXELS ASSET( TSHORT, 11 ) /* 240 */
++#define ASSET_VERTICAL_PIXELS ASSET( TSHORT, 12 ) /* 320 */
++
++#define ASSET_TYPE(_asset) (((_asset)&0xff000000)>>24)
++#define ASSET_TCHAR_LEN(_asset) (((_asset)&0x00ff0000)>>16)
++#define ASSET_NUMBER(_asset) ((_asset)&0x0000ffff)
++
++#define MAX_TCHAR_LEN 40
++
++struct simpad_asset {
++ unsigned int type;
++ union {
++ unsigned char tchar[ MAX_TCHAR_LEN ];
++ unsigned short vshort;
++ unsigned long vlong;
++ } a;
++};
++
++/********************************************************************
++ * Interface to the hardware-type specific functions
++ *
++ * get_version Read the version number of the microcontroller on the option pack SPI bus
++ * spi_read Reads from the serial EEPROM memory on the option pack SPI bus
++ * spi_write Write to the serial EEPROM memory on the option pack SPI bus
++ * get_option_detect Returns whether or not an option pack is present
++ *
++ * get_thermal_sensor Return measured temperature of the unit, in units of 0.125 deg C
++ * set_notify_led Turns on, off, or blinks the Green LED
++ * read_light_sensor Returns the value of the front light sensor
++ * get_battery Returns the current voltage and charging state of all batteries
++ * audio_clock Sets the audio CODEC to run at a particular rate
++ * audio_power Turns on/off audio CODEC (internally calls audio_clock)
++ * audio_mute Mutes the audio CODEC
++ * asset_read Extracts PocketPC-style asset information from persistent memory
++ * backlight_control Adjusts the backlight level (only on/off for 3100)
++ *
++ *
++ * iPAQ 3100 only
++ * ==============
++ * codec_control Reset/mute/control level of 3100 audio codec
++ * contrast_control Adjusts the contrast level (only for 3100)
++ *
++ * iPAQ 3600, 3700 only
++ * ====================
++ * eeprom_read Reads from the asset information on the eeprom of a 3600 (deprecated)
++ * eeprom_write Writes to the asset information on the eeprom (deprecated)
++ *
++ * The interfaces to the EEPROM functions are maintained only because the simpad_ts driver has
++ * a deprecated ioctl call for them. They are used internally by the "asset_read" function.
++ *
++ * iPAQ 3800, 3900 only
++ * ====================
++ * set_ebat Tells enhanced PCMCIA sleeves that this iPAQ can handle
++ * a wider voltage range (applies to 3800, 3900)
++ *
++ *********************************************************************/
++
++struct simpad_hal_ops {
++ /* Functions provided by the underlying hardware */
++ int (*get_version)( struct simpad_ts_version * );
++ int (*eeprom_read)( unsigned short address, unsigned char *data, unsigned short len );
++ int (*eeprom_write)( unsigned short address, unsigned char *data, unsigned short len );
++ int (*get_thermal_sensor)( unsigned short * );
++ int (*set_notify_led)( unsigned char mode, unsigned char duration,
++ unsigned char ontime, unsigned char offtime );
++ int (*read_light_sensor)( unsigned char *result );
++ int (*get_battery)( struct simpad_battery * );
++ int (*spi_read)( unsigned short address, unsigned char *data, unsigned short len );
++ int (*spi_write)( unsigned short address, unsigned char *data, unsigned short len );
++ int (*codec_control)( unsigned char, unsigned char );
++ int (*get_option_detect)( int *result );
++ int (*audio_clock)( long samplerate );
++ int (*audio_power)( long samplerate );
++ int (*audio_mute)( int mute );
++ int (*asset_read)( struct simpad_asset *asset );
++ int (*set_ebat)( void );
++
++ /* Functions indirectly provided by the underlying hardware */
++ int (*backlight_control)( enum flite_pwr power, unsigned char level );
++ int (*contrast_control)( unsigned char level );
++
++ /* for module use counting */
++ struct module *owner;
++};
++
++/* Used by the device-specific hardware module to register itself */
++extern int simpad_hal_register_interface( struct simpad_hal_ops *ops );
++extern void simpad_hal_unregister_interface( struct simpad_hal_ops *ops );
++
++/*
++ * Calls into HAL from the device-specific hardware module
++ * These run at interrupt time
++ */
++extern void simpad_hal_keypress( unsigned char key );
++extern void simpad_hal_touchpanel( unsigned short x, unsigned short y, int down );
++extern void simpad_hal_option_detect( int present );
++
++/* Callbacks registered by device drivers */
++struct simpad_driver_ops {
++ void (*keypress)( unsigned char key );
++ void (*touchpanel)( unsigned short x, unsigned short y, int down );
++ void (*option_detect)( int present );
++};
++
++extern int simpad_hal_register_driver( struct simpad_driver_ops * );
++extern void simpad_hal_unregister_driver( struct simpad_driver_ops * );
++
++
++/* Calls into HAL from device drivers and other kernel modules */
++extern void simpad_get_flite( struct simpad_ts_backlight *bl );
++extern void simpad_get_contrast( unsigned char *contrast );
++extern int simpad_set_flite( enum flite_pwr pwr, unsigned char brightness );
++extern int simpad_set_contrast( unsigned char contrast );
++extern int simpad_toggle_frontlight( void );
++
++extern int simpad_apm_get_power_status(unsigned char *ac_line_status, unsigned char *battery_status,
++ unsigned char *battery_flag, unsigned char *battery_percentage,
++ unsigned short *battery_life);
++
++extern struct simpad_hal_ops *simpad_hal_ops;
++
++/* Do not use this macro in driver files - instead, use the inline functions defined below */
++#define CALL_HAL( f, args... ) \
++ { int __result = -EIO; \
++ if ( simpad_hal_ops && simpad_hal_ops->f ) { \
++ __MOD_INC_USE_COUNT(simpad_hal_ops->owner); \
++ __result = simpad_hal_ops->f(args); \
++ __MOD_DEC_USE_COUNT(simpad_hal_ops->owner); \
++ } \
++ return __result; }
++
++#define HFUNC static __inline__ int
++
++/* The eeprom_read/write address + len has a maximum value of 512. Both must be even numbers */
++HFUNC simpad_eeprom_read( u16 addr, u8 *data, u16 len ) CALL_HAL(eeprom_read,addr,data,len)
++HFUNC simpad_eeprom_write( u16 addr, u8 *data, u16 len) CALL_HAL(eeprom_write,addr,data,len)
++HFUNC simpad_spi_read( u8 addr, u8 *data, u16 len) CALL_HAL(spi_read,addr,data,len)
++HFUNC simpad_spi_write( u8 addr, u8 *data, u16 len) CALL_HAL(spi_write,addr,data,len)
++HFUNC simpad_get_version( struct simpad_ts_version *v ) CALL_HAL(get_version,v)
++HFUNC simpad_get_thermal_sensor( u16 *thermal ) CALL_HAL(get_thermal_sensor,thermal)
++HFUNC simpad_set_led( u8 mode, u8 dur, u8 ont, u8 offt ) CALL_HAL(set_notify_led, mode, dur, ont, offt)
++HFUNC simpad_get_light_sensor( u8 *result ) CALL_HAL(read_light_sensor,result)
++HFUNC simpad_get_battery( struct simpad_battery *bat ) CALL_HAL(get_battery,bat)
++HFUNC simpad_get_option_detect( int *result) CALL_HAL(get_option_detect,result)
++HFUNC simpad_audio_clock( long samplerate ) CALL_HAL(audio_clock,samplerate)
++HFUNC simpad_audio_power( long samplerate ) CALL_HAL(audio_power,samplerate)
++HFUNC simpad_audio_mute( int mute ) CALL_HAL(audio_mute,mute)
++HFUNC simpad_asset_read( struct simpad_asset *asset ) CALL_HAL(asset_read,asset)
++HFUNC simpad_set_ebat( void ) CALL_HAL(set_ebat)
++
++/* Don't use these functions directly - rather, call {get,set}_{flite,contrast} */
++ /* Functions indirectly provided by the underlying hardware */
++HFUNC simpad_backlight_control( enum flite_pwr p, u8 v ) CALL_HAL(backlight_control,p,v)
++HFUNC simpad_contrast_control( u8 level ) CALL_HAL(contrast_control,level)
++
++#endif
++#endif
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch
new file mode 100644
index 0000000000..cfb9aad906
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch
@@ -0,0 +1,184 @@
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/Makefile linux-2.6.21/arch/arm/mach-sa1100/Makefile
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/Makefile 2007-05-29 21:34:59.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-sa1100/Makefile 2007-05-30 17:44:04.000000000 +0200
+@@ -40,6 +40,7 @@
+ obj-$(CONFIG_SA1100_SHANNON) += shannon.o
+
+ obj-$(CONFIG_SA1100_SIMPAD) += simpad.o
++obj-$(CONFIG_SA1100_SIMPAD) += cs3-simpad.o
+ led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
+
+ # LEDs support
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/cs3-simpad.c linux-2.6.21/arch/arm/mach-sa1100/cs3-simpad.c
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/cs3-simpad.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/arch/arm/mach-sa1100/cs3-simpad.c 2007-05-30 17:45:51.000000000 +0200
+@@ -0,0 +1,169 @@
++/*
++ * simpad-cs3.c
++ *
++ * This driver shows the GPIO states of the cs3 latch. You can also
++ * switch some GPIOS.
++ *
++ * (c) 2007 Bernhard Guillon <Bernhard.Guillon@OpenSIMpad.org>
++ *
++ * You may use this code as per GPL version 2
++ *
++ * Some parts are based on battery.c
++ *
++ * mrdata: -added cs3_ro support
++ * -added preprocessor stuff
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/device.h>
++
++#include <asm/arch/simpad.h>
++
++extern long get_cs3_ro(void);
++extern long get_cs3_shadow(void);
++extern void set_cs3_bit(int value);
++extern void clear_cs3_bit(int value);
++
++struct cs3 {
++ struct class_device class_dev;
++ const char *name;
++ char *id;
++ int type;
++};
++
++struct cs3 cs3 ={
++ .name = "latch_cs3",
++};
++
++
++#define CS3_STORE_ATTR(namek,nameg) \
++static ssize_t namek##_store (struct class_device *cdev, const char * buf, size_t count) \
++{ \
++ char val; \
++ if (sscanf(buf, "%c",&val) != 1) \
++ return -EINVAL; \
++ if (val == '1') \
++ set_cs3_bit(nameg); \
++ else if (val == '0') \
++ clear_cs3_bit(nameg); \
++ return strlen(buf); \
++}
++
++CS3_STORE_ATTR(display_on, DISPLAY_ON);
++CS3_STORE_ATTR(dect_power_on, DECT_POWER_ON);
++CS3_STORE_ATTR(irda_sd, IRDA_SD);
++CS3_STORE_ATTR(sd_mediaq, SD_MEDIAQ);
++CS3_STORE_ATTR(led2_on, LED2_ON);
++CS3_STORE_ATTR(irda_mode, IRDA_MODE);
++CS3_STORE_ATTR(reset_simcard, RESET_SIMCARD);
++
++
++#define CS3_ATTR(shadro,namek,nameg,mode,store) \
++static ssize_t namek##_show(struct class_device *class_dev, char *buf) \
++{ \
++ if (get_cs3_##shadro() & nameg ) \
++ return sprintf(buf, "1\n"); \
++ else \
++ return sprintf(buf, "0\n"); \
++} \
++static CLASS_DEVICE_ATTR(namek, mode, namek##_show, store)
++
++CS3_ATTR(shadow, vcc_5v_en, VCC_5V_EN, 0444, NULL);
++CS3_ATTR(shadow, vcc_3v_en, VCC_3V_EN, 0444, NULL);
++CS3_ATTR(shadow, en1, EN1, 0444, NULL);
++CS3_ATTR(shadow, en0, EN0, 0444, NULL);
++CS3_ATTR(shadow, display_on, DISPLAY_ON, 0664, display_on_store);
++CS3_ATTR(shadow, pcmcia_buff_dis, PCMCIA_BUFF_DIS, 0444, NULL);
++CS3_ATTR(shadow, mq_reset, MQ_RESET, 0444, NULL);
++CS3_ATTR(shadow, pcmcia_reset, PCMCIA_RESET, 0444, NULL);
++CS3_ATTR(shadow, dect_power_on, DECT_POWER_ON, 0664, dect_power_on_store);
++CS3_ATTR(shadow, irda_sd, IRDA_SD, 0664, irda_sd_store);
++CS3_ATTR(shadow, rs232_on, RS232_ON, 0444, NULL);
++CS3_ATTR(shadow, sd_mediaq, SD_MEDIAQ, 0664, sd_mediaq_store);
++CS3_ATTR(shadow, led2_on, LED2_ON, 0664, led2_on_store);
++CS3_ATTR(shadow, irda_mode, IRDA_MODE, 0664, irda_mode_store);
++CS3_ATTR(shadow, enable_5v, ENABLE_5V, 0444, NULL);
++CS3_ATTR(shadow, reset_simcard, RESET_SIMCARD, 0664, reset_simcard_store);
++CS3_ATTR(ro, pcmcia_bvd1, PCMCIA_BVD1, 0444, NULL);
++CS3_ATTR(ro, pcmcia_bvd2, PCMCIA_BVD2, 0444, NULL);
++CS3_ATTR(ro, pcmcia_vs1, PCMCIA_VS1, 0444, NULL);
++CS3_ATTR(ro, pcmcia_vs2, PCMCIA_VS2, 0444, NULL);
++CS3_ATTR(ro, lock_ind, LOCK_IND, 0444, NULL);
++CS3_ATTR(ro, charging_state, CHARGING_STATE, 0444, NULL);
++CS3_ATTR(ro, pcmcia_short, PCMCIA_SHORT, 0444, NULL);
++
++static struct class simpad_gpios_class = {
++ .name = "simpad",
++};
++
++#define create_entry_conditional(namek) \
++ rc = class_device_create_file(&cs3->class_dev, &class_device_attr_##namek); \
++ if (rc) goto out; \
++
++static int register_cs3_latch(struct cs3 *cs3)
++{
++ int rc = 0;
++ cs3->class_dev.class = &simpad_gpios_class;
++ strcpy(cs3->class_dev.class_id, cs3->name);
++ rc = class_device_register(&cs3->class_dev);
++ if(rc)
++ goto out;
++
++ create_entry_conditional(vcc_5v_en);
++ create_entry_conditional(vcc_3v_en);
++ create_entry_conditional(en1);
++ create_entry_conditional(en0);
++ create_entry_conditional(display_on);
++ create_entry_conditional(pcmcia_buff_dis);
++ create_entry_conditional(mq_reset);
++ create_entry_conditional(pcmcia_reset);
++ create_entry_conditional(dect_power_on);
++ create_entry_conditional(irda_sd);
++ create_entry_conditional(rs232_on);
++ create_entry_conditional(sd_mediaq);
++ create_entry_conditional(led2_on);
++ create_entry_conditional(irda_mode);
++ create_entry_conditional(enable_5v);
++ create_entry_conditional(reset_simcard);
++ create_entry_conditional(pcmcia_bvd1);
++ create_entry_conditional(pcmcia_bvd2);
++ create_entry_conditional(pcmcia_vs1);
++ create_entry_conditional(pcmcia_vs2);
++ create_entry_conditional(lock_ind);
++ create_entry_conditional(charging_state);
++ create_entry_conditional(pcmcia_short);
++
++out:
++ return rc;
++}
++
++static int __init simpad_gpios_class_init(void)
++{
++ int rc = 0;
++
++ rc = class_register(&simpad_gpios_class);
++
++ if(rc != 0)
++ {
++ printk(KERN_ERR "cs3 latch class failed to register properly\n");
++ return rc;
++ }
++
++ rc = register_cs3_latch(&cs3);
++ return rc;
++}
++
++static void __exit simpad_gpios_class_exit(void)
++{
++ class_unregister(&simpad_gpios_class);
++}
++
++module_init(simpad_gpios_class_init);
++module_exit(simpad_gpios_class_exit);
++
++MODULE_AUTHOR("Bernhard Guillon");
++MODULE_DESCRIPTION("CS3_latch driver");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch
new file mode 100644
index 0000000000..5726779ad6
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch
@@ -0,0 +1,2511 @@
+diff -uNr linux-2.6.21.vanilla/drivers/video/Kconfig linux-2.6.21/drivers/video/Kconfig
+--- linux-2.6.21.vanilla/drivers/video/Kconfig 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/Kconfig 2007-05-01 17:02:17.000000000 +0200
+@@ -139,7 +139,7 @@
+ This is particularly important to one driver, matroxfb. If
+ unsure, say N.
+
+-comment "Frame buffer hardware drivers"
++comment "Frambuffer hardware drivers"
+ depends on FB
+
+ config FB_CIRRUS
+@@ -1120,6 +1120,15 @@
+ ---help---
+ Driver for graphics boards with S3 Trio / S3 Virge chip.
+
++config FB_MQ200
++ bool "MQ200 Driver"
++ depends on (FB = y) && ARM && ARCH_SA1100
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ This is a MQ200 driver tested only on Siemens SIMpads.
++
+ config FB_SAVAGE
+ tristate "S3 Savage support"
+ depends on FB && PCI && EXPERIMENTAL
+diff -uNr linux-2.6.21.vanilla/drivers/video/Makefile linux-2.6.21/drivers/video/Makefile
+--- linux-2.6.21.vanilla/drivers/video/Makefile 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/Makefile 2007-05-01 17:02:17.000000000 +0200
+@@ -29,6 +29,7 @@
+ obj-$(CONFIG_FB_PM2) += pm2fb.o
+ obj-$(CONFIG_FB_PM3) += pm3fb.o
+
++obj-$(CONFIG_FB_MQ200) += mq200/
+ obj-$(CONFIG_FB_MATROX) += matrox/
+ obj-$(CONFIG_FB_RIVA) += riva/ vgastate.o
+ obj-$(CONFIG_FB_NVIDIA) += nvidia/
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/Kconfig linux-2.6.21/drivers/video/backlight/Kconfig
+--- linux-2.6.21.vanilla/drivers/video/backlight/Kconfig 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/backlight/Kconfig 2007-05-01 17:02:17.000000000 +0200
+@@ -63,3 +63,20 @@
+ help
+ If you have a Frontpath ProGear say Y to enable the
+ backlight driver.
++
++config BACKLIGHT_SIMPAD
++ tristate "SIMpad MQ200 Backlight driver"
++ depends on SA1100_SIMPAD && BACKLIGHT_CLASS_DEVICE
++ default y
++ help
++ If you have a Siemens SIMpad say Y to enable the
++ backlight driver.
++
++config LCD_SIMPAD
++ tristate "SIMpad MQ200 LCD driver"
++ depends on SA1100_SIMPAD && LCD_CLASS_DEVICE
++ default y
++ help
++ If you have a Siemens SIMpad say Y to enable the
++ LCD driver.
++
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/Makefile linux-2.6.21/drivers/video/backlight/Makefile
+--- linux-2.6.21.vanilla/drivers/video/backlight/Makefile 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/backlight/Makefile 2007-05-01 17:02:17.000000000 +0200
+@@ -6,3 +6,5 @@
+ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
++obj-$(CONFIG_BACKLIGHT_SIMPAD) += simpad_bl.o
++obj-$(CONFIG_LCD_SIMPAD) += simpad_lcd.o
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/simpad_bl.c linux-2.6.21/drivers/video/backlight/simpad_bl.c
+--- linux-2.6.21.vanilla/drivers/video/backlight/simpad_bl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/backlight/simpad_bl.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,208 @@
++/*
++ * GPLv2 <zecke@handhelds.org
++ *
++ * Implementation of the backlight_driver for
++ * the mq200 framebuffer
++ *
++ * 2007/03/17 mrdata:
++ * - small changes simpad_bl_get_brightness()
++ * simpad_bl_set_brightness()
++ * - new function simpad_bl_update_status()
++ * - changed struct backlight_properties simpad_bl_props()
++ * to new one
++ * - changed __init simpad_bl_init() -> backlight_device_register
++ *
++ * 2007/03/24 mrdata
++ * - added .brightness=127 in
++ * struct backlight_properties simpad_bl_props()
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/types.h>
++#include <asm/hardware.h>
++#include <asm/io.h>
++
++#include "../mq200/mq200_data.h"
++
++#define SIMPAD_BACKLIGHT_MASK 0x00a10044
++#define SIMPAD_DEFAULT_INTENSITY 127
++#define SIMPAD_MAX_INTENSITY 254
++#define REGISTER_BASE 0xf2e00000
++
++static int simpad_bl_suspended;
++static int current_intensity = 0;
++
++static void simpad_bl_send_intensity(struct backlight_device *bd)
++{
++ int intensity = bd->props.brightness;
++
++ union fp0fr fp0fr;
++ unsigned long dutyCycle, pwmcontrol;
++
++ if (intensity > SIMPAD_MAX_INTENSITY)
++ intensity = SIMPAD_MAX_INTENSITY;
++
++ if (bd->props.power != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if (bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if (simpad_bl_suspended)
++ intensity = 0;
++
++ if (intensity != current_intensity)
++ {
++ /*
++ * Determine dutyCycle.
++ * Note: the lower the value, the brighter the display!
++ */
++
++ dutyCycle = SIMPAD_MAX_INTENSITY - intensity;
++
++ /*
++ * Configure PWM0 (source clock = oscillator clock, pwm always enabled,
++ * zero, clock pre-divider = 4) pwm frequency = 12.0kHz
++ */
++
++ fp0fr.whole = readl(FP0FR(REGISTER_BASE));
++ pwmcontrol = fp0fr.whole & 0xffff00ff;
++ fp0fr.whole &= 0xffffff00;
++ fp0fr.whole |= 0x00000044;
++ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
++
++ /* Write to pwm duty cycle register. */
++ fp0fr.whole = dutyCycle << 8;
++ fp0fr.whole &= 0x0000ff00;
++ fp0fr.whole |= pwmcontrol;
++ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
++
++ current_intensity = intensity;
++ }
++}
++
++
++#ifdef CONFIG_PM
++static int simpad_bl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ simpad_bl_suspended = 1;
++ simpad_bl_send_intensity(bd);
++ return 0;
++}
++
++static int simpad_bl_resume(struct platform_device *pdev)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ simpad_bl_suspended = 0;
++ simpad_bl_send_intensity(bd);
++ return 0;
++}
++#else
++#define simpad_bl_suspend NULL
++#define simpad_bl_resume NULL
++#endif
++
++
++static int simpad_bl_set_intensity(struct backlight_device *bd)
++{
++ simpad_bl_send_intensity(bd);
++ return 0;
++}
++
++
++static int simpad_bl_get_intensity(struct backlight_device *bd)
++{
++ return current_intensity;
++}
++
++
++static struct backlight_ops simpad_bl_ops = {
++ .get_brightness = simpad_bl_get_intensity,
++ .update_status = simpad_bl_set_intensity,
++};
++
++
++static int __init simpad_bl_probe(struct platform_device *pdev)
++{
++ struct backlight_device *bd;
++
++ bd = backlight_device_register("simpad-mq200-bl", &pdev->dev, NULL, &simpad_bl_ops);
++
++ if (IS_ERR (bd))
++ return PTR_ERR (bd);
++
++ platform_set_drvdata(pdev, bd);
++
++ bd->props.max_brightness = SIMPAD_MAX_INTENSITY;
++ bd->props.brightness = SIMPAD_DEFAULT_INTENSITY;
++ simpad_bl_send_intensity(bd);
++
++ return 0;
++}
++
++
++static int simpad_bl_remove(struct platform_device *pdev)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ bd->props.brightness = 0;
++ bd->props.power = 0;
++ simpad_bl_send_intensity(bd);
++
++ backlight_device_unregister(bd);
++
++ return 0;
++}
++
++static struct platform_driver simpad_bl_driver = {
++ .probe = simpad_bl_probe,
++ .remove = simpad_bl_remove,
++ .suspend = simpad_bl_suspend,
++ .resume = simpad_bl_resume,
++ .driver = {
++ .name = "simpad-mq200-bl",
++ },
++};
++
++static struct platform_device *simpad_bl_device = NULL;
++
++static int __init simpad_bl_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&simpad_bl_driver);
++ if (!ret) {
++ simpad_bl_device = platform_device_alloc("simpad-mq200-bl", -1);
++ if (!simpad_bl_device)
++ return -ENOMEM;
++
++ ret = platform_device_add(simpad_bl_device);
++
++ if (ret) {
++ platform_device_put(simpad_bl_device);
++ platform_driver_unregister(&simpad_bl_driver);
++ }
++ }
++ return ret;
++}
++
++static void __exit simpad_bl_exit(void)
++{
++ platform_device_unregister(simpad_bl_device);
++ platform_driver_unregister(&simpad_bl_driver);
++}
++
++
++module_init(simpad_bl_init);
++module_exit(simpad_bl_exit);
++MODULE_AUTHOR("Holger Hans Peter Freyther");
++MODULE_LICENSE("GPL");
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/simpad_lcd.c linux-2.6.21/drivers/video/backlight/simpad_lcd.c
+--- linux-2.6.21.vanilla/drivers/video/backlight/simpad_lcd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/backlight/simpad_lcd.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,170 @@
++/*
++ * GPLv2 <zecke@handhelds.org
++ *
++ * Implementation of the lcd_driver for the mq200 framebuffer
++ *
++ * 2007/03/24 mrdata:
++ * - added simpad_lcd_get_contrast()
++ * - added simpad_lcd_set_contrast()
++ * - modify struct lcd_properties simpad_lcd_props
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/lcd.h>
++
++#include <asm/arch/simpad.h>
++#include <asm/hardware.h>
++
++extern long get_cs3_shadow(void);
++extern void set_cs3_bit(int);
++extern void clear_cs3_bit(int);
++
++#define UNUSED(x) x=x
++
++static int simpad_lcd_get_power(struct lcd_device* dev)
++{
++ UNUSED(dev);
++
++ return (get_cs3_shadow() & DISPLAY_ON) ? 0 : 4;
++}
++
++static int simpad_lcd_set_power(struct lcd_device* dev, int power)
++{
++ UNUSED(dev);
++
++ if( power == 4 )
++ clear_cs3_bit(DISPLAY_ON);
++ else
++ set_cs3_bit(DISPLAY_ON);
++
++ return 0;
++}
++
++static int simpad_lcd_get_contrast(struct lcd_device* dev)
++{
++ UNUSED(dev);
++
++ return 0;
++}
++
++static int simpad_lcd_set_contrast(struct lcd_device* dev, int contrast)
++{
++ UNUSED(dev);
++
++ UNUSED(contrast);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int simpad_lcd_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ UNUSED(state);
++ static int ret;
++
++ struct lcd_device* ld;
++
++ ld = platform_get_drvdata(pdev);
++
++ ret = simpad_lcd_set_power(ld, 4);
++
++ return ret;
++}
++
++static int simpad_lcd_resume(struct platform_device *pdev)
++{
++ struct lcd_device *ld;
++ static int ret;
++
++ ld = platform_get_drvdata(pdev);
++
++ ret = simpad_lcd_set_power(ld, 0);
++
++ return ret;
++}
++#else
++#define simpad_lcd_suspend NULL
++#define simpad_lcd_resume NULL
++#endif
++
++static struct lcd_properties simpad_lcd_props = {
++ .max_contrast = 0,
++};
++
++
++static struct lcd_ops simpad_lcd_ops = {
++ .get_power = simpad_lcd_get_power,
++ .set_power = simpad_lcd_set_power,
++ .get_contrast = simpad_lcd_get_contrast,
++ .set_contrast = simpad_lcd_set_contrast,
++};
++
++static int __init simpad_lcd_probe(struct platform_device *pdev)
++{
++ struct lcd_device *ld;
++
++ ld = lcd_device_register ("simpad-mq200-lcd", &pdev->dev, &simpad_lcd_ops);
++
++ if (IS_ERR(ld))
++ return PTR_ERR(ld);
++
++ platform_set_drvdata(pdev, ld);
++
++ ld->props.max_contrast = 0;
++
++ return 0;
++}
++
++static int simpad_lcd_remove(struct platform_device *pdev)
++{
++ struct lcd_device *ld = platform_get_drvdata(pdev);
++
++ lcd_device_unregister(ld);
++
++ return 0;
++}
++
++static struct platform_driver simpad_lcd_driver = {
++ .probe = simpad_lcd_probe,
++ .remove = simpad_lcd_remove,
++ .suspend = simpad_lcd_suspend,
++ .resume = simpad_lcd_resume,
++ .driver = {
++ .name = "simpad-mq200-lcd",
++ },
++};
++
++static struct platform_device *simpad_lcd_device = NULL;
++
++static int __init simpad_lcd_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&simpad_lcd_driver);
++ if (!ret) {
++ simpad_lcd_device = platform_device_alloc("simpad-mq200-lcd", -1);
++ if (!simpad_lcd_device)
++ return -ENOMEM;
++
++ ret = platform_device_add(simpad_lcd_device);
++
++ if (ret) {
++ platform_device_put(simpad_lcd_device);
++ platform_driver_unregister(&simpad_lcd_driver);
++ }
++ }
++ return ret;
++}
++
++static void __exit simpad_lcd_exit(void) {
++ platform_driver_unregister(&simpad_lcd_driver);
++ platform_device_unregister(simpad_lcd_device);
++}
++
++module_init(simpad_lcd_init);
++module_exit(simpad_lcd_exit);
++MODULE_AUTHOR("Holger Hans Peter Freyther");
++MODULE_LICENSE("GPL");
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/Makefile linux-2.6.21/drivers/video/mq200/Makefile
+--- linux-2.6.21.vanilla/drivers/video/mq200/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/Makefile 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,6 @@
++# Makefile for mq200 video driver
++# 4 Aug 2003, Holger Hans Peter Freyther
++#
++
++obj-$(CONFIG_FB_MQ200) += mq_skeleton.o mq_external.o
++
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.21/drivers/video/mq200/mq200_data.h
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq200_data.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq200_data.h 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,1120 @@
++/*
++ * From ucLinux mq200fb.c and mq200fb.h
++ *
++ * 2007/03/11 mrdata:
++ * insert registers for graphics controller 2 module
++ */
++
++#ifndef __MQ200_FB_H__
++#define __MQ200_FB_H__
++
++struct mq200_io_regions {
++ u32 fb_size; /* framebuffer size */
++ unsigned long phys_mmio_base; /* physical register memory base */
++ unsigned long virt_mmio_base; /* virtual start of registers */
++ unsigned long phys_fb_base; /* physical address of frame buffer */
++ unsigned long virt_fb_base; /* virtual start of the framebuffer */
++};
++
++#define MQ200_MONITOR_HORI_RES(info) info->monitor_info.horizontal_res
++#define MQ200_MONITOR_VERT_RES(info) info->monitor_info.vertical_res
++#define MQ200_MONITOR_DEPTH(info) info->monitor_info.depth
++#define MQ200_MONITOR_LINE_LENGTH(info) info->monitor_info.line_length
++
++struct mq200_monitor_info {
++ unsigned int horizontal_res;
++ unsigned int vertical_res;
++ unsigned int depth;
++ unsigned int refresh;
++ unsigned int line_length;
++ unsigned long flags;
++};
++
++
++/**
++ * Addresses of Module
++ */
++#define MQ200_FB_BASE (x) (x + 0x1800000) /* framebuffer */
++#define MQ200_FB_SIZE 0x200000 /* framebuffer size in bytes */
++#define MQ200_REGS_BASE(x) (x + 0x1e00000) /* start of registers area */
++#define MQ200_REGS_SIZE 0x200000 /* registers area size */
++
++#define PMU_OFFSET 0x00000 /* power management */
++#define CPU_OFFSET 0x02000 /* CPU interface */
++#define MIU_OFFSET 0x04000 /* memory controller */
++#define IN_OFFSET 0x08000 /* interrupt controller */
++#define GC_OFFSET 0x0a000 /* graphics controller 1&2 */
++#define GE_OFFSET 0x0c000 /* graphics engine */
++#define FPI_OFFSET 0x0e000 /* flat panel controller */
++#define CP1_OFFSET 0x10000 /* color palette 1 */
++#define DC_OFFSET 0x14000 /* device configuration */
++#define PCI_OFFSET 0x16000 /* PCI configuration */
++#define PSF_OFFSET 0x18000 /* ??? */
++
++
++/****
++ * Registers
++ */
++
++/* power management unit */
++#define PMR(addr) (addr + PCI_OFFSET + 0x40)/* power management
++ register */
++#define PMR_VALUE 0x06210001 /* expected read value of PMR register */
++#define PM00R(addr) (addr + PMU_OFFSET + 0x00) /* power management unit
++ configuration
++ register */
++#define PM01R(addr) (addr + PMU_OFFSET + 0x04) /* D1 state control */
++#define PM02R(addr) (addr + PMU_OFFSET + 0x08) /* d2 state control */
++#define PM06R(addr) (addr + PMU_OFFSET + 0x18) /* PLL 2 programming */
++#define PM07R(addr) (addr + PMU_OFFSET + 0x1c) /* PLL 3 programming */
++
++#define PMCSR(addr) (addr + PCI_OFFSET + 0x44) /* power management
++ control/status
++ register */
++
++/* memory interface unit */
++#define MM00R(addr) (addr + MIU_OFFSET + 0x00)/* MIU interface control
++ 0 */
++#define MM01R(addr) (addr + MIU_OFFSET + 0x04) /* MIU interface control
++ 1 */
++#define MM02R(addr) (addr + MIU_OFFSET + 0x08) /* memory interface
++ control 2 */
++#define MM03R(addr) (addr + MIU_OFFSET + 0x0c) /* memory interface
++ control 3 */
++#define MM04R(addr) (addr + MIU_OFFSET + 0x10) /* memory interface
++ control 4 */
++/* graphics controller 1 module */
++#define GC00R(addr) (addr + GC_OFFSET + 0x00) /* graphics controller 1
++ control */
++#define GC01R(addr) (addr + GC_OFFSET + 0x04) /* graphics controller
++ CRT control */
++#define GC02R(addr) (addr + GC_OFFSET + 0x08) /* horizontal display 1
++ control */
++#define GC03R(addr) (addr + GC_OFFSET + 0x0c) /* vertical display 1
++ control */
++#define GC04R(addr) (addr + GC_OFFSET + 0x10) /* horizontal sync 1
++ control */
++#define GC05R(addr) (addr + GC_OFFSET + 0x14) /* vertical sync 1
++ control */
++#define GC07R(addr) (addr + GC_OFFSET + 0x1c) /* vertical display 1
++ count */
++#define GC08R(addr) (addr + GC_OFFSET + 0x20) /* horizontal window 1
++ control */
++#define GC09R(addr) (addr + GC_OFFSET + 0x24) /* vertical window 1
++ control */
++#define GC0AR(addr) (addr + GC_OFFSET + 0x28) /* alternate horizontal
++ window 1 control */
++#define GC0BR(addr) (addr + GC_OFFSET + 0x2c) /* alternate vertical
++ window 1 control */
++#define GC0CR(addr) (addr + GC_OFFSET + 0x30) /* window 1
++ start address */
++#define GC0DR(addr) (addr + GC_OFFSET + 0x34) /* alternate window 1
++ start address */
++#define GC0ER(addr) (addr + GC_OFFSET + 0x38) /* alternate window 1
++ stride */
++#define GC0FR(addr) (addr + GC_OFFSET + 0x3c) /* alternate window 1
++ line size */
++#define GC10R(addr) (addr + GC_OFFSET + 0x40) /* hardware cursor 1
++ position */
++#define GC11R(addr) (addr + GC_OFFSET + 0x44) /* hardware cursor 1
++ start address and
++ offset */
++#define GC12R(addr) (addr + GC_OFFSET + 0x48) /* hardware cursor 1
++ foreground color */
++#define GC13R(addr) (addr + GC_OFFSET + 0x4c) /* hardware cursor 1
++ background color */
++
++/* graphics controller 2 module */
++#define GC20R(addr) (addr + GC_OFFSET + 0x80) /* graphics controller 2
++ control */
++#define GC21R(addr) (addr + GC_OFFSET + 0x84) /* graphics controller
++ CRC control */
++#define GC22R(addr) (addr + GC_OFFSET + 0x88) /* horizontal display 2
++ control */
++#define GC23R(addr) (addr + GC_OFFSET + 0x8c) /* vertical display 2
++ control */
++#define GC24R(addr) (addr + GC_OFFSET + 0x90) /* horizontal sync 2
++ control */
++#define GC25R(addr) (addr + GC_OFFSET + 0x94) /* vertical sync 2
++ control */
++#define GC27R(addr) (addr + GC_OFFSET + 0x9c) /* vertical display 2
++ count */
++#define GC28R(addr) (addr + GC_OFFSET + 0xa0) /* horizontal window 2
++ control */
++#define GC29R(addr) (addr + GC_OFFSET + 0xa4) /* vertical window 2
++ control */
++#define GC2AR(addr) (addr + GC_OFFSET + 0xa8) /* alternate horizontal
++ window 2 control */
++#define GC2BR(addr) (addr + GC_OFFSET + 0xac) /* alternate vertical
++ window 2 control */
++#define GC2CR(addr) (addr + GC_OFFSET + 0xb0) /* window 2
++ start address */
++#define GC2DR(addr) (addr + GC_OFFSET + 0xb4) /* alternate window 2
++ start address */
++#define GC2ER(addr) (addr + GC_OFFSET + 0xb8) /* alternate window 2
++ stride */
++#define GC2FR(addr) (addr + GC_OFFSET + 0xbc) /* alternate window 2
++ line size */
++#define GC30R(addr) (addr + GC_OFFSET + 0xc0) /* hardware cursor 2
++ position */
++#define GC31R(addr) (addr + GC_OFFSET + 0xc4) /* hardware cursor 2
++ start address and
++ offset */
++#define GC32R(addr) (addr + GC_OFFSET + 0xc8) /* hardware cursor 2
++ foreground color */
++#define GC33R(addr) (addr + GC_OFFSET + 0xcc) /* hardware cursor 2
++ background color */
++
++/* graphics engine */
++#define ROP_SRCCOPY 0xCC /* dest = source */
++#define ROP_SRCPAINT 0xEE /* dest = source OR dest */
++#define ROP_SRCAND 0x88 /* dest = source AND dest */
++#define ROP_SRCINVERT 0x66 /* dest = source XOR dest */
++#define ROP_SRCERASE 0x44 /* dest = source AND (NOT dest) */
++#define ROP_NOTSRCCOPY 0x33 /* dest = NOT source */
++#define ROP_NOTSRCERASE 0x11 /* dest = (NOT source) AND (NOT dest) */
++#define ROP_MERGECOPY 0xC0 /* dest = source AND pattern */
++#define ROP_MERGEPAINT 0xBB /* dest = (NOT source) OR dest */
++#define ROP_PATCOPY 0xF0 /* dest = pattern */
++#define ROP_PATPAINT 0xFB /* dest = DPSnoo */
++#define ROP_PATINVERT 0x5A /* dest = pattern XOR dest */
++#define ROP_DSTINVERT 0x55 /* dest = NOT dest */
++#define ROP_BLACKNESS 0x00 /* dest = BLACK */
++#define ROP_WHITENESS 0xFF /* dest = WHITE */
++
++#define GE00R(addr) (addr + GE_OFFSET + 0x00) /* primary drawing command
++ register */
++#define GE01R(addr) (addr + GE_OFFSET + 0x04) /* primary width and
++ height register */
++#define GE02R(addr) (addr + GE_OFFSET + 0x08) /* primary destination
++ address register */
++#define GE03R(addr) (addr + GE_OFFSET + 0x0c) /* primary source XY
++ register */
++#define GE04R(addr) (addr + GE_OFFSET + 0x10) /* primary color compare
++ register */
++#define GE05R(addr) (addr + GE_OFFSET + 0x14) /* primary clip left/top
++ register */
++#define GE06R(addr) (addr + GE_OFFSET + 0x18) /* primary clip
++ right/bottom register
++ */
++#define GE07R(addr) (addr + GE_OFFSET + 0x1c) /* primary source and
++ pattern offset
++ register */
++#define GE08R(addr) (addr + GE_OFFSET + 0x20) /* primary foreground
++ color
++ register/rectangle
++ fill register */
++#define GE09R(addr) (addr + GE_OFFSET + 0x24) /* source stride/offset
++ register */
++#define GE0AR(addr) (addr + GE_OFFSET + 0x28) /* destination stride
++ register and color
++ depth */
++#define GE0BR(addr) (addr + GE_OFFSET + 0x2c) /* image base address
++ register */
++#define GE40R(addr) (addr + GE_OFFSET + 0x100) /* mono pattern register
++ 0 */
++#define GE41R(addr) (addr + GE_OFFSET + 0x104) /* mono pattern register
++ 1 */
++#define GE42R(addr) (addr + GE_OFFSET + 0x108) /* foreground color
++ register */
++#define GE43R(addr) (addr + GE_OFFSET + 0x10c) /* background color
++ register */
++/* color palette */
++#define C1xxR(addr, regno) \
++ (addr + CP1_OFFSET + (regno) * 4) /* graphics controller color
++ palette 1 */
++/* device configuration */
++#define DC00R(addr) (addr + DC_OFFSET + 0x00) /* device configuration
++ register 0 */
++#define DC_RESET 0x4000
++/* PCI configuration space */
++#define PC00R(addr) (addr + PCI_OFFSET + 0x00)/* device ID/vendor ID
++ register */
++/* Flatpanel Control */
++#define FP00R(addr) (addr + FPI_OFFSET + 0x00) /* Flat Panel Control 0 */
++#define FP01R(addr) (addr + FPI_OFFSET + 0x04) /* Flat Panel Output Pin */
++#define FP02R(addr) (addr + FPI_OFFSET + 0x08) /* Flat Panel Gener Purpose
++ Outout Control Register */
++#define FP03R(addr) (addr + FPI_OFFSET + 0x0c) /* General Purpose I/O Port
++ Control Register */
++#define FP04R(addr) (addr + FPI_OFFSET + 0x10) /* STN Panel Control Register */
++#define FP05R(addr) (addr + FPI_OFFSET + 0x14) /* D-STN Half Frame Buffer
++ Control Register -By Guess */
++#define FP0FR(addr) (addr + FPI_OFFSET + 0x3c) /* Pulse Width Modulation
++ Control Register */
++#define FRCTL_PATTERN_COUNT 32
++#define FP10R(addr) (addr + FPI_OFFSET + 0x40) /* Frame-Rate Control Pattern
++ Register */
++#define FP11R(addr) (addr + FPI_OFFSET + 0x44)
++#define FP2FR(addr) (addr + FPI_OFFSET + 0xc0) /* Frame-Rate Control Weight
++ Registers */
++
++
++
++
++/* power management miscellaneous control */
++union pm00r {
++ struct {
++ u32 pll1_n_b5 :1; /* PLL 1 N parameter bit 5 is 0 */
++ u32 reserved_1 :1;
++ u32 pll2_enbl :1; /* PLL 2 enable */
++ u32 pll3_enbl :1; /* PLL 3 enable */
++ u32 reserved_2 :1;
++ u32 pwr_st_ctrl :1; /* power state status control */
++ u32 reserved_3 :2;
++
++ u32 ge_enbl :1; /* graphics engine enable */
++ u32 ge_bsy_gl :1; /* graphics engine force busy (global) */
++ u32 ge_bsy_lcl :1; /* graphics engine force busy (local) */
++ u32 ge_clock :2; /* graphics engine clock select */
++ u32 ge_cmd_fifo :1; /* graphics engine command FIFO reset */
++ u32 ge_src_fifo :1; /* graphics engine CPU source FIFO reset */
++ u32 miu_pwr_seq :1; /* memory interface unit power sequencing
++ enable */
++
++ u32 d3_mem_rfsh :1; /* D3 memory refresh */
++ u32 d4_mem_rfsh :1; /* D4 memory refresh */
++ u32 gpwr_intrvl :2; /* general power sequencing interval */
++ u32 fppwr_intrvl:2; /* flat panel power sequencing interval */
++ u32 gpwr_seq_ctr:1; /* general power sequencing interval control */
++ u32 pmu_tm :1; /* PMU test mode */
++
++ u32 pwr_state :2; /* power state (read only) */
++ u32 pwr_seq_st :1; /* power sequencing active status (read
++ only) */
++ u32 reserved_4 :5;
++ } part;
++ u32 whole;
++};
++
++/* D1 state control */
++union pm01r {
++ struct {
++ u32 osc_enbl :1; /* D1 oscillator enable */
++ u32 pll1_enbl :1; /* D1 PLL 1 enable */
++ u32 pll2_enbl :1; /* D1 PLL 2 enable */
++ u32 pll3_enbl :1; /* D1 PLL 3 enable */
++ u32 miu_enbl :1; /* D1 Memory Interface Unit (MIU) enable */
++ u32 mem_rfsh :1; /* D1 memory refresh enable */
++ u32 ge_enbl :1; /* D1 Graphics Engine (GE) enable */
++ u32 reserved_1 :1;
++
++ u32 crt_enbl :1; /* D1 CRT enable */
++ u32 fpd_enbl :1; /* D1 Flat Panel enable */
++ u32 reserved_2 :6;
++
++ u32 ctl1_enbl :1; /* D1 controller 1 enable */
++ u32 win1_enbl :1; /* D1 window 1 enable */
++ u32 awin1_enbl :1; /* D1 alternate window 1 enable */
++ u32 cur1_enbl :1; /* D1 cursor 1 enable */
++ u32 reserved_3 :4;
++
++ u32 ctl2_enbl :1; /* D1 controller 2 enable */
++ u32 win2_enbl :1; /* D1 window 2 enable */
++ u32 awin2_enbl :1; /* D1 alternate window 2 enable */
++ u32 cur2_enbl :1; /* D1 cursor 2 enable */
++ u32 reserved_4 :4;
++ } part;
++ u32 whole;
++};
++
++/* D2 state control */
++union pm02r {
++ struct {
++ u32 osc_enbl :1; /* D2 oscillator enable */
++ u32 pll1_enbl :1; /* D2 PLL 1 enable */
++ u32 pll2_enbl :1; /* D2 PLL 2 enable */
++ u32 pll3_enbl :1; /* D2 PLL 3 enable */
++ u32 miu_enbl :1; /* D2 Memory Interface Unit (MIU) enable */
++ u32 mem_rfsh :1; /* D2 memory refresh enable */
++ u32 ge_enbl :1; /* D2 Graphics Engine (GE) enable */
++ u32 reserved_1 :1;
++
++ u32 crt_enbl :1; /* D2 CRT enable */
++ u32 fpd_enbl :1; /* D2 Flat Panel enable */
++ u32 reserved_2 :6;
++
++ u32 ctl1_enbl :1; /* D2 controller 1 enable */
++ u32 win1_enbl :1; /* D2 window 1 enable */
++ u32 awin1_enbl :1; /* D2 alternate window 1 enable */
++ u32 cur1_enbl :1; /* D2 cursor 1 enable */
++ u32 reserved_3 :4;
++
++ u32 ctl2_enbl :1; /* D2 controller 2 enable */
++ u32 win2_enbl :1; /* D2 window 2 enable */
++ u32 awin2_enbl :1; /* D2 alternate window 2 enable */
++ u32 cur2_enbl :1; /* D2 cursor 2 enable */
++ u32 reserved_4 :4;
++ } part;
++ u32 whole;
++};
++
++/* PLL 2 programming */
++union pm06r {
++ struct {
++ u32 clk_src :1; /* PLL 2 reference clock source */
++ u32 bypass :1; /* PLL 2 bypass */
++ u32 reserved_1 :2;
++ u32 p_par :3; /* PLL 2 P parameter */
++ u32 reserved_2 :1;
++
++ u32 n_par :5; /* PLL 2 N parameter */
++ u32 reserved_3 :3;
++
++ u32 m_par :8; /* PLL 2 M parameter */
++
++ u32 reserved_4 :4;
++ u32 trim :4; /* PLL 2 trim value */
++ } part;
++ u32 whole;
++};
++
++/* PLL 3 programming */
++union pm07r {
++ struct {
++ u32 clk_src :1; /* PLL 3 reference clock source */
++ u32 bypass :1; /* PLL 3 bypass */
++ u32 reserved_1 :2;
++ u32 p_par :3; /* PLL 3 P parameter */
++ u32 reserved_2 :1;
++
++ u32 n_par :5; /* PLL 3 N parameter */
++ u32 reserved_3 :3;
++
++ u32 m_par :8; /* PLL 3 M parameter */
++
++ u32 reserved_4 :4;
++ u32 trim :4; /* PLL 3 trim value */
++ } part;
++ u32 whole;
++};
++
++
++
++/* MIU interface control 1 */
++union mm00r {
++ struct {
++ u32 miu_enbl :1; /* MIU enable bit */
++ u32 mr_dsbl :1; /* MIU reset disable bit */
++ u32 edr_dsbl :1; /* embedded DRAM reset disable bit */
++ u32 reserved_1 :29;
++ } part;
++ u32 whole;
++};
++
++/* MIU interface control 2 */
++union mm01r {
++ struct {
++ u32 mc_src :1; /* memory clock source */
++ u32 msr_enbl :1; /* memory slow refresh enable bit */
++ u32 pb_cpu :1; /* page break enable for CPU */
++ u32 pb_gc1 :1; /* page break enable for GC1 */
++ u32 pb_gc2 :1; /* page break enable for GC2 */
++ u32 pb_stn_r :1; /* page break enable for STN read */
++ u32 pb_stn_w :1; /* page break enable for STN write */
++ u32 pb_ge :1; /* page break enable for GE */
++ u32 reserved_1 :4;
++ u32 mr_interval :14; /* normal memory refresh time interval */
++ u32 reserved_2 :4;
++ u32 edarm_enbl :1; /* embedded DRAM auto-refresh mode enable */
++ u32 eds_enbl :1; /* EDRAM standby enable for EDRAM normal
++ mode operation */
++ } part;
++ u32 whole;
++};
++
++/* memory interface control 3 */
++union mm02r {
++ struct {
++ u32 bs_ :2;
++ u32 bs_stnr :2; /* burst count for STN read memory cycles */
++ u32 bs_stnw :2; /* burst count for STN write memroy cycles */
++ u32 bs_ge :2; /* burst count for graphics engine
++ read/write memroy cycles */
++ u32 bs_cpuw :2; /* burst count for CPU write memory cycles */
++ u32 fifo_gc1 :4; /* GC1 display refresh FIFO threshold */
++ u32 fifo_gc2 :4; /* GC2 display refresh FIFO threshold */
++ u32 fifo_stnr :4; /* STN read FIFO threshold */
++ u32 fifo_stnw :4; /* STN write FIFO threshold */
++ u32 fifo_ge_src :3; /* GE source read FIFO threshold */
++ u32 fifo_ge_dst :3; /* GE destination read FIFO threshold */
++ } part;
++ u32 whole;
++};
++
++/* memory interface control 4 */
++union mm03r {
++ struct {
++ u32 rd_late_req :1; /* read latency request */
++ u32 reserved_1 :31;
++ } part;
++ u32 whole;
++};
++
++/* memory interface control 5 */
++union mm04r {
++ struct {
++ u32 latency :3; /* EDRAM latency */
++ u32 dmm_cyc :1; /* enable for the dummy cycle insertion
++ between read and write cycles */
++ u32 pre_dmm_cyc :1; /* enable for the dummy cycle insertion
++ between read/write and precharge cycles
++ for the same bank */
++ u32 reserved_1 :3;
++ u32 bnk_act_cls :2; /* bank activate command to bank close
++ command timing interval control */
++ u32 bnk_act_rw :1; /* bank activate command to read/wirte
++ command timing interval control */
++ u32 bnk_cls_act :1; /* bank close command to bank activate
++ command timing interval control */
++ u32 trc :1; /* row cycle time */
++ u32 reserved_2 :3;
++ u32 delay_r :2; /* programmable delay for read clock */
++ u32 delay_m :2; /* programmable delay for internal memory
++ clock */
++ } part;
++ u32 whole;
++};
++
++/* graphics controller 1 register */
++union gc00r {
++ struct {
++ u32 ctl_enbl :1; /* Controller 1 Enable */
++ u32 hc_reset :1; /* Horizontal Counter 1 Reset */
++ u32 vc_reset :1; /* Vertical Counter 1 Reset */
++ u32 iwin_enbl :1; /* Image Window 1 Enable */
++ u32 gcd :4; /* Graphics Color Depth (GCD) */
++
++ u32 hc_enbl :1; /* Hardware Cursor 1 Enable */
++ u32 reserved_1 :2;
++ u32 aiwin_enbl :1; /* Alternate Image Window Enable */
++ u32 agcd :4; /* Alternate Graphics Color Depth (AGCD) */
++
++ u32 g1rclk_src :2; /* G1RCLK Source */
++ u32 tm0 :1; /* Test Mode 0 */
++ u32 tm1 :1; /* Test Mode 1 */
++ u32 fd :3; /* G1MCLK First Clock Divisor (FD1) */
++ u32 reserved_2 :1;
++
++ u32 sd :8; /* G1MCLK Second Clock Divisor (SD1) */
++ } part;
++ u32 whole;
++};
++
++/* graphics controller CRT control */
++union gc01r {
++ struct {
++ u32 dac_enbl :2; /* CRT DAC enable */
++ u32 hsync_out :1; /* CRT HSYNC output during power down mode */
++ u32 vsync_out :1; /* CRT VSYNC output during power down mode */
++ u32 hsync_ctl :2; /* CRT HSYNC control */
++ u32 vsync_ctl :2; /* CRT VSYNC control */
++ /**/
++ u32 hsync_pol :1; /* CRT HSYNC polarity */
++ u32 vsync_pol :1; /* CRT VSYNC polarity */
++ u32 sync_p_enbl :1; /* sync pedestal enable */
++ u32 blnk_p_enbl :1; /* blank pedestal enable */
++ u32 c_sync_enbl :1; /* composite sync enable */
++ u32 vref_sel :1; /* VREF select */
++ u32 mn_sns_enbl :1; /* monitor sense enable */
++ u32 ct_out_enbl :1; /* constant output enable */
++ /**/
++ u32 dac_out_lvl :8; /* monitor sense DAC output level */
++ /**/
++ u32 blue_dac_r :1; /* blue DAC sense result */
++ u32 green_dac_r :1; /* green DAC sense result */
++ u32 red_dac_r :1; /* red DAC sense result */
++ u32 reserved_1 :1;
++ u32 mon_col_sel :1; /* mono/color monitor select */
++ u32 reserved_2 :3;
++ } part;
++ u32 whole;
++};
++
++/* horizontal display 1 control */
++union gc02r {
++ struct {
++ u32 hd1t :12; /* horizontal display 1 total */
++ u32 reserved_1 :4;
++
++ u32 hd1e :12; /* horizontal display 1 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 1 control */
++union gc03r {
++ struct {
++ u32 vd1t :12; /* vertical display 1 total */
++ u32 reserved_1 :4;
++
++ u32 vd1e :12; /* vertical display 1 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* horizontal sync 1 control */
++union gc04r {
++ struct {
++ u32 hs1s :12; /* horizontal sync 1 start */
++ u32 reserved_1 :4;
++
++ u32 hs1e :12; /* horizontal sync 1 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical sync 1 control */
++union gc05r {
++ struct {
++ u32 vs1s :12; /* vertical sync 1 start */
++ u32 reserved_1 :4;
++
++ u32 vs1e :12; /* vertical sync 1 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 1 count */
++union gc07r {
++ struct {
++ u32 vd_cnt :12; /* vertical display 1 count */
++ u32 reverved_1 :20;
++ } part;
++ u32 whole;
++};
++
++/* horizontal window 1 control */
++union gc08r {
++ struct {
++ u32 hw1s :12; /* horizontal window 1 start (HW1S) */
++ u32 reserved_1 :4;
++
++ u32 hw1w :12; /* horizontal window 1 width (HW1W) */
++ u32 w1ald :4; /* window 1 additional line data */
++ } part;
++ u32 whole;
++};
++
++/* vertical window 1 control */
++union gc09r {
++ struct {
++ u32 vw1s :12; /* vertical window 1 start */
++ u32 reserved_1 :4;
++ u32 vw1h :12; /* vertical window 1 height */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* window 1 start address */
++union gc0cr {
++ struct {
++ u32 w1sa :21; /* window 1 start address */
++ u32 reserved_1 :11;
++ } part;
++ u32 whole;
++};
++
++/* window 1 stride */
++union gc0er {
++ struct {
++ s16 w1st; /* window 1 stride */
++ s16 aw1st; /* alternate window 1 stride */
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 1 position */
++union gc10r {
++ struct {
++ u32 hc1s :12; /* horizontal cursor 1 start */
++ u32 reserved_1 :4;
++ u32 vc1s :12; /* vertical cursor 1 start */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 1 start address and offset */
++union gc11r {
++ struct {
++ u32 hc1sa :11; /* hardware cursor 1 start address */
++ u32 reserved_1 :5;
++ u32 hc1o :6; /* horizontal cursor 1 offset */
++ u32 reserved_2 :2;
++ u32 vc1o :6; /* vertical cursor 1 offset */
++ u32 reserved_3 :2;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 1 foreground color */
++union gc12r {
++ struct {
++ u32 hc1fc :24; /* hardware cursor 1 foreground color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 1 background color */
++union gc13r {
++ struct {
++ u32 hc1bc :24; /* hardware cursor 1 background color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++
++/* graphics controller 2 register */
++union gc20r {
++ struct {
++ u32 ctl_enbl :1; /* Controller 2 Enable */
++ u32 hc_reset :1; /* Horizontal Counter 2 Reset */
++ u32 vc_reset :1; /* Vertical Counter 2 Reset */
++ u32 iwin_enbl :1; /* Image Window 2 Enable */
++ u32 gcd :4; /* Graphics Color Depth (GCD) */
++
++ u32 hc_enbl :1; /* Hardware Cursor 2 Enable */
++ u32 reserved_1 :2;
++ u32 aiwin_enbl :1; /* Alternate Image Window Enable */
++ u32 agcd :4; /* Alternate Graphics Color Depth (AGCD) */
++
++ u32 g2rclk_src :2; /* G2RCLK Source */
++ u32 tm0 :1; /* Test Mode 0 */
++ u32 tm1 :1; /* Test Mode 1 */
++ u32 fd :3; /* G2MCLK First Clock Divisor (FD1) */
++ u32 reserved_2 :1;
++
++ u32 sd :8; /* G2MCLK Second Clock Divisor (SD1) */
++ } part;
++ u32 whole;
++};
++
++/* graphics controller CRC control */
++union gc21r {
++ struct {
++ u32 crc_enbl :1; /* CRC enable */
++ u32 vsync_wait :1; /* CRC input data control waitime of VSYNC */
++ u32 crc_o_sel :2; /* CRC output select */
++ u32 reserved_1 :4;
++ u32 crc_result :22; /* CRC result (read only) */
++ u32 reserved_2 :2;
++ } part;
++ u32 whole;
++};
++
++/* horizontal display 2 control */
++union gc22r {
++ struct {
++ u32 hd2t :12; /* horizontal display 2 total */
++ u32 reserved_1 :4;
++
++ u32 hd2e :12; /* horizontal display 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 2 control */
++union gc23r {
++ struct {
++ u32 vd2t :12; /* vertical display 2 total */
++ u32 reserved_1 :4;
++
++ u32 vd2e :12; /* vertical display 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* horizontal sync 2 control */
++union gc24r {
++ struct {
++ u32 hs2s :12; /* horizontal sync 2 start */
++ u32 reserved_1 :4;
++
++ u32 hs2e :12; /* horizontal sync 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical sync 2 control */
++union gc25r {
++ struct {
++ u32 vs2s :12; /* vertical sync 2 start */
++ u32 reserved_1 :4;
++
++ u32 vs2e :12; /* vertical sync 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 2 count */
++union gc27r {
++ struct {
++ u32 vd_cnt :12; /* vertical display 2 count */
++ u32 reverved_1 :20;
++ } part;
++ u32 whole;
++};
++
++/* horizontal window 2 control */
++union gc28r {
++ struct {
++ u32 hw2s :12; /* horizontal window 2 start (HW2S) */
++ u32 reserved_1 :4;
++
++ u32 hw2w :12; /* horizontal window 2 width (HW2W) */
++ u32 w2ald :4; /* window 2 additional line data */
++ } part;
++ u32 whole;
++};
++
++/* vertical window 2 control */
++union gc29r {
++ struct {
++ u32 vw2s :12; /* vertical window 2 start */
++ u32 reserved_1 :4;
++ u32 vw2h :12; /* vertical window 2 height */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* window 2 start address */
++union gc2cr {
++ struct {
++ u32 w2sa :21; /* window 2 start address */
++ u32 reserved_1 :11;
++ } part;
++ u32 whole;
++};
++
++/* window 2 stride */
++union gc2er {
++ struct {
++ s16 w2st; /* window 2 stride */
++ s16 aw2st; /* alternate window 2 stride */
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 position */
++union gc30r {
++ struct {
++ u32 hc2s :12; /* horizontal cursor 2 start */
++ u32 reserved_1 :4;
++ u32 vc2s :12; /* vertical cursor 2 start */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 start address and offset */
++union gc31r {
++ struct {
++ u32 hc2sa :11; /* hardware cursor 2 start address */
++ u32 reserved_1 :5;
++ u32 hc2o :6; /* horizontal cursor 2 offset */
++ u32 reserved_2 :2;
++ u32 vc2o :6; /* vertical cursor 2 offset */
++ u32 reserved_3 :2;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 foreground color */
++union gc32r {
++ struct {
++ u32 hc2fc :24; /* hardware cursor 2 foreground color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 background color */
++union gc33r {
++ struct {
++ u32 hc2bc :24; /* hardware cursor 2 background color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++
++/* primary drawing command register */
++union ge00r {
++ struct {
++ u32 rop :8; /* raster operation */
++ /**/
++ u32 cmd_typ :3; /* command type */
++ u32 x_dir :1; /* x direction */
++ u32 y_dir :1; /* y direction */
++ u32 src_mem :1; /* source memory */
++ u32 mon_src :1; /* mono source */
++ u32 mon_ptn :1; /* mono pattern */
++ /**/
++ u32 dst_trns_e :1; /* destination transparency enable */
++ u32 dst_trns_p :1; /* destination transparency polarity */
++ u32 mon_trns_e :1; /* mono source or mono pattern transparency
++ enable */
++ u32 mon_trns_p :1; /* mono transparency polarity */
++ u32 mod_sel :1; /* memory to screen or off screen to screen
++ mode select */
++ u32 alpha_sel :2; /* Alpha byte mask selection */
++ u32 sol_col :1; /* solid color */
++ /**/
++ u32 stride_eq :1; /* source stride is equal to destination
++ stride */
++ u32 rop2_sel :1; /* ROP2 code selection */
++ u32 clipping :1; /* enable clipping */
++ u32 auto_exec :1; /* auto execute */
++ u32 reserved_1 :4;
++ } part;
++ u32 whole;
++};
++
++/* primary width and height register */
++union ge01r {
++ struct {
++ u32 width :12; /* source/destination window width */
++ u32 reserved_1 :4;
++
++ u32 height :12; /* source/destination window height */
++ u32 reserved_2 :1;
++ u32 reserved_3 :3;
++ } bitblt;
++ struct {
++ u32 dm :17;
++ u32 axis_major :12;
++ u32 x_y :1; /* x-major or y-major */
++ u32 last_pix :1; /* decision to draw or not to draw the last
++ pixel of the line */
++ u32 reserved_1 :1;
++ } bresenham;
++ u32 whole;
++};
++
++/* primary destination address register */
++union ge02r {
++ struct {
++ u32 dst_x :12; /* destination x position */
++ u32 reserved_1 :1;
++ u32 h_offset :3; /* mono/color pattern horizontal offset */
++
++ u32 dst_y :12; /* destination y position */
++ u32 reserved_2 :1;
++ u32 v_offset :3; /* mono/color pattern vertical offset */
++ } window;
++ struct {
++ u32 x :12; /* starting x coordinate */
++ u32 dm :17; /* 17 bits major-axis delta */
++ u32 reserved_1 :3;
++ } line;
++ u32 whole;
++};
++
++/* source XY register/line draw starting Y coordinate and mintor axis delta */
++union ge03r {
++ struct {
++ u32 src_x :12; /* source X position */
++ u32 reserved_1 :4;
++
++ u32 src_y :12; /* source Y position */
++ u32 reserved_2 :4;
++ } window;
++ struct {
++ u32 start_y :12; /* starting Y coordinate */
++ u32 dn :17; /* 17 bits minor-axis delta */
++ u32 reserved_1 :3;
++ } line;
++ u32 whole;
++};
++
++/* clip left/top register */
++union ge05r {
++ struct {
++ u32 left :12; /* left edge of clipping rectangle */
++ u32 reserved_1 :4;
++
++ u32 top :12; /* top edge of clipping rectangle */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* source stride/offset register */
++union ge09r {
++ struct {
++ u32 src_strid :12; /* source line stride */
++ u32 reserved_1 :13;
++ u32 strt_bit :3; /* initial mono source bit offset */
++ u32 strt_byte :3; /* initial mono/color source byte offset */
++ u32 reserved_2 :1;
++ } line;
++ struct {
++ u32 strt_bit :5; /* initial mono source bit offset */
++ u32 reserved_1 :1;
++ u32 amount :10; /* number of 16 bytes amount that MIU need
++ to fetch from frame buffer */
++
++ u32 reserved_2 :9;
++ u32 bit_spc :7; /* bit space between lines */
++ } pack_mono;
++ struct {
++ u32 strt_bit :3; /* initial mono source bit offset */
++ u32 strt_byte :3; /* initial mono/color source byte offset */
++ u32 amount :10; /* number of 16 bytes amount that MIU need
++ to fetch from frame buffer */
++
++ u32 reserved_1 :9;
++ u32 bit_spc :3; /* bit space between lines */
++ u32 byt_spc :4; /* byte space between lines */
++ } pack_color;
++ u32 whole;
++};
++
++/* destination stride register and color depth */
++union ge0ar {
++ struct {
++ u32 dst_strid :12; /* destination line stride and color depth */
++ u32 reserved_1 :18;
++ u32 col_dpth :2; /* color depth */
++ } part;
++ u32 whole;
++};
++
++/* graphics controller color pallete */
++union c1xxr {
++ struct {
++ u8 red; /* red color pallete */
++ u8 green; /* green/gray color pallete */
++ u8 blue; /* blue color palette */
++ u8 reserved_1;
++ } part;
++ u32 whole;
++};
++
++/* devicee configuration register 0 */
++union dc00r {
++ struct {
++ u32 osc_bypass :1; /* oscillator bypass */
++ u32 osc_enbl :1; /* oscillator enable */
++ u32 pll1_bypass :1; /* PLL1 bypass */
++ u32 pll1_enbl :1; /* PLL1 enable */
++ u32 pll1_p_par :3; /* PLL1 P parameter */
++ u32 cpu_div :1; /* CPU interface clock divisor */
++ u32 pll1_n_par :5; /* PLL1 N parameter */
++ u32 saisc :1; /* StrongARM interface synchronizer control */
++ u32 s_chp_reset :1; /* software chip reset */
++ u32 mem_enbl :1; /* memory standby enable */
++ u32 pll1_m_par :8; /* PLL 1 M parameter */
++ u32 osc_shaper :1; /* oscillator shaper disable */
++ u32 fast_pwr :1; /* fast power sequencing */
++ u32 osc_frq :2; /* oscillator frequency select */
++ u32 pll1_trim :4; /* PLL 1 trim value */
++ } part;
++ u32 whole;
++};
++
++/* device ID/vendor ID register */
++union pc00r {
++ struct {
++ u16 device; /* device ID */
++ u16 vendor; /* vendor ID */
++ } part;
++ u32 whole;
++};
++
++/* Flat Panel Control Register */
++union fp00r {
++ struct {
++ u32 flatp_enbl : 2; /* Flat Panel Interface Enable */
++ u32 flatp_type : 2; /* Flat Panel Type */
++ u32 mono : 1; /* Mono/Color Panel Select */
++ u32 flatp_intf : 3; /* Flat Panel Interface */
++ u32 dither_pat : 2; /* Dither Pattern */
++ u32 reserved : 2; /* Reserved Must Be 0*/
++ u32 dither_col : 3; /* Dither Base Color */
++ u32 alt_win_ctl: 1; /* Alternate Window Control */
++ u32 frc_ctl : 2; /* FRC Control */
++ u32 dither_adj1: 6; /* Dither Pattern Adjust 1 */
++ u32 dither_adj2: 3; /* Dither Pattern Adjust 2 */
++ u32 dither_adj3: 1; /* Dither Pattern Adjust 3 */
++ u32 test_mode0 : 1; /* Test Mode 0 */
++ u32 test_mode1 : 1; /* Test Mode 1 */
++ u32 test_mode2 : 1; /* Test Mode 2 */
++ u32 test_mode3 : 1; /* Test Mode 3 */
++ } part;
++ u32 whole;
++};
++
++union fp01r {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++union fp02r {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++union fp03r {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++union fp04r {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++union fp05r {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++union fp0fr {
++ struct {
++ u32 dummy;
++ } part;
++ u32 whole;
++};
++
++
++
++
++/****
++ * Others
++ */
++
++#define CHIPNAME "MQ-200"
++
++extern void mq200_external_setpal(unsigned regno, unsigned long color, unsigned long addr);
++extern void mq200_external_setqmode(struct mq200_monitor_info*, unsigned long, spinlock_t *);
++extern void mq200_external_offdisplay(unsigned long);
++extern void mq200_external_ondisplay (unsigned long);
++extern int mq200_external_probe(unsigned long);
++
++
++
++#endif
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq_external.c linux-2.6.21/drivers/video/mq200/mq_external.c
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq_external.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq_external.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,513 @@
++/*
++ * Copyright (C) 2005 Holger Hans Peter Freyther
++ *
++ * Based ON:
++ *
++ * linux/drivers/video/mq200fb.c -- MQ-200 for a frame buffer device
++ * based on linux/driver/video/pm2fb.c
++ *
++ * 2007/03/11 mrdata:
++ * bug found in gc1_reset(), renaming to gc1_gc2_reset()
++ * extend mq200_external_ondisplay() -> LCD for GC2 and CRT for GC1
++ *
++ * Copyright (C) 2000 Lineo, Japan
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#include <asm/types.h>
++#include <asm/io.h>
++#include <linux/delay.h>
++#include <linux/spinlock.h>
++
++#include <asm/hardware.h>
++
++#include "mq200_data.h"
++
++
++#if 1
++#define PRINTK(args...) printk(args)
++#else
++#define PRINTK(args...)
++#endif
++
++
++/****
++ * power state transition to "state".
++ */
++static void
++power_state_transition(unsigned long register_base, int state)
++{
++ int i;
++ writel(state, PMCSR(register_base));
++ mdelay(300);
++ for (i = 1; ; i++) {
++ udelay(100);
++ if ((readl(PMCSR(register_base)) & 0x3) == state) {
++ break;
++ }
++ }
++}
++
++
++/****
++ * device configuration initialization.
++ */
++static void
++dc_reset(unsigned long register_base)
++{
++ union dc00r dc00r;
++
++ /* Reset First */
++ dc00r.whole = DC_RESET;
++ writel(dc00r.whole, DC00R(register_base));
++ mdelay(100);
++
++ dc00r.whole = 0xEF2082A;
++ writel(dc00r.whole, DC00R(register_base));
++ mdelay(300);
++ PRINTK(CHIPNAME ": DC00R = 0x%08X\n", readl(DC00R(register_base)));
++}
++
++
++/****
++ * initialize memory interface unit.
++ */
++static void
++miu_reset(unsigned long register_base)
++{
++ union mm00r mm00r;
++ union mm01r mm01r;
++ union mm02r mm02r;
++ union mm03r mm03r;
++ union mm04r mm04r;
++
++ /* MIU interface control 1 */
++ mm00r.whole = 0x4;
++ writel(mm00r.whole, MM00R(register_base));
++ mdelay(50);
++ writel(0, MM00R(register_base));
++ mdelay(50);
++
++ /* MIU interface control 2
++ * o PLL 1 output is used as memory clock source.
++ */
++ mm01r.whole = 0x4143e086;
++ writel(mm01r.whole, MM01R(register_base));
++
++ /* memory interface control 3 */
++ mm02r.whole = 0x6d6aabff;
++ writel(mm02r.whole, MM02R(register_base));
++
++ /* memory interface control 5 */
++ mm04r.whole = 0x10d;
++ writel(mm04r.whole, MM04R(register_base));
++
++ /* memory interface control 4 */
++ mm03r.whole = 0x1;
++ writel(mm03r.whole, MM03R(register_base));
++ mdelay(50);
++
++ /* MIU interface control 1 */
++ mm00r.whole = 0x3;
++ writel(mm00r.whole, MM00R(register_base));
++ mdelay(50);
++}
++
++/****
++ *
++ */
++static
++void fpctrl_reset(unsigned long addr)
++{
++ /*
++ * We're in D0 State, let us set the FPCTRL
++ */
++ union fp00r fp00r;
++ union fp01r fp01r;
++ union fp02r fp02r;
++ union fp03r fp03r;
++ union fp04r fp04r;
++ union fp0fr fp0fr;
++
++ fp00r.whole = 0x6320;
++ writel(fp00r.whole, FP00R(addr));
++
++ fp01r.whole = 0x20;
++ writel(fp01r.whole, FP01R(addr));
++
++ fp04r.whole = 0xBD0001;
++ writel(fp04r.whole, FP04R(addr));
++
++ /* Set Flat Panel General Purpose register first */
++ fp02r.whole = 0x0;
++ writel(fp02r.whole, FP02R(addr));
++
++ fp03r.whole = 0x0;
++ writel(fp03r.whole, FP03R(addr));
++
++ fp0fr.whole = 0xA16c44;
++ writel(fp0fr.whole, FP0FR(addr));
++
++ /* Set them again */
++ fp02r.whole = 0x0;
++ writel(fp02r.whole, FP02R(addr));
++
++ fp03r.whole = 0x0;
++ writel(fp03r.whole, FP03R(addr));
++}
++
++
++/****
++ * initialize power management unit.
++ */
++static void
++pmu_reset(unsigned long register_base)
++{
++ union pm00r pm00r;
++ union pm01r pm01r;
++ union pm02r pm02r;
++
++ /* power management miscellaneous control
++ * o GE is driven by PLL 1 clock.
++ */
++ pm00r.whole = 0xc0900;
++ writel(pm00r.whole, PM00R(register_base));
++
++ /* D1 state control */
++ pm01r.whole = 0x5000271;
++ writel(pm01r.whole, PM01R(register_base));
++
++ /* D2 state control */
++ pm02r.whole = 0x271;
++ writel(pm02r.whole, PM02R(register_base));
++}
++
++/****
++ * initialize graphics controller 1
++ * and graphics controller 2
++ */
++static void
++gc1_gc2_reset(unsigned long register_base, spinlock_t *lock )
++{
++ unsigned long flags;
++ union gc00r gc00r;
++ union gc01r gc01r;
++ union gc02r gc02r;
++ union gc03r gc03r;
++ union gc04r gc04r;
++ union gc05r gc05r;
++ union gc08r gc08r;
++ union gc09r gc09r;
++ union gc0cr gc0cr;
++ union gc0er gc0er;
++ union gc20r gc20r;
++ union gc22r gc22r;
++ union gc23r gc23r;
++ union gc24r gc24r;
++ union gc25r gc25r;
++ union gc28r gc28r;
++ union gc29r gc29r;
++ union gc2cr gc2cr;
++ union gc2er gc2er;
++
++ union pm00r pm00r;
++ union pm06r pm06r;
++ union pm06r pm07r;
++
++ spin_lock_irqsave(lock, flags);
++
++ /* alternate window 1 stride */
++ gc0er.whole = 0x640;
++ writel(gc0er.whole, GC0ER(register_base));
++
++ /* image window 1 start address */
++ gc0cr.whole = 0x0;
++ writel(gc0cr.whole, GC0CR(register_base));
++
++ /* alternate window 2 stride */
++ gc2er.whole = 0x640;
++ writel(gc0er.whole, GC2ER(register_base));
++
++ /* image window 2 start address */
++ gc2cr.whole = 0x0;
++ writel(gc2cr.whole, GC2CR(register_base));
++
++ /* read PM Register */
++ pm00r.whole = readl(PM00R(register_base));
++
++ /* horizontal window 1 control */
++ gc08r.whole = 0x131f0000;
++ writel(gc08r.whole, GC08R(register_base));
++
++ /* vertical window 1 control */
++ gc09r.whole = 0x12570000;
++ writel(gc09r.whole, GC09R(register_base));
++
++ /* horizontal display 1 control */
++ gc02r.whole = 0x320041e;
++ writel(gc02r.whole, GC02R(register_base));
++
++ /* vertical display 1 control */
++ gc03r.whole = 0x2570273;
++ writel(gc03r.whole, GC03R(register_base));
++
++ /* horizontal sync 1 control */
++ gc04r.whole = 0x3c70347;
++ writel(gc04r.whole, GC04R(register_base));
++
++ /* vertical sync 1 control */
++ gc05r.whole = 0x25d0259;
++ writel(gc05r.whole, GC05R(register_base));
++
++ /* graphics controller CRT control */
++ gc01r.whole = 0x800;
++ writel(gc01r.whole, GC01R(register_base));
++
++ /* PLL 2 programming */
++ pm06r.whole = 0xE90830;
++ writel(pm06r.whole, PM06R(register_base));
++
++ /* graphics controller 1 register
++ * o GC1 clock source is PLL 2.
++ * o hardware cursor is disabled.
++ */
++ gc00r.whole = 0x10000C8 | 0x20000;
++ writel(gc00r.whole, GC00R(register_base));
++
++#if 0
++ /* alternate horizontal window 1 control */
++ writel(0, GC0AR(register_base));
++
++ /* alternate vertical window 1 control */
++ writel(0, GC0BR(register_base));
++
++ /* window 1 start address */
++ writel(0x2004100, GC0CR(register_base));
++
++ /* alternate window 1 start address */
++ writel(0, GC0DR(register_base));
++
++ /* window 1 stride */
++ gc0er.whole = 0x5100048;
++ writel(gc0er.whole, GC0ER(register_base));
++
++ /* reserved register - ??? - */
++ writel(0x31f, GC0FR(register_base));
++#endif
++
++#if 0
++ /* hardware cursor 1 position */
++ writel(0, GC10R(register_base));
++
++ /* hardware cursor 1 start address and offset */
++ gc11r.whole = 0x5100048;
++ writel(gc11r.whole, GC11R(register_base));
++
++ /* hardware cursor 1 foreground color */
++ writel(0x00ffffff, GC12R(register_base));
++
++ /* hardware cursor 1 background color */
++ writel(0x00000000, GC13R(register_base));
++#endif
++
++ /* horizontal window 2 control */
++ gc28r.whole = 0x31f0000;
++ writel(gc28r.whole, GC28R(register_base));
++
++ /* vertical window 2 control */
++ gc29r.whole = 0x2570000;
++ writel(gc29r.whole, GC29R(register_base));
++
++ /* horizontal display 2 control */
++ gc22r.whole = 0x320041e;
++ writel(gc22r.whole, GC22R(register_base));
++
++ /* vertical display 2 control */
++ gc23r.whole = 0x2570273;
++ writel(gc23r.whole, GC23R(register_base));
++
++ /* horizontal sync 2 control */
++ gc24r.whole = 0x3c70347;
++ writel(gc24r.whole, GC24R(register_base));
++
++ /* vertical sync 2 control */
++ gc25r.whole = 0x25d0259;
++ writel(gc25r.whole, GC25R(register_base));
++
++ /* graphics controller CRT control */
++ gc01r.whole = 0x800;
++ writel(gc01r.whole, GC01R(register_base));
++
++ /* PLL 3 programming */
++ pm07r.whole = 0xE90830;
++ writel(pm07r.whole, PM07R(register_base));
++
++ /* graphics controller 2 register
++ * o GC2 clock source is PLL 3.
++ * o hardware cursor is disabled.
++ */
++ gc20r.whole = 0x10000C8 | 0x30000;
++ writel(gc20r.whole, GC20R(register_base));
++
++ /*
++ * Enable PLL2 and PLL3 in the PM Register
++ */
++ pm00r.part.pll2_enbl = 0x1;
++ pm00r.part.pll3_enbl = 0x1;
++ writel(pm00r.whole, PM00R(register_base));
++
++ spin_unlock_irqrestore(lock, flags);
++}
++
++
++/****
++ * initialize graphics engine.
++ */
++static void
++ge_reset(unsigned long register_base)
++{
++ /* drawing command register */
++ writel(0, GE00R(register_base));
++
++ /* promary width and height register */
++ writel(0, GE01R(register_base));
++
++ /* primary destination address register */
++ writel(0, GE02R(register_base));
++
++ /* primary source XY register */
++ writel(0, GE03R(register_base));
++
++ /* primary color compare register */
++ writel(0, GE04R(register_base));
++
++ /* primary clip left/top register */
++ writel(0, GE05R(register_base));
++
++ /* primary clip right/bottom register */
++ writel(0, GE06R(register_base));
++
++ /* primary source and pattern offset register */
++ writel(0, GE07R(register_base));
++
++ /* primary foreground color register/rectangle fill color depth */
++ writel(0, GE08R(register_base));
++
++ /* source stride/offset register */
++ writel(0, GE09R(register_base));
++
++ /* destination stride register and color depth */
++ writel(0, GE0AR(register_base));
++
++ /* image base address register */
++ writel(0, GE0BR(register_base));
++}
++
++/****
++ * initialize Color Palette 1.
++ */
++static void
++cp1_reset(unsigned long addr_info)
++{
++ int i;
++
++ for (i = 0; i < 256; i++)
++ writel(0, C1xxR(addr_info, i));
++}
++
++
++/*
++ * Below functions are called from the skeleton
++ */
++void mq200_external_setpal(unsigned regno, unsigned long color, unsigned long addr)
++{
++ writel(color,C1xxR(addr,regno));
++}
++
++void mq200_external_setqmode(struct mq200_monitor_info* info,
++ unsigned long addr, spinlock_t *lock)
++{
++ dc_reset(addr); /* device configuration */
++
++ power_state_transition(addr, 0); /* transition to D0 state */
++
++ pmu_reset(addr); /* power management unit */
++
++ miu_reset(addr); /* memory interface unit */
++
++ ge_reset(addr); /* graphics engine */
++
++ fpctrl_reset(addr); /* reset the panel settings */
++
++ gc1_gc2_reset(addr, lock); /* graphics controller 1 and 2 */
++
++ cp1_reset(addr); /* color palette 1 */
++
++ mq200_external_ondisplay(addr); /* LCD and CRT */
++}
++
++void mq200_external_offdisplay(unsigned long addr)
++{
++ /*
++ * Move the MQ200 to D3 mode
++ */
++ power_state_transition(addr, 3);
++}
++
++/**
++ * to be called after mq200_external_setqmode
++ */
++void mq200_external_ondisplay (unsigned long addr)
++{
++ /*
++ * Set the framebuffer details
++ */
++ union gc00r gc00r;
++ union gc01r gc01r;
++ union gc20r gc20r;
++ union fp00r fp00r;
++
++ /* enable LCD for GC2 */
++ fp00r.whole = readl(FP00R(addr));
++ fp00r.whole &= 0xfffffffc;
++
++ gc20r.whole = readl(GC20R(addr));
++
++ if(!(gc20r.whole & 0x1)) {
++ gc20r.whole |= 0x1;
++ writel(gc20r.whole, GC20R(addr));
++ }
++
++ fp00r.whole |= 0x3;
++ writel(fp00r.whole, FP00R(addr));
++
++ /* enable CRT for GC1 */
++ gc00r.whole = readl(GC00R(addr));
++
++ if(!(gc00r.whole & 0x1)) {
++ gc00r.whole |= 0x1;
++ writel(gc00r.whole, GC00R(addr));
++ }
++
++ gc01r.whole = readl(GC01R(addr));
++ gc01r.whole &= 0xfffffffc;
++
++ gc01r.whole |= 0x1;
++ writel(gc01r.whole, GC01R(addr));
++
++}
++
++int mq200_external_probe(unsigned long addr)
++{
++ union pc00r pc00r;
++ if(readl(PMR(addr)) != PMR_VALUE)
++ return 0;
++
++ pc00r.whole = readl(PC00R(addr));
++ printk(KERN_INFO "mq200 video driver found Vendor: 0x%X Device: 0x%X\n",
++ pc00r.part.device, pc00r.part.vendor);
++ return 1;
++}
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.21/drivers/video/mq200/mq_skeleton.c
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq_skeleton.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq_skeleton.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,398 @@
++/*
++ * Author: Holger Hans Peter Freyther
++ *
++ *
++ * This implements the frame buffer driver interface to communicate
++ * with the kernel.
++ * It uses the mq200 routines from the ucLinux driver from Lineo
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/autoconf.h>
++#include <linux/platform_device.h>
++#include <linux/module.h>
++#include <linux/fb.h>
++#include <linux/types.h>
++#include <linux/spinlock.h>
++
++#include "mq200_data.h"
++
++#if CONFIG_SA1100_SIMPAD
++/*
++ * Siemens SIMpad specefic data
++ */
++#include <asm/arch/simpad.h>
++#include <asm/arch/hardware.h>
++
++#define MQ200_REGIONS simpad_mq200_regions
++#define MQ200_MONITOR simpad_mq200_panel
++
++static struct mq200_io_regions simpad_mq200_regions = {
++ .fb_size = MQ200_FB_SIZE,
++ .phys_mmio_base = 0x4be00000,
++ .virt_mmio_base = 0xf2e00000,
++ .phys_fb_base = 0x4b800000,
++ .virt_fb_base = 0xf2800000,
++};
++
++static struct mq200_monitor_info simpad_mq200_panel = {
++ .horizontal_res = 800,
++ .vertical_res = 600,
++ .depth = 16,
++ .refresh = 60,
++ .line_length = 1600,
++ .flags = 0x00130004,
++};
++
++extern long get_cs3_shadow(void);
++extern void set_cs3_bit(int value);
++extern void clear_cs3_bit(int value);
++#endif
++
++
++
++struct mq200_info {
++ struct fb_info fb_info;
++ struct mq200_io_regions io_regions;
++ struct mq200_monitor_info monitor_info;
++
++ /* palette */
++ u32 pseudo_palette[17]; /* 16 colors + 1 in reserve not that well documented... */
++ spinlock_t lock;
++};
++
++
++
++static int mq200_blank( int blank_mode, struct fb_info *info )
++{
++#ifdef CONFIG_SA1100_SIMPAD
++ if(blank_mode ){
++ clear_cs3_bit(DISPLAY_ON);
++ }else {
++ set_cs3_bit(DISPLAY_ON);
++ }
++#endif
++ return 0;
++}
++
++
++static int mq200_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info )
++{ /* TODO do we need sanity checks here */
++ return 0;
++}
++
++
++static int mq200_set_par( struct fb_info *info )
++{
++ /* TODO set paraemeter */
++ return 0;
++}
++
++static int mq200_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned transp,
++ struct fb_info *info )
++{
++ struct mq200_info *p;
++ unsigned long color;
++ u32* pal = info->pseudo_palette;
++
++ p = info->par;
++
++ if(regno > 255 )
++ return 1;
++
++ switch( info->var.bits_per_pixel ){
++ case 16:
++ pal[regno] =
++ ((red & 0xf800) >> 0) |
++ ((green & 0xf800) >> 5) | ((blue & 0xf800) >> 11);
++ break;
++ case 24:
++ pal[regno] =
++ ((red & 0xff00) << 8) |
++ ((green & 0xff00)) | ((blue & 0xff00) >> 8);
++ break;
++ case 32:
++ pal[regno] =
++ ((red & 0xff00) >> 8) |
++ ((green & 0xff00)) | ((blue & 0xff00) << 8);
++ break;
++ default:
++ break;
++ }
++
++ red &= 0xFF;
++ green &= 0xFF;
++ blue &= 0xFF;
++
++ color = red | (green << 8) | (blue << 16);
++ mq200_external_setpal(regno, color, p->io_regions.virt_mmio_base);
++
++ return 0;
++}
++
++
++static struct fb_ops mq200_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = mq200_check_var,
++ .fb_set_par = mq200_set_par,
++ .fb_setcolreg = mq200_setcolreg,
++#ifdef FB_SOFT_CURSOR
++ .fb_cursor = soft_cursor, /* FIXME use hardware cursor */
++#endif
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_blank = mq200_blank,
++};
++
++
++/*********************************************************************
++ *
++ * Device driver and module init code
++ * this will register to the fb layer later
++ *
++ *********************************************************************/
++static void mq200_internal_init_color( struct fb_bitfield* red,
++ struct fb_bitfield* green,
++ struct fb_bitfield* blue,
++ int bpp )
++{
++ switch ( bpp )
++ {
++ case 16:
++ red->offset = 11;
++ green->offset = 5;
++ blue->offset = 0;
++
++ red->length = 5;
++ green->length = 6;
++ blue->length = 5;
++ break;
++ case 24:
++ red->offset = 16;
++ green->offset = 8;
++ blue->offset = 0;
++
++ red->length = 8;
++ green->length = 8;
++ blue->length = 8;
++ break;
++ case 32:
++ red->offset = 0;
++ green->offset = 8;
++ blue->offset = 16;
++
++ red->length = 8;
++ green->length = 8;
++ blue->length = 8;
++ case 8: /* fall through */
++ default:
++ red->offset = green->offset = blue->offset = 0;
++ red->length = green->length = blue->length = bpp;
++ break;
++ }
++
++}
++
++
++static struct mq200_info* __init mq200_internal_init_fbinfo(void)
++{
++ struct mq200_info *info = NULL;
++
++ info = (struct mq200_info*)kmalloc(sizeof(*info), GFP_KERNEL);
++ if(!info)
++ return NULL;
++
++ /*
++ * Initialize memory
++ */
++ memset(info, 0, sizeof(struct mq200_info) );
++ spin_lock_init(&info->lock);
++
++ /* set the base IO addresses */
++ info->io_regions = MQ200_REGIONS;
++ info->monitor_info = MQ200_MONITOR;
++
++ info->fb_info.screen_base = (char *)info->io_regions.virt_fb_base;
++
++ /* fb_fix_screeninfo filling */
++ strcpy(info->fb_info.fix.id, "MQ200_FB" );
++ info->fb_info.fix.smem_start = info->io_regions.phys_fb_base;
++ info->fb_info.fix.smem_len = info->io_regions.fb_size; /* - CURSOR_IMAGE */
++ info->fb_info.fix.mmio_start = info->io_regions.phys_mmio_base;
++ info->fb_info.fix.mmio_len = MQ200_REGS_SIZE;
++ info->fb_info.fix.type = FB_TYPE_PACKED_PIXELS;
++ info->fb_info.fix.accel = FB_ACCEL_NONE;
++ info->fb_info.fix.line_length = MQ200_MONITOR_LINE_LENGTH(info);
++
++ if(MQ200_MONITOR_DEPTH(info) <= 8 )
++ info->fb_info.fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ else if( MQ200_MONITOR_DEPTH(info) >= 16 )
++ info->fb_info.fix.visual = FB_VISUAL_DIRECTCOLOR;
++ else
++ panic("Calling mq200 with wrong display data\n");
++
++ /* set the variable screen info */
++ info->fb_info.var.xres = MQ200_MONITOR_HORI_RES(info);
++ info->fb_info.var.yres = MQ200_MONITOR_VERT_RES(info);
++ info->fb_info.var.xres_virtual = MQ200_MONITOR_HORI_RES(info);
++ info->fb_info.var.yres_virtual = MQ200_MONITOR_VERT_RES(info);
++ info->fb_info.var.bits_per_pixel = MQ200_MONITOR_DEPTH(info);
++
++ mq200_internal_init_color(&info->fb_info.var.red,
++ &info->fb_info.var.green,
++ &info->fb_info.var.blue,
++ MQ200_MONITOR_DEPTH(info) );
++
++ info->fb_info.var.transp.length = info->fb_info.var.transp.offset = 0;
++ info->fb_info.var.height = info->fb_info.var.width = -1;
++
++ info->fb_info.var.vmode = FB_VMODE_NONINTERLACED;
++ info->fb_info.var.pixclock = 10000;
++ info->fb_info.var.left_margin = info->fb_info.var.right_margin = 16;
++ info->fb_info.var.upper_margin = info->fb_info.var.lower_margin = 16;
++ info->fb_info.var.hsync_len = info->fb_info.var.vsync_len = 8;
++
++ info->fb_info.var.nonstd = 0;
++ info->fb_info.var.activate = FB_ACTIVATE_NOW;
++ info->fb_info.var.accel_flags = 0;
++
++ return info;
++}
++
++
++extern void mq200_register_attributes(struct device* );
++/*
++ * gets called from the bus
++ * we will register our framebuffer from here
++ */
++static int __init mq200_probe(struct device *dev)
++{
++ struct mq200_info *info = NULL;
++ int retv= 0;
++
++ info = mq200_internal_init_fbinfo();
++ if(!mq200_external_probe(info->io_regions.virt_mmio_base))
++ goto error_out;
++
++ GPDR |= (1<<3);
++ GAFR &= ~(1<<3);
++ GPSR |= (1<<3);
++
++ mq200_external_setqmode(&info->monitor_info,
++ info->io_regions.virt_mmio_base,
++ &info->lock);
++
++ info->fb_info.fbops = &mq200_ops;
++ info->fb_info.flags = FBINFO_FLAG_DEFAULT;
++
++ mq200_check_var(&info->fb_info.var, &info->fb_info );
++
++ fb_alloc_cmap(&info->fb_info.cmap, 1 << MQ200_MONITOR_DEPTH(info), 0 );
++
++ info->fb_info.pseudo_palette = (void*)info->pseudo_palette;
++
++ /* save the pointer to the mq200 struct in var */
++ info->fb_info.par = info;
++
++ retv = register_framebuffer(&info->fb_info );
++ if(retv < 0)
++ goto error_out;
++
++
++ /* will get unset if retv != 0 */
++ dev_set_drvdata(dev, info );
++ return retv;
++
++/*
++ * Free the info and exit
++ */
++error_out:
++ kfree(info);
++ return -EINVAL;
++}
++
++#ifdef CONFIG_PM
++static struct mq200_info* get_mq200_info( struct device *dev)
++{
++ return dev_get_drvdata(dev);
++}
++
++static unsigned long get_mmio_base( struct device *dev )
++{
++ struct mq200_info *info = get_mq200_info(dev);
++ return info->io_regions.virt_mmio_base;
++}
++
++static struct mq200_monitor_info* get_monitor_info( struct device *dev)
++{
++ struct mq200_info *info = get_mq200_info(dev);
++ return &info->monitor_info;
++}
++
++static spinlock_t* get_spinlock( struct device *dev)
++{
++ return &get_mq200_info(dev)->lock;
++}
++
++/*
++ * FIXME: make sure we only call mq200_external_offdisplay only once
++ * a 2nd time will hang the kernel -zecke
++ *
++ * FIXME: save the content of the framebuffer inside dev->saved_state
++ * so on resume we can memcpy it back into the buffer and userspace
++ * does not need to redraw
++ *
++ * functions for suspending and resuming
++ */
++static int mq200_suspend(struct device *dev, pm_message_t state)
++{
++
++ mq200_external_offdisplay( get_mmio_base(dev) );
++ clear_cs3_bit(DISPLAY_ON);
++
++
++ return 0;
++}
++
++static int mq200_resume(struct device *dev)
++{
++ unsigned long mem = get_mmio_base(dev);
++ struct mq200_monitor_info *monitor = get_monitor_info(dev);
++ mq200_external_setqmode(monitor, mem, get_spinlock(dev) );
++
++
++ /*
++ * Set display on if it was on
++ */
++ set_cs3_bit(DISPLAY_ON);
++
++ return 0;
++}
++
++
++#endif
++
++
++static struct device_driver mq200fb_driver = {
++ .name = "simpad-mq200",
++ .bus = &platform_bus_type,
++ .probe = mq200_probe, /* will be called after we've registered the driver */
++ .suspend = mq200_suspend,
++ .resume = mq200_resume
++};
++
++int __devinit mq200_init(void)
++{
++ return driver_register(&mq200fb_driver);
++}
++
++module_init(mq200_init);
++MODULE_DESCRIPTION("MQ200 framebuffer driver");
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Holger Hans Peter Freyther");
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-net-shared-irq.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-net-shared-irq.patch
new file mode 100644
index 0000000000..e925781ccd
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-net-shared-irq.patch
@@ -0,0 +1,63 @@
+diff -uNr linux-2.6.21.vanilla/drivers/net/pcmcia/pcnet_cs.c linux-2.6.21/drivers/net/pcmcia/pcnet_cs.c
+--- linux-2.6.21.vanilla/drivers/net/pcmcia/pcnet_cs.c 2007-05-29 21:35:00.000000000 +0200
++++ linux-2.6.21/drivers/net/pcmcia/pcnet_cs.c 2007-05-30 17:51:21.000000000 +0200
+@@ -26,6 +26,8 @@
+ CCAE support. Drivers merged back together, and shared-memory
+ Socket EA support added, by Ken Raeburn, September 1995.
+
++ mrdata: -added shared irq
++
+ ======================================================================*/
+
+ #include <linux/kernel.h>
+@@ -254,7 +256,7 @@
+ info->p_dev = link;
+ link->priv = dev;
+
+- link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
++ link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+ link->conf.Attributes = CONF_ENABLE_IRQ;
+ link->conf.IntType = INT_MEMORY_AND_IO;
+diff -uNr linux-2.6.21.vanilla/drivers/net/wireless/hostap/hostap_cs.c linux-2.6.21/drivers/net/wireless/hostap/hostap_cs.c
+--- linux-2.6.21.vanilla/drivers/net/wireless/hostap/hostap_cs.c 2007-05-29 21:35:00.000000000 +0200
++++ linux-2.6.21/drivers/net/wireless/hostap/hostap_cs.c 2007-05-30 17:53:20.000000000 +0200
+@@ -1,3 +1,8 @@
++/*
++ *
++ * mrdata: -added shared irq
++ */
++
+ #define PRISM2_PCCARD
+
+ #include <linux/module.h>
+@@ -695,7 +700,7 @@
+ * irq structure is initialized.
+ */
+ if (link->conf.Attributes & CONF_ENABLE_IRQ) {
+- link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_FIRST_SHARED | IRQ_HANDLE_PRESENT;
+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+ link->irq.Handler = prism2_interrupt;
+ link->irq.Instance = dev;
+diff -uNr linux-2.6.21.vanilla/drivers/net/wireless/orinoco_cs.c linux-2.6.21/drivers/net/wireless/orinoco_cs.c
+--- linux-2.6.21.vanilla/drivers/net/wireless/orinoco_cs.c 2007-05-29 21:35:00.000000000 +0200
++++ linux-2.6.21/drivers/net/wireless/orinoco_cs.c 2007-05-30 17:52:19.000000000 +0200
+@@ -8,6 +8,8 @@
+ * cards such as the 3Com AirConnect and Ericsson WLAN.
+ *
+ * Copyright notice & release notes in file orinoco.c
++ *
++ * mrdata: added shared irq
+ */
+
+ #define DRIVER_NAME "orinoco_cs"
+@@ -120,7 +122,7 @@
+ link->priv = dev;
+
+ /* Interrupt setup */
+- link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_FIRST_SHARED | IRQ_HANDLE_PRESENT;
+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+ link->irq.Handler = orinoco_interrupt;
+ link->irq.Instance = dev;
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-pcmcia.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-pcmcia.patch
new file mode 100644
index 0000000000..6ff5e37dcf
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-pcmcia.patch
@@ -0,0 +1,162 @@
+diff -uNr linux-2.6.21.vanilla/drivers/pcmcia/cs.c linux-2.6.21/drivers/pcmcia/cs.c
+--- linux-2.6.21.vanilla/drivers/pcmcia/cs.c 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/pcmcia/cs.c 2007-05-30 18:10:20.000000000 +0200
+@@ -10,6 +10,8 @@
+ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
+ *
+ * (C) 1999 David A. Hinds
++ *
++ * mrdata: -added suspend fix
+ */
+
+ #include <linux/module.h>
+@@ -60,6 +62,10 @@
+ INT_MODULE_PARM(unreset_delay, 10); /* centiseconds */
+ INT_MODULE_PARM(unreset_check, 10); /* centiseconds */
+ INT_MODULE_PARM(unreset_limit, 30); /* unreset_check's */
++// INT_MODULE_PARM(unreset_delay, 20); /* centiseconds */
++// INT_MODULE_PARM(unreset_check, 100); /* centiseconds */
++// INT_MODULE_PARM(unreset_limit, 300); /* unreset_check's */
++
+
+ /* Access speed for attribute memory windows */
+ INT_MODULE_PARM(cis_speed, 300); /* ns */
+@@ -365,6 +371,7 @@
+ skt->ops->set_socket(skt, &skt->socket);
+
+ msleep(unreset_delay * 10);
++
+ for (i = 0; i < unreset_limit; i++) {
+ skt->ops->get_status(skt, &status);
+
+@@ -430,7 +437,7 @@
+
+ msleep(initial_delay * 10);
+
+- for (i = 0; i < 100; i++) {
++ for (i = 0; i < 100; i++) {
+ skt->ops->get_status(skt, &status);
+ if (!(status & SS_DETECT))
+ return CS_NO_CARD;
+diff -uNr linux-2.6.21.vanilla/drivers/pcmcia/sa1100_generic.c linux-2.6.21/drivers/pcmcia/sa1100_generic.c
+--- linux-2.6.21.vanilla/drivers/pcmcia/sa1100_generic.c 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/pcmcia/sa1100_generic.c 2007-05-30 18:00:40.000000000 +0200
+@@ -28,6 +28,9 @@
+ the provisions above, a recipient may use your version of this
+ file under either the MPL or the GPL.
+
++ 2007 mrnice: added thesings changes from device_driver
++ to platform_driver - many thx to thesing
++
+ ======================================================================*/
+
+ #include <linux/module.h>
+@@ -81,13 +84,15 @@
+ return ret;
+ }
+
+-static struct device_driver sa11x0_pcmcia_driver = {
+- .probe = sa11x0_drv_pcmcia_probe,
+- .remove = soc_common_drv_pcmcia_remove,
+- .name = "sa11x0-pcmcia",
+- .bus = &platform_bus_type,
+- .suspend = pcmcia_socket_dev_suspend,
+- .resume = pcmcia_socket_dev_resume,
++static struct platform_driver sa11x0_pcmcia_driver = {
++ .driver = {
++ .name = "sa11x0-pcmcia",
++ .probe = sa11x0_drv_pcmcia_probe,
++ .remove = soc_common_drv_pcmcia_remove,
++ .suspend= pcmcia_socket_dev_suspend,
++ .resume = pcmcia_socket_dev_resume,
++ //.bus = &platform_bus_type,
++ },
+ };
+
+ /* sa11x0_pcmcia_init()
+@@ -100,7 +105,7 @@
+ */
+ static int __init sa11x0_pcmcia_init(void)
+ {
+- return driver_register(&sa11x0_pcmcia_driver);
++ return platform_driver_register(&sa11x0_pcmcia_driver);
+ }
+
+ /* sa11x0_pcmcia_exit()
+@@ -110,7 +115,7 @@
+ */
+ static void __exit sa11x0_pcmcia_exit(void)
+ {
+- driver_unregister(&sa11x0_pcmcia_driver);
++ platform_driver_unregister(&sa11x0_pcmcia_driver);
+ }
+
+ MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
+diff -uNr linux-2.6.21.vanilla/drivers/pcmcia/sa1100_simpad.c linux-2.6.21/drivers/pcmcia/sa1100_simpad.c
+--- linux-2.6.21.vanilla/drivers/pcmcia/sa1100_simpad.c 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/pcmcia/sa1100_simpad.c 2007-05-30 18:08:53.000000000 +0200
+@@ -3,6 +3,8 @@
+ *
+ * PCMCIA implementation routines for simpad
+ *
++ * mrdata: -added cs3_ro stuff to get fix voltage issue
++ *
+ */
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+@@ -14,7 +16,8 @@
+ #include <asm/irq.h>
+ #include <asm/arch/simpad.h>
+ #include "sa1100_generic.h"
+-
++
++extern long get_cs3_ro(void);
+ extern long get_cs3_shadow(void);
+ extern void set_cs3_bit(int value);
+ extern void clear_cs3_bit(int value);
+@@ -25,7 +28,6 @@
+
+ static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
+ {
+-
+ clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+
+ skt->irq = IRQ_GPIO_CF_IRQ;
+@@ -47,21 +49,15 @@
+ struct pcmcia_state *state)
+ {
+ unsigned long levels = GPLR;
+- long cs3reg = get_cs3_shadow();
++ long cs3_ro_reg = get_cs3_ro();
+
+- state->detect=((levels & GPIO_CF_CD)==0)?1:0;
+- state->ready=(levels & GPIO_CF_IRQ)?1:0;
+- state->bvd1=1; /* Not available on Simpad. */
+- state->bvd2=1; /* Not available on Simpad. */
+- state->wrprot=0; /* Not available on Simpad. */
+-
+- if((cs3reg & 0x0c) == 0x0c) {
+- state->vs_3v=0;
+- state->vs_Xv=0;
+- } else {
+- state->vs_3v=1;
+- state->vs_Xv=0;
+- }
++ state->detect = ((levels & GPIO_CF_CD) == 0) ? 1 : 0 ;
++ state->ready = (levels & GPIO_CF_IRQ) ? 1 : 0 ;
++ state->bvd1 = (cs3_ro_reg & PCMCIA_BVD1) ? 1 : 0 ; /* alt: =1 Not available on Simpad. */
++ state->bvd2 = (cs3_ro_reg & PCMCIA_BVD2) ? 1 : 0 ; /* alt: =1 Not available on Simpad. */
++ state->wrprot = 0 ; /* Not available on Simpad. */
++ state->vs_3v = (cs3_ro_reg & PCMCIA_VS1) ? 0 : 1 ;
++ state->vs_Xv = (cs3_ro_reg & PCMCIA_VS2) ? 0 : 1 ;
+ }
+
+ static int
+@@ -104,6 +100,7 @@
+
+ static void simpad_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
+ {
++ clear_cs3_bit(PCMCIA_RESET);
+ soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+ }
+
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-gpio_keys-and-cs3-ro.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-gpio_keys-and-cs3-ro.patch
new file mode 100644
index 0000000000..081afc8936
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-gpio_keys-and-cs3-ro.patch
@@ -0,0 +1,332 @@
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/simpad.c linux-2.6.21/arch/arm/mach-sa1100/simpad.c
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/simpad.c 2007-05-30 18:00:29.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-sa1100/simpad.c 2007-05-30 18:02:15.000000000 +0200
+@@ -1,5 +1,15 @@
+ /*
+ * linux/arch/arm/mach-sa1100/simpad.c
++ *
++ * 2007/04/11 mrdata:
++ * - insert simpad_uart_set_mctrl()
++ * simpad_uart_get_mctrl()
++ * - internal RS232/DECT/Bluetooth
++ * works again (based on 2.4 simpad-serial.patch)
++ * - added cs3_ro
++ *
++ * 2007/04/12 Bernhard Guillon:
++ * -added gpio_keys (based on h3000.c from hh.org)
+ */
+
+ #include <linux/module.h>
+@@ -9,6 +19,9 @@
+ #include <linux/proc_fs.h>
+ #include <linux/string.h>
+ #include <linux/pm.h>
++
++#include <linux/apm-emulation.h>
++
+ #include <linux/platform_device.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -27,12 +40,21 @@
+
+ #include <linux/serial_core.h>
+ #include <linux/ioport.h>
++#include <linux/input.h>
++#include <linux/gpio_keys.h>
+ #include <asm/io.h>
+
+ #include "generic.h"
+
++long cs3_ro;
+ long cs3_shadow;
+
++long get_cs3_ro(void)
++{
++ cs3_ro = *(CS3BUSTYPE *)(CS3_BASE);
++ return cs3_ro;
++}
++
+ long get_cs3_shadow(void)
+ {
+ return cs3_shadow;
+@@ -55,9 +77,12 @@
+ *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
+ }
+
++EXPORT_SYMBOL(get_cs3_ro);
++EXPORT_SYMBOL(get_cs3_shadow);
+ EXPORT_SYMBOL(set_cs3_bit);
+ EXPORT_SYMBOL(clear_cs3_bit);
+
++
+ static struct map_desc simpad_io_desc[] __initdata = {
+ { /* MQ200 */
+ .virtual = 0xf2800000,
+@@ -73,23 +98,71 @@
+ };
+
+
++static void simpad_uart_set_mctrl(struct uart_port *port, u_int mctrl)
++{
++ if (port->mapbase == _Ser1UTCR0) {
++ /* internal serial port (ttySA1, DECT/Bluetooth) */
++ if (mctrl & TIOCM_RTS) GPCR = GPIO_UART1_RTS;
++ else GPSR = GPIO_UART1_RTS;
++
++ if (mctrl & TIOCM_DTR) GPCR = GPIO_UART1_DTR;
++ else GPSR = GPIO_UART1_DTR;
++ }
++
++ else if (port->mapbase == _Ser3UTCR0) {
++ /* external serial port (ttySA0, RS232) */
++ if (mctrl & TIOCM_RTS) GPCR = GPIO_UART3_RTS;
++ else GPSR = GPIO_UART3_RTS;
++
++ if (mctrl & TIOCM_DTR) GPCR = GPIO_UART3_DTR;
++ else GPSR = GPIO_UART3_DTR;
++ }
++}
++
++
++static u_int simpad_uart_get_mctrl(struct uart_port *port)
++{
++ u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
++
++ if (port->mapbase == _Ser1UTCR0) {
++ /* internal serial port (ttySA1, DECT/Bluetooth) */
++ int gplr = GPLR;
++ if (gplr & GPIO_UART1_DCD) ret &= ~TIOCM_CD;
++ if (gplr & GPIO_UART1_CTS) ret &= ~TIOCM_CTS;
++ if (gplr & GPIO_UART1_DSR) ret &= ~TIOCM_DSR;
++ }
++
++ else if (port->mapbase == _Ser3UTCR0) {
++ /* external serial port (ttySA0, RS232) */
++ int gplr = GPLR;
++ if (gplr & GPIO_UART3_DCD) ret &= ~TIOCM_CD;
++ if (gplr & GPIO_UART3_CTS) ret &= ~TIOCM_CTS;
++ if (gplr & GPIO_UART3_DSR) ret &= ~TIOCM_DSR;
++ }
++ return ret;
++}
++
++
+ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
+ {
+- if (port->mapbase == (u_int)&Ser1UTCR0) {
+- if (state)
+- {
+- clear_cs3_bit(RS232_ON);
+- clear_cs3_bit(DECT_POWER_ON);
+- }else
+- {
+- set_cs3_bit(RS232_ON);
+- set_cs3_bit(DECT_POWER_ON);
+- }
+- }
++ if (port->mapbase == (u_int)&Ser3UTCR0) {
++ if (state)
++ {
++ clear_cs3_bit(RS232_ON);
++ /* clear_cs3_bit(DECT_POWER_ON); */
++ }else
++ {
++ set_cs3_bit(RS232_ON);
++ /* set_cs3_bit(DECT_POWER_ON); */
++ }
++ }
+ }
+
++
+ static struct sa1100_port_fns simpad_port_fns __initdata = {
+- .pm = simpad_uart_pm,
++ .set_mctrl = simpad_uart_set_mctrl,
++ .get_mctrl = simpad_uart_get_mctrl,
++ .pm = simpad_uart_pm,
+ };
+
+
+@@ -135,7 +208,6 @@
+ };
+
+
+-
+ static void __init simpad_map_io(void)
+ {
+ sa1100_map_io();
+@@ -144,13 +216,12 @@
+
+ set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON |
+ ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON);
+-
+-
++
+ sa1100_register_uart_fns(&simpad_port_fns);
+ sa1100_register_uart(0, 3); /* serial interface */
+ sa1100_register_uart(1, 1); /* DECT */
+
+- // Reassign UART 1 pins
++ /* Reassign UART 1 pins */
+ GAFR |= GPIO_UART_TXD | GPIO_UART_RXD;
+ GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15;
+ GPDR &= ~GPIO_UART_RXD;
+@@ -160,7 +231,6 @@
+ * Set up registers for sleep mode.
+ */
+
+-
+ PWER = PWER_GPIO0| PWER_RTC;
+ PGSR = 0x818;
+ PCFR = 0;
+@@ -171,9 +241,10 @@
+ sa11x0_set_mcp_data(&simpad_mcp_data);
+ }
+
++
+ static void simpad_power_off(void)
+ {
+- local_irq_disable(); // was cli
++ local_irq_disable(); /* was cli */
+ set_cs3(0x800); /* only SD_MEDIAQ */
+
+ /* disable internal oscillator, float CS lines */
+@@ -191,31 +262,52 @@
+ while(1);
+
+ local_irq_enable(); /* we won't ever call it */
++}
+
+
+-}
++/*
++ * gpio_keys
++*/
++
++static struct gpio_keys_button simpad_button_table[] = {
++ { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 1, "power button" },
++};
++
++static struct gpio_keys_platform_data simpad_keys_data = {
++ .buttons = simpad_button_table,
++ .nbuttons = ARRAY_SIZE(simpad_button_table),
++};
++
++static struct platform_device simpad_keys = {
++ .name = "gpio-keys",
++ .dev = {
++ .platform_data = &simpad_keys_data,
++ },
++};
+
+
+ /*
+ * MediaQ Video Device
+ */
++
+ static struct platform_device simpad_mq200fb = {
+ .name = "simpad-mq200",
+ .id = 0,
+ };
+
++
+ static struct platform_device *devices[] __initdata = {
+- &simpad_mq200fb
++ &simpad_keys,
++ &simpad_mq200fb,
+ };
+
+
+-
+ static int __init simpad_init(void)
+ {
+ int ret;
+
+ pm_power_off = simpad_power_off;
+-
++
+ ret = platform_add_devices(devices, ARRAY_SIZE(devices));
+ if(ret)
+ printk(KERN_WARNING "simpad: Unable to register mq200 framebuffer device");
+diff -uNr linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad.h linux-2.6.21/include/asm-arm/arch-sa1100/simpad.h
+--- linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad.h 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/include/asm-arm/arch-sa1100/simpad.h 2007-05-30 18:02:56.000000000 +0200
+@@ -12,11 +12,12 @@
+ #define __ASM_ARCH_SIMPAD_H
+
+
+-#define GPIO_UART1_RTS GPIO_GPIO14
++#define GPIO_UART1_RTS GPIO_GPIO9
+ #define GPIO_UART1_DTR GPIO_GPIO7
+ #define GPIO_UART1_CTS GPIO_GPIO8
+ #define GPIO_UART1_DCD GPIO_GPIO23
+ #define GPIO_UART1_DSR GPIO_GPIO6
++#define GPIO_UART1_RI GPIO_GPIO19
+
+ #define GPIO_UART3_RTS GPIO_GPIO12
+ #define GPIO_UART3_DTR GPIO_GPIO16
+@@ -48,9 +49,9 @@
+ #define GPIO_SMART_CARD GPIO_GPIO10
+ #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10
+
+-// CS3 Latch is write only, a shadow is necessary
++// CS3 Latch is write only 16-bit , a shadow is necessary
+
+-#define CS3BUSTYPE unsigned volatile long
++#define CS3BUSTYPE unsigned volatile long
+ #define CS3_BASE 0xf1000000
+
+ #define VCC_5V_EN 0x0001 // For 5V PCMCIA
+@@ -70,43 +71,17 @@
+ #define ENABLE_5V 0x4000 // Enable 5V circuit
+ #define RESET_SIMCARD 0x8000
+
+-#define RS232_ENABLE 0x0440
+-#define PCMCIAMASK 0x402f
++// CS3 Latch is readable only 8-bit interest
+
++#define PCMCIA_BVD1 0x0001
++#define PCMCIA_BVD2 0x0002
++#define PCMCIA_VS1 0x0004 // PCMCIA card voltage select
++#define PCMCIA_VS2 0x0008 // PCMCIA card voltage select, if both are in high state -> 5V PCMCIA card
++#define LOCK_IND 0x0010
++#define CHARGING_STATE 0x0020 // Ladestatus
++#define PCMCIA_SHORT 0x0040 // low active
+
+-struct simpad_battery {
+- unsigned char ac_status; /* line connected yes/no */
+- unsigned char status; /* battery loading yes/no */
+- unsigned char percentage; /* percentage loaded */
+- unsigned short life; /* life till empty */
+-};
+-
+-/* These should match the apm_bios.h definitions */
+-#define SIMPAD_AC_STATUS_AC_OFFLINE 0x00
+-#define SIMPAD_AC_STATUS_AC_ONLINE 0x01
+-#define SIMPAD_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */
+-#define SIMPAD_AC_STATUS_AC_UNKNOWN 0xff
+-
+-/* These bitfields are rarely "or'd" together */
+-#define SIMPAD_BATT_STATUS_HIGH 0x01
+-#define SIMPAD_BATT_STATUS_LOW 0x02
+-#define SIMPAD_BATT_STATUS_CRITICAL 0x04
+-#define SIMPAD_BATT_STATUS_CHARGING 0x08
+-#define SIMPAD_BATT_STATUS_CHARGE_MAIN 0x10
+-#define SIMPAD_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
+-#define SIMPAD_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */
+-#define SIMPAD_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
+-#define SIMPAD_BATT_STATUS_NOBATT 0x80
+-#define SIMPAD_BATT_STATUS_UNKNOWN 0xff
+-
+-extern int simpad_get_battery(struct simpad_battery* );
++#define RS232_ENABLE 0x0440
++#define PCMCIAMASK 0x402f
+
+ #endif // __ASM_ARCH_SIMPAD_H
+-
+-
+-
+-
+-
+-
+-
+-
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch
new file mode 100644
index 0000000000..552bb8b223
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch
@@ -0,0 +1,359 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/Kconfig linux-2.6.21/drivers/mfd/Kconfig
+--- linux-2.6.21.vanilla/drivers/mfd/Kconfig 2007-04-26 05:08:32.000000000 +0200
++++ linux-2.6.21/drivers/mfd/Kconfig 2007-05-29 12:56:32.000000000 +0200
+@@ -37,4 +37,7 @@
+ tristate "Touchscreen interface support"
+ depends on MCP_UCB1200 && INPUT
+
++config MCP_UCB1200_SWITCHES
++ tristate "SIMpad Switches support"
++ depends on MCP_UCB1200 && INPUT
+ endmenu
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/Makefile linux-2.6.21/drivers/mfd/Makefile
+--- linux-2.6.21.vanilla/drivers/mfd/Makefile 2007-04-26 05:08:32.000000000 +0200
++++ linux-2.6.21/drivers/mfd/Makefile 2007-05-29 12:56:32.000000000 +0200
+@@ -8,7 +8,7 @@
+ obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
+ obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-ts.o
+-
++obj-$(CONFIG_MCP_UCB1200_SWITCHES) += ucb1x00-switches.o
+ ifeq ($(CONFIG_SA1100_ASSABET),y)
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
+ endif
+diff -Naur linux-2.6.21/drivers/mfd.old/ucb1x00-switches.c linux-2.6.21/drivers/mfd/ucb1x00-switches.c
+--- linux-2.6.21/drivers/mfd/ucb1x00-switches.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/mfd/ucb1x00-switches.c 2007-07-04 23:59:39.000000000 +0200
+@@ -0,0 +1,332 @@
++/*
++ * linux/drivers/mfd/ucb1x00-switches.c
++ *
++ * Copyright (C) 2007 Bernhard Guillon.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License.
++ *
++ * This driver is for the Switches of Siemens SIMpad (CL4,SL4,SLC), T-Sinus-Pad and
++ * Swisscom WP50 devices.
++ *
++ * Six switches are routed to GPIO pins on the UCB1300: S3 -- S8.
++ *
++ * This driver is based on the 2.4 ucb1x00-switches, the 2.6 ucb1x00-assabet
++ * and the ucb1x00-ts driver.
++ *
++ * 2007/06/21 mrdata:
++ * - create new thread kswd() to handle irq_events for ucb1300-gpio's
++ * - found out, that not every key-press or key-release
++ * generate a irq_event
++ * -> establish key_state handling
++ * key_state, key_state_last <-> KEY_PRESS, KEY_RELEASE
++ * -> after irq_event polling the ucb1300-gpio's till all keys
++ * in key_state = KEY_RELEASE
++ *
++ */
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/device.h>
++#include <linux/sched.h>
++#include <linux/freezer.h>
++#include <linux/kthread.h>
++
++#include <asm/dma.h>
++
++#include "ucb1x00.h"
++
++#define KEY_PRESS 1
++#define KEY_RELEASE 0
++
++static int key [6] = { KEY_PROG1,KEY_PROG2,KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT };
++
++static unsigned short int key_state [6] = { 0, 0, 0, 0, 0, 0};
++static unsigned short int key_state_last [6] = { 1, 1, 1, 1, 1, 1};
++
++struct ucb1x00_switches {
++ struct input_dev *idev;
++ struct ucb1x00 *ucb;
++
++ wait_queue_head_t irq_wait;
++ struct task_struct *rtask;
++
++ int idx;
++
++ unsigned int valid:1;
++};
++
++static int ucb1x00_thread(void *_switches_id)
++{
++ unsigned short int this;
++ int idx_tmp;
++ int i;
++ struct ucb1x00_switches *switches = _switches_id;
++ struct input_dev *idev = switches->idev;
++ struct task_struct *tsk = current;
++ DECLARE_WAITQUEUE(wait, tsk);
++
++ add_wait_queue(&switches->irq_wait, &wait);
++
++ while (!kthread_should_stop())
++ {
++ signed long timeout;
++
++ if ((switches->idx >= 0) && (switches->idx <= 5) && (switches->valid == 1))
++ {
++ switches->valid = 0;
++
++ idx_tmp = switches->idx;
++
++ ucb1x00_enable(switches->ucb);
++
++ this = ~ucb1x00_io_read(switches->ucb);
++
++ ucb1x00_disable(switches->ucb);
++
++ if (key_state[idx_tmp] == KEY_RELEASE)
++ {
++ key_state_last[idx_tmp] = KEY_RELEASE;
++ key_state[idx_tmp] = KEY_PRESS;
++
++ input_report_key(idev, key[idx_tmp], KEY_PRESS);
++ input_sync(idev);
++ }
++
++ for (i = 0; i < 6; i++)
++ {
++ if ((key_state[i] == KEY_RELEASE) && (((this & (1 << i)) ? 1 : 0) == KEY_PRESS))
++ {
++ key_state_last[i] = KEY_RELEASE;
++ key_state[i] = KEY_PRESS;
++
++ input_report_key(idev, key[i], KEY_PRESS);
++ input_sync(idev);
++ }
++ }
++
++ for(;;)
++ {
++ ucb1x00_enable(switches->ucb);
++ this = ~ucb1x00_io_read(switches->ucb);
++ ucb1x00_disable(switches->ucb);
++
++ for (i = 0; i < 6; i++)
++ {
++ if ((key_state[i] == KEY_PRESS) && (((this & (1 << i)) ? 1 : 0) == KEY_RELEASE))
++ {
++ key_state_last[i] = KEY_PRESS;
++ key_state[i] = KEY_RELEASE;
++
++ input_report_key(idev, key[i], KEY_RELEASE);
++ input_sync(idev);
++ }
++
++ if ((key_state[i] == KEY_RELEASE) && (((this & (1 << i)) ? 1 : 0) == KEY_PRESS))
++ {
++ key_state_last[i] = KEY_RELEASE;
++ key_state[i] = KEY_PRESS;
++
++ input_report_key(idev, key[i], KEY_PRESS);
++ input_sync(idev);
++ }
++
++ }
++
++ // left loop, if no key press detect
++ if ((this | 0xff80) == 0xff80)
++ {
++ break;
++ }
++
++ set_task_state(tsk, TASK_INTERRUPTIBLE);
++
++ try_to_freeze();
++
++ timeout = HZ / 100;
++
++ schedule_timeout(timeout);
++ }
++ }
++
++ set_task_state(tsk, TASK_INTERRUPTIBLE);
++
++ try_to_freeze();
++
++ timeout = MAX_SCHEDULE_TIMEOUT;
++
++ schedule_timeout(timeout);
++ }
++
++ remove_wait_queue(&switches->irq_wait, &wait);
++
++ switches->rtask = NULL;
++
++ return 0;
++}
++
++
++static void ucb1x00_dev_irq(int idx, void *id)
++{
++ struct ucb1x00_switches *switches = id;
++
++ switches->idx = idx;
++ switches->valid = 1;
++
++ wake_up(&switches->irq_wait);
++}
++
++static int ucb1x00_switches_add(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_switches *switches;
++ struct input_dev *idev;
++ int err,i;
++
++ switches = kzalloc(sizeof(struct ucb1x00_switches), GFP_KERNEL);
++ idev = input_allocate_device();
++
++ if (!switches || !idev) {
++ err = -ENOMEM;
++ goto fail;
++ }
++
++ switches->ucb = dev->ucb;
++
++ idev->private = switches;
++ idev->name = "SIMpad Switches";
++ idev->id.product = switches->ucb->id;
++
++ __set_bit(EV_KEY, idev->evbit);
++ __set_bit(EV_REP, idev->evbit);
++ __set_bit(KEY_PROG1, idev->keybit);
++ __set_bit(KEY_PROG2, idev->keybit);
++ __set_bit(KEY_UP, idev->keybit);
++ __set_bit(KEY_DOWN, idev->keybit);
++ __set_bit(KEY_LEFT, idev->keybit);
++ __set_bit(KEY_RIGHT, idev->keybit);
++
++ err = input_register_device(idev);
++ if (err)
++ goto fail;
++ switches->idev = idev;
++ dev->priv = switches;
++
++ BUG_ON(switches->rtask);
++
++ init_waitqueue_head(&switches->irq_wait);
++
++ ucb1x00_enable(switches->ucb);
++
++ ucb1x00_io_set_dir(switches->ucb,
++ UCB_IO_0 | UCB_IO_1 | UCB_IO_2 |
++ UCB_IO_3 | UCB_IO_4 | UCB_IO_5,
++ UCB_IO_8 | UCB_IO_9);
++
++ ucb1x00_disable(switches->ucb);
++
++ for (i = 0; i < 6; ++i) {
++ ucb1x00_enable_irq(switches->ucb, i, UCB_RISING | UCB_FALLING);
++
++ if (ucb1x00_hook_irq(switches->ucb, i, ucb1x00_dev_irq, switches) < 0) {
++ printk(KERN_ERR "unable to hook IRQ for "
++ "UCB1300 SWITCH_%d\n", i);
++ return -EBUSY;
++ }
++ }
++
++ switches->rtask = kthread_run(ucb1x00_thread, switches, "kswd");
++ if (!IS_ERR(switches->rtask))
++ {
++ return 0;
++ }
++ else
++ {
++ input_unregister_device(switches->idev);
++
++ for (i = 5; i >= 0; --i) {
++ ucb1x00_disable_irq(switches->ucb, i, UCB_RISING | UCB_FALLING);
++
++ /* Only error conditions are ENOENT and EINVAL; silently
++ * ignore:
++ */
++ ucb1x00_free_irq(switches->ucb, i, NULL);
++ }
++ switches->rtask = NULL;
++ ucb1x00_disable(switches->ucb);
++ kfree(switches);
++
++ return -EFAULT;
++ }
++
++fail:
++ input_free_device(idev);
++ kfree(switches);
++ return err;
++
++}
++
++static void ucb1x00_switches_remove(struct ucb1x00_dev *dev)
++{
++ int i;
++ struct ucb1x00_switches *switches = dev->priv;
++
++ if (switches->rtask)
++ kthread_stop(switches->rtask);
++
++ switches->rtask = NULL;
++
++ input_unregister_device(switches->idev);
++
++ for (i = 5; i >= 0; --i) {
++ ucb1x00_disable_irq(switches->ucb, i, UCB_RISING | UCB_FALLING);
++
++ /* Only error conditions are ENOENT and EINVAL; silently
++ * ignore:
++ */
++ ucb1x00_free_irq(switches->ucb, i, NULL);
++ }
++ ucb1x00_disable(switches->ucb);
++ kfree(switches);
++}
++
++#ifdef CONFIG_PM
++static int ucb1x00_switches_resume(struct ucb1x00_dev *dev)
++{
++ struct ucb1x00_switches *switches = dev->priv;
++
++ if (switches->rtask != NULL)
++ {
++ switches->valid = 0;
++ wake_up(&switches->irq_wait);
++
++ printk(KERN_DEBUG "ucb1x00-switches.c -> _switches_resume() kswd - restart *DONE*\n");
++ }
++ return 0;
++}
++#else
++#define ucb1x00_switches_resume NULL
++#endif
++
++static struct ucb1x00_driver ucb1x00_switches_driver = {
++ .add = ucb1x00_switches_add,
++ .remove = ucb1x00_switches_remove,
++ .resume = ucb1x00_switches_resume,
++};
++
++static int __init ucb1x00_switches_init(void)
++{
++ return ucb1x00_register_driver(&ucb1x00_switches_driver);
++}
++
++static void __exit ucb1x00_switches_exit(void)
++{
++ ucb1x00_unregister_driver(&ucb1x00_switches_driver);
++}
++
++module_init(ucb1x00_switches_init);
++module_exit(ucb1x00_switches_exit);
++
++MODULE_AUTHOR("Bernhard Guillon <Bernhard.Guillon@opensimpad.org>");
++MODULE_DESCRIPTION("UCB1x00 Switches driver for Siemens SIMpad");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-ts-supend-and-accuracy.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-ts-supend-and-accuracy.patch
new file mode 100644
index 0000000000..8c2c89235f
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-ts-supend-and-accuracy.patch
@@ -0,0 +1,121 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/ucb1x00-ts.c linux-2.6.21/drivers/mfd/ucb1x00-ts.c
+--- linux-2.6.21.vanilla/drivers/mfd/ucb1x00-ts.c 2007-05-30 18:00:30.000000000 +0200
++++ linux-2.6.21/drivers/mfd/ucb1x00-ts.c 2007-05-30 18:14:42.000000000 +0200
+@@ -16,6 +16,10 @@
+ * It is important to note that the signal connected to the ADCSYNC
+ * pin should provide pulses even when the LCD is blanked, otherwise
+ * a pen touch needed to unblank the LCD will never be read.
++ *
++ * mrdata: -added some accuracy improvement based on thesings collie patch
++ * -added suspend fix
++ *
+ */
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+@@ -105,6 +109,8 @@
+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
+ UCB_TS_CR_MODE_PRES | UCB_TS_CR_BIAS_ENA);
+
++ udelay(55);
++
+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
+ }
+ }
+@@ -131,7 +137,7 @@
+ UCB_TS_CR_TSMX_GND | UCB_TS_CR_TSPX_POW |
+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
+
+- udelay(55);
++ udelay(165);
+
+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPY, ts->adcsync);
+ }
+@@ -159,7 +165,7 @@
+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_POW |
+ UCB_TS_CR_MODE_POS | UCB_TS_CR_BIAS_ENA);
+
+- udelay(55);
++ udelay(165);
+
+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_TSPX, ts->adcsync);
+ }
+@@ -225,13 +231,17 @@
+ signed long timeout;
+
+ ts->restart = 0;
+-
++
+ ucb1x00_adc_enable(ts->ucb);
+
+ x = ucb1x00_ts_read_xpos(ts);
++ ucb1x00_adc_disable(ts->ucb);
++ ucb1x00_adc_enable(ts->ucb);
+ y = ucb1x00_ts_read_ypos(ts);
++ ucb1x00_adc_disable(ts->ucb);
++ ucb1x00_adc_enable(ts->ucb);
+ p = ucb1x00_ts_read_pressure(ts);
+-
++
+ /*
+ * Switch back to interrupt mode.
+ */
+@@ -240,15 +250,19 @@
+
+ msleep(10);
+
++ if ((x < 60) || (y < 60)) {
++ p = 0;
++ }
++
+ ucb1x00_enable(ts->ucb);
+
+-
+ if (ucb1x00_ts_pen_down(ts)) {
++
+ set_task_state(tsk, TASK_INTERRUPTIBLE);
+
+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, machine_is_collie() ? UCB_RISING : UCB_FALLING);
+ ucb1x00_disable(ts->ucb);
+-
++
+ /*
+ * If we spat out a valid sample set last time,
+ * spit out a "pen off" sample here.
+@@ -259,7 +273,9 @@
+ }
+
+ timeout = MAX_SCHEDULE_TIMEOUT;
++
+ } else {
++
+ ucb1x00_disable(ts->ucb);
+
+ /*
+@@ -278,6 +294,14 @@
+
+ try_to_freeze();
+
++ /*
++ * While suspend the ktsd-thread goes sleep -> try_to_freeze()
++ * While resume the ktsd-thread do wakup and must rune one time
++ * again to do a clean re-setup -> enable_irq: UCB_IRQ_TSPX
++ */
++ if(ts->restart)
++ timeout = HZ / 100;
++
+ schedule_timeout(timeout);
+ }
+
+@@ -360,8 +384,12 @@
+ * TS interrupt mode is set up again
+ * after sleep.
+ */
++
+ ts->restart = 1;
+ wake_up(&ts->irq_wait);
++
++ printk(KERN_INFO "ucb1x00-ts.c -> ucb1x00_ts_resume() ktsd - restart *DONE*\n");
++
+ }
+ return 0;
+ }
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-usb-gadget.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-usb-gadget.patch
new file mode 100644
index 0000000000..00d062bd7d
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-usb-gadget.patch
@@ -0,0 +1,3329 @@
+diff -uNr linux-2.6.21.vanilla/drivers/usb/gadget/Kconfig linux-2.6.21/drivers/usb/gadget/Kconfig
+--- linux-2.6.21.vanilla/drivers/usb/gadget/Kconfig 2007-04-26 05:08:32.000000000 +0200
++++ linux-2.6.21/drivers/usb/gadget/Kconfig 2007-06-05 11:58:28.000000000 +0200
+@@ -205,6 +205,21 @@
+ depends on USB_GADGET_AT91
+ default USB_GADGET
+
++config USB_GADGET_SA1100
++ boolean "SA1100 USB Device Port"
++ depends on ARCH_SA1100
++ select USB_GADGET_SELECTED
++ help
++
++ Say "y" to link the driver statically, or "m" to build a
++ dynamically linked module called "sa1100_udc" and force all
++ gadget drivers to also be dynamically linked.
++
++config USB_SA1100
++ tristate
++ depends on USB_GADGET_SA1100
++ default USB_GADGET
++
+ config USB_GADGET_DUMMY_HCD
+ boolean "Dummy HCD (DEVELOPMENT)"
+ depends on (USB=y || (USB=m && USB_GADGET=m)) && EXPERIMENTAL
+diff -uNr linux-2.6.21.vanilla/drivers/usb/gadget/Makefile linux-2.6.21/drivers/usb/gadget/Makefile
+--- linux-2.6.21.vanilla/drivers/usb/gadget/Makefile 2007-04-26 05:08:32.000000000 +0200
++++ linux-2.6.21/drivers/usb/gadget/Makefile 2007-06-05 11:58:28.000000000 +0200
+@@ -8,6 +8,7 @@
+ obj-$(CONFIG_USB_OMAP) += omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o
+ obj-$(CONFIG_USB_AT91) += at91_udc.o
++obj-$(CONFIG_USB_SA1100) += sa1100_udc.o
+
+ #
+ # USB gadget drivers
+diff -uNr linux-2.6.21.vanilla/drivers/usb/gadget/ether.c linux-2.6.21/drivers/usb/gadget/ether.c
+--- linux-2.6.21.vanilla/drivers/usb/gadget/ether.c 2007-04-26 05:08:32.000000000 +0200
++++ linux-2.6.21/drivers/usb/gadget/ether.c 2007-06-05 11:59:24.000000000 +0200
+@@ -1456,7 +1456,7 @@
+ goto done_set_intf;
+ }
+
+-#ifdef DEV_CONFIG_CDC
++//#ifdef DEV_CONFIG_CDC
+ switch (wIndex) {
+ case 0: /* control/master intf */
+ if (wValue != 0)
+@@ -1498,12 +1498,12 @@
+ value = 0;
+ break;
+ }
+-#else
++//#else
+ /* FIXME this is wrong, as is the assumption that
+ * all non-PXA hardware talks real CDC ...
+ */
+- dev_warn (&gadget->dev, "set_interface ignored!\n");
+-#endif /* DEV_CONFIG_CDC */
++// dev_warn (&gadget->dev, "set_interface ignored!\n");
++//#endif /* DEV_CONFIG_CDC */
+
+ done_set_intf:
+ spin_unlock (&dev->lock);
+diff -uNr linux-2.6.21.vanilla/drivers/usb/gadget/sa1100_udc.c linux-2.6.21/drivers/usb/gadget/sa1100_udc.c
+--- linux-2.6.21.vanilla/drivers/usb/gadget/sa1100_udc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/usb/gadget/sa1100_udc.c 2007-06-05 11:58:29.000000000 +0200
+@@ -0,0 +1,2591 @@
++/*
++ * SA1100 USB Device Controller (UDC) driver.
++ *
++ * Copyright (C) Compaq Computer Corporation, 1998, 1999
++ * Copyright (C) Extenex Corporation, 2001
++ * Copyright (C) David Brownell, 2003
++ * Copyright (C) Nick Bane, 2005, 2006
++ * Many fragments from pxa2xx_udc.c and mach-sa1100 driver with various
++ * GPL Copyright authors incl Russel king and Nicolas Pitre
++ * Port to 2.6.12 by N C Bane
++ *
++ * This file provides interrupt routing and overall coordination for the
++ * sa1100 USB endpoints: ep0, ep1out-bulk, ep2out-bulk, as well as device
++ * initialization and some parts of USB "Chapter 9" device behavior.
++ *
++ * It implements the "USB gadget controller" API, abstracting most hardware
++ * details so that drivers running on top of this API are mostly independent
++ * of hardware. A key exception is that ep0 logic needs to understand which
++ * endpoints a given controller has, and their capabilities. Also, hardware
++ * that doesn't fully support USB (like sa1100) may need workarounds in the
++ * protocols implemented by device functions.
++ *
++ * See linux/Documentation/arm/SA1100/SA1100_USB for more info, or the
++ * kerneldoc for the API exposed to gadget drivers.
++ *
++ */
++#define DEBUG 1
++#define VERBOSE 1
++
++//#define SA1100_USB_DEBUG
++#ifdef SA1100_USB_DEBUG
++static int sa1100_usb_debug=0;
++#endif
++
++#define NCB_DMA_FIX
++#ifdef NCB_DMA_FIX
++#include <linux/slab.h>
++#define SEND_BUFFER_SIZE 4096 /* this is probably a bit big */
++#define RECEIVE_BUFFER_SIZE 256 /* 64 may be all that is necessary */
++static char *send_buffer=NULL;
++static char *receive_buffer=NULL;
++#endif
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/delay.h>
++#include <linux/ioport.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/smp_lock.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/version.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++
++#include <asm/byteorder.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/dma.h>
++#include <asm/system.h>
++#include <asm/mach-types.h>
++#include <asm/unaligned.h>
++
++#include <linux/usb.h>
++#include <linux/usb_ch9.h>
++#include <linux/usb_gadget.h>
++
++#if CONFIG_PROC_FS
++#include <linux/proc_fs.h>
++#endif
++
++#if defined(CONFIG_SA1100_BALLOON)
++#include <asm/arch/balloon.h>
++#endif
++
++#define DRIVER_VERSION __DATE__
++
++#define DMA_ADDR_INVALID (~(dma_addr_t)0)
++
++
++static const char driver_name [] = "sa1100_udc";
++static const char driver_desc [] = "SA-1110 USB Device Controller";
++
++static const char ep0name [] = "ep0";
++
++#ifdef DEBUG
++static char *type_string (u8 bmAttributes)
++{
++ switch ( (bmAttributes) & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_BULK: return "bulk";
++ //case USB_ENDPOINT_XFER_ISOC: return "iso";
++ case USB_ENDPOINT_XFER_INT: return "intr";
++ };
++ return "control";
++}
++#endif
++
++#include <linux/dma-mapping.h>
++struct usb_stats_t {
++ unsigned long ep0_fifo_write_failures;
++ unsigned long ep0_bytes_written;
++ unsigned long ep0_fifo_read_failures;
++ unsigned long ep0_bytes_read;
++};
++
++struct usb_info_t
++{
++ dma_regs_t *dmaregs_tx, *dmaregs_rx;
++ int state;
++ unsigned char address;
++ struct usb_stats_t stats;
++};
++
++enum { kError=-1, kEvSuspend=0, kEvReset=1,
++ kEvResume=2, kEvAddress=3, kEvConfig=4, kEvDeConfig=5 };
++int usbctl_next_state_on_event( int event ) {
++ return 0;
++}
++static struct usb_info_t usbd_info;
++
++/* receiver */
++void ep1_reset(void);
++void ep1_stall(void);
++int sa1100_usb_recv (struct usb_request *req, void (*callback) (int,int));
++
++/* xmitter */
++void ep2_reset(void);
++void ep2_stall(void);
++int sa1100_usb_send (struct usb_request *req, void (*callback) (int,int));
++
++/* UDC register utility functions */
++#define UDC_write(reg, val) { \
++ int i = 10000; \
++ do { \
++ (reg) = (val); \
++ if (i-- <= 0) { \
++ printk( "%s [%d]: write %#x to %p (%#x) failed\n", \
++ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
++ break; \
++ } \
++ } while((reg) != (val)); \
++}
++
++#define UDC_set(reg, val) { \
++ int i = 10000; \
++ do { \
++ (reg) |= (val); \
++ if (i-- <= 0) { \
++ printk( "%s [%d]: set %#x of %p (%#x) failed\n", \
++ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
++ break; \
++ } \
++ } while(!((reg) & (val))); \
++}
++
++#define UDC_clear(reg, val) { \
++ int i = 10000; \
++ do { \
++ (reg) &= ~(val); \
++ if (i-- <= 0) { \
++ printk( "%s [%d]: clear %#x of %p (%#x) failed\n", \
++ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
++ break; \
++ } \
++ } while((reg) & (val)); \
++}
++
++#define UDC_flip(reg, val) { \
++ int i = 10000; \
++ (reg) = (val); \
++ do { \
++ (reg) = (val); \
++ if (i-- <= 0) { \
++ printk( "%s [%d]: flip %#x of %p (%#x) failed\n", \
++ __FUNCTION__, __LINE__, (val), &(reg), (reg)); \
++ break; \
++ } \
++ } while(((reg) & (val))); \
++}
++
++#include "sa1100_udc.h"
++
++static struct sa1100_udc *the_controller;
++static void nuke (struct sa1100_ep *, int status);
++static void done (struct sa1100_ep *ep, struct sa1100_request *req, int status);
++static inline void ep0_idle (struct sa1100_udc *dev)
++{
++ dev->ep0state = EP0_IDLE;
++}
++
++// ep0 handlers
++
++// 1 == lots of trace noise, 0 = only "important' stuff
++//#define VERBOSITY 1
++
++#ifndef MIN
++#define MIN( a, b ) ((a)<(b)?(a):(b))
++#endif
++
++#if 1 && !defined( ASSERT )
++# define ASSERT(expr) \
++ if(!(expr)) { \
++ printk( "Assertion failed! %s,%s,%s,line=%d\n",\
++ #expr,__FILE__,__FUNCTION__,__LINE__); \
++ }
++#else
++# define ASSERT(expr)
++#endif
++
++#if VERBOSITY
++#define PRINTKD(fmt, args...) printk( fmt , ## args)
++#else
++#define PRINTKD(fmt, args...)
++#endif
++
++/* USB Device Requests */
++typedef struct
++{
++ __u8 bmRequestType;
++ __u8 bRequest;
++ __u16 wValue;
++ __u16 wIndex;
++ __u16 wLength;
++} usb_dev_request_t __attribute__ ((packed));
++
++/* other subroutines */
++unsigned int (*wrint)(void);
++void ep0_int_hndlr( void );
++static void ep0_queue(void *buf, unsigned int req, unsigned int act);
++static void write_fifo( void );
++static int read_fifo( struct usb_ctrlrequest * p );
++
++/* some voodo helpers 01Mar01ww */
++static void set_cs_bits( __u32 set_bits );
++static void set_de( void );
++static void set_ipr( void );
++static void set_ipr_and_de( void );
++static bool clear_opr( void );
++
++/***************************************************************************
++Inline Helpers
++***************************************************************************/
++
++/* Data extraction from usb_request_t fields */
++enum { kTargetDevice=0, kTargetInterface=1, kTargetEndpoint=2 };
++static inline int request_target( __u8 b ) { return (int) ( b & 0x0F); }
++
++static inline int windex_to_ep_num( __u16 w ) { return (int) ( w & 0x000F); }
++inline int type_code_from_request( __u8 by ) { return (( by >> 4 ) & 3); }
++
++/* following is hook for self-powered flag in GET_STATUS. Some devices
++ .. might like to override and return real info */
++static inline bool self_powered_hook( void ) { return true; }
++
++#if VERBOSITY
++/* "pcs" == "print control status" */
++static inline void pcs( void )
++{
++ __u32 foo = Ser0UDCCS0;
++ printk( "%8.8X: %s %s %s %s\n",
++ foo,
++ foo & UDCCS0_SE ? "SE" : "",
++ foo & UDCCS0_OPR ? "OPR" : "",
++ foo & UDCCS0_IPR ? "IPR" : "",
++ foo & UDCCS0_SST ? "SST" : ""
++ );
++}
++static inline void preq( struct usb_ctrlrequest * pReq )
++{
++ static char * tnames[] = { "dev", "intf", "ep", "oth" };
++ static char * rnames[] = { "std", "class", "vendor", "???" };
++ char * psz;
++ switch( pReq->bRequest ) {
++ case USB_REQ_GET_STATUS: psz = "get stat"; break;
++ case USB_REQ_CLEAR_FEATURE: psz = "clr feat"; break;
++ case USB_REQ_SET_FEATURE: psz = "set feat"; break;
++ case USB_REQ_SET_ADDRESS: psz = "set addr"; break;
++ case USB_REQ_GET_DESCRIPTOR: psz = "get desc"; break;
++ case USB_REQ_SET_DESCRIPTOR: psz = "set desc"; break;
++ case USB_REQ_GET_CONFIGURATION: psz = "get cfg"; break;
++ case USB_REQ_SET_CONFIGURATION: psz = "set cfg"; break;
++ case USB_REQ_GET_INTERFACE: psz = "get intf"; break;
++ case USB_REQ_SET_INTERFACE: psz = "set intf"; break;
++ default: psz = "unknown"; break;
++ }
++ printk( "- [%s: %s req to %s. dir=%s]\n", psz,
++ rnames[ (pReq->bRequestType >> 5) & 3 ],
++ tnames[ pReq->bRequestType & 3 ],
++ ( pReq->bRequestType & 0x80 ) ? "in" : "out" );
++}
++
++static inline void usbctl_dump_request(const char *prefix, const struct usb_ctrlrequest *req)
++{
++ printk("%s: bRequestType=0x%02x bRequest=0x%02x "
++ "wValue=0x%04x wIndex=0x%04x wLength=0x%04x\n",
++ prefix, req->bRequestType, req->bRequest,
++ le16_to_cpu(req->wValue), le16_to_cpu(req->wIndex),
++ le16_to_cpu(req->wLength));
++}
++#else
++static inline void pcs( void ){}
++//static inline void preq( void ){}
++static inline void preq( void *x ){}
++static inline void usbctl_dump_request(const char *prefix, const struct usb_ctrlrequest *req) {}
++#endif
++
++/***************************************************************************
++Globals
++***************************************************************************/
++static const char pszMe[] = "usbep0: ";
++
++
++/* global write struct to keep write
++ ..state around across interrupts */
++static struct {
++ unsigned char *p;
++ int bytes_left;
++} wr;
++
++/***************************************************************************
++Public Interface
++***************************************************************************/
++
++/* reset received from HUB (or controller just went nuts and reset by itself!)
++ so udc core has been reset, track this state here */
++void
++ep0_reset(void)
++{
++ /* reset state machine */
++ wr.p = NULL;
++ wr.bytes_left = 0;
++ usbd_info.address=0;
++// needed? Ser0UDCAR = 0;
++}
++
++
++/* handle interrupt for endpoint zero */
++
++inline void ep0_clear_write(void) {
++ wr.p=NULL;
++ wr.bytes_left=0;
++}
++
++/* this is a config packet parser based on that from the updated HH 2.6 udc */
++static void
++ep0_read_packet( void )
++{
++ unsigned char status_buf[2]; /* returned in GET_STATUS */
++ struct usb_ctrlrequest req;
++ int request_type;
++ int n;
++ __u32 address;
++
++ /* reset previous count */
++ the_controller->ep0_req_len=-1;
++
++ /* read the setup request */
++ n = read_fifo( &req );
++ usbctl_dump_request("ep0_read_packet",&req);
++
++ if ( n != sizeof( req ) ) {
++ printk( "%ssetup begin: fifo READ ERROR wanted %d bytes got %d. "
++ " Stalling out...\n",
++ pszMe, sizeof( req ), n );
++ /* force stall, serviced out */
++ set_cs_bits( UDCCS0_FST | UDCCS0_SO );
++ goto sh_sb_end;
++ }
++
++ /* Is it a standard request? (not vendor or class request) */
++ request_type = type_code_from_request( req.bRequestType );
++ if ( request_type != 0 ) {
++ printk( "%ssetup begin: unsupported bRequestType: %d ignored\n",
++ pszMe, request_type );
++ set_cs_bits( UDCCS0_DE | UDCCS0_SO );
++ goto sh_sb_end;
++ }
++
++ /* save requested reply size */
++ the_controller->ep0_req_len=le16_to_cpu(req.wLength);
++ PRINTKD("%s: request length is %d\n",__FUNCTION__,the_controller->ep0_req_len);
++
++#if VERBOSITY
++ {
++ unsigned char * pdb = (unsigned char *) &req;
++ PRINTKD( "%2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X %2.2X ",
++ pdb[0], pdb[1], pdb[2], pdb[3], pdb[4], pdb[5], pdb[6], pdb[7]
++ );
++ preq( &req );
++ }
++#endif
++
++ /* Handle it */
++ switch( req.bRequest ) {
++
++ /* This first bunch have no data phase */
++
++ case USB_REQ_SET_ADDRESS:
++ address = (__u32) (req.wValue & 0x7F);
++ /* when SO and DE sent, UDC will enter status phase and ack,
++ ..propagating new address to udc core. Next control transfer
++ ..will be on the new address. You can't see the change in a
++ ..read back of CAR until then. (about 250us later, on my box).
++ ..The original Intel driver sets S0 and DE and code to check
++ ..that address has propagated here. I tried this, but it
++ ..would only work sometimes! The rest of the time it would
++ ..never propagate and we'd spin forever. So now I just set
++ ..it and pray...
++ */
++ Ser0UDCAR = address;
++ usbd_info.address = address;
++ usbctl_next_state_on_event( kEvAddress );
++ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
++ printk( "%sI have been assigned address: %d\n", pszMe, address );
++ break;
++
++
++ case USB_REQ_SET_CONFIGURATION:
++ if ( req.wValue == 1 ) {
++ /* configured */
++ if (usbctl_next_state_on_event( kEvConfig ) != kError) {
++ /* (re)set the out and in max packet sizes */
++ PRINTKD( "%s: calling the_controller.driver->setup with SET_CONFIGURATION\n", __FUNCTION__ );
++ the_controller->driver->setup(&the_controller->gadget, &req);
++ __u32 in = __le16_to_cpu( the_controller->ep[1].ep.maxpacket );
++ __u32 out = __le16_to_cpu( the_controller->ep[2].ep.maxpacket );
++ Ser0UDCOMP = ( out - 1 );
++ Ser0UDCIMP = ( in - 1 );
++ // we are configured
++ usbd_info.state = USB_STATE_CONFIGURED;
++ // enable rx and tx interrupts
++ Ser0UDCCR &= ~(UDCCR_RIM | UDCCR_TIM);
++
++ printk( "%sConfigured (OMP=%8.8X IMP=%8.8X)\n", pszMe, out, in );
++ break;
++ }
++ } else if ( req.wValue == 0 ) {
++ /* de-configured */
++ if (usbctl_next_state_on_event( kEvDeConfig ) != kError )
++ printk( "%sDe-Configured\n", pszMe );
++ usbd_info.state = 0;
++ Ser0UDCCR |= UDCCR_RIM | UDCCR_TIM;
++ ep1_reset ();
++ ep2_reset ();
++ printk("%s: de-configured. Tx and Rx interrupts disabled. ep1 and ep2 reset\n",__FUNCTION__);
++ } else {
++ printk( "%ssetup phase: Unknown "
++ "\"set configuration\" data %d\n",
++ pszMe, req.wValue );
++ }
++ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
++ break;
++
++ case USB_REQ_CLEAR_FEATURE:
++ /* could check data length, direction...26Jan01ww */
++ if ( req.wValue == 0 ) { /* clearing ENDPOINT_HALT/STALL */
++ int ep = windex_to_ep_num( req.wIndex );
++ if ( ep == 1 ) {
++ printk( "%sclear feature \"endpoint halt\" "
++ " on receiver\n", pszMe );
++ ep1_reset();
++ }
++ else if ( ep == 2 ) {
++ printk( "%sclear feature \"endpoint halt\" "
++ "on xmitter\n", pszMe );
++ ep2_reset();
++ } else {
++ printk( "%sclear feature \"endpoint halt\" "
++ "on unsupported ep # %d\n",
++ pszMe, ep );
++ }
++ } else {
++ printk( "%sUnsupported feature selector (%d) "
++ "in clear feature. Ignored.\n" ,
++ pszMe, req.wValue );
++ }
++ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
++ break;
++
++ case USB_REQ_SET_FEATURE:
++ if ( req.wValue == 0 ) { /* setting ENDPOINT_HALT/STALL */
++ int ep = windex_to_ep_num( req.wValue );
++ if ( ep == 1 ) {
++ printk( "%set feature \"endpoint halt\" "
++ "on receiver\n", pszMe );
++ ep1_stall();
++ }
++ else if ( ep == 2 ) {
++ printk( "%sset feature \"endpoint halt\" "
++ " on xmitter\n", pszMe );
++ ep2_stall();
++ } else {
++ printk( "%sset feature \"endpoint halt\" "
++ "on unsupported ep # %d\n",
++ pszMe, ep );
++ }
++ }
++ else {
++ printk( "%sUnsupported feature selector "
++ "(%d) in set feature\n",
++ pszMe, req.wValue );
++ }
++ set_cs_bits( UDCCS0_SO | UDCCS0_DE ); /* no data phase */
++ break;
++
++ /* The rest have a data phase that writes back to the host */
++ case USB_REQ_GET_STATUS:
++ /* return status bit flags */
++ status_buf[0] = status_buf[1] = 0;
++ n = request_target(req.bRequestType);
++ switch( n ) {
++ case kTargetDevice:
++ if ( self_powered_hook() )
++ status_buf[0] |= 1;
++ break;
++ case kTargetInterface:
++ break;
++ case kTargetEndpoint:
++ /* return stalled bit */
++ n = windex_to_ep_num( req.wIndex );
++ if ( n == 1 )
++ status_buf[0] |= (Ser0UDCCS1 & UDCCS1_FST) >> 4;
++ else if ( n == 2 )
++ status_buf[0] |= (Ser0UDCCS2 & UDCCS2_FST) >> 5;
++ else {
++ printk( "%sUnknown endpoint (%d) "
++ "in GET_STATUS\n", pszMe, n );
++ }
++ break;
++ default:
++ printk( "%sUnknown target (%d) in GET_STATUS\n",
++ pszMe, n );
++ /* fall thru */
++ break;
++ }
++ PRINTKD("%s: GET_STATUS writing %d\n",__FUNCTION__,req.wLength);
++ ep0_queue( status_buf, req.wLength, sizeof( status_buf ));
++ break;
++ case USB_REQ_GET_DESCRIPTOR:
++ PRINTKD( "%s: calling the_controller.driver->setup with GET_DESCRIPTOR\n", __FUNCTION__ );
++ the_controller->driver->setup(&the_controller->gadget, &req);
++ break;
++ case USB_REQ_GET_CONFIGURATION:
++ PRINTKD( "%s: calling the_controller.driver->setup with GET_CONFIGURATION\n", __FUNCTION__ );
++ the_controller->driver->setup(&the_controller->gadget, &req);
++ break;
++ case USB_REQ_GET_INTERFACE:
++ PRINTKD( "%s: calling the_controller->driver->setup with GET_INTERFACE\n", __FUNCTION__ );
++ the_controller->driver->setup(&the_controller->gadget, &req);
++ break;
++ case USB_REQ_SET_INTERFACE:
++ PRINTKD( "%s: calling the_controller->driver->setup with SET_INTERFACE\n", __FUNCTION__ );
++ the_controller->driver->setup(&the_controller->gadget, &req);
++ break;
++ default :
++ printk("%sunknown request 0x%x\n", pszMe, req.bRequest);
++ break;
++ } /* switch( bRequest ) */
++
++sh_sb_end:
++ return;
++
++}
++
++void
++ep0_int_hndlr( void )
++{
++ u32 cs_reg_in;
++
++ pcs();
++
++ cs_reg_in = Ser0UDCCS0;
++
++
++ /*
++ * If "setup end" has been set, the usb controller has terminated
++ * a setup transaction before we set DE. This happens during
++ * enumeration with some hosts. For example, the host will ask for
++ * our device descriptor and specify a return of 64 bytes. When we
++ * hand back the first 8, the host will know our max packet size
++ * and turn around and issue a new setup immediately. This causes
++ * the UDC to auto-ack the new setup and set SE. We must then
++ * "unload" (process) the new setup, which is what will happen
++ * after this preamble is finished executing.
++ */
++ if (cs_reg_in & UDCCS0_SE) {
++ PRINTKD("UDC: early termination of setup\n");
++
++ /*
++ * Clear setup end
++ */
++ set_cs_bits(UDCCS0_SSE);
++
++ /*
++ * Clear any pending write.
++ */
++ ep0_clear_write();
++ }
++
++ /*
++ * UDC sent a stall due to a protocol violation.
++ */
++ if (cs_reg_in & UDCCS0_SST) {
++// usb->ep0_stall_sent++;
++
++ PRINTKD("UDC: write_preamble: UDC sent stall\n");
++
++ /*
++ * Clear sent stall
++ */
++ set_cs_bits(UDCCS0_SST);
++
++ /*
++ * Clear any pending write.
++ */
++ ep0_clear_write();
++ }
++
++ switch (cs_reg_in & (UDCCS0_OPR | UDCCS0_IPR)) {
++ case UDCCS0_OPR | UDCCS0_IPR:
++ PRINTKD("UDC: write_preamble: see OPR. Stopping write to "
++ "handle new SETUP\n");
++
++ /*
++ * very rarely, you can get OPR and
++ * leftover IPR. Try to clear
++ */
++ UDC_clear(Ser0UDCCS0, UDCCS0_IPR);
++
++ /*
++ * Clear any pending write.
++ */
++ ep0_clear_write();
++
++ /*FALLTHROUGH*/
++ case UDCCS0_OPR:
++ /*
++ * A new setup request is pending. Handle
++ * it. Note that we don't try to read a
++ * packet if SE was set and OPR is clear.
++ */
++ ep0_read_packet();
++ break;
++
++ case 0:
++ // if data pending ...
++ if (wr.p) {
++ unsigned int cs_bits = 0;
++ if (wr.bytes_left != 0) {
++ /*
++ * More data to go
++ */
++ write_fifo();
++ // packet ready
++ cs_bits |= UDCCS0_IPR;
++ }
++
++ if (wr.bytes_left == 0) {
++ /*
++ * All data sent.
++ */
++ cs_bits |= wrint();
++ // a null packet may be following
++ if (!wrint)
++ ep0_clear_write();
++ }
++ set_cs_bits(cs_bits);
++ }
++ else
++ PRINTKD("%s: No data - probably an ACK\n",__FUNCTION__);
++ break;
++
++ case UDCCS0_IPR:
++ PRINTKD("UDC: IPR set, not writing\n");
++// usb->ep0_early_irqs++;
++ break;
++ }
++
++ pcs();
++ PRINTKD( "-end-\n" );
++}
++
++static unsigned int ep0_sh_write_data(void)
++{
++ /*
++ * If bytes left is zero, we are coming in on the
++ * interrupt after the last packet went out. And
++ * we know we don't have to empty packet this
++ * transfer so just set DE and we are done
++ */
++ PRINTKD("UDC: normal packet ended\n");
++ wrint=NULL;
++ return UDCCS0_DE;
++}
++
++static unsigned int ep0_sh_write_with_empty_packet(void)
++{
++ /*
++ * If bytes left is zero, we are coming in on the
++ * interrupt after the last packet went out.
++ * We must do short packet suff, so set DE and IPR
++ */
++ PRINTKD("UDC: short packet sent\n");
++ wrint=NULL;
++ return UDCCS0_IPR | UDCCS0_DE;
++}
++
++static unsigned int ep0_sh_write_data_then_empty_packet(void)
++{
++ PRINTKD("UDC: last packet full. Send empty packet next\n");
++ wrint=ep0_sh_write_with_empty_packet;
++ return 0;
++}
++
++static void ep0_queue(void *buf, unsigned int len, unsigned int req_len)
++{
++ __u32 cs_reg_bits = UDCCS0_IPR;
++
++ PRINTKD("a=%d r=%d\n", len, req_len);
++
++ if (len == 0) {
++ // no output packet to wait for
++ printk("%s: zero byte packet being queued. Setting DE and OPR end exiting\n",__FUNCTION__);
++ set_cs_bits(UDCCS0_DE | UDCCS0_SO);
++ return;
++ }
++
++ /*
++ * thou shalt not enter data phase until
++ * Out Packet Ready is clear
++ */
++ if (!clear_opr()) {
++ printk("UDC: SO did not clear OPR\n");
++ set_cs_bits(UDCCS0_DE | UDCCS0_SO);
++ return;
++ }
++
++ // note data to xmit stored
++ wr.p=buf;
++ wr.bytes_left=min(len, req_len);
++
++ // write the first block
++ write_fifo();
++
++ // done already?
++ if (wr.bytes_left == 0) {
++ /*
++ * out in one, so data end
++ */
++ cs_reg_bits |= UDCCS0_DE;
++ ep0_clear_write();
++ // rest is a shorter than expected reply?
++ } else if (len < req_len) {
++ /*
++ * we are going to short-change host
++ * so need nul to not stall
++ */
++ if (len % 8) {
++ PRINTKD("%s: %d more to go ending in a short packet.\n",__FUNCTION__,wr.bytes_left);
++ wrint=ep0_sh_write_with_empty_packet;
++ }
++ // unless we are on a packet boundary. Then send full packet plus null packet.
++ else {
++ PRINTKD("%s: %d more to go then add empty packet.\n",__FUNCTION__,wr.bytes_left);
++ wrint=ep0_sh_write_data_then_empty_packet;
++ }
++ } else {
++ /*
++ * we have as much or more than requested
++ */
++ PRINTKD("%s: %d more to go.\n",__FUNCTION__,wr.bytes_left);
++ wrint=ep0_sh_write_data;
++ }
++
++ /*
++ * note: IPR was set uncondtionally at start of routine
++ */
++ set_cs_bits(cs_reg_bits);
++}
++
++/*
++ * write_fifo()
++ * Stick bytes in the 8 bytes endpoint zero FIFO.
++ * This version uses a variety of tricks to make sure the bytes
++ * are written correctly. 1. The count register is checked to
++ * see if the byte went in, and the write is attempted again
++ * if not. 2. An overall counter is used to break out so we
++ * don't hang in those (rare) cases where the UDC reverses
++ * direction of the FIFO underneath us without notification
++ * (in response to host aborting a setup transaction early).
++ *
++ */
++static void write_fifo( void )
++{
++ int bytes_this_time = MIN( wr.bytes_left, 8 );
++ int bytes_written = 0;
++
++ PRINTKD( "WF=%d: ", bytes_this_time );
++
++ while( bytes_this_time-- ) {
++ unsigned int cwc;
++ int i;
++ PRINTKD( "%2.2X ", *wr.p );
++ cwc = Ser0UDCWC & 15;
++ i = 10;
++ do {
++ Ser0UDCD0 = *wr.p;
++ udelay( 20 ); /* voodo 28Feb01ww */
++ } while( (Ser0UDCWC &15) == cwc && --i );
++
++ if ( i == 0 ) {
++ printk( "%swrite_fifo: write failure\n", pszMe );
++ usbd_info.stats.ep0_fifo_write_failures++;
++ }
++
++ wr.p++;
++ bytes_written++;
++ }
++ wr.bytes_left -= bytes_written;
++
++ /* following propagation voodo so maybe caller writing IPR in
++ ..a moment might actually get it to stick 28Feb01ww */
++ udelay( 300 );
++
++ usbd_info.stats.ep0_bytes_written += bytes_written;
++ PRINTKD( "L=%d WCR=%8.8X\n", wr.bytes_left, Ser0UDCWC );
++}
++/*
++ * read_fifo()
++ * Read 1-8 bytes out of FIFO and put in request.
++ * Called to do the initial read of setup requests
++ * from the host. Return number of bytes read.
++ *
++ * Like write fifo above, this driver uses multiple
++ * reads checked agains the count register with an
++ * overall timeout.
++ *
++ */
++static int
++read_fifo( struct usb_ctrlrequest * request )
++{
++ int bytes_read = 0;
++ int fifo_count;
++
++ unsigned char * pOut = (unsigned char*) request;
++
++ fifo_count = ( Ser0UDCWC & 0xFF );
++
++ ASSERT( fifo_count <= 8 );
++ PRINTKD( "RF=%d ", fifo_count );
++
++ while( fifo_count-- ) {
++ unsigned int cwc;
++ int i;
++
++ cwc = Ser0UDCWC & 15;
++
++ i = 10;
++ do {
++ *pOut = (unsigned char) Ser0UDCD0;
++ udelay( 20 );
++ } while( ( Ser0UDCWC & 15 ) == cwc && --i );
++
++ if ( i == 0 ) {
++ printk( "%sread_fifo(): read failure\n", pszMe );
++ usbd_info.stats.ep0_fifo_read_failures++;
++ }
++ pOut++;
++ bytes_read++;
++ }
++
++ PRINTKD( "fc=%d\n", bytes_read );
++ usbd_info.stats.ep0_bytes_read++;
++ return bytes_read;
++}
++
++/* some voodo I am adding, since the vanilla macros just aren't doing it 1Mar01ww */
++
++#define ABORT_BITS ( UDCCS0_SST | UDCCS0_SE )
++#define OK_TO_WRITE (!( Ser0UDCCS0 & ABORT_BITS ))
++#define BOTH_BITS (UDCCS0_IPR | UDCCS0_DE)
++
++static void set_cs_bits( __u32 bits )
++{
++ if ( bits & ( UDCCS0_SO | UDCCS0_SSE | UDCCS0_FST | UDCCS0_SST) )
++ Ser0UDCCS0 = bits;
++ else if ( (bits & BOTH_BITS) == BOTH_BITS )
++ set_ipr_and_de();
++ else if ( bits & UDCCS0_IPR )
++ set_ipr();
++ else if ( bits & UDCCS0_DE )
++ set_de();
++}
++
++static void set_de( void )
++{
++ int i = 1;
++ while( 1 ) {
++ if ( OK_TO_WRITE ) {
++ Ser0UDCCS0 |= UDCCS0_DE;
++ } else {
++ PRINTKD( "%sQuitting set DE because SST or SE set\n", pszMe );
++ break;
++ }
++ if ( Ser0UDCCS0 & UDCCS0_DE )
++ break;
++ udelay( i );
++ if ( ++i == 50 ) {
++ printk( "%sDangnabbbit! Cannot set DE! (DE=%8.8X CCS0=%8.8X)\n",
++ pszMe, UDCCS0_DE, Ser0UDCCS0 );
++ break;
++ }
++ }
++}
++
++static void set_ipr( void )
++{
++ int i = 1;
++ while( 1 ) {
++ if ( OK_TO_WRITE ) {
++ Ser0UDCCS0 |= UDCCS0_IPR;
++ } else {
++ PRINTKD( "%sQuitting set IPR because SST or SE set\n", pszMe );
++ break;
++ }
++ if ( Ser0UDCCS0 & UDCCS0_IPR )
++ break;
++ udelay( i );
++ if ( ++i == 50 ) {
++ printk( "%sDangnabbbit! Cannot set IPR! (IPR=%8.8X CCS0=%8.8X)\n",
++ pszMe, UDCCS0_IPR, Ser0UDCCS0 );
++ break;
++ }
++ }
++}
++
++static void set_ipr_and_de( void )
++{
++ int i = 1;
++ while( 1 ) {
++ if ( OK_TO_WRITE ) {
++ Ser0UDCCS0 |= BOTH_BITS;
++ } else {
++ PRINTKD( "%sQuitting set IPR/DE because SST or SE set\n", pszMe );
++ break;
++ }
++ if ( (Ser0UDCCS0 & BOTH_BITS) == BOTH_BITS)
++ break;
++ udelay( i );
++ if ( ++i == 50 ) {
++ printk( "%sDangnabbbit! Cannot set DE/IPR! (DE=%8.8X IPR=%8.8X CCS0=%8.8X)\n",
++ pszMe, UDCCS0_DE, UDCCS0_IPR, Ser0UDCCS0 );
++ break;
++ }
++ }
++}
++
++static bool clear_opr( void )
++{
++ int i = 10000;
++ bool is_clear;
++ do {
++ Ser0UDCCS0 = UDCCS0_SO;
++ is_clear = ! ( Ser0UDCCS0 & UDCCS0_OPR );
++ if ( i-- <= 0 ) {
++ printk( "%sclear_opr(): failed\n", pszMe );
++ break;
++ }
++ } while( ! is_clear );
++ return is_clear;
++}
++
++
++
++// ep1 handlers
++
++static char *ep1_buf;
++static int ep1_len;
++static void (*ep1_callback)(int flag, int size);
++static char *ep1_curdmabuf;
++static dma_addr_t ep1_curdmapos;
++static int ep1_curdmalen;
++static int ep1_remain;
++static int ep1_used;
++
++static dma_regs_t *dmaregs_rx = NULL;
++static int rx_pktsize;
++
++static int naking;
++
++static void
++ep1_start(void)
++{
++ sa1100_reset_dma(dmaregs_rx);
++ if (!ep1_curdmalen) {
++ ep1_curdmalen = rx_pktsize;
++ if (ep1_curdmalen > ep1_remain)
++ ep1_curdmalen = ep1_remain;
++ ep1_curdmapos = dma_map_single(NULL, ep1_curdmabuf, ep1_curdmalen,
++ DMA_FROM_DEVICE);
++ }
++
++ UDC_write( Ser0UDCOMP, ep1_curdmalen-1 );
++
++ sa1100_start_dma(dmaregs_rx, ep1_curdmapos, ep1_curdmalen);
++
++ if ( naking ) {
++ /* turn off NAK of OUT packets, if set */
++ UDC_flip( Ser0UDCCS1, UDCCS1_RPC );
++ naking = 0;
++ }
++}
++
++static void
++ep1_done(int flag)
++{
++ int size = ep1_len - ep1_remain;
++
++ if (!ep1_len)
++ return;
++ if (ep1_curdmalen)
++ dma_unmap_single(NULL, ep1_curdmapos, ep1_curdmalen,
++ DMA_FROM_DEVICE);
++ ep1_len = ep1_curdmalen = 0;
++ if (ep1_callback)
++ ep1_callback(flag, size);
++}
++
++void
++ep1_state_change_notify( int new_state )
++{
++
++}
++
++void
++ep1_stall( void )
++{
++ /* SET_FEATURE force stall at UDC */
++ UDC_set( Ser0UDCCS1, UDCCS1_FST );
++}
++
++int
++ep1_init(dma_regs_t *dmaregs)
++{
++ dmaregs_rx = dmaregs;
++ sa1100_reset_dma(dmaregs_rx);
++ ep1_done(-EAGAIN);
++ return 0;
++}
++
++void
++ep1_reset(void)
++{
++ if (dmaregs_rx)
++ sa1100_reset_dma(dmaregs_rx);
++ UDC_clear(Ser0UDCCS1, UDCCS1_FST);
++ ep1_done(-EINTR);
++}
++
++void
++ep1_int_hndlr(int udcsr)
++{
++ dma_addr_t dma_addr;
++ unsigned int len;
++ int status = Ser0UDCCS1;
++
++ if ( naking ) printk( "%sEh? in ISR but naking = %d\n", "usbrx: ", naking );
++
++ if (status & UDCCS1_RPC) {
++
++ if (!ep1_curdmalen) {
++ printk("usb_recv: RPC for non-existent buffer\n");
++ naking=1;
++ return;
++ }
++
++ sa1100_stop_dma(dmaregs_rx);
++
++ if (status & UDCCS1_SST) {
++ printk("usb_recv: stall sent OMP=%d\n",Ser0UDCOMP);
++ UDC_flip(Ser0UDCCS1, UDCCS1_SST);
++ ep1_done(-EIO); // UDC aborted current transfer, so we do
++ return;
++ }
++
++ if (status & UDCCS1_RPE) {
++ printk("usb_recv: RPError %x\n", status);
++ UDC_flip(Ser0UDCCS1, UDCCS1_RPC);
++ ep1_done(-EIO);
++ return;
++ }
++
++ dma_addr=sa1100_get_dma_pos(dmaregs_rx);
++ dma_unmap_single(NULL, ep1_curdmapos, ep1_curdmalen,
++ DMA_FROM_DEVICE);
++ len = dma_addr - ep1_curdmapos;
++#ifdef SA1100_USB_DEBUG
++ if (sa1100_usb_debug) {
++ int i;
++ printk("usb rx %d :\n ",len);
++ if (sa1100_usb_debug>1) {
++ for (i=0; i<len; i++) {
++ if ((i % 32)==31)
++ printk("\n ");
++// printk("%2.2x ",((char *)ep1_buf)[ep1_used+i]);
++ printk("%2.2x ",((char *)ep1_curdmapos)[i]);
++ }
++ }
++ printk("\n");
++ }
++#endif
++ if (len < ep1_curdmalen) {
++ char *buf = ep1_curdmabuf + len;
++ while (Ser0UDCCS1 & UDCCS1_RNE) {
++ if (len >= ep1_curdmalen) {
++ printk("usb_recv: too much data in fifo\n");
++ break;
++ }
++ *buf++ = Ser0UDCDR;
++ len++;
++ }
++ } else if (Ser0UDCCS1 & UDCCS1_RNE) {
++ printk("usb_recv: fifo screwed, shouldn't contain data\n");
++ len = 0;
++ }
++
++#if defined(NCB_DMA_FIX)
++// if (len && (ep1_buf != ep1_curdmabuf))
++// memcpy(ep1_buf,ep1_curdmabuf,len);
++ if (len)
++ memcpy(&(((unsigned char *)ep1_buf)[ep1_used]),ep1_curdmabuf,len);
++#endif
++
++ ep1_curdmalen = 0; /* dma unmap already done */
++ ep1_remain -= len;
++ ep1_used += len;
++// ep1_curdmabuf += len; // use same buffer again
++ naking = 1;
++//printk("%s: received %d, %d remaining\n",__FUNCTION__,len,ep1_remain);
++ if (len && (len == rx_pktsize))
++ ep1_start();
++ else
++ ep1_done((len) ? 0 : -EPIPE);
++ }
++ /* else, you can get here if we are holding NAK */
++}
++
++int
++sa1100_usb_recv(struct usb_request *req, void (*callback)(int flag, int size))
++{
++ unsigned long flags;
++ char *buf=req->buf;
++ int len=req->length;
++
++ if (ep1_len)
++ return -EBUSY;
++
++ local_irq_save(flags);
++ ep1_buf = buf;
++ ep1_len = len;
++ ep1_callback = callback;
++ ep1_remain = len;
++ ep1_used = 0;
++#ifdef NCB_DMA_FIX
++// if (((size_t)buf)&3)
++ if (1)
++ ep1_curdmabuf = receive_buffer;
++ else
++#else
++ ep1_curdmabuf = buf;
++#endif
++ ep1_curdmalen = 0;
++ ep1_start();
++ local_irq_restore(flags);
++
++ return 0;
++}
++
++// ep2 handlers
++
++static char *ep2_buf;
++static int ep2_len;
++static void (*ep2_callback)(int status, int size);
++static dma_addr_t ep2_dma;
++static dma_addr_t ep2_curdmapos;
++static int ep2_curdmalen;
++static int ep2_remain;
++static dma_regs_t *dmaregs_tx = NULL;
++static int tx_pktsize;
++
++/* device state is changing, async */
++void
++ep2_state_change_notify( int new_state )
++{
++}
++
++/* set feature stall executing, async */
++void
++ep2_stall( void )
++{
++ UDC_set( Ser0UDCCS2, UDCCS2_FST ); /* force stall at UDC */
++}
++
++static void
++ep2_start(void)
++{
++ if (!ep2_len)
++ return;
++
++ ep2_curdmalen = tx_pktsize;
++ if (ep2_curdmalen > ep2_remain)
++ ep2_curdmalen = ep2_remain;
++
++ /* must do this _before_ queue buffer.. */
++ UDC_flip( Ser0UDCCS2,UDCCS2_TPC ); /* stop NAKing IN tokens */
++ UDC_write( Ser0UDCIMP, ep2_curdmalen-1 );
++
++#if 0
++ /* Remove if never seen...8Mar01ww */
++ {
++ int massive_attack = 20;
++ while ( Ser0UDCIMP != ep2_curdmalen-1 && massive_attack-- ) {
++ printk( "usbsnd: Oh no you don't! Let me spin..." );
++ udelay( 500 );
++ printk( "and try again...\n" );
++ UDC_write( Ser0UDCIMP, ep2_curdmalen-1 );
++ }
++ if ( massive_attack != 20 ) {
++ if ( Ser0UDCIMP != ep2_curdmalen-1 )
++ printk( "usbsnd: Massive attack FAILED :-( %d\n",
++ 20 - massive_attack );
++ else
++ printk( "usbsnd: Massive attack WORKED :-) %d\n",
++ 20 - massive_attack );
++ }
++ }
++ /* End remove if never seen... 8Mar01ww */
++#endif
++
++ Ser0UDCAR = usbd_info.address; // fighting stupid silicon bug
++ sa1100_start_dma(dmaregs_tx, ep2_curdmapos, ep2_curdmalen);
++}
++
++static void
++ep2_done(int flag)
++{
++ int size = ep2_len - ep2_remain;
++ if (ep2_len) {
++ dma_unmap_single(NULL, ep2_dma, ep2_len, DMA_TO_DEVICE);
++ ep2_len = 0;
++ if (ep2_callback)
++ ep2_callback(flag, size);
++ }
++}
++
++int
++ep2_init(dma_regs_t *dmaregs)
++{
++ dmaregs_tx = dmaregs;
++ sa1100_reset_dma(dmaregs_tx);
++ ep2_done(-EAGAIN);
++ return 0;
++}
++
++void
++ep2_reset(void)
++{
++ UDC_clear(Ser0UDCCS2, UDCCS2_FST);
++ if (dmaregs_tx)
++ sa1100_reset_dma(dmaregs_tx);
++ ep2_done(-EINTR);
++}
++
++void
++ep2_int_hndlr(int udcsr)
++{
++ int status = Ser0UDCCS2;
++
++ if (Ser0UDCAR != usbd_info.address) // check for stupid silicon bug.
++ Ser0UDCAR = usbd_info.address;
++
++ if (status & UDCCS2_TPC) {
++
++ UDC_flip(Ser0UDCCS2, UDCCS2_SST);
++
++ sa1100_reset_dma(dmaregs_tx);
++
++ if (status & (UDCCS2_TPE | UDCCS2_TUR)) {
++ printk("usb_send: transmit error %x\n", status);
++ ep2_done(-EIO);
++ } else {
++#if 1 // 22Feb01ww/Oleg
++ ep2_curdmapos += ep2_curdmalen;
++ ep2_remain -= ep2_curdmalen;
++#else
++ ep2_curdmapos += Ser0UDCIMP + 1; // this is workaround
++ ep2_remain -= Ser0UDCIMP + 1; // for case when setting of Ser0UDCIMP was failed
++#endif
++
++ if (ep2_remain != 0)
++ ep2_start();
++ else
++ ep2_done(0);
++ }
++ } else {
++ printk("usb_send: Not TPC: UDCCS2 = %x\n", status);
++ }
++}
++
++int
++sa1100_usb_send(struct usb_request *req, void (*callback)(int status, int size))
++{
++ char *buf=req->buf;
++ int len=req->length;
++ unsigned long flags;
++
++ if (usbd_info.state != USB_STATE_CONFIGURED) {
++ PRINTKD("%s: return -ENODEV\n",__FUNCTION__);
++ return -ENODEV;
++ }
++
++ if (ep2_len) {
++ PRINTKD("%s: return -EBUSY\n",__FUNCTION__);
++ return -EBUSY;
++ }
++
++ local_irq_save(flags);
++#ifdef NCB_DMA_FIX
++ // if misaligned, copy to aligned buffer
++// if (((size_t)buf)&3) {
++ if (1) {
++ PRINTKD("%s: copying %d bytes to send_buffer\n",__FUNCTION__,len);
++ memcpy(send_buffer,buf,len);
++ ep2_buf = send_buffer;
++ }
++ else
++#endif
++ ep2_buf = buf;
++
++ ep2_len = len;
++ ep2_dma = dma_map_single(NULL, ep2_buf, len,DMA_TO_DEVICE);
++ PRINTKD("%s: mapped dma to buffer(%p0\n",__FUNCTION__,buf);
++
++ ep2_callback = callback;
++ ep2_remain = len;
++ ep2_curdmapos = ep2_dma;
++
++ PRINTKD("%s: calling ep2_start\n",__FUNCTION__);
++ ep2_start();
++ local_irq_restore(flags);
++
++ return 0;
++}
++/*-------------------------------------------------------------------------*/
++
++static int
++sa1100_enable (struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
++{
++ struct sa1100_udc *dev;
++ struct sa1100_ep *ep;
++ u32 max;
++ int type;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!_ep || !desc || ep->desc || _ep->name == ep0name
++ || desc->bDescriptorType != USB_DT_ENDPOINT) {
++ PRINTKD("%s: _ep = %p, desc = %p\n",__FUNCTION__,_ep,desc);
++ if (_ep && desc)
++ PRINTKD("%s: ep->desc = %p, _ep->name = %s desc->bDescriptorType = %s\n",__FUNCTION__,ep->desc,_ep->name,
++ (desc->bDescriptorType == USB_DT_ENDPOINT) ? "USB_DT_ENDPOINT":"bad!!");
++ return -EINVAL;
++ }
++
++ dev = ep->dev;
++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++
++ type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++ max = le16_to_cpu (desc->wMaxPacketSize);
++ switch (max) {
++ case 64: case 32:
++ /* note: maxpacket > 16 means DMA might overrun/underrun */
++ case 16: case 8:
++ break;
++ default:
++ if (type == USB_ENDPOINT_XFER_INT && max < 64)
++ break;
++ return -EDOM;
++ }
++
++ switch (type) {
++ case USB_ENDPOINT_XFER_BULK:
++ case USB_ENDPOINT_XFER_INT:
++ if (ep == &dev->ep[2]) {
++ if (desc->bEndpointAddress != (USB_DIR_IN|2) ) {
++ PRINTKD("%s: ep[2] has invalid endpoint\n",__FUNCTION__);
++ return -EINVAL;
++ }
++ tx_pktsize = max;
++ Ser0UDCOMP = max - 1;
++ PRINTKD("%s: ep2 max packet size is %d\n",__FUNCTION__,max);
++ break;
++ } else if (ep == &dev->ep[1]) {
++ if (desc->bEndpointAddress != (USB_DIR_OUT|1)) {
++ PRINTKD("%s: ep[1] has invalid endpoint\n",__FUNCTION__);
++ return -EINVAL;
++ }
++ rx_pktsize = max;
++ Ser0UDCIMP = max - 1;
++ PRINTKD("%s: ep1 max packet size is %d\n",__FUNCTION__,max);
++ break;
++ }
++ // FALLTHROUGH
++ default:
++ PRINTKD("%s: Invalid endpoint\n",__FUNCTION__);
++ return -EINVAL;
++ }
++
++ _ep->maxpacket = max;
++ ep->desc = desc;
++
++ DEBUG (dev, "enabled %s %s max %04x\n", _ep->name,
++ type_string (desc->bmAttributes), max);
++
++ return 0;
++}
++
++static int sa1100_disable (struct usb_ep *_ep)
++{
++ struct sa1100_ep *ep;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!_ep || !ep->desc || _ep->name == ep0name)
++ return -EINVAL;
++
++ nuke (ep, -ESHUTDOWN);
++
++ DEBUG (ep->dev, "disabled %s\n", _ep->name);
++
++ ep->desc = NULL;
++ ep->stopped = 1;
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++static struct usb_request *
++sa1100_alloc_request (struct usb_ep *_ep, int gfp_flags)
++{
++ struct sa1100_request *req;
++
++ if (!_ep)
++ return 0;
++
++ req = kmalloc (sizeof *req, gfp_flags);
++ if (!req)
++ return 0;
++
++ memset (req, 0, sizeof *req);
++ req->req.dma = DMA_ADDR_INVALID;
++ INIT_LIST_HEAD (&req->queue);
++ return &req->req;
++}
++
++static void
++sa1100_free_request (struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct sa1100_request *req;
++
++#if 0 // NCB
++ struct sa1100_ep *ep;
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!ep || !_req || (!ep->desc && _ep->name != ep0name))
++ return;
++ #endif
++
++ req = container_of (_req, struct sa1100_request, req);
++ WARN_ON (!list_empty (&req->queue));
++ kfree(req); //NCB - see pxa2xx_udc
++}
++
++/*-------------------------------------------------------------------------*/
++
++/* allocate buffers this way to eliminate per-io buffer copies */
++
++static void *
++sa1100_alloc_buffer (
++ struct usb_ep *_ep,
++ unsigned bytes,
++ dma_addr_t *dma,
++ int gfp_flags
++)
++{
++ void *retval;
++#if 1 // NCB see pxa2xx_udc
++ retval = kmalloc (bytes, gfp_flags & ~(__GFP_DMA|__GFP_HIGHMEM));
++ if (retval)
++// used in pxa .. *dma = virt_to_bus (retval);
++ *dma = virt_to_phys (retval);
++#else
++ struct sa1100_ep *ep;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!ep || (!ep->desc && _ep->name != ep0name))
++ return 0;
++
++ *dma = DMA_ADDR_INVALID;
++ retval = kmalloc (bytes, GFP_DMA | gfp_flags);
++ if (retval)
++ *dma = virt_to_phys (retval);
++ #endif
++ return retval;
++}
++
++static void
++sa1100_free_buffer (
++ struct usb_ep *_ep,
++ void *buf,
++ dma_addr_t dma,
++ unsigned bytes
++) {
++ kfree (buf);
++}
++
++/*-------------------------------------------------------------------------*/
++
++static void
++done (struct sa1100_ep *ep, struct sa1100_request *req, int status)
++{
++ unsigned stopped = ep->stopped;
++
++
++ list_del_init (&req->queue);
++
++ if (req->req.status == -EINPROGRESS)
++ req->req.status = status;
++ else
++ status = req->req.status;
++
++ if (status && status != -ESHUTDOWN)
++ VDEBUG (ep->dev, "complete %s req %p stat %d len %u/%u\n",
++ ep->ep.name, &req->req, status,
++ req->req.actual, req->req.length);
++
++ /* don't modify queue heads during completion callback */
++ ep->stopped = 1;
++ PRINTKD("%s: calling complete on req\n",__FUNCTION__);
++ req->req.complete (&ep->ep, &req->req);
++ ep->stopped = stopped;
++}
++
++#if 0 // NCB
++void control_done (int value)
++{
++ struct list_head *entry, *tmp;
++ struct sa1100_request *req;
++
++ list_for_each_safe (entry, tmp, &the_controller.ep[0].queue) {
++ req = list_entry (entry, struct sa1100_request, queue);
++
++ /* HACK -- assume no control errors */
++ if (value == 0)
++ req->req.actual = req->req.length;
++#if 1
++ PRINTKD("%s: calling done with ep=%p, req=%p\n",__FUNCTION__,&the_udc.ep[0],req);
++ done (&the_udc.ep[0], req, value);
++#else
++ done (&the_udc.ep0, req, value);
++#endif
++ value = -EPROTO;
++ }
++}
++#endif
++
++/*-------------------------------------------------------------------------*/
++
++/* FIXME move away from the old non-queued api.
++ * - forces extra work on us
++ * - stores request state twice
++ * - doesn't let gadget driver handle dma mapping
++ * - status codes need mapping
++ */
++
++static int map_status (int status)
++{
++ switch (status) {
++ case 0:
++ case -EIO: /* ep[12]_int_handler */
++ return status;
++ case -EPIPE: /* ep1_int_handler */
++ return 0;
++ // case -EAGAIN: /* ep[12]_init */
++ // case -EINTR: /* ep[12]_reset */
++ default:
++ return -ESHUTDOWN;
++ }
++}
++
++static void tx_callback (int status, int size)
++{
++ struct sa1100_ep *ep = &the_controller->ep[2];
++ struct sa1100_request *req;
++
++// PRINTKD("%s: doing ...\n",__FUNCTION__);
++PRINTKD("%s: doing ... status=%d size=%d\n",__FUNCTION__,status,size);
++//PRINTKD("%s: doing ... status=%d\n",__FUNCTION__,status);
++ if (list_empty (&ep->queue)) {
++ if (status != -EAGAIN)
++ DEBUG (ep->dev, "%s, bogus tx callback %d/%d\n",
++ ep->ep.name, status, size);
++// DEBUG (ep->dev, "%s, bogus tx callback %d\n",
++// ep->ep.name, status);
++else
++PRINTKD("%s: list empty.\n",__FUNCTION__);
++ return;
++ }
++ req = list_entry (ep->queue.next, struct sa1100_request, queue);
++ req->req.actual = size;
++ done (ep, req, map_status (status));
++
++PRINTKD("%s: ep->stopped=%s\n",__FUNCTION__,ep->stopped ? "true":"false");
++ if (ep->stopped || list_empty (&ep->queue))
++ return;
++ req = list_entry (ep->queue.next, struct sa1100_request, queue);
++PRINTKD("%s: calling sa1100_usb_send\n",__FUNCTION__);
++ sa1100_usb_send (&req->req, tx_callback);
++}
++
++static void rx_callback (int status, int size)
++{
++ struct sa1100_ep *ep = &the_controller->ep[1];
++ struct sa1100_request *req;
++
++// PRINTKD("%s: doing ...\n",__FUNCTION__);
++PRINTKD("%s: doing ... status=%d\n",__FUNCTION__,status);
++ if (list_empty (&ep->queue)) {
++ if (status != -EAGAIN)
++ DEBUG (ep->dev, "%s, bogus tx callback %d/%d\n",
++ ep->ep.name, status, size);
++ return;
++ }
++ req = list_entry (ep->queue.next, struct sa1100_request, queue);
++ req->req.actual = size;
++ done (ep, req, map_status (status));
++
++ if (ep->stopped || list_empty (&ep->queue))
++ return;
++ req = list_entry (ep->queue.next, struct sa1100_request, queue);
++ sa1100_usb_recv (&req->req, rx_callback);
++}
++
++
++static int
++sa1100_queue (struct usb_ep *_ep, struct usb_request *_req, int gfp_flags)
++{
++ struct sa1100_request *req;
++ struct sa1100_ep *ep;
++ struct sa1100_udc *dev;
++ unsigned long flags;
++
++ req = container_of (_req, struct sa1100_request, req);
++ if (!_req || !_req->complete || !_req->buf
++ || !list_empty (&req->queue))
++ return -EINVAL;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!_ep || (!ep->desc && _ep->name != ep0name))
++ return -EINVAL;
++ dev = ep->dev;
++
++ // handle ep0
++ if (_ep->name == ep0name) {
++ ep0_queue( _req->buf, _req->length, dev->ep0_req_len >=0 ? dev->ep0_req_len: _req->length );
++ return 0;
++ }
++
++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++
++ /* sa1100 udc can't write zlps */
++ if (ep == &dev->ep[2] && _req->length == 0)
++ return -ERANGE;
++
++ /* the old sa1100 api doesn't use 'unsigned' for lengths */
++ if (_req->length > INT_MAX)
++ return -ERANGE;
++
++#if 0
++ VDEBUG (dev, "%s queue req %p, len %d buf %p\n",
++ _ep->name, _req, _req->length, _req->buf);
++#endif
++
++ local_irq_save (flags);
++
++ _req->status = -EINPROGRESS;
++ _req->actual = 0;
++
++// NCB if (list_empty) {
++ if (list_empty (&ep->queue) && !ep->stopped) {
++ /* FIXME this does DMA mapping wrong. caller is allowed
++ * to provide buffers that don't need mapping, but this
++ * doesn't use them.
++ */
++ if (ep == &ep->dev->ep[2]) {
++ PRINTKD("%s: sa1100_usb_send buf %p length %d\n",__FUNCTION__,_req->buf,_req->length);
++ sa1100_usb_send (_req, tx_callback);
++ }
++ else if (ep == &ep->dev->ep[1]) {
++ PRINTKD("%s: sa1100_usb_recv buf %p length %d\n",__FUNCTION__,_req->buf,_req->length);
++ sa1100_usb_recv (_req, rx_callback);
++ }
++ /* ep0 rx/tx is handled separately */
++ }
++ list_add_tail (&req->queue, &ep->queue);
++
++ local_irq_restore (flags);
++
++ return 0;
++}
++
++/* dequeue ALL requests */
++static void nuke (struct sa1100_ep *ep, int status)
++{
++ struct sa1100_request *req;
++
++ /* called with irqs blocked */
++ ep->stopped = 1;
++ if (ep == &ep->dev->ep[1])
++ ep1_reset ();
++ else if (ep == &ep->dev->ep[2])
++ ep2_reset ();
++ while (!list_empty (&ep->queue)) {
++ req = list_entry (ep->queue.next,
++ struct sa1100_request,
++ queue);
++ done (ep, req, status);
++ }
++}
++
++/* dequeue JUST ONE request */
++static int sa1100_dequeue (struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct sa1100_ep *ep;
++ struct sa1100_request *req;
++ unsigned long flags;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ req = container_of (_req, struct sa1100_request, req);
++ if (!_ep || (!ep->desc && _ep->name != ep0name) || !_req)
++ return -EINVAL;
++
++ local_irq_save (flags);
++
++ /* make sure it's actually queued on this endpoint */
++ list_for_each_entry (req, &ep->queue, queue) {
++ if (&req->req == _req)
++ break;
++ }
++ if (&req->req != _req) {
++ local_irq_restore(flags);
++ return -EINVAL;
++ }
++
++#if 0
++//#ifdef USE_DMA
++ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) {
++ cancel_dma(ep);
++ done(ep, req, -ECONNRESET);
++ /* restart i/o */
++ if (!list_empty(&ep->queue)) {
++ req = list_entry(ep->queue.next,
++ struct pxa2xx_request, queue);
++ kick_dma(ep, req);
++ }
++ } else
++//#endif
++#endif
++ done(ep, req, -ECONNRESET);
++
++ local_irq_restore(flags);
++
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++static int
++sa1100_set_halt (struct usb_ep *_ep, int value)
++{
++ struct sa1100_ep *ep;
++
++ ep = container_of (_ep, struct sa1100_ep, ep);
++ if (!_ep || (!ep->desc && _ep->name != ep0name))
++ return -EINVAL;
++ if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++ if ( (ep->desc->bmAttributes & 0x03) == USB_ENDPOINT_XFER_ISOC)
++ return -EINVAL;
++
++ VDEBUG (ep->dev, "%s %s halt\n", _ep->name, value ? "set" : "clear");
++
++ /* set/clear, then synch memory views with the device */
++ if (value) {
++ if (ep == &ep->dev->ep[1])
++ ep1_stall ();
++ else
++ ep2_stall ();
++ } else {
++ if (ep == &ep->dev->ep[1])
++ ep1_reset ();
++ else
++ ep2_reset ();
++ }
++
++ return 0;
++}
++
++static struct usb_ep_ops sa1100_ep_ops = {
++ .enable = sa1100_enable,
++ .disable = sa1100_disable,
++
++ .alloc_request = sa1100_alloc_request,
++ .free_request = sa1100_free_request,
++
++ .alloc_buffer = sa1100_alloc_buffer,
++ .free_buffer = sa1100_free_buffer,
++
++ .queue = sa1100_queue,
++ .dequeue = sa1100_dequeue,
++
++ .set_halt = sa1100_set_halt,
++ // .fifo_status = sa1100_fifo_status,
++ // .fifo_flush = sa1100_fifo_flush,
++};
++
++/*-------------------------------------------------------------------------*/
++
++static int sa1100_get_frame (struct usb_gadget *_gadget)
++{
++ return -EOPNOTSUPP;
++}
++
++static int sa1100_wakeup (struct usb_gadget *_gadget)
++{
++ struct sa1100_udc *dev;
++
++ if (!_gadget)
++ return 0;
++ dev = container_of (_gadget, struct sa1100_udc, gadget);
++
++ // FIXME
++
++ return 0;
++}
++
++static const struct usb_gadget_ops sa1100_ops = {
++ .get_frame = sa1100_get_frame,
++ .wakeup = sa1100_wakeup,
++
++ // .set_selfpowered = sa1100_set_selfpowered,
++};
++
++/*-------------------------------------------------------------------------*/
++
++static inline void enable_resume_mask_suspend (void)
++{
++ int i = 0;
++
++ while (1) {
++ Ser0UDCCR |= UDCCR_SUSIM; // mask future suspend events
++ udelay (i);
++ if ( (Ser0UDCCR & UDCCR_SUSIM) || (Ser0UDCSR & UDCSR_RSTIR))
++ break;
++ if (++i == 50) {
++ WARN (&the_controller, "%s Could not set SUSIM %8.8X\n",
++ __FUNCTION__, Ser0UDCCR);
++ break;
++ }
++ }
++
++ i = 0;
++ while (1) {
++ Ser0UDCCR &= ~UDCCR_RESIM;
++ udelay (i);
++ if ( (Ser0UDCCR & UDCCR_RESIM) == 0
++ || (Ser0UDCSR & UDCSR_RSTIR))
++ break;
++ if (++i == 50) {
++ WARN (&the_controller, "%s Could not clear RESIM %8.8X\n",
++ __FUNCTION__, Ser0UDCCR);
++ break;
++ }
++ }
++}
++
++static inline void enable_suspend_mask_resume (void)
++{
++ int i = 0;
++ while (1) {
++ Ser0UDCCR |= UDCCR_RESIM; // mask future resume events
++ udelay (i);
++ if (Ser0UDCCR & UDCCR_RESIM || (Ser0UDCSR & UDCSR_RSTIR))
++ break;
++ if (++i == 50) {
++ WARN (&the_controller, "%s could not set RESIM %8.8X\n",
++ __FUNCTION__, Ser0UDCCR);
++ break;
++ }
++ }
++ i = 0;
++ while (1) {
++ Ser0UDCCR &= ~UDCCR_SUSIM;
++ udelay (i);
++ if ( (Ser0UDCCR & UDCCR_SUSIM) == 0
++ || (Ser0UDCSR & UDCSR_RSTIR))
++ break;
++ if (++i == 50) {
++ WARN (&the_controller, "%s Could not clear SUSIM %8.8X\n",
++ __FUNCTION__, Ser0UDCCR);
++ break;
++ }
++ }
++}
++
++// HACK DEBUG 3Mar01ww
++// Well, maybe not, it really seems to help! 08Mar01ww
++static void core_kicker (void)
++{
++ u32 car = Ser0UDCAR;
++ u32 imp = Ser0UDCIMP;
++ u32 omp = Ser0UDCOMP;
++
++ UDC_set (Ser0UDCCR, UDCCR_UDD);
++ udelay (300);
++ UDC_clear (Ser0UDCCR, UDCCR_UDD);
++
++ Ser0UDCAR = car;
++ Ser0UDCIMP = imp;
++ Ser0UDCOMP = omp;
++}
++
++// NCB static void
++static irqreturn_t
++udc_int_hndlr (int irq, void *_dev, struct pt_regs *regs)
++{
++ struct sa1100_udc *dev = _dev;
++ u32 status = Ser0UDCSR;
++
++ u32 control = Ser0UDCCR;
++ PRINTKD("%s: status = 0x%x and control = 0x%x\n",__FUNCTION__,status,control);
++ /* ReSeT Interrupt Request - UDC has been reset */
++ if (status & UDCSR_RSTIR) {
++ PRINTKD("%s: processing UDCSR_RSTIR\n",__FUNCTION__);
++ if (usbctl_next_state_on_event (kEvReset) != kError) {
++ /* starting 20ms or so reset sequence now... */
++ INFO (dev, "Resetting\n");
++ ep0_reset (); // just set state to idle
++ ep1_reset (); // flush dma, clear false stall
++ ep2_reset (); // flush dma, clear false stall
++ }
++ // mask reset ints, they flood during sequence, enable
++ // suspend and resume
++ Ser0UDCCR |= UDCCR_REM; // mask reset
++ Ser0UDCCR &= ~ (UDCCR_SUSIM | UDCCR_RESIM); // enable suspend and resume
++ UDC_flip ( Ser0UDCSR, status); // clear all pending sources
++ PRINTKD("%s: setting USB_FULL_SPEED\n",__FUNCTION__);
++ dev->gadget.speed = USB_SPEED_FULL;
++ return IRQ_HANDLED; // NCB
++ }
++
++ /* else we have done something other than reset,
++ * so be sure reset enabled
++ */
++ UDC_clear (Ser0UDCCR, UDCCR_REM);
++
++ /* RESume Interrupt Request */
++ if (status & UDCSR_RESIR) {
++ struct usb_gadget_driver *driver = dev->driver;
++
++ PRINTKD("%s: processing UDCSR_RESIR\n",__FUNCTION__);
++ if (driver->resume)
++ driver->resume (&dev->gadget);
++ core_kicker ();
++ enable_suspend_mask_resume ();
++ }
++
++ /* SUSpend Interrupt Request */
++ if (status & UDCSR_SUSIR) {
++ struct usb_gadget_driver *driver = dev->driver;
++
++ PRINTKD("%s: processing UDCSR_SUSIR\n",__FUNCTION__);
++ if (driver->suspend)
++ driver->suspend (&dev->gadget);
++ enable_resume_mask_suspend ();
++ }
++
++ UDC_flip (Ser0UDCSR, status); // clear all pending sources
++
++ if (status & UDCSR_EIR)
++ ep0_int_hndlr ();
++
++
++ if (status & UDCSR_RIR) {
++ PRINTKD("%s: processing ep1_int_hndlr\n",__FUNCTION__);
++ ep1_int_hndlr (status);
++ }
++ if (status & UDCSR_TIR) {
++ PRINTKD("%s: processing ep2_int_hndlr\n",__FUNCTION__);
++ ep2_int_hndlr (status);
++ }
++
++ return IRQ_HANDLED; // NCB
++
++}
++
++/* soft_connect_hook ()
++ * Some devices have platform-specific circuitry to make USB
++ * not seem to be plugged in, even when it is. This allows
++ * software to control when a device 'appears' on the USB bus
++ * (after Linux has booted and this driver has loaded, for
++ * example). If you have such a circuit, control it here.
++ */
++#ifdef CONFIG_SA1100_EXTENEX1
++static void soft_connect_hook (int enable)
++{
++ if (machine_is_extenex1 ()) {
++ if (enable) {
++ PPDR |= PPC_USB_SOFT_CON;
++ PPSR |= PPC_USB_SOFT_CON;
++ } else {
++ PPSR &= ~PPC_USB_SOFT_CON;
++ PPDR &= ~PPC_USB_SOFT_CON;
++ }
++ }
++}
++#elif defined(CONFIG_SA1100_BALLOON)
++static void soft_connect_hook (int enable)
++{
++ if (machine_is_balloon()) {
++ if (enable)
++ balloon_udc_connect();
++ else
++ balloon_udc_disconnect();
++ }
++}
++#else
++#define soft_connect_hook(x) do { } while (0);
++#endif
++
++/* "function" sysfs attribute */
++static ssize_t
++show_function (struct device *_dev, char *buf)
++{
++ struct sa1100_udc *dev = dev_get_drvdata (_dev);
++
++ if (!dev->driver
++ || !dev->driver->function
++ || strlen (dev->driver->function) > PAGE_SIZE)
++ return 0;
++ return scnprintf (buf, PAGE_SIZE, "%s\n", dev->driver->function);
++}
++static DEVICE_ATTR (function, S_IRUGO, show_function, NULL);
++
++/* disable the UDC at the source */
++static void udc_disable (struct sa1100_udc *dev)
++{
++ soft_connect_hook (0);
++ UDC_set (Ser0UDCCR, UDCCR_UDD);
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++ ep0_idle(dev);
++}
++
++static void udc_reinit(struct sa1100_udc *dev) {
++
++ u32 i;
++
++ /* Initialize the gadget controller data structure */
++ INIT_LIST_HEAD (&dev->gadget.ep_list);
++ INIT_LIST_HEAD (&dev->gadget.ep0->ep_list);
++ ep0_idle(dev);
++ for ( i = 0 ; i < 3 ; i++) {
++ struct sa1100_ep *ep = &dev->ep[i];
++ if (i != 0)
++ list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
++ ep->desc = NULL;
++ ep->stopped = 0;
++ INIT_LIST_HEAD(&ep->queue);
++ }
++}
++
++/* enable the udc at the source */
++static void udc_enable (struct sa1100_udc *dev)
++{
++ UDC_clear (Ser0UDCCR, UDCCR_UDD);
++ ep0_idle(dev);
++}
++
++static void ep0_start (struct sa1100_udc *dev)
++{
++ udc_enable (dev);
++ udelay (100);
++
++ /* clear stall - receiver seems to start stalled? 19Jan01ww */
++ /* also clear other stuff just to be thurough 22Feb01ww */
++ UDC_clear(Ser0UDCCS1, UDCCS1_FST | UDCCS1_RPE | UDCCS1_RPC );
++ UDC_clear(Ser0UDCCS2, UDCCS2_FST | UDCCS2_TPE | UDCCS2_TPC );
++
++ /* mask everything */
++ Ser0UDCCR = 0xFC;
++
++ /* flush DMA and fire through some -EAGAINs */
++ ep1_init (dev->ep[1].dmaregs);
++ ep2_init (dev->ep[2].dmaregs);
++
++ /* enable any platform specific hardware */
++ soft_connect_hook (1);
++
++ /* clear all top-level sources */
++ Ser0UDCSR = UDCSR_RSTIR | UDCSR_RESIR | UDCSR_EIR |
++ UDCSR_RIR | UDCSR_TIR | UDCSR_SUSIR ;
++
++ /* EXERIMENT - a short line in the spec says toggling this
++ * bit diddles the internal state machine in the udc to
++ * expect a suspend
++ */
++ Ser0UDCCR |= UDCCR_RESIM;
++ /* END EXPERIMENT 10Feb01ww */
++
++ /* enable any platform specific hardware */
++ soft_connect_hook (1);
++
++ /* Enable interrupts. If you are unplugged you will immediately
++ * get a suspend interrupt. If you are plugged and have a soft
++ * connect-circuit, you will get a reset. If you are plugged
++ * without a soft-connect, I think you also get suspend. In short,
++ * start with suspend masked and everything else enabled
++ */
++ UDC_write( Ser0UDCCR, UDCCR_SUSIM );
++}
++
++
++/* when a driver is successfully registered, it will receive
++ * control requests including set_configuration (), which enables
++ * non-control requests. then usb traffic follows until a
++ * disconnect is reported. then a host may connect again, or
++ * the driver might get unbound.
++ */
++int usb_gadget_register_driver (struct usb_gadget_driver *driver)
++{
++ struct sa1100_udc *dev = the_controller;
++ int retval;
++
++ if (!driver
++ || !driver->bind
++ || !driver->unbind
++ || !driver->setup)
++ return -EINVAL;
++ if (!dev)
++ return -ENODEV;
++ if (dev->driver)
++ return -EBUSY;
++
++ /* hook up the driver ... */
++ dev->driver = driver;
++ dev->gadget.dev.driver = &driver->driver;
++
++// device_add (&dev->gadget.dev);
++ retval = driver->bind (&dev->gadget);
++ if (retval) {
++ DEBUG (dev, "bind to driver %s --> %d\n",
++ driver->driver.name, retval);
++ device_del(&dev->gadget.dev);
++ dev->driver = NULL;
++ dev->gadget.dev.driver = NULL;
++ return retval;
++ }
++ device_create_file(dev->dev, &dev_attr_function);
++
++ /* ... then enable host detection and ep0; and we're ready
++ * for set_configuration as well as eventual disconnect.
++ */
++ ep0_start (dev);
++
++ DEBUG (dev, "%s ready\n", driver->driver.name);
++
++ return 0;
++}
++EXPORT_SYMBOL (usb_gadget_register_driver);
++
++static void
++stop_activity (struct sa1100_udc *dev, struct usb_gadget_driver *driver)
++{
++ int i;
++
++ /* don't disconnect if it's not connected */
++ if (dev->gadget.speed == USB_SPEED_UNKNOWN)
++ driver = NULL;
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++
++ /* mask everything */
++ Ser0UDCCR = 0xFC;
++
++ /* stop hardware; prevent new request submissions;
++ * and kill any outstanding requests.
++ */
++ for (i = 0; i < 3; i++) {
++ struct sa1100_ep *ep = &dev->ep[i];
++
++ ep->stopped = 1;
++ nuke(ep, -ESHUTDOWN);
++ }
++ udc_disable (dev);
++
++ /* report disconnect; the driver is already quiesced */
++ if (driver) {
++// spin_unlock (&dev->lock);
++ driver->disconnect (&dev->gadget);
++// spin_lock (&dev->lock);
++ }
++ /* re-init driver-visible data structures */
++ udc_reinit(dev);
++}
++
++int usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
++{
++ struct sa1100_udc *dev = the_controller;
++
++ if (!dev)
++ return -ENODEV;
++ if (!driver || driver != dev->driver)
++ return -EINVAL;
++
++ local_irq_disable();
++ stop_activity (dev, driver);
++ local_irq_enable();
++ driver->unbind (&dev->gadget);
++ dev->driver = 0;
++
++//printk("%s: deleting device\n",__FUNCTION__);
++// device_del (&dev->gadget.dev);
++ device_remove_file(dev->dev, &dev_attr_function);
++
++ DEBUG (dev, "unregistered driver '%s'\n", driver->driver.name);
++ return 0;
++}
++EXPORT_SYMBOL (usb_gadget_unregister_driver);
++
++
++/*-------------------------------------------------------------------------*/
++
++/*-------------------------------------------------------------------------*/
++
++//////////////////////////////////////////////////////////////////////////////
++// Proc Filesystem Support
++//////////////////////////////////////////////////////////////////////////////
++
++#if CONFIG_PROC_FS
++
++#define SAY(fmt,args...) p += sprintf (p, fmt, ## args)
++#define SAYV(num) p += sprintf (p, num_fmt, "Value", num)
++#define SAYC(label,yn) p += sprintf (p, yn_fmt, label, yn)
++#define SAYS(label,v) p += sprintf (p, cnt_fmt, label, v)
++
++static int usbctl_read_proc (char *page, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ const char * num_fmt = "%25.25s: %8.8lX\n";
++ const char * cnt_fmt = "%25.25s: %lu\n";
++ const char * yn_fmt = "%25.25s: %s\n";
++ const char * yes = "YES";
++ const char * no = "NO";
++ unsigned long v;
++ char * p = page;
++ int len;
++
++ SAY ("SA1100 USB Controller Core\n");
++
++ SAYS ("ep0 bytes read", usbd_info.stats.ep0_bytes_read);
++ SAYS ("ep0 bytes written", usbd_info.stats.ep0_bytes_written);
++ SAYS ("ep0 FIFO read failures", usbd_info.stats.ep0_fifo_read_failures);
++ SAYS ("ep0 FIFO write failures", usbd_info.stats.ep0_fifo_write_failures);
++
++ SAY ("\n");
++
++ v = Ser0UDCAR;
++ SAY ("%25.25s: 0x%8.8lX - %ld\n", "Address Register", v, v);
++ v = Ser0UDCIMP;
++ SAY ("%25.25s: %ld (%8.8lX)\n", "IN max packet size", v+1, v);
++ v = Ser0UDCOMP;
++ SAY ("%25.25s: %ld (%8.8lX)\n", "OUT max packet size", v+1, v);
++
++ v = Ser0UDCCR;
++ SAY ("\nUDC Mask Register\n");
++ SAYV (v);
++ SAYC ("UDC Active", (v & UDCCR_UDA) ? yes : no);
++ SAYC ("Suspend interrupts masked", (v & UDCCR_SUSIM) ? yes : no);
++ SAYC ("Resume interrupts masked", (v & UDCCR_RESIM) ? yes : no);
++ SAYC ("Reset interrupts masked", (v & UDCCR_REM) ? yes : no);
++
++ v = Ser0UDCSR;
++ SAY ("\nUDC Interrupt Request Register\n");
++ SAYV (v);
++ SAYC ("Reset pending", (v & UDCSR_RSTIR) ? yes : no);
++ SAYC ("Suspend pending", (v & UDCSR_SUSIR) ? yes : no);
++ SAYC ("Resume pending", (v & UDCSR_RESIR) ? yes : no);
++ SAYC ("ep0 pending", (v & UDCSR_EIR) ? yes : no);
++ SAYC ("receiver pending", (v & UDCSR_RIR) ? yes : no);
++ SAYC ("tramsitter pending", (v & UDCSR_TIR) ? yes : no);
++
++#ifdef CONFIG_SA1100_EXTENEX1
++ SAYC ("\nSoft connect", (PPSR & PPC_USB_SOFT_CON) ? "Visible" : "Hidden");
++#endif
++
++#if 1
++ SAY ("\nDMA Tx registers\n");
++ {
++ dma_regs_t *r=the_controller->ep[2].dmaregs;
++ SAY (" DDAR");
++ SAYV(r->DDAR);
++ SAY (" DCSR");
++ SAYV(r->RdDCSR);
++ SAY (" DBSA (address buf A) ");
++ SAYV(r->DBSA);
++ SAY (" DBTA (transfer count A) ");
++ SAYV(r->DBTA);
++ SAY (" DBSB (address buf B) ");
++ SAYV(r->DBSB);
++ SAY (" DBTB (transfer count B) ");
++ SAYV(r->DBTB);
++
++ }
++ SAY ("\nDMA Rx registers\n");
++ {
++ dma_regs_t *r=the_controller->ep[1].dmaregs;
++ SAY (" DDAR");
++ SAYV(r->DDAR);
++ SAY (" DCSR");
++ SAYV(r->RdDCSR);
++ SAY (" DBSA (address buf A) ");
++ SAYV(r->DBSA);
++ SAY (" DBTA (transfer count A) ");
++ SAYV(r->DBTA);
++ SAY (" DBSB (address buf B) ");
++ SAYV(r->DBSB);
++ SAY (" DBTB (transfer count B) ");
++ SAYV(r->DBTB);
++
++ }
++#endif
++#if 1
++ v = Ser0UDCCS0;
++ SAY ("\nUDC Endpoint Zero Status Register\n");
++ SAYV (v);
++ SAYC ("Out Packet Ready", (v & UDCCS0_OPR) ? yes : no);
++ SAYC ("In Packet Ready", (v & UDCCS0_IPR) ? yes : no);
++ SAYC ("Sent Stall", (v & UDCCS0_SST) ? yes : no);
++ SAYC ("Force Stall", (v & UDCCS0_FST) ? yes : no);
++ SAYC ("Data End", (v & UDCCS0_DE) ? yes : no);
++ SAYC ("Data Setup End", (v & UDCCS0_SE) ? yes : no);
++ SAYC ("Serviced (SO)", (v & UDCCS0_SO) ? yes : no);
++
++ v = Ser0UDCCS1;
++ SAY ("\nUDC Receiver Status Register\n");
++ SAYV (v);
++ SAYC ("Receive Packet Complete", (v & UDCCS1_RPC) ? yes : no);
++ SAYC ("Sent Stall", (v & UDCCS1_SST) ? yes : no);
++ SAYC ("Force Stall", (v & UDCCS1_FST) ? yes : no);
++ SAYC ("Receive Packet Error", (v & UDCCS1_RPE) ? yes : no);
++ SAYC ("Receive FIFO not empty", (v & UDCCS1_RNE) ? yes : no);
++
++ v = Ser0UDCCS2;
++ SAY ("\nUDC Transmitter Status Register\n");
++ SAYV (v);
++ SAYC ("FIFO has < 8 of 16 chars", (v & UDCCS2_TFS) ? yes : no);
++ SAYC ("Transmit Packet Complete", (v & UDCCS2_TPC) ? yes : no);
++ SAYC ("Transmit FIFO underrun", (v & UDCCS2_TUR) ? yes : no);
++ SAYC ("Transmit Packet Error", (v & UDCCS2_TPE) ? yes : no);
++ SAYC ("Sent Stall", (v & UDCCS2_SST) ? yes : no);
++ SAYC ("Force Stall", (v & UDCCS2_FST) ? yes : no);
++#endif
++
++ len = (p - page) - off;
++ if (len < 0)
++ len = 0;
++ *eof = (len <=count) ? 1 : 0;
++ *start = page + off;
++ return len;
++}
++
++static inline void register_proc_entry (void)
++{
++ create_proc_read_entry (driver_name, 0, NULL,
++ usbctl_read_proc, NULL);
++}
++
++static inline void unregister_proc_entry (void)
++{
++ remove_proc_entry (driver_name, NULL);
++}
++
++#else
++
++#define register_proc_entry() do {} while (0)
++#define unregister_proc_entry() do {} while (0)
++
++#endif /* CONFIG_PROC_FS */
++
++/*-------------------------------------------------------------------------*/
++
++MODULE_DESCRIPTION ("sa1100_udc");
++MODULE_AUTHOR ("Various");
++MODULE_LICENSE ("GPL");
++
++static struct sa1100_udc memory = {
++ .gadget = {
++ .ops = &sa1100_ops,
++ .ep0 = &memory.ep[0].ep,
++ .name = driver_name,
++/*
++ .dev = {
++ .bus_id = "gadget",
++ .release = nop_release,
++ },
++*/
++ },
++
++ /* control endpoint */
++ .ep[0] = {
++ .ep = {
++ .name = ep0name,
++ .ops = &sa1100_ep_ops,
++ .maxpacket = EP0_FIFO_SIZE,
++// .maxpacket = 8,
++ },
++ .dev = &memory,
++/*
++ .reg_udccs = &UDCCS0,
++ .reg_uddr = &UDDR0,
++*/
++ },
++
++ /* first group of endpoints */
++ .ep[1] = {
++ .ep = {
++ .name = "ep1out-bulk",
++ .ops = &sa1100_ep_ops,
++ .maxpacket = BULK_FIFO_SIZE,
++// .maxpacket = 64,
++ },
++ .dev = &memory,
++/*
++ .fifo_size = BULK_FIFO_SIZE,
++ .bEndpointAddress = USB_DIR_IN | 1,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .reg_udccs = &UDCCS1,
++ .reg_uddr = &UDDR1,
++ drcmr (25)
++*/
++ },
++ .ep[2] = {
++ .ep = {
++ .name = "ep2in-bulk",
++ .ops = &sa1100_ep_ops,
++ .maxpacket = BULK_FIFO_SIZE,
++// .maxpacket = 64,
++ },
++ .dev = &memory,
++/*
++ .fifo_size = BULK_FIFO_SIZE,
++ .bEndpointAddress = 2,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .reg_udccs = &UDCCS2,
++ .reg_ubcr = &UBCR2,
++ .reg_uddr = &UDDR2,
++ drcmr (26)
++*/
++ }
++};
++
++static int __init sa1100_udc_probe ( struct device *_dev)
++{
++ struct sa1100_udc *dev=&memory;
++ int retval = 0;
++
++ /* setup dev */
++ dev->dev = _dev;
++// dev->mach = _dev->platform_data;
++
++ device_initialize(&dev->gadget.dev);
++ dev->gadget.dev.parent = _dev;
++ dev->gadget.dev.dma_mask = _dev->dma_mask;
++
++ the_controller = dev;
++ dev_set_drvdata(_dev, dev);
++
++ /* controller stays disabled until gadget driver is bound */
++ udc_disable (dev);
++ udc_reinit(dev);
++
++// spin_lock_init(&the_udc.lock);
++ register_proc_entry ();
++
++ /* setup dma channels and IRQ */
++ retval = sa1100_request_dma(DMA_Ser0UDCRd, "USB receive",
++ NULL, NULL, &dev->ep[1].dmaregs);
++ if (retval) {
++ ERROR (dev, "couldn't get rx dma, err %d\n", retval);
++ goto err_rx_dma;
++ }
++ retval = sa1100_request_dma(DMA_Ser0UDCWr, "USB transmit",
++ NULL, NULL, &dev->ep[2].dmaregs);
++ if (retval) {
++ ERROR (dev, "couldn't get tx dma, err %d\n", retval);
++ goto err_tx_dma;
++ }
++ retval = request_irq (IRQ_Ser0UDC, udc_int_hndlr, SA_INTERRUPT,
++ driver_name, dev);
++ if (retval) {
++ ERROR (dev, "couldn't get irq, err %d\n", retval);
++ goto err_irq;
++ }
++
++ INFO (dev, "initialized, rx %p tx %p irq %d\n",
++ dev->ep[1].dmaregs, dev->ep[2].dmaregs, IRQ_Ser0UDC);
++ return 0;
++
++err_irq:
++ sa1100_free_dma (dev->ep[2].dmaregs);
++ usbd_info.dmaregs_rx = 0;
++err_tx_dma:
++ sa1100_free_dma (dev->ep[1].dmaregs);
++ usbd_info.dmaregs_tx = 0;
++err_rx_dma:
++ return retval;
++}
++
++static int __exit sa1100_udc_remove (struct device *_dev)
++{
++ struct sa1100_udc *dev = dev_get_drvdata(_dev);
++
++ udc_disable (dev);
++ unregister_proc_entry ();
++ usb_gadget_unregister_driver (dev->driver);
++ sa1100_free_dma (dev->ep[1].dmaregs);
++ sa1100_free_dma (dev->ep[2].dmaregs);
++ free_irq (IRQ_Ser0UDC, dev);
++ dev_set_drvdata(_dev,NULL);
++ the_controller = NULL;
++ return 0;
++}
++
++static struct device_driver udc_driver = {
++ .name = "sa11x0-udc",
++ .bus = &platform_bus_type,
++ .probe = sa1100_udc_probe,
++ .remove = __exit_p(sa1100_udc_remove),
++// .suspend = sa1100_udc_suspend,
++// .resume = sa1100_udc_resume,
++};
++
++static int __init udc_init(void)
++{
++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
++#ifdef NCB_DMA_FIX
++ send_buffer = (char*) kmalloc( SEND_BUFFER_SIZE, GFP_KERNEL | GFP_DMA );
++ receive_buffer = (char*) kmalloc( RECEIVE_BUFFER_SIZE, GFP_KERNEL | GFP_DMA );
++#endif
++ return driver_register(&udc_driver);
++}
++module_init(udc_init);
++
++static void __exit udc_exit(void)
++{
++#ifdef NCB_DMA_FIX
++ if (send_buffer) {
++ kfree(send_buffer);
++ send_buffer=NULL;
++ }
++ if (receive_buffer) {
++ kfree(receive_buffer);
++ receive_buffer=NULL;
++ }
++#endif
++ driver_unregister(&udc_driver);
++}
++module_exit(udc_exit);
++
+diff -uNr linux-2.6.21.vanilla/drivers/usb/gadget/sa1100_udc.h linux-2.6.21/drivers/usb/gadget/sa1100_udc.h
+--- linux-2.6.21.vanilla/drivers/usb/gadget/sa1100_udc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/usb/gadget/sa1100_udc.h 2007-06-05 11:58:29.000000000 +0200
+@@ -0,0 +1,107 @@
++/*
++ * internals of "new style" UDC controller
++ * <linux/usb_gadget.h> replaces ARM-specific "sa1100_usb.h".
++ */
++
++struct sa1100_ep {
++ struct usb_ep ep;
++ struct sa1100_udc *dev;
++ //unsigned long irqs;
++
++ const struct usb_endpoint_descriptor *desc;
++ struct list_head queue;
++ dma_regs_t *dmaregs;
++ unsigned stopped : 1;
++};
++
++struct sa1100_request {
++ struct usb_request req;
++ struct list_head queue;
++// NCB unsigned mapped : 1;
++};
++
++enum ep0_state {
++ EP0_IDLE,
++ EP0_IN_DATA_PHASE,
++ EP0_OUT_DATA_PHASE,
++ EP0_END_XFER,
++ EP0_STALL,
++};
++
++//#define EP0_FIFO_SIZE ((unsigned)16)
++#define EP0_FIFO_SIZE ((unsigned)8)
++#define BULK_FIFO_SIZE ((unsigned)64)
++//#define ISO_FIFO_SIZE ((unsigned)256)
++//#define INT_FIFO_SIZE ((unsigned)8)
++
++struct udc_stats {
++ struct ep0stats {
++ unsigned long ops;
++ unsigned long bytes;
++ } read, write;
++ unsigned long irqs;
++};
++
++struct sa1100_udc {
++ struct usb_gadget gadget;
++ struct usb_gadget_driver *driver;
++ struct device *dev;
++ enum ep0_state ep0state;
++ struct udc_stats stats;
++// NCB spinlock_t lock;
++// NCB dma_regs_t *dmaregs_tx, *dmaregs_rx;
++ unsigned got_irq : 1,
++ vbus : 1,
++ pullup : 1,
++ has_cfr : 1,
++ req_pending : 1,
++ req_std : 1,
++ req_config : 1;
++
++#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
++ struct timer_list timer;
++ u64 dma_mask;
++ unsigned char address;
++ struct sa1100_ep ep[3];
++ int ep0_req_len;
++};
++
++/*-------------------------------------------------------------------------*/
++
++#define xprintk(dev,level,fmt,args...) \
++ printk(level "%s: " fmt , driver_name , ## args)
++
++#ifdef DEBUG
++#undef DEBUG
++#define DEBUG(dev,fmt,args...) \
++ xprintk(dev , KERN_DEBUG , fmt , ## args)
++#else
++#define DEBUG(dev,fmt,args...) \
++ do { } while (0)
++#endif /* DEBUG */
++
++#ifdef VERBOSE
++#define VDEBUG DEBUG
++#else
++#define VDEBUG(dev,fmt,args...) \
++ do { } while (0)
++#endif /* VERBOSE */
++
++#define ERROR(dev,fmt,args...) \
++ xprintk(dev , KERN_ERR , fmt , ## args)
++#define WARN(dev,fmt,args...) \
++ xprintk(dev , KERN_WARNING , fmt , ## args)
++#define INFO(dev,fmt,args...) \
++ xprintk(dev , KERN_INFO , fmt , ## args)
++
++/*-------------------------------------------------------------------------*/
++
++#ifndef container_of
++#define container_of list_entry
++#endif
++
++#ifndef WARN_ON
++#define WARN_ON(x) do { } while (0)
++#endif
++
++
+diff -uNr linux-2.6.21.vanilla/include/linux/usb_ch9.h linux-2.6.21/include/linux/usb_ch9.h
+--- linux-2.6.21.vanilla/include/linux/usb_ch9.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/include/linux/usb_ch9.h 2007-06-05 11:58:29.000000000 +0200
+@@ -0,0 +1,555 @@
++/*
++ * This file holds USB constants and structures that are needed for USB
++ * device APIs. These are used by the USB device model, which is defined
++ * in chapter 9 of the USB 2.0 specification. Linux has several APIs in C
++ * that need these:
++ *
++ * - the master/host side Linux-USB kernel driver API;
++ * - the "usbfs" user space API; and
++ * - the Linux "gadget" slave/device/peripheral side driver API.
++ *
++ * USB 2.0 adds an additional "On The Go" (OTG) mode, which lets systems
++ * act either as a USB master/host or as a USB slave/device. That means
++ * the master and slave side APIs benefit from working well together.
++ *
++ * There's also "Wireless USB", using low power short range radios for
++ * peripheral interconnection but otherwise building on the USB framework.
++ */
++
++#ifndef __LINUX_USB_CH9_H
++#define __LINUX_USB_CH9_H
++
++#include <linux/types.h> /* __u8 etc */
++
++/*-------------------------------------------------------------------------*/
++
++/* CONTROL REQUEST SUPPORT */
++
++/*
++ * USB directions
++ *
++ * This bit flag is used in endpoint descriptors' bEndpointAddress field.
++ * It's also one of three fields in control requests bRequestType.
++ */
++#define USB_DIR_OUT 0 /* to device */
++#define USB_DIR_IN 0x80 /* to host */
++
++/*
++ * USB types, the second of three bRequestType fields
++ */
++#define USB_TYPE_MASK (0x03 << 5)
++#define USB_TYPE_STANDARD (0x00 << 5)
++#define USB_TYPE_CLASS (0x01 << 5)
++#define USB_TYPE_VENDOR (0x02 << 5)
++#define USB_TYPE_RESERVED (0x03 << 5)
++
++/*
++ * USB recipients, the third of three bRequestType fields
++ */
++#define USB_RECIP_MASK 0x1f
++#define USB_RECIP_DEVICE 0x00
++#define USB_RECIP_INTERFACE 0x01
++#define USB_RECIP_ENDPOINT 0x02
++#define USB_RECIP_OTHER 0x03
++
++/*
++ * Standard requests, for the bRequest field of a SETUP packet.
++ *
++ * These are qualified by the bRequestType field, so that for example
++ * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved
++ * by a GET_STATUS request.
++ */
++#define USB_REQ_GET_STATUS 0x00
++#define USB_REQ_CLEAR_FEATURE 0x01
++#define USB_REQ_SET_FEATURE 0x03
++#define USB_REQ_SET_ADDRESS 0x05
++#define USB_REQ_GET_DESCRIPTOR 0x06
++#define USB_REQ_SET_DESCRIPTOR 0x07
++#define USB_REQ_GET_CONFIGURATION 0x08
++#define USB_REQ_SET_CONFIGURATION 0x09
++#define USB_REQ_GET_INTERFACE 0x0A
++#define USB_REQ_SET_INTERFACE 0x0B
++#define USB_REQ_SYNCH_FRAME 0x0C
++
++#define USB_REQ_SET_ENCRYPTION 0x0D /* Wireless USB */
++#define USB_REQ_GET_ENCRYPTION 0x0E
++#define USB_REQ_SET_HANDSHAKE 0x0F
++#define USB_REQ_GET_HANDSHAKE 0x10
++#define USB_REQ_SET_CONNECTION 0x11
++#define USB_REQ_SET_SECURITY_DATA 0x12
++#define USB_REQ_GET_SECURITY_DATA 0x13
++#define USB_REQ_SET_WUSB_DATA 0x14
++#define USB_REQ_LOOPBACK_DATA_WRITE 0x15
++#define USB_REQ_LOOPBACK_DATA_READ 0x16
++#define USB_REQ_SET_INTERFACE_DS 0x17
++
++/*
++ * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
++ * are read as a bit array returned by USB_REQ_GET_STATUS. (So there
++ * are at most sixteen features of each type.)
++ */
++#define USB_DEVICE_SELF_POWERED 0 /* (read only) */
++#define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */
++#define USB_DEVICE_TEST_MODE 2 /* (wired high speed only) */
++#define USB_DEVICE_BATTERY 2 /* (wireless) */
++#define USB_DEVICE_B_HNP_ENABLE 3 /* (otg) dev may initiate HNP */
++#define USB_DEVICE_WUSB_DEVICE 3 /* (wireless)*/
++#define USB_DEVICE_A_HNP_SUPPORT 4 /* (otg) RH port supports HNP */
++#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* (otg) other RH port does */
++#define USB_DEVICE_DEBUG_MODE 6 /* (special devices only) */
++
++#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */
++
++
++/**
++ * struct usb_ctrlrequest - SETUP data for a USB device control request
++ * @bRequestType: matches the USB bmRequestType field
++ * @bRequest: matches the USB bRequest field
++ * @wValue: matches the USB wValue field (le16 byte order)
++ * @wIndex: matches the USB wIndex field (le16 byte order)
++ * @wLength: matches the USB wLength field (le16 byte order)
++ *
++ * This structure is used to send control requests to a USB device. It matches
++ * the different fields of the USB 2.0 Spec section 9.3, table 9-2. See the
++ * USB spec for a fuller description of the different fields, and what they are
++ * used for.
++ *
++ * Note that the driver for any interface can issue control requests.
++ * For most devices, interfaces don't coordinate with each other, so
++ * such requests may be made at any time.
++ */
++struct usb_ctrlrequest {
++ __u8 bRequestType;
++ __u8 bRequest;
++ __le16 wValue;
++ __le16 wIndex;
++ __le16 wLength;
++} __attribute__ ((packed));
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or
++ * (rarely) accepted by SET_DESCRIPTOR.
++ *
++ * Note that all multi-byte values here are encoded in little endian
++ * byte order "on the wire". But when exposed through Linux-USB APIs,
++ * they've been converted to cpu byte order.
++ */
++
++/*
++ * Descriptor types ... USB 2.0 spec table 9.5
++ */
++#define USB_DT_DEVICE 0x01
++#define USB_DT_CONFIG 0x02
++#define USB_DT_STRING 0x03
++#define USB_DT_INTERFACE 0x04
++#define USB_DT_ENDPOINT 0x05
++#define USB_DT_DEVICE_QUALIFIER 0x06
++#define USB_DT_OTHER_SPEED_CONFIG 0x07
++#define USB_DT_INTERFACE_POWER 0x08
++/* these are from a minor usb 2.0 revision (ECN) */
++#define USB_DT_OTG 0x09
++#define USB_DT_DEBUG 0x0a
++#define USB_DT_INTERFACE_ASSOCIATION 0x0b
++/* these are from the Wireless USB spec */
++#define USB_DT_SECURITY 0x0c
++#define USB_DT_KEY 0x0d
++#define USB_DT_ENCRYPTION_TYPE 0x0e
++#define USB_DT_BOS 0x0f
++#define USB_DT_DEVICE_CAPABILITY 0x10
++#define USB_DT_WIRELESS_ENDPOINT_COMP 0x11
++
++/* conventional codes for class-specific descriptors */
++#define USB_DT_CS_DEVICE 0x21
++#define USB_DT_CS_CONFIG 0x22
++#define USB_DT_CS_STRING 0x23
++#define USB_DT_CS_INTERFACE 0x24
++#define USB_DT_CS_ENDPOINT 0x25
++
++/* All standard descriptors have these 2 fields at the beginning */
++struct usb_descriptor_header {
++ __u8 bLength;
++ __u8 bDescriptorType;
++} __attribute__ ((packed));
++
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_DEVICE: Device descriptor */
++struct usb_device_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 bcdUSB;
++ __u8 bDeviceClass;
++ __u8 bDeviceSubClass;
++ __u8 bDeviceProtocol;
++ __u8 bMaxPacketSize0;
++ __le16 idVendor;
++ __le16 idProduct;
++ __le16 bcdDevice;
++ __u8 iManufacturer;
++ __u8 iProduct;
++ __u8 iSerialNumber;
++ __u8 bNumConfigurations;
++} __attribute__ ((packed));
++
++#define USB_DT_DEVICE_SIZE 18
++
++
++/*
++ * Device and/or Interface Class codes
++ * as found in bDeviceClass or bInterfaceClass
++ * and defined by www.usb.org documents
++ */
++#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
++#define USB_CLASS_AUDIO 1
++#define USB_CLASS_COMM 2
++#define USB_CLASS_HID 3
++#define USB_CLASS_PHYSICAL 5
++#define USB_CLASS_STILL_IMAGE 6
++#define USB_CLASS_PRINTER 7
++#define USB_CLASS_MASS_STORAGE 8
++#define USB_CLASS_HUB 9
++#define USB_CLASS_CDC_DATA 0x0a
++#define USB_CLASS_CSCID 0x0b /* chip+ smart card */
++#define USB_CLASS_CONTENT_SEC 0x0d /* content security */
++#define USB_CLASS_VIDEO 0x0e
++#define USB_CLASS_WIRELESS_CONTROLLER 0xe0
++#define USB_CLASS_APP_SPEC 0xfe
++#define USB_CLASS_VENDOR_SPEC 0xff
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_CONFIG: Configuration descriptor information.
++ *
++ * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the
++ * descriptor type is different. Highspeed-capable devices can look
++ * different depending on what speed they're currently running. Only
++ * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG
++ * descriptors.
++ */
++struct usb_config_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 wTotalLength;
++ __u8 bNumInterfaces;
++ __u8 bConfigurationValue;
++ __u8 iConfiguration;
++ __u8 bmAttributes;
++ __u8 bMaxPower;
++} __attribute__ ((packed));
++
++#define USB_DT_CONFIG_SIZE 9
++
++/* from config descriptor bmAttributes */
++#define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */
++#define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */
++#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */
++#define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_STRING: String descriptor */
++struct usb_string_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 wData[1]; /* UTF-16LE encoded */
++} __attribute__ ((packed));
++
++/* note that "string" zero is special, it holds language codes that
++ * the device supports, not Unicode characters.
++ */
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_INTERFACE: Interface descriptor */
++struct usb_interface_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bInterfaceNumber;
++ __u8 bAlternateSetting;
++ __u8 bNumEndpoints;
++ __u8 bInterfaceClass;
++ __u8 bInterfaceSubClass;
++ __u8 bInterfaceProtocol;
++ __u8 iInterface;
++} __attribute__ ((packed));
++
++#define USB_DT_INTERFACE_SIZE 9
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_ENDPOINT: Endpoint descriptor */
++struct usb_endpoint_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bEndpointAddress;
++ __u8 bmAttributes;
++ __le16 wMaxPacketSize;
++ __u8 bInterval;
++
++ /* NOTE: these two are _only_ in audio endpoints. */
++ /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
++ __u8 bRefresh;
++ __u8 bSynchAddress;
++} __attribute__ ((packed));
++
++#define USB_DT_ENDPOINT_SIZE 7
++#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
++
++
++/*
++ * Endpoints
++ */
++#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
++#define USB_ENDPOINT_DIR_MASK 0x80
++
++#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
++#define USB_ENDPOINT_XFER_CONTROL 0
++#define USB_ENDPOINT_XFER_ISOC 1
++#define USB_ENDPOINT_XFER_BULK 2
++#define USB_ENDPOINT_XFER_INT 3
++#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80
++
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
++struct usb_qualifier_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 bcdUSB;
++ __u8 bDeviceClass;
++ __u8 bDeviceSubClass;
++ __u8 bDeviceProtocol;
++ __u8 bMaxPacketSize0;
++ __u8 bNumConfigurations;
++ __u8 bRESERVED;
++} __attribute__ ((packed));
++
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_OTG (from OTG 1.0a supplement) */
++struct usb_otg_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bmAttributes; /* support for HNP, SRP, etc */
++} __attribute__ ((packed));
++
++/* from usb_otg_descriptor.bmAttributes */
++#define USB_OTG_SRP (1 << 0)
++#define USB_OTG_HNP (1 << 1) /* swap host/device roles */
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_DEBUG: for special highspeed devices, replacing serial console */
++struct usb_debug_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ /* bulk endpoints with 8 byte maxpacket */
++ __u8 bDebugInEndpoint;
++ __u8 bDebugOutEndpoint;
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */
++struct usb_interface_assoc_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bFirstInterface;
++ __u8 bInterfaceCount;
++ __u8 bFunctionClass;
++ __u8 bFunctionSubClass;
++ __u8 bFunctionProtocol;
++ __u8 iFunction;
++} __attribute__ ((packed));
++
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_SECURITY: group of wireless security descriptors, including
++ * encryption types available for setting up a CC/association.
++ */
++struct usb_security_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 wTotalLength;
++ __u8 bNumEncryptionTypes;
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_KEY: used with {GET,SET}_SECURITY_DATA; only public keys
++ * may be retrieved.
++ */
++struct usb_key_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 tTKID[3];
++ __u8 bReserved;
++ __u8 bKeyData[0];
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_ENCRYPTION_TYPE: bundled in DT_SECURITY groups */
++struct usb_encryption_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bEncryptionType;
++#define USB_ENC_TYPE_UNSECURE 0
++#define USB_ENC_TYPE_WIRED 1 /* non-wireless mode */
++#define USB_ENC_TYPE_CCM_1 2 /* aes128/cbc session */
++#define USB_ENC_TYPE_RSA_1 3 /* rsa3072/sha1 auth */
++ __u8 bEncryptionValue; /* use in SET_ENCRYPTION */
++ __u8 bAuthKeyIndex;
++};
++
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_BOS: group of wireless capabilities */
++struct usb_bos_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __le16 wTotalLength;
++ __u8 bNumDeviceCaps;
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_DEVICE_CAPABILITY: grouped with BOS */
++struct usb_dev_cap_header {
++ __u8 bLength;
++ __u8 bDescriptorType;
++ __u8 bDevCapabilityType;
++};
++
++#define USB_CAP_TYPE_WIRELESS_USB 1
++
++struct usb_wireless_cap_descriptor { /* Ultra Wide Band */
++ __u8 bLength;
++ __u8 bDescriptorType;
++ __u8 bDevCapabilityType;
++
++ __u8 bmAttributes;
++#define USB_WIRELESS_P2P_DRD (1 << 1)
++#define USB_WIRELESS_BEACON_MASK (3 << 2)
++#define USB_WIRELESS_BEACON_SELF (1 << 2)
++#define USB_WIRELESS_BEACON_DIRECTED (2 << 2)
++#define USB_WIRELESS_BEACON_NONE (3 << 2)
++ __le16 wPHYRates; /* bit rates, Mbps */
++#define USB_WIRELESS_PHY_53 (1 << 0) /* always set */
++#define USB_WIRELESS_PHY_80 (1 << 1)
++#define USB_WIRELESS_PHY_107 (1 << 2) /* always set */
++#define USB_WIRELESS_PHY_160 (1 << 3)
++#define USB_WIRELESS_PHY_200 (1 << 4) /* always set */
++#define USB_WIRELESS_PHY_320 (1 << 5)
++#define USB_WIRELESS_PHY_400 (1 << 6)
++#define USB_WIRELESS_PHY_480 (1 << 7)
++ __u8 bmTFITXPowerInfo; /* TFI power levels */
++ __u8 bmFFITXPowerInfo; /* FFI power levels */
++ __le16 bmBandGroup;
++ __u8 bReserved;
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_DT_WIRELESS_ENDPOINT_COMP: companion descriptor associated with
++ * each endpoint descriptor for a wireless device
++ */
++struct usb_wireless_ep_comp_descriptor {
++ __u8 bLength;
++ __u8 bDescriptorType;
++
++ __u8 bMaxBurst;
++ __u8 bMaxSequence;
++ __le16 wMaxStreamDelay;
++ __le16 wOverTheAirPacketSize;
++ __u8 bOverTheAirInterval;
++ __u8 bmCompAttributes;
++#define USB_ENDPOINT_SWITCH_MASK 0x03 /* in bmCompAttributes */
++#define USB_ENDPOINT_SWITCH_NO 0
++#define USB_ENDPOINT_SWITCH_SWITCH 1
++#define USB_ENDPOINT_SWITCH_SCALE 2
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless
++ * host and a device for connection set up, mutual authentication, and
++ * exchanging short lived session keys. The handshake depends on a CC.
++ */
++struct usb_handshake {
++ __u8 bMessageNumber;
++ __u8 bStatus;
++ __u8 tTKID[3];
++ __u8 bReserved;
++ __u8 CDID[16];
++ __u8 nonce[16];
++ __u8 MIC[8];
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC).
++ * A CC may also be set up using non-wireless secure channels (including
++ * wired USB!), and some devices may support CCs with multiple hosts.
++ */
++struct usb_connection_context {
++ __u8 CHID[16]; /* persistent host id */
++ __u8 CDID[16]; /* device id (unique w/in host context) */
++ __u8 CK[16]; /* connection key */
++};
++
++/*-------------------------------------------------------------------------*/
++
++/* USB 2.0 defines three speeds, here's how Linux identifies them */
++
++enum usb_device_speed {
++ USB_SPEED_UNKNOWN = 0, /* enumerating */
++ USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */
++ USB_SPEED_HIGH, /* usb 2.0 */
++ USB_SPEED_VARIABLE, /* wireless (usb 2.5) */
++};
++
++enum usb_device_state {
++ /* NOTATTACHED isn't in the USB spec, and this state acts
++ * the same as ATTACHED ... but it's clearer this way.
++ */
++ USB_STATE_NOTATTACHED = 0,
++
++ /* chapter 9 and authentication (wireless) device states */
++ USB_STATE_ATTACHED,
++ USB_STATE_POWERED, /* wired */
++ USB_STATE_UNAUTHENTICATED, /* auth */
++ USB_STATE_RECONNECTING, /* auth */
++ USB_STATE_DEFAULT, /* limited function */
++ USB_STATE_ADDRESS,
++ USB_STATE_CONFIGURED, /* most functions */
++
++ USB_STATE_SUSPENDED
++
++ /* NOTE: there are actually four different SUSPENDED
++ * states, returning to POWERED, DEFAULT, ADDRESS, or
++ * CONFIGURED respectively when SOF tokens flow again.
++ */
++};
++
++#endif /* __LINUX_USB_CH9_H */
diff --git a/packages/linux/linux_2.6.20.bb b/packages/linux/linux_2.6.20.bb
index 893856a16a..13b83925b5 100644
--- a/packages/linux/linux_2.6.20.bb
+++ b/packages/linux/linux_2.6.20.bb
@@ -1,24 +1,20 @@
-DESCRIPTION = "Linux Kernel"
-SECTION = "kernel"
-LICENSE = "GPL"
-PR = "r2"
+require linux.inc
+
+DEFAULT_PREFERENCE_at91sam9263ek = "20"
+
+PR = "r7"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://defconfig"
-SRC_URI_append_progear = " \
- file://progear_bl-r6.patch;patch=1 \
- "
-SRC_URI_append_simpad = "\
- file://linux-2.6.20.SIMpad.mq200.patch;patch=1 \
- file://linux-2.6.20.SIMpad.ucb1x00-switches.patch;patch=1 \
+SRC_URI_append_n2100 = "\
+ file://n2100-r8169-parity.patch;patch=1 \
+ file://rtc-rs5c372-n2100.patch;patch=1 \
"
-inherit kernel
+SRC_URI_append_at91sam9263ek = " \
+ http://maxim.org.za/AT91RM9200/2.6/${PV}-at91.patch.gz;patch=1 \
+ http://www.at91.com/repFichier/Project-217/linux-${PV}-at91-exp.diff.bz2;patch=1 \
+ "
-KERNEL_IMAGETYPE = "bzImage"
-KERNEL_IMAGETYPE_simpad = "zImage"
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/defconfig ${S}/.config
-}
diff --git a/packages/linux/linux_2.6.21+2.6.22-rc1.bb b/packages/linux/linux_2.6.21+2.6.22-rc1.bb
new file mode 100644
index 0000000000..faca5a88ec
--- /dev/null
+++ b/packages/linux/linux_2.6.21+2.6.22-rc1.bb
@@ -0,0 +1,30 @@
+require linux.inc
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_at91sam9263ek = "-1"
+
+KERNEL_VERSION = "2.6.22-rc1"
+KERNEL_RELEASE = "2.6.22-rc1"
+
+PR = "r1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc1.bz2;patch=1 \
+ file://defconfig \
+ "
+
+SRC_URI_append_simpad = "\
+ file://linux-2.6.21-SIMpad-cs3-simpad.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-mq200.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-serial-and-gpio_keys.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-ucb1x00-switches.patch;patch=1 \
+ file://linux-2.6.21-pcmcia-device-to-platform-driver.patch;patch=1 \
+ "
+SRC_URI_append_kb9202 = " http://maxim.org.za/AT91RM9200/2.6/2.6.22-rc1-at91.patch.gz;patch=1 \
+ file://at91-mmcfix.patch;patch=1"
+SRC_URI_append_at91sam9263ek = " http://maxim.org.za/AT91RM9200/2.6/2.6.22-rc1-at91.patch.gz;patch=1 \
+ file://at91-mmcfix.patch;patch=1"
+
+S = "${WORKDIR}/linux-2.6.21"
+
+
diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb
new file mode 100644
index 0000000000..37c8f9cce5
--- /dev/null
+++ b/packages/linux/linux_2.6.21.bb
@@ -0,0 +1,29 @@
+require linux.inc
+
+DEFAULT_PREFERENCE_at91sam9263ek = "-1"
+
+PR = "r5"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://defconfig \
+ "
+
+SRC_URI_append_simpad = "\
+ file://linux-2.6.21-SIMpad-cs3-simpad.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-mq200.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-serial-gpio_keys-and-cs3-ro.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-ucb1x00-switches.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-pcmcia.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-net-shared-irq.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-ucb1x00-ts-supend-and-accuracy.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-GPIO-MMC-mod.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-battery-old-way-but-also-with-sysfs.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-usb-gadget.patch;patch=1 \
+ "
+SRC_URI_append_kb9202 = " http://maxim.org.za/AT91RM9200/2.6/2.6.21-at91.patch.gz;patch=1 "
+SRC_URI_append_at91sam9263ek = " http://maxim.org.za/AT91RM9200/2.6/2.6.21-at91.patch.gz;patch=1 "
+SRC_URI_append_sarge-at91 = " http://maxim.org.za/AT91RM9200/2.6/2.6.21-at91.patch.gz;patch=1 \
+ file://2.6.21-sarge-kernel.patch;patch=1 \
+ file://2.6.21-sarge-phy.patch;patch=1 \
+ file://2.6.21-sarge-mmc.patch;patch=1"
+
diff --git a/packages/linux/linux_2.6.22.bb b/packages/linux/linux_2.6.22.bb
new file mode 100644
index 0000000000..b4e18dd5e1
--- /dev/null
+++ b/packages/linux/linux_2.6.22.bb
@@ -0,0 +1,14 @@
+require linux.inc
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_alix = "1"
+DEFAULT_PREFERENCE_avr32 = "1"
+
+PR = "r1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
+ file://defconfig \
+ "
+
+SRC_URI_append_avr32 = "http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.22.atmel.3.patch.bz2;patch=1"
diff --git a/packages/linux/mx21ads-kernel_2.6.19rc6.bb b/packages/linux/mx21ads-kernel_2.6.19rc6.bb
index f218904c43..579bedd8d6 100644
--- a/packages/linux/mx21ads-kernel_2.6.19rc6.bb
+++ b/packages/linux/mx21ads-kernel_2.6.19rc6.bb
@@ -16,7 +16,6 @@ COMPATIBLE_HOST = 'arm.*-linux'
COMPATIBLE_MACHINE = "mx21ads"
inherit kernel
-inherit package
ARCH = "arm"
KERNEL_IMAGETYPE = "zImage"
diff --git a/packages/linux/mx31ads-kernel_2.6.19rc6.bb b/packages/linux/mx31ads-kernel_2.6.19rc6.bb
index 2081693d68..b6ba6a65cd 100644
--- a/packages/linux/mx31ads-kernel_2.6.19rc6.bb
+++ b/packages/linux/mx31ads-kernel_2.6.19rc6.bb
@@ -16,7 +16,6 @@ COMPATIBLE_HOST = 'arm.*-linux'
COMPATIBLE_MACHINE = "mx31ads"
inherit kernel
-inherit package
ARCH = "arm"
KERNEL_IMAGETYPE = "zImage"
@@ -28,7 +27,7 @@ RPROVIDES_kernel-image += "hostap-modules"
do_configure_prepend() {
install -m 0644 ${WORKDIR}/imx31ads_defconfig ${S}/defconfig
- if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then
echo "CONFIG_AEABI=y" >> ${S}/.config
echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
else
@@ -55,3 +54,5 @@ do_deploy() {
do_deploy[dirs] = "${S}"
addtask deploy before do_build after do_compile
+
+KERNEL_RELEASE = "2.6.19-rc6"
diff --git a/packages/linux/poodle-kernel-2.4-embedix.bb b/packages/linux/poodle-kernel-2.4-embedix.bb
index 37845c4c96..2f26cbc863 100644
--- a/packages/linux/poodle-kernel-2.4-embedix.bb
+++ b/packages/linux/poodle-kernel-2.4-embedix.bb
@@ -1,4 +1,5 @@
MACHINE = "poodle"
+COMPATIBLE_HOST = "arm.*-linux"
require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/packages/linux/poodle-kernels-2.4-embedix.bb b/packages/linux/poodle-kernels-2.4-embedix.bb
index 7a714b7a12..21d334fec3 100644
--- a/packages/linux/poodle-kernels-2.4-embedix.bb
+++ b/packages/linux/poodle-kernels-2.4-embedix.bb
@@ -1,2 +1,3 @@
COMPATIBLE_MACHINE = "poodle"
+COMPATIBLE_HOST = "arm.*-linux"
DEPENDS = "poodle-kernel-2.4-embedix poodle255-kernel-2.4-embedix"
diff --git a/packages/linux/poodle255-kernel-2.4-embedix.bb b/packages/linux/poodle255-kernel-2.4-embedix.bb
index 2b58472185..f3044f4e67 100644
--- a/packages/linux/poodle255-kernel-2.4-embedix.bb
+++ b/packages/linux/poodle255-kernel-2.4-embedix.bb
@@ -1,4 +1,4 @@
MACHINE = "poodle255"
-
+COMPATIBLE_HOST = "arm.*-linux"
require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/packages/linux/shepherd-kernel-2.4-embedix.bb b/packages/linux/shepherd-kernel-2.4-embedix.bb
index 874c72e432..ac573fd14e 100644
--- a/packages/linux/shepherd-kernel-2.4-embedix.bb
+++ b/packages/linux/shepherd-kernel-2.4-embedix.bb
@@ -1,5 +1,6 @@
MACHINE = "shepherd"
COMPATIBLE_MACHINE = "shepherd"
+COMPATIBLE_HOST = "arm.*-linux"
require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/packages/linux/unslung-kernel/defconfig b/packages/linux/unslung-kernel/defconfig
index a5ad6094ae..03247f74b5 100644
--- a/packages/linux/unslung-kernel/defconfig
+++ b/packages/linux/unslung-kernel/defconfig
@@ -758,11 +758,11 @@ CONFIG_SCSI_MULTI_LUN=y
#
# Input core support
#
-# CONFIG_INPUT is not set
+CONFIG_INPUT=m
# CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_EVDEV=m
#
# Character devices
@@ -1126,13 +1126,13 @@ CONFIG_USB_PRINTER=m
#
# USB Human Interface Devices (HID)
#
-# CONFIG_USB_HID is not set
+CONFIG_USB_HID=m
#
# Input core support is needed for USB HID input layer or HIDBP support
#
-# CONFIG_USB_HIDINPUT is not set
-# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_HIDINPUT=y
+CONFIG_USB_HIDDEV=y
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
diff --git a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
index 531f389898..cb3f9be78b 100644
--- a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
+++ b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
@@ -1,7 +1,7 @@
SECTION = "kernel"
DESCRIPTION = "Vendor-compatible Linux kernel for the Linksys NSLU2 device"
LICENSE = "GPL"
-PR = "r17"
+PR = "r19"
COMPATIBLE_HOST = 'arm.*-linux'
COMPATIBLE_MACHINE = "nslu2"
@@ -39,7 +39,7 @@ inherit kernel
ARCH = "arm"
KERNEL_IMAGETYPE = "zImage"
-KERNEL_SUFFIX = "unslung"
+KERNEL_SUFFIX = "${MACHINE}"
CMDLINE_CONSOLE ?= "ttyS0,115200"
CMDLINE_ROOT = "root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc mem=32M@0x00000000"
CMDLINE = "${CMDLINE_CONSOLE} ${CMDLINE_ROOT}"
diff --git a/packages/linux/xanadux-ba-2.6_2.6.12.bb b/packages/linux/xanadux-ba-2.6_2.6.12.bb
index c7f73fb37b..ee58d36434 100644
--- a/packages/linux/xanadux-ba-2.6_2.6.12.bb
+++ b/packages/linux/xanadux-ba-2.6_2.6.12.bb
@@ -6,6 +6,7 @@ SRC_URI = "cvs://anonymous@xanadux.cvs.sourceforge.net/cvsroot/xanadux;method=ps
S = "${WORKDIR}/linux-2.6-xda"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "blueangel"
inherit kernel
diff --git a/packages/linux/xanadux-un-2.6_2.6.12.bb b/packages/linux/xanadux-un-2.6_2.6.12.bb
index a82e0abd3e..4a0f5265f1 100644
--- a/packages/linux/xanadux-un-2.6_2.6.12.bb
+++ b/packages/linux/xanadux-un-2.6_2.6.12.bb
@@ -8,6 +8,8 @@ SRC_URI = "cvs://anonymous@xanadux.cvs.sourceforge.net/cvsroot/xanadux;method=ps
S = "${WORKDIR}/linux-2.6-xda"
COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = "htc-universal"
+
inherit kernel
diff --git a/packages/lirc/lirc-config.inc b/packages/lirc/lirc-config.inc
index 9106e556cf..03bfc61e39 100644
--- a/packages/lirc/lirc-config.inc
+++ b/packages/lirc/lirc-config.inc
@@ -1,7 +1,8 @@
EXTRA_OECONF = "--with-kerneldir=${STAGING_KERNEL_DIR} --with-driver=${DRIVER}"
DRIVER ?= "serial"
-DRIVER_collie = "sa1100"
+# fails to build at the moment, re-enable later
+#DRIVER_collie = "sa1100"
DRIVER_h3600 = "sa1100"
DRIVER_simpad = "sa1100"
DRIVER_nslu2 = "nslu2"
diff --git a/packages/lirc/lirc-modules_0.8.1+cvs20070307.bb b/packages/lirc/lirc-modules_0.8.1+cvs20070307.bb
new file mode 100644
index 0000000000..3ecfb76b3c
--- /dev/null
+++ b/packages/lirc/lirc-modules_0.8.1+cvs20070307.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls. This package contains the lirc kernel modules."
+SECTION = "base"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.lirc.org"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel fakeroot-native setserial"
+RDEPENDS_nslu2 = "setserial"
+PR = "r0"
+
+# enable this bb file until the other packages compile again
+#DEFAULT_PREFERENCE = "-1"
+
+SRCDATE=${@bb.data.getVar('PV', d, 1)[9:]}
+
+SRC_URI = "cvs://anonymous@lirc.cvs.sourceforge.net/cvsroot/lirc;module=lirc;method=pserver;cvsdate=${SRCDATE}"
+S = "${WORKDIR}/lirc"
+
+inherit autotools module
+
+require lirc-config.inc
+
+MAKE_TARGETS = "KERNEL_PATH=${STAGING_KERNEL_DIR} MAKE='make -e' -C drivers"
+
+fakeroot do_install() {
+ oe_runmake -C drivers DESTDIR="${D}" moduledir="/lib/modules/${KERNEL_VERSION}/lirc" install
+ rm -rf ${D}/dev
+}
+
+# nslu2 uses udev, so /dev/lirc0 will be created automatically
+# and /dev/lirc will be created by /etc/udev/rules.d/lirc.rules
+# (that's the kernel-2.6+udev solution)
+do_install_append_nslu2() {
+ install -d ${D}${sysconfdir}/modutils/
+ echo 'lirc_serial' > ${D}${sysconfdir}/modutils/lirc_serial
+ install -d ${D}${sysconfdir}/modprobe.d/
+ echo 'install lirc_serial /bin/setserial /dev/ttyS1 uart none; /sbin/leds ready on; /sbin/modprobe --ignore-install lirc_serial' >${D}${sysconfdir}/modprobe.d/lirc_serial
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ echo 'KERNEL="lirc0", SYMLINK="lirc"' > ${D}${sysconfdir}/udev/rules.d/lirc.rules
+}
+
+# this is for distributions that don't use udev
+pkg_postinst_append() {
+if [ ! -c $D/dev/lirc -a ! -f /sbin/udevd ]; then mknod $D/dev/lirc c 61 0; fi
+}
+
+FILES_${PN} = "/lib/modules"
+FILES_${PN}_append_nslu2 = " ${sysconfdir}/modutils ${sysconfdir}/modprobe.d ${sysconfdir}/udev/rules.d"
diff --git a/packages/lirc/lirc_0.8.0.bb b/packages/lirc/lirc_0.8.0.bb
index 57be891c89..f24d63a21c 100644
--- a/packages/lirc/lirc_0.8.0.bb
+++ b/packages/lirc/lirc_0.8.0.bb
@@ -15,7 +15,7 @@ RDEPENDS_lirc-x = "lirc"
RDEPENDS_lirc-exec = "lirc"
RDEPENDS_lirc-nslu2example = "lirc lirc-exec"
RRECOMMENDS_lirc = "lirc-exec"
-PR = "r3"
+PR = "r4"
SRC_URI = "${SOURCEFORGE_MIRROR}/lirc/lirc-${PV}.tar.gz \
file://lircd.init file://lircmd.init file://lircexec.init"
@@ -59,6 +59,7 @@ do_install_append_nslu2() {
PACKAGES =+ "lirc-x lirc-exec lirc-remotes"
PACKAGES_prepend_nslu2 = "lirc-nslu2example "
+FILES_${PN}-dbg += "${bindir}/.debug ${sbindir}/.debug"
FILES_${PN} = "${bindir} ${sbindir} ${libdir} ${sysconfdir}/init.d"
FILES_lirc-x = "${bindir}/irxevent ${bindir}/xmode2"
FILES_lirc-exec = "${bindir}/irexec ${sysconfdir}/init.d/lircexec"
diff --git a/packages/lirc/lirc_0.8.1+cvs20070307.bb b/packages/lirc/lirc_0.8.1+cvs20070307.bb
new file mode 100644
index 0000000000..61f7019b2e
--- /dev/null
+++ b/packages/lirc/lirc_0.8.1+cvs20070307.bb
@@ -0,0 +1,73 @@
+DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls."
+DESCRIPTION_append_lirc = " This package contains the lirc daemon, libraries and tools."
+DESCRIPTION_append_lirc-x = " This package contains lirc tools for X11."
+DESCRIPTION_append_lirc-exec = " This package contains a daemon that runs programs on IR signals."
+DESCRIPTION_append_lirc-remotes = " This package contains some config files for remotes."
+DESCRIPTION_append_lirc-nslu2example = " This package contains a working config for RC5 remotes and a modified NSLU2."
+SECTION = "console/network"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.lirc.org"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel virtual/libx11 libxau libsm libice"
+DEPENDS_nslu2 = "virtual/kernel lirc-modules"
+RDEPENDS = "lirc-modules"
+RDEPENDS_lirc-x = "lirc"
+RDEPENDS_lirc-exec = "lirc"
+RDEPENDS_lirc-nslu2example = "lirc lirc-exec"
+RRECOMMENDS_lirc = "lirc-exec"
+PR = "r1"
+
+# enable cvs version since until compilation issues for other packages have been fixed (cf. bug 2284 et al).
+#DEFAULT_PREFERENCE = "-1"
+
+SRCDATE=${@bb.data.getVar('PV', d, 1)[9:]}
+
+SRC_URI = "cvs://anonymous@lirc.cvs.sourceforge.net/cvsroot/lirc;module=lirc;method=pserver;cvsdate=${SRCDATE} \
+ file://lircd.init file://lircmd.init file://lircexec.init"
+SRC_URI_append_nslu2 = " file://lircd.conf_nslu2 file://lircrc_nslu2"
+
+S = "${WORKDIR}/lirc"
+
+inherit autotools module-base update-rc.d
+
+INITSCRIPT_PACKAGES = "lirc lirc-exec"
+INITSCRIPT_NAME = "lircd"
+INITSCRIPT_PARAMS = "defaults 20"
+INITSCRIPT_NAME_lirc-exec = "lircexec"
+INITSCRIPT_PARAMS_lirc-exec = "defaults 21"
+
+require lirc-config.inc
+
+EXTRA_OEMAKE = 'SUBDIRS="daemons tools"'
+
+do_stage() {
+ oe_libinstall -so -C tools liblirc_client ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}/lirc/
+ install -m 0644 tools/lirc_client.h ${STAGING_INCDIR}/lirc/
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install ${WORKDIR}/lircd.init ${D}${sysconfdir}/init.d/lircd
+ install ${WORKDIR}/lircexec.init ${D}${sysconfdir}/init.d/lircexec
+ install -d ${D}${datadir}/lirc/
+ cp -pPR ${S}/remotes ${D}${datadir}/lirc/
+ rm -rf ${D}/dev
+}
+
+do_install_append_nslu2() {
+ install -d ${D}${sysconfdir}
+ install ${WORKDIR}/lircd.conf_nslu2 ${D}${sysconfdir}/lircd.conf
+ install ${WORKDIR}/lircrc_nslu2 ${D}${sysconfdir}/lircrc
+}
+
+PACKAGES =+ "lirc-x lirc-exec lirc-remotes"
+PACKAGES_prepend_nslu2 = "lirc-nslu2example "
+
+FILES_${PN}-dbg += "${bindir}/.debug ${sbindir}/.debug"
+FILES_${PN} = "${bindir} ${sbindir} ${libdir} ${sysconfdir}/init.d"
+FILES_lirc-x = "${bindir}/irxevent ${bindir}/xmode2"
+FILES_lirc-exec = "${bindir}/irexec ${sysconfdir}/init.d/lircexec"
+FILES_lirc-remotes = "${datadir}/lirc/remotes"
+FILES_lirc-nslu2example = "${sysconfdir}/lircd.conf ${sysconfdir}/lircrc"
+CONFFILES_lirc-nslu2example = "${FILES_lirc-nslu2example}"
diff --git a/packages/llvm/.mtn2git_empty b/packages/llvm/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/llvm/.mtn2git_empty
diff --git a/packages/llvm/llvm-native_1.9.bb b/packages/llvm/llvm-native_1.9.bb
new file mode 100644
index 0000000000..1493bab886
--- /dev/null
+++ b/packages/llvm/llvm-native_1.9.bb
@@ -0,0 +1,9 @@
+require llvm.inc
+
+inherit native
+
+S = "${WORKDIR}/llvm-${PV}"
+
+do_stage() {
+ install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/
+}
diff --git a/packages/llvm/llvm-native_2.0.bb b/packages/llvm/llvm-native_2.0.bb
new file mode 100644
index 0000000000..9507c989cd
--- /dev/null
+++ b/packages/llvm/llvm-native_2.0.bb
@@ -0,0 +1,12 @@
+require llvm.inc
+
+SRC_URI = "http://llvm.org/releases/2.0/llvm-${PV}.tar.gz"
+
+
+inherit native
+
+S = "${WORKDIR}/llvm-${PV}"
+
+do_stage() {
+ install -m 755 ${S}/Release/bin/* ${STAGING_BINDIR_NATIVE}/
+}
diff --git a/packages/llvm/llvm-native_cvs.bb b/packages/llvm/llvm-native_cvs.bb
new file mode 100644
index 0000000000..b3dfdebb2c
--- /dev/null
+++ b/packages/llvm/llvm-native_cvs.bb
@@ -0,0 +1,13 @@
+require llvm.inc
+
+inherit native
+
+PV = "1.9+cvs${SRCDATE}"
+
+SRC_URI = "cvs://anon@llvm.org/var/cvs/llvm;module=llvm"
+
+S = "${WORKDIR}/llvm"
+
+do_stage() {
+ install -m 755 ${S}/Debug/bin/* ${STAGING_BINDIR_NATIVE}/
+}
diff --git a/packages/llvm/llvm.inc b/packages/llvm/llvm.inc
new file mode 100644
index 0000000000..d9664aeebd
--- /dev/null
+++ b/packages/llvm/llvm.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "The Low Level Virtual Machine"
+HOMEPAGE = "http://llvm.org"
+LICENSE = "various"
+
+SRC_URI = "http://llvm.org/releases/1.9/llvm-${PV}.tar.gz"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/lm_sensors/files/iconv.patch b/packages/lm_sensors/files/iconv.patch
new file mode 100644
index 0000000000..4aecafafb1
--- /dev/null
+++ b/packages/lm_sensors/files/iconv.patch
@@ -0,0 +1,13 @@
+Index: lm_sensors-2.10.1/prog/sensors/Module.mk
+===================================================================
+--- lm_sensors-2.10.1.orig/prog/sensors/Module.mk 2006-09-24 22:30:10.000000000 +0000
++++ lm_sensors-2.10.1/prog/sensors/Module.mk 2007-04-14 22:11:47.000000000 +0000
+@@ -36,7 +36,7 @@
+ REMOVESENSORSBIN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(BINDIR)/%,$(PROGSENSORSTARGETS))
+ REMOVESENSORSMAN := $(patsubst $(MODULE_DIR)/%,$(DESTDIR)$(PROGSENSORSMAN1DIR)/%,$(PROGSENSORSMAN1FILES))
+
+-LIBICONV := $(shell if /sbin/ldconfig -p | grep -q libiconv\\.so ; then echo \-liconv; else echo; fi)
++LIBICONV := -liconv
+
+ $(PROGSENSORSTARGETS): $(PROGSENSORSSOURCES:.c=.ro) lib/$(LIBSHBASENAME)
+ $(CC) $(EXLDFLAGS) -o $@ $(PROGSENSORSSOURCES:.c=.ro) $(LIBICONV) -Llib -lsensors
diff --git a/packages/lm_sensors/lmsensors-apps_2.10.1.bb b/packages/lm_sensors/lmsensors-apps_2.10.1.bb
index 8013f67f6a..bbe484f74e 100644
--- a/packages/lm_sensors/lmsensors-apps_2.10.1.bb
+++ b/packages/lm_sensors/lmsensors-apps_2.10.1.bb
@@ -4,10 +4,12 @@
DESCRIPTION = "Hardware health monitoring applications"
HOMEPAGE = "http://secure.netroedge.com/~lm78/"
-DEPENDS = "libsysfs"
+DEPENDS = "libsysfs virtual/libiconv"
LICENSE = "GPL"
+PR = "r1"
SRC_URI = "http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-${PV}.tar.gz \
+ file://iconv.patch;patch=1 \
file://add-sysfs-ldflags.patch;patch=1"
S = "${WORKDIR}/lm_sensors-${PV}"
diff --git a/packages/logrotate/logrotate_3.7.1.bb b/packages/logrotate/logrotate_3.7.1.bb
index 2697607cfd..b903e60201 100644
--- a/packages/logrotate/logrotate_3.7.1.bb
+++ b/packages/logrotate/logrotate_3.7.1.bb
@@ -1,12 +1,11 @@
DESCRIPTION = "Rotates, compresses, removes and mails system log files"
HOMEPAGE = "http://packages.debian.org/unstable/admin/logrotate"
RCONFLICTS = "logrotate-script"
-RRECOMMENDS = "gzip"
DEPENDS = "popt"
RDEPENDS = "cron"
SECTION = "admin"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://ftp.debian.org/debian/pool/main/l/logrotate/logrotate_${PV}.orig.tar.gz \
file://logrotate-3.7.1.patch;patch=1 \
@@ -22,18 +21,20 @@ do_compile() {
do_install () {
# Install the binary and conf file
- install -D -s -m 0755 ${WORKDIR}/logrotate-${PV}/logrotate ${D}${base_sbindir}/logrotate
+ install -D -s -m 0755 ${S}/logrotate ${D}${base_sbindir}/logrotate
install -D -m 0644 ${WORKDIR}/logrotate.conf ${D}${sysconfdir}/logrotate.conf
install -m 0755 -d ${D}${sysconfdir}/logrotate.d
}
pkg_postinst () {
# Add the logrotate line to /etc/crontab
- grep -q "/sbin/logrotate" ${sysconfdir}/crontab || echo "*/5 * * * * /sbin/logrotate /etc/logrotate.conf" >> ${sysconfdir}/crontab
+ grep -q "${base_sbindir}/logrotate" ${sysconfdir}/crontab || echo "*/5 * * * * ${base_sbindir}/logrotate ${sysconfdir}/logrotate.conf" >> ${sysconfdir}/crontab
}
pkg_postrm() {
# Remove the logrotate line from /etc/crontab
- grep -v /sbin/logrotate ${sysconfdir}/crontab > ${sysconfdir}/crontab.no-${PF}
+ grep -v ${base_sbindir}/logrotate ${sysconfdir}/crontab > ${sysconfdir}/crontab.no-${PF}
mv ${sysconfdir}/crontab.no-${PF} ${sysconfdir}/crontab
}
+
+CONFFILES += "${sysconfdir}/logrotate.conf"
diff --git a/packages/loudmouth/loudmouth_1.1.1.bb b/packages/loudmouth/loudmouth_1.1.1.bb
new file mode 100644
index 0000000000..7df03251ba
--- /dev/null
+++ b/packages/loudmouth/loudmouth_1.1.1.bb
@@ -0,0 +1,11 @@
+LICENSE = "LGPL"
+DEPENDS = "glib-2.0 gnutls check"
+DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
+
+SRC_URI = "http://ftp.imendio.com/pub/imendio/${PN}/src/${PN}-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/loudmouth/loudmouth_1.2.2.bb b/packages/loudmouth/loudmouth_1.2.2.bb
new file mode 100644
index 0000000000..d8f519b611
--- /dev/null
+++ b/packages/loudmouth/loudmouth_1.2.2.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
+HOMEPAGE = "http://www.loudmouth-project.org/"
+LICENSE = "LGPL"
+DEPENDS = "glib-2.0 gnutls check"
+
+SRC_URI = "http://ftp.imendio.com/pub/imendio/${PN}/src/${PN}-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/lrzsz/lrzsz_0.12.20.bb b/packages/lrzsz/lrzsz_0.12.20.bb
index 8110661ac1..0a194f9a05 100644
--- a/packages/lrzsz/lrzsz_0.12.20.bb
+++ b/packages/lrzsz/lrzsz_0.12.20.bb
@@ -3,7 +3,7 @@ SECTION = "console/network"
PRIORITY = "standard"
DESCRIPTION = "Tools for zmodem/xmodem/ymodem file transfer"
DEPENDS = ""
-PR = "r2"
+PR = "r3"
SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
file://autotools.patch;patch=1 \
@@ -15,10 +15,16 @@ inherit autotools gettext
do_install() {
install -d ${D}${bindir}/
install -m 0755 src/lrz src/lsz ${D}${bindir}/
- ln -sf ./lrz ${D}${bindir}/rz
- ln -sf ./lrz ${D}${bindir}/rx
- ln -sf ./lrz ${D}${bindir}/rb
- ln -sf ./lsz ${D}${bindir}/sz
- ln -sf ./lsz ${D}${bindir}/sx
- ln -sf ./lsz ${D}${bindir}/sb
}
+
+pkg_postinst() {
+ for util in rz rx rb sz sx sb; do
+ update-alternatives --install ${bindir}/$util $util lrz 100
+ done
+}
+
+pkg_postrm() {
+ for util in rz rx rb sz sx sb; do
+ update-alternatives --remove $util ${bindir}/lrz
+ done
+} \ No newline at end of file
diff --git a/packages/lsof/lsof_4.77.bb b/packages/lsof/lsof_4.77.bb
deleted file mode 100644
index 054875b861..0000000000
--- a/packages/lsof/lsof_4.77.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
-Its name stands for LiSt Open Files, and it does just that."
-SECTION = "devel"
-LICENSE = "BSD"
-PR = "r1"
-
-SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
-LOCALSRC = "file://${WORKDIR}/lsof_${PV}/lsof_${PV}_src.tar"
-S = "${WORKDIR}/lsof_${PV}_src"
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- src_uri = bb.data.getVar('SRC_URI', d)
- bb.data.setVar('SRC_URI', '${LOCALSRC}', d)
- bb.build.exec_func('base_do_unpack', d)
- bb.data.setVar('SRC_URI', src_uri, d)
-}
-
-LSOF_OS = "${TARGET_OS}"
-LSOF_OS_linux-uclibc = "linux"
-LSOF_OS_linux-gnueabi = "linux"
-
-do_configure () {
- yes | ./Configure ${LSOF_OS}
-}
-
-export I = "${STAGING_INCDIR}"
-export L = "${STAGING_INCDIR}"
-export EXTRA_OEMAKE = ""
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'CFGL=${LDFLAGS} -L./lib -llsof' 'DEBUG=' 'INCL=${CFLAGS}'
-}
-
-do_install () {
- install -d ${D}${sbindir} ${D}${mandir}/man8
- install -m 4755 lsof ${D}${sbindir}/lsof
- install -m 0644 lsof.8 ${D}${mandir}/man8/lsof.8
-}
diff --git a/packages/lsof/lsof_4.78.bb b/packages/lsof/lsof_4.78.bb
new file mode 100644
index 0000000000..51f0b8b2c4
--- /dev/null
+++ b/packages/lsof/lsof_4.78.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
+Its name stands for LiSt Open Files, and it does just that."
+SECTION = "devel"
+LICENSE = "BSD"
+
+SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
+LOCALSRC = "file://${WORKDIR}/lsof_${PV}/lsof_${PV}_src.tar"
+S = "${WORKDIR}/lsof_${PV}_src"
+
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+ src_uri = bb.data.getVar('SRC_URI', d)
+ bb.data.setVar('SRC_URI', '${LOCALSRC}', d)
+ bb.build.exec_func('base_do_unpack', d)
+ bb.data.setVar('SRC_URI', src_uri, d)
+}
+
+export LSOF_OS = "${TARGET_OS}"
+LSOF_OS_linux-uclibc = "linux"
+LSOF_OS_linux-gnueabi = "linux"
+export LSOF_INCLUDE = "${STAGING_INCDIR}"
+
+do_configure () {
+ yes | ./Configure ${LSOF_OS}
+}
+
+export I = "${STAGING_INCDIR}"
+export L = "${STAGING_INCDIR}"
+export EXTRA_OEMAKE = ""
+
+do_compile () {
+ oe_runmake 'CC=${CC}' 'CFGL=${LDFLAGS} -L./lib -llsof' 'DEBUG=' 'INCL=${CFLAGS}'
+}
+
+do_install () {
+ install -d ${D}${sbindir} ${D}${mandir}/man8
+ install -m 4755 lsof ${D}${sbindir}/lsof
+ install -m 0644 lsof.8 ${D}${mandir}/man8/lsof.8
+}
diff --git a/packages/ltp/.mtn2git_empty b/packages/ltp/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ltp/.mtn2git_empty
diff --git a/packages/ltp/ltp-20070228/.mtn2git_empty b/packages/ltp/ltp-20070228/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ltp/ltp-20070228/.mtn2git_empty
diff --git a/packages/ltp/ltp-20070228/cross-compile.patch b/packages/ltp/ltp-20070228/cross-compile.patch
new file mode 100644
index 0000000000..ae956fd8bf
--- /dev/null
+++ b/packages/ltp/ltp-20070228/cross-compile.patch
@@ -0,0 +1,51 @@
+diff -urN ltp-full-20060615.orig/Makefile ltp-full-20060615/Makefile
+--- ltp-full-20060615.orig/Makefile 2006-02-24 10:16:55.000000000 +0800
++++ ltp-full-20060615/Makefile 2006-07-07 17:10:22.000000000 +0800
+@@ -30,11 +30,12 @@
+ endif
+ ifdef CROSS_COMPILER
+ CC=$(CROSS_COMPILER)gcc
++CPP=$(CROSS_COMPILER)g++
+ AR=$(CROSS_COMPILER)ar
+ endif
+
+ export CFLAGS += -Wall $(CROSS_CFLAGS)
+-export CC AR LDFLAGS
++export CC AR LDFLAGS CPP
+
+ -include config.mk
+
+diff -urN ltp-full-20060615.orig/testcases/ballista/ballista/Makefile ltp-full-20060615/testcases/ballista/ballista/Makefile
+--- ltp-full-20060615.orig/testcases/ballista/ballista/Makefile 2006-02-23 08:33:27.000000000 +0800
++++ ltp-full-20060615/testcases/ballista/ballista/Makefile 2006-07-07 17:11:29.000000000 +0800
+@@ -24,7 +24,7 @@
+ ########################
+
+ # compiler info for the host
+-CC = g++ -Wno-deprecated
++CC = $(CPP) -Wno-deprecated
+ CFLAGS = -w -O ${TARGET_DEF}
+ CLIBS = -lpthread -ldl -lnsl -rdynamic
+ TEST_MAN_FILE = selfHost
+diff -urN ltp-full-20060615.orig/testcases/network/nfs/cthon04/tests.init ltp-full-20060615/testcases/network/nfs/cthon04/tests.init
+--- ltp-full-20060615.orig/testcases/network/nfs/cthon04/tests.init 2005-09-01 04:27:17.000000000 +0800
++++ ltp-full-20060615/testcases/network/nfs/cthon04/tests.init 2006-07-07 17:12:28.000000000 +0800
+@@ -73,7 +73,7 @@
+ # Tru64 UNIX
+ # SVR4
+ # Linux
+-PATH=/bin:/usr/bin:/usr/ucb:/usr/ccs/bin:/sbin:/usr/sbin:.
++#PATH=/bin:/usr/bin:/usr/ucb:/usr/ccs/bin:/sbin:/usr/sbin:.
+
+ # Use this path for:
+ # DG/UX
+@@ -104,7 +104,9 @@
+ # Do not remove the following three lines. They may be overridden by
+ # other configuration parameters lower in this file, but these three
+ # variables must be defined.
++ifndef CC
+ CC=cc
++endif
+ CFLAGS=
+ LIBS=
+ LOCKTESTS=tlock
diff --git a/packages/ltp/ltp-20070228/ltp-run b/packages/ltp/ltp-20070228/ltp-run
new file mode 100644
index 0000000000..5d97f00532
--- /dev/null
+++ b/packages/ltp/ltp-20070228/ltp-run
@@ -0,0 +1,4 @@
+#!/bin/sh
+/usr/libexec/ltp/runltp -t 180s > /home/root/testlog.txt
+echo "Benchmark run finished...."
+touch /home/root/testfinished.flag
diff --git a/packages/ltp/ltp-20070228/runltp-path.patch b/packages/ltp/ltp-20070228/runltp-path.patch
new file mode 100644
index 0000000000..dfbbf353ec
--- /dev/null
+++ b/packages/ltp/ltp-20070228/runltp-path.patch
@@ -0,0 +1,13 @@
+Index: runltp
+===================================================================
+--- ltp-full-20060412.orig/runltp 2005-03-12 03:26:14.000000000 +0800
++++ ltp-full-20060412/runltp 2006-04-26 16:42:13.000000000 +0800
+@@ -43,7 +43,7 @@
+ echo "FATAL: unable to change directory to $(dirname $0)"
+ exit 1
+ }
+- export LTPROOT=${PWD}
++ export LTPROOT=/usr/libexec/ltp
+ export TMPBASE="/tmp"
+ export TMP="${TMPBASE}/ltp-$$"
+ export PATH="${PATH}:${LTPROOT}/testcases/bin"
diff --git a/packages/ltp/ltp_20070228.bb b/packages/ltp/ltp_20070228.bb
new file mode 100644
index 0000000000..400d642641
--- /dev/null
+++ b/packages/ltp/ltp_20070228.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Linux Test Project"
+HOMEPAGE = "http://ltp.sourceforge.net"
+LICENSE = "GPL"
+SECTION = "console/utils"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ltp/ltp-full-${PV}.tgz \
+ file://cross-compile.patch;patch=1 \
+ file://runltp-path.patch;patch=1 \
+ file://ltp-run"
+
+S = "${WORKDIR}/ltp-full-${PV}"
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${HOST_PREFIX}"
+
+do_compile(){
+ oe_runmake CROSS_COMPILE=${HOST_PREFIX}
+}
+
+do_install(){
+ export CREATE=0
+ export LTPROOT=${D}/usr/libexec/ltp/testcases
+
+ oe_runmake install
+
+ install -d ${D}/usr/libexec/ltp/testcases
+ install -d ${D}/usr/libexec/ltp/pan
+
+ #install testcases
+ #install -m 0755 ${WORKDIR}/testcases ${D}/usr/libexec/ltp/testcases
+ #install -m 0755 ${WORKDIR}/testcases ${D}/usr/libexec/ltp/
+
+ # treecopy testcases pan/pan runtest ver_linux IDcheck.sh \
+ # ${D}/usr/libexec/ltp
+ cp testcases ${D}/usr/libexec/ltp/ -rfp
+ rm ${D}/usr/libexec/ltp/ballista -rf
+ cp pan/pan ${D}/usr/libexec/ltp/pan -p
+ cp runtest ${D}/usr/libexec/ltp/ -rfp
+ cp ver_linux ${D}/usr/libexec/ltp/ -p
+ cp runltp ${D}/usr/libexec/ltp/ -p
+ cp IDcheck.sh ${D}/usr/libexec/ltp/ -p
+}
+
diff --git a/packages/ltrace/files/.mtn2git_empty b/packages/ltrace/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ltrace/files/.mtn2git_empty
diff --git a/packages/ltrace/files/no-usr-include.patch b/packages/ltrace/files/no-usr-include.patch
new file mode 100644
index 0000000000..adadfa8032
--- /dev/null
+++ b/packages/ltrace/files/no-usr-include.patch
@@ -0,0 +1,16 @@
+--- ltrace-0.4.orig/configure.ac
++++ ltrace-0.4/configure.ac
+@@ -41,13 +41,6 @@
+ dnl AC_CHECK_FUNCS(gettimeofday strdup strerror strspn)
+ AC_CHECK_FUNCS(getopt getopt_long)
+
+-for path in /usr/include/elfutils /usr/local/include/elfutils \
+- /usr/include/libelf /usr/local/include/libelf; do
+- if test -f ${path}/gelf.h; then
+- CPPFLAGS="$CPPFLAGS -I ${path}"
+- fi
+-done
+-
+ AC_CHECK_HEADER(gelf.h,,AC_MSG_ERROR([***** gelf.h not found *****]))
+
+ AC_CHECK_LIB(elf,gelf_getdyn)
diff --git a/packages/ltrace/ltrace_0.4.bb b/packages/ltrace/ltrace_0.4.bb
index 4ef906f2f9..bae6d49b65 100644
--- a/packages/ltrace/ltrace_0.4.bb
+++ b/packages/ltrace/ltrace_0.4.bb
@@ -3,28 +3,61 @@ HOMEPAGE = "http://packages.debian.org/unstable/utils/ltrace.html"
SECTION = "devel"
DEPENDS = "libelf"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
-SRC_URI = "ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.4.orig.tar.gz \
- ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.4-1.diff.gz;patch=1"
+SRC_URI = "${DEBIAN_MIRROR}/main/l/ltrace/ltrace_0.4.orig.tar.gz \
+ ${DEBIAN_MIRROR}/main/l/ltrace/ltrace_0.4-1.diff.gz;patch=1 \
+ file://no-usr-include.patch;patch=1"
inherit autotools
PARALLEL_MAKE = ""
-EXTRA_OEMAKE = "ARCH=${LTRACE_ARCH} \
- INSTALL_FILE='$(INSTALL) -p -m 0644' \
+EXTRA_OEMAKE = "INSTALL_FILE='$(INSTALL) -p -m 0644' \
INSTALL_PROGRAM='$(INSTALL) -p -m 0755' \
INSTALL_SCRIPT='$(INSTALL) -p -m 0755' \
INSTALL_DIR='$(INSTALL) -p -d -m 0755' "
export TARGET_CFLAGS = "${SELECTED_OPTIMIZATION} -isystem ${STAGING_DIR}/${TARGET_SYS}/include"
-LTRACE_ARCH = "${TARGET_ARCH}"
-LTRACE_ARCH_x86 = "i386"
-
do_configure_prepend() {
ln -sf ./linux-gnu sysdeps/linux-gnueabi
}
do_compile() {
- oe_runmake LDFLAGS=${TARGET_LDFLAGS} LIBS="-lsupc++ -liberty -Wl,-Bstatic -lelf -Wl,-Bdynamic" ${EXTRA_OEMAKE}
+ case ${TARGET_ARCH} in
+ alpha*) LTRACE_ARCH=alpha ;;
+ arm*) LTRACE_ARCH=arm ;;
+ cris*) LTRACE_ARCH=cris ;;
+ hppa*) LTRACE_ARCH=parisc ;;
+ i*86*) LTRACE_ARCH=i386 ;;
+ ia64*) LTRACE_ARCH=ia64 ;;
+ mips*) LTRACE_ARCH=mips ;;
+ m68k*) LTRACE_ARCH=m68k ;;
+ powerpc*) LTRACE_ARCH=ppc ;;
+ s390*) LTRACE_ARCH=s390 ;;
+ sh*) LTRACE_ARCH=sh ;;
+ sparc64*) LTRACE_ARCH=sparc64 ;;
+ sparc*) LTRACE_ARCH=sparc ;;
+ x86_64*) LTRACE_ARCH=x86_64 ;;
+ esac
+ oe_runmake LDFLAGS=${TARGET_LDFLAGS} LIBS="-lsupc++ -liberty -Wl,-Bstatic -lelf -Wl,-Bdynamic" ${EXTRA_OEMAKE} ARCH=${LTRACE_ARCH}
+}
+
+do_install() {
+ case ${TARGET_ARCH} in
+ alpha*) LTRACE_ARCH=alpha ;;
+ arm*) LTRACE_ARCH=arm ;;
+ cris*) LTRACE_ARCH=cris ;;
+ hppa*) LTRACE_ARCH=parisc ;;
+ i*86*) LTRACE_ARCH=i386 ;;
+ ia64*) LTRACE_ARCH=ia64 ;;
+ mips*) LTRACE_ARCH=mips ;;
+ m68k*) LTRACE_ARCH=m68k ;;
+ powerpc*) LTRACE_ARCH=ppc ;;
+ s390*) LTRACE_ARCH=s390 ;;
+ sh*) LTRACE_ARCH=sh ;;
+ sparc64*) LTRACE_ARCH=sparc64 ;;
+ sparc*) LTRACE_ARCH=sparc ;;
+ x86_64*) LTRACE_ARCH=x86_64 ;;
+ esac
+ oe_runmake install ${EXTRA_OEMAKE} ARCH=${LTRACE_ARCH} INSTALL=${STAGING_BINDIR_NATIVE}/install DESTDIR=${D}
}
diff --git a/packages/lua/lua.inc b/packages/lua/lua.inc
index a03bf8ff22..b713825f00 100644
--- a/packages/lua/lua.inc
+++ b/packages/lua/lua.inc
@@ -3,10 +3,16 @@ for extending applications."
LICENSE = "MIT"
HOMEPAGE = "http://www.lua.org/"
-PACKAGES = "${PN} liblua ${PN}-doc liblua-dev \
- liblualib liblualib-dev"
-FILES_${PN} = "${bindir}/lua ${bindir}/luac"
-FILES_${PN}-doc = "${mandir}/man1/lua.1 ${mandir}/man1/luac.1"
+PACKAGES = "liblua-dbg liblualib-dbg ${PN}-dbg \
+liblua-dev liblua liblualib-dev liblualib ${PN}-doc ${PN}"
+
+FILES_${PN}-dbg = "${bindir}/.debug"
+FILES_liblua-dbg = "${libdir}/.debug/liblua.so.*"
+FILES_liblualib-dbg = "${libdir}/.debug/liblualib.so.*"
+
+FILES_${PN} = "${bindir}"
+FILES_${PN}-doc = "${mandir}"
+
FILES_liblua = "${libdir}/liblua.so.*"
FILES_liblua-dev = "${libdir}/liblua.so ${libdir}/liblua.a \
${includedir}/lua.h"
diff --git a/packages/lua/lua_5.0.2.bb b/packages/lua/lua_5.0.2.bb
index 6dbb656166..bb989c04d9 100644
--- a/packages/lua/lua_5.0.2.bb
+++ b/packages/lua/lua_5.0.2.bb
@@ -1,7 +1,7 @@
require lua.inc
DEPENDS += "readline"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://www.lua.org/ftp/lua-${PV}.tar.gz \
file://debian.patch;patch=1 \
file://make.patch;patch=1 \
diff --git a/packages/lvm2/lvm2_2.01.15.bb b/packages/lvm2/lvm2_2.01.15.bb
index f4e84fb064..ee726f7e6b 100644
--- a/packages/lvm2/lvm2_2.01.15.bb
+++ b/packages/lvm2/lvm2_2.01.15.bb
@@ -1,7 +1,7 @@
SECTION = "utils"
DESCRIPTION = "LVM2 is a set of utilities to manage logical volumes in Linux."
LICENSE = "GPL"
-PR = ""
+PR = "r0"
DEPENDS = "device-mapper"
S = "${WORKDIR}/LVM2.${PV}"
diff --git a/packages/lyx/lyx_1.4.4+1.5.0rc1.bb b/packages/lyx/lyx_1.4.4+1.5.0rc1.bb
new file mode 100644
index 0000000000..41f6bf1487
--- /dev/null
+++ b/packages/lyx/lyx_1.4.4+1.5.0rc1.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "LyX is an advanced type setting processor - a frontend for LaTeX"
+SECTION = "x11/office"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.lyx.org"
+DEPENDS = "boost qt4-x11-free"
+RRECOMMENDS = "tetex"
+RDEPENDS = "python-shell python-textutils"
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+
+# we're checking out from svn because the tarball doesn't contain the necessary stuff to run autoreconf
+SRC_URI = "svn://svn.lyx.org/lyx/lyx-devel/tags;module=lyx_1_5_0rc1;rev=18613"
+S = "${WORKDIR}/lyx_1_5_0rc1"
+
+inherit autotools qt4x11
+
+EXTRA_OECONF = " --with-qt4-dir=${QTDIR} -enable-pch"
+PARALLEL_MAKE = ""
+
+do_configure_prepend() {
+ echo "NOTE: touching missing files, please report to upstream"
+ touch lib/configure.ac lib/doc/LaTeXConfig.lyx lib/textclass.lst
+}
+
+export UIC="${OE_QMAKE_UIC}"
+export MOC="${OE_QMAKE_MOC}"
diff --git a/packages/lyx/lyx_1.4.4.bb b/packages/lyx/lyx_1.4.4.bb
new file mode 100644
index 0000000000..d9156cd779
--- /dev/null
+++ b/packages/lyx/lyx_1.4.4.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "LyX is an advanced type setting processor - a frontend for LaTeX"
+SECTION = "x11/office"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.lyx.org"
+DEPENDS = "boost"
+RRECOMMENDS = "tetex"
+PR = "r0"
+
+# we're checking out from svn because the tarball doesn't contain the necessary stuff to run autoreconf
+SRC_URI = "svn://svn.lyx.org/lyx/lyx-devel/tags;module=lyx-1_4_4;rev=17185"
+S = "${WORKDIR}/lyx-1_4_4"
+
+inherit autotools qt3x11
+
+EXTRA_OECONF = "--with-frontend=qt --with-qt-dir=${QTDIR}"
+PARALLEL_MAKE = ""
+
+do_configure_prepend() {
+ echo "NOTE: touching missing files, please report to upstream"
+ touch lib/configure.ac lib/doc/LaTeXConfig.lyx lib/textclass.lst
+}
+
+export UIC="${OE_QMAKE_UIC}"
+export MOC="${OE_QMAKE_MOC}"
diff --git a/packages/m4/m4-native_1.4.8.bb b/packages/m4/m4-native_1.4.8.bb
new file mode 100644
index 0000000000..8beb8748e3
--- /dev/null
+++ b/packages/m4/m4-native_1.4.8.bb
@@ -0,0 +1,19 @@
+require m4_${PV}.bb
+
+inherit native
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/m4"
+
+INHIBIT_AUTOTOOLS_DEPS = "1"
+DEPENDS += "gnu-config-native"
+
+do_configure() {
+ install -m 0644 ${STAGING_DATADIR}/gnu-config/config.sub .
+ install -m 0644 ${STAGING_DATADIR}/gnu-config/config.guess .
+ oe_runconf
+}
+
+do_stage() {
+ install -m 0755 src/m4 ${STAGING_BINDIR}/
+}
+
diff --git a/packages/m4/m4_1.4.8.bb b/packages/m4/m4_1.4.8.bb
new file mode 100644
index 0000000000..77d8e822b0
--- /dev/null
+++ b/packages/m4/m4_1.4.8.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "GNU m4 is an implementation of the traditional Unix macro \
+processor."
+LICENSE = "GPL"
+SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz"
+S = "${WORKDIR}/m4-${PV}"
+
+inherit autotools
+
+EXTRA_OEMAKE += "'infodir=${infodir}'"
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/mISDN/.mtn2git_empty b/packages/mISDN/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mISDN/.mtn2git_empty
diff --git a/packages/mISDN/files/.mtn2git_empty b/packages/mISDN/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mISDN/files/.mtn2git_empty
diff --git a/packages/mISDN/files/Makefile b/packages/mISDN/files/Makefile
new file mode 100644
index 0000000000..bed60110ea
--- /dev/null
+++ b/packages/mISDN/files/Makefile
@@ -0,0 +1,4 @@
+PWD := $(shell pwd)
+SELECTION := CONFIG_MISDN_DRV=m CONFIG_MISDN_DSP=m CONFIG_MISDN_HFCUSB=m
+default modules:
+ $(MAKE) -C $(KDIR) SUBDIRS=${PWD}/drivers/isdn/hardware/mISDN/ EXTRA_CFLAGS=-I${PWD}/include modules ${SELECTION}
diff --git a/packages/mISDN/files/hfcs_usb_endianchecks.diff b/packages/mISDN/files/hfcs_usb_endianchecks.diff
new file mode 100644
index 0000000000..1f6ff3fcc8
--- /dev/null
+++ b/packages/mISDN/files/hfcs_usb_endianchecks.diff
@@ -0,0 +1,58 @@
+--- mISDN.org/drivers/isdn/hardware/mISDN/hfcs_usb.c 2005-06-23 18:43:36.000000000 +0200
++++ mISDN/drivers/isdn/hardware/mISDN/hfcs_usb.c 2005-08-12 16:16:24.000000000 +0200
+@@ -2038,9 +2038,9 @@
+
+ vend_idx = 0xffff;
+ for (i = 0; hfcsusb_idtab[i].idVendor; i++) {
+- if (dev->descriptor.idVendor == hfcsusb_idtab[i].idVendor
++ if (dev->descriptor.idVendor == le16_to_cpu(hfcsusb_idtab[i].idVendor)
+ && dev->descriptor.idProduct ==
+- hfcsusb_idtab[i].idProduct) {
++ le16_to_cpu(hfcsusb_idtab[i].idProduct)) {
+ vend_idx = i;
+ continue;
+ }
+@@ -2160,8 +2160,8 @@
+ usb_transfer_mode
+ = USB_INT;
+ packet_size =
+- ep->desc.
+- wMaxPacketSize;
++ le16_to_cpu(ep->desc.
++ wMaxPacketSize);
+ break;
+ case USB_ENDPOINT_XFER_BULK:
+ if (ep_addr & 0x80)
+@@ -2189,8 +2189,8 @@
+ usb_transfer_mode
+ = USB_BULK;
+ packet_size =
+- ep->desc.
+- wMaxPacketSize;
++ le16_to_cpu(ep->desc.
++ wMaxPacketSize);
+ break;
+ case USB_ENDPOINT_XFER_ISOC:
+ if (ep_addr & 0x80)
+@@ -2218,8 +2218,8 @@
+ usb_transfer_mode
+ = USB_ISOC;
+ iso_packet_size =
+- ep->desc.
+- wMaxPacketSize;
++ le16_to_cpu(ep->desc.
++ wMaxPacketSize);
+ break;
+ default:
+ card->
+@@ -2234,8 +2234,8 @@
+ card;
+ card->fifos[cidx].
+ usb_packet_maxlen =
+- ep->desc.
+- wMaxPacketSize;
++ le16_to_cpu(ep->desc.
++ wMaxPacketSize);
+ card->fifos[cidx].
+ intervall =
+ ep->desc.bInterval;
diff --git a/packages/mISDN/misdn_cvs.bb b/packages/mISDN/misdn_cvs.bb
new file mode 100644
index 0000000000..865e41b2f9
--- /dev/null
+++ b/packages/mISDN/misdn_cvs.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "mISDN kernel packages"
+PRIORITY = "optional"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+# hfcs_usb_endianchecks.diff does not apply cleanly anymore (cf. bug 240)
+# without it the package at least compiles. no guarantees about functionality.
+SRC_URI = "cvs://anonymous:readonly@cvs.isdn4linux.de/i4ldev;module=mISDN;method=pserver \
+# file://hfcs_usb_endianchecks.diff;patch=1 \
+ file://Makefile"
+
+S = "${WORKDIR}/mISDN/"
+
+inherit module
+
+do_compile_prepend() {
+ cp -f ${WORKDIR}/Makefile ${S}/
+ cp ${S}/drivers/isdn/hardware/mISDN/Makefile.v2.6 ${S}/drivers/isdn/hardware/mISDN/Makefile
+}
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ oe_runmake 'KDIR=${STAGING_KERNEL_DIR}' \
+ 'CC=${KERNEL_CC}' \
+ 'LD=${KERNEL_LD}'
+}
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/isdn/hardware/mISDN/
+ install -m 0644 ${S}/drivers/isdn/hardware/mISDN/*${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/isdn/hardware/mISDN
+}
+
diff --git a/packages/madfu/.mtn2git_empty b/packages/madfu/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/madfu/.mtn2git_empty
diff --git a/packages/madfu/files/.mtn2git_empty b/packages/madfu/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/madfu/files/.mtn2git_empty
diff --git a/packages/madfu/files/autofoo.patch b/packages/madfu/files/autofoo.patch
new file mode 100644
index 0000000000..a89d38b144
--- /dev/null
+++ b/packages/madfu/files/autofoo.patch
@@ -0,0 +1,54 @@
+--- madfuload-1.2/configure.org 2007-04-04 13:30:55.186393000 +0200
++++ madfuload-1.2/configure 2007-04-04 13:33:26.286393000 +0200
+@@ -2831,50 +2831,7 @@
+ else
+ udev_dir="/etc/udev"
+ fi;
+-as_ac_File=`echo "ac_cv_file_$udev_dir/udev.conf" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $udev_dir/udev.conf" >&5
+-echo $ECHO_N "checking for $udev_dir/udev.conf... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_File+set}\" = set"; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- test "$cross_compiling" = yes &&
+- { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
+-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
+- { (exit 1); exit 1; }; }
+-if test -r "$udev_dir/udev.conf"; then
+- eval "$as_ac_File=yes"
+-else
+- eval "$as_ac_File=no"
+-fi
+-fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
+-if test `eval echo '${'$as_ac_File'}'` = yes; then
+- udev_conf="$udev_dir/udev.conf"
+-else
+- udev_conf=""
+-fi
+-
+-
+-echo "$as_me:$LINENO: checking for udev rules directory" >&5
+-echo $ECHO_N "checking for udev rules directory... $ECHO_C" >&6
+-udev_rules=""
+-if test -r "$udev_conf"; then
+- udev_rules=`. "$udev_conf"; echo "$udev_rules"`
+-fi
+-if test -n "$udev_rules"; then
+- echo "$as_me:$LINENO: result: $udev_rules" >&5
+-echo "${ECHO_T}$udev_rules" >&6
+-else
+- udev_rules="$udev_dir/rules.d"
+- echo "$as_me:$LINENO: result: not found; assuming $udev_rules" >&5
+-echo "${ECHO_T}not found; assuming $udev_rules" >&6
+-fi
+-if test ! -d "$udev_rules"; then
+- { { echo "$as_me:$LINENO: error: $udev_rules not found" >&5
+-echo "$as_me: error: $udev_rules not found" >&2;}
+- { (exit 1); exit 1; }; }
+-fi
++udev_rules="$udev_dir/rules.d"
+ UDEV_RULES_DIR=$udev_rules
+
+
diff --git a/packages/madfu/madfu_1.2.bb b/packages/madfu/madfu_1.2.bb
new file mode 100644
index 0000000000..354e65aced
--- /dev/null
+++ b/packages/madfu/madfu_1.2.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Firmware loader for m-audio devices"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "http://heanet.dl.sourceforge.net/sourceforge/usb-midi-fw/madfuload-1.2.tar.gz \
+ file://autofoo.patch;patch=1"
+
+S = "${WORKDIR}/madfuload-1.2"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
+do_compile() {
+ oe_runmake
+}
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 755 ${S}/madfuload ${D}/${sbindir}
+ install -d ${D}/${libdir}/firmware
+ install -m 644 ${S}/*.bin ${D}/${libdir}/firmware
+ install -d ${D}/${sysconfdir}/udev/rules
+ install -m 644 ${S}/42-madfuload.rules ${D}/${sysconfdir}/udev/rules
+}
+
+FILES_${PN} += "${libdir}/firmware/"
diff --git a/packages/madwifi/madwifi-modules-0.9.3/.mtn2git_empty b/packages/madwifi/madwifi-modules-0.9.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/madwifi/madwifi-modules-0.9.3/.mtn2git_empty
diff --git a/packages/madwifi/madwifi-modules-0.9.3/madwifi-devname.patch b/packages/madwifi/madwifi-modules-0.9.3/madwifi-devname.patch
new file mode 100644
index 0000000000..8f56b0485e
--- /dev/null
+++ b/packages/madwifi/madwifi-modules-0.9.3/madwifi-devname.patch
@@ -0,0 +1,115 @@
+diff -uNr madwifi-0.9.3-orig/ath/if_ath.c madwifi-0.9.3/ath/if_ath.c
+--- madwifi-0.9.3-orig/ath/if_ath.c 2007-03-03 07:20:46.000000000 +0100
++++ madwifi-0.9.3/ath/if_ath.c 2007-03-27 20:02:15.004192220 +0200
+@@ -903,7 +903,8 @@
+
+ if (autocreatemode != -1) {
+ rtnl_lock();
+- error = ieee80211_create_vap(ic, "ath%d", dev,
++ /*error = ieee80211_create_vap(ic, "ath%d", dev,*/
++ error = ieee80211_create_vap(ic, "wlan%d", dev,
+ autocreatemode, IEEE80211_CLONE_BSSID);
+ rtnl_unlock();
+ if (error)
+@@ -9730,7 +9731,7 @@
+ };
+ static ctl_table ath_ath_table[] = {
+ { .ctl_name = DEV_ATH,
+- .procname = "ath",
++ .procname = "wlan",
+ .mode = 0555,
+ .child = ath_static_sysctls
+ }, { 0 }
+diff -uNr madwifi-0.9.3-orig/ath_hal/ah_os.c madwifi-0.9.3/ath_hal/ah_os.c
+--- madwifi-0.9.3-orig/ath_hal/ah_os.c 2007-02-21 07:46:24.000000000 +0100
++++ madwifi-0.9.3/ath_hal/ah_os.c 2007-03-27 20:02:05.571774828 +0200
+@@ -503,7 +503,7 @@
+ };
+ static ctl_table ath_ath_table[] = {
+ { .ctl_name = DEV_ATH,
+- .procname = "ath",
++ .procname = "wlan",
+ .mode = 0555,
+ .child = ath_hal_table
+ }, { 0 }
+diff -uNr madwifi-0.9.3-orig/ath_rate/amrr/amrr.c madwifi-0.9.3/ath_rate/amrr/amrr.c
+--- madwifi-0.9.3-orig/ath_rate/amrr/amrr.c 2007-02-21 07:46:24.000000000 +0100
++++ madwifi-0.9.3/ath_rate/amrr/amrr.c 2007-03-27 20:01:47.450972963 +0200
+@@ -530,7 +530,7 @@
+ };
+ static ctl_table ath_ath_table[] = {
+ { .ctl_name = DEV_ATH,
+- .procname = "ath",
++ .procname = "wlan",
+ .mode = 0555,
+ .child = ath_rate_table
+ }, { 0 }
+diff -uNr madwifi-0.9.3-orig/ath_rate/onoe/onoe.c madwifi-0.9.3/ath_rate/onoe/onoe.c
+--- madwifi-0.9.3-orig/ath_rate/onoe/onoe.c 2007-02-21 07:46:24.000000000 +0100
++++ madwifi-0.9.3/ath_rate/onoe/onoe.c 2007-03-27 20:01:35.362438027 +0200
+@@ -477,7 +477,7 @@
+ };
+ static ctl_table ath_ath_table[] = {
+ { .ctl_name = DEV_ATH,
+- .procname = "ath",
++ .procname = "wlan",
+ .mode = 0555,
+ .child = ath_rate_table
+ }, { 0 }
+diff -uNr madwifi-0.9.3-orig/tools/80211debug.c madwifi-0.9.3/tools/80211debug.c
+--- madwifi-0.9.3-orig/tools/80211debug.c 2006-12-08 18:20:08.000000000 +0100
++++ madwifi-0.9.3/tools/80211debug.c 2007-03-27 20:07:02.808926708 +0200
+@@ -183,7 +183,7 @@
+ int
+ main(int argc, char *argv[])
+ {
+- const char *ifname = "ath0";
++ const char *ifname = "wlan0";
+ const char *cp, *tp;
+ const char *sep;
+ int op, i;
+diff -uNr madwifi-0.9.3-orig/tools/80211stats.c madwifi-0.9.3/tools/80211stats.c
+--- madwifi-0.9.3-orig/tools/80211stats.c 2007-02-07 04:18:49.000000000 +0100
++++ madwifi-0.9.3/tools/80211stats.c 2007-03-27 20:04:16.297559340 +0200
+@@ -252,7 +252,7 @@
+ struct iwreq iwr;
+ int allnodes = 0;
+
+- const char *ifname = "ath0";
++ const char *ifname = "wlan0";
+
+ s = socket(AF_INET, SOCK_DGRAM, 0);
+ if (s < 0)
+diff -uNr madwifi-0.9.3-orig/tools/athdebug.c madwifi-0.9.3/tools/athdebug.c
+--- madwifi-0.9.3-orig/tools/athdebug.c 2006-12-08 18:20:08.000000000 +0100
++++ madwifi-0.9.3/tools/athdebug.c 2007-03-27 20:03:32.583625082 +0200
+@@ -185,7 +185,7 @@
+ #ifdef __linux__
+ const char *ifname = "wifi0";
+ #else
+- const char *ifname = "ath0";
++ const char *ifname = "wlan0";
+ #endif
+ const char *cp, *tp;
+ const char *sep;
+@@ -209,7 +209,7 @@
+ #ifdef __linux__
+ snprintf(oid, sizeof(oid), "dev.%s.debug", ifname);
+ #else
+- snprintf(oid, sizeof(oid), "dev.ath.%s.debug", ifname+3);
++ snprintf(oid, sizeof(oid), "dev.wlan.%s.debug", ifname+3);
+ #endif
+ debuglen = sizeof(debug);
+ if (sysctlbyname(oid, &debug, &debuglen, NULL, 0) < 0)
+diff -uNr madwifi-0.9.3-orig/tools/athstats.c madwifi-0.9.3/tools/athstats.c
+--- madwifi-0.9.3-orig/tools/athstats.c 2007-01-12 03:45:36.000000000 +0100
++++ madwifi-0.9.3/tools/athstats.c 2007-03-27 20:03:54.176580535 +0200
+@@ -229,7 +229,7 @@
+ #ifdef __linux__
+ const char *ifname = "wifi0";
+ #else
+- const char *ifname = "ath0";
++ const char *ifname = "wlan0";
+ #endif
+ int s;
+ struct ifreq ifr;
diff --git a/packages/madwifi/madwifi-modules-0.9.3/madwifi-skbpanic.patch b/packages/madwifi/madwifi-modules-0.9.3/madwifi-skbpanic.patch
new file mode 100644
index 0000000000..bad4989f60
--- /dev/null
+++ b/packages/madwifi/madwifi-modules-0.9.3/madwifi-skbpanic.patch
@@ -0,0 +1,16 @@
+--- madwifi-0.9.3-orig/ath/if_ath.c 2007-04-12 12:53:01.000000000 +0200
++++ madwifi-0.9.3/ath/if_ath.c 2007-04-12 12:40:37.078056016 +0200
+@@ -5634,6 +5634,13 @@
+ sc->sc_devstats.rx_packets++;
+ sc->sc_devstats.rx_bytes += len;
+
++ if((skb->tail + len) > skb->end) {
++ printk(" --------- found dodgy wifi rx skb_put\n");
++ dev_kfree_skb(skb);
++ skb = NULL;
++ goto rx_next;
++ }
++
+ skb_put(skb, len);
+ skb->protocol = __constant_htons(ETH_P_CONTROL);
+
diff --git a/packages/madwifi/madwifi-modules_0.9.3.bb b/packages/madwifi/madwifi-modules_0.9.3.bb
new file mode 100644
index 0000000000..523b01c9e0
--- /dev/null
+++ b/packages/madwifi/madwifi-modules_0.9.3.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "Linux driver for 802.11a/b/g universal NIC cards using Atheros chip sets"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "kernel (${KERNEL_VERSION}) wireless-tools (>=27)"
+DEPENDS = "virtual/kernel"
+CONFLICTS = "hostap-daemon (<0.4.8)"
+SRCDATE = "20050803"
+PV = "0.9.3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/madwifi/madwifi-${PV}.tar.bz2 \
+ file://madwifi-devname.patch;patch=1 \
+ file://madwifi-skbpanic.patch;patch=1"
+S = "${WORKDIR}/madwifi-${PV}"
+
+inherit module-base
+
+# Hack Alert :D
+ARCH_mipsel = "mips"
+EXTRA_OEMAKE_mtx-1 = "TARGET=mips-le-elf KERNELPATH=${STAGING_KERNEL_DIR} KERNELRELEASE=${KERNEL_VERSION} TOOLPREFIX=${TARGET_PREFIX} \
+COPTS='-G 0 -mno-abicalls -fno-pic -Wa,--trap -fno-strict-aliasing -fno-common -fomit-frame-pointer -mlong-calls -DATH_PCI'"
+EXTRA_OEMAKE_mtx-2 = "TARGET=mips-le-elf KERNELPATH=${STAGING_KERNEL_DIR} KERNELRELEASE=${KERNEL_VERSION} TOOLPREFIX=${TARGET_PREFIX} \
+COPTS='-G 0 -mno-abicalls -fno-pic -Wa,--trap -fno-strict-aliasing -fno-common -fomit-frame-pointer -mlong-calls -DATH_PCI'"
+
+do_compile() {
+ oe_runmake
+ cd tools; oe_runmake
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+ install -d ${D}/${sbindir}
+ cd tools;
+ oe_runmake DESTDIR=${D} BINDIR=${sbindir} install
+ install -m 755 athchans athctrl athkey ${D}/${sbindir}
+}
+
+do_stage() {
+ # hostapd and wpa_supplicant need these files
+ install -d ${STAGING_INCDIR}/madwifi/net80211/ ${STAGING_INCDIR}/madwifi/include
+ install -m 0644 net80211/*.h ${STAGING_INCDIR}/madwifi/net80211/
+ install -m 0644 include/compat.h ${STAGING_INCDIR}/madwifi/include/
+ cd ${STAGING_INCDIR}/madwifi/net80211/
+ rm -f compat.h; ln -s ../include/compat.h .
+}
+
+pkg_postinst() {
+if test "x$D" != "x"; then
+ exit 1
+else
+ depmod -ae
+fi
+}
+
+PACKAGES = "madwifi-tools ${PN}"
+FILES_${PN} = "/lib/modules/"
+FILES_madwifi-tools = "/usr/sbin/"
diff --git a/packages/madwifi/madwifi-ng_r.inc b/packages/madwifi/madwifi-ng_r.inc
index 2f476a8b3c..73c585b0d8 100644
--- a/packages/madwifi/madwifi-ng_r.inc
+++ b/packages/madwifi/madwifi-ng_r.inc
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
RDEPENDS = "kernel (${KERNEL_VERSION})"
DEPENDS = "virtual/kernel"
-PR="r3"
+PR="r5"
WACKELF_SRC_URI = ""
WACKELF_SRC_URI_ixp4xx = " file://20-xscale-VFP-wackelf.patch;patch=1"
@@ -22,6 +22,8 @@ inherit module-base
ARCH_efika="powerpc"
ARCH_dht-walnut="ppc"
+ARCH_magicbox="ppc"
+ARCH_sequoia="ppc"
EXTRA_OEMAKE = "LDFLAGS= KERNELPATH=${STAGING_KERNEL_DIR} KERNELRELEASE=${KERNEL_VERSION} TOOLPREFIX=${TARGET_PREFIX}"
diff --git a/packages/madwifi/madwifi-ng_r2182-20070308.bb b/packages/madwifi/madwifi-ng_r2182-20070308.bb
new file mode 100644
index 0000000000..42d8ccafe4
--- /dev/null
+++ b/packages/madwifi/madwifi-ng_r2182-20070308.bb
@@ -0,0 +1,3 @@
+PR = "r0"
+
+require madwifi-ng_r.inc
diff --git a/packages/madwifi/madwifi-ng_r2187-20070309.bb b/packages/madwifi/madwifi-ng_r2187-20070309.bb
new file mode 100644
index 0000000000..42d8ccafe4
--- /dev/null
+++ b/packages/madwifi/madwifi-ng_r2187-20070309.bb
@@ -0,0 +1,3 @@
+PR = "r0"
+
+require madwifi-ng_r.inc
diff --git a/packages/madwifi/madwifi-ng_r2518-20070626.bb b/packages/madwifi/madwifi-ng_r2518-20070626.bb
new file mode 100644
index 0000000000..9f042ac926
--- /dev/null
+++ b/packages/madwifi/madwifi-ng_r2518-20070626.bb
@@ -0,0 +1,7 @@
+PR = "r0"
+
+# Disable stripping of kernel modules, since this action strips too
+# much out, and the resulting module won't load.
+INHIBIT_PACKAGE_STRIP = "1"
+
+require madwifi-ng_r.inc
diff --git a/packages/maemo/hildon-fm_0.9.1-2.bb b/packages/maemo/hildon-fm_0.9.1-2.bb
index 7a82863075..40654295f9 100644
--- a/packages/maemo/hildon-fm_0.9.1-2.bb
+++ b/packages/maemo/hildon-fm_0.9.1-2.bb
@@ -1,5 +1,5 @@
PR = "r1"
-LICENSE = "GPL/LGPL"
+LICENSE = "GPL LGPL"
DEPENDS = "gtk+-2.6.4-1.osso7 outo libxi libxt libpng gconf hildon-lgpl osso-thumbnail osso-gwconnect"
SRC_URI = "http://repository.maemo.org/pool/maemo/ossw/source/h/hildon-fm/hildon-fm_${PV}.tar.gz"
diff --git a/packages/maemo3/hildon-libs_0.15.1.bb b/packages/maemo3/hildon-libs_0.15.1.bb
new file mode 100644
index 0000000000..cb89376776
--- /dev/null
+++ b/packages/maemo3/hildon-libs_0.15.1.bb
@@ -0,0 +1,26 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia hildon librares"
+
+DEPENDS = "gtk-doc-native libosso"
+
+PR = "r0"
+
+SRC_URI = "http://launchpadlibrarian.net/7598381/hildon-libs_0.15.1-1ubuntu2.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/${PN}"
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+ touch gtk-doc.make
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
+FILES_${PN} += "${libdir}/hildon-widgets/*"
+
diff --git a/packages/maemo3/hildon-thumbnail_0.11.bb b/packages/maemo3/hildon-thumbnail_0.11.bb
new file mode 100644
index 0000000000..54646e7630
--- /dev/null
+++ b/packages/maemo3/hildon-thumbnail_0.11.bb
@@ -0,0 +1,25 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia hildon thumbnail library"
+
+DEPENDS = "libhildonmime hildon-libs osso-thumbnail"
+
+PR = "r0"
+
+SRC_URI = "http://repository.maemo.org/pool/sardine/main/source/h/${PN}/${PN}_${PV}.tar.gz \
+ "
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/${PV}"
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+ touch gtk-doc.make
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/libhildonhelp_1.9.1.bb b/packages/maemo3/libhildonhelp_1.9.1.bb
new file mode 100644
index 0000000000..b04efe2660
--- /dev/null
+++ b/packages/maemo3/libhildonhelp_1.9.1.bb
@@ -0,0 +1,23 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia hildon help library"
+
+DEPENDS = "libart libpng jpeg libxml2 gtkhtml-3.8 libosso"
+
+PR = "r0"
+
+SRC_URI = "http://repository.maemo.org/pool/sardine-experimental/main.disabled/source/libh/libhildonhelp/libhildonhelp_${PV}-1.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/${PV}-1"
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/libhildonmime_1.9.5.bb b/packages/maemo3/libhildonmime_1.9.5.bb
new file mode 100644
index 0000000000..3379cb7168
--- /dev/null
+++ b/packages/maemo3/libhildonmime_1.9.5.bb
@@ -0,0 +1,23 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia hildon mime library"
+
+DEPENDS = "libosso"
+
+PR = "r0"
+
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/universe/libh/libhildonmime/libhildonmime_${PV}-1ubuntu1.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/${PN}"
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.in
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/libosso-help_2.1.2.bb b/packages/maemo3/libosso-help_2.1.2.bb
new file mode 100644
index 0000000000..8a35e1a4f0
--- /dev/null
+++ b/packages/maemo3/libosso-help_2.1.2.bb
@@ -0,0 +1,24 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia osso help library"
+
+DEPENDS = "libhildonhelp libosso gtkhtml-3.8 libxml2 "
+
+PR = "r0"
+
+SRC_URI = "http://repository.maemo.org/pool/sardine-experimental/main.disabled/source/libo/libosso-help/libosso-help_${PV}-2.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/2.1.2-2"
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+ sed -i -e s:AC_CONFIG_SRCDIR:#AC_CONFIG_SRCDIR:g configure.ac
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/mce-dev_1.5.6.bb b/packages/maemo3/mce-dev_1.5.6.bb
index dd1fcf364a..6168cbe31e 100644
--- a/packages/maemo3/mce-dev_1.5.6.bb
+++ b/packages/maemo3/mce-dev_1.5.6.bb
@@ -1,15 +1,26 @@
LICENSE = "LGPL"
+DESCRIPTION = "Nokia MCE headers"
-SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz"
+PR = "r0"
-inherit autotools pkgconfig
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/universe/m/mce-dev/mce-dev_${PV}.tar.gz"
+
+inherit pkgconfig
do_compile() {
- sed -i 's:@$(DOXYGEN):echo:g' Makefile
- sed -i 's:-o\ root\ -g\ root::' Makefile
+ :
+}
+
+
+do_install() {
+ install -d ${D}${prefix}/include
+ install -d ${D}${libdir}/pkgconfig
+ cp -pPr include/* ${D}${prefix}/include
+ cp *.pc ${D}${libdir}/pkgconfig/
}
do_stage() {
- autotools_stage_includes
-}
+ cp -pPr include/* ${STAGING_INCDIR}/
+}
+
diff --git a/packages/maemo3/osso-gwconnect_1.0.8.bb b/packages/maemo3/osso-gwconnect_1.0.8.bb
new file mode 100644
index 0000000000..66b47ebac2
--- /dev/null
+++ b/packages/maemo3/osso-gwconnect_1.0.8.bb
@@ -0,0 +1,22 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia osso connection library"
+
+DEPENDS = "hildon-1 libosso"
+
+PR = "r1"
+
+SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/osso-ic-oss/.mtn2git_empty b/packages/maemo3/osso-ic-oss/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/maemo3/osso-ic-oss/.mtn2git_empty
diff --git a/packages/maemo3/osso-ic-oss/dbus-api-update.patch b/packages/maemo3/osso-ic-oss/dbus-api-update.patch
new file mode 100644
index 0000000000..425f959d79
--- /dev/null
+++ b/packages/maemo3/osso-ic-oss/dbus-api-update.patch
@@ -0,0 +1,33 @@
+--- /tmp/osso-iap-connect.c 2007-08-07 12:06:51.000000000 +0200
++++ osso-ic-oss-1.0.4/examples/osso-iap-connect.c 2007-08-07 12:07:32.698400000 +0200
+@@ -276,7 +276,7 @@
+ g_main_loop_run(ctxt.loop);
+
+ /* Clean up */
+- dbus_connection_disconnect(conn);
++ dbus_connection_close(conn);
+ dbus_connection_unref(conn);
+
+ g_main_loop_unref(ctxt.loop);
+--- /tmp/ic-compat-preload.c 2007-08-07 12:06:57.000000000 +0200
++++ osso-ic-oss-1.0.4/src/ic-compat-preload.c 2007-08-07 12:07:40.268400000 +0200
+@@ -140,7 +140,7 @@
+ return NULL;
+
+ if (!dbus_bus_register(connection, NULL)) {
+- dbus_connection_disconnect(connection);
++ dbus_connection_close(connection);
+ dbus_connection_unref(connection);
+ connection = NULL;
+ return NULL;
+--- /tmp/ic-api.c 2007-08-07 12:06:57.000000000 +0200
++++ osso-ic-oss-1.0.4/src/ic-api.c 2007-08-07 12:07:55.628400000 +0200
+@@ -145,7 +145,7 @@
+ if (dbus_connection_register_object_path(
+ connection, ICD_DBUS_PATH,
+ &icd_vtable, arg) == FALSE) {
+- dbus_connection_disconnect(connection);
++ dbus_connection_close(connection);
+ dbus_connection_unref(connection);
+ connection = NULL;
+ return NULL;
diff --git a/packages/maemo3/osso-ic-oss_1.0.4.bb b/packages/maemo3/osso-ic-oss_1.0.4.bb
new file mode 100644
index 0000000000..4f9b742fb7
--- /dev/null
+++ b/packages/maemo3/osso-ic-oss_1.0.4.bb
@@ -0,0 +1,25 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia osso-ic library"
+
+DEPENDS = "dbus-glib glib-2.0 outo libosso"
+
+PR = "r0"
+
+SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}.tar.gz \
+ file://dbus-api-update.patch;patch=1 "
+
+inherit autotools pkgconfig lib_package
+
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+}
+
+PARALLEL_MAKE = ""
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/maemo3/osso-thumbnail_0.7.bb b/packages/maemo3/osso-thumbnail_0.7.bb
new file mode 100644
index 0000000000..d99ee786b5
--- /dev/null
+++ b/packages/maemo3/osso-thumbnail_0.7.bb
@@ -0,0 +1,22 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Nokia osso thumbnail library"
+
+DEPENDS = "gnome-vfs gconf-dbus hildon-1 libosso"
+
+PR = "r0"
+
+SRC_URI = "http://repository.maemo.org/pool/bora/free/source/${PN}_${PV}-1.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+
+do_configure_prepend() {
+ # remove Werror from OSSO_CFLAGS
+ sed -i s:-Werror::g configure.ac
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/matchbox-common/matchbox_0.9.1.bb b/packages/matchbox-common/matchbox_0.9.1.bb
index 203c705267..cda90dfb50 100644
--- a/packages/matchbox-common/matchbox_0.9.1.bb
+++ b/packages/matchbox-common/matchbox_0.9.1.bb
@@ -3,5 +3,6 @@ LICENSE = "GPL"
RDEPENDS = "matchbox-common matchbox-wm matchbox-panel matchbox-desktop"
SECTION = "x11/wm"
PACKAGES = "${PN}"
+PR = "r1"
ALLOW_EMPTY = "1"
diff --git a/packages/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch b/packages/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch
new file mode 100644
index 0000000000..2d05e5d652
--- /dev/null
+++ b/packages/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch
@@ -0,0 +1,91 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176076569 0
+# Node ID ff9cf1fd8177dded04b9fc81ba630203848fc3ca
+# Parent 96305d94eb31f06f5618c99310192c47c68a1f21
+Add new modifier: layout. Used to cycle thru all available layouts.
+
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/config-parser.c
+--- a/src/config-parser.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/config-parser.c Sun Apr 08 23:56:09 2007 +0000
+@@ -113,7 +113,8 @@ ModLookup[] =
+ { "mod1", MBKeyboardKeyModMod1 },
+ { "mod2", MBKeyboardKeyModMod2 },
+ { "mod3", MBKeyboardKeyModMod3 },
+- { "caps", MBKeyboardKeyModCaps }
++ { "caps", MBKeyboardKeyModCaps },
++ { "layout", MBKeyboardKeyModLayout },
+ };
+
+ typedef struct MBKeyboardConfigState
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard-key.c
+--- a/src/matchbox-keyboard-key.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard-key.c Sun Apr 08 23:56:09 2007 +0000
+@@ -493,6 +493,16 @@ mb_kbd_key_press(MBKeyboardKey *key)
+ case MBKeyboardKeyModAlt:
+ mb_kbd_toggle_state(key->kbd, MBKeyboardStateAlt);
+ break;
++ case MBKeyboardKeyModLayout:
++ key->kbd->selected_layout_no++;
++ if (key->kbd->selected_layout_no >= util_list_length(key->kbd->layouts))
++ key->kbd->selected_layout_no = 0;
++ key->kbd->selected_layout =
++ (MBKeyboardLayout *)util_list_get_nth_data(key->kbd->layouts,
++ key->kbd->selected_layout_no);
++ mb_kbd_ui_recalc_ui_layout(key->kbd->ui);
++ queue_full_kbd_redraw = True;
++ break;
+ default:
+ DBG("unknown modifier action");
+ break;
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Sun Apr 08 23:56:09 2007 +0000
+@@ -505,6 +505,15 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+ }
+
+ *width = max_row_width;
++}
++
++void
++mb_kbd_ui_recalc_ui_layout(MBKeyboardUI *ui)
++{
++ mb_kbd_ui_allocate_ui_layout(ui,
++ &ui->base_alloc_width, &ui->base_alloc_height);
++
++ mb_kbd_ui_resize(ui, ui->xwin_width, ui->xwin_height);
+ }
+
+ void
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard.c
+--- a/src/matchbox-keyboard.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard.c Sun Apr 08 23:56:09 2007 +0000
+@@ -85,6 +85,7 @@ mb_kbd_new (int argc, char **argv)
+
+ kb->selected_layout
+ = (MBKeyboardLayout *)util_list_get_nth_data(kb->layouts, 0);
++ kb->selected_layout_no = 0;
+
+ if (want_embedding)
+ mb_kbd_ui_set_embeded( kb->ui, True );
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard.h Sun Apr 08 23:56:09 2007 +0000
+@@ -148,6 +148,7 @@ struct MBKeyboard
+
+ List *layouts;
+ MBKeyboardLayout *selected_layout;
++ int selected_layout_no;
+
+ int key_border, key_pad, key_margin;
+ int row_spacing, col_spacing;
+@@ -177,6 +178,9 @@ int
+ int
+ mb_kbd_ui_init(MBKeyboard *kbd);
+
++void
++mb_kbd_ui_recalc_ui_layout(MBKeyboardUI *ui);
++
+ int
+ mb_kbd_ui_realize(MBKeyboardUI *ui);
+
diff --git a/packages/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch b/packages/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch
new file mode 100644
index 0000000000..8513b6ed86
--- /dev/null
+++ b/packages/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch
@@ -0,0 +1,94 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176077194 0
+# Node ID b010d54a6c5020a68855e60e5a423ee3c18ed700
+# Parent ff9cf1fd8177dded04b9fc81ba630203848fc3ca
+Changes to improve layout rendering, especially after adding support for
+multiple layouts:
+1. Add --hfactor option which presets keyboard to the specified percentage
+of screen height. This is required for multiple layouts, as otherwise
+height is calculated on specific layout, but in such a way that it is
+affected by previous layout, which leads to rendering artifacts.
+2. Also st default font height to 6, after all.
+
+diff -r ff9cf1fd8177 -r b010d54a6c50 src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Sun Apr 08 23:56:09 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Mon Apr 09 00:06:34 2007 +0000
+@@ -744,9 +744,15 @@ mb_kbd_ui_resources_create(MBKeyboardUI
+ */
+ if (desk_width > ui->xwin_width)
+ {
++ int win_height;
++ if (ui->kbd->hfactor != 0)
++ win_height = desk_height * ui->kbd->hfactor / 100;
++ else
++ win_height = ( desk_width * ui->xwin_height ) / ui->xwin_width;
++
+ mb_kbd_ui_resize(ui,
+ desk_width,
+- ( desk_width * ui->xwin_height ) / ui->xwin_width);
++ win_height);
+ }
+
+ wm_struct_vals[2] = desk_y + desk_height - ui->xwin_height;
+@@ -818,8 +824,11 @@ mb_kbd_ui_resize(MBKeyboardUI *ui, int w
+ width_diff = width - ui->base_alloc_width;
+ height_diff = height - ui->base_alloc_height;
+
++/* It's better to have some "clipped" keys, than busted layout. */
++#if 0
+ if (width_diff < 0 || height_diff < 0)
+ return; /* dont go smaller than our int request - get clipped */
++#endif
+
+ layout = mb_kbd_get_selected_layout(ui->kbd);
+ row_item = mb_kbd_layout_rows(layout);
+diff -r ff9cf1fd8177 -r b010d54a6c50 src/matchbox-keyboard.c
+--- a/src/matchbox-keyboard.c Sun Apr 08 23:56:09 2007 +0000
++++ b/src/matchbox-keyboard.c Mon Apr 09 00:06:34 2007 +0000
+@@ -23,8 +23,9 @@ mb_kbd_usage (char *progname)
+ mb_kbd_usage (char *progname)
+ {
+ fprintf(stderr, "Usage:\n %s [Options ] [ Layout Variant ]\n", progname);
+- fprintf(stderr, "\nOptions are;\n"
+- " -xid,--xid Print window ID to stdout ( for embedding )\n");
++ fprintf(stderr, "\nOptions are:\n"
++ " -xid,--xid Print window ID to stdout ( for embedding )\n"
++ " --hfactor <percent> Fix keyboard window size in percentage of desktop height\n");
+ fprintf(stderr, "\nmatchbox-keyboard %s \nCopyright (C) 2005 Matthew Allum, OpenedHand Ltd.\n", VERSION);
+
+ exit(-1);
+@@ -58,6 +59,13 @@ mb_kbd_new (int argc, char **argv)
+ want_embedding = True;
+ continue;
+ }
++ if (streq ("-hfactor", argv[i]) || streq ("--hfactor", argv[i]))
++ {
++ if (i + 1 < argc) {
++ kb->hfactor = atoi(argv[i + 1]);
++ }
++ continue;
++ }
+
+ if (i == (argc-1) && argv[i][0] != '-')
+ variant = argv[i];
+@@ -77,7 +85,7 @@ mb_kbd_new (int argc, char **argv)
+ kb->key_pad = 0;
+ kb->col_spacing = 0;
+ kb->row_spacing = 0;
+- kb->font_pt_size = 5;
++ kb->font_pt_size = 6;
+ }
+
+ if (!mb_kbd_config_load(kb, variant))
+diff -r ff9cf1fd8177 -r b010d54a6c50 src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Sun Apr 08 23:56:09 2007 +0000
++++ b/src/matchbox-keyboard.h Mon Apr 09 00:06:34 2007 +0000
+@@ -143,6 +143,7 @@ struct MBKeyboard
+ char *font_family;
+ int font_pt_size;
+ char *font_variant;
++ int hfactor;
+
+ char *config_file;
+
diff --git a/packages/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch b/packages/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch
new file mode 100644
index 0000000000..7ce61e469c
--- /dev/null
+++ b/packages/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch
@@ -0,0 +1,65 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176077287 0
+# Node ID 38c3459f2e1a1c8dc7aacb486f201bdda638c7f2
+# Parent b010d54a6c5020a68855e60e5a423ee3c18ed700
+Add rendering debug logging.
+
+diff -r b010d54a6c50 -r 38c3459f2e1a src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Mon Apr 09 00:06:34 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Mon Apr 09 00:08:07 2007 +0000
+@@ -357,6 +357,8 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+ /* Do an initial run to figure out a 'base' size for single glyph keys */
+ mb_kdb_ui_unit_key_size(ui, &ui->key_uwidth, &ui->key_uheight);
+
++ DBG("unit_key_size: %dx%d", ui->key_uwidth, ui->key_uheight);
++
+ row_item = mb_kbd_layout_rows(layout);
+
+ row_y = mb_kbd_row_spacing(ui->kbd);
+@@ -415,6 +417,8 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+
+ if (key_x > max_row_width) /* key_x now represents row width */
+ max_row_width = key_x;
++
++ DBG("Row width: %d", key_x);
+
+ mb_kbd_row_set_y(row, row_y);
+
+@@ -617,6 +621,8 @@ mb_kbd_ui_resources_create(MBKeyboardUI
+ boolean have_matchbox_wm = False;
+ boolean have_ewmh_wm = False;
+
++ DBG("mb_kbd_ui_resources_create: %dx%d", ui->xwin_width, ui->xwin_height);
++
+ /*
+ atom_wm_protocols = {
+ XInternAtom(ui->xdpy, "WM_DELETE_WINDOW",False),
+@@ -821,6 +827,8 @@ mb_kbd_ui_resize(MBKeyboardUI *ui, int w
+
+ MARK();
+
++ DBG("mb_kbd_ui_resize: resize to %dx%d, base %dx%d", width, height, ui->base_alloc_width, ui->base_alloc_height);
++
+ width_diff = width - ui->base_alloc_width;
+ height_diff = height - ui->base_alloc_height;
+
+@@ -1125,6 +1133,7 @@ mb_kbd_ui_event_loop(MBKeyboardUI *ui)
+ }
+ break;
+ case ConfigureNotify:
++ DBG("ConfigureNotify %i,%i", xev.xconfigure.width, xev.xconfigure.height);
+ if (xev.xconfigure.width != ui->xwin_width
+ || xev.xconfigure.height != ui->xwin_height)
+ mb_kbd_ui_handle_configure(ui,
+diff -r b010d54a6c50 -r 38c3459f2e1a src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Mon Apr 09 00:06:34 2007 +0000
++++ b/src/matchbox-keyboard.h Mon Apr 09 00:08:07 2007 +0000
+@@ -48,6 +48,7 @@
+ #include "config.h"
+ #endif
+
++#define WANT_DEBUG 1
+ #if (WANT_DEBUG)
+ #define DBG(x, a...) \
+ fprintf (stderr, __FILE__ ":%d,%s() " x "\n", __LINE__, __func__, ##a)
diff --git a/packages/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch b/packages/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch
new file mode 100644
index 0000000000..1480591930
--- /dev/null
+++ b/packages/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch
@@ -0,0 +1,197 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1181567228 0
+# Node ID 869314ae90f46a8c2d34080005d4079cb0d0fcf4
+# Parent 38c3459f2e1a1c8dc7aacb486f201bdda638c7f2
+Add support for loading multiple independent layouts.
+All layouts found in ~/.matchbox/keyboard.d/ are loaded, realistically
+these will be symlinks to system-wide store. This directory has the highest
+priority of all other layout selection mechanism (except for
+$MB_KBD_CONFIG).
+
+diff -r 38c3459f2e1a -r 869314ae90f4 src/config-parser.c
+--- a/src/config-parser.c Mon Apr 09 00:08:07 2007 +0000
++++ b/src/config-parser.c Mon Jun 11 13:07:08 2007 +0000
+@@ -17,6 +17,7 @@
+ *
+ */
+
++#include <dirent.h>
+ #include "matchbox-keyboard.h"
+
+ /*
+@@ -57,6 +58,9 @@
+
+ </keyboard>
+ */
++
++int mb_kbd_config_parse_file(MBKeyboard *kbd, char *path);
++static int mb_kbd_config_parse_data(MBKeyboard *kbd, char *data);
+
+ struct _keysymlookup
+ {
+@@ -170,12 +174,9 @@ config_str_to_modtype(const char* str)
+ }
+
+
+-static char*
+-config_load_file(MBKeyboard *kbd, char *variant_in)
+-{
+- struct stat stat_info;
+- FILE* fp;
+- char *result;
++int
++mb_kbd_config_load(MBKeyboard *kbd, char *variant_in)
++{
+ char *country = NULL;
+ char *variant = NULL;
+ char *lang = NULL;
+@@ -195,7 +196,44 @@ config_load_file(MBKeyboard *kbd, char *
+ if (util_file_readable(path))
+ goto load;
+
+- return NULL;
++ return 0;
++ }
++
++ if (getenv("HOME"))
++ {
++ snprintf(path, 1024, "%s/.matchbox/keyboard.d", getenv("HOME"));
++
++ DBG("checking %s\n", path);
++
++ if (util_file_readable(path))
++ {
++ DIR *dir = opendir(path);
++ struct dirent *dirent;
++ if (!dir)
++ {
++ perror("matchbox-keyboard");
++ util_fatal_error("Cannot read keyboard.d.\n");
++ }
++ errno = 0;
++ while ((dirent = readdir(dir)))
++ {
++ if (dirent->d_name[0] == '.')
++ continue;
++ snprintf(path, 1024, "%s/.matchbox/keyboard.d/%s", getenv("HOME"), dirent->d_name);
++ if (!mb_kbd_config_parse_file(kbd, path))
++ {
++ util_fatal_error("Cannot read file in keyboard.d.\n");
++ }
++
++ }
++ if (errno)
++ {
++ perror("matchbox-keyboard");
++ util_fatal_error("Error reading keyboard.d.\n");
++ }
++ closedir(dir);
++ return 1;
++ }
+ }
+
+ lang = getenv("MB_KBD_LANG");
+@@ -268,29 +306,11 @@ config_load_file(MBKeyboard *kbd, char *
+ DBG("checking %s\n", path);
+
+ if (!util_file_readable(path))
+- return NULL;
++ return 0;
+
+ load:
+
+- if (stat(path, &stat_info))
+- return NULL;
+-
+- if ((fp = fopen(path, "rb")) == NULL)
+- return NULL;
+-
+- DBG("loading %s\n", path);
+-
+- kbd->config_file = strdup(path);
+-
+- result = malloc(stat_info.st_size + 1);
+-
+- n = fread(result, 1, stat_info.st_size, fp);
+-
+- if (n >= 0) result[n] = '\0';
+-
+- fclose(fp);
+-
+- return result;
++ return mb_kbd_config_parse_file(kbd, path);
+ }
+
+ static const char *
+@@ -567,25 +587,48 @@ config_xml_start_cb(void *data, const ch
+
+
+ int
+-mb_kbd_config_load(MBKeyboard *kbd, char *variant)
+-{
+- char *data;
++mb_kbd_config_parse_file(MBKeyboard *kbd, char *path)
++{
++ char *buffer;
++ struct stat stat_info;
++ FILE* fp;
++ int n;
++
++ if (stat(path, &stat_info))
++ return 0;
++
++ if ((fp = fopen(path, "rb")) == NULL)
++ return 0;
++
++ DBG("loading %s\n", path);
++
++ kbd->config_file = strdup(path);
++
++ buffer = malloc(stat_info.st_size + 1);
++
++ n = fread(buffer, 1, stat_info.st_size, fp);
++
++ if (n >= 0) buffer[n] = '\0';
++
++ fclose(fp);
++
++ mb_kbd_config_parse_data(kbd, buffer);
++
++ free(buffer);
++
++ return 1;
++}
++
++static int
++mb_kbd_config_parse_data(MBKeyboard *kbd, char *data)
++{
+ XML_Parser p;
+ MBKeyboardConfigState *state;
+
+- if ((data = config_load_file(kbd, variant)) == NULL)
+- util_fatal_error("Couldn't find a keyboard config file\n");
+-
+ p = XML_ParserCreate(NULL);
+
+ if (!p)
+ util_fatal_error("Couldn't allocate memory for XML parser\n");
+-
+- if (variant && !strstr(kbd->config_file, variant))
+- fprintf(stderr,
+- "matchbox-keyboard: *Warning* Unable to locate variant: %s\n"
+- " falling back to %s\n",
+- variant, kbd->config_file);
+
+ state = util_malloc0(sizeof(MBKeyboardConfigState));
+
+@@ -607,6 +650,9 @@ mb_kbd_config_load(MBKeyboard *kbd, char
+ util_fatal_error("XML Parse failed.\n");
+ }
+
++ free(state);
++ XML_ParserFree(p);
++
+ return 1;
+ }
+
diff --git a/packages/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch b/packages/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch
new file mode 100644
index 0000000000..c2cf4d62dd
--- /dev/null
+++ b/packages/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch
@@ -0,0 +1,111 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1181568553 0
+# Node ID edc3fd8303a394bccadde2f427ab25ebda4fcbc8
+# Parent 869314ae90f46a8c2d34080005d4079cb0d0fcf4
+Add layout switch key to all layouts.
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-dvorak.xml
+--- a/layouts/keyboard-dvorak.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-dvorak.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -271,6 +271,10 @@ Contributed by Leon Matthews http://www.
+ <!-- Bottom Row -->
+ <row>
+ <space width="500" extended="true"/>
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
+ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-extended.xml
+--- a/layouts/keyboard-extended.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-extended.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -304,6 +304,10 @@
+ </row>
+ <row>
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="aeo" action="modifier:mod1"/>
+ </key>
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-fi.xml
+--- a/layouts/keyboard-fi.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-fi.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -329,6 +329,10 @@
+ <space width="500" extended="true"/>
+
+
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
+ <key fill="true">
+ <default display="Ctrl" action="modifier:ctrl"/>
+ </key>
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-numpad.xml
+--- a/layouts/keyboard-numpad.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-numpad.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -54,6 +54,13 @@
+ </key>
+ </row>
+
++ <row>
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++ </row>
++
++
+ </layout>
+
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-ru.xml
+--- a/layouts/keyboard-ru.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-ru.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -302,10 +302,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+- </key>
+- <key>
+- <default display="EN" action="modifier:mod2"/>
+ </key>
+
+ <key fill="true">
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-us.xml
+--- a/layouts/keyboard-us.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-us.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -326,6 +326,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard.xml
+--- a/layouts/keyboard.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -324,6 +324,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+
diff --git a/packages/matchbox-keyboard/matchbox-keyboard_svn.bb b/packages/matchbox-keyboard/matchbox-keyboard_svn.bb
index 8c7584d4f4..57d0b413a9 100644
--- a/packages/matchbox-keyboard/matchbox-keyboard_svn.bb
+++ b/packages/matchbox-keyboard/matchbox-keyboard_svn.bb
@@ -3,10 +3,16 @@ LICENSE = "GPL"
DEPENDS = "libfakekey expat libxft"
SECTION = "x11"
PV = "0.0+svn${SRCDATE}"
-PR="r3"
+PR="r5"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http \
- file://smallscreen-fontsize.patch;patch=1"
+ file://smallscreen-fontsize.patch;patch=1 \
+ file://2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch;patch=1 \
+ file://3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch;patch=1 \
+ file://4-Add-rendering-debug-logging.patch;patch=1 \
+ file://5-Add-support-for-loading-multiple-independent-layouts.patch;patch=1 \
+ file://6-Add-layout-switch-key-to-all-layouts.patch;patch=1 \
+ "
S = "${WORKDIR}/${PN}"
diff --git a/packages/matchbox-keyboard/mboxkbd-layouts-gui_git.bb b/packages/matchbox-keyboard/mboxkbd-layouts-gui_git.bb
new file mode 100644
index 0000000000..661f5f9017
--- /dev/null
+++ b/packages/matchbox-keyboard/mboxkbd-layouts-gui_git.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "matchbox-keyboard layouts control application"
+AUTHOR = "Sergey Lapin"
+SECTION = "x11"
+LICENSE = "GPL"
+DEPENDS = "gtk+"
+PR = "r3"
+
+SRC_URI = "git://ossfans.org/home/slapin/git/mk-layouts-gui.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
diff --git a/packages/matchbox-panel-hacks/matchbox-panel-hacks-0.3-1/xrandr-panelapp.sh b/packages/matchbox-panel-hacks/matchbox-panel-hacks-0.3-1/xrandr-panelapp.sh
index d17c805ffc..fbf88d6d08 100755
--- a/packages/matchbox-panel-hacks/matchbox-panel-hacks-0.3-1/xrandr-panelapp.sh
+++ b/packages/matchbox-panel-hacks/matchbox-panel-hacks-0.3-1/xrandr-panelapp.sh
@@ -1,9 +1,8 @@
#!/bin/sh
-if [ -n "$(xrandr | grep rotation | grep left)" ]
-then
-xrandr -o normal
-xmodmap /etc/X11/xmodmap-portrait
+if [ -n "$(xrandr | grep default | grep 'left\ (')" ] ; then
+ xrandr -o normal
+ xmodmap /etc/X11/xmodmap-portrait
else
-xrandr -o left
-xmodmap /etc/X11/xmodmap-left
+ xrandr -o left
+ xmodmap /etc/X11/xmodmap-left
fi
diff --git a/packages/matchbox-panel-hacks/matchbox-panel-hacks_0.3-1.bb b/packages/matchbox-panel-hacks/matchbox-panel-hacks_0.3-1.bb
index f5c1209255..2fd7926707 100644
--- a/packages/matchbox-panel-hacks/matchbox-panel-hacks_0.3-1.bb
+++ b/packages/matchbox-panel-hacks/matchbox-panel-hacks_0.3-1.bb
@@ -5,7 +5,7 @@ PRIORITY = "optional"
DEPENDS = "matchbox xmodmap"
-PR = "r6"
+PR = "r7"
SRC_URI = "file://xrandr-panelapp.sh \
file://xrandr-panelapp.desktop \
diff --git a/packages/matchbox-panel/matchbox-panel_0.9.3.bb b/packages/matchbox-panel/matchbox-panel_0.9.3.bb
index bed04323a7..c6b0ee305e 100644
--- a/packages/matchbox-panel/matchbox-panel_0.9.3.bb
+++ b/packages/matchbox-panel/matchbox-panel_0.9.3.bb
@@ -1,4 +1,4 @@
require matchbox-panel.inc
-PR="r2"
+PR="r3"
SRC_URI = "http://projects.o-hand.com/matchbox/sources/${PN}/0.9/${PN}-${PV}.tar.gz \
file://mb-applet-battery-repaint-093.patch;patch=1"
diff --git a/packages/matchbox-themes-extra/matchbox-theme-sato_0.1.bb b/packages/matchbox-themes-extra/matchbox-theme-sato_0.1.bb
new file mode 100644
index 0000000000..9e4774efd7
--- /dev/null
+++ b/packages/matchbox-themes-extra/matchbox-theme-sato_0.1.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Matchbox window manager Sato themes"
+LICENSE = "CC-BY-SA3"
+DEPENDS = "matchbox-wm"
+SECTION = "x11/wm"
+
+PACKAGE_ARCH = "all"
+
+SRC_URI = "http://pokylinux.org/releases/sato/matchbox-theme-sato-0.1.tar.gz"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/themes"
+
diff --git a/packages/matchbox-themes-extra/matchbox-theme-sato_svn.bb b/packages/matchbox-themes-extra/matchbox-theme-sato_svn.bb
new file mode 100644
index 0000000000..39b035bc7a
--- /dev/null
+++ b/packages/matchbox-themes-extra/matchbox-theme-sato_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Matchbox window manager Sato theme"
+LICENSE = "GPL"
+DEPENDS = "matchbox-wm"
+SECTION = "x11/wm"
+
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+PACKAGE_ARCH = "all"
+
+SRC_URI = "svn://svn.o-hand.com/repos/sato/trunk;module=matchbox-sato;proto=http"
+S = "${WORKDIR}/matchbox-sato"
+
+inherit autotools pkgconfig
+
+FILES_${PN} = "${datadir}/themes/Sato"
+
+
diff --git a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
index fb91f03b12..c695388780 100644
--- a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
+++ b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
@@ -6,6 +6,9 @@ SECTION = "x11/wm"
SRC_URI = "http://projects.o-hand.com/matchbox/sources/matchbox-themes-extra/${PV}/matchbox-themes-extra-${PV}.tar.bz2"
S = "${WORKDIR}/matchbox-themes-extra-${PV}"
+PR = "r1"
+PACKAGE_ARCH = "all"
+
inherit autotools pkgconfig
# split into several packages plus one meta package
diff --git a/packages/matchbox-wm/matchbox-wm/gconf-2.m4 b/packages/matchbox-wm/matchbox-wm/gconf-2.m4
new file mode 100644
index 0000000000..aca7c7da45
--- /dev/null
+++ b/packages/matchbox-wm/matchbox-wm/gconf-2.m4
@@ -0,0 +1,39 @@
+dnl AM_GCONF_SOURCE_2
+dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas
+dnl (i.e. pass to gconftool-2
+dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where
+dnl you should install foo.schemas files
+dnl
+
+AC_DEFUN([AM_GCONF_SOURCE_2],
+[
+ if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then
+ GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+ else
+ GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE
+ fi
+
+ AC_ARG_WITH(gconf-source,
+ [ --with-gconf-source=sourceaddress Config database for installing schema files.],GCONF_SCHEMA_CONFIG_SOURCE="$withval",)
+
+ AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE)
+ AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation])
+
+ if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then
+ GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas'
+ fi
+
+ AC_ARG_WITH(gconf-schema-file-dir,
+ [ --with-gconf-schema-file-dir=dir Directory for installing schema files.],GCONF_SCHEMA_FILE_DIR="$withval",)
+
+ AC_SUBST(GCONF_SCHEMA_FILE_DIR)
+ AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files])
+
+ AC_ARG_ENABLE(schemas-install,
+ [ --disable-schemas-install Disable the schemas installation],
+ [case ${enableval} in
+ yes|no) ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-schemas-install) ;;
+ esac])
+ AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "$enable_schemas_install" != no])
+])
diff --git a/packages/matchbox-wm/matchbox-wm_1.2.bb b/packages/matchbox-wm/matchbox-wm_1.2.bb
new file mode 100644
index 0000000000..83eb403c5f
--- /dev/null
+++ b/packages/matchbox-wm/matchbox-wm_1.2.bb
@@ -0,0 +1,42 @@
+require matchbox-wm.inc
+
+DEPENDS = "libmatchbox virtual/libx11 libxext libxcomposite libxfixes libxdamage libxrender startup-notification expat gconf gconf-native matchbox-common"
+RDEPENDS = "matchbox-common"
+
+PR="r1"
+
+SRC_URI = "http://projects.o-hand.com/matchbox/sources/matchbox-window-manager/1.2/matchbox-window-manager-${PV}.tar.bz2 \
+ file://gconf-2.m4 \
+ file://kbdconfig"
+
+S = "${WORKDIR}/matchbox-window-manager-${PV}"
+
+inherit autotools pkgconfig update-alternatives
+
+FILES_${PN} = "${bindir}/* \
+ ${datadir}/matchbox \
+ ${sysconfdir}/matchbox \
+ ${sysconfdir}/gconf/ \
+ ${datadir}/themes/blondie/matchbox \
+ ${datadir}/themes/Default/matchbox \
+ ${datadir}/themes/MBOpus/matchbox"
+
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PATH = "${bindir}/matchbox-session"
+ALTERNATIVE_PRIORITY = "10"
+
+EXTRA_OECONF = " \
+ --enable-startup-notification\
+ --enable-gconf \
+ --enable-expat \
+ --disable-xrm"
+
+do_configure_prepend () {
+ cp ${WORKDIR}/gconf-2.m4 ${S}/
+}
+
+do_install_prepend() {
+ install ${WORKDIR}/kbdconfig ${S}/data/kbdconfig
+}
+
diff --git a/packages/matchbox2/matchbox-desktop-2_svn.bb b/packages/matchbox2/matchbox-desktop-2_svn.bb
new file mode 100644
index 0000000000..31a6b9836d
--- /dev/null
+++ b/packages/matchbox2/matchbox-desktop-2_svn.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Matchbox Window Manager Desktop"
+LICENSE = "GPL"
+SECTION = "x11/panels"
+DEPENDS = "gtk+ startup-notification"
+
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http"
+S = "${WORKDIR}/${PN}"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-startup-notification --disable-libnotify"
+
+PARALLEL_MAKE = ""
+
+# matchbox-<anything>-2 aims to replace their -1 counterpart, but at this point in time it's unfinished and unusable, so make it parallel installable
+do_install_append() {
+ mv ${D}${bindir}/matchbox-desktop ${D}${bindir}/matchbox-desktop-2
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/matchbox2/matchbox-panel-2_svn.bb b/packages/matchbox2/matchbox-panel-2_svn.bb
index 1a92be3e37..44d23e1a55 100644
--- a/packages/matchbox2/matchbox-panel-2_svn.bb
+++ b/packages/matchbox2/matchbox-panel-2_svn.bb
@@ -1,19 +1,21 @@
DESCRIPTION = "matchbox-panel-2 is a lightweight dock (system tray) application based on Gtk+"
LICENSE = "GPL"
SECTION = "x11/panels"
-DEPENDS = "gtk+"
-
-RREPLACES = "matchbox-panel"
-
+DEPENDS = "gtk+ apmd startup-notification"
PV = "0.1+svn${SRCDATE}"
-PR = "r2"
+PR = "r8"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http"
S = "${WORKDIR}/${PN}"
inherit autotools pkgconfig
-EXTRA_OECONF = "--disable-startup-notification --disable-libnotify"
+EXTRA_OECONF = "--enable-startup-notification --disable-libnotify"
+
+# matchbox-<anything>-2 aims to replace their -1 counterpart, but at this point in time it's unfinished and unusable, so make it parallel installable
+do_install_append() {
+ mv ${D}${bindir}/matchbox-panel ${D}${bindir}/matchbox-panel-2
+}
do_stage() {
autotools_stage_all
@@ -21,4 +23,5 @@ do_stage() {
PACKAGES += "${PN}-applets"
FILES_${PN}-applets = "${libdir}/matchbox-panel/lib*.so* ${datadir}/*"
+FILES_${PN}-dev += "${libdir}/matchbox-panel/lib*.a ${libdir}/matchbox-panel/lib*.la"
diff --git a/packages/mb-desktop-xine/mb-desktop-xine_0.4.bb b/packages/mb-desktop-xine/mb-desktop-xine_0.4.bb
index 885177de01..e7a933ee0c 100644
--- a/packages/mb-desktop-xine/mb-desktop-xine_0.4.bb
+++ b/packages/mb-desktop-xine/mb-desktop-xine_0.4.bb
@@ -1,8 +1,6 @@
DESCRIPTION = "foo"
-LICENSE = "GPL"
HOMEPAGE = "http://projects.o-hand.com/matchbox/"
-
-SRC_URI="http://projects.o-hand.com/matchbox/sources/mb-desktop-xine/0.4/mb-desktop-xine-${PV}.tar.bz2"
+LICENSE = "GPL"
DEPENDS = "matchbox-desktop libxine-x11"
RDEPENDS = "libxine-plugin-vo-out-xshm \
libxine-plugin-vo-out-none \
@@ -27,10 +25,11 @@ RDEPENDS = "libxine-plugin-vo-out-xshm \
libxine-plugin-dmx-avi \
libxine-plugin-ao-out-oss \
matchbox-desktop "
+PR = "r1"
+SRC_URI="http://projects.o-hand.com/matchbox/sources/mb-desktop-xine/0.4/mb-desktop-xine-${PV}.tar.bz2"
FILES_${PN} += " /usr/share/themes/mbmediabox/matchbox/ \
/usr/share/matchbox/desktop/modules/*.so"
-
inherit autotools pkgconfig
diff --git a/packages/mdk/mdk2_v33.bb b/packages/mdk/mdk2_v33.bb
index bd665e2ccd..02a784d5e3 100644
--- a/packages/mdk/mdk2_v33.bb
+++ b/packages/mdk/mdk2_v33.bb
@@ -2,7 +2,6 @@ SECTION = "console/network"
DESCRIPTION = "ASPj is drunk"
HOMEPAGE = "http://homepages.tu-darmstadt.de/~p_larbig/wlan/"
LICENSE = "GPLv2"
-MAINTAINER = "Zero_Chaos <sidhayn@gmail.com>"
DEPENDS = ""
RDEPENDS = ""
PR="r1"
diff --git a/packages/mediatomb/mediatomb_0.9.0.bb b/packages/mediatomb/mediatomb_0.9.0.bb
new file mode 100644
index 0000000000..f3ea9f54dd
--- /dev/null
+++ b/packages/mediatomb/mediatomb_0.9.0.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "MediaTomb - UPnP AV MediaServer for Linux"
+HOMEPAGE = "http://mediatomb.cc/"
+LICENSE = "GPLv2"
+DEPENDS = "sqlite3 libexif js zlib file id3lib"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mediatomb/mediatomb-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-mysql \
+ --disable-rpl-malloc \
+ --enable-sqlite3 \
+ --enable-libjs \
+ --enable-libmagic \
+ --enable-id3lib \
+ --enable-libexif \
+ --disable-largefile \
+ --with-sqlite3-h=${STAGING_INCDIR} \
+ --with-sqlite3-libs=${STAGING_LIBDIR} \
+ --with-magic-h=${STAGING_INCDIR} \
+ --with-magic-libs=${STAGING_LIBDIR} \
+ --with-exif-h=${STAGING_INCDIR} \
+ --with-exif-libs=${STAGING_LIBDIR} \
+ --with-zlib-h=${STAGING_INCDIR} \
+ --with-zlib-libs=${STAGING_LIBDIR} \
+ --with-js-h=${STAGING_INCDIR}/js \
+ --with-js-libs=${STAGING_LIBDIR} \
+ --with-id3lib-h=${STAGING_INCDIR} \
+ --with-id3lib-libs=${STAGING_LIBDIR}"
diff --git a/packages/mediatomb/mediatomb_0.9.1.bb b/packages/mediatomb/mediatomb_0.9.1.bb
new file mode 100644
index 0000000000..f3ea9f54dd
--- /dev/null
+++ b/packages/mediatomb/mediatomb_0.9.1.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "MediaTomb - UPnP AV MediaServer for Linux"
+HOMEPAGE = "http://mediatomb.cc/"
+LICENSE = "GPLv2"
+DEPENDS = "sqlite3 libexif js zlib file id3lib"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mediatomb/mediatomb-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--disable-mysql \
+ --disable-rpl-malloc \
+ --enable-sqlite3 \
+ --enable-libjs \
+ --enable-libmagic \
+ --enable-id3lib \
+ --enable-libexif \
+ --disable-largefile \
+ --with-sqlite3-h=${STAGING_INCDIR} \
+ --with-sqlite3-libs=${STAGING_LIBDIR} \
+ --with-magic-h=${STAGING_INCDIR} \
+ --with-magic-libs=${STAGING_LIBDIR} \
+ --with-exif-h=${STAGING_INCDIR} \
+ --with-exif-libs=${STAGING_LIBDIR} \
+ --with-zlib-h=${STAGING_INCDIR} \
+ --with-zlib-libs=${STAGING_LIBDIR} \
+ --with-js-h=${STAGING_INCDIR}/js \
+ --with-js-libs=${STAGING_LIBDIR} \
+ --with-id3lib-h=${STAGING_INCDIR} \
+ --with-id3lib-libs=${STAGING_LIBDIR}"
diff --git a/packages/memedit/.mtn2git_empty b/packages/memedit/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/memedit/.mtn2git_empty
diff --git a/packages/memedit/memedit_0.7.bb b/packages/memedit/memedit_0.7.bb
new file mode 100644
index 0000000000..75fb676df8
--- /dev/null
+++ b/packages/memedit/memedit_0.7.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Display and change memory content for testing purpose"
+HOMEPAGE = "http://www.pengutronix.de/software/memedit/downloads/"
+LICENSE = "GPLv2"
+SECTION = "devel"
+DEPENDS = "readline"
+
+PR = "r0"
+
+SRC_URI = "http://www.pengutronix.de/software/memedit/downloads/memedit-${PV}.tar.gz"
+
+inherit autotools
diff --git a/packages/mesa/mesa-6.5.2/fix-host-compile.patch b/packages/mesa/mesa-6.5.2/fix-host-compile.patch
new file mode 100644
index 0000000000..d24d03d379
--- /dev/null
+++ b/packages/mesa/mesa-6.5.2/fix-host-compile.patch
@@ -0,0 +1,30 @@
+--- /src/mesa/x86/orig-Makefile 2005-07-01 04:54:38.000000000 +0300
++++ /src/mesa/x86/Makefile 2007-06-07 21:52:31.000000000 +0300
+@@ -5,6 +5,7 @@
+
+
+ INCLUDE_DIRS = \
++ -I/usr/include \
+ -I$(TOP)/include/GL \
+ -I$(TOP)/include \
+ -I.. \
+@@ -13,6 +14,10 @@
+ -I../glapi \
+ -I../tnl
+
++OPT_FLAGS_host = -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os
++
++CFLAGS_host = -Wall -Wmissing-prototypes $(OPT_FLAGS_host) $(PIC_FLAGS) $(ARCH_FLAGS) \
++ $(DEFINES) $(ASM_FLAGS) $(X11_INCLUDES) -std=c99 -ffast-math
+
+ default: gen_matypes matypes.h
+
+@@ -21,7 +26,7 @@
+
+
+ gen_matypes: gen_matypes.c
+- $(CC) $(INCLUDE_DIRS) $(CFLAGS) gen_matypes.c -o gen_matypes
++ $(CC) $(INCLUDE_DIRS) $(CFLAGS_host) gen_matypes.c -o gen_matypes
+
+ # need some special rules here, unfortunately
+ matypes.h: ../main/mtypes.h ../tnl/t_context.h gen_matypes
diff --git a/packages/mesa/mesa-mesa.inc b/packages/mesa/mesa-mesa.inc
index a4163f576e..d794f0c097 100644
--- a/packages/mesa/mesa-mesa.inc
+++ b/packages/mesa/mesa-mesa.inc
@@ -13,7 +13,7 @@ FILES_libosmesa-dev = "${libdir}/libOSMesa.* ${includedir}/osmesa.h"
do_configure() {
cd configs
- ln -sf linux current
+ cp linux current
sed -e "s%CC *= *.*%CC = ${CC}%" -i current
sed -e "s%CXX *= *.*%CXX = ${CXX}%" -i current
sed -e "s%LD *= *.*%LD = ${LD}%" -i current
diff --git a/packages/mesa/mesa_6.5.2.bb b/packages/mesa/mesa_6.5.2.bb
index 1c245f003b..79993cc1f1 100644
--- a/packages/mesa/mesa_6.5.2.bb
+++ b/packages/mesa/mesa_6.5.2.bb
@@ -1,3 +1,8 @@
-PR = "r0"
+PR = "r1"
include mesa-mesa.inc
+
+SRC_URI_append = " file://fix-host-compile.patch;patch=1 "
+
+
+
diff --git a/packages/meta/foonas-packages.bb b/packages/meta/foonas-packages.bb
new file mode 100644
index 0000000000..edadb63a1c
--- /dev/null
+++ b/packages/meta/foonas-packages.bb
@@ -0,0 +1,167 @@
+DESCRIPTION = "Packages that are compatible with FooNAS"
+LICENSE = "MIT"
+PR = "r1"
+CONFLICTS = "db3"
+PROVIDES += "${FOONAS_IMAGENAME}-packages"
+
+EXCLUDE_FROM_WORLD = "1"
+INHIBIT_DEFAULT_DEPS = "1"
+ALLOW_EMPTY = "1"
+
+FOONAS_PACKAGES = "\
+ adns \
+ alsa-lib \
+ alsa-utils \
+ apache2 \
+ asterisk \
+ audiofile \
+ aumix \
+ autoconf \
+ automake \
+ bash \
+ bash-completion \
+ bc \
+ beep \
+ bind \
+ binutils \
+ bison \
+ bridge-utils \
+ bonnie++ \
+ bzflag \
+ bzip2 \
+ ccxstream \
+ cdparanoia \
+ cdstatus \
+ cherokee \
+ chillispot \
+ coreutils \
+ cpusage \
+ cpuspeed \
+ cron \
+ ctorrent \
+ cvs \
+ dash \
+ db \
+ dbench \
+ devlabel \
+ dhcpcd \
+ dialog \
+ diffstat \
+ diffutils \
+ dircproxy \
+ dnsmasq \
+ dosfstools \
+ e2fsprogs \
+ e2fsprogs-libs \
+ e2tools \
+ eb \
+ ebtables \
+ elvis \
+ expat \
+ ez-ipupdate \
+ fetchmail \
+ file \
+ findutils \
+ flex \
+ flite \
+ gawk \
+ gcc \
+ gdbm \
+ gnu-config \
+ grep \
+ gtk-doc \
+ gzip \
+ hdparm \
+ ipkg-utils \
+ iptables \
+ ircp \
+ joe \
+ jpeg \
+ less \
+ libao \
+ libid3tag \
+ liblockfile \
+ libmad \
+ libmikmod \
+ libogg \
+ libol \
+ libpng \
+ libtool \
+ libupnp \
+ libusb \
+ libvorbis \
+ litestream \
+ lrzsz \
+ lsof \
+ lvm2 \
+ m4 \
+ madplay \
+ mailx \
+ make \
+ mdadm \
+ mgetty \
+ miau \
+ microcom \
+ minicom \
+ modphp \
+ mt-daapd \
+ mtd-utils \
+ mutt \
+ nail \
+ nano \
+ ncftp \
+ ncurses \
+ netcat \
+ nmap \
+ ntp \
+ openobex-apps \
+ openldap \
+ openntpd \
+ openobex \
+ openssh \
+ openvpn \
+ patch \
+ pciutils \
+ libpcre \
+ perl \
+ pkgconfig \
+ postgresql \
+ ppp \
+ procps \
+ quilt \
+ rng-tools \
+ rsync \
+ sed \
+ setserial \
+ smartmontools \
+ ssmtp \
+ strace \
+ streamripper \
+ sysfsutils \
+ syslog-ng \
+ tar \
+ thttpd \
+ tzdata \
+ tiff \
+ unzip \
+ usbutils \
+ util-linux \
+ vim \
+ vlan \
+ watchdog \
+ wget \
+ wireless-tools \
+ zip \
+ zlib \
+ "
+
+FOONAS_EXTRA_PACKAGES ?= ""
+
+# The package-index at the end causes regeneration of the Packages.gz and
+# other control files.
+DEPENDS = "\
+ foonas-image \
+ ${FOONAS_PACKAGES} \
+ ${FOONAS_EXTRA_PACKAGES} \
+ package-index \
+ "
diff --git a/packages/meta/meta-e-x11-core.bb b/packages/meta/meta-e-x11-core.bb
index 21960c6573..cdc76402e1 100644
--- a/packages/meta/meta-e-x11-core.bb
+++ b/packages/meta/meta-e-x11-core.bb
@@ -4,7 +4,7 @@ ALLOW_EMPTY = "1"
PR = "r1"
PACKAGE_ARCH = "all"
LICENSE = "MIT"
-BUILD_ALL_DEPS="1"
-DEPENDS = "task-e-x11-core"
RDEPENDS = "task-e-x11-core"
+
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-e-x11.bb b/packages/meta/meta-e-x11.bb
index 0edfd43496..1182b0cf42 100644
--- a/packages/meta/meta-e-x11.bb
+++ b/packages/meta/meta-e-x11.bb
@@ -4,7 +4,7 @@ ALLOW_EMPTY = "1"
PR = "r1"
PACKAGE_ARCH = "all"
LICENSE = "MIT"
-BUILD_ALL_DEPS = "1"
-DEPENDS = "task-e-x11"
RDEPENDS = "task-e-x11"
+
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-gpe-extras.bb b/packages/meta/meta-gpe-extras.bb
index 0adb7c4e05..b4425a682e 100644
--- a/packages/meta/meta-gpe-extras.bb
+++ b/packages/meta/meta-gpe-extras.bb
@@ -2,15 +2,10 @@ DESCRIPTION = "Meta-package of extra applications for the GPE Palmtop Environmen
LICENSE = "MIT"
PR="r2"
-ALLOW_EMPTY = "1"
-BUILD_ALL_DEPS = "1"
-
-DEPENDS = "task-gpe"
-
RDEPENDS = "\
gpe-task-apps-extra \
gpe-task-games \
gpe-task-web \
gpe-task-desktopapps"
-
+inherit meta
diff --git a/packages/meta/meta-gpe.bb b/packages/meta/meta-gpe.bb
index 2360db447f..15e9fd1911 100644
--- a/packages/meta/meta-gpe.bb
+++ b/packages/meta/meta-gpe.bb
@@ -1,17 +1,13 @@
DESCRIPTION = "Meta-package for GPE Palmtop Environment"
LICENSE = "MIT"
-PR = "r42"
-
-ALLOW_EMPTY = "1"
-BUILD_ALL_DEPS = "1"
-
-DEPENDS = "task-gpe"
+PR = "r43"
RDEPENDS = "\
- gpe-base-depends \
- gpe-task-base \
- gpe-task-settings \
- gpe-task-pim \
- gpe-task-apps \
- gpe-task-games \
- gpe-task-connectivity"
+ task-gpe-base \
+ task-gpe-settings \
+ task-gpe-pim \
+ task-gpe-apps \
+ task-gpe-games \
+ task-gpe-connectivity"
+
+inherit meta
diff --git a/packages/meta/meta-gpephone.bb b/packages/meta/meta-gpephone.bb
index 96e393bf47..9912ddbf30 100644
--- a/packages/meta/meta-gpephone.bb
+++ b/packages/meta/meta-gpephone.bb
@@ -1,15 +1,11 @@
DESCRIPTION = "Meta-package for GPE Palmtop Environment Phone packages"
LICENSE = "MIT"
-PR = "r0"
-
-ALLOW_EMPTY = "1"
-BUILD_ALL_DEPS = "1"
-
-DEPENDS = "task-gpe"
+PR = "r1"
RDEPENDS = "\
- gpe-base-depends \
gpephone-task-base \
gpephone-task-settings \
gpephone-task-pim \
- gpeph-task-connectivity"
+ gpephone-task-connectivity"
+
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-opie-all.bb b/packages/meta/meta-opie-all.bb
index 6f315d3306..ccdbbe973d 100644
--- a/packages/meta/meta-opie-all.bb
+++ b/packages/meta/meta-opie-all.bb
@@ -1,14 +1,16 @@
DESCRIPTION = "Meta-package for QPE stuff"
SECTION = "opie/base"
-ALLOW_EMPTY = "1"
-PACKAGE_ARCH = "all"
LICENSE = "MIT"
-DEPENDS = "task-qpe"
PR = "r3"
-BUILD_ALL_DEPS = "1"
-
-RDEPENDS = "task-qpe-applets task-qpe-games task-qpe-inputmethods \
- task-qpe-multimedia task-qpe-emulators task-qpe-applications \
- task-qpe-fonts task-qpe-settings"
+RDEPENDS = " \
+ task-qpe-applets \
+ task-qpe-games \
+ task-qpe-inputmethods \
+ task-qpe-multimedia \
+ task-qpe-emulators \
+ task-qpe-applications \
+ task-qpe-fonts \
+ task-qpe-settings"
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-opie.bb b/packages/meta/meta-opie.bb
index 1158d859a0..6a9c35c5e3 100644
--- a/packages/meta/meta-opie.bb
+++ b/packages/meta/meta-opie.bb
@@ -1,12 +1,8 @@
DESCRIPTION = "Meta-package for Opie"
SECTION = "opie/base"
-ALLOW_EMPTY = "1"
PR = "r34"
-PACKAGE_ARCH = "all"
LICENSE = "MIT"
-BUILD_ALL_DEPS = "1"
-DEPENDS = "task-opie"
RDEPENDS = "task-opie-applets task-opie-apps task-opie-base \
task-opie-base-applets task-opie-base-apps \
task-opie-base-decorations task-opie-base-inputmethods \
@@ -19,3 +15,4 @@ RDEPENDS = "task-opie-applets task-opie-apps task-opie-base \
task-opie-multimedia task-opie-pim task-opie-settings \
task-opie-styles task-opie-todayplugins task-opie-wlan"
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-sdk-gpe.bb b/packages/meta/meta-sdk-gpe.bb
new file mode 100644
index 0000000000..7b5ac70f48
--- /dev/null
+++ b/packages/meta/meta-sdk-gpe.bb
@@ -0,0 +1,106 @@
+DESCRIPTION = "Meta package for SDK including GPE"
+LICENSE = "MIT"
+DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
+PR = "r1"
+
+inherit rootfs_ipk sdk meta
+
+SDK_DIR = "${WORKDIR}/sdk"
+SDK_OUTPUT = "${SDK_DIR}/image"
+SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
+
+IPKG_HOST = "ipkg-cl -f ${SDK_DIR}/ipkg-host.conf -o ${SDK_OUTPUT}"
+IPKG_TARGET = "ipkg-cl -f ${SDK_DIR}/ipkg-target.conf -o ${SDK_OUTPUT}/${prefix}"
+
+HOST_INSTALL = "\
+ binutils-cross-sdk \
+ gcc-cross-sdk \
+ gdb-cross"
+
+TARGET_INSTALL = "\
+ task-sdk-base \
+ task-sdk-x11 \
+ task-sdk-x11-ext \
+ task-sdk-gpe \
+ task-sdk-gpephone"
+
+RDEPENDS = "${TARGET_INSTALL} ${HOST_INSTALL}"
+
+sdk_do_indexes () {
+ set -ex
+ rootfs_ipk_do_indexes
+ sdk_ipk_do_indexes
+ set +ex
+}
+
+do_populate_sdk() {
+ sdk_do_indexes
+
+ rm -rf ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ priority=1
+ for arch in $ipkgarchs; do
+ echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
+ echo "arch ${BUILD_ARCH}-$arch-sdk $priority" >> ${SDK_DIR}/ipkg-host.conf
+ priority=$(expr $priority + 5)
+ if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
+ echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
+ fi
+ if [ -e ${DEPLOY_DIR_IPK}/${BUILD_ARCH}-$arch-sdk/Packages ] ; then
+ echo "src oe-$arch-sdk file:${DEPLOY_DIR_IPK}/${BUILD_ARCH}-$arch-sdk" >> ${SDK_DIR}/ipkg-host.conf
+ fi
+ done
+
+ rm -rf ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ ${IPKG_HOST} update
+ ${IPKG_HOST} -nodeps install ${HOST_INSTALL}
+
+ ${IPKG_TARGET} update
+ ${IPKG_TARGET} install ${TARGET_INSTALL}
+
+ mkdir -p ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
+ cp -pPR ${SDK_OUTPUT}/${prefix}/usr/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
+ rm -rf ${SDK_OUTPUT}/${prefix}/usr/
+
+ cp -pPR ${SDK_OUTPUT}/${prefix}/lib/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib
+ rm -rf ${SDK_OUTPUT}/${prefix}/lib/*
+
+ mv ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/gcc* ${SDK_OUTPUT}/${prefix}/lib
+
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/linux/ ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/asm/ ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/
+ chmod -R a+r ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/
+ find ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/include/ -type d | xargs chmod +x
+
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libc.so
+ # remove unwanted housekeeping files
+ mv ${SDK_OUTPUT}${libdir}/../${TARGET_SYS}/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
+ rm -rf ${SDK_OUTPUT}${libdir}/ipkg
+
+ # remove unwanted executables
+ rm -rf ${SDK_OUTPUT}/${prefix}/sbin ${SDK_OUTPUT}/${prefix}/etc
+
+ # remove broken .la files
+ rm ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/*.la
+
+ # fix pkgconfig data files
+ cd ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/pkgconfig
+ for f in *.pc ; do
+ sed -i 's%=/usr%=${prefix}/${TARGET_SYS}%g' "$f"
+ done
+ for f in *.pc ; do
+ sed -i 's%${STAGING_DIR}%/usr/local/${TARGET_ARCH}/oe%g' "$f"
+ done
+
+ mkdir -p ${SDK_DEPLOY}
+ cd ${SDK_OUTPUT}
+ fakeroot tar cfj ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${TARGET_ARCH}-oe-sdk-${DATE}.tar.bz2 .
+}
+
+do_populate_sdk[nostamp] = "1"
+do_populate_sdk[recrdeptask] = "do_package_write"
+addtask populate_sdk before do_package_write after do_install
diff --git a/packages/meta/meta-sdk-sbox-gpe.bb b/packages/meta/meta-sdk-sbox-gpe.bb
new file mode 100644
index 0000000000..c9b7737af2
--- /dev/null
+++ b/packages/meta/meta-sdk-sbox-gpe.bb
@@ -0,0 +1,101 @@
+DESCRIPTION = "Meta package for a Scratchbox GPE SDK"
+LICENSE = "MIT"
+PACKAGES = ""
+PR = "r0"
+
+inherit rootfs_ipk sdk meta
+
+SDK_DIR = "${WORKDIR}/sdk"
+SDK_OUTPUT = "${SDK_DIR}/image"
+SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
+prefix = "/"
+exec_prefix = "${prefix}"
+base_prefix = "${exec_prefix}"
+FILES_${PN} = "${prefix}"
+
+TARGET_INSTALL = "\
+ task-sdk-base \
+ task-sdk-sbox \
+ task-sdk-sbox-gpe \
+ task-sdk-x11 \
+ task-sdk-x11-ext \
+ task-sdk-gpe \
+ task-sdk-gpephone"
+
+DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
+RDEPENDS = "${TARGET_INSTALL}"
+
+
+IPKG_TARGET = "ipkg-cl -f ${SDK_DIR}/ipkg-target.conf -o ${SDK_OUTPUT}/${prefix}"
+
+do_populate_sdk() {
+
+ set -ex
+ rootfs_ipk_do_indexes
+ set +ex
+
+ rm -rf ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ cat <<EOF >${SDK_DIR}/ipkg-target.conf
+src oe file:${DEPLOY_DIR_IPK}
+EOF
+ ipkgarchs="${PACKAGE_ARCHS}"
+ priority=1
+ for arch in $ipkgarchs; do
+ echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
+ priority=$(expr $priority + 5)
+ if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
+ echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
+ fi
+ done
+
+ rm -r ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ ${IPKG_TARGET} update
+ ${IPKG_TARGET} install ${TARGET_INSTALL}
+
+ mkdir -p ${SDK_OUTPUT}/${prefix}/usr/include
+ #cp -pPR ${SDK_OUTPUT}/${prefix}/usr/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
+ #rm -rf ${SDK_OUTPUT}/${prefix}/usr/
+
+ #cp -pPR ${SDK_OUTPUT}/${prefix}/lib/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib
+ #rm -rf ${SDK_OUTPUT}/${prefix}/lib/*
+
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/linux/ ${SDK_OUTPUT}/${prefix}/usr/include/
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/asm/ ${SDK_OUTPUT}/${prefix}/usr/include/
+ chmod -R a+r ${SDK_OUTPUT}/${prefix}/usr/include/
+ find ${SDK_OUTPUT}/${prefix}/usr/include/ -type d | xargs chmod +x
+
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/lib/libc.so
+ # remove unwanted housekeeping files
+ mv ${SDK_OUTPUT}${libdir}/../*/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
+ rm -rf ${SDK_OUTPUT}${libdir}/ipkg
+
+ # remove unwanted executables
+ rm -rf ${SDK_OUTPUT}/${prefix}/sbin ${SDK_OUTPUT}/${prefix}/etc
+
+ # fixup libtool files
+ rm ${SDK_OUTPUT}/${prefix}/usr/lib/*.la
+ #cd ${SDK_OUTPUT}/${prefix}/usr/lib/
+ #for f in *.la ; do
+ # sed -i 's%${STAGING_DIR}/${TARGET_SYS}%/usr/%g' "$f"
+ #done
+
+
+ # fix pkgconfig data files
+ cd ${SDK_OUTPUT}/${prefix}/usr/lib/pkgconfig
+ for f in *.pc ; do
+ sed -i 's%${STAGING_DIR}%/usr/%g' "$f"
+ done
+
+ mkdir -p ${SDK_DEPLOY}
+ cd ${SDK_OUTPUT}
+ fakeroot tar cfz ${SDK_DEPLOY}/sbox-gpesdk-${DISTRO}-${DISTRO_VERSION}-${TARGET_ARCH}.tar.gz .
+}
+
+do_populate_sdk[nostamp] = "1"
+do_populate_sdk[recrdeptask] = "do_package_write"
+addtask populate_sdk before do_build after do_install
diff --git a/packages/meta/meta-sdk-sbox.bb b/packages/meta/meta-sdk-sbox.bb
new file mode 100644
index 0000000000..c0cb27d404
--- /dev/null
+++ b/packages/meta/meta-sdk-sbox.bb
@@ -0,0 +1,97 @@
+DESCRIPTION = "Meta package for a Scratchbox SDK"
+LICENSE = "MIT"
+PACKAGES = ""
+PR = "r6"
+
+inherit rootfs_ipk sdk meta
+
+SDK_DIR = "${WORKDIR}/sdk"
+SDK_OUTPUT = "${SDK_DIR}/image"
+SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
+prefix = "/"
+exec_prefix = "${prefix}"
+base_prefix = "${exec_prefix}"
+FILES_${PN} = "${prefix}"
+
+TARGET_INSTALL = "\
+ task-sdk-bare \
+ task-sdk-sbox \
+ "
+
+DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
+RDEPENDS = "${TARGET_INSTALL}"
+
+
+IPKG_TARGET = "ipkg-cl -f ${SDK_DIR}/ipkg-target.conf -o ${SDK_OUTPUT}/${prefix}"
+
+do_populate_sdk() {
+
+ set -ex
+ rootfs_ipk_do_indexes
+ set +ex
+
+ rm -rf ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ cat <<EOF >${SDK_DIR}/ipkg-target.conf
+src oe file:${DEPLOY_DIR_IPK}
+EOF
+ ipkgarchs="${PACKAGE_ARCHS}"
+ priority=1
+ for arch in $ipkgarchs; do
+ echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
+ priority=$(expr $priority + 5)
+ if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
+ echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
+ fi
+ done
+
+ rm -r ${SDK_OUTPUT}
+ mkdir -p ${SDK_OUTPUT}
+
+ ${IPKG_TARGET} update
+ ${IPKG_TARGET} install ${TARGET_INSTALL}
+
+ mkdir -p ${SDK_OUTPUT}/${prefix}/usr/include
+ #cp -pPR ${SDK_OUTPUT}/${prefix}/usr/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}
+ #rm -rf ${SDK_OUTPUT}/${prefix}/usr/
+
+ #cp -pPR ${SDK_OUTPUT}/${prefix}/lib/* ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib
+ #rm -rf ${SDK_OUTPUT}/${prefix}/lib/*
+
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/linux/ ${SDK_OUTPUT}/${prefix}/usr/include/
+ cp -pPR ${TMPDIR}/cross/${TARGET_SYS}/include/asm/ ${SDK_OUTPUT}/${prefix}/usr/include/
+ chmod -R a+r ${SDK_OUTPUT}/${prefix}/usr/include/
+ find ${SDK_OUTPUT}/${prefix}/usr/include/ -type d | xargs chmod +x
+
+ echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/lib/libpthread.so
+ echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/lib/libc.so
+ # remove unwanted housekeeping files
+ mv ${SDK_OUTPUT}${libdir}/../*/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
+ rm -rf ${SDK_OUTPUT}${libdir}/ipkg
+
+ # remove unwanted executables
+ rm -rf ${SDK_OUTPUT}/${prefix}/sbin ${SDK_OUTPUT}/${prefix}/etc
+
+ # fixup libtool files
+ rm ${SDK_OUTPUT}/${prefix}/usr/lib/*.la
+ #cd ${SDK_OUTPUT}/${prefix}/usr/lib/
+ #for f in *.la ; do
+ # sed -i 's%${STAGING_DIR}/${TARGET_SYS}%/usr/%g' "$f"
+ #done
+
+
+ # fix pkgconfig data files
+ cd ${SDK_OUTPUT}/${prefix}/usr/lib/pkgconfig
+ for f in *.pc ; do
+ sed -i 's%${STAGING_DIR}%/usr/%g' "$f"
+ done
+
+ mkdir -p ${SDK_DEPLOY}
+ cd ${SDK_OUTPUT}
+ fakeroot tar cfz ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${TARGET_ARCH}-sbox-sdk-${DATE}.tar.gz .
+}
+
+do_populate_sdk[nostamp] = "1"
+do_populate_sdk[recrdeptask] = "do_package_write"
+addtask populate_sdk before do_build after do_install
diff --git a/packages/meta/meta-sdk.bb b/packages/meta/meta-sdk.bb
index 7bf8606418..cc163448ea 100644
--- a/packages/meta/meta-sdk.bb
+++ b/packages/meta/meta-sdk.bb
@@ -1,11 +1,9 @@
-DESCRIPTION = "Meta package for SDK including GPE and Opie"
+DESCRIPTION = "Meta package for bare SDK package"
LICENSE = "MIT"
DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
-PR = "r11"
+PR = "r14"
-PACKAGES = ""
-
-inherit sdk
+inherit rootfs_ipk sdk meta
SDK_DIR = "${WORKDIR}/sdk"
SDK_OUTPUT = "${SDK_DIR}/image"
@@ -18,35 +16,38 @@ HOST_INSTALL = "\
binutils-cross-sdk \
gcc-cross-sdk \
gdb-cross"
+
TARGET_INSTALL = "\
- task-sdk-base \
- task-sdk-opie \
- task-sdk-x11 \
- task-sdk-x11-ext \
- task-sdk-gpe"
+ task-sdk-bare \
+ "
RDEPENDS = "${TARGET_INSTALL} ${HOST_INSTALL}"
-BUILD_ALL_DEPS = "1"
+
+sdk_do_indexes () {
+ set -ex
+ rootfs_ipk_do_indexes
+ sdk_ipk_do_indexes
+ set +ex
+}
do_populate_sdk() {
- touch ${DEPLOY_DIR_IPK}/Packages
- ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
+ sdk_do_indexes
+ echo "Creating host.conf..."
rm -rf ${SDK_OUTPUT}
mkdir -p ${SDK_OUTPUT}
- cat <<EOF >${SDK_DIR}/ipkg-host.conf
-src oe file:${DEPLOY_DIR_IPK}
-arch ${BUILD_ARCH} 1
-EOF
- cat <<EOF >${SDK_DIR}/ipkg-target.conf
-src oe file:${DEPLOY_DIR_IPK}
-EOF
- ipkgarchs="${PACKAGE_ARCHS}"
priority=1
for arch in $ipkgarchs; do
echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
+ echo "arch ${BUILD_ARCH}-$arch-sdk $priority" >> ${SDK_DIR}/ipkg-host.conf
priority=$(expr $priority + 5)
+ if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
+ echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
+ fi
+ if [ -e ${DEPLOY_DIR_IPK}/${BUILD_ARCH}-$arch-sdk/Packages ] ; then
+ echo "src oe-$arch-sdk file:${DEPLOY_DIR_IPK}/${BUILD_ARCH}-$arch-sdk" >> ${SDK_DIR}/ipkg-host.conf
+ fi
done
rm -r ${SDK_OUTPUT}
@@ -75,22 +76,22 @@ EOF
echo 'GROUP ( libpthread.so.0 libpthread_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libpthread.so
echo 'GROUP ( libc.so.6 libc_nonshared.a )' > ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/libc.so
# remove unwanted housekeeping files
- mv ${SDK_OUTPUT}${libdir}/../arm-linux/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
+ mv ${SDK_OUTPUT}${libdir}/../${TARGET_SYS}/lib/ipkg/status ${SDK_OUTPUT}/${prefix}/package-status
rm -rf ${SDK_OUTPUT}${libdir}/ipkg
# remove unwanted executables
rm -rf ${SDK_OUTPUT}/${prefix}/sbin ${SDK_OUTPUT}/${prefix}/etc
# remove broken .la files
- rm ${SDK_OUTPUT}/${prefix}/arm-linux/lib/*.la
+ rm ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/*.la
# fix pkgconfig data files
- cd ${SDK_OUTPUT}/${prefix}/arm-linux/lib/pkgconfig
+ cd ${SDK_OUTPUT}/${prefix}/${TARGET_SYS}/lib/pkgconfig
for f in *.pc ; do
- sed -i 's%=/usr%=${prefix}/arm-linux%g' "$f"
+ sed -i 's%=/usr%=${prefix}/${TARGET_SYS}%g' "$f"
done
for f in *.pc ; do
- sed -i 's%${STAGING_DIR}%/usr/local/arm/oe%g' "$f"
+ sed -i 's%${STAGING_DIR}%/usr/local/${TARGET_ARCH}/oe%g' "$f"
done
mkdir -p ${SDK_DEPLOY}
@@ -99,4 +100,5 @@ EOF
}
do_populate_sdk[nostamp] = "1"
+do_populate_sdk[recrdeptask] = "do_package_write"
addtask populate_sdk before do_build after do_install
diff --git a/packages/meta/meta-sdl.bb b/packages/meta/meta-sdl.bb
index cb19cb6834..a1ab3918b7 100644
--- a/packages/meta/meta-sdl.bb
+++ b/packages/meta/meta-sdl.bb
@@ -1,15 +1,7 @@
DESCRIPTION = "Meta-package for SDL"
LICENSE = "MIT"
-RDEPENDS = "task-sdl-libs task-sdl-games task-sdl-emulators"
PR = "r2"
-ALLOW_EMPTY = "1"
-BUILD_ALL_DEPS = "1"
-
-# no need to add libsdl as all libsdl-* already rdepend on it
-RDEPENDS_task-sdl-libs = "libsdl-gfx libsdl-image libsdl-mixer libsdl-ttf libsdl-net"
-
-RDEPENDS_task-sdl-games = "abuse freedroid lbreakout2 openttd prboom quake1 rott supertux xmame"
-
-RDEPENDS_task-sdl-emulators = "dgen-sdl e-uae frodo snes9x"
+RDEPENDS = "task-sdl-libs task-sdl-games task-sdl-emulators"
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-sectest-gpe.bb b/packages/meta/meta-sectest-gpe.bb
index 70bcfc4bc5..a73559ab1a 100644
--- a/packages/meta/meta-sectest-gpe.bb
+++ b/packages/meta/meta-sectest-gpe.bb
@@ -2,11 +2,6 @@ DESCRIPTION = "Meta-package for GPE Security Testing Image"
LICENSE = "MIT"
PR = "r6"
-ALLOW_EMPTY = "1"
-BUILD_ALL_DEPS = "1"
-
-DEPENDS = "task-gpe"
-
RDEPENDS = "\
gpe-task-base \
gpe-base-depends \
@@ -14,3 +9,5 @@ RDEPENDS = "\
gpe-task-settings \
gpe-task-pim \
gpe-task-sectest"
+
+inherit meta \ No newline at end of file
diff --git a/packages/meta/meta-toolchain.bb b/packages/meta/meta-toolchain.bb
index 7995ac3cb8..e319f1542d 100644
--- a/packages/meta/meta-toolchain.bb
+++ b/packages/meta/meta-toolchain.bb
@@ -3,9 +3,7 @@ LICENSE = "MIT"
DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
PR = "r0"
-PACKAGES = ""
-
-inherit sdk
+inherit rootfs_ipk sdk meta
SDK_DIR = "${WORKDIR}/sdk"
SDK_OUTPUT = "${SDK_DIR}/image"
@@ -23,27 +21,32 @@ TARGET_INSTALL = "\
"
RDEPENDS = "${TARGET_INSTALL} ${HOST_INSTALL}"
-BUILD_ALL_DEPS = "1"
-do_populate_sdk() {
- touch ${DEPLOY_DIR_IPK}/Packages
- ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
+sdk_ipk_do_indexes () {
+ set -ex
+ rootfs_ipk_do_indexes
+ set +ex
+}
+do_populate_sdk() {
+ sdk_ipk_do_indexes
rm -rf ${SDK_OUTPUT}
mkdir -p ${SDK_OUTPUT}
+ echo "Creating host.conf..."
+
cat <<EOF >${SDK_DIR}/ipkg-host.conf
-src oe file:${DEPLOY_DIR_IPK}
+src oe file:${DEPLOY_DIR_IPK}/${BUILD_ARCH}
arch ${BUILD_ARCH} 1
EOF
- cat <<EOF >${SDK_DIR}/ipkg-target.conf
-src oe file:${DEPLOY_DIR_IPK}
-EOF
- ipkgarchs="${PACKAGE_ARCHS}"
+ echo "done."
priority=1
for arch in $ipkgarchs; do
echo "arch $arch $priority" >> ${SDK_DIR}/ipkg-target.conf
- priority=$(expr $priority + 5)
+ priority=$(expr $priority + 5)
+ if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
+ echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${SDK_DIR}/ipkg-target.conf
+ fi
done
rm -r ${SDK_OUTPUT}
@@ -96,4 +99,5 @@ EOF
}
do_populate_sdk[nostamp] = "1"
+do_populate_sdk[recrdeptask] = "do_package_write"
addtask populate_sdk before do_build after do_install
diff --git a/packages/meta/nylon-feed.bb b/packages/meta/nylon-feed.bb
index e07b41be77..2cc11814d9 100644
--- a/packages/meta/nylon-feed.bb
+++ b/packages/meta/nylon-feed.bb
@@ -29,13 +29,16 @@ DEPENDS = "${NYLON_FEED} \
rp-pppoe \
simple-firewall \
thttpd \
- vsftpd \
wget \
wlan-ng-modules \
zlib \
"
+# vsftpd \
+#
+
do_index() {
+ touch ${DEPLOY_DIR_IPK}/Packages
ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
}
diff --git a/packages/meta/nylon-feed.inc b/packages/meta/nylon-feed.inc
index 1983bb7336..de1a7ff484 100644
--- a/packages/meta/nylon-feed.inc
+++ b/packages/meta/nylon-feed.inc
@@ -20,7 +20,6 @@ initscripts \
iperf \
ipkg \
iptables \
-kismet \
ksymoops \
less \
linux-hotplug \
@@ -68,3 +67,5 @@ yamonenv \
# gdb-cross: install paths, sdk?
# screen: sgttyb?
+#kismet \
+#
diff --git a/packages/meta/oplinux-packages.bb b/packages/meta/oplinux-packages.bb
new file mode 100644
index 0000000000..62513c11cd
--- /dev/null
+++ b/packages/meta/oplinux-packages.bb
@@ -0,0 +1,646 @@
+# Meta package containing all the packages which build for OPLinux and OPLinux uclibc distro
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+DESCRIPTION = "Packages that are compatible with the OPLinux distro"
+HOMEPAGE = "http://www.digital-opsis/oplinux"
+LICENSE = "MIT"
+PR = "r1"
+PROVIDES += "${OPLINUX_IMAGENAME}-packages"
+
+EXCLUDE_FROM_WORLD = "1"
+INHIBIT_DEFAULT_DEPS = "1"
+ALLOW_EMPTY = "1"
+
+
+python __anonymous () {
+
+ import bb
+
+ #Get all the packages we can build/exist in OE
+ package_list = bb.data.getVar('PACKAGES_LIST', d) or "none"
+ package_list=package_list.split()
+
+ #Get the packages that are broken on all architectures
+ broken_package_list = bb.data.expand('${OPLINUX_BROKEN_PACKAGES}', d)
+
+ # Get the arch we are building for
+ building_arch = bb.data.getVar('FEED_ARCH',d)
+
+ #Now add the broken packages list the ones that fail for the arch we build now
+ if (building_arch=="i486") or (building_arch=="i586") or (building_arch=="i686"):
+ broken_package_list = broken_package_list + bb.data.expand('${OPLINUX_BROKEN_PACKAGES_ARCH_x86}', d)
+
+ elif (building_arch=="ppc405"):
+ broken_package_list = broken_package_list + bb.data.expand('${OPLINUX_BROKEN_PACKAGES_ARCH_PPC}', d)
+
+ elif (building_arch=="ppc603e"):
+ broken_package_list = broken_package_list + bb.data.expand('${OPLINUX_BROKEN_PACKAGES_ARCH_POWERPC}', d)
+
+
+ for chk_package in package_list :
+ build_package="yes"
+ if chk_package in broken_package_list:
+ build_package="no"
+ else :
+ bb.data.setVar('DEPENDS', (bb.data.getVar('DEPENDS', d) + chk_package +" "), d)
+
+#add the OPLinux extra packages to the DEPENDS list
+ bb.data.setVar('DEPENDS', (bb.data.getVar('DEPENDS', d) + bb.data.getVar('OPLINUX_EXTRA_PACKAGES', d)), d)
+
+
+ bb.data.setVar('DEPENDS', (bb.data.getVar('DEPENDS', d) + "package-index"), d)
+}
+
+
+
+
+
+# The list of packages availiable to OE
+# KEEP IN ALPHABETICAL ORDER
+# Do *not* simply comment out a line. That will break. Instead
+# remove the package and place it in the corresponding "broken" list
+PACKAGES_LIST = "\
+ acct \
+ acpid \
+ adns \
+ aiostress \
+ aircrack \
+ alsa-lib \
+ alsa-utils \
+ apache2 \
+ appweb \
+ apmd \
+ apt \
+ ark3116 \
+ arpwatch \
+ at \
+ atd \
+ atftp \
+ atmelwlandriver \
+ audiofile \
+ aumix \
+ autoconf \
+ automake \
+ autofs \
+ aspell \
+ avahi \
+ bacula-client \
+ balsa \
+ bash \
+ bazaar \
+ bb \
+ bc \
+ beep \
+ beecrypt \
+ beepmp \
+ bind \
+ binutils \
+ bing \
+ bison \
+ bitchx \
+ blueprobe \
+ bmon \
+ boa \
+ bochs \
+ bogofilter \
+ boost \
+ boost-asio \
+ bonnie++ \
+ bootchart \
+ bootmenu \
+ bootsplash \
+ bridge-utils \
+ bt950-cs \
+ btscanner \
+ btsco \
+ btsco-module \
+ btxml \
+ bvi \
+ bwmon \
+ bluez-utils \
+ bzflag \
+ bzflag-server \
+ bzip2 \
+ came \
+ chillispot \
+ camsource \
+ cscope \
+ cups \
+ ccxstream \
+ cdparanoia \
+ cdstatus \
+ cetools \
+ cherokee \
+ ckermit \
+ clish \
+ coreutils \
+ conserver \
+ corkscrew \
+ cpusage \
+ cron \
+ ctorrent \
+ cvs \
+ cyrus-sasl \
+ cyrus-imapd \
+ dialog \
+ db \
+ ddclient \
+ dhclient \
+ dhcp \
+ didiwiki \
+ devlabel \
+ diffstat \
+ diffutils \
+ dnsmasq \
+ ebtables \
+ elftoaout \
+ emul \
+ enscript \
+ e2fsprogs \
+ e2fsprogs-libs \
+ esmtp \
+ etherpuppet \
+ ethload \
+ ethtool \
+ ettercap \
+ expat \
+ ez-ipupdate \
+ fortune-mod \
+ fakeconnect \
+ fbgrab \
+ fetchmail \
+ file \
+ findutils \
+ flac \
+ flex \
+ flite \
+ frotz \
+ fush \
+ g15daemon \
+ gallery \
+ gammu \
+ gawk \
+ gcc \
+ gdb \
+ gdbm \
+ genext2fs \
+ gphoto2 \
+ git \
+ gift \
+ glib-2.0 \
+ gpm \
+ gpsbabel \
+ gs \
+ gnu-config \
+ gnuplot \
+ gpsd \
+ grep \
+ gtk-doc \
+ gzip \
+ hdparm \
+ hydra \
+ ifupdown \
+ iputils \
+ ipkg-utils \
+ iptables \
+ intercom \
+ ircp \
+ irssi \
+ joe \
+ jpeg \
+ kismet \
+ kbdd \
+ ksymoops \
+ lame \
+ lxt \
+ lcdproc \
+ less \
+ libao \
+ libpcre \
+ libid3tag \
+ liblockfile \
+ libmad \
+ libmikmod \
+ libogg \
+ libol \
+ libpng \
+ libtool \
+ libupnp \
+ libusb \
+ libvorbis \
+ litestream \
+ lrzsz \
+ lsof \
+ lvm2 \
+ m4 \
+ madplay \
+ mailx \
+ make \
+ mc \
+ mikmod \
+ mdadm \
+ memtester \
+ mgetty \
+ miau \
+ microcom \
+ minicom \
+ modphp \
+ modplugplay \
+ mp3blaster \
+ mpg321 \
+ mt-daapd \
+ mtd-utils \
+ mutt \
+ mysql \
+ mystun-server \
+ nail \
+ nano \
+ ncftp \
+ ncurses \
+ netcat \
+ nmap \
+ nmixer \
+ ntp \
+ netkit-ftp \
+ netperf \
+ net-snmp \
+ nfs-utils \
+ ngrep \
+ nmap \
+ nsd \
+ ntp \
+ ntpdate \
+ openobex-apps \
+ openldap \
+ openntpd \
+ openobex \
+ obexftp \
+ obexpush \
+ olsrd \
+ openswan \
+ openssh \
+ openvpn \
+ patch \
+ pciutils \
+ pcmcia-cs \
+ portmap \
+ privoxy \
+ perl \
+ pkgconfig \
+ ppp \
+ procps \
+ pvrusb2-mci \
+ pwc \
+ quilt \
+ rng-tools \
+ rsync \
+ samba \
+ sane-backends \
+ sed \
+ setpwc \
+ setserial \
+ shorewall \
+ smartmontools \
+ ssmtp \
+ strace \
+ streamripper \
+ sysfsutils \
+ syslog-ng \
+ stunnel \
+ spandsp \
+ subversion \
+ slutils \
+ strace \
+ sudo \
+ tcpdump \
+ tor \
+ tar \
+ thttpd \
+ tiff \
+ texinfo \
+ unzip \
+ unrar \
+ usbutils \
+ util-linux \
+ vim \
+ vlan \
+ vorbis-tools \
+ vpnc \
+ vsftpd \
+ vtun \
+ watchdog \
+ wget \
+ zd1211-firmware \
+ zip \
+ zlib \
+ zsh \
+ lirc \
+ masqmail \
+ wakelan \
+ wireless-tools \
+ wpa-supplicant \
+ libxml2 \
+ libdvb \
+ madwifi-ng \
+ motion \
+ ftpd-topfield \
+ eciadsl \
+ netpbm \
+ reiserfsprogs reiser4progs \
+ python \
+ mpd \
+ memtester \
+ puppy \
+
+ ctrlproxy \
+ dsniff \
+ iperf \
+ groff \
+ man man-pages \
+ psmisc \
+ screen \
+ timezones \
+ wview-sim wview-vpro wview-wxt510 \
+ wview-sim-mysql wview-vpro-mysql \
+ wview-wxt510-mysql \
+ xinetd \
+ obexftp \
+ qc-usb-messenger \
+ unionfs-modules \
+ unionfs-utils \
+ erlang \
+ ctrlproxy \
+ dsniff \
+ fortune-mod \
+ libpam \
+ nfs-utils \
+ rng-tools \
+ postfix \
+ yp-tools ypbind ypserv \
+
+"
+
+
+
+# Packages currently broken on all platforms (glibc)
+OPLINUX_BROKEN_PACKAGES = "irssi \
+ unionfs-modules \
+ unionfs-utils \
+
+"
+
+#Here we define the packages that are broken on a specific architecture
+#i486, i586, i686
+OPLINUX_BROKEN_PACKAGES_ARCH_x86 =" \
+ aircrack \
+ appweb \
+ apt \
+ ark3116 \
+ at \
+ atmelwlandriver \
+ atftp \
+ autofs \
+ balsa \
+ bazaar \
+ bb \
+ beecrypt \
+ beepmp \
+ bitchx \
+ bochs \
+ bmon \
+ bt950-cs \
+ btscanner \
+ btsco-module \
+ bwmon \
+ came \
+ ctrlproxy \
+ cyrus-sasl \
+ cyrus-imapd \
+ dsniff \
+ eciadsl \
+ erlang \
+ fortune-mod \
+ gphoto2 \
+ gpsd \
+ intercom \
+ lcdproc \
+ lirc \
+ mpd \
+ puppy \
+ pvrusb2-mci \
+ pwc \
+ qc-usb-messenger \
+ sane-backends \
+ setpwc \
+ slutils \
+ texinfo \
+ vsftpd \
+ libpam \
+ aircrack \
+ appweb \
+ apt \
+ ark3116 \
+ gcc \
+ gpsd \
+ pvrusb2-mci \
+ pwc \
+ setpwc \
+ cyrus-sasl \
+ atftp \
+ gphoto2 \
+ lirc \
+ libdvb \
+ netpbm \
+"
+#
+#ppc405
+OPLINUX_BROKEN_PACKAGES_ARCH_PPC = " \
+ aircrack \
+ appweb \
+ apt \
+ ark3116 \
+ at \
+ atmelwlandriver \
+ atftp \
+ autofs \
+ balsa \
+ bazaar \
+ bb \
+ beecrypt \
+ beepmp \
+ bitchx \
+ bochs \
+ bmon \
+ bt950-cs \
+ btscanner \
+ btsco-module \
+ bwmon \
+ came \
+ ctrlproxy \
+ cyrus-sasl \
+ cyrus-imapd \
+ dsniff \
+ eciadsl \
+ erlang \
+ fortune-mod \
+ gphoto2 \
+ gpsd \
+ intercom \
+ lcdproc \
+ lirc \
+ mpd \
+ puppy \
+ pvrusb2-mci \
+ pwc \
+ qc-usb-messenger \
+ sane-backends \
+ setpwc \
+ slutils \
+ texinfo \
+ vsftpd \
+"
+
+
+
+#
+#ppc440 ppc603e
+OPLINUX_BROKEN_PACKAGES_ARCH_POWERPC = " \
+ aircrack \
+ appweb \
+ apt \
+ ark3116 \
+ arpwatch \
+ at \
+ atmelwlandriver \
+ atftp \
+ autofs \
+ balsa \
+ bazaar \
+ bb \
+ beecrypt \
+ beepmp \
+ bitchx \
+ bochs \
+ bmon \
+ bt950-cs \
+ btscanner \
+ btsco-module \
+ bwmon \
+ came \
+ ctrlproxy \
+ cyrus-sasl \
+ cyrus-imapd \
+ dsniff \
+ eciadsl \
+ erlang \
+ fortune-mod \
+ gphoto2 \
+ gpsd \
+ intercom \
+ lcdproc \
+ lirc \
+ mpd \
+ puppy \
+ pvrusb2-mci \
+ pwc \
+ qc-usb-messenger \
+ sane-backends \
+ setpwc \
+ slutils \
+ spandsp \
+ texinfo \
+ vsftpd \
+
+ libpam \
+ aircrack \
+ appweb \
+ apt \
+ ark3116 \
+ gcc \
+ gpsd \
+ pvrusb2-mci \
+ pwc \
+ setpwc \
+ cyrus-sasl \
+ atftp \
+ gphoto2 \
+ lirc \
+ libdvb \
+ netpbm \
+"
+
+
+
+
+#Packages broken per machine (if we ever need such a thing)
+OPLINUX_BROKEN_PACKAGES_append_x86 =" \
+"
+OPLINUX_BROKEN_PACKAGES_append_i586-generic =" \
+"
+OPLINUX_BROKEN_PACKAGES_append_i686-generic =" \
+"
+OPLINUX_BROKEN_PACKAGES_append_epia =" \
+"
+OPLINUX_BROKEN_PACKAGES_append_wrap = "\
+"
+
+#ppc targets
+OPLINUX_BROKEN_PACKAGES_append_magicbox = "\
+"
+OPLINUX_BROKEN_PACKAGES_append_dht-walnut = "\
+"
+#powerpc targets
+OPLINUX_BROKEN_PACKAGES_append_efika = "\
+"
+
+
+#
+#
+OPLINUX_UCLIBC_UNSUPPORTABLE_PACKAGES = "\
+ libpam \
+ nfs-utils \
+ rng-tools \
+ postfix \
+ yp-tools ypbind ypserv \
+ "
+
+# These packages work with glibc, but break on uclibc.
+OPLINUX_UCLIBC_BROKEN_PACKAGES = "\
+# bwmon \
+# erlang \
+# apr \
+# bogofilter \
+# boost \
+# linphone \
+# sudo \
+# ushare \
+ "
+
+OPLINUX_UCLIBC_BROKEN_PACKAGES_append_x86 = "\
+ "
+
+OPLINUX_UCLIBC_BROKEN_PACKAGES_append_epia = "\
+ "
+
+OPLINUX_UCLIBC_BROKEN_PACKAGES_append_wrap = "\
+ "
+
+OPLINUX_UCLIBC_BROKEN_PACKAGES_append_magicbox = "\
+ "
+
+OPLINUX_UCLIBC_BROKEN_PACKAGES_append_dht-walnut = "\
+ "
+
+
+# Packages which build only with glibc (some of these use internal
+# glibc functions and so will probably never run on uclibc).
+OPLINUX_BROKEN_PACKAGES_append_uclibc-linux = "\
+ ${OPLINUX_UCLIBC_UNSUPPORTABLE_PACKAGES} \
+ ${OPLINUX_UCLIBC_BROKEN_PACKAGES} \
+
+"
+
+#
+#Any extra packages defined
+#
+OPLINUX_EXTRA_PACKAGES ?= ""
diff --git a/packages/meta/slugos-native.bb b/packages/meta/slugos-native.bb
index 3b4023ba45..281310a2dd 100644
--- a/packages/meta/slugos-native.bb
+++ b/packages/meta/slugos-native.bb
@@ -78,9 +78,12 @@ SLUGOS_NATIVE = "\
# even on a thumb system (and this can be set in the tool's .bb file),
# however even this doesn't work for very large programs at present
# (only monotone!)
-SLUGOS_NATIVE_THUMB_BROKEN = "\
- monotone-6 \
- "
+####### *-*-* TEMPORARY: mwester - remove monotone as it wont' build.
+#SLUGOS_NATIVE_THUMB_BROKEN = "\
+# monotone-6 \
+# "
+SLUGOS_NATIVE_THUMB_BROKEN = ""
+###### *-*-*
SLUGOS_NATIVE_THUMB_BROKEN_thumb = ""
diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb
index 76c949c0dd..6f6d3140c5 100644
--- a/packages/meta/slugos-packages.bb
+++ b/packages/meta/slugos-packages.bb
@@ -5,7 +5,7 @@
DESCRIPTION = "Packages that are compatible with the SlugOS firmware"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r19"
+PR = "r33"
CONFLICTS = "db3"
COMPATIBLE_MACHINE = "nslu2"
@@ -27,6 +27,7 @@ SLUGOS_PACKAGES = "\
audiofile \
aumix \
autoconf \
+ autofs \
automake \
bash \
beep \
@@ -47,6 +48,7 @@ SLUGOS_PACKAGES = "\
cyrus-imapd \
cyrus-sasl \
db \
+ devio \
devlabel \
diffstat \
diffutils \
@@ -63,6 +65,8 @@ SLUGOS_PACKAGES = "\
flac \
flex \
flite \
+ ftpd-topfield \
+ fuse \
gawk \
gcc \
gdb \
@@ -70,6 +74,7 @@ SLUGOS_PACKAGES = "\
glib-2.0 \
gnu-config \
grep \
+ gspcav1 \
gtk-doc \
gzip \
hdparm \
@@ -96,7 +101,6 @@ SLUGOS_PACKAGES = "\
libvorbis \
libxml2 \
litestream \
- logrotate \
lrzsz \
lsof \
lvm2 \
@@ -107,14 +111,12 @@ SLUGOS_PACKAGES = "\
make \
masqmail \
mdadm \
- mediatomb \
memtester \
mgetty \
miau \
microcom \
minicom \
motion \
- mpd \
mt-daapd \
mtd-utils \
mutt \
@@ -123,7 +125,9 @@ SLUGOS_PACKAGES = "\
ncftp \
ncurses \
netcat \
+ nfs-utils \
nmap \
+ ntfs-3g \
ntp \
ntpclient \
obexftp \
@@ -138,9 +142,11 @@ SLUGOS_PACKAGES = "\
pciutils \
libpcre \
perl \
+ picocom \
pkgconfig \
ppp \
procps \
+ puppy \
python \
quilt \
reiserfsprogs reiser4progs \
@@ -151,26 +157,33 @@ SLUGOS_PACKAGES = "\
setpwc \
setserial \
sipsak \
+ slugimage \
smartmontools \
ssmtp \
strace \
streamripper \
sysfsutils \
- syslog-ng \
tar \
+ task-mokogateway-everything \
thttpd \
tiff \
+ tzdata \
unzip \
+ upslug2 \
usbutils \
util-linux \
vim \
vlan \
vsftpd \
+ w3cam \
wakelan \
watchdog \
+ webcam-server \
wget \
wireless-tools \
+ wireshark \
wpa-supplicant \
+ zd1211-firmware \
zip \
zlib \
"
@@ -178,20 +191,27 @@ SLUGOS_PACKAGES = "\
# Packages currently broken on all platforms
SLUGOS_BROKEN_PACKAGES = "\
bwmon \
- ftpd-topfield \
gphoto2 \
irssi \
libgphoto2 \
+ logrotate \
+ madfu \
+ mediatomb \
+ mpd \
netpbm \
- puppy \
pvrusb2-mci \
qc-usb-messenger \
+ syslog-ng \
sane-backends \
unionfs-modules \
unionfs-utils \
lirc \
pwc \
+ task-native-sdk \
zd1211 \
+ mysql \
+ wview-sim-mysql wview-vpro-mysql \
+ wview-wxt510-mysql \
"
# These packages will never build because uclibc lacks (and always will lack)
@@ -237,20 +257,12 @@ SLUGOS_PACKAGES_append_linux = "\
screen \
timezones \
wview-sim wview-vpro wview-wxt510 \
- wview-sim-mysql wview-vpro-mysql \
- wview-wxt510-mysql \
xinetd \
"
SLUGOS_PACKAGES_append_linux-uclibc = "\
"
-# These packages are not in the build because they have a significant compilation
-# time, add them to SLUGOS_EXTRA_PACKAGES if required
-SLUGOS_OPTIONAL_PACKAGES = "\
- mysql \
- "
-
SLUGOS_EXTRA_PACKAGES ?= ""
# The package-index at the end causes regeneration of the Packages.gz and
diff --git a/packages/meta/xbase-clients.bb b/packages/meta/xbase-clients.bb
index 4297440074..5f3c640f00 100644
--- a/packages/meta/xbase-clients.bb
+++ b/packages/meta/xbase-clients.bb
@@ -1,4 +1,5 @@
DESCRIPTION = "Basic X clients (meta package)"
+LICENSE = "MIT"
PR = "r1"
ALLOW_EMPTY = "1"
@@ -9,4 +10,4 @@ RDEPENDS = 'xauth \
xmodmap \
xrdb \
xset'
-LICENSE = "MIT"
+
diff --git a/packages/miconapl/.mtn2git_empty b/packages/miconapl/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/miconapl/.mtn2git_empty
diff --git a/packages/miconapl/miconapl_0.0.1.bb b/packages/miconapl/miconapl_0.0.1.bb
new file mode 100644
index 0000000000..c5e27ee004
--- /dev/null
+++ b/packages/miconapl/miconapl_0.0.1.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "miconapl daemon for ARM Linkstations"
+SECTION = "console/network"
+DEPENDS = ""
+PR = "r2"
+LICENSE = "GPL"
+COMPATIBLE_MACHINE = "lsarm"
+
+SRC_URI = "http://downloads.linkstationwiki.net/Users/timtimred/lsarm/miconapl.tar.gz"
+
+inherit autotools gettext update-rc.d
+
+S = ${WORKDIR}/miconapl
+
+FILES_${PN} += "/usr/lib/libbuffalo_bin.so"
+
+INITSCRIPT_NAME = "miconapl"
+INITSCRIPT_PARAMS = "defaults 95"
+
+do_configure() {
+}
+
+do_compile() {
+}
+
+do_install() {
+ mkdir -p ${D}/usr/lib
+ install -D -m 0755 ${S}/usr/lib/libbuffalo_bin.so ${D}/usr/lib/
+ install -D -m 0755 ${S}/usr/local/sbin/miconapl ${D}${sbindir}/miconapl
+ install -D -m 0755 ${S}/etc/init.d/miconapl ${D}${sysconfdir}/init.d/miconapl
+ install -D -m 0755 ${S}/etc/init.d/logtag ${D}${sysconfdir}/init.d/logtag
+}
diff --git a/packages/micro-emacs/micro-emacs-20040301/zaurus_make.patch b/packages/micro-emacs/micro-emacs-20040301/zaurus_make.patch
deleted file mode 100644
index f6994cceb7..0000000000
--- a/packages/micro-emacs/micro-emacs-20040301/zaurus_make.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- me040301/src/zaurus.gmk~zaurus_make 2004-03-27 10:02:09.000000000 -0700
-+++ me040301/src/zaurus.gmk 2004-03-29 17:23:12.000000000 -0700
-@@ -67,7 +67,7 @@
- # termcap
- test = $(shell echo "main() { printf(\"HW\n\"); }" > _t.c ; $(LD) $(LDFLAGS) -o /dev/null -ltermcap _t.c 2>&1 ; rm _t.c)
- ifneq "$(strip $(test))" ""
--CONSOLE_LIBS = -lncurses
-+CONSOLE_LIBS = -lncurses -lgcc -lm
- else
- CONSOLE_LIBS = -ltermcap
- endif
-@@ -163,7 +163,7 @@
-
- mec: $(OBJ_C)
- $(RM) $@
-- $(LD) $(LDFLAGS) $(LDOPTIMISE) -o $@ $(OBJ_C) $(CONSOLE_LIBS) $(LIBS)
-+ $(CC) $(LDFLAGS) $(LDOPTIMISE) -o $@ $(OBJ_C) $(CONSOLE_LIBS) $(LIBS)
- $(STRIP) $@
-
- mew: $(OBJ_W)
diff --git a/packages/micro-emacs/micro-emacs-20060909/.mtn2git_empty b/packages/micro-emacs/micro-emacs-20060909/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/micro-emacs/micro-emacs-20060909/.mtn2git_empty
diff --git a/packages/micro-emacs/micro-emacs-20060909/zaurus_make.patch b/packages/micro-emacs/micro-emacs-20060909/zaurus_make.patch
new file mode 100644
index 0000000000..eeb76964de
--- /dev/null
+++ b/packages/micro-emacs/micro-emacs-20060909/zaurus_make.patch
@@ -0,0 +1,25 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- me060909/src/zaurus.gmk~zaurus_make 2004-03-27 10:02:09.000000000 -0700
++++ me060909/src/zaurus.gmk 2004-03-29 17:23:12.000000000 -0700
+@@ -67,7 +67,7 @@
+ # termcap
+ test = $(shell echo "main() { printf(\"HW\n\"); }" > _t.c ; $(LD) $(LDFLAGS) -o /dev/null -ltermcap _t.c 2>&1 ; rm _t.c)
+ ifneq "$(strip $(test))" ""
+-CONSOLE_LIBS = -lncurses
++CONSOLE_LIBS = -lncurses -lgcc -lm
+ else
+ CONSOLE_LIBS = -ltermcap
+ endif
+@@ -163,7 +163,7 @@
+
+ mec: $(OBJ_C)
+ $(RM) $@
+- $(LD) $(LDFLAGS) $(LDOPTIMISE) -o $@ $(OBJ_C) $(CONSOLE_LIBS) $(LIBS)
++ $(CC) $(LDFLAGS) $(LDOPTIMISE) -o $@ $(OBJ_C) $(CONSOLE_LIBS) $(LIBS)
+ $(STRIP) $@
+
+ mew: $(OBJ_W)
diff --git a/packages/micro-emacs/micro-emacs_20040301.bb b/packages/micro-emacs/micro-emacs_20040301.bb
deleted file mode 100644
index e8c494794b..0000000000
--- a/packages/micro-emacs/micro-emacs_20040301.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "Mini-version of emacs, from http://www.jasspa.com"
-SECTION = "console/utils"
-PRIORITY = "optional"
-LICENSE = "GPL"
-DEPENDS = "ncurses"
-
-S = "${WORKDIR}/me040301"
-
-SRC_URI = "http://www.jasspa.com/release_040301/jasspa-mesrc-20040301.tar.gz \
- http://www.jasspa.com/release_040301/jasspa-memacros-20040301.tar.gz \
- file://${FILESDIR}/zaurus_make.patch;patch=1"
-
-do_compile () {
- oe_runmake -C src -f zaurus.gmk mec
-}
-
-do_install() {
- install -d ${D}${bindir}
- install -d ${D}${datadir}/jasspa/macros
- install -m 0755 src/mec ${D}${bindir}/mec
- install -m 0644 ${WORKDIR}/*.* ${D}${datadir}/jasspa/macros/
-}
-
-PACKAGES += " ${PN}-macros"
-FILES_${PN}-macros = "${datadir}/jasspa"
-
diff --git a/packages/micro-emacs/micro-emacs_20060909.bb b/packages/micro-emacs/micro-emacs_20060909.bb
new file mode 100644
index 0000000000..f980b368b1
--- /dev/null
+++ b/packages/micro-emacs/micro-emacs_20060909.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Mini-version of emacs, from http://www.jasspa.com"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "ncurses"
+
+S = "${WORKDIR}/me060909"
+
+SRC_URI = "http://www.jasspa.com/release_${PV}/jasspa-mesrc-${PV}-2.tar.gz \
+ http://www.jasspa.com/release_${PV}/jasspa-memacros-${PV}.tar.gz \
+ file://${FILESDIR}/zaurus_make.patch;patch=1"
+
+do_compile () {
+ oe_runmake -C src -f zaurus.gmk mec
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${datadir}/jasspa/macros
+ install -m 0755 src/mec ${D}${bindir}/mec
+ install -m 0644 ${WORKDIR}/*.* ${D}${datadir}/jasspa/macros/
+}
+
+PACKAGES += " ${PN}-macros"
+FILES_${PN}-macros = "${datadir}/jasspa"
+
diff --git a/packages/micro-evtd/.mtn2git_empty b/packages/micro-evtd/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/micro-evtd/.mtn2git_empty
diff --git a/packages/micro-evtd/micro-evtd_0.0.1.bb b/packages/micro-evtd/micro-evtd_0.0.1.bb
new file mode 100644
index 0000000000..c66975c6ae
--- /dev/null
+++ b/packages/micro-evtd/micro-evtd_0.0.1.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "micro_evtd daemon for ARM Linkstations"
+SECTION = "console/network"
+PR = "r2"
+LICENSE = "GPL"
+COMPATIBLE_MACHINE = "(lsarm)"
+
+SRC_URI = "http://downloads.linkstationwiki.net/Users/timtimred/lsarm/micro_evtd.tar.gz"
+
+inherit autotools gettext update-rc.d
+
+S = ${WORKDIR}/micro_evtd
+
+INITSCRIPT_NAME = "microevtd"
+INITSCRIPT_PARAMS = "defaults 92"
+
+do_configure() {
+}
+
+do_install() {
+ install -D -m 0755 ${S}/micro_evtd ${D}${sbindir}/micro_evtd
+ install -D -m 0755 ${S}/init ${D}${sysconfdir}/init.d/microevtd
+}
diff --git a/packages/midpath/.mtn2git_empty b/packages/midpath/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/midpath/.mtn2git_empty
diff --git a/packages/midpath/midpath-alsa_svn.bb b/packages/midpath/midpath-alsa_svn.bb
new file mode 100644
index 0000000000..7d230f3cd0
--- /dev/null
+++ b/packages/midpath/midpath-alsa_svn.bb
@@ -0,0 +1,42 @@
+
+require midpath_${PV}.bb
+
+DEPENDS += "alsa-lib"
+RDEPENDS = "alsa-lib"
+
+do_configure() {
+ cd ${S}/native/alsa
+ sed -i -e "s|\-I/usr/include/classpath|\-I${STAGING_INCDIR}/classpath-minimal|" Makefile
+ cd ${S}/resources-embedded/com/sun/midp/configuration
+ sed -i -e "s|sound.backend:NULL|sound.backend:ALSA|" configuration.cfg
+}
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build native code
+
+# Build the ALSA native part
+cd ${S}/native/alsa
+make || exit 1
+cp *.so ${S}/dist
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0644 dist/libmidpathalsa.so ${D}${libdir}
+ install -d ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration
+ install -m 0644 resources-embedded/com/sun/midp/configuration/configuration.cfg ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration/
+}
+
+do_stage() {
+ :
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${libdir}/libmidpathalsa.so \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
+ "
diff --git a/packages/midpath/midpath-cldc-x11_svn.bb b/packages/midpath/midpath-cldc-x11_svn.bb
new file mode 100644
index 0000000000..1aac20265b
--- /dev/null
+++ b/packages/midpath/midpath-cldc-x11_svn.bb
@@ -0,0 +1,43 @@
+
+require midpath_${PV}.bb
+
+DEPENDS += "virtual/libx11 virtual/cldc-api-1.1"
+RDEPENDS = "libx11"
+
+CLDC_PATH = ${STAGING_LIBDIR}/java/cldc1.1.jar
+
+do_configure() {
+
+ cd ${S}/resources-embedded/com/sun/midp/configuration
+ sed -i -e "s|ui.backend:AWT|ui.backend:X11|" configuration.cfg
+
+}
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build Escher X11 library
+cd ${S}/external/escher-cldc/core
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${CLDC_PATH} -sourcepath ${S}/external/escher-cldc/core -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${CLDC_PATH} -source 1.3 -target 1.1" JAR_FILE="escher-x11-cldc.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/escher-cldc/core/escher-x11-cldc.jar ${S}/dist
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0644 dist/escher-x11-cldc.jar ${D}${libdir}
+ install -d ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration
+ install -m 0644 resources-embedded/com/sun/midp/configuration/configuration.cfg ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration/
+}
+
+do_stage() {
+ :
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${libdir}/java/escher-x11-cldc.jar \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
+ "
diff --git a/packages/midpath/midpath-gtk_svn.bb b/packages/midpath/midpath-gtk_svn.bb
new file mode 100644
index 0000000000..3ee0d40f3d
--- /dev/null
+++ b/packages/midpath/midpath-gtk_svn.bb
@@ -0,0 +1,43 @@
+
+require midpath_${PV}.bb
+
+DEPENDS += "gtk+"
+RDEPENDS = "gtk+"
+
+do_configure() {
+
+ cd ${S}/resources-embedded/com/sun/midp/configuration
+ sed -i -e "s|ui.backend:AWT|ui.backend:GTK|" configuration.cfg
+
+ cd ${S}/native/gtk
+ sed -i -e "s|\-I/usr/include/classpath|\-I${STAGING_INCDIR}/classpath-minimal|" Makefile
+
+}
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build the GTK native part
+cd ${S}/native/gtk
+make || exit 1
+cp *.so ${S}/dist
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0644 dist/libmidpathgtk.so ${D}${libdir}
+ install -d ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration
+ install -m 0644 resources-embedded/com/sun/midp/configuration/configuration.cfg ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration/
+}
+
+do_stage() {
+ :
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${libdir}/libmidpathgtk.so \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
+ "
diff --git a/packages/midpath/midpath-native_svn.bb b/packages/midpath/midpath-native_svn.bb
new file mode 100644
index 0000000000..199facdeb1
--- /dev/null
+++ b/packages/midpath/midpath-native_svn.bb
@@ -0,0 +1,34 @@
+
+inherit native
+
+require midpath_${PV}.bb
+
+DEPENDS = "ecj-native fastjar-native classpath-minimal-native"
+PROVIDES = "virtual/cldc-api-1.1"
+
+PACKAGES = " "
+
+
+do_configure() {
+ :
+}
+
+do_compile() {
+mkdir -p ${S}/dist
+
+# Build CLDC1.1
+# Build base classes
+cd ${S}/external/cldc1.1/src
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath . -source 1.3 -target 1.1" || exit 1
+make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath . -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes || exit 1
+# Build CLDC extra classes for MIDP2
+cd ${S}/src/cldc-glue
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -sourcepath ${S}/src/cldc-glue -source 1.3 -target 1.1"
+make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes
+# Make a jar
+fastjar cvf ${S}/dist/cldc1.1.jar -C ${S}/external/cldc1.1/classes .
+}
+
+do_install() {
+ :
+}
diff --git a/packages/midpath/midpath-qt3x11_svn.bb b/packages/midpath/midpath-qt3x11_svn.bb
new file mode 100644
index 0000000000..30e855a636
--- /dev/null
+++ b/packages/midpath/midpath-qt3x11_svn.bb
@@ -0,0 +1,48 @@
+
+require midpath_${PV}.bb
+
+DEPENDS += "qt-mt"
+RDEPENDS = "qt-mt"
+RCONFILCTS = "midpath-qte"
+
+inherit qt3x11
+
+do_configure() {
+
+ cd ${S}/resources-embedded/com/sun/midp/configuration
+ sed -i -e "s|ui.backend:AWT|ui.backend:QT|" configuration.cfg
+
+ cd ${S}/native/qt
+ sed -i -e "s|\-I/usr/include/classpath|\-I${STAGING_INCDIR}/classpath-minimal|" \
+ -e "s|\`pkg\-config \-\-cflags qt\-mt\`|\-I${QTDIR}/include/ -DQT_THREAD_SUPPORT|" \
+ -e "s|\`pkg\-config \-\-libs qt\-mt\`|\-L${QTDIR}/lib \-lqt-mt -lsupc++|" \
+ Makefile
+}
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build the QT native part
+cd ${S}/native/qt
+make || exit 1
+cp *.so ${S}/dist
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0644 dist/libmidpathqt.so ${D}${libdir}
+ install -d ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration
+ install -m 0644 resources-embedded/com/sun/midp/configuration/configuration.cfg ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration/
+}
+
+do_stage() {
+ :
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${libdir}/libmidpathqt.so \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
+ "
diff --git a/packages/midpath/midpath-qte_svn.bb b/packages/midpath/midpath-qte_svn.bb
new file mode 100644
index 0000000000..478883e559
--- /dev/null
+++ b/packages/midpath/midpath-qte_svn.bb
@@ -0,0 +1,46 @@
+
+require midpath_${PV}.bb
+
+DEPENDS += "qte-mt"
+RDEPENDS = "qte-mt"
+RCONFLICTS = "midpath-qt3x11"
+
+do_configure() {
+
+ cd ${S}/resources-embedded/com/sun/midp/configuration
+ sed -i -e "s|ui.backend:AWT|ui.backend:QT|" configuration.cfg
+
+ cd ${S}/native/qt
+ sed -i -e "s|\-I/usr/include/classpath|\-I${STAGING_INCDIR}/classpath-minimal -DQWS|" \
+ -e "s|\`pkg\-config \-\-cflags qt\-mt\`|\-I${QTDIR}/include/ -DQWS -DQT_THREAD_SUPPORT|" \
+ -e "s|\`pkg\-config \-\-libs qt\-mt\`|\-L${QTDIR}/lib \-lqte-mt -lsupc++|" \
+ Makefile
+}
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build the QT native part
+cd ${S}/native/qt
+make || exit 1
+cp *.so ${S}/dist
+
+}
+
+do_install() {
+ install -d ${D}${libdir}
+ install -m 0644 dist/libmidpathqt.so ${D}${libdir}
+ install -d ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration
+ install -m 0644 resources-embedded/com/sun/midp/configuration/configuration.cfg ${D}${libdir}/java/resources-embedded/com/sun/midp/configuration/
+}
+
+do_stage() {
+ :
+}
+
+PACKAGES = "${PN}"
+
+FILES_${PN} = "${libdir}/libmidpathqt.so \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
+ "
diff --git a/packages/midpath/midpath_svn.bb b/packages/midpath/midpath_svn.bb
new file mode 100644
index 0000000000..0de15a3d15
--- /dev/null
+++ b/packages/midpath/midpath_svn.bb
@@ -0,0 +1,110 @@
+DESCRIPTION = "MIDPath is a Java library which provides a MIDP2 implementation"
+HOMEPAGE = "http://midpath.thenesis.org/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "interpreters"
+
+SRC_URI = "svn://midpath.svn.sourceforge.net/svnroot/midpath;module=trunk;proto=https"
+
+S = "${WORKDIR}/trunk"
+
+DEPENDS = "ecj-native fastjar-native classpath-minimal"
+RPROVIDES_midpath-cldc = "virtual/cldc-api-1.1"
+
+JAVAC_CMD=${STAGING_BINDIR_NATIVE}/ecj
+
+GNU_CLASSPATH_PATH=${STAGING_LIBDIR}/java/classpath-minimal/glibj.zip
+
+do_compile() {
+
+mkdir -p ${S}/dist
+
+# Build CLDC1.1
+# Build base classes
+cd ${S}/external/cldc1.1/src
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath . -source 1.3 -target 1.1" || exit 1
+make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath . -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes || exit 1
+# Build CLDC extra classes for MIDP2
+cd ${S}/src/cldc-glue
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -sourcepath ${S}/src/cldc-glue -source 1.3 -target 1.1"
+make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes
+# Make a jar
+fastjar cvf ${S}/dist/cldc1.1.jar -C ${S}/external/cldc1.1/classes .
+
+CLDC_PATH=${S}/dist/cldc1.1.jar
+
+# Build SDLJava for CLDC
+cd ${S}/external/sdljava-cldc
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH:${GNU_CLASSPATH_PATH} -sourcepath ${S}/external/sdljava-cldc -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH:${GNU_CLASSPATH_PATH} -source 1.3 -target 1.1" JAR_FILE="sdljava-cldc.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/sdljava-cldc/sdljava-cldc.jar ${S}/dist
+
+# Build Escher X11 library
+cd ${S}/external/escher-cldc/core
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -sourcepath ${S}/external/escher-cldc/core -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -source 1.3 -target 1.1" JAR_FILE="escher-x11-cldc.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/escher-cldc/core/escher-x11-cldc.jar ${S}/dist
+
+# Build MP3 library
+cd ${S}/external/jlayerme-cldc/src
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -sourcepath ${S}/external/jlayerme-cldc/src -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -source 1.3 -target 1.1" JAR_FILE="jlayerme-cldc.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/jlayerme-cldc/src/jlayerme-cldc.jar ${S}/dist
+
+# Build OGG library
+cd ${S}/external/jorbis-cldc/src
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -sourcepath ${S}/external/jorbis-cldc/src -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH -source 1.3 -target 1.1" JAR_FILE="jorbis-cldc.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/jorbis-cldc/src/jorbis-cldc.jar ${S}/dist
+
+# Build Bluetooth library
+cd ${S}/external/javabluetooth/src
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${GNU_CLASSPATH_PATH}:$CLDC_PATH:${S}/lib/RXTXcomm.jar -sourcepath ${S}/external/javabluetooth/src -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${GNU_CLASSPATH_PATH}:$CLDC_PATH:${S}/lib/RXTXcomm.jar -source 1.3 -target 1.1" JAR_FILE="jsr82-bluetooth.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/external/javabluetooth/src/jsr82-bluetooth.jar ${S}/dist
+
+# Build MIDPath
+cd ${S}/src/core
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH:${GNU_CLASSPATH_PATH}:${S}/dist/sdljava-cldc.jar:${S}/dist/escher-x11-cldc.jar:${S}/dist/jlayerme-cldc.jar:${S}/dist/jorbis-cldc.jar:${S}/dist/jsr82-bluetooth.jar:${S}/lib/kxml2-2.3.0.jar:${S}/lib/swt.jar -sourcepath ${S}/src/core -source 1.3 -target 1.1" || exit 1
+make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath $CLDC_PATH:${GNU_CLASSPATH_PATH}:${S}/dist/sdljava-cldc.jar:${S}/dist/escher-x11-cldc.jar:${S}/dist/jlayerme-cldc.jar:${S}/dist/jorbis-cldc.jar:${S}/dist/jsr82-bluetooth.jar:${S}/lib/kxml2-2.3.0.jar:${S}/lib/swt.jar -source 1.3 -target 1.1" CLASS_DIR=${S}/src/core/classes || exit 1
+# Compile JVM.java separately as it can't be compiled against cldc.jar
+ecj -bootclasspath ${GNU_CLASSPATH_PATH} -source 1.3 -target 1.1 -d ${S}/src/core/classes com/sun/cldchi/jvm/JVM.java
+jar cvf ${S}/dist/midpath.jar -C ${S}/src/core/classes .
+
+cd ${S}/tests
+make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/dist/midpath.jar:$CLDC_PATH -sourcepath ${S}/tests -source 1.3 -target 1.1" || exit 1
+make jar JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/dist/midpath.jar:$CLDC_PATH -source 1.3 -target 1.1" JAR_FILE="midpath-tests.jar" JAR_FLAGS="cvf" || exit 1
+cp ${S}/tests/midpath-tests.jar ${S}/dist
+
+# Add other required libraries to the dist directory
+cp ${S}/lib/kxml2-2.3.0.jar ${S}/dist
+}
+
+do_install() {
+ install -d ${D}${libdir}/java
+ install -m 0644 dist/*.jar ${D}${libdir}/java
+ install -d ${D}${libdir}/java/resources-embedded
+ cp -rf resources-embedded/* ${D}${libdir}/java/resources-embedded/
+ rm -rf ${D}${libdir}/java/resources-embedded/.svn
+}
+
+do_stage() {
+ install -d ${STAGING_LIBDIR}/java
+ install -m 0644 dist/cldc1.1.jar ${STAGING_LIBDIR}/java
+}
+
+PACKAGES = "${PN} ${PN}-cldc"
+
+FILES_${PN} = "${libdir}/java/midpath.jar \
+ ${libdir}/java/midpath-tests.jar \
+ ${libdir}/java/kxml2-2.3.0.jar \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/ \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/chameleon/ \
+ ${libdir}/java/resources-embedded/com/sun/midp/configuration/l10n/ \
+ ${libdir}/java/resources-embedded/com/sun/midp/chameleon/skins/resources/images/ \
+
+ ${libdir}/java/resources-embedded/org/thenesis/midpath/font/bdf/ \
+ "
+FILES_${PN}-cldc = "${libdir}/java/cldc1.1.jar"
+
+CONFFILES_${PN} = "${libdir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg"
diff --git a/packages/miniclipboard/miniclipboard-0.3/makefile.patch b/packages/miniclipboard/miniclipboard-0.3/makefile.patch
new file mode 100644
index 0000000000..790b82f305
--- /dev/null
+++ b/packages/miniclipboard/miniclipboard-0.3/makefile.patch
@@ -0,0 +1,26 @@
+Index: Makefile
+===================================================================
+--- Makefile (Revision 9102)
++++ Makefile (Arbeitskopie)
+@@ -6,16 +6,16 @@
+
+ MEMBERS = miniclipboard mbpixbuf mbtray
+
+-CFLAGS += -Wall
++PACKAGE_CFLAGS += -Wall `pkg-config --cflags x11`
+ ifeq ($(DEBUG),yes)
+-CFLAGS += -O2 -g
+-LDFLAGS = -g #-lefence
++PACKAGE_CFLAGS += -O2 -g
++LDFLAGS = -g
+ else
+-CFLAGS += -Os -fomit-frame-pointer
++PACKAGE_CFLAGS += -Os -fomit-frame-pointer
+ endif
+ CPPFLAGS += -DPACKAGE=\"$(PACKAGE)\" -DPREFIX=\"$(PREFIX)\" -DPACKAGE_LOCALE_DIR=\"$(PREFIX)/share/locale\"
+
+-PACKAGE_LDFLAGS += $(STANDARD_LDFLAGS) -L/usr/X11R6/lib -lX11 -lXpm -lXext
++PACKAGE_LDFLAGS += $(STANDARD_LDFLAGS) $(`pkg-config --libs x11`) -lXpm -lXext
+
+ OBJS = $(patsubst %,%.o,$(MEMBERS))
+
diff --git a/packages/miniclipboard/miniclipboard_0.3.bb b/packages/miniclipboard/miniclipboard_0.3.bb
index ba35902db7..1e4eef3eea 100644
--- a/packages/miniclipboard/miniclipboard_0.3.bb
+++ b/packages/miniclipboard/miniclipboard_0.3.bb
@@ -1,12 +1,13 @@
SECTION = "x11/utils"
inherit gpe
-LICENSE = "LGPL"
+LICENSE = "GPL"
DESCRIPTION = "Clipboard management application"
DEPENDS = "virtual/libx11"
RDEPENDS = "gdk-pixbuf-loader-xpm"
-PR = "r1"
+PR = "r2"
-SRC_URI += "file://miniclipboard.desktop"
+SRC_URI += "file://miniclipboard.desktop \
+ file://makefile.patch;patch=1;pnum=0"
do_install() {
install -d ${D}${bindir}
diff --git a/packages/minisip/libmikey_svn.bb b/packages/minisip/libmikey_svn.bb
new file mode 100644
index 0000000000..c51e466f9c
--- /dev/null
+++ b/packages/minisip/libmikey_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "C++ implementation of the Multimedia Internet KEYing (RFC3830)"
+HOMEPAGE = "http://www.minisip.org"
+SECTION = "libs/network"
+PRIORITY = "optional"
+DEPENDS = "libmutil0 openssl"
+PV = "0.3.2+svn${SRCDATE}"
+LICENSE = "LGPL"
+
+inherit autotools
+
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=libmikey"
+S = "${WORKDIR}/libmikey"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/minisip/libmnetutil_svn.bb b/packages/minisip/libmnetutil_svn.bb
new file mode 100644
index 0000000000..a2a60ba930
--- /dev/null
+++ b/packages/minisip/libmnetutil_svn.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Networking class library for C++ programming"
+HOMEPAGE = "http://www.minisip.org"
+SECTION = "libs/network"
+PRIORITY = "optional"
+DEPENDS = "libmutil0 openssl"
+PV = "0.2.2+svn${SRCDATE}"
+LICENSE = "LGPL"
+
+inherit autotools
+
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=libmnetutil"
+S = "${WORKDIR}/libmnetutil"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/minisip/libmsip_svn.bb b/packages/minisip/libmsip_svn.bb
new file mode 100644
index 0000000000..747cc49f0e
--- /dev/null
+++ b/packages/minisip/libmsip_svn.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "C++ implementation Session Initiation Protocol (RFC3261)"
+HOMEPAGE = "http://www.minisip.org"
+SECTION = "libs/network"
+PRIORITY = "optional"
+DEPENDS = "libmnetutil0 libmutil0"
+PV = "0.2.2+svn${SRCDATE}"
+LICENSE = "LGPL"
+
+inherit autotools
+
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=libmsip"
+S = "${WORKDIR}/libmsip"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/minisip/libmutil0_svn.bb b/packages/minisip/libmutil0_svn.bb
new file mode 100644
index 0000000000..a7a20bdf00
--- /dev/null
+++ b/packages/minisip/libmutil0_svn.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Class library implementing utilities for C++ programming"
+HOMEPAGE = "http://www.minisip.org"
+LICENSE = "LGPL"
+SECTION = "libs"
+PRIORITY = "optional"
+DEPENDS = "openssl"
+PV = "0.3.1+svn${SRCDATE}"
+
+inherit autotools lib_package
+
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=libmutil"
+S = "${WORKDIR}/libmutil"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/minisip/minisip-video_svn.bb b/packages/minisip/minisip-video_svn.bb
index 136f09e156..137f29f2d8 100644
--- a/packages/minisip/minisip-video_svn.bb
+++ b/packages/minisip/minisip-video_svn.bb
@@ -1,18 +1,13 @@
-PV = "0.6.2+svn${SRCDATE}"
+DESCRIPTION = "SIP user agent, with focus on security - video support"
LICENSE = "GPL"
SECTION = "x11/utils"
-PR = "r0"
+DEPENDS = "libsdl-x11 ffmpeg-0.4.9-pre1+cvs${SRCDATE} libglademm libmsip0 libmikey0"
CONFLICTS = "minisip"
+PV = "0.6.2+svn${SRCDATE}"
-DESCRIPTION = "SIP user agent, with focus on security - video support"
-DEPENDS = "libsdl-x11 ffmpeg-0.4.9-pre1+cvs${SRCDATE} libglademm libmsip0 libmikey0"
-SRC_URI = "svn://svn.minisip.org/var/svn/minisip/trunk;module=minisip"
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=minisip"
S = "${WORKDIR}/minisip"
-
-
-FILES_${PN} += "${datadir}/minisip"
-
inherit autotools
EXTRA_OECONF = "--enable-ipaq --enable-video --with-avcodec=${STAGING_INCDIR}/ffmpeg"
@@ -23,3 +18,6 @@ do_install_append () {
install -m 0644 share/minisip.png ${D}${datadir}/pixmaps/minisip.png
install -m 0644 share/minisip.desktop ${D}${datadir}/applications/minisip.desktop
}
+
+FILES_${PN} += "${datadir}/minisip"
+
diff --git a/packages/minisip/minisip_svn.bb b/packages/minisip/minisip_svn.bb
index 6928387ad0..9e9d426d84 100644
--- a/packages/minisip/minisip_svn.bb
+++ b/packages/minisip/minisip_svn.bb
@@ -1,28 +1,23 @@
-PV = "0.6.2+svn${SRCDATE}"
+DESCRIPTION = "SIP user agent, with focus on security"
+HOMEPAGE = "http://www.minisip.org"
+DEPENDS = "libglademm libmsip0 libmikey0"
LICENSE = "GPL"
SECTION = "x11/utils"
-PR = "r0"
+PV = "0.6.2+svn${SRCDATE}"
-DESCRIPTION = "SIP user agent, with focus on security"
-DEPENDS = "libglademm libmsip0 libmikey0"
-SRC_URI = "svn://svn.minisip.org/var/svn/minisip/trunk;module=minisip"
+SRC_URI = "svn://svn.minisip.org/minisip/trunk;module=minisip"
S = "${WORKDIR}/${PN}"
-DEFAULT_PREFERENCE="-1"
-
-FILES_${PN} += "${datadir}/minisip"
-
inherit autotools
EXTRA_OECONF = "--enable-ipaq"
-# do_configure_prepend() {
-# ./bootstrap
-#}
-
do_install_append () {
install -d ${D}${datadir}/pixmaps
install -d ${D}${datadir}/applications
install -m 0644 share/minisip.png ${D}${datadir}/pixmaps/minisip.png
install -m 0644 share/minisip.desktop ${D}${datadir}/applications/minisip.desktop
}
+
+FILES_${PN} += "${datadir}/minisip"
+
diff --git a/packages/misc-binary-only/prism-firmware.bb b/packages/misc-binary-only/prism-firmware.bb
new file mode 100644
index 0000000000..fefdb0ae22
--- /dev/null
+++ b/packages/misc-binary-only/prism-firmware.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "Firmware for the Prism 2.x/3 cards"
+SECTION = "base"
+LICENSE = "closed"
+RDEPENDS = "hostap-utils"
+RREPLACES = "prism3-firmware prism3-support"
+RCONFLICTS = "prism3-firmware prism3-support"
+PACKAGE_ARCH = "all"
+PR = "r2"
+
+SRC_URI = "http://www.red-bean.com/~proski/firmware/Latest-prism.tar.bz2 \
+ file://prism-fw.sh \
+ file://hostap.rules"
+
+S = "${WORKDIR}/Latest-prism/"
+
+do_install() {
+ install -d ${D}${base_libdir}/firmware/
+ install -d ${D}${base_libdir}/udev/
+ install -d ${D}${sysconfdir}/pcmcia/
+ install -d ${D}${sysconfdir}/udev/rules.d/
+
+ install -m 0644 primary-RAM/*.hex ${D}${base_libdir}/firmware/
+ install -m 0644 secondary-RAM/rf010804.hex ${D}${base_libdir}/firmware/
+
+ install -m 0755 ${WORKDIR}/prism-fw.sh ${D}${base_libdir}/udev/
+ install -m 0644 ${WORKDIR}/hostap.rules ${D}${sysconfdir}/udev/rules.d/
+}
+
+PACKAGES = "${PN}"
+FILES_${PN} += "${base_libdir}"
diff --git a/packages/misc-binary-only/prism-firmware/.mtn2git_empty b/packages/misc-binary-only/prism-firmware/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/misc-binary-only/prism-firmware/.mtn2git_empty
diff --git a/packages/misc-binary-only/prism-firmware/hostap.rules b/packages/misc-binary-only/prism-firmware/hostap.rules
new file mode 100644
index 0000000000..dece98ae93
--- /dev/null
+++ b/packages/misc-binary-only/prism-firmware/hostap.rules
@@ -0,0 +1,4 @@
+#
+# update firmware on Prism cards (load it to RAM, not to Flash)
+#
+SUBSYSTEM=="net", KERNEL=="wlan*" RUN="/lib/udev/prism-fw.sh"
diff --git a/packages/misc-binary-only/prism-firmware/prism-fw.sh b/packages/misc-binary-only/prism-firmware/prism-fw.sh
new file mode 100644
index 0000000000..96a2457f33
--- /dev/null
+++ b/packages/misc-binary-only/prism-firmware/prism-fw.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+CARD_ID=`/usr/sbin/hostap_diag $INTERFACE|grep NICID|awk '{print $2}'|sed -e 's/id=0x//'`
+
+# 801d cards lack even Primary firmware so we cannot use hostap_diag
+PRI=/lib/firmware/pm010102.hex
+STA=/lib/firmware/rf010804.hex
+
+if [ $CARD_ID = '800c' ] || [ $CARD_ID = '8013' ] || [ $CARD_ID = '8017' ] || \
+ [ $CARD_ID = '801b' ] || [ $CARD_ID = '8022' ] || [ $CARD_ID = '8023' ] ; then
+ PRI=/lib/firmware/ak010104.hex
+elif [ $CARD_ID = '800b' ] || [ $CARD_ID = '8012' ] || [ $CARD_ID = '8016' ] || \
+ [ $CARD_ID = '801a' ] ; then
+ PRI=/lib/firmware/af010104.hex
+elif [ $CARD_ID = '800e' ] || [ $CARD_ID = '8015' ] || [ $CARD_ID = '8019' ] || \
+ [ $CARD_ID = '801d' ] ; then
+ PRI=/lib/firmware/pm010102.hex
+fi
+
+DIR=/proc/net/hostap/wlan0
+
+if [ ! -d $DIR ]; then
+ exit 1
+fi
+
+if grep -q no_pri=1 $DIR/debug; then
+ /usr/sbin/prism2_srec -gs wlan0 $PRI
+ /usr/sbin/prism2_srec -gp wlan0 $PRI
+fi
+
+/usr/sbin/prism2_srec -rp wlan0 $STA
+
diff --git a/packages/misc-binary-only/prism3-firmware_1.8.3.bb b/packages/misc-binary-only/prism3-firmware_1.8.3.bb
deleted file mode 100644
index fb8f83afac..0000000000
--- a/packages/misc-binary-only/prism3-firmware_1.8.3.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "Firmware for the Prism3 cards"
-SECTION = "base"
-LICENSE = "Unknown"
-PR = "r3"
-
-SRC_URI = "http://www.red-bean.com/~proski/firmware/${PV}.tar.bz2 \
- http://www.red-bean.com/~proski/firmware/primary.tar.bz2"
-S = "${WORKDIR}"
-
-do_install() {
- install -d ${D}${sysconfdir}/pcmcia/
- install -m 0644 primary/pm010102.hex ${D}${sysconfdir}/pcmcia/
- install -m 0644 ${PV}/rf010803.hex ${D}${sysconfdir}/pcmcia/
- cat >${D}${sysconfdir}/pcmcia/README.prism3-firmware <<EOF
-To make a prism3 card w/ downloadable firmware work, do the following:
- 0.) Install hostap-utils
- 1.) Add "needs_reset yes" and "needs_firmware hostap_fw_load" to
- the proper interface in /etc/network/interfaces
- 2.) echo -e "#!/bin/sh\nifdown wlan0" >> /etc/apm/suspend.d/ifdown
- 3.) chmod a+rx /etc/apm/suspend.d/ifdown
- 4.) echo -e "#!/bin/sh\nifup wlan0" >> /etc/apm/resume.d/ifup
- 5.) chmod a+rx /etc/apm/suspend.d/ifup
-EOF
-}
-
-PACKAGE_ARCH = "all"
-
diff --git a/packages/misc-binary-only/prism3-firmware_1.8.4.bb b/packages/misc-binary-only/prism3-firmware_1.8.4.bb
deleted file mode 100644
index 2983ea7710..0000000000
--- a/packages/misc-binary-only/prism3-firmware_1.8.4.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-DESCRIPTION = "Firmware for the Prism3 cards"
-SECTION = "base"
-LICENSE = "Unknown"
-PR = "r0"
-
-SRC_URI = "http://www.red-bean.com/~proski/firmware/${PV}.tar.bz2 \
- http://www.red-bean.com/~proski/firmware/primary.tar.bz2"
-S = "${WORKDIR}"
-
-do_install() {
- install -d ${D}${sysconfdir}/pcmcia/
- install -m 0644 primary/pm010102.hex ${D}${sysconfdir}/pcmcia/
- install -m 0644 ${PV}/rf010804.hex ${D}${sysconfdir}/pcmcia/
- cat >${D}${sysconfdir}/pcmcia/README.prism3-firmware <<EOF
-To make a prism3 card w/ downloadable firmware work, do the following:
- 0.) Install hostap-utils
- 1.) Add "needs_reset yes" and "needs_firmware hostap_fw_load" to
- the proper interface in /etc/network/interfaces
- 2.) echo -e "#!/bin/sh\nifdown wlan0" >> /etc/apm/suspend.d/ifdown
- 3.) chmod a+rx /etc/apm/suspend.d/ifdown
- 4.) echo -e "#!/bin/sh\nifup wlan0" >> /etc/apm/resume.d/ifup
- 5.) chmod a+rx /etc/apm/suspend.d/ifup
-EOF
-}
-
-PACKAGE_ARCH = "all"
-
diff --git a/packages/module-init-tools/files/module-init-tools-remove-index.patch b/packages/module-init-tools/files/module-init-tools-remove-index.patch
new file mode 100644
index 0000000000..c56532e007
--- /dev/null
+++ b/packages/module-init-tools/files/module-init-tools-remove-index.patch
@@ -0,0 +1,14 @@
+http://uclibc.org/cgi-bin/viewcvs.cgi/trunk/buildroot/package/module-init-tools/module-init-tools-remove-index.patch?rev=16782&view=auto
+
+diff -ur module-init-tools-3.2.2/modprobe.c module-init-tools-3.2.2-patched/modprobe.c
+--- module-init-tools-3.2.2/modprobe.c 2005-12-01 17:42:09.000000000 -0600
++++ module-init-tools-3.2.2-patched/modprobe.c 2006-12-04 19:50:50.353237649 -0600
+@@ -270,7 +270,7 @@
+ char *modname;
+
+ /* Ignore lines without : or which start with a # */
+- ptr = index(line, ':');
++ ptr = strchr(line, ':');
+ if (ptr == NULL || line[strspn(line, "\t ")] == '#')
+ return 0;
+
diff --git a/packages/module-init-tools/module-init-tools_3.2.2.bb b/packages/module-init-tools/module-init-tools_3.2.2.bb
index c7782cb54c..dcf9063219 100644
--- a/packages/module-init-tools/module-init-tools_3.2.2.bb
+++ b/packages/module-init-tools/module-init-tools_3.2.2.bb
@@ -3,7 +3,7 @@ removing kernel modules for Linux (versions 2.5.48 and above). It serves \
the same function that the modutils package serves for Linux 2.4."
LICENSE = "GPL"
SECTION = "base"
-PR = "r2"
+PR = "r3"
PACKAGES =+ "module-init-tools-insmod-static module-init-tools-depmod"
RDEPENDS_${PN} += "module-init-tools-depmod"
@@ -15,7 +15,8 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/module-init-tools/module-i
file://ignore_arch_directory;patch=1 \
file://modutils_extension;patch=1 \
file://no_man_rebuild;patch=1 \
- file://manpagesopt;patch=1 "
+ file://manpagesopt;patch=1 \
+ file://module-init-tools-remove-index.patch;patch=1 "
S = "${WORKDIR}/module-init-tools-${PV}"
EXTRA_OECONF = "--disable-manpages"
diff --git a/packages/modutils/modutils-cross_2.4.27.bb b/packages/modutils/modutils-cross_2.4.27.bb
index 23c9c755f4..3bd1ae2b84 100644
--- a/packages/modutils/modutils-cross_2.4.27.bb
+++ b/packages/modutils/modutils-cross_2.4.27.bb
@@ -1,6 +1,6 @@
SECTION = "base"
require modutils_${PV}.bb
-PR = "r8"
+PR = "r9"
inherit cross
S = "${WORKDIR}/modutils-${PV}"
DEPENDS = ""
diff --git a/packages/modutils/modutils_2.4.27.bb b/packages/modutils/modutils_2.4.27.bb
index 4ea93282de..c02dc1d5c3 100644
--- a/packages/modutils/modutils_2.4.27.bb
+++ b/packages/modutils/modutils_2.4.27.bb
@@ -2,8 +2,9 @@ SECTION = "base"
DESCRIPTION = "These utilities are intended to make a Linux modular kernel \
manageable for all users, administrators and distribution maintainers."
LICENSE = "GPLv2"
+DEPENDS = "bison-native"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/files"
-PR = "r7"
+PR = "r8"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/modutils/v2.4/modutils-${PV}.tar.bz2 \
file://lex.l.diff;patch=1 \
diff --git a/packages/mono/files/mono-configure.patch b/packages/mono/files/mono-configure.patch
new file mode 100644
index 0000000000..6baa39aa1a
--- /dev/null
+++ b/packages/mono/files/mono-configure.patch
@@ -0,0 +1,32 @@
+--- mono-1.2.3.50.20070416.orig/configure.in 2007-04-16 07:02:59.000000000 +0200
++++ mono-1.2.3.50.20070416/configure.in 2007-04-16 18:36:00.000000000 +0200
+@@ -806,7 +806,9 @@ if test x$platform_win32 = xno; then
+ large_offt=yes
+ ], [
+ AC_MSG_RESULT(no)
+- ], "")
++ ], [
++ AC_MSG_RESULT(no)
++ ])
+ CPPFLAGS=$large_CPPFLAGS
+ ])
+
+@@ -1131,6 +1133,8 @@ if test x$platform_win32 = xno; then
+ ], [
+ AC_MSG_RESULT(no)
+ with_tls=pthread
++ ], [
++ AC_MSG_RESULT(yes)
+ ])
+ fi
+
+@@ -1233,6 +1237,9 @@ if test x$platform_win32 = xno; then
+ ], [
+ with_sigaltstack=no
+ AC_MSG_RESULT(no)
++ ], [
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_WORKING_SIGALTSTACK)
+ ])
+ fi
+
diff --git a/packages/mono/files/mono-mini-Makefile.patch b/packages/mono/files/mono-mini-Makefile.patch
new file mode 100644
index 0000000000..92399e8241
--- /dev/null
+++ b/packages/mono/files/mono-mini-Makefile.patch
@@ -0,0 +1,11 @@
+--- mono-1.2.3.20070219.orig/mono/mini/Makefile.am 2007-02-20 01:21:57.000000000 +0100
++++ mono-1.2.3.20070219/mono/mini/Makefile.am 2007-02-20 01:22:45.000000000 +0100
+@@ -409,7 +409,7 @@
+ $(GENMDESC_PRG) $(srcdir)/cpu-mips.md cpu-mips.h mips_desc
+
+ inssel.c inssel.h: $(BURGSRC)
+- $(monodir)/mono/monoburg/monoburg -c 1 -p -e $(BURGSRC) -d inssel.h -s inssel.c
++ monoburg -c 1 -p -e $(BURGSRC) -d inssel.h -s inssel.c
+
+ testi: mono test.exe
+ $(RUNTIME) -v -v --ncompile 1 --compile Test:$(mtest) test.exe
diff --git a/packages/mono/files/mono-mips-endian.patch b/packages/mono/files/mono-mips-endian.patch
new file mode 100644
index 0000000000..c0f1d3c759
--- /dev/null
+++ b/packages/mono/files/mono-mips-endian.patch
@@ -0,0 +1,28 @@
+--- mono-1.2.20070131/mono/mini/mini-mips.c 2007-01-31 07:00:22.000000000 +0100
++++ mono-1.2.20070131.mod/mono/mini/mini-mips.c 2007-02-17 21:22:34.000000000 +0100
+@@ -238,6 +238,11 @@
+ patch_lui_addiu(guint32 *ip, guint32 val)
+ {
+ guint16 *__lui_addiu = (guint16*)(void *)(ip);
++#if G_BYTE_ORDER == G_BIG_ENDIAN
++ int index=1;
++#else
++ int index=0;
++#endif
+
+ #if 0
+ printf ("patch_lui_addiu ip=0x%08x (0x%08x, 0x%08x) to point to 0x%08x\n",
+@@ -245,10 +250,10 @@
+ fflush (stdout);
+ #endif
+ if (((guint32)(val)) & (1 << 15))
+- __lui_addiu [1] = ((((guint32)(val)) >> 16) & 0xffff) + 1;
++ __lui_addiu [index] = ((((guint32)(val)) >> 16) & 0xffff) + 1;
+ else
+- __lui_addiu [1] = (((guint32)(val)) >> 16) & 0xffff;
+- __lui_addiu [3] = ((guint32)(val)) & 0xffff;
++ __lui_addiu [index] = (((guint32)(val)) >> 16) & 0xffff;
++ __lui_addiu [index+2] = ((guint32)(val)) & 0xffff;
+ mono_arch_flush_icache ((guint8 *)ip, 8);
+ }
+
diff --git a/packages/mono/files/mono-monoburg-Makefile.patch b/packages/mono/files/mono-monoburg-Makefile.patch
new file mode 100644
index 0000000000..03f51c4b36
--- /dev/null
+++ b/packages/mono/files/mono-monoburg-Makefile.patch
@@ -0,0 +1,21 @@
+--- mono-1.2.20070131/mono/monoburg/Makefile.am 2006-10-10 07:00:26.000000000 +0200
++++ mono-1.2.20070131.mod/mono/monoburg/Makefile.am 2007-02-13 17:44:02.000000000 +0100
+@@ -1,5 +1,3 @@
+-CC=$(CC_FOR_BUILD)
+-
+ am_CFLAGS = $(BUILD_GLIB_CFLAGS) -I$(srcdir) $(CFLAGS_FOR_BUILD)
+
+ #noinst_PROGRAMS = sample
+@@ -12,10 +10,10 @@
+ bison $(srcdir)/monoburg.y -o parser.c
+
+ monoburg$(BUILD_EXEEXT): $(srcdir)/monoburg.c $(srcdir)/monoburg.h parser.c
+- $(CC_FOR_BUILD) -o $@ $(srcdir)/monoburg.c parser.c $(am_CFLAGS) $(LDFLAGS) $(BUILD_GLIB_LIBS)
++ $(CC) -o $@ $(srcdir)/monoburg.c parser.c $(am_CFLAGS) $(LDFLAGS) $(BUILD_GLIB_LIBS)
+
+ sample.c: monoburg$(BUILD_EXEEXT) $(srcdir)/sample.brg
+- ./monoburg$(BUILD_EXEEXT) $(srcdir)/sample.brg > sample.c
++ monoburg$(BUILD_EXEEXT) $(srcdir)/sample.brg > sample.c
+
+ #sample_LDADD = $(BUILD_GLIB_LIBS)
+
diff --git a/packages/mono/mono-native_1.2.4.bb b/packages/mono/mono-native_1.2.4.bb
new file mode 100644
index 0000000000..9043ccc801
--- /dev/null
+++ b/packages/mono/mono-native_1.2.4.bb
@@ -0,0 +1,9 @@
+require mono_1.2.4.inc
+PR = "r2"
+DEPENDS = "glib-2.0-native"
+
+inherit native
+
+do_stage_prepend() {
+ install -m 755 ${S}/mono/monoburg/monoburg ${STAGING_BINDIR}
+}
diff --git a/packages/mono/mono_1.2.4.bb b/packages/mono/mono_1.2.4.bb
new file mode 100644
index 0000000000..13cb463129
--- /dev/null
+++ b/packages/mono/mono_1.2.4.bb
@@ -0,0 +1,19 @@
+require mono_1.2.4.inc
+DEPENDS = "mono-native glib-2.0"
+
+PR = "r3"
+SRC_URI += "file://mono-monoburg-Makefile.patch;patch=1 \
+ file://mono-mips-endian.patch;patch=1 \
+ file://mono-configure.patch;patch=1 \
+ file://mono-mini-Makefile.patch;patch=1 \
+ "
+
+do_install_append() {
+ install -d ${D}${libdir}/mono/1.0/
+ cp ${S}/mcs/class/lib/monolite/* ${D}${libdir}/mono/1.0/
+}
+
+PACKAGES =+ "mono-dll"
+FILES_mono-dll = "${libdir}/mono/1.0/"
+
+
diff --git a/packages/mono/mono_1.2.4.inc b/packages/mono/mono_1.2.4.inc
new file mode 100644
index 0000000000..b9a721150f
--- /dev/null
+++ b/packages/mono/mono_1.2.4.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Mono Programming Language"
+SECTION = "devel/mono"
+LICENSE = "GPL LGPL X11"
+
+SRC_URI = "http://go-mono.com/sources/mono/mono-${PV}.tar.bz2"
+
+S = "${WORKDIR}/mono-${PV}"
+
+inherit autotools
+EXTRA_OECONF = "--disable-mcs-build"
+EXTRA_OECONF_arm = "--without-tls"
+EXTRA_OECONF_mipsel = "--without-tls"
diff --git a/packages/monotone/monotone-6_0.33.bb b/packages/monotone/monotone-6_0.33.bb
index 47e58a48c6..64b1d1699e 100644
--- a/packages/monotone/monotone-6_0.33.bb
+++ b/packages/monotone/monotone-6_0.33.bb
@@ -25,7 +25,7 @@ inherit autotools
#FIXME: remove the following
ARM_INSTRUCTION_SET = "arm"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://monotone.ca/downloads/${PV}/monotone-${PV}.tar.gz \
file://txt2c-cross-post-0.22.patch;patch=1 \
@@ -42,7 +42,7 @@ do_install_append() {
install -d ${D}${tsd}
install -c -m 755 testsuite ${D}${tsd}/testsuite
cp -pPR tests ${D}${tsd}/tests
- rm ${D}/home/monotone/monotone-6/tests/tests/diff_a_binary_file/binary
+ rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary
}
PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
diff --git a/packages/monotone/monotone-6_0.34.bb b/packages/monotone/monotone-6_0.34.bb
new file mode 100644
index 0000000000..0442e0232e
--- /dev/null
+++ b/packages/monotone/monotone-6_0.34.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "Monotone is a distributed Source Control System"
+HOMEPAGE = "http://www.monotone.ca/"
+SECTION = "devel"
+PRIORITY = "optional"
+LICENSE = "MIT"
+DEPENDS = "boost"
+
+PROVIDES = "monotone"
+RPROVIDES = "monotone"
+
+S = "${WORKDIR}/monotone-${PV}"
+# no cross compile support - it tries to run the test program even with
+# --enable_ipv6=yes
+EXTRA_OECONF = "--disable-ipv6 \
+ --disable-dependency-tracking \
+ --disable-rpath \
+ --disable-nls \
+ --with-gnu-ld \
+ --with-bundled-lua --with-bundled-sqlite"
+
+inherit autotools
+
+# Release 0.22 reveals bugs in g++ for thumb (g++ generates
+# relocations which the linker cannot represent)
+#FIXME: remove the following
+ARM_INSTRUCTION_SET = "arm"
+
+PR = "r0"
+
+SRC_URI = "http://monotone.ca/downloads/${PV}/monotone-${PV}.tar.gz \
+ file://txt2c-cross-post-0.22.patch;patch=1 \
+ file://uclibc.database.hh.stdarg.patch;patch=1 \
+ file://configure.ac-no-sync-with-stdio-0.31.patch;patch=1 \
+ "
+do_compile_append() {
+ touch testsuite
+}
+
+# This makes the testsuite as a package and renames the monotone executable
+# to include the netsync suffix.
+do_install_append() {
+ install -d ${D}${tsd}
+ install -c -m 755 testsuite ${D}${tsd}/testsuite
+ cp -pPR tests ${D}${tsd}/tests
+ rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary
+}
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+tsd = "/home/monotone/${PN}"
+FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
+RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
+
diff --git a/packages/mozilla/files/eabi-fix.patch b/packages/mozilla/files/eabi-fix.patch
new file mode 100644
index 0000000000..fd3bb88683
--- /dev/null
+++ b/packages/mozilla/files/eabi-fix.patch
@@ -0,0 +1,66 @@
+http://lists.debian.org/debian-arm/2007/05/msg00039.html
+
+From: Lennert Buytenhek <buytenh@wantstofly.org>
+
+Hi,
+
+The reason that building nss (i.e., firefox) would segfault on ARM EABI
+systems is an assumption about the layout of the jmp_buf structure in
+the nspr library (which nss depends on) that does hold on old-ABI but
+no longer holds on EABI. The attached patch fixes this assumption,
+and fixes the shlibsign segfault during the building of nss (it also
+fixes a floating point byte order assumption.)
+
+Looks sane?
+
+It's of course a stupid idea to depend on a particular layout of the
+jmp_buf structure in application programs, but oh well. People write
+ugly buggy code, film at 11.
+
+
+--- mozilla/nsprpub/pr/src/misc/prdtoa.c.orig 2007-05-06 02:39:00.000000000 +0200
++++ mozilla/nsprpub/pr/src/misc/prdtoa.c 2007-05-06 02:39:22.000000000 +0200
+@@ -59,8 +59,8 @@
+ /* FIXME: deal with freelist and p5s. */
+ }
+
+-#if defined(__arm) || defined(__arm__) || defined(__arm26__) \
+- || defined(__arm32__)
++#if (defined(__arm) || defined(__arm__) || defined(__arm26__) \
++ || defined(__arm32__)) && !defined(__ARM_EABI__) && !defined(__ARMEB__)
+ #define IEEE_ARM
+ #elif defined(IS_LITTLE_ENDIAN)
+ #define IEEE_8087
+--- mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-05-06 02:39:45.000000000 +0200
++++ mozilla/nsprpub/pr/include/md/_linux.h 2007-05-06 02:40:57.000000000 +0200
+@@ -346,7 +346,7 @@
+ #error "Linux/MIPS pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
+-#elif defined(__arm__)
++#elif defined(__arm__) && !defined(__ARM_EABI__)
+ /* ARM/Linux */
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20]
+@@ -358,6 +358,18 @@
+ #error "ARM/Linux pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
++#elif defined(__arm__) && defined(__ARM_EABI__)
++/* ARM/Linux */
++#if defined(__GLIBC__) && __GLIBC__ >= 2
++#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8]
++#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val))
++#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t))
++#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7])
++#define _MD_SP_TYPE __ptr_t
++#else
++#error "ARM/Linux pre-glibc2 not supported yet"
++#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
++
+ #else
+
+ #error "Unknown CPU architecture"
+
+
+
diff --git a/packages/mozilla/files/eabi-fix2.patch b/packages/mozilla/files/eabi-fix2.patch
new file mode 100644
index 0000000000..5f64e7f796
--- /dev/null
+++ b/packages/mozilla/files/eabi-fix2.patch
@@ -0,0 +1,56 @@
+https://bugzilla.mozilla.org/show_bug.cgi?id=369722
+
+Index: js/src/jsnum.h
+===================================================================
+RCS file: /cvsroot/mozilla/js/src/jsnum.h,v
+retrieving revision 3.27
+diff -p -u -8 -r3.27 jsnum.h
+--- mozilla/js/src/jsnum.h 21 Dec 2006 01:00:32 -0000 3.27
++++ mozilla/js/src/jsnum.h 8 Feb 2007 12:13:01 -0000
+@@ -52,23 +52,24 @@ JS_BEGIN_EXTERN_C
+
+ /*
+ * Stefan Hanske <sh990154@mail.uni-greifswald.de> reports:
+ * ARM is a little endian architecture but 64 bit double words are stored
+ * differently: the 32 bit words are in little endian byte order, the two words
+ * are stored in big endian`s way.
+ */
+
+-#if defined(__arm) || defined(__arm32__) || defined(__arm26__) || defined(__arm__)
+-#define CPU_IS_ARM
++#if !defined(__ARM_EABI__) && \
++ (defined(__arm) || defined(__arm32__) || defined(__arm26__) || defined(__arm__))
++#define IEEE_ARM
+ #endif
+
+ typedef union jsdpun {
+ struct {
+-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM)
++#if defined(IS_LITTLE_ENDIAN) && !defined(IEEE_ARM)
+ uint32 lo, hi;
+ #else
+ uint32 hi, lo;
+ #endif
+ } s;
+ jsdouble d;
+ } jsdpun;
+
+@@ -87,17 +88,17 @@ typedef union jsdpun {
+
+ #else /* not or old GNUC */
+
+ /*
+ * We don't know of any non-gcc compilers that perform alias optimization,
+ * so this code should work.
+ */
+
+-#if defined(IS_LITTLE_ENDIAN) && !defined(CPU_IS_ARM)
++#if defined(IS_LITTLE_ENDIAN) && !defined(IEEE_ARM)
+ #define JSDOUBLE_HI32(x) (((uint32 *)&(x))[1])
+ #define JSDOUBLE_LO32(x) (((uint32 *)&(x))[0])
+ #else
+ #define JSDOUBLE_HI32(x) (((uint32 *)&(x))[0])
+ #define JSDOUBLE_LO32(x) (((uint32 *)&(x))[1])
+ #endif
+
+ #define JSDOUBLE_SET_HI32(x, y) (JSDOUBLE_HI32(x)=(y))
diff --git a/packages/mozilla/files/eabi-fix3.patch b/packages/mozilla/files/eabi-fix3.patch
new file mode 100644
index 0000000000..8bf8c2f4da
--- /dev/null
+++ b/packages/mozilla/files/eabi-fix3.patch
@@ -0,0 +1,15 @@
+From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+Index: mozilla/extensions/transformiix/source/base/Double.cpp
+===================================================================
+--- mozilla.orig/extensions/transformiix/source/base/Double.cpp 2007-05-09 11:21:34.000000000 +0200
++++ mozilla/extensions/transformiix/source/base/Double.cpp 2007-05-09 11:23:59.000000000 +0200
+@@ -71,7 +71,7 @@
+ * are stored in big endian`s way.
+ */
+
+-#if defined(__arm) || defined(__arm32__) || defined(_arm26__) || defined(__arm__)
++#if !defined(__ARM_EABI__) && defined(__arm) || defined(__arm32__) || defined(_arm26__) || defined(__arm__)
+ #define CPU_IS_ARM
+ #endif
+
diff --git a/packages/mozilla/firefox-1.0.7/mozilla-eabi.patch b/packages/mozilla/firefox-1.0.7/mozilla-eabi.patch
new file mode 100644
index 0000000000..c12f6ef04e
--- /dev/null
+++ b/packages/mozilla/firefox-1.0.7/mozilla-eabi.patch
@@ -0,0 +1,28 @@
+Index: mozilla/nsprpub/pr/src/misc/prdtoa.c
+===================================================================
+--- mozilla.orig/nsprpub/pr/src/misc/prdtoa.c 2004-03-12 07:30:50.000000000 +0000
++++ mozilla/nsprpub/pr/src/misc/prdtoa.c 2007-05-07 11:35:10.000000000 +0100
+@@ -132,8 +132,8 @@
+ * is not strictly legal and can cause trouble with aggressively
+ * optimizing compilers (e.g., gcc 2.95.1 under -O2).
+ */
+-#if defined(__arm) || defined(__arm__) || defined(__arm26__) \
+- || defined(__arm32__)
++#if (defined(__arm) || defined(__arm__) || defined(__arm26__) \
++ || defined(__arm32__)) && !defined(__ARM_EABI__) && !defined(__ARMEB__)
+ #define IEEE_ARM
+ #elif defined(IS_LITTLE_ENDIAN)
+ #define IEEE_8087
+Index: mozilla/nsprpub/pr/include/md/_linux.h
+===================================================================
+--- mozilla.orig/nsprpub/pr/include/md/_linux.h 2005-05-04 19:06:17.000000000 +0100
++++ mozilla/nsprpub/pr/include/md/_linux.h 2007-05-07 11:34:16.000000000 +0100
+@@ -285,7 +285,7 @@
+ #error "Linux/MIPS pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
+-#elif defined(__arm__)
++#elif defined(__arm__) && !defined(__ARM_EABI__)
+ /* ARM/Linux */
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20]
diff --git a/packages/mozilla/firefox-2.0.0.1/xptcinvoke-arm.patch b/packages/mozilla/firefox-1.0.7/xptcinvoke-arm.patch
index bc0c6f4e5c..bc0c6f4e5c 100644
--- a/packages/mozilla/firefox-2.0.0.1/xptcinvoke-arm.patch
+++ b/packages/mozilla/firefox-1.0.7/xptcinvoke-arm.patch
diff --git a/packages/mozilla/firefox-1.5.0.6/mozconfig b/packages/mozilla/firefox-1.5.0.6/mozconfig
deleted file mode 100644
index 025b396ac7..0000000000
--- a/packages/mozilla/firefox-1.5.0.6/mozconfig
+++ /dev/null
@@ -1,53 +0,0 @@
-. $topsrcdir/browser/config/mozconfig
-
-# use GTK+-2 widget set with XFT font rendering
-ac_add_options --enable-default-toolkit=gtk2
-ac_add_options --enable-xft
-ac_add_options --disable-freetype2
-
-# enable minimal profile support
-ac_add_options --disable-profilesharing
-ac_add_options --disable-profilelocking
-ac_add_options --enable-single-profile
-
-ac_add_options --with-system-zlib
-ac_add_options --with-system-jpeg
-ac_add_options --with-system-png
-
-ac_add_options --disable-accessibility
-ac_add_options --disable-composer
-#ac_add_options --enable-plaintext-editor-only
-ac_add_options --disable-mailnews
-ac_add_options --disable-ldap
-#ac_add_options --disable-postscript
-ac_add_options --disable-mathml
-ac_add_options --disable-jsd
-ac_add_options --disable-installer
-ac_add_options --disable-xprint
-ac_add_options --disable-necko-disk-cache
-
-# configure necko to allocate smaller network buffers
-ac_add_options --enable-necko-small-buffers
-
-# disable debug logging and tests
-#ac_add_options --disable-dtd-debug
-ac_add_options --disable-logging
-ac_add_options --disable-debug
-ac_add_options --disable-gtktest
-ac_add_options --disable-tests
-
-# build crypto module (PSM + NSS)
-ac_add_options --enable-crypto
-
-# build minimal set of protocol handlers
-ac_add_options --enable-necko-protocols=http,file,res,jar,ftp,about,viewsource
-
-# build minimal set of image decoders
-ac_add_options --enable-image-decoders=png,gif,jpeg
-
-#ac_add_options --enable-reorder
-#ac_add_options --enable-elf-dynstr-gc
-
-# enable static build
-#ac_add_options --disable-shared
-#ac_add_options --enable-static
diff --git a/packages/mozilla/firefox-2.0.0.3/.mtn2git_empty b/packages/mozilla/firefox-2.0.0.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mozilla/firefox-2.0.0.3/.mtn2git_empty
diff --git a/packages/mozilla/firefox-2.0.0.1/jsautocfg-dontoverwrite.patch b/packages/mozilla/firefox-2.0.0.3/jsautocfg-dontoverwrite.patch
index 39978cfd11..39978cfd11 100644
--- a/packages/mozilla/firefox-2.0.0.1/jsautocfg-dontoverwrite.patch
+++ b/packages/mozilla/firefox-2.0.0.3/jsautocfg-dontoverwrite.patch
diff --git a/packages/mozilla/firefox-2.0.0.1/jsdtoa-float-type.patch b/packages/mozilla/firefox-2.0.0.3/jsdtoa-float-type.patch
index 028900fa1b..028900fa1b 100644
--- a/packages/mozilla/firefox-2.0.0.1/jsdtoa-float-type.patch
+++ b/packages/mozilla/firefox-2.0.0.3/jsdtoa-float-type.patch
diff --git a/packages/mozilla/firefox-2.0.0.1/mozconfig b/packages/mozilla/firefox-2.0.0.3/mozconfig
index 9737330a77..9737330a77 100644
--- a/packages/mozilla/firefox-2.0.0.1/mozconfig
+++ b/packages/mozilla/firefox-2.0.0.3/mozconfig
diff --git a/packages/mozilla/firefox-2.0.0.3/mozilla-eabi.patch b/packages/mozilla/firefox-2.0.0.3/mozilla-eabi.patch
new file mode 100644
index 0000000000..fe9adf088e
--- /dev/null
+++ b/packages/mozilla/firefox-2.0.0.3/mozilla-eabi.patch
@@ -0,0 +1,42 @@
+--- nspr-4.6.6/mozilla/nsprpub/pr/src/misc/prdtoa.c.orig 2007-05-06 02:39:00.000000000 +0200
++++ nspr-4.6.6/mozilla/nsprpub/pr/src/misc/prdtoa.c 2007-05-06 02:39:22.000000000 +0200
+@@ -59,8 +59,8 @@
+ /* FIXME: deal with freelist and p5s. */
+ }
+
+-#if defined(__arm) || defined(__arm__) || defined(__arm26__) \
+- || defined(__arm32__)
++#if (defined(__arm) || defined(__arm__) || defined(__arm26__) \
++ || defined(__arm32__)) && !defined(__ARM_EABI__) && !defined(__ARMEB__)
+ #define IEEE_ARM
+ #elif defined(IS_LITTLE_ENDIAN)
+ #define IEEE_8087
+--- nspr-4.6.6/mozilla/nsprpub/pr/include/md/_linux.h.orig 2007-05-06 02:39:45.000000000 +0200
++++ nspr-4.6.6/mozilla/nsprpub/pr/include/md/_linux.h 2007-05-06 02:40:57.000000000 +0200
+@@ -346,7 +346,7 @@
+ #error "Linux/MIPS pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
+-#elif defined(__arm__)
++#elif defined(__arm__) && !defined(__ARM_EABI__)
+ /* ARM/Linux */
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[20]
+ <at> <at> -358,6 +358,18 <at> <at>
+ #error "ARM/Linux pre-glibc2 not supported yet"
+ #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
+
++#elif defined(__arm__) && defined(__ARM_EABI__)
++/* ARM/Linux */
++#if defined(__GLIBC__) && __GLIBC__ >= 2
++#define _MD_GET_SP(_t) (_t)->md.context[0].__jmpbuf[8]
++#define _MD_SET_FP(_t, val) ((_t)->md.context[0].__jmpbuf[7] = (val))
++#define _MD_GET_SP_PTR(_t) &(_MD_GET_SP(_t))
++#define _MD_GET_FP_PTR(_t) (&(_t)->md.context[0].__jmpbuf[7])
++#define _MD_SP_TYPE __ptr_t
++#else
++#error "ARM/Linux pre-glibc2 not supported yet"
++#endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
++
+ #else
+
diff --git a/packages/mozilla/firefox-2.0.0.1/mult-crash-fix.patch b/packages/mozilla/firefox-2.0.0.3/mult-crash-fix.patch
index cb30f896ed..cb30f896ed 100644
--- a/packages/mozilla/firefox-2.0.0.1/mult-crash-fix.patch
+++ b/packages/mozilla/firefox-2.0.0.3/mult-crash-fix.patch
diff --git a/packages/mozilla/firefox-2.0.0.1/security-cross.patch b/packages/mozilla/firefox-2.0.0.3/security-cross.patch
index 56c8d04a9e..56c8d04a9e 100644
--- a/packages/mozilla/firefox-2.0.0.1/security-cross.patch
+++ b/packages/mozilla/firefox-2.0.0.3/security-cross.patch
diff --git a/packages/mozilla/firefox-2.0.0.3/xptcinvoke-arm.patch b/packages/mozilla/firefox-2.0.0.3/xptcinvoke-arm.patch
new file mode 100644
index 0000000000..bc0c6f4e5c
--- /dev/null
+++ b/packages/mozilla/firefox-2.0.0.3/xptcinvoke-arm.patch
@@ -0,0 +1,11 @@
+--- iceweasel-2.0.0.1+dfsg.orig/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
++++ iceweasel-2.0.0.1+dfsg/xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp
+@@ -212,7 +212,7 @@
+ "add sp, sp, r4 \n\t" /* restore stack pointer */
+ "mov %0, r0 \n\t" /* the result... */
+ : "=r" (result)
+- : "r" (&my_params)
++ : "r" (&my_params), "m" (my_params)
+ : "r0", "r1", "r2", "r3", "r4", "ip", "lr", "sp"
+ );
+
diff --git a/packages/mozilla/firefox-2.0.0.1/xptcstubs.patch b/packages/mozilla/firefox-2.0.0.3/xptcstubs.patch
index f2645690f4..f2645690f4 100644
--- a/packages/mozilla/firefox-2.0.0.1/xptcstubs.patch
+++ b/packages/mozilla/firefox-2.0.0.3/xptcstubs.patch
diff --git a/packages/mozilla/firefox-2.0/jsautocfg-dontoverwrite.patch b/packages/mozilla/firefox-2.0/jsautocfg-dontoverwrite.patch
deleted file mode 100644
index 39978cfd11..0000000000
--- a/packages/mozilla/firefox-2.0/jsautocfg-dontoverwrite.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- mozilla/js/src/Makefile.in.orig 2006-12-12 11:46:02.000000000 +0000
-+++ mozilla/js/src/Makefile.in 2006-12-12 11:46:27.000000000 +0000
-@@ -319,20 +319,8 @@
-
- jsopcode.h jsopcode.c: jsopcode.tbl
-
--ifeq (,$(CROSS_COMPILE)$(filter-out WINNT,$(OS_ARCH)))
- jsautocfg.h:
- touch $@
--else
--ifeq ($(OS_ARCH),WINCE)
--jsautocfg.h:
-- touch $@
--else
--jsautocfg.h: jscpucfg$(HOST_BIN_SUFFIX)
-- @rm -f $@ jsautocfg.tmp
-- ./jscpucfg > jsautocfg.tmp
-- mv jsautocfg.tmp $@
--endif
--endif
-
- # jscpucfg is a strange target
- # Needs to be built with the host compiler but needs to include
diff --git a/packages/mozilla/firefox-2.0/mozconfig b/packages/mozilla/firefox-2.0/mozconfig
deleted file mode 100644
index 025b396ac7..0000000000
--- a/packages/mozilla/firefox-2.0/mozconfig
+++ /dev/null
@@ -1,53 +0,0 @@
-. $topsrcdir/browser/config/mozconfig
-
-# use GTK+-2 widget set with XFT font rendering
-ac_add_options --enable-default-toolkit=gtk2
-ac_add_options --enable-xft
-ac_add_options --disable-freetype2
-
-# enable minimal profile support
-ac_add_options --disable-profilesharing
-ac_add_options --disable-profilelocking
-ac_add_options --enable-single-profile
-
-ac_add_options --with-system-zlib
-ac_add_options --with-system-jpeg
-ac_add_options --with-system-png
-
-ac_add_options --disable-accessibility
-ac_add_options --disable-composer
-#ac_add_options --enable-plaintext-editor-only
-ac_add_options --disable-mailnews
-ac_add_options --disable-ldap
-#ac_add_options --disable-postscript
-ac_add_options --disable-mathml
-ac_add_options --disable-jsd
-ac_add_options --disable-installer
-ac_add_options --disable-xprint
-ac_add_options --disable-necko-disk-cache
-
-# configure necko to allocate smaller network buffers
-ac_add_options --enable-necko-small-buffers
-
-# disable debug logging and tests
-#ac_add_options --disable-dtd-debug
-ac_add_options --disable-logging
-ac_add_options --disable-debug
-ac_add_options --disable-gtktest
-ac_add_options --disable-tests
-
-# build crypto module (PSM + NSS)
-ac_add_options --enable-crypto
-
-# build minimal set of protocol handlers
-ac_add_options --enable-necko-protocols=http,file,res,jar,ftp,about,viewsource
-
-# build minimal set of image decoders
-ac_add_options --enable-image-decoders=png,gif,jpeg
-
-#ac_add_options --enable-reorder
-#ac_add_options --enable-elf-dynstr-gc
-
-# enable static build
-#ac_add_options --disable-shared
-#ac_add_options --enable-static
diff --git a/packages/mozilla/firefox-2.0/security-cross.patch b/packages/mozilla/firefox-2.0/security-cross.patch
deleted file mode 100644
index 56c8d04a9e..0000000000
--- a/packages/mozilla/firefox-2.0/security-cross.patch
+++ /dev/null
@@ -1,93 +0,0 @@
---- mozilla/security/coreconf/Linux.mk.orig 2006-12-12 10:53:12.000000000 +0000
-+++ mozilla/security/coreconf/Linux.mk 2006-12-12 10:54:13.000000000 +0000
-@@ -52,88 +52,8 @@
-
- DEFAULT_COMPILER = gcc
-
--ifeq ($(OS_TEST),m68k)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = m68k
--else
--ifeq ($(OS_TEST),ppc64)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = ppc
--ifeq ($(USE_64),1)
-- ARCHFLAG = -m64
--endif
--else
--ifeq ($(OS_TEST),ppc)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = ppc
--else
--ifeq ($(OS_TEST),alpha)
-- OS_REL_CFLAGS = -D_ALPHA_ -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = alpha
--else
--ifeq ($(OS_TEST),ia64)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = ia64
--else
--ifeq ($(OS_TEST),x86_64)
--ifeq ($(USE_64),1)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = x86_64
--else
-- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
-- CPU_ARCH = x86
-- ARCHFLAG = -m32
--endif
--else
--ifeq ($(OS_TEST),sparc)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = sparc
--else
--ifeq ($(OS_TEST),sparc64)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = sparc
--else
--ifeq (,$(filter-out arm% sa110,$(OS_TEST)))
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = arm
--else
--ifeq ($(OS_TEST),parisc)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = hppa
--else
--ifeq ($(OS_TEST),parisc64)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = hppa
--else
--ifeq ($(OS_TEST),s390)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = s390
--else
--ifeq ($(OS_TEST),s390x)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = s390x
--else
--ifeq ($(OS_TEST),mips)
-- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-- CPU_ARCH = mips
--else
-- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
-- CPU_ARCH = x86
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--endif
--
-+OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-+CPU_ARCH =
-
- LIBC_TAG = _glibc
-
diff --git a/packages/mozilla/firefox_1.0.7.bb b/packages/mozilla/firefox_1.0.7.bb
index 3a82dafd92..dd4d734f89 100644
--- a/packages/mozilla/firefox_1.0.7.bb
+++ b/packages/mozilla/firefox_1.0.7.bb
@@ -5,7 +5,9 @@ SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/
file://firefox-cc-fix.patch;patch=1 \
file://jsautocfg.h \
file://extensions-hack.patch;patch=1 \
- file://firefox-1.0-gcc4-compile.patch;patch=1;pnum=0"
+ file://firefox-1.0-gcc4-compile.patch;patch=1;pnum=0 \
+ file://xptcinvoke-arm.patch;patch=1 \
+ file://mozilla-eabi.patch;patch=1"
S = "${WORKDIR}/mozilla"
@@ -13,6 +15,8 @@ inherit mozilla
require firefox.inc
+EXTRA_OECONF += " --with-gssapi=${STAGINGLIBDIR}/../"
+
do_compile_prepend() {
cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
}
diff --git a/packages/mozilla/firefox_1.5.0.6.bb b/packages/mozilla/firefox_1.5.0.6.bb
deleted file mode 100644
index 5f21212bd5..0000000000
--- a/packages/mozilla/firefox_1.5.0.6.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-PR = "r1"
-SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \
- file://xptcstubs.patch;patch=1 \
- file://no-xmb.patch;patch=1 \
- file://jsautocfg.h \
- file://extensions-hack.patch;patch=1"
-
-S = "${WORKDIR}/mozilla"
-DEFAULT_PREFERENCE = "-1"
-
-inherit mozilla
-
-require firefox.inc
-
-do_compile_prepend() {
- cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
-}
-
diff --git a/packages/mozilla/firefox_2.0.0.1.bb b/packages/mozilla/firefox_2.0.0.1.bb
deleted file mode 100644
index db3c0f4902..0000000000
--- a/packages/mozilla/firefox_2.0.0.1.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-PR = "r1"
-SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \
- file://xptcstubs.patch;patch=1 \
- file://no-xmb.patch;patch=1 \
- file://jsautocfg.h \
- file://extensions-hack.patch;patch=1 \
- file://security-cross.patch;patch=1 \
- file://jsautocfg-dontoverwrite.patch;patch=1 \
- file://xptcinvoke-arm.patch;patch=1 \
- file://jsdtoa-float-type.patch;patch=1 \
- "
-S = "${WORKDIR}/mozilla"
-DEFAULT_PREFERENCE = "-1"
-
-inherit mozilla
-
-require firefox.inc
-
-do_compile_prepend() {
- cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
-
- sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk
-}
-
-do_stage() {
-
- install -d ${STAGING_INCDIR}/${P}
- cd dist/sdk/include
- headers=`find . -name "*.h"`
- for f in $headers
- do
- install -D -m 0644 $f ${STAGING_INCDIR}/${P}/$f
- done
- # removes 2 lines that call absent headers
- sed -e '178,179d' ${STAGING_INCDIR}/${P}/nsIServiceManager.h
-}
-
diff --git a/packages/mozilla/firefox_2.0.0.3.bb b/packages/mozilla/firefox_2.0.0.3.bb
new file mode 100644
index 0000000000..ede30a6b05
--- /dev/null
+++ b/packages/mozilla/firefox_2.0.0.3.bb
@@ -0,0 +1,39 @@
+PR = "r2"
+SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \
+ file://xptcstubs.patch;patch=1 \
+ file://no-xmb.patch;patch=1 \
+ file://jsautocfg.h \
+ file://extensions-hack.patch;patch=1 \
+ file://security-cross.patch;patch=1 \
+ file://jsautocfg-dontoverwrite.patch;patch=1 \
+ file://xptcinvoke-arm.patch;patch=1 \
+ file://eabi-fix.patch;patch=1 \
+ file://eabi-fix2.patch;patch=1 \
+ file://eabi-fix3.patch;patch=1 \
+ "
+S = "${WORKDIR}/mozilla"
+DEFAULT_PREFERENCE = "-1"
+
+inherit mozilla
+
+require firefox.inc
+
+do_compile_prepend() {
+ cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
+
+ sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk
+}
+
+do_stage() {
+
+ install -d ${STAGING_INCDIR}/${P}
+ cd dist/sdk/include
+ headers=`find . -name "*.h"`
+ for f in $headers
+ do
+ install -D -m 0644 $f ${STAGING_INCDIR}/${P}/$f
+ done
+ # removes 2 lines that call absent headers
+ sed -e '178,179d' ${STAGING_INCDIR}/${P}/nsIServiceManager.h
+}
+
diff --git a/packages/mozilla/firefox_2.0.bb b/packages/mozilla/firefox_2.0.bb
deleted file mode 100644
index c8fbccc2bf..0000000000
--- a/packages/mozilla/firefox_2.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-PR = "r1"
-SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${PV}/source/firefox-${PV}-source.tar.bz2 \
- file://xptcstubs.patch;patch=1 \
- file://no-xmb.patch;patch=1 \
- file://jsautocfg.h \
- file://extensions-hack.patch;patch=1 \
- file://security-cross.patch;patch=1 \
- file://jsautocfg-dontoverwrite.patch;patch=1"
-
-S = "${WORKDIR}/mozilla"
-DEFAULT_PREFERENCE = "-1"
-
-inherit mozilla
-
-require firefox.inc
-
-do_compile_prepend() {
- cp ${WORKDIR}/jsautocfg.h ${S}/js/src/
-
- sed -i "s|CPU_ARCH =|CPU_ARCH = ${TARGET_ARCH}|" security/coreconf/Linux.mk
-}
-
-do_stage() {
-
- install -d ${STAGING_INCDIR}/${P}
- cd dist/sdk/include
- headers=`find . -name "*.h"`
- for f in $headers
- do
- install -m 0644 $f ${STAGING_INCDIR}/${P}/$f
- done
- # removes 2 lines that call absent headers
- sed -e '178,179d' ${STAGING_INCDIR}/${P}/nsIServiceManager.h
-}
-
diff --git a/packages/mozilla/minimo/minimo-components-ssr-only.patch b/packages/mozilla/minimo/minimo-components-ssr-only.patch
new file mode 100644
index 0000000000..6fbc4de25e
--- /dev/null
+++ b/packages/mozilla/minimo/minimo-components-ssr-only.patch
@@ -0,0 +1,36 @@
+Index: mozilla/minimo/components/Makefile.in
+===================================================================
+RCS file: /cvsroot/mozilla/minimo/components/Makefile.in,v
+retrieving revision 1.1.2.2
+diff -u -r1.1.2.2 Makefile.in
+--- mozilla/minimo/components/Makefile.in 14 Jul 2006 16:04:33 -0000 1.1.2.2
++++ mozilla/minimo/components/Makefile.in 20 Sep 2006 12:55:08 -0000
+@@ -41,10 +41,10 @@
+
+ include $(DEPTH)/config/autoconf.mk
+
+-DIRS = phone softkb ssr device gps
++DIRS = ssr
+
+ ifdef WINCE
+-DIRS += ssl
++DIRS += ssl phone softkb device gps
+ endif
+
+ include $(topsrcdir)/config/rules.mk
+Index: mozilla/minimo/components/ssr/Makefile.in
+===================================================================
+RCS file: /cvsroot/mozilla/minimo/components/ssr/Makefile.in,v
+retrieving revision 1.1.2.1
+diff -u -r1.1.2.1 Makefile.in
+--- mozilla/minimo/components/ssr/Makefile.in 30 Jan 2006 18:47:01 -0000 1.1.2.1
++++ mozilla/minimo/components/ssr/Makefile.in 20 Sep 2006 14:52:46 -0000
+@@ -42,7 +42,7 @@
+
+ include $(DEPTH)/config/autoconf.mk
+
+-MODULE_NAME = ssr
++MODULE_NAME = SSRModule
+ MODULE = ssr
+ LIBRARY_NAME = ssr
+
diff --git a/packages/mozilla/minimo/minimo-disable-mode-switch.patch b/packages/mozilla/minimo/minimo-disable-mode-switch.patch
new file mode 100644
index 0000000000..50691efe0f
--- /dev/null
+++ b/packages/mozilla/minimo/minimo-disable-mode-switch.patch
@@ -0,0 +1,11 @@
+--- mozilla/widget/src/gtk2/nsWindow.cpp.orig 2007-06-12 22:19:35.000000000 +0900
++++ mozilla/widget/src/gtk2/nsWindow.cpp 2007-06-12 22:19:02.000000000 +0900
+@@ -1859,6 +1859,7 @@
+ || aEvent->keyval == GDK_Shift_R
+ || aEvent->keyval == GDK_Control_L
+ || aEvent->keyval == GDK_Control_R
++ || aEvent->keyval == GDK_Mode_switch
+ || aEvent->keyval == GDK_Alt_L
+ || aEvent->keyval == GDK_Alt_R
+ || aEvent->keyval == GDK_Meta_L
+
diff --git a/packages/mozilla/minimo/minimo.patch b/packages/mozilla/minimo/minimo.patch
index a1f9291167..8894ee7f45 100644
--- a/packages/mozilla/minimo/minimo.patch
+++ b/packages/mozilla/minimo/minimo.patch
@@ -1,567 +1,356 @@
Index: mozilla/content/html/content/src/nsFormSubmission.cpp
===================================================================
-RCS file: /cvsroot/mozilla/content/html/content/src/nsFormSubmission.cpp,v
-retrieving revision 1.46
-diff --context=3 -r1.46 nsFormSubmission.cpp
-*** mozilla/content/html/content/src/nsFormSubmission.cpp 13 Jul 2005 16:55:59 -0000 1.46
---- mozilla/content/html/content/src/nsFormSubmission.cpp 21 Jul 2006 00:27:14 -0000
-***************
-*** 1315,1325 ****
- nsresult rv = NS_OK;
-
- nsCAutoString charset(aCharset);
-- // canonical name is passed so that we just have to check against
-- // *our* canonical names listed in charsetaliases.properties
-- if (charset.EqualsLiteral("ISO-8859-1")) {
-- charset.AssignLiteral("windows-1252");
-- }
-
- // use UTF-8 for UTF-16* and UTF-32* (per WHATWG and existing practice of
- // MS IE/Opera).
---- 1315,1320 ----
+--- mozilla.orig/content/html/content/src/nsFormSubmission.cpp 2005-07-13 18:55:59.000000000 +0200
++++ mozilla/content/html/content/src/nsFormSubmission.cpp 2007-05-10 12:11:20.000000000 +0200
+@@ -1315,11 +1315,6 @@
+ nsresult rv = NS_OK;
+
+ nsCAutoString charset(aCharset);
+- // canonical name is passed so that we just have to check against
+- // *our* canonical names listed in charsetaliases.properties
+- if (charset.EqualsLiteral("ISO-8859-1")) {
+- charset.AssignLiteral("windows-1252");
+- }
+
+ // use UTF-8 for UTF-16* and UTF-32* (per WHATWG and existing practice of
+ // MS IE/Opera).
Index: mozilla/embedding/base/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/embedding/base/Makefile.in,v
-retrieving revision 1.34.8.2
-diff --context=3 -r1.34.8.2 Makefile.in
-*** mozilla/embedding/base/Makefile.in 14 Feb 2006 05:28:31 -0000 1.34.8.2
---- mozilla/embedding/base/Makefile.in 21 Jul 2006 00:27:14 -0000
-***************
-*** 43,48 ****
---- 43,49 ----
-
- MODULE = embed_base
- LIBRARY_NAME = embed_base_s
-+ EXPORT_LIBRARY = 1
- XPIDL_MODULE = embed_base
-
- include $(DEPTH)/config/autoconf.mk
+--- mozilla.orig/embedding/base/Makefile.in 2006-02-14 06:28:31.000000000 +0100
++++ mozilla/embedding/base/Makefile.in 2007-05-10 12:11:20.000000000 +0200
+@@ -43,6 +43,7 @@
+
+ MODULE = embed_base
+ LIBRARY_NAME = embed_base_s
++EXPORT_LIBRARY = 1
+ XPIDL_MODULE = embed_base
+
+ include $(DEPTH)/config/autoconf.mk
Index: mozilla/js/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/js/src/Makefile.in,v
-retrieving revision 3.95.4.4
-diff --context=3 -r3.95.4.4 Makefile.in
-*** mozilla/js/src/Makefile.in 7 Jul 2006 02:12:02 -0000 3.95.4.4
---- mozilla/js/src/Makefile.in 21 Jul 2006 00:27:14 -0000
-***************
-*** 46,51 ****
---- 46,52 ----
-
- MODULE = js
- LIBRARY_NAME = mozjs
-+ EXPORT_LIBRARY = 1
- LIB_IS_C_ONLY = 1
- GRE_MODULE = 1
-
+--- mozilla.orig/js/src/Makefile.in 2006-07-28 00:56:20.000000000 +0200
++++ mozilla/js/src/Makefile.in 2007-05-10 12:11:21.000000000 +0200
+@@ -46,6 +46,7 @@
+
+ MODULE = js
+ LIBRARY_NAME = mozjs
++EXPORT_LIBRARY = 1
+ LIB_IS_C_ONLY = 1
+ GRE_MODULE = 1
+
Index: mozilla/minimo/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/minimo/Makefile.in,v
-retrieving revision 1.1.2.2
-diff --context=3 -r1.1.2.2 Makefile.in
-*** mozilla/minimo/Makefile.in 29 Jun 2006 06:11:30 -0000 1.1.2.2
---- mozilla/minimo/Makefile.in 21 Jul 2006 00:27:14 -0000
-***************
-*** 41,46 ****
-
- include $(DEPTH)/config/autoconf.mk
-
-! DIRS = config components chrome locales customization base
-
- include $(topsrcdir)/config/rules.mk
---- 41,46 ----
-
- include $(DEPTH)/config/autoconf.mk
-
-! DIRS = config chrome locales customization base
-
- include $(topsrcdir)/config/rules.mk
+--- mozilla.orig/minimo/Makefile.in 2006-07-24 21:40:53.000000000 +0200
++++ mozilla/minimo/Makefile.in 2007-05-10 12:13:46.000000000 +0200
+@@ -41,6 +41,6 @@
+
+ include $(DEPTH)/config/autoconf.mk
+
+-DIRS = config components chrome locales customization base extensions
++DIRS = config chrome locales customization base extensions
+
+ include $(topsrcdir)/config/rules.mk
Index: mozilla/minimo/base/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/minimo/base/Makefile.in,v
-retrieving revision 1.3.2.7
-diff --context=3 -r1.3.2.7 Makefile.in
-*** mozilla/minimo/base/Makefile.in 18 Apr 2006 21:04:38 -0000 1.3.2.7
---- mozilla/minimo/base/Makefile.in 21 Jul 2006 00:27:14 -0000
-***************
-*** 95,101 ****
-
- # this should move into the toolkit!
- LOCAL_INCLUDES = -I$(srcdir) -I$(topsrcdir)/xpfe/browser/src/
-- CPPSRCS += nsBrowserStatusFilter.cpp nsBrowserInstance.cpp
-
- ifdef WINCE
- RCINCLUDE = wince/SplashScreen.rc
---- 95,100 ----
-***************
-*** 139,148 ****
- endif
-
-
-- FINAL_LINK_COMPS=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-comps
-- FINAL_LINK_COMP_NAMES=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-names
-- FINAL_LINK_LIBS=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-libs
--
- include $(topsrcdir)/config/static-config.mk
-
- EXTRA_DEPS += $(STATIC_EXTRA_DEPS)
---- 138,143 ----
-***************
-*** 176,189 ****
- # (same as in mozilla/js/src/Makefile.in)
- ifdef WINCE
- LDFLAGS += -OPT:NOICF
- endif
-
-- export::
-- $(NSINSTALL) $(topsrcdir)/xpfe/browser/src/nsBrowserStatusFilter.cpp .
-- $(NSINSTALL) $(topsrcdir)/xpfe/browser/src/nsBrowserInstance.cpp .
--
--
-- GARBAGE += nsBrowserStatusFilter.cpp nsBrowserInstance.cpp
-
- ifdef WINCE
- package::
---- 171,181 ----
- # (same as in mozilla/js/src/Makefile.in)
- ifdef WINCE
- LDFLAGS += -OPT:NOICF
-+ else
-+ # Hack to work around libxpcom_core.a / libunicharutil_s.a link order problem.
-+ LDFLAGS += -u NS_StringGetData_P -u NS_StringGetMutableData_P
- endif
-
-
- ifdef WINCE
- package::
+--- mozilla.orig/minimo/base/Makefile.in 2006-08-09 17:42:26.000000000 +0200
++++ mozilla/minimo/base/Makefile.in 2007-05-10 12:11:21.000000000 +0200
+@@ -96,7 +96,6 @@
+
+ # this should move into the toolkit!
+ LOCAL_INCLUDES = -I$(srcdir) -I$(topsrcdir)/xpfe/browser/src/
+-CPPSRCS += nsBrowserStatusFilter.cpp nsBrowserInstance.cpp
+
+ ifdef WINCE
+ RCINCLUDE = wince/SplashScreen.rc
+@@ -143,10 +142,6 @@
+ endif
+
+
+-FINAL_LINK_COMPS=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-comps
+-FINAL_LINK_COMP_NAMES=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-names
+-FINAL_LINK_LIBS=$(topsrcdir)/minimo/base/$(FINAL_PLATFORM)/minimo-link-libs
+-
+ include $(topsrcdir)/config/static-config.mk
+
+ EXTRA_DEPS += $(STATIC_EXTRA_DEPS)
+@@ -180,14 +175,11 @@
+ # (same as in mozilla/js/src/Makefile.in)
+ ifdef WINCE
+ LDFLAGS += -OPT:NOICF
++else
++# Hack to work around libxpcom_core.a / libunicharutil_s.a link order problem.
++LDFLAGS += -u NS_StringGetData_P -u NS_StringGetMutableData_P
+ endif
+
+-export::
+- $(NSINSTALL) $(topsrcdir)/xpfe/browser/src/nsBrowserStatusFilter.cpp .
+- $(NSINSTALL) $(topsrcdir)/xpfe/browser/src/nsBrowserInstance.cpp .
+-
+-
+-GARBAGE += nsBrowserStatusFilter.cpp nsBrowserInstance.cpp
+
+ ifdef WINCE
+ package::
Index: mozilla/minimo/base/Minimo.cpp
===================================================================
-RCS file: /cvsroot/mozilla/minimo/base/Minimo.cpp,v
-retrieving revision 1.1.2.11
-diff --context=3 -r1.1.2.11 Minimo.cpp
-*** mozilla/minimo/base/Minimo.cpp 11 Jul 2006 19:37:05 -0000 1.1.2.11
---- mozilla/minimo/base/Minimo.cpp 21 Jul 2006 00:27:15 -0000
-***************
-*** 781,789 ****
- CreateListenerWindow();
- #endif
-
-! #ifdef MOZ_WIDGET_GTK2
- gtk_set_locale();
- gtk_init(&argc, &argv);
- #endif
-
- #ifdef HACKY_PRE_LOAD_LIBRARY
---- 781,794 ----
- CreateListenerWindow();
- #endif
-
-! #if defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_GTK2)
-! #if defined(MOZ_WIDGET_GTK)
- gtk_set_locale();
-+ #endif
- gtk_init(&argc, &argv);
-+
-+ gtk_widget_set_default_visual(gdk_rgb_get_visual());
-+ gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
- #endif
-
- #ifdef HACKY_PRE_LOAD_LIBRARY
+--- mozilla.orig/minimo/base/Minimo.cpp 2006-10-27 22:30:36.000000000 +0200
++++ mozilla/minimo/base/Minimo.cpp 2007-05-10 12:13:21.000000000 +0200
+@@ -813,6 +813,8 @@
+ #ifdef MOZ_WIDGET_GTK2
+ gtk_set_locale();
+ gtk_init(&argc, &argv);
++ gtk_widget_set_default_visual(gdk_rgb_get_visual());
++ gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
+ #endif
+
+ #ifdef HACKY_PRE_LOAD_LIBRARY
Index: mozilla/minimo/base/SplashScreen.cpp
===================================================================
-RCS file: /cvsroot/mozilla/minimo/base/SplashScreen.cpp,v
-retrieving revision 1.1.2.3
-diff --context=3 -r1.1.2.3 SplashScreen.cpp
-*** mozilla/minimo/base/SplashScreen.cpp 11 Jul 2006 18:44:17 -0000 1.1.2.3
---- mozilla/minimo/base/SplashScreen.cpp 21 Jul 2006 00:27:15 -0000
-***************
-*** 180,188 ****
---- 180,203 ----
- void KillSplashScreen() {}
- void GetScreenSize(unsigned long* x, unsigned long* y)
- {
-+ #ifdef MOZ_WIDGET_GTK2
-+ GdkDisplay* display = gdk_display_get_default();
-+ if (display != NULL)
-+ {
-+ GdkScreen *screen;
-+ screen = gdk_display_get_default_screen(display);
-+ *x = gdk_screen_get_width(screen);
-+ *y = gdk_screen_get_height(screen);
-+ }
-+ else
-+ {
-+ #endif
- // we need to figure this out.
- *x = 240;
- *y = 320;
-+ #ifdef MOZ_WIDGET_GTK2
-+ }
-+ #endif
- }
-
-
-Index: mozilla/minimo/chrome/content/minimo.js
-===================================================================
-RCS file: /cvsroot/mozilla/minimo/chrome/content/minimo.js,v
-retrieving revision 1.9.2.90
-diff --context=3 -r1.9.2.90 minimo.js
-*** mozilla/minimo/chrome/content/minimo.js 11 Jul 2006 19:37:04 -0000 1.9.2.90
---- mozilla/minimo/chrome/content/minimo.js 21 Jul 2006 00:27:16 -0000
-***************
-*** 1313,1319 ****
- 43 const FIND_LINKS = 2;
- http://lxr.mozilla.org/mozilla/source/toolkit/components/typeaheadfind/content/findBar.js
- */
-! gBrowser.fastFind.find(vQuery,0);
- }
- } catch (e) {
- onErrorHandler(e);
---- 1313,1319 ----
- 43 const FIND_LINKS = 2;
- http://lxr.mozilla.org/mozilla/source/toolkit/components/typeaheadfind/content/findBar.js
- */
-! gBrowser.fastFind.find(vQuery,0,this.mHasFocus);
- }
- } catch (e) {
- onErrorHandler(e);
-***************
-*** 1324,1330 ****
-
- function DoBrowserFindNext() {
- try {
-! gBrowser.fastFind.findNext();
- } catch (e) {
- onErrorHandler(e);
- }
---- 1324,1330 ----
-
- function DoBrowserFindNext() {
- try {
-! gBrowser.fastFind.findNext(this.mHasFocus);
- } catch (e) {
- onErrorHandler(e);
- }
+--- mozilla.orig/minimo/base/SplashScreen.cpp 2006-08-21 21:00:24.000000000 +0200
++++ mozilla/minimo/base/SplashScreen.cpp 2007-05-10 12:11:22.000000000 +0200
+@@ -202,9 +202,24 @@
+ void KillSplashScreen() {}
+ void GetScreenSize(unsigned long* x, unsigned long* y)
+ {
++#ifdef MOZ_WIDGET_GTK2
++ GdkDisplay* display = gdk_display_get_default();
++ if (display != NULL)
++ {
++ GdkScreen *screen;
++ screen = gdk_display_get_default_screen(display);
++ *x = gdk_screen_get_width(screen);
++ *y = gdk_screen_get_height(screen);
++ }
++ else
++ {
++#endif
+ // we need to figure this out.
+ *x = 240;
+ *y = 320;
++#ifdef MOZ_WIDGET_GTK2
++ }
++#endif
+ }
+
+
Index: mozilla/minimo/config/linux_package.sh
===================================================================
-RCS file: /cvsroot/mozilla/minimo/config/linux_package.sh,v
-retrieving revision 1.8.2.3
-diff --context=3 -r1.8.2.3 linux_package.sh
-*** mozilla/minimo/config/linux_package.sh 30 Jun 2006 16:35:19 -0000 1.8.2.3
---- mozilla/minimo/config/linux_package.sh 21 Jul 2006 00:27:16 -0000
-***************
-*** 29,37 ****
- cp -pRL bin/libnssckbi.so minimo
- cp -pRL bin/libsmime3.so minimo
- cp -pRL bin/libsoftokn3.so minimo
-- cp -pRL bin/libsoftokn3.chk minimo
- cp -pRL bin/libfreebl3.so minimo
-- cp -pRL bin/libfreebl3.chk minimo
- cp -pRL bin/libssl3.so minimo
-
- mkdir -p minimo/chrome
---- 29,35 ----
-***************
-*** 62,69 ****
- cp -pRL bin/components/nsHelperAppDlg.js minimo/components
- cp -pRL bin/components/nsProgressDialog.js minimo/components
-
-- cp -pRL bin/extensions/spatial-navigation@extensions.mozilla.org/components/* minimo/components
--
- mkdir -p minimo/greprefs
- cp -pRL bin/greprefs/* minimo/greprefs
-
---- 60,65 ----
-***************
-*** 80,86 ****
-
- echo Linking XPT files.
-
-! bin/xpt_link minimo/components/all.xpt bin/components/*.xpt
-
- echo Chewing on chrome
-
---- 76,82 ----
-
- echo Linking XPT files.
-
-! host/bin/host_xpt_link minimo/components/all.xpt bin/components/*.xpt
-
- echo Chewing on chrome
-
+--- mozilla.orig/minimo/config/linux_package.sh 2006-06-30 18:35:19.000000000 +0200
++++ mozilla/minimo/config/linux_package.sh 2007-05-10 12:11:22.000000000 +0200
+@@ -29,9 +29,7 @@
+ cp -pRL bin/libnssckbi.so minimo
+ cp -pRL bin/libsmime3.so minimo
+ cp -pRL bin/libsoftokn3.so minimo
+-cp -pRL bin/libsoftokn3.chk minimo
+ cp -pRL bin/libfreebl3.so minimo
+-cp -pRL bin/libfreebl3.chk minimo
+ cp -pRL bin/libssl3.so minimo
+
+ mkdir -p minimo/chrome
+@@ -62,8 +60,6 @@
+ cp -pRL bin/components/nsHelperAppDlg.js minimo/components
+ cp -pRL bin/components/nsProgressDialog.js minimo/components
+
+-cp -pRL bin/extensions/spatial-navigation@extensions.mozilla.org/components/* minimo/components
+-
+ mkdir -p minimo/greprefs
+ cp -pRL bin/greprefs/* minimo/greprefs
+
+@@ -80,7 +76,7 @@
+
+ echo Linking XPT files.
+
+-bin/xpt_link minimo/components/all.xpt bin/components/*.xpt
++host/bin/host_xpt_link minimo/components/all.xpt bin/components/*.xpt
+
+ echo Chewing on chrome
+
Index: mozilla/profile/dirserviceprovider/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/profile/dirserviceprovider/src/Makefile.in,v
-retrieving revision 1.7
-diff --context=3 -r1.7 Makefile.in
-*** mozilla/profile/dirserviceprovider/src/Makefile.in 6 Apr 2005 03:35:21 -0000 1.7
---- mozilla/profile/dirserviceprovider/src/Makefile.in 21 Jul 2006 00:27:16 -0000
-***************
-*** 44,49 ****
---- 44,50 ----
-
- MODULE = profdirserviceprovider
- LIBRARY_NAME = profdirserviceprovider_s
-+ EXPORT_LIBRARY = 1
- MOZILLA_INTERNAL_API = 1
-
- REQUIRES = xpcom \
+--- mozilla.orig/profile/dirserviceprovider/src/Makefile.in 2005-04-06 05:35:21.000000000 +0200
++++ mozilla/profile/dirserviceprovider/src/Makefile.in 2007-05-10 12:11:23.000000000 +0200
+@@ -44,6 +44,7 @@
+
+ MODULE = profdirserviceprovider
+ LIBRARY_NAME = profdirserviceprovider_s
++EXPORT_LIBRARY = 1
+ MOZILLA_INTERNAL_API = 1
+
+ REQUIRES = xpcom \
Index: mozilla/security/coreconf/Linux.mk
===================================================================
-RCS file: /cvsroot/mozilla/security/coreconf/Linux.mk,v
-retrieving revision 1.18.18.1
-diff --context=3 -r1.18.18.1 Linux.mk
-*** mozilla/security/coreconf/Linux.mk 3 Feb 2006 22:26:36 -0000 1.18.18.1
---- mozilla/security/coreconf/Linux.mk 21 Jul 2006 00:27:16 -0000
-***************
-*** 117,122 ****
---- 117,126 ----
- OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
- CPU_ARCH = mips
- else
-+ ifeq ($(OS_TEST),arm)
-+ OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
-+ CPU_ARCH = arm
-+ else
- OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
- CPU_ARCH = x86
- endif
-***************
-*** 133,138 ****
---- 137,143 ----
- endif
- endif
- endif
-+ endif
-
-
- LIBC_TAG = _glibc
+--- mozilla.orig/security/coreconf/Linux.mk 2006-02-03 23:26:36.000000000 +0100
++++ mozilla/security/coreconf/Linux.mk 2007-05-10 12:11:23.000000000 +0200
+@@ -117,6 +117,10 @@
+ OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
+ CPU_ARCH = mips
+ else
++ifeq ($(OS_TEST),arm)
++ OS_REL_CFLAGS = -DLINUX1_2 -D_XOPEN_SOURCE
++ CPU_ARCH = arm
++else
+ OS_REL_CFLAGS = -DLINUX1_2 -Di386 -D_XOPEN_SOURCE
+ CPU_ARCH = x86
+ endif
+@@ -133,6 +137,7 @@
+ endif
+ endif
+ endif
++endif
+
+
+ LIBC_TAG = _glibc
Index: mozilla/security/coreconf/arch.mk
===================================================================
-RCS file: /cvsroot/mozilla/security/coreconf/arch.mk,v
-retrieving revision 1.17.14.2
-diff --context=3 -r1.17.14.2 arch.mk
-*** mozilla/security/coreconf/arch.mk 3 Feb 2006 22:26:36 -0000 1.17.14.2
---- mozilla/security/coreconf/arch.mk 21 Jul 2006 00:27:16 -0000
-***************
-*** 60,77 ****
- 64BIT_TAG=
- endif
-
-! OS_ARCH := $(subst /,_,$(shell uname -s))
-
- #
- # Attempt to differentiate between sparc and x86 Solaris
- #
-
-! OS_TEST := $(shell uname -m)
-! ifeq ($(OS_TEST),i86pc)
-! OS_RELEASE := $(shell uname -r)_$(OS_TEST)
-! else
-! OS_RELEASE := $(shell uname -r)
-! endif
-
- #
- # Force the IRIX64 machines to use IRIX.
---- 60,73 ----
- 64BIT_TAG=
- endif
-
-! OS_ARCH := Linux
-
- #
- # Attempt to differentiate between sparc and x86 Solaris
- #
-
-! OS_TEST := arm
-! OS_RELEASE := 2.6
-
- #
- # Force the IRIX64 machines to use IRIX.
+--- mozilla.orig/security/coreconf/arch.mk 2006-02-03 23:26:36.000000000 +0100
++++ mozilla/security/coreconf/arch.mk 2007-05-10 12:11:24.000000000 +0200
+@@ -60,18 +60,14 @@
+ 64BIT_TAG=
+ endif
+
+-OS_ARCH := $(subst /,_,$(shell uname -s))
++OS_ARCH := Linux
+
+ #
+ # Attempt to differentiate between sparc and x86 Solaris
+ #
+
+-OS_TEST := $(shell uname -m)
+-ifeq ($(OS_TEST),i86pc)
+- OS_RELEASE := $(shell uname -r)_$(OS_TEST)
+-else
+- OS_RELEASE := $(shell uname -r)
+-endif
++OS_TEST := arm
++OS_RELEASE := 2.6
+
+ #
+ # Force the IRIX64 machines to use IRIX.
Index: mozilla/toolkit/components/build/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/toolkit/components/build/Makefile.in,v
-retrieving revision 1.24.2.10
-diff --context=3 -r1.24.2.10 Makefile.in
-*** mozilla/toolkit/components/build/Makefile.in 13 Jul 2006 20:08:29 -0000 1.24.2.10
---- mozilla/toolkit/components/build/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 112,118 ****
- $(NULL)
-
- SHARED_LIBRARY_LIBS = \
-- ../startup/src/$(LIB_PREFIX)appstartup_s.$(LIB_SUFFIX) \
- $(NULL)
-
- ifdef MOZ_XPINSTALL
---- 112,117 ----
+--- mozilla.orig/toolkit/components/build/Makefile.in 2006-07-13 22:08:29.000000000 +0200
++++ mozilla/toolkit/components/build/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -112,7 +112,6 @@
+ $(NULL)
+
+ SHARED_LIBRARY_LIBS = \
+- ../startup/src/$(LIB_PREFIX)appstartup_s.$(LIB_SUFFIX) \
+ $(NULL)
+
+ ifdef MOZ_XPINSTALL
Index: mozilla/toolkit/components/startup/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/toolkit/components/startup/src/Makefile.in,v
-retrieving revision 1.7
-diff --context=3 -r1.7 Makefile.in
-*** mozilla/toolkit/components/startup/src/Makefile.in 27 Jul 2005 20:42:44 -0000 1.7
---- mozilla/toolkit/components/startup/src/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 43,48 ****
---- 43,49 ----
-
- MODULE = toolkitcomps
- LIBRARY_NAME = appstartup_s
-+ EXPORT_LIBRARY = 1
- FORCE_STATIC_LIB = 1
- LIBXUL_LIBRARY = 1
-
+--- mozilla.orig/toolkit/components/startup/src/Makefile.in 2005-07-27 22:42:44.000000000 +0200
++++ mozilla/toolkit/components/startup/src/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -43,6 +43,7 @@
+
+ MODULE = toolkitcomps
+ LIBRARY_NAME = appstartup_s
++EXPORT_LIBRARY = 1
+ FORCE_STATIC_LIB = 1
+ LIBXUL_LIBRARY = 1
+
Index: mozilla/toolkit/xre/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/toolkit/xre/Makefile.in,v
-retrieving revision 1.48.2.3
-diff --context=3 -r1.48.2.3 Makefile.in
-*** mozilla/toolkit/xre/Makefile.in 30 Sep 2005 19:52:44 -0000 1.48.2.3
---- mozilla/toolkit/xre/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 45,51 ****
-
- MODULE = xulapp
- LIBRARY_NAME = xulapp_s
-- EXPORT_LIBRARY = 1
- LIBXUL_LIBRARY = 1
-
- REQUIRES = \
---- 45,50 ----
-***************
-*** 176,189 ****
-
- include $(topsrcdir)/config/rules.mk
-
-- ifdef BUILD_STATIC_LIBS
-- export::
-- @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMP_NAMES) Apprunner
-- # embedding/browser/gtk/src/Makefile.in sucks! we need to add an empty line to
-- # FINAL_LINK_COMPS to keep the two lists in sync :-(
-- @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMPS) ""
-- endif
--
- LOCAL_INCLUDES += \
- -I$(srcdir) \
- -I$(topsrcdir)/xpfe/bootstrap \
---- 175,180 ----
+--- mozilla.orig/toolkit/xre/Makefile.in 2007-02-06 08:13:20.000000000 +0100
++++ mozilla/toolkit/xre/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -45,7 +45,6 @@
+
+ MODULE = xulapp
+ LIBRARY_NAME = xulapp_s
+-EXPORT_LIBRARY = 1
+ LIBXUL_LIBRARY = 1
+
+ REQUIRES = \
+@@ -180,14 +179,6 @@
+
+ include $(topsrcdir)/config/rules.mk
+
+-ifdef BUILD_STATIC_LIBS
+-export::
+- @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMP_NAMES) Apprunner
+-# embedding/browser/gtk/src/Makefile.in sucks! we need to add an empty line to
+-# FINAL_LINK_COMPS to keep the two lists in sync :-(
+- @$(PERL) -I$(MOZILLA_DIR)/config $(MOZILLA_DIR)/config/build-list.pl $(FINAL_LINK_COMPS) ""
+-endif
+-
+ LOCAL_INCLUDES += \
+ -I$(srcdir) \
+ -I$(topsrcdir)/xpfe/bootstrap \
Index: mozilla/xpcom/build/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/xpcom/build/Makefile.in,v
-retrieving revision 1.90.2.2
-diff --context=3 -r1.90.2.2 Makefile.in
-*** mozilla/xpcom/build/Makefile.in 29 Jan 2006 16:51:02 -0000 1.90.2.2
---- mozilla/xpcom/build/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 61,67 ****
- endif
-
- # Do not set EXPORT_LIBRARY as we do not want xpcom in the static libs list
-! #EXPORT_LIBRARY = 1
- GRE_MODULE = 1
- MOZILLA_INTERNAL_API = 1
-
---- 61,67 ----
- endif
-
- # Do not set EXPORT_LIBRARY as we do not want xpcom in the static libs list
-! EXPORT_LIBRARY = 1
- GRE_MODULE = 1
- MOZILLA_INTERNAL_API = 1
-
+--- mozilla.orig/xpcom/build/Makefile.in 2006-01-29 17:51:02.000000000 +0100
++++ mozilla/xpcom/build/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -61,7 +61,7 @@
+ endif
+
+ # Do not set EXPORT_LIBRARY as we do not want xpcom in the static libs list
+-#EXPORT_LIBRARY = 1
++EXPORT_LIBRARY = 1
+ GRE_MODULE = 1
+ MOZILLA_INTERNAL_API = 1
+
Index: mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp
===================================================================
-RCS file: /cvsroot/mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp,v
-retrieving revision 1.7
-diff --context=3 -r1.7 xptcstubs_arm.cpp
-*** mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp 18 Apr 2004 14:18:18 -0000 1.7
---- mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp 21 Jul 2006 00:27:17 -0000
-***************
-*** 45,53 ****
- #endif
-
- /* Specify explicitly a symbol for this function, don't try to guess the c++ mangled symbol. */
-! static nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args) asm("_PrepareAndDispatch");
-
-! static nsresult
- PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args)
- {
- #define PARAM_BUFFER_COUNT 16
---- 45,53 ----
- #endif
-
- /* Specify explicitly a symbol for this function, don't try to guess the c++ mangled symbol. */
-! nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args) asm("_PrepareAndDispatch");
-
-! nsresult
- PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args)
- {
- #define PARAM_BUFFER_COUNT 16
+--- mozilla.orig/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp 2004-04-18 16:18:18.000000000 +0200
++++ mozilla/xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp 2007-05-10 12:11:27.000000000 +0200
+@@ -45,9 +45,9 @@
+ #endif
+
+ /* Specify explicitly a symbol for this function, don't try to guess the c++ mangled symbol. */
+-static nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args) asm("_PrepareAndDispatch");
++nsresult PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args) asm("_PrepareAndDispatch");
+
+-static nsresult
++nsresult
+ PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint32* args)
+ {
+ #define PARAM_BUFFER_COUNT 16
Index: mozilla/xpfe/browser/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/xpfe/browser/src/Makefile.in,v
-retrieving revision 1.70
-diff --context=3 -r1.70 Makefile.in
-*** mozilla/xpfe/browser/src/Makefile.in 18 Mar 2005 21:23:45 -0000 1.70
---- mozilla/xpfe/browser/src/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 44,49 ****
---- 44,50 ----
-
- MODULE = browser
- LIBRARY_NAME = mozbrwsr_s
-+ EXPORT_LIBRARY = 1
- FORCE_STATIC_LIB = 1
- LIBXUL_LIBRARY = 1
- MODULE_NAME = nsBrowserModule
+--- mozilla.orig/xpfe/browser/src/Makefile.in 2005-03-18 22:23:45.000000000 +0100
++++ mozilla/xpfe/browser/src/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -44,6 +44,7 @@
+
+ MODULE = browser
+ LIBRARY_NAME = mozbrwsr_s
++EXPORT_LIBRARY = 1
+ FORCE_STATIC_LIB = 1
+ LIBXUL_LIBRARY = 1
+ MODULE_NAME = nsBrowserModule
Index: mozilla/xpfe/components/build/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/xpfe/components/build/Makefile.in,v
-retrieving revision 1.69.8.1
-diff --context=3 -r1.69.8.1 Makefile.in
-*** mozilla/xpfe/components/build/Makefile.in 27 Sep 2005 00:15:25 -0000 1.69.8.1
---- mozilla/xpfe/components/build/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 44,50 ****
-
- MODULE = appcomps
- LIBRARY_NAME = appcomps
-- EXPORT_LIBRARY = 1
- IS_COMPONENT = 1
- MODULE_NAME = application
- LIBXUL_LIBRARY = 1
---- 44,49 ----
+--- mozilla.orig/xpfe/components/build/Makefile.in 2005-09-27 02:15:25.000000000 +0200
++++ mozilla/xpfe/components/build/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -44,7 +44,6 @@
+
+ MODULE = appcomps
+ LIBRARY_NAME = appcomps
+-EXPORT_LIBRARY = 1
+ IS_COMPONENT = 1
+ MODULE_NAME = application
+ LIBXUL_LIBRARY = 1
Index: mozilla/xpfe/components/filepicker/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/xpfe/components/filepicker/src/Makefile.in,v
-retrieving revision 1.9.8.1
-diff --context=3 -r1.9.8.1 Makefile.in
-*** mozilla/xpfe/components/filepicker/src/Makefile.in 22 May 2006 16:29:32 -0000 1.9.8.1
---- mozilla/xpfe/components/filepicker/src/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 47,53 ****
- MODULE = filepicker
- LIBRARY_NAME = fileview
- SHORT_LIBNAME = fileview
-- EXPORT_LIBRARY = 1
- IS_COMPONENT = 1
- MODULE_NAME = nsFileViewModule
- MOZILLA_INTERNAL_API = 1
---- 47,52 ----
+--- mozilla.orig/xpfe/components/filepicker/src/Makefile.in 2006-05-22 18:29:32.000000000 +0200
++++ mozilla/xpfe/components/filepicker/src/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -47,7 +47,6 @@
+ MODULE = filepicker
+ LIBRARY_NAME = fileview
+ SHORT_LIBNAME = fileview
+-EXPORT_LIBRARY = 1
+ IS_COMPONENT = 1
+ MODULE_NAME = nsFileViewModule
+ MOZILLA_INTERNAL_API = 1
Index: mozilla/xpfe/components/find/src/Makefile.in
===================================================================
-RCS file: /cvsroot/mozilla/xpfe/components/find/src/Makefile.in,v
-retrieving revision 1.37
-diff --context=3 -r1.37 Makefile.in
-*** mozilla/xpfe/components/find/src/Makefile.in 18 Mar 2005 21:23:46 -0000 1.37
---- mozilla/xpfe/components/find/src/Makefile.in 21 Jul 2006 00:27:17 -0000
-***************
-*** 45,51 ****
- MODULE = appcomps
- XPIDL_MODULE = mozfind
- LIBRARY_NAME = mozfind
-- EXPORT_LIBRARY = 1
- IS_COMPONENT = 1
- MODULE_NAME = nsFindComponent
- LIBXUL_LIBRARY = 1
---- 45,50 ----
+--- mozilla.orig/xpfe/components/find/src/Makefile.in 2005-03-18 22:23:46.000000000 +0100
++++ mozilla/xpfe/components/find/src/Makefile.in 2007-05-10 12:11:27.000000000 +0200
+@@ -45,7 +45,6 @@
+ MODULE = appcomps
+ XPIDL_MODULE = mozfind
+ LIBRARY_NAME = mozfind
+-EXPORT_LIBRARY = 1
+ IS_COMPONENT = 1
+ MODULE_NAME = nsFindComponent
+ LIBXUL_LIBRARY = 1
diff --git a/packages/mozilla/minimo_0.016+cvs.bb b/packages/mozilla/minimo_0.016+cvs.bb
deleted file mode 100644
index a5f8c73094..0000000000
--- a/packages/mozilla/minimo_0.016+cvs.bb
+++ /dev/null
@@ -1,147 +0,0 @@
-DESCRIPTION = "A minimal version of the Mozilla web browser for mobile devices"
-SECTION = "x11/network"
-LICENSE = "MPL/GPL/LGPL"
-HOMEPAGE = "http://www.mozilla.org/projects/minimo/"
-PRIORITY = "optional"
-
-DEPENDS = "libxrender xt xft fontconfig freetype libidl dbus-glib pango atk gtk+"
-
-CVSSVR="cvs-mirror.mozilla.org"
-BRTAG = "MOZILLA_1_8_BRANCH"
-MOZDATE = "20060720"
-
-PV = "0.016+cvs${MOZDATE}"
-PR = "r4"
-
-SRC_URI = "cvs://anonymous@${CVSSVR}/cvsroot;module=mozilla;tag=${BRTAG};date=${MOZDATE} \
- file://minimo.patch;patch=1 \
- file://bug-322806.diff;patch=1 \
- file://mozconfig file://minimo \
- file://minimo.desktop file://minimo.png"
-
-inherit autotools
-
-S = "${WORKDIR}/mozilla"
-
-export MOZCONFIG = "${WORKDIR}/mozconfig"
-
-export CROSS_COMPILE="1"
-export ac_cv_prog_HOST_CC="${BUILD_CC}"
-export ac_cv_prog_HOST_CFLAGS="${BUILD_CFLAGS}"
-export ac_cv_prog_HOST_CXX="${BUILD_CXX}"
-export ac_cv_prog_HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
-
-mozdir="${libdir}/mozilla-minimo"
-
-EXTRA_OECONF += "--build=${BUILD_SYS} --host=${BUILD_SYS} --target=${TARGET_SYS} "
-
-do_configure() {
- cd ${S}
- oe_runmake -f client.mk CONFIGURE_ARGS="${EXTRA_OECONF}" configure
- sed -i s:${TARGET_PREFIX}strip:echo:g config/autoconf.mk
-}
-
-do_compile() {
- cd ${S}
- oe_runmake -f client.mk build
-}
-
-do_install() {
- cd ${WORKDIR}
-
- install -d ${D}${bindir}
- install -m 0755 minimo ${D}${bindir}
-
- install -d ${D}${datadir}/applications
- install -m 0644 minimo.desktop ${D}${datadir}/applications
-
- install -d ${D}/${datadir}/pixmaps
- install -m 0644 minimo.png ${D}${datadir}/pixmaps
-
- cd ${S}
-
- ./minimo/config/linux_package.sh ${S} ${S}/minimo/config
-
- cd dist/minimo
-
- install -d ${D}${mozdir}
- install -m 0755 minimo ${D}${mozdir}
- install -m 0755 libfreebl3.so ${D}${mozdir}
- install -m 0755 libnspr4.so ${D}${mozdir}
- install -m 0755 libnss3.so ${D}${mozdir}
- install -m 0755 libnssckbi.so ${D}${mozdir}
- install -m 0755 libplc4.so ${D}${mozdir}
- install -m 0755 libplds4.so ${D}${mozdir}
- install -m 0755 libsmime3.so ${D}${mozdir}
- install -m 0755 libsoftokn3.so ${D}${mozdir}
- install -m 0755 libssl3.so ${D}${mozdir}
-
- install -d ${D}${mozdir}/chrome
- install -m 0644 chrome/classic.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/classic.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/en-US.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/en-US.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo-skin-vga.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo-skin-vga.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo-skin.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo-skin.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/minimo.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/pippki.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/pippki.manifest ${D}${mozdir}/chrome
- install -m 0644 chrome/toolkit.jar ${D}${mozdir}/chrome
- install -m 0644 chrome/toolkit.manifest ${D}${mozdir}/chrome
-
- install -d ${D}${mozdir}/components
- install -m 0644 components/all.xpt ${D}${mozdir}/components
- install -m 0644 components/nsHelperAppDlg.js ${D}${mozdir}/components
- install -m 0644 components/nsProgressDialog.js ${D}${mozdir}/components
-
- install -d ${D}${mozdir}/greprefs
- install -m 0644 greprefs/all.js ${D}${mozdir}/greprefs
- install -m 0644 greprefs/security-prefs.js ${D}${mozdir}/greprefs
-
- install -d ${D}${mozdir}/res
- install -m 0644 res/forms.css ${D}${mozdir}/res
- install -m 0644 res/html.css ${D}${mozdir}/res
- install -m 0644 res/quirk.css ${D}${mozdir}/res
- install -m 0644 res/ua.css ${D}${mozdir}/res
- install -m 0644 res/arrow.gif ${D}${mozdir}/res
- install -m 0644 res/arrowd.gif ${D}${mozdir}/res
- install -m 0644 res/broken-image.gif ${D}${mozdir}/res
- install -m 0644 res/loading-image.gif ${D}${mozdir}/res
- install -m 0644 res/charsetData.properties ${D}${mozdir}/res
- install -m 0644 res/charsetalias.properties ${D}${mozdir}/res
- install -m 0644 res/langGroups.properties ${D}${mozdir}/res
- install -m 0644 res/language.properties ${D}${mozdir}/res
- install -m 0644 res/unixcharset.properties ${D}${mozdir}/res
-
- install -d ${D}${mozdir}/res/dtd
- install -m 0644 res/dtd/xhtml11.dtd ${D}${mozdir}/res/dtd
-
- install -d ${D}${mozdir}/res/entityTables
- install -m 0644 res/entityTables/html40Latin1.properties ${D}${mozdir}/res/entityTables
- install -m 0644 res/entityTables/html40Special.properties ${D}${mozdir}/res/entityTables
- install -m 0644 res/entityTables/html40Symbols.properties ${D}${mozdir}/res/entityTables
- install -m 0644 res/entityTables/htmlEntityVersions.properties ${D}${mozdir}/res/entityTables
- install -m 0644 res/entityTables/transliterate.properties ${D}${mozdir}/res/entityTables
-
- install -d ${D}${mozdir}/res/fonts
- install -m 0644 res/fonts/fontEncoding.properties ${D}${mozdir}/res/fonts
- install -m 0644 res/fonts/pangoFontEncoding.properties ${D}${mozdir}/res/fonts
-
- install -d ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-audio.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-binary.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-find.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-image.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-menu.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-movie.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-sound.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-telnet.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-text.gif ${D}${mozdir}/res/html
- install -m 0644 res/html/gopher-unknown.gif ${D}${mozdir}/res/html
-}
-
-FILES_${PN}-dbg += "${libdir}/mozilla-minimo/.debug*"
-FILES_${PN} += "${mozdir}"
diff --git a/packages/mozilla/minimo_cvs.bb b/packages/mozilla/minimo_cvs.bb
index 2d6744a6c1..990068b41e 100644
--- a/packages/mozilla/minimo_cvs.bb
+++ b/packages/mozilla/minimo_cvs.bb
@@ -1,49 +1,153 @@
-DESCRIPTION = "A minimal version of the Mozilla web browser"
-HOMEPAGE="http://www.mozilla.org/projects/minimo/"
-SRC_URI = "cvs://anonymous@cvs-mirror.mozilla.org/cvsroot;module=mozilla \
- file://no-xmb.patch;patch=1 \
- file://host_ldflags_fix.patch;patch=1 \
- file://minimo.png file://minimo.desktop"
-S = "${WORKDIR}/mozilla"
-SECTION = "x11"
+DESCRIPTION = "A minimal version of the Mozilla web browser for mobile devices"
+SECTION = "x11/network"
+LICENSE = "MPL GPL LGPL"
+HOMEPAGE = "http://www.mozilla.org/projects/minimo/"
PRIORITY = "optional"
-PV = "0.0+cvs${SRCDATE}"
-FILES_${PN} += "${libdir}/mozilla-minimo"
-PR = "r8"
-LICENSE = "MPL/LGPL/GPL"
-inherit mozilla
+DEPENDS = "libxrender xt xft fontconfig freetype libidl dbus-glib pango atk gtk+ libidl-native zip-native"
+
+CVSSVR="cvs-mirror.mozilla.org"
+BRTAG = "MOZILLA_1_8_BRANCH"
+MOZDATE = "20070626"
+
+PV = "0.02+cvs${MOZDATE}"
+PE = "1"
+
+SRC_URI = "cvs://anonymous@${CVSSVR}/cvsroot;module=mozilla;tag=${BRTAG};date=${MOZDATE} \
+ file://minimo.patch;patch=1 \
+ file://bug-322806.diff;patch=1 \
+ file://mozconfig file://minimo \
+ file://eabi-fix.patch;patch=1 \
+ file://eabi-fix2.patch;patch=1 \
+ file://eabi-fix3.patch;patch=1 \
+ file://minimo-components-ssr-only.patch;patch=1 \
+ file://minimo-disable-mode-switch.patch;patch=1 \
+ file://minimo.desktop file://minimo.png"
+
+inherit autotools
+
+S = "${WORKDIR}/mozilla"
+
+export MOZCONFIG = "${WORKDIR}/mozconfig"
-EXTRA_OECONF += "--enable-application=minimo --disable-native-uconv"
-export MOZ_CO_PROJECT="minimo"
+export CROSS_COMPILE="1"
+export ac_cv_prog_HOST_CC="${BUILD_CC}"
+export ac_cv_prog_HOST_CFLAGS="${BUILD_CFLAGS}"
+export ac_cv_prog_HOST_CXX="${BUILD_CXX}"
+export ac_cv_prog_HOST_CXXFLAGS="${BUILD_CXXFLAGS}"
+export HOST_LIBIDL_CONFIG = "libIDL-config-2"
-export MINIMO="1"
-export MOZ_OBJDIR="${WORKDIR}/build-${TARGET_SYS}"
+mozdir="${libdir}/mozilla-minimo"
-require mozilla-cvs.inc
+EXTRA_OECONF += "--build=${BUILD_SYS} --host=${BUILD_SYS} --target=${TARGET_SYS} "
-do_compile () {
- mozilla_do_compile
+do_configure() {
+ cd ${S}
+ oe_runmake -f client.mk CONFIGURE_ARGS="${EXTRA_OECONF}" configure
+ sed -i s:${TARGET_PREFIX}strip:echo:g config/autoconf.mk
}
-mozdir="${D}${libdir}/mozilla-minimo"
+do_compile() {
+ cd ${S}
+ oe_runmake -f client.mk build
+}
+
+do_install() {
+ cd ${WORKDIR}
+
+ install -d ${D}${bindir}
+ install -m 0755 minimo ${D}${bindir}
+
+ install -d ${D}${datadir}/applications
+ install -m 0644 minimo.desktop ${D}${datadir}/applications
+
+ install -d ${D}/${datadir}/pixmaps
+ install -m 0644 minimo.png ${D}${datadir}/pixmaps
-do_install () {
- cd $MOZ_OBJDIR/minimo/base
- oe_runmake package
cd ${S}
- mkdir -p ${mozdir}
- cp -RL $MOZ_OBJDIR/dist/minimo/* ${mozdir}/
- mkdir -p ${D}${datadir}/applications
- install -m 0644 ${WORKDIR}/minimo.desktop ${D}${datadir}/applications/minimo.desktop
- mkdir -p ${D}${datadir}/pixmaps
- install -m 0644 ${WORKDIR}/minimo.png ${D}${datadir}/pixmaps/minimo.png
- mkdir -p ${D}${bindir}
- echo "#!/bin/sh" > ${D}${bindir}/Minimo
- cat >>${D}${bindir}/Minimo << EOF
-cd ${libdir}/mozilla-minimo
-export LD_LIBRARY_PATH=${libdir}/mozilla-minimo
-exec ./minimo
-EOF
- chmod 755 ${D}${bindir}/Minimo
+
+ ./minimo/config/linux_package.sh ${S} ${S}/minimo/config
+
+ cd dist/minimo
+
+ install -d ${D}${mozdir}
+ install -m 0755 minimo ${D}${mozdir}
+ install -m 0755 libfreebl3.so ${D}${mozdir}
+ install -m 0755 libnspr4.so ${D}${mozdir}
+ install -m 0755 libnss3.so ${D}${mozdir}
+ install -m 0755 libnssckbi.so ${D}${mozdir}
+ install -m 0755 libplc4.so ${D}${mozdir}
+ install -m 0755 libplds4.so ${D}${mozdir}
+ install -m 0755 libsmime3.so ${D}${mozdir}
+ install -m 0755 libsoftokn3.so ${D}${mozdir}
+ install -m 0755 libssl3.so ${D}${mozdir}
+
+ install -d ${D}${mozdir}/chrome
+ install -m 0644 chrome/classic.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/classic.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/en-US.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/en-US.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo-skin-vga.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo-skin-vga.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo-skin.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo-skin.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/minimo.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/pippki.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/pippki.manifest ${D}${mozdir}/chrome
+ install -m 0644 chrome/toolkit.jar ${D}${mozdir}/chrome
+ install -m 0644 chrome/toolkit.manifest ${D}${mozdir}/chrome
+
+ install -d ${D}${mozdir}/components
+ install -m 0644 components/all.xpt ${D}${mozdir}/components
+ install -m 0644 components/nsHelperAppDlg.js ${D}${mozdir}/components
+ install -m 0644 components/nsProgressDialog.js ${D}${mozdir}/components
+
+ install -d ${D}${mozdir}/greprefs
+ install -m 0644 greprefs/all.js ${D}${mozdir}/greprefs
+ install -m 0644 greprefs/security-prefs.js ${D}${mozdir}/greprefs
+
+ install -d ${D}${mozdir}/res
+ install -m 0644 res/forms.css ${D}${mozdir}/res
+ install -m 0644 res/html.css ${D}${mozdir}/res
+ install -m 0644 res/quirk.css ${D}${mozdir}/res
+ install -m 0644 res/ua.css ${D}${mozdir}/res
+ install -m 0644 res/arrow.gif ${D}${mozdir}/res
+ install -m 0644 res/arrowd.gif ${D}${mozdir}/res
+ install -m 0644 res/broken-image.gif ${D}${mozdir}/res
+ install -m 0644 res/loading-image.gif ${D}${mozdir}/res
+ install -m 0644 res/charsetData.properties ${D}${mozdir}/res
+ install -m 0644 res/charsetalias.properties ${D}${mozdir}/res
+ install -m 0644 res/langGroups.properties ${D}${mozdir}/res
+ install -m 0644 res/language.properties ${D}${mozdir}/res
+ install -m 0644 res/unixcharset.properties ${D}${mozdir}/res
+
+ install -d ${D}${mozdir}/res/dtd
+ install -m 0644 res/dtd/xhtml11.dtd ${D}${mozdir}/res/dtd
+
+ install -d ${D}${mozdir}/res/entityTables
+ install -m 0644 res/entityTables/html40Latin1.properties ${D}${mozdir}/res/entityTables
+ install -m 0644 res/entityTables/html40Special.properties ${D}${mozdir}/res/entityTables
+ install -m 0644 res/entityTables/html40Symbols.properties ${D}${mozdir}/res/entityTables
+ install -m 0644 res/entityTables/htmlEntityVersions.properties ${D}${mozdir}/res/entityTables
+ install -m 0644 res/entityTables/transliterate.properties ${D}${mozdir}/res/entityTables
+
+ install -d ${D}${mozdir}/res/fonts
+ install -m 0644 res/fonts/fontEncoding.properties ${D}${mozdir}/res/fonts
+ install -m 0644 res/fonts/pangoFontEncoding.properties ${D}${mozdir}/res/fonts
+
+ install -d ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-audio.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-binary.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-find.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-image.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-menu.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-movie.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-sound.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-telnet.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-text.gif ${D}${mozdir}/res/html
+ install -m 0644 res/html/gopher-unknown.gif ${D}${mozdir}/res/html
}
+
+FILES_${PN}-dbg += "${libdir}/mozilla-minimo/.debug*"
+FILES_${PN} += "${mozdir}"
diff --git a/packages/mpeg2dec/mpeg2dec_0.4.0b.bb b/packages/mpeg2dec/mpeg2dec_0.4.0b.bb
index 3380a4e00c..c279893ee5 100644
--- a/packages/mpeg2dec/mpeg2dec_0.4.0b.bb
+++ b/packages/mpeg2dec/mpeg2dec_0.4.0b.bb
@@ -1,22 +1,24 @@
DESCRIPTION = "Library and test program for decoding mpeg-2 and mpeg-1 video streams"
HOMEPAGE = "http://libmpeg2.sourceforge.net/"
-LICENSE = "GPL"
-PRIORITY = "optional"
SECTION = "libs"
-PR = "r2"
-
+PRIORITY = "optional"
+LICENSE = "GPL"
DEPENDS = "virtual/libsdl"
+PROVIDES += "libmpeg2"
+RPROVIDES += "libmpeg2"
+PR = "r3"
-SRC_URI = "http://libmpeg2.sourceforge.net/files/mpeg2dec-${PV}.tar.gz"
S = "${WORKDIR}/mpeg2dec-0.4.0"
+SRC_URI = "http://libmpeg2.sourceforge.net/files/mpeg2dec-${PV}.tar.gz"
+
inherit autotools pkgconfig
EXTRA_OECONF = "--enable-shared"
-PACKAGES = "mpeg2dec mpeg2dec-doc libmpeg2 libmpeg2-dev libmpeg2convert libmpeg2convert-dev"
+PACKAGES += "libmpeg2 libmpeg2-dev libmpeg2convert libmpeg2convert-dev"
-FILES_${PN} = "${bindir}/*"
+FILES_${PN} += "${bindir}/*"
FILES_libmpeg2 = "${libdir}/libmpeg2.so.*"
FILES_libmpeg2convert = "${libdir}/libmpeg2convert.so.*"
FILES_libmpeg2-dev = "${libdir}/libmpeg2.so \
diff --git a/packages/mpg123/.mtn2git_empty b/packages/mpg123/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mpg123/.mtn2git_empty
diff --git a/packages/mpg123/mpg123_0.66.bb b/packages/mpg123/mpg123_0.66.bb
new file mode 100644
index 0000000000..a92cf877a9
--- /dev/null
+++ b/packages/mpg123/mpg123_0.66.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "mpg123 is a fast and free console based real time MPEG Audio Player \
+for Layer 1, 2 and 3. It uses floating point math (unlike libmad)."
+LICENSE = "LGPL"
+DESCRIPTION = "multimedia"
+HOMEPAGE = "http://www.mpg123.de"
+RCONFLICTS = "mpg321"
+RREPLACES = "mpg321"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mpg123/mpg123-${PV}.tar.bz2"
+
+inherit autotools
diff --git a/packages/mpg321/mpg321_0.2.10.bb b/packages/mpg321/mpg321_0.2.10.bb
index ccd8ecd48e..018fb17b7b 100644
--- a/packages/mpg321/mpg321_0.2.10.bb
+++ b/packages/mpg321/mpg321_0.2.10.bb
@@ -1,12 +1,14 @@
-DESCRIPTION = "mpg321 is a Free replacement for mpg123, a very popular command-line mp3 player."
+DESCRIPTION = "mpg321 is a replacement for mpg123, a very popular command-line mp3 player."
SECTION = "console/multimedia"
DEPENDS = "libmad libao"
LICENSE = "GPL"
AUTHOR = "Joe Drew <hoserhead@woot.net>"
HOMEPAGE = "http://mpg321.sourceforge.net/"
+RCONFLICTS = "mpg123"
+RREPLACES = "mpg123"
SRC_URI = "${SOURCEFORGE_MIRROR}/mpg321/mpg321-0.2.10.tar.gz \
-file://libao.m4.patch;patch=1"
+ file://libao.m4.patch;patch=1"
inherit autotools
diff --git a/packages/mplayer/files/Makefile-codec-cfg.patch b/packages/mplayer/files/Makefile-codec-cfg.patch
index f1fe636df2..e6cb7247f8 100644
--- a/packages/mplayer/files/Makefile-codec-cfg.patch
+++ b/packages/mplayer/files/Makefile-codec-cfg.patch
@@ -2,12 +2,12 @@ Index: trunk/Makefile
===================================================================
--- trunk.orig/Makefile
+++ trunk/Makefile
-@@ -239,7 +239,7 @@ mencoder$(EXESUF): $(MENCODER_DEPS)
+@@ -235,7 +235,7 @@ mencoder$(EXESUF): $(MENCODER_DEPS)
$(CC) -o $@ $^ $(LDFLAGS_MENCODER)
codec-cfg$(EXESUF): codec-cfg.c codec-cfg.h help_mp.h
-- $(HOST_CC) -I. -DCODECS2HTML codec-cfg.c -o $@
-+ $(BUILD_CC) -I. -DCODECS2HTML codec-cfg.c -o $@
+- $(HOST_CC) -I. -DCODECS2HTML $< -o $@
++ $(BUILD_CC) -I. -DCODECS2HTML $< -o $@
codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf
./codec-cfg$(EXESUF) ./etc/codecs.conf > $@
diff --git a/packages/mplayer/files/makefile-nostrip-svn.patch b/packages/mplayer/files/makefile-nostrip-svn.patch
index 0c3180c728..44087e7dca 100644
--- a/packages/mplayer/files/makefile-nostrip-svn.patch
+++ b/packages/mplayer/files/makefile-nostrip-svn.patch
@@ -2,25 +2,30 @@ Index: trunk/Makefile
===================================================================
--- trunk.orig/Makefile
+++ trunk/Makefile
-@@ -253,10 +253,10 @@ install: $(ALL_PRG)
- ifeq ($(VIDIX),yes)
- $(MAKE) -C libdha install
- mkdir -p $(LIBDIR)/mplayer/vidix
-- -install -m 755 $(INSTALLSTRIP) -p vidix/drivers/*.so $(LIBDIR)/mplayer/vidix
-+ -install -m 755 -p vidix/drivers/*.so $(LIBDIR)/mplayer/vidix
- endif
- $(INSTALL) -d $(BINDIR)
-- $(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF) \
-+ $(INSTALL) -m 755 mplayer$(EXESUF) \
- $(BINDIR)/mplayer$(EXESUF)
- ifeq ($(GUI),yes)
- -ln -sf mplayer$(EXESUF) $(BINDIR)/gmplayer$(EXESUF)
-@@ -271,7 +271,7 @@ endif
- fi ; \
+@@ -264,7 +264,7 @@ install-dirs:
+ if test -f $(CONFDIR)/codecs.conf ; then mv -f $(CONFDIR)/codecs.conf $(CONFDIR)/codecs.conf.old ; fi
+
+ install-mplayer: mplayer$(EXESUF)
+- $(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF) $(BINDIR)
++ $(INSTALL) -m 755 mplayer$(EXESUF) $(BINDIR)
+
+ install-mplayer-man:
+ for i in $(MAN_LANG); do \
+@@ -277,7 +277,7 @@ install-mplayer-man:
done
- ifeq ($(MENCODER),yes)
-- $(INSTALL) -m 755 $(INSTALLSTRIP) mencoder$(EXESUF) \
-+ $(INSTALL) -m 755 mencoder$(EXESUF) \
- $(BINDIR)/mencoder$(EXESUF)
+
+ install-mencoder: mencoder$(EXESUF)
+- $(INSTALL) -m 755 $(INSTALLSTRIP) mencoder$(EXESUF) $(BINDIR)
++ $(INSTALL) -m 755 mencoder$(EXESUF) $(BINDIR)
for i in $(MAN_LANG); do \
if test "$$i" = en ; then \
+ cd $(MANDIR)/man1 && ln -sf mplayer.1 mencoder.1 ; \
+@@ -299,7 +299,7 @@ install-gui:
+ install-vidix:
+ $(MAKE) -C libdha install
+ mkdir -p $(LIBDIR)/mplayer/vidix
+- $(INSTALL) -m 755 $(INSTALLSTRIP) -p vidix/drivers/*.so $(LIBDIR)/mplayer/vidix
++ $(INSTALL) -m 755 -p vidix/drivers/*.so $(LIBDIR)/mplayer/vidix
+
+ uninstall:
+ -rm -f $(BINDIR)/mplayer$(EXESUF) $(BINDIR)/gmplayer$(EXESUF)
diff --git a/packages/mplayer/files/mplayer-imageon-svn.patch b/packages/mplayer/files/mplayer-imageon-svn.patch
new file mode 100644
index 0000000000..c8bb8709cd
--- /dev/null
+++ b/packages/mplayer/files/mplayer-imageon-svn.patch
@@ -0,0 +1,366 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: trunk/configure
+===================================================================
+--- trunk.orig/configure
++++ trunk/configure
+@@ -519,6 +519,7 @@ _svga=auto
+ _vesa=auto
+ _fbdev=auto
+ _w100=no
++_imageon=no
+ _dvb=auto
+ _dvbhead=auto
+ _dxr2=auto
+@@ -820,6 +821,8 @@ for ac_option do
+ --disable-fbdev) _fbdev=no ;;
+ --enable-w100) _w100=yes ;;
+ --disable-w100) _w100=no ;;
++ --enable-imageon) _imageon=yes ;;
++ --disable-imageon) _imageon=no ;;
+ --enable-dvb) _dvb=yes ;;
+ --disable-dvb) _dvb=no ;;
+ --enable-dvbhead) _dvbhead=yes ;;
+@@ -4329,6 +4332,18 @@ else
+ fi
+ echores "$_w100"
+
++echocheck "ATI Imageon 100 (imageon)"
++if test "$_imageon" = yes ; then
++ _def_imageon='#define HAVE_IMAGEON 1'
++ _ld_imageon='-lw100'
++ _vosrc="$_vosrc vo_imageon.c"
++ _vomodules="imageon $_vomodules"
++else
++ _def_imageon='#undef HAVE_IMAGEON'
++ _novomodules="imageon $_novomodules"
++fi
++echores "$_imageon"
++
+
+ echocheck "DVB"
+ if test "$_dvb" = auto ; then
+@@ -8355,6 +8370,7 @@ $_def_xmga
+ $_def_syncfb
+ $_def_fbdev
+ $_def_w100
++$_def_imageon
+ $_def_dxr2
+ $_def_dxr3
+ $_def_ivtv
+Index: trunk/libvo/vo_imageon.c
+===================================================================
+--- /dev/null
++++ trunk/libvo/vo_imageon.c
+@@ -0,0 +1,308 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <inttypes.h>
++#include <string.h>
++
++#include <mp_msg.h>
++#include <video_out.h>
++#include <video_out_internal.h>
++
++static vo_info_t info =
++{
++ "ATI IMAGEON 100 driver",
++ "imageon",
++ "Manuel Teira",
++ "C760-Openzaurus Testing version"
++};
++
++LIBVO_EXTERN(imageon)
++
++#include <acapi.h>
++
++static struct w100privdata_t {
++ uint8_t config;
++ ac_device_t *dev;
++ uint16_t xres;
++ uint16_t yres;
++ uint16_t ovwidth;
++ uint16_t ovheight;
++ ac_surface_t insurface;
++ ac_surface_t ovsurface;
++ uint16_t srcwidth;
++ uint16_t srcheight;
++ uint8_t rotate;
++ uint8_t scale;
++ ac_point_t ovdst;
++ ac_point_t dstpos;
++ ac_overlayprops_t ovprops;
++ uint32_t format;
++} w100_privdata;
++
++static int preinit(const char *arg)
++{
++ //Perhaps libw100 should include some code to query the framebuffer
++ struct w100privdata_t *pdata = &w100_privdata;
++
++ pdata->config = 0;
++ pdata->xres = 640;
++ pdata->yres = 480;
++ pdata->dev = ac_init(pdata->xres, pdata->yres, AC_ROT90);
++ if (pdata->dev) {
++ return 0;
++ } else {
++ //Put a log message here
++ return 1;
++ }
++}
++
++
++static void draw_osd(void)
++{
++}
++
++void check_events(void)
++{
++ mp_msg(MSGT_VO, MSGL_V, "check_events got called\n");
++}
++
++static int config(uint32_t srcwidth, uint32_t srcheight,
++ uint32_t dstwidth, uint32_t dstheight,
++ uint32_t flags, char *title, uint32_t format)
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ uint8_t xscale, yscale;
++ uint16_t scaledwidth, scaledheight;
++
++ mp_msg(MSGT_VO, MSGL_V,
++ "vo_imageon: srcwidth:%d, srcheight:%d, "
++ "dstwidth:%d, dstheight:%d\n",
++ srcwidth, srcheight, dstwidth, dstheight);
++
++ if (pdata->config) {
++ ac_overlay_disable(pdata->dev);
++ ac_free_surface(pdata->dev, &pdata->insurface);
++ ac_free_surface(pdata->dev, &pdata->ovsurface);
++ }
++
++ pdata->srcwidth = srcwidth;
++ pdata->srcheight = srcheight;
++
++ //By the moment, only YUV420 supported
++ pdata->ovprops.format = OVLFORMAT_YUV420;
++ pdata->ovprops.portrait_mode = 0;
++ pdata->ovprops.inv_hor = 0;
++ pdata->ovprops.inv_ver = 0;
++ pdata->ovprops.yuv2rgb = 0;
++
++ pdata->rotate = AC_ROT90;
++
++ if (flags & VOFLAG_FULLSCREEN) {
++ pdata->ovwidth = 240;
++ pdata->ovheight = 320;
++ xscale = ac_get_scaler(pdata->ovheight, srcwidth);
++ yscale = ac_get_scaler(pdata->ovwidth, srcheight);
++ pdata->scale = (xscale > yscale) ? xscale : yscale;
++ pdata->ovdst.x = 0;
++ pdata->ovdst.y = 0;
++ pdata->ovprops.video_hor_exp = 1;
++ pdata->ovprops.video_ver_exp = 1;
++ } else {
++ pdata->ovwidth = (dstheight + 0xf) & ~0xf;
++ pdata->ovheight = (dstwidth + 0xf) & ~0xf;
++ xscale = ac_get_scaler(dstwidth, srcwidth);
++ yscale = ac_get_scaler(dstheight, srcheight);
++ pdata->ovdst.x = (pdata->xres - pdata->ovheight) / 2;
++ pdata->ovdst.y = (pdata->yres - pdata->ovwidth) / 2;
++ pdata->ovprops.video_hor_exp = 0;
++ pdata->ovprops.video_ver_exp = 0;
++ }
++
++ pdata->scale = (xscale > yscale) ? xscale : yscale;
++ scaledwidth = ac_apply_scaler(srcwidth, pdata->scale);
++ scaledheight = ac_apply_scaler(srcheight, pdata->scale);
++ pdata->dstpos.x = (pdata->ovwidth - scaledheight) / 2;
++ pdata->dstpos.y = (pdata->ovheight - scaledwidth) / 2;
++
++ if (ac_alloc_surface(pdata->dev, &pdata->ovsurface,
++ FMT_YUV420,
++ pdata->ovwidth,
++ pdata->ovheight,
++ AC_MEM_INTERNAL) == NULL) {
++ mp_msg(MSGT_VO, MSGL_FATAL, "Unable to allocate ov surface\n");
++ return -1;
++ }
++
++ if (ac_alloc_surface(pdata->dev, &pdata->insurface,
++ FMT_YUV420, srcwidth, srcheight,
++ AC_MEM_INTERNAL) == NULL) {
++ mp_msg(MSGT_VO, MSGL_WARN,
++ "No room in internal memory for insurface\n");
++ if (ac_alloc_surface(pdata->dev, &pdata->insurface,
++ FMT_YUV420, srcwidth, srcheight,
++ AC_MEM_EXTERNAL) == NULL) {
++ mp_msg(MSGT_VO, MSGL_FATAL,
++ "Unable to allocate surface\n");
++ ac_free_surface(pdata->dev, &pdata->ovsurface);
++ return -1;
++ }
++ }
++
++ ac_clear_surface(pdata->dev, &pdata->ovsurface);
++ ac_clear_surface(pdata->dev, &pdata->insurface);
++
++
++ mp_msg(MSGT_VO, MSGL_V,
++ "vo_imageon: rotate:%d scale:%d ovwidth:%d, ovheight:%d, "
++ "ovdst(x:%d, y:%d) dstpos(x:%d,y:%d)\n",
++ pdata->rotate,
++ pdata->scale,
++ pdata->ovwidth,
++ pdata->ovheight,
++ pdata->ovdst.x,
++ pdata->ovdst.y,
++ pdata->dstpos.x,
++ pdata->dstpos.y);
++
++ ac_overlay_setup(pdata->dev, &pdata->ovsurface, &pdata->ovsurface.rect,
++ &pdata->ovprops, 0);
++ ac_overlay_setpos(pdata->dev, &pdata->ovdst);
++ ac_overlay_enable(pdata->dev);
++
++ pdata->config = 1;
++ return 0;
++}
++
++static int draw_slice(uint8_t *image[], int stride[],
++ int w, int h, int x, int y)
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ ac_rect_t dstrect;
++ ac_surface_t *dstsurface = &pdata->insurface;
++ int plane;
++ mp_msg(MSGT_VO, MSGL_V,
++ "vo_imageon: draw_slice(w:%d,h:%d,x:%d,y:%d)\n",
++ w, h, x, y);
++
++ ac_reset_ctx(pdata->dev);
++ for (plane = 0; plane <= V_PLANE; plane++) {
++ mp_msg(MSGT_VO, MSGL_V, "Plane: %d, Stride: %d\n",
++ plane, stride[plane]);
++ dstrect.x = x;
++ dstrect.y = y;
++ dstrect.w = w;
++ dstrect.h = h;
++ ac_host2planerect(pdata->dev,
++ image[plane],
++ &dstrect,
++ &pdata->insurface,
++ plane);
++ }
++ return 0;
++}
++
++static int draw_frame(uint8_t *frame[])
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ mp_msg(MSGT_VO, MSGL_V, "vo_imageon: draw_frame() not implemented!\n");
++
++}
++
++static void flip_page(void)
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ int plane;
++ ac_rect_t srcrect;
++ ac_point_t dstpoint;
++ ac_surface_t *insurface = &pdata->insurface;
++ ac_surface_t *ovsurface = &pdata->ovsurface;
++ ac_surfspec_t *surfspec = &ac_surfspecs[ovsurface->format];
++
++ mp_msg(MSGT_VO, MSGL_V, "vo_imageon: flip_page\n");
++
++ srcrect.x = 0;
++ srcrect.y = 0;
++
++ ac_reset_ctx(pdata->dev);
++ if (pdata->rotate != AC_ROT0) {
++ ac_set_xform(pdata->dev, pdata->rotate, AC_NOMIRROR);
++ }
++ ac_disable_dbuf_update(pdata->dev);
++ ac_waitidle(pdata->dev);
++ for (plane = Y_PLANE; plane < surfspec->nplanes; plane++) {
++ ac_setsrcplane(pdata->dev, insurface, plane);
++ ac_setdstplane(pdata->dev, ovsurface, plane);
++ ac_prepare_scaleblt(pdata->dev, DP_DST_8BPP);
++ srcrect.w = pdata->srcwidth / surfspec->planes[plane].xsubsampling;
++ srcrect.h = pdata->srcheight / surfspec->planes[plane].ysubsampling;
++ dstpoint.x = pdata->dstpos.x / surfspec->planes[plane].xsubsampling;
++ dstpoint.y = pdata->dstpos.y / surfspec->planes[plane].ysubsampling;
++ mp_msg(MSGT_VO, MSGL_V,
++ "vo_imageon: scaleblt src(x:%d,y:%d,w:%d,h:%d)"
++ "dst(%d,%d)"
++ "scale(%d)\n",
++ srcrect.x, srcrect.y,
++ srcrect.w, srcrect.h,
++ dstpoint.x, dstpoint.y,
++ pdata->scale);
++ ac_scaleblt(pdata->dev, &srcrect, &dstpoint,
++ pdata->scale, pdata->scale);
++ }
++ ac_enable_dbuf_update(pdata->dev);
++}
++
++static void uninit(void)
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ ac_overlay_disable(pdata->dev);
++ ac_finish(pdata->dev);
++}
++
++static int control(uint32_t request, void *data, ...)
++{
++ struct w100privdata_t *pdata = &w100_privdata;
++ switch (request) {
++ case VOCTRL_QUERY_FORMAT:
++ return query_format(*((uint32_t *)data));
++ case VOCTRL_FULLSCREEN:
++ mp_msg(MSGT_VO, MSGL_V, "vo_imageon: Asked for fullscreen\n");
++ }
++ return VO_NOTIMPL;
++}
++
++static int query_format(uint32_t format)
++{
++ mp_msg(MSGT_VO, MSGL_V,
++ "vo_imageon: query_format was called: %x (%s)\n",
++ format, vo_format_name(format));
++
++ if (IMGFMT_IS_RGB(format)) {
++ return 0;
++
++ switch (IMGFMT_RGB_DEPTH(format)) {
++ case 16:
++ return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW |
++ VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN |
++ VFCAP_OSD | VFCAP_ACCEPT_STRIDE;
++ break;
++ }
++ } else {
++ /* Planar YUV Formats */
++ switch (format) {
++ case IMGFMT_YV12:
++ case IMGFMT_IYUV:
++ case IMGFMT_I420:
++ case IMGFMT_YVU9:
++ case IMGFMT_IF09:
++ case IMGFMT_Y8:
++ case IMGFMT_Y800:
++ return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW |
++ VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN |
++ VFCAP_OSD | VFCAP_ACCEPT_STRIDE;
++ break;
++ }
++ }
++
++ return 0;
++}
++
++
diff --git a/packages/mplayer/files/powerpc-is-ppc.diff b/packages/mplayer/files/powerpc-is-ppc.diff
new file mode 100644
index 0000000000..f8143c460e
--- /dev/null
+++ b/packages/mplayer/files/powerpc-is-ppc.diff
@@ -0,0 +1,11 @@
+--- /tmp/configure 2007-03-30 19:40:34.000000000 +0200
++++ MPlayer-1.0rc1/configure 2007-03-30 19:40:58.795251000 +0200
+@@ -1213,7 +1213,7 @@
+ _optimizing=''
+ ;;
+
+- ppc)
++ ppc|powerpc)
+ _def_arch='#define ARCH_POWERPC 1'
+ _def_dcbzl='#define NO_DCBZL 1'
+ _target_arch='TARGET_ARCH_POWERPC = yes'
diff --git a/packages/mplayer/files/vo_pxa.c b/packages/mplayer/files/vo_pxa.c
index 2e9bb57b9c..1488d14064 100644
--- a/packages/mplayer/files/vo_pxa.c
+++ b/packages/mplayer/files/vo_pxa.c
@@ -7,6 +7,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include "config.h"
#include "video_out.h"
@@ -62,7 +63,8 @@ static int preinit(const char *vo_subdevice)
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOGET_VSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOGET_VSCREENINFO preinit base_fd failed %d\n",
+ errno );
/* If this failed, close down the FD so we don't try to set this again */
close( priv->base_fd );
@@ -94,9 +96,9 @@ static int config(uint32_t src_width, uint32_t src_height,
{
pxa_priv_t *priv = &st_pxa_priv;
int rc;
+ int i;
- mp_msg(MSGT_VO, MSGL_V, "vo_pxa: config() was called\n");
- mp_msg(MSGT_VO, MSGL_V, "vo_pxa: src_width:%d, src_height:%d, dst_width:%d, dst_height:%d\n",
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: config() src_width:%d, src_height:%d, dst_width:%d, dst_height:%d\n",
src_width, src_height, dst_width, dst_height);
/* Check format */
@@ -129,21 +131,23 @@ static int config(uint32_t src_width, uint32_t src_height,
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: Set of base fb failed\n");
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() Set FBIOPUT_VSCREENINFO on base_fd failed %d\n",
+ errno );
priv->vm = 0;
goto err_out;
}
+
+ /* We need this sleep, to make the change in resolution actually happen, before we open the overlay */
+ sleep(1);
}
- /* We need these sleeps, to make the change in resolution actually happen, before we open the overlay */
- sleep(2);
/* Open up the overlay fbdev */
priv->fd = open( "/dev/fb2", O_RDWR );
if( priv->fd < 0 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: Could not open framebuffer device\n");
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: Could not open /dev/fb2: %d\n", errno );
goto err_out;
}
@@ -152,13 +156,40 @@ static int config(uint32_t src_width, uint32_t src_height,
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOGET_VSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOGET_VSCREENINFO from fd failed %d\n",
+ errno );
goto err_out;
}
+ /* Store away the source dimensions, so we can place in centre of screen later in vm mode */
+ priv->src_width = src_width;
+ priv->src_height = src_height;
+
/* Set up the buffer */
- priv->my_fb_var.xres = src_width;
- priv->my_fb_var.yres = src_height;
+ if( priv->vm )
+ {
+ /* Ignore size, as the rest of the screen is toast. Use max size */
+ priv->my_fb_var.xres = 240;
+ priv->my_fb_var.yres = 320;
+
+ /* Do we need to rotate? */
+ if( priv->src_width > priv->src_height )
+ {
+ /* Yes */
+ priv->rotate = 1;
+ }
+
+ priv->width = 240;
+ priv->height = 320;
+ }
+ else
+ {
+ priv->my_fb_var.xres = src_width;
+ priv->my_fb_var.yres = src_height;
+ priv->width = src_width;
+ priv->height = src_height;
+ }
+
priv->my_fb_var.nonstd = ( 4 << 20) /* Format YV12 */
| ( 0 << 0) /* x position */
| ( 0 << 10); /* y position */
@@ -171,7 +202,8 @@ static int config(uint32_t src_width, uint32_t src_height,
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOPUT_VSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOPUT_VSCREENINFO to fd failed: %d\n",
+ errno );
goto err_out;
}
@@ -180,7 +212,8 @@ static int config(uint32_t src_width, uint32_t src_height,
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOGET_FSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOGET_FSCREENINFO from fd failed: %d\n",
+ errno );
goto err_out;
}
@@ -191,7 +224,7 @@ static int config(uint32_t src_width, uint32_t src_height,
if( priv->fb_mem_base == MAP_FAILED )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: mmap buffer failed\n" );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: mmap fd buffer failed: %d\n", errno );
goto err_out;
}
@@ -200,12 +233,79 @@ static int config(uint32_t src_width, uint32_t src_height,
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOGET_VSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOGET_VSCREENINFO from fd (2) failed %d\n",
+ errno );
goto err_out;
}
+ /* Fill the overlay with black */
+ memset( priv->fb_mem_base + priv->my_fb_var.red.offset, 16, priv->my_fb_var.red.length );
+ memset( priv->fb_mem_base + priv->my_fb_var.green.offset, 128, priv->my_fb_var.green.length );
+ memset( priv->fb_mem_base + priv->my_fb_var.blue.offset, 128, priv->my_fb_var.blue.length );
+
+ /* Now open the OSD overlay - overlay 1, and fill with transparent */
+ sleep( 1 );
+
+ priv->overlay_fd = open( "/dev/fb1", O_RDWR );
+
+ if( priv->overlay_fd < 0 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: Could not open /dev/fb1: %d\n", errno );
+ goto err_out;
+ }
+
+ /* Read in fb var data */
+ rc = ioctl( priv->overlay_fd, FBIOGET_VSCREENINFO, &(priv->osd_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOGET_VSCREENINFO from overlay_fd failed; %d\n",
+ errno );
+ goto err_out;
+ }
+
+ priv->osd_fb_var.xres = priv->width;
+ priv->osd_fb_var.yres = priv->height;
+ priv->osd_fb_var.nonstd = ( 0 << 0) /* x position */
+ | ( 0 << 10); /* y position */
+ /* Use 15 bit mode, with top bit transparency */
+ priv->osd_fb_var.bits_per_pixel = 16;
+
+ rc = ioctl( priv->overlay_fd, FBIOPUT_VSCREENINFO, &(priv->osd_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOPUT_VSCREENINFO to overlay_fd failed: %d\n",
+ errno );
+ goto err_out;
+ }
+
+ /* Next get the fixed fbvars, so we can mmap the data */
+ rc = ioctl( priv->overlay_fd, FBIOGET_FSCREENINFO, &(priv->osd_fb_fix) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: config() FBIOGET_FSCREENINFO from overlay_fd failed %d\n",
+ errno );
+ goto err_out;
+ }
+
+ priv->osd_mem_base = mmap( NULL, priv->osd_fb_fix.smem_len, (PROT_READ | PROT_WRITE ),
+ MAP_SHARED,
+ priv->overlay_fd,
+ 0 );
+
+ if( priv->osd_mem_base == MAP_FAILED )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: mmap osd_mem_base failed: %d\n", errno );
+ goto err_out;
+ }
+
+ /* Fill the overlay with transparent */
+ vo_pxa_clear_osd( priv->osd_mem_base, priv->osd_fb_fix.smem_len );
+
/* We are good to go! */
- mp_msg( MSGT_VO, MSGL_V, "vo_pxa: FOpened screen %d x %d fourcc %s\n",
+ mp_msg( MSGT_VO, MSGL_V, "vo_pxa: Opened video overlay %d x %d fourcc %s\n",
priv->my_fb_var.xres,
priv->my_fb_var.yres,
vo_format_name(format) );
@@ -213,18 +313,8 @@ static int config(uint32_t src_width, uint32_t src_height,
return 0;
err_out:
-
- if( priv->fb_mem_base != MAP_FAILED )
- {
- munmap( priv->fb_mem_base, priv->my_fb_fix.smem_len );
- priv->fb_mem_base = MAP_FAILED;
- }
-
- if( priv->fd >= 0 )
- {
- close( priv->fd );
- priv->fd = -1;
- }
+
+ /* Don't do anything here for the moment */
return -1;
}
@@ -238,6 +328,8 @@ static int config(uint32_t src_width, uint32_t src_height,
****************************************************************************/
static int control(uint32_t request, void *data, ...)
{
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: control %08x\n", request );
+
switch( request )
{
case VOCTRL_QUERY_FORMAT:
@@ -261,7 +353,7 @@ static int control(uint32_t request, void *data, ...)
int draw_frame(uint8_t *src[])
{
/* This is not implimented */
- mp_msg(MSGT_VO, MSGL_V, "vo_pxa: dummy draw_frame() was called\n");
+ mp_msg(MSGT_VO, MSGL_ERR, "vo_pxa: dummy draw_frame() was called\n");
return -1;
}
@@ -281,79 +373,291 @@ int draw_frame(uint8_t *src[])
int draw_slice(uint8_t *src[], int stride[], int w,int h, int x,int y)
{
pxa_priv_t *priv = &st_pxa_priv;
- uint8_t *my_src;
- uint8_t *dest;
- size_t length;
- int i;
/* This routine is only display routine actually implimented */
- mp_msg(MSGT_VO, MSGL_V, "vo_pxa: draw_slice() was called\n");
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: draw_slice() w %d h %d x %d y %d stride %d %d %d\n",
+ w, h, x, y, stride[0], stride[1], stride[2] );
/* It would be faster to check if source and dest have same geometry and copy
* whole block
* For the moment we just copy a line at a time
*/
- /* Limit area written to */
- if( x >= priv->my_fb_fix.line_length )
+ /* In vm mode rotate if wider than long */
+ if( priv->vm )
{
- return 0;
- }
+ /* Do we nee to rotate? */
+ if( priv->rotate )
+ {
+ /* Yes, rotated version */
+ int dst_x_offset = 0;
+ int dst_y_offset = 0;
+ int src_x_offset = 0;
+ int src_y_offset = 0;
+
+ /* Figure out dst offset */
+ if( priv->src_width < 320 )
+ {
+ dst_x_offset = ( ( 320 - priv->src_width ) / 2 );
+ /* Make it a multiple of 16 */
+ dst_x_offset &= ~(0xf);
+ }
+
+ if( priv->src_height < 240 )
+ {
+ dst_y_offset = ( ( 240 - priv->src_height ) / 2 );
+ /* Make it a multiple of 16 */
+ dst_y_offset &= ~(0xf);
+ }
+
+ dst_x_offset += x;
+ dst_y_offset += y;
+
+ if( ( dst_x_offset >= 320 ) || ( dst_y_offset >= 240 ) )
+ {
+ /* Nothing to do - drawing off the screen! */
+ return( 0 );
+ }
+
+ /* Limit to drawable area */
+ if( ( w + dst_x_offset ) > 320 )
+ {
+ w = ( 320 - dst_x_offset );
+ }
+
+ if( ( h + dst_y_offset ) > 240 )
+ {
+ h = ( 240 - dst_y_offset );
+ }
+
+ /* And source offset */
+ if( priv->src_width > 320 )
+ {
+ src_x_offset = ( ( priv->src_width - 320 ) / 2 );
+ /* Make it a multiple of 16 */
+ src_x_offset &= ~(0xf);
+ }
+
+ if( priv->src_height > 240 )
+ {
+ src_y_offset = ( ( priv->src_height - 240 ) / 2 );
+ /* Make it a multiple of 16 */
+ src_y_offset &= ~(0xf);
+ }
+
+
+ /* Y first */
+ vo_pxa_copy_and_rotate( src[0] + src_x_offset + (src_y_offset * stride[0]), stride[0],
+ priv->fb_mem_base + priv->my_fb_var.red.offset + (240 * dst_x_offset) + (240 - dst_y_offset - h),
+ w, h, 240 );
+ /* Now U */
+ vo_pxa_copy_and_rotate( src[1] + src_x_offset/2 + (src_y_offset/2 * stride[1]), stride[1],
+ priv->fb_mem_base + priv->my_fb_var.green.offset + (120 * dst_x_offset/2) + (120 - dst_y_offset/2 - h/2),
+ w/2, h/2, 120 );
+ vo_pxa_copy_and_rotate( src[2] + src_x_offset/2 + (src_y_offset/2 * stride[2]), stride[2],
+ priv->fb_mem_base + priv->my_fb_var.blue.offset + (120 * dst_x_offset/2) + (120 - dst_y_offset/2 - h/2),
+ w/2, h/2, 120 );
+ }
+ else
+ {
+ /* Don't rotate */
+ int i;
+ uint8_t *my_src;
+ uint8_t *dest;
+ int dst_x_offset = 0;
+ int dst_y_offset = 0;
+ int src_x_offset = 0;
+ int src_y_offset = 0;
+
+ /* Figure out dst offset */
+ if( priv->src_width < 240 )
+ {
+ dst_x_offset = ( ( 240 - priv->src_width ) / 2 );
+ /* Make it a multiple of 16 */
+ dst_x_offset &= ~(0xf);
+ }
+
+ if( priv->src_height < 320 )
+ {
+ dst_y_offset = ( ( 320 - priv->src_height ) / 2 );
+ /* Make it a multiple of 16 */
+ dst_y_offset &= ~(0xf);
+ }
+
+ dst_x_offset += x;
+ dst_y_offset += y;
+
+ if( ( dst_x_offset >= 240 ) || ( dst_y_offset >= 320 ) )
+ {
+ /* Nothing to do - drawing off the screen! */
+ return( 0 );
+ }
+
+ /* Limit to drawable area */
+ if( ( w + dst_x_offset ) > 240 )
+ {
+ w = ( 240 - dst_x_offset );
+ }
+
+ if( ( h + dst_y_offset ) > 320 )
+ {
+ h = ( 320 - dst_y_offset );
+ }
+
+ /* And source offset */
+ if( priv->src_width > 240 )
+ {
+ src_x_offset = ( ( priv->src_width - 240 ) / 2 );
+ /* Make it a multiple of 16 */
+ src_x_offset &= ~(0xf);
+ }
+
+ if( priv->src_height > 320 )
+ {
+ src_y_offset = ( ( priv->src_height - 320 ) / 2 );
+ /* Make it a multiple of 16 */
+ src_y_offset &= ~(0xf);
+ }
+
+ /* First Y */
+ for( i = 0; i<h; i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.red.offset +
+ ( (dst_y_offset+i) * priv->my_fb_fix.line_length ) +
+ dst_x_offset;
+ my_src = src[0] + src_x_offset + (stride[0] * (i+src_y_offset));
+ memcpy( dest, my_src, w );
+ }
+
+ /* Now U */
+ for( i = 0; i<(h/2); i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.green.offset +
+ ( ((dst_y_offset/2)+i) * (priv->my_fb_fix.line_length/2) ) +
+ dst_x_offset/2;
+ my_src = src[1] + src_x_offset/2 + (stride[1] * (i+(src_y_offset/2)));
+ memcpy( dest, my_src, w/2 );
+ }
- if( w + x > priv->my_fb_fix.line_length )
- {
- w = priv->my_fb_fix.line_length - x;
+ /* Finaly V */
+ for( i = 0; i<(h/2); i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.blue.offset +
+ ( ((dst_y_offset/2)+i) * (priv->my_fb_fix.line_length/2) ) +
+ dst_x_offset/2;
+ my_src = src[2] + src_x_offset/2 + (stride[2] * (i+(src_y_offset/2)));
+ memcpy( dest, my_src, w/2 );
+ }
+
+ }
}
-
- if( y>= priv->my_fb_var.yres )
+ else
{
- return 0;
- }
+ /* Not full screen mode */
+ uint8_t *my_src;
+ uint8_t *dest;
+ size_t length;
+ int i;
+
+ /* It would be faster to check if source and dest have same geometry and copy
+ * whole block
+ * For the moment we just copy a line at a time
+ */
+
+ /* Limit area written to */
+ if( x >= priv->my_fb_fix.line_length )
+ {
+ return 0;
+ }
- if( h + y > priv->my_fb_var.yres )
- {
- h = priv->my_fb_var.yres - y;
- }
+ if( w + x > priv->my_fb_fix.line_length )
+ {
+ w = priv->my_fb_fix.line_length - x;
+ }
- /* First Y */
- for( i = 0; i<h; i++ )
- {
- dest = priv->fb_mem_base +
- priv->my_fb_var.red.offset +
- ( (y+i) * priv->my_fb_fix.line_length ) +
- x;
- my_src = src[0] + stride[0] * i;
- memcpy( dest, my_src, w );
- }
+ if( y>= priv->my_fb_var.yres )
+ {
+ return 0;
+ }
+
+ if( h + y > priv->my_fb_var.yres )
+ {
+ h = priv->my_fb_var.yres - y;
+ }
+
+ /* First Y */
+ for( i = 0; i<h; i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.red.offset +
+ ( (y+i) * priv->my_fb_fix.line_length ) +
+ x;
+ my_src = src[0] + stride[0] * i;
+ memcpy( dest, my_src, w );
+ }
- /* Now U */
- for( i = 0; i<(h/2); i++ )
- {
- dest = priv->fb_mem_base +
- priv->my_fb_var.green.offset +
- ( ((y/2)+i) * (priv->my_fb_fix.line_length/2) ) +
- x;
- my_src = src[1] + stride[1] * i;
- memcpy( dest, my_src, w/2 );
- }
+ /* Now U */
+ for( i = 0; i<(h/2); i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.green.offset +
+ ( ((y/2)+i) * (priv->my_fb_fix.line_length/2) ) +
+ x;
+ my_src = src[1] + stride[1] * i;
+ memcpy( dest, my_src, w/2 );
+ }
- /* Finaly V */
- for( i = 0; i<(h/2); i++ )
- {
- dest = priv->fb_mem_base +
- priv->my_fb_var.blue.offset +
- ( ((y/2)+i) * (priv->my_fb_fix.line_length/2) ) +
- x;
- my_src = src[2] + stride[2] * i;
- memcpy( dest, my_src, w/2 );
+ /* Finaly V */
+ for( i = 0; i<(h/2); i++ )
+ {
+ dest = priv->fb_mem_base +
+ priv->my_fb_var.blue.offset +
+ ( ((y/2)+i) * (priv->my_fb_fix.line_length/2) ) +
+ x;
+ my_src = src[2] + stride[2] * i;
+ memcpy( dest, my_src, w/2 );
+ }
}
-
return 0;
}
static void draw_osd(void)
{
+ pxa_priv_t *priv = &st_pxa_priv;
+ int osd_has_changed;
+
+ /* This gets called every frame, so systems which do the OSD without a
+ * seperate overlay can mix in the image. We need to find out if the osd
+ * has actually been updated!
+ */
mp_msg(MSGT_VO, MSGL_V, "vo_pxa: draw_osd() was called\n");
+
+ osd_has_changed = vo_update_osd( priv->width, priv->height);
+
+ if(osd_has_changed)
+ {
+ int i;
+
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: Clear and update OSD\n");
+
+ /* Fill with transparent */
+ vo_pxa_clear_osd( priv->osd_mem_base, priv->osd_fb_fix.smem_len );
+
+ priv->osd_cleared = 1;
+
+ /* now update */
+ if( priv->rotate )
+ {
+ vo_draw_text( priv->width, priv->height, vo_pxa_draw_alpha_with_rotate );
+ }
+ else
+ {
+ vo_draw_text( priv->width, priv->height, vo_pxa_draw_alpha );
+ }
+ }
}
/*****************************************************************************
@@ -377,6 +681,7 @@ static void flip_page(void)
****************************************************************************/
static void check_events(void)
{
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: check_events() was called\n");
}
/*****************************************************************************
@@ -390,41 +695,74 @@ static void uninit(void)
pxa_priv_t *priv = &st_pxa_priv;
int rc;
- if( priv->fb_mem_base != MAP_FAILED )
- {
- munmap( priv->fb_mem_base, priv->my_fb_fix.smem_len );
- priv->fb_mem_base = MAP_FAILED;
- }
-
- if( priv->fd >= 0 )
- {
- close( priv->fd );
- priv->fd = -1;
- }
-
- /* We need these sleeps, to make the change in resolution actually happen */
- sleep(1);
-
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: uninit() was called\n");
+
if( priv->vm )
{
+ /* We need these sleeps, to make the change in resolution actually happen */
+ sleep(1);
+
/* Restore original resolution */
if( priv->base_fd >= 0 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: Try to restore original video mode\n", __LINE__ );
-
rc = ioctl( priv->base_fd, FBIOPUT_VSCREENINFO, &(priv->base_orig_fb_var) );
if( rc == -1 )
{
- mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: FBIOPUT_VSCREENINFO line %d failed\n", __LINE__ );
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: uninit() FBIOPUT_VSCREENINFO to base_fd failed %d\n",
+ errno );
}
}
-
+ /* We need these sleeps, to make the change in resolution actually happen */
+ /* For some reason, if we change the reolution the overlay buffer never gets deleted? */
+ sleep(1);
}
- /* We need these sleeps, to make the change in resolution actually happen */
- /* For some reason, if we change the reolution the overlay buffer never gets deleted? */
- sleep(1);
+
+ /* We need to force the overlays to be really disabled, otherwise they
+ * will come back as zombies after suspend, resume
+ * This trick seems to work, but will not be needed once kernel driver
+ * is fixed
+ */
+ if( priv->fd >= 0 )
+ {
+ rc = ioctl( priv->fd, FBIOGET_VSCREENINFO, &(priv->my_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: uninit() FBIOGET_VSCREENINFO from fd failed %d\n",
+ errno );
+ }
+ priv->my_fb_var.bits_per_pixel = 0;
+
+ rc = ioctl( priv->fd, FBIOPUT_VSCREENINFO, &(priv->my_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: uninit() FBIOPUT_VSCREENINFO from fd failed %d\n",
+ errno );
+ }
+ }
+
+ if( priv->overlay_fd >= 0 )
+ {
+ rc = ioctl( priv->overlay_fd, FBIOGET_VSCREENINFO, &(priv->my_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: uninit() FBIOGET_VSCREENINFO from overlay_fd failed %d\n",
+ errno );
+ }
+ priv->my_fb_var.bits_per_pixel = 0;
+
+ rc = ioctl( priv->overlay_fd, FBIOPUT_VSCREENINFO, &(priv->my_fb_var) );
+
+ if( rc == -1 )
+ {
+ mp_msg( MSGT_VO, MSGL_ERR, "vo_pxa: uninit() FBIOPUT_VSCREENINFO from overlay_fd failed %d\n",
+ errno );
+ }
+ }
if( priv->base_fd >= 0 )
{
@@ -444,25 +782,199 @@ static int vo_pxa_query_format( uint32_t format )
mp_msg(MSGT_VO, MSGL_V, "vo_pxa: vo_pxa_query_format was called: %x (%s)\n",
format, vo_format_name(format));
- if( IMGFMT_IS_RGB(format) )
+ switch (format)
+ {
+ /* Planar YUV Formats */
+ /* Warning! dropthrough */
+ case IMGFMT_YV12:
+ case IMGFMT_IYUV:
+ case IMGFMT_I420:
+ return( VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW
+ | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD
+ | VFCAP_ACCEPT_STRIDE );
+ break;
+ }
+
+ return 0;
+}
+
+static void vo_pxa_copy_and_rotate( uint8_t *src, int stride, uint8_t *dst, int w, int h, int dst_stride )
+{
+ int i,j;
+ uint8_t *my_src, *my_dst;
+ Vo_Pxa_Pixel_Data8 *img_dst_pixel_data8;
+
+ /* Loop so writing consectuive data in rotated image */
+ /* This produces some pretty good assembler - better than the handcoded stuff in w100 */
+ for( j=0; j<w; j++ )
+ {
+ my_src = src + j + ( stride * (h - 1) );
+
+ img_dst_pixel_data8 = (Vo_Pxa_Pixel_Data8 *)dst;
+
+ /* Allow for src not multiple of 8 by running off the end a little. Should not matter */
+ for( i=0; i<((h+7)/8); i++ )
+ {
+ register Vo_Pxa_Pixel_Data8 build_pixels;
+
+ build_pixels.a = *my_src;
+ my_src -= stride;
+ build_pixels.a |= (*my_src<<8);
+ my_src -= stride;
+ build_pixels.a |= (*my_src<<16);
+ my_src -= stride;
+ build_pixels.a |= (*my_src<<24);
+ my_src -= stride;
+
+ build_pixels.b = *my_src;
+ my_src -= stride;
+ build_pixels.b |= (*my_src<<8);
+ my_src -= stride;
+ build_pixels.b |= (*my_src<<16);
+ my_src -= stride;
+ build_pixels.b |= (*my_src<<24);
+ my_src -= stride;
+
+ *img_dst_pixel_data8++ = build_pixels;
+ }
+
+ /* Allow source not as big as dest */
+ dst += dst_stride;
+ }
+}
+
+static void vo_pxa_draw_alpha( int x, int y, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride )
+{
+ /* Dump data into our 15bit buffer with transparency */
+ pxa_priv_t *priv = &st_pxa_priv;
+ int i,j;
+ unsigned char *src_ptr = src;
+ unsigned char *a_ptr = srca;
+ unsigned short *out_ptr;
+
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: vo_pxa_draw_alpha() w %d y %d w %d h %d\n", x, y, w, h );
+
+ /* We ignore the alpha channel, other than off or on */
+ for( i=0; i<h; i++ )
+ {
+ out_ptr = priv->osd_mem_base + x + ( priv->width * ( y + i ) );
+ src_ptr = src + ( i * stride );
+ a_ptr = srca + ( i * stride );
+
+ for( j=0; j<w; j++ )
+ {
+ /* The srca is a 0-255 transpaency level, where 0 is transparent.
+ * We only support transparent on or off
+ */
+ if( *a_ptr++ )
+ {
+ unsigned int grey;
+ /* The src is a greylevel from 0 - 255 */
+ /* We may as well use this value */
+ grey = *src_ptr++ >> 3;
+ *out_ptr++ = grey | (grey << 5) | (grey<<10);
+ }
+ else
+ {
+ *out_ptr++ = 0x8000;
+ src_ptr++;
+ }
+
+ }
+ }
+}
+
+static void vo_pxa_draw_alpha_with_rotate( int x, int y, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride )
+{
+ /* Dump data into our 15bit buffer with transparency */
+ pxa_priv_t *priv = &st_pxa_priv;
+ int i,j;
+ unsigned char *src_ptr = src;
+ unsigned char *a_ptr = srca;
+ unsigned short *out_ptr;
+
+ mp_msg(MSGT_VO, MSGL_V, "vo_pxa: vo_pxa_draw_alpha_with_rotate() x %d y %d w %d h %d\n", x, y, w, h );
+
+ if( x >= 320 )
+ {
+ /* Off the screen */
+ return;
+ }
+
+ /* Limit to size of screen/memory */
+ if( ( w + x ) > 320 )
+ {
+ w = 320 - x;
+ }
+
+ if( y >= 240 )
{
- /* RGB/BGR Formats not supported yet */
- return 0;
- }
- else
+ /* Off the screen */
+ return;
+ }
+
+ /* Limit to size of screen/memory */
+ if( ( y + h ) > 240 )
+ {
+ h = 240 - y;
+ }
+
+
+ /* We ignore the alpha channel, other than off or on */
+ for( i=0; i<w; i++ )
{
- /* Planar YUV Formats */
- switch (format) {
- /* Warning! dropthrough */
- case IMGFMT_YV12:
- case IMGFMT_IYUV:
- case IMGFMT_I420:
- return( VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW
- | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_OSD
- | VFCAP_ACCEPT_STRIDE );
- break;
- }
+ out_ptr = priv->osd_mem_base + y + ( priv->width * ( x + i ) );
+ src_ptr = src + i + ( stride * (h - 1));
+ a_ptr = srca + i + ( stride * (h - 1));
+
+ for( j=0; j<h; j++ )
+ {
+ /* The srca is a 0-255 transpaency level, where 0 is transparent.
+ * We only support transparent on or off
+ */
+ if( *a_ptr )
+ {
+ unsigned int grey;
+ /* The src is a greylevel from 0 - 255 */
+ /* We may as well use this value */
+ grey = *src_ptr >> 3;
+ *out_ptr++ = grey | (grey << 5) | (grey<<10);
+ }
+ else
+ {
+ *out_ptr++ = 0x8000;
+ src_ptr;
+ }
+ a_ptr -= stride;
+ src_ptr -= stride;
+ }
}
+}
- return 0;
+static void vo_pxa_clear_osd( uint16_t *mem_base, int len )
+{
+ /* fill whole area with 0x8000 -> trsnaparent.
+ * assume area is word aligned, and a mulitple of 16 bytes in length
+ * However I tried I could not get the compiler to generate this.
+ * It always wanted to to do ldmia 4 words from stack followed by
+ * stmia 4 words. This seems odd!
+ */
+ __asm__ __volatile__ (
+ "mov r4, %0 \n\t"
+ "mov r5, %1, lsr #4 \n\t"
+ "subs r5, r5, #1\n\t"
+ "mov r0, #0x80000000 \n\t"
+ "orr r0, r0, #0x00008000 \n\t"
+ "mov r1, r0 \n\t"
+ "mov r2, r0 \n\t"
+ "mov r3, r0 \n\t"
+ "1: \n\t"
+ "subs r5, r5, #1\n\t"
+ "stmia r4!, {r0, r1, r2, r3} \n\t"
+ "bne 1b \n\t"
+ :
+ : "r"(mem_base), "r"(len)
+ : "memory", "r0", "r1", "r2", "r3", "r4", "r5", "cc" );
}
diff --git a/packages/mplayer/files/vo_pxa.h b/packages/mplayer/files/vo_pxa.h
index ee7825b76e..31cc1a7862 100644
--- a/packages/mplayer/files/vo_pxa.h
+++ b/packages/mplayer/files/vo_pxa.h
@@ -14,18 +14,38 @@
typedef struct pxa_priv_s {
uint8_t *fb_mem_base;
+ uint16_t *osd_mem_base;
+
int fd;
int base_fd;
+ int overlay_fd;
struct fb_var_screeninfo my_fb_var;
struct fb_fix_screeninfo my_fb_fix;
struct fb_var_screeninfo base_orig_fb_var;
+ struct fb_var_screeninfo osd_fb_var;
+ struct fb_fix_screeninfo osd_fb_fix;
int vm;
uint32_t format;
int src_width;
int src_height;
+ int width;
+ int height;
+ int rotate;
+ int osd_cleared;
} pxa_priv_t;
+typedef struct vo_pxa_pixel_data8 {
+ unsigned int a,b;
+} Vo_Pxa_Pixel_Data8;
+
#define UNUSED(v) ((void)(v))
/* Internal API */
static int vo_pxa_query_format( uint32_t format );
+static void vo_pxa_copy_and_rotate( uint8_t *src, int stride, uint8_t *dst, int w, int h, int dst_stride );
+static void vo_pxa_draw_alpha( int x, int y, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride );
+static void vo_pxa_draw_alpha_with_rotate( int x, int y, int w, int h, unsigned char *src,
+ unsigned char *srca, int stride );
+
+static void vo_pxa_clear_osd( uint16_t *mem_base, int len );
diff --git a/packages/mplayer/mplayer-common.bb b/packages/mplayer/mplayer-common.bb
index 4b9570abbf..cf1ced294f 100644
--- a/packages/mplayer/mplayer-common.bb
+++ b/packages/mplayer/mplayer-common.bb
@@ -1,6 +1,6 @@
#
# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
-# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+# License: MIT (see COPYING.MIT)
#
# Filename: mplayer-common.bb
# Date: 26-Mar-06
diff --git a/packages/mplayer/mplayer_0.0+1.0rc1.bb b/packages/mplayer/mplayer_0.0+1.0rc1.bb
index 5ade18bfeb..6d9cd754d5 100644
--- a/packages/mplayer/mplayer_0.0+1.0rc1.bb
+++ b/packages/mplayer/mplayer_0.0+1.0rc1.bb
@@ -20,6 +20,7 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 \
file://makefile-nostrip.patch;patch=1 \
${SOURCEFORGE_MIRROR}/libw100/mplayer-imageon.patch;patch=1 \
file://imageon-video_out.patch;patch=1 \
+ file://powerpc-is-ppc.diff;patch=1 \
file://pxa_configure.patch;patch=1 \
file://pxa-video_out.patch;patch=1 "
@@ -33,7 +34,7 @@ PACKAGE_ARCH_mencoder_collie = "collie"
RCONFLICTS_${PN} = "mplayer-atty"
RREPLACES_${PN} = "mplayer-atty"
-PR = "r8"
+PR = "r14"
PARALLEL_MAKE = ""
@@ -173,10 +174,38 @@ EXTRA_OECONF = " \
--disable-runtime-cpudetection \
"
-EXTRA_OECONF_append_c7x0 = " --enable-w100 --enable-imageon "
-EXTRA_OECONF_append_hx4700 = " --enable-imageon "
+EXTRA_OECONF_append_arm = " --disable-decoder=vorbis_decoder \
+ --disable-encoder=vorbis_encoder"
+
EXTRA_OECONF_append_progear = " --disable-sse --disable-3dnow --disable-mmxext --disable-sse2"
+
+#enable support for the ati imageon series (w100 and w3220)
+EXTRA_OECONF_append_c7x0 = " --enable-w100 "
+EXTRA_OECONF_append_hx4700 = " --enable-imageon "
+
+#enable pxa270 overlay support
EXTRA_OECONF_append_spitz = " --enable-pxa "
+EXTRA_OECONF_append_akita = " --enable-pxa "
+EXTRA_OECONF_append_a780 = " --enable-pxa "
+EXTRA_OECONF_append_magician = " --enable-pxa "
+EXTRA_OECONF_append_htcuniversal = " --enable-pxa "
+EXTRA_OECONF_append_palmld = " --enable-pxa "
+
+#build with support for the iwmmxt instruction support (pxa270 and up)
+TARGET_CC_ARCH_spitz = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_spitz = "iwmmxt"
+TARGET_CC_ARCH_akita = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_akita = "iwmmxt"
+TARGET_CC_ARCH_a780 = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_a780 = "iwmmxt"
+TARGET_CC_ARCH_hx4700 = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_hx4700 = "iwmmxt"
+TARGET_CC_ARCH_magician = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_magician = "iwmmxt"
+TARGET_CC_ARCH_htcuniversal = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_htcuniversal = "iwmmxt"
+TARGET_CC_ARCH_palmld = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_palmld = "iwmmxt"
do_configure() {
cp ${WORKDIR}/vo_w100.c ${S}/libvo
diff --git a/packages/mplayer/mplayer_svn.bb b/packages/mplayer/mplayer_svn.bb
index 5dca7401c9..4a47d744ca 100644
--- a/packages/mplayer/mplayer_svn.bb
+++ b/packages/mplayer/mplayer_svn.bb
@@ -9,12 +9,18 @@ SRC_URI = "svn://svn.mplayerhq.hu/mplayer;module=trunk \
file://vo_w100.c \
file://vo_w100_api.h \
file://vo_w100_fb.h \
+ file://vo_pxa.c \
+ file://vo_pxa.h \
file://Makefile-codec-cfg.patch;patch=1 \
file://w100-configure-svn.patch;patch=1 \
file://w100-video_out.patch;patch=1 \
file://w100-mplayer.patch;patch= \
file://pld-onlyarm5.patch;patch=1 \
- file://makefile-nostrip-svn.patch;patch=1"
+ file://makefile-nostrip-svn.patch;patch=1 \
+ file://mplayer-imageon-svn.patch;patch=1 \
+ file://imageon-video_out.patch;patch=1 \
+ file://pxa_configure.patch;patch=1 \
+ file://pxa-video_out.patch;patch=1 "
RCONFLICTS_${PN} = "mplayer-atty"
RREPLACES_${PN} = "mplayer-atty"
@@ -79,7 +85,7 @@ EXTRA_OECONF = " \
--enable-png \
--enable-jpeg \
--disable-libcdio \
- --enable-liblzo \
+ --disable-liblzo \
--disable-win32 \
--disable-qtx \
--disable-xanim \
@@ -161,13 +167,41 @@ EXTRA_OECONF = " \
--disable-runtime-cpudetection \
"
+EXTRA_OECONF_append_arm = " --disable-decoder=vorbis_decoder \
+ --disable-encoder=vorbis_encoder"
+
+EXTRA_OECONF_append_progear = " --disable-sse --disable-3dnow --disable-mmxext --disable-sse2"
+
+#enable support for the ati imageon series (w100 and w3220)
EXTRA_OECONF_append_c7x0 = " --enable-w100 "
+EXTRA_OECONF_append_hx4700 = " --enable-imageon "
+
+#enable pxa270 overlay support
+EXTRA_OECONF_append_spitz = " --enable-pxa "
+EXTRA_OECONF_append_a780 = " --enable-pxa "
+EXTRA_OECONF_append_magician = " --enable-pxa "
+EXTRA_OECONF_append_htcuniversal = " --enable-pxa "
+
+#build with support for the iwmmxt instruction support (pxa270 and up)
+TARGET_CC_ARCH_spitz = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_spitz = "iwmmxt"
+TARGET_CC_ARCH_a780 = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_a780 = "iwmmxt"
+TARGET_CC_ARCH_hx4700 = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_hx4700 = "iwmmxt"
+TARGET_CC_ARCH_magician = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_magician = "iwmmxt"
+TARGET_CC_ARCH_htcuniversal = "-march=iwmmxt -mtune=iwmmxt"
+PACKAGE_ARCH_htcuniversal = "iwmmxt"
do_configure() {
cp ${WORKDIR}/vo_w100.c ${S}/libvo
cp ${WORKDIR}/vo_w100_api.h ${S}/libvo
cp ${WORKDIR}/vo_w100_fb.h ${S}/libvo
- ./configure ${EXTRA_OECONF}
+ cp ${WORKDIR}/vo_pxa.c ${S}/libvo
+ cp ${WORKDIR}/vo_pxa.h ${S}/libvo
+
+ ./configure ${EXTRA_OECONF}
}
do_compile () {
diff --git a/packages/mrxvt/files/fix-compile.patch b/packages/mrxvt/files/fix-compile.patch
index 25794dc5fd..c849ffd35e 100644
--- a/packages/mrxvt/files/fix-compile.patch
+++ b/packages/mrxvt/files/fix-compile.patch
@@ -1,19 +1,16 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- mrxvt-0.4.1/src/rxvt.h~fix-compile
-+++ mrxvt-0.4.1/src/rxvt.h
-@@ -387,15 +387,8 @@
- ** which in turn is unsafe without checking.
- ** Untainted defines the type of data that is safe.
- */
+Index: mrxvt-0.5.2/src/rxvt.h
+===================================================================
+--- mrxvt-0.5.2.orig/src/rxvt.h
++++ mrxvt-0.5.2/src/rxvt.h
+@@ -488,15 +488,8 @@ typedef char* XPointer;
+ * turn is unsafe without checking. Untainted defines the type of data that is
+ * safe.
+ */
-#ifdef __GNUC__
-# define $tainted
-# define $untainted
--# define TAINTED $tainted
--# define UNTAINTED $untainted
+-# define TAINTED $tainted
+-# define UNTAINTED $untainted
-#else
-# define TAINTED
-# define UNTAINTED
diff --git a/packages/mrxvt/mrxvt_0.4.1.bb b/packages/mrxvt/mrxvt_0.4.1.bb
deleted file mode 100644
index 8991295902..0000000000
--- a/packages/mrxvt/mrxvt_0.4.1.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "MRXVT is a lightweight and powerful X terminal emulator based on aterm and rxvt"
-HOMEPAGE = "http://materm.sourceforge.net"
-AUTHOR = "Jimmy Zhou <jimmyzhou@users.sf.net>"
-LICENSE = "GPL"
-SECTION = "x11/applications"
-DEPENDS = "virtual/libx11 libxext libxpm jpeg libpng"
-PR = "r0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/materm/mrxvt-${PV}.tar.gz \
- file://fix-compile.patch;patch=1"
-
-inherit autotools
-
-EXTRA_OECONF = "--enable-everything --disable-debug"
diff --git a/packages/mrxvt/mrxvt_0.5.2.bb b/packages/mrxvt/mrxvt_0.5.2.bb
new file mode 100644
index 0000000000..9b1b4a4c24
--- /dev/null
+++ b/packages/mrxvt/mrxvt_0.5.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "MRXVT is a lightweight and powerful X terminal emulator based on aterm and rxvt"
+HOMEPAGE = "http://materm.sourceforge.net"
+AUTHOR = "Jimmy Zhou <jimmyzhou@users.sf.net>"
+LICENSE = "GPL"
+SECTION = "x11/applications"
+DEPENDS = "freetype fontconfig libxft virtual/libx11"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/materm/mrxvt-${PV}.tar.gz \
+ ${SOURCEFORGE_MIRROR}/materm/no_debug_x.patch;pnum=0;patch=1 \
+ file://fix-compile.patch;patch=1"
+
+inherit autotools
+
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-everything \
+ --disable-debug"
diff --git a/packages/mtd/mtd-utils-native_0.0.0+cvs20060223.bb b/packages/mtd/mtd-utils-native_0.0.0+cvs20060223.bb
deleted file mode 100644
index 6f9d71e10c..0000000000
--- a/packages/mtd/mtd-utils-native_0.0.0+cvs20060223.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require mtd-utils_${PV}.bb
-require mtd-utils-native.inc
diff --git a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20041113.patch b/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20041113.patch
deleted file mode 100644
index cb819e19be..0000000000
--- a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20041113.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- mtd/util/mkfs.jffs2.c~add-exclusion-to-mkfs-jffs2.patch
-+++ mtd/util/mkfs.jffs2.c
-@@ -89,7 +89,12 @@
- struct filesystem_entry *files; /* Only relevant to directories */
- };
-
-+struct ignorepath_entry {
-+ struct ignorepath_entry* next; /* Points to the next ignorepath element */
-+ char name[PATH_MAX]; /* Name of the entry */
-+};
-
-+static struct ignorepath_entry* ignorepath = 0;
- static int out_fd = -1;
- static char default_rootdir[] = ".";
- static char *rootdir = default_rootdir;
-@@ -363,6 +368,7 @@
- char *hpath, *tpath;
- struct dirent *dp, **namelist;
- struct filesystem_entry *entry;
-+ struct ignorepath_entry* element = ignorepath;
-
-
- if (lstat(hostpath, &sb)) {
-@@ -372,6 +378,15 @@
- entry = add_host_filesystem_entry(targetpath, hostpath,
- sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
-
-+ while ( element ) {
-+ if ( strcmp( element->name, hostpath ) == 0 ) {
-+ printf( "Note: ignoring directories below '%s'\n", hostpath );
-+ return entry;
-+ break;
-+ }
-+ element = element->next;
-+ }
-+
- n = scandir(hostpath, &namelist, 0, alphasort);
- if (n < 0) {
- perror_msg_and_die("opening directory %s", hostpath);
-@@ -1139,6 +1154,7 @@
- {"root", 1, NULL, 'r'},
- {"pagesize", 1, NULL, 's'},
- {"eraseblock", 1, NULL, 'e'},
-+ {"ignore", 1, NULL, 'i'},
- {"output", 1, NULL, 'o'},
- {"help", 0, NULL, 'h'},
- {"verbose", 0, NULL, 'v'},
-@@ -1180,6 +1196,7 @@
- " -L, --list-compressors Show the list of the avaiable compressors\n"
- " -t, --test-compression Call decompress and compare with the original (for test)\n"
- " -n, --no-cleanmarkers Don't add a cleanmarker to every eraseblock\n"
-+ " -i, --ignore=PATH Ignore sub directory and file tree below PATH when recursing over the file system\n"
- " -o, --output=FILE Output to FILE (default: stdout)\n"
- " -l, --little-endian Create a little-endian filesystem\n"
- " -b, --big-endian Create a big-endian filesystem\n"
-@@ -1202,13 +1219,14 @@
- struct stat sb;
- FILE *devtable = NULL;
- struct filesystem_entry *root;
-- char *compr_name = NULL;
-- int compr_prior = -1;
-+ char *compr_name = NULL;
-+ int compr_prior = -1;
-+ struct ignorepath_entry* element = ignorepath;
-
-- jffs2_compressors_init();
-+ jffs2_compressors_init();
-
- while ((opt = getopt_long(argc, argv,
-- "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:", long_options, &c)) >= 0)
-+ "D:d:r:s:i:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:", long_options, &c)) >= 0)
- {
- switch (opt) {
- case 'D':
-@@ -1231,6 +1249,27 @@
- page_size = strtol(optarg, NULL, 0);
- break;
-
-+ case 'i':
-+ printf( "Note: Adding '%s' to ignore Path\n", optarg );
-+ if ( !ignorepath ) {
-+ ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
-+ ignorepath->next = 0;
-+ strcpy( &ignorepath->name[0], optarg );
-+ } else {
-+ while ( element->next ) element = element->next;
-+ element->next = xmalloc( sizeof( struct ignorepath_entry ) );
-+ element->next->next = 0;
-+ strcpy( &element->next->name[0], optarg );
-+ }
-+ printf( "--------- Dumping ignore path list ----------------\n" );
-+ element=ignorepath;
-+ while ( element ) {
-+ printf( " * '%s'\n", &element->name[0] );
-+ element = element->next;
-+ }
-+ printf( "---------------------------------------------------\n" );
-+ break;
-+
- case 'o':
- if (out_fd != -1) {
- error_msg_and_die("output filename specified more than once");
diff --git a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20060131.patch b/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20060131.patch
deleted file mode 100644
index e24f395890..0000000000
--- a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-20060131.patch
+++ /dev/null
@@ -1,100 +0,0 @@
---- mtd/util/mkfs.jffs2.c~add-exclusion-to-mkfs-jffs2.patch
-+++ mtd/util/mkfs.jffs2.c
-@@ -92,7 +92,12 @@
- struct filesystem_entry *files; /* Only relevant to directories */
- };
-
--
-+struct ignorepath_entry {
-+ struct ignorepath_entry* next; /* Points to the next ignorepath element */
-+ char name[PATH_MAX]; /* Name of the entry */
-+};
-+
-+static struct ignorepath_entry* ignorepath = 0;
- static int out_fd = -1;
- static int in_fd = -1;
- static char default_rootdir[] = ".";
-@@ -367,7 +372,7 @@
- char *hpath, *tpath;
- struct dirent *dp, **namelist;
- struct filesystem_entry *entry;
--
-+ struct ignorepath_entry* element = ignorepath;
-
- if (lstat(hostpath, &sb)) {
- perror_msg_and_die("%s", hostpath);
-@@ -376,6 +381,15 @@
- entry = add_host_filesystem_entry(targetpath, hostpath,
- sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
-
-+ while ( element ) {
-+ if ( strcmp( element->name, targetpath ) == 0 ) {
-+ printf( "Note: ignoring directories below '%s'\n", targetpath );
-+ return entry;
-+ break;
-+ }
-+ element = element->next;
-+ }
-+
- n = scandir(hostpath, &namelist, 0, alphasort);
- if (n < 0) {
- perror_msg_and_die("opening directory %s", hostpath);
-@@ -1157,6 +1171,7 @@
- {"root", 1, NULL, 'r'},
- {"pagesize", 1, NULL, 's'},
- {"eraseblock", 1, NULL, 'e'},
-+ {"ignore", 1, NULL, 'I'},
- {"output", 1, NULL, 'o'},
- {"help", 0, NULL, 'h'},
- {"verbose", 0, NULL, 'v'},
-@@ -1199,6 +1214,7 @@
- " -L, --list-compressors Show the list of the avaiable compressors\n"
- " -t, --test-compression Call decompress and compare with the original (for test)\n"
- " -n, --no-eraseblock-headers Don't add a eraseblock header to every eraseblock\n"
-+ " -I, --ignore=PATH Ignore sub directory and file tree below PATH when recursing over the file system\n"
- " -o, --output=FILE Output to FILE (default: stdout)\n"
- " -l, --little-endian Create a little-endian filesystem\n"
- " -b, --big-endian Create a big-endian filesystem\n"
-@@ -1368,11 +1384,12 @@
- struct filesystem_entry *root;
- char *compr_name = NULL;
- int compr_prior = -1;
-+ struct ignorepath_entry* element = ignorepath;
-
- jffs2_compressors_init();
-
- while ((opt = getopt_long(argc, argv,
-- "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
-+ "D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
- {
- switch (opt) {
- case 'D':
-@@ -1395,6 +1412,28 @@
- page_size = strtol(optarg, NULL, 0);
- break;
-
-+ case 'I':
-+ printf( "Note: Adding '%s' to ignore Path\n", optarg );
-+ element = ignorepath;
-+ if ( !ignorepath ) {
-+ ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
-+ ignorepath->next = 0;
-+ strcpy( &ignorepath->name[0], optarg );
-+ } else {
-+ while ( element->next ) element = element->next;
-+ element->next = xmalloc( sizeof( struct ignorepath_entry ) );
-+ element->next->next = 0;
-+ strcpy( &element->next->name[0], optarg );
-+ }
-+ printf( "--------- Dumping ignore path list ----------------\n" );
-+ element = ignorepath;
-+ while ( element ) {
-+ printf( " * '%s'\n", &element->name[0] );
-+ element = element->next;
-+ }
-+ printf( "---------------------------------------------------\n" );
-+ break;
-+
- case 'o':
- if (out_fd != -1) {
- error_msg_and_die("output filename specified more than once");
diff --git a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2.patch b/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2.patch
deleted file mode 100644
index 3ac41280bb..0000000000
--- a/packages/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- mtd/util/mkfs.jffs2.c~add-exclusion-to-mkfs-jffs2.patch
-+++ mtd/util/mkfs.jffs2.c
-@@ -92,7 +92,12 @@
- struct filesystem_entry *files; /* Only relevant to directories */
- };
-
-+struct ignorepath_entry {
-+ struct ignorepath_entry* next; /* Points to the next ignorepath element */
-+ char name[PATH_MAX]; /* Name of the entry */
-+};
-
-+static struct ignorepath_entry* ignorepath = 0;
- static int out_fd = -1;
- static int in_fd = -1;
- static char default_rootdir[] = ".";
-@@ -367,6 +372,7 @@
- char *hpath, *tpath;
- struct dirent *dp, **namelist;
- struct filesystem_entry *entry;
-+ struct ignorepath_entry* element = ignorepath;
-
-
- if (lstat(hostpath, &sb)) {
-@@ -376,6 +382,15 @@
- entry = add_host_filesystem_entry(targetpath, hostpath,
- sb.st_uid, sb.st_gid, sb.st_mode, 0, parent);
-
-+ while ( element ) {
-+ if ( strcmp( element->name, targetpath ) == 0 ) {
-+ printf( "Note: ignoring directories below '%s'\n", targetpath );
-+ return entry;
-+ break;
-+ }
-+ element = element->next;
-+ }
-+
- n = scandir(hostpath, &namelist, 0, alphasort);
- if (n < 0) {
- perror_msg_and_die("opening directory %s", hostpath);
-@@ -1147,6 +1162,7 @@
- {"root", 1, NULL, 'r'},
- {"pagesize", 1, NULL, 's'},
- {"eraseblock", 1, NULL, 'e'},
-+ {"ignore", 1, NULL, 'I'},
- {"output", 1, NULL, 'o'},
- {"help", 0, NULL, 'h'},
- {"verbose", 0, NULL, 'v'},
-@@ -1189,6 +1205,7 @@
- " -L, --list-compressors Show the list of the avaiable compressors\n"
- " -t, --test-compression Call decompress and compare with the original (for test)\n"
- " -n, --no-cleanmarkers Don't add a cleanmarker to every eraseblock\n"
-+ " -I, --ignore=PATH Ignore sub directory and file tree below PATH when recursing over the file system\n"
- " -o, --output=FILE Output to FILE (default: stdout)\n"
- " -l, --little-endian Create a little-endian filesystem\n"
- " -b, --big-endian Create a big-endian filesystem\n"
-@@ -1349,11 +1366,12 @@
- struct filesystem_entry *root;
- char *compr_name = NULL;
- int compr_prior = -1;
-+ struct ignorepath_entry* element = ignorepath;
-
- jffs2_compressors_init();
-
- while ((opt = getopt_long(argc, argv,
-- "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
-+ "D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0)
- {
- switch (opt) {
- case 'D':
-@@ -1376,6 +1394,28 @@
- page_size = strtol(optarg, NULL, 0);
- break;
-
-+ case 'I':
-+ printf( "Note: Adding '%s' to ignore Path\n", optarg );
-+ element = ignorepath;
-+ if ( !ignorepath ) {
-+ ignorepath = xmalloc( sizeof( struct ignorepath_entry ) );
-+ ignorepath->next = 0;
-+ strcpy( &ignorepath->name[0], optarg );
-+ } else {
-+ while ( element->next ) element = element->next;
-+ element->next = xmalloc( sizeof( struct ignorepath_entry ) );
-+ element->next->next = 0;
-+ strcpy( &element->next->name[0], optarg );
-+ }
-+ printf( "--------- Dumping ignore path list ----------------\n" );
-+ element = ignorepath;
-+ while ( element ) {
-+ printf( " * '%s'\n", &element->name[0] );
-+ element = element->next;
-+ }
-+ printf( "---------------------------------------------------\n" );
-+ break;
-+
- case 'o':
- if (out_fd != -1) {
- error_msg_and_die("output filename specified more than once");
diff --git a/packages/mtd/mtd-utils/add_lzo.patch b/packages/mtd/mtd-utils/add_lzo.patch
deleted file mode 100644
index 9afd1ca46b..0000000000
--- a/packages/mtd/mtd-utils/add_lzo.patch
+++ /dev/null
@@ -1,220 +0,0 @@
-Add LZO support to mtd-utils to generate LZO compressed jffs2 images
-
-Unlike the kernel version, the standard lzo userspace library is used
-along with lzo1x_999_compress rather than the lzo1x_1_compress version
-since better compression ratios can be obtained (at no significant cost
-to decompression time).
-
-Signed-off-by: Richard Purdie <rpurdie@openedhand.com>
-
----
- Makefile | 3 -
- compr.c | 6 ++
- compr.h | 6 ++
- compr_lzo.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++
- include/linux/jffs2.h | 1
- 5 files changed, 135 insertions(+), 1 deletion(-)
-
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2007-03-01 11:57:58.000000000 +0000
-+++ git/Makefile 2007-03-01 11:58:01.000000000 +0000
-@@ -58,8 +58,9 @@ $(BUILDDIR)/mkfs.jffs2: $(BUILDDIR)/crc3
- $(BUILDDIR)/compr_rtime.o \
- $(BUILDDIR)/mkfs.jffs2.o \
- $(BUILDDIR)/compr_zlib.o \
-+ $(BUILDDIR)/compr_lzo.o \
- $(BUILDDIR)/compr.o
-- $(CC) $(LDFLAGS) -o $@ $^ -lz
-+ $(CC) $(LDFLAGS) -o $@ $^ -lz -llzo
-
- $(BUILDDIR)/flash_eraseall: $(BUILDDIR)/crc32.o $(BUILDDIR)/flash_eraseall.o
- $(CC) $(LDFLAGS) -o $@ $^
-Index: git/compr.c
-===================================================================
---- git.orig/compr.c 2007-03-01 11:57:58.000000000 +0000
-+++ git/compr.c 2007-03-01 11:58:01.000000000 +0000
-@@ -474,6 +474,9 @@ int jffs2_compressors_init(void)
- #ifdef CONFIG_JFFS2_RTIME
- jffs2_rtime_init();
- #endif
-+#ifdef CONFIG_JFFS2_LZO
-+ jffs2_lzo_init();
-+#endif
- return 0;
- }
-
-@@ -485,5 +488,8 @@ int jffs2_compressors_exit(void)
- #ifdef CONFIG_JFFS2_ZLIB
- jffs2_zlib_exit();
- #endif
-+#ifdef CONFIG_JFFS2_LZO
-+ jffs2_lzo_exit();
-+#endif
- return 0;
- }
-Index: git/compr.h
-===================================================================
---- git.orig/compr.h 2007-03-01 11:57:58.000000000 +0000
-+++ git/compr.h 2007-03-01 11:58:01.000000000 +0000
-@@ -21,11 +21,13 @@
-
- #define CONFIG_JFFS2_ZLIB
- #define CONFIG_JFFS2_RTIME
-+#define CONFIG_JFFS2_LZO
-
- #define JFFS2_RUBINMIPS_PRIORITY 10
- #define JFFS2_DYNRUBIN_PRIORITY 20
- #define JFFS2_RTIME_PRIORITY 50
- #define JFFS2_ZLIB_PRIORITY 60
-+#define JFFS2_LZO_PRIORITY 80
-
- #define JFFS2_COMPR_MODE_NONE 0
- #define JFFS2_COMPR_MODE_PRIORITY 1
-@@ -111,5 +113,9 @@ void jffs2_zlib_exit(void);
- int jffs2_rtime_init(void);
- void jffs2_rtime_exit(void);
- #endif
-+#ifdef CONFIG_JFFS2_LZO
-+int jffs2_lzo_init(void);
-+void jffs2_lzo_exit(void);
-+#endif
-
- #endif /* __JFFS2_COMPR_H__ */
-Index: git/compr_lzo.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/compr_lzo.c 2007-03-01 11:58:01.000000000 +0000
-@@ -0,0 +1,120 @@
-+/*
-+ * JFFS2 LZO Compression Interface.
-+ *
-+ * Copyright (C) 2007 Nokia Corporation. All rights reserved.
-+ *
-+ * Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * version 2 as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ *
-+ */
-+
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <asm/types.h>
-+#include <linux/jffs2.h>
-+#include <lzo1x.h>
-+#include "compr.h"
-+
-+extern int page_size;
-+
-+static void *lzo_mem;
-+static void *lzo_compress_buf;
-+
-+/*
-+ * Note about LZO compression.
-+ *
-+ * We want to use the _999_ compression routine which gives better compression
-+ * rates at the expense of time. Decompression time is unaffected. We might as
-+ * well use the standard lzo library routines for this but they will overflow
-+ * the destination buffer since they don't check the destination size.
-+ *
-+ * We therefore compress to a temporary buffer and copy if it will fit.
-+ *
-+ */
-+static int jffs2_lzo_cmpr(unsigned char *data_in, unsigned char *cpage_out,
-+ uint32_t *sourcelen, uint32_t *dstlen, void *model)
-+{
-+ uint32_t compress_size;
-+ int ret;
-+
-+ ret = lzo1x_999_compress(data_in, *sourcelen, lzo_compress_buf, &compress_size, lzo_mem);
-+
-+ if (ret != LZO_E_OK)
-+ return -1;
-+
-+ if (compress_size > *dstlen)
-+ return -1;
-+
-+ memcpy(cpage_out, lzo_compress_buf, compress_size);
-+ *dstlen = compress_size;
-+
-+ return 0;
-+}
-+
-+static int jffs2_lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
-+ uint32_t srclen, uint32_t destlen, void *model)
-+{
-+ int ret;
-+ uint32_t dl;
-+
-+ ret = lzo1x_decompress_safe(data_in,srclen,cpage_out,&dl,NULL);
-+
-+ if (ret != LZO_E_OK || dl != destlen)
-+ return -1;
-+
-+ return 0;
-+}
-+
-+static struct jffs2_compressor jffs2_lzo_comp = {
-+ .priority = JFFS2_LZO_PRIORITY,
-+ .name = "lzo",
-+ .compr = JFFS2_COMPR_LZO,
-+ .compress = &jffs2_lzo_cmpr,
-+ .decompress = &jffs2_lzo_decompress,
-+ .disabled = 0,
-+};
-+
-+int jffs2_lzo_init(void)
-+{
-+ int ret;
-+
-+ lzo_mem = malloc(LZO1X_999_MEM_COMPRESS);
-+ if (!lzo_mem)
-+ return -1;
-+
-+ /* Worse case LZO compression size from their FAQ */
-+ lzo_compress_buf = malloc(page_size + (page_size / 64) + 16 + 3);
-+ if (!lzo_compress_buf) {
-+ free(lzo_mem);
-+ return -1;
-+ }
-+
-+ ret = jffs2_register_compressor(&jffs2_lzo_comp);
-+ if (ret < 0) {
-+ free(lzo_compress_buf);
-+ free(lzo_mem);
-+ }
-+
-+ return ret;
-+}
-+
-+void jffs2_lzo_exit(void)
-+{
-+ jffs2_unregister_compressor(&jffs2_lzo_comp);
-+ free(lzo_compress_buf);
-+ free(lzo_mem);
-+}
-Index: git/include/linux/jffs2.h
-===================================================================
---- git.orig/include/linux/jffs2.h 2007-03-01 11:57:58.000000000 +0000
-+++ git/include/linux/jffs2.h 2007-03-01 11:58:01.000000000 +0000
-@@ -46,6 +46,7 @@
- #define JFFS2_COMPR_COPY 0x04
- #define JFFS2_COMPR_DYNRUBIN 0x05
- #define JFFS2_COMPR_ZLIB 0x06
-+#define JFFS2_COMPR_LZO 0x07
- /* Compatibility flags. */
- #define JFFS2_COMPAT_MASK 0xc000 /* What do to if an unknown nodetype is found */
- #define JFFS2_NODE_ACCURATE 0x2000
diff --git a/packages/mtd/mtd-utils/favour_lzo.patch b/packages/mtd/mtd-utils/favour_lzo.patch
deleted file mode 100644
index 9e55d5f4b3..0000000000
--- a/packages/mtd/mtd-utils/favour_lzo.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-Add a favourlzo compression mode to mtd-utils
-
-This allows lzo compression to be used in the cases where the
-compression ratio isn't quite as good zlib. This can make sense in
-certain use cases because LZO decompression is much faster than zlib.
-
-Signed-off-by: Richard Purdie <rpurdie@openedhand.com>
-
----
- compr.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++---
- compr.h | 1 +
- 2 files changed, 50 insertions(+), 3 deletions(-)
-
-Index: git/compr.c
-===================================================================
---- git.orig/compr.c 2007-03-01 11:58:01.000000000 +0000
-+++ git/compr.c 2007-03-01 11:58:09.000000000 +0000
-@@ -16,6 +16,8 @@
- #include <stdlib.h>
- #include <linux/jffs2.h>
-
-+#define FAVOUR_LZO_PERCENT 80
-+
- extern int page_size;
-
- /* LIST IMPLEMENTATION (from linux/list.h) */
-@@ -166,6 +168,33 @@ static void jffs2_decompression_test(str
- }
- }
-
-+/*
-+ * Return 1 to use this compression
-+ */
-+static int jffs2_is_best_compression(struct jffs2_compressor *this,
-+ struct jffs2_compressor *best, uint32_t size, uint32_t bestsize)
-+{
-+ switch (jffs2_compression_mode) {
-+ case JFFS2_COMPR_MODE_SIZE:
-+ if (bestsize > size)
-+ return 1;
-+ return 0;
-+ case JFFS2_COMPR_MODE_FAVOURLZO:
-+ if ((this->compr == JFFS2_COMPR_LZO) && (bestsize > size))
-+ return 1;
-+ if ((best->compr != JFFS2_COMPR_LZO) && (bestsize > size))
-+ return 1;
-+ if ((this->compr == JFFS2_COMPR_LZO) && (bestsize > (size * FAVOUR_LZO_PERCENT / 100)))
-+ return 1;
-+ if ((bestsize * FAVOUR_LZO_PERCENT / 100) > size)
-+ return 1;
-+
-+ return 0;
-+ }
-+ /* Shouldn't happen */
-+ return 0;
-+}
-+
- /* jffs2_compress:
- * @data: Pointer to uncompressed data
- * @cdata: Pointer to returned pointer to buffer for compressed data
-@@ -231,21 +260,29 @@ uint16_t jffs2_compress( unsigned char *
- }
- if (ret == JFFS2_COMPR_NONE) free(output_buf);
- break;
-+ case JFFS2_COMPR_MODE_FAVOURLZO:
- case JFFS2_COMPR_MODE_SIZE:
- orig_slen = *datalen;
- orig_dlen = *cdatalen;
- list_for_each_entry(this, &jffs2_compressor_list, list) {
-+ uint32_t needed_buf_size;
-+
-+ if (jffs2_compression_mode == JFFS2_COMPR_MODE_FAVOURLZO)
-+ needed_buf_size = orig_slen+jffs2_compression_check;
-+ else
-+ needed_buf_size = orig_dlen+jffs2_compression_check;
-+
- /* Skip decompress-only backwards-compatibility and disabled modules */
- if ((!this->compress)||(this->disabled))
- continue;
- /* Allocating memory for output buffer if necessary */
-- if ((this->compr_buf_size<orig_dlen+jffs2_compression_check)&&(this->compr_buf)) {
-+ if ((this->compr_buf_size < needed_buf_size) && (this->compr_buf)) {
- free(this->compr_buf);
- this->compr_buf_size=0;
- this->compr_buf=NULL;
- }
- if (!this->compr_buf) {
-- tmp_buf = malloc(orig_dlen+jffs2_compression_check);
-+ tmp_buf = malloc(needed_buf_size);
- if (!tmp_buf) {
- fprintf(stderr,"mkfs.jffs2: No memory for compressor allocation. (%d bytes)\n",orig_dlen);
- continue;
-@@ -265,7 +302,8 @@ uint16_t jffs2_compress( unsigned char *
- if (!compr_ret) {
- if (jffs2_compression_check)
- jffs2_decompression_test(this, data_in, this->compr_buf, *cdatalen, *datalen, this->compr_buf_size);
-- if ((!best_dlen)||(best_dlen>*cdatalen)) {
-+ if (((!best_dlen) || jffs2_is_best_compression(this, best, *cdatalen, best_dlen))
-+ && (*cdatalen < *datalen)) {
- best_dlen = *cdatalen;
- best_slen = *datalen;
- best = this;
-@@ -377,6 +415,9 @@ char *jffs2_stats(void)
- case JFFS2_COMPR_MODE_SIZE:
- act_buf += sprintf(act_buf,"size");
- break;
-+ case JFFS2_COMPR_MODE_FAVOURLZO:
-+ act_buf += sprintf(act_buf,"favourlzo");
-+ break;
- default:
- act_buf += sprintf(act_buf,"unkown");
- break;
-@@ -413,6 +454,11 @@ int jffs2_set_compression_mode_name(cons
- jffs2_compression_mode = JFFS2_COMPR_MODE_SIZE;
- return 0;
- }
-+ if (!strcmp("favourlzo", name)) {
-+ jffs2_compression_mode = JFFS2_COMPR_MODE_FAVOURLZO;
-+ return 0;
-+ }
-+
- return 1;
- }
-
-Index: git/compr.h
-===================================================================
---- git.orig/compr.h 2007-03-01 11:58:01.000000000 +0000
-+++ git/compr.h 2007-03-01 11:58:09.000000000 +0000
-@@ -32,6 +32,7 @@
- #define JFFS2_COMPR_MODE_NONE 0
- #define JFFS2_COMPR_MODE_PRIORITY 1
- #define JFFS2_COMPR_MODE_SIZE 2
-+#define JFFS2_COMPR_MODE_FAVOURLZO 3
-
- #define kmalloc(a,b) malloc(a)
- #define kfree(a) free(a)
diff --git a/packages/mtd/mtd-utils/fix-ignoreerrors-20060131.patch b/packages/mtd/mtd-utils/fix-ignoreerrors-20060131.patch
deleted file mode 100644
index 8266a37c46..0000000000
--- a/packages/mtd/mtd-utils/fix-ignoreerrors-20060131.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- mtd/util/nanddump.c.orig 2006-01-30 21:19:22.000000000 +0100
-+++ mtd/util/nanddump.c 2006-01-30 21:19:24.000000000 +0100
-@@ -224,7 +224,7 @@
- }
- }
-
-- if (badblock) {
-+ if (badblock && !ignoreerrors) {
- if (omitbad)
- continue;
- memset (readbuf, 0xff, bs);
-@@ -259,7 +259,7 @@
- if (omitoob)
- continue;
-
-- if (badblock) {
-+ if (badblock && !ignoreerrors) {
- memset (readbuf, 0xff, meminfo.oobsize);
- } else {
- /* Read OOB data and exit on failure */
diff --git a/packages/mtd/mtd-utils/fix-ignoreerrors.patch b/packages/mtd/mtd-utils/fix-ignoreerrors.patch
deleted file mode 100644
index b1f702a316..0000000000
--- a/packages/mtd/mtd-utils/fix-ignoreerrors.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- mtd/util/nanddump.c.orig 2005-12-30 19:07:39.000000000 +0100
-+++ mtd/util/nanddump.c 2005-12-30 19:08:53.000000000 +0100
-@@ -224,7 +224,7 @@
- }
- }
-
-- if (badblock) {
-+ if (badblock && !ignoreerrors) {
- if (omitbad)
- continue;
- memset (readbuf, 0xff, bs);
-@@ -259,7 +259,7 @@
- if (omitoob)
- continue;
-
-- if (badblock) {
-+ if (badblock && !ignoreerrors) {
- memset (readbuf, 0xff, meminfo.oobsize);
- } else {
- /* Read OOB data and exit on failure */
diff --git a/packages/mtd/mtd-utils/lzo_1x.patch b/packages/mtd/mtd-utils/lzo_1x.patch
new file mode 100644
index 0000000000..b882d9f504
--- /dev/null
+++ b/packages/mtd/mtd-utils/lzo_1x.patch
@@ -0,0 +1,26 @@
+Index: git/Makefile
+===================================================================
+--- git.orig/Makefile
++++ git/Makefile
+@@ -60,7 +60,7 @@ $(BUILDDIR)/mkfs.jffs2: $(BUILDDIR)/crc3
+ $(BUILDDIR)/compr_zlib.o \
+ $(BUILDDIR)/compr_lzo.o \
+ $(BUILDDIR)/compr.o
+- $(CC) $(LDFLAGS) -o $@ $^ -lz -llzo2
++ $(CC) $(LDFLAGS) -o $@ $^ -lz -llzo
+
+ $(BUILDDIR)/flash_eraseall: $(BUILDDIR)/crc32.o $(BUILDDIR)/flash_eraseall.o
+ $(CC) $(LDFLAGS) -o $@ $^
+Index: git/compr_lzo.c
+===================================================================
+--- git.orig/compr_lzo.c
++++ git/compr_lzo.c
+@@ -26,7 +26,7 @@
+ #include <string.h>
+ #include <asm/types.h>
+ #include <linux/jffs2.h>
+-#include <lzo/lzo1x.h>
++#include <lzo1x.h>
+ #include "compr.h"
+
+ extern int page_size;
diff --git a/packages/mtd/mtd-utils_0.0.0+cvs20060223.bb b/packages/mtd/mtd-utils_0.0.0+cvs20060223.bb
deleted file mode 100644
index 96199f1602..0000000000
--- a/packages/mtd/mtd-utils_0.0.0+cvs20060223.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "Tools for managing memory technology devices."
-SECTION = "base"
-DEPENDS = "zlib"
-HOMEPAGE = "http://www.linux-mtd.infradead.org/"
-LICENSE = "GPLv2"
-PR = "r0"
-SRCDATE = "20060223"
-
-SRC_URI = "cvs://anoncvs:anoncvs@cvs.infradead.org/home/cvs;module=mtd \
- file://add-exclusion-to-mkfs-jffs2-20060131.patch;patch=1 \
- file://fix-ignoreerrors-20060131.patch;patch=1"
-S = "${WORKDIR}/mtd/"
-
-CFLAGS_prepend = "-I${S}/include "
-
-do_compile () {
- oe_runmake -C util ${mtd_utils}
-}
-
-do_stage () {
- install -d ${STAGING_INCDIR}/mtd
- for f in ${S}/include/mtd/*.h; do
- install -m 0644 $f ${STAGING_INCDIR}/mtd/
- done
- for binary in ${mtd_utils}; do
- install -m 0755 util/$binary ${STAGING_BINDIR}
- done
-}
-
-mtd_utils = "ftl_format flash_erase flash_eraseall nanddump doc_loadbios \
- mkfs.jffs ftl_check mkfs.jffs2 flash_lock flash_unlock flash_info mtd_debug \
- flashcp nandwrite jffs2dump sumtool"
-
-do_install () {
- install -d ${D}${bindir}
- for binary in ${mtd_utils}; do
- install -m 0755 util/$binary ${D}${bindir}
- done
-}
diff --git a/packages/mtd/mtd-utils_1.0.0+git.bb b/packages/mtd/mtd-utils_1.0.0+git.bb
index 62a2c0630b..cfbd38c714 100644
--- a/packages/mtd/mtd-utils_1.0.0+git.bb
+++ b/packages/mtd/mtd-utils_1.0.0+git.bb
@@ -3,13 +3,12 @@ SECTION = "base"
DEPENDS = "zlib lzo"
HOMEPAGE = "http://www.linux-mtd.infradead.org/"
LICENSE = "GPLv2"
-PR = "r2"
+PR = "r4"
SRC_URI = "git://git.infradead.org/mtd-utils.git;protocol=git;tag=master \
- file://add_lzo.patch;patch=1 \
- file://favour_lzo.patch;patch=1 \
file://add-exclusion-to-mkfs-jffs2-git.patch;patch=1 \
- file://fix-ignoreerrors-git.patch;patch=1"
+ file://fix-ignoreerrors-git.patch;patch=1 \
+ file://lzo_1x.patch;patch=1"
S = "${WORKDIR}/git/"
diff --git a/packages/musicbrainz/libmusicbrainz_2.1.2.bb b/packages/musicbrainz/libmusicbrainz_2.1.2.bb
deleted file mode 100644
index 43632d8670..0000000000
--- a/packages/musicbrainz/libmusicbrainz_2.1.2.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. The library allows you to access the data held on the MusicBrainz server."
-HOMEPAGE = "http://musicbrainz.org"
-LICENSE = "LGPL"
-DEPENDS = "expat"
-
-SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-2.1.2.tar.gz"
-
-inherit autotools pkgconfig
-
-do_stage() {
-autotools_stage_all
-}
-
-
-
diff --git a/packages/musicbrainz/libmusicbrainz_2.1.4.bb b/packages/musicbrainz/libmusicbrainz_2.1.4.bb
new file mode 100644
index 0000000000..7ab0997218
--- /dev/null
+++ b/packages/musicbrainz/libmusicbrainz_2.1.4.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. \
+It allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPL"
+DEPENDS = "expat"
+
+SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/musicbrainz/libmusicbrainz_3.0.1.bb b/packages/musicbrainz/libmusicbrainz_3.0.1.bb
new file mode 100644
index 0000000000..51717f052d
--- /dev/null
+++ b/packages/musicbrainz/libmusicbrainz_3.0.1.bb
@@ -0,0 +1,16 @@
+DEFAULT_PREFERENCE = "-1"
+
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. \
+It allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPL"
+DEPENDS = "expat"
+
+SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/musicpd/gmpc_svn.bb b/packages/musicpd/gmpc_svn.bb
index fbaea3e5f2..72fd3af1b6 100644
--- a/packages/musicpd/gmpc_svn.bb
+++ b/packages/musicpd/gmpc_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "GTK+ Frontend for mpd"
HOMEPAGE = "http://www.musicpd.org/gmpc.shtml"
SECTION = "x11/multimedia"
LICENSE = "GPLv2"
-DEPENDS = "libmpd gtk+ libglade gnome-vfs gob2"
+DEPENDS = "libmpd gtk+ libglade gnome-vfs gob2 curl"
SRCDATE = "20070120"
PV = "0.13.0+svn${SRCDATE}"
diff --git a/packages/mutt/mutt-1.5.15/.mtn2git_empty b/packages/mutt/mutt-1.5.15/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mutt/mutt-1.5.15/.mtn2git_empty
diff --git a/packages/mutt/mutt-1.5.15/makedoc.patch b/packages/mutt/mutt-1.5.15/makedoc.patch
new file mode 100644
index 0000000000..275c325769
--- /dev/null
+++ b/packages/mutt/mutt-1.5.15/makedoc.patch
@@ -0,0 +1,26 @@
+Index: mutt-1.5.15/makedoc.c
+===================================================================
+--- mutt-1.5.15.orig/makedoc.c 2007-04-01 22:58:56.000000000 +0100
++++ mutt-1.5.15/makedoc.c 2007-04-19 09:33:17.000000000 +0100
+@@ -49,7 +49,7 @@
+ #ifndef HAVE_STRERROR
+ #ifndef STDC_HEADERS
+ extern int sys_nerr;
+-extern char *sys_errlist[];
++extern __const char *__const sys_errlist[];
+ #endif
+
+ #define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
+Index: mutt-1.5.15/Makefile.am
+===================================================================
+--- mutt-1.5.15.orig/Makefile.am 2007-04-19 09:33:30.000000000 +0100
++++ mutt-1.5.15/Makefile.am 2007-04-19 09:33:54.000000000 +0100
+@@ -49,6 +49,8 @@
+ # @rm -rf makedoc
+ # $(HOST_CC) $(AM_CFLAGS) $(LDFLAGS) $(makedoc_LDFLAGS) $(makedoc_OBJECTS) $(makedoc_LDADD) -o makedoc
+
++makedoc : $(makedoc_SOURCES)
++
+ DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \
+ -DHAVE_CONFIG_H=1
diff --git a/packages/mutt/mutt-1.5.15/patch-1.5.15.sidebar.20070408.txt b/packages/mutt/mutt-1.5.15/patch-1.5.15.sidebar.20070408.txt
new file mode 100644
index 0000000000..a2f7810ad8
--- /dev/null
+++ b/packages/mutt/mutt-1.5.15/patch-1.5.15.sidebar.20070408.txt
@@ -0,0 +1,1347 @@
+Index: mutt-1.5.15/buffy.c
+===================================================================
+--- mutt-1.5.15.orig/buffy.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/buffy.c 2007-04-18 09:28:14.000000000 +0100
+@@ -259,7 +259,7 @@
+ char path[_POSIX_PATH_MAX];
+ struct stat contex_sb;
+ time_t t;
+-
++ CONTEXT *ctx;
+ #ifdef USE_IMAP
+ /* update postponed count as well, on force */
+ if (force)
+@@ -297,6 +297,8 @@
+
+ for (tmp = Incoming; tmp; tmp = tmp->next)
+ {
++ if ( tmp->new == 1 )
++ tmp->has_new = 1;
+ #ifdef USE_IMAP
+ if (tmp->magic != M_IMAP)
+ #endif
+@@ -354,48 +356,108 @@
+ case M_MBOX:
+ case M_MMDF:
+
+- if (STAT_CHECK)
++ {
++ if (STAT_CHECK || tmp->msgcount == 0)
+ {
+- BuffyCount++;
+- tmp->new = 1;
++ BUFFY b = *tmp;
++ int msgcount = 0;
++ int msg_unread = 0;
++ /* parse the mailbox, to see how much mail there is */
++ ctx = mx_open_mailbox( tmp->path, M_READONLY | M_QUIET | M_NOSORT | M_PEEK, NULL);
++ if(ctx)
++ {
++ msgcount = ctx->msgcount;
++ msg_unread = ctx->unread;
++ mx_close_mailbox(ctx, 0);
++ }
++ *tmp = b;
++ tmp->msgcount = msgcount;
++ tmp->msg_unread = msg_unread;
++ if(STAT_CHECK) {
++ tmp->has_new = tmp->new = 1;
++ BuffyCount++;
++ }
+ }
+ else if (option(OPTCHECKMBOXSIZE))
+ {
+ /* some other program has deleted mail from the folder */
+ tmp->size = (long) sb.st_size;
+ }
+- if (tmp->newly_created &&
+- (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime))
+- tmp->newly_created = 0;
+-
+- break;
++ if (tmp->newly_created &&
++ (sb.st_ctime != sb.st_mtime || sb.st_ctime != sb.st_atime))
++ tmp->newly_created = 0;
++ }
++ break;
+
+ case M_MAILDIR:
+
++ /* count new message */
+ snprintf (path, sizeof (path), "%s/new", tmp->path);
+ if ((dirp = opendir (path)) == NULL)
+ {
+ tmp->magic = 0;
+ break;
+ }
++ tmp->msgcount = 0;
++ tmp->msg_unread = 0;
+ while ((de = readdir (dirp)) != NULL)
+ {
+ char *p;
+ if (*de->d_name != '.' &&
+ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
+ {
+- /* one new and undeleted message is enough */
+- BuffyCount++;
+- tmp->new = 1;
+- break;
++ tmp->has_new = tmp->new = 1;
++ tmp->msgcount++;
++ tmp->msg_unread++;
++ }
++ }
++ if(tmp->msg_unread)
++ BuffyCount++;
++
++ closedir (dirp);
++
++ /*
++ * count read messages (for folderlist (sidebar) we also need to count
++ * messages in cur so that we the total number of messages
++ */
++ snprintf (path, sizeof (path), "%s/cur", tmp->path);
++ if ((dirp = opendir (path)) == NULL)
++ {
++ tmp->magic = 0;
++ break;
++ }
++ while ((de = readdir (dirp)) != NULL)
++ {
++ char *p;
++ if (*de->d_name != '.' &&
++ (!(p = strstr (de->d_name, ":2,")) || !strchr (p + 3, 'T')))
++ {
++ tmp->msgcount++;
+ }
+ }
+ closedir (dirp);
+ break;
+
+ case M_MH:
+- if ((tmp->new = mh_buffy (tmp->path)) > 0)
+- BuffyCount++;
++ {
++ DIR *dp;
++ struct dirent *de;
++ if ((tmp->new = mh_buffy (tmp->path)) > 0)
++ BuffyCount++;
++
++ if ((dp = opendir (path)) == NULL)
++ break;
++ tmp->msgcount = 0;
++ while ((de = readdir (dp)))
++ {
++ if (mh_valid_message (de->d_name))
++ {
++ tmp->msgcount++;
++ tmp->has_new = tmp->new = 1;
++ }
++ }
++ closedir (dp);
++ }
+ break;
+ }
+ }
+Index: mutt-1.5.15/buffy.h
+===================================================================
+--- mutt-1.5.15.orig/buffy.h 2007-04-01 22:58:55.000000000 +0100
++++ mutt-1.5.15/buffy.h 2007-04-18 09:28:14.000000000 +0100
+@@ -25,7 +25,11 @@
+ char *path;
+ long size;
+ struct buffy_t *next;
++ struct buffy_t *prev;
+ short new; /* mailbox has new mail */
++ short has_new; /* set it new if new and not read */
++ int msgcount; /* total number of messages */
++ int msg_unread; /* number of unread messages */
+ short notified; /* user has been notified */
+ short magic; /* mailbox type */
+ short newly_created; /* mbox or mmdf just popped into existence */
+Index: mutt-1.5.15/color.c
+===================================================================
+--- mutt-1.5.15.orig/color.c 2007-04-01 22:58:55.000000000 +0100
++++ mutt-1.5.15/color.c 2007-04-18 09:28:14.000000000 +0100
+@@ -93,6 +93,7 @@
+ { "bold", MT_COLOR_BOLD },
+ { "underline", MT_COLOR_UNDERLINE },
+ { "index", MT_COLOR_INDEX },
++ { "sidebar_new", MT_COLOR_NEW },
+ { NULL, 0 }
+ };
+
+Index: mutt-1.5.15/compose.c
+===================================================================
+--- mutt-1.5.15.orig/compose.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/compose.c 2007-04-18 09:32:54.000000000 +0100
+@@ -80,7 +80,7 @@
+
+ #define HDR_XOFFSET 14
+ #define TITLE_FMT "%14s" /* Used for Prompts, which are ASCII */
+-#define W (COLS - HDR_XOFFSET)
++#define W (COLS - HDR_XOFFSET - SidebarWidth)
+
+ static char *Prompts[] =
+ {
+@@ -146,16 +146,16 @@
+ if ((WithCrypto & APPLICATION_PGP) && (WithCrypto & APPLICATION_SMIME))
+ {
+ if (!msg->security)
+- mvaddstr (HDR_CRYPT, 0, " Security: ");
++ mvaddstr (HDR_CRYPT, SidebarWidth, " Security: ");
+ else if (msg->security & APPLICATION_SMIME)
+- mvaddstr (HDR_CRYPT, 0, " S/MIME: ");
++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: ");
+ else if (msg->security & APPLICATION_PGP)
+- mvaddstr (HDR_CRYPT, 0, " PGP: ");
++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: ");
+ }
+ else if ((WithCrypto & APPLICATION_SMIME))
+- mvaddstr (HDR_CRYPT, 0, " S/MIME: ");
++ mvaddstr (HDR_CRYPT, SidebarWidth, " S/MIME: ");
+ else if ((WithCrypto & APPLICATION_PGP))
+- mvaddstr (HDR_CRYPT, 0, " PGP: ");
++ mvaddstr (HDR_CRYPT, SidebarWidth, " PGP: ");
+ else
+ return;
+
+@@ -179,7 +179,7 @@
+ }
+ clrtoeol ();
+
+- move (HDR_CRYPTINFO, 0);
++ move (HDR_CRYPTINFO, SidebarWidth);
+ clrtoeol ();
+ if ((WithCrypto & APPLICATION_PGP)
+ && msg->security & APPLICATION_PGP && msg->security & SIGN)
+@@ -195,7 +195,7 @@
+ && (msg->security & ENCRYPT)
+ && SmimeCryptAlg
+ && *SmimeCryptAlg) {
+- mvprintw (HDR_CRYPTINFO, 40, "%s%s", _("Encrypt with: "),
++ mvprintw (HDR_CRYPTINFO, SidebarWidth + 40, "%s%s", _("Encrypt with: "),
+ NONULL(SmimeCryptAlg));
+ off = 20;
+ }
+@@ -209,7 +209,7 @@
+ int c;
+ char *t;
+
+- mvaddstr (HDR_MIX, 0, " Mix: ");
++ mvaddstr (HDR_MIX, SidebarWidth, " Mix: ");
+
+ if (!chain)
+ {
+@@ -224,7 +224,7 @@
+ if (t && t[0] == '0' && t[1] == '\0')
+ t = "<random>";
+
+- if (c + mutt_strlen (t) + 2 >= COLS)
++ if (c + mutt_strlen (t) + 2 >= COLS - SidebarWidth)
+ break;
+
+ addstr (NONULL(t));
+@@ -276,7 +276,7 @@
+
+ buf[0] = 0;
+ rfc822_write_address (buf, sizeof (buf), addr, 1);
+- mvprintw (line, 0, TITLE_FMT, Prompts[line - 1]);
++ mvprintw (line, SidebarWidth, TITLE_FMT, Prompts[line - 1]);
+ mutt_paddstr (W, buf);
+ }
+
+@@ -294,21 +294,21 @@
+ }
+ else
+ {
+- mvprintw (HDR_TO, 0, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]);
++ mvprintw (HDR_TO, SidebarWidth, TITLE_FMT , Prompts[HDR_NEWSGROUPS - 1]);
+ mutt_paddstr (W, NONULL (msg->env->newsgroups));
+- mvprintw (HDR_CC, 0, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]);
++ mvprintw (HDR_CC, SidebarWidth, TITLE_FMT , Prompts[HDR_FOLLOWUPTO - 1]);
+ mutt_paddstr (W, NONULL (msg->env->followup_to));
+ if (option (OPTXCOMMENTTO))
+ {
+- mvprintw (HDR_BCC, 0, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]);
++ mvprintw (HDR_BCC, SidebarWidth, TITLE_FMT , Prompts[HDR_XCOMMENTTO - 1]);
+ mutt_paddstr (W, NONULL (msg->env->x_comment_to));
+ }
+ }
+ #endif
+- mvprintw (HDR_SUBJECT, 0, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
++ mvprintw (HDR_SUBJECT, SidebarWidth, TITLE_FMT, Prompts[HDR_SUBJECT - 1]);
+ mutt_paddstr (W, NONULL (msg->env->subject));
+ draw_envelope_addr (HDR_REPLYTO, msg->env->reply_to);
+- mvprintw (HDR_FCC, 0, TITLE_FMT, Prompts[HDR_FCC - 1]);
++ mvprintw (HDR_FCC, SidebarWidth, TITLE_FMT, Prompts[HDR_FCC - 1]);
+ mutt_paddstr (W, fcc);
+
+ if (WithCrypto)
+@@ -319,7 +319,7 @@
+ #endif
+
+ SETCOLOR (MT_COLOR_STATUS);
+- mvaddstr (HDR_ATTACH - 1, 0, _("-- Attachments"));
++ mvaddstr (HDR_ATTACH - 1, SidebarWidth, _("-- Attachments"));
+ BKGDSET (MT_COLOR_STATUS);
+ clrtoeol ();
+
+@@ -357,7 +357,7 @@
+ /* redraw the expanded list so the user can see the result */
+ buf[0] = 0;
+ rfc822_write_address (buf, sizeof (buf), *addr, 1);
+- move (line, HDR_XOFFSET);
++ move (line, HDR_XOFFSET+SidebarWidth);
+ mutt_paddstr (W, buf);
+
+ return 0;
+@@ -687,7 +687,7 @@
+ if (mutt_get_field ("Subject: ", buf, sizeof (buf), 0) == 0)
+ {
+ mutt_str_replace (&msg->env->subject, buf);
+- move (HDR_SUBJECT, HDR_XOFFSET);
++ move (HDR_SUBJECT, HDR_XOFFSET + SidebarWidth);
+ clrtoeol ();
+ if (msg->env->subject)
+ mutt_paddstr (W, msg->env->subject);
+@@ -704,7 +704,7 @@
+ {
+ strfcpy (fcc, buf, _POSIX_PATH_MAX);
+ mutt_pretty_mailbox (fcc);
+- move (HDR_FCC, HDR_XOFFSET);
++ move (HDR_FCC, HDR_XOFFSET + SidebarWidth);
+ mutt_paddstr (W, fcc);
+ fccSet = 1;
+ }
+Index: mutt-1.5.15/curs_main.c
+===================================================================
+--- mutt-1.5.15.orig/curs_main.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/curs_main.c 2007-04-18 09:28:14.000000000 +0100
+@@ -30,6 +30,7 @@
+ #include "sort.h"
+ #include "buffy.h"
+ #include "mx.h"
++#include "sidebar.h"
+
+ #ifdef USE_POP
+ #include "pop.h"
+@@ -555,8 +556,13 @@
+ menu->redraw |= REDRAW_STATUS;
+ if (do_buffy_notify)
+ {
+- if (mutt_buffy_notify () && option (OPTBEEPNEW))
+- beep ();
++ if (mutt_buffy_notify ())
++ {
++ menu->redraw |= REDRAW_FULL;
++ if (option (OPTBEEPNEW))
++ beep ();
++ }
++
+ }
+ else
+ do_buffy_notify = 1;
+@@ -568,6 +574,7 @@
+ if (menu->redraw & REDRAW_FULL)
+ {
+ menu_redraw_full (menu);
++ draw_sidebar(menu->menu);
+ mutt_show_error ();
+ }
+
+@@ -590,10 +597,13 @@
+
+ if (menu->redraw & REDRAW_STATUS)
+ {
++ DrawFullLine = 1;
+ menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
++ DrawFullLine = 0;
+ CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES-2);
+ SETCOLOR (MT_COLOR_STATUS);
+ BKGDSET (MT_COLOR_STATUS);
++ set_buffystats(Context);
+ mutt_paddstr (COLS, buf);
+ SETCOLOR (MT_COLOR_NORMAL);
+ BKGDSET (MT_COLOR_NORMAL);
+@@ -607,7 +617,7 @@
+ menu->oldcurrent = -1;
+
+ if (option (OPTARROWCURSOR))
+- move (menu->current - menu->top + menu->offset, 2);
++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2);
+ else if (option (OPTBRAILLEFRIENDLY))
+ move (menu->current - menu->top + menu->offset, 0);
+ else
+@@ -1214,6 +1224,7 @@
+ menu->redraw = REDRAW_FULL;
+ break;
+
++ case OP_SIDEBAR_OPEN:
+ case OP_MAIN_CHANGE_FOLDER:
+ case OP_MAIN_CHANGE_FOLDER_READONLY:
+ #ifdef USE_NNTP
+@@ -1254,7 +1265,11 @@
+ #endif
+ mutt_buffy (buf, sizeof (buf));
+
+- if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1)
++ if ( op == OP_SIDEBAR_OPEN ) {
++ if(!CurBuffy)
++ break;
++ strncpy( buf, CurBuffy->path, sizeof(buf) );
++ } else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1)
+ {
+ if (menu->menu == MENU_PAGER)
+ {
+@@ -1279,6 +1294,7 @@
+ else
+ #endif
+ mutt_expand_path (buf, sizeof (buf));
++ set_curbuffy(buf);
+ if (mx_get_magic (buf) <= 0)
+ {
+ mutt_error (_("%s is not a mailbox."), buf);
+@@ -2424,6 +2440,12 @@
+ mutt_what_key();
+ break;
+
++ case OP_SIDEBAR_SCROLL_UP:
++ case OP_SIDEBAR_SCROLL_DOWN:
++ case OP_SIDEBAR_NEXT:
++ case OP_SIDEBAR_PREV:
++ scroll_sidebar(op, menu->menu);
++ break;
+ default:
+ if (menu->menu == MENU_MAIN)
+ km_error_key (MENU_MAIN);
+Index: mutt-1.5.15/flags.c
+===================================================================
+--- mutt-1.5.15.orig/flags.c 2007-04-01 22:58:55.000000000 +0100
++++ mutt-1.5.15/flags.c 2007-04-18 09:28:14.000000000 +0100
+@@ -22,8 +22,10 @@
+
+ #include "mutt.h"
+ #include "mutt_curses.h"
++#include "mutt_menu.h"
+ #include "sort.h"
+ #include "mx.h"
++#include "sidebar.h"
+
+ #ifdef USE_IMAP
+ #include "imap_private.h"
+@@ -251,6 +253,7 @@
+ */
+ if (h->searched && (changed != h->changed || deleted != ctx->deleted || tagged != ctx->tagged || flagged != ctx->flagged))
+ h->searched = 0;
++ draw_sidebar(0);
+ }
+
+ void mutt_tag_set_flag (int flag, int bf)
+Index: mutt-1.5.15/functions.h
+===================================================================
+--- mutt-1.5.15.orig/functions.h 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/functions.h 2007-04-18 09:28:14.000000000 +0100
+@@ -186,6 +186,11 @@
+ { "decrypt-save", OP_DECRYPT_SAVE, NULL },
+
+
++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL },
++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL },
++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL },
++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL },
++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL },
+ { NULL, 0, NULL }
+ };
+
+@@ -293,6 +298,11 @@
+ { "decrypt-save", OP_DECRYPT_SAVE, NULL },
+
+
++ { "sidebar-scroll-up", OP_SIDEBAR_SCROLL_UP, NULL },
++ { "sidebar-scroll-down", OP_SIDEBAR_SCROLL_DOWN, NULL },
++ { "sidebar-next", OP_SIDEBAR_NEXT, NULL },
++ { "sidebar-prev", OP_SIDEBAR_PREV, NULL },
++ { "sidebar-open", OP_SIDEBAR_OPEN, NULL },
+ { NULL, 0, NULL }
+ };
+
+Index: mutt-1.5.15/globals.h
+===================================================================
+--- mutt-1.5.15.orig/globals.h 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/globals.h 2007-04-18 09:28:14.000000000 +0100
+@@ -126,6 +126,7 @@
+ WHERE char *SendCharset;
+ WHERE char *Sendmail;
+ WHERE char *Shell;
++WHERE char *SidebarDelim;
+ WHERE char *Signature;
+ WHERE char *SimpleSearch;
+ #if USE_SMTP
+@@ -222,6 +223,9 @@
+ WHERE short ScoreThresholdRead;
+ WHERE short ScoreThresholdFlag;
+
++WHERE struct buffy_t *CurBuffy INITVAL(0);
++WHERE short DrawFullLine INITVAL(0);
++WHERE short SidebarWidth;
+ #ifdef USE_IMAP
+ WHERE short ImapKeepalive;
+ #endif
+Index: mutt-1.5.15/init.h
+===================================================================
+--- mutt-1.5.15.orig/init.h 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/init.h 2007-04-18 09:28:14.000000000 +0100
+@@ -1614,6 +1614,22 @@
+ ** If ``no'', never attempt to verify cryptographic signatures.
+ ** (Crypto only)
+ */
++ {"sidebar_delim", DT_STR, R_BOTH, UL &SidebarDelim, "|"},
++ /*
++ ** .pp
++ ** This specifies the delimiter between the sidebar (if visible) and
++ ** other screens.
++ */
++ { "sidebar_visible", DT_BOOL, R_BOTH, OPTSIDEBAR, 0 },
++ /*
++ ** .pp
++ ** This specifies whether or not to show sidebar (left-side list of folders).
++ */
++ { "sidebar_width", DT_NUM, R_BOTH, UL &SidebarWidth, 0 },
++ /*
++ ** .pp
++ ** The width of the sidebar.
++ */
+ { "smime_is_default", DT_BOOL, R_NONE, OPTSMIMEISDEFAULT, 0},
+ /*
+ ** .pp
+Index: mutt-1.5.15/mailbox.h
+===================================================================
+--- mutt-1.5.15.orig/mailbox.h 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/mailbox.h 2007-04-18 09:28:14.000000000 +0100
+@@ -27,6 +27,7 @@
+ #define M_NEWFOLDER (1<<4) /* create a new folder - same as M_APPEND, but uses
+ * safe_fopen() for mbox-style folders.
+ */
++#define M_PEEK (1<<5) /* revert atime back after taking a look (if applicable) */
+
+ /* mx_open_new_message() */
+ #define M_ADD_FROM 1 /* add a From_ line */
+Index: mutt-1.5.15/Makefile.am
+===================================================================
+--- mutt-1.5.15.orig/Makefile.am 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/Makefile.am 2007-04-18 09:28:14.000000000 +0100
+@@ -29,7 +29,8 @@
+ score.c send.c sendlib.c signal.c sort.c \
+ status.c system.c thread.c charset.c history.c lib.c \
+ muttlib.c editmsg.c mbyte.c \
+- url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h
++ url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h \
++ sidebar.c
+
+ mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
+ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS)
+Index: mutt-1.5.15/Makefile.in
+===================================================================
+--- mutt-1.5.15.orig/Makefile.in 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/Makefile.in 2007-04-18 09:28:14.000000000 +0100
+@@ -91,7 +91,8 @@
+ thread.$(OBJEXT) charset.$(OBJEXT) history.$(OBJEXT) \
+ lib.$(OBJEXT) muttlib.$(OBJEXT) editmsg.$(OBJEXT) \
+ mbyte.$(OBJEXT) url.$(OBJEXT) ascii.$(OBJEXT) \
+- mutt_idna.$(OBJEXT) crypt-mod.$(OBJEXT)
++ mutt_idna.$(OBJEXT) crypt-mod.$(OBJEXT) \
++ sidebar.$(OBJEXT)
+ mutt_OBJECTS = $(am_mutt_OBJECTS)
+ am__DEPENDENCIES_1 =
+ am_mutt_dotlock_OBJECTS = mutt_dotlock.$(OBJEXT)
+@@ -312,7 +313,8 @@
+ score.c send.c sendlib.c signal.c sort.c \
+ status.c system.c thread.c charset.c history.c lib.c \
+ muttlib.c editmsg.c mbyte.c \
+- url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h
++ url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h \
++ sidebar.c
+
+ mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
+ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS)
+@@ -348,7 +350,7 @@
+ makedoc.c makedoc-defs.h stamp-doc-rc README.SSL smime.h \
+ muttbug pgppacket.h depcomp ascii.h BEWARE PATCHES patchlist.sh \
+ ChangeLog ChangeLog.old mkchangelog.sh cvslog2changelog.pl mutt_idna.h \
+- snprintf.c regex.c crypt-gpgme.h hcachever.sh
++ snprintf.c regex.c crypt-gpgme.h sidebar.h hcachever.sh
+
+ EXTRA_SCRIPTS = smime_keys
+ mutt_dotlock_SOURCES = mutt_dotlock.c
+Index: mutt-1.5.15/mbox.c
+===================================================================
+--- mutt-1.5.15.orig/mbox.c 2007-04-01 22:58:56.000000000 +0100
++++ mutt-1.5.15/mbox.c 2007-04-18 09:28:14.000000000 +0100
+@@ -100,6 +100,7 @@
+ mutt_perror (ctx->path);
+ return (-1);
+ }
++ ctx->atime = sb.st_atime;
+ ctx->mtime = sb.st_mtime;
+ ctx->size = sb.st_size;
+
+@@ -251,6 +252,7 @@
+
+ ctx->size = sb.st_size;
+ ctx->mtime = sb.st_mtime;
++ ctx->atime = sb.st_atime;
+
+ #ifdef NFS_ATTRIBUTE_HACK
+ if (sb.st_mtime > sb.st_atime)
+Index: mutt-1.5.15/menu.c
+===================================================================
+--- mutt-1.5.15.orig/menu.c 2007-04-01 22:58:56.000000000 +0100
++++ mutt-1.5.15/menu.c 2007-04-18 09:28:14.000000000 +0100
+@@ -24,6 +24,7 @@
+ #include "mutt_curses.h"
+ #include "mutt_menu.h"
+ #include "mbyte.h"
++#include "sidebar.h"
+
+ #ifdef USE_IMAP
+ #include "imap.h"
+@@ -158,7 +159,7 @@
+ {
+ char *scratch = safe_strdup (s);
+ int shift = option (OPTARROWCURSOR) ? 3 : 0;
+- int cols = COLS - shift;
++ int cols = COLS - shift - SidebarWidth;
+
+ mutt_format_string (s, n, cols, cols, 0, ' ', scratch, mutt_strlen (scratch), 1);
+ s[n - 1] = 0;
+@@ -209,6 +210,7 @@
+ char buf[STRING];
+ int i;
+
++ draw_sidebar(1);
+ for (i = menu->top; i < menu->top + menu->pagelen; i++)
+ {
+ if (i < menu->max)
+@@ -219,7 +221,7 @@
+ if (option (OPTARROWCURSOR))
+ {
+ attrset (menu->color (i));
+- CLEARLINE (i - menu->top + menu->offset);
++ CLEARLINE_WIN (i - menu->top + menu->offset);
+
+ if (i == menu->current)
+ {
+@@ -248,14 +250,14 @@
+ BKGDSET (MT_COLOR_INDICATOR);
+ }
+
+- CLEARLINE (i - menu->top + menu->offset);
++ CLEARLINE_WIN (i - menu->top + menu->offset);
+ print_enriched_string (menu->color(i), (unsigned char *) buf, i != menu->current);
+ SETCOLOR (MT_COLOR_NORMAL);
+ BKGDSET (MT_COLOR_NORMAL);
+ }
+ }
+ else
+- CLEARLINE (i - menu->top + menu->offset);
++ CLEARLINE_WIN (i - menu->top + menu->offset);
+ }
+ menu->redraw = 0;
+ }
+@@ -270,7 +272,7 @@
+ return;
+ }
+
+- move (menu->oldcurrent + menu->offset - menu->top, 0);
++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth);
+ SETCOLOR (MT_COLOR_NORMAL);
+ BKGDSET (MT_COLOR_NORMAL);
+
+@@ -285,13 +287,13 @@
+ clrtoeol ();
+ menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
+ menu_pad_string (buf, sizeof (buf));
+- move (menu->oldcurrent + menu->offset - menu->top, 3);
++ move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3);
+ print_enriched_string (menu->color(menu->oldcurrent), (unsigned char *) buf, 1);
+ SETCOLOR (MT_COLOR_NORMAL);
+ }
+
+ /* now draw it in the new location */
+- move (menu->current + menu->offset - menu->top, 0);
++ move (menu->current + menu->offset - menu->top, SidebarWidth);
+ attrset (menu->color (menu->current));
+ ADDCOLOR (MT_COLOR_INDICATOR);
+ addstr ("->");
+@@ -312,7 +314,7 @@
+ attrset (menu->color (menu->current));
+ ADDCOLOR (MT_COLOR_INDICATOR);
+ BKGDSET (MT_COLOR_INDICATOR);
+- CLEARLINE (menu->current - menu->top + menu->offset);
++ CLEARLINE_WIN (menu->current - menu->top + menu->offset);
+ print_enriched_string (menu->color(menu->current), (unsigned char *) buf, 0);
+ SETCOLOR (MT_COLOR_NORMAL);
+ BKGDSET (MT_COLOR_NORMAL);
+@@ -324,7 +326,7 @@
+ {
+ char buf[STRING];
+
+- move (menu->current + menu->offset - menu->top, 0);
++ move (menu->current + menu->offset - menu->top, SidebarWidth);
+ menu_make_entry (buf, sizeof (buf), menu, menu->current);
+ menu_pad_string (buf, sizeof (buf));
+
+@@ -867,7 +869,7 @@
+
+
+ if (option (OPTARROWCURSOR))
+- move (menu->current - menu->top + menu->offset, 2);
++ move (menu->current - menu->top + menu->offset, SidebarWidth + 2);
+ else if (option (OPTBRAILLEFRIENDLY))
+ move (menu->current - menu->top + menu->offset, 0);
+ else
+Index: mutt-1.5.15/mutt_curses.h
+===================================================================
+--- mutt-1.5.15.orig/mutt_curses.h 2007-04-01 22:58:56.000000000 +0100
++++ mutt-1.5.15/mutt_curses.h 2007-04-18 09:28:14.000000000 +0100
+@@ -64,6 +64,7 @@
+ #undef lines
+ #endif /* lines */
+
++#define CLEARLINE_WIN(x) move(x,SidebarWidth), clrtoeol()
+ #define CLEARLINE(x) move(x,0), clrtoeol()
+ #define CENTERLINE(x,y) move(y, (COLS-strlen(x))/2), addstr(x)
+ #define BEEP() do { if (option (OPTBEEP)) beep(); } while (0)
+@@ -126,6 +127,7 @@
+ MT_COLOR_BOLD,
+ MT_COLOR_UNDERLINE,
+ MT_COLOR_INDEX,
++ MT_COLOR_NEW,
+ MT_COLOR_MAX
+ };
+
+Index: mutt-1.5.15/mutt.h
+===================================================================
+--- mutt-1.5.15.orig/mutt.h 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/mutt.h 2007-04-18 09:28:14.000000000 +0100
+@@ -443,6 +443,7 @@
+ OPTSAVEEMPTY,
+ OPTSAVENAME,
+ OPTSCORE,
++ OPTSIDEBAR,
+ OPTSIGDASHES,
+ OPTSIGONTOP,
+ OPTSORTRE,
+@@ -904,6 +905,7 @@
+ {
+ char *path;
+ FILE *fp;
++ time_t atime;
+ time_t mtime;
+ off_t size;
+ off_t vsize;
+@@ -938,6 +940,7 @@
+ unsigned int quiet : 1; /* inhibit status messages? */
+ unsigned int collapsed : 1; /* are all threads collapsed? */
+ unsigned int closing : 1; /* mailbox is being closed */
++ unsigned int peekonly : 1; /* just taking a glance, revert atime */
+
+ /* driver hooks */
+ void *data; /* driver specific data */
+Index: mutt-1.5.15/muttlib.c
+===================================================================
+--- mutt-1.5.15.orig/muttlib.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/muttlib.c 2007-04-18 09:28:14.000000000 +0100
+@@ -1206,7 +1206,10 @@
+ ch = *src++; /* pad char */
+ /* calculate space left on line. if we've already written more data
+ than will fit on the line, ignore the rest of the line */
+- count = (COLS < destlen ? COLS : destlen);
++ if ( DrawFullLine )
++ count = (COLS < destlen ? COLS : destlen);
++ else
++ count = ((COLS-SidebarWidth) < destlen ? COLS - SidebarWidth : destlen);
+ if (count > col)
+ {
+ count -= col; /* how many columns left on this line */
+Index: mutt-1.5.15/Muttrc
+===================================================================
+--- mutt-1.5.15.orig/Muttrc 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/Muttrc 2007-04-18 09:28:14.000000000 +0100
+@@ -2235,6 +2235,26 @@
+ # function.
+ #
+ #
++# set sidebar_visible=no
++#
++# Name: sidebar_visible
++# Type: boolean
++# Default: no
++#
++#
++# This specifies whether or not to show sidebar (left-side list of folders).
++#
++#
++# set sidebar_width=0
++#
++# Name: sidebar_width
++# Type: number
++# Default: 0
++#
++#
++# The width of the sidebar.
++#
++#
+ # set crypt_autosign=no
+ #
+ # Name: crypt_autosign
+Index: mutt-1.5.15/mx.c
+===================================================================
+--- mutt-1.5.15.orig/mx.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/mx.c 2007-04-18 09:28:14.000000000 +0100
+@@ -637,6 +637,7 @@
+ * M_APPEND open mailbox for appending
+ * M_READONLY open mailbox in read-only mode
+ * M_QUIET only print error messages
++ * M_PEEK revert atime where applicable
+ * ctx if non-null, context struct to use
+ */
+ CONTEXT *mx_open_mailbox (const char *path, int flags, CONTEXT *pctx)
+@@ -659,6 +660,8 @@
+ ctx->quiet = 1;
+ if (flags & M_READONLY)
+ ctx->readonly = 1;
++ if (flags & M_PEEK)
++ ctx->peekonly = 1;
+
+ if (flags & (M_APPEND|M_NEWFOLDER))
+ {
+@@ -764,9 +767,21 @@
+ void mx_fastclose_mailbox (CONTEXT *ctx)
+ {
+ int i;
++#ifndef BUFFY_SIZE
++ struct utimbuf ut;
++#endif
+
+ if(!ctx)
+ return;
++#ifndef BUFFY_SIZE
++ /* fix up the times so buffy won't get confused */
++ if (ctx->peekonly && ctx->path && ctx->mtime > ctx->atime)
++ {
++ ut.actime = ctx->atime;
++ ut.modtime = ctx->mtime;
++ utime (ctx->path, &ut);
++ }
++#endif
+
+ if (ctx->mx_close)
+ ctx->mx_close (ctx);
+Index: mutt-1.5.15/OPS
+===================================================================
+--- mutt-1.5.15.orig/OPS 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/OPS 2007-04-18 09:28:14.000000000 +0100
+@@ -196,3 +196,8 @@
+ OP_MAIN_SHOW_LIMIT "show currently active limit pattern"
+ OP_MAIN_COLLAPSE_THREAD "collapse/uncollapse current thread"
+ OP_MAIN_COLLAPSE_ALL "collapse/uncollapse all threads"
++OP_SIDEBAR_SCROLL_UP "scroll the mailbox pane up 1 page"
++OP_SIDEBAR_SCROLL_DOWN "scroll the mailbox pane down 1 page"
++OP_SIDEBAR_NEXT "go down to next mailbox"
++OP_SIDEBAR_PREV "go to previous mailbox"
++OP_SIDEBAR_OPEN "open hilighted mailbox"
+Index: mutt-1.5.15/pager.c
+===================================================================
+--- mutt-1.5.15.orig/pager.c 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/pager.c 2007-04-18 09:28:14.000000000 +0100
+@@ -30,6 +30,7 @@
+ #include "pager.h"
+ #include "attach.h"
+ #include "mbyte.h"
++#include "sidebar.h"
+
+ #include "mx.h"
+
+@@ -1073,6 +1074,8 @@
+
+ int wrap_cols = mutt_term_width (Wrap);
+
++ wrap_cols -= SidebarWidth;
++
+ /* FIXME: this should come from lineInfo */
+ memset(&mbstate, 0, sizeof(mbstate));
+
+@@ -1723,7 +1726,7 @@
+ if ((redraw & REDRAW_BODY) || topline != oldtopline)
+ {
+ do {
+- move (bodyoffset, 0);
++ move (bodyoffset, SidebarWidth);
+ curline = oldtopline = topline;
+ lines = 0;
+ force_redraw = 0;
+@@ -1736,6 +1739,7 @@
+ &QuoteList, &q_level, &force_redraw, &SearchRE) > 0)
+ lines++;
+ curline++;
++ move(lines + bodyoffset, SidebarWidth);
+ }
+ last_offset = lineInfo[curline].offset;
+ } while (force_redraw);
+@@ -1749,6 +1753,7 @@
+ addch ('~');
+ addch ('\n');
+ lines++;
++ move(lines + bodyoffset, SidebarWidth);
+ }
+ /* We are going to update the pager status bar, so it isn't
+ * necessary to reset to normal color now. */
+@@ -1761,22 +1766,22 @@
+ /* print out the pager status bar */
+ SETCOLOR (MT_COLOR_STATUS);
+ BKGDSET (MT_COLOR_STATUS);
+- CLEARLINE (statusoffset);
++ CLEARLINE_WIN(statusoffset);
+ if (IsHeader (extra))
+ {
+- size_t l1 = (COLS - 9) * MB_LEN_MAX;
++ size_t l1 = ((COLS - 9) * MB_LEN_MAX) - (SidebarWidth * MB_LEN_MAX);
+ size_t l2 = sizeof (buffer);
+ _mutt_make_string (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt),
+ Context, extra->hdr, M_FORMAT_MAKEPRINT);
+ }
+ else if (IsMsgAttach (extra))
+ {
+- size_t l1 = (COLS - 9) * MB_LEN_MAX;
++ size_t l1 = (COLS - 9) * MB_LEN_MAX - (SidebarWidth * MB_LEN_MAX);
+ size_t l2 = sizeof (buffer);
+ _mutt_make_string (buffer, l1 < l2 ? l1 : l2, NONULL (PagerFmt),
+ Context, extra->bdy->hdr, M_FORMAT_MAKEPRINT);
+ }
+- mutt_paddstr (COLS-10, IsHeader (extra) || IsMsgAttach (extra) ?
++ mutt_paddstr (COLS-10-SidebarWidth, IsHeader (extra) || IsMsgAttach (extra) ?
+ buffer : banner);
+ addstr (" -- (");
+ if (last_pos < sb.st_size - 1)
+@@ -1792,18 +1797,24 @@
+ /* redraw the pager_index indicator, because the
+ * flags for this message might have changed. */
+ menu_redraw_current (index);
++ draw_sidebar(MENU_PAGER);
+
+ /* print out the index status bar */
+ menu_status_line (buffer, sizeof (buffer), index, NONULL(Status));
+
+- move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)), 0);
++ move (indexoffset + (option (OPTSTATUSONTOP) ? 0 : (indexlen - 1)),
++ SidebarWidth);
+ SETCOLOR (MT_COLOR_STATUS);
+ BKGDSET (MT_COLOR_STATUS);
+- mutt_paddstr (COLS, buffer);
++ mutt_paddstr (COLS-SidebarWidth, buffer);
+ SETCOLOR (MT_COLOR_NORMAL);
+ BKGDSET (MT_COLOR_NORMAL);
+ }
+
++ /* if we're not using the index, update every time */
++ if ( index == 0 )
++ draw_sidebar(MENU_PAGER);
++
+ redraw = 0;
+
+ if (option(OPTBRAILLEFRIENDLY)) {
+@@ -2739,6 +2750,12 @@
+ redraw = REDRAW_FULL;
+ break;
+
++ case OP_SIDEBAR_SCROLL_UP:
++ case OP_SIDEBAR_SCROLL_DOWN:
++ case OP_SIDEBAR_NEXT:
++ case OP_SIDEBAR_PREV:
++ scroll_sidebar(ch, MENU_PAGER);
++ break;
+ default:
+ ch = -1;
+ break;
+Index: mutt-1.5.15/PATCHES
+===================================================================
+--- mutt-1.5.15.orig/PATCHES 2007-04-18 09:28:14.000000000 +0100
++++ mutt-1.5.15/PATCHES 2007-04-18 09:28:14.000000000 +0100
+@@ -1,3 +1,4 @@
++patch-1.5.15.sidebar.20070408.txt
+ vvv.quote
+ vvv.initials
+ vvv.nntp
+Index: mutt-1.5.15/sidebar.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ mutt-1.5.15/sidebar.c 2007-04-18 09:28:14.000000000 +0100
+@@ -0,0 +1,294 @@
++/*
++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu>
++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
++ */
++
++
++#if HAVE_CONFIG_H
++# include "config.h"
++#endif
++
++#include "mutt.h"
++#include "mutt_menu.h"
++#include "mutt_curses.h"
++#include "sidebar.h"
++#include "buffy.h"
++#include <libgen.h>
++#include "keymap.h"
++#include <stdbool.h>
++
++/*BUFFY *CurBuffy = 0;*/
++static BUFFY *TopBuffy = 0;
++static BUFFY *BottomBuffy = 0;
++static int known_lines = 0;
++
++static int quick_log10(int n)
++{
++ char string[32];
++ sprintf(string, "%d", n);
++ return strlen(string);
++}
++
++void calc_boundaries (int menu)
++{
++ BUFFY *tmp = Incoming;
++
++ if ( known_lines != LINES ) {
++ TopBuffy = BottomBuffy = 0;
++ known_lines = LINES;
++ }
++ for ( ; tmp->next != 0; tmp = tmp->next )
++ tmp->next->prev = tmp;
++
++ if ( TopBuffy == 0 && BottomBuffy == 0 )
++ TopBuffy = Incoming;
++ if ( BottomBuffy == 0 ) {
++ int count = LINES - 2 - (menu != MENU_PAGER || option(OPTSTATUSONTOP));
++ BottomBuffy = TopBuffy;
++ while ( --count && BottomBuffy->next )
++ BottomBuffy = BottomBuffy->next;
++ }
++ else if ( TopBuffy == CurBuffy->next ) {
++ int count = LINES - 2 - (menu != MENU_PAGER);
++ BottomBuffy = CurBuffy;
++ tmp = BottomBuffy;
++ while ( --count && tmp->prev)
++ tmp = tmp->prev;
++ TopBuffy = tmp;
++ }
++ else if ( BottomBuffy == CurBuffy->prev ) {
++ int count = LINES - 2 - (menu != MENU_PAGER);
++ TopBuffy = CurBuffy;
++ tmp = TopBuffy;
++ while ( --count && tmp->next )
++ tmp = tmp->next;
++ BottomBuffy = tmp;
++ }
++}
++
++char *make_sidebar_entry(char *box, int size, int new)
++{
++ static char *entry = 0;
++ char *c;
++ int i = 0;
++ int delim_len = strlen(SidebarDelim);
++
++ c = realloc(entry, SidebarWidth - delim_len + 2);
++ if ( c ) entry = c;
++ entry[SidebarWidth - delim_len + 1] = 0;
++ for (; i < SidebarWidth - delim_len + 1; entry[i++] = ' ' );
++ i = strlen(box);
++ strncpy( entry, box, i < (SidebarWidth - delim_len + 1) ? i : (SidebarWidth - delim_len + 1) );
++
++ if (size == -1)
++ sprintf(entry + SidebarWidth - delim_len - 3, "?");
++ else if ( new )
++ sprintf(
++ entry + SidebarWidth - delim_len - 3 - quick_log10(size) - quick_log10(new),
++ "% d(%d)", size, new);
++ else
++ sprintf( entry + SidebarWidth - delim_len - 1 - quick_log10(size), "% d", size);
++ return entry;
++}
++
++void set_curbuffy(char buf[LONG_STRING])
++{
++ BUFFY* tmp = CurBuffy = Incoming;
++
++ if (!Incoming)
++ return;
++
++ while(1) {
++ if(!strcmp(tmp->path, buf)) {
++ CurBuffy = tmp;
++ break;
++ }
++
++ if(tmp->next)
++ tmp = tmp->next;
++ else
++ break;
++ }
++}
++
++int draw_sidebar(int menu) {
++
++ int lines = option(OPTHELP) ? 1 : 0;
++ BUFFY *tmp;
++#ifndef USE_SLANG_CURSES
++ attr_t attrs;
++#endif
++ short delim_len = strlen(SidebarDelim);
++ short color_pair;
++
++ static bool initialized = false;
++ static int prev_show_value;
++ static short saveSidebarWidth;
++
++ /* initialize first time */
++ if(!initialized) {
++ prev_show_value = option(OPTSIDEBAR);
++ saveSidebarWidth = SidebarWidth;
++ if(!option(OPTSIDEBAR)) SidebarWidth = 0;
++ initialized = true;
++ }
++
++ /* save or restore the value SidebarWidth */
++ if(prev_show_value != option(OPTSIDEBAR)) {
++ if(prev_show_value && !option(OPTSIDEBAR)) {
++ saveSidebarWidth = SidebarWidth;
++ SidebarWidth = 0;
++ } else if(!prev_show_value && option(OPTSIDEBAR)) {
++ SidebarWidth = saveSidebarWidth;
++ }
++ prev_show_value = option(OPTSIDEBAR);
++ }
++
++
++// if ( SidebarWidth == 0 ) return 0;
++ if (SidebarWidth > 0 && option (OPTSIDEBAR)
++ && delim_len >= SidebarWidth) {
++ unset_option (OPTSIDEBAR);
++ /* saveSidebarWidth = SidebarWidth; */
++ if (saveSidebarWidth > delim_len) {
++ SidebarWidth = saveSidebarWidth;
++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar."));
++ sleep (2);
++ } else {
++ SidebarWidth = 0;
++ mutt_error (_("Value for sidebar_delim is too long. Disabling sidebar. Please set your sidebar_width to a sane value."));
++ sleep (4); /* the advise to set a sane value should be seen long enough */
++ }
++ saveSidebarWidth = 0;
++ return (0);
++ }
++
++ if ( SidebarWidth == 0 || !option(OPTSIDEBAR)) {
++ if (SidebarWidth > 0) {
++ saveSidebarWidth = SidebarWidth;
++ SidebarWidth = 0;
++ }
++ unset_option(OPTSIDEBAR);
++ return 0;
++ }
++
++ /* get attributes for divider */
++ SETCOLOR(MT_COLOR_STATUS);
++#ifndef USE_SLANG_CURSES
++ attr_get(&attrs, &color_pair, 0);
++#else
++ color_pair = attr_get();
++#endif
++ SETCOLOR(MT_COLOR_NORMAL);
++
++ /* draw the divider */
++
++ for ( ; lines < LINES-1-(menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) {
++ move(lines, SidebarWidth - delim_len);
++ addstr(NONULL(SidebarDelim));
++#ifndef USE_SLANG_CURSES
++ mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL);
++#endif
++ }
++
++ if ( Incoming == 0 ) return 0;
++ lines = option(OPTHELP) ? 1 : 0; /* go back to the top */
++
++ if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 )
++ calc_boundaries(menu);
++ if ( CurBuffy == 0 ) CurBuffy = Incoming;
++
++ tmp = TopBuffy;
++
++ SETCOLOR(MT_COLOR_NORMAL);
++
++ for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); tmp = tmp->next ) {
++ if ( tmp == CurBuffy )
++ SETCOLOR(MT_COLOR_INDICATOR);
++ else if ( tmp->msg_unread > 0 )
++ SETCOLOR(MT_COLOR_NEW);
++ else
++ SETCOLOR(MT_COLOR_NORMAL);
++
++ move( lines, 0 );
++ if ( Context && !strcmp( tmp->path, Context->path ) ) {
++ tmp->msg_unread = Context->unread;
++ tmp->msgcount = Context->msgcount;
++ }
++ printw( "%.*s", SidebarWidth - delim_len + 1,
++ make_sidebar_entry(basename(tmp->path), tmp->msgcount,
++ tmp->msg_unread));
++ lines++;
++ }
++ SETCOLOR(MT_COLOR_NORMAL);
++ for ( ; lines < LINES-1 - (menu != MENU_PAGER || option(OPTSTATUSONTOP)); lines++ ) {
++ int i = 0;
++ move( lines, 0 );
++ for ( ; i < SidebarWidth - delim_len - 1; i++ )
++ addch(' ');
++ }
++ return 0;
++}
++
++
++void set_buffystats(CONTEXT* Context)
++{
++ BUFFY *tmp = Incoming;
++ while(tmp) {
++ if(Context && !strcmp(tmp->path, Context->path)) {
++ tmp->msg_unread = Context->unread;
++ tmp->msgcount = Context->msgcount;
++ break;
++ }
++ tmp = tmp->next;
++ }
++}
++
++void scroll_sidebar(int op, int menu)
++{
++ if(!SidebarWidth) return;
++ if(!CurBuffy) return;
++
++ switch (op) {
++ case OP_SIDEBAR_NEXT:
++ if ( CurBuffy->next == NULL ) return;
++ CurBuffy = CurBuffy->next;
++ break;
++ case OP_SIDEBAR_PREV:
++ if ( CurBuffy->prev == NULL ) return;
++ CurBuffy = CurBuffy->prev;
++ break;
++ case OP_SIDEBAR_SCROLL_UP:
++ CurBuffy = TopBuffy;
++ if ( CurBuffy != Incoming ) {
++ calc_boundaries(menu);
++ CurBuffy = CurBuffy->prev;
++ }
++ break;
++ case OP_SIDEBAR_SCROLL_DOWN:
++ CurBuffy = BottomBuffy;
++ if ( CurBuffy->next ) {
++ calc_boundaries(menu);
++ CurBuffy = CurBuffy->next;
++ }
++ break;
++ default:
++ return;
++ }
++ calc_boundaries(menu);
++ draw_sidebar(menu);
++}
+Index: mutt-1.5.15/sidebar.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ mutt-1.5.15/sidebar.h 2007-04-18 09:28:14.000000000 +0100
+@@ -0,0 +1,36 @@
++/*
++ * Copyright (C) ????-2004 Justin Hibbits <jrh29@po.cwru.edu>
++ * Copyright (C) 2004 Thomer M. Gil <mutt@thomer.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
++ */
++
++#ifndef SIDEBAR_H
++#define SIDEBAR_H
++
++struct MBOX_LIST {
++ char *path;
++ int msgcount;
++ int new;
++} MBLIST;
++
++/* parameter is whether or not to go to the status line */
++/* used for omitting the last | that covers up the status bar in the index */
++int draw_sidebar(int);
++void scroll_sidebar(int, int);
++void set_curbuffy(char*);
++void set_buffystats(CONTEXT*);
++
++#endif /* SIDEBAR_H */
+Index: mutt-1.5.15/imap/imap.c
+===================================================================
+--- mutt-1.5.15.orig/imap/imap.c 2007-04-06 20:52:53.000000000 +0100
++++ mutt-1.5.15/imap/imap.c 2007-04-18 09:28:14.000000000 +0100
+@@ -1483,7 +1483,7 @@
+
+ imap_munge_mbox_name (munged, sizeof (munged), name);
+ snprintf (command, sizeof (command),
+- "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT)", munged);
++ "STATUS %s (UIDNEXT UIDVALIDITY UNSEEN RECENT MESSAGES)", munged);
+
+ if (imap_cmd_queue (idata, command) < 0)
+ {
+Index: mutt-1.5.15/imap/command.c
+===================================================================
+--- mutt-1.5.15.orig/imap/command.c 2007-04-05 16:58:57.000000000 +0100
++++ mutt-1.5.15/imap/command.c 2007-04-18 09:28:14.000000000 +0100
+@@ -914,6 +914,13 @@
+ opened */
+ status->uidnext = oldun;
+
++ /* Added to make the sidebar show the correct numbers */
++ if (status->messages)
++ {
++ inc->msgcount = status->messages;
++ inc->msg_unread = status->unseen;
++ }
++
+ FREE (&value);
+ return;
+ }
diff --git a/packages/mutt/mutt_1.5.15.bb b/packages/mutt/mutt_1.5.15.bb
new file mode 100644
index 0000000000..83d8d770d7
--- /dev/null
+++ b/packages/mutt/mutt_1.5.15.bb
@@ -0,0 +1,27 @@
+SECTION = "console/network"
+DEPENDS = "ncurses gnutls gpgme"
+DESCRIPTION = "Mutt is a small but very powerful text-based \
+MIME mail client. It is highly configurable, and is well-suited \
+to the mail power user with advanced features like key \
+bindings, keyboard macros, mail threading, regular expression \
+searches, and a powerful pattern matching language for selecting \
+groups of messages."
+LICENSE = "GPL"
+PR = "r0"
+SRC_URI = "ftp://ftp.mutt.org/mutt/devel/mutt-${PV}.tar.gz \
+ http://mutt.org.ua/download/mutt-1.5.15/patch-1.5.15.vvv.nntp.2.gz;patch=1 \
+ http://mutt.org.ua/download/mutt-1.5.15/patch-1.5.15.vvv.initials.gz;patch=1 \
+ http://mutt.org.ua/download/mutt-1.5.15/patch-1.5.15.vvv.quote.gz;patch=1 \
+ file://patch-1.5.15.sidebar.20070408.txt;patch=1 \
+ file://makedoc.patch;patch=1 "
+
+S = "${WORKDIR}/mutt-1.5.15"
+
+inherit autotools
+
+EXTRA_OECONF = "--enable-gpgme --with-curses=${STAGING_LIBDIR}/.. \
+ --enable-pop --enable-imap --with-gnutls --enable-nntp"
+
+do_compile_prepend () {
+ ${BUILD_CC} makedoc.c -o makedoc
+}
diff --git a/packages/mysql/mysql-native_4.1.18.bb b/packages/mysql/mysql-native_4.1.18.bb
index dc87549e24..9a81bc8f00 100644
--- a/packages/mysql/mysql-native_4.1.18.bb
+++ b/packages/mysql/mysql-native_4.1.18.bb
@@ -1,6 +1,7 @@
SECTION = "console/network"
require mysql_${PV}.bb
inherit native
+PR="r3"
RDEPENDS_${PN} = ""
@@ -9,7 +10,7 @@ DEPENDS = "ncurses-native"
EXTRA_OEMAKE = ""
EXTRA_OECONF = " --with-embedded-server "
-do_stage() {
+do_stage_append() {
install -m 0755 sql/gen_lex_hash ${STAGING_BINDIR}/
}
diff --git a/packages/nabi/.mtn2git_empty b/packages/nabi/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nabi/.mtn2git_empty
diff --git a/packages/nabi/nabi_0.17.bb b/packages/nabi/nabi_0.17.bb
new file mode 100644
index 0000000000..d914830b94
--- /dev/null
+++ b/packages/nabi/nabi_0.17.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "Nabi is an easy and powerful GNU XIM for the Korean language"
+HOMEPAGE = "http://nabi.kldp.net/"
+SECTION = "x11/input"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libhangul"
+
+SRC_URI = "http://kldp.net/frs/download.php/3742/${PN}-${PV}.tar.gz"
+
+inherit autotools pkgconfig
diff --git a/packages/nano/nano-2.0.6/.mtn2git_empty b/packages/nano/nano-2.0.6/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nano/nano-2.0.6/.mtn2git_empty
diff --git a/packages/nano/nano-1.3.9/glib.m4 b/packages/nano/nano-2.0.6/glib.m4
index b8094bbfe0..b8094bbfe0 100644
--- a/packages/nano/nano-1.3.9/glib.m4
+++ b/packages/nano/nano-2.0.6/glib.m4
diff --git a/packages/nano/nano_1.3.9.bb b/packages/nano/nano_1.3.9.bb
deleted file mode 100644
index c82f5e2327..0000000000
--- a/packages/nano/nano_1.3.9.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "GNU nano (Nano's ANOther editor, or \
-Not ANOther editor) is an enhanced clone of the \
-Pico text editor."
-HOMEPAGE = "http://www.nano-editor.org/"
-LICENSE = "GPLv2"
-SECTION = "console/utils"
-DEPENDS = "ncurses"
-
-SRC_URI = "http://www.nano-editor.org/dist/v1.3/nano-${PV}.tar.gz \
- file://glib.m4"
-
-inherit autotools
-
-do_configure_prepend () {
- install -m 0644 ${WORKDIR}/glib.m4 m4/
-}
diff --git a/packages/nano/nano_2.0.6.bb b/packages/nano/nano_2.0.6.bb
new file mode 100644
index 0000000000..f6ef365591
--- /dev/null
+++ b/packages/nano/nano_2.0.6.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "GNU nano (Nano's ANOther editor, or \
+Not ANOther editor) is an enhanced clone of the \
+Pico text editor."
+HOMEPAGE = "http://www.nano-editor.org/"
+LICENSE = "GPLv2"
+SECTION = "console/utils"
+DEPENDS = "ncurses"
+
+SRC_URI = "http://www.nano-editor.org/dist/v2.0/nano-${PV}.tar.gz \
+ file://glib.m4"
+
+inherit autotools
+
+do_configure_prepend () {
+ install -m 0644 ${WORKDIR}/glib.m4 m4/
+}
diff --git a/packages/neon/files/gnutls-force-and-detect.patch b/packages/neon/files/gnutls-force-and-detect.patch
new file mode 100644
index 0000000000..4c794ba138
--- /dev/null
+++ b/packages/neon/files/gnutls-force-and-detect.patch
@@ -0,0 +1,23 @@
+diff --git a/macros/neon.m4 b/macros/neon.m4
+index 01072b9..6d3258f 100644
+--- a/macros/neon.m4
++++ b/macros/neon.m4
+@@ -886,15 +886,11 @@ yes|openssl)
+ NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_openssl"
+ ;;
+ gnutls)
+- AC_MSG_ERROR([GNU TLS support is not yet complete])
++ dnl AC_MSG_ERROR([GNU TLS support is not yet complete])
+
+- AC_PATH_PROG(GNUTLS_CONFIG, libgnutls-config, no)
++ GNUTLS_CONFIG="pkg-config gnutls"
+
+- if test "$GNUTLS_CONFIG" = "no"; then
+- AC_MSG_ERROR([could not find libgnutls-config in \$PATH])
+- fi
+-
+- ne_gnutls_ver=`$GNUTLS_CONFIG --version`
++ ne_gnutls_ver=`$GNUTLS_CONFIG --modversion`
+ case $ne_gnutls_ver in
+ 1.0.?|1.0.1?|1.0.20|1.0.21)
+ AC_MSG_ERROR([GNU TLS version $ne_gnutls_ver is too old -- 1.0.22 or later required]) ;;
diff --git a/packages/neon/neon_0.25.5.bb b/packages/neon/neon_0.25.5.bb
index eec428136d..f935fdb222 100644
--- a/packages/neon/neon_0.25.5.bb
+++ b/packages/neon/neon_0.25.5.bb
@@ -2,15 +2,16 @@ DESCRIPTION = "neon is an HTTP and WebDAV client library, with a C interface."
HOMEPAGE = "http://www.webdav.org/neon"
SECTION = "libs"
LICENSE = "LGPL"
-DEPENDS = "zlib libxml2 expat time"
+DEPENDS = "zlib libxml2 expat time gnutls"
-PR = "r1"
+PR = "r3"
-SRC_URI = "http://www.webdav.org/${PN}/${P}.tar.gz"
+SRC_URI = "http://www.webdav.org/${PN}/${P}.tar.gz \
+ file://gnutls-force-and-detect.patch;patch=1"
-inherit autotools binconfig lib_package
+inherit autotools binconfig lib_package pkgconfig
-EXTRA_OECONF = "--without-ssl --with-libxml2 --with-expat --enable-shared"
+EXTRA_OECONF = "--with-ssl=gnutls --with-libxml2 --with-expat --enable-shared"
do_stage() {
autotools_stage_all
diff --git a/packages/net-snmp/net-snmp_5.1.2.bb b/packages/net-snmp/net-snmp_5.1.2.bb
index 302e7eed52..330e13e0ef 100644
--- a/packages/net-snmp/net-snmp_5.1.2.bb
+++ b/packages/net-snmp/net-snmp_5.1.2.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Various tools relating to the Simple Network Management Protocol"
HOMEPAGE = "http://www.net-snmp.org/"
LICENSE = "BSD"
DEPENDS = "openssl"
-PR = "r2"
+PR = "r3"
SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
file://uclibc-fix.patch;patch=1 \
@@ -13,7 +13,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.tar.gz \
inherit autotools
PARALLEL_MAKE = ""
-EXTRA_OECONF = "--enable-shared --disable-manuals"
+EXTRA_OECONF = "--enable-shared --disable-manuals --with-defaults"
EXTRA_OEMAKE = "INSTALL_PREFIX=${D}"
do_configure() {
diff --git a/packages/netatalk/.mtn2git_empty b/packages/netatalk/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netatalk/.mtn2git_empty
diff --git a/packages/netatalk/files/.mtn2git_empty b/packages/netatalk/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netatalk/files/.mtn2git_empty
diff --git a/packages/netatalk/files/init b/packages/netatalk/files/init
new file mode 100755
index 0000000000..926f9bbb1e
--- /dev/null
+++ b/packages/netatalk/files/init
@@ -0,0 +1,111 @@
+#!/sbin/runscript
+
+# AppleTalk daemons. Make sure not to start atalkd in the background:
+# its data structures must have time to stablize before running the
+# other processes.
+
+depend() {
+ need net
+ use logger dns
+}
+
+atalk_startup () {
+# . /etc/netatalk/netatalk.conf
+
+ if [ "${ATALKD_RUN}" != "no" ]; then
+ ebegin "Starting atalkd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/atalkd
+ eend $?
+
+ for reg in \
+ "${ATALK_NAME}:Workstation${ATALK_ZONE}" \
+ "${ATALK_NAME}:netatalk${ATALK_ZONE}"
+ do
+ ebegin " Registering $reg"
+ /usr/bin/nbprgstr "$reg"
+ eend $?
+ done
+
+ if [ "${PAPD_RUN}" = "yes" ]; then
+ ebegin " Starting papd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/papd
+ eend $?
+ fi
+
+ fi
+
+ if [ "${CNID_METAD_RUN}" = "yes" ] ; then
+ ebegin "Starting cnid_metad"
+ start-stop-daemon --start --quiet --exec /usr/sbin/cnid_metad
+ eend $?
+ fi
+
+
+ if [ "${AFPD_RUN}" = "yes" ]; then
+ ebegin "Starting afpd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/afpd -- \
+ ${AFPD_UAMLIST} -g ${AFPD_GUEST} -c ${AFPD_MAX_CLIENTS} \
+ -n "${ATALK_NAME}${ATALK_ZONE}"
+ eend $?
+ fi
+
+ if [ "${TIMELORD_RUN}" = "yes" ]; then
+ ebegin "Starting timelord"
+ start-stop-daemon --start --quiet --exec /usr/sbin/timelord
+ eend $?
+ fi
+}
+
+start () {
+ . /etc/netatalk/netatalk.conf
+
+ if [ x"${ATALK_BGROUND}" = x"yes" ]; then
+ echo "Starting netatalk in the background ... "
+ atalk_startup >& /dev/null &
+ else
+ atalk_startup
+ fi
+}
+
+stop () {
+ . /etc/netatalk/netatalk.conf
+
+ if [ "${AFPD_RUN}" = "yes" ]; then
+ ebegin "Stopping afpd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/afpd
+ eend $?
+ fi
+
+ if [ "${TIMELORD_RUN}" = "yes" ]; then
+ ebegin "Stopping timelord"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/timelord
+ eend $?
+ fi
+
+ if [ "${ATALKD_RUN}" != "no" ]; then
+ if [ "${PAPD_RUN}" = "yes" ]; then
+ ebegin "Stopping papd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/papd
+ eend $?
+ fi
+
+ for reg in \
+ "${ATALK_NAME}:Workstation${ATALK_ZONE}" \
+ "${ATALK_NAME}:netatalk${ATALK_ZONE}"
+ do
+ ebegin "Unregistering $reg"
+ /usr/bin/nbpunrgstr "$reg"
+ eend $?
+ done
+
+ ebegin "Stopping atalkd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/atalkd
+ eend $?
+ fi
+
+ if [ "${CNID_METAD_RUN}" = "yes" ] ; then
+ ebegin "Stopping cnid_metad"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/cnid_metad
+ eend $?
+ fi
+}
diff --git a/packages/netatalk/netatalk-2.0.3/.mtn2git_empty b/packages/netatalk/netatalk-2.0.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netatalk/netatalk-2.0.3/.mtn2git_empty
diff --git a/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch
new file mode 100644
index 0000000000..93d3e4b9ea
--- /dev/null
+++ b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-db43.patch
@@ -0,0 +1,32 @@
+Index: netatalk-2.0.3/bin/cnid/cnid_index.c
+===================================================================
+--- netatalk-2.0.3.orig/bin/cnid/cnid_index.c
++++ netatalk-2.0.3/bin/cnid/cnid_index.c
+@@ -274,7 +274,11 @@ static int dbif_count(const int dbi, u_i
+ DB_BTREE_STAT *sp;
+ DB *db = db_table[dbi].db;
+
++#if DB_VERSION_MAJOR > 4 || ( DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3 )
++ ret = db->stat(db, db_txn, &sp, 0);
++#else
+ ret = db->stat(db, &sp, 0);
++#endif
+
+ if (ret) {
+ LOG(log_error, logtype_cnid, "error getting stat infotmation on database: %s", db_strerror(errno));
+Index: netatalk-2.0.3/etc/cnid_dbd/dbif.c
+===================================================================
+--- netatalk-2.0.3.orig/etc/cnid_dbd/dbif.c
++++ netatalk-2.0.3/etc/cnid_dbd/dbif.c
+@@ -514,7 +514,11 @@ int dbif_count(const int dbi, u_int32_t
+ DB_BTREE_STAT *sp;
+ DB *db = db_table[dbi].db;
+
++#if DB_VERSION_MAJOR > 4 || ( DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3 )
++ ret = db->stat(db, db_txn, &sp, 0);
++#else
+ ret = db->stat(db, &sp, 0);
++#endif
+
+ if (ret) {
+ LOG(log_error, logtype_cnid, "error getting stat infotmation on database: %s", db_strerror(errno));
diff --git a/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch
new file mode 100644
index 0000000000..f64c8cf5eb
--- /dev/null
+++ b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-newerdb.patch
@@ -0,0 +1,28 @@
+Index: netatalk-2.0.3/macros/db3-check.m4
+===================================================================
+--- netatalk-2.0.3.orig/macros/db3-check.m4
++++ netatalk-2.0.3/macros/db3-check.m4
+@@ -115,6 +115,14 @@ int main(void) {
+ AC_DEFUN([NETATALK_BERKELEY_LINK],
+ [
+ atalk_cv_lib_db=no
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_4,[-ldb-4.4])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db44,[-ldb44])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_44,[-ldb-44])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_4,[-ldb-4-4])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_3,[-ldb-4.3])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db43,[-ldb43])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_43,[-ldb-43])
++NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_3,[-ldb-4-3])
+ NETATALK_BDB_LINK_TRY(atalk_cv_db_db_4_dot_2,[-ldb-4.2])
+ NETATALK_BDB_LINK_TRY(atalk_cv_db_db42,[-ldb42])
+ NETATALK_BDB_LINK_TRY(atalk_cv_db_db_42,[-ldb-42])
+@@ -134,7 +142,7 @@ AC_DEFUN([AC_PATH_BDB],
+ trybdbdir=""
+ dobdbsearch=yes
+ bdb_search_dirs="/usr/local/include /usr/include"
+- search_subdirs="/db4.2 /db42 /db4.1 /db41 /db4 /"
++ search_subdirs="/db4.4 /db44 /db4.3 /db43 /db4.2 /db42 /db4.1 /db41 /db4 /"
+
+ dnl required BDB version
+ DB_MAJOR_REQ=4
diff --git a/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch
new file mode 100644
index 0000000000..70170c134d
--- /dev/null
+++ b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-setXid.patch
@@ -0,0 +1,14 @@
+Index: netatalk-2.0.3/bin/afppasswd/Makefile.am
+===================================================================
+--- netatalk-2.0.3.orig/bin/afppasswd/Makefile.am
++++ netatalk-2.0.3/bin/afppasswd/Makefile.am
+@@ -12,7 +12,8 @@ afppasswd_SOURCES = afppasswd.c
+ afppasswd_LDADD = $(top_builddir)/libatalk/libatalk.la @SSL_LIBS@
+
+ CFLAGS = @CFLAGS@ @SSL_CFLAGS@ -I$(top_srcdir)/sys \
+- -D_PATH_AFPDPWFILE=\"$(pkgconfdir)/afppasswd\"
++ -D_PATH_AFPDPWFILE=\"$(pkgconfdir)/afppasswd\" \
++ @BINDNOW_FLAGS@
+
+ install-exec-hook:
+ if USE_DHX
diff --git a/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch
new file mode 100644
index 0000000000..e91ebcebd2
--- /dev/null
+++ b/packages/netatalk/netatalk-2.0.3/netatalk-2.0.3-xfs.patch
@@ -0,0 +1,22 @@
+Index: netatalk-2.0.3/configure.in
+===================================================================
+--- netatalk-2.0.3.orig/configure.in
++++ netatalk-2.0.3/configure.in
+@@ -694,12 +694,16 @@ fi
+ # AC_MSG_RESULT([enabling quotactl wrapper])
+ # )
+
++AC_ARG_WITH([xfs],
++ AS_HELP_STRING([--without-xfs], [Build without XFS filesystem quota support]))
++
++if test "x$with_xfs" != "xno"; then
+ # For quotas on Linux XFS filesystems
+ AC_CHECK_HEADERS(linux/xqm.h linux/xfs_fs.h)
+ AC_CHECK_HEADERS(xfs/libxfs.h xfs/xqm.h xfs/xfs_fs.h)
+ # For linux > 2.5.56
+ AC_CHECK_HEADERS(linux/dqblk_xfs.h)
+-
++fi
+
+ dnl ----- as far as I can tell, dbtob always does the wrong thing
+ dnl ----- on every single version of linux I've ever played with.
diff --git a/packages/netatalk/netatalk_2.0.3.bb b/packages/netatalk/netatalk_2.0.3.bb
new file mode 100644
index 0000000000..74cfd84042
--- /dev/null
+++ b/packages/netatalk/netatalk_2.0.3.bb
@@ -0,0 +1,39 @@
+DESCRIPTION = "Appletalk protocol suite"
+SECTION = "net"
+PR = "r0"
+LICENSE = "GPL"
+
+DEPENDS = "cups db openssl libpam"
+
+SRC_URI = "http://ovh.dl.sourceforge.net/sourceforge/netatalk/netatalk-${PV}.tar.gz \
+ file://netatalk-2.0.3-db43.patch;patch=1 \
+ file://netatalk-2.0.3-newerdb.patch;patch=1 \
+ file://netatalk-2.0.3-xfs.patch;patch=1 \
+ file://init \
+ "
+INITSCRIPT_NAME = "atalk"
+INITSCRIPT_PARAMS = "defaults 65"
+
+inherit autotools update-rc.d
+
+do_configure () {
+ autoreconf
+ ac_cv_header_rpcsvc_rquota_h=no LDFLAGS="-lpthread -L${STAGING_DIR}/${TARGET_SYS}/lib" ./configure \
+ --build=${BUILD_SYS} \
+ --host=${HOST_SYS} \
+ --target=${TARGET_SYS} \
+ --prefix=${prefix} \
+ --with-bdb=${STAGING_DIR}/${TARGET_SYS} \
+ --with-ssl-dir=${STAGING_DIR}/${TARGET_SYS} \
+ --without-shadow \
+ --sysconfdir=${sysconfdir} \
+ --disable-nls \
+ --disable-static \
+ --with-pam \
+ --mandir=${mandir}
+ cp ${STAGING_DIR}/${BUILD_SYS}/bin/${TARGET_SYS}-libtool ./${TARGET_SYS}-libtool
+}
+
+do_install_append() {
+ install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/atalk
+}
diff --git a/packages/netbase/netbase/foonas/.mtn2git_empty b/packages/netbase/netbase/foonas/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/foonas/.mtn2git_empty
diff --git a/packages/netbase/netbase/foonas/interfaces b/packages/netbase/netbase/foonas/interfaces
new file mode 100644
index 0000000000..314715bba7
--- /dev/null
+++ b/packages/netbase/netbase/foonas/interfaces
@@ -0,0 +1,13 @@
+# /etc/network/interfaces
+# configuration file for ifup(8), ifdown(8)
+#
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+#
+# The interface used by default during boot
+auto eth0
+iface eth0 inet dhcp
+ address 192.168.1.16
+
diff --git a/packages/netbase/netbase/if-down.d/.mtn2git_empty b/packages/netbase/netbase/if-down.d/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/if-down.d/.mtn2git_empty
diff --git a/packages/netbase/netbase/if-post-down.d/.mtn2git_empty b/packages/netbase/netbase/if-post-down.d/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/if-post-down.d/.mtn2git_empty
diff --git a/packages/netbase/netbase/if-pre-up.d/.mtn2git_empty b/packages/netbase/netbase/if-pre-up.d/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/if-pre-up.d/.mtn2git_empty
diff --git a/packages/netbase/netbase/if-up.d/.mtn2git_empty b/packages/netbase/netbase/if-up.d/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/if-up.d/.mtn2git_empty
diff --git a/packages/netbase/netbase/interfaces b/packages/netbase/netbase/interfaces
index fbeb14ffbc..c9b2faf3f8 100644
--- a/packages/netbase/netbase/interfaces
+++ b/packages/netbase/netbase/interfaces
@@ -4,10 +4,40 @@
auto lo
iface lo inet loopback
+
# Wireless interfaces
+#
+# Example of an unencrypted (no WEP or WPA) wireless connection
+# that connects to any available access point:
+#
iface wlan0 inet dhcp
-wireless_mode managed
-wireless_essid any
+ wireless_mode managed
+ wireless_essid any
+#
+#
+# Same as above but locked to a specific access point:
+#
+#iface wlan0 inet dhcp
+# wireless_mode managed
+# wireless-essid some-essid
+#
+# A WEP encrypted connection locked to a specific access point:
+#
+#iface wlan0 inet dhcp
+# wireless-essid some-essid
+# wireless-key s:My-PlainText-Password
+# wireless-mode managed
+#
+# A WPA1 or WPA2 encrypted connection locked to a specific access point.
+# The WLAN cards firmware is updated temporarily to allow WPA
+# connections. Your card may or may not need the update.
+#
+#iface wlan0 inet dhcp
+# wpa-essid some-essid
+# wpa-psk My-PlainText-Password
+# pre-up iwpriv wlan0 reset 1
+# pre-up prism2_srec -r wlan0 /etc/pcmcia/rf010804.hex
+
iface atml0 inet dhcp
# Wired or wireless interfaces
diff --git a/packages/netbase/netbase/oplinux-uclibc/.mtn2git_empty b/packages/netbase/netbase/oplinux-uclibc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/netbase/netbase/oplinux-uclibc/interfaces b/packages/netbase/netbase/oplinux-uclibc/interfaces
new file mode 100644
index 0000000000..673618f636
--- /dev/null
+++ b/packages/netbase/netbase/oplinux-uclibc/interfaces
@@ -0,0 +1,10 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet
+auto eth0
+iface eth0 inet dhcp
+
diff --git a/packages/netbase/netbase/oplinux-uclibc/options b/packages/netbase/netbase/oplinux-uclibc/options
new file mode 100644
index 0000000000..14380f4376
--- /dev/null
+++ b/packages/netbase/netbase/oplinux-uclibc/options
@@ -0,0 +1,3 @@
+ip_forward=yes
+spoofprotect=yes
+syncookies=no
diff --git a/packages/netbase/netbase/oplinux/.mtn2git_empty b/packages/netbase/netbase/oplinux/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/oplinux/.mtn2git_empty
diff --git a/packages/netbase/netbase/oplinux/interfaces b/packages/netbase/netbase/oplinux/interfaces
new file mode 100644
index 0000000000..673618f636
--- /dev/null
+++ b/packages/netbase/netbase/oplinux/interfaces
@@ -0,0 +1,10 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet
+auto eth0
+iface eth0 inet dhcp
+
diff --git a/packages/netbase/netbase/oplinux/options b/packages/netbase/netbase/oplinux/options
new file mode 100644
index 0000000000..14380f4376
--- /dev/null
+++ b/packages/netbase/netbase/oplinux/options
@@ -0,0 +1,3 @@
+ip_forward=yes
+spoofprotect=yes
+syncookies=no
diff --git a/packages/netbase/netbase/slugos/.mtn2git_empty b/packages/netbase/netbase/slugos/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/slugos/.mtn2git_empty
diff --git a/packages/netbase/netbase/slugos/if-pre-up.d/.mtn2git_empty b/packages/netbase/netbase/slugos/if-pre-up.d/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/slugos/if-pre-up.d/.mtn2git_empty
diff --git a/packages/netbase/netbase/slugos/if-pre-up.d/udhcpc-fix b/packages/netbase/netbase/slugos/if-pre-up.d/udhcpc-fix
new file mode 100644
index 0000000000..7d2e9705ea
--- /dev/null
+++ b/packages/netbase/netbase/slugos/if-pre-up.d/udhcpc-fix
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# This works around a problem where udhcpc times out w/o getting a lease
+# due to slow auto-negotiate.
+
+if test "$IFACE" = "eth0" -a "$METHOD" = "dhcp"
+then
+ echo -n "[sleeping 5s]..."
+ ifconfig eth0 up
+ sleep 5
+fi
+
diff --git a/packages/netbase/netbase_4.21.bb b/packages/netbase/netbase_4.21.bb
index 4590cf7649..6851ae8d9a 100644
--- a/packages/netbase/netbase_4.21.bb
+++ b/packages/netbase/netbase_4.21.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "This package provides the necessary \
infrastructure for basic TCP/IP based networking."
SECTION = "base"
LICENSE = "GPL"
-PR = "r13"
+PR = "r18"
inherit update-rc.d
@@ -18,7 +18,11 @@ SRC_URI = "${DEBIAN_MIRROR}/main/n/netbase/netbase_${PV}.tar.gz \
file://options \
file://init \
file://hosts \
- file://interfaces"
+ file://interfaces \
+ file://if-pre-up.d \
+ file://if-up.d \
+ file://if-down.d \
+ file://if-post-down.d"
do_install () {
install -d ${D}${sysconfdir}/init.d \
@@ -28,6 +32,15 @@ do_install () {
${D}${sysconfdir}/network/if-up.d \
${D}${sysconfdir}/network/if-down.d \
${D}${sysconfdir}/network/if-post-down.d
+
+ for dir in if-pre-up.d if-up.d if-down.d if-post-down.d
+ do
+ for script in `ls -1 "${WORKDIR}/${dir}"`
+ do
+ install -m 0755 "${WORKDIR}/${dir}/${script}" "${D}${sysconfdir}/network/${dir}"
+ done
+ done
+
install -m 0644 ${WORKDIR}/options ${D}${sysconfdir}/network/options
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/networking
install -m 0644 ${WORKDIR}/hosts ${D}${sysconfdir}/hosts
diff --git a/packages/netpbm/netpbm_10.28.bb b/packages/netpbm/netpbm_10.28.bb
index dde0d17d57..cfe2a5cc88 100644
--- a/packages/netpbm/netpbm_10.28.bb
+++ b/packages/netpbm/netpbm_10.28.bb
@@ -1,14 +1,14 @@
-# bitbake configuration file for NetPBM, a command line image (sampled
-# data) processing package derived from PBMPlus
-#
-# For documentation see: http://netpbm.sourceforge.net/doc/
+DESCRIPTION = "Netpbm is a toolkit for manipulation of graphic images, including\
+conversion of images between a variety of different formats. There\
+are over 220 separate tools in the package including converters for\
+about 100 graphics formats."
+HOMEPAGE = "http://netpbm.sourceforge.net"
+SECTION = "console/utils"
LICENSE = "GPL MIT Artistic"
# NOTE: individual command line utilities are covered by different
# licenses. The compiled and linked command line utilties are
# subject to the licenses of the libraries they use too - including
# libpng libz, IJG, and libtiff licenses
-
-SECTION = "console/utils"
DEPENDS = "jpeg zlib libpng tiff install-native flex-native"
RDEPENDS = "perl\
perl-module-cwd\
@@ -25,12 +25,7 @@ RDEPENDS = "perl\
RDEPENDS += "perl-module-exporter-heavy"
RDEPENDS += "perl-module-file-spec-unix"
-HOMEPAGE = "http://netpbm.sourceforge.net"
-DESCRIPTION = "Netpbm is a toolkit for manipulation of graphic images, including\
-conversion of images between a variety of different formats. There\
-are over 220 separate tools in the package including converters for\
-about 100 graphics formats."
-PR = "r3"
+PR = "r4"
SRC_URI = "${SOURCEFORGE_MIRROR}/netpbm/netpbm-${PV}.tgz \
file://ppmtojpeg.patch;patch=42 \
diff --git a/packages/networkmanager/network-manager-applet_0.6.5.bb b/packages/networkmanager/network-manager-applet_0.6.5.bb
new file mode 100644
index 0000000000..fae5507989
--- /dev/null
+++ b/packages/networkmanager/network-manager-applet_0.6.5.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Frontend applet for NetworkManager"
+LICENSE = "GPLv2"
+
+DEPENDS = "networkmanager dbus-glib libglade gconf gnome-keyring libnotify libgnomeui "
+
+inherit gnome
+
+S = "${WORKDIR}/nm-applet-${PV}"
+
+FILES_${PN} += "${datadir}/nm-applet/ \
+ ${datadir}/icons \
+ ${datadir}/gnome \
+ "
+
diff --git a/packages/networkmanager/networkmanager.inc b/packages/networkmanager/networkmanager.inc
new file mode 100644
index 0000000000..e11a52391d
--- /dev/null
+++ b/packages/networkmanager/networkmanager.inc
@@ -0,0 +1,66 @@
+DESCRIPTION = "NetworkManager"
+SECTION = "net/misc"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.gnome.org"
+PRIORITY = "optional"
+DEPENDS = "libnl dbus dbus-glib hal gconf-dbus wireless-tools"
+RDEPENDS = "wpa-supplicant iproute2 dhcdbd"
+
+PR = "r0"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.6/NetworkManager-${PV}.tar.bz2 \
+ file://NetworkManager \
+ file://99_networkmanager"
+
+S = "${WORKDIR}/NetworkManager-${PV}/"
+
+
+EXTRA_OECONF = " \
+ --with-gnome \
+ --with-distro=debian \
+ --without-gcrypt \
+ --with-wpa_supplicant=/usr/sbin/wpa_supplicant \
+ --with-dhcdbd=/sbin/dhcdbd \
+ --with-ip=/sbin/ip"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
+
+do_install () {
+ oe_libinstall -C libnm-util libnm-util ${D}/usr/lib
+ oe_libinstall -C gnome/libnm_glib libnm_glib ${D}/usr/lib
+
+ oe_runmake -C src DESTDIR="${D}" install
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_networkmanager ${D}/etc/default/volatiles
+ install -d ${D}/etc/init.d/
+ install -m 0755 ${WORKDIR}/NetworkManager ${D}/etc/init.d/
+ install -d ${D}/${datadir}/
+}
+
+pkg_postinst_${PN} () {
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+/etc/init.d/populate-volatile.sh update
+}
+
+PACKAGES =+ "libnmutil libnmglib"
+
+FILES_libnmutil += "${libdir}/libnm-util.so.*"
+FILES_libnmglib += "${libdir}/libnm_glib.so.*"
+
+FILES_${PN} += "${datadir} \
+ ${sbindir}/* \
+ ${bindir}/* \
+ ${sysconfdir} \
+ ${libexecdir}"
+
+FILES_${PN}-dev += "${incdir} \
+ ${libdir}/*.a \
+ ${libdir}/*.la \
+ ${libdir}/pkgconfig"
+
diff --git a/packages/networkmanager/networkmanager_0.6.5.bb b/packages/networkmanager/networkmanager_0.6.5.bb
new file mode 100644
index 0000000000..e6d21de286
--- /dev/null
+++ b/packages/networkmanager/networkmanager_0.6.5.bb
@@ -0,0 +1,10 @@
+require networkmanager.inc
+
+PR = "r0"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.6/NetworkManager-${PV}.tar.bz2 \
+ file://NetworkManager \
+ file://99_networkmanager"
+
+S = "${WORKDIR}/NetworkManager-${PV}/"
+
diff --git a/packages/networkmanager/networkmanager_svn.bb b/packages/networkmanager/networkmanager_svn.bb
new file mode 100644
index 0000000000..d879381975
--- /dev/null
+++ b/packages/networkmanager/networkmanager_svn.bb
@@ -0,0 +1,14 @@
+require networkmanager.inc
+
+PV = "0.6.5+svn${SRCDATE}"
+PR = "r0"
+
+SRC_URI="svn://svn.gnome.org/svn/NetworkManager/branches;module=NETWORKMANAGER_0_6_0_RELEASE;proto=http \
+ file://NetworkManager \
+ file://99_networkmanager"
+
+DEFAULT_PREFERENCE = "-1"
+
+S = "${WORKDIR}/NETWORKMANAGER_0_6_0_RELEASE"
+
+
diff --git a/packages/nfs-utils/files/nfsserver b/packages/nfs-utils/files/nfsserver
index 1f1794f760..4ff75916d0 100644
--- a/packages/nfs-utils/files/nfsserver
+++ b/packages/nfs-utils/files/nfsserver
@@ -53,7 +53,7 @@ create_directories(){
#mountd
start_mountd(){
echo -n 'starting mountd: '
- start-stop-daemon --start --exec "$NFS_MOUNTD" -- "$@"
+ start-stop-daemon --start --exec "$NFS_MOUNTD" -- "-f /etc/exports $@"
echo done
}
stop_mountd(){
diff --git a/packages/nfs-utils/nfs-utils_1.0.6.bb b/packages/nfs-utils/nfs-utils_1.0.6.bb
index 8ca082114e..a941843488 100644
--- a/packages/nfs-utils/nfs-utils_1.0.6.bb
+++ b/packages/nfs-utils/nfs-utils_1.0.6.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "userspace utilities for kernel nfs"
PRIORITY = "optional"
SECTION = "console/network"
LICENSE = "GPL"
-PR = "r8"
+PR = "r9"
SRC_URI = "${SOURCEFORGE_MIRROR}/nfs/nfs-utils-${PV}.tar.gz \
file://acinclude-lossage.patch;patch=1 \
diff --git a/packages/nonworking/angstrom/.mtn2git_empty b/packages/nonworking/angstrom/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/angstrom/.mtn2git_empty
diff --git a/packages/nonworking/angstrom/angstrom-e-image.bb b/packages/nonworking/angstrom/angstrom-e-image.bb
new file mode 100644
index 0000000000..6db89788ce
--- /dev/null
+++ b/packages/nonworking/angstrom/angstrom-e-image.bb
@@ -0,0 +1,36 @@
+#Angstrom e image
+LICENSE = "MIT"
+PR = "r1"
+
+
+PREFERRED_PROVIDER_virtual/evas ?= "evas-x11"
+PREFERRED_PROVIDER_virtual/ecore ?= "ecore-x11"
+PREFERRED_PROVIDER_virtual/imlib2 ?= "imlib2-x11"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+
+PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+PREFERRED_PROVIDER_virtual/libxine ?= "libxine-x11"
+
+ANGSTROM_EXTRA_INSTALL ?= ""
+XSERVER ?= "xserver-kdrive-fbdev"
+
+export IMAGE_BASENAME = "e-image"
+
+DEPENDS = "task-base"
+RDEPENDS = "\
+ ${XSERVER} \
+ task-base-extended \
+ angstrom-e-base-depends \
+ angstrom-e-depends \
+ angstrom-gpe-task-settings \
+ ${ANGSTROM_EXTRA_INSTALL}"
+
+
+export PACKAGE_INSTALL = "${RDEPENDS}"
+
+#zap root password for release images
+ROOTFS_POSTPROCESS_COMMAND += '${@base_conditional("DISTRO_TYPE", "release", "zap_root_password; ", "",d)}'
+
+inherit image
diff --git a/packages/nonworking/clucene/.mtn2git_empty b/packages/nonworking/clucene/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/clucene/.mtn2git_empty
diff --git a/packages/nonworking/clucene/clucene-0.8.12-pre/.mtn2git_empty b/packages/nonworking/clucene/clucene-0.8.12-pre/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/clucene/clucene-0.8.12-pre/.mtn2git_empty
diff --git a/packages/clucene/clucene-0.8.12-pre/compile-fix.patch b/packages/nonworking/clucene/clucene-0.8.12-pre/compile-fix.patch
index 5f6c8f1911..5f6c8f1911 100644
--- a/packages/clucene/clucene-0.8.12-pre/compile-fix.patch
+++ b/packages/nonworking/clucene/clucene-0.8.12-pre/compile-fix.patch
diff --git a/packages/clucene/clucene_0.8.12-pre.bb b/packages/nonworking/clucene/clucene_0.8.12-pre.bb
index 2c8122c921..2c8122c921 100644
--- a/packages/clucene/clucene_0.8.12-pre.bb
+++ b/packages/nonworking/clucene/clucene_0.8.12-pre.bb
diff --git a/packages/nonworking/efl/.mtn2git_empty b/packages/nonworking/efl/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/.mtn2git_empty
diff --git a/packages/nonworking/efl/e/.mtn2git_empty b/packages/nonworking/efl/e/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/e/.mtn2git_empty
diff --git a/packages/efl/e/fix-configure.patch b/packages/nonworking/efl/e/fix-configure.patch
index 02560fd7ab..02560fd7ab 100644
--- a/packages/efl/e/fix-configure.patch
+++ b/packages/nonworking/efl/e/fix-configure.patch
diff --git a/packages/efl/ecore-fb_0.9.9.037.bb b/packages/nonworking/efl/ecore-fb_0.9.9.038.bb
index b856d38bd9..b856d38bd9 100644
--- a/packages/efl/ecore-fb_0.9.9.037.bb
+++ b/packages/nonworking/efl/ecore-fb_0.9.9.038.bb
diff --git a/packages/efl/ecore-native_0.9.9.037.bb b/packages/nonworking/efl/ecore-native_0.9.9.038.bb
index 7d7ed2370a..7d7ed2370a 100644
--- a/packages/efl/ecore-native_0.9.9.037.bb
+++ b/packages/nonworking/efl/ecore-native_0.9.9.038.bb
diff --git a/packages/efl/ecore-x11_0.9.9.037.bb b/packages/nonworking/efl/ecore-x11_0.9.9.038.bb
index 1deb641326..1deb641326 100644
--- a/packages/efl/ecore-x11_0.9.9.037.bb
+++ b/packages/nonworking/efl/ecore-x11_0.9.9.038.bb
diff --git a/packages/nonworking/efl/ecore.inc b/packages/nonworking/efl/ecore.inc
new file mode 100644
index 0000000000..60c18cacc3
--- /dev/null
+++ b/packages/nonworking/efl/ecore.inc
@@ -0,0 +1,46 @@
+DESCRIPTION = "Ecore is the core event abstraction layer for the enlightenment \
+foundation libraries. It makes makes doing selections, drag and drop, event loops, \
+timeouts and idle handlers fast, optimized, and convenient."
+LEAD_SONAME = "libecore.so"
+LICENSE = "MIT"
+# can also have openssl, dbus, iconv
+DEPENDS += "virtual/evas curl eet"
+PROVIDES += "virtual/ecore"
+
+inherit efl
+
+SRC_URI = "http://enlightenment.freedesktop.org/files/ecore-${PV}.tar.gz \
+ file://ecore_kernel_input_header.patch;patch=1 \
+ ${E_CVS};module=e17/libs/ecore/m4;date=20070501"
+# file://fix-tslib-configure.patch;patch=1 \
+# file://configure.patch;patch=1 \
+
+S = "${WORKDIR}/ecore-${PV}"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ecore"
+
+EXTRA_OECONF = "<override me>"
+
+libraries = ""
+headers = ""
+parts = "<override me>"
+
+do_configure_prepend() {
+ if [ -e "${WORKDIR}/m4" ]; then
+ install -d "${S}/m4"
+ install "${WORKDIR}/m4/"*.m4 "${S}/m4"
+ aclocal -I m4
+ fi
+}
+
+do_stage_append() {
+ for p in ${parts}; do
+ dir=`echo $p|tr A-Z a-z`
+ install -m 0644 ${S}/src/lib/$dir/$p*.h ${STAGING_INCDIR}/
+ oe_libinstall -C src/lib/$dir lib$dir ${STAGING_LIBDIR}/
+ done
+ install -m 0644 ${S}/src/lib/ecore/Ecore_Data.h ${STAGING_INCDIR}/
+# install -m 0644 ${S}/ecore.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+FILES_${PN} += "${libdir}/ecore_config_ipc_ecore.so.*"
+FILES_${PN}-dev += "${libdir}/ecore_config_ipc_ecore.so"
diff --git a/packages/nonworking/efl/ecore/.mtn2git_empty b/packages/nonworking/efl/ecore/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/ecore/.mtn2git_empty
diff --git a/packages/nonworking/efl/ecore/add-tslib-support.patch b/packages/nonworking/efl/ecore/add-tslib-support.patch
new file mode 100644
index 0000000000..c125122a91
--- /dev/null
+++ b/packages/nonworking/efl/ecore/add-tslib-support.patch
@@ -0,0 +1,104 @@
+
+#
+# tslib support for ecore, (C) Michael 'Mickey' Lauer <mickey@Vanille.de>
+#
+
+--- ecore/src/lib/ecore_fb/ecore_fb.c~add-tslib-support.patch
++++ ecore/src/lib/ecore_fb/ecore_fb.c
+@@ -4,6 +4,13 @@
+ #include "Ecore_Fb.h"
+ #include "ecore_private.h"
+
++
++#ifdef HAVE_TSLIB
++#include <tslib.h>
++#include <errno.h>
++#endif
++
++
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <stdio.h>
+@@ -77,6 +84,11 @@
+ unsigned char z;
+ };
+
++#ifdef HAVE_TSLIB
++struct tsdev *_ecore_fb_tslib_tsdev = NULL;
++struct ts_sample _ecore_fb_tslib_event;
++#endif
++
+ static void _ecore_fb_size_get(int *w, int *h);
+ static int _ecore_fb_ts_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
+ static int _ecore_fb_kbd_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
+@@ -269,10 +281,39 @@
+ ecore_fb_init(const char *name __UNUSED__)
+ {
+ int prev_flags;
++#ifdef HAVE_TSLIB
++ char *tslib_tsdevice = NULL;
++#endif
+
+ _ecore_fb_init_count++;
+ if (_ecore_fb_init_count > 1) return _ecore_fb_init_count;
++#ifdef HAVE_TSLIB
++ if ( ( tslib_tsdevice = getenv("TSLIB_TSDEVICE") ) != NULL )
++ {
++ printf( "ECORE_FB: TSLIB_TSDEVICE = '%s'\n", tslib_tsdevice );
++ _ecore_fb_tslib_tsdev = ts_open( tslib_tsdevice, 1 ); /* 1 = nonblocking, 0 = blocking */
++
++ if ( !_ecore_fb_tslib_tsdev )
++ {
++ printf( "ECORE_FB: Can't ts_open (%s)\n", strerror( errno ) );
++ return 0;
++ }
++
++ if ( ts_config( _ecore_fb_tslib_tsdev ) )
++ {
++ printf( "ECORE_FB: Can't ts_config (%s)\n", strerror( errno ) );
++ return 0;
++ }
++ _ecore_fb_ts_fd = ts_fd( _ecore_fb_tslib_tsdev );
++ if ( _ecore_fb_ts_fd < 0 )
++ {
++ printf( "ECORE_FB: Can't open touchscreen (%s)\n", strerror( errno ) );
++ return 0;
++ }
++ }
++#else
+ _ecore_fb_ts_fd = open("/dev/touchscreen/0", O_RDONLY);
++#endif
+ if (_ecore_fb_ts_fd >= 0)
+ {
+ prev_flags = fcntl(_ecore_fb_ts_fd, F_GETFL);
+@@ -790,7 +831,21 @@
+ char *ptr;
+ double t;
+ int did_triple = 0;
+-
++
++#ifdef HAVE_TSLIB
++ if ( _ecore_fb_ts_apply_cal )
++ num = ts_read_raw( _ecore_fb_tslib_tsdev, &_ecore_fb_tslib_event, 1 );
++ else
++ num = ts_read( _ecore_fb_tslib_tsdev, &_ecore_fb_tslib_event, 1 );
++ if ( num != 1 )
++ {
++ return 1; /* no more samples at this time */
++ }
++ x = _ecore_fb_tslib_event.x;
++ y = _ecore_fb_tslib_event.y;
++ pressure = _ecore_fb_tslib_event.pressure;
++ v = 1; /* loop, there might be more samples */
++#else
+ ptr = (char *)&(_ecore_fb_ts_event);
+ ptr += _ecore_fb_ts_event_byte_count;
+ num = sizeof(Ecore_Fb_Ts_Event) - _ecore_fb_ts_event_byte_count;
+@@ -811,6 +866,7 @@
+ y = _ecore_fb_ts_event.y;
+ }
+ pressure = _ecore_fb_ts_event.pressure;
++#endif
+ /* add event to queue */
+ /* always add a move event */
+ if ((pressure) || (prev_pressure))
diff --git a/packages/nonworking/efl/ecore/configure-abstract-sockets.patch b/packages/nonworking/efl/ecore/configure-abstract-sockets.patch
new file mode 100644
index 0000000000..359203b163
--- /dev/null
+++ b/packages/nonworking/efl/ecore/configure-abstract-sockets.patch
@@ -0,0 +1,16 @@
+Index: ecore-0.9.9.038/configure.in
+===================================================================
+--- ecore-0.9.9.038.orig/configure.in
++++ ecore-0.9.9.038/configure.in
+@@ -541,10 +541,7 @@ AC_ARG_ENABLE(abstract-sockets,
+ [ want_abstract_sockets="yes"]
+ )
+ if test "x$want_abstract_sockets" = "xyes"; then
+- AC_ABSTRACT_SOCKET_TEST(
+- [AC_DEFINE(HAVE_ABSTRACT_SOCKETS, 1, [Have abstract sockets namespace])],
+- []
+- )
++ HAVE_ABSTRACT_SOCKETS = 1
+ fi
+
+ ECORE_CHECK_MODULE([Con], [yes])
diff --git a/packages/nonworking/efl/ecore/configure.patch b/packages/nonworking/efl/ecore/configure.patch
new file mode 100644
index 0000000000..23d8193b44
--- /dev/null
+++ b/packages/nonworking/efl/ecore/configure.patch
@@ -0,0 +1,21 @@
+--- ecore-0.9.9.036/configure.in.bak 2006-11-13 14:01:10.000000000 -0800
++++ ecore-0.9.9.036/configure.in 2006-11-13 14:02:15.000000000 -0800
+@@ -16,7 +16,6 @@
+ AC_CHECK_SIZEOF(long, 4)
+ AM_ENABLE_SHARED
+ AM_PROG_LIBTOOL
+-AC_C___ATTRIBUTE__
+
+ if test "x${bindir}" = 'xNONE'; then
+ if test "x${prefix}" = "xNONE"; then
+@@ -200,9 +199,7 @@
+ AM_CONDITIONAL(BUILD_ECORE_X, true)
+ AC_DEFINE(BUILD_ECORE_X, 1, [Build Ecore_X Module])
+ have_ecore_x="yes"
+- x_dir=${x_dir:-/usr/X11R6}
+- x_cflags=${x_cflags:--I${x_includes:-$x_dir/include}}
+- x_libs="${x_libs:--L${x_libraries:-$x_dir/lib}} -lX11 -lXext"
++ x_libs="-lX11 -lXext"
+ ecore_x_libs="-lecore_x $x_libs";
+ ],[
+ AM_CONDITIONAL(BUILD_ECORE_X, false)
diff --git a/packages/nonworking/efl/ecore/ecore_kernel_input_header.patch b/packages/nonworking/efl/ecore/ecore_kernel_input_header.patch
new file mode 100644
index 0000000000..99f57ddcff
--- /dev/null
+++ b/packages/nonworking/efl/ecore/ecore_kernel_input_header.patch
@@ -0,0 +1,23 @@
+Index: ecore-0.9.9.036/src/lib/ecore_fb/ecore_fb_li.c
+===================================================================
+--- ecore-0.9.9.036.orig/src/lib/ecore_fb/ecore_fb_li.c 2006-09-05 01:36:43.000000000 +0100
++++ ecore-0.9.9.036/src/lib/ecore_fb/ecore_fb_li.c 2006-12-02 21:55:54.000000000 +0000
+@@ -1,6 +1,18 @@
+ #include "Ecore_Fb.h"
+ #include "ecore_fb_private.h"
+
++struct input_absinfo {
++ __s32 value;
++ __s32 minimum;
++ __s32 maximum;
++ __s32 fuzz;
++ __s32 flat;
++};
++
++
++#define EV_SYN 0x00
++#define EV_PWR 0x16
++#define EV_FF_STATUS 0x17
+
+ /* Copyright (C) Brad Hards (1999-2002).
+ * this macro is used to tell if "bit" is set in "array"
diff --git a/packages/efl/ecore/fix-tslib-configure.patch b/packages/nonworking/efl/ecore/fix-tslib-configure.patch
index 2c82b2741e..2c82b2741e 100644
--- a/packages/efl/ecore/fix-tslib-configure.patch
+++ b/packages/nonworking/efl/ecore/fix-tslib-configure.patch
diff --git a/packages/nonworking/efl/ecore/remove-bad-code.patch b/packages/nonworking/efl/ecore/remove-bad-code.patch
new file mode 100644
index 0000000000..87a8d16bd6
--- /dev/null
+++ b/packages/nonworking/efl/ecore/remove-bad-code.patch
@@ -0,0 +1,36 @@
+Index: ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_private.h
+===================================================================
+--- ecore-0.9.9.037.orig/src/lib/ecore_fb/ecore_fb_private.h
++++ ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_private.h
+@@ -19,8 +19,8 @@
+ #define kernel_ulong_t unsigned long
+ #define BITS_PER_LONG 32
+ #include <linux/input.h>
+- #undef kernel_ulong_t <-added
+- #undef BITS_PER_LONG <-added
++ #undef kernel_ulong_t
++ #undef BITS_PER_LONG
+ #else
+ #include <linux/input.h>
+ #endif
+Index: ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_li.c
+===================================================================
+--- ecore-0.9.9.037.orig/src/lib/ecore_fb/ecore_fb_li.c
++++ ecore-0.9.9.037/src/lib/ecore_fb/ecore_fb_li.c
+@@ -1,6 +1,6 @@
+ #include "Ecore_Fb.h"
+ #include "ecore_fb_private.h"
+-
++/*
+ struct input_absinfo {
+ __s32 value;
+ __s32 minimum;
+@@ -8,7 +8,7 @@ struct input_absinfo {
+ __s32 fuzz;
+ __s32 flat;
+ };
+-
++*/
+
+ #define EV_SYN 0x00
+ #define EV_PWR 0x16
diff --git a/packages/efl/ecore/remove-tslib-configure.patch b/packages/nonworking/efl/ecore/remove-tslib-configure.patch
index 40ed1c2c33..40ed1c2c33 100644
--- a/packages/efl/ecore/remove-tslib-configure.patch
+++ b/packages/nonworking/efl/ecore/remove-tslib-configure.patch
diff --git a/packages/nonworking/efl/edb-native/.mtn2git_empty b/packages/nonworking/efl/edb-native/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/edb-native/.mtn2git_empty
diff --git a/packages/efl/edb-native/no-gtk-forkbomb.patch b/packages/nonworking/efl/edb-native/no-gtk-forkbomb.patch
index 8fe226846e..8fe226846e 100644
--- a/packages/efl/edb-native/no-gtk-forkbomb.patch
+++ b/packages/nonworking/efl/edb-native/no-gtk-forkbomb.patch
diff --git a/packages/efl/edb-native_1.0.5.007.bb b/packages/nonworking/efl/edb-native_1.0.5.007.bb
index f3f94086ce..f3f94086ce 100644
--- a/packages/efl/edb-native_1.0.5.007.bb
+++ b/packages/nonworking/efl/edb-native_1.0.5.007.bb
diff --git a/packages/efl/edb-utils_1.0.5.007.bb b/packages/nonworking/efl/edb-utils_1.0.5.007.bb
index 8d47e068a7..8d47e068a7 100644
--- a/packages/efl/edb-utils_1.0.5.007.bb
+++ b/packages/nonworking/efl/edb-utils_1.0.5.007.bb
diff --git a/packages/efl/edb_1.0.5.007.bb b/packages/nonworking/efl/edb_1.0.5.007.bb
index 9632fc4acc..9632fc4acc 100644
--- a/packages/efl/edb_1.0.5.007.bb
+++ b/packages/nonworking/efl/edb_1.0.5.007.bb
diff --git a/packages/nonworking/efl/edje-native_0.5.0.038.bb b/packages/nonworking/efl/edje-native_0.5.0.038.bb
new file mode 100644
index 0000000000..4e878ab204
--- /dev/null
+++ b/packages/nonworking/efl/edje-native_0.5.0.038.bb
@@ -0,0 +1,20 @@
+require edje_${PV}.bb
+PR = "r4"
+
+inherit native
+
+DEPENDS = "evas-native ecore-native eet-native embryo-native"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/edje"
+
+do_configure_prepend() {
+ sed -i 's:EMBRYO_PREFIX"/bin:"${STAGING_BINDIR}:' ${S}/src/bin/edje_cc_out.c
+ sed -i 's:cpp -I:/usr/bin/cpp -I:' ${S}/src/bin/edje_cc_parse.c
+ sed -i 's:gcc -I:/usr/bin/gcc -I:' ${S}/src/bin/edje_cc_parse.c
+}
+
+do_install_append() {
+ edje_data_dir=`${S}/edje-config --datadir`
+ # could also use ${STAGING_DATADIR}/edje/include
+ install -d $edje_data_dir/include
+ install -m 0644 data/include/edje.inc $edje_data_dir/include
+}
diff --git a/packages/efl/edje-utils_0.5.0.037.bb b/packages/nonworking/efl/edje-utils_0.5.0.038.bb
index f8eb917e4d..f8eb917e4d 100644
--- a/packages/efl/edje-utils_0.5.0.037.bb
+++ b/packages/nonworking/efl/edje-utils_0.5.0.038.bb
diff --git a/packages/efl/edje_0.5.0.037.bb b/packages/nonworking/efl/edje_0.5.0.038.bb
index d51dd119e4..d51dd119e4 100644
--- a/packages/efl/edje_0.5.0.037.bb
+++ b/packages/nonworking/efl/edje_0.5.0.038.bb
diff --git a/packages/efl/eet-native_0.9.10.037.bb b/packages/nonworking/efl/eet-native_0.9.10.038.bb
index 9e2426ca9f..9e2426ca9f 100644
--- a/packages/efl/eet-native_0.9.10.037.bb
+++ b/packages/nonworking/efl/eet-native_0.9.10.038.bb
diff --git a/packages/efl/eet_0.9.10.037.bb b/packages/nonworking/efl/eet_0.9.10.038.bb
index 6e6032e098..6e6032e098 100644
--- a/packages/efl/eet_0.9.10.037.bb
+++ b/packages/nonworking/efl/eet_0.9.10.038.bb
diff --git a/packages/nonworking/efl/efl.bbclass b/packages/nonworking/efl/efl.bbclass
new file mode 100644
index 0000000000..808bf2eaae
--- /dev/null
+++ b/packages/nonworking/efl/efl.bbclass
@@ -0,0 +1,52 @@
+inherit e
+
+SECTION = "e/libs"
+
+SRCNAME = "${@bb.data.getVar('PN', d, 1).replace('-native', '')}"
+SRC_URI = "${E_URI}/${SRCNAME}-${PV}.tar.gz"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+INHIBIT_AUTO_STAGE_INCLUDES = "1"
+INHIBIT_NATIVE_STAGE_INSTALL = "1"
+
+libdirectory = "src/lib"
+libraries = "lib${SRCNAME}"
+headers = "${@bb.data.getVar('SRCNAME',d,1).capitalize()}.h"
+
+def efl_is_native(d):
+ import bb
+ return ["","-native"][bb.data.inherits_class('native', d)]
+
+do_stage_append () {
+ for i in ${libraries}
+ do
+ oe_libinstall -C ${libdirectory} $i ${STAGING_LIBDIR}
+ done
+ for i in ${headers}
+ do
+ install -m 0644 ${libdirectory}/$i ${STAGING_INCDIR}
+ done
+
+ # Install binaries automatically for native builds
+ if [ "${@efl_is_native(d)}" = "-native" ]
+ then
+
+ # Most EFL binaries start with the package name
+ for i in src/bin/${SRCNAME}*
+ do
+ if [ -x $i -a -f $i ]
+ then
+
+ # Don't install anything with an extension (.so, etc)
+ if echo $i | grep -v \\.
+ then
+ ${HOST_SYS}-libtool --mode=install install -m 0755 $i ${STAGING_BINDIR}
+ fi
+ fi
+ done
+ fi
+}
+
+PACKAGES = "${PN}-dbg ${PN} ${PN}-themes ${PN}-dev ${PN}-examples"
+FILES_${PN}-dev += "${bindir}/${PN}-config ${libdir}/pkgconfig ${libdir}/lib*.?a ${libdir}/lib*.a"
+FILES_${PN}-examples = "${bindir} ${datadir}"
diff --git a/packages/nonworking/efl/efreet-native_0.0.3.002.bb b/packages/nonworking/efl/efreet-native_0.0.3.002.bb
new file mode 100644
index 0000000000..470d9e2dab
--- /dev/null
+++ b/packages/nonworking/efl/efreet-native_0.0.3.002.bb
@@ -0,0 +1,3 @@
+require efreet_${PV}.bb
+inherit native
+DEPENDS = "ecore-native"
diff --git a/packages/nonworking/efl/efreet_0.0.3.002.bb b/packages/nonworking/efl/efreet_0.0.3.002.bb
new file mode 100644
index 0000000000..2ef049eed7
--- /dev/null
+++ b/packages/nonworking/efl/efreet_0.0.3.002.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "An implementation of freedesktop.org specs for the EFL"
+DEPENDS = "virtual/ecore"
+LICENSE = "BSD"
+PR = "r0"
+
+inherit efl
+
+headers += "efreet_base.h efreet_desktop.h efreet_icon.h efreet_ini.h efreet_menu.h efreet_private.h efreet_utils.h efreet_xml.h"
diff --git a/packages/efl/embryo-native_0.9.1.037.bb b/packages/nonworking/efl/embryo-native_0.9.1.038.bb
index 76fe80fe3d..76fe80fe3d 100644
--- a/packages/efl/embryo-native_0.9.1.037.bb
+++ b/packages/nonworking/efl/embryo-native_0.9.1.038.bb
diff --git a/packages/efl/embryo-utils_0.9.1.037.bb b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb
index d507c53cce..d507c53cce 100644
--- a/packages/efl/embryo-utils_0.9.1.037.bb
+++ b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb
diff --git a/packages/efl/embryo_0.9.1.037.bb b/packages/nonworking/efl/embryo_0.9.1.038.bb
index 0009c0a149..0009c0a149 100644
--- a/packages/efl/embryo_0.9.1.037.bb
+++ b/packages/nonworking/efl/embryo_0.9.1.038.bb
diff --git a/packages/efl/emotion_20061116.bb b/packages/nonworking/efl/emotion_20061116.bb
index 59a3fa7269..59a3fa7269 100644
--- a/packages/efl/emotion_20061116.bb
+++ b/packages/nonworking/efl/emotion_20061116.bb
diff --git a/packages/efl/engrave_20060128.bb b/packages/nonworking/efl/engrave_20060128.bb
index 63eb24eb1f..63eb24eb1f 100644
--- a/packages/efl/engrave_20060128.bb
+++ b/packages/nonworking/efl/engrave_20060128.bb
diff --git a/packages/efl/epdf_20060418.bb b/packages/nonworking/efl/epdf_20060418.bb
index 9f7bd0a255..9f7bd0a255 100644
--- a/packages/efl/epdf_20060418.bb
+++ b/packages/nonworking/efl/epdf_20060418.bb
diff --git a/packages/efl/epeg_0.9.0.007.bb b/packages/nonworking/efl/epeg_0.9.0.008.bb
index c35ec63606..c35ec63606 100644
--- a/packages/efl/epeg_0.9.0.007.bb
+++ b/packages/nonworking/efl/epeg_0.9.0.008.bb
diff --git a/packages/nonworking/efl/epsilon/.mtn2git_empty b/packages/nonworking/efl/epsilon/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/epsilon/.mtn2git_empty
diff --git a/packages/nonworking/efl/epsilon/compile-fix.patch b/packages/nonworking/efl/epsilon/compile-fix.patch
new file mode 100644
index 0000000000..1c42cc59c4
--- /dev/null
+++ b/packages/nonworking/efl/epsilon/compile-fix.patch
@@ -0,0 +1,15 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- epsilon-0.3.0.004/src/lib/exiftags/exif.c~compile-fix
++++ epsilon-0.3.0.004/src/lib/exiftags/exif.c
+@@ -48,7 +48,6 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <errno.h>
+-#include <math.h>
+ #include <float.h>
+ #include <ctype.h>
+
diff --git a/packages/nonworking/efl/epsilon/server-is-not-client.patch b/packages/nonworking/efl/epsilon/server-is-not-client.patch
new file mode 100644
index 0000000000..e96e528b9e
--- /dev/null
+++ b/packages/nonworking/efl/epsilon/server-is-not-client.patch
@@ -0,0 +1,11 @@
+--- /tmp/epsilon_private.h 2006-12-01 12:06:30.000000000 +0100
++++ epsilon-0.3.0.007/src/include/epsilon_private.h 2006-12-01 12:07:10.928254000 +0100
+@@ -41,7 +41,7 @@
+ Epsilon_Message *epsilon_message_new(int clientid, char *path, char *dst, int status);
+
+ int epsilon_ipc_client_send(Ecore_Con_Client *cl, Epsilon_Message *msg);
+-int epsilon_ipc_server_send(Ecore_Con_Client *cl, Epsilon_Message *msg);
++int epsilon_ipc_server_send(Ecore_Con_Server *srv, Epsilon_Message *msg);
+
+ Epsilon_Message *epsilon_ipc_consume(Epsilon_Ipc_End *end);
+
diff --git a/packages/nonworking/efl/epsilon_0.3.0.008.bb b/packages/nonworking/efl/epsilon_0.3.0.008.bb
new file mode 100644
index 0000000000..d3c1cba1e4
--- /dev/null
+++ b/packages/nonworking/efl/epsilon_0.3.0.008.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Epsilon is a flexable and powerful image thumbnailing library \
+that is complient with the freedesktop.org Thumbnail Managing Standard."
+LICENSE = "GPL"
+DEPENDS = "imlib2 epeg libpng evas ecore edje perl-native"
+PR = "r0"
+
+inherit efl1
+
+#SRC_URI += "file://compile-fix.patch;patch=1 \
+# ${E_CVS};module=e17/libs/epsilon/m4;date=20060101"
+# file://server-is-not-client.patch;patch=1 \
+
+#do_configure_prepend() {
+# install -d "${S}/m4"
+# install "${WORKDIR}/m4/"*.m4 "${S}/m4"
+# aclocal -I m4
+#}
diff --git a/packages/efl/esmart-fb_0.9.0.007.bb b/packages/nonworking/efl/esmart-fb_0.9.0.008.bb
index a2fab3ca09..a2fab3ca09 100644
--- a/packages/efl/esmart-fb_0.9.0.007.bb
+++ b/packages/nonworking/efl/esmart-fb_0.9.0.008.bb
diff --git a/packages/efl/esmart-x11_0.9.0.007.bb b/packages/nonworking/efl/esmart-x11_0.9.0.008.bb
index 7b80b581a1..7b80b581a1 100644
--- a/packages/efl/esmart-x11_0.9.0.007.bb
+++ b/packages/nonworking/efl/esmart-x11_0.9.0.008.bb
diff --git a/packages/efl/esmart.inc b/packages/nonworking/efl/esmart.inc
index 9b8114de53..9b8114de53 100644
--- a/packages/efl/esmart.inc
+++ b/packages/nonworking/efl/esmart.inc
diff --git a/packages/nonworking/efl/esmart/.mtn2git_empty b/packages/nonworking/efl/esmart/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/esmart/.mtn2git_empty
diff --git a/packages/efl/esmart/compile-fix.patch b/packages/nonworking/efl/esmart/compile-fix.patch
index 08ca835aa7..08ca835aa7 100644
--- a/packages/efl/esmart/compile-fix.patch
+++ b/packages/nonworking/efl/esmart/compile-fix.patch
diff --git a/packages/efl/esmart/disable-x-only-features.patch b/packages/nonworking/efl/esmart/disable-x-only-features.patch
index 68dd363f74..68dd363f74 100644
--- a/packages/efl/esmart/disable-x-only-features.patch
+++ b/packages/nonworking/efl/esmart/disable-x-only-features.patch
diff --git a/packages/efl/esmart/ecore-fix.patch b/packages/nonworking/efl/esmart/ecore-fix.patch
index 94deff0b95..94deff0b95 100644
--- a/packages/efl/esmart/ecore-fix.patch
+++ b/packages/nonworking/efl/esmart/ecore-fix.patch
diff --git a/packages/efl/esmart/include-stdio.patch b/packages/nonworking/efl/esmart/include-stdio.patch
index 20a490f421..20a490f421 100644
--- a/packages/efl/esmart/include-stdio.patch
+++ b/packages/nonworking/efl/esmart/include-stdio.patch
diff --git a/packages/nonworking/efl/etk_0.1.0.003.bb b/packages/nonworking/efl/etk_0.1.0.003.bb
new file mode 100644
index 0000000000..e283adef23
--- /dev/null
+++ b/packages/nonworking/efl/etk_0.1.0.003.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
+DEPENDS = "evas-x11 ecore-x11 edje"
+LICENSE = "MIT"
+PR = "r1"
+
+inherit efl
+
+SRC_URI = "http://enlightenment.freedesktop.org/files/etk-${PV}.tar.gz"
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN} += "${libdir}/etk/engines/*.so"
+FILES_${PN}-dev += "${libdir}/etk/engines/*.a ${libdir}/etk/engines/*.la"
+FILES_${PN}-dbg += "${libdir}/etk/engines/*/.debug/"
+
diff --git a/packages/nonworking/efl/evas-fb_0.9.9.038.bb b/packages/nonworking/efl/evas-fb_0.9.9.038.bb
new file mode 100644
index 0000000000..4acc857982
--- /dev/null
+++ b/packages/nonworking/efl/evas-fb_0.9.9.038.bb
@@ -0,0 +1,47 @@
+require evas.inc
+PR = "r6"
+
+EXTRA_OECONF = "--enable-fb \
+ --disable-directfb \
+ --enable-buffer \
+ --disable-software-qtopia \
+ --disable-software-x11 \
+ --disable-gl-x11 \
+ --disable-xrender-x11 \
+ --enable-image-loader-eet \
+ --disable-image-loader-edb \
+ --enable-image-loader-png \
+ --enable-image-loader-jpeg \
+ --enable-small-dither-mask \
+ --enable-cpu-c \
+ --enable-font-loader-eet \
+ --enable-scale-sample \
+ --enable-scale-smooth \
+ --enable-convert-yuv \
+ --enable-convert-8-rgb-332 \
+ --enable-convert-8-rgb-666 \
+ --enable-convert-8-rgb-232 \
+ --enable-convert-8-rgb-222 \
+ --enable-convert-8-rgb-221 \
+ --enable-convert-8-rgb-121 \
+ --enable-convert-8-rgb-111 \
+ --enable-convert-16-rgb-565 \
+ --enable-convert-16-rgb-555 \
+ --enable-convert-16-rgb-444 \
+ --enable-convert-16-rgb-ipq \
+ --enable-convert-16-rgb-rot-0 \
+ --enable-convert-16-rgb-rot-90 \
+ --enable-convert-16-rgb-rot-270 \
+ --enable-convert-24-rgb-888 \
+ --enable-convert-24-bgr-888 \
+ --enable-convert-32-rgb-8888 \
+ --enable-convert-32-rgbx-8888 \
+ --enable-convert-32-bgr-8888 \
+ --enable-convert-32-bgrx-8888 \
+ --enable-convert-32-rgb-rot-0 \
+ --enable-convert-32-rgb-rot-90 \
+ --enable-convert-32-rgb-rot-270"
+
+headers = "../modules/engines/buffer/Evas_Engine_Buffer.h \
+ ../modules/engines/fb/Evas_Engine_FB.h \
+ Evas.h"
diff --git a/packages/efl/evas-native_0.9.9.037.bb b/packages/nonworking/efl/evas-native_0.9.9.038.bb
index 68dacbc809..68dacbc809 100644
--- a/packages/efl/evas-native_0.9.9.037.bb
+++ b/packages/nonworking/efl/evas-native_0.9.9.038.bb
diff --git a/packages/nonworking/efl/evas-x11_0.9.9.038.bb b/packages/nonworking/efl/evas-x11_0.9.9.038.bb
new file mode 100644
index 0000000000..4c5ef29515
--- /dev/null
+++ b/packages/nonworking/efl/evas-x11_0.9.9.038.bb
@@ -0,0 +1,55 @@
+require evas.inc
+DEPENDS += "edb virtual/libx11 libxext freetype"
+PR = "r10"
+
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-fb \
+ --disable-directfb \
+ --enable-buffer \
+ --disable-software-qtopia \
+ --enable-software-x11 \
+ --enable-software-16-x11 \
+ --disable-gl-x11 \
+ --enable-image-loader-eet \
+ --enable-image-loader-edb \
+ --enable-image-loader-png \
+ --enable-image-loader-jpeg \
+ --enable-small-dither-mask \
+ --enable-cpu-c \
+ --enable-font-loader-eet \
+ --enable-scale-sample \
+ --enable-scale-smooth \
+ --enable-convert-yuv \
+ --disable-image-loader-svg \
+ --disable-convert-8-rgb-332 \
+ --disable-convert-8-rgb-666 \
+ --disable-convert-8-rgb-232 \
+ --disable-convert-8-rgb-222 \
+ --disable-convert-8-rgb-221 \
+ --disable-convert-8-rgb-121 \
+ --disable-convert-8-rgb-111 \
+ --enable-convert-16-rgb-565 \
+ --disable-convert-16-rgb-555 \
+ --disable-convert-16-rgb-444 \
+ --disable-convert-16-rgb-ipq \
+ --enable-convert-16-rgb-rot-0 \
+ --enable-convert-16-rgb-rot-90 \
+ --enable-convert-16-rgb-rot-270 \
+ --disable-convert-24-rgb-888 \
+ --disable-convert-24-bgr-888 \
+ --disable-convert-32-rgb-8888 \
+ --disable-convert-32-rgbx-8888 \
+ --enable-convert-32-bgr-8888 \
+ --enable-convert-32-bgrx-8888 \
+ --disable-convert-32-rgb-rot-0 \
+ --disable-convert-32-rgb-rot-90 \
+ --disable-convert-32-rgb-rot-270"
+
+headers = "../modules/engines/software_x11/Evas_Engine_Software_X11.h \
+ ../modules/engines/software_16_x11/Evas_Engine_Software_16_X11.h \
+ ../modules/engines/xrender_x11/Evas_Engine_XRender_X11.h \
+ ../modules/engines/buffer/Evas_Engine_Buffer.h \
+ ../modules/engines/fb/Evas_Engine_FB.h \
+ Evas.h"
+
diff --git a/packages/nonworking/efl/evas.inc b/packages/nonworking/efl/evas.inc
new file mode 100644
index 0000000000..a175099c31
--- /dev/null
+++ b/packages/nonworking/efl/evas.inc
@@ -0,0 +1,50 @@
+DESCRIPTION = "Evas is a hardware-accelerated canvas API that can draw \
+anti-aliased text, smooth super and sub-images, alpha-blend, as well as drop \
+down to using normal X11 primitives such as pixmaps, lines and rectangles if \
+your CPU or graphics hardware are too slow."
+LICENSE = "MIT"
+# can also depend on valgrind (?)
+DEPENDS = "freetype libpng jpeg eet"
+PROVIDES += "virtual/evas"
+
+inherit efl lib_package
+
+export FREETYPE_CONFIG = "${STAGING_BINDIR_CROSS}/freetype-config"
+
+SRC_URI = "http://enlightenment.freedesktop.org/files/evas-${PV}.tar.gz \
+ file://fix-configure.patch;patch=1 \
+ ${E_CVS};module=e17/libs/evas/m4;date=20060101"
+# file://pagesize.patch;patch=1 \
+
+S = "${WORKDIR}/evas-${PV}"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/evas"
+
+EXTRA_OECONF = "<override me>"
+
+do_configure_prepend() {
+ if [ -e "${WORKDIR}/m4" ]; then
+ install -d "${S}/m4"
+ install "${WORKDIR}/m4/"*.m4 "${S}/m4"
+ aclocal -I m4
+ fi
+}
+
+#do_install_append() {
+# find "${S}" -name .debug -type d | xargs -iBLAH rm -rf "BLAH"
+#}
+
+do_stage_append() {
+ cd src
+ modules=`find modules -name ".libs"`
+ for module in $modules
+ do
+ install -d ${STAGING_LIBDIR}/evas/`dirname $module`/${TARGET_OS}-gnu-${TARGET_ARCH}
+ install -m 0755 $module/module.so ${STAGING_LIBDIR}/evas/`dirname $module`/${TARGET_OS}-gnu-${TARGET_ARCH}/module.so
+ done
+}
+
+headers = "<override me>"
+libraries = "libevas"
+FILES_${PN} += "/usr/lib/evas/modules/*/*/*/*.so"
+FILES_${PN}-dev += "/usr/lib/evas/modules/*/*/*/*.a /usr/lib/evas/modules/*/*/*/*.la"
+FILES_${PN}-dbg += "/usr/lib/evas/modules/*/*/*/.debug/"
diff --git a/packages/nonworking/efl/evas/.mtn2git_empty b/packages/nonworking/efl/evas/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/evas/.mtn2git_empty
diff --git a/packages/nonworking/efl/evas/fix-configure.patch b/packages/nonworking/efl/evas/fix-configure.patch
new file mode 100644
index 0000000000..abf9b94bdf
--- /dev/null
+++ b/packages/nonworking/efl/evas/fix-configure.patch
@@ -0,0 +1,36 @@
+diff -Nur evas-0.9.9.037~/configure.in evas-0.9.9.037/configure.in
+--- evas-0.9.9.037~/configure.in 2007-01-14 20:09:57.000000000 -0800
++++ evas-0.9.9.037/configure.in 2007-01-14 20:11:09.000000000 -0800
+@@ -161,9 +161,7 @@
+ AC_CHECK_HEADER(X11/X.h,
+ [
+ AC_DEFINE(BUILD_ENGINE_SOFTWARE_X11, 1, [Software X11 Rendering Backend])
+- x_dir=${x_dir:-/usr/X11R6}
+- x_cflags=${x_cflags:--I${x_includes:-$x_dir/include}}
+- x_libs="${x_libs:--L${x_libraries:-$x_dir/lib}} -lX11 -lXext"
++ x_libs="-lX11 -lXext"
+ ],
+ [
+ AC_MSG_RESULT(disabling software X11 engine)
+@@ -407,10 +405,10 @@
+ AC_DEFINE(BUILD_ENGINE_GL_X11, 1, [OpenGL X11 Rendering Backend])
+ AM_CONDITIONAL(BUILD_ENGINE_GL_COMMON, true)
+ AC_DEFINE(BUILD_ENGINE_GL_COMMON, 1, [Generic OpenGL Rendering Support])
+- x_dir=${x_dir:-/usr/X11R6};
++ x_dir=${x_dir:-};
+ x_cflags=${x_cflags:--I$x_dir/include}
+ x_libs="${x_libs:--L$x_dir/lib -lX11 -lXext}"
+- gl_cflags="-I/usr/include"
++ gl_cflags=""
+ gl_libs="-lGL -lGLU -lpthread"
+ gl_dir=""
+ ], [
+@@ -471,7 +469,7 @@
+ AC_DEFINE(BUILD_ENGINE_CAIRO_X11, 1, [Cairo X11 Rendering Backend])
+ AM_CONDITIONAL(BUILD_ENGINE_CAIRO_COMMON, true)
+ AC_DEFINE(BUILD_ENGINE_CAIRO_COMMON, 1, [Generic Cairo Rendering Support])
+- x_dir="/usr/X11R6";
++ x_dir="";
+ x_cflags="-I"$x_dir"/include"
+ x_libs="-L"$x_dir"/lib -lX11 -lXext"
+ ], [
diff --git a/packages/nonworking/efl/evas/pagesize.patch b/packages/nonworking/efl/evas/pagesize.patch
new file mode 100644
index 0000000000..5efd16a96e
--- /dev/null
+++ b/packages/nonworking/efl/evas/pagesize.patch
@@ -0,0 +1,13 @@
+diff --git a/src/modules/engines/fb/evas_fb_main.c b/src/modules/engines/fb/evas_fb_main.c
+index e26c171..75e0743 100644
+--- a/src/modules/engines/fb/evas_fb_main.c
++++ b/src/modules/engines/fb/evas_fb_main.c
+@@ -530,7 +530,7 @@ fb_postinit(FB_Mode *mode)
+ fb_cleanup();
+ exit(1);
+ }
+- mode->mem_offset = (unsigned)(fb_fix.smem_start) & (~PAGE_MASK);
++ mode->mem_offset = (unsigned)(fb_fix.smem_start) & (getpagesize()-1);
+ mode->mem = (unsigned char *)mmap(NULL, fb_fix.smem_len + mode->mem_offset,
+ PROT_WRITE | PROT_READ, MAP_SHARED, fb, 0);
+ if ((int)mode->mem == -1)
diff --git a/packages/nonworking/efl/ewl/.mtn2git_empty b/packages/nonworking/efl/ewl/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/ewl/.mtn2git_empty
diff --git a/packages/efl/ewl/ewl-configure.patch b/packages/nonworking/efl/ewl/ewl-configure.patch
index a754e0f819..a754e0f819 100644
--- a/packages/efl/ewl/ewl-configure.patch
+++ b/packages/nonworking/efl/ewl/ewl-configure.patch
diff --git a/packages/efl/ewl/minmax.patch b/packages/nonworking/efl/ewl/minmax.patch
index cd8723e9a3..cd8723e9a3 100644
--- a/packages/efl/ewl/minmax.patch
+++ b/packages/nonworking/efl/ewl/minmax.patch
diff --git a/packages/efl/ewl/no-examples.patch b/packages/nonworking/efl/ewl/no-examples.patch
index 402c50894c..402c50894c 100644
--- a/packages/efl/ewl/no-examples.patch
+++ b/packages/nonworking/efl/ewl/no-examples.patch
diff --git a/packages/efl/ewl_0.0.4.007.bb b/packages/nonworking/efl/ewl_0.5.1.008.bb
index 3a9313cb59..3a9313cb59 100644
--- a/packages/efl/ewl_0.0.4.007.bb
+++ b/packages/nonworking/efl/ewl_0.5.1.008.bb
diff --git a/packages/nonworking/efl/files/.mtn2git_empty b/packages/nonworking/efl/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/efl/files/.mtn2git_empty
diff --git a/packages/efl/files/pkg.m4 b/packages/nonworking/efl/files/pkg.m4
index c80e0acfc4..c80e0acfc4 100644
--- a/packages/efl/files/pkg.m4
+++ b/packages/nonworking/efl/files/pkg.m4
diff --git a/packages/nonworking/efl/imlib2-fb_1.3.0.001.bb b/packages/nonworking/efl/imlib2-fb_1.3.0.001.bb
new file mode 100644
index 0000000000..f2ee48f5d9
--- /dev/null
+++ b/packages/nonworking/efl/imlib2-fb_1.3.0.001.bb
@@ -0,0 +1,6 @@
+require imlib2.inc
+PR = "r2"
+
+EXTRA_OECONF = "--without-x \
+ --disable-mmx"
+
diff --git a/packages/nonworking/efl/imlib2-native_1.3.0.001.bb b/packages/nonworking/efl/imlib2-native_1.3.0.001.bb
new file mode 100644
index 0000000000..65c5b672b2
--- /dev/null
+++ b/packages/nonworking/efl/imlib2-native_1.3.0.001.bb
@@ -0,0 +1,8 @@
+require imlib2.inc
+inherit native
+PROVIDES = "imlib2-native"
+DEPENDS = "freetype-native libpng-native jpeg-native"
+PR = "r2"
+
+EXTRA_OECONF = "--disable-mmx \
+ --without-x"
diff --git a/packages/nonworking/efl/imlib2-x11_1.3.0.001.bb b/packages/nonworking/efl/imlib2-x11_1.3.0.001.bb
new file mode 100644
index 0000000000..67ed947e08
--- /dev/null
+++ b/packages/nonworking/efl/imlib2-x11_1.3.0.001.bb
@@ -0,0 +1,8 @@
+require imlib2.inc
+DEPENDS += "virtual/libx11 libxext"
+PR = "r3"
+
+EXTRA_OECONF = "--disable-mmx \
+ --with-x \
+ --x-includes=${STAGING_INCDIR} \
+ --x-libraries=${STAGING_LIBDIR}"
diff --git a/packages/nonworking/efl/imlib2.inc b/packages/nonworking/efl/imlib2.inc
new file mode 100644
index 0000000000..6a040c5386
--- /dev/null
+++ b/packages/nonworking/efl/imlib2.inc
@@ -0,0 +1,58 @@
+DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation."
+LICENSE = "BSD"
+# can also depend on tiff34, ungif or gif, z, bz2, id3tag
+DEPENDS = "freetype libpng jpeg"
+PROVIDES += "virtual/imlib2"
+
+inherit efl
+
+SRC_URI = "http://enlightenment.freedesktop.org/files/imlib2-${PV}.tar.gz"
+S = "${WORKDIR}/imlib2-${PV}"
+
+libraries = ""
+headers = ""
+
+do_stage_append() {
+ oe_libinstall -C src/lib libImlib2 ${STAGING_LIBDIR}/
+ install -m 0644 ${S}/src/lib/Imlib2.h ${STAGING_INCDIR}/
+
+ install -d ${STAGING_LIBDIR}/imlib2/loaders
+ for i in src/modules/loaders/.libs/*.so
+ do
+ install -m 0755 $i ${STAGING_LIBDIR}/imlib2/loaders
+ done
+
+ install -d ${STAGING_LIBDIR}/imlib2/filters
+ for i in src/modules/filters/.libs/*.so
+ do
+ install -m 0755 $i ${STAGING_LIBDIR}/imlib2/filters
+ done
+}
+
+do_install() {
+ install -d "${D}${includedir}"
+ oe_libinstall -C src/lib libImlib2 ${D}${libdir}/
+ install -m 0644 ${S}/src/lib/Imlib2.h ${D}${includedir}/
+
+ install -d ${D}${libdir}/imlib2/loaders
+ for i in src/modules/loaders/.libs/*.so
+ do
+ install -m 0755 $i ${D}${libdir}/imlib2/loaders
+ done
+
+ install -d ${D}${libdir}/imlib2/filters
+ for i in src/modules/filters/.libs/*.so
+ do
+ install -m 0755 $i ${D}${libdir}/imlib2/filters
+ done
+}
+
+PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters"
+FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so"
+FILES_${PN}-dbg = "${libdir}/.debug/"
+FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}"
+FILES_imlib2-bin = "${bindir}"
+FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
+FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so"
+FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug"
+FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug"
diff --git a/packages/nonworking/exult/exult_1.2.bb b/packages/nonworking/exult/exult_1.2.bb
index 2158fe5b37..449bc67eaa 100644
--- a/packages/nonworking/exult/exult_1.2.bb
+++ b/packages/nonworking/exult/exult_1.2.bb
@@ -2,15 +2,15 @@ DESCRIPTION = "Exult is a project to create an Ultima 7 game engine that runs on
capable of using the data and graphics files that come with the game. Qt/E based Palmtop Environments Edition w/ SDL"
SECTION = "opie/games"
PRIORITY = "optional"
-DEPENDS = "libsdl-qpe libsdl-mixer zlib"
+DEPENDS = "libsdl-qpe libsdl-mixer zlib freetype"
SRC_URI = "${SOURCEFORGE_MIRROR}/exult/exult-${PV}.tar.gz"
-
inherit autotools
#FIXME: Add compatible host or so, it is zaurus specific atm.
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+
EXTRA_OECONF = "-host=arm-embeddix-linux-gnu \
- --with-sdl-prefix=${STAGING_BINDIR}/.. \
--disable-exult-studio-support \
--disable-debug \
--disable-exult-studio \
@@ -22,7 +22,7 @@ EXTRA_OECONF = "-host=arm-embeddix-linux-gnu \
--disable-kmid \
--with-vorbis-prefix=${STAGING_LIBDIR}/.. \
--with-mpeg2-prefix=${STAGING_LIBDIR}/.. \
- --with-mad-prefix=${STAGING_BINDIR}/.. "
+ --with-mad-prefix=${STAGING_BINDIR_CROSS}/.. "
#CXXFLAGS_append = " -Dmain=SDL_main"
#CFLAGS_append = " -Dmain=SDL_main"
diff --git a/packages/nonworking/libmikey/.mtn2git_empty b/packages/nonworking/libmikey/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/libmikey/.mtn2git_empty
diff --git a/packages/libmikey/libmikey0_0.3.2.bb b/packages/nonworking/libmikey/libmikey0_0.3.2.bb
index 214faef40f..214faef40f 100644
--- a/packages/libmikey/libmikey0_0.3.2.bb
+++ b/packages/nonworking/libmikey/libmikey0_0.3.2.bb
diff --git a/packages/libmikey/libmikey_0.1a.bb b/packages/nonworking/libmikey/libmikey_0.1a.bb
index e00ce25594..e00ce25594 100644
--- a/packages/libmikey/libmikey_0.1a.bb
+++ b/packages/nonworking/libmikey/libmikey_0.1a.bb
diff --git a/packages/nonworking/libmnetutil/.mtn2git_empty b/packages/nonworking/libmnetutil/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/libmnetutil/.mtn2git_empty
diff --git a/packages/libmnetutil/libmnetutil0_0.2.2.bb b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb
index a7866b35ec..a7866b35ec 100644
--- a/packages/libmnetutil/libmnetutil0_0.2.2.bb
+++ b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb
diff --git a/packages/nonworking/libmsip/.mtn2git_empty b/packages/nonworking/libmsip/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/libmsip/.mtn2git_empty
diff --git a/packages/libmsip/libmsip0_0.2.2.bb b/packages/nonworking/libmsip/libmsip0_0.2.2.bb
index 8d8bb905db..8d8bb905db 100644
--- a/packages/libmsip/libmsip0_0.2.2.bb
+++ b/packages/nonworking/libmsip/libmsip0_0.2.2.bb
diff --git a/packages/minisip/minisip_0.6.2.bb b/packages/nonworking/minisip/minisip_0.6.2.bb
index b85007deef..b85007deef 100644
--- a/packages/minisip/minisip_0.6.2.bb
+++ b/packages/nonworking/minisip/minisip_0.6.2.bb
diff --git a/packages/nonworking/minisip/minisip_1.0a.bb b/packages/nonworking/minisip/minisip_1.0a.bb
deleted file mode 100644
index 14ce425b0e..0000000000
--- a/packages/nonworking/minisip/minisip_1.0a.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Minisip is a SIP User Agent"
-SECTION = "opie/network"
-PRIORITY = "optional"
-LICENSE = "GPL"
-DEPENDS = "libmikey libopie1"
-
-SRC_URI = "http://minisip.org/source/minisip-0.1a.tar.gz"
-S = "${WORKDIR}/minisip-0.1"
-
-inherit autotools
-
-EXTRA_OECONF = "--enable-qte --enable-opie"
-
diff --git a/packages/nonworking/nylon/.mtn2git_empty b/packages/nonworking/nylon/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/nylon/.mtn2git_empty
diff --git a/packages/nonworking/nylon/simple-firewall.bb b/packages/nonworking/nylon/simple-firewall.bb
new file mode 100644
index 0000000000..fc7c3de6a3
--- /dev/null
+++ b/packages/nonworking/nylon/simple-firewall.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "simple firewall configuratiopn script"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel"
+#SRCDATE = "20060114"
+SRCDATE = "20070130"
+#SRCDATE = "${TOMORROW}"
+PV = "cvs${SRCDATE}"
+
+SRC_URI = "svn://gruen.4g/svn/trunk/application;module=${PN};proto=http"
+S = "${WORKDIR}/${PN}"
+
+do_install() {
+ (cd ${S}; tar -c --exclude .svn -f - . ) | tar -C ${D} -xpf -
+}
diff --git a/packages/nonworking/redboot-utils/.mtn2git_empty b/packages/nonworking/redboot-utils/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nonworking/redboot-utils/.mtn2git_empty
diff --git a/packages/nslu2-binary-only/unslung-rootfs/mkfs.ext3 b/packages/nslu2-binary-only/unslung-rootfs/mkfs.ext3
new file mode 100755
index 0000000000..49a88c0e06
--- /dev/null
+++ b/packages/nslu2-binary-only/unslung-rootfs/mkfs.ext3
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# Fix obscure problem - redirect stdout iff mkfs.ext3
+# is being invoked by the Linksys GUI format utility.
+#
+u=`/bin/pidof utility.cgi`
+if [ ! -f "/tmp/Preparing" -o "x${u}" = "x" -o \
+ "y${1}" != "y-m" -o "z${2}" != "z1" ]
+then
+ /usr/bin/mke2fs -j $@
+else
+ /usr/bin/mke2fs -j $@ >/tmp/mkfs.$$.log
+fi
diff --git a/packages/nslu2-binary-only/unslung-rootfs/unsling b/packages/nslu2-binary-only/unslung-rootfs/unsling
index 6c4dc4ca52..539a1d2b58 100755
--- a/packages/nslu2-binary-only/unslung-rootfs/unsling
+++ b/packages/nslu2-binary-only/unslung-rootfs/unsling
@@ -182,9 +182,7 @@ if ! [ -d $targ/public ] || ! [ -f $targconf/.dongle ] || ! [ -f $targconf/passw
echo "the device, or the formatting of the device."
exit 1
fi
-# /usr/bin/find / -xdev -print | /usr/bin/cpio -p -d -m -u $targ
-# rm -rf $targ/dev ; mv $targ/dev.state $targ/dev
-# rm -rf $targ/var ; mv $targ/var.state $targ/var
+
echo "./var/tmp" > /tmp/xfile
echo "./dev.state" >> /tmp/xfile
echo "./var.state" >> /tmp/xfile
diff --git a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
index dab61db94e..23b240debc 100644
--- a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
+++ b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
@@ -1,7 +1,7 @@
SECTION = "base"
COMPATIBLE_MACHINE = "nslu2"
-PR = "r18"
+PR = "r19"
DEPENDS = "nslu2-linksys-libs nslu2-linksys-sambacodepages"
@@ -55,6 +55,7 @@ SRC_URI = "http://nslu.sf.net/downloads/nslu2-linksys-ramdisk-2.3r63-2.tar.bz2 \
file://upgrade.htm \
file://telnet.htm \
file://rc.bootbin \
+ file://mkfs.ext3 \
"
S = "${WORKDIR}/nslu2-linksys-ramdisk-2.3r63"
@@ -163,6 +164,10 @@ do_compile () {
rm -f ${S}/bin/busybox
ln -s slingbox ${S}/bin/busybox
+ # Add in the kludge to fix the strange Linksys GUI format problem.
+ rm -f ${S}/usr/bin/mkfs.ext3
+ install -m 755 ${WORKDIR}/mkfs.ext3 ${S}/usr/bin/mkfs.ext3
+
# No reason not to have a home directory for root...
mkdir -p ${S}/root
chmod 755 ${S}/root
diff --git a/packages/ntp/ntp-4.2.2p3/tickadj.c.patch b/packages/ntp/ntp-4.2.2p3/tickadj.c.patch
new file mode 100644
index 0000000000..9ef9de9e1f
--- /dev/null
+++ b/packages/ntp/ntp-4.2.2p3/tickadj.c.patch
@@ -0,0 +1,32 @@
+Index: ntp-4.2.2p3-r0/ntp-4.2.2p3/util/tickadj.c
+===================================================================
+--- ntp-4.2.2p3/util/tickadj.c 2004-02-25 06:58:33.000000000 +0100
++++ ntp-4.2.2p3/util/tickadj.c 2007-07-07 01:00:54.000000000 +0200
+@@ -21,7 +21,8 @@
+ # include <unistd.h>
+ #endif /* HAVE_UNISTD_H */
+
+-#ifdef HAVE___ADJTIMEX /* Linux */
++/* proper handling here has been moved to upstream ntp bugzilla */
++#ifdef linux
+
+ #include <sys/timex.h>
+ struct timex txc;
+@@ -91,7 +92,7 @@
+ }
+
+ if (!errflg) {
+- if (__adjtimex(&txc) < 0)
++ if (adjtimex(&txc) < 0)
+ perror("adjtimex");
+ else if (!quiet)
+ printf("tick = %ld\ntick_adj = %d\n",
+@@ -146,7 +147,7 @@
+ #endif
+ }
+
+- if (__adjtimex(&txc) < 0)
++ if (adjtimex(&txc) < 0)
+ {
+ perror("adjtimex");
+ }
diff --git a/packages/ntp/ntp-ssl_4.1.2.bb b/packages/ntp/ntp-ssl_4.1.2.bb
index 4e499ea4b7..dd8ca66f25 100644
--- a/packages/ntp/ntp-ssl_4.1.2.bb
+++ b/packages/ntp/ntp-ssl_4.1.2.bb
@@ -1,4 +1,4 @@
-require ntp_4.1.2.bb
+require ntp_${PV}.bb
DEPENDS = "openssl"
PR = "r2"
diff --git a/packages/ntp/ntp.inc b/packages/ntp/ntp.inc
new file mode 100644
index 0000000000..6a14521d36
--- /dev/null
+++ b/packages/ntp/ntp.inc
@@ -0,0 +1,32 @@
+DESCRIPTION = "The Network Time Protocol (NTP) is used to \
+synchronize the time of a computer client or server to \
+another server or reference time source, such as a radio \
+or satellite receiver or modem."
+HOMEPAGE = "http://ntp.isc.org/bin/view/Main/WebHome"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "ntp"
+RRECOMMENDS = "iana-etc"
+
+SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${P}.tar.gz \
+ file://ipv6only-workaround.patch;patch=1 \
+ file://ntpd \
+ file://ntp.conf \
+ file://ntpdate"
+
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "ntpd"
+# No dependencies, so just go in at the standard level (20)
+INITSCRIPT_PARAMS = "defaults"
+
+# The ac_cv_header_readline_history is to stop ntpdc depending on either
+# readline or curses
+EXTRA_OECONF = "--without-openssl --without-crypto ac_cv_header_readline_history_h=no"
+CFLAGS_append = " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
+
+PACKAGES += "ntpdate ntp-bin ntp-tickadj ntp-utils"
+# NOTE: you don't need ntpdate, use "ntpdc -q -g -x"
+
+# This should use rc.update
+FILES_ntpdate = "${bindir}/ntpdate ${sysconfdir}/init.d/ntpdate"
diff --git a/packages/ntp/ntp_4.1.2.bb b/packages/ntp/ntp_4.1.2.bb
index dc2d203690..4300b5bbe6 100644
--- a/packages/ntp/ntp_4.1.2.bb
+++ b/packages/ntp/ntp_4.1.2.bb
@@ -1,11 +1,5 @@
-DESCRIPTION = "The Network Time Protocol (NTP) is used to \
-synchronize the time of a computer client or server to \
-another server or reference time source, such as a radio \
-or satellite receiver or modem."
-HOMEPAGE = "http://ntp.isc.org/bin/view/Main/WebHome"
-SECTION = "console/network"
-PRIORITY = "optional"
-LICENSE = "ntp"
+require ntp.inc
+
PR = "r4"
SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.1/ntp-${PV}.tar.gz \
@@ -14,15 +8,6 @@ SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.1/ntp-${PV}.tar.g
file://ntpdate \
file://ntp"
-inherit autotools
-
-EXTRA_OECONF = "--without-openssl"
-CFLAGS_append = " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
-
-PACKAGES =+ "ntpdate"
-
-FILES_ntpdate = "${bindir}/ntpdate /etc/init.d/ntpdate"
-
do_install_append() {
install -d ${D}${sysconfdir}/init.d
install -m 755 ${WORKDIR}/ntpdate ${D}${sysconfdir}/init.d
diff --git a/packages/ntp/ntp_4.2.0.bb b/packages/ntp/ntp_4.2.0.bb
index 0ce7e10ac9..63e7d552a8 100644
--- a/packages/ntp/ntp_4.2.0.bb
+++ b/packages/ntp/ntp_4.2.0.bb
@@ -1,11 +1,5 @@
-DESCRIPTION = "The Network Time Protocol (NTP) is used to \
-synchronize the time of a computer client or server to \
-another server or reference time source, such as a radio \
-or satellite receiver or modem."
-HOMEPAGE = "http://ntp.isc.org/bin/view/Main/WebHome"
-SECTION = "console/network"
-PRIORITY = "optional"
-LICENSE = "ntp"
+require ntp.inc
+
PR = "r8"
SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${P}.tar.gz \
@@ -16,24 +10,8 @@ SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${P}.tar.gz \
file://ntp.conf \
file://ntpdate"
-
-INITSCRIPT_NAME = "ntpd"
-# No dependencies, so just go in at the standard level (20)
-INITSCRIPT_PARAMS = "defaults"
-
-inherit autotools update-rc.d
-
-# The ac_cv_header_readline_history is to stop ntpdc depending on either
-# readline or curses
-EXTRA_OECONF = "--without-openssl --without-crypto ac_cv_header_readline_history_h=no"
-CFLAGS_append = " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
-
-PACKAGES += "ntpdate ntp-bin ntp-tickadj"
-# NOTE: you don't need ntpdate, use "ntpdc -q -g -x"
PROVIDES = "ntpdate-${PV} ntpdate-${PV}-${PR} ntpdate"
-# This should use rc.update
-FILES_ntpdate = "${bindir}/ntpdate ${sysconfdir}/init.d/ntpdate"
#This is too painful - perl is only needed for ntp-wait and ntptrace, which are
#perl scripts, and installing perl is an enormous overhead for a user who only
#needs ntpq
diff --git a/packages/ntp/ntp_4.2.2p3.bb b/packages/ntp/ntp_4.2.2p3.bb
index de755824c9..ad861cf8f5 100644
--- a/packages/ntp/ntp_4.2.2p3.bb
+++ b/packages/ntp/ntp_4.2.2p3.bb
@@ -1,36 +1,13 @@
-DESCRIPTION = "The Network Time Protocol (NTP) is used to \
-synchronize the time of a computer client or server to \
-another server or reference time source, such as a radio \
-or satellite receiver or modem."
-HOMEPAGE = "http://ntp.isc.org/bin/view/Main/WebHome"
-SECTION = "console/network"
-PRIORITY = "optional"
-LICENSE = "ntp"
+require ntp.inc
SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${P}.tar.gz \
file://ipv6only-workaround.patch;patch=1 \
+ file://tickadj.c.patch;patch=1 \
file://ntpd \
file://ntp.conf \
file://ntpdate"
-INITSCRIPT_NAME = "ntpd"
-# No dependencies, so just go in at the standard level (20)
-INITSCRIPT_PARAMS = "defaults"
-
-inherit autotools update-rc.d
-
-# The ac_cv_header_readline_history is to stop ntpdc depending on either
-# readline or curses
-EXTRA_OECONF = "--without-openssl --without-crypto ac_cv_header_readline_history_h=no"
-CFLAGS_append = " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
-
-PACKAGES += "ntpdate ntp-bin ntp-tickadj ntp-utils"
-# NOTE: you don't need ntpdate, use "ntpdc -q -g -x"
-
-# This should use rc.update
-FILES_ntpdate = "${bindir}/ntpdate ${sysconfdir}/init.d/ntpdate"
-
# ntp originally includes tickadj. It's split off for inclusion in small firmware images on platforms
# with wonky clocks (e.g. OpenSlug)
RDEPENDS_${PN} = "${PN}-tickadj"
diff --git a/packages/ntpclient/ntpclient_2003_194.bb b/packages/ntpclient/ntpclient_2003_194.bb
index 52143baee0..84304334e5 100644
--- a/packages/ntpclient/ntpclient_2003_194.bb
+++ b/packages/ntpclient/ntpclient_2003_194.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://doolittle.icarus.com/ntpclient"
AUTHOR = "Larry Doolittle <larry@doolittle.boa.org>"
RDEPENDS = "busybox"
SECTION = "admin"
-LICENSE = "GPL/v2"
+LICENSE = "GPLv2"
PR = "r1"
# The ntpclient package uses version numbers that include an underscore :(
PV = "2003_194"
diff --git a/packages/nunome/files/timer.patch b/packages/nunome/files/timer.patch
new file mode 100644
index 0000000000..ccd65647be
--- /dev/null
+++ b/packages/nunome/files/timer.patch
@@ -0,0 +1,21 @@
+diff --git a/ui/nnmCanvas.cpp b/ui/nnmCanvas.cpp
+index a548ddf..3b8e7d4 100755
+--- a/ui/nnmCanvas.cpp
++++ b/ui/nnmCanvas.cpp
+@@ -35,7 +35,7 @@
+
+ nnmCanvas::nnmCanvas( QWidget *parent, int timeoutParam, int initID,
+ const char *name, WFlags f )
+- : QWidget( parent, name, f )
++ : QWidget( parent, name, f ), timer(0)
+ {
+ setFixedSize( NnmCANVAS_DISPLAY_SIZE, NnmCANVAS_DISPLAY_SIZE );
+ init();
+@@ -149,7 +149,7 @@ void nnmCanvas::resizeEvent( QResizeEvent *event )
+
+ void nnmCanvas::init( void )
+ {
+- if ( timeoutMsec > 0 && timer->isActive() ) {
++ if ( timeoutMsec > 0 && timer && timer->isActive() ) {
+ timer->stop();
+ } \ No newline at end of file
diff --git a/packages/nunome/nunome_1.0.1.bb b/packages/nunome/nunome_1.0.1.bb
deleted file mode 100644
index 373f30f571..0000000000
--- a/packages/nunome/nunome_1.0.1.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-DESCRIPTION = "Japanese input method plugin"
-SECTION = "opie/inputmethods"
-PRIORITY = "optional"
-LICENSE = "GPL"
-HOMEPAGE = "http://www.sikigami.com/nunome-Qtopia-1.0/"
-RDEPENDS = "virtual/japanese-font"
-PR = "r1"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/gakusei/nunome-Qtopia-src-cleaned.tar.bz2 \
- file://nunome.patch;patch=1"
-S = "${WORKDIR}/nunome"
-
-inherit opie
-
-EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${S}/Nnmlib INCLUDEPATH+=${S}/ui LIBS+=-L${S}"
-OE_QMAKE_CXXFLAGS := "${@oe_filter_out('-fno-rtti', '${OE_QMAKE_CXXFLAGS}', d)}"
-PARALLEL_MAKE = ""
-
-do_configure_prepend() {
- echo -e "TEMPLATE=subdirs\nSUBDIRS=Nnmlib server ui dicman ui" >nunome.pro
- pushd Nnmlib && qmake -project -t lib && popd
- pushd server && qmake -project && echo -e "LIBS+=-lNnmlib\nTARGET=server.bin" >> server.pro && popd
- pushd dicman && qmake -project && echo -e "LIBS+=-lnunome -lNnmlib\nTARGET=dicman.bin" >> dicman.pro && popd
- pushd ui && qmake -project -t lib && echo -e "LIBS+=-lNnmlib\nTARGET=nunome" >> ui.pro && popd
- find . -name "moc*"|xargs rm -f
- find . -name "Makefile"|xargs rm -f
-}
-
-do_install() {
- install -d ${D}${palmtopdir}/lib
- install -d ${D}${palmtopdir}/bin
- install -d ${D}${palmtopdir}/i18n/ja
- install -d ${D}${palmtopdir}/share/nunome
-
- oe_libinstall -so libNnmlib ${D}${palmtopdir}/lib
- install -m 644 nunome_uni.dic ${D}${palmtopdir}/share/nunome
- install -m 755 server/nnmsrv ${D}${palmtopdir}/bin
- install -m 755 dicman/nnmDicman ${D}${palmtopdir}/bin
- install -m 644 ui/nunome.qm ${D}${palmtopdir}/i18n/ja
- install -m 644 dicman/nnmDicman.qm ${D}${palmtopdir}/i18n/ja
-}
diff --git a/packages/nunome/nunome_1.0.2.bb b/packages/nunome/nunome_1.0.2.bb
new file mode 100644
index 0000000000..044ed1358c
--- /dev/null
+++ b/packages/nunome/nunome_1.0.2.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "Japanese input method plugin"
+HOMEPAGE = "http://www.sikigami.com/nunome-Qtopia-1.0/"
+SECTION = "opie/inputmethods"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "virtual/japanese-font"
+PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gakusei/nunome-${PV}.tar.bz2 \
+ file://timer.patch;patch=1 \
+ file://nunome.patch;patch=1"
+S = "${WORKDIR}/nunome"
+
+inherit opie
+
+EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${S}/Nnmlib INCLUDEPATH+=${S}/ui LIBS+=-L${S}"
+OE_QMAKE_CXXFLAGS := "${@oe_filter_out('-fno-rtti', '${OE_QMAKE_CXXFLAGS}', d)}"
+PARALLEL_MAKE = ""
+
+do_configure_prepend() {
+ sed -i -e 's,/opt/QtPalmtop/bin/,${bindir}/,g' "${S}/ui/nunome.h"
+ sed -i -e 's,/opt/QtPalmtop/,${palmtopdir}/,g' "${S}/ui/nunome.h"
+ echo -e "TEMPLATE=subdirs\nSUBDIRS=Nnmlib server ui dicman ui" >nunome.pro
+ pushd Nnmlib && qmake -project -t lib && popd
+ pushd server && qmake -project && echo -e "LIBS+=-lNnmlib\nTARGET=server.bin" >> server.pro && popd
+ pushd dicman && qmake -project && echo -e "LIBS+=-lnunome -lNnmlib\nTARGET=dicman.bin" >> dicman.pro && popd
+ pushd ui && qmake -project -t lib && echo -e "LIBS+=-lNnmlib\nTARGET=nunome" >> ui.pro && popd
+ find . -name "moc*"|xargs rm -f
+ find . -name "Makefile"|xargs rm -f
+}
+
+do_install() {
+ install -d ${D}${palmtopdir}/lib
+ install -d ${D}${bindir}
+ install -d ${D}${palmtopdir}/i18n/ja
+ install -d ${D}${palmtopdir}/share/nunome
+
+ oe_libinstall -so libNnmlib ${D}${palmtopdir}/lib
+ install -m 644 nunome_uni.dic ${D}${palmtopdir}/share/nunome
+ install -m 755 server.bin ${D}${bindir}/nnmsrv
+ install -m 755 dicman.bin ${D}${bindir}/nnmDicman
+ install -m 644 ui/nunome.qm ${D}${palmtopdir}/i18n/ja
+ install -m 644 dicman/nnmDicman.qm ${D}${palmtopdir}/i18n/ja
+}
diff --git a/packages/nylon/simple-firewall.bb b/packages/nylon/simple-firewall.bb
deleted file mode 100644
index 4a99d8a851..0000000000
--- a/packages/nylon/simple-firewall.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "simple firewall configuratiopn script"
-SECTION = "base"
-PRIORITY = "optional"
-LICENSE = "GPL"
-DEPENDS = "virtual/kernel"
-SRCDATE = "20060810"
-PV = "cvs${SRCDATE}"
-
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-SRC_URI = "http://meshcube.org/nylon/unstable/sources/${PN}_gruen.4g__${SRCDATE}.tar.gz"
-S = "${WORKDIR}/${PN}"
-
-do_install() {
- install -d -m 755 ${D}
- (cd ${S}; tar -c --exclude .svn -f - . ) | tar -C ${D} -xpf -
-}
diff --git a/packages/obexftp/files/iconv.patch b/packages/obexftp/files/iconv.patch
new file mode 100644
index 0000000000..83b01a02fe
--- /dev/null
+++ b/packages/obexftp/files/iconv.patch
@@ -0,0 +1,24 @@
+--- obexftp-0.20/obexftp/Makefile.am 2007-06-27 20:33:20.000000000 +0200
++++ obexftp-0.20/obexftp/Makefile.am 2007-06-27 20:35:05.000000000 +0200
+@@ -4,12 +4,6 @@
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/includes
+
+-LDADD = @OPENOBEX_LIBS@
+-# @BLUETOOTH_LIBS@ \
+-# @USB_LIBS@ \
+-# ../multicobex/libmulticobex.la \
+-# ../bfb/libbfb.la
+-
+ obexftpincludedir = $(includedir)/obexftp
+
+ libobexftp_la_SOURCES = object.c object.h \
+@@ -23,6 +17,8 @@
+ uuid.h \
+ object.h
+
++libobexftp_la_LIBADD = @OPENOBEX_LIBS@ @LIBICONV@
++
+ libobexftp_la_LDFLAGS = -version-info $(OBEXFTP_VERSION)
+
+ EXTRA_DIST = client.i
diff --git a/packages/obexftp/obexftp_0.20.bb b/packages/obexftp/obexftp_0.20.bb
index 23e360bbae..386e83d6dc 100644
--- a/packages/obexftp/obexftp_0.20.bb
+++ b/packages/obexftp/obexftp_0.20.bb
@@ -2,11 +2,12 @@ DESCRIPTION = "OBEX Ftp Client based on openobex."
SECTION = "console/network"
HOMEPAGE = "http://openobex.triq.net"
LICENSE = "GPL"
-DEPENDS = "openobex libgsm"
-PR = "r2"
+DEPENDS = "openobex libgsm virtual/libiconv"
+PR = "r3"
SRC_URI = "${SOURCEFORGE_MIRROR}/openobex/obexftp-${PV}.tar.gz \
- file://i-hate-libtool.patch;patch=1 \
+ file://iconv.patch;patch=1 \
+ file://i-hate-libtool.patch;patch=1 \
file://m4.patch;patch=1"
inherit autotools
diff --git a/packages/ohand-tasks/tasks_0.2.bb b/packages/ohand-tasks/tasks_0.2.bb
deleted file mode 100644
index ea9c1b0703..0000000000
--- a/packages/ohand-tasks/tasks_0.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Tasks is a simple TODO application."
-SECTION = "x11"
-LICENSE = "LGPL"
-PR = "r0"
-
-DEPENDS = "glib-2.0 gtk+ libglade eds-dbus"
-
-SRC_URI = "http://projects.o-hand.com/sources/tasks/${P}.tar.gz"
-
-inherit autotools pkgconfig gtk-icon-cache
-
-
diff --git a/packages/openmoko-apps/files/.mtn2git_empty b/packages/openmoko-apps/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-apps/files/.mtn2git_empty
diff --git a/packages/openmoko-apps/files/unbreak-messages.patch b/packages/openmoko-apps/files/unbreak-messages.patch
new file mode 100644
index 0000000000..c8d3413c0b
--- /dev/null
+++ b/packages/openmoko-apps/files/unbreak-messages.patch
@@ -0,0 +1,29 @@
+Index: sms-membership-window.c
+===================================================================
+--- sms-membership-window.c (wersja 1565)
++++ openmoko-messages/src/sms-membership-window.c (kopia robocza)
+@@ -36,9 +36,6 @@
+ #define SMS_MEMBERSHIP_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SMS_TYPE_MEMBERSHIP_WINDOW, SmsMembershipWindowPrivate))
+
+ typedef struct _SmsMembershipWindowPrivate SmsMembershipWindowPrivate;
+-typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model,
+- GtkTreeIter *iter,
+- gpointer data);
+
+ struct _SmsMembershipWindowPrivate
+ {
+Index: main.c
+===================================================================
+--- main.c (wersja 1565)
++++ openmoko-messages/src/main.c (kopia robocza)
+@@ -41,10 +41,6 @@
+
+ #include <gtk/gtk.h>
+
+-typedef gboolean (*GtkTreeModelFilterVisibleFunc) (GtkTreeModel *model,
+- GtkTreeIter *iter,
+- gpointer data);
+-
+ gboolean init_dbus (MessengerData* d)
+ {
+ DBusError error;
diff --git a/packages/openmoko-apps/omext_0.2.bb b/packages/openmoko-apps/omext_0.2.bb
new file mode 100644
index 0000000000..203b84e3df
--- /dev/null
+++ b/packages/openmoko-apps/omext_0.2.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Openmoko extensionhandler"
+LICENSE = "GPLv2"
+
+DEPENDS = "dbus-glib"
+
+SRC_URI = "http://www.devzero.net/openmoko/dist/omext-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+S = "{WORKDIR}/openmoko-extensionhandler"
+
+
diff --git a/packages/openmoko-apps/openmoko-calculator_svn.bb b/packages/openmoko-apps/openmoko-calculator_svn.bb
new file mode 100644
index 0000000000..19f3ed9e45
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-calculator_svn.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "The OpenMoko Calculator Application"
+SECTION = "openmoko/applications"
+AUTHOR = "Rodolphe Ortalo <rodolphe.ortalo@free.fr>"
+
+PV = "0.0.3+svn${SRCDATE}"
+PR = "r0"
+
+inherit openmoko
+
diff --git a/packages/openmoko-apps/openmoko-mainmenu_svn.bb b/packages/openmoko-apps/openmoko-mainmenu_svn.bb
deleted file mode 100644
index d819e60d23..0000000000
--- a/packages/openmoko-apps/openmoko-mainmenu_svn.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-DESCRIPTION = "The OpenMoko Main Menu"
-SECTION = "openmoko/applications"
-PV = "0.0.1+svn${SRCDATE}"
-
-inherit openmoko
-
-do_compile_prepend() {
- sed -i -e 's:$(AM_LDFLAGS):$(AM_LDFLAGS)\ -lmb:' src/Makefile
-}
diff --git a/packages/openmoko-apps/openmoko-messages_svn.bb b/packages/openmoko-apps/openmoko-messages_svn.bb
index d7a708b85c..948560bd52 100644
--- a/packages/openmoko-apps/openmoko-messages_svn.bb
+++ b/packages/openmoko-apps/openmoko-messages_svn.bb
@@ -1,7 +1,7 @@
-DESCRIPTION = "The OpenMoko Application Manager"
+DESCRIPTION = "The OpenMoko Messaging Application"
SECTION = "openmoko/applications"
-DEPENDS += "ipkg"
+
PV = "0.0.1+svn${SRCDATE}"
+PR = "r2"
inherit openmoko
-
diff --git a/packages/openmoko-apps/openmoko-terminal/.mtn2git_empty b/packages/openmoko-apps/openmoko-terminal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-terminal/.mtn2git_empty
diff --git a/packages/openmoko-apps/openmoko-terminal/gtkterm2rc b/packages/openmoko-apps/openmoko-terminal/gtkterm2rc
new file mode 100644
index 0000000000..d68f01ab57
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-terminal/gtkterm2rc
@@ -0,0 +1,85 @@
+##
+# 1=RIGHT, 2=TOP, 3=BOTTOM, 4=LEFT
+##
+notebookPanel=3
+
+##
+# 0=HIDDEN, 1=LEFT, 2=RIGHT
+##
+terminalScrollbar=2
+
+##
+# 0=NO SCROLLBAR
+##
+maxScrollbackBuffer=999
+
+##
+# 0=FALSE, 1=TRUE
+##
+quitPRGonExitLastTerminal=1
+
+##
+# 0=FALSE, 1=TRUE
+##
+showTabsByOneTerminal=0
+
+##
+#A Font name: use gnome-font-properties to look at available fonts
+##
+terminalFont=BitStream Vera Sans Mono 11
+
+##
+# Separator for marking with mouse
+##
+worldClass=-A-Za-z0-9/_:.,?+%=
+
+##
+# 0=FALSE, 1=TRUE
+##
+scrollOnKeyStroke=1
+
+##
+# 0=FALSE, 1=TRUE
+##
+scrollOnOutput=0
+
+##
+# 0=FALSE, 1=TRUE
+##
+blink=1
+
+##
+# 0=FALSE, 1=TRUE
+##
+beep=1
+
+##
+# x y Default Terminal Size in pix
+##
+terminalSize=80 25
+
+##
+# NEW COLOR Definition
+##
+red=0x0000 0xcccc 0x0000 0xaaaa 0x0000 0xaaaa 0x6666 0xaaaa 0x0000 0xcccc 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff
+grn=0x0000 0xcccc 0x0000 0x0000 0xaaaa 0x5555 0x6666 0x0000 0xaaaa 0xcccc 0x5555 0x5555 0xffff 0xffff 0x5555 0x5555 0xffff 0xffff
+blu=0x0000 0xcccc 0x0000 0x0000 0x0000 0x0000 0xffff 0xaaaa 0xaaaa 0xcccc 0x5555 0x5555 0x5555 0x5555 0xffff 0xffff 0xffff 0xffff
+
+##
+# COLOR Definition
+##
+
+##
+# First section
+##
+[section]
+match=
+worldClass=-A-Za-z0-9/_:.,?+%=
+scrollOnKeyStroke=1
+scrollOnOutput=0
+beep=1
+blink=1
+red=0x0000 0xcccc 0x0000 0xaaaa 0x0000 0xaaaa 0x6666 0xaaaa 0x0000 0x0000 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff 0x5555 0xffff
+grn=0x0000 0xcccc 0x0000 0x0000 0xaaaa 0x5555 0x6666 0x0000 0xaaaa 0xcccc 0x5555 0x5555 0xffff 0xffff 0x5555 0x5555 0xffff 0xffff
+blu=0x0000 0xcccc 0x0000 0x0000 0x0000 0x0000 0xffff 0xaaaa 0xaaaa 0x0000 0x5555 0x5555 0x5555 0x5555 0xffff 0xffff 0xffff 0xffff
+
diff --git a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop
new file mode 100644
index 0000000000..ced7c0b8e2
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Terminal
+Comment=Command Line Interface Terminal
+Exec=gtkterm2
+Icon=openmoko-terminal
+Terminal=false
+Type=Application
+Categories=GTK;Application;PIM;Office
+MimeType=text/x-vcard;
+SingleInstance=false
+StartupNotify=true
diff --git a/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png
new file mode 100644
index 0000000000..56e8e59628
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-terminal/openmoko-terminal.png
Binary files differ
diff --git a/packages/openmoko-apps/openmoko-terminal_svn.bb b/packages/openmoko-apps/openmoko-terminal_svn.bb
new file mode 100644
index 0000000000..85e8ea777f
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-terminal_svn.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "The OpenMoko Command Line Console"
+SECTION = "openmoko/applications"
+RDEPENDS += "gtkterm2"
+PV = "1.0.0"
+PR = "r1"
+
+inherit openmoko
+
+SRC_URI = "file://openmoko-terminal.png \
+ file://openmoko-terminal.desktop \
+ file://gtkterm2rc"
+
+do_install() {
+ install -d ${D}${sysconfdir}/skel
+ install -d ${D}${datadir}/pixmaps
+ install -d ${D}${datadir}/applications
+ install -m 0644 ${WORKDIR}/openmoko-terminal.png ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/openmoko-terminal.desktop ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/gtkterm2rc ${D}${sysconfdir}/skel/.gtkterm2rc
+}
+
+pkg_postinst_openmoko-terminal() {
+#!/bin/sh -e
+if [ "x$D" != "x" ]; then
+ exit 1 # don't run at image generation time
+else
+ if [ -e "$HOME/.gtkterm2rc" ]; then
+ echo "not overriding $HOME/.gtkterm2rc"
+ else
+ echo "installing $HOME/.gtkterm2rc from /etc/skel"
+ cp -f ${sysconfdir}/skel/.gtkterm2rc $HOME/
+ fi
+fi
+}
diff --git a/packages/openmoko-base/files/session b/packages/openmoko-base/files/session
deleted file mode 100644
index b2e7fd0a69..0000000000
--- a/packages/openmoko-base/files/session
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-SHOWCURSOR="no"
-
-matchbox-desktop --icon-size 96 \
- --icon-padding 60 \
- --font sans-16 \
- --titlefont sans-20:bold \
- --bg img-tiled:/usr/share/themes/openmoko-standard/gtk-2.0/mokopanedwindow-upper-enclosing.png &
-# --bg col-gradient-vertical:#000000,#aaaaaa &
-matchbox-panel --start-applets=showdesktop,systray,windowselector --end-applets=openmoko-panel-demo-simple,openmoko-panel-battery,openmoko-panel-clock,openmoko-panel-gsm &
-
-#start some old-style panel plugins to get a keyboard and battery status
-mbinputmgr &
-
-openmoko-footer &
-exec matchbox-window-manager -use_titlebar no -use_cursor $SHOWCURSOR $@
-
diff --git a/packages/openmoko-base/openmoko-common_svn.bb b/packages/openmoko-base/openmoko-common_svn.bb
index 15cc97d39f..e72d325bb9 100644
--- a/packages/openmoko-base/openmoko-common_svn.bb
+++ b/packages/openmoko-base/openmoko-common_svn.bb
@@ -5,7 +5,7 @@ PR = "r1"
inherit openmoko-base
-SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=images;proto=https"
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=images;proto=http"
S = "${WORKDIR}"
dirs = "images/pixmaps"
diff --git a/packages/openmoko-base/openmoko-icon-theme-standard_svn.bb b/packages/openmoko-base/openmoko-icon-theme-standard_svn.bb
new file mode 100644
index 0000000000..a7f62b31c0
--- /dev/null
+++ b/packages/openmoko-base/openmoko-icon-theme-standard_svn.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Standard Gtk+ icon theme for the OpenMoko distribution"
+SECTION = "openmoko/base"
+PV = "0.1+svn${SRCDATE}"
+PR = "r1"
+
+inherit openmoko-base autotools
+
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=icons;proto=http"
+S = "${WORKDIR}/icons"
+
+pkg_postinst_openmoko-icon-theme-standard () {
+#!/bin/sh -e
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+gtk-update-icon-cache ${datadir}/icons/openmoko-standard/
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/openmoko-base/openmoko-libs_svn.bb b/packages/openmoko-base/openmoko-libs_svn.bb
index 3ac18438b1..a7b5387a99 100644
--- a/packages/openmoko-base/openmoko-libs_svn.bb
+++ b/packages/openmoko-base/openmoko-libs_svn.bb
@@ -1,19 +1,36 @@
DESCRIPTION = "openmoko-libs is a set of libraries implementing a Gtk+ based application framework for mobile communication applications"
SECTION = "openmoko/libs"
LICENSE = "LGPL"
-DEPENDS += "gtk+"
-PV = "0.0.1+svn${SRCDATE}"
-PR = "r1"
+DEPENDS += "gtk+ eds-dbus libgsmd libxosd"
+PV = "0.4+svn${SRCDATE}"
+PR = "r0"
inherit openmoko
-do_configure_prepend() {
- touch libmokocore/Makefile.in
- touch libmokopim/Makefile.in
- touch libmokonet/Makefile.in
-}
-
do_stage() {
autotools_stage_all
}
+PACKAGES =+ "\
+ libmokojournal libmokojournal-dev libmokojournal-dbg \
+ libmokogsmd libmokogsmd-dev libmokogsmd-dbg \
+ libmokocore libmokocore-dev libmokocore-dbg \
+ libmokoui libmokoui-dev libmokoui-dbg \
+"
+
+FILES_libmokojournal = "${libdir}/libmokojournal.so.*"
+FILES_libmokojournal-dev = "${libdir}/libmokojournal.so ${libdir}/libmokojournal.*a ${includedir}/${PN}/libmokojournal"
+FILES_libmokojournal-dbg = "${libdir}/.debug/libmokojournal.so.*"
+
+FILES_libmokogsmd = "${libdir}/libmokogsmd.so.*"
+FILES_libmokogsmd-dev = "${libdir}/libmokogsmd.so ${libdir}/libmokogsmd.*a ${includedir}/${PN}/libmokogsmd"
+FILES_libmokogsmd-dbg = "${libdir}/.debug/libmokogsmd.so.*"
+
+FILES_libmokocore = "${libdir}/libmokocore.so.*"
+FILES_libmokocore-dev = "${libdir}/libmokocore.so ${libdir}/libmokocore.*a ${includedir}/${PN}/libmokocore"
+FILES_libmokocore-dbg = "${libdir}/.debug/libmokocore.so.*"
+
+FILES_libmokoui = "${libdir}/libmokoui.so.*"
+FILES_libmokoui-dev = "${libdir}/libmokoui.so ${libdir}/libmokoui.*a ${includedir}/${PN}/libmokoui"
+FILES_libmokoui-dbg = "${libdir}/.debug/libmokoui.so.*"
+
diff --git a/packages/openmoko-base/openmoko-session/.mtn2git_empty b/packages/openmoko-base/openmoko-session/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-base/openmoko-session/.mtn2git_empty
diff --git a/packages/openmoko-base/openmoko-session/session b/packages/openmoko-base/openmoko-session/session
new file mode 100644
index 0000000000..c7a773efcb
--- /dev/null
+++ b/packages/openmoko-base/openmoko-session/session
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+export GTK_MODULES="libgtkstylus.so libgtkinput.so"
+SHOWCURSOR="no"
+
+matchbox-panel-2 \
+ --start-applets=openmoko-panel-mainmenu,systray,startup \
+ --end-applets=openmoko-panel-battery,openmoko-panel-gsm,openmoko-panel-gps,openmoko-panel-usb,openmoko-panel-bt,openmoko-panel-clock &
+
+# start old-style panel plugin to get a keyboard
+mbinputmgr &
+
+# set default alsa configuration
+alsactl restore 0 -f /etc/alsa/stereoout.state
+
+# start UI and dialer
+openmoko-footer &
+openmoko-today --desktop &
+openmoko-dialer &
+
+sleep 1
+
+exec matchbox-window-manager -use_titlebar no -use_cursor $SHOWCURSOR $@
+
diff --git a/packages/openmoko-base/openmoko-session_svn.bb b/packages/openmoko-base/openmoko-session_svn.bb
index 5f0a88cfbf..7acc8fae1c 100644
--- a/packages/openmoko-base/openmoko-session_svn.bb
+++ b/packages/openmoko-base/openmoko-session_svn.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Matchbox session files for OpenMoko"
SECTION = "openmoko/base"
-RDEPENDS = "matchbox gconf matchbox-applet-startup-monitor gtk-theme-clearlooks"
-PV = "0.0+svn${SRCDATE}"
-PR = "r6"
+RDEPENDS = "matchbox-panel-2 matchbox-wm openmoko-today gconf"
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
inherit openmoko-base
@@ -15,7 +15,7 @@ do_install() {
rm -fR ${D}/${sysconfdir}/.svn
rm -fR ${D}/${sysconfdir}/matchbox/.svn
chmod -R 755 ${D}/${sysconfdir}
- # DEMO only!
+ # DEMO only. Need to handle this differently in actual production images
install -m 0755 ${WORKDIR}/session ${D}/${sysconfdir}/matchbox/session
}
@@ -25,5 +25,8 @@ if [ "x$D" != "x" ]; then
exit 1
fi
-gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/openmoko/interface/theme Clearlooks
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/openmoko/interface/theme openmoko-standard
}
+
+PACKAGE_ARCH = "all"
+
diff --git a/packages/openmoko-base/openmoko-sound-system/.mtn2git_empty b/packages/openmoko-base/openmoko-sound-system/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-base/openmoko-sound-system/.mtn2git_empty
diff --git a/packages/openmoko-base/openmoko-sound-system/pulseaudio b/packages/openmoko-base/openmoko-sound-system/pulseaudio
new file mode 100755
index 0000000000..76daacd3ae
--- /dev/null
+++ b/packages/openmoko-base/openmoko-sound-system/pulseaudio
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# pulseaudio This shell script starts and stops pulseaudio.
+#
+# chkconfig: 345 90 40
+# description: Pulseaudio manages the sound input/output
+# processname: pulseaudio
+
+# Source function library.
+#. /etc/rc.d/init.d/functions
+
+RETVAL=0
+prog="pulseaudio"
+
+start() {
+ echo -n "Starting the audio server..."
+ # FIXME once alsa/shm permissions have been fixed, supply --system
+ pulseaudio --resample-method=trivial -D -nF /etc/pulse/session
+ echo $prog
+}
+
+stop() {
+ # Stop daemons.
+ echo -n "Shutting down $prog: "
+ killall pulseaudio
+ echo "done"
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ stop
+ start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/packages/openmoko-base/openmoko-sound-system/session b/packages/openmoko-base/openmoko-sound-system/session
new file mode 100644
index 0000000000..91267b672a
--- /dev/null
+++ b/packages/openmoko-base/openmoko-sound-system/session
@@ -0,0 +1,26 @@
+#!/usr/bin/pulseaudio -nF
+
+# Create autoload entries for the device drivers
+add-autoload-sink output module-alsa-sink fragment_size=2048 sink_name=output
+add-autoload-source input module-alsa-source source_name=input
+
+# Load several protocols
+load-module module-esound-protocol-unix
+load-module module-simple-protocol-tcp
+load-module module-native-protocol-unix
+load-module module-cli-protocol-unix
+
+# Make some devices default
+set-default-sink output
+set-default-source input
+
+# Don't fail if the audio files referred to below don't exist
+.nofail
+
+# Load an audio to the sample cache for usage with module-x11-bell
+load-sample-lazy x11-bell /usr/share/openmoko/sounds/notify_doorbell.wav
+load-module module-x11-bell sample=x11-bell
+
+# Load samples
+load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav
+load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav
diff --git a/packages/openmoko-base/openmoko-sound-system_0.1.0.bb b/packages/openmoko-base/openmoko-sound-system_0.1.0.bb
new file mode 100644
index 0000000000..671ff37f45
--- /dev/null
+++ b/packages/openmoko-base/openmoko-sound-system_0.1.0.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "OpenMoko Sound System"
+SECTION = "openmoko/base"
+RDEPENDS = "\
+ pulseaudio-server \
+ pulseaudio-module-alsa-sink \
+ pulseaudio-module-alsa-source \
+ pulseaudio-module-cli \
+ pulseaudio-module-esound-protocol-unix \
+ pulseaudio-module-simple-protocol-tcp \
+ pulseaudio-module-native-protocol-unix \
+ pulseaudio-module-cli-protocol-unix \
+"
+PR = "r5"
+
+inherit openmoko-base update-rc.d
+
+INITSCRIPT_NAME = "pulseaudio"
+INITSCRIPT_PARAMS = "defaults 35"
+
+SRC_URI = "file://pulseaudio \
+ file://session"
+S = "${WORKDIR}"
+
+do_install() {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/pulseaudio ${D}/${sysconfdir}/init.d/
+ install -d ${D}/${sysconfdir}/pulse
+ install -m 0755 ${WORKDIR}/session ${D}/${sysconfdir}/pulse/session
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/openmoko-base/openmoko-sound-theme-standard_svn.bb b/packages/openmoko-base/openmoko-sound-theme-standard_svn.bb
new file mode 100644
index 0000000000..39b1e8d143
--- /dev/null
+++ b/packages/openmoko-base/openmoko-sound-theme-standard_svn.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Standard sound theme for the OpenMoko distribution"
+SECTION = "openmoko/base"
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+inherit openmoko-base autotools
+
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=sounds;proto=http"
+S = "${WORKDIR}/sounds"
+
+do_install() {
+ find ${WORKDIR} -name ".svn" | xargs rm -rf
+ install -d ${D}${datadir}/openmoko/sounds
+ for i in *.mp3; do
+ cp -fpPR ${S}/$i ${D}${datadir}/openmoko/sounds/
+ done
+ for i in touchscreen_click.wav notify_doorbell.wav startup_openmoko.wav; do
+ cp -f ${S}/$i ${D}${datadir}/openmoko/sounds/
+ done
+}
+
+FILES_${PN} = "${datadir}"
+
diff --git a/packages/openmoko-base/openmoko-theme-standard-qvga_svn.bb b/packages/openmoko-base/openmoko-theme-standard-qvga_svn.bb
new file mode 100644
index 0000000000..44c296f258
--- /dev/null
+++ b/packages/openmoko-base/openmoko-theme-standard-qvga_svn.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Standard Gtk+ theme for the OpenMoko distribution, qvga version"
+SECTION = "openmoko/base"
+PV = "0.0+svn${SRCDATE}"
+PR = "r0"
+
+inherit openmoko-base
+
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=themes;proto=http"
+S = "${WORKDIR}"
+
+dirs = "themes/openmoko-standard-qvga"
+
+do_install() {
+ find ${WORKDIR} -name ".svn" | xargs rm -rf
+ install -d ${D}${datadir}/themes/
+ for i in ${dirs}; do
+ cp -fpPR ${WORKDIR}/$i ${D}${datadir}/themes/
+ done
+
+ install -d ${D}${sysconfdir}/gtk-2.0
+ echo 'include "${datadir}/themes/openmoko-standard-qvga/gtk-2.0/gtkrc"' >> ${D}${sysconfdir}/gtk-2.0/gtkrc
+}
+
+PACKAGE_ARCH = "all"
+FILES_${PN} = "${datadir} ${sysconfdir}"
diff --git a/packages/openmoko-base/openmoko-theme-standard_svn.bb b/packages/openmoko-base/openmoko-theme-standard_svn.bb
index d8a9ba5fa2..8bf59ac707 100644
--- a/packages/openmoko-base/openmoko-theme-standard_svn.bb
+++ b/packages/openmoko-base/openmoko-theme-standard_svn.bb
@@ -1,11 +1,11 @@
DESCRIPTION = "Standard Gtk+ theme for the OpenMoko distribution"
SECTION = "openmoko/base"
PV = "0.0+svn${SRCDATE}"
-PR = "r3"
+PR = "r5"
inherit openmoko-base
-SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=themes;proto=https"
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/artwork;module=themes;proto=http"
S = "${WORKDIR}"
dirs = "themes/openmoko-standard"
@@ -21,4 +21,7 @@ do_install() {
echo 'include "${datadir}/themes/openmoko-standard/gtk-2.0/gtkrc"' >> ${D}${sysconfdir}/gtk-2.0/gtkrc
}
+CONFFILES_${PN} = "${sysconfdir}/gtk-2.0/gtkrc"
+
+PACKAGE_ARCH = "all"
FILES_${PN} = "${datadir} ${sysconfdir}"
diff --git a/packages/openmoko-inputmethods/.mtn2git_empty b/packages/openmoko-inputmethods/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-inputmethods/.mtn2git_empty
diff --git a/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb b/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb
new file mode 100644
index 0000000000..58f25ab0b6
--- /dev/null
+++ b/packages/openmoko-inputmethods/openmoko-keyboard_svn.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Matchbox virtual keyboard for X11 - OpenMoko fork"
+LICENSE = "GPL"
+DEPENDS = "libfakekey expat libxft"
+SECTION = "openmoko/inputmethods"
+PV = "0.0+svn${SRCDATE}"
+PR = "r1"
+
+inherit openmoko autotools pkgconfig gettext
+
+SRC_URI = "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/inputmethods;module=${PN};proto=http"
+
+S = "${WORKDIR}/${PN}"
+
+EXTRA_OECONF = "--disable-cairo"
+
+FILES_${PN} = "${bindir}/* \
+ ${datadir}/applications \
+ ${datadir}/pixmaps \
+ ${datadir}/openmoko-keyboard"
+
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-battery_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
index 46065127f5..38bab21c0e 100644
--- a/packages/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
+++ b/packages/openmoko-panel-plugins/openmoko-panel-battery_svn.bb
@@ -1,5 +1,6 @@
DESCRIPTION = "Shows the battery/AC status in the OpenMoko panel"
-PV = "0.0.1+svn${SRCDATE}"
+DEPENDS = "apmd"
+PV = "0.1.0+svn${SVNREV}"
inherit openmoko-panel-plugin
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-bt_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-bt_svn.bb
new file mode 100644
index 0000000000..9d5fc85f3f
--- /dev/null
+++ b/packages/openmoko-panel-plugins/openmoko-panel-bt_svn.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Shows the bluetooth status in the OpenMoko panel"
+DEPENDS = "bluez-libs"
+PV = "0.1.0+svn${SVNREV}"
+
+inherit openmoko-panel-plugin
+
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-clock_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
index 389a6f2691..3aa328a7cf 100644
--- a/packages/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
+++ b/packages/openmoko-panel-plugins/openmoko-panel-clock_svn.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Shows the current time in the OpenMoko panel"
-PV = "0.0.1+svn${SRCDATE}"
+PV = "0.1.0+svn${SVNREV}"
inherit openmoko-panel-plugin
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-gps_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-gps_svn.bb
new file mode 100644
index 0000000000..fd2e9a1685
--- /dev/null
+++ b/packages/openmoko-panel-plugins/openmoko-panel-gps_svn.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Shows the GPS status in the OpenMoko panel"
+DEPENDS = "gpsd"
+PV = "0.1.0+svn${SVNREV}"
+
+inherit openmoko-panel-plugin
+
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
index dd5b30fcee..76401a2b58 100644
--- a/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
+++ b/packages/openmoko-panel-plugins/openmoko-panel-gsm_svn.bb
@@ -1,10 +1,6 @@
-DESCRIPTION = "Shows the current time in the OpenMoko panel"
-PV = "0.0.1+svn${SRCDATE}"
-PR = "r1"
-
-DEPENDS_append = " libgsmd"
+DESCRIPTION = "Shows the GSM / GPRS status in the OpenMoko panel"
+DEPENDS = "libgsmd"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r0"
inherit openmoko-panel-plugin
-
-FILES_${PN} += "${bindir}/${PN}"
-
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
index 389a6f2691..7ae04ca0a8 100644
--- a/packages/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
+++ b/packages/openmoko-panel-plugins/openmoko-panel-mainmenu_svn.bb
@@ -1,5 +1,7 @@
-DESCRIPTION = "Shows the current time in the OpenMoko panel"
-PV = "0.0.1+svn${SRCDATE}"
+DESCRIPTION = "Main menu applet for the OpenMoko panel"
+DEPENDS += "pulseaudio startup-notification"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
inherit openmoko-panel-plugin
diff --git a/packages/openmoko-panel-plugins/openmoko-panel-usb_svn.bb b/packages/openmoko-panel-plugins/openmoko-panel-usb_svn.bb
new file mode 100644
index 0000000000..eac9d0c211
--- /dev/null
+++ b/packages/openmoko-panel-plugins/openmoko-panel-usb_svn.bb
@@ -0,0 +1,5 @@
+DESCRIPTION = "USB applet for the OpenMoko panel"
+PV = "0.1.0+svn${SVNREV}"
+
+inherit openmoko-panel-plugin
+
diff --git a/packages/openmoko-pim/files/.mtn2git_empty b/packages/openmoko-pim/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko-pim/files/.mtn2git_empty
diff --git a/packages/openmoko-pim/openmoko-contacts/index.theme b/packages/openmoko-pim/files/index.theme
index 4e9cf67820..4e9cf67820 100644
--- a/packages/openmoko-pim/openmoko-contacts/index.theme
+++ b/packages/openmoko-pim/files/index.theme
diff --git a/packages/openmoko-pim/openmoko-contacts/intltool-update.in b/packages/openmoko-pim/files/intltool-update.in
index 0342a2740c..0342a2740c 100644
--- a/packages/openmoko-pim/openmoko-contacts/intltool-update.in
+++ b/packages/openmoko-pim/files/intltool-update.in
diff --git a/packages/openmoko-pim/files/openmoko-dates.desktop b/packages/openmoko-pim/files/openmoko-dates.desktop
new file mode 100644
index 0000000000..f13cadeb9a
--- /dev/null
+++ b/packages/openmoko-pim/files/openmoko-dates.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Dates
+Comment=Dates
+Exec=dates
+Icon=openmoko-dates
+Terminal=false
+Type=Application
+Categories=GTK;Application;PIM;Office
+MimeType=text/x-vcard;
+SingleInstance=false
+StartupNotify=true
diff --git a/packages/openmoko-pim/files/openmoko-dates.png b/packages/openmoko-pim/files/openmoko-dates.png
new file mode 100644
index 0000000000..ebe04f4096
--- /dev/null
+++ b/packages/openmoko-pim/files/openmoko-dates.png
Binary files differ
diff --git a/packages/contacts/files/stock_contact.png b/packages/openmoko-pim/files/stock_contact.png
index 123b4485ac..123b4485ac 100644
--- a/packages/contacts/files/stock_contact.png
+++ b/packages/openmoko-pim/files/stock_contact.png
Binary files differ
diff --git a/packages/contacts/files/stock_person.png b/packages/openmoko-pim/files/stock_person.png
index 2b1328b4e2..2b1328b4e2 100644
--- a/packages/contacts/files/stock_person.png
+++ b/packages/openmoko-pim/files/stock_person.png
Binary files differ
diff --git a/packages/openmoko-pim/openmoko-contacts_svn.bb b/packages/openmoko-pim/openmoko-contacts_svn.bb
index b1b7815a5a..0ee27ef73c 100644
--- a/packages/openmoko-pim/openmoko-contacts_svn.bb
+++ b/packages/openmoko-pim/openmoko-contacts_svn.bb
@@ -2,10 +2,10 @@ DESCRIPTION = "The OpenMoko address book"
LICENSE = "GPL"
SECTION = "openmoko/pim"
DEPENDS += "glib-2.0 gtk+ libglade eds-dbus gnome-vfs openmoko-libs"
-RDEPENDS = "gnome-vfs-plugin-file"
+RDEPENDS = "gnome-vfs-plugin-file libedata-book"
RRECOMMENDS = "gnome-vfs-plugin-http"
PV = "0.1+svn${SRCDATE}"
-PR = "r2"
+PR = "r3"
inherit openmoko
diff --git a/packages/openmoko-pim/openmoko-dates/compile-fix.patch b/packages/openmoko-pim/openmoko-dates/compile-fix.patch
deleted file mode 100644
index 41b1f173c2..0000000000
--- a/packages/openmoko-pim/openmoko-dates/compile-fix.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: omoko/src/dates_navigator.c
-===================================================================
---- omoko.orig/src/dates_navigator.c 2007-02-06 16:49:45.000000000 +0100
-+++ omoko/src/dates_navigator.c 2007-02-06 16:51:18.000000000 +0100
-@@ -18,7 +18,6 @@
-
- #include <string.h>
-
--#include <libedataserver/e-data-server-util.h>
- #include <libecal/e-cal.h>
- #include <libecal/e-cal-time-util.h>
- #include <libical/ical.h>
diff --git a/packages/openmoko-pim/openmoko-dates/intltool-update.in b/packages/openmoko-pim/openmoko-dates/intltool-update.in
deleted file mode 100644
index 661d8fe6ac..0000000000
--- a/packages/openmoko-pim/openmoko-dates/intltool-update.in
+++ /dev/null
@@ -1,1089 +0,0 @@
-#!@INTLTOOL_PERL@ -w
-# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-
-#
-# The Intltool Message Updater
-#
-# Copyright (C) 2000-2003 Free Software Foundation.
-#
-# Intltool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# version 2 published by the Free Software Foundation.
-#
-# Intltool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-#
-# Authors: Kenneth Christiansen <kenneth@gnu.org>
-# Maciej Stachowiak
-# Darin Adler <darin@bentspoon.com>
-
-## Release information
-my $PROGRAM = "intltool-update";
-my $VERSION = "0.35.0";
-my $PACKAGE = "intltool";
-
-## Loaded modules
-use strict;
-use Getopt::Long;
-use Cwd;
-use File::Copy;
-use File::Find;
-
-## Scalars used by the option stuff
-my $HELP_ARG = 0;
-my $VERSION_ARG = 0;
-my $DIST_ARG = 0;
-my $POT_ARG = 0;
-my $HEADERS_ARG = 0;
-my $MAINTAIN_ARG = 0;
-my $REPORT_ARG = 0;
-my $VERBOSE = 0;
-my $GETTEXT_PACKAGE = "";
-my $OUTPUT_FILE = "";
-
-my @languages;
-my %varhash = ();
-my %po_files_by_lang = ();
-
-# Regular expressions to categorize file types.
-# FIXME: Please check if the following is correct
-
-my $xml_support =
-"xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required)
-"ui|". # Bonobo specific - User Interface desc. files
-"lang|". # ?
-"glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required)
-"scm(?:\\.in)*|". # ? (Note: .in is not required)
-"oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files
-"etspec|". # ?
-"server(?:\\.in)+|". # Bonobo specific
-"sheet(?:\\.in)+|". # ?
-"schemas(?:\\.in)+|". # GConf specific
-"pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer.
-"kbd(?:\\.in)+"; # GOK specific.
-
-my $ini_support =
-"icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec
-"desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
-"caves(?:\\.in)+|". # GNOME Games specific
-"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
-"soundlist(?:\\.in)+|". # GNOME specific
-"keys(?:\\.in)+|". # GNOME Mime database specific
-"theme(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec
-"service(?:\\.in)+"; # DBus specific
-
-my $buildin_gettext_support =
-"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py";
-
-## Always flush buffer when printing
-$| = 1;
-
-## Sometimes the source tree will be rooted somewhere else.
-my $SRCDIR = ".";
-my $POTFILES_in;
-
-$SRCDIR = $ENV{"srcdir"} if $ENV{"srcdir"};
-$POTFILES_in = "<$SRCDIR/POTFILES.in";
-
-my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
-
-## Handle options
-GetOptions
-(
- "help" => \$HELP_ARG,
- "version" => \$VERSION_ARG,
- "dist|d" => \$DIST_ARG,
- "pot|p" => \$POT_ARG,
- "headers|s" => \$HEADERS_ARG,
- "maintain|m" => \$MAINTAIN_ARG,
- "report|r" => \$REPORT_ARG,
- "verbose|x" => \$VERBOSE,
- "gettext-package|g=s" => \$GETTEXT_PACKAGE,
- "output-file|o=s" => \$OUTPUT_FILE,
- ) or &Console_WriteError_InvalidOption;
-
-&Console_Write_IntltoolHelp if $HELP_ARG;
-&Console_Write_IntltoolVersion if $VERSION_ARG;
-
-my $arg_count = ($DIST_ARG > 0)
- + ($POT_ARG > 0)
- + ($HEADERS_ARG > 0)
- + ($MAINTAIN_ARG > 0)
- + ($REPORT_ARG > 0);
-
-&Console_Write_IntltoolHelp if $arg_count > 1;
-
-# --version and --help don't require a module name
-my $MODULE = $GETTEXT_PACKAGE || &FindPackageName || "unknown";
-
-if ($POT_ARG)
-{
- &GenerateHeaders;
- &GeneratePOTemplate;
-}
-elsif ($HEADERS_ARG)
-{
- &GenerateHeaders;
-}
-elsif ($MAINTAIN_ARG)
-{
- &FindLeftoutFiles;
-}
-elsif ($REPORT_ARG)
-{
- &GenerateHeaders;
- &GeneratePOTemplate;
- &Console_Write_CoverageReport;
-}
-elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/)
-{
- my $lang = $ARGV[0];
-
- ## Report error if the language file supplied
- ## to the command line is non-existent
- &Console_WriteError_NotExisting("$SRCDIR/$lang.po")
- if ! -s "$SRCDIR/$lang.po";
-
- if (!$DIST_ARG)
- {
- print "Working, please wait..." if $VERBOSE;
- &GenerateHeaders;
- &GeneratePOTemplate;
- }
- &POFile_Update ($lang, $OUTPUT_FILE);
- &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE);
-}
-else
-{
- &Console_Write_IntltoolHelp;
-}
-
-exit;
-
-#########
-
-sub Console_Write_IntltoolVersion
-{
- print <<_EOF_;
-${PROGRAM} (${PACKAGE}) $VERSION
-Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.
-
-Copyright (C) 2000-2003 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-_EOF_
- exit;
-}
-
-sub Console_Write_IntltoolHelp
-{
- print <<_EOF_;
-Usage: ${PROGRAM} [OPTION]... LANGCODE
-Updates PO template files and merge them with the translations.
-
-Mode of operation (only one is allowed):
- -p, --pot generate the PO template only
- -s, --headers generate the header files in POTFILES.in
- -m, --maintain search for left out files from POTFILES.in
- -r, --report display a status report for the module
- -d, --dist merge LANGCODE.po with existing PO template
-
-Extra options:
- -g, --gettext-package=NAME override PO template name, useful with --pot
- -o, --output-file=FILE write merged translation to FILE
- -x, --verbose display lots of feedback
- --help display this help and exit
- --version output version information and exit
-
-Examples of use:
-${PROGRAM} --pot just create a new PO template
-${PROGRAM} xy create new PO template and merge xy.po with it
-
-Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
-or send email to <xml-i18n-tools\@gnome.org>.
-_EOF_
- exit;
-}
-
-sub echo_n
-{
- my $str = shift;
- my $ret = `echo "$str"`;
-
- $ret =~ s/\n$//; # do we need the "s" flag?
-
- return $ret;
-}
-
-sub POFile_DetermineType ($)
-{
- my $type = $_;
- my $gettext_type;
-
- my $xml_regex = "(?:" . $xml_support . ")";
- my $ini_regex = "(?:" . $ini_support . ")";
- my $buildin_regex = "(?:" . $buildin_gettext_support . ")";
-
- if ($type =~ /\[type: gettext\/([^\]].*)]/)
- {
- $gettext_type=$1;
- }
- elsif ($type =~ /schemas(\.in)+$/)
- {
- $gettext_type="schemas";
- }
- elsif ($type =~ /glade2?(\.in)*$/)
- {
- $gettext_type="glade";
- }
- elsif ($type =~ /scm(\.in)*$/)
- {
- $gettext_type="scheme";
- }
- elsif ($type =~ /keys(\.in)+$/)
- {
- $gettext_type="keys";
- }
-
- # bucket types
-
- elsif ($type =~ /$xml_regex$/)
- {
- $gettext_type="xml";
- }
- elsif ($type =~ /$ini_regex$/)
- {
- $gettext_type="ini";
- }
- elsif ($type =~ /$buildin_regex$/)
- {
- $gettext_type="buildin";
- }
- else
- {
- $gettext_type="unknown";
- }
-
- return "gettext\/$gettext_type";
-}
-
-sub TextFile_DetermineEncoding ($)
-{
- my $gettext_code="ASCII"; # All files are ASCII by default
- my $filetype=`file $_ | cut -d ' ' -f 2`;
-
- if ($? eq "0")
- {
- if ($filetype =~ /^(ISO|UTF)/)
- {
- chomp ($gettext_code = $filetype);
- }
- elsif ($filetype =~ /^XML/)
- {
- $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8
- }
- }
-
- return $gettext_code;
-}
-
-sub isNotValidMissing
-{
- my ($file) = @_;
-
- return if $file =~ /^\{arch\}\/.*$/;
- return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/;
-}
-
-sub FindLeftoutFiles
-{
- my (@buf_i18n_plain,
- @buf_i18n_xml,
- @buf_i18n_xml_unmarked,
- @buf_i18n_ini,
- @buf_potfiles,
- @buf_potfiles_ignore,
- @buf_allfiles,
- @buf_allfiles_sorted,
- @buf_potfiles_sorted
- );
-
- ## Search and find all translatable files
- find sub {
- push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/;
- push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/;
- push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/;
- push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
- }, "..";
-
-
- open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n";
- @buf_potfiles = grep !/^(#|\s*$)/, <POTFILES>;
- close POTFILES;
-
- foreach (@buf_potfiles) {
- s/^\[.*]\s*//;
- }
-
- print "Searching for missing translatable files...\n" if $VERBOSE;
-
- ## Check if we should ignore some found files, when
- ## comparing with POTFILES.in
- foreach my $ignore ("POTFILES.skip", "POTFILES.ignore")
- {
- (-s $ignore) or next;
-
- if ("$ignore" eq "POTFILES.ignore")
- {
- print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n".
- "content of this file to POTFILES.skip.\n";
- }
-
- print "Found $ignore: Ignoring files...\n" if $VERBOSE;
- open FILE, "<$ignore" or die "ERROR: Failed to open $ignore!\n";
-
- while (<FILE>)
- {
- push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/;
- }
- close FILE;
-
- @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles);
- }
-
- foreach my $file (@buf_i18n_plain)
- {
- my $in_comment = 0;
- my $in_macro = 0;
-
- open FILE, "<$file";
- while (<FILE>)
- {
- # Handle continued multi-line comment.
- if ($in_comment)
- {
- next unless s-.*\*/--;
- $in_comment = 0;
- }
-
- # Handle continued macro.
- if ($in_macro)
- {
- $in_macro = 0 unless /\\$/;
- next;
- }
-
- # Handle start of macro (or any preprocessor directive).
- if (/^\s*\#/)
- {
- $in_macro = 1 if /^([^\\]|\\.)*\\$/;
- next;
- }
-
- # Handle comments and quoted text.
- while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy
- {
- my $match = $1;
- if ($match eq "/*")
- {
- if (!s-/\*.*?\*/--)
- {
- s-/\*.*--;
- $in_comment = 1;
- }
- }
- elsif ($match eq "//")
- {
- s-//.*--;
- }
- else # ' or "
- {
- if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-)
- {
- warn "mismatched quotes at line $. in $file\n";
- s-$match.*--;
- }
- }
- }
-
- if (/\.GetString ?\(QUOTEDTEXT/)
- {
- if (defined isNotValidMissing (unpack("x3 A*", $file))) {
- ## Remove the first 3 chars and add newline
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- }
- last;
- }
-
- if (/_\(QUOTEDTEXT/)
- {
- if (defined isNotValidMissing (unpack("x3 A*", $file))) {
- ## Remove the first 3 chars and add newline
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- }
- last;
- }
- }
- close FILE;
- }
-
- foreach my $file (@buf_i18n_xml)
- {
- open FILE, "<$file";
-
- while (<FILE>)
- {
- # FIXME: share the pattern matching code with intltool-extract
- if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/)
- {
- if (defined isNotValidMissing (unpack("x3 A*", $file))) {
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- }
- last;
- }
- }
- close FILE;
- }
-
- foreach my $file (@buf_i18n_ini)
- {
- open FILE, "<$file";
- while (<FILE>)
- {
- if (/_(.*)=/)
- {
- if (defined isNotValidMissing (unpack("x3 A*", $file))) {
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- }
- last;
- }
- }
- close FILE;
- }
-
- foreach my $file (@buf_i18n_xml_unmarked)
- {
- if (defined isNotValidMissing (unpack("x3 A*", $file))) {
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- }
- }
-
-
- @buf_allfiles_sorted = sort (@buf_allfiles);
- @buf_potfiles_sorted = sort (@buf_potfiles);
-
- my %in2;
- foreach (@buf_potfiles_sorted)
- {
- $in2{$_} = 1;
- }
-
- my @result;
-
- foreach (@buf_allfiles_sorted)
- {
- if (!exists($in2{$_}))
- {
- push @result, $_
- }
- }
-
- my @buf_potfiles_notexist;
-
- foreach (@buf_potfiles_sorted)
- {
- chomp (my $dummy = $_);
- if ("$dummy" ne "" and ! -f "../$dummy")
- {
- push @buf_potfiles_notexist, $_;
- }
- }
-
- ## Save file with information about the files missing
- ## if any, and give information about this procedure.
- if (@result + @buf_potfiles_notexist > 0)
- {
- if (@result)
- {
- print "\n" if $VERBOSE;
- unlink "missing";
- open OUT, ">missing";
- print OUT @result;
- close OUT;
- warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n".
- "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n";
- print STDERR @result, "\n";
- warn "If some of these files are left out on purpose then please add them to\n".
- "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n".
- "of left out files has been written in the current directory.\n";
- }
- if (@buf_potfiles_notexist)
- {
- unlink "notexist";
- open OUT, ">notexist";
- print OUT @buf_potfiles_notexist;
- close OUT;
- warn "\n" if ($VERBOSE or @result);
- warn "\e[1mThe following files do not exist anymore:\e[0m\n\n";
- warn @buf_potfiles_notexist, "\n";
- warn "Please remove them from POTFILES.in or POTFILES.skip. A file \e[1m'notexist'\e[0m\n".
- "containing this list of absent files has been written in the current directory.\n";
- }
- }
-
- ## If there is nothing to complain about, notify the user
- else {
- print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE;
- }
-}
-
-sub Console_WriteError_InvalidOption
-{
- ## Handle invalid arguments
- print STDERR "Try `${PROGRAM} --help' for more information.\n";
- exit 1;
-}
-
-sub GenerateHeaders
-{
- my $EXTRACT = "@INTLTOOL_EXTRACT@";
- chomp $EXTRACT;
-
- $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"};
-
- ## Generate the .h header files, so we can allow glade and
- ## xml translation support
- if (! -x "$EXTRACT")
- {
- print STDERR "\n *** The intltool-extract script wasn't found!"
- ."\n *** Without it, intltool-update can not generate files.\n";
- exit;
- }
- else
- {
- open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n";
-
- while (<FILE>)
- {
- chomp;
- next if /^\[\s*encoding/;
-
- ## Find xml files in POTFILES.in and generate the
- ## files with help from the extract script
-
- my $gettext_type= &POFile_DetermineType ($1);
-
- if (/\.($xml_support|$ini_support)$/ || /^\[/)
- {
- s/^\[[^\[].*]\s*//;
-
- my $filename = "../$_";
-
- if ($VERBOSE)
- {
- system ($EXTRACT, "--update", "--srcdir=$SRCDIR",
- "--type=$gettext_type", $filename);
- }
- else
- {
- system ($EXTRACT, "--update", "--type=$gettext_type",
- "--srcdir=$SRCDIR", "--quiet", $filename);
- }
- }
- }
- close FILE;
- }
-}
-
-#
-# Generate .pot file from POTFILES.in
-#
-sub GeneratePOTemplate
-{
- my $XGETTEXT = $ENV{"XGETTEXT"} || "@INTLTOOL_XGETTEXT@";
- my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
- chomp $XGETTEXT;
-
- if (! -x $XGETTEXT)
- {
- print STDERR " *** xgettext is not found on this system!\n".
- " *** Without it, intltool-update can not extract strings.\n";
- exit;
- }
-
- print "Building $MODULE.pot...\n" if $VERBOSE;
-
- open INFILE, $POTFILES_in;
- unlink "POTFILES.in.temp";
- open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing");
-
- my $gettext_support_nonascii = 0;
-
- # checks for GNU gettext >= 0.12
- my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`;
- if ($? == 0)
- {
- $gettext_support_nonascii = 1;
- }
- else
- {
- # urge everybody to upgrade gettext
- print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n".
- " strings. That means you should install a version of gettext\n".
- " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n".
- " or have to let non-ASCII strings untranslated. (If there is any)\n";
- }
-
- my $encoding = "ASCII";
- my $forced_gettext_code;
- my @temp_headers;
- my $encoding_problem_is_reported = 0;
-
- while (<INFILE>)
- {
- next if (/^#/ or /^\s*$/);
-
- chomp;
-
- my $gettext_code;
-
- if (/^\[\s*encoding:\s*(.*)\s*\]/)
- {
- $forced_gettext_code=$1;
- }
- elsif (/\.($xml_support|$ini_support)$/ || /^\[/)
- {
- s/^\[.*]\s*//;
- print OUTFILE "../$_.h\n";
- push @temp_headers, "../$_.h";
- $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code);
- }
- else
- {
- if ($SRCDIR eq ".") {
- print OUTFILE "../$_\n";
- } else {
- print OUTFILE "$SRCDIR/../$_\n";
- }
- $gettext_code = &TextFile_DetermineEncoding ("../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code);
- }
-
- next if (! $gettext_support_nonascii);
-
- if (defined $forced_gettext_code)
- {
- $encoding=$forced_gettext_code;
- }
- elsif (defined $gettext_code and "$encoding" ne "$gettext_code")
- {
- if ($encoding eq "ASCII")
- {
- $encoding=$gettext_code;
- }
- elsif ($gettext_code ne "ASCII")
- {
- # Only report once because the message is quite long
- if (! $encoding_problem_is_reported)
- {
- print STDERR "WARNING: You should use the same file encoding for all your project files,\n".
- " but $PROGRAM thinks that most of the source files are in\n".
- " $encoding encoding, while \"$_\" is (likely) in\n".
- " $gettext_code encoding. If you are sure that all translatable strings\n".
- " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n".
- " line to POTFILES.in:\n\n".
- " [encoding: UTF-8]\n\n".
- " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n".
- "(such warning message will only be reported once.)\n";
- $encoding_problem_is_reported = 1;
- }
- }
- }
- }
-
- close OUTFILE;
- close INFILE;
-
- unlink "$MODULE.pot";
- my @xgettext_argument=("$XGETTEXT",
- "--add-comments",
- "--directory\=\.",
- "--output\=$MODULE\.pot",
- "--files-from\=\.\/POTFILES\.in\.temp");
- my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
- push @xgettext_argument, $XGETTEXT_KEYWORDS;
- my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress;
- push @xgettext_argument, "--msgid-bugs-address\=$MSGID_BUGS_ADDRESS" if $MSGID_BUGS_ADDRESS;
- push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii);
- push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS;
- my $xgettext_command = join ' ', @xgettext_argument;
-
- # intercept xgettext error message
- print "Running $xgettext_command\n" if $VERBOSE;
- my $xgettext_error_msg = `$xgettext_command 2>\&1`;
- my $command_failed = $?;
-
- unlink "POTFILES.in.temp";
-
- print "Removing generated header (.h) files..." if $VERBOSE;
- unlink foreach (@temp_headers);
- print "done.\n" if $VERBOSE;
-
- if (! $command_failed)
- {
- if (! -e "$MODULE.pot")
- {
- print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE;
- }
- else
- {
- print "Wrote $MODULE.pot\n" if $VERBOSE;
- }
- }
- else
- {
- if ($xgettext_error_msg =~ /--from-code/)
- {
- # replace non-ASCII error message with a more useful one.
- print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n".
- " string marked for translation. Please make sure that all strings marked\n".
- " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n".
- " following line to POTFILES.in and rerun $PROGRAM:\n\n".
- " [encoding: UTF-8]\n\n";
- }
- else
- {
- print STDERR "$xgettext_error_msg";
- if (-e "$MODULE.pot")
- {
- # is this possible?
- print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n".
- " Please consult error message above if there is any.\n";
- }
- else
- {
- print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n".
- " error message above if there is any.\n";
- }
- }
- exit (1);
- }
-}
-
-sub POFile_Update
-{
- -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n";
-
- my $MSGMERGE = $ENV{"MSGMERGE"} || "@INTLTOOL_MSGMERGE@";
- my ($lang, $outfile) = @_;
-
- print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE;
-
- my $infile = "$SRCDIR/$lang.po";
- $outfile = "$SRCDIR/$lang.po" if ($outfile eq "");
-
- # I think msgmerge won't overwrite old file if merge is not successful
- system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot");
-}
-
-sub Console_WriteError_NotExisting
-{
- my ($file) = @_;
-
- ## Report error if supplied language file is non-existing
- print STDERR "$PROGRAM: $file does not exist!\n";
- print STDERR "Try '$PROGRAM --help' for more information.\n";
- exit;
-}
-
-sub GatherPOFiles
-{
- my @po_files = glob ("./*.po");
-
- @languages = map (&POFile_GetLanguage, @po_files);
-
- foreach my $lang (@languages)
- {
- $po_files_by_lang{$lang} = shift (@po_files);
- }
-}
-
-sub POFile_GetLanguage ($)
-{
- s/^(.*\/)?(.+)\.po$/$2/;
- return $_;
-}
-
-sub Console_Write_TranslationStatus
-{
- my ($lang, $output_file) = @_;
- my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@";
-
- $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
-
- system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file);
-}
-
-sub Console_Write_CoverageReport
-{
- my $MSGFMT = $ENV{"MSGFMT"} || "@INTLTOOL_MSGFMT@";
-
- &GatherPOFiles;
-
- foreach my $lang (@languages)
- {
- print "$lang: ";
- &POFile_Update ($lang, "");
- }
-
- print "\n\n * Current translation support in $MODULE \n\n";
-
- foreach my $lang (@languages)
- {
- print "$lang: ";
- system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po");
- }
-}
-
-sub SubstituteVariable
-{
- my ($str) = @_;
-
- # always need to rewind file whenever it has been accessed
- seek (CONF, 0, 0);
-
- # cache each variable. varhash is global to we can add
- # variables elsewhere.
- while (<CONF>)
- {
- if (/^(\w+)=(.*)$/)
- {
- ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/;
- }
- }
-
- if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/)
- {
- my $rest = $3;
- my $untouched = $1;
- my $sub = "";
- # Ignore recursive definitions of variables
- $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
-
- return SubstituteVariable ("$untouched$sub$rest");
- }
-
- # We're using Perl backticks ` and "echo -n" here in order to
- # expand any shell escapes (such as backticks themselves) in every variable
- return echo_n ($str);
-}
-
-sub CONF_Handle_Open
-{
- my $base_dirname = getcwd();
- $base_dirname =~ s@.*/@@;
-
- my ($conf_in, $src_dir);
-
- if ($base_dirname =~ /^po(-.+)?$/)
- {
- if (-f "Makevars")
- {
- my $makefile_source;
-
- local (*IN);
- open (IN, "<Makevars") || die "can't open Makevars: $!";
-
- while (<IN>)
- {
- if (/^top_builddir[ \t]*=/)
- {
- $src_dir = $_;
- $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
-
- chomp $src_dir;
- if (-f "$src_dir" . "/configure.ac") {
- $conf_in = "$src_dir" . "/configure.ac" . "\n";
- } else {
- $conf_in = "$src_dir" . "/configure.in" . "\n";
- }
- last;
- }
- }
- close IN;
-
- $conf_in || die "Cannot find top_builddir in Makevars.";
- }
- elsif (-f "../configure.ac")
- {
- $conf_in = "../configure.ac";
- }
- elsif (-f "../configure.in")
- {
- $conf_in = "../configure.in";
- }
- else
- {
- my $makefile_source;
-
- local (*IN);
- open (IN, "<Makefile") || return;
-
- while (<IN>)
- {
- if (/^top_srcdir[ \t]*=/)
- {
- $src_dir = $_;
- $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
-
- chomp $src_dir;
- $conf_in = "$src_dir" . "/configure.in" . "\n";
-
- last;
- }
- }
- close IN;
-
- $conf_in || die "Cannot find top_srcdir in Makefile.";
- }
-
- open (CONF, "<$conf_in");
- }
- else
- {
- print STDERR "$PROGRAM: Unable to proceed.\n" .
- "Make sure to run this script inside the po directory.\n";
- exit;
- }
-}
-
-sub FindPackageName
-{
- my $version;
- my $domain = &FindMakevarsDomain;
- my $name = $domain || "untitled";
-
- &CONF_Handle_Open;
-
- my $conf_source; {
- local (*IN);
- open (IN, "<&CONF") || return $name;
- seek (IN, 0, 0);
- local $/; # slurp mode
- $conf_source = <IN>;
- close IN;
- }
-
- # priority for getting package name:
- # 1. GETTEXT_PACKAGE
- # 2. first argument of AC_INIT (with >= 2 arguments)
- # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument)
-
- # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m
- # the \s makes this not work, why?
- if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m)
- {
- ($name, $version) = ($1, $2);
- $name =~ s/[\[\]\s]//g;
- $version =~ s/[\[\]\s]//g;
- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
- }
-
- if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m)
- {
- ($name, $version) = ($1, $2);
- $name =~ s/[\[\]\s]//g;
- $version =~ s/[\[\]\s]//g;
- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
- }
-
- # \s makes this not work, why?
- $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
-
- # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value
- # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables.
- $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g;
-
- $name = $domain if $domain;
-
- $name = SubstituteVariable ($name);
- $name =~ s/^["'](.*)["']$/$1/;
-
- return $name if $name;
-}
-
-
-sub FindPOTKeywords
-{
-
- my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_";
- my $varname = "XGETTEXT_OPTIONS";
- my $make_source; {
- local (*IN);
- open (IN, "<Makevars") || (open(IN, "<Makefile.in.in") && ($varname = "XGETTEXT_KEYWORDS")) || return $keywords;
- seek (IN, 0, 0);
- local $/; # slurp mode
- $make_source = <IN>;
- close IN;
- }
-
- $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m;
-
- return $keywords;
-}
-
-sub FindMakevarsDomain
-{
-
- my $domain = "";
- my $makevars_source; {
- local (*IN);
- open (IN, "<Makevars") || return $domain;
- seek (IN, 0, 0);
- local $/; # slurp mode
- $makevars_source = <IN>;
- close IN;
- }
-
- $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m;
- $domain =~ s/^\s+//;
- $domain =~ s/\s+$//;
-
- return $domain;
-}
-
-sub FindMakevarsBugAddress
-{
-
- my $address = "";
- my $makevars_source; {
- local (*IN);
- open (IN, "<Makevars") || return undef;
- seek (IN, 0, 0);
- local $/; # slurp mode
- $makevars_source = <IN>;
- close IN;
- }
-
- $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m;
- $address =~ s/^\s+//;
- $address =~ s/\s+$//;
-
- return $address;
-}
diff --git a/packages/openmoko-pim/openmoko-dates/remove-bogus-include.patch b/packages/openmoko-pim/openmoko-dates/remove-bogus-include.patch
deleted file mode 100644
index 4740612a8b..0000000000
--- a/packages/openmoko-pim/openmoko-dates/remove-bogus-include.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- /tmp/dates_navigator.c 2007-02-15 13:36:27.000000000 +0100
-+++ omoko/src/dates_navigator.c 2007-02-15 13:36:35.435251000 +0100
-@@ -21,7 +21,6 @@
- #include <libecal/e-cal.h>
- #include <libecal/e-cal-time-util.h>
- #include <libical/ical.h>
--#include <libedataserver/e-data-server-util.h>
-
- #include <gtk/gtk.h>
- #include <glib/gi18n.h>
diff --git a/packages/openmoko-pim/openmoko-dates_svn.bb b/packages/openmoko-pim/openmoko-dates_svn.bb
index 481b6e829f..5d52871ecd 100644
--- a/packages/openmoko-pim/openmoko-dates_svn.bb
+++ b/packages/openmoko-pim/openmoko-dates_svn.bb
@@ -1,24 +1,29 @@
-DESCRIPTION = "Dates is a calendar application."
+DESCRIPTION = "The OpenMoko Dates Application"
SECTION = "openmoko/pim"
LICENSE = "GPL"
DEPENDS = "glib-2.0 gtk+ libglade eds-dbus openmoko-libs"
+RDEPENDS = "libedata-cal"
PV = "0.1+svn${SRCDATE}"
-PR = "r4"
+PR = "r9"
inherit gnome autotools pkgconfig gtk-icon-cache
SRC_URI = "svn://svn.o-hand.com/repos/dates/branches/;module=openmoko;proto=http \
- "
+ file://openmoko-dates.png \
+ file://openmoko-dates.desktop"
S = "${WORKDIR}/openmoko"
EXTRA_OECONF = "--enable-omoko"
do_install_append () {
+ rm -rf ${D}${datadir}/icons
+ rm -rf ${D}${datadir}/applications/dates.desktop
install -d ${D}/${datadir}/pixmaps
- install -m 0644 ${D}/${datadir}/icons/hicolor/48x48/apps/dates.png ${D}/${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/openmoko-dates.png ${D}/${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/openmoko-dates.desktop ${D}${datadir}/applications/
}
-FILES_${PN} += "${datadir}/pixmaps/dates.png \
+FILES_${PN} += "${datadir}/pixmaps \
${datadir}/dates/"
diff --git a/packages/openmoko-pim/openmoko-tasks_svn.bb b/packages/openmoko-pim/openmoko-tasks_svn.bb
new file mode 100644
index 0000000000..b3c627e621
--- /dev/null
+++ b/packages/openmoko-pim/openmoko-tasks_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "The OpenMoko Tasks Application"
+SECTION = "openmoko/pim"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 gtk+ libglade eds-dbus openmoko-libs"
+RDEPENDS = "libedata-cal"
+PV = "0.1+svn${SRCDATE}"
+PR = "r0"
+
+inherit gnome autotools pkgconfig gtk-icon-cache
+
+SRC_URI = "svn://svn.o-hand.com/repos/tasks/;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
+
+EXTRA_OECONF = "--enable-omoko --disable-gtk"
+
diff --git a/packages/openmoko-pim/openmoko-today_svn.bb b/packages/openmoko-pim/openmoko-today_svn.bb
index 8eb098bebb..da5a961671 100644
--- a/packages/openmoko-pim/openmoko-today_svn.bb
+++ b/packages/openmoko-pim/openmoko-today_svn.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "OpenMoko Today application."
SECTION = "openmoko/pim"
LICENSE = "GPL"
-DEPENDS = "openmoko-libs"
+DEPENDS = "openmoko-libs eds-dbus startup-notification"
PV = "0.1+svn${SRCDATE}"
inherit autotools pkgconfig gtk-icon-cache openmoko
diff --git a/packages/openmoko2/.mtn2git_empty b/packages/openmoko2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko2/.mtn2git_empty
diff --git a/packages/openmoko2/libmokogsmd2_svn.bb b/packages/openmoko2/libmokogsmd2_svn.bb
new file mode 100644
index 0000000000..2551519348
--- /dev/null
+++ b/packages/openmoko2/libmokogsmd2_svn.bb
@@ -0,0 +1,11 @@
+SECTION = "openmoko/libs"
+DEPENDS = "libgsmd glib-2.0"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
+
+inherit openmoko2
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/openmoko2/libmokojournal2_svn.bb b/packages/openmoko2/libmokojournal2_svn.bb
new file mode 100644
index 0000000000..007131659a
--- /dev/null
+++ b/packages/openmoko2/libmokojournal2_svn.bb
@@ -0,0 +1,10 @@
+SECTION = "openmoko/libs"
+DEPENDS = "eds-dbus"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
+
+inherit openmoko2
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/openmoko2/libmokopanelui2_svn.bb b/packages/openmoko2/libmokopanelui2_svn.bb
new file mode 100644
index 0000000000..bfeb22fd7b
--- /dev/null
+++ b/packages/openmoko2/libmokopanelui2_svn.bb
@@ -0,0 +1,11 @@
+SECTION = "openmoko/libs"
+DEPENDS = "gtk+"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
+
+inherit openmoko2
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/openmoko2/libmokoui2_svn.bb b/packages/openmoko2/libmokoui2_svn.bb
new file mode 100644
index 0000000000..86372ae274
--- /dev/null
+++ b/packages/openmoko2/libmokoui2_svn.bb
@@ -0,0 +1,14 @@
+SECTION = "openmoko/libs"
+DEPENDS = "gtk+"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
+
+inherit openmoko2
+
+do_stage() {
+ autotools_stage_all
+}
+
+
+
+
diff --git a/packages/openmoko2/neod_svn.bb b/packages/openmoko2/neod_svn.bb
new file mode 100644
index 0000000000..fd417c69f3
--- /dev/null
+++ b/packages/openmoko2/neod_svn.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "Simple Neo1973 Daemon for Button Handling and Power Management"
+SECTION = "openmoko/daemons"
+DEPENDS = "gtk+ pulseaudio"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r0"
+
+inherit openmoko2
diff --git a/packages/openmoko2/openmoko-calculator2_svn.bb b/packages/openmoko2/openmoko-calculator2_svn.bb
new file mode 100644
index 0000000000..8bb80c602b
--- /dev/null
+++ b/packages/openmoko2/openmoko-calculator2_svn.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "A Calculator for OpenMoko"
+SECTION = "openmoko/tools"
+DEPENDS = "libmokoui2"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r0"
+
+inherit openmoko2
diff --git a/packages/openmoko2/openmoko-contacts2_svn.bb b/packages/openmoko2/openmoko-contacts2_svn.bb
new file mode 100644
index 0000000000..80d5d26f09
--- /dev/null
+++ b/packages/openmoko2/openmoko-contacts2_svn.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "The OpenMoko address book"
+SECTION = "openmoko/pim"
+RDEPENDS = "libedata-book"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r2"
+
+inherit openmoko2
+
+SRC_URI = "svn://svn.o-hand.com/repos/contacts/branches;module=hito;proto=http"
+S = "${WORKDIR}/hito/"
+
+EXTRA_OECONF = "--disable-gnome-vfs --with-frontend=openmoko"
diff --git a/packages/openmoko2/openmoko-dialer2_svn.bb b/packages/openmoko2/openmoko-dialer2_svn.bb
new file mode 100644
index 0000000000..672f5d8cb1
--- /dev/null
+++ b/packages/openmoko2/openmoko-dialer2_svn.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "The OpenMoko Dialer"
+SECTION = "openmoko/pim"
+DEPENDS = "libmokogsmd2 libmokoui2 libmokojournal2 gstreamer"
+RDEPENDS = "gst-meta-audio"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r2"
+
+inherit openmoko2
+
+EXTRA_OECONF = "--with-dbusbindir=${STAGING_BINDIR_NATIVE}"
+
+FILES_${PN} += "${datadir}/openmoko-dialer/ ${datadir}/dbus-1/services/"
diff --git a/packages/openmoko2/openmoko-feedreader2_svn.bb b/packages/openmoko2/openmoko-feedreader2_svn.bb
new file mode 100644
index 0000000000..04b08539f2
--- /dev/null
+++ b/packages/openmoko2/openmoko-feedreader2_svn.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "The OpenMoko Feed Reader"
+SECTION = "openmoko/apps"
+DEPENDS += "libmrss check webkit"
+PV = "0.0.1+svn${SVNREV}"
+PR = "r0"
+
+inherit openmoko2
diff --git a/packages/openmoko2/openmoko-icon-theme-standard2_svn.bb b/packages/openmoko2/openmoko-icon-theme-standard2_svn.bb
new file mode 100644
index 0000000000..e443e36075
--- /dev/null
+++ b/packages/openmoko2/openmoko-icon-theme-standard2_svn.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Standard Gtk+ icon theme for the OpenMoko distribution"
+SECTION = "openmoko/base"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r0"
+
+inherit openmoko2
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/OM-2007.2/artwork/;module=icons;proto=http"
+S = "${WORKDIR}/icons"
+
+pkg_postinst_${PN} () {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ gtk-update-icon-cache -q /usr/share/icons/openmoko-standard
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/openmoko2/openmoko-session2.bb b/packages/openmoko2/openmoko-session2.bb
new file mode 100644
index 0000000000..86e1485003
--- /dev/null
+++ b/packages/openmoko2/openmoko-session2.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Custom MB session files for poky"
+LICENSE = "GPL"
+SECTION = "x11"
+RDEPENDS = "matchbox-common matchbox-applet-startup-monitor matchbox-panel-2"
+RCONFLICTS = "openmoko-session"
+PR = "r23"
+
+SRC_URI = "file://etc"
+S = ${WORKDIR}
+
+do_install() {
+ cp -R ${S}/etc ${D}/etc
+ rm -fR ${D}/etc/.svn
+ rm -fR ${D}/etc/matchbox/.svn
+ chmod -R 755 ${D}/etc
+}
+
+pkg_postinst_openmoko-session2 () {
+#!/bin/sh -e
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/theme openmoko-standard-2
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/icon_theme openmoko-standard
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/font_name "Sans 5"
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type int --set /desktop/poky/peripherals/mouse/drag_threshold 8
+}
diff --git a/packages/openmoko2/openmoko-session2/.mtn2git_empty b/packages/openmoko2/openmoko-session2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko2/openmoko-session2/.mtn2git_empty
diff --git a/packages/openmoko2/openmoko-session2/etc/.mtn2git_empty b/packages/openmoko2/openmoko-session2/etc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko2/openmoko-session2/etc/.mtn2git_empty
diff --git a/packages/openmoko2/openmoko-session2/etc/matchbox/.mtn2git_empty b/packages/openmoko2/openmoko-session2/etc/matchbox/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko2/openmoko-session2/etc/matchbox/.mtn2git_empty
diff --git a/packages/openmoko2/openmoko-session2/etc/matchbox/session b/packages/openmoko2/openmoko-session2/etc/matchbox/session
new file mode 100755
index 0000000000..60ce553f67
--- /dev/null
+++ b/packages/openmoko2/openmoko-session2/etc/matchbox/session
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+SHOWCURSOR="no"
+
+openmoko-today &
+openmoko-dialer &
+
+matchbox-window-manager -use_titlebar yes -use_desktop_mode decorated -theme openmoko-standard-2 -use_cursor $SHOWCURSOR $@ &
+
+exec matchbox-panel-2 --start-applets showdesktop,systray,startup \
+ --end-applets openmoko-panel-battery,openmoko-panel-gsm,openmoko-panel-gps,openmoko-panel-usb,openmoko-panel-bt,openmoko-panel-clock --titlebar
diff --git a/packages/openmoko2/openmoko-terminal2/.mtn2git_empty b/packages/openmoko2/openmoko-terminal2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openmoko2/openmoko-terminal2/.mtn2git_empty
diff --git a/packages/openmoko2/openmoko-terminal2/openmoko-terminal.desktop b/packages/openmoko2/openmoko-terminal2/openmoko-terminal.desktop
new file mode 100644
index 0000000000..2777736039
--- /dev/null
+++ b/packages/openmoko2/openmoko-terminal2/openmoko-terminal.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Terminal
+Comment=Command Line Interface Terminal
+Exec=mrxvt
+Icon=openmoko-terminal
+Terminal=false
+Type=Application
+Categories=GTK;Application;PIM;Office
+MimeType=text/x-vcard;
+SingleInstance=false
+StartupNotify=true
diff --git a/packages/openmoko2/openmoko-terminal2/openmoko-terminal.png b/packages/openmoko2/openmoko-terminal2/openmoko-terminal.png
new file mode 100644
index 0000000000..56e8e59628
--- /dev/null
+++ b/packages/openmoko2/openmoko-terminal2/openmoko-terminal.png
Binary files differ
diff --git a/packages/openmoko2/openmoko-terminal2_1.0.0.bb b/packages/openmoko2/openmoko-terminal2_1.0.0.bb
new file mode 100644
index 0000000000..8d9a5245ca
--- /dev/null
+++ b/packages/openmoko2/openmoko-terminal2_1.0.0.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "The OpenMoko Command Line Console"
+SECTION = "openmoko/applications"
+RDEPENDS += "mrxvt"
+PR = "r1"
+
+inherit openmoko2
+
+SRC_URI = "file://openmoko-terminal.png \
+ file://openmoko-terminal.desktop"
+
+do_install() {
+ install -d ${D}${datadir}/pixmaps
+ install -d ${D}${datadir}/applications
+ install -m 0644 ${WORKDIR}/openmoko-terminal.png ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/openmoko-terminal.desktop ${D}${datadir}/applications/
+}
+
+pkg_postinst_${PN}() {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ echo "adding font defaults to system-wide mrxvtrc..."
+ cat <<EOF >> ${sysconfdir}/mrxvt/mrxvtrc
+#
+# ---------------------------------- FONTS ----------------------------------- #
+#
+Mrxvt.xft: 1
+Mrxvt.xftFont: Bitstream Vera Sans Mono
+Mrxvt.xftSize: 8
+Mrxvt.xftAntialias: 1
+
+# Don't load a multi-char font. This will reduce the line space if your multi
+# char font has different dimensions than the regular font. You might need to
+# comment it out if you want to use XIM and non-english fonts.
+Mrxvt.xftNomFont: 1
+
+# Font to use for tab bar / menus. This need not be mono-spaced ;).
+Mrxvt.xftPFont: Bitstream Vera Sans
+Mrxvt.xftPSize: 8
+EOF
+
+}
diff --git a/packages/openmoko2/openmoko-theme-standard2_svn.bb b/packages/openmoko2/openmoko-theme-standard2_svn.bb
new file mode 100644
index 0000000000..bbeba4420f
--- /dev/null
+++ b/packages/openmoko2/openmoko-theme-standard2_svn.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Standard Gtk+ theme for the OpenMoko distribution"
+SECTION = "openmoko/base"
+RCONFLICTS = "openmoko-theme-standard"
+PV = "0.1.0+svnr${SRCDATE}"
+PR = "r2"
+
+inherit openmoko2
+
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/OM-2007.2/artwork/themes;module=openmoko-standard-2;proto=http"
+S = "${WORKDIR}/openmoko-standard-2"
+
+do_install() {
+ find ${WORKDIR} -name ".svn" | xargs rm -rf
+ install -d ${D}${datadir}/themes/openmoko-standard-2/gtk-2.0
+ cp -fpPR ${S}/* ${D}${datadir}/themes/openmoko-standard-2/
+ rm -rf ${D}${datadir}/themes/openmoko-standard-2/patches/
+
+ install -d ${D}${sysconfdir}/gtk-2.0
+ echo 'include "${datadir}/themes/openmoko-standard-2/gtk-2.0/gtkrc"' >> ${D}${sysconfdir}/gtk-2.0/gtkrc
+}
+
+CONFFILES_${PN} = "${sysconfdir}/gtk-2.0/gtkrc"
+
+PACKAGE_ARCH = "all"
+FILES_${PN} = "${datadir} ${sysconfdir}"
diff --git a/packages/openmoko2/openmoko-today2_svn.bb b/packages/openmoko2/openmoko-today2_svn.bb
new file mode 100644
index 0000000000..93e0b47456
--- /dev/null
+++ b/packages/openmoko2/openmoko-today2_svn.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "The OpenMoko Application Launcher"
+SECTION = "openmoko/pim"
+DEPENDS = "libmokoui2 libmokojournal2 startup-notification dbus-glib libice libsm"
+RDEPENDS = "libedata-cal"
+PV = "0.1.0+svn${SVNREV}"
+PR = "r1"
+
+inherit openmoko2 gtk-icon-cache
diff --git a/packages/openobex/openobex-1.3/.mtn2git_empty b/packages/openobex/openobex-1.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openobex/openobex-1.3/.mtn2git_empty
diff --git a/packages/openobex/openobex-1.3/libusb_crosscompile_check.patch b/packages/openobex/openobex-1.3/libusb_crosscompile_check.patch
new file mode 100644
index 0000000000..ca5bc0041a
--- /dev/null
+++ b/packages/openobex/openobex-1.3/libusb_crosscompile_check.patch
@@ -0,0 +1,11 @@
+--- /tmp/acinclude.m4 2007-07-19 15:11:49.000000000 +0200
++++ openobex-1.3/acinclude.m4 2007-07-19 15:13:06.925215000 +0200
+@@ -128,7 +128,7 @@
+
+ if (test "${usb_enable}" = "yes" && test "${usb_found}" = "yes"); then
+ AC_DEFINE(HAVE_USB, 1, [Define if system supports USB and it's enabled])
+- AC_CHECK_FILE(${prefix}/lib/pkgconfig/libusb.pc, REQUIRES="$REQUIRES libusb")
++ REQUIRES="libusb"
+ fi
+
+ AM_CONDITIONAL(APPS, test "${apps_enable}" = "yes")
diff --git a/packages/openobex/openobex_1.2.bb b/packages/openobex/openobex_1.2.bb
index e6ec335978..358415d9b0 100644
--- a/packages/openobex/openobex_1.2.bb
+++ b/packages/openobex/openobex_1.2.bb
@@ -8,7 +8,7 @@ LICENSE = "GPL"
PR = "r5"
SRC_URI = "${SOURCEFORGE_MIRROR}/openobex/openobex-${PV}.tar.gz \
- file://disable-cable-test.patch;patch=1" \
+ file://disable-cable-test.patch;patch=1 \
file://libusb_crosscompile_check.patch;patch=1"
inherit autotools binconfig pkgconfig
diff --git a/packages/openobex/openobex_1.3.bb b/packages/openobex/openobex_1.3.bb
new file mode 100644
index 0000000000..606f8de1c3
--- /dev/null
+++ b/packages/openobex/openobex_1.3.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "The Openobex project is an open source implementation of the \
+Object Exchange (OBEX) protocol."
+HOMEPAGE = "http://openobex.triq.net"
+SECTION = "libs"
+PROVIDES = "openobex-apps"
+DEPENDS = "libusb bluez-libs"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/openobex/openobex-${PV}.tar.gz \
+ file://disable-cable-test.patch;patch=1 \
+ file://libusb_crosscompile_check.patch;patch=1"
+
+inherit autotools binconfig pkgconfig
+
+EXTRA_OECONF = "--enable-apps --enable-syslog --enable-dump \
+ --with-usb=${STAGING_LIBDIR}/.. --with-bluez=${STAGING_LIBDIR}/.."
+
+do_stage() {
+ oe_libinstall -so -C lib libopenobex ${STAGING_LIBDIR}
+ ln -sf libopenobex.so ${STAGING_LIBDIR}/libopenobex-1.2.so
+ install -d ${STAGING_INCDIR}/openobex
+ install -m 0644 include/*.h ${STAGING_INCDIR}/openobex/
+ install -d ${STAGING_DIR}/aclocal
+ install -m 0644 openobex.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+# how to stop shlibrename from renaming -apps?
+PACKAGES += "openobex-apps"
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}/openobex-config"
+FILES_${PN}-apps = "${bindir}/*"
+DEBIAN_NOAUTONAME_${PN}-apps = "1"
diff --git a/packages/openocd/files/.mtn2git_empty b/packages/openocd/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openocd/files/.mtn2git_empty
diff --git a/packages/openocd/files/openocd-link-static.patch b/packages/openocd/files/openocd-link-static.patch
new file mode 100644
index 0000000000..8a686efe5d
--- /dev/null
+++ b/packages/openocd/files/openocd-link-static.patch
@@ -0,0 +1,20 @@
+--- openocd/src/Makefile.am.orig 2007-03-01 11:51:41.000000000 -0300
++++ openocd/src/Makefile.am 2007-03-01 11:58:08.000000000 -0300
+@@ -7,7 +7,7 @@
+ -I$(top_srcdir)/src/flash -I$(top_srcdir)/src/pld $(all_includes)
+
+ # the library search path.
+-openocd_LDFLAGS = $(all_libraries)
++openocd_LDFLAGS = -static $(all_libraries)
+ SUBDIRS = helper jtag xsvf target server flash pld
+
+ if IS_MINGW
+@@ -17,7 +17,7 @@
+ endif
+
+ if FT2232_LIBFTDI
+-FTDI2232LIB = -lftdi
++FTDI2232LIB = -lftdi -lusb
+ else
+ FTDI2232LIB =
+ endif
diff --git a/packages/openocd/openocd-native_svn.bb b/packages/openocd/openocd-native_svn.bb
index a1953dbac2..4ab1d37fe2 100644
--- a/packages/openocd/openocd-native_svn.bb
+++ b/packages/openocd/openocd-native_svn.bb
@@ -6,6 +6,12 @@ DEPENDS = "libftdi-native"
EXTRA_OECONF = "--enable-ft2232_libftdi --enable-parport-ppdev"
do_stage() {
- install -m 0755 src/openocd ${STAGING_BINDIR}
+ install -m 0755 src/openocd ${STAGING_BINDIR_NATIVE}
}
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 src/openocd ${DEPLOY_DIR_IMAGE}/openocd
+}
+
+addtask deploy before do_package after do_install
diff --git a/packages/openocd/openocd_svn.bb b/packages/openocd/openocd_svn.bb
index 7df20d2b6b..ebe234aca5 100644
--- a/packages/openocd/openocd_svn.bb
+++ b/packages/openocd/openocd_svn.bb
@@ -3,10 +3,10 @@ HOMEPAGE = "http://openocd.berlios.de/"
LICENSE = "GPL"
PV = "0.0+svn${SRCDATE}"
-SRC_URI = "svn://svn.berlios.de/;module=openocd"
-
-S = "${WORKDIR}/openocd/trunk"
-
inherit autotools
-EXTRA_OECONF = " --disable-ftdi2232 --disable-ftd2xx"
+SRC_URI = "svn://svn.berlios.de/openocd;module=trunk \
+ file://openocd-link-static.patch;patch=1"
+S = "${WORKDIR}/trunk"
+
+EXTRA_OECONF = " --disable-ftdi2232 --disable-ftd2xx"
diff --git a/packages/openpbx/.mtn2git_empty b/packages/openpbx/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openpbx/.mtn2git_empty
diff --git a/packages/openpbx/files/.mtn2git_empty b/packages/openpbx/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openpbx/files/.mtn2git_empty
diff --git a/packages/openpbx/files/init b/packages/openpbx/files/init
new file mode 100644
index 0000000000..0ce88c4626
--- /dev/null
+++ b/packages/openpbx/files/init
@@ -0,0 +1,75 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/openpbx and type
+# > update-rc.d openpbx defaults 60
+#
+openpbx=/usr/sbin/openpbx
+pidfile=/var/run/openpbx.org/openpbx.pid
+
+test -x "$openpbx" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting OpenPBX"
+ start-stop-daemon --start --quiet --exec $openpbx -- -npq
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping OpenPBX"
+ $openpbx -rx "stop gracefully"
+ sleep 4
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ force-stop)
+ echo -n "Stopping OpenPBX"
+ $openpbx -rx "stop now"
+ sleep 2
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting OpenPBX"
+ if [ -f $pidfile ]; then
+ $openpbx -rx "restart gracefully"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $openpbx -- -npq
+ fi
+ ;;
+ force-restart)
+ echo -n "Forcibly Restarting OpenPBX"
+ if [ -f $pidfile ]; then
+ $openpbx -rx "restart now"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $openpbx -- -npq
+ fi
+ ;;
+ reload)
+ echo -n "Reloading OpenPBX Configuration"
+ if [ -f $pidfile ]; then
+ $openpbx -rx "reload"
+ else
+ start-stop-daemon --start --quiet --exec $openpbx -- -npq
+ fi
+ echo "."
+ ;;
+ logger-reload)
+# echo -n "Restating OpenPBX Logger"
+ if [ -f $pidfile ]; then
+ $openpbx -rx "logger reload"
+ fi
+# echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/openpbx {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
+ exit 1
+esac
+
+exit 0
diff --git a/packages/openpbx/files/logrotate b/packages/openpbx/files/logrotate
new file mode 100644
index 0000000000..a0192538a3
--- /dev/null
+++ b/packages/openpbx/files/logrotate
@@ -0,0 +1,13 @@
+/var/log/openpbx.org/cdr-csv/Master.csv /var/log/openpbx.org/queue_log /var/log/openpbx.org/event_log /var/log/openpbx.org/messages
+/var/log/openpbx.org/full {
+ daily
+ missingok
+ compress
+ delaycompress
+ rotate 30
+ sharedscripts
+ postrotate
+ /etc/init.d/openpbx logger-reload
+ endscript
+}
+
diff --git a/packages/openpbx/files/volatiles b/packages/openpbx/files/volatiles
new file mode 100644
index 0000000000..716d469e86
--- /dev/null
+++ b/packages/openpbx/files/volatiles
@@ -0,0 +1,6 @@
+d openpbx openpbx 0775 /var/run/openpbx.org none
+d openpbx openpbx 0775 /var/lib/openpbx.org none
+d openpbx openpbx 0775 /var/log/openpbx.org/cdr-csv none
+d openpbx openpbx 0775 /var/log/openpbx.org/cdr-custom none
+d openpbx openpbx 0775 /var/spool/openpbx.org/outgoing none
+d openpbx openpbx 0775 /var/spool/openpbx.org/voicemail none
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty b/packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch b/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch
new file mode 100644
index 0000000000..7f89772efa
--- /dev/null
+++ b/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch
@@ -0,0 +1,37 @@
+*** openpbx.org-1.2_rc3.old/bootstrap.sh Mon Feb 26 16:02:40 2007
+--- openpbx.org-1.2_rc3/bootstrap.sh Mon Feb 26 16:04:11 2007
+***************
+*** 89,104 ****
+ # Check for required version and die if unhappy
+
+ if [ "x$UNAME" = "xFreeBSD" ]; then
+! version_compare libtoolize 1 5 20 || exit 1
+! version_compare automake19 1 9 6 || exit 1
+ version_compare autoconf259 2 59 || exit 1
+ ACLOCAL=aclocal19
+ AUTOHEADER=autoheader259
+ AUTOMAKE=automake19
+ AUTOCONF=autoconf259
+ else
+! version_compare libtoolize 1 5 20 || exit 1
+! version_compare automake 1 9 6 || exit 1
+ version_compare autoconf 2 59 || exit 1
+ ACLOCAL=aclocal
+ AUTOHEADER=autoheader
+--- 89,104 ----
+ # Check for required version and die if unhappy
+
+ if [ "x$UNAME" = "xFreeBSD" ]; then
+! version_compare libtoolize 1 5 10 || exit 1
+! version_compare automake19 1 9 3 || exit 1
+ version_compare autoconf259 2 59 || exit 1
+ ACLOCAL=aclocal19
+ AUTOHEADER=autoheader259
+ AUTOMAKE=automake19
+ AUTOCONF=autoconf259
+ else
+! version_compare libtoolize 1 5 10 || exit 1
+! version_compare automake 1 9 3 || exit 1
+ version_compare autoconf 2 59 || exit 1
+ ACLOCAL=aclocal
+ AUTOHEADER=autoheader
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch b/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch
new file mode 100644
index 0000000000..55d0d33832
--- /dev/null
+++ b/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch
@@ -0,0 +1,46 @@
+*** openpbx.org-1.2_rc3.old/acmacros/openssl.m4 Tue Mar 6 15:21:39 2007
+--- openpbx.org-1.2_rc3/acmacros/openssl.m4 Tue Mar 6 15:23:18 2007
+***************
+*** 3,13 ****
+ #
+ AC_DEFUN([CHECK_SSL],
+ [AC_MSG_CHECKING(if ssl is wanted)
+! # AC_ARG_WITH(ssl,
+! # [ --with-ssl enable ssl [will check /usr/local/ssl
+! # /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw ]
+! # ],
+! #[ AC_MSG_RESULT(yes)
+ for dir in $withval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw; do
+ ssldir="$dir"
+ if test -f "$dir/include/openssl/ssl.h"; then
+--- 3,13 ----
+ #
+ AC_DEFUN([CHECK_SSL],
+ [AC_MSG_CHECKING(if ssl is wanted)
+! AC_ARG_WITH(ssl,
+! [ --with-ssl enable ssl [will check /usr/local/ssl
+! /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw ]
+! ],
+! [ AC_MSG_RESULT(yes)
+ for dir in $withval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw; do
+ ssldir="$dir"
+ if test -f "$dir/include/openssl/ssl.h"; then
+***************
+*** 33,40 ****
+ AC_SUBST([HAVE_SSL])
+ AC_SUBST([SSL_LIBS])
+ AC_SUBST([SSL_CFLAGS])
+! #],
+! #[
+! # AC_MSG_RESULT(no)
+! #])
+ ])dnl
+--- 33,40 ----
+ AC_SUBST([HAVE_SSL])
+ AC_SUBST([SSL_LIBS])
+ AC_SUBST([SSL_CFLAGS])
+! ],
+! [
+! AC_MSG_RESULT(no)
+! ])
+ ])dnl
diff --git a/packages/openpbx/openpbx.org-perl.bb b/packages/openpbx/openpbx.org-perl.bb
new file mode 100644
index 0000000000..124dfcfc8b
--- /dev/null
+++ b/packages/openpbx/openpbx.org-perl.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Openpbx::OGI Perl Gateway Interface Module"
+HOMEPAGE = "http://www.openpbx.org"
+SECTION = "libs"
+LICENSE = "GPL"
+DEPENDS = "install-native"
+RDEPENDS = "perl openpbx.org-ogi"
+PR = "r0"
+
+OPBXV = "openpbx.org-1.2_rc3"
+
+SRC_URI = "http://www.openpbx.org/releases/${OPBXV}.tar.gz"
+
+S = "${WORKDIR}/${OPBXV}/contrib/ogi-perl/openpbx-perl-${PV}"
+
+inherit cpan
+
+do_install_append () {
+ install -d ${D}${datadir}/openpbx.org/ogi/perl
+ install ${S}/examples/* ${D}${datadir}/openpbx.org/ogi/perl
+}
+
+PACKAGES =+ "${PN}-examples"
+
+FILES_${PN}-examples = "${datadir}/openpbx.org/ogi/perl"
diff --git a/packages/openpbx/openpbx.org_1.2_rc3.bb b/packages/openpbx/openpbx.org_1.2_rc3.bb
new file mode 100644
index 0000000000..e343eb8729
--- /dev/null
+++ b/packages/openpbx/openpbx.org_1.2_rc3.bb
@@ -0,0 +1,139 @@
+DESCRIPTION = "A flexible VOIP soft switch/PBX."
+DESCRIPTION_${PN}-ogi = "OpenPBX Gateway Inerface for scripted PBX call processing"
+DESCRIPTION_${PN}-fax = "Fax send/receive file and T.38 support for OpenPBX"
+DESCRIPTION_${PN}-ldap = "LDAP Directory services interface for OpenPBX"
+DESCRIPTION_${PN}-sounds = "Standard set of audio prompts for OpenPBX"
+HOMEPAGE = "http://www.openpbx.org"
+RDEPENDS = "ssmtp"
+SECTION = "voip"
+LICENSE = "GPL"
+DEPENDS = "openssl zlib tiff libcap spandsp speex readline js \
+ sox-native findutils-native"
+DEPENDS_${PN}-ldap = "openldap"
+RRECOMMENDS = "logrotate"
+RRECOMMENDS_${PN}-ogi = "perl perl-module-strict openpbx.org-perl"
+PV = "1.2_rc3"
+PR = "r2"
+
+SRC_URI = "http://www.openpbx.org/releases/${P}.tar.gz \
+ svn://svn.openpbx.org/openpbx-sounds/trunk/sounds/en_US;module=MelanieTaylor;proto=svn \
+ file://bootstrap.patch;patch=1 \
+ file://openssl.m4.patch;patch=1 \
+ file://logrotate \
+ file://volatiles \
+ file://init"
+
+PARALLEL_MAKE = ""
+INITSCRIPT_NAME = "openpbx"
+INITSCRIPT_PARAMS = "defaults 60"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = " --with-ssl=${STAGING_DIR}/${HOST_SYS} --enable-low_memory \
+ --disable-zaptel --with-directory-layout=lsb --enable-t38 \
+ --with-codec-speex=${STAGING_DIR}/${HOST_SYS} --with-app_ldap \
+ --with-perl-shebang='#!${bindir}/perl' --with-jabber --with-res_jabber \
+ --with-javascript --with-res_js \
+ --bindir=${bindir} --datadir=${datadir} --sysconfdir=${sysconfdir} \
+ --includedir=${includedir} --infodir=${infodir} --mandir=${mandir} \
+ --localstatedir=${localstatedir} --libdir=${libdir}"
+
+do_configure_prepend () {
+ ${S}/bootstrap.sh
+ # Fix some stupidness with the VoiceMail app naming. Case Matters!
+ sed -i 's:Voicemail:VoiceMail:' ${S}/configs/extensions.conf.sample
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/volatiles
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/logrotate
+ sed -i 's:/etc/init.d:${sysconfdir}/init.d:' ${WORKDIR}/logrotate
+}
+
+do_install_append() {
+ install -c -D -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/openpbx
+ install -c -D -m 644 ${WORKDIR}/logrotate ${D}${sysconfdir}/logrotate.d/openpbx
+ install -c -D -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/openpbx
+ # And now for sounds...
+ for file in `find ${WORKDIR}/MelanieTaylor -name \*.wav`; do
+ echo $file
+ sox -V $file -t raw -s -r 8000 -c 1 -w `echo $file|sed -e s/\.wav$/.sln/` resample -ql;
+ sox -V $file -t raw -U -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.ulaw/` resample -ql;
+ sox -V $file -t raw -A -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.alaw/` resample -ql;
+ sox -V $file -t gsm -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.gsm/` resample -ql;
+ relfile=`echo $file|sed -e s:^${WORKDIR}/MelanieTaylor/::`
+ relfile2=`echo $relfile|sed -e s:\.wav$::`
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.sln ${D}${datadir}/openpbx.org/sounds/$relfile2.sln
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.ulaw ${D}${datadir}/openpbx.org/sounds/$relfile2.ulaw
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.alaw ${D}${datadir}/openpbx.org/sounds/$relfile2.alaw
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.gsm ${D}${datadir}/openpbx.org/sounds/$relfile2.gsm
+ done
+}
+
+PACKAGES = "${PN}-sounds ${PN}-fax ${PN}-ogi ${PN}-ldap ${PN}-doc ${PN}-dev ${PN}"
+
+FILES_${PN}-sounds = "${datadir}/openpbx.org/sounds/*"
+FILES_${PN}-dev = "${libdir}/openpbx.org/modules/*.la \
+ ${libdir}/openpbx.org/*.la \
+ ${includedir}/openpbx/*"
+FILES_${PN}-fax = "${libdir}/openpbx.org/modules/app_backgrounddetect.so \
+ ${libdir}/openpbx.org/modules/app_faxdetect.so \
+ ${libdir}/openpbx.org/modules/app_rxfax.so \
+ ${libdir}/openpbx.org/modules/app_txfax.so"
+FILES_${PN}-ogi = "${libdir}/openpbx.org/modules/res_ogi.so \
+ ${datadir}/openpbx.org/ogi/*"
+FILES_${PN}-ldap = "${libdir}/openpbx.org/modules/app_ldap.*"
+
+pkg_postinst_prepend() {
+ grep -q openpbx ${sysconfdir}/group || addgroup --system openpbx
+ grep -q openpbx ${sysconfdir}/passwd || adduser --system --home ${localstatedir}/run/openpbx.org --no-create-home --disabled-password --ingroup openpbx -s ${base_bindir}/false openpbx
+ chown -R openpbx:openpbx ${libdir}/openpbx.org ${localstatedir}/lib/openpbx.org ${localstatedir}/spool/openpbx.org ${localstatedir}/log/openpbx.org ${localstatedir}/run/openpbx.org ${sysconfdir}/openpbx.org ${datadir}/openpbx.org
+ /etc/init.d/populate-volatile.sh update
+}
+
+pkg_postinst_${PN}-fax () {
+ chown -R openpbx:openpbx ${libdir}/openpbx.org
+}
+
+pkg_postinst_${PN}-ldap () {
+ chown -R openpbx:openpbx ${libdir}/openpbx.org
+}
+
+pkg_postinst_${PN}-sounds () {
+ chown -R openpbx:openpbx ${datadir}/openpbx.org
+}
+
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/musiconhold.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/adsi.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/adtranvofr.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/agents.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_custom.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_tds.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/codecs.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/dnsmgr.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/dundi.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/enum.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extconfig.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extensions.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extensions.ael"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/features.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/iax.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/indications.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/logger.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/meetme.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/mgcp.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/modem.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/modules.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/muted.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/openpbx.adsi"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/openpbx.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/osp.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/privacy.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/queues.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/rpt.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/rtp.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/sip.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/sip_notify.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/udptl.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/voicemail.conf"
+CONFFILES_${PN} += "${sysconfdir}/openpbx.org/woomera.conf"
diff --git a/packages/opensp/opensp-1.5/fix-docdir.patch b/packages/opensp/opensp-1.5/fix-docdir.patch
new file mode 100644
index 0000000000..4866874f4f
--- /dev/null
+++ b/packages/opensp/opensp-1.5/fix-docdir.patch
@@ -0,0 +1,11 @@
+Index: OpenSP-1.5/doc/Makefile.am
+===================================================================
+--- OpenSP-1.5.orig/doc/Makefile.am 2000-05-06 09:10:32.000000000 +1000
++++ OpenSP-1.5/doc/Makefile.am 2007-06-02 12:46:50.000000000 +1000
+@@ -1,6 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
+
+-docdir = $(prefix)/doc
+ pkgdocdir = $(docdir)/@PACKAGE@
+
+ MAINTAINERCLEANFILES = Makefile.in
diff --git a/packages/opensp/opensp-1.5/rangmap-fix.patch b/packages/opensp/opensp-1.5/rangmap-fix.patch
new file mode 100644
index 0000000000..55c00a8f08
--- /dev/null
+++ b/packages/opensp/opensp-1.5/rangmap-fix.patch
@@ -0,0 +1,12 @@
+Index: OpenSP-1.5/include/RangeMap.cxx
+===================================================================
+--- OpenSP-1.5.orig/include/RangeMap.cxx 2000-02-26 03:55:21.000000000 +1100
++++ OpenSP-1.5/include/RangeMap.cxx 2007-06-02 11:48:17.000000000 +1000
+@@ -7,6 +7,7 @@
+ #include "RangeMap.h"
+ #include "ISet.h"
+ #include "types.h"
++#include "constant.h"
+
+ #ifdef SP_NAMESPACE
+ namespace SP_NAMESPACE {
diff --git a/packages/opensp/opensp-native_1.5.bb b/packages/opensp/opensp-native_1.5.bb
index 47d05ced76..e0194c5798 100644
--- a/packages/opensp/opensp-native_1.5.bb
+++ b/packages/opensp/opensp-native_1.5.bb
@@ -1,9 +1,11 @@
SECTION = "libs"
DEPENDS = ""
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/openjade/OpenSP-${PV}.tar.gz \
file://m4.patch;patch=1 \
- file://attributevalue.patch;patch=1"
+ file://attributevalue.patch;patch=1 \
+ file://rangmap-fix.patch;patch=1"
S = "${WORKDIR}/OpenSP-${PV}"
LICENSE = "MIT"
inherit autotools native
diff --git a/packages/opensp/opensp_1.5.bb b/packages/opensp/opensp_1.5.bb
index 5d6ad639af..839fde5b8a 100644
--- a/packages/opensp/opensp_1.5.bb
+++ b/packages/opensp/opensp_1.5.bb
@@ -1,19 +1,30 @@
-SECTION = "libs"
DESCRIPTION = "OpenSP is a library and a set of tools \
for validating, parsing, and manipulating SGML and \
XML documents."
+HOMEPAGE = "http://openjade.sourceforge.net/"
+SECTION = "libs"
LICENSE = "MIT"
+PR = "r2"
+
+# sh4/gcc3.4.4 with -O2 triggers internal compiler errors
+FULL_OPTIMIZATION_sh4 = "-O1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/openjade/OpenSP-${PV}.tar.gz \
- file://m4.patch;patch=1 \
- file://attributevalue.patch;patch=1"
+ file://m4.patch;patch=1 \
+ file://attributevalue.patch;patch=1 \
+ file://rangmap-fix.patch;patch=1 \
+ file://fix-docdir.patch;patch=1"
+
S = "${WORKDIR}/OpenSP-${PV}"
inherit autotools
do_stage () {
- oe_libinstall -a -so -C lib libosp ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/OpenSP
- install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/OpenSP/
- install -m 0644 ${S}/include/*.cxx ${STAGING_INCDIR}/OpenSP/
- install -m 0644 ${S}/config.h ${STAGING_INCDIR}/OpenSP/config.h
+ oe_libinstall -a -so -C lib libosp ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}/OpenSP
+ install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/OpenSP/
+ install -m 0644 ${S}/include/*.cxx ${STAGING_INCDIR}/OpenSP/
+ install -m 0644 ${S}/config.h ${STAGING_INCDIR}/OpenSP/config.h
}
+
+FILES_${PN} += "${datadir}/OpenSP"
diff --git a/packages/openssl/openssl-0.9.7g/gnueabi-armeb.patch b/packages/openssl/openssl-0.9.7g/gnueabi-armeb.patch
new file mode 100644
index 0000000000..38f725b789
--- /dev/null
+++ b/packages/openssl/openssl-0.9.7g/gnueabi-armeb.patch
@@ -0,0 +1,10 @@
+--- openssl-0.9.7g/Configure~ 2007-07-07 21:08:27.000000000 +0930
++++ openssl-0.9.7g/Configure 2007-07-07 21:13:41.000000000 +0930
+@@ -477,6 +477,7 @@
+ "linux-elf-arm","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ "linux-elf-armeb","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ "linux-gnueabi-arm","gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
++"linux-gnueabi-armeb","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+
+ # SCO/Caldera targets.
+ #
diff --git a/packages/openssl/openssl-native_0.9.7g.bb b/packages/openssl/openssl-native_0.9.7g.bb
index dd4ba1a5ef..115d4011d9 100644
--- a/packages/openssl/openssl-native_0.9.7g.bb
+++ b/packages/openssl/openssl-native_0.9.7g.bb
@@ -2,7 +2,7 @@ inherit pkgconfig native
require openssl.inc
-PR = "r0"
+PR = "r1"
SRC_URI += "file://debian.patch;patch=1 \
file://armeb.patch;patch=1;pnum=0 \
diff --git a/packages/openssl/openssl.inc b/packages/openssl/openssl.inc
index e7e3b37e3c..25388b5fbb 100644
--- a/packages/openssl/openssl.inc
+++ b/packages/openssl/openssl.inc
@@ -14,12 +14,12 @@ export CFLAG_mtx-1 := "${@'${CFLAG}'.replace('-O2', '')}"
export CFLAG_mtx-2 := "${@'${CFLAG}'.replace('-O2', '')}"
export DIRS = "crypto ssl apps"
-export EX_LIBS = "-lgcc -ldl -L${STAGING_LIBDIR}"
+export EX_LIBS = "-lgcc -ldl ${TARGET_LDFLAGS}"
export AS = "${CC} -c"
PACKAGES =+ "libcrypto libssl"
-FILES_libcrypto = "${libdir}/libcrypto.so*"
-FILES_libssl = "${libdir}/libssl.so*"
+FILES_libcrypto = "${libdir}/libcrypto.so.*"
+FILES_libssl = "${libdir}/libssl.so.*"
do_compile () {
cd util
diff --git a/packages/openssl/openssl_0.9.7e.bb b/packages/openssl/openssl_0.9.7e.bb
index d9b8d91cdc..a7d3670758 100644
--- a/packages/openssl/openssl_0.9.7e.bb
+++ b/packages/openssl/openssl_0.9.7e.bb
@@ -1,6 +1,6 @@
require openssl.inc
-PR = "r4"
+PR = "r5"
SRC_URI += "file://debian.patch;patch=1 \
file://armeb.patch;patch=1 \
diff --git a/packages/openssl/openssl_0.9.7g.bb b/packages/openssl/openssl_0.9.7g.bb
index 4af1fbfd48..d61a3a8297 100644
--- a/packages/openssl/openssl_0.9.7g.bb
+++ b/packages/openssl/openssl_0.9.7g.bb
@@ -2,8 +2,9 @@ inherit pkgconfig
require openssl.inc
-PR = "r2"
+PR = "r4"
SRC_URI += "file://debian.patch;patch=1 \
file://armeb.patch;patch=1;pnum=0 \
- file://gnueabi-arm.patch;patch=1"
+ file://gnueabi-arm.patch;patch=1 \
+ file://gnueabi-armeb.patch;patch=1"
diff --git a/packages/opensync/libopensync-plugin-evo2-sync_0.22.bb b/packages/opensync/libopensync-plugin-evo2-sync_0.22.bb
new file mode 100644
index 0000000000..6b2609902a
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-evo2-sync_0.22.bb
@@ -0,0 +1,6 @@
+PLUGIN_ARCHIVE = "evolution2"
+
+require libopensync-plugin.inc
+require libopensync-plugin_0.22.inc
+
+DEPENDS += " eds-dbus"
diff --git a/packages/opensync/libopensync-plugin-evo2-sync_svn.bb b/packages/opensync/libopensync-plugin-evo2-sync_svn.bb
new file mode 100644
index 0000000000..0a8084e519
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-evo2-sync_svn.bb
@@ -0,0 +1,8 @@
+
+SRC_URI = "svn://svn.opensync.org/plugins;module=evolution2;proto=http"
+S = "${WORKDIR}/evolution2"
+
+require libopensync-plugin.inc
+
+DEPENDS += " eds-dbus"
+
diff --git a/packages/opensync/libopensync-plugin-file-sync_0.22.bb b/packages/opensync/libopensync-plugin-file-sync_0.22.bb
new file mode 100644
index 0000000000..d34473127d
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-file-sync_0.22.bb
@@ -0,0 +1,2 @@
+require libopensync-plugin.inc
+require libopensync-plugin_0.22.inc
diff --git a/packages/opensync/libopensync-plugin-file-sync_svn.bb b/packages/opensync/libopensync-plugin-file-sync_svn.bb
new file mode 100644
index 0000000000..ae300b402f
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-file-sync_svn.bb
@@ -0,0 +1,5 @@
+
+SRC_URI = "svn://svn.opensync.org/plugins;module=file-sync;proto=http"
+S = "${WORKDIR}/file-sync"
+
+require libopensync-plugin.inc
diff --git a/packages/opensync/libopensync-plugin-irmc-sync_0.22.bb b/packages/opensync/libopensync-plugin-irmc-sync_0.22.bb
new file mode 100644
index 0000000000..55df4e4d78
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-irmc-sync_0.22.bb
@@ -0,0 +1,4 @@
+require libopensync-plugin.inc
+require libopensync-plugin_0.22.inc
+
+DEPENDS += "openobex bluez-libs"
diff --git a/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/.mtn2git_empty b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/.mtn2git_empty
diff --git a/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/missing-syncml-config.patch b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/missing-syncml-config.patch
new file mode 100644
index 0000000000..0fac67e5d9
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/missing-syncml-config.patch
@@ -0,0 +1,8 @@
+--- tmp/src/missing-syncml-client-plugin 2007-01-09 12:55:48.000000000 +0000
++++ tmp/src/syncml-client-plugin 2007-01-09 12:55:48.000000000 +0000
+@@ -0,0 +1,5 @@
++<config>
++ <gconf-uri>/apps/syncml-client</gconf-uri>
++ <object-type>contact</object-type>
++ <sync-source-name>card</sync-source-name>
++</config>
diff --git a/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/syncml-client-plugin-cpp.patch b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/syncml-client-plugin-cpp.patch
new file mode 100644
index 0000000000..7b659ce7c3
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml-client-plugin-0.1/syncml-client-plugin-cpp.patch
@@ -0,0 +1,11 @@
+--- tmp/src/syncml-client-plugin.cpp.orig 2007-01-09 12:27:33.000000000 +0000
++++ tmp/src/syncml-client-plugin.cpp 2007-01-09 12:27:33.000000000 +0000
+@@ -94,7 +94,7 @@
+ /**
+ * Initialize the plugin environment, read config data.
+ */
+-extern "C" static void* smc_initialize(OSyncMember *member, OSyncError **error)
++extern "C" void* smc_initialize(OSyncMember *member, OSyncError **error)
+ {
+ char *configData;
+ int configSize;
diff --git a/packages/opensync/libopensync-plugin-syncml-client-plugin_0.1.bb b/packages/opensync/libopensync-plugin-syncml-client-plugin_0.1.bb
new file mode 100644
index 0000000000..a81417bf7e
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml-client-plugin_0.1.bb
@@ -0,0 +1,13 @@
+PR = "r1"
+
+SRC_URI = "svn://svn.opensync.org/plugins/syncml-client/plugin/tags;module=release-${PV};proto=http \
+ file://missing-syncml-config.patch;patch=1 \
+ file://syncml-client-plugin-cpp.patch;patch=1"
+
+
+S = "${WORKDIR}/release-${PV}"
+
+require libopensync-plugin.inc
+
+DEPENDS += "syncml-client"
+
diff --git a/packages/opensync/libopensync-plugin-syncml-plugin.bb b/packages/opensync/libopensync-plugin-syncml-plugin.bb
new file mode 100644
index 0000000000..0a7d82db74
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml-plugin.bb
@@ -0,0 +1,16 @@
+
+SRC_URI = "svn://svn.opensync.org/plugins;module=syncml;proto=http"
+S = "${WORKDIR}/syncml"
+
+require libopensync-plugin.inc
+
+DEPENDS += " libsyncml"
+
+do_install() {
+ install -d ${D}${datadir}/opensync/defaults
+ install -d ${D}${libdir}/opensync/plugins
+ install -m 644 src/syncml-http-server ${D}${datadir}/opensync/defaults
+ install -m 644 src/syncml-obex-client ${D}${datadir}/opensync/defaults
+ install -m 755 src/.libs/${PLUGIN_SONAME} ${D}${libdir}/opensync/plugins/
+}
+
diff --git a/packages/opensync/libopensync-plugin-syncml_0.22.bb b/packages/opensync/libopensync-plugin-syncml_0.22.bb
new file mode 100644
index 0000000000..2a26eb1674
--- /dev/null
+++ b/packages/opensync/libopensync-plugin-syncml_0.22.bb
@@ -0,0 +1,13 @@
+
+require libopensync-plugin.inc
+
+DEPENDS += " libsyncml"
+
+do_install() {
+ install -d ${D}${datadir}/opensync/defaults
+ install -d ${D}${libdir}/opensync/plugins
+ install -m 644 src/syncml-http-server ${D}${datadir}/opensync/defaults
+ install -m 644 src/syncml-obex-client ${D}${datadir}/opensync/defaults
+ install -m 755 src/.libs/${PLUGIN_SONAME} ${D}${libdir}/opensync/plugins/
+}
+
diff --git a/packages/opensync/libopensync-plugin.inc b/packages/opensync/libopensync-plugin.inc
new file mode 100644
index 0000000000..b1986a9e64
--- /dev/null
+++ b/packages/opensync/libopensync-plugin.inc
@@ -0,0 +1,24 @@
+
+PV = "0.22+svn${SRCDATE}"
+PLUGIN_NAME ?= "${@bb.data.getVar('PN', d, 1).replace('libopensync-plugin-','')}"
+PLUGIN_SONAME ?= "${@bb.data.getVar('PLUGIN_NAME', d, 1).replace('-','_')}.so"
+SRC_URI ?= "svn://svn.opensync.org/plugins;module=${PLUGIN_NAME};proto=http"
+S ?= "${WORKDIR}/${PLUGIN_NAME}"
+
+LICENSE ?= "LGPL"
+DEPENDS += " libopensync"
+RRECOMMENDS += " msynctool"
+HOMEPAGE ?= "http://www.opensync.org/"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir} ${libdir}/opensync/plugins/*.so"
+FILES_${PN}-dbg += "${libdir}/opensync/plugins/.debug"
+
+do_install() {
+ install -d ${D}${datadir}/opensync/defaults
+ install -d ${D}${libdir}/opensync/plugins
+ install -m 644 src/${PLUGIN_NAME} ${D}${datadir}/opensync/defaults
+ install -m 755 src/.libs/${PLUGIN_SONAME} ${D}${libdir}/opensync/plugins/
+}
+
diff --git a/packages/opensync/libopensync-plugin_0.22.inc b/packages/opensync/libopensync-plugin_0.22.inc
new file mode 100644
index 0000000000..03857dce53
--- /dev/null
+++ b/packages/opensync/libopensync-plugin_0.22.inc
@@ -0,0 +1,12 @@
+PV = "0.22"
+PLUGIN_ARCHIVE ?= "${@bb.data.getVar('PLUGIN_NAME', d, 1).replace('-sync','')}"
+SRC_URI = "http://www.opensync.org/attachment/wiki/download/libopensync-plugin-${PLUGIN_ARCHIVE}-${PV}.tar.bz2?format=raw"
+
+S = "${WORKDIR}/libopensync-plugin-${PLUGIN_ARCHIVE}-${PV}/"
+
+do_unpack2() {
+ cd ${WORKDIR} && tar jxf libopensync-plugin-${PLUGIN_ARCHIVE}-${PV}.tar.bz2?format=raw
+}
+
+addtask unpack2 after do_unpack before do_patch
+
diff --git a/packages/opensync/libopensync_0.22.bb b/packages/opensync/libopensync_0.22.bb
new file mode 100644
index 0000000000..ed4ef740bc
--- /dev/null
+++ b/packages/opensync/libopensync_0.22.bb
@@ -0,0 +1,21 @@
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.opensync.org/"
+
+DEPENDS = "sqlite3 libxml2 zlib glib-2.0"
+
+SRC_URI = "http://www.opensync.org/attachment/wiki/download/libopensync-0.22.tar.bz2?format=raw"
+
+inherit autotools pkgconfig lib_package
+
+EXTRA_OECONF = "--disable-python"
+LEAD_SONAME = "libopensync.so"
+
+FILES_${PN} += " ${libdir}/opensync/formats/*.so"
+FILES_${PN}-dbg += " ${libdir}/opensync/formats/.debug/*.so"
+
+require opensync-unpack.inc
+
+do_stage() {
+autotools_stage_all
+}
+
diff --git a/packages/opensync/libopensync_svn.bb b/packages/opensync/libopensync_svn.bb
new file mode 100644
index 0000000000..67501cc6e9
--- /dev/null
+++ b/packages/opensync/libopensync_svn.bb
@@ -0,0 +1,20 @@
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.opensync.org/"
+DEPENDS = "sqlite3 libxml2 zlib glib-2.0"
+PV = "0.22+svn${SRCDATE}"
+SRC_URI = "svn://svn.opensync.org;module=trunk;proto=http"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig lib_package
+
+S = "${WORKDIR}/trunk"
+EXTRA_OECONF = "--disable-python"
+LEAD_SONAME = "libopensync.so"
+
+FILES_${PN} += " ${libdir}/opensync/formats/*.so"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/opensync/libsyncml_svn.bb b/packages/opensync/libsyncml_svn.bb
new file mode 100644
index 0000000000..17b2537e85
--- /dev/null
+++ b/packages/opensync/libsyncml_svn.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Libsyncml is a implementation of the SyncML protocol."
+HOMEPAGE = "http://libsyncml.opensync.org/"
+LICENSE = "LGPL"
+
+DEPENDS = "sed-native wbxml2 libsoup libxml2 bluez-libs openobex"
+
+PV = "0.4.2+svn${SRCDATE}"
+SRC_URI = "svn://svn.opensync.org/libsyncml;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --enable-http \
+ --enable-obex \
+ --enable-bluetooth \
+ --enable-tools \
+ --with-wbxml"
+
+CFLAGS += "-I${STAGING_INCDIR}/libsoup-2.2"
+
+do_configure_append() {
+ sed -i s:-I/usr/include/:-I/foo/:g Makefile
+ sed -i s:-I/usr/include/:-I/foo/:g */Makefile
+ sed -i s:-I/usr/include/:-I/foo/:g */*/Makefile
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES += "${PN}-tools"
+
+FILES_${PN}-tools = "${bindir}"
+FILES_${PN} = "${libdir}/*.so.*"
+
diff --git a/packages/opensync/msynctool_0.22.bb b/packages/opensync/msynctool_0.22.bb
new file mode 100644
index 0000000000..018c227e36
--- /dev/null
+++ b/packages/opensync/msynctool_0.22.bb
@@ -0,0 +1,9 @@
+SRC_URI = "http://www.opensync.org/attachment/wiki/download/msynctool-0.22.tar.bz2?format=raw"
+
+LICENSE = "GPL"
+DEPENDS = "libopensync"
+HOMEPAGE = "http://www.opensync.org/"
+
+inherit autotools pkgconfig
+
+require opensync-unpack.inc
diff --git a/packages/opensync/msynctool_svn.bb b/packages/opensync/msynctool_svn.bb
new file mode 100644
index 0000000000..319cf39d05
--- /dev/null
+++ b/packages/opensync/msynctool_svn.bb
@@ -0,0 +1,10 @@
+PV = "0.22+svn${SRCDATE}"
+SRC_URI = "svn://svn.opensync.org/multisync;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
+
+LICENSE = "GPL"
+DEPENDS = "libopensync"
+HOMEPAGE = "http://www.opensync.org/"
+
+inherit autotools pkgconfig
+
diff --git a/packages/opensync/opensync-unpack.inc b/packages/opensync/opensync-unpack.inc
new file mode 100644
index 0000000000..d5443187bd
--- /dev/null
+++ b/packages/opensync/opensync-unpack.inc
@@ -0,0 +1,5 @@
+do_unpack2() {
+ cd ${WORKDIR} && tar jxf ${PN}-${PV}.tar.bz2?format=raw
+}
+
+addtask unpack2 after do_unpack before do_patch
diff --git a/packages/opensync/syncml-client-0.1/.mtn2git_empty b/packages/opensync/syncml-client-0.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opensync/syncml-client-0.1/.mtn2git_empty
diff --git a/packages/opensync/syncml-client-0.1/syncml-client-pc-in-cross.patch b/packages/opensync/syncml-client-0.1/syncml-client-pc-in-cross.patch
new file mode 100644
index 0000000000..364f7643c5
--- /dev/null
+++ b/packages/opensync/syncml-client-0.1/syncml-client-pc-in-cross.patch
@@ -0,0 +1,10 @@
+--- tmp/syncml-client.pc.in.orig 2007-01-09 09:43:18.000000000 +0000
++++ tmp/syncml-client.pc.in 2007-01-09 09:43:18.000000000 +0000
+@@ -8,6 +8,6 @@
+ Version: @VERSION@
+ Requires: libcurl, gconf-2.0
+ Libs: @SYNCML_LIBS@ -lsyncmlclient
+-Cflags: @SYNCML_CFLAGS@ -I@includedir@/syncml-client
++Cflags: @SYNCML_CFLAGS@ -I${includedir}/syncml-client
+ ~
+
diff --git a/packages/opensync/syncml-client-0.1/syncml-client-plugin-h.patch b/packages/opensync/syncml-client-0.1/syncml-client-plugin-h.patch
new file mode 100644
index 0000000000..c936445a95
--- /dev/null
+++ b/packages/opensync/syncml-client-0.1/syncml-client-plugin-h.patch
@@ -0,0 +1,11 @@
+--- tmp/src/syncml-client.h.orig 2007-01-09 12:15:41.000000000 +0000
++++ tmp/src/syncml-client-plugin.h 2007-01-09 12:15:41.000000000 +0000
+@@ -20,7 +20,7 @@
+ #define SYNCML_CLIENT_PLUGIN
+
+ #include <opensync/opensync.h>
+-#include <syncml-client.h>
++#include <syncml-client/syncml-client.h>
+ #include "SmcSyncSource.h"
+ #include "SmcConfig.h"
+
diff --git a/packages/opensync/syncml-client_0.1.bb b/packages/opensync/syncml-client_0.1.bb
index 729ac9a559..95a4e339c7 100644
--- a/packages/opensync/syncml-client_0.1.bb
+++ b/packages/opensync/syncml-client_0.1.bb
@@ -1,8 +1,14 @@
-SRC_URI = "http://hem.bredband.net/miko22/${P}.tar.gz"
-
LICENSE = "GPL"
DEPENDS = "gtk+ curl gconf"
HOMEPAGE = "http://hem.bredband.net/miko22/"
-DESCRIPTION = "Linux port of the Funambol C++ SyncML client connector."
+DESCRIPTION = "Linux port of the Funambol C++ SyncML client connector."
+PR="r1"
+
+SRC_URI = "http://hem.bredband.net/miko22/${P}.tar.gz \
+ file://syncml-client-pc-in-cross.patch;patch=1 "
inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/openzaurus/openzaurus-version.bb b/packages/openzaurus/openzaurus-version.bb
deleted file mode 100644
index 406a871acd..0000000000
--- a/packages/openzaurus/openzaurus-version.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-PV = "${DISTRO_VERSION}"
-
-do_compile() {
- mkdir -p ${D}${sysconfdir}
- echo "OpenZaurus ${DISTRO_VERSION}" > ${D}${sysconfdir}/openzaurus-version
-
-}
diff --git a/packages/opie-aboutapplet/opie-aboutapplet_1.2.3.bb b/packages/opie-aboutapplet/opie-aboutapplet_1.2.3.bb
new file mode 100644
index 0000000000..63acae328e
--- /dev/null
+++ b/packages/opie-aboutapplet/opie-aboutapplet_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/aboutapplet"
diff --git a/packages/opie-addressbook/opie-addressbook_1.2.3.bb b/packages/opie-addressbook/opie-addressbook_1.2.3.bb
new file mode 100644
index 0000000000..4e4ba7c4c5
--- /dev/null
+++ b/packages/opie-addressbook/opie-addressbook_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/addressbook \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-advancedfm/opie-advancedfm_1.2.3.bb b/packages/opie-advancedfm/opie-advancedfm_1.2.3.bb
new file mode 100644
index 0000000000..e8dc4d95e8
--- /dev/null
+++ b/packages/opie-advancedfm/opie-advancedfm_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-alarm/opie-alarm.inc b/packages/opie-alarm/opie-alarm.inc
index d193653924..60ef1e1eaa 100644
--- a/packages/opie-alarm/opie-alarm.inc
+++ b/packages/opie-alarm/opie-alarm.inc
@@ -10,9 +10,7 @@ S = "${WORKDIR}/opiealarm"
inherit opie
do_install() {
- install -d ${D}${palmtopdir}/bin/ ${D}${sysconfdir}/apm/event.d/
- install -m 0755 ${S}/opiealarm ${D}${palmtopdir}/bin/
+ install -d ${D}${bindir} ${D}${sysconfdir}/apm/event.d/
+ install -m 0755 ${S}/opiealarm ${D}${bindir}/
install -m 0755 ${WORKDIR}/01opiealarm ${D}${sysconfdir}/apm/event.d/
}
-
-FILES_${PN} = "${palmtopdir}/bin/opiealarm ${sysconfdir}/apm/event.d/01opiealarm"
diff --git a/packages/opie-alarm/opie-alarm/01opiealarm b/packages/opie-alarm/opie-alarm/01opiealarm
index 4ab70fe3a8..6a12319cdc 100755
--- a/packages/opie-alarm/opie-alarm/01opiealarm
+++ b/packages/opie-alarm/opie-alarm/01opiealarm
@@ -3,9 +3,9 @@
# and wakes it up when the RTC alarm goes off.
if [ "$1" = suspend ]; then
- /opt/QtPalmtop/bin/opiealarm -s -f
+ opiealarm -s -f
elif [ "$1" = resume ] && [ "$2" != standby ]; then
- /opt/QtPalmtop/bin/opiealarm -r -a 120
+ opiealarm -r -a 120
fi
: exit 0
diff --git a/packages/opie-alarm/opie-alarm/dirdefines.patch b/packages/opie-alarm/opie-alarm/dirdefines.patch
new file mode 100644
index 0000000000..ea1e686dce
--- /dev/null
+++ b/packages/opie-alarm/opie-alarm/dirdefines.patch
@@ -0,0 +1,21 @@
+diff --git a/opiealarm.c b/opiealarm.c
+index 422865c..b948ef2 100644
+--- a/opiealarm.c
++++ b/opiealarm.c
+@@ -367,13 +367,13 @@ int resume ( int resuspend )
+
+ setenv ( "LOGNAME", "root", 1 );
+ setenv ( "HOME", "/root", 1 );
+- setenv ( "LD_LIBRARY_PATH", "/opt/QtPalmtop/lib", 1 );
+- setenv ( "QTDIR", "/opt/QtPalmtop", 1 );
++ setenv ( "LD_LIBRARY_PATH", OPIE_LIBDIR, 1 );
++ setenv ( "QTDIR", OPIE_QTDIR, 1 );
+
+ remove_pidfile ( );
+
+ // no need for system() since this process is no longer useful anyway
+- execv ( "/opt/QtPalmtop/bin/qcop", argv );
++ execv ( OPIE_BINDIR "/qcop", argv );
+
+ perror ( "exec for qcop failed" );
+ return 5;
diff --git a/packages/opie-alarm/opie-alarm_1.2.3.bb b/packages/opie-alarm/opie-alarm_1.2.3.bb
new file mode 100644
index 0000000000..d298efc34c
--- /dev/null
+++ b/packages/opie-alarm/opie-alarm_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/opiealarm \
+ file://01opiealarm \
+ file://dirdefines.patch;patch=1 "
diff --git a/packages/opie-alarm/opie-alarm_cvs.bb b/packages/opie-alarm/opie-alarm_cvs.bb
index 0dd6254dbe..fca5f8b51a 100644
--- a/packages/opie-alarm/opie-alarm_cvs.bb
+++ b/packages/opie-alarm/opie-alarm_cvs.bb
@@ -1,6 +1,8 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/opiealarm \
- file://01opiealarm "
+ file://01opiealarm \
+ file://dirdefines.patch;patch=1 "
diff --git a/packages/opie-appearance/opie-appearance_1.2.3.bb b/packages/opie-appearance/opie-appearance_1.2.3.bb
new file mode 100644
index 0000000000..e8c3ada524
--- /dev/null
+++ b/packages/opie-appearance/opie-appearance_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/appearance2 \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-aqpkg/opie-aqpkg_1.2.3.bb b/packages/opie-aqpkg/opie-aqpkg_1.2.3.bb
new file mode 100644
index 0000000000..5bc9df58b6
--- /dev/null
+++ b/packages/opie-aqpkg/opie-aqpkg_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/aqpkg \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-autorotateapplet/opie-autorotateapplet.inc b/packages/opie-autorotateapplet/opie-autorotateapplet.inc
index 4d0f36f54d..7e7843666d 100644
--- a/packages/opie-autorotateapplet/opie-autorotateapplet.inc
+++ b/packages/opie-autorotateapplet/opie-autorotateapplet.inc
@@ -13,7 +13,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -22,7 +22,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
}
# FILES plugins/applets/libautorotateapplet.so* pics/autorotate/*.png
diff --git a/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.3.bb b/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.3.bb
new file mode 100644
index 0000000000..534c25c5b1
--- /dev/null
+++ b/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/autorotateapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-autorotateapplet/opie-autorotateapplet_cvs.bb b/packages/opie-autorotateapplet/opie-autorotateapplet_cvs.bb
index 6c1e0a212f..97cc8f53ce 100644
--- a/packages/opie-autorotateapplet/opie-autorotateapplet_cvs.bb
+++ b/packages/opie-autorotateapplet/opie-autorotateapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/autorotateapplet \
${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/opie-backgammon/opie-backgammon_1.2.3.bb b/packages/opie-backgammon/opie-backgammon_1.2.3.bb
new file mode 100644
index 0000000000..b7f87d1191
--- /dev/null
+++ b/packages/opie-backgammon/opie-backgammon_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/backgammon \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-backup/opie-backup_1.2.3.bb b/packages/opie-backup/opie-backup_1.2.3.bb
new file mode 100644
index 0000000000..2714fd812b
--- /dev/null
+++ b/packages/opie-backup/opie-backup_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/backup \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-bartender/opie-bartender.inc b/packages/opie-bartender/opie-bartender.inc
index 633dcc0c91..5b020d5cfa 100644
--- a/packages/opie-bartender/opie-bartender.inc
+++ b/packages/opie-bartender/opie-bartender.inc
@@ -1,4 +1,4 @@
-DESCRIPTION = "Bartender drink receipe database"
+DESCRIPTION = "Bartender drink recipe database"
SECTION = "opie/applications"
PRIORITY = "optional"
LICENSE = "GPL"
diff --git a/packages/opie-bartender/opie-bartender_1.2.3.bb b/packages/opie-bartender/opie-bartender_1.2.3.bb
new file mode 100644
index 0000000000..2fb5e35856
--- /dev/null
+++ b/packages/opie-bartender/opie-bartender_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/opie-bartender \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-batteryapplet/opie-batteryapplet.inc b/packages/opie-batteryapplet/opie-batteryapplet.inc
index b01e21b0f0..10b6e9096b 100644
--- a/packages/opie-batteryapplet/opie-batteryapplet.inc
+++ b/packages/opie-batteryapplet/opie-batteryapplet.inc
@@ -13,7 +13,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -21,7 +21,7 @@ fi
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-batteryapplet/opie-batteryapplet_1.2.3.bb b/packages/opie-batteryapplet/opie-batteryapplet_1.2.3.bb
new file mode 100644
index 0000000000..1a678f0cff
--- /dev/null
+++ b/packages/opie-batteryapplet/opie-batteryapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/batteryapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb b/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
index 74041194c3..ed9b98120a 100644
--- a/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
+++ b/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/batteryapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-bluepin/opie-bluepin_1.2.3.bb b/packages/opie-bluepin/opie-bluepin_1.2.3.bb
new file mode 100644
index 0000000000..1ea1deef96
--- /dev/null
+++ b/packages/opie-bluepin/opie-bluepin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/blue-pin"
diff --git a/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.3.bb b/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.3.bb
new file mode 100644
index 0000000000..f35accf577
--- /dev/null
+++ b/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.3.bb
@@ -0,0 +1,8 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/applet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics/bluetoothapplet"
+
+# file://sysconfig-bluetooth.patch;patch=1"
diff --git a/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.3.bb b/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.3.bb
new file mode 100644
index 0000000000..6a27b53101
--- /dev/null
+++ b/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/manager \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-bounce/opie-bounce_1.2.3.bb b/packages/opie-bounce/opie-bounce_1.2.3.bb
new file mode 100644
index 0000000000..3ed77744d7
--- /dev/null
+++ b/packages/opie-bounce/opie-bounce_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/bounce \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-brightnessapplet/opie-brightnessapplet.inc b/packages/opie-brightnessapplet/opie-brightnessapplet.inc
index 0db87dbb98..bc638658bb 100644
--- a/packages/opie-brightnessapplet/opie-brightnessapplet.inc
+++ b/packages/opie-brightnessapplet/opie-brightnessapplet.inc
@@ -17,7 +17,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -26,6 +26,6 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
}
diff --git a/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.3.bb b/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.3.bb
new file mode 100644
index 0000000000..81c88fa51b
--- /dev/null
+++ b/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/brightnessapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-brightnessapplet/opie-brightnessapplet_cvs.bb b/packages/opie-brightnessapplet/opie-brightnessapplet_cvs.bb
index a364980c1a..7bdec3e27e 100644
--- a/packages/opie-brightnessapplet/opie-brightnessapplet_cvs.bb
+++ b/packages/opie-brightnessapplet/opie-brightnessapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/brightnessapplet \
${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/opie-button-settings/opie-button-settings_1.2.3.bb b/packages/opie-button-settings/opie-button-settings_1.2.3.bb
new file mode 100644
index 0000000000..0458a28ba8
--- /dev/null
+++ b/packages/opie-button-settings/opie-button-settings_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/button \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-buzzword/opie-buzzword_1.2.3.bb b/packages/opie-buzzword/opie-buzzword_1.2.3.bb
new file mode 100644
index 0000000000..78ab5a966a
--- /dev/null
+++ b/packages/opie-buzzword/opie-buzzword_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/buzzword \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-calculator/opie-calculator_1.2.3.bb b/packages/opie-calculator/opie-calculator_1.2.3.bb
new file mode 100644
index 0000000000..ce2b63a786
--- /dev/null
+++ b/packages/opie-calculator/opie-calculator_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/calculator \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc "
diff --git a/packages/opie-camera/opie-camera_1.2.3.bb b/packages/opie-camera/opie-camera_1.2.3.bb
new file mode 100644
index 0000000000..342abe8581
--- /dev/null
+++ b/packages/opie-camera/opie-camera_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/multimedia/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-cardmon/opie-cardmon_1.2.3.bb b/packages/opie-cardmon/opie-cardmon_1.2.3.bb
new file mode 100644
index 0000000000..ceab1ae75f
--- /dev/null
+++ b/packages/opie-cardmon/opie-cardmon_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/cardmon \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/sounds \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-checkbook/opie-checkbook_1.2.3.bb b/packages/opie-checkbook/opie-checkbook_1.2.3.bb
new file mode 100644
index 0000000000..e8dc4d95e8
--- /dev/null
+++ b/packages/opie-checkbook/opie-checkbook_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-citytime/opie-citytime_1.2.3.bb b/packages/opie-citytime/opie-citytime_1.2.3.bb
new file mode 100644
index 0000000000..f95283417a
--- /dev/null
+++ b/packages/opie-citytime/opie-citytime_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/citytime \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-clipboardapplet/opie-clipboardapplet.inc b/packages/opie-clipboardapplet/opie-clipboardapplet.inc
index 9384f7f2ab..5b2db9faea 100644
--- a/packages/opie-clipboardapplet/opie-clipboardapplet.inc
+++ b/packages/opie-clipboardapplet/opie-clipboardapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.3.bb b/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.3.bb
new file mode 100644
index 0000000000..8831aeec3c
--- /dev/null
+++ b/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/clipboardapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb b/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
index 72ae6d2ea4..95b33b46a9 100644
--- a/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
+++ b/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/clipboardapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-clock/opie-clock_1.2.3.bb b/packages/opie-clock/opie-clock_1.2.3.bb
new file mode 100644
index 0000000000..1d3880c208
--- /dev/null
+++ b/packages/opie-clock/opie-clock_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/clock \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-clockapplet/opie-clockapplet.inc b/packages/opie-clockapplet/opie-clockapplet.inc
index 112c11180a..238819c071 100644
--- a/packages/opie-clockapplet/opie-clockapplet.inc
+++ b/packages/opie-clockapplet/opie-clockapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-clockapplet/opie-clockapplet_1.2.3.bb b/packages/opie-clockapplet/opie-clockapplet_1.2.3.bb
new file mode 100644
index 0000000000..cc1a2b5376
--- /dev/null
+++ b/packages/opie-clockapplet/opie-clockapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/clockapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-clockapplet/opie-clockapplet_cvs.bb b/packages/opie-clockapplet/opie-clockapplet_cvs.bb
index 304b687109..46a6d8c7e7 100644
--- a/packages/opie-clockapplet/opie-clockapplet_cvs.bb
+++ b/packages/opie-clockapplet/opie-clockapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/clockapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-confeditor/opie-confeditor_1.2.3.bb b/packages/opie-confeditor/opie-confeditor_1.2.3.bb
new file mode 100644
index 0000000000..1a00b21e01
--- /dev/null
+++ b/packages/opie-confeditor/opie-confeditor_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/confedit \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-console/opie-console.inc b/packages/opie-console/opie-console.inc
index f83ff921f5..67a39d6182 100644
--- a/packages/opie-console/opie-console.inc
+++ b/packages/opie-console/opie-console.inc
@@ -13,6 +13,7 @@ inherit opie
do_install() {
install -d ${D}${palmtopdir}/pics/console/keys/
+ install -m 0644 ${WORKDIR}/pics/inline/pass.* ${D}${palmtopdir}/pics/
install -m 0644 ${WORKDIR}/pics/console/*.png ${D}${palmtopdir}/pics/console/
install -m 0644 ${WORKDIR}/pics/console/keys/*.png ${D}${palmtopdir}/pics/console/keys/
}
diff --git a/packages/opie-console/opie-console_1.2.3.bb b/packages/opie-console/opie-console_1.2.3.bb
new file mode 100644
index 0000000000..5408c0da8a
--- /dev/null
+++ b/packages/opie-console/opie-console_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-console/opie-console_cvs.bb b/packages/opie-console/opie-console_cvs.bb
index ca2955fb0b..4525ff88ae 100644
--- a/packages/opie-console/opie-console_cvs.bb
+++ b/packages/opie-console/opie-console_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/apps/${APPNAME} \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-dagger/files/.mtn2git_empty b/packages/opie-dagger/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-dagger/files/.mtn2git_empty
diff --git a/packages/opie-dagger/files/opie-dagger-missing-include.patch b/packages/opie-dagger/files/opie-dagger-missing-include.patch
new file mode 100644
index 0000000000..f874e0bcf0
--- /dev/null
+++ b/packages/opie-dagger/files/opie-dagger-missing-include.patch
@@ -0,0 +1,11 @@
+diff -Naur dagger.orig/opentextdlg.h dagger/opentextdlg.h
+--- dagger.orig/opentextdlg.h 2004-04-06 18:00:07.000000000 +0200
++++ dagger/opentextdlg.h 2007-03-12 15:09:02.000000000 +0100
+@@ -22,6 +22,7 @@
+ #include <qlistview.h>
+
+ #include <swmgr.h>
++#include <swmodule.h>
+
+ class QPixmap;
+
diff --git a/packages/opie-dagger/opie-dagger_1.2.3.bb b/packages/opie-dagger/opie-dagger_1.2.3.bb
new file mode 100644
index 0000000000..c207986409
--- /dev/null
+++ b/packages/opie-dagger/opie-dagger_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/dagger \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
+
+SRC_URI += " file://opie-dagger-missing-include.patch;patch=1"
diff --git a/packages/opie-dagger/opie-dagger_cvs.bb b/packages/opie-dagger/opie-dagger_cvs.bb
index 6649fd81a0..d9191e26a9 100644
--- a/packages/opie-dagger/opie-dagger_cvs.bb
+++ b/packages/opie-dagger/opie-dagger_cvs.bb
@@ -1,7 +1,10 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/apps/dagger \
${HANDHELDS_CVS};module=opie/pics \
${HANDHELDS_CVS};module=opie/apps"
+
+SRC_URI += " file://opie-dagger-missing-include.patch;patch=1"
diff --git a/packages/opie-dasher/opie-dasher.inc b/packages/opie-dasher/opie-dasher.inc
index 9bc990947c..9903dd9a56 100644
--- a/packages/opie-dasher/opie-dasher.inc
+++ b/packages/opie-dasher/opie-dasher.inc
@@ -38,7 +38,7 @@ do_install() {
done
}
-PACKAGES = " opie-dasher-english opie-dasher "
+PACKAGES += " opie-dasher-english "
FILES_opie-dasher = "${palmtopdir}/plugins/inputmethods/libqdasher.so*"
FILES_opie-dasher-english = "${palmtopdir}/share/dasher/training_english_GB.txt"
diff --git a/packages/opie-dasher/opie-dasher_1.2.2.bb b/packages/opie-dasher/opie-dasher_1.2.2.bb
index 3a2e814fe1..88c009d775 100644
--- a/packages/opie-dasher/opie-dasher_1.2.2.bb
+++ b/packages/opie-dasher/opie-dasher_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/dasher \
diff --git a/packages/opie-dasher/opie-dasher_1.2.3.bb b/packages/opie-dasher/opie-dasher_1.2.3.bb
new file mode 100644
index 0000000000..e7774e33df
--- /dev/null
+++ b/packages/opie-dasher/opie-dasher_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+PR = "r0"
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/dasher \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share "
diff --git a/packages/opie-dasher/opie-dasher_cvs.bb b/packages/opie-dasher/opie-dasher_cvs.bb
index d53cfc9e1b..10cca07fd6 100644
--- a/packages/opie-dasher/opie-dasher_cvs.bb
+++ b/packages/opie-dasher/opie-dasher_cvs.bb
@@ -1,4 +1,5 @@
require ${PN}.inc
+PR = "r1"
PV = "${OPIE_CVS_PV}"
diff --git a/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.3.bb b/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.3.bb
new file mode 100644
index 0000000000..94bb9958c5
--- /dev/null
+++ b/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/datebook/holiday/birthday "
diff --git a/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.3.bb b/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.3.bb
new file mode 100644
index 0000000000..80eea90c8c
--- /dev/null
+++ b/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/datebook/holiday/christian "
diff --git a/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.3.bb b/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.3.bb
new file mode 100644
index 0000000000..e47580581d
--- /dev/null
+++ b/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/datebook/holiday/national \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc/nationaldays "
diff --git a/packages/opie-datebook/opie-datebook_1.2.3.bb b/packages/opie-datebook/opie-datebook_1.2.3.bb
new file mode 100644
index 0000000000..554f30cc38
--- /dev/null
+++ b/packages/opie-datebook/opie-datebook_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/datebook \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-deco-flat/opie-deco-flat_1.2.3.bb b/packages/opie-deco-flat/opie-deco-flat_1.2.3.bb
new file mode 100644
index 0000000000..4d7f0b544a
--- /dev/null
+++ b/packages/opie-deco-flat/opie-deco-flat_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/decorations/flat "
diff --git a/packages/opie-deco-liquid/opie-deco-liquid_1.2.3.bb b/packages/opie-deco-liquid/opie-deco-liquid_1.2.3.bb
new file mode 100644
index 0000000000..dbbc119a46
--- /dev/null
+++ b/packages/opie-deco-liquid/opie-deco-liquid_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/decorations/liquid "
diff --git a/packages/opie-deco-polished/opie-deco-polished_1.2.3.bb b/packages/opie-deco-polished/opie-deco-polished_1.2.3.bb
new file mode 100644
index 0000000000..69a5031f8c
--- /dev/null
+++ b/packages/opie-deco-polished/opie-deco-polished_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/decorations/polished "
diff --git a/packages/opie-doctab/opie-doctab_1.2.3.bb b/packages/opie-doctab/opie-doctab_1.2.3.bb
new file mode 100644
index 0000000000..1a08b090d0
--- /dev/null
+++ b/packages/opie-doctab/opie-doctab_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/doctab \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-drawpad/opie-drawpad_1.2.3.bb b/packages/opie-drawpad/opie-drawpad_1.2.3.bb
new file mode 100644
index 0000000000..d8ac8a3d01
--- /dev/null
+++ b/packages/opie-drawpad/opie-drawpad_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/graphics/drawpad \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-dvorak/files/.mtn2git_empty b/packages/opie-dvorak/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-dvorak/files/.mtn2git_empty
diff --git a/packages/opie-dvorak/files/fix-rpath.patch b/packages/opie-dvorak/files/fix-rpath.patch
new file mode 100644
index 0000000000..37e2e5a37d
--- /dev/null
+++ b/packages/opie-dvorak/files/fix-rpath.patch
@@ -0,0 +1,13 @@
+diff --git a/dvorak.pro b/dvorak.pro
+index b659ab5..c1cf861 100644
+--- a/dvorak.pro
++++ b/dvorak.pro
+@@ -9,7 +9,7 @@ DESTDIR = ../../plugins/inputmethods
+ INCLUDEPATH += $(OPIEDIR)/include
+ DEPENDPATH += ../../launcher
+ LIBS += -lqpe -L$(OPIEDIR)/plugins/inputmethods -lqpickboard
+-QMAKE_LFLAGS += -Wl,-rpath,/opt/QtPalmtop/plugins/inputmethods
++QMAKE_LFLAGS += -Wl,-rpath,${palmtopdir}/plugins/inputmethods
+ VERSION = 1.0.0
+
+ include( $(OPIEDIR)/include.pro )
diff --git a/packages/opie-dvorak/opie-dvorak.inc b/packages/opie-dvorak/opie-dvorak.inc
index 7e4445dd42..78ba4fc667 100644
--- a/packages/opie-dvorak/opie-dvorak.inc
+++ b/packages/opie-dvorak/opie-dvorak.inc
@@ -14,7 +14,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+ ${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
else
exit 0
fi
@@ -24,7 +24,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libqdvorak.so*
diff --git a/packages/opie-dvorak/opie-dvorak_1.2.3.bb b/packages/opie-dvorak/opie-dvorak_1.2.3.bb
new file mode 100644
index 0000000000..54af47b2bc
--- /dev/null
+++ b/packages/opie-dvorak/opie-dvorak_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/dvorak \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/pickboard \
+ file://fix-rpath.patch;patch=1 "
diff --git a/packages/opie-dvorak/opie-dvorak_cvs.bb b/packages/opie-dvorak/opie-dvorak_cvs.bb
index bf38334b0c..54234dda7a 100644
--- a/packages/opie-dvorak/opie-dvorak_cvs.bb
+++ b/packages/opie-dvorak/opie-dvorak_cvs.bb
@@ -1,6 +1,8 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/dvorak \
- ${HANDHELDS_CVS};module=opie/inputmethods/pickboard"
+ ${HANDHELDS_CVS};module=opie/inputmethods/pickboard \
+ file://fix-rpath.patch;patch=1 "
diff --git a/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.3.bb b/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.3.bb
new file mode 100644
index 0000000000..20a417a9c3
--- /dev/null
+++ b/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-euroconv/opie-euroconv_1.2.3.bb b/packages/opie-euroconv/opie-euroconv_1.2.3.bb
new file mode 100644
index 0000000000..662e916cc8
--- /dev/null
+++ b/packages/opie-euroconv/opie-euroconv_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/euroconv \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-examples-python/opie-examples-python_1.2.3.bb b/packages/opie-examples-python/opie-examples-python_1.2.3.bb
new file mode 100644
index 0000000000..f9349e3364
--- /dev/null
+++ b/packages/opie-examples-python/opie-examples-python_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/examples/python \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-examples/opie-examples_1.2.3.bb b/packages/opie-examples/opie-examples_1.2.3.bb
new file mode 100644
index 0000000000..4ae4f4425e
--- /dev/null
+++ b/packages/opie-examples/opie-examples_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/examples \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-eye/opie-eye.inc b/packages/opie-eye/opie-eye.inc
index dc89d72ab4..925f9aa59c 100644
--- a/packages/opie-eye/opie-eye.inc
+++ b/packages/opie-eye/opie-eye.inc
@@ -19,8 +19,8 @@ do_compile_append() {
}
do_install() {
- install -d ${D}${palmtopdir}/bin
- install -m 0755 opie-eye_slave ${D}${palmtopdir}/bin/
+ install -d ${D}${bindir}
+ install -m 0755 opie-eye_slave ${D}${bindir}
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${WORKDIR}/pics/${APPNAME}/*.png ${D}${palmtopdir}/pics/${APPNAME}/
}
diff --git a/packages/opie-eye/opie-eye_1.2.3.bb b/packages/opie-eye/opie-eye_1.2.3.bb
new file mode 100644
index 0000000000..d17aa0c9a6
--- /dev/null
+++ b/packages/opie-eye/opie-eye_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/graphics/opie-eye \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-eye/opie-eye_cvs.bb b/packages/opie-eye/opie-eye_cvs.bb
index 6eee0c6d8e..ed73d8c7ee 100644
--- a/packages/opie-eye/opie-eye_cvs.bb
+++ b/packages/opie-eye/opie-eye_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/graphics/opie-eye \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-fifteen/opie-fifteen_1.2.3.bb b/packages/opie-fifteen/opie-fifteen_1.2.3.bb
new file mode 100644
index 0000000000..48ee868fda
--- /dev/null
+++ b/packages/opie-fifteen/opie-fifteen_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/fifteen \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-formatter/opie-formatter_1.2.3.bb b/packages/opie-formatter/opie-formatter_1.2.3.bb
new file mode 100644
index 0000000000..ef4acbb9a2
--- /dev/null
+++ b/packages/opie-formatter/opie-formatter_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/formatter \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-freetype/opie-freetype_1.2.3.bb b/packages/opie-freetype/opie-freetype_1.2.3.bb
new file mode 100644
index 0000000000..f9159deb2a
--- /dev/null
+++ b/packages/opie-freetype/opie-freetype_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/freetype"
diff --git a/packages/opie-ftp/opie-ftp_1.2.3.bb b/packages/opie-ftp/opie-ftp_1.2.3.bb
new file mode 100644
index 0000000000..c202f448c8
--- /dev/null
+++ b/packages/opie-ftp/opie-ftp_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opieftp \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-ftplib/opie-ftplib_1.2.3.bb b/packages/opie-ftplib/opie-ftplib_1.2.3.bb
new file mode 100644
index 0000000000..2374e80156
--- /dev/null
+++ b/packages/opie-ftplib/opie-ftplib_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/ftplib"
diff --git a/packages/opie-go/opie-go_1.2.3.bb b/packages/opie-go/opie-go_1.2.3.bb
new file mode 100644
index 0000000000..ff2217d99a
--- /dev/null
+++ b/packages/opie-go/opie-go_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/go \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.3.bb b/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.3.bb
new file mode 100644
index 0000000000..58d9136e16
--- /dev/null
+++ b/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/opie-gutenbrowser \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc"
diff --git a/packages/opie-handwriting/opie-handwriting.inc b/packages/opie-handwriting/opie-handwriting.inc
index 86b9ab51c6..c4b79cb671 100644
--- a/packages/opie-handwriting/opie-handwriting.inc
+++ b/packages/opie-handwriting/opie-handwriting.inc
@@ -3,7 +3,6 @@ SECTION = "opie/inputmethods"
PRIORITY = "optional"
LICENSE = "GPL"
APPNAME = "qhandwriting"
-PR = "r1"
S = "${WORKDIR}/handwriting"
@@ -14,7 +13,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+ ${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
else
exit 0
fi
@@ -24,7 +23,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libqhandwriting.so*
diff --git a/packages/opie-handwriting/opie-handwriting_1.2.3.bb b/packages/opie-handwriting/opie-handwriting_1.2.3.bb
new file mode 100644
index 0000000000..6a81fe089c
--- /dev/null
+++ b/packages/opie-handwriting/opie-handwriting_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/handwriting \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc/qimpen"
diff --git a/packages/opie-handwriting/opie-handwriting_cvs.bb b/packages/opie-handwriting/opie-handwriting_cvs.bb
index a607b32c69..6f33501dc3 100644
--- a/packages/opie-handwriting/opie-handwriting_cvs.bb
+++ b/packages/opie-handwriting/opie-handwriting_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/handwriting \
${HANDHELDS_CVS};module=opie/etc/qimpen"
diff --git a/packages/opie-help-en/opie-help-en_1.2.3.bb b/packages/opie-help-en/opie-help-en_1.2.3.bb
new file mode 100644
index 0000000000..b07babb527
--- /dev/null
+++ b/packages/opie-help-en/opie-help-en_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/help/en/html "
diff --git a/packages/opie-helpbrowser/opie-helpbrowser_1.2.3.bb b/packages/opie-helpbrowser/opie-helpbrowser_1.2.3.bb
new file mode 100644
index 0000000000..20a417a9c3
--- /dev/null
+++ b/packages/opie-helpbrowser/opie-helpbrowser_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-homeapplet/opie-homeapplet_1.2.3.bb b/packages/opie-homeapplet/opie-homeapplet_1.2.3.bb
new file mode 100644
index 0000000000..bfd7a6d8d0
--- /dev/null
+++ b/packages/opie-homeapplet/opie-homeapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/homeapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-i18n/opie-i18n_1.2.2.bb b/packages/opie-i18n/opie-i18n_1.2.3.bb
index ed4ac3aff5..ed4ac3aff5 100644
--- a/packages/opie-i18n/opie-i18n_1.2.2.bb
+++ b/packages/opie-i18n/opie-i18n_1.2.3.bb
diff --git a/packages/opie-i18n/opie-lrelease-native_1.2.2.bb b/packages/opie-i18n/opie-lrelease-native_1.2.3.bb
index ce4d83f1b6..ce4d83f1b6 100644
--- a/packages/opie-i18n/opie-lrelease-native_1.2.2.bb
+++ b/packages/opie-i18n/opie-lrelease-native_1.2.3.bb
diff --git a/packages/opie-i18n/opie-lupdate-native_1.2.2.bb b/packages/opie-i18n/opie-lupdate-native_1.2.3.bb
index 04e9728ee5..04e9728ee5 100644
--- a/packages/opie-i18n/opie-lupdate-native_1.2.2.bb
+++ b/packages/opie-i18n/opie-lupdate-native_1.2.3.bb
diff --git a/packages/opie-icon-reload/opie-icon-reload.inc b/packages/opie-icon-reload/opie-icon-reload.inc
index 01f8247f50..a83aa34f96 100644
--- a/packages/opie-icon-reload/opie-icon-reload.inc
+++ b/packages/opie-icon-reload/opie-icon-reload.inc
@@ -9,15 +9,16 @@ SRC_URI = "file://icon-reload.desktop \
file://icon-reload.sh \
file://reload.png"
-FILES_${PN} += "/opt"
+FILES_${PN} += "${palmtopdir}"
do_install() {
install -d ${D}${palmtopdir}/apps/Settings
- install -d ${D}${palmtopdir}/bin
+ install -d ${D}${bindir}
install -d ${D}${palmtopdir}/pics
install -m 0644 ${WORKDIR}/icon-reload.desktop ${D}${palmtopdir}/apps/Settings
- install -m 0755 ${WORKDIR}/icon-reload.sh ${D}${palmtopdir}/bin
+ install -m 0755 ${WORKDIR}/icon-reload.sh ${D}${bindir}
+ sed -i -e 's,@bindir@,${bindir},g' ${D}${bindir}/icon-reload.sh
install -m 0644 ${WORKDIR}/reload.png ${D}${palmtopdir}/pics
}
diff --git a/packages/opie-icon-reload/opie-icon-reload/icon-reload.sh b/packages/opie-icon-reload/opie-icon-reload/icon-reload.sh
index 3df151c207..adeba397ee 100755
--- a/packages/opie-icon-reload/opie-icon-reload/icon-reload.sh
+++ b/packages/opie-icon-reload/opie-icon-reload/icon-reload.sh
@@ -1,4 +1,4 @@
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
-/opt/QtPalmtop/bin/qcop QPE/System "linkChanged(QString)"
+@bindir@/qcop QPE/TaskBar "reloadInputMethods()"
+@bindir@/qcop QPE/System "linkChanged(QString)"
diff --git a/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb b/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb
index 07196d1827..13a5942517 100644
--- a/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb
+++ b/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb
@@ -1,4 +1,3 @@
require ${PN}.inc
-
-
+PR = "r2"
diff --git a/packages/opie-icon-reload/opie-icon-reload_1.2.3.bb b/packages/opie-icon-reload/opie-icon-reload_1.2.3.bb
new file mode 100644
index 0000000000..10510e5566
--- /dev/null
+++ b/packages/opie-icon-reload/opie-icon-reload_1.2.3.bb
@@ -0,0 +1,2 @@
+require ${PN}.inc
+
diff --git a/packages/opie-init/.mtn2git_empty b/packages/opie-init/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/.mtn2git_empty
diff --git a/packages/opie-init/opie-init.inc b/packages/opie-init/opie-init.inc
new file mode 100644
index 0000000000..04a73cb4ea
--- /dev/null
+++ b/packages/opie-init/opie-init.inc
@@ -0,0 +1,46 @@
+DESCRIPTION = "Opie Startup scripts and config"
+SECTION = "opie/base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+#APPNAME = "qpe"
+
+#S = "${WORKDIR}/launcher"
+
+#inherit opie
+inherit update-rc.d
+
+INITSCRIPT_NAME = "opie"
+INITSCRIPT_PARAMS = "start 99 5 . stop 20 0 1 6 ."
+
+do_install() {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/profile.d
+ install -d ${D}${bindir}
+ install -d ${D}${palmtopdir}/etc/skel
+
+ sed -s "s|@palmtopdir@|${palmtopdir}|" ${WORKDIR}/opie >${WORKDIR}/opie.tmp
+ sed -s "s|@palmtopdir@|${palmtopdir}|" ${WORKDIR}/opie_defaults >${WORKDIR}/opie_defaults.tmp
+ install -m 0755 ${WORKDIR}/opie.tmp ${D}${sysconfdir}/init.d/opie
+ install -m 0644 ${WORKDIR}/opie_defaults.tmp ${D}${sysconfdir}/profile.d/opie_defaults
+
+ install -m 0755 ${WORKDIR}/opie-reorgfiles ${D}${bindir}/
+ install -m 0644 ${WORKDIR}/qpe.conf ${D}${palmtopdir}/etc/skel/
+
+ if [ -s ${WORKDIR}/locale.conf ]; then
+ install -m 0644 ${WORKDIR}/locale.conf ${D}${palmtopdir}/etc/skel/
+ fi
+
+ case ${MACHINE} in
+ c7x0)
+ install -d ${D}${sysconfdir}/apm/event.d/
+ install -m 0755 ${WORKDIR}/qpe-suspend-resume ${D}${sysconfdir}/apm/event.d/00-qpe-suspend-resume.sh
+ ;;
+ *)
+ ;;
+ esac
+}
+
+#FILES_opie-init_append = " ${sysconfdir} ${palmtopdir}/bin"
+FILES_${PN} += "${palmtopdir}"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/opie-init/opie-init/.mtn2git_empty b/packages/opie-init/opie-init/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/.mtn2git_empty
diff --git a/packages/opie-init/opie-init/akita/.mtn2git_empty b/packages/opie-init/opie-init/akita/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/akita/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/akita/qpe.conf b/packages/opie-init/opie-init/akita/qpe.conf
index e9922e4d86..e9922e4d86 100644
--- a/packages/opie-taskbar/opie-taskbar/akita/qpe.conf
+++ b/packages/opie-init/opie-init/akita/qpe.conf
diff --git a/packages/opie-init/opie-init/c7x0/.mtn2git_empty b/packages/opie-init/opie-init/c7x0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/c7x0/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume b/packages/opie-init/opie-init/c7x0/qpe-suspend-resume
index be37519512..be37519512 100644
--- a/packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume
+++ b/packages/opie-init/opie-init/c7x0/qpe-suspend-resume
diff --git a/packages/opie-taskbar/opie-taskbar/c7x0/qpe.conf b/packages/opie-init/opie-init/c7x0/qpe.conf
index e9922e4d86..e9922e4d86 100644
--- a/packages/opie-taskbar/opie-taskbar/c7x0/qpe.conf
+++ b/packages/opie-init/opie-init/c7x0/qpe.conf
diff --git a/packages/opie-init/opie-init/htcuniversal/.mtn2git_empty b/packages/opie-init/opie-init/htcuniversal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/htcuniversal/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/htcuniversal/qpe.conf b/packages/opie-init/opie-init/htcuniversal/qpe.conf
index e9922e4d86..e9922e4d86 100644
--- a/packages/opie-taskbar/opie-taskbar/htcuniversal/qpe.conf
+++ b/packages/opie-init/opie-init/htcuniversal/qpe.conf
diff --git a/packages/opie-init/opie-init/locale.conf b/packages/opie-init/opie-init/locale.conf
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/locale.conf
diff --git a/packages/opie-init/opie-init/mnci/.mtn2git_empty b/packages/opie-init/opie-init/mnci/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/mnci/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/mnci/qpe.conf b/packages/opie-init/opie-init/mnci/qpe.conf
index 8efe771ad0..8efe771ad0 100644
--- a/packages/opie-taskbar/opie-taskbar/mnci/qpe.conf
+++ b/packages/opie-init/opie-init/mnci/qpe.conf
diff --git a/packages/opie-init/opie-init/opie b/packages/opie-init/opie-init/opie
new file mode 100755
index 0000000000..d7e06e5ce2
--- /dev/null
+++ b/packages/opie-init/opie-init/opie
@@ -0,0 +1,102 @@
+#!/bin/sh
+#
+[ -z $LOGNAME ] && export LOGNAME=root && export HOME=/home/root
+[ -z $HOME ] && export HOME=/home/$LOGNAME
+
+export QTDIR="@palmtopdir@"
+export OPIEDIR="$QTDIR"
+export QPEDIR="$QTDIR"
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPIEDIR/lib
+export PATH=$PATH:$OPIEDIR/bin
+# Following is from c7x0 override, check for validity, etc.
+## we need to tinker directly with qws_display until the ODevice
+## default (which is now W100:Rot0:0) works flawlessly with rotation
+## and survives a suspend/resume cycle
+#export QWS_DISPLAY=Transformed:Rot0:0
+## export QWS_DISPLAY=W100:Rot0:0
+
+if [ -z `which qpe` ] ; then
+ echo Opie not installed
+ exit 0
+fi
+
+. /etc/profile
+
+if [ ! -e $TSLIB_TSDEVICE ]; then
+ export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice
+fi
+
+for conf in $OPIEDIR/etc/skel/*.conf; do
+ conf_basename=`basename $conf`
+ if [ ! -e "$HOME/Settings/$conf_basename" ] ; then
+ echo "Copying default $conf_basename into $HOME/Settings/"
+ mkdir -p $HOME/Settings/
+ cat $conf >$HOME/Settings/$conf_basename
+ fi
+done
+
+if [ ! -e "$HOME/systeminfo/linkver" ] ; then
+ mkdir -p $HOME/systeminfo/
+ echo "1.13" >$HOME/systeminfo/linkver
+fi
+
+case $1 in
+'start')
+ # Turn off psplash if any - sleep is required for anti-race
+ if [ -e /mnt/.psplash ]; then
+ TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
+ sleep 1
+ fi
+
+ if [ -x "$OPIEDIR/bin/opie-login" ]; then
+ echo Starting Opie-login....
+ $OPIEDIR/bin/opie-login -terminal 3
+ else
+ opie-reorgfiles
+
+ if [ -x "$OPIEDIR/bin/opie-sh-ssh-askpass.sh" ]; then
+ export SSH_ASKPASS=$OPIEDIR/bin/opie-sh-ssh-askpass.sh
+ fi
+ echo Starting Opie....
+ (
+ test -x /usr/bin/ssh-agent && eval $(/usr/bin/ssh-agent -s) && echo $SSH_AGENT_PID>/var/run/opie-ssh-agent.pid ;
+ qpe -terminal 3
+ )
+ echo -n >/var/log/opie-qss.log
+ { for attempt in 0 1 2 3 4 5 6 7 8 9 a b c d e f ; do
+ sleep 1
+ echo "Waiting for qcop to startup: $attempt ..." >>/var/log/opie-qss.log
+ qcop QPE/System 'ping()' || continue
+ echo "Starting qss" >>/var/log/opie-qss.log
+ qss </dev/null >>/var/log/opie-qss.log 2>&1
+ echo "qss exited, will try to restart" >>/var/log/opie-qss.log
+ done; rm /var/run/opie-qss-loop.pid; } </dev/null >/dev/null 2>&1 &
+ echo $! >/var/run/opie-qss-loop.pid
+ fi
+
+ ;;
+
+'stop')
+ echo "Stopping Opie..."
+ test -r /var/run/opie-qss-loop.pid && kill $(cat /var/run/opie-qss-loop.pid) 2>/dev/null ; rm -f /var/run/opie-qss-loop.pid
+ killall qss 2>/dev/null
+ killall qpe 2>/dev/null
+ killall opie-login 2>/dev/null
+ killall quicklauncher 2>/dev/null
+ test -r /var/run/opie-ssh-agent.pid && kill $(cat /var/run/opie-ssh-agent.pid) 2>/dev/null ; rm -f /var/run/opie-ssh-agent.pid
+ true
+
+ ;;
+
+'restart')
+ $0 stop && $0 start
+
+ ;;
+
+*)
+ echo "usage: $0 { start | stop | restart }"
+
+ ;;
+
+esac
+
diff --git a/packages/opie-taskbar/opie-taskbar/opie-reorgfiles b/packages/opie-init/opie-init/opie-reorgfiles
index 96b3e29da4..96b3e29da4 100755
--- a/packages/opie-taskbar/opie-taskbar/opie-reorgfiles
+++ b/packages/opie-init/opie-init/opie-reorgfiles
diff --git a/packages/opie-init/opie-init/opie_defaults b/packages/opie-init/opie-init/opie_defaults
new file mode 100644
index 0000000000..c4d127db33
--- /dev/null
+++ b/packages/opie-init/opie-init/opie_defaults
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+MACHINE="`cat /proc/cpuinfo | sed -n "/^Hardware/s/.*\:\(.*\)/\1/;s/^\ //p"`"
+KVER="`uname -r | sed -n "s/\([0-9]\)\.\([0-9]\)\..*/\1.\2/p"`"
+
+case "$MACHINE" in
+*Poodle) test "$KVER" = "2.6" && export QWS_CURSOR_ROTATION=90;;
+esac
+
+export QTDIR="@palmtopdir@"
+export OPIEDIR="$QTDIR"
+export QPEDIR="$QTDIR"
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OPIEDIR/lib"
+export PATH="$PATH:$OPIEDIR/bin"
+
diff --git a/packages/opie-taskbar/opie-taskbar/qpe.conf b/packages/opie-init/opie-init/qpe.conf
index 59bb20c762..59bb20c762 100644
--- a/packages/opie-taskbar/opie-taskbar/qpe.conf
+++ b/packages/opie-init/opie-init/qpe.conf
diff --git a/packages/opie-init/opie-init/simpad/.mtn2git_empty b/packages/opie-init/opie-init/simpad/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/simpad/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/simpad/qpe.conf b/packages/opie-init/opie-init/simpad/qpe.conf
index b10d90b94e..b10d90b94e 100644
--- a/packages/opie-taskbar/opie-taskbar/simpad/qpe.conf
+++ b/packages/opie-init/opie-init/simpad/qpe.conf
diff --git a/packages/opie-init/opie-init/spitz/.mtn2git_empty b/packages/opie-init/opie-init/spitz/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/spitz/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/spitz/qpe.conf b/packages/opie-init/opie-init/spitz/qpe.conf
index e9922e4d86..e9922e4d86 100644
--- a/packages/opie-taskbar/opie-taskbar/spitz/qpe.conf
+++ b/packages/opie-init/opie-init/spitz/qpe.conf
diff --git a/packages/opie-init/opie-init/tosa/.mtn2git_empty b/packages/opie-init/opie-init/tosa/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-init/opie-init/tosa/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar/tosa/qpe.conf b/packages/opie-init/opie-init/tosa/qpe.conf
index e9922e4d86..e9922e4d86 100644
--- a/packages/opie-taskbar/opie-taskbar/tosa/qpe.conf
+++ b/packages/opie-init/opie-init/tosa/qpe.conf
diff --git a/packages/opie-init/opie-init_1.2.2.bb b/packages/opie-init/opie-init_1.2.2.bb
new file mode 100644
index 0000000000..b52e162e50
--- /dev/null
+++ b/packages/opie-init/opie-init_1.2.2.bb
@@ -0,0 +1,10 @@
+require ${PN}.inc
+PR = "r8"
+
+SRC_URI = "file://opie-reorgfiles \
+ file://opie \
+ file://qpe.conf \
+ file://locale.conf \
+ file://opie_defaults"
+
+SRC_URI_append_c7x0 = " file://qpe-suspend-resume"
diff --git a/packages/opie-irc/files/.mtn2git_empty b/packages/opie-irc/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-irc/files/.mtn2git_empty
diff --git a/packages/opie-irc/files/utf8-topic.patch b/packages/opie-irc/files/utf8-topic.patch
new file mode 100644
index 0000000000..d8d9a52ca9
--- /dev/null
+++ b/packages/opie-irc/files/utf8-topic.patch
@@ -0,0 +1,18 @@
+diff --git a/ircmessageparser.cpp b/ircmessageparser.cpp
+index c449a65..ae47f69 100644
+--- a/ircmessageparser.cpp
++++ b/ircmessageparser.cpp
+@@ -667,11 +667,11 @@ void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) {
+ void IRCMessageParser::parseNumericalTopic(IRCMessage *message) {
+ IRCChannel *channel = m_session->getChannel(message->param(1).lower());
+ if (channel) {
+- IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\""));
++ IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + channel->channelname() + tr(" is \"") + message->param(2) + "\"");
+ output.addParam(channel);
+ emit outputReady(output);
+ } else {
+- IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\""));
++ IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel ") + message->param(1) + tr(" is \"") + message->param(2) + "\"");
+ output.addParam(0);
+ emit outputReady(output);
+ }
diff --git a/packages/opie-irc/files/utf8.patch b/packages/opie-irc/files/utf8.patch
new file mode 100644
index 0000000000..cc562838a2
--- /dev/null
+++ b/packages/opie-irc/files/utf8.patch
@@ -0,0 +1,23 @@
+diff --git a/ircconnection.cpp b/ircconnection.cpp
+index 88e63f7..fb7e168 100644
+--- a/ircconnection.cpp
++++ b/ircconnection.cpp
+@@ -29,7 +29,8 @@ void IRCConnection::sendLine(QString line) {
+ while((line.right(1) == "\n") || (line.right(1) == "\r"))
+ line = line.left(line.length() - 1);
+ line.append("\r\n");
+- m_socket->writeBlock(line, line.length());
++ QCString uline = line.utf8();
++ m_socket->writeBlock(uline, uline.length());
+ }
+
+ void IRCConnection::sendCTCPReply(const QString &nickname, const QString &type, const QString &args) {
+@@ -77,7 +78,7 @@ void IRCConnection::login() {
+ /* Called when data arrives on the socket */
+ void IRCConnection::dataReady() {
+ while(m_socket->canReadLine()) {
+- IRCMessage message(m_socket->readLine());
++ IRCMessage message(QString::fromUtf8(m_socket->readLine()));
+ if (!m_loggedIn && message.isNumerical() && message.commandNumber() == 1) {
+ /* Now autojoin all channels specified inside the server profile */
+ QStringList channels = QStringList::split(QChar(','), m_server->channels());
diff --git a/packages/opie-irc/opie-irc_1.2.3.bb b/packages/opie-irc/opie-irc_1.2.3.bb
new file mode 100644
index 0000000000..2f333d6a41
--- /dev/null
+++ b/packages/opie-irc/opie-irc_1.2.3.bb
@@ -0,0 +1,10 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opieirc \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/help \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ file://utf8.patch;patch=1 \
+ file://utf8-topic.patch;patch=1 "
diff --git a/packages/opie-irc/opie-irc_cvs.bb b/packages/opie-irc/opie-irc_cvs.bb
index f1ad3901c2..63e70179a4 100644
--- a/packages/opie-irc/opie-irc_cvs.bb
+++ b/packages/opie-irc/opie-irc_cvs.bb
@@ -1,8 +1,11 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/opieirc \
${HANDHELDS_CVS};module=opie/help \
${HANDHELDS_CVS};module=opie/apps \
- ${HANDHELDS_CVS};module=opie/pics"
+ ${HANDHELDS_CVS};module=opie/pics \
+ file://utf8.patch;patch=1 \
+ file://utf8-topic.patch;patch=1 "
diff --git a/packages/opie-irdaapplet/files/.mtn2git_empty b/packages/opie-irdaapplet/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-irdaapplet/files/.mtn2git_empty
diff --git a/packages/opie-irdaapplet/files/learning-cpp.patch b/packages/opie-irdaapplet/files/learning-cpp.patch
new file mode 100644
index 0000000000..60e46fd133
--- /dev/null
+++ b/packages/opie-irdaapplet/files/learning-cpp.patch
@@ -0,0 +1,13 @@
+diff --git a/irda.cpp b/irda.cpp
+index d57104b..848ddb4 100644
+--- a/irda.cpp
++++ b/irda.cpp
+@@ -54,7 +54,7 @@ IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) :
+ setFixedHeight( AppLnk::smallIconSize() );
+ setFixedWidth( AppLnk::smallIconSize() );
+
+- if (m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ) == -1)
++ if ( ( m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ) ) == -1)
+ perror ( "failed grabbing IrDA socket" );
+
+ m_irdaOnPixmap =
diff --git a/packages/opie-irdaapplet/opie-irdaapplet.inc b/packages/opie-irdaapplet/opie-irdaapplet.inc
index d9f15453a5..ed47c2ca60 100644
--- a/packages/opie-irdaapplet/opie-irdaapplet.inc
+++ b/packages/opie-irdaapplet/opie-irdaapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-irdaapplet/opie-irdaapplet_1.2.3.bb b/packages/opie-irdaapplet/opie-irdaapplet_1.2.3.bb
new file mode 100644
index 0000000000..aa0ece4c73
--- /dev/null
+++ b/packages/opie-irdaapplet/opie-irdaapplet_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+PR = r3
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/irdaapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/sounds \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ "
diff --git a/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb b/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
index 539d4555e1..1fd3393fe1 100644
--- a/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
+++ b/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
@@ -1,8 +1,10 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = r3
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/irdaapplet \
${HANDHELDS_CVS};module=opie/pics \
${HANDHELDS_CVS};module=opie/sounds \
- ${HANDHELDS_CVS};module=opie/apps"
+ ${HANDHELDS_CVS};module=opie/apps \
+ "
diff --git a/packages/opie-jumpx/opie-jumpx_1.2.3.bb b/packages/opie-jumpx/opie-jumpx_1.2.3.bb
new file mode 100644
index 0000000000..b1be4bf1a7
--- /dev/null
+++ b/packages/opie-jumpx/opie-jumpx_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/jumpx \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-kbill/opie-kbill_1.2.3.bb b/packages/opie-kbill/opie-kbill_1.2.3.bb
new file mode 100644
index 0000000000..609c97a89f
--- /dev/null
+++ b/packages/opie-kbill/opie-kbill_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/kbill \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-kcheckers/opie-kcheckers_1.2.3.bb b/packages/opie-kcheckers/opie-kcheckers_1.2.3.bb
new file mode 100644
index 0000000000..281577a290
--- /dev/null
+++ b/packages/opie-kcheckers/opie-kcheckers_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/kcheckers \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-keyboard/files/.mtn2git_empty b/packages/opie-keyboard/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-keyboard/files/.mtn2git_empty
diff --git a/packages/opie-keyboard/files/fix-rpath.patch b/packages/opie-keyboard/files/fix-rpath.patch
new file mode 100644
index 0000000000..d917aeb609
--- /dev/null
+++ b/packages/opie-keyboard/files/fix-rpath.patch
@@ -0,0 +1,13 @@
+diff --git a/keyboard.pro b/keyboard.pro
+index 3a9e075..52bc10d 100644
+--- a/keyboard.pro
++++ b/keyboard.pro
+@@ -9,7 +9,7 @@ DESTDIR = ../../plugins/inputmethods
+ INCLUDEPATH += $(OPIEDIR)/include
+ DEPENDPATH += ../../launcher
+ LIBS += -lqpe -L$(OPIEDIR)/plugins/inputmethods -lqpickboard
+-QMAKE_LFLAGS += -Wl,-rpath,/opt/QtPalmtop/plugins/inputmethods
++QMAKE_LFLAGS += -Wl,-rpath,${palmtopdir}/plugins/inputmethods
+ VERSION = 1.0.0
+
+ include( $(OPIEDIR)/include.pro )
diff --git a/packages/opie-keyboard/opie-keyboard.inc b/packages/opie-keyboard/opie-keyboard.inc
index d99b02ab80..122e30f38e 100644
--- a/packages/opie-keyboard/opie-keyboard.inc
+++ b/packages/opie-keyboard/opie-keyboard.inc
@@ -14,7 +14,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+ ${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
else
exit 0
fi
@@ -24,7 +24,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libqkeyboard.so*
diff --git a/packages/opie-keyboard/opie-keyboard_1.2.3.bb b/packages/opie-keyboard/opie-keyboard_1.2.3.bb
new file mode 100644
index 0000000000..04c368ba89
--- /dev/null
+++ b/packages/opie-keyboard/opie-keyboard_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/keyboard \
+ file://fix-rpath.patch;patch=1 "
diff --git a/packages/opie-keyboard/opie-keyboard_cvs.bb b/packages/opie-keyboard/opie-keyboard_cvs.bb
index 0e6f66710e..e2cdeef495 100644
--- a/packages/opie-keyboard/opie-keyboard_cvs.bb
+++ b/packages/opie-keyboard/opie-keyboard_cvs.bb
@@ -1,5 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
-SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/keyboard "
+SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/keyboard \
+ file://fix-rpath.patch;patch=1 "
diff --git a/packages/opie-keypebble/opie-keypebble_1.2.3.bb b/packages/opie-keypebble/opie-keypebble_1.2.3.bb
new file mode 100644
index 0000000000..f1a3e7aee0
--- /dev/null
+++ b/packages/opie-keypebble/opie-keypebble_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/comm/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-keytabs/opie-keytabs_1.2.3.bb b/packages/opie-keytabs/opie-keytabs_1.2.3.bb
new file mode 100644
index 0000000000..2244f0153a
--- /dev/null
+++ b/packages/opie-keytabs/opie-keytabs_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/etc"
diff --git a/packages/opie-keyview/opie-keyview.inc b/packages/opie-keyview/opie-keyview.inc
index 0fa8b683bc..904d781ee1 100644
--- a/packages/opie-keyview/opie-keyview.inc
+++ b/packages/opie-keyview/opie-keyview.inc
@@ -13,7 +13,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+ ${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
else
exit 0
fi
@@ -21,7 +21,7 @@ fi
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libkeyview.so*
diff --git a/packages/opie-keyview/opie-keyview_1.2.3.bb b/packages/opie-keyview/opie-keyview_1.2.3.bb
new file mode 100644
index 0000000000..583e3a4507
--- /dev/null
+++ b/packages/opie-keyview/opie-keyview_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/development/keyview "
diff --git a/packages/opie-keyview/opie-keyview_cvs.bb b/packages/opie-keyview/opie-keyview_cvs.bb
index f8bfff4b4b..5a806c6c62 100644
--- a/packages/opie-keyview/opie-keyview_cvs.bb
+++ b/packages/opie-keyview/opie-keyview_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/development/keyview "
diff --git a/packages/opie-kjumpx/opie-kjumpx_1.2.3.bb b/packages/opie-kjumpx/opie-kjumpx_1.2.3.bb
new file mode 100644
index 0000000000..0a13550770
--- /dev/null
+++ b/packages/opie-kjumpx/opie-kjumpx_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/kjumpx \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-kpacman/opie-kpacman_1.2.3.bb b/packages/opie-kpacman/opie-kpacman_1.2.3.bb
new file mode 100644
index 0000000000..66bf9fcfc2
--- /dev/null
+++ b/packages/opie-kpacman/opie-kpacman_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/kpacman \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-language/opie-language_1.2.3.bb b/packages/opie-language/opie-language_1.2.3.bb
new file mode 100644
index 0000000000..17635b6cf2
--- /dev/null
+++ b/packages/opie-language/opie-language_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/language \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-launcher-settings/opie-launcher-settings_1.2.3.bb b/packages/opie-launcher-settings/opie-launcher-settings_1.2.3.bb
new file mode 100644
index 0000000000..140309765b
--- /dev/null
+++ b/packages/opie-launcher-settings/opie-launcher-settings_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/launcher \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-libqrsync/opie-libqrsync_1.2.3.bb b/packages/opie-libqrsync/opie-libqrsync_1.2.3.bb
new file mode 100644
index 0000000000..4cbd183777
--- /dev/null
+++ b/packages/opie-libqrsync/opie-libqrsync_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/rsync"
diff --git a/packages/opie-light-and-power/opie-light-and-power_1.2.3.bb b/packages/opie-light-and-power/opie-light-and-power_1.2.3.bb
new file mode 100644
index 0000000000..a5ebbc9666
--- /dev/null
+++ b/packages/opie-light-and-power/opie-light-and-power_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/light-and-power \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-lockapplet/opie-lockapplet.inc b/packages/opie-lockapplet/opie-lockapplet.inc
index b09673047e..a71078dd67 100644
--- a/packages/opie-lockapplet/opie-lockapplet.inc
+++ b/packages/opie-lockapplet/opie-lockapplet.inc
@@ -15,13 +15,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-lockapplet/opie-lockapplet_1.2.3.bb b/packages/opie-lockapplet/opie-lockapplet_1.2.3.bb
new file mode 100644
index 0000000000..bc285bdc8c
--- /dev/null
+++ b/packages/opie-lockapplet/opie-lockapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/lockapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics "
diff --git a/packages/opie-lockapplet/opie-lockapplet_cvs.bb b/packages/opie-lockapplet/opie-lockapplet_cvs.bb
index 6195ed07ac..6ff0588118 100644
--- a/packages/opie-lockapplet/opie-lockapplet_cvs.bb
+++ b/packages/opie-lockapplet/opie-lockapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/lockapplet \
${HANDHELDS_CVS};module=opie/pics "
diff --git a/packages/opie-login/opie-login_1.2.3.bb b/packages/opie-login/opie-login_1.2.3.bb
new file mode 100644
index 0000000000..449b6ba8ed
--- /dev/null
+++ b/packages/opie-login/opie-login_1.2.3.bb
@@ -0,0 +1,10 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/core/launcher \
+ file://opie-session \
+ file://post-session \
+ file://pre-session \
+ file://opie-login.conf"
diff --git a/packages/opie-logoutapplet/opie-logoutapplet_1.2.3.bb b/packages/opie-logoutapplet/opie-logoutapplet_1.2.3.bb
new file mode 100644
index 0000000000..14502f49d0
--- /dev/null
+++ b/packages/opie-logoutapplet/opie-logoutapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/logoutapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-mail/opie-mail_1.2.3.bb b/packages/opie-mail/opie-mail_1.2.3.bb
new file mode 100644
index 0000000000..d9f286d462
--- /dev/null
+++ b/packages/opie-mail/opie-mail_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/mail \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-mailapplet/opie-mailapplet_1.2.3.bb b/packages/opie-mailapplet/opie-mailapplet_1.2.3.bb
new file mode 100644
index 0000000000..0795d423ae
--- /dev/null
+++ b/packages/opie-mailapplet/opie-mailapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/mail/taskbarapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-mailapplet/opie-mailapplet_cvs.bb b/packages/opie-mailapplet/opie-mailapplet_cvs.bb
index 75785868ef..b20bbd0217 100644
--- a/packages/opie-mailapplet/opie-mailapplet_cvs.bb
+++ b/packages/opie-mailapplet/opie-mailapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/mail/taskbarapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin.inc b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin.inc
index 14aec8d351..4066f63737 100644
--- a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin.inc
+++ b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin.inc
@@ -2,8 +2,8 @@ DESCRIPTION = "MP3 file plugin for opie-mediaplayer11 using libmad"
SECTION = "opie/codecs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "opie-mediaplayer1 libmad"
-RDEPENDS = "opie-mediaplayer1"
+DEPENDS = "opie-mediaplayer1-core libmad"
+RDEPENDS = "opie-mediaplayer1-core"
APPNAME = "madplugin"
diff --git a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb
index 8c8ea5f9fb..19b507a2bc 100644
--- a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb
+++ b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/multimedia/opieplayer \
diff --git a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_cvs.bb b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_cvs.bb
index c30822ab46..4fafc8f530 100644
--- a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_cvs.bb
+++ b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/multimedia/opieplayer \
file://libmadplugin.pro"
diff --git a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin.inc b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin.inc
index a3631755e7..16cc11e4e9 100644
--- a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin.inc
+++ b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin.inc
@@ -2,8 +2,8 @@ DESCRIPTION = "MOD/XM/S3M/IT plugin using libmodplug"
SECTION = "opie/codecs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "opie-mediaplayer1"
-RDEPENDS = "opie-mediaplayer1"
+DEPENDS = "opie-mediaplayer1-core"
+RDEPENDS = "opie-mediaplayer1-core"
APPNAME = "modplugin"
diff --git a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb
index d5702318c9..5c49fb824f 100644
--- a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb
+++ b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/multimedia/opieplayer "
diff --git a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_cvs.bb b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_cvs.bb
index 4cf1ac926d..427793481e 100644
--- a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_cvs.bb
+++ b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/multimedia/opieplayer "
diff --git a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin.inc b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin.inc
index b5949be74d..f55d0eb3fd 100644
--- a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin.inc
+++ b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin.inc
@@ -2,8 +2,8 @@ DESCRIPTION = "Ogg file plugin using tremor"
SECTION = "opie/codecs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "opie-mediaplayer1 tremor"
-RDEPENDS = "opie-mediaplayer1"
+DEPENDS = "opie-mediaplayer1-core tremor"
+RDEPENDS = "opie-mediaplayer1-core"
APPNAME = "tremorplugin"
diff --git a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb
index e49bc44f41..0407a8ab16 100644
--- a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb
+++ b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/multimedia/opieplayer \
diff --git a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_cvs.bb b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_cvs.bb
index f1a3d8a92e..0fd327d126 100644
--- a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_cvs.bb
+++ b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/multimedia/opieplayer \
file://vorbis.pro "
diff --git a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin.inc b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin.inc
index c8d81c1ef4..858f8b3040 100644
--- a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin.inc
+++ b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin.inc
@@ -2,8 +2,8 @@ DESCRIPTION = "WAV file plugin"
SECTION = "opie/codecs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "opie-mediaplayer1"
-RDEPENDS = "opie-mediaplayer1"
+DEPENDS = "opie-mediaplayer1-core"
+RDEPENDS = "opie-mediaplayer1-core"
APPNAME = "wavplugin"
diff --git a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb
index d5702318c9..5c49fb824f 100644
--- a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb
+++ b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/multimedia/opieplayer "
diff --git a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_cvs.bb b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_cvs.bb
index 4cf1ac926d..ca4c49ee3a 100644
--- a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_cvs.bb
+++ b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/multimedia/opieplayer "
diff --git a/packages/opie-mediummount/opie-mediummount_1.2.3.bb b/packages/opie-mediummount/opie-mediummount_1.2.3.bb
new file mode 100644
index 0000000000..e86f5d9204
--- /dev/null
+++ b/packages/opie-mediummount/opie-mediummount_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/mediummount \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-memoryapplet/opie-memoryapplet.inc b/packages/opie-memoryapplet/opie-memoryapplet.inc
index b67321412f..72348e1bdb 100644
--- a/packages/opie-memoryapplet/opie-memoryapplet.inc
+++ b/packages/opie-memoryapplet/opie-memoryapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-memoryapplet/opie-memoryapplet_1.2.3.bb b/packages/opie-memoryapplet/opie-memoryapplet_1.2.3.bb
new file mode 100644
index 0000000000..c28a321021
--- /dev/null
+++ b/packages/opie-memoryapplet/opie-memoryapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/memoryapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/sysinfo \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb b/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
index 3b686324f6..d0802ad986 100644
--- a/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
+++ b/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/memoryapplet \
${HANDHELDS_CVS};module=opie/noncore/settings/sysinfo \
diff --git a/packages/opie-mindbreaker/opie-mindbreaker_1.2.3.bb b/packages/opie-mindbreaker/opie-mindbreaker_1.2.3.bb
new file mode 100644
index 0000000000..fde254851e
--- /dev/null
+++ b/packages/opie-mindbreaker/opie-mindbreaker_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/mindbreaker \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-minesweep/opie-minesweep_1.2.3.bb b/packages/opie-minesweep/opie-minesweep_1.2.3.bb
new file mode 100644
index 0000000000..0ff2e278ee
--- /dev/null
+++ b/packages/opie-minesweep/opie-minesweep_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/minesweep \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-multikey/files/fix-rpath.patch b/packages/opie-multikey/files/fix-rpath.patch
new file mode 100644
index 0000000000..786f618324
--- /dev/null
+++ b/packages/opie-multikey/files/fix-rpath.patch
@@ -0,0 +1,11 @@
+--- multikey/multikey.pro.org 2005-06-16 01:54:51.000000000 +0300
++++ multikey/multikey.pro 2007-07-04 21:02:52.000000000 +0300
+@@ -11,7 +11,7 @@
+ INCLUDEPATH += $(OPIEDIR)/include
+ DEPENDPATH += ../../launcher
+ LIBS += -lqpe -L$(OPIEDIR)/plugins/inputmethods -lqpickboard -lqtaux2 -lopiecore2 -lopieui2
+-QMAKE_LFLAGS += -Wl,-rpath,/opt/QtPalmtop/plugins/inputmethods
++QMAKE_LFLAGS += -Wl,-rpath,$(palmtopdir)/plugins/inputmethods
+ VERSION = 1.0.0
+
+ include( $(OPIEDIR)/include.pro )
diff --git a/packages/opie-multikey/files/ru.keymap b/packages/opie-multikey/files/ru.keymap
new file mode 100644
index 0000000000..9f5d1e360b
--- /dev/null
+++ b/packages/opie-multikey/files/ru.keymap
@@ -0,0 +1,255 @@
+# Created by Anton Kachalov (mouse@altlinux.ru)
+title = Russian
+sw = RU
+
+1 0x1000 0 2 # and you can write whatever you want after the last element
+
+
+ "9 9 2 1"
+ ". c None"
+ "a c #000000"
+ "........."
+ "........."
+ ".aa.aa.aa"
+ ".a..a..a."
+ ".aa.aa.a."
+ ".a...a.a."
+ ".aa.aa.aa"
+ "........."
+ "........."
+
+1 0 0x0451 2 # CYRILLIC SMALL LETTER IO
+1 0 0x31 2 # 1
+1 0 0x32 2 # 2
+1 0 0x33 2 # 3
+1 0 0x34 2 # 4
+1 0 0x35 2 # 5
+1 0 0x36 2 # 6
+1 0 0x37 2 # 7
+1 0 0x38 2 # 8
+1 0 0x39 2 # 9
+1 0 0x30 2 # 0
+1 0 0x2d 2 # -
+1 0 0x3d 2 # =
+1 0x1003 0 2
+
+ "9 9 2 1"
+ ". c None"
+ "a c #000000"
+ "........."
+ "........."
+ "...a....."
+ "..aa....."
+ ".aaaaaaaa"
+ "..aa....."
+ "...a....."
+ "........."
+ "........."
+
+
+2 0x1001 0x9 3 # tab char, but why doesnt this work...?
+
+
+ "11 9 2 1"
+ ". c None"
+ "a c #000000"
+ "..........."
+ "..........."
+ ".....a..a.."
+ ".....aa.a.."
+ ".aaaaaaaa.."
+ ".....aa.a.."
+ ".....a..a.."
+ "..........."
+ "..........."
+2 0 0x0439 2 # CYRILLIC SMALL LETTER SHORT I
+2 0 0x0446 2 # CYRILLIC SMALL LETTER TSE
+2 0 0x0443 2 # CYRILLIC SMALL LETTER U
+2 0 0x043a 2 # CYRILLIC SMALL LETTER KA
+2 0 0x0435 2 # CYRILLIC SMALL LETTER IE
+2 0 0x043d 2 # CYRILLIC SMALL LETTER EN
+2 0 0x0433 2 # CYRILLIC SMALL LETTER GHE
+2 0 0x0448 2 # CYRILLIC SMALL LETTER SHA
+2 0 0x0449 2 # CYRILLIC SMALL LETTER SHCHA
+2 0 0x0437 2 # CYRILLIC SMALL LETTER ZE
+2 0 0x0445 2 # CYRILLIC SMALL LETTER HA
+2 0 0x044a 2 # CYRILLIC SMALL LETTER HARD SIGN
+2 0 0x2f 4 # /
+
+3 0x1024 0 4
+ "17 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " .. . .. .. "
+ " . . . . . . "
+ " . ... .. . "
+ " . . . . . "
+ " .. . . . .. "
+ " "
+3 0 0x0444 2 # CYRILLIC SMALL LETTER EF
+3 0 0x044b 2 # CYRILLIC SMALL LETTER YERU
+3 0 0x0432 2 # CYRILLIC SMALL LETTER VE
+3 0 0x0430 2 # CYRILLIC SMALL LETTER A
+3 0 0x043f 2 # CYRILLIC SMALL LETTER PE
+3 0 0x0440 2 # CYRILLIC SMALL LETTER ER
+3 0 0x043e 2 # CYRILLIC SMALL LETTER O
+3 0 0x043b 2 # CYRILLIC SMALL LETTER EL
+3 0 0x0434 2 # CYRILLIC SMALL LETTER DE
+3 0 0x0436 2 # CYRILLIC SMALL LETTER ZHE
+3 0 0x044d 2 # CYRILLIC SMALL LETTER E
+3 0x1004 0 5 # ENTER
+ "16 9 2 1"
+ ". c None"
+ "a c #000000"
+ "................"
+ "................"
+ "...........a...."
+ "....aa.....a...."
+ "...aa......a...."
+ "..aaaaaaaaaa...."
+ "...aa..........."
+ "....aa.........."
+ "................"
+
+4 0x1020 0 5
+ "21 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " .. . . ... ... ... "
+ " . . . . . . "
+ " . ... . .. . "
+ " . . . . . . "
+ " .. . . ... . . "
+ " "
+4 0 0x044f 2 # CYRILLIC SMALL LETTER YA
+4 0 0x0447 2 # CYRILLIC SMALL LETTER CHE
+4 0 0x0441 2 # CYRILLIC SMALL LETTER ES
+4 0 0x043c 2 # CYRILLIC SMALL LETTER EM
+4 0 0x0438 2 # CYRILLIC SMALL LETTER I
+4 0 0x0442 2 # CYRILLIC SMALL LETTER TE
+4 0 0x044c 2 # CYRILLIC SMALL LETTER SOFT SIGN
+4 0 0x0431 2 # CYRILLIC SMALL LETTER BE
+4 0 0x044e 2 # CYRILLIC SMALL LETTER YU
+4 0 0x2e 2 # .
+4 0x1020 0 5 # SHIFT
+ "21 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " .. . . ... ... ... "
+ " . . . . . . "
+ " . ... . .. . "
+ " . . . . . . "
+ " .. . . ... . . "
+ " "
+
+5 0x1021 0 3
+ "17 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " .. ... .. . "
+ " . . . . . "
+ " . . .. . "
+ " . . . . . "
+ " .. . . . ... "
+ " "
+5 0x1023 0 3
+ "13 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " . . ... "
+ " . . . . "
+ " ... . . "
+ " . . . . "
+ " . . ... . "
+ " "
+5 0 0x20 16
+5 0x1023 0 3
+ "13 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " . . ... "
+ " . . . . "
+ " ... . . "
+ " . . . . "
+ " . . ... . "
+ " "
+5 0x1021 0 3
+ "17 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " .. ... .. . "
+ " . . . . . "
+ " . . .. . "
+ " . . . . . "
+ " .. . . . ... "
+ " "
+5 0x1030 0 2 #original code is F1, but i'll use it for turning on/off the config dialog
+ "13 7 2 1"
+ " c None"
+ ". c #000000"
+ " "
+ " . "
+ " ... "
+ " ..... "
+ " . "
+ " . "
+ " "
+
+# shift table
+0x0451 0x0401 # CYRILLIC SMALL LETTER IO -> CYRILLIC CAPITAL LETTER IO
+0x31 0x21 # 1 -> !
+0x32 0x22 # 2 -> "
+0x33 0x4e # 3 -> N
+0x34 0x3b # 4 -> ;
+0x35 0x25 # 5 -> %
+0x36 0x3a # 6 -> :
+0x37 0x3f # 7 -> ?
+0x38 0x2a # 8 -> *
+0x39 0x28 # 9 -> (
+0x30 0x29 # 0 -> )
+0x2d 0x5f # - -> _
+0x3d 0x2b # = -> +
+
+0x0439 0x0419 # CYRILLIC SMALL LETTER SHORT I -> CYRILLIC CAPITAL LETTER SHORT I
+0x0446 0x0426 # CYRILLIC SMALL LETTER TSE -> CYRILLIC CAPITAL LETTER TSE
+0x0443 0x0423 # CYRILLIC SMALL LETTER U -> CYRILLIC CAPITAL LETTER U
+0x043a 0x041a # CYRILLIC SMALL LETTER KA -> CYRILLIC CAPITAL LETTER KA
+0x0435 0x0415 # CYRILLIC SMALL LETTER IE -> CYRILLIC CAPITAL LETTER IE
+0x043d 0x041d # CYRILLIC SMALL LETTER EN -> CYRILLIC CAPITAL LETTER EN
+0x0433 0x0413 # CYRILLIC SMALL LETTER GHE -> CYRILLIC CAPITAL LETTER GHE
+0x0448 0x0428 # CYRILLIC SMALL LETTER SHA -> CYRILLIC CAPITAL LETTER SHA
+0x0449 0x0429 # CYRILLIC SMALL LETTER SHCHA -> CYRILLIC CAPITAL LETTER SHCHA
+0x0437 0x0417 # CYRILLIC SMALL LETTER ZE -> CYRILLIC CAPITAL LETTER ZE
+0x0445 0x0425 # CYRILLIC SMALL LETTER HA -> CYRILLIC CAPITAL LETTER HA
+0x044a 0x042a # CYRILLIC SMALL LETTER HARD SIGN -> CYRILLIC CAPITAL LETTER HARD SIGN
+
+0x0444 0x0424 # CYRILLIC SMALL LETTER EF -> CYRILLIC CAPITAL LETTER EF
+0x044b 0x042b # CYRILLIC SMALL LETTER YERU -> CYRILLIC CAPITAL LETTER YERU
+0x0432 0x0412 # CYRILLIC SMALL LETTER VE -> CYRILLIC CAPITAL LETTER VE
+0x0430 0x0410 # CYRILLIC SMALL LETTER A -> CYRILLIC CAPITAL LETTER A
+0x043f 0x041f # CYRILLIC SMALL LETTER PE -> CYRILLIC CAPITAL LETTER PE
+0x0440 0x0420 # CYRILLIC SMALL LETTER ER -> CYRILLIC CAPITAL LETTER ER
+0x043e 0x041e # CYRILLIC SMALL LETTER O -> CYRILLIC CAPITAL LETTER O
+0x043b 0x041b # CYRILLIC SMALL LETTER EL -> CYRILLIC CAPITAL LETTER EL
+0x0434 0x0414 # CYRILLIC SMALL LETTER DE -> CYRILLIC CAPITAL LETTER DE
+0x0436 0x0416 # CYRILLIC SMALL LETTER ZHE -> CYRILLIC CAPITAL LETTER ZHE
+0x044d 0x042d # CYRILLIC SMALL LETTER E -> CYRILLIC CAPITAL LETTER E
+
+0x044f 0x042f # CYRILLIC SMALL LETTER YA -> CYRILLIC CAPITAL LETTER YA
+0x0447 0x0427 # CYRILLIC SMALL LETTER CHE -> CYRILLIC CAPITAL LETTER CHE
+0x0441 0x0421 # CYRILLIC SMALL LETTER ES -> CYRILLIC CAPITAL LETTER ES
+0x043c 0x041c # CYRILLIC SMALL LETTER EM -> CYRILLIC CAPITAL LETTER EM
+0x0438 0x0418 # CYRILLIC SMALL LETTER I -> CYRILLIC CAPITAL LETTER I
+0x0442 0x0422 # CYRILLIC SMALL LETTER TE -> CYRILLIC CAPITAL LETTER TE
+0x044c 0x042c # CYRILLIC SMALL LETTER SOFT SIGN -> CYRILLIC CAPITAL LETTER SOFT SIGN
+0x0431 0x0411 # CYRILLIC SMALL LETTER BE -> CYRILLIC CAPITAL LETTER BE
+0x044e 0x042e # CYRILLIC SMALL LETTER YU -> CYRILLIC CAPITAL LETTER YU
+0x2f 0x7c # / -> |
+0x2e 0x2c # . -> ,
diff --git a/packages/opie-multikey/opie-multikey.inc b/packages/opie-multikey/opie-multikey.inc
index 40cc884715..3754e48896 100644
--- a/packages/opie-multikey/opie-multikey.inc
+++ b/packages/opie-multikey/opie-multikey.inc
@@ -4,6 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "libqtaux2 opie-pickboard"
RDEPENDS = "opie-pics opie-pickboard"
+RRECOMMENDS = "opie-multikeyapplet"
APPNAME = "qmultikey"
S = "${WORKDIR}/multikey"
@@ -14,7 +15,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+ ${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
else
exit 0
fi
@@ -23,7 +24,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libqmultikey.so* share/multikey/*
@@ -31,5 +32,6 @@ do_install() {
install -d ${D}${palmtopdir}/share/multikey/
install -m 0644 ${WORKDIR}/share/multikey/*.keymap ${D}${palmtopdir}/share/multikey/
install -m 0644 ${WORKDIR}/share/multikey/README ${D}${palmtopdir}/share/multikey/
+ install -m 0644 ${FILESDIR}/ru.keymap ${D}${palmtopdir}/share/multikey/
}
diff --git a/packages/opie-multikey/opie-multikey_1.2.2.bb b/packages/opie-multikey/opie-multikey_1.2.2.bb
index 702dda05e9..9217992acc 100644
--- a/packages/opie-multikey/opie-multikey_1.2.2.bb
+++ b/packages/opie-multikey/opie-multikey_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-PR = "r1"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/multikey \
diff --git a/packages/opie-multikey/opie-multikey_1.2.3.bb b/packages/opie-multikey/opie-multikey_1.2.3.bb
new file mode 100644
index 0000000000..a32dd47e7c
--- /dev/null
+++ b/packages/opie-multikey/opie-multikey_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/multikey \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ file://fix-rpath.patch;patch=1"
+
+# file://friendly-button-names.patch;patch=1"
diff --git a/packages/opie-multikey/opie-multikey_cvs.bb b/packages/opie-multikey/opie-multikey_cvs.bb
index 5080a4d984..307f06ae74 100644
--- a/packages/opie-multikey/opie-multikey_cvs.bb
+++ b/packages/opie-multikey/opie-multikey_cvs.bb
@@ -1,8 +1,10 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
+PR = "r5"
SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/multikey \
${HANDHELDS_CVS};module=opie/share \
- file://friendly-button-names.patch;patch=1"
+ file://fix-rpath.patch;patch=1"
+
+# file://friendly-button-names.patch;patch=1"
diff --git a/packages/opie-multikeyapplet/opie-multikeyapplet.inc b/packages/opie-multikeyapplet/opie-multikeyapplet.inc
index 6e40790f07..0022ba567a 100644
--- a/packages/opie-multikeyapplet/opie-multikeyapplet.inc
+++ b/packages/opie-multikeyapplet/opie-multikeyapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.3.bb b/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.3.bb
new file mode 100644
index 0000000000..11bd0e66ae
--- /dev/null
+++ b/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/multikeyapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb b/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
index 4c26c30395..000f5b5e05 100644
--- a/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
+++ b/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/multikeyapplet \
${HANDHELDS_CVS};module=opie/apps"
diff --git a/packages/opie-networkapplet/opie-networkapplet_1.2.3.bb b/packages/opie-networkapplet/opie-networkapplet_1.2.3.bb
new file mode 100644
index 0000000000..a965cbd2c0
--- /dev/null
+++ b/packages/opie-networkapplet/opie-networkapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/networkapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-networksettings/files/.mtn2git_empty b/packages/opie-networksettings/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-networksettings/files/.mtn2git_empty
diff --git a/packages/opie-networksettings/files/wireless.patch b/packages/opie-networksettings/files/wireless.patch
new file mode 100644
index 0000000000..5d8d42af58
--- /dev/null
+++ b/packages/opie-networksettings/files/wireless.patch
@@ -0,0 +1,13 @@
+diff --git a/wlan/wextensions.h b/wlan/wextensions.h
+index a89e33a..356aada 100644
+--- a/wlan/wextensions.h
++++ b/wlan/wextensions.h
+@@ -4,6 +4,8 @@
+ #include <qstring.h>
+
+ #include <netinet/ip.h>
++#include <linux/if.h>
++#include <linux/types.h>
+ #include <linux/wireless.h>
+
+ class WExtensions {
diff --git a/packages/opie-networksettings/opie-networksettings.inc b/packages/opie-networksettings/opie-networksettings.inc
index 6eeb217309..82c99b29cf 100644
--- a/packages/opie-networksettings/opie-networksettings.inc
+++ b/packages/opie-networksettings/opie-networksettings.inc
@@ -31,7 +31,7 @@ do_install() {
install -m 0644 ${WORKDIR}/pics/${APPNAME}/*.* ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${WORKDIR}/pics/Network/*.* ${D}${palmtopdir}/pics/Network/
install -d ${D}${palmtopdir}/lib/
- oe_libinstall -so libinterfaces ${D}${palmtopdir}/lib
+ oe_libinstall -so libinterfaces ${D}${libdir}
install -d ${D}${palmtopdir}/plugins/networksettings/
for plugin in kppp wlan
do
diff --git a/packages/opie-networksettings/opie-networksettings_1.2.3.bb b/packages/opie-networksettings/opie-networksettings_1.2.3.bb
new file mode 100644
index 0000000000..e5981ed121
--- /dev/null
+++ b/packages/opie-networksettings/opie-networksettings_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/networksettings \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/root \
+ "
diff --git a/packages/opie-networksettings/opie-networksettings_cvs.bb b/packages/opie-networksettings/opie-networksettings_cvs.bb
index 47eecac791..423037e7cf 100644
--- a/packages/opie-networksettings/opie-networksettings_cvs.bb
+++ b/packages/opie-networksettings/opie-networksettings_cvs.bb
@@ -1,8 +1,10 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/settings/networksettings \
${HANDHELDS_CVS};module=opie/pics \
${HANDHELDS_CVS};module=opie/apps \
- ${HANDHELDS_CVS};module=opie/root"
+ ${HANDHELDS_CVS};module=opie/root \
+ "
diff --git a/packages/opie-notesapplet/opie-notesapplet_1.2.3.bb b/packages/opie-notesapplet/opie-notesapplet_1.2.3.bb
new file mode 100644
index 0000000000..4bfd335611
--- /dev/null
+++ b/packages/opie-notesapplet/opie-notesapplet_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/notesapplet"
diff --git a/packages/opie-odict/opie-odict_1.2.3.bb b/packages/opie-odict/opie-odict_1.2.3.bb
new file mode 100644
index 0000000000..27dd17dd3d
--- /dev/null
+++ b/packages/opie-odict/opie-odict_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/odict \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-oxygen/opie-oxygen.inc b/packages/opie-oxygen/opie-oxygen.inc
index 095f71518b..dbd238f1fa 100644
--- a/packages/opie-oxygen/opie-oxygen.inc
+++ b/packages/opie-oxygen/opie-oxygen.inc
@@ -1,4 +1,4 @@
-DESCRIPTION = "Opie Oxygen"
+DESCRIPTION = "Opie Oxygen - Periodic table of elements (Chemistry)"
SECTION = "opie/applications"
PRIORITY = "optional"
LICENSE = "GPL"
diff --git a/packages/opie-oxygen/opie-oxygen_1.2.3.bb b/packages/opie-oxygen/opie-oxygen_1.2.3.bb
new file mode 100644
index 0000000000..0c32e244dc
--- /dev/null
+++ b/packages/opie-oxygen/opie-oxygen_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-oyatzee/opie-oyatzee_1.2.3.bb b/packages/opie-oyatzee/opie-oyatzee_1.2.3.bb
new file mode 100644
index 0000000000..f1063ac6b8
--- /dev/null
+++ b/packages/opie-oyatzee/opie-oyatzee_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/oyatzee \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-packagemanager/opie-packagemanager_1.2.3.bb b/packages/opie-packagemanager/opie-packagemanager_1.2.3.bb
new file mode 100644
index 0000000000..0b8f44981d
--- /dev/null
+++ b/packages/opie-packagemanager/opie-packagemanager_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/${APPNAME};cvsdate=${SRCDATE} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics;cvsdate=${SRCDATE} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-parashoot/opie-parashoot_1.2.3.bb b/packages/opie-parashoot/opie-parashoot_1.2.3.bb
new file mode 100644
index 0000000000..bf7f592bd8
--- /dev/null
+++ b/packages/opie-parashoot/opie-parashoot_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/parashoot \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-pcmciaapplet/opie-pcmciaapplet.inc b/packages/opie-pcmciaapplet/opie-pcmciaapplet.inc
index 11b93eed0f..6ed1908029 100644
--- a/packages/opie-pcmciaapplet/opie-pcmciaapplet.inc
+++ b/packages/opie-pcmciaapplet/opie-pcmciaapplet.inc
@@ -12,7 +12,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -21,7 +21,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
}
do_install() {
diff --git a/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.3.bb b/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.3.bb
new file mode 100644
index 0000000000..90cd3bc08d
--- /dev/null
+++ b/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/pcmcia \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-pcmciaapplet/opie-pcmciaapplet_cvs.bb b/packages/opie-pcmciaapplet/opie-pcmciaapplet_cvs.bb
index ec2bc0230e..eb0976f8d0 100644
--- a/packages/opie-pcmciaapplet/opie-pcmciaapplet_cvs.bb
+++ b/packages/opie-pcmciaapplet/opie-pcmciaapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/pcmcia \
${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/opie-pickboard/opie-pickboard.inc b/packages/opie-pickboard/opie-pickboard.inc
index 37866ceef1..2b81a50104 100644
--- a/packages/opie-pickboard/opie-pickboard.inc
+++ b/packages/opie-pickboard/opie-pickboard.inc
@@ -12,7 +12,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -21,7 +21,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
diff --git a/packages/opie-pickboard/opie-pickboard_1.2.3.bb b/packages/opie-pickboard/opie-pickboard_1.2.3.bb
new file mode 100644
index 0000000000..6640c1236f
--- /dev/null
+++ b/packages/opie-pickboard/opie-pickboard_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/pickboard"
diff --git a/packages/opie-pickboard/opie-pickboard_cvs.bb b/packages/opie-pickboard/opie-pickboard_cvs.bb
index 4f778f135d..368f265e95 100644
--- a/packages/opie-pickboard/opie-pickboard_cvs.bb
+++ b/packages/opie-pickboard/opie-pickboard_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/pickboard"
diff --git a/packages/opie-pics/opie-pics_1.2.3.bb b/packages/opie-pics/opie-pics_1.2.3.bb
new file mode 100644
index 0000000000..5ca408ea5e
--- /dev/null
+++ b/packages/opie-pics/opie-pics_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics-hires"
diff --git a/packages/opie-pimconverter/opie-pimconverter_1.2.3.bb b/packages/opie-pimconverter/opie-pimconverter_1.2.3.bb
new file mode 100644
index 0000000000..a0638649fc
--- /dev/null
+++ b/packages/opie-pimconverter/opie-pimconverter_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/pimconverter \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-powerchord/opie-powerchord_1.2.3.bb b/packages/opie-powerchord/opie-powerchord_1.2.3.bb
new file mode 100644
index 0000000000..1fbe81ef71
--- /dev/null
+++ b/packages/opie-powerchord/opie-powerchord_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/multimedia/powerchord \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.3.bb b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.3.bb
new file mode 100644
index 0000000000..56fe35ce52
--- /dev/null
+++ b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/pyquicklaunch \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-qasteroids/opie-qasteroids_1.2.3.bb b/packages/opie-qasteroids/opie-qasteroids_1.2.3.bb
new file mode 100644
index 0000000000..3af3240239
--- /dev/null
+++ b/packages/opie-qasteroids/opie-qasteroids_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/qasteroids \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-qcop/files/.mtn2git_empty b/packages/opie-qcop/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-qcop/files/.mtn2git_empty
diff --git a/packages/opie-qcop/files/unbreak-logging.patch b/packages/opie-qcop/files/unbreak-logging.patch
new file mode 100644
index 0000000000..d2b5228b26
--- /dev/null
+++ b/packages/opie-qcop/files/unbreak-logging.patch
@@ -0,0 +1,16 @@
+Index: opie/core/apps/qcop/qcopimpl.cpp
+===================================================================
+RCS file: /cvs/opie/core/apps/qcop/qcopimpl.cpp,v
+retrieving revision 1.2
+diff -u -r1.2 qcopimpl.cpp
+--- qcop/qcopimpl.cpp 2 Mar 2005 19:23:54 -0000 1.2
++++ qcop/qcopimpl.cpp 3 May 2007 03:09:36 -0000
+@@ -46,7 +46,7 @@
+
+ int doqcopimpl (int argc, char *argv[])
+ {
+- qInstallMsgHandler( disableqdebug );
++ //qInstallMsgHandler( disableqdebug );
+
+ if ( argc > 1 ) {
+ QString opt = argv[1];
diff --git a/packages/opie-qcop/opie-qcop.inc b/packages/opie-qcop/opie-qcop.inc
index 8c3632877d..b9b0309913 100644
--- a/packages/opie-qcop/opie-qcop.inc
+++ b/packages/opie-qcop/opie-qcop.inc
@@ -8,6 +8,6 @@ S = "${WORKDIR}/qcop"
inherit opie
do_install() {
- install -d ${D}${palmtopdir}/bin/
- install -m 0755 ${S}/qcop ${D}${palmtopdir}/bin/qcop
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/qcop ${D}${bindir}/qcop
}
diff --git a/packages/opie-qcop/opie-qcop_1.2.3.bb b/packages/opie-qcop/opie-qcop_1.2.3.bb
new file mode 100644
index 0000000000..c62004a1db
--- /dev/null
+++ b/packages/opie-qcop/opie-qcop_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/qcop \
+ file://unbreak-logging.patch;patch=1"
diff --git a/packages/opie-qcop/opie-qcop_cvs.bb b/packages/opie-qcop/opie-qcop_cvs.bb
index 13f2a817d0..01a1d1b407 100644
--- a/packages/opie-qcop/opie-qcop_cvs.bb
+++ b/packages/opie-qcop/opie-qcop_cvs.bb
@@ -1,5 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r3"
-SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/qcop"
+SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/qcop \
+ file://unbreak-logging.patch;patch=1"
diff --git a/packages/opie-qss/opie-qss.inc b/packages/opie-qss/opie-qss.inc
index 10abdf20ea..1e7ea3afde 100644
--- a/packages/opie-qss/opie-qss.inc
+++ b/packages/opie-qss/opie-qss.inc
@@ -8,6 +8,6 @@ S = "${WORKDIR}/qss"
inherit opie
do_install() {
- install -d ${D}${palmtopdir}/bin/
- install -m 0755 ${S}/qss ${D}${palmtopdir}/bin/qss
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/qss ${D}${bindir}/qss
}
diff --git a/packages/opie-qss/opie-qss_1.2.3.bb b/packages/opie-qss/opie-qss_1.2.3.bb
new file mode 100644
index 0000000000..df7158b084
--- /dev/null
+++ b/packages/opie-qss/opie-qss_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/qss"
diff --git a/packages/opie-qss/opie-qss_cvs.bb b/packages/opie-qss/opie-qss_cvs.bb
index 765849976e..915fefafc0 100644
--- a/packages/opie-qss/opie-qss_cvs.bb
+++ b/packages/opie-qss/opie-qss_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/qss"
diff --git a/packages/opie-quicklauncher/opie-quicklauncher.inc b/packages/opie-quicklauncher/opie-quicklauncher.inc
index d445f6993d..e20572838a 100644
--- a/packages/opie-quicklauncher/opie-quicklauncher.inc
+++ b/packages/opie-quicklauncher/opie-quicklauncher.inc
@@ -8,7 +8,6 @@ S = "${WORKDIR}/quicklauncher"
inherit opie
do_install() {
- install -d ${D}${palmtopdir}/bin/
- install -m 755 quicklauncher ${D}${palmtopdir}/bin/
-
+ install -d ${D}${bindir}
+ install -m 755 quicklauncher ${D}${bindir}/
}
diff --git a/packages/opie-quicklauncher/opie-quicklauncher_1.2.3.bb b/packages/opie-quicklauncher/opie-quicklauncher_1.2.3.bb
new file mode 100644
index 0000000000..930c08a2f3
--- /dev/null
+++ b/packages/opie-quicklauncher/opie-quicklauncher_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/tools/quicklauncher"
diff --git a/packages/opie-quicklauncher/opie-quicklauncher_cvs.bb b/packages/opie-quicklauncher/opie-quicklauncher_cvs.bb
index 992279d24a..4255a2bf0a 100644
--- a/packages/opie-quicklauncher/opie-quicklauncher_cvs.bb
+++ b/packages/opie-quicklauncher/opie-quicklauncher_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/tools/quicklauncher"
diff --git a/packages/opie-rdesktop/opie-rdesktop_1.2.3.bb b/packages/opie-rdesktop/opie-rdesktop_1.2.3.bb
new file mode 100644
index 0000000000..8bf2649e72
--- /dev/null
+++ b/packages/opie-rdesktop/opie-rdesktop_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opierdesktop \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-reader/files/.mtn2git_empty b/packages/opie-reader/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-reader/files/.mtn2git_empty
diff --git a/packages/opie-reader/files/qt4.patch b/packages/opie-reader/files/qt4.patch
new file mode 100644
index 0000000000..f19000f12f
--- /dev/null
+++ b/packages/opie-reader/files/qt4.patch
@@ -0,0 +1,2572 @@
+diff --git a/Aportis.cpp b/Aportis.cpp
+index 37dcc99..03c26ea 100644
+--- a/Aportis.cpp
++++ b/Aportis.cpp
+@@ -443,8 +443,7 @@ unsuspend();
+ gotorecordnumber(tgtrec);
+ UInt8* imgbuffer = new UInt8[reclen];
+ fread(imgbuffer, 1, reclen, fin);
+- QByteArray arr;
+- arr.assign((const char*)imgbuffer, reclen);
++ QByteArray arr((const char*)imgbuffer, reclen);
+
+ QImage* qimage = new QImage(arr);
+ fseek(fin, cur, SEEK_SET);
+diff --git a/Bkmks.cpp b/Bkmks.cpp
+index 45aa045..c67db9e 100644
+--- a/Bkmks.cpp
++++ b/Bkmks.cpp
+@@ -32,8 +32,7 @@ Bkmk::Bkmk(const Bkmk& rhs) :
+ m_annolen(0),
+ m_position(0)
+ {
+- init(rhs.name(), sizeof(tchar)*(ustrlen(rhs.name())+1), rhs.anno(),
+- sizeof(tchar)*(ustrlen(rhs.anno())+1), rhs.value());
++ *this = rhs;
+ }
+
+ Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p)
+diff --git a/BuffDoc.cpp b/BuffDoc.cpp
+index 355d14d..170ed43 100644
+--- a/BuffDoc.cpp
++++ b/BuffDoc.cpp
+@@ -23,6 +23,8 @@
+ #include "Reb.h"
+ #endif
+
++#include "uqtcommon.h"
++
+
+ linkType BuffDoc::hyperlink(unsigned int n, unsigned int noff, QString& wrd, QString& nm)
+ {
+@@ -674,35 +676,19 @@ int BuffDoc::openfile(QWidget* _parent, const char *src)
+ }
+ // //qDebug("Doing final open:%x:%x",exp,filt);
+ #else
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString codecpath(getenv("OPIEDIR"));
+-#else
+- QString codecpath(getenv("QTDIR"));
+-#endif
+- codecpath += "/plugins/reader/codecs";
+-#else
+- QString codecpath(getenv("READERDIR"));
+- codecpath += "/codecs";
+-#endif
+- QDir d(codecpath, "*.so");
++ QDir d(uqt_codecspath(), "*.so");
+
+ if (d.exists())
+ {
+
+- const QFileInfoList *list = d.entryInfoList();
+- QFileInfoListIterator it( *list ); // create list iterator
+- QFileInfo *fi; // pointer for traversing
+-
++ QFileInfoList list = d.entryInfoList();
+ int ret = -1;
+- while ( ret != 0 && (fi=it.current()) )
+- { // for each file...
++ for(QFileInfoListIterator it=list.begin();ret && it!=list.end();++it) {
+ if (exp != NULL) delete exp;
+- qDebug("Trying %s", (const char*)fi->fileName());
+- exp = new ebookcodec(fi->fileName());
++ qDebug("Trying %s", (const char*)it->fileName());
++ exp = new ebookcodec(it->fileName());
+ ret = exp->openfile(src);
+- ++it;
+- }
++ }
+ qDebug("Buffdoc:Finished opening");
+ if (ret != 0)
+ {
+diff --git a/ButtonPrefs.cpp b/ButtonPrefs.cpp
+index 762de55..2c4cad7 100644
+--- a/ButtonPrefs.cpp
++++ b/ButtonPrefs.cpp
+@@ -17,7 +17,7 @@
+ #include <qtooltip.h>
+ #include <qwhatsthis.h>
+ #include <qbuttongroup.h>
+-#include <qmultilineedit.h>
++#include <Qt3Support/Q3MultiLineEdit>
+ #ifdef USECOMBO
+ #include <qcombobox.h>
+ #else
+@@ -26,12 +26,14 @@
+ #include <qfontdatabase.h>
+
+ #include <qlistview.h>
++#include <Qt3Support/Q3ListViewItem>
++#include <QtGui/QKeyEvent>
+
+-class MyQListViewItem : public QListViewItem
++class MyQListViewItem : public Q3ListViewItem
+ {
+ orKey o;
+ public:
+- MyQListViewItem(const orKey& _o, QListView* p, const QString& c1, const QString& c2, const QString& c3) : QListViewItem(p, c1, c2, c3), o(_o) { }
++ MyQListViewItem(const orKey& _o, Q3ListView* p, const QString& c1, const QString& c2, const QString& c3) : Q3ListViewItem(p, c1, c2, c3), o(_o) { }
+ orKey getKey() { return o; }
+ };
+
+@@ -43,7 +45,7 @@ void CButtonPrefs::mapkey(Qt::ButtonState st, int _key)
+ void CButtonPrefs::mapkey(Qt::ButtonState st, int _key, int act)
+ {
+ orKey key(st, _key, ((act == cesScrollMore) || (act == cesScrollLess)));
+- QMap<orKey,QListViewItem*>::Iterator iter = listmap.find(key);
++ QMap<orKey,Q3ListViewItem*>::Iterator iter = listmap.find(key);
+ if (iter != listmap.end())
+ {
+ lb->takeItem(iter.data());
+@@ -112,7 +114,7 @@ CButtonPrefs::CButtonPrefs( QMap<orKey, int>* _kmap, QWidget* parent, const cha
+ {
+ QVBoxLayout* vo = new QVBoxLayout(this);
+ QHBoxLayout* lo = new QHBoxLayout();
+- setFocusPolicy(QWidget::StrongFocus);
++ setFocusPolicy(Qt::StrongFocus);
+ #ifdef USECOMBO
+ action = new QComboBox( this );
+ #else
+@@ -123,17 +125,17 @@ CButtonPrefs::CButtonPrefs( QMap<orKey, int>* _kmap, QWidget* parent, const cha
+
+
+
+- QMultiLineEdit* TextLabel1 = new QMultiLineEdit( this );
++ Q3MultiLineEdit* TextLabel1 = new Q3MultiLineEdit( this );
+ TextLabel1->setText( tr( "Press the key(s) you want assigned to the highlighted function.\n\nPress the delete button to unmap the key.\n\nUse the \"Close\" button (not the [x]) to finish." ) );
+ TextLabel1->setReadOnly(true);
+- TextLabel1->setWordWrap(QMultiLineEdit::WidgetWidth);
++ TextLabel1->setWordWrap(Q3MultiLineEdit::WidgetWidth);
+
+ // lo->addWidget(TextLabel, 0, Qt::AlignTop);
+ // lo->addWidget(action, 0, Qt::AlignTop);
+ lo->addWidget(TextLabel1);
+ lo->addWidget(action);
+ vo->addLayout(lo);
+- lb = new QListView(this);
++ lb = new Q3ListView(this);
+ lb->addColumn( tr( "Key" ) );
+ lb->addColumn( tr( "Function" ) );
+ lb->addColumn( tr( "Scroll" ) );
+diff --git a/ButtonPrefs.h b/ButtonPrefs.h
+index 9af04e1..f09ad02 100644
+--- a/ButtonPrefs.h
++++ b/ButtonPrefs.h
+@@ -11,11 +11,13 @@
+
+ #include <qvariant.h>
+ #include <qwidget.h>
+-#include <qtabdialog.h>
++#include <Qt3Support/Q3TabDialog>
+ #include <qtabwidget.h>
+ #include <qspinbox.h>
+ #include <qcheckbox.h>
+ #include <qlineedit.h>
++#include <qnamespace.h>
++using namespace Qt;
+
+ #define USECOMBO
+
+@@ -33,18 +35,18 @@ class QGridLayout;
+ //class QCheckBox;
+ class QLabel;
+ //class QSpinBox;
+-class QListViewItem;
++class Q3ListViewItem;
+
+-class QListView;
+-class QListViewItem;
++class Q3ListView;
++class Q3ListViewItem;
+
+ class CButtonPrefs : public QWidget
+ {
+ Q_OBJECT
+
+ QMap<orKey, int> *kmap;
+- QMap<orKey, QListViewItem*> listmap;
+- QListView* lb;
++ QMap<orKey, Q3ListViewItem*> listmap;
++ Q3ListView* lb;
+ void keyPressEvent(QKeyEvent* e);
+ #ifdef USECOMBO
+ void populate(QComboBox*);
+diff --git a/CAnnoEdit.cpp b/CAnnoEdit.cpp
+index 35821ed..6ee1321 100644
+--- a/CAnnoEdit.cpp
++++ b/CAnnoEdit.cpp
+@@ -83,8 +83,8 @@ CAnnoEdit::CAnnoEdit(QWidget *parent, const char *name, WFlags f) :
+ {
+ QVBoxLayout* grid = new QVBoxLayout(this);
+ m_name = new QLineEdit(this, "Name");
+- m_anno = new QMultiLineEdit(this, "Annotation");
+- m_anno->setWordWrap(QMultiLineEdit::WidgetWidth);
++ m_anno = new Q3MultiLineEdit(this, "Annotation");
++ m_anno->setWordWrap(Q3MultiLineEdit::WidgetWidth);
+ QPushButton* exitButton = new QPushButton("Okay", this);
+ connect(exitButton, SIGNAL( clicked() ), this, SLOT( slotOkay() ) );
+ QPushButton* cancelButton = new QPushButton("Cancel", this);
+diff --git a/CAnnoEdit.h b/CAnnoEdit.h
+index 78d3eeb..c74c560 100644
+--- a/CAnnoEdit.h
++++ b/CAnnoEdit.h
+@@ -4,15 +4,17 @@
+ #include <qlayout.h>
+ #include <qpushbutton.h>
+ #include <qlineedit.h>
+-#include <qmultilineedit.h>
++#include <Qt3Support/Q3MultiLineEdit>
+ #include <qcombobox.h>
++#include <qnamespace.h>
++using namespace Qt;
+
+ class CAnnoEdit : public QWidget
+ {
+ Q_OBJECT
+
+ QLineEdit* m_name;
+- QMultiLineEdit* m_anno;
++ Q3MultiLineEdit* m_anno;
+ size_t m_posn, m_posn2;
+ QComboBox* colorbox;
+ public:
+diff --git a/CFilter.cpp b/CFilter.cpp
+index a4ea60a..84fa451 100644
+--- a/CFilter.cpp
++++ b/CFilter.cpp
+@@ -9,6 +9,7 @@
+ #include "CDrawBuffer.h"
+ #include "CFilter.h"
+ #include "hrule.h"
++#include "uqtcommon.h"
+
+ #include <qregexp.h>
+ #include <qimage.h>
+@@ -665,17 +666,8 @@ class ErrorFilter : public CFilter
+ #ifndef __STATIC
+ ExternFilter::ExternFilter(const QString& nm, const QString& optional) : filt(NULL), handle(NULL)
+ {
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString filterpath(getenv("OPIEDIR"));
+-#else
+- QString filterpath(getenv("QTDIR"));
+-#endif
+- filterpath += "/plugins/reader/filters/lib";
+-#else
+- QString filterpath(getenv("READERDIR"));
+- filterpath += "/filters/lib";
+-#endif
++ QString filterpath = uqt_filterspath();
++ filterpath += "lib";
+ filterpath += nm;
+ filterpath += ".so";
+ if (QFile::exists(filterpath))
+diff --git a/CHM.cpp b/CHM.cpp
+index ace5abc..3c325bb 100644
+--- a/CHM.cpp
++++ b/CHM.cpp
+@@ -335,7 +335,7 @@ int CHM::getch() {
+ #else
+ QChar letter = chmBuffer[bufpos++];
+ #endif
+- return (int)(char)letter;
++ return letter.unicode();
+ }
+
+ void CHM::getch(tchar& ch, CStyle& sty)
+diff --git a/CloseDialog.cpp b/CloseDialog.cpp
+index 741fa67..62ae906 100644
+--- a/CloseDialog.cpp
++++ b/CloseDialog.cpp
+@@ -5,7 +5,7 @@ CCloseDialog::CCloseDialog(const QString& fname, bool fs, QWidget* parent, const
+ {
+ setCaption(tr("Tidy-up"));
+ QVBoxLayout *tmp = new QVBoxLayout(this);
+- QVButtonGroup* vb = new QVButtonGroup(tr("Delete"), this);
++ Q3VButtonGroup* vb = new Q3VButtonGroup(tr("Delete"), this);
+ tmp->addWidget(vb);
+ QString filestring = tr("Delete") + " " + fname;
+ file = new QCheckBox(filestring, vb);
+diff --git a/CloseDialog.h b/CloseDialog.h
+index 54aaf1c..84609f5 100644
+--- a/CloseDialog.h
++++ b/CloseDialog.h
+@@ -11,14 +11,17 @@
+
+ #include <qvariant.h>
+ #include <qwidget.h>
+-#include <qtabdialog.h>
++#include <Qt3Support/Q3TabDialog>
+ #include <qtabwidget.h>
+ #include <qspinbox.h>
+ #include <qcheckbox.h>
+ #include <qcombobox.h>
+ #include <qlineedit.h>
+ //#include <qpe/menubutton.h>
+-#include <qvbuttongroup.h>
++#include <Qt3Support/Q3VButtonGroup>
++#include <QtGui/QKeyEvent>
++#include <qnamespace.h>
++using namespace Qt;
+
+ class QVBoxLayout;
+ class QHBoxLayout;
+diff --git a/FontControl.cpp b/FontControl.cpp
+index 08b8c52..0be54ba 100644
+--- a/FontControl.cpp
++++ b/FontControl.cpp
+@@ -1,4 +1,5 @@
+ #include <qfontdatabase.h>
++#include <Qt3Support/Q3ValueList>
+
+ #include "FontControl.h"
+
+@@ -33,9 +34,9 @@ int FontControl::gzoom()
+
+ bool FontControl::ChangeFont(QString& n, int tgt)
+ {
+- QValueList<int>::Iterator it;
++ Q3ValueList<int>::Iterator it;
+ QFontDatabase fdb;
+- QValueList<int> sizes = fdb.pointSizes(n);
++ Q3ValueList<int> sizes = fdb.pointSizes(n);
+ if (sizes.count() == 0)
+ {
+ return false;
+@@ -65,3 +66,25 @@ bool FontControl::ChangeFont(QString& n, int tgt)
+ }
+ return true;
+ }
++
++void FontControl::setCourier() {
++ setCourier(m_fontname);
++}
++void FontControl::setCourier(const QString fn) {
++ QFontDatabase fdb;
++ QStringList fl = fdb.families();
++ setCourier(fn,fl);
++}
++void FontControl::setCourier(const QString fn,const QStringList fl) {
++ QString fp;
++ int sp = fn.indexOf(' ');
++ if(sp>=0) fp = fn.left(sp);
++ for(QStringList::const_iterator i=fl.begin();i!=fl.end();++i) {
++ if(
++ ( i->startsWith(fn,Qt::CaseInsensitive)
++ || ( (!fp.isEmpty()) && i->startsWith(fp,Qt::CaseInsensitive) ) )
++ && ( i->endsWith("mono",Qt::CaseInsensitive)
++ || i->endsWith("Fixed") ) )
++ hasCourier(true,*i);
++ }
++}
+diff --git a/FontControl.h b/FontControl.h
+index 563e1a8..c7a54ab 100644
+--- a/FontControl.h
++++ b/FontControl.h
+@@ -2,6 +2,7 @@
+ #define __FONTCONTROL_H
+
+ #include <qfontmetrics.h>
++#include <QFontDatabase>
+ #include "StyleConsts.h"
+
+ class FontControl
+@@ -32,6 +33,7 @@ class FontControl
+ m_fontsizes(NULL), m_hasCourier(false), m_leading(0), m_extraspace(0), m_fixgraphics(true)
+ {
+ ChangeFont(n, size);
++ setCourier();
+ }
+ ~FontControl()
+ {
+@@ -167,6 +169,10 @@ class FontControl
+ {
+ return m_extraspace;
+ }
++
++ void setCourier();
++ void setCourier(const QString fn);
++ void setCourier(const QString fn,const QStringList fl);
+ };
+
+ #endif
+diff --git a/GraphicWin.h b/GraphicWin.h
+index 70d5f7e..a6c556a 100644
+--- a/GraphicWin.h
++++ b/GraphicWin.h
+@@ -1,14 +1,16 @@
+ #ifndef __GRAPHICWIN_H
+ #define __GRAPHICWIN_H
+
+-#include <qscrollview.h>
++#include <Qt3Support/Q3ScrollView>
+ #include <qpixmap.h>
+ #include <qimage.h>
+ #include <qpushbutton.h>
+ #include <qlayout.h>
+ #include <qwmatrix.h>
++#include <qnamespace.h>
++using namespace Qt;
+
+-class GraphicScroll : public QScrollView
++class GraphicScroll : public Q3ScrollView
+ {
+ Q_OBJECT
+ QWidget* m_picture;
+@@ -19,7 +21,7 @@ class GraphicScroll : public QScrollView
+ }
+ public:
+ GraphicScroll( QWidget *parent=0, const char *name=0, WFlags f = 0)
+- : QScrollView(parent, name, f)
++ : Q3ScrollView(parent, name, f)
+ {
+ m_picture = new QWidget(viewport());
+ addChild(m_picture);
+diff --git a/Prefs.cpp b/Prefs.cpp
+index 6c4d45b..d20dc00 100644
+--- a/Prefs.cpp
++++ b/Prefs.cpp
+@@ -7,6 +7,7 @@
+ ** WARNING! All changes made in this file will be lost!
+ ****************************************************************************/
+ #include "Prefs.h"
++#include "uqtcommon.h"
+
+ #include <stdlib.h>
+
+@@ -27,6 +28,7 @@
+ #include <qpe/menubutton.h>
+ #endif
+ #include <qfontdatabase.h>
++#include <Qt3Support/Q3ButtonGroup>
+
+ #ifdef USECOMBO
+ void populate_colours(QComboBox *mb)
+@@ -58,7 +60,7 @@ CLayoutPrefs::CLayoutPrefs( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+ {
+ QHBoxLayout* hb = new QHBoxLayout(this);
+- QButtonGroup* bg = new QButtonGroup(2, Qt::Horizontal, "Text", this);
++ Q3ButtonGroup* bg = new Q3ButtonGroup(2, Qt::Horizontal, "Text", this);
+ hb->addWidget(bg);
+
+ StripCR = new QCheckBox( bg );
+@@ -592,7 +594,7 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl )
+ vl->setMargin( 0 );
+ hl->setMargin( 0 );
+
+- QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, "Select Action", this);
++ Q3GroupBox* gb = new Q3GroupBox(1, Qt::Horizontal, "Select Action", this);
+ hl->addWidget( gb );
+
+ annotation = new QCheckBox( gb );
+@@ -607,7 +609,7 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl )
+ boutput = new QCheckBox( gb );
+ boutput->setText( tr( "Output" ) );
+
+- QButtonGroup* bg = new QButtonGroup(1, Qt::Horizontal, "Plucker", this);
++ Q3ButtonGroup* bg = new Q3ButtonGroup(1, Qt::Horizontal, "Plucker", this);
+ hl->addWidget( bg );
+
+ Depluck = new QCheckBox( bg );
+@@ -618,7 +620,7 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl )
+
+ Continuous = new QCheckBox( bg );
+ Continuous->setText( tr( "Continuous" ) );
+- bg = new QButtonGroup(2, Qt::Horizontal, "Background", this);
++ bg = new Q3ButtonGroup(2, Qt::Horizontal, "Background", this);
+ vl->addWidget( bg );
+
+ // QLabel* TextLabel = new QLabel( bg );
+@@ -662,7 +664,7 @@ CScrollPrefs::CScrollPrefs( QWidget* parent, const char* name, WFlags fl )
+
+ hl->setMargin( 0 );
+
+- QButtonGroup* bg = new QButtonGroup(2, Qt::Horizontal, "Scroll", this);
++ Q3ButtonGroup* bg = new Q3ButtonGroup(2, Qt::Horizontal, "Scroll", this);
+ hl->addWidget( bg );
+
+ // scrollinplace = new QCheckBox( bg );
+@@ -707,18 +709,8 @@ CScrollPrefs::CScrollPrefs( QWidget* parent, const char* name, WFlags fl )
+ #else
+ outcodec = new MenuButton( this);
+ #endif
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString codecpath(getenv("OPIEDIR"));
+-#else
+- QString codecpath(getenv("QTDIR"));
+-#endif
+- codecpath += "/plugins/reader/outcodecs";
+-#else
+- QString codecpath(getenv("READERDIR"));
+- codecpath += "/outcodecs";
+-#endif
+- QDir ocd(codecpath, "lib*.so");
++ QString codecpath = uqt_outcodecspath();
++ QDir ocd(uqt_outcodecspath(), "lib*.so");
+ for (int i = 0; i < ocd.count(); ++i)
+ {
+ QString tmp(ocd[i]);
+@@ -772,7 +764,7 @@ CInterPrefs::CInterPrefs( QWidget* parent, const char* name, WFlags fl )
+ {
+ QHBoxLayout* hb = new QHBoxLayout(this);
+
+- QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, tr("International"), this);
++ Q3GroupBox* gb = new Q3GroupBox(1, Qt::Horizontal, tr("International"), this);
+
+ hb->addWidget(gb);
+
+@@ -784,7 +776,7 @@ CInterPrefs::CInterPrefs( QWidget* parent, const char* name, WFlags fl )
+ TextLabel = new QLabel( gb );
+ TextLabel->setText( tr( "Ideogram Width" ) );
+ ideogramwidth = new QSpinBox( gb );
+- ideogramwidth->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
++ // ideogramwidth->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ ideogramwidth->setRange(1,200);
+
+ propfontchange = new QCheckBox( gb );
+@@ -809,7 +801,7 @@ CInterPrefs::CInterPrefs( QWidget* parent, const char* name, WFlags fl )
+
+ QVBoxLayout* vb = new QVBoxLayout;
+
+- gb = new QGroupBox(1, Qt::Horizontal, "Dictionary", this);
++ gb = new Q3GroupBox(1, Qt::Horizontal, "Dictionary", this);
+
+ TextLabel = new QLabel( gb );
+ TextLabel->setText( tr( "Application" ) );
+diff --git a/Prefs.h b/Prefs.h
+index 103484e..a499506 100644
+--- a/Prefs.h
++++ b/Prefs.h
+@@ -11,11 +11,14 @@
+
+ #include <qvariant.h>
+ #include <qwidget.h>
+-#include <qtabdialog.h>
++#include <Qt3Support/Q3TabDialog>
+ #include <qtabwidget.h>
+ #include <qspinbox.h>
+ #include <qcheckbox.h>
+ #include <qlineedit.h>
++#include <qnamespace.h>
++using namespace Qt;
++#include <QtGui/QKeyEvent>
+
+ #define USECOMBO
+
+diff --git a/QFloatBar.h b/QFloatBar.h
+index cc98233..0144fce 100644
+--- a/QFloatBar.h
++++ b/QFloatBar.h
+@@ -1,10 +1,11 @@
+ #ifndef __QFLOATBAR_H
+ #define __QFLOATBAR_H
+
+-#include <qtoolbar.h>
+-#include <qmainwindow.h>
++#include <Qt3Support/Q3ToolBar>
++#include <Qt3Support/Q3MainWindow>
++#include <qnamespace.h>
+
+-class QFloatBar : public QToolBar
++class QFloatBar : public Q3ToolBar
+ {
+ Q_OBJECT
+ virtual void hideEvent(QHideEvent* e)
+@@ -12,7 +13,7 @@ class QFloatBar : public QToolBar
+ /*if (e->spontaneous())*/ emit OnHide();
+ }
+ public:
+- QFloatBar(char* t, QMainWindow* mw, QMainWindow::ToolBarDock td, bool f) : QToolBar(t, mw, td, f) {}
++ QFloatBar(char* t, Q3MainWindow* mw, Qt::ToolBarDock td, bool f) : Q3ToolBar(t, mw, td, f) {}
+ signals:
+ void OnHide();
+ };
+diff --git a/QTReader.cpp b/QTReader.cpp
+index 75da8ac..2c698ba 100644
+--- a/QTReader.cpp
++++ b/QTReader.cpp
+@@ -1999,6 +1999,7 @@ void QTReader::drawFonts()
+ }
+ }
+ emitRedraw();
++ update();
+ }
+ /*
+ else
+@@ -2221,7 +2222,7 @@ void QTReader::init()
+ setBackgroundColor( m_bg );
+ buffdoc.setfilter(getfilter());
+ ChangeFont(m_textsize);
+- setFocusPolicy(QWidget::StrongFocus);
++ setFocusPolicy(Qt::StrongFocus);
+ timer = new QTimer(this);
+ connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
+ #ifdef USETIMER
+@@ -3096,7 +3097,7 @@ void QTReader::blitRot(int dx, int dy, int sw, int sh, CDrawBuffer* txt)
+
+ QPixmap pm(sw, sh);
+
+- QPainter pd(&pm, this);
++ QPainter pd(&pm); // , this);
+ if (m_bgpm.isNull())
+ {
+ pd.eraseRect(pm.rect());
+@@ -3136,7 +3137,7 @@ void QTReader::blitRot(int dx, int dy, int sw, int sh, CDrawBuffer* txt)
+ /*
+ p.drawPixmap(QPoint(dx, dy), rp);
+ */
+- bitBlt(this, dx, dy, &rp, 0, 0, -1, -1, CopyROP);
++ bitBlt(this, dx, dy, &rp, 0, 0, -1, -1, QPainter::CompositionMode_Source);
+ }
+
+ QString QTReader::about()
+diff --git a/QTReader.h b/QTReader.h
+index 9daa07a..6afa3e7 100644
+--- a/QTReader.h
++++ b/QTReader.h
+@@ -8,6 +8,9 @@
+ #include "BuffDoc.h"
+ #include "FontControl.h"
+
++#include <qnamespace.h>
++using namespace Qt;
++
+ //#include <qtimer.h>
+
+ class CDrawBuffer;
+diff --git a/QTReaderApp.cpp b/QTReaderApp.cpp
+index b985094..529ec9e 100644
+--- a/QTReaderApp.cpp
++++ b/QTReaderApp.cpp
+@@ -20,7 +20,9 @@
+
+ #include <qregexp.h>
+ #include <qclipboard.h>
+-#include <qwidgetstack.h>
++#include <QStackedWidget>
++#include <Qt3Support/Q3Action>
++#include <qdesktopwidget.h>
+ #ifdef USEQPE
+ #include <qpe/qpemenubar.h>
+ #include <qpe/qpetoolbar.h>
+@@ -31,13 +33,12 @@
+ #include <qpe/menubutton.h>
+ #endif
+ #include <qcombobox.h>
+-#include <qpopupmenu.h>
++#include <Qt3Support/Q3PopupMenu>
+ #include <qaction.h>
+ #include <qapplication.h>
+ #include <qlineedit.h>
+ #include <qtoolbutton.h>
+ #include <qspinbox.h>
+-#include <qobjectlist.h>
+ #include <qstatusbar.h>
+ #ifdef USEQPE
+ #include <qpe/global.h>
+@@ -66,6 +67,7 @@
+ #include "FixedFont.h"
+ #include "URLDialog.h"
+ #include "util.h"
++#include "uqtcommon.h"
+ #include <qfontdatabase.h>
+
+ #ifdef USEQPE
+@@ -103,18 +105,10 @@ bool CheckVersion(int&, int&, char&, QWidget*);
+ #define USEMSGS
+ #define PICDIR "opie-reader/"
+ #else
+-//#define PICDIR "/home/tim/uqtreader/pics/"
+-QString picdir()
+-{
+- QString hd(getenv("READERDIR"));
+- return hd + "/pics";
+-}
+-#define PICDIR picdir()
++#define PICDIR uqt_picspath()
+ #endif
+ #endif
+
+-unsigned long QTReaderApp::m_uid = 0;
+-
+ void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); }
+
+ #ifdef USEQPE
+@@ -156,16 +150,9 @@ void QTReaderApp::listBkmkFiles()
+ d.setFilter( QDir::Files | QDir::NoSymLinks );
+ // d.setSorting( QDir::Size | QDir::Reversed );
+
+- const QFileInfoList *list = d.entryInfoList();
+- QFileInfoListIterator it( *list ); // create list iterator
+- QFileInfo *fi; // pointer for traversing
+- while ( (fi=it.current()) ) { // for each file...
+-
+- bkmkselector->insertItem(fi->fileName(), cnt++);
+-
+- //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
+- ++it; // goto next list element
+- }
++ QFileInfoList list = d.entryInfoList();
++ for(QFileInfoListIterator it=list.begin();it!=list.end();++it)
++ bkmkselector->insertItem(it->fileName(), cnt++);
+
+ #else /* USEQPE */
+ int cnt = 0;
+@@ -192,7 +179,7 @@ void QTReaderApp::listBkmkFiles()
+ //tjw menu->hide();
+
+
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ hidetoolbars();
+ m_nBkmkAction = cRmBkmkFile;
+ }
+@@ -207,6 +194,8 @@ void QTReaderApp::hidetoolbars()
+
+ #if defined(USEQPE)
+ menubar->hide();
++#else
++ mb->hide();
+ #endif
+
+ if (m_scrollbar != NULL) m_scrollbar->hide();
+@@ -233,7 +222,7 @@ void QTReaderApp::hidetoolbars()
+ }
+
+ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+- : QMainWindow( parent, name, f ), m_dontSave(false),
++ : Q3MainWindow( parent, name, f ), m_dontSave(false),
+ fileBar(NULL), navBar(NULL), viewBar(NULL), markBar(NULL), m_scrollbar(NULL), m_localscroll(2), m_hidebars(false), m_kmapchanged(false)
+ {
+ {
+@@ -337,41 +326,41 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ // QToolBar* markBar = new QToolBar("File", this);
+
+ #if defined(USEQPE)
+- menubar = new QToolBar("Menus", this, m_tbposition);
++ menubar = new Q3ToolBar("Menus", this, m_tbposition);
+ mb = new QPEMenuBar( menubar );
+ #else
+ mb = new QMenuBar( this );
+ #endif
+
+ #if defined(USEQPE)
+- QPopupMenu* tmp = new QPopupMenu(mb);
++ Q3PopupMenu* tmp = new Q3PopupMenu(mb);
+ mb->insertItem( geticon( "AppsIcon" ), tmp );
+ #else
+ QMenuBar* tmp = mb;
+ #endif
+
+- QPopupMenu *file = new QPopupMenu( mb );
++ Q3PopupMenu *file = new Q3PopupMenu( mb );
+ tmp->insertItem( tr( "File" ), file );
+
+- QPopupMenu *navigation = new QPopupMenu(mb);
++ Q3PopupMenu *navigation = new Q3PopupMenu(mb);
+ tmp->insertItem( tr( "Navigation" ), navigation );
+
+- QPopupMenu *view = new QPopupMenu( mb );
++ Q3PopupMenu *view = new Q3PopupMenu( mb );
+ tmp->insertItem( tr( "View" ), view );
+
+- QPopupMenu *marks = new QPopupMenu( this );
++ Q3PopupMenu *marks = new Q3PopupMenu( this );
+ tmp->insertItem( tr( "Marks" ), marks );
+
+- QPopupMenu *settings = new QPopupMenu( this );
++ Q3PopupMenu *settings = new Q3PopupMenu( this );
+ tmp->insertItem( tr( "Settings" ), settings );
+
+ // addToolBar(menubar, "Menus",QMainWindow::Top);
+ // addToolBar(fileBar, "Toolbar",QMainWindow::Top);
+
+- // QPopupMenu *edit = new QPopupMenu( this );
++ // Q3PopupMenu *edit = new Q3PopupMenu( this );
+
+ /*
+- QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
++ Q3Action *a = new Q3Action( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
+ a->addTo( bar );
+ a->addTo( file );
+@@ -379,34 +368,35 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ QWidget* widge = new QWidget(this);
+ setCentralWidget( widge );
+ QVBoxLayout* vlayout = new QVBoxLayout(widge);
++ vlayout->setMargin(0);
+ m_layout = new QBoxLayout(QBoxLayout::LeftToRight);
+ m_prog = new QLabel(widge);
+ vlayout->addLayout(m_layout, 1);
+ vlayout->addWidget(m_prog);
+
+- editorStack = new QWidgetStack( widge );
++ editorStack = new QStackedWidget( widge );
+ // setCentralWidget( editorStack );
+
+ searchVisible = FALSE;
+ regVisible = FALSE;
+ m_fontVisible = false;
+
+- m_buttonprefs = new CButtonPrefs(&kmap, this);
+- editorStack->addWidget(m_buttonprefs, get_unique_id());
++ m_buttonprefs = new CButtonPrefs(&kmap, editorStack);
++ editorStack->addWidget(m_buttonprefs);
+ connect( m_buttonprefs, SIGNAL( Closed() ), this, SLOT( infoClose() ) );
+
+
+ m_annoWin = new CAnnoEdit(editorStack);
+- editorStack->addWidget(m_annoWin, get_unique_id());
++ editorStack->addWidget(m_annoWin);
+ connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) );
+ connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) );
+
+ m_infoWin = new infowin(editorStack);
+- editorStack->addWidget(m_infoWin, get_unique_id());
++ editorStack->addWidget(m_infoWin);
+ connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) );
+
+ m_graphicwin = new GraphicWin(editorStack);
+- editorStack->addWidget(m_graphicwin, get_unique_id());
++ editorStack->addWidget(m_graphicwin);
+ connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) );
+
+ // bkmkselector = new QListBox(editorStack, "Bookmarks");
+@@ -414,7 +404,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) );
+ connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) );
+ connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) );
+- editorStack->addWidget( bkmkselector, get_unique_id() );
++ editorStack->addWidget( bkmkselector);
+
+ /*
+ importSelector = new FileSelector( "*", editorStack, "importselector", false );
+@@ -572,139 +562,139 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ connect( reader, SIGNAL( HandleKeyRequest(QKeyEvent*) ), this, SLOT( handlekey(QKeyEvent*) ) );
+ connect( reader, SIGNAL( SetScrollState(bool) ), this, SLOT( setScrollState(bool) ) );
+ connect( reader, SIGNAL(RefreshBitmap()), this, SLOT(setBackgroundBitmap()));
+- editorStack->addWidget( reader, get_unique_id() );
++ editorStack->addWidget( reader );
+
+- m_preferences_action = new QAction( tr( "Configuration" ), geticon( "SettingsIcon" ), QString::null, 0, this, NULL);
++ m_preferences_action = new Q3Action( tr( "Configuration" ), geticon( "SettingsIcon" ), QString::null, 0, this, NULL);
+ connect( m_preferences_action, SIGNAL( activated() ), this, SLOT( showprefs() ) );
+ m_preferences_action->addTo( settings );
+
+- m_saveconfig_action = new QAction( tr( "Save Config" ), QString::null, 0, this, NULL);
++ m_saveconfig_action = new Q3Action( tr( "Save Config" ), QString::null, 0, this, NULL);
+ connect( m_saveconfig_action, SIGNAL( activated() ), this, SLOT( SaveConfig() ) );
+ m_saveconfig_action->addTo( settings );
+
+- m_loadconfig_action = new QAction( tr( "Load Config" ), QString::null, 0, this, NULL);
++ m_loadconfig_action = new Q3Action( tr( "Load Config" ), QString::null, 0, this, NULL);
+ connect( m_loadconfig_action, SIGNAL( activated() ), this, SLOT( LoadConfig() ) );
+ m_loadconfig_action->addTo( settings );
+
+- m_tidyconfig_action = new QAction( tr( "Delete Config" ), QString::null, 0, this, NULL);
++ m_tidyconfig_action = new Q3Action( tr( "Delete Config" ), QString::null, 0, this, NULL);
+ connect( m_tidyconfig_action, SIGNAL( activated() ), this, SLOT( TidyConfig() ) );
+ m_tidyconfig_action->addTo( settings );
+
+ settings->insertSeparator();
+- m_toolbarprefs_action = new QAction( tr( "Toolbars" ), QString::null, 0, this, NULL);
++ m_toolbarprefs_action = new Q3Action( tr( "Toolbars" ), QString::null, 0, this, NULL);
+ connect( m_toolbarprefs_action, SIGNAL( activated() ), this, SLOT( showtoolbarprefs() ) );
+ m_toolbarprefs_action->addTo( settings );
+
+- m_buttonprefs_action = new QAction( tr( "Buttons" ), QString::null, 0, this, NULL);
++ m_buttonprefs_action = new Q3Action( tr( "Buttons" ), QString::null, 0, this, NULL);
+ connect( m_buttonprefs_action, SIGNAL( activated() ), this, SLOT( showbuttonprefs() ) );
+ m_buttonprefs_action->addTo( settings );
+
+- m_loadtheme_action = new QAction( tr( "Load Theme" ), QString::null, 0, this, NULL);
++ m_loadtheme_action = new Q3Action( tr( "Load Theme" ), QString::null, 0, this, NULL);
+ connect( m_loadtheme_action, SIGNAL( activated() ), this, SLOT( LoadTheme() ) );
+ m_loadtheme_action->addTo( settings );
+
+- m_repara_action = new QAction( tr( "EOP Marker" ), QString::null, 0, this, NULL);
++ m_repara_action = new Q3Action( tr( "EOP Marker" ), QString::null, 0, this, NULL);
+ connect( m_repara_action, SIGNAL( activated() ), this, SLOT( reparastring() ) );
+ m_repara_action->addTo(settings);
+
+ #ifdef USEQPE
+- m_grab_action = new QAction( tr( "Grab Buttons" ), QString::null, 0, this, NULL, true );
++ m_grab_action = new Q3Action( tr( "Grab Buttons" ), QString::null, 0, this, NULL, true );
+ connect( m_grab_action, SIGNAL( toggled(bool) ), this, SLOT( setgrab(bool) ) );
+ m_grab_action->setOn(m_grabkeyboard);
+ m_grab_action->addTo( settings );
+ #endif
+
+- m_open_action = new QAction( tr( "Open" ), geticon( "fileopen" ), QString::null, 0, this, 0 );
++ m_open_action = new Q3Action( tr( "Open" ), geticon( "fileopen" ), QString::null, 0, this, 0 );
+ connect( m_open_action, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
+ m_open_action->addTo( file );
+
+- m_close_action = new QAction( tr( "Close" ), geticon( "close" ), QString::null, 0, this, 0 );
++ m_close_action = new Q3Action( tr( "Close" ), geticon( "close" ), QString::null, 0, this, 0 );
+ connect( m_close_action, SIGNAL( activated() ), this, SLOT( fileClose() ) );
+ m_close_action->addTo( file );
+
+ #ifdef _SCRIPT
+- a = new QAction( tr( "Run Script" ), QString::null, 0, this, NULL);
++ a = new Q3Action( tr( "Run Script" ), QString::null, 0, this, NULL);
+ connect( a, SIGNAL( activated() ), this, SLOT( RunScript() ) );
+ a->addTo( file );
+ #endif
+ /*
+- a = new QAction( tr( "Revert" ), geticon( "close" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Revert" ), geticon( "close" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) );
+ a->addTo( file );
+
+- a = new QAction( tr( "Cut" ), geticon( "cut" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Cut" ), geticon( "cut" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
+ a->addTo( filebar() );
+ a->addTo( edit );
+ */
+
+- m_info_action = new QAction( tr( "Info" ), geticon( "UtilsIcon" ), QString::null, 0, this, NULL);
++ m_info_action = new Q3Action( tr( "Info" ), geticon( "UtilsIcon" ), QString::null, 0, this, NULL);
+ connect( m_info_action, SIGNAL( activated() ), this, SLOT( showinfo() ) );
+ m_info_action->addTo( file );
+
+- m_touch_action = new QAction( tr( "Two/One Touch" ), geticon( "1to1" ), QString::null, 0, this, NULL, true );
++ m_touch_action = new Q3Action( tr( "Two/One Touch" ), geticon( "1to1" ), QString::null, 0, this, NULL, true );
+ connect( m_touch_action, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) );
+ m_touch_action->setOn(m_twoTouch);
+ m_touch_action->addTo( file );
+
+- m_find_action = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, NULL);
++ m_find_action = new Q3Action( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, NULL);
+ connect( m_find_action, SIGNAL( activated() ), this, SLOT( editFind() ) );
+ file->insertSeparator();
+ // a->addTo( bar );
+ m_find_action->addTo( file );
+
+- m_exportlinks_action = new QAction( tr( "Export Links" ), QString::null, 0, this, NULL);
++ m_exportlinks_action = new Q3Action( tr( "Export Links" ), QString::null, 0, this, NULL);
+ connect( m_exportlinks_action, SIGNAL( activated() ), this, SLOT( ExportLinks() ) );
+ m_exportlinks_action->addTo( file );
+
+- m_scrollButton = new QAction( tr( "Scroll" ), getmyicon( "panel-arrow-down" ), QString::null, 0, this, 0, true );
++ m_scrollButton = new Q3Action( tr( "Scroll" ), getmyicon( "panel-arrow-down" ), QString::null, 0, this, 0, true );
+ connect( m_scrollButton, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) );
+ m_scrollButton->addTo(navigation);
+ m_scrollButton->setOn(false);
+
+- m_start_action = new QAction( tr( "Goto Start" ), geticon( "start" ), QString::null, 0, this, NULL);
++ m_start_action = new Q3Action( tr( "Goto Start" ), geticon( "start" ), QString::null, 0, this, NULL);
+ connect( m_start_action, SIGNAL( activated() ), this, SLOT( gotoStart() ) );
+ m_start_action->addTo(navigation);
+
+- m_end_action = new QAction( tr( "Goto End" ), geticon( "finish" ), QString::null, 0, this, NULL);
++ m_end_action = new Q3Action( tr( "Goto End" ), geticon( "finish" ), QString::null, 0, this, NULL);
+ connect( m_end_action, SIGNAL( activated() ), this, SLOT( gotoEnd() ) );
+ m_end_action->addTo(navigation);
+
+- m_jump_action = new QAction( tr( "Jump" ), geticon( "rotate" ), QString::null, 0, this, NULL);
++ m_jump_action = new Q3Action( tr( "Jump" ), geticon( "rotate" ), QString::null, 0, this, NULL);
+ connect( m_jump_action, SIGNAL( activated() ), this, SLOT( jump() ) );
+ m_jump_action->addTo(navigation);
+
+- m_pageline_action = new QAction( tr( "Page/Line Scroll" ), geticon( "pass" ), QString::null, 0, this, NULL, true );
++ m_pageline_action = new Q3Action( tr( "Page/Line Scroll" ), geticon( "pass" ), QString::null, 0, this, NULL, true );
+ connect( m_pageline_action, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
+ m_pageline_action->addTo(navigation);
+ m_pageline_action->setOn(reader->m_bpagemode);
+
+- m_pageup_action = new QAction( tr( "Up" ), geticon( "up" ), QString::null, 0, this, 0 );
++ m_pageup_action = new Q3Action( tr( "Up" ), geticon( "up" ), QString::null, 0, this, 0 );
+ connect( m_pageup_action, SIGNAL( activated() ), this, SLOT( pageup() ) );
+ m_pageup_action->addTo( navigation );
+
+- m_pagedn_action = new QAction( tr( "Down" ), geticon( "down" ), QString::null, 0, this, 0 );
++ m_pagedn_action = new Q3Action( tr( "Down" ), geticon( "down" ), QString::null, 0, this, 0 );
+ connect( m_pagedn_action, SIGNAL( activated() ), this, SLOT( pagedn() ) );
+ m_pagedn_action->addTo( navigation );
+
+- m_back_action = new QAction( tr( "Back" ), geticon( "back" ), QString::null, 0, this, 0 );
++ m_back_action = new Q3Action( tr( "Back" ), geticon( "back" ), QString::null, 0, this, 0 );
+ connect( m_back_action, SIGNAL( activated() ), reader, SLOT( goBack() ) );
+ m_back_action->addTo( navigation );
+
+- m_home_action = new QAction( tr( "Home" ), geticon( "home" ), QString::null, 0, this, 0 );
++ m_home_action = new Q3Action( tr( "Home" ), geticon( "home" ), QString::null, 0, this, 0 );
+ connect( m_home_action, SIGNAL( activated() ), reader, SLOT( goHome() ) );
+ m_home_action->addTo( navigation );
+
+- m_forward_action = new QAction( tr( "Forward" ), geticon( "forward" ), QString::null, 0, this, 0 );
++ m_forward_action = new Q3Action( tr( "Forward" ), geticon( "forward" ), QString::null, 0, this, 0 );
+ connect( m_forward_action, SIGNAL( activated() ), reader, SLOT( goForward() ) );
+ m_forward_action->addTo( navigation );
+
+ /*
+- a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true );
++ a = new Q3Action( tr( "Find" ), QString::null, 0, this, NULL, true );
+ // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
+ a->addTo( file );
+
+- a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true );
++ a = new Q3Action( tr( "Find Again" ), QString::null, 0, this, NULL, true );
+ // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
+ a->addTo( file );
+ */
+@@ -715,13 +705,13 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+
+ QActionGroup* ag = new QActionGroup(this);
+ ag->setExclusive(false);
+- spacemenu = new QPopupMenu(this);
++ spacemenu = new Q3PopupMenu(this);
+ file->insertItem( tr( "Scrolling" ), spacemenu );
+
+- a = new QAction( tr( "Set Target" ), QString::null, 0, ag, NULL);
++ a = new Q3Action( tr( "Set Target" ), QString::null, 0, ag, NULL);
+ connect( a, SIGNAL( activated() ), this, SLOT( setpipetarget() ) );
+
+- a = new QAction( tr( "Pause Paras" ), QString::null, 0, ag, NULL, true );
++ a = new Q3Action( tr( "Pause Paras" ), QString::null, 0, ag, NULL, true );
+ connect( a, SIGNAL( toggled(bool) ), this, SLOT( setpause(bool) ) );
+ a->setOn(reader->m_pauseAfterEachPara);
+
+@@ -731,64 +721,64 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ #endif
+
+ /*
+- a = new QAction( tr( "Import" ), QString::null, 0, this, NULL );
++ a = new Q3Action( tr( "Import" ), QString::null, 0, this, NULL );
+ connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) );
+ a->addTo( file );
+ */
+
+ /*
+- a = new QAction( tr( "Paste" ), geticon( "paste" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Paste" ), geticon( "paste" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
+ a->addTo( fileBar );
+ a->addTo( edit );
+ */
+
+-// a = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, 0 );
++// a = new Q3Action( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, 0 );
+
+ m_fullscreen = false;
+- m_actFullscreen = new QAction( tr( "Fullscreen" ), geticon( "fullscreen" ), QString::null, 0, this, NULL, true );
++ m_actFullscreen = new Q3Action( tr( "Fullscreen" ), geticon( "fullscreen" ), QString::null, 0, this, NULL, true );
+ connect( m_actFullscreen, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) );
+ m_actFullscreen->setOn(m_fullscreen);
+ m_actFullscreen->addTo( view );
+
+- m_rotate_action = new QAction( tr( "Rotate" ), geticon( "repeat" ), QString::null, 0, this, NULL, true );
++ m_rotate_action = new Q3Action( tr( "Rotate" ), geticon( "repeat" ), QString::null, 0, this, NULL, true );
+ connect( m_rotate_action, SIGNAL( toggled(bool) ), this, SLOT( setrotated(bool) ) );
+ m_rotate_action->setOn(reader->m_rotated);
+ m_rotate_action->addTo( view );
+
+- m_inverse_action = new QAction( tr( "Invert" ), getmyicon( "invert" ), QString::null, 0, this, NULL, true );
++ m_inverse_action = new Q3Action( tr( "Invert" ), getmyicon( "invert" ), QString::null, 0, this, NULL, true );
+ connect( m_inverse_action, SIGNAL( toggled(bool) ), this, SLOT( setinverted(bool) ) );
+ m_inverse_action->setOn(reader->bInverse);
+ m_inverse_action->addTo( view );
+
+ view->insertSeparator();
+
+- m_zoomin_action = new QAction( tr( "Zoom In" ), geticon( "zoom" ), QString::null, 0, this);
++ m_zoomin_action = new Q3Action( tr( "Zoom In" ), geticon( "zoom" ), QString::null, 0, this);
+ connect( m_zoomin_action, SIGNAL( activated() ), this, SLOT( zoomin() ) );
+ m_zoomin_action->addTo( view );
+
+- m_zoomout_action = new QAction( tr( "Zoom Out" ), geticon( "mag" ), QString::null, 0, this);
++ m_zoomout_action = new Q3Action( tr( "Zoom Out" ), geticon( "mag" ), QString::null, 0, this);
+ connect( m_zoomout_action, SIGNAL( activated() ), this, SLOT( zoomout() ) );
+ m_zoomout_action->addTo( view );
+
+ view->insertSeparator();
+- m_setfont_action = new QAction( tr( "Set Font" ), getmyicon( "font" ), QString::null, 0, this);
++ m_setfont_action = new Q3Action( tr( "Set Font" ), getmyicon( "font" ), QString::null, 0, this);
+ connect( m_setfont_action, SIGNAL( activated() ), this, SLOT( setfont() ) );
+ m_setfont_action->addTo( view );
+
+ view->insertSeparator();
+- m_setenc_action = new QAction( tr( "Set Encoding" ), getmyicon( "charset" ), QString::null, 0, this);
++ m_setenc_action = new Q3Action( tr( "Set Encoding" ), getmyicon( "charset" ), QString::null, 0, this);
+ connect( m_setenc_action, SIGNAL( activated() ), this, SLOT( chooseencoding() ) );
+ m_setenc_action->addTo( view );
+
+- m_setmono_action = new QAction( tr( "Ideogram" ), getmyicon( "ideogram" ), QString::null, 0, this, NULL, true);
++ m_setmono_action = new Q3Action( tr( "Ideogram" ), getmyicon( "ideogram" ), QString::null, 0, this, NULL, true);
+ connect( m_setmono_action, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
+ m_setmono_action->addTo( view );
+ m_setmono_action->setOn(reader->m_bMonoSpaced);
+
+
+- // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
+- // a = new QAction( tr( "Zoom" ), geticon( "mag" ), QString::null, 0, this, 0 );
++ // a = new Q3Action( tr( "Zoom" ), QString::null, 0, this, NULL, true );
++ // a = new Q3Action( tr( "Zoom" ), geticon( "mag" ), QString::null, 0, this, 0 );
+
+
+
+@@ -796,57 +786,57 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ // view->insertSeparator();
+
+ /*
+- a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
++ a = new Q3Action( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
+ connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
+ a->setOn(reader->m_bMonoSpaced);
+ a->addTo( view );
+ */
+ /*
+- a = new QAction( tr( "Set Width" ), QString::null, 0, this, NULL);
++ a = new Q3Action( tr( "Set Width" ), QString::null, 0, this, NULL);
+ connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) );
+ a->addTo( view );
+ */
+
+- m_mark_action = new QAction( tr( "Bookmark" ), getmyicon( "bookmark" ), QString::null, 0, this, NULL);
++ m_mark_action = new Q3Action( tr( "Bookmark" ), getmyicon( "bookmark" ), QString::null, 0, this, NULL);
+ connect( m_mark_action, SIGNAL( activated() ), this, SLOT( addbkmk() ) );
+ m_mark_action->addTo( marks );
+
+- m_annotate_action = new QAction( tr( "Annotate" ), getmyicon( "annotate" ), QString::null, 0, this, NULL);
++ m_annotate_action = new Q3Action( tr( "Annotate" ), getmyicon( "annotate" ), QString::null, 0, this, NULL);
+ connect( m_annotate_action, SIGNAL( activated() ), this, SLOT( addanno() ) );
+ m_annotate_action->addTo( marks );
+
+- m_goto_action = new QAction( tr( "Goto" ), getmyicon( "bookmark_goto" ), QString::null, 0, this, NULL, false );
++ m_goto_action = new Q3Action( tr( "Goto" ), getmyicon( "bookmark_goto" ), QString::null, 0, this, NULL, false );
+ connect( m_goto_action, SIGNAL( activated() ), this, SLOT( do_gotomark() ) );
+ m_goto_action->addTo( marks );
+
+- m_delete_action = new QAction( tr( "Delete" ), getmyicon( "bookmark_delete" ), QString::null, 0, this, NULL);
++ m_delete_action = new Q3Action( tr( "Delete" ), getmyicon( "bookmark_delete" ), QString::null, 0, this, NULL);
+ connect( m_delete_action, SIGNAL( activated() ), this, SLOT( do_delmark() ) );
+ m_delete_action->addTo( marks );
+
+- m_autogen_action = new QAction( tr( "Autogen" ), geticon( "exec" ), QString::null, 0, this, NULL, false );
++ m_autogen_action = new Q3Action( tr( "Autogen" ), geticon( "exec" ), QString::null, 0, this, NULL, false );
+ connect( m_autogen_action, SIGNAL( activated() ), this, SLOT( do_autogen() ) );
+ marks->insertSeparator();
+ m_autogen_action->addTo( marks );
+
+- m_clear_action = new QAction( tr( "Clear" ), getmyicon( "bookmark_clear" ), QString::null, 0, this, NULL);
++ m_clear_action = new Q3Action( tr( "Clear" ), getmyicon( "bookmark_clear" ), QString::null, 0, this, NULL);
+ connect( m_clear_action, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) );
+ m_clear_action->addTo( marks );
+
+- m_save_action = new QAction( tr( "Save" ), getmyicon( "bookmark_save" ), QString::null, 0, this, NULL );
++ m_save_action = new Q3Action( tr( "Save" ), getmyicon( "bookmark_save" ), QString::null, 0, this, NULL );
+ connect( m_save_action, SIGNAL( activated() ), this, SLOT( savebkmks() ) );
+ m_save_action->addTo( marks );
+
+- m_tidy_action = new QAction( tr( "Tidy" ), getmyicon( "bookmark_tidy" ), QString::null, 0, this, NULL);
++ m_tidy_action = new Q3Action( tr( "Tidy" ), getmyicon( "bookmark_tidy" ), QString::null, 0, this, NULL);
+ connect( m_tidy_action, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) );
+ marks->insertSeparator();
+ m_tidy_action->addTo( marks );
+
+- m_startBlock_action = new QAction( tr( "Start Block" ), geticon( "new" ), QString::null, 0, this, NULL);
++ m_startBlock_action = new Q3Action( tr( "Start Block" ), geticon( "new" ), QString::null, 0, this, NULL);
+ connect( m_startBlock_action, SIGNAL( activated() ), this, SLOT( editMark() ) );
+ marks->insertSeparator();
+ m_startBlock_action->addTo( marks );
+
+- m_endBlock_action = new QAction( tr( "Copy Block" ), geticon( "copy" ), QString::null, 0, this, NULL);
++ m_endBlock_action = new Q3Action( tr( "Copy Block" ), geticon( "copy" ), QString::null, 0, this, NULL);
+ connect( m_endBlock_action, SIGNAL( activated() ), this, SLOT( editCopy() ) );
+ m_endBlock_action->addTo( marks );
+
+@@ -868,10 +858,10 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ }
+
+
+- pbar = new QProgressBar(this);
++ pbar = new Q3ProgressBar(this);
+ pbar->hide();
+
+- searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE );
++ searchBar = new QFloatBar( "Search", this, Qt::Top, TRUE );
+
+ searchBar->setHorizontalStretchable( TRUE );
+
+@@ -890,17 +880,17 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ connect( searchEdit, SIGNAL( returnPressed( ) ),
+ this, SLOT( search( ) ) );
+ #endif
+- QAction*a = new QAction( tr( "Find Next" ), geticon( "next" ), QString::null, 0, this, 0 );
++ Q3Action*a = new Q3Action( tr( "Find Next" ), geticon( "next" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
+ a->addTo( searchBar );
+
+- a = new QAction( tr( "Close Find" ), geticon( "close" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Close Find" ), geticon( "close" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) );
+ a->addTo( searchBar );
+
+ searchBar->hide();
+
+- regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE );
++ regBar = new QFloatBar( "Autogen", this, Qt::Top, TRUE );
+ connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() ));
+
+ regBar->setHorizontalStretchable( TRUE );
+@@ -913,17 +903,17 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ connect( regEdit, SIGNAL( returnPressed( ) ),
+ this, SLOT( do_regaction() ) );
+
+- a = new QAction( tr( "Do Reg" ), geticon( "enter" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Do Reg" ), geticon( "enter" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) );
+ a->addTo( regBar );
+
+- a = new QAction( tr( "Close Edit" ), geticon( "close" ), QString::null, 0, this, 0 );
++ a = new Q3Action( tr( "Close Edit" ), geticon( "close" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) );
+ a->addTo( regBar );
+
+ regBar->hide();
+
+- m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE );
++ m_fontBar = new Q3ToolBar( "Autogen", this, Qt::Top, TRUE );
+
+ m_fontBar->setHorizontalStretchable( TRUE );
+
+@@ -940,9 +930,9 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+ {
+ realfont = true;
+ }
+- if ((*nm).contains(FIXEDFONT,false)) reader->m_fontControl.hasCourier(true, *nm);
+ }
+ if (!realfont) reader->m_fontname = flist[0];
++ reader->m_fontControl.setCourier(reader->m_fontname,flist);
+ } // delete the FontDatabase!!!
+ connect( m_fontSelector, SIGNAL( activated(const QString& ) ),
+ this, SLOT( do_setfont(const QString&) ) );
+@@ -965,7 +955,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
+
+ m_scrollbar->setVerticalStretchable( TRUE );
+ */
+- scrollbar = m_scrollbar = new QScrollBar(QScrollBar::Vertical, widge);
++ scrollbar = m_scrollbar = new QScrollBar(Qt::Vertical, widge);
+ m_layout->addWidget(scrollbar);
+ scrollbar->setTracking(false);
+ // connect(scrollbar, SIGNAL(sliderMoved(int)), this, SLOT(actionscroll(int)) );
+@@ -1226,7 +1216,7 @@ void QTReaderApp::addtoolbars(Config* config)
+ {
+ if (m_bkmkAvail == NULL)
+ {
+- m_bkmkAvail = new QAction( tr( "Annotation" ), geticon( "find" ), QString::null, 0, this, 0 );
++ m_bkmkAvail = new Q3Action( tr( "Annotation" ), geticon( "find" ), QString::null, 0, this, 0 );
+ connect( m_bkmkAvail, SIGNAL( activated() ), this, SLOT( showAnnotation() ) );
+
+ m_bkmkAvail->setEnabled(false);
+@@ -1253,7 +1243,7 @@ bool QTReaderApp::checkbar(Config* _config, const QString& key)
+ }
+
+
+-QToolBar* QTReaderApp::filebar()
++Q3ToolBar* QTReaderApp::filebar()
+ {
+ if (fileBar == NULL)
+ {
+@@ -1270,21 +1260,21 @@ QToolBar* QTReaderApp::filebar()
+ case cesMenuTool:
+ case cesMultiple:
+ // qDebug("Creating new file bar");
+- fileBar = new QToolBar("File", this, m_tbposition);
++ fileBar = new Q3ToolBar("File", this, m_tbposition);
+ break;
+ }
+ // fileBar->setHorizontalStretchable( true );
+ }
+ return fileBar;
+ }
+-QToolBar* QTReaderApp::viewbar()
++Q3ToolBar* QTReaderApp::viewbar()
+ {
+ if (viewBar == NULL)
+ {
+ switch (m_tbpol)
+ {
+ case cesMultiple:
+- viewBar = new QToolBar("View", this, m_tbposition);
++ viewBar = new Q3ToolBar("View", this, m_tbposition);
+ break;
+ default:
+ qDebug("Incorrect toolbar policy set");
+@@ -1298,7 +1288,7 @@ QToolBar* QTReaderApp::viewbar()
+ }
+ return viewBar;
+ }
+-QToolBar* QTReaderApp::navbar()
++Q3ToolBar* QTReaderApp::navbar()
+ {
+ if (navBar == NULL)
+ {
+@@ -1306,7 +1296,7 @@ QToolBar* QTReaderApp::navbar()
+ {
+ case cesMultiple:
+ // qDebug("Creating new nav bar");
+- navBar = new QToolBar("Navigation", this, m_tbposition);
++ navBar = new Q3ToolBar("Navigation", this, m_tbposition);
+ break;
+ default:
+ qDebug("Incorrect toolbar policy set");
+@@ -1321,14 +1311,14 @@ QToolBar* QTReaderApp::navbar()
+ }
+ return navBar;
+ }
+-QToolBar* QTReaderApp::markbar()
++Q3ToolBar* QTReaderApp::markbar()
+ {
+ if (markBar == NULL)
+ {
+ switch (m_tbpol)
+ {
+ case cesMultiple:
+- markBar = new QToolBar("Marks", this, m_tbposition);
++ markBar = new Q3ToolBar("Marks", this, m_tbposition);
+ break;
+ default:
+ qDebug("Incorrect toolbar policy set");
+@@ -1343,26 +1333,26 @@ QToolBar* QTReaderApp::markbar()
+ return markBar;
+ }
+
+-void QTReaderApp::addfilebar(Config* _config, const QString& key, QAction* a)
++void QTReaderApp::addfilebar(Config* _config, const QString& key, Q3Action* a)
+ {
+ if (_config->readBoolEntry(key, false)) a->addTo( filebar() );
+ }
+-void QTReaderApp::addnavbar(Config* _config, const QString& key, QAction* a)
++void QTReaderApp::addnavbar(Config* _config, const QString& key, Q3Action* a)
+ {
+ if (_config->readBoolEntry(key, false)) a->addTo( navbar() );
+ }
+-void QTReaderApp::addmarkbar(Config* _config, const QString& key, QAction* a)
++void QTReaderApp::addmarkbar(Config* _config, const QString& key, Q3Action* a)
+ {
+ if (_config->readBoolEntry(key, false)) a->addTo( markbar() );
+ }
+-void QTReaderApp::addviewbar(Config* _config, const QString& key, QAction* a)
++void QTReaderApp::addviewbar(Config* _config, const QString& key, Q3Action* a)
+ {
+ if (_config->readBoolEntry(key, false)) a->addTo( viewbar() );
+ }
+
+ void QTReaderApp::suspend() { reader->suspend(); }
+
+-void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
++void QTReaderApp::msgHandler(const Q3CString& _msg, const QByteArray& _data)
+ {
+ #ifndef USEMSGS
+ return;
+@@ -1787,7 +1777,7 @@ void QTReaderApp::setfullscreen(bool sfs)
+ reader->update();
+ }
+ /*
+-void QTReaderApp::buttonActionSelected(QAction* _a)
++void QTReaderApp::buttonActionSelected(Q3Action* _a)
+ {
+ //// qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text()));
+ m_spaceTarget = ActNameToInt(_a->text());
+@@ -2007,14 +1997,14 @@ QString QTReaderApp::usefilebrowser()
+ void QTReaderApp::showgraphic(QImage& pm)
+ {
+ m_graphicwin->setImage(pm);
+- editorStack->raiseWidget( m_graphicwin );
++ editorStack->setCurrentWidget( m_graphicwin );
+ hidetoolbars();
+ m_graphicwin->setFocus();
+ }
+
+ void QTReaderApp::showbuttonprefs()
+ {
+- editorStack->raiseWidget( m_buttonprefs );
++ editorStack->setCurrentWidget( m_buttonprefs );
+ hidetoolbars();
+ m_buttonprefs->setFocus();
+ m_kmapchanged = true;
+@@ -2366,7 +2356,7 @@ void QTReaderApp::showinfo()
+ }
+ m_infoWin->setZoom(reader->m_fontControl.currentsize()*10);
+ m_infoWin->setAbout(QString("\nApplication (c) Tim Wentford\n")+reader->about());
+- editorStack->raiseWidget( m_infoWin );
++ editorStack->setCurrentWidget( m_infoWin );
+ hidetoolbars();
+ m_infoWin->setFocus();
+ }
+@@ -2482,7 +2472,7 @@ void QTReaderApp::addanno()
+ m_annoWin->setAnno("");
+ m_annoWin->setPosn(reader->pagelocate());
+ m_annoIsEditing = true;
+- editorStack->raiseWidget( m_annoWin );
++ editorStack->setCurrentWidget( m_annoWin );
+ hidetoolbars();
+ #ifdef USEQPE
+ Global::showInputMethod();
+@@ -2658,7 +2648,7 @@ void QTReaderApp::findNext()
+ #ifdef __ISEARCH
+ QString arg = searchEdit->text();
+ #else
+- QRegExp arg = searchEdit->text();
++ QRegExp arg(searchEdit->text());
+ #endif
+ CDrawBuffer test(&(reader->m_fontControl));
+ size_t start = reader->pagelocate();
+@@ -2722,7 +2712,7 @@ bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg)
+ while (strstr(test.data(),(const tchar*)arg) == NULL)
+ #else
+ #ifdef _UNICODE
+- while ((offset = arg.match(toQString(test.data()))) == -1)
++ while ((offset = arg.exactMatch(toQString(test.data()))) == -1)
+ #else
+ while (arg.match(test.data()) == -1)
+ #endif
+@@ -2962,7 +2952,7 @@ void QTReaderApp::handlekey(QKeyEvent* e)
+ #if defined(USEQPE) && defined(USENEWFULLSCREEN)
+ void QTReaderApp::focusInEvent(QFocusEvent *)
+ {
+- if (m_usenewfullscreen && m_fullscreen && (editorStack->visibleWidget() == reader))
++ if (m_usenewfullscreen && m_fullscreen && (editorStack->currentWidget() == reader))
+ {
+ m_usenewfullscreen = false;
+ reader->bDoUpdates = false;
+@@ -2975,7 +2965,7 @@ void QTReaderApp::focusInEvent(QFocusEvent *)
+
+ void QTReaderApp::resizeEvent(QResizeEvent *)
+ {
+- if (m_usenewfullscreen && m_fullscreen && (editorStack->visibleWidget() == reader))
++ if (m_usenewfullscreen && m_fullscreen && (editorStack->currentWidget() == reader))
+ {
+ m_usenewfullscreen = false;
+ reader->bDoUpdates = false;
+@@ -3078,7 +3068,7 @@ void QTReaderApp::showEditTools()
+ // qDebug("uc");
+ updateCaption();
+ // qDebug("rw");
+- editorStack->raiseWidget( reader );
++ editorStack->setCurrentWidget( reader );
+ // qDebug("sf");
+ reader->setFocus();
+ // qDebug("ref");
+@@ -3156,7 +3146,7 @@ void QTReaderApp::closeEvent( QCloseEvent *e )
+ showEditTools();
+ e->ignore();
+ }
+- else if (editorStack->visibleWidget() == m_buttonprefs)
++ else if (editorStack->currentWidget() == m_buttonprefs)
+ {
+ int ret = QMessageBox::warning(this, PROGNAME,
+ tr("Do you wish to map this key?\n\nIf you proceed you will map\nthe escape key and you will\nneed to press the close box\ntwice to exit this program\n\nContinue?"), tr("Yes"), tr("No"), QString::null, 0, 1);
+@@ -3172,7 +3162,7 @@ tr("Do you wish to map this key?\n\nIf you proceed you will map\nthe escape key
+ }
+ else
+ {
+- if (editorStack->visibleWidget() == reader)
++ if (editorStack->currentWidget() == reader)
+ {
+ if ((kmap.find(orKey(Qt::NoButton,Key_Escape,false)) != kmap.end()) && m_bcloseDisabled)
+ {
+@@ -3277,7 +3267,7 @@ bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab, bool presel)
+ if (cnt > 0)
+ {
+ hidetoolbars();
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ if (slt != -1) bkmkselector->setCurrentItem(slt);
+ return true;
+ }
+@@ -3799,7 +3789,7 @@ void QTReaderApp::do_autogen(const QString& regText)
+ }
+ i = reader->buffdoc.getpara(buff);
+ #ifdef _UNICODE
+- if (re.match(toQString(buff.data())) != -1)
++ if (re.exactMatch(toQString(buff.data())) != -1)
+ #else
+ if (re.match(buff.data()) != -1)
+ #endif
+@@ -4113,7 +4103,7 @@ void QTReaderApp::showAnnotation()
+ #ifdef USEQPE
+ Global::showInputMethod();
+ #endif
+- editorStack->raiseWidget( m_annoWin );
++ editorStack->setCurrentWidget( m_annoWin );
+ hidetoolbars();
+ m_annoWin->setFocus();
+ }
+@@ -4152,7 +4142,7 @@ void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, size_t posn2,
+ #ifdef USEQPE
+ Global::showInputMethod();
+ #endif
+- editorStack->raiseWidget( m_annoWin );
++ editorStack->setCurrentWidget( m_annoWin );
+ hidetoolbars();
+ }
+ #ifdef USEQPE
+@@ -4738,17 +4728,9 @@ bool QTReaderApp::PopulateConfig(const char* tgtdir, bool usedirs)
+ d.setFilter( ((usedirs) ? QDir::Dirs : QDir::Files) | QDir::NoSymLinks );
+ // d.setSorting( QDir::Size | QDir::Reversed );
+
+- const QFileInfoList *list = d.entryInfoList();
+- QFileInfoListIterator it( *list ); // create list iterator
+- QFileInfo *fi; // pointer for traversing
+-
+- while ( (fi=it.current()) ) { // for each file...
+-
+- bkmkselector->insertItem(fi->fileName(), cnt++);
+-
+- //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
+- ++it; // goto next list element
+- }
++ QFileInfoList list = d.entryInfoList();
++ for(QFileInfoListIterator it=list.begin();it!=list.end();++it)
++ bkmkselector->insertItem(it->fileName(), cnt++);
+
+ #else /* USEQPE */
+ int cnt = 0;
+@@ -4782,7 +4764,7 @@ void QTReaderApp::LoadTheme()
+ {
+ if (PopulateConfig("Themes", true))
+ {
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ hidetoolbars();
+ m_nBkmkAction = cLdTheme;
+ }
+@@ -4794,7 +4776,7 @@ void QTReaderApp::LoadConfig()
+ {
+ if (PopulateConfig("configs"))
+ {
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ hidetoolbars();
+ m_nBkmkAction = cLdConfig;
+ }
+@@ -4806,7 +4788,7 @@ void QTReaderApp::TidyConfig()
+ {
+ if (PopulateConfig("configs"))
+ {
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ hidetoolbars();
+ m_nBkmkAction = cRmConfig;
+ }
+@@ -4818,7 +4800,7 @@ void QTReaderApp::ExportLinks()
+ {
+ if (PopulateConfig("urls"))
+ {
+- editorStack->raiseWidget( bkmkselector );
++ editorStack->setCurrentWidget( bkmkselector );
+ hidetoolbars();
+ m_nBkmkAction = cExportLinks;
+ }
+diff --git a/QTReaderApp.h b/QTReaderApp.h
+index ab1b7ad..502079f 100644
+--- a/QTReaderApp.h
++++ b/QTReaderApp.h
+@@ -35,7 +35,15 @@
+ #include <qmap.h>
+ #include <qlineedit.h>
+ #include <qstack.h>
+-#include <qlistbox.h>
++#include <Qt3Support/Q3ListBox>
++#include <Qt3Support/Q3CString>
++#include <Qt3Support/Q3ProgressBar>
++#include <Qt3Support/Q3MainWindow>
++#include <Qt3Support/Q3Action>
++#include <QStackedWidget>
++#include <qcombobox.h>
++#include <qnamespace.h>
++using namespace Qt;
+ #ifdef USEQPE
+ #include <qpe/qpeapplication.h>
+ #endif
+@@ -126,7 +134,7 @@ struct searchrecord
+ class infowin;
+ class GraphicWin;
+
+-class QTReaderApp : public QMainWindow
++class QTReaderApp : public Q3MainWindow
+ {
+ Q_OBJECT
+
+@@ -180,7 +188,7 @@ class QTReaderApp : public QMainWindow
+
+ protected:
+ void setfontHelper(const QString& lcn, int size = 0);
+- QAction* m_bkmkAvail, *m_actFullscreen;
++ Q3Action* m_bkmkAvail, *m_actFullscreen;
+ CAnnoEdit* m_annoWin;
+ Bkmk* m_anno;
+ int m_scrollcolor, m_scrollbarcolor, m_background, m_foreground;
+@@ -262,8 +270,8 @@ private slots:
+ void showAnnotation();
+ void do_setencoding(int i);
+ void do_setfont(const QString&);
+- // void buttonActionSelected(QAction*);
+- void msgHandler(const QCString&, const QByteArray&);
++ // void buttonActionSelected(Q3Action*);
++ void msgHandler(const Q3CString&, const QByteArray&);
+ void monospace(bool);
+ void jump();
+ void reparastring();
+@@ -346,35 +354,35 @@ private slots:
+ void setscrollcolour();
+ void setscrollbarcolour();
+ void writeUrl(const QString& file, const QString& href);
+- QAction *m_preferences_action, *m_open_action, *m_close_action;
+- QAction *m_info_action, *m_touch_action, *m_find_action, *m_start_action;
+- QAction *m_end_action, *m_jump_action, *m_pageline_action;
+- QAction *m_pageup_action, *m_pagedn_action, *m_back_action;
+- QAction *m_home_action, *m_forward_action, *m_zoomin_action;
+- QAction *m_zoomout_action, *m_setfont_action, *m_mark_action;
+- QAction *m_annotate_action, *m_goto_action, *m_delete_action;
+- QAction *m_autogen_action, *m_clear_action, *m_save_action;
+- QAction *m_tidy_action, *m_startBlock_action, *m_endBlock_action;
+- QAction *m_setenc_action, *m_setmono_action, *m_saveconfig_action;
+- QAction *m_loadconfig_action, *m_loadtheme_action, *m_toolbarprefs_action, *m_tidyconfig_action;
+- QAction *m_exportlinks_action, *m_rotate_action, *m_buttonprefs_action, *m_inverse_action;
+- QAction *m_repara_action;
++ Q3Action *m_preferences_action, *m_open_action, *m_close_action;
++ Q3Action *m_info_action, *m_touch_action, *m_find_action, *m_start_action;
++ Q3Action *m_end_action, *m_jump_action, *m_pageline_action;
++ Q3Action *m_pageup_action, *m_pagedn_action, *m_back_action;
++ Q3Action *m_home_action, *m_forward_action, *m_zoomin_action;
++ Q3Action *m_zoomout_action, *m_setfont_action, *m_mark_action;
++ Q3Action *m_annotate_action, *m_goto_action, *m_delete_action;
++ Q3Action *m_autogen_action, *m_clear_action, *m_save_action;
++ Q3Action *m_tidy_action, *m_startBlock_action, *m_endBlock_action;
++ Q3Action *m_setenc_action, *m_setmono_action, *m_saveconfig_action;
++ Q3Action *m_loadconfig_action, *m_loadtheme_action, *m_toolbarprefs_action, *m_tidyconfig_action;
++ Q3Action *m_exportlinks_action, *m_rotate_action, *m_buttonprefs_action, *m_inverse_action;
++ Q3Action *m_repara_action;
+ #ifdef USEQPE
+- QAction *m_grab_action;
++ Q3Action *m_grab_action;
+ #endif
+ void addtoolbars(Config* config);
+ ToolbarPolicy m_tbpol, m_tbpolsave;
+ ToolBarDock m_tbposition;
+ bool m_tbmove, m_tbmovesave;
+- QToolBar* filebar();
+- QToolBar* viewbar();
+- QToolBar* navbar();
+- QToolBar* markbar();
++ Q3ToolBar* filebar();
++ Q3ToolBar* viewbar();
++ Q3ToolBar* navbar();
++ Q3ToolBar* markbar();
+ void hidetoolbars();
+- void addfilebar(Config* _config, const QString& key, QAction* a);
+- void addviewbar(Config* _config, const QString& key, QAction* a);
+- void addnavbar(Config* _config, const QString& key, QAction* a);
+- void addmarkbar(Config* _config, const QString& key, QAction* a);
++ void addfilebar(Config* _config, const QString& key, Q3Action* a);
++ void addviewbar(Config* _config, const QString& key, Q3Action* a);
++ void addnavbar(Config* _config, const QString& key, Q3Action* a);
++ void addmarkbar(Config* _config, const QString& key, Q3Action* a);
+ bool checkbar(Config* _config, const QString& key);
+ #ifdef _SCRIPT
+ void SaveScript(const char* sname);
+@@ -401,9 +409,9 @@ private slots:
+
+ private:
+
+- QAction* m_scrollButton;
++ Q3Action* m_scrollButton;
+
+- QAction* m_buttonAction[MAX_ACTIONS];
++ Q3Action* m_buttonAction[MAX_ACTIONS];
+
+ CBkmkSelector* bkmkselector;
+
+@@ -418,27 +426,25 @@ private slots:
+ #else
+ bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg);
+ #endif
+- QWidgetStack *editorStack;
++ QStackedWidget *editorStack;
+ QTReader* reader;
+ QComboBox* m_fontSelector;
+ // QPEToolBar /* *menu,*/ *fileBar;
+ #if defined(USEQPE)
+- QToolBar *menubar;
++ Q3ToolBar *menubar;
+ #endif
+- QToolBar *fileBar, *navBar, *viewBar, *markBar;
++ Q3ToolBar *fileBar, *navBar, *viewBar, *markBar;
+ #if defined(USEQPE)
+ QPEMenuBar *mb;
+ #else
+ QMenuBar *mb;
+ #endif
+ QFloatBar *searchBar, *regBar/*, *m_fontBar*/;
+- QToolBar /* *searchBar, *regBar,*/ *m_fontBar;
++ Q3ToolBar /* *searchBar, *regBar,*/ *m_fontBar;
+ QLineEdit *searchEdit, *regEdit;
+ bool searchVisible;
+ bool regVisible;
+ bool m_fontVisible, m_twoTouch;
+- static unsigned long m_uid;
+- long unsigned get_unique_id() { return m_uid++; }
+ /*
+ void resizeEvent( QResizeEvent * r)
+ {
+@@ -451,7 +457,7 @@ private slots:
+ CList<Bkmk>* pOpenlist;
+ infowin* m_infoWin;
+ GraphicWin* m_graphicwin;
+- QProgressBar* pbar;
++ Q3ProgressBar* pbar;
+ bool m_fBkmksChanged;
+ // int m_nRegAction;
+ regedit_type m_nRegAction;
+diff --git a/QtrListView.cpp b/QtrListView.cpp
+index 67040f8..e73a395 100644
+--- a/QtrListView.cpp
++++ b/QtrListView.cpp
+@@ -1,4 +1,7 @@
+ #include "QtrListView.h"
++#include <QtGui/QKeyEvent>
++#include <qnamespace.h>
++using namespace Qt;
+
+ void QtrListView::keyPressEvent(QKeyEvent* e)
+ {
+@@ -19,6 +22,6 @@ void QtrListView::keyPressEvent(QKeyEvent* e)
+ emit OnCancelButton();
+ break;
+ default:
+- QListView::keyPressEvent(e);
++ Q3ListView::keyPressEvent(e);
+ }
+ }
+diff --git a/QtrListView.h b/QtrListView.h
+index c1b7f4d..02a74cc 100644
+--- a/QtrListView.h
++++ b/QtrListView.h
+@@ -2,18 +2,19 @@
+ #define __QTRLISTVIEW_H
+
+ #include <qlistview.h>
++#include <Qt3Support/Q3ListViewItem>
+
+-class QtrListView : public QListView
++class QtrListView : public Q3ListView
+ {
+ Q_OBJECT
+
+ virtual void keyPressEvent(QKeyEvent* e);
+ public:
+- QtrListView(QWidget* parent, char* name) : QListView(parent, name) {};
++ QtrListView(QWidget* parent, char* name) : Q3ListView(parent, name) {};
+
+ signals:
+- void OnOKButton(QListViewItem*);
+- void OnCentreButton(QListViewItem*);
++ void OnOKButton(Q3ListViewItem*);
++ void OnCentreButton(Q3ListViewItem*);
+ void OnCancelButton();
+ };
+
+diff --git a/Reb.cpp b/Reb.cpp
+index 65de9f6..9e6e552 100644
+--- a/Reb.cpp
++++ b/Reb.cpp
+@@ -105,8 +105,7 @@ QImage* CReb::getPicture(const QString& ref)
+ char* imgbuffer = new char[rs.len];
+ fseek(fin, page2pos(iter.data()), SEEK_SET);
+ fread(imgbuffer, rs.len, 1, fin);
+- QByteArray arr;
+- arr.assign((const char*)imgbuffer, rs.len);
++ QByteArray arr((const char*)imgbuffer, rs.len);
+ QImage* qimage = new QImage(arr);
+ return qimage;
+ }
+@@ -581,7 +580,7 @@ void RBPage::startpage(UInt32 pos, UInt32 _cp, bool _isCompressed, UInt32 _len)
+ int CReb::getch()
+ {
+ if (tagoffset < tagstring.length())
+- return tagstring[tagoffset++].unicode();
++ return tagstring.at(tagoffset++).unicode();
+ else
+ return currentpage.getch(this);
+ }
+diff --git a/TableDialog.cpp b/TableDialog.cpp
+index b67d534..d0748d6 100644
+--- a/TableDialog.cpp
++++ b/TableDialog.cpp
+@@ -4,7 +4,7 @@ CTableDialog::CTableDialog(const QFont& f, const QString& tabtext, bool fs, QWid
+ {
+ setCaption("Table View");
+ QVBoxLayout *tmp = new QVBoxLayout(this);
+- QTextView* qtv = new QTextView(this);
++ Q3TextView* qtv = new Q3TextView(this);
+ qtv->setFont(f);
+ tmp->addWidget(qtv);
+ qtv->setText(tabtext);
+diff --git a/TableDialog.h b/TableDialog.h
+index 2257a81..14b1cf2 100644
+--- a/TableDialog.h
++++ b/TableDialog.h
+@@ -2,8 +2,11 @@
+ #define __TABLEDIALOG_H
+
+ #include <qdialog.h>
+-#include <qtextview.h>
++#include <Qt3Support/Q3TextView>
++#include <QtGui/QKeyEvent>
+ #include <qlayout.h>
++#include <qnamespace.h>
++using namespace Qt;
+
+ class CTableDialog : public QDialog
+ {
+diff --git a/ToolbarPrefs.cpp b/ToolbarPrefs.cpp
+index 56c4e9b..10fc6ec 100644
+--- a/ToolbarPrefs.cpp
++++ b/ToolbarPrefs.cpp
+@@ -22,6 +22,7 @@
+ #ifdef USEQPE
+ #include <qpe/menubutton.h>
+ #endif
++#include <Qt3Support/Q3GroupBox>
+
+ CBarPrefs::CBarPrefs(const QString& appdir, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true), config( appdir )
+ {
+@@ -222,7 +223,7 @@ CFileBarPrefs::CFileBarPrefs( Config& _config, QWidget* parent, const char* nam
+ config.setGroup( "Toolbar" );
+ QVBoxLayout* vb = new QVBoxLayout(this);
+
+- QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "File", this);
++ Q3GroupBox* bg = new Q3GroupBox(2, Qt::Horizontal, "File", this);
+ vb->addWidget(bg);
+
+ open = new QCheckBox( tr("Open"), bg );
+@@ -263,7 +264,7 @@ CNavBarPrefs::CNavBarPrefs( Config& _config, QWidget* parent, const char* name,
+ config.setGroup( "Toolbar" );
+ QVBoxLayout* vb = new QVBoxLayout(this);
+
+- QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "Navigation", this);
++ Q3GroupBox* bg = new Q3GroupBox(2, Qt::Horizontal, "Navigation", this);
+ vb->addWidget(bg);
+ scroll = new QCheckBox( tr("Scroll"), bg );
+ scroll->setChecked(config.readBoolEntry( "Scroll", false ));
+@@ -324,7 +325,7 @@ CViewBarPrefs::CViewBarPrefs( Config& _config, QWidget* parent, const char* nam
+ {
+ QVBoxLayout* vb = new QVBoxLayout(this);
+
+- QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "View", this);
++ Q3GroupBox* bg = new Q3GroupBox(2, Qt::Horizontal, "View", this);
+ vb->addWidget(bg);
+
+ config.setGroup( "Toolbar" );
+@@ -381,7 +382,7 @@ CMarkBarPrefs::CMarkBarPrefs( Config& _config, QWidget* parent, const char* nam
+ {
+ QVBoxLayout* vb = new QVBoxLayout(this);
+
+- QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "Marks", this);
++ Q3GroupBox* bg = new Q3GroupBox(2, Qt::Horizontal, "Marks", this);
+ vb->addWidget(bg);
+ mark = new QCheckBox( tr("Bookmark"), bg );
+ mark->setChecked(config.readBoolEntry( "Mark", false ));
+@@ -443,13 +444,13 @@ CMiscBarPrefs::CMiscBarPrefs( QWidget* parent, const char* name, WFlags fl )
+
+ hl->setMargin( 0 );
+
+- QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, "Dialogs", this);
++ Q3GroupBox* gb = new Q3GroupBox(1, Qt::Horizontal, "Dialogs", this);
+ floating = new QCheckBox(gb);
+ floating->setText(tr("Floating"));
+ hl->addWidget( gb, 0, 0 );
+
+
+- gb = new QGroupBox(1, Qt::Horizontal, "Bars (Restart)", this);
++ gb = new Q3GroupBox(1, Qt::Horizontal, "Bars (Restart)", this);
+
+ // QLabel* ql = new QLabel("Restart to apply changes", gb);
+ // TextLabel = new QLabel( gb );
+@@ -485,7 +486,7 @@ CMiscBarPrefs::CMiscBarPrefs( QWidget* parent, const char* name, WFlags fl )
+
+ hl->addWidget(gb, 0, 1);
+
+- gb = new QGroupBox(1, Qt::Horizontal, "QT Scroll Bar", this);
++ gb = new Q3GroupBox(1, Qt::Horizontal, "QT Scroll Bar", this);
+
+ #ifdef USECOMBO
+ qtscroll = new QComboBox(gb);
+@@ -497,7 +498,7 @@ CMiscBarPrefs::CMiscBarPrefs( QWidget* parent, const char* name, WFlags fl )
+ qtscroll->insertItem(tr("Left"));
+
+ hl->addWidget(gb, 1, 0);
+- gb = new QGroupBox(1, Qt::Horizontal, "Miniscroll", this);
++ gb = new Q3GroupBox(1, Qt::Horizontal, "Miniscroll", this);
+
+ #ifdef USECOMBO
+ localscroll = new QComboBox(gb);
+@@ -527,7 +528,7 @@ CIndBarPrefs::CIndBarPrefs( Config& _config, QWidget* parent, const char* name,
+ {
+ QVBoxLayout* vb = new QVBoxLayout(this);
+
+- QGroupBox* bg = new QGroupBox(1, Qt::Horizontal, "Indicators", this);
++ Q3GroupBox* bg = new Q3GroupBox(1, Qt::Horizontal, "Indicators", this);
+ vb->addWidget(bg);
+ indannotate = new QCheckBox( tr("Annotation"), bg );
+ indannotate->setChecked(config.readBoolEntry( "Annotation indicator", false ));
+diff --git a/ToolbarPrefs.h b/ToolbarPrefs.h
+index 9df8940..2a9d5cd 100644
+--- a/ToolbarPrefs.h
++++ b/ToolbarPrefs.h
+@@ -11,12 +11,14 @@
+
+ #include <qvariant.h>
+ #include <qwidget.h>
+-#include <qtabdialog.h>
++#include <Qt3Support/Q3TabDialog>
+ #include <qtabwidget.h>
+ #include <qspinbox.h>
+ #include <qcheckbox.h>
+ #include <qcombobox.h>
+ #include <qlineedit.h>
++#include <qnamespace.h>
++using namespace Qt;
+ #ifdef USEQPE
+ #include <qpe/menubutton.h>
+ #include <qpe/config.h>
+@@ -25,6 +27,8 @@
+ #endif
+ #define USECOMBO
+
++#include <QtGui/QKeyEvent>
++
+ class QVBoxLayout;
+ class QHBoxLayout;
+ class QGridLayout;
+diff --git a/URLDialog.cpp b/URLDialog.cpp
+index dd4568b..9497979 100644
+--- a/URLDialog.cpp
++++ b/URLDialog.cpp
+@@ -5,7 +5,7 @@ CURLDialog::CURLDialog(const QString& fname, bool fs, QWidget* parent, const cha
+ {
+ setCaption(tr("Save URL"));
+ QVBoxLayout *tmp = new QVBoxLayout(this);
+- QVButtonGroup* vb = new QVButtonGroup(fname, this);
++ Q3VButtonGroup* vb = new Q3VButtonGroup(fname, this);
+ tmp->addWidget(vb);
+ m_clipboard = new QCheckBox(tr("Clipboard"), vb);
+ m_localfile = new QCheckBox(tr("Local file"), vb);
+diff --git a/URLDialog.h b/URLDialog.h
+index 792d13a..fffaf2b 100644
+--- a/URLDialog.h
++++ b/URLDialog.h
+@@ -11,14 +11,17 @@
+
+ #include <qvariant.h>
+ #include <qwidget.h>
+-#include <qtabdialog.h>
++#include <Qt3Support/Q3TabDialog>
+ #include <qtabwidget.h>
+ #include <qspinbox.h>
+ #include <qcheckbox.h>
+ #include <qcombobox.h>
+ #include <qlineedit.h>
+ //#include <qpe/menubutton.h>
+-#include <qvbuttongroup.h>
++#include <Qt3Support/Q3VButtonGroup>
++#include <QtGui/QKeyEvent>
++#include <qnamespace.h>
++using namespace Qt;
+
+ class QVBoxLayout;
+ class QHBoxLayout;
+diff --git a/arrierego.cpp b/arrierego.cpp
+index be2a3fa..b4f857f 100644
+--- a/arrierego.cpp
++++ b/arrierego.cpp
+@@ -114,8 +114,7 @@ void CArriere::setlink(QString& fn, const QString& wrd)
+
+ QImage* CArriere::imagefromdata(UInt8* imgbuffer, UInt32 imgsize)
+ {
+- QByteArray arr;
+- arr.assign((const char*)imgbuffer, imgsize);
++ QByteArray arr((const char*)imgbuffer, imgsize);
+
+ QImage* qimage = new QImage(arr);
+
+diff --git a/cbkmkselector.h b/cbkmkselector.h
+index ec0c6e8..e36d31a 100644
+--- a/cbkmkselector.h
++++ b/cbkmkselector.h
+@@ -1,13 +1,15 @@
+ #include <qwidget.h>
+-#include <qlistbox.h>
++#include <Qt3Support/Q3ListBox>
+ #include <qpushbutton.h>
+ #include <qlayout.h>
++#include <qnamespace.h>
++using namespace Qt;
+
+-class CBkmkSelectorItem : public QListBoxText
++class CBkmkSelectorItem : public Q3ListBoxText
+ {
+ int m_ref;
+ public:
+- CBkmkSelectorItem(const QString& _t, int ref) : QListBoxText(_t), m_ref(ref)
++ CBkmkSelectorItem(const QString& _t, int ref) : Q3ListBoxText(_t), m_ref(ref)
+ {
+ }
+ int reference() { return m_ref; }
+@@ -18,7 +20,7 @@ class CBkmkSelector : public QWidget
+
+ Q_OBJECT
+
+- QListBox* bkmkselector;
++ Q3ListBox* bkmkselector;
+ QPushButton* exitButton;
+ /*
+ void keyPressEvent ( QKeyEvent * e )
+@@ -38,7 +40,7 @@ signals:
+ void selected(int i);
+ void cancelled();
+ private slots:
+- void slotSelected(QListBoxItem* t)
++ void slotSelected(Q3ListBoxItem* t)
+ {
+ if (t != NULL)
+ {
+@@ -64,13 +66,13 @@ public:
+
+ QVBoxLayout* grid = new QVBoxLayout(this);
+ QHBoxLayout* hgrid = new QHBoxLayout();
+- bkmkselector = new QListBox(this, tr("Bookmarks"));
++ bkmkselector = new Q3ListBox(this, tr("Bookmarks"));
+ QPushButton* _sort = new QPushButton(tr("Sort"), this);
+ connect(_sort, SIGNAL(clicked()), this, SLOT( slotSort() ) );
+ exitButton = new QPushButton(tr("Cancel"), this);
+ // connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) );
+- connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) );
+- connect(bkmkselector, SIGNAL( returnPressed(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) );
++ connect(bkmkselector, SIGNAL( clicked(Q3ListBoxItem*) ), this, SLOT( slotSelected(Q3ListBoxItem*) ) );
++ connect(bkmkselector, SIGNAL( returnPressed(Q3ListBoxItem*) ), this, SLOT( slotSelected(Q3ListBoxItem*) ) );
+ connect(exitButton, SIGNAL( clicked() ), this, SLOT( slotCancel() ) );
+ grid->addWidget(bkmkselector,1);
+ grid->addLayout(hgrid);
+diff --git a/decompress.cpp b/decompress.cpp
+index 6034e01..979b642 100644
+--- a/decompress.cpp
++++ b/decompress.cpp
+@@ -2,6 +2,7 @@
+ #include "decompress.h"
+ #include <zlib.h>
+ #include <stdlib.h>
++#include "uqtcommon.h"
+
+ size_t UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize)
+ {
+@@ -60,17 +61,7 @@ size_t (*getdecompressor(char* _s))(UInt8*, size_t, UInt8*, size_t)
+
+ size_t (*getdecompressor(char* _s))(UInt8*, size_t, UInt8*, size_t)
+ {
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString codecpath(getenv("OPIEDIR"));
+-#else
+- QString codecpath(getenv("QTDIR"));
+-#endif
+- codecpath += "/plugins/reader/support/libpluckerdecompress.so";
+-#else
+- QString codecpath(getenv("READERDIR"));
+- codecpath += "/support/libpluckerdecompress.so";
+-#endif
++ QString codecpath = uqt_supportpath()+"/libpluckerdecompress.so";
+ qDebug("Codec:%s", (const char*)codecpath);
+ if (QFile::exists(codecpath))
+ {
+diff --git a/ebookcodec.h b/ebookcodec.h
+index 4229fb9..091894a 100644
+--- a/ebookcodec.h
++++ b/ebookcodec.h
+@@ -1,4 +1,5 @@
+ #include "CExpander.h"
++#include "uqtcommon.h"
+
+ #include <qfileinfo.h>
+ #include <qdir.h>
+@@ -22,17 +23,7 @@ class ebookcodec : public CExpander_Interface
+ }
+ ebookcodec(const QString& _s) : codec(NULL), handle(NULL), status(0)
+ {
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString codecpath(getenv("OPIEDIR"));
+-#else
+- QString codecpath(getenv("QTDIR"));
+-#endif
+- codecpath += "/plugins/reader/codecs/";
+-#else
+- QString codecpath(getenv("READERDIR"));
+- codecpath += "/codecs/";
+-#endif
++ QString codecpath = uqt_codecspath();
+ codecpath += _s;
+ if (QFile::exists(codecpath))
+ {
+diff --git a/fileBrowser.cpp b/fileBrowser.cpp
+index c8c371a..688f035 100644
+--- a/fileBrowser.cpp
++++ b/fileBrowser.cpp
+@@ -53,18 +53,18 @@ fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, boo
+ ListView->addColumn( tr( "Name" ) );
+ ListView->setSorting( 2, FALSE);
+ ListView->addColumn( tr( "Size" ) );
+- ListView->setSelectionMode(QListView::Single);
++ ListView->setSelectionMode(Q3ListView::Single);
+ ListView->setAllColumnsShowFocus( TRUE );
+- ListView->setColumnWidthMode(0, ((modal) ? QListView::Manual : QListView::Maximum));
+- ListView->setColumnWidthMode(1, QListView::Manual);
++ ListView->setColumnWidthMode(0, ((modal) ? Q3ListView::Manual : Q3ListView::Maximum));
++ ListView->setColumnWidthMode(1, Q3ListView::Manual);
+
+ // signals and slots connections
+ connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) );
+ connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) );
+- connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) );
+- connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
+- connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
+- connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
++ connect( ListView, SIGNAL(doubleClicked( Q3ListViewItem*)), SLOT(listDoubleClicked(Q3ListViewItem *)) );
++ connect( ListView, SIGNAL(clicked( Q3ListViewItem*)), SLOT(listClicked(Q3ListViewItem *)) );
++ connect( ListView, SIGNAL(OnOKButton( Q3ListViewItem*)), SLOT(listClicked(Q3ListViewItem *)) );
++ connect( ListView, SIGNAL(OnCentreButton( Q3ListViewItem*)), SLOT(listClicked(Q3ListViewItem *)) );
+ connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) );
+
+ QVBoxLayout* grid = new QVBoxLayout(this);
+@@ -143,16 +143,13 @@ void fileBrowser::populateList()
+ currentDir.setNameFilter(filterStr);
+ // currentDir.setNameFilter("*.txt;*.etx");
+ QString fileL, fileS;
+- const QFileInfoList *list = currentDir.entryInfoList();
+- QFileInfoListIterator it(*list);
+- QFileInfo *fi;
+- while ( (fi=it.current()) )
+- {
+- if (fi->fileName() != ".")
++ QFileInfoList list = currentDir.entryInfoList();
++ for(QFileInfoListIterator it=list.begin();it!=list.end();++it) {
++ if (it->fileName() != ".")
+ {
+- fileS.sprintf( "%10li", fi->size() );
+- fileL.sprintf( "%s",fi->fileName().data() );
+- if( fi->isDir() )
++ fileS.sprintf( "%10li", it->size() );
++ fileL.sprintf( "%s",it->fileName().data() );
++ if( it->isDir() )
+ {
+ fileL+="/";
+ }
+@@ -160,9 +157,8 @@ void fileBrowser::populateList()
+ {
+ //// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
+ }
+- new QListViewItem( ListView,fileL,fileS );
++ new Q3ListViewItem( ListView,fileL,fileS );
+ }
+- ++it;
+ }
+ ListView->setSorting( 2, FALSE);
+ dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath());
+@@ -174,7 +170,7 @@ void fileBrowser::upDir()
+ //// qDebug(currentDir.canonicalPath());
+ }
+
+-void fileBrowser::listClicked(QListViewItem *selectedItem)
++void fileBrowser::listClicked(Q3ListViewItem *selectedItem)
+ {
+ if (selectedItem == NULL) return;
+ QString strItem=selectedItem->text(0);
+@@ -196,12 +192,12 @@ void fileBrowser::listClicked(QListViewItem *selectedItem)
+
+ if(QDir(strItem).exists())
+ {
+- currentDir.cd(strItem, TRUE);
++ currentDir.cd(strItem);
+ populateList();
+ }
+ } else
+ {
+- QListViewItem *selectedItem = ListView->selectedItem();
++ Q3ListViewItem *selectedItem = ListView->selectedItem();
+ if (selectedItem == NULL)
+ {
+ filename = "";
+@@ -218,7 +214,7 @@ void fileBrowser::listClicked(QListViewItem *selectedItem)
+ }
+
+ // you may want to switch these 2 functions. I like single clicks
+-void fileBrowser::listDoubleClicked(QListViewItem *selectedItem)
++void fileBrowser::listDoubleClicked(Q3ListViewItem *selectedItem)
+ {
+ }
+
+@@ -253,7 +249,7 @@ void fileBrowser::setHidden(bool _hidden)
+
+ void fileBrowser::onReturn()
+ {
+- QListViewItem *selectedItem = ListView->selectedItem();
++ Q3ListViewItem *selectedItem = ListView->selectedItem();
+ if (selectedItem == NULL)
+ {
+ filename = m_filename->text();
+@@ -282,7 +278,7 @@ void fileBrowser::onHome()
+
+ void fileBrowser::setdir(const QString& s)
+ {
+- currentDir.cd(s, TRUE);
++ currentDir.cd(s);
+ populateList();
+ chdir(s);
+ }
+diff --git a/fileBrowser.h b/fileBrowser.h
+index c536e96..959e866 100644
+--- a/fileBrowser.h
++++ b/fileBrowser.h
+@@ -22,6 +22,9 @@ blah,blah,blah
+ #include <qstringlist.h>
+ #include <qlabel.h>
+ #include <qstring.h>
++#include <qnamespace.h>
++using namespace Qt;
++#include <Qt3Support/Q3ListViewItem>
+
+ class QVBoxLayout;
+ class QHBoxLayout;
+@@ -50,7 +53,7 @@ class fileBrowser : public QDialog
+ QFile file;
+ QString getCurrentFile();
+ QLineEdit* m_filename;
+- int filterspec;
++ QDir::Filters filterspec;
+ // QDir::FilterSpec filterspec;
+
+ //QListViewItem * item;
+@@ -60,8 +63,8 @@ class fileBrowser : public QDialog
+ QString filename;
+ private slots:
+ void upDir();
+- void listDoubleClicked(QListViewItem *);
+- void listClicked(QListViewItem *);
++ void listDoubleClicked(Q3ListViewItem *);
++ void listClicked(Q3ListViewItem *);
+ void OnRoot();
+ void OnCancel();
+ void setHidden(bool);
+diff --git a/hrule.cpp b/hrule.cpp
+index d697acb..4705057 100644
+--- a/hrule.cpp
++++ b/hrule.cpp
+@@ -1,4 +1,5 @@
+ #include <qimage.h>
++#include <qpixmap.h>
+
+ QImage* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b)
+ {
+diff --git a/infowin.cpp b/infowin.cpp
+index 816a09f..0a25571 100644
+--- a/infowin.cpp
++++ b/infowin.cpp
+@@ -1,7 +1,7 @@
+ #include "infowin.h"
+ #include "version.h"
+ #include <stdio.h>
+-#include <qmultilineedit.h>
++#include <Qt3Support/Q3MultiLineEdit>
+ #include <qlayout.h>
+ #include <qpushbutton.h>
+ #include "names.h"
+@@ -20,9 +20,9 @@ infowin::infowin( QWidget *parent, const char *name, WFlags f) :
+ QWidget(parent, name, f)
+ {
+ QVBoxLayout* vl = new QVBoxLayout(this);
+- aboutbox = new QMultiLineEdit(this);
++ aboutbox = new Q3MultiLineEdit(this);
+ aboutbox->setReadOnly(true);
+- aboutbox->setWordWrap(QMultiLineEdit::WidgetWidth);
++ aboutbox->setWordWrap(Q3MultiLineEdit::WidgetWidth);
+ //grid->addWidget(l, 5, 0);
+ vl->addWidget(aboutbox);
+ QGridLayout* grid = new QGridLayout(vl, 10, 2);
+diff --git a/infowin.h b/infowin.h
+index c003998..92cff3a 100644
+--- a/infowin.h
++++ b/infowin.h
+@@ -2,6 +2,9 @@
+ #define __INFOWIN_H
+
+ #include <qlabel.h>
++#include <Qt3Support/Q3MultiLineEdit>
++#include <qnamespace.h>
++using namespace Qt;
+ class QString;
+ class QMultiLineEdit;
+
+@@ -17,7 +20,7 @@ Q_OBJECT
+ QLabel* docSize;
+ QLabel* docLocation;
+ QLabel* zoom;
+- QMultiLineEdit* aboutbox;
++ Q3MultiLineEdit* aboutbox;
+ public:
+ infowin( QWidget *parent=0, const char *name=0, WFlags f = 0);
+ void setFileSize(int sz) { fileSize->setNum(sz); }
+diff --git a/opiedir/include.pro b/opiedir/include.pro
+new file mode 100644
+index 0000000..44c572b
+--- /dev/null
++++ b/opiedir/include.pro
+@@ -0,0 +1,15 @@
++DEFINES -= OPIE USEQPE
++DEFINES += QT3_SUPPORT
++
++LIBS -= -lopiecore2 -lopieui2 -lqpe
++LIBS += -L${OPIEDIR}/lib
++
++QT += core gui qt3support
++
++isEmpty(UQT_LIBDIR) {
++ UQT_LIBDIR = /usr/lib/uqtreader
++}
++isEmpty(UQT_DATADIR) {
++ UQT_DATADIR = /usr/share/uqtreader
++}
++DEFINES += UQT_LIBDIR='\\"$$UQT_LIBDIR\\"' UQT_DATADIR='\\"$$UQT_DATADIR\\"'
+diff --git a/outputcodec.h b/outputcodec.h
+index 727575c..dfba5a2 100644
+--- a/outputcodec.h
++++ b/outputcodec.h
+@@ -2,6 +2,8 @@
+ #include <qfileinfo.h>
+ #include <qdir.h>
+
++#include "uqtcommon.h"
++
+ #ifdef USEQPE
+ #include <qpe/global.h>
+ #endif
+@@ -29,17 +31,8 @@ class outputcodec : public COutput
+ }
+ outputcodec(const QString& _s) : codec(NULL), handle(NULL), status(-1)
+ {
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString codecpath(getenv("OPIEDIR"));
+-#else
+- QString codecpath(getenv("QTDIR"));
+-#endif
+- codecpath += "/plugins/reader/outcodecs/lib";
+-#else
+- QString codecpath(getenv("READERDIR"));
+- codecpath += "/outcodecs/lib";
+-#endif
++ QString codecpath = uqt_outcodecspath();
++ codecpath += "lib";
+ codecpath += _s;
+ codecpath += ".so";
+ if (QFile::exists(codecpath))
+diff --git a/preferences.cpp b/preferences.cpp
+index 67960ed..044a003 100755
+--- a/preferences.cpp
++++ b/preferences.cpp
+@@ -14,7 +14,7 @@ Config::Config(const QString& _fn) : fname(_fn)
+ {
+ QTextStream t(&fl);
+ QString key, value;
+- while (!t.eof())
++ while (!t.atEnd())
+ {
+ QString data = t.readLine();
+ int colon = data.find(':');
+diff --git a/reader/reader.pro b/reader/reader.pro
+index dc6a5dd..7552bd1 100644
+--- a/reader/reader.pro
++++ b/reader/reader.pro
+@@ -51,7 +51,8 @@ HEADERS = Aportis.h \
+ util.h \
+ utypes.h \
+ version.h \
+- ztxt.h
++ ztxt.h \
++ preferences.h
+
+ SOURCES = BuffDoc.cpp \
+ ButtonPrefs.cpp \
+@@ -76,7 +77,8 @@ SOURCES = BuffDoc.cpp \
+ main.cpp \
+ orkey.cpp \
+ util.cpp \
+- version.cpp
++ version.cpp \
++ preferences.cpp
+
+ INTERFACES =
+ DESTDIR = $(OPIEDIR)/bin
+diff --git a/striphtml.cpp b/striphtml.cpp
+index a2ad56b..1346dc3 100644
+--- a/striphtml.cpp
++++ b/striphtml.cpp
+@@ -8,6 +8,7 @@
+ #include "CDrawBuffer.h"
+ #include "striphtml.h"
+ #include "hrule.h"
++#include "uqtcommon.h"
+
+ #include <qregexp.h>
+ #include <qimage.h>
+@@ -209,14 +210,14 @@ QString striphtml::dehtml(const QString& _info)
+ QString info;
+ for (int i = 0; i < _info.length(); i++)
+ {
+- tchar ch = _info[i];
++ tchar ch = _info[i].unicode();
+ if (ch == '%')
+ {
+ ch = 0;
+ for (int j = 0; j < 2; j++)
+ {
+ ch <<= 4;
+- tchar ch1 = _info[++i];
++ tchar ch1 = _info[++i].unicode();
+ if ('0' <= ch1 && ch1 <= '9')
+ {
+ ch += ch1 - '0';
+@@ -285,7 +286,7 @@ bool striphtml::findanchor(const QString& _info)
+ while (1)
+ {
+ // qApp->processEvents();
+- if ((offset = name.match(toQString(test.data()))) != -1) break;
++ if ((offset = name.exactMatch(toQString(test.data()))) != -1) break;
+ #ifdef USEQPE
+ if ((offset = id.match(toQString(test.data()))) != -1) break;
+ #endif
+@@ -325,17 +326,7 @@ striphtml::~striphtml()
+ void striphtml::initentmap()
+ {
+ entmap = new QMap<QString, tchar>;
+-#ifdef USEQPE
+-#ifdef OPIE
+- QString fname(getenv("OPIEDIR"));
+-#else
+- QString fname(getenv("QTDIR"));
+-#endif
+- fname += "/plugins/reader/data";
+-#else
+- QString fname(getenv("READERDIR"));
+- fname += "/data";
+-#endif
++ QString fname = uqt_datapath();
+ QFileInfo fi;
+ fi.setFile(fname, "HTMLentities");
+ if (fi.exists())
+@@ -347,7 +338,7 @@ void striphtml::initentmap()
+ {
+ QTextStream t(&fl);
+ QString key, value;
+- while (!t.eof())
++ while (!t.atEnd())
+ {
+ QString data = t.readLine();
+ int colon = data.find(':');
+diff --git a/uqtcommon.h b/uqtcommon.h
+new file mode 100644
+index 0000000..e551740
+--- /dev/null
++++ b/uqtcommon.h
+@@ -0,0 +1,57 @@
++#ifndef __UQTCOMMON_H
++#define __UQTCOMMON_H
++
++#include <qstring.h>
++
++#ifdef USEQPE
++# ifdef OPIE
++# define Q_DIR_ENV "OPIEDIR"
++# else
++# define Q_DIR_ENV "QTDIR"
++# endif
++#endif
++
++inline QString uqt_libdir() {
++# ifdef USEQPE
++ return QString(getenv(Q_DIR_ENV))+"/plugins/reader";
++# else
++ const char *rd = getenv("READERDIR");
++ if(rd) return rd;
++ return UQT_LIBDIR;
++# endif
++}
++inline QString uqt_datadir() {
++# ifdef USEQPE
++ return QString(geenv(Q_DIR_ENV));
++# else
++ const char *rd = getenv("READERDIR");
++ if(rd) return rd;
++ return UQT_DATADIR;
++# endif
++}
++
++inline QString uqt_codecspath() {
++ return uqt_libdir()+"/codecs/";
++}
++inline QString uqt_outcodecspath() {
++ return uqt_libdir()+"/outcodecs/";
++}
++inline QString uqt_filterspath() {
++ return uqt_libdir()+"/filters/";
++}
++inline QString uqt_supportpath() {
++ return uqt_libdir()+"/support/";
++}
++
++inline QString uqt_picspath() {
++ return uqt_datadir()+"/pics/";
++}
++inline QString uqt_datapath() {
++# ifdef QPE
++ return uqt_datadir()+"/plugins/reader/data";
++# else
++ return uqt_datadir()+"/data";
++# endif
++}
++
++#endif /* __UQTCOMMON_H */
+diff --git a/version.cpp b/version.cpp
+index aafb3d8..743ef38 100644
+--- a/version.cpp
++++ b/version.cpp
+@@ -2,9 +2,9 @@
+ #include "names.h"
+ #include <qmessagebox.h>
+
+-#include <qmultilineedit.h>
++#include <Qt3Support/Q3MultiLineEdit>
+ #include <qlayout.h>
+-#include <qtextview.h>
++#include <Qt3Support/Q3TextView>
+ class versionbox : public QDialog
+ {
+ public:
+@@ -19,7 +19,7 @@ public:
+ box->setWordWrap(QMultiLineEdit::WidgetWidth);
+ box->setText(txt);
+ */
+- QTextView* box = new QTextView(this);
++ Q3TextView* box = new Q3TextView(this);
+ v->addWidget(box);
+ box->setText(txt);
+ #ifdef USEQPE
diff --git a/packages/opie-reader/opie-reader_1.2.3.bb b/packages/opie-reader/opie-reader_1.2.3.bb
new file mode 100644
index 0000000000..43632416c5
--- /dev/null
+++ b/packages/opie-reader/opie-reader_1.2.3.bb
@@ -0,0 +1,8 @@
+require ${PN}.inc
+
+PR = r2
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/opie-reader \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
+
diff --git a/packages/opie-reader/opie-reader_cvs.bb b/packages/opie-reader/opie-reader_cvs.bb
index 2f844d8dfd..36c8c06157 100644
--- a/packages/opie-reader/opie-reader_cvs.bb
+++ b/packages/opie-reader/opie-reader_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = r2
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/apps/opie-reader \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-reader/uqtreader_cvs.bb b/packages/opie-reader/uqtreader_cvs.bb
new file mode 100644
index 0000000000..04b03243c4
--- /dev/null
+++ b/packages/opie-reader/uqtreader_cvs.bb
@@ -0,0 +1,72 @@
+DESCRIPTION = "qt4-x11 opie-reader ebook reader port"
+SECTION = "x11/applications"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+RRECOMMENDS="${PN}-filter-html"
+
+SRCDATE = "20070601"
+PV = "1.2.2opie+cvs${SRCDATE}"
+PR = "r3"
+
+SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/apps/opie-reader \
+ ${HANDHELDS_CVS};module=opie/pics \
+ ${HANDHELDS_CVS};module=opie/apps \
+ file://qt4.patch;patch=1"
+S = "${WORKDIR}/opie-reader"
+
+export OPIEDIR="${S}/opiedir"
+
+inherit qmake-base qt4x11
+
+do_configure() {
+ ${OE_QMAKE_QMAKE} -recursive opie-reader.pro UQT_DATADIR="${datadir}/${PN}" UQT_LIBDIR="${libdir}/${PN}"
+}
+do_compile() {
+ oe_runmake
+}
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/opiedir/bin/opie-reader ${D}${bindir}/uqtreader
+ install -d ${D}${libdir}/${PN}
+ cp -Rpd ${S}/opiedir/lib/lib*.so.* ${D}${libdir}
+ for so in ${S}/opiedir/plugins/reader/{codecs,filters,outcodecs,support}/lib*.so ; do
+ soso="${so#${S}/opiedir/plugins/reader/}"
+ dd="${D}${libdir}/${PN}/$(dirname "$soso")"
+ install -d "$dd"
+ install -m 0755 "$so" "${dd}/$(basename "$soso")"
+ done
+ install -d ${D}${datadir}/${PN}
+ cp -Rpd ${S}/opiedir/plugins/reader/data ${D}${datadir}/${PN}
+ install -d ${D}${datadir}/${PN}/pics
+ cp \
+ ${WORKDIR}/pics/opie-reader/*.png \
+ ${WORKDIR}/pics/inline/{AppsIcon,SettingsIcon,fileopen,close,cut,UtilsIcon,1to1,find,start,finish,rotate,up,down,back,home,forward,paste,fullscreen,repeat,zoom,mag,exec,new,copy,next,enter}.png \
+ ${D}${datadir}/${PN}/pics/
+ install -d ${D}${datadir}/applications
+ sed <${WORKDIR}/apps/Applications/opie-reader.desktop \
+ -e '/^CanFastLoad/d' -e 's,^Icon=.*,Icon=${datadir}/${PN}/pics/OpieReader.png,g' \
+ -e 's,^Exec=.*,Exec=${bindir}/uqtreader,g' \
+ -e '$aType=Application' -e 'aCategories=Applications' \
+ -e '/^Name/s/Opie/UQT/g' \
+ >${D}${datadir}/applications/uqtreader.desktop
+}
+PACKAGES += "${PN}-pdblib ${PN}-codeclib \
+ ${PN}-codec-aportis ${PN}-codec-arrierego ${PN}-codec-chm ${PN}-codec-plucker ${PN}-codec-reb ${PN}-codec-weasel ${PN}-codec-isilo ${PN}-codec-ppms \
+ ${PN}-filter-html ${PN}-output-flitecmd"
+
+
+FILES_${PN}-pdblib = "${libdir}/libreader_pdb.so.*"
+FILES_${PN}-codeclib = "${libdir}/libreader_codec.so.*"
+FILES_${PN}-codec-aportis = "${libdir}/uqtreader/codecs/libAportis.so"
+FILES_${PN}-codec-arrierego = "${libdir}/uqtreader/codecs/libArriereGo.so"
+FILES_${PN}-codec-chm = "${libdir}/uqtreader/codecs/libCHM.so"
+DEBIAN_NOAUTONAME_${PN}-codec-plucker = 1
+FILES_${PN}-codec-plucker = "${libdir}/uqtreader/codecs/libPlucker.so ${libdir}/lib*plucker*.so.* ${libdir}/uqtreader/support/libpluckerdecompress.so"
+FILES_${PN}-codec-reb = "${libdir}/uqtreader/codecs/libReb.so"
+FILES_${PN}-codec-weasel = "${libdir}/uqtreader/codecs/libWeasel.so"
+FILES_${PN}-codec-isilo = "${libdir}/uqtreader/codecs/libiSilo.so"
+FILES_${PN}-codec-ppms = "${libdir}/uqtreader/codecs/libppms.so"
+FILES_${PN}-filter-html = "${libdir}/uqtreader/filters/libHTMLfilter.so"
+FILES_${PN}-output-flitecmd = "${libdir}/uqtreader/outcodecs/libflitecmd.so"
+FILES_${PN} = "${bindir}/uqtreader ${datadir}/uqtreader/data/* ${datadir}/uqtreader/pics/* ${datadir}/applications/*.desktop"
diff --git a/packages/opie-recorder/opie-recorder_1.2.3.bb b/packages/opie-recorder/opie-recorder_1.2.3.bb
new file mode 100644
index 0000000000..07dd91773b
--- /dev/null
+++ b/packages/opie-recorder/opie-recorder_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/multimedia/opierec \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-remote/opie-remote_1.2.3.bb b/packages/opie-remote/opie-remote_1.2.3.bb
new file mode 100644
index 0000000000..f5df30b509
--- /dev/null
+++ b/packages/opie-remote/opie-remote_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/remote \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-restartapplet/opie-restartapplet_1.2.3.bb b/packages/opie-restartapplet/opie-restartapplet_1.2.3.bb
new file mode 100644
index 0000000000..e06cc63df7
--- /dev/null
+++ b/packages/opie-restartapplet/opie-restartapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/restartapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-rotateapplet/opie-rotateapplet_1.2.3.bb b/packages/opie-rotateapplet/opie-rotateapplet_1.2.3.bb
new file mode 100644
index 0000000000..9317ac952b
--- /dev/null
+++ b/packages/opie-rotateapplet/opie-rotateapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/rotateapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-screenshotapplet/opie-screenshotapplet.inc b/packages/opie-screenshotapplet/opie-screenshotapplet.inc
index a8872609f5..b8c94067fd 100644
--- a/packages/opie-screenshotapplet/opie-screenshotapplet.inc
+++ b/packages/opie-screenshotapplet/opie-screenshotapplet.inc
@@ -14,14 +14,14 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then false; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
}
# FILES plugins/applets/libscreenshotapplet.so*
diff --git a/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.3.bb b/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.3.bb
new file mode 100644
index 0000000000..27db092ec0
--- /dev/null
+++ b/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/screenshotapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics "
diff --git a/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb b/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
index 227fed2d0c..43ce79d570 100644
--- a/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
+++ b/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/screenshotapplet \
${HANDHELDS_CVS};module=opie/apps \
diff --git a/packages/opie-search/opie-search_1.2.3.bb b/packages/opie-search/opie-search_1.2.3.bb
new file mode 100644
index 0000000000..b1ed319fd2
--- /dev/null
+++ b/packages/opie-search/opie-search_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/osearch \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-security/opie-security_1.2.3.bb b/packages/opie-security/opie-security_1.2.3.bb
new file mode 100644
index 0000000000..8b39f0b2e7
--- /dev/null
+++ b/packages/opie-security/opie-security_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/security \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-securityplugins/opie-securityplugin-pin_1.2.3.bb b/packages/opie-securityplugins/opie-securityplugin-pin_1.2.3.bb
new file mode 100644
index 0000000000..8807bef0d2
--- /dev/null
+++ b/packages/opie-securityplugins/opie-securityplugin-pin_1.2.3.bb
@@ -0,0 +1,5 @@
+require opie-securityplugin-pin.inc
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/securityplugins/pin \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
+
diff --git a/packages/opie-sfcave/opie-sfcave_1.2.3.bb b/packages/opie-sfcave/opie-sfcave_1.2.3.bb
new file mode 100644
index 0000000000..d6f9ffaede
--- /dev/null
+++ b/packages/opie-sfcave/opie-sfcave_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/sfcave \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-sh-snes/opie-sh-snes.inc b/packages/opie-sh-snes/opie-sh-snes.inc
index 14c1dcd242..1f1787624a 100644
--- a/packages/opie-sh-snes/opie-sh-snes.inc
+++ b/packages/opie-sh-snes/opie-sh-snes.inc
@@ -5,6 +5,7 @@ LICENSE = "GPL"
RDEPENDS = "opie-sh"
+inherit opie
FILES_${PN} = "/opt/QtPalmtop"
diff --git a/packages/opie-sh-snes/opie-sh-snes_1.2.3.bb b/packages/opie-sh-snes/opie-sh-snes_1.2.3.bb
new file mode 100644
index 0000000000..9a48668e8a
--- /dev/null
+++ b/packages/opie-sh-snes/opie-sh-snes_1.2.3.bb
@@ -0,0 +1,3 @@
+require ${PN}.inc
+
+PR = "r0"
diff --git a/packages/opie-sh-snes/opie-sh-snes_cvs.bb b/packages/opie-sh-snes/opie-sh-snes_cvs.bb
index 7c49fdd77b..5e69e87688 100644
--- a/packages/opie-sh-snes/opie-sh-snes_cvs.bb
+++ b/packages/opie-sh-snes/opie-sh-snes_cvs.bb
@@ -2,4 +2,4 @@ require ${PN}.inc
#Remove the dash below when 1.2.1 changes
PV = "1.2.2+cvs-${SRCDATE}"
-
+PR = "r1"
diff --git a/packages/opie-sh/opie-sh.inc b/packages/opie-sh/opie-sh.inc
index 764d76f83b..dbc032ecc6 100644
--- a/packages/opie-sh/opie-sh.inc
+++ b/packages/opie-sh/opie-sh.inc
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
APPNAME = "opie-sh"
APPTYPE = "binary"
-PR = "r1"
+PR = "r2"
S = "${WORKDIR}/${APPNAME}"
@@ -27,10 +27,10 @@ do_install() {
install -m 0644 ${WORKDIR}/share/config/*.cfg ${D}${palmtopdir}/share/config/
}
-PACKAGES = " opie-sh-microkbd opie-sh-diskfree opie-sh-fsmounter opie-sh-hostlist \
+PACKAGES += " opie-sh-microkbd opie-sh-diskfree opie-sh-fsmounter opie-sh-hostlist \
opie-sh-killproc opie-sh-launcher-refresh opie-sh-logviewer opie-sh-rsynchelper \
opie-sh-servicemanager opie-sh-ssh-askpass opie-sh-stowawayctrl opie-sh-usbnetctrl \
-opie-sh-wavelanchooser ${PN}"
+opie-sh-wavelanchooser "
RDEPENDS_opie-sh-microkbd = "opie-sh"
RDEPENDS_opie-sh-diskfree = "opie-sh"
diff --git a/packages/opie-sh/opie-sh_1.2.3.bb b/packages/opie-sh/opie-sh_1.2.3.bb
new file mode 100644
index 0000000000..6843ad7aac
--- /dev/null
+++ b/packages/opie-sh/opie-sh_1.2.3.bb
@@ -0,0 +1,9 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/opie-sh \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/help \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/bin"
diff --git a/packages/opie-sheet/opie-sheet_1.2.3.bb b/packages/opie-sheet/opie-sheet_1.2.3.bb
new file mode 100644
index 0000000000..ca0cdaff5a
--- /dev/null
+++ b/packages/opie-sheet/opie-sheet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/opie-sheet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-snake/opie-snake_1.2.3.bb b/packages/opie-snake/opie-snake_1.2.3.bb
new file mode 100644
index 0000000000..7db3a3523a
--- /dev/null
+++ b/packages/opie-snake/opie-snake_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/snake \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-solitaire/opie-solitaire_1.2.3.bb b/packages/opie-solitaire/opie-solitaire_1.2.3.bb
new file mode 100644
index 0000000000..9cc224e46b
--- /dev/null
+++ b/packages/opie-solitaire/opie-solitaire_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/solitaire \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-sounds/opie-sounds_1.2.3.bb b/packages/opie-sounds/opie-sounds_1.2.3.bb
new file mode 100644
index 0000000000..9bd0cfa80f
--- /dev/null
+++ b/packages/opie-sounds/opie-sounds_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/sounds"
diff --git a/packages/opie-sshkeys/opie-sshkeys_1.2.3.bb b/packages/opie-sshkeys/opie-sshkeys_1.2.3.bb
new file mode 100644
index 0000000000..2f31b97b95
--- /dev/null
+++ b/packages/opie-sshkeys/opie-sshkeys_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/sshkeys \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-stumbler/opie-stumbler_1.2.3.bb b/packages/opie-stumbler/opie-stumbler_1.2.3.bb
new file mode 100644
index 0000000000..4f666b67b1
--- /dev/null
+++ b/packages/opie-stumbler/opie-stumbler_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opiestumbler \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ file://opiestumbler.png"
diff --git a/packages/opie-style-flat/opie-style-flat_1.2.3.bb b/packages/opie-style-flat/opie-style-flat_1.2.3.bb
new file mode 100644
index 0000000000..90abf56f25
--- /dev/null
+++ b/packages/opie-style-flat/opie-style-flat_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/flat "
diff --git a/packages/opie-style-fresh/opie-style-fresh_1.2.3.bb b/packages/opie-style-fresh/opie-style-fresh_1.2.3.bb
new file mode 100644
index 0000000000..286645a1bc
--- /dev/null
+++ b/packages/opie-style-fresh/opie-style-fresh_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/fresh "
diff --git a/packages/opie-style-liquid/opie-style-liquid_1.2.3.bb b/packages/opie-style-liquid/opie-style-liquid_1.2.3.bb
new file mode 100644
index 0000000000..2fe947cea9
--- /dev/null
+++ b/packages/opie-style-liquid/opie-style-liquid_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/liquid "
diff --git a/packages/opie-style-metal/opie-style-metal_1.2.3.bb b/packages/opie-style-metal/opie-style-metal_1.2.3.bb
new file mode 100644
index 0000000000..0fd97a513e
--- /dev/null
+++ b/packages/opie-style-metal/opie-style-metal_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/metal "
diff --git a/packages/opie-style-phase/opie-style-phase_1.2.3.bb b/packages/opie-style-phase/opie-style-phase_1.2.3.bb
new file mode 100644
index 0000000000..3655182e40
--- /dev/null
+++ b/packages/opie-style-phase/opie-style-phase_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/phase"
diff --git a/packages/opie-style-web/opie-style-web_1.2.3.bb b/packages/opie-style-web/opie-style-web_1.2.3.bb
new file mode 100644
index 0000000000..5fd6161cc1
--- /dev/null
+++ b/packages/opie-style-web/opie-style-web_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/web"
diff --git a/packages/opie-suspendapplet/opie-suspendapplet_1.2.3.bb b/packages/opie-suspendapplet/opie-suspendapplet_1.2.3.bb
new file mode 100644
index 0000000000..6516dfca1e
--- /dev/null
+++ b/packages/opie-suspendapplet/opie-suspendapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/suspendapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-symlinker/opie-symlinker_1.2.3.bb b/packages/opie-symlinker/opie-symlinker_1.2.3.bb
new file mode 100644
index 0000000000..1c4c137b1f
--- /dev/null
+++ b/packages/opie-symlinker/opie-symlinker_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/symlinker "
diff --git a/packages/opie-sysinfo/opie-sysinfo_1.2.3.bb b/packages/opie-sysinfo/opie-sysinfo_1.2.3.bb
new file mode 100644
index 0000000000..2584941cc5
--- /dev/null
+++ b/packages/opie-sysinfo/opie-sysinfo_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/sysinfo \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share"
diff --git a/packages/opie-systemtime/opie-systemtime_1.2.3.bb b/packages/opie-systemtime/opie-systemtime_1.2.3.bb
new file mode 100644
index 0000000000..3aa8378912
--- /dev/null
+++ b/packages/opie-systemtime/opie-systemtime_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/netsystemtime \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-tableviewer/opie-tableviewer_1.2.3.bb b/packages/opie-tableviewer/opie-tableviewer_1.2.3.bb
new file mode 100644
index 0000000000..61b3825eaa
--- /dev/null
+++ b/packages/opie-tableviewer/opie-tableviewer_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/tableviewer \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc
new file mode 100644
index 0000000000..769b5ff2c0
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images.inc
@@ -0,0 +1,56 @@
+DESCRIPTION = "Opie Launcher and Taskbar"
+SECTION = "opie/base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RPROVIDES = "${PN}"
+APPNAME = "qpe"
+
+S = "${WORKDIR}/pics"
+
+# Wallpaper and welcome splash
+PIXMAP_SIZE = ""
+PIXMAP_SIZE_c7x0 = "-640x480"
+PIXMAP_SIZE_spitz = "-640x480"
+PIXMAP_SIZE_akita = "-640x480"
+PIXMAP_SIZE_tosa = "-480x640"
+PIXMAP_SIZE_simpad = "-800x600"
+PIXMAP_SIZE_asus730 = "-480x640"
+PIXMAP_SIZE_htcuniversal= "-480x640"
+PIXMAP_SIZE_hx4700 = "-480x640"
+
+PACKAGES = "${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320"
+
+do_install() {
+ install -d ${D}${palmtopdir}/pics/launcher
+
+ install -m 0644 ${FILESDIR}/firstuse-320x320.jpg ${D}${palmtopdir}/pics/launcher/firstuse-320x320.jpg
+ install -m 0644 ${FILESDIR}/opie-background-320x320.jpg ${D}${palmtopdir}/pics/launcher/opie-background-320x320.jpg
+ install -m 0644 ${WORKDIR}/pics/launcher/firstuse.jpg ${D}${palmtopdir}/pics/launcher/firstuse-240x320.jpg
+ install -m 0644 ${WORKDIR}/pics/launcher/opie-background.jpg ${D}${palmtopdir}/pics/launcher/opie-background-240x320.jpg
+ # TODO: those should be correct images for the resolution:
+ install -m 0644 ${WORKDIR}/pics/launcher/firstuse.jpg ${D}${palmtopdir}/pics/launcher/firstuse-320x240.jpg
+ install -m 0644 ${WORKDIR}/pics/launcher/opie-background.jpg ${D}${palmtopdir}/pics/launcher/opie-background-320x240.jpg
+
+ for res in 480x640 640x480 800x600; do
+ install -m 0644 ${WORKDIR}/pics/launcher/firstuse-${res}.jpg ${D}${palmtopdir}/pics/launcher/firstuse-${res}.jpg
+ install -m 0644 ${WORKDIR}/pics/launcher/opie-background-${res}.jpg ${D}${palmtopdir}/pics/launcher/opie-background-${res}.jpg
+ done
+ # TODO: those should be correct images for the resoltion:
+ install -m 0644 ${WORKDIR}/pics/launcher/firstuse-800x600.jpg ${D}${palmtopdir}/pics/launcher/firstuse-600x800.jpg
+ install -m 0644 ${WORKDIR}/pics/launcher/opie-background-800x600.jpg ${D}${palmtopdir}/pics/launcher/opie-background-600x800.jpg
+}
+
+python do_package_prepend () {
+ reslist = ['240x320','320x240', '320x320', '480x640','640x480', '800x600','600x800']
+ dir = bb.data.expand('${palmtopdir}/pics/launcher/', d)
+ ft = bb.data.expand('${palmtopdir}/pics/*/*-%s.*', d)
+ pn = bb.data.getVar('PN', d, 1)
+ for res in reslist:
+ bb.data.setVar('FILES_%s-%s' % (pn,res), ft % res, d )
+ postinst = ''
+ postinst = 'update-alternatives --install %sfirstuse.jpg opie-firstuse-pixmap %sfirstuse-%s.jpg 50\n' % (dir,dir,res)
+ postinst += 'update-alternatives --install %sopie-background.jpg opie-background-pixmap %sopie-background-%s.jpg 50\n' % (dir,dir,res)
+ bb.data.setVar('pkg_postinst_%s-%s' % (pn,res),postinst, d)
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/opie-taskbar/opie-taskbar-images/.mtn2git_empty b/packages/opie-taskbar/opie-taskbar-images/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images/.mtn2git_empty
diff --git a/packages/opie-taskbar/opie-taskbar-images/firstuse-320x320.jpg b/packages/opie-taskbar/opie-taskbar-images/firstuse-320x320.jpg
new file mode 100644
index 0000000000..67523f1291
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images/firstuse-320x320.jpg
Binary files differ
diff --git a/packages/opie-taskbar/opie-taskbar-images/opie-background-320x320.jpg b/packages/opie-taskbar/opie-taskbar-images/opie-background-320x320.jpg
new file mode 100644
index 0000000000..194816f1e1
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images/opie-background-320x320.jpg
Binary files differ
diff --git a/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb b/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb
new file mode 100644
index 0000000000..0c5b93780d
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+PR = "r1"
+
+TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-taskbar/opie-taskbar-images_cvs.bb b/packages/opie-taskbar/opie-taskbar-images_cvs.bb
new file mode 100644
index 0000000000..ff7ea9e17b
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar-images_cvs.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+PV = "${OPIE_CVS_PV}"
+PR = "r6"
+
+SRC_URI = "${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/opie-taskbar/opie-taskbar.inc b/packages/opie-taskbar/opie-taskbar.inc
index 4c357f54b6..4f43e550b9 100644
--- a/packages/opie-taskbar/opie-taskbar.inc
+++ b/packages/opie-taskbar/opie-taskbar.inc
@@ -3,34 +3,16 @@ SECTION = "opie/base"
PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "opie-libqrsync opie-qss"
+# Unfortunately, ipkg has buggy handling of Rdepends to multiple packages with the same Provides.
+# Instead of seeing if something in package package lists selects needed package among the rest
+# or errors out otherwise, it just install random package which has needed Provides. So, comment
+# this out.
+#RDEPENDS = "opie-taskbar-images"
APPNAME = "qpe"
S = "${WORKDIR}/launcher"
-# Caps/Numlock icons for devices with keyboard
-EXTRA_QMAKEVARS_POST_append_collie = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_poodle = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_c7x0 = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_tosa = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_spitz = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_akita = "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-EXTRA_QMAKEVARS_POST_append_htcuniversal= "DEFINES+=OPIE_TASKBAR_LOCK_KEY_STATE"
-
-# Wallpaper and welcome splash
-PIXMAP_SIZE = ""
-PIXMAP_SIZE_c7x0 = "-640x480"
-PIXMAP_SIZE_spitz = "-640x480"
-PIXMAP_SIZE_akita = "-640x480"
-PIXMAP_SIZE_tosa = "-480x640"
-PIXMAP_SIZE_simpad = "-800x600"
-PIXMAP_SIZE_asus730 = "-480x640"
-PIXMAP_SIZE_htcuniversal= "-480x640"
-PIXMAP_SIZE_hx4700 = "-480x640"
-
-inherit opie update-rc.d
-
-INITSCRIPT_NAME = "opie"
-INITSCRIPT_PARAMS = "start 99 5 . stop 20 0 1 6 ."
+inherit opie
do_configure_prepend() {
ln -s ${WORKDIR}/calibrate ${S}/calibrate
@@ -47,7 +29,7 @@ SECTIONS = "1Pim Applications Examples Games Opie-SH Python Settings"
PICS = "opielogo32x32.png start_button.png new_wait.png opielogo16x16.png sidebar.png"
do_install() {
- install -d ${D}${palmtopdir}/bin
+ install -d ${D}${bindir}
for i in ${SECTIONS}
do
install -d ${D}${palmtopdir}/apps/$i/
@@ -56,23 +38,18 @@ do_install() {
install -d ${D}${palmtopdir}/pics/launcher
install -d ${D}${palmtopdir}/pics/logo
install -d ${D}${palmtopdir}/pics/RoH/star/
- install -d ${D}${sysconfdir}/init.d
- install -d ${D}${sysconfdir}/profile.d
install -d ${D}${palmtopdir}/etc/colors
install -d ${D}${palmtopdir}/etc/skel
+ install -d ${D}${sysconfdir}
- install -m 0755 ${S}/qpe ${D}${palmtopdir}/bin/qpe
- install -m 0755 ${WORKDIR}/opie-reorgfiles ${D}${palmtopdir}/bin/
+ install -m 0755 ${S}/qpe ${D}${bindir}/qpe
install -m 0644 ${WORKDIR}/apps/Settings/calibrate.desktop ${D}${palmtopdir}/apps/Settings/
install -m 0644 ${WORKDIR}/apps/Settings/quit.desktop ${D}${palmtopdir}/apps/Settings/
- install -m 0644 ${WORKDIR}/opie_defaults ${D}${sysconfdir}/profile.d/
for p in ${PICS}
do
install -m 0644 ${WORKDIR}/pics/launcher/$p ${D}${palmtopdir}/pics/launcher/$p
done
- install -m 0644 ${WORKDIR}/pics/launcher/firstuse${PIXMAP_SIZE}.jpg ${D}${palmtopdir}/pics/launcher/firstuse.jpg
- install -m 0644 ${WORKDIR}/pics/launcher/opie-background${PIXMAP_SIZE}.jpg ${D}${palmtopdir}/pics/launcher/opie-background.jpg
install -m 0644 ${WORKDIR}/pics/logo/*.* ${D}${palmtopdir}/pics/logo/
install -m 0644 ${WORKDIR}/pics/RoH/star/*.png ${D}${palmtopdir}/pics/RoH/star/
@@ -80,35 +57,8 @@ do_install() {
install -m 0644 ${WORKDIR}/etc/colors/*.scheme ${D}${palmtopdir}/etc/colors/
install -m 0644 ${WORKDIR}/etc/mime.types ${D}${sysconfdir}/
- install -m 0755 ${WORKDIR}/opie ${D}${sysconfdir}/init.d/opie
- install -m 0644 ${WORKDIR}/qpe.conf ${D}${palmtopdir}/etc/skel/
-
- if [ -s ${WORKDIR}/locale.conf ]; then
- install -m 0644 ${WORKDIR}/locale.conf ${D}${palmtopdir}/etc/skel/
- fi
-
install -m 0644 ${WORKDIR}/pics/capslock.xpm ${D}${palmtopdir}/pics/
install -m 0644 ${WORKDIR}/pics/numlock.xpm ${D}${palmtopdir}/pics/
-
- case ${MACHINE} in
- c7x0)
- install -d ${D}${sysconfdir}/apm/event.d/
- install -m 0755 ${WORKDIR}/qpe-suspend-resume ${D}${sysconfdir}/apm/event.d/00-qpe-suspend-resume.sh
- ;;
- *)
- ;;
- esac
-}
-
-updatercd_postinst_mnci() {
-if test "x$D" != "x"; then
- D="-r $D"
-else
- D="" # do not autostart at installation time
-fi
-update-rc.d $D ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
}
FILES_opie-taskbar_append = " ${sysconfdir} ${palmtopdir}/apps ${palmtopdir}/pics"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/opie-taskbar/opie-taskbar/c7x0/opie b/packages/opie-taskbar/opie-taskbar/c7x0/opie
deleted file mode 100755
index 84f3b3e673..0000000000
--- a/packages/opie-taskbar/opie-taskbar/c7x0/opie
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-#
-[ -z $LOGNAME ] && export LOGNAME=root && export HOME=/home/root
-[ -z $HOME ] && export HOME=/home/$LOGNAME
-
-# we need to tinker directly with qws_display until the ODevice
-# default (which is now W100:Rot0:0) works flawlessly with rotation
-# and survives a suspend/resume cycle
-export QWS_DISPLAY=Transformed:Rot0:0
-# export QWS_DISPLAY=W100:Rot0:0
-export QTDIR=/opt/QtPalmtop
-export OPIEDIR=/opt/QtPalmtop
-export QPEDIR=/opt/QtPalmtop
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPIEDIR/lib
-export PATH=$PATH:$OPIEDIR/bin
-
-if [ ! -x "$OPIEDIR/bin/qpe" ] ; then
- echo Opie not installed
- exit 0
-fi
-
-. /etc/profile
-
-for conf in $OPIEDIR/etc/skel/*.conf; do
- conf_basename=`basename $conf`
- if [ ! -e "$HOME/Settings/$conf_basename" ] ; then
- echo "Copying default $conf_basename into $HOME/Settings/"
- mkdir -p $HOME/Settings/
- cat $conf >$HOME/Settings/$conf_basename
- fi
-done
-
-if [ ! -e "$HOME/systeminfo/linkver" ] ; then
- mkdir -p $HOME/systeminfo/
- echo "1.13" >$HOME/systeminfo/linkver
-fi
-
-if [ ! -e "/opt/Qtopia" ] ; then
- ln -sf /opt/QtPalmtop /opt/Qtopia
-fi
-
-case $1 in
-'start')
- #/sbin/getkey 5 "Starting Opie in 5 seconds... press key to interrupt." && exit 0
-
- if [ -x "$OPIEDIR/bin/opie-login" ]; then
- echo Starting Opie-login....
- $OPIEDIR/bin/opie-login -terminal 2
- else
- $OPIEDIR/bin/opie-reorgfiles
- if [ -x /usr/bin/ssh-agent ]; then
- SSHAGENT=/usr/bin/ssh-agent
- else
- SSHAGENT=""
- fi
-
- if [ -x "$OPIEDIR/bin/opie-sh-ssh-askpass.sh" ]; then
- export SSH_ASKPASS=$OPIEDIR/bin/opie-sh-ssh-askpass.sh
- fi
- echo Starting Opie....
- $SSHAGENT $OPIEDIR/bin/qpe -terminal 2
- fi
-
- ;;
-
-'stop')
- echo "Stopping Opie..."
- killall qpe 2>/dev/null
- killall opie-login 2>/dev/null
- killall quicklauncher 2>/dev/null
-
- ;;
-
-'restart')
- $0 stop && $0 start
-
- ;;
-
-*)
- echo "usage: $0 { start | stop | restart }"
-
- ;;
-
-esac
-
diff --git a/packages/opie-taskbar/opie-taskbar/kbdlocks-runtime.patch b/packages/opie-taskbar/opie-taskbar/kbdlocks-runtime.patch
new file mode 100644
index 0000000000..e356682768
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar/kbdlocks-runtime.patch
@@ -0,0 +1,35 @@
+--- launcher/taskbar.h.org 2004-08-23 00:35:22.000000000 +0300
++++ launcher/taskbar.h 2007-07-04 19:23:54.000000000 +0300
+@@ -84,6 +84,7 @@
+ LockKeyState* lockState;
+ StartMenu *sm;
+ bool resizeRunningApp;
++ bool showKbdLockState;
+ };
+
+
+--- launcher/taskbar.cpp.org 2005-07-04 01:13:00.000000000 +0300
++++ launcher/taskbar.cpp 2007-07-04 19:24:48.000000000 +0300
+@@ -213,12 +213,9 @@
+ (void)new SafeMode( this );
+ #endif
+
+- // ## make customizable in some way?
+-#ifdef OPIE_TASKBAR_LOCK_KEY_STATE
+- lockState = new LockKeyState( this );
+-#else
+ lockState = 0;
+-#endif
++ if ( showKbdLockState )
++ lockState = new LockKeyState( this );
+
+ #if defined(Q_WS_QWS)
+ #if !defined(QT_NO_COP)
+@@ -388,6 +385,7 @@
+ Config cfg( "Launcher" );
+ cfg.setGroup( "InputMethods" );
+ resizeRunningApp = cfg.readBoolEntry( "Resize", true );
++ showKbdLockState = cfg.readBoolEntry( "ShowKbdLocks", true );
+ }
+
+ #include "taskbar.moc"
diff --git a/packages/opie-taskbar/opie-taskbar/mnci/opie b/packages/opie-taskbar/opie-taskbar/mnci/opie
deleted file mode 100755
index d5e2955b10..0000000000
--- a/packages/opie-taskbar/opie-taskbar/mnci/opie
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-#
-[ -z $LOGNAME ] && export LOGNAME=root && export HOME=/home/root
-[ -z $HOME ] && export HOME=/home/$LOGNAME
-
-export QTDIR=/opt/QtPalmtop
-export OPIEDIR=/opt/QtPalmtop
-export QPEDIR=/opt/QtPalmtop
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPIEDIR/lib
-export PATH=$PATH:$OPIEDIR/bin
-# export QWS_KEYBOARD=KernelTTY
-
-if [ ! -x "$OPIEDIR/bin/qpe" ] ; then
- echo Opie not installed
- exit 0
-fi
-
-. /etc/profile
-
-if [ ! -e "$HOME/Settings/qpe.conf" ] ; then
- mkdir -p $HOME/Settings
- cp $OPIEDIR/etc/skel/* $HOME/Settings
-fi
-
-if [ ! -e "$HOME/systeminfo/linkver" ] ; then
- mkdir -p $HOME/systeminfo/
- echo "1.13" >$HOME/systeminfo/linkver
-fi
-
-if [ ! -e "/opt/Qtopia" ] ; then
- ln -sf /opt/QtPalmtop /opt/Qtopia
-fi
-
-case $1 in
-'start')
- if [ -x "$OPIEDIR/bin/opie-login" ]; then
- echo Starting Opie-login....
- $OPIEDIR/bin/opie-login -terminal 2
- else
- $OPIEDIR/bin/opie-reorgfiles >/dev/null
- if [ -x /usr/bin/ssh-agent ]; then
- SSHAGENT=/usr/bin/ssh-agent
- else
- SSHAGENT=""
- fi
-
- if [ -x "$OPIEDIR/bin/opie-sh-ssh-askpass.sh" ]; then
- export SSH_ASKPASS=$OPIEDIR/bin/opie-sh-ssh-askpass.sh
- fi
- echo Starting Opie....
- $SSHAGENT $OPIEDIR/bin/qpe -terminal 2 2>/dev/null
- fi
-
- ;;
-
-'stop')
- echo "Stopping Opie..."
- killall qpe 2>/dev/null
- killall opie-login 2>/dev/null
- killall quicklauncher 2>/dev/null
- sleep 1
- killall -9 qpe 2>/dev/null
- killall -9 opie-login 2>/dev/null
- killall -9 quicklauncher 2>/dev/null
-
- ;;
-
-'restart')
- $0 stop && $0 start
-
- ;;
-
-*)
- echo "usage: $0 { start | stop | restart }"
-
- ;;
-
-esac
-
diff --git a/packages/opie-taskbar/opie-taskbar/no-builtin-qss-startup.patch b/packages/opie-taskbar/opie-taskbar/no-builtin-qss-startup.patch
new file mode 100644
index 0000000000..349b28675b
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar/no-builtin-qss-startup.patch
@@ -0,0 +1,11 @@
+--- launcher/server.cpp.org 2007-05-01 20:55:01.000000000 +0000
++++ launcher/server.cpp 2007-05-03 04:48:45.000000000 +0000
+@@ -1009,6 +1009,8 @@
+ }
+
+ void Server::startSoundServer() {
++ owarn << "Sound server (qss) now needs to be started standalone" << oendl;
++ return;
+ if ( !process ) {
+ process = new Opie::Core::OProcess( this );
+ connect(process, SIGNAL(processExited(Opie::Core::OProcess*)),
diff --git a/packages/opie-taskbar/opie-taskbar/opie b/packages/opie-taskbar/opie-taskbar/opie
deleted file mode 100755
index 3fe4d0cdf8..0000000000
--- a/packages/opie-taskbar/opie-taskbar/opie
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-#
-[ -z $LOGNAME ] && export LOGNAME=root && export HOME=/home/root
-[ -z $HOME ] && export HOME=/home/$LOGNAME
-
-export QTDIR=/opt/QtPalmtop
-export OPIEDIR=/opt/QtPalmtop
-export QPEDIR=/opt/QtPalmtop
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OPIEDIR/lib
-export PATH=$PATH:$OPIEDIR/bin
-
-if [ ! -x "$OPIEDIR/bin/qpe" ] ; then
- echo Opie not installed
- exit 0
-fi
-
-. /etc/profile
-
-if [ ! -e $TSLIB_TSDEVICE ]; then
- export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice
-fi
-
-for conf in $OPIEDIR/etc/skel/*.conf; do
- conf_basename=`basename $conf`
- if [ ! -e "$HOME/Settings/$conf_basename" ] ; then
- echo "Copying default $conf_basename into $HOME/Settings/"
- mkdir -p $HOME/Settings/
- cat $conf >$HOME/Settings/$conf_basename
- fi
-done
-
-if [ ! -e "$HOME/systeminfo/linkver" ] ; then
- mkdir -p $HOME/systeminfo/
- echo "1.13" >$HOME/systeminfo/linkver
-fi
-
-if [ ! -e "/opt/Qtopia" ] ; then
- ln -sf /opt/QtPalmtop /opt/Qtopia
-fi
-
-case $1 in
-'start')
- #/sbin/getkey 5 "Starting Opie in 5 seconds... press key to interrupt." && exit 0
-
- # Turn off psplash if any - sleep is required for anti-race
- if [ -e /mnt/.psplash ]; then
- TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
- sleep 1
- fi
-
- if [ -x "$OPIEDIR/bin/opie-login" ]; then
- echo Starting Opie-login....
- $OPIEDIR/bin/opie-login -terminal 3
- else
- $OPIEDIR/bin/opie-reorgfiles
- if [ -x /usr/bin/ssh-agent ]; then
- SSHAGENT=/usr/bin/ssh-agent
- else
- SSHAGENT=""
- fi
-
- if [ -x "$OPIEDIR/bin/opie-sh-ssh-askpass.sh" ]; then
- export SSH_ASKPASS=$OPIEDIR/bin/opie-sh-ssh-askpass.sh
- fi
- echo Starting Opie....
- $SSHAGENT $OPIEDIR/bin/qpe -terminal 3
- fi
-
- ;;
-
-'stop')
- echo "Stopping Opie..."
- killall qpe 2>/dev/null
- killall opie-login 2>/dev/null
- killall quicklauncher 2>/dev/null
-
- ;;
-
-'restart')
- $0 stop && $0 start
-
- ;;
-
-*)
- echo "usage: $0 { start | stop | restart }"
-
- ;;
-
-esac
-
diff --git a/packages/opie-taskbar/opie-taskbar/opie_defaults b/packages/opie-taskbar/opie-taskbar/opie_defaults
deleted file mode 100644
index f560889927..0000000000
--- a/packages/opie-taskbar/opie-taskbar/opie_defaults
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-MACHINE="`cat /proc/cpuinfo | sed -n "/^Hardware/s/.*\:\(.*\)/\1/;s/^\ //p"`"
-KVER="`uname -r | sed -n "s/\([0-9]\)\.\([0-9]\)\..*/\1.\2/p"`"
-
-case "$MACHINE" in
-*Poodle) test "$KVER" = "2.6" && export QWS_CURSOR_ROTATION=90;;
-esac
-
-export PATH="$PATH:/opt/QtPalmtop/bin"
-export QTDIR="/opt/QtPalmtop"
-
diff --git a/packages/opie-taskbar/opie-taskbar/restart-from-bindir.patch b/packages/opie-taskbar/opie-taskbar/restart-from-bindir.patch
new file mode 100644
index 0000000000..1a73588409
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar/restart-from-bindir.patch
@@ -0,0 +1,12 @@
+diff --git a/serverapp.cpp b/serverapp.cpp
+index 0e92040..b933340 100644
+--- a/serverapp.cpp
++++ b/serverapp.cpp
+@@ -763,6 +763,7 @@ void ServerApplication::restart()
+ for ( int fd = 3; fd < 100; fd++ )
+ close( fd );
+ execl( ( qpeDir() + "/bin/qpe" ).local8Bit(), "qpe", NULL );
++ execl( OPIE_BINDIR "/qpe", "qpe", NULL );
+ exit( 1 );
+ #endif
+ }
diff --git a/packages/opie-taskbar/opie-taskbar_1.2.2.bb b/packages/opie-taskbar/opie-taskbar_1.2.2.bb
index a5e154cfef..497bff0953 100644
--- a/packages/opie-taskbar/opie-taskbar_1.2.2.bb
+++ b/packages/opie-taskbar/opie-taskbar_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-PR = "r5"
+PR = "r7"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/mediummount \
@@ -10,10 +10,4 @@ SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};tag=${TAG};module=opie/etc \
file://nomax.patch;patch=1;pnum=3 \
file://server.pro \
- file://opie-reorgfiles \
- file://opie \
- file://qpe.conf \
- file://locale.conf \
- file://opie_defaults"
-
-SRC_URI_append_c7x0 = " file://qpe-suspend-resume"
+ "
diff --git a/packages/opie-taskbar/opie-taskbar_1.2.3.bb b/packages/opie-taskbar/opie-taskbar_1.2.3.bb
new file mode 100644
index 0000000000..d8a794fc16
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar_1.2.3.bb
@@ -0,0 +1,16 @@
+require ${PN}.inc
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/mediummount \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/core/launcher \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/root \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/etc \
+ file://nomax.patch;patch=1;pnum=3 \
+ file://no-builtin-qss-startup.patch;patch=1 \
+ file://kbdlocks-runtime.patch;patch=1 \
+ file://restart-from-bindir.patch;patch=1 \
+ file://server.pro \
+ "
diff --git a/packages/opie-taskbar/opie-taskbar_cvs.bb b/packages/opie-taskbar/opie-taskbar_cvs.bb
index b2992b0c28..3bda5c4f40 100644
--- a/packages/opie-taskbar/opie-taskbar_cvs.bb
+++ b/packages/opie-taskbar/opie-taskbar_cvs.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r5"
+PR = "r15"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};module=opie/noncore/settings/mediummount \
@@ -10,11 +10,8 @@ SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};module=opie/root \
${HANDHELDS_CVS};module=opie/etc \
file://nomax.patch;patch=1;pnum=3 \
+ file://no-builtin-qss-startup.patch;patch=1 \
+ file://kbdlocks-runtime.patch;patch=1 \
+ file://restart-from-bindir.patch;patch=1 \
file://server.pro \
- file://opie-reorgfiles \
- file://opie \
- file://qpe.conf \
- file://locale.conf \
- file://opie_defaults"
-
-SRC_URI_append_c7x0 = " file://qpe-suspend-resume"
+ "
diff --git a/packages/opie-tetrix/opie-tetrix_1.2.3.bb b/packages/opie-tetrix/opie-tetrix_1.2.3.bb
new file mode 100644
index 0000000000..ef6ee0fc42
--- /dev/null
+++ b/packages/opie-tetrix/opie-tetrix_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/tetrix \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-textedit/opie-textedit_1.2.3.bb b/packages/opie-textedit/opie-textedit_1.2.3.bb
new file mode 100644
index 0000000000..20a417a9c3
--- /dev/null
+++ b/packages/opie-textedit/opie-textedit_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-theme/opie-theme.inc b/packages/opie-theme/opie-theme.inc
index efb72b3d55..0017154a56 100644
--- a/packages/opie-theme/opie-theme.inc
+++ b/packages/opie-theme/opie-theme.inc
@@ -33,7 +33,8 @@ do_install() {
done
}
-PACKAGES = " opie-theme-cleannsimple opie-theme-grade8 opie-theme-ixpe opie-theme-lumonmarble opie-theme-lumonwave opie-theme-luna opie-theme "
+PACKAGES += " opie-theme-cleannsimple opie-theme-grade8 opie-theme-ixpe opie-theme-lumonmarble \
+ opie-theme-lumonwave opie-theme-luna "
FILES_opie-theme = " ${palmtopdir}/plugins/styles/libtheme.so*"
FILES_opie-theme-cleannsimple = " ${palmtopdir}/plugins/styles/themes/cleannsimple.themerc ${palmtopdir}/plugins/styles/pixmaps/cleannsimple/*.png"
diff --git a/packages/opie-theme/opie-theme_1.2.2.bb b/packages/opie-theme/opie-theme_1.2.2.bb
index d765a9ffc4..fc20e7fd60 100644
--- a/packages/opie-theme/opie-theme_1.2.2.bb
+++ b/packages/opie-theme/opie-theme_1.2.2.bb
@@ -1,5 +1,5 @@
require ${PN}.inc
-
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/theme \
diff --git a/packages/opie-theme/opie-theme_1.2.3.bb b/packages/opie-theme/opie-theme_1.2.3.bb
new file mode 100644
index 0000000000..2e3900855a
--- /dev/null
+++ b/packages/opie-theme/opie-theme_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+PR = "r0"
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/styles/theme \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/plugins/styles "
diff --git a/packages/opie-theme/opie-theme_cvs.bb b/packages/opie-theme/opie-theme_cvs.bb
index 31e66d220b..5b9a33142d 100644
--- a/packages/opie-theme/opie-theme_cvs.bb
+++ b/packages/opie-theme/opie-theme_cvs.bb
@@ -1,4 +1,5 @@
require ${PN}.inc
+PR = "r1"
PV = "${OPIE_CVS_PV}"
diff --git a/packages/opie-tictac/opie-tictac_1.2.3.bb b/packages/opie-tictac/opie-tictac_1.2.3.bb
new file mode 100644
index 0000000000..dc3d928149
--- /dev/null
+++ b/packages/opie-tictac/opie-tictac_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/tictac \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-tinykate/opie-tinykate.inc b/packages/opie-tinykate/opie-tinykate.inc
index aeb2fddad8..fdec301897 100644
--- a/packages/opie-tinykate/opie-tinykate.inc
+++ b/packages/opie-tinykate/opie-tinykate.inc
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "libqtaux2"
APPNAME = "tinykate"
-
+PR = "r2"
S = "${WORKDIR}/tinykate"
@@ -23,14 +23,13 @@ do_install() {
install -m 0644 ${WORKDIR}/share/${APPNAME}/syntax/*.* ${D}${palmtopdir}/share/${APPNAME}/syntax/
}
-PACKAGES = " \
+PACKAGES += " \
opie-tinykate-syntax-commondev \
opie-tinykate-syntax-documentation \
opie-tinykate-syntax-misc \
opie-tinykate-syntax-miscdev \
opie-tinykate-syntax-unix \
- opie-tinykate-syntax-web \
- opie-tinykate "
+ opie-tinykate-syntax-web "
FILES_opie-tinykate-syntax-commondev = " ${palmtopdir}/share/tinykate/syntax/c.xml ${palmtopdir}/share/tinykate/syntax/cpp.xml ${palmtopdir}/share/tinykate/syntax/gnuassembler.xml ${palmtopdir}/share/tinykate/syntax/kbasic.xml ${palmtopdir}/share/tinykate/syntax/pascal.xml ${palmtopdir}/share/tinykate/syntax/perl.xml ${palmtopdir}/share/tinykate/syntax/php.xml ${palmtopdir}/share/tinykate/syntax/python.xml ${palmtopdir}/share/tinykate/syntax/ruby.xml ${palmtopdir}/share/tinykate/syntax/sql.xml ${palmtopdir}/share/tinykate/syntax/tcl.xml ${palmtopdir}/share/tinykate/syntax/xml.xml ${palmtopdir}/share/tinykate/syntax/xmldebug.xml ${palmtopdir}/share/tinykate/syntax/java.xml"
diff --git a/packages/opie-tinykate/opie-tinykate_1.2.2.bb b/packages/opie-tinykate/opie-tinykate_1.2.2.bb
index e964a4886e..528848b356 100644
--- a/packages/opie-tinykate/opie-tinykate_1.2.2.bb
+++ b/packages/opie-tinykate/opie-tinykate_1.2.2.bb
@@ -1,7 +1,5 @@
require ${PN}.inc
-
-
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/tinykate \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
${HANDHELDS_CVS};tag=${TAG};module=opie/share \
diff --git a/packages/opie-tinykate/opie-tinykate_1.2.3.bb b/packages/opie-tinykate/opie-tinykate_1.2.3.bb
new file mode 100644
index 0000000000..4c175b57e4
--- /dev/null
+++ b/packages/opie-tinykate/opie-tinykate_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/tinykate \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.3.bb b/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.3.bb
new file mode 100644
index 0000000000..7ef69bc053
--- /dev/null
+++ b/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/today/plugins/addressbook "
diff --git a/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.3.bb b/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.3.bb
new file mode 100644
index 0000000000..eeff6f8bce
--- /dev/null
+++ b/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/today/plugins/datebook "
diff --git a/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.3.bb b/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.3.bb
new file mode 100644
index 0000000000..b176078017
--- /dev/null
+++ b/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/todayplugins/fortune "
diff --git a/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.3.bb b/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.3.bb
new file mode 100644
index 0000000000..4eb01b603c
--- /dev/null
+++ b/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/today/plugins/mail "
diff --git a/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.3.bb b/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.3.bb
new file mode 100644
index 0000000000..edec6c53a5
--- /dev/null
+++ b/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/todayplugins/stockticker \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.3.bb b/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.3.bb
new file mode 100644
index 0000000000..1c60fed2df
--- /dev/null
+++ b/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/today/plugins/todolist "
diff --git a/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.3.bb b/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.3.bb
new file mode 100644
index 0000000000..61d1b2b00e
--- /dev/null
+++ b/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/todayplugins/weather \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics"
diff --git a/packages/opie-today/opie-today_1.2.3.bb b/packages/opie-today/opie-today_1.2.3.bb
new file mode 100644
index 0000000000..286e7cf1bb
--- /dev/null
+++ b/packages/opie-today/opie-today_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/today \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-todo/files/.mtn2git_empty b/packages/opie-todo/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/opie-todo/files/.mtn2git_empty
diff --git a/packages/opie-todo/files/unbreak-logging.patch b/packages/opie-todo/files/unbreak-logging.patch
new file mode 100644
index 0000000000..20e0bd0ff7
--- /dev/null
+++ b/packages/opie-todo/files/unbreak-logging.patch
@@ -0,0 +1,21 @@
+Index: todo/main.cpp
+===================================================================
+RCS file: /cvs/opie/core/pim/todo/main.cpp,v
+retrieving revision 1.11
+diff -u -r1.11 main.cpp
+--- main.cpp 6 Apr 2005 21:39:47 -0000 1.11
++++ main.cpp 3 May 2007 02:57:14 -0000
+@@ -34,13 +34,8 @@
+
+ #include <qpe/qpeapplication.h>
+
+-void myMessages( QtMsgType, const char* ) {
+-
+-}
+-
+ int main( int argc, char **argv )
+ {
+- qInstallMsgHandler( myMessages );
+ QPEApplication a( argc, argv );
+
+ QTime time;
diff --git a/packages/opie-todo/opie-todo_1.2.3.bb b/packages/opie-todo/opie-todo_1.2.3.bb
new file mode 100644
index 0000000000..f68a559f97
--- /dev/null
+++ b/packages/opie-todo/opie-todo_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/todo \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
+ file://unbreak-logging.patch;patch=1"
diff --git a/packages/opie-todo/opie-todo_cvs.bb b/packages/opie-todo/opie-todo_cvs.bb
index dabbdfd4fb..164c13f25b 100644
--- a/packages/opie-todo/opie-todo_cvs.bb
+++ b/packages/opie-todo/opie-todo_cvs.bb
@@ -1,6 +1,8 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r2"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/pim/todo \
- ${HANDHELDS_CVS};module=opie/apps"
+ ${HANDHELDS_CVS};module=opie/apps \
+ file://unbreak-logging.patch;patch=1"
diff --git a/packages/opie-tonleiter/opie-tonleiter_1.2.3.bb b/packages/opie-tonleiter/opie-tonleiter_1.2.3.bb
new file mode 100644
index 0000000000..d019c73c30
--- /dev/null
+++ b/packages/opie-tonleiter/opie-tonleiter_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/multimedia/tonleiter \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-ttf-support/opie-ttf-support_1.1.bb b/packages/opie-ttf-support/opie-ttf-support_1.1.bb
index 139c842c90..74de9116b7 100644
--- a/packages/opie-ttf-support/opie-ttf-support_1.1.bb
+++ b/packages/opie-ttf-support/opie-ttf-support_1.1.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Meta-package for Opie TTF support"
DEPENDS = "freetype"
SECTION = "opie/fonts"
+PR = "r2"
SRC_URI = "file://update-qtttffontdir.c"
S = "${WORKDIR}"
@@ -17,6 +18,6 @@ do_install() {
pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-mkdir -p /opt/QtPalmtop/lib/fonts/
-${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype >/opt/QtPalmtop/lib/fonts/fontdir
+mkdir -p ${palmtopdir}/lib/fonts/
+${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype >${palmtopdir}/lib/fonts/fontdir
}
diff --git a/packages/opie-unikeyboard/opie-unikeyboard.inc b/packages/opie-unikeyboard/opie-unikeyboard.inc
index f5d6fdb687..7bdf06d64e 100644
--- a/packages/opie-unikeyboard/opie-unikeyboard.inc
+++ b/packages/opie-unikeyboard/opie-unikeyboard.inc
@@ -13,7 +13,7 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
else
exit 0
fi
@@ -22,7 +22,7 @@ fi
pkg_postrm() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
+${bindir}/qcop QPE/TaskBar "reloadInputMethods()"
}
# FILES plugins/inputmethods/libqunikeyboard.so*
diff --git a/packages/opie-unikeyboard/opie-unikeyboard_1.2.3.bb b/packages/opie-unikeyboard/opie-unikeyboard_1.2.3.bb
new file mode 100644
index 0000000000..afb665b203
--- /dev/null
+++ b/packages/opie-unikeyboard/opie-unikeyboard_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/inputmethods/unikeyboard "
diff --git a/packages/opie-unikeyboard/opie-unikeyboard_cvs.bb b/packages/opie-unikeyboard/opie-unikeyboard_cvs.bb
index c85a6ad7e2..b035a101ed 100644
--- a/packages/opie-unikeyboard/opie-unikeyboard_cvs.bb
+++ b/packages/opie-unikeyboard/opie-unikeyboard_cvs.bb
@@ -1,5 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/inputmethods/unikeyboard "
diff --git a/packages/opie-usermanager/opie-usermanager_1.2.3.bb b/packages/opie-usermanager/opie-usermanager_1.2.3.bb
new file mode 100644
index 0000000000..eb173e6532
--- /dev/null
+++ b/packages/opie-usermanager/opie-usermanager_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/usermanager \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.3.bb b/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.3.bb
new file mode 100644
index 0000000000..020afa743a
--- /dev/null
+++ b/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/sound \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-vmemo/opie-vmemo_1.2.3.bb b/packages/opie-vmemo/opie-vmemo_1.2.3.bb
new file mode 100644
index 0000000000..a7f91b1dee
--- /dev/null
+++ b/packages/opie-vmemo/opie-vmemo_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/vmemo \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-volumeapplet/opie-volumeapplet.inc b/packages/opie-volumeapplet/opie-volumeapplet.inc
index 6509fde926..3bb619f3bd 100644
--- a/packages/opie-volumeapplet/opie-volumeapplet.inc
+++ b/packages/opie-volumeapplet/opie-volumeapplet.inc
@@ -13,13 +13,13 @@ pkg_postinst() {
#!/bin/sh
if [ -n "$D" ]; then exit 1; fi
if pidof -s qpe >/dev/null; then
- /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+ ${bindir}/qcop QPE/TaskBar "reloadApplets()"
fi
}
pkg_postrm() {
#!/bin/sh
-/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
+${bindir}/qcop QPE/TaskBar "reloadApplets()"
if [ -n "$D" ]; then false; fi
}
diff --git a/packages/opie-volumeapplet/opie-volumeapplet_1.2.3.bb b/packages/opie-volumeapplet/opie-volumeapplet_1.2.3.bb
new file mode 100644
index 0000000000..364a8f3b31
--- /dev/null
+++ b/packages/opie-volumeapplet/opie-volumeapplet_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+PR = "r0"
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/volumeapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb b/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
index 806f7b77fc..86a47417ed 100644
--- a/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
+++ b/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
@@ -1,6 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
+PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/volumeapplet \
${HANDHELDS_CVS};module=opie/apps"
diff --git a/packages/opie-vtapplet/opie-vtapplet_1.2.3.bb b/packages/opie-vtapplet/opie-vtapplet_1.2.3.bb
new file mode 100644
index 0000000000..51c55c5b8f
--- /dev/null
+++ b/packages/opie-vtapplet/opie-vtapplet_1.2.3.bb
@@ -0,0 +1,5 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/vtapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-wellenreiter/opie-wellenreiter_1.2.3.bb b/packages/opie-wellenreiter/opie-wellenreiter_1.2.3.bb
new file mode 100644
index 0000000000..ea09149bce
--- /dev/null
+++ b/packages/opie-wellenreiter/opie-wellenreiter_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/wellenreiter \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.3.bb b/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.3.bb
new file mode 100644
index 0000000000..1a1bf963fb
--- /dev/null
+++ b/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.3.bb
@@ -0,0 +1,4 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/wirelessapplet"
diff --git a/packages/opie-wordgame/opie-wordgame_1.2.3.bb b/packages/opie-wordgame/opie-wordgame_1.2.3.bb
new file mode 100644
index 0000000000..4929765204
--- /dev/null
+++ b/packages/opie-wordgame/opie-wordgame_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/wordgame \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-write/opie-write_1.2.3.bb b/packages/opie-write/opie-write_1.2.3.bb
new file mode 100644
index 0000000000..e8dc4d95e8
--- /dev/null
+++ b/packages/opie-write/opie-write_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-zkbapplet/opie-zkbapplet_1.2.3.bb b/packages/opie-zkbapplet/opie-zkbapplet_1.2.3.bb
new file mode 100644
index 0000000000..393546bea2
--- /dev/null
+++ b/packages/opie-zkbapplet/opie-zkbapplet_1.2.3.bb
@@ -0,0 +1,7 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/zkbapplet \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/share \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-zlines/opie-zlines_1.2.3.bb b/packages/opie-zlines/opie-zlines_1.2.3.bb
new file mode 100644
index 0000000000..3ead45de53
--- /dev/null
+++ b/packages/opie-zlines/opie-zlines_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/zlines \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-zsafe/opie-zsafe_1.2.3.bb b/packages/opie-zsafe/opie-zsafe_1.2.3.bb
new file mode 100644
index 0000000000..c33925c0f3
--- /dev/null
+++ b/packages/opie-zsafe/opie-zsafe_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/zsafe \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-zsame/opie-zsame_1.2.3.bb b/packages/opie-zsame/opie-zsame_1.2.3.bb
new file mode 100644
index 0000000000..263dba7a95
--- /dev/null
+++ b/packages/opie-zsame/opie-zsame_1.2.3.bb
@@ -0,0 +1,6 @@
+require ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/games/zsame \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/oprofile/oprofile-0.9.1/acinclude.m4 b/packages/oprofile/oprofile-0.9.1/acinclude.m4
deleted file mode 100644
index ffaa8288df..0000000000
--- a/packages/oprofile/oprofile-0.9.1/acinclude.m4
+++ /dev/null
@@ -1,600 +0,0 @@
-dnl AX_KERNEL_OPTION(option, action-if-found, action-if-not-found)
-dnl see if autoconf.h defines the option
-AC_DEFUN([AX_KERNEL_OPTION], [
-SAVE_CFLAGS=$CFLAGS
-CFLAGS="-I$KINC -O2 -D__KERNEL__"
-AC_TRY_COMPILE( [#include <linux/config.h>],
-[
-#ifndef $1
-break_me_hard(\\\);
-#endif
-],[$2],[$3],)
-CFLAGS=$SAVE_CFLAGS
-])
-
-dnl Handle the 2.4 module inside module/
-AC_DEFUN([AX_CONFIG_MODULE],
-[
-if test ! -f $KINC/linux/autoconf.h; then
- AC_MSG_ERROR([no suitably configured kernel include tree found])
-fi
-
-dnl --- Get Linux kernel version and compile parameters ---
-
-AC_SUBST(KVERS)
-AC_MSG_CHECKING([for kernel version])
-dnl it's like this to handle mandrake's fubar version.h - bug #471448
-eval KVERS=`gcc -I$KINC -E -dM $KINC/linux/version.h | grep -w UTS_RELEASE | awk '{print $[]3}'`
-AC_MSG_RESULT([$KVERS])
-case "$KVERS" in
-2.2.*|2.4.*) ;;
-*) AC_MSG_ERROR([Unsupported kernel version])
-esac
-
-dnl Check for the minimal kernel version supported
-AC_MSG_CHECKING([kernel version])
-AX_KERNEL_VERSION(2, 2, 10, <=, AC_MSG_RESULT([ok]), AC_MSG_ERROR([check html documentation install section]))
-
-dnl linux/spinlock.h added at some point in past
-AC_MSG_CHECKING([for $KINC/linux/spinlock.h])
-if test -f $KINC/linux/spinlock.h; then
- EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DHAVE_LINUX_SPINLOCK_HEADER"
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
-
-AC_MSG_CHECKING([for rtc_lock])
-gcc -I$KINC -E $KINC/linux/mc146818rtc.h | grep rtc_lock >/dev/null
-if test "$?" -eq 0; then
- EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DRTC_LOCK"
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
-
-arch="unknown"
-AC_MSG_CHECKING(for x86-64 architecture)
-AX_KERNEL_OPTION(CONFIG_X86_64, x8664=1, x8664=0)
-AX_MSG_RESULT_YN($x8664)
-BUILD_HAMMER=no
-if test "$x8664" -eq 1; then
- arch="x86"
- BUILD_HAMMER=yes
-else
- AC_MSG_CHECKING(for x86 architecture)
- AX_KERNEL_OPTION(CONFIG_X86, x86=1, x86=0)
- AX_KERNEL_OPTION(CONFIG_X86_WP_WORKS_OK, x86=1, x86=$x86)
- AX_MSG_RESULT_YN($x86)
- test "$x86" = 1 && arch="x86"
-
- if test "$arch" = "unknown"; then
- AC_MSG_CHECKING(for ia64 architecture)
- AX_KERNEL_OPTION(CONFIG_IA64, ia64=1, ia64=0)
- AX_MSG_RESULT_YN($ia64)
- test "$ia64" = 1 && arch="ia64"
- fi
-
-fi
-AC_SUBST(BUILD_HAMMER)
-
-test "$arch" = "unknown" && AC_MSG_ERROR(Unsupported architecture)
-
-dnl check to see if kernel verion appropriate for arch
-AC_MSG_CHECKING(arch/kernel version combination)
-case "$arch" in
-ia64)
- AX_KERNEL_VERSION(2, 4, 18, <, AC_MSG_RESULT([ok]),
- AC_MSG_ERROR([unsupported arch/kernel])) ;;
-*) AC_MSG_RESULT([ok])
-esac
-
-dnl for now we do not support PREEMPT patch
-AC_MSG_CHECKING([for preempt patch])
-AX_KERNEL_OPTION(CONFIG_PREEMPT,preempt=1,preempt=0)
-AX_MSG_RESULT_YN([$preempt])
-test "$preempt" = 0 || AC_MSG_ERROR([unsupported kernel configuration : CONFIG_PREEMPT])
-
-AC_SUBST(KINC)
-
-MODINSTALLDIR=/lib/modules/$KVERS
-
-OPROFILE_MODULE_ARCH=$arch
-AC_SUBST(OPROFILE_MODULE_ARCH)
-]
-)
-
-dnl AX_KERNEL_VERSION(major, minor, level, comparison, action-if-true, action-if-false)
-AC_DEFUN([AX_KERNEL_VERSION], [
-SAVE_CFLAGS=$CFLAGS
-CFLAGS="-I$KINC -D__KERNEL__ -Werror"
-AC_TRY_COMPILE(
- [
- #include <linux/version.h>
- #include <linux/config.h>
- ],
- [
- #if LINUX_VERSION_CODE $4 KERNEL_VERSION($1, $2, $3)
- break_me_hard(\\\);
- #endif
- ],
-[$5],[$6],)
-CFLAGS=$SAVE_CFLAGS
-])
-
-
-dnl AX_MSG_RESULT_YN(a)
-dnl results "yes" iff a==1, "no" else
-AC_DEFUN([AX_MSG_RESULT_YN], [x=no
-test "x$1" = "x1" && x=yes
-AC_MSG_RESULT($x)])
-
-dnl AX_MALLOC_ATTRIBUTE - see if gcc will take __attribute__((malloc))
-AC_DEFUN([AX_MALLOC_ATTRIBUTE],
-[
-AC_MSG_CHECKING([whether malloc attribute is understood])
-SAVE_CFLAGS=$CFLAGS
-CFLAGS="-Werror $CFLAGS"
-AC_TRY_COMPILE(,[
-void monkey() __attribute__((malloc));
-],AC_MSG_RESULT([yes]); AC_DEFINE(MALLOC_ATTRIBUTE_OK, 1, [whether malloc attribute is understood]), AC_MSG_RESULT([no]))
-CFLAGS=$SAVE_CFLAGS
-]
-)
-
-dnl builtin_expect is used in module we can't add that in config.h
-AC_DEFUN([AX_BUILTIN_EXPECT],
-[
-AC_MSG_CHECKING([whether __builtin_expect is understood])
-SAVE_CFLAGS=$CFLAGS
-CFLAGS="-Werror $CFLAGS"
-AC_TRY_LINK(,[
-int i;
-if (__builtin_expect(i, 0)) { }
-],
-AC_MSG_RESULT([yes]); EXTRA_CFLAGS_MODULE="$EXTRA_CFLAGS_MODULE -DEXPECT_OK",
-AC_MSG_RESULT([no]);)
-CFLAGS=$SAVE_CFLAGS
-]
-)
-
-dnl AX_EXTRA_DIRS - Let user specify extra dirs for include/libs
-AC_DEFUN([AX_EXTRA_DIRS],
-[
-AC_ARG_WITH(extra-includes,
-[ --with-extra-includes=DIR add extra include paths],
- use_extra_includes="$withval",
- use_extra_includes=NO
-)
-if test -n "$use_extra_includes" && \
- test "$use_extra_includes" != "NO"; then
- ac_save_ifs=$IFS
- IFS=':'
- for dir in $use_extra_includes; do
- extra_includes="$extra_includes -I$dir"
- done
- IFS=$ac_save_ifs
- CPPFLAGS="$CPPFLAGS $extra_includes"
-fi
-
-AC_ARG_WITH(extra-libs,
-[ --with-extra-libs=DIR add extra library paths],
- use_extra_libs=$withval,
- use_extra_libs=NO
-)
-if test -n "$use_extra_libs" && \
- test "$use_extra_libs" != "NO"; then
- ac_save_ifs=$IFS
- IFS=':'
- for dir in $use_extra_libs; do
- extra_libraries="$extra_libraries -L$dir"
- done
- IFS=$ac_save_ifs
- LDFLAGS="$LDFLAGS $extra_libraries"
-fi
-]
-)
-
-dnl AX_POPT_CONST - check popt prototype
-AC_DEFUN([AX_POPT_CONST],
-[
-AC_MSG_CHECKING([popt prototype])
-SAVE_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-Werror $CXXFLAGS"
-AC_TRY_COMPILE([#include <popt.h>],
-[
-int c; char **v;
-poptGetContext(0, c, v, 0, 0);
-],
-AC_MSG_RESULT([takes char **]);,
-AC_MSG_RESULT([takes const char **]); AC_DEFINE(CONST_POPT, 1, [whether popt prototype takes a const char **]))
-CXXFLAGS="$SAVE_CXXFLAGS"
-]
-)
-
-dnl AX_CHECK_SSTREAM - check if local sstream is needed to compile OK
-AC_DEFUN([AX_CHECK_SSTREAM],
-[
-AC_MSG_CHECKING([whether to use included sstream])
-AC_TRY_COMPILE([#include <sstream>], [],
-AC_MSG_RESULT([no]);,
-AC_MSG_RESULT([yes]); OP_CXXFLAGS="$OP_CXXFLAGS -I\${top_srcdir}/include")
-]
-)
-
-dnl AX_CHECK_TYPEDEF(typedef_name, type, action-if-true, action-if-false)
-dnl exec action-if-true if typedef_name is a typedef to type else exec
-dnl action-if-false
-dnl currently work only with type typedef'ed in stddef.h
-AC_DEFUN([AX_CHECK_TYPEDEF], [
-dnl AC_LANG_PUSH(C) not in autoconf 2.13
-AC_LANG_SAVE
-AC_LANG_C
-SAVE_CFLAGS=$CFLAGS
-CFLAGS="-Werror $CFLAGS"
-
-AC_TRY_COMPILE(
- [
- #include <stddef.h>
- ],
- [
- typedef void (*fct1)($1);
- typedef void (*fct2)($2);
- fct1 f1 = 0;
- fct2 f2 = 0;
- if (f1 == f2) {}
- ],
-[$3],[$4])
-
-CFLAGS=$SAVE_CFLAGS
-AC_LANG_RESTORE
-])
-
-
-dnl AX_TYPEDEFED_NAME(typedef_name, candidate_list, var_name)
-dnl set var_name to the typedef name of $1 which must be in canditate_list
-dnl else produce a fatal error
-AC_DEFUN([AX_TYPEDEFED_NAME], [
- AC_MSG_CHECKING([type of $1])
- for f in $2; do
- AX_CHECK_TYPEDEF($1, $f, $3="$f", $3="")
- if test -n "${$3}"; then
- break
- fi
- done
- if test -n "${$3}"; then
- AC_MSG_RESULT([${$3}])
- else
- AC_MSG_ERROR([not found])
- fi
-])
-
-dnl find a binary in the path
-AC_DEFUN([QT_FIND_PATH],
-[
- AC_MSG_CHECKING([for $1])
- AC_CACHE_VAL(qt_cv_path_$1,
- [
- qt_cv_path_$1="NONE"
- if test -n "$$2"; then
- qt_cv_path_$1="$$2";
- else
- dirs="$3"
- qt_save_IFS=$IFS
- IFS=':'
- for dir in $PATH; do
- dirs="$dirs $dir"
- done
- IFS=$qt_save_IFS
-
- for dir in $dirs; do
- if test -x "$dir/$1"; then
- if test -n "$5"; then
- evalstr="$dir/$1 $5 2>&1 "
- if eval $evalstr; then
- qt_cv_path_$1="$dir/$1"
- break
- fi
- else
- qt_cv_path_$1="$dir/$1"
- break
- fi
- fi
- done
- fi
- ])
-
- if test -z "$qt_cv_path_$1" || test "$qt_cv_path_$1" = "NONE"; then
- AC_MSG_RESULT(not found)
- $4
- else
- AC_MSG_RESULT($qt_cv_path_$1)
- $2=$qt_cv_path_$1
- fi
-])
-
-dnl Find the uic compiler on the path or in qt_cv_dir
-AC_DEFUN([QT_FIND_UIC],
-[
- QT_FIND_PATH(uic, ac_uic, $qt_cv_dir/bin)
- if test -z "$ac_uic" -a "$FATAL" = 1; then
- AC_MSG_ERROR([uic binary not found in \$PATH or $qt_cv_dir/bin !])
- fi
-])
-
-dnl Find the right moc in path/qt_cv_dir
-AC_DEFUN([QT_FIND_MOC],
-[
- QT_FIND_PATH(moc2, ac_moc2, $qt_cv_dir/bin)
- QT_FIND_PATH(moc, ac_moc1, $qt_cv_dir/bin)
-
- if test -n "$ac_moc1" -a -n "$ac_moc2"; then
- dnl found both. Prefer Qt3's if it exists else moc2
- $ac_moc1 -v 2>&1 | grep "Qt 3" >/dev/null
- if test "$?" = 0; then
- ac_moc=$ac_moc1;
- else
- ac_moc=$ac_moc2;
- fi
- else
- if test -n "$ac_moc1"; then
- ac_moc=$ac_moc1;
- else
- ac_moc=$ac_moc2;
- fi
- fi
-
- if test -z "$ac_moc" -a "$FATAL" = 1; then
- AC_MSG_ERROR([moc binary not found in \$PATH or $qt_cv_dir/bin !])
- fi
-])
-
-dnl check a particular libname
-AC_DEFUN([QT_TRY_LINK],
-[
- SAVE_LIBS="$LIBS"
- LIBS="$LIBS $1"
- AC_TRY_LINK([
- #include <qglobal.h>
- #include <qstring.h>
- ],
- [
- QString s("mangle_failure");
- #if (QT_VERSION < 221)
- break_me_(\\\);
- #endif
- ],
- qt_cv_libname=$1,
- )
- LIBS="$SAVE_LIBS"
-])
-
-dnl check we can do a compile
-AC_DEFUN([QT_CHECK_COMPILE],
-[
- AC_MSG_CHECKING([for Qt library name])
-
- AC_CACHE_VAL(qt_cv_libname,
- [
- AC_LANG_CPLUSPLUS
- SAVE_CXXFLAGS=$CXXFLAGS
- CXXFLAGS="$CXXFLAGS $QT_INCLUDES $QT_LDFLAGS"
-
- for libname in -lqt-mt -lqt3 -lqt2 -lqt;
- do
- QT_TRY_LINK($libname)
- if test -n "$qt_cv_libname"; then
- break;
- fi
- done
-
- CXXFLAGS=$SAVE_CXXFLAGS
- ])
-
- if test -z "$qt_cv_libname"; then
- AC_MSG_RESULT([failed])
- if test "$FATAL" = 1 ; then
- AC_MSG_ERROR([Cannot compile a simple Qt executable. Check you have the right \$QTDIR !])
- fi
- else
- AC_MSG_RESULT([$qt_cv_libname])
- fi
-])
-
-dnl get Qt version we're using
-AC_DEFUN([QT_GET_VERSION],
-[
- AC_CACHE_CHECK([Qt version],lyx_cv_qtversion,
- [
- AC_LANG_CPLUSPLUS
- SAVE_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS $QT_INCLUDES"
-
- cat > conftest.$ac_ext <<EOF
-#line __oline__ "configure"
-#include "confdefs.h"
-#include <qglobal.h>
-"%%%"QT_VERSION_STR"%%%"
-EOF
- lyx_cv_qtversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
- grep '^"%%%"' 2>/dev/null | \
- sed -e 's/"%%%"//g' -e 's/"//g'`
- rm -f conftest.$ac_ext
- CPPFLAGS=$SAVE_CPPFLAGS
- ])
-
- QT_VERSION=$lyx_cv_qtversion
- AC_SUBST(QT_VERSION)
-])
-
-dnl start here
-AC_DEFUN([QT_DO_IT_ALL],
-[
- dnl Please leave this alone. I use this file in
- dnl oprofile.
- FATAL=0
-
- AC_ARG_WITH(qt-dir, [ --with-qt-dir where the root of Qt is installed ],
- [ qt_cv_dir=`eval echo "$withval"/` ])
-
- AC_ARG_WITH(qt-includes, [ --with-qt-includes where the Qt includes are. ],
- [ qt_cv_includes=`eval echo "$withval"` ])
-
- AC_ARG_WITH(qt-libraries, [ --with-qt-libraries where the Qt library is installed.],
- [ qt_cv_libraries=`eval echo "$withval"` ])
-
- dnl pay attention to $QTDIR unless overridden
- if test -z "$qt_cv_dir"; then
- qt_cv_dir=$QTDIR
- fi
-
- dnl derive inc/lib if needed
- if test -n "$qt_cv_dir"; then
- if test -z "$qt_cv_includes"; then
- qt_cv_includes=$qt_cv_dir/include
- fi
- if test -z "$qt_cv_libraries"; then
- qt_cv_libraries=$qt_cv_dir/lib
- fi
- fi
-
- dnl flags for compilation
- QT_INCLUDES=
- QT_LDFLAGS=
- if test -n "$qt_cv_includes"; then
- QT_INCLUDES="-I$qt_cv_includes"
- fi
- if test -n "$qt_cv_libraries"; then
- QT_LDFLAGS="-L$qt_cv_libraries"
- fi
- AC_SUBST(QT_INCLUDES)
- AC_SUBST(QT_LDFLAGS)
-
- QT_FIND_MOC
- MOC=$ac_moc
- AC_SUBST(MOC)
- QT_FIND_UIC
- UIC=$ac_uic
- AC_SUBST(UIC)
-
- QT_CHECK_COMPILE
-
- QT_LIB=$qt_cv_libname;
- AC_SUBST(QT_LIB)
-
- if test -n "$qt_cv_libname"; then
- QT_GET_VERSION
- fi
-])
-
-dnl AX_CXXFLAGS_OPTIONS(var-name, option)
-dnl add option to var-name if $CXX support it.
-AC_DEFUN([AX_CHECK_PRECOMPILED_HEADER], [
-AC_MSG_CHECKING([whether ${CXX} support precompiled header])
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-SAVE_CXXFLAGS=$CXXFLAGS
-dnl we consider than if -Winvalid-pch is accepted pch will works ...
-CXXFLAGS=-Winvalid-pch
-dnl but we don't want -Winvalid-pch else compilation will fail due -Werror and
-dnl the fact than some pch will be invalid for the given compilation option
-AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} -include bits/stdc++.h", AC_MSG_RESULT([no]))
-CXXFLAGS=$SAVE_CXXFLAGS
-AC_LANG_RESTORE
-])
-
-dnl AX_CHECK_DOCBOOK
-AC_DEFUN([AX_CHECK_DOCBOOK], [
-# It's just rude to go over the net to build
-XSLTPROC_FLAGS=--nonet
-DOCBOOK_ROOT=
-if test ! -f /etc/xml/catalog; then
- for i in /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/sgml/docbook/xsl-stylesheets/;
- do
- if test -d "$i"; then
- DOCBOOK_ROOT=$i
- fi
- done
-
- # Last resort - try net
- if test -z "$DOCBOOK_ROOT"; then
- XSLTPROC_FLAGS=
- fi
-else
- XML_CATALOG=/etc/xml/catalog
- CAT_ENTRY_START='<!--'
- CAT_ENTRY_END='-->'
-fi
-
-AC_CHECK_PROG(XSLTPROC,xsltproc,xsltproc,)
-XSLTPROC_WORKS=no
-if test -n "$XSLTPROC"; then
- AC_MSG_CHECKING([whether xsltproc works])
-
- if test -n "$XML_CATALOG"; then
- DB_FILE="http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl"
- else
- DB_FILE="$DOCBOOK_ROOT/docbook.xsl"
- fi
-
- $XSLTPROC $XSLTPROC_FLAGS $DB_FILE >/dev/null 2>&1 << END
-<?xml version="1.0" encoding='ISO-8859-1'?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="test">
-</book>
-END
- if test "$?" = 0; then
- XSLTPROC_WORKS=yes
- fi
- AC_MSG_RESULT($XSLTPROC_WORKS)
-fi
-AM_CONDITIONAL(have_xsltproc, test "$XSLTPROC_WORKS" = "yes")
-
-AC_SUBST(XML_CATALOG)
-AC_SUBST(XSLTPROC_FLAGS)
-AC_SUBST(DOCBOOK_ROOT)
-AC_SUBST(CAT_ENTRY_START)
-AC_SUBST(CAT_ENTRY_END)
-])
-
-dnl AX_CFLAGS_OPTIONS(var-name, option)
-dnl add option to var-name if $CC support it.
-AC_DEFUN([AX_CFLAGS_OPTION], [
-AC_MSG_CHECKING([whether ${CC} $2 is understood])
-AC_LANG_SAVE
-AC_LANG_C
-SAVE_CFLAGS=$CFLAGS
-CFLAGS=$2
-AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} $2",AC_MSG_RESULT([no]))
-CFLAGS=$SAVE_CFLAGS
-AC_LANG_RESTORE
-])
-
-
-dnl AX_CXXFLAGS_OPTIONS(var-name, option)
-dnl add option to var-name if $CXX support it.
-AC_DEFUN([AX_CXXFLAGS_OPTION], [
-AC_MSG_CHECKING([whether ${CXX} $2 is understood])
-AC_LANG_SAVE
-AC_LANG_CPLUSPLUS
-SAVE_CXXFLAGS=$CXXFLAGS
-CXXFLAGS=$2
-AC_TRY_COMPILE(,[;],AC_MSG_RESULT([yes]); $1="${$1} $2",AC_MSG_RESULT([no]))
-CXXFLAGS=$SAVE_CXXFLAGS
-AC_LANG_RESTORE
-])
-
-dnl AX_COPY_IF_CHANGE(source, dest)
-dnl copy source to dest if they don't compare equally or if dest doesn't exist
-AC_DEFUN([AX_COPY_IF_CHANGE], [
-if test -r $2; then
- if cmp $1 $2 > /dev/null; then
- echo $2 is unchanged
- else
- cp -f $1 $2
- fi
-else
- cp -f $1 $2
-fi
-])
-
diff --git a/packages/oprofile/oprofile-0.9.1/no_arm_mapping_syms.patch b/packages/oprofile/oprofile-0.9.1/no_arm_mapping_syms.patch
deleted file mode 100644
index 4c07e5c735..0000000000
--- a/packages/oprofile/oprofile-0.9.1/no_arm_mapping_syms.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: oprofile-0.9/libutil++/bfd_support.cpp
-===================================================================
---- oprofile-0.9.orig/libutil++/bfd_support.cpp 2005-05-05 15:43:46.000000000 +0100
-+++ oprofile-0.9/libutil++/bfd_support.cpp 2005-06-10 10:18:24.000000000 +0100
-@@ -330,6 +330,11 @@
- // returning true for fix up in op_bfd_symbol()
- if (!sym->name || sym->name[0] == '\0')
- return true;
-+ /* ARM assembler internal mapping symbols aren't interesting */
-+ if ((strcmp("$a", sym->name) == 0) ||
-+ (strcmp("$t", sym->name) == 0) ||
-+ (strcmp("$d", sym->name) == 0))
-+ return false;
-
- // C++ exception stuff
- if (sym->name[0] == '.' && sym->name[1] == 'L')
diff --git a/packages/oprofile/oprofile_0.9.3.bb b/packages/oprofile/oprofile_0.9.3.bb
new file mode 100644
index 0000000000..d758b97549
--- /dev/null
+++ b/packages/oprofile/oprofile_0.9.3.bb
@@ -0,0 +1,38 @@
+SECTION = "devel"
+DESCRIPTION = "OProfile is a system-wide profiler for Linux systems, capable \
+of profiling all running code at low overhead."
+LICENSE = "GPL"
+DEPENDS = "popt binutils"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/oprofile/oprofile-${PV}.tar.gz \
+ file://acinclude.m4"
+S = "${WORKDIR}/oprofile-${PV}"
+
+inherit autotools
+
+# NOTE: this disables the build of the kernel modules.
+# Should add the oprofile kernel modules, for those with 2.4
+# kernels, as a seperate .oe file.
+EXTRA_OECONF = "--with-kernel-support \
+ --without-x \
+ --disable-werror "
+
+do_configure () {
+ cp ${WORKDIR}/acinclude.m4 ${S}/
+ autotools_do_configure
+}
+# Available config options
+# --enable-abi enable abi portability code (default is disabled)
+# --enable-pch enable precompiled header (default is disabled)
+# --enable-gcov enable option for gcov coverage testing (default is disabled)
+# --disable-werror disable -Werror flag (default is enabled for non-release)
+# --disable-optimization disable optimization flags (default is enabled)
+# --with-kernel-support Use 2.6 kernel (no kernel source tree required)
+# --with-linux=dir Path to Linux source tree
+# --with-module-dir=dir Path to module installation directory
+# --with-extra-includes=DIR add extra include paths
+# --with-extra-libs=DIR add extra library paths
+# --with-x use the X Window System
+# --with-qt-dir where the root of Qt is installed
+# --with-qt-includes where the Qt includes are.
+# --with-qt-libraries where the Qt library is installed.
diff --git a/packages/oprofile/oprofile_cvs.bb b/packages/oprofile/oprofile_cvs.bb
index 902c569e85..2eec2a7836 100644
--- a/packages/oprofile/oprofile_cvs.bb
+++ b/packages/oprofile/oprofile_cvs.bb
@@ -9,8 +9,6 @@ DEPENDS = "popt binutils"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "cvs://anonymous@oprofile.cvs.sourceforge.net/cvsroot/oprofile;module=oprofile \
- file://no_arm_mapping_syms.patch;patch=1 \
- file://opcontrol_bashisms.patch;patch=1 \
file://acinclude.m4"
S = "${WORKDIR}/oprofile"
diff --git a/packages/orinoco/spectrum-fw.bb b/packages/orinoco/spectrum-fw.bb
index 015f61593a..f2e11eea74 100644
--- a/packages/orinoco/spectrum-fw.bb
+++ b/packages/orinoco/spectrum-fw.bb
@@ -1,4 +1,5 @@
DESCRIPTION = "Firmware for Spectrum Wireless LAN cards"
+DEPENDS += " unzip-native "
LICENSE = "unknown"
PR = "r1"
diff --git a/packages/ossie/ossie-c-wavloader_svn.bb b/packages/ossie/ossie-c-wavloader_svn.bb
deleted file mode 100644
index 8f79f4667e..0000000000
--- a/packages/ossie/ossie-c-wavloader_svn.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "OSSIE Waveform Loader"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-PR = "r0"
-
-DEPENDS = "ossiecf expat"
-
-S="${WORKDIR}/c_wavLoader"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/platform/c_wavLoader/trunk;module=c_wavLoader;proto=https"
-
-inherit autotools
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-channeldemo_svn.bb b/packages/ossie/ossie-channeldemo_svn.bb
deleted file mode 100644
index c7b6ffebff..0000000000
--- a/packages/ossie/ossie-channeldemo_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE Demo channel component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/ChannelDemo"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/ChannelDemo/trunk;module=ChannelDemo;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/ChannelDemo/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-demo_svn.bb b/packages/ossie/ossie-demo_svn.bb
deleted file mode 100644
index cef94f40a2..0000000000
--- a/packages/ossie/ossie-demo_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE Demo waveform"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-channeldemo ossie-rxdemo"
-RDEPENDS = "ossie-channeldemo ossie-rxdemo"
-
-S = "${WORKDIR}/ossie_demo"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/waveforms/ossie_demo/trunk;module=ossie_demo;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/waveforms/ossie_demo/*.xml /home/sca/xml/TxDemo/*.xml"
-BROKEN = "1"
diff --git a/packages/ossie/ossie-gpp-device_svn.bb b/packages/ossie/ossie-gpp-device_svn.bb
deleted file mode 100644
index 24099746b0..0000000000
--- a/packages/ossie/ossie-gpp-device_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE General Purpose Processor device"
-SECTION = "apps"
-PRIORITY = "optional"
-MAINTAINER = "Philip Balister philip@balister.org"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/GPP"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/platform/GPP/trunk;module=GPP;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/GPP/*xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-interpolator_svn.bb b/packages/ossie/ossie-interpolator_svn.bb
deleted file mode 100644
index 24d641d0a2..0000000000
--- a/packages/ossie/ossie-interpolator_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE Interpolator component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-standardinterfaces ossie-sigproc"
-
-S = "${WORKDIR}/Interpolator"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/Interpolator/trunk;module=Interpolator;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/Interpolator/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-modulator_svn.bb b/packages/ossie/ossie-modulator_svn.bb
deleted file mode 100644
index bead988782..0000000000
--- a/packages/ossie/ossie-modulator_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE Modulator component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-standardinterfaces ossie-sigproc"
-
-S = "${WORKDIR}/Modulator"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/Modulator/trunk;module=Modulator;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/Modulator/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-nodebooter_svn.bb b/packages/ossie/ossie-nodebooter_svn.bb
deleted file mode 100644
index f37df3da74..0000000000
--- a/packages/ossie/ossie-nodebooter_svn.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "OSSIE Node Booter"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/nodebooter"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/platform/nodebooter/trunk;module=nodebooter;proto=https"
-
-inherit autotools
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-randombits_svn.bb b/packages/ossie/ossie-randombits_svn.bb
deleted file mode 100644
index 6f9185910a..0000000000
--- a/packages/ossie/ossie-randombits_svn.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "OSSIE Random bit generator component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-standardinterfaces ossie-sigproc"
-
-S = "${WORKDIR}/RandomBits"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/RandomBits/trunk;module=RandomBits;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/RandomBits/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-rxdemo_svn.bb b/packages/ossie/ossie-rxdemo_svn.bb
deleted file mode 100644
index 2260cb9956..0000000000
--- a/packages/ossie/ossie-rxdemo_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE Demo receiver component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/RxDemo"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/RxDemo/trunk;module=RxDemo;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/RxDemo/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-sigproc_svn.bb b/packages/ossie/ossie-sigproc_svn.bb
deleted file mode 100644
index 20fe0b6460..0000000000
--- a/packages/ossie/ossie-sigproc_svn.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "OSSIE Signal Processing routines"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/SigProc"
-
-SRCDATE = "now"
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/SigProc/trunk;module=SigProc;proto=https"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF_append_arm = " --enable-fpm=arm"
-
-CXXFLAGS_powerpc = "-lstdc++"
-
-do_stage () {
- autotools_stage_all
-}
-BROKEN = "1"
diff --git a/packages/ossie/ossie-soundout-device_svn.bb b/packages/ossie/ossie-soundout-device_svn.bb
deleted file mode 100644
index 83daa5b013..0000000000
--- a/packages/ossie/ossie-soundout-device_svn.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "OSSIE sound playback device"
-SECTION = "apps"
-PRIORITY = "optional"
-MAINTAINER = "Philip Balister philip@balister.org"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "alsa-lib ossiecf ossie-standardinterfaces"
-
-S = "${WORKDIR}/Sound_out"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/platform/Sound_out/trunk;module=Sound_out;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-EXTRA_OECONF = "--with-omniorb=${STAGING_BINDIR}/.. IDL=${STAGING_BINDIR_NATIVE}/omniidl"
-
-FILES_${PN} += "/home/sca/xml/soundCard/*xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-standardinterfaces_svn.bb b/packages/ossie/ossie-standardinterfaces_svn.bb
deleted file mode 100644
index 44e2f3899e..0000000000
--- a/packages/ossie/ossie-standardinterfaces_svn.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "OSSIE Standard port interfaces"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf"
-
-S = "${WORKDIR}/standardInterfaces"
-
-SRCDATE = "now"
-SRC_URI = "svn://ossie-dev.mprg.org/repos/ossie/standardInterfaces/trunk;module=standardInterfaces;proto=https"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-omniorb=${STAGING_BINDIR}/.. IDL=${STAGING_BINDIR_NATIVE}/omniidl"
-
-CXXFLAGS_powerpc += "-lstdc++"
-
-do_stage () {
- autotools_stage_all
-}
-BROKEN = "1"
diff --git a/packages/ossie/ossie-tx-random-data_svn.bb b/packages/ossie/ossie-tx-random-data_svn.bb
deleted file mode 100644
index 744e505679..0000000000
--- a/packages/ossie/ossie-tx-random-data_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE transmit random bits waveform"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-randombits ossie-modulator ossie-interpolator ossie-usrp-tx-control ossie-usrp-device ossie-gpp-device"
-RDEPENDS = "ossie-randombits ossie-modulator ossie-interpolator ossie-usrp-tx-control ossie-usrp-device ossie-gpp-device"
-
-S = "${WORKDIR}/TX_Random_data"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/waveforms/TX_Random_data/trunk;module=TX_Random_data;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/waveforms/Random_BPSK/*.xml"
-BROKEN = "1"
diff --git a/packages/ossie/ossie-usrp-device_svn.bb b/packages/ossie/ossie-usrp-device_svn.bb
deleted file mode 100644
index e28996ce15..0000000000
--- a/packages/ossie/ossie-usrp-device_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE General Purpose Processor device"
-SECTION = "apps"
-PRIORITY = "optional"
-MAINTAINER = "Philip Balister philip@balister.org"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf usrp ossie-standardinterfaces"
-
-S = "${WORKDIR}/USRP"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/platform/USRP/trunk;module=USRP;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/USRP/*xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossie-usrp-tx-control_svn.bb b/packages/ossie/ossie-usrp-tx-control_svn.bb
deleted file mode 100644
index 756fce9d61..0000000000
--- a/packages/ossie/ossie-usrp-tx-control_svn.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "OSSIE USRP TX side control component"
-SECTION = "apps"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PV = "0.0.0+svn${SRCDATE}"
-
-DEPENDS = "ossiecf ossie-standardinterfaces"
-
-S = "${WORKDIR}/USRP_TX_Control"
-
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/components/USRP_TX_Control/trunk;module=USRP_TX_Control;proto=https"
-
-prefix="/home/sca"
-
-inherit autotools
-
-FILES_${PN} += "/home/sca/xml/USRP_TX_Control/*.xml"
-
-BROKEN = "1"
diff --git a/packages/ossie/ossiecf_svn.bb b/packages/ossie/ossiecf_svn.bb
deleted file mode 100644
index 35bf7523f0..0000000000
--- a/packages/ossie/ossiecf_svn.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "OSSIE Core Framework"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-DEPENDS = "xerces-c omniorb libtool-cross"
-PV = "0.0.0+svn${SRCDATE}"
-
-S = "${WORKDIR}/ossie"
-
-SRC_URI = "svn://oe:oe@ossie-dev.mprg.org/repos/ossie/ossie/trunk;module=ossie;proto=https"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--with-omniorb=${STAGING_BINDIR}/.. IDL=${STAGING_BINDIR_NATIVE}/omniidl"
-
-CXXFLAGS_powerpc += "-lstdc++"
-
-do_stage () {
- autotools_stage_all
-}
-
-FILES_${PN} += "/home/sca/xml/dtd/*.dtd"
-
-BROKEN = "1"
diff --git a/packages/p3scan/files/configure.in-add-newline.patch b/packages/p3scan/files/configure.in-add-newline.patch
new file mode 100644
index 0000000000..0b1ff182e6
--- /dev/null
+++ b/packages/p3scan/files/configure.in-add-newline.patch
@@ -0,0 +1,14 @@
+Recent autotools/m4 updates don't like configure.in files without a newline
+at the end. Fix this up.
+
+Index: p3scan-2.9.05d/configure.in
+===================================================================
+--- p3scan-2.9.05d.orig/configure.in 2007-08-08 21:39:49.000000000 +1000
++++ p3scan-2.9.05d/configure.in 2007-08-08 21:39:49.000000000 +1000
+@@ -456,4 +456,4 @@
+ echo "Please consider donating to this project at http://p3scan.sourceforge.net"
+ echo "Mahalo Nui Loa and Enjoy!"
+ echo
+-#EOF
+\ No newline at end of file
++#EOF
diff --git a/packages/p3scan/p3scan_2.9.05d.bb b/packages/p3scan/p3scan_2.9.05d.bb
index 328ae6ede0..38739341e6 100644
--- a/packages/p3scan/p3scan_2.9.05d.bb
+++ b/packages/p3scan/p3scan_2.9.05d.bb
@@ -6,11 +6,12 @@ SECTION = "network"
LICENSE = "GPLv2"
DEPENDS = "gmp bzip2 zlib clamav openssl"
RDEPENDS_${PN} = "${PN}-templates-en"
-PR = "r2"
+PR = "r3"
SRC_URI = "${SOURCEFORGE_MIRROR}/p3scan/p3scan-2.9.05d.tar.gz \
file://libtool-fix.patch;patch=1 \
file://dont-search-use-include.patch;patch=1 \
+ file://configure.in-add-newline.patch;patch=1 \
file://p3scan.init \
file://p3scan.conf \
file://doc.configure.txt \
diff --git a/packages/pango/pango-1.16.2/.mtn2git_empty b/packages/pango/pango-1.16.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pango/pango-1.16.2/.mtn2git_empty
diff --git a/packages/pango/pango-1.16.2/no-tests.patch b/packages/pango/pango-1.16.2/no-tests.patch
new file mode 100644
index 0000000000..dafcb20c3b
--- /dev/null
+++ b/packages/pango/pango-1.16.2/no-tests.patch
@@ -0,0 +1,10 @@
+--- /tmp/Makefile.am 2007-03-01 13:29:37.000000000 +0100
++++ pango-1.16.0/Makefile.am 2007-03-01 13:29:52.545251000 +0100
+@@ -1,6 +1,6 @@
+ ## Process this file with automake to create Makefile.in.
+
+-SUBDIRS= pango modules pango-view examples docs tools tests
++SUBDIRS= pango modules pango-view examples docs tools
+
+ EXTRA_DIST = \
+ autogen.sh \
diff --git a/packages/pango/pango-1.16.4/.mtn2git_empty b/packages/pango/pango-1.16.4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pango/pango-1.16.4/.mtn2git_empty
diff --git a/packages/pango/pango-1.16.4/no-tests.patch b/packages/pango/pango-1.16.4/no-tests.patch
new file mode 100644
index 0000000000..dafcb20c3b
--- /dev/null
+++ b/packages/pango/pango-1.16.4/no-tests.patch
@@ -0,0 +1,10 @@
+--- /tmp/Makefile.am 2007-03-01 13:29:37.000000000 +0100
++++ pango-1.16.0/Makefile.am 2007-03-01 13:29:52.545251000 +0100
+@@ -1,6 +1,6 @@
+ ## Process this file with automake to create Makefile.in.
+
+-SUBDIRS= pango modules pango-view examples docs tools tests
++SUBDIRS= pango modules pango-view examples docs tools
+
+ EXTRA_DIST = \
+ autogen.sh \
diff --git a/packages/pango/pango_1.16.2.bb b/packages/pango/pango_1.16.2.bb
new file mode 100644
index 0000000000..8e3e8e7d3a
--- /dev/null
+++ b/packages/pango/pango_1.16.2.bb
@@ -0,0 +1 @@
+require pango.inc
diff --git a/packages/pango/pango_1.16.4.bb b/packages/pango/pango_1.16.4.bb
new file mode 100644
index 0000000000..2749b0ba1e
--- /dev/null
+++ b/packages/pango/pango_1.16.4.bb
@@ -0,0 +1,4 @@
+DEFAULT_PREFERENCE = "-1"
+
+require pango.inc
+
diff --git a/packages/parted/files/.mtn2git_empty b/packages/parted/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/parted/files/.mtn2git_empty
diff --git a/packages/parted/files/cross-gross-hack.patch b/packages/parted/files/cross-gross-hack.patch
new file mode 100644
index 0000000000..8d2db63661
--- /dev/null
+++ b/packages/parted/files/cross-gross-hack.patch
@@ -0,0 +1,33 @@
+diff -ur parted-1.8.7.org/configure parted-1.8.7/configure
+--- parted-1.8.7.org/configure 2007-05-10 00:01:27.000000000 +0300
++++ parted-1.8.7/configure 2007-07-10 15:46:42.000000000 +0300
+@@ -12556,7 +12556,7 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ if test "$cross_compiling" = yes; then
+- ac_cv_func_malloc_0_nonnull=no
++ ac_cv_func_malloc_0_nonnull=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+diff -ur parted-1.8.7.org/configure parted-1.8.7/configure
+--- parted-1.8.7.org/configure 2007-07-10 15:48:07.000000000 +0300
++++ parted-1.8.7/configure 2007-07-10 15:57:26.000000000 +0300
+@@ -12889,7 +12889,7 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ if test "$cross_compiling" = yes; then
+- ac_cv_func_memcmp_working=no
++ ac_cv_func_memcmp_working=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -13574,7 +13574,7 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ if test "$cross_compiling" = yes; then
+- ac_cv_func_realloc_0_nonnull=no
++ ac_cv_func_realloc_0_nonnull=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
diff --git a/packages/parted/files/syscalls.h b/packages/parted/files/syscalls.h
new file mode 100644
index 0000000000..9278704b29
--- /dev/null
+++ b/packages/parted/files/syscalls.h
@@ -0,0 +1,166 @@
+/*
+ * linux/include/asm-arm/unistd.h
+ *
+ * Copyright (C) 2001-2005 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Please forward _all_ changes to this file to rmk@arm.linux.org.uk,
+ * no matter what the change is. Thanks!
+ */
+#ifndef __ASM_ARM_UNISTD_H2
+#define __ASM_ARM_UNISTD_H2
+
+
+#define __sys2(x) #x
+#define __sys1(x) __sys2(x)
+
+#ifndef __syscall
+#if defined(__thumb__) || defined(__ARM_EABI__)
+#define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name;
+#define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs
+#define __syscall(name) "swi\t0"
+#else
+#define __SYS_REG(name)
+#define __SYS_REG_LIST(regs...) regs
+#define __syscall(name) "swi\t" __sys1(__NR_##name) ""
+#endif
+#endif
+
+#define __syscall_return(type, res) \
+do { \
+ if ((unsigned long)(res) >= (unsigned long)(-129)) { \
+ errno = -(res); \
+ res = -1; \
+ } \
+ return (type) (res); \
+} while (0)
+
+#define _syscall0(type,name) \
+type name(void) { \
+ __SYS_REG(name) \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST() ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+#define _syscall1(type,name,type1,arg1) \
+type name(type1 arg1) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+#define _syscall2(type,name,type1,arg1,type2,arg2) \
+type name(type1 arg1,type2 arg2) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __r1 __asm__("r1") = (long)arg2; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+type name(type1 arg1,type2 arg2,type3 arg3) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __r1 __asm__("r1") = (long)arg2; \
+ register long __r2 __asm__("r2") = (long)arg3; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __r1 __asm__("r1") = (long)arg2; \
+ register long __r2 __asm__("r2") = (long)arg3; \
+ register long __r3 __asm__("r3") = (long)arg4; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __r1 __asm__("r1") = (long)arg2; \
+ register long __r2 __asm__("r2") = (long)arg3; \
+ register long __r3 __asm__("r3") = (long)arg4; \
+ register long __r4 __asm__("r4") = (long)arg5; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
+ "r" (__r3), "r" (__r4) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \
+ __SYS_REG(name) \
+ register long __r0 __asm__("r0") = (long)arg1; \
+ register long __r1 __asm__("r1") = (long)arg2; \
+ register long __r2 __asm__("r2") = (long)arg3; \
+ register long __r3 __asm__("r3") = (long)arg4; \
+ register long __r4 __asm__("r4") = (long)arg5; \
+ register long __r5 __asm__("r5") = (long)arg6; \
+ register long __res_r0 __asm__("r0"); \
+ long __res; \
+ __asm__ __volatile__ ( \
+ __syscall(name) \
+ : "=r" (__res_r0) \
+ : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \
+ "r" (__r3), "r" (__r4), "r" (__r5) ) ); \
+ __res = __res_r0; \
+ __syscall_return(type,__res); \
+}
+
+/*
+ * "Conditional" syscalls
+ *
+ * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
+ * but it doesn't work on all toolchains, so we just do it by hand
+ */
+#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
+
+#endif /* __ASM_ARM_UNISTD_H2 */
diff --git a/packages/parted/files/syscalls.patch b/packages/parted/files/syscalls.patch
new file mode 100644
index 0000000000..be9b91cb9c
--- /dev/null
+++ b/packages/parted/files/syscalls.patch
@@ -0,0 +1,10 @@
+--- parted-1.8.7/libparted/arch/linux.c.org 2007-05-09 23:40:13.000000000 +0300
++++ parted-1.8.7/libparted/arch/linux.c 2007-07-10 18:20:27.000000000 +0300
+@@ -32,6 +32,7 @@
+ #include <stdio.h>
+ #include <syscall.h>
+ #include <unistd.h>
++#include "syscalls.h"
+ #include <dirent.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
diff --git a/packages/parted/parted_1.8.7.bb b/packages/parted/parted_1.8.7.bb
new file mode 100644
index 0000000000..59e3aeaece
--- /dev/null
+++ b/packages/parted/parted_1.8.7.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "parted, the GNU partition resizing program"
+HOMEPAGE = "http://www.gnu.org/software/parted/parted.html"
+LICENSE = "GPLv2"
+SECTION = "console/tools"
+DEPENDS = "readline e2fsprogs-libs"
+PR = "r2"
+
+SRC_URI = "${GNU_MIRROR}/parted/parted-${PV}.tar.gz \
+ file://syscalls.h \
+ file://syscalls.patch;patch=1 \
+ file://cross-gross-hack.patch;patch=1"
+
+EXTRA_OECONF = "--disable-Werror"
+
+inherit autotools pkgconfig
+
+do_configure_prepend() {
+ cp ${WORKDIR}/syscalls.h ${S}/libparted/arch/
+}
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ autoconf
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/patcher/patcher-native_20040913.bb b/packages/patcher/patcher-native_20040913.bb
index 7da61e91c2..c071d52404 100644
--- a/packages/patcher/patcher-native_20040913.bb
+++ b/packages/patcher/patcher-native_20040913.bb
@@ -4,7 +4,6 @@ LICENSE = "Perl"
DEPENDS = ""
SECTION = "base"
PRIORITY = "optional"
-MAINTAINER = "Holger Schurig <hs4233@mail.mn-solutions.de>"
PACKAGES = ""
PR = "r1"
diff --git a/packages/patcher/patcher_20040913.bb b/packages/patcher/patcher_20040913.bb
index af4d91217c..471f75af7b 100644
--- a/packages/patcher/patcher_20040913.bb
+++ b/packages/patcher/patcher_20040913.bb
@@ -4,7 +4,6 @@ LICENSE = "Perl"
DEPENDS = ""
SECTION = "base"
PRIORITY = "optional"
-MAINTAINER = "Holger Schurig <hs4233@mail.mn-solutions.de>"
INHIBIT_DEFAULT_DEPS = "1"
SRC_URI = "http://www.holgerschurig.de/files/linux/patcher-${PV}.tar.bz2"
diff --git a/packages/pciutils/pciutils-2.2.4/configure-uclibc.patch b/packages/pciutils/pciutils-2.2.4/configure-uclibc.patch
index 0e6e774f91..bfde28c455 100644
--- a/packages/pciutils/pciutils-2.2.4/configure-uclibc.patch
+++ b/packages/pciutils/pciutils-2.2.4/configure-uclibc.patch
@@ -1,6 +1,8 @@
---- /lib/orig-configure 2007-02-13 16:36:54.000000000 +0200
-+++ /lib/configure 2007-02-13 16:37:33.000000000 +0200
-@@ -39,6 +39,11 @@
+Index: pciutils-2.2.4/lib/configure
+===================================================================
+--- pciutils-2.2.4.orig/lib/configure 2007-05-16 23:37:38.000000000 +0200
++++ pciutils-2.2.4/lib/configure 2007-05-17 16:35:24.000000000 +0200
+@@ -39,6 +39,16 @@
sys=linux
fi
@@ -9,6 +11,11 @@
+ sys=linux
+fi
+
++if [ "$host" = "linux--uclibcgnueabi" ]
++then
++ sys=linux
++fi
++
c=config.h
m=config.mk
echo >$c "#define PCI_ARCH_`echo $cpu | tr 'a-z' 'A-Z'`"
diff --git a/packages/pcmcia-cs/pcmcia-cs_3.2.8.bb b/packages/pcmcia-cs/pcmcia-cs_3.2.8.bb
index 3f4472b501..018f33550f 100644
--- a/packages/pcmcia-cs/pcmcia-cs_3.2.8.bb
+++ b/packages/pcmcia-cs/pcmcia-cs_3.2.8.bb
@@ -3,7 +3,8 @@ SECTION = "base"
PRIORITY = "required"
LICENSE = "GPL"
DEPENDS = "virtual/kernel"
-PR = "r27"
+RDEPENDS = "hostap-conf orinoco-conf"
+PR = "r28"
SRC_URI = "${SOURCEFORGE_MIRROR}/pcmcia-cs/pcmcia-cs-${PV}.tar.gz \
file://busybox.patch;patch=1 \
diff --git a/packages/pcmciautils/pcmciautils-014/makefile_fix.patch b/packages/pcmciautils/pcmciautils-014/makefile_fix.patch
index fed5d37bf8..f5bb64b9bd 100644
--- a/packages/pcmciautils/pcmciautils-014/makefile_fix.patch
+++ b/packages/pcmciautils/pcmciautils-014/makefile_fix.patch
@@ -13,3 +13,76 @@ Index: pcmciautils-014/Makefile
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_SCRIPT = ${INSTALL_PROGRAM}
+--- pcmciautils-014/Makefile~ 2007-05-25 19:40:39.000000000 +0200
++++ pcmciautils-014/Makefile 2007-05-25 19:40:39.000000000 +0200
+@@ -258,28 +258,29 @@
+
+ install-hotplug:
+ $(INSTALL) -d $(DESTDIR)$(hotplugdir)
+- $(INSTALL_PROGRAM) -D hotplug/pcmcia.agent $(DESTDIR)$(hotplugdir)/pcmcia.agent
+- $(INSTALL_PROGRAM) -D hotplug/pcmcia.rc $(DESTDIR)$(hotplugdir)/pcmcia.rc
++ $(INSTALL_PROGRAM) hotplug/pcmcia.agent $(DESTDIR)$(hotplugdir)/pcmcia.agent
++ $(INSTALL_PROGRAM) hotplug/pcmcia.rc $(DESTDIR)$(hotplugdir)/pcmcia.rc
+
+ uninstall-hotplug:
+ - rm -f $(DESTDIR)$(hotplugdir)/pcmcia.agent $(DESTDIR)$(hotplugdir)/pcmcia.rc
+
+ install-socket-hotplug:
+- $(INSTALL_PROGRAM) -D hotplug/pcmcia_socket.agent $(DESTDIR)$(hotplugdir)/pcmcia_socket.agent
+- $(INSTALL_PROGRAM) -D hotplug/pcmcia_socket.rc $(DESTDIR)$(hotplugdir)/pcmcia_socket.rc
++ $(INSTALL_PROGRAM) hotplug/pcmcia_socket.agent $(DESTDIR)$(hotplugdir)/pcmcia_socket.agent
++ $(INSTALL_PROGRAM) hotplug/pcmcia_socket.rc $(DESTDIR)$(hotplugdir)/pcmcia_socket.rc
+
+ uninstall-socket-hotplug:
+ - rm -f $(DESTDIR)$(hotplugdir)/pcmcia_socket.agent $(DESTDIR)$(hotplugdir)/pcmcia_socket.rc
+ install-socket-tools:
+- $(INSTALL_PROGRAM) -D $(PCMCIA_SOCKET_STARTUP) $(DESTDIR)$(sbindir)/$(PCMCIA_SOCKET_STARTUP)
++ $(INSTALL) -d $(DESTDIR)$(sbindir)
++ $(INSTALL_PROGRAM) $(PCMCIA_SOCKET_STARTUP) $(DESTDIR)$(sbindir)/$(PCMCIA_SOCKET_STARTUP)
+
+ uninstall-socket-tools:
+ - rm -f $(DESTDIR)$(sbindir)/$(PCMCIA_SOCKET_STARTUP)
+
+ install-tools:
+ $(INSTALL) -d $(DESTDIR)$(sbindir)
+- $(INSTALL_PROGRAM) -D $(PCCARDCTL) $(DESTDIR)$(sbindir)/$(PCCARDCTL)
+- $(INSTALL_PROGRAM) -D $(PCMCIA_CHECK_BROKEN_CIS) $(DESTDIR)$(sbindir)/$(PCMCIA_CHECK_BROKEN_CIS)
++ $(INSTALL_PROGRAM) $(PCCARDCTL) $(DESTDIR)$(sbindir)/$(PCCARDCTL)
++ $(INSTALL_PROGRAM) $(PCMCIA_CHECK_BROKEN_CIS) $(DESTDIR)$(sbindir)/$(PCMCIA_CHECK_BROKEN_CIS)
+ $(SYMLINK) $(PCCARDCTL) $(DESTDIR)$(sbindir)/$(LSPCMCIA)
+
+ uninstall-tools:
+@@ -289,18 +290,20 @@
+
+ install-config:
+ $(INSTALL) -d $(DESTDIR)$(pcmciaconfdir)
+- $(INSTALL_DATA) -D config/config.opts $(DESTDIR)$(pcmciaconfdir)/config.opts
++ $(INSTALL_DATA) config/config.opts $(DESTDIR)$(pcmciaconfdir)/config.opts
+
+ uninstall-config:
+ # - rm -f $(DESTDIR)$(pcmciaconfdir)/config.opts
+
+ install-udev:
+- $(INSTALL_DATA) -D $(UDEV_RULES_FILE) $(DESTDIR)$(udevrulesdir)/60-pcmcia.rules
++ $(INSTALL) -d $(DESTDIR)$(udevrulesdir)
++ $(INSTALL_DATA) $(UDEV_RULES_FILE) $(DESTDIR)$(udevrulesdir)/60-pcmcia.rules
+
+ uninstall-udev:
+ - rm -f $(DESTDIR)$(udevrulesdir)/60-pcmcia.rules
+
+ install-man:
++ $(INSTALL) -d $(DESTDIR)$(mandir)/man8
+ $(INSTALL_DATA) -D man/man8/pccardctl.8 $(DESTDIR)$(mandir)/man8/pccardctl.8
+ $(SYMLINK) pccardctl.8 $(DESTDIR)$(mandir)/man8/lspcmcia.8
+
+--- pcmciautils-014/Makefile~ 2007-05-25 19:43:01.000000000 +0200
++++ pcmciautils-014/Makefile 2007-05-25 19:43:01.000000000 +0200
+@@ -304,7 +304,7 @@
+
+ install-man:
+ $(INSTALL) -d $(DESTDIR)$(mandir)/man8
+- $(INSTALL_DATA) -D man/man8/pccardctl.8 $(DESTDIR)$(mandir)/man8/pccardctl.8
++ $(INSTALL_DATA) man/man8/pccardctl.8 $(DESTDIR)$(mandir)/man8/pccardctl.8
+ $(SYMLINK) pccardctl.8 $(DESTDIR)$(mandir)/man8/lspcmcia.8
+
+ uninstall-man:
diff --git a/packages/pcmciautils/pcmciautils/.mtn2git_empty b/packages/pcmciautils/pcmciautils/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pcmciautils/pcmciautils/.mtn2git_empty
diff --git a/packages/pcmciautils/pcmciautils/modalias_update.patch b/packages/pcmciautils/pcmciautils/modalias_update.patch
new file mode 100644
index 0000000000..5727442b59
--- /dev/null
+++ b/packages/pcmciautils/pcmciautils/modalias_update.patch
@@ -0,0 +1,56 @@
+From: Miklos Vajna <vmiklos@frugalware.org>
+Date: Fri, 3 Nov 2006 16:33:38 +0000 (-0500)
+Subject: [PATCH] fix for udev-094
+X-Git-Url: http://git.kernel.org/?p=linux%2Fpcmcia%2Fpcmciautils.git;a=commitdiff_plain;h=3a5217492c1f95711b30f4e27c51563dff6ceb3e
+
+[PATCH] fix for udev-094
+
+from udev's release notes:
+
+"udev 094
+========
+The built-in MODALIAS key and substitution is removed.
+(...)
+udev 080
+========
+(...)
+MODALIAS and $modalias is not needed and will be removed from one of
+the next udev versions, replace it in all rules with ENV{MODALIAS} or
+the sysfs "modalias" value."
+
+here is a patch to fix this issue
+
+Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
+Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
+---
+
+diff --git a/udev/rules-base b/udev/rules-base
+index c6d14de..6ed3a27 100644
+--- a/udev/rules-base
++++ b/udev/rules-base
+@@ -3,12 +3,12 @@
+ # are so broken that we need to read out random bytes of it
+ # instead of the manufactor, card or product ID. Then the
+ # matching is done in userspace.
+-ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="?*", \
++ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", \
+ RUN+="/sbin/pcmcia-check-broken-cis"
+
+ # However, the "weak" matching by func_id is only allowed _after_ modprobe
+ # returns, so that "strong" matches have a higher priority.
+-ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="?*", \
++ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", \
+ RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/allow_func_id_match'"
+
+ # PCMCIA sockets:
+diff --git a/udev/rules-modprobe b/udev/rules-modprobe
+index ea1f44a..a13b2ad 100644
+--- a/udev/rules-modprobe
++++ b/udev/rules-modprobe
+@@ -1,3 +1,3 @@
+-# modprobe $modalias loads all possibly appropriate modules
+-ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="?*", \
+- RUN+="/sbin/modprobe $modalias"
++# modprobe $env{MODALIAS} loads all possibly appropriate modules
++ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", \
++ RUN+="/sbin/modprobe $env{MODALIAS}"
diff --git a/packages/pcmciautils/pcmciautils_013.bb b/packages/pcmciautils/pcmciautils_013.bb
index 17abe5dc9b..72a78b0780 100644
--- a/packages/pcmciautils/pcmciautils_013.bb
+++ b/packages/pcmciautils/pcmciautils_013.bb
@@ -1,6 +1,7 @@
require pcmciautils.inc
-PR = "r0"
+PR = "r1"
SRC_URI += "file://makefile_fix.patch;patch=1 \
- file://version_workaround.patch;patch=1"
+ file://version_workaround.patch;patch=1 \
+ file://modalias_update.patch;patch=1"
diff --git a/packages/pcmciautils/pcmciautils_014.bb b/packages/pcmciautils/pcmciautils_014.bb
index 17abe5dc9b..72a78b0780 100644
--- a/packages/pcmciautils/pcmciautils_014.bb
+++ b/packages/pcmciautils/pcmciautils_014.bb
@@ -1,6 +1,7 @@
require pcmciautils.inc
-PR = "r0"
+PR = "r1"
SRC_URI += "file://makefile_fix.patch;patch=1 \
- file://version_workaround.patch;patch=1"
+ file://version_workaround.patch;patch=1 \
+ file://modalias_update.patch;patch=1"
diff --git a/packages/perl/files/letgcc-find-errno.patch b/packages/perl/files/letgcc-find-errno.patch
new file mode 100644
index 0000000000..24722ee964
--- /dev/null
+++ b/packages/perl/files/letgcc-find-errno.patch
@@ -0,0 +1,42 @@
+This removes all the logic that perl uses to locate an appropriate
+errno.h for the target. Instead we simple create a file that does
+
+ #include "errno.h"
+
+and use that as the file to parse. This is needed when using an
+external toolchain since perl will search in ${STAGING_INCDIR} for
+errno.h (when using gcc) and that isn't where it's located - its
+wherever the external toolchain keeps it's headers.
+
+--- perl-5.8.8/ext/Errno/Errno_pm.PL 2007/04/30 14:10:10 1.1
++++ perl-5.8.8/ext/Errno/Errno_pm.PL 2007/04/30 14:21:35
+@@ -11,8 +11,18 @@
+ open OUT, ">Errno.pm" or die "Cannot open Errno.pm: $!";
+ select OUT;
+ my $file;
+-my @files = get_files();
+-if ($Config{gccversion} ne '' && $^O eq 'MSWin32') {
++#my @files = get_files();
++my @files = ("errno.h");
++
++if (1) {
++ open INCS, '>includes.c' or
++ die "Cannot open includes.c";
++ print INCS qq[#include "errno.h"\n];
++ close INCS;
++ process_file('includes.c');
++ unlink 'includes.c';
++}
++elsif ($Config{gccversion} ne '' && $^O eq 'MSWin32') {
+ # MinGW complains "warning: #pragma system_header ignored outside include
+ # file" if the header files are processed individually, so include them
+ # all in .c file and process that instead.
+@@ -44,7 +54,7 @@
+ chomp($file = `cygpath -w "$file"`);
+ }
+
+- return unless defined $file and -f $file;
++# return unless defined $file and -f $file;
+ # warn "Processing $file\n";
+
+ local *FH;
diff --git a/packages/perl/files/perl-5.8.8-gcc-4.2.patch b/packages/perl/files/perl-5.8.8-gcc-4.2.patch
new file mode 100644
index 0000000000..d9869e1974
--- /dev/null
+++ b/packages/perl/files/perl-5.8.8-gcc-4.2.patch
@@ -0,0 +1,13 @@
+See http://bugs.openembedded.org/show_bug.cgi?id=2168
+Fix for gcc 4.2
+
+--- perl-5.8.8/makedepend.SH.ark 2006-11-01 16:32:05.000000000 +0100
++++ perl-5.8.8/makedepend.SH 2006-11-01 16:32:15.000000000 +0100
+@@ -167,6 +167,7 @@
+ -e '/^#.*<builtin>/d' \
+ -e '/^#.*<built-in>/d' \
+ -e '/^#.*<command line>/d' \
++ -e '/^#.*<command-line>/d' \
+ -e '/^#.*"-"/d' \
+ -e '/: file path prefix .* never used$/d' \
+ -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
diff --git a/packages/perl/libalgorithm-diff-perl_1.1902.bb b/packages/perl/libalgorithm-diff-perl_1.1902.bb
index 1021b4c77c..4adc4e81f0 100644
--- a/packages/perl/libalgorithm-diff-perl_1.1902.bb
+++ b/packages/perl/libalgorithm-diff-perl_1.1902.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-exporter perl-module-strict perl-module-vars \
perl-module-strict perl-module-vars"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TY/TYEMQ/Algorithm-Diff-${PV}.tar.gz"
diff --git a/packages/perl/libarchive-tar-perl_1.30.bb b/packages/perl/libarchive-tar-perl_1.30.bb
index b58506688b..f9485a7548 100644
--- a/packages/perl/libarchive-tar-perl_1.30.bb
+++ b/packages/perl/libarchive-tar-perl_1.30.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS += "libio-zlib-perl-native"
RDEPENDS += "libio-zlib-perl"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/K/KA/KANE/Archive-Tar-${PV}.tar.gz"
diff --git a/packages/perl/libcache-cache-perl_1.05.bb b/packages/perl/libcache-cache-perl_1.05.bb
index c90e9fed53..60908ad648 100644
--- a/packages/perl/libcache-cache-perl_1.05.bb
+++ b/packages/perl/libcache-cache-perl_1.05.bb
@@ -4,7 +4,7 @@ LICENSE = "Artistic|GPL"
DEPENDS = "libdigest-sha1-perl-native liberror-perl-native \
libipc-sharelite-perl-native"
RDEPENDS = "libdigest-sha1-perl liberror-perl libipc-sharelite-perl"
-PR = "r3"
+PR = "r6"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DC/DCLINTON/Cache-Cache-${PV}.tar.gz"
diff --git a/packages/perl/libclass-container-perl_0.12.bb b/packages/perl/libclass-container-perl_0.12.bb
index 6395cfc890..81b00f544a 100644
--- a/packages/perl/libclass-container-perl_0.12.bb
+++ b/packages/perl/libclass-container-perl_0.12.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS = "libparams-validate-perl-native"
RDEPENDS = "libparams-validate-perl"
-PR = "r3"
+PR = "r6"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Class-Container-${PV}.tar.gz"
diff --git a/packages/perl/libclass-data-inheritable-perl_0.06.bb b/packages/perl/libclass-data-inheritable-perl_0.06.bb
index 71a1f76526..6bb5c597ed 100644
--- a/packages/perl/libclass-data-inheritable-perl_0.06.bb
+++ b/packages/perl/libclass-data-inheritable-perl_0.06.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Class::Data::Inheritable - Inheritable, overridable class data"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r3"
+PR = "r6"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/Class-Data-Inheritable-${PV}.tar.gz"
diff --git a/packages/perl/libcompress-zlib-perl_1.42.bb b/packages/perl/libcompress-zlib-perl_1.42.bb
index 8631e1da02..3326d961bf 100644
--- a/packages/perl/libcompress-zlib-perl_1.42.bb
+++ b/packages/perl/libcompress-zlib-perl_1.42.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Compress::Zlib - Interface to zlib compression library"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r3"
+PR = "r9"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Zlib-${PV}.tar.gz"
@@ -9,7 +9,5 @@ S = "${WORKDIR}/Compress-Zlib-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/Compress/Zlib/* \
- ${libdir}/perl5/*/*/auto/Compress/Zlib/.packlist \
- ${libdir}/perl5/*/*/Compress"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/Compress/Zlib/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/Compress/Zlib/* \
+ ${PERLLIBDIRS}/Compress"
diff --git a/packages/perl/libdata-optlist-perl_0.101.bb b/packages/perl/libdata-optlist-perl_0.101.bb
index 40a2da46a7..084a055329 100644
--- a/packages/perl/libdata-optlist-perl_0.101.bb
+++ b/packages/perl/libdata-optlist-perl_0.101.bb
@@ -4,7 +4,7 @@ LICENSE = "Artistic|GPL"
DEPENDS += "libsub-install-perl-native libparams-util-perl-native"
RDEPENDS += "perl-module-list-util libparams-util-perl perl-module-strict \
libsub-install-perl perl-module-warnings "
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Data-OptList-${PV}.tar.gz"
diff --git a/packages/perl/libdevel-stacktrace-perl_1.13.bb b/packages/perl/libdevel-stacktrace-perl_1.13.bb
index e5414895b0..fd1b290364 100644
--- a/packages/perl/libdevel-stacktrace-perl_1.13.bb
+++ b/packages/perl/libdevel-stacktrace-perl_1.13.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Devel::StackTrace - Stack trace and stack trace frame objects"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r3"
+PR = "r6"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-${PV}.tar.gz"
diff --git a/packages/perl/libdigest-sha1-perl_2.11.bb b/packages/perl/libdigest-sha1-perl_2.11.bb
index 5e482164bb..c6d629417f 100644
--- a/packages/perl/libdigest-sha1-perl_2.11.bb
+++ b/packages/perl/libdigest-sha1-perl_2.11.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Digest::SHA1 - Perl interface to the SHA-1 algorithm"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r7"
+PR = "r13"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-${PV}.tar.gz"
@@ -9,7 +9,5 @@ S = "${WORKDIR}/Digest-SHA1-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/Digest/SHA1/* \
- ${libdir}/perl5/*/*/auto/Digest/SHA1/.packlist \
- ${libdir}/perl5/*/*/Digest"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/Digest/SHA1/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/Digest/SHA1/* \
+ ${PERLLIBDIRS}/Digest"
diff --git a/packages/perl/liberror-perl_0.17004.bb b/packages/perl/liberror-perl_0.17004.bb
index b41b4ce50e..9e5b2b4d71 100644
--- a/packages/perl/liberror-perl_0.17004.bb
+++ b/packages/perl/liberror-perl_0.17004.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Error - Error/exception handling in an OO-ish way"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r4"
+PR = "r7"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/Error-${PV}.tar.gz"
diff --git a/packages/perl/libexception-class-perl_1.23.bb b/packages/perl/libexception-class-perl_1.23.bb
index 3255fc582d..b26af13d84 100644
--- a/packages/perl/libexception-class-perl_1.23.bb
+++ b/packages/perl/libexception-class-perl_1.23.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS = "libclass-data-inheritable-perl-native libdevel-stacktrace-perl-native"
RDEPENDS = "libclass-data-inheritable-perl libdevel-stacktrace-perl"
-PR = "r4"
+PR = "r7"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Exception-Class-${PV}.tar.gz"
diff --git a/packages/perl/libextutils-cbuilder-perl_0.18.bb b/packages/perl/libextutils-cbuilder-perl_0.18.bb
index bf6df4cc16..aedb04f707 100644
--- a/packages/perl/libextutils-cbuilder-perl_0.18.bb
+++ b/packages/perl/libextutils-cbuilder-perl_0.18.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ExtUtils::CBuilder - Compile and link C code for Perl modules"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/ExtUtils-CBuilder-${PV}.tar.gz"
diff --git a/packages/perl/libextutils-depends-perl-native_0.205.bb b/packages/perl/libextutils-depends-perl-native_0.205.bb
new file mode 100644
index 0000000000..e0216cbfb5
--- /dev/null
+++ b/packages/perl/libextutils-depends-perl-native_0.205.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libextutils-depends-perl_${PV}.bb
diff --git a/packages/perl/libextutils-depends-perl_0.205.bb b/packages/perl/libextutils-depends-perl_0.205.bb
new file mode 100644
index 0000000000..af4f6ffd8f
--- /dev/null
+++ b/packages/perl/libextutils-depends-perl_0.205.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "ExtUtils::Depends - Easily build XS extensions that depend on XS extensions"
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r3"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RM/RMCFARLA/Gtk2-Perl/ExtUtils-Depends-${PV}.tar.gz"
+
+S = "${WORKDIR}/ExtUtils-Depends-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libextutils-parsexs-perl_2.16.bb b/packages/perl/libextutils-parsexs-perl_2.16.bb
index abd92a34ba..431b04127b 100644
--- a/packages/perl/libextutils-parsexs-perl_2.16.bb
+++ b/packages/perl/libextutils-parsexs-perl_2.16.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ExtUtils::ParseXS - converts Perl XS code into C code"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/ExtUtils-ParseXS-${PV}.tar.gz"
diff --git a/packages/perl/libextutils-pkgconfig-perl-native_1.07.bb b/packages/perl/libextutils-pkgconfig-perl-native_1.07.bb
new file mode 100644
index 0000000000..b5cd092dbd
--- /dev/null
+++ b/packages/perl/libextutils-pkgconfig-perl-native_1.07.bb
@@ -0,0 +1,5 @@
+SECTION = "libs"
+
+inherit native
+
+require libextutils-pkgconfig-perl_${PV}.bb
diff --git a/packages/perl/libextutils-pkgconfig-perl_1.07.bb b/packages/perl/libextutils-pkgconfig-perl_1.07.bb
new file mode 100644
index 0000000000..d023beac69
--- /dev/null
+++ b/packages/perl/libextutils-pkgconfig-perl_1.07.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "ExtUtils::PkgConfig - simplistic interface to pkg-config"
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+PR = "r4"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RM/RMCFARLA/Gtk2-Perl/ExtUtils-PkgConfig-${PV}.tar.gz"
+
+S = "${WORKDIR}/ExtUtils-PkgConfig-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libhtml-mason-perl_1.35.bb b/packages/perl/libhtml-mason-perl_1.35.bb
new file mode 100644
index 0000000000..71e96005e8
--- /dev/null
+++ b/packages/perl/libhtml-mason-perl_1.35.bb
@@ -0,0 +1,35 @@
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+DEPENDS = "libexception-class-perl-native libparams-validate-perl-native \
+ libcache-cache-perl-native libclass-container-perl-native"
+RDEPENDS_${PN} = "libexception-class-perl libparams-validate-perl \
+ libcache-cache-perl libclass-container-perl perl-module-strict \
+ perl-module-warnings perl-module-file-basename perl-module-file-path \
+ perl-module-file-spec perl-module-file-spec-unix perl-module-file-temp \
+ perl-module-carp-heavy perl-module-io-handle perl-module-io \
+ perl-module-exporter-heavy perl-module-cwd perl-module-scalar-util \
+ perl-module-list-util perl-module-bytes perl-module-file-glob \
+ perl-module-data-dumper"
+PR = "r1"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/HTML-Mason-${PV}.tar.gz"
+
+S = "${WORKDIR}/HTML-Mason-${PV}"
+
+inherit cpan_build
+
+do_install_append () {
+ # Fix up paths to the perl interpreter
+ for i in ${D}${bindir}/*.pl; do
+ sed -i -e "s#${STAGING_BINDIR}/perl#${bindir}/perl#g" $i
+ done
+
+ # Install the html documentation and example files
+ install -m 0755 -d ${D}${docdir}/${PN}/html \
+ ${D}${docdir}/${PN}/examples/samples \
+ ${D}${docdir}/${PN}/examples/eg
+ cp -pRP ${S}/htdocs ${D}${docdir}/${PN}/html
+ cp -pRP ${S}/eg ${D}${docdir}/${PN}/examples/eg
+ cp -pRP ${S}/samples ${D}${docdir}/${PN}/examples/samples
+}
+
diff --git a/packages/perl/libintl-perl_1.16.bb b/packages/perl/libintl-perl_1.16.bb
index 723ef0abe1..e7cebd7458 100644
--- a/packages/perl/libintl-perl_1.16.bb
+++ b/packages/perl/libintl-perl_1.16.bb
@@ -3,6 +3,7 @@ LICENSE = "Artistic|GPL"
RDEPENDS = "perl-module-vars perl-module-locale perl-module-io-handle \
perl-module-symbol perl-module-selectsaver perl-module-io \
perl-module-integer perl-module-exporter-heavy"
+PR = "r3"
SRC_URI = "http://www.cpan.org/authors/id/G/GU/GUIDO/libintl-perl-${PV}.tar.gz"
diff --git a/packages/perl/libio-zlib-perl_1.04.bb b/packages/perl/libio-zlib-perl_1.04.bb
index aa6680bc84..40292f1a95 100644
--- a/packages/perl/libio-zlib-perl_1.04.bb
+++ b/packages/perl/libio-zlib-perl_1.04.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS = "libcompress-zlib-perl-native"
RDEPENDS += "libcompress-zlib-perl"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TO/TOMHUGHES/IO-Zlib-${PV}.tar.gz"
diff --git a/packages/perl/libipc-sharelite-perl_0.09.bb b/packages/perl/libipc-sharelite-perl_0.09.bb
index cd7c19fb2a..6cef180374 100644
--- a/packages/perl/libipc-sharelite-perl_0.09.bb
+++ b/packages/perl/libipc-sharelite-perl_0.09.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "IPC::ShareLite - Light-weight interface to shared memory"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r7"
+PR = "r13"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MAURICE/IPC-ShareLite-${PV}.tar.gz"
@@ -9,7 +9,5 @@ S = "${WORKDIR}/IPC-ShareLite-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/IPC/ShareLite/* \
- ${libdir}/perl5/*/*/auto/IPC/ShareLite/.packlist \
- ${libdir}/perl5/*/*/IPC"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/IPC/ShareLite/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/IPC/ShareLite/* \
+ ${PERLLIBDIRS}/IPC"
diff --git a/packages/perl/liblocale-gettext-perl_1.05.bb b/packages/perl/liblocale-gettext-perl_1.05.bb
index b4fe0b2f2c..763a5680cf 100644
--- a/packages/perl/liblocale-gettext-perl_1.05.bb
+++ b/packages/perl/liblocale-gettext-perl_1.05.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Locale::gettext - message handling functions"
SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS = "virtual/libintl"
-PR = "r3"
+PR = "r9"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/P/PV/PVANDRY/gettext-${PV}.tar.gz"
@@ -10,7 +10,5 @@ S = "${WORKDIR}/gettext-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/Locale/gettext/* \
- ${libdir}/perl5/*/*/auto/Locale/gettext/.packlist \
- ${libdir}/perl5/*/*/Locale"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/Locale/gettext/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/Locale/gettext/* \
+ ${PERLLIBDIRS}/Locale"
diff --git a/packages/perl/liblog-dispatch-perl_2.13.bb b/packages/perl/liblog-dispatch-perl_2.13.bb
index d44aea9329..ee4a2198c1 100644
--- a/packages/perl/liblog-dispatch-perl_2.13.bb
+++ b/packages/perl/liblog-dispatch-perl_2.13.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Log::Dispatch - Dispatches messages to one or more outputs"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r2"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Log-Dispatch-${PV}.tar.gz"
diff --git a/packages/perl/liblog-log4perl-perl_1.06.bb b/packages/perl/liblog-log4perl-perl_1.06.bb
index 75060cce6a..beecaad0fb 100644
--- a/packages/perl/liblog-log4perl-perl_1.06.bb
+++ b/packages/perl/liblog-log4perl-perl_1.06.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Log::Log4perl - Log4j implementation for Perl"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MS/MSCHILLI/Log-Log4perl-${PV}.tar.gz"
diff --git a/packages/perl/libmail-sendmail-perl_0.79.bb b/packages/perl/libmail-sendmail-perl_0.79.bb
index 73c157d613..b333c8239b 100644
--- a/packages/perl/libmail-sendmail-perl_0.79.bb
+++ b/packages/perl/libmail-sendmail-perl_0.79.bb
@@ -1,6 +1,6 @@
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://www.cpan.org/modules/by-module/Mail/Mail-Sendmail-${PV}.tar.gz"
diff --git a/packages/perl/libmath-bigint-gmp-perl_1.18.bb b/packages/perl/libmath-bigint-gmp-perl_1.18.bb
index d850ab71f1..6a0e91d00c 100644
--- a/packages/perl/libmath-bigint-gmp-perl_1.18.bb
+++ b/packages/perl/libmath-bigint-gmp-perl_1.18.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS += "gmp-native"
RDEPENDS += "gmp"
-PR = "r1"
+PR = "r6"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TE/TELS/math/Math-BigInt-GMP-${PV}.tar.gz"
@@ -11,7 +11,5 @@ S = "${WORKDIR}/Math-BigInt-GMP-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/Math/BigInt/GMP/* \
- ${libdir}/perl5/*/*/auto/Math/BigInt/GMP/.packlist \
- ${libdir}/perl5/*/*/Math"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/Math/BigInt/GMP/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/Math/BigInt/GMP/* \
+ ${PERLLIBDIRS}/Math"
diff --git a/packages/perl/libmodule-build-perl_0.2805.bb b/packages/perl/libmodule-build-perl_0.2805.bb
index 2c6a772bca..8a7ce9fa04 100644
--- a/packages/perl/libmodule-build-perl_0.2805.bb
+++ b/packages/perl/libmodule-build-perl_0.2805.bb
@@ -8,7 +8,7 @@ DEPENDS = "libyaml-perl-native libversion-perl-native \
libarchive-tar-perl-native"
RDEPENDS = "libyaml-perl libversion-perl libextutils-cbuilder-perl \
libextutils-parsexs-perl libarchive-tar-perl"
-PR = "r3"
+PR = "r5"
S = "${WORKDIR}/Module-Build-${PV}"
diff --git a/packages/perl/libnet-ip-perl_1.25.bb b/packages/perl/libnet-ip-perl_1.25.bb
index 183acc8eef..351e96187e 100644
--- a/packages/perl/libnet-ip-perl_1.25.bb
+++ b/packages/perl/libnet-ip-perl_1.25.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS += "libio-zlib-perl-native"
RDEPENDS += "libio-zlib-perl perl-module-math-bigint"
-PR = "r2"
+PR = "r5"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MANU/Net-IP-${PV}.tar.gz"
diff --git a/packages/perl/libnetserver-generic-perl_1.03.bb b/packages/perl/libnetserver-generic-perl_1.03.bb
index 95b7e55a32..c4153b8c4c 100644
--- a/packages/perl/libnetserver-generic-perl_1.03.bb
+++ b/packages/perl/libnetserver-generic-perl_1.03.bb
@@ -1,6 +1,6 @@
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://www.cpan.org/modules/by-module/NetServer/NetServer-Generic-${PV}.tar.gz"
diff --git a/packages/perl/libparams-util-perl_0.20.bb b/packages/perl/libparams-util-perl_0.20.bb
index deb3c58b31..ef5b6e186a 100644
--- a/packages/perl/libparams-util-perl_0.20.bb
+++ b/packages/perl/libparams-util-perl_0.20.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-exporter perl-module-overload \
perl-module-scalar-util perl-module-strict perl-module-vars"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Params-Util-${PV}.tar.gz"
diff --git a/packages/perl/libparams-validate-perl_0.86.bb b/packages/perl/libparams-validate-perl_0.86.bb
index 8b1f9583ed..52c23333e9 100644
--- a/packages/perl/libparams-validate-perl_0.86.bb
+++ b/packages/perl/libparams-validate-perl_0.86.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Params::Validate - Validate method/function parameters"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r7"
+PR = "r13"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Params-Validate-${PV}.tar.gz"
@@ -9,8 +9,6 @@ S = "${WORKDIR}/Params-Validate-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/Params/Validate/* \
- ${libdir}/perl5/*/*/auto/Params/Validate/.packlist \
- ${libdir}/perl5/*/*/Params \
- ${libdir}/perl5/*/*/Attribute"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/Params/Validate/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/Params/Validate/* \
+ ${PERLLIBDIRS}/Params \
+ ${PERLLIBDIRS}/Attribute"
diff --git a/packages/perl/libperl6-junction-perl_1.10.bb b/packages/perl/libperl6-junction-perl_1.10.bb
index dda3cf4be3..8cfef00670 100644
--- a/packages/perl/libperl6-junction-perl_1.10.bb
+++ b/packages/perl/libperl6-junction-perl_1.10.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Perl6::Junction - Perl6 style Junction operators in Perl5."
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/C/CF/CFRANKS/Perl6-Junction-${PV}.tar.gz"
diff --git a/packages/perl/libsub-exporter-perl_0.970.bb b/packages/perl/libsub-exporter-perl_0.970.bb
index 5d56090549..44756601a2 100644
--- a/packages/perl/libsub-exporter-perl_0.970.bb
+++ b/packages/perl/libsub-exporter-perl_0.970.bb
@@ -5,7 +5,7 @@ DEPENDS += "libdata-optlist-perl-native libsub-install-perl-native \
libparams-util-perl-native"
RDEPENDS += "perl-module-carp libdata-optlist-perl libparams-util-perl \
perl-module-strict libsub-install-perl perl-module-warnings"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Exporter-${PV}.tar.gz"
diff --git a/packages/perl/libsub-install-perl_0.922.bb b/packages/perl/libsub-install-perl_0.922.bb
index ef8607312f..72bbfcc73b 100644
--- a/packages/perl/libsub-install-perl_0.922.bb
+++ b/packages/perl/libsub-install-perl_0.922.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-carp perl-module-scalar-util perl-module-strict \
perl-module-warnings"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Install-${PV}.tar.gz"
diff --git a/packages/perl/libsub-uplevel-perl_0.13.bb b/packages/perl/libsub-uplevel-perl_0.13.bb
index 8c66f49031..032d924856 100644
--- a/packages/perl/libsub-uplevel-perl_0.13.bb
+++ b/packages/perl/libsub-uplevel-perl_0.13.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Sub::Uplevel - apparently run a function in a higher stack frame"
SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-exporter perl-module-strict perl-module-vars"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-${PV}.tar.gz"
diff --git a/packages/perl/libtest-builder-tester-perl_1.01.bb b/packages/perl/libtest-builder-tester-perl_1.01.bb
index 860194ebb8..0704506ac7 100644
--- a/packages/perl/libtest-builder-tester-perl_1.01.bb
+++ b/packages/perl/libtest-builder-tester-perl_1.01.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-strict perl-module-carp perl-module-exporter \
perl-module-symbol perl-module-vars"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MARKF/Test-Builder-Tester-${PV}.tar.gz"
diff --git a/packages/perl/libtest-differences-perl_0.47.bb b/packages/perl/libtest-differences-perl_0.47.bb
index baf0c4c6e3..e76f35ff0d 100644
--- a/packages/perl/libtest-differences-perl_0.47.bb
+++ b/packages/perl/libtest-differences-perl_0.47.bb
@@ -4,7 +4,7 @@ LICENSE = "Artistic|GPL"
DEPENDS += "libtext-diff-perl-native"
RDEPENDS += "perl-module-carp perl-module-constant perl-module-exporter \
perl-module-strict libtext-diff-perl"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RB/RBS/Test-Differences-${PV}.tar.gz"
diff --git a/packages/perl/libtest-exception-perl_0.22.bb b/packages/perl/libtest-exception-perl_0.22.bb
index c87f6a803f..021770b01a 100644
--- a/packages/perl/libtest-exception-perl_0.22.bb
+++ b/packages/perl/libtest-exception-perl_0.22.bb
@@ -5,7 +5,7 @@ DEPENDS += "libsub-uplevel-perl-native"
RDEPENDS += "perl-module-base perl-module-carp perl-module-strict \
libsub-uplevel-perl perl-module-test-builder \
perl-module-warnings"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/A/AD/ADIE/Test-Exception-${PV}.tar.gz"
diff --git a/packages/perl/libtest-mockmodule-perl_0.05.bb b/packages/perl/libtest-mockmodule-perl_0.05.bb
index 41f35b7a82..422bd41ed0 100644
--- a/packages/perl/libtest-mockmodule-perl_0.05.bb
+++ b/packages/perl/libtest-mockmodule-perl_0.05.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
RDEPENDS += "perl-module-carp perl-module-scalar-util perl-module-strict \
perl-module-vars "
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SI/SIMONFLK/Test-MockModule-${PV}.tar.gz"
diff --git a/packages/perl/libtest-output-perl_0.10.bb b/packages/perl/libtest-output-perl_0.10.bb
index bce6b9e1b3..3a2452ecfd 100644
--- a/packages/perl/libtest-output-perl_0.10.bb
+++ b/packages/perl/libtest-output-perl_0.10.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "Artistic|GPL"
DEPENDS += "libsub-exporter-perl-native"
RDEPENDS += "libsub-exporter-perl"
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SS/SSORICHE/Test-Output-${PV}.tar.gz"
diff --git a/packages/perl/libtext-diff-perl_0.35.bb b/packages/perl/libtext-diff-perl_0.35.bb
index 40a6373a8f..07dde46945 100644
--- a/packages/perl/libtext-diff-perl_0.35.bb
+++ b/packages/perl/libtext-diff-perl_0.35.bb
@@ -5,7 +5,7 @@ DEPENDS += "libalgorithm-diff-perl-native"
RDEPENDS += "libalgorithm-diff-perl perl-module-carp perl-module-constant \
perl-module-exporter perl-module-strict perl-module-carp \
perl-module-strict "
-PR = "r0"
+PR = "r3"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RB/RBS/Text-Diff-${PV}.tar.gz"
diff --git a/packages/perl/liburi-perl-native_1.35.bb b/packages/perl/liburi-perl-native_1.35.bb
new file mode 100644
index 0000000000..3cb7197d97
--- /dev/null
+++ b/packages/perl/liburi-perl-native_1.35.bb
@@ -0,0 +1,2 @@
+inherit native
+require liburi-perl_${PV}.bb
diff --git a/packages/perl/liburi-perl_1.35.bb b/packages/perl/liburi-perl_1.35.bb
new file mode 100644
index 0000000000..23116aced9
--- /dev/null
+++ b/packages/perl/liburi-perl_1.35.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Manipulates and accesses URI strings"
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+#RDEPENDS += " libmime-base64-perl libnet-perl"
+PR = "r1"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-${PV}.tar.gz"
+
+S = "${WORKDIR}/URI-${PV}"
+
+inherit cpan
diff --git a/packages/perl/libversion-perl_0.6701.bb b/packages/perl/libversion-perl_0.6701.bb
index b78397e9e6..817824edec 100644
--- a/packages/perl/libversion-perl_0.6701.bb
+++ b/packages/perl/libversion-perl_0.6701.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "version - Perl extension for Version Objects"
SECTION = "libs"
LICENSE = "Artistic|GPL"
-PR = "r2"
+PR = "r8"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/J/JP/JPEACOCK/version-${PV}.tar.gz"
@@ -9,8 +9,6 @@ S = "${WORKDIR}/version-${PV}"
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/version/vxs/* \
- ${libdir}/perl5/*/*/auto/version/.packlist \
- ${libdir}/perl5/*/*/version/* \
- ${libdir}/perl5/*/*/version.pm"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/version/vxs/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/version/vxs/* \
+ ${PERLLIBDIRS}/version/* \
+ ${PERLLIBDIRS}/version.pm"
diff --git a/packages/perl/libxml-parser-perl-native_2.34.bb b/packages/perl/libxml-parser-perl-native_2.34.bb
index 8932656171..193de60c80 100644
--- a/packages/perl/libxml-parser-perl-native_2.34.bb
+++ b/packages/perl/libxml-parser-perl-native_2.34.bb
@@ -3,6 +3,3 @@ SECTION = "libs"
inherit native
require libxml-parser-perl_${PV}.bb
-
-DEPENDS = "perl-native expat-native"
-EXTRA_CPANFLAGS += " EXPATINCPATH='${STAGING_INCDIR}' EXPATLIBPATH='${STAGING_LIBDIR}'"
diff --git a/packages/perl/libxml-parser-perl_2.34.bb b/packages/perl/libxml-parser-perl_2.34.bb
index 25fec1e093..46ce6512ca 100644
--- a/packages/perl/libxml-parser-perl_2.34.bb
+++ b/packages/perl/libxml-parser-perl_2.34.bb
@@ -1,14 +1,15 @@
SECTION = "libs"
LICENSE = "Artistic"
-PR = "r2"
+DEPENDS += "expat-native"
+PR = "r10"
SRC_URI = "http://www.cpan.org/modules/by-module/XML/XML-Parser-${PV}.tar.gz"
S = "${WORKDIR}/XML-Parser-${PV}"
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
inherit cpan
-FILES_${PN} = "${libdir}/perl5/*/*/auto/XML/Parser/Expat/* \
- ${libdir}/perl5/*/*/auto/XML/Parser/.packlist \
- ${libdir}/perl5/*/*/XML"
-FILES_${PN}-dbg += "${libdir}/perl5/*/*/auto/XML/Parser/Expat/.debug"
+FILES_${PN} = "${PERLLIBDIRS}/auto/XML/Parser/Expat/* \
+ ${PERLLIBDIRS}/XML"
diff --git a/packages/perl/libyaml-perl_0.62.bb b/packages/perl/libyaml-perl_0.62.bb
index 31ebc53040..f6398097b8 100644
--- a/packages/perl/libyaml-perl_0.62.bb
+++ b/packages/perl/libyaml-perl_0.62.bb
@@ -4,7 +4,7 @@ LICENSE = "Artistic|GPL"
DEPENDS = "libdigest-sha1-perl-native liberror-perl-native \
libipc-sharelite-perl-native"
RDEPENDS = "libdigest-sha1-perl liberror-perl libipc-sharelite-perl"
-PR = "r1"
+PR = "r4"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-${PV}.tar.gz"
diff --git a/packages/perl/perl-5.8.4/.mtn2git_empty b/packages/perl/perl-5.8.4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/perl/perl-5.8.4/.mtn2git_empty
diff --git a/packages/perl/files/Makefile.SH.patch b/packages/perl/perl-5.8.4/Makefile.SH.patch
index 35a4e6dfde..35a4e6dfde 100644
--- a/packages/perl/files/Makefile.SH.patch
+++ b/packages/perl/perl-5.8.4/Makefile.SH.patch
diff --git a/packages/perl/files/Makefile.patch b/packages/perl/perl-5.8.4/Makefile.patch
index eec127643b..eec127643b 100644
--- a/packages/perl/files/Makefile.patch
+++ b/packages/perl/perl-5.8.4/Makefile.patch
diff --git a/packages/perl/files/config.sh-arm-linux.patch b/packages/perl/perl-5.8.4/config.sh-arm-linux.patch
index 44d8b1a89d..44d8b1a89d 100644
--- a/packages/perl/files/config.sh-arm-linux.patch
+++ b/packages/perl/perl-5.8.4/config.sh-arm-linux.patch
diff --git a/packages/perl/files/config.sh-i686-linux b/packages/perl/perl-5.8.4/config.sh-i686-linux
index 0978100abc..0978100abc 100644
--- a/packages/perl/files/config.sh-i686-linux
+++ b/packages/perl/perl-5.8.4/config.sh-i686-linux
diff --git a/packages/perl/files/config.sh-mipsel-linux b/packages/perl/perl-5.8.4/config.sh-mipsel-linux
index eedf443f04..eedf443f04 100644
--- a/packages/perl/files/config.sh-mipsel-linux
+++ b/packages/perl/perl-5.8.4/config.sh-mipsel-linux
diff --git a/packages/perl/files/uclibc.patch b/packages/perl/perl-5.8.4/uclibc.patch
index ce8fe80ff2..ce8fe80ff2 100644
--- a/packages/perl/files/uclibc.patch
+++ b/packages/perl/perl-5.8.4/uclibc.patch
diff --git a/packages/perl/perl-5.8.7/config.sh-powerpc-linux b/packages/perl/perl-5.8.7/config.sh-powerpc-linux
index d0b79ae484..67f7aa3166 100644
--- a/packages/perl/perl-5.8.7/config.sh-powerpc-linux
+++ b/packages/perl/perl-5.8.7/config.sh-powerpc-linux
@@ -53,10 +53,10 @@ byteorder='4321'
c='\c'
castflags='0'
cat='cat'
-cc='cc'
+cc='gcc'
cccdlflags='-fpic'
-ccdlflags='-Wl,-E,-Wl,-rpath,/usr/lib/perl5/5.8.7/powerpc-linux/CORE'
-ccflags='-fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/powerpc-linux/CORE'
+ccflags=''-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='gcc'
ccsymbols='__gnu_linux__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 system=linux system=posix system=unix'
@@ -77,12 +77,12 @@ cpio=''
cpp='cpp'
cpp_stuff='42'
cppccsymbols='linux=1 unix=1'
-cppflags='-fno-strict-aliasing -pipe'
+cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe'
cpplast='-'
cppminus='-'
-cpprun='cc -E'
-cppstdin='cc -E'
-cppsymbols='_BIG_ENDIAN=1 __BIG_ENDIAN__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=4 __GNUC__=4 __GNUC_MINOR__=1 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200112 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
+cpprun='gcc -E'
+cppstdin='gcc -E'
+cppsymbols='_BIG_ENDIAN=1 __BIG_ENDIAN__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=5 __GNUC__=4 __GNUC_MINOR__=1 __GNU_LIBRARY__=6 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200112 _POSIX_SOURCE=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_SVID=1 __linux=1 __linux__=1 __unix=1 __unix__=1'
crypt_r_proto='0'
cryptlib=''
csh='csh'
@@ -131,7 +131,7 @@ d_const='define'
d_copysignl='define'
d_crypt='define'
d_crypt_r='undef'
-d_csh='undef'
+d_csh='define'
d_ctermid_r='undef'
d_ctime_r='undef'
d_cuserid='define'
@@ -147,7 +147,7 @@ d_dosuid='undef'
d_drand48_r='undef'
d_drand48proto='define'
d_dup2='define'
-d_eaccess='define'
+d_eaccess='undef'
d_endgrent='define'
d_endgrent_r='undef'
d_endhent='define'
@@ -162,7 +162,7 @@ d_endsent='define'
d_endservent_r='undef'
d_eofnblk='define'
d_eunice='undef'
-d_faststdio='undef'
+d_faststdio='define'
d_fchdir='define'
d_fchmod='define'
d_fchown='define'
@@ -170,7 +170,7 @@ d_fcntl='define'
d_fcntl_can_lock='define'
d_fd_macros='define'
d_fd_set='define'
-d_fds_bits='undef'
+d_fds_bits='define'
d_fgetpos='define'
d_finite='define'
d_finitel='define'
@@ -293,7 +293,7 @@ d_mktime='define'
d_mmap='define'
d_modfl='define'
d_modfl_pow32_bug='undef'
-d_modflproto='define'
+d_modflproto='undef'
d_mprotect='define'
d_msg='define'
d_msg_ctrunc='define'
@@ -312,7 +312,7 @@ d_mymalloc='undef'
d_nice='define'
d_nl_langinfo='define'
d_nv_preserves_uv='define'
-d_off64_t='undef'
+d_off64_t='define'
d_old_pthread_create_joinable='undef'
d_oldpthreads='undef'
d_oldsock='undef'
@@ -325,9 +325,9 @@ d_pipe='define'
d_poll='define'
d_portable='define'
d_procselfexe='define'
-d_pthread_atfork='undef'
+d_pthread_atfork='define'
d_pthread_attr_setscope='define'
-d_pthread_yield='undef'
+d_pthread_yield='define'
d_pwage='undef'
d_pwchange='undef'
d_pwclass='undef'
@@ -359,7 +359,7 @@ d_seekdir='define'
d_select='define'
d_sem='define'
d_semctl='define'
-d_semctl_semid_ds='undef'
+d_semctl_semid_ds='define'
d_semctl_semun='define'
d_semget='define'
d_semop='define'
@@ -422,12 +422,12 @@ d_statfs_f_flags='undef'
d_statfs_s='define'
d_statvfs='define'
d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
+d_stdio_ptr_lval='define'
d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
+d_stdio_ptr_lval_sets_cnt='define'
d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
+d_stdiobase='define'
+d_stdstdio='define'
d_strchr='define'
d_strcoll='define'
d_strctcpy='define'
@@ -521,7 +521,7 @@ exe_ext=''
expr='expr'
extensions='B ByteLoader Cwd Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno'
extras=''
-fflushNULL='undef'
+fflushNULL='define'
fflushall='undef'
find=''
firstmakefile='makefile'
@@ -667,7 +667,7 @@ i_varargs='undef'
i_varhdr='stdarg.h'
i_vfork='undef'
ignore_versioned_solibs='y'
-inc_version_list=' '
+inc_version_list=''
inc_version_list_init='0'
incpath=''
inews=''
@@ -706,7 +706,7 @@ ivsize='4'
ivtype='long'
known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared'
ksh=''
-ld='cc'
+ld='gcc'
lddlflags='-shared'
ldflags=''
ldflags_uselargefiles=''
@@ -716,9 +716,9 @@ lib_ext='.a'
libc='/lib/libc-2.5.so'
libperl='libperl.so'
libpth='/lib /usr/lib'
-libs='-lnsl -ldl -lm -lcrypt -lutil -lc'
+libs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
libsdirs=''
-libsfiles=''
+libsfiles=' libresolv.so libnsl.so libdl.so libm.so libpthread.so libcrypt.so libutil.so libc.so'
libsfound=''
libspath=' /lib /usr/lib'
libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util c cposix posix ucb BSD'
@@ -764,15 +764,15 @@ myarchname='powerpc-linux'
mydomain='.nonet'
myhostname='brokenslug'
myuname='linux brokenslug 2.6.12.6 #1 tue oct 24 01:06:22 pdt 2006 ppc unknown unknown gnulinux '
-n=''
-need_va_copy='define'
+n='-n'
+need_va_copy='undef'
netdb_hlen_type='size_t'
netdb_host_type='const void *'
netdb_name_type='const char *'
netdb_net_type='in_addr_t'
nm='nm'
nm_opt=''
-nm_so_opt=''
+nm_so_opt='--dynamic'
nonxs_ext='Errno'
nroff='nroff'
nvEUformat='"E"'
@@ -787,8 +787,8 @@ nvtype='double'
o_nonblock='O_NONBLOCK'
obj_ext='.o'
old_pthread_create_joinable=''
-optimize='-Os'
-orderlib='true'
+optimize='-O2'
+orderlib='false'
osname='linux'
osvers='2.6.12.6'
otherlibdirs=' '
@@ -801,7 +801,7 @@ perl5='hostperl'
perl=''
perl_patchlevel=''
perladmin='root@brokenslug.nonet'
-perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
+perllibs='-lresolv -lnsl -ldl -lm -lpthread -lcrypt -lutil -lc'
perlpath='/usr/bin/perl'
pg='pg'
phostname='hostname'
@@ -958,7 +958,7 @@ use64bitint='undef'
usecrosscompile='undef'
usedl='define'
usefaststdio='define'
-useithreads='undef'
+useithreads='define'
uselargefiles='define'
uselongdouble='undef'
usemallocwrap='define'
@@ -974,7 +974,7 @@ usesfio='false'
useshrplib='true'
usesitecustomize='undef'
usesocks='undef'
-usethreads='undef'
+usethreads='define'
usevendorprefix='undef'
usevfork='false'
usrinc='/usr/include'
diff --git a/packages/perl/perl-5.8.8/.mtn2git_empty b/packages/perl/perl-5.8.8/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/perl/perl-5.8.8/.mtn2git_empty
diff --git a/packages/perl/perl-5.8.8/09_fix_installperl.patch b/packages/perl/perl-5.8.8/09_fix_installperl.patch
new file mode 100644
index 0000000000..f550537d02
--- /dev/null
+++ b/packages/perl/perl-5.8.8/09_fix_installperl.patch
@@ -0,0 +1,32 @@
+Correctly identify arch-specific modules in ext/ where the .pm files
+are under lib.
+
+Ensure that POSIX/SigAction is kept with the rest of the POSIX module
+under archlib.
+
+diff --exclude=debian -Naur perl-5.8.8.orig/installperl perl-5.8.8/installperl
+--- perl-5.8.8.orig/installperl 2006-01-29 02:35:28.000000000 +1100
++++ perl-5.8.8/installperl 2006-05-31 22:54:41.000000000 +1000
+@@ -156,11 +156,8 @@
+ if ("$File::Find::dir/$_" =~ m{^ext\b(.*)/([^/]+)\.pm$}) {
+ my($path, $modname) = ($1,$2);
+
+- # strip trailing component first
+- $path =~ s{/[^/]*$}{};
+-
+- # strip optional "/lib";
+- $path =~ s{/lib\b}{};
++ # strip to optional "/lib", or remove trailing component
++ $path =~ s{.*/lib\b}{} or $path =~ s{/[^/]*$}{};
+
+ # strip any leading /
+ $path =~ s{^/}{};
+@@ -851,7 +848,7 @@
+ }
+
+ if (-f $_) {
+- if (/\.(?:al|ix)$/ && !($dir =~ m[^auto/(.*)$] && $archpms{$1})) {
++ if (/\.(?:al|ix)$/ && !($dir =~ m[^auto/(.*)$])) {
+ $installlib = $installprivlib;
+ #We're installing *.al and *.ix files into $installprivlib,
+ #but we have to delete old *.al and *.ix files from the 5.000
diff --git a/packages/perl/perl-5.8.8/52_debian_extutils_hacks.patch b/packages/perl/perl-5.8.8/52_debian_extutils_hacks.patch
new file mode 100644
index 0000000000..8a964f9338
--- /dev/null
+++ b/packages/perl/perl-5.8.8/52_debian_extutils_hacks.patch
@@ -0,0 +1,234 @@
+Various debian-specific ExtUtils changes:
+
+ * Respect umask during installation, and set as appropriate for each of
+ perl, vendor and site (policy requires group writable site dirs).
+
+ * Don't install .packlist or perllocal.pod for perl or vendor.
+ * Fiddle with *PREFIX and variables written to the makefile so that
+ install directories may be changed when make is run by passing
+ PREFIX= to the "make install" command (used when packaging
+ modules).
+
+ * Set location of libperl.a to /usr/lib.
+ * Note that libperl-dev package is required for embedded linking.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/Embed.pm perl-5.8.8/lib/ExtUtils/Embed.pm
+--- perl-5.8.8.orig/lib/ExtUtils/Embed.pm 2004-08-03 20:41:49.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/Embed.pm 2006-02-05 10:42:11.000000000 +1100
+@@ -300,6 +300,9 @@
+ Typically, an application B<Makefile> will invoke ExtUtils::Embed
+ functions while building your application.
+
++Note that on Debian systems the B<libperl-dev> package is required for
++compiling applications which embed an interpreter.
++
+ =head1 @EXPORT
+
+ ExtUtils::Embed exports the following functions:
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/Install.pm perl-5.8.8/lib/ExtUtils/Install.pm
+--- perl-5.8.8.orig/lib/ExtUtils/Install.pm 2005-10-21 22:00:01.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/Install.pm 2006-02-05 10:42:11.000000000 +1100
+@@ -173,8 +173,8 @@
+ if (-f $targetfile){
+ forceunlink($targetfile) unless $nonono;
+ } else {
+- mkpath($targetdir,0,0755) unless $nonono;
+- print "mkpath($targetdir,0,0755)\n" if $verbose>1;
++ mkpath($targetdir) unless $nonono;
++ print "mkpath($targetdir)\n" if $verbose>1;
+ }
+ copy($sourcefile, $targetfile) unless $nonono;
+ print "Installing $targetfile\n";
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/MM_Any.pm perl-5.8.8/lib/ExtUtils/MM_Any.pm
+--- perl-5.8.8.orig/lib/ExtUtils/MM_Any.pm 2005-04-13 17:49:53.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/MM_Any.pm 2006-02-05 11:17:52.000000000 +1100
+@@ -645,8 +645,6 @@
+ sub manifypods_target {
+ my($self) = shift;
+
+- my $man1pods = '';
+- my $man3pods = '';
+ my $dependencies = '';
+
+ # populate manXpods & dependencies:
+@@ -666,7 +664,7 @@
+ foreach my $section (qw(1 3)) {
+ my $pods = $self->{"MAN${section}PODS"};
+ push @man_cmds, $self->split_command(<<CMD, %$pods);
+- \$(NOECHO) \$(POD2MAN) --section=$section --perm_rw=\$(PERM_RW)
++ \$(NOECHO) \$(POD2MAN) --section=\$(MAN${section}EXT) --perm_rw=\$(PERM_RW)
+ CMD
+ }
+
+@@ -1080,9 +1078,11 @@
+ $self->{SITEPREFIX} ||= $sprefix;
+ $self->{VENDORPREFIX} ||= $vprefix;
+
+- # Lots of MM extension authors like to use $(PREFIX) so we
+- # put something sensible in there no matter what.
+- $self->{PREFIX} = '$('.uc $self->{INSTALLDIRS}.'PREFIX)';
++ my $p = $self->{PREFIX} = $self->{PERLPREFIX};
++ for my $t (qw/PERL SITE VENDOR/)
++ {
++ $self->{"${t}PREFIX"} =~ s!^\Q$p\E(?=/|$)!\$(PREFIX)!;
++ }
+ }
+
+ my $arch = $Config{archname};
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm perl-5.8.8/lib/ExtUtils/MM_Unix.pm
+--- perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm 2005-05-21 19:42:56.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/MM_Unix.pm 2006-02-05 17:40:19.000000000 +1100
+@@ -2054,9 +2054,7 @@
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_perl_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
++ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+@@ -2068,7 +2066,7 @@
+
+
+ pure_site_install ::
+- $(NOECHO) $(MOD_INSTALL) \
++ $(NOECHO) umask 02; $(MOD_INSTALL) \
+ read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+ write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+@@ -2081,9 +2079,7 @@
+ }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
+
+ pure_vendor_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
++ $(NOECHO) umask 022; $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+@@ -2092,37 +2088,19 @@
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+ doc_perl_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLPRIVLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
+
+ doc_site_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
++ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
++ -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH)
++ -$(NOECHO) umask 02; $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
++ >> }.$self->catfile('$(DESTINSTALLSITEARCH)','perllocal.pod').q{
+
+ doc_vendor_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLVENDORLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
+
+ };
+
+@@ -2131,13 +2109,12 @@
+ $(NOECHO) $(NOOP)
+
+ uninstall_from_perldirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_sitedirs ::
+ $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_vendordirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{
++
+ };
+
+ join("",@m);
+@@ -2415,7 +2392,7 @@
+ ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/;
+ }
+ unless ($libperl && -f $lperl) { # Ilya's code...
+- my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE";
++ my $dir = $self->{PERL_SRC} || "/usr/lib";
+ $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};
+ $libperl ||= "libperl$self->{LIB_EXT}";
+ $libperl = "$dir/$libperl";
+@@ -3007,8 +2984,7 @@
+ print STDERR " prefixify $var => $path\n" if $Verbose >= 2;
+ print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2;
+
+- if( $self->{ARGS}{PREFIX} && $self->file_name_is_absolute($path) &&
+- $path !~ s{^\Q$sprefix\E\b}{$rprefix}s )
++ if( $path !~ s{^\Q$sprefix\E\b}{$rprefix}s && $self->{ARGS}{PREFIX} )
+ {
+
+ print STDERR " cannot prefix, using default.\n" if $Verbose >= 2;
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/t/INST.t perl-5.8.8/lib/ExtUtils/t/INST.t
+--- perl-5.8.8.orig/lib/ExtUtils/t/INST.t 2005-10-21 19:12:39.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/t/INST.t 2006-02-05 17:48:56.000000000 +1100
+@@ -65,9 +65,7 @@
+ is( $mm->{NAME}, 'Big::Dummy', 'NAME' );
+ is( $mm->{VERSION}, 0.01, 'VERSION' );
+
+-my $config_prefix = $Config{installprefixexp} || $Config{installprefix} ||
+- $Config{prefixexp} || $Config{prefix};
+-is( $mm->{PERLPREFIX}, $config_prefix, 'PERLPREFIX' );
++is( $mm->{PERLPREFIX}, '$(PREFIX)', 'PERLPREFIX' );
+
+ is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/t/INST_PREFIX.t perl-5.8.8/lib/ExtUtils/t/INST_PREFIX.t
+--- perl-5.8.8.orig/lib/ExtUtils/t/INST_PREFIX.t 2005-10-21 22:00:19.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/t/INST_PREFIX.t 2006-02-05 17:48:06.000000000 +1100
+@@ -16,7 +16,7 @@
+ }
+
+ use strict;
+-use Test::More tests => 52;
++use Test::More tests => 47;
+ use MakeMaker::Test::Utils;
+ use MakeMaker::Test::Setup::BFD;
+ use ExtUtils::MakeMaker;
+@@ -62,16 +62,16 @@
+ Writing\ $Makefile\ for\ Big::Dummy\n
+ }x );
+
+-is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' );
++#is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' );
+
+ isa_ok( $mm, 'ExtUtils::MakeMaker' );
+
+ is( $mm->{NAME}, 'Big::Dummy', 'NAME' );
+ is( $mm->{VERSION}, 0.01, 'VERSION' );
+
+-foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
+- unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ );
+-}
++#foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) {
++# unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ );
++#}
+
+
+ my $PREFIX = File::Spec->catdir('foo', 'bar');
diff --git a/packages/perl/perl-5.8.8/53_debian_mod_paths.patch b/packages/perl/perl-5.8.8/53_debian_mod_paths.patch
new file mode 100644
index 0000000000..df74bc598d
--- /dev/null
+++ b/packages/perl/perl-5.8.8/53_debian_mod_paths.patch
@@ -0,0 +1,107 @@
+Tweak @INC so that the ordering is:
+
+ etc (for config files)
+ site (5.8.1)
+ vendor (all)
+ core (5.8.1)
+ site (version-indep)
+ site (pre-5.8.1)
+
+The rationale being that an admin (via site), or module packager
+(vendor) can chose to shadow core modules when there is a newer
+version than is included in core.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/perl.c perl-5.8.8/perl.c
+--- perl-5.8.8.orig/perl.c 2006-01-31 23:34:47.000000000 +1100
++++ perl-5.8.8/perl.c 2006-02-02 23:36:38.000000000 +1100
+@@ -4776,9 +4776,14 @@
+ incpush(APPLLIB_EXP, TRUE, TRUE, TRUE);
+ #endif
+
++#if 1
++ /* for configuration where /usr is mounted ro (CPAN::Config, Net::Config) */
++ incpush("/etc/perl", FALSE, FALSE, FALSE);
++#else
+ #ifdef ARCHLIB_EXP
+ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
+ #endif
++#endif
+ #ifdef MACOS_TRADITIONAL
+ {
+ Stat_t tmpstatbuf;
+@@ -4803,11 +4808,13 @@
+ #ifndef PRIVLIB_EXP
+ # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
+ #endif
++#if 0
+ #if defined(WIN32)
+ incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE);
+ #else
+ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
+ #endif
++#endif
+
+ #ifdef SITEARCH_EXP
+ /* sitearch is always relative to sitelib on Windows for
+@@ -4850,6 +4857,61 @@
+ incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE);
+ #endif
+
++#if 1
++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE);
++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE);
++
++ /* Non-versioned site directory for local modules and for
++ compatability with the previous packages' site dirs */
++ incpush("/usr/local/lib/site_perl", TRUE, FALSE, FALSE);
++
++#ifdef PERL_INC_VERSION_LIST
++ {
++ struct stat s;
++
++ /* add small buffer in case old versions are longer than the
++ current version */
++ char sitearch[sizeof(SITEARCH_EXP)+16] = SITEARCH_EXP;
++ char sitelib[sizeof(SITELIB_EXP)+16] = SITELIB_EXP;
++ char const *vers[] = { PERL_INC_VERSION_LIST };
++ char const **p;
++
++ char *arch_vers = strrchr(sitearch, '/');
++ char *lib_vers = strrchr(sitelib, '/');
++
++ if (arch_vers && isdigit(*++arch_vers))
++ *arch_vers = 0;
++ else
++ arch_vers = 0;
++
++ if (lib_vers && isdigit(*++lib_vers))
++ *lib_vers = 0;
++ else
++ lib_vers = 0;
++
++ /* there is some duplication here as incpush does something
++ similar internally, but required as sitearch is not a
++ subdirectory of sitelib */
++ for (p = vers; *p; p++)
++ {
++ if (arch_vers)
++ {
++ strcpy(arch_vers, *p);
++ if (PerlLIO_stat(sitearch, &s) >= 0 && S_ISDIR(s.st_mode))
++ incpush(sitearch, FALSE, FALSE, FALSE);
++ }
++
++ if (lib_vers)
++ {
++ strcpy(lib_vers, *p);
++ if (PerlLIO_stat(sitelib, &s) >= 0 && S_ISDIR(s.st_mode))
++ incpush(sitelib, FALSE, FALSE, FALSE);
++ }
++ }
++ }
++#endif
++#endif
++
+ #ifdef PERL_OTHERLIBDIRS
+ incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE);
+ #endif
diff --git a/packages/perl/perl-5.8.8/54_debian_perldoc-r.patch b/packages/perl/perl-5.8.8/54_debian_perldoc-r.patch
new file mode 100644
index 0000000000..432cd857a7
--- /dev/null
+++ b/packages/perl/perl-5.8.8/54_debian_perldoc-r.patch
@@ -0,0 +1,16 @@
+In a Debian installation, not all directories in @INC need exist (the
+site directories for example are created on demand).
+
+Suggested by Joey Hess <joeyh@debian.org>.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/Pod/Perldoc.pm perl-5.8.8/lib/Pod/Perldoc.pm
+--- perl-5.8.8.orig/lib/Pod/Perldoc.pm 2004-12-29 23:15:33.000000000 +1100
++++ perl-5.8.8/lib/Pod/Perldoc.pm 2006-02-02 23:38:49.000000000 +1100
+@@ -1533,6 +1533,7 @@
+ $self->{'target'} = (splitdir $s)[-1]; # XXX: why not use File::Basename?
+ for ($i=0; $i<@dirs; $i++) {
+ $dir = $dirs[$i];
++ next unless -d $dir; # some dirs in @INC are optional
+ ($dir = VMS::Filespec::unixpath($dir)) =~ s!/\z!! if IS_VMS;
+ if ( (! $self->opt_m && ( $ret = $self->check_file($dir,"$s.pod")))
+ or ( $ret = $self->check_file($dir,"$s.pm"))
diff --git a/packages/perl/perl-5.8.8/58_debian_cpan_config_path.patch b/packages/perl/perl-5.8.8/58_debian_cpan_config_path.patch
new file mode 100644
index 0000000000..b38c70c515
--- /dev/null
+++ b/packages/perl/perl-5.8.8/58_debian_cpan_config_path.patch
@@ -0,0 +1,14 @@
+Set location of CPAN::Config to /etc/perl as /usr may not be writable.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/CPAN.pm perl-5.8.8/lib/CPAN.pm
+--- perl-5.8.8.orig/lib/CPAN.pm 2006-02-01 01:11:22.000000000 +1100
++++ perl-5.8.8/lib/CPAN.pm 2006-02-02 23:49:26.000000000 +1100
+@@ -1246,7 +1246,7 @@
+ $configpm = $INC{"CPAN/MyConfig.pm"};
+ $redo++;
+ } else {
+- my($path_to_cpan) = File::Basename::dirname($INC{"CPAN.pm"});
++ my($path_to_cpan) = '/etc/perl';
+ my($configpmdir) = File::Spec->catdir($path_to_cpan,"CPAN");
+ my($configpmtest) = File::Spec->catfile($configpmdir,"Config.pm");
+ if (-d $configpmdir or File::Path::mkpath($configpmdir)) {
diff --git a/packages/perl/perl-5.8.8/60_debian_libnet_config_path.patch b/packages/perl/perl-5.8.8/60_debian_libnet_config_path.patch
new file mode 100644
index 0000000000..7842ce115c
--- /dev/null
+++ b/packages/perl/perl-5.8.8/60_debian_libnet_config_path.patch
@@ -0,0 +1,16 @@
+Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/Net/Config.pm perl-5.8.8/lib/Net/Config.pm
+--- perl-5.8.8.orig/lib/Net/Config.pm 2002-03-01 01:04:31.000000000 +1100
++++ perl-5.8.8/lib/Net/Config.pm 2006-02-03 00:00:55.000000000 +1100
+@@ -57,9 +57,8 @@
+ }
+ TRY_INTERNET_CONFIG
+
+-my $file = __FILE__;
++my $file = '/etc/perl/Net/libnet.cfg';
+ my $ref;
+-$file =~ s/Config.pm/libnet.cfg/;
+ if ( -f $file ) {
+ $ref = eval { local $SIG{__DIE__}; do $file };
+ if (ref($ref) eq 'HASH') {
diff --git a/packages/perl/perl-5.8.8/62_debian_cpan_definstalldirs.patch b/packages/perl/perl-5.8.8/62_debian_cpan_definstalldirs.patch
new file mode 100644
index 0000000000..682061dd8b
--- /dev/null
+++ b/packages/perl/perl-5.8.8/62_debian_cpan_definstalldirs.patch
@@ -0,0 +1,16 @@
+Some modules which are included in core set INSTALLDIRS => 'perl'
+explicitly in Makefile.PL. This makes sense for the normal @INC
+ordering, but not ours. Provide a sensible default.
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/CPAN/FirstTime.pm perl-5.8.8/lib/CPAN/FirstTime.pm
+--- perl-5.8.8.orig/lib/CPAN/FirstTime.pm 2006-01-31 08:08:57.000000000 +1100
++++ perl-5.8.8/lib/CPAN/FirstTime.pm 2006-02-03 00:05:24.000000000 +1100
+@@ -358,7 +358,7 @@
+
+ };
+
+- $default = $CPAN::Config->{makepl_arg} || "";
++ $default = $CPAN::Config->{makepl_arg} || "INSTALLDIRS=site";
+ $CPAN::Config->{makepl_arg} =
+ prompt("Parameters for the 'perl Makefile.PL' command?
+ Typical frequently used settings:
diff --git a/packages/perl/perl-5.8.8/64_debian_enc2xs_inc.patch b/packages/perl/perl-5.8.8/64_debian_enc2xs_inc.patch
new file mode 100644
index 0000000000..c207a9380a
--- /dev/null
+++ b/packages/perl/perl-5.8.8/64_debian_enc2xs_inc.patch
@@ -0,0 +1,28 @@
+Tweak enc2xs to handle Debian @INC: ignore missing directories,
+follow symlinks (/usr/share/perl/5.8 -> 5.8.4).
+
+diff -Naur --exclude=debian perl-5.8.8.orig/ext/Encode/bin/enc2xs perl-5.8.8/ext/Encode/bin/enc2xs
+--- perl-5.8.8.orig/ext/Encode/bin/enc2xs 2004-09-03 01:53:51.000000000 +1000
++++ perl-5.8.8/ext/Encode/bin/enc2xs 2006-02-03 00:21:32.000000000 +1100
+@@ -909,10 +909,11 @@
+ eval { require File::Find; };
+ my (@inc, %e2x_dir);
+ for my $inc (@INC){
++ next unless -d $inc; # skip non-existent directories
+ push @inc, $inc unless $inc eq '.'; #skip current dir
+ }
+ File::Find::find(
+- sub {
++ { wanted => sub {
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = lstat($_) or return;
+@@ -922,7 +923,7 @@
+ $e2x_dir{$File::Find::dir} ||= $mtime;
+ }
+ return;
+- }, @inc);
++ }, follow => 1}, @inc);
+ warn join("\n", keys %e2x_dir), "\n";
+ for my $d (sort {$e2x_dir{$a} <=> $e2x_dir{$b}} keys %e2x_dir){
+ $_E2X = $d;
diff --git a/packages/perl/perl-5.8.8/Makefile.SH.patch b/packages/perl/perl-5.8.8/Makefile.SH.patch
new file mode 100644
index 0000000000..a30074be2b
--- /dev/null
+++ b/packages/perl/perl-5.8.8/Makefile.SH.patch
@@ -0,0 +1,253 @@
+Index: perl-5.8.8/Makefile.SH
+===================================================================
+--- perl-5.8.8.orig/Makefile.SH 2006-01-24 23:49:44.000000000 +1100
++++ perl-5.8.8/Makefile.SH 2007-06-14 13:29:37.000000000 +1000
+@@ -43,12 +43,12 @@
+ true)
+ # Prefix all runs of 'miniperl' and 'perl' with
+ # $ldlibpth so that ./perl finds *this* shared libperl.
+- case "$LD_LIBRARY_PATH" in
+- '')
+- ldlibpth="LD_LIBRARY_PATH=`pwd`";;
+- *)
+- ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";;
+- esac
++# case "$LD_LIBRARY_PATH" in
++# '')
++# ldlibpth="LD_LIBRARY_PATH=`pwd`";;
++# *)
++# ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";;
++# esac
+
+ pldlflags="$cccdlflags"
+ static_target='static_pic'
+@@ -108,7 +108,8 @@
+ ldlibpth=''
+ ;;
+ *)
+- eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\""
++# We compile in the library path in OE from cross-compile, so lets not do this
++# eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\""
+ ;;
+ esac
+ # Strip off any trailing :'s
+@@ -129,18 +130,7 @@
+ # INSTALL file, under "Building a shared perl library".
+ # If there is no pre-existing $libperl, we don't need
+ # to do anything further.
+- if test -f $archlib/CORE/$libperl; then
+- rm -f preload
+- cat <<'EOT' > preload
+-#! /bin/sh
+-lib=$1
+-shift
+-test -r $lib && export LD_PRELOAD="$lib $LD_PRELOAD"
+-exec "$@"
+-EOT
+- chmod 755 preload
+- ldlibpth="$ldlibpth `pwd`/preload `pwd`/$libperl"
+- fi
++ echo linux libraries overwritten by cross-compile patches
+ ;;
+ os390) test -f /bin/env && ldlibpth="/bin/env $ldlibpth"
+ ;;
+@@ -401,9 +391,19 @@
+ .c.s:
+ $(CCCMDSRC) -S $*.c
+
+-all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
+- @echo " ";
+- @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
++#all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT) extra.pods $(private) $(unidatafiles) $(public) $(dynamic_ext) $(nonxs_ext) extras.make
++# @echo " ";
++# @echo " Everything is up to date. Type '$(MAKE) test' to run test suite."
++
++all: $(FIRSTMAKEFILE) miniperl$(EXE_EXT)
++
++more: extra.pods $(private) $(public)
++
++more2: $(dynamic_ext)
++
++more3: $(nonxs_ext)
++
++more4: extras.make
+
+ .PHONY: all compile translators utilities
+
+@@ -413,10 +413,10 @@
+ cd x2p; $(MAKE) compile;
+ cd pod; $(MAKE) compile;
+
+-translators: miniperl$(EXE_EXT) $(CONFIGPM) FORCE
++translators: $(CONFIGPM) FORCE
+ @echo " "; echo " Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
+
+-utilities: miniperl$(EXE_EXT) $(CONFIGPM) $(plextract) lib/lib.pm FORCE
++utilities: $(CONFIGPM) $(plextract) lib/lib.pm FORCE
+ @echo " "; echo " Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
+
+
+@@ -550,7 +550,7 @@
+ case "$useshrplib" in
+ true)
+ $spitshell >>Makefile <<'!NO!SUBS!'
+- $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs)
++ $(LD) -o $@ $(SHRPLDFLAGS) perl$(OBJ_EXT) $(obj) $(libs) -Wl,-soname,libperl.so.5
+ !NO!SUBS!
+ case "$osname" in
+ aix)
+@@ -591,7 +591,9 @@
+ $(CC) -o miniperl $(CLDFLAGS) \
+ `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
+ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
+- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
++ mv -f miniperl miniperl-target
++ ln -s hostperl miniperl
++# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
+ !NO!SUBS!
+ ;;
+ next4*)
+@@ -599,7 +601,9 @@
+ miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
+ $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
+ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
+- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
++ mv -f miniperl miniperl-target
++ ln -s hostperl miniperl
++# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
+ !NO!SUBS!
+ ;;
+ darwin*)
+@@ -620,7 +624,9 @@
+ -@rm -f miniperl.xok
+ $(CC) $(CLDFLAGS) $(NAMESPACEFLAGS) -o miniperl \
+ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
+- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
++ mv -f miniperl miniperl-target
++ ln -s hostperl miniperl
++# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
+ !NO!SUBS!
+ ;;
+ *)
+@@ -629,7 +635,9 @@
+ -@rm -f miniperl.xok
+ $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \
+ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
+- $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
++ mv -f miniperl miniperl-target
++ ln -s hostperl miniperl
++# $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
+ !NO!SUBS!
+ ;;
+ esac
+@@ -766,7 +774,7 @@
+ # We need to autosplit in two steps because VOS can't handle so many args
+ #
+ .PHONY: preplibrary
+-preplibrary: miniperl$(EXE_EXT) $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
++preplibrary: $(CONFIGPM) lib/lib.pm $(PREPLIBRARY_LIBPERL)
+ @sh ./makedir lib/auto
+ @echo " AutoSplitting perl library"
+ $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
+@@ -775,35 +783,35 @@
+ autosplit_lib_modules(@ARGV)' lib/*/*.pm
+ $(MAKE) lib/re.pm
+
+-lib/Config.pod: config.sh miniperl$(EXE_EXT) configpm Porting/Glossary
++lib/Config.pod: config.sh configpm Porting/Glossary
+ $(LDLIBPTH) ./miniperl -Ilib configpm --heavy=lib/Config_heavy.pl lib/Config.pm
+
+ $(CONFIGPM): lib/Config.pod
+
+-lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl$(EXE_EXT) minimod.pl $(CONFIGPM)
++lib/ExtUtils/Miniperl.pm: miniperlmain.c minimod.pl $(CONFIGPM)
+ $(LDLIBPTH) ./miniperl minimod.pl > lib/ExtUtils/Miniperl.pm
+
+ lib/re.pm: ext/re/re.pm
+ cp ext/re/re.pm lib/re.pm
+
+-$(plextract): miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p
++$(plextract): $(CONFIGPM) x2p/s2p
+ @-rm -f $@
+ $(LDLIBPTH) ./miniperl -I`pwd`/lib $@.PL
+
+-x2p/s2p: miniperl$(EXE_EXT) $(CONFIGPM) x2p/s2p.PL
++x2p/s2p: $(CONFIGPM) x2p/s2p.PL
+ cd x2p; $(LDLIBPTH) $(MAKE) s2p
+
+-lib/lib.pm: miniperl$(EXE_EXT) $(CONFIGPM)
++lib/lib.pm: $(CONFIGPM)
+ @-rm -f $@
+ $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
+
+ unidatafiles $(unidatafiles): uni.data
+
+-uni.data: miniperl$(EXE_EXT) $(CONFIGPM) lib/unicore/mktables
++uni.data: $(CONFIGPM) lib/unicore/mktables
+ cd lib/unicore && $(LDLIBPTH) ../../miniperl -I../../lib mktables -w
+ touch uni.data
+
+-extra.pods: miniperl$(EXE_EXT)
++extra.pods:
+ -@test -f extra.pods && rm -f `cat extra.pods`
+ -@rm -f extra.pods
+ -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
+@@ -850,18 +858,7 @@
+ INSTALL_DEPENDENCE = all
+
+ install.perl: $(INSTALL_DEPENDENCE) installperl
+- if [ -n "$(COMPILE)" ]; \
+- then \
+- cd utils; $(MAKE) compile; \
+- cd ../x2p; $(MAKE) compile; \
+- cd ../pod; $(MAKE) compile; \
+- else :; \
+- fi
+- $(LDLIBPTH) ./perl installperl --destdir=$(DESTDIR) $(INSTALLFLAGS) $(STRIPFLAGS)
+- $(MAKE) extras.install
+-
+-install.man: all installman
+- $(LDLIBPTH) ./perl installman --destdir=$(DESTDIR) $(INSTALLFLAGS)
++ ./hostperl -Ifake_config_library -Ilib -MConfig installperl $(INSTALLFLAGS) $(STRIPFLAGS)
+
+ # XXX Experimental. Hardwired values, but useful for testing.
+ # Eventually Configure could ask for some of these values.
+@@ -978,16 +975,16 @@
+ #
+ # DynaLoader may be needed for extensions that use Makefile.PL.
+
+-$(DYNALOADER): miniperl$(EXE_EXT) preplibrary FORCE
++$(DYNALOADER): preplibrary FORCE
+ @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+
+-d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
++d_dummy $(dynamic_ext): preplibrary $(DYNALOADER) FORCE
+ @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+
+-s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
++s_dummy $(static_ext): preplibrary $(DYNALOADER) FORCE
+ @$(LDLIBPTH) sh ext/util/make_ext $(STATIC) $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+
+-n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
++n_dummy $(nonxs_ext): preplibrary $(DYNALOADER) FORCE
+ @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
+
+ .PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \
+@@ -1125,7 +1122,7 @@
+
+ test_prep_pre: preplibrary utilities $(nonxs_ext)
+
+-test_prep: test_prep_pre miniperl$(EXE_EXT) $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
++test_prep: test_prep_pre $(unidatafiles) perl$(EXE_EXT) $(dynamic_ext) $(TEST_PERL_DLL)
+ PERL=./perl $(MAKE) _test_prep
+
+ _test_tty:
+@@ -1238,7 +1235,7 @@
+
+ # Can't depend on lib/Config.pm because that might be where miniperl
+ # is crashing.
+-minitest: miniperl$(EXE_EXT) lib/re.pm minitest.prep
++minitest: lib/re.pm minitest.prep
+ - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
+ && $(LDLIBPTH) ./perl TEST -minitest base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t </dev/tty
+
diff --git a/packages/perl/perl-5.8.8/Makefile.patch b/packages/perl/perl-5.8.8/Makefile.patch
new file mode 100644
index 0000000000..cf5cca19a0
--- /dev/null
+++ b/packages/perl/perl-5.8.8/Makefile.patch
@@ -0,0 +1,51 @@
+Index: perl-5.8.8/Cross/Makefile
+===================================================================
+--- perl-5.8.8.orig/Cross/Makefile 2004-01-13 07:44:01.000000000 +1100
++++ perl-5.8.8/Cross/Makefile 2007-06-14 12:40:44.000000000 +1000
+@@ -12,7 +12,7 @@
+
+ export CC = $(CROSS)gcc
+ export CXX = $(CROSS)g++
+-export LD = $(CROSS)ld
++export LD = $(CC)
+ export STRIP = $(CROSS)strip
+ export AR = $(CROSS)ar
+ export RANLIB = $(CROSS)ranlib
+@@ -34,21 +34,6 @@
+ all:
+ @echo Please read the README file before doing anything else.
+
+-gen_patch:
+- diff -Bbur ../Makefile.SH Makefile.SH > Makefile.SH.patch
+- diff -Bbur ../installperl installperl > installperl.patch
+-
+-patch:
+- cd .. ; if [ ! -e ./CROSS_PATCHED ] ; then \
+- patch -p1 < Cross/Makefile.SH.patch; \
+- patch -p1 < Cross/installperl.patch ; mv installperl installperl-patched; \
+- sed -e 's/XXSTRIPXX/$(SYS)/' installperl-patched > installperl; \
+- touch CROSS_PATCHED ; fi
+-
+-dry_patch:
+- cd .. ; patch --dry-run -p1 < Cross/Makefile.SH.patch; \
+- patch --dry-run -p1 < Cross/installperl.patch; \
+-
+ perl:
+ @echo Perl cross-build directory is $(TOPDIR)
+ @echo Target arch is $(SYS)
+@@ -58,11 +43,11 @@
+ $(TOPDIR)/generate_config_sh config.sh-$(SYS) > $(TOPDIR)/../config.sh
+ cd $(TOPDIR)/.. ; ./Configure -S ; make depend ; make ; make more
+ cd $(TOPDIR)/.. ; mkdir -p fake_config_library ; cp lib/Config.pm fake_config_library
+- cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
+- cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
+- cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=/usr/bin/perl -I$(TOPDIR)/../fake_config_library -MConfig"
++ cd $(TOPDIR)/.. ; $(MAKE) more2 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
++ cd $(TOPDIR)/.. ; $(MAKE) more3 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
++ cd $(TOPDIR)/.. ; $(MAKE) more4 "PERLRUN=hostperl -I$(TOPDIR)/../fake_config_library -MConfig"
+ cd $(TOPDIR)/.. ; rm -rf install_me_here
+- cd $(TOPDIR)/.. ; make install-strip
++# cd $(TOPDIR)/.. ; make install-strip
+ cd $(TOPDIR)/.. ; sh -x Cross/warp
+
+
diff --git a/packages/perl/perl-5.8.8/asm-pageh-fix.patch b/packages/perl/perl-5.8.8/asm-pageh-fix.patch
new file mode 100644
index 0000000000..41f3b1d23c
--- /dev/null
+++ b/packages/perl/perl-5.8.8/asm-pageh-fix.patch
@@ -0,0 +1,19 @@
+Perl inclues asm/page.h in order to get the definition for getpagesize which
+has been definied in unistd.h since glibc 2.1. Some recent version of linux
+libc headers removed the asm/page.h resulting in failures here for some
+people.
+
+Index: perl-5.8.8/ext/IPC/SysV/SysV.xs
+===================================================================
+--- perl-5.8.8.orig/ext/IPC/SysV/SysV.xs 2001-07-01 04:46:07.000000000 +1000
++++ perl-5.8.8/ext/IPC/SysV/SysV.xs 2007-07-06 11:40:21.000000000 +1000
+@@ -3,9 +3,6 @@
+ #include "XSUB.h"
+
+ #include <sys/types.h>
+-#ifdef __linux__
+-# include <asm/page.h>
+-#endif
+ #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+ #ifndef HAS_SEM
+ # include <sys/ipc.h>
diff --git a/packages/perl/perl-5.8.8/config.sh b/packages/perl/perl-5.8.8/config.sh
new file mode 100644
index 0000000000..ac8d237cac
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh
@@ -0,0 +1,1021 @@
+#!/bin/sh
+#
+# This file was produced by running the Configure script. It holds all the
+# definitions figured out by Configure. Should you modify one of these values,
+# do not forget to propagate your changes by running "Configure -der". You may
+# instead choose to run each of the .SH files by yourself, or "Configure -S".
+#
+
+# Package name : perl5
+# Source directory : .
+# Configuration time: Thu Apr 5 19:20:23 EST 2007
+# Configured by : Open Embedded
+# Target system : linux birgitte 2.6.21-rc5 #63 tue mar 27 14:41:54 est 2007 i686 gnulinux
+
+Author=''
+Date='$Date'
+Header=''
+Id='$Id'
+Locker=''
+Log='$Log'
+Mcc='Mcc'
+RCSfile='$RCSfile'
+Revision='$Revision'
+Source=''
+State=''
+_a='.a'
+_exe=''
+_o='.o'
+afs='false'
+afsroot='/afs'
+ansi2knr=''
+aphostname=''
+api_revision='5'
+api_subversion='0'
+api_version='8'
+api_versionstring='5.8.0'
+ar='ar'
+archlib='/usr/lib/perl/5.8'
+archlibexp='/usr/lib/perl/5.8'
+archname64=''
+archname='@ARCH@-thread-multi'
+archobjs=''
+asctime_r_proto='REENTRANT_PROTO_B_SB'
+awk='awk'
+baserev='5.0'
+bash=''
+bin='/usr/bin'
+binexp='/usr/bin'
+bison='bison'
+byacc='byacc'
+c=''
+castflags='0'
+cat='cat'
+cc='gcc'
+cccdlflags='-fPIC'
+ccdlflags='-Wl,-E'
+ccname='gcc'
+ccversion=''
+cf_by='Open Embedded'
+cf_email='Open Embedded@localhost.localdomain'
+cf_time='Thu Apr 5 23:06:39 EST 2007'
+charsize='1'
+chgrp=''
+chmod='chmod'
+chown=''
+clocktype='clock_t'
+comm='comm'
+compress=''
+contains='grep'
+cp='cp'
+cpio=''
+cpp='cpp'
+cpp_stuff='42'
+cpplast='-'
+cppminus='-'
+cpprun='gcc -E'
+cppstdin='gcc -E'
+crypt_r_proto='REENTRANT_PROTO_B_CCS'
+cryptlib=''
+csh='csh'
+ctermid_r_proto='0'
+ctime_r_proto='REENTRANT_PROTO_B_SB'
+d_Gconvert='gcvt((x),(n),(b))'
+d_PRIEUldbl='define'
+d_PRIFUldbl='define'
+d_PRIGUldbl='define'
+d_PRIXU64='define'
+d_PRId64='define'
+d_PRIeldbl='define'
+d_PRIfldbl='define'
+d_PRIgldbl='define'
+d_PRIi64='define'
+d_PRIo64='define'
+d_PRIu64='define'
+d_PRIx64='define'
+d_SCNfldbl='define'
+d__fwalk='undef'
+d_access='define'
+d_accessx='undef'
+d_aintl='undef'
+d_alarm='define'
+d_archlib='define'
+d_asctime_r='define'
+d_atolf='undef'
+d_atoll='define'
+d_attribute_format='define'
+d_attribute_malloc='define'
+d_attribute_nonnull='define'
+d_attribute_noreturn='define'
+d_attribute_pure='define'
+d_attribute_unused='define'
+d_attribute_warn_unused_result='undef'
+d_bcmp='define'
+d_bcopy='define'
+d_bsd='undef'
+d_bsdgetpgrp='undef'
+d_bsdsetpgrp='undef'
+d_bzero='define'
+d_casti32='undef'
+d_castneg='define'
+d_charvspr='define'
+d_chown='define'
+d_chroot='define'
+d_chsize='undef'
+d_class='undef'
+d_clearenv='define'
+d_closedir='define'
+d_cmsghdr_s='define'
+d_const='define'
+d_copysignl='define'
+d_crypt='define'
+d_crypt_r='define'
+d_csh='undef'
+d_ctermid_r='undef'
+d_ctime_r='define'
+d_cuserid='define'
+d_dbl_dig='define'
+d_dbminitproto='undef'
+d_difftime='define'
+d_dirfd='define'
+d_dirnamlen='undef'
+d_dlerror='define'
+d_dlopen='define'
+d_dlsymun='undef'
+d_dosuid='undef'
+d_drand48_r='define'
+d_drand48proto='define'
+d_dup2='define'
+d_eaccess='undef'
+d_endgrent='define'
+d_endgrent_r='undef'
+d_endhent='define'
+d_endhostent_r='undef'
+d_endnent='define'
+d_endnetent_r='undef'
+d_endpent='define'
+d_endprotoent_r='undef'
+d_endpwent='define'
+d_endpwent_r='undef'
+d_endsent='define'
+d_endservent_r='undef'
+d_eofnblk='define'
+d_eunice='undef'
+d_faststdio='undef'
+d_fchdir='define'
+d_fchmod='define'
+d_fchown='define'
+d_fcntl='define'
+d_fcntl_can_lock='define'
+d_fd_macros='define'
+d_fd_set='define'
+d_fds_bits='define'
+d_fgetpos='define'
+d_finite='define'
+d_finitel='define'
+d_flexfnam='define'
+d_flock='define'
+d_flockproto='define'
+d_fork='define'
+d_fp_class='undef'
+d_fpathconf='define'
+d_fpclass='undef'
+d_fpclassify='undef'
+d_fpclassl='undef'
+d_fpos64_t='undef'
+d_frexpl='define'
+d_fs_data_s='undef'
+d_fseeko='define'
+d_fsetpos='define'
+d_fstatfs='define'
+d_fstatvfs='define'
+d_fsync='define'
+d_ftello='define'
+d_ftime='undef'
+d_futimes='define'
+d_getcwd='define'
+d_getespwnam='undef'
+d_getfsstat='undef'
+d_getgrent='define'
+d_getgrent_r='define'
+d_getgrgid_r='define'
+d_getgrnam_r='define'
+d_getgrps='define'
+d_gethbyaddr='define'
+d_gethbyname='define'
+d_gethent='define'
+d_gethname='define'
+d_gethostbyaddr_r='define'
+d_gethostbyname_r='define'
+d_gethostent_r='define'
+d_gethostprotos='define'
+d_getitimer='define'
+d_getlogin='define'
+d_getlogin_r='define'
+d_getmnt='undef'
+d_getmntent='define'
+d_getnbyaddr='define'
+d_getnbyname='define'
+d_getnent='define'
+d_getnetbyaddr_r='define'
+d_getnetbyname_r='define'
+d_getnetent_r='define'
+d_getnetprotos='define'
+d_getpagsz='define'
+d_getpbyname='define'
+d_getpbynumber='define'
+d_getpent='define'
+d_getpgid='define'
+d_getpgrp2='undef'
+d_getpgrp='define'
+d_getppid='define'
+d_getprior='define'
+d_getprotobyname_r='define'
+d_getprotobynumber_r='define'
+d_getprotoent_r='define'
+d_getprotoprotos='define'
+d_getprpwnam='undef'
+d_getpwent='define'
+d_getpwent_r='define'
+d_getpwnam_r='define'
+d_getpwuid_r='define'
+d_getsbyname='define'
+d_getsbyport='define'
+d_getsent='define'
+d_getservbyname_r='define'
+d_getservbyport_r='define'
+d_getservent_r='define'
+d_getservprotos='define'
+d_getspnam='define'
+d_getspnam_r='undef'
+d_gettimeod='define'
+d_gmtime_r='define'
+d_gnulibc='define'
+d_grpasswd='define'
+d_hasmntopt='define'
+d_htonl='define'
+d_ilogbl='define'
+d_index='undef'
+d_inetaton='define'
+d_int64_t='define'
+d_isascii='define'
+d_isfinite='undef'
+d_isinf='define'
+d_isnan='define'
+d_isnanl='define'
+d_killpg='define'
+d_lchown='define'
+d_ldbl_dig='define'
+d_libm_lib_version='define'
+d_link='define'
+d_localtime_r='define'
+d_locconv='define'
+d_lockf='define'
+d_longdbl='define'
+d_longlong='define'
+d_lseekproto='define'
+d_lstat='define'
+d_madvise='define'
+d_malloc_good_size='undef'
+d_malloc_size='undef'
+d_mblen='define'
+d_mbstowcs='define'
+d_mbtowc='define'
+d_memchr='define'
+d_memcmp='define'
+d_memcpy='define'
+d_memmove='define'
+d_memset='define'
+d_mkdir='define'
+d_mkdtemp='define'
+d_mkfifo='define'
+d_mkstemp='define'
+d_mkstemps='undef'
+d_mktime='define'
+d_mmap='define'
+d_modfl='define'
+d_modfl_pow32_bug='undef'
+d_modflproto='define'
+d_mprotect='define'
+d_msg='define'
+d_msg_ctrunc='define'
+d_msg_dontroute='define'
+d_msg_oob='define'
+d_msg_peek='define'
+d_msg_proxy='define'
+d_msgctl='define'
+d_msgget='define'
+d_msghdr_s='define'
+d_msgrcv='define'
+d_msgsnd='define'
+d_msync='define'
+d_munmap='define'
+d_mymalloc='undef'
+d_nice='define'
+d_nl_langinfo='define'
+d_nv_zero_is_allbits_zero='define'
+d_off64_t='define'
+d_old_pthread_create_joinable='undef'
+d_oldpthreads='undef'
+d_oldsock='undef'
+d_open3='define'
+d_pathconf='define'
+d_pause='define'
+d_perl_otherlibdirs='define'
+d_phostname='undef'
+d_pipe='define'
+d_poll='define'
+d_portable='define'
+d_procselfexe='define'
+d_pthread_atfork='define'
+d_pthread_attr_setscope='define'
+d_pthread_yield='define'
+d_pwage='undef'
+d_pwchange='undef'
+d_pwclass='undef'
+d_pwcomment='undef'
+d_pwexpire='undef'
+d_pwgecos='define'
+d_pwpasswd='define'
+d_pwquota='undef'
+d_qgcvt='define'
+d_quad='define'
+d_random_r='define'
+d_readdir64_r='define'
+d_readdir='define'
+d_readdir_r='define'
+d_readlink='define'
+d_readv='define'
+d_recvmsg='define'
+d_rename='define'
+d_rewinddir='define'
+d_rmdir='define'
+d_safebcpy='undef'
+d_safemcpy='undef'
+d_sanemcmp='define'
+d_sbrkproto='define'
+d_scalbnl='define'
+d_sched_yield='define'
+d_scm_rights='define'
+d_seekdir='define'
+d_select='define'
+d_sem='define'
+d_semctl='define'
+d_semctl_semid_ds='define'
+d_semctl_semun='define'
+d_semget='define'
+d_semop='define'
+d_sendmsg='define'
+d_setegid='define'
+d_seteuid='define'
+d_setgrent='define'
+d_setgrent_r='undef'
+d_setgrps='define'
+d_sethent='define'
+d_sethostent_r='undef'
+d_setitimer='define'
+d_setlinebuf='define'
+d_setlocale='define'
+d_setlocale_r='undef'
+d_setnent='define'
+d_setnetent_r='undef'
+d_setpent='define'
+d_setpgid='define'
+d_setpgrp2='undef'
+d_setpgrp='define'
+d_setprior='define'
+d_setproctitle='undef'
+d_setprotoent_r='undef'
+d_setpwent='define'
+d_setpwent_r='undef'
+d_setregid='define'
+d_setresgid='define'
+d_setresuid='define'
+d_setreuid='define'
+d_setrgid='undef'
+d_setruid='undef'
+d_setsent='define'
+d_setservent_r='undef'
+d_setsid='define'
+d_setvbuf='define'
+d_sfio='undef'
+d_shm='define'
+d_shmat='define'
+d_shmatprototype='define'
+d_shmctl='define'
+d_shmdt='define'
+d_shmget='define'
+d_sigaction='define'
+d_sigprocmask='define'
+d_sigsetjmp='define'
+d_sockatmark='define'
+d_sockatmarkproto='define'
+d_socket='define'
+d_socklen_t='define'
+d_sockpair='define'
+d_socks5_init='undef'
+d_sprintf_returns_strlen='define'
+d_sqrtl='define'
+d_srand48_r='define'
+d_srandom_r='define'
+d_sresgproto='define'
+d_sresuproto='define'
+d_statblks='define'
+d_statfs_f_flags='undef'
+d_statfs_s='define'
+d_statvfs='define'
+d_stdio_cnt_lval='undef'
+d_stdio_ptr_lval='undef'
+d_stdio_ptr_lval_nochange_cnt='undef'
+d_stdio_ptr_lval_sets_cnt='undef'
+d_stdio_stream_array='undef'
+d_stdiobase='undef'
+d_stdstdio='undef'
+d_strchr='define'
+d_strcoll='define'
+d_strctcpy='define'
+d_strerrm='strerror(e)'
+d_strerror='define'
+d_strerror_r='define'
+d_strftime='define'
+d_strlcat='undef'
+d_strlcpy='undef'
+d_strtod='define'
+d_strtol='define'
+d_strtold='define'
+d_strtoll='define'
+d_strtoq='define'
+d_strtoul='define'
+d_strtoull='define'
+d_strtouq='define'
+d_strxfrm='define'
+d_suidsafe='undef'
+d_symlink='define'
+d_syscall='define'
+d_syscallproto='define'
+d_sysconf='define'
+d_sysernlst=''
+d_syserrlst='define'
+d_system='define'
+d_tcgetpgrp='define'
+d_tcsetpgrp='define'
+d_telldir='define'
+d_telldirproto='define'
+d_time='define'
+d_times='define'
+d_tm_tm_gmtoff='define'
+d_tm_tm_zone='define'
+d_tmpnam_r='define'
+d_truncate='define'
+d_ttyname_r='define'
+d_tzname='define'
+d_ualarm='define'
+d_umask='define'
+d_uname='define'
+d_union_semun='undef'
+d_unordered='undef'
+d_unsetenv='define'
+d_usleep='define'
+d_usleepproto='define'
+d_ustat='define'
+d_vendorarch='define'
+d_vendorbin='define'
+d_vendorlib='define'
+d_vendorscript='define'
+d_vfork='undef'
+d_void_closedir='undef'
+d_voidsig='define'
+d_voidtty=''
+d_volatile='define'
+d_vprintf='define'
+d_wait4='define'
+d_waitpid='define'
+d_wcstombs='define'
+d_wctomb='define'
+d_writev='define'
+d_xenix='undef'
+date='date'
+db_hashtype='u_int32_t'
+db_prefixtype='size_t'
+db_version_major=''
+db_version_minor=''
+db_version_patch=''
+defvoidused='15'
+direntrytype='struct dirent'
+dlext='so'
+dlsrc='dl_dlopen.xs'
+doublesize='8'
+drand01='drand48()'
+drand48_r_proto='REENTRANT_PROTO_I_ST'
+dynamic_ext='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
+eagain='EAGAIN'
+ebcdic='undef'
+echo='echo'
+egrep='egrep'
+emacs=''
+endgrent_r_proto='0'
+endhostent_r_proto='0'
+endnetent_r_proto='0'
+endprotoent_r_proto='0'
+endpwent_r_proto='0'
+endservent_r_proto='0'
+eunicefix=':'
+exe_ext=''
+expr='expr'
+extensions='attrs B ByteLoader Cwd Data/Dumper Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared Errno'
+extras=''
+fflushNULL='define'
+fflushall='undef'
+find=''
+firstmakefile='makefile'
+flex=''
+fpossize='16'
+fpostype='fpos_t'
+freetype='void'
+from=':'
+full_ar='/usr/bin/ar'
+full_csh='/bin/csh'
+full_sed='/bin/sed'
+gccansipedantic=''
+gccosandvers=''
+getgrent_r_proto='REENTRANT_PROTO_I_SBWR'
+getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR'
+getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR'
+gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE'
+gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE'
+gethostent_r_proto='REENTRANT_PROTO_I_SBWRE'
+getlogin_r_proto='REENTRANT_PROTO_I_BW'
+getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE'
+getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE'
+getnetent_r_proto='REENTRANT_PROTO_I_SBWRE'
+getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR'
+getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR'
+getprotoent_r_proto='REENTRANT_PROTO_I_SBWR'
+getpwent_r_proto='REENTRANT_PROTO_I_SBWR'
+getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR'
+getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR'
+getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR'
+getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR'
+getservent_r_proto='REENTRANT_PROTO_I_SBWR'
+gidsign='1'
+gidsize='4'
+gidtype='gid_t'
+glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib '
+gmake='gmake'
+gmtime_r_proto='REENTRANT_PROTO_S_TS'
+grep='grep'
+groupcat='cat /etc/group'
+groupstype='gid_t'
+gzip='gzip'
+h_fcntl='false'
+h_sysfile='true'
+hint='recommended'
+hostcat='cat /etc/hosts'
+html1dir=' '
+html1direxp=''
+html3dir=' '
+html3direxp=''
+i16size='2'
+i16type='short'
+i32size='4'
+i64size='8'
+i8size='1'
+i8type='char'
+i_arpainet='define'
+i_bsdioctl=''
+i_crypt='define'
+i_db='undef'
+i_dbm='undef'
+i_dirent='define'
+i_dld='undef'
+i_dlfcn='define'
+i_fcntl='undef'
+i_float='define'
+i_fp='undef'
+i_fp_class='undef'
+i_gdbm='undef'
+i_grp='define'
+i_ieeefp='undef'
+i_inttypes='define'
+i_langinfo='define'
+i_libutil='undef'
+i_limits='define'
+i_locale='define'
+i_machcthr='undef'
+i_malloc='define'
+i_math='define'
+i_memory='undef'
+i_mntent='define'
+i_ndbm='undef'
+i_netdb='define'
+i_neterrno='undef'
+i_netinettcp='define'
+i_niin='define'
+i_poll='define'
+i_prot='undef'
+i_pthread='define'
+i_pwd='define'
+i_rpcsvcdbm='undef'
+i_sfio='undef'
+i_sgtty='undef'
+i_shadow='define'
+i_socks='undef'
+i_stdarg='define'
+i_stddef='define'
+i_stdlib='define'
+i_string='define'
+i_sunmath='undef'
+i_sysaccess='undef'
+i_sysdir='define'
+i_sysfile='define'
+i_sysfilio='undef'
+i_sysin='undef'
+i_sysioctl='define'
+i_syslog='define'
+i_sysmman='define'
+i_sysmode='undef'
+i_sysmount='define'
+i_sysndir='undef'
+i_sysparam='define'
+i_sysresrc='define'
+i_syssecrt='undef'
+i_sysselct='define'
+i_syssockio='undef'
+i_sysstat='define'
+i_sysstatfs='define'
+i_sysstatvfs='define'
+i_systime='define'
+i_systimek='undef'
+i_systimes='define'
+i_systypes='define'
+i_sysuio='define'
+i_sysun='define'
+i_sysutsname='define'
+i_sysvfs='define'
+i_syswait='define'
+i_termio='undef'
+i_termios='define'
+i_time='define'
+i_unistd='define'
+i_ustat='define'
+i_utime='define'
+i_values='define'
+i_varargs='undef'
+i_varhdr='stdarg.h'
+i_vfork='undef'
+ignore_versioned_solibs='y'
+inc_version_list=' '
+inc_version_list_init='0'
+incpath=''
+inews=''
+installarchlib='@DESTDIR@/usr/lib/perl/5.8'
+installbin='@DESTDIR@/usr/bin'
+installhtml1dir=''
+installhtml3dir=''
+installman1dir='@DESTDIR@/usr/share/man/man1'
+installman3dir='@DESTDIR@/usr/share/man/man3'
+installprefix='@DESTDIR@/usr'
+installprefixexp='@DESTDIR@/usr'
+installprivlib='@DESTDIR@/usr/share/perl/5.8'
+installscript='@DESTDIR@/usr/bin'
+installsitearch='@DESTDIR@/usr/local/lib/perl/5.8.8'
+installsitebin='@DESTDIR@/usr/local/bin'
+installsitehtml1dir=''
+installsitehtml3dir=''
+installsitelib='@DESTDIR@/usr/local/share/perl/5.8.8'
+installsiteman1dir='@DESTDIR@/usr/local/man/man1'
+installsiteman3dir='@DESTDIR@/usr/local/man/man3'
+installsitescript='@DESTDIR@/usr/local/bin'
+installstyle='lib/perl5'
+installusrbinperl='define'
+installvendorarch='@DESTDIR@/usr/lib/perl5'
+installvendorbin='@DESTDIR@/usr/bin'
+installvendorhtml1dir=''
+installvendorhtml3dir=''
+installvendorlib='@DESTDIR@/usr/share/perl5'
+installvendorman1dir='@DESTDIR@/usr/share/man/man1'
+installvendorman3dir='@DESTDIR@/usr/share/man/man3'
+installvendorscript='@DESTDIR@/usr/bin'
+intsize='4'
+issymlink='test -h'
+ivdformat='"ld"'
+ivtype='long'
+known_extensions='attrs B ByteLoader Cwd Data/Dumper DB_File Devel/DProf Devel/Peek Devel/PPPort Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread threads Time/HiRes Unicode/Normalize XS/APItest XS/Typemap threads/shared'
+ksh=''
+ld='gcc'
+lddlflags='-shared -L/usr/local/lib'
+ldflags=' -L/usr/local/lib'
+ldflags_uselargefiles=''
+ldlibpthname='LD_LIBRARY_PATH'
+less='less'
+lib_ext='.a'
+libperl='libperl.so'
+libpth='/usr/local/lib /lib /usr/lib'
+line=''
+lint=''
+lkflags=''
+ln='ln'
+lns='/bin/ln -s'
+localtime_r_proto='REENTRANT_PROTO_S_TS'
+locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
+loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
+longlongsize='8'
+lp=''
+lpr=''
+ls='ls'
+lseeksize='8'
+lseektype='off_t'
+mail=''
+mailx=''
+make='make'
+make_set_make='#'
+mallocobj=''
+mallocsrc=''
+malloctype='void *'
+man1dir='/usr/share/man/man1'
+man1direxp='/usr/share/man/man1'
+man1ext='1'
+man3dir='/usr/share/man/man3'
+man3direxp='/usr/share/man/man3'
+man3ext='3pm'
+mips_type=''
+mistrustnm=''
+mkdir='mkdir'
+mmaptype='void *'
+modetype='mode_t'
+more='more'
+multiarch='undef'
+mv=''
+myarchname='@ARCH@'
+mydomain='.localdomain'
+myhostname='localhost'
+n='-n'
+need_va_copy='undef'
+netdb_hlen_type='size_t'
+netdb_host_type='const void *'
+netdb_name_type='const char *'
+netdb_net_type='in_addr_t'
+nm='nm'
+nm_opt=''
+nm_so_opt='--dynamic'
+nonxs_ext='Errno'
+nroff='nroff'
+nvEUformat='"E"'
+nvFUformat='"F"'
+nvGUformat='"G"'
+nveformat='"e"'
+nvfformat='"f"'
+nvgformat='"g"'
+nvsize='8'
+nvtype='double'
+o_nonblock='O_NONBLOCK'
+obj_ext='.o'
+old_pthread_create_joinable=''
+optimize='-O2'
+orderlib='false'
+osname='linux'
+otherlibdirs=' '
+package='perl5'
+pager='/usr/bin/less -isr'
+passcat='cat /etc/passwd'
+patchlevel='8'
+path_sep=':'
+perl5='hostperl'
+perl=''
+perl_patchlevel=''
+perladmin='root@localhost'
+perllibs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
+perlpath='hostperl'
+pg='pg'
+phostname=''
+pidtype='pid_t'
+plibpth=''
+pmake=''
+pr=''
+prefix='/usr'
+prefixexp='/usr'
+privlib='/usr/share/perl/5.8'
+privlibexp='/usr/share/perl/5.8'
+procselfexe='"/proc/self/exe"'
+prototype='define'
+randbits='48'
+randfunc='drand48'
+random_r_proto='REENTRANT_PROTO_I_St'
+randseedtype='long'
+ranlib=':'
+rd_nodata='-1'
+readdir64_r_proto='REENTRANT_PROTO_I_TSR'
+readdir_r_proto='REENTRANT_PROTO_I_TSR'
+revision='5'
+rm='rm'
+rmail=''
+run=''
+runnm='false'
+sPRIEUldbl='"LE"'
+sPRIFUldbl='"LF"'
+sPRIGUldbl='"LG"'
+sPRIeldbl='"Le"'
+sPRIfldbl='"Lf"'
+sPRIgldbl='"Lg"'
+sSCNfldbl='"Lf"'
+sched_yield='sched_yield()'
+scriptdir='/usr/bin'
+scriptdirexp='/usr/bin'
+sed='sed'
+seedfunc='srand48'
+selecttype='fd_set *'
+sendmail=''
+setgrent_r_proto='0'
+sethostent_r_proto='0'
+setlocale_r_proto='0'
+setnetent_r_proto='0'
+setprotoent_r_proto='0'
+setpwent_r_proto='0'
+setservent_r_proto='0'
+sh='/bin/sh'
+shar=''
+sharpbang='#!'
+shmattype='void *'
+shortsize='2'
+shrpenv=''
+shsharp='true'
+sig_count='65'
+sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 '
+sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
+sig_size='69'
+sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
+sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0'
+signal_t='void'
+sitearch='/usr/local/lib/perl/5.8.8'
+sitearchexp='/usr/local/lib/perl/5.8.8'
+sitebin='/usr/local/bin'
+sitebinexp='/usr/local/bin'
+sitehtml1dir=''
+sitehtml1direxp=''
+sitehtml3dir=''
+sitehtml3direxp=''
+sitelib='/usr/local/share/perl/5.8.8'
+sitelib_stem=''
+sitelibexp='/usr/local/share/perl/5.8.8'
+siteman1dir='/usr/local/man/man1'
+siteman1direxp='/usr/local/man/man1'
+siteman3dir='/usr/local/man/man3'
+siteman3direxp='/usr/local/man/man3'
+siteprefix='/usr/local'
+siteprefixexp='/usr/local'
+sitescript='/usr/local/bin'
+sitescriptexp='/usr/local/bin'
+sizetype='size_t'
+sleep=''
+smail=''
+so='so'
+sockethdr=''
+socketlib=''
+socksizetype='socklen_t'
+sort='sort'
+spackage='Perl5'
+spitshell='cat'
+srand48_r_proto='REENTRANT_PROTO_I_LS'
+srandom_r_proto='REENTRANT_PROTO_I_TS'
+src='.'
+ssizetype='ssize_t'
+startperl='#!/usr/bin/perl'
+startsh='#!/bin/sh'
+static_ext=' '
+stdchar='char'
+stdio_base='((fp)->_IO_read_base)'
+stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
+stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
+stdio_filbuf=''
+stdio_ptr='((fp)->_IO_read_ptr)'
+stdio_stream_array=''
+strerror_r_proto='REENTRANT_PROTO_B_IBW'
+strings='/usr/include/string.h'
+submit=''
+subversion='8'
+sysman='/usr/share/man/man1'
+tail=''
+tar=''
+targetarch=''
+tbl=''
+tee=''
+test='test'
+timeincl='/usr/include/sys/time.h /usr/include/time.h '
+timetype='time_t'
+tmpnam_r_proto='REENTRANT_PROTO_B_B'
+to=':'
+touch='touch'
+tr='tr'
+trnl='\n'
+troff=''
+ttyname_r_proto='REENTRANT_PROTO_I_IBW'
+u16size='2'
+u16type='unsigned short'
+u32size='4'
+u64size='8'
+u8size='1'
+u8type='unsigned char'
+uidsign='1'
+uidsize='4'
+uidtype='uid_t'
+uname='uname'
+uniq='uniq'
+use5005threads='undef'
+usecrosscompile='undef'
+usedl='define'
+usefaststdio='define'
+useithreads='define'
+uselargefiles='define'
+uselongdouble='undef'
+usemallocwrap='define'
+usemorebits='undef'
+usemultiplicity='define'
+usemymalloc='n'
+usenm='false'
+useopcode='true'
+useperlio='define'
+useposix='true'
+usereentrant='undef'
+usesfio='false'
+useshrplib='true'
+usesitecustomize='undef'
+usesocks='undef'
+usethreads='define'
+usevendorprefix='define'
+usevfork='false'
+usrinc='/usr/include'
+uuname=''
+uvXUformat='"lX"'
+uvoformat='"lo"'
+uvtype='unsigned long'
+uvuformat='"lu"'
+uvxformat='"lx"'
+vendorarch='/usr/lib/perl5'
+vendorarchexp='/usr/lib/perl5'
+vendorbin='/usr/bin'
+vendorbinexp='/usr/bin'
+vendorhtml1dir=' '
+vendorhtml1direxp=''
+vendorhtml3dir=' '
+vendorhtml3direxp=''
+vendorlib='/usr/share/perl5'
+vendorlib_stem=''
+vendorlibexp='/usr/share/perl5'
+vendorman1dir='/usr/share/man/man1'
+vendorman1direxp='/usr/share/man/man1'
+vendorman3dir='/usr/share/man/man3'
+vendorman3direxp='/usr/share/man/man3'
+vendorprefix='/usr'
+vendorprefixexp='/usr'
+vendorscript='/usr/bin'
+vendorscriptexp='/usr/bin'
+version='5.8.8'
+version_patchlevel_string='version 8 subversion 8'
+versiononly='undef'
+vi=''
+voidflags='15'
+xlibpth='/usr/lib/386 /lib/386'
+yacc='yacc'
+yaccflags=''
+zcat=''
+zip='zip'
+# Configure command line arguments.
+config_arg0='Configure'
+config_args='-des -Doptimize=-O2 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Open Embedded -Dinstallprefix=@DESTDIR@ -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr -Dotherlibdirs=/usr/lib/perl5/5.8.8 -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Ud_dosuid -Dd_semctl_semun -Ui_db -Ui_ndbm -Ui_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr'
+config_argc=28
+config_arg1='-des'
+config_arg2='-Doptimize=-O2'
+config_arg3='-Dmyhostname=localhost'
+config_arg4='-Dperladmin=root@localhost'
+config_arg5='-Dcc=gcc'
+config_arg6='-Dcf_by=Open Embedded'
+config_arg7='-Dinstallprefix=@DESTDIR@'
+config_arg8='-Dprefix=/usr'
+config_arg9='-Dvendorprefix=/usr'
+config_arg10='-Dsiteprefix=/usr'
+config_arg11='-Dotherlibdirs=/usr/lib/perl5/5.8.8'
+config_arg12='-Duseshrplib'
+config_arg13='-Dusethreads'
+config_arg14='-Duseithreads'
+config_arg15='-Duselargefiles'
+config_arg16='-Ud_dosuid'
+config_arg17='-Dd_semctl_semun'
+config_arg18='-Ui_db'
+config_arg19='-Ui_ndbm'
+config_arg20='-Ui_gdbm'
+config_arg21='-Di_shadow'
+config_arg22='-Di_syslog'
+config_arg23='-Dman3ext=3pm'
+config_arg24='-Duseperlio'
+config_arg25='-Dinstallusrbinperl'
+config_arg26='-Ubincompat5005'
+config_arg27='-Uversiononly'
+config_arg28='-Dpager=/usr/bin/less -isr'
+PERL_REVISION=5
+PERL_VERSION=8
+PERL_SUBVERSION=8
+PERL_API_REVISION=5
+PERL_API_VERSION=8
+PERL_API_SUBVERSION=0
+PERL_PATCHLEVEL=
+PERL_CONFIG_SH=true
diff --git a/packages/perl/perl-5.8.8/config.sh-32 b/packages/perl/perl-5.8.8/config.sh-32
new file mode 100644
index 0000000000..e22d71d8ee
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-32
@@ -0,0 +1,58 @@
+alignbytes='4'
+ccflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+yaccflags=''
+ccsymbols='__GNUC_PATCHLEVEL__=5'
+cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
+cppccsymbols='__GNUC__=3 __GNUC_MINOR__=3'
+cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include'
+cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=3 __GNU_LIBRARY__=6 _GNU_SOURCE=1 i386=1 __i386=1 __i386__=1 __i486=1 __i486__=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1'
+d_nv_preserves_uv='define'
+d_u32align='undef'
+gccversion='3.3.5 (Debian 1:3.3.5-13)'
+getspnam_r_proto='0'
+gidformat='"lu"'
+gnulibc_version='2.3.2'
+i32type='long'
+i64type='long long'
+ivsize='4'
+gnulibc_version='2.3.2'
+libc='/lib/libc-2.3.2.so'
+libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+ignore_versioned_solibs='y'
+libs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
+libsdirs=' /usr/lib'
+libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+libspath=' /usr/local/lib /lib /usr/lib'
+libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util pthread c cposix posix ucb BSD'
+libswanted_uselargefiles=''
+perllibs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
+libsfiles=' libnsl.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+longdblsize='12'
+longlongsize='8'
+longsize='4'
+myuname='linux birgitte 2.6.21-rc5 #63 tue mar 27 14:41:54 est 2007 i686 gnulinux '
+nv_preserves_uv_bits='32'
+osvers='2.6.21-rc5'
+ptrsize='4'
+quadkind='3'
+quadtype='long long'
+uquadtype='unsigned long long'
+sPRIXU64='"LX"'
+sPRId64='"Ld"'
+sPRIi64='"Li"'
+sPRIo64='"Lo"'
+sPRIu64='"Lu"'
+sPRIx64='"Lx"'
+selectminbits='32'
+sizesize='4'
+u32type='unsigned long'
+u64type='unsigned long long'
+uidformat='"lu"'
+uquadtype='unsigned long long'
+use64bitall='undef'
+use64bitint='undef'
+uvsize='4'
diff --git a/packages/perl/perl-5.8.8/config.sh-32-be b/packages/perl/perl-5.8.8/config.sh-32-be
new file mode 100644
index 0000000000..a59a9abb5e
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-32-be
@@ -0,0 +1 @@
+byteorder='4321'
diff --git a/packages/perl/perl-5.8.8/config.sh-32-le b/packages/perl/perl-5.8.8/config.sh-32-le
new file mode 100644
index 0000000000..10e4226567
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-32-le
@@ -0,0 +1 @@
+byteorder='1234'
diff --git a/packages/perl/perl-5.8.8/config.sh-64 b/packages/perl/perl-5.8.8/config.sh-64
new file mode 100644
index 0000000000..6e58fa71a3
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-64
@@ -0,0 +1,58 @@
+alignbytes='8'
+ccflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+yaccflags=''
+ccsymbols=''
+cppccsymbols=''
+cppccsymbols=''
+cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement'
+cppsymbols='__amd64=1 __amd64__=1 __ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=4 __GNUC__=4 __GNUC_MINOR__=1 __GNU_LIBRARY__=6 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 linux=1 __linux=1 __linux__=1 _LP64=1 __LP64__=1 _POSIX_C_SOURCE=199506L _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 unix=1 __unix=1 __unix__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 __x86_64=1 __x86_64__=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1'
+d_nv_preserves_uv='undef'
+d_u32align='define'
+gccversion='4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)'
+getspnam_r_proto='REENTRANT_PROTO_I_CSBWR'
+gidformat='"u"'
+gnulibc_version='2.4'
+i32type='int'
+i64type='long'
+ivsize='8'
+gnulibc_version='2.4'
+libc='/lib/libc-2.4.so'
+libsfiles=' libnsl.so libdb.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+ignore_versioned_solibs='y'
+libs='-lnsl -ldb -ldl -lm -lcrypt -lutil -lpthread -lc'
+libsdirs=' /usr/lib'
+libsfiles=' libnsl.so libdb.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+libspath=' /usr/local/lib /lib /usr/lib'
+libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util pthread c cposix posix ucb BSD'
+libswanted_uselargefiles=''
+perllibs='-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc'
+libsfiles=' libnsl.so libdb.so libdl.so libm.so libcrypt.so libutil.so libpthread.so libc.so'
+libsfound=' /usr/lib/libnsl.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libcrypt.so /usr/lib/libutil.so /usr/lib/libpthread.so /usr/lib/libc.so'
+longdblsize='16'
+longlongsize='8'
+longsize='8'
+myuname='linux nynaeve 2.6.20.4 #29 smp thu mar 29 15:35:30 est 2007 x86_64 gnulinux '
+nv_preserves_uv_bits='53'
+osvers='2.6.20.4'
+ptrsize='8'
+quadkind='2'
+quadtype='long'
+uquadtype='unsigned long'
+sPRIXU64='"lX"'
+sPRId64='"ld"'
+sPRIi64='"li"'
+sPRIo64='"lo"'
+sPRIu64='"lu"'
+sPRIx64='"lx"'
+selectminbits='64'
+sizesize='8'
+u32type='unsigned int'
+u64type='unsigned long'
+uidformat='"u"'
+uquadtype='unsigned long'
+use64bitall='define'
+use64bitint='define'
+uvsize='8'
diff --git a/packages/perl/perl-5.8.8/config.sh-64-be b/packages/perl/perl-5.8.8/config.sh-64-be
new file mode 100644
index 0000000000..c08ce3c431
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-64-be
@@ -0,0 +1 @@
+byteorder='87654321'
diff --git a/packages/perl/perl-5.8.8/config.sh-64-le b/packages/perl/perl-5.8.8/config.sh-64-le
new file mode 100644
index 0000000000..277d2a9bee
--- /dev/null
+++ b/packages/perl/perl-5.8.8/config.sh-64-le
@@ -0,0 +1 @@
+byteorder='12345678'
diff --git a/packages/perl/perl-5.8.8/generate-sh.patch b/packages/perl/perl-5.8.8/generate-sh.patch
new file mode 100644
index 0000000000..ceb74196d6
--- /dev/null
+++ b/packages/perl/perl-5.8.8/generate-sh.patch
@@ -0,0 +1,46 @@
+Use the ld flags from the supplied configuration file. For sh we need the
+flags that specify to build PIC code so that the shared libraries work.
+
+Index: perl-5.8.8/Cross/generate_config_sh
+===================================================================
+--- perl-5.8.8.orig/Cross/generate_config_sh 2003-09-05 18:31:08.000000000 +1000
++++ perl-5.8.8/Cross/generate_config_sh 2007-05-30 09:12:50.000000000 +1000
+@@ -19,10 +19,10 @@
+ $callbacks->{'ar'} = [\&simple_process, ["AR", "arm-linux-ar"]];
+ $callbacks->{'archname'} = [\&simple_process, ["SYS", "armv4l-linux"]];
+ $callbacks->{'cc'} = [\&simple_process, ["CC", "arm-linux-gcc"]];
+-$callbacks->{'cccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
+-$callbacks->{'ccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
+-$callbacks->{'ccflags'} = [\&simple_process, ["CFLAGS", "-fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
+-$callbacks->{'ccflags_uselargefiles'} = [\&simple_process, ["CFLAGS", "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
++#$callbacks->{'cccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
++#$callbacks->{'ccdlflags'} = [\&simple_process, ["CFLAGS", ""]];
++$callbacks->{'ccflags'} = [\&simple_process_insert, ["CFLAGS", "-fno-strict-aliasing -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
++$callbacks->{'ccflags_uselargefiles'} = [\&simple_process_insert, ["CFLAGS", "-D_GNU_SOURCE -DTHREADS_HAVE_PIDS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"]];
+ $callbacks->{'ccname'} = [\&simple_process, ["CC", "arm-linux-gcc"]];
+ $callbacks->{'cpp'} = [\&simple_process, ["CCP", "arm-linux-cpp"]];
+ $callbacks->{'cppflags'} = [\&simple_process, ["CCPFLAGS", "-fno-strict-aliasing"]];
+@@ -105,6 +105,23 @@
+
+ }
+
++# Insert env var into the variables value
++sub simple_process_insert {
++ my $key = shift;
++ my $value = shift;
++ my $envvar = $callbacks->{$key}->[1][0];
++
++ if ($ENV{$envvar}) {
++ # Strip quotes from value
++ $value =~ s/^\'//;
++ $value =~ s/\'$//;
++ # Remove -I/usr/local/... from the value
++ $value =~ s#\W-I/usr/local/\w+\W# #g;
++ # Prepend env var (OE setting) to value
++ print("$key=\'$ENV{$envvar} $value\'\n");
++ }
++}
++
+ sub library_munge {
+ my $key = shift;
+ my $value = shift;
diff --git a/packages/perl/perl-5.8.8/installperl.patch b/packages/perl/perl-5.8.8/installperl.patch
new file mode 100644
index 0000000000..ff52bc3a9c
--- /dev/null
+++ b/packages/perl/perl-5.8.8/installperl.patch
@@ -0,0 +1,15 @@
+Index: perl-5.8.8/installperl
+===================================================================
+--- perl-5.8.8.orig/installperl 2007-06-14 12:36:23.000000000 +1000
++++ perl-5.8.8/installperl 2007-06-14 12:38:39.000000000 +1000
+@@ -3,8 +3,8 @@
+ BEGIN {
+ require 5.004;
+ chdir '..' if !-d 'lib' and -d '../lib';
+- @INC = 'lib';
+- $ENV{PERL5LIB} = 'lib';
++# @INC = 'lib';
++# $ENV{PERL5LIB} = 'lib';
+ }
+
+ use strict;
diff --git a/packages/perl/perl-5.8.8/makedepend-dash.patch b/packages/perl/perl-5.8.8/makedepend-dash.patch
new file mode 100644
index 0000000000..1f15474377
--- /dev/null
+++ b/packages/perl/perl-5.8.8/makedepend-dash.patch
@@ -0,0 +1,13 @@
+Index: perl-5.8.8/makedepend.SH
+===================================================================
+--- perl-5.8.8.orig/makedepend.SH 2007-05-24 12:06:52.000000000 +1000
++++ perl-5.8.8/makedepend.SH 2007-05-24 12:27:33.000000000 +1000
+@@ -128,7 +128,7 @@
+ *.y) filebase=`basename $file .y` ;;
+ esac
+ case "$file" in
+- */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
++ */*) finc="-I`echo $file | sed 's#/[^/]*$##'`" ;;
+ *) finc= ;;
+ esac
+ $echo "Finding dependencies for $filebase$_o."
diff --git a/packages/perl/perl-5.8.8/native-no-gdbminc.patch b/packages/perl/perl-5.8.8/native-no-gdbminc.patch
new file mode 100644
index 0000000000..f00fa2cc17
--- /dev/null
+++ b/packages/perl/perl-5.8.8/native-no-gdbminc.patch
@@ -0,0 +1,18 @@
+If you have a /usr/include/gdbm/ndbm.h host on the header then the configure
+script adds -I/usr/include/gdbm to the ccflags even though gdbm support is
+disabled. Prevent perl from doing this so we don't get cross compile badness
+errors while building perl.
+
+--- perl-5.8.8/Configure 2007/05/06 23:42:18 1.1
++++ perl-5.8.8/Configure 2007/05/06 23:42:48
+@@ -20033,8 +20033,8 @@
+ # ndbm.h header in /usr/include/gdbm/ndbm.h.
+ if $test -f /usr/include/gdbm/ndbm.h; then
+ echo '<gdbm/ndbm.h> found.'
+- ccflags="$ccflags -I/usr/include/gdbm"
+- cppflags="$cppflags -I/usr/include/gdbm"
++# ccflags="$ccflags -I/usr/include/gdbm"
++# cppflags="$cppflags -I/usr/include/gdbm"
+ t_ndbm=$define
+ fi
+ ;;
diff --git a/packages/perl/perl-5.8.8/native-nopacklist.patch b/packages/perl/perl-5.8.8/native-nopacklist.patch
new file mode 100644
index 0000000000..a0ba269e00
--- /dev/null
+++ b/packages/perl/perl-5.8.8/native-nopacklist.patch
@@ -0,0 +1,84 @@
+Part of 52_debian_extutils_hacks.patch just to exclude the installation of .packlist files
+
+diff -Naur --exclude=debian perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm perl-5.8.8/lib/ExtUtils/MM_Unix.pm
+--- perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm 2005-05-21 19:42:56.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/MM_Unix.pm 2006-02-05 17:40:19.000000000 +1100
+@@ -2054,9 +2054,7 @@
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+ pure_perl_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
++ $(NOECHO) $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+@@ -2081,9 +2079,7 @@
+ }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
+
+ pure_vendor_install ::
+- $(NOECHO) $(MOD_INSTALL) \
+- read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
+- write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
++ $(NOECHO) $(MOD_INSTALL) \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+@@ -2092,37 +2088,19 @@
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+ doc_perl_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLPRIVLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
+
+ doc_site_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
++ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
++ -$(NOECHO) $(MKPATH) $(DESTINSTALLSITEARCH)
++ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
++ >> }.$self->catfile('$(DESTINSTALLSITEARCH)','perllocal.pod').q{
+
+ doc_vendor_install ::
+- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+- -$(NOECHO) $(DOC_INSTALL) \
+- "Module" "$(NAME)" \
+- "installed into" "$(INSTALLVENDORLIB)" \
+- LINKTYPE "$(LINKTYPE)" \
+- VERSION "$(VERSION)" \
+- EXE_FILES "$(EXE_FILES)" \
+- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
+
+ };
+
+@@ -2131,13 +2109,12 @@
+ $(NOECHO) $(NOOP)
+
+ uninstall_from_perldirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_sitedirs ::
+ $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{
+
+ uninstall_from_vendordirs ::
+- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{
++
+ };
+
+ join("",@m);
diff --git a/packages/perl/perl-5.8.8/native-perlinc.patch b/packages/perl/perl-5.8.8/native-perlinc.patch
new file mode 100644
index 0000000000..aea38a0b56
--- /dev/null
+++ b/packages/perl/perl-5.8.8/native-perlinc.patch
@@ -0,0 +1,16 @@
+Index: perl-5.8.8/lib/ExtUtils/MM_Unix.pm
+===================================================================
+--- perl-5.8.8.orig/lib/ExtUtils/MM_Unix.pm 2007-05-30 15:16:47.000000000 +1000
++++ perl-5.8.8/lib/ExtUtils/MM_Unix.pm 2007-05-30 15:18:12.000000000 +1000
+@@ -1597,6 +1597,11 @@
+ $self->{PERL_LIB} ||= $Config{privlibexp};
+ $self->{PERL_ARCHLIB} ||= $Config{archlibexp};
+ $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now
++ # Check for environment override so we'll find the headers in the correct place
++ if (defined $ENV{PERL_INC})
++ {
++ $self->{PERL_INC} = $ENV{PERL_INC};
++ }
+ my $perl_h;
+
+ if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h"))
diff --git a/packages/perl/perl-5.8.8/native-ssp.patch b/packages/perl/perl-5.8.8/native-ssp.patch
new file mode 100644
index 0000000000..f815aad452
--- /dev/null
+++ b/packages/perl/perl-5.8.8/native-ssp.patch
@@ -0,0 +1,14 @@
+Fix for compiling with ssp enabled gcc:
+See http://bugs.openembedded.org/show_bug.cgi?id=1980
+
+diff -Naur perl-5.8.7.orig/cflags.SH perl-5.8.7/cflags.SH
+--- perl-5.8.7.orig/cflags.SH 2002-09-30 10:59:07.000000000 +0000
++++ perl-5.8.7/cflags.SH 2005-10-02 04:08:39.000000000 +0000
+@@ -165,6 +165,8 @@
+ esac
+
+ : Can we perhaps use $ansi2knr here
++ [[ $file == regcomp ]] && export ccflags="${ccflags} -fno-stack-protector"
++ [[ $file == regexec ]] && export ccflags="${ccflags} -fno-stack-protector"
+ echo "$cc -c -DPERL_CORE $ccflags $optimize $warn"
+ eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $warn"'
diff --git a/packages/perl/perl-5.8.8/perl-configpm-switch.patch b/packages/perl/perl-5.8.8/perl-configpm-switch.patch
new file mode 100644
index 0000000000..1aacd35189
--- /dev/null
+++ b/packages/perl/perl-5.8.8/perl-configpm-switch.patch
@@ -0,0 +1,34 @@
+This patch is used for perl-native only. It enables the switching of
+configuration files between Config_heavy.pl and
+Config_heavy-target.pl by setting the environment variables
+PERLCONFIGTARGET - the later containing settings for the target while
+the former contains those for the host. This will allow cpan.bbclass
+to use the settings appropriate for the native and/or target builds
+as required. This also disables the use of the cache since the cached
+values would be valid for the host only.
+
+--- perl-5.8.8/configpm 2007/04/30 03:10:43 1.1
++++ perl-5.8.8/configpm 2007/04/30 03:11:56
+@@ -374,7 +374,7 @@
+ my($self, $key) = @_;
+
+ # check for cached value (which may be undef so we use exists not defined)
+- return $self->{$key} if exists $self->{$key};
++ #return $self->{$key} if exists $self->{$key};
+
+ return $self->fetch_string($key);
+ }
+@@ -530,7 +530,12 @@
+ sub DESTROY { }
+
+ sub AUTOLOAD {
+- require 'Config_heavy.pl';
++ my $cfgfile = 'Config_heavy.pl';
++ if (defined $ENV{PERLCONFIGTARGET} and $ENV{PERLCONFIGTARGET} eq "yes")
++ {
++ $cfgfile = 'Config_heavy-target.pl';
++ }
++ require $cfgfile;
+ goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
+ die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
+ }
diff --git a/packages/perl/perl-5.8.8/perl-configure.sh b/packages/perl/perl-5.8.8/perl-configure.sh
new file mode 100755
index 0000000000..9800394b63
--- /dev/null
+++ b/packages/perl/perl-5.8.8/perl-configure.sh
@@ -0,0 +1,43 @@
+ls#! /bin/sh
+
+#
+# Generate the common perl configuration
+# Needs to be run on a host that matches the bitsize of the target platform
+#
+
+echo sh Configure -des \
+ -Doptimize=-O2 \
+ -Dmyhostname=localhost \
+ -Dperladmin=root@localhost \
+ -Dcc=gcc \
+ -Dcf_by='Open Embedded' \
+ -Dinstallprefix=@DESTDIR@ \
+ -Dprefix=/usr \
+ -Dvendorprefix=/usr \
+ -Dsiteprefix=/usr \
+ -Dotherlibdirs=/usr/lib/perl5/5.8.8 \
+ -Duseshrplib \
+ -Dusethreads \
+ -Duseithreads \
+ -Duselargefiles \
+ -Ud_dosuid \
+ -Dd_semctl_semun \
+ -Ui_db \
+ -Ui_ndbm \
+ -Ui_gdbm \
+ -Di_shadow \
+ -Di_syslog \
+ -Dman3ext=3pm \
+ -Duseperlio \
+ -Dinstallusrbinperl \
+ -Ubincompat5005 \
+ -Uversiononly \
+ -Dpager='/usr/bin/less -isr'
+
+cp -f config.sh config.sh.COMMON
+
+TARGETOS=$(grep myarchname config.sh.COMMON | sed "s#.*'\(.*\)'.*#\1#")
+
+sed -r -i config.sh.COMMON \
+ -e "s#(install.*=')(/usr)/local(.*')#\1@DESTDIR@\2\3#g" \
+ -e 's#'$TARGETOS'#@ARCH@#g'
diff --git a/packages/perl/perl-5.8.8/perl-dynloader.patch b/packages/perl/perl-5.8.8/perl-dynloader.patch
new file mode 100644
index 0000000000..e2dc774d5e
--- /dev/null
+++ b/packages/perl/perl-5.8.8/perl-dynloader.patch
@@ -0,0 +1,23 @@
+Allow the location that .so files are searched for for dynamic
+loading to be changed via an environment variable. This is to allow
+us to load .so's from the host system while building for the target
+system.
+
+--- perl-5.8.8/ext/DynaLoader/XSLoader_pm.PL 2007/04/20 09:03:08 1.1
++++ perl-5.8.8/ext/DynaLoader/XSLoader_pm.PL 2007/04/20 09:41:28
+@@ -65,6 +65,15 @@
+ print OUT <<'EOT';
+ my $modpname = join('/',@modparts);
+ my $modlibname = (caller())[1];
++ # OE: Allow env to form dynamic loader to look in a different place
++ # This is so it finds the host .so files, not the targets
++ if (defined $ENV{PERLHOSTLIB})
++ {
++ my $hostlib = $ENV{PERLHOSTLIB};
++ print STDERR "*** Module name IN: $modlibname\n";
++ $modlibname =~ s#(?<!/)(\.\./)*lib/#$hostlib#g;
++ print STDERR "*** Module name OUT: $modlibname\n";
++ }
+ my $c = @modparts;
+ $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
+ my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext";
diff --git a/packages/perl/perl-5.8.8/perl-moreconfig.patch b/packages/perl/perl-5.8.8/perl-moreconfig.patch
new file mode 100644
index 0000000000..590c72536b
--- /dev/null
+++ b/packages/perl/perl-5.8.8/perl-moreconfig.patch
@@ -0,0 +1,16 @@
+We need ld in the fake config library, but it's not included by default. So
+expand the number of items included. While this works it indicates that the
+rest of the config items are not being picked up and/or are being picked up
+from the host. More investigation needed.
+
+--- perl-5.8.8/configpm 2007/04/20 09:48:05 1.1
++++ perl-5.8.8/configpm 2007/04/20 09:57:12
+@@ -2,7 +2,7 @@
+ use strict;
+ use vars qw(%Config $Config_SH_expanded);
+
+-my $how_many_common = 22;
++my $how_many_common = 50;
+
+ # commonly used names to precache (and hence lookup fastest)
+ my %Common;
diff --git a/packages/perl/perl-native_5.8.7.bb b/packages/perl/perl-native_5.8.7.bb
index eeef2a2bc4..ebb10e5580 100644
--- a/packages/perl/perl-native_5.8.7.bb
+++ b/packages/perl/perl-native_5.8.7.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Perl is a popular scripting language."
HOMEPAGE = "http://www.perl.org/"
LICENSE = "Artistic|GPL"
-PR = "r3"
+PR = "r5"
SECTION = "libs"
inherit native
@@ -9,6 +9,7 @@ inherit native
DEPENDS = "virtual/db-native gdbm-native"
SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
+ file://perl-5.8.8-gcc-4.2.patch;patch=1 \
file://Configure-multilib.patch;patch=1"
S = "${WORKDIR}/perl-${PV}"
diff --git a/packages/perl/perl-native_5.8.8.bb b/packages/perl/perl-native_5.8.8.bb
new file mode 100644
index 0000000000..0e89f11050
--- /dev/null
+++ b/packages/perl/perl-native_5.8.8.bb
@@ -0,0 +1,70 @@
+DESCRIPTION = "Perl is a popular scripting language."
+HOMEPAGE = "http://www.perl.org/"
+SECTION = "libs"
+LICENSE = "Artistic|GPL"
+DEPENDS = "virtual/db-native gdbm-native"
+PR = "r13"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/perl-${PV}"
+
+SRC_URI = "http://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
+ file://perl-5.8.8-gcc-4.2.patch;patch=1 \
+ file://Configure-multilib.patch;patch=1 \
+ file://perl-configpm-switch.patch;patch=1 \
+ file://native-nopacklist.patch;patch=1 \
+ file://native-no-gdbminc.patch;patch=1 \
+ file://native-perlinc.patch;patch=1 \
+ file://makedepend-dash.patch;patch=1 \
+ file://asm-pageh-fix.patch;patch=1"
+
+S = "${WORKDIR}/perl-${PV}"
+
+inherit native
+
+do_configure () {
+ ./Configure \
+ -Dcc="${CC}" \
+ -Dcflags="${CFLAGS}" \
+ -Dldflags="${LDFLAGS}" \
+ -Dcf_by="Open Embedded" \
+ -Dprefix=${prefix} \
+ -Dvendorprefix=${prefix} \
+ -Dvendorprefix=${prefix} \
+ -Dsiteprefix=${prefix} \
+ \
+ -Dprivlib=${STAGING_LIBDIR}/perl/${PV} \
+ -Darchlib=${STAGING_LIBDIR}/perl/${PV} \
+ -Dvendorlib=${STAGING_LIBDIR}/perl/${PV} \
+ -Dvendorarch=${STAGING_LIBDIR}/perl/${PV} \
+ -Dsitelib=${STAGING_LIBDIR}/perl/${PV} \
+ -Dsitearch=${STAGING_LIBDIR}/perl/${PV} \
+ \
+ -Duseshrplib \
+ -Dusethreads \
+ -Duseithreads \
+ -Duselargefiles \
+ -Ud_dosuid \
+ -Ui_db \
+ -Ui_ndbm \
+ -Ui_gdbm \
+ -Di_shadow \
+ -Di_syslog \
+ -Duseperlio \
+ -Dman3ext=3pm \
+ -Uafs \
+ -Ud_csh \
+ -Uusesfio \
+ -Uusenm -des
+ sed 's!${STAGING_DIR}/bin!${STAGING_BINDIR}!;
+ s!${STAGING_DIR}/lib!${STAGING_LIBDIR}!' < config.sh > config.sh.new
+ mv config.sh.new config.sh
+}
+do_stage_append() {
+ # We need a hostperl link for building perl
+ ln -sf ${STAGING_BINDIR_NATIVE}/perl${PV} ${STAGING_BINDIR_NATIVE}/hostperl
+ # Store native config in non-versioned directory
+ install -d ${STAGING_DIR}/${HOST_SYS}/perl
+ install config.sh ${STAGING_DIR}/${HOST_SYS}/perl
+}
+
+PARALLEL_MAKE = ""
diff --git a/packages/perl/perl-rdepends_5.8.8.inc b/packages/perl/perl-rdepends_5.8.8.inc
new file mode 100644
index 0000000000..1ce5ad0375
--- /dev/null
+++ b/packages/perl/perl-rdepends_5.8.8.inc
@@ -0,0 +1,1145 @@
+# To create/update the perl-rdepends_${PV}.inc use this piece of ugly script (modified for your arch/paths etc):
+# daka@DaKa2:/home/slug/slugos/tmp/work/perl-5.8.7-r14/install$ egrep -r "use|require" * | grep ";$" | egrep ".pm:use |.pm:require " | grep -v v5.6.0 | grep -v 5.00 | grep -v \$module | sed -e "s, \+, ,g" | cut -f1,2 -d" " | sed -e "s,;, ,g" | sed -e "s,(), ,g" | sed -e "s,::,-,g" | sort | uniq | tr [:upper:] [:lower:] | sed -e "s,/[^ ]\+ , += \"perl-module-,g" | sed -e "s, \?$, \",g" | sed -e "s,_,-,g" | sed -e "s,^,RDEPENDS_,g" | sed -e "s,armeb-linux,\$\{TARGET_ARCH\}-\$\{TARGET_OS\},g" | egrep -v "perl-module-5|perl-module-tk|perl-module-mac-internetconfig|perl-module-ndbm-file|perl-module-html-treebuilder|perl-module-lwp-simple|perl-module-vms-filespec|perl-module-fcgi|perl-module-vms-stdio|perl-module-mac-buildtools" > /home/slug/openembedded/packages/perl/rdepends.tmp
+
+# Some additional dependencies that the above doesn't manage to figure out
+RDEPENDS_perl-module-math-bigint += "perl-module-math-bigint-calc "
+RDEPENDS_perl-module-math-bigint-calc += "perl-module-integer "
+
+# Depends list
+RDEPENDS_perl-misc += "perl-module-exporter "
+RDEPENDS_perl-misc += "perl-module-strict "
+RDEPENDS_perl-misc += "perl-module-warnings "
+RDEPENDS_perl-module-attribute-handlers-demo-demo += "perl-module-attribute-handlers "
+RDEPENDS_perl-module-attribute-handlers-demo-descriptions += "perl-module-attribute-handlers "
+RDEPENDS_perl-module-attribute-handlers-demo-myclass += "perl-module-base "
+RDEPENDS_perl-module-attribute-handlers += "perl-module-carp "
+RDEPENDS_perl-module-attribute-handlers += "perl-module-warnings "
+RDEPENDS_perl-module-attributes += "perl-module-strict "
+RDEPENDS_perl-module-attrs += "perl-module-xsloader "
+RDEPENDS_perl-module-autoloader += "perl-module-strict "
+RDEPENDS_perl-module-autosplit += "perl-module-carp "
+RDEPENDS_perl-module-autosplit += "perl-module-config "
+RDEPENDS_perl-module-autosplit += "perl-module-exporter "
+RDEPENDS_perl-module-autosplit += "perl-module-file-basename "
+RDEPENDS_perl-module-autosplit += "perl-module-file-path "
+RDEPENDS_perl-module-autosplit += "perl-module-file-spec-functions "
+RDEPENDS_perl-module-autosplit += "perl-module-strict "
+RDEPENDS_perl-module-base += "perl-module-strict "
+RDEPENDS_perl-module-base += "perl-module-vars "
+RDEPENDS_perl-module-b-asmdata += "perl-module-exporter "
+RDEPENDS_perl-module-b-assembler += "perl-module-b "
+RDEPENDS_perl-module-b-assembler += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-assembler += "perl-module-config "
+RDEPENDS_perl-module-b-assembler += "perl-module-exporter "
+RDEPENDS_perl-module-b-assembler += "perl-module-strict "
+RDEPENDS_perl-module-b-bblock += "perl-module-b-concise "
+RDEPENDS_perl-module-b-bblock += "perl-module-exporter "
+RDEPENDS_perl-module-b-bblock += "perl-module-strict "
+RDEPENDS_perl-module-b-bytecode += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-bytecode += "perl-module-b-assembler "
+RDEPENDS_perl-module-b-bytecode += "perl-module-config "
+RDEPENDS_perl-module-b-bytecode += "perl-module-strict "
+RDEPENDS_perl-module-b-cc += "perl-module-b-bblock "
+RDEPENDS_perl-module-b-cc += "perl-module-b-stackobj "
+RDEPENDS_perl-module-b-cc += "perl-module-config "
+RDEPENDS_perl-module-b-cc += "perl-module-strict "
+RDEPENDS_perl-module-b-c += "perl-module-b "
+RDEPENDS_perl-module-b-c += "perl-module-base "
+RDEPENDS_perl-module-b-c += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-c += "perl-module-carp "
+RDEPENDS_perl-module-b-c += "perl-module-config "
+RDEPENDS_perl-module-b-c += "perl-module-exporter "
+RDEPENDS_perl-module-b-c += "perl-module-filehandle "
+RDEPENDS_perl-module-b-c += "perl-module-strict "
+RDEPENDS_perl-module-b-debug += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-debug += "perl-module-strict "
+RDEPENDS_perl-module-b-deparse += "perl-module-bytes "
+RDEPENDS_perl-module-b-deparse += "perl-module-carp "
+RDEPENDS_perl-module-b-deparse += "perl-module-integer "
+RDEPENDS_perl-module-b-deparse += "perl-module-re "
+RDEPENDS_perl-module-b-deparse += "perl-module-strict "
+RDEPENDS_perl-module-b-deparse += "perl-module-utf8 "
+RDEPENDS_perl-module-b-deparse += "perl-module-warnings "
+RDEPENDS_perl-module-b-deparse += "perl-module-warnings "
+RDEPENDS_perl-module-b-deparse += "perl-module-vars "
+RDEPENDS_perl-module-b-disassembler += "perl-module-b "
+RDEPENDS_perl-module-b-disassembler += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-disassembler += "perl-module-carp "
+RDEPENDS_perl-module-b-disassembler += "perl-module-config "
+RDEPENDS_perl-module-b-disassembler += "perl-module-exporter "
+RDEPENDS_perl-module-b-disassembler += "perl-module-filehandle "
+RDEPENDS_perl-module-b-disassembler += "perl-module-strict "
+RDEPENDS_perl-module-benchmark += "perl-module-carp "
+RDEPENDS_perl-module-benchmark += "perl-module-exporter "
+RDEPENDS_perl-module-benchmark += "perl-module-strict "
+RDEPENDS_perl-module-bigint += "perl-module-exporter "
+RDEPENDS_perl-module-bigint += "perl-module-overload "
+RDEPENDS_perl-module-bigint += "perl-module-strict "
+RDEPENDS_perl-module-bignum += "perl-module-exporter "
+RDEPENDS_perl-module-bignum += "perl-module-strict "
+RDEPENDS_perl-module-bigrat += "perl-module-exporter "
+RDEPENDS_perl-module-bigrat += "perl-module-strict "
+RDEPENDS_perl-module-blib += "perl-module-cwd "
+RDEPENDS_perl-module-blib += "perl-module-file-spec "
+RDEPENDS_perl-module-blib += "perl-module-vars "
+RDEPENDS_perl-module-b-lint += "perl-module-strict "
+RDEPENDS_perl-module-b-showlex += "perl-module-b "
+RDEPENDS_perl-module-b-showlex += "perl-module-b-concise "
+RDEPENDS_perl-module-b-showlex += "perl-module-b-terse "
+RDEPENDS_perl-module-b-showlex += "perl-module-strict "
+RDEPENDS_perl-module-b-stackobj += "perl-module-b "
+RDEPENDS_perl-module-b-stackobj += "perl-module-carp "
+RDEPENDS_perl-module-b-stackobj += "perl-module-exporter "
+RDEPENDS_perl-module-b-stackobj += "perl-module-strict "
+RDEPENDS_perl-module-b-terse += "perl-module-b "
+RDEPENDS_perl-module-b-terse += "perl-module-b-asmdata "
+RDEPENDS_perl-module-b-terse += "perl-module-b-concise "
+RDEPENDS_perl-module-b-terse += "perl-module-carp "
+RDEPENDS_perl-module-b-terse += "perl-module-strict "
+RDEPENDS_perl-module-b += "perl-module-exporter "
+RDEPENDS_perl-module-b += "perl-module-strict "
+RDEPENDS_perl-module-b += "perl-module-xsloader "
+RDEPENDS_perl-module-b-xref += "perl-module-config "
+RDEPENDS_perl-module-b-xref += "perl-module-strict "
+RDEPENDS_perl-module-byteloader += "perl-module-xsloader "
+RDEPENDS_perl-module-carp-heavy += "perl-module-carp "
+RDEPENDS_perl-module-carp += "perl-module-exporter "
+RDEPENDS_perl-module-cgi-apache += "perl-module-cgi "
+RDEPENDS_perl-module-cgi-carp += "perl-module-exporter "
+RDEPENDS_perl-module-cgi-carp += "perl-module-file-spec "
+RDEPENDS_perl-module-cgi-cookie += "perl-module-cgi-util "
+RDEPENDS_perl-module-cgi-fast += "perl-module-cgi "
+RDEPENDS_perl-module-cgi-fast += "perl-module-vars "
+RDEPENDS_perl-module-cgi-pretty += "perl-module-cgi "
+RDEPENDS_perl-module-cgi-pretty += "perl-module-strict "
+RDEPENDS_perl-module-cgi-push += "perl-module-cgi "
+RDEPENDS_perl-module-cgi-push += "perl-module-cgi-util "
+RDEPENDS_perl-module-cgi-switch += "perl-module-cgi "
+RDEPENDS_perl-module-cgi += "perl-module-carp "
+RDEPENDS_perl-module-cgi += "perl-module-cgi-util "
+RDEPENDS_perl-module-cgi += "perl-module-constant "
+RDEPENDS_perl-module-cgi-util += "perl-module-exporter "
+RDEPENDS_perl-module-cgi-util += "perl-module-strict "
+RDEPENDS_perl-module-cgi-util += "perl-module-vars "
+RDEPENDS_perl-module-charnames += "perl-module-carp "
+RDEPENDS_perl-module-charnames += "perl-module-file-spec "
+RDEPENDS_perl-module-charnames += "perl-module-strict "
+RDEPENDS_perl-module-charnames += "perl-module-warnings "
+RDEPENDS_perl-module-class-isa += "perl-module-strict "
+RDEPENDS_perl-module-class-isa += "perl-module-vars "
+RDEPENDS_perl-module-class-struct += "perl-module-exporter "
+RDEPENDS_perl-module-class-struct += "perl-module-carp "
+RDEPENDS_perl-module-class-struct += "perl-module-strict "
+RDEPENDS_perl-module-class-struct += "perl-module-warnings-register "
+RDEPENDS_perl-module-config += "perl-module-strict "
+RDEPENDS_perl-module-constant += "perl-module-strict "
+RDEPENDS_perl-module-constant += "perl-module-warnings-register "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-basename "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-filehandle "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-path "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-file-spec "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-strict "
+RDEPENDS_perl-module-cpan-firsttime += "perl-module-vars "
+RDEPENDS_perl-module-cpan-nox += "perl-module-base "
+RDEPENDS_perl-module-cpan-nox += "perl-module-cpan "
+RDEPENDS_perl-module-cpan-nox += "perl-module-strict "
+RDEPENDS_perl-module-cpan-nox += "perl-module-vars "
+RDEPENDS_perl-module-cpan += "perl-module-carp "
+RDEPENDS_perl-module-cpan += "perl-module-config "
+RDEPENDS_perl-module-cpan += "perl-module-cwd "
+RDEPENDS_perl-module-cpan += "perl-module-dirhandle "
+RDEPENDS_perl-module-cpan += "perl-module-exporter "
+RDEPENDS_perl-module-cpan += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-cpan += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-cpan += "perl-module-file-basename "
+RDEPENDS_perl-module-cpan += "perl-module-file-copy "
+RDEPENDS_perl-module-cpan += "perl-module-file-find "
+RDEPENDS_perl-module-cpan += "perl-module-filehandle "
+RDEPENDS_perl-module-cpan += "perl-module-file-path "
+RDEPENDS_perl-module-cpan += "perl-module-file-spec "
+RDEPENDS_perl-module-cpan += "perl-module-overload "
+RDEPENDS_perl-module-cpan += "perl-module-safe "
+RDEPENDS_perl-module-cpan += "perl-module-strict "
+RDEPENDS_perl-module-cpan += "perl-module-sys-hostname "
+RDEPENDS_perl-module-cpan += "perl-module-text-parsewords "
+RDEPENDS_perl-module-cpan += "perl-module-text-wrap "
+RDEPENDS_perl-module-cpan += "perl-module-vars "
+RDEPENDS_perl-module-cwd += "perl-module-exporter "
+RDEPENDS_perl-module-cwd += "perl-module-strict "
+RDEPENDS_perl-module-cwd += "perl-module-vars "
+RDEPENDS_perl-module-data-dumper += "perl-module-exporter "
+RDEPENDS_perl-module-data-dumper += "perl-module-overload "
+RDEPENDS_perl-module-data-dumper += "perl-module-carp "
+RDEPENDS_perl-module-dbm-filter-compress += "perl-module-carp "
+RDEPENDS_perl-module-dbm-filter-compress += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter-compress += "perl-module-warnings "
+RDEPENDS_perl-module-dbm-filter-encode += "perl-module-carp "
+RDEPENDS_perl-module-dbm-filter-encode += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter-encode += "perl-module-warnings "
+RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter-int32 += "perl-module-warnings "
+RDEPENDS_perl-module-dbm-filter-null += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter-null += "perl-module-warnings "
+RDEPENDS_perl-module-dbm-filter += "perl-module-carp "
+RDEPENDS_perl-module-dbm-filter += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter += "perl-module-warnings "
+RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-carp "
+RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-strict "
+RDEPENDS_perl-module-dbm-filter-utf8 += "perl-module-warnings "
+RDEPENDS_perl-module-devel-dprof += "perl-module-xsloader "
+RDEPENDS_perl-module-devel-peek += "perl-module-exporter "
+RDEPENDS_perl-module-devel-peek += "perl-module-xsloader "
+RDEPENDS_perl-module-devel-ppport += "perl-module-dynaloader "
+RDEPENDS_perl-module-devel-ppport += "perl-module-strict "
+RDEPENDS_perl-module-devel-ppport += "perl-module-vars "
+RDEPENDS_perl-module-devel-selfstubber += "perl-module-selfloader "
+RDEPENDS_perl-module-devel-selfstubber += "perl-module-file-spec "
+RDEPENDS_perl-module-diagnostics += "perl-module-carp "
+RDEPENDS_perl-module-diagnostics += "perl-module-config "
+RDEPENDS_perl-module-diagnostics += "perl-module-strict "
+RDEPENDS_perl-module-digest-base += "perl-module-strict "
+RDEPENDS_perl-module-digest-base += "perl-module-vars "
+RDEPENDS_perl-module-digest-file += "perl-module-carp "
+RDEPENDS_perl-module-digest-file += "perl-module-digest "
+RDEPENDS_perl-module-digest-file += "perl-module-exporter "
+RDEPENDS_perl-module-digest-file += "perl-module-strict "
+RDEPENDS_perl-module-digest-file += "perl-module-vars "
+RDEPENDS_perl-module-digest-md5 += "perl-module-dynaloader "
+RDEPENDS_perl-module-digest-md5 += "perl-module-exporter "
+RDEPENDS_perl-module-digest-md5 += "perl-module-strict "
+RDEPENDS_perl-module-digest-md5 += "perl-module-vars "
+RDEPENDS_perl-module-digest += "perl-module-strict "
+RDEPENDS_perl-module-digest += "perl-module-vars "
+RDEPENDS_perl-module-dirhandle += "perl-module-carp "
+RDEPENDS_perl-module-dirhandle += "perl-module-symbol "
+RDEPENDS_perl-module-dumpvalue += "perl-module-strict "
+RDEPENDS_perl-module-dynaloader += "perl-module-autoloader "
+RDEPENDS_perl-module-dynaloader += "perl-module-config "
+RDEPENDS_perl-module-dynaloader += "perl-module-vars "
+RDEPENDS_perl-module-encode-alias += "perl-module-base "
+RDEPENDS_perl-module-encode-alias += "perl-module-encode "
+RDEPENDS_perl-module-encode-alias += "perl-module-strict "
+RDEPENDS_perl-module-encode-byte += "perl-module-encode "
+RDEPENDS_perl-module-encode-byte += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-cjkconstants += "perl-module-exporter "
+RDEPENDS_perl-module-encode-cjkconstants += "perl-module-carp "
+RDEPENDS_perl-module-encode-cjkconstants += "perl-module-strict "
+RDEPENDS_perl-module-encode-cn-hz += "perl-module-base "
+RDEPENDS_perl-module-encode-cn-hz += "perl-module-encode "
+RDEPENDS_perl-module-encode-cn-hz += "perl-module-strict "
+RDEPENDS_perl-module-encode-cn-hz += "perl-module-vars "
+RDEPENDS_perl-module-encode-cn += "perl-module-encode "
+RDEPENDS_perl-module-encode-cn += "perl-module-encode-cn-hz "
+RDEPENDS_perl-module-encode-cn += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-config += "perl-module-strict "
+RDEPENDS_perl-module-encode-ebcdic += "perl-module-encode "
+RDEPENDS_perl-module-encode-ebcdic += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-encoder += "perl-module-exporter "
+RDEPENDS_perl-module-encode-encoder += "perl-module-carp "
+RDEPENDS_perl-module-encode-encoder += "perl-module-encode "
+RDEPENDS_perl-module-encode-encoder += "perl-module-strict "
+RDEPENDS_perl-module-encode-encoder += "perl-module-warnings "
+RDEPENDS_perl-module-encode-encoding += "perl-module-encode "
+RDEPENDS_perl-module-encode-encoding += "perl-module-strict "
+RDEPENDS_perl-module-encode-guess += "perl-module-base "
+RDEPENDS_perl-module-encode-guess += "perl-module-encode "
+RDEPENDS_perl-module-encode-guess += "perl-module-strict "
+RDEPENDS_perl-module-encode-jp-h2z += "perl-module-encode-cjkconstants "
+RDEPENDS_perl-module-encode-jp-h2z += "perl-module-strict "
+RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-base "
+RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode "
+RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-encode-cjkconstants "
+RDEPENDS_perl-module-encode-jp-jis7 += "perl-module-strict "
+RDEPENDS_perl-module-encode-jp += "perl-module-encode "
+RDEPENDS_perl-module-encode-jp += "perl-module-encode-jp-jis7 "
+RDEPENDS_perl-module-encode-jp += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-base "
+RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode "
+RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-encode-cjkconstants "
+RDEPENDS_perl-module-encode-kr-2022-kr += "perl-module-strict "
+RDEPENDS_perl-module-encode-kr += "perl-module-encode "
+RDEPENDS_perl-module-encode-kr += "perl-module-encode-kr-2022-kr "
+RDEPENDS_perl-module-encode-kr += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-base "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-carp "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-constant "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-encode "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-mime-base64 "
+RDEPENDS_perl-module-encode-mime-header += "perl-module-strict "
+RDEPENDS_perl-module-encode-symbol += "perl-module-encode "
+RDEPENDS_perl-module-encode-symbol += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-tw += "perl-module-encode "
+RDEPENDS_perl-module-encode-tw += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-unicode += "perl-module-encode "
+RDEPENDS_perl-module-encode-unicode += "perl-module-base "
+RDEPENDS_perl-module-encode-unicode += "perl-module-strict "
+RDEPENDS_perl-module-encode-unicode += "perl-module-warnings "
+RDEPENDS_perl-module-encode-unicode += "perl-module-xsloader "
+RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-base "
+RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-encode "
+RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-mime-base64 "
+RDEPENDS_perl-module-encode-unicode-utf7 += "perl-module-strict "
+RDEPENDS_perl-module-encode += "perl-module-encode-config "
+RDEPENDS_perl-module-encode += "perl-module-exporter "
+RDEPENDS_perl-module-encode += "perl-module-base "
+RDEPENDS_perl-module-encode += "perl-module-encode-alias "
+RDEPENDS_perl-module-encode += "perl-module-strict "
+RDEPENDS_perl-module-encode += "perl-module-xsloader "
+RDEPENDS_perl-module-encoding += "perl-module-encode "
+RDEPENDS_perl-module-encoding += "perl-module-strict "
+RDEPENDS_perl-module-english += "perl-module-exporter "
+RDEPENDS_perl-module-env += "perl-module-config "
+RDEPENDS_perl-module-env += "perl-module-tie-array "
+RDEPENDS_perl-module-errno += "perl-module-config "
+RDEPENDS_perl-module-errno += "perl-module-exporter "
+RDEPENDS_perl-module-errno += "perl-module-strict "
+RDEPENDS_perl-module-exporter-heavy += "perl-module-exporter "
+RDEPENDS_perl-module-exporter-heavy += "perl-module-strict "
+RDEPENDS_perl-module-extutils-command-mm += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-command-mm += "perl-module-strict "
+RDEPENDS_perl-module-extutils-command-mm += "perl-module-vars "
+RDEPENDS_perl-module-extutils-command += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-command += "perl-module-carp "
+RDEPENDS_perl-module-extutils-command += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-command += "perl-module-file-compare "
+RDEPENDS_perl-module-extutils-command += "perl-module-file-copy "
+RDEPENDS_perl-module-extutils-command += "perl-module-file-path "
+RDEPENDS_perl-module-extutils-command += "perl-module-strict "
+RDEPENDS_perl-module-extutils-command += "perl-module-vars "
+RDEPENDS_perl-module-extutils-constant-base += "perl-module-carp "
+RDEPENDS_perl-module-extutils-constant-base += "perl-module-extutils-constant-utils "
+RDEPENDS_perl-module-extutils-constant-base += "perl-module-strict "
+RDEPENDS_perl-module-extutils-constant-base += "perl-module-text-wrap "
+RDEPENDS_perl-module-extutils-constant-base += "perl-module-vars "
+RDEPENDS_perl-module-extutils-constant += "perl-module-carp "
+RDEPENDS_perl-module-extutils-constant += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-utils "
+RDEPENDS_perl-module-extutils-constant += "perl-module-extutils-constant-xs "
+RDEPENDS_perl-module-extutils-constant += "perl-module-strict "
+RDEPENDS_perl-module-extutils-constant += "perl-module-vars "
+RDEPENDS_perl-module-extutils-constant-utils += "perl-module-carp "
+RDEPENDS_perl-module-extutils-constant-utils += "perl-module-strict "
+RDEPENDS_perl-module-extutils-constant-utils += "perl-module-vars "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-base "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-carp "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-extutils-constant-utils "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-strict "
+RDEPENDS_perl-module-extutils-constant-xs += "perl-module-vars "
+RDEPENDS_perl-module-extutils-embed += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-embed += "perl-module-filehandle "
+RDEPENDS_perl-module-extutils-embed += "perl-module-config "
+RDEPENDS_perl-module-extutils-embed += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-embed += "perl-module-getopt-std "
+RDEPENDS_perl-module-extutils-embed += "perl-module-strict "
+RDEPENDS_perl-module-extutils-installed += "perl-module-carp "
+RDEPENDS_perl-module-extutils-installed += "perl-module-config "
+RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-installed += "perl-module-extutils-packlist "
+RDEPENDS_perl-module-extutils-installed += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-installed += "perl-module-file-find "
+RDEPENDS_perl-module-extutils-installed += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-installed += "perl-module-strict "
+RDEPENDS_perl-module-extutils-installed += "perl-module-vars "
+RDEPENDS_perl-module-extutils-install += "perl-module-carp "
+RDEPENDS_perl-module-extutils-install += "perl-module-config "
+RDEPENDS_perl-module-extutils-install += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-install += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-install += "perl-module-vars "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-config "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-cwd "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-strict "
+RDEPENDS_perl-module-extutils-liblist-kid += "perl-module-vars "
+RDEPENDS_perl-module-extutils-liblist += "perl-module-extutils-liblist-kid "
+RDEPENDS_perl-module-extutils-liblist += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-liblist += "perl-module-vars "
+RDEPENDS_perl-module-extutils-makemaker-bytes += "perl-module-vars "
+RDEPENDS_perl-module-extutils-makemaker += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-makemaker += "perl-module-carp "
+RDEPENDS_perl-module-extutils-makemaker += "perl-module-config "
+RDEPENDS_perl-module-extutils-makemaker += "perl-module-file-path "
+RDEPENDS_perl-module-extutils-makemaker += "perl-module-strict "
+RDEPENDS_perl-module-extutils-makemaker-vmsish += "perl-module-vmsish "
+RDEPENDS_perl-module-extutils-makemaker-vmsish += "perl-module-vars "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-carp "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-config "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-file-copy "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-file-find "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-manifest += "perl-module-strict "
+RDEPENDS_perl-module-extutils-miniperl += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-config "
+RDEPENDS_perl-module-extutils-mkbootstrap += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mksymlists += "perl-module-carp "
+RDEPENDS_perl-module-extutils-mksymlists += "perl-module-config "
+RDEPENDS_perl-module-extutils-mksymlists += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mksymlists += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mksymlists += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-any += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-any += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-mm-any += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-any += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-beos += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-beos += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-beos += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-mm-beos += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-cygwin += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-dos += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-dos += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-dos += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-cwd "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-mm-macos += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-mm-win32 "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-nw5 += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-os2 += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-carp "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-dirhandle "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-mm-unix += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-liblist "
+RDEPENDS_perl-module-extutils-mm += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-uwin += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-win32 += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-extutils-mm-win32 "
+RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-win95 += "perl-module-vars "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-exporter "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-any "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-mm-unix "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-config "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-extutils-makemaker "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-file-basename "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-strict "
+RDEPENDS_perl-module-extutils-mm-vms += "perl-module-vars "
+RDEPENDS_perl-module-extutils-my += "perl-module-extutils-mm "
+RDEPENDS_perl-module-extutils-my += "perl-module-strict "
+RDEPENDS_perl-module-extutils-my += "perl-module-vars "
+RDEPENDS_perl-module-extutils-packlist += "perl-module-carp "
+RDEPENDS_perl-module-extutils-packlist += "perl-module-strict "
+RDEPENDS_perl-module-extutils-packlist += "perl-module-vars "
+RDEPENDS_perl-module-extutils-testlib += "perl-module-cwd "
+RDEPENDS_perl-module-extutils-testlib += "perl-module-file-spec "
+RDEPENDS_perl-module-extutils-testlib += "perl-module-lib "
+RDEPENDS_perl-module-fatal += "perl-module-carp "
+RDEPENDS_perl-module-fatal += "perl-module-strict "
+RDEPENDS_perl-module-fcntl += "perl-module-exporter "
+RDEPENDS_perl-module-fcntl += "perl-module-xsloader "
+RDEPENDS_perl-module-fields += "perl-module-strict "
+RDEPENDS_perl-module-fields += "perl-module-vars "
+RDEPENDS_perl-module-file-basename += "perl-module-exporter "
+RDEPENDS_perl-module-file-basename += "perl-module-warnings "
+RDEPENDS_perl-module-filecache += "perl-module-base "
+RDEPENDS_perl-module-filecache += "perl-module-carp "
+RDEPENDS_perl-module-filecache += "perl-module-config "
+RDEPENDS_perl-module-filecache += "perl-module-strict "
+RDEPENDS_perl-module-filecache += "perl-module-vars "
+RDEPENDS_perl-module-file-checktree += "perl-module-cwd "
+RDEPENDS_perl-module-file-checktree += "perl-module-exporter "
+RDEPENDS_perl-module-file-checktree += "perl-module-file-spec "
+RDEPENDS_perl-module-file-checktree += "perl-module-strict "
+RDEPENDS_perl-module-file-checktree += "perl-module-warnings "
+RDEPENDS_perl-module-file-compare += "perl-module-exporter "
+RDEPENDS_perl-module-file-compare += "perl-module-carp "
+RDEPENDS_perl-module-file-compare += "perl-module-strict "
+RDEPENDS_perl-module-file-compare += "perl-module-warnings "
+RDEPENDS_perl-module-file-copy += "perl-module-exporter "
+RDEPENDS_perl-module-file-copy += "perl-module-carp "
+RDEPENDS_perl-module-file-copy += "perl-module-config "
+RDEPENDS_perl-module-file-copy += "perl-module-file-spec "
+RDEPENDS_perl-module-file-copy += "perl-module-strict "
+RDEPENDS_perl-module-file-copy += "perl-module-warnings "
+RDEPENDS_perl-module-file-dosglob += "perl-module-strict "
+RDEPENDS_perl-module-file-dosglob += "perl-module-warnings "
+RDEPENDS_perl-module-file-find += "perl-module-cwd "
+RDEPENDS_perl-module-file-find += "perl-module-exporter "
+RDEPENDS_perl-module-file-find += "perl-module-file-basename "
+RDEPENDS_perl-module-file-find += "perl-module-file-spec "
+RDEPENDS_perl-module-file-find += "perl-module-strict "
+RDEPENDS_perl-module-file-find += "perl-module-warnings "
+RDEPENDS_perl-module-file-find += "perl-module-warnings-register "
+RDEPENDS_perl-module-file-glob += "perl-module-strict "
+RDEPENDS_perl-module-file-glob += "perl-module-xsloader "
+RDEPENDS_perl-module-filehandle += "perl-module-io-file "
+RDEPENDS_perl-module-filehandle += "perl-module-strict "
+RDEPENDS_perl-module-file-path += "perl-module-carp "
+RDEPENDS_perl-module-file-path += "perl-module-exporter "
+RDEPENDS_perl-module-file-path += "perl-module-file-basename "
+RDEPENDS_perl-module-file-path += "perl-module-strict "
+RDEPENDS_perl-module-file-path += "perl-module-warnings "
+RDEPENDS_perl-module-file-spec-cygwin += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-cygwin += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-cygwin += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-epoc += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-epoc += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-epoc += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-functions += "perl-module-exporter "
+RDEPENDS_perl-module-file-spec-functions += "perl-module-file-spec "
+RDEPENDS_perl-module-file-spec-functions += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-functions += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-mac += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-mac += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-mac += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-os2 += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-os2 += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-os2 += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-unix += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-unix += "perl-module-vars "
+RDEPENDS_perl-module-file-spec += "perl-module-strict "
+RDEPENDS_perl-module-file-spec += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-win32 += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-win32 += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-win32 += "perl-module-vars "
+RDEPENDS_perl-module-file-spec-vms += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-file-spec-vms += "perl-module-file-basename "
+RDEPENDS_perl-module-file-spec-vms += "perl-module-strict "
+RDEPENDS_perl-module-file-spec-vms += "perl-module-vars "
+RDEPENDS_perl-module-file-stat += "perl-module-class-struct "
+RDEPENDS_perl-module-file-stat += "perl-module-strict "
+RDEPENDS_perl-module-file-stat += "perl-module-warnings "
+RDEPENDS_perl-module-file-stat += "perl-module-vars "
+RDEPENDS_perl-module-file-temp += "perl-module-base "
+RDEPENDS_perl-module-file-temp += "perl-module-carp "
+RDEPENDS_perl-module-file-temp += "perl-module-constant "
+RDEPENDS_perl-module-file-temp += "perl-module-errno "
+RDEPENDS_perl-module-file-temp += "perl-module-fcntl "
+RDEPENDS_perl-module-file-temp += "perl-module-file-path "
+RDEPENDS_perl-module-file-temp += "perl-module-file-spec "
+RDEPENDS_perl-module-file-temp += "perl-module-overload "
+RDEPENDS_perl-module-file-temp += "perl-module-strict "
+RDEPENDS_perl-module-file-temp += "perl-module-vars "
+RDEPENDS_perl-module-filter-simple += "perl-module-carp "
+RDEPENDS_perl-module-filter-simple += "perl-module-filter-util-call "
+RDEPENDS_perl-module-filter-simple += "perl-module-text-balanced "
+RDEPENDS_perl-module-filter-simple += "perl-module-vars "
+RDEPENDS_perl-module-filter-util-call += "perl-module-dynaloader "
+RDEPENDS_perl-module-filter-util-call += "perl-module-exporter "
+RDEPENDS_perl-module-filter-util-call += "perl-module-carp "
+RDEPENDS_perl-module-filter-util-call += "perl-module-strict "
+RDEPENDS_perl-module-filter-util-call += "perl-module-warnings "
+RDEPENDS_perl-module-filter-util-call += "perl-module-vars "
+RDEPENDS_perl-module-findbin += "perl-module-exporter "
+RDEPENDS_perl-module-findbin += "perl-module-carp "
+RDEPENDS_perl-module-findbin += "perl-module-config "
+RDEPENDS_perl-module-findbin += "perl-module-cwd "
+RDEPENDS_perl-module-findbin += "perl-module-file-basename "
+RDEPENDS_perl-module-findbin += "perl-module-file-spec "
+RDEPENDS_perl-module-getopt-long += "perl-module-constant "
+RDEPENDS_perl-module-getopt-long += "perl-module-exporter "
+RDEPENDS_perl-module-getopt-long += "perl-module-strict "
+RDEPENDS_perl-module-getopt-long += "perl-module-vars "
+RDEPENDS_perl-module-getopt-std += "perl-module-exporter "
+RDEPENDS_perl-module-hash-util += "perl-module-exporter "
+RDEPENDS_perl-module-hash-util += "perl-module-carp "
+RDEPENDS_perl-module-hash-util += "perl-module-strict "
+RDEPENDS_perl-module-i18n-collate += "perl-module-exporter "
+RDEPENDS_perl-module-i18n-collate += "perl-module-posix "
+RDEPENDS_perl-module-i18n-collate += "perl-module-strict "
+RDEPENDS_perl-module-i18n-collate += "perl-module-warnings-register "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-dynaloader "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-exporter "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-autoloader "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-carp "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-strict "
+RDEPENDS_perl-module-i18n-langinfo += "perl-module-warnings "
+RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-i18n-langtags "
+RDEPENDS_perl-module-i18n-langtags-detect += "perl-module-strict "
+RDEPENDS_perl-module-i18n-langtags-list += "perl-module-strict "
+RDEPENDS_perl-module-i18n-langtags-list += "perl-module-vars "
+RDEPENDS_perl-module-i18n-langtags += "perl-module-exporter "
+RDEPENDS_perl-module-i18n-langtags += "perl-module-strict "
+RDEPENDS_perl-module-i18n-langtags += "perl-module-vars "
+RDEPENDS_perl-module-io-dir += "perl-module-carp "
+RDEPENDS_perl-module-io-dir += "perl-module-exporter "
+RDEPENDS_perl-module-io-dir += "perl-module-file-spec "
+RDEPENDS_perl-module-io-dir += "perl-module-file-stat "
+RDEPENDS_perl-module-io-dir += "perl-module-io-file "
+RDEPENDS_perl-module-io-dir += "perl-module-strict "
+RDEPENDS_perl-module-io-dir += "perl-module-symbol "
+RDEPENDS_perl-module-io-dir += "perl-module-tie-hash "
+RDEPENDS_perl-module-io-file += "perl-module-exporter "
+RDEPENDS_perl-module-io-file += "perl-module-carp "
+RDEPENDS_perl-module-io-file += "perl-module-file-spec "
+RDEPENDS_perl-module-io-file += "perl-module-io-seekable "
+RDEPENDS_perl-module-io-file += "perl-module-selectsaver "
+RDEPENDS_perl-module-io-file += "perl-module-strict "
+RDEPENDS_perl-module-io-file += "perl-module-symbol "
+RDEPENDS_perl-module-io-handle += "perl-module-exporter "
+RDEPENDS_perl-module-io-handle += "perl-module-carp "
+RDEPENDS_perl-module-io-handle += "perl-module-selectsaver "
+RDEPENDS_perl-module-io-handle += "perl-module-strict "
+RDEPENDS_perl-module-io-handle += "perl-module-symbol "
+RDEPENDS_perl-module-io-pipe += "perl-module-carp "
+RDEPENDS_perl-module-io-pipe += "perl-module-io-handle "
+RDEPENDS_perl-module-io-pipe += "perl-module-strict "
+RDEPENDS_perl-module-io-pipe += "perl-module-symbol "
+RDEPENDS_perl-module-io-poll += "perl-module-exporter "
+RDEPENDS_perl-module-io-poll += "perl-module-io-handle "
+RDEPENDS_perl-module-io-poll += "perl-module-strict "
+RDEPENDS_perl-module-io-seekable += "perl-module-exporter "
+RDEPENDS_perl-module-io-seekable += "perl-module-carp "
+RDEPENDS_perl-module-io-seekable += "perl-module-fcntl "
+RDEPENDS_perl-module-io-seekable += "perl-module-io-handle "
+RDEPENDS_perl-module-io-seekable += "perl-module-strict "
+RDEPENDS_perl-module-io-select += "perl-module-exporter "
+RDEPENDS_perl-module-io-select += "perl-module-strict "
+RDEPENDS_perl-module-io-select += "perl-module-warnings-register "
+RDEPENDS_perl-module-io-select += "perl-module-vars "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-carp "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-errno "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-exporter "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-io-socket "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-socket "
+RDEPENDS_perl-module-io-socket-inet += "perl-module-strict "
+RDEPENDS_perl-module-io-socket-unix += "perl-module-carp "
+RDEPENDS_perl-module-io-socket-unix += "perl-module-io-socket "
+RDEPENDS_perl-module-io-socket-unix += "perl-module-socket "
+RDEPENDS_perl-module-io-socket-unix += "perl-module-strict "
+RDEPENDS_perl-module-io-socket += "perl-module-io-socket-inet "
+RDEPENDS_perl-module-io-socket += "perl-module-io-socket-unix "
+RDEPENDS_perl-module-io-socket += "perl-module-carp "
+RDEPENDS_perl-module-io-socket += "perl-module-errno "
+RDEPENDS_perl-module-io-socket += "perl-module-exporter "
+RDEPENDS_perl-module-io-socket += "perl-module-io-handle "
+RDEPENDS_perl-module-io-socket += "perl-module-socket "
+RDEPENDS_perl-module-io-socket += "perl-module-strict "
+RDEPENDS_perl-module-io += "perl-module-carp "
+RDEPENDS_perl-module-io += "perl-module-strict "
+RDEPENDS_perl-module-io += "perl-module-warnings "
+RDEPENDS_perl-module-io += "perl-module-xsloader "
+RDEPENDS_perl-module-ipc-msg += "perl-module-carp "
+RDEPENDS_perl-module-ipc-msg += "perl-module-ipc-sysv "
+RDEPENDS_perl-module-ipc-msg += "perl-module-strict "
+RDEPENDS_perl-module-ipc-msg += "perl-module-vars "
+RDEPENDS_perl-module-ipc-open2 += "perl-module-exporter "
+RDEPENDS_perl-module-ipc-open2 += "perl-module-ipc-open3 "
+RDEPENDS_perl-module-ipc-open2 += "perl-module-strict "
+RDEPENDS_perl-module-ipc-open3 += "perl-module-exporter "
+RDEPENDS_perl-module-ipc-open3 += "perl-module-carp "
+RDEPENDS_perl-module-ipc-open3 += "perl-module-strict "
+RDEPENDS_perl-module-ipc-open3 += "perl-module-symbol "
+RDEPENDS_perl-module-ipc-semaphore += "perl-module-carp "
+RDEPENDS_perl-module-ipc-semaphore += "perl-module-strict "
+RDEPENDS_perl-module-ipc-semaphore += "perl-module-vars "
+RDEPENDS_perl-module-ipc-sysv += "perl-module-exporter "
+RDEPENDS_perl-module-ipc-sysv += "perl-module-carp "
+RDEPENDS_perl-module-ipc-sysv += "perl-module-config "
+RDEPENDS_perl-module-ipc-sysv += "perl-module-strict "
+RDEPENDS_perl-module-ipc-sysv += "perl-module-vars "
+RDEPENDS_perl-module-lib += "perl-module-config "
+RDEPENDS_perl-module-lib += "perl-module-strict "
+RDEPENDS_perl-module-list-util += "perl-module-exporter "
+RDEPENDS_perl-module-list-util += "perl-module-vars "
+RDEPENDS_perl-module-locale-constants += "perl-module-exporter "
+RDEPENDS_perl-module-locale-constants += "perl-module-constant "
+RDEPENDS_perl-module-locale-constants += "perl-module-strict "
+RDEPENDS_perl-module-locale-constants += "perl-module-vars "
+RDEPENDS_perl-module-locale-country += "perl-module-exporter "
+RDEPENDS_perl-module-locale-country += "perl-module-carp "
+RDEPENDS_perl-module-locale-country += "perl-module-locale-constants "
+RDEPENDS_perl-module-locale-country += "perl-module-strict "
+RDEPENDS_perl-module-locale-country += "perl-module-vars "
+RDEPENDS_perl-module-locale-currency += "perl-module-exporter "
+RDEPENDS_perl-module-locale-currency += "perl-module-strict "
+RDEPENDS_perl-module-locale-currency += "perl-module-vars "
+RDEPENDS_perl-module-locale-language += "perl-module-exporter "
+RDEPENDS_perl-module-locale-language += "perl-module-strict "
+RDEPENDS_perl-module-locale-language += "perl-module-vars "
+RDEPENDS_perl-module-locale-maketext-gutsloader += "perl-module-strict "
+RDEPENDS_perl-module-locale-maketext-guts += "perl-module-strict "
+RDEPENDS_perl-module-locale-maketext-guts += "perl-module-utf8 "
+RDEPENDS_perl-module-locale-maketext-guts += "perl-module-vars "
+RDEPENDS_perl-module-locale-maketext += "perl-module-carp "
+RDEPENDS_perl-module-locale-maketext += "perl-module-i18n-langtags "
+RDEPENDS_perl-module-locale-maketext += "perl-module-locale-maketext-gutsloader "
+RDEPENDS_perl-module-locale-maketext += "perl-module-strict "
+RDEPENDS_perl-module-locale-script += "perl-module-exporter "
+RDEPENDS_perl-module-locale-script += "perl-module-carp "
+RDEPENDS_perl-module-locale-script += "perl-module-locale-constants "
+RDEPENDS_perl-module-locale-script += "perl-module-strict "
+RDEPENDS_perl-module-locale-script += "perl-module-vars "
+RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-exporter "
+RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-math-bigfloat "
+RDEPENDS_perl-module-math-bigfloat-trace += "perl-module-strict "
+RDEPENDS_perl-module-math-bigfloat += "perl-module-exporter "
+RDEPENDS_perl-module-math-bigfloat += "perl-module-strict "
+RDEPENDS_perl-module-math-bigint-calcemu += "perl-module-strict "
+RDEPENDS_perl-module-math-bigint-calcemu += "perl-module-vars "
+RDEPENDS_perl-module-math-bigint-calc += "perl-module-strict "
+RDEPENDS_perl-module-math-bigint-calc += "perl-module-vars "
+RDEPENDS_perl-module-math-bigint-trace += "perl-module-exporter "
+RDEPENDS_perl-module-math-bigint-trace += "perl-module-math-bigint "
+RDEPENDS_perl-module-math-bigint-trace += "perl-module-strict "
+RDEPENDS_perl-module-math-bigint += "perl-module-strict "
+RDEPENDS_perl-module-math-bigrat += "perl-module-math-bigfloat "
+RDEPENDS_perl-module-math-bigrat += "perl-module-strict "
+RDEPENDS_perl-module-math-complex += "perl-module-exporter "
+RDEPENDS_perl-module-math-complex += "perl-module-strict "
+RDEPENDS_perl-module-math-trig += "perl-module-exporter "
+RDEPENDS_perl-module-math-trig += "perl-module-math-complex "
+RDEPENDS_perl-module-math-trig += "perl-module-strict "
+RDEPENDS_perl-module-memoize-anydbm-file += "perl-module-vars "
+RDEPENDS_perl-module-memoize-expirefile += "perl-module-carp "
+RDEPENDS_perl-module-memoize-expire += "perl-module-carp "
+RDEPENDS_perl-module-memoize-sdbm-file += "perl-module-sdbm-file "
+RDEPENDS_perl-module-memoize-storable += "perl-module-storable "
+RDEPENDS_perl-module-memoize += "perl-module-carp "
+RDEPENDS_perl-module-memoize += "perl-module-exporter "
+RDEPENDS_perl-module-memoize += "perl-module-strict "
+RDEPENDS_perl-module-memoize += "perl-module-vars "
+RDEPENDS_perl-module-mime-base64 += "perl-module-dynaloader "
+RDEPENDS_perl-module-mime-base64 += "perl-module-exporter "
+RDEPENDS_perl-module-mime-base64 += "perl-module-strict "
+RDEPENDS_perl-module-mime-base64 += "perl-module-vars "
+RDEPENDS_perl-module-mime-quotedprint += "perl-module-exporter "
+RDEPENDS_perl-module-mime-quotedprint += "perl-module-strict "
+RDEPENDS_perl-module-mime-quotedprint += "perl-module-vars "
+RDEPENDS_perl-module-net-cmd += "perl-module-exporter "
+RDEPENDS_perl-module-net-cmd += "perl-module-carp "
+RDEPENDS_perl-module-net-cmd += "perl-module-strict "
+RDEPENDS_perl-module-net-cmd += "perl-module-symbol "
+RDEPENDS_perl-module-net-cmd += "perl-module-vars "
+RDEPENDS_perl-module-net-config += "perl-module-exporter "
+RDEPENDS_perl-module-net-config += "perl-module-socket "
+RDEPENDS_perl-module-net-config += "perl-module-strict "
+RDEPENDS_perl-module-net-config += "perl-module-vars "
+RDEPENDS_perl-module-net-domain += "perl-module-exporter "
+RDEPENDS_perl-module-net-domain += "perl-module-carp "
+RDEPENDS_perl-module-net-domain += "perl-module-net-config "
+RDEPENDS_perl-module-net-domain += "perl-module-strict "
+RDEPENDS_perl-module-net-domain += "perl-module-vars "
+RDEPENDS_perl-module-net-ftp-a += "perl-module-net-ftp-dataconn "
+RDEPENDS_perl-module-net-ftp-a += "perl-module-carp "
+RDEPENDS_perl-module-net-ftp-a += "perl-module-strict "
+RDEPENDS_perl-module-net-ftp-a += "perl-module-vars "
+RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-carp "
+RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-errno "
+RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-net-cmd "
+RDEPENDS_perl-module-net-ftp-dataconn += "perl-module-vars "
+RDEPENDS_perl-module-net-ftp-e += "perl-module-net-ftp-i "
+RDEPENDS_perl-module-net-ftp-i += "perl-module-net-ftp-dataconn "
+RDEPENDS_perl-module-net-ftp-i += "perl-module-carp "
+RDEPENDS_perl-module-net-ftp-i += "perl-module-vars "
+RDEPENDS_perl-module-net-ftp-l += "perl-module-net-ftp-i "
+RDEPENDS_perl-module-net-ftp += "perl-module-carp "
+RDEPENDS_perl-module-net-ftp += "perl-module-fcntl "
+RDEPENDS_perl-module-net-ftp += "perl-module-io-socket "
+RDEPENDS_perl-module-net-ftp += "perl-module-net-cmd "
+RDEPENDS_perl-module-net-ftp += "perl-module-net-config "
+RDEPENDS_perl-module-net-ftp += "perl-module-socket "
+RDEPENDS_perl-module-net-ftp += "perl-module-strict "
+RDEPENDS_perl-module-net-ftp += "perl-module-time-local "
+RDEPENDS_perl-module-net-ftp += "perl-module-vars "
+RDEPENDS_perl-module-net-hostent += "perl-module-class-struct "
+RDEPENDS_perl-module-net-hostent += "perl-module-strict "
+RDEPENDS_perl-module-net-hostent += "perl-module-vars "
+RDEPENDS_perl-module-net-netent += "perl-module-class-struct "
+RDEPENDS_perl-module-net-netent += "perl-module-strict "
+RDEPENDS_perl-module-net-netent += "perl-module-vars "
+RDEPENDS_perl-module-net-netrc += "perl-module-carp "
+RDEPENDS_perl-module-net-netrc += "perl-module-filehandle "
+RDEPENDS_perl-module-net-netrc += "perl-module-strict "
+RDEPENDS_perl-module-net-netrc += "perl-module-vars "
+RDEPENDS_perl-module-net-nntp += "perl-module-carp "
+RDEPENDS_perl-module-net-nntp += "perl-module-io-socket "
+RDEPENDS_perl-module-net-nntp += "perl-module-net-cmd "
+RDEPENDS_perl-module-net-nntp += "perl-module-net-config "
+RDEPENDS_perl-module-net-nntp += "perl-module-strict "
+RDEPENDS_perl-module-net-nntp += "perl-module-time-local "
+RDEPENDS_perl-module-net-nntp += "perl-module-vars "
+RDEPENDS_perl-module-net-ping += "perl-module-exporter "
+RDEPENDS_perl-module-net-ping += "perl-module-carp "
+RDEPENDS_perl-module-net-ping += "perl-module-constant "
+RDEPENDS_perl-module-net-ping += "perl-module-fcntl "
+RDEPENDS_perl-module-net-ping += "perl-module-filehandle "
+RDEPENDS_perl-module-net-ping += "perl-module-posix "
+RDEPENDS_perl-module-net-ping += "perl-module-strict "
+RDEPENDS_perl-module-net-pop3 += "perl-module-carp "
+RDEPENDS_perl-module-net-pop3 += "perl-module-io-socket "
+RDEPENDS_perl-module-net-pop3 += "perl-module-net-cmd "
+RDEPENDS_perl-module-net-pop3 += "perl-module-net-config "
+RDEPENDS_perl-module-net-pop3 += "perl-module-strict "
+RDEPENDS_perl-module-net-pop3 += "perl-module-vars "
+RDEPENDS_perl-module-net-protoent += "perl-module-class-struct "
+RDEPENDS_perl-module-net-protoent += "perl-module-strict "
+RDEPENDS_perl-module-net-protoent += "perl-module-vars "
+RDEPENDS_perl-module-net-servent += "perl-module-class-struct "
+RDEPENDS_perl-module-net-servent += "perl-module-strict "
+RDEPENDS_perl-module-net-servent += "perl-module-vars "
+RDEPENDS_perl-module-net-smtp += "perl-module-carp "
+RDEPENDS_perl-module-net-smtp += "perl-module-io-socket "
+RDEPENDS_perl-module-net-smtp += "perl-module-net-cmd "
+RDEPENDS_perl-module-net-smtp += "perl-module-net-config "
+RDEPENDS_perl-module-net-smtp += "perl-module-socket "
+RDEPENDS_perl-module-net-smtp += "perl-module-strict "
+RDEPENDS_perl-module-net-smtp += "perl-module-vars "
+RDEPENDS_perl-module-net-time += "perl-module-exporter "
+RDEPENDS_perl-module-net-time += "perl-module-carp "
+RDEPENDS_perl-module-net-time += "perl-module-io-select "
+RDEPENDS_perl-module-net-time += "perl-module-io-socket "
+RDEPENDS_perl-module-net-time += "perl-module-net-config "
+RDEPENDS_perl-module-net-time += "perl-module-strict "
+RDEPENDS_perl-module-net-time += "perl-module-vars "
+RDEPENDS_perl-module-next += "perl-module-carp "
+RDEPENDS_perl-module-next += "perl-module-strict "
+RDEPENDS_perl-module-opcode += "perl-module-carp "
+RDEPENDS_perl-module-opcode += "perl-module-exporter "
+RDEPENDS_perl-module-opcode += "perl-module-strict "
+RDEPENDS_perl-module-opcode += "perl-module-subs "
+RDEPENDS_perl-module-opcode += "perl-module-xsloader "
+RDEPENDS_perl-module-open += "perl-module-carp "
+RDEPENDS_perl-module-open += "perl-module-warnings "
+RDEPENDS_perl-module-ops += "perl-module-opcode "
+RDEPENDS_perl-module-o += "perl-module-b "
+RDEPENDS_perl-module-o += "perl-module-carp "
+RDEPENDS_perl-module-overload += "perl-module-warnings-register "
+RDEPENDS_perl-module-perlio-encoding += "perl-module-strict "
+RDEPENDS_perl-module-perlio-encoding += "perl-module-xsloader "
+RDEPENDS_perl-module-perlio-scalar += "perl-module-xsloader "
+RDEPENDS_perl-module-perlio-via-quotedprint += "perl-module-strict "
+RDEPENDS_perl-module-perlio-via += "perl-module-xsloader "
+RDEPENDS_perl-module-pod-checker += "perl-module-carp "
+RDEPENDS_perl-module-pod-checker += "perl-module-exporter "
+RDEPENDS_perl-module-pod-checker += "perl-module-pod-parser "
+RDEPENDS_perl-module-pod-checker += "perl-module-strict "
+RDEPENDS_perl-module-pod-checker += "perl-module-vars "
+RDEPENDS_perl-module-pod-find += "perl-module-carp "
+RDEPENDS_perl-module-pod-find += "perl-module-cwd "
+RDEPENDS_perl-module-pod-find += "perl-module-exporter "
+RDEPENDS_perl-module-pod-find += "perl-module-file-find "
+RDEPENDS_perl-module-pod-find += "perl-module-file-spec "
+RDEPENDS_perl-module-pod-find += "perl-module-strict "
+RDEPENDS_perl-module-pod-find += "perl-module-vars "
+RDEPENDS_perl-module-pod-functions += "perl-module-exporter "
+RDEPENDS_perl-module-pod-functions += "perl-module-strict "
+RDEPENDS_perl-module-pod-html += "perl-module-exporter "
+RDEPENDS_perl-module-pod-html += "perl-module-carp "
+RDEPENDS_perl-module-pod-html += "perl-module-config "
+RDEPENDS_perl-module-pod-html += "perl-module-cwd "
+RDEPENDS_perl-module-pod-html += "perl-module-file-spec "
+RDEPENDS_perl-module-pod-html += "perl-module-file-spec-unix "
+RDEPENDS_perl-module-pod-html += "perl-module-getopt-long "
+RDEPENDS_perl-module-pod-html += "perl-module-strict "
+RDEPENDS_perl-module-pod-html += "perl-module-vars "
+RDEPENDS_perl-module-pod-inputobjects += "perl-module-strict "
+RDEPENDS_perl-module-pod-inputobjects += "perl-module-vars "
+RDEPENDS_perl-module-pod-latex += "perl-module-pod-parseutils "
+RDEPENDS_perl-module-pod-latex += "perl-module-base "
+RDEPENDS_perl-module-pod-latex += "perl-module-carp "
+RDEPENDS_perl-module-pod-latex += "perl-module-strict "
+RDEPENDS_perl-module-pod-latex += "perl-module-vars "
+RDEPENDS_perl-module-pod-man += "perl-module-carp "
+RDEPENDS_perl-module-pod-man += "perl-module-pod-parselink "
+RDEPENDS_perl-module-pod-man += "perl-module-pod-parser "
+RDEPENDS_perl-module-pod-man += "perl-module-strict "
+RDEPENDS_perl-module-pod-man += "perl-module-subs "
+RDEPENDS_perl-module-pod-man += "perl-module-vars "
+RDEPENDS_perl-module-pod-parselink += "perl-module-exporter "
+RDEPENDS_perl-module-pod-parselink += "perl-module-strict "
+RDEPENDS_perl-module-pod-parselink += "perl-module-vars "
+RDEPENDS_perl-module-pod-parser += "perl-module-carp "
+RDEPENDS_perl-module-pod-parser += "perl-module-exporter "
+RDEPENDS_perl-module-pod-parser += "perl-module-pod-inputobjects "
+RDEPENDS_perl-module-pod-parser += "perl-module-strict "
+RDEPENDS_perl-module-pod-parser += "perl-module-vars "
+RDEPENDS_perl-module-pod-parseutils += "perl-module-carp "
+RDEPENDS_perl-module-pod-parseutils += "perl-module-vars "
+RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-baseto += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-getoptsoo += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-tochecker += "perl-module-vars "
+RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-file-spec-functions "
+RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-toman += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-pod-man "
+RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-tonroff += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-topod += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-tortf += "perl-module-vars "
+RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-pod-text "
+RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-totext += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-file-spec-functions "
+RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-pod-perldoc "
+RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-totk += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-base "
+RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-warnings "
+RDEPENDS_perl-module-pod-perldoc-toxml += "perl-module-vars "
+RDEPENDS_perl-module-pod-perldoc += "perl-module-config "
+RDEPENDS_perl-module-pod-perldoc += "perl-module-file-spec-functions "
+RDEPENDS_perl-module-pod-perldoc += "perl-module-strict "
+RDEPENDS_perl-module-pod-perldoc += "perl-module-warnings "
+RDEPENDS_perl-module-pod-plainer += "perl-module-pod-parser "
+RDEPENDS_perl-module-pod-plainer += "perl-module-strict "
+RDEPENDS_perl-module-pod-plaintext += "perl-module-carp "
+RDEPENDS_perl-module-pod-plaintext += "perl-module-pod-select "
+RDEPENDS_perl-module-pod-plaintext += "perl-module-strict "
+RDEPENDS_perl-module-pod-plaintext += "perl-module-vars "
+RDEPENDS_perl-module-pod-select += "perl-module-carp "
+RDEPENDS_perl-module-pod-select += "perl-module-pod-parser "
+RDEPENDS_perl-module-pod-select += "perl-module-strict "
+RDEPENDS_perl-module-pod-select += "perl-module-vars "
+RDEPENDS_perl-module-pod-text-color += "perl-module-pod-text "
+RDEPENDS_perl-module-pod-text-color += "perl-module-strict "
+RDEPENDS_perl-module-pod-text-color += "perl-module-term-ansicolor "
+RDEPENDS_perl-module-pod-text-color += "perl-module-vars "
+RDEPENDS_perl-module-pod-text-overstrike += "perl-module-pod-text "
+RDEPENDS_perl-module-pod-text-overstrike += "perl-module-strict "
+RDEPENDS_perl-module-pod-text-overstrike += "perl-module-vars "
+RDEPENDS_perl-module-pod-text-termcap += "perl-module-pod-text "
+RDEPENDS_perl-module-pod-text-termcap += "perl-module-posix "
+RDEPENDS_perl-module-pod-text-termcap += "perl-module-strict "
+RDEPENDS_perl-module-pod-text-termcap += "perl-module-term-cap "
+RDEPENDS_perl-module-pod-text-termcap += "perl-module-vars "
+RDEPENDS_perl-module-pod-text += "perl-module-carp "
+RDEPENDS_perl-module-pod-text += "perl-module-exporter "
+RDEPENDS_perl-module-pod-text += "perl-module-pod-parselink "
+RDEPENDS_perl-module-pod-text += "perl-module-pod-select "
+RDEPENDS_perl-module-pod-text += "perl-module-strict "
+RDEPENDS_perl-module-pod-text += "perl-module-vars "
+RDEPENDS_perl-module-pod-usage += "perl-module-carp "
+RDEPENDS_perl-module-pod-usage += "perl-module-config "
+RDEPENDS_perl-module-pod-usage += "perl-module-exporter "
+RDEPENDS_perl-module-pod-usage += "perl-module-file-spec "
+RDEPENDS_perl-module-pod-usage += "perl-module-strict "
+RDEPENDS_perl-module-pod-usage += "perl-module-vars "
+RDEPENDS_perl-module-posix += "perl-module-exporter "
+RDEPENDS_perl-module-posix += "perl-module-autoloader "
+RDEPENDS_perl-module-posix += "perl-module-autoloader "
+RDEPENDS_perl-module-posix += "perl-module-xsloader "
+RDEPENDS_perl-module-safe += "perl-module-carp "
+RDEPENDS_perl-module-safe += "perl-module-carp-heavy "
+RDEPENDS_perl-module-safe += "perl-module-strict "
+RDEPENDS_perl-module-scalar-util += "perl-module-exporter "
+RDEPENDS_perl-module-sdbm-file += "perl-module-tie-hash "
+RDEPENDS_perl-module-sdbm-file += "perl-module-strict "
+RDEPENDS_perl-module-sdbm-file += "perl-module-warnings "
+RDEPENDS_perl-module-sdbm-file += "perl-module-xsloader "
+RDEPENDS_perl-module-search-dict += "perl-module-exporter "
+RDEPENDS_perl-module-search-dict += "perl-module-strict "
+RDEPENDS_perl-module-selectsaver += "perl-module-carp "
+RDEPENDS_perl-module-selectsaver += "perl-module-symbol "
+RDEPENDS_perl-module-selfloader += "perl-module-exporter "
+RDEPENDS_perl-module-shell += "perl-module-file-spec-functions "
+RDEPENDS_perl-module-shell += "perl-module-strict "
+RDEPENDS_perl-module-shell += "perl-module-warnings "
+RDEPENDS_perl-module-sigtrap += "perl-module-carp "
+RDEPENDS_perl-module-socket += "perl-module-exporter "
+RDEPENDS_perl-module-socket += "perl-module-carp "
+RDEPENDS_perl-module-socket += "perl-module-warnings-register "
+RDEPENDS_perl-module-socket += "perl-module-xsloader "
+RDEPENDS_perl-module-sort += "perl-module-strict "
+RDEPENDS_perl-module-storable += "perl-module-carp "
+RDEPENDS_perl-module-storable += "perl-module-dynaloader "
+RDEPENDS_perl-module-storable += "perl-module-exporter "
+RDEPENDS_perl-module-storable += "perl-module-autoloader "
+RDEPENDS_perl-module-storable += "perl-module-vars "
+RDEPENDS_perl-module-switch += "perl-module-carp "
+RDEPENDS_perl-module-switch += "perl-module-filter-util-call "
+RDEPENDS_perl-module-switch += "perl-module-strict "
+RDEPENDS_perl-module-switch += "perl-module-text-balanced "
+RDEPENDS_perl-module-switch += "perl-module-vars "
+RDEPENDS_perl-module-symbol += "perl-module-exporter "
+RDEPENDS_perl-module-sys-hostname += "perl-module-autoloader "
+RDEPENDS_perl-module-sys-hostname += "perl-module-exporter "
+RDEPENDS_perl-module-sys-hostname += "perl-module-carp "
+RDEPENDS_perl-module-sys-hostname += "perl-module-strict "
+RDEPENDS_perl-module-sys-syslog += "perl-module-dynaloader "
+RDEPENDS_perl-module-sys-syslog += "perl-module-exporter "
+RDEPENDS_perl-module-sys-syslog += "perl-module-carp "
+RDEPENDS_perl-module-sys-syslog += "perl-module-socket "
+RDEPENDS_perl-module-sys-syslog += "perl-module-strict "
+RDEPENDS_perl-module-sys-syslog += "perl-module-sys-hostname "
+RDEPENDS_perl-module-term-ansicolor += "perl-module-exporter "
+RDEPENDS_perl-module-term-ansicolor += "perl-module-strict "
+RDEPENDS_perl-module-term-cap += "perl-module-strict "
+RDEPENDS_perl-module-term-cap += "perl-module-vars "
+RDEPENDS_perl-module-term-complete += "perl-module-exporter "
+RDEPENDS_perl-module-term-complete += "perl-module-strict "
+RDEPENDS_perl-module-term-readline += "perl-module-strict "
+RDEPENDS_perl-module-test-builder += "perl-module-strict "
+RDEPENDS_perl-module-test-builder += "perl-module-vars "
+RDEPENDS_perl-module-test-harness-assert += "perl-module-exporter "
+RDEPENDS_perl-module-test-harness-assert += "perl-module-strict "
+RDEPENDS_perl-module-test-harness-assert += "perl-module-vars "
+RDEPENDS_perl-module-test-harness-iterator += "perl-module-strict "
+RDEPENDS_perl-module-test-harness-iterator += "perl-module-vars "
+RDEPENDS_perl-module-test-harness-point += "perl-module-strict "
+RDEPENDS_perl-module-test-harness-point += "perl-module-vars "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-config "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-strict "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-assert "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-iterator "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-test-harness-point "
+RDEPENDS_perl-module-test-harness-straps += "perl-module-vars "
+RDEPENDS_perl-module-test-harness += "perl-module-benchmark "
+RDEPENDS_perl-module-test-harness += "perl-module-config "
+RDEPENDS_perl-module-test-harness += "perl-module-exporter "
+RDEPENDS_perl-module-test-harness += "perl-module-strict "
+RDEPENDS_perl-module-test-harness += "perl-module-test-harness-assert "
+RDEPENDS_perl-module-test-harness += "perl-module-test-harness-straps "
+RDEPENDS_perl-module-test-more += "perl-module-exporter "
+RDEPENDS_perl-module-test-more += "perl-module-strict "
+RDEPENDS_perl-module-test-more += "perl-module-test-builder "
+RDEPENDS_perl-module-test-more += "perl-module-vars "
+RDEPENDS_perl-module-test-simple += "perl-module-strict "
+RDEPENDS_perl-module-test-simple += "perl-module-test-builder "
+RDEPENDS_perl-module-test-simple += "perl-module-vars "
+RDEPENDS_perl-module-test += "perl-module-exporter "
+RDEPENDS_perl-module-test += "perl-module-carp "
+RDEPENDS_perl-module-test += "perl-module-strict "
+RDEPENDS_perl-module-text-abbrev += "perl-module-exporter "
+RDEPENDS_perl-module-text-balanced += "perl-module-exporter "
+RDEPENDS_perl-module-text-balanced += "perl-module-overload "
+RDEPENDS_perl-module-text-balanced += "perl-module-selfloader "
+RDEPENDS_perl-module-text-balanced += "perl-module-strict "
+RDEPENDS_perl-module-text-balanced += "perl-module-vars "
+RDEPENDS_perl-module-text-parsewords += "perl-module-exporter "
+RDEPENDS_perl-module-text-parsewords += "perl-module-vars "
+RDEPENDS_perl-module-text-soundex += "perl-module-exporter "
+RDEPENDS_perl-module-text-tabs += "perl-module-exporter "
+RDEPENDS_perl-module-text-tabs += "perl-module-strict "
+RDEPENDS_perl-module-text-tabs += "perl-module-vars "
+RDEPENDS_perl-module-text-wrap += "perl-module-exporter "
+RDEPENDS_perl-module-text-wrap += "perl-module-strict "
+RDEPENDS_perl-module-text-wrap += "perl-module-text-tabs "
+RDEPENDS_perl-module-thread-queue += "perl-module-strict "
+RDEPENDS_perl-module-thread-queue += "perl-module-threads-shared "
+RDEPENDS_perl-module-thread-semaphore += "perl-module-threads-shared "
+RDEPENDS_perl-module-threads-shared += "perl-module-strict "
+RDEPENDS_perl-module-threads-shared += "perl-module-warnings "
+RDEPENDS_perl-module-threads += "perl-module-dynaloader "
+RDEPENDS_perl-module-threads += "perl-module-exporter "
+RDEPENDS_perl-module-threads += "perl-module-config "
+RDEPENDS_perl-module-threads += "perl-module-strict "
+RDEPENDS_perl-module-threads += "perl-module-warnings "
+RDEPENDS_perl-module-thread += "perl-module-exporter "
+RDEPENDS_perl-module-thread += "perl-module-strict "
+RDEPENDS_perl-module-thread += "perl-module-xsloader "
+RDEPENDS_perl-module-tie-array += "perl-module-carp "
+RDEPENDS_perl-module-tie-array += "perl-module-strict "
+RDEPENDS_perl-module-tie-array += "perl-module-vars "
+RDEPENDS_perl-module-tie-file += "perl-module-carp "
+RDEPENDS_perl-module-tie-file += "perl-module-fcntl "
+RDEPENDS_perl-module-tie-file += "perl-module-posix "
+RDEPENDS_perl-module-tie-file += "perl-module-strict "
+RDEPENDS_perl-module-tie-handle += "perl-module-carp "
+RDEPENDS_perl-module-tie-handle += "perl-module-warnings-register "
+RDEPENDS_perl-module-tie-hash += "perl-module-carp "
+RDEPENDS_perl-module-tie-hash += "perl-module-warnings-register "
+RDEPENDS_perl-module-tie-memoize += "perl-module-strict "
+RDEPENDS_perl-module-tie-memoize += "perl-module-tie-hash "
+RDEPENDS_perl-module-tie-refhash += "perl-module-strict "
+RDEPENDS_perl-module-tie-refhash += "perl-module-tie-hash "
+RDEPENDS_perl-module-tie-refhash += "perl-module-vars "
+RDEPENDS_perl-module-tie-scalar += "perl-module-carp "
+RDEPENDS_perl-module-tie-scalar += "perl-module-warnings-register "
+RDEPENDS_perl-module-tie-substrhash += "perl-module-carp "
+RDEPENDS_perl-module-time-gmtime += "perl-module-strict "
+RDEPENDS_perl-module-time-gmtime += "perl-module-time-tm "
+RDEPENDS_perl-module-time-gmtime += "perl-module-vars "
+RDEPENDS_perl-module-time-hires += "perl-module-dynaloader "
+RDEPENDS_perl-module-time-hires += "perl-module-exporter "
+RDEPENDS_perl-module-time-hires += "perl-module-strict "
+RDEPENDS_perl-module-time-hires += "perl-module-vars "
+RDEPENDS_perl-module-time-localtime += "perl-module-strict "
+RDEPENDS_perl-module-time-localtime += "perl-module-time-tm "
+RDEPENDS_perl-module-time-localtime += "perl-module-vars "
+RDEPENDS_perl-module-time-local += "perl-module-exporter "
+RDEPENDS_perl-module-time-local += "perl-module-carp "
+RDEPENDS_perl-module-time-local += "perl-module-config "
+RDEPENDS_perl-module-time-local += "perl-module-integer "
+RDEPENDS_perl-module-time-local += "perl-module-strict "
+RDEPENDS_perl-module-time-local += "perl-module-vars "
+RDEPENDS_perl-module-time-tm += "perl-module-class-struct "
+RDEPENDS_perl-module-time-tm += "perl-module-strict "
+RDEPENDS_perl-module-unicode-collate += "perl-module-carp "
+RDEPENDS_perl-module-unicode-collate += "perl-module-constant "
+RDEPENDS_perl-module-unicode-collate += "perl-module-file-spec "
+RDEPENDS_perl-module-unicode-collate += "perl-module-strict "
+RDEPENDS_perl-module-unicode-collate += "perl-module-warnings "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-dynaloader "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-exporter "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-carp "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-constant "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-strict "
+RDEPENDS_perl-module-unicode-normalize += "perl-module-warnings "
+RDEPENDS_perl-module-unicode-ucd += "perl-module-exporter "
+RDEPENDS_perl-module-unicode-ucd += "perl-module-carp "
+RDEPENDS_perl-module-unicode-ucd += "perl-module-storable "
+RDEPENDS_perl-module-unicode-ucd += "perl-module-strict "
+RDEPENDS_perl-module-unicode-ucd += "perl-module-warnings "
+RDEPENDS_perl-module-universal += "perl-module-exporter "
+RDEPENDS_perl-module-user-grent += "perl-module-class-struct "
+RDEPENDS_perl-module-user-grent += "perl-module-strict "
+RDEPENDS_perl-module-user-grent += "perl-module-vars "
+RDEPENDS_perl-module-user-pwent += "perl-module-carp "
+RDEPENDS_perl-module-user-pwent += "perl-module-class-struct "
+RDEPENDS_perl-module-user-pwent += "perl-module-config "
+RDEPENDS_perl-module-user-pwent += "perl-module-strict "
+RDEPENDS_perl-module-user-pwent += "perl-module-warnings "
+RDEPENDS_perl-module-user-pwent += "perl-module-vars "
+RDEPENDS_perl-module-warnings-register += "perl-module-warnings "
+RDEPENDS_perl-module-warnings += "perl-module-carp "
+RDEPENDS_perl-module-vars += "perl-module-strict "
+RDEPENDS_perl-module-vars += "perl-module-warnings-register "
+RDEPENDS_perl-module-xs-apitest += "perl-module-base "
+RDEPENDS_perl-module-xs-apitest += "perl-module-carp "
+RDEPENDS_perl-module-xs-apitest += "perl-module-strict "
+RDEPENDS_perl-module-xs-apitest += "perl-module-warnings "
+RDEPENDS_perl-module-xs-typemap += "perl-module-base "
+RDEPENDS_perl-module-xs-typemap += "perl-module-vars "
diff --git a/packages/perl/perl-rprovides.inc b/packages/perl/perl-rprovides.inc
new file mode 100644
index 0000000000..637c993156
--- /dev/null
+++ b/packages/perl/perl-rprovides.inc
@@ -0,0 +1,45 @@
+#
+# Some packages changed names in 5.8.7-r14, RPROVIDE them for things that
+# depend on the old name
+#
+RPROVIDES_perl-module-b-asmdata = "perl-module-${TARGET_SYS}-b-asmdata"
+RPROVIDES_perl-module-b-assembler = "perl-module-${TARGET_SYS}-b-assembler"
+RPROVIDES_perl-module-b-bblock = "perl-module-${TARGET_SYS}-b-bblock"
+RPROVIDES_perl-module-b-bytecode = "perl-module-${TARGET_SYS}-b-bytecode"
+RPROVIDES_perl-module-b-cc = "perl-module-${TARGET_SYS}-b-cc"
+RPROVIDES_perl-module-b-concise = "perl-module-${TARGET_SYS}-b-concise"
+RPROVIDES_perl-module-b-debug = "perl-module-${TARGET_SYS}-b-debug"
+RPROVIDES_perl-module-b-deparse = "perl-module-${TARGET_SYS}-b-deparse"
+RPROVIDES_perl-module-b-disassembler = "perl-module-${TARGET_SYS}-b-disassembler"
+RPROVIDES_perl-module-b-lint = "perl-module-${TARGET_SYS}-b-lint"
+RPROVIDES_perl-module-b-showlex = "perl-module-${TARGET_SYS}-b-showlex"
+RPROVIDES_perl-module-b-stackobj = "perl-module-${TARGET_SYS}-b-stackobj"
+RPROVIDES_perl-module-b-stash = "perl-module-${TARGET_SYS}-b-stash"
+RPROVIDES_perl-module-b-terse = "perl-module-${TARGET_SYS}-b-terse"
+RPROVIDES_perl-module-b-xref = "perl-module-${TARGET_SYS}-b-xref"
+RPROVIDES_perl-module-config = "perl-module-${TARGET_SYS}-config"
+RPROVIDES_perl-module-config-heavy = "perl-module-${TARGET_SYS}-config-heavy"
+RPROVIDES_perl-module-encode-alias = "perl-module-${TARGET_SYS}-encode-alias"
+RPROVIDES_perl-module-encode-cjkconstants = "perl-module-${TARGET_SYS}-encode-cjkconstants"
+RPROVIDES_perl-module-encode-config = "perl-module-${TARGET_SYS}-encode-config"
+RPROVIDES_perl-module-encode-encoder = "perl-module-${TARGET_SYS}-encode-encoder"
+RPROVIDES_perl-module-encode-encoding = "perl-module-${TARGET_SYS}-encode-encoding"
+RPROVIDES_perl-module-encode-guess = "perl-module-${TARGET_SYS}-encode-guess"
+RPROVIDES_perl-module-encoding = "perl-module-${TARGET_SYS}-encoding"
+RPROVIDES_perl-module-errno = "perl-module-${TARGET_SYS}-errno"
+RPROVIDES_perl-module-io-dir = "perl-module-${TARGET_SYS}-io-dir"
+RPROVIDES_perl-module-io-file = "perl-module-${TARGET_SYS}-io-file"
+RPROVIDES_perl-module-io-handle = "perl-module-${TARGET_SYS}-io-handle"
+RPROVIDES_perl-module-io-pipe = "perl-module-${TARGET_SYS}-io-pipe"
+RPROVIDES_perl-module-io-poll = "perl-module-${TARGET_SYS}-io-poll"
+RPROVIDES_perl-module-io-seekable = "perl-module-${TARGET_SYS}-io-seekable"
+RPROVIDES_perl-module-io-select = "perl-module-${TARGET_SYS}-io-select"
+RPROVIDES_perl-module-io-socket = "perl-module-${TARGET_SYS}-io-socket"
+RPROVIDES_perl-module-ipc-msg = "perl-module-${TARGET_SYS}-ipc-msg"
+RPROVIDES_perl-module-ipc-semaphore = "perl-module-${TARGET_SYS}-ipc-semaphore"
+RPROVIDES_perl-module-lib = "perl-module-${TARGET_SYS}-lib"
+RPROVIDES_perl-module-mime-quotedprint = "perl-module-${TARGET_SYS}-mime-quotedprint"
+RPROVIDES_perl-module-o = "perl-module-${TARGET_SYS}-o"
+RPROVIDES_perl-module-ops = "perl-module-${TARGET_SYS}-ops"
+RPROVIDES_perl-module-safe = "perl-module-${TARGET_SYS}-safe"
+RPROVIDES_perl-module-xsloader = "perl-module-${TARGET_SYS}-xsloader"
diff --git a/packages/perl/perl.inc b/packages/perl/perl.inc
index 4f42d78ded..9e20ae63e6 100644
--- a/packages/perl/perl.inc
+++ b/packages/perl/perl.inc
@@ -9,43 +9,23 @@ SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
file://Makefile.patch;patch=1 \
file://config.sh-arm-linux.patch;patch=1 \
file://libperl-5.8.3-create-libperl-soname.patch;patch=1;pnum=0 \
- file://uclibc.patch;patch=1 \
- file://Makefile.SH.patch \
- file://config.sh-mipsel-linux \
- file://config.sh-i686-linux"
+ file://Makefile.SH.patch"
HOSTPERL="${STAGING_BINDIR_NATIVE}/perl${PV}"
-do_configure() {
- ln -sf ${HOSTPERL} ${STAGING_BINDIR_NATIVE}/hostperl
- cp ${HOSTPERL} hostperl
- cd Cross
- rm -f Makefile.SH.patch
- cp ${WORKDIR}/Makefile.SH.patch .
- cp ${WORKDIR}/config.sh-mipsel-linux .
- cp ${WORKDIR}/config.sh-i686-linux .
- cat config.sh-arm-linux | sed -e "s,arm-linux,armeb-linux,g" > config.sh-armeb-linux
- for i in config.sh-*-linux; do
- a="`echo $i|sed -e 's,^config.sh-,,; s,-linux$,,'`"
- newfile="`echo $i|sed -e 's,-linux$,-linux-uclibc,g'`"
- cat $i | sed -e "s,${a}-linux,${a}-linux-uclibc,g; \
- s,d_sockatmark='define',d_sockatmark='undef',g;" > $newfile
- done
- sed -i -e 's,./install_me_here,${D},g' config.sh-${TARGET_ARCH}-${TARGET_OS}
- rm -f config
- echo "ARCH = ${TARGET_ARCH}" > config
- echo "OS = ${TARGET_OS}" >> config
- oe_runmake patch
-}
-
do_compile() {
sed -i -e 's|/usr/include|${STAGING_INCDIR}|g' ext/Errno/Errno_pm.PL
cd Cross
# You must use gcc to link on sh
OPTIONS=""
if test ${TARGET_ARCH} = "sh3" -o ${TARGET_ARCH} = "sh4"; then
- OPTIONS="LD=${TARGET_ARCH}-${TARGET_OS}-gcc"
+ OPTIONS="LD=${TARGET_SYS}-gcc"
fi
+ # You must use gcc to link on powerpc also
+ if test ${TARGET_ARCH} = "powerpc" ; then
+ OPTIONS="LD=${TARGET_SYS}-gcc"
+ fi
+
oe_runmake perl $OPTIONS
}
diff --git a/packages/perl/perl_5.8.4.bb b/packages/perl/perl_5.8.4.bb
index 7509f1b66b..10a871c8dd 100644
--- a/packages/perl/perl_5.8.4.bb
+++ b/packages/perl/perl_5.8.4.bb
@@ -1,3 +1,29 @@
require perl.inc
PR = "r5"
+
+SRC_URI += "file://uclibc.patch;patch=1 \
+ file://config.sh-mipsel-linux \
+ file://config.sh-i686-linux"
+
+do_configure() {
+ ln -sf ${HOSTPERL} ${STAGING_BINDIR_NATIVE}/hostperl
+ cp ${HOSTPERL} hostperl
+ cd Cross
+ rm -f Makefile.SH.patch
+ cp ${WORKDIR}/Makefile.SH.patch .
+ cp ${WORKDIR}/config.sh-mipsel-linux .
+ cp ${WORKDIR}/config.sh-i686-linux .
+ cat config.sh-arm-linux | sed -e "s,arm-linux,armeb-linux,g" > config.sh-armeb-linux
+ for i in config.sh-*-linux; do
+ a="`echo $i|sed -e 's,^config.sh-,,; s,-linux$,,'`"
+ newfile="`echo $i|sed -e 's,-linux$,-linux-uclibc,g'`"
+ cat $i | sed -e "s,${a}-linux,${a}-linux-uclibc,g; \
+ s,d_sockatmark='define',d_sockatmark='undef',g;" > $newfile
+ done
+ sed -i -e 's,./install_me_here,${D},g' config.sh-${TARGET_ARCH}-${TARGET_OS}
+ rm -f config
+ echo "ARCH = ${TARGET_ARCH}" > config
+ echo "OS = ${TARGET_OS}" >> config
+ oe_runmake patch
+}
diff --git a/packages/perl/perl_5.8.7.bb b/packages/perl/perl_5.8.7.bb
index 2f37e6ccbe..6589180ff2 100644
--- a/packages/perl/perl_5.8.7.bb
+++ b/packages/perl/perl_5.8.7.bb
@@ -7,6 +7,7 @@ require perl.inc
SRC_URI += "file://config.sh-armeb-linux \
file://config.sh-arm-linux \
file://config.sh-powerpc-linux \
+ file://config.sh-mipsel-linux \
file://config.sh-i386-linux \
file://config.sh-i486-linux \
file://config.sh-i586-linux \
@@ -15,16 +16,17 @@ SRC_URI += "file://config.sh-armeb-linux \
file://config.sh-sh3-linux \
file://config.sh-sh4-linux"
-# Patches for sh3/sh4, use gcc to link and override generaet.sh to
-# use PIC mode for compiling shared library objects.
-SRC_URI_append_sh4 += "file://override-generate-sh.patch;patch=1"
-SRC_URI_append_sh4 += "file://makefile-usegcc-to-link.patch;patch=1"
-SRC_URI_append_sh3 += "file://override-generate-sh.patch;patch=1"
-SRC_URI_append_sh3 += "file://makefile-usegcc-to-link.patch;patch=1"
+# Use gcc to link and use PIC mode for compiling shared libs
+GCCLINK_SRC = "file://override-generate-sh.patch;patch=1 \
+ file://makefile-usegcc-to-link.patch;patch=1"
+
+SRC_URI_append_sh4 += " ${GCCLINK_SRC}"
+SRC_URI_append_sh3 += " ${GCCLINK_SRC}"
+SRC_URI_append_powerpc += " ${GCCLINK_SRC}"
PARALLEL_MAKE = ""
-PR = "r21"
+PR = "r22"
do_configure() {
ln -sf ${HOSTPERL} ${STAGING_BINDIR_NATIVE}/hostperl
@@ -44,6 +46,7 @@ do_configure() {
cp ${WORKDIR}/config.sh-sh4-linux .
#perl insists on an extra config.sh for arm EABI
cp config.sh-arm-linux config.sh-arm-linux-gnueabi
+ cp config.sh-armeb-linux config.sh-armeb-linux-gnueabi
# nslu2 LE uclibc builds do not work with the default config.sh
if test "${MACHINE}" = nslu2
then
@@ -92,45 +95,4 @@ require perl-rdepends_${PV}.inc
DEPENDS_perl-module-math-bigint += "perl-module-math-bigint-calc "
DEPENDS_perl-module-math-bigint-calc += "perl-module-integer "
-# Some packages changed names in 5.8.7-r14, RPROVIDE them
-RPROVIDES_perl-module-b-asmdata = "perl-module-${TARGET_SYS}-b-asmdata"
-RPROVIDES_perl-module-b-assembler = "perl-module-${TARGET_SYS}-b-assembler"
-RPROVIDES_perl-module-b-bblock = "perl-module-${TARGET_SYS}-b-bblock"
-RPROVIDES_perl-module-b-bytecode = "perl-module-${TARGET_SYS}-b-bytecode"
-RPROVIDES_perl-module-b-cc = "perl-module-${TARGET_SYS}-b-cc"
-RPROVIDES_perl-module-b-concise = "perl-module-${TARGET_SYS}-b-concise"
-RPROVIDES_perl-module-b-debug = "perl-module-${TARGET_SYS}-b-debug"
-RPROVIDES_perl-module-b-deparse = "perl-module-${TARGET_SYS}-b-deparse"
-RPROVIDES_perl-module-b-disassembler = "perl-module-${TARGET_SYS}-b-disassembler"
-RPROVIDES_perl-module-b-lint = "perl-module-${TARGET_SYS}-b-lint"
-RPROVIDES_perl-module-b-showlex = "perl-module-${TARGET_SYS}-b-showlex"
-RPROVIDES_perl-module-b-stackobj = "perl-module-${TARGET_SYS}-b-stackobj"
-RPROVIDES_perl-module-b-stash = "perl-module-${TARGET_SYS}-b-stash"
-RPROVIDES_perl-module-b-terse = "perl-module-${TARGET_SYS}-b-terse"
-RPROVIDES_perl-module-b-xref = "perl-module-${TARGET_SYS}-b-xref"
-RPROVIDES_perl-module-config = "perl-module-${TARGET_SYS}-config"
-RPROVIDES_perl-module-config-heavy = "perl-module-${TARGET_SYS}-config-heavy"
-RPROVIDES_perl-module-encode-alias = "perl-module-${TARGET_SYS}-encode-alias"
-RPROVIDES_perl-module-encode-cjkconstants = "perl-module-${TARGET_SYS}-encode-cjkconstants"
-RPROVIDES_perl-module-encode-config = "perl-module-${TARGET_SYS}-encode-config"
-RPROVIDES_perl-module-encode-encoder = "perl-module-${TARGET_SYS}-encode-encoder"
-RPROVIDES_perl-module-encode-encoding = "perl-module-${TARGET_SYS}-encode-encoding"
-RPROVIDES_perl-module-encode-guess = "perl-module-${TARGET_SYS}-encode-guess"
-RPROVIDES_perl-module-encoding = "perl-module-${TARGET_SYS}-encoding"
-RPROVIDES_perl-module-errno = "perl-module-${TARGET_SYS}-errno"
-RPROVIDES_perl-module-io-dir = "perl-module-${TARGET_SYS}-io-dir"
-RPROVIDES_perl-module-io-file = "perl-module-${TARGET_SYS}-io-file"
-RPROVIDES_perl-module-io-handle = "perl-module-${TARGET_SYS}-io-handle"
-RPROVIDES_perl-module-io-pipe = "perl-module-${TARGET_SYS}-io-pipe"
-RPROVIDES_perl-module-io-poll = "perl-module-${TARGET_SYS}-io-poll"
-RPROVIDES_perl-module-io-seekable = "perl-module-${TARGET_SYS}-io-seekable"
-RPROVIDES_perl-module-io-select = "perl-module-${TARGET_SYS}-io-select"
-RPROVIDES_perl-module-io-socket = "perl-module-${TARGET_SYS}-io-socket"
-RPROVIDES_perl-module-ipc-msg = "perl-module-${TARGET_SYS}-ipc-msg"
-RPROVIDES_perl-module-ipc-semaphore = "perl-module-${TARGET_SYS}-ipc-semaphore"
-RPROVIDES_perl-module-lib = "perl-module-${TARGET_SYS}-lib"
-RPROVIDES_perl-module-mime-quotedprint = "perl-module-${TARGET_SYS}-mime-quotedprint"
-RPROVIDES_perl-module-o = "perl-module-${TARGET_SYS}-o"
-RPROVIDES_perl-module-ops = "perl-module-${TARGET_SYS}-ops"
-RPROVIDES_perl-module-safe = "perl-module-${TARGET_SYS}-safe"
-RPROVIDES_perl-module-xsloader = "perl-module-${TARGET_SYS}-xsloader"
+require perl-rprovides.inc
diff --git a/packages/perl/perl_5.8.8.bb b/packages/perl/perl_5.8.8.bb
new file mode 100644
index 0000000000..a3873d99fb
--- /dev/null
+++ b/packages/perl/perl_5.8.8.bb
@@ -0,0 +1,219 @@
+DESCRIPTION = "Perl is a popular scripting language."
+HOMEPAGE = "http://www.perl.org/"
+SECTION = "devel"
+LICENSE = "Artistic|GPL"
+PRIORITY = "optional"
+# We need gnugrep (for -I)
+DEPENDS = "virtual/db perl-native grep-native"
+PR = "r25"
+
+# Major part of version
+PVM = "5.8"
+
+SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz \
+ file://Makefile.patch;patch=1 \
+ file://Makefile.SH.patch;patch=1 \
+ file://makedepend-dash.patch;patch=1 \
+ file://installperl.patch;patch=1 \
+ file://perl-dynloader.patch;patch=1 \
+ file://perl-moreconfig.patch;patch=1 \
+ file://letgcc-find-errno.patch;patch=1 \
+ file://generate-sh.patch;patch=1 \
+ file://perl-5.8.8-gcc-4.2.patch;patch=1 \
+ file://09_fix_installperl.patch;patch=1 \
+ file://52_debian_extutils_hacks.patch;patch=1 \
+ file://53_debian_mod_paths.patch;patch=1 \
+ file://54_debian_perldoc-r.patch;patch=1 \
+ file://58_debian_cpan_config_path.patch;patch=1 \
+ file://60_debian_libnet_config_path.patch;patch=1 \
+ file://62_debian_cpan_definstalldirs.patch;patch=1 \
+ file://64_debian_enc2xs_inc.patch;patch=1 \
+ file://asm-pageh-fix.patch;patch=1 \
+ file://config.sh \
+ file://config.sh-32 \
+ file://config.sh-32-le \
+ file://config.sh-32-be \
+ file://config.sh-64 \
+ file://config.sh-64-le \
+ file://config.sh-64-be"
+
+# Where to find the native perl
+HOSTPERL = "${STAGING_BINDIR_NATIVE}/perl${PV}"
+
+# Where to find .so files - use the -native versions not those from the target build
+export PERLHOSTLIB = "${STAGING_DIR}/${BUILD_SYS}/lib/perl/${PV}/"
+
+do_configure() {
+ # Make hostperl in build directory be the native perl
+ cp -f ${HOSTPERL} hostperl
+
+ # Do out work in the cross subdir
+ cd Cross
+
+ # Generate configuration
+ rm -f config.sh-${TARGET_ARCH}-${TARGET_OS}
+ for i in ${WORKDIR}/config.sh \
+ ${WORKDIR}/config.sh-${@siteinfo_get_bits(d)} \
+ ${WORKDIR}/config.sh-${@siteinfo_get_bits(d)}-${@siteinfo_get_endianess(d)}; do
+ cat $i >> config.sh-${TARGET_ARCH}-${TARGET_OS}
+ done
+
+ # Fixups for uclibc
+ if [ "${TARGET_OS}" = "linux-uclibc" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then
+ sed -i -e "s,\(d_crypt_r=\)'define',\1'undef',g" \
+ -e "s,\(crypt_r_proto=\)'\w+',\1'0',g" \
+ -e "s,\(d_getnetbyname_r=\)'define',\1'undef',g" \
+ -e "s,\(getnetbyname_r_proto=\)'\w+',\1'0',g" \
+ -e "s,\(d_getnetbyaddr_r=\)'define',\1'undef',g" \
+ -e "s,\(getnetbyaddr_r_proto=\)'\w+',\1'0',g" \
+ -e "s,\(d_getnetent_r=\)'define',\1'undef',g" \
+ -e "s,\(getnetent_r_proto=\)'\w+',\1'0',g" \
+ -e "s,\(d_sockatmark=\)'define',\1'undef',g" \
+ -e "s,\(d_sockatmarkproto=\)'\w+',\1'0',g" \
+ config.sh-${TARGET_ARCH}-${TARGET_OS}
+ fi
+
+ # Update some paths in the configuration
+ sed -i -e 's,@DESTDIR@,${D},g' \
+ -e 's,@ARCH@,${TARGET_ARCH}-${TARGET_OS},g' \
+ -e "s%/usr/include/%${STAGING_INCDIR}/%g" \
+ config.sh-${TARGET_ARCH}-${TARGET_OS}
+
+ if test "${MACHINE}" != "native"; then
+ # These are strewn all over the source tree
+ for foo in `grep -I -m1 \/usr\/include\/.*\\.h ${WORKDIR}/* -r | cut -f 1 -d ":"` ; do
+ echo Fixing: $foo
+ sed -e "s%/usr/include/%${STAGING_INCDIR}/%g" -i $foo
+ done
+ fi
+
+ rm -f config
+ echo "ARCH = ${TARGET_ARCH}" > config
+ echo "OS = ${TARGET_OS}" >> config
+}
+do_compile() {
+ if test "${MACHINE}" != "native"; then
+ sed -i -e 's|/usr/include|${STAGING_INCDIR}|g' ext/Errno/Errno_pm.PL
+ fi
+ cd Cross
+ oe_runmake perl LD="${TARGET_SYS}-gcc"
+}
+do_install() {
+ oe_runmake install
+
+ # Add perl pointing at current version
+ ln -sf perl${PV} ${D}/usr/bin/perl
+
+ # Fix up versioned directories
+ mv ${D}/${libdir}/perl/${PVM} ${D}/${libdir}/perl/${PV}
+ mv ${D}/${datadir}/perl/${PVM} ${D}/${datadir}/perl/${PV}
+ ln -sf ${PV} ${D}/${libdir}/perl/${PVM}
+ ln -sf ${PV} ${D}/${datadir}/perl/${PVM}
+
+ # Remove unwanted file
+ rm -f ${D}/${libdir}/perl/${PV}/.packlist
+
+ # Fix up shared library
+ mv -f ${D}/${libdir}/perl/${PV}/CORE/libperl.so ${D}/${libdir}/libperl.so.${PV}
+ ln -sf libperl.so.${PV} ${D}/${libdir}/libperl.so.5
+
+ # Fix up installed configuration
+ if test "${MACHINE}" != "native"; then
+ sed -i -e "s,${D},,g" \
+ -e "s,-isystem${STAGING_INCDIR} ,,g" \
+ -e "s,${STAGING_LIBDIR},${libdir},g" \
+ -e "s,${STAGING_BINDIR},${bindir},g" \
+ -e "s,${STAGING_INCDIR},${includedir},g" \
+ -e "s,${CROSS_DIR}${base_bindir}/,,g" \
+ ${D}${bindir}/h2xs \
+ ${D}${bindir}/h2ph \
+ ${D}${datadir}/perl/${PV}/pod/*.pod \
+ ${D}${datadir}/perl/${PV}/cacheout.pl \
+ ${D}${datadir}/perl/${PV}/FileCache.pm \
+ ${D}${libdir}/perl/${PV}/Config.pm \
+ ${D}${libdir}/perl/${PV}/Config_heavy.pl \
+ ${D}${libdir}/perl/${PV}/CORE/perl.h \
+ ${D}${libdir}/perl/${PV}/CORE/pp.h
+ fi
+}
+do_stage() {
+ install -d ${STAGING_DIR}/${HOST_SYS}/perl \
+ ${STAGING_DIR}/${BUILD_SYS}/lib/perl/${PV} \
+ ${STAGING_LIBDIR}/perl/${PV}/CORE
+ # target config, used by cpan.bbclass to extract version information
+ install config.sh ${STAGING_DIR}/${HOST_SYS}/perl/
+ # target configuration, used by native perl when cross-compiling
+ install lib/Config_heavy.pl ${STAGING_DIR}/${BUILD_SYS}/lib/perl/${PV}/Config_heavy-target.pl
+ # perl shared library headers
+ for i in av.h embed.h gv.h keywords.h op.h perlio.h pp.h regexp.h \
+ uconfig.h XSUB.h cc_runtime.h embedvar.h handy.h opnames.h \
+ perliol.h pp_proto.h regnodes.h unixish.h config.h EXTERN.h \
+ hv.h malloc_ctl.h pad.h perlsdio.h proto.h scope.h utf8.h \
+ cop.h fakesdio.h INTERN.h mg.h patchlevel.h perlsfio.h \
+ reentr.h sv.h utfebcdic.h cv.h fakethr.h intrpvar.h \
+ nostdio.h perlapi.h perlvars.h reentr.inc thrdvar.h util.h \
+ dosish.h form.h iperlsys.h opcode.h perl.h perly.h regcomp.h \
+ thread.h warnings.h; do
+ install $i ${STAGING_LIBDIR}/perl/${PV}/CORE
+ done
+}
+
+PACKAGES = "perl-dbg perl perl-misc perl-lib perl-dev perl-pod perl-doc"
+FILES_${PN} = "${bindir}/perl ${bindir}/perl${PV}"
+FILES_${PN}-lib = "${libdir}/libperl.so* ${libdir}/perl/${PVM} ${datadir}/perl/${PVM}"
+FILES_${PN}-dev = "${libdir}/perl/${PV}/CORE"
+FILES_${PN}-pod = "${datadir}/perl/${PV}/pod \
+ ${datadir}/perl/${PV}/*/*.pod \
+ ${datadir}/perl/${PV}/*/*/*.pod \
+ ${libdir}/perl/${PV}/*.pod"
+FILES_perl-misc = "${bindir}/*"
+FILES_${PN}-dbg += "${libdir}/perl/${PV}/auto/*/.debug \
+ ${libdir}/perl/${PV}/auto/*/*/.debug \
+ ${libdir}/perl/${PV}/auto/*/*/*/.debug \
+ ${datadir}/perl/${PV}/auto/*/.debug \
+ ${datadir}/perl/${PV}/auto/*/*/.debug \
+ ${datadir}/perl/${PV}/auto/*/*/*/.debug \
+ ${libdir}/perl/${PV}/CORE/.debug"
+FILES_${PN}-doc = "${datadir}/perl/${PV}/*/*.txt \
+ ${datadir}/perl/${PV}/*/*/*.txt \
+ ${datadir}/perl/${PV}/Net/*.eg \
+ ${datadir}/perl/${PV}/CGI/eg \
+ ${datadir}/perl/${PV}/ExtUtils/PATCHING \
+ ${datadir}/perl/${PV}/ExtUtils/NOTES \
+ ${datadir}/perl/${PV}/ExtUtils/typemap \
+ ${datadir}/perl/${PV}/ExtUtils/MANIFEST.SKIP \
+ ${datadir}/perl/${PV}/CPAN/SIGNATURE \
+ ${datadir}/perl/${PV}/CPAN/PAUSE2003.pub \
+ ${datadir}/perl/${PV}/B/assemble \
+ ${datadir}/perl/${PV}/B/makeliblinks \
+ ${datadir}/perl/${PV}/B/disassemble \
+ ${datadir}/perl/${PV}/B/cc_harness \
+ ${datadir}/perl/${PV}/ExtUtils/xsubpp \
+ ${datadir}/perl/${PV}/Encode/encode.h \
+ ${datadir}/perl/${PV}/unicore/mktables \
+ ${datadir}/perl/${PV}/unicore/mktables.lst \
+ ${datadir}/perl/${PV}/unicore/version"
+
+RPROVIDES_perl-lib = "perl-lib"
+
+# Create a perl-modules package recommending all the other perl
+# packages (actually the non modules packages and not created too)
+ALLOW_EMPTY_perl-modules = "1"
+PACKAGES_append = " perl-modules "
+RRECOMMENDS_perl-modules = "${@bb.data.getVar('PACKAGES', d, 1).replace('perl-modules ', '').replace('perl-dbg ', '').replace('perl-misc ', '').replace('perl-dev ', '').replace('perl-pod ', '').replace('perl-doc ', '')}"
+
+python populate_packages_prepend () {
+ libdir = bb.data.expand('${libdir}/perl/${PV}', d)
+ do_split_packages(d, libdir, 'auto/(.*)(?!\.debug)/', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
+ do_split_packages(d, libdir, '(.*)\.(pm|pl|e2x)', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
+ datadir = bb.data.expand('${datadir}/perl/${PV}', d)
+ do_split_packages(d, datadir, 'auto/(.*)(?!\.debug)/', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
+ do_split_packages(d, datadir, '(.*)\.(pm|pl|e2x)', 'perl-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True)
+}
+
+PACKAGES_DYNAMIC = "perl-module-*"
+
+require perl-rdepends_${PV}.inc
+require perl-rprovides.inc
+
+PARALLEL_MAKE = ""
diff --git a/packages/phalanx/phalanx_22.bb b/packages/phalanx/phalanx_22.bb
index fbc6568b91..a59a696809 100644
--- a/packages/phalanx/phalanx_22.bb
+++ b/packages/phalanx/phalanx_22.bb
@@ -1,13 +1,13 @@
DESCRIPTION = "Phalanx is a chess playing engine."
SECTION = "opie/libs"
PRIORITY = "optional"
-PR = "r3"
+PR = "r4"
LICENSE = "GPL"
-SRC_URI = "ftp://ftp.math.muni.cz/pub/math/people/Dobes/phalanx-22.tar.gz \
+SRC_URI = "http://ftp.debian.org/debian/pool/main/p/phalanx/phalanx_22.orig.tar.gz \
file://gcc3.patch;patch=1 \
file://capabilities \
file://description"
-S = "${WORKDIR}/Phalanx-XXII"
+S = "${WORKDIR}/phalanx-22.orig"
do_compile() {
oe_runmake CC="${CC}" CFLAGS="${CFLAGS}" STRIP=echo LD="${CC}"
@@ -24,3 +24,4 @@ do_install() {
}
FILES_${PN} = "${palmtopdir}/chess"
+FILES_${PN}-dbg += "${palmtopdir}/chess/engines/Phalanx/.debug"
diff --git a/packages/php/php-5.2.0/.mtn2git_empty b/packages/php/php-5.2.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/php/php-5.2.0/.mtn2git_empty
diff --git a/packages/php/php-5.2.0/acinclude-xml2-config.patch b/packages/php/php-5.2.0/acinclude-xml2-config.patch
new file mode 100644
index 0000000000..bf519d2934
--- /dev/null
+++ b/packages/php/php-5.2.0/acinclude-xml2-config.patch
@@ -0,0 +1,18 @@
+--- /orig-acinclude.m4 2007-02-20 15:03:25.000000000 +0200
++++ /acinclude.m4 2007-02-20 15:03:24.000000000 +0200
+@@ -2359,12 +2359,9 @@
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+ [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
++
++ ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
++
+ ])
+
+ if test -x "$ac_cv_php_xml2_config_path"; then
diff --git a/packages/php/php-5.2.0/autotools.patch b/packages/php/php-5.2.0/autotools.patch
new file mode 100644
index 0000000000..9f1289fd11
--- /dev/null
+++ b/packages/php/php-5.2.0/autotools.patch
@@ -0,0 +1,95 @@
+diff -u'rNF^function' php-5.1.4~/acinclude.m4 php-5.1.4/acinclude.m4
+--- php-5.1.4~/acinclude.m4 2006-04-10 08:17:36.000000000 -0400
++++ php-5.1.4/acinclude.m4 2006-08-16 22:32:58.000000000 -0400
+@@ -818,10 +818,10 @@
+ OVERALL_TARGET=[]ifelse($1,,php,$1)
+ php_c_pre='$(LIBTOOL) --mode=compile $(CC)'
+ php_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)'
+- php_c_post=
++ php_c_post=' && echo "[#] Generated by PHP badness - GNU libtool" > $[@] && echo "pic_object=none" >> $[@] && echo "non_pic_object=$[@]" | sed -e "s,=.*/,=,; s,\.lo,\.o,g" >> $[@]'
+ php_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)'
+ php_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)'
+- php_cxx_post=
++ php_cxx_post=' && echo "[#] Generated by PHP badness - GNU libtool" > $[@] && echo "pic_object=none" >> $[@] && echo "non_pic_object=$[@]" | sed -e "s,=.*/,=,; s,\.lo,\.o,g" >> $[@]'
+ php_lo=lo
+
+ case $with_pic in
+@@ -1670,6 +1670,7 @@
+ have_fopen_cookie=yes
+
+ dnl even newer glibcs have a different seeker definition...
++AC_CACHE_CHECK([if cookie io functions use off64_t], php_cv_lib_cookie_io_functions_use_off64_t,
+ AC_TRY_RUN([
+ #define _GNU_SOURCE
+ #include <stdio.h>
+@@ -1702,10 +1703,11 @@
+ cookie_io_functions_use_off64_t=yes
+ ], [
+ cookie_io_functions_use_off64_t=no
+-], [
+- cookie_io_functions_use_off64_t=no
+-])
+-
++],
++[ php_cv_lib_cookie_io_functions_use_off64_t=yes ],
++[ php_cv_lib_cookie_io_functions_use_off64_t=no ] ))
++
++
+ else
+
+ dnl older glibc versions (up to 2.1.2 ?)
+diff -u'rNF^function' php-5.1.4~/configure.in php-5.1.4/configure.in
+--- php-5.1.4~/configure.in 2006-05-03 19:30:02.000000000 -0400
++++ php-5.1.4/configure.in 2006-08-16 20:39:19.000000000 -0400
+@@ -209,6 +209,7 @@
+
+ sinclude(Zend/Zend.m4)
+ sinclude(TSRM/tsrm.m4)
++sinclude(TSRM/threads.m4)
+
+
+ divert(2)
+@@ -255,11 +255,6 @@
+ PTHREADS_FLAGS
+ fi
+
+-if test "$PHP_ENABLE_FASTCGI" = "yes"; then
+- PHP_CONFIGURE_PART(Running FastCGI checks)
+- sinclude(sapi/cgi/libfcgi/acinclude.m4)
+- sinclude(sapi/cgi/libfcgi/libfcgi.m4)
+-fi
+
+ divert(3)
+
+diff -u'rNF^function' php-5.1.4~/scripts/phpize.m4 php-5.1.4/scripts/phpize.m4
+--- php-5.1.4~/scripts/phpize.m4 2006-04-10 08:16:17.000000000 -0400
++++ php-5.1.4/scripts/phpize.m4 2006-08-16 20:39:19.000000000 -0400
+@@ -3,7 +3,6 @@
+ divert(1)
+
+ AC_PREREQ(2.13)
+-AC_INIT(config.m4)
+
+ PHP_CONFIG_NICE(config.nice)
+
+@@ -69,8 +68,6 @@
+ PHP_PROG_RE2C
+ PHP_PROG_AWK
+
+-sinclude(config.m4)
+-
+ enable_static=no
+ enable_shared=yes
+
+diff -u'rNF^function' php-5.1.4~/TSRM/threads.m4 php-5.1.4/TSRM/threads.m4
+--- php-5.1.4~/TSRM/threads.m4 2005-04-27 09:22:18.000000000 -0400
++++ php-5.1.4/TSRM/threads.m4 2006-08-16 20:39:19.000000000 -0400
+@@ -86,7 +86,7 @@
+ pthreads_working=no
+ ], [
+ dnl For cross compiling running this test is of no use. NetWare supports pthreads
+- pthreads_working=no
++ pthreads_working=yes
+ case $host_alias in
+ *netware*)
+ pthreads_working=yes
diff --git a/packages/php/php-5.2.0/pear-makefile.patch b/packages/php/php-5.2.0/pear-makefile.patch
new file mode 100644
index 0000000000..26de98a48f
--- /dev/null
+++ b/packages/php/php-5.2.0/pear-makefile.patch
@@ -0,0 +1,11 @@
+--- /pear/orig-Makefile.frag 2007-03-16 12:18:33.000000000 +0200
++++ /pear/Makefile.frag 2007-03-16 12:35:48.000000000 +0200
+@@ -6,7 +6,7 @@
+ PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dsafe_mode=0 -dopen_basedir= -derror_reporting=E_ALL -dmemory_limit=-1 -ddetect_unicode=0
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)"
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) $(builddir)/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)"
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
diff --git a/packages/php/php-native_4.3.10.bb b/packages/php/php-native_4.3.10.bb
deleted file mode 100644
index c90aa83c01..0000000000
--- a/packages/php/php-native_4.3.10.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-SECTION = "console/network"
-require php_${PV}.bb
-inherit native
-FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files"
-DEPENDS = "zlib-native"
diff --git a/packages/php/php-native_4.3.6.bb b/packages/php/php-native_4.3.6.bb
deleted file mode 100644
index c90aa83c01..0000000000
--- a/packages/php/php-native_4.3.6.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-SECTION = "console/network"
-require php_${PV}.bb
-inherit native
-FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files"
-DEPENDS = "zlib-native"
diff --git a/packages/php/php_4.3.10.bb b/packages/php/php_4.3.10.bb
deleted file mode 100644
index c15a9ee486..0000000000
--- a/packages/php/php_4.3.10.bb
+++ /dev/null
@@ -1 +0,0 @@
-require php.inc
diff --git a/packages/php/php_4.3.6.bb b/packages/php/php_4.3.6.bb
deleted file mode 100644
index c15a9ee486..0000000000
--- a/packages/php/php_4.3.6.bb
+++ /dev/null
@@ -1 +0,0 @@
-require php.inc
diff --git a/packages/php/php_5.1.4.bb b/packages/php/php_5.1.4.bb
index 34d6ea677d..a9ea9d2ed6 100644
--- a/packages/php/php_5.1.4.bb
+++ b/packages/php/php_5.1.4.bb
@@ -1,7 +1,7 @@
SECTION = "console/network"
DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI."
LICENSE = "PHP"
-DEPENDS = "zlib libxml2 mysql libiconv"
+DEPENDS = "zlib libxml2 mysql virtual/libiconv"
SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
file://autotools.patch;patch=1 \
diff --git a/packages/php/php_5.2.0.bb b/packages/php/php_5.2.0.bb
index 919d96f8e3..e1ce34b8e6 100644
--- a/packages/php/php_5.2.0.bb
+++ b/packages/php/php_5.2.0.bb
@@ -1,13 +1,15 @@
SECTION = "console/network"
DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI."
LICENSE = "PHP"
-DEPENDS = "zlib libxml2 mysql libiconv"
+DEPENDS = "zlib libxml2 mysql virtual/libiconv php-native"
+
SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
file://autotools.patch;patch=1 \
file://acinclude-xml2-config.patch;patch=1 \
+ file://pear-makefile.patch;patch=1 \
"
S = "${WORKDIR}/php-${PV}"
-PR = "r0"
+PR = "r1"
inherit autotools
@@ -20,14 +22,22 @@ EXTRA_OECONF = " --without-iconv \
--enable-sockets \
--enable-memory-limit \
--enable-wddx \
- --with-zlib"
+ --enable-embedded-mysqli \
+ --enable-magic-quotes \
+ --with-zlib \
+ --with-mysql="${STAGING_DIR}/${TARGET_SYS}" \
+ --with-mysqli="${STAGING_BINDIR_NATIVE}/mysql_config" \
+"
+
+
-EXTRA_OECONF += " --without-pear --with-libxml-dir=${STAGING_BINDIR} "
-export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
# Uncomment the following two lines, and comment the above to enable PEAR
-#EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR_NATIVE}/php"
-#DEPENDS += " php-native"
+EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR} --with-libxml-dir=${STAGING_BINDIR}"
+
+export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
+export PHP_NATIVE_DIR="${STAGING_BINDIR_NATIVE}"
+export PHP_PEAR_PHP_BIN="/usr/bin/php"
acpaths = ""
@@ -39,3 +49,44 @@ do_install () {
oe_runmake 'INSTALL_ROOT=${D}' install
}
+
+
+PACKAGES = "${PN}-dbg \
+ ${PN}-cli \
+ ${PN}-pear \
+ ${PN}-dev \
+ ${PN} \
+"
+
+
+FILES_${PN}-dbg ="/usr/bin/.debug"
+
+FILES_${PN}-cli ="/usr/bin/php"
+
+FILES_${PN}-pear ="/usr/bin/pear* /usr/bin/pecl \
+ /usr/lib/php/PEAR \
+ /usr/lib/php/PEAR.php \
+ /usr/lib/php/System.php /usr/lib/php/peclcmd.php /usr/lib/php/pearcmd.php \
+ /usr/lib/php/.channels /usr/lib/php/.channels/.alias \
+ /usr/lib/php/.channels\__uri.reg \
+ /usr/lib/php/.channels\pear.php.net.reg /usr/lib/php/.channels/pecl.php.net.reg \
+ /usr/lib/php/.registry \
+ /usr/lib/php/Archive/Tar.php \
+ /usr/lib/php/Console/Getopt.php /usr/lib/php/OS/Guess.php \
+ /usr/lib/php/.depdb /usr/lib/php/.depdblock /usr/lib/php/.filemap \
+ /usr/lib/php/.lock"
+
+
+FILES_${PN}-dev ="/usr/include/php /usr/include/build \
+ /usr/bin/phpize /usr/bin/php-config"
+
+FILES_${PN} ="/usr/lib/php"
+FILES_${PN} +="/usr/bin"
+
+
+
+RDEPENDS_${PN}-pear =${PN}
+RDEPENDS_${PN}-cli =${PN}
+RDEPENDS_${PN}-dev =${PN}
+
+
diff --git a/packages/picocom/picocom/.mtn2git_empty b/packages/picocom/picocom/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/picocom/picocom/.mtn2git_empty
diff --git a/packages/picocom/picocom/gcc4.patch b/packages/picocom/picocom/gcc4.patch
new file mode 100644
index 0000000000..867ca11bf3
--- /dev/null
+++ b/packages/picocom/picocom/gcc4.patch
@@ -0,0 +1,12 @@
+Index: picocom-1.4/picocom.c
+===================================================================
+--- picocom-1.4.orig/picocom.c 2004-08-12 13:45:11.000000000 +0200
++++ picocom-1.4/picocom.c 2007-03-08 14:40:30.000000000 +0100
+@@ -37,6 +37,7 @@
+ #include <sys/stat.h>
+ #include <sys/wait.h>
+ #include <limits.h>
++#include <bits/posix1_lim.h>
+
+ #define _GNU_SOURCE
+ #include <getopt.h>
diff --git a/packages/picocom/picocom/nolock.patch b/packages/picocom/picocom/nolock.patch
new file mode 100644
index 0000000000..42ca57f927
--- /dev/null
+++ b/packages/picocom/picocom/nolock.patch
@@ -0,0 +1,35 @@
+diff -Naur picocom-1.4.orig/picocom.c picocom-1.4/picocom.c
+--- picocom-1.4.orig/picocom.c 2004-08-12 13:45:11.000000000 +0200
++++ picocom-1.4/picocom.c 2007-03-12 00:23:01.000000000 +0100
+@@ -790,7 +790,9 @@
+ {"escape", required_argument, 0, 'e'},
+ {"noinit", no_argument, 0, 'i'},
+ {"noreset", no_argument, 0, 'r'},
++#ifdef UUCP_LOCK_DIR
+ {"nolock", no_argument, 0, 'l'},
++#endif
+ {"flow", required_argument, 0, 'f'},
+ {"baud", required_argument, 0, 'b'},
+ {"parity", required_argument, 0, 'p'},
+@@ -827,9 +829,11 @@
+ case 'r':
+ opts.noreset = 1;
+ break;
++#ifdef UUCP_LOCK_DIR
+ case 'l':
+ opts.nolock = 1;
+ break;
++#endif
+ case 'e':
+ if ( isupper(optarg[0]) )
+ opts.escape = optarg[0] - 'A' + 1;
+@@ -930,7 +934,9 @@
+ printf("escape is : C-%c\n", 'a' + opts.escape - 1);
+ printf("noinit is : %s\n", opts.noinit ? "yes" : "no");
+ printf("noreset is : %s\n", opts.noreset ? "yes" : "no");
++#ifdef UUCP_LOCK_DIR
+ printf("nolock is : %s\n", opts.nolock ? "yes" : "no");
++#endif
+ printf("send_cmd is : %s\n", opts.send_cmd);
+ printf("receive_cmd is : %s\n", opts.receive_cmd);
+ printf("\n");
diff --git a/packages/picocom/picocom_1.4.bb b/packages/picocom/picocom_1.4.bb
index 04640903b5..c13bdabcc3 100644
--- a/packages/picocom/picocom_1.4.bb
+++ b/packages/picocom/picocom_1.4.bb
@@ -1,8 +1,12 @@
-DESCRIPTION = "Picocom is a lightweight and minimal (~20K) dumb-terminal emulation program. "
+DESCRIPTION = "Lightweight and minimal (~20K) dumb-terminal emulation program."
SECTION = "console/utils"
PRIORITY = "optional"
LICENSE = "GPL"
-SRC_URI = "http://efault.net/npat/hacks/picocom/dist/picocom-${PV}.tar.gz"
+PR = "r2"
+
+SRC_URI = "http://efault.net/npat/hacks/picocom/dist/picocom-${PV}.tar.gz \
+ file://nolock.patch;patch=1 \
+ file://gcc4.patch;patch=1"
CFLAGS_append = ' -DVERSION_STR=\\"${PV}\\"'
diff --git a/packages/pimlico/.mtn2git_empty b/packages/pimlico/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pimlico/.mtn2git_empty
diff --git a/packages/pimlico/contacts.inc b/packages/pimlico/contacts.inc
new file mode 100644
index 0000000000..5fa493fab3
--- /dev/null
+++ b/packages/pimlico/contacts.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "Address-book application."
+LICENSE = "LGPL"
+SECTION = "x11"
+DEPENDS = "glib-2.0 gtk+ eds-dbus"
+RDEPENDS = "libedata-book"
+
+inherit autotools pkgconfig
+
+do_install_append () {
+ install -d ${D}/${datadir}/pixmaps
+ install -m 0644 ${WORKDIR}/stock_contact.png ${D}/${datadir}/pixmaps
+ install -m 0644 ${WORKDIR}/stock_person.png ${D}/${datadir}/pixmaps
+}
+
+FILES_${PN} += "${datadir}/pixmaps/stock_contact.png \
+ ${datadir}/pixmaps/stock_person.png"
diff --git a/packages/pimlico/contacts_0.5.bb b/packages/pimlico/contacts_0.5.bb
new file mode 100644
index 0000000000..6f771e99bf
--- /dev/null
+++ b/packages/pimlico/contacts_0.5.bb
@@ -0,0 +1,5 @@
+require contacts.inc
+
+SRC_URI = "http://pimlico-project.org/sources/${PN}/${PN}-${PV}.tar.gz \
+ file://stock_contact.png \
+ file://stock_person.png"
diff --git a/packages/pimlico/contacts_svn.bb b/packages/pimlico/contacts_svn.bb
new file mode 100644
index 0000000000..5169690781
--- /dev/null
+++ b/packages/pimlico/contacts_svn.bb
@@ -0,0 +1,17 @@
+require contacts.inc
+
+#DEPENDS += "gnome-vfs"
+#RDEPENDS += "gnome-vfs-plugin-file"
+#RRECOMMENDS += "gnome-vfs-plugin-http"
+
+PV = "0.5+svn${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http \
+ file://stock_contact.png \
+ file://stock_person.png"
+
+S = "${WORKDIR}/trunk"
+
+#EXTRA_OECONF = "--enable-gnome-vfs"
diff --git a/packages/pimlico/dates.inc b/packages/pimlico/dates.inc
new file mode 100644
index 0000000000..d4debfd28d
--- /dev/null
+++ b/packages/pimlico/dates.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "Dates is a calendar application."
+LICENSE = "LGPL"
+SECTION = "x11"
+DEPENDS = "glib-2.0 gtk+ libglade eds-dbus"
+RDEPENDS = "libedata-cal"
+RCONFLICTS_${PN} = "openmoko-dates"
+
+inherit autotools pkgconfig gtk-icon-cache
+
+# EXTRA_OECONF = "--disable-debug"
+EXTRA_OECONF = "--enable-owl=true"
+
+FILES_${PN} += "${datadir}/pixmaps/dates.png"
+
+do_install_append () {
+ install -d ${D}/${datadir}/pixmaps
+ install -m 0644 ${D}/${datadir}/icons/hicolor/48x48/apps/dates.png ${D}/${datadir}/pixmaps/
+}
+
+PRIVATE_LIBS = "libgtkdatesview.so.0"
diff --git a/packages/pimlico/dates_0.4.3.bb b/packages/pimlico/dates_0.4.3.bb
new file mode 100644
index 0000000000..86f548916e
--- /dev/null
+++ b/packages/pimlico/dates_0.4.3.bb
@@ -0,0 +1,5 @@
+require dates.inc
+
+PR = "r0"
+
+SRC_URI = "http://projects.o-hand.com/sources/dates/dates-${PV}.tar.gz"
diff --git a/packages/pimlico/dates_svn.bb b/packages/pimlico/dates_svn.bb
new file mode 100644
index 0000000000..facafe0a2a
--- /dev/null
+++ b/packages/pimlico/dates_svn.bb
@@ -0,0 +1,8 @@
+require dates.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.4.2+svn${SRCDATE}"
+S = "${WORKDIR}/trunk"
+
+SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http"
diff --git a/packages/pimlico/files/.mtn2git_empty b/packages/pimlico/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pimlico/files/.mtn2git_empty
diff --git a/packages/openmoko-pim/openmoko-contacts/stock_contact.png b/packages/pimlico/files/stock_contact.png
index 123b4485ac..123b4485ac 100644
--- a/packages/openmoko-pim/openmoko-contacts/stock_contact.png
+++ b/packages/pimlico/files/stock_contact.png
Binary files differ
diff --git a/packages/openmoko-pim/openmoko-contacts/stock_person.png b/packages/pimlico/files/stock_person.png
index 2b1328b4e2..2b1328b4e2 100644
--- a/packages/openmoko-pim/openmoko-contacts/stock_person.png
+++ b/packages/pimlico/files/stock_person.png
Binary files differ
diff --git a/packages/pimlico/files/tasks-single.diff b/packages/pimlico/files/tasks-single.diff
new file mode 100644
index 0000000000..dd807ea256
--- /dev/null
+++ b/packages/pimlico/files/tasks-single.diff
@@ -0,0 +1,9 @@
+Index: tasks/data/tasks.desktop.in
+===================================================================
+--- tasks/data/tasks.desktop.in (revision 115)
++++ tasks/data/tasks.desktop.in (working copy)
+@@ -9,3 +9,4 @@
+ Categories=GTK;Application;Office;ProjectManagement;
+ Terminal=false
+ StartupNotify=true
++SingleInstance=true
diff --git a/packages/pimlico/tasks.inc b/packages/pimlico/tasks.inc
new file mode 100644
index 0000000000..797969db62
--- /dev/null
+++ b/packages/pimlico/tasks.inc
@@ -0,0 +1,6 @@
+DESCRIPTION = "Task list application"
+LICENSE = "GPL"
+SECTION = "x11"
+DEPENDS = "glib-2.0 libsexy gtk+ eds-dbus"
+
+inherit autotools pkgconfig gtk-icon-cache
diff --git a/packages/pimlico/tasks_0.9.bb b/packages/pimlico/tasks_0.9.bb
new file mode 100644
index 0000000000..d3e1b695e9
--- /dev/null
+++ b/packages/pimlico/tasks_0.9.bb
@@ -0,0 +1,5 @@
+require tasks.inc
+
+PR = "r0"
+
+SRC_URI = "http://pimlico-project.org/sources/${PN}/${P}.tar.gz"
diff --git a/packages/pimlico/tasks_svn.bb b/packages/pimlico/tasks_svn.bb
new file mode 100644
index 0000000000..9d9786cbdd
--- /dev/null
+++ b/packages/pimlico/tasks_svn.bb
@@ -0,0 +1,8 @@
+require tasks.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "0.4+svn${SRCDATE}"
+S = "${WORKDIR}/trunk"
+
+SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http"
diff --git a/packages/pipepanic/files/fix-datadir.patch b/packages/pipepanic/files/fix-datadir.patch
index b7df38a3fb..479b266efe 100644
--- a/packages/pipepanic/files/fix-datadir.patch
+++ b/packages/pipepanic/files/fix-datadir.patch
@@ -10,7 +10,7 @@
#define TRUE 1
#define VERSION "0.1.1"
-#define DATADIR "/opt/QtPalmtop/share/pipepanic/"
-+#define DATADIR "/usr/share"
++#define DATADIR "/usr/share/pipepanic/"
#define DIGITS24BMP "digits24.bmp"
#define DIGITS48BMP "digits48.bmp"
#define TILES24BMP "tiles24.bmp"
diff --git a/packages/pipepanic/pipepanic_0.1.1.bb b/packages/pipepanic/pipepanic_0.1.1.bb
index d1505b3b7a..91d53b9524 100644
--- a/packages/pipepanic/pipepanic_0.1.1.bb
+++ b/packages/pipepanic/pipepanic_0.1.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Pipepanic is a pipe connecting game using libSDL. \
Connect as many different shaped pipes together as possible within the time given."
HOMEPAGE = "http://www.users.waitrose.com/~thunor/pipepanic/"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.users.waitrose.com/~thunor/pipepanic/dload/pipepanic-${PV}-source.tar.gz \
file://fix-datadir.patch;patch=1"
diff --git a/packages/pkgconfig/pkgconfig-0.22/.mtn2git_empty b/packages/pkgconfig/pkgconfig-0.22/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig-0.22/.mtn2git_empty
diff --git a/packages/pkgconfig/pkgconfig-0.22/autofoo.patch b/packages/pkgconfig/pkgconfig-0.22/autofoo.patch
new file mode 100644
index 0000000000..97293cee1f
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig-0.22/autofoo.patch
@@ -0,0 +1,513 @@
+---
+ glib-1.2.8/acglib.m4 | 12 +-
+ glib-1.2.8/configure.in | 212 ++++++++++++++++++++++++++++++------------------
+ 2 files changed, 140 insertions(+), 84 deletions(-)
+
+Index: pkg-config-0.22/glib-1.2.8/acglib.m4
+===================================================================
+--- pkg-config-0.22.orig/glib-1.2.8/acglib.m4 2007-08-01 20:00:00.000000000 +0100
++++ pkg-config-0.22/glib-1.2.8/acglib.m4 2007-08-01 20:11:08.000000000 +0100
+@@ -10,7 +10,7 @@ $1
+ AC_DIVERT_POP()])])])
+
+ dnl GLIB_IF_VAR_EQ (ENV_VAR, VALUE [, EQUALS_ACTION] [, ELSE_ACTION])
+-AC_DEFUN(GLIB_IF_VAR_EQ,[
++AC_DEFUN([GLIB_IF_VAR_EQ],[
+ case "$[$1]" in
+ "[$2]"[)]
+ [$3]
+@@ -21,7 +21,7 @@ AC_DEFUN(GLIB_IF_VAR_EQ,[
+ esac
+ ])
+ dnl GLIB_STR_CONTAINS (SRC_STRING, SUB_STRING [, CONTAINS_ACTION] [, ELSE_ACTION])
+-AC_DEFUN(GLIB_STR_CONTAINS,[
++AC_DEFUN([GLIB_STR_CONTAINS],[
+ case "[$1]" in
+ *"[$2]"*[)]
+ [$3]
+@@ -32,12 +32,12 @@ AC_DEFUN(GLIB_STR_CONTAINS,[
+ esac
+ ])
+ dnl GLIB_ADD_TO_VAR (ENV_VARIABLE, CHECK_STRING, ADD_STRING)
+-AC_DEFUN(GLIB_ADD_TO_VAR,[
++AC_DEFUN([GLIB_ADD_TO_VAR],[
+ GLIB_STR_CONTAINS($[$1], [$2], [$1]="$[$1]", [$1]="$[$1] [$3]")
+ ])
+
+ dnl GLIB_SIZEOF (INCLUDES, TYPE, ALIAS [, CROSS-SIZE])
+-AC_DEFUN(GLIB_SIZEOF,
++AC_DEFUN([GLIB_SIZEOF],
+ [changequote(<<, >>)dnl
+ dnl The name to #define.
+ define(<<AC_TYPE_NAME>>, translit(glib_sizeof_$3, [a-z *], [A-Z_P]))dnl
+@@ -62,7 +62,7 @@ undefine([AC_CV_NAME])dnl
+ ])
+
+ dnl GLIB_BYTE_CONTENTS (INCLUDES, TYPE, ALIAS, N_BYTES, INITIALIZER)
+-AC_DEFUN(GLIB_BYTE_CONTENTS,
++AC_DEFUN([GLIB_BYTE_CONTENTS],
+ [changequote(<<, >>)dnl
+ dnl The name to #define.
+ define(<<AC_TYPE_NAME>>, translit(glib_byte_contents_$3, [a-z *], [A-Z_P]))dnl
+@@ -92,7 +92,7 @@ undefine([AC_CV_NAME])dnl
+ ])
+
+ dnl GLIB_SYSDEFS (INCLUDES, DEFS_LIST, OFILE [, PREFIX])
+-AC_DEFUN(GLIB_SYSDEFS,
++AC_DEFUN([GLIB_SYSDEFS],
+ [glib_sysdefso="translit($3, [-_a-zA-Z0-9 *], [-_a-zA-Z0-9])"
+ glib_sysdef_msg=`echo $2 | sed 's/:[[^ ]]*//g'`
+ if test "x`(echo '\n') 2>/dev/null`" != 'x\n'; then
+Index: pkg-config-0.22/glib-1.2.8/configure.in
+===================================================================
+--- pkg-config-0.22.orig/glib-1.2.8/configure.in 2007-08-01 18:03:34.000000000 +0100
++++ pkg-config-0.22/glib-1.2.8/configure.in 2007-05-23 11:47:53.000000000 +0100
+@@ -1,10 +1,11 @@
+ dnl ***********************************
+ dnl *** include special GLib macros ***
+ dnl ***********************************
+-builtin(include, acglib.m4)dnl
++dnl no need, just use aclocal -I . --CL
++dnl builtin(include, acglib.m4)dnl
+
+ # require autoconf 2.13
+-AC_PREREQ(2.13)
++AC_PREREQ(2.53)
+
+ # init autoconf (and check for presence of glist.c)
+ AC_INIT(glist.c)
+@@ -13,11 +14,48 @@ AC_INIT(glist.c)
+ cflags_set=${CFLAGS+set}
+
+ # we rewrite this file
++if test "x$cross_compiling" != "xyes"; then
+ rm -f glibconfig-sysdefs.h
++fi
++
++# config defines
++
++AH_TEMPLATE([ENABLE_MEM_CHECK],
++ [Define if enabling memory checking])
++AH_TEMPLATE([ENABLE_MEM_PROFILE], [])
++AH_TEMPLATE([GLIB_BINARY_AGE], [])
++AH_TEMPLATE([GLIB_BYTE_CONTENTS_GMUTEX], [])
++AH_TEMPLATE([GLIB_INTERFACE_AGE], [])
++AH_TEMPLATE([GLIB_MAJOR_VERSION], [])
++AH_TEMPLATE([GLIB_MINOR_VERSION], [])
++AH_TEMPLATE([GLIB_MICRO_VERSION], [])
++AH_TEMPLATE([GLIB_SIZEOF_GMUTEX], [])
++AH_TEMPLATE([G_COMPILED_WITH_DEBUGGING], [])
++AH_TEMPLATE([G_HAVE_INLINE], [])
++AH_TEMPLATE([G_HAVE___INLINE], [])
++AH_TEMPLATE([G_HAVE___INLINE__], [])
++AH_TEMPLATE([G_THREAD_SOURCE], [])
++AH_TEMPLATE([G_VA_COPY], [])
++AH_TEMPLATE([G_VA_COPY_AS_ARRAY], [])
++AH_TEMPLATE([HAVE_BROKEN_WCTYPE], [])
++AH_TEMPLATE([HAVE_GETPWUID_R], [])
++AH_TEMPLATE([HAVE_GETPWUID_R_POSIX], [])
++AH_TEMPLATE([HAVE_PTHREAD_COND_TIMEDWAIT_POSIX], [])
++AH_TEMPLATE([HAVE_PTHREAD_GETSPECIFIC_POSIX], [])
++AH_TEMPLATE([HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX], [])
++AH_TEMPLATE([HAVE_WCHAR_H], [])
++AH_TEMPLATE([HAVE_WCTYPE_H], [])
++AH_TEMPLATE([NO_FD_SET], [])
++AH_TEMPLATE([NO_SYS_ERRLIST], [])
++AH_TEMPLATE([NO_SYS_SIGLIST], [])
++AH_TEMPLATE([NO_SYS_SIGLIST_DECL], [])
++AH_TEMPLATE([REALLOC_0_WORKS], [])
++
+
+ dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
+ dnl are available for $ac_help expansion (don't we all *love* autoconf?)
+-GLIB_AC_DIVERT_BEFORE_HELP([
++#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
++#dnl
+ #
+ # The following version number definitions apply to GLib, GModule and GThread
+ # as a whole, so if changes occoured in any of them, they are all
+@@ -38,7 +76,7 @@ GLIB_INTERFACE_AGE=8
+ GLIB_BINARY_AGE=8
+ GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION
+ dnl
+-])
++#AC_DIVERT_POP()dnl
+
+ AC_SUBST(GLIB_MAJOR_VERSION)
+ AC_SUBST(GLIB_MINOR_VERSION)
+@@ -72,22 +110,20 @@ AC_DEFINE_UNQUOTED(GLIB_INTERFACE_AGE, $
+ AC_DEFINE_UNQUOTED(GLIB_BINARY_AGE, $GLIB_BINARY_AGE)
+
+ dnl Initialize libtool
+-AC_PROG_LIBTOOL
++AM_PROG_LIBTOOL
+
+ dnl Initialize maintainer mode
+ AM_MAINTAINER_MODE
+
+-AC_CANONICAL_HOST
+-
+ dnl figure debugging default, prior to $ac_help setup
+ dnl
+-GLIB_AC_DIVERT_BEFORE_HELP([
++#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
+ if test `expr $GLIB_MINOR_VERSION \% 2` = 1 ; then
+ debug_default=yes
+ else
+ debug_default=minimum
+ fi
+-]) dnl
++#AC_DIVERT_POP()dnl
+
+ dnl declare --enable-* args and collect ac_help strings
+ AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] turn on debugging [default=$debug_default]],,enable_debug=$debug_default)
+@@ -173,7 +209,9 @@ AC_TRY_RUN([#include <math.h>
+ CFLAGS=$glib_save_CFLAGS
+ AC_MSG_WARN(
+ [No ANSI prototypes found in library. (-std1 didn't work.)])
++ , AC_MSG_WARN([Skipping test due to crosscompilation])
+ )
++ , AC_MSG_WARN([Skipping test due to crosscompilation])
+ )
+ LIBS=$glib_save_LIBS
+
+@@ -315,7 +353,7 @@ AC_TRY_COMPILE([#include <sys/types.h>],
+ if test $gtk_ok = yes; then
+ AC_MSG_RESULT([yes, found in sys/types.h])
+ else
+- AC_HEADER_EGREP(fd_set, sys/select.h, gtk_ok=yes)
++ AC_HEADER_EGREP(fd_mask, sys/select.h, gtk_ok=yes)
+ if test $gtk_ok = yes; then
+ AC_DEFINE(HAVE_SYS_SELECT_H)
+ AC_MSG_RESULT([yes, found in sys/select.h])
+@@ -388,7 +426,7 @@ AC_CACHE_VAL(glib_cv_sane_realloc,[
+ glib_cv_sane_realloc=no
+ ,)
+ ])
+-if test x$glib_cv_sane_realloc = xyes; then
++if test "x$glib_cv_sane_realloc" = "xyes"; then
+ AC_DEFINE(REALLOC_0_WORKS)
+ fi
+ AC_MSG_RESULT($glib_cv_sane_realloc)
+@@ -466,7 +504,8 @@ AC_CACHE_VAL(glib_cv_va_val_copy,[
+ ])
+ if test "x$glib_cv_va_copy" = "xyes"; then
+ AC_DEFINE(G_VA_COPY, va_copy)
+-else if test "x$glib_cv___va_copy" = "xyes"; then
++else
++if test "x$glib_cv___va_copy" = "xyes"; then
+ AC_DEFINE(G_VA_COPY, __va_copy)
+ fi
+ fi
+@@ -475,6 +514,7 @@ if test "x$glib_cv_va_val_copy" = "xno";
+ fi
+ AC_MSG_RESULT($glib_cv_va_val_copy)
+
++AC_MSG_WARN([hi mom])
+
+ dnl ***********************
+ dnl *** g_module checks ***
+@@ -485,23 +525,27 @@ dnl G_MODULE_IMPL= don't reset, so cmd-l
+ G_MODULE_NEED_USCORE=0
+ G_MODULE_HAVE_DLERROR=0
+ dnl *** dlopen() and dlsym() in system libraries
++AC_CHECK_FUNC(dlopen,[
++ AC_CHECK_FUNC(dlsym,[
++ G_MODULE_IMPL=G_MODULE_IMPL_DL
++ ],
++ )],
++)
+ if test -z "$G_MODULE_IMPL"; then
+- AC_CHECK_FUNC(dlopen,
+- [AC_CHECK_FUNC(dlsym,
++ AC_CHECK_FUNC(dlopen,[
++ AC_CHECK_FUNC(dlsym,[
+ G_MODULE_IMPL=G_MODULE_IMPL_DL
+- ,)]
+- ,)
+-
++ ])],
++ )
+ fi
+-
+ dnl *** dlopen() and dlsym() in libdl
+ if test -z "$G_MODULE_IMPL"; then
+- AC_CHECK_LIB(dl, dlopen,
+- [AC_CHECK_LIB(dl, dlsym,
++ AC_CHECK_LIB(dl, dlopen,[
++ AC_CHECK_LIB(dl, dlsym,[
+ G_MODULE_LIBS=-ldl
+ G_MODULE_IMPL=G_MODULE_IMPL_DL
+- ,)]
+- ,)
++ ])]
++ )
+ fi
+ dnl *** shl_load() in libdld (HP-UX)
+ if test -z "$G_MODULE_IMPL"; then
+@@ -580,6 +624,7 @@ AC_SUBST(G_MODULE_LDFLAGS)
+ AC_SUBST(G_MODULE_HAVE_DLERROR)
+ AC_SUBST(G_MODULE_NEED_USCORE)
+ AC_SUBST(GLIB_DEBUG_FLAGS)
++AC_MSG_WARN([hi mom])
+
+
+ dnl ***********************
+@@ -816,40 +861,50 @@ if test x"$have_threads" != xnone; then
+ fi
+ if test x"$have_threads" = xposix; then
+ LIBS="$LIBS $G_THREAD_LIBS"
+- AC_MSG_CHECKING(whether pthread_getspecific is posix like)
+ # PCThreads has pthread_getspecific(pthread_key_t, void **);
+- AC_TRY_COMPILE([#include <pthread.h>],
+- [pthread_getspecific(0,NULL);],
+- [AC_MSG_RESULT(no)],
+- [AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_PTHREAD_GETSPECIFIC_POSIX)])
+- AC_MSG_CHECKING(whether pthread_mutex_trylock is posix like)
++ AC_CACHE_CHECK([whether pthread_getspecific is posix like],
++ [glib_cv_sys_pthread_getspecific_posix],
++ AC_TRY_COMPILE([#include <pthread.h>],
++ [pthread_getspecific(0,NULL);],
++ [glib_cv_sys_pthread_getspecific_posix=no],
++ [glib_cv_sys_pthread_getspecific_posix=yes])
++ )
++ if test x"$glib_cv_sys_pthread_getspecific_posix" = xyes; then
++ AC_DEFINE(HAVE_PTHREAD_GETSPECIFIC_POSIX)
++ fi
+ # DCE Threads return 1 as success, posix 0. what a mess.
+- AC_TRY_RUN([#include <pthread.h>
+- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+- int main () {
+- return !pthread_mutex_trylock (&mutex); }],
+- [AC_MSG_RESULT(no)],
+- [AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX)])
+- AC_MSG_CHECKING(whether pthread_cond_timedwait is posix like)
++ AC_CACHE_CHECK([whether pthread_mutex_trylock is posix like],
++ [glib_cv_sys_pthread_mutex_trylock_posix],
++ AC_TRY_RUN([#include <pthread.h>
++ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
++ int main () {
++ return !pthread_mutex_trylock (&mutex); }],
++ [glib_cv_sys_pthread_mutex_trylock_posix=no],
++ [glib_cv_sys_pthread_mutex_trylock_posix=yes])
++ )
++ if test x"$glib_cv_sys_pthread_mutex_trylock_posix" = xyes; then
++ AC_DEFINE(HAVE_PTHREAD_MUTEX_TRYLOCK_POSIX)
++ fi
+ # DCE Threads return -1 as failure, posix ETIMEDOUT.
+- AC_TRY_RUN([#include <pthread.h>
+- #include <sys/time.h>
+- int main () {
+- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+- pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+- struct timeval tval;
+- struct timespec tspec;
+- gettimeofday (&tval, NULL);
+- tspec.tv_sec = tval.tv_sec;
+- tspec.tv_nsec = 0;
+- pthread_mutex_lock (&mutex);
+- return pthread_cond_timedwait (&cond,&mutex,&tspec)
+- != -1;}],
+- [AC_MSG_RESULT(no)],
+- [AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_POSIX)])
++ AC_CACHE_CHECK([whether pthread_cond_timedwait is posix like],
++ [glib_cv_sys_pthread_cond_timedwait_posix],
++ AC_TRY_RUN([#include <pthread.h>
++ int main () {
++ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
++ pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
++ struct timeval tval;
++ struct timespec tspec;
++ gettimeofday (&tval, NULL);
++ tspec.tv_sec = tval.tv_sec;
++ tspec.tv_nsec = 0;
++ return pthread_cond_timedwait (&cond,&mutex,&tspec)
++ != -1;}],
++ [glib_cv_sys_pthread_cond_timedwait_posix=no],
++ [glib_cv_sys_pthread_cond_timedwait_posix=yes])
++ )
++ if test x"$glib_cv_sys_pthread_cond_timedwait_posix" = xyes; then
++ AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_POSIX)
++ fi
+ fi
+ LIBS="$glib_save_LIBS"
+ CFLAGS="$glib_save_CFLAGS"
+@@ -893,13 +948,14 @@ GLIB_IF_VAR_EQ(mutex_has_default, yes,
+ dnl ****************************************
+ dnl *** GLib POLL* compatibility defines ***
+ dnl ****************************************
++if test x"$cross_compiling" != xyes; then
+ GLIB_SYSDEFS(
+ [#include <sys/types.h>
+ #include <sys/poll.h>],
+ POLLIN:1 POLLOUT:4 POLLPRI:2 POLLERR:8 POLLHUP:16 POLLNVAL:32,
+ glibconfig-sysdefs.h,
+ =)
+-
++fi
+
+ dnl ******************************
+ dnl *** output the whole stuff ***
+@@ -956,7 +1012,7 @@ _______EOF
+ echo '#define GLIB_HAVE_SYS_POLL_H' >> $outfile
+ fi
+
+- cat >> $outfile <<_______EOF
++ cat >> $outfile <<EOF
+
+ #define G_MINFLOAT $glib_mf
+ #define G_MAXFLOAT $glib_Mf
+@@ -969,60 +1025,60 @@ _______EOF
+ #define G_MINLONG $glib_ml
+ #define G_MAXLONG $glib_Ml
+
+-_______EOF
++EOF
+
+
+ ### this should always be true in a modern C/C++ compiler
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ typedef signed char gint8;
+ typedef unsigned char guint8;
+-_______EOF
++EOF
+
+
+ if test -n "$gint16"; then
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ typedef signed $gint16 gint16;
+ typedef unsigned $gint16 guint16;
+-_______EOF
++EOF
+ fi
+
+
+ if test -n "$gint32"; then
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ typedef signed $gint32 gint32;
+ typedef unsigned $gint32 guint32;
+-_______EOF
++EOF
+ fi
+
+
+ if test -n "$gint64"; then
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ ${glib_warning_guard}#define G_HAVE_GINT64 1
+
+ ${glib_extension}typedef signed $gint64 gint64;
+ ${glib_extension}typedef unsigned $gint64 guint64;
+
+ #define G_GINT64_CONSTANT(val) $gint64_constant
+-_______EOF
++EOF
+ fi
+
+
+ if test -z "$glib_unknown_void_p"; then
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+
+ #define GPOINTER_TO_INT(p) ((gint) ${glib_gpi_cast} (p))
+ #define GPOINTER_TO_UINT(p) ((guint) ${glib_gpui_cast} (p))
+
+ #define GINT_TO_POINTER(i) ((gpointer) ${glib_gpi_cast} (i))
+ #define GUINT_TO_POINTER(u) ((gpointer) ${glib_gpui_cast} (u))
+-_______EOF
++EOF
+ else
+ echo '#error SIZEOF_VOID_P unknown - This should never happen' >>$outfile
+ fi
+
+
+
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ $glib_atexit
+ $glib_memmove
+ $glib_defines
+@@ -1034,11 +1090,11 @@ $glib_vacopy
+ #else /* !__cplusplus */
+ $glib_inline
+ #endif /* !__cplusplus */
+-_______EOF
++EOF
+
+ echo >>$outfile
+ if test x$g_mutex_has_default = xyes; then
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ $g_enable_threads_def G_THREADS_ENABLED
+ #define G_THREADS_IMPL_$g_threads_impl_def
+ typedef struct _GStaticMutex GStaticMutex;
+@@ -1056,15 +1112,15 @@ struct _GStaticMutex
+ #define g_static_mutex_get_mutex(mutex) \
+ (g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \
+ g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
+-_______EOF
++EOF
+ else
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ $g_enable_threads_def G_THREADS_ENABLED
+ #define G_THREADS_IMPL_$g_threads_impl_def
+ typedef struct _GMutex* GStaticMutex;
+ #define G_STATIC_MUTEX_INIT NULL
+ #define g_static_mutex_get_mutex(mutex) (g_static_mutex_get_mutex_impl (mutex))
+-_______EOF
++EOF
+ fi
+
+ echo >>$outfile
+@@ -1073,15 +1129,15 @@ _______EOF
+ g_bit_sizes="$g_bit_sizes 64"
+ fi
+ for bits in $g_bit_sizes; do
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ #define GINT${bits}_TO_${g_bs_native}(val) ((gint${bits}) (val))
+ #define GUINT${bits}_TO_${g_bs_native}(val) ((guint${bits}) (val))
+ #define GINT${bits}_TO_${g_bs_alien}(val) ((gint${bits}) GUINT${bits}_SWAP_LE_BE (val))
+ #define GUINT${bits}_TO_${g_bs_alien}(val) (GUINT${bits}_SWAP_LE_BE (val))
+-_______EOF
++EOF
+ done
+
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+ #define GLONG_TO_LE(val) ((glong) GINT${glongbits}_TO_LE (val))
+ #define GULONG_TO_LE(val) ((gulong) GUINT${glongbits}_TO_LE (val))
+ #define GLONG_TO_BE(val) ((glong) GINT${glongbits}_TO_BE (val))
+@@ -1092,14 +1148,14 @@ _______EOF
+ #define GUINT_TO_BE(val) ((guint) GUINT${gintbits}_TO_BE (val))
+ #define G_BYTE_ORDER $g_byte_order
+
+-_______EOF
++EOF
+
+ if test -r glibconfig-sysdefs.h; then
+ cat glibconfig-sysdefs.h >>$outfile
+ fi
+
+
+- cat >>$outfile <<_______EOF
++ cat >>$outfile <<EOF
+
+ $glib_wc
+
+@@ -1109,7 +1165,7 @@ $glib_wc
+ #endif /* __cplusplus */
+
+ #endif /* GLIBCONFIG_H */
+-_______EOF
++EOF
+
+
+ if cmp -s $outfile glibconfig.h; then
diff --git a/packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h b/packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h
new file mode 100644
index 0000000000..1329e7f21c
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig-0.22/glibconfig-sysdefs.h
@@ -0,0 +1,6 @@
+#define GLIB_SYSDEF_POLLIN =1
+#define GLIB_SYSDEF_POLLOUT =4
+#define GLIB_SYSDEF_POLLPRI =2
+#define GLIB_SYSDEF_POLLERR =8
+#define GLIB_SYSDEF_POLLHUP =16
+#define GLIB_SYSDEF_POLLNVAL =32
diff --git a/packages/pkgconfig/pkgconfig-native_0.22.bb b/packages/pkgconfig/pkgconfig-native_0.22.bb
new file mode 100644
index 0000000000..4481656d7a
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig-native_0.22.bb
@@ -0,0 +1,16 @@
+SECTION = "console/utils"
+require pkgconfig.inc
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/pkgconfig-${PV}"
+
+DEFAULT_PREFERENCE = "-1"
+
+S = "${WORKDIR}/pkg-config-${PV}/"
+inherit native
+DEPENDS = ""
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
diff --git a/packages/pkgconfig/pkgconfig.inc b/packages/pkgconfig/pkgconfig.inc
new file mode 100644
index 0000000000..47c077a8d3
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig.inc
@@ -0,0 +1,24 @@
+SECTION = "console/utils"
+DESCRIPTION = "pkg-config is a system for managing library \
+compile/link flags that works with automake and autoconf. \
+It replaces the ubiquitous *-config scripts you may have \
+seen with a single tool."
+HOMEPAGE = "http://pkg-config.freedesktop.org/wiki/"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "http://pkgconfig.freedesktop.org/releases/pkg-config-${PV}.tar.gz \
+ file://glibconfig-sysdefs.h"
+
+S = "${WORKDIR}/pkg-config-${PV}/"
+
+inherit autotools
+
+acpaths = "-I ."
+do_configure_prepend () {
+ install -m 0644 ${WORKDIR}/glibconfig-sysdefs.h glib-1.2.8/
+}
+
+do_stage_prepend() {
+ install -d -m 0755 ${STAGING_DATADIR}/pkgconfig
+}
diff --git a/packages/pkgconfig/pkgconfig_0.15.0.bb b/packages/pkgconfig/pkgconfig_0.15.0.bb
index 68d6a9917d..31fc7820fe 100644
--- a/packages/pkgconfig/pkgconfig_0.15.0.bb
+++ b/packages/pkgconfig/pkgconfig_0.15.0.bb
@@ -12,7 +12,7 @@ SRC_URI = "http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-${PV
file://pkg.m4 \
file://glibconfig-sysdefs.h"
-inherit autotools
+inherit autotools
acpaths = "-I ."
do_configure_prepend () {
diff --git a/packages/pkgconfig/pkgconfig_0.22.bb b/packages/pkgconfig/pkgconfig_0.22.bb
new file mode 100644
index 0000000000..599e1c815e
--- /dev/null
+++ b/packages/pkgconfig/pkgconfig_0.22.bb
@@ -0,0 +1,3 @@
+require pkgconfig.inc
+
+SRC_URI += "file://autofoo.patch;patch=1"
diff --git a/packages/poboxserver/files/pbserver.sh b/packages/poboxserver/files/pbserver.sh
deleted file mode 100644
index 8e5a1bda26..0000000000
--- a/packages/poboxserver/files/pbserver.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-killproc()
-{
- pid=`/bin/ps -e x |
- /bin/grep $1 |
- /bin/grep -v grep |
- /bin/sed -e 's/^ *//' -e 's/ .*//'`
- [ "$pid" != "" ] && kill $pid
-}
-
-usage()
-{
- echo "Usage: $0 {start|stop}"
-}
-
-if [ $# -lt 1 ] ; then usage ; exit ; fi
-
-case "$1" in
-start)
- echo -n "Start pbserver"
- # make sure lo interface is configured (otherwise qpobox will not bind to pbserver)
- ifconfig lo|grep 127.0.0.1 >/dev/null || ifconfig lo 127.0.0.1
- cd /opt/QtPalmtop/pobox; ./pbserver > /dev/null &
- echo
- sleep 1
- ;;
-
-stop)
- echo -n "Stop pbserver"
- killproc pbserver
- echo
- ;;
-
-esac
-
-exit 0
-
diff --git a/packages/poboxserver/poboxserver/.mtn2git_empty b/packages/poboxserver/poboxserver/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/poboxserver/poboxserver/.mtn2git_empty
diff --git a/packages/poboxserver/files/OpenPOBox-1.25.diff b/packages/poboxserver/poboxserver/OpenPOBox-1.25.diff
index d3add6d79c..d3add6d79c 100644
--- a/packages/poboxserver/files/OpenPOBox-1.25.diff
+++ b/packages/poboxserver/poboxserver/OpenPOBox-1.25.diff
diff --git a/packages/poboxserver/poboxserver/pbserver.sh b/packages/poboxserver/poboxserver/pbserver.sh
new file mode 100644
index 0000000000..e6067ed6ff
--- /dev/null
+++ b/packages/poboxserver/poboxserver/pbserver.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+killproc()
+{
+ pid=`/bin/ps -e x |
+ /bin/grep $1 |
+ /bin/grep -v grep |
+ /bin/sed -e 's/^ *//' -e 's/ .*//'`
+ [ "$pid" != "" ] && kill $pid
+}
+
+usage()
+{
+ echo "Usage: $0 {start|stop}"
+}
+
+if [ $# -lt 1 ] ; then usage ; exit ; fi
+
+case "$1" in
+start)
+ echo -n "Start pbserver"
+ # make sure lo interface is configured (otherwise qpobox will not bind to pbserver)
+ ifconfig lo|grep 127.0.0.1 >/dev/null || ifconfig lo 127.0.0.1
+ cd @palmtopdir@/pobox; ./pbserver > /dev/null &
+ echo
+ sleep 1
+ ;;
+
+stop)
+ echo -n "Stop pbserver"
+ killproc pbserver
+ echo
+ ;;
+
+esac
+
+exit 0
+
diff --git a/packages/poboxserver/files/remove-local-includes.patch b/packages/poboxserver/poboxserver/remove-local-includes.patch
index 10f9d312d6..10f9d312d6 100644
--- a/packages/poboxserver/files/remove-local-includes.patch
+++ b/packages/poboxserver/poboxserver/remove-local-includes.patch
diff --git a/packages/poboxserver/poboxserver/unicode.patch b/packages/poboxserver/poboxserver/unicode.patch
new file mode 100644
index 0000000000..884070a3c8
--- /dev/null
+++ b/packages/poboxserver/poboxserver/unicode.patch
@@ -0,0 +1,13 @@
+diff --git a/../pbserver/Makefile b/../pbserver/Makefile
+index 27847c1..d6ffff3 100755
+--- a/../pbserver/Makefile
++++ b/../pbserver/Makefile
+@@ -15,7 +15,7 @@ configure:
+ dic: staticdic learndic
+
+ staticdic: fugodic.txt
+- nkf -e $< | ruby dicfilter.rb | sort |uniq > $@
++ nkf -w $< | ruby dicfilter.rb | sort |uniq > $@
+
+ learndic:
+ touch $@
diff --git a/packages/poboxserver/poboxserver_1.2.5.bb b/packages/poboxserver/poboxserver_1.2.5.bb
index e582ce0ccf..4e03f61820 100644
--- a/packages/poboxserver/poboxserver_1.2.5.bb
+++ b/packages/poboxserver/poboxserver_1.2.5.bb
@@ -2,19 +2,19 @@ DESCRIPTION = "OpenPOBox is an open source implementation of a 'Predictive Opera
SECTION = "inputmethods"
LICENSE = "GPL"
DEPENDS = "perl-native ruby-native nkf-native"
-PR = "r3"
+PR = "r6"
SRC_URI = "${SOURCEFORGE_MIRROR}/gakusei/pobox-${PV}.tar.bz2 \
http://www.vanille.de/mirror/pbserver-${PV}.tar.gz \
file://OpenPOBox-1.25.diff;patch=1 \
file://remove-local-includes.patch;patch=1 \
+ file://unicode.patch;patch=1 \
file://pbserver.sh"
+
S = "${WORKDIR}/OpenPOBox"
inherit autotools update-rc.d
-FILES_${PN} = "${palmtopdir}/pobox/* ${sysconfdir}/init.d/pbserver"
-
INITSCRIPT_NAME = "pbserver"
INITSCRIPT_PARAMS = "start 99 5 . stop 01 0 ."
@@ -35,4 +35,8 @@ do_install() {
install -m 0644 ${WORKDIR}/pbserver/learndic ${D}${palmtopdir}/pobox/
install -d ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/pbserver.sh ${D}${sysconfdir}/init.d/pbserver
+ sed -i -e 's,@palmtopdir@,${palmtopdir},g' ${D}${sysconfdir}/init.d/pbserver
}
+
+FILES_${PN}-dbg += "${palmtopdir}/pobox/.debug"
+FILES_${PN} += "${palmtopdir}/pobox/* ${sysconfdir}/init.d/pbserver"
diff --git a/packages/poboxserver/qpobox/.mtn2git_empty b/packages/poboxserver/qpobox/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/poboxserver/qpobox/.mtn2git_empty
diff --git a/packages/qpobox/files/qpobox-0.5.4-opie.patch b/packages/poboxserver/qpobox/qpobox-0.5.4-opie.patch
index 91b9db712a..91b9db712a 100644
--- a/packages/qpobox/files/qpobox-0.5.4-opie.patch
+++ b/packages/poboxserver/qpobox/qpobox-0.5.4-opie.patch
diff --git a/packages/poboxserver/qpobox/qpobox.patch b/packages/poboxserver/qpobox/qpobox.patch
new file mode 100644
index 0000000000..9ed8f6c6b0
--- /dev/null
+++ b/packages/poboxserver/qpobox/qpobox.patch
@@ -0,0 +1,57 @@
+diff -Naur qpobox.orig/pbclient.cpp qpobox/pbclient.cpp
+--- qpobox.orig/pbclient.cpp 2003-06-21 04:56:31.000000000 +0200
++++ qpobox/pbclient.cpp 2006-05-11 22:49:00.000000000 +0200
+@@ -28,7 +28,8 @@
+ m_address(address), m_port(port)
+ {
+ m_sock = new QSocket(this);
+- m_conv = QTextCodec::codecForName("EUC-JP");
++ //m_conv = QTextCodec::codecForName("EUC-JP");
++ m_conv = QTextCodec::codecForName("utf8");
+
+ connect(m_sock, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));
+ connect(m_sock, SIGNAL(error(int)), this, SLOT(socketError(int)));
+diff -Naur qpobox.orig/qpobox.key qpobox/qpobox.key
+--- qpobox.orig/qpobox.key 2003-08-12 22:23:15.000000000 +0200
++++ qpobox/qpobox.key 2006-05-12 23:27:19.000000000 +0200
+@@ -1,15 +1,15 @@
+ [INIT]
+ Shift+Space = THRU
+ Space = NEXT
+- Shift+Return = THRU_MODE
++ Shift+Enter = THRU_MODE
+ F21 = CLOSE
+ F25 = IM_MODE
+
+ [INPUT]
+ Shift+Space = PREV
+ Space = NEXT
+- Shift+Return = FIX
+- Return = EXACT
++ Shift+Enter = FIX
++ Enter = EXACT
+ BackSpace = BS
+ Delete = DELETE
+ Left = SHRINK
+@@ -22,7 +22,7 @@
+ [SELECT]
+ Shift+Space = PREV
+ Space = NEXT
+- Return = FIX
++ Enter = FIX
+ BackSpace = BS
+ Delete = NOP
+ Left = PREV
+diff -Naur qpobox.orig/qpoboxconfig.cpp qpobox/qpoboxconfig.cpp
+--- qpobox.orig/qpoboxconfig.cpp 2005-01-09 06:53:44.000000000 +0100
++++ qpobox/qpoboxconfig.cpp 2006-05-11 22:38:22.000000000 +0200
+@@ -224,7 +224,8 @@
+ if (t != m_key_loaded) {
+ if (f.open(IO_ReadOnly)) {
+ QTextStream ts(&f);
+- QTextCodec *codec=QTextCodec::codecForName("UTF-8");
++ //QTextCodec *codec=QTextCodec::codecForName("UTF-8");
++ QTextCodec *codec=QTextCodec::codecForName("eucJP");
+ ts.setCodec(codec);
+ poboxmode_t mode = MODE_INIT;
+
diff --git a/packages/poboxserver/qpobox_0.5.4.bb b/packages/poboxserver/qpobox_0.5.4.bb
new file mode 100644
index 0000000000..9bb8c34523
--- /dev/null
+++ b/packages/poboxserver/qpobox_0.5.4.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A japanese inputmethod for Qt/Embedded based palmtop environments."
+SECTION = "opie/inputmethods"
+RDEPENDS = "poboxserver virtual/japanese-font"
+LICENSE = "GPL"
+HOMEPAGE = "http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=QPOBox"
+PR = "r1"
+
+SRC_URI = "http://www.vanille.de/mirror/qpobox-${PV}.tar.gz \
+ file://qpobox-0.5.4-opie.patch;patch=1 \
+ file://qpobox.patch;patch=1"
+S = "${WORKDIR}/qpobox"
+
+inherit opie
+
+do_install() {
+ install -d ${D}${palmtopdir}/share
+ install -m 644 qpobox.key ${D}${palmtopdir}/share
+}
diff --git a/packages/pointercal/.mtn2git_empty b/packages/pointercal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/.mtn2git_empty
diff --git a/packages/pointercal/files/.mtn2git_empty b/packages/pointercal/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/.mtn2git_empty
diff --git a/packages/pointercal/files/akita/.mtn2git_empty b/packages/pointercal/files/akita/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/akita/.mtn2git_empty
diff --git a/packages/pointercal/files/akita/pointercal b/packages/pointercal/files/akita/pointercal
new file mode 100644
index 0000000000..89f407efbd
--- /dev/null
+++ b/packages/pointercal/files/akita/pointercal
@@ -0,0 +1 @@
+12 -8946 33795672 12135 73 -2444604 65536
diff --git a/packages/pointercal/files/c7x0/.mtn2git_empty b/packages/pointercal/files/c7x0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/c7x0/.mtn2git_empty
diff --git a/packages/pointercal/files/c7x0/pointercal b/packages/pointercal/files/c7x0/pointercal
new file mode 100644
index 0000000000..eb99f6075c
--- /dev/null
+++ b/packages/pointercal/files/c7x0/pointercal
@@ -0,0 +1 @@
+12572 -34 -2892400 5 8615 -1959428 65536
diff --git a/packages/pointercal/files/fic-gta01/.mtn2git_empty b/packages/pointercal/files/fic-gta01/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/fic-gta01/.mtn2git_empty
diff --git a/packages/pointercal/files/fic-gta01/pointercal b/packages/pointercal/files/fic-gta01/pointercal
new file mode 100644
index 0000000000..198fd2a776
--- /dev/null
+++ b/packages/pointercal/files/fic-gta01/pointercal
@@ -0,0 +1 @@
+-67 36365 -2733100 -48253 -310 45219816 65536
diff --git a/packages/pointercal/files/fic-gta02/.mtn2git_empty b/packages/pointercal/files/fic-gta02/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/fic-gta02/.mtn2git_empty
diff --git a/packages/pointercal/files/fic-gta02/pointercal b/packages/pointercal/files/fic-gta02/pointercal
new file mode 100644
index 0000000000..198fd2a776
--- /dev/null
+++ b/packages/pointercal/files/fic-gta02/pointercal
@@ -0,0 +1 @@
+-67 36365 -2733100 -48253 -310 45219816 65536
diff --git a/packages/pointercal/files/nokia800/.mtn2git_empty b/packages/pointercal/files/nokia800/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/nokia800/.mtn2git_empty
diff --git a/packages/pointercal/files/nokia800/pointercal b/packages/pointercal/files/nokia800/pointercal
new file mode 100644
index 0000000000..da96ce5a88
--- /dev/null
+++ b/packages/pointercal/files/nokia800/pointercal
@@ -0,0 +1 @@
+15048 -59 -3326932 96 -10172 34884848 65536
diff --git a/packages/pointercal/files/pointercal b/packages/pointercal/files/pointercal
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/pointercal
diff --git a/packages/pointercal/files/spitz/.mtn2git_empty b/packages/pointercal/files/spitz/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/spitz/.mtn2git_empty
diff --git a/packages/pointercal/files/spitz/pointercal b/packages/pointercal/files/spitz/pointercal
new file mode 100644
index 0000000000..7e9f7a8468
--- /dev/null
+++ b/packages/pointercal/files/spitz/pointercal
@@ -0,0 +1 @@
+16 -8880 34043380 12130 72 -2479548 65536
diff --git a/packages/pointercal/files/tosa/.mtn2git_empty b/packages/pointercal/files/tosa/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/tosa/.mtn2git_empty
diff --git a/packages/pointercal/files/tosa/pointercal b/packages/pointercal/files/tosa/pointercal
new file mode 100644
index 0000000000..8816370cdc
--- /dev/null
+++ b/packages/pointercal/files/tosa/pointercal
@@ -0,0 +1 @@
+-8451 0 32820681 0 -11275 44314980 65536
diff --git a/packages/pointercal/pointercal_0.0.bb b/packages/pointercal/pointercal_0.0.bb
new file mode 100644
index 0000000000..87e4acafb9
--- /dev/null
+++ b/packages/pointercal/pointercal_0.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Touchscreen calibration data"
+SECTION = "base"
+PR = "r2"
+
+SRC_URI = "file://pointercal"
+S = "${WORKDIR}"
+
+do_install() {
+ # Only install file if it has a contents
+ if [ -s ${S}/pointercal ]; then
+ install -d ${D}${sysconfdir}/
+ install -m 0644 ${S}/pointercal ${D}${sysconfdir}/
+ fi
+}
+
+ALLOW_EMPTY_${PN} = "1"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
diff --git a/packages/poppler/poppler.inc b/packages/poppler/poppler.inc
index 14ae8220a8..e01057cb4e 100644
--- a/packages/poppler/poppler.inc
+++ b/packages/poppler/poppler.inc
@@ -1,23 +1,23 @@
DESCRIPTION = "Poppler is a PDF rendering library based on the xpdf-3.0 code base."
DEPENDS = "fontconfig jpeg zlib gtk+ cairo"
LICENSE = "GPL"
-PR = "r0"
SRC_URI = "http://poppler.freedesktop.org/${PN}-${PV}.tar.gz"
inherit autotools pkgconfig
-EXTRA_OECONF = " --enable-xpdf-headers \
- --disable-gtk-test \
- --disable-poppler-qt \
- --enable-zlib \
- "
+EXTRA_OECONF = "\
+ --enable-xpdf-headers \
+ --disable-gtk-test \
+ --disable-poppler-qt \
+ --disable-poppler-qt4 \
+ --enable-zlib \
+"
-#check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points
+# check for TARGET_FPU=soft and inform configure of the result so it can disable some floating points
require poppler-fpu.inc
EXTRA_OECONF += "${@get_poppler_fpu_setting(bb, d)}"
-
do_stage() {
autotools_stage_all
}
diff --git a/packages/poppler/poppler0.6_cvs.bb b/packages/poppler/poppler0.6_cvs.bb
new file mode 100644
index 0000000000..ca4b8d6a03
--- /dev/null
+++ b/packages/poppler/poppler0.6_cvs.bb
@@ -0,0 +1,6 @@
+require poppler.inc
+PV = "0.5.9+cvs${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anoncvs@cvs.freedesktop.org/cvs/poppler;module=poppler"
+S = "${WORKDIR}/poppler"
diff --git a/packages/poppler/poppler_0.5.4.bb b/packages/poppler/poppler_0.5.4.bb
index ade41a276a..92c25bc0ac 100644
--- a/packages/poppler/poppler_0.5.4.bb
+++ b/packages/poppler/poppler_0.5.4.bb
@@ -1,2 +1,2 @@
require poppler.inc
-PR = "r1"
+PR = "r2"
diff --git a/packages/poppler/poppler_0.5.9.bb b/packages/poppler/poppler_0.5.9.bb
new file mode 100644
index 0000000000..347d9ae303
--- /dev/null
+++ b/packages/poppler/poppler_0.5.9.bb
@@ -0,0 +1,5 @@
+require poppler.inc
+
+# does not build, use cvs for now and eventually try to bump to 0.6.0 (or 1.0)
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/poppler/poppler_20060418.bb b/packages/poppler/poppler_20060418.bb
deleted file mode 100644
index 842536eda3..0000000000
--- a/packages/poppler/poppler_20060418.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "Poppler is a PDF rendering library based on the xpdf-3.0 code base."
-DEPENDS = "fontconfig jpeg gtk+ cairo"
-LICENSE = "GPL"
-PV = "0.5.1+cvs20060418"
-PR = "r0"
-
-SRC_URI = "cvs://anoncvs@cvs.freedesktop.org/cvs/poppler;module=poppler;date=${PV}"
-S = "${WORKDIR}/poppler"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--enable-xpdf-headers --disable-gtk-test --disable-poppler-qt"
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/poptop/files/.mtn2git_empty b/packages/poptop/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/poptop/files/.mtn2git_empty
diff --git a/packages/poptop/files/pptpd.init b/packages/poptop/files/pptpd.init
new file mode 100755
index 0000000000..27786cd0c2
--- /dev/null
+++ b/packages/poptop/files/pptpd.init
@@ -0,0 +1,37 @@
+#! /bin/sh
+
+test -f /usr/sbin/pptpd || exit 0
+test -f /etc/default/pptpd && . /etc/default/pptpd
+
+case $1 in
+ start)
+ echo -n "Starting PPTP server: pptpd"
+ start-stop-daemon --start --quiet --pidfile /var/run/pptpd.pid \
+ --exec /usr/sbin/pptpd
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping PPTP server: pptpd"
+ start-stop-daemon --stop --quiet --pidfile /var/run/pptpd.pid \
+ --exec /usr/sbin/pptpd
+ echo "."
+ ;;
+ status)
+ pid=$(pidof pptpd)
+ if [ -n "$pid" ] ; then
+ echo "Running with pid $pid"
+ else
+ echo "Not running"
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/pptpd {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/poptop/poptop-1.3.4/.mtn2git_empty b/packages/poptop/poptop-1.3.4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/poptop/poptop-1.3.4/.mtn2git_empty
diff --git a/packages/poptop/poptop-1.3.4/fix-plugins-install.patch b/packages/poptop/poptop-1.3.4/fix-plugins-install.patch
new file mode 100644
index 0000000000..8a02f7a5de
--- /dev/null
+++ b/packages/poptop/poptop-1.3.4/fix-plugins-install.patch
@@ -0,0 +1,26 @@
+Don't try and install as root.
+Always set LIBDIR to the include the DESTDIR, otherwise it uses the
+incorrect value set in the toplevel makefile.
+
+Index: pptpd-1.3.4/plugins/Makefile
+===================================================================
+--- pptpd-1.3.4.orig/plugins/Makefile 2006-08-03 12:02:01.000000000 +1000
++++ pptpd-1.3.4/plugins/Makefile 2007-06-09 11:42:57.000000000 +1000
+@@ -3,7 +3,7 @@
+ CFLAGS = $(COPTS) -I.. -I../../include -fPIC
+ LDFLAGS = -shared
+ LDADD = -lutil
+-INSTALL = install -o root
++INSTALL = install
+ prefix = /usr/local
+
+ PLUGINS = pptpd-logwtmp.so
+@@ -18,7 +18,7 @@
+ %.so: %.c
+ $(CC) -o $@ $(LDFLAGS) $(CFLAGS) $^ $(LDADD)
+
+-LIBDIR ?= $(DESTDIR)$(prefix)/lib/pptpd
++LIBDIR = $(DESTDIR)$(prefix)/lib/pptpd
+
+ install: $(PLUGINS)
+ $(INSTALL) -d $(LIBDIR)
diff --git a/packages/poptop/poptop_1.3.4.bb b/packages/poptop/poptop_1.3.4.bb
new file mode 100644
index 0000000000..5c6a71bb2e
--- /dev/null
+++ b/packages/poptop/poptop_1.3.4.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Poptop is the PPTP server solution for Linux Using Poptop, \
+Linux servers can now function seamlessly in a PPTP VPN environment. This \
+enables administrators to leverage the considerable benefits of both \
+Microsoft and Linux operating systems The current release version supports \
+Windows 95/98/Me/NT/2000/XP PPTP clients and Linux PPTP clients"
+HOMEPAGE = "http://www.poptop.org/"
+SECTION = "network"
+LICENSE = "GPL"
+RDEPENDS_${PN} = "ppp"
+RDEPENDS_${PN}-logwtmp-plugin = "${PN}"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/poptop/pptpd-${PV}.tar.gz \
+ file://fix-plugins-install.patch;patch=1 \
+ file://pptpd.init"
+
+S = "${WORKDIR}/pptpd-${PV}"
+
+inherit autotools update-rc.d
+
+do_install_append() {
+ # Install init script
+ install -m 0755 -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/pptpd.init ${D}${sysconfdir}/init.d/pptpd
+ # Install
+ install -d ${D}${sbindir} ${D}/${sysconfdir} ${D}/${sysconfdir}/ppp
+ install -m 0644 samples/options.pptpd ${D}/${sysconfdir}/ppp/
+ install -m 0644 samples/pptpd.conf ${D}/${sysconfdir}/
+ # broken
+ rm -f ${D}${libdir}/pptpd/pptpd-logwtmp.so
+}
+
+PACKAGES = "${PN}-dbg ${PN}-bcrelay ${PN} ${PN}-doc"
+
+FILES_${PN}-bcrelay = "${sbindir}/bcrelay"
+
+CONFFILES_${PN} = "${sysconfdir}/pptpd.conf \
+ ${sysconfdir}/ppp/options.pptpd"
+
+INITSCRIPT_NAME = "pptpd"
+INITSCRIPT_PARAMS = "defaults 92 08"
diff --git a/packages/postgresql/files/.mtn2git_empty b/packages/postgresql/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/postgresql/files/.mtn2git_empty
diff --git a/packages/postgresql/files/no-ecpg-test.patch b/packages/postgresql/files/no-ecpg-test.patch
new file mode 100644
index 0000000000..c0f28f4258
--- /dev/null
+++ b/packages/postgresql/files/no-ecpg-test.patch
@@ -0,0 +1,12 @@
+diff --git a/src/interfaces/ecpg/Makefile b/src/interfaces/ecpg/Makefile
+index dcd578f..1428423 100644
+--- a/src/interfaces/ecpg/Makefile
++++ b/src/interfaces/ecpg/Makefile
+@@ -8,7 +8,6 @@ all install installdirs uninstall dep depend distprep:
+ $(MAKE) -C ecpglib $@
+ $(MAKE) -C compatlib $@
+ $(MAKE) -C preproc $@
+- $(MAKE) -C test $@
+
+ clean distclean maintainer-clean:
+ -$(MAKE) -C include $@
diff --git a/packages/postgresql/postgresql_8.1.4.bb b/packages/postgresql/postgresql_8.1.4.bb
index 5843b2b3df..083fed5a21 100644
--- a/packages/postgresql/postgresql_8.1.4.bb
+++ b/packages/postgresql/postgresql_8.1.4.bb
@@ -5,7 +5,7 @@ DEPENDS = "zlib readline"
#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic
-SRC_URI = "ftp://ftp.nl.postgresql.org/pub/mirror/postgresql/source/v${PV}/${P}.tar.bz2"
+SRC_URI = "ftp://ftp-archives.postgresql.org/pub/source/v${PV}/${P}.tar.bz2"
inherit autotools pkgconfig
diff --git a/packages/postgresql/postgresql_8.1.8.bb b/packages/postgresql/postgresql_8.1.8.bb
new file mode 100644
index 0000000000..be44052437
--- /dev/null
+++ b/packages/postgresql/postgresql_8.1.8.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "PostgreSQL is a powerful, open source relational database system."
+HOMEPAGE = "http://www.postgresql.com"
+LICENSE = "BSD"
+DEPENDS = "zlib readline"
+
+#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic
+
+SRC_URI = "ftp://ftp.us.postgresql.org/pub/mirrors/postgresql/source/v${PV}/${P}.tar.bz2"
+
+
+inherit autotools pkgconfig
+
+FILES_${PN}-doc += "${prefix}/doc/"
+
+do_compile_append() {
+cp /usr/sbin/zic ${S}/src/timezone/
+}
+
+
+
diff --git a/packages/postgresql/postgresql_8.2.4.bb b/packages/postgresql/postgresql_8.2.4.bb
new file mode 100644
index 0000000000..3f65a4fd0d
--- /dev/null
+++ b/packages/postgresql/postgresql_8.2.4.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "PostgreSQL is a powerful, open source relational database system."
+HOMEPAGE = "http://www.postgresql.com"
+LICENSE = "BSD"
+DEPENDS = "zlib readline"
+
+#WARNING: this recipe assumes you have the timezone compiler present in /usr/sbin/zic
+
+SRC_URI = "ftp://ftp.us.postgresql.org/pub/mirrors/postgresql/source/v${PV}/${P}.tar.bz2 \
+ file://no-ecpg-test.patch;patch=1"
+
+
+inherit autotools pkgconfig
+
+FILES_${PN}-doc += "${prefix}/doc/"
+
+do_compile_append() {
+cp /usr/sbin/zic ${S}/src/timezone/
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/povray/povray_3.6.1.bb b/packages/povray/povray_3.6.1.bb
index e1c60570be..107c86cfb8 100644
--- a/packages/povray/povray_3.6.1.bb
+++ b/packages/povray/povray_3.6.1.bb
@@ -3,11 +3,10 @@ HOMEPAGE = "http://www.povray.org"
SECTION = "console/graphics"
#Make this a weak assigment to allow branding of the povray binary
LICENSE = "povray"
-
DEPENDS = "virtual/libx11 zlib jpeg libpng tiff"
RDEPENDS = ""
-PR = "r1"
+PR = "r2"
#We apply a patch that subverts the checks for jpeg, zlib, png and tiff because we know OE has the required versions, but it is still a hack.
SRC_URI = "http://www.povray.org/redirect/www.povray.org/ftp/pub/povray/Official/Unix/${P}.tar.bz2 \
diff --git a/packages/powertop/.mtn2git_empty b/packages/powertop/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/powertop/.mtn2git_empty
diff --git a/packages/powertop/powertop_1.5.bb b/packages/powertop/powertop_1.5.bb
new file mode 100644
index 0000000000..ab84161ddc
--- /dev/null
+++ b/packages/powertop/powertop_1.5.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "PowerTOP, a tool that helps you find what software is using the most power."
+HOMEPAGE = "http://www.linuxpowertop.org/"
+LICENSE = "GPLv2"
+DEPENDS = "ncurses"
+
+SRC_URI = "http://www.linuxpowertop.org/download/powertop-${PV}.tar.gz"
+
+CFLAGS += "${LDFLAGS}"
+
+do_configure() {
+ # We do not build ncurses with wide char support
+ sed -i -e "s/lncursesw/lncurses/" ${S}/Makefile
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
diff --git a/packages/pptp-linux/pptp-linux-1.5.0/.mtn2git_empty b/packages/pptp-linux/pptp-linux-1.5.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pptp-linux/pptp-linux-1.5.0/.mtn2git_empty
diff --git a/packages/pptp-linux/pptp-linux/makefile.patch b/packages/pptp-linux/pptp-linux-1.5.0/makefile.patch
index ea2b5711a2..ea2b5711a2 100644
--- a/packages/pptp-linux/pptp-linux/makefile.patch
+++ b/packages/pptp-linux/pptp-linux-1.5.0/makefile.patch
diff --git a/packages/pptp-linux/pptp-linux/options.pptp b/packages/pptp-linux/pptp-linux-1.5.0/options.pptp
index f446e22a6a..f446e22a6a 100644
--- a/packages/pptp-linux/pptp-linux/options.pptp
+++ b/packages/pptp-linux/pptp-linux-1.5.0/options.pptp
diff --git a/packages/pptp-linux/pptp-linux-1.7.1/.mtn2git_empty b/packages/pptp-linux/pptp-linux-1.7.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pptp-linux/pptp-linux-1.7.1/.mtn2git_empty
diff --git a/packages/pptp-linux/pptp-linux-1.7.1/options.pptp b/packages/pptp-linux/pptp-linux-1.7.1/options.pptp
new file mode 100644
index 0000000000..f446e22a6a
--- /dev/null
+++ b/packages/pptp-linux/pptp-linux-1.7.1/options.pptp
@@ -0,0 +1,30 @@
+#
+# Lock the port
+#
+lock
+
+#
+# We don't need the tunnel server to authenticate itself
+#
+noauth
+
+#
+# Turn off transmission protocols we know won't be used
+#
+nobsdcomp
+nodeflate
+
+#
+# We want MPPE
+# (option naming specific to ppp 2.4.0 with unofficial patch)
+#
+#mppe-40
+mppe-128
+#mppe-stateless
+
+#
+# We want a sane mtu/mru
+# (ppp 2.4.0 with unofficial patch)
+#
+#mtu 1000
+#mru 1000
diff --git a/packages/pptp-linux/pptp-linux_1.7.1.bb b/packages/pptp-linux/pptp-linux_1.7.1.bb
new file mode 100644
index 0000000000..b233cef723
--- /dev/null
+++ b/packages/pptp-linux/pptp-linux_1.7.1.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "PPTP Client is a Linux, FreeBSD, NetBSD \
+and OpenBSD client for the proprietary Microsoft Point-to-Point \
+Tunneling Protocol, PPTP. Allows connection to a PPTP based \
+Virtual Private Network (VPN) as used by employers and some \
+cable and ADSL internet service providers."
+HOMEPAGE = "http://pptpclient.sourceforge.net"
+SECTION = "network"
+LICENSE = "GPL"
+RDEPENDS = "ppp"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sourceforge/pptpclient/pptp-${PV}.tar.gz \
+ file://options.pptp"
+
+S = "${WORKDIR}/pptp-${PV}"
+
+do_compile() {
+ oe_runmake
+}
+do_install() {
+ install -d ${D}${sbindir} ${D}${sysconfdir}/ppp ${D}${mandir}/man8
+ install -m 555 pptp ${D}${sbindir}
+ install -m 644 pptp.8 ${D}${mandir}/man8
+ install -m 644 ${WORKDIR}/options.pptp ${D}${sysconfdir}/ppp
+}
diff --git a/packages/prism3-support/files/hostap-fw-load b/packages/prism3-support/files/hostap-fw-load
deleted file mode 100644
index 1f37aaf744..0000000000
--- a/packages/prism3-support/files/hostap-fw-load
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-# dont handle non-wireless interfaces
-if [ -z "`grep $IFACE /proc/net/wireless`" ]; then
- exit 0
-fi
-
-if test -e /sbin/cardctl; then
- CARDCTL=/sbin/cardctl
-elif test -e /sbin/pccardctl; then
- CARDCTL=/sbin/pccardctl
-else
- exit 0
-fi
-
-# Special case for prism3 cards needing firmware upload
-# Add more known manfids, if necessary
-
-if [ `$CARDCTL info|grep "d601,0010\|d601,0101"` ]; then
- iwpriv "$IFACE" reset 1
- hostap_fw_load "$IFACE"
-fi
-
-# lets hope that run-parts obeys the order :D
-
-exit 0
diff --git a/packages/prism3-support/prism3-support_1.0.0.bb b/packages/prism3-support/prism3-support_1.0.0.bb
deleted file mode 100644
index bcf571e093..0000000000
--- a/packages/prism3-support/prism3-support_1.0.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "meta-package for prism3 support through ifupdown and hostap_fw_load"
-SECTION = "base"
-LICENSE = "GPL"
-DEPENDS = "prism3-firmware hostap-utils"
-RDEPENDS = "prism3-firmware hostap-utils"
-PACKAGE_ARCH = "all"
-PR = "r5"
-
-SRC_URI = "file://hostap-fw-load"
-
-do_install() {
- install -d ${D}${sysconfdir}/network/if-pre-up.d/
- install -m 0755 ${WORKDIR}/hostap-fw-load ${D}${sysconfdir}/network/if-pre-up.d/
-}
-
diff --git a/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/.mtn2git_empty b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/.mtn2git_empty
diff --git a/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/fix-includes.patch b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/fix-includes.patch
new file mode 100644
index 0000000000..f041d45baf
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/fix-includes.patch
@@ -0,0 +1,11 @@
+--- src/daemon/gpsctl.c~ 2007-08-01 19:09:31.000000000 +0200
++++ src/daemon/gpsctl.c 2007-08-01 19:09:31.000000000 +0200
+@@ -3,6 +3,7 @@
+ * Alberto García Hierro <skyhusker@rm-fr.net>
+ */
+
++#include <stdint.h>
+ #include <gps.h>
+ #include "gpsctl.h"
+
+
diff --git a/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/gpsapi.patch b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/gpsapi.patch
new file mode 100644
index 0000000000..638a877b77
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/gpsapi.patch
@@ -0,0 +1,13 @@
+--- prismstumbler-0.7.4pre1/src/daemon/gpsctl.c~ 2007-04-04 00:10:03.000000000 +0200
++++ prismstumbler-0.7.4pre1/src/daemon/gpsctl.c 2007-04-04 00:10:03.000000000 +0200
+@@ -30,8 +30,8 @@
+ if(!gps_conn)
+ return 0;
+
+- *lat = (float) gps_conn->newdata.latitude;
+- *lon = (float) gps_conn->newdata.longitude;
++ *lat = (float) gps_conn->fix.latitude;
++ *lon = (float) gps_conn->fix.longitude;
+ return 1;
+ }
+
diff --git a/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/wireless.patch b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/wireless.patch
new file mode 100644
index 0000000000..dfa579f7b1
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3+0.7.4pre1/wireless.patch
@@ -0,0 +1,12 @@
+diff -ur prismstumbler-0.7.4pre1_old/src/daemon/cards.c prismstumbler-0.7.4pre1/src/daemon/cards.c
+--- prismstumbler-0.7.4pre1_old/src/daemon/cards.c 2006-03-28 19:31:26.000000000 +0200
++++ prismstumbler-0.7.4pre1/src/daemon/cards.c 2007-05-22 14:59:15.000000000 +0200
+@@ -9,6 +9,8 @@
+
+ #include <stdio.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
++#include <net/if.h>
+ #include <linux/wireless.h>
+ #include <glib.h>
+ #include <string.h>
diff --git a/packages/prismstumbler/prismstumbler-0.7.3/crosscompile.patch b/packages/prismstumbler/prismstumbler-0.7.3/crosscompile.patch
new file mode 100644
index 0000000000..63e9f677a5
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3/crosscompile.patch
@@ -0,0 +1,166 @@
+Index: prismstumbler-0.7.3/src/gpsd/Makefile.in
+===================================================================
+--- prismstumbler-0.7.3.orig/src/gpsd/Makefile.in
++++ prismstumbler-0.7.3/src/gpsd/Makefile.in
+@@ -128,8 +128,8 @@ xgpsspeed: $(XGPSOBJS)
+ $(LINK.c) -o $@ $(XGPSOBJS) -L. -lgpsd $(LIBXAW) $(ALL_X_LIBS) $(LIBS)
+
+ libgpsd.a: $(LIB_OBJECTS)
+- ar -r libgpsd.a $(LIB_OBJECTS)
+- ranlib libgpsd.a
++ $(AR) -r libgpsd.a $(LIB_OBJECTS)
++ $(RANLIB) libgpsd.a
+
+ clean:
+ rm -f *.o *.a gpsd gps *~ config.status
+Index: prismstumbler-0.7.3/src/gpsd/Makefile
+===================================================================
+--- prismstumbler-0.7.3.orig/src/gpsd/Makefile
++++ prismstumbler-0.7.3/src/gpsd/Makefile
+@@ -1,4 +1,3 @@
+-# Generated automatically from Makefile.in by configure.
+ # Makefile.in
+ # $Modified: Thu Jan 22 11:55:32 1998 by brook $
+
+@@ -7,10 +6,10 @@
+
+ # What we use to compile C files.
+ # CC = cc
+-CC = gcc
++CC = ccache arm-angstrom-linux-gnueabi-gcc -march=armv5te -mtune=xscale
+
+ # The flags we use to compile C files.
+-CFLAGS = -g -O2
++CFLAGS = -I/home/papercrane/oe/angstrom.build/tmp/work/armv5te-angstrom-linux-gnueabi/prismstumbler-0.7.3-r5/prismstumbler-0.7.3/include -D_GNU_SOURCE -isystem/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/include -fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os
+
+
+ ## The C preprocessor.
+@@ -19,7 +18,7 @@ CFLAGS = -g -O2
+ CPP = @CPP_TRADITIONAL@
+
+ # Flags passed to the C preprocessor. ()
+-CPPFLAGS =
++CPPFLAGS = -isystem/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/include
+
+ # Definitions to be passed to the C preprocessor. (-DHAVE_CONFIG_H)
+ DEFS = -DHAVE_CONFIG_H
+@@ -28,10 +27,10 @@ DEFS = -DHAVE_CONFIG_H
+ ## The Linker.
+
+ # Flags passed to the linker. (-g -O)
+-LDFLAGS =
++LDFLAGS = -L/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/lib -Wl,-O1
+
+ # Use this for building statically linked executables with GCC.
+-# LDFLAGS = -static
++# LDFLAGS = -static -L/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/lib -Wl,-O1
+
+
+ ## Local libraries
+@@ -52,7 +51,7 @@ NETLIBS = $(LIBNSL) $(LIBSOCKET)
+ ## X Libraries
+
+ # Special flags for linking with X. (-L/usr/X11R5/lib)
+-X_LDFLAGS = -L/usr/X11R6/lib
++X_LDFLAGS = -L/usr/lib -L/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/lib
+
+ # Motif library. (-lXm)
+ LIBXM =
+@@ -62,10 +61,10 @@ LIBXM =
+ # LIBXM = -Wl,-Bstatic -Wl,-Bdynamic
+
+ # X extension library; needed for Athena and Motif >= 2.0. (-lXext)
+-LIBXEXT = -lXext
++LIBXEXT =
+
+ # Xpm library; needed for DDD and sometimes for Motif >= 2.0. (-lXpm)
+-LIBXPM = -lXpm
++LIBXPM =
+
+ # Xp library; sometimes needed for Motif >= 2.1. (-lXp)
+ LIBXP =
+@@ -74,13 +73,13 @@ LIBXP =
+ LIBGEN =
+
+ # X toolkit library. (-lXt)
+-LIBXT = -lXt
++LIBXT =
+
+ # Xaw library. (-lXaw)
+-LIBXAW = -lXaw
++LIBXAW =
+
+ # X library. (-lSM -lICE -lX11 -lnsl -lsocket)
+-LIBX11 = -lSM -lICE -lX11
++LIBX11 = -lSM -lICE
+
+ # All libraries shown above
+ ALL_X_LIBS = $(X_LDFLAGS) $(LIBXM) $(LIBXP) $(LIBXPM) $(LIBXEXT) \
+@@ -94,7 +93,7 @@ COMPILE_AND_LINK.c = \
+ $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(LDFLAGS)
+
+ ## Where to look for X include files. (-I/usr/X11R5/include)
+-X_INCLUDE = -I/usr/X11R6/include
++X_INCLUDE = -I/usr/include -I/home/papercrane/oe/angstrom.build/tmp/staging/arm-angstrom-linux-gnueabi/include/X11
+
+ ## Where to look for include files.
+ INCLUDE = -I. $(X_INCLUDE)
+@@ -129,8 +128,8 @@ xgpsspeed: $(XGPSOBJS)
+ $(LINK.c) -o $@ $(XGPSOBJS) -L. -lgpsd $(LIBXAW) $(ALL_X_LIBS) $(LIBS)
+
+ libgpsd.a: $(LIB_OBJECTS)
+- ar -r libgpsd.a $(LIB_OBJECTS)
+- ranlib libgpsd.a
++ $(AR) -r libgpsd.a $(LIB_OBJECTS)
++ $(RANLIB) libgpsd.a
+
+ clean:
+ rm -f *.o *.a gpsd gps *~ config.status
+Index: prismstumbler-0.7.3/src/gpsd/Makefile.arm
+===================================================================
+--- prismstumbler-0.7.3.orig/src/gpsd/Makefile.arm
++++ prismstumbler-0.7.3/src/gpsd/Makefile.arm
+@@ -94,7 +94,7 @@ COMPILE_AND_LINK.c = \
+ $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(LDFLAGS)
+
+ ## Where to look for X include files. (-I/usr/X11R5/include)
+-X_INCLUDE = -I/skiff/local/arm-linux/include/X11
++X_INCLUDE = @X_CFLAGS@
+
+ ## Where to look for include files.
+ INCLUDE = -I. $(X_INCLUDE)
+@@ -129,8 +129,8 @@ xgpsspeed: $(XGPSOBJS)
+ $(LINK.c) -o $@ $(XGPSOBJS) -L. -lgpsd $(LIBXAW) $(ALL_X_LIBS) $(LIBS)
+
+ libgpsd.a: $(LIB_OBJECTS)
+- ar -r libgpsd.a $(LIB_OBJECTS)
+- ranlib libgpsd.a
++ $(AR) -r libgpsd.a $(LIB_OBJECTS)
++ $(RANLIB) libgpsd.a
+
+ clean:
+ rm -f *.o *.a gpsd gps *~ config.status
+Index: prismstumbler-0.7.3/src/gpsd/Makefile.i386
+===================================================================
+--- prismstumbler-0.7.3.orig/src/gpsd/Makefile.i386
++++ prismstumbler-0.7.3/src/gpsd/Makefile.i386
+@@ -94,7 +94,7 @@ COMPILE_AND_LINK.c = \
+ $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(LDFLAGS)
+
+ ## Where to look for X include files. (-I/usr/X11R5/include)
+-X_INCLUDE = -I/usr/X11R6/include
++X_INCLUDE = @X_CFLAGS@
+
+ ## Where to look for include files.
+ INCLUDE = -I. $(X_INCLUDE)
+@@ -129,8 +129,8 @@ xgpsspeed: $(XGPSOBJS)
+ $(LINK.c) -o $@ $(XGPSOBJS) -L. -lgpsd $(LIBXAW) $(ALL_X_LIBS) $(LIBS)
+
+ libgpsd.a: $(LIB_OBJECTS)
+- ar -r libgpsd.a $(LIB_OBJECTS)
+- ranlib libgpsd.a
++ $(AR) -r libgpsd.a $(LIB_OBJECTS)
++ $(RANLIB) libgpsd.a
+
+ clean:
+ rm -f *.o *.a gpsd gps *~ config.status
diff --git a/packages/prismstumbler/prismstumbler-0.7.3/fix-includes.patch b/packages/prismstumbler/prismstumbler-0.7.3/fix-includes.patch
deleted file mode 100644
index 9aef61e9d3..0000000000
--- a/packages/prismstumbler/prismstumbler-0.7.3/fix-includes.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- prismstumbler-0.7.3/src/gpsd/Makefile.in~fix-includes
-+++ prismstumbler-0.7.3/src/gpsd/Makefile.in
-@@ -92,18 +92,6 @@
- COMPILE_AND_LINK.c = \
- $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(LDFLAGS)
-
--## Where to look for X include files. (-I/usr/X11R5/include)
--X_INCLUDE = @X_CFLAGS@
--
--## Where to look for include files.
--INCLUDE = -I. $(X_INCLUDE)
--
--## Implicit rules.
--.SUFFIXES: .c
--.c.o:
-- $(COMPILE.c) $(INCLUDE) -o $@ $<
--
--
- ## Libraries and object files
- LIB_OBJECTS = netlib.o nmea_parse.o serial.o tm.o em.o $(MOTIF_OBJECTS)
-
diff --git a/packages/prismstumbler/prismstumbler-0.7.3/wireless.patch b/packages/prismstumbler/prismstumbler-0.7.3/wireless.patch
new file mode 100644
index 0000000000..729a88d0c3
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler-0.7.3/wireless.patch
@@ -0,0 +1,21 @@
+--- prismstumbler-0.7.3/src/iface-wlan-14.c.orig 2007-04-30 22:22:11.000000000 +0200
++++ prismstumbler-0.7.3/src/iface-wlan-14.c 2007-04-30 22:22:40.000000000 +0200
+@@ -26,6 +26,7 @@
+ #include <string.h>
+ #include <errno.h>
+
++#include <net/if.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+ #include <linux/types.h> /* for "__kernel_caddr_t" et al */
+--- prismstumbler-0.7.3/src/cards.c.orig 2007-04-30 22:23:06.000000000 +0200
++++ prismstumbler-0.7.3/src/cards.c 2007-04-30 22:23:33.000000000 +0200
+@@ -9,6 +9,8 @@
+
+ #include <stdio.h>
+ #include <sys/socket.h>
++#include <linux/types.h>
++#include <net/if.h>
+ #include <linux/wireless.h>
+ #include <glib.h>
+ #include <string.h>
diff --git a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb
new file mode 100644
index 0000000000..86b4df46bf
--- /dev/null
+++ b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb
@@ -0,0 +1,44 @@
+SECTION = "x11/network"
+PR = "r3"
+
+PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc"
+DESCRIPTION = "Prismstumbler wireless LAN scanner"
+DESCRIPTION_prismstumbler-frontend = "Prismstumbler wireless LAN scanner GTK frontend"
+LICENSE = "GPL"
+DEPENDS = "libpcap gtk+ wireless-tools sqlite zlib dbus-glib gpsd"
+RDEPENDS = "wireless-tools"
+RRECOMMENDS = "gpsd"
+
+SRC_URI = "http://projects.linuxtogo.org/frs/download.php/14/${PN}-0.7.4pre1.tar.gz \
+ file://gpsapi.patch;patch=1 \
+ file://wireless.patch;patch=1 \
+ file://fix-includes.patch;patch=1;pnum=0"
+
+S = "${WORKDIR}/${PN}-0.7.4pre1"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --with-libgps=${STAGING_DIR}/${HOST_SYS} \
+ --with-libpcap=${STAGING_DIR}/${HOST_SYS} \
+ --with-sqlite-includes=${STAGING_INCDIR} \
+ --with-sqlite-libs=${STAGING_LIBDIR} \
+ --without-athena --enable-dbus \
+ --with-libiw=${STAGING_DIR}/${HOST_SYS}"
+
+CFLAGS =+ "-I${S}/include"
+LDFLAGS += "-lz"
+
+FILES_${PN} = "${bindir}/prismstumbler"
+
+FILES_prismstumbler-frontend = "${bindir}/psfront ${bindir}/pst \
+ ${datadir}/applications \
+ ${datadir}/pixmaps ${docdir}/prismstumbler/help.txt \
+ ${sysconfdir}"
+RDEPENDS_prismstumbler-frontend = "${PN}"
+
+
+do_install_append() {
+ chmod a+s ${D}${bindir}/prismstumbler
+}
diff --git a/packages/prismstumbler/prismstumbler_0.7.3.bb b/packages/prismstumbler/prismstumbler_0.7.3.bb
index 8699e5668b..eaebe2087f 100644
--- a/packages/prismstumbler/prismstumbler_0.7.3.bb
+++ b/packages/prismstumbler/prismstumbler_0.7.3.bb
@@ -1,20 +1,28 @@
SECTION = "x11/network"
-PR = "r4"
+PR = "r5"
PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc"
DESCRIPTION = "Prismstumbler wireless LAN scanner"
LICENSE = "GPL"
-DEPENDS = "libpcap gtk+ wireless-tools sqlite zlib"
+DEPENDS = "libpcap gtk+ wireless-tools sqlite zlib libxpm"
RDEPENDS = "wireless-tools"
SRC_URI = "${SOURCEFORGE_MIRROR}/prismstumbler/${PN}-${PV}.tar.bz2 \
file://bogoconf.patch;patch=1 \
- file://fix-includes.patch;patch=1 \
- file://libz.patch;patch=1;pnum=0"
+ file://crosscompile.patch;patch=1 \
+ file://libz.patch;patch=1;pnum=0 \
+ file://wireless.patch;patch=1"
inherit autotools pkgconfig
-EXTRA_OECONF = "--with-libpcap=${STAGING_DIR}/${HOST_SYS} --with-sqlite-libs=${STAGING_LIBDIR} --with-sqlite-includes=${STAGING_INCDIR}"
+EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --with-libpcap=${STAGING_DIR}/${HOST_SYS} \
+ --with-sqlite-includes=${STAGING_INCDIR} \
+ --with-sqlite-libs=${STAGING_LIBDIR} \
+ --without-athena \
+ --without-motif"
+
CFLAGS =+ "-I${S}/include -D_GNU_SOURCE"
FILES_${PN} = "${bindir}/prismstumbler"
diff --git a/packages/procps/procps.inc b/packages/procps/procps.inc
new file mode 100644
index 0000000000..ddc8030077
--- /dev/null
+++ b/packages/procps/procps.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Procps is the package that has a bunch \
+of small useful utilities that give information \
+about processes using the /proc filesystem. The package \
+includes the programs ps, top, vmstat, w, kill, and skill."
+HOMEPAGE = "http://procps.sf.net"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "ncurses"
+
+SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
+ file://install.patch;patch=1"
+
+inherit autotools
diff --git a/packages/procps/procps_3.1.15.bb b/packages/procps/procps_3.1.15.bb
index 12d6a43fd2..01114e80dc 100644
--- a/packages/procps/procps_3.1.15.bb
+++ b/packages/procps/procps_3.1.15.bb
@@ -1,17 +1,6 @@
-LICENSE = "GPL"
-DESCRIPTION = "Procps is the package that has a bunch \
-of small useful utilities that give information \
-about processes using the /proc filesystem. The package \
-includes the programs ps, top, vmstat, w, kill, and skill."
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "ncurses"
+require procps.inc
-SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
- file://procps_${PV}-2.diff;patch=1 \
- file://install.patch;patch=1"
-
-inherit autotools
+SRC_URI += "file://procps_${PV}-2.diff;patch=1"
EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} \
diff --git a/packages/procps/procps_3.2.1.bb b/packages/procps/procps_3.2.1.bb
index 3c0aaf547a..33df399c5f 100644
--- a/packages/procps/procps_3.2.1.bb
+++ b/packages/procps/procps_3.2.1.bb
@@ -1,18 +1,8 @@
-LICENSE = "GPL"
-DESCRIPTION = "Procps is the package that has a bunch \
-of small useful utilities that give information \
-about processes using the /proc filesystem. The package \
-includes the programs ps, top, vmstat, w, kill, and skill."
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "ncurses"
-PR = "r1"
+require procps.inc
-SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
- file://install.patch;patch=1 \
- file://pagesz-not-constant.patch;patch=1"
+PR = "r1"
-inherit autotools
+SRC_URI += "file://pagesz-not-constant.patch;patch=1"
EXTRA_OEMAKE = "CFLAGS=-I${STAGING_INCDIR} \
LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} \
diff --git a/packages/procps/procps_3.2.5.bb b/packages/procps/procps_3.2.5.bb
index 5101874a5b..de7524b2cb 100644
--- a/packages/procps/procps_3.2.5.bb
+++ b/packages/procps/procps_3.2.5.bb
@@ -1,21 +1,10 @@
-LICENSE = "GPL"
-DESCRIPTION = "Procps is the package that has a bunch \
-of small useful utilities that give information \
-about processes using the /proc filesystem. The package \
-includes the programs ps, top, vmstat, w, kill, and skill."
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "ncurses"
-PR = "r5"
-
-SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
- file://install.patch;patch=1 \
- file://procmodule.patch;patch=1 \
- file://psmodule.patch;patch=1"
+require procps.inc
+PR = "r5"
+SRC_URI += "file://procmodule.patch;patch=1 \
+ file://psmodule.patch;patch=1"
-inherit autotools
FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \
${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \
${bindir}/snice ${bindir}/vmstat ${bindir}/slabtop ${bindir}/pkill ${bindir}/skill ${bindir}/tload \
diff --git a/packages/procps/procps_3.2.7.bb b/packages/procps/procps_3.2.7.bb
index 5101874a5b..de7524b2cb 100644
--- a/packages/procps/procps_3.2.7.bb
+++ b/packages/procps/procps_3.2.7.bb
@@ -1,21 +1,10 @@
-LICENSE = "GPL"
-DESCRIPTION = "Procps is the package that has a bunch \
-of small useful utilities that give information \
-about processes using the /proc filesystem. The package \
-includes the programs ps, top, vmstat, w, kill, and skill."
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "ncurses"
-PR = "r5"
-
-SRC_URI = "http://procps.sourceforge.net/procps-${PV}.tar.gz \
- file://install.patch;patch=1 \
- file://procmodule.patch;patch=1 \
- file://psmodule.patch;patch=1"
+require procps.inc
+PR = "r5"
+SRC_URI += "file://procmodule.patch;patch=1 \
+ file://psmodule.patch;patch=1"
-inherit autotools
FILES = "${bindir}/top.${PN} ${base_bindir}/ps.${PN} ${bindir}/uptime.${PN} ${base_bindir}/kill.${PN} \
${bindir}/free.${PN} ${bindir}/w ${bindir}/watch ${bindir}/pgrep ${bindir}/pmap ${bindir}/pwdx \
${bindir}/snice ${bindir}/vmstat ${bindir}/slabtop ${bindir}/pkill ${bindir}/skill ${bindir}/tload \
diff --git a/packages/proj4/proj-4-native_4.9.bb b/packages/proj4/proj-4-native_4.9.bb
new file mode 100644
index 0000000000..e2ce77e4db
--- /dev/null
+++ b/packages/proj4/proj-4-native_4.9.bb
@@ -0,0 +1,3 @@
+require proj-4.inc
+
+inherit native
diff --git a/packages/proj4/proj-4.inc b/packages/proj4/proj-4.inc
new file mode 100644
index 0000000000..da78a384bd
--- /dev/null
+++ b/packages/proj4/proj-4.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "PROJ.4 - Cartographic Projections Library"
+HOMEPAGE = "http://www.remotesensing.org/proj/"
+LICENSE = "MIT"
+
+PR = "r1"
+
+inherit autotools pkgconfig
+
+SRC_URI = "ftp://ftp.remotesensing.org/proj/proj-4.${PV}.tar.gz"
+
+S = "${WORKDIR}/proj-4.${PV}"
+
+FILES_${PN} += "${datadir}/proj"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/proj4/proj-4_4.9.bb b/packages/proj4/proj-4_4.9.bb
index 1f7ea8c0b9..d6d4cd9f88 100644
--- a/packages/proj4/proj-4_4.9.bb
+++ b/packages/proj4/proj-4_4.9.bb
@@ -1,14 +1,4 @@
-DESCRIPTION = "PROJ.4 - Cartographic Projections Library"
-HOMEPAGE = "http://www.remotesensing.org/proj/"
-LICENSE = "MIT"
+require proj-4.inc
-inherit autotools pkgconfig
-
-SRC_URI = "ftp://ftp.remotesensing.org/proj/proj-4.${PV}.tar.gz"
-
-S = "${WORKDIR}/proj-4.${PV}"
-
-do_stage() {
- autotools_stage_all
-}
+DEPENDS += "proj-4-native"
diff --git a/packages/psplash/files/angstrom/.mtn2git_empty b/packages/psplash/files/angstrom/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/psplash/files/angstrom/.mtn2git_empty
diff --git a/packages/psplash/files/angstrom/angstrom-psplash-qvga-img.h b/packages/psplash/files/angstrom/angstrom-psplash-qvga-img.h
new file mode 100644
index 0000000000..a03d16e57a
--- /dev/null
+++ b/packages/psplash/files/angstrom/angstrom-psplash-qvga-img.h
@@ -0,0 +1,1336 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define HAND_IMG_ROWSTRIDE (1016)
+#define HAND_IMG_WIDTH (254)
+#define HAND_IMG_HEIGHT (264)
+#define HAND_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\331\333\343\342\377\5\327" \
+ "\340\337\377\314\327\325\377\306\323\320\377\321\333\331\377\332\342" \
+ "\341\377\377\333\343\342\377\206\333\343\342\377\1\276\311\307\377\202" \
+ "g~y\377\357\333\343\342\377\2\253\276\272\377\233\262\255\377\204\223" \
+ "\254\247\377\3\225\255\250\377\240\266\262\377\303\321\316\377\377\333" \
+ "\343\342\377\204\333\343\342\377\1\270\305\303\377\202Slg\377\357\333" \
+ "\343\342\377\11\231\260\254\377\223\254\247\377\243\271\264\377\267\307" \
+ "\304\377\277\316\313\377\256\301\275\377\232\261\255\377\223\254\247" \
+ "\377\271\311\306\377\377\333\343\342\377\204\333\343\342\377\1\270\305" \
+ "\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377" \
+ "\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\364\333\343" \
+ "\342\377\4\332\342\341\377\316\330\326\377\277\312\310\377\260\275\273" \
+ "\377\213\254\271\267\377\1\225\246\243\377\202Slg\377\357\333\343\342" \
+ "\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254" \
+ "\247\377\271\311\306\377\362\333\343\342\377\3\266\302\300\377v\212\206" \
+ "\377Vni\377\221Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\360\333" \
+ "\343\342\377\2\320\331\330\377n\204\200\377\224Slg\377\357\333\343\342" \
+ "\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254" \
+ "\247\377\271\311\306\377\357\333\343\342\377\2\332\342\341\377x\215\211" \
+ "\377\225Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377\377" \
+ "\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333\343\342" \
+ "\377\1\240\260\255\377\204Slg\377\4Uni\377s\210\203\377\177\222\217\377" \
+ "\213\235\231\377\213\222\243\240\377\1\202\225\221\377\202Slg\377\357" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\1{\217\213\377" \
+ "\203Slg\377\2\230\250\245\377\317\330\327\377\216\333\343\342\377\1\270" \
+ "\305\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1byt\377\202Slg\377\1\230\250\245\377\220\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377" \
+ "\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377" \
+ "\356\333\343\342\377\1\324\335\334\377\203Slg\377\1\324\334\333\377\220" \
+ "\333\343\342\377\1\274\307\306\377\202_vr\377\357\333\343\342\377\202" \
+ "\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377" \
+ "\271\311\306\377\356\333\343\342\377\4\332\342\341\377Xql\377Slg\377" \
+ "f|x\377\377\333\343\342\377\204\333\343\342\377\202\231\260\254\377\204" \
+ "\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357" \
+ "\333\343\342\377\3n\204\200\377Slg\377_vr\377\377\333\343\342\377\204" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\1\243\262\257" \
+ "\377\202Slg\377\1\311\324\322\377\220\333\343\342\377\1\325\336\335\377" \
+ "\202\305\320\316\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\4\327\337\336\377dzv\377Slg\377\220\242\236\377\220\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\360\333\343\342\377\4\307\321\320\377`ws\377Slg\377\240" \
+ "\260\255\377\217\333\343\342\377\1\270\305\303\377\202Slg\377\357\333" \
+ "\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377" \
+ "\223\254\247\377\271\311\306\377\361\333\343\342\377\6\307\322\320\377" \
+ "u\211\205\377Slg\377m\202~\377\246\265\262\377\321\333\331\377\214\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\362\333\343\342\377\2\332\342\341\377\213\235\231\377\203" \
+ "Slg\377\3Xpk\377f}x\377s\210\203\377\211t\211\205\377\1l\201}\377\202" \
+ "Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3" \
+ "\326\337\335\377\223\254\247\377\271\311\306\377\361\333\343\342\377" \
+ "\2\265\302\300\377i\177{\377\223Slg\377\357\333\343\342\377\202\231\260" \
+ "\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311" \
+ "\306\377\360\333\343\342\377\2\255\272\270\377Uni\377\224Slg\377\357" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\2\316\327\326" \
+ "\377Wpk\377\225Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1\220\241\236\377\203Slg\377\5Woj\377\205\227\224\377\254" \
+ "\271\267\377\270\304\302\377\304\316\315\377\213\311\324\322\377\1\254" \
+ "\271\267\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1i\177{\377\202Slg\377\2dzv\377\316\327\326\377\217\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\356\333\343\342\377\2\331\342\341\377Voj\377\202Slg\377" \
+ "\1\273\307\305\377\220\333\343\342\377\1\270\305\303\377\202Slg\377\357" \
+ "\333\343\342\377\3\241\267\262\377\223\254\247\377\363\366\365\377\203" \
+ "\377\377\377\377\3\304\321\317\377\223\254\247\377\301\317\314\377\356" \
+ "\333\343\342\377\1\324\335\334\377\202Slg\377\2Xpk\377\331\342\341\377" \
+ "\220\333\343\342\377\1\311\324\322\377\202\226\247\244\377\357\333\343" \
+ "\342\377\3\264\305\302\377\223\254\247\377\326\337\335\377\203\377\377" \
+ "\377\377\3\246\273\267\377\223\254\247\377\324\335\334\377\357\333\343" \
+ "\342\377\3_vr\377Slg\377i\177{\377\377\333\343\342\377\202\333\343\342" \
+ "\377\5\317\332\331\377\257\301\276\377\217\251\244\377\223\254\247\377" \
+ "\270\310\305\377\202\377\377\377\377\6\365\367\367\377\223\254\247\377" \
+ "\217\251\244\377\234\263\257\377\275\314\312\377\330\341\340\377\355" \
+ "\333\343\342\377\4\177\222\217\377Slg\377Vni\377\327\337\336\377\376" \
+ "\333\343\342\377\2\277\316\313\377\207\243\236\377\203o\221\212\377\7" \
+ "\221\253\246\377\233\262\256\377\376\376\376\377\377\377\377\377\330" \
+ "\341\337\377\223\254\247\377\202\237\231\377\202o\221\212\377\3t\225" \
+ "\216\377\234\263\257\377\322\334\333\377\353\333\343\342\377\1\277\313" \
+ "\311\377\202Slg\377\1\273\307\305\377\220\333\343\342\377\1\307\322\320" \
+ "\377\202\216\237\234\377\351\333\343\342\377\2\310\325\323\377\216\251" \
+ "\243\377\204o\221\212\377\10v\226\220\377\221\252\245\377\223\254\247" \
+ "\377\324\336\334\377\340\347\346\377\262\304\300\377\223\254\247\377" \
+ "\210\244\237\377\204o\221\212\377\3u\225\217\377\250\274\270\377\327" \
+ "\340\337\377\352\333\343\342\377\4\226\246\243\377Slg\377h\177z\377\321" \
+ "\333\331\377\217\333\343\342\377\1\270\305\303\377\202Slg\377\350\333" \
+ "\343\342\377\2\264\305\302\377q\223\214\377\202o\221\212\377\5q\223\214" \
+ "\377\233\263\256\377\300\317\314\377\331\342\340\377\273\312\307\377" \
+ "\204\223\254\247\377\5\225\255\250\377\330\341\337\377\321\333\332\377" \
+ "\261\303\277\377\206\243\235\377\203o\221\212\377\2\205\242\234\377\317" \
+ "\332\331\377\352\333\343\342\377\4\230\250\245\377Tmh\377q\206\202\377" \
+ "\276\311\307\377\216\333\343\342\377\1\270\305\303\377\202Slg\377\346" \
+ "\333\343\342\377\2\332\342\341\377\241\267\263\377\203o\221\212\377\2" \
+ "\227\257\253\377\315\331\327\377\203\333\343\342\377\1\321\333\332\377" \
+ "\204\262\303\300\377\1\272\312\307\377\204\333\343\342\377\2\270\310" \
+ "\306\377\177\235\227\377\202o\221\212\377\2z\231\222\377\304\322\320" \
+ "\377\347\333\343\342\377\1\317\330\327\377\202\301\314\312\377\10\247" \
+ "\266\263\377^vq\377Slg\377o\204\200\377\232\252\247\377\247\266\263\377" \
+ "\264\301\277\377\277\313\311\377\211\301\314\312\377\1\245\264\261\377" \
+ "\202Slg\377\346\333\343\342\377\1\236\265\260\377\202o\221\212\377\2" \
+ "t\225\216\377\273\313\310\377\220\333\343\342\377\2\327\340\337\377\225" \
+ "\256\251\377\202o\221\212\377\2t\225\216\377\310\325\323\377\346\333" \
+ "\343\342\377\1\233\253\250\377\226Slg\377\345\333\343\342\377\1\261\303" \
+ "\277\377\202o\221\212\377\2|\233\225\377\311\325\323\377\223\333\343" \
+ "\342\377\1\247\273\267\377\202o\221\212\377\2|\233\225\377\322\334\333" \
+ "\377\345\333\343\342\377\1\233\253\250\377\226Slg\377\344\333\343\342" \
+ "\377\5\304\321\317\377q\222\213\377o\221\212\377u\226\217\377\312\326" \
+ "\324\377\225\333\343\342\377\1\242\270\264\377\202o\221\212\377\2\211" \
+ "\244\237\377\332\342\341\377\344\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\344\333\343\342\377\4\207\243\236\377o\221\212\377p\222\213\377" \
+ "\275\314\312\377\226\333\343\342\377\2\332\342\341\377\220\252\245\377" \
+ "\202o\221\212\377\1\264\305\302\377\344\333\343\342\377\3\233\253\250" \
+ "\377Slg\377\\so\377\221x\215\211\377\1o\204\200\377\202Slg\377\343\333" \
+ "\343\342\377\1\267\310\305\377\202o\221\212\377\1\237\265\261\377\230" \
+ "\333\343\342\377\5\324\336\334\377v\226\220\377o\221\212\377|\233\225" \
+ "\377\330\341\337\377\343\333\343\342\377\3\233\253\250\377Slg\377t\211" \
+ "\205\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\342\333\343" \
+ "\342\377\5\332\342\341\377~\234\226\377o\221\212\377t\225\216\377\322" \
+ "\334\333\377\231\333\343\342\377\1\251\275\271\377\202o\221\212\377\1" \
+ "\255\300\275\377\343\333\343\342\377\3\233\253\250\377Slg\377t\211\205" \
+ "\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\342\333\343\342" \
+ "\377\1\304\321\317\377\202o\221\212\377\1\245\272\266\377\232\333\343" \
+ "\342\377\4\327\340\337\377y\231\222\377o\221\212\377\207\243\236\377" \
+ "\343\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343" \
+ "\342\377\1\270\305\303\377\202Slg\377\342\333\343\342\377\1\243\270\264" \
+ "\377\202o\221\212\377\1\314\327\325\377\233\333\343\342\377\1\234\263" \
+ "\257\377\202o\221\212\377\1\321\333\332\377\342\333\343\342\377\3\277" \
+ "\312\310\377\237\256\253\377\256\273\271\377\221\333\343\342\377\1\323" \
+ "\334\333\377\202\275\310\306\377\342\333\343\342\377\3\202\237\231\377" \
+ "o\221\212\377\201\236\230\377\234\333\343\342\377\1\276\315\312\377\202" \
+ "o\221\212\377\1\261\303\300\377\377\333\343\342\377\333\333\343\342\377" \
+ "\1\330\341\340\377\202o\221\212\377\1\234\263\256\377\234\333\343\342" \
+ "\377\1\330\341\337\377\202o\221\212\377\1\234\263\257\377\377\333\343" \
+ "\342\377\333\333\343\342\377\1\317\332\330\377\202o\221\212\377\1\250" \
+ "\274\270\377\235\333\343\342\377\3y\230\222\377o\221\212\377\222\254" \
+ "\246\377\377\333\343\342\377\333\333\343\342\377\1\304\322\320\377\202" \
+ "o\221\212\377\1\264\306\302\377\235\333\343\342\377\3\205\242\234\377" \
+ "o\221\212\377\207\243\236\377\350\333\343\342\377\13\327\340\337\377" \
+ "\267\303\301\377\225\246\243\377{\217\213\377p\205\201\377f}x\377k\201" \
+ "}\377u\211\205\377\205\227\224\377\245\263\261\377\310\323\321\377\347" \
+ "\333\343\342\377\1\275\314\312\377\202o\221\212\377\1\274\314\311\377" \
+ "\235\333\343\342\377\3\215\250\242\377o\221\212\377\200\236\230\377\346" \
+ "\333\343\342\377\3\324\334\333\377\231\251\246\377_wr\377\212Slg\377" \
+ "\2x\215\211\377\270\304\302\377\345\333\343\342\377\1\306\323\321\377" \
+ "\202o\221\212\377\1\263\304\301\377\235\333\343\342\377\3\203\240\232" \
+ "\377o\221\212\377\211\244\237\377\345\333\343\342\377\2\300\314\312\377" \
+ "f|x\377\216Slg\377\2\216\240\235\377\330\340\337\377\343\333\343\342" \
+ "\377\1\320\333\331\377\202o\221\212\377\1\247\273\267\377\235\333\343" \
+ "\342\377\3w\227\221\377o\221\212\377\223\254\250\377\344\333\343\342" \
+ "\377\2\273\307\305\377Woj\377\220Slg\377\2y\216\212\377\330\341\340\377" \
+ "\342\333\343\342\377\4\331\342\340\377p\221\213\377o\221\212\377\231" \
+ "\261\254\377\234\333\343\342\377\1\326\337\336\377\202o\221\212\377\1" \
+ "\236\265\260\377\331\333\343\342\377\3\272\306\304\377\231\251\246\377" \
+ "\310\322\321\377\207\333\343\342\377\2\310\322\321\377\\to\377\205Sl" \
+ "g\377\7Woj\377dzv\377q\206\202\377}\221\215\377w\214\210\377k\201|\377" \
+ "]up\377\206Slg\377\1\211\233\230\377\343\333\343\342\377\3\206\242\234" \
+ "\377o\221\212\377|\233\225\377\234\333\343\342\377\1\271\311\306\377" \
+ "\202o\221\212\377\1\265\306\303\377\330\333\343\342\377\1\222\243\240" \
+ "\377\203Slg\377\1\271\306\304\377\206\333\343\342\377\1|\217\214\377" \
+ "\203Slg\377\3dzv\377\231\252\247\377\314\326\324\377\207\333\343\342" \
+ "\377\4\330\340\337\377\267\304\302\377\201\224\220\377Vni\377\203Slg" \
+ "\377\1\274\307\306\377\342\333\343\342\377\1\247\274\270\377\202o\221" \
+ "\212\377\1\307\323\321\377\233\333\343\342\377\4\227\257\253\377o\221" \
+ "\212\377q\222\213\377\324\336\334\377\327\333\343\342\377\2\325\335\334" \
+ "\377Zrm\377\203Slg\377\1\205\227\224\377\205\333\343\342\377\1\275\310" \
+ "\306\377\202Slg\377\3Umh\377\251\270\265\377\331\342\341\377\214\333" \
+ "\343\342\377\2\317\331\327\377y\216\212\377\202Slg\377\1t\211\205\377" \
+ "\342\333\343\342\377\1\310\325\323\377\202o\221\212\377\1\237\265\261" \
+ "\377\232\333\343\342\377\4\325\336\335\377v\226\217\377o\221\212\377" \
+ "\213\246\241\377\330\333\343\342\377\2\331\341\340\377czu\377\203Slg" \
+ "\377\1\221\243\237\377\205\333\343\342\377\4\220\241\236\377Slg\377T" \
+ "lg\377\253\271\267\377\217\333\343\342\377\2\326\336\335\377s\210\204" \
+ "\377\202Slg\377\1\317\331\327\377\342\333\343\342\377\4\203\240\232\377" \
+ "o\221\212\377r\223\214\377\317\331\330\377\205\333\343\342\377\2\305" \
+ "\322\320\377\322\334\332\377\212\333\343\342\377\3\332\342\341\377\305" \
+ "\322\320\377\322\334\333\377\205\333\343\342\377\1\243\270\264\377\202" \
+ "o\221\212\377\1\262\304\301\377\331\333\343\342\377\5\250\266\264\377" \
+ "Yql\377Slg\377f|x\377\310\322\321\377\205\333\343\342\377\3k\201}\377" \
+ "Slg\377\212\234\231\377\221\333\343\342\377\4\321\332\331\377Tmh\377" \
+ "Slg\377\253\271\267\377\342\333\343\342\377\1\276\315\312\377\202o\221" \
+ "\212\377\1\227\257\253\377\204\333\343\342\377\6\327\340\337\377\227" \
+ "\257\252\377\223\254\247\377\251\275\271\377\307\324\322\377\332\342" \
+ "\341\377\205\333\343\342\377\5\325\337\335\377\272\311\307\377\234\263" \
+ "\256\377\223\254\247\377\263\304\301\377\204\333\343\342\377\5\317\332" \
+ "\331\377s\224\215\377o\221\212\377\201\236\230\377\331\342\340\377\332" \
+ "\333\343\342\377\3\324\334\333\377\274\307\306\377\332\342\341\377\206" \
+ "\333\343\342\377\3Xql\377Slg\377\255\272\270\377\222\333\343\342\377" \
+ "\3m\202~\377Slg\377\230\251\246\377\343\333\343\342\377\1\216\250\243" \
+ "\377\202o\221\212\377\1\264\305\302\377\203\333\343\342\377\3\275\314" \
+ "\312\377\223\254\247\377\225\255\250\377\202\223\254\247\377\7\236\264" \
+ "\260\377\273\313\310\377\327\337\336\377\333\343\342\377\315\330\326" \
+ "\377\256\301\275\377\225\255\251\377\202\223\254\247\377\3\224\254\250" \
+ "\377\227\257\252\377\330\341\337\377\202\333\343\342\377\2\330\341\337" \
+ "\377\207\243\236\377\202o\221\212\377\1\273\312\310\377\343\333\343\342" \
+ "\377\1\324\335\334\377\202Slg\377\1\314\326\324\377\222\333\343\342\377" \
+ "\3\214\236\233\377Slg\377\214\235\232\377\343\333\343\342\377\5\312\326" \
+ "\324\377t\225\216\377o\221\212\377q\223\214\377\303\320\316\377\202\333" \
+ "\343\342\377\5\237\265\261\377\223\254\247\377\347\355\354\377\335\344" \
+ "\343\377\257\301\276\377\202\223\254\247\377\2\250\274\270\377\321\334" \
+ "\332\377\202\223\254\247\377\6\231\261\254\377\303\321\316\377\360\363" \
+ "\363\377\271\311\306\377\223\254\247\377\277\315\313\377\202\333\343" \
+ "\342\377\1\227\257\252\377\202o\221\212\377\1\222\254\246\377\344\333" \
+ "\343\342\377\1\325\335\334\377\202Slg\377\1\313\325\323\377\222\333\343" \
+ "\342\377\3\213\235\231\377Slg\377\214\236\233\377\344\333\343\342\377" \
+ "\1\273\312\310\377\202o\221\212\377\5v\226\220\377\277\316\313\377\311" \
+ "\325\323\377\223\254\247\377\251\275\271\377\203\377\377\377\377\7\355" \
+ "\361\360\377\227\257\253\377\226\256\251\377\273\312\307\377\223\254" \
+ "\247\377\271\311\306\377\372\373\373\377\202\377\377\377\377\5\346\354" \
+ "\353\377\223\254\247\377\240\266\262\377\330\341\340\377\232\261\255" \
+ "\377\202o\221\212\377\2\203\240\232\377\326\337\336\377\334\333\343\342" \
+ "\377\3\322\333\332\377\267\303\301\377\331\341\340\377\206\333\343\342" \
+ "\377\3Yql\377Slg\377\253\271\267\377\222\333\343\342\377\3k\201}\377" \
+ "Slg\377\231\251\246\377\345\333\343\342\377\1\252\276\272\377\202o\221" \
+ "\212\377\4p\222\213\377\234\263\256\377\223\254\247\377\327\340\336\377" \
+ "\203\377\377\377\377\2\344\352\351\377\232\261\254\377\202\223\254\247" \
+ "\377\3\224\255\250\377\262\303\300\377\371\372\372\377\203\377\377\377" \
+ "\377\3\250\274\270\377\223\254\247\377\214\246\241\377\202o\221\212\377" \
+ "\2y\231\222\377\317\331\330\377\334\333\343\342\377\5\247\266\263\377" \
+ "Xql\377Slg\377`ws\377\305\320\316\377\205\333\343\342\377\3l\201}\377" \
+ "Slg\377\210\233\227\377\221\333\343\342\377\4\317\331\327\377Tlg\377" \
+ "Slg\377\254\271\267\377\346\333\343\342\377\6\257\301\276\377p\222\213" \
+ "\377r\223\214\377\222\253\246\377\233\262\256\377\374\374\374\377\202" \
+ "\377\377\377\377\11\316\331\327\377\223\254\247\377\252\275\272\377\320" \
+ "\333\331\377\332\343\341\377\305\323\320\377\227\257\253\377\237\265" \
+ "\261\377\362\365\364\377\202\377\377\377\377\6\325\337\335\377\223\254" \
+ "\247\377\206\242\234\377o\221\212\377\202\237\231\377\315\330\326\377" \
+ "\334\333\343\342\377\2\331\341\340\377czu\377\203Slg\377\1\217\241\235" \
+ "\377\205\333\343\342\377\1\221\243\237\377\202Slg\377\1\251\267\265\377" \
+ "\217\333\343\342\377\5\325\335\334\377p\206\202\377Slg\377Tlg\377\320" \
+ "\331\330\377\347\333\343\342\377\4\277\316\313\377\204\241\233\377\223" \
+ "\254\247\377\306\323\320\377\202\377\377\377\377\4\352\357\356\377\225" \
+ "\255\250\377\300\317\314\377\376\376\376\377\203\377\377\377\377\12\361" \
+ "\364\363\377\236\264\260\377\257\302\276\377\376\376\376\377\377\377" \
+ "\377\377\373\374\373\377\232\261\254\377\222\253\246\377\217\251\244" \
+ "\377\325\337\335\377\335\333\343\342\377\2\325\336\335\377[sn\377\203" \
+ "Slg\377\1\206\231\225\377\205\333\343\342\377\1\276\312\310\377\202S" \
+ "lg\377\3Umh\377\251\267\265\377\331\342\341\377\214\333\343\342\377\2" \
+ "\315\326\325\377v\213\207\377\202Slg\377\1v\213\207\377\350\333\343\342" \
+ "\377\4\331\341\340\377\230\260\253\377\224\254\247\377\362\365\364\377" \
+ "\202\377\377\377\377\3\272\312\307\377\243\270\264\377\374\375\375\377" \
+ "\205\377\377\377\377\3\335\345\343\377\223\254\247\377\352\357\356\377" \
+ "\202\377\377\377\377\3\304\321\317\377\223\254\247\377\267\307\304\377" \
+ "\337\333\343\342\377\1\223\244\240\377\202Slg\377\2Umh\377\275\310\306" \
+ "\377\206\333\343\342\377\1~\222\216\377\203Slg\377\4czu\377\227\247\244" \
+ "\377\310\322\321\377\331\341\340\377\206\333\343\342\377\4\325\335\334" \
+ "\377\263\300\276\377}\220\215\377Tmh\377\203Slg\377\1\277\312\310\377" \
+ "\350\333\343\342\377\3\302\320\315\377\223\254\247\377\264\305\302\377" \
+ "\203\377\377\377\377\2\243\271\264\377\277\316\313\377\206\377\377\377" \
+ "\377\3\373\374\373\377\224\255\250\377\322\335\333\377\202\377\377\377" \
+ "\377\4\360\363\363\377\223\254\247\377\232\262\255\377\332\342\341\377" \
+ "\337\333\343\342\377\3\274\310\306\377\236\255\253\377\315\327\325\377" \
+ "\207\333\343\342\377\2\311\324\322\377^uq\377\205Slg\377\7Tmh\377_wr" \
+ "\377m\202~\377y\215\211\377s\210\204\377f}x\377Yql\377\206Slg\377\1\217" \
+ "\240\235\377\351\333\343\342\377\3\244\271\265\377\223\254\247\377\342" \
+ "\350\347\377\203\377\377\377\377\2\240\266\262\377\302\320\315\377\206" \
+ "\377\377\377\377\3\374\375\375\377\225\255\251\377\317\332\330\377\203" \
+ "\377\377\377\377\3\262\304\300\377\223\254\247\377\303\321\317\377\352" \
+ "\333\343\342\377\2\275\311\307\377Xql\377\220Slg\377\2}\221\215\377\331" \
+ "\342\341\377\350\333\343\342\377\4\316\331\327\377\223\254\247\377\243" \
+ "\270\264\377\376\376\376\377\203\377\377\377\377\2\267\307\304\377\250" \
+ "\274\270\377\206\377\377\377\377\3\345\353\351\377\223\254\247\377\346" \
+ "\354\353\377\203\377\377\377\377\3\340\347\345\377\223\254\247\377\245" \
+ "\272\266\377\353\333\343\342\377\2\303\316\314\377h\177z\377\215Slg\377" \
+ "\3Tlg\377\225\245\242\377\331\341\340\377\351\333\343\342\377\3\257\302" \
+ "\276\377\223\254\247\377\320\333\331\377\204\377\377\377\377\3\340\347" \
+ "\346\377\223\254\247\377\317\332\330\377\204\377\377\377\377\4\371\372" \
+ "\372\377\245\272\266\377\246\272\266\377\374\375\375\377\203\377\377" \
+ "\377\377\4\376\376\376\377\242\267\263\377\223\254\247\377\317\331\330" \
+ "\377\353\333\343\342\377\3\325\335\334\377\235\255\252\377czu\377\211" \
+ "Slg\377\3Tlg\377\177\222\217\377\277\312\310\377\352\333\343\342\377" \
+ "\4\326\337\336\377\225\256\251\377\227\257\253\377\371\372\372\377\205" \
+ "\377\377\377\377\11\277\316\313\377\223\254\247\377\272\312\307\377\341" \
+ "\350\346\377\353\360\357\377\326\340\336\377\240\266\261\377\227\257" \
+ "\252\377\352\357\356\377\205\377\377\377\377\3\316\331\327\377\223\254" \
+ "\247\377\260\302\277\377\355\333\343\342\377\13\330\341\340\377\273\307" \
+ "\305\377\231\252\247\377\177\222\217\377t\211\205\377k\201|\377o\205" \
+ "\201\377y\215\211\377\211\233\230\377\251\267\265\377\314\326\324\377" \
+ "\354\333\343\342\377\3\273\312\310\377\223\254\247\377\277\316\313\377" \
+ "\207\377\377\377\377\2\315\330\327\377\224\255\250\377\203\223\254\247" \
+ "\377\2\235\263\257\377\360\363\362\377\206\377\377\377\377\4\370\371" \
+ "\371\377\227\257\252\377\226\256\252\377\327\340\336\377\377\333\343" \
+ "\342\377\343\333\343\342\377\4\332\342\341\377\235\263\257\377\223\254" \
+ "\247\377\354\361\360\377\207\377\377\377\377\7\310\325\322\377\223\254" \
+ "\247\377\262\303\300\377\307\323\321\377\231\260\253\377\225\255\251" \
+ "\377\365\367\367\377\207\377\377\377\377\3\275\314\311\377\223\254\247" \
+ "\377\274\313\311\377\346\333\343\342\377\1\316\327\326\377\205\301\314" \
+ "\312\377\1\327\340\337\377\365\333\343\342\377\3\306\323\321\377\223" \
+ "\254\247\377\256\300\275\377\207\377\377\377\377\10\374\375\375\377\235" \
+ "\264\257\377\224\255\250\377\324\336\334\377\333\343\342\377\266\307" \
+ "\304\377\223\254\247\377\312\326\324\377\207\377\377\377\377\3\353\357" \
+ "\356\377\223\254\247\377\236\264\260\377\346\333\343\342\377\1\204\227" \
+ "\223\377\205Slg\377\1\311\324\322\377\365\333\343\342\377\3\250\274\270" \
+ "\377\223\254\247\377\335\345\344\377\207\377\377\377\377\3\332\342\340" \
+ "\377\223\254\247\377\254\277\274\377\202\333\343\342\377\4\323\335\334" \
+ "\377\224\255\250\377\236\265\260\377\375\376\375\377\207\377\377\377" \
+ "\377\3\256\301\275\377\223\254\247\377\310\324\322\377\345\333\343\342" \
+ "\377\1i\177{\377\205Slg\377\1\311\324\322\377\364\333\343\342\377\4\321" \
+ "\334\332\377\223\254\247\377\240\265\261\377\376\376\376\377\207\377" \
+ "\377\377\377\3\254\277\274\377\223\254\247\377\312\326\324\377\203\333" \
+ "\343\342\377\3\253\276\272\377\223\254\247\377\334\344\342\377\207\377" \
+ "\377\377\377\3\333\343\342\377\223\254\247\377\251\275\271\377\345\333" \
+ "\343\342\377\1Vni\377\202Slg\377\4Yrm\377\234\253\251\377\302\315\313" \
+ "\377\331\342\341\377\364\333\343\342\377\3\264\305\302\377\223\254\247" \
+ "\377\314\330\325\377\207\377\377\377\377\3\353\360\357\377\223\254\247" \
+ "\377\241\266\262\377\204\333\343\342\377\3\311\325\323\377\223\254\247" \
+ "\377\256\301\275\377\207\377\377\377\377\4\375\375\375\377\236\265\260" \
+ "\377\223\254\247\377\322\334\333\377\343\333\343\342\377\1\324\334\333" \
+ "\377\203Slg\377\1\261\277\274\377\366\333\343\342\377\4\330\341\340\377" \
+ "\230\260\253\377\225\256\251\377\366\370\370\377\207\377\377\377\377" \
+ "\3\276\315\312\377\223\254\247\377\277\315\313\377\205\333\343\342\377" \
+ "\3\237\265\261\377\223\254\247\377\355\361\360\377\207\377\377\377\377" \
+ "\3\312\326\324\377\223\254\247\377\265\306\303\377\343\333\343\342\377" \
+ "\1\326\337\336\377\202Slg\377\1]up\377\367\333\343\342\377\3\277\316" \
+ "\313\377\223\254\247\377\272\312\307\377\207\377\377\377\377\4\370\371" \
+ "\371\377\227\257\252\377\230\257\253\377\330\341\337\377\205\333\343" \
+ "\342\377\3\275\314\312\377\223\254\247\377\277\316\313\377\207\377\377" \
+ "\377\377\4\365\367\367\377\225\255\251\377\231\260\254\377\331\341\340" \
+ "\377\343\333\343\342\377\3`ws\377Slg\377i\200{\377\367\333\343\342\377" \
+ "\3\241\267\263\377\223\254\247\377\350\355\354\377\207\377\377\377\377" \
+ "\3\317\332\330\377\223\254\247\377\263\305\301\377\206\333\343\342\377" \
+ "\4\327\340\337\377\227\257\252\377\230\260\253\377\371\372\372\377\207" \
+ "\377\377\377\377\3\271\311\306\377\223\254\247\377\301\317\314\377\343" \
+ "\333\343\342\377\4y\215\211\377Slg\377Vni\377\327\340\337\377\220\333" \
+ "\343\342\377\1\324\335\334\377\202\301\314\312\377\342\333\343\342\377" \
+ "\3\313\327\325\377\223\254\247\377\251\275\271\377\207\377\377\377\377" \
+ "\4\376\376\376\377\242\267\263\377\223\254\247\377\321\333\332\377\207" \
+ "\333\343\342\377\3\262\303\300\377\223\254\247\377\321\334\332\377\207" \
+ "\377\377\377\377\3\346\354\352\377\223\254\247\377\242\270\263\377\343" \
+ "\333\343\342\377\1\260\276\273\377\202Slg\377\1\300\313\311\377\220\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\342\333\343\342\377\3\255\300" \
+ "\274\377\223\254\247\377\327\340\336\377\207\377\377\377\377\3\340\347" \
+ "\346\377\223\254\247\377\247\273\270\377\210\333\343\342\377\3\320\332" \
+ "\331\377\223\254\247\377\244\271\265\377\210\377\377\377\377\3\247\273" \
+ "\267\377\223\254\247\377\314\330\326\377\342\333\343\342\377\5\331\342" \
+ "\341\377o\205\201\377Slg\377x\215\211\377\331\342\341\377\217\333\343" \
+ "\342\377\1\270\305\303\377\202Slg\377\341\333\343\342\377\4\325\336\335" \
+ "\377\225\255\250\377\233\262\255\377\374\374\374\377\207\377\377\377" \
+ "\377\3\263\305\301\377\223\254\247\377\306\323\321\377\211\333\343\342" \
+ "\377\3\246\273\267\377\223\254\247\377\343\351\350\377\207\377\377\377" \
+ "\377\3\325\336\334\377\223\254\247\377\256\300\275\377\343\333\343\342" \
+ "\377\5\316\330\326\377dzv\377Slg\377\220\241\236\377\332\342\341\377" \
+ "\216\333\343\342\377\1\270\305\303\377\202Slg\377\341\333\343\342\377" \
+ "\3\270\310\306\377\223\254\247\377\305\323\320\377\207\377\377\377\377" \
+ "\4\361\364\363\377\223\254\247\377\234\263\257\377\332\342\341\377\211" \
+ "\333\343\342\377\3\304\322\317\377\223\254\247\377\265\306\302\377\207" \
+ "\377\377\377\377\4\373\374\373\377\232\261\254\377\225\255\251\377\325" \
+ "\337\335\377\343\333\343\342\377\6\316\327\326\377\200\224\220\377Sl" \
+ "g\377h~z\377\246\265\262\377\326\336\335\377\214\333\343\342\377\1\270" \
+ "\305\303\377\202Slg\377\340\333\343\342\377\4\332\342\341\377\233\262" \
+ "\255\377\223\254\247\377\361\364\364\377\207\377\377\377\377\3\304\322" \
+ "\317\377\223\254\247\377\272\312\307\377\212\333\343\342\377\4\332\342" \
+ "\341\377\233\262\256\377\224\254\247\377\362\365\364\377\207\377\377" \
+ "\377\377\3\303\321\316\377\223\254\247\377\272\311\307\377\341\333\343" \
+ "\342\377\1\257\274\272\377\203}\220\215\377\1^vq\377\203Slg\377\3^vq" \
+ "\377n\203\177\377{\217\213\377\211}\220\215\377\1r\207\203\377\202Sl" \
+ "g\377\340\333\343\342\377\3\304\321\317\377\223\254\247\377\264\305\301" \
+ "\377\207\377\377\377\377\4\373\374\374\377\232\262\255\377\225\256\251" \
+ "\377\326\337\336\377\213\333\343\342\377\3\271\311\306\377\223\254\247" \
+ "\377\307\324\321\377\207\377\377\377\377\4\360\363\362\377\223\254\247" \
+ "\377\234\263\256\377\332\342\341\377\340\333\343\342\377\1\233\253\250" \
+ "\377\226Slg\377\340\333\343\342\377\3\246\272\266\377\223\254\247\377" \
+ "\341\350\347\377\207\377\377\377\377\3\326\337\335\377\223\254\247\377" \
+ "\256\301\275\377\214\333\343\342\377\4\325\336\335\377\225\255\250\377" \
+ "\234\263\256\377\374\375\374\377\207\377\377\377\377\3\262\304\300\377" \
+ "\223\254\247\377\305\322\320\377\340\333\343\342\377\1\233\253\250\377" \
+ "\226Slg\377\337\333\343\342\377\4\317\332\330\377\223\254\247\377\242" \
+ "\270\263\377\376\376\376\377\207\377\377\377\377\3\251\274\270\377\223" \
+ "\254\247\377\315\330\326\377\215\333\343\342\377\3\255\300\274\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\337\346\345\377\223" \
+ "\254\247\377\247\273\267\377\340\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\337\333\343\342\377\3\261\303\300\377\223\254\247\377\320\333" \
+ "\331\377\207\377\377\377\377\3\347\355\354\377\223\254\247\377\243\270" \
+ "\264\377\216\333\343\342\377\3\314\327\325\377\223\254\247\377\252\276" \
+ "\272\377\207\377\377\377\377\4\376\376\376\377\241\267\262\377\223\254" \
+ "\247\377\320\333\331\377\337\333\343\342\377\3\233\253\250\377Slg\377" \
+ "m\202~\377\221\275\310\306\377\1\242\261\256\377\202Slg\377\336\333\343" \
+ "\342\377\1\327\340\337\377\202\227\257\252\377\1\370\372\371\377\207" \
+ "\377\377\377\377\3\272\312\307\377\223\254\247\377\301\317\315\377\217" \
+ "\333\343\342\377\3\241\267\263\377\223\254\247\377\351\356\355\377\207" \
+ "\377\377\377\377\3\316\331\327\377\223\254\247\377\263\304\301\377\337" \
+ "\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\336\333\343\342\377\3\275\314\311\377" \
+ "\223\254\247\377\277\315\312\377\207\377\377\377\377\4\366\370\367\377" \
+ "\225\256\251\377\231\260\254\377\331\341\340\377\217\333\343\342\377" \
+ "\3\300\316\314\377\223\254\247\377\274\313\310\377\207\377\377\377\377" \
+ "\4\367\371\371\377\226\256\252\377\227\257\252\377\330\340\337\377\336" \
+ "\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\336\333\343\342\377\3\237\265\260\377" \
+ "\223\254\247\377\354\360\357\377\207\377\377\377\377\3\313\327\325\377" \
+ "\223\254\247\377\266\306\303\377\220\333\343\342\377\4\331\341\340\377" \
+ "\230\260\253\377\226\256\252\377\367\371\370\377\207\377\377\377\377" \
+ "\3\274\314\311\377\223\254\247\377\276\315\312\377\336\333\343\342\377" \
+ "\3\237\256\253\377[sn\377{\217\213\377\221\333\343\342\377\1\302\315" \
+ "\313\377\202x\215\211\377\335\333\343\342\377\3\310\325\323\377\223\254" \
+ "\247\377\255\300\274\377\207\377\377\377\377\4\375\376\375\377\237\265" \
+ "\261\377\224\254\247\377\323\334\333\377\221\333\343\342\377\3\264\305" \
+ "\302\377\223\254\247\377\315\331\326\377\207\377\377\377\377\3\352\357" \
+ "\356\377\223\254\247\377\240\266\261\377\377\333\343\342\377\323\333" \
+ "\343\342\377\3\252\276\272\377\223\254\247\377\333\343\341\377\207\377" \
+ "\377\377\377\3\335\344\343\377\223\254\247\377\252\275\272\377\222\333" \
+ "\343\342\377\4\322\334\332\377\223\254\247\377\241\266\262\377\376\376" \
+ "\376\377\207\377\377\377\377\3\253\276\273\377\223\254\247\377\312\326" \
+ "\324\377\356\333\343\342\377\1\331\342\341\377\341\333\343\342\377\4" \
+ "\323\335\333\377\224\254\247\377\235\264\257\377\375\375\375\377\207" \
+ "\377\377\377\377\3\257\302\276\377\223\254\247\377\310\324\322\377\207" \
+ "\333\343\342\377\4\327\340\337\377\264\305\302\377\260\302\277\377\305" \
+ "\321\317\377\210\333\343\342\377\3\251\274\271\377\223\254\247\377\337" \
+ "\346\345\377\207\377\377\377\377\3\330\341\337\377\223\254\247\377\253" \
+ "\276\273\377\356\333\343\342\377\5\264\301\277\377^uq\377w\214\210\377" \
+ "\236\255\253\377\330\341\340\377\335\333\343\342\377\3\266\306\303\377" \
+ "\223\254\247\377\311\325\323\377\207\377\377\377\377\3\356\362\361\377" \
+ "\223\254\247\377\236\265\260\377\210\333\343\342\377\5\251\275\272\377" \
+ "\226\256\251\377\240\266\261\377\222\253\246\377\316\331\330\377\207" \
+ "\333\343\342\377\3\307\323\321\377\223\254\247\377\261\303\300\377\207" \
+ "\377\377\377\377\4\374\375\374\377\234\263\256\377\224\255\250\377\324" \
+ "\335\334\377\334\333\343\342\377\3\241\260\255\377_vr\377z\216\212\377" \
+ "\216\333\343\342\377\1\264\301\277\377\203Slg\377\2m\202~\377\312\324" \
+ "\323\377\333\333\343\342\377\4\331\341\340\377\231\261\254\377\225\255" \
+ "\250\377\364\367\366\377\207\377\377\377\377\3\301\317\314\377\223\254" \
+ "\247\377\275\314\311\377\207\333\343\342\377\6\331\342\341\377\225\255" \
+ "\250\377\320\333\331\377\374\375\375\377\234\263\256\377\261\303\300" \
+ "\377\207\333\343\342\377\4\332\342\341\377\235\264\257\377\223\254\247" \
+ "\377\360\363\362\377\207\377\377\377\377\3\307\324\321\377\223\254\247" \
+ "\377\267\310\305\377\334\333\343\342\377\3\233\253\250\377Slg\377p\205" \
+ "\201\377\216\333\343\342\377\2\270\305\303\377Woj\377\203Slg\377\1~\221" \
+ "\216\377\333\333\343\342\377\3\301\317\315\377\223\254\247\377\270\310" \
+ "\305\377\207\377\377\377\377\4\371\373\372\377\230\260\253\377\226\256" \
+ "\252\377\327\340\336\377\207\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\210\333\343\342\377\3\273\313\310\377\223\254\247\377\303\321\316" \
+ "\377\207\377\377\377\377\4\363\365\365\377\224\255\250\377\232\261\255" \
+ "\377\331\342\341\377\333\333\343\342\377\3\233\253\250\377Slg\377p\205" \
+ "\201\377\217\333\343\342\377\3\332\342\341\377\306\321\317\377\206\230" \
+ "\225\377\202Slg\377\1\300\313\311\377\332\333\343\342\377\3\243\270\264" \
+ "\377\223\254\247\377\345\353\352\377\207\377\377\377\377\3\322\335\333" \
+ "\377\223\254\247\377\261\303\277\377\210\333\343\342\377\6\331\340\337" \
+ "\377\223\254\247\377\332\342\341\377\377\377\377\377\251\275\271\377" \
+ "\255\300\275\377\210\333\343\342\377\4\326\337\336\377\226\256\251\377" \
+ "\232\261\254\377\372\373\373\377\207\377\377\377\377\3\266\307\303\377" \
+ "\223\254\247\377\303\320\316\377\333\333\343\342\377\3\233\253\250\377" \
+ "Slg\377p\205\201\377\221\333\343\342\377\4\332\342\341\377q\207\202\377" \
+ "Slg\377\246\264\262\377\331\333\343\342\377\3\315\330\326\377\223\254" \
+ "\247\377\246\273\267\377\210\377\377\377\377\3\245\272\266\377\223\254" \
+ "\247\377\317\332\330\377\210\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\211\333\343\342\377\3\260\302\276\377\223\254\247\377\324\336\334" \
+ "\377\207\377\377\377\377\3\343\351\350\377\223\254\247\377\244\271\265" \
+ "\377\333\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\222\333" \
+ "\343\342\377\3\223\244\240\377Slg\377\223\244\240\377\331\333\343\342" \
+ "\377\3\257\301\276\377\223\254\247\377\324\336\334\377\207\377\377\377" \
+ "\377\3\344\352\351\377\223\254\247\377\245\272\266\377\211\333\343\342" \
+ "\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377\377\377" \
+ "\251\275\271\377\255\300\275\377\211\333\343\342\377\3\316\331\327\377" \
+ "\223\254\247\377\247\273\267\377\210\377\377\377\377\3\244\271\265\377" \
+ "\223\254\247\377\316\331\327\377\332\333\343\342\377\3\233\253\250\377" \
+ "Slg\377p\205\201\377\222\333\343\342\377\3\213\235\232\377Slg\377\214" \
+ "\235\232\377\330\333\343\342\377\10\326\337\336\377\225\256\251\377\231" \
+ "\261\254\377\372\373\373\377\354\360\357\377\301\317\315\377\325\337" \
+ "\335\377\373\374\374\377\203\377\377\377\377\3\266\307\303\377\223\254" \
+ "\247\377\303\321\317\377\211\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\212\333\343\342\377\3\244\271\265\377\223\254\247\377\346\353\352" \
+ "\377\203\377\377\377\377\7\356\362\362\377\303\321\316\377\322\334\332" \
+ "\377\372\373\373\377\322\334\332\377\223\254\247\377\260\302\277\377" \
+ "\332\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221\333\343" \
+ "\342\377\4\314\325\324\377_wr\377Slg\377\235\254\252\377\306\333\343" \
+ "\342\377\1\203\240\232\377\205r\223\214\377\1w\227\221\377\213\253\276" \
+ "\273\377\16\240\265\262\377\223\254\247\377\302\320\315\377\266\307\304" \
+ "\377\223\254\247\377\233\262\256\377\223\254\247\377\233\262\255\377" \
+ "\346\353\352\377\377\377\377\377\363\366\365\377\224\255\250\377\225" \
+ "\256\251\377\252\275\272\377\211\253\276\273\377\6\252\275\272\377\223" \
+ "\254\247\377\332\342\341\377\377\377\377\377\250\274\270\377\233\262" \
+ "\256\377\212\253\276\273\377\3\242\267\264\377\223\254\247\377\270\310" \
+ "\305\377\202\377\377\377\377\11\275\315\312\377\223\254\247\377\232\262" \
+ "\255\377\224\255\250\377\231\261\254\377\332\344\341\377\230\260\253" \
+ "\377\224\254\250\377\251\275\271\377\212\253\276\273\377\1\227\257\253" \
+ "\377\205r\223\214\377\2s\224\215\377\261\303\300\377\300\333\343\342" \
+ "\377\1\267\304\302\377\206\211\234\230\377\3p\205\201\377Slg\377^vq\377" \
+ "\216\211\234\230\377\4\206\231\225\377\177\223\217\377r\207\203\377T" \
+ "mh\377\202Slg\377\1\257\274\272\377\306\333\343\342\377\1|\233\224\377" \
+ "\221o\221\212\377\15\215\250\242\377\223\254\247\377\335\345\343\377" \
+ "\223\254\247\377\317\332\330\377\375\375\375\377\360\363\363\377\243" \
+ "\270\264\377\265\306\303\377\377\377\377\377\310\325\322\377\223\254" \
+ "\247\377\200\236\227\377\212o\221\212\377\6p\221\212\377\223\254\247" \
+ "\377\332\342\341\377\377\377\377\377\247\273\267\377\205\242\234\377" \
+ "\213o\221\212\377\15\217\251\244\377\224\255\250\377\365\367\367\377" \
+ "\361\364\364\377\224\255\250\377\306\323\321\377\374\375\375\377\363" \
+ "\366\365\377\252\276\272\377\255\300\274\377\300\317\314\377\223\254" \
+ "\247\377~\234\226\377\221o\221\212\377\1\256\301\276\377\300\333\343" \
+ "\342\377\1\237\256\253\377\234Slg\377\2]up\377\321\333\331\377\306\333" \
+ "\343\342\377\1|\233\224\377\220o\221\212\377\6y\230\222\377\223\254\247" \
+ "\377\261\303\277\377\277\316\313\377\235\264\257\377\376\376\376\377" \
+ "\202\377\377\377\377\6\317\332\330\377\224\255\250\377\362\366\365\377" \
+ "\234\263\257\377\222\253\246\377r\223\214\377\212o\221\212\377\6p\221" \
+ "\212\377\223\254\247\377\332\342\341\377\377\377\377\377\247\273\267" \
+ "\377\205\242\234\377\213o\221\212\377\6\201\236\230\377\223\254\247\377" \
+ "\312\326\323\377\310\324\322\377\227\257\252\377\372\373\373\377\202" \
+ "\377\377\377\377\5\331\342\340\377\223\254\247\377\337\346\345\377\223" \
+ "\254\247\377\215\247\242\377\221o\221\212\377\1\256\301\276\377\300\333" \
+ "\343\342\377\1\237\256\253\377\234Slg\377\1\246\265\262\377\307\333\343" \
+ "\342\377\1|\233\224\377\220o\221\212\377\6\210\244\236\377\223\254\247" \
+ "\377\336\346\344\377\320\333\330\377\225\256\251\377\365\367\367\377" \
+ "\202\377\377\377\377\5\275\315\312\377\236\264\260\377\327\341\337\377" \
+ "\223\254\247\377\206\242\234\377\213o\221\212\377\6p\221\212\377\223" \
+ "\254\247\377\332\342\341\377\377\377\377\377\247\273\267\377\205\242" \
+ "\234\377\213o\221\212\377\6r\223\214\377\222\253\246\377\236\264\260" \
+ "\377\327\340\336\377\223\254\247\377\354\360\357\377\202\377\377\377" \
+ "\377\6\310\324\322\377\231\260\253\377\371\373\373\377\257\301\276\377" \
+ "\223\254\247\377x\230\221\377\220o\221\212\377\1\256\301\276\377\300" \
+ "\333\343\342\377\1\237\256\253\377\232Slg\377\2q\207\202\377\267\304" \
+ "\302\377\310\333\343\342\377\1|\233\224\377\217o\221\212\377\16s\224" \
+ "\215\377\222\253\246\377\240\266\262\377\376\376\376\377\371\372\372" \
+ "\377\230\260\253\377\250\274\270\377\326\337\336\377\301\317\315\377" \
+ "\226\256\251\377\310\325\322\377\253\277\273\377\223\254\247\377w\227" \
+ "\220\377\213o\221\212\377\6p\221\212\377\223\254\247\377\332\342\341" \
+ "\377\377\377\377\377\247\273\267\377\205\242\234\377\214o\221\212\377" \
+ "\15\206\242\235\377\223\254\247\377\330\341\340\377\234\263\256\377\245" \
+ "\272\265\377\324\336\334\377\305\322\317\377\230\260\253\377\301\317" \
+ "\314\377\377\377\377\377\334\344\343\377\223\254\247\377\207\243\236" \
+ "\377\220o\221\212\377\1\256\301\276\377\300\333\343\342\377\1\306\321" \
+ "\317\377\206\254\271\267\377\3\202\225\221\377Slg\377f|x\377\216\254" \
+ "\271\267\377\3\263\300\276\377\304\317\315\377\325\335\334\377\312\333" \
+ "\343\342\377\1\255\300\274\377\205\244\271\265\377\1\251\275\271\377" \
+ "\211\333\343\342\377\3\263\305\301\377\223\254\247\377\315\330\326\377" \
+ "\202\377\377\377\377\10\341\350\346\377\257\301\275\377\223\254\247\377" \
+ "\234\263\256\377\306\323\321\377\345\352\351\377\223\254\247\377\241" \
+ "\266\262\377\214\333\343\342\377\6\331\340\337\377\223\254\247\377\332" \
+ "\342\341\377\377\377\377\377\251\275\271\377\255\300\275\377\214\333" \
+ "\343\342\377\16\311\325\323\377\223\254\247\377\256\300\275\377\344\352" \
+ "\351\377\262\304\301\377\223\254\247\377\231\261\254\377\303\321\316" \
+ "\377\365\367\367\377\377\377\377\377\375\376\375\377\237\265\260\377" \
+ "\223\254\247\377\322\334\333\377\210\333\343\342\377\1\310\324\322\377" \
+ "\206\244\271\265\377\1\304\322\320\377\307\333\343\342\377\3\233\253" \
+ "\250\377Slg\377p\205\201\377\352\333\343\342\377\4\330\341\337\377\230" \
+ "\257\253\377\226\256\251\377\366\370\370\377\204\377\377\377\377\6\361" \
+ "\364\363\377\374\375\375\377\377\377\377\377\275\314\311\377\223\254" \
+ "\247\377\277\315\313\377\214\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\215\333\343\342\377\6\237\265\261\377\223\254\247\377\354\361\360" \
+ "\377\377\377\377\377\362\365\365\377\372\373\373\377\204\377\377\377" \
+ "\377\3\313\327\324\377\223\254\247\377\265\306\302\377\327\333\343\342" \
+ "\377\3\233\253\250\377Slg\377p\205\201\377\352\333\343\342\377\3\277" \
+ "\315\313\377\223\254\247\377\274\313\310\377\207\377\377\377\377\4\370" \
+ "\371\371\377\227\257\252\377\230\257\253\377\330\341\337\377\214\333" \
+ "\343\342\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377" \
+ "\377\377\251\275\271\377\255\300\275\377\215\333\343\342\377\3\275\314" \
+ "\312\377\223\254\247\377\277\316\313\377\207\377\377\377\377\4\366\370" \
+ "\367\377\225\256\251\377\230\260\253\377\331\341\340\377\326\333\343" \
+ "\342\377\3\253\271\266\377t\211\205\377\213\235\231\377\352\333\343\342" \
+ "\377\3\241\266\262\377\223\254\247\377\351\356\355\377\207\377\377\377" \
+ "\377\3\317\332\330\377\223\254\247\377\263\305\301\377\215\333\343\342" \
+ "\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377\377\377" \
+ "\251\275\271\377\255\300\275\377\215\333\343\342\377\4\327\340\337\377" \
+ "\227\257\252\377\227\257\253\377\371\372\372\377\207\377\377\377\377" \
+ "\3\271\311\306\377\223\254\247\377\300\316\314\377\377\333\343\342\377" \
+ "\303\333\343\342\377\3\312\326\324\377\223\254\247\377\252\275\271\377" \
+ "\207\377\377\377\377\4\376\376\376\377\242\267\263\377\223\254\247\377" \
+ "\321\333\332\377\215\333\343\342\377\6\331\340\337\377\223\254\247\377" \
+ "\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275\377\216" \
+ "\333\343\342\377\3\262\303\300\377\223\254\247\377\320\333\331\377\207" \
+ "\377\377\377\377\3\347\354\353\377\223\254\247\377\242\267\263\377\377" \
+ "\333\343\342\377\303\333\343\342\377\3\254\277\274\377\223\254\247\377" \
+ "\330\341\337\377\207\377\377\377\377\3\340\347\346\377\223\254\247\377" \
+ "\247\273\270\377\216\333\343\342\377\6\331\340\337\377\223\254\247\377" \
+ "\330\341\337\377\377\377\377\377\250\274\270\377\255\300\275\377\216" \
+ "\333\343\342\377\3\320\332\331\377\223\254\247\377\243\271\264\377\210" \
+ "\377\377\377\377\3\250\274\270\377\223\254\247\377\314\327\325\377\377" \
+ "\333\343\342\377\301\333\343\342\377\4\324\336\334\377\224\255\250\377" \
+ "\233\262\256\377\374\374\374\377\207\377\377\377\377\3\263\304\301\377" \
+ "\223\254\247\377\306\323\321\377\217\333\343\342\377\5\237\265\261\377" \
+ "\252\275\271\377\322\334\332\377\223\254\247\377\275\314\311\377\217" \
+ "\333\343\342\377\3\246\273\267\377\223\254\247\377\342\351\347\377\207" \
+ "\377\377\377\377\3\325\337\335\377\223\254\247\377\256\300\275\377\343" \
+ "\333\343\342\377\6\267\303\301\377\223\244\240\377|\220\214\377\213\235" \
+ "\231\377\250\267\264\377\311\323\322\377\327\333\343\342\377\3\270\310" \
+ "\305\377\223\254\247\377\306\323\321\377\207\377\377\377\377\4\361\364" \
+ "\363\377\223\254\247\377\234\263\257\377\332\342\341\377\217\333\343" \
+ "\342\377\1\307\323\321\377\202\223\254\247\377\2\240\265\261\377\332" \
+ "\342\341\377\217\333\343\342\377\3\304\322\317\377\223\254\247\377\264" \
+ "\306\302\377\207\377\377\377\377\4\373\374\374\377\232\262\255\377\225" \
+ "\255\250\377\325\336\335\377\325\333\343\342\377\1\302\315\313\377\204" \
+ "\222\243\240\377\1\253\271\267\377\205\333\343\342\377\2\323\334\333" \
+ "\377\200\223\220\377\205Slg\377\2Uni\377\247\266\263\377\325\333\343" \
+ "\342\377\4\332\342\341\377\233\262\255\377\224\254\247\377\362\365\364" \
+ "\377\207\377\377\377\377\3\304\322\317\377\223\254\247\377\272\312\307" \
+ "\377\221\333\343\342\377\3\327\337\336\377\326\337\335\377\331\340\337" \
+ "\377\220\333\343\342\377\4\332\342\341\377\233\262\256\377\224\254\247" \
+ "\377\362\365\364\377\207\377\377\377\377\3\304\322\317\377\223\254\247" \
+ "\377\271\311\306\377\325\333\343\342\377\1\211\233\230\377\204Slg\377" \
+ "\1\201\224\220\377\205\333\343\342\377\1\200\223\220\377\210Slg\377\1" \
+ "\227\247\244\377\324\333\343\342\377\3\303\321\317\377\223\254\247\377" \
+ "\265\306\302\377\207\377\377\377\377\4\373\374\374\377\232\261\255\377" \
+ "\225\256\251\377\326\337\336\377\245\333\343\342\377\3\271\311\306\377" \
+ "\223\254\247\377\306\323\320\377\207\377\377\377\377\4\361\364\363\377" \
+ "\223\254\247\377\234\262\256\377\332\342\341\377\323\333\343\342\377" \
+ "\2\330\341\340\377]up\377\203Slg\377\2[sn\377\227\247\244\377\204\333" \
+ "\343\342\377\1\247\266\263\377\212Slg\377\1\305\317\316\377\323\333\343" \
+ "\342\377\3\245\272\266\377\223\254\247\377\342\351\347\377\207\377\377" \
+ "\377\377\3\325\337\335\377\223\254\247\377\256\301\275\377\246\333\343" \
+ "\342\377\4\325\336\335\377\225\255\250\377\233\262\256\377\374\374\374" \
+ "\377\207\377\377\377\377\3\263\304\301\377\223\254\247\377\305\322\320" \
+ "\377\323\333\343\342\377\1\265\302\300\377\202Slg\377\3]up\377\263\300" \
+ "\275\377\332\342\341\377\205\333\343\342\377\1i\177{\377\203Slg\377\5" \
+ "Yrm\377\233\253\250\377\266\302\300\377\246\264\262\377x\214\210\377" \
+ "\202Slg\377\1\204\227\223\377\322\333\343\342\377\3\317\332\330\377\223" \
+ "\254\247\377\243\270\264\377\210\377\377\377\377\3\250\274\270\377\223" \
+ "\254\247\377\315\330\326\377\247\333\343\342\377\3\255\300\274\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\340\347\346\377\223" \
+ "\254\247\377\247\273\267\377\323\333\343\342\377\4\212\234\231\377Sl" \
+ "g\377Voj\377\307\322\320\377\206\333\343\342\377\1\270\305\303\377\203" \
+ "Slg\377\2Vni\377\303\316\314\377\203\333\343\342\377\5\331\342\341\377" \
+ "\210\233\227\377Slg\377Umh\377\315\327\325\377\321\333\343\342\377\3" \
+ "\261\303\277\377\223\254\247\377\321\333\331\377\207\377\377\377\377" \
+ "\3\347\354\353\377\223\254\247\377\243\270\264\377\250\333\343\342\377" \
+ "\3\314\327\325\377\223\254\247\377\252\275\271\377\207\377\377\377\377" \
+ "\4\376\376\376\377\242\267\263\377\223\254\247\377\320\333\331\377\322" \
+ "\333\343\342\377\3u\211\205\377Slg\377\221\242\237\377\207\333\343\342" \
+ "\377\1\204\227\223\377\203Slg\377\1\221\243\237\377\205\333\343\342\377" \
+ "\4\317\331\327\377Voj\377Slg\377\266\303\301\377\320\333\343\342\377" \
+ "\4\327\340\336\377\226\256\252\377\227\257\253\377\371\372\372\377\207" \
+ "\377\377\377\377\3\271\311\306\377\223\254\247\377\301\317\315\377\251" \
+ "\333\343\342\377\3\241\267\263\377\223\254\247\377\351\356\355\377\207" \
+ "\377\377\377\377\3\317\332\330\377\223\254\247\377\262\304\300\377\322" \
+ "\333\343\342\377\3dzv\377Slg\377\274\307\306\377\206\333\343\342\377" \
+ "\2\331\341\340\377\\to\377\202Slg\377\2Tmh\377\315\327\325\377\206\333" \
+ "\343\342\377\3z\216\212\377Slg\377\246\264\262\377\320\333\343\342\377" \
+ "\3\274\313\311\377\223\254\247\377\277\316\313\377\207\377\377\377\377" \
+ "\4\365\367\367\377\225\255\251\377\231\260\254\377\331\341\340\377\251" \
+ "\333\343\342\377\3\300\316\314\377\223\254\247\377\273\313\310\377\207" \
+ "\377\377\377\377\1\370\371\371\377\202\227\257\252\377\1\327\340\337" \
+ "\377\320\333\343\342\377\4\331\341\340\377Umh\377Slg\377\317\330\327" \
+ "\377\206\333\343\342\377\1\271\306\304\377\203Slg\377\1z\216\212\377" \
+ "\207\333\343\342\377\3\213\235\231\377Slg\377\225\246\243\377\320\333" \
+ "\343\342\377\3\236\265\260\377\223\254\247\377\355\361\360\377\207\377" \
+ "\377\377\377\3\313\327\324\377\223\254\247\377\266\306\303\377\252\333" \
+ "\343\342\377\4\331\341\340\377\230\260\253\377\226\256\251\377\366\370" \
+ "\370\377\207\377\377\377\377\3\275\314\311\377\223\254\247\377\276\315" \
+ "\312\377\320\333\343\342\377\1\324\334\333\377\202Slg\377\1\325\336\335" \
+ "\377\206\333\343\342\377\1\216\240\235\377\203Slg\377\1\255\272\270\377" \
+ "\207\333\343\342\377\3\227\247\244\377Slg\377\210\233\227\377\317\333" \
+ "\343\342\377\3\310\324\322\377\223\254\247\377\256\301\275\377\207\377" \
+ "\377\377\377\4\375\376\375\377\237\265\260\377\224\254\247\377\323\334" \
+ "\333\377\253\333\343\342\377\3\264\305\302\377\223\254\247\377\315\330" \
+ "\326\377\207\377\377\377\377\3\353\357\356\377\223\254\247\377\237\265" \
+ "\261\377\321\333\343\342\377\3\\to\377Slg\377\310\322\321\377\205\333" \
+ "\343\342\377\2\330\341\340\377_vr\377\202Slg\377\2Xpk\377\325\336\335" \
+ "\377\207\333\343\342\377\3\214\235\232\377Slg\377\216\237\234\377\317" \
+ "\333\343\342\377\3\252\275\271\377\223\254\247\377\333\343\342\377\207" \
+ "\377\377\377\377\3\334\344\343\377\223\254\247\377\252\275\272\377\254" \
+ "\333\343\342\377\4\322\334\332\377\223\254\247\377\240\266\262\377\376" \
+ "\376\376\377\207\377\377\377\377\3\254\277\273\377\223\254\247\377\311" \
+ "\325\323\377\320\333\343\342\377\3n\203\177\377Slg\377\257\274\272\377" \
+ "\205\333\343\342\377\1\261\277\274\377\203Slg\377\1\200\223\220\377\210" \
+ "\333\343\342\377\3{\217\213\377Slg\377\227\247\244\377\316\333\343\342" \
+ "\377\4\323\334\333\377\223\254\247\377\236\265\260\377\375\375\375\377" \
+ "\207\377\377\377\377\3\257\301\276\377\223\254\247\377\310\324\322\377" \
+ "\255\333\343\342\377\3\251\274\271\377\223\254\247\377\336\346\344\377" \
+ "\207\377\377\377\377\3\331\342\340\377\223\254\247\377\253\276\273\377" \
+ "\320\333\343\342\377\3\201\224\220\377Slg\377v\212\206\377\204\333\343" \
+ "\342\377\2\330\340\337\377i\200{\377\203Slg\377\1\260\276\273\377\207" \
+ "\333\343\342\377\4\325\335\334\377^uq\377Slg\377\253\271\267\377\316" \
+ "\333\343\342\377\3\265\306\303\377\223\254\247\377\312\326\324\377\207" \
+ "\377\377\377\377\3\356\361\361\377\223\254\247\377\236\265\260\377\256" \
+ "\333\343\342\377\3\307\323\321\377\223\254\247\377\261\303\277\377\207" \
+ "\377\377\377\377\4\374\375\375\377\235\263\257\377\224\255\250\377\323" \
+ "\335\334\377\317\333\343\342\377\1\263\300\275\377\202Slg\377\5\206\231" \
+ "\225\377\314\326\324\377\333\343\342\377\315\327\325\377\177\222\217" \
+ "\377\203Slg\377\2czu\377\331\341\340\377\207\333\343\342\377\1\234\253" \
+ "\251\377\202Slg\377\1\303\316\314\377\315\333\343\342\377\4\331\341\340" \
+ "\377\231\260\254\377\225\255\251\377\365\367\367\377\207\377\377\377" \
+ "\377\3\300\317\314\377\223\254\247\377\275\314\311\377\256\333\343\342" \
+ "\377\4\332\342\341\377\235\264\257\377\223\254\247\377\357\362\362\377" \
+ "\207\377\377\377\377\3\310\325\322\377\223\254\247\377\267\307\304\377" \
+ "\320\333\343\342\377\1m\202~\377\203Slg\377\1Xql\377\205Slg\377\1\235" \
+ "\254\252\377\207\333\343\342\377\4\241\261\256\377Voj\377Slg\377czu\377" \
+ "\316\333\343\342\377\3\301\317\314\377\223\254\247\377\271\311\306\377" \
+ "\207\377\377\377\377\4\371\373\372\377\230\260\253\377\226\256\252\377" \
+ "\327\340\336\377\257\333\343\342\377\3\273\313\310\377\223\254\247\377" \
+ "\302\320\315\377\207\377\377\377\377\4\363\366\366\377\224\255\250\377" \
+ "\232\261\254\377\331\341\340\377\317\333\343\342\377\2\265\302\300\377" \
+ "Voj\377\207Slg\377\2o\205\201\377\330\340\337\377\204\333\343\342\377" \
+ "\3\274\307\306\377\210\233\227\377k\201}\377\203Slg\377\1\221\243\237" \
+ "\377\316\333\343\342\377\3\243\270\264\377\223\254\247\377\346\354\352" \
+ "\377\207\377\377\377\377\3\322\334\332\377\223\254\247\377\261\303\277" \
+ "\377\260\333\343\342\377\4\326\337\336\377\226\256\251\377\231\261\254" \
+ "\377\372\373\373\377\207\377\377\377\377\3\267\307\304\377\223\254\247" \
+ "\377\302\320\316\377\320\333\343\342\377\2\274\310\306\377_wr\377\205" \
+ "Slg\377\2j\200|\377\311\324\322\377\205\333\343\342\377\1\226\247\244" \
+ "\377\205Slg\377\1\300\313\311\377\315\333\343\342\377\3\314\330\326\377" \
+ "\223\254\247\377\247\273\267\377\210\377\377\377\377\3\244\271\265\377" \
+ "\223\254\247\377\317\332\330\377\261\333\343\342\377\3\260\302\276\377" \
+ "\223\254\247\377\324\336\334\377\207\377\377\377\377\3\344\352\351\377" \
+ "\223\254\247\377\244\271\265\377\321\333\343\342\377\7\316\330\326\377" \
+ "\250\266\264\377\214\236\233\377v\213\207\377\206\230\225\377\244\263" \
+ "\260\377\330\341\340\377\206\333\343\342\377\1\243\262\257\377\204l\201" \
+ "}\377\1x\215\211\377\316\333\343\342\377\3\256\301\275\377\223\254\247" \
+ "\377\325\336\334\377\207\377\377\377\377\3\343\351\350\377\223\254\247" \
+ "\377\245\272\266\377\262\333\343\342\377\3\316\331\327\377\223\254\247" \
+ "\377\246\273\267\377\210\377\377\377\377\3\245\272\266\377\223\254\247" \
+ "\377\316\331\327\377\377\333\343\342\377\261\333\343\342\377\4\325\337" \
+ "\335\377\225\255\251\377\232\261\254\377\373\374\373\377\207\377\377" \
+ "\377\377\3\266\307\303\377\223\254\247\377\303\321\317\377\263\333\343" \
+ "\342\377\3\244\271\265\377\223\254\247\377\345\353\352\377\207\377\377" \
+ "\377\377\3\322\335\333\377\223\254\247\377\260\302\276\377\377\333\343" \
+ "\342\377\261\333\343\342\377\3\272\311\307\377\223\254\247\377\303\321" \
+ "\316\377\207\377\377\377\377\4\363\366\365\377\224\255\250\377\232\262" \
+ "\255\377\332\342\341\377\263\333\343\342\377\3\302\320\316\377\223\254" \
+ "\247\377\270\310\305\377\207\377\377\377\377\4\372\373\373\377\231\260" \
+ "\254\377\226\256\251\377\326\337\336\377\377\333\343\342\377\257\333" \
+ "\343\342\377\4\332\342\341\377\234\263\256\377\223\254\247\377\360\363" \
+ "\362\377\207\377\377\377\377\3\307\324\321\377\223\254\247\377\270\310" \
+ "\305\377\264\333\343\342\377\4\331\341\340\377\232\261\254\377\225\255" \
+ "\250\377\364\367\366\377\207\377\377\377\377\3\301\317\314\377\223\254" \
+ "\247\377\273\313\310\377\314\333\343\342\377\3\277\312\310\377\237\256" \
+ "\253\377\254\272\270\377\337\333\343\342\377\3\305\322\320\377\223\254" \
+ "\247\377\262\304\300\377\207\377\377\377\377\4\374\375\374\377\234\263" \
+ "\256\377\224\255\250\377\324\336\334\377\265\333\343\342\377\3\266\307" \
+ "\304\377\223\254\247\377\311\325\323\377\207\377\377\377\377\4\356\362" \
+ "\361\377\223\254\247\377\235\264\257\377\332\342\341\377\313\333\343" \
+ "\342\377\3\233\253\250\377Slg\377p\205\201\377\337\333\343\342\377\3" \
+ "\247\273\267\377\223\254\247\377\337\346\345\377\207\377\377\377\377" \
+ "\3\330\341\337\377\223\254\247\377\254\277\274\377\266\333\343\342\377" \
+ "\4\323\335\334\377\224\255\250\377\235\264\257\377\375\375\375\377\207" \
+ "\377\377\377\377\3\260\302\276\377\223\254\247\377\307\323\321\377\313" \
+ "\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\336\333\343\342" \
+ "\377\4\321\333\331\377\223\254\247\377\241\266\262\377\376\376\376\377" \
+ "\207\377\377\377\377\3\253\276\273\377\223\254\247\377\312\326\324\377" \
+ "\267\333\343\342\377\3\253\276\272\377\223\254\247\377\333\343\341\377" \
+ "\207\377\377\377\377\3\335\345\343\377\223\254\247\377\251\274\271\377" \
+ "\313\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\336\333\343" \
+ "\342\377\3\263\304\301\377\223\254\247\377\315\331\326\377\207\377\377" \
+ "\377\377\3\351\356\355\377\223\254\247\377\241\266\262\377\270\333\343" \
+ "\342\377\3\311\325\323\377\223\254\247\377\254\277\273\377\207\377\377" \
+ "\377\377\4\375\376\375\377\240\265\261\377\223\254\247\377\321\334\332" \
+ "\377\312\333\343\342\377\3\233\253\250\377Slg\377[sn\377\223x\215\211" \
+ "\377\5z\216\212\377\202\225\221\377\214\236\233\377\246\265\262\377\310" \
+ "\323\321\377\305\333\343\342\377\4\330\340\337\377\227\257\252\377\226" \
+ "\256\252\377\367\371\370\377\207\377\377\377\377\3\274\313\310\377\223" \
+ "\254\247\377\277\315\313\377\271\333\343\342\377\3\237\265\261\377\223" \
+ "\254\247\377\353\360\357\377\207\377\377\377\377\3\314\327\325\377\223" \
+ "\254\247\377\264\305\302\377\312\333\343\342\377\1\233\253\250\377\232" \
+ "Slg\377\2x\214\210\377\275\311\307\377\303\333\343\342\377\3\276\315" \
+ "\312\377\223\254\247\377\274\313\310\377\207\377\377\377\377\4\367\371" \
+ "\370\377\226\256\251\377\230\257\253\377\330\341\337\377\271\333\343" \
+ "\342\377\3\275\314\312\377\223\254\247\377\276\315\312\377\207\377\377" \
+ "\377\377\4\366\370\370\377\225\256\251\377\230\260\253\377\330\341\340" \
+ "\377\311\333\343\342\377\1\233\253\250\377\233Slg\377\2Tmh\377\237\256" \
+ "\253\377\302\333\343\342\377\3\240\266\262\377\223\254\247\377\351\356" \
+ "\355\377\207\377\377\377\377\3\315\330\326\377\223\254\247\377\263\305" \
+ "\301\377\272\333\343\342\377\1\327\340\337\377\202\227\257\252\377\1" \
+ "\370\371\371\377\207\377\377\377\377\3\272\312\307\377\223\254\247\377" \
+ "\300\316\314\377\311\333\343\342\377\1\233\253\250\377\235Slg\377\1\243" \
+ "\262\257\377\300\333\343\342\377\3\312\326\324\377\223\254\247\377\252" \
+ "\276\272\377\207\377\377\377\377\4\376\376\376\377\240\266\262\377\223" \
+ "\254\247\377\321\333\332\377\273\333\343\342\377\3\262\303\300\377\223" \
+ "\254\247\377\317\332\330\377\207\377\377\377\377\3\350\355\354\377\223" \
+ "\254\247\377\241\267\263\377\311\333\343\342\377\4\321\332\331\377\305" \
+ "\320\316\377\305\317\316\377\207\231\226\377\202Slg\377\5j\200|\377\224" \
+ "\245\242\377\244\263\260\377\264\300\276\377\302\315\313\377\202\305" \
+ "\320\316\377\16\274\307\306\377\254\272\270\377\235\255\252\377\207\232" \
+ "\226\377Xql\377Slg\377^vq\377\257\274\272\377\305\320\316\377\304\316" \
+ "\315\377\266\303\301\377\247\265\263\377\227\250\245\377s\210\203\377" \
+ "\203Slg\377\2Vni\377\304\317\315\377\277\333\343\342\377\3\254\277\273" \
+ "\377\223\254\247\377\330\341\337\377\207\377\377\377\377\3\336\346\344" \
+ "\377\223\254\247\377\247\273\270\377\274\333\343\342\377\4\320\332\331" \
+ "\377\223\254\247\377\242\270\263\377\376\376\376\377\207\377\377\377" \
+ "\377\3\251\275\271\377\223\254\247\377\313\327\325\377\311\333\343\342" \
+ "\377\5\327\340\337\377y\215\211\377Slg\377q\207\202\377\266\302\300\377" \
+ "\213\333\343\342\377\5\321\333\331\377\233\253\250\377Yrm\377Wpk\377" \
+ "\255\273\271\377\205\333\343\342\377\2\271\305\303\377r\207\203\377\202" \
+ "Slg\377\1\203\226\222\377\276\333\343\342\377\4\324\336\334\377\224\255" \
+ "\250\377\234\263\256\377\374\375\374\377\207\377\377\377\377\3\261\303" \
+ "\277\377\223\254\247\377\306\323\321\377\275\333\343\342\377\3\246\273" \
+ "\267\377\223\254\247\377\340\347\346\377\207\377\377\377\377\3\326\340" \
+ "\336\377\223\254\247\377\255\300\274\377\311\333\343\342\377\4\211\234" \
+ "\230\377Slg\377n\204\200\377\325\336\335\377\216\333\343\342\377\4\263" \
+ "\300\275\377Tlg\377Wpk\377\300\314\312\377\205\333\343\342\377\5\325" \
+ "\335\334\377f}x\377Slg\377Umh\377\324\334\333\377\275\333\343\342\377" \
+ "\3\267\310\305\377\223\254\247\377\307\324\321\377\207\377\377\377\377" \
+ "\4\357\363\362\377\223\254\247\377\234\263\257\377\332\342\341\377\275" \
+ "\333\343\342\377\3\304\322\317\377\223\254\247\377\263\304\301\377\207" \
+ "\377\377\377\377\4\373\374\374\377\233\262\255\377\225\255\250\377\325" \
+ "\336\335\377\307\333\343\342\377\4\275\311\307\377Slg\377\\so\377\316" \
+ "\327\326\377\220\333\343\342\377\3\227\250\245\377Slg\377p\206\202\377" \
+ "\206\333\343\342\377\4\276\312\310\377Tlg\377Slg\377\266\302\300\377" \
+ "\274\333\343\342\377\4\331\342\341\377\232\261\255\377\224\254\247\377" \
+ "\362\365\364\377\207\377\377\377\377\3\302\320\315\377\223\254\247\377" \
+ "\272\312\307\377\276\333\343\342\377\4\332\342\341\377\233\262\256\377" \
+ "\223\254\247\377\361\364\363\377\207\377\377\377\377\3\305\322\320\377" \
+ "\223\254\247\377\271\311\306\377\307\333\343\342\377\3\211\233\230\377" \
+ "Slg\377|\217\214\377\221\333\343\342\377\1\304\317\315\377\202Slg\377" \
+ "\1\305\317\316\377\206\333\343\342\377\3f}x\377Slg\377\235\254\252\377" \
+ "\274\333\343\342\377\3\303\320\316\377\223\254\247\377\265\306\302\377" \
+ "\207\377\377\377\377\4\372\373\373\377\231\261\254\377\225\255\251\377" \
+ "\326\337\336\377\277\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\304\322\317\377\207\377\377\377\377\4\361\364\363\377\223\254\247\377" \
+ "\233\262\256\377\332\342\341\377\306\333\343\342\377\3e{w\377Slg\377" \
+ "\227\250\245\377\221\333\343\342\377\4\331\342\341\377Xql\377Slg\377" \
+ "\241\261\256\377\206\333\343\342\377\3}\221\215\377Slg\377\221\242\237" \
+ "\377\274\333\343\342\377\3\245\271\265\377\223\254\247\377\343\351\350" \
+ "\377\207\377\377\377\377\3\324\336\334\377\223\254\247\377\256\301\275" \
+ "\377\300\333\343\342\377\4\325\336\335\377\225\255\250\377\232\262\255" \
+ "\377\373\374\374\377\207\377\377\377\377\3\264\305\301\377\223\254\247" \
+ "\377\304\321\317\377\305\333\343\342\377\4\332\342\341\377Vni\377Slg" \
+ "\377\243\262\257\377\222\333\343\342\377\3czu\377Slg\377\223\244\241" \
+ "\377\206\333\343\342\377\3\224\244\241\377Slg\377\210\233\227\377\273" \
+ "\333\343\342\377\3\316\331\330\377\223\254\247\377\244\271\264\377\210" \
+ "\377\377\377\377\3\246\273\267\377\223\254\247\377\315\330\326\377\301" \
+ "\333\343\342\377\4\255\300\274\377\222\253\246\377\315\330\326\377\376" \
+ "\376\376\377\206\377\377\377\377\3\341\350\346\377\223\254\247\377\246" \
+ "\272\266\377\305\333\343\342\377\1\322\333\332\377\202Slg\377\1\205\230" \
+ "\224\377\221\333\343\342\377\1\316\327\326\377\202Slg\377\1\211\234\230" \
+ "\377\206\333\343\342\377\3\220\242\236\377Slg\377\222\243\240\377\273" \
+ "\333\343\342\377\3\260\302\277\377\223\254\247\377\321\334\332\377\207" \
+ "\377\377\377\377\3\345\353\352\377\223\254\247\377\243\270\264\377\302" \
+ "\333\343\342\377\16\314\327\325\377\223\254\246\377\223\254\247\377\226" \
+ "\256\251\377\244\271\265\377\264\305\302\377\303\321\316\377\323\335" \
+ "\333\377\342\351\350\377\361\365\364\377\375\375\375\377\242\270\263" \
+ "\377\223\254\247\377\317\332\330\377\304\333\343\342\377\4\332\342\341" \
+ "\377Vni\377Slg\377f|x\377\221\333\343\342\377\1\256\274\271\377\202S" \
+ "lg\377\1\226\246\243\377\206\333\343\342\377\3\202\225\221\377Slg\377" \
+ "\237\257\254\377\272\333\343\342\377\4\327\337\336\377\226\256\251\377" \
+ "\230\260\253\377\371\372\372\377\207\377\377\377\377\3\270\310\305\377" \
+ "\223\254\247\377\301\317\315\377\303\333\343\342\377\15\232\262\255\377" \
+ "\223\254\246\377\325\336\335\377\331\342\340\377\312\326\324\377\273" \
+ "\313\310\377\254\277\273\377\235\263\257\377\223\254\247\377\226\256" \
+ "\251\377\234\263\256\377\222\254\246\377\256\300\274\377\305\333\343" \
+ "\342\377\1i\200{\377\202Slg\377\1\224\244\241\377\217\333\343\342\377" \
+ "\2\313\325\323\377czu\377\202Slg\377\1\253\271\266\377\205\333\343\342" \
+ "\377\4\331\341\340\377czu\377Slg\377\254\272\270\377\272\333\343\342" \
+ "\377\3\274\313\310\377\223\254\247\377\277\316\313\377\207\377\377\377" \
+ "\377\4\364\367\366\377\225\255\250\377\231\260\254\377\331\341\340\377" \
+ "\303\333\343\342\377\3\275\313\311\377\222\254\246\377\257\301\276\377" \
+ "\205\377\377\377\377\3\372\373\373\377\353\360\357\377\327\340\335\377" \
+ "\202\224\255\250\377\3\327\340\337\377\331\342\341\377\322\334\333\377" \
+ "\302\333\343\342\377\1\226\247\244\377\203Slg\377\2\231\252\247\377\330" \
+ "\341\340\377\214\333\343\342\377\2\310\323\321\377f|x\377\202Slg\377" \
+ "\2Voj\377\323\334\332\377\205\333\343\342\377\1\253\271\266\377\202S" \
+ "lg\377\1\272\306\304\377\272\333\343\342\377\3\236\264\260\377\223\254" \
+ "\247\377\355\361\360\377\207\377\377\377\377\3\311\325\323\377\223\254" \
+ "\247\377\266\306\303\377\304\333\343\342\377\4\331\341\340\377\224\255" \
+ "\250\377\224\254\247\377\366\370\367\377\207\377\377\377\377\5\263\305" \
+ "\301\377\222\254\246\377\266\306\302\377\232\262\254\377\240\266\262" \
+ "\377\302\333\343\342\377\2\314\325\324\377Xql\377\203Slg\377\4_wr\377" \
+ "\221\243\237\377\304\316\315\377\330\341\340\377\206\333\343\342\377" \
+ "\4\322\333\332\377\254\271\267\377w\214\210\377Tlg\377\203Slg\377\1\211" \
+ "\233\230\377\205\333\343\342\377\5\263\300\276\377Xql\377Slg\377Xql\377" \
+ "\326\336\335\377\271\333\343\342\377\3\310\324\322\377\223\254\247\377" \
+ "\256\301\275\377\207\377\377\377\377\4\375\375\375\377\235\264\257\377" \
+ "\223\254\247\377\323\334\333\377\305\333\343\342\377\3\256\300\276\377" \
+ "\223\253\246\377\305\322\320\377\207\377\377\377\377\6\353\360\357\377" \
+ "\222\254\247\377\231\261\255\377\241\267\262\377\223\254\247\377\312" \
+ "\326\324\377\302\333\343\342\377\1\237\256\253\377\206Slg\377\7Tlg\377" \
+ "^vq\377l\202~\377y\215\211\377s\210\203\377e|w\377Xpk\377\206Slg\377" \
+ "\2_wr\377\321\333\331\377\203\333\343\342\377\2\255\272\270\377q\207" \
+ "\202\377\203Slg\377\1~\222\216\377\272\333\343\342\377\3\251\275\271" \
+ "\377\223\254\247\377\334\344\342\377\207\377\377\377\377\3\333\343\341" \
+ "\377\223\254\247\377\252\275\271\377\306\333\343\342\377\4\322\334\332" \
+ "\377\223\253\246\377\231\260\253\377\375\376\375\377\207\377\377\377" \
+ "\377\5\242\267\263\377\222\253\246\377\265\305\302\377\223\254\247\377" \
+ "\254\277\273\377\303\333\343\342\377\1\220\242\236\377\221Slg\377\2_" \
+ "vr\377\304\316\315\377\204\333\343\342\377\1}\220\215\377\204Slg\377" \
+ "\1\251\267\265\377\271\333\343\342\377\4\322\334\333\377\223\254\247" \
+ "\377\236\265\260\377\375\376\375\377\207\377\377\377\377\3\255\300\274" \
+ "\377\223\254\247\377\310\324\322\377\307\333\343\342\377\3\241\266\263" \
+ "\377\223\253\247\377\332\342\341\377\203\377\377\377\377\2\371\372\372" \
+ "\377\364\367\366\377\202\377\377\377\377\6\326\340\336\377\222\254\246" \
+ "\377\243\270\263\377\230\260\253\377\225\255\250\377\324\336\334\377" \
+ "\303\333\343\342\377\2\242\261\256\377Yql\377\216Slg\377\2s\210\204\377" \
+ "\310\322\321\377\205\333\343\342\377\1\235\255\252\377\204\201\224\220" \
+ "\377\1\321\333\331\377\271\333\343\342\377\3\265\306\302\377\223\254" \
+ "\247\377\312\326\324\377\207\377\377\377\377\3\354\360\357\377\223\254" \
+ "\247\377\236\265\260\377\310\333\343\342\377\3\306\322\320\377\222\253" \
+ "\246\377\244\271\266\377\203\377\377\377\377\2\244\271\264\377\272\312" \
+ "\307\377\202\377\377\377\377\6\374\375\375\377\227\257\252\377\223\254" \
+ "\246\377\260\303\277\377\223\254\247\377\267\310\305\377\304\333\343" \
+ "\342\377\3\313\325\323\377\212\234\231\377Yrm\377\212Slg\377\3n\203\177" \
+ "\377\247\266\263\377\332\342\341\377\304\333\343\342\377\4\331\341\340" \
+ "\377\230\260\253\377\225\255\251\377\365\367\367\377\207\377\377\377" \
+ "\377\3\277\315\312\377\223\254\247\377\275\314\311\377\310\333\343\342" \
+ "\377\4\332\342\341\377\227\257\253\377\223\253\246\377\356\361\361\377" \
+ "\202\377\377\377\377\3\312\326\324\377\226\256\251\377\367\370\370\377" \
+ "\202\377\377\377\377\6\300\316\314\377\223\253\246\377\226\256\250\377" \
+ "\223\254\247\377\233\261\255\377\332\342\341\377\305\333\343\342\377" \
+ "\13\324\335\334\377\261\277\274\377\224\244\241\377|\217\214\377r\207" \
+ "\203\377j\200|\377n\203\177\377v\213\207\377\205\227\224\377\242\261" \
+ "\256\377\303\316\314\377\307\333\343\342\377\3\301\317\314\377\223\254" \
+ "\247\377\271\311\306\377\207\377\377\377\377\4\370\372\371\377\227\257" \
+ "\252\377\226\256\252\377\327\340\336\377\311\333\343\342\377\3\267\310" \
+ "\305\377\223\253\246\377\266\307\304\377\202\377\377\377\377\3\365\367" \
+ "\367\377\225\256\251\377\315\330\326\377\202\377\377\377\377\6\364\366" \
+ "\366\377\223\254\246\377\223\253\247\377\235\263\260\377\223\254\247" \
+ "\377\303\321\317\377\377\333\343\342\377\230\333\343\342\377\3\242\267" \
+ "\263\377\223\254\247\377\346\354\353\377\207\377\377\377\377\3\320\333" \
+ "\331\377\223\254\247\377\261\303\277\377\312\333\343\342\377\4\326\337" \
+ "\336\377\223\254\247\377\224\255\250\377\371\373\372\377\202\377\377" \
+ "\377\377\3\271\311\306\377\241\266\262\377\376\376\376\377\202\377\377" \
+ "\377\377\5\253\277\273\377\223\253\247\377\263\305\302\377\223\254\247" \
+ "\377\245\271\265\377\377\333\343\342\377\227\333\343\342\377\3\314\330" \
+ "\326\377\223\254\247\377\247\273\267\377\207\377\377\377\377\4\376\376" \
+ "\376\377\243\270\264\377\223\254\247\377\317\332\330\377\313\333\343" \
+ "\342\377\3\251\274\270\377\222\254\247\377\315\330\325\377\202\377\377" \
+ "\377\377\3\346\354\353\377\223\254\247\377\337\346\345\377\202\377\377" \
+ "\377\377\2\344\352\350\377\223\254\246\377\202\235\263\257\377\2\223" \
+ "\254\247\377\316\331\330\377\377\333\343\342\377\226\333\343\342\377" \
+ "\3\256\300\275\377\223\254\247\377\325\337\335\377\207\377\377\377\377" \
+ "\3\341\350\347\377\223\254\247\377\245\272\266\377\314\333\343\342\377" \
+ "\3\316\331\327\377\222\253\246\377\234\263\256\377\203\377\377\377\377" \
+ "\2\247\274\270\377\261\303\300\377\203\377\377\377\377\5\234\263\256" \
+ "\377\223\253\246\377\263\305\301\377\223\254\247\377\260\303\277\377" \
+ "\322\333\343\342\377\1\304\317\315\377\202\201\224\220\377\277\333\343" \
+ "\342\377\4\325\336\335\377\225\255\250\377\232\261\255\377\373\374\373" \
+ "\377\207\377\377\377\377\3\264\305\302\377\223\254\247\377\303\321\317" \
+ "\377\315\333\343\342\377\3\235\263\260\377\223\253\246\377\342\351\347" \
+ "\377\202\377\377\377\377\3\325\336\334\377\223\254\247\377\360\363\363" \
+ "\377\202\377\377\377\377\5\315\330\326\377\223\253\246\377\247\274\267" \
+ "\377\227\256\251\377\253\276\273\377\322\333\343\342\377\1\270\305\303" \
+ "\377\202Slg\377\277\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\303\321\316\377\207\377\377\377\377\4\361\364\364\377\224\254\247\377" \
+ "\232\262\255\377\332\342\341\377\315\333\343\342\377\3\300\317\315\377" \
+ "\223\254\246\377\253\277\272\377\202\377\377\377\377\3\373\374\374\377" \
+ "\232\262\255\377\303\321\316\377\202\377\377\377\377\4\372\373\373\377" \
+ "\225\255\251\377\224\254\247\377\321\333\332\377\323\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\276\333\343\342\377\4\332\342\341\377\234" \
+ "\263\256\377\223\254\247\377\360\363\363\377\207\377\377\377\377\3\305" \
+ "\323\320\377\223\254\247\377\270\310\305\377\316\333\343\342\377\4\331" \
+ "\341\340\377\226\255\251\377\223\253\247\377\363\366\365\377\202\377" \
+ "\377\377\377\3\304\321\317\377\232\262\255\377\373\374\374\377\202\377" \
+ "\377\377\377\3\267\310\304\377\222\253\246\377\270\310\304\377\306\333" \
+ "\343\342\377\2\317\331\327\377\301\314\312\377\213\275\310\306\377\1" \
+ "\242\261\256\377\202Slg\377\276\333\343\342\377\3\305\322\320\377\223" \
+ "\254\247\377\262\304\300\377\207\377\377\377\377\4\374\374\374\377\233" \
+ "\262\255\377\224\255\250\377\324\336\334\377\317\333\343\342\377\3\261" \
+ "\303\300\377\223\253\246\377\276\315\313\377\202\377\377\377\377\3\360" \
+ "\364\363\377\223\254\247\377\325\337\335\377\202\377\377\377\377\4\357" \
+ "\362\362\377\222\253\246\377\231\260\253\377\332\342\341\377\301\333" \
+ "\343\342\377\4\305\320\316\377\204\227\223\377e|w\377Voj\377\220Slg\377" \
+ "\276\333\343\342\377\3\247\273\267\377\223\254\247\377\340\347\345\377" \
+ "\207\377\377\377\377\3\327\340\336\377\223\254\247\377\254\277\274\377" \
+ "\320\333\343\342\377\4\323\335\334\377\223\253\247\377\226\256\252\377" \
+ "\374\375\374\377\202\377\377\377\377\2\262\304\301\377\250\274\270\377" \
+ "\202\377\377\377\377\4\354\360\357\377\232\262\255\377\223\253\247\377" \
+ "\306\323\321\377\277\333\343\342\377\3\325\335\334\377\202\225\221\377" \
+ "Tlg\377\223Slg\377\275\333\343\342\377\4\320\333\331\377\223\254\247" \
+ "\377\241\267\262\377\376\376\376\377\207\377\377\377\377\3\251\275\271" \
+ "\377\223\254\247\377\312\326\324\377\321\333\343\342\377\3\244\271\264" \
+ "\377\223\254\247\377\325\337\335\377\202\377\377\377\377\10\340\347\346" \
+ "\377\223\254\247\377\312\327\324\377\255\300\274\377\226\256\251\377" \
+ "\255\277\274\377\222\254\247\377\250\274\270\377\277\333\343\342\377" \
+ "\1\207\232\226\377\225Slg\377\275\333\343\342\377\3\262\304\300\377\223" \
+ "\254\247\377\316\331\327\377\207\377\377\377\377\3\350\355\354\377\223" \
+ "\254\247\377\240\266\262\377\322\333\343\342\377\16\311\325\323\377\223" \
+ "\254\246\377\241\266\263\377\377\377\377\377\364\367\366\377\310\325" \
+ "\322\377\227\257\252\377\234\263\256\377\312\327\324\377\365\370\367" \
+ "\377\376\376\376\377\240\266\261\377\223\254\247\377\321\333\332\377" \
+ "\275\333\343\342\377\1\257\275\272\377\205Slg\377\4Voj\377axt\377k\201" \
+ "|\377t\211\205\377\212x\215\211\377\1o\204\200\377\202Slg\377\274\333" \
+ "\343\342\377\4\330\340\337\377\227\257\252\377\226\256\252\377\367\371" \
+ "\371\377\207\377\377\377\377\3\273\312\307\377\223\254\247\377\277\315" \
+ "\313\377\323\333\343\342\377\7\231\260\254\377\223\253\247\377\260\302" \
+ "\276\377\225\256\251\377\257\301\276\377\334\344\343\377\376\376\376" \
+ "\377\203\377\377\377\377\3\315\330\326\377\223\254\247\377\264\305\302" \
+ "\377\275\333\343\342\377\1\201\225\221\377\203Slg\377\3~\222\216\377" \
+ "\261\277\274\377\327\340\337\377\215\333\343\342\377\1\270\305\303\377" \
+ "\202Slg\377\274\333\343\342\377\3\276\315\312\377\223\254\247\377\274" \
+ "\314\311\377\207\377\377\377\377\4\366\370\370\377\225\256\251\377\230" \
+ "\257\253\377\330\341\337\377\323\333\343\342\377\4\273\312\310\377\222" \
+ "\254\246\377\244\271\265\377\356\362\361\377\206\377\377\377\377\4\366" \
+ "\370\370\377\226\256\251\377\230\257\253\377\330\341\340\377\274\333" \
+ "\343\342\377\1i\200{\377\202Slg\377\1\204\226\223\377\220\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\274\333\343\342\377\3\237\265\261\377" \
+ "\223\254\247\377\352\357\356\377\207\377\377\377\377\3\314\330\325\377" \
+ "\223\254\247\377\263\304\301\377\324\333\343\342\377\4\327\340\337\377" \
+ "\227\257\252\377\226\256\252\377\367\371\371\377\207\377\377\377\377" \
+ "\3\273\313\310\377\223\254\247\377\277\316\313\377\273\333\343\342\377" \
+ "\2\330\340\337\377Uni\377\202Slg\377\1\321\333\331\377\220\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\273\333\343\342\377\3\312\326\324\377" \
+ "\223\254\247\377\253\276\273\377\207\377\377\377\377\4\376\376\376\377" \
+ "\240\265\261\377\223\254\247\377\321\333\332\377\325\333\343\342\377" \
+ "\3\262\303\300\377\223\254\247\377\316\331\327\377\207\377\377\377\377" \
+ "\3\350\356\355\377\223\254\247\377\241\267\262\377\273\333\343\342\377" \
+ "\4\326\337\336\377Tlg\377Slg\377byt\377\221\333\343\342\377\1\330\341" \
+ "\340\377\202\322\333\332\377\273\333\343\342\377\3\253\276\273\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\335\345\344\377\223" \
+ "\254\247\377\247\273\270\377\326\333\343\342\377\4\320\332\331\377\223" \
+ "\254\247\377\241\267\262\377\376\376\376\377\207\377\377\377\377\3\252" \
+ "\275\271\377\223\254\247\377\313\326\325\377\273\333\343\342\377\3cz" \
+ "u\377Slg\377l\202~\377\316\333\343\342\377\4\323\335\334\377\224\255" \
+ "\250\377\234\263\256\377\374\375\374\377\207\377\377\377\377\3\260\302" \
+ "\276\377\223\254\247\377\306\323\321\377\327\333\343\342\377\3\246\273" \
+ "\267\377\223\254\247\377\340\347\345\377\207\377\377\377\377\3\327\340" \
+ "\336\377\223\254\247\377\254\277\274\377\273\333\343\342\377\4\207\231" \
+ "\226\377Slg\377Vni\377\327\337\336\377\315\333\343\342\377\3\267\307" \
+ "\304\377\223\254\247\377\307\324\321\377\207\377\377\377\377\4\356\362" \
+ "\361\377\223\254\247\377\234\263\257\377\332\342\341\377\327\333\343" \
+ "\342\377\3\304\322\317\377\223\254\247\377\262\304\300\377\207\377\377" \
+ "\377\377\4\374\374\374\377\233\262\256\377\224\255\250\377\325\336\335" \
+ "\377\272\333\343\342\377\1\305\317\316\377\202Slg\377\1\271\306\304\377" \
+ "\220\333\343\342\377\1\307\322\320\377\202\216\237\234\377\271\333\343" \
+ "\342\377\4\331\342\341\377\232\261\255\377\224\255\250\377\363\366\365" \
+ "\377\207\377\377\377\377\3\302\320\315\377\223\254\247\377\272\312\307" \
+ "\377\330\333\343\342\377\4\332\342\341\377\233\262\256\377\223\254\247" \
+ "\377\360\363\363\377\207\377\377\377\377\3\306\323\320\377\223\254\247" \
+ "\377\270\310\305\377\273\333\343\342\377\4\232\252\247\377Slg\377d{v" \
+ "\377\317\330\327\377\217\333\343\342\377\1\270\305\303\377\202Slg\377" \
+ "\271\333\343\342\377\3\303\320\316\377\223\254\247\377\266\307\303\377" \
+ "\207\377\377\377\377\4\372\373\373\377\231\260\254\377\225\255\251\377" \
+ "\326\337\336\377\331\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\303\321\316\377\207\377\377\377\377\4\362\365\364\377\224\254\247\377" \
+ "\233\262\255\377\332\342\341\377\273\333\343\342\377\4\226\246\243\377" \
+ "Tmh\377l\201}\377\267\303\301\377\216\333\343\342\377\1\270\305\303\377" \
+ "\202Slg\377\271\333\343\342\377\3\244\271\265\377\223\254\247\377\343" \
+ "\352\350\377\207\377\377\377\377\3\323\335\333\377\223\254\247\377\256" \
+ "\301\275\377\332\333\343\342\377\4\325\336\335\377\225\255\250\377\232" \
+ "\261\254\377\373\374\373\377\207\377\377\377\377\3\264\306\302\377\223" \
+ "\254\247\377\304\321\317\377\271\333\343\342\377\1\317\330\327\377\202" \
+ "\301\314\312\377\10\246\265\262\377^vq\377Slg\377k\201}\377\226\247\244" \
+ "\377\245\264\261\377\263\300\276\377\277\313\311\377\211\301\314\312" \
+ "\377\1\245\264\261\377\202Slg\377\270\333\343\342\377\3\316\331\327\377" \
+ "\223\254\247\377\245\271\265\377\210\377\377\377\377\3\246\272\266\377" \
+ "\223\254\247\377\315\330\326\377\333\333\343\342\377\3\255\300\274\377" \
+ "\223\254\247\377\325\336\334\377\207\377\377\377\377\3\342\350\347\377" \
+ "\223\254\247\377\245\272\266\377\271\333\343\342\377\1\233\253\250\377" \
+ "\226Slg\377\270\333\343\342\377\3\260\302\276\377\223\254\247\377\322" \
+ "\334\332\377\207\377\377\377\377\3\344\352\351\377\223\254\247\377\243" \
+ "\270\264\377\334\333\343\342\377\3\314\327\325\377\223\254\247\377\247" \
+ "\273\267\377\207\377\377\377\377\4\376\376\376\377\243\270\264\377\223" \
+ "\254\247\377\317\332\330\377\270\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\267\333\343\342\377\4\326\337\336\377\226\256\251\377\230\260" \
+ "\253\377\371\373\372\377\207\377\377\377\377\3\267\307\304\377\223\254" \
+ "\247\377\301\317\315\377\335\333\343\342\377\3\241\267\263\377\223\254" \
+ "\247\377\346\354\353\377\207\377\377\377\377\3\320\333\331\377\223\254" \
+ "\247\377\261\303\277\377\270\333\343\342\377\1\233\253\250\377\226Sl" \
+ "g\377\267\333\343\342\377\3\273\313\310\377\223\254\247\377\300\317\314" \
+ "\377\207\377\377\377\377\4\363\366\366\377\224\255\250\377\231\260\254" \
+ "\377\331\341\340\377\335\333\343\342\377\3\300\316\314\377\223\254\247" \
+ "\377\271\311\306\377\207\377\377\377\377\4\371\372\372\377\227\257\253" \
+ "\377\226\256\252\377\327\340\337\377\267\333\343\342\377\3\233\253\250" \
+ "\377Slg\377[sn\377\221x\215\211\377\1o\204\200\377\202Slg\377\266\333" \
+ "\343\342\377\4\332\342\341\377\235\264\257\377\223\254\247\377\356\361" \
+ "\361\377\207\377\377\377\377\3\310\325\322\377\223\254\247\377\266\306" \
+ "\303\377\336\333\343\342\377\4\330\341\340\377\230\260\253\377\225\255" \
+ "\251\377\365\367\367\377\207\377\377\377\377\3\277\316\313\377\223\254" \
+ "\247\377\275\314\311\377\267\333\343\342\377\3\233\253\250\377Slg\377" \
+ "p\205\201\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\266\333" \
+ "\343\342\377\3\307\324\322\377\223\254\247\377\257\301\276\377\207\377" \
+ "\377\377\377\4\374\375\375\377\235\264\257\377\223\254\247\377\323\334" \
+ "\333\377\337\333\343\342\377\3\264\305\302\377\223\254\247\377\312\326" \
+ "\324\377\207\377\377\377\377\3\354\361\360\377\223\254\247\377\236\265" \
+ "\260\377\267\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221" \
+ "\333\343\342\377\1\270\305\303\377\202Slg\377\266\333\343\342\377\3\251" \
+ "\274\271\377\223\254\247\377\334\344\343\377\207\377\377\377\377\3\332" \
+ "\342\340\377\223\254\247\377\252\275\271\377\340\333\343\342\377\4\322" \
+ "\334\332\377\223\254\247\377\236\265\260\377\375\375\375\377\207\377" \
+ "\377\377\377\3\256\300\275\377\223\254\247\377\310\324\322\377\266\333" \
+ "\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\265\333\343\342\377\4\322\334\332\377\223" \
+ "\254\247\377\237\265\260\377\375\376\375\377\207\377\377\377\377\3\254" \
+ "\277\273\377\223\254\247\377\310\324\322\377\341\333\343\342\377\3\251" \
+ "\274\271\377\223\254\247\377\333\343\342\377\207\377\377\377\377\3\333" \
+ "\343\342\377\223\254\247\377\252\275\272\377\266\333\343\342\377\3\277" \
+ "\312\310\377\237\256\253\377\254\272\270\377\221\333\343\342\377\1\323" \
+ "\334\333\377\202\275\310\306\377\265\333\343\342\377\3\264\305\302\377" \
+ "\223\254\247\377\313\327\324\377\207\377\377\377\377\3\353\360\357\377" \
+ "\223\254\247\377\236\265\260\377\342\333\343\342\377\3\307\323\321\377" \
+ "\223\254\247\377\256\301\275\377\207\377\377\377\377\4\375\375\375\377" \
+ "\236\264\260\377\224\254\247\377\323\334\333\377\377\333\343\342\377" \
+ "\5\333\343\342\377\331\341\340\377\230\260\253\377\225\256\251\377\366" \
+ "\370\367\377\207\377\377\377\377\3\275\314\311\377\223\254\247\377\274" \
+ "\313\311\377\342\333\343\342\377\4\332\342\341\377\235\264\257\377\223" \
+ "\254\247\377\355\361\360\377\207\377\377\377\377\3\312\326\323\377\223" \
+ "\254\247\377\266\306\303\377\377\333\343\342\377\4\333\343\342\377\300" \
+ "\316\314\377\223\254\247\377\271\311\306\377\207\377\377\377\377\4\370" \
+ "\371\371\377\227\257\252\377\226\256\252\377\327\340\336\377\343\333" \
+ "\343\342\377\3\273\313\310\377\223\254\247\377\277\316\313\377\207\377" \
+ "\377\377\377\4\364\367\366\377\225\255\250\377\231\260\254\377\331\341" \
+ "\340\377\310\333\343\342\377\3\307\322\320\377\305\320\316\377\324\334" \
+ "\333\377\264\333\343\342\377\3\241\267\263\377\223\254\247\377\347\354" \
+ "\353\377\207\377\377\377\377\3\317\332\330\377\223\254\247\377\261\303" \
+ "\277\377\344\333\343\342\377\4\326\337\336\377\226\256\251\377\227\257" \
+ "\253\377\371\372\372\377\207\377\377\377\377\3\270\310\305\377\223\254" \
+ "\247\377\301\317\315\377\310\333\343\342\377\3_vr\377Slg\377\254\271" \
+ "\267\377\263\333\343\342\377\3\314\327\325\377\223\254\247\377\250\274" \
+ "\270\377\207\377\377\377\377\4\376\376\376\377\242\270\263\377\223\254" \
+ "\247\377\317\332\330\377\345\333\343\342\377\3\260\302\276\377\223\254" \
+ "\247\377\321\333\331\377\207\377\377\377\377\3\346\353\352\377\223\254" \
+ "\247\377\243\270\264\377\310\333\343\342\377\3_vr\377Slg\377\254\271" \
+ "\267\377\263\333\343\342\377\3\255\300\274\377\223\254\247\377\325\337" \
+ "\335\377\207\377\377\377\377\3\340\347\346\377\223\254\247\377\245\272" \
+ "\266\377\346\333\343\342\377\3\316\331\327\377\223\254\247\377\244\271" \
+ "\265\377\210\377\377\377\377\3\247\273\267\377\223\254\247\377\315\330" \
+ "\326\377\307\333\343\342\377\3^vq\377Slg\377\254\271\267\377\262\333" \
+ "\343\342\377\4\325\336\335\377\225\255\250\377\232\261\255\377\373\374" \
+ "\374\377\207\377\377\377\377\3\263\304\301\377\223\254\247\377\303\321" \
+ "\317\377\347\333\343\342\377\3\244\271\265\377\223\254\247\377\342\351" \
+ "\347\377\207\377\377\377\377\3\324\336\334\377\223\254\247\377\256\301" \
+ "\275\377\304\333\343\342\377\3\317\331\327\377\236\255\253\377i\177{" \
+ "\377\202Slg\377\1\254\271\267\377\262\333\343\342\377\3\271\311\306\377" \
+ "\223\254\247\377\304\322\317\377\207\377\377\377\377\4\361\364\363\377" \
+ "\223\254\247\377\226\256\251\377\332\342\341\377\347\333\343\342\377" \
+ "\3\302\320\316\377\223\254\247\377\265\306\302\377\202\377\377\377\377" \
+ "\3\371\373\372\377\356\361\361\377\375\375\375\377\202\377\377\377\377" \
+ "\4\372\373\373\377\232\261\254\377\225\255\251\377\326\337\336\377\300" \
+ "\333\343\342\377\4\331\341\340\377\263\300\276\377~\222\216\377Uni\377" \
+ "\204Slg\377\1\254\271\267\377\261\333\343\342\377\4\332\342\341\377\233" \
+ "\262\256\377\223\254\247\377\361\364\363\377\207\377\377\377\377\1\304" \
+ "\322\317\377\202\223\254\247\377\1\312\326\324\377\347\333\343\342\377" \
+ "\5\331\341\340\377\232\261\254\377\223\254\247\377\302\320\315\377\244" \
+ "\271\265\377\202\223\254\247\377\7\226\256\251\377\251\275\271\377\331" \
+ "\342\340\377\377\377\377\377\303\321\316\377\223\254\247\377\272\312" \
+ "\307\377\276\333\343\342\377\3\310\322\321\377\224\244\241\377axt\377" \
+ "\207Slg\377\1\254\271\267\377\261\333\343\342\377\3\304\322\317\377\223" \
+ "\254\247\377\263\304\301\377\207\377\377\377\377\5\373\374\374\377\233" \
+ "\262\255\377\225\255\251\377\233\262\256\377\264\305\302\377\350\333" \
+ "\343\342\377\1\260\303\277\377\202\224\255\250\377\13\277\315\312\377" \
+ "\330\341\337\377\345\353\351\377\322\334\332\377\263\304\301\377\223" \
+ "\254\247\377\267\307\304\377\353\357\356\377\223\254\247\377\234\263" \
+ "\257\377\332\342\341\377\272\333\343\342\377\3\326\336\335\377\251\267" \
+ "\265\377t\211\205\377\212Slg\377\1\254\271\267\377\261\333\343\342\377" \
+ "\3\246\272\266\377\223\254\247\377\340\347\346\377\207\377\377\377\377" \
+ "\5\326\337\335\377\223\254\247\377\271\311\306\377\262\304\300\377\246" \
+ "\272\266\377\347\333\343\342\377\4\331\341\340\377\236\264\260\377\240" \
+ "\266\261\377\351\356\355\377\205\377\377\377\377\6\330\341\337\377\226" \
+ "\256\252\377\275\314\311\377\261\303\300\377\223\254\247\377\306\323" \
+ "\320\377\270\333\343\342\377\3\276\312\310\377\211\234\230\377[sn\377" \
+ "\211Slg\377\4Voj\377Umh\377Slg\377\254\271\267\377\260\333\343\342\377" \
+ "\4\320\332\331\377\223\254\247\377\242\267\263\377\376\376\376\377\207" \
+ "\377\377\377\377\5\250\274\270\377\223\254\247\377\346\354\353\377\272" \
+ "\312\307\377\242\267\263\377\347\333\343\342\377\3\265\306\302\377\225" \
+ "\255\250\377\352\357\356\377\207\377\377\377\377\5\322\334\332\377\223" \
+ "\254\247\377\311\325\323\377\223\254\247\377\247\273\270\377\265\333" \
+ "\343\342\377\3\320\332\330\377\237\256\253\377k\201|\377\212Slg\377\6" \
+ "n\204\200\377\242\261\256\377\321\333\331\377_vr\377Slg\377\254\271\267" \
+ "\377\260\333\343\342\377\3\262\303\300\377\223\254\247\377\317\332\330" \
+ "\377\204\377\377\377\377\11\367\371\370\377\352\357\356\377\377\377\377" \
+ "\377\347\355\354\377\223\254\247\377\247\273\267\377\377\377\377\377" \
+ "\244\271\265\377\257\301\276\377\347\333\343\342\377\2\234\263\256\377" \
+ "\303\321\316\377\211\377\377\377\377\5\250\274\270\377\267\307\304\377" \
+ "\241\266\262\377\223\254\247\377\321\333\332\377\261\333\343\342\377" \
+ "\4\331\342\341\377\264\301\277\377\200\223\220\377Vni\377\211Slg\377" \
+ "\3^vq\377\220\241\236\377\303\316\314\377\203\333\343\342\377\3_vr\377" \
+ "Slg\377\254\271\267\377\257\333\343\342\377\1\327\340\337\377\202\227" \
+ "\257\252\377\1\370\371\371\377\203\377\377\377\377\12\352\357\356\377" \
+ "\226\256\252\377\223\254\247\377\277\316\313\377\271\311\306\377\223" \
+ "\254\247\377\325\337\335\377\351\356\355\377\223\254\247\377\277\316" \
+ "\313\377\346\333\343\342\377\3\325\336\335\377\223\254\247\377\335\344" \
+ "\343\377\211\377\377\377\377\5\302\320\315\377\241\267\262\377\315\331" \
+ "\326\377\223\254\247\377\263\304\301\377\241\333\343\342\377\6\274\307" \
+ "\306\377\217\241\235\377t\211\205\377|\217\214\377\242\261\256\377\310" \
+ "\322\321\377\210\333\343\342\377\3\311\323\322\377\225\246\243\377by" \
+ "t\377\213Slg\377\2\245\264\261\377\330\341\340\377\205\333\343\342\377" \
+ "\3_vr\377Slg\377\254\271\267\377\257\333\343\342\377\3\314\327\325\377" \
+ "\223\254\247\377\264\305\301\377\204\377\377\377\377\12\307\324\322\377" \
+ "\226\256\252\377\261\303\300\377\230\260\253\377\224\255\250\377\232" \
+ "\261\255\377\367\371\370\377\244\271\265\377\241\266\262\377\331\341" \
+ "\340\377\346\333\343\342\377\3\312\326\324\377\223\254\247\377\353\360" \
+ "\357\377\211\377\377\377\377\5\320\333\331\377\223\254\247\377\361\364" \
+ "\364\377\223\254\247\377\243\270\264\377\237\333\343\342\377\3\327\340" \
+ "\337\377\217\241\235\377Tlg\377\205Slg\377\1\236\255\253\377\204\333" \
+ "\343\342\377\3\326\337\336\377\253\271\266\377v\212\206\377\212Slg\377" \
+ "\2g}y\377\222\243\240\377\202Slg\377\1\305\320\316\377\206\333\343\342" \
+ "\377\3\264\301\277\377\260\275\273\377\314\326\324\377\257\333\343\342" \
+ "\377\3\316\331\330\377\223\254\247\377\263\304\301\377\204\377\377\377" \
+ "\377\11\351\356\355\377\226\256\251\377\223\254\247\377\251\275\271\377" \
+ "\223\254\247\377\272\312\307\377\244\271\265\377\225\255\251\377\316" \
+ "\331\327\377\347\333\343\342\377\3\326\337\336\377\223\254\247\377\332" \
+ "\343\341\377\211\377\377\377\377\5\277\316\313\377\243\270\264\377\363" \
+ "\365\365\377\223\254\247\377\246\272\266\377\237\333\343\342\377\1\217" \
+ "\241\235\377\203Slg\377\2e{w\377czu\377\203Slg\377\5\254\271\267\377" \
+ "\333\343\342\377\300\313\311\377\213\235\232\377[sn\377\211Slg\377\5" \
+ "Yql\377\206\231\225\377\273\307\305\377\333\343\342\377\316\327\326\377" \
+ "\202Slg\377\1\305\320\316\377\270\333\343\342\377\3\321\334\332\377\223" \
+ "\254\247\377\256\301\275\377\205\377\377\377\377\3\366\370\367\377\346" \
+ "\354\352\377\237\265\260\377\202\223\254\247\377\2\240\266\262\377\315" \
+ "\330\327\377\351\333\343\342\377\2\235\264\257\377\275\314\311\377\210" \
+ "\377\377\377\377\6\375\375\375\377\243\271\264\377\271\311\306\377\356" \
+ "\362\361\377\223\254\247\377\251\275\271\377\236\333\343\342\377\5\274" \
+ "\307\306\377Tlg\377Slg\377e{w\377\300\313\311\377\202\333\343\342\377" \
+ "\5\274\307\306\377axt\377Slg\377Vni\377k\201}\377\212Slg\377\3r\207\203" \
+ "\377\246\265\262\377\324\335\334\377\203\333\343\342\377\1\316\327\326" \
+ "\377\202Slg\377\1\305\320\316\377\270\333\343\342\377\3\324\336\334\377" \
+ "\223\254\247\377\251\275\271\377\206\377\377\377\377\5\335\344\343\377" \
+ "\223\254\247\377\233\262\255\377\300\316\314\377\331\341\340\377\352" \
+ "\333\343\342\377\3\272\312\307\377\223\254\247\377\343\351\350\377\207" \
+ "\377\377\377\377\6\310\325\322\377\224\254\250\377\350\355\354\377\351" \
+ "\356\355\377\223\254\247\377\254\277\273\377\236\333\343\342\377\1\217" \
+ "\241\235\377\202Slg\377\1\300\313\311\377\204\333\343\342\377\1\270\305" \
+ "\303\377\212Slg\377\3_wr\377\222\243\240\377\306\320\317\377\206\333" \
+ "\343\342\377\1\316\327\326\377\202Slg\377\1\305\320\316\377\270\333\343" \
+ "\342\377\3\327\340\337\377\223\254\247\377\245\272\266\377\206\377\377" \
+ "\377\377\3\257\301\276\377\223\254\247\377\306\323\320\377\354\333\343" \
+ "\342\377\4\332\342\341\377\244\271\265\377\233\262\255\377\335\345\343" \
+ "\377\204\377\377\377\377\10\375\376\375\377\312\326\324\377\224\254\250" \
+ "\377\307\324\321\377\377\377\377\377\344\352\351\377\223\254\247\377" \
+ "\257\301\276\377\236\333\343\342\377\3t\211\205\377Slg\377g~y\377\206" \
+ "\333\343\342\377\1\\to\377\206Slg\377\4Uni\377}\221\215\377\261\277\274" \
+ "\377\330\341\340\377\210\333\343\342\377\1\316\327\326\377\202Slg\377" \
+ "\1\305\320\316\377\270\333\343\342\377\3\332\342\341\377\223\254\247" \
+ "\377\240\266\262\377\205\377\377\377\377\4\356\361\361\377\223\254\247" \
+ "\377\234\263\257\377\332\342\341\377\355\333\343\342\377\17\324\336\334" \
+ "\377\250\273\270\377\223\254\247\377\261\303\277\377\312\326\324\377" \
+ "\327\340\336\377\304\322\317\377\246\273\267\377\223\254\247\377\304" \
+ "\322\317\377\375\375\375\377\377\377\377\377\340\347\345\377\223\254" \
+ "\247\377\262\303\300\377\236\333\343\342\377\3v\212\206\377Slg\377f|" \
+ "x\377\206\333\343\342\377\1[sn\377\204Slg\377\3i\177{\377\235\255\252" \
+ "\377\317\330\327\377\213\333\343\342\377\1\316\327\326\377\202Slg\377" \
+ "\1\305\320\316\377\271\333\343\342\377\2\225\255\251\377\234\263\256" \
+ "\377\205\377\377\377\377\3\300\317\314\377\223\254\247\377\272\312\307" \
+ "\377\360\333\343\342\377\7\277\316\313\377\245\272\266\377\227\257\252" \
+ "\377\223\254\247\377\225\255\250\377\257\301\276\377\346\353\352\377" \
+ "\203\377\377\377\377\3\333\343\342\377\223\254\247\377\265\306\302\377" \
+ "\236\333\343\342\377\1\220\242\236\377\202Slg\377\1\277\312\310\377\204" \
+ "\333\343\342\377\1\266\302\300\377\205Slg\377\3z\216\212\377\257\274" \
+ "\272\377\330\340\337\377\213\333\343\342\377\1\316\327\326\377\202Sl" \
+ "g\377\1\305\320\316\377\271\333\343\342\377\2\230\260\253\377\230\257" \
+ "\253\377\204\377\377\377\377\4\371\373\372\377\230\260\253\377\225\255" \
+ "\251\377\326\337\336\377\362\333\343\342\377\4\332\342\341\377\266\307" \
+ "\304\377\223\254\247\377\302\320\315\377\204\377\377\377\377\3\326\337" \
+ "\335\377\223\254\247\377\267\310\305\377\236\333\343\342\377\14\276\311" \
+ "\307\377Tmh\377Slg\377d{v\377\274\307\306\377\333\343\342\377\321\332" \
+ "\331\377\235\255\252\377^vq\377Slg\377Vni\377k\201}\377\204Slg\377\3" \
+ "^uq\377\217\241\235\377\304\317\315\377\211\333\343\342\377\1\316\327" \
+ "\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\2\233\262\255" \
+ "\377\223\254\247\377\204\377\377\377\377\3\322\334\332\377\223\254\247" \
+ "\377\256\301\275\377\364\333\343\342\377\4\325\336\335\377\225\255\250" \
+ "\377\231\261\254\377\372\373\373\377\203\377\377\377\377\3\321\334\332" \
+ "\377\223\254\247\377\272\312\307\377\237\333\343\342\377\1\223\244\240" \
+ "\377\203Slg\377\2_vr\377Wpk\377\203Slg\377\5\254\271\267\377\333\343" \
+ "\342\377\300\314\312\377\214\236\233\377\\so\377\204Slg\377\3p\205\201" \
+ "\377\245\263\261\377\324\334\333\377\206\333\343\342\377\1\316\327\326" \
+ "\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\3\236\264\260\377" \
+ "\223\254\247\377\373\374\374\377\203\377\377\377\377\3\245\271\265\377" \
+ "\223\254\247\377\315\330\326\377\365\333\343\342\377\3\255\300\274\377" \
+ "\223\254\247\377\324\336\334\377\203\377\377\377\377\3\315\330\326\377" \
+ "\223\254\247\377\275\314\312\377\237\333\343\342\377\3\330\340\337\377" \
+ "\225\246\243\377Umh\377\205Slg\377\1\236\255\253\377\204\333\343\342" \
+ "\377\4\327\337\336\377\254\271\267\377w\214\210\377Tlg\377\203Slg\377" \
+ "\3Xpk\377\205\230\224\377\272\306\304\377\204\333\343\342\377\1\316\327" \
+ "\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\3\241\266\262" \
+ "\377\223\254\247\377\366\370\370\377\202\377\377\377\377\3\343\352\350" \
+ "\377\223\254\247\377\243\270\264\377\366\333\343\342\377\3\314\327\325" \
+ "\377\223\254\247\377\246\273\267\377\203\377\377\377\377\3\307\324\322" \
+ "\377\223\254\247\377\300\316\314\377\241\333\343\342\377\6\302\315\313" \
+ "\377\230\250\245\377}\220\215\377\203\226\222\377\246\265\262\377\311" \
+ "\324\322\377\210\333\343\342\377\3\313\325\323\377\227\250\245\377d{" \
+ "v\377\204Slg\377\5f}x\377\233\253\250\377\315\327\325\377\333\343\342" \
+ "\377\316\327\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377" \
+ "\3\244\271\265\377\223\254\247\377\362\365\364\377\202\377\377\377\377" \
+ "\3\266\307\303\377\223\254\247\377\301\317\315\377\367\333\343\342\377" \
+ "\3\241\267\263\377\223\254\247\377\345\353\352\377\202\377\377\377\377" \
+ "\3\303\321\316\377\223\254\247\377\303\321\317\377\261\333\343\342\377" \
+ "\4\332\342\341\377\267\304\302\377\203\226\222\377Wpk\377\203Slg\377" \
+ "\3Tmh\377|\217\214\377\245\264\261\377\202Slg\377\1\305\320\316\377\206" \
+ "\333\343\342\377\3\317\331\327\377\316\327\326\377\326\337\336\377\260" \
+ "\333\343\342\377\10\247\273\267\377\223\254\247\377\301\317\314\377\333" \
+ "\343\341\377\344\352\351\377\224\255\250\377\231\260\254\377\331\341" \
+ "\340\377\367\333\343\342\377\10\300\316\314\377\223\254\247\377\265\306" \
+ "\303\377\345\353\351\377\322\335\333\377\250\274\270\377\223\254\247" \
+ "\377\306\323\321\377\264\333\343\342\377\3\323\334\332\377\243\262\257" \
+ "\377o\204\200\377\206Slg\377\1\267\304\302\377\206\333\343\342\377\3" \
+ "_vr\377Slg\377\254\271\267\377\260\333\343\342\377\1\252\275\271\377" \
+ "\205\223\254\247\377\1\266\306\303\377\370\333\343\342\377\2\330\341" \
+ "\340\377\230\260\253\377\205\223\254\247\377\1\311\325\323\377\267\333" \
+ "\343\342\377\3\303\316\314\377\217\240\235\377]up\377\204Slg\377\3r\207" \
+ "\203\377\246\265\262\377\324\335\334\377\203\333\343\342\377\3_vr\377" \
+ "Slg\377\254\271\267\377\260\333\343\342\377\7\327\337\336\377\220\243" \
+ "\237\377k\204\177\377u\216\211\377\205\235\230\377\235\263\257\377\323" \
+ "\334\333\377\371\333\343\342\377\7\267\307\304\377\233\261\255\377~\227" \
+ "\222\377q\212\205\377m\206\201\377\273\310\306\377\332\342\341\377\271" \
+ "\333\343\342\377\4\330\340\337\377\256\274\271\377z\216\212\377Tmh\377" \
+ "\203Slg\377\7Yql\377\206\231\225\377\273\307\305\377\333\343\342\377" \
+ "_vr\377Slg\377\254\271\267\377\261\333\343\342\377\1x\214\210\377\202" \
+ "Slg\377\1~\221\216\377\374\333\343\342\377\5\325\335\334\377axt\377S" \
+ "lg\377Tmh\377\251\270\265\377\275\333\343\342\377\3\315\326\325\377\232" \
+ "\252\247\377f}x\377\204Slg\377\4g}y\377Woj\377Slg\377\254\271\267\377" \
+ "\261\333\343\342\377\1}\220\215\377\202Slg\377\1\240\257\254\377\375" \
+ "\333\343\342\377\1f}x\377\202Slg\377\1\222\243\240\377\300\333\343\342" \
+ "\377\3\272\306\304\377\206\230\225\377Xql\377\204Slg\377\1\254\271\267" \
+ "\377\261\333\343\342\377\4\216\237\234\377Slg\377_wr\377\326\336\335" \
+ "\377\375\333\343\342\377\4r\207\203\377Slg\377axt\377\317\330\327\377" \
+ "\302\333\343\342\377\3\324\334\333\377\246\264\262\377q\207\202\377\202" \
+ "Slg\377\1\254\271\267\377\261\333\343\342\377\3\237\257\254\377Slg\377" \
+ "\240\257\254\377\376\333\343\342\377\3\216\240\235\377Wpk\377\246\264" \
+ "\262\377\306\333\343\342\377\3_vr\377Slg\377\254\271\267\377\261\333" \
+ "\343\342\377\3\260\276\273\377axt\377\326\337\336\377\376\333\343\342" \
+ "\377\2\265\302\277\377v\213\207\377\307\333\343\342\377\3_vr\377Slg\377" \
+ "\254\271\267\377\261\333\343\342\377\2\302\315\313\377\242\261\256\377" \
+ "\377\333\343\342\377\311\333\343\342\377\3z\216\212\377p\205\201\377" \
+ "\266\303\301\377\261\333\343\342\377\2\326\336\335\377\327\340\337\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\344\333\343\342\377")
+
+
diff --git a/packages/psplash/files/angstrom/angstrom-psplash-vga-img.h b/packages/psplash/files/angstrom/angstrom-psplash-vga-img.h
new file mode 100644
index 0000000000..5eeef94919
--- /dev/null
+++ b/packages/psplash/files/angstrom/angstrom-psplash-vga-img.h
@@ -0,0 +1,2109 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define HAND_IMG_ROWSTRIDE (1428)
+#define HAND_IMG_WIDTH (357)
+#define HAND_IMG_HEIGHT (376)
+#define HAND_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\202\333" \
+ "\343\342\377\1\320\331\330\377\202\311\324\322\377\1\324\334\333\377" \
+ "\377\333\343\342\377\251\333\343\342\377\4\323\335\333\377\311\325\323" \
+ "\377\322\334\332\377\332\342\341\377\377\333\343\342\377\266\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342" \
+ "\377\244\333\343\342\377\5\326\337\336\377\273\313\310\377\257\301\276" \
+ "\377\243\270\264\377\227\257\252\377\203\223\254\247\377\5\226\256\251" \
+ "\377\242\267\263\377\256\300\275\377\272\312\307\377\323\335\333\377" \
+ "\377\333\343\342\377\262\333\343\342\377\1\202\225\221\377\202Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315\330" \
+ "\326\377\213\223\254\247\377\1\304\321\317\377\377\333\343\342\377\262" \
+ "\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333" \
+ "\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223\254\247\377" \
+ "\7\241\267\263\377\270\310\305\377\312\326\324\377\330\341\337\377\314" \
+ "\327\325\377\272\312\307\377\244\271\265\377\202\223\254\247\377\1\304" \
+ "\321\317\377\377\333\343\342\377\262\333\343\342\377\1\202\225\221\377" \
+ "\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377" \
+ "\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377" \
+ "\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377" \
+ "\333\343\342\377\236\333\343\342\377\4\316\327\326\377\275\311\307\377" \
+ "\266\302\300\377\256\274\271\377\220\254\271\267\377\1q\207\202\377\202" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315" \
+ "\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377" \
+ "\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343" \
+ "\342\377\232\333\343\342\377\4\324\335\334\377\250\266\264\377y\215\211" \
+ "\377]up\377\227Slg\377\1\243\262\257\377\377\333\343\342\377\244\333" \
+ "\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377" \
+ "\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321" \
+ "\317\377\377\333\343\342\377\230\333\343\342\377\3\332\342\341\377\246" \
+ "\265\262\377\\to\377\232Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\244\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342" \
+ "\340\377\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1" \
+ "\304\321\317\377\377\333\343\342\377\227\333\343\342\377\2\331\342\341" \
+ "\377\204\227\223\377\234Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\244\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342" \
+ "\340\377\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1" \
+ "\304\321\317\377\377\333\343\342\377\227\333\343\342\377\1\216\237\234" \
+ "\377\235Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342" \
+ "\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377" \
+ "\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377" \
+ "\377\333\343\342\377\226\333\343\342\377\2\303\316\314\377Tmh\377\235" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315" \
+ "\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377" \
+ "\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343" \
+ "\342\377\226\333\343\342\377\1\211\234\230\377\205Slg\377\7Tmh\377|\217" \
+ "\214\377\252\270\266\377\271\305\303\377\304\317\315\377\320\331\330" \
+ "\377\331\342\341\377\217\333\343\342\377\1\202\225\221\377\202Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315\330" \
+ "\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377\1" \
+ "\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342" \
+ "\377\226\333\343\342\377\1czu\377\204Slg\377\2~\222\216\377\314\325\324" \
+ "\377\225\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223\254" \
+ "\247\377\1\331\342\340\377\205\377\377\377\377\1\343\352\350\377\202" \
+ "\223\254\247\377\1\304\321\317\377\377\333\343\342\377\225\333\343\342" \
+ "\377\1\322\333\332\377\204Slg\377\2n\203\177\377\326\336\335\377\226" \
+ "\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333" \
+ "\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223\254\247\377" \
+ "\1\331\342\340\377\205\377\377\377\377\1\343\352\350\377\202\223\254" \
+ "\247\377\1\304\321\317\377\377\333\343\342\377\225\333\343\342\377\1" \
+ "\306\321\317\377\204Slg\377\1\277\313\311\377\227\333\343\342\377\1\202" \
+ "\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333" \
+ "\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377" \
+ "\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321" \
+ "\317\377\377\333\343\342\377\225\333\343\342\377\1\304\317\315\377\203" \
+ "Slg\377\2Uni\377\330\340\337\377\227\333\343\342\377\1\244\262\260\377" \
+ "\202\205\230\224\377\1\267\304\302\377\377\333\343\342\377\244\333\343" \
+ "\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205" \
+ "\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317" \
+ "\377\377\333\343\342\377\225\333\343\342\377\1\326\336\335\377\203Sl" \
+ "g\377\1k\201}\377\377\333\343\342\377\300\333\343\342\377\1\315\330\326" \
+ "\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377\1\343" \
+ "\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342\377" \
+ "\226\333\343\342\377\1byt\377\202Slg\377\1q\207\202\377\377\333\343\342" \
+ "\377\300\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331" \
+ "\342\340\377\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377" \
+ "\1\304\321\317\377\377\333\343\342\377\226\333\343\342\377\1\204\226" \
+ "\223\377\202Slg\377\1czu\377\377\333\343\342\377\300\333\343\342\377" \
+ "\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377" \
+ "\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377" \
+ "\333\343\342\377\226\333\343\342\377\2\304\317\315\377Tlg\377\202Slg" \
+ "\377\1\305\320\316\377\227\333\343\342\377\1\274\310\306\377\202\254" \
+ "\271\267\377\1\307\322\320\377\377\333\343\342\377\244\333\343\342\377" \
+ "\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377" \
+ "\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377" \
+ "\333\343\342\377\227\333\343\342\377\1\201\224\220\377\202Slg\377\1\206" \
+ "\231\225\377\227\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262" \
+ "\257\377\377\333\343\342\377\244\333\343\342\377\1\315\330\326\377\202" \
+ "\223\254\247\377\1\331\342\340\377\205\377\377\377\377\1\343\352\350" \
+ "\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342\377\227\333" \
+ "\343\342\377\2\323\334\332\377n\204\200\377\202Slg\377\1\247\266\263" \
+ "\377\226\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223\254" \
+ "\247\377\1\331\342\340\377\205\377\377\377\377\1\343\352\350\377\202" \
+ "\223\254\247\377\1\304\321\317\377\377\333\343\342\377\230\333\343\342" \
+ "\377\2\321\333\331\377l\201}\377\202Slg\377\2\220\242\236\377\323\334" \
+ "\333\377\224\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257" \
+ "\377\377\333\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223" \
+ "\254\247\377\1\331\342\340\377\205\377\377\377\377\1\343\352\350\377" \
+ "\202\223\254\247\377\1\304\321\317\377\377\333\343\342\377\231\333\343" \
+ "\342\377\10\324\334\333\377\222\243\240\377Vni\377Slg\377]up\377\217" \
+ "\240\235\377\273\307\305\377\326\336\335\377\221\333\343\342\377\1\202" \
+ "\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333" \
+ "\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377" \
+ "\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321" \
+ "\317\377\377\333\343\342\377\233\333\343\342\377\2\310\322\321\377k\201" \
+ "}\377\204Slg\377\3d{v\377p\206\202\377w\214\210\377\216}\220\215\377" \
+ "\1ayt\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343" \
+ "\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205" \
+ "\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317" \
+ "\377\377\333\343\342\377\231\333\343\342\377\3\327\340\337\377\252\270" \
+ "\266\377p\205\201\377\231Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\244\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342" \
+ "\340\377\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1" \
+ "\304\321\317\377\377\333\343\342\377\230\333\343\342\377\2\321\333\331" \
+ "\377p\206\202\377\233Slg\377\1\243\262\257\377\377\333\343\342\377\244" \
+ "\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340" \
+ "\377\205\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304" \
+ "\321\317\377\377\333\343\342\377\227\333\343\342\377\2\315\327\325\377" \
+ "j\200|\377\234Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343" \
+ "\342\377\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205" \
+ "\377\377\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317" \
+ "\377\377\333\343\342\377\227\333\343\342\377\1|\220\214\377\235Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315\330" \
+ "\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377\1" \
+ "\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342" \
+ "\377\226\333\343\342\377\1\301\314\312\377\207Slg\377\4Xql\377e|w\377" \
+ "q\206\202\377}\220\215\377\220\205\230\224\377\1d{v\377\202Slg\377\1" \
+ "\243\262\257\377\377\333\343\342\377\244\333\343\342\377\1\315\330\326" \
+ "\377\202\223\254\247\377\1\331\342\340\377\205\377\377\377\377\1\343" \
+ "\352\350\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342\377" \
+ "\226\333\343\342\377\1\200\224\220\377\204Slg\377\4Tlg\377{\217\213\377" \
+ "\263\300\276\377\331\342\341\377\223\333\343\342\377\1\202\225\221\377" \
+ "\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342\377" \
+ "\1\315\330\326\377\202\223\254\247\377\1\331\342\340\377\205\377\377" \
+ "\377\377\1\343\352\350\377\202\223\254\247\377\1\304\321\317\377\377" \
+ "\333\343\342\377\226\333\343\342\377\1czu\377\204Slg\377\1\256\274\271" \
+ "\377\226\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\244\333\343\342\377\1\315\330\326\377\202\223\254" \
+ "\247\377\1\331\342\340\377\205\377\377\377\377\1\343\352\350\377\202" \
+ "\223\254\247\377\1\304\321\317\377\377\333\343\342\377\225\333\343\342" \
+ "\377\2\327\340\337\377Tlg\377\203Slg\377\1\223\244\240\377\227\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342" \
+ "\377\244\333\343\342\377\1\315\330\327\377\202\223\254\247\377\1\326" \
+ "\337\335\377\205\377\377\377\377\1\340\347\346\377\202\223\254\247\377" \
+ "\1\304\321\317\377\377\333\343\342\377\225\333\343\342\377\1\306\321" \
+ "\317\377\204Slg\377\1\314\325\324\377\227\333\343\342\377\1\202\225\221" \
+ "\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\244\333\343\342" \
+ "\377\4\327\340\337\377\224\255\250\377\223\254\247\377\274\313\310\377" \
+ "\205\377\377\377\377\1\307\324\321\377\202\223\254\247\377\1\322\334" \
+ "\332\377\377\333\343\342\377\225\333\343\342\377\1\310\323\321\377\203" \
+ "Slg\377\1\\to\377\230\333\343\342\377\1\305\317\316\377\202\270\305\303" \
+ "\377\1\315\326\325\377\377\333\343\342\377\245\333\343\342\377\3\244" \
+ "\271\265\377\223\254\247\377\237\265\261\377\205\377\377\377\377\3\252" \
+ "\275\271\377\223\254\247\377\235\263\257\377\377\333\343\342\377\226" \
+ "\333\343\342\377\2\331\341\340\377Vni\377\202Slg\377\1r\207\203\377\377" \
+ "\333\343\342\377\301\333\343\342\377\1\256\300\275\377\202\223\254\247" \
+ "\377\1\356\361\361\377\203\377\377\377\377\5\370\372\371\377\224\254" \
+ "\250\377\223\254\247\377\250\274\270\377\332\342\341\377\377\333\343" \
+ "\342\377\226\333\343\342\377\1k\201|\377\202Slg\377\1m\202~\377\377\333" \
+ "\343\342\377\275\333\343\342\377\5\332\342\341\377\301\317\315\377\237" \
+ "\265\261\377}\233\225\377v\226\220\377\202\223\254\247\377\1\320\333" \
+ "\331\377\203\377\377\377\377\1\335\344\343\377\202\223\254\247\377\202" \
+ "z\231\223\377\3\233\263\256\377\275\314\311\377\330\341\340\377\377\333" \
+ "\343\342\377\223\333\343\342\377\1\242\261\256\377\202Slg\377\2[sn\377" \
+ "\330\340\337\377\377\333\343\342\377\272\333\343\342\377\3\327\340\337" \
+ "\377\251\275\271\377x\230\221\377\204o\221\212\377\3\220\252\245\377" \
+ "\223\254\247\377\263\305\301\377\203\377\377\377\377\4\300\316\313\377" \
+ "\223\254\247\377\222\253\246\377p\222\213\377\203o\221\212\377\3t\225" \
+ "\216\377\241\267\263\377\324\336\334\377\377\333\343\342\377\221\333" \
+ "\343\342\377\2\327\340\337\377ayt\377\202Slg\377\1\263\300\275\377\227" \
+ "\333\343\342\377\1\233\253\250\377\202x\215\211\377\1\262\277\275\377" \
+ "\377\333\343\342\377\235\333\343\342\377\3\332\342\341\377\261\303\300" \
+ "\377z\232\223\377\206o\221\212\377\4\207\243\235\377\223\254\247\377" \
+ "\230\257\253\377\374\375\375\377\202\377\377\377\377\3\243\270\264\377" \
+ "\223\254\247\377\212\245\240\377\206o\221\212\377\3w\227\220\377\253" \
+ "\277\273\377\330\341\337\377\377\333\343\342\377\220\333\343\342\377" \
+ "\5\265\301\277\377Uni\377Slg\377h\177z\377\327\337\336\377\226\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342" \
+ "\377\234\333\343\342\377\2\307\323\321\377\201\236\230\377\206o\221\212" \
+ "\377\3\205\241\233\377\246\273\267\377\260\302\277\377\202\223\254\247" \
+ "\377\1\244\271\265\377\202\246\273\267\377\202\223\254\247\377\3\254" \
+ "\277\273\377\252\276\272\377\210\244\236\377\206o\221\212\377\2|\233" \
+ "\225\377\300\317\314\377\377\333\343\342\377\220\333\343\342\377\5\255" \
+ "\273\271\377Tlg\377Slg\377y\215\211\377\324\335\334\377\225\333\343\342" \
+ "\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\233\333\343\342\377\2\267\310\305\377s\224\215\377\204o\221\212\377" \
+ "\3y\230\222\377\253\276\273\377\317\331\330\377\202\333\343\342\377\1" \
+ "\321\333\331\377\207\223\254\247\377\1\312\326\324\377\202\333\343\342" \
+ "\377\3\321\333\332\377\257\302\276\377|\233\225\377\204o\221\212\377" \
+ "\2q\222\213\377\260\302\277\377\377\333\343\342\377\220\333\343\342\377" \
+ "\6\261\277\274\377axt\377Slg\377d{v\377\253\271\267\377\331\341\340\377" \
+ "\223\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377" \
+ "\333\343\342\377\231\333\343\342\377\2\332\342\341\377\245\272\266\377" \
+ "\204o\221\212\377\3t\224\216\377\245\272\266\377\326\337\336\377\205" \
+ "\333\343\342\377\1\253\276\273\377\205\247\273\267\377\2\250\274\270" \
+ "\377\331\342\341\377\204\333\343\342\377\3\330\341\337\377\253\277\273" \
+ "\377w\227\220\377\204o\221\212\377\2\234\263\257\377\331\341\340\377" \
+ "\377\333\343\342\377\213\333\343\342\377\1\330\340\337\377\203\322\333" \
+ "\332\377\2\313\325\324\377\205\230\224\377\202Slg\377\6]up\377\207\232" \
+ "\226\377\244\262\260\377\271\306\304\377\306\320\317\377\315\326\325" \
+ "\377\216\322\333\332\377\1\177\223\217\377\202Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\231\333\343\342\377\1\231\261\254\377\204o\221\212" \
+ "\377\2\213\246\241\377\321\333\332\377\225\333\343\342\377\2\325\336" \
+ "\335\377\225\255\251\377\204o\221\212\377\2\216\251\243\377\331\342\340" \
+ "\377\377\333\343\342\377\212\333\343\342\377\1\250\267\264\377\236Sl" \
+ "g\377\1\243\262\257\377\377\333\343\342\377\230\333\343\342\377\1\253" \
+ "\276\273\377\204o\221\212\377\2\234\263\256\377\331\341\340\377\230\333" \
+ "\343\342\377\1\246\273\267\377\204o\221\212\377\1\236\264\260\377\377" \
+ "\333\343\342\377\212\333\343\342\377\1\250\267\264\377\236Slg\377\1\243" \
+ "\262\257\377\377\333\343\342\377\227\333\343\342\377\2\275\314\311\377" \
+ "p\221\213\377\202o\221\212\377\2p\222\213\377\256\301\275\377\233\333" \
+ "\343\342\377\2\270\310\305\377r\223\215\377\203o\221\212\377\1\261\303" \
+ "\300\377\377\333\343\342\377\211\333\343\342\377\1\250\267\264\377\236" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\226\333\343\342\377\2\312" \
+ "\326\324\377u\226\217\377\203o\221\212\377\1\256\300\275\377\235\333" \
+ "\343\342\377\1\266\307\303\377\203o\221\212\377\2q\222\214\377\302\320" \
+ "\315\377\377\333\343\342\377\210\333\343\342\377\1\250\267\264\377\236" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\226\333\343\342\377\1\210" \
+ "\244\236\377\203o\221\212\377\1\232\262\255\377\237\333\343\342\377\1" \
+ "\243\271\265\377\203o\221\212\377\2\177\235\227\377\331\341\340\377\377" \
+ "\333\343\342\377\207\333\343\342\377\1\250\267\264\377\236Slg\377\1\243" \
+ "\262\257\377\377\333\343\342\377\225\333\343\342\377\1\272\312\307\377" \
+ "\203o\221\212\377\2\211\244\237\377\330\341\340\377\237\333\343\342\377" \
+ "\2\332\342\341\377\221\253\245\377\203o\221\212\377\1\256\301\276\377" \
+ "\377\333\343\342\377\207\333\343\342\377\1\250\267\264\377\202Slg\377" \
+ "\1u\211\205\377\230\270\305\303\377\1v\213\207\377\202Slg\377\1\243\262" \
+ "\257\377\377\333\343\342\377\224\333\343\342\377\2\332\342\341\377\201" \
+ "\236\230\377\202o\221\212\377\2p\222\213\377\312\326\324\377\241\333" \
+ "\343\342\377\2\321\333\332\377t\225\216\377\202o\221\212\377\2x\230\221" \
+ "\377\325\337\335\377\377\333\343\342\377\206\333\343\342\377\1\250\267" \
+ "\264\377\202Slg\377\1\200\224\220\377\230\333\343\342\377\1\202\225\221" \
+ "\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\224\333\343\342" \
+ "\377\1\262\304\300\377\203o\221\212\377\1\232\261\255\377\243\333\343" \
+ "\342\377\1\246\272\266\377\203o\221\212\377\1\244\271\265\377\377\333" \
+ "\343\342\377\206\333\343\342\377\1\250\267\264\377\202Slg\377\1\200\224" \
+ "\220\377\230\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257" \
+ "\377\377\333\343\342\377\224\333\343\342\377\1\202\237\231\377\202o\221" \
+ "\212\377\2r\223\215\377\317\332\331\377\243\333\343\342\377\2\326\337" \
+ "\336\377y\230\222\377\202o\221\212\377\2x\230\221\377\332\342\341\377" \
+ "\377\333\343\342\377\205\333\343\342\377\1\250\267\264\377\202Slg\377" \
+ "\1\200\224\220\377\230\333\343\342\377\1\202\225\221\377\202Slg\377\1" \
+ "\243\262\257\377\377\333\343\342\377\223\333\343\342\377\1\315\330\326" \
+ "\377\203o\221\212\377\1\236\264\260\377\245\333\343\342\377\1\253\276" \
+ "\273\377\203o\221\212\377\1\302\320\315\377\377\333\343\342\377\205\333" \
+ "\343\342\377\1\250\267\264\377\202Slg\377\1\200\224\220\377\230\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342" \
+ "\377\223\333\343\342\377\1\253\277\273\377\203o\221\212\377\1\302\320" \
+ "\315\377\245\333\343\342\377\1\317\331\330\377\203o\221\212\377\1\237" \
+ "\265\261\377\377\333\343\342\377\205\333\343\342\377\1\311\324\322\377" \
+ "\202\254\271\267\377\1\274\307\306\377\230\333\343\342\377\1\325\336" \
+ "\335\377\202\322\333\332\377\1\327\340\337\377\377\333\343\342\377\223" \
+ "\333\343\342\377\1\212\246\240\377\202o\221\212\377\2w\227\221\377\332" \
+ "\342\341\377\246\333\343\342\377\1\205\241\233\377\202o\221\212\377\1" \
+ "}\234\226\377\377\333\343\342\377\377\333\343\342\377\267\333\343\342" \
+ "\377\2\325\336\335\377p\222\213\377\202o\221\212\377\1\230\260\253\377" \
+ "\247\333\343\342\377\1\246\273\267\377\203o\221\212\377\1\313\327\325" \
+ "\377\377\333\343\342\377\377\333\343\342\377\266\333\343\342\377\1\310" \
+ "\324\322\377\203o\221\212\377\1\264\305\302\377\247\333\343\342\377\1" \
+ "\275\314\311\377\203o\221\212\377\1\275\314\312\377\377\333\343\342\377" \
+ "\377\333\343\342\377\266\333\343\342\377\1\275\314\312\377\203o\221\212" \
+ "\377\1\277\316\313\377\247\333\343\342\377\1\310\325\323\377\203o\221" \
+ "\212\377\1\262\304\300\377\377\333\343\342\377\377\333\343\342\377\266" \
+ "\333\343\342\377\1\263\305\301\377\203o\221\212\377\1\312\326\324\377" \
+ "\247\333\343\342\377\1\323\335\334\377\203o\221\212\377\1\247\273\267" \
+ "\377\377\333\343\342\377\217\333\343\342\377\4\330\340\337\377\300\313" \
+ "\311\377\262\277\275\377\247\266\263\377\202\234\254\251\377\4\247\265" \
+ "\263\377\262\277\275\377\277\313\311\377\330\340\337\377\377\333\343" \
+ "\342\377\235\333\343\342\377\1\251\275\271\377\203o\221\212\377\1\325" \
+ "\336\335\377\250\333\343\342\377\1r\223\215\377\202o\221\212\377\1\233" \
+ "\263\256\377\377\333\343\342\377\214\333\343\342\377\4\316\330\326\377" \
+ "\231\251\246\377v\213\207\377Xpk\377\210Slg\377\4Xpk\377v\212\206\377" \
+ "\230\251\246\377\316\327\326\377\377\333\343\342\377\232\333\343\342" \
+ "\377\1\242\267\263\377\203o\221\212\377\1\332\342\341\377\250\333\343" \
+ "\342\377\1y\231\222\377\202o\221\212\377\1\225\256\251\377\377\333\343" \
+ "\342\377\212\333\343\342\377\3\310\323\321\377\210\233\227\377Voj\377" \
+ "\216Slg\377\3Voj\377\210\232\227\377\307\322\320\377\377\333\343\342" \
+ "\377\230\333\343\342\377\1\253\276\273\377\203o\221\212\377\1\322\334" \
+ "\333\377\247\333\343\342\377\2\332\342\341\377p\222\213\377\202o\221" \
+ "\212\377\1\236\265\260\377\377\333\343\342\377\211\333\343\342\377\2" \
+ "\251\270\265\377Xql\377\222Slg\377\2Xpk\377\246\265\262\377\377\333\343" \
+ "\342\377\227\333\343\342\377\1\266\307\303\377\203o\221\212\377\1\307" \
+ "\324\322\377\247\333\343\342\377\1\320\333\331\377\203o\221\212\377\1" \
+ "\251\275\271\377\377\333\343\342\377\207\333\343\342\377\2\331\342\341" \
+ "\377\210\233\227\377\226Slg\377\2\204\227\223\377\330\341\340\377\377" \
+ "\333\343\342\377\225\333\343\342\377\1\300\317\314\377\203o\221\212\377" \
+ "\1\274\314\311\377\247\333\343\342\377\1\305\322\320\377\203o\221\212" \
+ "\377\1\265\306\303\377\377\333\343\342\377\207\333\343\342\377\1\213" \
+ "\235\231\377\230Slg\377\1\206\231\225\377\377\333\343\342\377\225\333" \
+ "\343\342\377\1\313\327\325\377\203o\221\212\377\1\256\301\276\377\247" \
+ "\333\343\342\377\1\271\311\307\377\203o\221\212\377\1\300\317\314\377" \
+ "\366\333\343\342\377\5\322\333\332\377\240\260\255\377\220\241\236\377" \
+ "\246\265\262\377\330\340\337\377\212\333\343\342\377\1\231\251\246\377" \
+ "\211Slg\377\3[sn\377g}y\377l\202~\377\202q\207\202\377\3l\202~\377g}" \
+ "y\377[sn\377\211Slg\377\1\227\247\244\377\377\333\343\342\377\224\333" \
+ "\343\342\377\2\330\341\337\377t\225\216\377\202o\221\212\377\1\220\252" \
+ "\245\377\247\333\343\342\377\1\235\264\257\377\203o\221\212\377\1\320" \
+ "\333\331\377\365\333\343\342\377\2\310\323\321\377ayt\377\203Slg\377" \
+ "\2m\203\177\377\326\336\335\377\210\333\343\342\377\2\306\321\317\377" \
+ "Umh\377\205Slg\377\4o\204\200\377\230\250\245\377\272\306\304\377\317" \
+ "\330\327\377\210\333\343\342\377\4\317\330\327\377\272\306\304\377\227" \
+ "\250\245\377o\204\200\377\205Slg\377\2Tmh\377\305\317\316\377\377\333" \
+ "\343\342\377\224\333\343\342\377\1\223\254\247\377\202o\221\212\377\2" \
+ "s\224\215\377\327\340\337\377\246\333\343\342\377\1|\232\224\377\202" \
+ "o\221\212\377\1\206\242\234\377\366\333\343\342\377\1y\215\211\377\205" \
+ "Slg\377\1\233\253\250\377\210\333\343\342\377\1~\222\216\377\204Slg\377" \
+ "\2{\217\213\377\301\314\312\377\220\333\343\342\377\2\303\316\314\377" \
+ "~\222\216\377\204Slg\377\1}\220\215\377\377\333\343\342\377\224\333\343" \
+ "\342\377\1\264\305\302\377\203o\221\212\377\1\273\312\310\377\245\333" \
+ "\343\342\377\1\306\323\321\377\203o\221\212\377\1\250\274\270\377\365" \
+ "\333\343\342\377\2\331\341\340\377Voj\377\205Slg\377\1\177\222\217\377" \
+ "\207\333\343\342\377\1\305\317\316\377\203Slg\377\2Voj\377\247\266\263" \
+ "\377\224\333\343\342\377\2\253\271\267\377Woj\377\203Slg\377\1\303\316" \
+ "\314\377\377\333\343\342\377\223\333\343\342\377\2\323\335\334\377p\222" \
+ "\213\377\202o\221\212\377\1\225\255\251\377\245\333\343\342\377\1\237" \
+ "\265\261\377\203o\221\212\377\1\312\326\324\377\366\333\343\342\377\1" \
+ "axt\377\205Slg\377\1\210\233\227\377\207\333\343\342\377\1\235\254\252" \
+ "\377\203Slg\377\1\260\276\273\377\226\333\343\342\377\1\263\300\276\377" \
+ "\203Slg\377\1\231\251\246\377\377\333\343\342\377\224\333\343\342\377" \
+ "\1\213\246\241\377\203o\221\212\377\1\307\323\321\377\243\333\343\342" \
+ "\377\2\316\331\327\377r\223\214\377\202o\221\212\377\1\200\236\230\377" \
+ "\367\333\343\342\377\1\232\252\247\377\205Slg\377\1\271\306\304\377\207" \
+ "\333\343\342\377\1v\213\207\377\202Slg\377\1\204\227\223\377\230\333" \
+ "\343\342\377\1\212\234\231\377\202Slg\377\1q\206\202\377\377\333\343" \
+ "\342\377\224\333\343\342\377\1\300\316\314\377\203o\221\212\377\1\215" \
+ "\247\242\377\207\333\343\342\377\4\327\337\336\377\236\264\260\377\270" \
+ "\310\305\377\324\336\334\377\215\333\343\342\377\4\326\337\336\377\273" \
+ "\312\310\377\236\264\260\377\322\334\332\377\207\333\343\342\377\1\227" \
+ "\257\252\377\203o\221\212\377\1\263\305\301\377\367\333\343\342\377\6" \
+ "\331\341\340\377\225\245\242\377Voj\377Slg\377^uq\377\251\267\265\377" \
+ "\210\333\343\342\377\1Xql\377\202Slg\377\1\301\314\312\377\230\333\343" \
+ "\342\377\1\305\317\316\377\202Slg\377\2Tmh\377\331\341\340\377\377\333" \
+ "\343\342\377\224\333\343\342\377\1\215\250\243\377\203o\221\212\377\1" \
+ "\276\315\312\377\206\333\343\342\377\1\274\313\311\377\202\223\254\247" \
+ "\377\3\224\255\250\377\254\277\274\377\313\326\325\377\211\333\343\342" \
+ "\377\3\316\331\327\377\257\302\276\377\226\256\251\377\202\223\254\247" \
+ "\377\1\265\306\303\377\206\333\343\342\377\1\307\324\322\377\203o\221" \
+ "\212\377\2\202\237\231\377\332\342\341\377\371\333\343\342\377\2\330" \
+ "\340\337\377\315\326\325\377\211\333\343\342\377\1\325\335\334\377\202" \
+ "Slg\377\1e|w\377\232\333\343\342\377\1g~y\377\202Slg\377\1\316\330\326" \
+ "\377\377\333\343\342\377\224\333\343\342\377\1\306\323\321\377\203o\221" \
+ "\212\377\2z\232\223\377\321\333\332\377\205\333\343\342\377\1\236\264" \
+ "\260\377\205\223\254\247\377\3\241\267\262\377\277\316\313\377\330\341" \
+ "\340\377\203\333\343\342\377\3\331\341\340\377\302\320\315\377\244\271" \
+ "\265\377\205\223\254\247\377\2\231\260\254\377\331\341\340\377\204\333" \
+ "\343\342\377\2\325\336\335\377\200\236\230\377\203o\221\212\377\1\274" \
+ "\313\311\377\377\333\343\342\377\206\333\343\342\377\1\311\323\322\377" \
+ "\202Slg\377\1w\213\207\377\232\333\343\342\377\1y\215\211\377\202Slg" \
+ "\377\1\303\316\314\377\377\333\343\342\377\225\333\343\342\377\1\226" \
+ "\256\252\377\203o\221\212\377\2\207\243\236\377\330\341\337\377\203\333" \
+ "\343\342\377\1\310\324\322\377\202\223\254\247\377\2\271\311\306\377" \
+ "\262\304\300\377\204\223\254\247\377\5\230\260\253\377\275\314\312\377" \
+ "\333\343\342\377\304\321\317\377\232\261\254\377\204\223\254\247\377" \
+ "\2\255\300\274\377\276\315\312\377\202\223\254\247\377\1\301\317\314" \
+ "\377\203\333\343\342\377\2\332\342\341\377\216\250\243\377\203o\221\212" \
+ "\377\1\213\246\241\377\377\333\343\342\377\207\333\343\342\377\1\301" \
+ "\314\312\377\202Slg\377\1\200\224\220\377\232\333\343\342\377\1\203\226" \
+ "\222\377\202Slg\377\1\273\307\305\377\377\333\343\342\377\225\333\343" \
+ "\342\377\2\325\337\335\377\201\237\231\377\203o\221\212\377\1\230\260" \
+ "\253\377\203\333\343\342\377\10\251\275\271\377\223\254\247\377\225\255" \
+ "\251\377\365\367\367\377\377\377\377\377\360\363\362\377\302\320\315" \
+ "\377\231\261\254\377\202\223\254\247\377\3\236\264\260\377\333\343\342" \
+ "\377\247\273\267\377\202\223\254\247\377\10\227\257\252\377\275\314\311" \
+ "\377\353\360\357\377\377\377\377\377\373\374\373\377\232\261\254\377" \
+ "\223\254\247\377\242\270\263\377\203\333\343\342\377\1\240\266\262\377" \
+ "\203o\221\212\377\2z\231\222\377\317\332\331\377\377\333\343\342\377" \
+ "\207\333\343\342\377\1\313\325\324\377\202Slg\377\1t\211\205\377\232" \
+ "\333\343\342\377\1v\213\207\377\202Slg\377\1\305\317\316\377\377\333" \
+ "\343\342\377\226\333\343\342\377\2\315\330\326\377w\227\220\377\203o" \
+ "\221\212\377\3\223\254\250\377\327\340\336\377\322\334\333\377\202\223" \
+ "\254\247\377\1\271\311\306\377\204\377\377\377\377\2\372\373\373\377" \
+ "\271\311\306\377\202\223\254\247\377\5\323\335\333\377\226\256\251\377" \
+ "\223\254\247\377\257\301\276\377\367\371\371\377\204\377\377\377\377" \
+ "\1\303\321\316\377\202\223\254\247\377\3\314\330\326\377\331\342\340" \
+ "\377\235\264\257\377\203o\221\212\377\2r\223\214\377\304\321\317\377" \
+ "\374\333\343\342\377\3\303\316\314\377\263\300\276\377\313\325\324\377" \
+ "\210\333\343\342\377\1\327\337\336\377\202Slg\377\2`ws\377\332\342\341" \
+ "\377\231\333\343\342\377\1ayt\377\202Slg\377\1\321\332\331\377\377\333" \
+ "\343\342\377\227\333\343\342\377\2\277\316\313\377p\222\213\377\203o" \
+ "\221\212\377\2\205\241\233\377\257\301\276\377\202\223\254\247\377\1" \
+ "\346\354\353\377\205\377\377\377\377\1\315\330\326\377\202\223\253\246" \
+ "\377\4\225\255\250\377\222\253\246\377\223\254\247\377\300\316\313\377" \
+ "\205\377\377\377\377\1\360\363\362\377\202\223\254\247\377\2\253\277" \
+ "\273\377\215\250\242\377\204o\221\212\377\1\264\305\302\377\373\333\343" \
+ "\342\377\2\325\336\335\377}\221\215\377\202Slg\377\2Tlg\377\220\242\236" \
+ "\377\210\333\343\342\377\1\\to\377\202Slg\377\1\267\304\302\377\230\333" \
+ "\343\342\377\1\274\307\306\377\202Slg\377\2Wpk\377\332\342\341\377\377" \
+ "\333\343\342\377\230\333\343\342\377\2\261\303\300\377p\222\213\377\203" \
+ "o\221\212\377\3\220\252\245\377\223\254\247\377\247\273\267\377\204\377" \
+ "\377\377\377\3\372\373\373\377\300\317\314\377\222\253\246\377\206\223" \
+ "\254\247\377\2\271\311\306\377\367\371\371\377\204\377\377\377\377\4" \
+ "\261\303\300\377\223\254\247\377\222\253\246\377q\222\214\377\203o\221" \
+ "\212\377\1\247\274\270\377\374\333\343\342\377\1\213\235\232\377\205" \
+ "Slg\377\1\254\271\267\377\207\333\343\342\377\1~\221\216\377\202Slg\377" \
+ "\2v\212\206\377\332\342\341\377\227\333\343\342\377\1y\216\212\377\202" \
+ "Slg\377\1z\216\212\377\377\333\343\342\377\232\333\343\342\377\4\276" \
+ "\315\312\377v\226\220\377o\221\212\377{\232\224\377\202\223\254\247\377" \
+ "\1\325\337\335\377\203\377\377\377\377\15\376\376\376\377\255\300\274" \
+ "\377\223\254\247\377\230\260\253\377\315\331\326\377\353\360\357\377" \
+ "\374\375\375\377\356\362\361\377\323\335\333\377\234\263\256\377\223" \
+ "\254\247\377\245\272\265\377\374\374\374\377\203\377\377\377\377\1\337" \
+ "\346\345\377\202\223\254\247\377\4\177\235\227\377o\221\212\377s\224" \
+ "\215\377\267\307\305\377\374\333\343\342\377\2\332\342\341\377\\so\377" \
+ "\205Slg\377\1\204\227\223\377\207\333\343\342\377\1\244\263\260\377\203" \
+ "Slg\377\1\234\253\251\377\226\333\343\342\377\1\233\253\250\377\203S" \
+ "lg\377\1\242\261\256\377\377\333\343\342\377\233\333\343\342\377\6\313" \
+ "\327\325\377\200\236\230\377\213\246\240\377\223\254\247\377\232\261" \
+ "\255\377\373\374\373\377\203\377\377\377\377\4\320\333\330\377\223\254" \
+ "\247\377\244\271\264\377\361\364\364\377\205\377\377\377\377\4\366\370" \
+ "\370\377\254\277\273\377\223\254\247\377\304\321\317\377\203\377\377" \
+ "\377\377\6\376\376\376\377\241\267\262\377\223\254\247\377\216\250\243" \
+ "\377{\232\224\377\306\323\321\377\375\333\343\342\377\2\331\342\341\377" \
+ "Yrm\377\205Slg\377\1\201\225\221\377\207\333\343\342\377\2\314\326\324" \
+ "\377Uni\377\203Slg\377\2\221\242\237\377\331\341\340\377\222\333\343" \
+ "\342\377\2\331\341\340\377\220\242\236\377\203Slg\377\2Uni\377\314\325" \
+ "\324\377\377\333\343\342\377\234\333\343\342\377\1\307\324\322\377\202" \
+ "\223\254\247\377\1\303\321\316\377\203\377\377\377\377\4\367\371\371" \
+ "\377\227\257\252\377\225\255\250\377\351\356\355\377\207\377\377\377" \
+ "\377\4\361\365\364\377\230\260\253\377\224\255\250\377\357\363\362\377" \
+ "\203\377\377\377\377\1\315\331\326\377\202\223\254\247\377\1\276\315" \
+ "\313\377\377\333\343\342\377\1\204\226\223\377\205Slg\377\1\245\264\261" \
+ "\377\210\333\343\342\377\1\214\236\233\377\204Slg\377\3g}y\377\251\267" \
+ "\265\377\327\337\336\377\216\333\343\342\377\3\325\336\335\377\246\265" \
+ "\262\377e|w\377\204Slg\377\1\215\236\233\377\377\333\343\342\377\235" \
+ "\333\343\342\377\1\256\300\275\377\202\223\254\247\377\1\360\363\363" \
+ "\377\203\377\377\377\377\3\341\350\346\377\223\254\247\377\266\307\304" \
+ "\377\211\377\377\377\377\3\300\317\314\377\223\254\247\377\326\340\336" \
+ "\377\203\377\377\377\377\4\367\371\370\377\226\256\252\377\223\254\247" \
+ "\377\247\273\267\377\377\333\343\342\377\2\320\332\330\377q\207\202\377" \
+ "\203Slg\377\2\204\226\223\377\332\342\341\377\210\333\343\342\377\2\317" \
+ "\331\327\377Yrm\377\205Slg\377\7Yql\377~\222\216\377\240\260\255\377" \
+ "\265\302\300\377\312\324\323\377\326\336\335\377\332\342\341\377\202" \
+ "\333\343\342\377\7\332\342\341\377\326\336\335\377\312\324\323\377\265" \
+ "\302\300\377\240\260\255\377}\220\215\377Wpk\377\205Slg\377\2Yrm\377" \
+ "\317\331\327\377\377\333\343\342\377\234\333\343\342\377\4\325\336\335" \
+ "\377\225\255\250\377\223\254\247\377\262\304\300\377\204\377\377\377" \
+ "\377\3\312\326\324\377\223\254\247\377\315\331\327\377\211\377\377\377" \
+ "\377\3\330\341\337\377\223\254\247\377\300\317\314\377\204\377\377\377" \
+ "\377\1\274\313\310\377\202\223\254\247\377\1\320\333\331\377\377\333" \
+ "\343\342\377\4\331\342\341\377\272\306\304\377\251\270\265\377\300\313" \
+ "\311\377\213\333\343\342\377\1\255\273\271\377\214Slg\377\202Xpk\377" \
+ "\214Slg\377\1\256\273\271\377\377\333\343\342\377\235\333\343\342\377" \
+ "\1\271\311\306\377\202\223\254\247\377\1\340\347\345\377\204\377\377" \
+ "\377\377\3\302\320\316\377\223\254\247\377\325\337\335\377\211\377\377" \
+ "\377\377\3\340\347\345\377\223\254\247\377\270\311\305\377\204\377\377" \
+ "\377\377\1\352\357\356\377\202\223\254\247\377\1\263\304\301\377\377" \
+ "\333\343\342\377\220\333\343\342\377\1\237\256\253\377\230Slg\377\1\236" \
+ "\255\253\377\377\333\343\342\377\235\333\343\342\377\5\332\342\341\377" \
+ "\234\263\256\377\223\254\247\377\241\267\263\377\376\376\376\377\204" \
+ "\377\377\377\377\3\330\341\337\377\223\254\247\377\277\316\313\377\211" \
+ "\377\377\377\377\3\311\326\323\377\223\254\247\377\316\331\327\377\205" \
+ "\377\377\377\377\4\253\276\272\377\223\254\247\377\227\257\252\377\330" \
+ "\340\337\377\377\333\343\342\377\220\333\343\342\377\2\236\256\253\377" \
+ "Uni\377\224Slg\377\2Uni\377\236\255\253\377\377\333\343\342\377\236\333" \
+ "\343\342\377\1\305\322\320\377\202\223\254\247\377\1\316\331\327\377" \
+ "\205\377\377\377\377\4\356\362\362\377\223\254\247\377\237\265\261\377" \
+ "\371\373\373\377\207\377\377\377\377\4\375\376\376\377\246\273\267\377" \
+ "\223\254\247\377\344\352\351\377\205\377\377\377\377\1\330\341\337\377" \
+ "\202\223\254\247\377\1\276\315\312\377\377\333\343\342\377\221\333\343" \
+ "\342\377\2\276\312\310\377e{w\377\222Slg\377\2dzv\377\275\311\307\377" \
+ "\377\333\343\342\377\237\333\343\342\377\4\247\273\267\377\223\254\247" \
+ "\377\226\256\252\377\367\371\371\377\206\377\377\377\377\3\264\306\302" \
+ "\377\223\254\247\377\274\314\310\377\207\377\377\377\377\4\310\325\322" \
+ "\377\223\254\247\377\251\275\271\377\376\376\376\377\205\377\377\377" \
+ "\377\4\374\375\374\377\234\263\256\377\223\254\247\377\240\266\262\377" \
+ "\377\333\343\342\377\222\333\343\342\377\3\326\336\335\377\242\261\256" \
+ "\377e|w\377\216Slg\377\3d{v\377\241\261\256\377\325\336\335\377\377\333" \
+ "\343\342\377\237\333\343\342\377\1\320\333\331\377\202\223\254\247\377" \
+ "\1\274\314\311\377\207\377\377\377\377\5\365\367\367\377\233\262\255" \
+ "\377\223\254\247\377\262\304\301\377\364\367\366\377\203\377\377\377" \
+ "\377\5\370\372\371\377\273\313\310\377\223\254\247\377\226\257\252\377" \
+ "\356\362\361\377\207\377\377\377\377\1\307\324\321\377\202\223\254\247" \
+ "\377\1\312\326\324\377\377\333\343\342\377\223\333\343\342\377\5\331" \
+ "\341\340\377\263\300\275\377\220\241\236\377o\204\200\377Umh\377\206" \
+ "Slg\377\5Umh\377n\204\200\377\217\241\235\377\262\277\275\377\331\341" \
+ "\340\377\377\333\343\342\377\241\333\343\342\377\1\262\304\301\377\202" \
+ "\223\254\247\377\1\352\357\356\377\210\377\377\377\377\13\345\353\352" \
+ "\377\240\266\261\377\223\254\247\377\225\255\250\377\247\274\270\377" \
+ "\271\311\306\377\252\276\272\377\226\257\252\377\223\254\247\377\234" \
+ "\263\256\377\336\346\344\377\210\377\377\377\377\4\363\365\365\377\224" \
+ "\254\250\377\223\254\247\377\254\277\273\377\377\333\343\342\377\227" \
+ "\333\343\342\377\3\327\340\337\377\315\326\325\377\303\316\314\377\202" \
+ "\271\306\304\377\3\303\316\314\377\315\326\325\377\327\340\337\377\377" \
+ "\333\343\342\377\244\333\343\342\377\4\330\340\337\377\227\257\252\377" \
+ "\223\254\247\377\253\276\273\377\212\377\377\377\377\3\371\372\372\377" \
+ "\232\262\255\377\223\253\246\377\203\223\254\247\377\3\222\253\246\377" \
+ "\226\256\252\377\364\366\365\377\212\377\377\377\377\4\265\306\303\377" \
+ "\223\254\247\377\224\255\250\377\324\335\334\377\377\333\343\342\377" \
+ "\377\333\343\342\377\302\333\343\342\377\1\276\315\312\377\202\223\254" \
+ "\247\377\1\331\342\340\377\212\377\377\377\377\1\346\353\352\377\202" \
+ "\223\254\247\377\6\260\302\276\377\305\322\320\377\266\307\304\377\223" \
+ "\253\247\377\223\254\247\377\333\343\342\377\212\377\377\377\377\1\343" \
+ "\351\350\377\202\223\254\247\377\1\267\310\305\377\377\333\343\342\377" \
+ "\377\333\343\342\377\302\333\343\342\377\4\237\265\261\377\223\254\247" \
+ "\377\234\263\256\377\374\375\374\377\212\377\377\377\377\1\270\310\305" \
+ "\377\202\223\254\247\377\6\322\334\333\377\333\343\342\377\327\340\337" \
+ "\377\227\257\252\377\223\254\247\377\256\300\275\377\213\377\377\377" \
+ "\377\4\244\271\265\377\223\254\247\377\232\261\255\377\331\342\341\377" \
+ "\377\333\343\342\377\211\333\343\342\377\1\235\255\252\377\207czu\377" \
+ "\1\274\310\306\377\377\333\343\342\377\256\333\343\342\377\1\312\326" \
+ "\324\377\202\223\254\247\377\1\307\324\321\377\212\377\377\377\377\4" \
+ "\364\367\366\377\225\255\250\377\223\254\247\377\251\275\271\377\203" \
+ "\333\343\342\377\1\262\303\300\377\202\223\254\247\377\1\354\361\360" \
+ "\377\212\377\377\377\377\1\321\334\332\377\202\223\254\247\377\1\303" \
+ "\320\316\377\377\333\343\342\377\211\333\343\342\377\1|\217\214\377\207" \
+ "Slg\377\1\270\304\302\377\377\333\343\342\377\256\333\343\342\377\4\253" \
+ "\276\273\377\223\254\247\377\224\255\250\377\363\366\365\377\212\377" \
+ "\377\377\377\1\312\326\323\377\202\223\254\247\377\1\307\324\322\377" \
+ "\203\333\343\342\377\1\320\332\331\377\202\223\254\247\377\1\277\316" \
+ "\313\377\212\377\377\377\377\4\371\372\372\377\230\260\253\377\223\254" \
+ "\247\377\244\271\265\377\377\333\343\342\377\211\333\343\342\377\1ax" \
+ "t\377\207Slg\377\1\270\304\302\377\377\333\343\342\377\255\333\343\342" \
+ "\377\4\324\335\334\377\224\255\250\377\223\254\247\377\266\307\303\377" \
+ "\212\377\377\377\377\5\375\375\375\377\236\264\260\377\223\254\247\377" \
+ "\236\264\260\377\332\342\341\377\204\333\343\342\377\4\246\273\267\377" \
+ "\223\254\247\377\230\257\253\377\371\372\372\377\212\377\377\377\377" \
+ "\1\300\316\313\377\202\223\254\247\377\1\316\331\330\377\377\333\343" \
+ "\342\377\207\333\343\342\377\1\325\335\334\377\205Slg\377\4Yql\377\216" \
+ "\237\234\377\251\270\265\377\323\334\332\377\377\333\343\342\377\255" \
+ "\333\343\342\377\1\267\307\304\377\202\223\254\247\377\1\343\352\350" \
+ "\377\212\377\377\377\377\1\333\343\342\377\202\223\254\247\377\1\274" \
+ "\313\310\377\205\333\343\342\377\1\305\322\320\377\202\223\254\247\377" \
+ "\1\320\333\331\377\212\377\377\377\377\1\355\361\360\377\202\223\254" \
+ "\247\377\1\260\302\277\377\377\333\343\342\377\207\333\343\342\377\1" \
+ "\313\325\324\377\204Slg\377\2i\200{\377\313\325\324\377\377\333\343\342" \
+ "\377\257\333\343\342\377\4\331\342\341\377\232\261\255\377\223\254\247" \
+ "\377\245\271\265\377\213\377\377\377\377\4\256\300\275\377\223\254\247" \
+ "\377\226\256\251\377\327\337\336\377\205\333\343\342\377\4\332\342\341" \
+ "\377\234\262\256\377\223\254\247\377\243\271\264\377\213\377\377\377" \
+ "\377\4\256\301\275\377\223\254\247\377\226\256\251\377\327\337\336\377" \
+ "\377\333\343\342\377\206\333\343\342\377\1\302\315\313\377\204Slg\377" \
+ "\1\273\307\305\377\377\333\343\342\377\260\333\343\342\377\1\303\320" \
+ "\316\377\202\223\254\247\377\1\322\334\332\377\212\377\377\377\377\1" \
+ "\354\361\360\377\202\223\254\247\377\1\260\302\277\377\207\333\343\342" \
+ "\377\1\271\311\306\377\202\223\254\247\377\1\342\350\347\377\212\377" \
+ "\377\377\377\1\334\344\342\377\202\223\254\247\377\1\274\313\310\377" \
+ "\377\333\343\342\377\206\333\343\342\377\1\307\322\320\377\203Slg\377" \
+ "\1^uq\377\377\333\343\342\377\261\333\343\342\377\4\244\271\265\377\223" \
+ "\254\247\377\230\260\253\377\371\373\372\377\212\377\377\377\377\1\277" \
+ "\316\313\377\202\223\254\247\377\1\316\331\327\377\207\333\343\342\377" \
+ "\4\325\336\335\377\225\255\250\377\223\254\247\377\264\306\302\377\212" \
+ "\377\377\377\377\5\375\376\375\377\237\265\261\377\223\254\247\377\236" \
+ "\264\260\377\332\342\341\377\377\333\343\342\377\205\333\343\342\377" \
+ "\1\326\337\336\377\203Slg\377\1q\207\202\377\377\333\343\342\377\260" \
+ "\333\343\342\377\1\316\331\327\377\202\223\254\247\377\1\300\317\314" \
+ "\377\212\377\377\377\377\4\371\372\372\377\230\257\253\377\223\254\247" \
+ "\377\244\271\265\377\211\333\343\342\377\4\255\300\274\377\223\254\247" \
+ "\377\224\254\250\377\362\365\364\377\212\377\377\377\377\1\312\326\324" \
+ "\377\202\223\254\247\377\1\307\324\322\377\377\333\343\342\377\206\333" \
+ "\343\342\377\1^vq\377\202Slg\377\1o\205\201\377\377\333\343\342\377\260" \
+ "\333\343\342\377\1\260\302\277\377\202\223\254\247\377\1\356\361\361" \
+ "\377\212\377\377\377\377\1\320\333\331\377\202\223\254\247\377\1\303" \
+ "\320\316\377\211\333\343\342\377\1\314\327\325\377\202\223\254\247\377" \
+ "\1\306\323\320\377\212\377\377\377\377\4\365\367\367\377\225\255\251" \
+ "\377\223\254\247\377\251\275\271\377\377\333\343\342\377\206\333\343" \
+ "\342\377\1}\221\215\377\202Slg\377\1byt\377\230\333\343\342\377\1\305" \
+ "\317\316\377\202\270\305\303\377\1\315\326\325\377\377\333\343\342\377" \
+ "\223\333\343\342\377\4\326\337\336\377\226\256\251\377\223\254\247\377" \
+ "\257\301\276\377\213\377\377\377\377\4\243\271\264\377\223\254\247\377" \
+ "\232\261\255\377\331\342\341\377\212\333\343\342\377\4\242\267\263\377" \
+ "\223\254\247\377\233\262\256\377\374\374\374\377\212\377\377\377\377" \
+ "\1\271\311\306\377\202\223\254\247\377\1\322\334\333\377\377\333\343" \
+ "\342\377\205\333\343\342\377\1\270\304\302\377\203Slg\377\1\305\320\316" \
+ "\377\227\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\223\333\343\342\377\1\273\313\310\377\202\223\254" \
+ "\247\377\1\334\344\343\377\212\377\377\377\377\1\342\351\347\377\202" \
+ "\223\254\247\377\1\267\307\304\377\213\333\343\342\377\1\300\316\314" \
+ "\377\202\223\254\247\377\1\327\340\336\377\212\377\377\377\377\1\346" \
+ "\354\353\377\202\223\254\247\377\1\265\306\302\377\377\333\343\342\377" \
+ "\206\333\343\342\377\1k\201|\377\202Slg\377\1\216\240\235\377\227\333" \
+ "\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343" \
+ "\342\377\222\333\343\342\377\5\332\342\341\377\235\264\257\377\223\254" \
+ "\247\377\237\265\261\377\375\376\375\377\212\377\377\377\377\4\264\306" \
+ "\302\377\223\254\247\377\224\255\250\377\324\335\334\377\213\333\343" \
+ "\342\377\4\331\341\340\377\230\260\253\377\223\254\247\377\252\275\271" \
+ "\377\213\377\377\377\377\4\250\274\270\377\223\254\247\377\230\260\253" \
+ "\377\331\341\340\377\377\333\343\342\377\205\333\343\342\377\5\301\315" \
+ "\313\377Yrm\377Slg\377Umh\377\277\313\311\377\226\333\343\342\377\1\202" \
+ "\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\222\333" \
+ "\343\342\377\1\307\324\322\377\202\223\254\247\377\1\313\327\324\377" \
+ "\212\377\377\377\377\4\362\365\364\377\224\254\250\377\223\254\247\377" \
+ "\253\276\273\377\215\333\343\342\377\1\264\305\302\377\202\223\254\247" \
+ "\377\1\350\356\355\377\212\377\377\377\377\1\325\337\335\377\202\223" \
+ "\254\247\377\1\300\316\314\377\377\333\343\342\377\206\333\343\342\377" \
+ "\5\265\302\300\377Umh\377Slg\377]up\377\301\314\312\377\225\333\343\342" \
+ "\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\222\333\343\342\377\4\251\274\271\377\223\254\247\377\225\256\251\377" \
+ "\366\370\367\377\212\377\377\377\377\1\306\323\321\377\202\223\254\247" \
+ "\377\1\312\326\324\377\215\333\343\342\377\1\322\334\332\377\202\223" \
+ "\254\247\377\1\273\313\310\377\212\377\377\377\377\4\373\374\373\377" \
+ "\232\261\255\377\223\254\247\377\242\267\263\377\377\333\343\342\377" \
+ "\207\333\343\342\377\6\267\304\302\377e{w\377Slg\377Vni\377\224\245\242" \
+ "\377\321\332\331\377\223\333\343\342\377\1\202\225\221\377\202Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\221\333\343\342\377\1\322\334" \
+ "\332\377\202\223\254\247\377\1\271\311\306\377\212\377\377\377\377\4" \
+ "\374\374\374\377\233\262\256\377\223\254\247\377\240\266\261\377\217" \
+ "\333\343\342\377\4\251\275\271\377\223\254\247\377\226\256\251\377\366" \
+ "\370\370\377\212\377\377\377\377\1\304\321\317\377\202\223\254\247\377" \
+ "\1\314\327\325\377\377\333\343\342\377\203\333\343\342\377\1\330\340" \
+ "\337\377\203\322\333\332\377\2\315\326\325\377\207\232\226\377\202Sl" \
+ "g\377\6Vni\377|\220\214\377\234\254\251\377\264\301\277\377\303\316\314" \
+ "\377\314\325\324\377\216\322\333\332\377\1\177\223\217\377\202Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\221\333\343\342\377\1\264\305" \
+ "\302\377\202\223\254\247\377\1\346\353\352\377\212\377\377\377\377\1" \
+ "\330\341\337\377\202\223\254\247\377\1\276\315\312\377\217\333\343\342" \
+ "\377\1\307\324\322\377\202\223\254\247\377\1\315\330\326\377\212\377" \
+ "\377\377\377\1\357\362\362\377\202\223\254\247\377\1\256\300\275\377" \
+ "\377\333\343\342\377\203\333\343\342\377\1\250\267\264\377\236Slg\377" \
+ "\1\243\262\257\377\377\333\343\342\377\220\333\343\342\377\4\331\341" \
+ "\340\377\230\260\253\377\223\254\247\377\247\273\267\377\213\377\377" \
+ "\377\377\4\252\276\272\377\223\254\247\377\227\257\252\377\330\340\337" \
+ "\377\217\333\343\342\377\5\332\342\341\377\236\264\260\377\223\254\247" \
+ "\377\240\266\262\377\376\376\376\377\212\377\377\377\377\4\261\303\277" \
+ "\377\223\254\247\377\225\255\250\377\325\336\335\377\377\333\343\342" \
+ "\377\202\333\343\342\377\1\250\267\264\377\236Slg\377\1\243\262\257\377" \
+ "\377\333\343\342\377\220\333\343\342\377\1\300\316\314\377\202\223\254" \
+ "\247\377\1\324\336\334\377\212\377\377\377\377\1\351\356\355\377\202" \
+ "\223\254\247\377\1\262\304\301\377\221\333\343\342\377\1\273\313\310" \
+ "\377\202\223\254\247\377\1\336\345\344\377\212\377\377\377\377\1\336" \
+ "\346\344\377\202\223\254\247\377\1\271\311\306\377\377\333\343\342\377" \
+ "\202\333\343\342\377\1\250\267\264\377\236Slg\377\1\243\262\257\377\377" \
+ "\333\343\342\377\220\333\343\342\377\4\241\267\263\377\223\254\247\377" \
+ "\231\261\254\377\372\373\373\377\212\377\377\377\377\1\274\313\310\377" \
+ "\202\223\254\247\377\1\320\333\331\377\221\333\343\342\377\4\326\337" \
+ "\336\377\226\256\251\377\223\254\247\377\261\303\277\377\212\377\377" \
+ "\377\377\5\376\376\376\377\240\266\262\377\223\254\247\377\234\262\256" \
+ "\377\332\342\341\377\377\333\343\342\377\2\333\343\342\377\250\267\264" \
+ "\377\236Slg\377\1\243\262\257\377\377\333\343\342\377\217\333\343\342" \
+ "\377\1\314\327\325\377\202\223\254\247\377\1\303\321\316\377\212\377" \
+ "\377\377\377\4\367\371\370\377\226\256\251\377\223\254\247\377\247\273" \
+ "\267\377\223\333\343\342\377\1\260\302\277\377\202\223\254\247\377\1" \
+ "\357\362\362\377\212\377\377\377\377\1\315\330\326\377\202\223\254\247" \
+ "\377\1\305\322\320\377\377\333\343\342\377\2\333\343\342\377\250\267" \
+ "\264\377\236Slg\377\1\243\262\257\377\377\333\343\342\377\217\333\343" \
+ "\342\377\1\255\300\274\377\202\223\254\247\377\1\357\363\362\377\212" \
+ "\377\377\377\377\1\315\330\326\377\202\223\254\247\377\1\305\322\320" \
+ "\377\223\333\343\342\377\1\316\331\327\377\202\223\254\247\377\1\302" \
+ "\320\315\377\212\377\377\377\377\4\366\370\370\377\226\256\251\377\223" \
+ "\254\247\377\247\273\267\377\377\333\343\342\377\2\333\343\342\377\250" \
+ "\267\264\377\202Slg\377\1u\211\205\377\230\270\305\303\377\1v\213\207" \
+ "\377\202Slg\377\1\243\262\257\377\377\333\343\342\377\216\333\343\342" \
+ "\377\4\325\336\335\377\224\255\250\377\223\254\247\377\261\303\277\377" \
+ "\212\377\377\377\377\5\376\376\376\377\240\266\262\377\223\254\247\377" \
+ "\234\263\256\377\332\342\341\377\224\333\343\342\377\4\244\271\265\377" \
+ "\223\254\247\377\231\261\254\377\372\373\373\377\212\377\377\377\377" \
+ "\1\273\313\310\377\202\223\254\247\377\1\320\333\331\377\377\333\343" \
+ "\342\377\1\250\267\264\377\202Slg\377\1\200\224\220\377\230\333\343\342" \
+ "\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\216\333\343\342\377\1\271\311\306\377\202\223\254\247\377\1\337\346" \
+ "\345\377\212\377\377\377\377\1\336\346\344\377\202\223\254\247\377\1" \
+ "\271\311\306\377\225\333\343\342\377\1\303\320\316\377\202\223\254\247" \
+ "\377\1\323\335\333\377\212\377\377\377\377\1\351\356\355\377\202\223" \
+ "\254\247\377\1\262\304\300\377\377\333\343\342\377\1\250\267\264\377" \
+ "\202Slg\377\1\200\224\220\377\230\333\343\342\377\1\202\225\221\377\202" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\215\333\343\342\377\5\332" \
+ "\342\341\377\233\262\256\377\223\254\247\377\241\267\262\377\376\376" \
+ "\376\377\212\377\377\377\377\4\261\303\277\377\223\254\247\377\225\255" \
+ "\250\377\325\336\335\377\225\333\343\342\377\4\331\342\341\377\232\261" \
+ "\255\377\223\254\247\377\246\272\266\377\213\377\377\377\377\4\252\275" \
+ "\271\377\223\254\247\377\227\257\252\377\327\340\337\377\376\333\343" \
+ "\342\377\1\250\267\264\377\202Slg\377\1\200\224\220\377\230\333\343\342" \
+ "\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\377\333\343\342\377" \
+ "\215\333\343\342\377\1\304\322\317\377\202\223\254\247\377\1\315\331" \
+ "\326\377\212\377\377\377\377\1\357\363\362\377\202\223\254\247\377\1" \
+ "\256\300\275\377\227\333\343\342\377\1\267\307\304\377\202\223\254\247" \
+ "\377\1\345\353\351\377\212\377\377\377\377\1\330\341\337\377\202\223" \
+ "\254\247\377\1\276\315\312\377\376\333\343\342\377\1\250\267\264\377" \
+ "\202Slg\377\1\200\224\220\377\230\333\343\342\377\1\202\225\221\377\202" \
+ "Slg\377\1\243\262\257\377\377\333\343\342\377\215\333\343\342\377\4\246" \
+ "\272\266\377\223\254\247\377\226\256\252\377\367\371\370\377\212\377" \
+ "\377\377\377\1\302\320\315\377\202\223\254\247\377\1\314\330\326\377" \
+ "\227\333\343\342\377\4\324\335\334\377\224\255\250\377\223\254\247\377" \
+ "\267\310\305\377\212\377\377\377\377\4\374\374\374\377\233\262\256\377" \
+ "\223\254\247\377\237\265\261\377\376\333\343\342\377\1\311\324\322\377" \
+ "\202\254\271\267\377\1\274\307\306\377\230\333\343\342\377\1\325\336" \
+ "\335\377\202\322\333\332\377\1\327\340\337\377\377\333\343\342\377\214" \
+ "\333\343\342\377\1\320\332\331\377\202\223\254\247\377\1\274\313\310" \
+ "\377\212\377\377\377\377\4\372\373\373\377\231\261\254\377\223\254\247" \
+ "\377\242\267\263\377\231\333\343\342\377\4\253\276\273\377\223\254\247" \
+ "\377\225\255\250\377\364\366\366\377\212\377\377\377\377\1\306\323\321" \
+ "\377\202\223\254\247\377\1\311\325\323\377\377\333\343\342\377\377\333" \
+ "\343\342\377\252\333\343\342\377\1\262\303\300\377\202\223\254\247\377" \
+ "\1\351\356\355\377\212\377\377\377\377\1\324\336\334\377\202\223\254" \
+ "\247\377\1\301\317\314\377\231\333\343\342\377\1\312\326\324\377\202" \
+ "\223\254\247\377\1\311\325\323\377\212\377\377\377\377\4\362\365\364" \
+ "\377\224\254\250\377\223\254\247\377\253\276\273\377\377\333\343\342" \
+ "\377\377\333\343\342\377\251\333\343\342\377\4\327\340\337\377\227\257" \
+ "\252\377\223\254\247\377\253\276\272\377\213\377\377\377\377\4\246\273" \
+ "\267\377\223\254\247\377\230\260\253\377\331\341\340\377\213\333\343" \
+ "\342\377\3\306\323\320\377\274\313\311\377\316\330\327\377\214\333\343" \
+ "\342\377\4\237\265\261\377\223\254\247\377\236\264\257\377\375\375\375" \
+ "\377\212\377\377\377\377\4\264\306\302\377\223\254\247\377\224\255\250" \
+ "\377\323\335\334\377\377\333\343\342\377\225\333\343\342\377\5|\220\214" \
+ "\377x\214\210\377\217\241\235\377\266\302\300\377\331\342\341\377\377" \
+ "\333\343\342\377\216\333\343\342\377\1\275\314\312\377\202\223\254\247" \
+ "\377\1\330\341\337\377\212\377\377\377\377\1\346\353\352\377\202\223" \
+ "\254\247\377\1\265\306\303\377\212\333\343\342\377\2\331\341\340\377" \
+ "\250\275\271\377\203\223\254\247\377\1\240\266\262\377\213\333\343\342" \
+ "\377\1\276\315\312\377\202\223\254\247\377\1\332\343\341\377\212\377" \
+ "\377\377\377\1\342\351\347\377\202\223\254\247\377\1\267\307\304\377" \
+ "\374\333\343\342\377\1\315\326\325\377\202\264\301\277\377\1\277\312" \
+ "\310\377\224\333\343\342\377\1h\177z\377\203Slg\377\2h\177z\377\267\303" \
+ "\301\377\377\333\343\342\377\215\333\343\342\377\4\237\265\261\377\223" \
+ "\254\247\377\234\263\256\377\374\375\374\377\212\377\377\377\377\1\270" \
+ "\310\305\377\202\223\254\247\377\1\322\334\333\377\212\333\343\342\377" \
+ "\7\306\323\320\377\223\254\247\377\236\264\260\377\303\321\316\377\236" \
+ "\265\260\377\223\254\247\377\305\323\320\377\212\333\343\342\377\4\330" \
+ "\340\337\377\227\257\252\377\223\254\247\377\255\300\274\377\213\377" \
+ "\377\377\377\4\243\271\264\377\223\254\247\377\232\261\254\377\331\341" \
+ "\340\377\373\333\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210" \
+ "\377\224\333\343\342\377\1h\177z\377\204Slg\377\2Tmh\377\251\270\265" \
+ "\377\377\333\343\342\377\213\333\343\342\377\1\311\325\323\377\202\223" \
+ "\254\247\377\1\307\324\321\377\212\377\377\377\377\4\364\367\366\377" \
+ "\225\255\250\377\223\254\247\377\251\275\271\377\213\333\343\342\377" \
+ "\7\260\302\277\377\223\254\247\377\325\336\334\377\377\377\377\377\327" \
+ "\340\337\377\223\254\247\377\250\274\271\377\213\333\343\342\377\1\262" \
+ "\304\300\377\202\223\254\247\377\1\353\360\357\377\212\377\377\377\377" \
+ "\1\321\333\331\377\202\223\254\247\377\1\302\320\316\377\373\333\343" \
+ "\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\224\333\343\342" \
+ "\377\1h\177z\377\205Slg\377\2Xpk\377\311\323\322\377\377\333\343\342" \
+ "\377\212\333\343\342\377\4\253\276\272\377\223\254\247\377\224\254\250" \
+ "\377\362\365\364\377\212\377\377\377\377\1\312\326\323\377\202\223\254" \
+ "\247\377\1\310\324\322\377\213\333\343\342\377\7\255\300\275\377\223" \
+ "\254\247\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254" \
+ "\247\377\245\272\265\377\213\333\343\342\377\1\320\333\331\377\202\223" \
+ "\254\247\377\1\276\315\312\377\212\377\377\377\377\4\371\372\372\377" \
+ "\230\257\253\377\223\254\247\377\244\271\265\377\373\333\343\342\377" \
+ "\1\250\267\264\377\202Slg\377\1x\214\210\377\224\333\343\342\377\4\303" \
+ "\316\314\377\260\275\273\377\233\253\250\377f}x\377\203Slg\377\1\217" \
+ "\241\235\377\377\333\343\342\377\211\333\343\342\377\4\323\335\333\377" \
+ "\224\254\247\377\223\254\247\377\265\306\303\377\212\377\377\377\377" \
+ "\4\375\375\375\377\236\264\260\377\223\254\247\377\236\264\260\377\214" \
+ "\333\343\342\377\7\255\300\275\377\223\254\247\377\341\350\346\377\377" \
+ "\377\377\377\356\362\361\377\223\254\247\377\245\272\265\377\214\333" \
+ "\343\342\377\4\247\273\267\377\223\254\247\377\227\257\252\377\370\372" \
+ "\371\377\212\377\377\377\377\1\277\316\313\377\202\223\254\247\377\1" \
+ "\316\331\327\377\372\333\343\342\377\1\250\267\264\377\202Slg\377\1x" \
+ "\214\210\377\227\333\343\342\377\2\331\342\341\377\211\233\230\377\202" \
+ "Slg\377\1d{v\377\377\333\343\342\377\211\333\343\342\377\1\266\307\304" \
+ "\377\202\223\254\247\377\1\343\351\350\377\212\377\377\377\377\1\333" \
+ "\343\342\377\202\223\254\247\377\1\274\313\310\377\214\333\343\342\377" \
+ "\7\255\300\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356" \
+ "\362\361\377\223\254\247\377\245\272\265\377\214\333\343\342\377\1\305" \
+ "\322\320\377\202\223\254\247\377\1\317\332\330\377\212\377\377\377\377" \
+ "\1\354\361\360\377\202\223\254\247\377\1\260\302\276\377\372\333\343" \
+ "\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\230\333\343\342" \
+ "\377\2\326\337\336\377]tp\377\202Slg\377\1\317\331\327\377\377\333\343" \
+ "\342\377\207\333\343\342\377\4\331\341\340\377\232\261\254\377\223\254" \
+ "\247\377\244\271\265\377\213\377\377\377\377\4\256\300\275\377\223\254" \
+ "\247\377\226\256\251\377\327\337\336\377\214\333\343\342\377\7\255\300" \
+ "\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356\362\361" \
+ "\377\223\254\247\377\245\272\265\377\214\333\343\342\377\5\332\342\341" \
+ "\377\234\262\256\377\223\254\247\377\243\270\264\377\376\376\376\377" \
+ "\212\377\377\377\377\4\256\300\275\377\223\254\247\377\226\256\251\377" \
+ "\326\337\336\377\371\333\343\342\377\1\250\267\264\377\202Slg\377\1x" \
+ "\214\210\377\231\333\343\342\377\1v\212\206\377\202Slg\377\1\301\315" \
+ "\313\377\377\333\343\342\377\207\333\343\342\377\1\302\320\315\377\202" \
+ "\223\254\247\377\1\321\334\332\377\212\377\377\377\377\1\354\361\360" \
+ "\377\202\223\254\247\377\1\260\302\277\377\215\333\343\342\377\7\255" \
+ "\300\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356\362" \
+ "\361\377\223\254\247\377\245\272\265\377\215\333\343\342\377\1\271\311" \
+ "\306\377\202\223\254\247\377\1\341\350\346\377\212\377\377\377\377\1" \
+ "\333\343\342\377\202\223\254\247\377\1\273\313\310\377\371\333\343\342" \
+ "\377\1\250\267\264\377\202Slg\377\1x\214\210\377\231\333\343\342\377" \
+ "\1\177\222\217\377\202Slg\377\1\272\306\304\377\377\333\343\342\377\207" \
+ "\333\343\342\377\4\243\270\264\377\223\254\247\377\230\260\253\377\371" \
+ "\372\372\377\212\377\377\377\377\1\277\316\313\377\202\223\254\247\377" \
+ "\1\316\331\330\377\215\333\343\342\377\7\255\300\275\377\223\254\247" \
+ "\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247\377" \
+ "\245\272\265\377\215\333\343\342\377\4\325\336\335\377\225\255\250\377" \
+ "\223\254\247\377\264\305\301\377\212\377\377\377\377\5\375\375\375\377" \
+ "\236\265\260\377\223\254\247\377\235\264\257\377\332\342\341\377\370" \
+ "\333\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\231\333" \
+ "\343\342\377\1i\177{\377\202Slg\377\1\276\312\310\377\377\333\343\342" \
+ "\377\206\333\343\342\377\1\316\331\327\377\202\223\254\247\377\7\300" \
+ "\316\313\377\377\377\377\377\327\340\337\377\272\312\306\377\254\277" \
+ "\273\377\276\315\312\377\343\352\350\377\204\377\377\377\377\4\371\372" \
+ "\372\377\230\257\253\377\223\254\247\377\245\271\265\377\216\333\343" \
+ "\342\377\7\255\300\275\377\223\254\247\377\341\350\346\377\377\377\377" \
+ "\377\356\362\361\377\223\254\247\377\245\272\265\377\216\333\343\342" \
+ "\377\1\256\300\275\377\202\223\254\247\377\1\361\364\364\377\204\377" \
+ "\377\377\377\7\350\355\354\377\300\317\314\377\254\300\274\377\267\310" \
+ "\304\377\323\335\333\377\376\376\376\377\312\326\324\377\202\223\254" \
+ "\247\377\1\307\323\321\377\370\333\343\342\377\1\250\267\264\377\202" \
+ "Slg\377\1x\214\210\377\230\333\343\342\377\1\254\272\270\377\203Slg\377" \
+ "\1\307\321\320\377\354\333\343\342\377\1\205\241\234\377\210|\233\225" \
+ "\377\1\262\303\300\377\217\312\326\324\377\1\251\274\271\377\202\223" \
+ "\254\247\377\2\350\355\354\377\257\301\275\377\205\223\254\247\377\1" \
+ "\301\317\315\377\203\377\377\377\377\1\320\333\331\377\202\223\254\247" \
+ "\377\1\267\310\305\377\216\312\326\324\377\7\247\273\267\377\223\254" \
+ "\247\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247" \
+ "\377\240\266\262\377\216\312\326\324\377\1\276\315\312\377\202\223\254" \
+ "\247\377\1\305\322\320\377\203\377\377\377\377\2\312\327\324\377\224" \
+ "\255\250\377\204\223\254\247\377\5\251\275\271\377\354\360\360\377\225" \
+ "\255\251\377\223\254\247\377\243\270\264\377\217\312\326\324\377\1\273" \
+ "\313\310\377\210|\233\225\377\2\177\235\227\377\330\341\337\377\325\333" \
+ "\343\342\377\1\273\307\305\377\210\270\305\303\377\1\223\244\241\377" \
+ "\202Slg\377\1n\204\200\377\223\270\305\303\377\6\267\303\301\377\257" \
+ "\274\272\377\247\265\263\377\232\252\247\377t\210\204\377Tmh\377\202" \
+ "Slg\377\2Woj\377\330\340\337\377\354\333\343\342\377\1u\225\217\377\227" \
+ "o\221\212\377\15q\222\213\377\221\252\245\377\223\254\247\377\256\301" \
+ "\275\377\277\316\313\377\223\254\247\377\242\267\263\377\334\344\343" \
+ "\377\354\360\357\377\323\335\333\377\232\261\255\377\223\254\247\377" \
+ "\327\340\337\377\202\377\377\377\377\3\243\271\264\377\223\254\247\377" \
+ "\217\251\243\377\217o\221\212\377\7\205\242\234\377\223\254\247\377\341" \
+ "\350\346\377\377\377\377\377\356\362\361\377\223\254\247\377\212\245" \
+ "\240\377\217o\221\212\377\22\213\246\240\377\223\254\247\377\233\262" \
+ "\255\377\373\374\374\377\377\377\377\377\343\352\350\377\223\254\247" \
+ "\377\226\257\252\377\316\331\327\377\354\360\357\377\340\347\345\377" \
+ "\250\274\270\377\223\254\247\377\265\306\303\377\271\311\306\377\223" \
+ "\254\247\377\222\253\246\377s\224\215\377\230o\221\212\377\1\327\340" \
+ "\337\377\325\333\343\342\377\1\\so\377\247Slg\377\1t\210\204\377\355" \
+ "\333\343\342\377\1u\225\217\377\227o\221\212\377\1~\234\226\377\202\223" \
+ "\254\247\377\4\331\342\340\377\224\255\250\377\230\260\253\377\361\365" \
+ "\364\377\203\377\377\377\377\5\341\350\346\377\223\254\247\377\247\274" \
+ "\270\377\377\377\377\377\342\351\347\377\202\223\254\247\377\1\200\236" \
+ "\230\377\217o\221\212\377\7\205\242\234\377\223\254\247\377\341\350\346" \
+ "\377\377\377\377\377\356\362\361\377\223\254\247\377\212\245\240\377" \
+ "\217o\221\212\377\1|\232\224\377\202\223\254\247\377\5\326\340\336\377" \
+ "\377\377\377\377\262\304\301\377\223\254\247\377\325\337\335\377\203" \
+ "\377\377\377\377\4\370\371\371\377\235\264\257\377\223\254\247\377\332" \
+ "\342\340\377\202\223\254\247\377\1\202\237\231\377\230o\221\212\377\1" \
+ "\327\340\337\377\325\333\343\342\377\1\\so\377\247Slg\377\1\253\271\266" \
+ "\377\355\333\343\342\377\1u\225\217\377\227o\221\212\377\6\215\250\242" \
+ "\377\223\254\247\377\236\265\260\377\344\352\350\377\223\254\247\377" \
+ "\262\304\300\377\205\377\377\377\377\7\233\262\255\377\225\255\250\377" \
+ "\374\374\374\377\264\306\302\377\223\254\247\377\222\253\246\377r\223" \
+ "\214\377\217o\221\212\377\7\205\242\234\377\223\254\247\377\341\350\346" \
+ "\377\377\377\377\377\356\362\361\377\223\254\247\377\212\245\240\377" \
+ "\220o\221\212\377\7\220\251\244\377\223\254\247\377\251\275\271\377\377" \
+ "\377\377\377\235\264\257\377\223\254\247\377\372\373\373\377\204\377" \
+ "\377\377\377\7\275\314\311\377\223\254\247\377\333\343\342\377\247\273" \
+ "\267\377\223\254\247\377\220\251\244\377p\221\212\377\227o\221\212\377" \
+ "\1\327\340\337\377\325\333\343\342\377\1\\so\377\246Slg\377\2u\211\205" \
+ "\377\331\341\340\377\355\333\343\342\377\1u\225\217\377\226o\221\212" \
+ "\377\1y\230\222\377\202\223\254\247\377\4\312\326\324\377\353\360\357" \
+ "\377\223\254\247\377\254\277\273\377\204\377\377\377\377\7\375\375\375" \
+ "\377\227\257\252\377\230\260\253\377\361\364\363\377\224\254\250\377" \
+ "\223\254\247\377\206\242\234\377\220o\221\212\377\7\205\242\234\377\223" \
+ "\254\247\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254" \
+ "\247\377\212\245\240\377\220o\221\212\377\1\201\237\231\377\202\223\254" \
+ "\247\377\4\350\355\354\377\243\270\264\377\223\254\247\377\365\367\367" \
+ "\377\204\377\377\377\377\4\267\310\304\377\223\254\247\377\340\347\345" \
+ "\377\325\336\334\377\202\223\254\247\377\1|\233\224\377\227o\221\212" \
+ "\377\1\327\340\337\377\325\333\343\342\377\1\\so\377\245Slg\377\2}\220" \
+ "\215\377\321\332\331\377\356\333\343\342\377\1u\225\217\377\226o\221" \
+ "\212\377\10\210\243\236\377\223\254\247\377\225\255\251\377\365\367\367" \
+ "\377\376\376\376\377\231\261\254\377\223\254\247\377\342\351\347\377" \
+ "\203\377\377\377\377\4\315\331\326\377\223\254\247\377\260\302\276\377" \
+ "\306\323\321\377\202\223\254\247\377\1w\227\220\377\220o\221\212\377" \
+ "\7\205\242\234\377\223\254\247\377\341\350\346\377\377\377\377\377\356" \
+ "\362\361\377\223\254\247\377\212\245\240\377\220o\221\212\377\7s\224" \
+ "\215\377\222\253\246\377\223\254\247\377\272\312\307\377\273\313\307" \
+ "\377\223\254\247\377\301\317\315\377\203\377\377\377\377\10\354\360\357" \
+ "\377\226\256\251\377\225\256\251\377\366\370\370\377\373\374\373\377" \
+ "\232\261\254\377\223\254\247\377\213\246\240\377\227o\221\212\377\1\327" \
+ "\340\337\377\325\333\343\342\377\1\\so\377\241Slg\377\4Xpk\377n\204\200" \
+ "\377\213\235\232\377\274\310\306\377\360\333\343\342\377\1u\225\217\377" \
+ "\210o\221\212\377\1u\225\216\377\214x\230\221\377\4{\232\223\377\222" \
+ "\253\246\377\223\254\247\377\271\311\306\377\202\377\377\377\377\14\324" \
+ "\336\334\377\223\254\247\377\225\256\251\377\277\316\313\377\321\334" \
+ "\331\377\266\307\303\377\223\254\247\377\225\256\251\377\347\354\353" \
+ "\377\233\262\256\377\223\254\247\377\215\250\242\377\221x\230\221\377" \
+ "\7\210\244\237\377\223\254\247\377\341\350\346\377\377\377\377\377\356" \
+ "\362\361\377\223\254\247\377\214\247\241\377\221x\230\221\377\14\212" \
+ "\245\240\377\223\254\247\377\225\256\251\377\352\356\356\377\231\260" \
+ "\253\377\223\254\247\377\260\302\277\377\320\333\331\377\303\321\316" \
+ "\377\230\260\253\377\223\254\247\377\312\326\324\377\202\377\377\377" \
+ "\377\1\303\321\316\377\202\223\254\247\377\1}\234\225\377\214x\230\221" \
+ "\377\1v\226\217\377\211o\221\212\377\1\327\340\337\377\325\333\343\342" \
+ "\377\1\317\330\327\377\210\316\327\326\377\1\240\260\255\377\202Slg\377" \
+ "\1t\211\205\377\223\316\327\326\377\2\320\331\330\377\327\340\337\377" \
+ "\364\333\343\342\377\1\236\265\260\377\210\232\262\255\377\1\307\323" \
+ "\321\377\214\333\343\342\377\1\264\305\302\377\202\223\254\247\377\1" \
+ "\346\354\353\377\203\377\377\377\377\2\314\330\325\377\226\256\251\377" \
+ "\203\223\254\247\377\3\233\263\256\377\335\345\343\377\330\341\337\377" \
+ "\202\223\254\247\377\1\276\315\312\377\221\333\343\342\377\7\255\300" \
+ "\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356\362\361" \
+ "\377\223\254\247\377\245\272\265\377\221\333\343\342\377\1\307\324\322" \
+ "\377\202\223\254\247\377\3\314\327\325\377\343\352\351\377\237\265\261" \
+ "\377\203\223\254\247\377\3\224\255\250\377\305\322\320\377\375\376\376" \
+ "\377\202\377\377\377\377\1\360\363\362\377\202\223\254\247\377\1\255" \
+ "\300\274\377\214\333\343\342\377\1\317\331\330\377\211\232\262\255\377" \
+ "\1\331\341\340\377\336\333\343\342\377\1\250\267\264\377\202Slg\377\1" \
+ "x\214\210\377\377\333\343\342\377\237\333\343\342\377\4\330\341\340\377" \
+ "\230\260\253\377\223\254\247\377\250\274\270\377\205\377\377\377\377" \
+ "\12\360\364\363\377\325\336\334\377\307\324\321\377\331\342\340\377\367" \
+ "\371\370\377\377\377\377\377\252\276\272\377\223\254\247\377\227\257" \
+ "\252\377\330\340\337\377\221\333\343\342\377\7\255\300\275\377\223\254" \
+ "\247\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247" \
+ "\377\245\272\265\377\221\333\343\342\377\12\332\342\341\377\236\264\260" \
+ "\377\223\254\247\377\240\266\261\377\375\376\375\377\371\373\373\377" \
+ "\333\343\342\377\310\325\322\377\322\334\332\377\355\361\361\377\205" \
+ "\377\377\377\377\4\262\304\300\377\223\254\247\377\224\255\250\377\325" \
+ "\336\335\377\364\333\343\342\377\1\250\267\264\377\202Slg\377\1x\214" \
+ "\210\377\377\333\343\342\377\237\333\343\342\377\1\277\316\313\377\202" \
+ "\223\254\247\377\1\325\337\335\377\212\377\377\377\377\1\351\356\355" \
+ "\377\202\223\254\247\377\1\263\304\301\377\222\333\343\342\377\7\255" \
+ "\300\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356\362" \
+ "\361\377\223\254\247\377\245\272\265\377\222\333\343\342\377\1\274\313" \
+ "\310\377\202\223\254\247\377\1\335\345\343\377\212\377\377\377\377\1" \
+ "\337\346\345\377\202\223\254\247\377\1\271\311\306\377\364\333\343\342" \
+ "\377\1\250\267\264\377\202Slg\377\1x\214\210\377\377\333\343\342\377" \
+ "\237\333\343\342\377\4\241\267\263\377\223\254\247\377\232\261\255\377" \
+ "\373\374\373\377\212\377\377\377\377\1\274\313\310\377\202\223\254\247" \
+ "\377\1\320\333\331\377\222\333\343\342\377\7\255\300\275\377\223\254" \
+ "\247\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247" \
+ "\377\245\272\265\377\222\333\343\342\377\4\327\337\336\377\226\256\251" \
+ "\377\223\254\247\377\260\302\276\377\212\377\377\377\377\5\376\376\376" \
+ "\377\241\267\263\377\223\254\247\377\233\262\256\377\332\342\341\377" \
+ "\363\333\343\342\377\1\264\300\276\377\202p\205\201\377\1\215\237\234" \
+ "\377\377\333\343\342\377\236\333\343\342\377\1\313\327\325\377\202\223" \
+ "\254\247\377\1\304\321\317\377\212\377\377\377\377\4\367\371\370\377" \
+ "\226\256\251\377\223\254\247\377\247\273\267\377\223\333\343\342\377" \
+ "\7\255\300\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356" \
+ "\362\361\377\223\254\247\377\245\272\265\377\223\333\343\342\377\1\260" \
+ "\302\277\377\202\223\254\247\377\1\356\362\361\377\212\377\377\377\377" \
+ "\1\316\331\327\377\202\223\254\247\377\1\304\321\317\377\377\333\343" \
+ "\342\377\377\333\343\342\377\226\333\343\342\377\1\255\300\274\377\202" \
+ "\223\254\247\377\1\360\363\363\377\212\377\377\377\377\1\315\330\326" \
+ "\377\202\223\254\247\377\1\305\322\320\377\223\333\343\342\377\7\255" \
+ "\300\275\377\223\254\247\377\341\350\346\377\377\377\377\377\356\362" \
+ "\361\377\223\254\247\377\245\272\265\377\223\333\343\342\377\1\316\331" \
+ "\327\377\202\223\254\247\377\1\301\317\314\377\212\377\377\377\377\4" \
+ "\367\371\371\377\226\256\252\377\223\254\247\377\246\272\266\377\377" \
+ "\333\343\342\377\377\333\343\342\377\225\333\343\342\377\4\325\336\335" \
+ "\377\224\255\250\377\223\254\247\377\262\304\300\377\212\377\377\377" \
+ "\377\5\376\376\376\377\240\266\262\377\223\254\247\377\234\263\256\377" \
+ "\332\342\341\377\223\333\343\342\377\7\255\300\275\377\223\254\247\377" \
+ "\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247\377\245" \
+ "\272\265\377\224\333\343\342\377\4\244\271\265\377\223\254\247\377\230" \
+ "\260\253\377\372\373\373\377\212\377\377\377\377\1\274\314\311\377\202" \
+ "\223\254\247\377\1\317\332\330\377\377\333\343\342\377\377\333\343\342" \
+ "\377\224\333\343\342\377\1\270\310\306\377\202\223\254\247\377\1\340" \
+ "\347\345\377\212\377\377\377\377\1\337\346\345\377\202\223\254\247\377" \
+ "\1\272\311\307\377\224\333\343\342\377\7\255\300\275\377\223\254\247" \
+ "\377\341\350\346\377\377\377\377\377\356\362\361\377\223\254\247\377" \
+ "\245\272\265\377\224\333\343\342\377\1\303\320\316\377\202\223\254\247" \
+ "\377\1\322\335\333\377\212\377\377\377\377\1\352\357\356\377\202\223" \
+ "\254\247\377\1\262\303\300\377\377\333\343\342\377\377\333\343\342\377" \
+ "\223\333\343\342\377\5\332\342\341\377\233\262\255\377\223\254\247\377" \
+ "\241\267\263\377\376\376\376\377\212\377\377\377\377\4\261\303\277\377" \
+ "\223\254\247\377\225\255\251\377\325\337\335\377\224\333\343\342\377" \
+ "\7\264\305\302\377\223\254\247\377\316\331\327\377\377\377\377\377\331" \
+ "\342\340\377\223\254\247\377\252\276\273\377\224\333\343\342\377\4\331" \
+ "\342\341\377\232\261\255\377\223\254\247\377\245\272\266\377\213\377" \
+ "\377\377\377\4\253\276\273\377\223\254\247\377\226\257\252\377\327\340" \
+ "\337\377\377\333\343\342\377\206\333\343\342\377\6\330\340\337\377\304" \
+ "\316\315\377\255\272\270\377\254\272\270\377\273\307\305\377\325\336" \
+ "\335\377\377\333\343\342\377\206\333\343\342\377\1\304\321\317\377\202" \
+ "\223\254\247\377\1\316\331\327\377\212\377\377\377\377\1\357\363\362" \
+ "\377\202\223\254\247\377\1\256\301\275\377\225\333\343\342\377\7\310" \
+ "\324\323\377\222\253\246\377\225\255\250\377\256\301\275\377\227\257" \
+ "\252\377\223\254\247\377\300\316\314\377\225\333\343\342\377\1\267\310" \
+ "\305\377\202\223\254\247\377\1\344\352\351\377\212\377\377\377\377\1" \
+ "\330\341\337\377\202\223\254\247\377\1\275\314\311\377\377\333\343\342" \
+ "\377\204\333\343\342\377\3\320\331\330\377\205\227\224\377Uni\377\204" \
+ "Slg\377\3Xpk\377\201\225\221\377\310\323\321\377\377\333\343\342\377" \
+ "\204\333\343\342\377\4\246\272\266\377\223\254\247\377\227\257\252\377" \
+ "\367\371\371\377\212\377\377\377\377\1\302\320\315\377\202\223\254\247" \
+ "\377\1\314\330\326\377\226\333\343\342\377\2\274\313\311\377\225\255" \
+ "\250\377\202\223\254\247\377\1\264\305\302\377\226\333\343\342\377\4" \
+ "\324\335\334\377\224\255\250\377\223\254\247\377\267\307\304\377\212" \
+ "\377\377\377\377\4\374\375\374\377\234\263\256\377\223\254\247\377\237" \
+ "\265\261\377\363\333\343\342\377\1\200\224\220\377\205t\211\205\377\1" \
+ "w\213\207\377\210\333\343\342\377\2\262\277\275\377\\to\377\210Slg\377" \
+ "\2Xql\377\252\270\266\377\377\333\343\342\377\202\333\343\342\377\1\317" \
+ "\332\330\377\202\223\254\247\377\1\275\314\311\377\212\377\377\377\377" \
+ "\4\372\373\373\377\231\261\254\377\223\254\247\377\242\270\263\377\230" \
+ "\333\343\342\377\3\330\341\340\377\313\326\324\377\327\337\336\377\230" \
+ "\333\343\342\377\4\253\276\273\377\223\254\247\377\224\255\250\377\363" \
+ "\366\366\377\212\377\377\377\377\1\307\324\321\377\202\223\254\247\377" \
+ "\1\311\325\323\377\361\333\343\342\377\1\275\311\307\377\206Slg\377\1" \
+ "Vni\377\207\333\343\342\377\2\306\321\317\377Yrm\377\212Slg\377\2Tmh" \
+ "\377\256\273\271\377\377\333\343\342\377\2\333\343\342\377\261\303\300" \
+ "\377\202\223\254\247\377\1\352\357\356\377\212\377\377\377\377\1\324" \
+ "\336\334\377\202\223\254\247\377\1\301\317\314\377\263\333\343\342\377" \
+ "\1\312\326\324\377\202\223\254\247\377\1\310\325\322\377\212\377\377" \
+ "\377\377\4\363\365\365\377\224\255\250\377\223\254\247\377\253\276\272" \
+ "\377\361\333\343\342\377\1\212\234\231\377\206Slg\377\1Vni\377\206\333" \
+ "\343\342\377\2\326\337\336\377l\201}\377\214Slg\377\2Xpk\377\313\325" \
+ "\323\377\376\333\343\342\377\4\327\340\337\377\226\257\252\377\223\254" \
+ "\247\377\253\277\273\377\213\377\377\377\377\4\247\273\267\377\223\254" \
+ "\247\377\231\260\254\377\331\341\340\377\264\333\343\342\377\4\240\266" \
+ "\261\377\223\254\247\377\235\263\257\377\374\375\375\377\212\377\377" \
+ "\377\377\4\266\307\303\377\223\254\247\377\224\254\247\377\323\335\333" \
+ "\377\357\333\343\342\377\2\331\342\341\377]up\377\204Slg\377\3czu\377" \
+ "\203\226\222\377\243\262\257\377\206\333\343\342\377\1\235\255\252\377" \
+ "\216Slg\377\1\177\222\217\377\376\333\343\342\377\1\275\314\311\377\202" \
+ "\223\254\247\377\1\331\342\340\377\212\377\377\377\377\1\346\353\352" \
+ "\377\202\223\254\247\377\1\265\306\303\377\265\333\343\342\377\1\276" \
+ "\315\312\377\202\223\254\247\377\1\331\342\340\377\212\377\377\377\377" \
+ "\1\343\351\350\377\202\223\254\247\377\1\266\307\304\377\357\333\343" \
+ "\342\377\1\276\311\307\377\204Slg\377\2\224\244\241\377\331\341\340\377" \
+ "\207\333\343\342\377\2\332\342\341\377f|x\377\205Slg\377\6byt\377\252" \
+ "\270\266\377\307\321\320\377\313\325\324\377\257\275\272\377\202\225" \
+ "\221\377\204Slg\377\1\313\325\323\377\375\333\343\342\377\4\237\265\260" \
+ "\377\223\254\247\377\235\263\257\377\374\375\375\377\212\377\377\377" \
+ "\377\1\270\310\305\377\202\223\254\247\377\1\322\334\333\377\265\333" \
+ "\343\342\377\4\330\340\337\377\227\257\252\377\223\254\247\377\254\277" \
+ "\273\377\213\377\377\377\377\4\244\271\265\377\223\254\247\377\231\261" \
+ "\254\377\331\341\340\377\356\333\343\342\377\1\227\250\245\377\203Sl" \
+ "g\377\1\255\273\271\377\211\333\343\342\377\1\266\303\301\377\205Slg" \
+ "\377\2l\202~\377\321\332\331\377\205\333\343\342\377\1\233\253\250\377" \
+ "\203Slg\377\1\232\252\247\377\374\333\343\342\377\1\310\325\323\377\202" \
+ "\223\254\247\377\1\307\324\322\377\212\377\377\377\377\4\364\367\366" \
+ "\377\225\255\250\377\223\254\247\377\251\275\271\377\267\333\343\342" \
+ "\377\1\262\304\301\377\202\223\254\247\377\1\353\357\356\377\212\377" \
+ "\377\377\377\1\322\334\332\377\202\223\254\247\377\1\302\320\315\377" \
+ "\356\333\343\342\377\1z\216\212\377\202Slg\377\1w\214\210\377\212\333" \
+ "\343\342\377\1\177\222\217\377\204Slg\377\2Tlg\377\277\312\310\377\207" \
+ "\333\343\342\377\1y\215\211\377\202Slg\377\1v\212\206\377\374\333\343" \
+ "\342\377\4\252\276\272\377\223\254\247\377\224\255\250\377\363\366\365" \
+ "\377\212\377\377\377\377\1\312\326\323\377\202\223\254\247\377\1\310" \
+ "\324\322\377\267\333\343\342\377\1\320\333\331\377\202\223\254\247\377" \
+ "\1\275\314\311\377\212\377\377\377\377\4\371\373\372\377\230\260\253" \
+ "\377\223\254\247\377\243\270\264\377\356\333\343\342\377\1ayt\377\202" \
+ "Slg\377\1\277\312\310\377\211\333\343\342\377\2\325\335\334\377Woj\377" \
+ "\204Slg\377\1\211\233\230\377\210\333\343\342\377\1\265\302\300\377\202" \
+ "Slg\377\1\\so\377\373\333\343\342\377\4\323\335\333\377\224\254\247\377" \
+ "\223\254\247\377\266\307\303\377\212\377\377\377\377\4\375\375\375\377" \
+ "\236\264\260\377\223\254\247\377\236\264\260\377\271\333\343\342\377" \
+ "\4\247\273\267\377\223\254\247\377\227\257\252\377\370\371\371\377\212" \
+ "\377\377\377\377\1\300\317\314\377\202\223\254\247\377\1\315\330\327" \
+ "\377\354\333\343\342\377\1\324\335\334\377\202Slg\377\1Xql\377\212\333" \
+ "\343\342\377\1\260\275\273\377\205Slg\377\1\301\315\313\377\211\333\343" \
+ "\342\377\1[sn\377\202Slg\377\1\315\327\325\377\372\333\343\342\377\1" \
+ "\266\306\303\377\202\223\254\247\377\1\343\352\350\377\212\377\377\377" \
+ "\377\1\333\343\342\377\202\223\254\247\377\1\274\313\311\377\271\333" \
+ "\343\342\377\1\305\322\320\377\202\223\254\247\377\1\317\332\330\377" \
+ "\212\377\377\377\377\1\356\361\361\377\202\223\254\247\377\1\257\301" \
+ "\276\377\354\333\343\342\377\1\312\324\323\377\202Slg\377\1l\201}\377" \
+ "\212\333\343\342\377\1\207\231\226\377\204Slg\377\1l\202~\377\212\333" \
+ "\343\342\377\1k\201|\377\202Slg\377\1\304\317\315\377\371\333\343\342" \
+ "\377\4\331\341\340\377\231\260\254\377\223\254\247\377\245\271\265\377" \
+ "\213\377\377\377\377\4\256\300\275\377\223\254\247\377\226\256\252\377" \
+ "\327\340\336\377\271\333\343\342\377\5\332\342\341\377\234\263\256\377" \
+ "\223\254\247\377\242\267\263\377\376\376\376\377\212\377\377\377\377" \
+ "\4\257\301\276\377\223\254\247\377\225\256\251\377\326\337\336\377\353" \
+ "\333\343\342\377\1\301\315\313\377\202Slg\377\1~\222\216\377\211\333" \
+ "\343\342\377\2\332\342\341\377_vr\377\204Slg\377\1\237\257\254\377\212" \
+ "\333\343\342\377\1y\215\211\377\202Slg\377\1\275\310\306\377\371\333" \
+ "\343\342\377\1\301\317\315\377\202\223\254\247\377\1\322\334\332\377" \
+ "\212\377\377\377\377\1\354\361\360\377\202\223\254\247\377\1\260\302" \
+ "\277\377\273\333\343\342\377\1\271\311\306\377\202\223\254\247\377\1" \
+ "\340\347\346\377\212\377\377\377\377\1\334\344\343\377\202\223\254\247" \
+ "\377\1\273\312\307\377\353\333\343\342\377\1\301\315\313\377\202Slg\377" \
+ "\1y\216\212\377\211\333\343\342\377\1\270\305\303\377\204Slg\377\2Tm" \
+ "h\377\317\331\327\377\212\333\343\342\377\1\202\225\221\377\202Slg\377" \
+ "\1\273\307\305\377\371\333\343\342\377\4\243\270\264\377\223\254\247" \
+ "\377\230\260\253\377\371\373\372\377\212\377\377\377\377\1\277\316\313" \
+ "\377\202\223\254\247\377\1\317\331\330\377\273\333\343\342\377\4\325" \
+ "\337\335\377\225\255\250\377\223\254\247\377\263\304\301\377\212\377" \
+ "\377\377\377\5\375\376\375\377\237\265\261\377\223\254\247\377\235\263" \
+ "\257\377\332\342\341\377\352\333\343\342\377\1\310\323\321\377\202Sl" \
+ "g\377\1k\201}\377\211\333\343\342\377\1\205\230\224\377\204Slg\377\1" \
+ "v\212\206\377\213\333\343\342\377\1t\210\204\377\202Slg\377\1\301\315" \
+ "\313\377\370\333\343\342\377\1\315\330\326\377\202\223\254\247\377\1" \
+ "\301\317\314\377\212\377\377\377\377\4\371\372\372\377\230\257\253\377" \
+ "\223\254\247\377\245\272\266\377\275\333\343\342\377\1\256\300\275\377" \
+ "\202\223\254\247\377\1\361\364\363\377\212\377\377\377\377\1\313\327" \
+ "\324\377\202\223\254\247\377\1\306\323\321\377\352\333\343\342\377\1" \
+ "\321\332\331\377\202Slg\377\2\\to\377\332\342\341\377\207\333\343\342" \
+ "\377\2\324\335\334\377Xql\377\204Slg\377\1\243\262\257\377\213\333\343" \
+ "\342\377\1czu\377\202Slg\377\1\310\323\321\377\370\333\343\342\377\1" \
+ "\257\301\276\377\202\223\254\247\377\1\356\362\361\377\212\377\377\377" \
+ "\377\1\321\333\331\377\202\223\254\247\377\1\303\321\316\377\275\333" \
+ "\343\342\377\1\314\330\326\377\202\223\254\247\377\1\304\322\317\377" \
+ "\212\377\377\377\377\4\366\370\367\377\225\255\251\377\223\254\247\377" \
+ "\250\274\270\377\353\333\343\342\377\1ayt\377\202Slg\377\1\267\303\301" \
+ "\377\207\333\343\342\377\1\241\260\255\377\204Slg\377\2Tlg\377\316\330" \
+ "\326\377\212\333\343\342\377\2\330\340\337\377Tmh\377\202Slg\377\1\325" \
+ "\336\335\377\367\333\343\342\377\4\326\337\336\377\225\256\251\377\223" \
+ "\254\247\377\257\302\276\377\213\377\377\377\377\4\243\271\264\377\223" \
+ "\254\247\377\232\262\255\377\331\342\341\377\276\333\343\342\377\4\242" \
+ "\270\263\377\223\254\247\377\232\261\255\377\373\374\374\377\212\377" \
+ "\377\377\377\1\271\311\306\377\202\223\254\247\377\1\321\333\332\377" \
+ "\352\333\343\342\377\1~\222\216\377\202Slg\377\1\177\222\217\377\206" \
+ "\333\343\342\377\2\320\332\330\377\\to\377\204Slg\377\1z\216\212\377" \
+ "\213\333\343\342\377\1\253\271\266\377\202Slg\377\1e|w\377\370\333\343" \
+ "\342\377\1\272\312\307\377\202\223\254\247\377\1\335\344\343\377\212" \
+ "\377\377\377\377\1\342\351\347\377\202\223\254\247\377\1\267\310\305" \
+ "\377\277\333\343\342\377\1\301\317\314\377\202\223\254\247\377\1\325" \
+ "\337\335\377\212\377\377\377\377\1\347\354\353\377\202\223\254\247\377" \
+ "\1\264\305\302\377\352\333\343\342\377\1\251\270\265\377\203Slg\377\2" \
+ "\220\242\236\377\331\342\341\377\203\333\343\342\377\2\320\331\330\377" \
+ "x\214\210\377\205Slg\377\1\264\300\276\377\212\333\343\342\377\2\331" \
+ "\342\341\377h~z\377\202Slg\377\1}\220\215\377\367\333\343\342\377\5\332" \
+ "\342\341\377\234\263\257\377\223\254\247\377\237\265\261\377\375\376" \
+ "\375\377\212\377\377\377\377\4\264\306\302\377\223\254\247\377\224\255" \
+ "\250\377\324\336\334\377\277\333\343\342\377\4\331\341\340\377\230\260" \
+ "\253\377\223\254\247\377\250\274\270\377\213\377\377\377\377\4\250\274" \
+ "\270\377\223\254\247\377\230\257\253\377\330\341\340\377\351\333\343" \
+ "\342\377\2\325\336\335\377[sn\377\203Slg\377\5i\177{\377\207\232\226" \
+ "\377\230\251\246\377\204\227\223\377^vq\377\205Slg\377\2e|w\377\332\342" \
+ "\341\377\212\333\343\342\377\1\232\252\247\377\203Slg\377\1\234\253\251" \
+ "\377\367\333\343\342\377\1\306\323\321\377\202\223\254\247\377\1\313" \
+ "\327\325\377\212\377\377\377\377\4\362\365\364\377\224\254\250\377\223" \
+ "\254\247\377\254\277\273\377\301\333\343\342\377\1\265\306\303\377\202" \
+ "\223\254\247\377\1\347\354\353\377\212\377\377\377\377\1\325\337\335" \
+ "\377\202\223\254\247\377\1\277\316\313\377\352\333\343\342\377\1\237" \
+ "\257\254\377\215Slg\377\1\244\262\260\377\211\333\343\342\377\2\320\332" \
+ "\330\377}\220\215\377\204Slg\377\1\301\314\312\377\367\333\343\342\377" \
+ "\4\250\274\270\377\223\254\247\377\225\256\251\377\366\370\367\377\212" \
+ "\377\377\377\377\1\306\323\321\377\202\223\254\247\377\1\312\326\324" \
+ "\377\301\333\343\342\377\1\322\334\333\377\202\223\254\247\377\1\271" \
+ "\311\306\377\212\377\377\377\377\4\373\374\374\377\233\262\255\377\223" \
+ "\254\247\377\241\267\262\377\352\333\343\342\377\2\331\342\341\377t\211" \
+ "\205\377\213Slg\377\1|\220\214\377\207\333\343\342\377\4\274\310\306" \
+ "\377\211\233\230\377n\204\200\377Voj\377\204Slg\377\2_vr\377\332\342" \
+ "\341\377\366\333\343\342\377\1\321\333\332\377\202\223\254\247\377\1" \
+ "\272\312\307\377\212\377\377\377\377\4\374\375\374\377\233\262\256\377" \
+ "\223\254\247\377\240\266\262\377\303\333\343\342\377\4\251\275\271\377" \
+ "\223\254\247\377\225\255\251\377\365\367\367\377\212\377\377\377\377" \
+ "\1\304\322\317\377\202\223\254\247\377\1\313\326\325\377\352\333\343" \
+ "\342\377\2\323\334\333\377o\204\200\377\211Slg\377\2d{v\377\321\332\331" \
+ "\377\207\333\343\342\377\1\227\250\245\377\207Slg\377\1\217\240\235\377" \
+ "\367\333\343\342\377\1\263\305\301\377\202\223\254\247\377\1\350\355" \
+ "\354\377\212\377\377\377\377\1\330\341\337\377\202\223\254\247\377\1" \
+ "\277\315\313\377\303\333\343\342\377\1\310\324\322\377\202\223\254\247" \
+ "\377\1\313\327\324\377\212\377\377\377\377\1\361\364\363\377\202\223" \
+ "\254\247\377\1\254\277\274\377\353\333\343\342\377\3\327\337\336\377" \
+ "\226\247\244\377Xql\377\205Slg\377\3Umh\377\216\240\235\377\323\334\333" \
+ "\377\210\333\343\342\377\1\227\250\245\377\207Slg\377\1\305\320\316\377" \
+ "\366\333\343\342\377\4\330\341\337\377\230\257\253\377\223\254\247\377" \
+ "\251\274\270\377\213\377\377\377\377\4\252\276\272\377\223\254\247\377" \
+ "\227\257\252\377\330\341\337\377\304\333\343\342\377\4\236\264\260\377" \
+ "\223\254\247\377\237\265\261\377\375\376\375\377\212\377\377\377\377" \
+ "\4\263\304\301\377\223\254\247\377\224\255\250\377\325\336\335\377\354" \
+ "\333\343\342\377\7\326\337\336\377\261\277\274\377\231\251\246\377\213" \
+ "\235\232\377\226\246\243\377\256\273\271\377\312\324\323\377\212\333" \
+ "\343\342\377\1\257\274\272\377\206\201\224\220\377\1\221\242\237\377" \
+ "\367\333\343\342\377\1\277\315\313\377\202\223\254\247\377\1\326\337" \
+ "\335\377\212\377\377\377\377\1\351\356\355\377\202\223\254\247\377\1" \
+ "\263\304\301\377\305\333\343\342\377\1\274\313\311\377\202\223\254\247" \
+ "\377\1\334\344\343\377\212\377\377\377\377\1\340\347\346\377\202\223" \
+ "\254\247\377\1\270\310\305\377\377\333\343\342\377\375\333\343\342\377" \
+ "\4\241\266\262\377\223\254\247\377\233\262\255\377\373\374\374\377\212" \
+ "\377\377\377\377\1\274\313\310\377\202\223\254\247\377\1\321\333\331" \
+ "\377\305\333\343\342\377\4\327\337\336\377\226\256\251\377\223\254\247" \
+ "\377\257\301\276\377\212\377\377\377\377\5\376\376\376\377\242\267\263" \
+ "\377\223\254\247\377\233\262\255\377\332\342\341\377\377\333\343\342" \
+ "\377\373\333\343\342\377\1\312\326\324\377\202\223\254\247\377\1\304" \
+ "\322\317\377\212\377\377\377\377\4\367\371\370\377\226\256\251\377\223" \
+ "\254\247\377\247\273\270\377\307\333\343\342\377\1\260\302\277\377\202" \
+ "\223\254\247\377\1\355\361\360\377\212\377\377\377\377\1\317\332\330" \
+ "\377\202\223\254\247\377\1\304\321\317\377\377\333\343\342\377\373\333" \
+ "\343\342\377\1\254\277\274\377\202\223\254\247\377\1\361\364\363\377" \
+ "\212\377\377\377\377\1\315\330\326\377\202\223\254\247\377\1\306\323" \
+ "\320\377\307\333\343\342\377\1\316\331\330\377\202\223\254\247\377\1" \
+ "\300\317\314\377\212\377\377\377\377\4\370\371\371\377\227\257\252\377" \
+ "\223\254\247\377\245\272\266\377\377\333\343\342\377\372\333\343\342" \
+ "\377\4\324\336\334\377\224\255\250\377\223\254\247\377\263\305\301\377" \
+ "\212\377\377\377\377\5\376\376\376\377\240\266\262\377\223\254\247\377" \
+ "\234\263\256\377\332\342\341\377\310\333\343\342\377\4\245\271\265\377" \
+ "\223\254\247\377\230\260\253\377\371\372\372\377\212\377\377\377\377" \
+ "\1\275\314\311\377\202\223\254\247\377\1\317\332\330\377\345\333\343" \
+ "\342\377\1\316\330\326\377\202\270\305\303\377\1\302\315\313\377\377" \
+ "\333\343\342\377\220\333\343\342\377\1\270\310\305\377\202\223\254\247" \
+ "\377\1\341\350\346\377\212\377\377\377\377\1\337\346\345\377\202\223" \
+ "\254\247\377\1\272\312\307\377\311\333\343\342\377\1\303\321\316\377" \
+ "\202\223\254\247\377\1\322\334\332\377\212\377\377\377\377\1\353\357" \
+ "\356\377\202\223\254\247\377\1\261\303\277\377\345\333\343\342\377\1" \
+ "\250\267\264\377\202Slg\377\1x\214\210\377\377\333\343\342\377\217\333" \
+ "\343\342\377\5\332\342\341\377\232\262\255\377\223\254\247\377\242\270" \
+ "\263\377\376\376\376\377\212\377\377\377\377\4\261\303\277\377\223\254" \
+ "\247\377\225\255\251\377\326\337\336\377\311\333\343\342\377\4\331\342" \
+ "\341\377\232\261\255\377\223\254\247\377\244\271\265\377\213\377\377" \
+ "\377\377\4\254\277\273\377\223\254\247\377\226\256\252\377\327\340\337" \
+ "\377\344\333\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377" \
+ "\377\333\343\342\377\217\333\343\342\377\1\303\321\317\377\202\223\254" \
+ "\247\377\1\317\332\330\377\212\377\377\377\377\1\357\363\362\377\202" \
+ "\223\254\247\377\1\256\301\275\377\313\333\343\342\377\1\267\310\305" \
+ "\377\202\223\254\247\377\1\343\351\350\377\212\377\377\377\377\1\331" \
+ "\342\340\377\202\223\254\247\377\1\275\314\311\377\344\333\343\342\377" \
+ "\1\250\267\264\377\202Slg\377\1x\214\210\377\377\333\343\342\377\217" \
+ "\333\343\342\377\4\245\272\266\377\223\254\247\377\227\257\252\377\370" \
+ "\372\371\377\212\377\377\377\377\1\303\321\316\377\202\223\254\247\377" \
+ "\1\315\330\326\377\313\333\343\342\377\4\324\336\334\377\224\255\250" \
+ "\377\223\254\247\377\266\307\303\377\212\377\377\377\377\4\374\375\375" \
+ "\377\235\263\257\377\223\254\247\377\236\265\260\377\344\333\343\342" \
+ "\377\1\250\267\264\377\202Slg\377\1x\214\210\377\377\333\343\342\377" \
+ "\216\333\343\342\377\1\317\332\330\377\202\223\254\247\377\1\276\315" \
+ "\312\377\212\377\377\377\377\4\372\373\373\377\231\261\254\377\223\254" \
+ "\247\377\243\270\264\377\315\333\343\342\377\4\254\277\273\377\223\254" \
+ "\247\377\224\254\250\377\363\365\365\377\212\377\377\377\377\1\310\325" \
+ "\322\377\202\223\254\247\377\1\310\324\322\377\343\333\343\342\377\1" \
+ "\250\267\264\377\202Slg\377\1r\207\203\377\232\305\320\316\377\3\306" \
+ "\320\317\377\316\327\326\377\330\340\337\377\360\333\343\342\377\1\261" \
+ "\303\277\377\202\223\254\247\377\1\353\360\357\377\212\377\377\377\377" \
+ "\1\324\336\334\377\202\223\254\247\377\1\301\317\315\377\315\333\343" \
+ "\342\377\1\312\326\324\377\202\223\254\247\377\1\307\324\321\377\212" \
+ "\377\377\377\377\4\363\366\366\377\224\255\250\377\223\254\247\377\252" \
+ "\275\272\377\343\333\343\342\377\1\250\267\264\377\240Slg\377\4[sn\377" \
+ "t\211\205\377\226\247\244\377\273\307\305\377\353\333\343\342\377\4\327" \
+ "\340\336\377\226\256\252\377\223\254\247\377\254\277\274\377\213\377" \
+ "\377\377\377\4\247\273\267\377\223\254\247\377\231\260\254\377\331\341" \
+ "\340\377\316\333\343\342\377\4\240\266\262\377\223\254\247\377\234\263" \
+ "\256\377\374\375\374\377\212\377\377\377\377\4\267\307\304\377\223\254" \
+ "\247\377\224\254\247\377\323\334\333\377\342\333\343\342\377\1\250\267" \
+ "\264\377\244Slg\377\2n\203\177\377\257\274\272\377\351\333\343\342\377" \
+ "\1\274\313\311\377\202\223\254\247\377\1\332\343\341\377\212\377\377" \
+ "\377\377\1\346\353\352\377\202\223\254\247\377\1\265\306\303\377\317" \
+ "\333\343\342\377\1\276\315\312\377\202\223\254\247\377\1\330\341\337" \
+ "\377\212\377\377\377\377\1\344\352\351\377\202\223\254\247\377\1\266" \
+ "\306\303\377\342\333\343\342\377\1\250\267\264\377\246Slg\377\2\177\222" \
+ "\217\377\324\335\334\377\347\333\343\342\377\4\236\264\260\377\223\254" \
+ "\247\377\235\264\257\377\374\375\375\377\212\377\377\377\377\1\270\310" \
+ "\305\377\202\223\254\247\377\1\323\334\333\377\317\333\343\342\377\4" \
+ "\330\340\337\377\227\257\252\377\223\254\247\377\253\276\272\377\213" \
+ "\377\377\377\377\4\245\272\266\377\223\254\247\377\231\260\254\377\331" \
+ "\341\340\377\341\333\343\342\377\1\250\267\264\377\247Slg\377\2i\200" \
+ "{\377\317\330\327\377\345\333\343\342\377\1\310\324\322\377\202\223\254" \
+ "\247\377\1\310\325\322\377\212\377\377\377\377\4\365\367\367\377\225" \
+ "\255\250\377\223\254\247\377\252\275\271\377\321\333\343\342\377\1\263" \
+ "\304\301\377\202\223\254\247\377\1\352\357\356\377\212\377\377\377\377" \
+ "\1\322\335\333\377\202\223\254\247\377\1\301\317\315\377\341\333\343" \
+ "\342\377\1\250\267\264\377\250Slg\377\2u\212\206\377\331\341\340\377" \
+ "\344\333\343\342\377\4\252\275\271\377\223\254\247\377\225\255\250\377" \
+ "\364\366\366\377\212\377\377\377\377\1\312\326\323\377\202\223\254\247" \
+ "\377\1\310\324\322\377\321\333\343\342\377\1\321\333\331\377\202\223" \
+ "\254\247\377\1\274\314\311\377\212\377\377\377\377\4\372\373\373\377" \
+ "\231\260\254\377\223\254\247\377\243\270\264\377\341\333\343\342\377" \
+ "\1\321\333\331\377\203\301\314\312\377\2\247\266\263\377[sn\377\203S" \
+ "lg\377\6r\207\203\377\216\240\235\377\247\265\263\377\264\301\277\377" \
+ "\273\307\305\377\300\314\312\377\202\301\314\312\377\7\300\314\312\377" \
+ "\273\307\305\377\265\301\277\377\250\266\264\377\220\241\236\377t\210" \
+ "\204\377Tlg\377\202Slg\377\2Zrm\377\246\264\262\377\203\301\314\312\377" \
+ "\6\274\310\306\377\266\302\300\377\254\271\267\377\223\244\241\377w\214" \
+ "\210\377Uni\377\205Slg\377\1\225\246\243\377\343\333\343\342\377\1\323" \
+ "\334\333\377\202\223\254\247\377\1\267\307\304\377\212\377\377\377\377" \
+ "\4\375\375\375\377\236\264\260\377\223\254\247\377\236\265\260\377\323" \
+ "\333\343\342\377\4\247\273\267\377\223\254\247\377\226\256\252\377\367" \
+ "\371\371\377\212\377\377\377\377\1\301\317\314\377\202\223\254\247\377" \
+ "\1\315\330\326\377\342\333\343\342\377\7\332\342\341\377\236\255\253" \
+ "\377Vni\377Slg\377Wpk\377\225\245\242\377\313\325\324\377\216\333\343" \
+ "\342\377\7\315\326\325\377\230\250\245\377Yrm\377Slg\377Uni\377\232\252" \
+ "\247\377\331\342\341\377\206\333\343\342\377\3\320\331\330\377\235\255" \
+ "\252\377[sn\377\203Slg\377\2Yql\377\321\332\331\377\342\333\343\342\377" \
+ "\1\265\306\303\377\202\223\254\247\377\1\345\353\351\377\212\377\377" \
+ "\377\377\1\333\343\342\377\202\223\254\247\377\1\274\313\311\377\323" \
+ "\333\343\342\377\1\305\322\320\377\202\223\254\247\377\1\316\331\327" \
+ "\377\212\377\377\377\377\1\356\362\361\377\202\223\254\247\377\1\256" \
+ "\301\275\377\342\333\343\342\377\1\226\246\243\377\202Slg\377\2o\205" \
+ "\201\377\313\325\324\377\222\333\343\342\377\2\316\330\326\377v\212\206" \
+ "\377\202Slg\377\1\217\241\235\377\210\333\343\342\377\2\316\330\326\377" \
+ "q\206\202\377\203Slg\377\1\230\250\245\377\341\333\343\342\377\4\331" \
+ "\341\340\377\231\260\254\377\223\254\247\377\246\272\266\377\213\377" \
+ "\377\377\377\4\256\300\275\377\223\254\247\377\226\256\252\377\327\340" \
+ "\336\377\323\333\343\342\377\5\332\342\341\377\234\263\256\377\223\254" \
+ "\247\377\241\267\262\377\376\376\376\377\212\377\377\377\377\4\260\302" \
+ "\276\377\223\254\247\377\225\255\251\377\326\337\336\377\340\333\343" \
+ "\342\377\1\262\277\275\377\202Slg\377\2q\207\202\377\325\335\334\377" \
+ "\224\333\343\342\377\2\327\337\336\377v\212\206\377\202Slg\377\1\254" \
+ "\272\270\377\210\333\343\342\377\2\321\333\331\377g}y\377\202Slg\377" \
+ "\1i\177{\377\341\333\343\342\377\1\301\317\314\377\202\223\254\247\377" \
+ "\1\323\335\333\377\212\377\377\377\377\1\354\361\360\377\202\223\254" \
+ "\247\377\1\261\303\277\377\325\333\343\342\377\1\272\311\307\377\202" \
+ "\223\254\247\377\1\337\346\345\377\212\377\377\377\377\1\335\345\344" \
+ "\377\202\223\254\247\377\1\272\312\307\377\337\333\343\342\377\5\327" \
+ "\337\336\377]up\377Slg\377Voj\377\306\320\317\377\226\333\343\342\377" \
+ "\5\312\324\323\377Xpk\377Slg\377Yrm\377\324\335\334\377\210\333\343\342" \
+ "\377\1\261\277\274\377\203Slg\377\1\317\331\327\377\340\333\343\342\377" \
+ "\4\243\270\264\377\223\254\247\377\231\260\254\377\372\373\373\377\212" \
+ "\377\377\377\377\1\277\316\313\377\202\223\254\247\377\1\317\332\330" \
+ "\377\325\333\343\342\377\4\325\337\335\377\225\255\251\377\223\254\247" \
+ "\377\261\303\300\377\212\377\377\377\377\5\376\376\376\377\240\266\261" \
+ "\377\223\254\247\377\234\263\257\377\332\342\341\377\336\333\343\342" \
+ "\377\1\254\272\270\377\202Slg\377\1\201\224\220\377\230\333\343\342\377" \
+ "\1\206\230\225\377\202Slg\377\1\246\265\262\377\211\333\343\342\377\1" \
+ "g}y\377\202Slg\377\1\257\274\272\377\337\333\343\342\377\1\314\330\326" \
+ "\377\202\223\254\247\377\1\302\320\315\377\212\377\377\377\377\4\371" \
+ "\372\372\377\230\257\253\377\223\254\247\377\245\272\266\377\327\333" \
+ "\343\342\377\1\256\301\275\377\202\223\254\247\377\1\360\363\362\377" \
+ "\212\377\377\377\377\1\314\327\325\377\202\223\254\247\377\1\306\323" \
+ "\320\377\336\333\343\342\377\1x\215\211\377\202Slg\377\1\254\272\270" \
+ "\377\230\333\343\342\377\1\257\274\272\377\202Slg\377\1r\207\203\377" \
+ "\211\333\343\342\377\1\214\235\232\377\202Slg\377\1\237\257\254\377\337" \
+ "\333\343\342\377\1\256\301\275\377\202\223\254\247\377\1\357\362\362" \
+ "\377\212\377\377\377\377\1\321\333\331\377\202\223\254\247\377\1\303" \
+ "\321\317\377\327\333\343\342\377\1\314\330\326\377\202\223\254\247\377" \
+ "\1\303\321\316\377\212\377\377\377\377\4\366\370\370\377\225\256\251" \
+ "\377\223\254\247\377\247\273\270\377\336\333\343\342\377\1\\so\377\202" \
+ "Slg\377\1\277\313\311\377\230\333\343\342\377\1\301\315\313\377\202S" \
+ "lg\377\2Vni\377\332\342\341\377\210\333\343\342\377\1\244\263\260\377" \
+ "\202Slg\377\1\226\246\243\377\336\333\343\342\377\4\325\337\335\377\225" \
+ "\255\251\377\223\254\247\377\260\302\277\377\213\377\377\377\377\4\243" \
+ "\271\264\377\223\254\247\377\232\262\255\377\332\342\341\377\330\333" \
+ "\343\342\377\4\243\270\264\377\223\254\247\377\232\261\254\377\373\374" \
+ "\373\377\212\377\377\377\377\1\272\312\307\377\202\223\254\247\377\1" \
+ "\321\333\332\377\334\333\343\342\377\1\326\336\335\377\203Slg\377\1\311" \
+ "\324\322\377\230\333\343\342\377\1\314\325\324\377\203Slg\377\1\317\331" \
+ "\327\377\210\333\343\342\377\1\256\274\271\377\202Slg\377\1\215\236\233" \
+ "\377\336\333\343\342\377\1\272\311\307\377\202\223\254\247\377\1\336" \
+ "\345\344\377\212\377\377\377\377\1\342\351\347\377\202\223\254\247\377" \
+ "\1\270\310\305\377\331\333\343\342\377\1\301\317\314\377\202\223\254" \
+ "\247\377\1\325\336\334\377\212\377\377\377\377\1\350\355\354\377\202" \
+ "\223\254\247\377\1\263\304\301\377\334\333\343\342\377\1\307\322\320" \
+ "\377\203Slg\377\1\276\311\307\377\230\333\343\342\377\1\302\315\313\377" \
+ "\203Slg\377\1\301\314\312\377\210\333\343\342\377\1\261\276\274\377\202" \
+ "Slg\377\1\215\237\234\377\335\333\343\342\377\5\332\342\341\377\234\263" \
+ "\256\377\223\254\247\377\240\266\262\377\376\376\376\377\212\377\377" \
+ "\377\377\4\265\306\302\377\223\254\247\377\224\255\250\377\324\336\334" \
+ "\377\331\333\343\342\377\6\331\341\340\377\231\260\254\377\222\253\247" \
+ "\377\237\265\261\377\351\356\355\377\370\371\371\377\211\377\377\377" \
+ "\377\4\251\275\271\377\223\254\247\377\227\257\252\377\330\341\337\377" \
+ "\333\333\343\342\377\1\303\316\314\377\203Slg\377\1\251\267\265\377\230" \
+ "\333\343\342\377\1\257\274\272\377\203Slg\377\1\275\310\306\377\210\333" \
+ "\343\342\377\1\243\262\257\377\202Slg\377\1\224\245\242\377\335\333\343" \
+ "\342\377\1\305\322\320\377\202\223\254\247\377\1\315\330\326\377\212" \
+ "\377\377\377\377\4\362\365\364\377\224\254\250\377\223\254\247\377\254" \
+ "\277\274\377\333\333\343\342\377\2\265\306\303\377\222\254\246\377\203" \
+ "\223\254\247\377\7\233\262\255\377\252\276\272\377\271\311\306\377\310" \
+ "\325\322\377\330\341\337\377\347\354\353\377\366\370\370\377\202\377" \
+ "\377\377\377\1\327\340\336\377\202\223\254\247\377\1\277\315\313\377" \
+ "\333\333\343\342\377\1\321\332\331\377\203Slg\377\1|\220\214\377\230" \
+ "\333\343\342\377\1\200\223\220\377\203Slg\377\1\313\325\323\377\210\333" \
+ "\343\342\377\1\225\245\242\377\202Slg\377\1\234\253\251\377\335\333\343" \
+ "\342\377\4\247\273\267\377\223\254\247\377\226\256\251\377\366\370\370" \
+ "\377\212\377\377\377\377\1\306\323\321\377\202\223\254\247\377\1\312" \
+ "\326\324\377\333\333\343\342\377\1\322\334\333\377\202\223\254\247\377" \
+ "\5\245\271\266\377\307\324\321\377\267\310\304\377\247\274\270\377\230" \
+ "\260\253\377\204\223\254\247\377\6\231\261\254\377\250\274\270\377\266" \
+ "\306\303\377\226\256\251\377\222\254\247\377\236\265\261\377\334\333" \
+ "\343\342\377\1Woj\377\202Slg\377\2Umh\377\277\312\310\377\226\333\343" \
+ "\342\377\2\300\314\312\377Uni\377\202Slg\377\2Tlg\377\330\340\337\377" \
+ "\210\333\343\342\377\1\177\223\217\377\202Slg\377\1\252\270\266\377\334" \
+ "\333\343\342\377\1\321\333\331\377\202\223\254\247\377\1\273\312\307" \
+ "\377\212\377\377\377\377\4\374\375\374\377\233\262\256\377\223\254\247" \
+ "\377\241\266\262\377\335\333\343\342\377\4\245\271\265\377\223\254\247" \
+ "\377\224\254\247\377\365\367\367\377\203\377\377\377\377\7\365\367\367" \
+ "\377\345\353\352\377\325\337\335\377\306\323\320\377\267\307\304\377" \
+ "\247\273\267\377\230\260\253\377\202\223\254\247\377\2\222\253\247\377" \
+ "\312\326\324\377\333\333\343\342\377\1y\215\211\377\203Slg\377\2f}x\377" \
+ "\316\330\326\377\224\333\343\342\377\2\317\330\327\377g~y\377\203Slg" \
+ "\377\1s\210\204\377\210\333\343\342\377\2\316\327\326\377Vni\377\202" \
+ "Slg\377\1\276\311\307\377\334\333\343\342\377\1\263\304\301\377\202\223" \
+ "\254\247\377\1\350\356\355\377\212\377\377\377\377\1\330\341\337\377" \
+ "\202\223\254\247\377\1\277\315\313\377\335\333\343\342\377\1\310\324" \
+ "\322\377\202\222\254\247\377\1\310\325\323\377\212\377\377\377\377\4" \
+ "\347\355\354\377\223\253\246\377\222\253\246\377\250\274\267\377\202" \
+ "\333\343\342\377\2\306\323\321\377\331\340\337\377\327\333\343\342\377" \
+ "\1\250\266\264\377\204Slg\377\2ayt\377\274\310\306\377\222\333\343\342" \
+ "\377\2\275\310\306\377czu\377\204Slg\377\1\243\262\257\377\210\333\343" \
+ "\342\377\1\223\244\241\377\203Slg\377\1\321\333\331\377\333\333\343\342" \
+ "\377\4\330\340\337\377\227\257\252\377\223\254\247\377\251\275\271\377" \
+ "\213\377\377\377\377\4\252\276\272\377\223\254\247\377\230\257\253\377" \
+ "\330\341\337\377\336\333\343\342\377\4\232\261\254\377\223\254\247\377" \
+ "\232\260\254\377\375\375\375\377\212\377\377\377\377\7\256\301\274\377" \
+ "\223\254\247\377\223\253\247\377\311\325\323\377\234\264\256\377\223" \
+ "\254\247\377\277\316\313\377\327\333\343\342\377\2\323\334\333\377^u" \
+ "q\377\205Slg\377\3}\221\215\377\270\305\303\377\330\340\337\377\214\333" \
+ "\343\342\377\3\330\340\337\377\270\304\302\377}\220\215\377\205Slg\377" \
+ "\2]tp\377\321\332\331\377\207\333\343\342\377\2\237\256\253\377Tlg\377" \
+ "\202Slg\377\1h~z\377\334\333\343\342\377\1\276\315\312\377\202\223\254" \
+ "\247\377\1\327\340\336\377\212\377\377\377\377\1\351\356\355\377\202" \
+ "\223\254\247\377\1\263\305\301\377\337\333\343\342\377\4\272\312\310" \
+ "\377\223\253\247\377\222\253\246\377\333\343\342\377\212\377\377\377" \
+ "\377\7\341\350\347\377\222\254\246\377\223\253\247\377\264\305\302\377" \
+ "\230\257\253\377\223\254\247\377\241\267\263\377\330\333\343\342\377" \
+ "\1\251\270\265\377\207Slg\377\6Yrm\377z\216\212\377\220\242\236\377\245" \
+ "\264\261\377\263\300\276\377\270\305\303\377\202\276\312\310\377\6\271" \
+ "\305\303\377\263\300\276\377\246\264\262\377\220\242\236\377y\216\212" \
+ "\377Yql\377\207Slg\377\1\250\267\264\377\205\333\343\342\377\3\331\342" \
+ "\341\377\271\306\304\377\204\226\223\377\204Slg\377\1\212\234\231\377" \
+ "\334\333\343\342\377\4\240\266\262\377\223\254\247\377\233\262\256\377" \
+ "\374\374\374\377\212\377\377\377\377\1\274\313\310\377\202\223\254\247" \
+ "\377\1\321\333\332\377\337\333\343\342\377\4\327\340\336\377\224\254" \
+ "\250\377\223\254\247\377\250\273\267\377\212\377\377\377\377\5\376\376" \
+ "\376\377\236\264\257\377\223\254\247\377\227\257\252\377\263\304\302" \
+ "\377\202\223\254\247\377\1\313\327\325\377\330\333\343\342\377\1}\221" \
+ "\215\377\232Slg\377\1~\222\216\377\205\333\343\342\377\2\325\336\335" \
+ "\377`xs\377\206Slg\377\1\256\274\271\377\333\333\343\342\377\1\312\326" \
+ "\324\377\202\223\254\247\377\1\306\323\320\377\212\377\377\377\377\4" \
+ "\367\371\370\377\226\256\251\377\223\254\247\377\247\273\270\377\341" \
+ "\333\343\342\377\4\255\277\274\377\223\253\246\377\222\253\246\377\354" \
+ "\361\360\377\212\377\377\377\377\4\317\332\330\377\222\253\246\377\223" \
+ "\253\246\377\274\314\311\377\202\223\254\247\377\1\254\277\274\377\330" \
+ "\333\343\342\377\2\327\340\337\377}\221\215\377\230Slg\377\2}\221\215" \
+ "\377\330\340\337\377\205\333\343\342\377\1\323\334\333\377\206Slg\377" \
+ "\2[sn\377\327\337\336\377\333\333\343\342\377\4\254\277\273\377\223\254" \
+ "\247\377\224\254\250\377\362\365\364\377\212\377\377\377\377\1\315\330" \
+ "\326\377\202\223\254\247\377\1\306\323\321\377\341\333\343\342\377\4" \
+ "\317\331\330\377\222\253\247\377\223\253\246\377\273\313\310\377\212" \
+ "\377\377\377\377\10\370\372\371\377\225\255\251\377\223\254\247\377\240" \
+ "\266\262\377\251\274\271\377\223\254\247\377\225\255\250\377\324\336" \
+ "\335\377\330\333\343\342\377\2\330\341\340\377\213\235\232\377\226Sl" \
+ "g\377\2\211\234\230\377\330\340\337\377\206\333\343\342\377\1\323\334" \
+ "\333\377\206Slg\377\1\212\234\231\377\333\333\343\342\377\4\324\336\334" \
+ "\377\224\255\250\377\223\254\247\377\264\305\302\377\212\377\377\377" \
+ "\377\5\376\376\376\377\240\266\262\377\223\254\247\377\234\263\257\377" \
+ "\332\342\341\377\342\333\343\342\377\4\240\266\262\377\223\254\247\377" \
+ "\225\255\250\377\371\372\372\377\203\377\377\377\377\3\367\371\371\377" \
+ "\300\317\314\377\273\313\307\377\204\377\377\377\377\4\271\312\306\377" \
+ "\223\254\246\377\223\254\247\377\276\314\311\377\202\223\254\247\377" \
+ "\1\271\311\305\377\332\333\343\342\377\2\270\304\302\377e|w\377\222S" \
+ "lg\377\2d{v\377\267\303\301\377\211\333\343\342\377\206\322\333\332\377" \
+ "\1\327\340\337\377\333\333\343\342\377\1\267\310\305\377\202\223\254" \
+ "\247\377\1\342\350\347\377\212\377\377\377\377\1\337\346\345\377\202" \
+ "\223\254\247\377\1\272\312\307\377\343\333\343\342\377\4\303\321\317" \
+ "\377\222\254\247\377\223\254\246\377\320\332\330\377\203\377\377\377" \
+ "\377\4\373\374\374\377\233\262\255\377\224\255\250\377\363\366\365\377" \
+ "\203\377\377\377\377\10\354\360\357\377\222\253\246\377\222\254\247\377" \
+ "\255\300\274\377\233\262\255\377\223\254\247\377\233\262\255\377\332" \
+ "\342\341\377\332\333\343\342\377\3\327\337\336\377\251\270\265\377q\207" \
+ "\202\377\216Slg\377\3q\206\202\377\251\267\265\377\326\337\336\377\353" \
+ "\333\343\342\377\5\331\342\341\377\232\261\255\377\223\254\247\377\243" \
+ "\270\264\377\376\376\376\377\212\377\377\377\377\4\261\303\277\377\223" \
+ "\254\247\377\225\255\251\377\326\337\336\377\343\333\343\342\377\4\332" \
+ "\342\341\377\227\257\252\377\223\254\247\377\235\264\257\377\204\377" \
+ "\377\377\377\3\304\321\317\377\223\254\247\377\307\324\321\377\204\377" \
+ "\377\377\377\4\246\273\267\377\223\254\247\377\222\253\247\377\222\253" \
+ "\246\377\202\223\254\247\377\1\304\321\317\377\335\333\343\342\377\6" \
+ "\306\321\317\377\247\265\263\377\212\234\231\377o\205\201\377dzv\377" \
+ "[sn\377\202Tlg\377\6[sn\377dzv\377o\205\201\377\212\234\231\377\247\265" \
+ "\263\377\306\320\317\377\356\333\343\342\377\1\303\320\316\377\202\223" \
+ "\254\247\377\1\320\333\331\377\212\377\377\377\377\1\357\363\362\377" \
+ "\202\223\254\247\377\1\256\301\275\377\345\333\343\342\377\4\265\306" \
+ "\303\377\223\254\247\377\222\254\246\377\342\351\347\377\203\377\377" \
+ "\377\377\4\361\364\363\377\224\255\250\377\234\263\257\377\374\375\375" \
+ "\377\203\377\377\377\377\4\333\343\341\377\223\253\246\377\222\254\246" \
+ "\377\221\254\246\377\202\223\254\247\377\1\246\272\266\377\343\333\343" \
+ "\342\377\2\332\342\341\377\331\342\341\377\364\333\343\342\377\4\245" \
+ "\271\265\377\223\254\247\377\230\257\253\377\371\372\372\377\212\377" \
+ "\377\377\377\1\303\321\316\377\202\223\254\247\377\1\315\330\326\377" \
+ "\345\333\343\342\377\4\324\336\334\377\223\253\247\377\223\254\247\377" \
+ "\257\302\275\377\204\377\377\377\377\3\262\304\301\377\223\254\247\377" \
+ "\330\341\337\377\203\377\377\377\377\5\375\375\375\377\231\260\253\377" \
+ "\223\254\247\377\230\260\253\377\257\301\276\377\202\223\254\247\377" \
+ "\1\317\332\330\377\377\333\343\342\377\330\333\343\342\377\1\316\331" \
+ "\330\377\202\223\254\247\377\1\277\316\313\377\212\377\377\377\377\4" \
+ "\372\373\373\377\232\261\254\377\223\254\247\377\243\270\264\377\347" \
+ "\333\343\342\377\4\247\273\270\377\222\253\246\377\223\253\247\377\362" \
+ "\365\364\377\203\377\377\377\377\3\340\347\345\377\223\254\247\377\253" \
+ "\276\272\377\204\377\377\377\377\4\307\323\321\377\223\253\247\377\223" \
+ "\253\246\377\276\314\312\377\202\223\254\247\377\1\261\303\300\377\377" \
+ "\333\343\342\377\330\333\343\342\377\1\260\302\277\377\202\223\254\247" \
+ "\377\1\354\361\360\377\212\377\377\377\377\1\324\336\334\377\202\223" \
+ "\254\247\377\1\301\317\315\377\347\333\343\342\377\1\312\326\324\377" \
+ "\202\223\253\246\377\1\302\321\316\377\204\377\377\377\377\3\242\267" \
+ "\263\377\223\254\247\377\351\356\355\377\203\377\377\377\377\10\364\367" \
+ "\366\377\223\253\247\377\223\254\247\377\245\271\266\377\243\270\264" \
+ "\377\223\254\247\377\227\257\252\377\327\340\337\377\377\333\343\342" \
+ "\377\326\333\343\342\377\4\327\337\336\377\226\256\251\377\223\254\247" \
+ "\377\256\300\275\377\213\377\377\377\377\4\247\273\267\377\223\254\247" \
+ "\377\231\260\254\377\331\341\340\377\350\333\343\342\377\4\234\262\256" \
+ "\377\223\254\247\377\227\257\252\377\374\374\374\377\203\377\377\377" \
+ "\377\3\316\332\327\377\223\254\247\377\274\314\310\377\204\377\377\377" \
+ "\377\4\261\304\300\377\222\253\246\377\222\254\247\377\274\313\311\377" \
+ "\202\223\254\247\377\1\275\314\311\377\356\333\343\342\377\1\277\313" \
+ "\311\377\202\260\275\273\377\1\311\323\322\377\343\333\343\342\377\1" \
+ "\274\313\310\377\202\223\254\247\377\1\333\343\342\377\212\377\377\377" \
+ "\377\1\346\353\352\377\202\223\254\247\377\1\266\306\303\377\351\333" \
+ "\343\342\377\4\276\314\312\377\223\254\246\377\222\253\246\377\330\341" \
+ "\337\377\203\377\377\377\377\4\370\371\371\377\227\257\252\377\226\257" \
+ "\252\377\367\371\370\377\203\377\377\377\377\7\345\353\352\377\223\254" \
+ "\246\377\223\253\246\377\261\303\301\377\231\261\254\377\223\254\247" \
+ "\377\236\265\261\377\356\333\343\342\377\1\202\225\221\377\202Slg\377" \
+ "\1\243\262\257\377\343\333\343\342\377\4\236\264\260\377\223\254\247" \
+ "\377\236\264\260\377\375\375\375\377\212\377\377\377\377\4\270\310\305" \
+ "\377\223\254\247\377\224\254\247\377\323\335\333\377\351\333\343\342" \
+ "\377\4\330\341\337\377\224\255\251\377\223\254\247\377\244\271\264\377" \
+ "\204\377\377\377\377\3\275\314\311\377\223\254\247\377\315\331\326\377" \
+ "\204\377\377\377\377\7\240\266\262\377\223\254\247\377\226\255\251\377" \
+ "\265\306\302\377\225\255\250\377\255\277\274\377\327\340\337\377\355" \
+ "\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\342\333" \
+ "\343\342\377\1\307\324\322\377\202\223\254\247\377\1\312\326\323\377" \
+ "\212\377\377\377\377\4\365\367\367\377\225\255\250\377\223\254\247\377" \
+ "\252\275\272\377\353\333\343\342\377\4\260\301\276\377\223\253\246\377" \
+ "\222\253\247\377\351\356\355\377\203\377\377\377\377\4\352\357\356\377" \
+ "\223\254\247\377\241\266\262\377\376\376\376\377\203\377\377\377\377" \
+ "\1\323\335\333\377\202\223\254\246\377\2\275\314\311\377\324\336\334" \
+ "\377\357\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\342\333\343\342\377\4\251\275\271\377\223\254\247\377\225\255\250\377" \
+ "\364\367\366\377\212\377\377\377\377\1\312\326\323\377\202\223\254\247" \
+ "\377\1\310\324\322\377\353\333\343\342\377\4\321\333\331\377\223\254" \
+ "\246\377\222\254\246\377\266\307\304\377\204\377\377\377\377\3\253\277" \
+ "\273\377\223\254\247\377\336\346\344\377\203\377\377\377\377\4\372\373" \
+ "\373\377\226\257\251\377\223\254\247\377\236\264\260\377\360\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\341\333\343\342" \
+ "\377\1\322\334\333\377\202\223\254\247\377\1\270\310\305\377\212\377" \
+ "\377\377\377\4\375\375\375\377\236\264\260\377\223\254\247\377\236\265" \
+ "\260\377\355\333\343\342\377\4\243\270\264\377\223\254\247\377\224\255" \
+ "\247\377\366\370\370\377\203\377\377\377\377\3\331\342\340\377\223\254" \
+ "\247\377\261\303\300\377\204\377\377\377\377\4\276\314\312\377\223\253" \
+ "\246\377\223\253\247\377\314\330\326\377\331\333\343\342\377\6\331\341" \
+ "\340\377\306\320\317\377\256\273\271\377\237\257\254\377\230\250\245" \
+ "\377\220\242\236\377\220\216\237\234\377\1g~y\377\202Slg\377\1\243\262" \
+ "\257\377\341\333\343\342\377\1\265\306\302\377\202\223\254\247\377\1" \
+ "\346\353\352\377\212\377\377\377\377\1\333\343\342\377\202\223\254\247" \
+ "\377\1\275\314\311\377\355\333\343\342\377\4\306\323\320\377\222\253" \
+ "\246\377\223\254\246\377\313\327\325\377\203\377\377\377\377\4\374\375" \
+ "\375\377\234\263\257\377\223\254\247\377\357\363\362\377\203\377\377" \
+ "\377\377\4\357\363\362\377\223\254\247\377\223\253\246\377\253\275\272" \
+ "\377\327\333\343\342\377\3\271\306\304\377\205\230\224\377Yrm\377\230" \
+ "Slg\377\1\243\262\257\377\340\333\343\342\377\4\331\341\340\377\230\260" \
+ "\253\377\223\254\247\377\247\273\267\377\213\377\377\377\377\4\256\300" \
+ "\275\377\223\254\247\377\226\256\252\377\327\340\337\377\355\333\343" \
+ "\342\377\5\332\342\341\377\230\260\254\377\223\254\247\377\233\262\255" \
+ "\377\376\376\376\377\203\377\377\377\377\3\307\324\321\377\223\254\247" \
+ "\377\302\320\315\377\204\377\377\377\377\1\245\272\265\377\202\223\254" \
+ "\247\377\1\325\337\335\377\324\333\343\342\377\2\317\330\327\377\200" \
+ "\224\220\377\233Slg\377\1\243\262\257\377\340\333\343\342\377\1\300\316" \
+ "\314\377\202\223\254\247\377\1\324\336\334\377\212\377\377\377\377\1" \
+ "\354\361\360\377\202\223\254\247\377\1\261\303\277\377\357\333\343\342" \
+ "\377\1\270\311\306\377\202\222\254\247\377\1\336\346\344\377\203\377" \
+ "\377\377\377\13\363\366\365\377\224\255\250\377\231\261\254\377\372\373" \
+ "\373\377\374\375\375\377\330\341\337\377\252\276\272\377\223\254\247" \
+ "\377\222\254\246\377\223\253\247\377\271\311\306\377\323\333\343\342" \
+ "\377\2\320\331\330\377h\177z\377\234Slg\377\1\243\262\257\377\340\333" \
+ "\343\342\377\4\242\267\263\377\223\254\247\377\232\261\254\377\372\373" \
+ "\373\377\212\377\377\377\377\1\277\316\313\377\202\223\254\247\377\1" \
+ "\317\332\330\377\357\333\343\342\377\4\326\337\336\377\224\254\247\377" \
+ "\223\254\247\377\252\276\272\377\204\377\377\377\377\13\266\307\303\377" \
+ "\223\254\247\377\260\302\276\377\233\263\256\377\223\254\247\377\234" \
+ "\263\257\377\306\323\320\377\236\265\260\377\223\254\247\377\234\263" \
+ "\256\377\332\342\341\377\322\333\343\342\377\1x\214\210\377\235Slg\377" \
+ "\1\243\262\257\377\337\333\343\342\377\1\314\327\325\377\202\223\254" \
+ "\247\377\1\303\321\316\377\212\377\377\377\377\4\371\372\372\377\230" \
+ "\257\253\377\223\254\247\377\245\272\266\377\361\333\343\342\377\4\252" \
+ "\276\272\377\222\254\246\377\223\253\246\377\357\362\362\377\202\377" \
+ "\377\377\377\11\341\350\346\377\253\276\273\377\223\253\247\377\223\254" \
+ "\246\377\253\276\272\377\330\341\340\377\374\375\375\377\377\377\377" \
+ "\377\315\330\326\377\202\223\254\247\377\1\305\322\320\377\321\333\343" \
+ "\342\377\1\267\304\302\377\212Slg\377\3Xpk\377byt\377k\201|\377\216l" \
+ "\201}\377\1[sn\377\202Slg\377\1\243\262\257\377\337\333\343\342\377\1" \
+ "\256\300\275\377\202\223\254\247\377\1\357\363\362\377\212\377\377\377" \
+ "\377\1\321\333\331\377\202\223\254\247\377\1\304\321\317\377\361\333" \
+ "\343\342\377\12\315\330\326\377\222\254\246\377\222\254\247\377\272\312" \
+ "\307\377\317\332\330\377\242\270\263\377\223\254\247\377\227\257\252" \
+ "\377\275\314\311\377\352\357\356\377\204\377\377\377\377\4\366\370\370" \
+ "\377\226\256\251\377\223\254\247\377\247\273\267\377\321\333\343\342" \
+ "\377\1\204\226\223\377\205Slg\377\5]up\377\212\234\231\377\270\305\303" \
+ "\377\315\326\325\377\327\337\336\377\221\333\343\342\377\1\202\225\221" \
+ "\377\202Slg\377\1\243\262\257\377\336\333\343\342\377\4\325\336\335\377" \
+ "\225\255\250\377\223\254\247\377\261\303\300\377\213\377\377\377\377" \
+ "\4\243\271\264\377\223\254\247\377\233\262\255\377\332\342\341\377\362" \
+ "\333\343\342\377\7\236\264\261\377\223\254\247\377\222\253\246\377\223" \
+ "\254\247\377\241\267\263\377\316\331\327\377\367\371\371\377\207\377" \
+ "\377\377\377\1\274\313\310\377\202\223\254\247\377\1\320\333\331\377" \
+ "\320\333\343\342\377\1`ws\377\204Slg\377\2\220\241\236\377\330\341\340" \
+ "\377\225\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\336\333\343\342\377\1\271\311\306\377\202\223\254\247\377\1\337\346" \
+ "\345\377\212\377\377\377\377\1\342\351\347\377\202\223\254\247\377\1" \
+ "\270\310\305\377\363\333\343\342\377\5\301\317\315\377\222\253\246\377" \
+ "\223\253\247\377\300\317\314\377\376\376\376\377\211\377\377\377\377" \
+ "\1\351\356\355\377\202\223\254\247\377\1\262\304\301\377\317\333\343" \
+ "\342\377\1\322\333\332\377\204Slg\377\2{\217\213\377\331\342\341\377" \
+ "\226\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\335" \
+ "\333\343\342\377\5\332\342\341\377\234\262\256\377\223\254\247\377\241" \
+ "\267\262\377\376\376\376\377\212\377\377\377\377\4\265\306\302\377\223" \
+ "\254\247\377\224\255\250\377\324\336\334\377\363\333\343\342\377\4\331" \
+ "\341\340\377\231\260\254\377\223\254\247\377\246\272\266\377\213\377" \
+ "\377\377\377\4\252\275\271\377\223\254\247\377\227\257\252\377\330\340" \
+ "\337\377\316\333\343\342\377\1\307\321\320\377\204Slg\377\1\311\323\322" \
+ "\377\227\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377" \
+ "\335\333\343\342\377\1\305\322\320\377\202\223\254\247\377\1\315\331" \
+ "\326\377\212\377\377\377\377\4\362\365\364\377\224\254\250\377\223\254" \
+ "\247\377\254\277\274\377\365\333\343\342\377\1\266\306\303\377\202\223" \
+ "\254\247\377\1\345\353\352\377\212\377\377\377\377\1\330\341\337\377" \
+ "\202\223\254\247\377\1\276\315\312\377\316\333\343\342\377\1\303\316" \
+ "\314\377\203Slg\377\2Zrm\377\332\342\341\377\227\333\343\342\377\1\267" \
+ "\303\301\377\202\243\262\257\377\1\304\316\315\377\335\333\343\342\377" \
+ "\4\247\273\267\377\223\254\247\377\226\256\252\377\367\371\370\377\212" \
+ "\377\377\377\377\1\306\323\321\377\202\223\254\247\377\1\313\326\325" \
+ "\377\365\333\343\342\377\1\323\334\333\377\202\223\254\247\377\1\267" \
+ "\310\305\377\212\377\377\377\377\4\374\374\374\377\233\262\256\377\223" \
+ "\254\247\377\240\266\261\377\316\333\343\342\377\1\322\333\332\377\203" \
+ "Slg\377\1q\207\202\377\370\333\343\342\377\1\320\333\331\377\202\223" \
+ "\254\247\377\1\274\313\310\377\212\377\377\377\377\4\374\375\374\377" \
+ "\234\263\256\377\223\254\247\377\241\266\262\377\367\333\343\342\377" \
+ "\4\252\275\271\377\223\254\247\377\225\255\250\377\364\366\366\377\212" \
+ "\377\377\377\377\1\306\323\321\377\202\223\254\247\377\1\312\326\324" \
+ "\377\316\333\343\342\377\1[sn\377\202Slg\377\1{\217\213\377\370\333\343" \
+ "\342\377\1\262\304\300\377\202\223\254\247\377\1\351\356\355\377\212" \
+ "\377\377\377\377\1\330\341\337\377\202\223\254\247\377\1\277\316\313" \
+ "\377\367\333\343\342\377\1\310\324\322\377\202\223\254\247\377\1\311" \
+ "\325\323\377\212\377\377\377\377\4\362\365\364\377\224\254\250\377\223" \
+ "\254\247\377\253\276\273\377\316\333\343\342\377\1y\215\211\377\202S" \
+ "lg\377\1o\204\200\377\367\333\343\342\377\4\330\340\337\377\227\257\252" \
+ "\377\223\254\247\377\253\276\272\377\213\377\377\377\377\4\252\276\272" \
+ "\377\223\254\247\377\230\257\253\377\330\341\337\377\370\333\343\342" \
+ "\377\4\236\265\260\377\223\254\247\377\236\264\257\377\375\375\375\377" \
+ "\212\377\377\377\377\4\265\306\302\377\223\254\247\377\224\255\250\377" \
+ "\324\335\334\377\315\333\343\342\377\1\270\304\302\377\202Slg\377\2U" \
+ "ni\377\320\332\330\377\366\333\343\342\377\1\276\315\312\377\202\223" \
+ "\254\247\377\1\330\341\337\377\212\377\377\377\377\1\351\356\355\377" \
+ "\202\223\254\247\377\1\264\305\302\377\371\333\343\342\377\1\275\314" \
+ "\311\377\202\223\254\247\377\1\333\343\341\377\212\377\377\377\377\1" \
+ "\342\351\347\377\202\223\254\247\377\1\267\307\304\377\316\333\343\342" \
+ "\377\1q\206\202\377\202Slg\377\1\233\253\250\377\227\333\343\342\377" \
+ "\1\205\230\224\377\202Voj\377\1\244\263\260\377\333\333\343\342\377\4" \
+ "\237\265\261\377\223\254\247\377\234\263\256\377\374\375\374\377\212" \
+ "\377\377\377\377\1\274\313\310\377\202\223\254\247\377\1\321\333\332" \
+ "\377\371\333\343\342\377\4\327\340\336\377\226\256\252\377\223\254\247" \
+ "\377\255\300\274\377\213\377\377\377\377\4\243\271\264\377\223\254\247" \
+ "\377\232\261\255\377\331\342\341\377\315\333\343\342\377\5\313\325\323" \
+ "\377ayt\377Slg\377Xpk\377\305\317\316\377\226\333\343\342\377\1\202\225" \
+ "\221\377\202Slg\377\1\243\262\257\377\332\333\343\342\377\1\311\325\323" \
+ "\377\202\223\254\247\377\1\310\325\322\377\212\377\377\377\377\4\367" \
+ "\371\370\377\226\256\251\377\223\254\247\377\250\274\270\377\373\333" \
+ "\343\342\377\1\261\303\277\377\202\223\254\247\377\1\356\361\361\377" \
+ "\212\377\377\377\377\1\322\334\332\377\202\223\254\247\377\1\303\320" \
+ "\316\377\316\333\343\342\377\5\305\317\316\377]up\377Slg\377^vq\377\275" \
+ "\311\307\377\225\333\343\342\377\1\202\225\221\377\202Slg\377\1\243\262" \
+ "\257\377\332\333\343\342\377\4\253\276\273\377\223\254\247\377\224\255" \
+ "\250\377\363\366\366\377\212\377\377\377\377\1\315\330\326\377\202\223" \
+ "\254\247\377\1\306\323\321\377\373\333\343\342\377\1\317\332\330\377" \
+ "\202\223\254\247\377\1\300\317\314\377\212\377\377\377\377\4\371\373" \
+ "\372\377\230\260\253\377\223\254\247\377\244\271\265\377\317\333\343" \
+ "\342\377\6\314\325\324\377}\221\215\377Slg\377Tlg\377\206\230\225\377" \
+ "\277\312\310\377\223\333\343\342\377\1\202\225\221\377\202Slg\377\1\243" \
+ "\262\257\377\331\333\343\342\377\4\323\335\334\377\224\255\250\377\223" \
+ "\254\247\377\267\307\304\377\212\377\377\377\377\5\376\376\376\377\240" \
+ "\266\262\377\223\254\247\377\235\263\257\377\332\342\341\377\374\333" \
+ "\343\342\377\4\245\272\266\377\223\254\247\377\230\260\253\377\371\373" \
+ "\372\377\212\377\377\377\377\1\301\317\314\377\202\223\254\247\377\1" \
+ "\316\331\327\377\313\333\343\342\377\1\313\325\324\377\204\260\275\273" \
+ "\377\1\206\230\225\377\203Slg\377\5czu\377\177\223\217\377\227\250\245" \
+ "\377\244\262\260\377\253\271\267\377\216\260\275\273\377\1s\210\204\377" \
+ "\202Slg\377\1\243\262\257\377\331\333\343\342\377\1\267\307\304\377\202" \
+ "\223\254\247\377\1\344\352\351\377\212\377\377\377\377\1\336\346\344" \
+ "\377\202\223\254\247\377\1\273\312\307\377\375\333\343\342\377\1\304" \
+ "\321\317\377\202\223\254\247\377\1\322\334\332\377\212\377\377\377\377" \
+ "\1\356\361\361\377\202\223\254\247\377\1\260\302\277\377\313\333\343" \
+ "\342\377\1\250\267\264\377\236Slg\377\1\243\262\257\377\330\333\343\342" \
+ "\377\4\331\342\341\377\232\261\255\377\223\254\247\377\245\272\266\377" \
+ "\213\377\377\377\377\4\261\303\277\377\223\254\247\377\225\256\251\377" \
+ "\326\337\336\377\375\333\343\342\377\4\332\342\341\377\233\262\255\377" \
+ "\223\254\247\377\244\271\265\377\213\377\377\377\377\4\257\302\276\377" \
+ "\223\254\247\377\226\256\251\377\327\337\336\377\312\333\343\342\377" \
+ "\1\250\267\264\377\236Slg\377\1\243\262\257\377\330\333\343\342\377\1" \
+ "\302\320\316\377\202\223\254\247\377\1\322\335\333\377\212\377\377\377" \
+ "\377\1\357\363\362\377\202\223\254\247\377\1\257\301\276\377\377\333" \
+ "\343\342\377\1\270\310\305\377\202\223\254\247\377\1\343\351\350\377" \
+ "\212\377\377\377\377\1\335\344\343\377\202\223\254\247\377\1\273\313" \
+ "\310\377\312\333\343\342\377\1\250\267\264\377\236Slg\377\1\243\262\257" \
+ "\377\330\333\343\342\377\4\244\271\265\377\223\254\247\377\231\260\254" \
+ "\377\372\373\373\377\212\377\377\377\377\1\302\320\315\377\202\223\254" \
+ "\247\377\1\315\330\327\377\377\333\343\342\377\4\324\336\334\377\224" \
+ "\255\250\377\223\254\247\377\266\307\303\377\212\377\377\377\377\5\375" \
+ "\376\375\377\237\265\261\377\223\254\247\377\236\264\260\377\332\342" \
+ "\341\377\311\333\343\342\377\1\250\267\264\377\236Slg\377\1\243\262\257" \
+ "\377\327\333\343\342\377\1\316\331\327\377\202\223\254\247\377\1\301" \
+ "\317\314\377\212\377\377\377\377\4\372\373\373\377\231\261\254\377\223" \
+ "\254\247\377\243\270\264\377\377\333\343\342\377\202\333\343\342\377" \
+ "\4\254\277\274\377\223\254\247\377\224\255\250\377\363\366\365\377\212" \
+ "\377\377\377\377\1\313\327\325\377\202\223\254\247\377\1\307\324\322" \
+ "\377\311\333\343\342\377\1\250\267\264\377\236Slg\377\1\243\262\257\377" \
+ "\327\333\343\342\377\1\260\302\276\377\202\223\254\247\377\1\356\362" \
+ "\361\377\212\377\377\377\377\1\324\336\334\377\202\223\254\247\377\1" \
+ "\301\317\315\377\377\333\343\342\377\202\333\343\342\377\1\312\326\324" \
+ "\377\202\223\254\247\377\1\307\324\321\377\212\377\377\377\377\4\366" \
+ "\370\367\377\225\256\251\377\223\254\247\377\251\275\271\377\311\333" \
+ "\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\230\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\326\333\343\342" \
+ "\377\4\326\337\336\377\226\256\251\377\223\254\247\377\260\302\276\377" \
+ "\213\377\377\377\377\4\246\273\267\377\223\254\247\377\231\261\254\377" \
+ "\331\341\340\377\377\333\343\342\377\203\333\343\342\377\4\241\266\262" \
+ "\377\223\254\247\377\234\263\256\377\374\375\374\377\212\377\377\377" \
+ "\377\1\272\312\307\377\202\223\254\247\377\1\322\334\333\377\310\333" \
+ "\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\230\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\326\333\343\342" \
+ "\377\1\273\313\310\377\202\223\254\247\377\1\335\345\344\377\212\377" \
+ "\377\377\377\1\346\353\352\377\202\223\254\247\377\1\266\306\303\377" \
+ "\377\333\343\342\377\204\333\343\342\377\1\277\315\313\377\202\223\254" \
+ "\247\377\1\330\341\337\377\212\377\377\377\377\1\350\355\354\377\202" \
+ "\223\254\247\377\1\264\305\302\377\310\333\343\342\377\1\250\267\264" \
+ "\377\202Slg\377\1x\214\210\377\230\333\343\342\377\1\202\225\221\377" \
+ "\202Slg\377\1\243\262\257\377\325\333\343\342\377\5\332\342\341\377\235" \
+ "\264\257\377\223\254\247\377\240\266\261\377\376\376\376\377\212\377" \
+ "\377\377\377\4\270\310\305\377\223\254\247\377\224\254\247\377\323\335" \
+ "\333\377\377\333\343\342\377\204\333\343\342\377\4\330\341\337\377\230" \
+ "\257\253\377\223\254\247\377\253\276\273\377\213\377\377\377\377\4\251" \
+ "\274\270\377\223\254\247\377\230\260\253\377\331\341\340\377\307\333" \
+ "\343\342\377\1\250\267\264\377\202Slg\377\1x\214\210\377\230\333\343" \
+ "\342\377\1\202\225\221\377\202Slg\377\1\243\262\257\377\325\333\343\342" \
+ "\377\1\307\324\322\377\202\223\254\247\377\1\314\330\325\377\212\377" \
+ "\377\377\377\4\364\367\366\377\225\255\250\377\223\254\247\377\252\276" \
+ "\272\377\377\333\343\342\377\206\333\343\342\377\1\263\305\301\377\202" \
+ "\223\254\247\377\1\352\357\356\377\212\377\377\377\377\1\326\340\336" \
+ "\377\202\223\254\247\377\1\300\316\314\377\307\333\343\342\377\1\250" \
+ "\267\264\377\202Slg\377\1x\214\210\377\230\333\343\342\377\1\223\244" \
+ "\241\377\202l\201}\377\1\255\272\270\377\325\333\343\342\377\4\251\274" \
+ "\271\377\223\254\247\377\225\256\251\377\366\370\370\377\212\377\377" \
+ "\377\377\1\312\326\323\377\202\223\254\247\377\1\310\325\323\377\377" \
+ "\333\343\342\377\206\333\343\342\377\1\321\333\332\377\202\223\254\247" \
+ "\377\1\274\314\311\377\212\377\377\377\377\4\373\374\374\377\233\262" \
+ "\255\377\223\254\247\377\242\267\263\377\377\333\343\342\377\274\333" \
+ "\343\342\377\1\322\334\332\377\202\223\254\247\377\1\272\312\307\377" \
+ "\212\377\377\377\377\4\375\375\375\377\236\264\260\377\223\254\247\377" \
+ "\237\265\260\377\377\333\343\342\377\210\333\343\342\377\4\250\274\270" \
+ "\377\223\254\247\377\226\256\252\377\367\371\371\377\212\377\377\377" \
+ "\377\1\304\322\317\377\202\223\254\247\377\1\314\327\325\377\377\333" \
+ "\343\342\377\273\333\343\342\377\1\264\305\302\377\202\223\254\247\377" \
+ "\1\350\355\354\377\212\377\377\377\377\1\333\343\342\377\202\223\254" \
+ "\247\377\1\275\314\311\377\377\333\343\342\377\210\333\343\342\377\1" \
+ "\306\323\321\377\202\223\254\247\377\1\316\331\327\377\212\377\377\377" \
+ "\377\1\361\364\363\377\202\223\254\247\377\1\255\300\274\377\377\333" \
+ "\343\342\377\272\333\343\342\377\4\331\341\340\377\230\260\253\377\223" \
+ "\254\247\377\251\275\271\377\213\377\377\377\377\4\256\300\275\377\223" \
+ "\254\247\377\226\257\252\377\327\340\337\377\377\333\343\342\377\210" \
+ "\333\343\342\377\5\332\342\341\377\234\263\257\377\223\254\247\377\241" \
+ "\267\263\377\376\376\376\377\212\377\377\377\377\4\263\305\301\377\223" \
+ "\254\247\377\225\255\250\377\325\336\335\377\377\333\343\342\377\271" \
+ "\333\343\342\377\1\300\316\314\377\202\223\254\247\377\1\327\340\336" \
+ "\377\212\377\377\377\377\1\354\361\360\377\202\223\254\247\377\1\261" \
+ "\303\300\377\377\333\343\342\377\212\333\343\342\377\1\272\312\307\377" \
+ "\202\223\254\247\377\1\340\347\345\377\212\377\377\377\377\1\341\350" \
+ "\346\377\202\223\254\247\377\1\271\311\306\377\340\333\343\342\377\1" \
+ "\317\330\327\377\202\305\320\316\377\1\320\331\330\377\324\333\343\342" \
+ "\377\4\241\267\263\377\223\254\247\377\233\262\255\377\374\374\374\377" \
+ "\212\377\377\377\377\1\277\316\313\377\202\223\254\247\377\1\317\332" \
+ "\330\377\377\333\343\342\377\212\333\343\342\377\4\326\337\336\377\225" \
+ "\256\251\377\223\254\247\377\262\304\300\377\212\377\377\377\377\5\376" \
+ "\376\376\377\243\270\264\377\223\254\247\377\234\262\256\377\332\342" \
+ "\341\377\337\333\343\342\377\1\216\237\234\377\202Slg\377\1\227\247\244" \
+ "\377\323\333\343\342\377\1\314\327\325\377\202\223\254\247\377\1\305" \
+ "\323\320\377\212\377\377\377\377\4\371\372\372\377\230\257\253\377\223" \
+ "\254\247\377\246\272\266\377\377\333\343\342\377\214\333\343\342\377" \
+ "\1\257\301\276\377\202\223\254\247\377\1\360\363\363\377\212\377\377" \
+ "\377\377\1\317\332\330\377\202\223\254\247\377\1\305\322\320\377\337" \
+ "\333\343\342\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\323\333" \
+ "\343\342\377\1\255\300\274\377\202\223\254\247\377\1\361\364\364\377" \
+ "\212\377\377\377\377\1\320\333\331\377\202\223\254\247\377\1\304\321" \
+ "\317\377\377\333\343\342\377\214\333\343\342\377\1\315\330\326\377\202" \
+ "\223\254\247\377\1\304\321\317\377\212\377\377\377\377\4\370\372\371" \
+ "\377\227\257\252\377\223\254\247\377\246\273\267\377\337\333\343\342" \
+ "\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\322\333\343\342\377" \
+ "\4\325\336\335\377\224\255\250\377\223\254\247\377\264\305\302\377\213" \
+ "\377\377\377\377\4\243\271\264\377\223\254\247\377\233\262\255\377\332" \
+ "\342\341\377\377\333\343\342\377\215\333\343\342\377\4\243\270\264\377" \
+ "\223\254\247\377\232\261\255\377\373\374\373\377\212\377\377\377\377" \
+ "\1\276\315\312\377\202\223\254\247\377\1\320\332\331\377\336\333\343" \
+ "\342\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\322\333\343\342" \
+ "\377\1\271\311\306\377\202\223\254\247\377\1\341\350\347\377\212\377" \
+ "\377\377\377\1\342\351\347\377\202\223\254\247\377\1\270\310\306\377" \
+ "\377\333\343\342\377\216\333\343\342\377\1\301\317\315\377\202\223\254" \
+ "\247\377\1\325\337\335\377\212\377\377\377\377\1\353\360\357\377\202" \
+ "\223\254\247\377\1\262\303\300\377\334\333\343\342\377\3\304\317\316" \
+ "\377\220\242\236\377]to\377\202Slg\377\1\227\247\244\377\321\333\343" \
+ "\342\377\5\332\342\341\377\233\262\256\377\223\254\247\377\243\270\264" \
+ "\377\376\376\376\377\212\377\377\377\377\4\264\306\302\377\223\254\247" \
+ "\377\224\255\250\377\325\336\335\377\377\333\343\342\377\216\333\343" \
+ "\342\377\4\331\341\340\377\231\260\254\377\223\254\247\377\247\273\267" \
+ "\377\213\377\377\377\377\4\255\300\274\377\223\254\247\377\227\257\252" \
+ "\377\327\340\337\377\330\333\343\342\377\3\323\335\333\377\246\263\261" \
+ "\377p\206\202\377\205Slg\377\1\227\247\244\377\321\333\343\342\377\1" \
+ "\304\322\317\377\202\223\254\247\377\1\320\333\331\377\212\377\377\377" \
+ "\377\4\362\365\364\377\224\254\250\377\223\254\247\377\236\264\260\377" \
+ "\377\333\343\342\377\220\333\343\342\377\1\266\306\303\377\202\223\254" \
+ "\247\377\1\346\354\353\377\202\377\377\377\377\4\370\371\371\377\342" \
+ "\351\347\377\333\343\342\377\360\363\363\377\204\377\377\377\377\1\332" \
+ "\343\341\377\202\223\254\247\377\1\276\315\312\377\326\333\343\342\377" \
+ "\3\273\306\304\377\206\230\225\377Xpl\377\207Slg\377\1\227\247\244\377" \
+ "\321\333\343\342\377\4\246\272\266\377\223\254\247\377\227\257\252\377" \
+ "\370\372\371\377\212\377\377\377\377\1\306\323\321\377\203\223\254\247" \
+ "\377\1\314\327\325\377\377\333\343\342\377\217\333\343\342\377\6\323" \
+ "\335\333\377\224\254\247\377\223\254\247\377\267\307\304\377\304\321" \
+ "\317\377\242\267\263\377\204\223\254\247\377\10\232\262\255\377\263\304" \
+ "\301\377\353\360\357\377\377\377\377\377\374\375\375\377\235\264\257" \
+ "\377\223\254\247\377\237\265\261\377\323\333\343\342\377\3\315\327\325" \
+ "\377\233\253\250\377g}y\377\212Slg\377\1\227\247\244\377\320\333\343" \
+ "\342\377\1\320\332\331\377\202\223\254\247\377\1\277\315\312\377\212" \
+ "\377\377\377\377\6\374\374\374\377\233\262\256\377\223\254\247\377\235" \
+ "\264\257\377\223\254\247\377\266\307\304\377\377\333\343\342\377\220" \
+ "\333\343\342\377\3\252\275\272\377\222\253\247\377\222\254\247\377\202" \
+ "\223\254\247\377\12\237\265\261\377\266\307\304\377\276\315\312\377\250" \
+ "\274\270\377\225\256\251\377\223\254\247\377\225\256\251\377\312\327" \
+ "\324\377\375\376\376\377\311\325\323\377\202\223\254\247\377\1\311\325" \
+ "\323\377\317\333\343\342\377\4\330\341\340\377\260\275\273\377|\217\214" \
+ "\377Umh\377\214Slg\377\1\227\247\244\377\320\333\343\342\377\1\262\303" \
+ "\300\377\202\223\254\247\377\1\354\360\357\377\212\377\377\377\377\1" \
+ "\330\341\337\377\202\223\254\247\377\3\306\323\320\377\223\254\247\377" \
+ "\250\273\270\377\377\333\343\342\377\220\333\343\342\377\1\263\305\301" \
+ "\377\202\223\254\247\377\2\263\305\301\377\362\365\365\377\204\377\377" \
+ "\377\377\11\374\374\374\377\317\332\330\377\226\257\252\377\223\254\247" \
+ "\377\257\301\276\377\363\365\365\377\225\255\250\377\223\254\247\377" \
+ "\253\276\272\377\315\333\343\342\377\3\305\320\316\377\220\242\236\377" \
+ "_vr\377\217Slg\377\1\227\247\244\377\317\333\343\342\377\4\327\340\337" \
+ "\377\227\257\252\377\223\254\247\377\255\300\274\377\213\377\377\377" \
+ "\377\6\252\275\271\377\223\254\247\377\233\262\255\377\366\370\370\377" \
+ "\224\255\250\377\230\260\254\377\377\333\343\342\377\217\333\343\342" \
+ "\377\4\321\333\331\377\226\256\251\377\223\254\247\377\324\336\334\377" \
+ "\210\377\377\377\377\10\355\361\361\377\243\270\264\377\223\254\247\377" \
+ "\315\330\326\377\267\310\305\377\223\254\247\377\224\255\250\377\323" \
+ "\335\334\377\311\333\343\342\377\3\324\335\334\377\245\264\262\377q\206" \
+ "\203\377\217Slg\377\1\\to\377\202Slg\377\1\227\247\244\377\317\333\343" \
+ "\342\377\1\275\314\311\377\202\223\254\247\377\1\333\343\341\377\212" \
+ "\377\377\377\377\1\351\356\355\377\202\223\254\247\377\5\304\322\317" \
+ "\377\377\377\377\377\231\261\254\377\224\254\247\377\331\342\341\377" \
+ "\377\333\343\342\377\215\333\343\342\377\4\332\342\341\377\244\271\265" \
+ "\377\223\254\247\377\302\320\316\377\212\377\377\377\377\4\351\356\355" \
+ "\377\225\255\250\377\226\256\251\377\327\340\335\377\202\223\254\247" \
+ "\377\1\266\307\304\377\307\333\343\342\377\3\273\307\305\377\206\231" \
+ "\225\377Xpl\377\216Slg\377\4d{w\377\230\250\245\377\313\325\323\377\216" \
+ "\237\234\377\202Slg\377\1\227\247\244\377\317\333\343\342\377\4\237\265" \
+ "\261\377\223\254\247\377\236\264\257\377\375\375\375\377\212\377\377" \
+ "\377\377\1\274\313\310\377\202\223\254\247\377\202\361\364\363\377\2" \
+ "\223\254\247\377\240\265\261\377\377\333\343\342\377\216\333\343\342" \
+ "\377\4\306\323\321\377\223\254\247\377\244\271\264\377\373\374\374\377" \
+ "\213\377\377\377\377\7\310\325\322\377\223\254\247\377\267\310\305\377" \
+ "\246\272\266\377\223\254\247\377\232\261\254\377\331\341\340\377\303" \
+ "\333\343\342\377\3\316\327\326\377\233\253\251\377g}y\377\216Slg\377" \
+ "\4Wpj\377\204\226\223\377\270\305\302\377\332\342\341\377\202\333\343" \
+ "\342\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\316\333\343\342" \
+ "\377\1\311\325\323\377\202\223\254\247\377\1\311\325\323\377\206\377" \
+ "\377\377\377\14\346\353\352\377\301\317\314\377\337\346\345\377\376\376" \
+ "\376\377\367\371\370\377\226\256\251\377\223\254\247\377\263\304\301" \
+ "\377\377\377\377\377\332\342\341\377\223\254\247\377\256\302\276\377" \
+ "\377\333\343\342\377\216\333\343\342\377\3\267\307\304\377\223\254\247" \
+ "\377\316\331\327\377\214\377\377\377\377\4\367\370\370\377\223\254\247" \
+ "\377\240\266\262\377\323\335\333\377\202\223\254\247\377\1\302\320\316" \
+ "\377\300\333\343\342\377\4\330\341\340\377\261\275\273\377|\220\214\377" \
+ "Umh\377\216Slg\377\3p\205\201\377\244\263\260\377\323\334\333\377\205" \
+ "\333\343\342\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\316\333" \
+ "\343\342\377\4\253\276\272\377\223\254\247\377\225\255\250\377\364\367" \
+ "\366\377\205\377\377\377\377\1\326\337\336\377\203\223\254\247\377\2" \
+ "\302\320\315\377\315\330\326\377\202\223\254\247\377\5\340\347\346\377" \
+ "\377\377\377\377\257\301\276\377\223\254\247\377\276\315\313\377\377" \
+ "\333\343\342\377\216\333\343\342\377\3\251\274\271\377\223\254\247\377" \
+ "\344\352\351\377\215\377\377\377\377\6\240\266\262\377\223\254\247\377" \
+ "\362\365\364\377\231\261\254\377\223\254\247\377\244\271\265\377\252" \
+ "\333\343\342\377\11\330\340\337\377\243\262\257\377\204\227\224\377j" \
+ "\200{\377Wpj\377f|x\377{\216\213\377\255\274\271\377\330\341\340\377" \
+ "\213\333\343\342\377\3\305\320\316\377\221\242\237\377_vr\377\216Slg" \
+ "\377\3^vq\377\220\241\236\377\304\317\315\377\210\333\343\342\377\1\216" \
+ "\237\234\377\202Slg\377\1\227\247\244\377\316\333\343\342\377\3\226\256" \
+ "\251\377\223\254\247\377\266\307\303\377\206\377\377\377\377\15\252\276" \
+ "\272\377\223\254\247\377\302\320\316\377\223\254\247\377\232\261\255" \
+ "\377\237\265\261\377\223\254\247\377\242\270\263\377\376\376\376\377" \
+ "\321\334\331\377\223\254\247\377\235\263\257\377\330\340\340\377\377" \
+ "\333\343\342\377\216\333\343\342\377\3\234\262\256\377\223\254\247\377" \
+ "\370\372\371\377\215\377\377\377\377\4\264\306\302\377\223\254\247\377" \
+ "\344\352\351\377\300\316\313\377\202\223\254\247\377\1\325\336\335\377" \
+ "\250\333\343\342\377\2\303\316\315\377m\202~\377\207Slg\377\2g}y\377" \
+ "\306\321\317\377\207\333\343\342\377\3\324\335\334\377\246\265\263\377" \
+ "q\206\203\377\216Slg\377\4Umh\377|\217\214\377\260\275\273\377\330\340" \
+ "\337\377\212\333\343\342\377\1\257\274\273\377\202\216\237\234\377\1" \
+ "\264\300\277\377\316\333\343\342\377\3\230\257\253\377\223\254\247\377" \
+ "\276\315\312\377\206\377\377\377\377\5\270\311\305\377\223\254\247\377" \
+ "\244\271\264\377\223\254\247\377\240\266\262\377\202\223\254\247\377" \
+ "\5\317\332\330\377\335\345\343\377\226\256\251\377\223\254\247\377\312" \
+ "\326\324\377\377\333\343\342\377\217\333\343\342\377\3\241\267\263\377" \
+ "\223\254\247\377\356\362\362\377\215\377\377\377\377\4\253\276\272\377" \
+ "\223\254\247\377\355\361\360\377\310\325\322\377\202\223\254\247\377" \
+ "\1\327\340\336\377\247\333\343\342\377\2\261\275\273\377Woj\377\211S" \
+ "lg\377\2[to\377\301\314\312\377\204\333\343\342\377\3\273\307\305\377" \
+ "\207\231\225\377Yql\377\206Slg\377\4Rkg\377Skf\377Slf\377Rkg\377\204" \
+ "Slg\377\3h~z\377\234\254\251\377\316\327\326\377\337\333\343\342\377" \
+ "\3\233\262\255\377\223\254\247\377\271\311\306\377\206\377\377\377\377" \
+ "\10\351\356\355\377\240\266\261\377\223\254\247\377\233\262\256\377\247" \
+ "\273\266\377\223\254\247\377\226\256\252\377\267\310\304\377\202\223" \
+ "\254\247\377\1\267\307\305\377\377\333\343\342\377\220\333\343\342\377" \
+ "\3\260\302\277\377\223\254\247\377\330\341\340\377\214\377\377\377\377" \
+ "\5\375\376\376\377\226\257\252\377\227\257\252\377\376\376\376\377\304" \
+ "\321\317\377\202\223\254\247\377\1\332\342\341\377\246\333\343\342\377" \
+ "\2\315\327\325\377]to\377\203Slg\377\5Zqm\377x\214\210\377\210\232\226" \
+ "\377r\210\204\377Vnj\377\203Slg\377\5j\200{\377\327\340\336\377\316\327" \
+ "\326\377\233\253\251\377g}y\377\211Slg\377\10Skf\377Rkg\377Slg\377Rl" \
+ "f\377Slg\377Zqm\377\207\233\227\377\275\310\306\377\342\333\343\342\377" \
+ "\3\236\264\260\377\223\254\247\377\264\306\302\377\207\377\377\377\377" \
+ "\3\376\376\376\377\346\354\353\377\354\360\357\377\204\223\254\247\377" \
+ "\2\232\261\255\377\305\322\320\377\377\333\343\342\377\221\333\343\342" \
+ "\377\3\276\315\312\377\223\254\247\377\274\313\310\377\214\377\377\377" \
+ "\377\7\344\352\351\377\223\254\247\377\253\277\273\377\377\377\377\377" \
+ "\277\315\312\377\223\254\247\377\225\255\250\377\247\333\343\342\377" \
+ "\1y\215\212\377\203Slg\377\2x\214\211\377\315\327\325\377\203\333\343" \
+ "\342\377\2\301\314\312\377h~z\377\203Slg\377\2j\200{\377Umh\377\213S" \
+ "lg\377\6Skf\377Rkg\377Slg\377Xqk\377\250\266\263\377\325\336\335\377" \
+ "\344\333\343\342\377\3\241\266\262\377\223\254\247\377\260\302\276\377" \
+ "\211\377\377\377\377\1\302\320\315\377\202\223\254\247\377\3\231\260" \
+ "\253\377\260\302\277\377\325\336\336\377\377\333\343\342\377\222\333" \
+ "\343\342\377\4\323\334\334\377\226\256\251\377\223\254\247\377\344\352" \
+ "\351\377\212\377\377\377\377\10\374\374\374\377\245\272\265\377\223\254" \
+ "\247\377\320\333\331\377\377\377\377\377\272\312\307\377\223\254\247" \
+ "\377\230\257\253\377\246\333\343\342\377\1\314\325\325\377\203Slg\377" \
+ "\2j\201|\377\326\337\336\377\205\333\343\342\377\2\311\323\321\377Yq" \
+ "l\377\217Slg\377\4_uq\377Slh\377Slg\377i\200{\377\346\333\343\342\377" \
+ "\3\244\271\265\377\223\254\247\377\253\276\273\377\210\377\377\377\377" \
+ "\4\372\373\373\377\231\261\254\377\223\254\247\377\242\267\263\377\377" \
+ "\333\343\342\377\226\333\343\342\377\4\275\314\311\377\223\254\247\377" \
+ "\241\266\262\377\371\372\372\377\211\377\377\377\377\10\303\321\316\377" \
+ "\223\254\247\377\254\277\273\377\376\376\376\377\377\377\377\377\265" \
+ "\306\303\377\223\254\247\377\233\262\255\377\246\333\343\342\377\1\263" \
+ "\300\276\377\203Slg\377\1\263\300\276\377\207\333\343\342\377\1\222\243" \
+ "\237\377\214Slg\377\7Vnj\377\200\223\220\377\264\300\277\377\300\313" \
+ "\311\377Umi\377Slg\377i\200{\377\346\333\343\342\377\3\247\273\267\377" \
+ "\223\254\247\377\246\273\267\377\210\377\377\377\377\1\324\336\334\377" \
+ "\202\223\254\247\377\1\302\320\315\377\377\333\343\342\377\227\333\343" \
+ "\342\377\4\246\272\267\377\223\254\247\377\241\267\262\377\345\353\352" \
+ "\377\206\377\377\377\377\5\367\371\370\377\267\310\305\377\223\254\247" \
+ "\377\227\257\252\377\357\363\362\377\202\377\377\377\377\3\261\303\277" \
+ "\377\223\254\247\377\236\264\260\377\246\333\343\342\377\1\232\252\247" \
+ "\377\203Slg\377\1\317\330\327\377\207\333\343\342\377\1\260\275\273\377" \
+ "\212Slg\377\3l\201}\377\240\260\254\377\320\332\331\377\202\333\343\342" \
+ "\377\4\301\314\312\377Umi\377Slg\377i\200{\377\346\333\343\342\377\3" \
+ "\252\275\272\377\223\254\247\377\242\267\263\377\210\377\377\377\377" \
+ "\4\246\273\267\377\223\254\247\377\231\261\254\377\331\341\340\377\377" \
+ "\333\343\342\377\227\333\343\342\377\16\325\336\334\377\246\272\267\377" \
+ "\223\254\247\377\224\255\250\377\271\311\306\377\322\334\332\377\351" \
+ "\356\355\377\361\364\363\377\333\343\341\377\304\322\317\377\235\264" \
+ "\257\377\223\254\247\377\235\263\257\377\341\350\346\377\203\377\377" \
+ "\377\377\3\254\277\273\377\223\254\247\377\241\267\262\377\246\333\343" \
+ "\342\377\1\233\253\250\377\203Slg\377\1\315\327\325\377\207\333\343\342" \
+ "\377\1\256\274\272\377\207Slg\377\3[to\377\214\236\232\377\300\314\312" \
+ "\377\205\333\343\342\377\4\301\314\312\377Umi\377Slg\377i\200{\377\346" \
+ "\333\343\342\377\3\255\300\274\377\223\254\247\377\235\263\257\377\207" \
+ "\377\377\377\377\1\346\353\352\377\202\223\254\247\377\1\266\307\304" \
+ "\377\377\333\343\342\377\232\333\343\342\377\2\275\314\311\377\226\256" \
+ "\251\377\207\223\254\247\377\2\267\310\305\377\367\371\370\377\204\377" \
+ "\377\377\377\3\247\273\267\377\223\254\247\377\244\271\265\377\246\333" \
+ "\343\342\377\1\265\301\300\377\203Slg\377\1\261\275\273\377\207\333\343" \
+ "\342\377\1\217\240\235\377\206Slg\377\2p\205\201\377\311\324\322\377" \
+ "\207\333\343\342\377\4\301\314\312\377Umi\377Slg\377i\200{\377\346\333" \
+ "\343\342\377\3\260\302\277\377\223\254\247\377\230\260\253\377\207\377" \
+ "\377\377\377\4\270\310\305\377\223\254\247\377\224\254\247\377\323\335" \
+ "\333\377\377\333\343\342\377\233\333\343\342\377\10\324\336\335\377\302" \
+ "\321\316\377\264\305\302\377\244\271\265\377\223\254\247\377\223\253" \
+ "\246\377\241\266\262\377\353\360\357\377\206\377\377\377\377\3\242\270" \
+ "\263\377\223\254\247\377\247\273\267\377\246\333\343\342\377\1\316\327" \
+ "\326\377\203Slg\377\2i\177{\377\326\337\336\377\205\333\343\342\377\2" \
+ "\307\322\320\377Vpk\377\207Slg\377\4Umh\377|\217\214\377\260\275\273" \
+ "\377\330\341\340\377\204\333\343\342\377\4\301\314\312\377Umi\377Slg" \
+ "\377i\200{\377\346\333\343\342\377\1\263\304\301\377\202\223\254\247" \
+ "\377\206\377\377\377\377\4\364\367\366\377\225\255\250\377\223\254\247" \
+ "\377\253\276\272\377\377\333\343\342\377\240\333\343\342\377\1\264\305" \
+ "\302\377\202\223\254\247\377\1\351\356\355\377\206\377\377\377\377\3" \
+ "\236\264\257\377\223\254\247\377\252\275\272\377\247\333\343\342\377" \
+ "\1\177\222\216\377\203Slg\377\2v\212\206\377\312\324\323\377\203\333" \
+ "\343\342\377\2\271\305\303\377e|w\377\203Slg\377\2j\201|\377Umh\377\206" \
+ "Slg\377\3^vq\377\220\242\236\377\304\317\316\377\202\333\343\342\377" \
+ "\4\301\314\312\377Umi\377Slg\377i\200{\377\346\333\343\342\377\1\266" \
+ "\307\304\377\202\223\254\247\377\1\373\374\374\377\205\377\377\377\377" \
+ "\1\312\326\323\377\202\223\254\247\377\1\311\325\323\377\377\333\343" \
+ "\342\377\240\333\343\342\377\1\321\333\332\377\202\223\254\247\377\1" \
+ "\274\313\310\377\206\377\377\377\377\3\231\260\254\377\223\254\247\377" \
+ "\255\300\274\377\247\333\343\342\377\2\320\332\331\377_wr\377\203Slg" \
+ "\377\4Uni\377k\201|\377{\216\213\377e}w\377\204Slg\377\5m\203\177\377" \
+ "\330\340\337\377\316\330\326\377\235\254\252\377i\177z\377\207Slg\377" \
+ "\6p\206\202\377\246\263\261\377\273\307\304\377Umi\377Slg\377i\200{\377" \
+ "\346\333\343\342\377\1\271\311\306\377\202\223\254\247\377\1\366\370" \
+ "\370\377\204\377\377\377\377\4\375\375\375\377\236\264\260\377\223\254" \
+ "\247\377\237\265\261\377\377\333\343\342\377\242\333\343\342\377\4\250" \
+ "\274\270\377\223\254\247\377\226\256\252\377\367\371\370\377\205\377" \
+ "\377\377\377\3\224\255\250\377\223\254\247\377\260\302\277\377\250\333" \
+ "\343\342\377\2\266\303\300\377Yql\377\211Slg\377\2_vr\377\305\320\316" \
+ "\377\204\333\343\342\377\3\274\311\307\377\210\232\227\377Zrm\377\206" \
+ "Slg\377\4Wnj\377Skg\377Slg\377i\200{\377\346\333\343\342\377\1\274\313" \
+ "\311\377\202\223\254\247\377\1\361\364\364\377\204\377\377\377\377\1" \
+ "\333\343\342\377\202\223\254\247\377\1\275\314\311\377\377\333\343\342" \
+ "\377\242\333\343\342\377\1\306\323\321\377\202\223\254\247\377\1\315" \
+ "\331\326\377\204\377\377\377\377\1\374\374\374\377\202\223\254\247\377" \
+ "\1\263\305\301\377\251\333\343\342\377\2\311\324\322\377v\212\206\377" \
+ "\207Slg\377\2k\201|\377\311\324\322\377\207\333\343\342\377\3\325\336" \
+ "\335\377\251\267\264\377t\211\205\377\204Slg\377\6Skf\377Rkg\377Slg\377" \
+ "Uoi\377\232\253\247\377\314\326\325\377\344\333\343\342\377\1\277\316" \
+ "\313\377\202\223\254\247\377\1\355\361\360\377\204\377\377\377\377\4" \
+ "\256\300\275\377\223\254\247\377\226\257\252\377\327\340\337\377\377" \
+ "\333\343\342\377\242\333\343\342\377\5\332\342\341\377\235\263\257\377" \
+ "\223\254\247\377\241\267\262\377\376\376\376\377\203\377\377\377\377" \
+ "\1\367\371\370\377\202\223\254\247\377\1\266\307\304\377\252\333\343" \
+ "\342\377\11\332\342\341\377\260\275\273\377\222\243\237\377w\213\210" \
+ "\377d{w\377r\207\203\377\206\230\225\377\265\302\300\377\332\342\341" \
+ "\377\213\333\343\342\377\5\307\322\320\377\225\245\242\377bxt\377Slg" \
+ "\377Skf\377\203Slf\377\5Slg\377Tmh\377{\216\213\377\257\274\273\377\330" \
+ "\340\337\377\341\333\343\342\377\1\302\320\316\377\202\223\254\247\377" \
+ "\1\350\355\354\377\203\377\377\377\377\1\354\361\360\377\202\223\254" \
+ "\247\377\1\262\303\300\377\377\333\343\342\377\244\333\343\342\377\1" \
+ "\273\312\307\377\202\223\254\247\377\1\337\346\345\377\203\377\377\377" \
+ "\377\1\362\365\364\377\202\223\254\247\377\1\271\311\306\377\300\333" \
+ "\343\342\377\6\332\342\341\377\265\301\300\377~\223\217\377Vnj\377Sk" \
+ "g\377Slf\377\204Slg\377\3^uq\377\217\241\236\377\304\317\315\377\337" \
+ "\333\343\342\377\1\305\322\320\377\202\223\254\247\377\1\343\352\350" \
+ "\377\203\377\377\377\377\1\277\316\313\377\202\223\254\247\377\1\317" \
+ "\332\330\377\377\333\343\342\377\244\333\343\342\377\4\326\337\336\377" \
+ "\225\256\251\377\223\254\247\377\261\303\300\377\203\377\377\377\377" \
+ "\1\356\361\361\377\202\223\254\247\377\1\274\313\311\377\303\333\343" \
+ "\342\377\3\321\332\331\377\240\257\255\377m\202~\377\207Slg\377\3p\205" \
+ "\201\377\244\263\260\377\323\334\333\377\212\333\343\342\377\1\257\274" \
+ "\273\377\202\216\237\234\377\1\264\300\277\377\316\333\343\342\377\1" \
+ "\310\325\323\377\202\223\254\247\377\7\243\271\264\377\272\312\307\377" \
+ "\315\330\326\377\336\345\344\377\230\257\253\377\223\254\247\377\246" \
+ "\272\266\377\377\333\343\342\377\246\333\343\342\377\1\257\301\276\377" \
+ "\202\223\254\247\377\4\332\342\340\377\317\332\330\377\274\313\310\377" \
+ "\246\273\267\377\202\223\254\247\377\1\277\316\313\377\306\333\343\342" \
+ "\377\3\301\314\312\377\215\237\233\377\\to\377\206Slg\377\3Xpk\377\204" \
+ "\227\224\377\271\305\303\377\210\333\343\342\377\1\216\237\234\377\202" \
+ "Slg\377\1\227\247\244\377\316\333\343\342\377\1\313\327\325\377\210\223" \
+ "\254\247\377\1\304\321\317\377\377\333\343\342\377\246\333\343\342\377" \
+ "\1\315\330\327\377\210\223\254\247\377\1\303\320\316\377\310\333\343" \
+ "\342\377\3\326\337\336\377\255\272\270\377x\215\210\377\207Slg\377\3" \
+ "e}w\377\232\252\246\377\314\325\325\377\205\333\343\342\377\1\216\237" \
+ "\234\377\202Slg\377\1\227\247\244\377\316\333\343\342\377\5\326\337\336" \
+ "\377\271\311\306\377\217\245\241\377\206\237\232\377\220\251\244\377" \
+ "\203\223\254\247\377\2\233\262\256\377\332\342\341\377\377\333\343\342" \
+ "\377\247\333\343\342\377\1\243\270\264\377\203\223\254\247\377\5\221" \
+ "\252\245\377\210\241\234\377\203\233\226\377\267\310\305\377\323\335" \
+ "\333\377\313\333\343\342\377\3\313\326\324\377\230\251\246\377f|x\377" \
+ "\206Slg\377\4Tmh\377z\216\212\377\256\274\272\377\330\340\337\377\202" \
+ "\333\343\342\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\320\333" \
+ "\343\342\377\1p\206\202\377\202Slg\377\4\\up\377o\207\203\377\270\310" \
+ "\305\377\303\321\316\377\377\333\343\342\377\250\333\343\342\377\10\307" \
+ "\324\322\377\267\307\304\377\200\226\221\377]vq\377Tmh\377Slg\377Woj" \
+ "\377\331\342\341\377\316\333\343\342\377\4\332\342\341\377\271\305\303" \
+ "\377\204\227\224\377Xpk\377\206Slg\377\4]up\377\217\240\235\377\303\316" \
+ "\315\377\216\237\234\377\202Slg\377\1\227\247\244\377\320\333\343\342" \
+ "\377\1Zrm\377\203Slg\377\1y\216\211\377\377\333\343\342\377\254\333\343" \
+ "\342\377\2\226\247\244\377Tmh\377\202Slg\377\2[sn\377\307\322\320\377" \
+ "\321\333\343\342\377\3\323\334\333\377\245\264\261\377q\205\201\377\207" \
+ "Slg\377\1Xpl\377\202Slg\377\1\227\247\244\377\320\333\343\342\377\1_" \
+ "wr\377\203Slg\377\1\227\247\244\377\377\333\343\342\377\254\333\343\342" \
+ "\377\2\261\276\274\377[sn\377\202Slg\377\2Zrm\377\260\276\273\377\324" \
+ "\333\343\342\377\3\304\317\316\377\221\242\237\377_vr\377\207Slg\377" \
+ "\1\227\247\244\377\320\333\343\342\377\1p\206\202\377\202Slg\377\2Xp" \
+ "l\377\317\330\327\377\377\333\343\342\377\254\333\343\342\377\2\311\324" \
+ "\322\377Zrn\377\202Slg\377\2Yrm\377\313\325\324\377\326\333\343\342\377" \
+ "\4\330\341\340\377\261\276\274\377|\221\215\377Umh\377\204Slg\377\1\227" \
+ "\247\244\377\320\333\343\342\377\1\203\226\222\377\202Slg\377\1\222\243" \
+ "\237\377\377\333\343\342\377\256\333\343\342\377\4Xpk\377Slg\377Yql\377" \
+ "\241\261\256\377\332\333\343\342\377\3\316\330\326\377\235\254\252\377" \
+ "byu\377\202Slg\377\1\227\247\244\377\320\333\343\342\377\4\224\245\242" \
+ "\377Slg\377Yql\377\320\331\330\377\377\333\343\342\377\256\333\343\342" \
+ "\377\4j\200{\377Slg\377o\204\200\377\332\342\341\377\334\333\343\342" \
+ "\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\320\333\343\342\377" \
+ "\3\245\264\262\377Slg\377\223\243\241\377\377\333\343\342\377\257\333" \
+ "\343\342\377\3\205\230\224\377Vnj\377\312\324\323\377\335\333\343\342" \
+ "\377\1\216\237\234\377\202Slg\377\1\227\247\244\377\320\333\343\342\377" \
+ "\3\267\304\302\377Zqm\377\320\332\331\377\377\333\343\342\377\257\333" \
+ "\343\342\377\2\304\317\315\377\264\301\277\377\336\333\343\342\377\1" \
+ "\216\237\234\377\202Slg\377\1\227\247\244\377\320\333\343\342\377\2\311" \
+ "\323\321\377\223\244\242\377\377\333\343\342\377\377\333\343\342\377" \
+ "\221\333\343\342\377\1\256\273\270\377\202\211\233\230\377\1\262\277" \
+ "\275\377\320\333\343\342\377\2\330\341\340\377\321\332\331\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\231\333\343" \
+ "\342\377")
+
+
diff --git a/packages/psplash/files/angstrom/psplash-hand-img.h b/packages/psplash/files/angstrom/psplash-hand-img.h
new file mode 100644
index 0000000000..a03d16e57a
--- /dev/null
+++ b/packages/psplash/files/angstrom/psplash-hand-img.h
@@ -0,0 +1,1336 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define HAND_IMG_ROWSTRIDE (1016)
+#define HAND_IMG_WIDTH (254)
+#define HAND_IMG_HEIGHT (264)
+#define HAND_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\331\333\343\342\377\5\327" \
+ "\340\337\377\314\327\325\377\306\323\320\377\321\333\331\377\332\342" \
+ "\341\377\377\333\343\342\377\206\333\343\342\377\1\276\311\307\377\202" \
+ "g~y\377\357\333\343\342\377\2\253\276\272\377\233\262\255\377\204\223" \
+ "\254\247\377\3\225\255\250\377\240\266\262\377\303\321\316\377\377\333" \
+ "\343\342\377\204\333\343\342\377\1\270\305\303\377\202Slg\377\357\333" \
+ "\343\342\377\11\231\260\254\377\223\254\247\377\243\271\264\377\267\307" \
+ "\304\377\277\316\313\377\256\301\275\377\232\261\255\377\223\254\247" \
+ "\377\271\311\306\377\377\333\343\342\377\204\333\343\342\377\1\270\305" \
+ "\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377" \
+ "\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\364\333\343" \
+ "\342\377\4\332\342\341\377\316\330\326\377\277\312\310\377\260\275\273" \
+ "\377\213\254\271\267\377\1\225\246\243\377\202Slg\377\357\333\343\342" \
+ "\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254" \
+ "\247\377\271\311\306\377\362\333\343\342\377\3\266\302\300\377v\212\206" \
+ "\377Vni\377\221Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\360\333" \
+ "\343\342\377\2\320\331\330\377n\204\200\377\224Slg\377\357\333\343\342" \
+ "\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254" \
+ "\247\377\271\311\306\377\357\333\343\342\377\2\332\342\341\377x\215\211" \
+ "\377\225Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377\377" \
+ "\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333\343\342" \
+ "\377\1\240\260\255\377\204Slg\377\4Uni\377s\210\203\377\177\222\217\377" \
+ "\213\235\231\377\213\222\243\240\377\1\202\225\221\377\202Slg\377\357" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\1{\217\213\377" \
+ "\203Slg\377\2\230\250\245\377\317\330\327\377\216\333\343\342\377\1\270" \
+ "\305\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1byt\377\202Slg\377\1\230\250\245\377\220\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231\260\254\377" \
+ "\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377" \
+ "\356\333\343\342\377\1\324\335\334\377\203Slg\377\1\324\334\333\377\220" \
+ "\333\343\342\377\1\274\307\306\377\202_vr\377\357\333\343\342\377\202" \
+ "\231\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377" \
+ "\271\311\306\377\356\333\343\342\377\4\332\342\341\377Xql\377Slg\377" \
+ "f|x\377\377\333\343\342\377\204\333\343\342\377\202\231\260\254\377\204" \
+ "\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357" \
+ "\333\343\342\377\3n\204\200\377Slg\377_vr\377\377\333\343\342\377\204" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\1\243\262\257" \
+ "\377\202Slg\377\1\311\324\322\377\220\333\343\342\377\1\325\336\335\377" \
+ "\202\305\320\316\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\4\327\337\336\377dzv\377Slg\377\220\242\236\377\220\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\360\333\343\342\377\4\307\321\320\377`ws\377Slg\377\240" \
+ "\260\255\377\217\333\343\342\377\1\270\305\303\377\202Slg\377\357\333" \
+ "\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335\377" \
+ "\223\254\247\377\271\311\306\377\361\333\343\342\377\6\307\322\320\377" \
+ "u\211\205\377Slg\377m\202~\377\246\265\262\377\321\333\331\377\214\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\362\333\343\342\377\2\332\342\341\377\213\235\231\377\203" \
+ "Slg\377\3Xpk\377f}x\377s\210\203\377\211t\211\205\377\1l\201}\377\202" \
+ "Slg\377\357\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3" \
+ "\326\337\335\377\223\254\247\377\271\311\306\377\361\333\343\342\377" \
+ "\2\265\302\300\377i\177{\377\223Slg\377\357\333\343\342\377\202\231\260" \
+ "\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271\311" \
+ "\306\377\360\333\343\342\377\2\255\272\270\377Uni\377\224Slg\377\357" \
+ "\333\343\342\377\202\231\260\254\377\204\377\377\377\377\3\326\337\335" \
+ "\377\223\254\247\377\271\311\306\377\357\333\343\342\377\2\316\327\326" \
+ "\377Wpk\377\225Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1\220\241\236\377\203Slg\377\5Woj\377\205\227\224\377\254" \
+ "\271\267\377\270\304\302\377\304\316\315\377\213\311\324\322\377\1\254" \
+ "\271\267\377\202Slg\377\357\333\343\342\377\202\231\260\254\377\204\377" \
+ "\377\377\377\3\326\337\335\377\223\254\247\377\271\311\306\377\357\333" \
+ "\343\342\377\1i\177{\377\202Slg\377\2dzv\377\316\327\326\377\217\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\357\333\343\342\377\202\231" \
+ "\260\254\377\204\377\377\377\377\3\326\337\335\377\223\254\247\377\271" \
+ "\311\306\377\356\333\343\342\377\2\331\342\341\377Voj\377\202Slg\377" \
+ "\1\273\307\305\377\220\333\343\342\377\1\270\305\303\377\202Slg\377\357" \
+ "\333\343\342\377\3\241\267\262\377\223\254\247\377\363\366\365\377\203" \
+ "\377\377\377\377\3\304\321\317\377\223\254\247\377\301\317\314\377\356" \
+ "\333\343\342\377\1\324\335\334\377\202Slg\377\2Xpk\377\331\342\341\377" \
+ "\220\333\343\342\377\1\311\324\322\377\202\226\247\244\377\357\333\343" \
+ "\342\377\3\264\305\302\377\223\254\247\377\326\337\335\377\203\377\377" \
+ "\377\377\3\246\273\267\377\223\254\247\377\324\335\334\377\357\333\343" \
+ "\342\377\3_vr\377Slg\377i\177{\377\377\333\343\342\377\202\333\343\342" \
+ "\377\5\317\332\331\377\257\301\276\377\217\251\244\377\223\254\247\377" \
+ "\270\310\305\377\202\377\377\377\377\6\365\367\367\377\223\254\247\377" \
+ "\217\251\244\377\234\263\257\377\275\314\312\377\330\341\340\377\355" \
+ "\333\343\342\377\4\177\222\217\377Slg\377Vni\377\327\337\336\377\376" \
+ "\333\343\342\377\2\277\316\313\377\207\243\236\377\203o\221\212\377\7" \
+ "\221\253\246\377\233\262\256\377\376\376\376\377\377\377\377\377\330" \
+ "\341\337\377\223\254\247\377\202\237\231\377\202o\221\212\377\3t\225" \
+ "\216\377\234\263\257\377\322\334\333\377\353\333\343\342\377\1\277\313" \
+ "\311\377\202Slg\377\1\273\307\305\377\220\333\343\342\377\1\307\322\320" \
+ "\377\202\216\237\234\377\351\333\343\342\377\2\310\325\323\377\216\251" \
+ "\243\377\204o\221\212\377\10v\226\220\377\221\252\245\377\223\254\247" \
+ "\377\324\336\334\377\340\347\346\377\262\304\300\377\223\254\247\377" \
+ "\210\244\237\377\204o\221\212\377\3u\225\217\377\250\274\270\377\327" \
+ "\340\337\377\352\333\343\342\377\4\226\246\243\377Slg\377h\177z\377\321" \
+ "\333\331\377\217\333\343\342\377\1\270\305\303\377\202Slg\377\350\333" \
+ "\343\342\377\2\264\305\302\377q\223\214\377\202o\221\212\377\5q\223\214" \
+ "\377\233\263\256\377\300\317\314\377\331\342\340\377\273\312\307\377" \
+ "\204\223\254\247\377\5\225\255\250\377\330\341\337\377\321\333\332\377" \
+ "\261\303\277\377\206\243\235\377\203o\221\212\377\2\205\242\234\377\317" \
+ "\332\331\377\352\333\343\342\377\4\230\250\245\377Tmh\377q\206\202\377" \
+ "\276\311\307\377\216\333\343\342\377\1\270\305\303\377\202Slg\377\346" \
+ "\333\343\342\377\2\332\342\341\377\241\267\263\377\203o\221\212\377\2" \
+ "\227\257\253\377\315\331\327\377\203\333\343\342\377\1\321\333\332\377" \
+ "\204\262\303\300\377\1\272\312\307\377\204\333\343\342\377\2\270\310" \
+ "\306\377\177\235\227\377\202o\221\212\377\2z\231\222\377\304\322\320" \
+ "\377\347\333\343\342\377\1\317\330\327\377\202\301\314\312\377\10\247" \
+ "\266\263\377^vq\377Slg\377o\204\200\377\232\252\247\377\247\266\263\377" \
+ "\264\301\277\377\277\313\311\377\211\301\314\312\377\1\245\264\261\377" \
+ "\202Slg\377\346\333\343\342\377\1\236\265\260\377\202o\221\212\377\2" \
+ "t\225\216\377\273\313\310\377\220\333\343\342\377\2\327\340\337\377\225" \
+ "\256\251\377\202o\221\212\377\2t\225\216\377\310\325\323\377\346\333" \
+ "\343\342\377\1\233\253\250\377\226Slg\377\345\333\343\342\377\1\261\303" \
+ "\277\377\202o\221\212\377\2|\233\225\377\311\325\323\377\223\333\343" \
+ "\342\377\1\247\273\267\377\202o\221\212\377\2|\233\225\377\322\334\333" \
+ "\377\345\333\343\342\377\1\233\253\250\377\226Slg\377\344\333\343\342" \
+ "\377\5\304\321\317\377q\222\213\377o\221\212\377u\226\217\377\312\326" \
+ "\324\377\225\333\343\342\377\1\242\270\264\377\202o\221\212\377\2\211" \
+ "\244\237\377\332\342\341\377\344\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\344\333\343\342\377\4\207\243\236\377o\221\212\377p\222\213\377" \
+ "\275\314\312\377\226\333\343\342\377\2\332\342\341\377\220\252\245\377" \
+ "\202o\221\212\377\1\264\305\302\377\344\333\343\342\377\3\233\253\250" \
+ "\377Slg\377\\so\377\221x\215\211\377\1o\204\200\377\202Slg\377\343\333" \
+ "\343\342\377\1\267\310\305\377\202o\221\212\377\1\237\265\261\377\230" \
+ "\333\343\342\377\5\324\336\334\377v\226\220\377o\221\212\377|\233\225" \
+ "\377\330\341\337\377\343\333\343\342\377\3\233\253\250\377Slg\377t\211" \
+ "\205\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\342\333\343" \
+ "\342\377\5\332\342\341\377~\234\226\377o\221\212\377t\225\216\377\322" \
+ "\334\333\377\231\333\343\342\377\1\251\275\271\377\202o\221\212\377\1" \
+ "\255\300\275\377\343\333\343\342\377\3\233\253\250\377Slg\377t\211\205" \
+ "\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\342\333\343\342" \
+ "\377\1\304\321\317\377\202o\221\212\377\1\245\272\266\377\232\333\343" \
+ "\342\377\4\327\340\337\377y\231\222\377o\221\212\377\207\243\236\377" \
+ "\343\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343" \
+ "\342\377\1\270\305\303\377\202Slg\377\342\333\343\342\377\1\243\270\264" \
+ "\377\202o\221\212\377\1\314\327\325\377\233\333\343\342\377\1\234\263" \
+ "\257\377\202o\221\212\377\1\321\333\332\377\342\333\343\342\377\3\277" \
+ "\312\310\377\237\256\253\377\256\273\271\377\221\333\343\342\377\1\323" \
+ "\334\333\377\202\275\310\306\377\342\333\343\342\377\3\202\237\231\377" \
+ "o\221\212\377\201\236\230\377\234\333\343\342\377\1\276\315\312\377\202" \
+ "o\221\212\377\1\261\303\300\377\377\333\343\342\377\333\333\343\342\377" \
+ "\1\330\341\340\377\202o\221\212\377\1\234\263\256\377\234\333\343\342" \
+ "\377\1\330\341\337\377\202o\221\212\377\1\234\263\257\377\377\333\343" \
+ "\342\377\333\333\343\342\377\1\317\332\330\377\202o\221\212\377\1\250" \
+ "\274\270\377\235\333\343\342\377\3y\230\222\377o\221\212\377\222\254" \
+ "\246\377\377\333\343\342\377\333\333\343\342\377\1\304\322\320\377\202" \
+ "o\221\212\377\1\264\306\302\377\235\333\343\342\377\3\205\242\234\377" \
+ "o\221\212\377\207\243\236\377\350\333\343\342\377\13\327\340\337\377" \
+ "\267\303\301\377\225\246\243\377{\217\213\377p\205\201\377f}x\377k\201" \
+ "}\377u\211\205\377\205\227\224\377\245\263\261\377\310\323\321\377\347" \
+ "\333\343\342\377\1\275\314\312\377\202o\221\212\377\1\274\314\311\377" \
+ "\235\333\343\342\377\3\215\250\242\377o\221\212\377\200\236\230\377\346" \
+ "\333\343\342\377\3\324\334\333\377\231\251\246\377_wr\377\212Slg\377" \
+ "\2x\215\211\377\270\304\302\377\345\333\343\342\377\1\306\323\321\377" \
+ "\202o\221\212\377\1\263\304\301\377\235\333\343\342\377\3\203\240\232" \
+ "\377o\221\212\377\211\244\237\377\345\333\343\342\377\2\300\314\312\377" \
+ "f|x\377\216Slg\377\2\216\240\235\377\330\340\337\377\343\333\343\342" \
+ "\377\1\320\333\331\377\202o\221\212\377\1\247\273\267\377\235\333\343" \
+ "\342\377\3w\227\221\377o\221\212\377\223\254\250\377\344\333\343\342" \
+ "\377\2\273\307\305\377Woj\377\220Slg\377\2y\216\212\377\330\341\340\377" \
+ "\342\333\343\342\377\4\331\342\340\377p\221\213\377o\221\212\377\231" \
+ "\261\254\377\234\333\343\342\377\1\326\337\336\377\202o\221\212\377\1" \
+ "\236\265\260\377\331\333\343\342\377\3\272\306\304\377\231\251\246\377" \
+ "\310\322\321\377\207\333\343\342\377\2\310\322\321\377\\to\377\205Sl" \
+ "g\377\7Woj\377dzv\377q\206\202\377}\221\215\377w\214\210\377k\201|\377" \
+ "]up\377\206Slg\377\1\211\233\230\377\343\333\343\342\377\3\206\242\234" \
+ "\377o\221\212\377|\233\225\377\234\333\343\342\377\1\271\311\306\377" \
+ "\202o\221\212\377\1\265\306\303\377\330\333\343\342\377\1\222\243\240" \
+ "\377\203Slg\377\1\271\306\304\377\206\333\343\342\377\1|\217\214\377" \
+ "\203Slg\377\3dzv\377\231\252\247\377\314\326\324\377\207\333\343\342" \
+ "\377\4\330\340\337\377\267\304\302\377\201\224\220\377Vni\377\203Slg" \
+ "\377\1\274\307\306\377\342\333\343\342\377\1\247\274\270\377\202o\221" \
+ "\212\377\1\307\323\321\377\233\333\343\342\377\4\227\257\253\377o\221" \
+ "\212\377q\222\213\377\324\336\334\377\327\333\343\342\377\2\325\335\334" \
+ "\377Zrm\377\203Slg\377\1\205\227\224\377\205\333\343\342\377\1\275\310" \
+ "\306\377\202Slg\377\3Umh\377\251\270\265\377\331\342\341\377\214\333" \
+ "\343\342\377\2\317\331\327\377y\216\212\377\202Slg\377\1t\211\205\377" \
+ "\342\333\343\342\377\1\310\325\323\377\202o\221\212\377\1\237\265\261" \
+ "\377\232\333\343\342\377\4\325\336\335\377v\226\217\377o\221\212\377" \
+ "\213\246\241\377\330\333\343\342\377\2\331\341\340\377czu\377\203Slg" \
+ "\377\1\221\243\237\377\205\333\343\342\377\4\220\241\236\377Slg\377T" \
+ "lg\377\253\271\267\377\217\333\343\342\377\2\326\336\335\377s\210\204" \
+ "\377\202Slg\377\1\317\331\327\377\342\333\343\342\377\4\203\240\232\377" \
+ "o\221\212\377r\223\214\377\317\331\330\377\205\333\343\342\377\2\305" \
+ "\322\320\377\322\334\332\377\212\333\343\342\377\3\332\342\341\377\305" \
+ "\322\320\377\322\334\333\377\205\333\343\342\377\1\243\270\264\377\202" \
+ "o\221\212\377\1\262\304\301\377\331\333\343\342\377\5\250\266\264\377" \
+ "Yql\377Slg\377f|x\377\310\322\321\377\205\333\343\342\377\3k\201}\377" \
+ "Slg\377\212\234\231\377\221\333\343\342\377\4\321\332\331\377Tmh\377" \
+ "Slg\377\253\271\267\377\342\333\343\342\377\1\276\315\312\377\202o\221" \
+ "\212\377\1\227\257\253\377\204\333\343\342\377\6\327\340\337\377\227" \
+ "\257\252\377\223\254\247\377\251\275\271\377\307\324\322\377\332\342" \
+ "\341\377\205\333\343\342\377\5\325\337\335\377\272\311\307\377\234\263" \
+ "\256\377\223\254\247\377\263\304\301\377\204\333\343\342\377\5\317\332" \
+ "\331\377s\224\215\377o\221\212\377\201\236\230\377\331\342\340\377\332" \
+ "\333\343\342\377\3\324\334\333\377\274\307\306\377\332\342\341\377\206" \
+ "\333\343\342\377\3Xql\377Slg\377\255\272\270\377\222\333\343\342\377" \
+ "\3m\202~\377Slg\377\230\251\246\377\343\333\343\342\377\1\216\250\243" \
+ "\377\202o\221\212\377\1\264\305\302\377\203\333\343\342\377\3\275\314" \
+ "\312\377\223\254\247\377\225\255\250\377\202\223\254\247\377\7\236\264" \
+ "\260\377\273\313\310\377\327\337\336\377\333\343\342\377\315\330\326" \
+ "\377\256\301\275\377\225\255\251\377\202\223\254\247\377\3\224\254\250" \
+ "\377\227\257\252\377\330\341\337\377\202\333\343\342\377\2\330\341\337" \
+ "\377\207\243\236\377\202o\221\212\377\1\273\312\310\377\343\333\343\342" \
+ "\377\1\324\335\334\377\202Slg\377\1\314\326\324\377\222\333\343\342\377" \
+ "\3\214\236\233\377Slg\377\214\235\232\377\343\333\343\342\377\5\312\326" \
+ "\324\377t\225\216\377o\221\212\377q\223\214\377\303\320\316\377\202\333" \
+ "\343\342\377\5\237\265\261\377\223\254\247\377\347\355\354\377\335\344" \
+ "\343\377\257\301\276\377\202\223\254\247\377\2\250\274\270\377\321\334" \
+ "\332\377\202\223\254\247\377\6\231\261\254\377\303\321\316\377\360\363" \
+ "\363\377\271\311\306\377\223\254\247\377\277\315\313\377\202\333\343" \
+ "\342\377\1\227\257\252\377\202o\221\212\377\1\222\254\246\377\344\333" \
+ "\343\342\377\1\325\335\334\377\202Slg\377\1\313\325\323\377\222\333\343" \
+ "\342\377\3\213\235\231\377Slg\377\214\236\233\377\344\333\343\342\377" \
+ "\1\273\312\310\377\202o\221\212\377\5v\226\220\377\277\316\313\377\311" \
+ "\325\323\377\223\254\247\377\251\275\271\377\203\377\377\377\377\7\355" \
+ "\361\360\377\227\257\253\377\226\256\251\377\273\312\307\377\223\254" \
+ "\247\377\271\311\306\377\372\373\373\377\202\377\377\377\377\5\346\354" \
+ "\353\377\223\254\247\377\240\266\262\377\330\341\340\377\232\261\255" \
+ "\377\202o\221\212\377\2\203\240\232\377\326\337\336\377\334\333\343\342" \
+ "\377\3\322\333\332\377\267\303\301\377\331\341\340\377\206\333\343\342" \
+ "\377\3Yql\377Slg\377\253\271\267\377\222\333\343\342\377\3k\201}\377" \
+ "Slg\377\231\251\246\377\345\333\343\342\377\1\252\276\272\377\202o\221" \
+ "\212\377\4p\222\213\377\234\263\256\377\223\254\247\377\327\340\336\377" \
+ "\203\377\377\377\377\2\344\352\351\377\232\261\254\377\202\223\254\247" \
+ "\377\3\224\255\250\377\262\303\300\377\371\372\372\377\203\377\377\377" \
+ "\377\3\250\274\270\377\223\254\247\377\214\246\241\377\202o\221\212\377" \
+ "\2y\231\222\377\317\331\330\377\334\333\343\342\377\5\247\266\263\377" \
+ "Xql\377Slg\377`ws\377\305\320\316\377\205\333\343\342\377\3l\201}\377" \
+ "Slg\377\210\233\227\377\221\333\343\342\377\4\317\331\327\377Tlg\377" \
+ "Slg\377\254\271\267\377\346\333\343\342\377\6\257\301\276\377p\222\213" \
+ "\377r\223\214\377\222\253\246\377\233\262\256\377\374\374\374\377\202" \
+ "\377\377\377\377\11\316\331\327\377\223\254\247\377\252\275\272\377\320" \
+ "\333\331\377\332\343\341\377\305\323\320\377\227\257\253\377\237\265" \
+ "\261\377\362\365\364\377\202\377\377\377\377\6\325\337\335\377\223\254" \
+ "\247\377\206\242\234\377o\221\212\377\202\237\231\377\315\330\326\377" \
+ "\334\333\343\342\377\2\331\341\340\377czu\377\203Slg\377\1\217\241\235" \
+ "\377\205\333\343\342\377\1\221\243\237\377\202Slg\377\1\251\267\265\377" \
+ "\217\333\343\342\377\5\325\335\334\377p\206\202\377Slg\377Tlg\377\320" \
+ "\331\330\377\347\333\343\342\377\4\277\316\313\377\204\241\233\377\223" \
+ "\254\247\377\306\323\320\377\202\377\377\377\377\4\352\357\356\377\225" \
+ "\255\250\377\300\317\314\377\376\376\376\377\203\377\377\377\377\12\361" \
+ "\364\363\377\236\264\260\377\257\302\276\377\376\376\376\377\377\377" \
+ "\377\377\373\374\373\377\232\261\254\377\222\253\246\377\217\251\244" \
+ "\377\325\337\335\377\335\333\343\342\377\2\325\336\335\377[sn\377\203" \
+ "Slg\377\1\206\231\225\377\205\333\343\342\377\1\276\312\310\377\202S" \
+ "lg\377\3Umh\377\251\267\265\377\331\342\341\377\214\333\343\342\377\2" \
+ "\315\326\325\377v\213\207\377\202Slg\377\1v\213\207\377\350\333\343\342" \
+ "\377\4\331\341\340\377\230\260\253\377\224\254\247\377\362\365\364\377" \
+ "\202\377\377\377\377\3\272\312\307\377\243\270\264\377\374\375\375\377" \
+ "\205\377\377\377\377\3\335\345\343\377\223\254\247\377\352\357\356\377" \
+ "\202\377\377\377\377\3\304\321\317\377\223\254\247\377\267\307\304\377" \
+ "\337\333\343\342\377\1\223\244\240\377\202Slg\377\2Umh\377\275\310\306" \
+ "\377\206\333\343\342\377\1~\222\216\377\203Slg\377\4czu\377\227\247\244" \
+ "\377\310\322\321\377\331\341\340\377\206\333\343\342\377\4\325\335\334" \
+ "\377\263\300\276\377}\220\215\377Tmh\377\203Slg\377\1\277\312\310\377" \
+ "\350\333\343\342\377\3\302\320\315\377\223\254\247\377\264\305\302\377" \
+ "\203\377\377\377\377\2\243\271\264\377\277\316\313\377\206\377\377\377" \
+ "\377\3\373\374\373\377\224\255\250\377\322\335\333\377\202\377\377\377" \
+ "\377\4\360\363\363\377\223\254\247\377\232\262\255\377\332\342\341\377" \
+ "\337\333\343\342\377\3\274\310\306\377\236\255\253\377\315\327\325\377" \
+ "\207\333\343\342\377\2\311\324\322\377^uq\377\205Slg\377\7Tmh\377_wr" \
+ "\377m\202~\377y\215\211\377s\210\204\377f}x\377Yql\377\206Slg\377\1\217" \
+ "\240\235\377\351\333\343\342\377\3\244\271\265\377\223\254\247\377\342" \
+ "\350\347\377\203\377\377\377\377\2\240\266\262\377\302\320\315\377\206" \
+ "\377\377\377\377\3\374\375\375\377\225\255\251\377\317\332\330\377\203" \
+ "\377\377\377\377\3\262\304\300\377\223\254\247\377\303\321\317\377\352" \
+ "\333\343\342\377\2\275\311\307\377Xql\377\220Slg\377\2}\221\215\377\331" \
+ "\342\341\377\350\333\343\342\377\4\316\331\327\377\223\254\247\377\243" \
+ "\270\264\377\376\376\376\377\203\377\377\377\377\2\267\307\304\377\250" \
+ "\274\270\377\206\377\377\377\377\3\345\353\351\377\223\254\247\377\346" \
+ "\354\353\377\203\377\377\377\377\3\340\347\345\377\223\254\247\377\245" \
+ "\272\266\377\353\333\343\342\377\2\303\316\314\377h\177z\377\215Slg\377" \
+ "\3Tlg\377\225\245\242\377\331\341\340\377\351\333\343\342\377\3\257\302" \
+ "\276\377\223\254\247\377\320\333\331\377\204\377\377\377\377\3\340\347" \
+ "\346\377\223\254\247\377\317\332\330\377\204\377\377\377\377\4\371\372" \
+ "\372\377\245\272\266\377\246\272\266\377\374\375\375\377\203\377\377" \
+ "\377\377\4\376\376\376\377\242\267\263\377\223\254\247\377\317\331\330" \
+ "\377\353\333\343\342\377\3\325\335\334\377\235\255\252\377czu\377\211" \
+ "Slg\377\3Tlg\377\177\222\217\377\277\312\310\377\352\333\343\342\377" \
+ "\4\326\337\336\377\225\256\251\377\227\257\253\377\371\372\372\377\205" \
+ "\377\377\377\377\11\277\316\313\377\223\254\247\377\272\312\307\377\341" \
+ "\350\346\377\353\360\357\377\326\340\336\377\240\266\261\377\227\257" \
+ "\252\377\352\357\356\377\205\377\377\377\377\3\316\331\327\377\223\254" \
+ "\247\377\260\302\277\377\355\333\343\342\377\13\330\341\340\377\273\307" \
+ "\305\377\231\252\247\377\177\222\217\377t\211\205\377k\201|\377o\205" \
+ "\201\377y\215\211\377\211\233\230\377\251\267\265\377\314\326\324\377" \
+ "\354\333\343\342\377\3\273\312\310\377\223\254\247\377\277\316\313\377" \
+ "\207\377\377\377\377\2\315\330\327\377\224\255\250\377\203\223\254\247" \
+ "\377\2\235\263\257\377\360\363\362\377\206\377\377\377\377\4\370\371" \
+ "\371\377\227\257\252\377\226\256\252\377\327\340\336\377\377\333\343" \
+ "\342\377\343\333\343\342\377\4\332\342\341\377\235\263\257\377\223\254" \
+ "\247\377\354\361\360\377\207\377\377\377\377\7\310\325\322\377\223\254" \
+ "\247\377\262\303\300\377\307\323\321\377\231\260\253\377\225\255\251" \
+ "\377\365\367\367\377\207\377\377\377\377\3\275\314\311\377\223\254\247" \
+ "\377\274\313\311\377\346\333\343\342\377\1\316\327\326\377\205\301\314" \
+ "\312\377\1\327\340\337\377\365\333\343\342\377\3\306\323\321\377\223" \
+ "\254\247\377\256\300\275\377\207\377\377\377\377\10\374\375\375\377\235" \
+ "\264\257\377\224\255\250\377\324\336\334\377\333\343\342\377\266\307" \
+ "\304\377\223\254\247\377\312\326\324\377\207\377\377\377\377\3\353\357" \
+ "\356\377\223\254\247\377\236\264\260\377\346\333\343\342\377\1\204\227" \
+ "\223\377\205Slg\377\1\311\324\322\377\365\333\343\342\377\3\250\274\270" \
+ "\377\223\254\247\377\335\345\344\377\207\377\377\377\377\3\332\342\340" \
+ "\377\223\254\247\377\254\277\274\377\202\333\343\342\377\4\323\335\334" \
+ "\377\224\255\250\377\236\265\260\377\375\376\375\377\207\377\377\377" \
+ "\377\3\256\301\275\377\223\254\247\377\310\324\322\377\345\333\343\342" \
+ "\377\1i\177{\377\205Slg\377\1\311\324\322\377\364\333\343\342\377\4\321" \
+ "\334\332\377\223\254\247\377\240\265\261\377\376\376\376\377\207\377" \
+ "\377\377\377\3\254\277\274\377\223\254\247\377\312\326\324\377\203\333" \
+ "\343\342\377\3\253\276\272\377\223\254\247\377\334\344\342\377\207\377" \
+ "\377\377\377\3\333\343\342\377\223\254\247\377\251\275\271\377\345\333" \
+ "\343\342\377\1Vni\377\202Slg\377\4Yrm\377\234\253\251\377\302\315\313" \
+ "\377\331\342\341\377\364\333\343\342\377\3\264\305\302\377\223\254\247" \
+ "\377\314\330\325\377\207\377\377\377\377\3\353\360\357\377\223\254\247" \
+ "\377\241\266\262\377\204\333\343\342\377\3\311\325\323\377\223\254\247" \
+ "\377\256\301\275\377\207\377\377\377\377\4\375\375\375\377\236\265\260" \
+ "\377\223\254\247\377\322\334\333\377\343\333\343\342\377\1\324\334\333" \
+ "\377\203Slg\377\1\261\277\274\377\366\333\343\342\377\4\330\341\340\377" \
+ "\230\260\253\377\225\256\251\377\366\370\370\377\207\377\377\377\377" \
+ "\3\276\315\312\377\223\254\247\377\277\315\313\377\205\333\343\342\377" \
+ "\3\237\265\261\377\223\254\247\377\355\361\360\377\207\377\377\377\377" \
+ "\3\312\326\324\377\223\254\247\377\265\306\303\377\343\333\343\342\377" \
+ "\1\326\337\336\377\202Slg\377\1]up\377\367\333\343\342\377\3\277\316" \
+ "\313\377\223\254\247\377\272\312\307\377\207\377\377\377\377\4\370\371" \
+ "\371\377\227\257\252\377\230\257\253\377\330\341\337\377\205\333\343" \
+ "\342\377\3\275\314\312\377\223\254\247\377\277\316\313\377\207\377\377" \
+ "\377\377\4\365\367\367\377\225\255\251\377\231\260\254\377\331\341\340" \
+ "\377\343\333\343\342\377\3`ws\377Slg\377i\200{\377\367\333\343\342\377" \
+ "\3\241\267\263\377\223\254\247\377\350\355\354\377\207\377\377\377\377" \
+ "\3\317\332\330\377\223\254\247\377\263\305\301\377\206\333\343\342\377" \
+ "\4\327\340\337\377\227\257\252\377\230\260\253\377\371\372\372\377\207" \
+ "\377\377\377\377\3\271\311\306\377\223\254\247\377\301\317\314\377\343" \
+ "\333\343\342\377\4y\215\211\377Slg\377Vni\377\327\340\337\377\220\333" \
+ "\343\342\377\1\324\335\334\377\202\301\314\312\377\342\333\343\342\377" \
+ "\3\313\327\325\377\223\254\247\377\251\275\271\377\207\377\377\377\377" \
+ "\4\376\376\376\377\242\267\263\377\223\254\247\377\321\333\332\377\207" \
+ "\333\343\342\377\3\262\303\300\377\223\254\247\377\321\334\332\377\207" \
+ "\377\377\377\377\3\346\354\352\377\223\254\247\377\242\270\263\377\343" \
+ "\333\343\342\377\1\260\276\273\377\202Slg\377\1\300\313\311\377\220\333" \
+ "\343\342\377\1\270\305\303\377\202Slg\377\342\333\343\342\377\3\255\300" \
+ "\274\377\223\254\247\377\327\340\336\377\207\377\377\377\377\3\340\347" \
+ "\346\377\223\254\247\377\247\273\270\377\210\333\343\342\377\3\320\332" \
+ "\331\377\223\254\247\377\244\271\265\377\210\377\377\377\377\3\247\273" \
+ "\267\377\223\254\247\377\314\330\326\377\342\333\343\342\377\5\331\342" \
+ "\341\377o\205\201\377Slg\377x\215\211\377\331\342\341\377\217\333\343" \
+ "\342\377\1\270\305\303\377\202Slg\377\341\333\343\342\377\4\325\336\335" \
+ "\377\225\255\250\377\233\262\255\377\374\374\374\377\207\377\377\377" \
+ "\377\3\263\305\301\377\223\254\247\377\306\323\321\377\211\333\343\342" \
+ "\377\3\246\273\267\377\223\254\247\377\343\351\350\377\207\377\377\377" \
+ "\377\3\325\336\334\377\223\254\247\377\256\300\275\377\343\333\343\342" \
+ "\377\5\316\330\326\377dzv\377Slg\377\220\241\236\377\332\342\341\377" \
+ "\216\333\343\342\377\1\270\305\303\377\202Slg\377\341\333\343\342\377" \
+ "\3\270\310\306\377\223\254\247\377\305\323\320\377\207\377\377\377\377" \
+ "\4\361\364\363\377\223\254\247\377\234\263\257\377\332\342\341\377\211" \
+ "\333\343\342\377\3\304\322\317\377\223\254\247\377\265\306\302\377\207" \
+ "\377\377\377\377\4\373\374\373\377\232\261\254\377\225\255\251\377\325" \
+ "\337\335\377\343\333\343\342\377\6\316\327\326\377\200\224\220\377Sl" \
+ "g\377h~z\377\246\265\262\377\326\336\335\377\214\333\343\342\377\1\270" \
+ "\305\303\377\202Slg\377\340\333\343\342\377\4\332\342\341\377\233\262" \
+ "\255\377\223\254\247\377\361\364\364\377\207\377\377\377\377\3\304\322" \
+ "\317\377\223\254\247\377\272\312\307\377\212\333\343\342\377\4\332\342" \
+ "\341\377\233\262\256\377\224\254\247\377\362\365\364\377\207\377\377" \
+ "\377\377\3\303\321\316\377\223\254\247\377\272\311\307\377\341\333\343" \
+ "\342\377\1\257\274\272\377\203}\220\215\377\1^vq\377\203Slg\377\3^vq" \
+ "\377n\203\177\377{\217\213\377\211}\220\215\377\1r\207\203\377\202Sl" \
+ "g\377\340\333\343\342\377\3\304\321\317\377\223\254\247\377\264\305\301" \
+ "\377\207\377\377\377\377\4\373\374\374\377\232\262\255\377\225\256\251" \
+ "\377\326\337\336\377\213\333\343\342\377\3\271\311\306\377\223\254\247" \
+ "\377\307\324\321\377\207\377\377\377\377\4\360\363\362\377\223\254\247" \
+ "\377\234\263\256\377\332\342\341\377\340\333\343\342\377\1\233\253\250" \
+ "\377\226Slg\377\340\333\343\342\377\3\246\272\266\377\223\254\247\377" \
+ "\341\350\347\377\207\377\377\377\377\3\326\337\335\377\223\254\247\377" \
+ "\256\301\275\377\214\333\343\342\377\4\325\336\335\377\225\255\250\377" \
+ "\234\263\256\377\374\375\374\377\207\377\377\377\377\3\262\304\300\377" \
+ "\223\254\247\377\305\322\320\377\340\333\343\342\377\1\233\253\250\377" \
+ "\226Slg\377\337\333\343\342\377\4\317\332\330\377\223\254\247\377\242" \
+ "\270\263\377\376\376\376\377\207\377\377\377\377\3\251\274\270\377\223" \
+ "\254\247\377\315\330\326\377\215\333\343\342\377\3\255\300\274\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\337\346\345\377\223" \
+ "\254\247\377\247\273\267\377\340\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\337\333\343\342\377\3\261\303\300\377\223\254\247\377\320\333" \
+ "\331\377\207\377\377\377\377\3\347\355\354\377\223\254\247\377\243\270" \
+ "\264\377\216\333\343\342\377\3\314\327\325\377\223\254\247\377\252\276" \
+ "\272\377\207\377\377\377\377\4\376\376\376\377\241\267\262\377\223\254" \
+ "\247\377\320\333\331\377\337\333\343\342\377\3\233\253\250\377Slg\377" \
+ "m\202~\377\221\275\310\306\377\1\242\261\256\377\202Slg\377\336\333\343" \
+ "\342\377\1\327\340\337\377\202\227\257\252\377\1\370\372\371\377\207" \
+ "\377\377\377\377\3\272\312\307\377\223\254\247\377\301\317\315\377\217" \
+ "\333\343\342\377\3\241\267\263\377\223\254\247\377\351\356\355\377\207" \
+ "\377\377\377\377\3\316\331\327\377\223\254\247\377\263\304\301\377\337" \
+ "\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\336\333\343\342\377\3\275\314\311\377" \
+ "\223\254\247\377\277\315\312\377\207\377\377\377\377\4\366\370\367\377" \
+ "\225\256\251\377\231\260\254\377\331\341\340\377\217\333\343\342\377" \
+ "\3\300\316\314\377\223\254\247\377\274\313\310\377\207\377\377\377\377" \
+ "\4\367\371\371\377\226\256\252\377\227\257\252\377\330\340\337\377\336" \
+ "\333\343\342\377\3\233\253\250\377Slg\377t\211\205\377\221\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\336\333\343\342\377\3\237\265\260\377" \
+ "\223\254\247\377\354\360\357\377\207\377\377\377\377\3\313\327\325\377" \
+ "\223\254\247\377\266\306\303\377\220\333\343\342\377\4\331\341\340\377" \
+ "\230\260\253\377\226\256\252\377\367\371\370\377\207\377\377\377\377" \
+ "\3\274\314\311\377\223\254\247\377\276\315\312\377\336\333\343\342\377" \
+ "\3\237\256\253\377[sn\377{\217\213\377\221\333\343\342\377\1\302\315" \
+ "\313\377\202x\215\211\377\335\333\343\342\377\3\310\325\323\377\223\254" \
+ "\247\377\255\300\274\377\207\377\377\377\377\4\375\376\375\377\237\265" \
+ "\261\377\224\254\247\377\323\334\333\377\221\333\343\342\377\3\264\305" \
+ "\302\377\223\254\247\377\315\331\326\377\207\377\377\377\377\3\352\357" \
+ "\356\377\223\254\247\377\240\266\261\377\377\333\343\342\377\323\333" \
+ "\343\342\377\3\252\276\272\377\223\254\247\377\333\343\341\377\207\377" \
+ "\377\377\377\3\335\344\343\377\223\254\247\377\252\275\272\377\222\333" \
+ "\343\342\377\4\322\334\332\377\223\254\247\377\241\266\262\377\376\376" \
+ "\376\377\207\377\377\377\377\3\253\276\273\377\223\254\247\377\312\326" \
+ "\324\377\356\333\343\342\377\1\331\342\341\377\341\333\343\342\377\4" \
+ "\323\335\333\377\224\254\247\377\235\264\257\377\375\375\375\377\207" \
+ "\377\377\377\377\3\257\302\276\377\223\254\247\377\310\324\322\377\207" \
+ "\333\343\342\377\4\327\340\337\377\264\305\302\377\260\302\277\377\305" \
+ "\321\317\377\210\333\343\342\377\3\251\274\271\377\223\254\247\377\337" \
+ "\346\345\377\207\377\377\377\377\3\330\341\337\377\223\254\247\377\253" \
+ "\276\273\377\356\333\343\342\377\5\264\301\277\377^uq\377w\214\210\377" \
+ "\236\255\253\377\330\341\340\377\335\333\343\342\377\3\266\306\303\377" \
+ "\223\254\247\377\311\325\323\377\207\377\377\377\377\3\356\362\361\377" \
+ "\223\254\247\377\236\265\260\377\210\333\343\342\377\5\251\275\272\377" \
+ "\226\256\251\377\240\266\261\377\222\253\246\377\316\331\330\377\207" \
+ "\333\343\342\377\3\307\323\321\377\223\254\247\377\261\303\300\377\207" \
+ "\377\377\377\377\4\374\375\374\377\234\263\256\377\224\255\250\377\324" \
+ "\335\334\377\334\333\343\342\377\3\241\260\255\377_vr\377z\216\212\377" \
+ "\216\333\343\342\377\1\264\301\277\377\203Slg\377\2m\202~\377\312\324" \
+ "\323\377\333\333\343\342\377\4\331\341\340\377\231\261\254\377\225\255" \
+ "\250\377\364\367\366\377\207\377\377\377\377\3\301\317\314\377\223\254" \
+ "\247\377\275\314\311\377\207\333\343\342\377\6\331\342\341\377\225\255" \
+ "\250\377\320\333\331\377\374\375\375\377\234\263\256\377\261\303\300" \
+ "\377\207\333\343\342\377\4\332\342\341\377\235\264\257\377\223\254\247" \
+ "\377\360\363\362\377\207\377\377\377\377\3\307\324\321\377\223\254\247" \
+ "\377\267\310\305\377\334\333\343\342\377\3\233\253\250\377Slg\377p\205" \
+ "\201\377\216\333\343\342\377\2\270\305\303\377Woj\377\203Slg\377\1~\221" \
+ "\216\377\333\333\343\342\377\3\301\317\315\377\223\254\247\377\270\310" \
+ "\305\377\207\377\377\377\377\4\371\373\372\377\230\260\253\377\226\256" \
+ "\252\377\327\340\336\377\207\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\210\333\343\342\377\3\273\313\310\377\223\254\247\377\303\321\316" \
+ "\377\207\377\377\377\377\4\363\365\365\377\224\255\250\377\232\261\255" \
+ "\377\331\342\341\377\333\333\343\342\377\3\233\253\250\377Slg\377p\205" \
+ "\201\377\217\333\343\342\377\3\332\342\341\377\306\321\317\377\206\230" \
+ "\225\377\202Slg\377\1\300\313\311\377\332\333\343\342\377\3\243\270\264" \
+ "\377\223\254\247\377\345\353\352\377\207\377\377\377\377\3\322\335\333" \
+ "\377\223\254\247\377\261\303\277\377\210\333\343\342\377\6\331\340\337" \
+ "\377\223\254\247\377\332\342\341\377\377\377\377\377\251\275\271\377" \
+ "\255\300\275\377\210\333\343\342\377\4\326\337\336\377\226\256\251\377" \
+ "\232\261\254\377\372\373\373\377\207\377\377\377\377\3\266\307\303\377" \
+ "\223\254\247\377\303\320\316\377\333\333\343\342\377\3\233\253\250\377" \
+ "Slg\377p\205\201\377\221\333\343\342\377\4\332\342\341\377q\207\202\377" \
+ "Slg\377\246\264\262\377\331\333\343\342\377\3\315\330\326\377\223\254" \
+ "\247\377\246\273\267\377\210\377\377\377\377\3\245\272\266\377\223\254" \
+ "\247\377\317\332\330\377\210\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\211\333\343\342\377\3\260\302\276\377\223\254\247\377\324\336\334" \
+ "\377\207\377\377\377\377\3\343\351\350\377\223\254\247\377\244\271\265" \
+ "\377\333\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\222\333" \
+ "\343\342\377\3\223\244\240\377Slg\377\223\244\240\377\331\333\343\342" \
+ "\377\3\257\301\276\377\223\254\247\377\324\336\334\377\207\377\377\377" \
+ "\377\3\344\352\351\377\223\254\247\377\245\272\266\377\211\333\343\342" \
+ "\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377\377\377" \
+ "\251\275\271\377\255\300\275\377\211\333\343\342\377\3\316\331\327\377" \
+ "\223\254\247\377\247\273\267\377\210\377\377\377\377\3\244\271\265\377" \
+ "\223\254\247\377\316\331\327\377\332\333\343\342\377\3\233\253\250\377" \
+ "Slg\377p\205\201\377\222\333\343\342\377\3\213\235\232\377Slg\377\214" \
+ "\235\232\377\330\333\343\342\377\10\326\337\336\377\225\256\251\377\231" \
+ "\261\254\377\372\373\373\377\354\360\357\377\301\317\315\377\325\337" \
+ "\335\377\373\374\374\377\203\377\377\377\377\3\266\307\303\377\223\254" \
+ "\247\377\303\321\317\377\211\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\212\333\343\342\377\3\244\271\265\377\223\254\247\377\346\353\352" \
+ "\377\203\377\377\377\377\7\356\362\362\377\303\321\316\377\322\334\332" \
+ "\377\372\373\373\377\322\334\332\377\223\254\247\377\260\302\277\377" \
+ "\332\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221\333\343" \
+ "\342\377\4\314\325\324\377_wr\377Slg\377\235\254\252\377\306\333\343" \
+ "\342\377\1\203\240\232\377\205r\223\214\377\1w\227\221\377\213\253\276" \
+ "\273\377\16\240\265\262\377\223\254\247\377\302\320\315\377\266\307\304" \
+ "\377\223\254\247\377\233\262\256\377\223\254\247\377\233\262\255\377" \
+ "\346\353\352\377\377\377\377\377\363\366\365\377\224\255\250\377\225" \
+ "\256\251\377\252\275\272\377\211\253\276\273\377\6\252\275\272\377\223" \
+ "\254\247\377\332\342\341\377\377\377\377\377\250\274\270\377\233\262" \
+ "\256\377\212\253\276\273\377\3\242\267\264\377\223\254\247\377\270\310" \
+ "\305\377\202\377\377\377\377\11\275\315\312\377\223\254\247\377\232\262" \
+ "\255\377\224\255\250\377\231\261\254\377\332\344\341\377\230\260\253" \
+ "\377\224\254\250\377\251\275\271\377\212\253\276\273\377\1\227\257\253" \
+ "\377\205r\223\214\377\2s\224\215\377\261\303\300\377\300\333\343\342" \
+ "\377\1\267\304\302\377\206\211\234\230\377\3p\205\201\377Slg\377^vq\377" \
+ "\216\211\234\230\377\4\206\231\225\377\177\223\217\377r\207\203\377T" \
+ "mh\377\202Slg\377\1\257\274\272\377\306\333\343\342\377\1|\233\224\377" \
+ "\221o\221\212\377\15\215\250\242\377\223\254\247\377\335\345\343\377" \
+ "\223\254\247\377\317\332\330\377\375\375\375\377\360\363\363\377\243" \
+ "\270\264\377\265\306\303\377\377\377\377\377\310\325\322\377\223\254" \
+ "\247\377\200\236\227\377\212o\221\212\377\6p\221\212\377\223\254\247" \
+ "\377\332\342\341\377\377\377\377\377\247\273\267\377\205\242\234\377" \
+ "\213o\221\212\377\15\217\251\244\377\224\255\250\377\365\367\367\377" \
+ "\361\364\364\377\224\255\250\377\306\323\321\377\374\375\375\377\363" \
+ "\366\365\377\252\276\272\377\255\300\274\377\300\317\314\377\223\254" \
+ "\247\377~\234\226\377\221o\221\212\377\1\256\301\276\377\300\333\343" \
+ "\342\377\1\237\256\253\377\234Slg\377\2]up\377\321\333\331\377\306\333" \
+ "\343\342\377\1|\233\224\377\220o\221\212\377\6y\230\222\377\223\254\247" \
+ "\377\261\303\277\377\277\316\313\377\235\264\257\377\376\376\376\377" \
+ "\202\377\377\377\377\6\317\332\330\377\224\255\250\377\362\366\365\377" \
+ "\234\263\257\377\222\253\246\377r\223\214\377\212o\221\212\377\6p\221" \
+ "\212\377\223\254\247\377\332\342\341\377\377\377\377\377\247\273\267" \
+ "\377\205\242\234\377\213o\221\212\377\6\201\236\230\377\223\254\247\377" \
+ "\312\326\323\377\310\324\322\377\227\257\252\377\372\373\373\377\202" \
+ "\377\377\377\377\5\331\342\340\377\223\254\247\377\337\346\345\377\223" \
+ "\254\247\377\215\247\242\377\221o\221\212\377\1\256\301\276\377\300\333" \
+ "\343\342\377\1\237\256\253\377\234Slg\377\1\246\265\262\377\307\333\343" \
+ "\342\377\1|\233\224\377\220o\221\212\377\6\210\244\236\377\223\254\247" \
+ "\377\336\346\344\377\320\333\330\377\225\256\251\377\365\367\367\377" \
+ "\202\377\377\377\377\5\275\315\312\377\236\264\260\377\327\341\337\377" \
+ "\223\254\247\377\206\242\234\377\213o\221\212\377\6p\221\212\377\223" \
+ "\254\247\377\332\342\341\377\377\377\377\377\247\273\267\377\205\242" \
+ "\234\377\213o\221\212\377\6r\223\214\377\222\253\246\377\236\264\260" \
+ "\377\327\340\336\377\223\254\247\377\354\360\357\377\202\377\377\377" \
+ "\377\6\310\324\322\377\231\260\253\377\371\373\373\377\257\301\276\377" \
+ "\223\254\247\377x\230\221\377\220o\221\212\377\1\256\301\276\377\300" \
+ "\333\343\342\377\1\237\256\253\377\232Slg\377\2q\207\202\377\267\304" \
+ "\302\377\310\333\343\342\377\1|\233\224\377\217o\221\212\377\16s\224" \
+ "\215\377\222\253\246\377\240\266\262\377\376\376\376\377\371\372\372" \
+ "\377\230\260\253\377\250\274\270\377\326\337\336\377\301\317\315\377" \
+ "\226\256\251\377\310\325\322\377\253\277\273\377\223\254\247\377w\227" \
+ "\220\377\213o\221\212\377\6p\221\212\377\223\254\247\377\332\342\341" \
+ "\377\377\377\377\377\247\273\267\377\205\242\234\377\214o\221\212\377" \
+ "\15\206\242\235\377\223\254\247\377\330\341\340\377\234\263\256\377\245" \
+ "\272\265\377\324\336\334\377\305\322\317\377\230\260\253\377\301\317" \
+ "\314\377\377\377\377\377\334\344\343\377\223\254\247\377\207\243\236" \
+ "\377\220o\221\212\377\1\256\301\276\377\300\333\343\342\377\1\306\321" \
+ "\317\377\206\254\271\267\377\3\202\225\221\377Slg\377f|x\377\216\254" \
+ "\271\267\377\3\263\300\276\377\304\317\315\377\325\335\334\377\312\333" \
+ "\343\342\377\1\255\300\274\377\205\244\271\265\377\1\251\275\271\377" \
+ "\211\333\343\342\377\3\263\305\301\377\223\254\247\377\315\330\326\377" \
+ "\202\377\377\377\377\10\341\350\346\377\257\301\275\377\223\254\247\377" \
+ "\234\263\256\377\306\323\321\377\345\352\351\377\223\254\247\377\241" \
+ "\266\262\377\214\333\343\342\377\6\331\340\337\377\223\254\247\377\332" \
+ "\342\341\377\377\377\377\377\251\275\271\377\255\300\275\377\214\333" \
+ "\343\342\377\16\311\325\323\377\223\254\247\377\256\300\275\377\344\352" \
+ "\351\377\262\304\301\377\223\254\247\377\231\261\254\377\303\321\316" \
+ "\377\365\367\367\377\377\377\377\377\375\376\375\377\237\265\260\377" \
+ "\223\254\247\377\322\334\333\377\210\333\343\342\377\1\310\324\322\377" \
+ "\206\244\271\265\377\1\304\322\320\377\307\333\343\342\377\3\233\253" \
+ "\250\377Slg\377p\205\201\377\352\333\343\342\377\4\330\341\337\377\230" \
+ "\257\253\377\226\256\251\377\366\370\370\377\204\377\377\377\377\6\361" \
+ "\364\363\377\374\375\375\377\377\377\377\377\275\314\311\377\223\254" \
+ "\247\377\277\315\313\377\214\333\343\342\377\6\331\340\337\377\223\254" \
+ "\247\377\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275" \
+ "\377\215\333\343\342\377\6\237\265\261\377\223\254\247\377\354\361\360" \
+ "\377\377\377\377\377\362\365\365\377\372\373\373\377\204\377\377\377" \
+ "\377\3\313\327\324\377\223\254\247\377\265\306\302\377\327\333\343\342" \
+ "\377\3\233\253\250\377Slg\377p\205\201\377\352\333\343\342\377\3\277" \
+ "\315\313\377\223\254\247\377\274\313\310\377\207\377\377\377\377\4\370" \
+ "\371\371\377\227\257\252\377\230\257\253\377\330\341\337\377\214\333" \
+ "\343\342\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377" \
+ "\377\377\251\275\271\377\255\300\275\377\215\333\343\342\377\3\275\314" \
+ "\312\377\223\254\247\377\277\316\313\377\207\377\377\377\377\4\366\370" \
+ "\367\377\225\256\251\377\230\260\253\377\331\341\340\377\326\333\343" \
+ "\342\377\3\253\271\266\377t\211\205\377\213\235\231\377\352\333\343\342" \
+ "\377\3\241\266\262\377\223\254\247\377\351\356\355\377\207\377\377\377" \
+ "\377\3\317\332\330\377\223\254\247\377\263\305\301\377\215\333\343\342" \
+ "\377\6\331\340\337\377\223\254\247\377\332\342\341\377\377\377\377\377" \
+ "\251\275\271\377\255\300\275\377\215\333\343\342\377\4\327\340\337\377" \
+ "\227\257\252\377\227\257\253\377\371\372\372\377\207\377\377\377\377" \
+ "\3\271\311\306\377\223\254\247\377\300\316\314\377\377\333\343\342\377" \
+ "\303\333\343\342\377\3\312\326\324\377\223\254\247\377\252\275\271\377" \
+ "\207\377\377\377\377\4\376\376\376\377\242\267\263\377\223\254\247\377" \
+ "\321\333\332\377\215\333\343\342\377\6\331\340\337\377\223\254\247\377" \
+ "\332\342\341\377\377\377\377\377\251\275\271\377\255\300\275\377\216" \
+ "\333\343\342\377\3\262\303\300\377\223\254\247\377\320\333\331\377\207" \
+ "\377\377\377\377\3\347\354\353\377\223\254\247\377\242\267\263\377\377" \
+ "\333\343\342\377\303\333\343\342\377\3\254\277\274\377\223\254\247\377" \
+ "\330\341\337\377\207\377\377\377\377\3\340\347\346\377\223\254\247\377" \
+ "\247\273\270\377\216\333\343\342\377\6\331\340\337\377\223\254\247\377" \
+ "\330\341\337\377\377\377\377\377\250\274\270\377\255\300\275\377\216" \
+ "\333\343\342\377\3\320\332\331\377\223\254\247\377\243\271\264\377\210" \
+ "\377\377\377\377\3\250\274\270\377\223\254\247\377\314\327\325\377\377" \
+ "\333\343\342\377\301\333\343\342\377\4\324\336\334\377\224\255\250\377" \
+ "\233\262\256\377\374\374\374\377\207\377\377\377\377\3\263\304\301\377" \
+ "\223\254\247\377\306\323\321\377\217\333\343\342\377\5\237\265\261\377" \
+ "\252\275\271\377\322\334\332\377\223\254\247\377\275\314\311\377\217" \
+ "\333\343\342\377\3\246\273\267\377\223\254\247\377\342\351\347\377\207" \
+ "\377\377\377\377\3\325\337\335\377\223\254\247\377\256\300\275\377\343" \
+ "\333\343\342\377\6\267\303\301\377\223\244\240\377|\220\214\377\213\235" \
+ "\231\377\250\267\264\377\311\323\322\377\327\333\343\342\377\3\270\310" \
+ "\305\377\223\254\247\377\306\323\321\377\207\377\377\377\377\4\361\364" \
+ "\363\377\223\254\247\377\234\263\257\377\332\342\341\377\217\333\343" \
+ "\342\377\1\307\323\321\377\202\223\254\247\377\2\240\265\261\377\332" \
+ "\342\341\377\217\333\343\342\377\3\304\322\317\377\223\254\247\377\264" \
+ "\306\302\377\207\377\377\377\377\4\373\374\374\377\232\262\255\377\225" \
+ "\255\250\377\325\336\335\377\325\333\343\342\377\1\302\315\313\377\204" \
+ "\222\243\240\377\1\253\271\267\377\205\333\343\342\377\2\323\334\333" \
+ "\377\200\223\220\377\205Slg\377\2Uni\377\247\266\263\377\325\333\343" \
+ "\342\377\4\332\342\341\377\233\262\255\377\224\254\247\377\362\365\364" \
+ "\377\207\377\377\377\377\3\304\322\317\377\223\254\247\377\272\312\307" \
+ "\377\221\333\343\342\377\3\327\337\336\377\326\337\335\377\331\340\337" \
+ "\377\220\333\343\342\377\4\332\342\341\377\233\262\256\377\224\254\247" \
+ "\377\362\365\364\377\207\377\377\377\377\3\304\322\317\377\223\254\247" \
+ "\377\271\311\306\377\325\333\343\342\377\1\211\233\230\377\204Slg\377" \
+ "\1\201\224\220\377\205\333\343\342\377\1\200\223\220\377\210Slg\377\1" \
+ "\227\247\244\377\324\333\343\342\377\3\303\321\317\377\223\254\247\377" \
+ "\265\306\302\377\207\377\377\377\377\4\373\374\374\377\232\261\255\377" \
+ "\225\256\251\377\326\337\336\377\245\333\343\342\377\3\271\311\306\377" \
+ "\223\254\247\377\306\323\320\377\207\377\377\377\377\4\361\364\363\377" \
+ "\223\254\247\377\234\262\256\377\332\342\341\377\323\333\343\342\377" \
+ "\2\330\341\340\377]up\377\203Slg\377\2[sn\377\227\247\244\377\204\333" \
+ "\343\342\377\1\247\266\263\377\212Slg\377\1\305\317\316\377\323\333\343" \
+ "\342\377\3\245\272\266\377\223\254\247\377\342\351\347\377\207\377\377" \
+ "\377\377\3\325\337\335\377\223\254\247\377\256\301\275\377\246\333\343" \
+ "\342\377\4\325\336\335\377\225\255\250\377\233\262\256\377\374\374\374" \
+ "\377\207\377\377\377\377\3\263\304\301\377\223\254\247\377\305\322\320" \
+ "\377\323\333\343\342\377\1\265\302\300\377\202Slg\377\3]up\377\263\300" \
+ "\275\377\332\342\341\377\205\333\343\342\377\1i\177{\377\203Slg\377\5" \
+ "Yrm\377\233\253\250\377\266\302\300\377\246\264\262\377x\214\210\377" \
+ "\202Slg\377\1\204\227\223\377\322\333\343\342\377\3\317\332\330\377\223" \
+ "\254\247\377\243\270\264\377\210\377\377\377\377\3\250\274\270\377\223" \
+ "\254\247\377\315\330\326\377\247\333\343\342\377\3\255\300\274\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\340\347\346\377\223" \
+ "\254\247\377\247\273\267\377\323\333\343\342\377\4\212\234\231\377Sl" \
+ "g\377Voj\377\307\322\320\377\206\333\343\342\377\1\270\305\303\377\203" \
+ "Slg\377\2Vni\377\303\316\314\377\203\333\343\342\377\5\331\342\341\377" \
+ "\210\233\227\377Slg\377Umh\377\315\327\325\377\321\333\343\342\377\3" \
+ "\261\303\277\377\223\254\247\377\321\333\331\377\207\377\377\377\377" \
+ "\3\347\354\353\377\223\254\247\377\243\270\264\377\250\333\343\342\377" \
+ "\3\314\327\325\377\223\254\247\377\252\275\271\377\207\377\377\377\377" \
+ "\4\376\376\376\377\242\267\263\377\223\254\247\377\320\333\331\377\322" \
+ "\333\343\342\377\3u\211\205\377Slg\377\221\242\237\377\207\333\343\342" \
+ "\377\1\204\227\223\377\203Slg\377\1\221\243\237\377\205\333\343\342\377" \
+ "\4\317\331\327\377Voj\377Slg\377\266\303\301\377\320\333\343\342\377" \
+ "\4\327\340\336\377\226\256\252\377\227\257\253\377\371\372\372\377\207" \
+ "\377\377\377\377\3\271\311\306\377\223\254\247\377\301\317\315\377\251" \
+ "\333\343\342\377\3\241\267\263\377\223\254\247\377\351\356\355\377\207" \
+ "\377\377\377\377\3\317\332\330\377\223\254\247\377\262\304\300\377\322" \
+ "\333\343\342\377\3dzv\377Slg\377\274\307\306\377\206\333\343\342\377" \
+ "\2\331\341\340\377\\to\377\202Slg\377\2Tmh\377\315\327\325\377\206\333" \
+ "\343\342\377\3z\216\212\377Slg\377\246\264\262\377\320\333\343\342\377" \
+ "\3\274\313\311\377\223\254\247\377\277\316\313\377\207\377\377\377\377" \
+ "\4\365\367\367\377\225\255\251\377\231\260\254\377\331\341\340\377\251" \
+ "\333\343\342\377\3\300\316\314\377\223\254\247\377\273\313\310\377\207" \
+ "\377\377\377\377\1\370\371\371\377\202\227\257\252\377\1\327\340\337" \
+ "\377\320\333\343\342\377\4\331\341\340\377Umh\377Slg\377\317\330\327" \
+ "\377\206\333\343\342\377\1\271\306\304\377\203Slg\377\1z\216\212\377" \
+ "\207\333\343\342\377\3\213\235\231\377Slg\377\225\246\243\377\320\333" \
+ "\343\342\377\3\236\265\260\377\223\254\247\377\355\361\360\377\207\377" \
+ "\377\377\377\3\313\327\324\377\223\254\247\377\266\306\303\377\252\333" \
+ "\343\342\377\4\331\341\340\377\230\260\253\377\226\256\251\377\366\370" \
+ "\370\377\207\377\377\377\377\3\275\314\311\377\223\254\247\377\276\315" \
+ "\312\377\320\333\343\342\377\1\324\334\333\377\202Slg\377\1\325\336\335" \
+ "\377\206\333\343\342\377\1\216\240\235\377\203Slg\377\1\255\272\270\377" \
+ "\207\333\343\342\377\3\227\247\244\377Slg\377\210\233\227\377\317\333" \
+ "\343\342\377\3\310\324\322\377\223\254\247\377\256\301\275\377\207\377" \
+ "\377\377\377\4\375\376\375\377\237\265\260\377\224\254\247\377\323\334" \
+ "\333\377\253\333\343\342\377\3\264\305\302\377\223\254\247\377\315\330" \
+ "\326\377\207\377\377\377\377\3\353\357\356\377\223\254\247\377\237\265" \
+ "\261\377\321\333\343\342\377\3\\to\377Slg\377\310\322\321\377\205\333" \
+ "\343\342\377\2\330\341\340\377_vr\377\202Slg\377\2Xpk\377\325\336\335" \
+ "\377\207\333\343\342\377\3\214\235\232\377Slg\377\216\237\234\377\317" \
+ "\333\343\342\377\3\252\275\271\377\223\254\247\377\333\343\342\377\207" \
+ "\377\377\377\377\3\334\344\343\377\223\254\247\377\252\275\272\377\254" \
+ "\333\343\342\377\4\322\334\332\377\223\254\247\377\240\266\262\377\376" \
+ "\376\376\377\207\377\377\377\377\3\254\277\273\377\223\254\247\377\311" \
+ "\325\323\377\320\333\343\342\377\3n\203\177\377Slg\377\257\274\272\377" \
+ "\205\333\343\342\377\1\261\277\274\377\203Slg\377\1\200\223\220\377\210" \
+ "\333\343\342\377\3{\217\213\377Slg\377\227\247\244\377\316\333\343\342" \
+ "\377\4\323\334\333\377\223\254\247\377\236\265\260\377\375\375\375\377" \
+ "\207\377\377\377\377\3\257\301\276\377\223\254\247\377\310\324\322\377" \
+ "\255\333\343\342\377\3\251\274\271\377\223\254\247\377\336\346\344\377" \
+ "\207\377\377\377\377\3\331\342\340\377\223\254\247\377\253\276\273\377" \
+ "\320\333\343\342\377\3\201\224\220\377Slg\377v\212\206\377\204\333\343" \
+ "\342\377\2\330\340\337\377i\200{\377\203Slg\377\1\260\276\273\377\207" \
+ "\333\343\342\377\4\325\335\334\377^uq\377Slg\377\253\271\267\377\316" \
+ "\333\343\342\377\3\265\306\303\377\223\254\247\377\312\326\324\377\207" \
+ "\377\377\377\377\3\356\361\361\377\223\254\247\377\236\265\260\377\256" \
+ "\333\343\342\377\3\307\323\321\377\223\254\247\377\261\303\277\377\207" \
+ "\377\377\377\377\4\374\375\375\377\235\263\257\377\224\255\250\377\323" \
+ "\335\334\377\317\333\343\342\377\1\263\300\275\377\202Slg\377\5\206\231" \
+ "\225\377\314\326\324\377\333\343\342\377\315\327\325\377\177\222\217" \
+ "\377\203Slg\377\2czu\377\331\341\340\377\207\333\343\342\377\1\234\253" \
+ "\251\377\202Slg\377\1\303\316\314\377\315\333\343\342\377\4\331\341\340" \
+ "\377\231\260\254\377\225\255\251\377\365\367\367\377\207\377\377\377" \
+ "\377\3\300\317\314\377\223\254\247\377\275\314\311\377\256\333\343\342" \
+ "\377\4\332\342\341\377\235\264\257\377\223\254\247\377\357\362\362\377" \
+ "\207\377\377\377\377\3\310\325\322\377\223\254\247\377\267\307\304\377" \
+ "\320\333\343\342\377\1m\202~\377\203Slg\377\1Xql\377\205Slg\377\1\235" \
+ "\254\252\377\207\333\343\342\377\4\241\261\256\377Voj\377Slg\377czu\377" \
+ "\316\333\343\342\377\3\301\317\314\377\223\254\247\377\271\311\306\377" \
+ "\207\377\377\377\377\4\371\373\372\377\230\260\253\377\226\256\252\377" \
+ "\327\340\336\377\257\333\343\342\377\3\273\313\310\377\223\254\247\377" \
+ "\302\320\315\377\207\377\377\377\377\4\363\366\366\377\224\255\250\377" \
+ "\232\261\254\377\331\341\340\377\317\333\343\342\377\2\265\302\300\377" \
+ "Voj\377\207Slg\377\2o\205\201\377\330\340\337\377\204\333\343\342\377" \
+ "\3\274\307\306\377\210\233\227\377k\201}\377\203Slg\377\1\221\243\237" \
+ "\377\316\333\343\342\377\3\243\270\264\377\223\254\247\377\346\354\352" \
+ "\377\207\377\377\377\377\3\322\334\332\377\223\254\247\377\261\303\277" \
+ "\377\260\333\343\342\377\4\326\337\336\377\226\256\251\377\231\261\254" \
+ "\377\372\373\373\377\207\377\377\377\377\3\267\307\304\377\223\254\247" \
+ "\377\302\320\316\377\320\333\343\342\377\2\274\310\306\377_wr\377\205" \
+ "Slg\377\2j\200|\377\311\324\322\377\205\333\343\342\377\1\226\247\244" \
+ "\377\205Slg\377\1\300\313\311\377\315\333\343\342\377\3\314\330\326\377" \
+ "\223\254\247\377\247\273\267\377\210\377\377\377\377\3\244\271\265\377" \
+ "\223\254\247\377\317\332\330\377\261\333\343\342\377\3\260\302\276\377" \
+ "\223\254\247\377\324\336\334\377\207\377\377\377\377\3\344\352\351\377" \
+ "\223\254\247\377\244\271\265\377\321\333\343\342\377\7\316\330\326\377" \
+ "\250\266\264\377\214\236\233\377v\213\207\377\206\230\225\377\244\263" \
+ "\260\377\330\341\340\377\206\333\343\342\377\1\243\262\257\377\204l\201" \
+ "}\377\1x\215\211\377\316\333\343\342\377\3\256\301\275\377\223\254\247" \
+ "\377\325\336\334\377\207\377\377\377\377\3\343\351\350\377\223\254\247" \
+ "\377\245\272\266\377\262\333\343\342\377\3\316\331\327\377\223\254\247" \
+ "\377\246\273\267\377\210\377\377\377\377\3\245\272\266\377\223\254\247" \
+ "\377\316\331\327\377\377\333\343\342\377\261\333\343\342\377\4\325\337" \
+ "\335\377\225\255\251\377\232\261\254\377\373\374\373\377\207\377\377" \
+ "\377\377\3\266\307\303\377\223\254\247\377\303\321\317\377\263\333\343" \
+ "\342\377\3\244\271\265\377\223\254\247\377\345\353\352\377\207\377\377" \
+ "\377\377\3\322\335\333\377\223\254\247\377\260\302\276\377\377\333\343" \
+ "\342\377\261\333\343\342\377\3\272\311\307\377\223\254\247\377\303\321" \
+ "\316\377\207\377\377\377\377\4\363\366\365\377\224\255\250\377\232\262" \
+ "\255\377\332\342\341\377\263\333\343\342\377\3\302\320\316\377\223\254" \
+ "\247\377\270\310\305\377\207\377\377\377\377\4\372\373\373\377\231\260" \
+ "\254\377\226\256\251\377\326\337\336\377\377\333\343\342\377\257\333" \
+ "\343\342\377\4\332\342\341\377\234\263\256\377\223\254\247\377\360\363" \
+ "\362\377\207\377\377\377\377\3\307\324\321\377\223\254\247\377\270\310" \
+ "\305\377\264\333\343\342\377\4\331\341\340\377\232\261\254\377\225\255" \
+ "\250\377\364\367\366\377\207\377\377\377\377\3\301\317\314\377\223\254" \
+ "\247\377\273\313\310\377\314\333\343\342\377\3\277\312\310\377\237\256" \
+ "\253\377\254\272\270\377\337\333\343\342\377\3\305\322\320\377\223\254" \
+ "\247\377\262\304\300\377\207\377\377\377\377\4\374\375\374\377\234\263" \
+ "\256\377\224\255\250\377\324\336\334\377\265\333\343\342\377\3\266\307" \
+ "\304\377\223\254\247\377\311\325\323\377\207\377\377\377\377\4\356\362" \
+ "\361\377\223\254\247\377\235\264\257\377\332\342\341\377\313\333\343" \
+ "\342\377\3\233\253\250\377Slg\377p\205\201\377\337\333\343\342\377\3" \
+ "\247\273\267\377\223\254\247\377\337\346\345\377\207\377\377\377\377" \
+ "\3\330\341\337\377\223\254\247\377\254\277\274\377\266\333\343\342\377" \
+ "\4\323\335\334\377\224\255\250\377\235\264\257\377\375\375\375\377\207" \
+ "\377\377\377\377\3\260\302\276\377\223\254\247\377\307\323\321\377\313" \
+ "\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\336\333\343\342" \
+ "\377\4\321\333\331\377\223\254\247\377\241\266\262\377\376\376\376\377" \
+ "\207\377\377\377\377\3\253\276\273\377\223\254\247\377\312\326\324\377" \
+ "\267\333\343\342\377\3\253\276\272\377\223\254\247\377\333\343\341\377" \
+ "\207\377\377\377\377\3\335\345\343\377\223\254\247\377\251\274\271\377" \
+ "\313\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\336\333\343" \
+ "\342\377\3\263\304\301\377\223\254\247\377\315\331\326\377\207\377\377" \
+ "\377\377\3\351\356\355\377\223\254\247\377\241\266\262\377\270\333\343" \
+ "\342\377\3\311\325\323\377\223\254\247\377\254\277\273\377\207\377\377" \
+ "\377\377\4\375\376\375\377\240\265\261\377\223\254\247\377\321\334\332" \
+ "\377\312\333\343\342\377\3\233\253\250\377Slg\377[sn\377\223x\215\211" \
+ "\377\5z\216\212\377\202\225\221\377\214\236\233\377\246\265\262\377\310" \
+ "\323\321\377\305\333\343\342\377\4\330\340\337\377\227\257\252\377\226" \
+ "\256\252\377\367\371\370\377\207\377\377\377\377\3\274\313\310\377\223" \
+ "\254\247\377\277\315\313\377\271\333\343\342\377\3\237\265\261\377\223" \
+ "\254\247\377\353\360\357\377\207\377\377\377\377\3\314\327\325\377\223" \
+ "\254\247\377\264\305\302\377\312\333\343\342\377\1\233\253\250\377\232" \
+ "Slg\377\2x\214\210\377\275\311\307\377\303\333\343\342\377\3\276\315" \
+ "\312\377\223\254\247\377\274\313\310\377\207\377\377\377\377\4\367\371" \
+ "\370\377\226\256\251\377\230\257\253\377\330\341\337\377\271\333\343" \
+ "\342\377\3\275\314\312\377\223\254\247\377\276\315\312\377\207\377\377" \
+ "\377\377\4\366\370\370\377\225\256\251\377\230\260\253\377\330\341\340" \
+ "\377\311\333\343\342\377\1\233\253\250\377\233Slg\377\2Tmh\377\237\256" \
+ "\253\377\302\333\343\342\377\3\240\266\262\377\223\254\247\377\351\356" \
+ "\355\377\207\377\377\377\377\3\315\330\326\377\223\254\247\377\263\305" \
+ "\301\377\272\333\343\342\377\1\327\340\337\377\202\227\257\252\377\1" \
+ "\370\371\371\377\207\377\377\377\377\3\272\312\307\377\223\254\247\377" \
+ "\300\316\314\377\311\333\343\342\377\1\233\253\250\377\235Slg\377\1\243" \
+ "\262\257\377\300\333\343\342\377\3\312\326\324\377\223\254\247\377\252" \
+ "\276\272\377\207\377\377\377\377\4\376\376\376\377\240\266\262\377\223" \
+ "\254\247\377\321\333\332\377\273\333\343\342\377\3\262\303\300\377\223" \
+ "\254\247\377\317\332\330\377\207\377\377\377\377\3\350\355\354\377\223" \
+ "\254\247\377\241\267\263\377\311\333\343\342\377\4\321\332\331\377\305" \
+ "\320\316\377\305\317\316\377\207\231\226\377\202Slg\377\5j\200|\377\224" \
+ "\245\242\377\244\263\260\377\264\300\276\377\302\315\313\377\202\305" \
+ "\320\316\377\16\274\307\306\377\254\272\270\377\235\255\252\377\207\232" \
+ "\226\377Xql\377Slg\377^vq\377\257\274\272\377\305\320\316\377\304\316" \
+ "\315\377\266\303\301\377\247\265\263\377\227\250\245\377s\210\203\377" \
+ "\203Slg\377\2Vni\377\304\317\315\377\277\333\343\342\377\3\254\277\273" \
+ "\377\223\254\247\377\330\341\337\377\207\377\377\377\377\3\336\346\344" \
+ "\377\223\254\247\377\247\273\270\377\274\333\343\342\377\4\320\332\331" \
+ "\377\223\254\247\377\242\270\263\377\376\376\376\377\207\377\377\377" \
+ "\377\3\251\275\271\377\223\254\247\377\313\327\325\377\311\333\343\342" \
+ "\377\5\327\340\337\377y\215\211\377Slg\377q\207\202\377\266\302\300\377" \
+ "\213\333\343\342\377\5\321\333\331\377\233\253\250\377Yrm\377Wpk\377" \
+ "\255\273\271\377\205\333\343\342\377\2\271\305\303\377r\207\203\377\202" \
+ "Slg\377\1\203\226\222\377\276\333\343\342\377\4\324\336\334\377\224\255" \
+ "\250\377\234\263\256\377\374\375\374\377\207\377\377\377\377\3\261\303" \
+ "\277\377\223\254\247\377\306\323\321\377\275\333\343\342\377\3\246\273" \
+ "\267\377\223\254\247\377\340\347\346\377\207\377\377\377\377\3\326\340" \
+ "\336\377\223\254\247\377\255\300\274\377\311\333\343\342\377\4\211\234" \
+ "\230\377Slg\377n\204\200\377\325\336\335\377\216\333\343\342\377\4\263" \
+ "\300\275\377Tlg\377Wpk\377\300\314\312\377\205\333\343\342\377\5\325" \
+ "\335\334\377f}x\377Slg\377Umh\377\324\334\333\377\275\333\343\342\377" \
+ "\3\267\310\305\377\223\254\247\377\307\324\321\377\207\377\377\377\377" \
+ "\4\357\363\362\377\223\254\247\377\234\263\257\377\332\342\341\377\275" \
+ "\333\343\342\377\3\304\322\317\377\223\254\247\377\263\304\301\377\207" \
+ "\377\377\377\377\4\373\374\374\377\233\262\255\377\225\255\250\377\325" \
+ "\336\335\377\307\333\343\342\377\4\275\311\307\377Slg\377\\so\377\316" \
+ "\327\326\377\220\333\343\342\377\3\227\250\245\377Slg\377p\206\202\377" \
+ "\206\333\343\342\377\4\276\312\310\377Tlg\377Slg\377\266\302\300\377" \
+ "\274\333\343\342\377\4\331\342\341\377\232\261\255\377\224\254\247\377" \
+ "\362\365\364\377\207\377\377\377\377\3\302\320\315\377\223\254\247\377" \
+ "\272\312\307\377\276\333\343\342\377\4\332\342\341\377\233\262\256\377" \
+ "\223\254\247\377\361\364\363\377\207\377\377\377\377\3\305\322\320\377" \
+ "\223\254\247\377\271\311\306\377\307\333\343\342\377\3\211\233\230\377" \
+ "Slg\377|\217\214\377\221\333\343\342\377\1\304\317\315\377\202Slg\377" \
+ "\1\305\317\316\377\206\333\343\342\377\3f}x\377Slg\377\235\254\252\377" \
+ "\274\333\343\342\377\3\303\320\316\377\223\254\247\377\265\306\302\377" \
+ "\207\377\377\377\377\4\372\373\373\377\231\261\254\377\225\255\251\377" \
+ "\326\337\336\377\277\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\304\322\317\377\207\377\377\377\377\4\361\364\363\377\223\254\247\377" \
+ "\233\262\256\377\332\342\341\377\306\333\343\342\377\3e{w\377Slg\377" \
+ "\227\250\245\377\221\333\343\342\377\4\331\342\341\377Xql\377Slg\377" \
+ "\241\261\256\377\206\333\343\342\377\3}\221\215\377Slg\377\221\242\237" \
+ "\377\274\333\343\342\377\3\245\271\265\377\223\254\247\377\343\351\350" \
+ "\377\207\377\377\377\377\3\324\336\334\377\223\254\247\377\256\301\275" \
+ "\377\300\333\343\342\377\4\325\336\335\377\225\255\250\377\232\262\255" \
+ "\377\373\374\374\377\207\377\377\377\377\3\264\305\301\377\223\254\247" \
+ "\377\304\321\317\377\305\333\343\342\377\4\332\342\341\377Vni\377Slg" \
+ "\377\243\262\257\377\222\333\343\342\377\3czu\377Slg\377\223\244\241" \
+ "\377\206\333\343\342\377\3\224\244\241\377Slg\377\210\233\227\377\273" \
+ "\333\343\342\377\3\316\331\330\377\223\254\247\377\244\271\264\377\210" \
+ "\377\377\377\377\3\246\273\267\377\223\254\247\377\315\330\326\377\301" \
+ "\333\343\342\377\4\255\300\274\377\222\253\246\377\315\330\326\377\376" \
+ "\376\376\377\206\377\377\377\377\3\341\350\346\377\223\254\247\377\246" \
+ "\272\266\377\305\333\343\342\377\1\322\333\332\377\202Slg\377\1\205\230" \
+ "\224\377\221\333\343\342\377\1\316\327\326\377\202Slg\377\1\211\234\230" \
+ "\377\206\333\343\342\377\3\220\242\236\377Slg\377\222\243\240\377\273" \
+ "\333\343\342\377\3\260\302\277\377\223\254\247\377\321\334\332\377\207" \
+ "\377\377\377\377\3\345\353\352\377\223\254\247\377\243\270\264\377\302" \
+ "\333\343\342\377\16\314\327\325\377\223\254\246\377\223\254\247\377\226" \
+ "\256\251\377\244\271\265\377\264\305\302\377\303\321\316\377\323\335" \
+ "\333\377\342\351\350\377\361\365\364\377\375\375\375\377\242\270\263" \
+ "\377\223\254\247\377\317\332\330\377\304\333\343\342\377\4\332\342\341" \
+ "\377Vni\377Slg\377f|x\377\221\333\343\342\377\1\256\274\271\377\202S" \
+ "lg\377\1\226\246\243\377\206\333\343\342\377\3\202\225\221\377Slg\377" \
+ "\237\257\254\377\272\333\343\342\377\4\327\337\336\377\226\256\251\377" \
+ "\230\260\253\377\371\372\372\377\207\377\377\377\377\3\270\310\305\377" \
+ "\223\254\247\377\301\317\315\377\303\333\343\342\377\15\232\262\255\377" \
+ "\223\254\246\377\325\336\335\377\331\342\340\377\312\326\324\377\273" \
+ "\313\310\377\254\277\273\377\235\263\257\377\223\254\247\377\226\256" \
+ "\251\377\234\263\256\377\222\254\246\377\256\300\274\377\305\333\343" \
+ "\342\377\1i\200{\377\202Slg\377\1\224\244\241\377\217\333\343\342\377" \
+ "\2\313\325\323\377czu\377\202Slg\377\1\253\271\266\377\205\333\343\342" \
+ "\377\4\331\341\340\377czu\377Slg\377\254\272\270\377\272\333\343\342" \
+ "\377\3\274\313\310\377\223\254\247\377\277\316\313\377\207\377\377\377" \
+ "\377\4\364\367\366\377\225\255\250\377\231\260\254\377\331\341\340\377" \
+ "\303\333\343\342\377\3\275\313\311\377\222\254\246\377\257\301\276\377" \
+ "\205\377\377\377\377\3\372\373\373\377\353\360\357\377\327\340\335\377" \
+ "\202\224\255\250\377\3\327\340\337\377\331\342\341\377\322\334\333\377" \
+ "\302\333\343\342\377\1\226\247\244\377\203Slg\377\2\231\252\247\377\330" \
+ "\341\340\377\214\333\343\342\377\2\310\323\321\377f|x\377\202Slg\377" \
+ "\2Voj\377\323\334\332\377\205\333\343\342\377\1\253\271\266\377\202S" \
+ "lg\377\1\272\306\304\377\272\333\343\342\377\3\236\264\260\377\223\254" \
+ "\247\377\355\361\360\377\207\377\377\377\377\3\311\325\323\377\223\254" \
+ "\247\377\266\306\303\377\304\333\343\342\377\4\331\341\340\377\224\255" \
+ "\250\377\224\254\247\377\366\370\367\377\207\377\377\377\377\5\263\305" \
+ "\301\377\222\254\246\377\266\306\302\377\232\262\254\377\240\266\262" \
+ "\377\302\333\343\342\377\2\314\325\324\377Xql\377\203Slg\377\4_wr\377" \
+ "\221\243\237\377\304\316\315\377\330\341\340\377\206\333\343\342\377" \
+ "\4\322\333\332\377\254\271\267\377w\214\210\377Tlg\377\203Slg\377\1\211" \
+ "\233\230\377\205\333\343\342\377\5\263\300\276\377Xql\377Slg\377Xql\377" \
+ "\326\336\335\377\271\333\343\342\377\3\310\324\322\377\223\254\247\377" \
+ "\256\301\275\377\207\377\377\377\377\4\375\375\375\377\235\264\257\377" \
+ "\223\254\247\377\323\334\333\377\305\333\343\342\377\3\256\300\276\377" \
+ "\223\253\246\377\305\322\320\377\207\377\377\377\377\6\353\360\357\377" \
+ "\222\254\247\377\231\261\255\377\241\267\262\377\223\254\247\377\312" \
+ "\326\324\377\302\333\343\342\377\1\237\256\253\377\206Slg\377\7Tlg\377" \
+ "^vq\377l\202~\377y\215\211\377s\210\203\377e|w\377Xpk\377\206Slg\377" \
+ "\2_wr\377\321\333\331\377\203\333\343\342\377\2\255\272\270\377q\207" \
+ "\202\377\203Slg\377\1~\222\216\377\272\333\343\342\377\3\251\275\271" \
+ "\377\223\254\247\377\334\344\342\377\207\377\377\377\377\3\333\343\341" \
+ "\377\223\254\247\377\252\275\271\377\306\333\343\342\377\4\322\334\332" \
+ "\377\223\253\246\377\231\260\253\377\375\376\375\377\207\377\377\377" \
+ "\377\5\242\267\263\377\222\253\246\377\265\305\302\377\223\254\247\377" \
+ "\254\277\273\377\303\333\343\342\377\1\220\242\236\377\221Slg\377\2_" \
+ "vr\377\304\316\315\377\204\333\343\342\377\1}\220\215\377\204Slg\377" \
+ "\1\251\267\265\377\271\333\343\342\377\4\322\334\333\377\223\254\247" \
+ "\377\236\265\260\377\375\376\375\377\207\377\377\377\377\3\255\300\274" \
+ "\377\223\254\247\377\310\324\322\377\307\333\343\342\377\3\241\266\263" \
+ "\377\223\253\247\377\332\342\341\377\203\377\377\377\377\2\371\372\372" \
+ "\377\364\367\366\377\202\377\377\377\377\6\326\340\336\377\222\254\246" \
+ "\377\243\270\263\377\230\260\253\377\225\255\250\377\324\336\334\377" \
+ "\303\333\343\342\377\2\242\261\256\377Yql\377\216Slg\377\2s\210\204\377" \
+ "\310\322\321\377\205\333\343\342\377\1\235\255\252\377\204\201\224\220" \
+ "\377\1\321\333\331\377\271\333\343\342\377\3\265\306\302\377\223\254" \
+ "\247\377\312\326\324\377\207\377\377\377\377\3\354\360\357\377\223\254" \
+ "\247\377\236\265\260\377\310\333\343\342\377\3\306\322\320\377\222\253" \
+ "\246\377\244\271\266\377\203\377\377\377\377\2\244\271\264\377\272\312" \
+ "\307\377\202\377\377\377\377\6\374\375\375\377\227\257\252\377\223\254" \
+ "\246\377\260\303\277\377\223\254\247\377\267\310\305\377\304\333\343" \
+ "\342\377\3\313\325\323\377\212\234\231\377Yrm\377\212Slg\377\3n\203\177" \
+ "\377\247\266\263\377\332\342\341\377\304\333\343\342\377\4\331\341\340" \
+ "\377\230\260\253\377\225\255\251\377\365\367\367\377\207\377\377\377" \
+ "\377\3\277\315\312\377\223\254\247\377\275\314\311\377\310\333\343\342" \
+ "\377\4\332\342\341\377\227\257\253\377\223\253\246\377\356\361\361\377" \
+ "\202\377\377\377\377\3\312\326\324\377\226\256\251\377\367\370\370\377" \
+ "\202\377\377\377\377\6\300\316\314\377\223\253\246\377\226\256\250\377" \
+ "\223\254\247\377\233\261\255\377\332\342\341\377\305\333\343\342\377" \
+ "\13\324\335\334\377\261\277\274\377\224\244\241\377|\217\214\377r\207" \
+ "\203\377j\200|\377n\203\177\377v\213\207\377\205\227\224\377\242\261" \
+ "\256\377\303\316\314\377\307\333\343\342\377\3\301\317\314\377\223\254" \
+ "\247\377\271\311\306\377\207\377\377\377\377\4\370\372\371\377\227\257" \
+ "\252\377\226\256\252\377\327\340\336\377\311\333\343\342\377\3\267\310" \
+ "\305\377\223\253\246\377\266\307\304\377\202\377\377\377\377\3\365\367" \
+ "\367\377\225\256\251\377\315\330\326\377\202\377\377\377\377\6\364\366" \
+ "\366\377\223\254\246\377\223\253\247\377\235\263\260\377\223\254\247" \
+ "\377\303\321\317\377\377\333\343\342\377\230\333\343\342\377\3\242\267" \
+ "\263\377\223\254\247\377\346\354\353\377\207\377\377\377\377\3\320\333" \
+ "\331\377\223\254\247\377\261\303\277\377\312\333\343\342\377\4\326\337" \
+ "\336\377\223\254\247\377\224\255\250\377\371\373\372\377\202\377\377" \
+ "\377\377\3\271\311\306\377\241\266\262\377\376\376\376\377\202\377\377" \
+ "\377\377\5\253\277\273\377\223\253\247\377\263\305\302\377\223\254\247" \
+ "\377\245\271\265\377\377\333\343\342\377\227\333\343\342\377\3\314\330" \
+ "\326\377\223\254\247\377\247\273\267\377\207\377\377\377\377\4\376\376" \
+ "\376\377\243\270\264\377\223\254\247\377\317\332\330\377\313\333\343" \
+ "\342\377\3\251\274\270\377\222\254\247\377\315\330\325\377\202\377\377" \
+ "\377\377\3\346\354\353\377\223\254\247\377\337\346\345\377\202\377\377" \
+ "\377\377\2\344\352\350\377\223\254\246\377\202\235\263\257\377\2\223" \
+ "\254\247\377\316\331\330\377\377\333\343\342\377\226\333\343\342\377" \
+ "\3\256\300\275\377\223\254\247\377\325\337\335\377\207\377\377\377\377" \
+ "\3\341\350\347\377\223\254\247\377\245\272\266\377\314\333\343\342\377" \
+ "\3\316\331\327\377\222\253\246\377\234\263\256\377\203\377\377\377\377" \
+ "\2\247\274\270\377\261\303\300\377\203\377\377\377\377\5\234\263\256" \
+ "\377\223\253\246\377\263\305\301\377\223\254\247\377\260\303\277\377" \
+ "\322\333\343\342\377\1\304\317\315\377\202\201\224\220\377\277\333\343" \
+ "\342\377\4\325\336\335\377\225\255\250\377\232\261\255\377\373\374\373" \
+ "\377\207\377\377\377\377\3\264\305\302\377\223\254\247\377\303\321\317" \
+ "\377\315\333\343\342\377\3\235\263\260\377\223\253\246\377\342\351\347" \
+ "\377\202\377\377\377\377\3\325\336\334\377\223\254\247\377\360\363\363" \
+ "\377\202\377\377\377\377\5\315\330\326\377\223\253\246\377\247\274\267" \
+ "\377\227\256\251\377\253\276\273\377\322\333\343\342\377\1\270\305\303" \
+ "\377\202Slg\377\277\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\303\321\316\377\207\377\377\377\377\4\361\364\364\377\224\254\247\377" \
+ "\232\262\255\377\332\342\341\377\315\333\343\342\377\3\300\317\315\377" \
+ "\223\254\246\377\253\277\272\377\202\377\377\377\377\3\373\374\374\377" \
+ "\232\262\255\377\303\321\316\377\202\377\377\377\377\4\372\373\373\377" \
+ "\225\255\251\377\224\254\247\377\321\333\332\377\323\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\276\333\343\342\377\4\332\342\341\377\234" \
+ "\263\256\377\223\254\247\377\360\363\363\377\207\377\377\377\377\3\305" \
+ "\323\320\377\223\254\247\377\270\310\305\377\316\333\343\342\377\4\331" \
+ "\341\340\377\226\255\251\377\223\253\247\377\363\366\365\377\202\377" \
+ "\377\377\377\3\304\321\317\377\232\262\255\377\373\374\374\377\202\377" \
+ "\377\377\377\3\267\310\304\377\222\253\246\377\270\310\304\377\306\333" \
+ "\343\342\377\2\317\331\327\377\301\314\312\377\213\275\310\306\377\1" \
+ "\242\261\256\377\202Slg\377\276\333\343\342\377\3\305\322\320\377\223" \
+ "\254\247\377\262\304\300\377\207\377\377\377\377\4\374\374\374\377\233" \
+ "\262\255\377\224\255\250\377\324\336\334\377\317\333\343\342\377\3\261" \
+ "\303\300\377\223\253\246\377\276\315\313\377\202\377\377\377\377\3\360" \
+ "\364\363\377\223\254\247\377\325\337\335\377\202\377\377\377\377\4\357" \
+ "\362\362\377\222\253\246\377\231\260\253\377\332\342\341\377\301\333" \
+ "\343\342\377\4\305\320\316\377\204\227\223\377e|w\377Voj\377\220Slg\377" \
+ "\276\333\343\342\377\3\247\273\267\377\223\254\247\377\340\347\345\377" \
+ "\207\377\377\377\377\3\327\340\336\377\223\254\247\377\254\277\274\377" \
+ "\320\333\343\342\377\4\323\335\334\377\223\253\247\377\226\256\252\377" \
+ "\374\375\374\377\202\377\377\377\377\2\262\304\301\377\250\274\270\377" \
+ "\202\377\377\377\377\4\354\360\357\377\232\262\255\377\223\253\247\377" \
+ "\306\323\321\377\277\333\343\342\377\3\325\335\334\377\202\225\221\377" \
+ "Tlg\377\223Slg\377\275\333\343\342\377\4\320\333\331\377\223\254\247" \
+ "\377\241\267\262\377\376\376\376\377\207\377\377\377\377\3\251\275\271" \
+ "\377\223\254\247\377\312\326\324\377\321\333\343\342\377\3\244\271\264" \
+ "\377\223\254\247\377\325\337\335\377\202\377\377\377\377\10\340\347\346" \
+ "\377\223\254\247\377\312\327\324\377\255\300\274\377\226\256\251\377" \
+ "\255\277\274\377\222\254\247\377\250\274\270\377\277\333\343\342\377" \
+ "\1\207\232\226\377\225Slg\377\275\333\343\342\377\3\262\304\300\377\223" \
+ "\254\247\377\316\331\327\377\207\377\377\377\377\3\350\355\354\377\223" \
+ "\254\247\377\240\266\262\377\322\333\343\342\377\16\311\325\323\377\223" \
+ "\254\246\377\241\266\263\377\377\377\377\377\364\367\366\377\310\325" \
+ "\322\377\227\257\252\377\234\263\256\377\312\327\324\377\365\370\367" \
+ "\377\376\376\376\377\240\266\261\377\223\254\247\377\321\333\332\377" \
+ "\275\333\343\342\377\1\257\275\272\377\205Slg\377\4Voj\377axt\377k\201" \
+ "|\377t\211\205\377\212x\215\211\377\1o\204\200\377\202Slg\377\274\333" \
+ "\343\342\377\4\330\340\337\377\227\257\252\377\226\256\252\377\367\371" \
+ "\371\377\207\377\377\377\377\3\273\312\307\377\223\254\247\377\277\315" \
+ "\313\377\323\333\343\342\377\7\231\260\254\377\223\253\247\377\260\302" \
+ "\276\377\225\256\251\377\257\301\276\377\334\344\343\377\376\376\376" \
+ "\377\203\377\377\377\377\3\315\330\326\377\223\254\247\377\264\305\302" \
+ "\377\275\333\343\342\377\1\201\225\221\377\203Slg\377\3~\222\216\377" \
+ "\261\277\274\377\327\340\337\377\215\333\343\342\377\1\270\305\303\377" \
+ "\202Slg\377\274\333\343\342\377\3\276\315\312\377\223\254\247\377\274" \
+ "\314\311\377\207\377\377\377\377\4\366\370\370\377\225\256\251\377\230" \
+ "\257\253\377\330\341\337\377\323\333\343\342\377\4\273\312\310\377\222" \
+ "\254\246\377\244\271\265\377\356\362\361\377\206\377\377\377\377\4\366" \
+ "\370\370\377\226\256\251\377\230\257\253\377\330\341\340\377\274\333" \
+ "\343\342\377\1i\200{\377\202Slg\377\1\204\226\223\377\220\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\274\333\343\342\377\3\237\265\261\377" \
+ "\223\254\247\377\352\357\356\377\207\377\377\377\377\3\314\330\325\377" \
+ "\223\254\247\377\263\304\301\377\324\333\343\342\377\4\327\340\337\377" \
+ "\227\257\252\377\226\256\252\377\367\371\371\377\207\377\377\377\377" \
+ "\3\273\313\310\377\223\254\247\377\277\316\313\377\273\333\343\342\377" \
+ "\2\330\340\337\377Uni\377\202Slg\377\1\321\333\331\377\220\333\343\342" \
+ "\377\1\270\305\303\377\202Slg\377\273\333\343\342\377\3\312\326\324\377" \
+ "\223\254\247\377\253\276\273\377\207\377\377\377\377\4\376\376\376\377" \
+ "\240\265\261\377\223\254\247\377\321\333\332\377\325\333\343\342\377" \
+ "\3\262\303\300\377\223\254\247\377\316\331\327\377\207\377\377\377\377" \
+ "\3\350\356\355\377\223\254\247\377\241\267\262\377\273\333\343\342\377" \
+ "\4\326\337\336\377Tlg\377Slg\377byt\377\221\333\343\342\377\1\330\341" \
+ "\340\377\202\322\333\332\377\273\333\343\342\377\3\253\276\273\377\223" \
+ "\254\247\377\330\341\337\377\207\377\377\377\377\3\335\345\344\377\223" \
+ "\254\247\377\247\273\270\377\326\333\343\342\377\4\320\332\331\377\223" \
+ "\254\247\377\241\267\262\377\376\376\376\377\207\377\377\377\377\3\252" \
+ "\275\271\377\223\254\247\377\313\326\325\377\273\333\343\342\377\3cz" \
+ "u\377Slg\377l\202~\377\316\333\343\342\377\4\323\335\334\377\224\255" \
+ "\250\377\234\263\256\377\374\375\374\377\207\377\377\377\377\3\260\302" \
+ "\276\377\223\254\247\377\306\323\321\377\327\333\343\342\377\3\246\273" \
+ "\267\377\223\254\247\377\340\347\345\377\207\377\377\377\377\3\327\340" \
+ "\336\377\223\254\247\377\254\277\274\377\273\333\343\342\377\4\207\231" \
+ "\226\377Slg\377Vni\377\327\337\336\377\315\333\343\342\377\3\267\307" \
+ "\304\377\223\254\247\377\307\324\321\377\207\377\377\377\377\4\356\362" \
+ "\361\377\223\254\247\377\234\263\257\377\332\342\341\377\327\333\343" \
+ "\342\377\3\304\322\317\377\223\254\247\377\262\304\300\377\207\377\377" \
+ "\377\377\4\374\374\374\377\233\262\256\377\224\255\250\377\325\336\335" \
+ "\377\272\333\343\342\377\1\305\317\316\377\202Slg\377\1\271\306\304\377" \
+ "\220\333\343\342\377\1\307\322\320\377\202\216\237\234\377\271\333\343" \
+ "\342\377\4\331\342\341\377\232\261\255\377\224\255\250\377\363\366\365" \
+ "\377\207\377\377\377\377\3\302\320\315\377\223\254\247\377\272\312\307" \
+ "\377\330\333\343\342\377\4\332\342\341\377\233\262\256\377\223\254\247" \
+ "\377\360\363\363\377\207\377\377\377\377\3\306\323\320\377\223\254\247" \
+ "\377\270\310\305\377\273\333\343\342\377\4\232\252\247\377Slg\377d{v" \
+ "\377\317\330\327\377\217\333\343\342\377\1\270\305\303\377\202Slg\377" \
+ "\271\333\343\342\377\3\303\320\316\377\223\254\247\377\266\307\303\377" \
+ "\207\377\377\377\377\4\372\373\373\377\231\260\254\377\225\255\251\377" \
+ "\326\337\336\377\331\333\343\342\377\3\271\311\306\377\223\254\247\377" \
+ "\303\321\316\377\207\377\377\377\377\4\362\365\364\377\224\254\247\377" \
+ "\233\262\255\377\332\342\341\377\273\333\343\342\377\4\226\246\243\377" \
+ "Tmh\377l\201}\377\267\303\301\377\216\333\343\342\377\1\270\305\303\377" \
+ "\202Slg\377\271\333\343\342\377\3\244\271\265\377\223\254\247\377\343" \
+ "\352\350\377\207\377\377\377\377\3\323\335\333\377\223\254\247\377\256" \
+ "\301\275\377\332\333\343\342\377\4\325\336\335\377\225\255\250\377\232" \
+ "\261\254\377\373\374\373\377\207\377\377\377\377\3\264\306\302\377\223" \
+ "\254\247\377\304\321\317\377\271\333\343\342\377\1\317\330\327\377\202" \
+ "\301\314\312\377\10\246\265\262\377^vq\377Slg\377k\201}\377\226\247\244" \
+ "\377\245\264\261\377\263\300\276\377\277\313\311\377\211\301\314\312" \
+ "\377\1\245\264\261\377\202Slg\377\270\333\343\342\377\3\316\331\327\377" \
+ "\223\254\247\377\245\271\265\377\210\377\377\377\377\3\246\272\266\377" \
+ "\223\254\247\377\315\330\326\377\333\333\343\342\377\3\255\300\274\377" \
+ "\223\254\247\377\325\336\334\377\207\377\377\377\377\3\342\350\347\377" \
+ "\223\254\247\377\245\272\266\377\271\333\343\342\377\1\233\253\250\377" \
+ "\226Slg\377\270\333\343\342\377\3\260\302\276\377\223\254\247\377\322" \
+ "\334\332\377\207\377\377\377\377\3\344\352\351\377\223\254\247\377\243" \
+ "\270\264\377\334\333\343\342\377\3\314\327\325\377\223\254\247\377\247" \
+ "\273\267\377\207\377\377\377\377\4\376\376\376\377\243\270\264\377\223" \
+ "\254\247\377\317\332\330\377\270\333\343\342\377\1\233\253\250\377\226" \
+ "Slg\377\267\333\343\342\377\4\326\337\336\377\226\256\251\377\230\260" \
+ "\253\377\371\373\372\377\207\377\377\377\377\3\267\307\304\377\223\254" \
+ "\247\377\301\317\315\377\335\333\343\342\377\3\241\267\263\377\223\254" \
+ "\247\377\346\354\353\377\207\377\377\377\377\3\320\333\331\377\223\254" \
+ "\247\377\261\303\277\377\270\333\343\342\377\1\233\253\250\377\226Sl" \
+ "g\377\267\333\343\342\377\3\273\313\310\377\223\254\247\377\300\317\314" \
+ "\377\207\377\377\377\377\4\363\366\366\377\224\255\250\377\231\260\254" \
+ "\377\331\341\340\377\335\333\343\342\377\3\300\316\314\377\223\254\247" \
+ "\377\271\311\306\377\207\377\377\377\377\4\371\372\372\377\227\257\253" \
+ "\377\226\256\252\377\327\340\337\377\267\333\343\342\377\3\233\253\250" \
+ "\377Slg\377[sn\377\221x\215\211\377\1o\204\200\377\202Slg\377\266\333" \
+ "\343\342\377\4\332\342\341\377\235\264\257\377\223\254\247\377\356\361" \
+ "\361\377\207\377\377\377\377\3\310\325\322\377\223\254\247\377\266\306" \
+ "\303\377\336\333\343\342\377\4\330\341\340\377\230\260\253\377\225\255" \
+ "\251\377\365\367\367\377\207\377\377\377\377\3\277\316\313\377\223\254" \
+ "\247\377\275\314\311\377\267\333\343\342\377\3\233\253\250\377Slg\377" \
+ "p\205\201\377\221\333\343\342\377\1\270\305\303\377\202Slg\377\266\333" \
+ "\343\342\377\3\307\324\322\377\223\254\247\377\257\301\276\377\207\377" \
+ "\377\377\377\4\374\375\375\377\235\264\257\377\223\254\247\377\323\334" \
+ "\333\377\337\333\343\342\377\3\264\305\302\377\223\254\247\377\312\326" \
+ "\324\377\207\377\377\377\377\3\354\361\360\377\223\254\247\377\236\265" \
+ "\260\377\267\333\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221" \
+ "\333\343\342\377\1\270\305\303\377\202Slg\377\266\333\343\342\377\3\251" \
+ "\274\271\377\223\254\247\377\334\344\343\377\207\377\377\377\377\3\332" \
+ "\342\340\377\223\254\247\377\252\275\271\377\340\333\343\342\377\4\322" \
+ "\334\332\377\223\254\247\377\236\265\260\377\375\375\375\377\207\377" \
+ "\377\377\377\3\256\300\275\377\223\254\247\377\310\324\322\377\266\333" \
+ "\343\342\377\3\233\253\250\377Slg\377p\205\201\377\221\333\343\342\377" \
+ "\1\270\305\303\377\202Slg\377\265\333\343\342\377\4\322\334\332\377\223" \
+ "\254\247\377\237\265\260\377\375\376\375\377\207\377\377\377\377\3\254" \
+ "\277\273\377\223\254\247\377\310\324\322\377\341\333\343\342\377\3\251" \
+ "\274\271\377\223\254\247\377\333\343\342\377\207\377\377\377\377\3\333" \
+ "\343\342\377\223\254\247\377\252\275\272\377\266\333\343\342\377\3\277" \
+ "\312\310\377\237\256\253\377\254\272\270\377\221\333\343\342\377\1\323" \
+ "\334\333\377\202\275\310\306\377\265\333\343\342\377\3\264\305\302\377" \
+ "\223\254\247\377\313\327\324\377\207\377\377\377\377\3\353\360\357\377" \
+ "\223\254\247\377\236\265\260\377\342\333\343\342\377\3\307\323\321\377" \
+ "\223\254\247\377\256\301\275\377\207\377\377\377\377\4\375\375\375\377" \
+ "\236\264\260\377\224\254\247\377\323\334\333\377\377\333\343\342\377" \
+ "\5\333\343\342\377\331\341\340\377\230\260\253\377\225\256\251\377\366" \
+ "\370\367\377\207\377\377\377\377\3\275\314\311\377\223\254\247\377\274" \
+ "\313\311\377\342\333\343\342\377\4\332\342\341\377\235\264\257\377\223" \
+ "\254\247\377\355\361\360\377\207\377\377\377\377\3\312\326\323\377\223" \
+ "\254\247\377\266\306\303\377\377\333\343\342\377\4\333\343\342\377\300" \
+ "\316\314\377\223\254\247\377\271\311\306\377\207\377\377\377\377\4\370" \
+ "\371\371\377\227\257\252\377\226\256\252\377\327\340\336\377\343\333" \
+ "\343\342\377\3\273\313\310\377\223\254\247\377\277\316\313\377\207\377" \
+ "\377\377\377\4\364\367\366\377\225\255\250\377\231\260\254\377\331\341" \
+ "\340\377\310\333\343\342\377\3\307\322\320\377\305\320\316\377\324\334" \
+ "\333\377\264\333\343\342\377\3\241\267\263\377\223\254\247\377\347\354" \
+ "\353\377\207\377\377\377\377\3\317\332\330\377\223\254\247\377\261\303" \
+ "\277\377\344\333\343\342\377\4\326\337\336\377\226\256\251\377\227\257" \
+ "\253\377\371\372\372\377\207\377\377\377\377\3\270\310\305\377\223\254" \
+ "\247\377\301\317\315\377\310\333\343\342\377\3_vr\377Slg\377\254\271" \
+ "\267\377\263\333\343\342\377\3\314\327\325\377\223\254\247\377\250\274" \
+ "\270\377\207\377\377\377\377\4\376\376\376\377\242\270\263\377\223\254" \
+ "\247\377\317\332\330\377\345\333\343\342\377\3\260\302\276\377\223\254" \
+ "\247\377\321\333\331\377\207\377\377\377\377\3\346\353\352\377\223\254" \
+ "\247\377\243\270\264\377\310\333\343\342\377\3_vr\377Slg\377\254\271" \
+ "\267\377\263\333\343\342\377\3\255\300\274\377\223\254\247\377\325\337" \
+ "\335\377\207\377\377\377\377\3\340\347\346\377\223\254\247\377\245\272" \
+ "\266\377\346\333\343\342\377\3\316\331\327\377\223\254\247\377\244\271" \
+ "\265\377\210\377\377\377\377\3\247\273\267\377\223\254\247\377\315\330" \
+ "\326\377\307\333\343\342\377\3^vq\377Slg\377\254\271\267\377\262\333" \
+ "\343\342\377\4\325\336\335\377\225\255\250\377\232\261\255\377\373\374" \
+ "\374\377\207\377\377\377\377\3\263\304\301\377\223\254\247\377\303\321" \
+ "\317\377\347\333\343\342\377\3\244\271\265\377\223\254\247\377\342\351" \
+ "\347\377\207\377\377\377\377\3\324\336\334\377\223\254\247\377\256\301" \
+ "\275\377\304\333\343\342\377\3\317\331\327\377\236\255\253\377i\177{" \
+ "\377\202Slg\377\1\254\271\267\377\262\333\343\342\377\3\271\311\306\377" \
+ "\223\254\247\377\304\322\317\377\207\377\377\377\377\4\361\364\363\377" \
+ "\223\254\247\377\226\256\251\377\332\342\341\377\347\333\343\342\377" \
+ "\3\302\320\316\377\223\254\247\377\265\306\302\377\202\377\377\377\377" \
+ "\3\371\373\372\377\356\361\361\377\375\375\375\377\202\377\377\377\377" \
+ "\4\372\373\373\377\232\261\254\377\225\255\251\377\326\337\336\377\300" \
+ "\333\343\342\377\4\331\341\340\377\263\300\276\377~\222\216\377Uni\377" \
+ "\204Slg\377\1\254\271\267\377\261\333\343\342\377\4\332\342\341\377\233" \
+ "\262\256\377\223\254\247\377\361\364\363\377\207\377\377\377\377\1\304" \
+ "\322\317\377\202\223\254\247\377\1\312\326\324\377\347\333\343\342\377" \
+ "\5\331\341\340\377\232\261\254\377\223\254\247\377\302\320\315\377\244" \
+ "\271\265\377\202\223\254\247\377\7\226\256\251\377\251\275\271\377\331" \
+ "\342\340\377\377\377\377\377\303\321\316\377\223\254\247\377\272\312" \
+ "\307\377\276\333\343\342\377\3\310\322\321\377\224\244\241\377axt\377" \
+ "\207Slg\377\1\254\271\267\377\261\333\343\342\377\3\304\322\317\377\223" \
+ "\254\247\377\263\304\301\377\207\377\377\377\377\5\373\374\374\377\233" \
+ "\262\255\377\225\255\251\377\233\262\256\377\264\305\302\377\350\333" \
+ "\343\342\377\1\260\303\277\377\202\224\255\250\377\13\277\315\312\377" \
+ "\330\341\337\377\345\353\351\377\322\334\332\377\263\304\301\377\223" \
+ "\254\247\377\267\307\304\377\353\357\356\377\223\254\247\377\234\263" \
+ "\257\377\332\342\341\377\272\333\343\342\377\3\326\336\335\377\251\267" \
+ "\265\377t\211\205\377\212Slg\377\1\254\271\267\377\261\333\343\342\377" \
+ "\3\246\272\266\377\223\254\247\377\340\347\346\377\207\377\377\377\377" \
+ "\5\326\337\335\377\223\254\247\377\271\311\306\377\262\304\300\377\246" \
+ "\272\266\377\347\333\343\342\377\4\331\341\340\377\236\264\260\377\240" \
+ "\266\261\377\351\356\355\377\205\377\377\377\377\6\330\341\337\377\226" \
+ "\256\252\377\275\314\311\377\261\303\300\377\223\254\247\377\306\323" \
+ "\320\377\270\333\343\342\377\3\276\312\310\377\211\234\230\377[sn\377" \
+ "\211Slg\377\4Voj\377Umh\377Slg\377\254\271\267\377\260\333\343\342\377" \
+ "\4\320\332\331\377\223\254\247\377\242\267\263\377\376\376\376\377\207" \
+ "\377\377\377\377\5\250\274\270\377\223\254\247\377\346\354\353\377\272" \
+ "\312\307\377\242\267\263\377\347\333\343\342\377\3\265\306\302\377\225" \
+ "\255\250\377\352\357\356\377\207\377\377\377\377\5\322\334\332\377\223" \
+ "\254\247\377\311\325\323\377\223\254\247\377\247\273\270\377\265\333" \
+ "\343\342\377\3\320\332\330\377\237\256\253\377k\201|\377\212Slg\377\6" \
+ "n\204\200\377\242\261\256\377\321\333\331\377_vr\377Slg\377\254\271\267" \
+ "\377\260\333\343\342\377\3\262\303\300\377\223\254\247\377\317\332\330" \
+ "\377\204\377\377\377\377\11\367\371\370\377\352\357\356\377\377\377\377" \
+ "\377\347\355\354\377\223\254\247\377\247\273\267\377\377\377\377\377" \
+ "\244\271\265\377\257\301\276\377\347\333\343\342\377\2\234\263\256\377" \
+ "\303\321\316\377\211\377\377\377\377\5\250\274\270\377\267\307\304\377" \
+ "\241\266\262\377\223\254\247\377\321\333\332\377\261\333\343\342\377" \
+ "\4\331\342\341\377\264\301\277\377\200\223\220\377Vni\377\211Slg\377" \
+ "\3^vq\377\220\241\236\377\303\316\314\377\203\333\343\342\377\3_vr\377" \
+ "Slg\377\254\271\267\377\257\333\343\342\377\1\327\340\337\377\202\227" \
+ "\257\252\377\1\370\371\371\377\203\377\377\377\377\12\352\357\356\377" \
+ "\226\256\252\377\223\254\247\377\277\316\313\377\271\311\306\377\223" \
+ "\254\247\377\325\337\335\377\351\356\355\377\223\254\247\377\277\316" \
+ "\313\377\346\333\343\342\377\3\325\336\335\377\223\254\247\377\335\344" \
+ "\343\377\211\377\377\377\377\5\302\320\315\377\241\267\262\377\315\331" \
+ "\326\377\223\254\247\377\263\304\301\377\241\333\343\342\377\6\274\307" \
+ "\306\377\217\241\235\377t\211\205\377|\217\214\377\242\261\256\377\310" \
+ "\322\321\377\210\333\343\342\377\3\311\323\322\377\225\246\243\377by" \
+ "t\377\213Slg\377\2\245\264\261\377\330\341\340\377\205\333\343\342\377" \
+ "\3_vr\377Slg\377\254\271\267\377\257\333\343\342\377\3\314\327\325\377" \
+ "\223\254\247\377\264\305\301\377\204\377\377\377\377\12\307\324\322\377" \
+ "\226\256\252\377\261\303\300\377\230\260\253\377\224\255\250\377\232" \
+ "\261\255\377\367\371\370\377\244\271\265\377\241\266\262\377\331\341" \
+ "\340\377\346\333\343\342\377\3\312\326\324\377\223\254\247\377\353\360" \
+ "\357\377\211\377\377\377\377\5\320\333\331\377\223\254\247\377\361\364" \
+ "\364\377\223\254\247\377\243\270\264\377\237\333\343\342\377\3\327\340" \
+ "\337\377\217\241\235\377Tlg\377\205Slg\377\1\236\255\253\377\204\333" \
+ "\343\342\377\3\326\337\336\377\253\271\266\377v\212\206\377\212Slg\377" \
+ "\2g}y\377\222\243\240\377\202Slg\377\1\305\320\316\377\206\333\343\342" \
+ "\377\3\264\301\277\377\260\275\273\377\314\326\324\377\257\333\343\342" \
+ "\377\3\316\331\330\377\223\254\247\377\263\304\301\377\204\377\377\377" \
+ "\377\11\351\356\355\377\226\256\251\377\223\254\247\377\251\275\271\377" \
+ "\223\254\247\377\272\312\307\377\244\271\265\377\225\255\251\377\316" \
+ "\331\327\377\347\333\343\342\377\3\326\337\336\377\223\254\247\377\332" \
+ "\343\341\377\211\377\377\377\377\5\277\316\313\377\243\270\264\377\363" \
+ "\365\365\377\223\254\247\377\246\272\266\377\237\333\343\342\377\1\217" \
+ "\241\235\377\203Slg\377\2e{w\377czu\377\203Slg\377\5\254\271\267\377" \
+ "\333\343\342\377\300\313\311\377\213\235\232\377[sn\377\211Slg\377\5" \
+ "Yql\377\206\231\225\377\273\307\305\377\333\343\342\377\316\327\326\377" \
+ "\202Slg\377\1\305\320\316\377\270\333\343\342\377\3\321\334\332\377\223" \
+ "\254\247\377\256\301\275\377\205\377\377\377\377\3\366\370\367\377\346" \
+ "\354\352\377\237\265\260\377\202\223\254\247\377\2\240\266\262\377\315" \
+ "\330\327\377\351\333\343\342\377\2\235\264\257\377\275\314\311\377\210" \
+ "\377\377\377\377\6\375\375\375\377\243\271\264\377\271\311\306\377\356" \
+ "\362\361\377\223\254\247\377\251\275\271\377\236\333\343\342\377\5\274" \
+ "\307\306\377Tlg\377Slg\377e{w\377\300\313\311\377\202\333\343\342\377" \
+ "\5\274\307\306\377axt\377Slg\377Vni\377k\201}\377\212Slg\377\3r\207\203" \
+ "\377\246\265\262\377\324\335\334\377\203\333\343\342\377\1\316\327\326" \
+ "\377\202Slg\377\1\305\320\316\377\270\333\343\342\377\3\324\336\334\377" \
+ "\223\254\247\377\251\275\271\377\206\377\377\377\377\5\335\344\343\377" \
+ "\223\254\247\377\233\262\255\377\300\316\314\377\331\341\340\377\352" \
+ "\333\343\342\377\3\272\312\307\377\223\254\247\377\343\351\350\377\207" \
+ "\377\377\377\377\6\310\325\322\377\224\254\250\377\350\355\354\377\351" \
+ "\356\355\377\223\254\247\377\254\277\273\377\236\333\343\342\377\1\217" \
+ "\241\235\377\202Slg\377\1\300\313\311\377\204\333\343\342\377\1\270\305" \
+ "\303\377\212Slg\377\3_wr\377\222\243\240\377\306\320\317\377\206\333" \
+ "\343\342\377\1\316\327\326\377\202Slg\377\1\305\320\316\377\270\333\343" \
+ "\342\377\3\327\340\337\377\223\254\247\377\245\272\266\377\206\377\377" \
+ "\377\377\3\257\301\276\377\223\254\247\377\306\323\320\377\354\333\343" \
+ "\342\377\4\332\342\341\377\244\271\265\377\233\262\255\377\335\345\343" \
+ "\377\204\377\377\377\377\10\375\376\375\377\312\326\324\377\224\254\250" \
+ "\377\307\324\321\377\377\377\377\377\344\352\351\377\223\254\247\377" \
+ "\257\301\276\377\236\333\343\342\377\3t\211\205\377Slg\377g~y\377\206" \
+ "\333\343\342\377\1\\to\377\206Slg\377\4Uni\377}\221\215\377\261\277\274" \
+ "\377\330\341\340\377\210\333\343\342\377\1\316\327\326\377\202Slg\377" \
+ "\1\305\320\316\377\270\333\343\342\377\3\332\342\341\377\223\254\247" \
+ "\377\240\266\262\377\205\377\377\377\377\4\356\361\361\377\223\254\247" \
+ "\377\234\263\257\377\332\342\341\377\355\333\343\342\377\17\324\336\334" \
+ "\377\250\273\270\377\223\254\247\377\261\303\277\377\312\326\324\377" \
+ "\327\340\336\377\304\322\317\377\246\273\267\377\223\254\247\377\304" \
+ "\322\317\377\375\375\375\377\377\377\377\377\340\347\345\377\223\254" \
+ "\247\377\262\303\300\377\236\333\343\342\377\3v\212\206\377Slg\377f|" \
+ "x\377\206\333\343\342\377\1[sn\377\204Slg\377\3i\177{\377\235\255\252" \
+ "\377\317\330\327\377\213\333\343\342\377\1\316\327\326\377\202Slg\377" \
+ "\1\305\320\316\377\271\333\343\342\377\2\225\255\251\377\234\263\256" \
+ "\377\205\377\377\377\377\3\300\317\314\377\223\254\247\377\272\312\307" \
+ "\377\360\333\343\342\377\7\277\316\313\377\245\272\266\377\227\257\252" \
+ "\377\223\254\247\377\225\255\250\377\257\301\276\377\346\353\352\377" \
+ "\203\377\377\377\377\3\333\343\342\377\223\254\247\377\265\306\302\377" \
+ "\236\333\343\342\377\1\220\242\236\377\202Slg\377\1\277\312\310\377\204" \
+ "\333\343\342\377\1\266\302\300\377\205Slg\377\3z\216\212\377\257\274" \
+ "\272\377\330\340\337\377\213\333\343\342\377\1\316\327\326\377\202Sl" \
+ "g\377\1\305\320\316\377\271\333\343\342\377\2\230\260\253\377\230\257" \
+ "\253\377\204\377\377\377\377\4\371\373\372\377\230\260\253\377\225\255" \
+ "\251\377\326\337\336\377\362\333\343\342\377\4\332\342\341\377\266\307" \
+ "\304\377\223\254\247\377\302\320\315\377\204\377\377\377\377\3\326\337" \
+ "\335\377\223\254\247\377\267\310\305\377\236\333\343\342\377\14\276\311" \
+ "\307\377Tmh\377Slg\377d{v\377\274\307\306\377\333\343\342\377\321\332" \
+ "\331\377\235\255\252\377^vq\377Slg\377Vni\377k\201}\377\204Slg\377\3" \
+ "^uq\377\217\241\235\377\304\317\315\377\211\333\343\342\377\1\316\327" \
+ "\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\2\233\262\255" \
+ "\377\223\254\247\377\204\377\377\377\377\3\322\334\332\377\223\254\247" \
+ "\377\256\301\275\377\364\333\343\342\377\4\325\336\335\377\225\255\250" \
+ "\377\231\261\254\377\372\373\373\377\203\377\377\377\377\3\321\334\332" \
+ "\377\223\254\247\377\272\312\307\377\237\333\343\342\377\1\223\244\240" \
+ "\377\203Slg\377\2_vr\377Wpk\377\203Slg\377\5\254\271\267\377\333\343" \
+ "\342\377\300\314\312\377\214\236\233\377\\so\377\204Slg\377\3p\205\201" \
+ "\377\245\263\261\377\324\334\333\377\206\333\343\342\377\1\316\327\326" \
+ "\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\3\236\264\260\377" \
+ "\223\254\247\377\373\374\374\377\203\377\377\377\377\3\245\271\265\377" \
+ "\223\254\247\377\315\330\326\377\365\333\343\342\377\3\255\300\274\377" \
+ "\223\254\247\377\324\336\334\377\203\377\377\377\377\3\315\330\326\377" \
+ "\223\254\247\377\275\314\312\377\237\333\343\342\377\3\330\340\337\377" \
+ "\225\246\243\377Umh\377\205Slg\377\1\236\255\253\377\204\333\343\342" \
+ "\377\4\327\337\336\377\254\271\267\377w\214\210\377Tlg\377\203Slg\377" \
+ "\3Xpk\377\205\230\224\377\272\306\304\377\204\333\343\342\377\1\316\327" \
+ "\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377\3\241\266\262" \
+ "\377\223\254\247\377\366\370\370\377\202\377\377\377\377\3\343\352\350" \
+ "\377\223\254\247\377\243\270\264\377\366\333\343\342\377\3\314\327\325" \
+ "\377\223\254\247\377\246\273\267\377\203\377\377\377\377\3\307\324\322" \
+ "\377\223\254\247\377\300\316\314\377\241\333\343\342\377\6\302\315\313" \
+ "\377\230\250\245\377}\220\215\377\203\226\222\377\246\265\262\377\311" \
+ "\324\322\377\210\333\343\342\377\3\313\325\323\377\227\250\245\377d{" \
+ "v\377\204Slg\377\5f}x\377\233\253\250\377\315\327\325\377\333\343\342" \
+ "\377\316\327\326\377\202Slg\377\1\305\320\316\377\271\333\343\342\377" \
+ "\3\244\271\265\377\223\254\247\377\362\365\364\377\202\377\377\377\377" \
+ "\3\266\307\303\377\223\254\247\377\301\317\315\377\367\333\343\342\377" \
+ "\3\241\267\263\377\223\254\247\377\345\353\352\377\202\377\377\377\377" \
+ "\3\303\321\316\377\223\254\247\377\303\321\317\377\261\333\343\342\377" \
+ "\4\332\342\341\377\267\304\302\377\203\226\222\377Wpk\377\203Slg\377" \
+ "\3Tmh\377|\217\214\377\245\264\261\377\202Slg\377\1\305\320\316\377\206" \
+ "\333\343\342\377\3\317\331\327\377\316\327\326\377\326\337\336\377\260" \
+ "\333\343\342\377\10\247\273\267\377\223\254\247\377\301\317\314\377\333" \
+ "\343\341\377\344\352\351\377\224\255\250\377\231\260\254\377\331\341" \
+ "\340\377\367\333\343\342\377\10\300\316\314\377\223\254\247\377\265\306" \
+ "\303\377\345\353\351\377\322\335\333\377\250\274\270\377\223\254\247" \
+ "\377\306\323\321\377\264\333\343\342\377\3\323\334\332\377\243\262\257" \
+ "\377o\204\200\377\206Slg\377\1\267\304\302\377\206\333\343\342\377\3" \
+ "_vr\377Slg\377\254\271\267\377\260\333\343\342\377\1\252\275\271\377" \
+ "\205\223\254\247\377\1\266\306\303\377\370\333\343\342\377\2\330\341" \
+ "\340\377\230\260\253\377\205\223\254\247\377\1\311\325\323\377\267\333" \
+ "\343\342\377\3\303\316\314\377\217\240\235\377]up\377\204Slg\377\3r\207" \
+ "\203\377\246\265\262\377\324\335\334\377\203\333\343\342\377\3_vr\377" \
+ "Slg\377\254\271\267\377\260\333\343\342\377\7\327\337\336\377\220\243" \
+ "\237\377k\204\177\377u\216\211\377\205\235\230\377\235\263\257\377\323" \
+ "\334\333\377\371\333\343\342\377\7\267\307\304\377\233\261\255\377~\227" \
+ "\222\377q\212\205\377m\206\201\377\273\310\306\377\332\342\341\377\271" \
+ "\333\343\342\377\4\330\340\337\377\256\274\271\377z\216\212\377Tmh\377" \
+ "\203Slg\377\7Yql\377\206\231\225\377\273\307\305\377\333\343\342\377" \
+ "_vr\377Slg\377\254\271\267\377\261\333\343\342\377\1x\214\210\377\202" \
+ "Slg\377\1~\221\216\377\374\333\343\342\377\5\325\335\334\377axt\377S" \
+ "lg\377Tmh\377\251\270\265\377\275\333\343\342\377\3\315\326\325\377\232" \
+ "\252\247\377f}x\377\204Slg\377\4g}y\377Woj\377Slg\377\254\271\267\377" \
+ "\261\333\343\342\377\1}\220\215\377\202Slg\377\1\240\257\254\377\375" \
+ "\333\343\342\377\1f}x\377\202Slg\377\1\222\243\240\377\300\333\343\342" \
+ "\377\3\272\306\304\377\206\230\225\377Xql\377\204Slg\377\1\254\271\267" \
+ "\377\261\333\343\342\377\4\216\237\234\377Slg\377_wr\377\326\336\335" \
+ "\377\375\333\343\342\377\4r\207\203\377Slg\377axt\377\317\330\327\377" \
+ "\302\333\343\342\377\3\324\334\333\377\246\264\262\377q\207\202\377\202" \
+ "Slg\377\1\254\271\267\377\261\333\343\342\377\3\237\257\254\377Slg\377" \
+ "\240\257\254\377\376\333\343\342\377\3\216\240\235\377Wpk\377\246\264" \
+ "\262\377\306\333\343\342\377\3_vr\377Slg\377\254\271\267\377\261\333" \
+ "\343\342\377\3\260\276\273\377axt\377\326\337\336\377\376\333\343\342" \
+ "\377\2\265\302\277\377v\213\207\377\307\333\343\342\377\3_vr\377Slg\377" \
+ "\254\271\267\377\261\333\343\342\377\2\302\315\313\377\242\261\256\377" \
+ "\377\333\343\342\377\311\333\343\342\377\3z\216\212\377p\205\201\377" \
+ "\266\303\301\377\261\333\343\342\377\2\326\336\335\377\327\340\337\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343" \
+ "\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377" \
+ "\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333" \
+ "\343\342\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342" \
+ "\377\377\333\343\342\377\377\333\343\342\377\377\333\343\342\377\377" \
+ "\333\343\342\377\344\333\343\342\377")
+
+
diff --git a/packages/psplash/files/configurability.patch b/packages/psplash/files/configurability.patch
new file mode 100644
index 0000000000..b923cb24f1
--- /dev/null
+++ b/packages/psplash/files/configurability.patch
@@ -0,0 +1,292 @@
+Index: psplash/psplash.c
+===================================================================
+--- psplash.orig/psplash.c
++++ psplash/psplash.c
+@@ -44,17 +44,17 @@ psplash_draw_msg (PSplashFB *fb, const c
+
+ /* Clear */
+
+- psplash_fb_draw_rect (fb,
+- 0,
+- fb->height - (fb->height/6) - h,
++ psplash_fb_draw_rect (fb,
++ 0,
++ fb->height - (fb->height/PSPLASH_TEXT_DIVIDER) - h,
+ fb->width,
+ h,
+- 0xec, 0xec, 0xe1);
++ PSPLASH_BACKGROUND_COLOR_R, PSPLASH_BACKGROUND_COLOR_G, PSPLASH_BACKGROUND_COLOR_B);
+
+ psplash_fb_draw_text (fb,
+- (fb->width-w)/2,
+- fb->height - (fb->height/6) - h,
+- 0x6d, 0x6d, 0x70,
++ (fb->width-w)/2,
++ fb->height - (fb->height/PSPLASH_TEXT_DIVIDER) - h,
++ PSPLASH_TEXT_COLOR_R, PSPLASH_TEXT_COLOR_G, PSPLASH_TEXT_COLOR_B,
+ &radeon_font,
+ msg);
+ }
+@@ -66,36 +66,36 @@ psplash_draw_progress (PSplashFB *fb, in
+
+ /* 4 pix border */
+ x = ((fb->width - BAR_IMG_WIDTH)/2) + 4 ;
+- y = fb->height - (fb->height/6) + 4;
+- width = BAR_IMG_WIDTH - 8;
++ y = fb->height - (fb->height/PSPLASH_PROGRESS_DIVIDER) + 4;
++ width = BAR_IMG_WIDTH - 8;
+ height = BAR_IMG_HEIGHT - 8;
+
+ if (value > 0)
+ {
+ barwidth = (CLAMP(value,0,100) * width) / 100;
+- psplash_fb_draw_rect (fb, x + barwidth, y,
++ psplash_fb_draw_rect (fb, x + barwidth, y,
+ width - barwidth, height,
+- 0xec, 0xec, 0xe1);
++ PSPLASH_BACKGROUND_COLOR_R, PSPLASH_BACKGROUND_COLOR_G, PSPLASH_BACKGROUND_COLOR_B);
+ psplash_fb_draw_rect (fb, x, y, barwidth,
+- height, 0x6d, 0x6d, 0x70);
++ height, PSPLASH_PROGRESS_COLOR_R, PSPLASH_PROGRESS_COLOR_G, PSPLASH_PROGRESS_COLOR_B);
+ }
+ else
+ {
+ barwidth = (CLAMP(-value,0,100) * width) / 100;
+- psplash_fb_draw_rect (fb, x, y,
++ psplash_fb_draw_rect (fb, x, y,
+ width - barwidth, height,
+- 0xec, 0xec, 0xe1);
++ PSPLASH_BACKGROUND_COLOR_R, PSPLASH_BACKGROUND_COLOR_G, PSPLASH_BACKGROUND_COLOR_B);
+ psplash_fb_draw_rect (fb, x + width - barwidth,
+ y, barwidth, height,
+- 0x6d, 0x6d, 0x70);
++ PSPLASH_PROGRESS_COLOR_R, PSPLASH_PROGRESS_COLOR_G, PSPLASH_PROGRESS_COLOR_B);
+ }
+
+- DBG("value: %i, width: %i, barwidth :%i\n", value,
++ DBG("value: %i, width: %i, barwidth :%i\n", value,
+ width, barwidth);
+ }
+
+-static int
+-parse_command (PSplashFB *fb, char *string, int length)
++static int
++parse_command (PSplashFB *fb, char *string, int length)
+ {
+ char *command;
+ int parsed=0;
+@@ -103,21 +103,21 @@ parse_command (PSplashFB *fb, char *stri
+ parsed = strlen(string)+1;
+
+ DBG("got cmd %s", string);
+-
++
+ if (strcmp(string,"QUIT") == 0)
+ return 1;
+
+ command = strtok(string," ");
+
+- if (!strcmp(command,"PROGRESS"))
++ if (!strcmp(command,"PROGRESS"))
+ {
+ psplash_draw_progress (fb, atoi(strtok(NULL,"\0")));
+- }
+- else if (!strcmp(command,"MSG"))
++ }
++ else if (!strcmp(command,"MSG"))
+ {
+ psplash_draw_msg (fb, strtok(NULL,"\0"));
+- }
+- else if (!strcmp(command,"QUIT"))
++ }
++ else if (!strcmp(command,"QUIT"))
+ {
+ return 1;
+ }
+@@ -125,8 +125,8 @@ parse_command (PSplashFB *fb, char *stri
+ return 0;
+ }
+
+-void
+-psplash_main (PSplashFB *fb, int pipe_fd, int timeout)
++void
++psplash_main (PSplashFB *fb, int pipe_fd, int timeout)
+ {
+ int err;
+ ssize_t length = 0;
+@@ -143,14 +143,14 @@ psplash_main (PSplashFB *fb, int pipe_fd
+
+ end = command;
+
+- while (1)
++ while (1)
+ {
+- if (timeout != 0)
++ if (timeout != 0)
+ err = select(pipe_fd+1, &descriptors, NULL, NULL, &tv);
+ else
+ err = select(pipe_fd+1, &descriptors, NULL, NULL, NULL);
+-
+- if (err <= 0)
++
++ if (err <= 0)
+ {
+ /*
+ if (errno == EINTR)
+@@ -158,29 +158,29 @@ psplash_main (PSplashFB *fb, int pipe_fd
+ */
+ return;
+ }
+-
++
+ length += read (pipe_fd, end, sizeof(command) - (end - command));
+
+- if (length == 0)
++ if (length == 0)
+ {
+ /* Reopen to see if there's anything more for us */
+ close(pipe_fd);
+ pipe_fd = open(PSPLASH_FIFO,O_RDONLY|O_NONBLOCK);
+ goto out;
+ }
+-
+- if (command[length-1] == '\0')
++
++ if (command[length-1] == '\0')
+ {
+- if (parse_command(fb, command, strlen(command)))
++ if (parse_command(fb, command, strlen(command)))
+ return;
+ length = 0;
+- }
++ }
+ out:
+ end = &command[length];
+-
++
+ tv.tv_sec = timeout;
+ tv.tv_usec = 0;
+-
++
+ FD_ZERO(&descriptors);
+ FD_SET(pipe_fd,&descriptors);
+ }
+@@ -188,14 +188,14 @@ psplash_main (PSplashFB *fb, int pipe_fd
+ return;
+ }
+
+-int
+-main (int argc, char** argv)
++int
++main (int argc, char** argv)
+ {
+ char *tmpdir;
+ int pipe_fd, i = 0, angle = 0;
+ PSplashFB *fb;
+ bool disable_console_switch = FALSE;
+-
++
+ signal(SIGHUP, psplash_exit);
+ signal(SIGINT, psplash_exit);
+ signal(SIGQUIT, psplash_exit);
+@@ -214,10 +214,10 @@ main (int argc, char** argv)
+ angle = atoi(argv[i]);
+ continue;
+ }
+-
++
+ fail:
+- fprintf(stderr,
+- "Usage: %s [-n|--no-console-switch][-a|--angle <0|90|180|270>]\n",
++ fprintf(stderr,
++ "Usage: %s [-n|--no-console-switch][-a|--angle <0|90|180|270>]\n",
+ argv[0]);
+ exit(-1);
+ }
+@@ -231,7 +231,7 @@ main (int argc, char** argv)
+
+ if (mkfifo(PSPLASH_FIFO, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP))
+ {
+- if (errno!=EEXIST)
++ if (errno!=EEXIST)
+ {
+ perror("mkfifo");
+ exit(-1);
+@@ -239,8 +239,8 @@ main (int argc, char** argv)
+ }
+
+ pipe_fd = open (PSPLASH_FIFO,O_RDONLY|O_NONBLOCK);
+-
+- if (pipe_fd==-1)
++
++ if (pipe_fd==-1)
+ {
+ perror("pipe open");
+ exit(-2);
+@@ -252,30 +252,30 @@ main (int argc, char** argv)
+ if ((fb = psplash_fb_new(angle)) == NULL)
+ exit(-1);
+
+- /* Clear the background with #ecece1 */
+- psplash_fb_draw_rect (fb, 0, 0, fb->width, fb->height, 0xec, 0xec, 0xe1);
++ /* Clear the background */
++ psplash_fb_draw_rect (fb, 0, 0, fb->width, fb->height, PSPLASH_BACKGROUND_COLOR_R, PSPLASH_BACKGROUND_COLOR_G, PSPLASH_BACKGROUND_COLOR_B);
+
+ /* Draw the OH logo */
+- psplash_fb_draw_image (fb,
+- (fb->width - HAND_IMG_WIDTH)/2,
+- (fb->height - HAND_IMG_HEIGHT)/2,
++ psplash_fb_draw_image (fb,
++ (fb->width - HAND_IMG_WIDTH)/2,
++ (fb->height - HAND_IMG_HEIGHT)/2,
+ HAND_IMG_WIDTH,
+ HAND_IMG_HEIGHT,
+ HAND_IMG_BYTES_PER_PIXEL,
+ HAND_IMG_RLE_PIXEL_DATA);
+
+ /* Draw progress bar border */
+- psplash_fb_draw_image (fb,
+- (fb->width - BAR_IMG_WIDTH)/2,
+- fb->height - (fb->height/6),
++ psplash_fb_draw_image (fb,
++ (fb->width - BAR_IMG_WIDTH)/2,
++ fb->height - (fb->height/PSPLASH_PROGRESS_DIVIDER),
+ BAR_IMG_WIDTH,
+ BAR_IMG_HEIGHT,
+ BAR_IMG_BYTES_PER_PIXEL,
+ BAR_IMG_RLE_PIXEL_DATA);
+
+- psplash_draw_progress (fb, 0);
++ psplash_draw_progress (fb, 0); /* draw initial progress */
+
+- psplash_draw_msg (fb, MSG);
++ if (strlen(MSG)) psplash_draw_msg (fb, MSG);
+
+ psplash_main (fb, pipe_fd, 0);
+
+Index: psplash/psplash.h
+===================================================================
+--- psplash.orig/psplash.h
++++ psplash/psplash.h
+@@ -54,6 +54,21 @@ typedef int bool;
+ #define TRUE 1
+ #endif
+
++#define PSPLASH_BACKGROUND_COLOR_R 0x00
++#define PSPLASH_BACKGROUND_COLOR_G 0x00
++#define PSPLASH_BACKGROUND_COLOR_B 0x00
++
++#define PSPLASH_PROGRESS_COLOR_R 0xe3
++#define PSPLASH_PROGRESS_COLOR_G 0x71
++#define PSPLASH_PROGRESS_COLOR_B 0x00
++
++#define PSPLASH_TEXT_COLOR_R 0xff
++#define PSPLASH_TEXT_COLOR_G 0xff
++#define PSPLASH_TEXT_COLOR_B 0xff
++
++#define PSPLASH_PROGRESS_DIVIDER 3
++#define PSPLASH_TEXT_DIVIDER 3
++
+ #define PSPLASH_FIFO "psplash_fifo"
+
+ #define CLAMP(x, low, high) \
diff --git a/packages/psplash/files/openmoko/.mtn2git_empty b/packages/psplash/files/openmoko/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/psplash/files/openmoko/.mtn2git_empty
diff --git a/packages/psplash/files/openmoko/psplash-bar-img.h b/packages/psplash/files/openmoko/psplash-bar-img.h
new file mode 100644
index 0000000000..de77daa13f
--- /dev/null
+++ b/packages/psplash/files/openmoko/psplash-bar-img.h
@@ -0,0 +1,59 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define BAR_IMG_ROWSTRIDE (920)
+#define BAR_IMG_WIDTH (230)
+#define BAR_IMG_HEIGHT (28)
+#define BAR_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define BAR_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\7\17\20\17\377!#\40\377EGC\377z}x\377\200\204\201\377vz{\377knr\377\377" \
+ "hlp\377\331hlp\377\16knr\377x|}\377\210\214\211\377\206\212\205\377=" \
+ "\77<\377\27\27\26\377\7\7\7\377\"#!\377464\377bda\377mpn\377sww\377n" \
+ "qt\377ilp\377\377hlp\377\331hlp\377\20ilp\377nqt\377swy\377ors\377nn" \
+ "k\377+,*\377\24\24\24\377HIG\377ded\377egf\377ill\377fik\377beh\377_" \
+ "cf\377aei\377fjn\377\377hlp\377\323hlp\377\2hlo\377dhl\377\203bfj\377" \
+ "\22dgk\377gkn\377knp\377fij\377jkf\377342\377\201\203\201\377prr\377" \
+ "jlm\377_bd\377TWY\377JNP\377ILO\377MQS\377WZ]\377_cf\377dhk\377gko\377" \
+ "\377hlp\377\317hlp\377\30cgj\377\\_b\377QTW\377LNQ\377LOQ\377LOR\377" \
+ "NRT\377VZ]\377`cf\377jmo\377lnn\377ttr\377\211\213\212\377wy{\377hjl" \
+ "\377TWY\37779;\377&)*\377\36\40!\377\30\30\32\377\17\17\20\377\7\7\10" \
+ "\377\6\6\7\377\1\1\1\377\377\0\0\0\377\317\0\0\0\377\24\4\4\4\377\12" \
+ "\12\13\377\24\26\27\377\32\34\35\377\34\35\37\377\35\36\37\377\40\"#" \
+ "\377/12\377VY]\377gjm\377rtv\377\210\212\210\377{}\177\377psv\377cfi" \
+ "\377KNP\377&()\377\16\17\17\377\5\5\5\377\2\2\2\377\377\0\0\0\377\325" \
+ "\0\0\0\377\2\1\1\1\377\4\5\5\377\202\6\6\6\377\14\13\14\14\377\40\"#" \
+ "\377NRT\377dgj\377ort\377\200\201\202\377pqs\377jmq\377aeh\377KNQ\377" \
+ "\33\34\35\377\5\5\5\377\377\0\0\0\377\332\0\0\0\377\7\1\1\1\377\6\6\6" \
+ "\377\35\36\37\377MPR\377bfj\377jnq\377pqs\377\202hlp\377\4gko\377SWY" \
+ "\377\23\23\25\377\1\1\1\377\377\0\0\0\377\333\0\0\0\377\4\4\4\4\377\31" \
+ "\32\33\377PSV\377fjm\377\205hlp\377\2^be\377\11\11\12\377\377\0\0\0\377" \
+ "\334\0\0\0\377\3\1\1\1\377\17\20\21\377Y\\_\377\206hlp\377\2cgj\377\6" \
+ "\6\7\377\377\0\0\0\377\336\0\0\0\377\207hlp\377\2fjm\377\4\4\5\377\377" \
+ "\0\0\0\377\336\0\0\0\377\210hlp\377\377\0\0\0\377\337\0\0\0\377\210h" \
+ "lp\377\377\0\0\0\377\337\0\0\0\377\210hlp\377\377\0\0\0\377\337\0\0\0" \
+ "\377\210hlp\377\377\0\0\0\377\337\0\0\0\377\210hlp\377\377\0\0\0\377" \
+ "\337\0\0\0\377\210hlp\377\377\0\0\0\377\337\0\0\0\377\210hlp\377\377" \
+ "\0\0\0\377\337\0\0\0\377\210hlp\377\377\0\0\0\377\336\0\0\0\377\2\2\2" \
+ "\3\377eim\377\206hlp\377\2cgk\377\3\3\3\377\377\0\0\0\377\334\0\0\0\377" \
+ "\4\3\3\3\377\26\27\31\377TWZ\377gko\377\204hlp\377\3gko\377Z]a\377\13" \
+ "\14\14\377\377\0\0\0\377\334\0\0\0\377\4\7\7\7\377\36\37\40\377MPR\377" \
+ "cgj\377\202hlp\377\6pqs\377jnp\377cfi\377MPS\377\26\26\30\377\2\2\2\377" \
+ "\377\0\0\0\377\332\0\0\0\377\16\2\2\2\377\10\10\10\377\40\"#\377KNP\377" \
+ "adh\377jmp\377pqs\377|~~\377ort\377cfi\377LOQ\377!\"$\377\11\12\12\377" \
+ "\2\2\2\377\377\0\0\0\377\325\0\0\0\377\24\1\1\1\377\4\4\4\377\5\5\5\377" \
+ "\10\10\10\377\10\10\11\377\17\20\20\377$&'\377LPR\377cfi\377ort\377~" \
+ "\200\201\377\201\203\201\377qtu\377fik\377TW[\377347\377!\"#\377\30\31" \
+ "\32\377\15\16\16\377\3\3\3\377\377\0\0\0\377\321\0\0\0\377\26\3\3\3\377" \
+ "\7\7\10\377\21\22\23\377\31\32\33\377\35\36\40\377\37\40!\377\40!#\377" \
+ "$&'\377367\377UX[\377fik\377rtv\377\204\206\205\377oon\377jll\377hkm" \
+ "\377_ad\377TW[\377LOQ\377NQS\377UXZ\377bei\377\377hlp\377\321hlp\377" \
+ "\25eim\377`dg\377VY\\\377MPS\377KNP\377ILO\377JMP\377LPR\377TX[\377_" \
+ "bd\377ilm\377jll\377qro\377==<\377cda\377dgh\377iln\377gjl\377cfi\377" \
+ "cgj\377fjn\377\377hlp\377\324hlp\377\3gkn\377cgk\377bfj\377\202`dh\377" \
+ "\15cfi\377fjl\377imn\377dgh\377ddb\377675\377\35\36\35\377121\377ghe" \
+ "\377nqq\377swy\377nqt\377ilp\377\377hlp\377\331hlp\377\16ilp\377nqt\377" \
+ "swy\377nqp\377ghe\377./.\377\26\26\26\377\15\15\15\377\37\37\36\377C" \
+ "EB\377~\202~\377\204\210\205\377w{|\377knr\377\377hlp\377\331hlp\377" \
+ "\7knr\377w{|\377\204\210\205\377~\202~\377BDA\377\34\34\33\377\10\10" \
+ "\10\377")
+
+
diff --git a/packages/psplash/files/openmoko/psplash-hand-img.h b/packages/psplash/files/openmoko/psplash-hand-img.h
new file mode 100644
index 0000000000..96dc16c723
--- /dev/null
+++ b/packages/psplash/files/openmoko/psplash-hand-img.h
@@ -0,0 +1,5377 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define HAND_IMG_ROWSTRIDE (1920)
+#define HAND_IMG_WIDTH (480)
+#define HAND_IMG_HEIGHT (640)
+#define HAND_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define HAND_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\257\0\0\0\377\204\1\1\0\377\203\2\2\1\377" \
+ "\214\3\3\1\377\202\2\2\1\377\203\1\1\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\310\0\0\0\377\3\1\1\0\377\2\2\1\377\3\3\1\377\202\4\3" \
+ "\1\377\202\5\4\1\377\203\5\4\2\377\205\6\5\2\377\202\7\6\2\377\204\6" \
+ "\5\2\377\203\5\4\2\377\202\5\4\1\377\202\4\3\1\377\202\3\3\1\377\1\2" \
+ "\2\1\377\202\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\300" \
+ "\0\0\0\377\7\1\1\0\377\3\3\1\377\4\3\1\377\5\4\2\377\6\5\2\377\7\6\2" \
+ "\377\10\7\3\377\202\11\10\3\377\202\12\11\3\377\203\13\11\3\377\210\14" \
+ "\12\4\377\203\13\11\3\377\1\12\11\3\377\202\11\10\3\377\1\10\7\3\377" \
+ "\202\7\6\2\377\4\6\5\2\377\5\4\2\377\5\4\1\377\4\3\1\377\202\3\3\1\377" \
+ "\2\2\2\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\272" \
+ "\0\0\0\377\12\1\1\0\377\3\3\1\377\5\4\1\377\6\5\2\377\10\7\3\377\12\11" \
+ "\3\377\13\11\3\377\15\13\4\377\16\14\4\377\17\15\5\377\202\17\15\4\377" \
+ "\1\20\16\4\377\203\21\16\5\377\210\22\17\5\377\202\21\16\5\377\202\20" \
+ "\16\4\377\15\17\15\4\377\17\15\5\377\16\14\4\377\15\13\4\377\14\12\4" \
+ "\377\13\11\3\377\12\11\3\377\11\10\3\377\10\7\3\377\7\6\2\377\6\5\2\377" \
+ "\5\4\2\377\5\4\1\377\202\3\3\1\377\202\1\1\0\377\377\0\0\0\377\377\0" \
+ "\0\0\377\377\0\0\0\377\265\0\0\0\377\16\2\2\1\377\4\3\1\377\6\5\2\377" \
+ "\10\7\3\377\13\11\3\377\15\13\4\377\17\15\4\377\20\16\4\377\22\17\5\377" \
+ "\23\20\5\377\24\21\5\377\25\22\6\377\26\23\6\377\27\24\6\377\203\30\25" \
+ "\7\377\210\31\25\7\377\202\30\25\7\377\202\27\24\6\377\24\26\23\6\377" \
+ "\25\22\6\377\24\21\5\377\23\20\5\377\22\17\5\377\21\16\5\377\20\16\4" \
+ "\377\17\15\4\377\16\14\4\377\15\13\4\377\14\12\4\377\12\11\3\377\11\10" \
+ "\3\377\7\6\2\377\6\5\2\377\5\4\1\377\4\3\1\377\3\3\1\377\2\2\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\261\0\0\0\377\15\3" \
+ "\3\1\377\5\4\1\377\7\6\2\377\12\11\3\377\15\13\4\377\20\16\4\377\22\17" \
+ "\5\377\25\22\6\377\27\24\6\377\30\25\7\377\31\25\7\377\33\27\10\377\34" \
+ "\30\10\377\202\35\31\10\377\1\36\32\11\377\204\37\33\11\377\204\40\33" \
+ "\11\377\203\37\33\11\377\202\36\32\11\377\4\35\31\10\377\34\30\10\377" \
+ "\33\27\10\377\32\26\7\377\202\31\25\7\377\20\30\25\7\377\27\24\6\377" \
+ "\25\22\6\377\24\21\5\377\22\17\5\377\21\16\5\377\20\16\4\377\17\15\5" \
+ "\377\15\13\4\377\13\11\3\377\12\11\3\377\10\7\3\377\6\5\2\377\5\4\2\377" \
+ "\4\3\1\377\3\3\1\377\202\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0" \
+ "\0\0\377\255\0\0\0\377\15\3\3\1\377\5\4\2\377\10\7\3\377\14\12\4\377" \
+ "\17\15\4\377\22\17\5\377\25\22\6\377\30\25\7\377\32\26\7\377\34\30\10" \
+ "\377\37\33\11\377!\34\11\377\"\35\12\377\202#\36\12\377\202$\37\13\377" \
+ "\202%!\13\377\210&!\13\377\1%!\13\377\202$\37\13\377\203#\36\12\377\27" \
+ "\"\35\12\377!\34\11\377\40\33\11\377\37\33\11\377\35\31\10\377\34\30" \
+ "\10\377\32\26\7\377\31\25\7\377\30\25\7\377\26\23\6\377\24\21\5\377\23" \
+ "\20\5\377\21\16\5\377\17\15\4\377\16\14\4\377\14\12\4\377\12\11\3\377" \
+ "\10\7\3\377\6\5\2\377\5\4\1\377\4\3\1\377\2\2\1\377\1\1\0\377\377\0\0" \
+ "\0\377\377\0\0\0\377\377\0\0\0\377\251\0\0\0\377\22\1\1\0\377\3\3\1\377" \
+ "\5\4\2\377\11\10\3\377\15\13\4\377\20\16\4\377\24\21\5\377\30\25\7\377" \
+ "\32\26\7\377\36\32\11\377!\34\11\377#\36\12\377%!\13\377&!\13\377'#\14" \
+ "\377($\14\377)%\14\377*%\15\377\203+&\15\377\210,'\15\377\202+&\15\377" \
+ "\1*%\15\377\202)%\14\377\2($\14\377'#\14\377\202&!\13\377\26%!\13\377" \
+ "$\37\13\377#\36\12\377\"\35\12\377\40\33\11\377\36\32\11\377\34\30\10" \
+ "\377\32\26\7\377\31\25\7\377\27\24\6\377\25\22\6\377\23\20\5\377\21\16" \
+ "\5\377\17\15\4\377\16\14\4\377\14\12\4\377\12\11\3\377\7\6\2\377\5\4" \
+ "\2\377\4\3\1\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\246\0\0\0\377\21\1\1\0\377\3\3\1\377\5\4\2\377\11\10\3\377" \
+ "\16\14\4\377\21\16\5\377\25\22\6\377\31\25\7\377\35\31\10\377!\34\11" \
+ "\377#\36\12\377&!\13\377)%\14\377+&\15\377,'\16\377-(\16\377.)\16\377" \
+ "\202/*\16\377\2020+\17\377\2121,\17\377\2020+\17\377\1/*\16\377\202." \
+ ")\16\377\33-(\16\377,'\16\377,'\15\377+&\15\377)%\14\377($\14\377'#\14" \
+ "\377&!\13\377$\37\13\377#\36\12\377\"\35\12\377\40\33\11\377\35\31\10" \
+ "\377\33\27\10\377\31\25\7\377\30\25\7\377\25\22\6\377\23\20\5\377\21" \
+ "\16\5\377\17\15\4\377\15\13\4\377\13\11\3\377\11\10\3\377\6\5\2\377\5" \
+ "\4\1\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\244\0\0\0\377\20\3\3\1\377\5\4\2\377\11\10\3\377\16\14\4\377\22\17\5" \
+ "\377\26\23\6\377\32\26\7\377\37\33\11\377#\36\12\377&!\13\377)%\14\377" \
+ ",'\15\377.)\16\3770+\17\3772-\17\3773-\17\377\2024.\20\377\2035/\17\377" \
+ "\21260\20\377\2035/\17\377\1""4.\20\377\2023-\17\377\34""2-\17\3771," \
+ "\17\3770+\17\377/*\16\377.)\16\377,'\16\377,'\15\377*%\15\377)%\14\377" \
+ "'#\14\377&!\13\377$\37\13\377#\36\12\377\40\33\11\377\36\32\11\377\33" \
+ "\27\10\377\31\25\7\377\27\24\6\377\25\22\6\377\22\17\5\377\20\16\4\377" \
+ "\16\14\4\377\14\12\4\377\11\10\3\377\7\6\2\377\5\4\1\377\3\3\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\241\0\0\0\377\16\3" \
+ "\3\1\377\5\4\2\377\11\10\3\377\15\13\4\377\21\16\5\377\27\24\6\377\33" \
+ "\27\10\377\37\33\11\377#\36\12\377&!\13\377+&\15\377-(\16\3771,\17\377" \
+ "4.\20\377\20260\20\377\20371\20\377\20482\20\377\20792\21\377\20582\20" \
+ "\377\20271\20\377\20360\20\377\34""5/\17\3774.\20\3773-\17\3772-\17\377" \
+ "1,\17\377/*\16\377.)\16\377,'\16\377+&\15\377)%\14\377'#\14\377&!\13" \
+ "\377$\37\13\377#\36\12\377\40\33\11\377\35\31\10\377\32\26\7\377\31\25" \
+ "\7\377\26\23\6\377\23\20\5\377\21\16\5\377\17\15\5\377\14\12\4\377\12" \
+ "\11\3\377\7\6\2\377\5\4\1\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0" \
+ "\0\0\377\377\0\0\0\377\236\0\0\0\377\17\2\2\1\377\5\4\1\377\10\7\3\377" \
+ "\15\13\4\377\21\16\5\377\26\23\6\377\32\26\7\377\37\33\11\377$\37\13" \
+ "\377'#\14\377,'\15\377/*\16\3773-\17\37760\20\37771\20\377\23292\21\377" \
+ "\20282\20\377\1""71\20\377\20260\20\377\31""5/\17\3774.\20\3772-\17\377" \
+ "0+\17\377/*\16\377-(\16\377,'\15\377)%\14\377'#\14\377&!\13\377#\36\12" \
+ "\377\"\35\12\377\37\33\11\377\34\30\10\377\31\25\7\377\27\24\6\377\24" \
+ "\21\5\377\21\16\5\377\17\15\5\377\14\12\4\377\11\10\3\377\7\6\2\377\5" \
+ "\4\1\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\233\0\0\0\377\33\1\1\0\377\4\3\1\377\7\6\2\377\14\12\4\377\20\16\4\377" \
+ "\25\22\6\377\32\26\7\377\37\33\11\377$\37\13\377'#\14\377,'\15\3770+" \
+ "\17\3774.\20\377A;\34\377NH,\377YT8\377a[B\377jeM\377zt\\\377\221\214" \
+ "q\377\243\236\177\377\251\245\205\377\273\265\223\377\307\302\242\377" \
+ "\322\315\252\377\320\312\241\377\320\313\241\377\202\345\340\261\377" \
+ "\14\344\337\257\377\344\336\252\377\336\327\241\377\311\300\214\377\305" \
+ "\275\204\377\303\273\201\377\254\243j\377\237\227`\377\217\206R\377}" \
+ "uF\377^V-\377JC\35\377\20592\21\377\20282\20\377\1""71\20\377\20260\20" \
+ "\377\26""4.\20\3772-\17\3771,\17\377/*\16\377,'\16\377+&\15\377)%\14" \
+ "\377&!\13\377$\37\13\377#\36\12\377\40\33\11\377\34\30\10\377\31\25\7" \
+ "\377\27\24\6\377\24\21\5\377\21\16\5\377\17\15\5\377\14\12\4\377\11\10" \
+ "\3\377\6\5\2\377\4\3\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\232\0\0\0\377.\3\3\1\377\6\5\2\377\13\11\3\377\17\15\4\377" \
+ "\24\21\5\377\31\25\7\377\37\33\11\377#\36\12\37730\31\377LH3\377daL\377" \
+ "to\\\377\204\200n\377\211\206s\377\210\205r\377\210\204r\377\226\222" \
+ "~\377\222\216z\377\232\226\200\377\211\206r\377\206\201o\377\205\200" \
+ "n\377\204\200n\377\203\177l\377\203~k\377\202}k\377\201|j\377\200|i\377" \
+ "\212\207q\377\223\217w\377\233\226}\377\247\241\206\377\265\261\222\377" \
+ "\300\273\232\377\320\313\246\377\345\340\264\377\344\337\256\377\344" \
+ "\336\247\377\344\335\241\377\343\333\232\377\343\332\225\377\332\320" \
+ "\215\377\271\260t\377\232\221Z\377wpA\377OH#\377\20492\21\377\2""82\20" \
+ "\37771\20\377\20260\20\377\25""4.\20\3772-\17\3770+\17\377.)\16\377," \
+ "'\15\377*%\15\377'#\14\377&!\13\377#\36\12\377\40\33\11\377\35\31\10" \
+ "\377\31\25\7\377\27\24\6\377\24\21\5\377\21\16\5\377\16\14\4\377\13\11" \
+ "\3\377\10\7\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0" \
+ "\0\377\377\0\0\0\377\227\0\0\0\3773\2\2\1\377\5\4\1\377\11\10\3\377\16" \
+ "\14\4\377\23\20\5\377#\37\22\377B\77""1\377`]O\377xuh\377\204\201t\377" \
+ "\206\203u\377\210\204t\377\210\205s\377\210\205r\377\210\204r\377\210" \
+ "\203r\377\212\206s\377\244\240\210\377\277\272\235\377\277\273\235\377" \
+ "\262\256\222\377\235\230\201\377\203\177l\377\203~k\377\202}k\377\201" \
+ "|j\377\200|i\377\200{g\377\177{g\377~zf\377}ye\377~ze\377}yd\377|xd\377" \
+ "{wc\377{wa\377zua\377\216\211q\377\241\235\200\377\272\264\222\377\324" \
+ "\317\250\377\345\340\261\377\344\336\251\377\344\335\240\377\343\333" \
+ "\231\377\343\332\225\377\343\332\224\377\323\311\206\377\252\241g\377" \
+ "|tD\377JC\35\377\20392\21\377\30""82\20\37771\20\37760\20\3775/\17\377" \
+ "3-\17\3771,\17\377/*\16\377,'\16\377+&\15\377($\14\377&!\13\377#\36\12" \
+ "\377\40\33\11\377\35\31\10\377\31\25\7\377\26\23\6\377\23\20\5\377\20" \
+ "\16\4\377\15\13\4\377\12\11\3\377\7\6\2\377\5\4\1\377\3\3\1\377\1\1\0" \
+ "\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\224\0\0\0\377\22\1\1\0" \
+ "\377\3\3\1\377\7\6\2\377\27\25\20\377@>7\377caX\377~|t\377\177}s\377" \
+ "\201~r\377\203\200s\377\205\202s\377\207\203s\377\210\204s\377\210\204" \
+ "r\377\210\203r\377\207\203q\377\250\243\212\377\337\333\270\377\202\346" \
+ "\342\275\377\202\346\342\274\377\16\346\341\274\377\331\324\261\377\246" \
+ "\243\210\377\200|i\377\200{g\377\177{g\377~zf\377}ye\377~ze\377}yd\377" \
+ "|xd\377{wc\377{wa\377zua\377\202yu`\377\21xs^\377xr^\377wr]\377vq\\\377" \
+ "\177zb\377\232\225y\377\276\271\225\377\334\327\254\377\344\337\255\377" \
+ "\344\335\243\377\343\333\231\377\343\332\225\377\343\332\224\377\343" \
+ "\332\223\377\277\267w\377\216\206Q\377QJ#\377\20392\21\377\26""82\20" \
+ "\37771\20\37760\20\3774.\20\3772-\17\377/*\16\377-(\16\377+&\15\377(" \
+ "$\14\377&!\13\377#\36\12\377\37\33\11\377\34\30\10\377\31\25\7\377\25" \
+ "\22\6\377\22\17\5\377\17\15\5\377\14\12\4\377\10\7\3\377\5\4\2\377\3" \
+ "\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\223\0\0" \
+ "\0\377\25\5\5\4\377.-+\377]\\Y\377wvr\377yxr\377|zr\377~{r\377\177}r" \
+ "\377\201~r\377\204\200r\377\206\202r\377\207\203r\377\210\203r\377\207" \
+ "\203q\377\206\202p\377\277\273\236\377\346\342\276\377\346\342\275\377" \
+ "\346\342\276\377\346\342\275\377\346\341\276\377\204\346\341\275\377" \
+ "\13\217\212u\377~zf\377}ye\377~ze\377}yd\377{xc\377{wa\377zw`\377yt_" \
+ "\377xt^\377xs_\377\202xr^\377\5wr]\377vq\\\377up[\377uo[\377toZ\377\202" \
+ "soY\377\15rnW\377\220\213n\377\266\260\214\377\333\326\252\377\344\336" \
+ "\252\377\344\335\240\377\343\333\230\377\343\332\225\377\343\332\224" \
+ "\377\343\332\222\377\301\271x\377\207\177K\377H@\33\377\20292\21\377" \
+ "\25""82\20\37771\20\37760\20\3775/\17\3772-\17\377/*\16\377-(\16\377" \
+ "+&\15\377'#\14\377%!\13\377\"\35\12\377\37\33\11\377\33\27\10\377\30" \
+ "\25\7\377\24\21\5\377\20\16\4\377\16\14\4\377\12\11\3\377\7\6\2\377\5" \
+ "\4\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\220\0\0" \
+ "\0\377\25\21\21\21\377BBA\377jji\377ttq\377utp\377wup\377yxq\377|zq\377" \
+ "~|q\377\177}p\377\202~q\377\204\200q\377\206\202p\377\207\203p\377\206" \
+ "\202p\377\206\201o\377\274\270\234\377\346\342\276\377\346\342\277\377" \
+ "\346\342\276\377\346\341\276\377\205\346\342\276\377\20\324\317\257\377" \
+ "}ye\377~ze\377}yd\377{xc\377zwa\377yt`\377xs_\377vr^\377uq]\377tp]\377" \
+ "tp\\\377up]\377tp\\\377to[\377toZ\377\203soY\377\21rnW\377rmW\377qmV" \
+ "\377plU\377okT\377plU\377\224\217q\377\303\275\226\377\344\337\257\377" \
+ "\344\335\245\377\343\333\232\377\343\332\225\377\343\332\224\377\343" \
+ "\332\223\377\340\327\217\377\252\241e\377f^2\377\20392\21\377\24""82" \
+ "\20\37760\20\3775/\17\3772-\17\377/*\16\377,'\16\377*%\15\377'#\14\377" \
+ "$\37\13\377!\34\11\377\35\31\10\377\31\25\7\377\26\23\6\377\22\17\5\377" \
+ "\17\15\4\377\14\12\4\377\10\7\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\214\0\0\0\377\2\27\27\27\377L" \
+ "LL\377\202qqq\377\22rqp\377tsp\377uto\377wuo\377zwo\377|yo\377~{p\377" \
+ "\200}o\377\202~o\377\204\200o\377\206\202o\377\206\201o\377\205\200n" \
+ "\377\243\237\210\377\346\342\277\377\346\342\300\377\346\342\277\377" \
+ "\346\342\300\377\205\346\342\277\377\22\346\342\276\377\266\261\225\377" \
+ "}yd\377|xd\377{wa\377yua\377xs_\377vq^\377tp^\377sp\\\377rn[\377qnZ\377" \
+ "pmZ\377qnY\377qmY\377qmX\377qmW\377qmV\377\202pmV\377\24pmU\377plU\377" \
+ "okT\377oiS\377nhR\377mhQ\377lgP\377lfO\377zuZ\377\255\247\203\377\336" \
+ "\330\251\377\344\336\247\377\343\334\234\377\343\333\226\377\343\332" \
+ "\224\377\343\332\223\377\343\332\222\377\305\274{\377wo@\377;4\23\377" \
+ "\20292\21\377\23""82\20\37760\20\3774.\20\3771,\17\377.)\16\377,'\15" \
+ "\377)%\14\377&!\13\377#\36\12\377\37\33\11\377\33\27\10\377\30\25\7\377" \
+ "\24\21\5\377\20\16\4\377\15\13\4\377\11\10\3\377\6\5\2\377\4\3\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\211\0\0\0\377\24" \
+ "\31\31\31\377RRR\377qqq\377ppp\377ooo\377ppo\377qqn\377srn\377tsn\377" \
+ "wun\377ywn\377|yn\377}{n\377\200}n\377\202~n\377\204\200n\377\205\200" \
+ "n\377\204\200n\377\212\206r\377\337\333\273\377\210\346\342\300\377\26" \
+ "\346\342\277\377\346\342\300\377\235\230\200\377{wc\377zw`\377yt_\377" \
+ "ws_\377tp^\377sp\\\377qn[\377olZ\377miY\377lhX\377lhW\377kgW\377kgV\377" \
+ "kgU\377lhU\377lhT\377lgU\377lgT\377lgR\377\202mhR\377\23mhQ\377lgP\377" \
+ "lfO\377kfO\377jeN\377ieM\377jeM\377ohP\377\236\230v\377\333\325\246\377" \
+ "\344\336\250\377\343\334\234\377\343\333\226\377\343\332\224\377\343" \
+ "\332\223\377\343\332\222\377\320\307\203\377\177vE\377>7\25\377\2029" \
+ "2\21\377\22""71\20\37760\20\3774.\20\3770+\17\377-(\16\377+&\15\377'" \
+ "#\14\377$\37\13\377!\34\11\377\35\31\10\377\31\25\7\377\26\23\6\377\21" \
+ "\16\5\377\16\14\4\377\12\11\3\377\7\6\2\377\4\3\1\377\2\2\1\377\377\0" \
+ "\0\0\377\377\0\0\0\377\377\0\0\0\377\206\0\0\0\377\21\20\20\20\377LL" \
+ "L\377qqq\377ppp\377ooo\377nnn\377nnm\377onm\377ppm\377rqm\377tsm\377" \
+ "vtl\377ywm\377|ym\377}{m\377\200}m\377\202~m\377\202\203\177l\377\2\203" \
+ "~k\377\267\264\230\377\202\346\342\300\377\206\346\342\301\377\15\346" \
+ "\342\300\377\346\342\301\377\346\342\300\377\210\203m\377zua\377xt^\377" \
+ "vr^\377to\\\377rn[\377olZ\377miY\377jgW\377ifW\377\202hdV\377\11gdU\377" \
+ "gcT\377gcS\377gdS\377gdR\377hdQ\377gdP\377hdP\377idO\377\202ieO\377\2" \
+ "ieN\377jeN\377\202jeM\377\17idL\377hbK\377gcJ\377gaI\377kfL\377\235\227" \
+ "u\377\333\324\245\377\344\335\246\377\343\333\232\377\343\333\226\377" \
+ "\343\332\224\377\343\332\223\377\343\332\222\377\316\304\200\377yqA\377" \
+ "\20292\21\377\22""82\20\37771\20\3775/\17\3772-\17\377/*\16\377,'\16" \
+ "\377)%\14\377&!\13\377#\36\12\377\37\33\11\377\32\26\7\377\27\24\6\377" \
+ "\23\20\5\377\17\15\4\377\13\11\3\377\10\7\3\377\5\4\1\377\2\2\1\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\203\0\0\0\377\7\6\6\6\377\77\77" \
+ "\77\377mmm\377ppp\377ooo\377nnn\377mmm\377\202lll\377\16mmk\377pnl\377" \
+ "rql\377tsl\377vtk\377ywk\377{yk\377}{l\377\177|k\377\202~k\377\203~k" \
+ "\377\202}k\377\213\207q\377\340\335\275\377\202\346\342\302\377\1\346" \
+ "\342\301\377\204\346\342\302\377\202\346\342\301\377\22\345\342\301\377" \
+ "\341\336\275\377yu`\377xs^\377vr]\377to[\377rnZ\377nkY\377lhW\377jgW" \
+ "\377gcU\377eaT\377c`S\377b_R\377`]Q\377a^Q\377a^P\377a^O\377\202a_N\377" \
+ "\14b_M\377b`M\377c`M\377c_L\377daL\377eaL\377e`K\377faJ\377gcJ\377gc" \
+ "I\377gaI\377faH\377\202e`G\377\10d_F\377idJ\377\246\240{\377\340\330" \
+ "\247\377\344\335\243\377\343\333\230\377\343\332\225\377\343\332\224" \
+ "\377\202\343\332\222\377\2\305\274z\377c[0\377\20292\21\377\22""82\20" \
+ "\37760\20\3774.\20\3771,\17\377-(\16\377+&\15\377'#\14\377#\36\12\377" \
+ "\40\33\11\377\34\30\10\377\30\25\7\377\24\21\5\377\20\16\4\377\14\12" \
+ "\4\377\10\7\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0" \
+ "\0\377\377\0\0\0\377\3###\377ddd\377ooo\377\202nnn\377\24mmm\377lll\377" \
+ "kkk\377jjj\377kkj\377lli\377oni\377qoj\377trj\377vsj\377yvj\377{yj\377" \
+ "}{j\377\177{j\377\201}k\377\201|j\377\200|i\377\261\255\223\377\346\342" \
+ "\302\377\346\342\303\377\203\346\342\302\377\1\346\342\303\377\205\346" \
+ "\342\302\377\15\322\314\257\377xr^\377wr]\377tp\\\377rnZ\377nkX\377k" \
+ "gV\377heV\377ebT\377b_R\377`]Q\377^[P\377\\ZO\377\202[XM\377\17[XL\377" \
+ "\\XL\377\\YL\377]YL\377]ZL\377^ZK\377^[J\377^[I\377_[I\377`[I\377`\\" \
+ "H\377a]H\377b]H\377b^G\377c_F\377\202d_F\377\17d_E\377c^D\377b]D\377" \
+ "a[C\377qkO\377\274\266\213\377\345\336\250\377\343\334\235\377\343\333" \
+ "\227\377\343\332\225\377\343\332\223\377\343\332\222\377\343\332\221" \
+ "\377\254\242f\377MF\40\377\20292\21\377\21""71\20\3775/\17\3772-\17\377" \
+ "/*\16\377,'\15\377($\14\377$\37\13\377\"\35\12\377\35\31\10\377\31\25" \
+ "\7\377\25\22\6\377\21\16\5\377\15\13\4\377\11\10\3\377\5\4\2\377\3\3" \
+ "\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\374\0\0\0\377\4\11\11\11" \
+ "\377JJJ\377ooo\377nnn\377\202mmm\377\2lll\377kkk\377\202jjj\377\17jj" \
+ "i\377jih\377lkh\377mlg\377poh\377sqi\377vsi\377xuh\377{wi\377~{i\377" \
+ "\177{i\377\200|i\377\200{g\377\200{i\377\331\325\266\377\205\346\342" \
+ "\303\377\206\346\343\303\377\15\303\300\242\377vq\\\377up[\377soZ\377" \
+ "olX\377kgV\377heU\377eaS\377a^Q\377^[O\377[XN\377XVM\377VTL\377\202U" \
+ "SK\377\202VSJ\377\4VSI\377VTH\377WTH\377WTG\377\202YVG\377\15ZUF\377" \
+ "ZVF\377VR\77\377RM:\377TP:\377UP:\377VQ:\377WR9\377XS:\377YU9\377YT8" \
+ "\377ZU9\377`[A\377\202_Z@\377\6\207\201_\377\326\316\236\377\344\335" \
+ "\244\377\343\333\232\377\343\333\226\377\343\332\224\377\202\343\332" \
+ "\222\377\2\334\321\212\377\201yF\377\20292\21\377\21""82\20\37760\20" \
+ "\3774.\20\3770+\17\377,'\16\377)%\14\377&!\13\377#\36\12\377\36\32\11" \
+ "\377\32\26\7\377\26\23\6\377\21\16\5\377\16\14\4\377\12\11\3\377\6\5" \
+ "\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\372\0\0\0\377" \
+ "\5###\377fff\377nnn\377mmm\377lll\377\202kkk\377\202jjj\377\1iii\377" \
+ "\202hhh\377\17iig\377jjf\377mlg\377png\377sqg\377urf\377xuh\377zwh\377" \
+ "}zh\377~{h\377\177{g\377~zf\377\232\226\200\377\346\342\303\377\346\342" \
+ "\304\377\211\346\343\304\377$\346\342\304\377\270\263\231\377uo[\377" \
+ "soY\377qmW\377mjV\377ieT\377daR\377a^Q\377]ZN\377YVM\377VTL\377SQK\377" \
+ "POI\377OMH\377ONH\377OMG\377OMF\377MKC\377DB8\37796+\3771-!\377-*\34" \
+ "\377(%\24\377&\"\17\377#\36\12\377%!\13\377'#\14\377)%\14\377,'\15\377" \
+ "-(\16\3770+\17\3773-\17\3775/\17\37771\20\37782\20\377\20292\21\377\15" \
+ ">7\27\377C<\35\377NG(\377\255\245w\377\345\335\243\377\343\333\233\377" \
+ "\343\333\227\377\343\332\225\377\343\332\223\377\343\332\222\377\343" \
+ "\332\221\377\271\260p\377QJ#\377\20292\21\377\20""71\20\3775/\17\377" \
+ "1,\17\377-(\16\377+&\15\377&!\13\377#\36\12\377\37\33\11\377\32\26\7" \
+ "\377\27\24\6\377\22\17\5\377\16\14\4\377\12\11\3\377\6\5\2\377\4\3\1" \
+ "\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\367\0\0\0\377\6\3\3\3\377" \
+ "===\377nnn\377mmm\377lll\377kkk\377\203jjj\377\22iii\377hhh\377ggg\377" \
+ "fff\377ggf\377hge\377jie\377lje\377omf\377rpf\377ure\377wtf\377zwf\377" \
+ "}zf\377}ze\377}ye\377~ze\377\272\267\234\377\204\346\343\304\377\202" \
+ "\346\343\305\377\1\346\343\304\377\202\346\343\305\377'\346\342\304\377" \
+ "\346\342\305\377\346\342\304\377\255\251\216\377soY\377snW\377okV\377" \
+ "kgT\377gdS\377b_P\377^[O\377XVL\377USK\377QOI\377MLH\377JJF\377A@<\377" \
+ "0/+\377!\37\32\377\24\23\15\377\16\14\4\377\17\15\4\377\21\16\5\377\23" \
+ "\20\5\377\25\22\6\377\27\24\6\377\31\25\7\377\34\30\10\377\37\33\11\377" \
+ "\"\35\12\377$\37\13\377&!\13\377)%\14\377,'\15\377.)\16\3770+\17\377" \
+ "3-\17\37760\20\37771\20\377\20592\21\377\6ph=\377\326\315\217\377\343" \
+ "\333\231\377\343\333\227\377\343\333\226\377\343\332\224\377\202\343" \
+ "\332\222\377\2\334\321\212\377wo\77\377\20292\21\377\20""71\20\37760" \
+ "\20\3772-\17\377/*\16\377+&\15\377'#\14\377#\36\12\377\40\33\11\377\33" \
+ "\27\10\377\27\24\6\377\23\20\5\377\17\15\5\377\12\11\3\377\6\5\2\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\365\0\0\0\377\5\15\15" \
+ "\15\377VVV\377mmm\377lll\377kkk\377\202jjj\377\202iii\377\23hhh\377g" \
+ "gg\377fff\377eee\377ddd\377eed\377gfc\377ihd\377kjd\377nld\377rod\377" \
+ "tpd\377wsd\377zve\377|yd\377}zd\377}yd\377|xd\377\331\326\271\377\214" \
+ "\346\343\305\377&\243\236\205\377rnW\377pmV\377mhU\377jfR\377eaQ\377" \
+ "`\\N\377ZXL\377VTK\377OLF\377750\377\36\35\31\377\14\13\10\377\4\3\1" \
+ "\377\5\4\1\377\5\4\2\377\6\5\2\377\10\7\3\377\12\11\3\377\13\11\3\377" \
+ "\15\13\4\377\17\15\4\377\21\16\5\377\23\20\5\377\26\23\6\377\31\25\7" \
+ "\377\33\27\10\377\36\32\11\377\"\35\12\377$\37\13\377&!\13\377)%\14\377" \
+ ",'\15\377.)\16\3771,\17\3774.\20\37760\20\37782\20\377\20492\21\377\6" \
+ "KD\40\377\274\263z\377\344\333\231\377\343\333\230\377\343\333\226\377" \
+ "\343\332\224\377\202\343\332\222\377\24\343\331\220\377\252\240c\377" \
+ "A9\27\37792\21\37782\20\37760\20\3773-\17\3770+\17\377,'\15\377($\14" \
+ "\377$\37\13\377\40\33\11\377\34\30\10\377\30\25\7\377\23\20\5\377\17" \
+ "\15\5\377\13\11\3\377\6\5\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\363\0\0\0\377\4\33\33\33\377fff\377lll\377kkk\377\202jjj\377" \
+ "\1iii\377\202hhh\377\23ggg\377fff\377eee\377ddd\377ccc\377ccb\377dcb" \
+ "\377feb\377hgc\377jhb\377mkb\377qnc\377spc\377vrc\377yuc\377{xc\377|" \
+ "xd\377{wc\377\215\210s\377\215\346\343\305\377'\231\225|\377qmV\377o" \
+ "kT\377kgS\377hdP\377b`N\377\\XJ\377DA3\377*'\33\377\22\20\7\377\11\10" \
+ "\3\377\5\4\1\377\1\1\0\377\0\0\0\377\1\1\0\377\2\2\1\377\3\3\1\377\4" \
+ "\3\1\377\5\4\1\377\6\5\2\377\10\7\3\377\12\11\3\377\14\12\4\377\16\14" \
+ "\4\377\20\16\4\377\22\17\5\377\25\22\6\377\30\25\7\377\33\27\10\377\36" \
+ "\32\11\377\"\35\12\377$\37\13\377'#\14\377*%\15\377,'\16\377/*\16\377" \
+ "2-\17\3775/\17\37771\20\377\20492\21\377\34>7\25\377\231\220_\377\344" \
+ "\333\232\377\343\333\231\377\343\333\227\377\343\332\225\377\343\332" \
+ "\223\377\343\332\222\377\343\331\220\377\307\276y\377QJ#\37792\21\377" \
+ "82\20\37760\20\3774.\20\3770+\17\377,'\16\377($\14\377$\37\13\377!\34" \
+ "\11\377\34\30\10\377\30\25\7\377\23\20\5\377\17\15\5\377\12\11\3\377" \
+ "\6\5\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\361\0\0\0" \
+ "\377\3)))\377jjj\377kkk\377\202jjj\377\3iii\377hhh\377ggg\377\202fff" \
+ "\377\4eee\377ddd\377ccc\377bbb\377\202aaa\377\21cb`\377eda\377hga\377" \
+ "jia\377mj`\377pmb\377tpb\377ura\377xtb\377zwa\377{wa\377zua\377\246\240" \
+ "\211\377\346\343\306\377\346\343\305\377\346\343\306\377\346\343\305" \
+ "\377\202\346\343\306\377\1\346\343\305\377\206\346\343\306\377\15\223" \
+ "\216v\377okT\377mhR\377jeQ\377\\YC\377A='\377%!\15\377\34\30\10\377\26" \
+ "\23\6\377\17\15\4\377\11\10\3\377\5\4\1\377\1\1\0\377\205\0\0\0\377\27" \
+ "\1\1\0\377\2\2\1\377\3\3\1\377\5\4\1\377\6\5\2\377\10\7\3\377\13\11\3" \
+ "\377\15\13\4\377\17\15\4\377\22\17\5\377\25\22\6\377\31\25\7\377\33\27" \
+ "\10\377\37\33\11\377\"\35\12\377%!\13\377'#\14\377+&\15\377-(\16\377" \
+ "1,\17\3774.\20\37760\20\37782\20\377\20492\21\377\12yrF\377\340\327\226" \
+ "\377\343\333\231\377\343\333\227\377\343\332\225\377\343\332\223\377" \
+ "\343\332\222\377\343\332\221\377\334\321\210\377lc5\377\20292\21\377" \
+ "\16""60\20\3774.\20\3771,\17\377,'\16\377)%\14\377%!\13\377!\34\11\377" \
+ "\34\30\10\377\30\25\7\377\23\20\5\377\17\15\5\377\12\11\3\377\6\5\2\377" \
+ "\3\3\1\377\377\0\0\0\377\377\0\0\0\377\360\0\0\0\377\2""333\377kkk\377" \
+ "\202jjj\377\4iii\377hhh\377ggg\377fff\377\202eee\377\4ddd\377ccc\377" \
+ "bbb\377aaa\377\202```\377\12``_\377aa^\377cb^\377fe`\377jh`\377lj_\377" \
+ "pm`\377soa\377tq_\377ws`\377\202yu`\377\2xs^\377\277\274\241\377\204" \
+ "\346\343\306\377\210\346\343\307\377\16\346\343\306\377\212\205o\377" \
+ "nhR\377YU:\377>9\35\377.)\16\377($\14\377#\36\12\377\34\30\10\377\25" \
+ "\22\6\377\17\15\5\377\11\10\3\377\5\4\1\377\1\1\0\377\210\0\0\0\377\25" \
+ "\1\1\0\377\3\3\1\377\4\3\1\377\5\4\2\377\10\7\3\377\12\11\3\377\15\13" \
+ "\4\377\17\15\4\377\22\17\5\377\26\23\6\377\31\25\7\377\34\30\10\377\37" \
+ "\33\11\377#\36\12\377&!\13\377)%\14\377,'\16\377/*\16\3773-\17\37760" \
+ "\20\37771\20\377\20492\21\377\12c\\3\377\331\317\221\377\344\333\231" \
+ "\377\343\333\230\377\343\332\225\377\343\332\223\377\343\332\222\377" \
+ "\343\332\221\377\341\330\214\377\201yE\377\20292\21\377\16""71\20\377" \
+ "5/\17\3771,\17\377-(\16\377)%\14\377%!\13\377!\34\11\377\34\30\10\377" \
+ "\30\25\7\377\23\20\5\377\16\14\4\377\11\10\3\377\5\4\2\377\3\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\356\0\0\0\377\1AAA\377\202jjj\377\6iii\377" \
+ "hhh\377ggg\377fff\377eee\377ddd\377\202ccc\377\2bbb\377aaa\377\202``" \
+ "`\377\20___\377^^^\377__^\377`_\\\377ba]\377ec^\377if^\377kh^\377ol^" \
+ "\377qn_\377tp_\377vr^\377xs_\377xr^\377wr]\377\330\324\271\377\210\346" \
+ "\343\307\377\1\346\343\310\377\202\346\343\307\377\17\346\343\310\377" \
+ "\346\343\307\377vpU\377A;\33\37760\20\3773-\17\377.)\16\377($\14\377" \
+ "#\36\12\377\33\27\10\377\25\22\6\377\17\15\5\377\10\7\3\377\4\3\1\377" \
+ "\1\1\0\377\212\0\0\0\377\24\1\1\0\377\2\2\1\377\4\3\1\377\5\4\2\377\10" \
+ "\7\3\377\12\11\3\377\15\13\4\377\20\16\4\377\23\20\5\377\27\24\6\377" \
+ "\31\25\7\377\35\31\10\377\"\35\12\377$\37\13\377'#\14\377+&\15\377.)" \
+ "\16\3772-\17\3775/\17\37771\20\377\20492\21\377\12UN(\377\323\311\214" \
+ "\377\344\333\231\377\343\333\230\377\343\333\226\377\343\332\223\377" \
+ "\343\332\222\377\343\332\221\377\343\331\216\377\232\220V\377\20292\21" \
+ "\377\16""71\20\3775/\17\3772-\17\377-(\16\377)%\14\377%!\13\377!\34\11" \
+ "\377\33\27\10\377\27\24\6\377\22\17\5\377\16\14\4\377\11\10\3\377\5\4" \
+ "\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\354\0\0\0\377\11@@@\377" \
+ "jjj\377iii\377hhh\377ggg\377fff\377eee\377ddd\377ccc\377\202bbb\377\1" \
+ "aaa\377\202```\377\21___\377^^^\377]]]\377\\\\\\\377]]\\\377`_\\\377" \
+ "a`[\377db\\\377ge\\\377kg[\377nk]\377qn^\377so\\\377vq]\377wr]\377vq" \
+ "\\\377~zc\377\203\346\343\307\377\2\346\343\310\377\346\343\307\377\207" \
+ "\346\343\310\377\17\346\342\303\377\345\341\274\377WQ/\37792\21\3776" \
+ "0\20\3773-\17\377-(\16\377'#\14\377\"\35\12\377\33\27\10\377\25\22\6" \
+ "\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1\0\377\214\0\0\0\377\24\1\1" \
+ "\0\377\2\2\1\377\4\3\1\377\5\4\2\377\10\7\3\377\13\11\3\377\16\14\4\377" \
+ "\21\16\5\377\24\21\5\377\30\25\7\377\33\27\10\377\37\33\11\377#\36\12" \
+ "\377&!\13\377*%\15\377-(\16\3771,\17\3774.\20\37760\20\37782\20\377\203" \
+ "92\21\377\32NF\"\377\312\302\206\377\344\333\231\377\343\333\230\377" \
+ "\343\333\226\377\343\332\223\377\343\332\222\377\343\332\221\377\343" \
+ "\331\216\377\250\237a\377;4\23\37792\21\37771\20\3775/\17\3771,\17\377" \
+ "-(\16\377)%\14\377$\37\13\377\40\33\11\377\33\27\10\377\27\24\6\377\21" \
+ "\16\5\377\15\13\4\377\10\7\3\377\5\4\1\377\2\2\1\377\377\0\0\0\377\377" \
+ "\0\0\0\377\351\0\0\0\377\13\1\1\1\377BBB\377iii\377hhh\377ggg\377fff" \
+ "\377eee\377ddd\377ccc\377bbb\377aaa\377\203```\377\23___\377^^^\377]" \
+ "]]\377\\\\\\\377[[[\377[[Z\377\\[Z\377^]Z\377`_Z\377caZ\377gd[\377jf" \
+ "[\377lj[\377pm\\\377so\\\377tp\\\377up[\377uo[\377\221\214v\377\206\346" \
+ "\343\310\377\2\346\343\311\377\346\343\310\377\202\346\343\311\377\2" \
+ "\346\343\305\377\346\341\276\377\202\346\341\274\377\14XQ0\37792\21\377" \
+ "60\20\3773-\17\377-(\16\377'#\14\377\"\35\12\377\33\27\10\377\24\21\5" \
+ "\377\16\14\4\377\10\7\3\377\4\3\1\377\217\0\0\0\377\23\1\1\0\377\2\2" \
+ "\1\377\4\3\1\377\6\5\2\377\11\10\3\377\14\12\4\377\17\15\4\377\22\17" \
+ "\5\377\27\24\6\377\31\25\7\377\36\32\11\377\"\35\12\377%!\13\377)%\14" \
+ "\377,'\16\3770+\17\3773-\17\37760\20\37782\20\377\20392\21\377\32JC\36" \
+ "\377\312\302\207\377\344\333\231\377\343\333\230\377\343\333\226\377" \
+ "\343\332\223\377\343\332\222\377\343\332\221\377\343\331\216\377\254" \
+ "\242d\377>7\25\37792\21\37771\20\3775/\17\3771,\17\377,'\16\377($\14" \
+ "\377$\37\13\377\37\33\11\377\32\26\7\377\26\23\6\377\21\16\5\377\14\12" \
+ "\4\377\7\6\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\350" \
+ "\0\0\0\377\11>>>\377hhh\377ggg\377fff\377eee\377ddd\377ccc\377bbb\377" \
+ "aaa\377\203```\377\30___\377^^^\377]]]\377\\\\\\\377[[[\377ZZZ\377YY" \
+ "Y\377YYX\377ZYX\377\\\\X\377`^Y\377b`X\377fcY\377ifY\377ljY\377olZ\377" \
+ "rnZ\377soZ\377toZ\377soY\377\244\241\211\377\346\343\310\377\346\343" \
+ "\311\377\346\343\310\377\204\346\343\311\377\5\347\343\311\377\347\343" \
+ "\307\377\346\342\301\377\346\341\275\377\346\342\275\377\202\346\342" \
+ "\276\377\14XQ0\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377\"\35" \
+ "\12\377\33\27\10\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377\212" \
+ "\0\0\0\377\202\1\1\0\377\202\2\2\1\377\204\3\3\1\377\21\4\3\1\377\5\4" \
+ "\2\377\7\6\2\377\12\11\3\377\16\14\4\377\21\16\5\377\25\22\6\377\31\25" \
+ "\7\377\34\30\10\377!\34\11\377$\37\13\377'#\14\377,'\15\377/*\16\377" \
+ "3-\17\37760\20\37782\20\377\20392\21\377\32KD\40\377\312\302\207\377" \
+ "\344\333\231\377\343\333\230\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\220\377\343\331\216\377\261\250g\377>7\25\37792" \
+ "\21\37771\20\3775/\17\3771,\17\377,'\16\377'#\14\377#\36\12\377\37\33" \
+ "\11\377\31\25\7\377\25\22\6\377\20\16\4\377\13\11\3\377\6\5\2\377\3\3" \
+ "\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\346\0\0\0\377\10""555\377" \
+ "ggg\377fff\377eee\377ddd\377ccc\377bbb\377aaa\377\202```\377\1___\377" \
+ "\202^^^\377\6]]]\377\\\\\\\377[[[\377ZZZ\377YYY\377XXX\377\202WWW\377" \
+ "\11YXV\377[ZV\377_]W\377a_W\377ebX\377heX\377jgX\377nkX\377qmX\377\203" \
+ "soY\377\1\271\265\233\377\203\346\343\311\377\204\347\343\312\377\3\346" \
+ "\343\305\377\346\342\277\377\346\342\276\377\204\346\342\277\377\14X" \
+ "Q0\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377\"\35\12\377\33\27" \
+ "\10\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377\206\0\0\0\377\202" \
+ "\1\1\0\377\4\2\2\1\377\3\3\1\377\4\3\1\377\5\4\1\377\203\5\4\2\377\203" \
+ "\6\4\2\377\202\7\5\2\377\20\10\6\2\377\12\10\3\377\15\11\3\377\17\13" \
+ "\4\377\23\17\5\377\26\21\6\377\31\25\7\377\35\31\10\377!\34\11\377%\40" \
+ "\12\377*$\14\377-&\15\3772+\16\3775-\17\37770\17\377:2\20\377\202;3\21" \
+ "\377\32:2\21\377LD\40\377\323\312\215\377\344\333\231\377\343\333\230" \
+ "\377\343\332\225\377\343\332\223\377\343\332\222\377\343\331\220\377" \
+ "\343\331\216\377\254\242b\377;4\23\37792\21\37771\20\3774.\20\3770+\17" \
+ "\377,'\15\377'#\14\377#\36\12\377\36\32\11\377\31\25\7\377\24\21\5\377" \
+ "\17\15\5\377\12\11\3\377\5\4\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0" \
+ "\377\345\0\0\0\377\7+++\377fff\377eee\377ddd\377ccc\377bbb\377aaa\377" \
+ "\202```\377\2___\377^^^\377\202]]]\377\6\\\\\\\377[[[\377ZZZ\377YYY\377" \
+ "XXX\377WWW\377\202VVV\377\13VVU\377WVT\377ZXU\377][V\377`^U\377daV\377" \
+ "gdV\377jgV\377miW\377plV\377rnW\377\202rmW\377\2\305\301\250\377\346" \
+ "\343\311\377\203\347\343\312\377\3\347\343\313\377\346\343\310\377\346" \
+ "\342\302\377\202\346\342\277\377\202\346\342\300\377\203\346\342\301" \
+ "\377\14XQ0\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377\"\35\12\377" \
+ "\33\27\10\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377\204\0\0\0" \
+ "\377\12\1\1\0\377\2\2\1\377\3\3\1\377\5\4\1\377\5\4\2\377\10\6\2\377" \
+ "\11\7\3\377\13\11\3\377\14\11\3\377\15\11\3\377\202\16\12\3\377\202\15" \
+ "\12\3\377\2\14\12\3\377\15\12\4\377\202\14\11\4\377\17\16\12\4\377\17" \
+ "\14\4\377\21\15\5\377\23\20\6\377\26\22\6\377\32\26\7\377\36\32\10\377" \
+ "\"\35\12\377&\40\13\377+%\14\377.(\16\3772+\17\3775.\20\37781\20\377" \
+ ";3\21\377\203;4\21\377\12XQ*\377\333\321\222\377\344\333\231\377\343" \
+ "\333\230\377\343\332\225\377\343\332\223\377\343\332\222\377\343\331" \
+ "\220\377\343\331\215\377\243\230\\\377\20292\21\377\15""60\20\3774.\20" \
+ "\377/*\16\377+&\15\377&!\13\377\"\35\12\377\34\30\10\377\30\25\7\377" \
+ "\22\17\5\377\16\14\4\377\11\10\3\377\5\4\1\377\2\2\1\377\377\0\0\0\377" \
+ "\377\0\0\0\377\343\0\0\0\377\1\36\36\36\377\202ddd\377\3ccc\377bbb\377" \
+ "aaa\377\202```\377\4___\377^^^\377]]]\377\\\\\\\377\202[[[\377\4ZZZ\377" \
+ "YYY\377XXX\377WWW\377\202VVV\377\20UUU\377TTT\377UUT\377VUR\377XWT\377" \
+ "[YT\377`]T\377c`U\377fcU\377jfU\377lhU\377okV\377pmU\377qmV\377plU\377" \
+ "\325\320\270\377\202\347\343\312\377\202\347\343\313\377\1\346\343\306" \
+ "\377\202\346\342\300\377\203\346\342\301\377\204\346\342\302\377\14X" \
+ "Q1\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377\"\35\12\377\33\27" \
+ "\10\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377\203\0\0\0\377\13" \
+ "\2\2\1\377\3\3\1\377\5\3\1\377\10\6\2\377\13\11\3\377\16\12\3\377\17" \
+ "\13\4\377\20\15\4\377\21\16\5\377\23\17\5\377\24\17\6\377\202\24\20\6" \
+ "\377\1\25\21\6\377\202\24\20\6\377\23\23\17\5\377\22\17\5\377\21\16\5" \
+ "\377\21\15\4\377\21\16\5\377\23\17\5\377\24\17\5\377\27\22\6\377\30\23" \
+ "\6\377\34\26\7\377\40\32\10\377$\35\11\377(!\13\377+%\14\3770)\16\377" \
+ "4,\17\3777/\17\377;2\20\377=4\21\377\202>5\21\377\6=5\21\377ia6\377\340" \
+ "\327\227\377\344\333\231\377\343\333\227\377\343\332\225\377\202\343" \
+ "\332\222\377\3\343\331\217\377\343\331\215\377\223\212Q\377\20292\21" \
+ "\377\15""60\20\3773-\17\377.)\16\377*%\15\377&!\13\377!\34\11\377\33" \
+ "\27\10\377\27\24\6\377\21\16\5\377\15\13\4\377\10\7\3\377\4\3\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\341\0\0\0\377\5\17\17\17\377___" \
+ "\377ccc\377bbb\377aaa\377\202```\377\5___\377^^^\377]]]\377\\\\\\\377" \
+ "[[[\377\202ZZZ\377\3YYY\377XXX\377WWW\377\202VVV\377\16UUU\377TTT\377" \
+ "SSS\377RRR\377SSR\377UUQ\377WVR\377ZXR\377_\\R\377a^S\377eaS\377idS\377" \
+ "kgS\377miT\377\202okT\377\2plU\377\344\341\310\377\203\347\343\313\377" \
+ "\1\346\343\304\377\202\346\342\301\377\203\346\342\302\377\202\346\342" \
+ "\303\377\1\346\343\303\377\202\346\343\304\377\14ZT3\37792\21\37760\20" \
+ "\3773-\17\377-(\16\377'#\14\377\"\35\12\377\33\27\10\377\24\21\5\377" \
+ "\16\14\4\377\10\7\3\377\4\3\1\377\202\1\1\0\377\12\4\3\1\377\6\4\1\377" \
+ "\12\7\2\377\15\11\3\377\16\13\4\377\21\15\5\377\24\17\6\377\25\21\6\377" \
+ "\30\23\6\377\30\24\6\377\202\33\26\7\377\204\35\27\7\377\5\34\26\7\377" \
+ "\33\26\6\377\32\24\6\377\31\23\5\377\30\22\6\377\202\26\21\5\377\15\27" \
+ "\22\6\377\27\21\5\377\31\23\5\377\33\25\6\377\36\27\7\377\"\33\10\377" \
+ "%\36\11\377*\"\13\377-%\14\3773*\16\3775,\16\37790\20\377<3\21\377\204" \
+ "\77""5\21\377\30\200xI\377\344\333\233\377\343\333\231\377\343\333\227" \
+ "\377\343\332\224\377\343\332\222\377\343\332\221\377\343\331\217\377" \
+ "\343\331\214\377xp=\377;3\21\37792\20\37760\20\3772-\17\377-(\16\377" \
+ ")%\14\377$\37\13\377\40\33\11\377\32\26\7\377\25\22\6\377\20\16\4\377" \
+ "\13\11\3\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\340\0\0" \
+ "\0\377\4\4\4\4\377RRR\377bbb\377aaa\377\202```\377\7___\377^^^\377]]" \
+ "]\377\\\\\\\377[[[\377ZZZ\377YYY\377\202XXX\377\1WWW\377\202VVV\377\27" \
+ "UUU\377TTT\377SSS\377RRR\377QQQ\377PPP\377RQP\377SSO\377VUQ\377YWP\377" \
+ "]ZP\377`]Q\377d`Q\377hdR\377jfQ\377mhR\377oiS\377nhR\377yt]\377\347\343" \
+ "\313\377\347\343\314\377\346\343\312\377\346\342\303\377\203\346\342" \
+ "\302\377\2\346\342\303\377\346\343\303\377\202\346\343\304\377\204\346" \
+ "\343\305\377\31b\\<\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377" \
+ "\"\35\12\377\33\27\10\377\25\22\6\377\16\14\4\377\10\7\3\377\5\3\1\377" \
+ "\5\4\1\377\6\3\1\377\11\7\2\377\15\12\4\377\17\14\4\377\22\17\5\377\26" \
+ "\21\6\377\30\24\6\377\33\26\7\377\36\30\7\377\40\32\10\377\"\34\10\377" \
+ "#\34\11\377\204$\35\11\377\10$\35\12\377#\34\11\377\"\33\11\377!\32\11" \
+ "\377!\31\10\377\37\27\7\377\34\25\7\377\32\23\6\377\202\31\22\6\377\14" \
+ "\32\23\6\377\33\24\6\377\35\26\7\377\40\30\10\377\"\33\11\377&\36\12" \
+ "\377+\"\14\377/%\15\3773*\17\3777.\17\377;1\21\377\77""4\21\377\202@" \
+ "5\21\377\202A6\21\377\30\237\226a\377\344\333\232\377\343\333\231\377" \
+ "\343\333\226\377\343\332\224\377\343\332\222\377\343\331\220\377\343" \
+ "\331\216\377\340\326\207\377f].\377;4\21\377;2\20\3776/\17\3772,\17\377" \
+ ",'\16\377'#\14\377#\36\12\377\36\32\11\377\31\25\7\377\23\20\5\377\17" \
+ "\15\5\377\12\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377" \
+ "\337\0\0\0\377\2===\377aaa\377\202```\377\10___\377^^^\377]]]\377\\\\" \
+ "\\\377[[[\377ZZZ\377YYY\377XXX\377\202WWW\377\202VVV\377\27UUU\377TT" \
+ "T\377SSS\377RRR\377QQQ\377PPP\377OOO\377NNN\377PON\377RQN\377UTO\377" \
+ "XVN\377\\YN\377`]Q\377c`P\377gcP\377ieP\377kfQ\377mhQ\377lgP\377\203" \
+ "~h\377\347\343\314\377\346\343\310\377\202\346\342\302\377\2\346\342" \
+ "\303\377\346\343\303\377\202\346\343\304\377\206\346\343\305\377\34\346" \
+ "\343\306\377d^>\37792\21\37760\20\3773-\17\377-(\16\377($\14\377#\36" \
+ "\12\377\33\27\10\377\26\22\6\377\20\15\4\377\14\11\3\377\11\7\2\377\11" \
+ "\6\3\377\14\11\3\377\20\14\4\377\22\17\5\377\27\22\6\377\32\25\6\377" \
+ "\36\30\7\377!\33\10\377\"\33\11\377%\36\11\377'\40\12\377*\"\13\377+" \
+ "#\14\377,#\14\377-$\14\377\202-%\14\377\11-$\14\377,#\14\377+!\13\377" \
+ "*!\13\377(\37\12\377&\35\11\377$\34\11\377!\31\10\377\40\30\7\377\203" \
+ "\36\26\6\377\14\37\27\7\377\40\30\7\377!\31\10\377%\34\11\377*!\12\377" \
+ ",#\14\3771'\15\3775*\16\3779.\20\377<2\21\377@5\21\377B7\22\377\202A" \
+ "6\22\377\31D;\26\377\301\271\200\377\344\333\232\377\343\333\230\377" \
+ "\343\333\226\377\343\332\223\377\343\332\222\377\343\331\220\377\343" \
+ "\331\215\377\326\313\177\377OF\36\377=5\21\377:2\21\37770\17\3773,\17" \
+ "\377-'\15\377'\"\13\377\"\35\12\377\34\30\10\377\27\24\6\377\22\17\5" \
+ "\377\15\13\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0" \
+ "\0\377\335\0\0\0\377\1$$$\377\202```\377\11___\377^^^\377]]]\377\\\\" \
+ "\\\377[[[\377ZZZ\377YYY\377XXX\377WWW\377\203VVV\377\32UUU\377TTT\377" \
+ "SSS\377RRR\377QQQ\377PPP\377OOO\377NNN\377MMM\377MML\377NML\377POL\377" \
+ "SRL\377VTL\377[XM\377_[O\377a_N\377ebO\377idO\377jfP\377lfO\377kfO\377" \
+ "\214\207p\377\346\343\310\377\346\342\302\377\346\343\303\377\202\346" \
+ "\343\304\377\205\346\343\305\377\202\346\343\306\377\203\346\343\307" \
+ "\377\30lfG\37792\21\37771\20\3773-\17\377.)\16\377)$\14\377#\37\12\377" \
+ "\35\31\10\377\27\24\6\377\22\16\5\377\17\14\4\377\16\13\4\377\17\14\4" \
+ "\377\21\16\5\377\26\21\6\377\31\24\6\377\36\27\7\377!\32\10\377#\34\11" \
+ "\377'\40\13\377+\"\14\377-$\14\377/&\15\3771(\15\377\2024*\16\377\203" \
+ "5*\16\377\30""5)\16\3775*\16\3774*\15\3772(\15\377/%\14\377.$\13\377" \
+ "+!\13\377)\37\11\377&\34\11\377\"\31\7\377\40\27\7\377\40\30\7\377\40" \
+ "\27\6\377\40\30\7\377!\30\7\377#\32\10\377&\35\11\377*\40\12\377.%\14" \
+ "\3774*\15\3777,\17\377<0\20\377@3\21\377B6\22\377\203C7\22\377\5WL#\377" \
+ "\331\320\222\377\344\333\231\377\343\333\230\377\343\332\225\377\202" \
+ "\343\332\222\377\21\343\331\217\377\343\331\214\377\274\263l\377A9\24" \
+ "\377>5\21\377;2\20\3776/\17\3772+\17\377,&\15\377(\"\13\377\"\36\11\377" \
+ "\32\26\7\377\25\22\6\377\20\16\4\377\13\11\3\377\6\5\2\377\3\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\334\0\0\0\377\13\13\13\13\377ZZZ\377___" \
+ "\377^^^\377]]]\377\\\\\\\377[[[\377ZZZ\377YYY\377XXX\377WWW\377\202V" \
+ "VV\377\202UUU\377\10TTT\377SSS\377RRR\377QQQ\377PPP\377OOO\377NNN\377" \
+ "MMM\377\202LLL\377\12LLK\377LLJ\377ONJ\377RQK\377VTL\377YVK\377^ZM\377" \
+ "`]L\377daM\377gcM\377\202jeN\377\3jeM\377\204\177b\377\346\343\303\377" \
+ "\202\346\343\304\377\203\346\343\305\377\202\346\343\306\377\204\346" \
+ "\343\307\377\203\346\343\310\377\12rmO\37792\21\37771\20\3774-\20\377" \
+ "0*\16\377+%\14\377$\40\12\377\37\32\11\377\31\26\7\377\26\21\6\377\202" \
+ "\23\17\5\377\16\24\17\5\377\30\22\5\377\34\26\6\377!\32\10\377$\34\11" \
+ "\377(\40\13\377,#\14\377/%\15\3772(\15\3775*\16\3777,\17\3779.\17\377" \
+ ":/\20\377;0\20\377\204=1\20\377\30<0\20\377;.\20\3779-\17\3777+\17\377" \
+ "4)\16\3773'\15\3771%\14\377-\"\13\377*\37\12\377'\34\11\377$\31\10\377" \
+ "#\30\10\377\"\30\10\377#\30\10\377#\31\10\377&\34\11\377)\36\12\377-" \
+ "\"\13\3772&\15\3774)\15\377:.\17\377>3\21\377@5\21\377C7\22\377\202D" \
+ "9\22\377\31D7\22\377yn@\377\344\333\233\377\344\333\231\377\343\333\227" \
+ "\377\343\332\224\377\343\332\222\377\343\332\221\377\343\331\216\377" \
+ "\343\331\212\377\233\220R\377@6\21\377>5\21\377<3\21\3776.\17\3771+\17" \
+ "\377,&\15\377&!\13\377!\34\11\377\31\25\7\377\23\20\5\377\16\14\4\377" \
+ "\11\10\3\377\5\4\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\333\0\0" \
+ "\0\377\11FFF\377^^^\377]]]\377\\\\\\\377[[[\377ZZZ\377YYY\377XXX\377" \
+ "WWW\377\202VVV\377\2UUU\377TTT\377\202SSS\377\6RRR\377QQQ\377PPP\377" \
+ "OOO\377NNN\377MMM\377\202LLL\377\20KKK\377JJJ\377JJI\377KKI\377MLH\377" \
+ "QOI\377USJ\377XUJ\377\\XK\377_\\J\377c^K\377gcM\377ieM\377idL\377JD&" \
+ "\377\205\177`\377\204\346\343\305\377\202\346\343\306\377\202\346\343" \
+ "\307\377\202\346\343\310\377\205\346\343\311\377\32zuX\377:2\21\377:" \
+ "1\20\3776/\17\3772+\17\377-&\15\377'\40\13\377\"\34\11\377\36\30\7\377" \
+ "\33\26\6\377\31\23\5\377\30\22\5\377\32\24\6\377\37\27\7\377\"\33\11" \
+ "\377(\37\12\377+!\13\377/%\14\3774)\15\3776,\17\3778.\17\377<0\20\377" \
+ ">2\21\377\77""4\20\377A5\21\377B6\21\377\203C6\21\377'C7\21\377C6\21" \
+ "\377A4\21\377@2\20\377\77""1\20\377<.\20\3779,\17\3777*\16\3774(\15\377" \
+ "1%\14\377-\"\12\377*\36\11\377(\34\10\377&\32\10\377$\30\10\377%\31\10" \
+ "\377'\33\10\377)\35\11\377+\40\12\3770$\14\3774(\15\3779,\17\377</\20" \
+ "\377@3\21\377D7\22\377F9\23\377F:\23\377F:\22\377E8\22\377\256\243m\377" \
+ "\344\333\232\377\343\333\231\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\220\377\343\331\215\377\343\331\211\377ka0\377\202" \
+ "@5\21\377\14;2\21\3776-\16\3771*\16\377+%\14\377%\40\13\377\35\31\10" \
+ "\377\27\24\6\377\21\16\5\377\14\12\4\377\7\6\2\377\4\3\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\331\0\0\0\377\10(((\377]]]\377\\\\\\\377" \
+ "[[[\377ZZZ\377YYY\377XXX\377WWW\377\202VVV\377\3UUU\377TTT\377SSS\377" \
+ "\202RRR\377\5QQQ\377PPP\377OOO\377NNN\377MMM\377\202LLL\377\22KKK\377" \
+ "JJJ\377III\377HHH\377HHG\377IIG\377LKH\377ONH\377SQH\377VSG\377[WI\377" \
+ "^[I\377b]I\377e`K\377gcJ\377JD&\37792\21\377\215\210h\377\202\346\343" \
+ "\305\377\1\346\343\306\377\203\346\343\307\377\1\346\343\310\377\203" \
+ "\346\343\311\377\204\346\343\312\377\30\346\343\313\377\201|]\377;4\21" \
+ "\377:2\21\37770\20\3773+\17\377/'\15\377*#\13\377$\35\11\377!\32\10\377" \
+ "\40\31\10\377\37\27\7\377\40\30\7\377!\31\10\377%\34\11\377*!\12\377" \
+ ".$\14\3772(\15\3775*\16\377:.\17\377=1\20\377\77""3\21\377C6\21\377D" \
+ "7\22\377\202F9\22\377\202H:\23\377\203I;\23\377\31H:\22\377G9\22\377" \
+ "F8\22\377E7\21\377B5\20\377\77""2\20\377>1\20\377:.\17\3776*\15\3773" \
+ "'\14\377/#\13\377*\37\11\377)\35\10\377'\33\10\377&\33\10\377'\33\10" \
+ "\377)\35\10\377)\35\11\377-\"\12\3772'\14\3776*\15\377;.\17\377\77""2" \
+ "\17\377B5\21\377F8\22\377\202H;\23\377\31G9\23\377RE\35\377\326\314\217" \
+ "\377\344\333\232\377\343\333\230\377\343\332\225\377\343\332\222\377" \
+ "\343\332\221\377\343\331\217\377\343\331\214\377\324\310|\377NC\32\377" \
+ "A6\22\377@5\22\377;1\21\3775,\16\3771)\15\377*$\14\377\"\35\12\377\32" \
+ "\26\7\377\24\21\5\377\17\15\4\377\12\11\3\377\5\4\2\377\2\2\1\377\377" \
+ "\0\0\0\377\377\0\0\0\377\330\0\0\0\377\7\12\12\12\377WWW\377[[[\377Z" \
+ "ZZ\377YYY\377XXX\377WWW\377\202VVV\377\5UUU\377TTT\377SSS\377RRR\377" \
+ "QQQ\377\202PPP\377\3OOO\377NNN\377MMM\377\202LLL\377\5KKK\377JJJ\377" \
+ "III\377HHH\377GGG\377\202FFF\377\12HHE\377KJE\377MLF\377QOF\377VSF\377" \
+ "YVG\377]ZG\377a]I\377b^H\377GA#\377\20292\21\377\2\225\220q\377\346\343" \
+ "\306\377\202\346\343\307\377\202\346\343\310\377\202\346\343\311\377" \
+ "\203\346\343\312\377\202\346\343\313\377\203\346\343\314\377\27\216\212" \
+ "k\377=5\21\377=4\21\37790\20\3776-\16\3771(\15\377+#\13\377(!\13\377" \
+ "&\36\12\377$\34\11\377$\33\11\377%\34\11\377'\35\11\377*\40\12\377/%" \
+ "\14\3774*\15\3778,\17\377=0\20\377\77""3\20\377C7\21\377F8\22\377H:\23" \
+ "\377I;\23\377\202H:\23\377\202I;\23\377\203J;\23\377\203K<\24\377\27" \
+ "J:\23\377I:\23\377F7\22\377D5\21\377@2\20\377>/\20\3779+\16\3775'\15" \
+ "\3771$\14\377-\40\12\377)\35\11\377*\34\11\377)\34\10\377*\34\11\377" \
+ ")\35\11\377,\40\12\3770#\14\3774'\14\3779,\16\377>0\17\377@3\20\377E" \
+ "7\21\377H:\22\377\203I;\23\377\30\200sD\377\344\333\233\377\344\333\231" \
+ "\377\343\333\227\377\343\332\224\377\343\332\222\377\343\331\220\377" \
+ "\343\331\216\377\343\331\212\377\252\235\\\377C7\22\377A6\22\377\77""4" \
+ "\21\377:0\20\3774+\16\3770'\15\377*#\13\377\35\31\10\377\30\25\7\377" \
+ "\22\17\5\377\15\13\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\327\0\0\0\377\5;;;\377ZZZ\377YYY\377XXX\377WWW\377\202" \
+ "VVV\377\6UUU\377TTT\377SSS\377RRR\377QQQ\377PPP\377\202OOO\377\2NNN\377" \
+ "MMM\377\202LLL\377\7KKK\377JJJ\377III\377HHH\377GGG\377FFF\377EEE\377" \
+ "\202DDD\377\12FFC\377IHD\377LKD\377PND\377TQF\377XUF\377\\YF\377_[G\377" \
+ "E\77#\37771\20\377\20292\21\377\2\237\232|\377\346\343\307\377\202\346" \
+ "\343\310\377\202\346\343\311\377\202\346\343\312\377\202\346\343\313" \
+ "\377\203\346\343\314\377\203\346\343\315\377\12\231\223w\377\77""5\21" \
+ "\377>5\21\377;1\20\3777.\17\3773*\16\377/&\15\377,#\14\377+\"\13\377" \
+ "+!\12\377\202*!\12\377\16,\"\13\3771%\15\3775*\16\377:.\17\377>1\20\377" \
+ "B5\21\377F8\22\377I;\23\377H:\23\377I;\23\377J;\23\377WJ\"\377\200uR" \
+ "\377\257\247\207\377\202\307\301\243\377\4\310\302\241\377\274\264\222" \
+ "\377\237\226s\377th@\377\203N=\24\377\12L;\23\377I9\22\377F6\21\377C" \
+ "3\20\377\77/\20\377;,\16\3776(\15\3772$\14\377.\40\12\377+\36\11\377" \
+ "\203)\34\10\377#,\37\11\377/\"\12\3773&\14\3777*\15\377<.\17\377@2\20" \
+ "\377D6\21\377G9\22\377I:\23\377J;\23\377I;\23\377H:\23\377\274\262x\377" \
+ "\344\333\232\377\343\333\230\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377od1\377D" \
+ "7\22\377C7\22\377\77""4\21\377:/\20\3774*\17\377-%\14\377$\37\12\377" \
+ "\33\27\10\377\25\22\6\377\20\16\4\377\13\11\3\377\5\4\2\377\2\2\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\326\0\0\0\377\4\25\25\25\377YYY\377XXX\377" \
+ "WWW\377\202VVV\377\10UUU\377TTT\377SSS\377RRR\377QQQ\377PPP\377OOO\377" \
+ "NNN\377\202MMM\377\202LLL\377\11KKK\377JJJ\377III\377HHH\377GGG\377F" \
+ "FF\377EEE\377DDD\377CCC\377\202BBB\377\12DDA\377GFA\377KJC\377NLB\377" \
+ "SPC\377WSD\377[WE\377FA(\3775/\17\37782\20\377\20292\21\377\2\247\241" \
+ "\204\377\346\343\310\377\202\346\343\311\377\202\346\343\312\377\1\346" \
+ "\343\313\377\203\346\343\314\377\203\346\343\315\377\1\346\343\316\377" \
+ "\202\347\343\316\377\32\244\237\203\377A6\21\377@5\22\377>3\21\377:/" \
+ "\20\3775*\16\3773)\15\3771'\15\3770%\14\377/%\13\3770%\14\3771%\14\377" \
+ "2&\15\3776*\16\377;.\17\377@2\20\377C6\21\377H:\22\377I:\23\377J;\23" \
+ "\377K<\24\377\\N(\377\250\240\201\377\344\341\307\377\346\343\311\377" \
+ "\346\343\310\377\202\346\343\307\377\1\346\343\306\377\202\346\343\305" \
+ "\377\17\346\343\304\377\326\321\261\377\211|X\377N=\24\377O>\24\377N" \
+ "=\23\377L;\22\377H8\21\377E5\21\377A1\17\377=-\16\3778)\15\3773$\13\377" \
+ "0\40\11\377+\35\10\377\202*\34\10\377\11+\35\10\377-\37\11\3772$\13\377" \
+ "6(\15\377;+\16\377\77/\20\377C4\20\377H8\22\377J:\23\377\203K<\24\377" \
+ "\30_R&\377\340\330\230\377\344\333\231\377\343\333\227\377\343\332\224" \
+ "\377\343\332\222\377\343\332\221\377\343\331\216\377\343\331\212\377" \
+ "\316\301v\377K\77\26\377E8\22\377A6\21\377>3\21\3778-\17\3773*\16\377" \
+ "+#\13\377\36\32\11\377\31\25\7\377\22\17\5\377\16\14\4\377\10\7\3\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\325\0\0\0\377\2HHH\377" \
+ "WWW\377\202VVV\377\11UUU\377TTT\377SSS\377RRR\377QQQ\377PPP\377OOO\377" \
+ "NNN\377MMM\377\203LLL\377\11KKK\377JJJ\377III\377HHH\377GGG\377FFF\377" \
+ "EEE\377DDD\377CCC\377\202BBB\377\202AAA\377\12BB\77\377ED@\377IHA\377" \
+ "MJ@\377ROB\377VRC\377FC-\3770+\17\3775/\17\37782\20\377\20292\21\377" \
+ "\2\251\245\210\377\346\343\311\377\202\346\343\312\377\1\346\343\313" \
+ "\377\202\346\343\314\377\203\346\343\315\377\1\346\343\316\377\202\347" \
+ "\343\316\377\203\347\344\317\377\1\260\253\220\377\202A6\22\377\6\77" \
+ "4\21\377<0\20\3778.\17\3776+\16\3774)\15\3774)\16\377\2024(\15\377\6" \
+ "5)\15\3778+\16\377;.\17\377\77""2\20\377E6\21\377H:\23\377\202K<\24\377" \
+ "\4L=\24\377\203xU\377\341\337\306\377\346\343\313\377\202\346\343\312" \
+ "\377\202\346\343\311\377\3\346\343\310\377\346\343\307\377\346\343\306" \
+ "\377\203\346\343\305\377\31\346\343\304\377\311\301\237\377cR(\377Q\77" \
+ "\24\377Q>\24\377N<\23\377K9\22\377G5\21\377C1\20\377>,\16\3779(\15\377" \
+ "3#\13\3770\40\12\377-\36\11\377,\35\11\377+\34\10\377-\36\10\3771\"\12" \
+ "\3775&\14\377;+\15\377=.\17\377B2\17\377E6\21\377H9\22\377L;\23\377\202" \
+ "N=\24\377\30L=\24\377\246\232d\377\344\333\233\377\343\333\231\377\343" \
+ "\333\226\377\343\332\223\377\343\332\222\377\343\331\217\377\343\331" \
+ "\214\377\343\331\211\377\231\216P\377F:\23\377E8\22\377@5\21\377<1\20" \
+ "\3777,\17\3771'\15\377#\37\12\377\33\27\10\377\26\23\6\377\20\16\4\377" \
+ "\13\11\3\377\6\5\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\324\0\0" \
+ "\0\377\1\33\33\33\377\202VVV\377\11UUU\377TTT\377SSS\377RRR\377QQQ\377" \
+ "PPP\377OOO\377NNN\377MMM\377\202LLL\377\202KKK\377\10JJJ\377III\377H" \
+ "HH\377GGG\377FFF\377EEE\377DDD\377CCC\377\202BBB\377\2AAA\377@@@\377" \
+ "\202\77\77\77\377\12AA>\377DB>\377GF\77\377LI\77\377PMA\377GC2\377+&" \
+ "\16\3770+\17\3775/\17\37782\20\377\20292\21\377\3\256\252\215\377\346" \
+ "\343\312\377\346\343\313\377\202\346\343\314\377\202\346\343\315\377" \
+ "\1\346\343\316\377\202\347\343\316\377\205\347\344\317\377\2\347\344" \
+ "\320\377\274\270\237\377\202C7\22\377\5@5\21\377>2\21\377<0\20\377;." \
+ "\20\377:.\17\377\2029,\17\377\7""9,\16\377:.\17\377=/\17\377@2\20\377" \
+ "E6\21\377J:\23\377L<\23\377\202N=\24\377\1\233\220q\377\202\346\343\315" \
+ "\377\202\346\343\314\377\2\346\343\313\377\346\343\312\377\202\346\343" \
+ "\311\377\1\346\343\310\377\202\346\343\307\377\203\346\343\305\377\3" \
+ "\346\343\304\377\330\321\262\377pa7\377\202R\77\24\377\24O=\23\377L9" \
+ "\22\377G5\20\377A0\20\377=+\15\3777'\14\3773\"\12\3770\37\11\377.\36" \
+ "\11\377-\35\11\377.\36\11\3770\40\12\3775#\13\3779(\15\377=-\17\377A" \
+ "1\17\377E4\21\377H7\21\377L;\22\377N=\23\377\202N=\24\377\30ZJ\37\377" \
+ "\335\326\225\377\344\333\232\377\343\333\230\377\343\332\225\377\343" \
+ "\332\222\377\343\332\221\377\343\331\216\377\343\331\212\377\335\321" \
+ "\202\377YK\37\377H;\23\377E8\22\377\77""4\20\377;/\20\3775*\16\377+$" \
+ "\13\377\37\33\11\377\31\25\7\377\23\20\5\377\16\14\4\377\10\7\3\377\4" \
+ "\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\323\0\0\0\377\12DDD\377" \
+ "UUU\377TTT\377SSS\377RRR\377QQQ\377PPP\377OOO\377NNN\377MMM\377\202L" \
+ "LL\377\1KKK\377\202JJJ\377\7III\377HHH\377GGG\377FFF\377EEE\377DDD\377" \
+ "CCC\377\202BBB\377\4AAA\377@@@\377\77\77\77\377>>>\377\202===\377\12" \
+ "\77\77<\377B@<\377FD>\377KH>\377HE8\377'\"\17\377+&\15\3770+\17\3775" \
+ "/\17\37782\20\377\20292\21\377\3\264\257\224\377\346\343\313\377\346" \
+ "\343\314\377\202\346\343\315\377\2\346\343\316\377\347\343\316\377\204" \
+ "\347\344\317\377\204\347\344\320\377\7\347\344\321\377\310\303\255\377" \
+ "D9\22\377D7\22\377C7\22\377A4\21\377\77""2\20\377\202\77""1\20\377\2" \
+ "=0\20\377=0\17\377\202\77""1\20\377\4B3\20\377E6\21\377I9\22\377M<\23" \
+ "\377\202N=\24\377\5\216\202a\377\347\344\317\377\347\343\316\377\346" \
+ "\343\316\377\346\343\315\377\202\346\343\314\377\1\346\343\313\377\202" \
+ "\346\343\312\377\2\346\343\311\377\346\343\310\377\202\346\343\307\377" \
+ "\1\346\343\306\377\202\346\343\305\377\30\346\343\304\377\332\324\264" \
+ "\377eS(\377S@\24\377S>\24\377P<\23\377K8\21\377G4\20\377A/\16\377=*\15" \
+ "\3778%\13\3773!\12\3770\36\11\377.\35\10\377.\36\10\3770\37\11\3773\"" \
+ "\12\3778&\14\377<+\15\377@.\16\377E3\20\377H5\21\377M:\23\377O=\24\377" \
+ "\202P>\24\377\30O>\24\377\230\213W\377\344\333\233\377\343\333\231\377" \
+ "\343\333\226\377\343\332\223\377\343\332\222\377\343\331\217\377\343" \
+ "\331\214\377\343\331\210\377\253\237\\\377I;\23\377H:\23\377D7\22\377" \
+ "\77""3\20\3779.\17\3774)\15\377\"\35\12\377\33\27\10\377\26\23\6\377" \
+ "\20\16\4\377\13\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0" \
+ "\377\322\0\0\0\377\11\5\5\5\377222\377HHH\377RRR\377QQQ\377PPP\377OO" \
+ "O\377NNN\377MMM\377\202LLL\377\3KKK\377JJJ\377III\377\202HHH\377\5GG" \
+ "G\377FFF\377EEE\377DDD\377CCC\377\202BBB\377\6AAA\377@@@\377\77\77\77" \
+ "\377>>>\377===\377<<<\377\202;;;\377\12>=;\377A@;\377DB<\377GE:\377'" \
+ "#\23\377$\37\13\377+&\15\3770+\17\3775/\17\37782\20\377\20292\21\377" \
+ "\5\264\257\225\377\346\343\314\377\346\343\315\377\346\343\316\377\347" \
+ "\343\316\377\204\347\344\317\377\202\347\344\320\377\204\347\344\321" \
+ "\377\10\347\344\322\377\326\323\277\377F:\23\377G9\23\377E8\22\377C6" \
+ "\21\377B5\21\377A4\20\377\202A3\20\377\12B3\20\377C4\20\377D5\21\377" \
+ "E6\21\377H8\22\377N<\23\377O>\24\377P>\24\377o`;\377\345\342\316\377" \
+ "\202\347\344\317\377\202\347\343\316\377\202\346\343\315\377\202\346" \
+ "\343\314\377\2\346\343\313\377\346\343\312\377\202\346\343\311\377\202" \
+ "\346\343\307\377\1\346\343\306\377\202\346\343\305\377\27\346\343\304" \
+ "\377\310\277\236\377YC\30\377VB\25\377S@\24\377P;\23\377L8\21\377G3\20" \
+ "\377A.\16\377=)\15\3777$\13\3773\40\12\3770\35\11\3770\35\10\3770\36" \
+ "\10\3773!\11\3777$\13\377;(\14\377\77-\16\377D2\17\377G5\20\377L9\22" \
+ "\377O=\23\377\203Q\77\24\377\30ZH\34\377\335\326\226\377\344\333\232" \
+ "\377\343\333\230\377\343\332\225\377\343\332\222\377\343\332\221\377" \
+ "\343\331\216\377\343\331\212\377\343\331\207\377gY(\377I;\23\377H:\22" \
+ "\377B5\21\377>1\20\3778+\17\377'!\13\377\37\33\11\377\31\25\7\377\22" \
+ "\17\5\377\15\13\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\324\0\0\0\377\3\10\10\10\377\35\35\35\377777\377\203LLL\377" \
+ "\4KKK\377JJJ\377III\377HHH\377\202GGG\377\4FFF\377EEE\377DDD\377CCC\377" \
+ "\202BBB\377\24AAA\377@@@\377\77\77\77\377>>>\377===\377<<<\377;;;\377" \
+ ":::\377999\377::9\377<;9\377\77>9\377C@:\377*'\33\377\36\32\11\377$\37" \
+ "\13\377+&\15\3770+\17\3775/\17\37782\20\377\20292\21\377\2\264\257\225" \
+ "\377\346\343\315\377\202\347\343\316\377\203\347\344\317\377\202\347" \
+ "\344\320\377\202\347\344\321\377\203\347\344\322\377\202\347\344\323" \
+ "\377\3\343\340\317\377H;\23\377I;\23\377\202G9\22\377\3F7\21\377F7\22" \
+ "\377E6\21\377\202F6\21\377\10G7\21\377H7\21\377I9\22\377N;\22\377P>\24" \
+ "\377Q\77\24\377R\77\24\377\303\275\245\377\202\347\344\320\377\203\347" \
+ "\344\317\377\3\347\343\316\377\346\343\316\377\346\343\315\377\202\346" \
+ "\343\314\377\2\346\343\313\377\346\343\312\377\202\346\343\311\377\3" \
+ "\346\343\310\377\346\343\307\377\346\343\306\377\202\346\343\305\377" \
+ "\30\346\343\304\377\215\177V\377XC\25\377WB\25\377R>\23\377O:\22\377" \
+ "K6\20\377G1\17\377\77,\16\377:&\14\3775\"\12\3771\37\11\3770\34\10\377" \
+ "1\35\10\3772\37\11\3775\"\13\377:'\14\377\77+\16\377C/\17\377G4\17\377" \
+ "K8\21\377N;\22\377R>\24\377S\77\24\377\202R\77\24\377\27\237\223\\\377" \
+ "\344\333\233\377\343\333\231\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377\262\247" \
+ "a\377K<\24\377I:\23\377G9\22\377A4\20\377<.\20\377/&\15\377\"\35\12\377" \
+ "\33\27\10\377\25\22\6\377\17\15\4\377\12\11\3\377\5\4\2\377\2\2\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\327\0\0\0\377\3\5\5\5\377\33\33\33\3774" \
+ "44\377\202HHH\377\2GGG\377FFF\377\202EEE\377\2DDD\377CCC\377\202BBB\377" \
+ "\26AAA\377@@@\377\77\77\77\377>>>\377===\377<<<\377;;;\377:::\377999" \
+ "\377888\377777\377887\377:97\377=<7\3771/'\377\30\25\7\377\36\32\11\377" \
+ "$\37\13\377+&\15\3770+\17\3775/\17\37782\20\377\20292\21\377\2\264\257" \
+ "\225\377\347\343\316\377\203\347\344\317\377\202\347\344\320\377\202" \
+ "\347\344\321\377\202\347\344\322\377\204\347\344\323\377\202\347\344" \
+ "\324\377\4SF!\377I;\23\377H:\22\377H:\23\377\202I9\22\377\203H8\22\377" \
+ "\4I9\22\377K9\22\377M<\23\377P=\24\377\202R\77\24\377\2|nI\377\347\344" \
+ "\322\377\202\347\344\321\377\202\347\344\320\377\203\347\344\317\377" \
+ "\1\347\343\316\377\202\346\343\315\377\3\346\343\314\377\346\343\313" \
+ "\377\346\343\312\377\202\346\343\311\377\3\346\343\310\377\346\343\307" \
+ "\377\346\343\306\377\202\346\343\305\377\13\326\320\257\377[E\30\377" \
+ "YC\25\377WA\24\377R=\23\377N9\21\377H3\17\377C.\16\377=)\14\377:%\13" \
+ "\3773\40\11\377\2021\35\10\377\11""2\36\10\3775\"\12\377:&\13\377=*\15" \
+ "\377B/\17\377F3\17\377K7\21\377N:\22\377Q=\23\377\202S@\24\377\30T\77" \
+ "\24\377`L\37\377\340\330\230\377\344\333\231\377\343\333\227\377\343" \
+ "\332\224\377\343\332\222\377\343\331\220\377\343\331\215\377\343\331" \
+ "\211\377\343\331\206\377jZ)\377L=\24\377I:\23\377E6\21\377\77""2\20\377" \
+ "5*\16\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\15\13\4\377" \
+ "\7\6\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\332\0\0\0\377\3\5\5" \
+ "\5\377!!!\377<<<\377\202DDD\377\1CCC\377\202BBB\377\12AAA\377@@@\377" \
+ "\77\77\77\377>>>\377===\377<<<\377;;;\377:::\377999\377888\377\20277" \
+ "7\377\17""666\377776\377875\377750\377\25\22\11\377\30\25\7\377\36\32" \
+ "\11\377$\37\13\377+&\15\3770+\17\3775/\17\37782\20\37792\21\377:2\21" \
+ "\377\264\257\227\377\202\347\344\317\377\202\347\344\320\377\202\347" \
+ "\344\321\377\202\347\344\322\377\203\347\344\323\377\1\347\344\324\377" \
+ "\202\347\345\324\377\202\347\345\325\377\10bV1\377K<\24\377K<\23\377" \
+ "K;\23\377J:\23\377J:\22\377K:\22\377L:\22\377\202M;\23\377\7O=\23\377" \
+ "Q>\24\377R\77\24\377T\77\24\377S@\24\377\256\246\211\377\347\344\323" \
+ "\377\202\347\344\322\377\202\347\344\321\377\1\347\344\320\377\203\347" \
+ "\344\317\377\1\347\343\316\377\202\346\343\315\377\3\346\343\314\377" \
+ "\346\343\313\377\346\343\312\377\202\346\343\311\377\202\346\343\307" \
+ "\3773\346\343\306\377\346\343\305\377\346\343\304\377{i>\377[D\26\377" \
+ "YC\25\377V\77\24\377Q9\22\377M6\21\377G0\17\377B+\16\377=&\14\3777\"" \
+ "\11\3773\36\10\3771\35\7\3772\36\10\3776\"\11\3779$\12\377=)\14\377C" \
+ "-\16\377G1\17\377K6\20\377N:\22\377Q<\23\377T@\25\377VB\25\377UA\25\377" \
+ "TA\24\377\256\243k\377\344\333\233\377\343\333\231\377\343\333\226\377" \
+ "\343\332\223\377\343\332\222\377\343\331\217\377\343\331\214\377\343" \
+ "\331\210\377\263\247`\377N=\24\377L<\23\377I9\22\377C5\21\377\77""1\20" \
+ "\377'\"\13\377!\34\11\377\32\26\7\377\24\21\5\377\17\15\5\377\11\10\3" \
+ "\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\334\0\0\0\377\2" \
+ "\21\21\21\377,,,\377\202AAA\377\11@@@\377\77\77\77\377>>>\377===\377" \
+ "<<<\377;;;\377:::\377999\377888\377\202777\377\23""666\377555\377444" \
+ "\377554\377764\377\31\27\22\377\21\16\5\377\30\25\7\377\36\32\11\377" \
+ "$\37\13\377+&\15\3770+\17\3775/\17\37782\20\377:2\21\377;3\21\377\254" \
+ "\250\217\377\347\344\317\377\347\344\320\377\202\347\344\321\377\202" \
+ "\347\344\322\377\202\347\344\323\377\1\347\344\324\377\202\347\345\324" \
+ "\377\203\347\345\325\377\202\347\345\326\377\20thF\377N=\24\377M<\23" \
+ "\377N=\23\377M=\23\377M<\23\377N=\24\377O=\24\377P=\24\377Q>\24\377R" \
+ ">\24\377T\77\24\377S@\24\377UA\25\377VB\25\377\335\332\306\377\203\347" \
+ "\344\323\377\202\347\344\322\377\1\347\344\321\377\202\347\344\320\377" \
+ "\202\347\344\317\377\6\347\343\316\377\346\343\316\377\346\343\315\377" \
+ "\346\343\314\377\346\343\313\377\346\343\312\377\202\346\343\311\377" \
+ "\202\346\343\307\377\202\346\343\305\377\26\244\230q\377[E\26\377[C\25" \
+ "\377YA\24\377T=\23\377O8\22\377J3\17\377E.\16\377>(\14\377:$\12\3776" \
+ "\37\11\3772\34\10\3772\35\10\3775\37\11\377:$\13\377='\13\377B,\15\377" \
+ "G1\17\377I4\17\377N9\21\377R<\23\377U@\24\377\203WB\25\377\27r`0\377" \
+ "\344\334\234\377\344\333\231\377\343\333\227\377\343\332\224\377\343" \
+ "\332\222\377\343\331\220\377\343\331\215\377\343\331\211\377\341\327" \
+ "\205\377dS#\377N=\24\377L;\23\377H8\22\377A2\20\377/'\15\377#\36\12\377" \
+ "\35\31\10\377\27\24\6\377\21\16\5\377\14\12\4\377\6\5\2\377\3\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\336\0\0\0\377\11\7\7\7\377###\377;;;\377" \
+ "===\377<<<\377;;;\377:::\377999\377888\377\202777\377\24""666\377555" \
+ "\377444\377333\377222\377332\377#\"\40\377\13\11\3\377\20\16\4\377\27" \
+ "\24\6\377\36\32\11\377$\37\13\377+&\15\3770+\17\3775/\17\37792\20\377" \
+ ";3\21\377<4\21\377\253\246\215\377\347\344\320\377\202\347\344\321\377" \
+ "\1\347\344\322\377\203\347\344\323\377\1\347\345\324\377\203\347\345" \
+ "\325\377\203\347\345\326\377\202\347\345\327\377\6\204xX\377N=\24\377" \
+ "O>\24\377O=\23\377P>\24\377P=\24\377\202Q>\24\377\10R>\24\377S>\24\377" \
+ "S@\24\377T@\25\377VB\25\377WB\25\377`N#\377\347\345\325\377\202\347\345" \
+ "\324\377\203\347\344\323\377\1\347\344\322\377\202\347\344\321\377\1" \
+ "\347\344\320\377\202\347\344\317\377\26\347\343\316\377\346\343\316\377" \
+ "\346\343\315\377\346\343\314\377\346\343\313\377\346\343\312\377\346" \
+ "\343\311\377\346\343\310\377\346\343\307\377\346\343\306\377\346\343" \
+ "\305\377\301\266\224\377_E\26\377^E\26\377[B\25\377W>\23\377R9\21\377" \
+ "M5\17\377F.\16\377B*\14\377<%\12\3778\40\11\377\2024\35\10\377\12""5" \
+ "\37\10\3779#\12\377<%\13\377@+\15\377E0\17\377I3\20\377M7\20\377R;\22" \
+ "\377V@\23\377XB\25\377\202XC\25\377\30WB\25\377\306\274\200\377\344\333" \
+ "\232\377\343\333\230\377\343\332\225\377\343\332\222\377\343\332\221" \
+ "\377\343\331\216\377\343\331\212\377\343\331\207\377\246\227S\377P>\24" \
+ "\377N=\23\377I9\22\377E6\21\3776+\17\377&!\13\377\40\33\11\377\31\25" \
+ "\7\377\23\20\5\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0" \
+ "\0\377\377\0\0\0\377\337\0\0\0\377\5\4\4\4\377\33\33\33\377666\37799" \
+ "9\377888\377\202777\377\26""666\377555\377444\377333\377222\377111\377" \
+ "000\377//.\377\12\11\6\377\12\11\3\377\20\16\4\377\27\24\6\377\36\32" \
+ "\11\377$\37\13\377*%\15\3770+\17\3776/\17\377;3\20\377<4\21\377>5\21" \
+ "\377\253\246\215\377\347\344\321\377\202\347\344\322\377\202\347\344" \
+ "\323\377\202\347\345\324\377\202\347\345\325\377\202\347\345\326\377" \
+ "\204\347\345\327\377\3\347\345\330\377\223\210k\377P>\24\377\202Q\77" \
+ "\24\377\10Q>\24\377R\77\24\377S\77\24\377T\77\24\377T@\25\377UA\25\377" \
+ "VA\25\377WB\25\377\202XC\25\377\2t`9\377\347\345\326\377\202\347\345" \
+ "\325\377\2\347\345\324\377\347\344\324\377\202\347\344\323\377\1\347" \
+ "\344\322\377\202\347\344\321\377\1\347\344\320\377\202\347\344\317\377" \
+ "!\347\343\316\377\346\343\316\377\346\343\315\377\346\343\314\377\346" \
+ "\343\313\377\346\343\312\377\346\343\311\377\346\343\310\377\346\343" \
+ "\307\377\346\343\306\377\311\302\240\377`G\27\377_F\26\377\\C\25\377" \
+ "Y@\24\377T;\22\377O6\21\377I0\16\377D,\15\377\77'\14\377:\"\11\3777\37" \
+ "\10\3774\34\7\3776\36\10\3779\"\11\377=&\13\377A)\14\377E/\16\377J3\17" \
+ "\377N7\21\377Q:\22\377U>\23\377YB\25\377\203YC\25\377\27\223\203N\377" \
+ "\344\334\234\377\343\333\231\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377\335\320" \
+ "\177\377YF\32\377Q\77\24\377M<\23\377H7\21\377>1\17\377'#\14\377#\36" \
+ "\12\377\33\27\10\377\25\22\6\377\17\15\4\377\12\11\3\377\5\4\2\377\2" \
+ "\2\1\377\377\0\0\0\377\377\0\0\0\377\341\0\0\0\377\32\3\3\3\377\32\32" \
+ "\32\377333\377666\377555\377444\377333\377222\377111\377000\377///\377" \
+ "...\377\30\30\27\377\5\4\2\377\12\11\3\377\20\16\4\377\27\24\6\377\35" \
+ "\31\10\377$\37\13\377*%\15\3771+\16\37770\17\377<4\21\377>5\21\377\77" \
+ "5\21\377\242\236\203\377\202\347\344\322\377\3\347\344\323\377\347\344" \
+ "\324\377\347\345\324\377\202\347\345\325\377\202\347\345\326\377\202" \
+ "\347\345\327\377\203\347\345\330\377\202\347\345\331\377\13\243\232\201" \
+ "\377Q\77\24\377R\77\24\377S\77\24\377T\77\24\377S@\24\377T@\25\377UA" \
+ "\25\377VA\25\377WB\25\377XC\25\377\202YC\25\377\3ZD\25\377xc<\377\347" \
+ "\345\327\377\202\347\345\326\377\202\347\345\325\377\1\347\345\324\377" \
+ "\202\347\344\323\377\202\347\344\322\377\2\347\344\321\377\347\344\320" \
+ "\377\202\347\344\317\377:\347\343\316\377\346\343\316\377\346\343\315" \
+ "\377\346\343\314\377\346\343\313\377\346\343\312\377\346\343\311\377" \
+ "\346\343\310\377\346\343\307\377\322\313\253\377bH\27\377aG\26\377_D" \
+ "\25\377[A\24\377V;\22\377P6\20\377K1\17\377F,\15\377A'\14\377<#\12\377" \
+ "9\37\11\3775\35\10\3776\36\10\3779!\11\377=$\13\377A)\14\377E,\15\377" \
+ "I1\16\377N6\20\377R:\22\377U=\23\377X@\24\377ZC\25\377[D\26\377[C\26" \
+ "\377eO\36\377\340\330\231\377\344\333\232\377\343\333\227\377\343\332" \
+ "\224\377\343\332\222\377\343\331\220\377\343\331\215\377\343\331\211" \
+ "\377\343\331\206\377\213{\77\377R\77\24\377P=\24\377L:\23\377F6\21\377" \
+ "*%\14\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\14\12\4\377" \
+ "\7\6\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\343\0\0\0\377\30\3\3" \
+ "\3\377\32\32\32\377111\377222\377111\377000\377///\377...\377---\377" \
+ "&&&\377\3\3\2\377\5\4\2\377\12\11\3\377\20\16\4\377\27\24\6\377\35\31" \
+ "\10\377$\37\13\377,'\15\3772,\16\37780\20\377>5\21\377@6\21\377@5\21" \
+ "\377\232\224z\377\202\347\344\323\377\3\347\344\324\377\347\345\324\377" \
+ "\347\345\325\377\202\347\345\326\377\202\347\345\327\377\202\347\345" \
+ "\330\377\205\347\345\331\377\7\263\255\225\377S\77\24\377T\77\24\377" \
+ "S@\24\377UA\25\377VB\25\377WB\25\377\202XC\25\377\202YC\25\377\4ZD\25" \
+ "\377[C\26\377[D\26\377mW-\377\203\347\345\327\377\202\347\345\326\377" \
+ "\2\347\345\325\377\347\345\324\377\202\347\344\323\377\202\347\344\322" \
+ "\377\2\347\344\321\377\347\344\320\377\202\347\344\317\377\2\347\343" \
+ "\316\377\346\343\315\377\202\346\343\314\377\1\346\343\312\377\202\346" \
+ "\343\311\3773\346\343\307\377\305\273\232\377dG\26\377dH\26\377aE\25" \
+ "\377\\A\24\377X=\22\377S8\20\377N3\17\377I.\15\377D(\14\377\77$\12\377" \
+ ";\40\11\3778\36\10\3777\34\10\377:\40\11\377<#\12\377A'\14\377D,\15\377" \
+ "I0\16\377M5\20\377R9\21\377V=\22\377Y@\24\377[B\25\377[E\26\377\\D\26" \
+ "\377[D\26\377\274\257u\377\344\333\233\377\343\333\231\377\343\332\225" \
+ "\377\343\332\222\377\343\332\221\377\343\331\216\377\343\331\212\377" \
+ "\343\331\207\377\303\266i\377T\77\24\377R\77\24\377O=\23\377J8\22\377" \
+ "1*\16\377&!\13\377!\34\11\377\31\25\7\377\23\20\5\377\16\14\4\377\10" \
+ "\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\344\0\0\0\377" \
+ "\4\6\6\6\377\"\"\"\377///\377...\377\202---\377\22,,,\377\15\15\15\377" \
+ "\2\2\1\377\5\4\2\377\12\11\3\377\20\16\4\377\27\24\6\377\35\31\10\377" \
+ "$\40\12\377,'\14\3773,\17\37790\20\377>5\21\377@5\21\377A6\22\377\226" \
+ "\217t\377\347\344\323\377\347\344\324\377\202\347\345\325\377\1\347\345" \
+ "\326\377\203\347\345\327\377\1\347\345\330\377\206\347\345\331\377\6" \
+ "\347\346\331\377\304\275\253\377S@\24\377UA\25\377VB\25\377WB\25\377" \
+ "\202XC\25\377\202YC\25\377\10ZD\25\377[D\26\377\\D\26\377[E\26\377]E" \
+ "\26\377aI\32\377\342\337\320\377\347\345\330\377\202\347\345\327\377" \
+ "\202\347\345\326\377\4\347\345\325\377\347\345\324\377\347\344\324\377" \
+ "\347\344\323\377\202\347\344\322\377\2\347\344\321\377\347\344\320\377" \
+ "\202\347\344\317\377\37\347\343\316\377\346\343\315\377\346\343\314\377" \
+ "\346\343\313\377\346\343\312\377\346\343\311\377\346\343\310\377\264" \
+ "\247\203\377eJ\27\377dH\27\377bF\26\377]A\25\377X=\23\377T9\21\377O4" \
+ "\17\377I.\15\377D*\14\377@&\12\377<!\11\377:\36\10\3779\36\7\377;!\10" \
+ "\377>#\12\377A'\13\377E+\15\377I/\16\377N4\20\377Q8\21\377V=\23\377Y" \
+ "@\24\377[C\25\377\202^E\26\377\30]E\26\377\216{G\377\344\334\234\377" \
+ "\344\333\231\377\343\333\226\377\343\332\223\377\343\332\222\377\343" \
+ "\331\217\377\343\331\214\377\343\331\210\377\343\330\204\377kW%\377S" \
+ "@\24\377Q>\24\377L9\22\3778-\17\377($\14\377#\36\12\377\34\30\10\377" \
+ "\26\23\6\377\17\15\4\377\12\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377" \
+ "\377\0\0\0\377\346\0\0\0\377\25\16\16\16\377'''\377,,,\377+++\377\"\"" \
+ "\"\377\0\0\0\377\2\2\1\377\5\4\1\377\12\11\3\377\17\15\4\377\26\23\6" \
+ "\377\36\33\10\377%\40\12\377-&\15\3775-\17\377:1\20\377\77""5\21\377" \
+ "A6\22\377C7\22\377\220\207k\377\347\344\324\377\202\347\345\325\377\1" \
+ "\347\345\326\377\202\347\345\327\377\202\347\345\330\377\204\347\345" \
+ "\331\377\1\347\346\331\377\203\347\346\332\377\2\326\324\304\377VB\25" \
+ "\377\202WB\25\377\1XC\25\377\202YC\25\377\12[C\26\377[D\26\377\\D\26" \
+ "\377[E\26\377]E\26\377^E\26\377_F\26\377_F\27\377\301\271\242\377\347" \
+ "\345\331\377\202\347\345\330\377\202\347\345\327\377\6\347\345\326\377" \
+ "\347\345\325\377\347\345\324\377\347\344\324\377\347\344\323\377\347" \
+ "\344\322\377\202\347\344\321\377\1\347\344\320\377\202\347\344\317\377" \
+ "8\346\343\316\377\346\343\315\377\346\343\314\377\346\343\313\377\346" \
+ "\343\312\377\346\343\311\377\224\200V\377gK\27\377eI\27\377bF\26\377" \
+ "_C\24\377Z>\22\377V:\21\377P4\20\377K/\16\377F*\14\377B'\13\377>#\12" \
+ "\377:\37\11\3779\36\10\377:\40\10\377>$\11\377B&\12\377D*\14\377I.\16" \
+ "\377O3\20\377Q7\20\377V;\22\377Z@\24\377[B\25\377_E\26\377_F\27\377_" \
+ "E\26\377gP\37\377\342\332\232\377\344\333\232\377\343\333\227\377\343" \
+ "\332\224\377\343\332\222\377\343\331\220\377\343\331\215\377\343\331" \
+ "\211\377\343\330\204\377\240\220L\377UA\25\377S@\24\377P<\23\377\77""2" \
+ "\20\377*%\15\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\14\12" \
+ "\4\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\347\0\0\0\377" \
+ "\23\2\2\2\377\25\25\25\377(((\377\15\15\15\377\0\0\0\377\1\1\0\377\5" \
+ "\4\1\377\11\10\3\377\17\15\4\377\30\24\6\377\36\32\10\377&\40\13\377" \
+ ".'\15\3776-\17\377;1\21\377\77""5\22\377C7\22\377D7\22\377\210~b\377" \
+ "\202\347\345\325\377\1\347\345\326\377\202\347\345\327\377\1\347\345" \
+ "\330\377\204\347\345\331\377\1\347\346\331\377\202\347\346\332\377\203" \
+ "\347\346\333\377\3\345\344\330\377XE\30\377XC\25\377\202YC\25\377\202" \
+ "ZC\26\377\11[C\26\377\\D\26\377]E\26\377^E\26\377_F\26\377_F\27\377`" \
+ "G\27\377aG\27\377\232\212i\377\202\347\345\331\377\202\347\345\330\377" \
+ "\202\347\345\327\377\7\347\345\326\377\347\345\325\377\347\345\324\377" \
+ "\347\344\324\377\347\344\323\377\347\344\322\377\347\344\321\377\202" \
+ "\347\344\320\377\2\347\344\317\377\347\343\316\377\202\346\343\315\377" \
+ "\20\346\343\314\377\346\343\312\377\341\336\302\377oT\"\377hK\27\377" \
+ "gJ\27\377cF\26\377`B\24\377[>\22\377W:\21\377Q3\17\377M/\16\377I+\14" \
+ "\377C&\13\377A#\11\377=!\10\377\202<\40\10\377$\77#\12\377B'\13\377E" \
+ "*\14\377I.\15\377N3\17\377R6\20\377W;\22\377Y>\23\377\\B\24\377_E\26" \
+ "\377aG\27\377`G\27\377_F\27\377\304\270}\377\344\333\232\377\343\333" \
+ "\230\377\343\332\225\377\343\332\222\377\343\332\221\377\343\331\216" \
+ "\377\343\331\211\377\343\331\206\377\311\275n\377WB\25\377UA\25\377S" \
+ ">\24\377F6\21\377,'\15\377&!\13\377\40\33\11\377\31\25\7\377\23\20\5" \
+ "\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0" \
+ "\0\377\350\0\0\0\377\1\5\5\5\377\202\0\0\0\377\20\1\1\0\377\5\4\1\377" \
+ "\11\10\3\377\21\16\4\377\27\24\6\377\40\34\11\377(!\13\3770(\15\3775" \
+ ",\16\377=2\21\377A5\22\377D7\22\377E8\22\377}sT\377\347\345\325\377\347" \
+ "\345\326\377\202\347\345\327\377\1\347\345\330\377\204\347\345\331\377" \
+ "\202\347\346\332\377\203\347\346\333\377\203\347\346\334\377\4iU,\377" \
+ "YC\25\377ZD\25\377ZC\26\377\202ZB\25\377\12\\C\25\377[C\25\377]D\25\377" \
+ "^E\26\377`F\26\377aG\27\377bH\27\377cH\27\377iO\40\377\334\331\311\377" \
+ "\203\347\345\331\377\1\347\345\330\377\202\347\345\327\377\3\347\345" \
+ "\326\377\347\345\325\377\347\345\324\377\202\347\344\323\377\3\347\344" \
+ "\322\377\347\344\321\377\347\344\320\377\202\347\344\317\377\5\347\343" \
+ "\316\377\346\343\315\377\346\343\314\377\346\343\313\377\263\245\201" \
+ "\377\202jL\30\3771hJ\27\377dF\26\377aB\24\377\\=\23\377W9\21\377R4\17" \
+ "\377M/\15\377I+\14\377D'\12\377B$\11\377\77\"\10\377>\40\10\377\77!\10" \
+ "\377@#\11\377D&\12\377F*\14\377J.\16\377M2\17\377R7\20\377W;\22\377Z" \
+ ">\23\377^C\24\377aE\26\377bG\26\377bH\27\377aG\27\377\237\215V\377\344" \
+ "\333\233\377\343\333\231\377\343\333\226\377\343\332\223\377\343\332" \
+ "\222\377\343\331\217\377\343\331\212\377\343\331\207\377\343\330\202" \
+ "\377p]'\377XC\25\377S@\24\377M:\22\377-(\16\377'#\14\377#\36\12\377\33" \
+ "\27\10\377\25\22\6\377\17\15\4\377\12\11\3\377\5\4\1\377\1\1\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\353\0\0\0\377\17\1\1\0\377\5\4\1\377\13\11\3" \
+ "\377\21\16\5\377\30\24\7\377!\34\11\377)\"\13\3770'\15\3777-\17\377=" \
+ "2\21\377B6\22\377E8\22\377F:\23\377shG\377\347\345\326\377\202\347\345" \
+ "\327\377\1\347\345\330\377\203\347\345\331\377\2\347\346\331\377\347" \
+ "\346\332\377\203\347\346\333\377\203\347\346\334\377\3\314\310\270\377" \
+ "\257\246\220\377eQ%\377\202[C\26\377\1[C\25\377\202[B\25\377\13\\B\25" \
+ "\377[B\25\377]C\25\377_D\26\377`E\26\377bG\26\377dH\27\377dG\26\377d" \
+ "I\27\377\233\211h\377\347\346\331\377\203\347\345\331\377\1\347\345\330" \
+ "\377\202\347\345\327\377\3\347\345\326\377\347\345\325\377\347\345\324" \
+ "\377\202\347\344\323\377\3\347\344\322\377\347\344\321\377\347\344\320" \
+ "\377\202\347\344\317\377\4\346\343\316\377\346\343\315\377\341\335\304" \
+ "\377wZ'\377\202lM\30\377\13hI\27\377eF\25\377bC\24\377\\=\22\377W8\20" \
+ "\377S4\20\377N/\15\377J+\14\377G(\13\377B#\12\377A\"\11\377\202@\"\11" \
+ "\377$A#\11\377C&\12\377G*\14\377M/\16\377P3\16\377T8\20\377Y<\22\377" \
+ "[@\23\377^B\25\377aE\25\377cG\26\377dH\27\377cH\27\377\201k7\377\344" \
+ "\334\234\377\344\333\231\377\343\333\227\377\343\332\224\377\343\332" \
+ "\222\377\343\331\217\377\343\331\214\377\343\331\210\377\343\330\204" \
+ "\377\232\210E\377YC\25\377WB\25\377R>\23\377/)\16\377)%\14\377$\37\13" \
+ "\377\35\31\10\377\27\24\6\377\21\16\5\377\13\11\3\377\5\4\2\377\2\2\1" \
+ "\377\377\0\0\0\377\377\0\0\0\377\353\0\0\0\377\16\1\1\0\377\5\3\1\377" \
+ "\13\11\3\377\22\16\5\377\31\25\6\377\"\33\11\377)!\13\3770'\15\3778-" \
+ "\17\377\77""3\21\377B6\21\377F:\23\377H;\23\377h[:\377\202\347\345\327" \
+ "\377\1\347\345\330\377\203\347\345\331\377\202\347\346\332\377\202\347" \
+ "\346\333\377\11\316\311\271\377\260\250\221\377\222\206g\377vf\77\377" \
+ "[D\30\377YC\25\377[C\26\377[D\26\377[E\26\377\202[B\25\377\2[B\24\377" \
+ "Y@\24\377\202[A\24\377\12\\B\24\377^C\25\377aE\25\377bG\26\377dH\27\377" \
+ "eJ\27\377fJ\27\377gK\27\377\302\272\242\377\347\346\331\377\203\347\345" \
+ "\331\377\2\347\345\330\377\347\345\327\377\202\347\345\326\377\6\347" \
+ "\345\325\377\347\344\324\377\347\344\323\377\347\344\322\377\347\344" \
+ "\321\377\347\344\320\377\202\347\344\317\377\3\347\343\316\377\346\343" \
+ "\315\377\230\202W\377\202mM\30\377\30kK\27\377iI\26\377eD\25\377aA\23" \
+ "\377\\=\22\377W7\20\377T4\17\377O/\16\377L+\14\377H'\13\377D$\12\377" \
+ "C#\11\377B\"\11\377B#\11\377C$\12\377F'\13\377J-\15\377N1\16\377S5\20" \
+ "\377W:\21\377Z<\22\377^A\23\377`D\25\377cF\26\377\202dH\27\377\30dI\27" \
+ "\377fJ\31\377\336\326\227\377\344\333\232\377\343\333\230\377\343\332" \
+ "\224\377\343\332\222\377\343\331\220\377\343\331\215\377\343\331\211" \
+ "\377\343\330\204\377\302\265f\377[C\26\377YC\25\377U@\24\3776.\17\377" \
+ "+&\15\377&!\13\377\37\33\11\377\31\25\7\377\22\17\5\377\15\13\4\377\7" \
+ "\6\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\353\0\0\0\377\20\3\2\0" \
+ "\377\6\4\1\377\15\12\4\377\23\17\5\377\33\26\6\377\"\33\10\377*!\13\377" \
+ "2(\15\3778-\17\377\77""3\21\377D7\22\377H;\23\377I;\23\377^Q+\377\347" \
+ "\345\327\377\347\345\330\377\203\347\345\331\377\37\330\327\307\377\271" \
+ "\263\234\377\227\214p\377whD\377ZE\31\377VB\25\377WB\25\377XC\25\377" \
+ "YC\25\377ZD\25\377[C\26\377\\D\26\377]E\26\377[D\25\377[B\24\377Y@\24" \
+ "\377Z@\24\377Z\77\23\377Y\77\23\377Z@\23\377\\@\24\377]C\24\377`C\25" \
+ "\377bF\26\377dH\27\377gJ\27\377hJ\27\377hK\27\377pT\"\377\316\307\263" \
+ "\377\347\346\331\377\203\347\345\331\377\5\347\345\330\377\347\345\327" \
+ "\377\347\345\326\377\347\345\325\377\347\345\324\377\202\347\344\323" \
+ "\377\3\347\344\322\377\347\344\321\377\347\344\320\377\202\347\344\317" \
+ "\377\1\252\231s\377\202oN\31\3774nM\31\377kJ\27\377hG\26\377eD\25\377" \
+ "`@\23\377\\;\21\377X7\21\377S2\16\377O.\15\377L+\14\377H(\12\377F%\12" \
+ "\377E%\12\377F&\12\377G'\12\377H(\13\377L,\14\377N/\15\377R3\17\377V" \
+ "7\20\377Y:\22\377\\\77\23\377_B\23\377bE\25\377dF\26\377eH\27\377fJ\27" \
+ "\377eJ\27\377dH\27\377\303\266y\377\344\333\233\377\343\333\230\377\343" \
+ "\332\225\377\343\332\222\377\343\332\221\377\343\331\216\377\343\331" \
+ "\211\377\343\331\206\377\341\326\200\377cK\33\377[C\26\377XB\24\377;" \
+ "1\21\377,'\16\377&!\13\377!\34\11\377\32\26\7\377\24\21\5\377\16\14\4" \
+ "\377\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\351\0" \
+ "\0\0\377\14\1\0\0\377\3\1\0\377\7\4\2\377\16\12\3\377\24\17\5\377\33" \
+ "\25\6\377\"\33\11\377+!\13\3772'\15\3778-\17\377\77""3\21\377E8\22\377" \
+ "\202I;\23\377\12SD\35\377\347\345\330\377\315\311\267\377\247\240\207" \
+ "\377\205yY\377dU.\377R\77\24\377S\77\24\377S@\24\377UA\25\377\202WB\25" \
+ "\377\11XC\25\377YC\25\377[C\26\377[D\26\377\\D\26\377[D\26\377[C\25\377" \
+ "ZA\24\377Y@\24\377\202X>\23\377\1X=\22\377\202Y>\22\377\7Z>\23\377]A" \
+ "\24\377_C\24\377aD\25\377dF\26\377gJ\27\377iK\27\377\202jL\30\377\3r" \
+ "V\"\377\305\273\244\377\347\346\331\377\202\347\345\331\377\1\347\345" \
+ "\330\377\202\347\345\327\377\11\347\345\326\377\347\345\325\377\347\345" \
+ "\324\377\347\344\323\377\347\344\322\377\347\344\321\377\347\344\320" \
+ "\377\344\341\313\377\242\213c\377\202qO\30\377\13pN\31\377nM\30\377k" \
+ "I\27\377iF\25\377eB\24\377`>\22\377]:\21\377Y6\20\377U2\17\377Q.\15\377" \
+ "N,\14\377\203K)\13\377'K*\14\377L+\14\377L,\14\377O/\15\377R3\16\377" \
+ "V6\17\377Y9\21\377\\=\22\377_A\24\377aC\25\377cF\26\377eH\26\377gJ\27" \
+ "\377hJ\27\377gJ\27\377gK\27\377\251\227^\377\344\333\233\377\343\333" \
+ "\231\377\343\333\226\377\343\332\223\377\343\332\221\377\343\331\216" \
+ "\377\343\331\212\377\343\331\207\377\343\330\201\377\204o4\377[E\26\377" \
+ "ZC\25\377\77""4\20\377-(\16\377($\14\377#\36\12\377\34\30\10\377\25\22" \
+ "\6\377\17\15\4\377\12\11\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\350\0\0\0\377\31\1\0\0\377\3\1\0\377\4\2\1\377\10\5\2\377" \
+ "\16\11\3\377\24\17\5\377\33\24\6\377\"\32\10\377+!\12\3771&\14\3779-" \
+ "\17\377\77""2\20\377E7\21\377I;\23\377K<\24\377L=\24\377VG\40\377N=\24" \
+ "\377P>\24\377Q\77\24\377R\77\24\377T\77\24\377TA\24\377UA\25\377WB\25" \
+ "\377\202XC\25\377\202YC\25\377\1ZC\25\377\202ZB\25\377\4[B\24\377Y@\24" \
+ "\377Y\77\23\377W<\22\377\202V;\22\377\12V;\21\377V:\22\377W;\22\377Y" \
+ "=\22\377[>\22\377]\77\23\377_B\24\377cE\26\377gI\27\377jK\30\377\203" \
+ "lM\30\377\3lM\27\377\241\215j\377\337\333\314\377\202\347\345\331\377" \
+ "\12\347\345\330\377\347\345\327\377\347\345\326\377\347\345\325\377\347" \
+ "\345\324\377\347\344\324\377\347\344\323\377\347\344\322\377\315\302" \
+ "\246\377\212m>\377\203rP\31\377\17pN\27\377nL\27\377jH\26\377gE\24\377" \
+ "dB\23\377`>\21\377]9\21\377X6\20\377U3\16\377S0\15\377P/\15\377O-\14" \
+ "\377O,\14\377P.\15\377Q.\15\377\202S1\16\377$U4\17\377W6\20\377Z9\20" \
+ "\377]=\22\377`A\23\377bB\24\377eF\25\377fG\26\377hJ\27\377iK\27\377j" \
+ "L\30\377hK\27\377hJ\27\377\217yA\377\344\334\234\377\344\333\231\377" \
+ "\343\333\226\377\343\332\223\377\343\332\222\377\343\331\217\377\343" \
+ "\331\214\377\343\331\207\377\343\330\202\377\251\225N\377^E\26\377\\" \
+ "D\26\377D7\21\377/*\16\377)%\14\377$\37\13\377\35\31\10\377\27\24\6\377" \
+ "\20\16\4\377\13\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0" \
+ "\377\350\0\0\0\377\17\3\1\0\377\4\2\1\377\5\3\1\377\12\6\2\377\17\12" \
+ "\3\377\24\17\5\377\34\24\6\377\"\31\10\377*\40\12\3771%\15\3778+\17\377" \
+ "\77""1\20\377D6\21\377I:\23\377L=\24\377\202N=\24\377\14P>\24\377Q\77" \
+ "\24\377R\77\24\377T\77\24\377S@\24\377UA\25\377VA\25\377V@\24\377WA\24" \
+ "\377XA\24\377XA\25\377X@\24\377\202Y@\24\377\24Y@\23\377X\77\23\377W" \
+ "=\23\377V;\22\377T9\21\377S7\20\377R7\20\377S8\20\377U9\20\377V8\21\377" \
+ "W9\22\377X:\21\377[=\23\377^\77\23\377aC\25\377fF\26\377jJ\27\377kL\30" \
+ "\377mM\30\377nM\30\377\202oN\31\377\13uV\"\377\243\216i\377\310\275\246" \
+ "\377\345\343\327\377\347\345\330\377\347\345\327\377\347\345\326\377" \
+ "\347\345\325\377\334\330\303\377\273\255\215\377\222wJ\377\204tQ\31\377" \
+ "\13sO\31\377pM\27\377mJ\27\377jG\26\377gD\24\377e@\23\377a>\22\377^:" \
+ "\21\377\\9\21\377Y6\17\377W4\17\377\202T1\15\377\20U1\16\377U3\16\377" \
+ "V4\17\377W5\17\377Y7\17\377[8\20\377]:\21\377_=\22\377a@\23\377cB\24" \
+ "\377eD\25\377hH\26\377iJ\27\377kL\27\377kL\30\377kM\30\377\202jL\30\377" \
+ "\27|c.\377\344\334\234\377\344\333\231\377\343\333\227\377\343\332\224" \
+ "\377\343\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377" \
+ "\343\330\204\377\303\264e\377_F\26\377^E\26\377H9\22\3770+\17\377+&\15" \
+ "\377%!\13\377\37\33\11\377\30\25\7\377\21\16\5\377\14\12\4\377\6\5\2" \
+ "\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\347\0\0\0\377\22\2\1\0\377" \
+ "\3\2\0\377\4\3\1\377\7\4\1\377\13\6\2\377\17\12\4\377\24\16\5\377\33" \
+ "\23\6\377!\30\7\377)\36\12\3770$\14\3777*\16\377=0\17\377B4\21\377H9" \
+ "\22\377L;\23\377N=\24\377P>\24\377\202Q>\24\377\2R>\24\377S>\24\377\202" \
+ "R>\24\377\2S\77\23\377S>\23\377\202U>\23\377\33U=\23\377V=\23\377V=\22" \
+ "\377U<\23\377V<\22\377U:\22\377T9\21\377T8\20\377Q6\17\377P4\20\377O" \
+ "3\17\377P3\16\377R4\20\377R5\17\377T6\20\377V8\20\377X:\21\377]>\22\377" \
+ "aA\23\377dD\25\377hH\26\377kK\27\377mM\30\377oN\30\377pO\31\377qO\30" \
+ "\377qP\30\377\203rP\31\377\1\206j8\377\202\213n>\377\2\203d1\377uQ\32" \
+ "\377\202tQ\31\377\202uR\31\377\36uQ\31\377tQ\31\377rM\30\377pL\27\377" \
+ "mI\26\377kG\25\377iE\24\377fB\23\377d\77\22\377a<\21\377_:\20\377^8\20" \
+ "\377[6\20\377Z5\20\377Y5\17\377[6\20\377\\9\21\377]:\20\377^:\20\377" \
+ "_<\21\377`>\21\377a@\22\377cB\23\377fC\24\377hF\25\377iG\26\377kJ\27" \
+ "\377kK\27\377lL\27\377lM\27\377\202lM\30\377\30kM\30\377lO\32\377\342" \
+ "\332\232\377\344\333\232\377\343\333\230\377\343\332\224\377\343\332" \
+ "\222\377\343\331\220\377\343\331\215\377\343\331\210\377\343\330\204" \
+ "\377\336\322{\377bI\31\377_F\27\377M<\23\3771,\17\377,'\15\377&!\13\377" \
+ "\40\33\11\377\31\25\7\377\23\20\5\377\15\13\4\377\7\6\2\377\4\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\346\0\0\0\377\22\1\0\0\377\3\2\0\377\4\3" \
+ "\1\377\6\4\1\377\10\5\1\377\13\7\2\377\17\11\3\377\25\17\5\377\32\23" \
+ "\5\377\40\30\7\377(\35\11\377/#\13\3774(\15\377;.\17\377@2\17\377D5\21" \
+ "\377H8\22\377L:\22\377\202N<\23\377\14P=\23\377Q<\23\377P<\23\377Q<\23" \
+ "\377Q<\22\377R<\22\377R:\22\377Q:\22\377R:\22\377R:\21\377S:\21\377R" \
+ "9\21\377\202R8\21\377\5R7\20\377Q5\20\377O4\20\377N3\20\377N1\17\377" \
+ "\202M0\16\377\17M/\15\377O1\17\377R3\17\377U5\17\377W6\20\377Z;\21\377" \
+ "_>\22\377cB\24\377gE\25\377jI\26\377mK\27\377oN\30\377qO\31\377rP\31" \
+ "\377sP\31\377\202tQ\31\377\2uQ\32\377tQ\31\377\204uR\31\377\202vS\32" \
+ "\377\16uR\31\377uQ\31\377uQ\30\377tP\30\377rM\27\377qL\27\377oJ\26\377" \
+ "mH\25\377kE\24\377iD\23\377fA\23\377d\77\22\377b<\21\377`;\20\377\202" \
+ "^9\20\377\22_:\20\377`;\21\377b=\22\377d\77\22\377d@\23\377e@\23\377" \
+ "fB\24\377hD\25\377iF\25\377jH\25\377jH\26\377lJ\26\377nK\30\377oN\30" \
+ "\377oM\30\377nM\30\377mM\30\377lM\27\377\202lM\30\377\27\330\314\217" \
+ "\377\344\333\232\377\343\333\230\377\343\332\225\377\343\332\222\377" \
+ "\343\331\220\377\343\331\215\377\343\331\211\377\343\331\206\377\343" \
+ "\330~\377|d*\377aG\27\377P=\24\3772-\17\377,'\16\377'#\14\377\"\35\12" \
+ "\377\32\26\7\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\344\0\0\0\377\26\1\0\0\377\3\1\0\377\4\2" \
+ "\1\377\6\4\1\377\10\5\1\377\11\5\1\377\13\6\2\377\20\12\3\377\24\16\4" \
+ "\377\32\22\5\377\40\26\7\377&\32\10\377+\40\12\3773'\14\3778+\16\377" \
+ "=/\17\377B2\17\377F5\21\377H6\21\377J8\22\377L9\22\377M9\21\377\202M" \
+ ":\22\377\10M9\21\377N9\21\377N7\21\377O7\21\377P7\22\377O7\20\377O6\20" \
+ "\377O6\21\377\202O5\20\377\10N4\20\377N4\17\377M2\17\377M0\17\377M1\16" \
+ "\377K.\15\377J,\14\377J,\15\377\202L-\15\377\16O/\16\377R2\16\377U5\17" \
+ "\377Y8\20\377^<\22\377a\77\23\377eB\24\377hF\25\377jG\26\377mK\27\377" \
+ "pN\27\377rO\31\377sP\31\377uQ\31\377\202uR\31\377\202vS\32\377\202wR" \
+ "\31\377\21wS\31\377wR\30\377xS\30\377wR\30\377wR\31\377vQ\31\377uO\30" \
+ "\377sN\30\377rL\27\377qK\27\377oJ\26\377mH\26\377kE\25\377iC\24\377h" \
+ "B\23\377gA\23\377e>\21\377\202d>\21\377+f@\22\377gB\23\377hC\23\377i" \
+ "D\24\377iE\24\377jF\25\377lH\26\377lI\26\377mJ\27\377nK\27\377oL\27\377" \
+ "pN\30\377pN\27\377pO\30\377qO\30\377pO\31\377oN\30\377oN\31\377\205j" \
+ "4\377\301\262x\377\344\334\234\377\344\333\233\377\343\333\230\377\343" \
+ "\332\225\377\343\332\222\377\343\332\221\377\343\331\215\377\343\331" \
+ "\211\377\343\331\206\377\343\330\201\377\221|:\377bH\27\377S@\25\377" \
+ "3-\17\377.)\16\377($\14\377#\36\12\377\34\30\10\377\25\22\6\377\17\15" \
+ "\4\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\344" \
+ "\0\0\0\377\25\2\1\0\377\4\2\1\377\5\3\1\377\7\4\1\377\11\5\1\377\13\6" \
+ "\2\377\15\7\2\377\20\11\3\377\25\15\3\377\31\17\5\377\40\25\6\377$\31" \
+ "\7\377)\36\11\3770#\13\3775&\14\377;+\15\377>-\15\377A0\17\377D2\17\377" \
+ "F3\20\377G4\17\377\202H5\20\377\5I5\20\377K5\17\377K4\20\377K4\21\377" \
+ "K3\20\377\202K2\17\377\33J2\17\377K1\17\377L0\17\377L0\16\377J0\16\377" \
+ "K/\16\377L/\16\377K.\15\377J-\15\377J,\15\377I*\14\377H(\13\377I)\13" \
+ "\377K+\14\377L,\14\377O.\15\377U2\17\377X7\17\377\\9\20\377`=\21\377" \
+ "cA\23\377fC\24\377iF\25\377lI\26\377nJ\27\377pM\27\377rM\30\377\202t" \
+ "P\30\377\202vQ\31\377\3wR\30\377xS\31\377xS\32\377\202yS\32\377\35xT" \
+ "\32\377xS\32\377wR\30\377wR\31\377vP\30\377uO\30\377tN\27\377sM\27\377" \
+ "rK\26\377pI\26\377nG\25\377lE\24\377kD\24\377jC\24\377iB\23\377jC\24" \
+ "\377kD\24\377lE\25\377lF\25\377mH\26\377nI\25\377oJ\26\377pL\26\377q" \
+ "L\27\377qM\27\377rM\30\377sN\30\377sO\31\377tQ\31\377\202sP\31\377\202" \
+ "rP\31\377\33\210l5\377\302\264{\377\344\335\242\377\344\334\240\377\344" \
+ "\334\234\377\344\333\233\377\343\333\231\377\343\333\226\377\343\332" \
+ "\222\377\343\332\221\377\343\331\216\377\343\331\212\377\343\331\206" \
+ "\377\343\330\201\377\251\226N\377dG\26\377U@\25\3774.\20\377/*\16\377" \
+ ")%\14\377#\36\12\377\35\31\10\377\26\23\6\377\20\16\4\377\12\11\3\377" \
+ "\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\343\0\0\0\377\25\2\1" \
+ "\0\377\3\2\0\377\4\3\1\377\7\4\1\377\11\5\1\377\12\6\2\377\15\7\2\377" \
+ "\16\7\2\377\17\10\2\377\24\13\4\377\30\16\5\377\35\22\6\377\"\27\6\377" \
+ "(\33\10\377-\37\12\3771$\13\3776&\14\377;)\15\377=+\15\377\77-\16\377" \
+ "A/\16\377\202D0\17\377\17E1\17\377G1\17\377G0\17\377F/\17\377F.\16\377" \
+ "G.\16\377F.\16\377G-\15\377H.\16\377G-\15\377H-\15\377H,\15\377I,\15" \
+ "\377H,\15\377I+\14\377\202H*\14\377\31H)\14\377H(\13\377G'\12\377G&\12" \
+ "\377I'\12\377L*\14\377O.\15\377S0\16\377V4\17\377Z7\17\377^:\20\377a" \
+ ">\22\377e@\23\377hC\24\377iE\25\377lH\25\377nI\26\377pL\26\377rL\27\377" \
+ "tN\27\377uO\30\377vP\31\377wR\30\377xS\32\377yT\31\377\204zT\32\377\13" \
+ "yS\31\377yR\30\377xQ\30\377wP\30\377vN\27\377uM\27\377tL\27\377rJ\26" \
+ "\377rI\26\377pH\25\377oG\25\377\202nG\25\377\12oG\25\377pI\26\377qJ\26" \
+ "\377rL\27\377sM\27\377sN\30\377tN\27\377uO\30\377uP\27\377vQ\30\377\202" \
+ "vR\31\377\1vS\32\377\202uR\31\377\36tQ\31\377\224zC\377\307\272\203\377" \
+ "\344\335\246\377\344\335\245\377\344\335\242\377\344\334\240\377\344" \
+ "\334\235\377\344\333\233\377\343\333\231\377\343\333\226\377\343\332" \
+ "\223\377\343\332\221\377\343\331\216\377\343\331\212\377\343\331\207" \
+ "\377\343\330\201\377\275\254\\\377dH\27\377XC\25\3775/\17\3770+\17\377" \
+ "*%\15\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\13\11\3\377" \
+ "\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\342\0\0\0\377\32\1\0" \
+ "\0\377\3\1\0\377\4\3\1\377\6\4\1\377\10\5\1\377\12\6\2\377\14\7\2\377" \
+ "\15\7\2\377\16\10\2\377\21\11\3\377\24\13\3\377\30\16\4\377\33\21\5\377" \
+ "!\25\6\377&\31\7\377*\34\10\377.\40\11\3772#\13\3776%\14\377:(\14\377" \
+ "<)\14\377=+\16\377\77,\16\377@,\15\377A-\15\377B+\16\377\202B+\15\377" \
+ "\3C+\15\377C*\15\377D*\15\377\203D*\14\377\37D)\14\377E)\14\377E(\13" \
+ "\377F)\13\377E'\13\377F'\13\377G'\13\377F'\12\377F&\12\377F%\12\377G" \
+ "%\12\377J'\12\377L)\13\377N,\14\377R0\15\377U1\16\377X5\17\377]7\20\377" \
+ "_;\21\377a=\21\377e@\22\377hB\23\377iD\24\377lF\24\377nH\26\377qJ\26" \
+ "\377rM\27\377tN\27\377vP\27\377wQ\31\377yR\30\377\202{T\32\377\202|U" \
+ "\31\377\202|T\31\377\10{S\32\377{S\31\377zR\31\377zQ\31\377xP\30\377" \
+ "wO\30\377vM\27\377uM\27\377\203sJ\27\377.tK\27\377tL\27\377uM\27\377" \
+ "uN\27\377wO\27\377wP\27\377wQ\31\377yR\30\377yS\31\377yT\31\377yS\32" \
+ "\377yT\32\377xS\31\377wS\31\377~[\"\377\246\217X\377\324\312\227\377" \
+ "\345\336\253\377\344\336\250\377\344\335\246\377\344\335\245\377\344" \
+ "\335\243\377\344\334\240\377\344\334\235\377\344\334\234\377\343\333" \
+ "\231\377\343\333\226\377\343\332\223\377\343\332\222\377\343\331\216" \
+ "\377\343\331\212\377\343\331\207\377\343\330\202\377\317\301k\377fJ\27" \
+ "\377ZC\26\37760\20\3771,\17\377+&\15\377%!\13\377\37\33\11\377\31\25" \
+ "\7\377\21\16\5\377\14\12\4\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377" \
+ "\0\0\0\377\342\0\0\0\377\30\2\1\0\377\4\2\1\377\5\3\1\377\10\5\1\377" \
+ "\11\5\1\377\13\6\2\377\15\7\2\377\16\10\2\377\20\11\2\377\22\11\3\377" \
+ "\25\13\3\377\26\15\3\377\33\20\5\377\37\23\5\377#\26\6\377(\32\7\377" \
+ ",\35\11\3770\37\11\3772\"\12\3775#\12\3778%\13\377:&\14\377<'\14\377" \
+ "<'\13\377\202='\14\377\16>'\14\377\77&\13\377\77'\14\377@'\13\377@&\13" \
+ "\377A&\13\377A&\12\377B'\13\377B&\13\377D&\12\377C&\12\377C%\13\377E" \
+ "&\12\377E%\12\377\202F%\12\377\31G%\11\377H%\12\377I&\12\377J'\12\377" \
+ "K(\12\377O+\13\377R.\15\377T/\15\377X3\16\377[5\17\377]8\17\377`:\21" \
+ "\377c<\21\377f\77\22\377hA\23\377jC\24\377lE\24\377oH\25\377sK\26\377" \
+ "tL\27\377vN\27\377yQ\30\377{R\32\377|T\31\377}U\32\377\206|T\32\377\202" \
+ "|S\31\377\4{R\31\377zQ\30\377yO\27\377wO\30\377\202wN\30\377\5xO\30\377" \
+ "xP\27\377yQ\31\377zR\31\377{S\31\377\202|T\31\377\202|U\31\377&}V\32" \
+ "\377|V\31\377{U\32\377zT\32\377\222t<\377\276\253y\377\341\332\253\377" \
+ "\345\337\257\377\345\337\255\377\345\336\253\377\344\336\251\377\344" \
+ "\335\246\377\344\335\245\377\344\335\243\377\344\334\240\377\344\334" \
+ "\235\377\344\334\234\377\344\333\231\377\343\333\226\377\343\332\223" \
+ "\377\343\332\222\377\343\331\217\377\343\331\212\377\343\331\207\377" \
+ "\343\330\202\377\336\322y\377gJ\27\377[C\26\37760\20\3771,\17\377,'\15" \
+ "\377&!\13\377\40\33\11\377\31\25\7\377\22\17\5\377\14\12\4\377\7\6\2" \
+ "\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\341\0\0\0\377\33\2\1\0\377" \
+ "\3\2\0\377\4\3\1\377\7\4\1\377\11\5\1\377\12\6\2\377\15\7\2\377\16\7" \
+ "\2\377\17\10\2\377\22\11\3\377\24\12\3\377\25\13\3\377\27\15\4\377\32" \
+ "\17\4\377\35\21\5\377!\23\5\377&\27\6\377)\32\7\377-\34\10\3770\35\10" \
+ "\3772\37\12\3775!\12\3777#\12\3778#\12\377:$\13\377:$\12\377<$\12\377" \
+ "\202;#\12\377'<#\12\377=\"\12\377>#\11\377>$\11\377\77$\12\377@#\12\377" \
+ "B$\11\377A$\11\377B$\12\377B#\12\377D$\11\377E%\11\377E$\11\377G%\12" \
+ "\377I&\12\377J&\12\377J'\12\377K(\12\377M)\13\377O*\13\377R,\14\377S" \
+ "-\14\377V0\15\377Z3\16\377\\5\16\377^7\17\377a9\20\377d<\21\377f=\21" \
+ "\377h@\22\377lC\23\377oG\24\377rJ\26\377uL\27\377wO\30\377yQ\31\377|" \
+ "S\31\377|T\32\377}T\31\377\203~V\31\377\202\177V\32\377\3~T\31\377}T" \
+ "\31\377}S\31\377\202|S\31\377\1|R\31\377\202|R\27\377\3|S\31\377}S\31" \
+ "\377}T\31\377\202~V\31\377\202~V\33\377)\177W\33\377~V\33\377~V\32\377" \
+ "}U\32\377\210d*\377\261\233g\377\327\314\240\377\345\340\264\377\345" \
+ "\340\262\377\345\337\261\377\345\337\257\377\345\337\255\377\345\336" \
+ "\253\377\344\336\251\377\344\336\247\377\344\335\245\377\344\335\243" \
+ "\377\344\334\240\377\344\334\235\377\344\334\234\377\344\333\231\377" \
+ "\343\333\227\377\343\332\223\377\343\332\222\377\343\331\217\377\343" \
+ "\331\214\377\343\331\207\377\343\330\202\377\343\327}\377rV\36\377ZD" \
+ "\25\37760\20\3772-\17\377,'\16\377&!\13\377!\34\11\377\31\25\7\377\23" \
+ "\20\5\377\15\13\4\377\7\6\2\377\4\3\1\377\377\0\0\0\377\377\0\0\0\377" \
+ "\340\0\0\0\377\37\1\0\0\377\3\1\0\377\4\2\1\377\6\4\1\377\10\5\1\377" \
+ "\12\6\2\377\14\7\2\377\15\7\2\377\17\10\2\377\21\11\3\377\23\12\3\377" \
+ "\25\13\3\377\26\14\3\377\30\15\4\377\33\16\4\377\35\20\4\377!\21\4\377" \
+ "#\24\5\377(\30\6\377*\30\6\377-\32\10\377/\34\10\3771\35\10\3773\36\10" \
+ "\3775\37\11\3776\37\11\3777\40\11\3778\40\10\3778\40\11\3779\40\11\377" \
+ ";\40\11\377\202;!\10\377\4<!\11\377>\"\11\377\77!\10\377@\"\10\377\202" \
+ "B#\11\377$D$\11\377E%\11\377G%\11\377I&\12\377J'\12\377J(\12\377K(\12" \
+ "\377L(\12\377N)\13\377O)\13\377P*\13\377Q+\13\377S,\13\377V.\14\377X" \
+ "1\15\377[4\16\377]6\17\377_7\17\377b9\20\377e;\21\377g>\21\377kA\23\377" \
+ "oF\24\377qH\25\377uL\27\377xN\30\377{R\30\377|S\31\377}T\31\377\177V" \
+ "\32\377\200V\31\377\201V\31\377\201W\33\377\201V\31\377\201V\33\377\200" \
+ "V\33\377\202\200V\32\377\1\177V\31\377\203~T\32\377\5\177V\31\377\200" \
+ "V\33\377\201V\31\377\201W\33\377\202Y\32\377\202\202X\33\377*\201X\33" \
+ "\377\200X\32\377\210c(\377\252\220\\\377\313\277\224\377\345\341\271" \
+ "\377\345\340\267\377\345\340\266\377\345\340\264\377\345\340\262\377" \
+ "\345\337\261\377\345\337\257\377\345\337\255\377\345\336\253\377\344" \
+ "\336\251\377\344\336\247\377\344\335\245\377\344\335\243\377\344\334" \
+ "\240\377\344\334\236\377\344\334\234\377\344\333\231\377\343\333\227" \
+ "\377\343\332\224\377\343\332\222\377\343\331\217\377\343\331\214\377" \
+ "\343\331\207\377\343\330\202\377\343\327}\377\201e)\377[C\26\37760\20" \
+ "\3772-\17\377,'\16\377'#\14\377!\34\11\377\32\26\7\377\24\21\5\377\16" \
+ "\14\4\377\10\7\3\377\4\3\1\377\377\0\0\0\377\377\0\0\0\377\340\0\0\0" \
+ "\377*\2\1\0\377\4\2\1\377\5\3\1\377\7\4\1\377\11\5\1\377\13\6\2\377\15" \
+ "\7\2\377\16\10\2\377\20\11\2\377\23\12\3\377\25\13\3\377\25\14\3\377" \
+ "\30\15\4\377\32\16\4\377\33\17\4\377\36\20\4\377\37\20\5\377#\23\5\377" \
+ "%\24\5\377(\26\6\377*\30\6\377-\32\7\3770\32\7\3772\34\7\3772\34\10\377" \
+ "4\35\10\3775\35\7\3775\35\10\3777\36\10\3778\36\10\3779\36\10\3779\37" \
+ "\7\377;\40\10\377=!\10\377\77!\10\377@\"\11\377B#\12\377D$\12\377F%\12" \
+ "\377G'\12\377I(\12\377K)\13\377\202L*\13\377\33N+\13\377P,\14\377P+\14" \
+ "\377Q+\13\377R,\13\377R+\13\377S+\13\377T-\14\377V-\14\377X/\15\377Z" \
+ "1\15\377\\3\16\377_5\16\377b6\20\377e;\21\377g=\21\377kA\22\377oE\24" \
+ "\377sI\25\377vM\26\377yN\27\377|Q\27\377}S\31\377\177V\31\377\200V\33" \
+ "\377\201W\32\377\202Y\32\377\202\203Y\32\377\203\203Y\33\377\203\202" \
+ "W\32\377\1\203Y\33\377\202\204Y\33\377\1\203Y\33\377\202\204Y\33\377" \
+ "\202\203Y\33\377\4\212c*\377\250\215[\377\314\273\221\377\346\342\275" \
+ "\377\202\345\341\273\377&\345\341\271\377\345\340\267\377\345\340\266" \
+ "\377\345\340\264\377\345\340\262\377\345\337\261\377\345\337\257\377" \
+ "\345\337\255\377\345\336\253\377\344\336\251\377\344\336\247\377\344" \
+ "\335\245\377\344\335\243\377\344\334\240\377\344\334\236\377\344\334" \
+ "\234\377\344\333\231\377\343\333\227\377\343\332\224\377\343\332\222" \
+ "\377\343\331\217\377\343\331\214\377\343\331\207\377\343\330\202\377" \
+ "\343\327}\377\214r2\377YC\25\37760\20\3773-\17\377-(\16\377'#\14\377" \
+ "\"\35\12\377\33\27\10\377\24\21\5\377\16\14\4\377\10\7\3\377\4\3\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\306\0\0\0\377\206\1\1\0\377\222" \
+ "\0\0\0\3775\1\0\0\377\3\2\0\377\4\3\1\377\6\4\1\377\11\5\1\377\12\6\2" \
+ "\377\15\7\2\377\16\7\2\377\17\10\2\377\22\11\3\377\24\12\3\377\25\14" \
+ "\3\377\27\15\4\377\31\16\4\377\33\17\4\377\35\20\4\377\36\20\5\377!\21" \
+ "\4\377#\22\5\377%\23\5\377(\25\5\377)\27\6\377,\30\6\377.\31\6\377/\32" \
+ "\7\3770\32\7\3772\33\7\3774\34\10\3776\34\10\3778\35\10\3779\36\10\377" \
+ ":\40\10\377<!\11\377\77#\11\377A#\11\377C%\11\377D%\13\377F&\13\377I" \
+ "(\13\377K*\13\377L+\14\377M+\14\377P,\14\377Q-\14\377R.\14\377S/\15\377" \
+ "T/\15\377T.\15\377S-\14\377U.\14\377T-\13\377V-\14\377U-\14\377\202X" \
+ ".\14\377\17[1\14\377\\1\16\377^3\16\377`5\17\377d:\20\377i=\20\377lA" \
+ "\22\377pE\23\377sH\24\377wL\26\377zN\30\377|R\31\377\177S\31\377\201" \
+ "V\32\377\202W\32\377\202\204Y\33\377\203\205Y\32\377\204\206Y\32\377" \
+ "\1\205Z\33\377\203\206Z\33\377\202\205Z\33\377\7\221j/\377\261\230h\377" \
+ "\315\300\232\377\346\342\302\377\346\342\300\377\346\342\277\377\346" \
+ "\342\275\377\202\345\341\273\377&\345\341\271\377\345\340\267\377\345" \
+ "\340\266\377\345\340\264\377\345\340\262\377\345\337\261\377\345\337" \
+ "\257\377\345\337\255\377\345\336\253\377\344\336\251\377\344\336\247" \
+ "\377\344\335\245\377\344\335\243\377\344\334\240\377\344\334\236\377" \
+ "\344\334\234\377\344\333\231\377\343\333\227\377\343\332\224\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\207\377\343\330" \
+ "\202\377\343\327}\377\225|8\377VB\25\37771\20\3773-\17\377-(\16\377(" \
+ "$\14\377#\36\12\377\33\27\10\377\25\22\6\377\17\15\5\377\10\7\3\377\5" \
+ "\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\303\0\0\0\377\3\1\1\0" \
+ "\377\2\2\1\377\3\3\1\377\202\4\3\1\377\203\5\4\1\377\1\4\3\1\377\202" \
+ "\3\3\1\377\202\1\1\0\377\216\0\0\0\377/\2\1\0\377\4\2\1\377\5\3\1\377" \
+ "\10\5\1\377\11\5\1\377\14\7\2\377\15\7\2\377\17\10\2\377\21\11\3\377" \
+ "\23\12\3\377\25\13\3\377\26\14\3\377\30\15\4\377\33\16\4\377\34\17\4" \
+ "\377\36\20\4\377!\21\4\377!\22\5\377%\23\5\377(\25\5\377(\26\5\377+\30" \
+ "\6\377-\31\6\377/\32\7\3770\32\7\3772\33\7\3775\35\7\3776\36\10\377:" \
+ "\40\10\377;!\11\377<\"\11\377\77$\12\377B&\12\377C%\12\377D'\12\377G" \
+ "(\14\377J*\14\377L,\14\377M-\14\377P.\15\377R1\16\377S0\16\377T0\16\377" \
+ "U1\16\377W2\17\377X3\16\377W2\16\377\202Y2\15\377\26Y1\16\377X0\15\377" \
+ "X/\15\377Y/\14\377Y.\14\377[/\15\377\\1\15\377[0\15\377^2\15\377b5\16" \
+ "\377e8\16\377i;\20\377mA\21\377pD\24\377tI\25\377xL\26\377|P\30\377~" \
+ "S\31\377\201V\32\377\203X\33\377\205Y\32\377\206Y\32\377\205\206[\33" \
+ "\377\1\207\\\33\377\205\210\\\34\377\3\237}G\377\270\241u\377\326\313" \
+ "\250\377\202\346\343\305\377\5\346\343\303\377\346\342\302\377\346\342" \
+ "\300\377\346\342\277\377\346\342\275\377\202\345\341\273\377&\345\341" \
+ "\271\377\345\340\267\377\345\340\266\377\345\340\264\377\345\340\262" \
+ "\377\345\337\261\377\345\337\257\377\345\337\255\377\345\336\253\377" \
+ "\344\336\251\377\344\336\247\377\344\335\245\377\344\335\243\377\344" \
+ "\334\240\377\344\334\236\377\344\334\234\377\344\333\231\377\343\333" \
+ "\227\377\343\332\224\377\343\332\222\377\343\331\217\377\343\331\214" \
+ "\377\343\331\207\377\343\330\202\377\343\327}\377\234\204>\377T\77\24" \
+ "\37771\20\3774.\20\377.)\16\377($\14\377#\36\12\377\33\27\10\377\25\22" \
+ "\6\377\17\15\5\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\302\0\0\0\377\5\1\1\0\377\3\3\1\377\5\4\1\377\5\4\2\377\7" \
+ "\6\2\377\205\10\7\3\377\5\7\6\2\377\6\5\2\377\5\4\2\377\5\4\1\377\4\3" \
+ "\1\377\202\3\3\1\377\202\2\2\1\377\210\1\1\0\3770\2\1\0\377\4\3\0\377" \
+ "\5\3\1\377\10\5\1\377\12\6\1\377\14\7\2\377\15\7\2\377\17\11\2\377\21" \
+ "\12\2\377\23\12\3\377\26\15\4\377\27\16\4\377\32\17\5\377\35\20\5\377" \
+ "\36\21\5\377!\21\4\377\"\22\6\377$\24\5\377&\25\6\377(\26\6\377*\30\6" \
+ "\377-\32\6\3770\34\7\3771\33\10\3773\34\10\3776\37\10\3778\40\10\377" \
+ ":\"\11\377;\"\11\377>#\12\377@&\12\377C'\13\377D(\13\377G)\14\377I+\14" \
+ "\377K-\15\377M-\15\377O/\16\377Q0\16\377T2\17\377V4\17\377V4\16\377Y" \
+ "6\17\377Z7\20\377[7\20\377]7\17\377]8\17\377^8\17\377\203]6\17\377\25" \
+ "\\4\16\377\\3\16\377\\2\15\377\\1\15\377[0\15\377^1\15\377^2\15\377a" \
+ "3\15\377b5\16\377e8\20\377i=\21\377nA\22\377rE\23\377wI\25\377{M\26\377" \
+ "~Q\27\377\201U\31\377\204X\32\377\204Y\33\377\207[\33\377\207\\\33\377" \
+ "\202\210\\\33\377\204\211\\\34\377\10\212]\34\377\223i-\377\252\214Z" \
+ "\377\310\270\222\377\340\332\277\377\346\343\311\377\346\343\310\377" \
+ "\346\343\307\377\202\346\343\305\377\5\346\343\303\377\346\342\302\377" \
+ "\346\342\300\377\346\342\277\377\346\342\275\377\202\345\341\273\377" \
+ "&\345\341\271\377\345\340\267\377\345\340\266\377\345\340\264\377\345" \
+ "\340\262\377\345\337\261\377\345\337\257\377\345\337\255\377\345\336" \
+ "\253\377\344\336\251\377\344\336\247\377\344\335\245\377\344\335\243" \
+ "\377\344\334\240\377\344\334\236\377\344\334\234\377\344\333\231\377" \
+ "\343\333\227\377\343\332\224\377\343\332\222\377\343\331\217\377\343" \
+ "\331\214\377\343\331\207\377\343\330\202\377\343\327}\377\244\214C\377" \
+ "P>\24\37771\20\3774.\20\377.)\16\377)%\14\377#\36\12\377\34\30\10\377" \
+ "\26\23\6\377\17\15\4\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\301\0\0\0\377\6\2\2\1\377\4\3\1\377\6\5\2\377\10\7\3\377" \
+ "\12\11\3\377\14\12\4\377\202\15\13\4\377\202\16\14\4\377\10\15\13\4\377" \
+ "\14\12\4\377\13\11\3\377\12\11\3\377\11\10\3\377\10\7\3\377\7\6\2\377" \
+ "\6\5\2\377\202\5\4\2\377\203\5\4\1\377\205\4\3\1\377G\6\3\1\377\7\4\2" \
+ "\377\12\6\2\377\14\7\2\377\15\10\3\377\20\12\3\377\23\13\3\377\24\14" \
+ "\3\377\26\15\4\377\30\16\4\377\31\17\5\377\34\21\6\377\36\22\5\377\37" \
+ "\23\5\377\"\25\6\377$\26\6\377(\27\6\377)\27\6\377+\31\6\377-\32\7\377" \
+ "0\34\10\3772\35\10\3775\36\11\3777\40\11\3779\"\11\377;#\11\377=$\13" \
+ "\377\77%\13\377B'\13\377E)\13\377E*\15\377H,\15\377K-\15\377L/\15\377" \
+ "N/\16\377P1\16\377T3\17\377U5\17\377W6\20\377Y8\20\377[9\20\377]:\20" \
+ "\377_;\21\377`;\21\377a<\21\377b=\21\377b<\21\377c=\21\377c<\21\377b" \
+ ":\21\377b9\20\377b8\16\377a5\20\377_5\17\377^4\16\377_3\15\377_2\15\377" \
+ "a2\15\377b4\16\377e7\17\377i9\17\377m>\21\377pA\22\377uF\23\377yK\25" \
+ "\377|O\27\377\177R\30\377\203V\32\377\205Y\33\377\210[\33\377\211\\\34" \
+ "\377\204\212]\34\377\13\217b#\377\246\204P\377\275\247}\377\330\316\261" \
+ "\377\346\343\316\377\346\343\315\377\346\343\313\377\346\343\312\377" \
+ "\346\343\311\377\346\343\310\377\346\343\306\377\202\346\343\305\377" \
+ "\5\346\343\303\377\346\342\302\377\346\342\300\377\346\342\277\377\346" \
+ "\341\275\377\202\345\341\273\377&\345\341\271\377\345\340\267\377\345" \
+ "\340\266\377\345\340\264\377\345\340\262\377\345\337\261\377\345\337" \
+ "\257\377\345\337\255\377\345\336\253\377\344\336\251\377\344\336\247" \
+ "\377\344\335\245\377\344\335\243\377\344\334\240\377\344\334\236\377" \
+ "\344\334\234\377\344\333\231\377\343\333\227\377\343\332\223\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\207\377\343\330" \
+ "\202\377\343\327}\377\246\216B\377L=\24\37771\20\3774.\20\377.)\16\377" \
+ ")%\14\377#\36\12\377\34\30\10\377\26\23\6\377\17\15\4\377\11\10\3\377" \
+ "\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\300\0\0\0\377\10\3\3" \
+ "\1\377\5\4\1\377\7\6\2\377\12\11\3\377\15\13\4\377\17\15\4\377\21\16" \
+ "\5\377\22\17\5\377\204\23\20\5\377\10\22\17\5\377\21\16\5\377\20\16\4" \
+ "\377\17\15\5\377\16\14\4\377\15\13\4\377\14\12\4\377\13\11\3\377\202" \
+ "\12\11\3\377\203\11\10\3\377\203\10\7\3\377-\11\7\3\377\13\11\3\377\15" \
+ "\12\4\377\17\13\4\377\21\14\4\377\22\15\5\377\25\16\5\377\26\17\5\377" \
+ "\30\20\5\377\33\21\5\377\36\23\6\377\37\24\5\377!\25\6\377#\27\6\377" \
+ "%\30\6\377(\31\7\377*\32\10\377-\34\10\3770\35\10\3772\37\11\3773\40" \
+ "\11\3777\"\12\3779#\12\377:%\13\377<%\13\377\77&\13\377@(\14\377C*\14" \
+ "\377F+\15\377H-\15\377J/\16\377L0\16\377N1\17\377O3\17\377S4\20\377U" \
+ "6\17\377W6\20\377X8\21\377[:\21\377];\21\377_=\21\377`>\22\377c@\23\377" \
+ "e@\23\377fA\23\377\203hB\23\377\36hA\23\377g\77\22\377g>\21\377g=\21" \
+ "\377f<\20\377d:\21\377c7\20\377c7\17\377b4\16\377b4\15\377b4\16\377e" \
+ "6\17\377g8\16\377l<\20\377o@\21\377rD\22\377vH\25\377zL\26\377\177Q\30" \
+ "\377\203U\32\377\207Y\32\377\211\\\33\377\212]\34\377\213^\34\377\216" \
+ "b!\377\243\200L\377\272\242x\377\321\303\245\377\346\342\317\377\347" \
+ "\344\320\377\202\347\344\317\377\7\346\343\316\377\346\343\314\377\346" \
+ "\343\313\377\346\343\312\377\346\343\311\377\346\343\307\377\346\343" \
+ "\306\377\202\346\343\305\377\5\346\342\303\377\346\342\302\377\346\342" \
+ "\300\377\346\342\276\377\346\341\275\377\202\345\341\273\377&\345\341" \
+ "\271\377\345\340\267\377\345\340\266\377\345\340\264\377\345\340\262" \
+ "\377\345\337\261\377\345\337\257\377\345\337\255\377\345\336\253\377" \
+ "\344\336\251\377\344\336\247\377\344\335\245\377\344\335\243\377\344" \
+ "\334\240\377\344\334\235\377\344\334\234\377\344\333\231\377\343\333" \
+ "\227\377\343\332\223\377\343\332\222\377\343\331\217\377\343\331\212" \
+ "\377\343\331\207\377\343\330\202\377\343\327}\377\246\217B\377G9\23\377" \
+ "71\20\3774.\20\377/*\16\377)%\14\377#\36\12\377\34\30\10\377\26\23\6" \
+ "\377\17\15\4\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0" \
+ "\0\0\377\277\0\0\0\377\11\2\2\1\377\5\4\1\377\10\7\3\377\13\11\3\377" \
+ "\17\15\5\377\21\16\5\377\24\21\5\377\27\24\6\377\30\25\7\377\205\31\25" \
+ "\7\377\10\30\25\7\377\27\24\6\377\25\22\6\377\24\21\5\377\23\20\5\377" \
+ "\22\17\5\377\21\16\5\377\20\16\4\377\203\17\15\4\377\202\17\15\5\377" \
+ "\202\16\14\4\3770\20\14\4\377\21\15\5\377\23\17\5\377\25\20\5\377\27" \
+ "\22\6\377\31\22\6\377\34\23\6\377\35\24\6\377\40\26\7\377!\26\7\377$" \
+ "\31\7\377&\33\10\377)\34\10\377*\34\10\377+\35\10\3770\37\11\3770\40" \
+ "\11\3773!\12\3775\"\13\3777#\13\377:&\13\377<'\13\377>'\14\377A*\15\377" \
+ "C,\15\377E-\15\377G-\15\377I/\16\377L0\17\377M2\17\377P4\20\377R5\20" \
+ "\377T7\20\377V9\22\377X9\21\377[;\21\377]<\21\377_>\22\377`>\23\377b" \
+ "@\23\377eC\23\377gC\24\377iE\24\377iE\25\377kF\25\377mG\25\377nG\25\377" \
+ "mG\25\377\202mE\24\377\7mC\24\377kA\23\377i\77\22\377i=\20\377f:\17\377" \
+ "f8\17\377e6\17\377\202e5\16\377\23h8\16\377j9\20\377m>\21\377p@\22\377" \
+ "vE\23\377yI\25\377~N\27\377\202S\30\377\205W\31\377\211[\33\377\213^" \
+ "\34\377\214^\34\377\223h*\377\345\341\317\377\347\345\324\377\347\344" \
+ "\323\377\347\344\322\377\347\344\321\377\347\344\320\377\202\347\344" \
+ "\317\3776\346\343\315\377\346\343\314\377\346\343\313\377\346\343\312" \
+ "\377\346\343\311\377\346\343\307\377\346\343\306\377\346\343\305\377" \
+ "\346\343\304\377\346\342\303\377\346\342\302\377\346\342\300\377\346" \
+ "\342\276\377\346\341\275\377\345\341\273\377\345\341\272\377\345\341" \
+ "\271\377\345\340\267\377\345\340\266\377\345\340\263\377\345\340\262" \
+ "\377\345\337\261\377\345\337\256\377\345\337\255\377\345\336\253\377" \
+ "\344\336\251\377\344\335\246\377\344\335\245\377\344\335\243\377\337" \
+ "\325\230\377\275\247i\377\344\334\234\377\344\333\231\377\343\333\226" \
+ "\377\343\332\223\377\343\332\222\377\343\331\217\377\343\331\212\377" \
+ "\343\331\207\377\343\330\202\377\343\327{\377\250\220D\377@6\21\3777" \
+ "1\20\3774.\20\377/*\16\377)%\14\377#\36\12\377\34\30\10\377\26\23\6\377" \
+ "\17\15\4\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0" \
+ "\377\276\0\0\0\377\13\1\1\0\377\5\4\1\377\7\6\2\377\13\11\3\377\17\15" \
+ "\4\377\23\20\5\377\27\24\6\377\31\25\7\377\34\30\10\377\36\32\11\377" \
+ "\40\33\11\377\202!\34\11\377\6\40\33\11\377\37\33\11\377\36\32\11\377" \
+ "\35\31\10\377\33\27\10\377\32\26\7\377\202\31\25\7\377\1\30\25\7\377" \
+ "\202\27\24\6\377\202\26\23\6\377\203\25\22\6\377\6\26\22\6\377\26\23" \
+ "\6\377\30\24\6\377\32\25\6\377\35\26\7\377\37\27\7\377\202!\31\7\377" \
+ "\77$\32\10\377'\34\11\377)\35\11\377*\36\11\377,\37\12\377.\40\12\377" \
+ "1\"\12\3772#\13\3775$\13\3777&\14\377:'\14\377=)\15\377=*\15\377@+\15" \
+ "\377D-\16\377E.\16\377F.\16\377I1\16\377K2\17\377N3\20\377P6\17\377R" \
+ "7\20\377T9\21\377V:\21\377W:\21\377Z<\22\377\\=\22\377^\77\23\377`A\23" \
+ "\377bA\24\377dC\24\377fD\24\377hF\25\377iG\26\377lH\26\377mI\26\377o" \
+ "K\26\377qL\26\377sK\27\377sM\27\377sL\27\377rJ\26\377rI\26\377qG\25\377" \
+ "pE\24\377nD\23\377l@\21\377j>\21\377h;\20\377h9\17\377g8\16\377h7\15" \
+ "\377i8\17\377l:\20\377o\77\21\377tB\22\377xG\24\377{K\25\377\200P\27" \
+ "\377\204T\31\377\210X\32\377\213\\\34\377\216_\35\377\202\217_\34\377" \
+ ">\342\337\314\377\347\344\324\377\347\344\323\377\347\344\322\377\347" \
+ "\344\321\377\347\344\320\377\347\344\317\377\347\343\316\377\346\343" \
+ "\315\377\346\343\314\377\346\343\313\377\346\343\312\377\346\343\311" \
+ "\377\346\343\307\377\346\343\306\377\346\343\305\377\346\343\304\377" \
+ "\346\342\303\377\346\342\301\377\346\342\300\377\346\342\276\377\346" \
+ "\341\275\377\345\341\273\377\345\341\272\377\345\341\271\377\345\340" \
+ "\267\377\345\340\265\377\345\340\263\377\345\340\262\377\345\337\260" \
+ "\377\345\337\256\377\345\337\255\377\345\336\253\377\344\336\250\377" \
+ "\344\335\246\377\344\335\245\377\315\276\203\377\214h+\377\245\212L\377" \
+ "\344\334\234\377\343\333\231\377\343\333\226\377\343\332\223\377\343" \
+ "\332\222\377\343\331\216\377\343\331\212\377\343\331\207\377\343\330" \
+ "\201\377\343\327{\377\252\222F\377:2\21\37771\20\3774.\20\377/*\16\377" \
+ ")%\14\377#\36\12\377\34\30\10\377\26\23\6\377\17\15\4\377\11\10\3\377" \
+ "\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\275\0\0\0\377\13\1\1" \
+ "\0\377\3\3\1\377\6\5\2\377\13\11\3\377\17\15\4\377\23\20\5\377\30\25" \
+ "\7\377\33\27\10\377\37\33\11\377#\36\12\377$\37\13\377\205&!\13\377\1" \
+ "$\37\13\377\202#\36\12\377\4\"\35\12\377\40\33\11\377\37\33\11\377\36" \
+ "\32\11\377\202\35\31\10\377\202\34\30\10\377\203\33\27\10\3770\35\31" \
+ "\10\377\36\32\11\377!\34\11\377\"\33\11\377#\34\11\377%\35\11\377(\36" \
+ "\11\377)\37\11\377+\40\13\377-\"\13\377/#\13\3771%\14\3773%\14\3775'" \
+ "\14\3778'\14\377;)\15\377<+\15\377=+\15\377A.\17\377C/\17\377D0\17\377" \
+ "G1\16\377H2\17\377L4\17\377N5\20\377O6\21\377Q7\21\377T8\21\377V:\22" \
+ "\377X<\22\377Z>\22\377\\\77\23\377]\77\23\377`B\24\377bB\24\377cD\24" \
+ "\377eD\25\377hF\26\377jH\26\377kI\26\377mK\27\377pK\27\377pM\27\377s" \
+ "M\30\377tO\30\377uO\31\377wQ\30\377xQ\31\377\202xP\30\377\24uM\27\377" \
+ "uK\26\377sI\25\377sF\24\377oC\23\377nA\22\377m>\22\377k;\17\377j9\17" \
+ "\377h8\17\377l9\17\377o;\20\377q\77\21\377wD\22\377yG\24\377~L\26\377" \
+ "\202Q\30\377\205U\32\377\212Y\32\377\216]\33\377\203\217_\34\377>\326" \
+ "\312\256\377\347\344\324\377\347\344\323\377\347\344\322\377\347\344" \
+ "\321\377\347\344\320\377\347\344\317\377\347\343\316\377\346\343\315" \
+ "\377\346\343\314\377\346\343\313\377\346\343\312\377\346\343\310\377" \
+ "\346\343\307\377\346\343\306\377\346\343\305\377\346\343\304\377\346" \
+ "\342\302\377\346\342\301\377\346\342\300\377\346\342\276\377\346\341" \
+ "\274\377\345\341\273\377\345\341\272\377\345\341\270\377\345\340\267" \
+ "\377\345\340\265\377\345\340\263\377\345\337\261\377\345\337\260\377" \
+ "\345\337\256\377\345\337\255\377\344\336\252\377\344\336\250\377\340" \
+ "\327\240\377\262\230\\\377\203Z\35\377\202Y\32\377\256\224U\377\344\333" \
+ "\233\377\343\333\231\377\343\333\226\377\343\332\223\377\343\332\221" \
+ "\377\343\331\216\377\343\331\212\377\343\331\206\377\343\330\201\377" \
+ "\343\327{\377\244\215B\37792\21\37771\20\3774.\20\377/*\16\377)%\14\377" \
+ "#\36\12\377\34\30\10\377\26\23\6\377\17\15\4\377\11\10\3\377\5\4\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\275\0\0\0\377\14\2\2\1\377\5\4" \
+ "\1\377\11\10\3\377\16\14\4\377\22\17\5\377\30\25\7\377\34\30\10\377!" \
+ "\34\11\377$\37\13\377'#\14\377+&\15\377,'\15\377\202,'\16\377\6,'\15" \
+ "\377+&\15\377*%\15\377)%\14\377($\14\377'#\14\377\202&!\13\377\202$\37" \
+ "\13\377\205#\36\12\377K\"\36\12\377#\37\12\377%\40\13\377'\40\13\377" \
+ ")!\13\377+\"\13\377-$\14\377.%\14\3771%\15\3772&\15\3773'\15\3776)\15" \
+ "\3778+\16\377;+\16\377=-\16\377>-\16\377@.\17\377C0\17\377E1\20\377F" \
+ "3\17\377H4\20\377K6\21\377M7\21\377P9\22\377Q9\21\377S:\21\377V<\22\377" \
+ "W=\22\377Z>\23\377[@\24\377]A\24\377_A\24\377aD\24\377cD\25\377eF\26" \
+ "\377fG\26\377iH\26\377kJ\27\377lJ\26\377mL\27\377pN\27\377rN\30\377t" \
+ "P\31\377tP\30\377vQ\30\377xR\31\377yT\31\377{T\32\377|U\31\377}U\32\377" \
+ "|T\32\377{R\31\377yN\27\377wM\26\377uI\26\377sF\24\377qB\23\377p@\21" \
+ "\377n>\21\377l;\21\377l9\20\377m:\20\377p<\20\377s@\21\377wE\22\377z" \
+ "H\25\377\177M\26\377\204R\27\377\210V\31\377\214Z\33\377\215^\33\377" \
+ "\220_\34\377\221`\34\377\222a\35\377\310\266\222\377\202\347\344\323" \
+ "\377\2\347\344\322\377\347\344\320\377\202\347\344\317\377\7\347\343" \
+ "\316\377\346\343\315\377\346\343\314\377\346\343\312\377\346\343\311" \
+ "\377\346\343\310\377\346\343\307\377\202\346\343\305\377\23\346\343\304" \
+ "\377\346\342\302\377\346\342\301\377\346\342\277\377\346\342\276\377" \
+ "\346\341\274\377\345\341\273\377\345\341\272\377\345\341\270\377\345" \
+ "\340\267\377\345\340\264\377\345\340\263\377\345\337\261\377\345\337" \
+ "\260\377\345\337\256\377\345\336\254\377\344\336\252\377\306\263z\377" \
+ "\222j+\377\202\205Z\33\377\31\203Y\33\377\264\232\\\377\344\333\233\377" \
+ "\343\333\231\377\343\332\225\377\343\332\222\377\343\332\221\377\343" \
+ "\331\216\377\343\331\211\377\343\331\206\377\343\330\201\377\343\327" \
+ "{\377\230\201;\37792\21\37771\20\3774.\20\377.)\16\377)%\14\377#\36\12" \
+ "\377\34\30\10\377\26\23\6\377\17\15\4\377\11\10\3\377\5\4\1\377\1\1\0" \
+ "\377\377\0\0\0\377\377\0\0\0\377\274\0\0\0\377\15\1\1\0\377\3\3\1\377" \
+ "\7\6\2\377\14\12\4\377\21\16\5\377\26\23\6\377\33\27\10\377!\34\11\377" \
+ "%!\13\377)%\14\377,'\16\3770+\17\3772-\17\377\2023-\17\377\7""2-\17\377" \
+ "1,\17\377/*\16\377.)\16\377-(\16\377,'\16\377,'\15\377\202+&\15\377\1" \
+ "*%\15\377\203)%\14\377\202($\14\377\1)$\14\377\202+%\15\377D.&\15\377" \
+ "0'\15\3771(\15\3775*\16\3774)\16\3777+\17\3779,\17\377;.\17\377=/\20" \
+ "\377>/\17\377@1\17\377C2\20\377E3\20\377G5\20\377H5\20\377K7\21\377M" \
+ "9\21\377O:\21\377Q:\22\377R;\22\377U=\23\377X\77\23\377Y@\24\377Z@\24" \
+ "\377]B\24\377^C\24\377`E\25\377cE\25\377cF\26\377eH\27\377hI\27\377j" \
+ "J\27\377kK\27\377mK\30\377oM\30\377pN\30\377rO\30\377sP\31\377uQ\31\377" \
+ "vR\31\377xS\31\377zT\31\377zT\32\377|V\31\377}V\32\377~V\32\377\177W" \
+ "\33\377\200W\32\377~T\31\377|R\27\377{O\27\377xM\26\377wJ\25\377uF\23" \
+ "\377qB\23\377p@\21\377o=\20\377n:\17\377o;\17\377q>\17\377uA\21\377y" \
+ "E\23\377|J\25\377\202M\26\377\205R\30\377\211V\32\377\214[\33\377\217" \
+ "^\34\377\202\222a\35\377\6\223a\35\377\272\236q\377\347\344\323\377\347" \
+ "\344\322\377\347\344\321\377\347\344\320\377\202\347\344\317\377\7\346" \
+ "\343\316\377\346\343\315\377\346\343\314\377\346\343\312\377\346\343" \
+ "\311\377\346\343\310\377\346\343\307\377\202\346\343\305\377\24\346\343" \
+ "\303\377\346\342\302\377\346\342\301\377\346\342\277\377\346\342\275" \
+ "\377\346\341\274\377\345\341\273\377\345\341\272\377\345\340\270\377" \
+ "\345\340\266\377\345\340\264\377\345\340\263\377\345\337\261\377\345" \
+ "\337\260\377\345\337\256\377\323\303\216\377\240{\77\377\210\\\34\377" \
+ "\207[\34\377\206Z\33\377\202\205Z\33\377\30\300\254m\377\344\333\233" \
+ "\377\343\333\230\377\343\332\225\377\343\332\222\377\343\332\221\377" \
+ "\343\331\215\377\343\331\211\377\343\331\206\377\343\330\201\377\343" \
+ "\326x\377\214y6\37792\21\37771\20\3774.\20\377.)\16\377($\14\377#\36" \
+ "\12\377\34\30\10\377\25\22\6\377\17\15\5\377\11\10\3\377\5\4\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\274\0\0\0\377\14\1\1\0\377\5\4\1" \
+ "\377\11\10\3\377\17\15\5\377\24\21\5\377\31\25\7\377\37\33\11\377$\37" \
+ "\13\377)%\14\377-(\16\3772-\17\37760\20\377\20271\20\377\20360\20\377" \
+ "\5""5/\17\3774.\20\3773-\17\3772-\17\3771,\17\377\2020+\17\377\202/*" \
+ "\16\377\203.)\16\377\14/)\16\3770)\16\3771+\17\3774+\17\3775,\17\377" \
+ "6,\16\3778-\17\3779.\17\377<0\20\377>1\20\377\77""2\17\377@2\17\377\202" \
+ "D5\21\377KG6\21\377H7\22\377J8\22\377L9\22\377O:\23\377P;\23\377R=\23" \
+ "\377S>\23\377V@\24\377X@\24\377ZA\24\377[B\25\377]C\25\377_D\25\377a" \
+ "E\25\377bG\26\377dH\27\377fH\27\377hJ\27\377jK\30\377kL\30\377lM\27\377" \
+ "nM\31\377pO\31\377qP\30\377sP\31\377uQ\32\377uR\31\377vS\32\377wS\31" \
+ "\377zT\31\377zT\32\377\210f1\377\233\177R\377\254\226p\377\276\255\222" \
+ "\377\243\207\\\377\202X\33\377\201V\33\377\177U\31\377~R\30\377|O\27" \
+ "\377zL\26\377wI\25\377tD\23\377tB\22\377s@\21\377o<\20\377q<\20\377s" \
+ ">\20\377vC\22\377zE\23\377~J\24\377\201N\26\377\207S\31\377\212X\31\377" \
+ "\216\\\33\377\221_\34\377\223a\35\377\224b\35\377\225c\35\377\257\213" \
+ "U\377\347\344\323\377\347\344\322\377\347\344\321\377\347\344\320\377" \
+ "\347\344\317\377\347\343\316\377\346\343\315\377\346\343\314\377\346" \
+ "\343\313\377\346\343\312\377\346\343\311\377\346\343\307\377\346\343" \
+ "\306\377\202\346\343\305\377\5\346\342\303\377\346\342\302\377\346\342" \
+ "\300\377\346\342\277\377\346\342\275\377\202\345\341\273\377\10\345\341" \
+ "\271\377\345\340\270\377\345\340\266\377\345\340\264\377\345\340\262" \
+ "\377\345\337\261\377\327\314\230\377\252\210L\377\202\213^\34\377\1\212" \
+ "]\34\377\202\210\\\34\377\32\207[\33\377\205Z\33\377\317\277\201\377" \
+ "\344\333\232\377\343\333\230\377\343\332\225\377\343\332\222\377\343" \
+ "\331\220\377\343\331\215\377\343\331\211\377\343\330\204\377\343\330" \
+ "~\377\343\326x\377}m0\37792\21\37771\20\3773-\17\377.)\16\377($\14\377" \
+ "#\36\12\377\33\27\10\377\25\22\6\377\17\15\5\377\11\10\3\377\5\4\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\274\0\0\0\377\14\3\3\1\377\6\5" \
+ "\2\377\14\12\4\377\21\16\5\377\27\24\6\377\34\30\10\377#\36\12\377'#" \
+ "\14\377,'\16\3771,\17\37760\20\37782\20\377\20492\21\377\20282\20\377" \
+ "\1""71\20\377\20360\20\377\2025/\17\377\2044.\20\37703-\17\3775.\17\377" \
+ "6/\20\3777/\17\37790\20\377:0\20\377<2\21\377>3\21\377\77""3\20\377A" \
+ "4\21\377B5\21\377E7\21\377F8\22\377I9\22\377H9\22\377K9\22\377M;\23\377" \
+ "O=\23\377Q=\23\377R>\24\377U@\24\377WA\24\377YB\25\377ZC\25\377[B\25" \
+ "\377^E\25\377_E\26\377aG\26\377cH\26\377dH\27\377eH\27\377hJ\27\377i" \
+ "K\27\377jL\30\377lM\30\377lM\27\377nM\30\377pO\31\377qP\30\377rP\31\377" \
+ "vT\36\377\214o@\377\237\210`\377\256\235|\377\276\257\227\377\322\312" \
+ "\271\377\344\341\331\377\350\347\341\377\203\350\347\342\377\35\301\257" \
+ "\224\377\202Y\33\377\203Y\33\377\202V\31\377\200S\30\377~Q\27\377{M\27" \
+ "\377zJ\25\377yG\24\377wD\22\377sA\21\377s\77\21\377s=\20\377u\77\20\377" \
+ "wA\21\377|F\23\377\200K\25\377\203N\26\377\210S\30\377\215Y\32\377\217" \
+ "\\\32\377\222_\34\377\225b\35\377\225d\35\377\226d\35\377\243u8\377\347" \
+ "\344\323\377\347\344\322\377\347\344\321\377\202\347\344\317\377\17\347" \
+ "\343\316\377\346\343\315\377\346\343\314\377\346\343\313\377\346\343" \
+ "\312\377\346\343\311\377\346\343\307\377\346\343\306\377\346\343\305" \
+ "\377\346\343\304\377\346\342\303\377\346\342\302\377\346\342\300\377" \
+ "\346\342\276\377\346\341\275\377\202\345\341\273\377'\345\341\271\377" \
+ "\345\340\267\377\345\340\266\377\345\340\264\377\327\312\232\377\260" \
+ "\217T\377\220a\36\377\217_\34\377\216_\35\377\214^\34\377\213^\34\377" \
+ "\212]\34\377\211\\\34\377\210\\\34\377\207[\33\377\336\324\224\377\344" \
+ "\333\232\377\343\333\227\377\343\332\224\377\343\332\222\377\343\331" \
+ "\220\377\343\331\214\377\343\331\210\377\343\330\204\377\343\330~\377" \
+ "\342\326u\377eY&\37792\21\37771\20\3773-\17\377-(\16\377'#\14\377\"\35" \
+ "\12\377\33\27\10\377\25\22\6\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1" \
+ "\0\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377\14\1\1\0\377\4\3\1\377" \
+ "\10\7\3\377\16\14\4\377\23\20\5\377\31\25\7\377\40\33\11\377%!\13\377" \
+ "+&\15\377/*\16\3774.\20\37782\20\377\20292\21\377\3\232\221^\377\201" \
+ "zM\377F>\33\377\20592\21\377\20382\20\377\20571\20\377\20291\20\377\7" \
+ "<3\21\377>4\21\377\77""4\21\377@5\21\377A6\21\377C7\21\377E8\22\377\202" \
+ "H:\22\377\35J:\23\377L;\23\377M=\23\377O=\24\377Q>\24\377S\77\24\377" \
+ "T@\25\377VA\25\377XC\25\377YC\25\377[D\26\377[E\26\377_E\26\377_F\27" \
+ "\377aG\27\377cH\27\377dI\27\377eJ\27\377gJ\27\377hK\27\377jL\30\377}" \
+ "b3\377\206nA\377\240\212f\377\253\233{\377\271\254\221\377\320\310\266" \
+ "\377\334\331\314\377\347\346\336\377\202\347\346\337\377\203\350\347" \
+ "\340\377\205\350\347\341\377\2\324\313\271\377\204Y\33\377\202\205Y\33" \
+ "\377\31\202V\31\377\202S\31\377\177O\30\377|K\26\377yI\24\377wE\23\377" \
+ "wC\22\377vA\21\377v>\20\377v\77\21\377yC\22\377}F\23\377\201K\25\377" \
+ "\206O\26\377\210T\30\377\213X\32\377\220\\\32\377\222_\33\377\226b\35" \
+ "\377\230c\36\377\227d\36\377\232f\40\377\345\341\316\377\347\344\321" \
+ "\377\347\344\320\377\202\347\344\317\377\7\346\343\316\377\346\343\315" \
+ "\377\346\343\314\377\346\343\312\377\346\343\311\377\346\343\310\377" \
+ "\346\343\307\377\202\346\343\305\377\14\346\343\304\377\346\342\302\377" \
+ "\346\342\301\377\346\342\300\377\346\342\276\377\346\341\274\377\345" \
+ "\341\273\377\345\341\272\377\345\341\271\377\345\340\267\377\326\306" \
+ "\226\377\255\212M\377\202\222a\35\377\1\220`\34\377\202\217_\34\377\36" \
+ "\216_\35\377\216^\35\377\213^\34\377\212]\34\377\211\\\34\377\217f&\377" \
+ "\344\334\234\377\344\333\231\377\343\333\227\377\343\332\224\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377\343\330" \
+ "\202\377\343\327}\377\342\326u\377PG\35\37792\21\37760\20\3773-\17\377" \
+ "-(\16\377'#\14\377\"\35\12\377\32\26\7\377\24\21\5\377\16\14\4\377\10" \
+ "\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377" \
+ "\13\2\2\1\377\5\4\2\377\12\11\3\377\20\16\4\377\26\23\6\377\33\27\10" \
+ "\377#\36\12\377'#\14\377,'\16\3772-\17\37760\20\377\20292\21\377\10S" \
+ "M%\377\344\333\231\377\344\334\234\377\344\334\236\377\274\264\177\377" \
+ "\217\210Z\377ph@\377NG#\377\21092\21\377\14:2\21\377;4\21\377>5\21\377" \
+ "\77""5\21\377@5\21\377A6\22\377C7\22\377E8\22\377F:\23\377I;\23\377H" \
+ ":\23\377K<\24\377\202N=\24\377\22P>\24\377Q\77\24\377S\77\24\377S@\24" \
+ "\377VB\25\377XC\25\377YC\25\377[C\26\377\\D\26\377`G\30\377zf;\377}g" \
+ "\77\377\230\210d\377\230\207c\377\263\246\213\377\267\254\217\377\315" \
+ "\307\261\377\330\323\301\377\202\347\345\331\377\1\347\346\332\377\202" \
+ "\347\346\333\377\1\347\346\334\377\202\347\346\335\377\202\347\346\336" \
+ "\377\202\347\346\337\377\1\350\346\337\377\206\350\347\340\377\30\347" \
+ "\345\335\377\210_\"\377\206Z\33\377\205Z\33\377\204W\32\377\203U\30\377" \
+ "\201R\30\377\177M\26\377}K\25\377zG\24\377yD\22\377wA\21\377v>\21\377" \
+ "w\77\21\377{D\22\377~F\23\377\202J\25\377\206O\26\377\213T\30\377\216" \
+ "X\31\377\221\\\33\377\225`\34\377\230b\35\377\231e\36\377\202\232e\36" \
+ "\377\14\333\317\264\377\347\344\321\377\347\344\320\377\347\344\317\377" \
+ "\347\343\316\377\346\343\315\377\346\343\314\377\346\343\313\377\346" \
+ "\343\312\377\346\343\311\377\346\343\310\377\346\343\306\377\202\346" \
+ "\343\305\377\15\346\343\303\377\346\342\302\377\346\342\301\377\346\342" \
+ "\277\377\346\342\275\377\346\341\274\377\345\341\273\377\345\341\272" \
+ "\377\314\271\207\377\250\202C\377\225c\35\377\224b\35\377\223a\35\377" \
+ "\202\222a\35\377\1\221`\34\377\203\217_\34\377\1\216^\35\377\202\213" \
+ "^\34\377\30\237{;\377\344\334\234\377\343\333\231\377\343\333\226\377" \
+ "\343\332\223\377\343\332\222\377\343\331\217\377\343\331\212\377\343" \
+ "\331\207\377\343\330\202\377\343\327}\377\342\325r\377@8\24\37792\21" \
+ "\37760\20\3772-\17\377,'\16\377&!\13\377!\34\11\377\32\26\7\377\23\20" \
+ "\5\377\15\13\4\377\7\6\2\377\4\3\1\377\377\0\0\0\377\377\0\0\0\377\273" \
+ "\0\0\0\377\14\1\1\0\377\3\3\1\377\7\6\2\377\14\12\4\377\21\16\5\377\30" \
+ "\25\7\377\36\32\11\377$\37\13\377*%\15\377/*\16\3774.\20\37771\20\377" \
+ "\20292\21\377\16\211\201P\377\344\333\231\377\344\334\234\377\344\334" \
+ "\235\377\344\334\240\377\344\335\243\377\344\335\245\377\344\335\246" \
+ "\377\344\336\250\377\301\273\214\377\262\254\177\377\240\232p\377\231" \
+ "\222j\377~wQ\377\202~wS\377\26_X5\377^W2\377^V3\377`W3\377bX4\377cZ5" \
+ "\377eZ5\377g[5\377g[7\377h[6\377j]7\377\202wS\377\212\177[\377\214\177" \
+ "\\\377\215\201\\\377\232\217k\377\254\242\202\377\255\242\202\377\256" \
+ "\245\205\377\313\304\251\377\313\305\252\377\333\330\300\377\202\347" \
+ "\344\321\377\5\347\344\322\377\347\344\323\377\347\345\324\377\347\345" \
+ "\325\377\347\345\326\377\202\347\345\327\377\1\347\345\330\377\202\347" \
+ "\345\331\377\2\347\346\331\377\347\346\332\377\202\347\346\333\377\202" \
+ "\347\346\334\377\202\347\346\335\377\202\347\346\336\377\203\347\346" \
+ "\337\377\202\350\346\337\377\202\350\347\340\377\34\350\346\337\377\234" \
+ "yE\377\207[\34\377\207Z\33\377\207Y\32\377\204V\31\377\204S\27\377\202" \
+ "P\27\377~L\26\377|I\24\377{F\23\377zC\22\377x@\21\377zA\21\377|C\22\377" \
+ "\200H\23\377\203K\24\377\210P\27\377\213S\30\377\220X\32\377\224\\\33" \
+ "\377\226a\34\377\231c\35\377\232e\36\377\233f\36\377\234f\37\377\320" \
+ "\276\234\377\347\344\320\377\202\347\344\317\377\31\347\343\316\377\346" \
+ "\343\315\377\346\343\314\377\346\343\313\377\346\343\312\377\346\343" \
+ "\311\377\346\343\307\377\346\343\306\377\346\343\305\377\346\343\304" \
+ "\377\346\342\303\377\346\342\302\377\346\342\300\377\346\342\277\377" \
+ "\346\342\275\377\337\327\260\377\304\252v\377\242s0\377\227d\36\377\230" \
+ "c\36\377\230d\36\377\225d\35\377\225c\35\377\224b\35\377\223a\35\377" \
+ "\202\222a\35\377\1\220`\34\377\202\217_\34\377\16\216^\35\377\214^\34" \
+ "\377\263\226U\377\344\333\233\377\343\333\231\377\343\333\226\377\343" \
+ "\332\222\377\343\332\221\377\343\331\216\377\343\331\212\377\343\331" \
+ "\207\377\343\330\201\377\343\327{\377\323\305h\377\20292\21\377\12""6" \
+ "0\20\3771,\17\377,'\15\377&!\13\377\40\33\11\377\31\25\7\377\22\17\5" \
+ "\377\15\13\4\377\7\6\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\273" \
+ "\0\0\0\377\14\1\1\0\377\4\3\1\377\10\7\3\377\16\14\4\377\23\20\5\377" \
+ "\31\25\7\377!\34\11\377&!\13\377,'\15\3771,\17\37760\20\37782\20\377" \
+ "\20292\21\377\23\252\242h\377\343\333\231\377\344\333\233\377\344\334" \
+ "\234\377\344\334\240\377\344\335\242\377\344\335\244\377\344\335\246" \
+ "\377\344\336\247\377\344\336\252\377\345\336\254\377\345\337\256\377" \
+ "\345\337\260\377\345\337\261\377\345\340\262\377\345\340\264\377\345" \
+ "\340\266\377\345\340\270\377\345\341\271\377\202\345\341\273\377\17\346" \
+ "\341\275\377\346\342\277\377\346\342\300\377\346\342\302\377\346\342" \
+ "\303\377\346\343\304\377\346\343\305\377\346\343\306\377\346\343\307" \
+ "\377\346\343\310\377\346\343\311\377\346\343\312\377\346\343\314\377" \
+ "\346\343\315\377\346\343\316\377\202\347\344\317\377\3\347\344\320\377" \
+ "\347\344\321\377\347\344\322\377\202\347\344\323\377\5\347\345\324\377" \
+ "\347\345\325\377\347\345\326\377\347\345\327\377\347\345\330\377\203" \
+ "\347\345\331\377\2\347\346\331\377\347\346\332\377\202\347\346\333\377" \
+ "\202\347\346\334\377\203\347\346\335\377\204\347\346\336\377\204\347" \
+ "\346\337\377$\262\230r\377\210\\\34\377\211\\\33\377\210Z\32\377\207" \
+ "W\32\377\205T\31\377\203R\27\377\203M\26\377~K\25\377~H\24\377|E\22\377" \
+ "|C\21\377{B\21\377~D\22\377\200G\23\377\205L\25\377\212P\27\377\215T" \
+ "\30\377\221Y\31\377\225]\33\377\227`\34\377\231d\35\377\234f\36\377\235" \
+ "f\37\377\236g\37\377\305\253\200\377\347\344\320\377\347\344\317\377" \
+ "\347\343\316\377\346\343\315\377\346\343\314\377\346\343\313\377\346" \
+ "\343\312\377\346\343\311\377\346\343\310\377\346\343\307\377\202\346" \
+ "\343\305\377\7\346\343\304\377\346\342\302\377\346\342\301\377\346\342" \
+ "\300\377\323\302\227\377\266\221V\377\237k%\377\202\233f\36\377\10\232" \
+ "e\36\377\231d\36\377\230d\36\377\226c\36\377\226b\35\377\225b\35\377" \
+ "\224b\35\377\223a\35\377\202\222a\35\377\1\220`\34\377\202\217_\34\377" \
+ "\31\216_\35\377\310\263r\377\344\333\232\377\343\333\230\377\343\332" \
+ "\225\377\343\332\222\377\343\332\221\377\343\331\215\377\343\331\211" \
+ "\377\343\331\206\377\343\330\201\377\343\326x\377\275\257W\37792\21\377" \
+ "82\20\37760\20\3771,\17\377+&\15\377&!\13\377\37\33\11\377\31\25\7\377" \
+ "\22\17\5\377\14\12\4\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0" \
+ "\377\273\0\0\0\377\13\2\2\1\377\5\4\1\377\11\10\3\377\17\15\5\377\25" \
+ "\22\6\377\33\27\10\377\"\35\12\377'#\14\377-(\16\3773-\17\37771\20\377" \
+ "\20392\21\377\33\263\254p\377\343\333\230\377\344\333\232\377\344\334" \
+ "\234\377\344\334\237\377\344\335\241\377\344\335\243\377\344\335\245" \
+ "\377\344\336\247\377\344\336\251\377\345\336\253\377\345\337\255\377" \
+ "\345\337\257\377\345\337\261\377\345\340\262\377\345\340\264\377\345" \
+ "\340\266\377\345\340\267\377\345\341\271\377\345\341\272\377\345\341" \
+ "\273\377\346\341\274\377\346\342\276\377\346\342\300\377\346\342\301" \
+ "\377\346\342\302\377\346\343\304\377\202\346\343\305\377\10\346\343\307" \
+ "\377\346\343\310\377\346\343\311\377\346\343\312\377\346\343\313\377" \
+ "\346\343\314\377\346\343\315\377\347\343\316\377\202\347\344\317\377" \
+ "\6\347\344\320\377\347\344\321\377\347\344\322\377\347\344\323\377\347" \
+ "\344\324\377\347\345\325\377\202\347\345\326\377\2\347\345\327\377\347" \
+ "\345\330\377\203\347\345\331\377\2\347\346\331\377\347\346\332\377\202" \
+ "\347\346\333\377\203\347\346\334\377\203\347\346\335\377\206\347\346" \
+ "\336\377\27\303\262\225\377\212]\34\377\213]\33\377\212[\32\377\210Y" \
+ "\33\377\207V\31\377\206R\27\377\203P\26\377\201M\26\377\200I\24\377~" \
+ "G\23\377}D\22\377}C\22\377\200E\22\377\203H\23\377\207L\25\377\212P\26" \
+ "\377\216U\30\377\222Y\32\377\226^\33\377\230`\34\377\232d\35\377\236" \
+ "f\36\377\202\237h\37\377\1\275\233h\377\202\347\344\317\377\10\347\343" \
+ "\316\377\346\343\315\377\346\343\314\377\346\343\313\377\346\343\312" \
+ "\377\346\343\311\377\346\343\307\377\346\343\306\377\202\346\343\305" \
+ "\377\5\346\343\303\377\337\326\261\377\305\250t\377\252z8\377\237h\37" \
+ "\377\202\236g\37\377\13\235f\37\377\234f\37\377\233e\36\377\232d\35\377" \
+ "\231d\35\377\227c\35\377\226c\35\377\226b\35\377\225b\35\377\225c\35" \
+ "\377\224b\35\377\202\222a\35\377\1\221`\34\377\202\217_\34\377\30\334" \
+ "\316\217\377\344\333\232\377\343\333\227\377\343\332\224\377\343\332" \
+ "\222\377\343\331\220\377\343\331\215\377\343\331\210\377\343\330\204" \
+ "\377\343\330~\377\343\326x\377\237\225J\37792\21\37782\20\3775/\17\377" \
+ "0+\17\377+&\15\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\13" \
+ "\11\3\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377" \
+ "\13\3\3\1\377\5\4\2\377\12\11\3\377\17\15\4\377\26\23\6\377\34\30\10" \
+ "\377#\36\12\377)%\14\377.)\16\3774.\20\37782\20\377\20392\21\377\33\241" \
+ "\231b\377\343\333\227\377\344\333\232\377\344\334\234\377\344\334\236" \
+ "\377\344\334\240\377\344\335\243\377\344\335\245\377\344\336\247\377" \
+ "\344\336\251\377\345\336\253\377\345\337\255\377\345\337\256\377\345" \
+ "\337\260\377\345\340\262\377\345\340\263\377\345\340\265\377\345\340" \
+ "\267\377\345\341\270\377\345\341\272\377\345\341\273\377\346\341\274" \
+ "\377\346\342\275\377\346\342\277\377\346\342\300\377\346\342\302\377" \
+ "\346\343\303\377\202\346\343\305\377\3\346\343\306\377\346\343\307\377" \
+ "\346\343\311\377\202\346\343\312\377\3\346\343\314\377\346\343\315\377" \
+ "\346\343\316\377\202\347\344\317\377\3\347\344\320\377\347\344\321\377" \
+ "\347\344\322\377\202\347\344\323\377\3\347\345\324\377\347\345\325\377" \
+ "\347\345\326\377\202\347\345\327\377\1\347\345\330\377\204\347\345\331" \
+ "\377\202\347\346\332\377\202\347\346\333\377\203\347\346\334\377\207" \
+ "\347\346\335\377\1\327\317\275\377\202\213^\34\377\24\214]\33\377\213" \
+ "Z\32\377\212X\32\377\206S\30\377\206Q\27\377\204N\26\377\201J\24\377" \
+ "\200H\23\377\200E\22\377\177D\22\377\200E\22\377\203I\23\377\210N\25" \
+ "\377\213Q\26\377\217U\31\377\224Y\31\377\226^\33\377\231a\34\377\235" \
+ "e\35\377\237g\36\377\202\240i\37\377\4\265\213Q\377\347\344\317\377\347" \
+ "\343\316\377\346\343\315\377\202\346\343\314\377\12\346\343\312\377\346" \
+ "\343\311\377\346\343\310\377\346\343\307\377\346\343\306\377\342\333" \
+ "\272\377\314\264\204\377\263\210I\377\242i\37\377\240h\37\377\202\240" \
+ "i\37\377\202\237h\37\377\4\236g\36\377\235f\36\377\234d\36\377\231d\35" \
+ "\377\202\230c\35\377\"\227c\35\377\226b\35\377\230b\35\377\226b\35\377" \
+ "\225c\35\377\224b\35\377\223a\35\377\222a\35\377\221`\34\377\231m*\377" \
+ "\344\334\234\377\344\333\231\377\343\333\227\377\343\332\223\377\343" \
+ "\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377\343\330" \
+ "\202\377\343\327}\377\342\326u\377\205{9\37792\21\37782\20\3775/\17\377" \
+ "/*\16\377*%\15\377$\37\13\377\35\31\10\377\27\24\6\377\20\16\4\377\12" \
+ "\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377" \
+ "\12\3\3\1\377\6\5\2\377\13\11\3\377\20\16\4\377\27\24\6\377\35\31\10" \
+ "\377#\36\12\377)%\14\377/*\16\3775/\17\377\20292\21\377\26JB\35\3779" \
+ "2\21\377rk=\377\343\333\227\377\344\333\231\377\344\334\234\377\344\334" \
+ "\235\377\344\334\240\377\344\335\242\377\344\335\245\377\344\335\246" \
+ "\377\344\336\250\377\344\336\252\377\345\336\254\377\345\337\256\377" \
+ "\345\337\260\377\345\337\261\377\345\340\263\377\345\340\264\377\345" \
+ "\340\266\377\345\340\270\377\345\341\271\377\202\345\341\273\377\6\346" \
+ "\341\275\377\346\342\276\377\346\342\300\377\346\342\301\377\346\342" \
+ "\302\377\346\343\304\377\202\346\343\305\377\10\346\343\307\377\346\343" \
+ "\310\377\346\343\311\377\346\343\312\377\346\343\313\377\346\343\314" \
+ "\377\346\343\315\377\347\343\316\377\202\347\344\317\377\3\347\344\320" \
+ "\377\347\344\321\377\347\344\322\377\202\347\344\323\377\3\347\345\324" \
+ "\377\347\345\325\377\347\345\326\377\202\347\345\327\377\1\347\345\330" \
+ "\377\204\347\345\331\377\2\347\346\331\377\347\346\332\377\204\347\346" \
+ "\333\377\207\347\346\334\377&\346\344\332\377\217d%\377\216_\35\377\215" \
+ "^\34\377\214[\33\377\212X\31\377\211V\32\377\210S\30\377\206O\26\377" \
+ "\204L\25\377\202I\23\377\201F\23\377\201E\22\377\202F\22\377\205J\23" \
+ "\377\211M\25\377\215Q\26\377\220V\30\377\224Y\31\377\230]\33\377\232" \
+ "a\34\377\237e\36\377\240h\37\377\242i\37\377\241i\37\377\254y7\377\347" \
+ "\344\317\377\347\343\316\377\346\343\315\377\346\343\314\377\346\343" \
+ "\313\377\346\343\312\377\346\343\311\377\342\333\275\377\317\270\213" \
+ "\377\270\217R\377\246m\"\377\244j\37\377\203\243i\37\377\202\241i\37" \
+ "\377\6\240h\37\377\237g\36\377\237f\36\377\235d\35\377\233b\35\377\232" \
+ "b\35\377\203\230b\35\377\1\230c\35\377\202\230b\35\377\36\226b\35\377" \
+ "\225d\35\377\224b\35\377\223a\35\377\222a\35\377\257\214J\377\344\333" \
+ "\233\377\343\333\231\377\343\333\226\377\343\332\223\377\343\332\221" \
+ "\377\343\331\216\377\343\331\212\377\343\331\207\377\343\330\202\377" \
+ "\343\327{\377\342\325r\377e\\'\37792\21\37771\20\3774.\20\377.)\16\377" \
+ ")%\14\377#\36\12\377\34\30\10\377\26\23\6\377\17\15\4\377\11\10\3\377" \
+ "\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377\12\3\3" \
+ "\1\377\6\5\2\377\13\11\3\377\21\16\5\377\27\24\6\377\35\31\10\377$\37" \
+ "\13\377*%\15\3770+\17\37760\20\377\20292\21\377\36F>\32\377MF!\377@8" \
+ "\26\377\323\311\211\377\343\333\231\377\344\333\233\377\344\334\234\377" \
+ "\344\334\237\377\344\335\241\377\344\335\244\377\344\335\246\377\344" \
+ "\336\247\377\344\336\251\377\345\336\253\377\345\337\255\377\345\337" \
+ "\257\377\345\337\261\377\345\340\262\377\345\340\264\377\345\340\266" \
+ "\377\345\340\267\377\345\341\271\377\345\341\272\377\345\341\273\377" \
+ "\346\341\274\377\346\342\276\377\346\342\277\377\346\342\301\377\346" \
+ "\342\302\377\346\343\303\377\202\346\343\305\377\12\346\343\306\377\346" \
+ "\343\307\377\346\343\310\377\346\343\311\377\346\343\312\377\346\343" \
+ "\314\377\346\343\315\377\346\343\316\377\347\343\316\377\347\344\317" \
+ "\377\202\347\344\320\377\7\347\344\321\377\347\344\322\377\347\344\323" \
+ "\377\347\344\324\377\347\345\324\377\347\345\325\377\347\345\326\377" \
+ "\202\347\345\327\377\202\347\345\330\377\204\347\345\331\377\203\347" \
+ "\346\332\377\211\347\346\333\377!\246\202P\377\217_\34\377\216^\34\377" \
+ "\215\\\33\377\215[\32\377\214X\32\377\212U\30\377\210Q\27\377\207N\26" \
+ "\377\206L\25\377\204H\23\377\203F\22\377\204G\22\377\210J\24\377\212" \
+ "M\25\377\216Q\27\377\222U\30\377\225Z\32\377\231_\32\377\235b\34\377" \
+ "\240f\36\377\241g\37\377\243i\37\377\244j\37\377\245l\"\377\345\341\311" \
+ "\377\346\343\315\377\346\343\314\377\346\343\313\377\340\331\274\377" \
+ "\316\266\212\377\271\215R\377\247m#\377\203\246l\40\377\202\246k\37\377" \
+ "\10\245j\37\377\244j\37\377\243h\37\377\241h\36\377\240g\36\377\240f" \
+ "\36\377\236d\36\377\235b\34\377\203\232a\34\377#\231a\35\377\230b\35" \
+ "\377\231b\35\377\230c\35\377\230b\35\377\226c\35\377\226d\36\377\225" \
+ "d\35\377\224b\35\377\223a\35\377\310\262p\377\344\333\232\377\343\333" \
+ "\230\377\343\332\225\377\343\332\222\377\343\332\221\377\343\331\215" \
+ "\377\343\331\211\377\343\331\206\377\343\330\201\377\343\327{\377\342" \
+ "\325r\377C<\26\37792\21\37760\20\3773-\17\377-(\16\377'#\14\377\"\35" \
+ "\12\377\33\27\10\377\24\21\5\377\17\15\5\377\11\10\3\377\5\4\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377\12\3\3\1\377\6\5\2" \
+ "\377\13\11\3\377\21\16\5\377\27\24\6\377\36\32\11\377$\37\13\377+&\15" \
+ "\3770+\17\37760\20\377\20392\21\377\36f^2\37792\21\377ld8\377\343\333" \
+ "\230\377\344\333\232\377\344\334\234\377\344\334\236\377\344\334\240" \
+ "\377\344\335\243\377\344\335\245\377\344\336\247\377\344\336\251\377" \
+ "\345\336\253\377\345\337\255\377\345\337\256\377\345\337\260\377\345" \
+ "\337\261\377\345\340\263\377\345\340\264\377\345\340\266\377\345\341" \
+ "\270\377\345\341\272\377\345\341\273\377\346\341\274\377\346\342\275" \
+ "\377\346\342\277\377\346\342\300\377\346\342\301\377\346\342\302\377" \
+ "\346\343\304\377\202\346\343\305\377\10\346\343\307\377\346\343\310\377" \
+ "\346\343\311\377\346\343\312\377\346\343\313\377\346\343\314\377\346" \
+ "\343\315\377\346\343\316\377\202\347\344\317\377\1\347\344\320\377\202" \
+ "\347\344\321\377\6\347\344\322\377\347\344\323\377\347\344\324\377\347" \
+ "\345\324\377\347\345\325\377\347\345\326\377\203\347\345\327\377\1\347" \
+ "\345\330\377\205\347\345\331\377\1\347\346\331\377\204\347\346\332\377" \
+ "\205\347\346\333\377\2\272\242{\377\217_\34\377\202\216^\34\377\31\216" \
+ "\\\33\377\213X\32\377\213V\30\377\212S\30\377\210P\26\377\207M\25\377" \
+ "\206J\24\377\205G\22\377\206H\23\377\207K\24\377\214N\25\377\217Q\26" \
+ "\377\223U\27\377\227Z\31\377\232_\33\377\236c\34\377\240e\35\377\243" \
+ "h\36\377\245j\37\377\246k\37\377\246l\40\377\336\325\267\377\333\315" \
+ "\254\377\306\247v\377\266\210F\377\207\250l\40\377\10\247l\40\377\246" \
+ "k\40\377\245j\37\377\245i\37\377\243h\36\377\241f\35\377\240d\35\377" \
+ "\237c\34\377\202\234a\34\377\2\233`\34\377\232`\33\377\202\232a\34\377" \
+ "\5\231a\34\377\230b\35\377\231b\35\377\230c\35\377\230d\35\377\202\230" \
+ "d\36\377\16\225d\35\377\225d\37\377\337\323\222\377\344\333\231\377\343" \
+ "\333\227\377\343\332\224\377\343\332\222\377\343\331\220\377\343\331" \
+ "\214\377\343\331\210\377\343\330\204\377\343\330~\377\343\326x\377\311" \
+ "\276a\377\20292\21\377\13""60\20\3772-\17\377,'\16\377&!\13\377!\34\11" \
+ "\377\31\25\7\377\23\20\5\377\16\14\4\377\10\7\3\377\4\3\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\273\0\0\0\377\13\3\3\1\377\6\5\2\377\13" \
+ "\11\3\377\20\16\4\377\27\24\6\377\35\31\10\377$\37\13\377*%\15\3770+" \
+ "\17\3775/\17\37782\20\377\20292\21\377\1rk<\377\20292\21\377\33\203|" \
+ "L\377\344\333\231\377\344\334\234\377\344\334\235\377\344\334\240\377" \
+ "\344\335\243\377\344\335\245\377\344\335\246\377\344\336\250\377\344" \
+ "\336\252\377\345\336\254\377\345\337\256\377\345\337\260\377\345\337" \
+ "\261\377\345\340\262\377\345\340\264\377\345\340\266\377\345\340\267" \
+ "\377\345\341\271\377\345\341\272\377\345\341\273\377\346\341\274\377" \
+ "\346\342\276\377\346\342\277\377\346\342\301\377\346\342\302\377\346" \
+ "\343\303\377\202\346\343\305\377\11\346\343\306\377\346\343\307\377\346" \
+ "\343\310\377\346\343\311\377\346\343\312\377\346\343\313\377\346\343" \
+ "\314\377\346\343\315\377\347\343\316\377\202\347\344\317\377\2\347\344" \
+ "\320\377\347\344\321\377\202\347\344\322\377\4\347\344\323\377\347\344" \
+ "\324\377\347\345\324\377\347\345\325\377\202\347\345\326\377\202\347" \
+ "\345\327\377\202\347\345\330\377\207\347\345\331\377\202\347\346\331" \
+ "\377\203\347\346\332\377\34\347\346\331\377\320\303\246\377\220`\34\377" \
+ "\221`\35\377\221_\34\377\217]\33\377\217Z\32\377\216X\31\377\214T\27" \
+ "\377\212Q\27\377\212N\25\377\211L\25\377\210I\23\377\207I\23\377\211" \
+ "J\23\377\215N\25\377\221R\26\377\224U\30\377\230Z\31\377\233^\33\377" \
+ "\237c\34\377\241f\35\377\245i\37\377\246l\40\377\247k\40\377\250l\40" \
+ "\377\254s*\377\250m\40\377\210\251m\40\377\11\250l\37\377\250j\37\377" \
+ "\246i\37\377\245h\36\377\244g\36\377\242e\35\377\241d\35\377\240b\35" \
+ "\377\236a\33\377\202\234_\33\377\202\233_\33\377\202\232`\33\377!\232" \
+ "a\34\377\231a\34\377\231b\35\377\231d\35\377\230d\35\377\231d\36\377" \
+ "\227d\36\377\230d\36\377\247\177:\377\344\333\233\377\343\333\231\377" \
+ "\343\333\226\377\343\332\223\377\343\332\222\377\343\331\217\377\343" \
+ "\331\214\377\343\331\207\377\343\330\202\377\343\327}\377\342\326u\377" \
+ "\242\226H\37792\21\37782\20\37760\20\3770+\17\377+&\15\377&!\13\377\37" \
+ "\33\11\377\31\25\7\377\22\17\5\377\14\12\4\377\7\6\2\377\3\3\1\377\377" \
+ "\0\0\0\377\377\0\0\0\377\274\0\0\0\377\13\2\2\1\377\5\4\2\377\12\11\3" \
+ "\377\20\16\4\377\26\23\6\377\35\31\10\377#\36\12\377)%\14\377/*\16\377" \
+ "4.\20\37782\20\377\20292\21\377\2wo\77\377C<\31\377\20292\21\377\33y" \
+ "rE\377\336\325\227\377\344\334\234\377\344\334\237\377\344\335\241\377" \
+ "\344\335\244\377\344\335\246\377\344\336\247\377\344\336\251\377\345" \
+ "\336\253\377\345\337\255\377\345\337\257\377\345\337\261\377\345\340" \
+ "\262\377\345\340\263\377\345\340\265\377\345\340\267\377\345\341\270" \
+ "\377\345\341\272\377\345\341\273\377\346\341\274\377\346\342\275\377" \
+ "\346\342\277\377\346\342\300\377\346\342\301\377\346\342\302\377\346" \
+ "\343\304\377\202\346\343\305\377\3\346\343\306\377\346\343\307\377\346" \
+ "\343\311\377\202\346\343\312\377\1\346\343\314\377\202\346\343\315\377" \
+ "\1\347\343\316\377\202\347\344\317\377\2\347\344\320\377\347\344\321" \
+ "\377\202\347\344\322\377\202\347\344\323\377\1\347\345\324\377\202\347" \
+ "\345\325\377\1\347\345\326\377\203\347\345\327\377\202\347\345\330\377" \
+ "\213\347\345\331\377\27\341\335\317\377\222b\40\377\222a\35\377\222a" \
+ "\34\377\221]\33\377\220[\32\377\220Y\32\377\216V\30\377\214R\27\377\213" \
+ "P\26\377\212M\25\377\211J\24\377\210I\23\377\213K\23\377\216N\25\377" \
+ "\221S\27\377\224V\30\377\230Y\30\377\234]\33\377\237a\34\377\242e\35" \
+ "\377\244g\36\377\250l\40\377\204\251m\40\377\202\253n\40\3776\252n!\377" \
+ "\252m!\377\252m\40\377\252l\40\377\251k\40\377\250j\37\377\251j\36\377" \
+ "\250i\36\377\247h\36\377\245f\35\377\245e\35\377\243d\35\377\241b\34" \
+ "\377\236`\33\377\235^\33\377\235]\32\377\233]\31\377\233^\33\377\232" \
+ "^\32\377\233`\33\377\232`\34\377\232a\34\377\233b\34\377\232c\35\377" \
+ "\233c\35\377\233e\36\377\232e\36\377\231e\36\377\227d\36\377\303\251" \
+ "e\377\344\333\232\377\343\333\230\377\343\332\225\377\343\332\222\377" \
+ "\343\332\221\377\343\331\216\377\343\331\212\377\343\331\206\377\343" \
+ "\330\201\377\343\327{\377\342\325r\377yn1\37792\21\37782\20\3775/\17" \
+ "\377/*\16\377*%\15\377$\37\13\377\36\32\11\377\27\24\6\377\21\16\5\377" \
+ "\13\11\3\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\274\0\0" \
+ "\0\377\13\1\1\0\377\5\4\1\377\11\10\3\377\17\15\4\377\25\22\6\377\33" \
+ "\27\10\377#\36\12\377($\14\377.)\16\3773-\17\37771\20\377\20292\21\377" \
+ "\2OH\"\377wp@\377\20392\21\377&SM&\377\276\266~\377\344\334\236\377\344" \
+ "\334\240\377\344\335\243\377\344\335\245\377\344\335\246\377\344\336" \
+ "\250\377\345\336\253\377\345\337\255\377\345\337\256\377\345\337\260" \
+ "\377\345\337\261\377\345\340\263\377\345\340\264\377\345\340\266\377" \
+ "\345\340\267\377\345\341\271\377\345\341\272\377\345\341\273\377\346" \
+ "\341\274\377\346\342\276\377\346\342\277\377\346\342\301\377\346\342" \
+ "\302\377\346\342\303\377\346\343\304\377\346\343\305\377\346\343\306" \
+ "\377\346\343\307\377\346\343\310\377\346\343\311\377\346\343\312\377" \
+ "\346\343\313\377\346\343\314\377\346\343\315\377\346\343\316\377\347" \
+ "\343\316\377\202\347\344\317\377\2\347\344\320\377\347\344\321\377\202" \
+ "\347\344\322\377\202\347\344\323\377\202\347\345\324\377\1\347\345\325" \
+ "\377\202\347\345\326\377\203\347\345\327\377\204\347\345\330\377\210" \
+ "\347\345\331\377\30\243yA\377\224b\35\377\224a\34\377\224`\34\377\223" \
+ "]\33\377\221Z\31\377\220X\31\377\216U\30\377\216Q\27\377\214O\26\377" \
+ "\213L\24\377\213K\23\377\214L\24\377\217N\25\377\222Q\25\377\226U\27" \
+ "\377\231Z\30\377\234]\32\377\237`\33\377\243d\35\377\245h\36\377\250" \
+ "j\37\377\251l\40\377\253n\40\377\202\252n!\377\10\252m\40\377\253m\40" \
+ "\377\252l\40\377\253m\40\377\252l\37\377\252k\37\377\252j\37\377\250" \
+ "h\36\377\202\247g\36\377\15\246f\35\377\245d\35\377\244c\33\377\242`" \
+ "\33\377\240_\32\377\237]\33\377\235\\\32\377\233[\32\377\233\\\32\377" \
+ "\234\\\31\377\234]\33\377\233^\33\377\233`\33\377\202\234b\34\377\37" \
+ "\234c\35\377\234d\35\377\234e\36\377\234f\37\377\233f\36\377\232f\40" \
+ "\377\337\323\222\377\344\333\231\377\343\333\227\377\343\332\224\377" \
+ "\343\332\222\377\343\331\220\377\343\331\215\377\343\331\211\377\343" \
+ "\330\204\377\343\330~\377\343\326x\377\342\325n\377OG\34\37792\21\377" \
+ "71\20\3774.\20\377.)\16\377)%\14\377#\36\12\377\34\30\10\377\26\23\6" \
+ "\377\17\15\4\377\12\11\3\377\5\4\2\377\1\1\0\377\377\0\0\0\377\377\0" \
+ "\0\0\377\274\0\0\0\377\13\1\1\0\377\4\3\1\377\10\7\3\377\16\14\4\377" \
+ "\24\21\5\377\32\26\7\377\"\35\12\377'#\14\377,'\16\3772-\17\37760\20" \
+ "\377\20392\21\377\1\241\231`\377\20592\21\377\31nf<\377\307\276\207\377" \
+ "\344\335\242\377\344\335\244\377\344\335\246\377\344\336\247\377\344" \
+ "\336\251\377\345\336\253\377\345\337\255\377\345\337\257\377\345\337" \
+ "\261\377\345\340\262\377\345\340\263\377\345\340\265\377\345\340\267" \
+ "\377\345\341\270\377\345\341\272\377\345\341\273\377\346\341\274\377" \
+ "\346\341\275\377\346\342\276\377\346\342\300\377\346\342\301\377\346" \
+ "\342\302\377\346\343\303\377\202\346\343\305\377\12\346\343\306\377\346" \
+ "\343\307\377\346\343\310\377\346\343\311\377\346\343\312\377\346\343" \
+ "\313\377\346\343\314\377\346\343\315\377\346\343\316\377\347\343\316" \
+ "\377\202\347\344\317\377\1\347\344\320\377\202\347\344\321\377\1\347" \
+ "\344\322\377\202\347\344\323\377\2\347\344\324\377\347\345\324\377\202" \
+ "\347\345\325\377\202\347\345\326\377\205\347\345\327\377\210\347\345" \
+ "\330\377\30\266\230j\377\224b\35\377\225b\35\377\225`\35\377\225^\34" \
+ "\377\223\\\32\377\222X\30\377\221V\30\377\217S\27\377\216P\26\377\216" \
+ "N\25\377\216L\24\377\216M\24\377\220N\25\377\223Q\26\377\227T\27\377" \
+ "\232Y\31\377\235]\32\377\240a\34\377\243c\35\377\245e\35\377\250i\37" \
+ "\377\251k\37\377\252l\40\377\202\254m\40\377\2\254l\40\377\254m\37\377" \
+ "\202\253k\37\377\202\253j\36\377\12\251i\36\377\251g\35\377\250f\35\377" \
+ "\247d\34\377\247d\35\377\245b\34\377\243a\33\377\241_\33\377\240]\32" \
+ "\377\236[\31\377\202\234Z\30\377\31\234Z\32\377\234[\32\377\234\\\32" \
+ "\377\234^\33\377\234_\33\377\234a\34\377\235b\34\377\235d\34\377\235" \
+ "e\35\377\236f\36\377\234f\37\377\233f\36\377\260\211E\377\344\333\233" \
+ "\377\343\333\231\377\343\333\226\377\343\332\223\377\343\332\222\377" \
+ "\343\331\217\377\343\331\214\377\343\331\210\377\343\330\202\377\343" \
+ "\327}\377\342\326u\377\315\301`\377\20292\21\377\13""60\20\3772-\17\377" \
+ ",'\16\377'#\14\377\"\35\12\377\32\26\7\377\24\21\5\377\17\15\5\377\11" \
+ "\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\275\0\0\0\377" \
+ "\13\3\3\1\377\7\6\2\377\15\13\4\377\22\17\5\377\31\25\7\377\40\33\11" \
+ "\377&!\13\377+&\15\3770+\17\37760\20\37782\20\377\20292\21\377\2\234" \
+ "\222Y\377MF!\377\20692\21\377\30c\\5\377\250\241p\377\340\331\241\377" \
+ "\344\336\247\377\344\336\251\377\345\336\253\377\345\337\255\377\345" \
+ "\337\256\377\345\337\260\377\345\337\261\377\345\340\263\377\345\340" \
+ "\264\377\345\340\266\377\345\340\267\377\345\341\271\377\345\341\272" \
+ "\377\345\341\273\377\346\341\274\377\346\342\276\377\346\342\277\377" \
+ "\346\342\300\377\346\342\302\377\346\342\303\377\346\343\304\377\202" \
+ "\346\343\305\377\12\346\343\306\377\346\343\307\377\346\343\310\377\346" \
+ "\343\311\377\346\343\312\377\346\343\313\377\346\343\314\377\346\343" \
+ "\315\377\346\343\316\377\347\343\316\377\202\347\344\317\377\1\347\344" \
+ "\320\377\202\347\344\321\377\202\347\344\322\377\202\347\344\323\377" \
+ "\2\347\344\324\377\347\345\324\377\203\347\345\325\377\203\347\345\326" \
+ "\377\211\347\345\327\377\36\311\266\224\377\225d\35\377\226d\36\377\226" \
+ "b\35\377\226`\34\377\226]\33\377\224Z\33\377\222W\30\377\222U\30\377" \
+ "\221R\26\377\220O\26\377\217M\24\377\220N\24\377\221N\24\377\224Q\26" \
+ "\377\227T\27\377\233X\27\377\235[\31\377\240^\32\377\243b\34\377\245" \
+ "d\35\377\247g\35\377\251i\36\377\253k\36\377\253k\37\377\254j\37\377" \
+ "\253k\36\377\254j\37\377\253i\37\377\253i\36\377\202\252g\36\3771\251" \
+ "f\35\377\250e\35\377\250d\34\377\246b\33\377\246a\32\377\244`\32\377" \
+ "\243^\31\377\241\\\32\377\237Z\31\377\235Y\31\377\235X\31\377\234X\30" \
+ "\377\234Y\30\377\235Z\32\377\234\\\32\377\235]\32\377\236`\32\377\236" \
+ "a\34\377\236c\34\377\237d\35\377\237f\36\377\237g\36\377\236g\37\377" \
+ "\234f\37\377\314\265s\377\344\333\232\377\343\333\230\377\343\332\225" \
+ "\377\343\332\222\377\343\332\221\377\343\331\216\377\343\331\212\377" \
+ "\343\331\206\377\343\330\201\377\343\327{\377\342\325r\377\234\220C\377" \
+ "92\21\37782\20\37760\20\3771,\17\377,'\15\377&!\13\377\40\33\11\377\31" \
+ "\25\7\377\23\20\5\377\15\13\4\377\7\6\2\377\4\3\1\377\377\0\0\0\377\377" \
+ "\0\0\0\377\276\0\0\0\377\13\3\3\1\377\6\5\2\377\13\11\3\377\21\16\5\377" \
+ "\30\25\7\377\36\32\11\377$\37\13\377*%\15\377/*\16\3775/\17\37782\20" \
+ "\377\20292\21\377\2lc5\377\216\205P\377\21092\21\377\16A9\30\377phA\377" \
+ "\250\241s\377\326\320\235\377\345\336\253\377\345\337\255\377\345\337" \
+ "\257\377\345\337\261\377\345\340\262\377\345\340\263\377\345\340\265" \
+ "\377\345\340\267\377\345\341\270\377\345\341\271\377\202\345\341\273" \
+ "\377\7\346\341\275\377\346\342\276\377\346\342\277\377\346\342\301\377" \
+ "\346\342\302\377\346\342\303\377\346\343\304\377\202\346\343\305\377" \
+ "\202\346\343\307\377\202\346\343\311\377\6\346\343\312\377\346\343\313" \
+ "\377\346\343\314\377\346\343\315\377\346\343\316\377\347\343\316\377" \
+ "\202\347\344\317\377\202\347\344\320\377\202\347\344\321\377\1\347\344" \
+ "\322\377\203\347\344\323\377\1\347\344\324\377\202\347\345\324\377\203" \
+ "\347\345\325\377\211\347\345\326\377Q\335\326\300\377\226d\35\377\230" \
+ "d\36\377\227c\35\377\227`\34\377\227^\34\377\225\\\32\377\224Y\31\377" \
+ "\223W\27\377\222T\27\377\221Q\26\377\221O\25\377\221N\24\377\222O\25" \
+ "\377\225Q\26\377\230S\27\377\233W\30\377\236Z\31\377\237]\32\377\243" \
+ "`\33\377\245c\34\377\247d\34\377\251g\35\377\251h\35\377\252g\36\377" \
+ "\253h\36\377\254h\36\377\253h\36\377\254h\35\377\253g\35\377\253f\35" \
+ "\377\252e\34\377\251c\34\377\251b\33\377\250a\33\377\246`\33\377\245" \
+ "_\32\377\244]\32\377\243\\\31\377\242Z\31\377\240Y\30\377\236X\27\377" \
+ "\235V\30\377\234W\30\377\235Y\30\377\234Z\30\377\234[\32\377\235^\32" \
+ "\377\236_\33\377\237b\34\377\240d\35\377\240e\36\377\240h\37\377\240" \
+ "i\37\377\237h\37\377\243p)\377\341\330\227\377\344\333\231\377\343\333" \
+ "\227\377\343\332\224\377\343\332\222\377\343\331\217\377\343\331\214" \
+ "\377\343\331\210\377\343\330\204\377\343\330~\377\343\326x\377\342\325" \
+ "n\377ja(\37792\21\37782\20\3775/\17\377/*\16\377*%\15\377$\37\13\377" \
+ "\36\32\11\377\30\25\7\377\21\16\5\377\14\12\4\377\6\5\2\377\3\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\276\0\0\0\377\13\2\2\1\377\5\4\2\377\12" \
+ "\11\3\377\17\15\4\377\26\23\6\377\34\30\10\377#\36\12\377($\14\377-(" \
+ "\16\3773-\17\37771\20\377\20292\21\377\3@8\25\377\314\301}\377>7\25\377" \
+ "\21192\21\377\30:2\21\377;4\21\377XN)\377\177wN\377\247\237s\377\305" \
+ "\275\220\377\345\337\261\377\345\340\262\377\345\340\264\377\345\340" \
+ "\266\377\345\340\267\377\345\341\271\377\345\341\272\377\345\341\273" \
+ "\377\346\341\274\377\346\342\275\377\346\342\276\377\346\342\300\377" \
+ "\346\342\301\377\346\342\302\377\346\343\303\377\346\343\304\377\346" \
+ "\343\305\377\346\343\306\377\202\346\343\307\377\202\346\343\311\377" \
+ "\3\346\343\312\377\346\343\313\377\346\343\314\377\202\346\343\315\377" \
+ "\1\347\343\316\377\203\347\344\317\377\1\347\344\320\377\202\347\344" \
+ "\321\377\202\347\344\322\377\204\347\344\323\377\1\347\344\324\377\202" \
+ "\347\345\324\377\212\347\345\325\377\32\241s3\377\231d\36\377\230d\35" \
+ "\377\230b\35\377\230`\34\377\227^\32\377\226[\32\377\225X\30\377\223" \
+ "U\30\377\222R\26\377\223P\25\377\222O\25\377\223O\25\377\226Q\25\377" \
+ "\231S\26\377\233U\27\377\235Y\31\377\240\\\32\377\243^\31\377\246a\32" \
+ "\377\246b\33\377\250d\34\377\251e\34\377\253f\35\377\253g\35\377\253" \
+ "f\34\377\202\254f\34\377\4\254e\34\377\253d\33\377\252b\33\377\252a\32" \
+ "\377\202\251`\32\377.\246]\31\377\245]\31\377\244[\30\377\244Z\31\377" \
+ "\243X\30\377\237X\27\377\237V\27\377\236W\27\377\236X\27\377\235Y\31" \
+ "\377\236[\31\377\236]\31\377\240_\33\377\240b\34\377\241d\35\377\241" \
+ "f\35\377\241f\36\377\241i\37\377\240h\37\377\240i\37\377\300\240\\\377" \
+ "\344\333\232\377\343\333\230\377\343\332\225\377\343\332\222\377\343" \
+ "\332\221\377\343\331\216\377\343\331\212\377\343\331\207\377\343\330" \
+ "\202\377\343\327}\377\342\326u\377\325\310d\377>6\23\37792\21\37771\20" \
+ "\3773-\17\377-(\16\377($\14\377#\36\12\377\34\30\10\377\26\23\6\377\17" \
+ "\15\4\377\12\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377" \
+ "\276\0\0\0\377\13\1\1\0\377\4\3\1\377\10\7\3\377\16\14\4\377\24\21\5" \
+ "\377\32\26\7\377!\34\11\377&!\13\377,'\16\3772-\17\37760\20\377\2039" \
+ "2\21\377\2\245\234`\377un>\377\21192\21\377\26;3\21\377;4\21\377>5\21" \
+ "\377@6\21\377@6\22\377C7\22\377D7\22\377`U-\377}rI\377\213\200W\377\247" \
+ "\236u\377\270\260\210\377\310\301\230\377\331\323\254\377\345\341\273" \
+ "\377\346\341\274\377\346\342\275\377\346\342\277\377\346\342\300\377" \
+ "\346\342\301\377\346\342\302\377\346\343\303\377\202\346\343\305\377" \
+ "\3\346\343\306\377\346\343\307\377\346\343\310\377\202\346\343\311\377" \
+ "\3\346\343\312\377\346\343\313\377\346\343\314\377\202\346\343\315\377" \
+ "\1\347\343\316\377\203\347\344\317\377\4\335\327\277\377\322\310\254" \
+ "\377\322\310\255\377\332\323\273\377\203\347\344\322\377\205\347\344" \
+ "\323\377\203\347\344\324\377\203\347\345\324\377\203\347\344\324\377" \
+ "C\266\224c\377\232e\36\377\233d\35\377\231c\35\377\231a\34\377\231_\33" \
+ "\377\227[\31\377\226Z\31\377\225U\30\377\225T\27\377\224Q\26\377\224" \
+ "P\25\377\225P\25\377\227P\25\377\231S\26\377\233T\27\377\236X\27\377" \
+ "\241Z\30\377\243]\31\377\245_\32\377\246`\33\377\250b\34\377\251c\33" \
+ "\377\252c\33\377\253d\33\377\253c\33\377\253d\34\377\253c\33\377\253" \
+ "c\34\377\253a\33\377\252a\33\377\252`\33\377\251_\32\377\251]\31\377" \
+ "\246\\\31\377\245[\30\377\244Y\30\377\243X\27\377\243W\27\377\241V\26" \
+ "\377\237U\27\377\237X\27\377\237Y\30\377\240Z\30\377\240]\32\377\241" \
+ "_\32\377\242a\33\377\243d\35\377\243f\35\377\243g\36\377\244h\37\377" \
+ "\243i\37\377\241i\37\377\242k!\377\337\322\220\377\344\333\231\377\343" \
+ "\333\227\377\343\332\224\377\343\332\222\377\343\331\220\377\343\331" \
+ "\215\377\343\331\211\377\343\331\206\377\343\330\201\377\343\327{\377" \
+ "\342\325r\377\240\225F\377\20292\21\377\13""60\20\3772-\17\377,'\16\377" \
+ "&!\13\377!\34\11\377\32\26\7\377\24\21\5\377\16\14\4\377\11\10\3\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\277\0\0\0\377\13\3\3" \
+ "\1\377\7\6\2\377\15\13\4\377\22\17\5\377\31\25\7\377\37\33\11\377%!\13" \
+ "\377+&\15\3770+\17\3775/\17\37782\20\377\20292\21\377\2h`3\377\301\267" \
+ "v\377\21192\21\377\13;3\21\377<4\21\377>5\21\377@6\21\377@6\22\377C7" \
+ "\22\377D9\22\377F:\23\377H;\23\377H:\23\377K<\24\377\202N=\24\377\15" \
+ "P>\24\377R\77\24\377[H\34\377q`7\377sb7\377ub7\377\205sJ\377\222\203" \
+ "[\377\223\204[\377\225\205[\377\227\206\\\377\226\206]\377\230\205\\" \
+ "\377\202\231\207^\377\16\232\210]\377\233\210_\377\235\211`\377\226\200" \
+ "T\377\210m=\377\211n=\377\212m=\377\211k:\377uR\31\377wR\31\377yT\32" \
+ "\377zT\32\377|V\31\377\252\220e\377\203\347\344\321\377\204\347\344\322" \
+ "\377\212\347\344\323\377\14\311\265\220\377\233f\36\377\234f\36\377\234" \
+ "d\35\377\233b\34\377\232`\33\377\232^\33\377\230[\31\377\230X\30\377" \
+ "\227T\27\377\226S\27\377\225Q\25\377\202\227P\25\377A\231R\26\377\235" \
+ "U\26\377\236W\27\377\240Y\30\377\244[\31\377\245]\31\377\246_\31\377" \
+ "\251`\32\377\252a\32\377\252b\32\377\253a\33\377\254c\34\377\254b\32" \
+ "\377\254a\32\377\253`\33\377\254`\31\377\253_\31\377\252^\32\377\252" \
+ "]\30\377\252\\\30\377\247[\31\377\246Y\30\377\245X\27\377\244V\27\377" \
+ "\244W\26\377\242W\27\377\243W\27\377\241Y\30\377\241[\30\377\242]\31" \
+ "\377\243_\32\377\244a\34\377\244d\34\377\245e\35\377\245h\36\377\245" \
+ "i\37\377\246j\40\377\245j\37\377\243i\37\377\272\222M\377\344\333\233" \
+ "\377\343\333\231\377\343\333\226\377\343\332\223\377\343\332\222\377" \
+ "\343\331\217\377\343\331\214\377\343\331\210\377\343\330\204\377\343" \
+ "\330~\377\343\326x\377\342\325n\377e\\&\37792\21\37782\20\3775/\17\377" \
+ "0+\17\377+&\15\377%!\13\377\37\33\11\377\31\25\7\377\22\17\5\377\15\13" \
+ "\4\377\7\6\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\300\0\0\0\377" \
+ "\13\2\2\1\377\5\4\2\377\13\11\3\377\20\16\4\377\27\24\6\377\35\31\10" \
+ "\377#\36\12\377)%\14\377.)\16\3773-\17\37771\20\377\20292\21\377\3;4" \
+ "\23\377\323\313\202\377ib6\377\21092\21\377\202;3\21\377\6>5\21\377@" \
+ "5\21\377@5\22\377C7\22\377D9\22\377F:\23\377\202I;\23\377\1K<\24\377" \
+ "\202N=\24\377\35Q\77\24\377R\77\24\377T\77\24\377UA\25\377WB\25\377Y" \
+ "C\25\377ZD\25\377\\D\26\377^E\26\377_F\27\377aG\27\377cH\27\377dI\27" \
+ "\377fJ\27\377gJ\27\377iK\27\377kM\30\377lM\30\377mM\30\377oN\30\377q" \
+ "P\30\377rP\31\377uQ\32\377uR\31\377wS\31\377yT\32\377zT\32\377}V\32\377" \
+ "\212g0\377\203\347\344\320\377\204\347\344\321\377\212\347\344\322\377" \
+ "\30\336\326\276\377\233f\36\377\234f\36\377\235e\36\377\235d\35\377\234" \
+ "b\34\377\233_\33\377\233]\31\377\231Z\30\377\231W\30\377\230U\27\377" \
+ "\230S\26\377\230Q\25\377\231Q\25\377\232R\25\377\236T\26\377\237U\27" \
+ "\377\241X\30\377\244Y\27\377\245[\30\377\246\\\31\377\251]\31\377\252" \
+ "^\32\377\253`\31\377\203\254`\31\377\1\254_\31\377\202\254^\31\3771\254" \
+ "]\31\377\253\\\31\377\253[\30\377\252Z\30\377\252Y\30\377\251Y\27\377" \
+ "\246W\27\377\245V\27\377\244V\25\377\244W\27\377\244Y\30\377\244Z\30" \
+ "\377\244\\\32\377\244_\32\377\246b\33\377\247d\35\377\246f\35\377\247" \
+ "h\35\377\247j\36\377\250k\37\377\247k\40\377\246k\37\377\244j\37\377" \
+ "\331\310\206\377\344\333\231\377\343\333\227\377\343\332\224\377\343" \
+ "\332\222\377\343\331\220\377\343\331\215\377\343\331\211\377\343\331" \
+ "\206\377\343\330\201\377\343\327{\377\342\325r\377\317\302]\377;4\22" \
+ "\37792\21\37771\20\3773-\17\377.)\16\377)%\14\377#\36\12\377\35\31\10" \
+ "\377\27\24\6\377\20\16\4\377\13\11\3\377\5\4\2\377\2\2\1\377\377\0\0" \
+ "\0\377\377\0\0\0\377\300\0\0\0\377\13\1\1\0\377\5\4\1\377\11\10\3\377" \
+ "\17\15\5\377\24\21\5\377\32\26\7\377\"\35\12\377'#\14\377,'\16\3772-" \
+ "\17\37760\20\377\20392\21\377\2\222\213S\377\273\262r\377\21092\21\377" \
+ "+;2\20\377;3\21\377=4\21\377>4\21\377\77""4\21\377A5\21\377B6\21\377" \
+ "E8\22\377G9\22\377H;\22\377K;\23\377M<\23\377N=\24\377Q\77\24\377R\77" \
+ "\24\377S@\24\377VB\25\377WB\25\377YC\25\377[C\26\377[E\26\377^E\26\377" \
+ "_F\27\377aG\27\377dH\27\377dI\27\377fJ\27\377hJ\27\377jL\30\377kM\30" \
+ "\377lM\30\377nM\30\377pO\31\377qP\30\377sP\31\377tQ\31\377vS\32\377w" \
+ "S\31\377zT\31\377{U\32\377}V\32\377~V\32\377\325\314\260\377\202\347" \
+ "\344\317\377\204\347\344\320\377\212\347\344\321\377\30\347\344\320\377" \
+ "\247u6\377\236g\37\377\237f\36\377\236d\36\377\236c\35\377\234_\33\377" \
+ "\234^\33\377\233[\31\377\232Y\31\377\233W\27\377\232T\26\377\232S\26" \
+ "\377\231R\25\377\233Q\25\377\236T\26\377\240V\26\377\242W\27\377\244" \
+ "W\27\377\245Y\30\377\247[\31\377\251\\\30\377\253]\30\377\253^\31\377" \
+ "\203\254]\31\377\1\254]\32\377\203\254\\\31\377#\254[\31\377\254[\30" \
+ "\377\253Z\27\377\252Y\27\377\250Y\27\377\250X\27\377\247W\27\377\246" \
+ "X\27\377\246Y\30\377\245[\30\377\246\\\31\377\247_\32\377\250a\33\377" \
+ "\250d\34\377\250f\35\377\250g\36\377\250j\37\377\251k\37\377\251m\40" \
+ "\377\250l\40\377\246l\40\377\273\221I\377\344\333\233\377\343\333\231" \
+ "\377\343\333\226\377\343\332\223\377\343\332\222\377\343\331\217\377" \
+ "\343\331\214\377\343\331\210\377\343\330\204\377\343\330~\377\343\326" \
+ "x\377\342\325n\377\215\203:\377\20292\21\377\13""60\20\3771,\17\377," \
+ "'\16\377&!\13\377\"\35\12\377\32\26\7\377\24\21\5\377\17\15\5\377\11" \
+ "\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\300\0\0\0\377" \
+ "\14\1\1\0\377\4\3\1\377\7\6\2\377\15\13\4\377\22\17\5\377\31\25\7\377" \
+ "\37\33\11\377%!\13\377+&\15\3770+\17\3775/\17\37782\20\377\20292\21\377" \
+ "\3QJ\"\377\341\330\214\377ld7\377\20692\21\377,92\20\377:1\20\377:2\20" \
+ "\377;2\21\377<2\21\377=3\21\377>3\21\377\77""3\21\377A4\21\377D7\21\377" \
+ "G8\21\377H9\22\377I9\22\377L;\22\377O=\24\377Q>\24\377R>\24\377S@\24" \
+ "\377V@\24\377XC\25\377YC\25\377[C\25\377]D\25\377_E\26\377`E\26\377b" \
+ "G\26\377cG\26\377eI\27\377gJ\27\377hK\30\377kK\30\377kL\30\377mM\30\377" \
+ "nM\30\377pN\27\377sP\31\377uQ\31\377uR\31\377xS\31\377zT\32\377|V\31" \
+ "\377}V\32\377~V\33\377\265\241z\377\207\347\344\317\377\211\347\344\320" \
+ "\377\25\347\344\317\377\273\227d\377\236g\37\377\237h\36\377\237f\36" \
+ "\377\237e\35\377\236b\34\377\236_\33\377\235\\\32\377\234Z\30\377\233" \
+ "W\30\377\233U\27\377\233T\26\377\235S\25\377\234S\25\377\237S\26\377" \
+ "\241U\26\377\243U\26\377\245W\27\377\246X\30\377\247Y\27\377\202\253" \
+ "[\30\377\3\254\\\30\377\254\\\31\377\254]\30\377\202\255]\30\377\2\257" \
+ "\\\30\377\255\\\30\377\202\255[\30\377\202\254[\27\377\17\254Z\27\377" \
+ "\253Z\30\377\253Z\27\377\250Y\27\377\252Z\30\377\252\\\30\377\251^\32" \
+ "\377\252_\32\377\252c\32\377\252d\34\377\251e\35\377\251h\35\377\252" \
+ "j\36\377\252l\37\377\252l\40\377\202\251m\40\377\33\250m\"\377\335\314" \
+ "\213\377\344\333\231\377\343\333\227\377\343\332\224\377\343\332\222" \
+ "\377\343\331\220\377\343\331\215\377\343\331\211\377\343\331\207\377" \
+ "\343\330\202\377\343\327}\377\342\326u\377\340\322j\377JB\31\37792\21" \
+ "\37782\20\3775/\17\377/*\16\377+&\15\377%!\13\377\37\33\11\377\31\25" \
+ "\7\377\22\17\5\377\15\13\4\377\7\6\2\377\3\3\1\377\377\0\0\0\377\377" \
+ "\0\0\0\377\302\0\0\0\377\13\2\2\1\377\6\5\2\377\13\11\3\377\20\16\4\377" \
+ "\27\24\6\377\34\30\10\377#\36\12\377($\14\377-(\16\3773-\17\37771\20" \
+ "\377\20392\21\377\3\263\254j\377\303\272x\377;4\23\377\20492\21\377\33" \
+ "82\20\37781\20\37791\20\377:1\20\37790\20\377:0\20\377;0\21\377;/\20" \
+ "\377<0\20\377</\20\377\77""2\17\377A3\20\377D6\21\377F6\21\377H7\21\377" \
+ "K9\22\377M:\22\377O;\22\377Q<\23\377R=\23\377U\77\23\377V@\24\377YA\24" \
+ "\377ZA\24\377[B\25\377^C\25\377`D\25\377\202bF\26\377\22dG\26\377fH\27" \
+ "\377hI\27\377iI\26\377kJ\27\377lJ\26\377nL\27\377qN\27\377tO\31\377u" \
+ "Q\30\377xS\32\377zT\32\377|V\31\377}U\32\377\177W\33\377\231yD\377\346" \
+ "\343\315\377\346\343\316\377\202\347\343\316\377\215\347\344\317\377" \
+ "\25\314\270\221\377\237h\37\377\240h\36\377\240g\36\377\240e\35\377\240" \
+ "c\34\377\236`\33\377\236^\33\377\235[\31\377\235Y\31\377\235V\30\377" \
+ "\235U\26\377\236U\26\377\237S\26\377\240T\26\377\242U\26\377\244V\25" \
+ "\377\246X\26\377\247W\27\377\252Y\27\377\253Z\30\377\202\254[\31\377" \
+ "\2\255\\\30\377\257]\30\377\202\257\\\30\377\204\260\\\30\377\203\257" \
+ "\\\30\377\36\254[\27\377\254Z\27\377\254\\\31\377\254]\31\377\254_\31" \
+ "\377\253`\33\377\254c\34\377\254d\34\377\254f\34\377\254h\36\377\254" \
+ "i\37\377\254l\37\377\254m\40\377\254n!\377\252n!\377\251m\40\377\277" \
+ "\230Q\377\344\333\232\377\343\333\230\377\343\333\226\377\343\332\223" \
+ "\377\343\332\222\377\343\331\217\377\343\331\214\377\343\331\210\377" \
+ "\343\330\204\377\343\330~\377\343\326x\377\342\325n\377\257\243I\377" \
+ "\20292\21\377\13""60\20\3773-\17\377-(\16\377($\14\377#\36\12\377\34" \
+ "\30\10\377\26\23\6\377\20\16\4\377\13\11\3\377\5\4\2\377\2\2\1\377\377" \
+ "\0\0\0\377\377\0\0\0\377\302\0\0\0\377\14\1\1\0\377\5\4\1\377\11\10\3" \
+ "\377\17\15\5\377\24\21\5\377\32\26\7\377!\34\11\377&!\13\377,'\15\377" \
+ "1,\17\37760\20\37782\20\377\20292\21\377\3i`4\377\343\331\216\377wp@" \
+ "\377\20392\21\377\20282\20\377\6""70\20\37781\17\37780\20\37790\20\377" \
+ "8/\17\3778.\17\377\2028-\17\377\17""9,\17\377:.\17\377</\17\377\77""1" \
+ "\20\377A2\17\377D3\17\377G5\20\377H5\21\377J7\21\377M9\22\377O:\22\377" \
+ "R;\22\377R<\23\377U=\23\377W>\23\377\202Y\77\23\377\24\\@\23\377]A\24" \
+ "\377`C\24\377aD\24\377bD\25\377dE\25\377fF\25\377hG\26\377jH\26\377l" \
+ "J\26\377oK\27\377rM\30\377tP\27\377wR\31\377zT\32\377}V\32\377~V\32\377" \
+ "\177W\33\377\202Z\35\377\337\332\277\377\203\346\343\315\377\202\346" \
+ "\343\316\377\213\347\343\316\377\26\337\327\276\377\237h\37\377\240h" \
+ "\37\377\241g\36\377\241f\35\377\241d\35\377\240b\34\377\240_\33\377\240" \
+ "\\\31\377\236Z\31\377\236X\27\377\237V\27\377\237U\27\377\240U\26\377" \
+ "\242U\26\377\243V\26\377\245V\27\377\247W\27\377\250Y\27\377\253Z\27" \
+ "\377\253Z\30\377\254[\27\377\202\257\\\30\377\2\260\\\30\377\261]\30" \
+ "\377\202\262]\27\377\202\263^\30\377\202\262]\27\377-\261]\30\377\260" \
+ "\\\30\377\257\\\30\377\260]\30\377\257]\30\377\255_\32\377\255a\32\377" \
+ "\255b\32\377\257d\34\377\256f\35\377\256i\35\377\257j\36\377\256l\37" \
+ "\377\256m\40\377\256o\40\377\255o!\377\253n!\377\255q%\377\336\317\216" \
+ "\377\344\333\231\377\343\333\227\377\343\332\224\377\343\332\222\377" \
+ "\343\331\220\377\343\331\215\377\343\331\211\377\343\331\207\377\343" \
+ "\330\202\377\343\327}\377\342\326u\377\342\324j\377bY$\37792\21\3778" \
+ "2\20\37760\20\3770+\17\377,'\15\377&!\13\377!\34\11\377\31\25\7\377\24" \
+ "\21\5\377\17\15\5\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\303\0\0\0\377\13\3\3\1\377\7\6\2\377\15\13\4\377\22\17\5\377" \
+ "\30\25\7\377\36\32\11\377$\37\13\377)%\14\377.)\16\3774.\20\37771\20" \
+ "\377\20392\21\377\3\303\272u\377\323\313\203\377F>\32\377\20292\21\377" \
+ "\4""82\20\37771\20\37781\20\37770\20\377\2027/\17\377\3""6-\17\3776+" \
+ "\16\3775*\16\377\2024)\15\377\7""4(\15\3777*\16\377:+\16\377<-\16\377" \
+ "\77.\16\377A/\17\377D1\17\377\202G3\20\377\14I5\20\377M7\20\377O7\21" \
+ "\377P8\21\377R9\21\377T:\22\377W;\22\377X=\22\377Y>\23\377[\77\23\377" \
+ "]\77\23\377_@\23\377\202aA\23\377\15dB\24\377gE\25\377jG\25\377mI\26" \
+ "\377oK\27\377sM\27\377vP\31\377yS\31\377|U\31\377~V\32\377\177W\32\377" \
+ "\202X\33\377\302\260\213\377\204\346\343\314\377\215\346\343\315\377" \
+ "\13\255\177>\377\242i\37\377\241h\37\377\242g\36\377\242e\35\377\242" \
+ "c\34\377\241a\33\377\240]\32\377\240[\32\377\240Z\30\377\237X\27\377" \
+ "\202\241V\26\377\12\243V\26\377\245V\27\377\246W\27\377\250X\27\377\253" \
+ "Z\27\377\254Z\27\377\254[\27\377\257\\\30\377\260\\\30\377\261]\30\377" \
+ "\204\263^\30\377\202\263_\30\377\204\263^\30\377\35\261^\30\377\261^" \
+ "\31\377\261a\31\377\261c\32\377\261c\34\377\260e\33\377\260f\34\377\260" \
+ "i\35\377\260j\37\377\260l\37\377\260o\40\377\260o!\377\257p!\377\256" \
+ "p!\377\254n!\377\311\250b\377\344\333\232\377\343\333\230\377\343\332" \
+ "\225\377\343\332\222\377\343\332\221\377\343\331\217\377\343\331\214" \
+ "\377\343\331\210\377\343\330\204\377\343\330~\377\343\326x\377\342\325" \
+ "n\377\276\261P\377\20292\21\377\13""71\20\3773-\17\377.)\16\377)%\14" \
+ "\377$\37\13\377\36\32\11\377\30\25\7\377\21\16\5\377\14\12\4\377\7\6" \
+ "\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\304\0\0\0\377\13\2\2\1\377" \
+ "\5\4\2\377\12\11\3\377\17\15\4\377\26\23\6\377\33\27\10\377\"\35\12\377" \
+ "'#\14\377,'\16\3771,\17\37760\20\377\20392\21\377\3um<\377\343\331\216" \
+ "\377\235\225]\377\20292\21\377082\20\37771\20\37781\20\3776/\20\3777" \
+ "/\17\3776-\16\3775,\17\3775*\16\3774*\15\3773'\15\3772%\14\3771%\13\377" \
+ "1%\14\3774&\14\3776'\14\3778(\14\377<+\15\377=+\16\377@,\17\377C0\17" \
+ "\377D0\17\377G1\16\377H2\17\377L4\17\377M5\20\377O5\21\377Q5\20\377R" \
+ "7\20\377U9\22\377W9\22\377W:\21\377Z;\22\377\\<\22\377^=\22\377`>\23" \
+ "\377bA\23\377fC\24\377jF\25\377mI\26\377rL\27\377tN\27\377wQ\31\377|" \
+ "T\31\377}V\32\377\177W\32\377\202X\33\377\240\202N\377\346\343\312\377" \
+ "\203\346\343\313\377\215\346\343\314\377\26\301\243p\377\241i\37\377" \
+ "\243i\37\377\243h\36\377\243f\36\377\243d\35\377\243a\33\377\242_\33" \
+ "\377\241]\32\377\242[\31\377\243X\30\377\243X\27\377\244W\26\377\244" \
+ "V\25\377\246X\26\377\250X\27\377\252Y\27\377\253Z\30\377\254[\27\377" \
+ "\257\\\30\377\260\\\30\377\262]\27\377\202\263^\30\377\2\263_\30\377" \
+ "\265_\31\377\204\266`\31\377-\265_\31\377\263_\30\377\263^\30\377\263" \
+ "_\31\377\263a\32\377\262b\33\377\263d\33\377\262f\34\377\262h\35\377" \
+ "\262j\35\377\262k\36\377\261m\37\377\261o\40\377\262p\40\377\261p!\377" \
+ "\261q\"\377\257p!\377\266\2026\377\343\331\230\377\343\333\231\377\343" \
+ "\333\226\377\343\332\223\377\343\332\222\377\343\331\220\377\343\331" \
+ "\215\377\343\331\211\377\343\331\206\377\343\330\201\377\343\327}\377" \
+ "\342\326u\377\342\324j\377pg*\37792\21\37782\20\37760\20\3771,\17\377" \
+ ",'\16\377'#\14\377\"\35\12\377\33\27\10\377\25\22\6\377\17\15\4\377\12" \
+ "\11\3\377\5\4\2\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\304\0\0\0\377" \
+ "\14\1\1\0\377\4\3\1\377\10\7\3\377\16\14\4\377\23\20\5\377\31\25\7\377" \
+ "\37\33\11\377%!\13\377*%\15\377/*\16\3774.\20\37782\20\377\20292\21\377" \
+ "5;4\23\377\307\276x\377\341\330\215\377^V-\37792\21\37782\20\37771\20" \
+ "\37781\20\3776/\20\3776.\17\3775,\16\3775+\17\3773)\16\3772(\15\3770" \
+ "%\14\377/#\13\377.\"\12\377-!\12\377/!\12\3771\"\12\3773#\13\3776%\14" \
+ "\3777&\14\377;(\15\377=*\15\377@+\15\377C,\16\377D-\16\377F.\16\377H" \
+ "/\17\377K0\16\377M2\16\377N3\17\377P4\20\377R5\17\377T6\20\377W7\21\377" \
+ "X7\20\377Y8\20\377]:\21\377_=\22\377cA\23\377gB\24\377jF\25\377oJ\26" \
+ "\377sM\27\377vP\27\377zS\31\377}U\32\377\200X\32\377\202Y\32\377\206" \
+ "^\"\377\341\335\300\377\206\346\343\312\377\207\346\343\313\377\203\346" \
+ "\343\312\377\24\325\306\241\377\243i\37\377\244j\37\377\245i\37\377\244" \
+ "h\36\377\245e\35\377\244d\34\377\244a\33\377\244_\31\377\243]\31\377" \
+ "\244Z\31\377\243X\27\377\244V\27\377\245V\27\377\247W\27\377\250Y\27" \
+ "\377\253Z\30\377\254[\27\377\257\\\30\377\260\\\30\377\202\263^\30\377" \
+ "\4\263_\30\377\266`\31\377\267a\31\377\270`\31\377\204\271a\32\377-\270" \
+ "`\31\377\267a\31\377\267a\32\377\266b\32\377\266c\32\377\266e\34\377" \
+ "\266f\34\377\266i\35\377\266j\36\377\264l\37\377\263m\37\377\264n\40" \
+ "\377\263p!\377\262q!\377\262r!\377\261q\"\377\257q!\377\330\303\177\377" \
+ "\344\333\231\377\343\333\227\377\343\332\224\377\343\332\222\377\343" \
+ "\332\221\377\343\331\216\377\343\331\212\377\343\331\207\377\343\330" \
+ "\204\377\343\330~\377\343\326x\377\342\325n\377\303\266S\377;4\22\377" \
+ "92\21\37771\20\3774.\20\377/*\16\377*%\15\377%!\13\377\37\33\11\377\31" \
+ "\25\7\377\22\17\5\377\15\13\4\377\10\7\3\377\4\3\1\377\1\1\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\305\0\0\0\377\13\3\3\1\377\6\5\2\377\13\11\3" \
+ "\377\20\16\4\377\26\23\6\377\34\30\10\377#\36\12\377($\14\377,'\16\377" \
+ "2-\17\37760\20\377\20392\21\3775qi9\377\343\331\215\377\307\276{\377" \
+ ">7\25\37792\21\37771\20\37781\20\3776/\20\3776.\17\3775,\17\3774*\17" \
+ "\3773)\15\3770&\14\377.#\14\377-\"\13\377*\37\11\377*\36\11\377)\34\10" \
+ "\377*\34\10\377.\37\11\3770\40\11\3773!\12\3775\"\13\3778$\13\377:%\13" \
+ "\377='\14\377\77(\14\377A)\14\377C*\15\377E+\15\377H.\15\377J/\16\377" \
+ "M0\16\377M0\15\377O1\16\377Q2\16\377S3\17\377U5\17\377X7\17\377\\9\21" \
+ "\377_<\22\377e@\23\377iD\23\377lF\24\377qK\26\377uN\27\377zR\31\377}" \
+ "U\31\377\200X\32\377\202Y\32\377\204Y\33\377\304\262\213\377\346\343" \
+ "\310\377\206\346\343\311\377\205\346\343\312\377\204\346\343\311\377" \
+ "\2\344\341\305\377\246n%\377\202\245j\37\377\25\246i\36\377\245f\35\377" \
+ "\245d\35\377\245b\34\377\245`\32\377\244]\32\377\244[\30\377\244Y\30" \
+ "\377\245X\27\377\246W\27\377\250X\27\377\253Z\27\377\254Z\27\377\257" \
+ "\\\30\377\260\\\30\377\262]\27\377\263^\30\377\265_\31\377\266`\31\377" \
+ "\270`\31\377\271a\31\377\206\273b\31\377\11\272c\32\377\271d\32\377\271" \
+ "e\32\377\270f\33\377\270g\34\377\267j\34\377\267j\35\377\267m\37\377" \
+ "\266n\40\377\202\266p\40\377\23\265r\"\377\264s!\377\263q!\377\262q\"" \
+ "\377\304\235U\377\344\333\232\377\343\333\230\377\343\332\225\377\343" \
+ "\332\223\377\343\332\222\377\343\331\217\377\343\331\214\377\343\331" \
+ "\211\377\343\331\206\377\343\330\201\377\343\327{\377\342\325r\377\342" \
+ "\323f\377mb(\377\20292\21\377\13""60\20\3772-\17\377,'\16\377'#\14\377" \
+ "#\36\12\377\34\30\10\377\26\23\6\377\20\16\4\377\13\11\3\377\6\5\2\377" \
+ "\2\2\1\377\377\0\0\0\377\377\0\0\0\377\306\0\0\0\377\14\1\1\0\377\5\4" \
+ "\1\377\11\10\3\377\17\15\5\377\24\21\5\377\31\25\7\377\40\33\11\377&" \
+ "!\13\377+&\15\377/*\16\3775/\17\37782\20\377\20292\21\3774;4\23\377\303" \
+ "\272s\377\343\331\216\377\225\215V\37792\21\37782\20\37791\20\3776/\20" \
+ "\3776.\17\3775,\17\3773*\16\3771'\15\377/%\14\377-\"\13\377+\40\12\377" \
+ ")\36\11\377)\34\10\377(\33\10\377'\31\7\377)\31\10\377,\33\10\377.\34" \
+ "\10\3772\37\11\3772\40\11\3775!\11\3779\"\12\377;$\12\377<$\12\377>&" \
+ "\13\377@&\13\377D)\13\377E*\14\377G+\14\377I,\14\377K-\15\377L-\15\377" \
+ "N.\15\377R0\16\377V2\17\377W5\17\377\\9\21\377a<\21\377f@\22\377jD\24" \
+ "\377nI\26\377sL\27\377xP\30\377|T\32\377\200W\32\377\202Y\32\377\204" \
+ "Y\33\377\244\206R\377\202\346\343\307\377\207\346\343\310\377\1\346\343" \
+ "\311\377\206\346\343\310\377\31\346\343\307\377\266\215P\377\246k\37" \
+ "\377\246k\40\377\246i\37\377\247h\36\377\246f\35\377\247d\35\377\246" \
+ "a\32\377\244^\32\377\245]\31\377\245[\30\377\246Y\30\377\251Y\27\377" \
+ "\250Y\27\377\253Z\30\377\255[\30\377\257\\\30\377\262]\27\377\263^\30" \
+ "\377\263_\30\377\266`\31\377\271a\32\377\271a\31\377\273b\31\377\202" \
+ "\274c\32\377\202\275c\32\377\37\274c\32\377\275d\32\377\274e\32\377\274" \
+ "f\33\377\272h\34\377\271i\34\377\271k\35\377\271l\36\377\270m\36\377" \
+ "\267n\37\377\270p\40\377\270r!\377\267s!\377\267s\"\377\265t\"\377\263" \
+ "r!\377\271\2034\377\341\326\225\377\343\333\231\377\343\333\226\377\343" \
+ "\332\224\377\343\332\222\377\343\331\220\377\343\331\215\377\343\331" \
+ "\212\377\343\331\207\377\343\330\202\377\343\327}\377\342\326u\377\342" \
+ "\325n\377\276\261P\377\20292\21\377\14""82\20\3774.\20\377/*\16\377*" \
+ "%\15\377%!\13\377\37\33\11\377\31\25\7\377\23\20\5\377\16\14\4\377\11" \
+ "\10\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\307\0\0\0\377" \
+ "\13\3\3\1\377\7\6\2\377\14\12\4\377\21\16\5\377\27\24\6\377\35\31\10" \
+ "\377#\36\12\377($\14\377-(\16\3772-\17\37760\20\377\20392\21\3774aY." \
+ "\377\343\331\214\377\343\331\217\377ib6\37792\21\377;2\20\37791\20\377" \
+ "7/\17\3775,\16\3774*\17\3772(\15\377/%\14\377.\"\13\377+\40\12\377)\36" \
+ "\11\377(\33\10\377&\31\7\377&\31\6\377&\27\6\377(\27\6\377*\30\6\377" \
+ "-\32\7\377/\33\7\3771\35\7\3773\35\10\3776\40\11\3779!\11\377;\"\12\377" \
+ "=\"\12\377>#\12\377@%\13\377C&\13\377D'\13\377G(\14\377I)\14\377K+\14" \
+ "\377M,\14\377Q-\15\377U1\16\377Y5\17\377^8\20\377b=\21\377hB\23\377m" \
+ "F\25\377rJ\26\377wN\30\377|T\32\377\200V\32\377\202Y\33\377\205Z\33\377" \
+ "\210_\37\377\340\331\273\377\202\346\343\306\377\215\346\343\307\377" \
+ "\22\346\343\306\377\313\260\201\377\246k\37\377\247l\40\377\250j\37\377" \
+ "\250i\36\377\250g\36\377\247d\35\377\246b\33\377\246`\33\377\247^\31" \
+ "\377\246[\31\377\247[\31\377\252Y\30\377\252Y\27\377\254Z\27\377\257" \
+ "\\\30\377\260\\\30\377\202\263^\30\377\7\266`\31\377\270`\31\377\271" \
+ "a\31\377\273b\31\377\274c\32\377\276d\32\377\277d\32\377\202\300e\32" \
+ "\377\14\300f\33\377\277g\33\377\276g\33\377\276j\34\377\276k\35\377\275" \
+ "k\35\377\275m\36\377\273n\37\377\272p\40\377\271q\40\377\271r\40\377" \
+ "\271t\"\377\202\270u\"\377\21\266t\"\377\264v$\377\333\305\202\377\344" \
+ "\333\231\377\343\333\227\377\343\332\224\377\343\332\222\377\343\332" \
+ "\221\377\343\331\216\377\343\331\214\377\343\331\210\377\343\330\204" \
+ "\377\343\330~\377\343\327{\377\342\325r\377\342\323f\377`W\"\377\202" \
+ "92\21\377\13""60\20\3772-\17\377,'\16\377'#\14\377#\36\12\377\34\30\10" \
+ "\377\27\24\6\377\21\16\5\377\13\11\3\377\6\5\2\377\3\3\1\377\377\0\0" \
+ "\0\377\377\0\0\0\377\310\0\0\0\377\14\1\1\0\377\5\4\1\377\11\10\3\377" \
+ "\17\15\5\377\24\21\5\377\31\25\7\377\40\33\11\377&!\13\377+&\15\377/" \
+ "*\16\3774.\20\37771\20\377\20392\21\377\4\257\246e\377\343\331\215\377" \
+ "\330\315\207\377MF!\377\202;3\21\377-:1\20\3778/\17\3775+\16\3774*\16" \
+ "\3771&\14\377.\"\13\377-\"\12\377)\36\11\377)\34\10\377&\31\7\377%\30" \
+ "\6\377&\26\6\377%\25\5\377&\25\6\377)\27\6\377+\30\6\377.\31\6\3771\33" \
+ "\7\3772\34\7\3775\35\7\3777\37\10\377:\40\10\377<!\10\377=\"\11\377@" \
+ "#\11\377B$\11\377D%\12\377F'\12\377G(\12\377J)\13\377M*\13\377Q.\14\377" \
+ "V2\15\377[6\17\377`:\21\377f@\22\377kD\24\377rI\26\377wN\27\377{S\31" \
+ "\377\177V\32\377\202Y\33\377\205Z\33\377\206Z\33\377\300\254\202\377" \
+ "\205\346\343\305\377\207\346\343\306\377\204\346\343\305\377\31\336\325" \
+ "\262\377\246l\40\377\247l\40\377\251l\37\377\251j\36\377\247g\36\377" \
+ "\250f\35\377\250c\34\377\250a\33\377\247_\31\377\247]\31\377\250[\30" \
+ "\377\252Z\30\377\253Z\27\377\254[\27\377\257\\\30\377\261]\30\377\263" \
+ "^\30\377\265_\31\377\267a\31\377\271a\31\377\273b\31\377\274c\32\377" \
+ "\276d\32\377\300e\32\377\202\301e\32\377\13\302g\33\377\302h\33\377\302" \
+ "i\34\377\300j\34\377\277k\35\377\277m\36\377\277o\37\377\276p\37\377" \
+ "\276q\40\377\275q!\377\273t!\377\202\272u!\377\7\271v\"\377\270u\"\377" \
+ "\266t\"\377\315\251b\377\344\333\231\377\343\333\230\377\343\332\225" \
+ "\377\202\343\332\222\377\11\343\331\217\377\343\331\214\377\343\331\211" \
+ "\377\343\331\206\377\343\330\201\377\343\327}\377\342\326u\377\342\324" \
+ "j\377\246\231@\377\20292\21\377\14""71\20\3774.\20\377/*\16\377*%\15" \
+ "\377%!\13\377\37\33\11\377\31\25\7\377\23\20\5\377\17\15\5\377\11\10" \
+ "\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\311\0\0\0\377" \
+ "\14\3\3\1\377\7\6\2\377\14\12\4\377\21\16\5\377\27\24\6\377\35\31\10" \
+ "\377#\36\12\377'#\14\377,'\16\3771,\17\37760\20\37782\20\377\20292\21" \
+ "\3774MF\40\377\334\321\205\377\343\331\216\377\277\267v\377\77""8\25" \
+ "\377=5\21\377=4\21\377;1\21\3779/\20\3777,\17\3774)\15\3772%\15\3770" \
+ "$\13\377,!\12\377*\36\11\377)\33\10\377'\31\7\377'\27\6\377%\26\6\377" \
+ "%\24\6\377&\24\6\377(\25\5\377,\30\5\377.\31\6\3770\32\6\3772\32\6\377" \
+ "4\34\7\3777\35\7\377:\36\7\377;\40\10\377=!\10\377\77\"\10\377B#\11\377" \
+ "D$\11\377F%\11\377H&\12\377K'\12\377N+\13\377T/\15\377Y3\17\377^8\17" \
+ "\377d=\21\377iB\23\377pH\25\377uM\27\377{Q\31\377~T\31\377\202Y\33\377" \
+ "\205Z\33\377\206Z\33\377\237}E\377\346\343\304\377\217\346\343\305\377" \
+ "\32\346\343\304\377\262\200=\377\250l\40\377\251l\37\377\250j\37\377" \
+ "\250h\36\377\250f\35\377\250d\34\377\250b\34\377\251`\32\377\251]\31" \
+ "\377\252\\\30\377\253[\30\377\253Z\30\377\255[\30\377\257\\\30\377\262" \
+ "]\27\377\263^\30\377\266`\31\377\270`\31\377\273b\31\377\274c\32\377" \
+ "\276d\32\377\300e\32\377\301e\32\377\303f\32\377\202\305i\33\377+\305" \
+ "k\34\377\304k\35\377\303m\36\377\301n\36\377\300o\37\377\300p\37\377" \
+ "\277r\40\377\277s!\377\276t!\377\275u\"\377\273u\"\377\273v\"\377\272" \
+ "w#\377\270u\"\377\304\223G\377\344\333\232\377\343\333\230\377\343\333" \
+ "\226\377\343\332\223\377\343\332\222\377\343\331\220\377\343\331\215" \
+ "\377\343\331\212\377\343\331\207\377\343\330\202\377\343\327}\377\343" \
+ "\326x\377\342\325n\377\331\313]\377JB\30\37792\21\37782\20\37760\20\377" \
+ "1,\17\377,'\16\377'#\14\377#\36\12\377\34\30\10\377\27\24\6\377\21\16" \
+ "\5\377\14\12\4\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\312" \
+ "\0\0\0\377\14\1\1\0\377\5\4\1\377\11\10\3\377\17\15\5\377\24\21\5\377" \
+ "\31\25\7\377\37\33\11\377%!\13\377*%\15\377.)\16\3774.\20\37771\20\377" \
+ "\20392\21\3773\201yD\377\343\331\214\377\343\331\217\377\231\221Y\377" \
+ "=5\21\377\77""5\21\377>4\21\377=2\21\377:/\20\3777,\17\3775*\16\3774" \
+ "'\15\3771%\13\377/\"\13\377,\37\11\377+\35\10\377)\31\10\377)\30\6\377" \
+ "(\26\5\377(\26\6\377(\25\5\377+\27\5\377-\30\6\3770\31\6\3771\31\6\377" \
+ "3\33\7\3776\34\7\3779\35\7\377:\37\10\377<\40\10\377>!\10\377A\"\11\377" \
+ "C#\11\377E$\11\377H%\12\377J&\12\377L)\12\377S.\15\377W1\16\377^8\17" \
+ "\377c<\21\377h@\23\377oF\24\377tK\27\377yP\30\377~S\30\377\201W\32\377" \
+ "\205Z\33\377\206Z\33\377\210^\37\377\334\322\257\377\203\346\343\303" \
+ "\377\211\346\343\304\377\202\346\343\303\377\202\346\342\303\377\17\304" \
+ "\244l\377\250l\40\377\251m\40\377\251j\40\377\251i\37\377\252h\35\377" \
+ "\250e\35\377\251c\33\377\251a\32\377\252_\32\377\253]\30\377\253[\30" \
+ "\377\254[\31\377\255[\30\377\260\\\30\377\202\263^\30\377'\266`\31\377" \
+ "\271a\32\377\273b\31\377\274c\32\377\277d\32\377\301e\32\377\303f\32" \
+ "\377\306i\34\377\306j\34\377\310l\36\377\307m\35\377\306n\36\377\305" \
+ "o\37\377\304p\37\377\302q\40\377\301s\40\377\301t!\377\277t!\377\277" \
+ "w!\377\276w#\377\275w#\377\273v\"\377\272w#\377\277\2066\377\341\325" \
+ "\222\377\343\333\231\377\343\333\226\377\343\332\224\377\343\332\222" \
+ "\377\343\331\220\377\343\331\216\377\343\331\212\377\343\331\210\377" \
+ "\343\330\204\377\343\330~\377\343\327{\377\342\325r\377\342\323f\377" \
+ "\204y/\377\20292\21\377\14""71\20\3774.\20\377.)\16\377*%\15\377%!\13" \
+ "\377\37\33\11\377\31\25\7\377\23\20\5\377\16\14\4\377\11\10\3\377\5\4" \
+ "\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\313\0\0\0\377\14\3\3\1\377" \
+ "\7\6\2\377\14\12\4\377\21\16\5\377\26\23\6\377\34\30\10\377\"\35\12\377" \
+ "'#\14\377,'\15\3771,\17\3775/\17\37782\20\377\20392\21\3772\273\262m" \
+ "\377\343\331\215\377\343\331\217\377|sB\377\77""5\21\377@5\21\377\77" \
+ "4\21\377>3\21\377<0\20\377:-\17\3778+\16\3775(\15\3773&\14\3770#\13\377" \
+ "0\40\11\377.\36\11\377-\34\10\377+\31\7\377+\30\7\377*\27\6\377,\30\5" \
+ "\377-\30\6\3770\31\6\3771\31\6\3773\33\7\3776\34\7\3779\35\7\377:\37" \
+ "\10\377<\40\10\377>!\10\377A\"\11\377C#\11\377E$\11\377H%\12\377J&\12" \
+ "\377L)\12\377Q,\14\377U0\15\377\\6\17\377a;\21\377g\77\22\377mE\24\377" \
+ "sJ\26\377xO\27\377|S\31\377\201V\33\377\205Z\33\377\206Z\33\377\210\\" \
+ "\34\377\270\237p\377\220\346\342\302\377E\327\310\236\377\250l\40\377" \
+ "\251m\40\377\251l\40\377\252j\37\377\252h\36\377\252f\35\377\252d\34" \
+ "\377\252c\32\377\252`\33\377\253^\31\377\254]\31\377\254\\\31\377\255" \
+ "[\30\377\260\\\30\377\263^\30\377\263_\30\377\266`\31\377\271a\32\377" \
+ "\273b\31\377\275c\32\377\300e\32\377\302g\32\377\305i\33\377\306j\34" \
+ "\377\311m\35\377\311o\36\377\311p\37\377\307q\37\377\306q\37\377\306" \
+ "s\37\377\304t\40\377\301t\40\377\302u\"\377\300v\"\377\277w\"\377\277" \
+ "x$\377\275w#\377\273v\"\377\274{*\377\337\315\211\377\343\333\231\377" \
+ "\343\333\227\377\343\332\224\377\343\332\222\377\343\332\221\377\343" \
+ "\331\216\377\343\331\214\377\343\331\210\377\343\331\206\377\343\330" \
+ "\201\377\343\327{\377\342\326u\377\342\324j\377\276\260K\377;4\22\377" \
+ "92\21\37782\20\3775/\17\3770+\17\377,'\15\377'#\14\377\"\35\12\377\34" \
+ "\30\10\377\26\23\6\377\20\16\4\377\14\12\4\377\6\5\2\377\3\3\1\377\377" \
+ "\0\0\0\377\377\0\0\0\377\314\0\0\0\377\14\1\1\0\377\5\4\1\377\11\10\3" \
+ "\377\16\14\4\377\23\20\5\377\31\25\7\377\37\33\11\377$\37\13\377)%\14" \
+ "\377-(\16\3773-\17\37760\20\377\20392\21\377\24QJ\"\377\336\325\206\377" \
+ "\343\331\215\377\341\330\216\377qg8\377@5\21\377@5\22\377@5\21\377\77" \
+ "3\20\377=0\20\377<.\17\3779,\16\3777)\15\3775&\14\3773$\13\3772\"\12" \
+ "\3770\40\11\3770\35\10\377.\34\10\377.\31\7\377\202.\31\6\377\35""0\31" \
+ "\6\3771\31\6\3773\33\7\3776\34\7\3779\35\7\377:\37\10\377<\40\10\377" \
+ ">!\10\377A\"\11\377C#\11\377E$\11\377H%\12\377J&\12\377K(\12\377P+\14" \
+ "\377T.\15\377[4\16\377_8\21\377f>\21\377lC\23\377rI\26\377wM\27\377{" \
+ "R\27\377\200V\32\377\204Y\33\377\206Z\33\377\210\\\34\377\226n1\377\345" \
+ "\340\276\377\214\346\342\301\377\204\346\342\300\3776\256y3\377\251m" \
+ "\40\377\252l\40\377\252k\37\377\253j\36\377\252g\36\377\252e\34\377\253" \
+ "c\33\377\253a\33\377\254_\31\377\254]\31\377\254\\\31\377\255[\30\377" \
+ "\260\\\30\377\263^\30\377\263_\30\377\267a\31\377\271a\32\377\273b\31" \
+ "\377\275c\32\377\300f\33\377\303h\33\377\305j\34\377\310l\36\377\312" \
+ "o\36\377\313q\37\377\312r\40\377\307s\37\377\307t!\377\307u\40\377\305" \
+ "u!\377\302w!\377\302w#\377\301x#\377\300x\"\377\277y$\377\275w#\377\275" \
+ "x%\377\332\302|\377\343\333\231\377\343\333\227\377\343\332\224\377\343" \
+ "\332\222\377\343\332\221\377\343\331\217\377\343\331\214\377\343\331" \
+ "\211\377\343\331\206\377\343\330\202\377\343\327}\377\342\326u\377\342" \
+ "\325n\377\335\317`\377UK\33\377\20292\21\377\14""60\20\3773-\17\377-" \
+ "(\16\377)%\14\377$\37\13\377\37\33\11\377\31\25\7\377\23\20\5\377\16" \
+ "\14\4\377\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\315\0\0\0\377\14\3\3\1\377\6\5\2\377\13\11\3\377\20\16\4\377\26\23\6" \
+ "\377\33\27\10\377!\34\11\377&!\13\377+&\15\377/*\16\3774.\20\37771\20" \
+ "\377\20392\21\3772\207~G\377\343\331\212\377\343\331\216\377\337\325" \
+ "\214\377e[.\377A6\22\377C7\22\377A6\21\377A4\21\377\77""2\17\377=0\17" \
+ "\377;-\17\3779+\16\3778(\14\3776%\14\3775$\13\3772\40\11\3772\37\11\377" \
+ "1\35\10\3771\34\7\3770\33\7\3771\32\7\3771\31\6\3773\33\7\3776\34\7\377" \
+ "9\35\7\377:\37\10\377<\40\10\377>!\10\377A\"\11\377C#\11\377E$\11\377" \
+ "H%\12\377J&\12\377K(\12\377O*\13\377S-\14\377Z3\16\377^7\17\377d<\21" \
+ "\377jA\22\377qG\25\377uK\27\377{Q\27\377~T\32\377\204Y\33\377\206Z\33" \
+ "\377\210\\\34\377\212]\34\377\317\276\223\377\205\346\342\277\377\202" \
+ "\346\342\300\377\207\346\342\277\377\202\346\342\276\377\16\301\235b" \
+ "\377\251m\40\377\252m\40\377\253l\40\377\254j\37\377\253i\36\377\253" \
+ "f\35\377\253d\33\377\253c\34\377\254`\32\377\254^\31\377\254\\\31\377" \
+ "\257\\\30\377\260\\\30\377\202\263^\30\377\31\266`\31\377\271a\32\377" \
+ "\273b\31\377\275d\32\377\300g\33\377\303i\34\377\305l\34\377\307n\35" \
+ "\377\311q\37\377\312r\40\377\311s\40\377\310u!\377\307u!\377\306v!\377" \
+ "\305w\"\377\303x\"\377\302y$\377\302y#\377\301y#\377\277y$\377\276x$" \
+ "\377\330\273t\377\344\333\231\377\343\333\227\377\343\332\225\377\202" \
+ "\343\332\222\377\12\343\331\217\377\343\331\215\377\343\331\211\377\343" \
+ "\331\207\377\343\330\202\377\343\330~\377\343\326x\377\342\325n\377\342" \
+ "\323f\377\206z/\377\20292\21\377\14""71\20\3774.\20\377/*\16\377+&\15" \
+ "\377&!\13\377!\34\11\377\33\27\10\377\26\23\6\377\20\16\4\377\13\11\3" \
+ "\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\316\0\0\0\377\15" \
+ "\1\1\0\377\4\3\1\377\10\7\3\377\15\13\4\377\22\17\5\377\30\25\7\377\35" \
+ "\31\10\377#\36\12\377'#\14\377,'\16\3771,\17\37760\20\37782\20\377\202" \
+ "92\21\377\7;4\23\377\266\254h\377\343\331\212\377\343\331\216\377\332" \
+ "\317\211\377]R)\377C7\22\377\202D7\22\377)C6\21\377@3\20\377>0\17\377" \
+ "=/\17\377<,\16\377;*\15\3779(\14\3778$\13\3775\"\13\3775!\12\3774\40" \
+ "\10\3773\36\10\3773\35\10\3773\33\7\3774\34\7\3776\34\7\3779\35\7\377" \
+ ":\37\10\377<\40\10\377>!\10\377A\"\11\377C#\11\377E$\11\377G%\12\377" \
+ "J&\12\377K(\12\377O*\13\377S-\14\377X2\15\377^7\17\377c;\20\377i\77\22" \
+ "\377oF\24\377tJ\26\377yO\30\377~S\31\377\202W\32\377\205Z\33\377\210" \
+ "\\\34\377\211\\\34\377\251\211R\377\202\346\342\275\377\211\346\342\276" \
+ "\377\202\346\342\275\377\202\346\341\275\377)\346\341\274\377\327\302" \
+ "\224\377\251m\40\377\252m!\377\252l\40\377\253k\37\377\253i\37\377\254" \
+ "g\35\377\254f\34\377\253c\33\377\254a\32\377\254_\31\377\254]\32\377" \
+ "\257]\30\377\257\\\30\377\262]\27\377\263^\30\377\266`\31\377\270a\31" \
+ "\377\274c\32\377\275e\32\377\300h\34\377\302j\35\377\305m\35\377\307" \
+ "o\36\377\307r\37\377\310t\40\377\310u!\377\307v!\377\307w\"\377\306x" \
+ "\"\377\306y#\377\305y#\377\303{#\377\302z$\377\301y#\377\276x#\377\325" \
+ "\264k\377\344\333\231\377\343\333\227\377\343\332\225\377\202\343\332" \
+ "\222\377\12\343\331\220\377\343\331\215\377\343\331\212\377\343\331\207" \
+ "\377\343\330\204\377\343\330~\377\343\327{\377\342\325r\377\342\323f" \
+ "\377\263\247G\377\20292\21\377\15""82\20\37760\20\3771,\17\377,'\16\377" \
+ "'#\14\377#\36\12\377\35\31\10\377\30\25\7\377\22\17\5\377\15\13\4\377" \
+ "\10\7\3\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\317\0\0\0" \
+ "\377\14\2\2\1\377\5\4\2\377\12\11\3\377\17\15\4\377\24\21\5\377\31\25" \
+ "\7\377\37\33\11\377$\37\13\377)%\14\377.)\16\3773-\17\37760\20\377\203" \
+ "92\21\3772JA\32\377\320\305{\377\343\331\214\377\343\331\216\377\324" \
+ "\312\204\377ZN$\377E8\22\377F9\23\377F8\22\377D6\21\377C4\21\377A2\17" \
+ "\377\77/\16\377\77-\16\377=,\16\377;(\14\377:'\14\377:&\13\3779%\12\377" \
+ "8\"\12\3777\40\11\3776\36\10\3777\37\10\3778\35\10\377:\36\7\3779\36" \
+ "\10\377<\40\10\377>!\10\377A\"\11\377C#\11\377D$\11\377G%\12\377J&\12" \
+ "\377K(\12\377N)\13\377R,\14\377V/\15\377\\5\16\377a9\20\377h>\21\377" \
+ "nD\24\377rI\25\377xM\27\377|R\31\377\201V\32\377\206Y\32\377\207[\34" \
+ "\377\211\\\34\377\215a\40\377\336\325\256\377\214\346\341\274\377\203" \
+ "\345\341\273\377\36\344\337\271\377\257v-\377\253n\40\377\253m\40\377" \
+ "\254m\37\377\254j\37\377\253h\36\377\254f\34\377\254d\34\377\254b\34" \
+ "\377\254`\31\377\254]\31\377\255]\30\377\257]\30\377\261]\30\377\263" \
+ "^\30\377\266a\31\377\270c\32\377\274e\33\377\275h\33\377\300j\34\377" \
+ "\302l\35\377\304o\36\377\306q\37\377\307t\40\377\307t!\377\307v\"\377" \
+ "\307w\"\377\307x\"\377\306z#\377\202\305z#\377\24\303{$\377\301z#\377" \
+ "\300y$\377\323\257e\377\344\333\231\377\343\333\227\377\343\332\225\377" \
+ "\343\332\223\377\343\332\222\377\343\331\220\377\343\331\215\377\343" \
+ "\331\212\377\343\331\210\377\343\330\204\377\343\330\201\377\343\327" \
+ "{\377\342\326u\377\342\324j\377\323\304T\377IA\27\377\20292\21\377\14" \
+ "60\20\3773-\17\377.)\16\377)%\14\377$\37\13\377\37\33\11\377\31\25\7" \
+ "\377\24\21\5\377\17\15\4\377\12\11\3\377\5\4\2\377\2\2\1\377\377\0\0" \
+ "\0\377\377\0\0\0\377\320\0\0\0\377\15\1\1\0\377\3\3\1\377\7\6\2\377\14" \
+ "\12\4\377\21\16\5\377\26\23\6\377\33\27\10\377\"\35\12\377&!\13\377+" \
+ "&\15\377/*\16\3774.\20\37771\20\377\20292\21\3772;3\21\377_V(\377\340" \
+ "\325\205\377\343\331\214\377\343\331\216\377\325\313\205\377cV*\377G" \
+ "9\23\377H:\23\377H:\22\377G8\22\377E6\21\377D4\20\377C2\20\377@.\17\377" \
+ "\77-\16\377\77+\16\377=)\14\377<'\13\377<%\13\377;%\12\377;#\11\377:" \
+ "\"\11\377;\40\11\377:\40\10\377:\37\11\377<\40\10\377>!\10\377A\"\11" \
+ "\377B\"\11\377D$\11\377G%\12\377J&\12\377K(\12\377N)\13\377Q+\13\377" \
+ "U.\14\377[3\17\377_8\17\377f=\21\377kA\23\377qH\25\377vM\26\377{P\31" \
+ "\377\200V\31\377\204Y\33\377\207[\34\377\211\\\34\377\213^\34\377\270" \
+ "\235i\377\215\345\341\273\377\203\345\341\272\377\33\302\236_\377\253" \
+ "n\40\377\253m\40\377\254l\40\377\254l\37\377\254j\36\377\255g\35\377" \
+ "\254e\34\377\254c\34\377\255a\32\377\254^\31\377\255^\32\377\260]\30" \
+ "\377\261]\31\377\263`\31\377\266b\31\377\270d\32\377\272f\34\377\276" \
+ "i\34\377\277k\35\377\300m\36\377\303p\36\377\305r\37\377\306t\40\377" \
+ "\307v\"\377\306w\"\377\306y\"\377\202\306z#\377\25\305{#\377\303{$\377" \
+ "\302z$\377\301y#\377\326\263i\377\343\333\231\377\343\333\227\377\343" \
+ "\332\225\377\343\332\223\377\343\332\222\377\343\331\220\377\343\331" \
+ "\216\377\343\331\212\377\343\331\210\377\343\330\204\377\343\330\201" \
+ "\377\343\327{\377\342\326u\377\342\324j\377\335\317`\377bX\40\377\202" \
+ "92\21\377\15""71\20\3774.\20\377/*\16\377+&\15\377&!\13\377\"\35\12\377" \
+ "\33\27\10\377\26\23\6\377\21\16\5\377\14\12\4\377\7\6\2\377\3\3\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\321\0\0\0\377A\1\1\0\377\5\4\1" \
+ "\377\11\10\3\377\16\14\4\377\23\20\5\377\31\25\7\377\35\31\10\377#\36" \
+ "\12\377'#\14\377,'\15\3771,\17\3775/\17\37782\20\37792\21\377;3\21\377" \
+ "=5\21\377~s\77\377\343\331\211\377\343\331\214\377\343\331\216\377\333" \
+ "\321\211\377k^1\377I;\23\377H:\23\377I:\23\377H8\22\377H7\21\377G6\21" \
+ "\377E3\21\377D1\17\377C/\17\377A-\16\377@+\15\377@)\15\377>(\14\377\77" \
+ "&\13\377>%\13\377=#\12\377=#\11\377=\"\12\377>\"\11\377\77\"\10\377@" \
+ "\"\11\377B\"\11\377D$\11\377G%\12\377J&\12\377J'\12\377M)\13\377Q+\13" \
+ "\377T-\14\377Z2\16\377^7\20\377d;\20\377j\77\22\377pF\24\377uJ\26\377" \
+ "zO\27\377~S\31\377\203X\33\377\206[\33\377\211\\\34\377\212]\34\377\223" \
+ "i)\377\343\336\266\377\212\345\341\272\377\204\345\341\271\3772\345\341" \
+ "\270\377\326\304\223\377\251m\40\377\252n!\377\254m\40\377\254k\37\377" \
+ "\254i\37\377\255i\35\377\254f\34\377\254c\34\377\255a\32\377\254_\31" \
+ "\377\255_\32\377\260_\31\377\261`\31\377\263b\32\377\266c\32\377\270" \
+ "f\33\377\272h\34\377\276j\36\377\277n\36\377\277o\37\377\301q\37\377" \
+ "\304t\40\377\305u!\377\305w\"\377\306x#\377\306z#\377\305{#\377\306{" \
+ "#\377\303{%\377\303{$\377\302z%\377\327\270n\377\343\333\231\377\343" \
+ "\333\227\377\343\332\225\377\343\332\223\377\343\332\222\377\343\331" \
+ "\220\377\343\331\216\377\343\331\212\377\343\331\210\377\343\331\206" \
+ "\377\343\330\201\377\343\327}\377\342\326u\377\342\325n\377\341\322`" \
+ "\377\203w.\377\20292\21\377\15""82\20\3775/\17\3771,\17\377,'\16\377" \
+ "'#\14\377#\36\12\377\35\31\10\377\30\25\7\377\23\20\5\377\16\14\4\377" \
+ "\11\10\3\377\5\4\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\323\0\0" \
+ "\0\377\31\3\3\1\377\6\5\2\377\13\11\3\377\17\15\4\377\24\21\5\377\31" \
+ "\25\7\377\37\33\11\377$\37\13\377)%\14\377-(\16\3772-\17\37760\20\377" \
+ "82\20\377;3\21\377<4\21\377>5\21\377\242\231X\377\343\331\211\377\343" \
+ "\331\214\377\343\331\216\377\337\326\215\377wj8\377I;\23\377K<\24\377" \
+ "K;\23\377\202J9\22\377%H6\21\377H5\20\377G3\20\377E1\20\377E0\17\377" \
+ "D.\16\377C,\15\377C*\14\377A)\14\377A'\13\377A&\13\377A%\13\377B&\12" \
+ "\377B$\11\377B$\12\377C#\11\377D$\11\377G%\12\377I&\12\377J'\12\377M" \
+ ")\13\377P*\13\377S,\14\377W0\15\377\\5\17\377c:\20\377h>\22\377nD\24" \
+ "\377sI\25\377yM\27\377~R\30\377\202V\31\377\205Z\33\377\210\\\34\377" \
+ "\212]\34\377\214^\34\377\306\261~\377\211\345\341\270\377\202\345\340" \
+ "\270\377\204\345\340\267\377\32\344\337\264\377\262{2\377\252n!\377\254" \
+ "n\40\377\255l\37\377\254j\37\377\254h\36\377\255g\34\377\254e\34\377" \
+ "\255c\34\377\256a\32\377\257b\32\377\260`\33\377\262b\32\377\262b\33" \
+ "\377\266e\34\377\270g\34\377\271j\35\377\275m\36\377\277n\36\377\300" \
+ "q\40\377\301r\40\377\301t\40\377\302w!\377\303x\"\377\305y\"\377\202" \
+ "\305z#\377\202\303{$\377\5\303}(\377\332\274u\377\343\333\231\377\343" \
+ "\333\227\377\343\332\225\377\202\343\332\222\377\13\343\331\220\377\343" \
+ "\331\216\377\343\331\212\377\343\331\210\377\343\331\206\377\343\330" \
+ "\201\377\343\327}\377\342\326u\377\342\325n\377\342\323f\377\243\226" \
+ ";\377\20292\21\377\15""82\20\37760\20\3772-\17\377-(\16\377)%\14\377" \
+ "$\37\13\377\37\33\11\377\31\25\7\377\24\21\5\377\17\15\4\377\12\11\3" \
+ "\377\6\5\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377\324\0\0\0\377(\1" \
+ "\1\0\377\4\3\1\377\7\6\2\377\14\12\4\377\21\16\5\377\26\23\6\377\33\27" \
+ "\10\377!\34\11\377&!\13\377*%\15\377.)\16\3773-\17\37760\20\377;3\21" \
+ "\377<4\21\377>5\21\377D:\24\377\267\255g\377\343\331\211\377\343\331" \
+ "\214\377\343\331\216\377\340\326\214\377\205yD\377K<\24\377N=\24\377" \
+ "N<\23\377M<\23\377M:\22\377K8\21\377K7\21\377I6\20\377H3\17\377H1\17" \
+ "\377F/\17\377F.\16\377E,\16\377D+\15\377E+\14\377D*\13\377D(\13\377\202" \
+ "E'\13\377\3F&\12\377F%\12\377G%\12\377\202J'\12\377\22M)\13\377O)\13" \
+ "\377R,\13\377V.\14\377[4\16\377a9\20\377f=\20\377kA\23\377qG\24\377w" \
+ "L\26\377{P\27\377\200U\30\377\205Y\32\377\210\\\33\377\212]\34\377\213" \
+ "^\34\377\234u7\377\345\340\266\377\207\345\340\267\377\205\345\340\266" \
+ "\377\202\345\340\265\377\12\345\340\264\377\305\242d\377\253n\40\377" \
+ "\253m\40\377\254m\40\377\254l\37\377\254j\36\377\254h\35\377\254f\34" \
+ "\377\256e\34\377\202\255c\33\377\16\260d\33\377\261d\33\377\263e\33\377" \
+ "\267h\34\377\270i\35\377\272l\36\377\273n\37\377\276p\37\377\277s\40" \
+ "\377\300u!\377\302u\"\377\302w#\377\302x#\377\303z$\377\202\303{$\377" \
+ "\6\302z$\377\305\202/\377\335\306\200\377\343\333\230\377\343\333\226" \
+ "\377\343\332\224\377\202\343\332\222\377\14\343\331\220\377\343\331\216" \
+ "\377\343\331\212\377\343\331\210\377\343\331\206\377\343\330\201\377" \
+ "\343\327}\377\343\326x\377\342\325n\377\342\323f\377\264\247B\377>6\23" \
+ "\377\20292\21\377\15""60\20\3773-\17\377.)\16\377*%\15\377&!\13\377!" \
+ "\34\11\377\33\27\10\377\26\23\6\377\21\16\5\377\14\12\4\377\7\6\2\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\325\0\0\0\377,\2\2\1" \
+ "\377\5\4\1\377\10\7\3\377\15\13\4\377\22\17\5\377\30\25\7\377\34\30\10" \
+ "\377\"\35\12\377&!\13\377+&\15\3770+\17\3774.\20\37791\20\377<4\21\377" \
+ ">5\21\377@6\21\377F<\26\377\300\266m\377\343\331\211\377\343\331\214" \
+ "\377\343\331\216\377\343\331\220\377\251\234`\377RB\30\377N=\24\377O" \
+ "=\23\377P=\24\377O<\23\377O:\23\377M:\22\377M8\21\377L6\20\377K4\21\377" \
+ "K3\20\377I1\20\377I/\16\377I-\15\377G-\15\377H,\15\377I+\14\377G)\13" \
+ "\377I*\14\377J)\13\377J(\13\377\202K)\13\377\22M)\12\377P*\13\377R,\13" \
+ "\377U-\14\377Z1\16\377^6\17\377d;\21\377i\77\22\377oE\24\377uI\25\377" \
+ "zO\30\377\177S\31\377\204X\32\377\207[\33\377\212]\34\377\213^\34\377" \
+ "\216_\35\377\313\272\207\377\202\345\340\264\377\202\345\340\265\377" \
+ "\207\345\340\264\377\204\345\340\263\377\11\333\312\227\377\251m\40\377" \
+ "\252n!\377\254m\40\377\254k\37\377\254j\37\377\254h\36\377\255h\35\377" \
+ "\255g\34\377\202\257f\34\377\15\260f\34\377\261f\34\377\264g\34\377\266" \
+ "j\35\377\267k\36\377\270m\36\377\273o\37\377\276r\40\377\277t!\377\300" \
+ "u\"\377\300v\"\377\302y#\377\302{#\377\202\302z$\377\6\301z#\377\310" \
+ "\215<\377\341\322\216\377\343\333\230\377\343\333\226\377\343\332\224" \
+ "\377\202\343\332\222\377\14\343\331\217\377\343\331\215\377\343\331\212" \
+ "\377\343\331\210\377\343\331\206\377\343\330\201\377\343\327}\377\343" \
+ "\326x\377\342\325n\377\342\323f\377\303\265N\377B;\24\377\20292\21\377" \
+ "\15""71\20\3774.\20\377/*\16\377+&\15\377&!\13\377\"\35\12\377\34\30" \
+ "\10\377\30\25\7\377\22\17\5\377\16\14\4\377\10\7\3\377\5\4\1\377\1\1" \
+ "\0\377\377\0\0\0\377\377\0\0\0\377\327\0\0\0\377.\3\3\1\377\5\4\2\377" \
+ "\12\11\3\377\17\15\5\377\24\21\5\377\31\25\7\377\36\32\11\377#\36\12" \
+ "\377'#\14\377,'\15\3770+\17\3776/\17\377:2\21\377>5\21\377@6\21\377@" \
+ "6\22\377M@\30\377\306\275r\377\343\331\210\377\343\331\212\377\343\331" \
+ "\216\377\343\331\220\377\305\272x\377`O#\377P>\24\377Q\77\24\377R>\24" \
+ "\377R=\24\377Q<\23\377Q;\22\377Q:\22\377O8\22\377P8\21\377O6\20\377N" \
+ "4\20\377M2\16\377M1\17\377L0\16\377L.\16\377L.\15\377M.\15\377M-\15\377" \
+ "L,\14\377M+\14\377N,\14\377P,\13\377\202R,\14\377\17T-\14\377Y0\15\377" \
+ "]4\17\377b9\20\377h=\21\377mC\23\377sH\25\377wM\27\377|Q\30\377\202V" \
+ "\31\377\205Z\33\377\210\\\33\377\213^\34\377\216^\35\377\243~@\377\210" \
+ "\345\340\263\377\205\345\340\262\377\203\345\337\261\377\10\266\204=" \
+ "\377\252n!\377\253m\40\377\254m\37\377\254l\37\377\255k\37\377\255j\36" \
+ "\377\256i\35\377\202\257h\35\377\14\260h\35\377\262i\35\377\264j\36\377" \
+ "\266l\36\377\270m\37\377\270o\37\377\273q\40\377\275t!\377\276t!\377" \
+ "\277w\"\377\300x\"\377\300y#\377\203\301y#\377\23\315\234O\377\342\327" \
+ "\225\377\343\333\227\377\343\332\225\377\343\332\223\377\343\332\222" \
+ "\377\343\332\221\377\343\331\217\377\343\331\215\377\343\331\212\377" \
+ "\343\331\210\377\343\330\204\377\343\330\201\377\343\327}\377\343\326" \
+ "x\377\342\325n\377\342\323f\377\311\273Q\377IA\26\377\20292\21\377\15" \
+ "71\20\3775/\17\3770+\17\377,'\15\377'#\14\377#\36\12\377\36\32\11\377" \
+ "\31\25\7\377\23\20\5\377\17\15\5\377\12\11\3\377\5\4\2\377\3\3\1\377" \
+ "\377\0\0\0\377\377\0\0\0\377\330\0\0\0\377\33\1\1\0\377\3\3\1\377\6\5" \
+ "\2\377\13\11\3\377\20\16\4\377\25\22\6\377\32\26\7\377\37\33\11\377$" \
+ "\37\13\377($\14\377,'\16\3772,\17\37770\17\377=4\21\377@6\21\377@6\22" \
+ "\377B7\22\377SF\34\377\314\301u\377\343\331\210\377\343\331\212\377\343" \
+ "\331\215\377\343\331\217\377\331\317\207\377{k8\377R\77\24\377S\77\24" \
+ "\377\202S@\24\377\14S\77\23\377S=\23\377R<\23\377R:\22\377S:\21\377Q" \
+ "7\21\377Q7\20\377Q5\20\377P4\20\377P3\16\377P2\17\377O1\17\377\202P0" \
+ "\16\377\25Q/\16\377R/\15\377R0\15\377T/\15\377T.\15\377V/\14\377Y1\16" \
+ "\377\\4\17\377b9\20\377g=\21\377kA\23\377qF\24\377wK\26\377{O\27\377" \
+ "\200S\30\377\204X\33\377\210[\33\377\213^\34\377\214^\34\377\217_\34" \
+ "\377\320\277\214\377\213\345\337\261\377\204\345\337\260\377\25\312\255" \
+ "p\377\253n\40\377\252n!\377\254m\40\377\255l\37\377\254l\37\377\256k" \
+ "\37\377\256j\36\377\257j\36\377\260j\36\377\261j\36\377\262j\36\377\264" \
+ "l\36\377\266n\37\377\267o\40\377\271r\40\377\271r!\377\273t\"\377\275" \
+ "w\"\377\276w#\377\277x$\377\202\277y$\377\24\301})\377\327\272q\377\343" \
+ "\333\231\377\343\333\227\377\343\332\225\377\343\332\223\377\343\332" \
+ "\222\377\343\332\221\377\343\331\217\377\343\331\215\377\343\331\212" \
+ "\377\343\331\207\377\343\330\204\377\343\330\201\377\343\327}\377\343" \
+ "\326x\377\342\325n\377\342\323f\377\315\276Q\377JB\27\377\20292\21\377" \
+ "\16""82\20\3775/\17\3771,\17\377,'\16\377($\14\377$\37\13\377\37\33\11" \
+ "\377\31\25\7\377\25\22\6\377\20\16\4\377\13\11\3\377\6\5\2\377\3\3\1" \
+ "\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\331\0\0\0\377\77\1\1\0\377" \
+ "\4\3\1\377\7\6\2\377\14\12\4\377\21\16\5\377\26\23\6\377\32\26\7\377" \
+ "\40\33\11\377$\37\13\377)%\14\377.(\16\3775.\17\377:1\20\377>5\21\377" \
+ "@5\21\377B7\22\377D7\22\377ZO\40\377\317\302u\377\343\331\210\377\343" \
+ "\331\212\377\343\331\215\377\343\331\217\377\343\332\221\377\245\230" \
+ "]\377ZG\33\377TA\24\377VA\25\377WA\25\377WA\24\377V@\24\377V>\23\377" \
+ "V=\22\377U<\22\377U;\22\377U9\21\377U:\22\377T8\20\377T7\20\377T6\20" \
+ "\377U5\17\377T4\17\377U4\17\377V2\17\377U3\16\377V2\16\377W2\16\377Y" \
+ "2\15\377[4\17\377^7\20\377c:\20\377g=\22\377lC\23\377pG\24\377vJ\25\377" \
+ "{O\27\377\177S\31\377\203V\31\377\206Z\33\377\212\\\33\377\214^\34\377" \
+ "\216_\35\377\245\200A\377\211\345\337\260\377\202\345\337\257\377\203" \
+ "\345\337\256\377\23\345\337\255\377\340\327\243\377\252q%\377\252n!\377" \
+ "\253m\40\377\254m\40\377\255m\37\377\255k\37\377\256k\37\377\260l\37" \
+ "\377\260l\36\377\261l\37\377\263l\37\377\264m\37\377\266o\37\377\267" \
+ "q!\377\271r!\377\272t!\377\273v!\377\202\275w\"\377\202\275w#\377\5\307" \
+ "\216>\377\337\317\211\377\343\333\230\377\343\333\226\377\343\332\224" \
+ "\377\202\343\332\222\377\15\343\331\220\377\343\331\216\377\343\331\214" \
+ "\377\343\331\211\377\343\331\207\377\343\330\204\377\343\330\201\377" \
+ "\343\327}\377\342\326u\377\342\325n\377\342\323f\377\315\276Q\377OF\30" \
+ "\377\20292\21\377\16""82\20\37760\20\3772-\17\377-(\16\377)%\14\377$" \
+ "\37\13\377\40\33\11\377\33\27\10\377\26\23\6\377\21\16\5\377\14\12\4" \
+ "\377\7\6\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\333\0" \
+ "\0\0\377\35\2\2\1\377\5\4\1\377\10\7\3\377\15\13\4\377\22\17\5\377\27" \
+ "\24\6\377\33\27\10\377!\34\11\377%!\13\377*%\14\3770*\16\3775.\17\377" \
+ ";2\21\377@5\21\377B7\22\377C7\22\377E8\22\377UH\35\377\305\271o\377\343" \
+ "\331\207\377\343\331\211\377\343\331\214\377\343\331\216\377\343\331" \
+ "\220\377\323\311\204\377|k8\377VB\25\377XC\25\377YC\25\377\202YB\25\377" \
+ "\202Y@\24\377\36Z\77\23\377Y>\22\377X<\22\377Y<\22\377X;\21\377W:\21" \
+ "\377X8\21\377X8\20\377X7\21\377Y6\20\377Y7\17\377Z7\20\377\\7\17\377" \
+ "\\6\17\377^7\17\377`9\20\377d<\20\377h>\21\377lC\23\377qG\24\377vJ\26" \
+ "\377zO\30\377~S\31\377\203V\31\377\205Y\32\377\211\\\33\377\213^\34\377" \
+ "\216^\35\377\217_\34\377\316\275\207\377\207\345\337\256\377\204\345" \
+ "\337\255\377\202\345\336\254\377\202\345\336\253\377\10\276\226Q\377" \
+ "\251m\40\377\252n!\377\254n\40\377\255m\40\377\255m\37\377\257n\40\377" \
+ "\260m\37\377\202\261n\37\377\36\262n\40\377\263o\40\377\265p\40\377\267" \
+ "r!\377\270t\"\377\272v#\377\273w#\377\273v#\377\273v\"\377\275{(\377" \
+ "\321\254b\377\343\332\226\377\343\333\227\377\343\332\225\377\343\332" \
+ "\223\377\343\332\222\377\343\332\221\377\343\331\217\377\343\331\216" \
+ "\377\343\331\214\377\343\331\211\377\343\331\207\377\343\330\202\377" \
+ "\343\330~\377\343\327{\377\342\326u\377\342\325n\377\342\323f\377\310" \
+ "\271P\377ME\27\377\20292\21\377\16""82\20\37760\20\3772-\17\377-(\16" \
+ "\377)%\14\377%!\13\377!\34\11\377\33\27\10\377\27\24\6\377\22\17\5\377" \
+ "\15\13\4\377\10\7\3\377\5\4\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377" \
+ "\335\0\0\0\377\40\2\2\1\377\5\4\2\377\11\10\3\377\16\14\4\377\22\17\5" \
+ "\377\30\25\7\377\34\30\10\377!\34\11\377&!\13\377-'\15\3772+\17\3778" \
+ "/\17\377=3\21\377@5\22\377C7\22\377E8\22\377G9\23\377PB\31\377\275\261" \
+ "g\377\343\331\207\377\343\331\210\377\343\331\212\377\343\331\215\377" \
+ "\343\331\217\377\343\332\221\377\262\245f\377`N\35\377YC\25\377[C\26" \
+ "\377\\D\26\377\\C\25\377[B\25\377\202[A\24\377\34[@\23\377[\77\23\377" \
+ "\\\77\23\377\\>\23\377]=\22\377\\<\22\377]<\21\377];\21\377];\22\377" \
+ "^:\20\377_;\21\377_:\20\377`:\21\377b;\21\377f=\21\377jA\22\377nD\24" \
+ "\377sI\25\377wM\26\377zO\27\377~S\31\377\202V\31\377\204Y\32\377\210" \
+ "Z\33\377\213]\33\377\216^\35\377\217_\34\377\240y9\377\206\345\336\254" \
+ "\377\205\345\336\253\377\202\344\336\252\377\202\344\336\251\377\17\327" \
+ "\304\211\377\251m\40\377\253n\40\377\252n!\377\254n\40\377\256m\40\377" \
+ "\256n\40\377\257n\40\377\260o\40\377\261n\40\377\261o\40\377\263p!\377" \
+ "\265r\"\377\267s\"\377\270t!\377\202\271u\"\377\6\271v\"\377\307\225" \
+ "F\377\337\317\213\377\343\333\227\377\343\333\226\377\343\332\224\377" \
+ "\202\343\332\222\377\16\343\332\221\377\343\331\217\377\343\331\215\377" \
+ "\343\331\212\377\343\331\210\377\343\331\206\377\343\330\202\377\343" \
+ "\330~\377\343\327{\377\342\326u\377\342\325n\377\341\322`\377\302\262" \
+ "G\377G\77\25\377\20292\21\377\16""82\20\37760\20\3772-\17\377.)\16\377" \
+ "*%\15\377&!\13\377\"\35\12\377\34\30\10\377\30\25\7\377\22\17\5\377\16" \
+ "\14\4\377\11\10\3\377\5\4\2\377\3\3\1\377\377\0\0\0\377\377\0\0\0\377" \
+ "\337\0\0\0\377\35\3\3\1\377\5\4\2\377\12\11\3\377\17\15\5\377\23\20\5" \
+ "\377\30\25\7\377\35\31\10\377\"\35\12\377(\"\13\377-&\15\3774,\17\377" \
+ "9/\20\377>4\21\377C7\22\377D9\22\377F:\23\377I;\23\377N\77\26\377\261" \
+ "\245^\377\343\331\206\377\343\331\210\377\343\331\212\377\343\331\215" \
+ "\377\343\331\216\377\343\331\220\377\332\317\211\377\224\203J\377^G\30" \
+ "\377\\D\26\377\202^E\26\377\37_E\26\377_D\25\377_C\24\377`C\25\377`C" \
+ "\24\377_B\23\377`B\24\377aA\23\377`@\23\377`>\23\377`\77\22\377b\77\22" \
+ "\377b>\22\377c>\22\377d>\21\377e\77\22\377g@\22\377lC\23\377qG\25\377" \
+ "sJ\26\377xM\27\377{Q\27\377~S\31\377\202V\31\377\205Y\32\377\207Z\33" \
+ "\377\212\\\33\377\214^\34\377\216_\35\377\217_\34\377\307\262x\377\204" \
+ "\344\336\252\377\205\344\336\251\377\202\344\336\250\377\203\344\336" \
+ "\247\377\15\344\335\246\377\264\2029\377\251m\40\377\252n!\377\254n!" \
+ "\377\255n\40\377\256o\40\377\257o!\377\260o!\377\261o!\377\262q\40\377" \
+ "\263r!\377\264s!\377\202\266t\"\377\27\267s!\377\275\2033\377\326\271" \
+ "s\377\343\333\230\377\343\333\226\377\343\332\225\377\343\332\223\377" \
+ "\343\332\222\377\343\332\221\377\343\331\220\377\343\331\216\377\343" \
+ "\331\214\377\343\331\211\377\343\331\207\377\343\330\204\377\343\330" \
+ "\201\377\343\327}\377\343\326x\377\342\325r\377\342\324j\377\341\322" \
+ "`\377\261\244A\377A9\23\377\20292\21\377\16""82\20\37760\20\3772-\17" \
+ "\377.)\16\377*%\15\377&!\13\377\"\35\12\377\35\31\10\377\30\25\7\377" \
+ "\23\20\5\377\17\15\5\377\12\11\3\377\6\5\2\377\3\3\1\377\377\0\0\0\377" \
+ "\377\0\0\0\377\340\0\0\0\377!\1\1\0\377\3\3\1\377\6\5\2\377\12\11\3\377" \
+ "\17\15\4\377\24\21\5\377\31\25\7\377\35\31\10\377\"\36\12\377)#\14\377" \
+ "/(\15\3775,\16\377:0\20\377@4\21\377C7\22\377F:\23\377H;\23\377H:\23" \
+ "\377M>\26\377\241\224Q\377\343\330\204\377\343\331\207\377\343\331\211" \
+ "\377\343\331\214\377\343\331\215\377\343\331\217\377\343\332\221\377" \
+ "\322\310\201\377\217|E\377]E\26\377_F\26\377aG\27\377aG\26\377\203bF" \
+ "\26\377\5bE\25\377cD\25\377dD\25\377dD\24\377dC\25\377\202eC\24\377\24" \
+ "fB\24\377gC\23\377hC\23\377hB\24\377jD\24\377nF\24\377rI\26\377tK\27" \
+ "\377xN\27\377|Q\27\377}S\31\377\202V\32\377\205Y\32\377\207[\33\377\211" \
+ "\\\33\377\213^\34\377\216^\35\377\217_\34\377\231m,\377\340\330\242\377" \
+ "\210\344\336\247\377\204\344\335\246\377\202\344\335\245\377\1\316\264" \
+ "s\377\202\251m\40\377\20\252n!\377\254n!\377\255o!\377\256o\40\377\256" \
+ "p\40\377\260p!\377\262q!\377\262r!\377\263r!\377\263s\"\377\271~-\377" \
+ "\320\260h\377\343\332\226\377\343\333\226\377\343\332\225\377\343\332" \
+ "\223\377\202\343\332\222\377\17\343\331\220\377\343\331\217\377\343\331" \
+ "\215\377\343\331\212\377\343\331\210\377\343\331\206\377\343\330\204" \
+ "\377\343\330\201\377\343\327}\377\343\326x\377\342\325r\377\342\324j" \
+ "\377\341\322`\377\230\2157\377;4\22\377\20292\21\377\17""82\20\37760" \
+ "\20\3772-\17\377.)\16\377*%\15\377&!\13\377\"\35\12\377\35\31\10\377" \
+ "\31\25\7\377\24\21\5\377\17\15\4\377\13\11\3\377\6\5\2\377\4\3\1\377" \
+ "\1\1\0\377\377\0\0\0\377\377\0\0\0\377\341\0\0\0\377'\1\1\0\377\4\3\1" \
+ "\377\7\6\2\377\13\11\3\377\17\15\4\377\24\21\5\377\31\25\7\377\35\31" \
+ "\10\377#\37\12\377+$\14\3771)\15\3776-\17\377<1\21\377A5\21\377D7\22" \
+ "\377H;\23\377H:\23\377J;\23\377L=\24\377\177p7\377\334\320|\377\343\331" \
+ "\206\377\343\331\210\377\343\331\212\377\343\331\214\377\343\331\216" \
+ "\377\343\331\220\377\343\332\221\377\313\300{\377\207s<\377`G\27\377" \
+ "bH\27\377dG\26\377dH\27\377eI\27\377eI\26\377eH\27\377fG\26\377gH\26" \
+ "\377\202hG\26\377\2iF\25\377iG\26\377\202jF\25\377\16lF\24\377mF\25\377" \
+ "pI\26\377sJ\26\377uM\27\377yO\27\377|R\31\377~S\32\377\201V\32\377\205" \
+ "Y\32\377\206Z\33\377\210\\\33\377\212]\34\377\214^\34\377\202\217_\34" \
+ "\377\1\270\233^\377\205\344\335\246\377\204\344\335\245\377\202\344\335" \
+ "\244\377\203\344\335\243\377\2\342\332\237\377\255w,\377\202\251m\40" \
+ "\377\15\252n!\377\254n!\377\255o!\377\256p!\377\257q!\377\260q\"\377" \
+ "\261q\"\377\266z,\377\315\252a\377\342\327\224\377\343\333\226\377\343" \
+ "\332\225\377\343\332\224\377\202\343\332\222\377\17\343\332\221\377\343" \
+ "\331\217\377\343\331\216\377\343\331\214\377\343\331\211\377\343\331" \
+ "\207\377\343\331\206\377\343\330\202\377\343\330~\377\343\327{\377\342" \
+ "\326u\377\342\325n\377\342\323f\377\335\316Y\377|q)\377\20392\21\377" \
+ "\17""82\20\37760\20\3772-\17\377.)\16\377*%\15\377&!\13\377\"\35\12\377" \
+ "\35\31\10\377\31\25\7\377\24\21\5\377\17\15\4\377\13\11\3\377\7\6\2\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\343\0\0\0\377>\1\1\0" \
+ "\377\4\3\1\377\7\6\2\377\13\11\3\377\17\15\4\377\24\21\5\377\31\25\7" \
+ "\377\35\31\10\377$\37\13\377+$\14\3771(\15\3777-\17\377=1\21\377@5\21" \
+ "\377E8\22\377I;\23\377J;\23\377L=\24\377N=\24\377eU$\377\312\276n\377" \
+ "\343\330\204\377\343\331\207\377\343\331\211\377\343\331\212\377\343" \
+ "\331\215\377\343\331\216\377\343\331\220\377\343\332\222\377\313\300" \
+ "|\377\223~F\377fK\31\377dH\27\377fJ\27\377gJ\27\377hK\30\377iK\27\377" \
+ "kK\27\377kJ\27\377kI\27\377kI\26\377mJ\26\377nI\27\377nJ\26\377oJ\26" \
+ "\377qJ\26\377rL\27\377tL\27\377wN\30\377zQ\31\377|S\31\377\177V\32\377" \
+ "\202W\32\377\204Y\33\377\206[\33\377\210\\\33\377\212]\34\377\213^\34" \
+ "\377\216^\35\377\217_\34\377\221c\37\377\332\314\221\377\203\344\335" \
+ "\244\377\205\344\335\243\377\202\344\335\242\377\1\344\335\241\377\203" \
+ "\344\334\240\377\2\310\252f\377\250l\40\377\202\251m\40\377\12\252n!" \
+ "\377\253n!\377\255o!\377\256p!\377\267\2025\377\316\261j\377\342\331" \
+ "\225\377\343\333\226\377\343\332\225\377\343\332\223\377\202\343\332" \
+ "\222\377\20\343\332\221\377\343\331\220\377\343\331\216\377\343\331\214" \
+ "\377\343\331\212\377\343\331\210\377\343\331\206\377\343\330\204\377" \
+ "\343\330\201\377\343\327}\377\343\326x\377\342\325r\377\342\324j\377" \
+ "\341\322`\377\315\276L\377ZQ\35\377\20392\21\377\17""71\20\3775/\17\377" \
+ "2-\17\377-(\16\377*%\15\377&!\13\377\"\35\12\377\35\31\10\377\31\25\7" \
+ "\377\24\21\5\377\17\15\4\377\13\11\3\377\7\6\2\377\4\3\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\345\0\0\0\377\21\1\1\0\377\4\3\1\377\7\6" \
+ "\2\377\13\11\3\377\17\15\4\377\24\21\5\377\31\25\7\377\35\31\10\377#" \
+ "\36\12\377-%\14\3772)\16\3778.\17\377>2\21\377B5\21\377F8\22\377I;\23" \
+ "\377K<\24\377\202N=\24\377'VD\30\377\257\241Y\377\343\330\202\377\343" \
+ "\331\206\377\343\331\207\377\343\331\211\377\343\331\214\377\343\331" \
+ "\215\377\343\331\217\377\343\331\220\377\343\332\222\377\327\314\206" \
+ "\377\246\224V\377tZ%\377gJ\27\377iK\27\377kM\30\377lM\30\377lL\27\377" \
+ "mL\30\377nM\30\377oM\30\377qN\27\377qM\30\377rM\27\377tN\30\377sN\30" \
+ "\377vO\30\377xP\30\377{S\31\377}T\31\377\177V\32\377\201W\32\377\204" \
+ "Y\33\377\205Z\33\377\210\\\34\377\211\\\34\377\213^\34\377\214^\34\377" \
+ "\202\217_\34\377\2\242{8\377\343\333\240\377\204\344\335\241\377\204" \
+ "\344\334\240\377\202\344\334\237\377\1\344\334\236\377\202\344\334\235" \
+ "\377\3\341\327\227\377\255x,\377\250l\40\377\202\251m\40\377\7\255s%" \
+ "\377\275\221G\377\323\274v\377\343\333\227\377\343\333\226\377\343\332" \
+ "\224\377\343\332\223\377\202\343\332\222\377\21\343\332\221\377\343\331" \
+ "\220\377\343\331\216\377\343\331\215\377\343\331\212\377\343\331\210" \
+ "\377\343\331\207\377\343\330\204\377\343\330\202\377\343\330~\377\343" \
+ "\327{\377\342\326u\377\342\325n\377\342\324j\377\341\322`\377\254\237" \
+ "\77\377E=\25\377\20392\21\377\17""71\20\3775/\17\3771,\17\377-(\16\377" \
+ ")%\14\377&!\13\377\"\35\12\377\35\31\10\377\31\25\7\377\24\21\5\377\20" \
+ "\16\4\377\13\11\3\377\7\6\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\347\0\0\0\377\20\1\1\0\377\4\3\1\377\7\6\2\377\13\11\3\377" \
+ "\17\15\4\377\24\21\5\377\31\25\7\377\34\30\10\377!\35\11\377+$\14\377" \
+ "5*\16\3778.\17\377>2\21\377C6\21\377G9\22\377J;\23\377\202N=\24\377(" \
+ "P>\24\377R\77\24\377\206t8\377\326\312x\377\343\330\202\377\343\331\206" \
+ "\377\343\331\210\377\343\331\211\377\343\331\214\377\343\331\215\377" \
+ "\343\331\217\377\343\331\220\377\343\332\221\377\343\332\222\377\302" \
+ "\263p\377\226\200F\377qT\37\377lM\30\377lM\27\377oN\31\377oN\30\377q" \
+ "O\31\377sP\31\377sO\31\377sP\31\377uP\27\377vP\31\377wQ\31\377zR\31\377" \
+ "|T\31\377~V\31\377\177V\32\377\202Y\33\377\203Y\33\377\205Z\33\377\207" \
+ "[\33\377\210\\\34\377\212]\34\377\213^\34\377\216^\35\377\202\217_\34" \
+ "\377\1\272\235[\377\203\344\334\237\377\203\344\334\236\377\202\344\334" \
+ "\235\377\205\344\334\234\377\12\344\333\233\377\314\257h\377\247n!\377" \
+ "\270\214D\377\316\264m\377\341\326\221\377\343\333\226\377\343\332\225" \
+ "\377\343\332\224\377\343\332\223\377\202\343\332\222\377\21\343\332\221" \
+ "\377\343\331\220\377\343\331\216\377\343\331\215\377\343\331\212\377" \
+ "\343\331\211\377\343\331\207\377\343\331\206\377\343\330\202\377\343" \
+ "\330~\377\343\327}\377\343\326x\377\342\325r\377\342\324j\377\342\323" \
+ "f\377\331\312X\377yl'\377\20392\21\377\20""82\20\37760\20\3774.\20\377" \
+ "0+\17\377,'\16\377)%\14\377%!\13\377!\34\11\377\35\31\10\377\31\25\7" \
+ "\377\24\21\5\377\17\15\4\377\13\11\3\377\7\6\2\377\4\3\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\351\0\0\0\377=\1\1\0\377\4\3\1\377\7\6\2" \
+ "\377\13\11\3\377\17\15\4\377\24\21\5\377\30\25\7\377\34\30\10\377!\34" \
+ "\11\377&!\13\3773)\16\3779.\17\377\77""2\21\377C6\21\377G9\22\377J;\23" \
+ "\377N=\24\377P>\24\377Q\77\24\377S\77\24\377aL\34\377\261\242Y\377\343" \
+ "\330\201\377\343\330\204\377\343\331\206\377\343\331\210\377\343\331" \
+ "\211\377\343\331\214\377\343\331\215\377\343\331\216\377\343\331\220" \
+ "\377\343\332\221\377\343\332\222\377\341\327\217\377\277\257n\377\234" \
+ "\206J\377z[$\377oN\30\377qP\30\377sP\31\377uQ\32\377uQ\30\377vR\31\377" \
+ "xS\31\377yT\31\377zT\32\377}U\33\377}U\32\377\200W\32\377\202Y\32\377" \
+ "\203Y\33\377\205Z\33\377\206Z\33\377\210\\\34\377\211\\\34\377\213^\34" \
+ "\377\214^\34\377\216_\35\377\217_\34\377\221b\36\377\322\277\177\377" \
+ "\207\344\334\234\377\1\344\333\233\377\202\344\333\232\377\1\344\333" \
+ "\231\377\202\343\333\231\377\6\342\332\226\377\336\322\215\377\343\333" \
+ "\226\377\343\332\225\377\343\332\224\377\343\332\223\377\203\343\332" \
+ "\222\377\22\343\331\220\377\343\331\217\377\343\331\216\377\343\331\215" \
+ "\377\343\331\212\377\343\331\211\377\343\331\207\377\343\331\206\377" \
+ "\343\330\202\377\343\330\201\377\343\327}\377\343\327{\377\342\326u\377" \
+ "\342\325n\377\342\323f\377\341\322`\377\261\244A\377OF\30\377\20392\21" \
+ "\377\20""82\20\37760\20\3773-\17\377/*\16\377,'\15\377($\14\377$\37\13" \
+ "\377!\34\11\377\34\30\10\377\30\25\7\377\24\21\5\377\17\15\4\377\13\11" \
+ "\3\377\7\6\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\353" \
+ "\0\0\0\377\"\1\1\0\377\4\3\1\377\7\6\2\377\13\11\3\377\17\15\4\377\23" \
+ "\20\5\377\27\24\6\377\33\27\10\377\40\33\11\377#\36\12\377-%\15\3779" \
+ "-\17\377\77""2\17\377D6\21\377H9\22\377L;\23\377O>\24\377Q\77\24\377" \
+ "R\77\24\377S@\24\377VB\25\377}l2\377\320\304q\377\343\330\201\377\343" \
+ "\330\204\377\343\331\206\377\343\331\210\377\343\331\211\377\343\331" \
+ "\212\377\343\331\214\377\343\331\216\377\343\331\217\377\343\331\220" \
+ "\377\343\332\221\377\202\343\332\222\377\25\322\304\200\377\261\234]" \
+ "\377\225{@\377\200`&\377uR\31\377vS\32\377xS\31\377zT\32\377{U\32\377" \
+ "}V\32\377~V\32\377\177W\32\377\201X\33\377\202Y\33\377\204Y\33\377\205" \
+ "Z\33\377\207[\33\377\210\\\34\377\212]\34\377\213^\34\377\216^\35\377" \
+ "\202\217_\34\377\2\233o+\377\337\324\222\377\203\344\333\232\377\202" \
+ "\344\333\231\377\202\343\333\231\377\202\343\333\230\377\2\343\333\227" \
+ "\377\343\333\226\377\202\343\332\225\377\2\343\332\224\377\343\332\223" \
+ "\377\203\343\332\222\377\23\343\332\221\377\343\331\220\377\343\331\217" \
+ "\377\343\331\215\377\343\331\214\377\343\331\212\377\343\331\211\377" \
+ "\343\331\207\377\343\331\206\377\343\330\202\377\343\330\201\377\343" \
+ "\327}\377\343\327{\377\342\326u\377\342\325r\377\342\324j\377\341\322" \
+ "`\377\323\304T\377qf$\377\20492\21\377\20""71\20\3775/\17\3772-\17\377" \
+ ".)\16\377+&\15\377'#\14\377#\36\12\377\40\33\11\377\33\27\10\377\30\25" \
+ "\7\377\23\20\5\377\17\15\4\377\13\11\3\377\7\6\2\377\4\3\1\377\1\1\0" \
+ "\377\377\0\0\0\377\377\0\0\0\377\355\0\0\0\377$\1\1\0\377\4\3\1\377\7" \
+ "\6\2\377\12\11\3\377\17\15\5\377\22\17\5\377\27\24\6\377\32\26\7\377" \
+ "\37\33\11\377#\36\12\377'\"\13\3773*\16\377>1\20\377D5\21\377I9\22\377" \
+ "L;\23\377P>\24\377R\77\24\377T\77\24\377UA\25\377WB\25\377_J\31\377\244" \
+ "\223L\377\336\322{\377\343\330\201\377\343\330\204\377\343\331\206\377" \
+ "\343\331\207\377\343\331\210\377\343\331\212\377\343\331\214\377\343" \
+ "\331\215\377\343\331\216\377\343\331\217\377\343\331\220\377\343\332" \
+ "\221\377\203\343\332\222\377\22\331\314\205\377\301\257m\377\260\233" \
+ "Z\377\241\206I\377\217o2\377\203_#\377}U\32\377~V\33\377\200X\32\377" \
+ "\202X\33\377\203Y\33\377\205Z\33\377\206Z\33\377\207[\34\377\211\\\34" \
+ "\377\212]\34\377\213^\34\377\216_\35\377\202\217_\34\377\1\255\213G\377" \
+ "\202\343\333\230\377\202\343\333\227\377\202\343\333\226\377\202\343" \
+ "\332\225\377\202\343\332\224\377\1\343\332\223\377\204\343\332\222\377" \
+ "\25\343\332\221\377\343\331\220\377\343\331\217\377\343\331\216\377\343" \
+ "\331\215\377\343\331\212\377\343\331\211\377\343\331\210\377\343\331" \
+ "\207\377\343\331\206\377\343\330\202\377\343\330\201\377\343\327}\377" \
+ "\343\327{\377\342\326u\377\342\325r\377\342\324j\377\342\323f\377\335" \
+ "\316Y\377\227\2136\377B;\24\377\20392\21\377\21""82\20\37760\20\3774" \
+ ".\20\3770+\17\377-(\16\377*%\15\377&!\13\377#\36\12\377\37\33\11\377" \
+ "\32\26\7\377\27\24\6\377\22\17\5\377\17\15\5\377\12\11\3\377\7\6\2\377" \
+ "\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\357\0\0\0\377$\1\1\0" \
+ "\377\4\3\1\377\6\5\2\377\12\11\3\377\16\14\4\377\21\16\5\377\26\23\6" \
+ "\377\31\25\7\377\35\31\10\377\"\35\12\377%!\13\377+%\14\3777,\17\377" \
+ "D5\21\377H8\21\377L:\22\377Q>\24\377R\77\24\377TA\24\377WB\25\377XC\25" \
+ "\377YC\25\377hR\37\377\254\235R\377\341\326}\377\343\330\201\377\343" \
+ "\330\202\377\343\330\204\377\343\331\207\377\343\331\210\377\343\331" \
+ "\211\377\343\331\212\377\343\331\214\377\343\331\215\377\343\331\216" \
+ "\377\343\331\217\377\202\343\331\220\377\1\343\332\221\377\205\343\332" \
+ "\222\377\7\343\332\223\377\320\302~\377\317\300|\377\310\267r\377\275" \
+ "\247d\377\276\247d\377\275\247d\377\202\277\247d\377\202\300\250d\377" \
+ "\5\306\260l\377\323\302}\377\323\301|\377\342\331\224\377\343\332\225" \
+ "\377\203\343\332\224\377\202\343\332\223\377\205\343\332\222\377\2\343" \
+ "\332\221\377\343\331\220\377\202\343\331\217\377\23\343\331\216\377\343" \
+ "\331\215\377\343\331\214\377\343\331\212\377\343\331\211\377\343\331" \
+ "\207\377\343\331\206\377\343\330\204\377\343\330\202\377\343\330~\377" \
+ "\343\327}\377\343\327{\377\342\326u\377\342\325r\377\342\325n\377\342" \
+ "\323f\377\341\322`\377\254\237\77\377QH\30\377\20492\21\377\21""71\20" \
+ "\3775/\17\3772-\17\377/*\16\377,'\15\377($\14\377%!\13\377\"\35\12\377" \
+ "\35\31\10\377\31\25\7\377\26\23\6\377\21\16\5\377\16\14\4\377\12\11\3" \
+ "\377\6\5\2\377\4\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\361\0" \
+ "\0\0\377\"\1\1\0\377\3\3\1\377\5\4\2\377\11\10\3\377\15\13\4\377\20\16" \
+ "\4\377\24\21\5\377\31\25\7\377\34\30\10\377\40\33\11\377#\36\12\377&" \
+ "!\13\377-&\15\3779.\17\377F6\21\377M:\23\377P=\24\377T\77\24\377VB\25" \
+ "\377WB\25\377YC\25\377[C\26\377\\D\26\377pY$\377\264\244W\377\343\327" \
+ "}\377\343\330~\377\343\330\202\377\343\330\204\377\343\331\206\377\343" \
+ "\331\207\377\343\331\210\377\343\331\211\377\343\331\212\377\202\343" \
+ "\331\214\377\2\343\331\215\377\343\331\216\377\202\343\331\217\377\1" \
+ "\343\331\220\377\202\343\332\221\377\225\343\332\222\377\1\343\332\221" \
+ "\377\202\343\331\220\377\202\343\331\217\377\4\343\331\216\377\343\331" \
+ "\215\377\343\331\214\377\343\331\212\377\202\343\331\211\377\17\343\331" \
+ "\210\377\343\331\206\377\343\330\204\377\343\330\202\377\343\330\201" \
+ "\377\343\330~\377\343\327}\377\343\326x\377\342\326u\377\342\325r\377" \
+ "\342\324j\377\342\323f\377\341\322`\377\254\237\77\377ZQ\35\377\2049" \
+ "2\21\377\22""82\20\37760\20\3774.\20\3771,\17\377-(\16\377+&\15\377'" \
+ "#\14\377$\37\13\377!\34\11\377\34\30\10\377\31\25\7\377\25\22\6\377\21" \
+ "\16\5\377\15\13\4\377\11\10\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0" \
+ "\0\0\377\377\0\0\0\377\363\0\0\0\377\40\1\1\0\377\3\3\1\377\5\4\2\377" \
+ "\10\7\3\377\14\12\4\377\17\15\4\377\23\20\5\377\27\24\6\377\32\26\7\377" \
+ "\37\33\11\377#\36\12\377&!\13\377)%\14\377-'\15\3779.\20\377H8\21\377" \
+ "P=\23\377R>\24\377VA\25\377XC\25\377ZD\25\377[D\26\377]E\26\377_F\26" \
+ "\377w`(\377\263\243U\377\341\325z\377\343\330~\377\343\330\201\377\343" \
+ "\330\202\377\343\330\204\377\343\331\206\377\202\343\331\207\377\3\343" \
+ "\331\210\377\343\331\211\377\343\331\212\377\202\343\331\214\377\202" \
+ "\343\331\215\377\202\343\331\216\377\202\343\331\217\377\205\343\331" \
+ "\220\377\205\343\332\221\377\204\343\331\220\377\203\343\331\217\377" \
+ "\202\343\331\216\377\202\343\331\215\377\1\343\331\214\377\202\343\331" \
+ "\212\377\22\343\331\211\377\343\331\210\377\343\331\207\377\343\331\206" \
+ "\377\343\330\204\377\343\330\202\377\343\330\201\377\343\330~\377\343" \
+ "\327}\377\343\327{\377\343\326x\377\342\326u\377\342\325n\377\342\324" \
+ "j\377\342\323f\377\337\317Z\377\250\233>\377ZQ\35\377\20492\21\377\23" \
+ "82\20\37760\20\3775/\17\3772-\17\377/*\16\377,'\15\377)%\14\377&!\13" \
+ "\377#\36\12\377\37\33\11\377\32\26\7\377\27\24\6\377\23\20\5\377\17\15" \
+ "\4\377\14\12\4\377\10\7\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0\0\0" \
+ "\377\377\0\0\0\377\366\0\0\0\377\34\2\2\1\377\5\4\1\377\7\6\2\377\13" \
+ "\11\3\377\16\14\4\377\21\16\5\377\25\22\6\377\31\25\7\377\35\31\10\377" \
+ "!\34\11\377$\37\13\377'#\14\377*%\15\377,'\16\3777.\17\377F7\22\377R" \
+ "=\24\377WA\25\377YC\25\377[C\26\377[E\26\377_E\26\377_F\27\377aG\27\377" \
+ "pW\40\377\251\226J\377\330\313s\377\343\327}\377\202\343\330~\377\4\343" \
+ "\330\201\377\343\330\202\377\343\330\204\377\343\331\206\377\202\343" \
+ "\331\207\377\1\343\331\210\377\202\343\331\211\377\202\343\331\212\377" \
+ "\203\343\331\214\377\215\343\331\215\377\202\343\331\214\377\203\343" \
+ "\331\212\377\1\343\331\211\377\202\343\331\210\377\1\343\331\207\377" \
+ "\202\343\331\206\377\17\343\330\204\377\343\330\202\377\343\330\201\377" \
+ "\343\330~\377\343\327}\377\343\327{\377\343\326x\377\342\326u\377\342" \
+ "\325r\377\342\325n\377\342\324j\377\341\322`\377\325\306U\377\224\210" \
+ "6\377JB\27\377\20492\21\377\23""82\20\37771\20\37760\20\3773-\17\377" \
+ "0+\17\377-(\16\377+&\15\377'#\14\377$\37\13\377!\34\11\377\35\31\10\377" \
+ "\31\25\7\377\26\23\6\377\21\16\5\377\17\15\5\377\13\11\3\377\7\6\2\377" \
+ "\5\4\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\371\0\0\0\377\40\1\1" \
+ "\0\377\4\3\1\377\6\5\2\377\11\10\3\377\15\13\4\377\20\16\4\377\24\21" \
+ "\5\377\30\25\7\377\33\27\10\377\37\33\11\377#\36\12\377%!\13\377($\14" \
+ "\377+&\15\377-(\16\3773,\17\377\77""4\20\377M<\23\377YC\25\377[C\26\377" \
+ "]E\26\377_F\26\377aG\27\377bH\27\377dG\26\377gM\30\377\221z6\377\277" \
+ "\257[\377\343\326x\377\343\327{\377\343\327}\377\343\330~\377\202\343" \
+ "\330\201\377\1\343\330\202\377\202\343\330\204\377\202\343\331\206\377" \
+ "\202\343\331\207\377\203\343\331\210\377\213\343\331\211\377\203\343" \
+ "\331\210\377\202\343\331\207\377\202\343\331\206\377\202\343\330\204" \
+ "\377\2\343\330\202\377\343\330\201\377\202\343\330~\377\14\343\327}\377" \
+ "\343\327{\377\343\326x\377\342\326u\377\342\325r\377\342\325n\377\342" \
+ "\324j\377\342\323f\377\341\322`\377\257\243F\377pf$\377>6\23\377\204" \
+ "92\21\377\24""82\20\37771\20\37760\20\3773-\17\3771,\17\377.)\16\377" \
+ "+&\15\377($\14\377&!\13\377#\36\12\377\37\33\11\377\33\27\10\377\30\25" \
+ "\7\377\24\21\5\377\20\16\4\377\15\13\4\377\11\10\3\377\6\5\2\377\4\3" \
+ "\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\373\0\0\0\377\36\1\1\0\377" \
+ "\3\3\1\377\5\4\2\377\10\7\3\377\13\11\3\377\17\15\5\377\22\17\5\377\26" \
+ "\23\6\377\31\25\7\377\34\30\10\377\40\33\11\377#\36\12\377&!\13\377)" \
+ "%\14\377,'\15\377.)\16\3771,\17\3775.\17\377D7\22\377Q>\24\377]E\26\377" \
+ "_F\27\377aG\27\377dH\27\377dI\27\377fJ\27\377gJ\27\377sV\36\377\236\210" \
+ "\77\377\305\264^\377\202\343\326x\377\2\343\327{\377\343\327}\377\202" \
+ "\343\330~\377\202\343\330\201\377\203\343\330\202\377\204\343\330\204" \
+ "\377\207\343\331\206\377\204\343\330\204\377\203\343\330\202\377\202" \
+ "\343\330\201\377\1\343\330~\377\202\343\327}\377\2\343\327{\377\343\326" \
+ "x\377\202\342\326u\377\10\342\325r\377\342\325n\377\342\324j\377\342" \
+ "\323f\377\341\322`\377\263\247G\377\200v.\377IA\27\377\20592\21\377\25" \
+ "82\20\37771\20\37760\20\3773-\17\3771,\17\377.)\16\377,'\15\377)%\14" \
+ "\377&!\13\377#\36\12\377\40\33\11\377\34\30\10\377\31\25\7\377\26\23" \
+ "\6\377\22\17\5\377\17\15\4\377\14\12\4\377\10\7\3\377\5\4\2\377\3\3\1" \
+ "\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\376\0\0\0\377!\2\2\1\377\4" \
+ "\3\1\377\6\5\2\377\12\11\3\377\15\13\4\377\20\16\4\377\23\20\5\377\27" \
+ "\24\6\377\32\26\7\377\35\31\10\377!\34\11\377$\37\13\377&!\13\377)%\14" \
+ "\377,'\15\377.)\16\3771,\17\3773-\17\3776/\17\377A6\21\377N=\23\377Y" \
+ "C\25\377dG\26\377dH\27\377gK\27\377hJ\27\377jL\30\377kM\30\377vX\37\377" \
+ "\231\2008\377\273\250U\377\331\313n\377\342\326u\377\202\343\326x\377" \
+ "\202\343\327{\377\203\343\327}\377\205\343\330~\377\203\343\330\201\377" \
+ "\205\343\330~\377\203\343\327}\377\202\343\327{\377\202\343\326x\377" \
+ "\1\342\326u\377\202\342\325r\377\2\342\325n\377\342\324j\377\202\342" \
+ "\323f\377\4\321\303Y\377\246\231@\377tj(\377G\77\26\377\20692\21\377" \
+ "\25""82\20\37760\20\3775/\17\3773-\17\3771,\17\377.)\16\377,'\15\377" \
+ ")%\14\377&!\13\377$\37\13\377!\34\11\377\36\32\11\377\32\26\7\377\27" \
+ "\24\6\377\24\21\5\377\20\16\4\377\15\13\4\377\12\11\3\377\7\6\2\377\5" \
+ "\4\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\202\0\0" \
+ "\0\377$\1\1\0\377\3\3\1\377\5\4\2\377\10\7\3\377\13\11\3\377\17\15\5" \
+ "\377\21\16\5\377\24\21\5\377\30\25\7\377\33\27\10\377\36\32\11\377\"" \
+ "\35\12\377$\37\13\377&!\13\377)%\14\377,'\15\377.)\16\3770+\17\3773-" \
+ "\17\3775/\17\37760\20\37791\20\377C7\22\377O>\24\377XC\25\377aG\27\377" \
+ "jL\30\377lM\30\377lM\27\377nM\30\377pO\31\377\204f%\377\240\206<\377" \
+ "\273\246O\377\321\301d\377\342\325r\377\203\342\326u\377\214\343\326" \
+ "x\377\203\342\326u\377\203\342\325r\377\1\342\325n\377\202\342\324j\377" \
+ "\202\342\323f\377\4\303\266S\377\240\224\77\377{p,\377SK\33\377\2079" \
+ "2\21\377\27""82\20\37771\20\37760\20\3775/\17\3773-\17\3770+\17\377." \
+ ")\16\377,'\15\377)%\14\377'#\14\377$\37\13\377\"\35\12\377\36\32\11\377" \
+ "\33\27\10\377\30\25\7\377\25\22\6\377\21\16\5\377\17\15\5\377\13\11\3" \
+ "\377\10\7\3\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0" \
+ "\377\377\0\0\0\377\205\0\0\0\377(\2\2\1\377\4\3\1\377\6\5\2\377\11\10" \
+ "\3\377\14\12\4\377\17\15\4\377\22\17\5\377\25\22\6\377\31\25\7\377\33" \
+ "\27\10\377\37\33\11\377\"\35\12\377$\37\13\377&!\13\377)%\14\377+&\15" \
+ "\377-(\16\377/*\16\3772-\17\3774.\20\3775/\17\37760\20\37771\20\3778" \
+ "2\20\377;3\21\377C7\22\377K<\24\377P>\24\377YC\25\377aG\27\377gK\27\377" \
+ "iK\27\377tQ\31\377vS\32\377\215l(\377\237\2048\377\257\230E\377\271\241" \
+ "I\377\315\272[\377\320\277_\377\210\342\325n\377\204\342\324j\377\7\342" \
+ "\323f\377\303\267W\377\276\261P\377\235\222B\377\215\2016\377tj*\377" \
+ "ZR\36\377\21192\21\377\31""82\20\37771\20\37760\20\3775/\17\3774.\20" \
+ "\3772-\17\377/*\16\377-(\16\377+&\15\377)%\14\377&!\13\377$\37\13\377" \
+ "\"\35\12\377\37\33\11\377\33\27\10\377\31\25\7\377\25\22\6\377\22\17" \
+ "\5\377\17\15\4\377\15\13\4\377\11\10\3\377\6\5\2\377\5\4\1\377\2\2\1" \
+ "\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\207\0\0\0\377" \
+ "\32\1\1\0\377\3\3\1\377\5\4\1\377\7\6\2\377\12\11\3\377\15\13\4\377\17" \
+ "\15\4\377\22\17\5\377\25\22\6\377\31\25\7\377\33\27\10\377\36\32\11\377" \
+ "\"\35\12\377$\37\13\377&!\13\377($\14\377+&\15\377,'\16\377.)\16\377" \
+ "0+\17\3772-\17\3774.\20\3775/\17\37760\20\37771\20\37782\20\377\2119" \
+ "2\21\377\1D9\22\377\202F:\23\377\1C7\22\377\20292\21\377\1IB\31\377\203" \
+ "ZR!\377\204ZR\40\377\1@8\24\377\21592\21\377\20282\20\377\31""71\20\377" \
+ "60\20\3775/\17\3774.\20\3772-\17\3770+\17\377.)\16\377,'\16\377+&\15" \
+ "\377($\14\377&!\13\377$\37\13\377\"\35\12\377\37\33\11\377\33\27\10\377" \
+ "\31\25\7\377\26\23\6\377\23\20\5\377\20\16\4\377\15\13\4\377\12\11\3" \
+ "\377\7\6\2\377\5\4\2\377\3\3\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0" \
+ "\377\377\0\0\0\377\213\0\0\0\377\30\2\2\1\377\4\3\1\377\5\4\2\377\10" \
+ "\7\3\377\13\11\3\377\15\13\4\377\20\16\4\377\22\17\5\377\25\22\6\377" \
+ "\30\25\7\377\32\26\7\377\35\31\10\377!\34\11\377#\36\12\377%!\13\377" \
+ "'#\14\377)%\14\377+&\15\377,'\16\377.)\16\3770+\17\3772-\17\3774.\20" \
+ "\3775/\17\377\20260\20\377\1""71\20\377\20282\20\377\23492\21\377\202" \
+ "82\20\377\1""71\20\377\20260\20\377\30""5/\17\3773-\17\3772-\17\3770" \
+ "+\17\377.)\16\377,'\16\377+&\15\377)%\14\377'#\14\377%!\13\377#\36\12" \
+ "\377!\34\11\377\36\32\11\377\33\27\10\377\31\25\7\377\26\23\6\377\23" \
+ "\20\5\377\20\16\4\377\16\14\4\377\13\11\3\377\10\7\3\377\5\4\2\377\4" \
+ "\3\1\377\2\2\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\216\0\0" \
+ "\0\377\33\1\1\0\377\2\2\1\377\4\3\1\377\5\4\2\377\10\7\3\377\13\11\3" \
+ "\377\15\13\4\377\17\15\4\377\22\17\5\377\25\22\6\377\30\25\7\377\31\25" \
+ "\7\377\34\30\10\377\37\33\11\377\"\35\12\377$\37\13\377&!\13\377'#\14" \
+ "\377)%\14\377+&\15\377,'\16\377.)\16\377/*\16\3771,\17\3772-\17\3774" \
+ ".\20\3775/\17\377\20360\20\377\20271\20\377\20382\20\377\21692\21\377" \
+ "\20382\20\377\20271\20\377\20360\20\377\33""5/\17\3774.\20\3772-\17\377" \
+ "1,\17\377/*\16\377.)\16\377,'\16\377+&\15\377)%\14\377'#\14\377&!\13" \
+ "\377$\37\13\377\"\35\12\377\37\33\11\377\34\30\10\377\31\25\7\377\30" \
+ "\25\7\377\25\22\6\377\22\17\5\377\20\16\4\377\16\14\4\377\13\11\3\377" \
+ "\10\7\3\377\6\5\2\377\4\3\1\377\2\2\1\377\1\1\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\221\0\0\0\377\32\1\1\0\377\2\2\1\377\4\3\1\377" \
+ "\5\4\2\377\10\7\3\377\13\11\3\377\15\13\4\377\17\15\4\377\21\16\5\377" \
+ "\24\21\5\377\27\24\6\377\31\25\7\377\33\27\10\377\35\31\10\377\40\33" \
+ "\11\377\"\35\12\377$\37\13\377&!\13\377'#\14\377)%\14\377*%\15\377,'" \
+ "\15\377,'\16\377.)\16\377/*\16\3770+\17\377\2022-\17\377\2""3-\17\377" \
+ "4.\20\377\2025/\17\377\22060\20\377\2025/\17\377\36""4.\20\3773-\17\377" \
+ "2-\17\3771,\17\3770+\17\377/*\16\377.)\16\377,'\16\377,'\15\377*%\15" \
+ "\377)%\14\377'#\14\377&!\13\377$\37\13\377\"\35\12\377\40\33\11\377\35" \
+ "\31\10\377\33\27\10\377\31\25\7\377\27\24\6\377\24\21\5\377\21\16\5\377" \
+ "\17\15\4\377\15\13\4\377\13\11\3\377\10\7\3\377\6\5\2\377\4\3\1\377\2" \
+ "\2\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\225\0\0" \
+ "\0\377\33\1\1\0\377\2\2\1\377\4\3\1\377\5\4\2\377\10\7\3\377\12\11\3" \
+ "\377\14\12\4\377\17\15\5\377\20\16\4\377\22\17\5\377\25\22\6\377\27\24" \
+ "\6\377\31\25\7\377\33\27\10\377\35\31\10\377\37\33\11\377\"\35\12\377" \
+ "#\36\12\377%!\13\377&!\13\377'#\14\377)%\14\377*%\15\377+&\15\377,'\15" \
+ "\377-(\16\377.)\16\377\202/*\16\377\1""0+\17\377\2021,\17\377\2032-\17" \
+ "\377\2063-\17\377\2032-\17\377\2021,\17\377\36""0+\17\377/*\16\377.)" \
+ "\16\377-(\16\377,'\16\377,'\15\377+&\15\377*%\15\377)%\14\377'#\14\377" \
+ "&!\13\377$\37\13\377#\36\12\377\"\35\12\377\37\33\11\377\35\31\10\377" \
+ "\33\27\10\377\31\25\7\377\27\24\6\377\25\22\6\377\22\17\5\377\20\16\4" \
+ "\377\17\15\5\377\14\12\4\377\12\11\3\377\10\7\3\377\5\4\2\377\4\3\1\377" \
+ "\2\2\1\377\1\1\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\231\0" \
+ "\0\0\377\25\1\1\0\377\2\2\1\377\4\3\1\377\5\4\2\377\7\6\2\377\11\10\3" \
+ "\377\13\11\3\377\15\13\4\377\17\15\4\377\21\16\5\377\23\20\5\377\25\22" \
+ "\6\377\27\24\6\377\31\25\7\377\32\26\7\377\34\30\10\377\36\32\11\377" \
+ "\40\33\11\377\"\35\12\377#\36\12\377$\37\13\377\202&!\13\377\4'#\14\377" \
+ "($\14\377)%\14\377*%\15\377\202+&\15\377\1,'\15\377\203,'\16\377\206" \
+ "-(\16\377\203,'\16\377\1,'\15\377\202+&\15\377\33*%\15\377)%\14\377(" \
+ "$\14\377'#\14\377&!\13\377%!\13\377$\37\13\377#\36\12\377\"\35\12\377" \
+ "\40\33\11\377\36\32\11\377\34\30\10\377\32\26\7\377\31\25\7\377\27\24" \
+ "\6\377\25\22\6\377\23\20\5\377\21\16\5\377\17\15\4\377\15\13\4\377\13" \
+ "\11\3\377\11\10\3\377\7\6\2\377\5\4\2\377\4\3\1\377\2\2\1\377\1\1\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\235\0\0\0\377\26\1\1\0\377" \
+ "\2\2\1\377\3\3\1\377\5\4\1\377\6\5\2\377\10\7\3\377\12\11\3\377\14\12" \
+ "\4\377\16\14\4\377\17\15\4\377\21\16\5\377\22\17\5\377\24\21\5\377\26" \
+ "\23\6\377\30\25\7\377\31\25\7\377\33\27\10\377\34\30\10\377\36\32\11" \
+ "\377\37\33\11\377!\34\11\377\"\35\12\377\202#\36\12\377\202$\37\13\377" \
+ "\1%!\13\377\204&!\13\377\206'#\14\377\204&!\13\377\1%!\13\377\202$\37" \
+ "\13\377\202#\36\12\377\26\"\35\12\377\40\33\11\377\37\33\11\377\35\31" \
+ "\10\377\34\30\10\377\32\26\7\377\31\25\7\377\30\25\7\377\26\23\6\377" \
+ "\24\21\5\377\22\17\5\377\21\16\5\377\17\15\4\377\16\14\4\377\14\12\4" \
+ "\377\12\11\3\377\10\7\3\377\6\5\2\377\5\4\1\377\3\3\1\377\2\2\1\377\1" \
+ "\1\0\377\377\0\0\0\377\377\0\0\0\377\312\0\0\0\377\206\1\1\1\377\321" \
+ "\0\0\0\377\20\1\1\0\377\2\2\1\377\4\3\1\377\5\4\1\377\6\5\2\377\10\7" \
+ "\3\377\12\11\3\377\13\11\3\377\15\13\4\377\17\15\5\377\20\16\4\377\21" \
+ "\16\5\377\23\20\5\377\24\21\5\377\26\23\6\377\27\24\6\377\202\31\25\7" \
+ "\377\6\32\26\7\377\33\27\10\377\34\30\10\377\35\31\10\377\36\32\11\377" \
+ "\37\33\11\377\202\40\33\11\377\203!\34\11\377\204\"\35\12\377\203!\34" \
+ "\11\377\202\40\33\11\377\6\37\33\11\377\36\32\11\377\35\31\10\377\34" \
+ "\30\10\377\33\27\10\377\32\26\7\377\202\31\25\7\377\20\27\24\6\377\26" \
+ "\23\6\377\24\21\5\377\23\20\5\377\21\16\5\377\20\16\4\377\17\15\5\377" \
+ "\15\13\4\377\13\11\3\377\12\11\3\377\10\7\3\377\6\5\2\377\5\4\1\377\4" \
+ "\3\1\377\2\2\1\377\1\1\0\377\226\0\0\0\377\206\1\1\1\377\266\0\0\0\377" \
+ "\206\1\1\1\377\377\0\0\0\377\354\0\0\0\377\211\1\1\1\377\204\2\2\2\377" \
+ "\210\1\1\1\377\210\0\0\0\377\227\1\1\1\377\214\0\0\0\377\223\1\1\1\377" \
+ "\207\0\0\0\377\207\1\1\1\377\202\2\2\1\377\16\4\4\2\377\5\4\2\377\6\5" \
+ "\2\377\7\6\3\377\10\7\3\377\12\11\4\377\13\12\4\377\15\13\5\377\16\14" \
+ "\5\377\20\16\6\377\20\16\5\377\22\17\6\377\23\20\6\377\24\21\6\377\202" \
+ "\25\22\6\377\3\26\23\6\377\27\24\6\377\30\25\7\377\203\31\25\7\377\1" \
+ "\32\26\10\377\210\33\27\10\377\204\32\26\10\377\23\31\26\10\377\30\25" \
+ "\7\377\27\24\7\377\26\23\7\377\25\22\6\377\24\21\6\377\23\20\6\377\22" \
+ "\17\6\377\20\16\5\377\20\16\6\377\16\14\5\377\15\13\5\377\13\12\4\377" \
+ "\12\11\4\377\10\7\3\377\7\6\3\377\6\5\2\377\5\4\2\377\4\4\2\377\202\2" \
+ "\2\1\377\204\1\1\1\377\214\0\0\0\377\211\1\1\1\377\204\2\2\2\377\210" \
+ "\1\1\1\377\205\0\0\0\377\215\1\1\1\377\206\0\0\0\377\230\1\1\1\377\204" \
+ "\2\2\2\377\211\1\1\1\377\377\0\0\0\377\340\0\0\0\377\205\1\1\1\377\204" \
+ "\2\2\2\377\214\3\3\3\377\204\2\2\2\377\211\1\1\1\377\205\2\2\2\377\213" \
+ "\3\3\3\377\205\2\2\2\377\205\1\1\1\377\204\0\0\0\377\205\1\1\1\377\204" \
+ "\2\2\2\377\211\3\3\3\377\205\2\2\2\377\210\1\1\1\377\205\2\2\2\377\204" \
+ "\3\3\3\377\202\4\4\3\377\202\6\6\4\377\12\10\7\4\377\10\7\5\377\11\10" \
+ "\5\377\12\11\5\377\13\12\5\377\14\13\5\377\15\13\5\377\16\14\6\377\17" \
+ "\15\6\377\17\15\5\377\202\20\16\5\377\1\21\17\5\377\202\22\17\6\377\1" \
+ "\23\20\6\377\202\24\21\6\377\1\25\22\7\377\204\26\23\7\377\202\27\24" \
+ "\10\377\203\26\23\10\377\1\25\22\10\377\202\24\21\10\377\15\23\21\7\377" \
+ "\22\20\7\377\22\20\10\377\21\17\7\377\20\16\7\377\17\15\7\377\16\14\6" \
+ "\377\15\14\6\377\14\13\6\377\12\11\5\377\11\10\5\377\10\7\5\377\10\7" \
+ "\4\377\202\6\6\4\377\202\4\4\3\377\1\3\3\3\377\206\2\2\2\377\204\1\1" \
+ "\1\377\204\0\0\0\377\204\1\1\1\377\204\2\2\2\377\215\3\3\3\377\226\2" \
+ "\2\2\377\206\1\1\1\377\206\2\2\2\377\202\3\3\3\377\212\2\2\2\377\216" \
+ "\3\3\3\377\204\2\2\2\377\205\1\1\1\377\377\0\0\0\377\332\0\0\0\377\203" \
+ "\1\1\1\377\202\2\2\2\377\205\3\3\3\377\216\4\4\4\377\220\3\3\3\377\215" \
+ "\4\4\4\377\206\3\3\3\377\202\2\2\2\377\206\1\1\1\377\202\2\2\2\377\206" \
+ "\3\3\3\377\212\4\4\4\377\220\3\3\3\377\211\4\4\4\377\5\5\5\4\377\6\6" \
+ "\5\377\7\7\5\377\10\7\5\377\11\10\5\377\202\10\7\5\377\4\11\10\5\377" \
+ "\12\11\5\377\13\12\6\377\14\13\6\377\202\15\14\6\377\1\16\14\6\377\202" \
+ "\17\15\7\377\203\20\16\7\377\203\21\17\7\377\203\22\20\10\377\203\21" \
+ "\17\10\377\202\20\16\10\377\1\17\15\7\377\202\16\15\7\377\5\15\14\7\377" \
+ "\14\13\7\377\13\12\6\377\12\11\6\377\11\10\6\377\202\11\10\5\377\4\10" \
+ "\7\5\377\7\7\5\377\6\6\5\377\5\5\4\377\207\4\4\4\377\205\3\3\3\377\204" \
+ "\2\2\2\377\203\1\1\1\377\203\2\2\2\377\205\3\3\3\377\216\4\4\4\377\241" \
+ "\3\3\3\377\233\4\4\4\377\205\3\3\3\377\202\2\2\2\377\203\1\1\1\377\377" \
+ "\0\0\0\377\326\0\0\0\377\202\1\1\1\377\202\2\2\2\377\203\3\3\3\377\203" \
+ "\4\4\4\377\204\5\5\5\377\212\6\6\6\377\205\5\5\5\377\213\4\4\4\377\205" \
+ "\5\5\5\377\207\6\6\6\377\206\5\5\5\377\203\4\4\4\377\212\3\3\3\377\203" \
+ "\4\4\4\377\207\5\5\5\377\1\6\6\6\377\230\5\5\5\377\210\6\6\6\377\202" \
+ "\5\5\5\377\202\6\6\5\377\2\7\7\6\377\10\10\6\377\202\10\7\5\377\202\11" \
+ "\10\5\377\1\11\10\6\377\202\12\11\6\377\203\13\12\6\377\1\14\13\7\377" \
+ "\212\15\14\10\377\202\14\13\10\377\1\13\12\10\377\202\13\12\7\377\202" \
+ "\12\11\7\377\2\11\11\7\377\10\10\7\377\202\7\7\6\377\210\6\6\6\377\205" \
+ "\5\5\5\377\204\4\4\4\377\210\3\3\3\377\204\4\4\4\377\204\5\5\5\377\212" \
+ "\6\6\6\377\251\5\5\5\377\223\6\6\6\377\204\5\5\5\377\203\4\4\4\377\203" \
+ "\3\3\3\377\202\2\2\2\377\202\1\1\1\377\377\0\0\0\377\322\0\0\0\377\202" \
+ "\1\1\1\377\202\2\2\2\377\202\3\3\3\377\202\4\4\4\377\202\5\5\5\377\203" \
+ "\6\6\6\377\203\7\7\7\377\212\10\10\10\377\206\7\7\7\377\213\6\6\6\377" \
+ "\203\7\7\7\377\211\10\10\10\377\203\7\7\7\377\203\6\6\6\377\215\5\5\5" \
+ "\377\203\6\6\6\377\205\7\7\7\377\204\10\10\10\377\225\7\7\7\377\212\10" \
+ "\10\10\377\205\7\7\7\377\1\6\6\6\377\202\7\7\6\377\202\10\10\7\377\204" \
+ "\11\11\7\377\202\12\11\7\377\205\13\12\10\377\203\14\13\11\377\204\13" \
+ "\13\11\377\202\12\12\11\377\202\11\11\10\377\215\10\10\10\377\204\7\7" \
+ "\7\377\203\6\6\6\377\213\5\5\5\377\204\6\6\6\377\203\7\7\7\377\215\10" \
+ "\10\10\377\214\7\7\7\377\205\6\6\6\377\223\7\7\7\377\225\10\10\10\377" \
+ "\203\7\7\7\377\203\6\6\6\377\202\5\5\5\377\202\4\4\4\377\202\3\3\3\377" \
+ "\202\2\2\2\377\202\1\1\1\377\377\0\0\0\377\316\0\0\0\377\202\1\1\1\377" \
+ "\202\2\2\2\377\202\3\3\3\377\1\4\4\4\377\202\5\5\5\377\202\6\6\6\377" \
+ "\202\7\7\7\377\202\10\10\10\377\203\11\11\11\377\212\12\12\12\377\224" \
+ "\11\11\11\377\211\12\12\12\377\203\11\11\11\377\205\10\10\10\377\211" \
+ "\7\7\7\377\205\10\10\10\377\205\11\11\11\377\203\12\12\12\377\226\11" \
+ "\11\11\377\212\12\12\12\377\221\11\11\11\377\204\12\12\11\377\230\12" \
+ "\12\12\377\204\11\11\11\377\222\10\10\10\377\203\11\11\11\377\222\12" \
+ "\12\12\377\210\11\11\11\377\202\10\10\10\377\224\11\11\11\377\226\12" \
+ "\12\12\377\203\11\11\11\377\202\10\10\10\377\202\7\7\7\377\202\6\6\6" \
+ "\377\202\5\5\5\377\1\4\4\4\377\202\3\3\3\377\202\2\2\2\377\202\1\1\1" \
+ "\377\377\0\0\0\377\313\0\0\0\377\202\1\1\1\377\1\2\2\2\377\202\3\3\3" \
+ "\377\1\4\4\4\377\202\5\5\5\377\1\6\6\6\377\202\7\7\7\377\1\10\10\10\377" \
+ "\202\11\11\11\377\202\12\12\12\377\203\13\13\13\377\212\14\14\14\377" \
+ "\225\13\13\13\377\210\14\14\14\377\203\13\13\13\377\224\12\12\12\377" \
+ "\204\13\13\13\377\204\14\14\14\377\225\13\13\13\377\212\14\14\14\377" \
+ "\225\13\13\13\377\204\14\14\14\377\221\15\15\15\377\204\14\14\14\377" \
+ "\203\13\13\13\377\221\12\12\12\377\204\13\13\13\377\225\14\14\14\377" \
+ "\233\13\13\13\377\204\14\14\14\377\214\15\15\15\377\206\14\14\14\377" \
+ "\203\13\13\13\377\202\12\12\12\377\202\11\11\11\377\1\10\10\10\377\202" \
+ "\7\7\7\377\1\6\6\6\377\202\5\5\5\377\1\4\4\4\377\202\3\3\3\377\1\2\2" \
+ "\2\377\202\1\1\1\377\377\0\0\0\377\310\0\0\0\377\202\1\1\1\377\1\2\2" \
+ "\2\377\202\3\3\3\377\202\4\4\4\377\4\5\5\5\377\6\6\6\377\7\7\7\377\10" \
+ "\10\10\377\202\11\11\11\377\1\12\12\12\377\202\13\13\13\377\202\14\14" \
+ "\14\377\203\15\15\15\377\203\16\16\16\377\204\17\17\17\377\214\16\16" \
+ "\16\377\212\15\15\15\377\213\16\16\16\377\204\15\15\15\377\217\14\14" \
+ "\14\377\206\15\15\15\377\235\16\16\16\377\205\17\17\17\377\231\16\16" \
+ "\16\377\207\17\17\17\377\206\20\20\20\377\210\17\17\17\377\202\16\16" \
+ "\16\377\207\15\15\15\377\204\14\14\14\377\214\15\15\15\377\204\16\16" \
+ "\16\377\203\17\17\17\377\204\16\16\16\377\206\17\17\17\377\207\16\16" \
+ "\16\377\211\15\15\15\377\212\16\16\16\377\204\15\15\15\377\204\16\16" \
+ "\16\377\221\17\17\17\377\203\16\16\16\377\203\15\15\15\377\202\14\14" \
+ "\14\377\202\13\13\13\377\2\12\12\12\377\11\11\11\377\202\10\10\10\377" \
+ "\3\7\7\7\377\6\6\6\377\5\5\5\377\202\4\4\4\377\202\3\3\3\377\1\2\2\2" \
+ "\377\202\1\1\1\377\377\0\0\0\377\305\0\0\0\377\202\1\1\1\377\1\2\2\2" \
+ "\377\202\3\3\3\377\5\4\4\4\377\5\5\5\377\6\6\6\377\7\7\7\377\10\10\10" \
+ "\377\202\11\11\11\377\3\12\12\12\377\13\13\13\377\14\14\14\377\202\15" \
+ "\15\15\377\1\16\16\16\377\202\17\17\17\377\204\20\20\20\377\206\21\21" \
+ "\21\377\230\20\20\20\377\206\21\21\21\377\204\20\20\20\377\224\17\17" \
+ "\17\377\235\20\20\20\377\211\21\21\21\377\227\20\20\20\377\205\21\21" \
+ "\21\377\215\22\22\22\377\205\21\21\21\377\204\20\20\20\377\216\17\17" \
+ "\17\377\210\20\20\20\377\224\21\21\21\377\216\20\20\20\377\203\21\21" \
+ "\21\377\212\20\20\20\377\206\21\21\21\377\207\22\22\22\377\207\21\21" \
+ "\21\377\204\20\20\20\377\202\17\17\17\377\1\16\16\16\377\202\15\15\15" \
+ "\377\3\14\14\14\377\13\13\13\377\12\12\12\377\202\11\11\11\377\5\10\10" \
+ "\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\202\3\3\3\377\1\2\2\2" \
+ "\377\202\1\1\1\377\377\0\0\0\377\303\0\0\0\377\202\1\1\1\377\2\2\2\2" \
+ "\377\3\3\3\377\202\4\4\4\377\13\5\5\5\377\6\6\6\377\7\7\7\377\10\10\10" \
+ "\377\11\11\11\377\12\12\12\377\13\13\13\377\14\14\14\377\15\15\15\377" \
+ "\16\16\16\377\17\17\17\377\202\20\20\20\377\202\21\21\21\377\202\22\22" \
+ "\22\377\247\23\23\23\377\205\22\22\22\377\217\21\21\21\377\210\22\22" \
+ "\22\377\233\23\23\23\377\204\24\24\24\377\232\23\23\23\377\224\24\24" \
+ "\24\377\203\23\23\23\377\230\22\22\22\377\206\23\23\23\377\215\24\24" \
+ "\24\377\204\23\23\23\377\210\22\22\22\377\223\23\23\23\377\220\24\24" \
+ "\24\377\204\23\23\23\377\202\22\22\22\377\202\21\21\21\377\202\20\20" \
+ "\20\377\13\17\17\17\377\16\16\16\377\15\15\15\377\14\14\14\377\13\13" \
+ "\13\377\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7\377\6\6\6\377\5" \
+ "\5\5\377\202\4\4\4\377\2\3\3\3\377\2\2\2\377\202\1\1\1\377\377\0\0\0" \
+ "\377\301\0\0\0\377\202\1\1\1\377\20\2\2\2\377\3\3\3\377\4\4\4\377\5\5" \
+ "\5\377\6\6\6\377\7\7\7\377\10\10\10\377\11\11\11\377\12\12\12\377\13" \
+ "\13\13\377\14\14\14\377\15\15\15\377\16\16\16\377\17\17\17\377\20\20" \
+ "\20\377\21\21\21\377\202\22\22\22\377\1\23\23\23\377\202\24\24\24\377" \
+ "\204\25\25\25\377\205\26\26\26\377\231\25\25\25\377\204\26\26\26\377" \
+ "\204\25\25\25\377\227\24\24\24\377\214\25\25\25\377\206\26\26\26\377" \
+ "\211\25\25\25\377\211\26\26\26\377\226\25\25\25\377\204\26\26\26\377" \
+ "\220\27\27\27\377\203\26\26\26\377\204\25\25\25\377\222\24\24\24\377" \
+ "\207\25\25\25\377\222\26\26\26\377\215\25\25\25\377\205\26\26\26\377" \
+ "\211\25\25\25\377\203\26\26\26\377\215\27\27\27\377\203\26\26\26\377" \
+ "\204\25\25\25\377\202\24\24\24\377\1\23\23\23\377\202\22\22\22\377\20" \
+ "\21\21\21\377\20\20\20\377\17\17\17\377\16\16\16\377\15\15\15\377\14" \
+ "\14\14\377\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7" \
+ "\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\202\1\1\1\377" \
+ "\377\0\0\0\377\277\0\0\0\377\202\1\1\1\377\22\2\2\2\377\3\3\3\377\4\4" \
+ "\4\377\5\5\5\377\6\6\6\377\7\7\7\377\10\10\10\377\11\11\11\377\12\12" \
+ "\12\377\14\14\14\377\15\15\15\377\16\16\16\377\17\17\17\377\20\20\20" \
+ "\377\21\21\21\377\22\22\22\377\23\23\23\377\24\24\24\377\202\25\25\25" \
+ "\377\1\26\26\26\377\202\27\27\27\377\203\30\30\30\377\220\31\31\31\377" \
+ "\216\30\30\30\377\204\31\31\31\377\203\30\30\30\377\232\27\27\27\377" \
+ "\207\30\30\30\377\236\31\31\31\377\220\30\30\30\377\212\31\31\31\377" \
+ "\212\32\32\32\377\206\31\31\31\377\203\30\30\30\377\225\27\27\27\377" \
+ "\205\30\30\30\377\223\31\31\31\377\213\30\30\30\377\207\31\31\31\377" \
+ "\207\30\30\30\377\207\31\31\31\377\206\32\32\32\377\207\31\31\31\377" \
+ "\203\30\30\30\377\202\27\27\27\377\1\26\26\26\377\202\25\25\25\377\22" \
+ "\24\24\24\377\23\23\23\377\22\22\22\377\21\21\21\377\20\20\20\377\17" \
+ "\17\17\377\16\16\16\377\15\15\15\377\14\14\14\377\12\12\12\377\11\11" \
+ "\11\377\10\10\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377" \
+ "\2\2\2\377\202\1\1\1\377\377\0\0\0\377\276\0\0\0\377\26\1\1\1\377\2\2" \
+ "\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\7\7\7\377\10\10\10\377" \
+ "\12\12\12\377\13\13\13\377\14\14\14\377\15\15\15\377\17\17\17\377\20" \
+ "\20\20\377\21\21\21\377\22\22\22\377\23\23\23\377\24\24\24\377\25\25" \
+ "\25\377\26\26\26\377\27\27\27\377\30\30\30\377\202\31\31\31\377\203\32" \
+ "\32\32\377\244\33\33\33\377\210\32\32\32\377\207\31\31\31\377\221\32" \
+ "\32\32\377\270\33\33\33\377\221\34\34\34\377\203\33\33\33\377\232\32" \
+ "\32\32\377\207\33\33\33\377\212\34\34\34\377\205\33\33\33\377\210\32" \
+ "\32\32\377\223\33\33\33\377\217\34\34\34\377\203\33\33\33\377\203\32" \
+ "\32\32\377\202\31\31\31\377\26\30\30\30\377\27\27\27\377\26\26\26\377" \
+ "\25\25\25\377\24\24\24\377\23\23\23\377\22\22\22\377\21\21\21\377\20" \
+ "\20\20\377\17\17\17\377\15\15\15\377\14\14\14\377\13\13\13\377\12\12" \
+ "\12\377\10\10\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377" \
+ "\2\2\2\377\1\1\1\377\377\0\0\0\377\275\0\0\0\377\24\1\1\1\377\2\2\2\377" \
+ "\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\7\7\7\377\11\11\11\377\12\12" \
+ "\12\377\13\13\13\377\15\15\15\377\16\16\16\377\17\17\17\377\20\20\20" \
+ "\377\22\22\22\377\23\23\23\377\24\24\24\377\25\25\25\377\26\26\26\377" \
+ "\30\30\30\377\202\31\31\31\377\2\32\32\32\377\33\33\33\377\202\34\34" \
+ "\34\377\202\35\35\35\377\244\36\36\36\377\204\35\35\35\377\227\34\34" \
+ "\34\377\205\35\35\35\377\270\36\36\36\377\221\37\37\37\377\203\36\36" \
+ "\36\377\204\35\35\35\377\212\34\34\34\377\215\35\35\35\377\207\36\36" \
+ "\36\377\211\37\37\37\377\205\36\36\36\377\211\35\35\35\377\223\36\36" \
+ "\36\377\215\37\37\37\377\204\36\36\36\377\202\35\35\35\377\202\34\34" \
+ "\34\377\2\33\33\33\377\32\32\32\377\202\31\31\31\377\24\30\30\30\377" \
+ "\26\26\26\377\25\25\25\377\24\24\24\377\23\23\23\377\22\22\22\377\20" \
+ "\20\20\377\17\17\17\377\16\16\16\377\15\15\15\377\13\13\13\377\12\12" \
+ "\12\377\11\11\11\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377" \
+ "\2\2\2\377\1\1\1\377\377\0\0\0\377\273\0\0\0\377\202\1\1\1\377\202\3" \
+ "\3\3\377\24\4\4\4\377\6\6\6\377\7\7\7\377\10\10\10\377\12\12\12\377\13" \
+ "\13\13\377\15\15\15\377\16\16\16\377\20\20\20\377\21\21\21\377\22\22" \
+ "\22\377\24\24\24\377\25\25\25\377\26\26\26\377\30\30\30\377\31\31\31" \
+ "\377\32\32\32\377\33\33\33\377\34\34\34\377\35\35\35\377\202\36\36\36" \
+ "\377\202\37\37\37\377\205\40\40\40\377\217!!!\377\215\40\40\40\377\202" \
+ "!!!\377\205\40\40\40\377\231\37\37\37\377\206\40\40\40\377\267!!!\377" \
+ "\217\"\"\"\377\203!!!\377\205\40\40\40\377\214\37\37\37\377\215\40\40" \
+ "\40\377\221!!!\377\214\40\40\40\377\210!!!\377\206\40\40\40\377\205!" \
+ "!!\377\213\"\"\"\377\204!!!\377\202\40\40\40\377\202\37\37\37\377\202" \
+ "\36\36\36\377\24\35\35\35\377\34\34\34\377\33\33\33\377\32\32\32\377" \
+ "\31\31\31\377\30\30\30\377\26\26\26\377\25\25\25\377\24\24\24\377\22" \
+ "\22\22\377\21\21\21\377\20\20\20\377\16\16\16\377\15\15\15\377\13\13" \
+ "\13\377\12\12\12\377\10\10\10\377\7\7\7\377\6\6\6\377\4\4\4\377\202\3" \
+ "\3\3\377\202\1\1\1\377\377\0\0\0\377\272\0\0\0\377\32\1\1\1\377\2\2\2" \
+ "\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\10\10\10\377\12\12\12\377" \
+ "\13\13\13\377\15\15\15\377\16\16\16\377\20\20\20\377\21\21\21\377\23" \
+ "\23\23\377\24\24\24\377\25\25\25\377\27\27\27\377\31\31\31\377\32\32" \
+ "\32\377\33\33\33\377\34\34\34\377\35\35\35\377\36\36\36\377\37\37\37" \
+ "\377\40\40\40\377!!!\377\202\"\"\"\377\250###\377\231\"\"\"\377\236#" \
+ "##\377\1$$$\377\233###\377\204$$$\377\215%%%\377\203$$$\377\205###\377" \
+ "\217\"\"\"\377\215###\377\216$$$\377\220###\377\1$$$\377\214###\377\204" \
+ "$$$\377\211%%%\377\204$$$\377\203###\377\202\"\"\"\377\32!!!\377\40\40" \
+ "\40\377\37\37\37\377\36\36\36\377\35\35\35\377\34\34\34\377\33\33\33" \
+ "\377\32\32\32\377\31\31\31\377\27\27\27\377\25\25\25\377\24\24\24\377" \
+ "\23\23\23\377\21\21\21\377\20\20\20\377\16\16\16\377\15\15\15\377\13" \
+ "\13\13\377\12\12\12\377\10\10\10\377\7\7\7\377\5\5\5\377\4\4\4\377\3" \
+ "\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\271\0\0\0\377\31\1\1\1\377" \
+ "\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\10\10\10\377\11\11" \
+ "\11\377\13\13\13\377\15\15\15\377\16\16\16\377\20\20\20\377\21\21\21" \
+ "\377\23\23\23\377\24\24\24\377\26\26\26\377\30\30\30\377\31\31\31\377" \
+ "\32\32\32\377\34\34\34\377\35\35\35\377\37\37\37\377\40\40\40\377!!!" \
+ "\377\"\"\"\377\202###\377\1$$$\377\202%%%\377\245&&&\377\235%%%\377\270" \
+ "&&&\377\206'''\377\211(((\377\205'''\377\203&&&\377\227%%%\377\210&&" \
+ "&\377\215'''\377\205&&&\377\203%%%\377\226&&&\377\205'''\377\203(((\377" \
+ "\210'''\377\202&&&\377\202%%%\377\1$$$\377\202###\377\31\"\"\"\377!!" \
+ "!\377\40\40\40\377\37\37\37\377\35\35\35\377\34\34\34\377\32\32\32\377" \
+ "\31\31\31\377\30\30\30\377\26\26\26\377\24\24\24\377\23\23\23\377\21" \
+ "\21\21\377\20\20\20\377\16\16\16\377\15\15\15\377\13\13\13\377\11\11" \
+ "\11\377\10\10\10\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377" \
+ "\1\1\1\377\377\0\0\0\377\267\0\0\0\377\202\1\1\1\377\202\3\3\3\377\25" \
+ "\5\5\5\377\6\6\6\377\7\7\7\377\11\11\11\377\13\13\13\377\14\14\14\377" \
+ "\16\16\16\377\20\20\20\377\21\21\21\377\23\23\23\377\25\25\25\377\26" \
+ "\26\26\377\30\30\30\377\32\32\32\377\33\33\33\377\35\35\35\377\36\36" \
+ "\36\377\40\40\40\377!!!\377\"\"\"\377###\377\202%%%\377\2&&&\377'''\377" \
+ "\203(((\377\242)))\377\207(((\377\217'''\377\213(((\377\267)))\377\205" \
+ "***\377\210+++\377\206***\377\202)))\377\233(((\377\205)))\377\214**" \
+ "*\377\203)))\377\212(((\377\222)))\377\217***\377\202)))\377\203(((\377" \
+ "\2'''\377&&&\377\202%%%\377\27###\377\"\"\"\377!!!\377\40\40\40\377\36" \
+ "\36\36\377\35\35\35\377\33\33\33\377\32\32\32\377\30\30\30\377\26\26" \
+ "\26\377\25\25\25\377\23\23\23\377\21\21\21\377\20\20\20\377\16\16\16" \
+ "\377\14\14\14\377\13\13\13\377\11\11\11\377\7\7\7\377\6\6\6\377\5\5\5" \
+ "\377\3\3\3\377\2\2\2\377\202\1\1\1\377\377\0\0\0\377\266\0\0\0\377\34" \
+ "\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\10\10\10" \
+ "\377\12\12\12\377\14\14\14\377\15\15\15\377\20\20\20\377\21\21\21\377" \
+ "\23\23\23\377\24\24\24\377\26\26\26\377\30\30\30\377\32\32\32\377\33" \
+ "\33\33\377\35\35\35\377\37\37\37\377\40\40\40\377\"\"\"\377###\377%%" \
+ "%\377&&&\377'''\377(((\377)))\377\202***\377\207+++\377\211,,,\377\232" \
+ "+++\377\223***\377\213+++\377\235,,,\377\222+++\377\206,,,\377\220--" \
+ "-\377\203,,,\377\210+++\377\206***\377\220+++\377\207,,,\377\204---\377" \
+ "\206,,,\377\215+++\377\206,,,\377\210+++\377\203,,,\377\215---\377\203" \
+ ",,,\377\202+++\377\202***\377\34)))\377(((\377'''\377&&&\377%%%\377#" \
+ "##\377\"\"\"\377\40\40\40\377\37\37\37\377\35\35\35\377\33\33\33\377" \
+ "\32\32\32\377\30\30\30\377\26\26\26\377\24\24\24\377\23\23\23\377\21" \
+ "\21\21\377\20\20\20\377\15\15\15\377\14\14\14\377\12\12\12\377\10\10" \
+ "\10\377\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377" \
+ "\0\0\0\377\266\0\0\0\377\1\1\1\1\377\202\3\3\3\377\27\5\5\5\377\6\6\6" \
+ "\377\10\10\10\377\11\11\11\377\13\13\13\377\15\15\15\377\17\17\17\377" \
+ "\21\21\21\377\22\22\22\377\24\24\24\377\26\26\26\377\30\30\30\377\32" \
+ "\32\32\377\34\34\34\377\36\36\36\377\37\37\37\377!!!\377###\377$$$\377" \
+ "&&&\377'''\377(((\377***\377\202+++\377\2,,,\377---\377\247...\377\233" \
+ "---\377\231...\377\207///\377\230...\377\205///\377\214000\377\204//" \
+ "/\377\204...\377\224---\377\210...\377\217///\377\217...\377\203///\377" \
+ "\213...\377\205///\377\207000\377\205///\377\203...\377\2---\377,,,\377" \
+ "\202+++\377\27***\377(((\377'''\377&&&\377$$$\377###\377!!!\377\37\37" \
+ "\37\377\36\36\36\377\34\34\34\377\32\32\32\377\30\30\30\377\26\26\26" \
+ "\377\24\24\24\377\22\22\22\377\21\21\21\377\17\17\17\377\15\15\15\377" \
+ "\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\5\5\5\377\202\3\3\3" \
+ "\377\1\1\1\1\377\377\0\0\0\377\265\0\0\0\377\36\1\1\1\377\2\2\2\377\3" \
+ "\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\14\14" \
+ "\14\377\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377\26\26\26" \
+ "\377\30\30\30\377\32\32\32\377\33\33\33\377\36\36\36\377\37\37\37\377" \
+ "!!!\377###\377%%%\377&&&\377(((\377***\377+++\377,,,\377---\377...\377" \
+ "///\377\202000\377\244111\377\206000\377\220///\377\211000\377\27111" \
+ "1\377\221222\377\203111\377\210000\377\204///\377\217000\377\211111\377" \
+ "\203222\377\210111\377\212000\377\223111\377\215222\377\204111\377\202" \
+ "000\377\36///\377...\377---\377,,,\377+++\377***\377(((\377&&&\377%%" \
+ "%\377###\377!!!\377\37\37\37\377\36\36\36\377\33\33\33\377\32\32\32\377" \
+ "\30\30\30\377\26\26\26\377\24\24\24\377\22\22\22\377\20\20\20\377\16" \
+ "\16\16\377\14\14\14\377\12\12\12\377\11\11\11\377\7\7\7\377\5\5\5\377" \
+ "\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\264\0\0\0\377" \
+ "!\1\1\1\377\2\2\2\377\3\3\3\377\5\5\5\377\6\6\6\377\10\10\10\377\12\12" \
+ "\12\377\13\13\13\377\15\15\15\377\17\17\17\377\21\21\21\377\23\23\23" \
+ "\377\25\25\25\377\27\27\27\377\31\31\31\377\33\33\33\377\35\35\35\377" \
+ "\37\37\37\377!!!\377###\377%%%\377'''\377)))\377***\377,,,\377---\377" \
+ "///\377000\377LLL\377}}}\377\220\220\220\377\255\255\255\377\306\306" \
+ "\306\377\205\326\326\326\377\5\267\267\267\377\256\256\256\377\205\205" \
+ "\205\377ppp\377BBB\377\211444\377\203333\377\202444\377\1aaa\377\214" \
+ "\205\205\205\377\3\204\204\204\377xxx\377TTT\377\223222\377\4JJJ\377" \
+ "ggg\377\205\205\205\377\225\225\225\377\202\255\255\255\377\202\256\256" \
+ "\256\377\4\242\242\242\377\205\205\205\377|||\377XXX\377\215444\377\2" \
+ ";;;\377ttt\377\216\205\205\205\377\2rrr\377UUU\377\215444\377\2""999" \
+ "\377iii\377\206\205\205\205\377\221\206\206\206\377\205\205\205\205\377" \
+ "\3\204\204\204\377eee\377CCC\377\222222\377\5YYY\377\205\205\205\377" \
+ "\232\232\232\377\255\255\255\377\317\317\317\377\205\326\326\326\377" \
+ "\5\256\256\256\377\242\242\242\377\205\205\205\377fff\377666\377\211" \
+ "444\377\202333\377\1\200\200\200\377\205\205\205\205\377\2UUU\377333" \
+ "\377\212444\377\1EEE\377\207\205\205\205\377\1EEE\377\207555\377\5AA" \
+ "A\377ppp\377\206\206\206\377\256\256\256\377\270\270\270\377\205\326" \
+ "\326\326\377\40\305\305\305\377\255\255\255\377\220\220\220\377|||\377" \
+ "KKK\377///\377---\377,,,\377***\377)))\377'''\377%%%\377###\377!!!\377" \
+ "\37\37\37\377\35\35\35\377\33\33\33\377\31\31\31\377\27\27\27\377\25" \
+ "\25\25\377\23\23\23\377\21\21\21\377\17\17\17\377\15\15\15\377\13\13" \
+ "\13\377\12\12\12\377\10\10\10\377\6\6\6\377\5\5\5\377\3\3\3\377\2\2\2" \
+ "\377\1\1\1\377\377\0\0\0\377\263\0\0\0\377\202\1\1\1\377\33\3\3\3\377" \
+ "\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\14\14\14\377" \
+ "\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377\27\27\27\377\31" \
+ "\31\31\377\33\33\33\377\35\35\35\377\37\37\37\377!!!\377###\377%%%\377" \
+ "'''\377)))\377+++\377---\377...\377<<<\377\222\222\222\377\342\342\342" \
+ "\377\217\377\377\377\377\2\311\311\311\377{{{\377\212666\377\2^^^\377" \
+ "\336\336\336\377\220\377\377\377\377\4\361\361\361\377\256\256\256\377" \
+ "TTT\377555\377\211444\377\203555\377\3YYY\377\247\247\247\377\354\354" \
+ "\354\377\214\377\377\377\377\3\363\363\363\377\304\304\304\377sss\377" \
+ "\211666\377\2}}}\377\366\366\366\377\221\377\377\377\377\3\356\356\356" \
+ "\377\245\245\245\377RRR\377\211666\377\2xxx\377\354\354\354\377\240\377" \
+ "\377\377\377\3\327\327\327\377\217\217\217\377\77\77\77\377\214555\377" \
+ "\3RRR\377\251\251\251\377\356\356\356\377\216\377\377\377\377\3\370\370" \
+ "\370\377\270\270\270\377aaa\377\203777\377\206666\377\1\363\363\363\377" \
+ "\205\377\377\377\377\1\211\211\211\377\212666\377\2===\377\324\324\324" \
+ "\377\206\377\377\377\377\1\240\240\240\377\206777\377\2~~~\377\311\311" \
+ "\311\377\217\377\377\377\377\32\342\342\342\377\221\221\221\377:::\377" \
+ "---\377+++\377)))\377'''\377%%%\377###\377!!!\377\37\37\37\377\35\35" \
+ "\35\377\33\33\33\377\31\31\31\377\27\27\27\377\24\24\24\377\22\22\22" \
+ "\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377\11\11\11\377" \
+ "\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\202\1\1\1\377\377\0\0\0\377" \
+ "\262\0\0\0\377\33\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10" \
+ "\10\10\377\11\11\11\377\13\13\13\377\15\15\15\377\20\20\20\377\21\21" \
+ "\21\377\24\24\24\377\25\25\25\377\30\30\30\377\32\32\32\377\34\34\34" \
+ "\377\36\36\36\377\40\40\40\377###\377%%%\377'''\377)))\377+++\377---" \
+ "\377///\377www\377\361\361\361\377\223\377\377\377\377\2\332\332\332" \
+ "\377VVV\377\207888\377\2FFF\377\357\357\357\377\224\377\377\377\377\2" \
+ "\246\246\246\377>>>\377\211777\377\2CCC\377\266\266\266\377\222\377\377" \
+ "\377\377\2\323\323\323\377RRR\377\206888\377\2[[[\377\372\372\372\377" \
+ "\224\377\377\377\377\2\370\370\370\377\212\212\212\377\207888\377\2b" \
+ "bb\377\375\375\375\377\243\377\377\377\377\2\352\352\352\377aaa\377\211" \
+ "777\377\3""999\377\241\241\241\377\372\372\372\377\223\377\377\377\377" \
+ "\2\276\276\276\377BBB\377\203999\377\204888\377\1\363\363\363\377\205" \
+ "\377\377\377\377\1\212\212\212\377\211888\377\2===\377\313\313\313\377" \
+ "\206\377\377\377\377\1\262\262\262\377\205999\377\2WWW\377\332\332\332" \
+ "\377\223\377\377\377\377\32\360\360\360\377vvv\377---\377+++\377)))\377" \
+ "'''\377%%%\377###\377\40\40\40\377\36\36\36\377\34\34\34\377\32\32\32" \
+ "\377\30\30\30\377\25\25\25\377\24\24\24\377\21\21\21\377\20\20\20\377" \
+ "\15\15\15\377\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\4\4\4" \
+ "\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\262\0\0\0\377\31\1\1" \
+ "\1\377\2\2\2\377\3\3\3\377\5\5\5\377\6\6\6\377\10\10\10\377\12\12\12" \
+ "\377\14\14\14\377\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377" \
+ "\27\27\27\377\31\31\31\377\33\33\33\377\36\36\36\377\40\40\40\377\"\"" \
+ "\"\377$$$\377'''\377)))\377+++\377---\377///\377\231\231\231\377\226" \
+ "\377\377\377\377\2\366\366\366\377ddd\377\206:::\377\1\224\224\224\377" \
+ "\226\377\377\377\377\2\316\316\316\377EEE\377\207999\377\2NNN\377\341" \
+ "\341\341\377\224\377\377\377\377\2\361\361\361\377]]]\377\205:::\377" \
+ "\1\240\240\240\377\227\377\377\377\377\1\224\224\224\377\206:::\377\1" \
+ "\271\271\271\377\245\377\377\377\377\2\363\363\363\377UUU\377\207999" \
+ "\377\2>>>\377\311\311\311\377\226\377\377\377\377\2\341\341\341\377J" \
+ "JJ\377\206:::\377\1\363\363\363\377\205\377\377\377\377\1\213\213\213" \
+ "\377\211:::\377\1\271\271\271\377\206\377\377\377\377\2\276\276\276\377" \
+ "<<<\377\204;;;\377\2eee\377\366\366\366\377\226\377\377\377\377\30\226" \
+ "\226\226\377---\377+++\377)))\377'''\377$$$\377\"\"\"\377\40\40\40\377" \
+ "\36\36\36\377\33\33\33\377\31\31\31\377\27\27\27\377\24\24\24\377\22" \
+ "\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377\10\10" \
+ "\10\377\6\6\6\377\5\5\5\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377" \
+ "\262\0\0\0\377\30\1\1\1\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11" \
+ "\11\11\377\13\13\13\377\15\15\15\377\17\17\17\377\21\21\21\377\23\23" \
+ "\23\377\25\25\25\377\30\30\30\377\32\32\32\377\34\34\34\377\37\37\37" \
+ "\377!!!\377###\377&&&\377(((\377+++\377---\377///\377zzz\377\230\377" \
+ "\377\377\377\2\357\357\357\377QQQ\377\205<<<\377\1\274\274\274\377\227" \
+ "\377\377\377\377\1\303\303\303\377\206:::\377\2\77\77\77\377\334\334" \
+ "\334\377\226\377\377\377\377\2\352\352\352\377JJJ\377\204<<<\377\1\272" \
+ "\272\272\377\230\377\377\377\377\1jjj\377\205<<<\377\1\341\341\341\377" \
+ "\246\377\377\377\377\1\325\325\325\377\207;;;\377\1\263\263\263\377\230" \
+ "\377\377\377\377\2\324\324\324\377\77\77\77\377\202===\377\203<<<\377" \
+ "\1\364\364\364\377\205\377\377\377\377\1\214\214\214\377\210<<<\377\1" \
+ "\254\254\254\377\206\377\377\377\377\2\312\312\312\377BBB\377\204===" \
+ "\377\2TTT\377\357\357\357\377\230\377\377\377\377\27vvv\377---\377++" \
+ "+\377(((\377&&&\377###\377!!!\377\37\37\37\377\34\34\34\377\32\32\32" \
+ "\377\30\30\30\377\25\25\25\377\23\23\23\377\21\21\21\377\17\17\17\377" \
+ "\15\15\15\377\13\13\13\377\11\11\11\377\7\7\7\377\5\5\5\377\4\4\4\377" \
+ "\3\3\3\377\1\1\1\377\377\0\0\0\377\261\0\0\0\377\31\1\1\1\377\2\2\2\377" \
+ "\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\11\11\11\377\13\13\13\377" \
+ "\15\15\15\377\20\20\20\377\22\22\22\377\24\24\24\377\26\26\26\377\31" \
+ "\31\31\377\33\33\33\377\36\36\36\377\40\40\40\377###\377%%%\377'''\377" \
+ "***\377,,,\377...\377\77\77\77\377\361\361\361\377\207\377\377\377\377" \
+ "\3\355\355\355\377\251\251\251\377\212\212\212\377\204eee\377\4lll\377" \
+ "\214\214\214\377\277\277\277\377\372\372\372\377\207\377\377\377\377" \
+ "\2\306\306\306\377===\377\204>>>\377\1\306\306\306\377\206\377\377\377" \
+ "\377\1\267\267\267\377\206\214\214\214\377\3\216\216\216\377\262\262" \
+ "\262\377\341\341\341\377\210\377\377\377\377\1\201\201\201\377\205<<" \
+ "<\377\1\241\241\241\377\207\377\377\377\377\3\366\366\366\377\300\300" \
+ "\300\377\231\231\231\377\204\214\214\214\377\2\247\247\247\377\324\324" \
+ "\324\377\210\377\377\377\377\1\251\251\251\377\204>>>\377\1\273\273\273" \
+ "\377\205\377\377\377\377\2\375\375\375\377\247\247\247\377\207\214\214" \
+ "\214\377\3\245\245\245\377\275\275\275\377\355\355\355\377\207\377\377" \
+ "\377\377\1\326\326\326\377\205>>>\377\1\361\361\361\377\205\377\377\377" \
+ "\377\2\364\364\364\377\240\240\240\377\211\214\214\214\377\1\320\320" \
+ "\320\377\205\377\377\377\377\1\353\353\353\377\206\214\214\214\377\3" \
+ "\227\227\227\377\273\273\273\377\364\364\364\377\207\377\377\377\377" \
+ "\2qqq\377===\377\202<<<\377\202===\377\1kkk\377\210\377\377\377\377\3" \
+ "\335\335\335\377\236\236\236\377\201\201\201\377\204eee\377\3www\377" \
+ "\225\225\225\377\317\317\317\377\210\377\377\377\377\1\220\220\220\377" \
+ "\205>>>\377\1\364\364\364\377\205\377\377\377\377\1\215\215\215\377\207" \
+ ">>>\377\1\231\231\231\377\206\377\377\377\377\2\326\326\326\377FFF\377" \
+ "\205\77\77\77\377\1\307\307\307\377\207\377\377\377\377\4\372\372\372" \
+ "\377\302\302\302\377\216\216\216\377nnn\377\204eee\377\3\207\207\207" \
+ "\377\251\251\251\377\357\357\357\377\207\377\377\377\377\30\360\360\360" \
+ "\377===\377,,,\377***\377'''\377%%%\377###\377\40\40\40\377\36\36\36" \
+ "\377\33\33\33\377\31\31\31\377\26\26\26\377\24\24\24\377\22\22\22\377" \
+ "\20\20\20\377\15\15\15\377\13\13\13\377\11\11\11\377\10\10\10\377\6\6" \
+ "\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\260\0\0" \
+ "\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377\5\5\5\377\6\6\6\377\10\10\10" \
+ "\377\12\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377\22\22\22\377" \
+ "\25\25\25\377\27\27\27\377\32\32\32\377\34\34\34\377\37\37\37\377!!!" \
+ "\377###\377&&&\377(((\377+++\377---\377000\377\232\232\232\377\206\377" \
+ "\377\377\377\3\375\375\375\377\231\231\231\377DDD\377\211@@@\377\2VV" \
+ "V\377\313\313\313\377\207\377\377\377\377\1ccc\377\204\77\77\77\377\1" \
+ "\307\307\307\377\205\377\377\377\377\2\313\313\313\377@@@\377\205AAA" \
+ "\377\204@@@\377\2zzz\377\355\355\355\377\206\377\377\377\377\2\346\346" \
+ "\346\377@@@\377\203>>>\377\2GGG\377\364\364\364\377\206\377\377\377\377" \
+ "\2\273\273\273\377KKK\377\202@@@\377\203AAA\377\203@@@\377\2ddd\377\331" \
+ "\331\331\377\206\377\377\377\377\2\366\366\366\377FFF\377\203\77\77\77" \
+ "\377\1\273\273\273\377\205\377\377\377\377\2\320\320\320\377@@@\377\206" \
+ "AAA\377\203@@@\377\2GGG\377\254\254\254\377\207\377\377\377\377\1aaa" \
+ "\377\204\77\77\77\377\1\364\364\364\377\205\377\377\377\377\2\243\243" \
+ "\243\377@@@\377\211AAA\377\1\261\261\261\377\205\377\377\377\377\1\335" \
+ "\335\335\377\204AAA\377\204@@@\377\2KKK\377\313\313\313\377\206\377\377" \
+ "\377\377\1\271\271\271\377\205>>>\377\1\317\317\317\377\206\377\377\377" \
+ "\377\2\355\355\355\377zzz\377\212@@@\377\2kkk\377\344\344\344\377\206" \
+ "\377\377\377\377\2\357\357\357\377DDD\377\204@@@\377\1\364\364\364\377" \
+ "\205\377\377\377\377\1\217\217\217\377\206\77\77\77\377\1\212\212\212" \
+ "\377\206\377\377\377\377\2\335\335\335\377KKK\377\205@@@\377\1ddd\377" \
+ "\207\377\377\377\377\2\305\305\305\377RRR\377\211@@@\377\2DDD\377\234" \
+ "\234\234\377\207\377\377\377\377\27\231\231\231\377---\377+++\377(((" \
+ "\377&&&\377###\377!!!\377\37\37\37\377\34\34\34\377\32\32\32\377\27\27" \
+ "\27\377\25\25\25\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14" \
+ "\377\12\12\12\377\10\10\10\377\6\6\6\377\5\5\5\377\3\3\3\377\2\2\2\377" \
+ "\1\1\1\377\377\0\0\0\377\260\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377" \
+ "\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\15\15\15\377\17\17\17" \
+ "\377\21\21\21\377\23\23\23\377\25\25\25\377\30\30\30\377\32\32\32\377" \
+ "\35\35\35\377\40\40\40\377\"\"\"\377%%%\377'''\377***\377,,,\377///\377" \
+ "333\377\354\354\354\377\206\377\377\377\377\1\201\201\201\377\214AAA" \
+ "\377\2BBB\377\302\302\302\377\206\377\377\377\377\1\267\267\267\377\204" \
+ "@@@\377\1\307\307\307\377\205\377\377\377\377\1\274\274\274\377\210B" \
+ "BB\377\203AAA\377\2WWW\377\362\362\362\377\206\377\377\377\377\1sss\377" \
+ "\203\77\77\77\377\1\203\203\203\377\206\377\377\377\377\1\300\300\300" \
+ "\377\202AAA\377\207BBB\377\202AAA\377\2JJJ\377\342\342\342\377\206\377" \
+ "\377\377\377\1xxx\377\203@@@\377\1\274\274\274\377\205\377\377\377\377" \
+ "\1\307\307\307\377\211BBB\377\203AAA\377\1\276\276\276\377\206\377\377" \
+ "\377\377\1\223\223\223\377\204@@@\377\1\364\364\364\377\205\377\377\377" \
+ "\377\1\233\233\233\377\212BBB\377\1\261\261\261\377\205\377\377\377\377" \
+ "\1\336\336\336\377\207BBB\377\202AAA\377\2LLL\377\353\353\353\377\205" \
+ "\377\377\377\377\1\350\350\350\377\204\77\77\77\377\1___\377\206\377" \
+ "\377\377\377\2\364\364\364\377]]]\377\214AAA\377\2QQQ\377\346\346\346" \
+ "\377\206\377\377\377\377\1\202\202\202\377\204AAA\377\1\364\364\364\377" \
+ "\205\377\377\377\377\1\217\217\217\377\203AAA\377\202@@@\377\2zzz\377" \
+ "\375\375\375\377\205\377\377\377\377\4\344\344\344\377SSS\377AAA\377" \
+ "BBB\377\204AAA\377\1\261\261\261\377\206\377\377\377\377\1\276\276\276" \
+ "\377\214AAA\377\2@@@\377\212\212\212\377\206\377\377\377\377\27\354\354" \
+ "\354\377111\377,,,\377***\377'''\377%%%\377\"\"\"\377\40\40\40\377\35" \
+ "\35\35\377\32\32\32\377\30\30\30\377\25\25\25\377\23\23\23\377\21\21" \
+ "\21\377\17\17\17\377\15\15\15\377\12\12\12\377\11\11\11\377\7\7\7\377" \
+ "\5\5\5\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\260\0\0\0\377" \
+ "\27\1\1\1\377\2\2\2\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\13" \
+ "\13\13\377\15\15\15\377\20\20\20\377\21\21\21\377\24\24\24\377\26\26" \
+ "\26\377\31\31\31\377\33\33\33\377\36\36\36\377\40\40\40\377###\377&&" \
+ "&\377(((\377+++\377---\377000\377bbb\377\206\377\377\377\377\2\300\300" \
+ "\300\377AAA\377\213BBB\377\202AAA\377\2LLL\377\362\362\362\377\205\377" \
+ "\377\377\377\2\362\362\362\377CCC\377\203AAA\377\1\307\307\307\377\205" \
+ "\377\377\377\377\1\274\274\274\377\214BBB\377\1\211\211\211\377\206\377" \
+ "\377\377\377\1\252\252\252\377\203@@@\377\1\260\260\260\377\205\377\377" \
+ "\377\377\2\373\373\373\377RRR\377\214BBB\377\1zzz\377\206\377\377\377" \
+ "\377\1\237\237\237\377\203AAA\377\1\274\274\274\377\205\377\377\377\377" \
+ "\1\307\307\307\377\214BBB\377\1fff\377\206\377\377\377\377\1\263\263" \
+ "\263\377\204AAA\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233" \
+ "\377\212BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377" \
+ "\212BBB\377\1\246\246\246\377\206\377\377\377\377\1GGG\377\203@@@\377" \
+ "\1\232\232\232\377\206\377\377\377\377\2\224\224\224\377AAA\377\213B" \
+ "BB\377\202AAA\377\1ppp\377\206\377\377\377\377\1\274\274\274\377\204" \
+ "BBB\377\1\364\364\364\377\205\377\377\377\377\2\220\220\220\377BBB\377" \
+ "\203AAA\377\2nnn\377\370\370\370\377\205\377\377\377\377\2\353\353\353" \
+ "\377]]]\377\207BBB\377\1\351\351\351\377\205\377\377\377\377\2\362\362" \
+ "\362\377JJJ\377\214BBB\377\3AAA\377@@@\377\302\302\302\377\206\377\377" \
+ "\377\377\26aaa\377---\377+++\377(((\377&&&\377###\377\40\40\40\377\36" \
+ "\36\36\377\33\33\33\377\31\31\31\377\26\26\26\377\24\24\24\377\21\21" \
+ "\21\377\17\17\17\377\15\15\15\377\13\13\13\377\11\11\11\377\7\7\7\377" \
+ "\5\5\5\377\4\4\4\377\2\2\2\377\1\1\1\377\377\0\0\0\377\260\0\0\0\377" \
+ "\27\1\1\1\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\13" \
+ "\13\13\377\15\15\15\377\20\20\20\377\22\22\22\377\24\24\24\377\27\27" \
+ "\27\377\31\31\31\377\34\34\34\377\37\37\37\377!!!\377$$$\377'''\377)" \
+ "))\377,,,\377...\377111\377\224\224\224\377\206\377\377\377\377\1www" \
+ "\377\217BBB\377\1\250\250\250\377\206\377\377\377\377\1___\377\203BB" \
+ "B\377\1\307\307\307\377\205\377\377\377\377\1\274\274\274\377\214BBB" \
+ "\377\2III\377\366\366\366\377\205\377\377\377\377\1\320\320\320\377\203" \
+ "AAA\377\1\322\322\322\377\205\377\377\377\377\1\314\314\314\377\215B" \
+ "BB\377\2DDD\377\370\370\370\377\205\377\377\377\377\1\266\266\266\377" \
+ "\203BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\215" \
+ "BBB\377\1\353\353\353\377\205\377\377\377\377\1\305\305\305\377\204B" \
+ "BB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212BB" \
+ "B\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212BBB" \
+ "\377\1|||\377\206\377\377\377\377\1ZZZ\377\203AAA\377\1\314\314\314\377" \
+ "\205\377\377\377\377\2\373\373\373\377III\377\217BBB\377\1\325\325\325" \
+ "\377\205\377\377\377\377\1\355\355\355\377\204BBB\377\1\364\364\364\377" \
+ "\205\377\377\377\377\1\220\220\220\377\203BBB\377\2ccc\377\364\364\364" \
+ "\377\205\377\377\377\377\2\362\362\362\377ccc\377\207BBB\377\1___\377" \
+ "\206\377\377\377\377\1\261\261\261\377\216BBB\377\2AAA\377hhh\377\206" \
+ "\377\377\377\377\26\222\222\222\377...\377,,,\377)))\377&&&\377$$$\377" \
+ "!!!\377\37\37\37\377\34\34\34\377\31\31\31\377\27\27\27\377\24\24\24" \
+ "\377\22\22\22\377\20\20\20\377\15\15\15\377\13\13\13\377\11\11\11\377" \
+ "\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\1\1\1\377\377\0\0\0\377\260" \
+ "\0\0\0\377\27\1\1\1\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\12" \
+ "\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377\22\22\22\377\25\25" \
+ "\25\377\27\27\27\377\32\32\32\377\34\34\34\377\37\37\37\377\"\"\"\377" \
+ "%%%\377'''\377***\377---\377///\377222\377\272\272\272\377\205\377\377" \
+ "\377\377\2\370\370\370\377III\377\217BBB\377\1jjj\377\206\377\377\377" \
+ "\377\1\205\205\205\377\203BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\215BBB\377\1\323\323\323\377\205\377\377\377\377\1" \
+ "\347\347\347\377\203BBB\377\1\351\351\351\377\205\377\377\377\377\1\266" \
+ "\266\266\377\216BBB\377\1\347\347\347\377\205\377\377\377\377\1\301\301" \
+ "\301\377\203BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307" \
+ "\377\215BBB\377\1\314\314\314\377\205\377\377\377\377\1\307\307\307\377" \
+ "\204BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212" \
+ "BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212B" \
+ "BB\377\1nnn\377\206\377\377\377\377\1ccc\377\203BBB\377\1\357\357\357" \
+ "\377\205\377\377\377\377\1\323\323\323\377\220BBB\377\1\235\235\235\377" \
+ "\206\377\377\377\377\1TTT\377\203BBB\377\1\364\364\364\377\205\377\377" \
+ "\377\377\1\220\220\220\377\202BBB\377\2VVV\377\353\353\353\377\205\377" \
+ "\377\377\377\2\370\370\370\377jjj\377\210BBB\377\1\205\205\205\377\206" \
+ "\377\377\377\377\1~~~\377\217BBB\377\2AAA\377\357\357\357\377\205\377" \
+ "\377\377\377\26\271\271\271\377///\377---\377***\377'''\377%%%\377\"" \
+ "\"\"\377\37\37\37\377\34\34\34\377\32\32\32\377\27\27\27\377\25\25\25" \
+ "\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377" \
+ "\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\1\1\1\377\377\0\0\0\377\257" \
+ "\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10" \
+ "\10\377\12\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377\23\23\23" \
+ "\377\25\25\25\377\30\30\30\377\32\32\32\377\35\35\35\377\40\40\40\377" \
+ "###\377%%%\377(((\377+++\377---\377000\377222\377\327\327\327\377\205" \
+ "\377\377\377\377\1\331\331\331\377\220BBB\377\1KKK\377\206\377\377\377" \
+ "\377\1\237\237\237\377\203BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\215BBB\377\1\270\270\270\377\205\377\377\377\377\2" \
+ "\375\375\375\377FFF\377\202BBB\377\1\373\373\373\377\205\377\377\377" \
+ "\377\1\246\246\246\377\215BBB\377\2VVV\377\370\370\370\377\205\377\377" \
+ "\377\377\1\312\312\312\377\203BBB\377\1\274\274\274\377\205\377\377\377" \
+ "\377\1\307\307\307\377\215BBB\377\1\277\277\277\377\205\377\377\377\377" \
+ "\1\307\307\307\377\204BBB\377\1\364\364\364\377\205\377\377\377\377\1" \
+ "\233\233\233\377\212BBB\377\1\261\261\261\377\205\377\377\377\377\1\336" \
+ "\336\336\377\212BBB\377\1nnn\377\206\377\377\377\377\1ccc\377\202BBB" \
+ "\377\1KKK\377\206\377\377\377\377\1\250\250\250\377\220BBB\377\1zzz\377" \
+ "\206\377\377\377\377\1nnn\377\203BBB\377\1\364\364\364\377\205\377\377" \
+ "\377\377\1\220\220\220\377\202BBB\377\1\320\320\320\377\205\377\377\377" \
+ "\377\2\373\373\373\377sss\377\211BBB\377\1\235\235\235\377\206\377\377" \
+ "\377\377\1VVV\377\217BBB\377\2AAA\377\313\313\313\377\205\377\377\377" \
+ "\377\27\326\326\326\377000\377---\377+++\377(((\377%%%\377\"\"\"\377" \
+ "\40\40\40\377\35\35\35\377\32\32\32\377\30\30\30\377\25\25\25\377\23" \
+ "\23\23\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377\10\10" \
+ "\10\377\6\6\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377" \
+ "\256\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10" \
+ "\10\10\377\12\12\12\377\14\14\14\377\16\16\16\377\21\21\21\377\23\23" \
+ "\23\377\25\25\25\377\30\30\30\377\33\33\33\377\35\35\35\377\40\40\40" \
+ "\377###\377&&&\377(((\377+++\377...\377000\377333\377\354\354\354\377" \
+ "\205\377\377\377\377\1\303\303\303\377\221BBB\377\1\370\370\370\377\205" \
+ "\377\377\377\377\1\263\263\263\377\203BBB\377\1\307\307\307\377\205\377" \
+ "\377\377\377\1\274\274\274\377\215BBB\377\1\250\250\250\377\206\377\377" \
+ "\377\377\3MMM\377BBB\377DDD\377\206\377\377\377\377\1\355\355\355\377" \
+ "\215\331\331\331\377\1\370\370\370\377\206\377\377\377\377\1\307\307" \
+ "\307\377\203BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307" \
+ "\377\215BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377" \
+ "\204BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212" \
+ "BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212B" \
+ "BB\377\1nnn\377\206\377\377\377\377\1ccc\377\202BBB\377\1___\377\206" \
+ "\377\377\377\377\1\226\226\226\377\220BBB\377\1jjj\377\206\377\377\377" \
+ "\377\1\202\202\202\377\203BBB\377\1\364\364\364\377\205\377\377\377\377" \
+ "\3\220\220\220\377BBB\377www\377\206\377\377\377\377\1\211\211\211\377" \
+ "\212BBB\377\1\257\257\257\377\205\377\377\377\377\2\375\375\375\377D" \
+ "DD\377\217BBB\377\2AAA\377\276\276\276\377\205\377\377\377\377\27\354" \
+ "\354\354\377000\377...\377+++\377(((\377&&&\377###\377\40\40\40\377\35" \
+ "\35\35\377\33\33\33\377\30\30\30\377\25\25\25\377\23\23\23\377\21\21" \
+ "\21\377\16\16\16\377\14\14\14\377\12\12\12\377\10\10\10\377\6\6\6\377" \
+ "\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\256\0\0\0\377" \
+ "\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\12" \
+ "\12\12\377\14\14\14\377\17\17\17\377\21\21\21\377\23\23\23\377\26\26" \
+ "\26\377\31\31\31\377\33\33\33\377\36\36\36\377\40\40\40\377###\377&&" \
+ "&\377)))\377+++\377...\377111\377444\377\370\370\370\377\205\377\377" \
+ "\377\377\1\263\263\263\377\221BBB\377\1\353\353\353\377\205\377\377\377" \
+ "\377\1\274\274\274\377\203BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\215BBB\377\1\237\237\237\377\206\377\377\377\377\3" \
+ "RRR\377BBB\377MMM\377\233\377\377\377\377\1\257\257\257\377\203BBB\377" \
+ "\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\215BBB\377\1" \
+ "\274\274\274\377\205\377\377\377\377\1\307\307\307\377\204BBB\377\1\364" \
+ "\364\364\377\205\377\377\377\377\1\233\233\233\377\212BBB\377\1\261\261" \
+ "\261\377\205\377\377\377\377\1\336\336\336\377\212BBB\377\1nnn\377\206" \
+ "\377\377\377\377\1ccc\377\202BBB\377\1jjj\377\206\377\377\377\377\1\207" \
+ "\207\207\377\220BBB\377\1aaa\377\206\377\377\377\377\1\216\216\216\377" \
+ "\203BBB\377\1\364\364\364\377\205\377\377\377\377\3\220\220\220\377B" \
+ "BB\377\257\257\257\377\205\377\377\377\377\1\331\331\331\377\213BBB\377" \
+ "\1\274\274\274\377\205\377\377\377\377\1\357\357\357\377\220BBB\377\2" \
+ "AAA\377\260\260\260\377\205\377\377\377\377\27\370\370\370\377111\377" \
+ "...\377+++\377)))\377&&&\377###\377\40\40\40\377\36\36\36\377\33\33\33" \
+ "\377\31\31\31\377\26\26\26\377\23\23\23\377\21\21\21\377\17\17\17\377" \
+ "\14\14\14\377\12\12\12\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377" \
+ "\2\2\2\377\1\1\1\377\377\0\0\0\377\256\0\0\0\377\27\1\1\1\377\2\2\2\377" \
+ "\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\12\12\12\377\15\15\15\377" \
+ "\17\17\17\377\21\21\21\377\24\24\24\377\26\26\26\377\31\31\31\377\33" \
+ "\33\33\377\36\36\36\377\40\40\40\377###\377&&&\377)))\377+++\377...\377" \
+ "111\377444\377\206\377\377\377\377\1\261\261\261\377\221BBB\377\1\351" \
+ "\351\351\377\205\377\377\377\377\1\307\307\307\377\203BBB\377\1\307\307" \
+ "\307\377\205\377\377\377\377\1\274\274\274\377\215BBB\377\1\233\233\233" \
+ "\377\206\377\377\377\377\3XXX\377BBB\377MMM\377\233\377\377\377\377\1" \
+ "zzz\377\203BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307" \
+ "\377\215BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377" \
+ "\204BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212" \
+ "BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212B" \
+ "BB\377\1nnn\377\206\377\377\377\377\1ccc\377\202BBB\377\1nnn\377\206" \
+ "\377\377\377\377\1\205\205\205\377\220BBB\377\1XXX\377\206\377\377\377" \
+ "\377\1\220\220\220\377\203BBB\377\1\364\364\364\377\205\377\377\377\377" \
+ "\3\220\220\220\377BBB\377\277\277\277\377\205\377\377\377\377\1\312\312" \
+ "\312\377\213BBB\377\1\305\305\305\377\205\377\377\377\377\1\351\351\351" \
+ "\377\220BBB\377\2AAA\377\261\261\261\377\206\377\377\377\377\26""111" \
+ "\377...\377+++\377)))\377&&&\377###\377\40\40\40\377\36\36\36\377\33" \
+ "\33\33\377\31\31\31\377\26\26\26\377\23\23\23\377\21\21\21\377\17\17" \
+ "\17\377\15\15\15\377\12\12\12\377\10\10\10\377\6\6\6\377\4\4\4\377\3" \
+ "\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\256\0\0\0\377\27\1\1\1\377" \
+ "\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\12\12\12\377\15" \
+ "\15\15\377\17\17\17\377\21\21\21\377\24\24\24\377\26\26\26\377\31\31" \
+ "\31\377\33\33\33\377\36\36\36\377!!!\377###\377&&&\377)))\377,,,\377" \
+ "...\377111\377444\377\206\377\377\377\377\1\261\261\261\377\221BBB\377" \
+ "\1\351\351\351\377\205\377\377\377\377\1\301\301\301\377\203BBB\377\1" \
+ "\307\307\307\377\205\377\377\377\377\1\274\274\274\377\215BBB\377\1\233" \
+ "\233\233\377\206\377\377\377\377\3OOO\377BBB\377MMM\377\232\377\377\377" \
+ "\377\2\316\316\316\377DDD\377\203BBB\377\1\274\274\274\377\205\377\377" \
+ "\377\377\1\307\307\307\377\215BBB\377\1\274\274\274\377\205\377\377\377" \
+ "\377\1\307\307\307\377\204BBB\377\1\364\364\364\377\205\377\377\377\377" \
+ "\1\233\233\233\377\212BBB\377\1\261\261\261\377\205\377\377\377\377\1" \
+ "\336\336\336\377\212BBB\377\1nnn\377\206\377\377\377\377\1ccc\377\202" \
+ "BBB\377\1nnn\377\206\377\377\377\377\1\205\205\205\377\220BBB\377\1_" \
+ "__\377\206\377\377\377\377\1\220\220\220\377\203BBB\377\1\364\364\364" \
+ "\377\205\377\377\377\377\3\220\220\220\377BBB\377\255\255\255\377\205" \
+ "\377\377\377\377\2\366\366\366\377OOO\377\212BBB\377\1\307\307\307\377" \
+ "\205\377\377\377\377\1\351\351\351\377\220BBB\377\2AAA\377\261\261\261" \
+ "\377\205\377\377\377\377\27\375\375\375\377111\377...\377+++\377)))\377" \
+ "&&&\377###\377\40\40\40\377\36\36\36\377\33\33\33\377\31\31\31\377\26" \
+ "\26\26\377\24\24\24\377\21\21\21\377\17\17\17\377\15\15\15\377\12\12" \
+ "\12\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377" \
+ "\377\0\0\0\377\256\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377" \
+ "\6\6\6\377\10\10\10\377\12\12\12\377\15\15\15\377\17\17\17\377\21\21" \
+ "\21\377\24\24\24\377\26\26\26\377\31\31\31\377\33\33\33\377\36\36\36" \
+ "\377\40\40\40\377###\377&&&\377)))\377+++\377...\377111\377444\377\370" \
+ "\370\370\377\205\377\377\377\377\1\263\263\263\377\221BBB\377\1\362\362" \
+ "\362\377\205\377\377\377\377\1\274\274\274\377\203BBB\377\1\307\307\307" \
+ "\377\205\377\377\377\377\1\274\274\274\377\215BBB\377\1\244\244\244\377" \
+ "\206\377\377\377\377\3MMM\377BBB\377MMM\377\230\377\377\377\377\3\370" \
+ "\370\370\377\270\270\270\377KKK\377\204BBB\377\1\274\274\274\377\205" \
+ "\377\377\377\377\1\307\307\307\377\215BBB\377\1\274\274\274\377\205\377" \
+ "\377\377\377\1\307\307\307\377\204BBB\377\1\364\364\364\377\205\377\377" \
+ "\377\377\1\233\233\233\377\212BBB\377\1\261\261\261\377\205\377\377\377" \
+ "\377\1\336\336\336\377\212BBB\377\1nnn\377\206\377\377\377\377\1ccc\377" \
+ "\202BBB\377\1lll\377\206\377\377\377\377\1\205\205\205\377\220BBB\377" \
+ "\1ccc\377\206\377\377\377\377\1\213\213\213\377\203BBB\377\1\364\364" \
+ "\364\377\205\377\377\377\377\3\220\220\220\377BBB\377sss\377\206\377" \
+ "\377\377\377\1\307\307\307\377\212BBB\377\1\274\274\274\377\205\377\377" \
+ "\377\377\1\364\364\364\377\220BBB\377\2AAA\377\260\260\260\377\205\377" \
+ "\377\377\377\27\363\363\363\377111\377...\377+++\377)))\377&&&\377##" \
+ "#\377\40\40\40\377\36\36\36\377\33\33\33\377\31\31\31\377\26\26\26\377" \
+ "\23\23\23\377\21\21\21\377\17\17\17\377\15\15\15\377\12\12\12\377\10" \
+ "\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0" \
+ "\0\377\256\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6" \
+ "\377\10\10\10\377\12\12\12\377\14\14\14\377\17\17\17\377\21\21\21\377" \
+ "\23\23\23\377\26\26\26\377\31\31\31\377\33\33\33\377\36\36\36\377\40" \
+ "\40\40\377###\377&&&\377)))\377+++\377...\377111\377444\377\356\356\356" \
+ "\377\205\377\377\377\377\1\303\303\303\377\221BBB\377\1\373\373\373\377" \
+ "\205\377\377\377\377\1\255\255\255\377\203BBB\377\1\307\307\307\377\205" \
+ "\377\377\377\377\1\274\274\274\377\215BBB\377\1\255\255\255\377\206\377" \
+ "\377\377\377\1FFF\377\202BBB\377\206\377\377\377\377\1\246\246\246\377" \
+ "\230BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\215" \
+ "BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\204B" \
+ "BB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212BB" \
+ "B\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212BBB" \
+ "\377\1nnn\377\206\377\377\377\377\1ccc\377\202BBB\377\1aaa\377\206\377" \
+ "\377\377\377\1\224\224\224\377\220BBB\377\1nnn\377\206\377\377\377\377" \
+ "\1~~~\377\203BBB\377\1\364\364\364\377\205\377\377\377\377\1\220\220" \
+ "\220\377\202BBB\377\1\323\323\323\377\206\377\377\377\377\1\255\255\255" \
+ "\377\211BBB\377\1\263\263\263\377\205\377\377\377\377\2\375\375\375\377" \
+ "DDD\377\217BBB\377\2AAA\377\300\300\300\377\205\377\377\377\377\27\347" \
+ "\347\347\377111\377...\377+++\377(((\377&&&\377###\377\40\40\40\377\36" \
+ "\36\36\377\33\33\33\377\31\31\31\377\26\26\26\377\23\23\23\377\21\21" \
+ "\21\377\17\17\17\377\14\14\14\377\12\12\12\377\10\10\10\377\6\6\6\377" \
+ "\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\256\0\0\0\377" \
+ "\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377\12" \
+ "\12\12\377\14\14\14\377\16\16\16\377\21\21\21\377\23\23\23\377\25\25" \
+ "\25\377\30\30\30\377\33\33\33\377\35\35\35\377\40\40\40\377###\377&&" \
+ "&\377(((\377+++\377...\377000\377333\377\331\331\331\377\205\377\377" \
+ "\377\377\1\331\331\331\377\220BBB\377\1TTT\377\206\377\377\377\377\1" \
+ "\231\231\231\377\203BBB\377\1\307\307\307\377\205\377\377\377\377\1\274" \
+ "\274\274\377\215BBB\377\1\301\301\301\377\205\377\377\377\377\1\357\357" \
+ "\357\377\203BBB\377\1\373\373\373\377\205\377\377\377\377\1\257\257\257" \
+ "\377\230BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377" \
+ "\215BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\204" \
+ "BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377\212B" \
+ "BB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212BB" \
+ "B\377\1nnn\377\206\377\377\377\377\1ccc\377\202BBB\377\1MMM\377\206\377" \
+ "\377\377\377\1\253\253\253\377\220BBB\377\1\202\202\202\377\206\377\377" \
+ "\377\377\1jjj\377\203BBB\377\1\364\364\364\377\205\377\377\377\377\1" \
+ "\220\220\220\377\202BBB\377\2VVV\377\355\355\355\377\206\377\377\377" \
+ "\377\1\244\244\244\377\210BBB\377\1\242\242\242\377\206\377\377\377\377" \
+ "\1VVV\377\217BBB\377\2AAA\377\327\327\327\377\205\377\377\377\377\27" \
+ "\317\317\317\377000\377...\377+++\377(((\377%%%\377###\377\40\40\40\377" \
+ "\35\35\35\377\33\33\33\377\30\30\30\377\25\25\25\377\23\23\23\377\21" \
+ "\21\21\377\16\16\16\377\14\14\14\377\12\12\12\377\10\10\10\377\6\6\6" \
+ "\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\256\0\0\0" \
+ "\377\30\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\6\6\6\377\10\10\10\377" \
+ "\12\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377\23\23\23\377\25" \
+ "\25\25\377\30\30\30\377\32\32\32\377\35\35\35\377\40\40\40\377###\377" \
+ "%%%\377(((\377+++\377---\377000\377222\377\274\274\274\377\205\377\377" \
+ "\377\377\2\370\370\370\377III\377\217BBB\377\1\200\200\200\377\206\377" \
+ "\377\377\377\1~~~\377\203BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\215BBB\377\1\336\336\336\377\205\377\377\377\377\1" \
+ "\331\331\331\377\203BBB\377\1\351\351\351\377\205\377\377\377\377\1\301" \
+ "\301\301\377\230BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307" \
+ "\307\377\215BBB\377\1\274\274\274\377\205\377\377\377\377\1\307\307\307" \
+ "\377\204BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233\233\377" \
+ "\212BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336\377\212" \
+ "BBB\377\1nnn\377\206\377\377\377\377\1ccc\377\203BBB\377\1\357\357\357" \
+ "\377\205\377\377\377\377\1\323\323\323\377\220BBB\377\1\261\261\261\377" \
+ "\206\377\377\377\377\1MMM\377\203BBB\377\1\364\364\364\377\205\377\377" \
+ "\377\377\1\220\220\220\377\203BBB\377\2ccc\377\362\362\362\377\206\377" \
+ "\377\377\377\1\231\231\231\377\207BBB\377\1\207\207\207\377\206\377\377" \
+ "\377\377\1\205\205\205\377\217BBB\377\2HHH\377\370\370\370\377\205\377" \
+ "\377\377\377\27\262\262\262\377000\377---\377+++\377(((\377%%%\377\"" \
+ "\"\"\377\40\40\40\377\35\35\35\377\32\32\32\377\30\30\30\377\25\25\25" \
+ "\377\23\23\23\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377" \
+ "\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0" \
+ "\0\0\377\257\0\0\0\377\27\1\1\1\377\3\3\3\377\4\4\4\377\6\6\6\377\10" \
+ "\10\10\377\12\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377\22\22" \
+ "\22\377\25\25\25\377\27\27\27\377\32\32\32\377\34\34\34\377\37\37\37" \
+ "\377\"\"\"\377%%%\377'''\377***\377---\377///\377222\377\231\231\231" \
+ "\377\206\377\377\377\377\1|||\377\217BBB\377\1\274\274\274\377\206\377" \
+ "\377\377\377\1VVV\377\203BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\214BBB\377\2OOO\377\375\375\375\377\205\377\377\377" \
+ "\377\1\301\301\301\377\203BBB\377\1\327\327\327\377\205\377\377\377\377" \
+ "\1\327\327\327\377\230BBB\377\1\274\274\274\377\205\377\377\377\377\1" \
+ "\307\307\307\377\215BBB\377\1\274\274\274\377\205\377\377\377\377\1\307" \
+ "\307\307\377\204BBB\377\1\364\364\364\377\205\377\377\377\377\1\233\233" \
+ "\233\377\212BBB\377\1\261\261\261\377\205\377\377\377\377\1\336\336\336" \
+ "\377\212BBB\377\1nnn\377\206\377\377\377\377\1ccc\377\203BBB\377\1\316" \
+ "\316\316\377\205\377\377\377\377\2\375\375\375\377RRR\377\216BBB\377" \
+ "\2DDD\377\351\351\351\377\205\377\377\377\377\1\344\344\344\377\204B" \
+ "BB\377\1\364\364\364\377\205\377\377\377\377\1\220\220\220\377\204BB" \
+ "B\377\2jjj\377\366\366\366\377\206\377\377\377\377\1\220\220\220\377" \
+ "\206BBB\377\1aaa\377\206\377\377\377\377\1\274\274\274\377\217BBB\377" \
+ "\1{{{\377\206\377\377\377\377\26\213\213\213\377///\377---\377***\377" \
+ "'''\377$$$\377\"\"\"\377\37\37\37\377\34\34\34\377\32\32\32\377\27\27" \
+ "\27\377\25\25\25\377\22\22\22\377\20\20\20\377\16\16\16\377\13\13\13" \
+ "\377\11\11\11\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\1\1\1\377" \
+ "\377\0\0\0\377\260\0\0\0\377\27\1\1\1\377\3\3\3\377\4\4\4\377\5\5\5\377" \
+ "\7\7\7\377\11\11\11\377\13\13\13\377\15\15\15\377\20\20\20\377\22\22" \
+ "\22\377\24\24\24\377\27\27\27\377\31\31\31\377\34\34\34\377\37\37\37" \
+ "\377!!!\377$$$\377&&&\377)))\377,,,\377...\377111\377ddd\377\206\377" \
+ "\377\377\377\2\327\327\327\377DDD\377\215BBB\377\2___\377\373\373\373" \
+ "\377\205\377\377\377\377\1\351\351\351\377\204BBB\377\1\307\307\307\377" \
+ "\205\377\377\377\377\1\274\274\274\377\214BBB\377\1\242\242\242\377\206" \
+ "\377\377\377\377\1\230\230\230\377\203AAA\377\1\267\267\267\377\205\377" \
+ "\377\377\377\2\375\375\375\377RRR\377\227BBB\377\1\274\274\274\377\205" \
+ "\377\377\377\377\1\307\307\307\377\203BBB\377\206AAA\377\204BBB\377\1" \
+ "\274\274\274\377\205\377\377\377\377\1\307\307\307\377\204BBB\377\1\364" \
+ "\364\364\377\205\377\377\377\377\1\233\233\233\377\212BBB\377\1\261\261" \
+ "\261\377\205\377\377\377\377\1\336\336\336\377\212BBB\377\1nnn\377\206" \
+ "\377\377\377\377\1ccc\377\203BBB\377\1\233\233\233\377\206\377\377\377" \
+ "\377\1\250\250\250\377\216BBB\377\1\211\211\211\377\206\377\377\377\377" \
+ "\1\261\261\261\377\204BBB\377\1\364\364\364\377\205\377\377\377\377\1" \
+ "\220\220\220\377\205BBB\377\2sss\377\370\370\370\377\206\377\377\377" \
+ "\377\1\207\207\207\377\205BBB\377\2DDD\377\362\362\362\377\205\377\377" \
+ "\377\377\2\373\373\373\377ZZZ\377\215BBB\377\2CCC\377\333\333\333\377" \
+ "\206\377\377\377\377\26UUU\377...\377+++\377)))\377&&&\377$$$\377!!!" \
+ "\377\36\36\36\377\34\34\34\377\31\31\31\377\27\27\27\377\24\24\24\377" \
+ "\22\22\22\377\20\20\20\377\15\15\15\377\13\13\13\377\11\11\11\377\7\7" \
+ "\7\377\5\5\5\377\4\4\4\377\3\3\3\377\1\1\1\377\377\0\0\0\377\260\0\0" \
+ "\0\377\30\1\1\1\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11" \
+ "\377\13\13\13\377\15\15\15\377\17\17\17\377\21\21\21\377\24\24\24\377" \
+ "\26\26\26\377\31\31\31\377\33\33\33\377\36\36\36\377\40\40\40\377###" \
+ "\377&&&\377(((\377+++\377---\377000\377444\377\354\354\354\377\206\377" \
+ "\377\377\377\2\250\250\250\377AAA\377\213BBB\377\2NNN\377\335\335\335" \
+ "\377\206\377\377\377\377\1\250\250\250\377\204BBB\377\1\307\307\307\377" \
+ "\205\377\377\377\377\1\274\274\274\377\213BBB\377\2nnn\377\373\373\373" \
+ "\377\206\377\377\377\377\1bbb\377\203@@@\377\1\217\217\217\377\206\377" \
+ "\377\377\377\1\253\253\253\377\227BBB\377\1\274\274\274\377\205\377\377" \
+ "\377\377\1\307\307\307\377\215AAA\377\1\274\274\274\377\205\377\377\377" \
+ "\377\1\307\307\307\377\204BBB\377\1\364\364\364\377\205\377\377\377\377" \
+ "\1\233\233\233\377\212BBB\377\1\261\261\261\377\205\377\377\377\377\1" \
+ "\336\336\336\377\204BBB\377\202AAA\377\204BBB\377\1nnn\377\206\377\377" \
+ "\377\377\1ccc\377\202BBB\377\2AAA\377^^^\377\206\377\377\377\377\3\375" \
+ "\375\375\377yyy\377AAA\377\211BBB\377\202AAA\377\2ggg\377\366\366\366" \
+ "\377\206\377\377\377\377\1www\377\204BBB\377\1\364\364\364\377\205\377" \
+ "\377\377\377\1\220\220\220\377\206AAA\377\2{{{\377\373\373\373\377\205" \
+ "\377\377\377\377\2\375\375\375\377~~~\377\205BBB\377\1\263\263\263\377" \
+ "\206\377\377\377\377\2\331\331\331\377KKK\377\212BBB\377\202AAA\377\1" \
+ "\263\263\263\377\206\377\377\377\377\27\340\340\340\377000\377---\377" \
+ "+++\377(((\377&&&\377###\377\40\40\40\377\36\36\36\377\33\33\33\377\31" \
+ "\31\31\377\26\26\26\377\24\24\24\377\21\21\21\377\17\17\17\377\15\15" \
+ "\15\377\13\13\13\377\11\11\11\377\7\7\7\377\5\5\5\377\4\4\4\377\2\2\2" \
+ "\377\1\1\1\377\377\0\0\0\377\260\0\0\0\377\30\1\1\1\377\2\2\2\377\3\3" \
+ "\3\377\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\15\15\15\377\17" \
+ "\17\17\377\21\21\21\377\23\23\23\377\25\25\25\377\30\30\30\377\32\32" \
+ "\32\377\35\35\35\377\37\37\37\377\"\"\"\377%%%\377'''\377***\377,,,\377" \
+ "///\377111\377\226\226\226\377\207\377\377\377\377\2\274\274\274\377" \
+ "QQQ\377\211AAA\377\2nnn\377\344\344\344\377\206\377\377\377\377\2\375" \
+ "\375\375\377]]]\377\204BBB\377\1\307\307\307\377\205\377\377\377\377" \
+ "\1\274\274\274\377\211BBB\377\3EEE\377\224\224\224\377\370\370\370\377" \
+ "\206\377\377\377\377\1\324\324\324\377\204\77\77\77\377\2VVV\377\375" \
+ "\375\375\377\206\377\377\377\377\2\243\243\243\377HHH\377\225BBB\377" \
+ "\1\274\274\274\377\205\377\377\377\377\1\307\307\307\377\215@@@\377\1" \
+ "\274\274\274\377\205\377\377\377\377\1\307\307\307\377\204BBB\377\1\364" \
+ "\364\364\377\205\377\377\377\377\1\232\232\232\377\212AAA\377\1\261\261" \
+ "\261\377\205\377\377\377\377\1\335\335\335\377\212AAA\377\1nnn\377\206" \
+ "\377\377\377\377\1ccc\377\204AAA\377\1\320\320\320\377\206\377\377\377" \
+ "\377\3\373\373\373\377\230\230\230\377EEE\377\211AAA\377\2\211\211\211" \
+ "\377\366\366\366\377\206\377\377\377\377\2\346\346\346\377CCC\377\204" \
+ "AAA\377\1\364\364\364\377\205\377\377\377\377\1\217\217\217\377\207@" \
+ "@@\377\2\203\203\203\377\375\375\375\377\205\377\377\377\377\2\373\373" \
+ "\373\377www\377\202BBB\377\202AAA\377\1eee\377\207\377\377\377\377\2" \
+ "\335\335\335\377ggg\377\211AAA\377\2SSS\377\302\302\302\377\207\377\377" \
+ "\377\377\27\213\213\213\377///\377,,,\377***\377'''\377%%%\377\"\"\"" \
+ "\377\37\37\37\377\35\35\35\377\32\32\32\377\30\30\30\377\25\25\25\377" \
+ "\23\23\23\377\21\21\21\377\17\17\17\377\15\15\15\377\12\12\12\377\10" \
+ "\10\10\377\6\6\6\377\5\5\5\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0" \
+ "\0\377\260\0\0\0\377\31\1\1\1\377\2\2\2\377\3\3\3\377\5\5\5\377\6\6\6" \
+ "\377\10\10\10\377\12\12\12\377\14\14\14\377\16\16\16\377\20\20\20\377" \
+ "\22\22\22\377\25\25\25\377\27\27\27\377\32\32\32\377\34\34\34\377\37" \
+ "\37\37\377!!!\377###\377&&&\377(((\377+++\377---\377000\377<<<\377\352" \
+ "\352\352\377\207\377\377\377\377\4\366\366\366\377\300\300\300\377\223" \
+ "\223\223\377qqq\377\203fff\377\3}}}\377\236\236\236\377\322\322\322\377" \
+ "\210\377\377\377\377\1\267\267\267\377\205BBB\377\1\307\307\307\377\205" \
+ "\377\377\377\377\1\344\344\344\377\210\263\263\263\377\2\300\300\300" \
+ "\377\362\362\362\377\210\377\377\377\377\1www\377\205>>>\377\1\302\302" \
+ "\302\377\207\377\377\377\377\2\364\364\364\377\302\302\302\377\217\263" \
+ "\263\263\377\1\236\236\236\377\204@@@\377\1\274\274\274\377\205\377\377" \
+ "\377\377\1\307\307\307\377\215\77\77\77\377\1\273\273\273\377\205\377" \
+ "\377\377\377\1\307\307\307\377\204@@@\377\1\364\364\364\377\205\377\377" \
+ "\377\377\1\232\232\232\377\212@@@\377\1\260\260\260\377\205\377\377\377" \
+ "\377\1\335\335\335\377\212@@@\377\1mmm\377\206\377\377\377\377\1bbb\377" \
+ "\203@@@\377\3\77\77\77\377hhh\377\375\375\375\377\207\377\377\377\377" \
+ "\4\355\355\355\377\265\265\265\377\214\214\214\377hhh\377\203fff\377" \
+ "\3\206\206\206\377\247\247\247\377\346\346\346\377\210\377\377\377\377" \
+ "\1\203\203\203\377\202\77\77\77\377\203@@@\377\1\364\364\364\377\205" \
+ "\377\377\377\377\1\216\216\216\377\210\77\77\77\377\1\214\214\214\377" \
+ "\206\377\377\377\377\2\370\370\370\377mmm\377\204@@@\377\1\274\274\274" \
+ "\377\210\377\377\377\377\3\322\322\322\377\236\236\236\377}}}\377\203" \
+ "fff\377\4qqq\377\223\223\223\377\302\302\302\377\370\370\370\377\207" \
+ "\377\377\377\377\30\351\351\351\377777\377---\377+++\377(((\377&&&\377" \
+ "###\377!!!\377\36\36\36\377\34\34\34\377\31\31\31\377\27\27\27\377\25" \
+ "\25\25\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12" \
+ "\12\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377" \
+ "\377\0\0\0\377\260\0\0\0\377\32\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377" \
+ "\6\6\6\377\10\10\10\377\11\11\11\377\13\13\13\377\15\15\15\377\20\20" \
+ "\20\377\22\22\22\377\24\24\24\377\26\26\26\377\31\31\31\377\33\33\33" \
+ "\377\36\36\36\377\40\40\40\377\"\"\"\377%%%\377'''\377***\377,,,\377" \
+ "...\377000\377nnn\377\375\375\375\377\227\377\377\377\377\2\351\351\351" \
+ "\377NNN\377\202AAA\377\203BBB\377\1\307\307\307\377\227\377\377\377\377" \
+ "\1\266\266\266\377\206===\377\2XXX\377\372\372\372\377\227\377\377\377" \
+ "\377\1\335\335\335\377\204\77\77\77\377\1\273\273\273\377\205\377\377" \
+ "\377\377\1\306\306\306\377\203>>>\377\206===\377\204>>>\377\1\273\273" \
+ "\273\377\205\377\377\377\377\1\307\307\307\377\204\77\77\77\377\1\364" \
+ "\364\364\377\205\377\377\377\377\1\231\231\231\377\212\77\77\77\377\1" \
+ "\260\260\260\377\205\377\377\377\377\1\335\335\335\377\212\77\77\77\377" \
+ "\1lll\377\206\377\377\377\377\1```\377\205>>>\377\1\242\242\242\377\230" \
+ "\377\377\377\377\1\306\306\306\377\206>>>\377\1\364\364\364\377\205\377" \
+ "\377\377\377\1\215\215\215\377\211>>>\377\1\224\224\224\377\206\377\377" \
+ "\377\377\2\364\364\364\377hhh\377\203\77\77\77\377\2QQQ\377\353\353\353" \
+ "\377\227\377\377\377\377\31\375\375\375\377hhh\377...\377,,,\377***\377" \
+ "'''\377%%%\377\"\"\"\377\40\40\40\377\35\35\35\377\33\33\33\377\31\31" \
+ "\31\377\26\26\26\377\24\24\24\377\22\22\22\377\20\20\20\377\15\15\15" \
+ "\377\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3" \
+ "\377\2\2\2\377\1\1\1\377\377\0\0\0\377\261\0\0\0\377\32\1\1\1\377\3\3" \
+ "\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\13\13\13\377\15\15" \
+ "\15\377\17\17\17\377\21\21\21\377\23\23\23\377\25\25\25\377\30\30\30" \
+ "\377\32\32\32\377\34\34\34\377\37\37\37\377!!!\377###\377&&&\377(((\377" \
+ "***\377---\377///\377111\377\202\202\202\377\375\375\375\377\225\377" \
+ "\377\377\377\3\355\355\355\377bbb\377@@@\377\204AAA\377\2BBB\377\307" \
+ "\307\307\377\226\377\377\377\377\2\305\305\305\377@@@\377\207;;;\377" \
+ "\1\200\200\200\377\227\377\377\377\377\1\335\335\335\377\204===\377\1" \
+ "\273\273\273\377\205\377\377\377\377\1\306\306\306\377\215<<<\377\1\272" \
+ "\272\272\377\205\377\377\377\377\1\306\306\306\377\204===\377\1\364\364" \
+ "\364\377\205\377\377\377\377\1\230\230\230\377\211===\377\2<<<\377\257" \
+ "\257\257\377\205\377\377\377\377\1\335\335\335\377\212===\377\1jjj\377" \
+ "\206\377\377\377\377\1^^^\377\206<<<\377\1\263\263\263\377\226\377\377" \
+ "\377\377\2\321\321\321\377GGG\377\206<<<\377\1\364\364\364\377\205\377" \
+ "\377\377\377\1\214\214\214\377\212<<<\377\1\237\237\237\377\206\377\377" \
+ "\377\377\2\357\357\357\377___\377\203===\377\2___\377\352\352\352\377" \
+ "\225\377\377\377\377\31\375\375\375\377\201\201\201\377///\377,,,\377" \
+ "***\377(((\377&&&\377###\377!!!\377\37\37\37\377\34\34\34\377\32\32\32" \
+ "\377\30\30\30\377\25\25\25\377\23\23\23\377\21\21\21\377\17\17\17\377" \
+ "\15\15\15\377\13\13\13\377\11\11\11\377\7\7\7\377\5\5\5\377\4\4\4\377" \
+ "\3\3\3\377\1\1\1\377\377\0\0\0\377\262\0\0\0\377\33\1\1\1\377\2\2\2\377" \
+ "\3\3\3\377\5\5\5\377\6\6\6\377\10\10\10\377\12\12\12\377\14\14\14\377" \
+ "\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377\27\27\27\377\31" \
+ "\31\31\377\33\33\33\377\35\35\35\377\40\40\40\377\"\"\"\377$$$\377&&" \
+ "&\377(((\377+++\377---\377///\377111\377bbb\377\340\340\340\377\223\377" \
+ "\377\377\377\3\304\304\304\377QQQ\377\77\77\77\377\203@@@\377\203AAA" \
+ "\377\1\307\307\307\377\224\377\377\377\377\3\372\372\372\377\242\242" \
+ "\242\377;;;\377\211999\377\2zzz\377\366\366\366\377\225\377\377\377\377" \
+ "\2\335\335\335\377<<<\377\203;;;\377\1\271\271\271\377\205\377\377\377" \
+ "\377\1\305\305\305\377\215:::\377\1\271\271\271\377\205\377\377\377\377" \
+ "\1\305\305\305\377\204;;;\377\1\363\363\363\377\205\377\377\377\377\2" \
+ "\227\227\227\377:::\377\206;;;\377\203:::\377\1\256\256\256\377\205\377" \
+ "\377\377\377\1\334\334\334\377\202:::\377\205;;;\377\203:::\377\1hhh" \
+ "\377\206\377\377\377\377\1]]]\377\207:::\377\2\213\213\213\377\363\363" \
+ "\363\377\222\377\377\377\377\3\372\372\372\377\242\242\242\377\77\77" \
+ "\77\377\207:::\377\1\363\363\363\377\205\377\377\377\377\1\213\213\213" \
+ "\377\213:::\377\1\251\251\251\377\206\377\377\377\377\2\354\354\354\377" \
+ "WWW\377\203;;;\377\2MMM\377\301\301\301\377\223\377\377\377\377\32\340" \
+ "\340\340\377aaa\377///\377---\377+++\377(((\377&&&\377$$$\377\"\"\"\377" \
+ "\40\40\40\377\35\35\35\377\33\33\33\377\31\31\31\377\27\27\27\377\24" \
+ "\24\24\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12" \
+ "\12\377\10\10\10\377\6\6\6\377\5\5\5\377\3\3\3\377\2\2\2\377\1\1\1\377" \
+ "\377\0\0\0\377\262\0\0\0\377\35\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377" \
+ "\6\6\6\377\10\10\10\377\11\11\11\377\13\13\13\377\15\15\15\377\17\17" \
+ "\17\377\21\21\21\377\24\24\24\377\25\25\25\377\30\30\30\377\32\32\32" \
+ "\377\34\34\34\377\36\36\36\377\40\40\40\377###\377%%%\377'''\377)))\377" \
+ "+++\377---\377///\377000\377444\377{{{\377\306\306\306\377\216\377\377" \
+ "\377\377\4\364\364\364\377\266\266\266\377hhh\377===\377\202>>>\377\202" \
+ "\77\77\77\377\203@@@\377\2AAA\377\307\307\307\377\222\377\377\377\377" \
+ "\3\350\350\350\377\246\246\246\377TTT\377\214777\377\3JJJ\377\246\246" \
+ "\246\377\354\354\354\377\223\377\377\377\377\1\334\334\334\377\20499" \
+ "9\377\1\271\271\271\377\205\377\377\377\377\1\304\304\304\377\215888" \
+ "\377\1\271\271\271\377\205\377\377\377\377\1\305\305\305\377\204999\377" \
+ "\1\363\363\363\377\205\377\377\377\377\1\226\226\226\377\210999\377\202" \
+ "888\377\1\255\255\255\377\205\377\377\377\377\2\334\334\334\377888\377" \
+ "\210999\377\2""888\377ggg\377\206\377\377\377\377\1[[[\377\203888\377" \
+ "\205999\377\3EEE\377\226\226\226\377\332\332\332\377\216\377\377\377" \
+ "\377\3\350\350\350\377\237\237\237\377PPP\377\203999\377\206888\377\1" \
+ "\363\363\363\377\205\377\377\377\377\1\212\212\212\377\214888\377\1\264" \
+ "\264\264\377\206\377\377\377\377\2\350\350\350\377NNN\377\204999\377" \
+ "\3eee\377\264\264\264\377\363\363\363\377\216\377\377\377\377\34\305" \
+ "\305\305\377zzz\377222\377...\377---\377+++\377)))\377'''\377%%%\377" \
+ "###\377\40\40\40\377\36\36\36\377\34\34\34\377\32\32\32\377\30\30\30" \
+ "\377\25\25\25\377\23\23\23\377\21\21\21\377\17\17\17\377\15\15\15\377" \
+ "\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\4\4\4\377\3\3\3\377" \
+ "\2\2\2\377\1\1\1\377\377\0\0\0\377\262\0\0\0\377\202\1\1\1\377!\3\3\3" \
+ "\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\14\14\14" \
+ "\377\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377\26\26\26\377" \
+ "\31\31\31\377\33\33\33\377\35\35\35\377\37\37\37\377!!!\377###\377%%" \
+ "%\377'''\377)))\377+++\377,,,\377...\377///\377111\377222\377:::\377" \
+ "ddd\377\206\206\206\377\236\236\236\377\257\257\257\377\261\261\261\377" \
+ "\202\327\327\327\377\1\316\316\316\377\202\257\257\257\377\4\222\222" \
+ "\222\377\201\201\201\377]]]\377:::\377\202;;;\377\1<<<\377\202===\377" \
+ "\202>>>\377\202\77\77\77\377\202@@@\377\1\307\307\307\377\205\377\377" \
+ "\377\377\1\327\327\327\377\203\214\214\214\377\202\213\213\213\377\1" \
+ "\212\212\212\377\203\211\211\211\377\4\210\210\210\377ddd\377MMM\377" \
+ "777\377\203666\377\216555\377\2TTT\377nnn\377\203\206\206\206\377\216" \
+ "\207\207\207\377\1yyy\377\203777\377\2""666\377jjj\377\205\206\206\206" \
+ "\377\1ooo\377\215666\377\1jjj\377\205\206\206\206\377\1ooo\377\20477" \
+ "7\377\1\202\202\202\377\203\207\207\207\377\202\206\206\206\377\2\\\\" \
+ "\\\377666\377\206777\377\203666\377\1eee\377\205\206\206\206\377\1xx" \
+ "x\377\203666\377\204777\377\203666\377\1III\377\206\206\206\206\377\1" \
+ "DDD\377\207666\377\203777\377\7""666\377GGG\377ooo\377\206\206\206\377" \
+ "\250\250\250\377\257\257\257\377\275\275\275\377\202\327\327\327\377" \
+ "\1\302\302\302\377\202\257\257\257\377\5\206\206\206\377vvv\377NNN\377" \
+ "666\377777\377\211666\377\2""555\377\201\201\201\377\205\206\206\206" \
+ "\377\2VVV\377555\377\213666\377\2""888\377\202\202\202\377\206\206\206" \
+ "\206\377\1mmm\377\207777\377\3ZZZ\377\202\202\202\377\223\223\223\377" \
+ "\202\257\257\257\377\1\315\315\315\377\202\327\327\327\377\40\261\261" \
+ "\261\377\256\256\256\377\236\236\236\377\205\205\205\377ccc\377999\377" \
+ "111\377///\377...\377,,,\377+++\377)))\377'''\377%%%\377###\377!!!\377" \
+ "\37\37\37\377\34\34\34\377\32\32\32\377\31\31\31\377\26\26\26\377\24" \
+ "\24\24\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12" \
+ "\12\377\11\11\11\377\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\202\1\1" \
+ "\1\377\377\0\0\0\377\263\0\0\0\377\36\1\1\1\377\2\2\2\377\3\3\3\377\5" \
+ "\5\5\377\6\6\6\377\10\10\10\377\12\12\12\377\13\13\13\377\15\15\15\377" \
+ "\17\17\17\377\21\21\21\377\23\23\23\377\25\25\25\377\27\27\27\377\31" \
+ "\31\31\377\33\33\33\377\35\35\35\377\37\37\37\377!!!\377###\377%%%\377" \
+ "'''\377(((\377***\377+++\377---\377...\377///\377000\377111\377\2022" \
+ "22\377\1""333\377\202444\377\202555\377\202666\377\1""777\377\202888" \
+ "\377\202999\377\202:::\377\2;;;\377<<<\377\202===\377\1>>>\377\202\77" \
+ "\77\77\377\2@@@\377\307\307\307\377\205\377\377\377\377\1\274\274\274" \
+ "\377\202\77\77\77\377\10>>>\377===\377<<<\377;;;\377:::\377999\37788" \
+ "8\377777\377\202666\377\202555\377\202444\377\1""333\377\216222\377\202" \
+ "333\377\204444\377\217555\377\205444\377\224333\377\253444\377\20733" \
+ "3\377\243444\377\202333\377\207222\377\203333\377\207444\377\207333\377" \
+ "\204444\377\213555\377\204444\377\1""333\377\202222\377\36""111\3770" \
+ "00\377///\377...\377---\377+++\377***\377(((\377'''\377%%%\377###\377" \
+ "!!!\377\37\37\37\377\35\35\35\377\33\33\33\377\31\31\31\377\27\27\27" \
+ "\377\25\25\25\377\23\23\23\377\21\21\21\377\17\17\17\377\15\15\15\377" \
+ "\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\5\5\5\377\3\3\3\377" \
+ "\2\2\2\377\1\1\1\377\377\0\0\0\377\264\0\0\0\377\35\1\1\1\377\2\2\2\377" \
+ "\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\11\11\11\377\12\12\12\377\14" \
+ "\14\14\377\16\16\16\377\20\20\20\377\22\22\22\377\24\24\24\377\25\25" \
+ "\25\377\30\30\30\377\31\31\31\377\33\33\33\377\35\35\35\377\37\37\37" \
+ "\377!!!\377###\377%%%\377&&&\377(((\377)))\377+++\377,,,\377---\377." \
+ "..\377\202///\377\202000\377\202111\377\2""222\377333\377\202444\377" \
+ "\1""555\377\202666\377\1""777\377\202888\377\1""999\377\202:::\377\2" \
+ ";;;\377<<<\377\202===\377\3>>>\377\77\77\77\377\307\307\307\377\205\377" \
+ "\377\377\377\12\273\273\273\377>>>\377===\377<<<\377;;;\377:::\37799" \
+ "9\377888\377777\377666\377\202555\377\2""444\377333\377\202222\377\202" \
+ "111\377\221000\377\203111\377\217222\377\205111\377\224000\377\25311" \
+ "1\377\207000\377\243111\377\214000\377\207111\377\207000\377\204111\377" \
+ "\214222\377\203111\377\202000\377\202///\377\35...\377---\377,,,\377" \
+ "+++\377)))\377(((\377&&&\377%%%\377###\377!!!\377\37\37\37\377\35\35" \
+ "\35\377\33\33\33\377\31\31\31\377\30\30\30\377\25\25\25\377\24\24\24" \
+ "\377\22\22\22\377\20\20\20\377\16\16\16\377\14\14\14\377\12\12\12\377" \
+ "\11\11\11\377\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1" \
+ "\377\377\0\0\0\377\265\0\0\0\377\1\1\1\1\377\202\3\3\3\377\27\5\5\5\377" \
+ "\6\6\6\377\10\10\10\377\11\11\11\377\13\13\13\377\15\15\15\377\17\17" \
+ "\17\377\20\20\20\377\22\22\22\377\24\24\24\377\26\26\26\377\30\30\30" \
+ "\377\32\32\32\377\33\33\33\377\35\35\35\377\37\37\37\377!!!\377###\377" \
+ "$$$\377%%%\377'''\377(((\377)))\377\202+++\377\1,,,\377\202---\377\1" \
+ "...\377\202///\377\1""000\377\202111\377\2""222\377333\377\202444\377" \
+ "\2""555\377666\377\202777\377\2""888\377999\377\202:::\377\5;;;\377<" \
+ "<<\377===\377>>>\377\307\307\307\377\205\377\377\377\377\11\273\273\273" \
+ "\377===\377<<<\377;;;\377:::\377999\377888\377777\377555\377\202444\377" \
+ "\1""222\377\202111\377\1""000\377\202///\377\202...\377\215---\377\205" \
+ "...\377\205///\377\211000\377\203///\377\235...\377\221///\377\214.." \
+ ".\377\206///\377\214...\377\216///\377\204...\377\215///\377\203...\377" \
+ "\210---\377\223...\377\204///\377\207000\377\205///\377\202...\377\202" \
+ "---\377\1,,,\377\202+++\377\32)))\377(((\377'''\377%%%\377$$$\377\"\"" \
+ "\"\377!!!\377\37\37\37\377\35\35\35\377\33\33\33\377\32\32\32\377\30" \
+ "\30\30\377\26\26\26\377\24\24\24\377\22\22\22\377\20\20\20\377\17\17" \
+ "\17\377\15\15\15\377\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377" \
+ "\5\5\5\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\266\0\0\0\377" \
+ "\34\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\10\10" \
+ "\10\377\12\12\12\377\14\14\14\377\15\15\15\377\17\17\17\377\21\21\21" \
+ "\377\23\23\23\377\24\24\24\377\26\26\26\377\30\30\30\377\32\32\32\377" \
+ "\33\33\33\377\35\35\35\377\37\37\37\377\40\40\40\377\"\"\"\377###\377" \
+ "%%%\377&&&\377'''\377(((\377)))\377\202***\377\202+++\377\1,,,\377\202" \
+ "---\377\2...\377///\377\202000\377\4""111\377222\377333\377444\377\202" \
+ "555\377\3""666\377777\377888\377\202999\377\4:::\377;;;\377<<<\377\306" \
+ "\306\306\377\205\377\377\377\377\14\272\272\272\377;;;\377:::\377999" \
+ "\377888\377777\377666\377555\377444\377222\377111\377000\377\202///\377" \
+ "\1...\377\202---\377\1,,,\377\204+++\377\204***\377\212+++\377\203,," \
+ ",\377\216---\377\202,,,\377\234+++\377\222,,,\377\212+++\377\207,,,\377" \
+ "\214+++\377\216,,,\377\203+++\377\216,,,\377\236+++\377\202,,,\377\214" \
+ "---\377\202,,,\377\203+++\377\202***\377\34)))\377(((\377'''\377&&&\377" \
+ "$$$\377###\377\"\"\"\377\40\40\40\377\37\37\37\377\35\35\35\377\33\33" \
+ "\33\377\32\32\32\377\30\30\30\377\26\26\26\377\24\24\24\377\23\23\23" \
+ "\377\21\21\21\377\17\17\17\377\15\15\15\377\14\14\14\377\12\12\12\377" \
+ "\10\10\10\377\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1" \
+ "\377\377\0\0\0\377\267\0\0\0\377\33\1\1\1\377\2\2\2\377\3\3\3\377\5\5" \
+ "\5\377\6\6\6\377\7\7\7\377\11\11\11\377\12\12\12\377\14\14\14\377\16" \
+ "\16\16\377\20\20\20\377\21\21\21\377\23\23\23\377\24\24\24\377\26\26" \
+ "\26\377\30\30\30\377\31\31\31\377\33\33\33\377\34\34\34\377\36\36\36" \
+ "\377\37\37\37\377!!!\377\"\"\"\377###\377$$$\377%%%\377&&&\377\202''" \
+ "'\377\2(((\377)))\377\202***\377\2+++\377,,,\377\202---\377\3...\377" \
+ "///\377000\377\202111\377\1""222\377\202444\377\3""555\377666\377777" \
+ "\377\202888\377\3""999\377:::\377\305\305\305\377\205\377\377\377\377" \
+ "\16\271\271\271\377999\377888\377777\377666\377555\377444\377222\377" \
+ "111\377000\377///\377...\377---\377,,,\377\202+++\377\202***\377\202" \
+ ")))\377\217(((\377\202)))\377\210***\377\203+++\377\205***\377\241))" \
+ ")\377\215***\377\217)))\377\202***\377\206)))\377\205(((\377\204)))\377" \
+ "\212***\377\211)))\377\211***\377\204)))\377\214(((\377\211)))\377\203" \
+ "(((\377\205)))\377\216***\377\202)))\377\202(((\377\202'''\377\33&&&" \
+ "\377%%%\377$$$\377###\377\"\"\"\377!!!\377\37\37\37\377\36\36\36\377" \
+ "\34\34\34\377\33\33\33\377\31\31\31\377\30\30\30\377\26\26\26\377\24" \
+ "\24\24\377\23\23\23\377\21\21\21\377\20\20\20\377\16\16\16\377\14\14" \
+ "\14\377\12\12\12\377\11\11\11\377\7\7\7\377\6\6\6\377\4\4\4\377\3\3\3" \
+ "\377\2\2\2\377\1\1\1\377\377\0\0\0\377\270\0\0\0\377\31\1\1\1\377\2\2" \
+ "\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\10\10\10\377\11\11\11" \
+ "\377\13\13\13\377\15\15\15\377\16\16\16\377\20\20\20\377\21\21\21\377" \
+ "\23\23\23\377\24\24\24\377\26\26\26\377\27\27\27\377\31\31\31\377\32" \
+ "\32\32\377\34\34\34\377\35\35\35\377\36\36\36\377\40\40\40\377!!!\377" \
+ "\"\"\"\377\202###\377\1$$$\377\202%%%\377\2&&&\377'''\377\202(((\377" \
+ "\5)))\377***\377+++\377,,,\377---\377\202...\377\3///\377000\377111\377" \
+ "\202222\377\1""444\377\202555\377\1""666\377\202777\377\1\304\304\304" \
+ "\377\205\377\377\377\377\17\270\270\270\377777\377666\377555\377444\377" \
+ "222\377111\377000\377///\377...\377---\377,,,\377+++\377***\377)))\377" \
+ "\202(((\377\202'''\377\202&&&\377\214%%%\377\204&&&\377\207'''\377\205" \
+ "(((\377\205'''\377\237&&&\377\216'''\377\216&&&\377\204'''\377\216&&" \
+ "&\377\213'''\377\207&&&\377\213'''\377\204&&&\377\211%%%\377\223&&&\377" \
+ "\205'''\377\203(((\377\206'''\377\203&&&\377\202%%%\377\1$$$\377\202" \
+ "###\377\31\"\"\"\377!!!\377\40\40\40\377\36\36\36\377\35\35\35\377\34" \
+ "\34\34\377\32\32\32\377\31\31\31\377\27\27\27\377\26\26\26\377\24\24" \
+ "\24\377\23\23\23\377\21\21\21\377\20\20\20\377\16\16\16\377\14\14\14" \
+ "\377\13\13\13\377\11\11\11\377\10\10\10\377\6\6\6\377\5\5\5\377\4\4\4" \
+ "\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\271\0\0\0\377\31\1\1" \
+ "\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\7\7\7\377\10\10\10\377" \
+ "\12\12\12\377\13\13\13\377\15\15\15\377\16\16\16\377\20\20\20\377\21" \
+ "\21\21\377\22\22\22\377\24\24\24\377\25\25\25\377\27\27\27\377\30\30" \
+ "\30\377\31\31\31\377\33\33\33\377\34\34\34\377\35\35\35\377\36\36\36" \
+ "\377\37\37\37\377\40\40\40\377\202!!!\377\1\"\"\"\377\202###\377\4$$" \
+ "$\377%%%\377&&&\377'''\377\202(((\377\202***\377\4+++\377,,,\377---\377" \
+ "...\377\202///\377\4""000\377111\377222\377333\377\202444\377\2""555" \
+ "\377\304\304\304\377\205\377\377\377\377\1\270\270\270\377\202444\377" \
+ "\6""222\377111\377000\377///\377...\377---\377\202+++\377\1***\377\202" \
+ "(((\377\2'''\377&&&\377\202%%%\377\1$$$\377\203###\377\211\"\"\"\377" \
+ "\206###\377\203$$$\377\214%%%\377\202$$$\377\236###\377\220$$$\377\215" \
+ "###\377\204$$$\377\216###\377\214$$$\377\206###\377\213$$$\377\206##" \
+ "#\377\204\"\"\"\377\226###\377\202$$$\377\211%%%\377\203$$$\377\204#" \
+ "##\377\1\"\"\"\377\202!!!\377\31\40\40\40\377\37\37\37\377\36\36\36\377" \
+ "\35\35\35\377\34\34\34\377\33\33\33\377\31\31\31\377\30\30\30\377\27" \
+ "\27\27\377\25\25\25\377\24\24\24\377\22\22\22\377\21\21\21\377\20\20" \
+ "\20\377\16\16\16\377\15\15\15\377\13\13\13\377\12\12\12\377\10\10\10" \
+ "\377\7\7\7\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377" \
+ "\0\0\0\377\272\0\0\0\377\202\1\1\1\377\202\3\3\3\377\22\4\4\4\377\6\6" \
+ "\6\377\7\7\7\377\10\10\10\377\12\12\12\377\13\13\13\377\15\15\15\377" \
+ "\16\16\16\377\20\20\20\377\21\21\21\377\22\22\22\377\24\24\24\377\25" \
+ "\25\25\377\26\26\26\377\27\27\27\377\31\31\31\377\32\32\32\377\33\33" \
+ "\33\377\202\34\34\34\377\2\35\35\35\377\36\36\36\377\202\37\37\37\377" \
+ "\1\40\40\40\377\202!!!\377\202###\377\7$$$\377%%%\377&&&\377'''\377(" \
+ "((\377)))\377***\377\202+++\377\3,,,\377---\377...\377\202///\377\1""0" \
+ "00\377\202111\377\2""222\377\303\303\303\377\205\377\377\377\377\1\267" \
+ "\267\267\377\202111\377\14""000\377///\377...\377---\377+++\377***\377" \
+ ")))\377(((\377'''\377&&&\377%%%\377$$$\377\202###\377\1\"\"\"\377\202" \
+ "!!!\377\202\40\40\40\377\210\37\37\37\377\206\40\40\40\377\204!!!\377" \
+ "\214\"\"\"\377\203!!!\377\233\40\40\40\377\224!!!\377\210\40\40\40\377" \
+ "\211!!!\377\212\40\40\40\377\220!!!\377\202\40\40\40\377\217!!!\377\204" \
+ "\40\40\40\377\204\37\37\37\377\207\40\40\40\377\202!!!\377\213\40\40" \
+ "\40\377\204!!!\377\212\"\"\"\377\203!!!\377\203\40\40\40\377\202\37\37" \
+ "\37\377\2\36\36\36\377\35\35\35\377\202\34\34\34\377\24\33\33\33\377" \
+ "\32\32\32\377\31\31\31\377\27\27\27\377\26\26\26\377\25\25\25\377\24" \
+ "\24\24\377\22\22\22\377\21\21\21\377\20\20\20\377\16\16\16\377\15\15" \
+ "\15\377\13\13\13\377\12\12\12\377\10\10\10\377\7\7\7\377\6\6\6\377\4" \
+ "\4\4\377\3\3\3\377\2\2\2\377\202\1\1\1\377\377\0\0\0\377\273\0\0\0\377" \
+ "\24\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\7\7\7" \
+ "\377\10\10\10\377\12\12\12\377\13\13\13\377\14\14\14\377\16\16\16\377" \
+ "\17\17\17\377\20\20\20\377\22\22\22\377\23\23\23\377\24\24\24\377\25" \
+ "\25\25\377\26\26\26\377\27\27\27\377\202\31\31\31\377\1\32\32\32\377" \
+ "\202\33\33\33\377\202\34\34\34\377\6\35\35\35\377\36\36\36\377\37\37" \
+ "\37\377\40\40\40\377!!!\377\"\"\"\377\202###\377\7$$$\377%%%\377&&&\377" \
+ "'''\377(((\377)))\377***\377\202+++\377\2,,,\377---\377\202...\377\202" \
+ "///\377\1\207\207\207\377\205\254\254\254\377\14\200\200\200\377///\377" \
+ "...\377---\377,,,\377+++\377***\377)))\377(((\377'''\377&&&\377%%%\377" \
+ "\202###\377\3\"\"\"\377!!!\377\40\40\40\377\202\37\37\37\377\202\36\36" \
+ "\36\377\202\35\35\35\377\207\34\34\34\377\205\35\35\35\377\203\36\36" \
+ "\36\377\217\37\37\37\377\306\36\36\36\377\203\35\35\35\377\210\36\36" \
+ "\36\377\204\37\37\37\377\231\36\36\36\377\204\35\35\35\377\1\34\34\34" \
+ "\377\206\35\35\35\377\223\36\36\36\377\214\37\37\37\377\204\36\36\36" \
+ "\377\1\35\35\35\377\202\34\34\34\377\202\33\33\33\377\1\32\32\32\377" \
+ "\202\31\31\31\377\20\27\27\27\377\26\26\26\377\25\25\25\377\24\24\24" \
+ "\377\23\23\23\377\21\21\21\377\20\20\20\377\17\17\17\377\15\15\15\377" \
+ "\14\14\14\377\13\13\13\377\12\12\12\377\10\10\10\377\7\7\7\377\6\6\6" \
+ "\377\5\5\5\377\202\3\3\3\377\2\2\2\2\377\1\1\1\377\377\0\0\0\377\275" \
+ "\0\0\0\377\26\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6" \
+ "\377\7\7\7\377\10\10\10\377\12\12\12\377\13\13\13\377\14\14\14\377\15" \
+ "\15\15\377\17\17\17\377\20\20\20\377\21\21\21\377\22\22\22\377\23\23" \
+ "\23\377\24\24\24\377\25\25\25\377\26\26\26\377\27\27\27\377\30\30\30" \
+ "\377\203\31\31\31\377\202\32\32\32\377\12\33\33\33\377\34\34\34\377\35" \
+ "\35\35\377\36\36\36\377\37\37\37\377\40\40\40\377!!!\377\"\"\"\377##" \
+ "#\377$$$\377\202%%%\377\4&&&\377'''\377(((\377)))\377\202***\377\1++" \
+ "+\377\213,,,\377\202+++\377\13***\377)))\377'''\377&&&\377%%%\377$$$" \
+ "\377###\377\"\"\"\377!!!\377\40\40\40\377\37\37\37\377\202\36\36\36\377" \
+ "\2\35\35\35\377\34\34\34\377\202\33\33\33\377\215\32\32\32\377\204\33" \
+ "\33\33\377\220\34\34\34\377\242\33\33\33\377\210\34\34\34\377\245\33" \
+ "\33\33\377\207\34\34\34\377\214\33\33\33\377\206\34\34\34\377\205\33" \
+ "\33\33\377\213\32\32\32\377\222\33\33\33\377\216\34\34\34\377\203\33" \
+ "\33\33\377\202\32\32\32\377\203\31\31\31\377\26\30\30\30\377\27\27\27" \
+ "\377\26\26\26\377\25\25\25\377\24\24\24\377\23\23\23\377\22\22\22\377" \
+ "\21\21\21\377\20\20\20\377\17\17\17\377\15\15\15\377\14\14\14\377\13" \
+ "\13\13\377\11\11\11\377\10\10\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4" \
+ "\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377\0\0\0\377\277\0\0\0\377\22" \
+ "\1\1\1\377\2\2\2\377\3\3\3\377\4\4\4\377\5\5\5\377\6\6\6\377\7\7\7\377" \
+ "\10\10\10\377\11\11\11\377\12\12\12\377\13\13\13\377\15\15\15\377\16" \
+ "\16\16\377\17\17\17\377\20\20\20\377\21\21\21\377\22\22\22\377\23\23" \
+ "\23\377\202\24\24\24\377\1\25\25\25\377\202\26\26\26\377\202\27\27\27" \
+ "\377\2\30\30\30\377\31\31\31\377\202\32\32\32\377\12\33\33\33\377\34" \
+ "\34\34\377\35\35\35\377\36\36\36\377\37\37\37\377\40\40\40\377!!!\377" \
+ "\"\"\"\377###\377$$$\377\202%%%\377\2&&&\377'''\377\202(((\377\1)))\377" \
+ "\211***\377\202)))\377\11(((\377'''\377&&&\377%%%\377$$$\377###\377!" \
+ "!!\377\40\40\40\377\37\37\37\377\202\36\36\36\377\202\34\34\34\377\2" \
+ "\33\33\33\377\32\32\32\377\202\31\31\31\377\202\30\30\30\377\213\27\27" \
+ "\27\377\202\30\30\30\377\207\31\31\31\377\210\32\32\32\377\205\31\31" \
+ "\31\377\232\30\30\30\377\224\31\31\31\377\212\30\30\30\377\210\31\31" \
+ "\31\377\212\30\30\30\377\220\31\31\31\377\1\30\30\30\377\220\31\31\31" \
+ "\377\203\30\30\30\377\207\27\27\27\377\222\30\30\30\377\206\31\31\31" \
+ "\377\205\32\32\32\377\207\31\31\31\377\202\30\30\30\377\202\27\27\27" \
+ "\377\202\26\26\26\377\1\25\25\25\377\202\24\24\24\377\22\23\23\23\377" \
+ "\22\22\22\377\21\21\21\377\20\20\20\377\17\17\17\377\16\16\16\377\15" \
+ "\15\15\377\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7" \
+ "\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\1\1\1\377\377" \
+ "\0\0\0\377\300\0\0\0\377\202\1\1\1\377\3\2\2\2\377\3\3\3\377\4\4\4\377" \
+ "\202\5\5\5\377\12\6\6\6\377\10\10\10\377\11\11\11\377\12\12\12\377\13" \
+ "\13\13\377\14\14\14\377\15\15\15\377\16\16\16\377\17\17\17\377\20\20" \
+ "\20\377\202\21\21\21\377\2\22\22\22\377\23\23\23\377\203\24\24\24\377" \
+ "\202\25\25\25\377\6\26\26\26\377\27\27\27\377\30\30\30\377\31\31\31\377" \
+ "\32\32\32\377\33\33\33\377\202\34\34\34\377\202\36\36\36\377\4\37\37" \
+ "\37\377\40\40\40\377!!!\377\"\"\"\377\202###\377\2$$$\377%%%\377\202" \
+ "&&&\377\212'''\377\1&&&\377\202%%%\377\202###\377\12!!!\377\40\40\40" \
+ "\377\37\37\37\377\36\36\36\377\35\35\35\377\34\34\34\377\33\33\33\377" \
+ "\32\32\32\377\31\31\31\377\30\30\30\377\202\27\27\27\377\1\26\26\26\377" \
+ "\202\25\25\25\377\212\24\24\24\377\204\25\25\25\377\203\26\26\26\377" \
+ "\216\27\27\27\377\202\26\26\26\377\232\25\25\25\377\224\26\26\26\377" \
+ "\212\25\25\25\377\207\26\26\26\377\213\25\25\25\377\220\26\26\26\377" \
+ "\202\25\25\25\377\217\26\26\26\377\203\25\25\25\377\206\24\24\24\377" \
+ "\224\25\25\25\377\202\26\26\26\377\213\27\27\27\377\204\26\26\26\377" \
+ "\203\25\25\25\377\203\24\24\24\377\2\23\23\23\377\22\22\22\377\202\21" \
+ "\21\21\377\12\20\20\20\377\17\17\17\377\16\16\16\377\15\15\15\377\14" \
+ "\14\14\377\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10\377\6\6\6" \
+ "\377\202\5\5\5\377\3\4\4\4\377\3\3\3\377\2\2\2\377\202\1\1\1\377\377" \
+ "\0\0\0\377\301\0\0\0\377\202\1\1\1\377\1\2\2\2\377\202\3\3\3\377\13\4" \
+ "\4\4\377\5\5\5\377\6\6\6\377\7\7\7\377\10\10\10\377\11\11\11\377\12\12" \
+ "\12\377\13\13\13\377\14\14\14\377\15\15\15\377\16\16\16\377\202\17\17" \
+ "\17\377\202\20\20\20\377\1\21\21\21\377\203\22\22\22\377\1\23\23\23\377" \
+ "\202\24\24\24\377\7\25\25\25\377\26\26\26\377\27\27\27\377\30\30\30\377" \
+ "\31\31\31\377\32\32\32\377\33\33\33\377\202\34\34\34\377\202\36\36\36" \
+ "\377\3\37\37\37\377\40\40\40\377!!!\377\202\"\"\"\377\202###\377\212" \
+ "$$$\377\202###\377\12\"\"\"\377!!!\377\40\40\40\377\37\37\37\377\36\36" \
+ "\36\377\34\34\34\377\33\33\33\377\32\32\32\377\31\31\31\377\30\30\30" \
+ "\377\202\27\27\27\377\202\25\25\25\377\1\24\24\24\377\202\23\23\23\377" \
+ "\215\22\22\22\377\202\23\23\23\377\223\24\24\24\377\204\23\23\23\377" \
+ "\207\22\22\22\377\204\23\23\23\377\207\22\22\22\377\205\23\23\23\377" \
+ "\221\24\24\24\377\216\23\23\23\377\204\24\24\24\377\205\23\23\23\377" \
+ "\205\22\22\22\377\205\23\23\23\377\212\24\24\24\377\210\23\23\23\377" \
+ "\211\24\24\24\377\205\23\23\23\377\212\22\22\22\377\211\23\23\23\377" \
+ "\205\22\22\22\377\203\23\23\23\377\220\24\24\24\377\203\23\23\23\377" \
+ "\203\22\22\22\377\1\21\21\21\377\202\20\20\20\377\202\17\17\17\377\13" \
+ "\16\16\16\377\15\15\15\377\14\14\14\377\13\13\13\377\12\12\12\377\11" \
+ "\11\11\377\10\10\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\202\3" \
+ "\3\3\377\1\2\2\2\377\202\1\1\1\377\377\0\0\0\377\303\0\0\0\377\202\1" \
+ "\1\1\377\1\2\2\2\377\202\3\3\3\377\4\4\4\4\377\5\5\5\377\6\6\6\377\7" \
+ "\7\7\377\202\10\10\10\377\4\11\11\11\377\12\12\12\377\13\13\13\377\14" \
+ "\14\14\377\202\15\15\15\377\202\16\16\16\377\1\17\17\17\377\204\20\20" \
+ "\20\377\3\21\21\21\377\22\22\22\377\23\23\23\377\202\24\24\24\377\7\25" \
+ "\25\25\377\26\26\26\377\27\27\27\377\30\30\30\377\31\31\31\377\32\32" \
+ "\32\377\33\33\33\377\202\34\34\34\377\3\35\35\35\377\36\36\36\377\37" \
+ "\37\37\377\202\40\40\40\377\207!!!\377\202\"\"\"\377\203!!!\377\12\40" \
+ "\40\40\377\37\37\37\377\36\36\36\377\35\35\35\377\34\34\34\377\33\33" \
+ "\33\377\32\32\32\377\31\31\31\377\30\30\30\377\27\27\27\377\202\25\25" \
+ "\25\377\3\24\24\24\377\23\23\23\377\22\22\22\377\202\21\21\21\377\202" \
+ "\20\20\20\377\210\17\17\17\377\205\20\20\20\377\206\21\21\21\377\212" \
+ "\22\22\22\377\205\21\21\21\377\230\20\20\20\377\225\21\21\21\377\212" \
+ "\20\20\20\377\207\21\21\21\377\214\20\20\20\377\237\21\21\21\377\206" \
+ "\20\20\20\377\202\17\17\17\377\225\20\20\20\377\205\21\21\21\377\207" \
+ "\22\22\22\377\206\21\21\21\377\205\20\20\20\377\1\17\17\17\377\202\16" \
+ "\16\16\377\202\15\15\15\377\4\14\14\14\377\13\13\13\377\12\12\12\377" \
+ "\11\11\11\377\202\10\10\10\377\4\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4" \
+ "\377\202\3\3\3\377\1\2\2\2\377\202\1\1\1\377\377\0\0\0\377\306\0\0\0" \
+ "\377\1\1\1\1\377\202\2\2\2\377\1\3\3\3\377\202\4\4\4\377\3\5\5\5\377" \
+ "\6\6\6\377\7\7\7\377\202\10\10\10\377\1\11\11\11\377\202\12\12\12\377" \
+ "\202\13\13\13\377\1\14\14\14\377\203\15\15\15\377\202\16\16\16\377\1" \
+ "\17\17\17\377\202\20\20\20\377\4\21\21\21\377\22\22\22\377\23\23\23\377" \
+ "\24\24\24\377\202\25\25\25\377\202\27\27\27\377\3\30\30\30\377\31\31" \
+ "\31\377\32\32\32\377\202\33\33\33\377\2\34\34\34\377\35\35\35\377\202" \
+ "\36\36\36\377\212\37\37\37\377\2\36\36\36\377\35\35\35\377\202\34\34" \
+ "\34\377\12\33\33\33\377\32\32\32\377\31\31\31\377\30\30\30\377\26\26" \
+ "\26\377\25\25\25\377\24\24\24\377\23\23\23\377\22\22\22\377\21\21\21" \
+ "\377\202\20\20\20\377\2\17\17\17\377\16\16\16\377\215\15\15\15\377\203" \
+ "\16\16\16\377\223\17\17\17\377\202\16\16\16\377\226\15\15\15\377\202" \
+ "\16\16\16\377\205\17\17\17\377\221\16\16\16\377\206\15\15\15\377\214" \
+ "\16\16\16\377\206\15\15\15\377\245\16\16\16\377\231\15\15\15\377\202" \
+ "\16\16\16\377\220\17\17\17\377\204\16\16\16\377\203\15\15\15\377\1\14" \
+ "\14\14\377\202\13\13\13\377\202\12\12\12\377\1\11\11\11\377\202\10\10" \
+ "\10\377\3\7\7\7\377\6\6\6\377\5\5\5\377\202\4\4\4\377\1\3\3\3\377\202" \
+ "\2\2\2\377\1\1\1\1\377\377\0\0\0\377\311\0\0\0\377\202\1\1\1\377\1\2" \
+ "\2\2\377\202\3\3\3\377\202\4\4\4\377\1\5\5\5\377\202\6\6\6\377\2\7\7" \
+ "\7\377\10\10\10\377\202\11\11\11\377\203\12\12\12\377\203\13\13\13\377" \
+ "\202\14\14\14\377\3\15\15\15\377\16\16\16\377\17\17\17\377\202\20\20" \
+ "\20\377\4\21\21\21\377\22\22\22\377\23\23\23\377\24\24\24\377\202\25" \
+ "\25\25\377\3\26\26\26\377\27\27\27\377\30\30\30\377\202\31\31\31\377" \
+ "\1\32\32\32\377\202\33\33\33\377\212\34\34\34\377\202\33\33\33\377\1" \
+ "\32\32\32\377\202\31\31\31\377\14\27\27\27\377\26\26\26\377\25\25\25" \
+ "\377\24\24\24\377\23\23\23\377\22\22\22\377\21\21\21\377\20\20\20\377" \
+ "\17\17\17\377\16\16\16\377\15\15\15\377\14\14\14\377\202\13\13\13\377" \
+ "\212\12\12\12\377\203\13\13\13\377\204\14\14\14\377\220\15\15\15\377" \
+ "\203\14\14\14\377\226\13\13\13\377\227\14\14\14\377\211\13\13\13\377" \
+ "\210\14\14\14\377\213\13\13\13\377\236\14\14\14\377\207\13\13\13\377" \
+ "\204\12\12\12\377\222\13\13\13\377\204\14\14\14\377\214\15\15\15\377" \
+ "\205\14\14\14\377\203\13\13\13\377\203\12\12\12\377\202\11\11\11\377" \
+ "\2\10\10\10\377\7\7\7\377\202\6\6\6\377\1\5\5\5\377\202\4\4\4\377\202" \
+ "\3\3\3\377\1\2\2\2\377\202\1\1\1\377\377\0\0\0\377\313\0\0\0\377\202" \
+ "\1\1\1\377\202\2\2\2\377\202\3\3\3\377\202\4\4\4\377\202\5\5\5\377\1" \
+ "\6\6\6\377\202\7\7\7\377\202\10\10\10\377\204\11\11\11\377\203\12\12" \
+ "\12\377\5\13\13\13\377\14\14\14\377\15\15\15\377\16\16\16\377\17\17\17" \
+ "\377\202\20\20\20\377\4\21\21\21\377\22\22\22\377\23\23\23\377\24\24" \
+ "\24\377\202\25\25\25\377\3\26\26\26\377\27\27\27\377\30\30\30\377\203" \
+ "\31\31\31\377\210\32\32\32\377\203\31\31\31\377\7\30\30\30\377\27\27" \
+ "\27\377\26\26\26\377\25\25\25\377\24\24\24\377\23\23\23\377\22\22\22" \
+ "\377\202\20\20\20\377\4\16\16\16\377\15\15\15\377\14\14\14\377\13\13" \
+ "\13\377\202\12\12\12\377\1\11\11\11\377\213\10\10\10\377\203\11\11\11" \
+ "\377\227\12\12\12\377\226\11\11\11\377\213\12\12\12\377\204\11\11\11" \
+ "\377\206\12\12\12\377\214\11\11\11\377\205\12\12\12\377\222\11\11\11" \
+ "\377\224\12\12\12\377\214\11\11\11\377\204\10\10\10\377\223\11\11\11" \
+ "\377\224\12\12\12\377\204\11\11\11\377\202\10\10\10\377\202\7\7\7\377" \
+ "\1\6\6\6\377\202\5\5\5\377\202\4\4\4\377\202\3\3\3\377\202\2\2\2\377" \
+ "\202\1\1\1\377\377\0\0\0\377\316\0\0\0\377\202\1\1\1\377\202\2\2\2\377" \
+ "\202\3\3\3\377\202\4\4\4\377\203\5\5\5\377\202\6\6\6\377\204\7\7\7\377" \
+ "\203\10\10\10\377\1\11\11\11\377\202\12\12\12\377\6\13\13\13\377\14\14" \
+ "\14\377\15\15\15\377\16\16\16\377\17\17\17\377\20\20\20\377\202\21\21" \
+ "\21\377\2\22\22\22\377\23\23\23\377\202\24\24\24\377\1\25\25\25\377\202" \
+ "\26\26\26\377\202\27\27\27\377\207\30\30\30\377\202\27\27\27\377\2\26" \
+ "\26\26\377\25\25\25\377\202\24\24\24\377\2\22\22\22\377\21\21\21\377" \
+ "\202\20\20\20\377\10\16\16\16\377\15\15\15\377\14\14\14\377\13\13\13" \
+ "\377\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7\377\202\6\6\6\377\206" \
+ "\5\5\5\377\204\6\6\6\377\203\7\7\7\377\227\10\10\10\377\203\7\7\7\377" \
+ "\220\6\6\6\377\203\7\7\7\377\211\10\10\10\377\221\7\7\7\377\202\6\6\6" \
+ "\377\220\7\7\7\377\202\6\6\6\377\221\7\7\7\377\210\10\10\10\377\220\7" \
+ "\7\7\377\224\6\6\6\377\204\7\7\7\377\224\10\10\10\377\204\7\7\7\377\202" \
+ "\6\6\6\377\203\5\5\5\377\202\4\4\4\377\202\3\3\3\377\202\2\2\2\377\202" \
+ "\1\1\1\377\377\0\0\0\377\322\0\0\0\377\202\1\1\1\377\202\2\2\2\377\203" \
+ "\3\3\3\377\203\4\4\4\377\205\5\5\5\377\204\6\6\6\377\4\7\7\7\377\10\10" \
+ "\10\377\11\11\11\377\12\12\12\377\202\13\13\13\377\202\15\15\15\377\2" \
+ "\16\16\16\377\17\17\17\377\202\20\20\20\377\3\21\21\21\377\22\22\22\377" \
+ "\23\23\23\377\203\24\24\24\377\202\25\25\25\377\204\26\26\26\377\203" \
+ "\25\25\25\377\202\24\24\24\377\15\23\23\23\377\22\22\22\377\21\21\21" \
+ "\377\20\20\20\377\17\17\17\377\16\16\16\377\15\15\15\377\14\14\14\377" \
+ "\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10\377\6\6\6\377\202\5" \
+ "\5\5\377\1\4\4\4\377\206\3\3\3\377\204\4\4\4\377\205\5\5\5\377\225\6" \
+ "\6\6\377\205\5\5\5\377\216\4\4\4\377\205\5\5\5\377\207\6\6\6\377\267" \
+ "\5\5\5\377\210\6\6\6\377\225\5\5\5\377\215\4\4\4\377\207\5\5\5\377\223" \
+ "\6\6\6\377\205\5\5\5\377\203\4\4\4\377\203\3\3\3\377\202\2\2\2\377\202" \
+ "\1\1\1\377\377\0\0\0\377\326\0\0\0\377\203\1\1\1\377\203\2\2\2\377\204" \
+ "\3\3\3\377\207\4\4\4\377\3\5\5\5\377\6\6\6\377\7\7\7\377\202\10\10\10" \
+ "\377\4\11\11\11\377\12\12\12\377\13\13\13\377\14\14\14\377\202\15\15" \
+ "\15\377\2\16\16\16\377\17\17\17\377\202\20\20\20\377\1\21\21\21\377\202" \
+ "\22\22\22\377\1\23\23\23\377\206\24\24\24\377\1\23\23\23\377\202\22\22" \
+ "\22\377\1\21\21\21\377\202\20\20\20\377\15\17\17\17\377\16\16\16\377" \
+ "\15\15\15\377\14\14\14\377\13\13\13\377\12\12\12\377\11\11\11\377\10" \
+ "\10\10\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377\202\2\2" \
+ "\2\377\202\1\1\1\377\203\2\2\2\377\206\3\3\3\377\233\4\4\4\377\222\3" \
+ "\3\3\377\215\4\4\4\377\261\3\3\3\377\215\4\4\4\377\243\3\3\3\377\232" \
+ "\4\4\4\377\204\3\3\3\377\203\2\2\2\377\203\1\1\1\377\377\0\0\0\377\333" \
+ "\0\0\0\377\204\1\1\1\377\204\2\2\2\377\207\3\3\3\377\1\4\4\4\377\202" \
+ "\5\5\5\377\3\6\6\6\377\7\7\7\377\10\10\10\377\202\11\11\11\377\3\12\12" \
+ "\12\377\13\13\13\377\14\14\14\377\202\15\15\15\377\2\16\16\16\377\17" \
+ "\17\17\377\202\20\20\20\377\202\21\21\21\377\204\22\22\22\377\202\21" \
+ "\21\21\377\202\20\20\20\377\2\17\17\17\377\16\16\16\377\202\15\15\15" \
+ "\377\13\14\14\14\377\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10" \
+ "\377\7\7\7\377\6\6\6\377\5\5\5\377\4\4\4\377\3\3\3\377\2\2\2\377\202" \
+ "\1\1\1\377\203\0\0\0\377\205\1\1\1\377\205\2\2\2\377\231\3\3\3\377\206" \
+ "\2\2\2\377\210\1\1\1\377\206\2\2\2\377\213\3\3\3\377\252\2\2\2\377\203" \
+ "\1\1\1\377\206\2\2\2\377\213\3\3\3\377\205\2\2\2\377\205\1\1\1\377\215" \
+ "\2\2\2\377\210\1\1\1\377\205\2\2\2\377\203\3\3\3\377\205\2\2\2\377\221" \
+ "\3\3\3\377\204\2\2\2\377\204\1\1\1\377\377\0\0\0\377\342\0\0\0\377\212" \
+ "\1\1\1\377\202\2\2\2\377\202\3\3\3\377\2\4\4\4\377\5\5\5\377\202\6\6" \
+ "\6\377\4\7\7\7\377\10\10\10\377\11\11\11\377\12\12\12\377\202\13\13\13" \
+ "\377\3\14\14\14\377\15\15\15\377\16\16\16\377\202\17\17\17\377\206\20" \
+ "\20\20\377\202\17\17\17\377\1\16\16\16\377\202\15\15\15\377\11\14\14" \
+ "\14\377\13\13\13\377\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7\377" \
+ "\6\6\6\377\5\5\5\377\4\4\4\377\202\3\3\3\377\2\2\2\2\377\1\1\1\377\211" \
+ "\0\0\0\377\246\1\1\1\377\206\0\0\0\377\231\1\1\1\377\202\0\0\0\377\240" \
+ "\1\1\1\377\205\0\0\0\377\225\1\1\1\377\205\0\0\0\377\215\1\1\1\377\207" \
+ "\0\0\0\377\243\1\1\1\377\377\0\0\0\377\356\0\0\0\377\205\1\1\1\377\1" \
+ "\2\2\2\377\202\3\3\3\377\1\4\4\4\377\202\5\5\5\377\5\6\6\6\377\7\7\7" \
+ "\377\10\10\10\377\11\11\11\377\12\12\12\377\202\13\13\13\377\1\14\14" \
+ "\14\377\203\15\15\15\377\204\16\16\16\377\203\15\15\15\377\1\14\14\14" \
+ "\377\202\13\13\13\377\5\12\12\12\377\11\11\11\377\10\10\10\377\7\7\7" \
+ "\377\6\6\6\377\202\5\5\5\377\3\4\4\4\377\3\3\3\377\2\2\2\377\202\1\1" \
+ "\1\377\377\0\0\0\377\203\1\1\1\377\271\0\0\0\377\204\1\1\1\377\377\0" \
+ "\0\0\377\373\0\0\0\377\1\1\1\1\377\202\2\2\2\377\1\3\3\3\377\202\4\4" \
+ "\4\377\3\5\5\5\377\6\6\6\377\7\7\7\377\202\10\10\10\377\1\11\11\11\377" \
+ "\202\12\12\12\377\202\13\13\13\377\206\14\14\14\377\202\13\13\13\377" \
+ "\202\12\12\12\377\1\11\11\11\377\202\10\10\10\377\3\7\7\7\377\6\6\6\377" \
+ "\5\5\5\377\202\4\4\4\377\1\3\3\3\377\202\2\2\2\377\1\1\1\1\377\377\0" \
+ "\0\0\377\377\0\0\0\377\377\0\0\0\377\276\0\0\0\377\202\1\1\1\377\1\2" \
+ "\2\2\377\202\3\3\3\377\1\4\4\4\377\202\5\5\5\377\2\6\6\6\377\7\7\7\377" \
+ "\202\10\10\10\377\202\11\11\11\377\210\12\12\12\377\202\11\11\11\377" \
+ "\202\10\10\10\377\2\7\7\7\377\6\6\6\377\202\5\5\5\377\1\4\4\4\377\202" \
+ "\3\3\3\377\1\2\2\2\377\202\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\300\0\0\0\377\202\1\1\1\377\1\2\2\2\377\202\3\3\3\377\202" \
+ "\4\4\4\377\202\5\5\5\377\1\6\6\6\377\202\7\7\7\377\212\10\10\10\377\1" \
+ "\7\7\7\377\202\6\6\6\377\202\5\5\5\377\202\4\4\4\377\202\3\3\3\377\1" \
+ "\2\2\2\377\202\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\302" \
+ "\0\0\0\377\202\1\1\1\377\202\2\2\2\377\202\3\3\3\377\202\4\4\4\377\203" \
+ "\5\5\5\377\204\6\6\6\377\202\7\7\7\377\204\6\6\6\377\203\5\5\5\377\202" \
+ "\4\4\4\377\202\3\3\3\377\202\2\2\2\377\202\1\1\1\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\304\0\0\0\377\203\1\1\1\377\202\2\2\2\377\203" \
+ "\3\3\3\377\203\4\4\4\377\210\5\5\5\377\203\4\4\4\377\203\3\3\3\377\202" \
+ "\2\2\2\377\203\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\307" \
+ "\0\0\0\377\203\1\1\1\377\203\2\2\2\377\205\3\3\3\377\204\4\4\4\377\205" \
+ "\3\3\3\377\203\2\2\2\377\203\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\313\0\0\0\377\205\1\1\1\377\204\2\2\2\377\204\3\3\3\377\204" \
+ "\2\2\2\377\205\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\320" \
+ "\0\0\0\377\220\1\1\1\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377" \
+ "\0\0\0\377\252\0\0\0\377\3\26\24\21\377-(\"\377($\37\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377\377\0\0\0\377" \
+ "\321\0\0\0\377\377\1\0\0\377\377\1\0\0\377\377\1\0\0\377\343\1\0\0\377" \
+ "\377\3\1\0\377\377\3\1\0\377\377\3\1\0\377\343\3\1\0\377\377\5\2\0\377" \
+ "\377\5\2\0\377\377\5\2\0\377\343\5\2\0\377\377\7\3\0\377\377\7\3\0\377" \
+ "\377\7\3\0\377\343\7\3\0\377\377\11\4\0\377\377\11\4\0\377\377\11\4\0" \
+ "\377\343\11\4\0\377\377\13\5\0\377\377\13\5\0\377\377\13\5\0\377\343" \
+ "\13\5\0\377\377\14\6\0\377\377\14\6\0\377\377\14\6\0\377\343\14\6\0\377" \
+ "\377\16\7\0\377\377\16\7\0\377\377\16\7\0\377\343\16\7\0\377\377\20\10" \
+ "\0\377\377\20\10\0\377\377\20\10\0\377\343\20\10\0\377\377\22\11\0\377" \
+ "\377\22\11\0\377\377\22\11\0\377\343\22\11\0\377\377\24\12\0\377\377" \
+ "\24\12\0\377\377\24\12\0\377\343\24\12\0\377\377\25\12\0\377\377\25\12" \
+ "\0\377\377\25\12\0\377\343\25\12\0\377\377\27\13\0\377\377\27\13\0\377" \
+ "\377\27\13\0\377\343\27\13\0\377\377\31\14\0\377\377\31\14\0\377\377" \
+ "\31\14\0\377\343\31\14\0\377\377\33\15\0\377\377\33\15\0\377\377\33\15" \
+ "\0\377\343\33\15\0\377\377\35\16\0\377\377\35\16\0\377\377\35\16\0\377" \
+ "\343\35\16\0\377\377\36\17\0\377\377\36\17\0\377\377\36\17\0\377\343" \
+ "\36\17\0\377\377\40\20\0\377\377\40\20\0\377\377\40\20\0\377\343\40\20" \
+ "\0\377\377\"\21\0\377\377\"\21\0\377\377\"\21\0\377\343\"\21\0\377\377" \
+ "$\22\0\377\377$\22\0\377\377$\22\0\377\343$\22\0\377\377&\23\0\377\377" \
+ "&\23\0\377\377&\23\0\377\343&\23\0\377\377'\23\0\377\377'\23\0\377\377" \
+ "'\23\0\377\343'\23\0\377\377)\24\0\377\377)\24\0\377\377)\24\0\377\343" \
+ ")\24\0\377\377+\25\0\377\377+\25\0\377\377+\25\0\377\343+\25\0\377\377" \
+ "-\26\0\377\377-\26\0\377\377-\26\0\377\343-\26\0\377\377/\27\0\377\377" \
+ "/\27\0\377\377/\27\0\377\343/\27\0\377\3770\30\0\377\3770\30\0\377\377" \
+ "0\30\0\377\3430\30\0\377\3772\31\0\377\3772\31\0\377\3772\31\0\377\343" \
+ "2\31\0\377\3774\32\0\377\3774\32\0\377\3774\32\0\377\3434\32\0\377\377" \
+ "6\33\0\377\3776\33\0\377\3776\33\0\377\3436\33\0\377\3778\34\0\377\377" \
+ "8\34\0\377\3778\34\0\377\3438\34\0\377\377:\35\0\377\377:\35\0\377\377" \
+ ":\35\0\377\343:\35\0\377\377;\35\0\377\377;\35\0\377\377;\35\0\377\343" \
+ ";\35\0\377\377=\36\0\377\377=\36\0\377\377=\36\0\377\343=\36\0\377\377" \
+ "\77\37\0\377\377\77\37\0\377\377\77\37\0\377\343\77\37\0\377\377A\40" \
+ "\0\377\377A\40\0\377\377A\40\0\377\343A\40\0\377\377C!\0\377\377C!\0" \
+ "\377\377C!\0\377\343C!\0\377\377D\"\0\377\377D\"\0\377\377D\"\0\377\343" \
+ "D\"\0\377\377F#\0\377\377F#\0\377\377F#\0\377\343F#\0\377\377H$\0\377" \
+ "\377H$\0\377\377H$\0\377\343H$\0\377\377J%\0\377\377J%\0\377\377J%\0" \
+ "\377\343J%\0\377\377L&\0\377\377L&\0\377\377L&\0\377\343L&\0\377\377" \
+ "M&\0\377\377M&\0\377\377M&\0\377\343M&\0\377\377O'\0\377\377O'\0\377" \
+ "\377O'\0\377\343O'\0\377\377Q(\0\377\377Q(\0\377\377Q(\0\377\343Q(\0" \
+ "\377\377S)\0\377\377S)\0\377\377S)\0\377\343S)\0\377\377U*\0\377\377" \
+ "U*\0\377\377U*\0\377\343U*\0\377\377V+\0\377\377V+\0\377\377V+\0\377" \
+ "\343V+\0\377\377X,\0\377\377X,\0\377\377X,\0\377\343X,\0\377\377Z-\0" \
+ "\377\377Z-\0\377\377Z-\0\377\343Z-\0\377\377\\.\0\377\377\\.\0\377\377" \
+ "\\.\0\377\343\\.\0\377\377^/\0\377\377^/\0\377\377^/\0\377\343^/\0\377" \
+ "\377_/\0\377\377_/\0\377\377_/\0\377\343_/\0\377\377a0\0\377\377a0\0" \
+ "\377\377a0\0\377\343a0\0\377\377c1\0\377\377c1\0\377\377c1\0\377\343" \
+ "c1\0\377\377e2\0\377\377e2\0\377\377e2\0\377\343e2\0\377\377g3\0\377" \
+ "\377g3\0\377\377g3\0\377\343g3\0\377\377i4\0\377\377i4\0\377\377i4\0" \
+ "\377\343i4\0\377\377j5\0\377\377j5\0\377\377j5\0\377\343j5\0\377\377" \
+ "l6\0\377\377l6\0\377\377l6\0\377\343l6\0\377\377n7\0\377\377n7\0\377" \
+ "\377n7\0\377\343n7\0\377\377p8\0\377\377p8\0\377\377p8\0\377\343p8\0" \
+ "\377\377r9\0\377\377r9\0\377\377r9\0\377\343r9\0\377\377s9\0\377\377" \
+ "s9\0\377\377s9\0\377\343s9\0\377\377u:\0\377\377u:\0\377\377u:\0\377" \
+ "\343u:\0\377\377w;\0\377\377w;\0\377\377w;\0\377\343w;\0\377\377y<\0" \
+ "\377\377y<\0\377\377y<\0\377\343y<\0\377\377{=\0\377\377{=\0\377\377" \
+ "{=\0\377\343{=\0\377\377|>\0\377\377|>\0\377\377|>\0\377\343|>\0\377" \
+ "\377~\77\0\377\377~\77\0\377\377~\77\0\377\343~\77\0\377\377\200@\0\377" \
+ "\377\200@\0\377\377\200@\0\377\343\200@\0\377\377\202A\0\377\377\202" \
+ "A\0\377\377\202A\0\377\343\202A\0\377\377\204B\0\377\377\204B\0\377\377" \
+ "\204B\0\377\343\204B\0\377\377\205B\0\377\377\205B\0\377\377\205B\0\377" \
+ "\343\205B\0\377\377\207C\0\377\377\207C\0\377\377\207C\0\377\343\207" \
+ "C\0\377\377\211D\0\377\377\211D\0\377\377\211D\0\377\343\211D\0\377\377" \
+ "\213E\0\377\377\213E\0\377\377\213E\0\377\343\213E\0\377\377\215F\0\377" \
+ "\377\215F\0\377\377\215F\0\377\343\215F\0\377\377\217G\0\377\377\217" \
+ "G\0\377\377\217G\0\377\343\217G\0\377\377\220H\0\377\377\220H\0\377\377" \
+ "\220H\0\377\343\220H\0\377\377\222I\0\377\377\222I\0\377\377\222I\0\377" \
+ "\343\222I\0\377\377\224J\0\377\377\224J\0\377\377\224J\0\377\343\224" \
+ "J\0\377\377\226K\0\377\377\226K\0\377\377\226K\0\377\343\226K\0\377\377" \
+ "\230L\0\377\377\230L\0\377\377\230L\0\377\343\230L\0\377\377\231L\0\377" \
+ "\377\231L\0\377\377\231L\0\377\343\231L\0\377\377\233M\0\377\377\233" \
+ "M\0\377\377\233M\0\377\343\233M\0\377\377\235N\0\377\377\235N\0\377\377" \
+ "\235N\0\377\343\235N\0\377\377\237O\0\377\377\237O\0\377\377\237O\0\377" \
+ "\343\237O\0\377\377\241P\0\377\377\241P\0\377\377\241P\0\377\343\241" \
+ "P\0\377\377\242Q\0\377\377\242Q\0\377\377\242Q\0\377\343\242Q\0\377\377" \
+ "\244R\0\377\377\244R\0\377\377\244R\0\377\343\244R\0\377\377\246S\0\377" \
+ "\377\246S\0\377\377\246S\0\377\343\246S\0\377\377\250T\0\377\377\250" \
+ "T\0\377\377\250T\0\377\343\250T\0\377\377\252U\0\377\377\252U\0\377\377" \
+ "\252U\0\377\343\252U\0\377\377\253U\0\377\377\253U\0\377\377\253U\0\377" \
+ "\343\253U\0\377\377\255V\0\377\377\255V\0\377\377\255V\0\377\343\255" \
+ "V\0\377\377\257W\0\377\377\257W\0\377\377\257W\0\377\343\257W\0\377\377" \
+ "\261X\0\377\377\261X\0\377\377\261X\0\377\343\261X\0\377\377\263Y\0\377" \
+ "\377\263Y\0\377\377\263Y\0\377\343\263Y\0\377\377\264Z\0\377\377\264" \
+ "Z\0\377\377\264Z\0\377\343\264Z\0\377\377\266[\0\377\377\266[\0\377\377" \
+ "\266[\0\377\343\266[\0\377\377\270\\\0\377\377\270\\\0\377\377\270\\" \
+ "\0\377\343\270\\\0\377\377\272]\0\377\377\272]\0\377\377\272]\0\377\343" \
+ "\272]\0\377\377\274^\0\377\377\274^\0\377\377\274^\0\377\343\274^\0\377" \
+ "\377\276_\0\377\377\276_\0\377\377\276_\0\377\343\276_\0\377\377\277" \
+ "_\0\377\377\277_\0\377\377\277_\0\377\343\277_\0\377\377\301`\0\377\377" \
+ "\301`\0\377\377\301`\0\377\343\301`\0\377\353\303a\0\377\3\274]\0\377" \
+ "\233M\0\377\252T\0\377\347\303a\0\377\3\252T\0\377\213E\0\377\270[\0" \
+ "\377\377\303a\0\377\224\303a\0\377\3\274]\0\377\233M\0\377\252T\0\377" \
+ "\276\303a\0\377\3\277_\0\377\233M\0\377\250S\0\377\203\303a\0\377\3\277" \
+ "_\0\377\233M\0\377\250S\0\377\212\303a\0\377\2\237O\0\377\240O\0\377" \
+ "\237\303a\0\377\233\305b\0\377\10\266Z\0\377j5\0\3778\34\0\377!\20\0" \
+ "\377%\22\0\377A\40\0\377|=\0\377\301`\0\377\252\305b\0\377\1\301`\0\377" \
+ "\202R)\0\377\2U*\0\377\301`\0\377\206\305b\0\377\1o7\0\377\202R)\0\377" \
+ "\1\243Q\0\377\217\305b\0\377\3\237O\0\377\0\0\0\377I$\0\377\233\305b" \
+ "\0\377\7\232L\0\377_/\0\3776\32\0\377\"\21\0\377*\25\0\377N'\0\377\234" \
+ "M\0\377\207\305b\0\377\6\276^\0\377i4\0\3771\30\0\377$\22\0\377<\35\0" \
+ "\377\204B\0\377\207\305b\0\377\6\276^\0\377i4\0\3771\30\0\377$\22\0\377" \
+ "<\35\0\377\204B\0\377\204\305b\0\377\1\234M\0\377\211R)\0\377\1\303a" \
+ "\0\377\211\305b\0\377\7\232L\0\377_/\0\3776\32\0\377\"\21\0\377*\25\0" \
+ "\377N'\0\377\234M\0\377\214\305b\0\377\3k5\0\377\0\0\0\377\234N\0\377" \
+ "\216\305b\0\377\4\230K\0\377R)\0\377S)\0\377\276^\0\377\266\305b\0\377" \
+ "\3\304a\0\377\273]\0\377\277_\0\377\215\305b\0\377\10\230K\0\377O'\0" \
+ "\377+\25\0\377!\20\0\377*\25\0\377D\"\0\377m6\0\377\250S\0\377\263\305" \
+ "b\0\377\3\237O\0\377\0\0\0\377I$\0\377\226\305b\0\377\3\304a\0\377\273" \
+ "]\0\377\277_\0\377\213\305b\0\377\1\301`\0\377\205R)\0\377\3X,\0\377" \
+ "o7\0\377\245R\0\377\221\305b\0\377\3\257W\0\377\0\0\0\377=\36\0\377\203" \
+ "\305b\0\377\3\257W\0\377\0\0\0\377=\36\0\377\212\305b\0\377\2\16\7\0" \
+ "\377\27\13\0\377\237\305b\0\377\232\307c\0\377\12\212E\0\377\15\6\0\377" \
+ "\0\0\0\377\12\5\0\377)\24\0\377$\22\0\377\3\1\0\377\0\0\0\377\40\20\0" \
+ "\377\251T\0\377\251\307c\0\377\1\300_\0\377\203\0\0\0\377\1\211D\0\377" \
+ "\205\307c\0\377\2\270[\0\377\4\2\0\377\202\0\0\0\377\1\213E\0\377\217" \
+ "\307c\0\377\3\241P\0\377\0\0\0\377J$\0\377\232\307c\0\377\1t9\0\377\202" \
+ "\0\0\0\377\3\11\4\0\377\37\17\0\377\21\10\0\377\202\0\0\0\377\1h4\0\377" \
+ "\205\307c\0\377\10\274]\0\377$\22\0\377\0\0\0\377\26\13\0\3770\30\0\377" \
+ "\12\5\0\377\0\0\0\377U*\0\377\205\307c\0\377\10\274]\0\377$\22\0\377" \
+ "\0\0\0\377\26\13\0\3770\30\0\377\12\5\0\377\0\0\0\377U*\0\377\203\307" \
+ "c\0\377\1\177\77\0\377\210\0\0\0\377\2\21\10\0\377\306b\0\377\210\307" \
+ "c\0\377\1t9\0\377\202\0\0\0\377\3\11\4\0\377\37\17\0\377\21\10\0\377" \
+ "\202\0\0\0\377\1h4\0\377\213\307c\0\377\3l5\0\377\0\0\0\377\236N\0\377" \
+ "\216\307c\0\377\1<\35\0\377\202\0\0\0\377\1~>\0\377\266\307c\0\377\3" \
+ "\252U\0\377\0\0\0\377C!\0\377\214\307c\0\377\1\\-\0\377\202\0\0\0\377" \
+ "\6\32\15\0\377.\26\0\377#\21\0\377\4\2\0\377\0\0\0\377:\35\0\377\263" \
+ "\307c\0\377\3\241P\0\377\0\0\0\377J$\0\377\226\307c\0\377\3\252U\0\377" \
+ "\0\0\0\377C!\0\377\213\307c\0\377\1\300_\0\377\210\0\0\0\377\2S)\0\377" \
+ "\306b\0\377\217\307c\0\377\3\261X\0\377\0\0\0\377=\36\0\377\203\307c" \
+ "\0\377\3\261X\0\377\0\0\0\377=\36\0\377\212\307c\0\377\2\16\7\0\377\30" \
+ "\14\0\377\237\307c\0\377\231\310d\0\377\1\226K\0\377\202\3\1\0\377\2" \
+ "o7\0\377\302a\0\377\202\310d\0\377\5\271\\\0\377K%\0\377\0\0\0\377\24" \
+ "\12\0\377\270\\\0\377\250\310d\0\377\5\301`\0\377\0\0\0\377\17\7\0\377" \
+ "\7\3\0\377>\37\0\377\205\310d\0\377\5r9\0\377\0\0\0\377\27\13\0\377\0" \
+ "\0\0\377\214F\0\377\217\310d\0\377\3\242Q\0\377\0\0\0\377J%\0\377\232" \
+ "\310d\0\377\4s9\0\377F#\0\377\227K\0\377\305b\0\377\202\310d\0\377\4" \
+ "\207C\0\377\6\3\0\377\0\0\0\377\234N\0\377\204\310d\0\377\11O'\0\377" \
+ "\0\0\0\377P(\0\377\305b\0\377\310d\0\377\270\\\0\377$\22\0\377\0\0\0" \
+ "\377\213E\0\377\204\310d\0\377\11O'\0\377\0\0\0\377P(\0\377\305b\0\377" \
+ "\310d\0\377\270\\\0\377$\22\0\377\0\0\0\377\213E\0\377\202\310d\0\377" \
+ "\1\302a\0\377\206\270\\\0\377\3T*\0\377\0\0\0\377\\.\0\377\211\310d\0" \
+ "\377\4s9\0\377F#\0\377\227K\0\377\305b\0\377\202\310d\0\377\4\207C\0" \
+ "\377\6\3\0\377\0\0\0\377\234N\0\377\212\310d\0\377\3m6\0\377\0\0\0\377" \
+ "\237O\0\377\215\310d\0\377\5\265Z\0\377\3\1\0\377\34\16\0\377\1\0\0\377" \
+ "2\31\0\377\266\310d\0\377\3\253U\0\377\0\0\0\377D\"\0\377\213\310d\0" \
+ "\377\4\221H\0\377\0\0\0\377\24\12\0\377\236O\0\377\203\310d\0\377\3\300" \
+ "`\0\377\206C\0\377i4\0\377\263\310d\0\377\3\242Q\0\377\0\0\0\377J%\0" \
+ "\377\226\310d\0\377\3\253U\0\377\0\0\0\377D\"\0\377\213\310d\0\377\3" \
+ "\301`\0\377\0\0\0\377\13\5\0\377\203\276_\0\377\5\265Z\0\377\203A\0\377" \
+ "\17\7\0\377\0\0\0\377\177\77\0\377\217\310d\0\377\3\306c\0\377\270\\" \
+ "\0\377\275^\0\377\203\310d\0\377\3\262Y\0\377\0\0\0\377=\36\0\377\212" \
+ "\310d\0\377\2\16\7\0\377\30\14\0\377\237\310d\0\377\230\312e\0\377\4" \
+ "\306c\0\377\30\14\0\377\0\0\0\377y<\0\377\206\312e\0\377\3F#\0\377\0" \
+ "\0\0\377G#\0\377\207\312e\0\377\4\310d\0\377\257W\0\377\252U\0\377\306" \
+ "c\0\377\210\312e\0\377\3\263Y\0\377\245R\0\377\267[\0\377\212\312e\0" \
+ "\377\4\311d\0\377\255V\0\377\247S\0\377\303a\0\377\204\312e\0\377\6\303" \
+ "a\0\377\0\0\0\377\30\14\0\377H$\0\377\3\1\0\377\272]\0\377\204\312e\0" \
+ "\377\5'\23\0\377\27\13\0\377J%\0\377\0\0\0\377\215F\0\377\206\312e\0" \
+ "\377\4\306c\0\377\254V\0\377\247S\0\377\301`\0\377\205\312e\0\377\3\243" \
+ "Q\0\377\0\0\0\377K%\0\377\213\312e\0\377\4\306c\0\377\254V\0\377\247" \
+ "S\0\377\301`\0\377\213\312e\0\377\1\307c\0\377\206\312e\0\377\3^/\0\377" \
+ "\0\0\0\377\\.\0\377\203\312e\0\377\4\272]\0\377\3\1\0\377\17\7\0\377" \
+ "\303a\0\377\203\312e\0\377\3\231L\0\377\0\0\0\3770\30\0\377\203\312e" \
+ "\0\377\4\272]\0\377\3\1\0\377\17\7\0\377\303a\0\377\203\312e\0\377\3" \
+ "\231L\0\377\0\0\0\3770\30\0\377\210\312e\0\377\4\307c\0\377\24\12\0\377" \
+ "\0\0\0\377\253U\0\377\211\312e\0\377\1\307c\0\377\206\312e\0\377\3^/" \
+ "\0\377\0\0\0\377\\.\0\377\212\312e\0\377\3n7\0\377\0\0\0\377\240P\0\377" \
+ "\215\312e\0\377\6m6\0\377\0\0\0\377u:\0\3774\32\0\377\0\0\0\377\257W" \
+ "\0\377\224\312e\0\377\3\275^\0\377\247S\0\377\267[\0\377\225\312e\0\377" \
+ "\5\307c\0\377\255V\0\377\243Q\0\377\257W\0\377\306c\0\377\204\312e\0" \
+ "\377\3\255V\0\377\0\0\0\377D\"\0\377\213\312e\0\377\3Q(\0\377\0\0\0\377" \
+ "v;\0\377\216\312e\0\377\4\311d\0\377\255V\0\377\247S\0\377\303a\0\377" \
+ "\207\312e\0\377\4\265Z\0\377\244R\0\377\255V\0\377\307c\0\377\211\312" \
+ "e\0\377\4\310d\0\377\257W\0\377\252U\0\377\306c\0\377\207\312e\0\377" \
+ "\5\307c\0\377\255V\0\377\243Q\0\377\257W\0\377\306c\0\377\204\312e\0" \
+ "\377\10\243Q\0\377\0\0\0\377K%\0\377\312e\0\377\311d\0\377\255V\0\377" \
+ "\247S\0\377\303a\0\377\207\312e\0\377\4\306c\0\377\254V\0\377\247S\0" \
+ "\377\301`\0\377\206\312e\0\377\3\255V\0\377\0\0\0\377D\"\0\377\213\312" \
+ "e\0\377\3\303a\0\377\0\0\0\377\13\5\0\377\205\312e\0\377\3v;\0\377\0" \
+ "\0\0\377G#\0\377\225\312e\0\377\3\263Y\0\377\0\0\0\377>\37\0\377\205" \
+ "\312e\0\377\3\276_\0\377\247S\0\377\267[\0\377\202\312e\0\377\2\17\7" \
+ "\0\377\30\14\0\377\237\312e\0\377\230\314f\0\377\3\205B\0\377\0\0\0\377" \
+ "&\23\0\377\207\314f\0\377\4\271\\\0\377\4\2\0\377\2\1\0\377\266[\0\377" \
+ "\202\314f\0\377\5\250T\0\377\14\6\0\377T*\0\377\212E\0\377\30\14\0\377" \
+ "\202\0\0\0\377\2\16\7\0\377x<\0\377\205\314f\0\377\2~\77\0\377\32\15" \
+ "\0\377\203\0\0\0\377\2+\25\0\377\241P\0\377\204\314f\0\377\5\250T\0\377" \
+ "\14\6\0\377T*\0\377\230L\0\377\34\16\0\377\202\0\0\0\377\2\10\4\0\377" \
+ "k5\0\377\203\314f\0\377\6\305b\0\377\0\0\0\377\30\14\0\377\226K\0\377" \
+ "\0\0\0\377s9\0\377\203\314f\0\377\6\250T\0\377\0\0\0\377c1\0\377L&\0" \
+ "\377\0\0\0\377\217G\0\377\204\314f\0\377\3\310d\0\377a0\0\377\14\6\0" \
+ "\377\202\0\0\0\377\3\4\2\0\377G#\0\377\272]\0\377\203\314f\0\377\3\245" \
+ "R\0\377\0\0\0\377L&\0\377\204\314f\0\377\10d2\0\377\14\6\0\377D\"\0\377" \
+ "\304b\0\377\314f\0\377\310d\0\377a0\0\377\14\6\0\377\202\0\0\0\377\3" \
+ "\4\2\0\377G#\0\377\272]\0\377\220\314f\0\377\3\200@\0\377\0\0\0\377O" \
+ "'\0\377\203\314f\0\377\3\204B\0\377\0\0\0\377L&\0\377\205\314f\0\377" \
+ "\3\22\11\0\377\1\0\0\377\277_\0\377\202\314f\0\377\3\204B\0\377\0\0\0" \
+ "\377L&\0\377\205\314f\0\377\3\22\11\0\377\1\0\0\377\277_\0\377\207\314" \
+ "f\0\377\3\220H\0\377\0\0\0\377/\27\0\377\221\314f\0\377\3\200@\0\377" \
+ "\0\0\0\377O'\0\377\212\314f\0\377\3o7\0\377\0\0\0\377\242Q\0\377\215" \
+ "\314f\0\377\6\40\20\0\377\4\2\0\377\275^\0\377\200@\0\377\0\0\0\377d" \
+ "2\0\377\204\314f\0\377\3\223I\0\377\14\6\0\377l6\0\377\205\314f\0\377" \
+ "\2\30\14\0\377'\23\0\377\204\314f\0\377\3\300`\0\377G#\0\377\2\1\0\377" \
+ "\202\0\0\0\377\4""0\30\0\377\255V\0\377\33\15\0\377$\22\0\377\203\314" \
+ "f\0\377\3\223I\0\377\14\6\0\377l6\0\377\205\314f\0\377\2\30\14\0\377" \
+ "'\23\0\377\202\314f\0\377\3\313e\0\377f3\0\377\14\6\0\377\203\0\0\0\377" \
+ "\2\6\3\0\377H$\0\377\202\314f\0\377\4r9\0\377\12\5\0\377\0\0\0\377\4" \
+ "\2\0\377\203\14\6\0\377\1\207C\0\377\207\314f\0\377\3D\"\0\377\0\0\0" \
+ "\377\206C\0\377\212\314f\0\377\5\250T\0\377\14\6\0\377T*\0\377\230L\0" \
+ "\377\34\16\0\377\202\0\0\0\377\2\10\4\0\377k5\0\377\204\314f\0\377\2" \
+ "O'\0\377\22\11\0\377\203\0\0\0\377\3\13\5\0\377`0\0\377\310d\0\377\203" \
+ "\314f\0\377\5\250T\0\377\14\6\0\377T*\0\377\212E\0\377\30\14\0\377\202" \
+ "\0\0\0\377\2\16\7\0\377x<\0\377\204\314f\0\377\3\313e\0\377f3\0\377\14" \
+ "\6\0\377\203\0\0\0\377\2\6\3\0\377H$\0\377\203\314f\0\377\5\245R\0\377" \
+ "\0\0\0\377L&\0\377\230L\0\377\34\16\0\377\202\0\0\0\377\2\10\4\0\377" \
+ "k5\0\377\204\314f\0\377\3\310d\0\377a0\0\377\14\6\0\377\202\0\0\0\377" \
+ "\3\4\2\0\377G#\0\377\272]\0\377\203\314f\0\377\4r9\0\377\12\5\0\377\0" \
+ "\0\0\377\4\2\0\377\203\14\6\0\377\1\207C\0\377\207\314f\0\377\3\305b" \
+ "\0\377\0\0\0\377\14\6\0\377\205\314f\0\377\3\213E\0\377\0\0\0\377D\"" \
+ "\0\377\202\314f\0\377\3\223I\0\377\14\6\0\377l6\0\377\205\314f\0\377" \
+ "\2\30\14\0\377'\23\0\377\203\314f\0\377\3\267[\0\377\14\6\0\377H$\0\377" \
+ "\203\314f\0\377\3\265Z\0\377\0\0\0\377\77\37\0\377\203\314f\0\377\3\304" \
+ "b\0\377N'\0\377\4\2\0\377\202\0\0\0\377\4""1\30\0\377\257W\0\377\17\7" \
+ "\0\377\30\14\0\377\237\314f\0\377\230\316g\0\377\3L&\0\377\0\0\0\377" \
+ "m6\0\377\210\316g\0\377\3""8\34\0\377\0\0\0\377\202A\0\377\202\316g\0" \
+ "\377\12\247S\0\377\0\0\0\377!\20\0\377\4\2\0\377W+\0\377\212E\0\377t" \
+ ":\0\377\25\12\0\377\0\0\0\377z=\0\377\203\316g\0\377\11c1\0\377\0\0\0" \
+ "\377\37\17\0\377p8\0\377\206C\0\377d2\0\377\13\5\0\377\10\4\0\377\250" \
+ "T\0\377\203\316g\0\377\12\247S\0\377\0\0\0\377&\23\0\377\11\4\0\377P" \
+ "(\0\377~\77\0\377k5\0\377\20\10\0\377\0\0\0\377\207C\0\377\202\316g\0" \
+ "\377\6\307c\0\377\0\0\0\377\31\14\0\377\315f\0\377\31\14\0\377&\23\0" \
+ "\377\203\316g\0\377\6[-\0\377\0\0\0\377\261X\0\377L&\0\377\0\0\0\377" \
+ "\220H\0\377\204\316g\0\377\11E\"\0\377\0\0\0\377&\23\0\377x<\0\377\200" \
+ "@\0\377=\36\0\377\0\0\0\377\37\17\0\377\303a\0\377\202\316g\0\377\3\247" \
+ "S\0\377\0\0\0\377L&\0\377\202\316g\0\377\5\311d\0\377L&\0\377\0\0\0\377" \
+ "L&\0\377\311d\0\377\202\316g\0\377\11E\"\0\377\0\0\0\377&\23\0\377x<" \
+ "\0\377\200@\0\377=\36\0\377\0\0\0\377\37\17\0\377\303a\0\377\217\316" \
+ "g\0\377\3X,\0\377\0\0\0\377p8\0\377\203\316g\0\377\3`0\0\377\0\0\0\377" \
+ "s9\0\377\205\316g\0\377\3""8\34\0\377\0\0\0\377\237O\0\377\202\316g\0" \
+ "\377\3`0\0\377\0\0\0\377s9\0\377\205\316g\0\377\3""8\34\0\377\0\0\0\377" \
+ "\237O\0\377\207\316g\0\377\3A\40\0\377\0\0\0\377\177\77\0\377\221\316" \
+ "g\0\377\3X,\0\377\0\0\0\377p8\0\377\212\316g\0\377\3p8\0\377\0\0\0\377" \
+ "\243Q\0\377\214\316g\0\377\10\240P\0\377\0\0\0\377A\40\0\377\316g\0\377" \
+ "\304b\0\377\10\4\0\377\30\14\0\377\314f\0\377\203\316g\0\377\3\220H\0" \
+ "\377\0\0\0\377f3\0\377\205\316g\0\377\2\14\6\0\377\34\16\0\377\203\316" \
+ "g\0\377\12\314f\0\3772\31\0\377\0\0\0\3776\33\0\377\202A\0\377\204B\0" \
+ "\377:\35\0\377\31\14\0\377\12\5\0\377\31\14\0\377\203\316g\0\377\3\220" \
+ "H\0\377\0\0\0\377f3\0\377\205\316g\0\377\2\14\6\0\377\34\16\0\377\202" \
+ "\316g\0\377\10p8\0\377\0\0\0\377,\26\0\377{=\0\377\216G\0\377\201@\0" \
+ "\377X,\0\3771\30\0\377\202\316g\0\377\4\242Q\0\377`0\0\377\0\0\0\377" \
+ "&\23\0\377\203p8\0\377\1\254V\0\377\207\316g\0\377\4c1\0\377\0\0\0\377" \
+ "1\30\0\377\277_\0\377\211\316g\0\377\12\247S\0\377\0\0\0\377&\23\0\377" \
+ "\11\4\0\377P(\0\377~\77\0\377k5\0\377\20\10\0\377\0\0\0\377\207C\0\377" \
+ "\203\316g\0\377\10\14\6\0\377N'\0\377y<\0\377\206C\0\377u:\0\377*\25" \
+ "\0\377\0\0\0\377S)\0\377\203\316g\0\377\12\247S\0\377\0\0\0\377!\20\0" \
+ "\377\4\2\0\377W+\0\377\212E\0\377t:\0\377\25\12\0\377\0\0\0\377z=\0\377" \
+ "\203\316g\0\377\10p8\0\377\0\0\0\377,\26\0\377{=\0\377\216G\0\377\201" \
+ "@\0\377X,\0\3771\30\0\377\203\316g\0\377\12\247S\0\377\0\0\0\377&\23" \
+ "\0\377\11\4\0\377P(\0\377~\77\0\377k5\0\377\20\10\0\377\0\0\0\377\207" \
+ "C\0\377\203\316g\0\377\11E\"\0\377\0\0\0\377&\23\0\377x<\0\377\200@\0" \
+ "\377=\36\0\377\0\0\0\377\37\17\0\377\303a\0\377\202\316g\0\377\4\242" \
+ "Q\0\377`0\0\377\0\0\0\377&\23\0\377\203p8\0\377\1\254V\0\377\207\316" \
+ "g\0\377\3\307c\0\377\0\0\0\377\14\6\0\377\204\316g\0\377\4\314f\0\377" \
+ "C!\0\377\0\0\0\377v;\0\377\202\316g\0\377\3\220H\0\377\0\0\0\377f3\0" \
+ "\377\205\316g\0\377\2\14\6\0\377\34\16\0\377\203\316g\0\377\3\267[\0" \
+ "\377\0\0\0\377\77\37\0\377\203\316g\0\377\3\267[\0\377\0\0\0\377\77\37" \
+ "\0\377\203\316g\0\377\11=\36\0\377\0\0\0\3772\31\0\377\202A\0\377\203" \
+ "A\0\3775\32\0\377\31\14\0\377\12\5\0\377\31\14\0\377\237\316g\0\377\230" \
+ "\320h\0\377\3+\25\0\377\0\0\0\377\224J\0\377\210\320h\0\377\3_/\0\377" \
+ "\0\0\0\377`0\0\377\202\320h\0\377\1\250T\0\377\202\0\0\0\377\1v;\0\377" \
+ "\203\320h\0\377\1\265Z\0\377\202\12\5\0\377\6\305b\0\377\320h\0\377\246" \
+ "S\0\377\0\0\0\377,\26\0\377\310d\0\377\203\320h\0\377\3\245R\0\377\2" \
+ "\1\0\3776\33\0\377\203\320h\0\377\1\250T\0\377\202\0\0\0\377\1\213E\0" \
+ "\377\203\320h\0\377\3\240P\0\377\0\0\0\3775\32\0\377\202\320h\0\377\17" \
+ "\311d\0\377\0\0\0\377\31\14\0\377\320h\0\377e2\0\377\0\0\0\377\252U\0" \
+ "\377\320h\0\377\314f\0\377\21\10\0\3770\30\0\377\320h\0\377M&\0\377\0" \
+ "\0\0\377\222I\0\377\203\320h\0\377\4\225J\0\377\0\0\0\377(\24\0\377\311" \
+ "d\0\377\203\320h\0\377\3M&\0\377\0\0\0\377b1\0\377\202\320h\0\377\10" \
+ "\250T\0\377\0\0\0\377M&\0\377\320h\0\377\304b\0\3777\33\0\377\0\0\0\377" \
+ "e2\0\377\203\320h\0\377\4\225J\0\377\0\0\0\377(\24\0\377\311d\0\377\203" \
+ "\320h\0\377\3M&\0\377\0\0\0\377b1\0\377\216\320h\0\377\1\262Y\0\377\202" \
+ "\10\4\0\377\1\273]\0\377\203\320h\0\377\3K%\0\377\0\0\0\377\211D\0\377" \
+ "\205\320h\0\377\3M&\0\377\0\0\0\377\212E\0\377\202\320h\0\377\3K%\0\377" \
+ "\0\0\0\377\211D\0\377\205\320h\0\377\3M&\0\377\0\0\0\377\212E\0\377\206" \
+ "\320h\0\377\4\276_\0\377\4\2\0\377\12\5\0\377\307c\0\377\220\320h\0\377" \
+ "\1\262Y\0\377\202\10\4\0\377\1\273]\0\377\212\320h\0\377\3q8\0\377\0" \
+ "\0\0\377\245R\0\377\214\320h\0\377\3R)\0\377\0\0\0\377\217G\0\377\202" \
+ "\320h\0\377\3K%\0\377\0\0\0\377\227K\0\377\203\320h\0\377\3\222I\0\377" \
+ "\0\0\0\377g3\0\377\205\320h\0\377\2\14\6\0\377\34\16\0\377\203\320h\0" \
+ "\377\4\211D\0\377\0\0\0\377<\36\0\377\317g\0\377\202\320h\0\377\4\317" \
+ "g\0\377B!\0\377\0\0\0\377\31\14\0\377\203\320h\0\377\3\222I\0\377\0\0" \
+ "\0\377g3\0\377\205\320h\0\377\2\14\6\0\377\34\16\0\377\202\320h\0\377" \
+ "\3,\26\0\377\7\3\0\377\307c\0\377\204\320h\0\377\1\317g\0\377\203\320" \
+ "h\0\377\3\262Y\0\377\0\0\0\377F#\0\377\213\320h\0\377\10\271\\\0\377" \
+ "\20\10\0\377\0\0\0\377\7\3\0\377<\36\0\377i4\0\377\224J\0\377\306c\0" \
+ "\377\205\320h\0\377\1\250T\0\377\202\0\0\0\377\1\213E\0\377\203\320h" \
+ "\0\377\3\240P\0\377\0\0\0\3775\32\0\377\203\320h\0\377\1\305b\0\377\204" \
+ "\320h\0\377\4\314f\0\3771\30\0\377\2\1\0\377\272]\0\377\202\320h\0\377" \
+ "\1\250T\0\377\202\0\0\0\377\1v;\0\377\203\320h\0\377\1\265Z\0\377\202" \
+ "\12\5\0\377\1\305b\0\377\202\320h\0\377\3,\26\0\377\7\3\0\377\307c\0" \
+ "\377\204\320h\0\377\1\317g\0\377\203\320h\0\377\1\250T\0\377\202\0\0" \
+ "\0\377\1\213E\0\377\203\320h\0\377\3\240P\0\377\0\0\0\3775\32\0\377\202" \
+ "\320h\0\377\4\225J\0\377\0\0\0\377(\24\0\377\311d\0\377\203\320h\0\377" \
+ "\3M&\0\377\0\0\0\377b1\0\377\203\320h\0\377\3\262Y\0\377\0\0\0\377F#" \
+ "\0\377\213\320h\0\377\3\311d\0\377\0\0\0\377\4\2\0\377\203Z-\0\377\5" \
+ "Q(\0\377\37\17\0\377\0\0\0\377K%\0\377\313e\0\377\202\320h\0\377\3\222" \
+ "I\0\377\0\0\0\377g3\0\377\205\320h\0\377\2\14\6\0\377\34\16\0\377\203" \
+ "\320h\0\377\3\271\\\0\377\0\0\0\377@\40\0\377\203\320h\0\377\3\271\\" \
+ "\0\377\0\0\0\377@\40\0\377\202\320h\0\377\4\222I\0\377\0\0\0\3774\32" \
+ "\0\377\315f\0\377\202\320h\0\377\4\315f\0\3777\33\0\377\0\0\0\377\31" \
+ "\14\0\377\237\320h\0\377\230\321h\0\377\3\35\16\0\377\0\0\0\377\243Q" \
+ "\0\377\210\321h\0\377\3m6\0\377\0\0\0\377R)\0\377\202\321h\0\377\4\251" \
+ "T\0\377\0\0\0\377\21\10\0\377\316f\0\377\204\321h\0\377\7Y,\0\377\0\0" \
+ "\0\377\210C\0\377\321h\0\377U*\0\377\0\0\0\377\231L\0\377\205\321h\0" \
+ "\377\3;\35\0\377\1\0\0\377\304a\0\377\202\321h\0\377\3\251T\0\377\0\0" \
+ "\0\377%\22\0\377\205\321h\0\377\2\24\12\0\377\17\7\0\377\202\321h\0\377" \
+ "\17\312d\0\377\0\0\0\377\31\14\0\377\321h\0\377\264Y\0\377\0\0\0\377" \
+ "[-\0\377\321h\0\377\221H\0\377\0\0\0\377\177\77\0\377\321h\0\377M&\0" \
+ "\377\0\0\0\377\222I\0\377\203\321h\0\377\3K%\0\377\0\0\0\377\217G\0\377" \
+ "\204\321h\0\377\3\273]\0\377\1\0\0\377\30\14\0\377\202\321h\0\377\7\251" \
+ "T\0\377\0\0\0\377M&\0\377\273]\0\377&\23\0\377\2\1\0\377~>\0\377\204" \
+ "\321h\0\377\3K%\0\377\0\0\0\377\217G\0\377\204\321h\0\377\3\273]\0\377" \
+ "\1\0\0\377\30\14\0\377\215\321h\0\377\4\305b\0\377$\22\0\377\0\0\0\377" \
+ "}>\0\377\204\321h\0\377\3D!\0\377\0\0\0\377\221H\0\377\205\321h\0\377" \
+ "\3V*\0\377\0\0\0\377\202@\0\377\202\321h\0\377\3D!\0\377\0\0\0\377\221" \
+ "H\0\377\205\321h\0\377\3V*\0\377\0\0\0\377\202@\0\377\206\321h\0\377" \
+ "\3q8\0\377\0\0\0\377Q(\0\377\220\321h\0\377\4\305b\0\377$\22\0\377\0" \
+ "\0\0\377}>\0\377\213\321h\0\377\3q8\0\377\0\0\0\377\246R\0\377\213\321" \
+ "h\0\377\4\310c\0\377\13\5\0\377\20\10\0\377\314e\0\377\202\321h\0\377" \
+ "\3\231L\0\377\0\0\0\377H#\0\377\203\321h\0\377\3\222I\0\377\0\0\0\377" \
+ "h3\0\377\205\321h\0\377\2\14\6\0\377\34\16\0\377\203\321h\0\377\3D\"" \
+ "\0\377\0\0\0\377\241P\0\377\204\321h\0\377\3\250S\0\377\0\0\0\377\31" \
+ "\14\0\377\203\321h\0\377\3\222I\0\377\0\0\0\377h3\0\377\205\321h\0\377" \
+ "\2\14\6\0\377\34\16\0\377\202\321h\0\377\3*\25\0\377\3\1\0\377\270[\0" \
+ "\377\210\321h\0\377\3\263Y\0\377\0\0\0\377G#\0\377\214\321h\0\377\3\265" \
+ "Z\0\377D!\0\377\4\2\0\377\203\0\0\0\377\3\7\3\0\377V*\0\377\306b\0\377" \
+ "\203\321h\0\377\3\251T\0\377\0\0\0\377%\22\0\377\205\321h\0\377\2\24" \
+ "\12\0\377\17\7\0\377\211\321h\0\377\3{=\0\377\0\0\0\377\214E\0\377\202" \
+ "\321h\0\377\4\251T\0\377\0\0\0\377\21\10\0\377\316f\0\377\204\321h\0" \
+ "\377\3Y,\0\377\0\0\0\377\210C\0\377\202\321h\0\377\3*\25\0\377\3\1\0" \
+ "\377\270[\0\377\210\321h\0\377\3\251T\0\377\0\0\0\377%\22\0\377\205\321" \
+ "h\0\377\2\24\12\0\377\17\7\0\377\202\321h\0\377\3K%\0\377\0\0\0\377\217" \
+ "G\0\377\204\321h\0\377\3\273]\0\377\1\0\0\377\30\14\0\377\203\321h\0" \
+ "\377\3\263Y\0\377\0\0\0\377G#\0\377\213\321h\0\377\1\312d\0\377\207\0" \
+ "\0\0\377\2\37\17\0\377\205B\0\377\203\321h\0\377\3\222I\0\377\0\0\0\377" \
+ "h3\0\377\205\321h\0\377\2\14\6\0\377\34\16\0\377\203\321h\0\377\3\272" \
+ "\\\0\377\0\0\0\377@\40\0\377\203\321h\0\377\3\272\\\0\377\0\0\0\377@" \
+ "\40\0\377\202\321h\0\377\3K%\0\377\0\0\0\377\232M\0\377\204\321h\0\377" \
+ "\3\237O\0\377\0\0\0\377\31\14\0\377\237\321h\0\377\230\323i\0\377\3$" \
+ "\22\0\377\0\0\0\377\236O\0\377\210\323i\0\377\3h3\0\377\0\0\0\377[-\0" \
+ "\377\202\323i\0\377\3\253U\0\377\0\0\0\377>\36\0\377\205\323i\0\377\10" \
+ "\212D\0\377\0\0\0\377b1\0\377\323i\0\377*\25\0\377\0\0\0\377n6\0\377" \
+ "v:\0\377\202u:\0\377\5t:\0\377s9\0\377/\27\0\377\0\0\0\377\252T\0\377" \
+ "\202\323i\0\377\3\253U\0\377\0\0\0\377J%\0\377\205\323i\0\377\2&\22\0" \
+ "\377\4\2\0\377\202\323i\0\377\3\314e\0\377\0\0\0\377\31\14\0\377\202" \
+ "\323i\0\377\12""3\31\0\377\22\11\0\377\317g\0\377B\40\0\377\10\4\0\377" \
+ "\310c\0\377\323i\0\377N'\0\377\0\0\0\377\224I\0\377\203\323i\0\377\3" \
+ "&\22\0\377\0\0\0\377\302`\0\377\205\323i\0\377\12\36\17\0\377\0\0\0\377" \
+ "\305b\0\377\323i\0\377\253U\0\377\0\0\0\3770\30\0\377\27\13\0\377\11" \
+ "\4\0\377\225J\0\377\205\323i\0\377\3&\22\0\377\0\0\0\377\302`\0\377\205" \
+ "\323i\0\377\3\36\17\0\377\0\0\0\377\305b\0\377\213\323i\0\377\4\313e" \
+ "\0\3774\31\0\377\0\0\0\377_/\0\377\205\323i\0\377\3H$\0\377\0\0\0\377" \
+ "\217G\0\377\205\323i\0\377\3R)\0\377\0\0\0\377\210C\0\377\202\323i\0" \
+ "\377\3H$\0\377\0\0\0\377\217G\0\377\205\323i\0\377\3R)\0\377\0\0\0\377" \
+ "\210C\0\377\206\323i\0\377\3!\20\0\377\0\0\0\377\243Q\0\377\217\323i" \
+ "\0\377\4\313e\0\3774\31\0\377\0\0\0\377_/\0\377\214\323i\0\377\3s9\0" \
+ "\377\0\0\0\377\247S\0\377\213\323i\0\377\3\206B\0\377\0\0\0\377Z,\0\377" \
+ "\203\323i\0\377\4\321h\0\377\27\13\0\377\6\3\0\377\305b\0\377\202\323" \
+ "i\0\377\3\224I\0\377\0\0\0\377i4\0\377\205\323i\0\377\2\14\6\0\377\34" \
+ "\16\0\377\203\323i\0\377\3\"\21\0\377\0\0\0\377\316f\0\377\204\323i\0" \
+ "\377\3\321h\0\377\4\2\0\377\31\14\0\377\203\323i\0\377\3\224I\0\377\0" \
+ "\0\0\377i4\0\377\205\323i\0\377\2\14\6\0\377\34\16\0\377\202\323i\0\377" \
+ "\6o7\0\377\0\0\0\377\15\6\0\377S)\0\377\211D\0\377\273]\0\377\205\323" \
+ "i\0\377\3\265Z\0\377\0\0\0\377G#\0\377\216\323i\0\377\4\306b\0\377\225" \
+ "J\0\377j5\0\3774\31\0\377\202\0\0\0\377\2-\26\0\377\317g\0\377\202\323" \
+ "i\0\377\3\253U\0\377\0\0\0\377J%\0\377\205\323i\0\377\2&\22\0\377\4\2" \
+ "\0\377\203\323i\0\377\4\303a\0\377h3\0\3771\30\0\377\32\15\0\377\202" \
+ "\23\11\0\377\3\14\6\0\377\0\0\0\377z<\0\377\202\323i\0\377\3\253U\0\377" \
+ "\0\0\0\377>\36\0\377\205\323i\0\377\3\212D\0\377\0\0\0\377b1\0\377\202" \
+ "\323i\0\377\6o7\0\377\0\0\0\377\15\6\0\377S)\0\377\211D\0\377\273]\0" \
+ "\377\205\323i\0\377\3\253U\0\377\0\0\0\377J%\0\377\205\323i\0\377\2&" \
+ "\22\0\377\4\2\0\377\202\323i\0\377\3&\22\0\377\0\0\0\377\302`\0\377\205" \
+ "\323i\0\377\3\36\17\0\377\0\0\0\377\305b\0\377\202\323i\0\377\3\265Z" \
+ "\0\377\0\0\0\377G#\0\377\213\323i\0\377\3\314e\0\377\0\0\0\377\14\6\0" \
+ "\377\203\314e\0\377\5\307c\0\377\243Q\0\3774\32\0\377\0\0\0\377i4\0\377" \
+ "\202\323i\0\377\3\224I\0\377\0\0\0\377i4\0\377\205\323i\0\377\2\14\6" \
+ "\0\377\34\16\0\377\203\323i\0\377\3\273]\0\377\0\0\0\377A\40\0\377\203" \
+ "\323i\0\377\3\273]\0\377\0\0\0\377A\40\0\377\202\323i\0\377\3%\22\0\377" \
+ "\0\0\0\377\313e\0\377\204\323i\0\377\3\316f\0\377\2\1\0\377\31\14\0\377" \
+ "\237\323i\0\377\230\325j\0\377\3;\35\0\377\0\0\0\377\204B\0\377\210\325" \
+ "j\0\377\3N'\0\377\0\0\0\377r8\0\377\202\325j\0\377\3\254V\0\377\0\0\0" \
+ "\377L&\0\377\205\325j\0\377\6\231L\0\377\0\0\0\377V+\0\377\325j\0\377" \
+ "\32\15\0\377\0\0\0\377\210\11\4\0\377\1\245R\0\377\202\325j\0\377\3\254" \
+ "V\0\377\0\0\0\377O'\0\377\205\325j\0\377\2'\23\0\377\2\1\0\377\202\325" \
+ "j\0\377\3\316f\0\377\0\0\0\377\31\14\0\377\202\325j\0\377\5\203A\0\377" \
+ "\0\0\0\377\202@\0\377\4\2\0\377L&\0\377\202\325j\0\377\3O'\0\377\0\0" \
+ "\0\377\225J\0\377\203\325j\0\377\3\31\14\0\377\0\0\0\377\322h\0\377\205" \
+ "\325j\0\377\12-\26\0\377\0\0\0\377\273]\0\377\325j\0\377\254V\0\377\0" \
+ "\0\0\377\14\6\0\377\0\0\0\377*\25\0\377\311d\0\377\205\325j\0\377\3\31" \
+ "\14\0\377\0\0\0\377\322h\0\377\205\325j\0\377\3-\26\0\377\0\0\0\377\273" \
+ "]\0\377\212\325j\0\377\4\316f\0\3779\34\0\377\0\0\0\377W+\0\377\206\325" \
+ "j\0\377\3V+\0\377\0\0\0\377\202@\0\377\205\325j\0\377\3E\"\0\377\0\0" \
+ "\0\377\230K\0\377\202\325j\0\377\3V+\0\377\0\0\0\377\202@\0\377\205\325" \
+ "j\0\377\3E\"\0\377\0\0\0\377\230K\0\377\205\325j\0\377\3\245R\0\377\0" \
+ "\0\0\377\"\21\0\377\217\325j\0\377\4\316f\0\3779\34\0\377\0\0\0\377W" \
+ "+\0\377\215\325j\0\377\3t9\0\377\0\0\0\377\251T\0\377\213\325j\0\377" \
+ "\3""5\32\0\377\0\0\0\377`0\0\377\204\204B\0\377\3""5\32\0\377\0\0\0\377" \
+ "|=\0\377\202\325j\0\377\3\225J\0\377\0\0\0\377j4\0\377\205\325j\0\377" \
+ "\2\14\6\0\377\35\16\0\377\203\325j\0\377\2\31\14\0\377\6\3\0\377\206" \
+ "\325j\0\377\2\15\6\0\377\31\14\0\377\203\325j\0\377\3\225J\0\377\0\0" \
+ "\0\377j4\0\377\205\325j\0\377\2\14\6\0\377\35\16\0\377\202\325j\0\377" \
+ "\3\323i\0\377u:\0\377\32\15\0\377\203\0\0\0\377\2""2\30\0\377\251T\0" \
+ "\377\203\325j\0\377\3\266[\0\377\0\0\0\377H$\0\377\222\325j\0\377\4\246" \
+ "R\0\377\13\5\0\377\0\0\0\377\216G\0\377\202\325j\0\377\3\254V\0\377\0" \
+ "\0\0\377O'\0\377\205\325j\0\377\2'\23\0\377\2\1\0\377\202\325j\0\377" \
+ "\12\275^\0\377\26\13\0\377\0\0\0\3773\31\0\377[-\0\377g3\0\377j4\0\377" \
+ "C!\0\377\0\0\0\377w;\0\377\202\325j\0\377\3\254V\0\377\0\0\0\377L&\0" \
+ "\377\205\325j\0\377\3\231L\0\377\0\0\0\377V+\0\377\202\325j\0\377\3\323" \
+ "i\0\377u:\0\377\32\15\0\377\203\0\0\0\377\2""2\30\0\377\251T\0\377\203" \
+ "\325j\0\377\3\254V\0\377\0\0\0\377O'\0\377\205\325j\0\377\2'\23\0\377" \
+ "\2\1\0\377\202\325j\0\377\3\31\14\0\377\0\0\0\377\322h\0\377\205\325" \
+ "j\0\377\3-\26\0\377\0\0\0\377\273]\0\377\202\325j\0\377\3\266[\0\377" \
+ "\0\0\0\377H$\0\377\213\325j\0\377\3\316f\0\377\0\0\0\377\14\6\0\377\205" \
+ "\325j\0\377\10\311d\0\377\11\4\0\377\4\2\0\377\303a\0\377\325j\0\377" \
+ "\225J\0\377\0\0\0\377j4\0\377\205\325j\0\377\2\14\6\0\377\35\16\0\377" \
+ "\203\325j\0\377\3\275^\0\377\0\0\0\377A\40\0\377\203\325j\0\377\3\275" \
+ "^\0\377\0\0\0\377A\40\0\377\202\325j\0\377\2\31\14\0\377\6\3\0\377\206" \
+ "\325j\0\377\2\14\6\0\377\31\14\0\377\237\325j\0\377\230\327k\0\377\3" \
+ "m6\0\377\0\0\0\377M&\0\377\207\327k\0\377\4\325j\0\377\30\14\0\377\0" \
+ "\0\0\377\244Q\0\377\202\327k\0\377\3\256V\0\377\0\0\0\377A\40\0\377\205" \
+ "\327k\0\377\7\216F\0\377\0\0\0\377a0\0\377\327k\0\377%\22\0\377\0\0\0" \
+ "\377\314e\0\377\212\327k\0\377\3\256V\0\377\0\0\0\377P'\0\377\205\327" \
+ "k\0\377\2'\23\0\377\2\1\0\377\202\327k\0\377\3\320g\0\377\0\0\0\377\32" \
+ "\15\0\377\202\327k\0\377\1\314e\0\377\202\11\4\0\377\2\0\0\0\377\236" \
+ "N\0\377\202\327k\0\377\3P'\0\377\0\0\0\377\226K\0\377\203\327k\0\377" \
+ "\3%\22\0\377\0\0\0\377\310c\0\377\205\327k\0\377\13!\20\0\377\0\0\0\377" \
+ "\307c\0\377\327k\0\377\256V\0\377\0\0\0\377P'\0\377k5\0\377\0\0\0\377" \
+ ",\26\0\377\310c\0\377\204\327k\0\377\3%\22\0\377\0\0\0\377\310c\0\377" \
+ "\205\327k\0\377\3!\20\0\377\0\0\0\377\307c\0\377\211\327k\0\377\5\321" \
+ "h\0\377<\36\0\377\0\0\0\377S)\0\377\326j\0\377\206\327k\0\377\3x<\0\377" \
+ "\0\0\0\377e2\0\377\205\327k\0\377\3'\23\0\377\0\0\0\377\271\\\0\377\202" \
+ "\327k\0\377\3x<\0\377\0\0\0\377e2\0\377\205\327k\0\377\3'\23\0\377\0" \
+ "\0\0\377\271\\\0\377\205\327k\0\377\3S)\0\377\0\0\0\377v:\0\377\216\327" \
+ "k\0\377\5\321h\0\377<\36\0\377\0\0\0\377S)\0\377\326j\0\377\215\327k" \
+ "\0\377\3u:\0\377\0\0\0\377\253U\0\377\212\327k\0\377\1\272\\\0\377\211" \
+ "\0\0\0\377\1+\25\0\377\202\327k\0\377\3\227K\0\377\0\0\0\377k5\0\377" \
+ "\205\327k\0\377\2\10\4\0\377\35\16\0\377\203\327k\0\377\3(\24\0\377\0" \
+ "\0\0\377\315f\0\377\204\327k\0\377\3\321h\0\377\2\1\0\377\32\15\0\377" \
+ "\203\327k\0\377\3\227K\0\377\0\0\0\377k5\0\377\205\327k\0\377\2\10\4" \
+ "\0\377\35\16\0\377\205\327k\0\377\6\270[\0\377\203A\0\377\77\37\0\377" \
+ "\0\0\0\377\12\5\0\377\300_\0\377\202\327k\0\377\3\270[\0\377\0\0\0\377" \
+ "I$\0\377\223\327k\0\377\3[-\0\377\0\0\0\377b1\0\377\202\327k\0\377\3" \
+ "\256V\0\377\0\0\0\377P'\0\377\205\327k\0\377\2'\23\0\377\2\1\0\377\202" \
+ "\327k\0\377\3[-\0\377\0\0\0\377\207C\0\377\204\327k\0\377\3\177\77\0" \
+ "\377\0\0\0\377x<\0\377\202\327k\0\377\3\256V\0\377\0\0\0\377A\40\0\377" \
+ "\205\327k\0\377\3\216F\0\377\0\0\0\377a0\0\377\205\327k\0\377\6\270[" \
+ "\0\377\203A\0\377\77\37\0\377\0\0\0\377\12\5\0\377\300_\0\377\202\327" \
+ "k\0\377\3\256V\0\377\0\0\0\377P'\0\377\205\327k\0\377\2'\23\0\377\2\1" \
+ "\0\377\202\327k\0\377\3%\22\0\377\0\0\0\377\310c\0\377\205\327k\0\377" \
+ "\3!\20\0\377\0\0\0\377\307c\0\377\202\327k\0\377\3\270[\0\377\0\0\0\377" \
+ "I$\0\377\213\327k\0\377\3\320g\0\377\0\0\0\377\14\6\0\377\206\327k\0" \
+ "\377\7)\24\0\377\0\0\0\377\233M\0\377\327k\0\377\227K\0\377\0\0\0\377" \
+ "k5\0\377\205\327k\0\377\2\10\4\0\377\35\16\0\377\203\327k\0\377\3\277" \
+ "_\0\377\0\0\0\377B!\0\377\203\327k\0\377\3\277_\0\377\0\0\0\377B!\0\377" \
+ "\202\327k\0\377\3$\22\0\377\0\0\0\377\321h\0\377\204\327k\0\377\3\324" \
+ "i\0\377\3\1\0\377\32\15\0\377\237\327k\0\377\230\331l\0\377\4\274^\0" \
+ "\377\1\0\0\377\6\3\0\377\274^\0\377\206\331l\0\377\4\215F\0\377\0\0\0" \
+ "\377\37\17\0\377\330k\0\377\202\331l\0\377\4\260W\0\377\0\0\0\377\26" \
+ "\13\0\377\330k\0\377\204\331l\0\377\7b1\0\377\0\0\0\377\210C\0\377\331" \
+ "l\0\377O'\0\377\0\0\0\377\226J\0\377\212\331l\0\377\3\260W\0\377\0\0" \
+ "\0\377P(\0\377\205\331l\0\377\2'\23\0\377\2\1\0\377\202\331l\0\377\3" \
+ "\322h\0\377\0\0\0\377\32\15\0\377\203\331l\0\377\4P(\0\377\0\0\0\377" \
+ "\31\14\0\377\330k\0\377\202\331l\0\377\3P(\0\377\0\0\0\377\230K\0\377" \
+ "\203\331l\0\377\3J%\0\377\0\0\0\377\232M\0\377\204\331l\0\377\3\310c" \
+ "\0\377\3\1\0\377\25\12\0\377\202\331l\0\377\10\260W\0\377\0\0\0\377P" \
+ "(\0\377\331l\0\377u:\0\377\0\0\0\377'\23\0\377\307c\0\377\203\331l\0" \
+ "\377\3J%\0\377\0\0\0\377\232M\0\377\204\331l\0\377\3\310c\0\377\3\1\0" \
+ "\377\25\12\0\377\211\331l\0\377\5\323i\0\377\77\37\0\377\0\0\0\377O'" \
+ "\0\377\327k\0\377\207\331l\0\377\3\255V\0\377\0\0\0\377-\26\0\377\204" \
+ "\331l\0\377\4\307c\0\377\2\1\0\377\26\13\0\377\330k\0\377\202\331l\0" \
+ "\377\3\255V\0\377\0\0\0\377-\26\0\377\204\331l\0\377\4\307c\0\377\2\1" \
+ "\0\377\26\13\0\377\330k\0\377\204\331l\0\377\4\317g\0\377\12\5\0\377" \
+ "\4\2\0\377\306b\0\377\215\331l\0\377\5\323i\0\377\77\37\0\377\0\0\0\377" \
+ "O'\0\377\327k\0\377\216\331l\0\377\3v:\0\377\0\0\0\377\254U\0\377\212" \
+ "\331l\0\377\3j4\0\377\0\0\0\377Z,\0\377\206\237O\0\377\7*\25\0\377\0" \
+ "\0\0\377\262X\0\377\331l\0\377\243Q\0\377\0\0\0\377\\.\0\377\204\331" \
+ "l\0\377\3\300_\0\377\0\0\0\377\35\16\0\377\203\331l\0\377\3R)\0\377\0" \
+ "\0\0\377\231L\0\377\204\331l\0\377\3\237O\0\377\0\0\0\377\32\15\0\377" \
+ "\203\331l\0\377\3\243Q\0\377\0\0\0\377\\.\0\377\204\331l\0\377\3\300" \
+ "_\0\377\0\0\0\377\35\16\0\377\210\331l\0\377\3\\.\0\377\0\0\0\377\205" \
+ "B\0\377\202\331l\0\377\3\274^\0\377\0\0\0\377I$\0\377\223\331l\0\377" \
+ "\3e2\0\377\0\0\0\377f2\0\377\202\331l\0\377\3\260W\0\377\0\0\0\377P(" \
+ "\0\377\205\331l\0\377\2'\23\0\377\2\1\0\377\202\331l\0\377\3""2\30\0" \
+ "\377\0\0\0\377\323i\0\377\204\331l\0\377\3R)\0\377\0\0\0\377y<\0\377" \
+ "\202\331l\0\377\4\260W\0\377\0\0\0\377\26\13\0\377\330k\0\377\204\331" \
+ "l\0\377\3b1\0\377\0\0\0\377\210C\0\377\210\331l\0\377\3\\.\0\377\0\0" \
+ "\0\377\205B\0\377\202\331l\0\377\3\260W\0\377\0\0\0\377P(\0\377\205\331" \
+ "l\0\377\2'\23\0\377\2\1\0\377\202\331l\0\377\3J%\0\377\0\0\0\377\232" \
+ "M\0\377\204\331l\0\377\3\310c\0\377\3\1\0\377\25\12\0\377\203\331l\0" \
+ "\377\3\274^\0\377\0\0\0\377I$\0\377\213\331l\0\377\3\322h\0\377\0\0\0" \
+ "\377\14\6\0\377\206\331l\0\377\7\30\14\0\377\0\0\0\377\241P\0\377\331" \
+ "l\0\377\243Q\0\377\0\0\0\377\\.\0\377\204\331l\0\377\3\300_\0\377\0\0" \
+ "\0\377\35\16\0\377\203\331l\0\377\3\301`\0\377\0\0\0\377C!\0\377\203" \
+ "\331l\0\377\3\301`\0\377\0\0\0\377C!\0\377\202\331l\0\377\3I$\0\377\0" \
+ "\0\0\377\247S\0\377\204\331l\0\377\3\254U\0\377\0\0\0\377\32\15\0\377" \
+ "\237\331l\0\377\231\332m\0\377\4^/\0\377\0\0\0\377*\25\0\377\310d\0\377" \
+ "\204\332m\0\377\4\256W\0\377\16\7\0\377\0\0\0\377\226K\0\377\203\332" \
+ "m\0\377\1\260X\0\377\202\0\0\0\377\1\211D\0\377\203\332m\0\377\11\310" \
+ "d\0\377\20\10\0\377\6\3\0\377\311d\0\377\332m\0\377\243Q\0\377\0\0\0" \
+ "\377'\23\0\377\317g\0\377\205\332m\0\377\1\313e\0\377\203\332m\0\377" \
+ "\3\260X\0\377\0\0\0\377Q(\0\377\205\332m\0\377\2(\24\0\377\2\1\0\377" \
+ "\202\332m\0\377\3\323i\0\377\0\0\0\377\32\15\0\377\203\332m\0\377\3\310" \
+ "d\0\377\255V\0\377\274^\0\377\203\332m\0\377\3Q(\0\377\0\0\0\377\231" \
+ "L\0\377\203\332m\0\377\4\224J\0\377\0\0\0\3775\32\0\377\327k\0\377\203" \
+ "\332m\0\377\3b1\0\377\0\0\0\377_/\0\377\202\332m\0\377\3\260X\0\377\0" \
+ "\0\0\377Q(\0\377\202\332m\0\377\4}>\0\377\0\0\0\377#\21\0\377\304b\0" \
+ "\377\202\332m\0\377\4\224J\0\377\0\0\0\3775\32\0\377\327k\0\377\203\332" \
+ "m\0\377\3b1\0\377\0\0\0\377_/\0\377\210\332m\0\377\5\325j\0\377B!\0\377" \
+ "\0\0\0\377K%\0\377\327k\0\377\211\332m\0\377\3%\22\0\377\0\0\0\377\242" \
+ "Q\0\377\203\332m\0\377\3d2\0\377\0\0\0\377f3\0\377\204\332m\0\377\3%" \
+ "\22\0\377\0\0\0\377\242Q\0\377\203\332m\0\377\3d2\0\377\0\0\0\377f3\0" \
+ "\377\205\332m\0\377\3\207C\0\377\0\0\0\377E\"\0\377\210\332m\0\377\3" \
+ "\177\77\0\377o7\0\377\304b\0\377\202\332m\0\377\5\325j\0\377B!\0\377" \
+ "\0\0\0\377K%\0\377\327k\0\377\217\332m\0\377\3v;\0\377\0\0\0\377\255" \
+ "V\0\377\211\332m\0\377\4\330l\0\377\31\14\0\377\0\0\0\377\276_\0\377" \
+ "\206\332m\0\377\10}>\0\377\0\0\0\377_/\0\377\332m\0\377\307c\0\377\0" \
+ "\0\0\377!\20\0\377\327k\0\377\203\332m\0\377\3Y,\0\377\0\0\0\377\35\16" \
+ "\0\377\203\332m\0\377\4\244R\0\377\0\0\0\377'\23\0\377\316g\0\377\202" \
+ "\332m\0\377\4\320h\0\377,\26\0\377\0\0\0\377\32\15\0\377\203\332m\0\377" \
+ "\4\307c\0\377\0\0\0\377!\20\0\377\327k\0\377\203\332m\0\377\3Y,\0\377" \
+ "\0\0\0\377\35\16\0\377\202\332m\0\377\1\313e\0\377\205\332m\0\377\3n" \
+ "7\0\377\0\0\0\377\211D\0\377\202\332m\0\377\3\315f\0\377\0\0\0\3772\31" \
+ "\0\377\213\332m\0\377\2\223I\0\377\274^\0\377\205\332m\0\377\4\314f\0" \
+ "\377\34\16\0\377\0\0\0\377\223I\0\377\202\332m\0\377\3\260X\0\377\0\0" \
+ "\0\377Q(\0\377\205\332m\0\377\2(\24\0\377\2\1\0\377\202\332m\0\377\3" \
+ ";\35\0\377\0\0\0\377\266[\0\377\203\332m\0\377\4\266[\0\377\7\3\0\377" \
+ "\0\0\0\377z=\0\377\202\332m\0\377\1\260X\0\377\202\0\0\0\377\1\211D\0" \
+ "\377\203\332m\0\377\4\310d\0\377\20\10\0\377\6\3\0\377\311d\0\377\202" \
+ "\332m\0\377\1\313e\0\377\205\332m\0\377\3n7\0\377\0\0\0\377\211D\0\377" \
+ "\202\332m\0\377\3\260X\0\377\0\0\0\377Q(\0\377\205\332m\0\377\2(\24\0" \
+ "\377\2\1\0\377\202\332m\0\377\4\224J\0\377\0\0\0\3775\32\0\377\327k\0" \
+ "\377\203\332m\0\377\3b1\0\377\0\0\0\377_/\0\377\203\332m\0\377\3\315" \
+ "f\0\377\0\0\0\3772\31\0\377\213\332m\0\377\3\323i\0\377\0\0\0\377\14" \
+ "\6\0\377\205\332m\0\377\11\202A\0\377\0\0\0\377\11\4\0\377\316g\0\377" \
+ "\332m\0\377\307c\0\377\0\0\0\377!\20\0\377\327k\0\377\203\332m\0\377" \
+ "\3Y,\0\377\0\0\0\377\35\16\0\377\203\332m\0\377\3\302a\0\377\0\0\0\377" \
+ "C!\0\377\203\332m\0\377\3\302a\0\377\0\0\0\377C!\0\377\202\332m\0\377" \
+ "\3\221H\0\377\0\0\0\377B!\0\377\204\332m\0\377\3F#\0\377\0\0\0\377\32" \
+ "\15\0\377\237\332m\0\377\231\334n\0\377\13\325j\0\377<\36\0\377\0\0\0" \
+ "\377\21\10\0\377f3\0\377\217G\0\377\212E\0\377T*\0\377\4\2\0\377\0\0" \
+ "\0\377m6\0\377\204\334n\0\377\12\262Y\0\377\0\0\0\377\37\17\0\377\10" \
+ "\4\0\377p8\0\377\245R\0\377\216G\0\377\"\21\0\377\0\0\0\377s9\0\377\203" \
+ "\334n\0\377\11].\0\377\0\0\0\377\37\17\0\377|>\0\377\242Q\0\377\240P" \
+ "\0\377\202A\0\377D\"\0\377)\24\0\377\203\334n\0\377\3\262Y\0\377\0\0" \
+ "\0\377Q(\0\377\205\334n\0\377\2(\24\0\377\2\1\0\377\202\334n\0\377\3" \
+ "\325j\0\377\0\0\0\377\32\15\0\377\211\334n\0\377\3Q(\0\377\0\0\0\377" \
+ "\232M\0\377\203\334n\0\377\12\333m\0\377=\36\0\377\0\0\0\3779\34\0\377" \
+ "\226K\0\377\236O\0\377W+\0\377\0\0\0\377\31\14\0\377\314f\0\377\202\334" \
+ "n\0\377\3\262Y\0\377\0\0\0\377Q(\0\377\203\334n\0\377\17\207C\0\377\1" \
+ "\0\0\377\37\17\0\377\302a\0\377\334n\0\377\333m\0\377=\36\0\377\0\0\0" \
+ "\3779\34\0\377\226K\0\377\236O\0\377W+\0\377\0\0\0\377\31\14\0\377\314" \
+ "f\0\377\210\334n\0\377\4s9\0\377\0\0\0\377\2\1\0\377G#\0\377\205K%\0" \
+ "\377\1t:\0\377\204\334n\0\377\11\243Q\0\377\3\1\0\377\14\6\0\377w;\0" \
+ "\377\226K\0\377Z-\0\377\0\0\0\377\33\15\0\377\315f\0\377\204\334n\0\377" \
+ "\11\243Q\0\377\3\1\0\377\14\6\0\377w;\0\377\226K\0\377Z-\0\377\0\0\0" \
+ "\377\33\15\0\377\315f\0\377\205\334n\0\377\3""2\31\0\377\0\0\0\377\233" \
+ "M\0\377\210\334n\0\377\3\36\17\0\377\0\0\0\377\257W\0\377\202\334n\0" \
+ "\377\4s9\0\377\0\0\0\377\2\1\0\377G#\0\377\205K%\0\377\1t:\0\377\212" \
+ "\334n\0\377\3w;\0\377\0\0\0\377\257W\0\377\211\334n\0\377\3\237O\0\377" \
+ "\0\0\0\3772\31\0\377\207\334n\0\377\16\311d\0\377\3\1\0\377\21\10\0\377" \
+ "\327k\0\377\334n\0\377B!\0\377\0\0\0\377@\40\0\377\223I\0\377\220H\0" \
+ "\377G#\0\377\36\17\0\377\10\4\0\377\36\17\0\377\204\334n\0\377\11W+\0" \
+ "\377\0\0\0\377\31\14\0\377_/\0\377a0\0\377\33\15\0\3776\33\0\377\16\7" \
+ "\0\377\34\16\0\377\204\334n\0\377\11B!\0\377\0\0\0\377@\40\0\377\223" \
+ "I\0\377\220H\0\377G#\0\377\36\17\0\377\10\4\0\377\36\17\0\377\202\334" \
+ "n\0\377\11\30\14\0\377K%\0\377\210D\0\377\245R\0\377\244R\0\377r9\0\377" \
+ "\10\4\0\377\17\7\0\377\312e\0\377\203\334n\0\377\6,\26\0\377\0\0\0\377" \
+ "L&\0\377l6\0\377m6\0\377\264Z\0\377\207\334n\0\377\13Q(\0\377\1\0\0\377" \
+ "8\34\0\377q8\0\377\217G\0\377\221H\0\377n7\0\377\31\14\0\377\0\0\0\377" \
+ "2\31\0\377\331l\0\377\202\334n\0\377\3\262Y\0\377\0\0\0\377Q(\0\377\205" \
+ "\334n\0\377\2(\24\0\377\2\1\0\377\202\334n\0\377\12\203A\0\377\0\0\0" \
+ "\377!\20\0\377\220H\0\377\247S\0\377{=\0\377\22\11\0\377!\20\0\377\0" \
+ "\0\0\377{=\0\377\202\334n\0\377\12\262Y\0\377\0\0\0\377\37\17\0\377\10" \
+ "\4\0\377p8\0\377\245R\0\377\216G\0\377\"\21\0\377\0\0\0\377s9\0\377\203" \
+ "\334n\0\377\11\30\14\0\377K%\0\377\210D\0\377\245R\0\377\244R\0\377r" \
+ "9\0\377\10\4\0\377\17\7\0\377\312e\0\377\202\334n\0\377\3\262Y\0\377" \
+ "\0\0\0\377Q(\0\377\205\334n\0\377\2(\24\0\377\2\1\0\377\202\334n\0\377" \
+ "\12\333m\0\377=\36\0\377\0\0\0\3779\34\0\377\226K\0\377\236O\0\377W+" \
+ "\0\377\0\0\0\377\31\14\0\377\314f\0\377\204\334n\0\377\6,\26\0\377\0" \
+ "\0\0\377L&\0\377l6\0\377m6\0\377\264Z\0\377\207\334n\0\377\3\325j\0\377" \
+ "\0\0\0\377\4\2\0\377\203Q(\0\377\2L&\0\377'\23\0\377\202\0\0\0\377\1" \
+ "\204B\0\377\203\334n\0\377\11B!\0\377\0\0\0\377@\40\0\377\223I\0\377" \
+ "\220H\0\377G#\0\377\36\17\0\377\10\4\0\377\36\17\0\377\203\334n\0\377" \
+ "\3\303a\0\377\0\0\0\377D\"\0\377\203\334n\0\377\3\303a\0\377\0\0\0\377" \
+ "D\"\0\377\202\334n\0\377\4\332m\0\3773\31\0\377\0\0\0\377F#\0\377\202" \
+ "\235N\0\377\4I$\0\377\27\13\0\377\11\4\0\377\32\15\0\377\237\334n\0\377" \
+ "\232\336o\0\377\3\332m\0\377y<\0\377\26\13\0\377\204\0\0\0\377\2)\24" \
+ "\0\377\231L\0\377\205\336o\0\377\5\264Z\0\377\0\0\0\377R)\0\377\211D" \
+ "\0\377\14\6\0\377\202\0\0\0\377\2\6\3\0\377o7\0\377\205\336o\0\377\2" \
+ "\200@\0\377\26\13\0\377\204\0\0\0\377\2\26\13\0\377p8\0\377\203\336o" \
+ "\0\377\3\264Z\0\377\0\0\0\377R)\0\377\205\336o\0\377\2(\24\0\377\2\1" \
+ "\0\377\202\336o\0\377\3\327k\0\377\0\0\0\377\32\15\0\377\211\336o\0\377" \
+ "\3R)\0\377\0\0\0\377\233M\0\377\204\336o\0\377\3\325j\0\377W+\0\377\4" \
+ "\2\0\377\203\0\0\0\377\2;\35\0\377\302a\0\377\203\336o\0\377\3\264Z\0" \
+ "\377\0\0\0\377R)\0\377\204\336o\0\377\10\220H\0\377\3\1\0\377\32\15\0" \
+ "\377\300`\0\377\336o\0\377\325j\0\377W+\0\377\4\2\0\377\203\0\0\0\377" \
+ "\2;\35\0\377\302a\0\377\211\336o\0\377\1g3\0\377\210\0\0\0\377\1=\36" \
+ "\0\377\205\336o\0\377\2\232M\0\377\30\14\0\377\203\0\0\0\377\2""4\32" \
+ "\0\377\277_\0\377\206\336o\0\377\2\232M\0\377\30\14\0\377\203\0\0\0\377" \
+ "\2""4\32\0\377\277_\0\377\205\336o\0\377\4\274^\0\377\0\0\0\377\26\13" \
+ "\0\377\333m\0\377\210\336o\0\377\3\36\17\0\377\0\0\0\377\260X\0\377\202" \
+ "\336o\0\377\1g3\0\377\210\0\0\0\377\1=\36\0\377\212\336o\0\377\3y<\0" \
+ "\377\0\0\0\377\260X\0\377\211\336o\0\377\3L&\0\377\0\0\0\377\202A\0\377" \
+ "\210\336o\0\377\6\77\37\0\377\0\0\0\377\225J\0\377\336o\0\377\311d\0" \
+ "\3773\31\0\377\203\0\0\0\377\4/\27\0\377\300`\0\377\15\6\0\377\36\17" \
+ "\0\377\204\336o\0\377\11\334n\0\377y<\0\377!\20\0\377\5\2\0\377\27\13" \
+ "\0\377`0\0\377\323i\0\377\10\4\0\377'\23\0\377\204\336o\0\377\2\311d" \
+ "\0\3773\31\0\377\203\0\0\0\377\4/\27\0\377\300`\0\377\15\6\0\377\36\17" \
+ "\0\377\202\336o\0\377\2I$\0\377\7\3\0\377\204\0\0\0\377\2/\27\0\377\264" \
+ "Z\0\377\204\336o\0\377\3\274^\0\377A\40\0\377\16\7\0\377\202\0\0\0\377" \
+ "\1\215F\0\377\207\336o\0\377\3\236O\0\377>\37\0\377\11\4\0\377\204\0" \
+ "\0\0\377\3\14\6\0\377_/\0\377\322i\0\377\203\336o\0\377\3\264Z\0\377" \
+ "\0\0\0\377R)\0\377\205\336o\0\377\2(\24\0\377\2\1\0\377\202\336o\0\377" \
+ "\3\335n\0\377`0\0\377\2\1\0\377\202\0\0\0\377\5\6\3\0\377d2\0\377\214" \
+ "F\0\377\0\0\0\377|>\0\377\202\336o\0\377\5\264Z\0\377\0\0\0\377R)\0\377" \
+ "\211D\0\377\14\6\0\377\202\0\0\0\377\2\6\3\0\377o7\0\377\204\336o\0\377" \
+ "\2I$\0\377\7\3\0\377\204\0\0\0\377\2/\27\0\377\264Z\0\377\203\336o\0" \
+ "\377\3\264Z\0\377\0\0\0\377R)\0\377\205\336o\0\377\2(\24\0\377\2\1\0" \
+ "\377\203\336o\0\377\3\325j\0\377W+\0\377\4\2\0\377\203\0\0\0\377\2;\35" \
+ "\0\377\302a\0\377\205\336o\0\377\3\274^\0\377A\40\0\377\16\7\0\377\202" \
+ "\0\0\0\377\1\215F\0\377\207\336o\0\377\1\327k\0\377\205\0\0\0\377\4\3" \
+ "\1\0\377\26\13\0\377H$\0\377\250T\0\377\204\336o\0\377\2\311d\0\3773" \
+ "\31\0\377\203\0\0\0\377\4/\27\0\377\300`\0\377\15\6\0\377\36\17\0\377" \
+ "\203\336o\0\377\3\305b\0\377\0\0\0\377D\"\0\377\203\336o\0\377\3\305" \
+ "b\0\377\0\0\0\377D\"\0\377\203\336o\0\377\2\316g\0\377B!\0\377\203\0" \
+ "\0\0\377\4#\21\0\377\265Z\0\377\20\10\0\377\32\15\0\377\237\336o\0\377" \
+ "\234\340p\0\377\5\337o\0\377\274^\0\377\245R\0\377\250T\0\377\307c\0" \
+ "\377\207\340p\0\377\10\265Z\0\377\0\0\0\377S)\0\377\340p\0\377\330l\0" \
+ "\377\257W\0\377\252U\0\377\322i\0\377\207\340p\0\377\5\337o\0\377\274" \
+ "^\0\377\246S\0\377\251T\0\377\303a\0\377\246\340p\0\377\4\322i\0\377" \
+ "\255V\0\377\247S\0\377\310d\0\377\223\340p\0\377\4\322i\0\377\255V\0" \
+ "\377\247S\0\377\310d\0\377\233\340p\0\377\4\336o\0\377\266[\0\377\247" \
+ "S\0\377\303a\0\377\211\340p\0\377\4\336o\0\377\266[\0\377\247S\0\377" \
+ "\303a\0\377\254\340p\0\377\3z=\0\377\0\0\0\377\262Y\0\377\232\340p\0" \
+ "\377\3\274^\0\377\246S\0\377\275^\0\377\216\340p\0\377\3\301`\0\377\0" \
+ "\0\0\377F#\0\377\206\340p\0\377\3\274^\0\377\246S\0\377\275^\0\377\207" \
+ "\340p\0\377\5\334n\0\377\273]\0\377\246S\0\377\250T\0\377\306c\0\377" \
+ "\225\340p\0\377\2\334n\0\377\274^\0\377\202\246S\0\377\2\272]\0\377\334" \
+ "n\0\377\223\340p\0\377\4\315f\0\377\247S\0\377\255V\0\377\324j\0\377" \
+ "\206\340p\0\377\10\265Z\0\377\0\0\0\377S)\0\377\340p\0\377\330l\0\377" \
+ "\257W\0\377\252U\0\377\322i\0\377\206\340p\0\377\5\334n\0\377\273]\0" \
+ "\377\246S\0\377\250T\0\377\306c\0\377\224\340p\0\377\4\322i\0\377\255" \
+ "V\0\377\247S\0\377\310d\0\377\244\340p\0\377\3\274^\0\377\246S\0\377" \
+ "\275^\0\377\225\340p\0\377\3\304b\0\377\246S\0\377\271\\\0\377\243\340" \
+ "p\0\377\250\342q\0\377\3\267[\0\377\0\0\0\377T*\0\377\377\342q\0\377" \
+ "\253\342q\0\377\3{=\0\377\0\0\0\377\263Y\0\377\245\342q\0\377\1\334n" \
+ "\0\377\204\342q\0\377\4\341p\0\377S)\0\377\0\0\0\377\211D\0\377\315\342" \
+ "q\0\377\3\267[\0\377\0\0\0\377T*\0\377\377\342q\0\377\213\342q\0\377" \
+ "\250\343q\0\377\3\270[\0\377\0\0\0\377T*\0\377\377\343q\0\377\253\343" \
+ "q\0\377\3{=\0\377\0\0\0\377\264Y\0\377\245\343q\0\377\11b1\0\377E\"\0" \
+ "\377\201@\0\377\224J\0\377\202A\0\3777\33\0\377\0\0\0\377*\25\0\377\334" \
+ "m\0\377\315\343q\0\377\3\270[\0\377\0\0\0\377T*\0\377\377\343q\0\377" \
+ "\213\343q\0\377\250\345r\0\377\3\271\\\0\377\0\0\0\377U*\0\377\377\345" \
+ "r\0\377\253\345r\0\377\3|>\0\377\0\0\0\377\266Z\0\377\245\345r\0\377" \
+ "\2\214E\0\377\30\14\0\377\203\0\0\0\377\3\13\5\0\377Y,\0\377\325j\0\377" \
+ "\316\345r\0\377\3\271\\\0\377\0\0\0\377U*\0\377\377\345r\0\377\213\345" \
+ "r\0\377\250\347s\0\377\3\340o\0\377\302`\0\377\320g\0\377\377\347s\0" \
+ "\377\253\347s\0\377\3\233M\0\377@\40\0\377\305b\0\377\247\347s\0\377" \
+ "\4\327k\0\377\306b\0\377\314e\0\377\344q\0\377\320\347s\0\377\3\340o" \
+ "\0\377\302`\0\377\320g\0\377\377\347s\0\377\213\347s\0\377\377\351t\0" \
+ "\377\377\351t\0\377\377\351t\0\377\343\351t\0\377\377\353u\0\377\377" \
+ "\353u\0\377\377\353u\0\377\343\353u\0\377\377\355v\0\377\377\355v\0\377" \
+ "\377\355v\0\377\343\355v\0\377")
+
+
diff --git a/packages/psplash/files/psplash-bar-img.h b/packages/psplash/files/psplash-bar-img.h
new file mode 100644
index 0000000000..c1c76265d3
--- /dev/null
+++ b/packages/psplash/files/psplash-bar-img.h
@@ -0,0 +1,47 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+#define BAR_IMG_ROWSTRIDE (920)
+#define BAR_IMG_WIDTH (230)
+#define BAR_IMG_HEIGHT (28)
+#define BAR_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
+#define BAR_IMG_RLE_PIXEL_DATA ((uint8*) \
+ "\203\354\354\341\377\4\326\326\315\377\236\236\233\377\200\200\201\377" \
+ "nnq\377\377mmp\377\331mmp\377\4nnq\377\200\200\201\377\236\236\233\377" \
+ "\326\326\315\377\205\354\354\341\377\2\260\260\253\377oor\377\377mmp" \
+ "\377\337mmp\377\2oor\377\260\260\253\377\203\354\354\341\377\1\262\262" \
+ "\256\377\377mmp\377\343mmp\377\4\262\262\256\377\354\354\341\377\332" \
+ "\332\321\377pps\377\377mmp\377\343mmp\377\3pps\377\332\332\321\377\244" \
+ "\244\241\377\204mmp\377\1\205\205\205\377\377\354\354\341\377\333\354" \
+ "\354\341\377\1\205\205\205\377\204mmp\377\2\244\244\241\377\210\210\210" \
+ "\377\203mmp\377\2\203\203\203\377\351\351\336\377\377\354\354\341\377" \
+ "\333\354\354\341\377\2\351\351\336\377\203\203\203\377\203mmp\377\2\210" \
+ "\210\210\377qqs\377\203mmp\377\1\255\255\251\377\377\354\354\341\377" \
+ "\335\354\354\341\377\1\255\255\251\377\203mmp\377\1qqs\377\204mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\210mmp\377" \
+ "\1\270\270\262\377\377\354\354\341\377\336\354\354\341\377\204mmp\377" \
+ "\1qqs\377\203mmp\377\1\255\255\251\377\377\354\354\341\377\335\354\354" \
+ "\341\377\1\255\255\251\377\203mmp\377\2qqs\377\210\210\210\377\203mm" \
+ "p\377\2\203\203\203\377\351\351\336\377\377\354\354\341\377\333\354\354" \
+ "\341\377\2\351\351\336\377\203\203\203\377\203mmp\377\2\210\210\210\377" \
+ "\244\244\241\377\204mmp\377\1\205\205\205\377\377\354\354\341\377\333" \
+ "\354\354\341\377\1\205\205\205\377\204mmp\377\3\244\244\241\377\332\332" \
+ "\321\377pps\377\377mmp\377\343mmp\377\4pps\377\332\332\321\377\354\354" \
+ "\341\377\262\262\256\377\377mmp\377\343mmp\377\1\262\262\256\377\203" \
+ "\354\354\341\377\2\260\260\253\377oor\377\377mmp\377\337mmp\377\2oor" \
+ "\377\260\260\253\377\205\354\354\341\377\4\326\326\315\377\236\236\233" \
+ "\377\200\200\201\377nnq\377\377mmp\377\331mmp\377\4nnq\377\200\200\201" \
+ "\377\236\236\233\377\326\326\315\377\203\354\354\341\377")
+
+
diff --git a/packages/psplash/files/psplash-init b/packages/psplash/files/psplash-init
index a966638074..2bd83cfb07 100644
--- a/packages/psplash/files/psplash-init
+++ b/packages/psplash/files/psplash-init
@@ -9,8 +9,13 @@ for x in $(cat /proc/cmdline); do
esac
done
+psplash_args=''
+case "`grep ^Hardware /proc/cpuinfo|cut -d: -f2 |tr A-Z a-z`" in
+ "hp ipaq h3100"|"hp ipaq h3800") pspash_args='-a 90' ;;
+ "hp ipaq 3600"|"hp ipaq 3700"|"hp ipaq h3900"|"htc universal"|*collie|*poodle|*akita|*spitz|*borzoi) psplash_args='-a 270' ;;
+esac
+
export TMPDIR=/mnt/.psplash
mount tmpfs -t tmpfs $TMPDIR -o,size=40k
-/usr/bin/psplash &
-
+/usr/bin/psplash $psplash_args &
diff --git a/packages/psplash/files/zzapsplash-init b/packages/psplash/files/zzapsplash-init
new file mode 100644
index 0000000000..5a713e5701
--- /dev/null
+++ b/packages/psplash/files/zzapsplash-init
@@ -0,0 +1,4 @@
+#!/bin/sh
+TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
+sleep 1
+umount /mnt/.psplash >/dev/null 2>/dev/null
diff --git a/packages/psplash/psplash-zap_1.0.bb b/packages/psplash/psplash-zap_1.0.bb
new file mode 100644
index 0000000000..58fa3ed52b
--- /dev/null
+++ b/packages/psplash/psplash-zap_1.0.bb
@@ -0,0 +1,13 @@
+
+SRC_URI = "file://zzapsplash-init"
+
+do_install_prepend() {
+ install -d "${D}${sysconfdir}/init.d/"
+ install -m 0755 "${WORKDIR}/zzapsplash-init" "${D}${sysconfdir}/init.d/zzapsplash"
+}
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "zzapsplash"
+INITSCRIPT_PARAMS = "start 99 5 S ."
+
diff --git a/packages/psplash/psplash_svn.bb b/packages/psplash/psplash_svn.bb
index eebe2179da..6e117db941 100644
--- a/packages/psplash/psplash_svn.bb
+++ b/packages/psplash/psplash_svn.bb
@@ -1,26 +1,28 @@
DESCRIPTION = "Userspace framebuffer boot logo based on usplash."
SECTION = "base"
LICENSE = "GPL"
-
PV = "0.0+svn${SRCDATE}"
-PR = "r2"
+PR = "r8"
# You can create your own pslash-hand-img.h by doing
# ./make-image-header.sh <file>.png HAND
-# and rename the resulting .h to pslash-hand-img.h
+# and rename the resulting .h to pslash-hand-img.h (for the logo)
+# respectively psplash-bar-img.h (BAR) for the bar.
+# You might also want to patch the colors (see patch)
SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=psplash;proto=http \
- file://psplash-hand-img.h \
- file://psplash-init"
-
+ file://psplash-hand-img.h \
+ file://psplash-bar-img.h \
+ file://psplash-init"
S = "${WORKDIR}/psplash"
-inherit autotools pkgconfig update-rc.d
+SRC_URI_append_openmoko = " file://configurability.patch;patch=1 "
-FILES_${PN} += "/mnt/.psplash"
+inherit autotools pkgconfig update-rc.d
do_configure_append() {
- cp ${WORKDIR}/psplash-hand-img.h ${S}/
+ install -m 0644 ${WORKDIR}/psplash-hand-img.h ${S}/
+ install -m 0644 ${WORKDIR}/psplash-bar-img.h ${S}/
}
do_install_prepend() {
@@ -31,3 +33,5 @@ do_install_prepend() {
INITSCRIPT_NAME = "psplash"
INITSCRIPT_PARAMS = "start 0 S . stop 20 0 1 6 ."
+
+FILES_${PN} += "/mnt/.psplash"
diff --git a/packages/pulseaudio/files/gcc4-compile-fix.patch b/packages/pulseaudio/files/gcc4-compile-fix.patch
new file mode 100644
index 0000000000..34ad026e4d
--- /dev/null
+++ b/packages/pulseaudio/files/gcc4-compile-fix.patch
@@ -0,0 +1,18 @@
+| fix for more strict syntax compliance in gcc4.x
+| pulsecore/core-util.c: In function 'pa_raise_priority':
+| pulsecore/core-util.c:547: error: label at end of compound statement
+| Signed off: mickey@openmoko.org
+|
+Index: pulseaudio-0.9.6/src/pulsecore/core-util.c
+===================================================================
+--- pulseaudio-0.9.6.orig/src/pulsecore/core-util.c
++++ pulseaudio-0.9.6/src/pulsecore/core-util.c
+@@ -535,7 +535,7 @@ void pa_raise_priority(void) {
+ pa_log_info("Successfully gained high priority class.");
+ #endif
+
+-fail:
++fail:;
+
+ #if defined(HAVE_SYS_CAPABILITY_H)
+ if (caps) {
diff --git a/packages/pulseaudio/libatomics-ops_1.2.bb b/packages/pulseaudio/libatomics-ops_1.2.bb
new file mode 100644
index 0000000000..c4e838eb78
--- /dev/null
+++ b/packages/pulseaudio/libatomics-ops_1.2.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "A library for atomic integer operations"
+LICENSE = "MIT"
+
+SRC_URI = "http://www.hpl.hp.com/research/linux/atomic_ops/download/libatomic_ops-1.2.tar.gz"
+S = "${WORKDIR}/libatomic_ops-${PV}"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/pulseaudio/pulse.inc b/packages/pulseaudio/pulse.inc
new file mode 100644
index 0000000000..0158a8a9cc
--- /dev/null
+++ b/packages/pulseaudio/pulse.inc
@@ -0,0 +1,98 @@
+DESCRIPTION = "Pulseaudio is a sound server for Linux and Unix-like operating systems."
+HOMEPAGE = "http://www.pulseaudio.org"
+AUTHOR = "Lennart Poettering"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL"
+
+DEPENDS = "libatomics-ops liboil avahi libsamplerate0 libsndfile1 libtool"
+# optional
+DEPENDS += "alsa-lib glib-2.0"
+
+SRC_URI = "http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-${PV}.tar.gz \
+ file://gcc4-compile-fix.patch;patch=1 \
+ file://volatiles.04_pulse"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --disable-lynx \
+ --without-x \
+ --without-jack \
+ --with-glib \
+ --with-alsa \
+ --with-oss \
+ "
+
+PARALLEL_MAKE = ""
+
+export TARGET_PFPU = "${TARGET_FPU}"
+
+do_stage() {
+ autotools_stage_all
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/volatiles.04_pulse
+
+ if [ "x${TARGET_PFPU}" == "xsoft" ] ; then
+ sed -i -e s:\;\ resample-method\ =\ sinc-fastest:resample-method\ =\ trivial: ${D}${sysconfdir}/pulse/daemon.conf
+ fi
+}
+
+PACKAGES =+ "libpulsecore libpulse libpulse-simple libpulse-browse libpulse-mainloop-glib \
+ pulseaudio-server pulseaudio-misc pulseaudio-gconf-helper"
+
+#upgrade path:
+RREPLACES_pulseaudio-server = "libpulse-bin libpulse-conf"
+
+PACKAGES_DYNAMIC = "pulseaudio-lib* pulseaudio-module* libpulse-lib* libpulse-module* "
+
+FILES_libpulsecore = "${libdir}/libpulsecore.so.*"
+FILES_libpulse = "${libdir}/libpulse.so.*"
+FILES_libpulse-simple = "${libdir}/libpulse-simple.so.*"
+FILES_libpulse-browse = "${libdir}/libpulse-browse.so.*"
+FILES_libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*"
+
+FILES_${PN}-dbg += "${libexecdir}/pulse/.debug \
+ ${libdir}/pulse-0.9/modules/.debug"
+FILES_${PN}-dev += "${libdir}/pulse-0.9/modules/*.la"
+FILES_${PN}-conf = "${sysconfdir}"
+FILES_${PN}-bin = "${bindir}/* \
+ ${sysconfdir}/default/volatiles/volatiles.04_pulse"
+FILES_${PN}-server = "${bindir}/pulseaudio ${sysconfdir}"
+FILES_${PN}-gconf-helper = "${libexecdir}/pulse/gconf-helper"
+FILES_${PN}-misc = "${bindir}/*"
+
+CONFFILES_pulseaudio-server = "\
+ ${sysconfdir}/pulse/default.pa \
+ ${sysconfdir}/pulse/daemon.conf \
+ ${sysconfdir}/pulse/client.conf \
+ "
+pkg_postinst_libppulse() {
+if test "x$D" != "x"; then
+ exit 1
+else
+ grep -q pulse: /etc/group || addgroup pulse
+ grep -q pulse: /etc/passwd || \
+ adduser --disabled-password --home=/var/run/pulse/ --system \
+ --ingroup pulse --no-create-home -g "Pulse audio daemon" pulse
+ /etc/init.d/populate-volatile.sh update
+fi
+}
+
+pkg_postrm_libpulse() {
+if test "x$D" != "x"; then
+ exit 1
+else
+ deluser pulse
+fi
+}
+
+python populate_packages_prepend() {
+ #bb.data.setVar('PKG_pulseaudio', 'pulseaudio', d)
+
+ plugindir = bb.data.expand('${libdir}/pulse-0.9/modules/', d)
+ do_split_packages(d, plugindir, '^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='' )
+ do_split_packages(d, plugindir, '^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='' )
+}
diff --git a/packages/pulseaudio/pulseaudio_0.9.5.bb b/packages/pulseaudio/pulseaudio_0.9.5.bb
index 54ebb76cd9..63c33c4725 100644
--- a/packages/pulseaudio/pulseaudio_0.9.5.bb
+++ b/packages/pulseaudio/pulseaudio_0.9.5.bb
@@ -1,96 +1,3 @@
-DESCRIPTION = "Pulseaudio is a sound server for Linux and Unix-like operating systems."
-HOMEPAGE = "http://www.pulseaudio.org"
-AUTHOR = "Lennart Poettering"
-SECTION = "libs/multimedia"
-LICENSE = "LGPL"
+require pulse.inc
-DEPENDS = "liboil avahi libsamplerate0 libsndfile1 libtool"
-# optional
-DEPENDS += "alsa-lib"
-
-RPROVIDES = "esound esd"
-
-PR = "r6"
-
-SRC_URI = "http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-${PV}.tar.gz"
-
-SRC_URI += "file://volatiles.04_pulse"
-
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "\
- --disable-lynx \
- --without-x \
- --without-glib \
- --without-jack \
- --with-alsa \
- --with-oss \
- "
-
-PARALLEL_MAKE = ""
-
-export TARGET_FPU="${TARGET_FPU}"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/default/volatiles
- install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/volatiles.04_pulse
-
- if [ "x${TARGET_FPU}" == "xsoft" ] ; then
- sed -i -e s:\;\ resample-method\ =\ sinc-fastest:resample-method\ =\ trivial: ${D}${sysconfdir}/pulse/daemon.conf
- fi
-}
-
-
-LEAD_SONAME = "libpulse.so"
-
-PACKAGES =+ "${PN}-bin ${PN}-conf"
-PACKAGES_DYNAMIC = "pulseaudio-module-* pulseaudio-lib-*"
-
-FILES_${PN}-dbg += "${libexecdir}/pulse/.debug \
- ${libdir}/pulse-0.9/modules/.debug"
-FILES_${PN}-dev += "${libdir}/pulse-0.9/modules/*.la"
-FILES_${PN}-conf = "${sysconfdir}"
-FILES_${PN}-bin = "${bindir}/* \
- ${sysconfdir}/default/volatiles/volatiles.04_pulse"
-
-CONFFILES_${PN}-conf = "\
- ${sysconfdir}/pulse/default.pa \
- ${sysconfdir}/pulse/daemon.conf \
- ${sysconfdir}/pulse/client.conf \
- "
-pkg_postinst_${PN}-bin() {
-if test "x$D" != "x"; then
- exit 1
-else
- grep -q pulse: /etc/group || addgroup pulse
- grep -q pulse: /etc/passwd || \
- adduser --disabled-password --home=/var/run/pulse/ --system \
- --ingroup pulse --no-create-home -g "Pulse audio daemon" pulse
- /etc/init.d/populate-volatile.sh update
-fi
-}
-
-pkg_postrm${PN}-bin() {
-if test "x$D" != "x"; then
- exit 1
-else
- deluser pulse
-fi
-}
-
-
-
-
-do_stage() {
- autotools_stage_all
-}
-
-
-python populate_packages_prepend() {
- #bb.data.setVar('PKG_pulseaudio', 'pulseaudio', d)
-
- plugindir = bb.data.expand('${libdir}/pulse-0.9/modules/', d)
- do_split_packages(d, plugindir, '^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='' )
- do_split_packages(d, plugindir, '^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='' )
-}
+PR = "r11"
diff --git a/packages/pulseaudio/pulseaudio_0.9.6.bb b/packages/pulseaudio/pulseaudio_0.9.6.bb
new file mode 100644
index 0000000000..fd64673cc7
--- /dev/null
+++ b/packages/pulseaudio/pulseaudio_0.9.6.bb
@@ -0,0 +1,4 @@
+require pulse.inc
+
+PR = "r3"
+
diff --git a/packages/puppy/files/.mtn2git_empty b/packages/puppy/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/puppy/files/.mtn2git_empty
diff --git a/packages/puppy/files/usb-header.patch b/packages/puppy/files/usb-header.patch
new file mode 100644
index 0000000000..3768ff8ff6
--- /dev/null
+++ b/packages/puppy/files/usb-header.patch
@@ -0,0 +1,20 @@
+--- puppy/usb_io.h.~1.14.~ 2007-02-01 16:39:20.000000000 +1030
++++ puppy/usb_io.h 2007-03-23 11:47:21.000000000 +1030
+@@ -30,12 +30,13 @@
+ #include <linux/types.h>
+ #include <linux/version.h>
+
+-#include <linux/usb.h>
+-#include <linux/usbdevice_fs.h>
+-
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
++/* linux/usb_ch9.h wasn't separated out until 2.4.23 */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,23)
+ #include "usb_ch9.h"
++#else
++#include "usb.h"
+ #endif
++#include <linux/usbdevice_fs.h>
+
+ #include "mjd.h"
+ #include "tf_bytes.h"
diff --git a/packages/puppy/puppy_1.11.bb b/packages/puppy/puppy_1.11.bb
index 94e90d216d..ee9254bd01 100644
--- a/packages/puppy/puppy_1.11.bb
+++ b/packages/puppy/puppy_1.11.bb
@@ -3,9 +3,10 @@ SECTION = "network"
PRIORITY = "optional"
HOMEPAGE = "http://sf.net/projects/puppy/"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
-SRC_URI = "cvs://anonymous:@puppy.cvs.sourceforge.net/cvsroot/puppy;module=puppy;tag=PUPPY_1_11"
+SRC_URI = "cvs://anonymous:@puppy.cvs.sourceforge.net/cvsroot/puppy;module=puppy;tag=PUPPY_1_11 \
+ file://usb-header.patch;patch=1"
S = "${WORKDIR}/puppy"
inherit autotools
diff --git a/packages/puzzles/oh-puzzles_svn.bb b/packages/puzzles/oh-puzzles_svn.bb
new file mode 100644
index 0000000000..67643cb281
--- /dev/null
+++ b/packages/puzzles/oh-puzzles_svn.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "Portable Puzzle Collection"
+LICENSE = "MIT"
+SECTION = "x11"
+DEPENDS = "gtk+ gconf intltool-native librsvg libowl"
+PV = "0.1+svn${SRCDATE}"
+PR = "r5"
+
+inherit autotools pkgconfig
+
+SRC_URI = "svn://svn.o-hand.com/repos/;module=oh-puzzles;proto=http"
+S = "${WORKDIR}/${PN}"
+
+do_install_append() {
+ mv ${D}${bindir} ${D}/usr/games
+
+ install -d ${D}/${datadir}/applications/
+
+ cd ${D}/${prefix}/games
+ for prog in *; do
+ if [ -x $prog ]; then
+ # Convert prog to Title Case
+ title=$(echo $prog | sed 's/\(^\| \)./\U&/g')
+ echo "making ${D}/${datadir}/applications/$prog.desktop"
+ cat <<STOP > ${D}/${datadir}/applications/$prog.desktop
+[Desktop Entry]
+Encoding=UTF-8
+Name=$title
+Exec=${prefix}/games/$prog
+Icon=applications-games
+Terminal=false
+Type=Application
+Categories=Game
+StartupNotify=true
+SingleInstance=true
+Comment=Play $title.
+STOP
+ fi
+ done
+}
+
+FILES_${PN} += "${prefix}/games/*"
+FILES_${PN}-dbg += "${prefix}/games/.debug/*"
+
diff --git a/packages/puzzles/puzzles_r6915.bb b/packages/puzzles/puzzles_r6915.bb
deleted file mode 100644
index 4349a4154b..0000000000
--- a/packages/puzzles/puzzles_r6915.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-
-DEPENDS = "gtk+"
-PR = "r2"
-
-SRC_URI = "http://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles-${PV}.tar.gz \
- file://game.png"
-
-do_compile_prepend = " \
- export XLDFLAGS='${LDFLAGS} `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --libs`'; \
- export CFLAGS='${CFLAGS} -I./ `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --cflags`'; "
-
-FILES_${PN} = "${prefix}/games/* ${datadir}/applications/* ${datadir}/pixmaps"
-FILES_${PN}-dbg += "${prefix}/games/.debug"
-
-do_install () {
- rm -rf ${D}/*
- export prefix=${D}
- export DESTDIR=${D}
- install -d ${D}/${prefix}/
- install -d ${D}/${prefix}/games/
- oe_runmake install
-
- install -d ${D}/${datadir}/
- install -d ${D}/${datadir}/applications/
- install -d ${D}/${datadir}/pixmaps/
-
- install ${WORKDIR}/game.png ${D}/${datadir}/pixmaps/
-
- cd ${D}/${prefix}/games
- for prog in *; do
- if [ -x $prog ]; then
- echo "making ${D}/${datadir}/applications/$prog.desktop"
- cat <<STOP > ${D}/${datadir}/applications/$prog.desktop
-[Desktop Entry]
-Encoding=UTF-8
-Name=$prog
-Exec=${prefix}/games/$prog
-Icon=game.png
-Terminal=false
-Type=Application
-Categories=Game
-StartupNotify=true
-SingleInstance=true
-STOP
- fi
- done
-}
diff --git a/packages/puzzles/puzzles_r7436.bb b/packages/puzzles/puzzles_r7436.bb
new file mode 100644
index 0000000000..fc2997fcf8
--- /dev/null
+++ b/packages/puzzles/puzzles_r7436.bb
@@ -0,0 +1,56 @@
+
+DEPENDS = "gtk+ libxt"
+
+PR = "r3"
+
+SVN_REV = "${@bb.data.getVar('PV',d,1).replace('r', '')}"
+
+SRC_URI = "svn://ixion.tartarus.org/main;module=puzzles;proto=svn;rev=${SVN_REV} \
+ file://game.png"
+
+S = "${WORKDIR}/puzzles"
+
+do_configure () {
+ ./mkfiles.pl
+}
+
+do_compile_prepend = " \
+ export XLDFLAGS='${LDFLAGS} `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --libs`'; \
+ export CFLAGS='${CFLAGS} -I./ `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --cflags`'; "
+
+FILES_${PN} = "${prefix}/games/* ${datadir}/applications/* ${datadir}/pixmaps"
+FILES_${PN}-dbg += "${prefix}/games/.debug"
+
+do_install () {
+ rm -rf ${D}/*
+ export prefix=${D}
+ export DESTDIR=${D}
+ install -d ${D}/${prefix}/
+ install -d ${D}/${prefix}/games/
+ oe_runmake install
+
+ install -d ${D}/${datadir}/
+ install -d ${D}/${datadir}/applications/
+ install -d ${D}/${datadir}/pixmaps/
+
+ install ${WORKDIR}/game.png ${D}/${datadir}/pixmaps/
+
+ cd ${D}/${prefix}/games
+ for prog in *; do
+ if [ -x $prog ]; then
+ echo "making ${D}/${datadir}/applications/$prog.desktop"
+ cat <<STOP > ${D}/${datadir}/applications/$prog.desktop
+[Desktop Entry]
+Encoding=UTF-8
+Name=$prog
+Exec=${prefix}/games/$prog
+Icon=game.png
+Terminal=false
+Type=Application
+Categories=Game
+StartupNotify=true
+SingleInstance=true
+STOP
+ fi
+ done
+}
diff --git a/packages/puzzles/puzzles_svn.bb b/packages/puzzles/puzzles_svn.bb
new file mode 100644
index 0000000000..536aa445b7
--- /dev/null
+++ b/packages/puzzles/puzzles_svn.bb
@@ -0,0 +1,53 @@
+DEFAULT_PREFERENCE = "-1"
+
+DEPENDS = "gtk+ libxt"
+PV = "r7436+svn${SRCDATE}"
+
+SRC_URI = "svn://ixion.tartarus.org/main;module=puzzles;proto=svn \
+ file://game.png"
+S = "${WORKDIR}/puzzles"
+
+do_configure () {
+ ./mkfiles.pl
+}
+
+do_compile_prepend = " \
+ export XLDFLAGS='${LDFLAGS} `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --libs`'; \
+ export CFLAGS='${CFLAGS} -I./ `${STAGING_BINDIR_NATIVE}/pkg-config gtk+-2.0 --cflags`'; "
+
+FILES_${PN} = "${prefix}/games/* ${datadir}/applications/* ${datadir}/pixmaps"
+FILES_${PN}-dbg += "${prefix}/games/.debug"
+
+do_install () {
+ rm -rf ${D}/*
+ export prefix=${D}
+ export DESTDIR=${D}
+ install -d ${D}/${prefix}/
+ install -d ${D}/${prefix}/games/
+ oe_runmake install
+
+ install -d ${D}/${datadir}/
+ install -d ${D}/${datadir}/applications/
+ install -d ${D}/${datadir}/pixmaps/
+
+ install ${WORKDIR}/game.png ${D}/${datadir}/pixmaps/
+
+ cd ${D}/${prefix}/games
+ for prog in *; do
+ if [ -x $prog ]; then
+ echo "making ${D}/${datadir}/applications/$prog.desktop"
+ cat <<STOP > ${D}/${datadir}/applications/$prog.desktop
+[Desktop Entry]
+Encoding=UTF-8
+Name=$prog
+Exec=${prefix}/games/$prog
+Icon=game.png
+Terminal=false
+Type=Application
+Categories=Game
+StartupNotify=true
+SingleInstance=true
+STOP
+ fi
+ done
+}
diff --git a/packages/python/fix-path.inc b/packages/python/fix-path.inc
new file mode 100644
index 0000000000..0738c59ada
--- /dev/null
+++ b/packages/python/fix-path.inc
@@ -0,0 +1,22 @@
+do_install_append() {
+ for i in `find ${D} -name "*.py"` ; do \
+ sed -i -e s:${D}::g $i
+ done
+
+ for i in `find ${D} -name "*.la"` ; do \
+ sed -i -e s:${STAGING_LIBDIR}:${libdir}:g $i
+ done
+
+ if test -e ${D}${bindir} ; then
+ for i in ${D}${bindir}/* ; do \
+ sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i
+ done
+ fi
+
+ if test -e ${D}${sbindir} ; then
+ for i in ${D}${sbindir}/* ; do \
+ sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i
+ done
+ fi
+}
+
diff --git a/packages/python/python-2.4.4-manifest.inc b/packages/python/python-2.4.4-manifest.inc
index 35017aefe7..d08235e42e 100644
--- a/packages/python/python-2.4.4-manifest.inc
+++ b/packages/python/python-2.4.4-manifest.inc
@@ -1,5 +1,5 @@
########################################################################################################################
-### AUTO-GENERATED by '/local/pkg/oe/org.openembedded.dev/contrib/python/generate-manifest.py' [(C) 2002-2007 Michael 'Mickey' Lauer <mickey@Vanille.de>] on Mon Dec 25 00:05:05 2006
+### AUTO-GENERATED by './generate-manifest.py' [(C) 2002-2007 Michael 'Mickey' Lauer <mickey@Vanille.de>] on Sat Jul 21 14:25:07 2007
###
### Visit THE Python for Embedded Systems Site => http://www.Vanille.de/projects/python.spy
###
@@ -8,264 +8,284 @@
########################################################################################################################
-PROVIDES+="python-profile python-threading python-distutils python-textutils python-codecs python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-resource python-devel python-math python-hotshot python-unixadmin python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-syslog python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-tests python-unittest python-stringold python-lib-old-and-deprecated python-compile python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio "
+PROVIDES+="python-profile python-threading python-distutils python-textutils python-codecs python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-core-dbg python-resource python-devel python-math python-hotshot python-unixadmin python-syslog python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-smtpd python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-tests python-unittest python-stringold python-robotparser python-lib-old-and-deprecated python-compile python-debugger python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio "
-PACKAGES="python-profile python-threading python-distutils python-textutils python-codecs python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-resource python-devel python-math python-hotshot python-unixadmin python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-syslog python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-tests python-unittest python-stringold python-lib-old-and-deprecated python-compile python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio "
+PACKAGES="python-profile python-threading python-distutils python-textutils python-codecs python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-core-dbg python-resource python-devel python-math python-hotshot python-unixadmin python-syslog python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-smtpd python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-tests python-unittest python-stringold python-robotparser python-lib-old-and-deprecated python-compile python-debugger python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio "
DESCRIPTION_python-profile="Python Basic Profiling Support"
-PR_python-profile="ml0"
+PR_python-profile="ml2"
RDEPENDS_python-profile="python-core"
FILES_python-profile="${libdir}/python2.4/profile.* ${libdir}/python2.4/pstats.* "
DESCRIPTION_python-threading="Python Threading & Synchronization Support"
-PR_python-threading="ml0"
+PR_python-threading="ml2"
RDEPENDS_python-threading="python-core python-lang"
FILES_python-threading="${libdir}/python2.4/_threading_local.* ${libdir}/python2.4/dummy_thread.* ${libdir}/python2.4/dummy_threading.* ${libdir}/python2.4/mutex.* ${libdir}/python2.4/threading.* ${libdir}/python2.4/Queue.* "
DESCRIPTION_python-distutils="Python Distribution Utilities"
-PR_python-distutils="ml0"
+PR_python-distutils="ml2"
RDEPENDS_python-distutils="python-core"
FILES_python-distutils="${libdir}/python2.4/config ${libdir}/python2.4/distutils "
DESCRIPTION_python-textutils="Python Option Parsing, Text Wrapping and Comma-Separated-Value Support"
-PR_python-textutils="ml0"
+PR_python-textutils="ml2"
RDEPENDS_python-textutils="python-core python-io python-re python-stringold"
FILES_python-textutils="${libdir}/python2.4/lib-dynload/_csv.so ${libdir}/python2.4/csv.* ${libdir}/python2.4/optparse.* ${libdir}/python2.4/textwrap.* "
DESCRIPTION_python-codecs="Python Codecs, Encodings & i18n Support"
-PR_python-codecs="ml0"
+PR_python-codecs="ml2"
RDEPENDS_python-codecs="python-core"
FILES_python-codecs="${libdir}/python2.4/codecs.* ${libdir}/python2.4/encodings ${libdir}/python2.4/gettext.* ${libdir}/python2.4/locale.* ${libdir}/python2.4/lib-dynload/_locale.so ${libdir}/python2.4/lib-dynload/unicodedata.so ${libdir}/python2.4/stringprep.* ${libdir}/python2.4/xdrlib.* "
DESCRIPTION_python-pickle="Python Persistence Support"
-PR_python-pickle="ml0"
+PR_python-pickle="ml2"
RDEPENDS_python-pickle="python-core python-codecs python-io python-re"
FILES_python-pickle="${libdir}/python2.4/pickle.* ${libdir}/python2.4/shelve.* ${libdir}/python2.4/lib-dynload/cPickle.so "
DESCRIPTION_python-datetime="Python Calendar and Time support"
-PR_python-datetime="ml0"
+PR_python-datetime="ml2"
RDEPENDS_python-datetime="python-core python-codecs"
FILES_python-datetime="${libdir}/python2.4/_strptime.* ${libdir}/python2.4/calendar.* ${libdir}/python2.4/lib-dynload/datetime.so "
DESCRIPTION_python-core="Python Interpreter and core modules (needed!)"
-PR_python-core="ml0"
+PR_python-core="ml4"
RDEPENDS_python-core=""
-FILES_python-core="/usr/lib/python2.4/__future__.* /usr/lib/python2.4/copy.* /usr/lib/python2.4/copy_reg.* /usr/lib/python2.4/ConfigParser.py /usr/lib/python2.4/getopt.* /usr/lib/python2.4/linecache.* /usr/lib/python2.4/new.* /usr/lib/python2.4/os.* /usr/lib/python2.4/posixpath.* /usr/lib/python2.4/warnings.* /usr/lib/python2.4/site.* /usr/lib/python2.4/stat.* /usr/lib/python2.4/UserDict.* /usr/lib/python2.4/UserList.* /usr/lib/python2.4/UserString.* /usr/lib/python2.4/lib-dynload/binascii.so /usr/lib/python2.4/lib-dynload/struct.so /usr/lib/python2.4/lib-dynload/time.so /usr/lib/python2.4/lib-dynload/xreadlines.so /usr/lib/python2.4/types.* /usr/bin/python "
+FILES_python-core="/usr/lib/python2.4/__future__.* /usr/lib/python2.4/copy.* /usr/lib/python2.4/copy_reg.* /usr/lib/python2.4/ConfigParser.* /usr/lib/python2.4/getopt.* /usr/lib/python2.4/linecache.* /usr/lib/python2.4/new.* /usr/lib/python2.4/os.* /usr/lib/python2.4/posixpath.* /usr/lib/python2.4/warnings.* /usr/lib/python2.4/site.* /usr/lib/python2.4/stat.* /usr/lib/python2.4/UserDict.* /usr/lib/python2.4/UserList.* /usr/lib/python2.4/UserString.* /usr/lib/python2.4/lib-dynload/binascii.so /usr/lib/python2.4/lib-dynload/struct.so /usr/lib/python2.4/lib-dynload/time.so /usr/lib/python2.4/lib-dynload/xreadlines.so /usr/lib/python2.4/types.* /usr/bin/python* "
DESCRIPTION_python-io="Python Low-Level I/O"
-PR_python-io="ml0"
+PR_python-io="ml2"
RDEPENDS_python-io="python-core python-math"
FILES_python-io="${libdir}/python2.4/lib-dynload/_socket.so ${libdir}/python2.4/lib-dynload/_ssl.so ${libdir}/python2.4/lib-dynload/select.so ${libdir}/python2.4/lib-dynload/termios.so ${libdir}/python2.4/lib-dynload/cStringIO.so ${libdir}/python2.4/pipes.* ${libdir}/python2.4/socket.* ${libdir}/python2.4/tempfile.* ${libdir}/python2.4/StringIO.* "
DESCRIPTION_python-compiler="Python Compiler Support"
-PR_python-compiler="ml0"
+PR_python-compiler="ml2"
RDEPENDS_python-compiler="python-core"
FILES_python-compiler="${libdir}/python2.4/compiler "
DESCRIPTION_python-compression="Python High Level Compression Support"
-PR_python-compression="ml0"
+PR_python-compression="ml2"
RDEPENDS_python-compression="python-core python-zlib"
FILES_python-compression="${libdir}/python2.4/gzip.* ${libdir}/python2.4/zipfile.* "
DESCRIPTION_python-re="Python Regular Expression APIs"
-PR_python-re="ml0"
+PR_python-re="ml2"
RDEPENDS_python-re="python-core"
FILES_python-re="${libdir}/python2.4/re.* ${libdir}/python2.4/sre.* ${libdir}/python2.4/sre_compile.* ${libdir}/python2.4/sre_constants* ${libdir}/python2.4/sre_parse.* "
DESCRIPTION_python-xmlrpc="Python XMLRPC Support"
-PR_python-xmlrpc="ml0"
+PR_python-xmlrpc="ml2"
RDEPENDS_python-xmlrpc="python-core python-xml python-netserver python-lang"
FILES_python-xmlrpc="${libdir}/python2.4/xmlrpclib.* ${libdir}/python2.4/SimpleXMLRPCServer.* "
DESCRIPTION_python-terminal="Python Terminal Controlling Support"
-PR_python-terminal="ml0"
+PR_python-terminal="ml2"
RDEPENDS_python-terminal="python-core python-io"
FILES_python-terminal="${libdir}/python2.4/pty.* ${libdir}/python2.4/tty.* "
DESCRIPTION_python-email="Python Email Support"
-PR_python-email="ml0"
-RDEPENDS_python-email="python-core python-io python-re"
+PR_python-email="ml2"
+RDEPENDS_python-email="python-core python-io python-re python-mime python-audio python-image"
FILES_python-email="${libdir}/python2.4/email "
DESCRIPTION_python-image="Python Graphical Image Handling"
-PR_python-image="ml0"
+PR_python-image="ml2"
RDEPENDS_python-image="python-core"
FILES_python-image="${libdir}/python2.4/colorsys.* ${libdir}/python2.4/imghdr.* ${libdir}/python2.4/lib-dynload/imageop.so ${libdir}/python2.4/lib-dynload/rgbimg.so "
+DESCRIPTION_python-core-dbg="Python core module debug information"
+PR_python-core-dbg="ml2"
+RDEPENDS_python-core-dbg="python-core"
+FILES_python-core-dbg="/usr/lib/python2.4/lib-dynload/.debug /usr/bin/.debug /usr/lib/.debug "
+
DESCRIPTION_python-resource="Python Resource Control Interface"
-PR_python-resource="ml0"
+PR_python-resource="ml2"
RDEPENDS_python-resource="python-core"
FILES_python-resource="${libdir}/python2.4/lib-dynload/resource.so "
DESCRIPTION_python-devel="Python Development Package"
-PR_python-devel="ml0"
+PR_python-devel="ml2"
RDEPENDS_python-devel="python-core"
FILES_python-devel="/usr/include /usr/lib/python2.4/config "
DESCRIPTION_python-math="Python Math Support"
-PR_python-math="ml0"
+PR_python-math="ml2"
RDEPENDS_python-math="python-core"
FILES_python-math="${libdir}/python2.4/lib-dynload/cmath.so ${libdir}/python2.4/lib-dynload/math.so ${libdir}/python2.4/lib-dynload/_random.so ${libdir}/python2.4/random.* ${libdir}/python2.4/sets.* "
DESCRIPTION_python-hotshot="Python Hotshot Profiler"
-PR_python-hotshot="ml0"
+PR_python-hotshot="ml2"
RDEPENDS_python-hotshot="python-core"
FILES_python-hotshot="${libdir}/python2.4/hotshot ${libdir}/python2.4/lib-dynload/_hotshot.so "
DESCRIPTION_python-unixadmin="Python Unix Administration Support"
-PR_python-unixadmin="ml0"
+PR_python-unixadmin="ml2"
RDEPENDS_python-unixadmin="python-core"
FILES_python-unixadmin="${libdir}/python2.4/lib-dynload/nis.so ${libdir}/python2.4/lib-dynload/grp.so ${libdir}/python2.4/lib-dynload/pwd.so ${libdir}/python2.4/getpass.* "
+DESCRIPTION_python-syslog="Python's syslog Interface"
+PR_python-syslog="ml2"
+RDEPENDS_python-syslog="python-core"
+FILES_python-syslog="${libdir}/python2.4/lib-dynload/syslog.so "
+
DESCRIPTION_python-tkinter="Python Tcl/Tk Bindings"
-PR_python-tkinter="ml0"
+PR_python-tkinter="ml2"
RDEPENDS_python-tkinter="python-core"
FILES_python-tkinter="${libdir}/python2.4/lib-dynload/_tkinter.so ${libdir}/python2.4/lib-tk "
DESCRIPTION_python-gdbm="Python GNU Database Support"
-PR_python-gdbm="ml0"
+PR_python-gdbm="ml2"
RDEPENDS_python-gdbm="python-core"
FILES_python-gdbm="${libdir}/python2.4/lib-dynload/gdbm.so "
DESCRIPTION_python-fcntl="Python's fcntl Interface"
-PR_python-fcntl="ml0"
+PR_python-fcntl="ml2"
RDEPENDS_python-fcntl="python-core"
FILES_python-fcntl="${libdir}/python2.4/lib-dynload/fcntl.so "
DESCRIPTION_python-netclient="Python Internet Protocol Clients"
-PR_python-netclient="ml0"
+PR_python-netclient="ml2"
RDEPENDS_python-netclient="python-core python-datetime python-io python-lang python-logging python-mime"
FILES_python-netclient="${libdir}/python2.4/*Cookie*.* ${libdir}/python2.4/base64.* ${libdir}/python2.4/cookielib.* ${libdir}/python2.4/ftplib.* ${libdir}/python2.4/gopherlib.* ${libdir}/python2.4/hmac.* ${libdir}/python2.4/httplib.* ${libdir}/python2.4/mimetypes.* ${libdir}/python2.4/nntplib.* ${libdir}/python2.4/poplib.* ${libdir}/python2.4/smtplib.* ${libdir}/python2.4/telnetlib.* ${libdir}/python2.4/urllib.* ${libdir}/python2.4/urllib2.* ${libdir}/python2.4/urlparse.* "
DESCRIPTION_python-pprint="Python Pretty-Print Support"
-PR_python-pprint="ml0"
+PR_python-pprint="ml2"
RDEPENDS_python-pprint="python-core"
FILES_python-pprint="${libdir}/python2.4/pprint.* "
DESCRIPTION_python-netserver="Python Internet Protocol Servers"
-PR_python-netserver="ml0"
+PR_python-netserver="ml2"
RDEPENDS_python-netserver="python-core python-netclient"
FILES_python-netserver="${libdir}/python2.4/cgi.* ${libdir}/python2.4/BaseHTTPServer.* ${libdir}/python2.4/SimpleHTTPServer.* ${libdir}/python2.4/SocketServer.* "
DESCRIPTION_python-curses="Python Curses Support"
-PR_python-curses="ml0"
+PR_python-curses="ml2"
RDEPENDS_python-curses="python-core"
FILES_python-curses="${libdir}/python2.4/curses ${libdir}/python2.4/lib-dynload/_curses.so ${libdir}/python2.4/lib-dynload/_curses_panel.so "
-DESCRIPTION_python-syslog="Python's syslog Interface"
-PR_python-syslog="ml0"
-RDEPENDS_python-syslog="python-core"
-FILES_python-syslog="${libdir}/python2.4/lib-dynload/syslog.so "
+DESCRIPTION_python-smtpd="Python Simple Mail Transport Daemon"
+PR_python-smtpd="ml2"
+RDEPENDS_python-smtpd="python-core python-netserver python-email python-mime"
+FILES_python-smtpd="/usr/bin/smtpd.* "
DESCRIPTION_python-html="Python HTML Processing"
-PR_python-html="ml0"
+PR_python-html="ml2"
RDEPENDS_python-html="python-core"
FILES_python-html="${libdir}/python2.4/formatter.* ${libdir}/python2.4/htmlentitydefs.* ${libdir}/python2.4/htmllib.* ${libdir}/python2.4/markupbase.* ${libdir}/python2.4/sgmllib.* "
DESCRIPTION_python-readline="Python Readline Support"
-PR_python-readline="ml0"
+PR_python-readline="ml2"
RDEPENDS_python-readline="python-core"
FILES_python-readline="${libdir}/python2.4/lib-dynload/readline.so ${libdir}/python2.4/rlcompleter.* "
DESCRIPTION_python-subprocess="Python Subprocess Support"
-PR_python-subprocess="ml0"
-RDEPENDS_python-subprocess="python-core python-io python-re"
+PR_python-subprocess="ml2"
+RDEPENDS_python-subprocess="python-core python-io python-re python-fcntl python-pickle"
FILES_python-subprocess="${libdir}/python2.4/subprocess.* "
DESCRIPTION_python-pydoc="Python Interactive Help Support"
-PR_python-pydoc="ml0"
+PR_python-pydoc="ml2"
RDEPENDS_python-pydoc="python-core python-lang python-stringold python-re"
FILES_python-pydoc="/usr/bin/pydoc /usr/lib/python2.4/pydoc.* "
DESCRIPTION_python-logging="Python Logging Support"
-PR_python-logging="ml0"
+PR_python-logging="ml2"
RDEPENDS_python-logging="python-core"
FILES_python-logging="${libdir}/python2.4/logging "
DESCRIPTION_python-mailbox="Python Mailbox Format Support"
-PR_python-mailbox="ml0"
+PR_python-mailbox="ml2"
RDEPENDS_python-mailbox="python-core python-mime"
FILES_python-mailbox="${libdir}/python2.4/mailbox.* "
DESCRIPTION_python-xml="Python basic XML support."
-PR_python-xml="ml0"
+PR_python-xml="ml2"
RDEPENDS_python-xml="python-core python-re"
FILES_python-xml="${libdir}/python2.4/lib-dynload/pyexpat.so ${libdir}/python2.4/xml ${libdir}/python2.4/xmllib.* "
DESCRIPTION_python-mime="Python MIME Handling APIs"
-PR_python-mime="ml0"
+PR_python-mime="ml2"
RDEPENDS_python-mime="python-core python-io"
-FILES_python-mime="${libdir}/python2.4/mimetools.* ${libdir}/python2.4/quopri.* ${libdir}/python2.4/rfc822.* "
+FILES_python-mime="${libdir}/python2.4/mimetools.* ${libdir}/python2.4/uu.* ${libdir}/python2.4/quopri.* ${libdir}/python2.4/rfc822.* "
DESCRIPTION_python-tests="Python Tests"
-PR_python-tests="ml0"
+PR_python-tests="ml2"
RDEPENDS_python-tests="python-core"
FILES_python-tests="${libdir}/python2.4/test "
DESCRIPTION_python-unittest="Python Unit Testing Framework"
-PR_python-unittest="ml0"
+PR_python-unittest="ml2"
RDEPENDS_python-unittest="python-core python-stringold python-lang"
FILES_python-unittest="${libdir}/python2.4/unittest.* "
DESCRIPTION_python-stringold="Python String APIs [deprecated]"
-PR_python-stringold="ml0"
+PR_python-stringold="ml2"
RDEPENDS_python-stringold="python-core python-re"
FILES_python-stringold="${libdir}/python2.4/lib-dynload/strop.so ${libdir}/python2.4/string.* "
+DESCRIPTION_python-robotparser="Python robots.txt parser"
+PR_python-robotparser="ml2"
+RDEPENDS_python-robotparser="python-core python-netclient"
+FILES_python-robotparser="${libdir}/python2.4/robotparser.* "
+
DESCRIPTION_python-lib-old-and-deprecated="Python Deprecated Libraries"
-PR_python-lib-old-and-deprecated="ml0"
+PR_python-lib-old-and-deprecated="ml2"
RDEPENDS_python-lib-old-and-deprecated="python-core"
FILES_python-lib-old-and-deprecated="${libdir}/python2.4/lib-old "
DESCRIPTION_python-compile="Python Bytecode Compilation Support"
-PR_python-compile="ml0"
+PR_python-compile="ml2"
RDEPENDS_python-compile="python-core"
FILES_python-compile="${libdir}/python2.4/py_compile.* ${libdir}/python2.4/compileall.* "
+DESCRIPTION_python-debugger="Python Debugger"
+PR_python-debugger="ml2"
+RDEPENDS_python-debugger="python-core python-io python-lang python-re python-stringold python-shell"
+FILES_python-debugger="${libdir}/python2.4/bdb.* ${libdir}/python2.4/pdb.* "
+
DESCRIPTION_python-shell="Python Shell-Like Functionality"
-PR_python-shell="ml0"
+PR_python-shell="ml2"
RDEPENDS_python-shell="python-core python-re"
-FILES_python-shell="${libdir}/python2.4/commands.* ${libdir}/python2.4/dircache.* ${libdir}/python2.4/fnmatch.* ${libdir}/python2.4/glob.* ${libdir}/python2.4/popen2.* ${libdir}/python2.4/shutil.* "
+FILES_python-shell="${libdir}/python2.4/cmd.* ${libdir}/python2.4/commands.* ${libdir}/python2.4/dircache.* ${libdir}/python2.4/fnmatch.* ${libdir}/python2.4/glob.* ${libdir}/python2.4/popen2.* ${libdir}/python2.4/shutil.* "
DESCRIPTION_python-bsddb="Python Berkeley Database Bindings"
-PR_python-bsddb="ml0"
+PR_python-bsddb="ml2"
RDEPENDS_python-bsddb="python-core"
FILES_python-bsddb="${libdir}/python2.4/bsddb "
DESCRIPTION_python-mmap="Python Memory-Mapped-File Support"
-PR_python-mmap="ml0"
+PR_python-mmap="ml2"
RDEPENDS_python-mmap="python-core python-io"
FILES_python-mmap="${libdir}/python2.4/lib-dynload/mmap.so "
DESCRIPTION_python-zlib="Python zlib Support."
-PR_python-zlib="ml0"
+PR_python-zlib="ml2"
RDEPENDS_python-zlib="python-core"
FILES_python-zlib="${libdir}/python2.4/lib-dynload/zlib.so "
DESCRIPTION_python-db="Python File-Based Database Support"
-PR_python-db="ml0"
+PR_python-db="ml2"
RDEPENDS_python-db="python-core"
FILES_python-db="${libdir}/python2.4/anydbm.* ${libdir}/python2.4/dumbdbm.* ${libdir}/python2.4/whichdb.* "
DESCRIPTION_python-crypt="Python Basic Cryptographic and Hashing Support"
-PR_python-crypt="ml0"
+PR_python-crypt="ml2"
RDEPENDS_python-crypt="python-core"
FILES_python-crypt="${libdir}/python2.4/lib-dynload/crypt.so ${libdir}/python2.4/lib-dynload/md5.so ${libdir}/python2.4/lib-dynload/rotor.so ${libdir}/python2.4/lib-dynload/sha.so "
DESCRIPTION_python-idle="Python Integrated Development Environment"
-PR_python-idle="ml0"
+PR_python-idle="ml2"
RDEPENDS_python-idle="python-core python-tkinter"
FILES_python-idle="/usr/bin/idle /usr/lib/python2.4/idlelib "
DESCRIPTION_python-lang="Python Low-Level Language Support"
-PR_python-lang="ml0"
+PR_python-lang="ml2"
RDEPENDS_python-lang="python-core"
FILES_python-lang="${libdir}/python2.4/lib-dynload/array.so ${libdir}/python2.4/lib-dynload/parser.so ${libdir}/python2.4/lib-dynload/operator.so ${libdir}/python2.4/lib-dynload/_weakref.so ${libdir}/python2.4/lib-dynload/itertools.so ${libdir}/python2.4/lib-dynload/collections.so ${libdir}/python2.4/lib-dynload/_bisect.so ${libdir}/python2.4/lib-dynload/_heapq.so ${libdir}/python2.4/atexit.* ${libdir}/python2.4/bisect.* ${libdir}/python2.4/code.* ${libdir}/python2.4/codeop.* ${libdir}/python2.4/dis.* ${libdir}/python2.4/heapq.* ${libdir}/python2.4/inspect.* ${libdir}/python2.4/keyword.* ${libdir}/python2.4/opcode.* ${libdir}/python2.4/repr.* ${libdir}/python2.4/token.* ${libdir}/python2.4/tokenize.* ${libdir}/python2.4/traceback.* ${libdir}/python2.4/linecache.* ${libdir}/python2.4/weakref.* "
DESCRIPTION_python-audio="Python Audio Handling"
-PR_python-audio="ml0"
+PR_python-audio="ml2"
RDEPENDS_python-audio="python-core"
-FILES_python-audio="${libdir}/python2.4/wave.* ${libdir}/python2.4/chunk.* ${libdir}/python2.4/lib-dynload/ossaudiodev.so ${libdir}/python2.4/lib-dynload/audioop.so "
+FILES_python-audio="${libdir}/python2.4/wave.* ${libdir}/python2.4/chunk.* ${libdir}/python2.4/sndhdr.* ${libdir}/python2.4/lib-dynload/ossaudiodev.so ${libdir}/python2.4/lib-dynload/audioop.so "
diff --git a/packages/python/python-dbus/.mtn2git_empty b/packages/python/python-dbus/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/python/python-dbus/.mtn2git_empty
diff --git a/packages/python/python-dbus/allow-older-autotools.patch b/packages/python/python-dbus/allow-older-autotools.patch
new file mode 100644
index 0000000000..7595f70e5d
--- /dev/null
+++ b/packages/python/python-dbus/allow-older-autotools.patch
@@ -0,0 +1,27 @@
+#
+# so it looks like dbus-python really doesn't make use of any 2.59c features
+# Signed-Off: mickey@openmoko.org
+#
+Index: dbus-python-0.81.1/configure.ac
+===================================================================
+--- dbus-python-0.81.1.orig/configure.ac 2007-06-04 13:17:10.000000000 +0000
++++ dbus-python-0.81.1/configure.ac 2007-06-11 06:57:20.000000000 +0000
+@@ -1,5 +1,5 @@
+ -*- mode: m4 -*-
+-AC_PREREQ(2.59c)
++AC_PREREQ(2.59)
+
+ dnl If not 1, append datestamp to the version number
+ m4_define(dbus_python_released, 1)
+Index: dbus-python-0.81.1/Makefile.am
+===================================================================
+--- dbus-python-0.81.1.orig/Makefile.am 2007-05-09 09:44:40.000000000 +0000
++++ dbus-python-0.81.1/Makefile.am 2007-06-11 06:59:23.000000000 +0000
+@@ -38,6 +38,7 @@
+
+ TXT_RSTDOCS = doc/tutorial.txt doc/API_CHANGES.txt doc/HACKING.txt
+ RSTDOCS = README NEWS TODO
++docdir=foo
+ dist_doc_DATA = $(TXT_RSTDOCS) $(RSTDOCS)
+
+ maintainer-update-website: _maintainer-update-apidocs \
diff --git a/packages/python/python-dbus_0.71.bb b/packages/python/python-dbus_0.71.bb
deleted file mode 100644
index 2ef0ffa8dd..0000000000
--- a/packages/python/python-dbus_0.71.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Python bindings for DBus, a socket-based message bus system for interprocess communication"
-SECTION = "devel/python"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
-LICENSE = "GPL"
-DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python"
-RDEPENDS = "dbus"
-PR = "ml0"
-
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz"
-S = "${WORKDIR}/dbus-python-${PV}"
-
-inherit distutils
-
diff --git a/packages/python/python-dbus_0.81.1.bb b/packages/python/python-dbus_0.81.1.bb
new file mode 100644
index 0000000000..82b9c390ca
--- /dev/null
+++ b/packages/python/python-dbus_0.81.1.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Python bindings for DBus, a socket-based message bus system for interprocess communication"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+LICENSE = "GPL"
+DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python"
+RDEPENDS = "dbus python-threading python-io python-stringold python-logging"
+PR = "ml0"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \
+ file://allow-older-autotools.patch;patch=1"
+S = "${WORKDIR}/dbus-python-${PV}"
+
+inherit distutils-base autotools
+
diff --git a/packages/python/python-ecore_cvs.bb b/packages/python/python-ecore_cvs.bb
new file mode 100644
index 0000000000..e87b415285
--- /dev/null
+++ b/packages/python/python-ecore_cvs.bb
@@ -0,0 +1,3 @@
+require python-efl.inc
+
+DEPENDS += "ecore"
diff --git a/packages/python/python-edje_cvs.bb b/packages/python/python-edje_cvs.bb
new file mode 100644
index 0000000000..632ca8400a
--- /dev/null
+++ b/packages/python/python-edje_cvs.bb
@@ -0,0 +1,4 @@
+require python-efl.inc
+
+DEPENDS += "edje python-evas"
+
diff --git a/packages/python/python-efl.inc b/packages/python/python-efl.inc
new file mode 100644
index 0000000000..875a88f5b2
--- /dev/null
+++ b/packages/python/python-efl.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "${PN} bindings"
+LICENSE = "BSD"
+AUTHOR = "Gustavo Sverzut Barbieri <barbieri@gmail.com>"
+HOMEPAGE = "http://www.enlightenment.org"
+DEPENDS = "python-pyrex-native python-numeric"
+PV = "0.0.0+cvs${SRCDATE}"
+
+inherit distutils
+
+SRC_URI = "${E_CVS};module=e17/proto/python-efl/${PN}"
+S = "${WORKDIR}/${PN}"
+
+do_install_append() {
+ rm ${D}${libdir}/${PYTHON_DIR}/site-packages/site.*
+}
+
+FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/*.egg/*/*/.debug"
+
diff --git a/packages/python/python-emotion_cvs.bb b/packages/python/python-emotion_cvs.bb
new file mode 100644
index 0000000000..a101c07007
--- /dev/null
+++ b/packages/python/python-emotion_cvs.bb
@@ -0,0 +1,4 @@
+require python-efl.inc
+
+DEPENDS += "emotion python-evas"
+
diff --git a/packages/python/python-evas_cvs.bb b/packages/python/python-evas_cvs.bb
new file mode 100644
index 0000000000..78f306c060
--- /dev/null
+++ b/packages/python/python-evas_cvs.bb
@@ -0,0 +1,13 @@
+require python-efl.inc
+
+DEPENDS += "evas"
+
+do_stage() {
+ distutils_stage_headers
+}
+
+#do_stage_append() {
+# install -d ${STAGING_DIR}/${BUILD_SYS}/include/${PYTHON_DIR}/python-evas/
+# install -m 0644 evas/evas.c_evas.pxd ${STAGING_DIR}/${BUILD_SYS}/include/${PYTHON_DIR}/python-evas/
+#}
+
diff --git a/packages/python/python-fam_1.1.1.bb b/packages/python/python-fam_1.1.1.bb
new file mode 100644
index 0000000000..cf74265aa3
--- /dev/null
+++ b/packages/python/python-fam_1.1.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python access to the File Alteration Monitor"
+HOMEPAGE = "http://python-fam.sourceforge.net/"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "fam"
+RDEPENDS = "fam python-core python-io"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
+
+inherit distutils
+
diff --git a/packages/python/python-fuse_cvs.bb b/packages/python/python-fuse_cvs.bb
index e803b7fc62..d017e28536 100644
--- a/packages/python/python-fuse_cvs.bb
+++ b/packages/python/python-fuse_cvs.bb
@@ -1,11 +1,15 @@
DESCRIPTION = "FUSE Python bindings."
LICENSE = "GPLv2"
+DEPENDS = "fuse"
PV = "0.0+cvs${SRCDATE}"
+PR = "r1"
+
SRC_URI = "cvs://anonymous@fuse.cvs.sourceforge.net/cvsroot/fuse;module=python"
inherit distutils
S = "${WORKDIR}/python"
+FILES_${PN}-dbg += "${libdir}/python*/site-packages/fuseparts/.debu*"
diff --git a/packages/python/python-gst/.mtn2git_empty b/packages/python/python-gst/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/python/python-gst/.mtn2git_empty
diff --git a/packages/python/python-gst/python-path.patch b/packages/python/python-gst/python-path.patch
new file mode 100644
index 0000000000..465d5b180a
--- /dev/null
+++ b/packages/python/python-gst/python-path.patch
@@ -0,0 +1,24 @@
+Index: gst-python-0.10.7/acinclude.m4
+===================================================================
+--- gst-python-0.10.7.orig/acinclude.m4 2007-03-02 14:10:28.652128590 +0100
++++ gst-python-0.10.7/acinclude.m4 2007-03-02 14:41:00.106728708 +0100
+@@ -43,12 +43,19 @@
+ [AC_REQUIRE([AM_PATH_PYTHON])
+ AC_MSG_CHECKING(for headers required to compile python extensions)
+ dnl deduce PYTHON_INCLUDES
++
++AC_ARG_WITH(python-includes,
++ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
++if test x$py_exec_prefix != x; then
++PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
++else
+ py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+ py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+ if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+ fi
++fi
+ AC_SUBST(PYTHON_INCLUDES)
+ dnl check if the headers exist:
+ save_CPPFLAGS="$CPPFLAGS"
diff --git a/packages/python/python-gst_0.10.7.bb b/packages/python/python-gst_0.10.7.bb
new file mode 100644
index 0000000000..8924c700d4
--- /dev/null
+++ b/packages/python/python-gst_0.10.7.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Python Gstreamer bindings"
+SECTION = "devel/python"
+LICENSE = "LGPL"
+DEPENDS = "gstreamer gst-plugins-base python-pygobject"
+PR = "r1"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-python/gst-python-${PV}.tar.bz2 \
+ file://python-path.patch;patch=1"
+
+S = "${WORKDIR}/gst-python-${PV}"
+
+inherit autotools distutils-base pkgconfig
+
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+
+do_configure_prepend() {
+ install -d ${S}/m4
+ install -m 0644 ${S}/common/m4/*.m4 ${S}/m4/
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN}-dbg = "${libdir}/python2.4/site-packages/gst-0.10/gst/.debug/"
diff --git a/packages/python/python-pycairo_1.2.2.bb b/packages/python/python-pycairo_1.2.2.bb
index 46638d2794..22ba095aa2 100644
--- a/packages/python/python-pycairo_1.2.2.bb
+++ b/packages/python/python-pycairo_1.2.2.bb
@@ -3,7 +3,7 @@ SECTION = "python-devel"
HOMEPAGE = "http://cairographics.org/pycairo"
LICENSE = "LGPL MPL"
DEPENDS = "cairo"
-PR = "ml1"
+PR = "ml2"
SRC_URI = "http://cairographics.org/releases/pycairo-${PV}.tar.gz \
file://fix-pkgconfig-dir.patch;patch=1"
@@ -16,3 +16,5 @@ do_stage() {
install -m 0644 cairo/pycairo.h ${STAGING_INCDIR}
}
+
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/cairo/.debug"
diff --git a/packages/python/python-pygobject-native_2.12.3.bb b/packages/python/python-pygobject-native_2.12.3.bb
new file mode 100644
index 0000000000..86d778c5ab
--- /dev/null
+++ b/packages/python/python-pygobject-native_2.12.3.bb
@@ -0,0 +1,7 @@
+require python-pygobject_${PV}.bb
+
+DEPENDS = "python-native"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.12/pygobject-${PV}.tar.bz2 "
+
+inherit native
diff --git a/packages/python/python-pygobject/.mtn2git_empty b/packages/python/python-pygobject/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/python/python-pygobject/.mtn2git_empty
diff --git a/packages/python/python-pygobject/python-path.patch b/packages/python/python-pygobject/python-path.patch
new file mode 100644
index 0000000000..2ab7bdce6e
--- /dev/null
+++ b/packages/python/python-pygobject/python-path.patch
@@ -0,0 +1,23 @@
+Index: pygobject-2.12.3/m4/python.m4
+===================================================================
+--- pygobject-2.12.3.orig/m4/python.m4 2007-03-02 15:00:20.945635455 +0100
++++ pygobject-2.12.3/m4/python.m4 2007-03-02 15:00:43.532189734 +0100
+@@ -43,12 +43,18 @@
+ [AC_REQUIRE([AM_PATH_PYTHON])
+ AC_MSG_CHECKING(for headers required to compile python extensions)
+ dnl deduce PYTHON_INCLUDES
++AC_ARG_WITH(python-includes,
++ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
++if test x$py_exec_prefix != x; then
++PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
++else
+ py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+ py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+ PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+ if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+ fi
++fi
+ AC_SUBST(PYTHON_INCLUDES)
+ dnl check if the headers exist:
+ save_CPPFLAGS="$CPPFLAGS"
diff --git a/packages/python/python-pygobject_2.12.2.bb b/packages/python/python-pygobject_2.12.2.bb
index a79032f301..1604b54715 100644
--- a/packages/python/python-pygobject_2.12.2.bb
+++ b/packages/python/python-pygobject_2.12.2.bb
@@ -9,6 +9,11 @@ S = "${WORKDIR}/pygobject-${PV}"
inherit autotools distutils-base pkgconfig
+# otherwise the main package keeps snatching the .pc file away
+# and therefore depends on glib-2.0-dev (which only the -dev
+# package should).
+PACKAGES =+ "${PN}-dev"
+
do_stage() {
autotools_stage_all
install -d ${STAGING_LIBDIR}/../share/pygobject/
diff --git a/packages/python/python-pygobject_2.12.3.bb b/packages/python/python-pygobject_2.12.3.bb
new file mode 100644
index 0000000000..d09349575b
--- /dev/null
+++ b/packages/python/python-pygobject_2.12.3.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Python GObject bindings"
+SECTION = "devel/python"
+LICENSE = "LGPL"
+DEPENDS = "python-pygobject-native"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/2.12/pygobject-${PV}.tar.bz2 \
+ file://python-path.patch;patch=1"
+
+S = "${WORKDIR}/pygobject-${PV}"
+
+inherit autotools distutils-base pkgconfig
+
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+
+do_stage() {
+ autotools_stage_all
+ install -d ${STAGING_LIBDIR}/../share/pygobject/
+ cp -dpfR docs/* ${STAGING_LIBDIR}/../share/pygobject/
+ install -d ${STAGING_LIBDIR}/../share/gtk-doc/html/pygobject/
+ cp docs/style.css ${STAGING_LIBDIR}/../share/gtk-doc/html/pygobject/
+}
+
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/gtk-2.0/gobject/.debug"
+
diff --git a/packages/python/python-pygtk2/acinclude.m4 b/packages/python/python-pygtk2/acinclude.m4
index eec3758afc..53518fb2eb 100644
--- a/packages/python/python-pygtk2/acinclude.m4
+++ b/packages/python/python-pygtk2/acinclude.m4
@@ -43,12 +43,18 @@ AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
[AC_REQUIRE([AM_PATH_PYTHON])
AC_MSG_CHECKING(for headers required to compile python extensions)
dnl deduce PYTHON_INCLUDES
+AC_ARG_WITH(python-includes,
+ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
+if test x$py_exec_prefix != x; then
+PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+else
py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
if test "$py_prefix" != "$py_exec_prefix"; then
PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
fi
+fi
AC_SUBST(PYTHON_INCLUDES)
dnl check if the headers exist:
save_CPPFLAGS="$CPPFLAGS"
diff --git a/packages/python/python-pygtk2_2.10.3.bb b/packages/python/python-pygtk2_2.10.3.bb
index d040299a0e..ad1f36a205 100644
--- a/packages/python/python-pygtk2_2.10.3.bb
+++ b/packages/python/python-pygtk2_2.10.3.bb
@@ -5,7 +5,7 @@ DEPENDS = "gtk+ libglade python-pycairo python-pygobject"
RDEPENDS = "python-shell"
SRCNAME = "pygtk"
LICENSE = "LGPL"
-PR = "ml2"
+PR = "ml4"
SRC_URI = "ftp://ftp.gnome.org/pub/gnome/sources/pygtk/2.10/${SRCNAME}-${PV}.tar.bz2 \
file://fix-gtkunixprint.patch;patch=1 \
@@ -13,13 +13,23 @@ SRC_URI = "ftp://ftp.gnome.org/pub/gnome/sources/pygtk/2.10/${SRCNAME}-${PV}.tar
S = "${WORKDIR}/${SRCNAME}-${PV}"
EXTRA_OECONF = "--disable-docs"
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
inherit autotools pkgconfig distutils-base
+PACKAGES =+ "${PN}-dev"
+FILES_${PN}-dev += "${libdir}/pygtk/2.0 ${bindir}/pygtk-*"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/gtk-2.0/.debug"
+
do_configure_prepend() {
install -m 0644 ${WORKDIR}/acinclude.m4 ${S}/
}
+require fix-path.inc
+
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/gtk-2.0/*/.debug"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/gtk-2.0/.debug"
+
do_stage() {
autotools_stage_includes
sed -i s:/usr/share:${STAGING_DATADIR}: codegen/pygtk-codegen-2.0
diff --git a/packages/python/python-pygtk2_2.6.3.bb b/packages/python/python-pygtk2_2.6.3.bb
new file mode 100644
index 0000000000..417de0a109
--- /dev/null
+++ b/packages/python/python-pygtk2_2.6.3.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Python GTK+ Bindings"
+SECTION = "devel/python"
+DEPENDS = "gtk+-2.6.10 libglade"
+RDEPENDS = "python-shell"
+SRCNAME = "pygtk"
+LICENSE = "LGPL"
+PR = "ml0"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/gnome/sources/pygtk/2.6/${SRCNAME}-${PV}.tar.bz2 \
+ file://acinclude.m4"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit autotools pkgconfig distutils-base
+
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-doc ${PN}"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/gtk-2.0/gtk/.debug \
+ ${libdir}/python2.4/site-packages/gtk-2.0/.debug"
+FILES_${PN}-dev += "${bindir} ${datadir}/pygtk ${libdir}/pygtk"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/acinclude.m4 ${S}/
+}
+
+do_stage() {
+ autotools_stage_includes
+ sed -i s:/usr/share:${STAGING_DATADIR}: codegen/pygtk-codegen-2.0
+ install -m 0755 codegen/pygtk-codegen-2.0 ${STAGING_BINDIR_NATIVE}/
+ install -d ${STAGING_DATADIR}/pygtk/2.0/codegen
+ install -d ${STAGING_DATADIR}/pygtk/2.0/defs/
+ cp -pPr codegen/*.py* ${STAGING_DATADIR}/pygtk/2.0/codegen/
+ cp -pPr *.defs ${STAGING_DATADIR}/pygtk/2.0/defs/
+ cp -pPr gtk/*.defs ${STAGING_DATADIR}/pygtk/2.0/defs/
+}
diff --git a/packages/python/python-pygtk2_2.8.6.bb b/packages/python/python-pygtk2_2.8.6.bb
index ab571bdfd9..361737684c 100644
--- a/packages/python/python-pygtk2_2.8.6.bb
+++ b/packages/python/python-pygtk2_2.8.6.bb
@@ -1,11 +1,12 @@
DESCRIPTION = "Python GTK+ Bindings"
SECTION = "devel/python"
-# needs gtk+-2.8.x
-DEPENDS = "gtk+ libglade"
+PRIORITY = "optional"
+# needs gtk+ 2.8.x
+DEPENDS = "gtk+-2.8.16 libglade"
RDEPENDS = "python-shell"
SRCNAME = "pygtk"
LICENSE = "LGPL"
-PR = "ml0"
+PR = "r1"
SRC_URI = "ftp://ftp.gnome.org/pub/gnome/sources/pygtk/2.8/${SRCNAME}-${PV}.tar.bz2 \
file://acinclude.m4"
@@ -13,6 +14,8 @@ S = "${WORKDIR}/${SRCNAME}-${PV}"
inherit autotools pkgconfig distutils-base
+EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+
do_configure_prepend() {
install -m 0644 ${WORKDIR}/acinclude.m4 ${S}/
}
diff --git a/packages/python/python-pyqt4_4.0.bb b/packages/python/python-pyqt4_4.2.bb
index 64a9a71f68..64a9a71f68 100644
--- a/packages/python/python-pyqt4_4.0.bb
+++ b/packages/python/python-pyqt4_4.2.bb
diff --git a/packages/python/python-pyqt_3.13.bb b/packages/python/python-pyqt_3.13.bb
index 00d8f32fe3..f9a8bb334d 100644
--- a/packages/python/python-pyqt_3.13.bb
+++ b/packages/python/python-pyqt_3.13.bb
@@ -7,7 +7,7 @@ LICENSE = "GPL"
DEPENDS = "virtual/libqte2 virtual/libqpe1"
RDEPENDS = "python-core python-sip"
SRCNAME = "pyqt"
-PR = "ml4"
+PR = "ml5"
SRC_URI = "http://www.vanille.de/mirror/PyQt-x11-gpl-${PV}.tar.gz \
file://qt2-fix.patch;patch=1 \
@@ -55,4 +55,5 @@ do_install() {
done
}
-FILES_${PN} = "${libdir}/${PYTHON_DIR}/site-packages"
+FILES_${PN} += "${libdir}/${PYTHON_DIR}/site-packages"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/.debug"
diff --git a/packages/python/python-pyrex-native_0.9.3.1.bb b/packages/python/python-pyrex-native_0.9.5.1a.bb
index d7ec81fd8e..d7ec81fd8e 100644
--- a/packages/python/python-pyrex-native_0.9.3.1.bb
+++ b/packages/python/python-pyrex-native_0.9.5.1a.bb
diff --git a/packages/python/python-pyrex_0.9.3.1.bb b/packages/python/python-pyrex_0.9.5.1a.bb
index d0a5f826e0..d0a5f826e0 100644
--- a/packages/python/python-pyrex_0.9.3.1.bb
+++ b/packages/python/python-pyrex_0.9.5.1a.bb
diff --git a/packages/python/python-pysqlite2_2.2.2.bb b/packages/python/python-pysqlite2_2.2.2.bb
index 37be3bc0ea..89d4030f5c 100644
--- a/packages/python/python-pysqlite2_2.2.2.bb
+++ b/packages/python/python-pysqlite2_2.2.2.bb
@@ -4,10 +4,15 @@ PRIORITY = "optional"
LICENSE = "PSF"
RDEPENDS = "python-core python-re python-lang python-datetime"
DEPENDS = "sqlite3"
-SRCNAME = "pysqlite"
-PR = "ml1"
+SRCNAME = "pysqlite2"
+PR = "ml2"
-SRC_URI = "http://initd.org/pub/software/pysqlite/releases/2.2/${PV}/${SRCNAME}-${PV}.tar.gz"
-S = "${WORKDIR}/${SRCNAME}-${PV}"
+SRC_URI = "http://initd.org/pub/software/pysqlite/releases/2.2/${PV}/pysqlite-${PV}.tar.gz"
+S = "${WORKDIR}/pysqlite-${PV}"
inherit distutils
+
+do_install_append() {
+ install -d ${D}${docdir}/doc
+ mv ${D}/${datadir}/pysqlite2-doc ${D}${docdir}/${SRCNAME}
+}
diff --git a/packages/python/python-setuptools_0.6c6.bb b/packages/python/python-setuptools_0.6c6.bb
new file mode 100644
index 0000000000..ef56b9b652
--- /dev/null
+++ b/packages/python/python-setuptools_0.6c6.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Download, build, install, upgrade, and uninstall Python packages"
+HOMEPAGE = "http://cheeseshop.python.org/pypi/setuptools"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "MIT-like"
+RDEPENDS = "python-core python-zlib"
+SRCNAME = "setuptools"
+PR = "ml1"
+
+SRC_URI = "http://cheeseshop.python.org/packages/source/s/setuptools/${SRCNAME}-${PV}.tar.gz"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
+do_install_prepend() {
+ install -d ${D}/${libdir}/${PYTHON_DIR}/site-packages
+}
+
+do_stage() {
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ ${STAGING_BINDIR_NATIVE}/python setup.py install
+}
diff --git a/packages/python/python-simplejson_1.7.1.bb b/packages/python/python-simplejson_1.7.1.bb
new file mode 100644
index 0000000000..129f4fb9eb
--- /dev/null
+++ b/packages/python/python-simplejson_1.7.1.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
+HOMEPAGE = "http://cheeseshop.python.org/pypi/simplejson"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "MIT"
+DEPENDS = "python-setuptools"
+# python-netserver is needed for cgi stuff
+# python-zlib is needed to unpack egg created by setuptools
+RDEPENDS = "python-core python-re python-io python-netserver python-zlib"
+SRCNAME = "simplejson"
+PR = "r1"
+
+SRC_URI = "http://cheeseshop.python.org/packages/source/s/simplejson/${SRCNAME}-${PV}.tar.gz"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
diff --git a/packages/python/python_2.4.4.bb b/packages/python/python_2.4.4.bb
index 1a565875c8..6ec186cb83 100644
--- a/packages/python/python_2.4.4.bb
+++ b/packages/python/python_2.4.4.bb
@@ -5,7 +5,7 @@ SECTION = "devel/python"
PRIORITY = "optional"
DEPENDS = "python-native readline zlib gdbm openssl tcl tk"
DEPENDS_sharprom = "python-native readline zlib gdbm openssl"
-PR = "ml0"
+PR = "ml2"
PYTHON_MAJMIN = "2.4"
@@ -68,3 +68,12 @@ RPROVIDES_python-core = "python"
RPROVIDES_python-curses = "python"
PACKAGES =+ "libpython2"
FILES_libpython2 = "${libdir}/libpython*"
+
+# catch all the rest (unsorted)
+PACKAGES += "python-misc"
+FILES_python-misc = "${libdir}/python2.4"
+
+# catch manpage
+PACKAGES += "python-man"
+FILES_python-man = "${datadir}/man"
+
diff --git a/packages/qemu/files/makefile.patch b/packages/qemu/files/makefile.patch
new file mode 100644
index 0000000000..75b5ac9c71
--- /dev/null
+++ b/packages/qemu/files/makefile.patch
@@ -0,0 +1,37 @@
+Index: qemu/Makefile
+===================================================================
+--- qemu.orig/Makefile 2007-07-30 18:25:50.000000000 +0200
++++ qemu/Makefile 2007-07-30 18:26:13.000000000 +0200
+@@ -5,14 +5,14 @@
+ .PHONY: all clean distclean dvi info install install-doc tar tarbin \
+ speed test test2 html dvi info
+
+-CFLAGS=-Wall -O2 -g -fno-strict-aliasing -I.
++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing -I.
+ ifdef CONFIG_DARWIN
+ CFLAGS+= -mdynamic-no-pic
+ endif
+ ifeq ($(ARCH),sparc)
+ CFLAGS+=-mcpu=ultrasparc
+ endif
+-LDFLAGS=-g
++LDFLAGS+=-g
+ LIBS=
+ DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+ TOOLS=qemu-img$(EXESUF)
+Index: qemu/Makefile.target
+===================================================================
+--- qemu.orig/Makefile.target 2007-07-30 18:27:17.000000000 +0200
++++ qemu/Makefile.target 2007-07-30 18:27:23.000000000 +0200
+@@ -17,9 +17,9 @@
+ VPATH+=:$(SRC_PATH)/linux-user
+ DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
+ endif
+-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
++CFLAGS+=-Wall -O2 -g -fno-strict-aliasing
+ #CFLAGS+=-Werror
+-LDFLAGS=-g
++LDFLAGS+=-g
+ LIBS=
+ HELPER_CFLAGS=$(CFLAGS)
+ DYNGEN=../dyngen$(EXESUF)
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
new file mode 100644
index 0000000000..fe1f0945b6
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
@@ -0,0 +1,853 @@
+diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
+--- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-24 16:31:54.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:33:58.000000000 +0200
+@@ -101,6 +101,7 @@
+ darwin_user="no"
+ build_docs="no"
+ uname_release=""
++nptl="yes"
+
+ # OS specific
+ targetos=`uname -s`
+@@ -287,6 +288,8 @@
+ *) echo "undefined SPARC architecture. Exiting";exit 1;;
+ esac
+ ;;
++ --disable-nptl) nptl="no"
++ ;;
+ esac
+ done
+
+@@ -530,6 +533,23 @@
+ }
+ EOF
+
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++ :
++else
++ nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+
+@@ -681,6 +701,7 @@
+ echo "Target Sparc Arch $sparc_cpu"
+ fi
+ echo "kqemu support $kqemu"
++echo "NPTL support $nptl"
+ echo "Documentation $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r $uname_release"
+@@ -1063,6 +1084,14 @@
+ echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
+ fi
+ fi
++else
++ if test "$nptl" = "yes" ; then
++ case "$target_cpu" in
++ arm | armeb)
++ echo "#define USE_NPTL 1" >> $config_h
++ ;;
++ esac
++ fi
+ fi
+
+ if test "$cocoa" = "yes" ; then
+diff -Naru qemu-snapshot-2007-06-24_05.orig/exec-all.h qemu-snapshot-2007-06-24_05/exec-all.h
+--- qemu-snapshot-2007-06-24_05.orig/exec-all.h 2007-05-23 21:58:10.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/exec-all.h 2007-06-24 16:33:58.000000000 +0200
+@@ -360,170 +360,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+
+-#if defined(__powerpc__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+- __asm__ __volatile__ (
+- "0: lwarx %0,0,%1\n"
+- " xor. %0,%3,%0\n"
+- " bne 1f\n"
+- " stwcx. %2,0,%1\n"
+- " bne- 0b\n"
+- "1: "
+- : "=&r" (ret)
+- : "r" (p), "r" (1), "r" (0)
+- : "cr0", "memory");
+- return ret;
+-}
+-#elif defined(__i386__)
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#elif defined(__x86_64__)
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#elif defined(__s390__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
+- " jl 0b"
+- : "=&d" (ret)
+- : "r" (1), "a" (p), "0" (*p)
+- : "cc", "memory" );
+- return ret;
+-}
+-#elif defined(__alpha__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+- unsigned long one;
+-
+- __asm__ __volatile__ ("0: mov 1,%2\n"
+- " ldl_l %0,%1\n"
+- " stl_c %2,%1\n"
+- " beq %2,1f\n"
+- ".subsection 2\n"
+- "1: br 0b\n"
+- ".previous"
+- : "=r" (ret), "=m" (*p), "=r" (one)
+- : "m" (*p));
+- return ret;
+-}
+-#elif defined(__sparc__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__("ldstub [%1], %0"
+- : "=r" (ret)
+- : "r" (p)
+- : "memory");
+-
+- return (ret ? 1 : 0);
+-}
+-#elif defined(__arm__)
+-static inline int testandset (int *spinlock)
+-{
+- register unsigned int ret;
+- __asm__ __volatile__("swp %0, %1, [%2]"
+- : "=r"(ret)
+- : "0"(1), "r"(spinlock));
+-
+- return ret;
+-}
+-#elif defined(__mc68000)
+-static inline int testandset (int *p)
+-{
+- char ret;
+- __asm__ __volatile__("tas %1; sne %0"
+- : "=r" (ret)
+- : "m" (p)
+- : "cc","memory");
+- return ret;
+-}
+-#elif defined(__ia64)
+-
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+- return __sync_lock_test_and_set (p, 1);
+-}
+-#elif defined(__mips__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ (
+- " .set push \n"
+- " .set noat \n"
+- " .set mips2 \n"
+- "1: li $1, 1 \n"
+- " ll %0, %1 \n"
+- " sc $1, %1 \n"
+- " beqz $1, 1b \n"
+- " .set pop "
+- : "=r" (ret), "+R" (*p)
+- :
+- : "memory");
+-
+- return ret;
+-}
+-#else
+-#error unimplemented CPU support
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+- while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+- *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+
+ extern spinlock_t tb_lock;
+
+diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h
+--- qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h 2005-04-27 22:11:21.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h 2007-06-24 16:33:58.000000000 +0200
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE 0x900000
+ #define ARM_THUMB_SYSCALL 0
+
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE 0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls (ARM_NR_BASE + 5)
+
+ #define ARM_NR_semihosting 0x123456
+ #define ARM_NR_thumb_semihosting 0xAB
+diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/main.c qemu-snapshot-2007-06-24_05/linux-user/main.c
+--- qemu-snapshot-2007-06-24_05.orig/linux-user/main.c 2007-06-22 00:55:02.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/linux-user/main.c 2007-06-24 16:33:58.000000000 +0200
+@@ -325,6 +325,50 @@
+ }
+ }
+
++/* Handle a jump to the kernel code page. */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++ uint32_t addr;
++ uint32_t *ptr;
++ uint32_t cpsr;
++
++ switch (env->regs[15]) {
++ case 0xffff0fc0: /* __kernel_cmpxchg */
++ /* XXX: This only works between threads, not between processes.
++ Use native atomic operations. */
++ /* ??? This probably breaks horribly if the access segfaults. */
++ cpu_lock();
++ ptr = (uint32_t *)env->regs[2];
++ cpsr = cpsr_read(env);
++ if (*ptr == env->regs[0]) {
++ *ptr = env->regs[1];
++ env->regs[0] = 0;
++ cpsr |= CPSR_C;
++ } else {
++ env->regs[0] = -1;
++ cpsr &= ~CPSR_C;
++ }
++ cpsr_write(env, cpsr, CPSR_C);
++ cpu_unlock();
++ break;
++ case 0xffff0fe0: /* __kernel_get_tls */
++ env->regs[0] = env->cp15.c13_tls;
++ break;
++ default:
++ return 1;
++ }
++ /* Jump back to the caller. */
++ addr = env->regs[14];
++ if (addr & 1) {
++ env->thumb = 1;
++ addr &= ~1;
++ }
++ env->regs[15] = addr;
++
++ return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+ int trapnr;
+@@ -381,10 +425,8 @@
+ }
+ }
+
+- if (n == ARM_NR_cacheflush) {
+- arm_cache_flush(env->regs[0], env->regs[1]);
+- } else if (n == ARM_NR_semihosting
+- || n == ARM_NR_thumb_semihosting) {
++ if (n == ARM_NR_semihosting
++ || n == ARM_NR_thumb_semihosting) {
+ env->regs[0] = do_arm_semihosting (env);
+ } else if (n == 0 || n >= ARM_SYSCALL_BASE
+ || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -395,14 +437,34 @@
+ n -= ARM_SYSCALL_BASE;
+ env->eabi = 0;
+ }
+- env->regs[0] = do_syscall(env,
+- n,
+- env->regs[0],
+- env->regs[1],
+- env->regs[2],
+- env->regs[3],
+- env->regs[4],
+- env->regs[5]);
++ if ( n > ARM_NR_BASE) {
++ switch (n)
++ {
++ case ARM_NR_cacheflush:
++ arm_cache_flush(env->regs[0], env->regs[1]);
++ break;
++#ifdef USE_NPTL
++ case ARM_NR_set_tls:
++ cpu_set_tls(env, env->regs[0]);
++ env->regs[0] = 0;
++ break;
++#endif
++ default:
++ printf ("Error: Bad syscall: %x\n", n);
++ goto error;
++ }
++ }
++ else
++ {
++ env->regs[0] = do_syscall(env,
++ n,
++ env->regs[0],
++ env->regs[1],
++ env->regs[2],
++ env->regs[3],
++ env->regs[4],
++ env->regs[5]);
++ }
+ } else {
+ goto error;
+ }
+@@ -441,6 +503,10 @@
+ }
+ }
+ break;
++ case EXCP_KERNEL_TRAP:
++ if (do_kernel_trap(env))
++ goto error;
++ break;
+ default:
+ error:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+@@ -2074,6 +2140,10 @@
+ ts->heap_base = info->brk;
+ /* This will be filled in on the first SYS_HEAPINFO call. */
+ ts->heap_limit = 0;
++ /* Register the magic kernel code page. The cpu will generate a
++ special exception when it tries to execute code here. We can't
++ put real code here because it may be in use by the host kernel. */
++ page_set_flags(0xffff0000, 0xffff0fff, 0);
+ #endif
+
+ if (gdbstub_port) {
+diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h qemu-snapshot-2007-06-24_05/linux-user/qemu.h
+--- qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h 2007-05-26 17:09:38.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/linux-user/qemu.h 2007-06-24 16:33:58.000000000 +0200
+@@ -81,6 +81,9 @@
+ uint32_t heap_limit;
+ #endif
+ int used; /* non zero if used */
++#ifdef USE_NPTL
++ uint32_t *child_tidptr;
++#endif
+ struct image_info *info;
+ uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c qemu-snapshot-2007-06-24_05/linux-user/syscall.c
+--- qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c 2007-06-21 23:57:11.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/linux-user/syscall.c 2007-06-24 16:33:58.000000000 +0200
+@@ -70,9 +70,18 @@
+ #include <linux/kd.h>
+
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+
+ //#define DEBUG
+
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values. */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+ || defined(TARGET_M68K) || defined(TARGET_SH4)
+ /* 16 bit uid wrappers emulation */
+@@ -2121,20 +2130,38 @@
+ thread/process */
+ #define NEW_STACK_SIZE 8192
+
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+ CPUState *env = arg;
++#ifdef HAVE_NPTL
++ /* Wait until the parent has finshed initializing the tls state. */
++ while (!spin_trylock(&nptl_lock))
++ usleep(1);
++ spin_unlock(&nptl_lock);
++#endif
+ cpu_loop(env);
+ /* never exits */
+ return 0;
+ }
+
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++ uint32_t *parent_tidptr, void *newtls,
++ uint32_t *child_tidptr)
+ {
+ int ret;
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
++#ifdef USE_NPTL
++ unsigned int nptl_flags;
++
++ if (flags & CLONE_PARENT_SETTID)
++ *parent_tidptr = gettid();
++#endif
+
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -2201,16 +2228,60 @@
+ #error unsupported target CPU
+ #endif
+ new_env->opaque = ts;
++#ifdef USE_NPTL
++ nptl_flags = flags;
++ flags &= ~CLONE_NPTL_FLAGS2;
++ if (nptl_flags & CLONE_CHILD_CLEARTID) {
++ ts->child_tidptr = child_tidptr;
++ }
++ if (nptl_flags & CLONE_SETTLS)
++ cpu_set_tls (new_env, newtls);
++ /* Grab the global cpu lock so that the thread setup appears
++ atomic. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_lock(&nptl_lock);
++#else
++ if (flags & CLONE_NPTL_FLAGS2)
++ return -EINVAL;
++#endif
++
+ #ifdef __ia64__
+ ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++ if (ret != -1) {
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ *child_tidptr = ret;
++ }
++ /* Allow the child to continue. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_unlock(&nptl_lock);
++#endif
+ } else {
+- /* if no CLONE_VM, we consider it is a fork */
+- if ((flags & ~CSIGNAL) != 0)
+- return -EINVAL;
+- ret = fork();
++ /* if no CLONE_VM, we consider it is a fork */
++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
++ return -EINVAL;
++ ret = fork();
++#ifdef USE_NPTL
++ /* There is a race condition here. The parent process could
++ theoretically read the TID in the child process before the child
++ tid is set. This would require using either ptrace
++ (not implemented) or having *_tidptr to point at a shared memory
++ mapping. We can't repeat the spinlock hack used above because
++ the child process gets its own copy of the lock. */
++ if (ret == 0) {
++ /* Child Process. */
++ if (flags & CLONE_CHILD_SETTID)
++ *child_tidptr = gettid();
++ ts = (TaskState *)env->opaque;
++ if (flags & CLONE_CHILD_CLEARTID)
++ ts->child_tidptr = child_tidptr;
++ if (flags & CLONE_SETTLS)
++ cpu_set_tls (env, newtls);
++ }
++#endif
+ }
+ return ret;
+ }
+@@ -2487,7 +2558,7 @@
+ ret = do_brk(arg1);
+ break;
+ case TARGET_NR_fork:
+- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+ break;
+ #ifdef TARGET_NR_waitpid
+ case TARGET_NR_waitpid:
+@@ -3651,7 +3722,8 @@
+ ret = get_errno(fsync(arg1));
+ break;
+ case TARGET_NR_clone:
+- ret = get_errno(do_fork(cpu_env, arg1, arg2));
++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++ (void *)arg4, (uint32_t *)arg5));
+ break;
+ #ifdef __NR_exit_group
+ /* new thread calls */
+@@ -4039,7 +4111,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+ case TARGET_NR_vfork:
+- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++ NULL, NULL, NULL));
+ break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -4632,4 +4705,3 @@
+ #endif
+ return ret;
+ }
+-
+diff -Naru qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h qemu-snapshot-2007-06-24_05/qemu_spinlock.h
+--- qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h 1970-01-01 01:00:00.000000000 +0100
++++ qemu-snapshot-2007-06-24_05/qemu_spinlock.h 2007-06-24 16:33:58.000000000 +0200
+@@ -0,0 +1,182 @@
++/*
++ * internal execution defines for qemu
++ *
++ * Copyright (c) 2003 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _QEMU_SPINLOCK_H
++#define _QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++ int ret;
++ __asm__ __volatile__ (
++ "0: lwarx %0,0,%1\n"
++ " xor. %0,%3,%0\n"
++ " bne 1f\n"
++ " stwcx. %2,0,%1\n"
++ " bne- 0b\n"
++ "1: "
++ : "=&r" (ret)
++ : "r" (p), "r" (1), "r" (0)
++ : "cr0", "memory");
++ return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
++ " jl 0b"
++ : "=&d" (ret)
++ : "r" (1), "a" (p), "0" (*p)
++ : "cc", "memory" );
++ return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++ int ret;
++ unsigned long one;
++
++ __asm__ __volatile__ ("0: mov 1,%2\n"
++ " ldl_l %0,%1\n"
++ " stl_c %2,%1\n"
++ " beq %2,1f\n"
++ ".subsection 2\n"
++ "1: br 0b\n"
++ ".previous"
++ : "=r" (ret), "=m" (*p), "=r" (one)
++ : "m" (*p));
++ return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__("ldstub [%1], %0"
++ : "=r" (ret)
++ : "r" (p)
++ : "memory");
++
++ return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++ register unsigned int ret;
++ __asm__ __volatile__("swp %0, %1, [%2]"
++ : "=r"(ret)
++ : "0"(1), "r"(spinlock));
++
++ return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++ char ret;
++ __asm__ __volatile__("tas %1; sne %0"
++ : "=r" (ret)
++ : "m" (p)
++ : "cc","memory");
++ return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++ return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++ while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++ *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return 1;
++}
++#endif
++
++#endif /* ! _QEMU_SPINLOCK_H */
+diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h qemu-snapshot-2007-06-24_05/target-arm/cpu.h
+--- qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h 2007-06-03 23:02:37.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/target-arm/cpu.h 2007-06-24 16:33:58.000000000 +0200
+@@ -37,6 +37,9 @@
+ #define EXCP_IRQ 5
+ #define EXCP_FIQ 6
+ #define EXCP_BKPT 7
++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
++
++
+
+ typedef void ARMWriteCPFunc(void *opaque, int cp_info,
+ int srcreg, int operand, uint32_t value);
+@@ -97,6 +100,7 @@
+ uint32_t c9_data;
+ uint32_t c13_fcse; /* FCSE PID. */
+ uint32_t c13_context; /* Context ID. */
++ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
+ uint32_t c15_cpar; /* XScale Coprocessor Access Register */
+ } cp15;
+
+@@ -169,6 +173,15 @@
+ int cpu_arm_signal_handler(int host_signum, void *pinfo,
+ void *puc);
+
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++ env->cp15.c13_tls = (uint32_t)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -180,7 +193,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value. */
+diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h qemu-snapshot-2007-06-24_05/target-arm/exec.h
+--- qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h 2007-06-03 19:44:36.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/target-arm/exec.h 2007-06-24 16:33:58.000000000 +0200
+@@ -68,8 +68,6 @@
+
+ /* In op_helper.c */
+
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp(CPUState *, uint32_t);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/op.c qemu-snapshot-2007-06-24_05/target-arm/op.c
+--- qemu-snapshot-2007-06-24_05.orig/target-arm/op.c 2007-05-21 19:48:01.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/target-arm/op.c 2007-06-24 16:33:58.000000000 +0200
+@@ -891,6 +891,12 @@
+ cpu_loop_exit();
+ }
+
++void OPPROTO op_kernel_trap(void)
++{
++ env->exception_index = EXCP_KERNEL_TRAP;
++ cpu_loop_exit();
++}
++
+ /* VFP support. We follow the convention used for VFP instrunctions:
+ Single precition routines have a "s" suffix, double precision a
+ "d" suffix. */
+diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c qemu-snapshot-2007-06-24_05/target-arm/translate.c
+--- qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c 2007-06-11 20:59:35.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/target-arm/translate.c 2007-06-24 16:33:58.000000000 +0200
+@@ -3513,6 +3513,7 @@
+ s->is_jmp = DISAS_JUMP;
+ }
+
++
+ /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
+ basic block 'tb'. If search_pc is TRUE, also generate PC
+ information for each intermediate instruction. */
+@@ -3548,6 +3549,15 @@
+ nb_gen_labels = 0;
+ lj = -1;
+ do {
++#ifdef CONFIG_USER_ONLY
++ /* Intercept jump to the magic kernel page. */
++ if (dc->pc > 0xffff0000) {
++ gen_op_kernel_trap();
++ dc->is_jmp = DISAS_UPDATE;
++ break;
++ }
++#endif
++
+ if (env->nb_breakpoints > 0) {
+ for(j = 0; j < env->nb_breakpoints; j++) {
+ if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
new file mode 100644
index 0000000000..d92f6a8264
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
@@ -0,0 +1,12 @@
+diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
+--- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-23 18:03:35.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:30:32.000000000 +0200
+@@ -711,7 +711,7 @@
+ echo "CC=$cc" >> $config_mak
+ echo "HOST_CC=$host_cc" >> $config_mak
+ echo "AR=$ar" >> $config_mak
+-echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
++echo "STRIP=$strip" >> $config_mak
+ echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
+ echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak
+ echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
new file mode 100644
index 0000000000..3ad4115e73
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
@@ -0,0 +1,217 @@
+diff -Naru qemu-neo1973.orig/hw/pl110.c qemu-neo1973/hw/pl110.c
+--- qemu-neo1973.orig/hw/pl110.c 2007-06-24 13:56:37.000000000 +0200
++++ qemu-neo1973/hw/pl110.c 2007-06-24 14:12:09.000000000 +0200
+@@ -10,6 +10,7 @@
+ #include "vl.h"
+
+ #define PL110_CR_EN 0x001
++#define PL110_CR_BGR 0x100
+ #define PL110_CR_BEBO 0x200
+ #define PL110_CR_BEPO 0x400
+ #define PL110_CR_PWR 0x800
+@@ -114,6 +115,7 @@
+ int first, last = 0;
+ int dirty, new_dirty;
+ int i;
++ int bpp_offset;
+
+ if (!pl110_enabled(s))
+ return;
+@@ -145,12 +147,17 @@
+ fprintf(stderr, "pl110: Bad color depth\n");
+ exit(1);
+ }
++ if (s->cr & PL110_CR_BGR)
++ bpp_offset = 0;
++ else
++ bpp_offset = 18;
++
+ if (s->cr & PL110_CR_BEBO)
+- fn = fntable[s->bpp + 6];
++ fn = fntable[s->bpp + 6 + bpp_offset];
+ else if (s->cr & PL110_CR_BEPO)
+- fn = fntable[s->bpp + 12];
++ fn = fntable[s->bpp + 12 + bpp_offset];
+ else
+- fn = fntable[s->bpp];
++ fn = fntable[s->bpp + bpp_offset];
+
+ src_width = s->cols;
+ switch (s->bpp) {
+diff -Naru qemu-neo1973.orig/hw/pl110_template.h qemu-neo1973/hw/pl110_template.h
+--- qemu-neo1973.orig/hw/pl110_template.h 2007-06-24 13:56:37.000000000 +0200
++++ qemu-neo1973/hw/pl110_template.h 2007-06-24 14:12:09.000000000 +0200
+@@ -24,6 +24,16 @@
+ #error unknown bit depth
+ #endif
+
++#undef RGB
++#define BORDER bgr
++#define ORDER 0
++#include "pl110_template.h"
++#define ORDER 1
++#include "pl110_template.h"
++#define ORDER 2
++#include "pl110_template.h"
++#define RGB
++#define BORDER rgb
+ #define ORDER 0
+ #include "pl110_template.h"
+ #define ORDER 1
+@@ -33,26 +43,47 @@
+
+ static drawfn glue(pl110_draw_fn_,BITS)[18] =
+ {
+- glue(pl110_draw_line1_lblp,BITS),
+- glue(pl110_draw_line2_lblp,BITS),
+- glue(pl110_draw_line4_lblp,BITS),
+- glue(pl110_draw_line8_lblp,BITS),
+- glue(pl110_draw_line16_lblp,BITS),
+- glue(pl110_draw_line32_lblp,BITS),
+-
+- glue(pl110_draw_line1_bbbp,BITS),
+- glue(pl110_draw_line2_bbbp,BITS),
+- glue(pl110_draw_line4_bbbp,BITS),
+- glue(pl110_draw_line8_bbbp,BITS),
+- glue(pl110_draw_line16_bbbp,BITS),
+- glue(pl110_draw_line32_bbbp,BITS),
+-
+- glue(pl110_draw_line1_lbbp,BITS),
+- glue(pl110_draw_line2_lbbp,BITS),
+- glue(pl110_draw_line4_lbbp,BITS),
+- glue(pl110_draw_line8_lbbp,BITS),
+- glue(pl110_draw_line16_lbbp,BITS),
+- glue(pl110_draw_line32_lbbp,BITS)
++ glue(pl110_draw_line1_lblp_bgr,BITS),
++ glue(pl110_draw_line2_lblp_bgr,BITS),
++ glue(pl110_draw_line4_lblp_bgr,BITS),
++ glue(pl110_draw_line8_lblp_bgr,BITS),
++ glue(pl110_draw_line16_lblp_bgr,BITS),
++ glue(pl110_draw_line32_lblp_bgr,BITS),
++
++ glue(pl110_draw_line1_bbbp_bgr,BITS),
++ glue(pl110_draw_line2_bbbp_bgr,BITS),
++ glue(pl110_draw_line4_bbbp_bgr,BITS),
++ glue(pl110_draw_line8_bbbp_bgr,BITS),
++ glue(pl110_draw_line16_bbbp_bgr,BITS),
++ glue(pl110_draw_line32_bbbp_bgr,BITS),
++
++ glue(pl110_draw_line1_lbbp_bgr,BITS),
++ glue(pl110_draw_line2_lbbp_bgr,BITS),
++ glue(pl110_draw_line4_lbbp_bgr,BITS),
++ glue(pl110_draw_line8_lbbp_bgr,BITS),
++ glue(pl110_draw_line16_lbbp_bgr,BITS),
++ glue(pl110_draw_line32_lbbp_bgr,BITS),
++
++ glue(pl110_draw_line1_lblp_rgb,BITS),
++ glue(pl110_draw_line2_lblp_rgb,BITS),
++ glue(pl110_draw_line4_lblp_rgb,BITS),
++ glue(pl110_draw_line8_lblp_rgb,BITS),
++ glue(pl110_draw_line16_lblp_rgb,BITS),
++ glue(pl110_draw_line32_lblp_rgb,BITS),
++
++ glue(pl110_draw_line1_bbbp_rgb,BITS),
++ glue(pl110_draw_line2_bbbp_rgb,BITS),
++ glue(pl110_draw_line4_bbbp_rgb,BITS),
++ glue(pl110_draw_line8_bbbp_rgb,BITS),
++ glue(pl110_draw_line16_bbbp_rgb,BITS),
++ glue(pl110_draw_line32_bbbp_rgb,BITS),
++
++ glue(pl110_draw_line1_lbbp_rgb,BITS),
++ glue(pl110_draw_line2_lbbp_rgb,BITS),
++ glue(pl110_draw_line4_lbbp_rgb,BITS),
++ glue(pl110_draw_line8_lbbp_rgb,BITS),
++ glue(pl110_draw_line16_lbbp_rgb,BITS),
++ glue(pl110_draw_line32_lbbp_rgb,BITS),
+ };
+
+ #undef BITS
+@@ -61,18 +92,18 @@
+ #else
+
+ #if ORDER == 0
+-#define NAME glue(lblp, BITS)
++#define NAME glue(glue(lblp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #elif ORDER == 1
+-#define NAME glue(bbbp, BITS)
++#define NAME glue(glue(bbbp_, BORDER), BITS)
+ #ifndef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+ #else
+ #define SWAP_PIXELS 1
+-#define NAME glue(lbbp, BITS)
++#define NAME glue(glue(lbbp_, BORDER), BITS)
+ #ifdef WORDS_BIGENDIAN
+ #define SWAP_WORDS 1
+ #endif
+@@ -195,27 +226,34 @@
+ #ifdef SWAP_WORDS
+ data = bswap32(data);
+ #endif
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #if 0
+- r = data & 0x1f;
++ LSB = data & 0x1f;
+ data >>= 5;
+ g = data & 0x3f;
+ data >>= 6;
+- b = data & 0x1f;
++ MSB = data & 0x1f;
+ data >>= 5;
+ #else
+- r = (data & 0x1f) << 3;
++ LSB = (data & 0x1f) << 3;
+ data >>= 5;
+ g = (data & 0x3f) << 2;
+ data >>= 6;
+- b = (data & 0x1f) << 3;
++ MSB = (data & 0x1f) << 3;
+ data >>= 5;
+ #endif
+ COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+- r = (data & 0x1f) << 3;
++ LSB = (data & 0x1f) << 3;
+ data >>= 5;
+ g = (data & 0x3f) << 2;
+ data >>= 6;
+- b = (data & 0x1f) << 3;
++ MSB = (data & 0x1f) << 3;
+ data >>= 5;
+ COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+ width -= 2;
+@@ -229,14 +267,21 @@
+ unsigned int r, g, b;
+ while (width > 0) {
+ data = *(uint32_t *)src;
++#ifdef RGB
++#define LSB r
++#define MSB b
++#else
++#define LSB b
++#define MSB r
++#endif
+ #ifdef SWAP_WORDS
+- r = data & 0xff;
++ LSB = data & 0xff;
+ g = (data >> 8) & 0xff;
+- b = (data >> 16) & 0xff;
++ MSB = (data >> 16) & 0xff;
+ #else
+- r = (data >> 24) & 0xff;
++ LSB = (data >> 24) & 0xff;
+ g = (data >> 16) & 0xff;
+- b = (data >> 8) & 0xff;
++ MSB = (data >> 8) & 0xff;
+ #endif
+ COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
+ width--;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
new file mode 100644
index 0000000000..189cd09b67
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
@@ -0,0 +1,881 @@
+diff -Naru qemu-neo1973.orig/dyngen.c qemu-neo1973/dyngen.c
+--- qemu-neo1973.orig/dyngen.c 2007-06-24 13:56:38.000000000 +0200
++++ qemu-neo1973/dyngen.c 2007-06-24 14:33:11.000000000 +0200
+@@ -32,6 +32,8 @@
+
+ #include "config-host.h"
+
++//#define DEBUG_OP
++
+ /* NOTE: we test CONFIG_WIN32 instead of _WIN32 to enabled cross
+ compilation */
+ #if defined(CONFIG_WIN32)
+@@ -1429,6 +1431,644 @@
+ #endif
+
+
++#if defined(HOST_I386) || defined(HOST_X86_64)
++
++/* This byte is the first byte of an instruction. */
++#define FLAG_INSN (1 << 0)
++/* This byte has been processed as part of an instruction. */
++#define FLAG_SCANNED (1 << 1)
++/* This instruction is a return instruction. Gcc cometimes generates prefix
++ bytes, so may be more than one byte long. */
++#define FLAG_RET (1 << 2)
++/* This is either the target of a jump, or the preceeding instruction uses
++ a pc-relative offset. */
++#define FLAG_TARGET (1 << 3)
++/* This is a magic instruction that needs fixing up. */
++#define FLAG_EXIT (1 << 4)
++#define MAX_EXITS 5
++
++static void
++bad_opcode(const char *name, uint32_t op)
++{
++ error("Unsupported opcode %0*x in %s", (op > 0xff) ? 4 : 2, op, name);
++}
++
++/* Mark len bytes as scanned, Returns insn_size + len. Reports an error
++ if these bytes have already been scanned. */
++static int
++eat_bytes(const char *name, char *flags, int insn, int insn_size, int len)
++{
++ while (len > 0) {
++ /* This should never occur in sane code. */
++ if (flags[insn + insn_size] & FLAG_SCANNED)
++ error ("Overlapping instructions in %s", name);
++ flags[insn + insn_size] |= FLAG_SCANNED;
++ insn_size++;
++ len--;
++ }
++ return insn_size;
++}
++
++static void
++trace_i386_insn (const char *name, uint8_t *start_p, char *flags, int insn,
++ int len)
++{
++ uint8_t *ptr;
++ uint8_t op;
++ int modrm;
++ int is_prefix;
++ int op_size;
++ int addr_size;
++ int insn_size;
++ int is_ret;
++ int is_condjmp;
++ int is_jmp;
++ int is_exit;
++ int is_pcrel;
++ int immed;
++ int seen_rexw;
++ int32_t disp;
++
++ ptr = start_p + insn;
++ /* nonzero if this insn has a ModR/M byte. */
++ modrm = 1;
++ /* The size of the immediate value in this instruction. */
++ immed = 0;
++ /* The operand size. */
++ op_size = 4;
++ /* The address size */
++ addr_size = 4;
++ /* The total length of this instruction. */
++ insn_size = 0;
++ is_prefix = 1;
++ is_ret = 0;
++ is_condjmp = 0;
++ is_jmp = 0;
++ is_exit = 0;
++ seen_rexw = 0;
++ is_pcrel = 0;
++
++ while (is_prefix) {
++ op = ptr[insn_size];
++ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
++ is_prefix = 0;
++ switch (op >> 4) {
++ case 0:
++ case 1:
++ case 2:
++ case 3:
++ if (op == 0x0f) {
++ /* two-byte opcode. */
++ op = ptr[insn_size];
++ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
++ switch (op >> 4) {
++ case 0:
++ if ((op & 0xf) > 3)
++ modrm = 0;
++ break;
++ case 1: /* vector move or prefetch */
++ case 2: /* various moves and vector compares. */
++ case 4: /* cmov */
++ case 5: /* vector instructions */
++ case 6:
++ case 13:
++ case 14:
++ case 15:
++ break;
++ case 7: /* mmx */
++ if (op & 0x77) /* emms */
++ modrm = 0;
++ break;
++ case 3: /* wrmsr, rdtsc, rdmsr, rdpmc, sysenter, sysexit */
++ modrm = 0;
++ break;
++ case 8: /* long conditional jump */
++ is_condjmp = 1;
++ immed = op_size;
++ modrm = 0;
++ break;
++ case 9: /* setcc */
++ break;
++ case 10:
++ switch (op & 0x7) {
++ case 0: /* push fs/gs */
++ case 1: /* pop fs/gs */
++ case 2: /* cpuid/rsm */
++ modrm = 0;
++ break;
++ case 4: /* shld/shrd immediate */
++ immed = 1;
++ break;
++ default: /* Normal instructions with a ModR/M byte. */
++ break;
++ }
++ break;
++ case 11:
++ switch (op & 0xf) {
++ case 10: /* bt, bts, btr, btc */
++ immed = 1;
++ break;
++ default:
++ /* cmpxchg, lss, btr, lfs, lgs, movzx, btc, bsf, bsr
++ undefined, and movsx */
++ break;
++ }
++ break;
++ case 12:
++ if (op & 8) {
++ /* bswap */
++ modrm = 0;
++ } else {
++ switch (op & 0x7) {
++ case 2:
++ case 4:
++ case 5:
++ case 6:
++ immed = 1;
++ break;
++ default:
++ break;
++ }
++ }
++ break;
++ }
++ } else if ((op & 0x07) <= 0x3) {
++ /* General arithmentic ax. */
++ } else if ((op & 0x07) <= 0x5) {
++ /* General arithmetic ax, immediate. */
++ if (op & 0x01)
++ immed = op_size;
++ else
++ immed = 1;
++ modrm = 0;
++ } else if ((op & 0x23) == 0x22) {
++ /* Segment prefix. */
++ is_prefix = 1;
++ } else {
++ /* Segment register push/pop or DAA/AAA/DAS/AAS. */
++ modrm = 0;
++ }
++ break;
++
++#if defined(HOST_X86_64)
++ case 4: /* rex prefix. */
++ is_prefix = 1;
++ /* The address/operand size is actually 64-bit, but the immediate
++ values in the instruction are still 32-bit. */
++ op_size = 4;
++ addr_size = 4;
++ if (op & 8)
++ seen_rexw = 1;
++ break;
++#else
++ case 4: /* inc/dec register. */
++#endif
++ case 5: /* push/pop general register. */
++ modrm = 0;
++ break;
++
++ case 6:
++ switch (op & 0x0f) {
++ case 0: /* pusha */
++ case 1: /* popa */
++ modrm = 0;
++ break;
++ case 2: /* bound */
++ case 3: /* arpl */
++ break;
++ case 4: /* FS */
++ case 5: /* GS */
++ is_prefix = 1;
++ break;
++ case 6: /* opcode size prefix. */
++ op_size = 2;
++ is_prefix = 1;
++ break;
++ case 7: /* Address size prefix. */
++ addr_size = 2;
++ is_prefix = 1;
++ break;
++ case 8: /* push immediate */
++ immed = op_size;
++ modrm = 0;
++ break;
++ case 10: /* push 8-bit immediate */
++ immed = 1;
++ modrm = 0;
++ break;
++ case 9: /* imul immediate */
++ immed = op_size;
++ break;
++ case 11: /* imul 8-bit immediate */
++ immed = 1;
++ break;
++ case 12: /* insb */
++ case 13: /* insw */
++ case 14: /* outsb */
++ case 15: /* outsw */
++ modrm = 0;
++ break;
++ }
++ break;
++
++ case 7: /* Short conditional jump. */
++ is_condjmp = 1;
++ immed = 1;
++ modrm = 0;
++ break;
++
++ case 8:
++ if ((op & 0xf) <= 3) {
++ /* arithmetic immediate. */
++ if ((op & 3) == 1)
++ immed = op_size;
++ else
++ immed = 1;
++ }
++ /* else test, xchg, mov, lea or pop general. */
++ break;
++
++ case 9:
++ /* Various single-byte opcodes with no modrm byte. */
++ modrm = 0;
++ if (op == 10) {
++ /* Call */
++ immed = 4;
++ }
++ break;
++
++ case 10:
++ switch ((op & 0xe) >> 1) {
++ case 0: /* mov absoliute immediate. */
++ case 1:
++ if (seen_rexw)
++ immed = 8;
++ else
++ immed = addr_size;
++ break;
++ case 4: /* test immediate. */
++ if (op & 1)
++ immed = op_size;
++ else
++ immed = 1;
++ break;
++ default: /* Various string ops. */
++ break;
++ }
++ modrm = 0;
++ break;
++
++ case 11: /* move immediate to register */
++ if (op & 8) {
++ if (seen_rexw)
++ immed = 8;
++ else
++ immed = op_size;
++ } else {
++ immed = 1;
++ }
++ modrm = 0;
++ break;
++
++ case 12:
++ switch (op & 0xf) {
++ case 0: /* shift immediate */
++ case 1:
++ immed = 1;
++ break;
++ case 2: /* ret immediate */
++ immed = 2;
++ modrm = 0;
++ bad_opcode(name, op);
++ break;
++ case 3: /* ret */
++ modrm = 0;
++ is_ret = 1;
++ case 4: /* les */
++ case 5: /* lds */
++ break;
++ case 6: /* mov immediate byte */
++ immed = 1;
++ break;
++ case 7: /* mov immediate */
++ immed = op_size;
++ break;
++ case 8: /* enter */
++ /* TODO: Is this right? */
++ immed = 3;
++ modrm = 0;
++ break;
++ case 10: /* retf immediate */
++ immed = 2;
++ modrm = 0;
++ bad_opcode(name, op);
++ break;
++ case 13: /* int */
++ immed = 1;
++ modrm = 0;
++ break;
++ case 11: /* retf */
++ case 15: /* iret */
++ modrm = 0;
++ bad_opcode(name, op);
++ break;
++ default: /* leave, int3 or into */
++ modrm = 0;
++ break;
++ }
++ break;
++
++ case 13:
++ if ((op & 0xf) >= 8) {
++ /* Coprocessor escape. For our purposes this is just a normal
++ instruction with a ModR/M byte. */
++ } else if ((op & 0xf) >= 4) {
++ /* AAM, AAD or XLAT */
++ modrm = 0;
++ }
++ /* else shift instruction */
++ break;
++
++ case 14:
++ switch ((op & 0xc) >> 2) {
++ case 0: /* loop or jcxz */
++ is_condjmp = 1;
++ immed = 1;
++ break;
++ case 1: /* in/out immed */
++ immed = 1;
++ break;
++ case 2: /* call or jmp */
++ switch (op & 3) {
++ case 0: /* call */
++ immed = op_size;
++ break;
++ case 1: /* long jump */
++ immed = 4;
++ is_jmp = 1;
++ break;
++ case 2: /* far jmp */
++ bad_opcode(name, op);
++ break;
++ case 3: /* short jmp */
++ immed = 1;
++ is_jmp = 1;
++ break;
++ }
++ break;
++ case 3: /* in/out register */
++ break;
++ }
++ modrm = 0;
++ break;
++
++ case 15:
++ switch ((op & 0xe) >> 1) {
++ case 0:
++ case 1:
++ is_prefix = 1;
++ break;
++ case 2:
++ case 4:
++ case 5:
++ case 6:
++ modrm = 0;
++ /* Some privileged insns are used as markers. */
++ switch (op) {
++ case 0xf4: /* hlt: Exit translation block. */
++ is_exit = 1;
++ break;
++ case 0xfa: /* cli: Jump to label. */
++ is_exit = 1;
++ immed = 4;
++ break;
++ case 0xfb: /* sti: TB patch jump. */
++ /* Mark the insn for patching, but continue sscanning. */
++ flags[insn] |= FLAG_EXIT;
++ immed = 4;
++ break;
++ }
++ break;
++ case 3: /* unary grp3 */
++ if ((ptr[insn_size] & 0x38) == 0) {
++ if (op == 0xf7)
++ immed = op_size;
++ else
++ immed = 1; /* test immediate */
++ }
++ break;
++ case 7: /* inc/dec grp4/5 */
++ /* TODO: This includes indirect jumps. We should fail if we
++ encounter one of these. */
++ break;
++ }
++ break;
++ }
++ }
++
++ if (modrm) {
++ if (addr_size != 4)
++ error("16-bit addressing mode used in %s", name);
++
++ disp = 0;
++ modrm = ptr[insn_size];
++ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
++ modrm &= 0xc7;
++ switch ((modrm & 0xc0) >> 6) {
++ case 0:
++ if (modrm == 5)
++ disp = 4;
++ break;
++ case 1:
++ disp = 1;
++ break;
++ case 2:
++ disp = 4;
++ break;
++ }
++ if ((modrm & 0xc0) != 0xc0 && (modrm & 0x7) == 4) {
++ /* SIB byte */
++ if (modrm == 4 && (ptr[insn_size] & 0x7) == 5) {
++ disp = 4;
++ is_pcrel = 1;
++ }
++ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
++ }
++ insn_size = eat_bytes(name, flags, insn, insn_size, disp);
++ }
++ insn_size = eat_bytes(name, flags, insn, insn_size, immed);
++ if (is_condjmp || is_jmp) {
++ if (immed == 1) {
++ disp = (int8_t)*(ptr + insn_size - 1);
++ } else {
++ disp = (((int32_t)*(ptr + insn_size - 1)) << 24)
++ | (((int32_t)*(ptr + insn_size - 2)) << 16)
++ | (((int32_t)*(ptr + insn_size - 3)) << 8)
++ | *(ptr + insn_size - 4);
++ }
++ disp += insn_size;
++ /* Jumps to external symbols point to the address of the offset
++ before relocation. */
++ /* ??? These are probably a tailcall. We could fix them up by
++ replacing them with jmp to EOB + call, but it's easier to just
++ prevent the compiler generating them. */
++ if (disp == 1)
++ error("Unconditional jump (sibcall?) in %s", name);
++ disp += insn;
++ if (disp < 0 || disp > len)
++ error("Jump outside instruction in %s", name);
++
++ if ((flags[disp] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_SCANNED)
++ error("Overlapping instructions in %s", name);
++
++ flags[disp] |= (FLAG_INSN | FLAG_TARGET);
++ is_pcrel = 1;
++ }
++ if (is_pcrel) {
++ /* Mark the following insn as a jump target. This will stop
++ this instruction being moved. */
++ flags[insn + insn_size] |= FLAG_TARGET;
++ }
++ if (is_ret)
++ flags[insn] |= FLAG_RET;
++
++ if (is_exit)
++ flags[insn] |= FLAG_EXIT;
++
++ if (!(is_jmp || is_ret || is_exit))
++ flags[insn + insn_size] |= FLAG_INSN;
++}
++
++/* Scan a function body. Returns the position of the return sequence.
++ Sets *patch_bytes to the number of bytes that need to be copied from that
++ location. If no patching is required (ie. the return is the last insn)
++ *patch_bytes will be set to -1. *plen is the number of code bytes to copy.
++ */
++static int trace_i386_op(const char * name, uint8_t *start_p, int *plen,
++ int *patch_bytes, int *exit_addrs)
++{
++ char *flags;
++ int more;
++ int insn;
++ int retpos;
++ int bytes;
++ int num_exits;
++ int len;
++ int last_insn;
++
++ len = *plen;
++ flags = malloc(len + 1);
++ memset(flags, 0, len + 1);
++ flags[0] |= FLAG_INSN;
++ more = 1;
++ while (more) {
++ more = 0;
++ for (insn = 0; insn < len; insn++) {
++ if ((flags[insn] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_INSN) {
++ trace_i386_insn(name, start_p, flags, insn, len);
++ more = 1;
++ }
++ }
++ }
++
++ /* Strip any unused code at the end of the function. */
++ while (len > 0 && flags[len - 1] == 0)
++ len--;
++
++ retpos = -1;
++ num_exits = 0;
++ last_insn = 0;
++ for (insn = 0; insn < len; insn++) {
++ if (flags[insn] & FLAG_RET) {
++ /* ??? In theory it should be possible to handle multiple return
++ points. In practice it's not worth the effort. */
++ if (retpos != -1)
++ error("Multiple return instructions in %s", name);
++ retpos = insn;
++ }
++ if (flags[insn] & FLAG_EXIT) {
++ if (num_exits == MAX_EXITS)
++ error("Too many block exits in %s", name);
++ exit_addrs[num_exits] = insn;
++ num_exits++;
++ }
++ if (flags[insn] & FLAG_INSN)
++ last_insn = insn;
++ }
++
++ exit_addrs[num_exits] = -1;
++ if (retpos == -1) {
++ if (num_exits == 0) {
++ error ("No return instruction found in %s", name);
++ } else {
++ retpos = len;
++ last_insn = len;
++ }
++ }
++
++ /* If the return instruction is the last instruction we can just
++ remove it. */
++ if (retpos == last_insn)
++ *patch_bytes = -1;
++ else
++ *patch_bytes = 0;
++
++ /* Back up over any nop instructions. */
++ while (retpos > 0
++ && (flags[retpos] & FLAG_TARGET) == 0
++ && (flags[retpos - 1] & FLAG_INSN) != 0
++ && start_p[retpos - 1] == 0x90) {
++ retpos--;
++ }
++
++ if (*patch_bytes == -1) {
++ *plen = retpos;
++ free (flags);
++ return retpos;
++ }
++ *plen = len;
++
++ /* The ret is in the middle of the function. Find four more bytes that
++ so the ret can be replaced by a jmp. */
++ /* ??? Use a short jump where possible. */
++ bytes = 4;
++ insn = retpos + 1;
++ /* We can clobber everything up to the next jump target. */
++ while (insn < len && bytes > 0 && (flags[insn] & FLAG_TARGET) == 0) {
++ insn++;
++ bytes--;
++ }
++ if (bytes > 0) {
++ /* ???: Strip out nop blocks. */
++ /* We can't do the replacement without clobbering anything important.
++ Copy preceeding instructions(s) to give us some space. */
++ while (retpos > 0) {
++ /* If this byte is the target of a jmp we can't move it. */
++ if (flags[retpos] & FLAG_TARGET)
++ break;
++
++ (*patch_bytes)++;
++ bytes--;
++ retpos--;
++
++ /* Break out of the loop if we have enough space and this is either
++ the first byte of an instruction or a pad byte. */
++ if ((flags[retpos] & (FLAG_INSN | FLAG_SCANNED)) != FLAG_SCANNED
++ && bytes <= 0) {
++ break;
++ }
++ }
++ }
++
++ if (bytes > 0)
++ error("Unable to replace ret with jmp in %s\n", name);
++
++ free(flags);
++ return retpos;
++}
++
++#endif
++
+ #define MAX_ARGS 3
+
+ /* generate op code */
+@@ -1442,6 +2082,11 @@
+ uint8_t args_present[MAX_ARGS];
+ const char *sym_name, *p;
+ EXE_RELOC *rel;
++#if defined(HOST_I386) || defined(HOST_X86_64)
++ int patch_bytes;
++ int retpos;
++ int exit_addrs[MAX_EXITS];
++#endif
+
+ /* Compute exact size excluding prologue and epilogue instructions.
+ * Increment start_offset to skip epilogue instructions, then compute
+@@ -1452,33 +2097,12 @@
+ p_end = p_start + size;
+ start_offset = offset;
+ #if defined(HOST_I386) || defined(HOST_X86_64)
+-#ifdef CONFIG_FORMAT_COFF
+- {
+- uint8_t *p;
+- p = p_end - 1;
+- if (p == p_start)
+- error("empty code for %s", name);
+- while (*p != 0xc3) {
+- p--;
+- if (p <= p_start)
+- error("ret or jmp expected at the end of %s", name);
+- }
+- copy_size = p - p_start;
+- }
+-#else
+ {
+ int len;
+ len = p_end - p_start;
+- if (len == 0)
+- error("empty code for %s", name);
+- if (p_end[-1] == 0xc3) {
+- len--;
+- } else {
+- error("ret or jmp expected at the end of %s", name);
+- }
++ retpos = trace_i386_op(name, p_start, &len, &patch_bytes, exit_addrs);
+ copy_size = len;
+ }
+-#endif
+ #elif defined(HOST_PPC)
+ {
+ uint8_t *p;
+@@ -1710,6 +2334,13 @@
+ }
+
+ if (gen_switch == 2) {
++#if defined(HOST_I386) || defined(HOST_X86_64)
++ if (patch_bytes != -1)
++ copy_size += patch_bytes;
++#ifdef DEBUG_OP
++ copy_size += 2;
++#endif
++#endif
+ fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
+ } else if (gen_switch == 1) {
+
+@@ -1915,7 +2546,43 @@
+ #error unsupport object format
+ #endif
+ }
++ }
++ /* Replace the marker instructions with the actual opcodes. */
++ for (i = 0; exit_addrs[i] != -1; i++) {
++ int op;
++ switch (p_start[exit_addrs[i]])
++ {
++ case 0xf4: op = 0xc3; break; /* hlt -> ret */
++ case 0xfa: op = 0xe9; break; /* cli -> jmp */
++ case 0xfb: op = 0xe9; break; /* sti -> jmp */
++ default: error("Internal error");
++ }
++ fprintf(outfile,
++ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
++ exit_addrs[i], op);
+ }
++ /* Fix up the return instruction. */
++ if (patch_bytes != -1) {
++ if (patch_bytes) {
++ fprintf(outfile, " memcpy(gen_code_ptr + %d,"
++ "gen_code_ptr + %d, %d);\n",
++ copy_size, retpos, patch_bytes);
++ }
++ fprintf(outfile,
++ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
++ retpos);
++ fprintf(outfile,
++ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
++ retpos + 1, copy_size - (retpos + 5));
++
++ copy_size += patch_bytes;
++ }
++#ifdef DEBUG_OP
++ fprintf(outfile,
++ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
++ copy_size);
++ copy_size += 2;
++#endif
+ }
+ #elif defined(HOST_X86_64)
+ {
+@@ -1949,6 +2616,42 @@
+ }
+ }
+ }
++ /* Replace the marker instructions with the actual opcodes. */
++ for (i = 0; exit_addrs[i] != -1; i++) {
++ int op;
++ switch (p_start[exit_addrs[i]])
++ {
++ case 0xf4: op = 0xc3; break; /* hlt -> ret */
++ case 0xfa: op = 0xe9; break; /* cli -> jmp */
++ case 0xfb: op = 0xe9; break; /* sti -> jmp */
++ default: error("Internal error");
++ }
++ fprintf(outfile,
++ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
++ exit_addrs[i], op);
++ }
++ /* Fix up the return instruction. */
++ if (patch_bytes != -1) {
++ if (patch_bytes) {
++ fprintf(outfile, " memcpy(gen_code_ptr + %d,"
++ "gen_code_ptr + %d, %d);\n",
++ copy_size, retpos, patch_bytes);
++ }
++ fprintf(outfile,
++ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
++ retpos);
++ fprintf(outfile,
++ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
++ retpos + 1, copy_size - (retpos + 5));
++
++ copy_size += patch_bytes;
++ }
++#ifdef DEBUG_OP
++ fprintf(outfile,
++ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
++ copy_size);
++ copy_size += 2;
++#endif
+ }
+ #elif defined(HOST_PPC)
+ {
+diff -Naru qemu-neo1973.orig/dyngen-exec.h qemu-neo1973/dyngen-exec.h
+--- qemu-neo1973.orig/dyngen-exec.h 2007-06-24 13:56:38.000000000 +0200
++++ qemu-neo1973/dyngen-exec.h 2007-06-24 14:35:52.000000000 +0200
+@@ -194,7 +194,12 @@
+ #endif
+
+ /* force GCC to generate only one epilog at the end of the function */
++#if defined(__i386__) || defined(__x86_64__)
++/* Also add 4 bytes of padding so that we can replace the ret with a jmp. */
++#define FORCE_RET() asm volatile ("nop;nop;nop;nop");
++#else
+ #define FORCE_RET() __asm__ __volatile__("" : : : "memory");
++#endif
+
+ #ifndef OPPROTO
+ #define OPPROTO
+@@ -244,11 +249,18 @@
+ #endif
+
+ #if defined(__i386__)
+-#define EXIT_TB() asm volatile ("ret")
+-#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
++/* Dyngen will replace hlt instructions with a ret instruction. Inserting a
++ ret directly would confuse dyngen. */
++#define EXIT_TB() asm volatile ("hlt")
++/* Dyngen will replace cli with 0x9e (jmp).
++ We generate the offset manually. */
++#define GOTO_LABEL_PARAM(n) \
++ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
+ #elif defined(__x86_64__)
+-#define EXIT_TB() asm volatile ("ret")
+-#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
++/* The same as i386. */
++#define EXIT_TB() asm volatile ("hlt")
++#define GOTO_LABEL_PARAM(n) \
++ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
+ #elif defined(__powerpc__)
+ #define EXIT_TB() asm volatile ("blr")
+ #define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
+diff -Naru qemu-neo1973.orig/exec-all.h qemu-neo1973/exec-all.h
+--- qemu-neo1973.orig/exec-all.h 2007-06-24 14:31:58.000000000 +0200
++++ qemu-neo1973/exec-all.h 2007-06-24 14:33:11.000000000 +0200
+@@ -329,14 +329,15 @@
+
+ #elif defined(__i386__) && defined(USE_DIRECT_JUMP)
+
+-/* we patch the jump instruction directly */
++/* we patch the jump instruction directly. Use sti in place of the actual
++ jmp instruction so that dyngen can patch in the correct result. */
+ #define GOTO_TB(opname, tbparam, n)\
+ do {\
+ asm volatile (".section .data\n"\
+ ASM_OP_LABEL_NAME(n, opname) ":\n"\
+ ".long 1f\n"\
+ ASM_PREVIOUS_SECTION \
+- "jmp " ASM_NAME(__op_jmp) #n "\n"\
++ "sti;.long " ASM_NAME(__op_jmp) #n " - 1f\n"\
+ "1:\n");\
+ } while (0)
+
+diff -Naru qemu-neo1973.orig/target-ppc/exec.h qemu-neo1973/target-ppc/exec.h
+--- qemu-neo1973.orig/target-ppc/exec.h 2007-06-24 13:56:32.000000000 +0200
++++ qemu-neo1973/target-ppc/exec.h 2007-06-24 14:33:11.000000000 +0200
+@@ -66,11 +66,7 @@
+ #define FT1 (env->ft1)
+ #define FT2 (env->ft2)
+
+-#if defined (DEBUG_OP)
+-# define RETURN() __asm__ __volatile__("nop" : : : "memory");
+-#else
+-# define RETURN() __asm__ __volatile__("" : : : "memory");
+-#endif
++#define RETURN() FORCE_RET()
+
+ static inline target_ulong rotl8 (target_ulong i, int n)
+ {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
new file mode 100644
index 0000000000..8f5e9d8b4b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
@@ -0,0 +1,21 @@
+diff -Naru qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c qemu-snapshot-2007-07-01_05/linux-user/mmap.c
+--- qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c 2007-06-03 17:31:32.000000000 +0200
++++ qemu-snapshot-2007-07-01_05/linux-user/mmap.c 2007-07-02 14:00:30.000000000 +0200
+@@ -234,7 +234,7 @@
+ host_offset = offset & qemu_host_page_mask;
+ host_len = len + offset - host_offset;
+ host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
+- host_len, prot, flags, fd, host_offset);
++ host_len, prot, (flags | MAP_32BIT), fd, host_offset);
+ if (host_start == -1)
+ return host_start;
+ /* update start so that it points to the file position at 'offset' */
+@@ -388,7 +388,7 @@
+ int prot;
+
+ /* XXX: use 5 args syscall */
+- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
++ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
+ if (new_addr == -1)
+ return new_addr;
+ new_addr = h2g(new_addr);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
new file mode 100644
index 0000000000..08d5513f36
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
@@ -0,0 +1,12 @@
+diff -Naru qemu-snapshot-2007-06-24_05.orig/sdl.c qemu-snapshot-2007-06-24_05/sdl.c
+--- qemu-snapshot-2007-06-24_05.orig/sdl.c 2007-06-21 23:08:02.000000000 +0200
++++ qemu-snapshot-2007-06-24_05/sdl.c 2007-06-24 16:33:20.000000000 +0200
+@@ -245,7 +245,7 @@
+
+ if (kbd_mouse_is_absolute()) {
+ SDL_ShowCursor(1);
+- SDL_SetCursor(sdl_cursor_hidden);
++ /* SDL_SetCursor(sdl_cursor_hidden); */
+ } else {
+ SDL_ShowCursor(0);
+ }
diff --git a/packages/qemu/qemu-native.inc b/packages/qemu/qemu-native.inc
index 4adc4cb4c0..81f09446dd 100644
--- a/packages/qemu/qemu-native.inc
+++ b/packages/qemu/qemu-native.inc
@@ -1,6 +1,6 @@
FILESPATH =. "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qemu-${PV}:"
# prefix = "${STAGING_DIR}/${BUILD_SYS}"
-DEPENDS = "libsdl-native"
+DEPENDS = "libsdl-native zlib-native"
python __anonymous() {
from bb import which, data
@@ -18,6 +18,8 @@ python __anonymous() {
data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.3", d)
elif len(which(path, 'gcc-3.3.6')) != 0:
data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.3.6", d)
+ elif len(which(path, 'gcc-3.4.6')) != 0:
+ data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.4.6", d)
}
do_stage() {
diff --git a/packages/qemu/qemu-native_0.9.0+cvs.bb b/packages/qemu/qemu-native_0.9.0+cvs.bb
new file mode 100644
index 0000000000..65a7908a5c
--- /dev/null
+++ b/packages/qemu/qemu-native_0.9.0+cvs.bb
@@ -0,0 +1,3 @@
+require qemu_0.9.0+cvs.bb
+inherit native
+require qemu-native.inc
diff --git a/packages/qemu/qemu-qop-nogfx-native_svn.bb b/packages/qemu/qemu-qop-nogfx-native_svn.bb
index 4936761339..1a041c8536 100644
--- a/packages/qemu/qemu-qop-nogfx-native_svn.bb
+++ b/packages/qemu/qemu-qop-nogfx-native_svn.bb
@@ -4,6 +4,7 @@ PROVIDES = "qemu-native"
SRC_URI = "svn://nowt.dyndns.org/svn/qemu;module=trunk;proto=https \
file://configure.patch;patch=1 \
+ http://www.busybox.net/downloads/qemu/qemu-gcc-4-all.patch;patch=1 \
"
S = "${WORKDIR}/trunk"
diff --git a/packages/qemu/qemu_0.9.0+cvs.bb b/packages/qemu/qemu_0.9.0+cvs.bb
new file mode 100644
index 0000000000..8a89b805a2
--- /dev/null
+++ b/packages/qemu/qemu_0.9.0+cvs.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Qemu is an open source processor emulator."
+HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/"
+SECTION = "devel"
+LICENSE = "GPL"
+SRCDATE="20070701"
+PV = "0.9.0+cvs${SRCDATE}"
+PR = "r1"
+
+SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu;date=${SRCDATE} \
+ file://configure-0.9.0.patch;patch=1 \
+ file://qemu-sdl-cursor-0.9.0.patch;patch=1 \
+ file://arm_nptl-0.9.0.patch;patch=1 \
+ file://pl110_rgb-r0-0.9.0.patch;patch=1 \
+ file://qemu-0.9.0-gcc4.patch;patch=1 \
+ file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1"
+S = "${WORKDIR}/qemu"
+
+EXTRA_OECONF="--disable-gcc-check"
+
+inherit autotools
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/qemu/qemu_cvs.bb b/packages/qemu/qemu_cvs.bb
index 8d22a6f1f8..8cfabb3ebc 100644
--- a/packages/qemu/qemu_cvs.bb
+++ b/packages/qemu/qemu_cvs.bb
@@ -3,10 +3,11 @@ HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/"
SECTION = "devel"
LICENSE = "GPL"
PV = "0.8.2+cvs${SRCDATE}"
-PR = "r1"
+PR = "r2"
SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
file://configure.patch;patch=1 \
+ file://makefile.patch;patch=1 \
file://qemu-sdl-cursor.patch;patch=1 \
file://arm_nptl.patch;patch=1 \
file://pl110_rgb-r0.patch;patch=1 \
@@ -14,8 +15,11 @@ SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;r
file://compiler.patch;patch=1 \
file://qemu-usb-wacom-0.8.2.patch;patch=1 \
file://qemu-usb-wacom-pressure.patch;patch=1 \
- file://qemu-usb-wacom-buttons.patch;patch=1"
+ file://qemu-usb-wacom-buttons.patch;patch=1 \
+ http://www.busybox.net/downloads/qemu/qemu-gcc-4-all.patch;patch=1"
S = "${WORKDIR}/qemu"
+EXTRA_OECONF="--disable-gcc-check"
+
inherit autotools
diff --git a/packages/qmake/qmake2-native-2.00a/linux-oe-qmake.conf b/packages/qmake/qmake2-native-2.00a/linux-oe-qmake.conf
deleted file mode 100644
index d803f036fc..0000000000
--- a/packages/qmake/qmake2-native-2.00a/linux-oe-qmake.conf
+++ /dev/null
@@ -1,90 +0,0 @@
-#
-# qmake configuration for linux-oe-g++ / OpenEmbedded Build System / http://openembedded.org
-#
-
-MAKEFILE_GENERATOR = UNIX
-TEMPLATE = app
-CONFIG += qt warn_on release incremental link_prl
-QT += core gui
-QMAKE_INCREMENTAL_STYLE = sublib
-
-QMAKE_CC = $(OE_QMAKE_CC)
-QMAKE_LEX = flex
-QMAKE_LEXFLAGS =
-QMAKE_YACC = yacc
-QMAKE_YACCFLAGS = -d
-QMAKE_YACCFLAGS_MANGLE = -p $base -b $base
-QMAKE_YACC_HEADER = $base.tab.h
-QMAKE_YACC_SOURCE = $base.tab.c
-QMAKE_CFLAGS = -pipe $(OE_QMAKE_CFLAGS) $(CFLAGS_EXTRA)
-QMAKE_CFLAGS_DEPS = -M
-QMAKE_CFLAGS_WARN_ON = -Wall -W
-QMAKE_CFLAGS_WARN_OFF =
-QMAKE_CFLAGS_RELEASE = $(if $(CFLAGS_RELEASE),$(CFLAGS_RELEASE), -O2)
-QMAKE_CFLAGS_DEBUG = -g
-QMAKE_CFLAGS_SHLIB = -fPIC
-QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_THREAD = -D_REENTRANT
-QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
-
-QMAKE_CXX = $(OE_QMAKE_CXX)
-QMAKE_CXXFLAGS = $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS) $(CXXFLAGS_EXTRA)
-QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
-QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-
-QMAKE_INCDIR =
-QMAKE_LIBDIR =
-QMAKE_INCDIR_X11 = $(OE_QMAKE_INCDIR_X11)
-QMAKE_LIBDIR_X11 = $(OE_QMAKE_LIBDIR_X11)
-QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
-QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
-QMAKE_INCDIR_OPENGL =
-QMAKE_LIBDIR_OPENGL =
-
-QMAKE_LINK = $(OE_QMAKE_LINK)
-QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
-QMAKE_LFLAGS = $(OE_QMAKE_LDFLAGS) $(LFLAGS_EXTRA)
-QMAKE_LFLAGS_RELEASE =
-QMAKE_LFLAGS_DEBUG =
-QMAKE_LFLAGS_SHLIB = -shared
-QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_SONAME = -Wl,-soname,
-QMAKE_LFLAGS_THREAD =
-QMAKE_RPATH = -Wl,-rpath-link,
-
-QMAKE_LIBS = $(LIBS_EXTRA)
-QMAKE_LIBS_DYNLOAD = -ldl
-QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
-QMAKE_LIBS_X11SM =
-QMAKE_LIBS_QT = -l$(OE_QMAKE_LIBS_QT)
-QMAKE_LIBS_QT_THREAD = -l$(OE_QMAKE_LIBS_QT)-mt
-QMAKE_LIBS_QT_OPENGL = -lqgl
-QMAKE_LIBS_THREAD = -lpthread
-
-QMAKE_MOC = $(OE_QMAKE_MOC)
-QMAKE_UIC = $(OE_QMAKE_UIC)
-
-QMAKE_AR = $(OE_QMAKE_AR) cqs
-QMAKE_RANLIB =
-
-QMAKE_TAR = tar -cf
-QMAKE_GZIP = gzip -9f
-
-QMAKE_COPY = cp -f
-QMAKE_COPY_FILE = $(COPY)
-QMAKE_COPY_DIR = $(COPY) -r
-QMAKE_MOVE = mv -f
-QMAKE_DEL_FILE = rm -f
-QMAKE_DEL_DIR = rmdir
-QMAKE_STRIP = $(OE_QMAKE_STRIP)
-QMAKE_STRIPFLAGS_LIB += --strip-unneeded
-QMAKE_CHK_DIR_EXISTS = test -d
-QMAKE_MKDIR = mkdir -p
-
diff --git a/packages/qmake/qmake2-native-2.01a/.mtn2git_empty b/packages/qmake/qmake2-native-2.01a/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qmake/qmake2-native-2.01a/.mtn2git_empty
diff --git a/packages/qmake/qmake2-native-2.01a/0001-fix-mkspecs.patch b/packages/qmake/qmake2-native-2.01a/0001-fix-mkspecs.patch
new file mode 100644
index 0000000000..abebfdfa27
--- /dev/null
+++ b/packages/qmake/qmake2-native-2.01a/0001-fix-mkspecs.patch
@@ -0,0 +1,123 @@
+From 594157753a24d0575aaf948dc0e9500f6bdb2178 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:39:58 +0200
+Subject: [PATCH] fix mkspecs
+
+---
+ mkspecs/common/g++.conf | 18 +++++++++---------
+ mkspecs/common/linux.conf | 26 +++++++++++++-------------
+ 2 files changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
+index f5a5c8e..4007c7e 100644
+--- a/mkspecs/common/g++.conf
++++ b/mkspecs/common/g++.conf
+@@ -2,12 +2,12 @@
+ # qmake configuration for common gcc
+ #
+
+-QMAKE_CC = gcc
+-QMAKE_CFLAGS += -pipe
++QMAKE_CC = $(OE_QMAKE_CC)
++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
+ QMAKE_CFLAGS_DEPS += -M
+ QMAKE_CFLAGS_WARN_ON += -Wall -W
+ QMAKE_CFLAGS_WARN_OFF += -w
+-QMAKE_CFLAGS_RELEASE += -O2
++QMAKE_CFLAGS_RELEASE += -O2
+ QMAKE_CFLAGS_DEBUG += -g
+ QMAKE_CFLAGS_SHLIB += -fPIC
+ QMAKE_CFLAGS_STATIC_LIB += -fPIC
+@@ -16,8 +16,8 @@ QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+ QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+-QMAKE_CXX = g++
+-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
++QMAKE_CXX = $(OE_QMAKE_CXX)
++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
+ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+ QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+ QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+@@ -30,9 +30,9 @@ QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+ QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+-QMAKE_LINK = g++
+-QMAKE_LINK_SHLIB = g++
+-QMAKE_LFLAGS +=
++QMAKE_LINK = $(OE_QMAKE_LINK)
++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
+ QMAKE_LFLAGS_RELEASE +=
+ QMAKE_LFLAGS_DEBUG +=
+ QMAKE_LFLAGS_APP +=
+@@ -40,7 +40,7 @@ QMAKE_LFLAGS_SHLIB += -shared
+ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME += -Wl,-soname,
+ QMAKE_LFLAGS_THREAD +=
+-QMAKE_RPATH = -Wl,-rpath,
++QMAKE_RPATH = -Wl,-rpath-link,
+
+ QMAKE_PCH_OUTPUT_EXT = .gch
+
+diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
+index 3796a87..52acf16 100644
+--- a/mkspecs/common/linux.conf
++++ b/mkspecs/common/linux.conf
+@@ -7,26 +7,26 @@ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+ QMAKE_INCDIR =
+ QMAKE_LIBDIR =
+-QMAKE_INCDIR_X11 = /usr/X11R6/include
+-QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+-QMAKE_INCDIR_OPENGL = /usr/X11R6/include
+-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
++QMAKE_INCDIR_X11 =
++QMAKE_LIBDIR_X11 =
++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
++QMAKE_INCDIR_OPENGL =
++QMAKE_LIBDIR_OPENGL =
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
+-QMAKE_LIBS_X11 = -lXext -lX11 -lm
+-QMAKE_LIBS_X11SM = -lSM -lICE
++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+ QMAKE_LIBS_NIS = -lnsl
+ QMAKE_LIBS_OPENGL = -lGLU -lGL
+ QMAKE_LIBS_OPENGL_QT = -lGL
+ QMAKE_LIBS_THREAD = -lpthread
+
+-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
++QMAKE_MOC = $(OE_QMAKE_MOC)
++QMAKE_UIC = $(OE_QMAKE_UIC)
+
+-QMAKE_AR = ar cqs
++QMAKE_AR = $(OE_QMAKE_AR) cqs
+ QMAKE_RANLIB =
+
+ QMAKE_TAR = tar -cf
+@@ -38,11 +38,11 @@ QMAKE_COPY_DIR = $(COPY) -r
+ QMAKE_MOVE = mv -f
+ QMAKE_DEL_FILE = rm -f
+ QMAKE_DEL_DIR = rmdir
+-QMAKE_STRIP = strip
++QMAKE_STRIP = $(OE_QMAKE_STRIP)
+ QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+ QMAKE_CHK_DIR_EXISTS = test -d
+ QMAKE_MKDIR = mkdir -p
+ QMAKE_INSTALL_FILE = install -m 644 -p
+ QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+-include(unix.conf)
+\ No newline at end of file
++include(unix.conf)
+--
+1.5.1.6
+
diff --git a/packages/qmake/qmake2-native-2.01a/linux-oe-qmake.conf b/packages/qmake/qmake2-native-2.01a/linux-oe-qmake.conf
new file mode 100644
index 0000000000..f58481a693
--- /dev/null
+++ b/packages/qmake/qmake2-native-2.01a/linux-oe-qmake.conf
@@ -0,0 +1 @@
+include(../linux-g++/qmake.conf)
diff --git a/packages/qmake/qmake2-native_2.00a.bb b/packages/qmake/qmake2-native_2.00a.bb
deleted file mode 100644
index 306891e9af..0000000000
--- a/packages/qmake/qmake2-native_2.00a.bb
+++ /dev/null
@@ -1,49 +0,0 @@
-DESCRIPTION = "TrollTech Makefile Generator"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-SECTION = "devel"
-LICENSE = "GPL QPL"
-PR = "r2"
-
-QTVER = "qt-x11-opensource-src-4.1.1"
-
-SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/${QTVER}.tar.gz \
- file://linux-oe-qmake.conf"
-S = "${WORKDIR}/${QTVER}"
-
-# we need the real target system here
-CROSS_SYS := "${TARGET_SYS}"
-inherit autotools native
-
-export QTDIR = "${S}"
-EXTRA_OEMAKE = "-e"
-
-do_configure() {
- # Install the OE build templates
- for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
- do
- install -d ${S}/mkspecs/$template
- install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
- ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
- done
-
- QMAKESPEC=
- PLATFORM=${HOST_OS}-oe-g++
- export PLATFORM
- # yes, TARGET_SYS is correct, because this is a 'cross'-qmake-native :) :M:
- echo yes | ./configure -prefix ${STAGING_DIR}/${CROSS_SYS}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
-}
-
-do_compile() {
- :
-}
-
-do_stage() {
- install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake2
- install -d ${STAGING_DIR}/${CROSS_SYS}/qt4/
- cp -PfR mkspecs ${STAGING_DIR}/${CROSS_SYS}/qt4/
-}
-
-do_install() {
- :
-}
diff --git a/packages/qmake/qmake2-native_2.01a.bb b/packages/qmake/qmake2-native_2.01a.bb
new file mode 100644
index 0000000000..2ec783574c
--- /dev/null
+++ b/packages/qmake/qmake2-native_2.01a.bb
@@ -0,0 +1,67 @@
+DESCRIPTION = "TrollTech Makefile Generator"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+SECTION = "devel"
+LICENSE = "GPL QPL"
+
+PR = "r2"
+
+QTVER = "qt-x11-opensource-src-4.3.0"
+
+SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/${QTVER}.tar.gz \
+ file://0001-fix-mkspecs.patch;patch=1 \
+ file://linux-oe-qmake.conf"
+S = "${WORKDIR}/${QTVER}"
+
+# we need the real target system here
+CROSS_SYS := "${TARGET_SYS}"
+inherit autotools native
+
+export QTDIR = "${S}"
+EXTRA_OEMAKE = "-e"
+
+do_configure() {
+ # Install the OE build templates
+ for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
+ do
+ install -d ${S}/mkspecs/$template
+ install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
+ ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
+ done
+
+ QMAKESPEC=
+ PLATFORM=${HOST_OS}-oe-g++
+ export PLATFORM
+ # yes, TARGET_SYS is correct, because this is a 'cross'-qmake-native :) :M:
+ export OE_QMAKE_CC="${CC}"
+ export OE_QMAKE_CFLAGS="${CFLAGS}"
+ export OE_QMAKE_CXX="${CXX}"
+ export OE_QMAKE_CXXFLAGS="-fno-exceptions -fno-rtti ${CXXFLAGS}"
+ export OE_QMAKE_LDFLAGS="${LDFLAGS}"
+ export OE_QMAKE_LINK="${CCLD}"
+ export OE_QMAKE_AR="${AR}"
+ export OE_QMAKE_STRIP="${STRIP}"
+ export OE_QMAKE_UIC="${STAGING_BINDIR_NATIVE}/uic"
+ export OE_QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc"
+ export OE_QMAKE_RCC="non-existant"
+ export OE_QMAKE_QMAKE="${STAGING_BINDIR_NATIVE}/qmake"
+ export OE_QMAKE_RPATH="-Wl,-rpath-link,"
+ echo yes | ./configure -prefix ${STAGING_DIR}/${CROSS_SYS}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
+}
+
+do_compile() {
+ :
+}
+
+do_stage() {
+ install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake2
+ install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake-qt4
+ install -d ${STAGING_DIR}/${CROSS_SYS}/qt4/
+ cp -PfR mkspecs ${STAGING_DIR}/${CROSS_SYS}/qt4/
+ install -d ${STAGING_DIR}/${HOST_SYS}/qt4/
+ cp -PfR mkspecs ${STAGING_DIR}/${HOST_SYS}/qt4/
+}
+
+do_install() {
+ :
+}
diff --git a/packages/qof/qof_0.7.2.bb b/packages/qof/qof_0.7.2.bb
index 985e8d6cfd..e6bae9e5c9 100644
--- a/packages/qof/qof_0.7.2.bb
+++ b/packages/qof/qof_0.7.2.bb
@@ -1,6 +1,8 @@
-HOMEPAGE = "http://qof.sourceforge.net/"
+DESCRIPTION = "set of C Language utilities for performing generic structured \
+complex queries on a set of data held by a set of C/C++ objects."
+AUTHOR = "Linas Vepstas, Neil Williams"
+HOMEPAGE = "http://qof.sf.net/"
LICENSE = "GPL"
-
DEPENDS = "glib-2.0 libxml2 libtool zlib"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \
diff --git a/packages/qpe-games/hexatrolic_1.0beta3.bb b/packages/qpe-games/hexatrolic_1.0beta3.bb
index 241693504e..e0ca1a4084 100644
--- a/packages/qpe-games/hexatrolic_1.0beta3.bb
+++ b/packages/qpe-games/hexatrolic_1.0beta3.bb
@@ -14,6 +14,7 @@ S = "${WORKDIR}/${APPNAME}"
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/pics/*.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/${APPNAME}.desktop ${D}${palmtopdir}/apps/Games
diff --git a/packages/qpe-games/labyrinth_0.7.bb b/packages/qpe-games/labyrinth_0.7.bb
index f6e9299b3d..0a43be2795 100644
--- a/packages/qpe-games/labyrinth_0.7.bb
+++ b/packages/qpe-games/labyrinth_0.7.bb
@@ -12,6 +12,7 @@ SRC_URI = "http://handhelds.org/~zecke/oe_packages/labyrinth-0.7-zecke1.tar.gz"
S = "${WORKDIR}/${APPNAME}"
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -d ${D}${palmtopdir}/share/games/${APPNAME}/
diff --git a/packages/qpe-games/win4_1.0.1.bb b/packages/qpe-games/win4_1.0.1.bb
index 3541ac9610..9813b33435 100644
--- a/packages/qpe-games/win4_1.0.1.bb
+++ b/packages/qpe-games/win4_1.0.1.bb
@@ -22,6 +22,7 @@ do_compile_prepend() {
}
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/*.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/${APPNAME}.desktop ${D}${palmtopdir}/apps/Games
diff --git a/packages/qpe-games/ziq_1.1ern.bb b/packages/qpe-games/ziq_1.1ern.bb
index 626f03d53d..f51805f1d8 100644
--- a/packages/qpe-games/ziq_1.1ern.bb
+++ b/packages/qpe-games/ziq_1.1ern.bb
@@ -10,6 +10,7 @@ SRC_URI = "http://handhelds.org/~zecke/oe_packages/ziq_V1.1ern.tar.gz \
file://ziq.patch;patch=1"
PV = "1.1ern"
+PR = "r1"
S = "${WORKDIR}/ziq_V${PV}"
@@ -19,7 +20,9 @@ APPDESKTOP = "${S}"
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
+ install -d ${D}${palmtopdir}/apps/Games
install -m 0644 ${S}/*.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/${APPNAME}.desktop ${D}${palmtopdir}/apps/Games
}
diff --git a/packages/qpe-games/zsubhunt_1.0.0ern.bb b/packages/qpe-games/zsubhunt_1.0.0ern.bb
index d486058bab..0a52c0017a 100644
--- a/packages/qpe-games/zsubhunt_1.0.0ern.bb
+++ b/packages/qpe-games/zsubhunt_1.0.0ern.bb
@@ -18,6 +18,7 @@ APPDESKTOP = "${S}"
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/pics/*.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/${APPNAME}.desktop ${D}${palmtopdir}/apps/Games
diff --git a/packages/qpe-games/ztappy_0.9.3ern.bb b/packages/qpe-games/ztappy_0.9.3ern.bb
index 1fe3c5187a..d64a17a7cb 100644
--- a/packages/qpe-games/ztappy_0.9.3ern.bb
+++ b/packages/qpe-games/ztappy_0.9.3ern.bb
@@ -18,6 +18,7 @@ APPTYPE = "binary"
APPDESKTOP = "${S}"
do_install () {
+ install -d ${D}${palmtopdir}/apps/Games/
install -d ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/pics/*.png ${D}${palmtopdir}/pics/${APPNAME}/
install -m 0644 ${S}/${APPNAME}.desktop ${D}${palmtopdir}/apps/Games
diff --git a/packages/qpegps/qpegps.inc b/packages/qpegps/qpegps.inc
new file mode 100644
index 0000000000..2e10bf40a6
--- /dev/null
+++ b/packages/qpegps/qpegps.inc
@@ -0,0 +1,35 @@
+DESCRIPTION = "A GPS navigation application for the Opie environment"
+SECTION = "opie/applications"
+PRIORITY = "optional"
+LICENSE = "GPL"
+HOMEPAGE = "http://qpegps.sourceforge.net/"
+
+RRECOMMENDS = "gpsd"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/qpegps/qpegps_${PV}_src.zip \
+ file://qpegps.desktop \
+ file://qpegps.png"
+S = "${WORKDIR}/qpegps"
+
+inherit palmtop
+
+QMAKE_PROFILES = "qpegps.pro"
+EXTRA_QMAKEVARS_POST = "LIBS=-lqpe LIBS+=-lgps"
+OE_QMAKE_CFLAGS += " -DQWS "
+
+do_install() {
+ install -d ${D}${palmtopdir}/bin \
+ ${D}${palmtopdir}/apps/Applications \
+ ${D}${palmtopdir}/pics/qpegps \
+ ${D}${palmtopdir}/help/html/qpegps_icons \
+ ${D}${palmtopdir}/qpegps/maps \
+ ${D}${palmtopdir}/qpegps/icons \
+ ${D}${palmtopdir}/qpegps/tracks
+ install -m 0755 qpegps ${D}${palmtopdir}/bin/
+ install -m 0644 ${WORKDIR}/qpegps.desktop ${D}${palmtopdir}/apps/Applications/
+ install -m 0644 ${WORKDIR}/qpegps.png ${D}${palmtopdir}/pics/qpegps/
+ install -m 0644 doc/qpegps.html ${D}${palmtopdir}/help/html/
+ install -m 0644 doc/qpegps_icons/*.png ${D}${palmtopdir}/help/html/qpegps_icons/
+ install -m 0644 icons/*.xpm ${D}${palmtopdir}/qpegps/icons/
+ install -m 0644 datum/*.dat ${D}${palmtopdir}/qpegps/
+}
diff --git a/packages/qpegps/qpegps_0.9.2.3.3.bb b/packages/qpegps/qpegps_0.9.2.3.3.bb
index 7eaa456d74..4cdb945321 100644
--- a/packages/qpegps/qpegps_0.9.2.3.3.bb
+++ b/packages/qpegps/qpegps_0.9.2.3.3.bb
@@ -1,33 +1 @@
-DESCRIPTION = "A GPS navigation application for the Opie environment."
-SECTION = "opie/applications"
-PRIORITY = "optional"
-RRECOMMENDS = "gpsd"
-LICENSE = "GPL"
-HOMEPAGE = "http://qpegps.sourceforge.net/"
-PR = "r0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/qpegps/qpegps_${PV}_src.zip \
- file://qpegps.desktop \
- file://qpegps.png"
-S = "${WORKDIR}/qpegps_my"
-
-inherit palmtop
-
-QMAKE_PROFILES = "qpegps.pro"
-
-do_install() {
- install -d ${D}${palmtopdir}/bin \
- ${D}${palmtopdir}/apps/Applications \
- ${D}${palmtopdir}/pics/qpegps \
- ${D}${palmtopdir}/help/html/qpegps_icons \
- ${D}${palmtopdir}/qpegps/maps \
- ${D}${palmtopdir}/qpegps/icons \
- ${D}${palmtopdir}/qpegps/tracks
- install -m 0755 qpegps ${D}${palmtopdir}/bin/
- install -m 0644 ${WORKDIR}/qpegps.desktop ${D}${palmtopdir}/apps/Applications/
- install -m 0644 ${WORKDIR}/qpegps.png ${D}${palmtopdir}/pics/qpegps/
- install -m 0644 doc/qpegps.html ${D}${palmtopdir}/help/html/
- install -m 0644 doc/qpegps_icons/*.png ${D}${palmtopdir}/help/html/qpegps_icons/
- install -m 0644 icons/*.xpm ${D}${palmtopdir}/qpegps/icons/
- install -m 0644 datum/*.dat ${D}${palmtopdir}/qpegps/
-}
+require qpegps.inc
diff --git a/packages/qpegps/qpegps_0.9.3.bb b/packages/qpegps/qpegps_0.9.3.bb
index a4712f3dea..4cdb945321 100644
--- a/packages/qpegps/qpegps_0.9.3.bb
+++ b/packages/qpegps/qpegps_0.9.3.bb
@@ -1,35 +1 @@
-DESCRIPTION = "Navigation application for use with GPS adapters"
-SECTION = "opie/applications"
-PRIORITY = "optional"
-
-RRECOMMENDS = "gpsd"
-LICENSE = "GPL"
-HOMEPAGE = "http://qpegps.sourceforge.net/"
-PR = "r0"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/qpegps/qpegps_${PV}_src.zip \
- file://qpegps.desktop \
- file://qpegps.png"
-S = "${WORKDIR}/qpegps"
-
-inherit palmtop
-
-QMAKE_PROFILES = "qpegps.pro"
-EXTRA_QMAKEVARS_POST = "LIBS=-lqpe LIBS+=-lgps"
-
-do_install() {
- install -d ${D}${palmtopdir}/bin \
- ${D}${palmtopdir}/apps/Applications \
- ${D}${palmtopdir}/pics/qpegps \
- ${D}${palmtopdir}/help/html/qpegps_icons \
- ${D}${palmtopdir}/qpegps/maps \
- ${D}${palmtopdir}/qpegps/icons \
- ${D}${palmtopdir}/qpegps/tracks
- install -m 0755 qpegps ${D}${palmtopdir}/bin/
- install -m 0644 ${WORKDIR}/qpegps.desktop ${D}${palmtopdir}/apps/Applications/
- install -m 0644 ${WORKDIR}/qpegps.png ${D}${palmtopdir}/pics/qpegps/
- install -m 0644 doc/qpegps.html ${D}${palmtopdir}/help/html/
- install -m 0644 doc/qpegps_icons/*.png ${D}${palmtopdir}/help/html/qpegps_icons/
- install -m 0644 icons/*.xpm ${D}${palmtopdir}/qpegps/icons/
- install -m 0644 datum/*.dat ${D}${palmtopdir}/qpegps/
-}
+require qpegps.inc
diff --git a/packages/qpf-fonts/files/update-qtfontdir b/packages/qpf-fonts/files/update-qtfontdir
index 857dc6c0d5..34f2ffd825 100755
--- a/packages/qpf-fonts/files/update-qtfontdir
+++ b/packages/qpf-fonts/files/update-qtfontdir
@@ -41,7 +41,7 @@ if [ -z "$1" ]; then
if [ -n "$QTDIR" ]; then
fontdir=$QTDIR/lib/fonts
else
- fontdir=/opt/QtPalmtop/lib/fonts
+ fontdir=@palmtopdir@/lib/fonts
fi
else
fontdir=$1
diff --git a/packages/vera-fonts/qpf-bitstream-vera-sans-mono_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
index 10d2d4acdd..10d2d4acdd 100644
--- a/packages/vera-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
+++ b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
diff --git a/packages/vera-fonts/qpf-bitstream-vera_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb
index 86f2ef9446..86f2ef9446 100644
--- a/packages/vera-fonts/qpf-bitstream-vera_1.10.bb
+++ b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb
diff --git a/packages/qpf-fonts/qpf-font-common_1.0.bb b/packages/qpf-fonts/qpf-font-common_1.0.bb
index 306fa22201..41bdad0a4a 100644
--- a/packages/qpf-fonts/qpf-font-common_1.0.bb
+++ b/packages/qpf-fonts/qpf-font-common_1.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Qt/Embedded Fonts Common Files"
SECTION = "opie/fonts"
PRIORITY = "optional"
LICENSE = "GPL QPL"
-PR = "r2"
+PR = "r3"
SRC_URI = "file://update-qtfontdir"
S = "${WORKDIR}/qt-${PV}"
@@ -10,4 +10,5 @@ S = "${WORKDIR}/qt-${PV}"
do_install() {
install -d ${D}${sbindir}/
install -m 0755 ${WORKDIR}/update-qtfontdir ${D}${sbindir}/
+ sed -i -e 's,@palmtopdir@,${palmtopdir},g' ${D}${sbindir}/update-qtfontdir
}
diff --git a/packages/qpf-fonts/qpf-unismall_1.0.0.bb b/packages/qpf-fonts/qpf-unismall_1.0.0.bb
index 9c5600cb9d..20f47f9665 100644
--- a/packages/qpf-fonts/qpf-unismall_1.0.0.bb
+++ b/packages/qpf-fonts/qpf-unismall_1.0.0.bb
@@ -4,9 +4,9 @@ PRIORITY = "optional"
LICENSE = "GPL"
HOMEPAGE = "http://sourceforge.jp/projects/zaurus-ja/"
RPROVIDES = "virtual/japanese-font"
-PR = "r1"
+PR = "r2"
-SRC_URI = "http://prdownloads.sourceforge.jp/zaurus-ja/773/unismall-1.0.0.tar.gz"
+SRC_URI = "http://osdn.dl.sourceforge.jp/zaurus-ja/773/unismall-${PV}.tar.gz"
S = "${WORKDIR}"
diff --git a/packages/qpobox/files/qpobox.patch b/packages/qpobox/files/qpobox.patch
deleted file mode 100644
index eb2549ecb6..0000000000
--- a/packages/qpobox/files/qpobox.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-diff -Naur qpobox.orig/pbclient.cpp qpobox/pbclient.cpp
---- qpobox.orig/pbclient.cpp 2003-06-21 04:56:31.000000000 +0200
-+++ qpobox/pbclient.cpp 2006-05-11 22:49:00.000000000 +0200
-@@ -28,7 +28,8 @@
- m_address(address), m_port(port)
- {
- m_sock = new QSocket(this);
-- m_conv = QTextCodec::codecForName("EUC-JP");
-+ //m_conv = QTextCodec::codecForName("EUC-JP");
-+ m_conv = QTextCodec::codecForName("eucJP");
-
- connect(m_sock, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));
- connect(m_sock, SIGNAL(error(int)), this, SLOT(socketError(int)));
-diff -Naur qpobox.orig/qpobox.key qpobox/qpobox.key
---- qpobox.orig/qpobox.key 2003-08-12 22:23:15.000000000 +0200
-+++ qpobox/qpobox.key 2006-05-12 23:27:19.000000000 +0200
-@@ -1,15 +1,15 @@
- [INIT]
- Shift+Space = THRU
- Space = NEXT
-- Shift+Return = THRU_MODE
-+ Shift+Enter = THRU_MODE
- F21 = CLOSE
- F25 = IM_MODE
-
- [INPUT]
- Shift+Space = PREV
- Space = NEXT
-- Shift+Return = FIX
-- Return = EXACT
-+ Shift+Enter = FIX
-+ Enter = EXACT
- BackSpace = BS
- Delete = DELETE
- Left = SHRINK
-@@ -22,7 +22,7 @@
- [SELECT]
- Shift+Space = PREV
- Space = NEXT
-- Return = FIX
-+ Enter = FIX
- BackSpace = BS
- Delete = NOP
- Left = PREV
-diff -Naur qpobox.orig/qpoboxconfig.cpp qpobox/qpoboxconfig.cpp
---- qpobox.orig/qpoboxconfig.cpp 2005-01-09 06:53:44.000000000 +0100
-+++ qpobox/qpoboxconfig.cpp 2006-05-11 22:38:22.000000000 +0200
-@@ -224,7 +224,8 @@
- if (t != m_key_loaded) {
- if (f.open(IO_ReadOnly)) {
- QTextStream ts(&f);
-- QTextCodec *codec=QTextCodec::codecForName("UTF-8");
-+ //QTextCodec *codec=QTextCodec::codecForName("UTF-8");
-+ QTextCodec *codec=QTextCodec::codecForName("eucJP");
- ts.setCodec(codec);
- poboxmode_t mode = MODE_INIT;
-
diff --git a/packages/qpobox/qpobox_0.5.4.bb b/packages/qpobox/qpobox_0.5.4.bb
deleted file mode 100644
index 002522afa3..0000000000
--- a/packages/qpobox/qpobox_0.5.4.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "A japanese inputmethod for Qt/Embedded based palmtop environments."
-SECTION = "opie/inputmethods"
-RDEPENDS = "poboxserver virtual/japanese-font"
-LICENSE = "GPL"
-HOMEPAGE = "http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=QPOBox"
-PR = "r0"
-
-SRC_URI = "http://www.vanille.de/mirror/qpobox-${PV}.tar.gz \
- file://qpobox-0.5.4-opie.patch;patch=1 \
- file://qpobox.patch;patch=1"
-S = "${WORKDIR}/qpobox"
-
-inherit opie
-
-do_install() {
- install -d ${D}${palmtopdir}/share
- install -m 644 qpobox.key ${D}${palmtopdir}/share
-}
diff --git a/packages/qsvn/files/.mtn2git_empty b/packages/qsvn/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qsvn/files/.mtn2git_empty
diff --git a/packages/qsvn/files/build.patch b/packages/qsvn/files/build.patch
new file mode 100644
index 0000000000..086f532a70
--- /dev/null
+++ b/packages/qsvn/files/build.patch
@@ -0,0 +1,23 @@
+--- qsvn-0.3.0/qsvn.pro 2007-06-11 00:47:22.514013379 +0200
++++ qsvn-0.3.0/qsvn.pro 2007-06-11 00:47:49.206941206 +0200
+@@ -7,9 +7,6 @@
+ UI_DIR = .ui
+ OBJECTS_DIR = .obj
+
+- INCLUDEPATH += /usr/include/subversion-1 \
+- /usr/include/apr-0
+-
+ LIBS += -lsvn_client-1 \
+ -lsvn_delta-1 \
+ -lsvn_diff-1 \
+@@ -18,8 +15,8 @@
+ -lsvn_repos-1 \
+ -lsvn_subr-1 \
+ -lsvn_wc-1 \
+- -lapr-0 \
+- -laprutil-0
++ -lapr-1 \
++ -laprutil-1
+ }
+
+ win32 {
diff --git a/packages/qsvn/qsvn_0.3.0.bb b/packages/qsvn/qsvn_0.3.0.bb
index 13653ea898..575e9359b7 100644
--- a/packages/qsvn/qsvn_0.3.0.bb
+++ b/packages/qsvn/qsvn_0.3.0.bb
@@ -7,7 +7,8 @@ SECTION = "network"
DEPENDS = "apr-util subversion"
PR = "r0"
-SRC_URI = "http://download2.berlios.de/qsvn/qsvn-${PV}-src.tar.gz"
+SRC_URI = "http://download2.berlios.de/qsvn/qsvn-${PV}-src.tar.gz \
+ file://build.patch;patch=1"
inherit qmake qt4x11
diff --git a/packages/qt/qt-x11-free-common.inc b/packages/qt/qt-x11-free-common.inc
index d052b54c47..cb4ed12f8d 100644
--- a/packages/qt/qt-x11-free-common.inc
+++ b/packages/qt/qt-x11-free-common.inc
@@ -76,7 +76,7 @@ do_install() {
}
PACKAGES =+ "qt-x11-plugins-imageformats qt-x11-plugins-sqldrivers qt-x11-plugins-designer \
- qt-x11-designer qt-x11-assistant qt-x11-qvfb qt-x11-qtconfig qt-x11-plugins-debug"
+ qt-x11-designer qt-x11-assistant qt-x11-qvfb qt-x11-qtconfig"
FILES_qt-x11-plugins-imageformats = "${prefix}/plugins/imageformats/*.so"
FILES_qt-x11-plugins-sqldrivers = "${prefix}/plugins/sqldrivers/*.so"
FILES_qt-x11-plugins-designer = "${prefix}/plugins/designer/*.so"
@@ -84,5 +84,4 @@ FILES_qt-x11-designer = "${bindir}/designer"
FILES_qt-x11-assistant = "${bindir}/assistant"
FILES_qt-x11-qvfb = "${bindir}/qvfb"
FILES_qt-x11-qtconfig = "${bindir}/qtconfig"
-FILES_qt-x11-plugins-debug += "${prefix}/plugins/*/.debug"
-
+FILES_qt-x11-dbg += "${prefix}/plugins/*/.debug ${D}/qt-x11-plugins-debug"
diff --git a/packages/qt/qt4-x11-free-4.3.0/.mtn2git_empty b/packages/qt/qt4-x11-free-4.3.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/.mtn2git_empty
diff --git a/packages/qt/qt4-x11-free-4.3.0/0001-cross-compile.patch b/packages/qt/qt4-x11-free-4.3.0/0001-cross-compile.patch
new file mode 100644
index 0000000000..42f7b5575c
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0001-cross-compile.patch
@@ -0,0 +1,174 @@
+From 64210fec17ab819f21769e3e82bb26e9f2ccfdb4 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sun, 3 Jun 2007 18:30:37 +0200
+Subject: [PATCH] cross compile
+
+---
+ configure | 137 ++----------------------------------------------------------
+ 1 files changed, 5 insertions(+), 132 deletions(-)
+
+diff --git a/configure b/configure
+index 6b3ccd2..b3c2a52 100755
+--- a/configure
++++ b/configure
+@@ -733,7 +733,7 @@ while [ "$#" -gt 0 ]; do
+ UNKNOWN_ARG=yes
+ fi
+ ;;
+- -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk|-arch|-mysql_config)
++ -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk|-arch|-mysql_config|-crossarch)
+ VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
+ shift
+ VAL="$1"
+@@ -1109,6 +1109,9 @@ while [ "$#" -gt 0 ]; do
+ xplatform)
+ XPLATFORM="$VAL"
+ ;;
++ crossarch)
++ CROSSARCH="$VAL"
++ ;;
+ debug-and-release)
+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
+ CFG_DEBUG_RELEASE="$VAL"
+@@ -2092,137 +2095,7 @@ if [ "$OPT_VERBOSE" = "yes" ]; then
+ echo "Determining system architecture... ($UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_MACHINE)"
+ fi
+
+-if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then
+- case "$CFG_EMBEDDED" in
+- x86)
+- ARCH=i386
+- ;;
+- x86_64)
+- ARCH=x86_64
+- ;;
+- ipaq|sharp)
+- ARCH=arm
+- ;;
+- *)
+- ARCH="$CFG_EMBEDDED"
+- ;;
+- esac
+-else
+- case "$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_MACHINE" in
+- IRIX*:*:*)
+- ARCH=`uname -p`
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " SGI ($ARCH)"
+- fi
+- ;;
+- SunOS:5*:*)
+- case "$UNAME_MACHINE" in
+- sun4u*|sun4v*)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " Sun SPARC (sparc)"
+- fi
+- ARCH=sparc
+- ;;
+- i86pc)
+- case "$PLATFORM" in
+- *-64)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 64-bit AMD 80x86 (x86_64)"
+- fi
+- ARCH=x86_64
+- ;;
+- *)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32-bit Intel 80x86 (i386)"
+- fi
+- ARCH=i386
+- ;;
+- esac
+- esac
+- ;;
+- Darwin:*:*)
+- case "$UNAME_MACHINE" in
+- Power?Macintosh)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32-bit Apple PowerPC (powerpc)"
+- fi
+- ;;
+- x86)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32-bit Intel 80x86 (i386)"
+- fi
+- ;;
+- esac
+- ARCH=macosx
+- ;;
+- AIX:*:00????????00)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 64-bit IBM PowerPC (powerpc)"
+- fi
+- ARCH=powerpc
+- ;;
+- HP-UX:*:9000*)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " HP PA-RISC (parisc)"
+- fi
+- ARCH=parisc
+- ;;
+- *:*:i?86)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32-bit Intel 80x86 (i386)"
+- fi
+- ARCH=i386
+- ;;
+- *:*:x86_64|*:*:amd64)
+- if [ "$PLATFORM" = "linux-g++-32" ]; then
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32 bit on 64-bit AMD 80x86 (i386)"
+- fi
+- ARCH=i386
+- else
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 64-bit AMD 80x86 (x86_64)"
+- fi
+- ARCH=x86_64
+- fi
+- ;;
+- *:*:ppc)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 32-bit PowerPC (powerpc)"
+- fi
+- ARCH=powerpc
+- ;;
+- *:*:ppc64)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " 64-bit PowerPC (powerpc)"
+- fi
+- ARCH=powerpc
+- ;;
+- *:*:s390*)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " IBM S/390 (s390)"
+- fi
+- ARCH=s390
+- ;;
+- *:*:*)
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " Trying '$UNAME_MACHINE'..."
+- fi
+- ARCH="$UNAME_MACHINE"
+- ;;
+- esac
+-fi
+-
+-if [ -d "$relpath/src/corelib/arch/$ARCH" ]; then
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " '$ARCH' is supported"
+- fi
+-else
+- if [ "$OPT_VERBOSE" = "yes" ]; then
+- echo " '$ARCH' is unsupported, using 'generic'"
+- fi
+- ARCH=generic
+-fi
++ARCH="$CROSSARCH"
+
+ if [ "$OPT_VERBOSE" = "yes" ]; then
+ echo "System architecture: '$ARCH'"
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0002-fix-resinit-declaration.patch b/packages/qt/qt4-x11-free-4.3.0/0002-fix-resinit-declaration.patch
new file mode 100644
index 0000000000..e479a64a2b
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0002-fix-resinit-declaration.patch
@@ -0,0 +1,25 @@
+From acfeb18aa94bad6b2066e91cd15570889baaa252 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:04:01 +0200
+Subject: [PATCH] fix resinit declaration
+
+---
+ src/qt3support/network/q3dns.cpp | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/qt3support/network/q3dns.cpp b/src/qt3support/network/q3dns.cpp
+index 9bc7b16..bfc333e 100644
+--- a/src/qt3support/network/q3dns.cpp
++++ b/src/qt3support/network/q3dns.cpp
+@@ -30,7 +30,7 @@
+ # include <netinet/in.h>
+ # include <arpa/nameser.h>
+ # include <resolv.h>
+-extern "C" int res_init();
++extern "C" int res_init() throw();
+ #endif
+
+ // POSIX Large File Support redefines open -> open64
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0003-no-tools.patch b/packages/qt/qt4-x11-free-4.3.0/0003-no-tools.patch
new file mode 100644
index 0000000000..5412c90377
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0003-no-tools.patch
@@ -0,0 +1,25 @@
+From 03cbda241413e4ae727b2a92ff452162aa7ad440 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:06:01 +0200
+Subject: [PATCH] no tools
+
+---
+ src/src.pro | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/src.pro b/src/src.pro
+index 6e08180..957d3dc 100644
+--- a/src/src.pro
++++ b/src/src.pro
+@@ -3,7 +3,7 @@ TEMPLATE = subdirs
+ # this order is important
+ unset(SRC_SUBDIRS)
+ win32:SRC_SUBDIRS += src_winmain
+-SRC_SUBDIRS += src_tools_moc src_tools_rcc src_tools_uic src_corelib src_xml src_gui src_sql src_network src_svg src_script
++SRC_SUBDIRS += src_corelib src_xml src_gui src_sql src_network src_svg src_script
+ contains(QT_CONFIG, opengl): SRC_SUBDIRS += src_opengl
+ contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support
+ !cross_compile {
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0004-no-qmake.patch b/packages/qt/qt4-x11-free-4.3.0/0004-no-qmake.patch
new file mode 100644
index 0000000000..359f6df9d5
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0004-no-qmake.patch
@@ -0,0 +1,25 @@
+From f5a73ce944240de9013cc23288c115e8213add5e Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:06:59 +0200
+Subject: [PATCH] no qmake
+
+---
+ configure | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure b/configure
+index b3c2a52..1901e57 100755
+--- a/configure
++++ b/configure
+@@ -3271,7 +3271,7 @@ END {
+ }
+
+ # build qmake
+-if true; then ###[ '!' -f "$outpath/bin/qmake" ];
++if false; then ###[ '!' -f "$outpath/bin/qmake" ];
+ echo "Creating qmake. Please wait..."
+
+ OLD_QCONFIG_H=
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0005-fix-mkspecs.patch b/packages/qt/qt4-x11-free-4.3.0/0005-fix-mkspecs.patch
new file mode 100644
index 0000000000..93692699dc
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0005-fix-mkspecs.patch
@@ -0,0 +1,123 @@
+From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:39:58 +0200
+Subject: [PATCH] fix mkspecs
+
+---
+ mkspecs/common/g++.conf | 18 +++++++++---------
+ mkspecs/common/linux.conf | 26 +++++++++++++-------------
+ 2 files changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
+index f5a5c8e..4007c7e 100644
+--- a/mkspecs/common/g++.conf
++++ b/mkspecs/common/g++.conf
+@@ -2,12 +2,12 @@
+ # qmake configuration for common gcc
+ #
+
+-QMAKE_CC = gcc
+-QMAKE_CFLAGS += -pipe
++QMAKE_CC = $(OE_QMAKE_CC)
++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
+ QMAKE_CFLAGS_DEPS += -M
+ QMAKE_CFLAGS_WARN_ON += -Wall -W
+ QMAKE_CFLAGS_WARN_OFF += -w
+-QMAKE_CFLAGS_RELEASE += -O2
++QMAKE_CFLAGS_RELEASE += -O2
+ QMAKE_CFLAGS_DEBUG += -g
+ QMAKE_CFLAGS_SHLIB += -fPIC
+ QMAKE_CFLAGS_STATIC_LIB += -fPIC
+@@ -16,8 +16,8 @@ QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+ QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+-QMAKE_CXX = g++
+-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
++QMAKE_CXX = $(OE_QMAKE_CXX)
++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
+ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+ QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+ QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+@@ -30,9 +30,9 @@ QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+ QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+-QMAKE_LINK = g++
+-QMAKE_LINK_SHLIB = g++
+-QMAKE_LFLAGS +=
++QMAKE_LINK = $(OE_QMAKE_LINK)
++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
+ QMAKE_LFLAGS_RELEASE +=
+ QMAKE_LFLAGS_DEBUG +=
+ QMAKE_LFLAGS_APP +=
+@@ -40,7 +40,7 @@ QMAKE_LFLAGS_SHLIB += -shared
+ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME += -Wl,-soname,
+ QMAKE_LFLAGS_THREAD +=
+-QMAKE_RPATH = -Wl,-rpath,
++QMAKE_RPATH = -Wl,-rpath-link,
+
+ QMAKE_PCH_OUTPUT_EXT = .gch
+
+diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
+index 3796a87..52acf16 100644
+--- a/mkspecs/common/linux.conf
++++ b/mkspecs/common/linux.conf
+@@ -7,26 +7,26 @@ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+ QMAKE_INCDIR =
+ QMAKE_LIBDIR =
+-QMAKE_INCDIR_X11 = /usr/X11R6/include
+-QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+-QMAKE_INCDIR_OPENGL = /usr/X11R6/include
+-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
++QMAKE_INCDIR_X11 =
++QMAKE_LIBDIR_X11 =
++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
++QMAKE_INCDIR_OPENGL =
++QMAKE_LIBDIR_OPENGL =
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
+-QMAKE_LIBS_X11 = -lXext -lX11 -lm
+-QMAKE_LIBS_X11SM = -lSM -lICE
++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+ QMAKE_LIBS_NIS = -lnsl
+ QMAKE_LIBS_OPENGL = -lGLU -lGL
+ QMAKE_LIBS_OPENGL_QT = -lGL
+ QMAKE_LIBS_THREAD = -lpthread
+
+-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
++QMAKE_MOC = $(OE_QMAKE_MOC)
++QMAKE_UIC = $(OE_QMAKE_UIC)
+
+-QMAKE_AR = ar cqs
++QMAKE_AR = $(OE_QMAKE_AR) cqs
+ QMAKE_RANLIB =
+
+ QMAKE_TAR = tar -cf
+@@ -38,11 +38,11 @@ QMAKE_COPY_DIR = $(COPY) -r
+ QMAKE_MOVE = mv -f
+ QMAKE_DEL_FILE = rm -f
+ QMAKE_DEL_DIR = rmdir
+-QMAKE_STRIP = strip
++QMAKE_STRIP = $(OE_QMAKE_STRIP)
+ QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+ QMAKE_CHK_DIR_EXISTS = test -d
+ QMAKE_MKDIR = mkdir -p
+ QMAKE_INSTALL_FILE = install -m 644 -p
+ QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+-include(unix.conf)
+\ No newline at end of file
++include(unix.conf)
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0006-freetype-host-includes.patch b/packages/qt/qt4-x11-free-4.3.0/0006-freetype-host-includes.patch
new file mode 100644
index 0000000000..cc8e115fee
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0006-freetype-host-includes.patch
@@ -0,0 +1,23 @@
+From c9ab62bd9a56643574b3ae6e59e0ca776d4860d2 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Mon, 4 Jun 2007 14:48:50 +0200
+Subject: [PATCH] freetype host includes
+
+---
+ config.tests/unix/freetype/freetype.pri | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/config.tests/unix/freetype/freetype.pri b/config.tests/unix/freetype/freetype.pri
+index 84974bf..ab9a6f2 100644
+--- a/config.tests/unix/freetype/freetype.pri
++++ b/config.tests/unix/freetype/freetype.pri
+@@ -1,5 +1,5 @@
+ !cross_compile {
+- TRY_INCLUDEPATHS = /include /usr/include $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
+ for(p, TRY_INCLUDEPATHS) {
+ p = $$join(p, "", "", "/freetype2")
+ exists($$p):INCLUDEPATH *= $$p
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free-4.3.0/0007-openssl-host-includes.patch b/packages/qt/qt4-x11-free-4.3.0/0007-openssl-host-includes.patch
new file mode 100644
index 0000000000..35b71d9694
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.3.0/0007-openssl-host-includes.patch
@@ -0,0 +1,23 @@
+From d45943adb443ad4b85ca4504952dee743c675e1e Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Mon, 4 Jun 2007 14:58:34 +0200
+Subject: [PATCH] openssl host includes
+
+---
+ config.tests/unix/openssl/openssl.pri | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/config.tests/unix/openssl/openssl.pri b/config.tests/unix/openssl/openssl.pri
+index 756e5fe..19b4061 100644
+--- a/config.tests/unix/openssl/openssl.pri
++++ b/config.tests/unix/openssl/openssl.pri
+@@ -1,5 +1,5 @@
+ !cross_compile {
+- TRY_INCLUDEPATHS = /include /usr/include /usr/local/include $$QMAKE_INCDIR $$INCLUDEPATH
++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$INCLUDEPATH
+ for(p, TRY_INCLUDEPATHS) {
+ pp = $$join(p, "", "", "/openssl")
+ exists($$pp):INCLUDEPATH *= $$p
+--
+1.5.0.7
+
diff --git a/packages/qt/qt4-x11-free_4.1.2.bb b/packages/qt/qt4-x11-free_4.1.2.bb
index 25c64379d9..32eb3ced35 100644
--- a/packages/qt/qt4-x11-free_4.1.2.bb
+++ b/packages/qt/qt4-x11-free_4.1.2.bb
@@ -25,18 +25,7 @@ export QTDIR = "${S}"
STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
EXTRA_OEMAKE = "-e"
-def qt_arch(d):
- import bb, re
- arch = bb.data.getVar('TARGET_ARCH', d, 1)
- if re.match("^i.86$", arch):
- arch = "x86"
- elif re.match("^arm.*", arch):
- arch = "arm"
- elif arch == "x86_64":
- arch = "x86"
- elif arch == "mipsel":
- arch = "mips"
- return arch
+require qt4_arch.inc
QT_ARCH := "${@qt_arch(d)}"
diff --git a/packages/qt/qt4-x11-free_4.3.0.bb b/packages/qt/qt4-x11-free_4.3.0.bb
new file mode 100644
index 0000000000..35fa1ccd62
--- /dev/null
+++ b/packages/qt/qt4-x11-free_4.3.0.bb
@@ -0,0 +1,183 @@
+SECTION = "x11/libs"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "GPL QPL"
+DEPENDS = "pkgconfig-native uicmoc4-native qmake2-native freetype jpeg virtual/libx11 xft libxext libxrender libxrandr libxcursor dbus openssl"
+RDEPENDS_${PN} = "${NONDEV_PACKAGES}"
+PROVIDES = "qt4x11"
+
+PR = "r5"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0003-no-tools.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0005-fix-mkspecs.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0007-openssl-host-includes.patch;patch=1"
+S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
+
+PARALLEL_MAKE = ""
+
+inherit qmake-base qt4x11
+
+export QTDIR = "${S}"
+STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
+EXTRA_OEMAKE = "-e"
+
+require qt4_arch.inc
+
+QT_ARCH := "${@qt_arch(d)}"
+
+# FIXME:
+# * add missing options
+QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
+ -no-tablet -no-xkb -no-nis -no-cups -no-opengl \
+ -no-sse -no-sse2 -no-mmx -no-3dnow \
+ -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
+ -qdbus \
+ -verbose -stl -no-accessibility \
+ -pch -no-glib"
+
+EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after DEFINES+=QT_NO_XIM INCPATH+=${STAGING_INCDIR} \
+ INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
+ QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
+ AR="${TARGET_PREFIX}ar cqs" \
+ MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
+
+do_configure() {
+ echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
+ echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
+ unset QMAKESPEC
+ ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
+ ln -s linux-g++ mkspecs/${TARGET_OS}-oe-g++
+ #export QMAKESPEC="linux-oe-g++"
+ #rm -rf ./mkspecs
+ #ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
+ echo yes | ./configure -prefix / -platform ${TARGET_OS}-oe-g++ -crossarch ${QT_ARCH} ${QT_CONFIG_FLAGS} -fast \
+ -L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
+}
+
+# FIXME: Might want to compile the cross tools for the -dev packages as well...
+do_compile() {
+ unset CFLAGS CXXFLAGS
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
+
+ oe_runmake ${EXTRA_ENV}
+}
+
+PARTS = "3Support AssistantClient Core DBus Designer DesignerComponents Gui Network Script Sql Svg Test Xml"
+
+do_stage() {
+ oe_runmake install INSTALL_ROOT=/
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${STAGING_QT_DIR}/bin/rcc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${STAGING_QT_DIR}/bin/moc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${STAGING_QT_DIR}/bin/uic
+ sed -i -e 's,^QMAKE_RPATHDIR.*,QMAKE_RPATHDIR=${STAGING_QT_DIR}/lib,g' ${STAGING_QT_DIR}/mkspecs/qconfig.pri
+ for pc in ${STAGING_QT_DIR}/lib/pkgconfig/Qt{AssistantClient,DBus,Test,UiTools}.pc ; do
+ sed -i -e 's,${S}/lib,${STAGING_QT_DIR}/lib,g' $pc
+ done
+ for pc in ${STAGING_QT_DIR}/lib/pkgconfig/*.pc ; do
+ install -m 0644 $pc ${PKG_CONFIG_PATH}/
+ done
+}
+
+# FIXME: Might want to call oe_runmake install INSTALL_ROOT=${D}/${prefix} as well...
+# FIXME: Might want to install everything into ${libdir}/qt4/* to match the usual packing...
+do_install() {
+ install -d ${D}${libdir}
+ install -d ${D}${bindir}
+ install -d ${D}${includedir}
+ for part in ${PARTS}
+ do
+ oe_libinstall -so -C lib libQt$part ${D}${libdir}
+ done
+ oe_libinstall -a -C lib libQtUiTools ${D}${libdir}
+ cp -pPR include/* ${D}${includedir}
+ cp -pPR plugins ${D}${libdir}
+ cp -pPR bin/* ${D}${bindir}
+
+ install -d ${D}${bindir}/qt4-examples
+ for binary in `find examples -perm 0755 -type f`
+ do
+ install -m 0755 $binary ${D}${bindir}/qt4-examples/
+ done
+ install -d ${D}${bindir}/qt4-demos
+ for binary in `find demos -perm 0755 -type f`
+ do
+ install -m 0755 $binary ${D}${bindir}/qt4-demos/
+ done
+ rm ${D}${bindir}/rcc ${D}${bindir}/uic ${D}${bindir}/moc
+}
+
+NONDEV_PACKAGES = "libqtcore4 libqtgui4 libqtnetwork4 \
+ libqtsql4 libqtsvg4 libqttest4 \
+ libqtxml4 \
+ libqtdesigner4 libqtdesignercomponents4 \
+ libqt3support4 \
+ libqtassistantclient4 libqtscript4 \
+ libqtdbus4 \
+ qt4-assistant qt4-common qt4-designer qt4-demos qt4-examples qt4-linguist \
+ qt4-pixeltool qt4-dbus \
+ qt4-plugins-accessible qt4-plugins-codecs qt4-plugins-designer qt4-plugins-imageformats qt4-plugins-sqldrivers \
+ qt4-plugins-inputmethods qt4-plugins-iconengines"
+
+PACKAGES += "libqtcore4-dev libqtgui4-dev libqtnetwork4-dev libqtsql4-dev libqtsvg4-dev libqttest4-dev \
+ libqtxml4-dev libqtdesigner4-dev libqtdesignercomponents4-dev libqt3support4-dev \
+ libqtassistantclient4-dev libqtscript4-dev libqtdbus4-dev \
+ ${NONDEV_PACKAGES}"
+
+ALLOW_EMPTY = "1"
+FILES_${PN} = ""
+
+FILES_libqtcore4 = "${libdir}/libQtCore.so.*"
+FILES_libqtcore4-dev = "${libdir}/libQtCore.so"
+FILES_libqtgui4 = "${libdir}/libQtGui.so.*"
+FILES_libqtgui4-dev = "${libdir}/libQtGui.so"
+FILES_libqtnetwork4 = "${libdir}/libQtNetwork.so.*"
+FILES_libqtnetwork4-dev = "${libdir}/libQtNetwork.so"
+FILES_libqtsql4 = "${libdir}/libQtSql.so.*"
+FILES_libqtsql4-dev = "${libdir}/libQtSql.so"
+FILES_libqtsvg4 = "${libdir}/libQtSvg.so.*"
+FILES_libqtsvg4-dev = "${libdir}/libQtSvg.so"
+FILES_libqttest4 = "${libdir}/libQtTest.so.*"
+FILES_libqttest4-dev = "${libdir}/libQtTest.so"
+FILES_libqtxml4 = "${libdir}/libQtXml.so.*"
+FILES_libqtxml4-dev = "${libdir}/libQtXml.so"
+FILES_libqtdesigner4 = "${libdir}/libQtDesigner.so.*"
+FILES_libqtdesigner4-dev = "${libdir}/libQtDesigner.so"
+FILES_libqtdesignercomponents4 = "${libdir}/libQtDesignerComponents.so.*"
+FILES_libqtdesignercomponents4-dev = "${libdir}/libQtDesignerComponents.so"
+FILES_libqt3support4 = "${libdir}/libQt3Support.so.*"
+FILES_libqt3support4-dev = "${libdir}/libQt3Support.so"
+FILES_libqtassistantclient4 = "${libdir}/libQtAssistantClient.so.*"
+FILES_libqtassistantclient4-dev = "${libdir}/libQtAssistantClient.so"
+FILES_libqtscript4 = "${libdir}/libQtScript.so.*"
+FILES_libqtscript4-dev = "${libdir}/libQtScript.so"
+FILES_libqtdbus4 = "${libdir}/libQtDBus.so.*"
+FILES_libqtdbus4-dev = "${libdir}/libQtDBus.so"
+
+FILES_qt4-plugins-accessible = "${libdir}/plugins/accessible/*.so"
+FILES_qt4-plugins-codecs = "${libdir}/plugins/codecs/*.so"
+FILES_qt4-plugins-designer = "${libdir}/plugins/designer/*.so"
+FILES_qt4-plugins-imageformats = "${libdir}/plugins/imageformats/*.so"
+FILES_qt4-plugins-sqldrivers = "${libdir}/plugins/sqldrivers/*.so"
+FILES_qt4-plugins-inputmethods = "${libdir}/plugins/inputmethods/*.so"
+FILES_qt4-plugins-iconengines = "${libdir}/plugins/iconengines/*.so"
+
+FILES_qt4-assistant = "${bindir}/*assistant*"
+FILES_qt4-designer = "${bindir}/*designer*"
+FILES_qt4-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
+FILES_qt4-pixeltool = "${bindir}/pixeltool"
+FILES_qt4-dbus = "${bindir}/qdbus ${bindir}/qdbusxml2cpp ${bindir}/qdbuscpp2xml ${bindir}/qdbusviewer"
+
+FILES_qt4-common = "${bindir}/qtconfig"
+FILES_qt4-examples = "${bindir}/qt4-examples/*"
+FILES_qt4-demos = "${bindir}/qtdemo ${bindir}/qt4-demos/*"
+
+FILES_${PN}-dev += "${bindir}/rcc ${bindir}/uic* ${bindir}/moc ${bindir}/qmake ${bindir}/syncqt \
+ ${bindir}/qt3to4 ${bindir}/findtr"
+FILES_${PN}-dbg += "${bindir}/*/.debug ${plugindir}/.debug"
diff --git a/packages/qt/qt4_arch.inc b/packages/qt/qt4_arch.inc
new file mode 100644
index 0000000000..6dcbd2bc4a
--- /dev/null
+++ b/packages/qt/qt4_arch.inc
@@ -0,0 +1,13 @@
+def qt_arch(d):
+ import bb, re
+ arch = bb.data.getVar('TARGET_ARCH', d, 1)
+ if re.match("^i.86$", arch):
+ arch = "i386"
+ elif re.match("^arm.*", arch):
+ arch = "arm"
+ elif arch == "x86_64":
+ arch = "x86"
+ elif arch == "mipsel":
+ arch = "mips"
+ return arch
+
diff --git a/packages/qte/qte-2.3.10/c7x0-w100-gcc4.patch b/packages/qte/qte-2.3.10/c7x0-w100-gcc4.patch
new file mode 100644
index 0000000000..101f9596b0
--- /dev/null
+++ b/packages/qte/qte-2.3.10/c7x0-w100-gcc4.patch
@@ -0,0 +1,31 @@
+diff --git a/src/kernel/qgfxw100_qws.cpp b/src/kernel/qgfxw100_qws.cpp
+index cbc42d6..b5dfe31 100644
+--- a/src/kernel/qgfxw100_qws.cpp
++++ b/src/kernel/qgfxw100_qws.cpp
+@@ -1250,7 +1250,7 @@ void QGfxW100< depth, type>::dDrawPolyline( const QPointArray &a,
+ points[ npoints ] = points[ npoints - 1 ];
+
+
+- GFX_START( clipbounds );
++ GFX_START( this->clipbounds );
+ driver.setFrgColour( this->cpen.color().rgb() );
+ driver.setRopOperation( ROP3_PATCOPY );
+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) {
+@@ -1341,7 +1341,7 @@ void QGfxW100< depth, type>::dDrawPoint( int x, int y )
+ point.XCoord = x + this->xoffs;
+ point.YCoord = y + this->yoffs;
+
+- GFX_START( clipbounds );
++ GFX_START( this->clipbounds );
+ driver.setFrgColour( this->cpen.color().rgb() );
+ driver.setRopOperation( ROP3_PATCOPY );
+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) {
+@@ -1413,7 +1413,7 @@ void QGfxW100< depth, type>::dDrawPoints( const QPointArray &a,
+ points[i].YCoord = a[i+index].y() + this->yoffs;
+ }
+
+- GFX_START( clipbounds );
++ GFX_START( this->clipbounds );
+ driver.setFrgColour( this->cpen.color().rgb() );
+ driver.setRopOperation( ROP3_PATCOPY );
+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) {
diff --git a/packages/qte/qte-2.3.10/deprecated/.mtn2git_empty b/packages/qte/qte-2.3.10/deprecated/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qte/qte-2.3.10/deprecated/.mtn2git_empty
diff --git a/packages/qte/qte-2.3.10/c700-hardware.patch b/packages/qte/qte-2.3.10/deprecated/c700-hardware.patch
index fa4bd25f37..fa4bd25f37 100644
--- a/packages/qte/qte-2.3.10/c700-hardware.patch
+++ b/packages/qte/qte-2.3.10/deprecated/c700-hardware.patch
diff --git a/packages/qte/qte-2.3.10/devfs.patch b/packages/qte/qte-2.3.10/deprecated/devfs.patch
index dd46d516ff..dd46d516ff 100644
--- a/packages/qte/qte-2.3.10/devfs.patch
+++ b/packages/qte/qte-2.3.10/deprecated/devfs.patch
diff --git a/packages/qte/qte-2.3.10/ipaq-keyboard.patch b/packages/qte/qte-2.3.10/deprecated/ipaq-keyboard.patch
index 47474f698e..47474f698e 100644
--- a/packages/qte/qte-2.3.10/ipaq-keyboard.patch
+++ b/packages/qte/qte-2.3.10/deprecated/ipaq-keyboard.patch
diff --git a/packages/qte/qte-2.3.10/mnci-touchscreen.patch b/packages/qte/qte-2.3.10/deprecated/mnci-touchscreen.patch
index 570c2ff290..570c2ff290 100644
--- a/packages/qte/qte-2.3.10/mnci-touchscreen.patch
+++ b/packages/qte/qte-2.3.10/deprecated/mnci-touchscreen.patch
diff --git a/packages/qte/qte-2.3.10/mnci.patch b/packages/qte/qte-2.3.10/deprecated/mnci.patch
index c2e0e079d9..c2e0e079d9 100644
--- a/packages/qte/qte-2.3.10/mnci.patch
+++ b/packages/qte/qte-2.3.10/deprecated/mnci.patch
diff --git a/packages/qte/qte-2.3.10/deprecated/openmn/.mtn2git_empty b/packages/qte/qte-2.3.10/deprecated/openmn/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qte/qte-2.3.10/deprecated/openmn/.mtn2git_empty
diff --git a/packages/qte/qte-2.3.10/openmn/qkeyboard_qws.cpp b/packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.cpp
index 9917675a43..9917675a43 100644
--- a/packages/qte/qte-2.3.10/openmn/qkeyboard_qws.cpp
+++ b/packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.cpp
diff --git a/packages/qte/qte-2.3.10/openmn/qkeyboard_qws.h b/packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.h
index aa459d1448..aa459d1448 100644
--- a/packages/qte/qte-2.3.10/openmn/qkeyboard_qws.h
+++ b/packages/qte/qte-2.3.10/deprecated/openmn/qkeyboard_qws.h
diff --git a/packages/qte/qte-2.3.10/simpad-defaultkbd.patch b/packages/qte/qte-2.3.10/deprecated/simpad-defaultkbd.patch
index 3e5450a4da..3e5450a4da 100644
--- a/packages/qte/qte-2.3.10/simpad-defaultkbd.patch
+++ b/packages/qte/qte-2.3.10/deprecated/simpad-defaultkbd.patch
diff --git a/packages/qte/qte-2.3.10/simpad.patch b/packages/qte/qte-2.3.10/deprecated/simpad.patch
index 8a728ef74a..8a728ef74a 100644
--- a/packages/qte/qte-2.3.10/simpad.patch
+++ b/packages/qte/qte-2.3.10/deprecated/simpad.patch
diff --git a/packages/qte/qte-2.3.10/kernel-asm-page.patch b/packages/qte/qte-2.3.10/kernel-asm-page.patch
new file mode 100644
index 0000000000..bad2d95967
--- /dev/null
+++ b/packages/qte/qte-2.3.10/kernel-asm-page.patch
@@ -0,0 +1,20 @@
+diff --git a/src/kernel/qpixmapcache.cpp b/src/kernel/qpixmapcache.cpp
+index c2e7d9b..8d39585 100644
+--- a/src/kernel/qpixmapcache.cpp
++++ b/src/kernel/qpixmapcache.cpp
+@@ -123,9 +123,13 @@ void cleanup_pixmap_cache();
+ #ifdef THROW_AWAY_UNUSED_PAGES
+ # include <sys/mman.h> // madvise
+ # include <asm/page.h> // PAGE_SIZE,PAGE_MASK,PAGE_ALIGN
++# include <unistd.h> // getpagesize()
++# if (!defined(PAGE_ALIGN)) && defined(PAGE_SIZE) && defined(PAGE_MASK)
++# define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
++# endif
+ # ifndef PAGE_ALIGN
+-# define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
+-# endif // PAGE_ALIGN
++# define PAGE_ALIGN(addr) (((addr)+getpagesize()-1)&~(getpagesize()-1))
++# endif
+ #endif // THROW_AWAY_UNUSED_PAGES
+
+
diff --git a/packages/qte/qte-2.3.10/kernel-keymap-tosa.patch b/packages/qte/qte-2.3.10/kernel-keymap-tosa.patch
deleted file mode 100644
index ca445f4d1d..0000000000
--- a/packages/qte/qte-2.3.10/kernel-keymap-tosa.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-2.3.9-snapshot-20050114/src/kernel/qkeyboard_qws.cpp~kernel-keymap-tosa
-+++ qt-2.3.9-snapshot-20050114/src/kernel/qkeyboard_qws.cpp
-@@ -355,14 +355,24 @@
- { Qt::Key_CapsLock, 0xffff , 0xffff , 0xffff }, // 3c 60
- { Qt::Key_At, '@' , 's' , 'S'-64 }, // 3d
- { Qt::Key_Question, '?' , '?' , 0xffff }, // 3e
-+#ifdef QT_QWS_SL6000
-+ { Qt::Key_Comma, ',' , ';' , 0xffff }, // 3f
-+ { Qt::Key_Period, '.' , ':' , 0xffff }, // 40
-+#else
- { Qt::Key_Comma, ',' , ',' , 0xffff }, // 3f
- { Qt::Key_Period, '.' , '.' , 0xffff }, // 40
-+#endif
- { Qt::Key_Tab, 9 , '\\' , 0xffff }, // 41
- { Qt::Key_X, 0xffff , 'x' , 'X'-64 }, // 42
- { Qt::Key_C, 0xffff , 'c' , 'C'-64 }, // 43
- { Qt::Key_V, 0xffff , 'v' , 'V'-64 }, // 44
-+#ifdef QT_QWS_SL6000
-+ { Qt::Key_Slash, '/' , '?' , 0xffff }, // 45
-+ { Qt::Key_Apostrophe, '\'' , '"' , 0xffff }, // 46 70
-+#else
- { Qt::Key_Slash, '/' , '/' , 0xffff }, // 45
- { Qt::Key_Apostrophe, '\'' , '\'' , 0xffff }, // 46 70
-+#endif
- { Qt::Key_Semicolon, ';' , ';' , 0xffff }, // 47
- { Qt::Key_QuoteDbl, '\"' , '\"' , 0xffff }, // 48
- { Qt::Key_Colon, ':' , ':' , 0xffff }, // 49
-@@ -572,6 +582,32 @@
- static const int keyMSize = sizeof(keyM)/sizeof(QWSServer::KeyMap)-1;
- static QIntDict<QWSServer::KeyMap> *overrideMap = 0;
-
-+#if defined(QT_QWS_SL6000)
-+/* Translation table to obtain a 'legacy' keycode corresponding to
-+ Fn+key on tosa
-+ Other devices obviously send different keycodes while Fn is down, tosa sends
-+ the same keys as usual bracketed by Fn-down/Fn-up.
-+ This table is used while Fn is down to obtain the key-code the SL-5xxx would
-+ send, so the rest of keyboard processing does not need to be adjusted. */
-+static const uchar sl6kFnTrans[] = { 0x00,
-+ 0x5e, 0x3a, 0x43, 0x4a, 0x2b, 0x4b, 0x4c, 0x4d, 0x30, 0x4e, 0x4f, 0x50,
-+ // !, -, cpy, #, 3, $, %, _, 8, &, *, (,
-+ 0x53, 0x3b, 0x31, 0x32, 0x29, 0x2c, 0x3d, 0x2d, 0x2f, 0x44, 0x2a, 0x42,
-+ // =, +, 9, 0, 1, 4, @, 5, 7, pste, 2, cut,
-+ // padding for keycodes which don't ever get directly sent on tosa
-+ // except for y->6, ret->'>', BS->DEL
-+ 0x2e, 0x00, 0x00, 0x57, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // 6, _Z, shft, ret, F11, fn, BS?, F31, lght, cncl, lft, up,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // dn, rght, OK, home, 1, 2, 3, 4, 5, 6, 7, 8,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // 9, 0, UNK, UNK, UNK, UNK, UNK, UNK, UNK, -, +, caps,
-+ // here are a few translatable codes again...
-+ 0x00, 0x00, 0x54, 0x56, 0x3c, 0x00, 0x00, 0x00, 0x70, 0x55 };
-+ // @, ?, ,, ., tab, cut, cpy, pste, /, '
-+static const int sl6kFnSize = sizeof(sl6kFnTrans);
-+#endif
-+
- /*!
- Changes the mapping of the keyboard; adding the scancode to Unicode
- mappings from \a map. The server takes over ownership of \a map
-@@ -882,6 +918,15 @@
- int keypad = 0;
-
- #ifndef QT_QWS_USE_KEYCODES
-+#if defined(QT_QWS_SL6000)
-+ qDebug("Key pressed: %x", code);
-+ if (fn)
-+ if (code < sl6kFnSize) {
-+ code = sl6kFnTrans[code];
-+ qDebug("Translated Fn: %x", code);
-+ } else
-+ qDebug("Untranslatable Fn: %x", code);
-+#endif
- #if defined(QT_QWS_IPAQ)
- // map ipaq 'action' key (0x60, 0xe0)
- if ((code & 0x7f) == 0x60) {
diff --git a/packages/qte/qte-2.3.10/kernel-keymap.patch b/packages/qte/qte-2.3.10/kernel-keymap.patch
index a17362ba87..0111c83b45 100644
--- a/packages/qte/qte-2.3.10/kernel-keymap.patch
+++ b/packages/qte/qte-2.3.10/kernel-keymap.patch
@@ -1,8 +1,6 @@
-Index: src/kernel/kernelkeyboard.cpp
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ qte/src/kernel/kernelkeyboard.cpp 2006-04-01 23:42:35.154645456 +0200
-@@ -0,0 +1,701 @@
+--- /dev/null 2004-07-13 00:58:01.000000000 +0000
++++ qte/src/kernel/kernelkeyboard.cpp 2007-04-07 01:00:36.000000000 +0000
+@@ -0,0 +1,769 @@
+/*
+
+ Copyright (C) 2003 Chris Larson
@@ -73,6 +71,22 @@ Index: src/kernel/kernelkeyboard.cpp
+ */
+
+/*
++ Paul Sokolovsky, 2007-04:
++
++ 1. Added support for nicely named and extensible key bindings.
++ E.g., in loadkeys do:
++ keycode 155 = F100
++ string F100 = "power"
++ where 155 is keycode a power button happens to have on your machine, F100 is
++ arbitrary function key (please use F100-F120), and "power" is OPIE binding.
++ Currently defined bindings are "power", "backlight", "record"
++ 2. K_DO ("Do") keycode is mapped to OPIE power button by default. Kernel uses
++ K_DO for KEY_POWER input subsystem keycode. So, if your device does the right
++ thing, it will work out of the box.
++ 3. Implemented NumLock handling for numeric keypad.
++ */
++
++/*
+ This is an alternative implementation of the QWSTtyKeyboardHandler
+ of Trolltech's QtE.
+
@@ -179,6 +193,24 @@ Index: src/kernel/kernelkeyboard.cpp
+ return;
+}
+
++static Qt::Key getSpecialKey(int fKey)
++{
++ struct kbsentry kbs;
++ kbs.kb_func = fKey;
++
++ if (ioctl(kbdFD, KDGKBSENT, &kbs) != 0)
++ return Qt::Key_unknown;
++ const char *str = (const char *)kbs.kb_string;
++
++ if (!strcmp("record", str))
++ return Qt::Key_F24;
++ else if (!strcmp("power", str))
++ return Qt::Key_F34;
++ else if (!strcmp("backlight", str))
++ return Qt::Key_F35;
++
++ return Qt::Key_unknown;
++}
+
+void QWSTtyKeyboardHandler::readKeyboardMap()
+{
@@ -221,7 +253,12 @@ Index: src/kernel/kernelkeyboard.cpp
+ kernel_map[map][key] = KeyMap( static_cast<Qt::Key>( Qt::Key_F1 + kval ), kval );
+ else if ( kval >= 30 && kval <= 44)
+ kernel_map[map][key] = KeyMap( static_cast<Qt::Key>( Qt::Key_F21 + (kval - 30) ), kval );
-+ else
++ else {
++ Qt::Key specialKey = getSpecialKey(kval);
++ if (specialKey != Qt::Key_unknown) {
++ kernel_map[map][key] = KeyMap( specialKey, kval );
++ }
++ else
+ switch(kbe.kb_value ) {
+ case K_INSERT:
+ kernel_map[map][key] = KeyMap( Qt::Key_Insert, kval );
@@ -251,10 +288,13 @@ Index: src/kernel/kernelkeyboard.cpp
+ kernel_map[map][key] = KeyMap( Qt::Key_Home, kval );
+ break;
+ case K_DO:
++ kernel_map[map][key] = KeyMap( Qt::Key_F34, kval );
++ break;
+ default:
+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval );
+ break;
+ }
++ }
+ break;
+
+ case KT_SPEC:
@@ -302,56 +342,58 @@ Index: src/kernel/kernelkeyboard.cpp
+ */
+ switch(kbe.kb_value ) {
+ case K_P0:
-+ kernel_map[map][key] = KeyMap( Qt::Key_0, 48 );
++ kernel_map[map][key] = KeyMap( Qt::Key_0, kbe.kb_value );
+ break;
+ case K_P1:
-+ kernel_map[map][key] = KeyMap( Qt::Key_1, 49 );
++ kernel_map[map][key] = KeyMap( Qt::Key_1, kbe.kb_value );
+ break;
+ case K_P2:
-+ kernel_map[map][key] = KeyMap( Qt::Key_2, 50 );
++ kernel_map[map][key] = KeyMap( Qt::Key_2, kbe.kb_value );
+ break;
+ case K_P3:
-+ kernel_map[map][key] = KeyMap( Qt::Key_3, 51 );
++ kernel_map[map][key] = KeyMap( Qt::Key_3, kbe.kb_value );
+ break;
+ case K_P4:
-+ kernel_map[map][key] = KeyMap( Qt::Key_4, 52 );
++ kernel_map[map][key] = KeyMap( Qt::Key_4, kbe.kb_value );
+ break;
+ case K_P5:
-+ kernel_map[map][key] = KeyMap( Qt::Key_5, 53 );
++ kernel_map[map][key] = KeyMap( Qt::Key_5, kbe.kb_value );
+ break;
+ case K_P6:
-+ kernel_map[map][key] = KeyMap( Qt::Key_6, 54 );
++ kernel_map[map][key] = KeyMap( Qt::Key_6, kbe.kb_value );
+ break;
+ case K_P7:
-+ kernel_map[map][key] = KeyMap( Qt::Key_7, 55 );
++ kernel_map[map][key] = KeyMap( Qt::Key_7, kbe.kb_value );
+ break;
+ case K_P8:
-+ kernel_map[map][key] = KeyMap( Qt::Key_8, 56 );
++ kernel_map[map][key] = KeyMap( Qt::Key_8, kbe.kb_value );
+ break;
+ case K_P9:
-+ kernel_map[map][key] = KeyMap( Qt::Key_9, 57 );
++ kernel_map[map][key] = KeyMap( Qt::Key_9, kbe.kb_value );
+ break;
+ case K_PPLUS:
-+ kernel_map[map][key] = KeyMap( Qt::Key_Plus, kval );
++ kernel_map[map][key] = KeyMap( Qt::Key_Plus, '+' );
+ break;
+ case K_PMINUS:
-+ kernel_map[map][key] = KeyMap( Qt::Key_Minus, kval );
++ kernel_map[map][key] = KeyMap( Qt::Key_Minus, '-' );
+ break;
+ case K_PSTAR:
-+ kernel_map[map][key] = KeyMap( Qt::Key_multiply, 42 );
++ kernel_map[map][key] = KeyMap( Qt::Key_multiply, '*' );
+ break;
+ case K_PSLASH:
-+ kernel_map[map][key] = KeyMap( Qt::Key_division, kval );
++ kernel_map[map][key] = KeyMap( Qt::Key_division, '/' );
+ break;
+ case K_PENTER:
+ kernel_map[map][key] = KeyMap( Qt::Key_Enter, kval );
+ break;
+ case K_PCOMMA:
-+ kernel_map[map][key] = KeyMap( Qt::Key_Comma, kval ) ;
++ kernel_map[map][key] = KeyMap( Qt::Key_Comma, '.' ) ;
+ break;
+ case K_PPLUSMINUS:
+ kernel_map[map][key] = KeyMap( Qt::Key_plusminus, kval );
++ break;
+ case K_PDOT:
++ kernel_map[map][key] = KeyMap( Qt::Key_Comma, '.' ) ;
+ break;
+ case K_PPARENL:
+ kernel_map[map][key] = KeyMap( Qt::Key_ParenLeft, kval );
@@ -511,6 +553,19 @@ Index: src/kernel/kernelkeyboard.cpp
+ }
+}
+
++static Qt::Key numpad2cursor[NR_PAD] = {
++ Qt::Key_Insert,
++ Qt::Key_End,
++ Qt::Key_Down,
++ Qt::Key_Next,
++ Qt::Key_Left,
++ Qt::Key_5,
++ Qt::Key_Right,
++ Qt::Key_Home,
++ Qt::Key_Up,
++ Qt::Key_Prior,
++};
++
+void QWSTtyKeyboardHandler::handleKey(unsigned int code, bool release)
+{
+ int old_modifier = modifier;
@@ -522,7 +577,9 @@ Index: src/kernel/kernelkeyboard.cpp
+ key_map = kernel_map[0][code];
+ }
+
-+ unsigned short unicode = acm[key_map.code] & 0xff;
++ unsigned short unicode = 0xffff;
++ if (key_map.code < 0x100)
++ unicode = acm[key_map.code & 0xff] & 0xff;
+ unsigned int qtKeyCode = key_map.key;
+
+// if ( !release )
@@ -599,6 +656,15 @@ Index: src/kernel/kernelkeyboard.cpp
+
+ handleExtra( qtKeyCode, release );
+
++ // Do NumLock
++ if (KTYP(key_map.code) == KT_PAD) {
++ if (!numlock) {
++ qtKeyCode = numpad2cursor[KVAL(key_map.code)];
++ } else {
++ unicode = KVAL(key_map.code) + '0';
++ }
++ }
++
+ /*
+ * do not repeat modifier keys
+ */
diff --git a/packages/qte/qte-2.3.10/key.patch b/packages/qte/qte-2.3.10/key.patch
index 9092accd2c..d3cf4f76e7 100644
--- a/packages/qte/qte-2.3.10/key.patch
+++ b/packages/qte/qte-2.3.10/key.patch
@@ -72,19 +72,3 @@ Index: qt-2.3.10/src/kernel/qkeyboard_qws.cpp
}
#ifndef QT_QWS_USE_KEYCODES
extended = 0;
-@@ -2056,6 +2062,7 @@
- press ? "press" : "release",
- repeatable ? "true":"false" );
-
-+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
- if ( qt_screen->isTransformed() && k >= Qt::Key_Left && k <= Qt::Key_Down )
- {
- qDebug( "SimpadButtonsHandler() - We are transformed! Correcting..." );
-@@ -2063,6 +2070,7 @@
- k = xform_dirkey( k );
- qDebug( "SimpadButtonsHandler() - Old Key: %d - New Key %d", oldK, k );
- }
-+#endif
-
- if ( repeatable && press )
- repeater->start( repeatdelay, true );
diff --git a/packages/qte/qte-2.3.10/remove-unused-kbdhandler.patch b/packages/qte/qte-2.3.10/remove-unused-kbdhandler.patch
new file mode 100644
index 0000000000..2bebb020f3
--- /dev/null
+++ b/packages/qte/qte-2.3.10/remove-unused-kbdhandler.patch
@@ -0,0 +1,420 @@
+--- qt-2.3.10.orig/src/kernel/qkeyboard_qws.cpp.org 2007-07-19 11:00:39.000000000 +0300
++++ qt-2.3.10/src/kernel/qkeyboard_qws.cpp 2007-07-19 12:14:48.000000000 +0300
+@@ -853,417 +853,6 @@
+
+ void QWSPC101KeyboardHandler::doKey(uchar code)
+ {
+- const QWSServer::KeyMap *currentKey = 0;
+- int keyCode = Qt::Key_unknown;
+- bool release = false;
+- int keypad = 0;
+-
+-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) // need autorepeat implemented here?
+- bool repeatable = TRUE;
+-
+-#ifndef QT_QWS_USE_KEYCODES
+-#if defined(QT_QWS_IPAQ)
+- // map ipaq 'action' key (0x60, 0xe0)
+- if ((code & 0x7f) == 0x60) {
+-#if defined(QT_KEYPAD_MODE)
+- // to keycode for select (keypad mode)
+- code = (code & 0x80) | 116;
+-#else
+- // to keycode for space. (no keypad mode0
+- code = (code & 0x80) | 57;
+-#endif
+- }
+-#endif
+-
+-#if !defined(QT_QWS_SL5XXX)
+- if (code == 224
+-#if defined(QT_QWS_IPAQ)
+- && !ipaq_return_pressed
+-#endif
+- ) {
+- // extended
+- extended = 1;
+- return;
+- }
+- else if (code == 225) {
+- // extended 2
+- extended = 2;
+- return;
+- }
+-#endif
+-#endif
+-
+-
+- /*------------------------------------------------------------------
+- First find the Qt KeyCode
+- ------------------------------------------------------------------*/
+-
+- if (code & 0x80) {
+- release = true;
+- code &= 0x7f;
+- }
+-
+-#ifndef QT_QWS_USE_KEYCODES
+- if (extended == 1) {
+- currentKey = overrideMap ? overrideMap->find( code+0xe000 ) : 0;
+- if ( currentKey )
+- keyCode = currentKey->key_code;
+- else
+- switch (code) {
+- case 72:
+- keyCode = Qt::Key_Up;
+- break;
+- case 75:
+- keyCode = Qt::Key_Left;
+- break;
+- case 77:
+- keyCode = Qt::Key_Right;
+- break;
+- case 80:
+- keyCode = Qt::Key_Down;
+- break;
+- case 82:
+- keyCode = Qt::Key_Insert;
+- break;
+- case 71:
+- keyCode = Qt::Key_Home;
+- break;
+- case 73:
+- keyCode = Qt::Key_Prior;
+- break;
+- case 83:
+- keyCode = Qt::Key_Delete;
+- break;
+- case 79:
+- keyCode = Qt::Key_End;
+- break;
+- case 81:
+- keyCode = Qt::Key_Next;
+- break;
+- case 28:
+- keyCode = Qt::Key_Enter;
+- break;
+- case 53:
+- keyCode = Qt::Key_Slash;
+- break;
+- case 0x1d:
+- keyCode = Qt::Key_Control;
+- break;
+- case 0x2a:
+- keyCode = Qt::Key_SysReq;
+- break;
+- case 0x38:
+- keyCode = Qt::Key_Alt;
+- break;
+- case 0x5b:
+- keyCode = Qt::Key_Super_L;
+- break;
+- case 0x5c:
+- keyCode = Qt::Key_Super_R;
+- break;
+- case 0x5d:
+- keyCode = Qt::Key_Menu;
+- break;
+- }
+- } else if ( extended == 2 ) {
+- switch (code) {
+- case 0x1d:
+- return;
+- case 0x45:
+- keyCode = Qt::Key_Pause;
+- break;
+- }
+- } else
+-#endif
+- {
+-#if defined(QT_QWS_SL5XXX)
+- if ( fn && !meta && (code >= 0x42 && code <= 0x52) ) {
+- ushort unicode=0xffff;
+- int scan=0;
+- if ( code == 0x42 ) { unicode='X'-'@'; scan=Key_X; } // Cut
+- else if ( code == 0x43 ) { unicode='C'-'@'; scan=Key_C; } // Copy
+- else if ( code == 0x44 ) { unicode='V'-'@'; scan=Key_V; } // Paste
+- else if ( code == 0x52 ) { unicode='Z'-'@'; scan=Key_Z; } // Undo
+- if ( scan ) {
+- processKeyEvent( unicode, scan, ControlButton, !release, FALSE );
+- return;
+- }
+- }
+-#endif
+- currentKey = overrideMap ? overrideMap->find( code ) : 0;
+- if ( !currentKey && code < keyMSize ) {
+- currentKey = &QWSServer::keyMap()[code];
+- }
+- if ( currentKey )
+- keyCode = currentKey->key_code;
+-
+-#if defined(QT_QWS_IPAQ)
+- switch (code) {
+-#if defined(QT_QWS_SL5XXX)
+-#if defined(QT_KEYPAD_MODE)
+- case 0x7a:
+- keyCode = Key_Call;
+- repeatable = FALSE;
+- break;
+- case 0x7b:
+- keyCode = Key_Context1;
+- repeatable = FALSE;
+- break;
+- case 0x7c:
+- keyCode = Key_Back;
+- repeatable = FALSE;
+- break;
+- case 0x7d:
+- keyCode = Key_Hangup;
+- repeatable = FALSE;
+- break;
+-#else
+- case 0x7a: case 0x7b: case 0x7c: case 0x7d:
+- keyCode = code - 0x7a + Key_F9;
+- repeatable = FALSE;
+- break;
+-#endif
+- case 0x79:
+- keyCode = Key_F34;
+- repeatable = FALSE;
+- break;
+-#endif
+-
+- case 0x74: // kernel KEY_POWER
+- keyCode = Key_F34;
+- repeatable = FALSE;
+- break;
+- case 89: // kernel KEY_RO
+- keyCode = Key_F24;
+- repeatable = FALSE;
+- break;
+-
+- case 0x78:
+-# if defined(QT_QWS_IPAQ)
+- keyCode = Key_F24; // record
+-# else
+- keyCode = Key_Escape;
+-# endif
+- repeatable = FALSE;
+- break;
+- case 0x60:
+- keyCode = Key_Return;
+-# ifdef QT_QWS_IPAQ
+- ipaq_return_pressed = !release;
+-# endif
+- break;
+- case 0x67:
+- keyCode = Key_Right;
+- break;
+- case 0x69:
+- keyCode = Key_Up;
+- break;
+- case 0x6a:
+- keyCode = Key_Down;
+- break;
+- case 0x6c:
+- keyCode = Key_Left;
+- break;
+- }
+-#endif
+-
+- /*------------------------------------------------------------------
+- Then do special processing of magic keys
+- ------------------------------------------------------------------*/
+-
+-
+-#if defined(QT_QWS_SL5XXX)
+- if ( release && ( keyCode == Key_F34 || keyCode == Key_F35 ) )
+- return; // no release for power and light keys
+- if ( keyCode >= Key_F1 && keyCode <= Key_F35
+- || keyCode == Key_Escape || keyCode == Key_Home
+- || keyCode == Key_Shift || keyCode == Key_Meta )
+- repeatable = FALSE;
+-#endif
+-
+-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
+- if ( qt_screen->isTransformed()
+- && keyCode >= Qt::Key_Left && keyCode <= Qt::Key_Down )
+- {
+- keyCode = xform_dirkey(keyCode);
+- }
+-#endif
+-
+-#endif
+- /*
+- Translate shift+Key_Tab to Key_Backtab
+- */
+- if (( keyCode == Key_Tab ) && shift )
+- keyCode = Key_Backtab;
+-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
+- }
+-#endif
+-
+-#ifndef QT_QWS_USE_KEYCODES
+- /*
+- Keypad consists of extended keys 53 and 28,
+- and non-extended keys 55 and 71 through 83.
+- */
+- if (( extended == 1 ) ? (code == 53 || code == 28) :
+- (code == 55 || ( code >= 71 && code <= 83 )) )
+- keypad = Qt::Keypad;
+-#else
+- if ( code == 55 || code >= 71 && code <= 83 || code == 96
+- || code == 98 || code == 118 )
+- keypad = Qt::Keypad;
+-#endif
+-
+- // Virtual console switching
+- int term = 0;
+- if (ctrl && alt && keyCode >= Qt::Key_F1 && keyCode <= Qt::Key_F10)
+- term = keyCode - Qt::Key_F1 + 1;
+- else if (ctrl && alt && keyCode == Qt::Key_Left)
+- term = QMAX(vtQws - 1, 1);
+- else if (ctrl && alt && keyCode == Qt::Key_Right)
+- term = QMIN(vtQws + 1, 10);
+- if (term && !release) {
+- ctrl = false;
+- alt = false;
+-#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
+- ioctl(kbdFD, VT_ACTIVATE, term);
+-#endif
+- return;
+- }
+-
+-#if defined(QT_QWS_SL5XXX)
+- // Ctrl-Alt-Delete exits qws
+- if (ctrl && alt && keyCode == Qt::Key_Delete) {
+- qApp->quit();
+- }
+-#else
+- // Ctrl-Alt-Backspace exits qws
+- if (ctrl && alt && keyCode == Qt::Key_Backspace) {
+- qApp->quit();
+- }
+-#endif
+-
+-#if defined(QT_QWS_SL5XXX)
+- if (keyCode == Qt::Key_F22) { /* Fn key */
+- fn = !release;
+- } else if ( keyCode == Key_NumLock ) {
+- if ( release )
+- numLock = !numLock;
+- } else
+-#endif
+-
+- if (keyCode == Qt::Key_Alt) {
+- alt = !release;
+- } else if (keyCode == Qt::Key_Control) {
+- ctrl = !release;
+- } else if (keyCode == Qt::Key_Shift) {
+- shift = !release;
+-#if defined(QT_QWS_SL5XXX)
+- } else if (keyCode == Qt::Key_Meta) {
+- meta = !release;
+-#endif
+- } else if ( keyCode == Qt::Key_CapsLock && release ) {
+- caps = !caps;
+-#if defined(_OS_LINUX_) && !defined(QT_QWS_SL5XXX)
+- char leds;
+- ioctl(0, KDGETLED, &leds);
+- leds = leds & ~LED_CAP;
+- if ( caps ) leds |= LED_CAP;
+- ioctl(0, KDSETLED, leds);
+-#endif
+- }
+-
+- /*------------------------------------------------------------------
+- Then find the Unicode value and send the event
+- ------------------------------------------------------------------*/
+- //If we map the keyboard to a non-latin1 layout, we may have
+- //valid keys with unknown key codes.
+- if ( currentKey || keyCode != Qt::Key_unknown ) {
+- bool bAlt = alt;
+- bool bCtrl = ctrl;
+- bool bShift = shift;
+- int unicode = 0xffff;
+- if ( currentKey ) {
+-#if !defined(QT_QWS_SL5XXX)
+- bool bCaps = shift ||
+- (caps ? QChar(QWSServer::keyMap()[code].unicode).isLetter() : FALSE);
+-#else
+- bool bCaps = caps ^ shift;
+- if (fn) {
+- if ( shift ) {
+- bCaps = bShift = FALSE;
+- bCtrl = TRUE;
+- }
+- if ( meta ) {
+- bCaps = bShift = TRUE;
+- bAlt = TRUE;
+- }
+- } else if ( meta ) {
+- bCaps = bShift = TRUE;
+- }
+- if ( code > 40 && caps ) {
+- // fn-keys should only react to shift, not caps
+- bCaps = bShift = shift;
+- }
+- if ( numLock ) {
+- if ( keyCode != Key_Space && keyCode != Key_Tab )
+- bCaps = bShift = FALSE;
+- }
+- if ( keyCode == Key_Delete && (bAlt || bCtrl) ) {
+- keyCode = Key_BraceLeft;
+- unicode = '[';
+- bCaps = bShift = bAlt = bCtrl = FALSE;
+- } else if (keyCode == Qt::Key_F31 && bCtrl) {
+- keyCode = Key_QuoteLeft;
+- unicode = '`';
+- } else
+-#endif
+-
+- if (bCtrl)
+- unicode = currentKey->ctrl_unicode;
+- else if (bCaps)
+- unicode = currentKey->shift_unicode;
+- else
+- unicode = currentKey->unicode;
+-#ifndef QT_QWS_USE_KEYCODES
+- } else if ( extended == 1 ) {
+- if ( keyCode == Qt::Key_Slash )
+- unicode = '/';
+- else if ( keyCode == Qt::Key_Enter )
+- unicode = 0xd;
+-#endif
+- }
+-
+- modifiers = 0;
+- if ( bAlt ) modifiers |= AltButton;
+- if ( bCtrl ) modifiers |= ControlButton;
+- if ( bShift ) modifiers |= ShiftButton;
+- if ( keypad ) modifiers |= Keypad;
+-
+- // looks wrong -- WWA
+- bool repeat = FALSE;
+- if (prevuni == unicode && prevkey == keyCode && !release)
+- repeat = TRUE;
+-
+- processKeyEvent( unicode, keyCode, modifiers, !release, repeat );
+-
+- if (!release) {
+- prevuni = unicode;
+- prevkey = keyCode;
+- } else {
+- prevkey = prevuni = 0;
+- }
+-
+-#ifdef QT_QWS_AUTOREPEAT_MANUALLY
+- if ( repeatable && !release )
+- rep->start(prevuni,prevkey,modifiers);
+- else
+- rep->stop();
+-#endif
+-
+- }
+-#ifndef QT_QWS_USE_KEYCODES
+- extended = 0;
+-#endif
+ }
+
+
diff --git a/packages/qte/qte-2.3.10/kernel-keymap-CXK.patch b/packages/qte/qte-2.3.10/spitz-adhoc-keypad-rotate.patch
index a32207dc14..a32207dc14 100644
--- a/packages/qte/qte-2.3.10/kernel-keymap-CXK.patch
+++ b/packages/qte/qte-2.3.10/spitz-adhoc-keypad-rotate.patch
diff --git a/packages/qte/qte-2.3.12/kernel-keymap-tosa.patch b/packages/qte/qte-2.3.12/kernel-keymap-tosa.patch
deleted file mode 100644
index ca445f4d1d..0000000000
--- a/packages/qte/qte-2.3.12/kernel-keymap-tosa.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-2.3.9-snapshot-20050114/src/kernel/qkeyboard_qws.cpp~kernel-keymap-tosa
-+++ qt-2.3.9-snapshot-20050114/src/kernel/qkeyboard_qws.cpp
-@@ -355,14 +355,24 @@
- { Qt::Key_CapsLock, 0xffff , 0xffff , 0xffff }, // 3c 60
- { Qt::Key_At, '@' , 's' , 'S'-64 }, // 3d
- { Qt::Key_Question, '?' , '?' , 0xffff }, // 3e
-+#ifdef QT_QWS_SL6000
-+ { Qt::Key_Comma, ',' , ';' , 0xffff }, // 3f
-+ { Qt::Key_Period, '.' , ':' , 0xffff }, // 40
-+#else
- { Qt::Key_Comma, ',' , ',' , 0xffff }, // 3f
- { Qt::Key_Period, '.' , '.' , 0xffff }, // 40
-+#endif
- { Qt::Key_Tab, 9 , '\\' , 0xffff }, // 41
- { Qt::Key_X, 0xffff , 'x' , 'X'-64 }, // 42
- { Qt::Key_C, 0xffff , 'c' , 'C'-64 }, // 43
- { Qt::Key_V, 0xffff , 'v' , 'V'-64 }, // 44
-+#ifdef QT_QWS_SL6000
-+ { Qt::Key_Slash, '/' , '?' , 0xffff }, // 45
-+ { Qt::Key_Apostrophe, '\'' , '"' , 0xffff }, // 46 70
-+#else
- { Qt::Key_Slash, '/' , '/' , 0xffff }, // 45
- { Qt::Key_Apostrophe, '\'' , '\'' , 0xffff }, // 46 70
-+#endif
- { Qt::Key_Semicolon, ';' , ';' , 0xffff }, // 47
- { Qt::Key_QuoteDbl, '\"' , '\"' , 0xffff }, // 48
- { Qt::Key_Colon, ':' , ':' , 0xffff }, // 49
-@@ -572,6 +582,32 @@
- static const int keyMSize = sizeof(keyM)/sizeof(QWSServer::KeyMap)-1;
- static QIntDict<QWSServer::KeyMap> *overrideMap = 0;
-
-+#if defined(QT_QWS_SL6000)
-+/* Translation table to obtain a 'legacy' keycode corresponding to
-+ Fn+key on tosa
-+ Other devices obviously send different keycodes while Fn is down, tosa sends
-+ the same keys as usual bracketed by Fn-down/Fn-up.
-+ This table is used while Fn is down to obtain the key-code the SL-5xxx would
-+ send, so the rest of keyboard processing does not need to be adjusted. */
-+static const uchar sl6kFnTrans[] = { 0x00,
-+ 0x5e, 0x3a, 0x43, 0x4a, 0x2b, 0x4b, 0x4c, 0x4d, 0x30, 0x4e, 0x4f, 0x50,
-+ // !, -, cpy, #, 3, $, %, _, 8, &, *, (,
-+ 0x53, 0x3b, 0x31, 0x32, 0x29, 0x2c, 0x3d, 0x2d, 0x2f, 0x44, 0x2a, 0x42,
-+ // =, +, 9, 0, 1, 4, @, 5, 7, pste, 2, cut,
-+ // padding for keycodes which don't ever get directly sent on tosa
-+ // except for y->6, ret->'>', BS->DEL
-+ 0x2e, 0x00, 0x00, 0x57, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // 6, _Z, shft, ret, F11, fn, BS?, F31, lght, cncl, lft, up,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // dn, rght, OK, home, 1, 2, 3, 4, 5, 6, 7, 8,
-+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+ // 9, 0, UNK, UNK, UNK, UNK, UNK, UNK, UNK, -, +, caps,
-+ // here are a few translatable codes again...
-+ 0x00, 0x00, 0x54, 0x56, 0x3c, 0x00, 0x00, 0x00, 0x70, 0x55 };
-+ // @, ?, ,, ., tab, cut, cpy, pste, /, '
-+static const int sl6kFnSize = sizeof(sl6kFnTrans);
-+#endif
-+
- /*!
- Changes the mapping of the keyboard; adding the scancode to Unicode
- mappings from \a map. The server takes over ownership of \a map
-@@ -882,6 +918,15 @@
- int keypad = 0;
-
- #ifndef QT_QWS_USE_KEYCODES
-+#if defined(QT_QWS_SL6000)
-+ qDebug("Key pressed: %x", code);
-+ if (fn)
-+ if (code < sl6kFnSize) {
-+ code = sl6kFnTrans[code];
-+ qDebug("Translated Fn: %x", code);
-+ } else
-+ qDebug("Untranslatable Fn: %x", code);
-+#endif
- #if defined(QT_QWS_IPAQ)
- // map ipaq 'action' key (0x60, 0xe0)
- if ((code & 0x7f) == 0x60) {
diff --git a/packages/qte/qte-common_2.3.10.inc b/packages/qte/qte-common_2.3.10.inc
index ce9969f3a3..fa9ddaea7a 100644
--- a/packages/qte/qte-common_2.3.10.inc
+++ b/packages/qte/qte-common_2.3.10.inc
@@ -4,7 +4,6 @@ PRIORITY = "optional"
HOMEPAGE = "http://www.trolltech.com"
LICENSE = "GPL"
DEPENDS = "zlib libpng jpeg tslib uicmoc-native"
-DEPENDS_mnci = "zlib libpng jpeg uicmoc-native"
DEPENDS_append_c7x0 = " sharp-aticore-oss"
PROVIDES = "virtual/libqte2"
@@ -26,12 +25,10 @@ SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz;m
file://no-moc.patch;patch=1 \
file://gcc3.patch;patch=1 \
file://gcc4.patch;patch=1 \
- file://c700-hardware.patch;patch=1 \
file://encoding.patch;patch=1 \
file://fix-qgfxraster.patch;patch=1 \
file://qt-visibility.patch;patch=1 \
file://tslib.patch;patch=1 \
- file://simpad.patch;patch=1 \
file://handhelds.patch;patch=1 \
file://qiconview-speed.patch;patch=1 \
file://qtabbar.patch;patch=1 \
@@ -44,44 +41,31 @@ SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz;m
file://key.patch;patch=1 \
file://bidimetrics.patch;patch=5 \
file://fix-native-build.patch;patch=1 \
- file://simpad-defaultkbd.patch;patch=1 \
file://fix-errno-exception-spec.patch;patch=1 \
file://keyboardless-buttonmap.patch;patch=1 \
+ file://kernel-keymap.patch;patch=1 \
+ file://kernel-keymap-corgi.patch;patch=1 \
+ file://kernel-asm-page.patch;patch=1 \
+ file://remove-unused-kbdhandler.patch;patch=1 \
file://sharp_char.h \
file://switches.h "
#
# add device specific patches here
#
-SRC_URI_append_simpad = "file://devfs.patch;patch=1 "
-SRC_URI_append_c7x0 = "file://kernel-keymap.patch;patch=1 file://kernel-keymap-corgi.patch;patch=1 \
- file://c7x0-w100-accel.patch;patch=1 file://suspend-resume-hooks.patch;patch=1 "
-SRC_URI_append_spitz = "file://kernel-keymap.patch;patch=1 file://kernel-keymap-corgi.patch;patch=1 \
- file://kernel-keymap-CXK.patch;patch=1 "
-SRC_URI_append_akita = "file://kernel-keymap.patch;patch=1 file://kernel-keymap-corgi.patch;patch=1 \
- file://kernel-keymap-CXK.patch;patch=1 "
-SRC_URI_append_poodle = "file://kernel-keymap.patch;patch=1 "
-SRC_URI_append_a780 = "file://kernel-keymap.patch;patch=1 "
-SRC_URI_append_e680 = "file://kernel-keymap.patch;patch=1 "
-SRC_URI_append_tosa = "file://kernel-keymap.patch;patch=1 file://kernel-keymap-tosa.patch;patch=1 "
-SRC_URI_append_jornada6xx = "file://kernel-keymap.patch;patch=1 "
-SRC_URI_append_jornada7xx = "file://kernel-keymap.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-SRC_URI_append_jornada56x = "file://kernel-keymap.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-SRC_URI_append_mnci = "file://devfs.patch;patch=1 \
- file://mnci.patch;patch=1 \
- file://mnci-touchscreen.patch;patch=1 \
- file://qkeyboard_qws.h \
- file://qkeyboard_qws.cpp "
-#SRC_URI_append_h1910 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h1940 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h2200 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h3600 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h3900 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h4000 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h5000 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_h6300 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_hx2000 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
-#SRC_URI_append_hx4700 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
+
+W100_ACCEL_PATCHES = "file://c7x0-w100-accel.patch;patch=1 \
+ file://c7x0-w100-gcc4.patch;patch=1 \
+ file://suspend-resume-hooks.patch;patch=1"
+
+SRC_URI_append_c7x0 = "${W100_ACCEL_PATCHES} "
+SRC_URI_append_spitz = "file://spitz-adhoc-keypad-rotate.patch;patch=1 "
+SRC_URI_append_akita = "file://spitz-adhoc-keypad-rotate.patch;patch=1 "
+
+# "ipaqs" used to have this, but later were proven to at least work
+# without it. Review again and see if has interesting bits to be applied
+# universally.
+#SRC_URI_append = "file://ipaq_sound_fix.patch;patch=1 "
S = "${WORKDIR}/qt-${PV}"
@@ -103,40 +87,9 @@ EXTRA_OEMAKE = "-e"
#
# add device flags here
#
-EXTRA_DEFINES = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DWARNING_UNKNOWN_DEVICE"
-EXTRA_DEFINES_a780 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_e680 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h1910 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h1940 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h2200 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h3600 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h3900 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h3900 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h4000 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h5000 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_h6300 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_hx2000 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_hx4700 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_rx3000 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_asus716 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_asus730 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_htcuniversal = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_htcblueangel = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_htchimalaya = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_magician = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_jornada56x = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_jornada6xx = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_jornada7xx = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_palmld = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_palmtx = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
-EXTRA_DEFINES_simpad = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ -DQT_QWS_SIMPAD -DQT_QWS_DEVFS"
-EXTRA_DEFINES_c7x0 = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX -DQT_QWS_SLC700"
-EXTRA_DEFINES_spitz = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX -DQT_QWS_SLC700 -DQT_QWS_SLCXK"
-EXTRA_DEFINES_akita = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX -DQT_QWS_SLC700 -DQT_QWS_SLCXK"
-EXTRA_DEFINES_collie = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX"
-EXTRA_DEFINES_poodle = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX"
-EXTRA_DEFINES_tosa = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_SL5XXX -DQT_QWS_SL6000"
-EXTRA_DEFINES_mnci = " -DQT_QWS_RAMSES -DQT_QWS_DEVFS"
+EXTRA_DEFINES = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ"
+EXTRA_DEFINES_spitz = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ -DQT_QWS_SLCXK"
+EXTRA_DEFINES_akita = "-DQT_QWS_TSLIB -DQT_QWS_CUSTOM -DQT_QWS_IPAQ -DQT_QWS_SLCXK"
#
# don't touch anything below here
@@ -151,19 +104,9 @@ export SYSCONF_CXXFLAGS = "${CXXFLAGS} -pipe -DQWS -fno-exceptions -frtti -DNO_D
# enable if gcc supports visibility
#export SYSCONF_CXXFLAGS = "${CXXFLAGS} -pipe -DQWS -fno-exceptions -frtti -fvisibility=hidden -DGCC_SUPPORTS_VISIBILITY -DNO_DEBUG ${EXTRA_DEFINES} -DUSE_BIDI"
export SYSCONF_LFLAGS = "${LDFLAGS} -lts"
-export SYSCONF_LFLAGS_mnci = "${LDFLAGS}"
export SYSCONF_MOC = "${STAGING_BINDIR_NATIVE}/moc"
export SYSCONF_UIC = "${STAGING_BINDIR_NATIVE}/uic"
-do_configure_prepend_mnci() {
- chmod -R a+w ${S}/src/kernel
- cp ${WORKDIR}/qkeyboard_qws.h ${S}/src/kernel
- cp ${WORKDIR}/qkeyboard_qws.cpp ${S}/src/kernel
- mkdir bin
- ln -sf ${STAGING_BINDIR_NATIVE}/moc bin/moc
- ln -sf ${STAGING_BINDIR_NATIVE}/uic bin/uic
-}
-
# generate uclibc and eabi configurations
do_configure() {
for f in ${S}/configs/linux-*-g++-shared; do
@@ -171,8 +114,10 @@ do_configure() {
> `dirname $f`/`basename $f | sed -e 's,linux-,linux-uclibc-,'`
sed -e 's,-linux-,-linux-gnueabi-,g' < $f \
> `dirname $f`/`basename $f | sed -e 's,linux-,linux-gnueabi-,'`
+ sed -e 's,-linux-,-linux-uclibcgnueabi-,g' < $f \
+ > `dirname $f`/`basename $f | sed -e 's,linux-,linux-uclibcgnueabi-,'`
done
- echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+ echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qte failed. EXTRA_OECONF was ${EXTRA_OECONF}"
}
do_compile() {
@@ -198,12 +143,12 @@ do_stage() {
}
do_install() {
- oe_libinstall -so -C lib lib${PN} ${D}${palmqtdir}/lib/
+ oe_libinstall -so -C lib lib${PN} ${D}${libdir}
install -d ${D}/${includedir}/qte
install -m 0644 include/*.h ${D}/${includedir}/qte/
}
-FILES_${PN} = "${palmqtdir}/lib/lib${PN}.so.*"
-FILES_${PN}-dev = "${includedir}/* ${palmqtdir}/lib/lib${PN}.so"
-FILES_${PN}-dbg = "${palmtopdir}/lib/.debug/"
+FILES_${PN} = "${libdir}/lib${PN}.so.*"
+FILES_${PN}-dev = "${includedir}/* ${libdir}/lib${PN}.so"
+FILES_${PN}-dbg = "${libdir}/.debug/"
diff --git a/packages/qte/qte-common_2.3.12.inc b/packages/qte/qte-common_2.3.12.inc
index 97c3dc4c41..4bb42a91c0 100644
--- a/packages/qte/qte-common_2.3.12.inc
+++ b/packages/qte/qte-common_2.3.12.inc
@@ -38,14 +38,9 @@ SRC_URI_append_akita = "file://kernel-keymap.patch;patch=1;pnum=0 file://
SRC_URI_append_poodle = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_a780 = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_e680 = "file://kernel-keymap.patch;patch=1;pnum=0 "
-SRC_URI_append_tosa = "file://kernel-keymap.patch;patch=1;pnum=0 file://kernel-keymap-tosa.patch;patch=1 "
+SRC_URI_append_tosa = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_jornada7xx = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 "
SRC_URI_append_jornada56x = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 "
-SRC_URI_append_mnci = "file://devfs.patch;patch=1 \
- file://mnci.patch;patch=1 \
- file://mnci-touchscreen.patch;patch=1 \
- file://qkeyboard_qws.h \
- file://qkeyboard_qws.cpp "
SRC_URI_append_h3600 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
SRC_URI_append_h3900 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
SRC_URI_append_h1910 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 "
diff --git a/packages/qte/qte-mt-static_2.3.10.bb b/packages/qte/qte-mt-static_2.3.10.bb
index 446b601adb..21feb25fef 100644
--- a/packages/qte/qte-mt-static_2.3.10.bb
+++ b/packages/qte/qte-mt-static_2.3.10.bb
@@ -1,5 +1,5 @@
require qte-common_${PV}.inc
-PR = "r5"
+PR = "r8"
EXTRA_OECONF += "-static -thread"
@@ -18,4 +18,3 @@ do_install() {
}
PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN} = "${palmqtdir}"
diff --git a/packages/qte/qte-mt-static_2.3.12.bb b/packages/qte/qte-mt-static_2.3.12.bb
index c6e4f72667..9210d85dc3 100644
--- a/packages/qte/qte-mt-static_2.3.12.bb
+++ b/packages/qte/qte-mt-static_2.3.12.bb
@@ -1,6 +1,8 @@
require qte-common_${PV}.inc
PR = "r4"
+DEFAULT_PREFERENCE = "-1"
+
EXTRA_OECONF += "-static -thread"
do_stage() {
diff --git a/packages/qte/qte-mt_2.3.10.bb b/packages/qte/qte-mt_2.3.10.bb
index 87eccb7e1a..0af996559e 100644
--- a/packages/qte/qte-mt_2.3.10.bb
+++ b/packages/qte/qte-mt_2.3.10.bb
@@ -1,7 +1,6 @@
require qte-common_${PV}.inc
-PR = "r9"
+PR = "r24"
EXTRA_OECONF += "-thread"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN} = "${palmqtdir}"
diff --git a/packages/qte/qte-mt_2.3.12.bb b/packages/qte/qte-mt_2.3.12.bb
index 90e84fe38d..704081e639 100644
--- a/packages/qte/qte-mt_2.3.12.bb
+++ b/packages/qte/qte-mt_2.3.12.bb
@@ -1,6 +1,8 @@
require qte-common_${PV}.inc
PR = "r2"
+DEFAULT_PREFERENCE = "-1"
+
EXTRA_OECONF += "-thread"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/qte/qte_2.3.10.bb b/packages/qte/qte_2.3.10.bb
index 3304868768..68825b6ce8 100644
--- a/packages/qte/qte_2.3.10.bb
+++ b/packages/qte/qte_2.3.10.bb
@@ -1,3 +1,3 @@
require qte-common_${PV}.inc
-PR = "r49"
+PR = "r52"
diff --git a/packages/qte/qtopia-core_4.2.0.bb b/packages/qte/qtopia-core_4.2.0.bb
index ecb5978fed..ab07ecf35d 100644
--- a/packages/qte/qtopia-core_4.2.0.bb
+++ b/packages/qte/qtopia-core_4.2.0.bb
@@ -3,16 +3,15 @@ SECTION = "libs"
LICENSE = "GPL"
PRIORITY = "optional"
HOMEPAGE = "http://www.trolltech.com"
-DEPENDS = "glib-2.0 dbus-glib tslib"
-PR = "r1"
+DEPENDS = "glib-2.0 freetype dbus-glib tslib"
+
+PR = "r2"
SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
file://linux-oe-qmake.conf"
S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
-PARALLEL_MAKE = ""
-
inherit pkgconfig
# I'm not sure about the globals QTDIR and QTOPIADIR, or if they're even
@@ -33,6 +32,7 @@ export QTOPIADIR = "${S}"
# Qmake gets confused by environment variables, as it builds both HOST
# and TARGET objects. The correct compiler settings come from the mkspec
# and are set with the OE_QMAKE_ variables
+PARALLEL_MAKE = ""
EXTRA_OEMAKE = " MAKEFLAGS= "
# This stuff could also be done by inheriting qmake, but I didn't want to
@@ -48,7 +48,7 @@ export OE_QMAKE_LDFLAGS="${LDFLAGS}"
export OE_QMAKE_LINK="${CXX}"
export OE_QMAKE_AR="${AR}"
export OE_QMAKE_RANLIB="${RANLIB}"
-export OE_QMAKE_STRIP="${STRIP}"
+export OE_QMAKE_STRIP="echo"
export OE_QMAKE_RPATH="-Wl,-rpath-link,"
export OE_QMAKE_INCDIR_QT="${QTDIR}/include"
export OE_QMAKE_LIBDIR_QT="${QTDIR}/lib"
@@ -65,37 +65,10 @@ QT_ENDIAN = "-little-endian"
# frequently, only for testing maybe. Feel free to change and to package
# them separately.
QT_CONFIG_FLAGS = "-release \
- -no-cups -no-accessibility -no-freetype \
+ -no-cups -no-accessibility \
-nomake demos -nomake examples -nomake tools \
-qt-mouse-tslib"
-# We might want to package all the libraries separately, so you can really
-# fine-tune what to install. This is e.g. done in qt4-x11-free_4.1.2.bb.
-# What should these packages be called? I'm tempted to call them the same
-# as in qt4 version, as the API is supposed to be compatible, e.g.
-# libqtcore4 and libqtgui4. This will however conflict if you have QT and
-# Qtopia, but this is something you don't want anyway, I guess.
-# Another solution is making virtual/libqtfoo4, and DEPENDing on that one
-# and let both the PACKAGES in QT and Qtopia PROVIDE these. The packages
-# themselves could then be called libqtopiafoo4.
-# I'll postpone this discussion by not making separate Qtopia packages.
-
-# Also, I don't package the plugins and translations atm, I don't use them
-# and I don't feel like thinking about a sensible separation.
-
-# PACKAGES += "libqtopiacore4 libqtopiagui4 ..."
-# RDEPENDS_${PN} += "..."
-
-# The default included fonts are around 75MB and consist of a number of
-# FreeType-renderable fonts as well as QPF (Qtopia Prerendered Fonts).
-# As FreeType is generally slow on embedded platforms, and 75MB is
-# quite huge, we downsize the fonts dir in the do_install. I've decided
-# to include only the QPF (Helvetica and Fixed), amounting to 500KB. This
-# also results in tremendously faster application startup time.
-# You might want to package the fonts separately, or include all fonts in
-# a separate package.
-FILES_${PN} += " /usr/lib/fonts/* "
-
do_configure() {
# Install the OE build templates (something which might be done
# by inheriting qmake)
@@ -141,16 +114,84 @@ do_install() {
# These are host binaries, we should only use them in staging
rm -rf ${D}/${bindir}
rm -rf ${D}/${datadir}/mkspecs
-
- # Downsize on the fonts, we're only packaging the Helvetica and
- # Fixed, only the QPF versions. Maybe later add an additional
- # package for all fonts.
- rm -f ${D}/${libdir}/fonts/*
- cp -a ${S}/lib/fonts/helvetica*qpf ${D}/${libdir}/fonts
- cp -a ${S}/lib/fonts/fixed*qpf ${D}/${libdir}/fonts
+
touch ${D}/${libdir}/fonts/fontdir
+
+ #TT is still new to pkgconfig, so fix it up
+ install -d ${D}${libdir}/pkgconfig
+ mv ${D}/${libdir}/*.pc ${D}${libdir}/pkgconfig/
}
+# We might want to package all the libraries separately, so you can really
+# fine-tune what to install. This is e.g. done in qt4-x11-free_4.1.2.bb.
+# What should these packages be called? I'm tempted to call them the same
+# as in qt4 version, as the API is supposed to be compatible, e.g.
+# libqtcore4 and libqtgui4. This will however conflict if you have QT and
+# Qtopia, but this is something you don't want anyway, I guess.
+# Another solution is making virtual/libqtfoo4, and DEPENDing on that one
+# and let both the PACKAGES in QT and Qtopia PROVIDE these. The packages
+# themselves could then be called libqtopiafoo4.
+# I'll postpone this discussion by not making separate Qtopia packages.
+
+# Also, I don't package the plugins and translations atm, I don't use them
+# and I don't feel like thinking about a sensible separation.
+
+PACKAGES =+ " libqtcore libqtcore-dev libqtcore-dbg \
+ libqtxml libqtxml-dev libqtxml-dbg \
+ libqtgui libqtgui-dev libqtgui-dbg \
+ libqtsql libqtsql-dev libqtsql-dbg \
+ libqtnetwork libqtnetwork-dev libqtnetwork-dbg \
+ libqtsvg libqtsvg-dev libqtsvg-dbg \
+ libqt3support libqt3support-dev libqt3support-dbg \
+ qtopia-core-plugins qtopia-core-plugins-dbg\
+ "
+
+PACKAGES += " ${PN}-fonts "
+
+# The default included fonts are around 75MB and consist of a number of
+# FreeType-renderable fonts as well as QPF (Qtopia Prerendered Fonts).
+# As FreeType is generally slow on embedded platforms, and 75MB is
+# quite huge, we downsize the fonts dir in the do_install. I've decided
+# to include only the QPF (Helvetica and Fixed), amounting to 500KB. This
+# also results in tremendously faster application startup time.
+FILES_libqtcore += " ${libdir}/fonts/helvetic* ${libdir}/fonts/fixed* ${D}/${libdir}/fonts/fontdir"
+FILES_${PN}-fonts = "${libdir}/fonts"
+
+FILES_qtopia-core-plugins += "${datadir}/qtopia/plugins/*/*.so"
+FILES_qtopia-core-plugins-dbg += "${datadir}/qtopia/plugins/*/.debug/*.so"
+
+FILES_libqtcore += "${libdir}/libQtCore.so.*"
+FILES_libqtxml += "${libdir}/libQtXml.so.*"
+FILES_libqtgui += "${libdir}/libQtGui.so.*"
+FILES_libqtsql += "${libdir}/libQtSql.so.*"
+FILES_libqtnetwork += "${libdir}/libQtNetwork.so.*"
+FILES_libqtsvg += "${libdir}/libQtSvg.so.*"
+FILES_libqt3support += "${libdir}/libQt3Support.so.*"
+
+FILES_libqtcore-dev += "${libdir}/*QtCore.*"
+FILES_libqtxml-dev += "${libdir}/*QtXml.*"
+FILES_libqtgui-dev += "${libdir}/*QtGui.*"
+FILES_libqtsql-dev += "${libdir}/*QtSql.*"
+FILES_libqtnetwork-dev += "${libdir}/*QtNetwork.*"
+FILES_libqtsvg-dev += "${libdir}/*QtSvg.*"
+FILES_libqt3support-dev += "${libdir}/*Qt3Support.*"
+
+FILES_libqtcore-dbg += "${libdir}/.debug/libQtCore*"
+FILES_libqtxml-dbg += "${libdir}/.debug/libQtXml*"
+FILES_libqtgui-dbg += "${libdir}/.debug/libQtGui*"
+FILES_libqtsql-dbg += "${libdir}/.debug/libQtSql*"
+FILES_libqtnetwork-dbg += "${libdir}/.debug/libQtNetwork*"
+FILES_libqtsvg-dbg += "${libdir}/.debug/libQtSvg*"
+FILES_libqt3support-dbg += "${libdir}/.debug/libQt3Support*"
+
+
+python populate_packages_prepend() {
+ translationdir = bb.data.expand('${datadir}/qtopia/translations/', d)
+ do_split_packages(d, translationdir, '^qt_(.*)\.qm$', 'qtopia-translation-%s', 'Qtopia translation for %s', extra_depends='' )
+}
+
+
+
STAGE_TEMP = "${WORKDIR}/temp-staging"
do_stage() {
rm -rf ${STAGE_TEMP}
diff --git a/packages/quagga/quagga.inc b/packages/quagga/quagga.inc
index 6adba78063..811eb15ea9 100644
--- a/packages/quagga/quagga.inc
+++ b/packages/quagga/quagga.inc
@@ -100,8 +100,8 @@ CONFFILES_${PN} = "${sysconfdir}/default/quagga"
CONFFILES_${PN}-watchquagga = "${sysconfdir}/default/watchquagga"
# Stop the names being rewritten due to the internal shared libraries
-PKG_${PN}-ospfd = "${PN}-ospfd"
-PKG_${PN}-ospfclient = "${PN}-ospfclient"
+DEBIAN_NOAUTONAME_${PN}-ospfd = "1"
+DEBIAN_NOAUTONAME_${PN}-ospfclient = "1"
# Main init script starts all deamons
# Seperate init script for watchquagga
diff --git a/packages/quagga/quagga_0.99.7.bb b/packages/quagga/quagga_0.99.7.bb
new file mode 100644
index 0000000000..6bcc251730
--- /dev/null
+++ b/packages/quagga/quagga_0.99.7.bb
@@ -0,0 +1,3 @@
+PR = "r0"
+
+require quagga.inc
diff --git a/packages/quake/quetoo_0.6.1.bb b/packages/quake/quetoo_0.6.1.bb
new file mode 100644
index 0000000000..9428f501f4
--- /dev/null
+++ b/packages/quake/quetoo_0.6.1.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "Initially a fork of the Quake2Forge project, this engine aims to provide security and performance enhancements."
+LICENSE = "GPLv2"
+
+DEPENDS = "libsdl-x11 zlib mesa"
+SRC_URI = "http://tastyspleen.net/~jdolan/quetoo-${PV}-full.tar.bz2"
+
+inherit autotools pkgconfig
+
+
+EXTRA_OECONF = "\
+ --with-sdl \
+ --with-zlib \
+ "
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+ rm config.log
+}
+
+do_install_append() {
+ mv ${D}${bindir}/${TARGET_PREFIX}quetoo ${D}${bindir}/quetoo
+}
+
+FILES_${PN}-dbg += "${libdir}/quetoo/baseq2/.debug"
diff --git a/packages/radvd/files/.mtn2git_empty b/packages/radvd/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/radvd/files/.mtn2git_empty
diff --git a/packages/radvd/files/radvd.conf.empty b/packages/radvd/files/radvd.conf.empty
new file mode 100644
index 0000000000..c006f86313
--- /dev/null
+++ b/packages/radvd/files/radvd.conf.empty
@@ -0,0 +1,18 @@
+# NOTE: there is no such thing as a working "by-default" configuration file.
+# At least the prefix needs to be specified. Please consult the radvd.conf(5)
+# man page and/or /usr/share/doc/radvd-*/radvd.conf.example for help.
+#
+#
+#interface eth0
+#{
+# AdvSendAdvert on;
+# MinRtrAdvInterval 30;
+# MaxRtrAdvInterval 100;
+# prefix 2001:db8:1:0::/64
+# {
+# AdvOnLink on;
+# AdvAutonomous on;
+# AdvRouterAddr off;
+# };
+#
+#};
diff --git a/packages/radvd/files/radvd.init b/packages/radvd/files/radvd.init
new file mode 100755
index 0000000000..5415230285
--- /dev/null
+++ b/packages/radvd/files/radvd.init
@@ -0,0 +1,115 @@
+#! /bin/sh
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/radvd
+NAME=radvd
+DESC=radvd
+CONFIG=/etc/radvd.conf
+SAVED_SETTINGS=/var/run/radvd/saved-settings
+PIDFILE=/var/run/radvd/radvd.pid
+OPTIONS="-u radvd -p $PIDFILE"
+
+test -x $DAEMON || exit 0
+
+set -e
+
+# Check for IPv6 support in kernel
+if test \! -e /proc/sys/net/ipv6; then
+ echo "IPv6 support must be enabled in the kernel for $DESC to work."
+ exit
+fi
+
+save_settings()
+{
+ local file=$1
+
+ rm -f $file
+ for if_conf in /proc/sys/net/ipv6/conf/*; do
+ echo -e "$if_conf/forwarding\t `cat $if_conf/forwarding`" >> $file
+ done
+ return 0
+}
+
+restore_settings()
+{
+ file=$1
+
+ if [ ! -f $file ]; then
+ echo "$0: warning: cannot restore settings"
+ return
+ fi
+
+ (
+ while read f value; do
+ if [ -w $f ]; then
+ echo $value > $f
+ fi
+ done
+ ) < $file
+}
+
+chkconfig() {
+ if [ ! -e $CONFIG -o ! -s $CONFIG ]; then
+ echo ""
+ echo "* $CONFIG does not exist or is empty."
+ echo "* See /usr/share/doc/radvd/examples/simple-radvd.conf for a simple"
+ echo "* configuration suitable for most systems, and radvd.conf(5)"
+ echo "* for configuration file syntax. radvd will *not* be started."
+ exit 0
+ fi
+}
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ chkconfig
+ save_settings $SAVED_SETTINGS
+
+ # We must enable IPv6 forwarding for radvd to work
+ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+
+ # Check for stale pidfile; radvd won't start if one is lying around
+ if [ -f $PIDFILE ] && ! ps `cat $PIDFILE` > /dev/null; then
+ rm -f $PIDFILE
+ fi
+ if ! start-stop-daemon --oknodo --start --pidfile $PIDFILE \
+ --exec $DAEMON -- $OPTIONS; then
+ echo "failed." && exit 1
+ fi
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --oknodo --stop --pidfile $PIDFILE \
+ --exec $DAEMON
+ restore_settings $SAVED_SETTINGS
+ rm -f $SAVED_SETTINGS
+ echo "$NAME."
+ ;;
+ reload|force-reload)
+ echo "Reloading $DESC configuration files."
+ start-stop-daemon --stop --signal HUP --quiet --pidfile \
+ $PIDFILE --exec $DAEMON
+ ;;
+ restart)
+ chkconfig
+ echo -n "Restarting $DESC: "
+ if ! start-stop-daemon --stop --quiet --pidfile \
+ $PIDFILE --exec $DAEMON; then
+ # stop failed, so we were not running
+ save_settings $SAVED_SETTINGS
+ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+ fi
+ sleep 1
+ start-stop-daemon --start --quiet --pidfile \
+ $PIDFILE --exec $DAEMON -- $OPTIONS
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/radvd/files/volatiles.03_radvd b/packages/radvd/files/volatiles.03_radvd
new file mode 100644
index 0000000000..89256a40e4
--- /dev/null
+++ b/packages/radvd/files/volatiles.03_radvd
@@ -0,0 +1,2 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d radvd root 0755 /var/run/radvd none
diff --git a/packages/radvd/radvd.inc b/packages/radvd/radvd.inc
new file mode 100644
index 0000000000..f73f8c0583
--- /dev/null
+++ b/packages/radvd/radvd.inc
@@ -0,0 +1,41 @@
+DESCRIPTION = "IPv6 router advertisement daemon"
+HOMEPAGE = "http://www.litech.org/radvd/"
+SECTION = "console/network"
+LICENSE = "BSD"
+DEPENDS = "flex-native"
+
+SRC_URI = "http://v6web.litech.org/radvd/dist/radvd-${PV}.tar.gz;md5sum=${MD5SUM} \
+ file://radvd.init \
+ file://volatiles.03_radvd \
+ file://radvd.conf.empty"
+
+S = "${WORKDIR}/radvd-${PV}"
+
+inherit autotools update-rc.d
+
+do_install_append () {
+ install -m 0755 -d ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/default/volatiles \
+ ${D}${docdir}/radvd
+ # Install init script and volatiles
+ install -m 0755 ${WORKDIR}/radvd.init ${D}${sysconfdir}/init.d/radvd
+ install -m 0644 ${WORKDIR}/volatiles.03_radvd ${D}${sysconfdir}/default/volatiles/volatiles.03_radvd
+ # Initial configuration
+ # install -m 0644 ${WORKDIR}/radvd.conf.empty ${D}${sysconfdir}/radvd.conf
+ # Documentation
+ for i in ${WORKDIR}/radvd.conf.empty radvd.conf.example README; do \
+ install -m 0644 $i ${D}${docdir}/radvd; \
+ done
+}
+
+#CONFFILES_${PN} = "${sysconfdir}/radvd.conf"
+
+INITSCRIPT_NAME = "radvd"
+INITSCRIPT_PARAMS = "defaults 20 80"
+
+pkg_postinst_${PN} () {
+ grep -q radvd: /etc/passwd || \
+ adduser --disabled-password --home=/var/run/radvd/ --system \
+ --ingroup nogroup --no-create-home -g "IPv6 router advertisement daemon" radvd
+ /etc/init.d/populate-volatile.sh update
+}
diff --git a/packages/radvd/radvd_0.7.2.bb b/packages/radvd/radvd_0.7.2.bb
index f11e81c7d3..e22cc5e96b 100644
--- a/packages/radvd/radvd_0.7.2.bb
+++ b/packages/radvd/radvd_0.7.2.bb
@@ -1,9 +1,7 @@
-SECTION = "console/network"
-DESCRIPTION = "IPv6 router advertisement daemon"
-LICENSE = "BSD"
-SRC_URI = "http://v6web.litech.org/radvd/dist/radvd-${PV}.tar.gz \
- file://automake.patch;patch=1"
-S = "${WORKDIR}/radvd-${PV}"
-DEPENDS = "flex"
+PR = "r2"
-inherit autotools
+SRC_URI_append += "file://automake.patch;patch=1 "
+
+require radvd.inc
+
+MD5SUM = "26ea468b2323e44cf827ae5f84d18dc8"
diff --git a/packages/radvd/radvd_1.0.bb b/packages/radvd/radvd_1.0.bb
new file mode 100644
index 0000000000..6d44ff2f94
--- /dev/null
+++ b/packages/radvd/radvd_1.0.bb
@@ -0,0 +1,5 @@
+PR = "r1"
+
+require radvd.inc
+
+MD5SUM = "8bce4a21757cf069f5a69e2f9bee9e5b"
diff --git a/packages/raw-tools/.mtn2git_empty b/packages/raw-tools/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/raw-tools/.mtn2git_empty
diff --git a/packages/raw-tools/exiv2_0.15.bb b/packages/raw-tools/exiv2_0.15.bb
new file mode 100644
index 0000000000..894abce114
--- /dev/null
+++ b/packages/raw-tools/exiv2_0.15.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Exiv2 is a C++ library and a command line utility to access image metadata."
+LICENSE = "GPL"
+DEPENDS = "tiff zlib"
+
+SRC_URI = "http://www.exiv2.org/exiv2-${PV}.tar.gz"
+
+inherit autotools pkgconfig lib_package
+
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/raw-tools/gtkimageview_1.3.0.bb b/packages/raw-tools/gtkimageview_1.3.0.bb
new file mode 100644
index 0000000000..aa45fe09b0
--- /dev/null
+++ b/packages/raw-tools/gtkimageview_1.3.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "GtkImageView is a simple image viewer widget for GTK."
+DEPENDS = "gtk+"
+
+SRC_URI = "http://www.angstrom-distribution.org/unstable/sources/gtkimageview-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
+
+
diff --git a/packages/raw-tools/libopenraw.inc b/packages/raw-tools/libopenraw.inc
new file mode 100644
index 0000000000..1f39c2b667
--- /dev/null
+++ b/packages/raw-tools/libopenraw.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "libopenraw is an ongoing project to provide a free software implementation for camera RAW files decoding. "
+LICENSE = "GPLv2"
+DEPENDS = "boost jpeg gtk+"
+
+inherit autotools pkgconfig lib_package
+
+PACKAGES =+ "libopenrawgnome"
+
+FILES_libopenrawgnome = "${libdir}/libopenrawgnome.so.*"
+
diff --git a/packages/raw-tools/libopenraw_0.0.2.bb b/packages/raw-tools/libopenraw_0.0.2.bb
new file mode 100644
index 0000000000..7a19c63bbc
--- /dev/null
+++ b/packages/raw-tools/libopenraw_0.0.2.bb
@@ -0,0 +1,4 @@
+require libopenraw.inc
+
+SRC_URI = "http://libopenraw.freedesktop.org/download/libopenraw-${PV}.tar.gz"
+
diff --git a/packages/raw-tools/ufraw_0.12.bb b/packages/raw-tools/ufraw_0.12.bb
new file mode 100644
index 0000000000..b9e06a3bc5
--- /dev/null
+++ b/packages/raw-tools/ufraw_0.12.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "The Unidentified Flying Raw (UFRaw) is a utility to read and manipulate raw images from digital cameras. "
+LICENSE = "GPL"
+
+DEPENDS = "gtk+ gtkimageview lcms exiv2 tiff"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ufraw/ufraw-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --enable-extras "
+
+PACKAGES =+ "dcraw dcraw-dbg"
+FILES_dcraw = "${bindir}/dcraw"
+FILES_dcraw-bdg = "${bindir}/.debug/dcraw"
+
+
diff --git a/packages/redboot-utils/.mtn2git_empty b/packages/redboot-utils/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/redboot-utils/.mtn2git_empty
diff --git a/packages/redboot-utils/fconfig_20060419.bb b/packages/redboot-utils/fconfig_20060419.bb
new file mode 100644
index 0000000000..561718f9b2
--- /dev/null
+++ b/packages/redboot-utils/fconfig_20060419.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Tool to edit the Redboot config from userspace"
+PR = "r1"
+
+SRC_URI = "http://andrzejekiert.ovh.org/software/fconfig/fconfig-20060419.tar.gz"
+
+S = ${WORKDIR}/fconfig
+do_compile() {
+ ${MAKE}
+}
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 755 ${S}/fconfig ${D}/${sbindir}
+}
diff --git a/packages/redboot-utils/fis_1.0.bb b/packages/redboot-utils/fis_1.0.bb
new file mode 100644
index 0000000000..b0d6d76008
--- /dev/null
+++ b/packages/redboot-utils/fis_1.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Tool to edit the Redboot FIS partition layout from userspace"
+PR = "r3"
+
+SRC_URI = "http://svn.chezphil.org/utils/trunk/fis.c"
+
+do_compile() {
+ ${CC} --std=c99 -Os -W -o fis ${WORKDIR}/fis.c
+}
+
+do_install() {
+ ${STRIP} ${WORKDIR}/fis-${PV}/fis
+
+ install -d ${D}/${sbindir}
+ install -m 755 ${WORKDIR}/fis-${PV}/fis ${D}/${sbindir}
+}
diff --git a/packages/rfakeap/rfakeap_0.2.bb b/packages/rfakeap/rfakeap_0.2.bb
index 1854e20286..702399e0f5 100644
--- a/packages/rfakeap/rfakeap_0.2.bb
+++ b/packages/rfakeap/rfakeap_0.2.bb
@@ -2,7 +2,6 @@ SECTION = "console/network"
DESCRIPTION = "Raw Fake AP"
HOMEPAGE = "http://rfakeap.tuxfamily.org/"
LICENSE = "GPLv2"
-MAINTAINER = "Zero_Chaos <sidhayn@hotmail.com>"
DEPENDS = "libpcap"
PV="0.2"
PR="r1"
diff --git a/packages/rglueap/.mtn2git_empty b/packages/rglueap/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/rglueap/.mtn2git_empty
diff --git a/packages/rglueap/rglueap_0.1.bb b/packages/rglueap/rglueap_0.1.bb
new file mode 100644
index 0000000000..c26bf31eaa
--- /dev/null
+++ b/packages/rglueap/rglueap_0.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Raw Glue AP, wireless intrusion detection"
+AUTHOR = "Laurent Butti"
+HOMEPAGE = "http://rfakeap.tuxfamily.org/#Raw_Glue_AP"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "libpcap"
+
+SRC_URI = "http://rfakeap.tuxfamily.org/${P}.tar.gz"
+
+LDFLAGS += "-lpcap"
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 0755 rglueap ${D}/${sbindir}
+}
+
diff --git a/packages/roadmap/.mtn2git_empty b/packages/roadmap/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/roadmap/.mtn2git_empty
diff --git a/packages/roadmap/files/.mtn2git_empty b/packages/roadmap/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/roadmap/files/.mtn2git_empty
diff --git a/packages/roadmap/files/cross.patch b/packages/roadmap/files/cross.patch
new file mode 100644
index 0000000000..87c8d7894b
--- /dev/null
+++ b/packages/roadmap/files/cross.patch
@@ -0,0 +1,17 @@
+--- /tmp/options.mk 2007-08-08 12:14:11.000000000 +0200
++++ roadmap/src/options.mk 2007-08-08 12:14:35.688400000 +0200
+@@ -26,13 +26,7 @@
+
+ # if you want to cross-compile, define CROSS in config.mk. you
+ # may also have to add paths to libraries (with -L) in LDFLAGS.
+-CC = $(CROSS)gcc
+-CXX = $(CROSS)g++
+-AS = $(CROSS)as
+-AR = $(CROSS)ar
+-LD = $(CROSS)ld
+-STRIP = $(CROSS)strip
+-RANLIB = $(CROSS)ranlib
++STRIP = echo
+
+
+ # --- Build options ------------------------------------------------
diff --git a/packages/roadmap/roadmap-gtk2_cvs.bb b/packages/roadmap/roadmap-gtk2_cvs.bb
new file mode 100644
index 0000000000..cb81a44ae8
--- /dev/null
+++ b/packages/roadmap/roadmap-gtk2_cvs.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "RoadMap is a program that provides a car navigation for Linux and UNIX. \
+It displays a map of the streets, tracks the position provided by a NMEA-compliant \
+GPS receiver, identifies the street matching this GPS position and announces the name \
+of the crossing street at the next intersection."
+AUTHOR = "Pascal Martin <pascal.martin@iname.com>"
+HOMEPAGE = "http://roadmap.digitalomaha.net/maps.html"
+DEPENDS = "popt expat gtk+"
+LICENSE = "GPL"
+PV = "1.0.12+cvs${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anonymous:@roadmap.cvs.sf.net/cvsroot/roadmap;module=roadmap \
+ file://cross.patch;patch=1;pnum=2 \
+ http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz \
+ "
+
+S = "${WORKDIR}/roadmap/src"
+
+PARALLEL_MAKE = ""
+CFLAGS += " -I${S} "
+
+
+do_compile() {
+ oe_runmake
+ oe_runmake gtk2
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${datadir}/applications
+ install -d ${D}${datadir}/pixmaps
+ install -d ${D}${datadir}/roadmap
+
+ install -m 0755 gtk2/gtkroad* ${D}${bindir}
+
+ install -m 0644 icons/*png ${D}${datadir}/pixmaps
+
+ install -m 0644 sprites preferences ${D}${datadir}/roadmap
+ install -m 0644 ${WORKDIR}/usdir.rdm ${D}${datadir}/roadmap/
+}
+
+
+FILES_${PN} += "${datadir}/roadmap"
+
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/.mtn2git_empty b/packages/rp-pppoe/rp-pppoe-3.8/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/.mtn2git_empty
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/configure_in_cross.patch b/packages/rp-pppoe/rp-pppoe-3.8/configure_in_cross.patch
new file mode 100644
index 0000000000..381a44d303
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/configure_in_cross.patch
@@ -0,0 +1,136 @@
+Index: src/configure.in
+===================================================================
+--- rp-pppoe-3.8.orig/src/configure.in 2006-04-03 00:29:42.000000000 +1000
++++ rp-pppoe-3.8/src/configure.in 2007-06-07 22:19:36.000000000 +1000
+@@ -5,6 +5,13 @@
+ dnl pppd directory for kernel-mode PPPoE
+ PPPD_DIR=ppp-2.4.1.pppoe2
+
++dnl hard code some paths
++PPPD=/usr/sbin/pppd
++ID=/usr/bin/id
++ECHO=/bin/echo
++AC_ARG_VAR(PPPD)
++AC_ARG_VAR(ID)
++
+ AC_CONFIG_HEADER(config.h)
+
+ AC_PREFIX_DEFAULT(/usr)
+@@ -44,7 +51,7 @@
+ AC_MSG_RESULT($ac_cv_struct_sockaddr_ll)
+
+ if test "$ac_cv_struct_sockaddr_ll" = yes ; then
+-AC_DEFINE(HAVE_STRUCT_SOCKADDR_LL)
++AC_DEFINE([HAVE_STRUCT_SOCKADDR_LL], [], [Have struct SOCKADDR_LL])
+ fi
+
+ dnl Check for N_HDLC line discipline
+@@ -55,7 +62,7 @@
+ ac_cv_n_hdlc=no)
+ AC_MSG_RESULT($ac_cv_n_hdlc)
+ if test "$ac_cv_n_hdlc" = yes ; then
+-AC_DEFINE(HAVE_N_HDLC)
++AC_DEFINE([HAVE_N_HDLC], [], [Have N_HDLC])
+ fi
+
+ AC_ARG_ENABLE(plugin, [ --enable-plugin=pppd_src_path build pppd plugin], ac_cv_pluginpath=$enableval, ac_cv_pluginpath=no)
+@@ -100,13 +107,13 @@
+ if test "$ac_cv_header_linux_if_pppox_h" = yes ; then
+ if test "$ac_cv_pluginpath" != no ; then
+ LINUX_KERNELMODE_PLUGIN=rp-pppoe.so
+- AC_DEFINE(HAVE_LINUX_KERNEL_PPPOE)
++ AC_DEFINE([HAVE_LINUX_KERNEL_PPPOE], [], [Have kernel PPPoE])
+ PPPD_INCDIR=$ac_cv_pluginpath
+ fi
+ fi
+
+ if test "$ac_cv_debugging" = "yes" ; then
+- AC_DEFINE(DEBUGGING_ENABLED)
++ AC_DEFINE([DEBUGGING_ENABLED], [], [Debugging enabled])
+ fi
+
+ AC_SUBST(LINUX_KERNELMODE_PLUGIN)
+@@ -131,15 +138,8 @@
+ AC_CHECK_SIZEOF(unsigned int)
+ AC_CHECK_SIZEOF(unsigned long)
+
+-dnl Check for location of pppd
+-AC_PATH_PROG(PPPD, pppd, NOTFOUND, $PATH:/sbin:/usr/sbin:/usr/local/sbin)
+-AC_PATH_PROG(ECHO, echo, echo)
+-
+-dnl Check for setsid (probably Linux-specific)
+-AC_PATH_PROG(SETSID, setsid, "", $PATH:/sbin:/usr/sbin:/usr/local/sbin)
+-
+ dnl Check for an "id" which accepts "-u" option -- hack for Solaris.
+-AC_PATH_PROG(ID, id, "", /usr/xpg4/bin:$PATH)
++dnl AC_PATH_PROG(ID, id, "", /usr/xpg4/bin:$PATH)
+
+ dnl Check for Linux-specific kernel support for PPPoE
+ AC_MSG_CHECKING(for Linux 2.4.X kernel-mode PPPoE support)
+@@ -183,44 +183,8 @@
+ CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -ansi"
+ fi
+
+-dnl If we couldn't find pppd, die
+-if test "$PPPD" = "NOTFOUND"; then
+- AC_MSG_WARN([*** Oops! I couldn't find pppd, the PPP daemon anywhere.])
+- AC_MSG_WARN([*** You must install pppd, version 2.3.10 or later.])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- PPPD=pppd
+-fi
+-
+-dnl Figure out pppd version. 2.3.7 to 2.3.9 -- issue warning. Less than
+-dnl 2.3.7 -- stop
+-
+-PPPD_VERSION=`$PPPD --version 2>&1 | awk ' /version/ {print $NF}'`
+-
+-case "$PPPD_VERSION" in
+-1.*|2.0.*|2.1.*|2.2.*|2.3.0|2.3.1|2.3.2|2.3.3|2.3.4|2.3.5|2.3.6)
+- AC_MSG_WARN([*** Oops! Your version of pppd is $PPPD_VERSION, which is too old.])
+- AC_MSG_WARN([*** You need at least 2.3.7 (2.3.10 or newer recommended.])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- ;;
+-
+-2.3.7|2.3.8|2.3.9)
+- AC_MSG_WARN([*** Warning. Your version of pppd is $PPPD_VERSION. You will])
+- AC_MSG_WARN([*** not be able to use connect-on-demand. Upgrade to pppd])
+- AC_MSG_WARN([*** 2.3.10 or newer if you need connect-on-demand.])
+- ;;
+-
+-2*|3*|4*|5*|6*|7*|8*|9*)
+- ;;
+-
+-*)
+- AC_MSG_WARN([*** Oops. I cannot figure out what version of pppd you have.])
+- AC_MSG_WARN([*** All I got back was '$PPPD_VERSION'])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- ;;
+-esac
+-
+ dnl Figure out packing order of structures
+-AC_MSG_CHECKING([packing order of bit fields])
++AC_CACHE_CHECK([packing order of bit fields],rpppoe_cv_pack_bitfields,[
+ AC_TRY_RUN([
+ union foo {
+ struct bar {
+@@ -245,10 +209,11 @@
+ }
+ }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+ $ECHO "no defaults for cross-compiling"; exit 0)
++])
+
+ if test "$rpppoe_cv_pack_bitfields" = "rev" ; then
+ AC_MSG_RESULT(reversed)
+- AC_DEFINE(PACK_BITFIELDS_REVERSED)
++ AC_DEFINE([PACK_BITFIELDS_REVERSED], [], [Reversed bitfields])
+ else
+ AC_MSG_RESULT(normal)
+ fi
+@@ -312,6 +277,7 @@
+ AC_SUBST(RDYNAMIC)
+ AC_SUBST(LIBEVENT)
+ AC_SUBST(ECHO)
++AC_SUBST(HAVE_STRUCT_SOCKADDR_LL)
+
+ datadir_evaluated=`eval echo $datadir`
+ AC_SUBST(datadir_evaluated)
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/pppoe-no-timeout.patch b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-no-timeout.patch
new file mode 100644
index 0000000000..a10a1b87e9
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-no-timeout.patch
@@ -0,0 +1,16 @@
+Don't time out and give up re-trying PPPoE. We want PPPD to control
+if we give up or not. From debian. This fixes lots of bugs and makes
+it compatible with the default debian version.
+
+
+--- rp-pppoe-3.8.orig/configs/pppoe.conf
++++ rp-pppoe-3.8/configs/pppoe.conf
+@@ -66,7 +66,7 @@
+ # to connect forever after pppoe-start is called. Otherwise, it will
+ # give out after CONNECT_TIMEOUT seconds and will not attempt to
+ # connect again, making it impossible to reach.
+-CONNECT_TIMEOUT=30
++CONNECT_TIMEOUT=0
+
+ # How often in seconds pppoe-start polls to check if link is up
+ CONNECT_POLL=2
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.default b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.default
new file mode 100644
index 0000000000..996d57f3cf
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.default
@@ -0,0 +1,22 @@
+# PPPoE Server options
+
+# Maximum segment size, not used for in kernel PPPoE
+#MSS=1412
+
+# Device(s) - Space seperated list of devices to listen on
+#DEVICES="eth1"
+
+# Local IP
+#LOCAL_IP=10.0.0.1
+
+# Starting remote IP
+#REMOTE_IP=10.67.15.1
+
+# Service name
+#SERVICE_NAME="acme"
+
+# Maximum number of sessions, default is 16
+#MAX_SESSIONS=64
+
+# Access concentrator name, default is the hostname
+#ACCESS_CONCENTRATOR_NAME="pppoe-rtr-1"
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.init b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.init
new file mode 100755
index 0000000000..21afe0be39
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-server.init
@@ -0,0 +1,59 @@
+#! /bin/sh
+
+test -f /usr/sbin/pppoe-server || exit 0
+test -f /etc/default/pppoe-server && . /etc/default/pppoe-server
+
+case $1 in
+ start)
+ OPTIONS=""
+ if [ -n "$MSS" ]; then
+ OPTIONS="$OPTIONS -m $MSS"
+ fi
+ if [ -n "$DEVICES" ]; then
+ for i in $DEVICES; do
+ OPTIONS="$OPTIONS -I $i"
+ done
+ fi
+ if [ -n "$LOCAL_IP" ]; then
+ OPTIONS="$OPTIONS -L $LOCAL_IP"
+ fi
+ if [ -n "$REMOTE_IP" ]; then
+ OPTIONS="$OPTIONS -R $REMOTE_IP"
+ fi
+ if [ -n "$SERVICE_NAME" ]; then
+ OPTIONS="$OPTIONS -S $SERVICE_NAME"
+ fi
+ if [ -n "$MAX_SESSIONS" ]; then
+ OPTIONS="$OPTIONS -N $MAX_SESSIONS"
+ fi
+ if [ -n "$ACCESS_CONCENTRATOR_NAME" ]; then
+ OPTIONS="$OPTIONS -C $ACCESS_CONCENTRATOR_NAME"
+ fi
+ echo -n "Starting PPPoE server: pppoe-server"
+ start-stop-daemon --start --quiet --exec /usr/sbin/pppoe-server -- $OPTIONS
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping PPPoE server: pppoe-server"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/pppoe-server -- $OPTIONS
+ echo "."
+ ;;
+ status)
+ pid=$(pidof pppoe-server)
+ if [ -n "$pid" ] ; then
+ echo "Running with pid $pid"
+ else
+ echo "Not running"
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/pppoe-server {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/pppoe-src-restrictions.patch b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-src-restrictions.patch
new file mode 100644
index 0000000000..e7e1c2ee36
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/pppoe-src-restrictions.patch
@@ -0,0 +1,18 @@
+Relax restrictions on the PPPoE src address, as per debian bug
+293811:
+
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=293811
+
+--- rp-pppoe-3.8.orig/src/discovery.c
++++ rp-pppoe-3.8/src/discovery.c
+@@ -376,8 +376,8 @@
+ if (!packetIsForMe(conn, &packet)) continue;
+
+ if (packet.code == CODE_PADO) {
+- if (NOT_UNICAST(packet.ethHdr.h_source)) {
+- printErr("Ignoring PADO packet from non-unicast MAC address");
++ if (BROADCAST(packet.ethHdr.h_source)) {
++ printErr("Ignoring broadcast PADO packet");
+ continue;
+ }
+ parsePacket(&packet, parsePADOTags, &pc);
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/top-autoconf.patch b/packages/rp-pppoe/rp-pppoe-3.8/top-autoconf.patch
new file mode 100644
index 0000000000..e3b0482984
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/top-autoconf.patch
@@ -0,0 +1,25 @@
+The autoconf stuff is all in a subdirectory, which is rather annoying
+as OE expects patches to be applied and autoconf stuff to be done in
+S. This adds enough autoconf at the top level to allow it to be
+called there - all it does is run a sub autoconf stuff in the src
+directory.
+
+Index: rp-pppoe-3.8/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ rp-pppoe-3.8/Makefile.am 2007-06-08 15:58:16.000000000 +1000
+@@ -0,0 +1,5 @@
++PACKAGE = rp-pppoe
++VERSION = 3.8
++
++dnl AM_CFLAGS = -Wall -DDEBUG
++SUBDIRS = src
+Index: rp-pppoe-3.8/configure.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ rp-pppoe-3.8/configure.in 2007-06-08 15:58:16.000000000 +1000
+@@ -0,0 +1,4 @@
++AC_INIT(src/pppoe.c)
++AM_INIT_AUTOMAKE([rp-pppoe], [3.8])
++AC_CONFIG_SUBDIRS(src)
++AC_OUTPUT(Makefile)
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/update-config.patch b/packages/rp-pppoe/rp-pppoe-3.8/update-config.patch
new file mode 100644
index 0000000000..5642e3cfee
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/update-config.patch
@@ -0,0 +1,30 @@
+Set the timeout to 0 since we don't want pppoe to try reconnecting,
+we want whatever is calling it to reconnect. Lots of odd things
+happen when you have pppoe retrying itself.
+
+The path for the plugin is wrong, it's now part of ppp and is in a
+ppp's plugin lib directory. If no path is specified then that's where
+ppp looks, so that's what we do here.
+
+Index: rp-pppoe-3.8/configs/pppoe.conf
+===================================================================
+--- rp-pppoe-3.8.orig/configs/pppoe.conf 2006-04-03 00:29:41.000000000 +1000
++++ rp-pppoe-3.8/configs/pppoe.conf 2007-06-08 16:02:47.000000000 +1000
+@@ -66,7 +66,7 @@
+ # to connect forever after pppoe-start is called. Otherwise, it will
+ # give out after CONNECT_TIMEOUT seconds and will not attempt to
+ # connect again, making it impossible to reach.
+-CONNECT_TIMEOUT=30
++CONNECT_TIMEOUT=0
+
+ # How often in seconds pppoe-start polls to check if link is up
+ CONNECT_POLL=2
+@@ -115,7 +115,7 @@
+ FIREWALL=NONE
+
+ # Linux kernel-mode plugin for pppd. If you want to try the kernel-mode
+-# plugin, use LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
++# plugin, use LINUX_PLUGIN=rp-pppoe.so
+ LINUX_PLUGIN=
+
+ # Any extra arguments to pass to pppoe. Normally, use a blank string
diff --git a/packages/rp-pppoe/rp-pppoe_3.8.bb b/packages/rp-pppoe/rp-pppoe_3.8.bb
new file mode 100644
index 0000000000..35faf8839b
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe_3.8.bb
@@ -0,0 +1,55 @@
+DESCRIPTION = "A user-mode PPPoE client and server suite for Linux"
+HOMEPAGE = "http://www.roaringpenguin.com/en/penguin/openSourceProducts/rpPppoe"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+RDEPENDS_${PN} = "ppp"
+RDEPENDS_${PN}-server = "${PN}"
+RRECOMMENDS_${PN} = "ppp-oe"
+PR = "r5"
+
+SRC_URI = "http://www.roaringpenguin.com/files/download/${P}.tar.gz \
+ file://top-autoconf.patch;patch=1 \
+ file://configure_in_cross.patch;patch=1 \
+ file://pppoe-src-restrictions.patch;patch=1 \
+ file://update-config.patch;patch=1 \
+ file://pppoe-server.default \
+ file://pppoe-server.init"
+
+inherit autotools update-rc.d
+
+do_install() {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/pppoe-server.default ${D}${sysconfdir}/default/pppoe-server
+ install -m 0755 ${WORKDIR}/pppoe-server.init ${D}${sysconfdir}/init.d/pppoe-server
+ # Install
+ oe_runmake -C ${S} RPM_INSTALL_ROOT=${D} docdir=${docdir} install
+}
+
+# Insert server package before main package
+PACKAGES = "${PN}-dbg ${PN}-server ${PN}-relay ${PN}-sniff ${PN} ${PN}-doc"
+
+FILES_${PN}-server = "${sysconfdir}/default/pppoe-server \
+ ${sysconfdir}/init.d/pppoe-server \
+ ${sbindir}/pppoe-server \
+ ${sysconfdir}/ppp/pppoe-server-options"
+FILES_${PN}-relay = "${sbindir}/pppoe-relay"
+FILES_${PN}-sniff = "${sbindir}/pppoe-sniff"
+
+pkg_postinst_${PN} () {
+ if [ x"$D" != "x" ]; then
+ exit 1
+ fi
+ chmod 4755 ${sbindir}/pppoe
+}
+
+CONFFILES_${PN} = "${sysconfdir}/ppp/pppoe.conf \
+ ${sysconfdir}/ppp/firewall-standalone \
+ ${sysconfdir}/ppp/firewall-masq"
+CONFFILES_${PN}-server = "${sysconfdir}/ppp/pppoe-server-options \
+ ${sysconfdir}/default/pppoe-server"
+
+INITSCRIPT_PACKAGES = "${PN}-server"
+INITSCRIPT_NAME_${PN}-server = "pppoe-server"
+INITSCRIPT_PARAMS_${PN}-server = "defaults 92 08"
+
diff --git a/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb b/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb
new file mode 100644
index 0000000000..b22a3955a6
--- /dev/null
+++ b/packages/rt2x00/rt2570-k2wrlz_1.6.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Driver for Ralink rt2570 USB 802.11g WiFi sticks"
+HOMEPAGE = "http://rt2x00.serialmonkey.com/"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+
+SRC_URI = "http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
+
+inherit module
+
+S = "${WORKDIR}/${PN}-${PV}/Module/"
+
+EXTRA_OEMAKE = "KERNDIR=${STAGING_KERNEL_DIR}"
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
+ install -m 0644 rt2570${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra/
+}
diff --git a/packages/rt2x00/rt73-k2wrlz_1.0.0.bb b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
new file mode 100644
index 0000000000..764f779cbd
--- /dev/null
+++ b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Enhanced Driver for Ralink rt73 USB 802.11g WiFi sticks"
+HOMEPAGE = "http://homepages.tu-darmstadt.de/~p_larbig/wlan"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+
+SRC_URI= "http://homepages.tu-darmstadt.de/~p_larbig/wlan/rt73-k2wrlz-1.0.0.tar.bz2"
+inherit module
+
+S = "${WORKDIR}/${PN}-${PV}/Module/"
+
+do_compile() {
+ export KERNDIR=${STAGING_KERNEL_DIR}
+ module_do_compile
+}
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
+ install -m 0644 rt73${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra/
+}
diff --git a/packages/ruby/ruby_1.8.5.bb b/packages/ruby/ruby_1.8.5.bb
index d06e9e0943..6260614772 100644
--- a/packages/ruby/ruby_1.8.5.bb
+++ b/packages/ruby/ruby_1.8.5.bb
@@ -1,2 +1,8 @@
require ruby.inc
DEPENDS = "ruby-native zlib openssl"
+
+PR = "r1"
+
+FILES_${PN}-dbg += "${libdir}/ruby/1.8/*/.debug \
+ ${libdir}/ruby/1.8/*/*/.debug"
+
diff --git a/packages/s3c2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2 b/packages/s3c2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2
deleted file mode 100644
index 8ddb3cc83d..0000000000
--- a/packages/s3c2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/s3c2410-utils/files/sjf2410-linux-20060807.tar.bz2 b/packages/s3c2410-utils/files/sjf2410-linux-20060807.tar.bz2
deleted file mode 100644
index 3458364699..0000000000
--- a/packages/s3c2410-utils/files/sjf2410-linux-20060807.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/s3c2410-utils/s3c2410-boot-usb-native_20060807.bb b/packages/s3c2410-utils/s3c2410-boot-usb-native_20060807.bb
deleted file mode 100644
index ee8534dc01..0000000000
--- a/packages/s3c2410-utils/s3c2410-boot-usb-native_20060807.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-DESCRIPTION = "Boots a S3C2410 device with a user supplied kernel zImage"
-DEPENDS = "libusb-native"
-SECTION = "devel"
-AUTHOR = "Harald Welte"
-MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "file://s3c2410_boot_usb-20060807.tar.bz2"
-S = "${WORKDIR}/s3c2410_boot_usb"
-
-inherit native
-
-do_compile() {
- ${CC} ${CFLAGS} ${LDFLAGS} -lusb -o s3c2410-boot-usb boot_usb.c
-}
-
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0755 s3c2410-boot-usb ${DEPLOY_DIR_IMAGE}
-}
-
-do_stage() {
- :
-}
-
-do_install() {
- :
-}
-
-addtask deploy before do_build after do_compile
diff --git a/packages/s3c2410-utils/sjf2410-linux-native_20060807.bb b/packages/s3c2410-utils/sjf2410-linux-native_20060807.bb
deleted file mode 100644
index 70cc6c7424..0000000000
--- a/packages/s3c2410-utils/sjf2410-linux-native_20060807.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Jtag utility to interface w/ a S3C2410 device"
-SECTION = "devel"
-AUTHOR = "Harald Welte"
-MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "file://sjf2410-linux-20060807.tar.bz2"
-S = "${WORKDIR}/sjf2410-linux"
-
-inherit native
-
-CFLAGS += "-DLINUX_PPDEV"
-
-do_compile() {
- oe_runmake
-}
-
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0755 sjf2410 ${DEPLOY_DIR_IMAGE}/sjf2410
-}
-
-do_stage() {
- :
-}
-
-do_install() {
- :
-}
-
-addtask deploy before do_build after do_compile
diff --git a/packages/s3c2410-utils/sjf2410-linux-native_svn.bb b/packages/s3c2410-utils/sjf2410-linux-native_svn.bb
index 55176029ab..60cce4a3e2 100644
--- a/packages/s3c2410-utils/sjf2410-linux-native_svn.bb
+++ b/packages/s3c2410-utils/sjf2410-linux-native_svn.bb
@@ -29,4 +29,4 @@ do_install() {
:
}
-addtask deploy before do_build after do_compile
+addtask deploy before do_package after do_install
diff --git a/packages/salsa-lib/.mtn2git_empty b/packages/salsa-lib/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/salsa-lib/.mtn2git_empty
diff --git a/packages/salsa-lib/salsa-lib_0.0.1.bb b/packages/salsa-lib/salsa-lib_0.0.1.bb
new file mode 100644
index 0000000000..474c4d40dd
--- /dev/null
+++ b/packages/salsa-lib/salsa-lib_0.0.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Small ALSA library replacement for embedded system"
+AUTHOR = "Takashi Iwai <tiwai@suse.de>"
+HOMEPAGE = "http://www.alsa-project.org"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL"
+SRC_URI = "ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/salsa-lib-${PV}.tar.bz2"
+
+# as it overwrite alsa.pc only use if sure.
+DEFAULT_PREFERRENCE = "-1"
+
+inherit autotools pkgconfig
+
diff --git a/packages/sapwood/sapwood/sockets.patch b/packages/sapwood/sapwood/sockets.patch
index 1568206e2a..4e3a8e2d41 100644
--- a/packages/sapwood/sapwood/sockets.patch
+++ b/packages/sapwood/sapwood/sockets.patch
@@ -1,9 +1,12 @@
---- configure.in.old 2005-06-10 17:04:52.000000000 +0200
-+++ configure.in 2005-06-10 17:20:47.000000000 +0200
-@@ -13,61 +13,61 @@
+Index: sapwood/configure.in
+===================================================================
+--- sapwood.orig/configure.in 2007-03-29 16:04:12.000000000 +0200
++++ sapwood/configure.in 2007-03-29 16:04:15.000000000 +0200
+@@ -13,63 +13,6 @@
+ AC_PROG_INSTALL
AC_PROG_MAKE_SET
- dnl abstract sockets namespace checks, from dbus
+-dnl abstract sockets namespace checks, from dbus
-AC_ARG_ENABLE(abstract-sockets,
- [AC_HELP_STRING([--enable-abstract-sockets],
- [use abstract socket namespace (linux only)])],
@@ -13,21 +16,12 @@
-AC_MSG_CHECKING(abstract socket namespace)
-AC_RUN_IFELSE([AC_LANG_PROGRAM(
-[[
-+#AC_ARG_ENABLE(abstract-sockets,
-+# [AC_HELP_STRING([--enable-abstract-sockets],
-+# [use abstract socket namespace (linux only)])],
-+# [enable_abstract_sockets=$enableval],
-+# [enable_abstract_sockets=no])
-+#
-+#AC_MSG_CHECKING(abstract socket namespace)
-+#AC_RUN_IFELSE([AC_LANG_PROGRAM(
-+#[[
- #include <sys/types.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <errno.h>
+-#include <sys/types.h>
+-#include <stdlib.h>
+-#include <stdio.h>
+-#include <sys/socket.h>
+-#include <sys/un.h>
+-#include <errno.h>
-]],
-[[
- int listen_fd;
@@ -68,46 +62,7 @@
-if test x$enable_abstract_sockets = xno; then
- have_abstract_sockets=no
-fi
-+#]],
-+#[[
-+# int listen_fd;
-+# struct sockaddr_un addr;
-+#
-+# listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+# if (listen_fd < 0)
-+# {
-+# fprintf (stderr, "socket() failed: %s\n", strerror (errno));
-+# exit (1);
-+# }
-+#
-+# memset (&addr, '\0', sizeof (addr));
-+# addr.sun_family = AF_UNIX;
-+# strcpy (addr.sun_path, "X/tmp/sapwood-fake-socket-path-used-in-configure-test");
-+# addr.sun_path[0] = '\0'; /* this is what makes it abstract */
-+#
-+# if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
-+# {
-+# fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
-+# strerror (errno));
-+# exit (1);
-+# }
-+# else
-+# exit (0);
-+#]])],
-+# [have_abstract_sockets=no],
-+# [have_abstract_sockets=no])
-+#AC_MSG_RESULT($have_abstract_sockets)
-+
-+#if test x$enable_abstract_sockets = xyes; then
-+# if test x$have_abstract_sockets = xno; then
-+# AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
-+# fi
-+#fi
-+
-+#if test x$enable_abstract_sockets = xno; then
-+have_abstract_sockets=no
-+#fi
-
+-
if test x$have_abstract_sockets = xyes; then
AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
+ fi
diff --git a/packages/sapwood/sapwood_svn.bb b/packages/sapwood/sapwood_svn.bb
index 9651ff3916..39ccacb6f6 100644
--- a/packages/sapwood/sapwood_svn.bb
+++ b/packages/sapwood/sapwood_svn.bb
@@ -1,9 +1,8 @@
DESCRIPTION = "GTK theme engine Sapwood"
LICENSE = "LGPL"
-
DEPENDS = "gtk+"
-
PV = "2.43+svn${SRCDATE}"
+PR = "r1"
SRC_URI = "svn://stage.maemo.org/svn/maemo/projects/haf/trunk/;module=sapwood;proto=https \
file://sockets.patch;patch=1 \
@@ -20,5 +19,5 @@ do_install_append () {
install -m755 ${S}/debian/sapwood-server.sh ${D}${sysconfdir}/osso-af-init/sapwood-server.sh
}
-FILES_${PN} += "${libdir}/gtk-2.0/2.10.0/engines/"
-
+FILES_${PN} += "${libdir}/gtk-2.0/*/engines/libsapwood.so"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug/libsapwood.so"
diff --git a/packages/sato-icon-theme/.mtn2git_empty b/packages/sato-icon-theme/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sato-icon-theme/.mtn2git_empty
diff --git a/packages/sato-icon-theme/sato-icon-theme_0.1.bb b/packages/sato-icon-theme/sato-icon-theme_0.1.bb
new file mode 100644
index 0000000000..0919f5dde6
--- /dev/null
+++ b/packages/sato-icon-theme/sato-icon-theme_0.1.bb
@@ -0,0 +1,20 @@
+SECTION = "x11"
+DESCRIPTION = "Sato Icon Theme"
+LICENSE = "CC-BY-SA3"
+DEPENDS = ""
+
+PACKAGE_ARCH = "all"
+
+SRC_URI = "http://pokylinux.org/releases/sato/sato-icon-theme-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+pkg_postinst_${PN} () {
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ gtk-update-icon-cache -q /usr/share/icons/Sato
+}
+
+FILES_${PN} += "${datadir}"
+
diff --git a/packages/schroedinger/schroedinger_0.2.0.0.bb b/packages/schroedinger/schroedinger_0.2.0.0.bb
index 7812f30da7..78653783d9 100644
--- a/packages/schroedinger/schroedinger_0.2.0.0.bb
+++ b/packages/schroedinger/schroedinger_0.2.0.0.bb
@@ -1,5 +1,5 @@
HOMEPAGE = "http://schrodinger.sourceforge.net/"
-LICENSE = "MPL/GPL/LGPL and MIT"
+LICENSE = "MPL GPL LGPL MIT"
DEPENDS = "liboil gstreamer gst-plugins-base"
SRC_URI = "${SOURCEFORGE_MIRROR}/schrodinger/${P}.tar.gz"
diff --git a/packages/scummvm/scummvm-qpe_0.6.1b.bb b/packages/scummvm/scummvm-qpe_0.6.1b.bb
index 44035e633c..b66d58671a 100644
--- a/packages/scummvm/scummvm-qpe_0.6.1b.bb
+++ b/packages/scummvm/scummvm-qpe_0.6.1b.bb
@@ -1,7 +1,8 @@
require scummvm.inc
-DEPENDS = "libsdl-qpe libmad tremor libogg zlib libmpeg2"
-S="${WORKDIR}/scummvm-${PV}/"
+DEPENDS = "libsdl-qpe libmad tremor libogg zlib mpeg2dec"
+
+S = "${WORKDIR}/scummvm-${PV}/"
do_compile() {
oe_runmake CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS} -lmpeg2" \
diff --git a/packages/scummvm/scummvm.inc b/packages/scummvm/scummvm.inc
index 313b8e3d51..28257fab4b 100644
--- a/packages/scummvm/scummvm.inc
+++ b/packages/scummvm/scummvm.inc
@@ -3,13 +3,13 @@ SECTION = "games"
PRIORITY = "optional"
LICENSE = "GPL"
-SRC_URI = "http://puzzle.dl.sourceforge.net/scummvm/scummvm-${PV}.tar.bz2"
+SRC_URI = "${SOURCEFORGE_MIRROR}/scummvm/scummvm-${PV}.tar.bz2"
inherit autotools
EXTRA_OECONF = "--host=${HOST_SYS} \
--backend=sdl \
- --with-sdl-prefix=${STAGING_BINDIR}/.. \
+ --with-sdl-prefix=${STAGING_BINDIR_NATIVE}/.. \
--disable-alsa \
--with-ogg-prefix=${STAGING_LIBDIR}/.. \
--with-vorbis-prefix=${STAGING_LIBDIR}/.. \
diff --git a/packages/scummvm/scummvm_0.6.0.bb b/packages/scummvm/scummvm_0.6.0.bb
index 1aecd20bc4..852ca5ff1e 100644
--- a/packages/scummvm/scummvm_0.6.0.bb
+++ b/packages/scummvm/scummvm_0.6.0.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Virtual Machine for LucasArts Adventures for Qt/Embedded based palmtop environments w/ SDL."
SECTION = "opie/games"
PRIORITY = "optional"
-DEPENDS = "libsdl-qpe libmad tremor libogg zlib libmpeg2"
+DEPENDS = "libsdl-qpe libmad tremor libogg zlib mpeg2dec"
LICENSE = "GPL"
SRC_URI = "${SOURCEFORGE_MIRROR}/scummvm/scummvm-${PV}.tar.bz2 \
diff --git a/packages/scummvm/scummvm_0.6.1b.bb b/packages/scummvm/scummvm_0.6.1b.bb
index 67762708a9..a1d3dce944 100644
--- a/packages/scummvm/scummvm_0.6.1b.bb
+++ b/packages/scummvm/scummvm_0.6.1b.bb
@@ -1,5 +1,5 @@
require scummvm.inc
-DEPENDS = "virtual/libsdl libmad tremor libogg zlib libmpeg2"
+DEPENDS = "virtual/libsdl libmad tremor libogg zlib mpeg2dec"
SRC_URI += " file://mouse.patch;patch=1 \
file://gcc-4.x.x-accept.patch;patch=1 \
file://sh3-linux-new-arch.patch;patch=1 \
diff --git a/packages/scummvm/scummvm_0.9.0.bb b/packages/scummvm/scummvm_0.9.0.bb
index 9719ee200e..0403e6ae90 100644
--- a/packages/scummvm/scummvm_0.9.0.bb
+++ b/packages/scummvm/scummvm_0.9.0.bb
@@ -1,5 +1,5 @@
require scummvm.inc
-DEPENDS = "virtual/libsdl libmad libvorbis libogg zlib libmpeg2"
+DEPENDS = "virtual/libsdl libmad libvorbis libogg zlib mpeg2dec"
SRC_URI += "file://sh3-arch-0.9.0+.patch;patch=1"
EXTRA_OECONF += "--enable-lure \
diff --git a/packages/scummvm/scummvm_0.9.1.bb b/packages/scummvm/scummvm_0.9.1.bb
new file mode 100644
index 0000000000..5d1e2c1e27
--- /dev/null
+++ b/packages/scummvm/scummvm_0.9.1.bb
@@ -0,0 +1,16 @@
+DEFAULT_PREFERENCE = "-1"
+
+require scummvm.inc
+DEPENDS = "virtual/libsdl libmad libvorbis libogg zlib mpeg2dec"
+
+EXTRA_OECONF += "--enable-lure \
+ --enable-agi \
+ --enable-cine \
+ "
+
+do_compile() {
+ oe_runmake CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS} -lmpeg2" \
+ DEFINES="-DUNIX -DSCUMM_NEED_ALIGNMENT -DUSE_MAD -DUSE_VORBIS -DUSE_ZLIB -DUSE_MPEG2"
+}
+
+
diff --git a/packages/sdlperl/sdl-perl_1.20.3.bb b/packages/sdlperl/sdl-perl_1.20.3.bb
index 80bd899dfc..6820fa05ce 100644
--- a/packages/sdlperl/sdl-perl_1.20.3.bb
+++ b/packages/sdlperl/sdl-perl_1.20.3.bb
@@ -1,40 +1,18 @@
DESCRIPTION = "Perl bindings for SDL"
-HOMEPAGE = "http://bloodgate.com/perl"
SECTION = "libs"
+HOMEPAGE = "http://sdl.perl.org/"
LICENSE = "GPL"
DEPENDS = "perl virtual/libsdl libsdl-image libsdl-gfx libsdl-ttf libsdl-mixer libsdl-net smpeg"
+PR = "r1"
-SRC_URI = "http://bloodgate.com/perl/sdl/pub/SDL_perl-${PV}.tar.gz \
- file://Makefile.patch;patch=1;pnum=0"
+SRC_URI = "http://bloodgate.com/perl/sdl/pub/SDL_perl-${PV}.tar.gz"
S = "${WORKDIR}/SDL_perl-${PV}"
-do_configure () {
- if [ -x ${S}/configure ] ; then
- cfgcmd="${S}/configure \
- -GL -GLU"
- oenote "Running $cfgcmd..."
- $cfgcmd || oefatal "oe_runconf failed"
- if [ "${BUILD_SYS}" != "${HOST_SYS}" ]; then
- . ${STAGING_DIR}/${TARGET_SYS}/perl/config.sh
- sed -e "s:\(SITELIBEXP = \).*:\1${sitelibexp}:; s:\(SITEARCHEXP = \).*:\1${sitearchexp}:; s:\(INSTALLVENDORLIB = \).*:\1${D}${libdir}/perl5:; s:\(INSTALLVENDORARCH = \).*:\1${D}${libdir}/perl5:" < Makefile > Makefile.new
- mv Makefile.new Makefile
- fi
- else
- oefatal "no configure script found"
- fi
-}
-
-do_stage () {
- install -d ${STAGING_LIBDIR}/perl5/vendor_perl
- install -m 0644 ${S}/lib/SDL.pm ${STAGING_LIBDIR}/perl5/vendor_perl
-}
+inherit cpan
-do_compile () {
- oe_runmake PASTHRU_INC="${CFLAGS}"
+do_configure_prepend() {
+ # Search staging area for includes
+ sed -i -e 's:/usr/\(local/\)\{0,1\}include:${STAGING_INCDIR}:g' Makefile.linux
+ # smpeg.h isn't in a subdirectry
+ sed -i -e 's:#include <smpeg/smpeg.h>:#include <smpeg.h>:g' SDL_perl.xs
}
-
-do_install () {
- oe_runmake install_vendor
-}
-
-FILES_${PN} += '${libdir}/perl5'
diff --git a/packages/settings-daemon/settings-daemon_svn.bb b/packages/settings-daemon/settings-daemon_svn.bb
index b81c6c3e16..b427176c79 100644
--- a/packages/settings-daemon/settings-daemon_svn.bb
+++ b/packages/settings-daemon/settings-daemon_svn.bb
@@ -1,16 +1,17 @@
-DESCRIPTION = "Settings-daemon is a bridge between xst/gpe-confd and gconf"
+DESCRIPTION = "Settings-daemon provides a bridge between gconf and xsettings"
LICENSE = "GPL"
-DEPENDS = "gconf xst glib-2.0"
+DEPENDS = "gconf glib-2.0"
+RDEPENDS = "xrdb"
SECTION = "x11"
-
-PR = "r1"
+PV = "0.0+svn${SRCDATE}"
+PR = "r2"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http \
file://70settings-daemon"
S = "${WORKDIR}/${PN}"
-inherit autotools pkgconfig gettext
+inherit autotools pkgconfig gettext gconf
FILES_${PN} = "${bindir}/* ${sysconfdir}"
@@ -18,3 +19,4 @@ do_install_append () {
install -d ${D}/${sysconfdir}/X11/Xsession.d
install -m 755 ${WORKDIR}/70settings-daemon ${D}/${sysconfdir}/X11/Xsession.d/
}
+
diff --git a/packages/shared-mime-info/shared-mime-info.inc b/packages/shared-mime-info/shared-mime-info.inc
new file mode 100644
index 0000000000..3e591ad2d6
--- /dev/null
+++ b/packages/shared-mime-info/shared-mime-info.inc
@@ -0,0 +1,21 @@
+SECTION = "base"
+LICENSE = "GPL"
+DEPENDS = "libxml2 intltool-native"
+PR = "r0"
+
+SRC_URI = "http://freedesktop.org/~hadess/shared-mime-info-${PV}.tar.bz2"
+
+inherit autotools pkgconfig gettext
+
+EXTRA_OECONF = "--disable-update-mimedb"
+
+FILES_${PN} += "${datadir}/mime"
+FILES_${PN}-dev += "${datadir}/pkgconfig/shared-mime-info.pc"
+
+pkg_postinst () {
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+ echo "Updating MIME database... this may take a while."
+ ${bindir}/update-mime-database ${datadir}/mime
+}
diff --git a/packages/shared-mime-info/shared-mime-info_0.20.bb b/packages/shared-mime-info/shared-mime-info_0.20.bb
index 60993adcc2..f24008ec13 100644
--- a/packages/shared-mime-info/shared-mime-info_0.20.bb
+++ b/packages/shared-mime-info/shared-mime-info_0.20.bb
@@ -1,18 +1,2 @@
-SECTION = "base"
-LICENSE = "GPL"
-DEPENDS = "libxml2 intltool-native"
-PR = "r0"
+require shared-mime-info.inc
-SRC_URI = "http://freedesktop.org/~hadess/shared-mime-info-${PV}.tar.bz2"
-
-inherit autotools pkgconfig gettext
-
-EXTRA_OECONF = "--disable-update-mimedb"
-
-FILES_${PN} += "${datadir}/mime"
-FILES_${PN}-dev += "${datadir}/pkgconfig/shared-mime-info.pc"
-
-pkg_postinst () {
- echo "Updating MIME database... this may take a while."
- ${bindir}/update-mime-database ${datadir}/mime
-}
diff --git a/packages/shared-mime-info/shared-mime-info_0.22.bb b/packages/shared-mime-info/shared-mime-info_0.22.bb
new file mode 100644
index 0000000000..f24008ec13
--- /dev/null
+++ b/packages/shared-mime-info/shared-mime-info_0.22.bb
@@ -0,0 +1,2 @@
+require shared-mime-info.inc
+
diff --git a/packages/shasum/.mtn2git_empty b/packages/shasum/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/shasum/.mtn2git_empty
diff --git a/packages/shasum/files/.mtn2git_empty b/packages/shasum/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/shasum/files/.mtn2git_empty
diff --git a/packages/shasum/files/main.c b/packages/shasum/files/main.c
new file mode 100644
index 0000000000..0748a94f3a
--- /dev/null
+++ b/packages/shasum/files/main.c
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "mhash_sha256.h"
+
+/*
+ * from driver.c of mhash
+ */
+static const char hexconvtab[] = "0123456789abcdef";
+
+static char *
+bin2hex(const unsigned char *old, const size_t oldlen, size_t * newlen)
+{
+ unsigned char *new = NULL;
+ int i, j;
+
+ new = (char *) malloc(oldlen * 2 * sizeof(char) + 1);
+ if (!new)
+ return (new);
+
+ for (i = j = 0; i < oldlen; i++) {
+ new[j++] = hexconvtab[old[i] >> 4];
+ new[j++] = hexconvtab[old[i] & 15];
+ }
+ new[j] = '\0';
+
+ if (newlen)
+ *newlen = oldlen * 2 * sizeof(char);
+
+ return (new);
+}
+
+
+int main(int argc, char** argv)
+{
+ FILE *file;
+ size_t n;
+ SHA256_CTX ctx;
+ unsigned char buf[1024];
+ byte output[33];
+
+ if ( argc <= 1 ) {
+ return EXIT_FAILURE;
+ }
+
+ if ( (file=fopen(argv[1], "rb")) == NULL ) {
+ return EXIT_FAILURE;
+ }
+
+ sha256_init(&ctx);
+
+ while ( (n=fread( buf, 1, sizeof(buf), file)) > 0 )
+ sha256_update(&ctx, buf, n );
+
+ sha256_final(&ctx);
+ sha256_digest(&ctx, output);
+
+ printf("%s ?%s\n", bin2hex(output, 32, &n), argv[1]);
+ return EXIT_SUCCESS;
+}
diff --git a/packages/shasum/files/mhash_sha256.h b/packages/shasum/files/mhash_sha256.h
new file mode 100644
index 0000000000..46090c5f3e
--- /dev/null
+++ b/packages/shasum/files/mhash_sha256.h
@@ -0,0 +1,64 @@
+/* sha.h
+ *
+ * The sha1 and sha256 hash functions.
+ */
+
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2001 Niels Möller
+ *
+ * The nettle library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The nettle library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the nettle library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#ifndef NETTLE_SHA_H_INCLUDED
+#define NETTLE_SHA_H_INCLUDED
+
+#include <inttypes.h>
+
+typedef uint32_t word32;
+typedef unsigned char byte;
+
+
+/* SHA256 */
+
+#define SHA256_DIGEST_SIZE 32
+#define SHA256_DATA_SIZE 64
+
+/* Digest is kept internally as 8 32-bit words. */
+#define _SHA256_DIGEST_LENGTH 8
+
+typedef struct sha256_ctx
+{
+ word32 state[_SHA256_DIGEST_LENGTH]; /* State variables */
+ word32 count_low, count_high; /* 64-bit block count */
+ byte block[SHA256_DATA_SIZE]; /* SHA256 data buffer */
+ unsigned int index; /* index into buffer */
+} SHA256_CTX;
+
+void
+sha256_init(struct sha256_ctx *ctx);
+
+void
+sha256_update(struct sha256_ctx *ctx, const byte *data, unsigned length);
+
+void
+sha256_final(struct sha256_ctx *ctx);
+
+void
+sha256_digest(const struct sha256_ctx *ctx, byte *digest);
+
+
+#endif /* NETTLE_SHA_H_INCLUDED */
diff --git a/packages/shasum/files/sha256.c b/packages/shasum/files/sha256.c
new file mode 100644
index 0000000000..e2ee2c6b4e
--- /dev/null
+++ b/packages/shasum/files/sha256.c
@@ -0,0 +1,322 @@
+/* sha256.h
+ *
+ * The sha256 hash function.
+ */
+
+/* nettle, low-level cryptographics library
+ *
+ * Copyright (C) 2001 Niels Möller
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * The nettle library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the nettle library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+/* Modelled after the sha1.c code by Peter Gutmann. */
+
+#include "mhash_sha256.h"
+#include <stdlib.h>
+#include <string.h>
+
+
+#ifndef EXTRACT_UCHAR
+#define EXTRACT_UCHAR(p) (*(unsigned char *)(p))
+#endif
+
+#define STRING2INT(s) ((((((EXTRACT_UCHAR(s) << 8) \
+ | EXTRACT_UCHAR(s+1)) << 8) \
+ | EXTRACT_UCHAR(s+2)) << 8) \
+ | EXTRACT_UCHAR(s+3))
+
+/* This has been modified in order to fit in mhash.
+ * --nmav.
+ */
+
+/* A block, treated as a sequence of 32-bit words. */
+#define SHA256_DATA_LENGTH 16
+
+#define ROTR(n,x) ((x)>>(n) | ((x)<<(32-(n))))
+#define SHR(n,x) ((x)>>(n))
+
+/* The SHA256 functions. The Choice function is the same as the SHA1
+ function f1, and the majority function is the same as the SHA1 f3
+ function. They can be optimized to save one boolean operation each
+ - thanks to Rich Schroeppel, rcs@cs.arizona.edu for discovering
+ this */
+
+/* #define Choice(x,y,z) ( ( (x) & (y) ) | ( ~(x) & (z) ) ) */
+#define Choice(x,y,z) ( (z) ^ ( (x) & ( (y) ^ (z) ) ) )
+/* #define Majority(x,y,z) ( ((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)) ) */
+#define Majority(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
+
+#define S0(x) (ROTR(2,(x)) ^ ROTR(13,(x)) ^ ROTR(22,(x)))
+#define S1(x) (ROTR(6,(x)) ^ ROTR(11,(x)) ^ ROTR(25,(x)))
+
+#define s0(x) (ROTR(7,(x)) ^ ROTR(18,(x)) ^ SHR(3,(x)))
+#define s1(x) (ROTR(17,(x)) ^ ROTR(19,(x)) ^ SHR(10,(x)))
+
+/* Generated by the shadata program. */
+static const word32 K[64] = {
+ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
+ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
+ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
+ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
+ 0xe49b69c1UL, 0xefbe4786UL, 0xfc19dc6UL, 0x240ca1ccUL,
+ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
+ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
+ 0xc6e00bf3UL, 0xd5a79147UL, 0x6ca6351UL, 0x14292967UL,
+ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
+ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
+ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
+ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
+ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
+ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
+ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
+ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL,
+};
+
+/* The initial expanding function. The hash function is defined over an
+ 64-word expanded input array W, where the first 16 are copies of the input
+ data, and the remaining 64 are defined by
+
+ W[ t ] = s1(W[t-2] + W[t-7] + s0(W[i-15] + W[i-16]
+
+ This implementation generates these values on the fly in a circular
+ buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this
+ optimization.
+*/
+
+#define EXPAND(W,i) \
+( W[(i) & 15 ] += (s1(W[((i)-2) & 15]) + W[((i)-7) & 15] + s0(W[((i)-15) & 15])) )
+
+/* The prototype SHA sub-round. The fundamental sub-round is:
+
+ T1 = h + S1(e) + Choice(e,f,g) + K[t] + W[t]
+ T2 = S0(a) + Majority(a,b,c)
+ a' = T1+T2
+ b' = a
+ c' = b
+ d' = c
+ e' = d + T1
+ f' = e
+ g' = f
+ h' = g
+
+ but this is implemented by unrolling the loop 8 times and renaming
+ the variables
+ ( h, a, b, c, d, e, f, g ) = ( a, b, c, d, e, f, g, h ) each
+ iteration. This code is then replicated 8, using the next 8 values
+ from the W[] array each time */
+
+/* FIXME: We can probably reorder this to optimize away at least one
+ * of T1 and T2. It's crucial that DATA is only used once, as that
+ * argument will have side effects. */
+#define ROUND(a,b,c,d,e,f,g,h,k,data) do { \
+ word32 T1 = h + S1(e) + Choice(e,f,g) + k + data; \
+ word32 T2 = S0(a) + Majority(a,b,c); \
+ d += T1; \
+ h = T1 + T2; \
+} while (0)
+
+/* Initialize the SHA values */
+
+void sha256_init(struct sha256_ctx *ctx)
+{
+ /* Initial values, also generated by the shadata program. */
+ static const word32 H0[_SHA256_DIGEST_LENGTH] = {
+ 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL,
+ 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL,
+ };
+
+ memcpy(ctx->state, H0, sizeof(H0));
+
+ /* Initialize bit count */
+ ctx->count_low = ctx->count_high = 0;
+
+ /* Initialize buffer */
+ ctx->index = 0;
+}
+
+/* Perform the SHA transformation. Note that this code, like MD5, seems to
+ break some optimizing compilers due to the complexity of the expressions
+ and the size of the basic block. It may be necessary to split it into
+ sections, e.g. based on the four subrounds
+
+ Note that this function destroys the data area */
+
+static void sha256_transform(word32 * state, word32 * data)
+{
+ word32 A, B, C, D, E, F, G, H; /* Local vars */
+ unsigned i;
+ const word32 *k;
+ word32 *d;
+
+ /* Set up first buffer and local data buffer */
+ A = state[0];
+ B = state[1];
+ C = state[2];
+ D = state[3];
+ E = state[4];
+ F = state[5];
+ G = state[6];
+ H = state[7];
+
+ /* Heavy mangling */
+ /* First 16 subrounds that act on the original data */
+
+ for (i = 0, k = K, d = data; i < 16; i += 8, k += 8, d += 8) {
+ ROUND(A, B, C, D, E, F, G, H, k[0], d[0]);
+ ROUND(H, A, B, C, D, E, F, G, k[1], d[1]);
+ ROUND(G, H, A, B, C, D, E, F, k[2], d[2]);
+ ROUND(F, G, H, A, B, C, D, E, k[3], d[3]);
+ ROUND(E, F, G, H, A, B, C, D, k[4], d[4]);
+ ROUND(D, E, F, G, H, A, B, C, k[5], d[5]);
+ ROUND(C, D, E, F, G, H, A, B, k[6], d[6]);
+ ROUND(B, C, D, E, F, G, H, A, k[7], d[7]);
+ }
+
+ for (; i < 64; i += 16, k += 16) {
+ ROUND(A, B, C, D, E, F, G, H, k[0], EXPAND(data, 0));
+ ROUND(H, A, B, C, D, E, F, G, k[1], EXPAND(data, 1));
+ ROUND(G, H, A, B, C, D, E, F, k[2], EXPAND(data, 2));
+ ROUND(F, G, H, A, B, C, D, E, k[3], EXPAND(data, 3));
+ ROUND(E, F, G, H, A, B, C, D, k[4], EXPAND(data, 4));
+ ROUND(D, E, F, G, H, A, B, C, k[5], EXPAND(data, 5));
+ ROUND(C, D, E, F, G, H, A, B, k[6], EXPAND(data, 6));
+ ROUND(B, C, D, E, F, G, H, A, k[7], EXPAND(data, 7));
+ ROUND(A, B, C, D, E, F, G, H, k[8], EXPAND(data, 8));
+ ROUND(H, A, B, C, D, E, F, G, k[9], EXPAND(data, 9));
+ ROUND(G, H, A, B, C, D, E, F, k[10], EXPAND(data, 10));
+ ROUND(F, G, H, A, B, C, D, E, k[11], EXPAND(data, 11));
+ ROUND(E, F, G, H, A, B, C, D, k[12], EXPAND(data, 12));
+ ROUND(D, E, F, G, H, A, B, C, k[13], EXPAND(data, 13));
+ ROUND(C, D, E, F, G, H, A, B, k[14], EXPAND(data, 14));
+ ROUND(B, C, D, E, F, G, H, A, k[15], EXPAND(data, 15));
+ }
+
+ /* Update state */
+ state[0] += A;
+ state[1] += B;
+ state[2] += C;
+ state[3] += D;
+ state[4] += E;
+ state[5] += F;
+ state[6] += G;
+ state[7] += H;
+}
+
+static void sha256_block(struct sha256_ctx *ctx, const byte * block)
+{
+ word32 data[SHA256_DATA_LENGTH];
+ int i;
+
+ /* Update block count */
+ if (!++ctx->count_low)
+ ++ctx->count_high;
+
+ /* Endian independent conversion */
+ for (i = 0; i < SHA256_DATA_LENGTH; i++, block += 4)
+ data[i] = STRING2INT(block);
+
+ sha256_transform(ctx->state, data);
+}
+
+void
+sha256_update(struct sha256_ctx *ctx, const byte * buffer, unsigned length)
+{
+ if (ctx->index) { /* Try to fill partial block */
+ unsigned left = SHA256_DATA_SIZE - ctx->index;
+ if (length < left) {
+ memcpy(ctx->block + ctx->index, buffer, length);
+ ctx->index += length;
+ return; /* Finished */
+ } else {
+ memcpy(ctx->block + ctx->index, buffer, left);
+ sha256_block(ctx, ctx->block);
+ buffer += left;
+ length -= left;
+ }
+ }
+ while (length >= SHA256_DATA_SIZE) {
+ sha256_block(ctx, buffer);
+ buffer += SHA256_DATA_SIZE;
+ length -= SHA256_DATA_SIZE;
+ }
+ /* Buffer leftovers */
+ /* NOTE: The corresponding sha1 code checks for the special case length == 0.
+ * That seems supoptimal, as I suspect it increases the number of branches. */
+
+ memcpy(ctx->block, buffer, length);
+ ctx->index = length;
+}
+
+/* Final wrapup - pad to SHA1_DATA_SIZE-byte boundary with the bit pattern
+ 1 0* (64-bit count of bits processed, MSB-first) */
+
+void sha256_final(struct sha256_ctx *ctx)
+{
+ word32 data[SHA256_DATA_LENGTH];
+ int i;
+ int words;
+
+ i = ctx->index;
+
+ /* Set the first char of padding to 0x80. This is safe since there is
+ always at least one byte free */
+
+/* assert(i < SHA256_DATA_SIZE);
+ */
+ ctx->block[i++] = 0x80;
+
+ /* Fill rest of word */
+ for (; i & 3; i++)
+ ctx->block[i] = 0;
+
+ /* i is now a multiple of the word size 4 */
+ words = i >> 2;
+ for (i = 0; i < words; i++)
+ data[i] = STRING2INT(ctx->block + 4 * i);
+
+ if (words > (SHA256_DATA_LENGTH - 2)) { /* No room for length in this block. Process it and
+ * pad with another one */
+ for (i = words; i < SHA256_DATA_LENGTH; i++)
+ data[i] = 0;
+ sha256_transform(ctx->state, data);
+ for (i = 0; i < (SHA256_DATA_LENGTH - 2); i++)
+ data[i] = 0;
+ } else
+ for (i = words; i < SHA256_DATA_LENGTH - 2; i++)
+ data[i] = 0;
+
+ /* There are 512 = 2^9 bits in one block */
+ data[SHA256_DATA_LENGTH - 2] =
+ (ctx->count_high << 9) | (ctx->count_low >> 23);
+ data[SHA256_DATA_LENGTH - 1] =
+ (ctx->count_low << 9) | (ctx->index << 3);
+ sha256_transform(ctx->state, data);
+}
+
+void sha256_digest(const struct sha256_ctx *ctx, byte * s)
+{
+ int i;
+
+ if (s!=NULL)
+ for (i = 0; i < _SHA256_DIGEST_LENGTH; i++) {
+ *s++ = ctx->state[i] >> 24;
+ *s++ = 0xff & (ctx->state[i] >> 16);
+ *s++ = 0xff & (ctx->state[i] >> 8);
+ *s++ = 0xff & ctx->state[i];
+ }
+}
+
diff --git a/packages/shasum/shasum-native.bb b/packages/shasum/shasum-native.bb
new file mode 100644
index 0000000000..2b9dd9a09d
--- /dev/null
+++ b/packages/shasum/shasum-native.bb
@@ -0,0 +1,11 @@
+require shasum.inc
+
+inherit native
+
+INHIBIT_DEFAULT_DEPS = "1"
+PATCHTOOL = "patch"
+
+do_fetch[depends] = ""
+do_populate_staging() {
+ install ${S}/oe_sha256sum ${STAGING_BINDIR}
+}
diff --git a/packages/shasum/shasum.inc b/packages/shasum/shasum.inc
new file mode 100644
index 0000000000..343a2d288e
--- /dev/null
+++ b/packages/shasum/shasum.inc
@@ -0,0 +1,20 @@
+SUMMARY = "A simple tool to create sha256 hashes from a file"
+LICENSE = "LGPL"
+
+PR = "r1"
+
+S = "${WORKDIR}"
+
+
+SRC_URI = "file://main.c \
+ file://mhash_sha256.h \
+ file://sha256.c "
+
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ $CC $CFLAGS $CPPFLAGS -o oe_sha256sum main.c sha256.c
+}
diff --git a/packages/sidplay-base/.mtn2git_empty b/packages/sidplay-base/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sidplay-base/.mtn2git_empty
diff --git a/packages/sidplay-base/sidplay-base_1.0.9.bb b/packages/sidplay-base/sidplay-base_1.0.9.bb
new file mode 100644
index 0000000000..f6d3af14c1
--- /dev/null
+++ b/packages/sidplay-base/sidplay-base_1.0.9.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "A spartanic SID music player based on libsidplay 1.x"
+SECTION = "console/multimedia"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/linux.html"
+DEPENDS = "libsidplay"
+
+SRC_URI = "http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/sidplay-base-${PV}.tgz"
+S = "${WORKDIR}/sidplay-base-${PV}"
+
+inherit autotools
diff --git a/packages/simh/.mtn2git_empty b/packages/simh/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/simh/.mtn2git_empty
diff --git a/packages/simh/files/.mtn2git_empty b/packages/simh/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/simh/files/.mtn2git_empty
diff --git a/packages/simh/files/makefile.patch b/packages/simh/files/makefile.patch
new file mode 100644
index 0000000000..dce99d81f5
--- /dev/null
+++ b/packages/simh/files/makefile.patch
@@ -0,0 +1,36 @@
+diff --git a/makefile b/makefile
+index 4973273..10cc672 100644
+--- a/makefile
++++ b/makefile
+@@ -10,19 +10,15 @@ OS_CCDEFS = -lsocket -lnsl -lpthread -D_GNU_SOURCE
+ else
+ OS_CCDEFS = -D_GNU_SOURCE
+ endif
+-ifeq ($(OSTYPE),macos)
+-CC = gcc -std=c99 -O2 -U__STRICT_ANSI__ -g -lm -lrt $(OS_CCDEFS) -I .
+-else
+-CC = gcc -std=c99 -O2 -U__STRICT_ANSI__ -g -lm $(OS_CCDEFS) -I .
+-endif
++CC := ${CC} -std=c99 -U__STRICT_ANSI__ -lm -lrt $(OS_CCDEFS) -I .
+ ifeq ($(USE_NETWORK),)
+ else
+-NETWORK_OPT = -DUSE_NETWORK -isystem /usr/local/include /usr/local/lib/libpcap.a
++NETWORK_OPT = -DUSE_NETWORK -DNEED_PCAP_SENDPACKET -lpcap
+ endif
+ else
+ #Win32 Environments
+ LDFLAGS = -lm -lwsock32 -lwinmm
+-CC = gcc -std=c99 -U__STRICT_ANSI__ -O0 -I.
++CC := ${CC} -std=c99 -U__STRICT_ANSI__ -O0 -I.
+ EXE = .exe
+ ifeq ($(USE_NETWORK),)
+ else
+@@ -30,6 +26,8 @@ NETWORK_OPT = -DUSE_NETWORK -lwpcap -lpacket
+ endif
+ endif
+
++CC := ${CC} ${CPPFLAGS} ${CFLAGS}
++
+ #
+ # Common Libraries
+ #
diff --git a/packages/simh/simh_3.7-1.bb b/packages/simh/simh_3.7-1.bb
new file mode 100644
index 0000000000..6240fed4f9
--- /dev/null
+++ b/packages/simh/simh_3.7-1.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "The Computer History Simulation Project"
+HOMEPAGE = "http://simh.trailing-edge.com/"
+SECTION = "console/misc"
+LICENSE = "as-is"
+DEPENDS = "libpcap"
+PR = "r0"
+
+URIPV = "${@bb.data.getVar('PV',d,1).replace('.','')}"
+SRC_URI = "http://simh.trailing-edge.com/sources/simhv${URIPV}.zip \
+ file://makefile.patch;patch=1"
+S = "${WORKDIR}/${PN}-${PV}"
+
+python do_unpack() {
+ import os
+ os.mkdir(bb.data.getVar('S',d,1))
+ tmp = bb.data.createCopy(d)
+ bb.data.setVar('WORKDIR',bb.data.getVar('S',d,1),tmp)
+ bb.build.exec_func('base_do_unpack', tmp)
+}
+
+do_compile() {
+ mkdir BIN || true
+ make USE_NETWORK=1 || die "make failed"
+}
+
+do_install() {
+ install -d "${D}${bindir}"
+ cd "${S}/BIN"
+ for bin in * ; do
+ install -m 0755 "$bin" "${D}${bindir}/${PN}-${bin}"
+ done
+ install -d "${D}${datadir}/${PN}"
+ install -m 0644 ${S}/VAX/*.bin "${D}${datadir}/${PN}/"
+}
+
+PACKAGES_DYNAMIC = "simh-*"
+
+populate_packages_prepend() {
+ do_split_packages( d, bb.data.getVar('bindir',d,1), '^simh-(.*)$',
+ output_pattern='simh-%s',
+ description='SIMH for %s',
+ prepend=True, extra_depends='')
+}
+
+PACKAGES += "${PN}-vaxbin"
+
+FILES_${PN}-vaxbin = "${datadir}/${PN}"
diff --git a/packages/slugos-init/files/boot/kexec b/packages/slugos-init/files/boot/kexec
new file mode 100644
index 0000000000..7c02a14f04
--- /dev/null
+++ b/packages/slugos-init/files/boot/kexec
@@ -0,0 +1,202 @@
+#!/bin/sh
+#
+# Loads the specified kernel and kexecs it.
+
+# The access method and path from which to fetch the kernel
+# is specified in "$1" and "$2":
+#
+# flash /boot/zImage-ixp4xxbe
+# nfs spike:/home/slug/vmlinuz
+# wget http://devserv/kernels/vmlinuzbe
+# wget ftp://ftpserv/pub/zImage
+# /dev/sda1 /kernels/zImage-test
+# UUID /kernels/zImage-test
+# tftp server:/pub/kernels/vmlinuz
+#
+# Command-line options for the new kernel are in "$3".
+
+
+# In order to use this, you must exec this script from the /linuxrc file.
+#
+# This sample linuxrc script boots from external disk. The last line of
+# this example (exec /boot/flash) is a fallback; it will not normally be
+# executed unless /boot/kexec is missing or damaged.
+#--------------------
+# #!/bin/sh
+# sleep=8 exec /boot/kexec /dev/sda1 /boot/zImage-ixp4xxbe \
+# "console=ttyS0,115200n8 root=/dev/sda1 rootfstype=ext3 rw init=/linuxrc"
+# exec /boot/flash
+#--------------------
+#
+# This one boots from flash in the normal fashion, except the kernel is
+# loaded using wget. This is common for kernel debugging.
+#--------------------
+# #!/bin/sh
+# exec /boot/kexec wget http://myserver/boot/zImage-ixp4xxbe \
+# "console=ttyS0,115200n8 root=/dev/mtdblock4 rootfstype=jffs2 rw \
+# init=/boot/flash noirqdebug"
+# exec /boot/flash
+#--------------------
+
+
+# Use the standard init path (see /etc/init.d/rcS)
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Wait at least a short while for the disks...
+if [ ! "$sleep" -gt 0 ] ; then
+ sleep=1
+fi
+
+# Load the helper functions
+. /etc/default/functions
+. /etc/default/modulefunctions
+
+# Print a distinctive banner to make it easy to separate the in-flash
+# kernel boot from the kexec'd kernel boot when looking at logs, etc.
+echo '###########################################################'
+echo '###################### KEXEC ######################'
+
+leds boot system
+
+if [ -n "$1" -a -n "$2" ] ; then
+
+ method="$1"
+ shift
+ kpath="$1"
+ shift
+ if [ -n "$1" ] ; then
+ kcmdline="$1"
+ shift
+ fi
+ kexec_image=
+ need_umount=0
+ do_kexec=0
+
+ mount -t proc proc /proc
+
+ case "$method" in
+
+ flash )
+ echo "Loading kexec kernel directly from \"$kpath\"..."
+ kexec_image="$kpath"
+ ;;
+
+ wget )
+ if /boot/network ; then
+ echo "mounting tmpfs partition..."
+ if mount -t tmpfs tmpfs /mnt ; then
+ need_umount=1
+ echo "Loading kexec kernel using wget \"$kpath\"..."
+ wget -P /mnt "$kpath"
+ t=`basename "$kpath"`
+ kexec_image="/mnt/$t"
+ fi
+ fi
+ ;;
+
+ nfs )
+ if /boot/network ; then
+ echo "Loading kexec kernel using nfs \"$kpath\"..."
+ echo "mounting nfs partition..."
+ if mount -o ro,nolock -t nfs `dirname "$kpath"` /mnt ; then
+ need_umount=1
+ t=`basename "$kpath"`
+ kexec_image="/mnt/$t"
+ fi
+ fi
+ ;;
+
+ /dev/* )
+ echo "Loading kexec kernel using disk \"$kpath\"..."
+ loaddiskmods
+ sleep "$sleep"
+ echo "mounting partition \"$method\"..."
+ if mount -o ro "$method" /mnt ; then
+ need_umount=1
+ kexec_image="/mnt/$kpath"
+ fi
+ ;;
+
+ UUID )
+ echo "Loading kexec kernel using disk UUID \"$kpath\"..."
+ loaddiskmods
+ sleep "$sleep"
+ if [ -n "$UUID" ] ; then
+ echo "mounting partition UUID \"$UUID\"..."
+ if mount -o ro -U "$UUID" /mnt ; then
+ need_umount=1
+ kexec_image="/mnt/$kpath"
+ fi
+ fi
+ ;;
+
+ tftp )
+ if /boot/network ; then
+ echo "mounting tmpfs partition..."
+ if mount -t tmpfs tmpfs /mnt ; then
+ need_umount=1
+ t=`basename "$kpath"`
+ kexec_image="/mnt/$t"
+ echo "Loading kexec kernel using tftp \"$kpath\"..."
+ tftp -g -l "$kexec_image" -r "${kpath#*:}" "${kpath%%:*}"
+ fi
+ fi
+ ;;
+
+ * )
+ echo "Unrecognized method: \"$method\""
+ ;;
+
+ esac
+
+ if [ -n "$kexec_image" -a -f "$kexec_image" ] ; then
+ if kexec -l "$kexec_image" ; then
+ do_kexec=1
+ fi
+ else
+ echo "Unable to load \"$kexec_image\""
+ fi
+
+ if [ $do_kexec -eq 1 -a -n "$kcmdline" ] ; then
+ echo "Attempting to mount /sys (sysfs)..."
+ if mount -t sysfs sysfs /sys ; then
+ echo "Setting command line:"
+ echo " \"$kcmdline\""
+ echo "$kcmdline" > /sys/kernel/kexec_cmdline
+ echo "unmounting /sys..."
+ umount /sys
+ else
+ do_kexec=0
+ fi
+ fi
+
+ if [ $need_umount -eq 1 ] ; then
+ echo "unmounting /mnt..."
+ umount /mnt
+ fi
+
+ if [ $do_kexec -eq 1 ] ; then
+ echo "Remounting root as read-only..."
+ mount -o remount,ro /
+ echo "Invoking \"kexec -f -e\" ..."
+ kexec -f -e
+ echo "ERROR!"
+ # We should never return here! At this point, things are not
+ # too well. Remount the root as rw, and fallback.
+ echo "Remounting root as read-write..."
+ mount -o remount,rw /
+ fi
+else
+ echo "Usage: $0 flash|nfs|wget|UUID|/dev/<partition> <path-or-URL> [cmdline]"
+fi
+
+# fallback - use the flash boot
+echo "Falling back to flash boot..."
+leds beep -f 1000 -r 2
+exec /boot/flash
+
+# fallback to the fallback
+leds boot system panic
+exec <>/dev/console >&0 2>&0
+test -x /bin/sh && exec /bin/sh
+exit 1 \ No newline at end of file
diff --git a/packages/slugos-init/files/boot/network b/packages/slugos-init/files/boot/network
index 599250e744..9aa295e43d 100644
--- a/packages/slugos-init/files/boot/network
+++ b/packages/slugos-init/files/boot/network
@@ -8,6 +8,11 @@
# function!
. /etc/default/functions
#
+# We may need to load the network driver modules here
+. /etc/default/modulefunctions
+loadnetmods
+#
+#
# Now all the information for booting should be in the configuration
# file. Config the loopback and network interfaces.
ifconfig lo 127.0.0.1 up
diff --git a/packages/slugos-init/files/functions b/packages/slugos-init/files/functions
index c329171128..18f4009ee7 100644
--- a/packages/slugos-init/files/functions
+++ b/packages/slugos-init/files/functions
@@ -274,6 +274,8 @@ ifup(){
if test "$(config boot)" != static
then
test -n "$hostname" && HOSTNAME="-H $hostname"
+ # Pause a moment in case link negotiation takes a while
+ sleep 3
# The script writes the required shell variable assignments
# to file descriptor 9
eval $(udhcpc -i "$iface" -n -q -r "$ip" $HOSTNAME -s /boot/udhcpc.script 9>&1 >/dev/null)
diff --git a/packages/slugos-init/files/initscripts/umountinitrd.sh b/packages/slugos-init/files/initscripts/umountinitrd.sh
index 2798fe5985..93f05a00f6 100644
--- a/packages/slugos-init/files/initscripts/umountinitrd.sh
+++ b/packages/slugos-init/files/initscripts/umountinitrd.sh
@@ -20,6 +20,8 @@ do
umount /mnt;;
/initrd)# need the device for a remount
ffsdev="$(mtblockdev $ffspart)"
+ [ -n "$ffsdev" ] || \
+ ffsdev="$(mtblockdev rootfs)"
echo "Remounting $ffsdev read-only on /initrd" >&2
if test -n "$ffsdev" -a -b "$ffsdev"
then
diff --git a/packages/slugos-init/files/leds b/packages/slugos-init/files/leds
index f5011f8bad..8043dae682 100644
--- a/packages/slugos-init/files/leds
+++ b/packages/slugos-init/files/leds
@@ -18,8 +18,9 @@ esac
# handle the 'user' setting.
led_user_default(){
case "$(machine)" in
- nslu2) echo -n "cpu-idle";;
- *) echo -n "cpu";;
+ nslu2) echo -n "cpu-idle";;
+ nas100d) echo -n "on";;
+ *) echo -n "cpu";;
esac
}
#
diff --git a/packages/slugos-init/files/modulefunctions b/packages/slugos-init/files/modulefunctions
index dbb9ab51d3..784f6ef662 100644
--- a/packages/slugos-init/files/modulefunctions
+++ b/packages/slugos-init/files/modulefunctions
@@ -21,7 +21,14 @@ loaddiskmods(){
}
loadnetmods(){
- true
+ case "$(machine)" in
+ dsmg600)
+ modprobe via-velocity
+ ;;
+ *)
+ true
+ ;;
+ esac
}
loadmiscmods(){
diff --git a/packages/slugos-init/files/reflash b/packages/slugos-init/files/reflash
index 131f0b67de..22a18bb068 100644
--- a/packages/slugos-init/files/reflash
+++ b/packages/slugos-init/files/reflash
@@ -146,7 +146,7 @@ then
then
imgksize="$size"
imgkoffset="$base"
- elif test "$name" = "$ffspart"
+ elif test "$name" = "$ffspart" -o "$name" = "rootfs"
then
imgffssize="$size"
imgffsoffset="$base"
@@ -320,6 +320,8 @@ ffssize=0
if test -n "$ffsfile"
then
ffsdev="$(mtblockdev $ffspart)"
+ [ -n "$ffsdev" ] || \
+ ffsdev="$(mtblockdev rootfs)"
test -n "$ffsdev" -a -b "$ffsdev" || {
echo "reflash: $ffspart($ffsdev): cannot find $ffspart mtd partition." >&2
echo " check /proc/mtd, either the partition does not exist or there is no" >&2
diff --git a/packages/slugos-init/files/sysconf b/packages/slugos-init/files/sysconf
index d91c184425..84a14af550 100644
--- a/packages/slugos-init/files/sysconf
+++ b/packages/slugos-init/files/sysconf
@@ -8,7 +8,6 @@
# to load these functions!)
test "$1" != sysconf && . /etc/default/functions
-# NSLU2 flash layout is non-standard.
case "$(machine)" in
nslu2)
kpart="Kernel"
@@ -493,6 +492,8 @@ sysconf_test_restore(){
sysconf_save(){
local sysdev ffsdev ffsdir saved list size status
ffsdev="$(mtblockdev $ffspart)"
+ [ -n "$ffsdev" ] || \
+ ffsdev="$(mtblockdev rootfs)"
sysdev="$(mtblockdev $syspart)"
status=1
if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev"
@@ -622,6 +623,8 @@ sysconf_restore(){
test "$1" = auto && sysconf_noninteractive=1
ffsdev="$(mtblockdev $ffspart)"
+ [ -n "$ffsdev" ] || \
+ ffsdev="$(mtblockdev rootfs)"
sysdev="$(mtblockdev $syspart)"
status=1
if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev" &&
diff --git a/packages/slugos-init/files/turnup b/packages/slugos-init/files/turnup
index 556d942e26..761e07829d 100644
--- a/packages/slugos-init/files/turnup
+++ b/packages/slugos-init/files/turnup
@@ -8,9 +8,93 @@
# configuration
# The following variables control which directories in /var end
# up on the rootfs and which end up in a temporary file system.
-INRAM_MEMSTICK="/var/cache /var/lock /var/log /var/run /var/tmp /var/lib/ipkg"
-INRAM_NFS="/var/cache /var/lock /var/run /var/tmp"
-INRAM_DISK=""
+INRAM_MEMSTICK="\
+### SlugOS from-memory-stick boot.
+d root root 0755 /var/backups none
+d root root 0755 /var/volatile/cache none
+l root root 0755 /var/cache /var/volatile/cache
+d root root 0755 /var/lib none
+d root root 2755 /var/local none
+d root root 1777 /var/volatile/lock none
+l root root 1777 /var/lock /var/volatile/lock
+d root root 0755 /var/volatile/log none
+l root root 0755 /var/log /var/volatile/log
+d root root 0755 /var/volatile/run none
+l root root 0755 /var/run /var/volatile/run
+d root root 0755 /var/spool none
+d root root 1777 /var/volatile/tmp none
+l root root 1777 /var/tmp /var/volatile/tmp
+d root root 0755 /var/lock/subsys none
+d root root 0755 /var/lib/dropbear none
+d root root 0755 /var/lib/misc none
+f root root 0664 /var/log/wtmp none
+f root root 0664 /var/run/utmp none"
+
+INRAM_NFS="\
+### SlugOS from-NFS boot.
+d root root 0755 /var/backups none
+d root root 0755 /var/volatile/cache none
+l root root 0755 /var/cache /var/volatile/cache
+d root root 0755 /var/lib none
+d root root 2755 /var/local none
+d root root 1777 /var/volatile/lock none
+l root root 1777 /var/lock /var/volatile/lock
+d root root 0755 /var/log none
+d root root 0755 /var/volatile/run none
+l root root 0755 /var/run /var/volatile/run
+d root root 0755 /var/spool none
+d root root 1777 /var/volatile/tmp none
+l root root 1777 /var/tmp /var/volatile/tmp
+d root root 0755 /var/lock/subsys none
+d root root 0755 /var/lib/dropbear none
+d root root 0755 /var/lib/misc none
+d root root 0755 /var/lib/ipkg none
+f root root 0664 /var/log/wtmp none
+f root root 0664 /var/run/utmp none"
+
+INRAM_DISK="\
+### SlugOS from-disk boot.
+d root root 0755 /var/backups none
+d root root 0755 /var/cache none
+d root root 0755 /var/lib none
+d root root 2755 /var/local none
+d root root 1777 /var/lock none
+d root root 0755 /var/log none
+d root root 0755 /var/run none
+d root root 0755 /var/spool none
+d root root 1777 /var/tmp none
+d root root 0755 /var/lock/subsys none
+d root root 0755 /var/lib/dropbear none
+d root root 0755 /var/lib/misc none
+d root root 0755 /var/lib/ipkg none
+f root root 0664 /var/log/wtmp none
+f root root 0664 /var/run/utmp none"
+
+INRAM_HEADER="\
+# This configuration file lists filesystem objects that should get verified
+# during startup and be created if missing.
+#
+# Every line must either be a comment starting with #
+# or a definition of format:
+# <type> <owner> <group> <mode> <path> <linksource>
+# where the items are separated by whitespace !
+#
+# <type> : d|f|l : (d)irectory|(f)ile|(l)ink
+#
+# A linking example:
+# l root root 0777 /var/test /tmp/testfile
+# f root root 0644 /var/test none
+#
+# Understanding links:
+# When populate-volatile is to verify/create a directory or file, it will first
+# check it's existence. If a link is found to exist in the place of the target,
+# the path of the target is replaced with the target the link points to.
+# Thus, if a link is in the place to be verified, the object will be created
+# in the place the link points to instead.
+# This explains the order of \"link before object\" as in the example above, where
+# a link will be created at /var/test pointing to /tmp/testfile and due to this
+# link the file defined as /var/test will actually be created as /tmp/testfile.
+#"
#
# force: override certain checks
@@ -75,7 +159,7 @@ fsoptions() {
# get_flash <directory> {mount options}
# mount the flash device, writeable, on the given directory
get_flash() {
- local ffsdir ffsdev
+ local ffsdir ffspart ffsdev
ffsdir="$1"
shift
@@ -85,9 +169,12 @@ get_flash() {
}
case "$(machine)" in
- nslu2) ffsdev="$(mtblockdev Flashdisk)";;
- *) ffsdev="$(mtblockdev filesystem)";;
+ nslu2) ffspart="Flashdisk";;
+ *) ffspart="filesystem";;
esac
+ ffsdev="$(mtblockdev $ffspart)"
+ [ -n "$ffsdev" ] || \
+ ffsdev="$(mtblockdev rootfs)"
umountflash "$ffsdev" &&
mountflash "$ffsdev" "$ffsdir" "$@"
}
@@ -153,7 +240,7 @@ copy_rootfs() {
# /var/*
echo "turnup: copying root file system" >&2
( cd "$1"
- find . -mount -print |
+ find . -xdev -print |
sed '\@^./dev/@d;\@^./boot/@d;\@^./boot$@d;\@^./linuxrc@d;\@^./var/@d' |
cpio -p -d -m -u "$2"
) || {
@@ -209,7 +296,6 @@ setup_bootdev() {
# Removes the /var tmpfs entry from /etc/fstab.
# Creates links from /var into /media/ram for NFS and Memstick.
setup_var() {
- local ram_targets directory
test -n "$1" -a -d "$1"/var || {
echo "turnup: setup_var($1,$2): expected a directory" >&2
@@ -220,35 +306,30 @@ setup_var() {
*) echo "turnup: setup_var($1,$2): expected 'disk', 'nfs' or 'memstick'" >&2
return 1;;
esac
- #
- # populate /var, there is a shell script to do this, but it uses
- # absolute path names
- chroot "$1" /bin/busybox sh /etc/init.d/populate-volatile.sh || {
- echo "turnup: /var: could not populate directory" >&2
- return 1
- }
+ # populate /var. We just need to create the /var/volatile mount
+ # point, the populate-volatile script does the work at boot time.
+ echo "turnup: ensuring /var/volatile mountpoint exists"
+ test -d "$1"/var/volatile || mkdir "$1"/var/volatile
+
+ # we need to put in place the correct configuration file for
+ # the populate-volatile script to use at boot time. The config
+ # file is already in place for the flash boot, and it's the same
+ # file for the ram boot.
case "$2" in
- disk) ram_targets="$INRAM_DISK";;
- nfs) ram_targets="$INRAM_NFS";;
- memstick)
- ram_targets="$INRAM_MEMSTICK";;
+ disk) echo "$INRAM_HEADER" > "$1"/etc/default/volatiles/00_core
+ echo "$INRAM_DISK" >>"$1"/etc/default/volatiles/00_core;;
+ nfs) echo "$INRAM_HEADER" > "$1"/etc/default/volatiles/00_core
+ echo "$INRAM_NFS" >>"$1"/etc/default/volatiles/00_core;;
+ memstick) echo "$INRAM_HEADER" > "$1"/etc/default/volatiles/00_core
+ echo "$INRAM_MEMSTICK" >>"$1"/etc/default/volatiles/00_core;;
esac
- for directory in $ram_targets
- do
- rm -rf "$1/$directory"
- ln -s "/media/ram/$directory" "$1/$directory"
- done
- # the startup link is left for the moment, this seems safer
- #rm "$1"/etc/rc?.d/[KS]??populate-var.sh
- # remove the /var tmpfs entry from the new /etc/fstab
+ # remove the /var tmpfs entry from the new /etc/fstab, if it is
+ # present in the first place.
sed -i '\@[ ]/var[ ][ ]*tmpfs[ ]@d' "$1"/etc/fstab
- echo "turnup: tmpfs will no longer be mounted on /var" >&2
+ echo "turnup: ensuring tmpfs will not be mounted on /var" >&2
#
- # Previous versions of turnup removed populate-var.sh from the
- # startup links, this one doesn't, so /var can be made back into
- # a tmpfs just by a change to /etc/fstab.
return 0
}
diff --git a/packages/slugos-init/slugos-init_0.10.bb b/packages/slugos-init/slugos-init_0.10.bb
index 55fea3e120..9748f13ec9 100644
--- a/packages/slugos-init/slugos-init_0.10.bb
+++ b/packages/slugos-init/slugos-init_0.10.bb
@@ -4,12 +4,13 @@ PRIORITY = "required"
LICENSE = "GPL"
DEPENDS = "base-files devio"
RDEPENDS = "busybox devio"
-PR = "r79"
+PR = "r87"
SRC_URI = "file://boot/flash \
file://boot/disk \
file://boot/nfs \
file://boot/ram \
+ file://boot/kexec \
file://boot/network \
file://boot/udhcpc.script \
file://initscripts/fixfstab \
@@ -35,7 +36,7 @@ SBINPROGS = ""
USRSBINPROGS = ""
CPROGS = "${USRSBINPROGS} ${SBINPROGS}"
SCRIPTS = "turnup reflash leds sysconf"
-BOOTSCRIPTS = "flash disk nfs ram network udhcpc.script"
+BOOTSCRIPTS = "flash disk nfs ram kexec network udhcpc.script"
INITSCRIPTS = "syslog.buffer syslog.file syslog.network zleds\
leds_startup rmrecovery sysconfsetup umountinitrd.sh\
fixfstab loadmodules.sh"
diff --git a/packages/snes9x/snes9x-sdl-qpe_1.39.bb b/packages/snes9x/snes9x-sdl-qpe_1.39.bb
index 4e8a294d2b..adf49650d9 100644
--- a/packages/snes9x/snes9x-sdl-qpe_1.39.bb
+++ b/packages/snes9x/snes9x-sdl-qpe_1.39.bb
@@ -3,7 +3,7 @@ SECTION = "opie/games"
PRIORITY = "optional"
DEPENDS = "libsdl-qpe"
LICENSE = "snes9x"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://www.vanille.de/mirror/snes9x-sdl-${PV}.tar.bz2 \
file://compile.patch;patch=1"
@@ -13,10 +13,12 @@ FILESPATH = "${FILE_DIRNAME}/${PN}-${PV}:${FILE_DIRNAME}/snes9x-sdl-${PV}:${FILE
inherit qmake-base
+QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}'
+
do_compile() {
oe_runmake CC="${CC}" CCC="${CXX}" \
INCLUDES="-I${STAGING_INCDIR} `sdl-config --cflags`" \
- LDLIBS="`sdl-config --libs` -L${OE_QMAKE_LIBDIR_QT} -Wl,-rpath-link,${STAGING_LIBDIR} -lqpe -lqte"
+ LDLIBS="`sdl-config --libs` -L${OE_QMAKE_LIBDIR_QT} -Wl,-rpath-link,${STAGING_LIBDIR} -lqpe -l${QT_LIBRARY}"
}
do_install() {
diff --git a/packages/snes9x/snes9x-sdl/gcc-4.1.patch b/packages/snes9x/snes9x-sdl/gcc-4.1.patch
new file mode 100644
index 0000000000..a63c0519d3
--- /dev/null
+++ b/packages/snes9x/snes9x-sdl/gcc-4.1.patch
@@ -0,0 +1,28 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- snes9x-sdl-1.39/dsp1.h~gcc-4.1
++++ snes9x-sdl-1.39/dsp1.h
+@@ -233,8 +233,8 @@
+ void S9xResetDSP1 ();
+ uint8 S9xGetDSP (uint16 Address);
+ void S9xSetDSP (uint8 Byte, uint16 Address);
+-END_EXTERN_C
+
+ extern struct SDSP1 DSP1;
++END_EXTERN_C
+
+ #endif
+--- snes9x-sdl-1.39/unix/unix.cpp~gcc-4.1
++++ snes9x-sdl-1.39/unix/unix.cpp
+@@ -1046,7 +1046,7 @@
+ {
+ }
+
+-static uint8 Buf[MAX_BUFFER_SIZE];
++static uint8 Buf[MAX_BUFFER_SIZE] __attribute__((aligned(4)));
+
+ #define FIXED_POINT 0x10000
+ #define FIXED_POINT_SHIFT 16
diff --git a/packages/snes9x/snes9x-sdl_1.39.bb b/packages/snes9x/snes9x-sdl_1.39.bb
index ce6f5fa265..ea4eb44666 100644
--- a/packages/snes9x/snes9x-sdl_1.39.bb
+++ b/packages/snes9x/snes9x-sdl_1.39.bb
@@ -3,10 +3,11 @@ SECTION = "games"
PRIORITY = "optional"
DEPENDS = "virtual/libsdl zlib"
LICENSE = "snes9x"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://www.vanille.de/mirror/snes9x-sdl-${PV}.tar.bz2 \
- file://compile.patch;patch=1"
+ file://compile.patch;patch=1 \
+ file://gcc-4.1.patch;patch=1"
S = "${WORKDIR}/snes9x-sdl-${PV}"
do_compile() {
diff --git a/packages/sox/sox-native_13.0.0.bb b/packages/sox/sox-native_13.0.0.bb
new file mode 100644
index 0000000000..9b4dd29433
--- /dev/null
+++ b/packages/sox/sox-native_13.0.0.bb
@@ -0,0 +1,19 @@
+include sox_${PV}.bb
+
+S = "${WORKDIR}/sox-${PV}"
+
+inherit native
+
+do_patch() {
+ true
+}
+
+do_stage() {
+ make bindir="${STAGING_BINDIR}" libdir="${STAGING_LIBDIR}" mandir="${STAGING_DIR}/${HOST_SYS}/man" includedir="${STAGING_INCDIR}" install
+ rm ${STAGING_BINDIR}/rec
+ ln -s ${STAGING_BINDIR}/play ${STAGING_BINDIR}/rec
+}
+
+do_install() {
+ true
+}
diff --git a/packages/sox/sox/src-Makefile.am.patch b/packages/sox/sox/src-Makefile.am.patch
new file mode 100644
index 0000000000..b5ffd398ae
--- /dev/null
+++ b/packages/sox/sox/src-Makefile.am.patch
@@ -0,0 +1,11 @@
+--- sox-13.0.0.old/src/Makefile.am 2007-03-18 22:19:52.296535098 -0400
++++ sox-13.0.0/src/Makefile.am 2007-03-18 22:21:48.968947731 -0400
+@@ -42,7 +42,7 @@
+ $(MAKE) -C libgsm
+
+ play rec: sox$(EXEEXT)
+- ./sox --help > /dev/null
++# ./sox --help > /dev/null
+ test -f .libs/lt-sox && ( $(RM) $@ && $(LN_S) .libs/lt-sox $@ ) || $(LN_S) sox$(EXEEXT) $@
+
+ install-exec-hook:
diff --git a/packages/sox/sox_12.17.5.bb b/packages/sox/sox_12.17.5.bb
index 6c70eaad7b..a3cd84e726 100644
--- a/packages/sox/sox_12.17.5.bb
+++ b/packages/sox/sox_12.17.5.bb
@@ -4,7 +4,7 @@
DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
It converts audio files among various standard audio file formats \
-and can apply different effects and filters to the audio data."
+and can apply different effects and filters to the audio data."
LICENSE="GPL"
HOMEPAGE="http://sox.sourceforge.net"
diff --git a/packages/sox/sox_13.0.0.bb b/packages/sox/sox_13.0.0.bb
new file mode 100644
index 0000000000..f5c554799d
--- /dev/null
+++ b/packages/sox/sox_13.0.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
+It converts audio files among various standard audio file formats \
+and can apply different effects and filters to the audio data."
+HOMEPAGE = "http://sox.sourceforge.net"
+SECTION = "audio"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz \
+ file://src-Makefile.am.patch;patch=1"
+
+inherit autotools
+
+do_install() {
+ make bindir="${D}${bindir}" libdir="${D}${libdir}" mandir="${D}/${mandir}" includedir="${D}${includedir}" install
+ rm ${D}${bindir}/rec
+ ln -s /usr/bin/play ${D}${bindir}/rec
+}
diff --git a/packages/spandsp/.mtn2git_empty b/packages/spandsp/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/spandsp/.mtn2git_empty
diff --git a/packages/spandsp/spandsp_0.0.2+0.0.3pre27.bb b/packages/spandsp/spandsp_0.0.2+0.0.3pre27.bb
new file mode 100644
index 0000000000..2c0ffa0845
--- /dev/null
+++ b/packages/spandsp/spandsp_0.0.2+0.0.3pre27.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "A library of many DSP functions for telephony."
+HOMEPAGE = "http://www.soft-switch.org"
+DEPENDS = "tiff libxml2"
+SECTION = "voip"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.soft-switch.org/downloads/snapshots/spandsp/spandsp-20070123.tar.gz"
+S = "${WORKDIR}/${PN}-0.0.3"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
+
+do_stage () {
+ autotools_stage_all
+} \ No newline at end of file
diff --git a/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb b/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb
new file mode 100644
index 0000000000..97740c0aaf
--- /dev/null
+++ b/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "A library of many DSP functions for telephony."
+HOMEPAGE = "http://www.soft-switch.org"
+DEPENDS = "tiff libxml2"
+SECTION = "voip"
+LICENSE = "GPL"
+
+PR = "r0"
+
+SRC_URI = "http://www.soft-switch.org/downloads/spandsp/spandsp-0.0.4pre3.tgz"
+
+S = "${WORKDIR}/spandsp-0.0.4"
+
+inherit autotools pkgconfig
+
+PARALLEL_MAKE = ""
+
+# *cough*
+do_configure_append() {
+ rm config.log
+}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/spandsp/spandsp_0.0.3.bb b/packages/spandsp/spandsp_0.0.3.bb
new file mode 100644
index 0000000000..26702f998b
--- /dev/null
+++ b/packages/spandsp/spandsp_0.0.3.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A library of many DSP functions for telephony."
+HOMEPAGE = "http://www.soft-switch.org"
+DEPENDS = "tiff libxml2"
+SECTION = "voip"
+LICENSE = "GPL"
+PV = "0.0.3"
+PSUBV = "pre27"
+PR = "r0"
+
+SRC_URI = "http://www.soft-switch.org/downloads/snapshots/spandsp/spandsp-20070123.tar.gz"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/speex/speex_1.1.12+1.2beta1.bb b/packages/speex/speex_1.1.12+1.2beta1.bb
index d0f33bf681..01bd93909e 100644
--- a/packages/speex/speex_1.1.12+1.2beta1.bb
+++ b/packages/speex/speex_1.1.12+1.2beta1.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "BSD"
HOMEPAGE = "http://www.speex.org"
DEPENDS = "libogg"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-1.2beta1.tar.gz"
S = "${WORKDIR}/${PN}-1.2beta1"
@@ -22,6 +22,7 @@ inherit autotools pkgconfig
EXTRA_OECONF_append_openmn = " --enable-arm5e-asm --enable-fixed-point"
EXTRA_OECONF_append_amsdelta = " --enable-arm4-asm --enable-fixed-point"
EXTRA_OECONF_append_arm = " --enable-fixed-point "
+EXTRA_OECONF_append_dht-walnut = " --enable-fixed-point "
do_configure_append() {
sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile
diff --git a/packages/sphyrna/.mtn2git_empty b/packages/sphyrna/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sphyrna/.mtn2git_empty
diff --git a/packages/sphyrna/sphyrna_svn.bb b/packages/sphyrna/sphyrna_svn.bb
new file mode 100644
index 0000000000..048d001905
--- /dev/null
+++ b/packages/sphyrna/sphyrna_svn.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Sphyrna - Hammerhead Reverse Engineering"
+HOMEPAGE = "http://projects.linuxtogo.org/projects/sphyrna"
+LICENSE = "GPLv2"
+DEPENDS = "readline"
+PV = "0.0+svn${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "svn://projects.linuxtogo.org/svn;module=sphyrna"
+
+S = "${WORKDIR}/${PN}"
+
+inherit autotools
+
+PACKAGES = "sphyrna-console sphyrna-python"
+
+FILES_sphyrna-console = "${bindir}/hhconsole"
+FILES_sphyrna-python = "${bindir}/decode.py ${libdir}/python2.4/site-packages/sphyrna/*"
+
+PACKAGE_ARCH_sphyrna-python = "all"
+RDEPENDS_sphyrna-python = "python-core python-re"
diff --git a/packages/sqlite/sqlite3-3.3.17/.mtn2git_empty b/packages/sqlite/sqlite3-3.3.17/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sqlite/sqlite3-3.3.17/.mtn2git_empty
diff --git a/packages/sqlite/sqlite3-3.3.17/libtool.patch b/packages/sqlite/sqlite3-3.3.17/libtool.patch
new file mode 100644
index 0000000000..ccf9993ed2
--- /dev/null
+++ b/packages/sqlite/sqlite3-3.3.17/libtool.patch
@@ -0,0 +1,25 @@
+Index: sqlite-3.2.1/Makefile.in
+===================================================================
+--- sqlite-3.2.1.orig/Makefile.in 2005-03-23 17:09:39.000000000 +0100
++++ sqlite-3.2.1/Makefile.in 2005-04-25 23:11:20.000000000 +0200
+@@ -15,7 +15,10 @@
+ # The toplevel directory of the source tree. This is the directory
+ # that contains this "Makefile.in" and the "configure.in" script.
+ #
+-TOP = @srcdir@
++TOP = $(srcdir)
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
++top_builddir = .
+
+ # C Compiler and options for use in building executables that
+ # will run on the platform that is doing the build.
+@@ -96,7 +99,7 @@
+ exec_prefix = @exec_prefix@
+ libdir = @libdir@
+ INSTALL = @INSTALL@
+-LIBTOOL = ./libtool
++LIBTOOL = @LIBTOOL@
+ ALLOWRELEASE = @ALLOWRELEASE@
+
+ # libtool compile/link/install
diff --git a/packages/sqlite/sqlite3.inc b/packages/sqlite/sqlite3.inc
index 01290c2e41..68cc3e1c33 100644
--- a/packages/sqlite/sqlite3.inc
+++ b/packages/sqlite/sqlite3.inc
@@ -5,9 +5,8 @@ DEPENDS = "readline ncurses"
LICENSE = "PD"
SRC_URI = "http://www.sqlite.org/sqlite-${PV}.tar.gz \
- file://cross-compile.patch;patch=1 \
- file://libtool.patch;patch=1 \
- file://ldflags.patch;patch=1"
+ file://libtool.patch;patch=1"
+
S = "${WORKDIR}/sqlite-${PV}"
inherit autotools pkgconfig
diff --git a/packages/sqlite/sqlite3_3.3.12.bb b/packages/sqlite/sqlite3_3.3.12.bb
index 59c13ee01f..3d642f0ffc 100644
--- a/packages/sqlite/sqlite3_3.3.12.bb
+++ b/packages/sqlite/sqlite3_3.3.12.bb
@@ -1,2 +1,3 @@
require sqlite3.inc
-PR = "r0"
+PR = "r1"
+SRC_URI += "file://cross-compile.patch;patch=1 file://ldflags.patch;patch=1"
diff --git a/packages/sqlite/sqlite3_3.3.13.bb b/packages/sqlite/sqlite3_3.3.13.bb
index 59c13ee01f..3d642f0ffc 100644
--- a/packages/sqlite/sqlite3_3.3.13.bb
+++ b/packages/sqlite/sqlite3_3.3.13.bb
@@ -1,2 +1,3 @@
require sqlite3.inc
-PR = "r0"
+PR = "r1"
+SRC_URI += "file://cross-compile.patch;patch=1 file://ldflags.patch;patch=1"
diff --git a/packages/sqlite/sqlite3_3.3.17.bb b/packages/sqlite/sqlite3_3.3.17.bb
new file mode 100644
index 0000000000..cee00874bd
--- /dev/null
+++ b/packages/sqlite/sqlite3_3.3.17.bb
@@ -0,0 +1,3 @@
+require sqlite3.inc
+PR = "r0"
+
diff --git a/packages/starling/starling_0.1.bb b/packages/starling/starling_0.1.bb
index 2dc8da8bc1..fab79342ac 100644
--- a/packages/starling/starling_0.1.bb
+++ b/packages/starling/starling_0.1.bb
@@ -6,19 +6,16 @@ PR = "r1"
inherit gpe autotools
DESCRIPTION = "Starling audio player for GPE"
-DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins-good gst-plugins-bad esound"
+DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins-good gst-plugins-bad esound sqlite3 libsoup"
RDEPENDS = "esd \
- gst-plugins \
- gst-plugin-audio \
gst-plugin-audioconvert \
- gst-plugin-audiofile \
gst-plugin-esd \
gst-plugin-typefindfunctions \
gst-plugin-decodebin \
gst-plugin-volume"
RRECOMMENDS = "gst-plugin-mad \
- gst-plugin-tagedit \
+ gst-plugin-modplug \
gst-plugin-ivorbis \
gst-plugin-tcp"
diff --git a/packages/starling/starling_0.2.bb b/packages/starling/starling_0.2.bb
new file mode 100644
index 0000000000..6080491cb2
--- /dev/null
+++ b/packages/starling/starling_0.2.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Starling audio player for GPE"
+SECTION = "gpe/multimedia"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins-good gst-plugins-bad esound sqlite3 libsoup"
+
+RDEPENDS = "esd \
+ gst-plugin-audioconvert \
+ gst-plugin-esd \
+ gst-plugin-typefindfunctions \
+ gst-plugin-decodebin \
+ gst-plugin-volume"
+RRECOMMENDS = "gst-plugin-mad \
+ gst-plugin-modplug \
+ gst-plugin-ivorbis \
+ gst-plugin-tcp"
+
+GPE_TARBALL_SUFFIX = "bz2"
+
+inherit gpe autotools
+
diff --git a/packages/starling/starling_svn.bb b/packages/starling/starling_svn.bb
new file mode 100644
index 0000000000..67d98dbd60
--- /dev/null
+++ b/packages/starling/starling_svn.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Starling audio player for GPE"
+SECTION = "gpe/multimedia"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins-good gst-plugins-bad esound sqlite3 libsoup"
+RDEPENDS = "esd \
+ gst-plugin-audioconvert \
+ gst-plugin-esd \
+ gst-plugin-typefindfunctions \
+ gst-plugin-decodebin \
+ gst-plugin-volume"
+RRECOMMENDS = "gst-plugin-mad \
+ gst-plugin-modplug \
+ gst-plugin-ivorbis \
+ gst-plugin-tcp"
+
+PV = "0.2+svn${SRCDATE}"
+
+inherit gpe autotools
+
+SRC_URI = "${GPE_EXTRA_SVN}"
+
+S = "${WORKDIR}/${PN}"
diff --git a/packages/strace/strace/strace-undef-syscall.patch b/packages/strace/strace/strace-undef-syscall.patch
new file mode 100644
index 0000000000..95166ea18a
--- /dev/null
+++ b/packages/strace/strace/strace-undef-syscall.patch
@@ -0,0 +1,66 @@
+Origin is http://buildroot.uclibc.org/cgi-bin/viewcvs.cgi/*checkout*/trunk/buildroot/package/strace/strace-undef-syscall.patch?rev=17767
+
+This gets applied to fix build errors with uclibc on ARM EABI
+
+--- strace-4.5.12/linux/syscallent.h.orig 2005-08-09 01:48:54.000000000 -0600
++++ strace-4.5.12/linux/syscallent.h 2005-08-09 01:50:23.000000000 -0600
+@@ -298,7 +298,11 @@
+ { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */
+ { 5, TF, sys_fadvise64, "fadvise64" }, /* 250 */
+ { 5, 0, printargs, "SYS_251" }, /* 251 */
+- { 1, TP, sys_exit, "exit_group", __NR_exit_group }, /* 252 */
++ { 1, TP, sys_exit, "exit_group"
++#ifdef __NR_exit_group
++ , __NR_exit_group
++#endif
++ }, /* 252 */
+ { 4, 0, printargs, "lookup_dcookie"}, /* 253 */
+ { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */
+ { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */
+--- strace-4.5.15.orig/linux/syscallent.h 2007-02-04 19:03:48.000000000 +0100
++++ strace-4.5.15/linux/syscallent.h 2007-02-04 19:11:04.000000000 +0100
+@@ -130,7 +130,10 @@
+ { 2, TF, sys_statfs, "statfs" }, /* 99 */
+ { 2, TD, sys_fstatfs, "fstatfs" }, /* 100 */
+ { 3, 0, sys_ioperm, "ioperm" }, /* 101 */
+- { 2, TD, sys_socketcall, "socketcall", SYS_socketcall }, /* 102 */
++ { 2, TD, sys_socketcall, "socketcall",
++#ifdef __NR_socketcall
++ SYS_socketcall }, /* 102 */
++#endif
+ { 3, 0, sys_syslog, "syslog" }, /* 103 */
+ { 3, 0, sys_setitimer, "setitimer" }, /* 104 */
+ { 2, 0, sys_getitimer, "getitimer" }, /* 105 */
+@@ -145,7 +148,10 @@
+ { 4, TP, sys_wait4, "wait4", SYS_wait4 }, /* 114 */
+ { 1, 0, sys_swapoff, "swapoff" }, /* 115 */
+ { 1, 0, sys_sysinfo, "sysinfo" }, /* 116 */
+- { 6, 0, sys_ipc, "ipc", SYS_ipc }, /* 117 */
++ { 6, 0, sys_ipc, "ipc",
++#ifdef __NR_ipc
++ SYS_ipc }, /* 117 */
++#endif
+ { 1, TD, sys_fsync, "fsync" }, /* 118 */
+ { 1, TS, sys_sigreturn, "sigreturn" }, /* 119 */
+ { 5, TP, sys_clone, "clone", SYS_clone }, /* 120 */
+--- strace-4.5.15.orig/syscall.c 2007-02-04 19:03:48.000000000 +0100
++++ strace-4.5.15/syscall.c 2007-02-04 19:07:26.000000000 +0100
+@@ -2404,14 +2404,18 @@
+ switch (known_scno(tcp)) {
+ #ifdef LINUX
+ #if !defined (ALPHA) && !defined(SPARC) && !defined(SPARC64) && !defined(MIPS) && !defined(HPPA)
++#ifdef __NR_socketcall
+ case SYS_socketcall:
+ decode_subcall(tcp, SYS_socket_subcall,
+ SYS_socket_nsubcalls, deref_style);
+ break;
++#endif
++#ifdef __NR_ipc
+ case SYS_ipc:
+ decode_subcall(tcp, SYS_ipc_subcall,
+ SYS_ipc_nsubcalls, shift_style);
+ break;
++#endif
+ #endif /* !ALPHA && !MIPS && !SPARC && !SPARC64 && !HPPA */
+ #if defined (SPARC) || defined (SPARC64)
+ case SYS_socketcall:
diff --git a/packages/strace/strace_4.5.14.bb b/packages/strace/strace_4.5.14.bb
index b301d0100b..50baef86dc 100644
--- a/packages/strace/strace_4.5.14.bb
+++ b/packages/strace/strace_4.5.14.bb
@@ -9,7 +9,8 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \
file://drop-ctl-proc.patch;patch=1 \
file://sh-arch-update.patch;patch=1 \
file://sh-syscall-update.patch;patch=1 \
- file://strace-fix-arm-bad-syscall.patch;patch=1"
+ file://strace-fix-arm-bad-syscall.patch;patch=1 \
+ file://strace-undef-syscall.patch;patch=1 "
inherit autotools
diff --git a/packages/subversion/files/neon-detection.patch b/packages/subversion/files/neon-detection.patch
new file mode 100644
index 0000000000..b567d5c050
--- /dev/null
+++ b/packages/subversion/files/neon-detection.patch
@@ -0,0 +1,36 @@
+diff --git a/build/ac-macros/neon.m4 b/build/ac-macros/neon.m4
+index 9fcf859..8d964f3 100644
+--- a/build/ac-macros/neon.m4
++++ b/build/ac-macros/neon.m4
+@@ -38,7 +38,7 @@ AC_DEFUN(SVN_LIB_NEON,
+ if test "$withval" = "yes" ; then
+ AC_MSG_ERROR([--with-neon requires an argument.])
+ else
+- neon_config="$withval/bin/neon-config"
++ neon_config="env env PKG_CONFIG_PATH=${withval}:${PKG_CONFIG_PATH} pkg-config neon"
+ fi
+
+ SVN_NEON_CONFIG()
+@@ -117,10 +117,10 @@ dnl SVN_NEON_CONFIG()
+ dnl neon-config found, gather relevant information from it
+ AC_DEFUN(SVN_NEON_CONFIG,
+ [
+- if test -f "$neon_config"; then
+- if test "$neon_config" != ""; then
++ if true; then
++ if true; then
+ AC_MSG_CHECKING([neon library version])
+- NEON_VERSION=`$neon_config --version | sed -e 's/^neon //'`
++ NEON_VERSION=`$neon_config --modversion | sed -e 's/^neon //'`
+ AC_MSG_RESULT([$NEON_VERSION])
+
+ if test -n "`echo \"$NEON_VERSION\" | grep '^0\.25\.'`" ; then
+@@ -133,7 +133,7 @@ AC_DEFUN(SVN_NEON_CONFIG,
+ test "$svn_allowed_neon" = "any"; then
+ svn_allowed_neon_on_system="yes"
+ SVN_NEON_INCLUDES=[`$neon_config --cflags | sed -e 's/-D[^ ]*//g'`]
+- NEON_LIBS=`$neon_config --la-file`
++ NEON_LIBS=`$neon_config --libs`
+ CFLAGS=["$CFLAGS `$neon_config --cflags | sed -e 's/-I[^ ]*//g'`"]
+ svn_lib_neon="yes"
+ break
diff --git a/packages/subversion/subversion_1.3.1.bb b/packages/subversion/subversion_1.3.1.bb
index e49ebb5549..775fed148f 100644
--- a/packages/subversion/subversion_1.3.1.bb
+++ b/packages/subversion/subversion_1.3.1.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "The Subversion (svn) client"
SECTION = "console/network"
DEPENDS = "apr-util-0.9.12 neon"
-LICENSE = "Apache/BSD"
+LICENSE = "Apache BSD"
HOMEPAGE = "http://subversion.tigris.org"
PR = "r1"
diff --git a/packages/subversion/subversion_1.4.0.bb b/packages/subversion/subversion_1.4.0.bb
index 3c65d1d0a8..59f42b8c66 100644
--- a/packages/subversion/subversion_1.4.0.bb
+++ b/packages/subversion/subversion_1.4.0.bb
@@ -1,14 +1,16 @@
DESCRIPTION = "The Subversion (svn) client"
SECTION = "console/network"
DEPENDS = "apr-util neon"
-LICENSE = "Apache/BSD"
+RDEPENDS = "neon"
+LICENSE = "Apache BSD"
HOMEPAGE = "http://subversion.tigris.org"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \
- file://disable-revision-install.patch;patch=1"
+ file://disable-revision-install.patch;patch=1 \
+ file://neon-detection.patch;patch=1"
-EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${BUILD_SYS} \
+EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${TARGET_SYS} \
--without-berkeley-db --without-apxs --without-apache \
--without-swig --with-apr=${STAGING_BINDIR_CROSS} \
--with-apr-util=${STAGING_BINDIR_CROSS}"
@@ -21,5 +23,6 @@ export LDFLAGS += " -L${STAGING_LIBDIR} "
do_configure() {
gnu-configize
libtoolize --force
+ aclocal -I build/ -I build/ac-macros/ && autoconf
oe_runconf
}
diff --git a/packages/subversion/subversion_1.4.3.bb b/packages/subversion/subversion_1.4.3.bb
new file mode 100644
index 0000000000..9674329f6c
--- /dev/null
+++ b/packages/subversion/subversion_1.4.3.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "The Subversion (svn) client"
+SECTION = "console/network"
+DEPENDS = "apr-util neon"
+RDEPENDS = "neon"
+LICENSE = "Apache BSD"
+HOMEPAGE = "http://subversion.tigris.org"
+
+PR = "r1"
+
+SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \
+ file://disable-revision-install.patch;patch=1 \
+ file://neon-detection.patch;patch=1"
+
+EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${TARGET_SYS} \
+ --without-berkeley-db --without-apxs --without-apache \
+ --without-swig --with-apr=${STAGING_BINDIR_CROSS} \
+ --with-apr-util=${STAGING_BINDIR_CROSS}"
+
+
+inherit autotools
+
+export LDFLAGS += " -L${STAGING_LIBDIR} "
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ aclocal -I build/ -I build/ac-macros/ && autoconf
+ oe_runconf
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/sudo/files/autofoo.patch b/packages/sudo/files/autofoo.patch
index ddfd98b452..4624979bba 100644
--- a/packages/sudo/files/autofoo.patch
+++ b/packages/sudo/files/autofoo.patch
@@ -1,12 +1,16 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: sudo-1.6.8p6/configure.in
+Index: sudo-1.6.8p12/configure.in
===================================================================
---- sudo-1.6.8p6.orig/configure.in 2004-11-25 12:31:20.000000000 -0500
-+++ sudo-1.6.8p6/configure.in 2005-01-21 19:09:27.248233336 -0500
+--- sudo-1.6.8p12.orig/configure.in 2004-11-26 04:31:20.000000000 +1100
++++ sudo-1.6.8p12/configure.in 2007-05-16 16:45:20.000000000 +1000
+@@ -1670,7 +1670,7 @@
+ SUDO_TYPE_INO_T
+ SUDO_FULL_VOID
+ SUDO_UID_T_LEN
+-SUDO_LONG_LONG
++SUDO_TYPE_LONG_LONG
+ SUDO_SOCK_SA_LEN
+ dnl
+ dnl only set RETSIGTYPE if it is not set already
@@ -1700,12 +1700,14 @@
if test -z "$BROKEN_GETCWD"; then
AC_REPLACE_FUNCS(getcwd)
@@ -23,15 +27,15 @@ Index: sudo-1.6.8p6/configure.in
+
+AC_CHECK_FUNCS(lsearch, , [AC_CHECK_LIB(compat, lsearch, [AC_CHECK_HEADER(search.h, [AC_DEFINE(HAVE_LSEARCH) LIBS="$LIBS -lcompat"], [AC_LIBOBJ([lsearch])])], [AC_LIBOBJ([lsearch])])])
+
-+AC_CHECK_FUNCS(utime, [SUDO_FUNC_UTIME_POSIX], [AC_LIBOBJ([utime])])
++AC_CHECK_FUNCS(utimes)
+SUDO_FUNC_FNMATCH([AC_DEFINE([HAVE_FNMATCH], [1], [Define if you have the 'fnmatch' function.])], [AC_LIBOBJ([fnmatch])])
SUDO_FUNC_ISBLANK
AC_REPLACE_FUNCS(strerror strcasecmp sigaction strlcpy strlcat closefrom)
AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf, , [NEED_SNPRINTF=1])
-Index: sudo-1.6.8p6/aclocal.m4
+Index: sudo-1.6.8p12/aclocal.m4
===================================================================
---- sudo-1.6.8p6.orig/aclocal.m4 2004-09-07 13:14:51.000000000 -0400
-+++ sudo-1.6.8p6/aclocal.m4 2005-01-21 19:17:00.029400136 -0500
+--- sudo-1.6.8p12.orig/aclocal.m4 2004-09-08 03:14:51.000000000 +1000
++++ sudo-1.6.8p12/aclocal.m4 2007-05-16 16:45:08.000000000 +1000
@@ -9,7 +9,7 @@
dnl
dnl check for sendmail
@@ -171,24 +175,33 @@ Index: sudo-1.6.8p6/aclocal.m4
[AC_REQUIRE([AC_TYPE_UID_T])
AC_MSG_CHECKING(max length of uid_t)
AC_CACHE_VAL(sudo_cv_uid_t_len,
-@@ -303,15 +303,21 @@
+@@ -301,17 +301,29 @@
+
+ dnl
dnl check for "long long"
- dnl XXX hard to cache since it includes 2 tests
+-dnl XXX hard to cache since it includes 2 tests
dnl
-AC_DEFUN(SUDO_LONG_LONG, [AC_MSG_CHECKING(for long long support)
-AC_TRY_LINK(, [long long foo = 1000; foo /= 10;], AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])
-[AC_TRY_RUN([main() {if (sizeof(long long) == sizeof(long)) exit(0); else exit(1);}], AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).]))]
-AC_MSG_RESULT(yes), AC_MSG_RESULT(no))])
-+
-+AC_DEFUN([SUDO_LONG_LONG], [AC_MSG_CHECKING(for long long support)
-+AC_LINK_IFELSE([AC_LANG_PROGRAM([long long foo = 1000; foo /= 10;]),]
-+ [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])
-+ AC_CHECK_SIZEOF([long])
-+ AC_CHECK_SIZEOF([long long])
-+ if x"$ac_cv_sizeof_long" = x"$ac_cv_sizeof_long_long"; then
-+ AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).])
-+ fi]
-+, AC_MSG_RESULT(yes), AC_MSG_RESULT(no))])
++AC_DEFUN([SUDO_TYPE_LONG_LONG],
++[AC_CHECK_TYPES(long long, [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your
++compiler supports the "long long" type.])]
++[AC_MSG_CHECKING(for long and long long equivalence)
++AC_CACHE_VAL(sudo_cv_type_long_is_quad,
++[AC_TRY_RUN([
++main() {
++if (sizeof(long long) == sizeof(long)) exit(0);
++else exit(1);
++}], [sudo_cv_type_long_is_quad=yes],
++[sudo_cv_type_long_is_quad=no], [sudo_cv_type_long_is_quad=no])
++rm -f core core.* *.core])dnl
++AC_MSG_RESULT($sudo_cv_type_long_is_quad)
++if test $sudo_cv_type_long_is_quad = yes; then
++ AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).])
++fi
++])])
dnl
dnl append a libpath to an LDFLAGS style variable
diff --git a/packages/sudo/site/.mtn2git_empty b/packages/sudo/site/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sudo/site/.mtn2git_empty
diff --git a/packages/sudo/site/bit-32 b/packages/sudo/site/bit-32
new file mode 100644
index 0000000000..9b7ca5c81b
--- /dev/null
+++ b/packages/sudo/site/bit-32
@@ -0,0 +1,2 @@
+# is sizeof(long long) == sizeof(long)
+sudo_cv_type_long_is_quad=${sudo_cv_type_long_is_quad=no}
diff --git a/packages/sudo/site/bit-64 b/packages/sudo/site/bit-64
new file mode 100644
index 0000000000..05846ff0aa
--- /dev/null
+++ b/packages/sudo/site/bit-64
@@ -0,0 +1,2 @@
+# is sizeof(long long) == sizeof(long)
+sudo_cv_type_long_is_quad=${sudo_cv_type_long_is_quad=yes}
diff --git a/packages/sudo/sudo_1.6.8p12.bb b/packages/sudo/sudo_1.6.8p12.bb
index fa20fc6feb..a2e8f86314 100644
--- a/packages/sudo/sudo_1.6.8p12.bb
+++ b/packages/sudo/sudo_1.6.8p12.bb
@@ -1,7 +1,9 @@
+PR = "r2"
+
SRC_URI = "http://ftp.sudo.ws/sudo/dist/sudo-${PV}.tar.gz \
- file://nonrootinstall.patch;patch=1 \
+ file://nonrootinstall.patch;patch=1 \
file://nostrip.patch;patch=1 \
- file://autofoo.patch;patch=1 \
- file://noexec-link.patch;patch=1"
+ file://autofoo.patch;patch=1 \
+ file://noexec-link.patch;patch=1"
require sudo.inc
diff --git a/packages/sword/sword-1.5.9/.mtn2git_empty b/packages/sword/sword-1.5.9/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sword/sword-1.5.9/.mtn2git_empty
diff --git a/packages/sword/sword-1.5.9/gcc-visibility.patch b/packages/sword/sword-1.5.9/gcc-visibility.patch
new file mode 100644
index 0000000000..f23a66767f
--- /dev/null
+++ b/packages/sword/sword-1.5.9/gcc-visibility.patch
@@ -0,0 +1,26 @@
+diff --git a/include/rawtext.h b/include/rawtext.h
+index 32986fe..1304bf7 100644
+--- a/include/rawtext.h
++++ b/include/rawtext.h
+@@ -43,7 +43,7 @@ public:
+ virtual ~RawText();
+ virtual SWBuf &getRawEntryBuf();
+ virtual void increment(int steps = 1);
+- virtual void decrement(int steps = 1) { increment(-steps); }
++ virtual __attribute__((visibility("default"))) void decrement(int steps = 1) { increment(-steps); }
+ virtual signed char createSearchFramework(
+ void (*percent) (char, void *) = &nullPercent,
+ void *percentUserData = 0);
+diff --git a/include/versekey.h b/include/versekey.h
+index 0ca5e47..53084d9 100644
+--- a/include/versekey.h
++++ b/include/versekey.h
+@@ -253,7 +253,7 @@ public:
+ */
+ virtual const char *getText() const;
+ virtual const char *getShortText() const;
+- virtual void setText(const char *ikey) { SWKey::setText(ikey); parse (); }
++ virtual __attribute__((visibility("default"))) void setText(const char *ikey) { SWKey::setText(ikey); parse (); }
+ virtual void copyFrom(const SWKey &ikey);
+
+ /** Equates this VerseKey to another VerseKey
diff --git a/packages/sword/sword_1.5.9.bb b/packages/sword/sword_1.5.9.bb
index 362b75e57c..2c180ac7e3 100644
--- a/packages/sword/sword_1.5.9.bb
+++ b/packages/sword/sword_1.5.9.bb
@@ -7,7 +7,8 @@ PRIORITY = "optional"
LICENSE = "GPL"
PR = "r0"
-SRC_URI = "http://www.crosswire.org/ftpmirror/pub/sword/source/v1.5/sword-${PV}.tar.gz"
+SRC_URI = "http://www.crosswire.org/ftpmirror/pub/sword/source/v1.5/sword-${PV}.tar.gz \
+ file://gcc-visibility.patch;patch=1"
inherit autotools pkgconfig
diff --git a/packages/sylpheed/claws-mail.inc b/packages/sylpheed/claws-mail.inc
new file mode 100644
index 0000000000..e62ca9036a
--- /dev/null
+++ b/packages/sylpheed/claws-mail.inc
@@ -0,0 +1,54 @@
+SECTION = "x11/network"
+DESCRIPTION = "Mail user agent"
+DEPENDS = "gtk+ libetpan openssl aspell"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/sylpheed-claws/claws-mail-${PV}.tar.bz2 \
+ file://desktop.patch;patch=1 \
+ file://streamline-ui.patch;patch=1 \
+ "
+
+FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications"
+
+EXTRA_OECONF = "--disable-aspell-test \
+ --enable--aspell \
+ --disable-manual \
+ --disable-crash-dialog \
+ --disable-jpilot \
+ --disable-trayicon-plugin \
+ --disable-spamassassin-plugin \
+ --disable-bogofilter-plugin \
+ --disable-pgpcore-plugin \
+ --disable-pgpmime-plugin \
+ --disable-pgpinline-plugin \
+ --disable-dillo-viewer-plugin \
+ --disable-clamav-plugin \
+ --disable-gnomeprint \
+ --disable-valgrind \
+ "
+
+CFLAGS += "-D_GNU_SOURCE"
+
+inherit autotools pkgconfig
+
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+do_install_append() {
+ install -d ${D}${datadir}/applications
+ install -m 0644 claws-mail.desktop ${D}${datadir}/applications/
+ install -d ${D}${datadir}/pixmaps
+ install -m 0644 claws-mail.png ${D}${datadir}/pixmaps/
+ mv ${D}${bindir}/${TARGET_SYS}-claws-mail ${D}${bindir}/${PN}
+}
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/packages/sylpheed/claws-mail_2.9.1.bb b/packages/sylpheed/claws-mail_2.9.1.bb
new file mode 100644
index 0000000000..f8a8396b95
--- /dev/null
+++ b/packages/sylpheed/claws-mail_2.9.1.bb
@@ -0,0 +1 @@
+require claws-mail.inc
diff --git a/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.bb b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.bb
new file mode 100644
index 0000000000..5ca95d9dfb
--- /dev/null
+++ b/packages/sylpheed/claws-plugin-gtkhtml2-viewer_0.15.bb
@@ -0,0 +1,20 @@
+SECTION = "x11/network"
+DESCRIPTION = "Mail user agent plugins"
+DEPENDS = "claws-mail gtkhtml2 curl"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.claws-mail.org/downloads/plugins/gtkhtml2_viewer-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/gtkhtml2_viewer-${PV}"
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+FILES_${PN} = "${libdir}/claws-mail/plugins/*.so"
+
diff --git a/packages/sylpheed/claws-plugin-mailmbox_1.13.bb b/packages/sylpheed/claws-plugin-mailmbox_1.13.bb
new file mode 100644
index 0000000000..03e939ead3
--- /dev/null
+++ b/packages/sylpheed/claws-plugin-mailmbox_1.13.bb
@@ -0,0 +1,20 @@
+SECTION = "x11/network"
+DESCRIPTION = "Mail user agent plugins"
+DEPENDS = "claws-mail"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "http://www.claws-mail.org/downloads/plugins/mailmbox-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/mailmbox-${PV}"
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+FILES_${PN} = "${libdir}/claws-mail/plugins/*.so"
+FILES_${PN}-dbg = "${libdir}/claws-mail/plugins/.debug"
diff --git a/packages/sylpheed/claws-plugin-rssyl_0.13.bb b/packages/sylpheed/claws-plugin-rssyl_0.13.bb
new file mode 100644
index 0000000000..29fc245ac4
--- /dev/null
+++ b/packages/sylpheed/claws-plugin-rssyl_0.13.bb
@@ -0,0 +1,20 @@
+SECTION = "x11/network"
+DESCRIPTION = "Mail user agent plugins"
+DEPENDS = "claws-mail libxml2 curl glib-2.0 gtk+"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.claws-mail.org/downloads/plugins/rssyl-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/rssyl-${PV}"
+
+do_configure() {
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+FILES_${PN} = "${libdir}/claws-mail/plugins/*.so"
+
diff --git a/packages/sylpheed/files/desktop.patch b/packages/sylpheed/files/desktop.patch
new file mode 100644
index 0000000000..c5ed7a9c7d
--- /dev/null
+++ b/packages/sylpheed/files/desktop.patch
@@ -0,0 +1,19 @@
+Index: claws-mail-2.9.1/claws-mail.desktop
+===================================================================
+--- claws-mail-2.9.1.orig/claws-mail.desktop 2007-04-24 17:40:20.000000000 +0100
++++ claws-mail-2.9.1/claws-mail.desktop 2007-04-25 07:08:36.000000000 +0100
+@@ -1,11 +1,11 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-Name=Claws Mail
++Name=Mail
+ Exec=claws-mail
+ Icon=claws-mail
+-Info="Claws Mail"
++Info=Email Application
+ Categories=GTK;Network;Email;
+-Comment="Gtk+ based Mail Client"
++Comment=Email Application
+ Terminal=false
+ Type=Application
+ StartupNotify=true
diff --git a/packages/sylpheed/files/streamline-ui.patch b/packages/sylpheed/files/streamline-ui.patch
new file mode 100644
index 0000000000..29a52ff795
--- /dev/null
+++ b/packages/sylpheed/files/streamline-ui.patch
@@ -0,0 +1,1008 @@
+Index: claws-mail-2.9.1/src/mainwindow.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/mainwindow.c 2007-04-25 07:40:10.000000000 +0100
++++ claws-mail-2.9.1/src/mainwindow.c 2007-04-25 10:26:40.000000000 +0100
+@@ -189,9 +189,6 @@
+ static void toggle_statusbar_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+-static void set_layout_cb (MainWindow *mainwin,
+- guint action,
+- GtkWidget *widget);
+
+ static void addressbook_open_cb (MainWindow *mainwin,
+ guint action,
+@@ -538,94 +535,24 @@
+ {N_("/_Edit/_Search folder..."), "<shift><control>F", search_cb, 1, NULL},
+ {N_("/_Edit/_Quick search"), "slash", mainwindow_quicksearch, 0, NULL},
+ {N_("/_View"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/Show or hi_de"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/Show or hi_de/_Message view"),
+- "V", toggle_message_cb, 0, "<ToggleItem>"},
+- {N_("/_View/Show or hi_de/_Toolbar"),
+- NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/Show or hi_de/_Toolbar/Text _below icons"),
+- NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"},
+- {N_("/_View/Show or hi_de/_Toolbar/Text be_side icons"),
+- NULL, toggle_toolbar_cb, TOOLBAR_BOTH_HORIZ, "/View/Show or hide/Toolbar/Text below icons"},
+- {N_("/_View/Show or hi_de/_Toolbar/_Icons only"),
+- NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Show or hide/Toolbar/Text below icons"},
+- {N_("/_View/Show or hi_de/_Toolbar/_Text only"),
+- NULL, toggle_toolbar_cb, TOOLBAR_TEXT, "/View/Show or hide/Toolbar/Text below icons"},
+- {N_("/_View/Show or hi_de/_Toolbar/_Hide"),
+- NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Show or hide/Toolbar/Text below icons"},
+- {N_("/_View/Show or hi_de/Status _bar"),
+- NULL, toggle_statusbar_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Set displayed _columns"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_View/Set displayed _columns/in _Folder list..."), NULL, set_folder_display_item_cb, 0, NULL},
+ {N_("/_View/Set displayed _columns/in _Message list..."),NULL, set_summary_display_item_cb, 0, NULL},
+
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/La_yout"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/Layout/_Standard"), NULL, set_layout_cb, NORMAL_LAYOUT, "<RadioItem>"},
+- {N_("/_View/Layout/_Three columns"), NULL, set_layout_cb, VERTICAL_LAYOUT, "/View/Layout/Standard"},
+- {N_("/_View/Layout/_Wide message"), NULL, set_layout_cb, WIDE_LAYOUT, "/View/Layout/Standard"},
+- {N_("/_View/Layout/W_ide message list"),NULL, set_layout_cb, WIDE_MSGLIST_LAYOUT, "/View/Layout/Standard"},
+- {N_("/_View/Layout/S_mall screen"), NULL, set_layout_cb, SMALL_LAYOUT, "/View/Layout/Standard"},
+- {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/_Sort/by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, "<RadioItem>"},
+- {N_("/_View/_Sort/by S_ize"), NULL, sort_summary_cb, SORT_BY_SIZE, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _Date"), NULL, sort_summary_cb, SORT_BY_DATE, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _From"), NULL, sort_summary_cb, SORT_BY_FROM, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _To"), NULL, sort_summary_cb, SORT_BY_TO, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by S_ubject"), NULL, sort_summary_cb, SORT_BY_SUBJECT, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _color label"),
+- NULL, sort_summary_cb, SORT_BY_LABEL, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _mark"), NULL, sort_summary_cb, SORT_BY_MARK, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by _status"), NULL, sort_summary_cb, SORT_BY_STATUS, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by a_ttachment"),
+- NULL, sort_summary_cb, SORT_BY_MIME, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by score"), NULL, sort_summary_cb, SORT_BY_SCORE, "/View/Sort/by number"},
+- {N_("/_View/_Sort/by locked"), NULL, sort_summary_cb, SORT_BY_LOCKED, "/View/Sort/by number"},
+- {N_("/_View/_Sort/D_on't sort"), NULL, sort_summary_cb, SORT_BY_NONE, "/View/Sort/by number"},
++ {N_("/_View/_Sort/by _Date"), NULL, sort_summary_cb, SORT_BY_DATE, "<RadioItem>"},
++ {N_("/_View/_Sort/by _From"), NULL, sort_summary_cb, SORT_BY_FROM, "/View/Sort/by Date"},
++ {N_("/_View/_Sort/by _To"), NULL, sort_summary_cb, SORT_BY_TO, "/View/Sort/by Date"},
++ {N_("/_View/_Sort/by S_ubject"), NULL, sort_summary_cb, SORT_BY_SUBJECT, "/View/Sort/by Date"},
+ {N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort/Ascending"), NULL, sort_summary_type_cb, SORT_ASCENDING, "<RadioItem>"},
+ {N_("/_View/_Sort/Descending"), NULL, sort_summary_type_cb, SORT_DESCENDING, "/View/Sort/Ascending"},
+- {N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Sort/_Attract by subject"),
+- NULL, attract_by_subject_cb, 0, NULL},
+ {N_("/_View/Th_read view"), "<control>T", thread_cb, 0, "<ToggleItem>"},
+ {N_("/_View/E_xpand all threads"), NULL, expand_threads_cb, 0, NULL},
+ {N_("/_View/Co_llapse all threads"), NULL, collapse_threads_cb, 0, NULL},
+ {N_("/_View/_Hide read messages"), NULL, hide_read_messages, 0, "<ToggleItem>"},
+
+- {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_View/_Go to/_Previous message"), "P", prev_cb, 0, NULL},
+- {N_("/_View/_Go to/_Next message"), "N", next_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/P_revious unread message"),
+- "<shift>P", prev_unread_cb, 0, NULL},
+- {N_("/_View/_Go to/N_ext unread message"),
+- "<shift>N", next_unread_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/Previous ne_w message"), NULL, prev_new_cb, 0, NULL},
+- {N_("/_View/_Go to/Ne_xt new message"), NULL, next_new_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/Previous _marked message"),
+- NULL, prev_marked_cb, 0, NULL},
+- {N_("/_View/_Go to/Next m_arked message"),
+- NULL, next_marked_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/Previous _labeled message"),
+- NULL, prev_labeled_cb, 0, NULL},
+- {N_("/_View/_Go to/Next la_beled message"),
+- NULL, next_labeled_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/Last read message"),
+- NULL, last_read_cb, 0, NULL},
+- {N_("/_View/_Go to/Parent message"),
+- "<control>Up", parent_cb, 0, NULL},
+- {N_("/_View/_Go to/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/_Go to/Next unread _folder"), "<shift>G", goto_unread_folder_cb, 0, NULL},
+- {N_("/_View/_Go to/_Other folder..."), "G", goto_folder_cb, 0, NULL},
+- {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+-
+ #define ENC_SEPARATOR \
+ {N_("/_View/Character _encoding/---"), NULL, NULL, 0, "<Separator>"}
+ #define ENC_ACTION(action) \
+@@ -742,7 +669,6 @@
+ #undef DEC_ACTION
+
+ {N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
+- {N_("/_View/Open in new _window"), "<control><alt>N", open_msg_cb, 0, NULL},
+ {N_("/_View/Mess_age source"), "<control>U", view_source_cb, 0, NULL},
+ {N_("/_View/All headers"), "<control>H", show_all_header_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Quotes"), NULL, NULL, 0, "<Branch>"},
+@@ -1137,23 +1063,14 @@
+ gint i;
+ guint n_menu_entries;
+
+- static GdkGeometry geometry;
+-
+ debug_print("Creating main window...\n");
+ mainwin = g_new0(MainWindow, 1);
+
+ /* main window */
+ window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "mainwindow");
+- gtk_window_set_title(GTK_WINDOW(window), PROG_VERSION);
++ gtk_window_set_title(GTK_WINDOW(window), _("Mail"));
+ gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+
+- if (!geometry.min_height) {
+- geometry.min_width = 320;
+- geometry.min_height = 200;
+- }
+- gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
+- GDK_HINT_MIN_SIZE);
+-
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(main_window_close_cb), mainwin);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+@@ -1184,21 +1101,9 @@
+ /* gtk_widget_show(gtk_item_factory_get_item(ifactory,"/Message/Mailing-List"));
+ main_create_mailing_list_menu (mainwin, NULL); */
+
+- menu_set_sensitive(ifactory, "/Help/Manual", manual_available(MANUAL_MANUAL_LOCAL));
+-
+- if (prefs_common.toolbar_detachable) {
+- handlebox = gtk_handle_box_new();
+- gtk_widget_show(handlebox);
+- gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+- g_signal_connect(G_OBJECT(handlebox), "child_attached",
+- G_CALLBACK(toolbar_child_attached), mainwin);
+- g_signal_connect(G_OBJECT(handlebox), "child_detached",
+- G_CALLBACK(toolbar_child_detached), mainwin);
+- } else {
+- handlebox = gtk_hbox_new(FALSE, 0);
+- gtk_widget_show(handlebox);
+- gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+- }
++ handlebox = gtk_hbox_new(FALSE, 0);
++ gtk_widget_show(handlebox);
++ gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+ /* link window to mainwin->window to avoid gdk warnings */
+ mainwin->window = window;
+
+@@ -1405,36 +1310,6 @@
+ (ifactory, "/View/Character encoding/Auto detect");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
+
+- switch (prefs_common.toolbar_style) {
+- case TOOLBAR_NONE:
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Toolbar/Hide");
+- break;
+- case TOOLBAR_ICON:
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Toolbar/Icons only");
+- break;
+- case TOOLBAR_TEXT:
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Toolbar/Text only");
+- break;
+- case TOOLBAR_BOTH:
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Toolbar/Text below icons");
+- break;
+- case TOOLBAR_BOTH_HORIZ:
+- menuitem = gtk_item_factory_get_item
+- (ifactory,
+- "/View/Show or hide/Toolbar/Text beside icons");
+- }
+- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
+-
+- gtk_widget_hide(mainwin->hbox_stat);
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Status bar");
+- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+- prefs_common.show_statusbar);
+-
+ /* set account selection menu */
+ ac_menu = gtk_item_factory_get_widget
+ (ifactory, "/Configuration/Change current account");
+@@ -2284,16 +2159,6 @@
+ {"/View/Expand all threads" , M_MSG_EXIST},
+ {"/View/Collapse all threads" , M_MSG_EXIST},
+ {"/View/Hide read messages" , M_HIDE_READ_MSG},
+- {"/View/Go to/Previous message" , M_MSG_EXIST},
+- {"/View/Go to/Next message" , M_MSG_EXIST},
+- {"/View/Go to/Previous unread message" , M_MSG_EXIST},
+- {"/View/Go to/Previous new message" , M_MSG_EXIST},
+- {"/View/Go to/Previous marked message" , M_MSG_EXIST},
+- {"/View/Go to/Previous labeled message", M_MSG_EXIST},
+- {"/View/Go to/Next labeled message", M_MSG_EXIST},
+- {"/View/Go to/Last read message" , M_SINGLE_TARGET_EXIST},
+- {"/View/Go to/Parent message" , M_SINGLE_TARGET_EXIST},
+- {"/View/Open in new window" , M_SINGLE_TARGET_EXIST},
+ {"/View/Message source" , M_SINGLE_TARGET_EXIST},
+ {"/View/All headers" , M_SINGLE_TARGET_EXIST},
+ {"/View/Quotes" , M_SINGLE_TARGET_EXIST},
+@@ -2379,40 +2244,20 @@
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
+ }
+
+- SET_CHECK_MENU_ACTIVE("/View/Show or hide/Message view",
+- messageview_is_visible(mainwin->messageview));
+-
+ summaryview = mainwin->summaryview;
+- menu_path = "/View/Sort/Don't sort";
++ menu_path = "/View/Sort/by Date";
+
+ switch (summaryview->sort_key) {
+- case SORT_BY_NUMBER:
+- menu_path = "/View/Sort/by number"; break;
+- case SORT_BY_SIZE:
+- menu_path = "/View/Sort/by Size"; break;
+- case SORT_BY_DATE:
+- menu_path = "/View/Sort/by Date"; break;
+ case SORT_BY_FROM:
+ menu_path = "/View/Sort/by From"; break;
+ case SORT_BY_TO:
+ menu_path = "/View/Sort/by To"; break;
+ case SORT_BY_SUBJECT:
+ menu_path = "/View/Sort/by Subject"; break;
+- case SORT_BY_LABEL:
+- menu_path = "/View/Sort/by color label"; break;
+- case SORT_BY_MARK:
+- menu_path = "/View/Sort/by mark"; break;
+- case SORT_BY_STATUS:
+- menu_path = "/View/Sort/by status"; break;
+- case SORT_BY_MIME:
+- menu_path = "/View/Sort/by attachment"; break;
+- case SORT_BY_SCORE:
+- menu_path = "/View/Sort/by score"; break;
+- case SORT_BY_LOCKED:
+- menu_path = "/View/Sort/by locked"; break;
+ case SORT_BY_NONE:
++ case SORT_BY_DATE:
+ default:
+- menu_path = "/View/Sort/Don't sort"; break;
++ menu_path = "/View/Sort/by Date"; break;
+ }
+ SET_CHECK_MENU_ACTIVE(menu_path, TRUE);
+
+@@ -2735,8 +2580,6 @@
+ gtk_widget_destroy(mainwin->hpaned);
+ }
+
+- menu_set_sensitive(ifactory, "/View/Show or hide/Message view",
+- (layout_mode != WIDE_MSGLIST_LAYOUT && layout_mode != SMALL_LAYOUT));
+ switch (layout_mode) {
+ case VERTICAL_LAYOUT:
+ case NORMAL_LAYOUT:
+@@ -2877,37 +2720,6 @@
+
+ prefs_common.layout_mode = layout_mode;
+
+- menuitem = gtk_item_factory_get_item
+- (ifactory, "/View/Show or hide/Message view");
+- gtk_check_menu_item_set_active
+- (GTK_CHECK_MENU_ITEM(menuitem),
+- messageview_is_visible(mainwin->messageview));
+-
+-#define SET_CHECK_MENU_ACTIVE(path, active) \
+-{ \
+- menuitem = gtk_item_factory_get_widget(ifactory, path); \
+- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
+-}
+-
+- switch (prefs_common.layout_mode) {
+- case NORMAL_LAYOUT:
+- SET_CHECK_MENU_ACTIVE("/View/Layout/Standard", TRUE);
+- break;
+- case VERTICAL_LAYOUT:
+- SET_CHECK_MENU_ACTIVE("/View/Layout/Three columns", TRUE);
+- break;
+- case WIDE_LAYOUT:
+- SET_CHECK_MENU_ACTIVE("/View/Layout/Wide message", TRUE);
+- break;
+- case WIDE_MSGLIST_LAYOUT:
+- SET_CHECK_MENU_ACTIVE("/View/Layout/Wide message list", TRUE);
+- break;
+- case SMALL_LAYOUT:
+- SET_CHECK_MENU_ACTIVE("/View/Layout/Small screen", TRUE);
+- break;
+- }
+-#undef SET_CHECK_MENU_ACTIVE
+-
+ if (folderwin) {
+ g_signal_connect
+ (G_OBJECT(folderwin), "size_allocate",
+@@ -3116,12 +2928,6 @@
+ summary_toggle_view(mainwin->summaryview);
+ }
+
+-static void toggle_toolbar_cb(MainWindow *mainwin, guint action,
+- GtkWidget *widget)
+-{
+- toolbar_toggle(action, mainwin);
+-}
+-
+ static void main_window_reply_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+ {
+Index: claws-mail-2.9.1/src/prefs_common.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/prefs_common.c 2007-04-25 07:40:10.000000000 +0100
++++ claws-mail-2.9.1/src/prefs_common.c 2007-04-25 07:42:17.000000000 +0100
+@@ -262,7 +262,7 @@
+ {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
+ NULL, NULL, NULL},
+
+-#ifndef MAEMO
++#if 0
+ {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
+ NULL, NULL, NULL},
+ #else
+@@ -300,7 +300,7 @@
+ &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
+
+ /* new fonts */
+-#ifndef MAEMO
++#if 0
+ {"widget_font_gtk2", NULL,
+ &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
+ {"message_font_gtk2", "Monospace 9",
+@@ -416,7 +416,7 @@
+
+ {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
+ NULL, NULL, NULL},
+-#ifndef MAEMO
++#if 0
+ {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
+ NULL, NULL, NULL},
+ #else
+@@ -544,7 +544,7 @@
+ {"folder_col_pos_total", "3",
+ &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
+
+-#ifndef MAEMO
++#if 0
+ {"folder_col_size_folder", "120",
+ &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
+ {"folder_col_size_new", "32",
+@@ -702,7 +702,7 @@
+ &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
+
+ /* Interface */
+-#ifndef MAEMO
++#if 0
+ {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
+ NULL, NULL, NULL},
+ #else
+Index: claws-mail-2.9.1/src/toolbar.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/toolbar.c 2007-04-25 07:40:10.000000000 +0100
++++ claws-mail-2.9.1/src/toolbar.c 2007-04-25 07:42:17.000000000 +0100
+@@ -841,26 +841,17 @@
+ gtk_widget_hide(handlebox_wid);
+ break;
+ case TOOLBAR_ICON:
+- gtk_toolbar_set_style(GTK_TOOLBAR(toolbar_wid),
+- GTK_TOOLBAR_ICONS);
+- break;
+ case TOOLBAR_TEXT:
+- gtk_toolbar_set_style(GTK_TOOLBAR(toolbar_wid),
+- GTK_TOOLBAR_TEXT);
+- break;
+ case TOOLBAR_BOTH:
+- gtk_toolbar_set_style(GTK_TOOLBAR(toolbar_wid),
+- GTK_TOOLBAR_BOTH);
+- break;
+ case TOOLBAR_BOTH_HORIZ:
+ gtk_toolbar_set_style(GTK_TOOLBAR(toolbar_wid),
+- GTK_TOOLBAR_BOTH_HORIZ);
++ GTK_TOOLBAR_ICONS);
+ break;
+ default:
+ return;
+ }
+
+- prefs_common.toolbar_style = (ToolbarStyle)action;
++ prefs_common.toolbar_style = (ToolbarStyle)TOOLBAR_ICON;
+ gtk_widget_set_size_request(handlebox_wid, 1, -1);
+
+ if (prefs_common.toolbar_style != TOOLBAR_NONE) {
+@@ -1594,7 +1585,7 @@
+ gtk_container_add(GTK_CONTAINER(container), toolbar);
+ gtk_container_set_border_width(GTK_CONTAINER(container), 2);
+ gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL);
+- gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH);
++ gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
+
+ for (cur = toolbar_list; cur != NULL; cur = cur->next) {
+
+Index: claws-mail-2.9.1/src/gtk/prefswindow.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/gtk/prefswindow.c 2007-04-25 07:40:10.000000000 +0100
++++ claws-mail-2.9.1/src/gtk/prefswindow.c 2007-04-25 10:30:15.000000000 +0100
+@@ -343,6 +343,10 @@
+ gint x = gdk_screen_width();
+ gint y = gdk_screen_height();
+ static GdkGeometry geometry;
++ gint col_count = g_slist_length (prefs_pages);
++
++ if (col_count > 1)
++ col_count = 2;
+
+ prefswindow = g_new0(PrefsWindow, 1);
+
+@@ -360,39 +364,52 @@
+ gtk_window_set_resizable (GTK_WINDOW(prefswindow->window), TRUE);
+ gtk_container_set_border_width(GTK_CONTAINER(prefswindow->window), 4);
+
+- prefswindow->table1 = gtk_table_new(2, 2, FALSE);
++ prefswindow->table1 = gtk_table_new(col_count, col_count, FALSE);
+ gtk_widget_show(prefswindow->table1);
+ gtk_container_add(GTK_CONTAINER(prefswindow->window), prefswindow->table1);
+
+- prefswindow->scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
+- gtk_widget_show(prefswindow->scrolledwindow1);
+- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(prefswindow->scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+- gtk_table_attach(GTK_TABLE(prefswindow->table1), prefswindow->scrolledwindow1, 0, 1, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 2, 2);
+-
+- prefswindow->tree_view = prefswindow_tree_view_create(prefswindow);
+- gtk_widget_show(prefswindow->tree_view);
+- gtk_container_add(GTK_CONTAINER(prefswindow->scrolledwindow1),
+- prefswindow->tree_view);
+-
+- prefswindow->frame = gtk_frame_new(NULL);
+- gtk_widget_show(prefswindow->frame);
+- gtk_frame_set_shadow_type(GTK_FRAME(prefswindow->frame), GTK_SHADOW_IN);
+- gtk_table_attach(GTK_TABLE(prefswindow->table1), prefswindow->frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 2, 2);
+-
+- prefswindow->table2 = gtk_table_new(1, 2, FALSE);
+- gtk_widget_show(prefswindow->table2);
+- gtk_container_add(GTK_CONTAINER(prefswindow->frame), prefswindow->table2);
+-
+- prefswindow->labelframe = gtk_frame_new(NULL);
+- gtk_widget_show(prefswindow->labelframe);
+- gtk_frame_set_shadow_type(GTK_FRAME(prefswindow->labelframe), GTK_SHADOW_OUT);
+- gtk_table_attach(GTK_TABLE(prefswindow->table2), prefswindow->labelframe, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 1, 1);
+-
+- prefswindow->pagelabel = gtk_label_new("");
+- gtk_widget_show(prefswindow->pagelabel);
+- gtk_label_set_justify(GTK_LABEL(prefswindow->pagelabel), GTK_JUSTIFY_LEFT);
+- gtk_misc_set_alignment(GTK_MISC(prefswindow->pagelabel), 0, 0.0);
+- gtk_container_add(GTK_CONTAINER(prefswindow->labelframe), prefswindow->pagelabel);
++ if (col_count > 1)
++ {
++ prefswindow->scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
++ gtk_widget_show(prefswindow->scrolledwindow1);
++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(prefswindow->scrolledwindow1), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
++ gtk_table_attach(GTK_TABLE(prefswindow->table1), prefswindow->scrolledwindow1, 0, 1, 0, 1, GTK_FILL, GTK_FILL | GTK_EXPAND, 2, 2);
++
++ prefswindow->tree_view = prefswindow_tree_view_create(prefswindow);
++ gtk_widget_show(prefswindow->tree_view);
++ gtk_container_add(GTK_CONTAINER(prefswindow->scrolledwindow1),
++ prefswindow->tree_view);
++
++ prefswindow->frame = gtk_frame_new(NULL);
++ gtk_widget_show(prefswindow->frame);
++ gtk_frame_set_shadow_type(GTK_FRAME(prefswindow->frame), GTK_SHADOW_IN);
++ gtk_table_attach(GTK_TABLE(prefswindow->table1), prefswindow->frame, col_count - 1, col_count, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 2, 2);
++
++ prefswindow->table2 = gtk_table_new(1, 2, FALSE);
++ gtk_widget_show(prefswindow->table2);
++ gtk_container_add(GTK_CONTAINER(prefswindow->frame), prefswindow->table2);
++ }
++ else
++ {
++ prefswindow->table2 = gtk_table_new(1, 2, FALSE);
++ gtk_widget_show(prefswindow->table2);
++ gtk_table_attach(GTK_TABLE(prefswindow->table1), prefswindow->table2, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 2, 2);
++ }
++
++
++ if (col_count > 1)
++ {
++ prefswindow->labelframe = gtk_frame_new(NULL);
++ gtk_widget_show(prefswindow->labelframe);
++ gtk_frame_set_shadow_type(GTK_FRAME(prefswindow->labelframe), GTK_SHADOW_OUT);
++ gtk_table_attach(GTK_TABLE(prefswindow->table2), prefswindow->labelframe, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 1, 1);
++
++ prefswindow->pagelabel = gtk_label_new("");
++ gtk_widget_show(prefswindow->pagelabel);
++ gtk_label_set_justify(GTK_LABEL(prefswindow->pagelabel), GTK_JUSTIFY_LEFT);
++ gtk_misc_set_alignment(GTK_MISC(prefswindow->pagelabel), 0, 0.0);
++ gtk_container_add(GTK_CONTAINER(prefswindow->labelframe), prefswindow->pagelabel);
++ }
+
+ prefswindow->scrolledwindow2 = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(prefswindow->scrolledwindow2);
+@@ -411,9 +428,38 @@
+ gtk_widget_show(prefswindow->empty_page);
+ gtk_container_add(GTK_CONTAINER(prefswindow->notebook), prefswindow->empty_page);
+
+- prefswindow_build_tree(prefswindow->tree_view, prefs_pages);
++ if (col_count > 1)
++ {
++ prefswindow_build_tree(prefswindow->tree_view, prefs_pages);
++
++ gtk_widget_grab_focus(prefswindow->tree_view);
++ }
++ else
++ {
++ PrefsPage * page = prefs_pages->data;
++ gint pagenum;
++ GtkAdjustment *adj;
++
++ if (!page->page_open)
++ {
++ page->create_widget(page,
++ GTK_WINDOW(prefswindow->window),
++ prefswindow->data);
++ gtk_container_add(GTK_CONTAINER(prefswindow->notebook),
++ page->widget);
++ page->page_open = TRUE;
++ }
++
++ pagenum = gtk_notebook_page_num(GTK_NOTEBOOK(prefswindow->notebook),
++ page->widget);
++ gtk_notebook_set_current_page(GTK_NOTEBOOK(prefswindow->notebook),
++ pagenum);
+
+- gtk_widget_grab_focus(prefswindow->tree_view);
++ adj = gtk_scrolled_window_get_vadjustment(
++ GTK_SCROLLED_WINDOW(prefswindow->scrolledwindow2));
++ gtk_adjustment_set_value(adj, 0);
++
++ }
+
+ gtkut_stock_button_set_create(&prefswindow->confirm_area,
+ &prefswindow->apply_btn, GTK_STOCK_APPLY,
+@@ -440,28 +486,6 @@
+ G_CALLBACK(prefswindow_key_pressed), &(prefswindow->window));
+ #endif
+
+- /* connect to callback only if we hhave non-NULL pointers to store size to */
+- if (prefswindow->save_width && prefswindow->save_height) {
+- g_signal_connect(G_OBJECT(prefswindow->window), "size_allocate",
+- G_CALLBACK(prefs_size_allocate_cb), prefswindow);
+- }
+-
+- if (!geometry.min_height) {
+-
+- if (x < 800 && y < 600) {
+- geometry.min_width = 600;
+- geometry.min_height = 440;
+- } else {
+- geometry.min_width = 700;
+- geometry.min_height = 550;
+- }
+- }
+- gtk_window_set_geometry_hints(GTK_WINDOW(prefswindow->window), NULL, &geometry,
+- GDK_HINT_MIN_SIZE);
+- if (prefswindow->save_width && prefswindow->save_height) {
+- gtk_widget_set_size_request(prefswindow->window, *(prefswindow->save_width),
+- *(prefswindow->save_height));
+- }
+
+ gtk_widget_show(prefswindow->window);
+ #ifdef MAEMO
+Index: claws-mail-2.9.1/src/compose.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/compose.c 2007-04-25 07:40:10.000000000 +0100
++++ claws-mail-2.9.1/src/compose.c 2007-04-25 10:18:13.000000000 +0100
+@@ -352,9 +352,6 @@
+
+ /* callback functions */
+
+-static gboolean compose_edit_size_alloc (GtkEditable *widget,
+- GtkAllocation *allocation,
+- GtkSHRuler *shruler);
+ static void account_activated (GtkComboBox *optmenu,
+ gpointer data);
+ static void attach_selected (GtkTreeView *tree_view,
+@@ -439,9 +436,6 @@
+ guint action,
+ GtkWidget *widget);
+
+-static void compose_toggle_ruler_cb (gpointer data,
+- guint action,
+- GtkWidget *widget);
+ static void compose_toggle_sign_cb (gpointer data,
+ guint action,
+ GtkWidget *widget);
+@@ -788,7 +782,6 @@
+ ENC_ACTION(C_WINDOWS_874)},
+
+ {N_("/_Tools"), NULL, NULL, 0, "<Branch>"},
+- {N_("/_Tools/Show _ruler"), NULL, compose_toggle_ruler_cb, 0, "<ToggleItem>"},
+ {N_("/_Tools/_Address book"), "<shift><control>A", compose_address_cb , 0, NULL},
+ {N_("/_Tools/_Template"), NULL, NULL, 0, "<Branch>"},
+ {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"},
+@@ -2067,7 +2060,6 @@
+ menu_set_sensitive(ifactory, "/Message/Insert signature", FALSE);
+ menu_set_sensitive(ifactory, "/Edit", FALSE);
+ menu_set_sensitive(ifactory, "/Options", FALSE);
+- menu_set_sensitive(ifactory, "/Tools/Show ruler", FALSE);
+ menu_set_sensitive(ifactory, "/Tools/Actions", FALSE);
+
+ if (compose->toolbar->draft_btn)
+@@ -5684,7 +5676,7 @@
+ g_signal_connect(G_OBJECT(GTK_COMBO(combo)->entry), "grab_focus",
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ gtk_widget_show(combo);
+- gtk_table_attach(GTK_TABLE(compose->header_table), combo, 0, 1, compose->header_nextrow, compose->header_nextrow+1, GTK_SHRINK, GTK_FILL, 0, 0);
++ gtk_table_attach(GTK_TABLE(compose->header_table), combo, 0, 1, compose->header_nextrow, compose->header_nextrow+1, GTK_FILL, GTK_FILL, 0, 0);
+ if (compose->header_last) {
+ const gchar *last_header_entry = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(compose->header_last->combo)->entry));
+ string = headers;
+@@ -5778,7 +5770,7 @@
+
+ static GtkWidget *compose_create_header(Compose *compose)
+ {
+- GtkWidget *from_optmenu_hbox;
++ GtkWidget *from_optmenu;
+ GtkWidget *header_scrolledwin;
+ GtkWidget *header_table;
+
+@@ -5788,18 +5780,20 @@
+ header_scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(header_scrolledwin);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(header_scrolledwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+-
+ header_table = gtk_table_new(2, 2, FALSE);
++ gtk_table_set_col_spacings (GTK_TABLE (header_table), BORDER_WIDTH);
+ gtk_widget_show(header_table);
+ gtk_container_set_border_width(GTK_CONTAINER(header_table), BORDER_WIDTH);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(header_scrolledwin), header_table);
+- gtk_viewport_set_shadow_type(GTK_VIEWPORT(GTK_BIN(header_scrolledwin)->child), GTK_SHADOW_ETCHED_IN);
++ gtk_viewport_set_shadow_type(GTK_VIEWPORT(GTK_BIN(header_scrolledwin)->child), GTK_SHADOW_NONE);
+ count = 0;
+
+ /* option menu for selecting accounts */
+- from_optmenu_hbox = compose_account_option_menu_create(compose);
+- gtk_table_attach(GTK_TABLE(header_table), from_optmenu_hbox,
+- 0, 2, count, count + 1, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
++ from_optmenu = compose_account_option_menu_create(compose);
++ gtk_table_attach(GTK_TABLE(header_table), from_optmenu,
++ 0, 1, count, count + 1, GTK_FILL, GTK_FILL, 0, 0);
++ gtk_table_attach(GTK_TABLE(header_table), compose->from_name,
++ 1, 2, count, count + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+ count++;
+
+ compose->header_table = header_table;
+@@ -6140,15 +6134,12 @@
+ GtkWidget *vbox2;
+
+ GtkWidget *label;
+- GtkWidget *subject_hbox;
+- GtkWidget *subject_frame;
++ GtkWidget *edit_frame;
+ GtkWidget *subject_entry;
+ GtkWidget *subject;
+ GtkWidget *paned;
+
+ GtkWidget *edit_vbox;
+- GtkWidget *ruler_hbox;
+- GtkWidget *ruler;
+ GtkWidget *scrolledwin;
+ GtkWidget *text;
+ GtkTextBuffer *buffer;
+@@ -6169,8 +6160,6 @@
+ GtkAspell * gtkaspell = NULL;
+ #endif
+
+- static GdkGeometry geometry;
+-
+ g_return_val_if_fail(account != NULL, NULL);
+
+ debug_print("Creating compose window...\n");
+@@ -6190,28 +6179,6 @@
+
+ window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "compose");
+
+- gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+- gtk_widget_set_size_request(window, -1, prefs_common.compose_height);
+-
+- if (!geometry.max_width) {
+- geometry.max_width = gdk_screen_width();
+- geometry.max_height = gdk_screen_height();
+- }
+-
+- gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL,
+- &geometry, GDK_HINT_MAX_SIZE);
+- if (!geometry.min_width) {
+- geometry.min_width = 600;
+- geometry.min_height = 480;
+- }
+- gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL,
+- &geometry, GDK_HINT_MIN_SIZE);
+-
+-#ifndef MAEMO
+- if (compose_force_window_origin)
+- gtk_widget_set_uposition(window, prefs_common.compose_x,
+- prefs_common.compose_y);
+-#endif
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(compose_delete_cb), compose);
+ MANAGE_WINDOW_SIGNALS_CONNECT(window);
+@@ -6227,11 +6194,7 @@
+ n_menu_entries, "<Compose>", compose);
+ gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+
+- if (prefs_common.toolbar_detachable) {
+- handlebox = gtk_handle_box_new();
+- } else {
+- handlebox = gtk_hbox_new(FALSE, 0);
+- }
++ handlebox = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
+
+ gtk_widget_realize(handlebox);
+@@ -6244,7 +6207,6 @@
+
+ /* Notebook */
+ notebook = gtk_notebook_new();
+- gtk_widget_set_size_request(notebook, -1, 130);
+ gtk_widget_show(notebook);
+
+ /* header labels and entries */
+@@ -6258,18 +6220,10 @@
+ /* Others Tab */
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ compose_create_others(compose),
+- gtk_label_new_with_mnemonic(_("Othe_rs")));
++ gtk_label_new_with_mnemonic(_("Othe_r")));
+
+ /* Subject */
+- subject_hbox = gtk_hbox_new(FALSE, 0);
+- gtk_widget_show(subject_hbox);
+-
+- subject_frame = gtk_frame_new(NULL);
+- gtk_frame_set_shadow_type(GTK_FRAME(subject_frame), GTK_SHADOW_NONE);
+- gtk_box_pack_start(GTK_BOX(subject_hbox), subject_frame, TRUE, TRUE, 0);
+- gtk_widget_show(subject_frame);
+-
+- subject = gtk_hbox_new(FALSE, HSPACING_NARROW);
++ subject = gtk_hbox_new(FALSE, BORDER_WIDTH);
+ gtk_container_set_border_width(GTK_CONTAINER(subject), 0);
+ gtk_widget_show(subject);
+
+@@ -6283,20 +6237,16 @@
+ G_CALLBACK(compose_grab_focus_cb), compose);
+ gtk_widget_show(subject_entry);
+ compose->subject_entry = subject_entry;
+- gtk_container_add(GTK_CONTAINER(subject_frame), subject);
+
+- edit_vbox = gtk_vbox_new(FALSE, 0);
++ edit_vbox = gtk_vbox_new(FALSE, BORDER_WIDTH);
++ gtk_container_set_border_width(GTK_CONTAINER(edit_vbox), BORDER_WIDTH);
+
+- gtk_box_pack_start(GTK_BOX(edit_vbox), subject_hbox, FALSE, FALSE, 0);
++ gtk_box_pack_start(GTK_BOX(edit_vbox), subject, FALSE, FALSE, 0);
+
+- /* ruler */
+- ruler_hbox = gtk_hbox_new(FALSE, 0);
+- gtk_box_pack_start(GTK_BOX(edit_vbox), ruler_hbox, FALSE, FALSE, 0);
+-
+- ruler = gtk_shruler_new();
+- gtk_ruler_set_range(GTK_RULER(ruler), 0.0, 100.0, 1.0, 100.0);
+- gtk_box_pack_start(GTK_BOX(ruler_hbox), ruler, TRUE, TRUE,
+- BORDER_WIDTH);
++ edit_frame = gtk_frame_new(NULL);
++ gtk_frame_set_shadow_type(GTK_FRAME(edit_frame), GTK_SHADOW_IN);
++ gtk_widget_show(edit_frame);
++ gtk_container_add(GTK_CONTAINER(edit_frame), edit_vbox);
+
+ /* text widget */
+ scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+@@ -6317,9 +6267,6 @@
+
+ gtk_container_add(GTK_CONTAINER(scrolledwin), text);
+
+- g_signal_connect_after(G_OBJECT(text), "size_allocate",
+- G_CALLBACK(compose_edit_size_alloc),
+- ruler);
+ g_signal_connect(G_OBJECT(buffer), "changed",
+ G_CALLBACK(compose_changed_cb), compose);
+ g_signal_connect(G_OBJECT(text), "grab_focus",
+@@ -6363,7 +6310,7 @@
+ gtk_widget_set_size_request(edit_vbox, -1, mode == COMPOSE_NEW ? 250 : 230);
+ #endif
+ gtk_paned_add1(GTK_PANED(paned), notebook);
+- gtk_paned_add2(GTK_PANED(paned), edit_vbox);
++ gtk_paned_add2(GTK_PANED(paned), edit_frame);
+ gtk_widget_show_all(paned);
+
+
+@@ -6408,8 +6355,6 @@
+
+ compose->notebook = notebook;
+ compose->edit_vbox = edit_vbox;
+- compose->ruler_hbox = ruler_hbox;
+- compose->ruler = ruler;
+ compose->scrolledwin = scrolledwin;
+ compose->text = text;
+
+@@ -6531,13 +6476,6 @@
+
+ compose_list = g_list_append(compose_list, compose);
+
+- if (!prefs_common.show_ruler)
+- gtk_widget_hide(ruler_hbox);
+-
+- menuitem = gtk_item_factory_get_item(ifactory, "/Tools/Show ruler");
+- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
+- prefs_common.show_ruler);
+-
+ /* Priority */
+ compose->priority = PRIORITY_NORMAL;
+ compose_update_priority_menu_item(compose);
+@@ -6568,7 +6506,6 @@
+ static GtkWidget *compose_account_option_menu_create(Compose *compose)
+ {
+ GList *accounts;
+- GtkWidget *hbox;
+ GtkWidget *optmenu;
+ GtkWidget *optmenubox;
+ GtkListStore *menu;
+@@ -6584,7 +6521,6 @@
+ optmenu = gtkut_sc_combobox_create(optmenubox, FALSE);
+ menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenu)));
+
+- hbox = gtk_hbox_new(FALSE, 6);
+ from_name = gtk_entry_new();
+
+ g_signal_connect_after(G_OBJECT(from_name), "grab_focus",
+@@ -6623,9 +6559,6 @@
+ G_CALLBACK(account_activated),
+ compose);
+
+- gtk_box_pack_start(GTK_BOX(hbox), optmenubox, FALSE, FALSE, 0);
+- gtk_box_pack_start(GTK_BOX(hbox), from_name, TRUE, TRUE, 0);
+-
+ gtk_tooltips_set_tip(compose->tooltips, optmenubox,
+ _("Account to use for this email"), NULL);
+ gtk_tooltips_set_tip(compose->tooltips, from_name,
+@@ -6633,7 +6566,7 @@
+
+ compose->from_name = from_name;
+
+- return hbox;
++ return optmenubox;
+ }
+
+ static void compose_set_priority_cb(gpointer data,
+@@ -7851,32 +7784,6 @@
+
+ /* callback functions */
+
+-/* compose_edit_size_alloc() - called when resized. don't know whether Gtk
+- * includes "non-client" (windows-izm) in calculation, so this calculation
+- * may not be accurate.
+- */
+-static gboolean compose_edit_size_alloc(GtkEditable *widget,
+- GtkAllocation *allocation,
+- GtkSHRuler *shruler)
+-{
+- if (prefs_common.show_ruler) {
+- gint char_width = 0, char_height = 0;
+- gint line_width_in_chars;
+-
+- gtkut_get_font_size(GTK_WIDGET(widget),
+- &char_width, &char_height);
+- line_width_in_chars =
+- (allocation->width - allocation->x) / char_width;
+-
+- /* got the maximum */
+- gtk_ruler_set_range(GTK_RULER(shruler),
+- 0.0, line_width_in_chars, 0,
+- /*line_width_in_chars*/ char_width);
+- }
+-
+- return TRUE;
+-}
+-
+ static void account_activated(GtkComboBox *optmenu, gpointer data)
+ {
+ Compose *compose = (Compose *)data;
+@@ -9040,21 +8947,6 @@
+ compose_update_privacy_system_menu_item(compose, warn);
+ }
+
+-static void compose_toggle_ruler_cb(gpointer data, guint action,
+- GtkWidget *widget)
+-{
+- Compose *compose = (Compose *)data;
+-
+- if (GTK_CHECK_MENU_ITEM(widget)->active) {
+- gtk_widget_show(compose->ruler_hbox);
+- prefs_common.show_ruler = TRUE;
+- } else {
+- gtk_widget_hide(compose->ruler_hbox);
+- gtk_widget_queue_resize(compose->edit_vbox);
+- prefs_common.show_ruler = FALSE;
+- }
+-}
+-
+ static void compose_attach_drag_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+Index: claws-mail-2.9.1/src/folderview.c
+===================================================================
+--- claws-mail-2.9.1.orig/src/folderview.c 2007-04-03 19:10:25.000000000 +0100
++++ claws-mail-2.9.1/src/folderview.c 2007-04-25 10:28:00.000000000 +0100
+@@ -73,6 +73,11 @@
+ #define COL_FOLDER_WIDTH 150
+ #define COL_NUM_WIDTH 32
+
++/* added dummy column to stop the last column from
++ * resizing insanely in small screen view
++ */
++#define _N_FOLDER_COLS (N_FOLDER_COLS + 1)
++
+ static GList *folderview_list = NULL;
+
+ static GtkStyle *normal_style;
+@@ -448,7 +453,7 @@
+ gint *col_pos;
+ FolderColumnState *col_state;
+ FolderColumnType type;
+- gchar *titles[N_FOLDER_COLS];
++ gchar *titles[_N_FOLDER_COLS];
+ gint i;
+ GtkWidget *scrolledwin = folderview->scrolledwin;
+
+@@ -471,8 +476,9 @@
+ titles[col_pos[F_COL_UNREAD]] = _("Unread");
+ /* TRANSLATORS: This in Number sign in American style */
+ titles[col_pos[F_COL_TOTAL]] = _("#");
++ titles[F_COL_DUMMY] = "";
+
+- ctree = gtk_sctree_new_with_titles(N_FOLDER_COLS, col_pos[F_COL_FOLDER],
++ ctree = gtk_sctree_new_with_titles(_N_FOLDER_COLS, col_pos[F_COL_FOLDER],
+ titles);
+
+ gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);
+@@ -510,6 +516,9 @@
+ (GTK_CLIST(ctree), i, col_state[i].visible);
+ }
+
++ GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button,
++ GTK_CAN_FOCUS);
++
+ g_signal_connect(G_OBJECT(ctree), "key_press_event",
+ G_CALLBACK(folderview_key_pressed),
+ folderview);
+@@ -605,9 +614,6 @@
+ (GTK_SCROLLED_WINDOW(scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ prefs_common.folderview_vscrollbar_policy);
+- gtk_widget_set_size_request(scrolledwin,
+- prefs_common.folderview_width,
+- prefs_common.folderview_height);
+
+ folderview->scrolledwin = scrolledwin;
+ ctree = folderview_ctree_create(folderview);
+@@ -2268,7 +2274,7 @@
+ static void folderview_create_folder_node(FolderView *folderview, FolderItem *item)
+ {
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+- gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"};
++ gchar *text[_N_FOLDER_COLS] = {NULL, "0", "0", "0", ""};
+ GtkCTreeNode *node, *parent_node;
+ gint *col_pos = folderview->col_pos;
+ FolderItemUpdateData hookdata;
+Index: claws-mail-2.9.1/src/folderview.h
+===================================================================
+--- claws-mail-2.9.1.orig/src/folderview.h 2007-03-22 17:22:52.000000000 +0000
++++ claws-mail-2.9.1/src/folderview.h 2007-04-25 10:16:55.000000000 +0100
+@@ -37,7 +37,8 @@
+ F_COL_FOLDER,
+ F_COL_NEW,
+ F_COL_UNREAD,
+- F_COL_TOTAL
++ F_COL_TOTAL,
++ F_COL_DUMMY
+ } FolderColumnType;
+
+ #define N_FOLDER_COLS 4
diff --git a/packages/synaesthesia/.mtn2git_empty b/packages/synaesthesia/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/synaesthesia/.mtn2git_empty
diff --git a/packages/synaesthesia/synaesthesia_2.4.bb b/packages/synaesthesia/synaesthesia_2.4.bb
new file mode 100644
index 0000000000..14b96ea860
--- /dev/null
+++ b/packages/synaesthesia/synaesthesia_2.4.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Synaesthesia is a program that gives a graphical accompanyment to music."
+SECTION = "x11/multimedia"
+HOMEPAGE = "http://www.logarithmic.net/pfh/synaesthesia"
+LICENSE = "GPL"
+DEPENDS = "libx11"
+# optional
+# DEPENDS += "libsdl-x11 directfb"
+
+SRC_URI = "http://www.logarithmic.net/pfh-files/synaesthesia/synaesthesia-${PV}.tar.gz"
+
+inherit autotools
+
+
diff --git a/packages/synergy/synergy_1.3.1.bb b/packages/synergy/synergy_1.3.1.bb
new file mode 100644
index 0000000000..3a1199b385
--- /dev/null
+++ b/packages/synergy/synergy_1.3.1.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Synergy - control multiple computers with one keyboard and mouse"
+HOMEPAGE = "http://synergy2.sourceforge.net/"
+LICENSE = "GPLv2"
+SECTION = "x11/utils"
+# NOTE: This depends on full x11, not diet-x11
+DEPENDS = "libx11 libxtst"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/synergy2/synergy-${PV}.tar.gz"
+
+do_configure_prepend() {
+ grep -l -- -Werror "${S}/"* | xargs sed -i 's:-Werror::'
+}
+
+inherit autotools
diff --git a/packages/sysconf/.mtn2git_empty b/packages/sysconf/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sysconf/.mtn2git_empty
diff --git a/packages/sysconf/files/.mtn2git_empty b/packages/sysconf/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sysconf/files/.mtn2git_empty
diff --git a/packages/sysconf/files/conffiles b/packages/sysconf/files/conffiles
new file mode 100644
index 0000000000..6e6842d6cd
--- /dev/null
+++ b/packages/sysconf/files/conffiles
@@ -0,0 +1,55 @@
+# conffiles
+# Known configuration files. These files are preserved on
+# a flash upgrade. Other configuration files, found from:
+#
+# /usr/lib/ipkg/*.conffiles
+# /etc/*.conf
+#
+# are preserved too with an operation of 'diff' if they have been
+# changed since /etc/.configured was created.
+#
+# Lines starting with # are comments, other lines have
+# two fields:
+#
+# operation file
+#
+# The file must *NOT* have a leading /
+#
+# operation may be:
+# ignore Do not preserve this file
+# preserve Preserve this file unconditionally
+# diff Compare file with the new version, ask if different
+#
+preserve etc/.configured
+preserve etc/TZ
+diff etc/default/conffiles
+diff etc/default/devpts
+preserve etc/default/rcS
+preserve etc/default/sysconf
+diff etc/default/usbd
+preserve etc/defaultdomain
+preserve etc/dropbear/dropbear_dss_host_key
+preserve etc/dropbear/dropbear_rsa_host_key
+preserve etc/ssh/ssh_host_dsa_key
+preserve etc/ssh/ssh_host_dsa_key.pub
+preserve etc/ssh/ssh_host_rsa_key
+preserve etc/ssh/ssh_host_rsa_key.pub
+preserve etc/fstab
+preserve etc/group
+preserve etc/gshadow
+preserve etc/hostname
+preserve etc/hosts
+preserve etc/localtime
+ignore etc/modules
+ignore etc/modules.conf
+preserve etc/motd
+preserve etc/network/interfaces
+preserve etc/ntp.drift
+preserve etc/passwd
+preserve etc/profile
+preserve etc/resolv.conf
+preserve etc/shadow
+preserve etc/syslog.conf
+preserve etc/timezone
+preserve root/.ssh/authorized_keys
+preserve home/root/.ssh/authorized_keys
diff --git a/packages/sysconf/files/sysconf b/packages/sysconf/files/sysconf
new file mode 100644
index 0000000000..cca4dd1e79
--- /dev/null
+++ b/packages/sysconf/files/sysconf
@@ -0,0 +1,1038 @@
+#!/bin/sh
+# sysconf
+#
+# Utility to manipulate system configuration information held
+# in a System Configuration partition
+#
+
+# hardware
+# the 'Hardware' string from cpuinfo
+hardware(){
+ sed -n 's!^Hardware *: !!p' /proc/cpuinfo
+}
+#
+# machine
+# outputs an identifier of the current machine - i.e. the board
+# slugos is running on.
+machine(){
+ case "$(hardware)" in
+ *Coyote*) echo coyote;;
+ *IXDPG425*) echo ixdpg425;;
+ *WRV54G*) echo wrv54g;;
+ *IXDP425*) echo ixdp425;;
+ *IXDP465*) echo ixdp465;;
+ *IXCDP1100*) echo ixcdp1100*;;
+ *Avila*) echo avila;;
+ *Loft*) echo loft;;
+ *NAS?100d*) echo nas100d;;
+ *DSM?G600*) echo dsmg600;;
+ *NSLU2*) echo nslu2;;
+ *FSG?3*) echo fsg3;;
+ *) echo unknown;;
+ esac
+}
+
+# NSLU2 flash layout is non-standard.
+case "$(machine)" in
+nslu2)
+ kpart="Kernel"
+ syspart="SysConf"
+ ffspart="Flashdisk";;
+*)
+ kpart="kernel"
+ syspart="sysconfig"
+ ffspart="filesystem";;
+esac
+
+#
+# mtblockdev "name"
+# return (output) the block device name for flash parition "name"
+# /proc/mtd has the general form:
+# dev: size erasesize name
+# mtd5: 00020000 00020000 "FIS directory"
+# use this rather than hard-wiring the device because the partition
+# table can change - looking in /proc/mtd is more reliable.
+mtblockdev(){
+ sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock\1!p' /proc/mtd
+}
+
+#
+# sysconf_valid
+# return true if the SysConf partition exists and seems to be
+# potentially valid (it starts with a reasonable length).
+sysconf_valid(){
+ local sysdev
+ sysdev="$(mtblockdev $syspart)"
+ test -n "$sysdev" -a -b "$sysdev" &&
+ devio "<<$sysdev" '!! b.10>s32768<&!'
+}
+
+#
+# sysvalmatch "section" "name" 'pattern' "configuration file"
+# sysvalof "section" "name" "configuration file"
+# sysval "section" "name"
+# outputs the value of the SysConf variable 'name' from section 'section',
+# if there are multiple definitions only the last is output
+# NOTE: these functions should only be used internally, add entries to 'config'
+# below if necessary. This is because 'config' does the defaulting.
+sysvalmatch(){
+ sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^'"$2"'=\('"$3"'\)$/\1/p' "$4" | sed -n '$p'
+}
+sysvalof(){
+ sysvalmatch "$1" "$2" '.*' "$3"
+}
+sysval(){
+ test -r "$config_root/etc/default/sysconf" &&
+ sysvalof "$1" "$2" "$config_root/etc/default/sysconf"
+}
+#
+# syssection "section"
+# outputs all the values from the given section changed to the format "name value"
+# (i.e. the '=' is dropped).
+syssection(){
+ test -r "$config_root/etc/default/sysconf" &&
+ sed -n '/^\['"$1"'\]$/,/^\[.*\]$/s/^\([^=]*\)=\(.*\)$/\1 \2/p' "$config_root/etc/default/sysconf"
+}
+#
+# config "value"
+# convenience callers for specific values to avoid mis-typing in scripts
+# NOTE: this function does the defaulting, 'sysval' does not!
+# config_root: if set this will override the root where config/sysval
+# looks for /etc/default/sysconf
+config(){
+ case "$1" in
+ host) if test -n "$(sysval network disk_server_name)"
+ then
+ sysval network disk_server_name
+ elif test -n "$(sysval network default_server_name)"
+ then
+ sysval network default_server_name
+ else
+ # because we want the name to remain constant:
+ echo "brokenslug"
+ fi;;
+ domain) sysval network w_d_name;;
+ iface) if test -n "$(sysval network lan_interface)"
+ then
+ sysval network lan_interface
+ else
+ echo eth0
+ fi;;
+ ip) if test -n "$(sysval network ip_addr)"
+ then
+ sysval network ip_addr
+ else
+ echo 192.168.1.77
+ fi;;
+ netmask)sysval network netmask;;
+ gateway)sysval network gateway;;
+ dns) sysval network dns_server1;;
+ dns2) sysval network dns_server2;;
+ dns3) sysval network dns_server3;;
+ boot) if test -n "$(sysval network bootproto)"
+ then
+ sysval network bootproto
+ else
+ echo dhcp
+ fi;;
+ valid) test -r "$config_root/etc/default/sysconf";;
+ *) return 1;;
+ esac
+}
+
+#
+# sysconf_read [prefix]
+# read the $syspart partition (if present) writing the result into
+# /etc/default/sysconf, if the result is empty it will be removed.
+sysconf_read(){
+ local sysdev sedcmd config_root
+ config_root="$1"
+ rm -f /tmp/sysconf.new
+ sysdev="$(mtblockdev $syspart)"
+ if sysconf_valid
+ then
+ # Read the defined part of $syspart into /etc/default/sysconf.
+ # $syspart has lines of two forms:
+ #
+ # [section]
+ # name=value
+ #
+ # In practice $syspart also contains other stuff, use the command:
+ #
+ # devio '<</dev/mtd1;cpb'
+ #
+ # to examine the current settings. The badly formatted stuff
+ # is removed (to be exact, the sed script selects only lines
+ # which match one of the two above). The lan interface, which
+ # on NSLU2 defaults to ixp0, is changed to the correct value for
+ # slugos, eth0. The bootproto, which LinkSys sets to static in
+ # manufacturing, is reset to dhcp if the IP is still the
+ # original (192.168.1.77)
+ sedcmd='/^\[[^][]*\]$/p;'
+ # only do the ip_addr and lan_interface fixups on NSLU2
+ if test "$(machine)" = nslu2
+ then
+ sedcmd="$sedcmd"'
+ s/^lan_interface=ixp0$/lan_interface=eth0/;
+ /^ip_addr=192\.168\.1\.77$/,/^bootproto/s/^bootproto=static$/bootproto=dhcp/;'
+ fi
+ # and only print lines of the correct form
+ sedcmd="$sedcmd"'
+ /^[-a-zA-Z0-9_][-a-zA-Z0-9_]*=/p'
+
+ devio "<<$sysdev" cpb fb1,10 | sed -n "$sedcmd" >/tmp/sysconf.new
+ fi
+ #
+ # test the result - sysconf must be non-empty
+ if test -s /tmp/sysconf.new
+ then
+ mv /tmp/sysconf.new "$config_root/etc/default/sysconf"
+ else
+ rm -f /tmp/sysconf.new
+ return 1
+ fi
+}
+
+#
+# sysconf_default [prefix]
+# Provde a default /etc/default/sysconf when there is no $syspart partition,
+# or when it is invalid, this function will read from an existing sysconf,
+# copying the values into the new one.
+# sysconf_line tag config-tag
+# write an appropriate line if the config value is non-empty
+sysconf_line(){
+ config "$2" | {
+ local value
+ read value
+ test -n "$value" && echo "$1"="$value"
+ }
+}
+#
+sysconf_default(){
+ local config_root
+ config_root="$1"
+ { echo '[network]'
+ sysconf_line disk_server_name host
+ sysconf_line w_d_name domain
+ sysconf_line lan_interface iface
+ sysconf_line ip_addr ip
+ sysconf_line netmask netmask
+ sysconf_line gateway gateway
+ sysconf_line dns_server1 dns
+ sysconf_line dns_server2 dns2
+ sysconf_line dns_server3 dns3
+ sysconf_line bootproto boot
+ } >/tmp/sysconf.new
+ mv /tmp/sysconf.new "$config_root/etc/default/sysconf"
+}
+
+#
+# sysconf_reload [prefix]
+# read the values from /etc/default/sysconf and use these values to set
+# up the following system files:
+#
+# /etc/hostname
+# /etc/defaultdomain
+# /etc/resolv.conf
+# /etc/network/interfaces
+# /etc/motd
+#
+sysconf_reload(){
+ local config_root host domain iface boot ip netmask gateway ifname iftype
+ config_root="$1"
+ host="$(config host)"
+ test -n "$host" && echo "$host" >"$config_root/etc/hostname"
+ domain="$(config domain)"
+ test -n "$domain" && echo "$domain" >"$config_root/etc/defaultdomain"
+ #
+ # The DNS server information gives up to three nameservers,
+ # but this currently only binds in the first.
+ {
+ test -n "$domain" && echo "search $domain"
+ test -n "$(config dns)" && echo "nameserver $(config dns)"
+ test -n "$(config dns2)" && echo "nameserver $(config dns2)"
+ test -n "$(config dns3)" && echo "nameserver $(config dns3)"
+ } >"$config_root/etc/resolv.conf"
+ #
+ # Ethernet information. This goes into /etc/network/interfaces,
+ # however this is only used for static setup (and this is not
+ # the default). With dhcp the slugos udhcp script,
+ # /etc/udhcpc.d/50default, loads the values from sysconf.
+ iface="$(config iface)"
+ boot="$(config boot)"
+ # Only dhcp and static are supported at present - bootp
+ # support requires installation of appropriate packages
+ # dhcp is the fail-safe
+ case "$boot" in
+ dhcp|static) ;;
+ *) boot=dhcp;;
+ esac
+ #
+ ip="$(config ip)"
+ netmask="$(config netmask)"
+ gateway="$(config gateway)"
+ {
+ echo "# /etc/network/interfaces"
+ echo "# configuration file for ifup(8), ifdown(8)"
+ echo "#"
+ echo "# The loopback interface"
+ echo "auto lo"
+ echo "iface lo inet loopback"
+ echo "#"
+ echo "# The interface used by default during boot"
+ echo "auto $iface"
+ echo "# Automatically generated from /etc/default/sysconf"
+ echo "# address, netmask and gateway are ignored for 'dhcp'"
+ echo "# but required for 'static'"
+ echo "iface $iface inet $boot"
+ # The following are ignored for DHCP but are harmless
+ test -n "$ip" && echo " address $ip"
+ test -n "$netmask" && echo " netmask $netmask"
+ test -n "$gateway" && echo " gateway $gateway"
+ #
+ # Now read all the other ARPHRD_ETHER (type=1) interfaces
+ # and add an entry for each.
+ for ifname in $(test -d /sys/class/net && ls /sys/class/net)
+ do
+ if test -r "/sys/class/net/$ifname/type" -a "$ifname" != "$iface"
+ then
+ read iftype <"/sys/class/net/$ifname/type"
+ case "$iftype" in
+ 1) echo "#"
+ echo "# /sys/class/net/$ifname:"
+ echo "auto $ifname"
+ echo "iface $ifname inet dhcp";;
+ esac
+ fi
+ done
+ } >"$config_root/etc/network/interfaces"
+ #
+ # Finally rewrite /etc/motd
+ { echo "Host name: $host"
+ echo "Domain name: $domain"
+ echo "Network boot method: $boot"
+ case "$boot" in
+ static) echo "Host IP address: $ip";;
+ esac
+ echo "Use 'sysconf init' to reset the configuration"
+ echo "Use 'sysconf save' to save the configuration permanently"
+ echo "Use 'sysconf restore' to restore a previously saved configuration"
+ echo "Use 'sysconf help' for more information"
+ } >"$config_root/etc/motd"
+}
+
+#
+# sysconf_save_conffiles <flash-directory> <dest> <list>
+# preserve the configuration files in a directory or in a CPIO archive
+# (which is *not* compressed). If <dest> is a directory the files are
+# copied, otherwise a CPIO archive is made with that name. <list> is
+# the listing file giving the preserved files and the processing option.
+sysconf_save_conffiles(){
+ local ffsdir dest list file
+ ffsdir="$1"
+ saved="$2"
+ list="$3"
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -n "$saved" -a -n "$list" || {
+ echo "sysconf_save_conffiles: invalid arguments: '$*'" >&2
+ echo " usage sysconf_save_conffiles <flash-directory> <dest> <list>" >&2
+ return 1
+ }
+ #
+ ( cd "$ffsdir"
+ find etc/*.conf $(sed 's!^/!!' usr/lib/ipkg/info/*.conffiles) ! -type d -newer etc/.configured -print |
+ sed 's/^/diff /'
+ exec sed 's/#.*$//;/^[ ]*$/d' etc/default/conffiles
+ ) | sed 's!^/*!!' |
+ awk '{ op=$1; $1=""; file[$0]=op }
+ END{ for (f in file) if (file[f] != "ignore") print file[f] f }' |
+ while read op file
+ do
+ if test -e "$ffsdir/$file"
+ then
+ echo "$op $file" >&3
+ echo "$file"
+ fi
+ done 3>"$list" | (
+ cd "$ffsdir"
+ if test -d "$saved"
+ then
+ exec cpio -p -d -m -u "$saved"
+ else
+ exec cpio -o -H crc >"$saved"
+ fi
+ )
+}
+
+#
+# sysconf_verify file
+# this is called with the name of a 'diff' file which is, indeed,
+# different and with all the std streams connected to the tty. It
+# returns a status code to say whether (0) or not (1) to copy the
+# file over.
+#
+# globals: the following must be defined in the calling context!
+# saved: the directory containing the unpacked saved files
+# ffsdir: the flash directory to which the files are being restored (/)
+#
+sysconf_verify_help() {
+ echo "Please specify how to handle this file or link, the options are as follows,"
+ echo "two character abbreviations may be used:"
+ echo
+ echo " keep: retain the old file, overwrite the new flash image file"
+ echo " upgrade: retain the new file, the old (saved) file is not used"
+ echo " diff: display the differences between the old and the new using diff -u"
+ echo " shell: temporarily start an interactive shell (sh -i), exit to continue"
+ echo " skip: ignore this file for the moment. The file is left in the directory"
+ echo " $saved and many be handled after this script has completed"
+}
+#
+sysconf_verify() {
+ local command file
+
+ # return 1 here causes the file not to be overwritten,
+ # control should never get here!
+ test -n "$sysconf_noninteractive" && {
+ echo "$0: $*: changed file cannot be handled non-interactively" >&2
+ return 1
+ }
+
+ file="$1"
+ echo "$0: $file: configuration file changed."
+ sysconf_verify_help "$file"
+ while :
+ do
+ echo -n "option: "
+ read command
+ case "$command" in
+ ke*) return 0;;
+ up*) rm "$saved/$file"
+ return 1;;
+ di*) echo "DIFF OLD($saved) NEW($ffsdir)"
+ diff -u "$saved/$file" "$ffsdir/$file";;
+ sh*) PS1="$file: " sh -i;;
+ sk*) return 1;;
+ *) sysconf_verify_help "$file";;
+ esac
+ done
+}
+# the same, but for a link
+sysconf_verify_link() {
+ local command link
+
+ # return 1 here causes the file not to be overwritten,
+ # control should never get here!
+ test -n "$sysconf_noninteractive" && {
+ echo "$0: $*: changed link cannot be handled non-interactively" >&2
+ return 1
+ }
+
+ link="$1"
+ echo "reflash: $link: configuration link changed."
+ sysconf_verify_help "$link"
+ while :
+ do
+ echo -n "option: "
+ read command
+ case "$command" in
+ ke*) return 0;;
+ up*) rm "$saved/$link"
+ return 1;;
+ di*) echo "DIFF:"
+ echo "OLD($saved): $link -> $(readlink "$saved/$link")"
+ echo "NEW($ffsdir): $link -> $(readlink "$ffsdir/$link")";;
+ sh*) PS1="$link: " sh -i;;
+ sk*) return 1;;
+ *) sysconf_verify_help "$link";;
+ esac
+ done
+}
+
+#
+# sysconf_restore_conffiles <flash-directory> <source-dir> <restore>
+# restore the configuration files from a directory. 'source-dir'
+# If <source> is a directory of files from sysconf_save_conffiles. The
+# list of files restored is written to the third argument (restore),
+# but is not required (/dev/null would be ok).
+#
+# the list of files to restore is read from stdin, along with the
+# processing option for each file (the format is as produced by
+# sysconf_save_conffiles in the 'list' output).
+sysconf_restore_conffiles(){
+ local ffsdir saved restore
+ # these are the globals used by the above function
+ ffsdir="$1"
+ saved="$2"
+ restore="$3"
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -d "$saved" -a -n "$restore" || {
+ echo "restore_conffiles: invalid arguments: '$*'" >&2
+ echo " usage sysconf_restore_conffiles <flash-directory> <source-dir> <list>" >&2
+ return 1
+ }
+ #
+ # read the list and process each given file
+ while read op file
+ do
+ # handle .configured specially (to preserve the original datestamp)
+ if test "$file" = "etc/.configured"
+ then
+ # this should definately not fail because of the test above!
+ if cp -a "$saved/$file" "$ffsdir/$file"
+ then
+ echo "$file" >&3
+ else
+ echo "sysconf_restore_conffiles: $file: timestamp copy failed (ignored)" >&2
+ fi
+ elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ then
+ # new or old symbolic link
+ if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
+ test "$(readlink "$saved/$file")" = "$(readlink "$ffsdir/$file")"
+ then
+ # no change
+ echo "$file" >&3
+ else
+ # assume a change regardless
+ case "$op" in
+ preserve)
+ echo "$file"
+ echo "$file" >&3;;
+ diff) # need user input
+ if sysconf_verify_link "$file" <>/dev/tty >&0 2>&0
+ then
+ echo "$file"
+ echo "$file" >&3
+ fi;;
+ esac
+ fi
+ else
+ # only overwrite if necessary
+ if test -e "$ffsdir/$file" && cmp -s "$saved/$file" "$ffsdir/$file"
+ then
+ # do not overwrite
+ echo "$file" >&3
+ elif test ! -e "$ffsdir/$file"
+ then
+ # always preserve
+ echo "$file"
+ echo "$file" >&3
+ else
+ case "$op" in
+ preserve)
+ echo "$file"
+ echo "$file" >&3;;
+ diff) # the files are different, get user input
+ if sysconf_verify "$file" <>/dev/tty >&0 2>&0
+ then
+ echo "$file"
+ echo "$file" >&3
+ fi;;
+ esac
+ fi
+ fi
+ done 3>"$restore" | (cd "$saved"; exec cpio -p -d -u "$ffsdir")
+}
+
+#
+# sysconf_test_restore <flash-directory> <source-dir>
+# return true only if the restore does not need to do an interactive
+# compare
+sysconf_test_restore(){
+ local ffsdir saved
+ # these are the globals used by the above function
+ ffsdir="$1"
+ saved="$2"
+ # this is an error case, but return 0 so that the error is
+ # detected later
+ test -n "$ffsdir" -a -r "$ffsdir/etc/default/conffiles" -a -d "$saved" ||
+ return 0
+ #
+ # read the list and check each diff file (this is just a copy of the
+ # logic above with all the work removed!)
+ while read op file
+ do
+ # handle .configured specially (to preserve the original datestamp)
+ if test "$op" != diff
+ then
+ : # no diff required
+ elif test "$file" = "etc/.configured"
+ then
+ : # special handling
+ elif test -h "$saved/file" -o -h "$ffsdir/$file"
+ then
+ # new or old symbolic link
+ if test -h "$saved/$file" -a -h "$ffsdir/$file" &&
+ test "$(readlink "$saved/$file")" = "$(readlink "$ffsdir/$file")"
+ then
+ : # no change
+ else
+ # assume a change regardless
+ return 1
+ fi
+ else
+ # only overwrite if necessary
+ if test -e "$ffsdir/$file" && cmp -s "$saved/$file" "$ffsdir/$file"
+ then
+ : # do not overwrite
+ elif test ! -e "$ffsdir/$file"
+ then
+ : # always preserve
+ else
+ # a change
+ return 1
+ fi
+ fi
+ done
+
+ return 0
+}
+
+#
+# mountflash "flash device" "flash root directory" {mount options}
+# Finds and mounts the flash file system on the given directory
+mountflash(){
+ local ffsdev ffsdir
+
+ ffsdev="$1"
+ test -n "$ffsdev" -a -b "$ffsdev" || {
+ echo "$0: unable to find flash file system to copy ($ffsdev)" >&2
+ return 1
+ }
+ shift
+
+ ffsdir="$1"
+ test -n "$ffsdir" -a -d "$ffsdir" || {
+ echo "$0: mountflash $ffsdir: not a directory (internal error)" >&2
+ return 1
+ }
+ shift
+
+ mount -t jffs2 "$@" "$ffsdev" "$ffsdir" || {
+ echo "$0: $ffsdev: unable to mount flash file system on $ffsdir" >&2
+ return 1
+ }
+ return 0
+}
+
+#
+# umountflash [-r] "flash device"
+# unmount any instance of the given flash device, if -r is specified a mount on
+# root is an error, otherwise a mount on root is ignored (and remains).
+umountflash(){
+ local rootok ffsno ffsdev
+ rootok=1
+ case "$1" in
+ -r) rootok=
+ shift;;
+ esac
+ #
+ # The argument is ffsdev
+ ffsdev="$1"
+ ffsno="$(devio "<<$ffsdev" prd)"
+ test -n "$ffsno" -a "$ffsno" -ge 0 || {
+ echo "$0: $ffsdev: device number $ffsno is not valid, cannot continue." >&2
+ return 1
+ }
+ #
+ # Make sure that Flashdisk isn't mounted on /
+ if test -z "$rootok" -a "$(devio "<</etc/init.d/sysconfsetup" prd)" -eq "$ffsno"
+ then
+ echo "$0: $ffsdev is mounted on /, unable to continue" >&2
+ return 1
+ fi
+ #
+ # check each mount point, do this last first because otherwise nested
+ # mounts of ffsdev cannot be umounted.
+ ffs_umount() {
+ local device mp type options stuff
+
+ read device mp type options stuff
+ test -z "$device" && return 0
+
+ # handle following entries first
+ ffs_umount || return 1
+
+ # handle this entry, since this is currently only used for unmounting
+ # the flash root partition we know a file which must exist...
+ case "$mp/$type" in
+ //jffs2);; # skip /
+ */jffs2)test "$(devio "<<$mp/etc/init.d/sysconfsetup" prd 2>/dev/null)" -ne "$ffsno" ||
+ umount "$mp" || {
+ echo "$0: $mp: unable to umount $ffsdev" >&2
+ return 1
+ };;
+ esac
+
+ return 0
+ }
+ #
+ ffs_umount </proc/mounts || {
+ echo "$0: umount $ffsdev from all mount points then re-run $0" >&2
+ return 1
+ }
+
+ return 0
+}
+
+#
+# sysconf_save
+# save the system configuration to $syspart - $syspart must exist and
+# there must be a writeable device for it.
+sysconf_save(){
+ local sysdev ffsdev ffsdir saved list size status
+ ffsdev="$(mtblockdev $ffspart)"
+ sysdev="$(mtblockdev $syspart)"
+ status=1
+ if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev"
+ then
+ # this will succeed silently if the flash device is on /
+ umountflash "$ffsdev" || exit 1
+ #
+ # Everything is umounted, now remount on a temporary directory.
+ ffsdir="/tmp/flashdisk.$$"
+ mkdir "$ffsdir" || {
+ echo "$0: $ffsdir: failed to create temporary directory" >&2
+ exit 1
+ }
+ #
+ mountflash "$ffsdev" "$ffsdir" -o ro || {
+ rmdir "$ffsdir"
+ exit 1
+ }
+ # need temporary files for the cpio output and the listing
+ saved=/tmp/cpio.$$
+ list=/tmp/preserve.$$
+ rm -rf "$saved" "$list"
+ sysconf_save_conffiles "$ffsdir" "$saved" "$list" || {
+ echo "$0: $saved: archive of saved configuration files failed" >&2
+ rm -rf "$saved"
+ rm "$list"
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ return 1
+ }
+ # ignore the error in this case:
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ #
+ # we now have:
+ # /etc/default/sysconf the basic config
+ # /tmp/preserve.$$ the list of saved files
+ # /tmp/cpio.$$ the CPIO archive of those files
+ #
+ # make one big file with the sysconf data followed by the
+ # compressed archive in /tmp/sysconf.$$
+ { { cat /etc/default/sysconf
+ echo '[preserve]'
+ } | sed -n '1,/^\[preserve\]^/p'
+ while read op file
+ do
+ echo "$op"="$file"
+ done <"$list"
+ } >/tmp/sysconf.$$
+ size="$(devio "<</tmp/sysconf.$$" 'pr$')"
+ gzip -9 <"$saved" >>/tmp/sysconf.$$
+ #
+ # more cleanup, then try to write the new sysconf to $syspart
+ # the format is a 4 byte big-endian length then the text data
+ # if the data won't fit exit with error code 7
+ rm "$saved" "$list"
+ devio -p "<</tmp/sysconf.$$" ">>$sysdev" '
+ $( $4+ # >
+ !! 7
+ $) 0
+ wb '"$size"',4
+ cp $'
+ case $? in
+ 0) echo " done" >&2
+ status=0;;
+ 1) echo " failed" >&2
+ echo " $syspart could not be written (no changes made)" >&2;;
+ 3) echo " failed" >&2
+ echo " $syspart partially written, you may want to reset it" >&2;;
+ 7) echo " failed" >&2
+ echo " $syspart is too small: $size bytes required" >&2
+ echo " No change made" >&2;;
+ *) echo " failed" >&2
+ echo " Internal error writing $syspart" >&2;;
+ esac
+ #
+ rm -f /tmp/sysconf.$$
+ else
+ echo "sysconf save: $syspart or $ffspart partition not found" >&2
+ echo " A RedBoot partition named '$syspart' must exist in the system" >&2
+ echo " flash memory for this command to work, and there must be a" >&2
+ echo " block device to access this partition (udev will normally" >&2
+ echo " create this automatically. The flash partition contents must" >&2
+ echo " also be accessible in a partition called '$ffspart'" >&2
+ echo
+ echo " To create the $syspart partition use the 'fis create' command" >&2
+ echo " in the RedBoot boot loader, it is sufficient to make the" >&2
+ echo " partition one erase block in size unless you have substantially" >&2
+ echo " increased the size of the files listed in /etc/default/conffiles" >&2
+ fi
+
+ return $status
+}
+
+#
+# sysconf_restore [auto]
+# restore previously saved configuration information from $syspart
+sysconf_restore_error(){
+ local root
+ root="$1"
+ shift
+ # -------------------------------------------------------------------------------
+ { echo " WARNING: saved configuration files not restored"
+ test -n "$1" && echo "$*"
+ echo
+ echo "The configuration of this machine has been reinitialised using the values"
+ echo "from /etc/default/sysconf, however configuration files saved in the $syspart"
+ echo "partition have not been restored."
+ echo
+ echo "You can restore these files by correcting any reported errors then running"
+ echo
+ echo " sysconf restore"
+ echo
+ echo "from the command line. This will completely reinitialise the configuration"
+ echo "using the information in the $syspart partition."
+ } >"$root/etc/motd"
+ cat "$root/etc/motd" >&2
+}
+#
+sysconf_restore(){
+ local sysdev ffsdev ffsdir saved restore size status sysconf_noninteractive config_root
+
+ # if set this means 'do no diff' - this avoids the code above which
+ # would open /dev/tty and therefore allows this stuff to be done from
+ # an init script
+ sysconf_noninteractive=
+ test "$1" = auto && sysconf_noninteractive=1
+
+ ffsdev="$(mtblockdev $ffspart)"
+ sysdev="$(mtblockdev $syspart)"
+ status=1
+ if test -n "$sysdev" -a -b "$sysdev" -a -n "$ffsdev" -a -b "$ffsdev" &&
+ sysconf_valid
+ then
+ # this will succeed silently if the flash device is on /
+ umountflash "$ffsdev" || exit 1
+ #
+ # Everything is umounted, now remount on a temporary directory.
+ ffsdir="/tmp/flashdisk.$$"
+ config_root="$ffsdir"
+ mkdir "$ffsdir" || {
+ echo "$0: $ffsdir: failed to create temporary directory" >&2
+ exit 1
+ }
+ #
+ mountflash "$ffsdev" "$ffsdir" || {
+ rmdir "$ffsdir"
+ exit 1
+ }
+ #
+ # first restore the $syspart section
+ sysconf_read "$ffsdir" || sysconf_default "$ffsdir"
+ #
+ # now use this to regenerate the system files
+ sysconf_reload "$ffsdir"
+ #
+ # now examine the [preserve] section, if it is there restore
+ # it if possible.
+ if test -n "$(syssection preserve)"
+ then
+ # 'saved' is a directory, 'restore' is a file (which is
+ # used to detect unrestored files). The directory needs
+ # to be populated with files.
+ saved=/tmp/cpio.$$
+ restore=/tmp/restore.$$
+ rm -rf "$saved" "$restore"
+ #
+ mkdir "$saved" || {
+ sysconf_restore_error "$ffsdir" "$saved: failed to create temporary directory"
+ return 1
+ }
+ #
+ # the CPIO archive is gzip compressed after the text part
+ # of sysconf, gzip will handle the LZ stream termination
+ # correctly (and break the pipe) so we don't need to know
+ # the real length of the data
+ devio "<<$sysdev" '<=b4+.' 'cp $s-' | gunzip | (
+ cd "$saved"
+ exec cpio -i -d -m -u
+ ) || {
+ rm -rf "$saved"
+ sysconf_restore_error "$ffsdir" "$saved: cpio -i failed"
+ return 1
+ }
+ # either there must be no 'diff' files or it must
+ # be possible to interact with a real user.
+ if test -z "$sysconf_noninteractive" ||
+ syssection preserve | sysconf_test_restore "$ffsdir" "$saved"
+ then
+ #
+ # remove the 'init' motd from sysconf_reload
+ rm "$ffsdir/etc/motd"
+ #
+ # now restore from the directory, using the information in
+ # the preserve section, if this fails in a non-interactive
+ # setting the system might not reboot
+ syssection preserve |
+ sysconf_restore_conffiles "$ffsdir" "$saved" "$restore" || {
+ # there is a chance of the user cleaning this up
+#------------------------------------------------------------------------------
+ sysconf_restore_error "$ffsdir" \
+"$0: $saved: restore of saved configuration files failed.
+ The flash file system is mounted on $ffsdir.
+ The saved files are in $saved and the list of files selected for
+ restore is in $restore.
+ You should restore any required configuration from $saved, then umount
+ $ffsdir and reboot."
+ # this prevents cleanup/umount
+ return 1
+ }
+ #
+ # remove the copied files (i.e. the ones which were preserved)
+ ( cd "$saved"
+ exec rm $(cat "$restore")
+ )
+ rm "$restore"
+ #
+ # clean up, files left in $saved need to be handled by the user
+ files="$(find "$saved" ! -type d -print)"
+ if test -n "$files"
+ then
+#------------------------------------------------------------------------------
+ sysconf_restore_error "$ffsdir" \
+"$0: some saved configuration files have not been handled:
+
+$files
+
+These files can be examined in $saved and restored to
+$ffsdir if required. The saved files are in a temporary
+directory and will not be retained across a reboot - copy then elsewhere if
+you are unsure whether they are needed."
+ return 1
+ fi
+ #
+ # so this is safe now (no files, links etc)
+ rm -rf "$saved"
+ else
+ rm -rf "$saved"
+ # non-interactive and some changed diff files
+ sysconf_restore_error "$ffsdir" \
+"$0: some of the saved configuration files must be
+examined before restoration"
+ # but continue to the umount
+ fi
+ fi
+ #
+ # ignore the error in this case:
+ umount "$ffsdir" && rmdir "$ffsdir" ||
+ echo "$0: $ffsdir: temporary directory cleanup failed" >&2
+ status=0
+ else
+ echo "sysconf restore: $syspart or $ffspart partition not found" >&2
+ echo " You must have used 'sysconf save' to save configuration data" >&2
+ echo " into the $syspart partition before using this command. The command" >&2
+ echo " will restore the configuration data to the flash root partition" >&2
+ echo " named '$ffspart' - this must also be accessible." >&2
+ fi
+
+ return $status
+}
+
+#
+# read_one 'prompt' 'group' 'name'
+# read a single value
+read_one() {
+ local n o
+ o="$(sysval "$2" "$3")"
+ echo -n "$1 [$o]: " >/dev/tty
+ read n </dev/tty
+ test -z "$n" && n="$o"
+ eval "$3='$n'"
+}
+
+#
+# sysconf_init
+# Change the network initialisation
+sysconf_init() {
+ read_one "Host name" network disk_server_name
+ read_one "Domain name" network w_d_name
+ read_one "Boot protocol (dhcp|static)" network bootproto
+ case "$bootproto" in
+ static) read_one "IP address" network ip_addr
+ read_one "IP netmask" network netmask
+ read_one "IP gateway" network gateway
+ read_one "First DNS server" network dns_server1
+ read_one "Second DNS server" network dns_server2
+ read_one "Third DNS server" network dns_server3
+ echo "$ip_addr $disk_server_name" >> /etc/hosts
+ ;;
+ dhcp) sed -i -e "s/localhost\$/localhost $disk_server_name/" /etc/hosts
+ ;;
+ *) bootproto=dhcp;;
+ esac
+ #
+ # The other stuff which cannot be changed
+ lan_interface="$(config iface)"
+ #
+ # Write this out to a new sysconf
+ { echo "[network]"
+ echo "lan_interface=$lan_interface"
+ test -n "$disk_server_name" && echo "disk_server_name=$disk_server_name"
+ test -n "$w_d_name" && echo "w_d_name=$w_d_name"
+ echo "bootproto=$bootproto"
+ case "$bootproto" in
+ static) echo "ip_addr=$ip_addr"
+ test -n "$netmask" && echo "netmask=$netmask"
+ test -n "$gateway" && echo "gateway=$gateway"
+ test -n "$dns_server1" && echo "dns_server1=$dns_server1"
+ test -n "$dns_server2" && echo "dns_server2=$dns_server2"
+ test -n "$dns_server3" && echo "dns_server3=$dns_server3"
+ ;;
+ esac
+ } >/etc/default/sysconf
+ #
+ # And reload the result
+ sysconf_reload
+ #
+ # The remove the spurious 'init' motd
+ rm /etc/motd
+}
+
+#
+# sysconf_help
+# help text
+sysconf_help(){
+ # -------------------------------------------------------------------------------
+ echo "sysconf: usage: sysconf init|read|default|reload|save|restore" >&2
+ echo " init: initialise network information when DHCP is not available" >&2
+ echo " read: the current $syspart partition is read into /etc/default/sysconf" >&2
+ echo " default: a default /etc/default/sysconf is created" >&2
+ echo " reload: system configuration files are recreated from /etc/default/sysconf" >&2
+ echo " save: /etc/default/sysconf and the files listed in /etc/default/conffiles" >&2
+ echo " are written to the $syspart partition" >&2
+ echo " restore: the configuration information in the $syspart partition saved by" >&2
+ echo " 'sysconf save' is restored" >&2
+}
+
+#
+# the real commands
+sysconf_command="$1"
+test $# -gt 0 && shift
+case "$sysconf_command" in
+init) sysconf_init "$@";;
+read) sysconf_read "$@";;
+default)sysconf_default "$@";;
+reload) sysconf_reload "$@";;
+save) sysconf_save "$@";;
+restore)sysconf_restore "$@";;
+valid) sysconf_valid "$@";;
+
+sysconf)# just load the functions
+ ;;
+
+*) # help text
+ sysconf_help "$@";;
+esac
diff --git a/packages/sysconf/files/sysconfsetup b/packages/sysconf/files/sysconfsetup
new file mode 100644
index 0000000000..602442f4ff
--- /dev/null
+++ b/packages/sysconf/files/sysconfsetup
@@ -0,0 +1,53 @@
+#!/bin/sh
+# This script is run once when the system first boots. Its sole
+# purpose is to create /etc/default/sysconf (the overall system
+# configuration file) and other files derived from this.
+#
+# The script runs immediately after S10checkroot.sh - this is the
+# point at which the rootfs will be mounted rw even if the kernel
+# booted with it ro.
+#
+# rm or mv the file (/etc/default/sysconf) to recreate it, run this
+# script with the reload option to overwrite the system files. The
+# configuration files described in sysconf_reload (in
+# /sbin/sysconf) will be overwritten on reload.
+#
+# start: standard startup, do a complete (auto) restore if necessary
+# reinit: always do a complete auto restore
+# reload: just reload sysconf (no config files!)
+#
+# load_functions "source"
+# load the functions in '/sbin/source' - relies on /sbin/source being
+# a shell script and having support for this function.
+load_functions(){
+ test -n "$1" -a -x "/sbin/$1" && . "/sbin/$1" || {
+ echo "$0: /sbin/$1: script not found" >&2
+ return 1
+ }
+}
+
+load_functions sysconf || exit 1
+
+case "$1" in
+start) test -s /etc/default/sysconf || {
+ if sysconf_read
+ then
+ if sysconf_valid
+ then
+ sysconf_restore auto
+ else
+ sysconf_reload
+ fi
+ else
+ sysconf_default
+ sysconf_reload
+ fi
+ };;
+
+reload) test -s /etc/default/sysconf || sysconf_read || sysconf_default
+ sysconf_reload;;
+
+reinit) sysconf_restore auto;;
+
+*) ;;
+esac
diff --git a/packages/sysconf/sysconf_0.1.bb b/packages/sysconf/sysconf_0.1.bb
new file mode 100644
index 0000000000..e6bb3f29bb
--- /dev/null
+++ b/packages/sysconf/sysconf_0.1.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "System Configuration save/restore functionality"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "devio cpio findutils diffutils"
+PR = "r9"
+
+# Currently, the scripts only support ixp4xx machines.
+# Feel free to add to the scripts ...
+COMPATIBLE_MACHINE = '(ixp4xx|nslu2)'
+
+SRC_URI = "file://sysconfsetup \
+ file://conffiles \
+ file://sysconf \
+ "
+
+SCRIPTS = "sysconf"
+INITSCRIPTS = "sysconfsetup"
+
+# This just makes things easier...
+S="${WORKDIR}"
+
+do_install() {
+ # Directories
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d \
+ ${D}${base_sbindir}
+
+ # Init scripts
+ install -m 0755 sysconfsetup ${D}${sysconfdir}/init.d/
+
+ # Configuration files
+ install -m 0644 conffiles ${D}${sysconfdir}/default
+
+ # Shell scripts
+ install -m 0755 sysconf ${D}${base_sbindir}/sysconf
+}
+
+pkg_postinst() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt sysconfsetup start 12 S .
+}
+
+pkg_postrm() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt sysconfsetup remove
+}
+
+CONFFILES = "${sysconfdir}/default/conffiles"
diff --git a/packages/sysfsutils/sysfsutils_2.0.0.bb b/packages/sysfsutils/sysfsutils_2.0.0.bb
index 1c0bb8bbce..c4192cabb4 100644
--- a/packages/sysfsutils/sysfsutils_2.0.0.bb
+++ b/packages/sysfsutils/sysfsutils_2.0.0.bb
@@ -2,6 +2,7 @@ DESCRIPTION = "System Utilities Based on Sysfs"
HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
LICENSE = "GPLv2"
PROVIDES = "libsysfs"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
S = "${WORKDIR}/sysfsutils-${PV}"
@@ -18,5 +19,5 @@ do_stage () {
}
PACKAGES_prepend = "libsysfs "
-FILES_libsysfs = "${libdir}/*.so.2.0.0"
+FILES_libsysfs = "${libdir}/*.so.*"
diff --git a/packages/syslinux/syslinux-native_3.36.bb b/packages/syslinux/syslinux-native_3.36.bb
new file mode 100644
index 0000000000..d9019a4ab4
--- /dev/null
+++ b/packages/syslinux/syslinux-native_3.36.bb
@@ -0,0 +1,3 @@
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/boot/syslinux/syslinux-${PV}.tar.bz2 "
+
+require syslinux3.inc
diff --git a/packages/syslinux/syslinux3.inc b/packages/syslinux/syslinux3.inc
index 25942aab84..95124d6160 100644
--- a/packages/syslinux/syslinux3.inc
+++ b/packages/syslinux/syslinux3.inc
@@ -8,6 +8,7 @@ do_stage() {
install -d ${STAGING_BINDIR}
install -m 755 ${STAGE_TEMP}/usr/bin/syslinux ${STAGING_BINDIR}
+ install -m 755 ${STAGE_TEMP}/sbin/extlinux ${STAGING_BINDIR}
# When building media, the syslinux binary isn't nearly as useful
# as the DOS data files, so we copy those into a special location
diff --git a/packages/sysvinit/sysvinit/angstrom/rc b/packages/sysvinit/sysvinit/angstrom/rc
index e43ddec14b..30b69ad516 100755
--- a/packages/sysvinit/sysvinit/angstrom/rc
+++ b/packages/sysvinit/sysvinit/angstrom/rc
@@ -1,5 +1,4 @@
#!/bin/sh
-
#
# rc This file is responsible for starting/stopping
# services when the runlevel changes.
@@ -21,13 +20,12 @@ export VERBOSE
startup_progress() {
step=$(($step + $step_change))
-
- if [ $(($num_steps + $first_step)) -lt 1 ]; then
- num_steps="1"
- first_step="0"
+ if [ "$num_steps" != "0" ]; then
+ progress=$((($step * $progress_size / $num_steps) + $first_step))
+ else
+ progress=$progress_size
fi
-
- progress=$(($step * $progress_size / $num_steps + $first_step))
+ #echo "PROGRESS is $progress $runlevel $first_step + ($step of $num_steps) $step_change $progress_size"
if type psplash-write >/dev/null 2>&1; then
TMPDIR=/mnt/.psplash psplash-write "PROGRESS $progress" || true
fi
@@ -93,10 +91,10 @@ startup() {
case "$runlevel" in
0|6)
- # Count down from 0 to -100 and use the entire bar
- first_step=0
+ # Count down from -100 to 0 and use the entire bar
+ first_step=-100
progress_size=100
- step_change=-1
+ step_change=1
;;
S)
# Begin where the initramfs left off and use 2/3
@@ -113,6 +111,17 @@ startup() {
;;
esac
+ num_steps=0
+ for s in /etc/rc$runlevel.d/[SK]*; do
+ case "${s##/etc/rc$runlevel.d/S??}" in
+ gdm|xdm|kdm|reboot|halt)
+ break
+ ;;
+ esac
+ num_steps=$(($num_steps + 1))
+ done
+ step=0
+
# First, run the KILL scripts.
if [ $previous != N ]
then
@@ -126,18 +135,6 @@ startup() {
done
fi
- num_steps=0
- for s in /etc/rc$runlevel.d/[SK]*; do
- case "${s##/etc/rc$runlevel.d/S??}" in
- gdm|xdm|kdm|reboot|halt)
- break
- ;;
- esac
- num_steps=$(($num_steps + 1))
- done
-
- step=0
-
# Now run the START scripts for this runlevel.
for i in /etc/rc$runlevel.d/S*
do
@@ -170,9 +167,10 @@ startup() {
done
fi
-if [ "x$runlevel" != "xS" ]; then
- if type psplash-write >/dev/null 2>&1; then
- TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
- umount /mnt/.psplash
- fi
-fi
+#Uncomment to cause psplash to exit manually, otherwise it exits when it sees a VC switch
+#if [ "x$runlevel" != "xS" ]; then
+# if type psplash-write >/dev/null 2>&1; then
+# TMPDIR=/mnt/.psplash psplash-write "QUIT" || true
+# umount /mnt/.psplash
+# fi
+#fi
diff --git a/packages/sysvinit/sysvinit/htcuniversal/inittab b/packages/sysvinit/sysvinit/htcuniversal/inittab
deleted file mode 100644
index 6abbdf4558..0000000000
--- a/packages/sysvinit/sysvinit/htcuniversal/inittab
+++ /dev/null
@@ -1,30 +0,0 @@
-# /etc/inittab: init(8) configuration.
-# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
-
-# The default runlevel.
-id:5:initdefault:
-
-# Boot-time system configuration/initialization script.
-# This is run first except when booting in emergency (-b) mode.
-si::sysinit:/etc/init.d/rcS
-
-# What to do in single-user mode.
-~~:S:wait:/sbin/sulogin
-
-# /etc/init.d executes the S and K scripts upon change
-# of runlevel.
-#
-# Runlevel 0 is halt.
-# Runlevel 1 is single-user.
-# Runlevels 2-5 are multi-user.
-# Runlevel 6 is reboot.
-
-l0:0:wait:/etc/init.d/rc 0
-l1:1:wait:/etc/init.d/rc 1
-l2:2:wait:/etc/init.d/rc 2
-l3:3:wait:/etc/init.d/rc 3
-l4:4:wait:/etc/init.d/rc 4
-l5:5:wait:/etc/init.d/rc 5
-l6:6:wait:/etc/init.d/rc 6
-# Normally not reached, but fallthrough in case of emergency.
-z6:6:respawn:/sbin/sulogin
diff --git a/packages/sysvinit/sysvinit/oplinux-uclibc/.mtn2git_empty b/packages/sysvinit/sysvinit/oplinux-uclibc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sysvinit/sysvinit/oplinux-uclibc/.mtn2git_empty
diff --git a/packages/sysvinit/sysvinit/oplinux-uclibc/inittab b/packages/sysvinit/sysvinit/oplinux-uclibc/inittab
new file mode 100644
index 0000000000..1bb7c45254
--- /dev/null
+++ b/packages/sysvinit/sysvinit/oplinux-uclibc/inittab
@@ -0,0 +1,39 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:2:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+
+
+1:2345:respawn:/sbin/getty 115200 tty1
+2:23:respawn:/sbin/getty 115200 tty2
+3:23:respawn:/sbin/getty 115200 tty3
+4:23:respawn:/sbin/getty 115200 tty4
+5:23:respawn:/sbin/getty 115200 tty5
+6:23:respawn:/sbin/getty 115200 tty6
+
diff --git a/packages/sysvinit/sysvinit/oplinux/.mtn2git_empty b/packages/sysvinit/sysvinit/oplinux/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sysvinit/sysvinit/oplinux/.mtn2git_empty
diff --git a/packages/sysvinit/sysvinit/oplinux/inittab b/packages/sysvinit/sysvinit/oplinux/inittab
new file mode 100644
index 0000000000..1bb7c45254
--- /dev/null
+++ b/packages/sysvinit/sysvinit/oplinux/inittab
@@ -0,0 +1,39 @@
+# /etc/inittab: init(8) configuration.
+# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
+
+# The default runlevel.
+id:2:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/sbin/sulogin
+
+
+1:2345:respawn:/sbin/getty 115200 tty1
+2:23:respawn:/sbin/getty 115200 tty2
+3:23:respawn:/sbin/getty 115200 tty3
+4:23:respawn:/sbin/getty 115200 tty4
+5:23:respawn:/sbin/getty 115200 tty5
+6:23:respawn:/sbin/getty 115200 tty6
+
diff --git a/packages/sysvinit/sysvinit_2.86.bb b/packages/sysvinit/sysvinit_2.86.bb
index 1a2d79c9be..a4ce1252f8 100644
--- a/packages/sysvinit/sysvinit_2.86.bb
+++ b/packages/sysvinit/sysvinit_2.86.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "System-V like init."
SECTION = "base"
LICENSE = "GPL"
HOMEPAGE = "http://freshmeat.net/projects/sysvinit/"
-PR = "r32"
+PR = "r35"
# USE_VT and SERIAL_CONSOLE are generally defined by the MACHINE .conf.
# Set PACKAGE_ARCH appropriately.
@@ -19,14 +19,14 @@ USE_VT ?= "1"
SYSVINIT_ENABLED_GETTYS ?= "1"
SRC_URI = "ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/sysvinit-${PV}.tar.gz \
- file://install.patch;patch=1 \
+ file://install.patch;patch=1 \
file://need \
file://provide \
file://inittab \
file://rcS-default \
file://rc \
file://rcS \
- file://bootlogd.init"
+ file://bootlogd.init"
S = "${WORKDIR}/sysvinit-${PV}"
B = "${S}/src"
@@ -51,13 +51,14 @@ EXTRA_OEMAKE += "'INSTALL=install' \
'usrbindir=${bindir}' \
'usrsbindir=${sbindir}' \
'includedir=${includedir}' \
- 'mandir=${mandir}'"
+ 'mandir=${mandir}' \
+ DISTRO=''"
do_install () {
oe_runmake 'ROOT=${D}' install
- install -d ${D}${sysconfdir} \
- ${D}${sysconfdir}/default \
- ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/default
+ install -d ${D}${sysconfdir}/init.d
install -m 0644 ${WORKDIR}/inittab ${D}${sysconfdir}/inittab
if [ ! -z "${SERIAL_CONSOLE}" ]; then
echo "S:2345:respawn:${base_sbindir}/getty ${SERIAL_CONSOLE}" >> ${D}${sysconfdir}/inittab
diff --git a/packages/taglib/taglib_1.4.bb b/packages/taglib/taglib_1.4.bb
index 48aa375048..7d560ef620 100644
--- a/packages/taglib/taglib_1.4.bb
+++ b/packages/taglib/taglib_1.4.bb
@@ -28,11 +28,11 @@ do_stage_append() {
do
install $i ${STAGING_INCDIR}/taglib/
done
- for i in `find taglib -name "*.tcc"`
- do
- install $i ${STAGING_INCDIR}/taglib/
- done
- oe_libinstall -so -C taglib libtag ${STAGING_LIBDIR}
+ for i in `find taglib -name "*.tcc"`
+ do
+ install $i ${STAGING_INCDIR}/taglib/
+ done
+ oe_libinstall -so -C taglib libtag ${STAGING_LIBDIR}
}
do_install() {
diff --git a/packages/taglib/taglibc_1.4.bb b/packages/taglib/taglibc_1.4.bb
index ecfc27fafb..8845c988c0 100644
--- a/packages/taglib/taglibc_1.4.bb
+++ b/packages/taglib/taglibc_1.4.bb
@@ -29,5 +29,5 @@ do_stage_append() {
}
do_install() {
- oe_libinstall -so -C bindings/c libtag_c ${D}${libdir}
+ oe_libinstall -so -C bindings/c libtag_c ${D}${libdir}
}
diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb
index f74d8f8943..84c3610b8f 100644
--- a/packages/tasks/task-base.bb
+++ b/packages/tasks/task-base.bb
@@ -1,202 +1,237 @@
DESCRIPTION = "Merge machine and distro options to create a basic machine task/package"
-PR = "r19"
-
-PACKAGES = "task-base \
- task-base-minimal \
- task-base-oh-minimal \
- task-base-core-default"
+PR = "r41"
+
+DEPENDS = "task-boot"
+PROVIDES = "${PACKAGES}"
+PACKAGES = ' \
+ task-base \
+ task-base-extended \
+ task-distro-base \
+ task-machine-base \
+ \
+ task-base-acpi \
+ task-base-alsa \
+ task-base-apm \
+ task-base-bluetooth \
+ task-base-ext2 \
+ task-base-irda \
+ task-base-keyboard \
+ task-base-pci \
+ task-base-pcmcia \
+ task-base-phone \
+ task-base-screen \
+ task-base-serial \
+ task-base-touchscreen \
+ task-base-usbgadget \
+ task-base-usbhost \
+ task-base-wifi \
+ \
+ task-base-cramfs \
+ task-base-ipsec \
+ task-base-ipv6 \
+ task-base-nfs \
+ task-base-ppp \
+ task-base-smbfs \
+ \
+ ${@base_contains("MACHINE_FEATURES","kernel26","task-base-kernel26","task-base-kernel24",d)} \
+ '
ALLOW_EMPTY = "1"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+PACKAGE_ARCH = "all"
+
+#
+# packages which content depend on MACHINE_FEATURES need to be MACHINE_ARCH
+#
+PACKAGE_ARCH_task-base = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-machine-base = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-base-apm = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-base-bluetooth = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-base-irda = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-base-pcmcia = "${MACHINE_ARCH}"
+PACKAGE_ARCH_task-base-wifi = "${MACHINE_ARCH}"
-# Valid only in MACHINE_FEATURES:
#
-# kernel24
-# kernel26
-# apm
-# keyboard
-# touchscreen
-# screen
-# pci
-# acpi
-# phone
-
-# Valid only in DISTRO_FEATURES:
+# linux-hotplug or none
+#
+HOTPLUG ?= "${@base_contains("MACHINE_FEATURES", "kernel24", "linux-hotplug","",d)} "
+
#
-# nfs
-# smbfs
-# ipsec
-# wifi
-# ppp
-
-# Valid COMBINED_FEATURES:
-# (These features need to be supported by both the machine and the distro)
+# dropbear, openssh or none
#
-# alsa
-# bluetooth
-# ext2
-# irda
-# pci
-# pcmcia
-# usbgadget
-# usbhost
+DISTRO_SSH_DAEMON ?= "dropbear"
-DISTRO_CORE_PACKAGE ?= "task-base-core-default"
+#
+# pcmciautils for >= 2.6.13-rc1, pcmcia-cs for others
+#
+PCMCIA_MANAGER ?= "${@base_contains('MACHINE_FEATURES', 'kernel26','pcmciautils','pcmcia-cs',d)} "
+
+#
+# those ones can be set in machine config to supply packages needed to get machine booting
+#
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= ""
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
#
-# task-base
+# task-base contain stuff needed for base system (machine related)
#
RDEPENDS_task-base = "\
- ${DISTRO_CORE_PACKAGE} \
- kernel \
- ${@base_contains("MACHINE_FEATURES", "kernel24", "${task-base-kernel24-rdepends}", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "kernel26", "${task-base-kernel26-rdepends}", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "apm", "${task-base-apm-rdepends}", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "acpi", "${task-base-acpi-rdepends}", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "keyboard", "${task-base-keyboard-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "alsa", "${task-base-alsa-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "ext2", "${task-base-ext2-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "irda", "${task-base-irda-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pci", "${task-base-pci-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "${task-base-pcmcia-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "usbhost", "${task-base-usbhost-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "bluetooth", "${task-base-bluetooth-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "wifi", "${task-distro-wifi-rdepends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "nfs", "${task-distro-nfs-rdepends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "ipsec", "${task-distro-ipsec-rdepends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "ppp", "${task-distro-ppp-rdepends}", "",d)} \
- ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS} \
- ${MACHINE_EXTRA_RDEPENDS} \
- ${DISTRO_EXTRA_RDEPENDS}"
-
-RRECOMMENDS_task-base = "\
- ${@base_contains("MACHINE_FEATURES", "kernel26", "${task-base-kernel26-extras-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "alsa", "${task-base-alsa-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "${task-base-pcmcia-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "bluetooth", "${task-base-bluetooth-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "irda", "${task-base-irda-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "usbgadget", "${task-base-usbgadget-rrecommends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "usbhost", "${task-base-usbhost-rrecommends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "ppp", "${task-distro-ppp-rrecommends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "nfs", "${task-distro-nfs-rrecommends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "ipsec", "${task-distro-ipsec-rrecommends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "${task-distro-wifi-rrecommends}", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "cramfs", "${task-distro-cramfs-rrecommends}", "",d)} \
- ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS} \
- ${MACHINE_EXTRA_RRECOMMENDS} \
- ${DISTRO_EXTRA_RRECOMMENDS}"
+ task-boot \
+ task-distro-base \
+ task-machine-base \
+ ${DISTRO_SSH_DAEMON} \
+ ${HOTPLUG} \
+ \
+ ${@base_contains('MACHINE_FEATURES', 'kernel26','task-base-kernel26','task-base-kernel24',d)} \
+ ${@base_contains('MACHINE_FEATURES', 'apm', 'task-base-apm', '',d)} \
+ ${@base_contains('MACHINE_FEATURES', 'acpi', 'task-base-acpi', '',d)} \
+ ${@base_contains('MACHINE_FEATURES', 'keyboard', 'task-base-keyboard', '',d)} \
+ \
+ ${@base_contains('COMBINED_FEATURES', 'alsa', 'task-base-alsa', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'ext2', 'task-base-ext2', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'irda', 'task-base-irda', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pci', 'task-base-pci', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'task-base-pcmcia', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'usbgadget', 'task-base-usbgadget', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'usbhost', 'task-base-usbhost', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'bluetooth', 'task-base-bluetooth', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'wifi', 'task-base-wifi', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'uboot', 'task-base-uboot', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'redboot', 'task-base-redboot', '',d)} \
+ \
+ ${@base_contains('DISTRO_FEATURES', 'nfs', 'task-base-nfs', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'ipv6', 'task-base-ipv6', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'ipsec', 'task-base-ipsec', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'ppp', 'task-base-ppp', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'raid', 'task-base-raid', '',d)} \
+ "
+
+RDEPENDS_task-base-extended = "\
+ task-base \
+ ${ADD_WIFI} \
+ ${ADD_BT} \
+ "
+
+ADD_WIFI = ""
+ADD_BT = ""
+
+python __anonymous () {
+ # If Distro want wifi and machine feature wifi/pci/pcmcia/usbhost (one of them)
+ # then include task-base-wifi in task-base
+
+ import bb
+
+ if not hasattr(__builtins__, 'set'):
+ from sets import Set as set
+
+ distro_features = set(bb.data.getVar("DISTRO_FEATURES", d, 1).split())
+ machine_features= set(bb.data.getVar("MACHINE_FEATURES", d, 1).split())
+
+ if "bluetooth" in distro_features and not "bluetooth" in machine_features and ("pcmcia" in machine_features or "pci" in machine_features or "usbhost" in machine_features):
+ bb.data.setVar("ADD_BT", "task-base-bluetooth", d)
+
+ if "wifi" in distro_features and not "wifi" in machine_features and ("pcmcia" in machine_features or "pci" in machine_features or "usbhost" in machine_features):
+ bb.data.setVar("ADD_WIFI", "task-base-wifi", d)
+}
+#
+# packages added by distribution
+#
+RDEPENDS_task-distro-base = "${DISTRO_EXTRA_RDEPENDS}"
+RRECOMMENDS_task-distro-base = "${DISTRO_EXTRA_RRECOMMENDS}"
#
-# task-base-oh-minimal
-# An example of a small cut down machine configuration
+# packages added by machine config
#
-RDEPENDS_task-base-oh-minimal = "\
- kernel \
- ${@base_contains("MACHINE_FEATURES", "kernel26", "${task-base-kernel26-rdepends}", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "apm", "${task-base-apm-rdepends}", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "${PCMCIA_MANAGER}", "",d)} \
- ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
-
-RRECOMMENDS_task-base-minimal = "\
- ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
-
-
-
-HOTPLUG ?= "linux-hotplug"
-
-RDEPENDS_task-base-core-default = '\
- base-files \
- base-passwd \
- busybox \
- initscripts \
- netbase \
- sysvinit \
- sysvinit-pidof \
- tinylogin \
- modutils-initscripts \
- fuser \
- setserial'
-# Lets see if we can kill off hotplug...
-# ${HOTPLUG}
-# ${@bootstrap_modutils_rdepends(d)}
-
-
-RRECOMMENDS_task-base-core-default = '\
- dropbear '
-
-task-base-kernel24-rdepends = "\
- modutils-depmod \
- linux-hotplug "
-
-task-base-kernel26-rdepends = "\
- udev \
+RDEPENDS_task-machine-base = "${MACHINE_EXTRA_RDEPENDS}"
+RRECOMMENDS_task-machine-base = "${MACHINE_EXTRA_RRECOMMENDS}"
+
+RDEPENDS_task-base-kernel24 = "\
+ modutils-depmod"
+
+RDEPENDS_task-base-kernel26 = "\
sysfsutils \
module-init-tools"
-task-base-keyboard-rdepends = "\
+RRECOMMENDS_task-base-kernel24 = "\
+ kernel-module-input \
+ kernel-module-uinput"
+
+RRECOMMENDS_task-base-kernel26 = "\
+ kernel-module-input \
+ kernel-module-uinput \
+ kernel-module-rtc-dev \
+ kernel-module-rtc-proc \
+ kernel-module-rtc-sysfs \
+ kernel-module-rtc-sa1100"
+
+RDEPENDS_task-base-keyboard = "\
keymaps"
-task-base-pci-rdepends = "\
+RDEPENDS_task-base-pci = "\
pciutils"
-task-base-kernel26-extras-rrecommends = "\
- kernel-module-input \
- kernel-module-uinput"
-
-task-base-acpi-rdepends = "\
+RDEPENDS_task-base-acpi = "\
acpid"
-task-base-apm-rdepends = "\
+RDEPENDS_task-base-apm = "\
apm \
apmd \
- ${@base_contains("MACHINE_FEATURES", "kernel24", "network-suspend-scripts", "",d)}"
+ ${@base_contains('MACHINE_FEATURES', 'kernel24', 'network-suspend-scripts', '',d)}"
-task-base-ext2-rdepends = "\
+RDEPENDS_task-base-ext2 = "\
hdparm \
e2fsprogs \
e2fsprogs-e2fsck \
e2fsprogs-mke2fs"
-task-base-alsa-rdepends = "\
+RDEPENDS_task-base-alsa = "\
alsa-utils-alsactl \
alsa-utils-alsamixer"
-task-base-alsa-rrecommends = "\
+#
+# alsa-states are machine related so can be missing in feed, OSS support is optional
+#
+RRECOMMENDS_task-base-alsa = "\
+ alsa-state \
+ alsa-states \
kernel-module-snd-mixer-oss \
kernel-module-snd-pcm-oss"
-task-base-pcmcia-rdepends = "\
+RDEPENDS_task-base-pcmcia = "\
${PCMCIA_MANAGER} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "prism3-firmware", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "prism3-support", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "spectrum-fw", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "hostap-conf", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "orinoco-conf", "",d)}"
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'prism-firmware', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'spectrum-fw', '',d)} \
+ "
-task-base-pcmcia-rrecommends = "\
+RRECOMMENDS_task-base-pcmcia = "\
+ ${@base_contains('MACHINE_FEATURES', 'kernel26', '${task-base-pcmcia26}', '${task-base-pcmcia24}',d)} \
kernel-module-pcmcia \
kernel-module-airo-cs \
kernel-module-pcnet-cs \
kernel-module-serial-cs \
kernel-module-ide-cs \
- ${@base_contains("MACHINE_FEATURES", "kernel26", "${task-base-pcmcia26-rrecommends}", "${task-base-pcmcia24-rrecommends}",d)} "
+ kernel-module-ide-disk \
+ "
+
+task-base-pcmcia24 = "\
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'hostap-modules-cs', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'orinoco-modules-cs', '',d)} \
+ "
-task-base-pcmcia24-rrecommends = "\
- ${@base_contains("DISTRO_FEATURES", "wifi", "hostap-modules-cs", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "orinoco-modules-cs", "",d)}"
+task-base-pcmcia26 = "\
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'kernel-module-hostap-cs', '',d)} \
+ ${@base_contains('DISTRO_FEATURES', 'wifi', 'kernel-module-spectrum-cs', '',d)}"
-task-base-pcmcia26-rrecommends = "\
- ${@base_contains("DISTRO_FEATURES", "wifi", "kernel-module-hostap-cs", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "kernel-module-orinoco-cs", "",d)} \
- ${@base_contains("DISTRO_FEATURES", "wifi", "kernel-module-spectrum-cs", "",d)}"
+# Provide bluez-utils-compat utils for the time being, the binaries in that package will vanish soon from upstream releases, so beware!
-task-base-bluetooth-rdepends = "\
- blueprobe \
- bluez-utils"
+RDEPENDS_task-base-bluetooth = "\
+ blueprobe \
+ bluez-utils \
+ bluez-utils-compat \
+ "
-task-base-bluetooth-rrecommends = "\
+RRECOMMENDS_task-base-bluetooth = "\
kernel-module-bluetooth \
kernel-module-l2cap \
kernel-module-rfcomm \
@@ -205,37 +240,44 @@ task-base-bluetooth-rrecommends = "\
kernel-module-hidp \
kernel-module-hci-uart \
kernel-module-sco \
- ${@base_contains("COMBINED_FEATURES", "usbhost", "kernel-module-hci-usb", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetooth3c-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluecard-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetoothuart-cs", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-dtl1-cs", "",d)}"
-
-task-base-irda-rdepends = "\
+ ${@base_contains('COMBINED_FEATURES', 'usbhost', 'kernel-module-hci-usb', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluetooth3c-cs', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluecard-cs', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-bluetoothuart-cs', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'kernel-module-dtl1-cs', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'bluez-dtl1-workaround', '',d)} \
+ "
+# bluez-dtl1-workaround above is workaround for bitbake not handling DEPENDS on it in
+# kernel.bbclass. It should be there as long as kernel-module-dtl1-cs is, but not longer.
+
+RDEPENDS_task-base-irda = "\
irda-utils"
-task-base-irda-rrecommends = "\
+RRECOMMENDS_task-base-irda = "\
kernel-module-pxaficp-ir \
kernel-module-irda \
kernel-module-ircomm \
kernel-module-ircomm-tty \
kernel-module-irlan \
- ${@base_contains("DISTRO_FEATURES", "ppp", "kernel-module-irnet", "",d)} \
+ ${@base_contains('DISTRO_FEATURES', 'ppp', 'kernel-module-irnet', '',d)} \
kernel-module-irport \
kernel-module-irtty \
- ${@base_contains("COMBINED_FEATURES", "usbhost", "kernel-module-ir-usb", "",d)} "
+ kernel-module-irtty-sir \
+ kernel-module-sir-dev \
+ ${@base_contains('COMBINED_FEATURES', 'usbhost', 'kernel-module-ir-usb', '',d)} "
-task-base-usbgadget-rrecommends = "\
+RRECOMMENDS_task-base-usbgadget = "\
kernel-module-pxa27x_udc \
kernel-module-gadgetfs \
kernel-module-g-file-storage \
kernel-module-g-serial \
- kernel-module-g-ether"
+ kernel-module-g-ether \
+ usb-gadget-mode"
-task-base-usbhost-rdepends = "\
+RDEPENDS_task-base-usbhost = "\
usbutils "
-task-base-usbhost-rrecommends = "\
+RRECOMMENDS_task-base-usbhost = "\
kernel-module-uhci-hcd \
kernel-module-ohci-hcd \
kernel-module-ehci-hcd \
@@ -249,58 +291,93 @@ task-base-usbhost-rrecommends = "\
kernel-module-usbserial \
kernel-module-usb-storage "
-task-distro-ppp-rdepends = "\
+RDEPENDS_task-base-uboot = "\
+ uboot-utils"
+
+RDEPENDS_task-base-redboot = "\
+ fis"
+
+RDEPENDS_task-base-ppp = "\
ppp \
ppp-dialin"
-task-distro-ppp-rrecommends = "\
+RRECOMMENDS_task-base-ppp = "\
kernel-module-ppp-async \
kernel-module-ppp-deflate \
kernel-module-ppp-mppe"
-task-distro-ipsec-rdepends = "\
+RDEPENDS_task-base-ipsec = "\
openswan"
-task-distro-ipsec-rrecommends = "\
+RRECOMMENDS_task-base-ipsec = "\
kernel-module-ipsec"
-task-distro-wifi-rdepends = "\
+#
+# task-base-wifi contain everything needed to get WiFi working
+# WEP/WPA connection needs to be supported out-of-box
+#
+RDEPENDS_task-base-wifi = "\
wireless-tools \
- ${@base_contains("COMBINED_FEATURES", "pcmcia", "hostap-utils", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "pci", "hostap-utils", "",d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'hostap-utils', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pci', 'hostap-utils', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'pci', 'madwifi-ng-tools', '',d)} \
wpa-supplicant"
-task-distro-wifi-rrecommends = "\
+RRECOMMENDS_task-base-wifi = "\
+ ${@base_contains('COMBINED_FEATURES', 'pci', 'madwifi-ng-modules', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'usbhost', 'kernel-module-zd1211rw', '',d)} \
kernel-module-ieee80211-crypt \
kernel-module-ieee80211-crypt-ccmp \
kernel-module-ieee80211-crypt-tkip \
kernel-module-ieee80211-crypt-wep \
+ kernel-module-ecb \
kernel-module-arc4 \
kernel-module-michael-mic \
kernel-module-aes"
-task-distro-smbfs-rrecommends = "\
+RRECOMMENDS_task-base-smbfs = "\
kernel-module-cifs \
kernel-module-smbfs"
-task-distro-cramfs-rrecommends = "\
+RRECOMMENDS_task-base-cramfs = "\
kernel-module-cramfs"
-task-distro-nfs-rdepends = "\
+#
+# task-base-nfs provides ONLY client support - server is in nfs-utils package
+#
+RDEPENDS_task-base-nfs = "\
portmap"
-task-distro-nfs-rrecommends = "\
- kernel-module-nfs \
- kernel-module-lockd \
- kernel-module-sunrpc"
+RRECOMMENDS_task-base-nfs = "\
+ kernel-module-nfs "
+
+RDEPENDS_task-base-raid = "\
+ "
+
+RDEPENDS_task-base-screen = "\
+ "
+
+#
+# GPE/OPIE/OpenMoko provide own touchscreen calibration utils
+#
+RDEPENDS_task-base-touchscreen = "\
+ tslib-tests \
+ tslib-calibrate "
+
+RDEPENDS_task-base-ipv6 = "\
+ "
+RRECOMMENDS_task-base-ipv6 = "\
+ kernel-module-ipv6 "
+
+RDEPENDS_task-base-serial = "\
+ setserial \
+ lrzsz "
# Tosort
-# kernel-module-ipv6
# kernel-module-nvrd
# kernel-module-mip6-mn
# kernel-module-tun
-# kernel-module-ide-disk
# kernel-module-ide-probe-mo
# kernel-module-loop
# kernel-module-vfat
@@ -314,4 +391,3 @@ task-distro-nfs-rrecommends = "\
# kernel-module-md5
# kernel-module-8250
# Should be DISTRO_EXTRA_RRECOMMENDS: lrzsz
-
diff --git a/packages/tasks/task-boot.bb b/packages/tasks/task-boot.bb
new file mode 100644
index 0000000000..3d08f465ba
--- /dev/null
+++ b/packages/tasks/task-boot.bb
@@ -0,0 +1,54 @@
+DESCRIPTION = "Basic task to get a device booting"
+PR = "r37"
+
+PROVIDES = "${PACKAGES}"
+PACKAGES = 'task-boot'
+
+ALLOW_EMPTY = "1"
+
+# packages which content depend on MACHINE_FEATURES need to be MACHINE_ARCH
+#
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#
+# udev, devfsd, mdev (from busybox) or none
+#
+DISTRO_DEV_MANAGER ?= "${@base_contains("MACHINE_FEATURES", "kernel26", "udev","",d)} "
+
+#
+# sysvinit, upstart
+#
+DISTRO_INIT_MANAGER ?= "sysvinit sysvinit-pidof"
+
+#
+# tinylogin, getty
+#
+DISTRO_LOGIN_MANAGER ?= "tinylogin"
+
+#
+# those ones can be set in machine config to supply packages needed to get machine booting
+#
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= ""
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
+
+#
+# minimal set of packages - needed to boot
+#
+RDEPENDS_task-boot = "\
+ kernel \
+ base-files \
+ base-passwd \
+ busybox \
+ initscripts \
+ modutils-initscripts \
+ netbase \
+ update-alternatives \
+ ${DISTRO_DEV_MANAGER} \
+ ${DISTRO_INIT_MANAGER} \
+ ${DISTRO_LOGIN_MANAGER} \
+ ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS} \
+ "
+
+RRECOMMENDS_task-boot = "\
+ ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS} \
+ "
diff --git a/packages/tasks/task-gmae.bb b/packages/tasks/task-gmae.bb
new file mode 100644
index 0000000000..ac794102f2
--- /dev/null
+++ b/packages/tasks/task-gmae.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "GNOME Mobile & Embedded Initiative"
+PR = "r0"
+
+PACKAGES = 'gmae-core \
+ gmae-toolkit \
+ gmae-user \
+ task-gmae \
+ '
+
+ALLOW_EMPTY = "1"
+
+PACKAGE_ARCH = "all"
+
+
+RDEPENDS_gmae-core = " \
+ ${XSERVER} \
+ glib-2.0 \
+ gtk+ \
+ "
+
+RDEPENDS_gmae-toolkit = " \
+ pango \
+ cairo \
+ atk \
+ "
+
+RDEPENDS_gmae-user = " \
+ bluez-utils \
+ eds-dbus \
+ telepathy-gabble libtelepathy \
+ avahi-utils \
+ gstreamer \
+ matchbox-wm matchbox-panel \
+ gconf-dbus \
+ gnome-vfs \
+ "
+
+RDEPENDS_task-gmae = " \
+ gmae-core \
+ gmae-toolkit \
+ gmae-user \
+ "
+
diff --git a/packages/tasks/task-gpe-apps.bb b/packages/tasks/task-gpe-apps.bb
new file mode 100644
index 0000000000..5aee575b75
--- /dev/null
+++ b/packages/tasks/task-gpe-apps.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Application task package for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-edit \
+ gpe-gallery \
+ gpe-calculator \
+ gpe-clock \
+ gpe-plucker \
+ gpe-terminal \
+ gpe-watch \
+ gpe-what \
+ matchbox-panel-hacks \
+ gpe-aerial \
+ rosetta \
+ gpe-scap \
+ gpe-windowlist \
+ gpe-filemanager \
+ gpe-soundbite \
+ mbmerlin \
+ starling"
+
diff --git a/packages/tasks/task-gpe-base.bb b/packages/tasks/task-gpe-base.bb
new file mode 100644
index 0000000000..d4fbaecd37
--- /dev/null
+++ b/packages/tasks/task-gpe-base.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Base task package for GPE Palmtop Environment"
+PR = "r7"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-bootsplash \
+ bluez-utils-dbus \
+ matchbox \
+ xcursor-transparent-theme \
+ rxvt-unicode \
+ gtk2-theme-angelistic \
+ matchbox-themes-gtk \
+ xst \
+ xhost \
+ xrdb \
+ gpe-soundserver \
+ gpe-dm \
+ gpe-login \
+ gpe-session-scripts \
+ gpe-icons \
+ gpe-confd \
+ gpe-autostarter \
+ startup-monitor \
+ libgtkstylus \
+ suspend-desktop \
+ teleport \
+ xauth \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-xpm \
+ gdk-pixbuf-loader-jpeg \
+ pango-module-basic-x \
+ pango-module-basic-fc \
+ ttf-bitstream-vera"
+
diff --git a/packages/tasks/task-gpe-connectivity.bb b/packages/tasks/task-gpe-connectivity.bb
new file mode 100644
index 0000000000..678afb8c1a
--- /dev/null
+++ b/packages/tasks/task-gpe-connectivity.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "Connectivity task packages for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-mini-browser \
+ gpe-irc"
+
diff --git a/packages/tasks/task-gpe-desktopapps.bb b/packages/tasks/task-gpe-desktopapps.bb
new file mode 100644
index 0000000000..346cd70353
--- /dev/null
+++ b/packages/tasks/task-gpe-desktopapps.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Additional desktop applications package for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ sylpheed \
+ firefox \
+ thunderbird \
+ galculator \
+ gnumeric \
+ gpdf"
+
diff --git a/packages/tasks/task-gpe-games.bb b/packages/tasks/task-gpe-games.bb
new file mode 100644
index 0000000000..6076f5ba70
--- /dev/null
+++ b/packages/tasks/task-gpe-games.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Games task package for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-go \
+ gpe-lights \
+ gpe-othello \
+ gpe-tetris \
+ gsoko \
+ xdemineur"
+
diff --git a/packages/tasks/task-gpe-pim.bb b/packages/tasks/task-gpe-pim.bb
new file mode 100644
index 0000000000..a81b5a9a34
--- /dev/null
+++ b/packages/tasks/task-gpe-pim.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "PIM task packages for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS_gpe-task-pim = "\
+ gpe-timesheet \
+ gpe-todo \
+ gpe-calendar \
+ gpe-sketchbook \
+ gpe-contacts \
+ gpe-synctool \
+ gpesyncd \
+ miniclipboard"
+
+# broken gpe-today \
+
+
diff --git a/packages/tasks/task-gpe-sectest.bb b/packages/tasks/task-gpe-sectest.bb
new file mode 100644
index 0000000000..75b525b618
--- /dev/null
+++ b/packages/tasks/task-gpe-sectest.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Security testing task packages for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ nmap \
+ ettercap \
+ stunnel \
+ curl \
+ dsniff \
+ prismstumbler \
+ tcpdump \
+ kismet \
+ hydra \
+ thcrut"
+
diff --git a/packages/tasks/task-gpe-settings.bb b/packages/tasks/task-gpe-settings.bb
new file mode 100644
index 0000000000..ddfcb282f1
--- /dev/null
+++ b/packages/tasks/task-gpe-settings.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Settings task package for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ gpe-mininet \
+ gpe-bluetooth \
+ gpe-beam \
+ matchbox-panel-manager \
+ gpe-su \
+ gpe-conf \
+ gpe-clock \
+ gpe-mixer \
+ gpe-package \
+ gpe-shield \
+ gpe-taskmanager \
+ keylaunch \
+ minilite \
+ minimix \
+ xmonobut"
+
diff --git a/packages/tasks/task-gpe-web.bb b/packages/tasks/task-gpe-web.bb
new file mode 100644
index 0000000000..247165ba9d
--- /dev/null
+++ b/packages/tasks/task-gpe-web.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Additional web task packages for GPE Palmtop Environment"
+PR = "r5"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+
+RDEPENDS = "\
+ pidgin \
+ minimo"
+
diff --git a/packages/tasks/task-gpe.bb b/packages/tasks/task-gpe.bb
index b59b3ceea3..5399c12025 100644
--- a/packages/tasks/task-gpe.bb
+++ b/packages/tasks/task-gpe.bb
@@ -16,11 +16,11 @@ PACKAGES = "\
gpe-task-desktopapps \
gpe-task-sectest"
-RDEPENDS_gpe-base-depends := "\
+RDEPENDS_gpe-base-depends = "\
diet-x11 \
virtual/xserver"
-RDEPENDS_gpe-task-base := "\
+RDEPENDS_gpe-task-base = "\
gpe-bootsplash \
bluez-utils-dbus \
matchbox \
@@ -49,7 +49,7 @@ RDEPENDS_gpe-task-base := "\
pango-module-basic-x \
pango-module-basic-fc"
-RDEPENDS_gpe-task-pim := "\
+RDEPENDS_gpe-task-pim = "\
gpe-timesheet \
gpe-todo \
gpe-calendar \
@@ -58,7 +58,7 @@ RDEPENDS_gpe-task-pim := "\
gpe-today \
gpesyncd"
-RDEPENDS_gpe-task-settings := "\
+RDEPENDS_gpe-task-settings = "\
matchbox-panel-manager \
gpe-bluetooth \
gpe-beam \
@@ -75,7 +75,7 @@ RDEPENDS_gpe-task-settings := "\
minimix \
xmonobut"
-RDEPENDS_gpe-task-apps := "\
+RDEPENDS_gpe-task-apps = "\
gpe-edit \
gpe-gallery \
gpe-calculator \
@@ -91,7 +91,7 @@ RDEPENDS_gpe-task-apps := "\
gpe-scap \
gpe-windowlist"
-RDEPENDS_gpe-task-games := "\
+RDEPENDS_gpe-task-games = "\
gpe-go \
gpe-lights \
gpe-othello \
@@ -99,40 +99,39 @@ RDEPENDS_gpe-task-games := "\
gsoko \
xdemineur"
-RDEPENDS_gpe-task-connectivity := "\
+RDEPENDS_gpe-task-connectivity = "\
gpe-mini-browser"
# gaim
# linphone-hh
-RDEPENDS_gpe-task-apps-extra := "\
+RDEPENDS_gpe-task-apps-extra = "\
gpe-filemanager \
gpe-soundbite \
mbmerlin"
-RDEPENDS_gpe-task-web := "\
+RDEPENDS_gpe-task-web = "\
gpe-irc \
minimo \
- gaim"
+ pidgin"
-RDEPENDS_gpe-task-desktopapps := "\
+RDEPENDS_gpe-task-desktopapps = "\
firefox \
thunderbird \
galculator \
gnumeric \
- gpdf \
- totem"
+ gpdf"
+# totem"
-RDEPENDS_gpe-task-sectest := "\
+RDEPENDS_gpe-task-sectest = "\
mbmerlin \
nmap \
ettercap \
stunnel \
curl \
- dsniff \
+# dsniff \
prismstumbler \
tcpdump \
kismet \
hydra \
thcrut \
miniclipboard"
-# driftnet \
diff --git a/packages/tasks/task-gpephone.bb b/packages/tasks/task-gpephone.bb
index 87f8c01749..f2a108b712 100644
--- a/packages/tasks/task-gpephone.bb
+++ b/packages/tasks/task-gpephone.bb
@@ -1,10 +1,9 @@
DESCRIPTION = "Task packages for GPE Palmtop Environment Phone Edition"
-PR = "r2"
+PR = "r8"
LICENSE = "MIT"
ALLOW_EMPTY = "1"
PACKAGES = "\
- gpephone-base-depends \
gpephone-task-base \
gpephone-task-settings \
gpephone-task-pim \
@@ -12,20 +11,17 @@ PACKAGES = "\
gpephone-task-apps \
gpephone-task-development"
-RDEPENDS_gpephone-base-depends := "\
- diet-x11 \
- virtual/xserver"
-
-RDEPENDS_gpephone-task-development := "\
+RDEPENDS_gpephone-task-development = "\
rxvt-unicode \
- xmonobut \
gpe-terminal \
gpe-edit \
gdb \
strace \
- e2fsprogs"
+ e2fsprogs \
+ bluez-utils-compat \
+ minicom"
-RDEPENDS_gpephone-task-base := "\
+RDEPENDS_gpephone-task-base = "\
cms92init \
gsmmux \
connect \
@@ -67,28 +63,27 @@ RDEPENDS_gpephone-task-base := "\
pango-module-basic-x \
pango-module-basic-fc \
detect-stylus \
+ ptim-manager \
+ ptim-helper \
+ ptim-engine \
${@base_contains("MACHINE_FEATURES", "touchscreen", "libgtkstylus xtscal", "",d)} \
- ${@base_contains("MACHINE_FEATURES", "keyboard", "", "libgtkinput",d)} \
"
-RDEPENDS_gpephone-task-pim := "\
+RDEPENDS_gpephone-task-pim = "\
gpesyncd"
-RDEPENDS_gpephone-task-settings := "\
+RDEPENDS_gpephone-task-settings = "\
gpe-su \
gpe-conf \
- gpe-clock \
gpe-mixer \
gpe-taskmanager \
- keylaunch \
- minilite"
+ minilite \
+ machined"
-RDEPENDS_gpephone-task-apps := "\
- gpe-watch \
+RDEPENDS_gpephone-task-apps = "\
gpe-what \
- matchbox-panel-hacks \
gpe-scap \
gpe-windowlist"
-RDEPENDS_gpephone-task-connectivity := "\
+RDEPENDS_gpephone-task-connectivity = "\
"
diff --git a/packages/tasks/task-mokogateway.bb b/packages/tasks/task-mokogateway.bb
new file mode 100644
index 0000000000..fe8672381a
--- /dev/null
+++ b/packages/tasks/task-mokogateway.bb
@@ -0,0 +1,82 @@
+DESCRIPTION = "MokoGateway: Tasks for a companion server for the OpenMoko Linux Distribution"
+ALLOW_EMPTY = "1"
+PACKAGE_ARCH = "all"
+LICENSE = "MIT"
+PROVIDES = "task-mokogateway-everything"
+PR = "r3"
+
+PACKAGES = "\
+ task-mokogateway-everything \
+ ${MOKOGATEWAY_PACKAGES} \
+"
+
+MOKOGATEWAY_PACKAGES = "\
+ task-mokogateway-usbnet \
+ task-mokogateway-bluetooth \
+ task-mokogateway-wifi \
+ task-mokogateway-debug \
+"
+
+RDEPENDS_task-mokogateway-everything = "${MOKOGATEWAY_PACKAGES}"
+
+DESCRIPTION_task-mokogateway-usbnet = "MokoGateway: USB Networking"
+RDEPENDS_task-mokogateway-usbnet = "\
+ iptables \
+"
+RRECOMMENDS_task-mokogateway-usbnet = "\
+ kernel-module-usbnet \
+ kernel-module-cdc-acm \
+ kernel-module-cdc-ether \
+ kernel-module-iptable-nat \
+ kernel-module-ipt-masquerade \
+"
+
+DESCRIPTION_task-mokogateway-bluetooth = "MokoGateway: Bluetooth"
+RDEPENDS_task-mokogateway-bluetooth = "\
+ bluez-utils \
+"
+RRECOMMENDS_task-mokogateway-bluetooth = "\
+ kernel-module-bluetooth \
+ kernel-module-l2cap \
+ kernel-module-rfcomm \
+ kernel-module-hci-vhci \
+ kernel-module-bnep \
+ kernel-module-hidp \
+ kernel-module-hci-uart \
+ kernel-module-sco \
+ ${@base_contains("COMBINED_FEATURES", "usbhost", "kernel-module-hci-usb", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetooth3c-cs", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluecard-cs", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-bluetoothuart-cs", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pcmcia", "kernel-module-dtl1-cs", "",d)} \
+"
+
+DESCRIPTION_task-mokogateway-wifi = "MokoGateway: WiFi"
+RDEPENDS_task-mokogateway-wifi = "\
+ bridge-utils \
+ wireless-tools \
+ ${@base_contains("COMBINED_FEATURES", "pci", "madwifi-ng-modules", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pci", "madwifi-ng-tools", "",d)} \
+ wpa-supplicant \
+"
+RRECOMMENDS_task-mokogateway-wifi = "\
+ kernel-module-ieee80211-crypt \
+ kernel-module-ieee80211-crypt-ccmp \
+ kernel-module-ieee80211-crypt-tkip \
+ kernel-module-ieee80211-crypt-wep \
+ kernel-module-arc4 \
+ kernel-module-michael-mic \
+ kernel-module-aes \
+ ${@base_contains("COMBINED_FEATURES", "usbhost", "kernel-module-zd1211rw", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "usbhost", "zd1211-firmware", "",d)} \
+"
+
+DESCRIPTION_task-mokogateway-debug = "MokoGateway: Debug"
+RDEPENDS_task-mokogateway-debug = "\
+ dfu-util \
+ ftdi-eeprom \
+ openocd \
+"
+RRECOMMENDS_task-mokogateway-debug = "\
+"
+
diff --git a/packages/tasks/task-openmoko.bb b/packages/tasks/task-openmoko.bb
index 1d748f1235..56e26cdb32 100644
--- a/packages/tasks/task-openmoko.bb
+++ b/packages/tasks/task-openmoko.bb
@@ -1,22 +1,21 @@
DESCRIPTION = "OpenMoko: Tasks for the OpenMoko Linux Distribution"
SECTION = "openmoko/base"
-ALLOW_EMPTY = "1"
-PACKAGE_ARCH = "all"
LICENSE = "MIT"
PROVIDES = "task-openmoko-everything"
+PR = "r56"
-PR = "r28"
+ALLOW_EMPTY = "1"
+PACKAGE_ARCH = "all"
PACKAGES = "\
task-openmoko-linux \
task-openmoko-ui \
task-openmoko-base \
task-openmoko-phone \
- task-openmoko-finger \
task-openmoko-pim \
task-openmoko-net \
\
- task-openmoko-demo \
+ task-openmoko-games \
task-openmoko-examples \
task-openmoko-debug \
task-openmoko-native-sdk \
@@ -30,43 +29,17 @@ RDEPENDS_task-openmoko-everything := "${PACKAGES}"
DESCRIPTION_task-openmoko-linux = "OpenMoko: Linux Core Services"
RDEPENDS_task-openmoko-linux = "\
task-base \
- base-files \
- base-passwd \
- busybox \
- dropbear \
- fuser \
- initscripts \
netbase \
sysfsutils \
- setserial \
- sysvinit \
- sysvinit-pidof \
- tinylogin \
modutils-initscripts \
module-init-tools-depmod \
- udev \
rsync \
+ screen \
+ psplash \
# update-alternatives \
"
#
-# task-openmoko-base
-#
-DESCRIPTION_task-openmoko-base = "OpenMoko: Main-Menu Launcher, and Panel"
-RDEPENDS_task-openmoko-base = "\
-"
-
-#
-# task-openmoko-phone
-#
-DESCRIPTION_task-openmoko-phone = "OpenMoko: GSM Phone Services"
-RDEPENDS_task-openmoko-phone = "\
- gsmd \
- libgsmd-tools \
- openmoko-dialer \
-"
-
-#
# task-openmoko-ui
#
DESCRIPTION_task-openmoko-ui = "OpenMoko: The X11/Gtk+2 based native User Interface"
@@ -78,21 +51,27 @@ RDEPENDS_task-openmoko-ui = "\
pango-module-basic-x \
pango-module-basic-fc \
gtk+ \
+ libgtkstylus \
+ libgtkinput \
matchbox-common \
matchbox-wm \
- matchbox-panel-2 \
xserver-kdrive-fbdev \
xserver-kdrive-common \
xserver-nodm-init \
+# x11-c-locale \
ttf-bitstream-vera \
xauth \
xhost \
xset \
xrandr \
- openmoko-common \
- openmoko-session \
- openmoko-theme-standard \
-# psplash \
+ settings-daemon \
+ \
+ openmoko-session2 \
+ openmoko-theme-standard2 \
+ openmoko-icon-theme-standard2 \
+ openmoko-sound-system \
+ openmoko-sound-theme-standard \
+ neod \
"
#
@@ -100,11 +79,20 @@ RDEPENDS_task-openmoko-ui = "\
#
DESCRIPTION_task-openmoko-base = "OpenMoko: Main-Menu Launcher, Top Panel, and Footer"
RDEPENDS_task-openmoko-base = "\
- openmoko-mainmenu \
matchbox-panel-2 \
- openmoko-footer \
- openmoko-taskmanager \
- openmoko-panel-mainmenu \
+ matchbox-panel-2-applets \
+ matchbox-applet-inputmanager \
+# openmoko-appmanager \
+ matchbox-keyboard \
+ matchbox-stroke \
+ openmoko-terminal2 \
+ openmoko-keyboard \
+# openmoko-panel-mainmenu \
+ openmoko-panel-battery \
+ openmoko-panel-bt \
+ openmoko-panel-clock \
+ openmoko-panel-usb \
+ openmoko-panel-gps \
"
#
@@ -114,16 +102,9 @@ DESCRIPTION_task-openmoko-phone = "OpenMoko: GSM and GPRS Phone Services"
RDEPENDS_task-openmoko-phone = "\
gsmd \
libgsmd-tools \
- openmoko-dialer \
+ openmoko-dialer2 \
openmoko-panel-gsm \
-# ppp \
-"
-
-#
-# task-openmoko-finger
-#
-DESCRIPTION_task-openmoko-finger = "OpenMoko: Finger UI Applications"
-RDEPENDS_task-openmoko-finger = "\
+# ppp \
"
#
@@ -132,8 +113,11 @@ RDEPENDS_task-openmoko-finger = "\
DESCRIPTION_task-openmoko-pim = "OpenMoko: PIM Applications"
RDEPENDS_task-openmoko-pim = "\
eds-dbus \
- openmoko-contacts \
- openmoko-dates \
+ openmoko-calculator2 \
+ openmoko-contacts2 \
+ openmoko-today2 \
+ openmoko-feedreader2 \
+# openmoko-messages \
"
#
@@ -142,43 +126,18 @@ RDEPENDS_task-openmoko-pim = "\
DESCRIPTION_task-openmoko-net = "OpenMoko: Linux Advanced Networking"
RDEPENDS_task-openmoko-net = "\
bluez-utils \
+ bridge-utils \
"
#
-# task-openmoko-demo
+# task-openmoko-games
#
-DESCRIPTION_task-openmoko-demo = "OpenMoko: Demo Applications"
-RDEPENDS_task-openmoko-demo = "\
- matchbox-desktop \
- matchbox-keyboard \
- matchbox-stroke \
- matchbox-config-gtk \
- matchbox-panel-manager \
- matchbox-panel-hacks \
- matchbox-themes-extra \
- matchbox-themes-gtk \
- matchbox-applet-inputmanager \
- matchbox-applet-startup-monitor \
- xcursor-transparent-theme \
- settings-daemon \
- web \
- rxvt-unicode \
- mtpaint \
+DESCRIPTION_task-openmoko-games = "OpenMoko: Games"
+RDEPENDS_task-openmoko-games = "\
+ oh-puzzles \
"
#
-# task-openmoko-examples
-#
-DESCRIPTION_task-openmoko-examples = "OpenMoko: Example Applications"
-RDEPENDS_task-openmoko-examples = "\
- openmoko-stylus-demo-simple \
- openmoko-stylus-demo \
- openmoko-finger-demo \
- openmoko-panel-demo-simple \
- openmoko-panel-demo \
- openmoko-chordmaster"
-
-#
# task-openmoko-debug
#
DESCRIPTION_task-openmoko-debug = "OpenMoko: Debugging Tools"
@@ -191,12 +150,13 @@ RDEPENDS_task-openmoko-debug = "\
madplay \
vorbis-tools \
strace \
-# ltrace \
+ ltrace \
gdb \
gdbserver \
tcpdump \
tslib-calibrate \
tslib-tests \
+ fbgrab \
fstests \
lsof \
lrzsz \
@@ -204,12 +164,15 @@ RDEPENDS_task-openmoko-debug = "\
usbutils \
uucp \
cu \
- sensors-i2cdetect sensors-i2cdump sensors-i2cset \
+# sensors-i2cdetect sensors-i2cdump sensors-i2cset \
xev \
+ bonnie++ \
+ memtester \
+ dbench \
"
#
-# task-openmoko-sdk-native
+# task-openmoko-native-sdk
#
DESCRIPTION_task-openmoko-native-sdk = "OpenMoko: Native SDK"
RDEPENDS_task-openmoko-native-sdk = "\
@@ -219,9 +182,9 @@ RDEPENDS_task-openmoko-native-sdk = "\
gcc-symlinks \
cpp \
cpp-symlinks \
+ cvs \
libc6-dev \
libgcc-dev \
- libgcc-s-dev \
glibc-utils \
ldd \
g++ \
diff --git a/packages/tasks/task-opie-16mb.bb b/packages/tasks/task-opie-16mb.bb
new file mode 100644
index 0000000000..610e06ffb0
--- /dev/null
+++ b/packages/tasks/task-opie-16mb.bb
@@ -0,0 +1,54 @@
+DESCRIPTION = "Tasks for small OPIE image"
+SECTION = "opie/base"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ALLOW_EMPTY = "1"
+LICENSE = "MIT"
+
+PR = "r0"
+
+PACKAGES = "task-opie-16mb-base \
+ task-opie-16mb-applets \
+ task-opie-16mb-inputmethods \
+ task-opie-16mb-settings \
+ task-opie-16mb-apps \
+ task-opie-16mb-pim \
+ "
+
+#
+# Dependencies to get the launcher up and running
+#
+RDEPENDS_task-opie-16mb-base = "opie-init opie-alarm opie-qcop opie-qss opie-quicklauncher \
+ opie-taskbar opie-pics opie-sounds opie-freetype \
+ ttf-dejavu-sans ttf-dejavu-sans-mono"
+
+#
+# things for reasonable bootstrap image
+#
+RDEPENDS_task-opie-16mb-applets = "opie-aboutapplet opie-clockapplet opie-suspendapplet \
+ opie-homeapplet opie-rotateapplet \
+ opie-brightnessapplet opie-volumeapplet \
+ opie-screenshotapplet \
+ ${@base_contains("COMBINED_FEATURES", "irda", "opie-irdaapplet", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "apm", "opie-batteryapplet", "",d)} \
+ ${@base_contains("COMBINED_FEATURES", "pcmcia", "opie-pcmciaapplet", "",d)} \
+ ${@base_contains("MACHINE_FEATURES", "keyboard", "opie-vtapplet opie-logoutapplet", "",d)}"
+
+#
+# clamshell models can benefit from the autorotate applet
+#
+RDEPENDS_task-opie-16mb-applets_append_c7x0 = " opie-autorotateapplet"
+RDEPENDS_task-opie-16mb-applets_append_spitz = " opie-autorotateapplet"
+RDEPENDS_task-opie-16mb-applets_append_akita = " opie-autorotateapplet"
+
+RDEPENDS_task-opie-16mb-inputmethods = "opie-multikey"
+
+RDEPENDS_task-opie-16mb-settings = "opie-packagemanager opie-light-and-power opie-appearance \
+ opie-systemtime opie-networksettings opie-button-settings \
+ opie-icon-reload opie-launcher-settings opie-security \
+ opie-securityplugin-pin"
+
+RDEPENDS_task-opie-16mb-apps = "opie-console opie-clock opie-backup opie-sysinfo \
+ opie-advancedfm"
+
+RDEPENDS_task-opie-16mb-pim = "opie-addressbook opie-datebook opie-drawpad \
+ opie-search opie-textedit opie-today opie-todo"
diff --git a/packages/tasks/task-opie-all.bb b/packages/tasks/task-opie-all.bb
new file mode 100644
index 0000000000..8e8d3aa9dc
--- /dev/null
+++ b/packages/tasks/task-opie-all.bb
@@ -0,0 +1,68 @@
+DESCRIPTION = "Tasks for OPIE stuff"
+SECTION = "opie/base"
+ALLOW_EMPTY = "1"
+LICENSE = "MIT"
+PR = "r1"
+
+PACKAGES = "task-opie-applets task-opie-inputmethods task-opie-styles \
+ task-opie-decorations task-opie-multimedia task-opie-wlan \
+ task-opie-settings task-opie-pim task-opie-datebookplugins \
+ task-opie-todayplugins"
+
+#
+# all OPIE stuff
+#
+RDEPENDS_task-opie-applets = "opie-aboutapplet opie-autorotateapplet opie-batteryapplet \
+ opie-bluetoothapplet opie-brightnessapplet opie-cardmon \
+ opie-clipboardapplet opie-clockapplet opie-homeapplet \
+ opie-irdaapplet opie-lockapplet opie-logoutapplet \
+ opie-mailapplet opie-memoryapplet opie-multikeyapplet \
+ opie-networkapplet opie-notesapplet opie-pcmciaapplet \
+ opie-pyquicklaunchapplet opie-restartapplet \
+ opie-restartapplet2 opie-rotateapplet \
+ opie-screenshotapplet opie-suspendapplet opie-vmemo \
+ opie-volumeapplet opie-vtapplet opie-zkbapplet \
+ "
+RDEPENDS_task-opie-inputmethods = "opie-dasher opie-dvorak opie-handwriting \
+ opie-handwriting-classicset opie-jumpx opie-keyboard \
+ opie-keyview opie-kjumpx opie-multikey opie-unikeyboard"
+
+RDEPENDS_task-opie-styles = "opie-style-flat opie-style-fresh opie-style-liquid opie-style-metal \
+ opie-style-web opie-style-phase opie-theme"
+
+RDEPENDS_task-opie-decorations = "opie-deco-flat opie-deco-liquid opie-deco-polished"
+
+RDEPENDS_task-opie-multimedia = "opie-mediaplayer1 \
+ opie-mediaplayer1-libmadplugin \
+ opie-mediaplayer1-libmodplugin \
+ opie-mediaplayer1-libtremorplugin \
+ opie-mediaplayer1-libwavplugin \
+ opie-mediaplayer2 \
+ opie-mediaplayer2-skin-default \
+ opie-mediaplayer2-skin-default-landscape \
+ opie-mediaplayer2-skin-pod \
+ opie-mediaplayer2-skin-techno \
+ opie-powerchord opie-recorder opie-tonleiter"
+
+RDEPENDS_task-opie-settings = "opie-appearance opie-aqpkg opie-backup opie-button-settings \
+ opie-citytime opie-confeditor opie-doctab \
+ opie-formatter opie-language opie-launcher-settings \
+ opie-light-and-power opie-mediummount opie-networksettings \
+ opie-packagemanager opie-security opie-sshkeys opie-sysinfo \
+ opie-systemtime opie-usermanager opie-icon-reload \
+ opie-vmemo-settings"
+
+RDEPENDS_task-opie-pim = "task-opie-base-pim task-opie-todayplugins task-opie-datebookplugins \
+ opie-mail opie-pimconverter"
+
+RDEPENDS_task-opie-datebookplugins = "opie-datebook-birthdayplugin \
+ opie-datebook-chrisholidayplugin \
+ opie-datebook-nationalholidayplugin"
+
+RDEPENDS_task-opie-todayplugins = "opie-today-addressbookplugin opie-today-datebookplugin \
+ opie-today-fortuneplugin opie-today-mailplugin \
+ opie-today-stocktickerplugin opie-today-todolistplugin \
+ opie-today-weatherplugin"
+
+RDEPENDS_task-opie-wlan = "wireless-tools opie-wellenreiter opie-networksettings-wlanplugin"
+
diff --git a/packages/tasks/task-opie-apps.bb b/packages/tasks/task-opie-apps.bb
new file mode 100644
index 0000000000..1c03dcc9d9
--- /dev/null
+++ b/packages/tasks/task-opie-apps.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Tasks for OPIE stuff"
+SECTION = "opie/base"
+ALLOW_EMPTY = "1"
+LICENSE = "MIT"
+
+PACKAGES = "task-opie-apps task-opie-extra-apps"
+
+RDEPENDS_task-opie-apps = "opie-advancedfm opie-bartender opie-calculator \
+ opie-checkbook opie-clock \
+ opie-console opie-dagger opie-embeddedkonsole \
+ opie-euroconv opie-eye opie-ftp opie-gutenbrowser \
+ opie-helpbrowser opie-irc opie-keypebble opie-odict \
+ opie-oxygen opie-rdesktop opie-reader opie-remote \
+ opie-sheet opie-tableviewer opie-tinykate \
+ opie-wellenreiter opie-write opie-zsafe"
+
+#
+# additional things for a >= 24mb distribution
+#
+
+RDEPENDS_task-opie-extra-apps = "opie-calculator opie-checkbook opie-mail opie-eye \
+ opie-rdesktop opie-wellenreiter opie-irc \
+ opie-mediaplayer2 \
+ qpdf2"
+# konqueror-embedded
diff --git a/packages/tasks/task-opie-games.bb b/packages/tasks/task-opie-games.bb
new file mode 100644
index 0000000000..70d2f39b29
--- /dev/null
+++ b/packages/tasks/task-opie-games.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "Tasks for OPIE stuff"
+SECTION = "opie/base"
+ALLOW_EMPTY = "1"
+LICENSE = "MIT"
+
+PACKAGES = "task-opie-games task-opie-extra-games"
+
+RDEPENDS_task-opie-games = "opie-backgammon opie-bounce opie-buzzword opie-fifteen \
+ opie-go opie-kbill opie-kcheckers opie-kpacman opie-mindbreaker \
+ opie-minesweep opie-oyatzee opie-parashoot opie-qasteroids \
+ opie-sfcave opie-snake opie-solitaire opie-tetrix opie-tictac \
+ opie-wordgame opie-zlines opie-zsame"
+
+#
+# additional things for a >= 24mb distribution
+#
+
+RDEPENDS_task-opie-extra-games = "opie-parashoot opie-mindbreaker opie-fifteen opie-tictac \
+ opie-tetrix"
+
diff --git a/packages/tasks/task-opie.bb b/packages/tasks/task-opie.bb
index 616968ea36..018ed9a9c8 100644
--- a/packages/tasks/task-opie.bb
+++ b/packages/tasks/task-opie.bb
@@ -5,20 +5,18 @@ ALLOW_EMPTY = "1"
LICENSE = "MIT"
PROVIDES = "task-opie-everything"
-PR = "r5"
+PR = "r11"
-PACKAGES = "task-opie-applets task-opie-apps task-opie-base \
+PACKAGES = "task-opie-base \
task-opie-base-applets task-opie-base-apps \
task-opie-base-decorations task-opie-base-inputmethods \
task-opie-base-pim task-opie-base-settings \
task-opie-base-styles task-opie-bluetooth \
task-opie-base-todayplugins \
- task-opie-datebookplugins task-opie-decorations \
- task-opie-extra-apps task-opie-extra-settings \
- task-opie-extra-styles task-opie-extra-games \
- task-opie-games task-opie-inputmethods task-opie-irda \
- task-opie-multimedia task-opie-pim task-opie-settings \
- task-opie-styles task-opie-todayplugins task-opie-wlan"
+ task-opie-extra-settings \
+ task-opie-extra-styles \
+ task-opie-irda \
+ "
RDEPENDS_task-opie-everything := "${PACKAGES}"
@@ -27,16 +25,19 @@ PACKAGES += "task-opie-everything"
#
# Dependencies to get the launcher up and running
#
-RDEPENDS_task-opie-base = "opie-alarm opie-qcop opie-quicklauncher opie-taskbar \
- opie-pics opie-sounds opie-freetype ttf-dejavu-sans \
- ttf-dejavu-sans-mono"
+RDEPENDS_task-opie-base = "opie-init opie-alarm opie-qcop opie-qss opie-quicklauncher \
+ opie-taskbar opie-pics opie-sounds opie-freetype \
+ ttf-dejavu-sans ttf-dejavu-sans-mono"
+# Recommend both landscape and portrait backgrounds
+RRECOMMENDS_task-opie-base = "opie-taskbar-images-${MACHINE_DISPLAY_WIDTH_PIXELS}x${MACHINE_DISPLAY_HEIGHT_PIXELS} \
+ opie-taskbar-images-${MACHINE_DISPLAY_HEIGHT_PIXELS}x${MACHINE_DISPLAY_WIDTH_PIXELS}"
#
# things for reasonable bootstrap image
#
RDEPENDS_task-opie-base-applets = "opie-aboutapplet opie-clockapplet opie-suspendapplet \
opie-homeapplet opie-rotateapplet \
- opie-brightnessapplet opie-volumeapplet \
+ opie-brightnessapplet opie-volumeapplet \
opie-screenshotapplet \
${@base_contains("COMBINED_FEATURES", "irda", "opie-irdaapplet", "",d)} \
${@base_contains("COMBINED_FEATURES", "apm", "opie-batteryapplet", "",d)} \
@@ -85,93 +86,7 @@ RDEPENDS_task-opie-base-pim = "opie-addressbook opie-datebook opie-drawpad \
task-opie-base-todayplugins \
opie-datebook-birthdayplugin"
-#
-# all OPIE stuff
-#
-RDEPENDS_task-opie-applets = "opie-aboutapplet opie-autorotateapplet opie-batteryapplet \
- opie-bluetoothapplet opie-brightnessapplet opie-cardmon \
- opie-clipboardapplet opie-clockapplet opie-homeapplet \
- opie-irdaapplet opie-lockapplet opie-logoutapplet \
- opie-mailapplet opie-memoryapplet opie-multikeyapplet \
- opie-networkapplet opie-notesapplet opie-pcmciaapplet \
- opie-pyquicklaunchapplet opie-restartapplet \
- opie-restartapplet2 opie-rotateapplet \
- opie-screenshotapplet opie-suspendapplet opie-vmemo \
- opie-volumeapplet opie-vtapplet opie-zkbapplet \
- "
-RDEPENDS_task-opie-apps = "opie-advancedfm opie-bartender opie-calculator \
- opie-checkbook opie-clock \
- opie-console opie-dagger opie-embeddedkonsole \
- opie-euroconv opie-eye opie-ftp opie-gutenbrowser \
- opie-helpbrowser opie-irc opie-keypebble opie-odict \
- opie-oxygen opie-rdesktop opie-reader opie-remote \
- opie-sheet opie-tableviewer opie-tinykate \
- opie-wellenreiter opie-write opie-zsafe"
-
-RDEPENDS_task-opie-decorations = "opie-deco-flat opie-deco-liquid opie-deco-polished"
-
-RDEPENDS_task-opie-games = "opie-backgammon opie-bounce opie-buzzword opie-fifteen \
- opie-go opie-kbill opie-kcheckers opie-kpacman opie-mindbreaker \
- opie-minesweep opie-oyatzee opie-parashoot opie-qasteroids \
- opie-sfcave opie-snake opie-solitaire opie-tetrix opie-tictac \
- opie-wordgame opie-zlines opie-zsame"
-
-RDEPENDS_task-opie-inputmethods = "opie-dasher opie-dvorak opie-handwriting \
- opie-handwriting-classicset opie-jumpx opie-keyboard \
- opie-keyview opie-kjumpx opie-multikey opie-unikeyboard"
-
-RDEPENDS_task-opie-multimedia = "opie-mediaplayer1 \
- opie-mediaplayer1-libmadplugin \
- opie-mediaplayer1-libmodplugin \
- opie-mediaplayer1-libtremorplugin \
- opie-mediaplayer1-libwavplugin \
- opie-mediaplayer2 \
- opie-mediaplayer2-skin-default \
- opie-mediaplayer2-skin-default-landscape \
- opie-mediaplayer2-skin-pod \
- opie-mediaplayer2-skin-techno \
- opie-powerchord opie-recorder opie-tonleiter"
-
-RDEPENDS_task-opie-settings = "opie-appearance opie-aqpkg opie-backup opie-button-settings \
- opie-citytime opie-confeditor opie-doctab \
- opie-formatter opie-language opie-launcher-settings \
- opie-light-and-power opie-mediummount opie-networksettings \
- opie-packagemanager opie-security opie-sshkeys opie-sysinfo \
- opie-systemtime opie-usermanager opie-icon-reload \
- opie-vmemo-settings"
-
-RDEPENDS_task-opie-styles = "opie-style-flat opie-style-fresh opie-style-liquid opie-style-metal \
- opie-style-web opie-style-phase opie-theme"
-
-RDEPENDS_task-opie-datebookplugins= "opie-datebook-birthdayplugin \
- opie-datebook-chrisholidayplugin \
- opie-datebook-nationalholidayplugin"
-
-RDEPENDS_task-opie-todayplugins = "opie-today-addressbookplugin opie-today-datebookplugin \
- opie-today-fortuneplugin opie-today-mailplugin \
- opie-today-stocktickerplugin opie-today-todolistplugin \
- opie-today-weatherplugin"
-
-RDEPENDS_task-opie-pim = "task-opie-base-pim task-opie-todayplugins task-opie-datebookplugins \
- opie-mail opie-pimconverter"
-
RDEPENDS_task-opie-bluetooth = "bluez-utils obexftp obexpush libopieobex0 \
opie-bluepin opie-bluetoothmanager opie-bluetoothapplet"
-RDEPENDS_task-opie-wlan = "wireless-tools opie-wellenreiter opie-networksettings-wlanplugin"
-
RDEPENDS_task-opie-irda = "irda-utils libopieobex0 obexftp obexpush"
-
-#
-# additional things for a >= 24mb distribution
-#
-
-RDEPENDS_task-opie-extra-apps = "opie-calculator opie-checkbook opie-mail opie-eye \
- opie-rdesktop opie-wellenreiter opie-irc \
- opie-mediaplayer2 \
- qpdf2"
-# konqueror-embedded
-
-RDEPENDS_task-opie-extra-games = "opie-parashoot opie-mindbreaker opie-fifteen opie-tictac \
- opie-tetrix"
-
diff --git a/packages/tasks/task-ossie.bb b/packages/tasks/task-ossie.bb
deleted file mode 100644
index b550d709ff..0000000000
--- a/packages/tasks/task-ossie.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "Meta-package for OSSIE Software Defined Radio (SDR)"
-LICENSE = "MIT"
-RDEPENDS = "${OSSIE_BASE} ${OSSIE_PLATFORM} ${OSSIE_COMPONENTS} ${OSSIE_WAVEFORMS}"
-PR = "r0"
-
-PACKAGES = "task-ossie"
-
-ALLOW_EMPTY = "1"
-
-PACKAGE_INSTALL = "${OSSIE_BASE} ${OSSIE_PLATFORM} ${OSSIE_COMPONENTS} ${OSSIE_WAVEFORMS}"
-
-OSSIE_BASE = "screen procps xerces-c omniorb usrp"
-OSSIE_PLATFORM = "ossiecf ossie-standardinterfaces ossie-nodebooter ossie-c-wavloader"
-OSSIE_COMPONENTS = "ossie-gpp-device ossie-usrp-device ossie-soundout-device"
-OSSIE_WAVEFORMS = "ossie-demo ossie-tx-random-data ossie-log-data"
diff --git a/packages/tasks/task-python-everything_20060425.bb b/packages/tasks/task-python-everything_20060425.bb
index 5824ed39c7..37e4b99b87 100644
--- a/packages/tasks/task-python-everything_20060425.bb
+++ b/packages/tasks/task-python-everything_20060425.bb
@@ -1,7 +1,7 @@
DESCRIPTION= "Everything Python"
HOMEPAGE = "http://www.vanille.de/projects/python.spy"
LICENSE = "MIT"
-PR = "ml10"
+PR = "ml14"
BROKEN_BECAUSE_GCC4 = "\
python-egenix-mx-base"
@@ -12,7 +12,12 @@ RDEPENDS = "\
python-constraint \
python-crypto \
python-dialog \
+ python-evas \
+ python-ecore \
+ python-emotion \
+ python-edje \
python-pycurl \
+ python-fam \
python-fnorb \
python-fpconst \
python-gammu \
@@ -56,6 +61,8 @@ RDEPENDS = "\
python-quicklauncher \
python-scapy \
python-scons \
+ python-setuptools \
+ python-simplejson \
python-sip \
python-sgmlop \
python-snmplib \
diff --git a/packages/tasks/task-sdk-base.bb b/packages/tasks/task-sdk-base.bb
new file mode 100644
index 0000000000..4041b27536
--- /dev/null
+++ b/packages/tasks/task-sdk-base.bb
@@ -0,0 +1,53 @@
+DESCRIPTION = "Basic SDK development packages"
+PR = "r1"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+DEPENDS = "task-sdk"
+
+RDEPENDS = "\
+ task-sdk-bare \
+ glibc \
+ glibc-dev \
+ libgcc \
+ alsa-dev \
+ audiofile-dev \
+ bluez-libs-dev \
+ dbus-dev \
+ expat-dev \
+ fontconfig-dev \
+ freetype-dev \
+ glib-2.0-dev \
+ gstreamer-dev \
+ libice-dev \
+ ipkg-dev \
+ jpeg-dev \
+ libapm-dev \
+ alsa-lib-dev \
+ libdisplaymigration-dev \
+ libetpan-dev \
+ libgcrypt-dev \
+ libglade-dev \
+ gnutls-dev \
+ libgpg-error-dev \
+ libidl-dev \
+ libiw-dev \
+ libmimedir-dev \
+ libpcap-dev \
+ libpixman-dev \
+ libpng-dev \
+ libschedule-dev \
+ libsm-dev \
+ libsoundgen-dev \
+ libsoup-dev \
+ libsvg-dev \
+ libtododb-dev \
+ libts-dev \
+ libxml2-dev \
+ ncurses-dev \
+ openobex-dev \
+ popt-dev \
+ readline-dev \
+ libsqlite-dev \
+ zlib-dev \
+ libxmu-dev"
diff --git a/packages/tasks/task-sdk-extra.bb b/packages/tasks/task-sdk-extra.bb
new file mode 100644
index 0000000000..33f8e3a5e8
--- /dev/null
+++ b/packages/tasks/task-sdk-extra.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "SDK packages"
+PR = "r7"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "\
+ task-sdk-x11 \
+ task-sdk-x11-ext \
+ task-sdk-gpe"
+
+RDEPENDS_task-sdk-x11 = "\
+ atk-dev \
+ cairo-dev \
+ gconf-dbus-dev \
+ gtk+-dev \
+ gtk-engines-dev \
+ libsvg-cairo-dev \
+ libmatchbox-dev \
+ matchbox-desktop-dev \
+ pango-dev \
+ startup-notification-dev"
+
+RDEPENDS_task-sdk-x11-ext = "\
+ libxcursor-dev \
+ libxdmcp-dev \
+ libxft-dev \
+ libxrandr-dev \
+ libxrender-dev \
+ libxsettings-client-dev \
+ randrext-dev \
+ resourceext-dev \
+ libx11-dev \
+ libxau-dev \
+ libxcalibrate-dev \
+ xcalibrateext-dev \
+ libxcomposite-dev \
+ libxdamage-dev \
+ libxext-dev \
+ xextproto-dev \
+ libxfont-dev \
+ libxpm-dev \
+ xproto-dev \
+ libxt-dev \
+ xtrans-dev \
+ libxtst-dev"
+
+
+RDEPENDS_task-sdk-gpe = "\
+ libcontactsdb-dev \
+ esound-dev \
+ libeventdb-dev \
+ libgpepimc-dev \
+ libgpevtype-dev \
+ libgpelaunch-dev \
+ libgpewidget-dev \
+ libhandoff-dev"
+
diff --git a/packages/tasks/task-sdk-gpephone.bb b/packages/tasks/task-sdk-gpephone.bb
new file mode 100644
index 0000000000..56b398b04e
--- /dev/null
+++ b/packages/tasks/task-sdk-gpephone.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "SDK task for GPE Phone Edition"
+PR = "r0"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ libidn-dev \
+ libim-dev \
+ gloox-dev \
+ libabenabler-dev \
+ libcalenabler-dev \
+ libchenabler-dev \
+ libgemwidget-dev \
+ libiac-dev \
+ libim-dev \
+ liblipsevent-dev \
+ libmsgenabler-dev \
+ librecord-dev \
+ libvocenabler-dev \
+ linphone-dev \
+ " \ No newline at end of file
diff --git a/packages/tasks/task-sdk-opie.bb b/packages/tasks/task-sdk-opie.bb
new file mode 100644
index 0000000000..0c4c1f6558
--- /dev/null
+++ b/packages/tasks/task-sdk-opie.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "SDK packages for Opie"
+PR = "r6"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "task-sdk-opie"
+
+RDEPENDS_task-sdk-opie = "\
+ libopiebluez2 \
+ libopiedb2 \
+ libopiecore2 \
+ libopienet2 \
+ libopiepim2 \
+ libopieui2 \
+ libqpe1 \
+ qte \
+ libqtaux2 \
+ libmailwrapper"
diff --git a/packages/tasks/task-sdk-sbox-gpe.bb b/packages/tasks/task-sdk-sbox-gpe.bb
new file mode 100644
index 0000000000..930de7cd2e
--- /dev/null
+++ b/packages/tasks/task-sdk-sbox-gpe.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "SDK task for Scratchbox rootstraps incuding GPE/GTK bits"
+PR = "r0"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ glib-2.0-utils \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-jpeg \
+ gdk-pixbuf-loader-gif \
+ gdk-pixbuf-loader-xpm \
+ intltool \
+ intltool-dev \
+ ipkg \
+ ipkg-utils \
+ gettext-dev \
+ pkgconfig-dev \
+ autoconf \
+ automake \
+ "
diff --git a/packages/tasks/task-sdk-sbox.bb b/packages/tasks/task-sdk-sbox.bb
new file mode 100644
index 0000000000..2d73fe2716
--- /dev/null
+++ b/packages/tasks/task-sdk-sbox.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "SDK task for Scratchbox rootstraps incuding GPE/GTK bits"
+PR = "r6"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+RDEPENDS = "\
+ strace \
+ gdb \
+ sbrsh \
+ fakeroot \
+ ipkg \
+ ipkg-utils \
+ "
diff --git a/packages/tasks/task-sdk.bb b/packages/tasks/task-sdk.bb
index 7fa7c11322..2c2bac1289 100644
--- a/packages/tasks/task-sdk.bb
+++ b/packages/tasks/task-sdk.bb
@@ -1,129 +1,14 @@
-DESCRIPTION = "SDK packages for Opie and GPE"
-PR = "r5"
+DESCRIPTION = "SDK packages"
+PR = "r7"
LICENSE = "MIT"
ALLOW_EMPTY = "1"
PACKAGES = "\
task-sdk-bare \
- task-sdk-base \
- task-sdk-opie \
- task-sdk-x11 \
- task-sdk-x11-ext \
- task-sdk-gpe"
-
-RDEPENDS_task-sdk-bare := "\
- glibc \
- glibc-dev \
- libgcc1 \
"
-RDEPENDS_task-sdk-base := "\
+RDEPENDS_task-sdk-bare = "\
glibc \
glibc-dev \
- libgcc1 \
- alsa-dev \
- audiofile-dev \
- bluez-libs-dev \
- dbus-dev \
- expat-dev \
- fontconfig-dev \
- freetype-dev \
- glib-2.0-dev \
- gstreamer-dev \
- libice-dev \
- ipkg-dev \
- jpeg-dev \
- libapm-dev \
- libasound \
- libdisplaymigration-dev \
- libetpan-dev \
- libgcrypt-dev \
- libglade-dev \
- gnutls-dev \
- libgpg-error-dev \
- libidl-dev \
- libiw-dev \
- libmimedir-dev \
- libpcap-dev \
- libpixman-dev \
- libpng-dev \
- libschedule-dev \
- libsm-dev \
- libsoundgen-dev \
- libsoup-dev \
- libsvg-dev \
- libtododb-dev \
- libts-dev \
- libxml2-dev \
- ncurses-dev \
- openobex-dev \
- popt-dev \
- readline-dev \
- sqlite-dev \
- zlib-dev \
- libxmu-dev"
-
-RDEPENDS_task-sdk-x11 := "\
- atk-dev \
- cairo-dev \
- gconf-dbus-dev \
- gtk+-dev \
- gtk-engines-dev \
- libsvg-cairo-dev \
- libmatchbox-dev \
- matchbox-desktop-dev \
- pango-dev \
- startup-notification-dev"
-
-RDEPENDS_task-sdk-x11-ext := "\
- compositeext-dev \
- damageext-dev \
- fixesext-dev \
- libxcursor-dev \
- libxdmcp-dev \
- libxfixes-dev \
- libxft-dev \
- libxrandr-dev \
- libxrender-dev \
- libxsettings-client-dev \
- randrext-dev \
- recordext-dev \
- renderext-dev \
- resourceext-dev \
- libx11-dev \
- libxau-dev \
- libxcalibrate-dev \
- xcalibrateext-dev \
- libxcomposite-dev \
- libxdamage-dev \
- libxext-dev \
- xextproto-dev \
- libxfont-dev \
- libxpm-dev \
- xproto-dev \
- libxt-dev \
- xtrans-dev \
- libxtst-dev"
-# libxss-dev \
-
-RDEPENDS_task-sdk-gpe := "\
- libcontactsdb-dev \
- esound-dev \
- libeventdb-dev \
- libgpepimc-dev \
- libgpevtype-dev \
- libgpelaunch-dev \
- libgpewidget-dev \
- libhandoff-dev"
-
-RDEPENDS_task-sdk-opie := "\
- libopiebluez2 \
- libopiedb2 \
- libopiecore2 \
- libopienet2 \
- libopiepim2 \
- libopieui2 \
- libqpe1 \
- qte \
- libqtaux2 \
- libmailwrapper"
+ libgcc \
+ "
diff --git a/packages/tasks/task-slugos.bb b/packages/tasks/task-slugos.bb
index 3707316c1e..21f1b551f5 100644
--- a/packages/tasks/task-slugos.bb
+++ b/packages/tasks/task-slugos.bb
@@ -6,7 +6,7 @@
DESCRIPTION = "Task packages for the SlugOS distribution"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r3"
+PR = "r13"
PACKAGE_ARCH = "${MACHINE_ARCH}"
ALLOW_EMPTY = "1"
@@ -18,6 +18,7 @@ ALLOW_EMPTY = "1"
# The standard firmware contents and additional packages built as requirements
# of the firmware are defined here in SLUGOS_STANDARD_RDEPENDS.
SLUGOS_STANDARD_RDEPENDS = ""
+SLUGOS_STANDARD_RRECOMMENDS = ""
# diff, cpio and find are required for reflash and turnup ram.
# Removing these probably leaves the system bootable, but standard
@@ -27,17 +28,17 @@ SLUGOS_STANDARD_RDEPENDS = ""
# udev is the default way of handling devices, there is no guarantee
# that the static device table is completely correct (it is just
# known to be sufficient for boot.)
-SLUGOS_STANDARD_RDEPENDS += "diffutils cpio findutils udev"
+SLUGOS_STANDARD_RRECOMMENDS += "diffutils cpio findutils udev"
# These lines add support for formatting ext2 and ext3 file systems
# on a hard disk attached to the NSLU2. ext3 is the standard Linux
# file system.
-SLUGOS_STANDARD_RDEPENDS += "e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-e2fsck e2fsprogs-badblocks"
+SLUGOS_STANDARD_RRECOMMENDS += "e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-e2fsck e2fsprogs-badblocks"
# These lines add support for an X/Y/ZModem package called lrzsz
# (this is of use for people with modified NSLU2 hardware which
# supports a serial port.)
-SLUGOS_STANDARD_RDEPENDS += "lrzsz"
+SLUGOS_STANDARD_RRECOMMENDS += "lrzsz"
# Filesystem selection. Adding entries here adds the module to the
# image. The module must be built as part of nslu2-kernel (i.e. it
@@ -55,58 +56,83 @@ SLUGOS_STANDARD_RDEPENDS += "lrzsz"
# NOTE: removing kernel-module-nfs from this list will prevent NFS
# boot (however you can do a simple flash file system boot - no
# attached disk - and install the nfs modules from ssh.)
-SLUGOS_STANDARD_RDEPENDS += "\
+# The altboot mechanism requires kernel-module-loop.
+SLUGOS_STANDARD_RRECOMMENDS += "\
kernel-module-ext2 \
kernel-module-jbd \
kernel-module-ext3 \
kernel-module-vfat \
-kernel-module-ntfs \
kernel-module-isofs \
kernel-module-udf \
+kernel-module-nfs \
+kernel-module-loop \
kernel-module-nls-cp437 \
kernel-module-nls-utf8 \
"
+
# Add daemon required for HW RNG support
-SLUGOS_STANDARD_RDEPENDS += "\
-rng-tools \
+SLUGOS_RNG_TOOLS_PACKAGE = "rng-tools"
+SLUGOS_RNG_TOOLS_PACKAGE_linux-uclibc = ""
+SLUGOS_STANDARD_RRECOMMENDS += "\
+${SLUGOS_RNG_TOOLS_PACKAGE} \
"
# Add modules required for usb support
-SLUGOS_STANDARD_RDEPENDS += "\
+SLUGOS_STANDARD_RRECOMMENDS += "\
kernel-module-ohci-hcd \
kernel-module-uhci-hcd \
"
# Add modules required for IDE support
-SLUGOS_STANDARD_RDEPENDS += "\
+SLUGOS_STANDARD_RRECOMMENDS += "\
kernel-module-libata \
kernel-module-pata-artop \
"
# Add modules required for Network support
-SLUGOS_STANDARD_RDEPENDS += "\
+SLUGOS_STANDARD_RRECOMMENDS += "\
+kernel-module-mii \
+kernel-module-ixp4xx-mac \
+kernel-module-ixp4xx-qmgr \
kernel-module-via-velocity \
"
+# Add modules required for Wifi support
+SLUGOS_STANDARD_RRECOMMENDS += "\
+madwifi-ng-modules madwifi-ng-tools wireless-tools \
+"
+
+## Other wireless tools that should be considered
+## should space be available in the rootfs
+# wpa-supplicant \
+# zd1211-firmware kernel-module-zd1211rw \
+
+# Add kexec tools for rebooting alternate kernels
+SLUGOS_STANDARD_RRECOMMENDS += "\
+kexec-tools \
+"
+
# Add modules required for Network Console support
# NOTE: This module is desirable for systems lacking a physical
# console, but is usually only enabled if specific needs or issues
# arise. If space in the flash is at a premium, it can be omitted.
-SLUGOS_STANDARD_RDEPENDS += "\
+SLUGOS_STANDARD_RRECOMMENDS += "\
kernel-module-netconsole \
"
+DISTRO_EXTRA_DEPENDS ?= ""
DEPENDS += "${DISTRO_EXTRA_DEPENDS}"
-RDEPENDS += "kernel ixp4xx-npe \
+DISTRO_EXTRA_RDEPENDS ?= ""
+RDEPENDS += "\
+ kernel ixp4xx-npe \
base-files base-passwd netbase \
busybox initscripts-slugos slugos-init \
update-modules sysvinit tinylogin \
module-init-tools modutils-initscripts \
ipkg-collateral ipkg ipkg-link \
portmap \
- dropbear \
beep \
e2fsprogs-blkid \
util-linux-mount \
@@ -116,4 +142,7 @@ RDEPENDS += "kernel ixp4xx-npe \
${SLUGOS_STANDARD_RDEPENDS} \
${DISTRO_EXTRA_RDEPENDS}"
-RRECOMMENDS = "${DISTRO_EXTRA_RRECOMMENDS}"
+RRECOMMENDS += "\
+ dropbear \
+ ${SLUGOS_STANDARD_RRECOMMENDS} \
+ ${DISTRO_EXTRA_RRECOMMENDS}"
diff --git a/packages/tasks/task-xfce-base.bb b/packages/tasks/task-xfce-base.bb
index bd6841f025..3a4081199b 100644
--- a/packages/tasks/task-xfce-base.bb
+++ b/packages/tasks/task-xfce-base.bb
@@ -8,7 +8,7 @@ ALLOW_EMPTY = "1"
PACKAGES = "${PN}"
PR = "r2"
-RDEPENDS= "xfce-mcs-manager xfwm4 xfwm4-theme-default xfce-utils xfdesktop \
+RDEPENDS = "xfce-mcs-manager xfwm4 xfwm4-theme-default xfce-utils xfdesktop \
xfce4-panel xfce4-panel-plugins xfce-mcs-plugins xfwm4-mcs-plugins \
xfce4-panel-mcs-plugins \
xfdesktop-mcs-plugins"
diff --git a/packages/telepathy/empathy-0.1/.mtn2git_empty b/packages/telepathy/empathy-0.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/telepathy/empathy-0.1/.mtn2git_empty
diff --git a/packages/telepathy/empathy-0.1/no-gnome.diff b/packages/telepathy/empathy-0.1/no-gnome.diff
new file mode 100644
index 0000000000..4dd4a96354
--- /dev/null
+++ b/packages/telepathy/empathy-0.1/no-gnome.diff
@@ -0,0 +1,39 @@
+diff -ur empathy-0.1.orig/configure.ac empathy-0.1/configure.ac
+--- empathy-0.1.orig/configure.ac 2007-04-25 23:05:40.000000000 +0100
++++ empathy-0.1/configure.ac 2007-04-27 17:10:29.000000000 +0100
+@@ -39,12 +39,12 @@
+
+ PKG_CHECK_MODULES(EMPATHY,
+ [
++ libxml-2.0
+ glib-2.0 >= $GLIB_REQUIRED
+ gobject-2.0
+ gtk+-2.0 >= $GTK_REQUIRED
+ gconf-2.0 >= $GCONF_REQUIRED
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+- libgnomeui-2.0
+ libtelepathy >= $TELEPATHY_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ ])
+Only in empathy-0.1: configure.ac~
+diff -ur empathy-0.1.orig/libempathy-gtk/gossip-ui-utils.c empathy-0.1/libempathy-gtk/gossip-ui-utils.c
+--- empathy-0.1.orig/libempathy-gtk/gossip-ui-utils.c 2007-04-25 23:05:40.000000000 +0100
++++ empathy-0.1/libempathy-gtk/gossip-ui-utils.c 2007-04-27 17:06:48.000000000 +0100
+@@ -31,7 +31,6 @@
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
+ #include <glade/glade.h>
+-#include <libgnome/libgnome.h>
+
+ #include <libmissioncontrol/mc-profile.h>
+
+@@ -1307,7 +1306,7 @@
+ GError *error = NULL;
+
+ real_url = fixup_url (url);
+- gnome_url_show (real_url, &error);
++ g_warning ("TODO: gnome_url_show (real_url, &error);");
+ if (error) {
+ g_warning ("Couldn't show URL:'%s'", real_url);
+ g_error_free (error);
+Only in empathy-0.1/libempathy-gtk: gossip-ui-utils.c~
diff --git a/packages/telepathy/empathy-0.5/.mtn2git_empty b/packages/telepathy/empathy-0.5/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/telepathy/empathy-0.5/.mtn2git_empty
diff --git a/packages/telepathy/empathy-0.5/no-gnome.diff b/packages/telepathy/empathy-0.5/no-gnome.diff
new file mode 100644
index 0000000000..29d6276f51
--- /dev/null
+++ b/packages/telepathy/empathy-0.5/no-gnome.diff
@@ -0,0 +1,146 @@
+Index: libempathy-gtk/gossip-ui-utils.c
+===================================================================
+--- libempathy-gtk/gossip-ui-utils.c (revision 99)
++++ libempathy-gtk/gossip-ui-utils.c (working copy)
+@@ -33,7 +33,7 @@
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
+ #include <glade/glade.h>
+-#include <libgnome/libgnome.h>
++#include <libgnomevfs/gnome-vfs-utils.h>
+
+ #include <libmissioncontrol/mc-profile.h>
+
+@@ -1280,13 +1280,14 @@
+ gossip_url_show (const char *url)
+ {
+ gchar *real_url;
+- GError *error = NULL;
++ GnomeVFSResult res;
+
+ real_url = fixup_url (url);
+- gnome_url_show (real_url, &error);
+- if (error) {
+- g_warning ("Couldn't show URL:'%s'", real_url);
+- g_error_free (error);
++ res = gnome_vfs_url_show (real_url);
++ if (res != GNOME_VFS_OK) {
++ g_warning ("Couldn't show URL %s: %s",
++ real_url,
++ gnome_vfs_result_to_string (res));
+ }
+
+ g_free (real_url);
+Index: src/empathy-chat-main.c
+===================================================================
+--- src/empathy-chat-main.c (revision 99)
++++ src/empathy-chat-main.c (working copy)
+@@ -28,9 +28,6 @@
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
+
+-#include <libgnome/gnome-program.h>
+-#include <libgnomeui/gnome-ui-init.h>
+-
+ #include <libtelepathy/tp-conn.h>
+ #include <libtelepathy/tp-chan.h>
+ #include <libmissioncontrol/mc-account.h>
+@@ -162,7 +159,6 @@
+ main (int argc, char *argv[])
+ {
+ EmpathyChandler *chandler;
+- GnomeProgram *program;
+ gchar *localedir;
+
+ localedir = gossip_paths_get_locale_path ();
+@@ -171,14 +167,8 @@
+ textdomain (GETTEXT_PACKAGE);
+ g_free (localedir);
+
+- program = gnome_program_init ("empathy-chat",
+- PACKAGE_VERSION,
+- LIBGNOMEUI_MODULE,
+- argc, argv,
+- GNOME_PROGRAM_STANDARD_PROPERTIES,
+- GNOME_PARAM_HUMAN_READABLE_NAME, PACKAGE_NAME,
+- NULL);
+-
++ gtk_init (&argc, &argv);
++
+ gtk_window_set_default_icon_name ("empathy");
+
+ if (g_getenv ("EMPATHY_DEBUG")) {
+@@ -194,7 +184,6 @@
+
+ gtk_main ();
+
+- g_object_unref (program);
+ g_object_unref (chandler);
+
+ return EXIT_SUCCESS;
+Index: src/empathy-main.c
+===================================================================
+--- src/empathy-main.c (revision 99)
++++ src/empathy-main.c (working copy)
+@@ -28,9 +28,6 @@
+ #include <glib/gi18n.h>
+ #include <gtk/gtk.h>
+
+-#include <libgnome/gnome-program.h>
+-#include <libgnomeui/gnome-ui-init.h>
+-
+ #include <libmissioncontrol/mc-account.h>
+ #include <libmissioncontrol/mc-account-monitor.h>
+ #include <libmissioncontrol/mission-control.h>
+@@ -136,7 +133,6 @@
+ McAccountMonitor *monitor;
+ EmpathyFilter *filter;
+ gchar *localedir;
+- GnomeProgram *program;
+ gboolean no_connect = FALSE;
+ GOptionContext *context;
+ GOptionEntry options[] = {
+@@ -157,14 +153,8 @@
+
+ g_set_application_name (PACKAGE_NAME);
+
+- program = gnome_program_init ("empathy",
+- PACKAGE_VERSION,
+- LIBGNOMEUI_MODULE,
+- argc, argv,
+- GNOME_PROGRAM_STANDARD_PROPERTIES,
+- "goption-context", context,
+- GNOME_PARAM_HUMAN_READABLE_NAME, PACKAGE_NAME,
+- NULL);
++ gtk_init (&argc, &argv);
++ /* TODO: option parsing */
+
+ gtk_window_set_default_icon_name ("empathy");
+
+@@ -204,7 +194,6 @@
+ g_object_unref (monitor);
+ g_object_unref (mc);
+ g_object_unref (icon);
+- g_object_unref (program);
+
+ return EXIT_SUCCESS;
+ }
+Index: configure.ac
+===================================================================
+--- configure.ac (revision 99)
++++ configure.ac (working copy)
+@@ -62,12 +62,13 @@
+
+ PKG_CHECK_MODULES(EMPATHY,
+ [
++ libxml-2.0
+ glib-2.0 >= $GLIB_REQUIRED
+ gobject-2.0
+ gtk+-2.0 >= $GTK_REQUIRED
+ gconf-2.0 >= $GCONF_REQUIRED
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+- libgnomeui-2.0
++ gnome-vfs-2.0
+ libtelepathy >= $TELEPATHY_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ ])
diff --git a/packages/telepathy/empathy_0.1.bb b/packages/telepathy/empathy_0.1.bb
new file mode 100644
index 0000000000..410acd01e3
--- /dev/null
+++ b/packages/telepathy/empathy_0.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Empathy: a Telepathy based IM client"
+HOMEPAGE = "http://blogs.gnome.org/view/xclaesse/2007/04/26/0"
+LICENSE = "GPL"
+DEPENDS = "telepathy-mission-control libtelepathy gtk+ gconf libglade"
+RDEPENDS = "telepathy-mission-control"
+RRECOMMENDS = "telepathy-gabble"
+
+PR="r1"
+
+SRC_URI = "http://projects.collabora.co.uk/~xclaesse/empathy-0.1.tar.gz \
+ file://no-gnome.diff;patch=1"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "/usr/share/mission-control/profiles/*.profile \
+ /usr/share/dbus-1/services/*.service \
+ /usr/share/telepathy/managers/*.chandler"
diff --git a/packages/telepathy/empathy_0.4.bb b/packages/telepathy/empathy_0.4.bb
new file mode 100644
index 0000000000..d5e699ceb7
--- /dev/null
+++ b/packages/telepathy/empathy_0.4.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Empathy: a Telepathy based IM client"
+HOMEPAGE = "http://blogs.gnome.org/view/xclaesse/2007/04/26/0"
+LICENSE = "GPL"
+DEPENDS = "libgnomeui telepathy-mission-control libtelepathy gtk+ gconf libglade"
+RDEPENDS = "telepathy-mission-control"
+RRECOMMENDS = "telepathy-gabble"
+
+PR="r0"
+
+inherit gnome
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/empathy/0.4/empathy-${PV}.tar.bz2 \
+ "
+
+FILES_${PN} += "${datadir}/mission-control/profiles/*.profile \
+ ${datadir}/dbus-1/services/*.service \
+ ${datadir}/telepathy/managers/*.chandler \
+ ${datadir}/icons"
diff --git a/packages/telepathy/empathy_0.5.bb b/packages/telepathy/empathy_0.5.bb
new file mode 100644
index 0000000000..e7b2af1d57
--- /dev/null
+++ b/packages/telepathy/empathy_0.5.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Empathy: a Telepathy based IM client"
+HOMEPAGE = "http://blogs.gnome.org/view/xclaesse/2007/04/26/0"
+LICENSE = "GPL"
+DEPENDS = "telepathy-mission-control libtelepathy gtk+ gconf libglade gnome-vfs"
+RDEPENDS = "telepathy-mission-control"
+RRECOMMENDS = "telepathy-gabble"
+
+PR="r1"
+
+inherit gnome
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/empathy/0.5/empathy-${PV}.tar.bz2 \
+ file://no-gnome.diff;patch=1;pnum=0"
+
+FILES_${PN} += "${datadir}/mission-control/profiles/*.profile \
+ ${datadir}/dbus-1/services/*.service \
+ ${datadir}/telepathy/managers/*.chandler \
+ ${datadir}/icons"
diff --git a/packages/telepathy/libtelepathy_0.0.53.bb b/packages/telepathy/libtelepathy_0.0.53.bb
new file mode 100644
index 0000000000..f3e4f37521
--- /dev/null
+++ b/packages/telepathy/libtelepathy_0.0.53.bb
@@ -0,0 +1,15 @@
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+DEPENDS = "glib-2.0 dbus"
+LICENSE = "LGPL"
+PR = "r1"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/libtelepathy/libtelepathy-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/telepathy \
+ ${datadir}/dbus-1"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/telepathy/telepathy-gabble-0.5.10/.mtn2git_empty b/packages/telepathy/telepathy-gabble-0.5.10/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/telepathy/telepathy-gabble-0.5.10/.mtn2git_empty
diff --git a/packages/telepathy/telepathy-gabble-0.5.10/gabble.manager b/packages/telepathy/telepathy-gabble-0.5.10/gabble.manager
new file mode 100644
index 0000000000..9000cd41cc
--- /dev/null
+++ b/packages/telepathy/telepathy-gabble-0.5.10/gabble.manager
@@ -0,0 +1,33 @@
+
+[ConnectionManager]
+BusName=org.freedesktop.Telepathy.ConnectionManager.gabble
+ObjectPath=/org/freedesktop/Telepathy/ConnectionManager/gabble
+
+[Protocol jabber]
+param-account=s required register
+param-password=s required register
+param-server=s
+param-resource=s
+param-priority=n
+param-port=q
+param-old-ssl=b
+param-register=b
+param-low-bandwidth=b
+param-https-proxy-server=s
+param-https-proxy-port=q
+param-fallback-conference-server=s
+param-stun-server=s
+param-stun-port=q
+param-ignore-ssl-errors=b
+param-alias=s
+param-mac=s
+param-btid=s
+default-resource=Telepathy
+default-priority=0
+default-port=5222
+default-old-ssl=false
+default-register=false
+default-low-bandwidth=false
+default-https-proxy-port=443
+default-stun-port=3478
+default-ignore-ssl-errors=false
diff --git a/packages/telepathy/telepathy-gabble_0.3.0.bb b/packages/telepathy/telepathy-gabble_0.3.0.bb
deleted file mode 100644
index b9675031e2..0000000000
--- a/packages/telepathy/telepathy-gabble_0.3.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Gabble: a Jabber/XMPP connection manager"
-HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
-DEPENDS = "glib-2.0 dbus loudmouth"
-LICENSE = "lgpl"
-
-SRC_URI = "http://telepathy.freedesktop.org/releases/telepathy-gabble/${P}.tar.gz"
-
-inherit autotools pkgconfig
-
-
-FILES_${PN} += "${datadir}/telepathy \
- ${datadir}/dbus-1"
diff --git a/packages/telepathy/telepathy-gabble_0.5.10.bb b/packages/telepathy/telepathy-gabble_0.5.10.bb
new file mode 100644
index 0000000000..fbc209eeb5
--- /dev/null
+++ b/packages/telepathy/telepathy-gabble_0.5.10.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Gabble: a Jabber/XMPP connection manager"
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+DEPENDS = "glib-2.0 dbus loudmouth telepathy-glib"
+LICENSE = "LGPL"
+
+# gabble.manager needs to get regenerated every release, so please don't copy it over blindly
+SRC_URI = "http://telepathy.freedesktop.org/releases/telepathy-gabble/${P}.tar.gz \
+ file://gabble.manager"
+
+inherit autotools pkgconfig
+
+do_compile_prepend() {
+ cp ${WORKDIR}/gabble.manager ${S}/data/
+}
+
+FILES_${PN} += "${datadir}/telepathy \
+ ${datadir}/dbus-1"
diff --git a/packages/telepathy/telepathy-glib_0.5.10.bb b/packages/telepathy/telepathy-glib_0.5.10.bb
new file mode 100644
index 0000000000..f6b6a6c6b3
--- /dev/null
+++ b/packages/telepathy/telepathy-glib_0.5.10.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Telepathy framework - GLib library"
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+DEPENDS = "glib-2.0 dbus python-native dbus-native"
+LICENSE = "LGPL"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/telepathy-glib/${P}.tar.gz "
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/telepathy \
+ ${datadir}/dbus-1"
+
+do_stage() {
+ #
+ # copied autotools_stage_all because telepathy-glib has one lib only built as static
+ # so it can not be oe_libinstalled
+ #
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake DESTDIR="${STAGE_TEMP}" install
+ if [ -d ${STAGE_TEMP}/${includedir} ]; then
+ cp -fpPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
+ fi
+ if [ -d ${STAGE_TEMP}/${libdir} ]
+ then
+ for i in ${STAGE_TEMP}/${libdir}/*.la
+ do
+ if [ ! -f "$i" ]; then
+ cp -fpPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}
+ break
+ fi
+ done
+ oe_libinstall -so -C telepathy-glib/.libs libtelepathy-glib ${STAGING_LIBDIR}
+ fi
+ if [ -d ${STAGE_TEMP}/${datadir}/aclocal ]; then
+ install -d ${STAGING_DATADIR}/aclocal
+ cp -fpPR ${STAGE_TEMP}/${datadir}/aclocal/* ${STAGING_DATADIR}/aclocal
+ fi
+ rm -rf ${STAGE_TEMP}
+}
diff --git a/packages/telepathy/telepathy-mission-control_4.21.bb b/packages/telepathy/telepathy-mission-control_4.21.bb
new file mode 100644
index 0000000000..e604d8cea7
--- /dev/null
+++ b/packages/telepathy/telepathy-mission-control_4.21.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Telepathy Mission Control"
+HOMEPAGE = "http://mission-control.sourceforge.net/"
+LICENSE = "LGPL"
+SECTION = "libs"
+DEPENDS = "libtelepathy dbus-glib gconf"
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mission-control/telepathy-mission-control-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+PACKAGES =+ " \
+ libmissioncontrol \
+ libmissioncontrol-config \
+ libmissioncontrol-server \
+ libmissioncontrol-dev \
+ libmissioncontrol-config-dev \
+ libmissioncontrol-server-dev \
+ libmissioncontrol-dbg \
+ libmissioncontrol-config-dbg \
+ libmissioncontrol-server-dbg \
+"
+
+FILES_${PN} += "${datadir}/dbus*"
+
+FILES_libmissioncontrol = "${libdir}/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config = "${libdir}/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server = "${libdir}/libmissioncontrol-server.so.*"
+
+FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \
+ ${includedir}/libmissioncontrol/ \
+ ${libdir}/pkgconfig/libmissioncontrol.pc"
+FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*"
+FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*"
+
+FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/telepathy/telepathy-mission-control_4.22.bb b/packages/telepathy/telepathy-mission-control_4.22.bb
new file mode 100644
index 0000000000..2215d0a515
--- /dev/null
+++ b/packages/telepathy/telepathy-mission-control_4.22.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Telepathy Mission Control"
+HOMEPAGE = "http://mission-control.sourceforge.net/"
+LICENSE = "LGPL"
+SECTION = "libs"
+DEPENDS = "libtelepathy dbus-glib gconf"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mission-control/telepathy-mission-control-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+PACKAGES =+ " \
+ libmissioncontrol \
+ libmissioncontrol-config \
+ libmissioncontrol-server \
+ libmissioncontrol-dev \
+ libmissioncontrol-config-dev \
+ libmissioncontrol-server-dev \
+ libmissioncontrol-dbg \
+ libmissioncontrol-config-dbg \
+ libmissioncontrol-server-dbg \
+"
+
+FILES_${PN} += "${datadir}/dbus*"
+
+FILES_libmissioncontrol = "${libdir}/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config = "${libdir}/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server = "${libdir}/libmissioncontrol-server.so.*"
+
+FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \
+ ${includedir}/libmissioncontrol/ \
+ ${libdir}/pkgconfig/libmissioncontrol.pc"
+FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*"
+FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*"
+
+FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/tetex/tetex-native_3.0.bb b/packages/tetex/tetex-native_3.0.bb
index ed487452bf..4d683ff3d1 100644
--- a/packages/tetex/tetex-native_3.0.bb
+++ b/packages/tetex/tetex-native_3.0.bb
@@ -1,7 +1,7 @@
require tetex_${PV}.bb
inherit native
DEPENDS = ""
-PR = "r1"
+PR = "r2"
PACKAGES=""
RRECOMMENDS_${PN}=""
@@ -28,3 +28,8 @@ do_install () {
:
}
+
+do_rm_work () {
+ :
+}
+
diff --git a/packages/tetex/tetex_3.0.bb b/packages/tetex/tetex_3.0.bb
index 68e5184439..eedf8820b2 100644
--- a/packages/tetex/tetex_3.0.bb
+++ b/packages/tetex/tetex_3.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.tug.org/tetex"
LICENSE = "GPL"
SECTION = "console/utils"
DEPENDS = "tetex-native flex gd ncurses libpng t1lib virtual/libx11 libxau libxext libxt zlib"
-PR = "r5"
+PR = "r6"
SRC_URI = "ftp://dante.ctan.org/tex-archive/systems/unix/teTeX/current/distrib/tetex-src-${PV}.tar.gz \
file://configure.patch;patch=1"
@@ -26,7 +26,7 @@ EXTRA_OECONF = "--with-system-libgd \
--with-system-zlib \
--without-dialog \
--without-xdvik \
- --without-x11 \
+ --with-x11 \
--without-mf-x-toolkit"
# NOTE: In theory, teTeX has a good buildsystem, which automatically detects
@@ -49,7 +49,7 @@ do_configure() {
install:
echo "mickey _is_ cool - he tamed the tetex buildsystem"
all:
- echo "mickeys suck - he adds easter eggs in output that no one will ever read..."
+ echo "mickey sucks - he adds easter eggs in output that no one will ever read..."
EOF
}
# NOTE: Make sure it is using _our_ libtool and nothing else :/
@@ -83,10 +83,16 @@ do_install() {
DESTDIR="" \
LIBTOOL="${STAGING_BINDIR_NATIVE}/${HOST_SYS}-libtool"
MAKE="make -e" oe_runmake -e install
+ ln -sf ${bindir}/pdfetex ${D}${bindir}/latex
+ mv ${D}${libdir}/.libs/* ${D}${libdir}/ -f || true
}
-RRECOMMENDS_${PN} = "tetex-texmf-dvips tetex-texmf-texconfig tetex-texmf-fonts"
-PACKAGES =+ "tetex-texmf-dvips tetex-texmf-texconfig tetex-texi2html"
+RRECOMMENDS_${PN} = "tetex-bin tetex-texmf-dvips tetex-texmf-texconfig tetex-texmf-fonts"
+PACKAGES =+ "libkpathsea tetex-bin tetex-texmf-dvips tetex-texmf-texconfig tetex-texi2html"
+
+FILES_libkpathsea = "${libdir}/libkpathsea.so.*"
+FILES_tetex-bin = "${bindir}/*"
+
FILES_${PN} += "${localstatedir} ${datadir}"
FILES_${PN}-doc += "${datadir}/texinfo ${datadir}/man ${datadir}/info"
FILES_tetex-texmf-dvips = "${datadir}/texmf/dvips"
diff --git a/packages/thc/thcrut_1.2.5.bb b/packages/thc/thcrut_1.2.5.bb
index 2efec91167..f4e2b5bd7c 100644
--- a/packages/thc/thcrut_1.2.5.bb
+++ b/packages/thc/thcrut_1.2.5.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "RUT (aRe-yoU-There) RUT gathers informations from local and remote networks"
SECTION = "console/network"
-DEPENDS = "openssl libnet"
+DEPENDS = "libpcre openssl libnet libpcap"
HOMEPAGE = "http://thc.org/thc-rut/"
LICENSE = "GPL"
PR = "r1"
diff --git a/packages/thttpd/files/htpasswd_shared.diff b/packages/thttpd/files/htpasswd_shared.diff
new file mode 100644
index 0000000000..7ee2cd27dc
--- /dev/null
+++ b/packages/thttpd/files/htpasswd_shared.diff
@@ -0,0 +1,11 @@
+--- thttpd-2.25b/extras/Makefile.in.orig 2007-03-17 22:30:47.356393000 +0100
++++ thttpd-2.25b/extras/Makefile.in 2007-03-17 22:31:34.566393000 +0100
+@@ -36,7 +36,7 @@
+ DEFS = @DEFS@
+ INCLS = -I..
+ CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
+-STATICFLAG = @V_STATICFLAG@
++STATICFLAG =
+ LDFLAGS = @LDFLAGS@
+ LIBS = @LIBS@
+ NETLIBS = @V_NETLIBS@
diff --git a/packages/thttpd/thttpd_2.25b.bb b/packages/thttpd/thttpd_2.25b.bb
index c5d15269ea..c8520f84af 100644
--- a/packages/thttpd/thttpd_2.25b.bb
+++ b/packages/thttpd/thttpd_2.25b.bb
@@ -1,12 +1,13 @@
DESCRIPTION = "A simple, small, portable, fast, and secure HTTP server."
LICENSE = "BSD"
HOMEPAGE = "http://www.acme.com/software/thttpd/"
-PR="r5"
+PR="r6"
SRC_URI = "http://www.acme.com/software/thttpd/thttpd-2.25b.tar.gz \
file://install.patch;patch=1 \
file://acinclude.m4 \
- file://init"
+ file://init \
+ file://htpasswd_shared.diff;patch=1"
S = "${WORKDIR}/thttpd-${PV}"
INITSCRIPT_NAME = "thttpd"
diff --git a/packages/tinylogin/tinylogin-1.4/remove-index.patch b/packages/tinylogin/tinylogin-1.4/remove-index.patch
new file mode 100644
index 0000000000..fc35002bad
--- /dev/null
+++ b/packages/tinylogin/tinylogin-1.4/remove-index.patch
@@ -0,0 +1,11 @@
+--- /tmp/deluser.c 2007-05-13 10:38:19.000000000 +0200
++++ tinylogin-1.4/deluser.c 2007-05-13 10:38:50.185251000 +0200
+@@ -60,7 +60,7 @@
+ }
+ start++;
+
+- stop = index(start, '\n'); /* index is a BSD-ism */
++ stop = strchr(start, '\n'); /* index is a BSD-ism, strchr hopefully isn't */
+ b.start = start - buffer;
+ b.stop = stop - buffer;
+ return b;
diff --git a/packages/tinylogin/tinylogin_1.4.bb b/packages/tinylogin/tinylogin_1.4.bb
index 33f1c32aed..ad254bff6a 100644
--- a/packages/tinylogin/tinylogin_1.4.bb
+++ b/packages/tinylogin/tinylogin_1.4.bb
@@ -5,12 +5,13 @@ changing passwords, and otherwise maintaining users \
and groups on an embedded system."
HOMEPAGE = "http://tinylogin.busybox.net/"
LICENSE = "GPL"
-PR = "r3"
+PR = "r4"
SRC_URI = "http://tinylogin.busybox.net/downloads/tinylogin-${PV}.tar.bz2 \
file://cvs-20040608.patch;patch=1;pnum=1 \
file://add-system.patch;patch=1;pnum=1 \
- file://adduser-empty_pwd.patch;patch=1"
+ file://adduser-empty_pwd.patch;patch=1 \
+ file://remove-index.patch;patch=1"
EXTRA_OEMAKE = ""
diff --git a/packages/tomoe/libtomoe-gtk_0.1.0.bb b/packages/tomoe/libtomoe-gtk_0.1.0.bb
index edbbc3a2e9..31cccf6fe9 100644
--- a/packages/tomoe/libtomoe-gtk_0.1.0.bb
+++ b/packages/tomoe/libtomoe-gtk_0.1.0.bb
@@ -6,7 +6,7 @@ LICENSE = "LGPL"
inherit autotools pkgconfig
-SRC_URI = "http://prdownloads.sourceforge.jp/tomoe/17171/libtomoe-gtk-0.1.0.tar.gz"
+SRC_URI = "http://keihanna.dl.sourceforge.jp/tomoe/17171/libtomoe-gtk-0.1.0.tar.gz"
do_stage() {
autotools_stage_all
diff --git a/packages/tomoe/tomoe_0.2.1.bb b/packages/tomoe/tomoe_0.2.1.bb
index 7affece4a4..e77ef2a50e 100644
--- a/packages/tomoe/tomoe_0.2.1.bb
+++ b/packages/tomoe/tomoe_0.2.1.bb
@@ -9,4 +9,4 @@ do_stage () {
autotools_stage_all
}
-SRC_URI = "http://prdownloads.sourceforge.jp/tomoe/16048/tomoe-0.2.1.tar.gz"
+SRC_URI = "http://keihanna.dl.sourceforge.jp/tomoe/16048/tomoe-0.2.1.tar.gz"
diff --git a/packages/tomoe/uim-tomoe-gtk_0.2.0.bb b/packages/tomoe/uim-tomoe-gtk_0.2.0.bb
index 34503c0197..f0ed9c84a4 100644
--- a/packages/tomoe/uim-tomoe-gtk_0.2.0.bb
+++ b/packages/tomoe/uim-tomoe-gtk_0.2.0.bb
@@ -6,4 +6,4 @@ LICENSE = "LGPL"
inherit autotools pkgconfig
-SRC_URI = "http://prdownloads.sourceforge.jp/tomoe/17172/uim-tomoe-gtk-0.2.0.tar.gz"
+SRC_URI = "http://keihanna.dl.sourceforge.jp/tomoe/17172/uim-tomoe-gtk-0.2.0.tar.gz"
diff --git a/packages/tor/tor-0.1.1.26/.mtn2git_empty b/packages/tor/tor-0.1.1.26/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tor/tor-0.1.1.26/.mtn2git_empty
diff --git a/packages/tor/tor-0.1.1.23/compat.patch b/packages/tor/tor-0.1.1.26/compat.patch
index 6c54032667..6c54032667 100644
--- a/packages/tor/tor-0.1.1.23/compat.patch
+++ b/packages/tor/tor-0.1.1.26/compat.patch
diff --git a/packages/tor/tor-0.1.1.23/configure.patch b/packages/tor/tor-0.1.1.26/configure.patch
index dcd214feb2..dcd214feb2 100644
--- a/packages/tor/tor-0.1.1.23/configure.patch
+++ b/packages/tor/tor-0.1.1.26/configure.patch
diff --git a/packages/tor/tor-0.1.1.23/make.patch b/packages/tor/tor-0.1.1.26/make.patch
index 8b8851b22b..8b8851b22b 100644
--- a/packages/tor/tor-0.1.1.23/make.patch
+++ b/packages/tor/tor-0.1.1.26/make.patch
diff --git a/packages/tor/tor-0.1.1.23/openssl.patch b/packages/tor/tor-0.1.1.26/openssl.patch
index e413486273..e413486273 100644
--- a/packages/tor/tor-0.1.1.23/openssl.patch
+++ b/packages/tor/tor-0.1.1.26/openssl.patch
diff --git a/packages/tor/tor_0.1.1.23.bb b/packages/tor/tor_0.1.1.23.bb
deleted file mode 100644
index 29cda6945f..0000000000
--- a/packages/tor/tor_0.1.1.23.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "Tor is a network of virtual tunnels that allows people and groups \
- to improve their privacy and security on the Internet."
-SECTION = "console/network"
-PRIORITY = "optional"
-HOMEPAGE = "http://tor.eff.org"
-LICENSE = "BSD"
-PR="r0"
-DEPENDS = "libevent openssl zlib"
-
-SRC_URI = "http://tor.eff.org/dist/tor-0.1.1.23.tar.gz \
- file://configure.patch;patch=1;pnum=1 \
- file://make.patch;patch=1;pnum=1 \
- file://compat.patch;patch=1;pnum=1 \
- file://tor.init"
-
-
-inherit autotools update-rc.d
-
-INITSCRIPT_NAME = "tor"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/init.d
- install ${WORKDIR}/tor.init ${D}${sysconfdir}/init.d/tor
-}
diff --git a/packages/tor/tor_0.1.1.26.bb b/packages/tor/tor_0.1.1.26.bb
new file mode 100644
index 0000000000..51ff1001dd
--- /dev/null
+++ b/packages/tor/tor_0.1.1.26.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Tor is a network of virtual tunnels that allows people and groups \
+ to improve their privacy and security on the Internet."
+HOMEPAGE = "http://tor.eff.org"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "BSD"
+DEPENDS = "libevent openssl zlib"
+
+SRC_URI = "http://tor.eff.org/dist/${P}.tar.gz \
+ file://configure.patch;patch=1;pnum=1 \
+ file://make.patch;patch=1;pnum=1 \
+ file://compat.patch;patch=1;pnum=1 \
+ file://tor.init"
+
+
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "tor"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install ${WORKDIR}/tor.init ${D}${sysconfdir}/init.d/tor
+}
diff --git a/packages/tracker/.mtn2git_empty b/packages/tracker/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tracker/.mtn2git_empty
diff --git a/packages/tracker/files/.mtn2git_empty b/packages/tracker/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tracker/files/.mtn2git_empty
diff --git a/packages/tracker/files/no-ioprio.patch b/packages/tracker/files/no-ioprio.patch
new file mode 100644
index 0000000000..2ce4990bd4
--- /dev/null
+++ b/packages/tracker/files/no-ioprio.patch
@@ -0,0 +1,22 @@
+--- /tmp/configure.ac 2007-04-30 13:34:39.000000000 +0200
++++ tracker-0.5.4/configure.ac 2007-04-30 13:37:48.405251000 +0200
+@@ -513,19 +513,6 @@
+
+ AC_MSG_CHECKING([[checking ioprio support]])
+ ioprio_support=no
+-AC_RUN_IFELSE([ AC_LANG_PROGRAM([[
+-#include <stdlib.h>
+-#include <errno.h>
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-inline int ioprio_get (int which, int who)
+-{
+- return syscall (__NR_ioprio_get, which, who);
+-}
+- ]], [[
+-exit(ioprio_get(1,0));
+- ]]) ],
+- [ AC_DEFINE(IOPRIO_SUPPORT,[],[Define ioprio support]) ioprio_support=yes ])
+ AC_MSG_RESULT([$ioprio_support])
+
+ #####################################################
diff --git a/packages/tracker/tracker_0.5.4.bb b/packages/tracker/tracker_0.5.4.bb
new file mode 100644
index 0000000000..d10a2a646b
--- /dev/null
+++ b/packages/tracker/tracker_0.5.4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Tracker is a tool designed to extract information and metadata about your personal data so that it can be searched easily and quickly."
+LICENSE = "GPLv2"
+DEPENDS = "file gtk+ gstreamer gamin libgmime dbus poppler libexif libgsf"
+
+SRC_URI = "http://www.gnome.org/~jamiemcc/tracker/tracker-${PV}.tar.gz \
+ file://no-ioprio.patch;patch=1"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+ cp -dPr ${D}${STAGING_DATADIR}/* ${D}${datadir}/
+}
+
+FILES_${PN} += "${datadir}/dbus-1/"
diff --git a/packages/tree/.mtn2git_empty b/packages/tree/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tree/.mtn2git_empty
diff --git a/packages/tree/tree_1.5.1.bb b/packages/tree/tree_1.5.1.bb
new file mode 100644
index 0000000000..8bca919b22
--- /dev/null
+++ b/packages/tree/tree_1.5.1.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "a recursive directory listing program"
+HOMEPAGE = "http://mama.indstate.edu/users/ice/tree/"
+SECTION = "console/utils"
+LICENSE = "GPL"
+
+SRC_URI = "ftp://mama.indstate.edu/linux/tree/tree-${PV}.tgz"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/tree ${D}${bindir}/tree
+}
diff --git a/packages/tremor/tremor_20041119.bb b/packages/tremor/tremor_20041119.bb
index 276ac491e0..666b6c2563 100644
--- a/packages/tremor/tremor_20041119.bb
+++ b/packages/tremor/tremor_20041119.bb
@@ -14,14 +14,6 @@ inherit autotools
EXTRA_OECONF=" --enable-shared --disable-rpath "
-#do_configure_prepend() {
-# ./autogen.sh
-#}
-
do_stage() {
- oe_runmake install prefix=${STAGING_DIR} \
- bindir=${STAGING_BINDIR} \
- includedir=${STAGING_INCDIR}/tremor \
- libdir=${STAGING_LIBDIR} \
- datadir=${STAGING_DATADIR}
+ autotools_stage_all
}
diff --git a/packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty b/packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tslib/tslib-1.0/fic-gta01/.mtn2git_empty
diff --git a/packages/tslib/tslib-1.0/fic-gta01/ts.conf b/packages/tslib/tslib-1.0/fic-gta01/ts.conf
new file mode 100644
index 0000000000..82f712ef41
--- /dev/null
+++ b/packages/tslib/tslib-1.0/fic-gta01/ts.conf
@@ -0,0 +1,25 @@
+# Uncomment if you wish to use the linux input layer event interface
+module_raw input grab_events=1
+
+# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
+# module_raw collie
+
+# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
+# module_raw corgi
+
+# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
+# module_raw ucb1x00
+
+# Uncomment if you're using an HP iPaq h3600 or similar
+# module_raw h3600
+
+# Uncomment if you're using a Hitachi Webpad
+# module_raw mk712
+
+# Uncomment if you're using an IBM Arctic II
+# module_raw arctic2
+
+module pthres pmin=1
+module variance delta=30
+module dejitter delta=100
+module linear
diff --git a/packages/tslib/tslib-1.0/ts.conf b/packages/tslib/tslib-1.0/ts.conf
index 82f712ef41..1abde2fc7f 100644
--- a/packages/tslib/tslib-1.0/ts.conf
+++ b/packages/tslib/tslib-1.0/ts.conf
@@ -1,5 +1,5 @@
# Uncomment if you wish to use the linux input layer event interface
-module_raw input grab_events=1
+module_raw input grab_events=0
# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie
diff --git a/packages/tslib/tslib/fix_version.patch b/packages/tslib/tslib/fix_version.patch
new file mode 100644
index 0000000000..d6a0ebd0f3
--- /dev/null
+++ b/packages/tslib/tslib/fix_version.patch
@@ -0,0 +1,32 @@
+---
+ configure.ac | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+Index: tslib-1.0/configure.ac
+===================================================================
+--- tslib-1.0.orig/configure.ac 2006-08-24 22:02:55.000000000 +0100
++++ tslib-1.0/configure.ac 2007-07-09 21:04:38.000000000 +0100
+@@ -2,7 +2,7 @@
+ # Process this file with autoconf to produce a configure script.
+
+ AC_PREREQ(2.57)
+-AC_INIT(tslib, 0.0.2, kergoth@handhelds.org)
++AC_INIT(tslib, 1.0.0, kergoth@handhelds.org)
+ # AC_CONFIG_AUX_DIR(config)
+ AM_INIT_AUTOMAKE(dist-bzip2)
+ AC_CONFIG_SRCDIR([src/ts_close.c])
+@@ -193,10 +193,10 @@ TS_CONF='${sysconfdir}/ts.conf'
+ AC_SUBST(TS_CONF)
+
+ # Library versioning
+-LT_RELEASE=0.0
+-LT_CURRENT=1
+-LT_REVISION=1
+-LT_AGE=1
++LT_RELEASE=1.0
++LT_CURRENT=0
++LT_REVISION=0
++LT_AGE=0
+ AC_SUBST(LT_RELEASE)
+ AC_SUBST(LT_CURRENT)
+ AC_SUBST(LT_REVISION)
diff --git a/packages/tslib/tslib/htctornado/.mtn2git_empty b/packages/tslib/tslib/htctornado/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tslib/tslib/htctornado/.mtn2git_empty
diff --git a/packages/tslib/tslib/htctornado/ts.conf b/packages/tslib/tslib/htctornado/ts.conf
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/tslib/tslib/htctornado/ts.conf
diff --git a/packages/tslib/tslib_1.0.bb b/packages/tslib/tslib_1.0.bb
index 4a91109183..51bd1f6a7b 100644
--- a/packages/tslib/tslib_1.0.bb
+++ b/packages/tslib/tslib_1.0.bb
@@ -4,10 +4,11 @@ AUTHOR = "Russell King w/ plugins by Chris Larson et. al."
SECTION = "base"
LICENSE = "LGPL"
-PR = "r10"
+PR = "r16"
SRC_URI = "http://download.berlios.de/tslib/tslib-1.0.tar.bz2 \
file://tslib-input_raw-grab_events.patch;patch=1 \
+ file://fix_version.patch;patch=1 \
file://ts.conf \
file://ts.conf-simpad-2.4 \
file://ts.conf-collie-2.4 \
@@ -72,7 +73,8 @@ DEBIAN_NOAUTONAME_tslib-tests = "1"
DEBIAN_NOAUTONAME_tslib-calibrate = "1"
RDEPENDS_${PN} = "tslib-conf"
-
+# Ship calibration data if it exists
+RRECOMMENDS_angstrom = " pointercal "
FILES_${PN}-dbg += "${libdir}/ts/.debug*"
FILES_tslib-conf = "${sysconfdir}/ts.conf ${sysconfdir}/profile.d/tslib.sh ${datadir}/tslib"
diff --git a/packages/vera-fonts/ttf-bitstream-vera_1.10.bb b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb
index 871bc1d37c..871bc1d37c 100644
--- a/packages/vera-fonts/ttf-bitstream-vera_1.10.bb
+++ b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb
diff --git a/packages/ttf-fonts/ttf-dejavu/.mtn2git_empty b/packages/ttf-fonts/ttf-dejavu/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ttf-fonts/ttf-dejavu/.mtn2git_empty
diff --git a/packages/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf b/packages/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf
new file mode 100644
index 0000000000..9c6e56bf7c
--- /dev/null
+++ b/packages/ttf-fonts/ttf-dejavu/30-dejavu-aliases.conf
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <alias>
+ <family>DejaVu Serif</family>
+ <default><family>serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans</family>
+ <default><family>sans-serif</family></default>
+ </alias>
+ <alias>
+ <family>DejaVu Sans Mono</family>
+ <default><family>monospace</family></default>
+ </alias>
+</fontconfig>
diff --git a/packages/ttf-fonts/ttf-dejavu_2.13.bb b/packages/ttf-fonts/ttf-dejavu_2.13.bb
deleted file mode 100644
index c1b743aa1b..0000000000
--- a/packages/ttf-fonts/ttf-dejavu_2.13.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "DejaVu font - TTF Edition"
-LICENSE = "Bitstream Vera"
-HOMEPAGE = "http://dejavu.sourceforge.net/wiki/index.php/Main_Page"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-ttf-${PV}.tar.bz2"
-
-require ttf.inc
-
-S = "${WORKDIR}/dejavu-ttf-${PV}"
-
-PACKAGES = "ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \
- ttf-dejavu-serif ttf-dejavu-serif-condensed"
-
-FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf"
-FILES_ttf-dejavu-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf"
-FILES_ttf-dejavu-sans-condensed = "${datadir}/fonts/truetype/DejaVuSansCondensed*.ttf"
-FILES_ttf-dejavu-serif = "${datadir}/fonts/truetype/DejaVuSerif.ttf ${datadir}/fonts/truetype/DejaVuSerif-*.ttf"
-FILES_ttf-dejavu-serif-condensed = "${datadir}/fonts/truetype/DejaVuSerifCondensed*.ttf"
diff --git a/packages/ttf-fonts/ttf-dejavu_2.18.bb b/packages/ttf-fonts/ttf-dejavu_2.18.bb
new file mode 100644
index 0000000000..17339e8d8e
--- /dev/null
+++ b/packages/ttf-fonts/ttf-dejavu_2.18.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "DejaVu font - TTF Edition"
+LICENSE = "Bitstream Vera"
+HOMEPAGE = "http://dejavu.sourceforge.net/wiki/index.php/Main_Page"
+RDEPENDS = "ttf-dejavu-common"
+RDEPENDS_ttf-dejavu-common = ""
+PR = "r1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-ttf-${PV}.tar.bz2 \
+ file://30-dejavu-aliases.conf"
+
+require ttf.inc
+
+S = "${WORKDIR}/dejavu-ttf-${PV}"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/fonts/conf.d/
+ install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/
+}
+
+PACKAGES = "ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \
+ ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common"
+
+FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf"
+FILES_ttf-dejavu-sans-mono = "${datadir}/fonts/truetype/DejaVuSansMono*.ttf"
+FILES_ttf-dejavu-sans-condensed = "${datadir}/fonts/truetype/DejaVuSansCondensed*.ttf"
+FILES_ttf-dejavu-serif = "${datadir}/fonts/truetype/DejaVuSerif.ttf ${datadir}/fonts/truetype/DejaVuSerif-*.ttf"
+FILES_ttf-dejavu-serif-condensed = "${datadir}/fonts/truetype/DejaVuSerifCondensed*.ttf"
+FILES_ttf-dejavu-common = "${sysconfdir}"
diff --git a/packages/ttyrec/.mtn2git_empty b/packages/ttyrec/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ttyrec/.mtn2git_empty
diff --git a/packages/ttyrec/files/.mtn2git_empty b/packages/ttyrec/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ttyrec/files/.mtn2git_empty
diff --git a/packages/ttyrec/files/Makefile.patch b/packages/ttyrec/files/Makefile.patch
new file mode 100644
index 0000000000..4c2f5774af
--- /dev/null
+++ b/packages/ttyrec/files/Makefile.patch
@@ -0,0 +1,8 @@
+--- ttyrec-1.0.8/Makefile.orig 2007-04-03 02:08:25.000000000 +0000
++++ ttyrec-1.0.8/Makefile 2007-04-03 02:08:42.000000000 +0000
+@@ -1,5 +1,3 @@
+-CC = gcc
+-CFLAGS = -O2
+ VERSION = 1.0.8
+
+ TARGET = ttyrec ttyplay ttytime
diff --git a/packages/ttyrec/ttyrec_1.0.8.bb b/packages/ttyrec/ttyrec_1.0.8.bb
new file mode 100644
index 0000000000..bf58f245cb
--- /dev/null
+++ b/packages/ttyrec/ttyrec_1.0.8.bb
@@ -0,0 +1,41 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: ttyrec_1.0.8.bb
+# Date: 20070403 (YMD)
+
+DESCRIPTION = "ttyrec is a tty recorder. Recorded data can be played back with the included ttyplay command."
+HOMEPAGE = "http://0xcc.net/ttyrec/index.html.en"
+
+######################################################################################
+
+PR = "r0"
+
+######################################################################################
+
+SRC_URI = "http://0xcc.net/ttyrec/${PN}-${PV}.tar.gz \
+ file://Makefile.patch;patch=1"
+
+######################################################################################
+
+inherit autotools
+
+######################################################################################
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+######################################################################################
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -d ${D}/usr/share/man/man1
+
+ for binary in ttyrec ttyplay ttytime
+ do
+ install -m 0755 ${S}/${binary} ${D}/usr/bin/
+ install -m 0644 ${S}/${binary}.1 ${D}/usr/share/man/man1
+ done
+}
diff --git a/packages/twisted/twisted-2.5.0/.mtn2git_empty b/packages/twisted/twisted-2.5.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/twisted/twisted-2.5.0/.mtn2git_empty
diff --git a/packages/twisted/twisted-2.5.0/remove-zope-check.patch b/packages/twisted/twisted-2.5.0/remove-zope-check.patch
new file mode 100644
index 0000000000..2bd1b191da
--- /dev/null
+++ b/packages/twisted/twisted-2.5.0/remove-zope-check.patch
@@ -0,0 +1,18 @@
+Index: Twisted-2.5.0/TwistedCore-2.5.0/twisted/__init__.py
+===================================================================
+--- Twisted-2.5.0.orig/TwistedCore-2.5.0/twisted/__init__.py 2007-03-05 16:30:08.117422472 +0100
++++ Twisted-2.5.0/TwistedCore-2.5.0/twisted/__init__.py 2007-03-05 16:30:13.810553949 +0100
+@@ -14,13 +14,6 @@
+ raise RuntimeError("Twisted requires Python 2.3 or later.")
+ del sys
+
+-# Ensure zope.interface is installed
+-try:
+- from zope.interface import Interface
+- del Interface
+-except ImportError:
+- raise ImportError("you need zope.interface installed "
+- "(http://zope.org/Products/ZopeInterface/)")
+
+ # Ensure compat gets imported
+ from twisted.python import compat
diff --git a/packages/twisted/twisted_1.2.0.bb b/packages/twisted/twisted_1.2.0.bb
index 3424f8c387..40f8218fbb 100644
--- a/packages/twisted/twisted_1.2.0.bb
+++ b/packages/twisted/twisted_1.2.0.bb
@@ -1,14 +1,19 @@
-DESCRIPTION = "Twisted is an event-driven networking framework written in Python and licensed under the LGPL. \
-Twisted supports TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols \
-(including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more."
+DESCRIPTION = "Twisted is an event-driven networking framework written in \
+Python and licensed under the LGPL. \ Twisted supports TCP, UDP, SSL/TLS, \
+multicast, Unix sockets, a large number of protocols (including HTTP, NNTP, \
+IMAP, SSH, IRC, FTP, and others), and much more."
HOMEPAGE = "http://www.twistedmatrix.com"
SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "LGPL"
RDEPENDS = "python-core"
+PR = "r1"
SRC_URI = "http://tmrc.mit.edu/mirror/twisted/old/Twisted-${PV}.tar.bz2"
S = "${WORKDIR}/Twisted-${PV}"
inherit distutils
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/twisted/protocols/.debug"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/twisted/runner/.debug"
+FILES_${PN}-dbg += "${libdir}/python2.4/site-packages/twisted/spread/.debug"
diff --git a/packages/twisted/twisted_2.5.0.bb b/packages/twisted/twisted_2.5.0.bb
new file mode 100644
index 0000000000..c7620e4b84
--- /dev/null
+++ b/packages/twisted/twisted_2.5.0.bb
@@ -0,0 +1,180 @@
+DESCRIPTION = "Twisted is an event-driven networking framework written in Python and licensed under the LGPL. \
+Twisted supports TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols \
+(including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more."
+HOMEPAGE = "http://www.twistedmatrix.com"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+RDEPENDS = "python-core python-zopeinterface"
+RDEPENDS_python-twisted += "python-twisted-bin python-twisted-conch python-twisted-core \
+ python-twisted-lore python-twisted-mail python-twisted-names \
+ python-twisted-news python-twisted-runner python-twisted-web \
+ python-twisted-words"
+PR = "r6"
+
+SRC_URI = "http://tmrc.mit.edu/mirror/twisted/Twisted/2.5/Twisted-${PV}.tar.bz2 \
+ file://remove-zope-check.patch;patch=1"
+
+S = "${WORKDIR}/Twisted-${PV}"
+
+inherit distutils
+
+PACKAGES += "python-twisted-zsh python-twisted-test python-twisted-protocols \
+ python-twisted-runner-dbg \
+ python-twisted-bin python-twisted-conch python-twisted-lore \
+ python-twisted-mail python-twisted-names python-twisted-news python-twisted-runner \
+ python-twisted-web python-twisted-words python-twisted python-twisted-core \
+ "
+
+ALLOW_EMPTY = "1"
+FILES_${PN} = ""
+FILES_python-twisted = ""
+
+FILES_python-twisted-test = " \
+${libdir}/python2.4/site-packages/twisted/python/web/test \
+"
+
+FILES_python-twisted-protocols = " \
+${libdir}/python2.4/site-packages/twisted/python/protocols/ \
+"
+
+FILES_python-twisted-zsh = " \
+${libdir}/python2.4/site-packages/twisted/python/zsh \
+${libdir}/python2.4/site-packages/twisted/python/zshcomp.* \
+"
+
+FILES_python-twisted-bin = " \
+${libdir}/python2.4/site-packages/twisted/protocols/_c_urlarg.so \
+${libdir}/python2.4/site-packages/twisted/spread/cBanana.so"
+
+FILES_python-twisted-conch = " \
+${bindir}/ckeygen \
+${bindir}/tkconch \
+${bindir}/conch \
+${bindir}/conchftp \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_conch.py \
+${libdir}/python2.4/site-packages/twisted/conch \
+"
+
+FILES_python-twisted-core = " \
+${bindir}/manhole \
+${bindir}/mktap \
+${bindir}/twistd \
+${bindir}/tap2deb \
+${bindir}/tap2rpm \
+${bindir}/tapconvert \
+${bindir}/tkmktap \
+${bindir}/trial \
+${libdir}/python2.4/site-packages/twisted/*.py \
+${libdir}/python2.4/site-packages/twisted/plugins/__init__.py \
+${libdir}/python2.4/site-packages/twisted/plugins/notestplugin.py \
+${libdir}/python2.4/site-packages/twisted/plugins/testplugin.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_ftp.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_inet.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_manhole.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_portforward.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_socks.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_telnet.py \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_trial.py \
+${libdir}/python2.4/site-packages/twisted/plugins/dropin.cache \
+${libdir}/python2.4/site-packages/twisted/application \
+${libdir}/python2.4/site-packages/twisted/cred \
+${libdir}/python2.4/site-packages/twisted/enterprise \
+${libdir}/python2.4/site-packages/twisted/internet \
+${libdir}/python2.4/site-packages/twisted/manhole \
+${libdir}/python2.4/site-packages/twisted/manhole \
+${libdir}/python2.4/site-packages/twisted/persisted \
+${libdir}/python2.4/site-packages/twisted/protocols\
+${libdir}/python2.4/site-packages/twisted/python\
+${libdir}/python2.4/site-packages/twisted/python/timeoutqueue.py \
+${libdir}/python2.4/site-packages/twisted/python/filepath.py \
+${libdir}/python2.4/site-packages/twisted/python/dxprofile.py \
+${libdir}/python2.4/site-packages/twisted/python/plugin.py \
+${libdir}/python2.4/site-packages/twisted/python/htmlizer.py \
+${libdir}/python2.4/site-packages/twisted/python/__init__.py \
+${libdir}/python2.4/site-packages/twisted/python/dispatch.py \
+${libdir}/python2.4/site-packages/twisted/python/hook.py \
+${libdir}/python2.4/site-packages/twisted/python/threadpool.py \
+${libdir}/python2.4/site-packages/twisted/python/otp.py \
+${libdir}/python2.4/site-packages/twisted/python/usage.py \
+${libdir}/python2.4/site-packages/twisted/python/roots.py \
+${libdir}/python2.4/site-packages/twisted/python/versions.py \
+${libdir}/python2.4/site-packages/twisted/python/urlpath.py \
+${libdir}/python2.4/site-packages/twisted/python/util.py \
+${libdir}/python2.4/site-packages/twisted/python/components.py \
+${libdir}/python2.4/site-packages/twisted/python/logfile.py \
+${libdir}/python2.4/site-packages/twisted/python/runtime.py \
+${libdir}/python2.4/site-packages/twisted/python/reflect.py \
+${libdir}/python2.4/site-packages/twisted/python/context.py \
+${libdir}/python2.4/site-packages/twisted/python/threadable.py \
+${libdir}/python2.4/site-packages/twisted/python/rebuild.py \
+${libdir}/python2.4/site-packages/twisted/python/failure.py \
+${libdir}/python2.4/site-packages/twisted/python/lockfile.py \
+${libdir}/python2.4/site-packages/twisted/python/formmethod.py \
+${libdir}/python2.4/site-packages/twisted/python/finalize.py \
+${libdir}/python2.4/site-packages/twisted/python/win32.py \
+${libdir}/python2.4/site-packages/twisted/python/dist.py \
+${libdir}/python2.4/site-packages/twisted/python/shortcut.py \
+${libdir}/python2.4/site-packages/twisted/python/zipstream.py \
+${libdir}/python2.4/site-packages/twisted/python/release.py \
+${libdir}/python2.4/site-packages/twisted/python/syslog.py \
+${libdir}/python2.4/site-packages/twisted/python/log.py \
+${libdir}/python2.4/site-packages/twisted/python/compat.py \
+${libdir}/python2.4/site-packages/twisted/python/zshcomp.py \
+${libdir}/python2.4/site-packages/twisted/python/procutils.py \
+${libdir}/python2.4/site-packages/twisted/python/text.py \
+${libdir}/python2.4/site-packages/twisted/python/_twisted_zsh_stub \
+${libdir}/python2.4/site-packages/twisted/scripts/ \
+${libdir}/python2.4/site-packages/twisted/spread/ \
+${libdir}/python2.4/site-packages/twisted/tap/ \
+${libdir}/python2.4/site-packages/twisted/trial/ \
+${libdir}/python2.4/site-packages/twisted/__init__.py \
+${libdir}/python2.4/site-packages/twisted/_version.py \
+${libdir}/python2.4/site-packages/twisted/copyright.py \
+${libdir}/python2.4/site-packages/twisted/im.py \
+${libdir}/python2.4/site-packages/twisted/plugin.py \
+"
+
+FILES_python-twisted-lore = " \
+${bindir}/bookify \
+${bindir}/lore \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_lore.py \
+${libdir}/python2.4/site-packages/twisted/lore \
+"
+
+FILES_python-twisted-mail = " \
+${bindir}/mailmail \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_mail.py \
+${libdir}/python2.4/site-packages/twisted/mail \
+"
+
+FILES_python-twisted-names = " \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_names.py \
+${libdir}/python2.4/site-packages/twisted/names \
+"
+
+FILES_python-twisted-news = " \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_news.py \
+${libdir}/python2.4/site-packages/twisted/news \
+"
+
+FILES_python-twisted-runner = " \
+${libdir}python2.4/site-packages/twisted/runner/portmap.so \
+${libdir}/python2.4/site-packages/twisted/runner\
+"
+
+FILES_python-twisted-web = " \
+${bindir}/websetroot \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_web.py \
+${libdir}/python2.4/site-packages/twisted/web\
+"
+
+FILES_python-twisted-words = " \
+${bindir}/im \
+${libdir}/python2.4/site-packages/twisted/plugins/twisted_words.py \
+${libdir}/python2.4/site-packages/twisted/words\
+"
+
+FILES_python-twisted-runner-dbg = " \
+${libdir}/python2.4/site-packages/twisted/runner/.debug"
+
diff --git a/packages/tzcode/tzcode-native_2007c.bb b/packages/tzcode/tzcode-native_2007c.bb
deleted file mode 100644
index 126658bd39..0000000000
--- a/packages/tzcode/tzcode-native_2007c.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
-
-PR = "r1"
-
-SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzcode${PV}.tar.gz \
- ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
-
-S = "${WORKDIR}"
-
-inherit native
-
-do_stage () {
- install -m 755 zic ${STAGING_BINDIR_NATIVE}
- install -m 755 zdump ${STAGING_BINDIR_NATIVE}
- install -m 755 tzselect ${STAGING_BINDIR_NATIVE}
-}
-
-do_install () {
- :
-}
diff --git a/packages/tzcode/tzcode-native_2007e.bb b/packages/tzcode/tzcode-native_2007e.bb
new file mode 100644
index 0000000000..8e721d6d9a
--- /dev/null
+++ b/packages/tzcode/tzcode-native_2007e.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
+
+PR = "r0"
+
+SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzcode${PV}.tar.gz \
+ ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
+
+S = "${WORKDIR}"
+
+inherit native
+
+do_stage () {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 755 zic ${STAGING_BINDIR_NATIVE}/
+ install -m 755 zdump ${STAGING_BINDIR_NATIVE}/
+ install -m 755 tzselect ${STAGING_BINDIR_NATIVE}/
+}
+
+do_install () {
+ :
+}
diff --git a/packages/tzdata/tzdata_2007c.bb b/packages/tzdata/tzdata_2007c.bb
deleted file mode 100644
index 3b6c45502b..0000000000
--- a/packages/tzdata/tzdata_2007c.bb
+++ /dev/null
@@ -1,156 +0,0 @@
-DESCRIPTION = "Timezone data"
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "tzcode-native"
-
-PROVIDES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
- tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
- tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
-RPROVIDES = "tzdata"
-RCONFLICTS= "timezone-africa timezone-america timezone-antarctica \
- timezone-arctic timezone-asia timezone-atlantic \
- timezone-australia timezone-europe timezone-indian \
- timezone-iso3166.tab timezone-pacific timezone-zone.tab"
-
-SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
-
-S = "${WORKDIR}"
-
-TZONES= "africa antarctica asia australasia europe northamerica southamerica \
- factory solar87 solar88 solar89 etcetera backward systemv \
-# pacificnew \
- "
-
-do_compile () {
- for zone in ${TZONES}; do \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- done
-}
-
-do_install () {
- install -d ${D}/usr ${D}${datadir}/zoneinfo
- cp -pPR ${S}/usr ${D}/
-}
-
-# Packages primarily organized by directory with a major city
-# in most time zones in the base package
-
-PACKAGES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
- tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
- tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
-
-FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*"
-RPROVIDES_tzdata-africa = "tzdata-africa"
-
-FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \
- ${datadir}/zoneinfo/US/* \
- ${datadir}/zoneinfo/Brazil/* \
- ${datadir}/zoneinfo/Canada/* \
- ${datadir}/zoneinfo/Mexico/* \
- ${datadir}/zoneinfo/Chile/*"
-RPROVIDES_tzdata-americas = "tzdata-americas"
-
-FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*"
-RPROVIDES_tzdata-antarctica = "tzdata-antarctica"
-
-FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*"
-RPROVIDES_tzdata-arctic = "tzdata-arctic"
-
-FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \
- ${datadir}/zoneinfo/Indian/* \
- ${datadir}/zoneinfo/Mideast/*"
-RPROVIDES_tzdata-asia = "tzdata-asia"
-
-FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*"
-RPROVIDES_tzdata-atlantic = "tzdata-atlantic"
-
-FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*"
-RPROVIDES_tzdata-australia = "tzdata-australia"
-
-FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*"
-RPROVIDES_tzdata-europe = "tzdata-europe"
-
-FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*"
-RPROVIDES_tzdata-pacific = "tzdata-pacific"
-
-FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*"
-RPROVIDES_tzdata-posix = "tzdata-posix"
-
-FILES_tzdata-right += "${datadir}/zoneinfo/right/*"
-RPROVIDES_tzdata-right = "tzdata-right"
-
-
-FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \
- ${datadir}/zoneinfo/Egypt \
- ${datadir}/zoneinfo/Eire \
- ${datadir}/zoneinfo/Factory \
- ${datadir}/zoneinfo/GB-Eire \
- ${datadir}/zoneinfo/Hongkong \
- ${datadir}/zoneinfo/Iceland \
- ${datadir}/zoneinfo/Iran \
- ${datadir}/zoneinfo/Israel \
- ${datadir}/zoneinfo/Jamaica \
- ${datadir}/zoneinfo/Japan \
- ${datadir}/zoneinfo/Kwajalein \
- ${datadir}/zoneinfo/Libya \
- ${datadir}/zoneinfo/Navajo \
- ${datadir}/zoneinfo/Poland \
- ${datadir}/zoneinfo/Portugal \
- ${datadir}/zoneinfo/Singapore \
- ${datadir}/zoneinfo/Turkey"
-RPROVIDES_tzdata-misc = "tzdata-misc"
-
-
-FILES_${PN} += "${datadir}/zoneinfo/Pacific/Honolulu \
- ${datadir}/zoneinfo/America/Anchorage \
- ${datadir}/zoneinfo/America/Los_Angeles \
- ${datadir}/zoneinfo/America/Denver \
- ${datadir}/zoneinfo/America/Chicago \
- ${datadir}/zoneinfo/America/New_York \
- ${datadir}/zoneinfo/America/Caracas \
- ${datadir}/zoneinfo/America/Sao_Paulo \
- ${datadir}/zoneinfo/Europe/London \
- ${datadir}/zoneinfo/Europe/Paris \
- ${datadir}/zoneinfo/Africa/Cairo \
- ${datadir}/zoneinfo/Europe/Moscow \
- ${datadir}/zoneinfo/Asia/Dubai \
- ${datadir}/zoneinfo/Asia/Karachi \
- ${datadir}/zoneinfo/Asia/Dhaka \
- ${datadir}/zoneinfo/Asia/Bankok \
- ${datadir}/zoneinfo/Asia/Hong_Kong \
- ${datadir}/zoneinfo/Asia/Tokyo \
- ${datadir}/zoneinfo/Australia/Sydney \
- ${datadir}/zoneinfo/Pacific/Noumea \
- ${datadir}/zoneinfo/CET \
- ${datadir}/zoneinfo/CST6CDT \
- ${datadir}/zoneinfo/EET \
- ${datadir}/zoneinfo/EST \
- ${datadir}/zoneinfo/EST5EDT \
- ${datadir}/zoneinfo/GB \
- ${datadir}/zoneinfo/GMT \
- ${datadir}/zoneinfo/GMT+0 \
- ${datadir}/zoneinfo/GMT-0 \
- ${datadir}/zoneinfo/GMT0 \
- ${datadir}/zoneinfo/Greenwich \
- ${datadir}/zoneinfo/HST \
- ${datadir}/zoneinfo/MET \
- ${datadir}/zoneinfo/MST \
- ${datadir}/zoneinfo/MST7MDT \
- ${datadir}/zoneinfo/NZ \
- ${datadir}/zoneinfo/NZ-CHAT \
- ${datadir}/zoneinfo/PRC \
- ${datadir}/zoneinfo/PST8PDT \
- ${datadir}/zoneinfo/ROC \
- ${datadir}/zoneinfo/ROK \
- ${datadir}/zoneinfo/UCT \
- ${datadir}/zoneinfo/UTC \
- ${datadir}/zoneinfo/Universal \
- ${datadir}/zoneinfo/W-SU \
- ${datadir}/zoneinfo/WET \
- ${datadir}/zoneinfo/Zulu \
- ${datadir}/zoneinfo/Etc/*"
diff --git a/packages/tzdata/tzdata_2007e.bb b/packages/tzdata/tzdata_2007e.bb
new file mode 100644
index 0000000000..46d941c269
--- /dev/null
+++ b/packages/tzdata/tzdata_2007e.bb
@@ -0,0 +1,158 @@
+DESCRIPTION = "Timezone data"
+SECTION = "base"
+PRIORITY = "optional"
+DEPENDS = "tzcode-native"
+
+PR = "r0"
+
+PROVIDES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
+ tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
+ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
+RPROVIDES = "tzdata"
+RCONFLICTS= "timezones timezone-africa timezone-america timezone-antarctica \
+ timezone-arctic timezone-asia timezone-atlantic \
+ timezone-australia timezone-europe timezone-indian \
+ timezone-iso3166.tab timezone-pacific timezone-zone.tab"
+
+SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
+
+S = "${WORKDIR}"
+
+TZONES= "africa antarctica asia australasia europe northamerica southamerica \
+ factory solar87 solar88 solar89 etcetera backward systemv \
+# pacificnew \
+ "
+
+do_compile () {
+ for zone in ${TZONES}; do \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ done
+}
+
+do_install () {
+ install -d ${D}/usr ${D}${datadir}/zoneinfo
+ cp -pPR ${S}/usr ${D}/
+}
+
+# Packages primarily organized by directory with a major city
+# in most time zones in the base package
+
+PACKAGES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
+ tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
+ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
+
+FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*"
+RPROVIDES_tzdata-africa = "tzdata-africa"
+
+FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \
+ ${datadir}/zoneinfo/US/* \
+ ${datadir}/zoneinfo/Brazil/* \
+ ${datadir}/zoneinfo/Canada/* \
+ ${datadir}/zoneinfo/Mexico/* \
+ ${datadir}/zoneinfo/Chile/*"
+RPROVIDES_tzdata-americas = "tzdata-americas"
+
+FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*"
+RPROVIDES_tzdata-antarctica = "tzdata-antarctica"
+
+FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*"
+RPROVIDES_tzdata-arctic = "tzdata-arctic"
+
+FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \
+ ${datadir}/zoneinfo/Indian/* \
+ ${datadir}/zoneinfo/Mideast/*"
+RPROVIDES_tzdata-asia = "tzdata-asia"
+
+FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*"
+RPROVIDES_tzdata-atlantic = "tzdata-atlantic"
+
+FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*"
+RPROVIDES_tzdata-australia = "tzdata-australia"
+
+FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*"
+RPROVIDES_tzdata-europe = "tzdata-europe"
+
+FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*"
+RPROVIDES_tzdata-pacific = "tzdata-pacific"
+
+FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*"
+RPROVIDES_tzdata-posix = "tzdata-posix"
+
+FILES_tzdata-right += "${datadir}/zoneinfo/right/*"
+RPROVIDES_tzdata-right = "tzdata-right"
+
+
+FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \
+ ${datadir}/zoneinfo/Egypt \
+ ${datadir}/zoneinfo/Eire \
+ ${datadir}/zoneinfo/Factory \
+ ${datadir}/zoneinfo/GB-Eire \
+ ${datadir}/zoneinfo/Hongkong \
+ ${datadir}/zoneinfo/Iceland \
+ ${datadir}/zoneinfo/Iran \
+ ${datadir}/zoneinfo/Israel \
+ ${datadir}/zoneinfo/Jamaica \
+ ${datadir}/zoneinfo/Japan \
+ ${datadir}/zoneinfo/Kwajalein \
+ ${datadir}/zoneinfo/Libya \
+ ${datadir}/zoneinfo/Navajo \
+ ${datadir}/zoneinfo/Poland \
+ ${datadir}/zoneinfo/Portugal \
+ ${datadir}/zoneinfo/Singapore \
+ ${datadir}/zoneinfo/Turkey"
+RPROVIDES_tzdata-misc = "tzdata-misc"
+
+
+FILES_${PN} += "${datadir}/zoneinfo/Pacific/Honolulu \
+ ${datadir}/zoneinfo/America/Anchorage \
+ ${datadir}/zoneinfo/America/Los_Angeles \
+ ${datadir}/zoneinfo/America/Denver \
+ ${datadir}/zoneinfo/America/Chicago \
+ ${datadir}/zoneinfo/America/New_York \
+ ${datadir}/zoneinfo/America/Caracas \
+ ${datadir}/zoneinfo/America/Sao_Paulo \
+ ${datadir}/zoneinfo/Europe/London \
+ ${datadir}/zoneinfo/Europe/Paris \
+ ${datadir}/zoneinfo/Africa/Cairo \
+ ${datadir}/zoneinfo/Europe/Moscow \
+ ${datadir}/zoneinfo/Asia/Dubai \
+ ${datadir}/zoneinfo/Asia/Karachi \
+ ${datadir}/zoneinfo/Asia/Dhaka \
+ ${datadir}/zoneinfo/Asia/Bankok \
+ ${datadir}/zoneinfo/Asia/Hong_Kong \
+ ${datadir}/zoneinfo/Asia/Tokyo \
+ ${datadir}/zoneinfo/Australia/Sydney \
+ ${datadir}/zoneinfo/Pacific/Noumea \
+ ${datadir}/zoneinfo/CET \
+ ${datadir}/zoneinfo/CST6CDT \
+ ${datadir}/zoneinfo/EET \
+ ${datadir}/zoneinfo/EST \
+ ${datadir}/zoneinfo/EST5EDT \
+ ${datadir}/zoneinfo/GB \
+ ${datadir}/zoneinfo/GMT \
+ ${datadir}/zoneinfo/GMT+0 \
+ ${datadir}/zoneinfo/GMT-0 \
+ ${datadir}/zoneinfo/GMT0 \
+ ${datadir}/zoneinfo/Greenwich \
+ ${datadir}/zoneinfo/HST \
+ ${datadir}/zoneinfo/MET \
+ ${datadir}/zoneinfo/MST \
+ ${datadir}/zoneinfo/MST7MDT \
+ ${datadir}/zoneinfo/NZ \
+ ${datadir}/zoneinfo/NZ-CHAT \
+ ${datadir}/zoneinfo/PRC \
+ ${datadir}/zoneinfo/PST8PDT \
+ ${datadir}/zoneinfo/ROC \
+ ${datadir}/zoneinfo/ROK \
+ ${datadir}/zoneinfo/UCT \
+ ${datadir}/zoneinfo/UTC \
+ ${datadir}/zoneinfo/Universal \
+ ${datadir}/zoneinfo/W-SU \
+ ${datadir}/zoneinfo/WET \
+ ${datadir}/zoneinfo/Zulu \
+ ${datadir}/zoneinfo/Etc/*"
diff --git a/packages/uboot-utils/fw_env.h.patch b/packages/uboot-utils/fw_env.h.patch
deleted file mode 100644
index 2ef2bb83c4..0000000000
--- a/packages/uboot-utils/fw_env.h.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- u-boot-1.1.2.orig/tools/env/fw_env.h 2003-06-27 14:32:49.000000000 -0700
-+++ u-boot-1.1.2/tools/env/fw_env.h 2006-11-16 10:51:01.000000000 -0800
-@@ -27,14 +27,15 @@
- * See included "fw_env.config" sample file (TRAB board)
- * for notes on configuration.
- */
--#define CONFIG_FILE "/etc/fw_env.config"
-
--#define HAVE_REDUND /* For systems with 2 env sectors */
--#define DEVICE1_NAME "/dev/mtd1"
-+/* #define CONFIG_FILE "/etc/fw_env.config" */
-+
-+#undef HAVE_REDUND /* For systems with 2 env sectors */
-+#define DEVICE1_NAME "/dev/mtd/3"
- #define DEVICE2_NAME "/dev/mtd2"
--#define DEVICE1_OFFSET 0x0000
--#define ENV1_SIZE 0x4000
--#define DEVICE1_ESIZE 0x4000
-+#define DEVICE1_OFFSET 0x30000
-+#define ENV1_SIZE 0x10000
-+#define DEVICE1_ESIZE 0x10000
- #define DEVICE2_OFFSET 0x0000
- #define ENV2_SIZE 0x4000
- #define DEVICE2_ESIZE 0x4000
diff --git a/packages/uboot-utils/uboot-utils_1.1.2.bb b/packages/uboot-utils/uboot-utils_1.1.2.bb
deleted file mode 100644
index 3bcf1eba6c..0000000000
--- a/packages/uboot-utils/uboot-utils_1.1.2.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "U-boot bootloader OS env. access tools for PPC"
-SECTION = "bootloaders"
-PRIORITY = "optional"
-LICENSE = "GPL"
-DEPENDS = "mtd-utils"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/u-boot/u-boot-${PV}.tar.bz2 \
- file://fw_env.h.patch;patch=1 \
- file://fw_env.c.patch;patch=1 \
- file://tools-Makefile.patch;patch=1 \
- file://env-Makefile.patch;patch=1 "
-
-S = "${WORKDIR}/u-boot-${PV}"
-EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
-TARGET_LDFLAGS = ""
-
-UBOOT_MACHINE ?= "${MACHINE}_config"
-
-inherit base
-
-do_configure() {
- :
-}
-
-do_compile () {
- oe_runmake Sandpoint8240_config
- oe_runmake tools
-}
-
-# install mkimage for the kernel makefile
-do_stage() {
- install -m 755 ${S}/tools/mkimage ${STAGING_BINDIR_NATIVE}
-}
-
-do_install () {
- install -d ${D}/sbin
- install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_printenv
- install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_setenv
-}
diff --git a/packages/uboot/files/gta01_nand.h b/packages/uboot/files/gta01_nand.h
deleted file mode 100644
index 04cb743158..0000000000
--- a/packages/uboot/files/gta01_nand.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
- *
- * Configuation settings for the FIC GTA01 Linux GSM phone
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-/* we want to start u-boot directly from within NAND flash */
-#define CONFIG_S3C2410_NAND_BOOT 1
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-
-/* input clock of PLL */
-#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA01 has 12MHz input clock */
-
-
-#define USE_920T_MMU 1
-#define CONFIG_USE_IRQ 1
-
-/*
- * Size of malloc() pool
- */
-#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-
-/*
- * Hardware drivers
- */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on GTA01 */
-//#define CONFIG_HWFLOW 1
-
-/************************************************************
- * RTC
- ************************************************************/
-#define CONFIG_RTC_S3C24X0 1
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE 115200
-
-/***********************************************************
- * Command definition
- ***********************************************************/
-#define CONFIG_COMMANDS (\
- CFG_CMD_BDI | \
- CFG_CMD_LOADS | \
- CFG_CMD_LAODB | \
- CFG_CMD_IMI | \
- CFG_CMD_CACHE | \
- CFG_CMD_MEMORY | \
- CFG_CMD_ENV | \
- /* CFG_CMD_IRQ | */ \
- CFG_CMD_BOOTD | \
- CFG_CMD_CONSOLE | \
- CFG_CMD_ASKENV | \
- CFG_CMD_RUN | \
- CFG_CMD_ECHO | \
- CFG_CMD_I2C | \
- CFG_CMD_REGINFO | \
- CFG_CMD_IMMAP | \
- CFG_CMD_DATE | \
- CFG_CMD_AUTOSCRIPT | \
- CFG_CMD_BSP | \
- CFG_CMD_ELF | \
- CFG_CMD_MISC | \
- CFG_CMD_USB | \
- CFG_CMD_JFFS2 | \
- CFG_CMD_DIAG | \
- /* CFG_CMD_HWFLOW | */ \
- CFG_CMD_SAVES | \
- CFG_CMD_NAND | \
- CFG_CMD_PORTIO | \
- CFG_CMD_MMC | \
- CFG_CMD_FAT | \
- CFG_CMD_EXT2 | \
- 0)
-/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-#include <cmd_confdefs.h>
-
-#define CONFIG_BOOTDELAY 3
-#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
-/*#define CONFIG_BOOTFILE "elinos-lart" */
-#define CONFIG_BOOTCOMMAND "nand load 0x32000000 0x34000 0x200000; bootm 0x32000000"
-
-#define CONFIG_DOS_PARTITION 1
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-/* what's this ? it's not used anywhere */
-#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP /* undef to save memory */
-#define CFG_PROMPT "GTA01 # " /* Monitor Command Prompt */
-#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS 16 /* max number of command args */
-#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-
-#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-
-#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-
-#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-
-/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-/* it to wrap 100 times (total 1562500) to get 1 sec. */
-#define CFG_HZ 1562500
-
-/* valid baudrates */
-#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-
-/*-----------------------------------------------------------------------
- * Stack sizes
- *
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-#endif
-
-#define CONFIG_USB_OHCI 1
-
-/*-----------------------------------------------------------------------
- * Physical Memory Map
- */
-#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-
-#if 1
-#define CFG_NO_FLASH 1
-#else
-#define CFG_MAX_FLASH_SECT 1
-#define CFG_MAX_FLASH_BANKS 1
-#endif
-
-#define CFG_ENV_IS_IN_NAND 1
-#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-
-#define NAND_MAX_CHIPS 1
-#define CFG_NAND_BASE 0x4e000000
-#define CFG_MAX_NAND_DEVICE 1
-
-#define CONFIG_MMC 1
-#define CFG_MMC_BASE 0xff000000
-
-/* EXT2 driver */
-#define CONFIG_EXT2 1
-
-/* FAT driver in u-boot is broken currently */
-#define CONFIG_FAT 1
-#define CONFIG_SUPPORT_VFAT 1
-
-/* JFFS2 driver */
-#define CONFIG_JFFS2_NAND 1
-#define CONFIG_JFFS2_NAND_DEV 0
-#define CONFIG_JFFS2_NAND_OFF 0x634000
-#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
-
-/* ATAG configuration */
-#define CONFIG_INITRD_TAG 1
-#define CONFIG_SETUP_MEMORY_TAGS 1
-#define CONFIG_CMDLINE_TAG 1
-#if 0
-#define CONFIG_SERIAL_TAG 1
-#define CONFIG_REVISION_TAG 1
-#endif
-
-#define CONFIG_DRIVER_S3C24X0_I2C 1
-#define CONFIG_HARD_I2C 1
-#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50707 data sheet */
-#define CFG_I2C_SLAVE 0x7f
-
-
-#if 0
-#define CONFIG_VIDEO
-#define CONFIG_VIDEO_S3C2410
-#define CONFIG_CFB_CONSOLE
-#define CONFIG_VIDEO_LOGO
-#define CONFIG_VGA_AS_SINGLE_DEVICE
-
-#define VIDEO_KBD_INIT_FCT 0
-#define VIDEO_TSTC_FCT serial_tstc
-#define VIDEO_GETC_FCT serial_getc
-
-#define LCD_VIDEO_ADDR 0x33d00000
-#endif
-
-#endif /* __CONFIG_H */
diff --git a/packages/uboot/files/qt2410.h b/packages/uboot/files/qt2410.h
deleted file mode 100644
index 627f365f86..0000000000
--- a/packages/uboot/files/qt2410.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- * Gary Jennejohn <gj@denx.de>
- * David Mueller <d.mueller@elsoft.ch>
- *
- * Configuation settings for the SAMSUNG SMDK2410 board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#if 0
-/* If we want to start u-boot from usb bootloader in NOR flash */
-#define CONFIG_SKIP_RELOCATE_UBOOT 1
-#define CONFIG_SKIP_LOWLEVEL_INIT 1
-#else
-/* If we want to start u-boot directly from within NAND flash */
-#define CONFIG_S3C2410_NAND_BOOT 1
-#endif
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-
-/* input clock of PLL */
-#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
-
-
-#define USE_920T_MMU 1
-#define CONFIG_USE_IRQ 1
-//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-
-/*
- * Size of malloc() pool
- */
-#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-
-/*
- * Hardware drivers
- */
-#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
-#define CS8900_BASE 0x19000300
-#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
-#define CONFIG_HWFLOW 1
-
-/************************************************************
- * RTC
- ************************************************************/
-#define CONFIG_RTC_S3C24X0 1
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE 115200
-
-/***********************************************************
- * Command definition
- ***********************************************************/
-#define CONFIG_COMMANDS \
- (CONFIG_CMD_DFL | \
- CFG_CMD_BSP | \
- CFG_CMD_CACHE | \
- CFG_CMD_DATE | \
- CFG_CMD_DHCP | \
- CFG_CMD_DIAG | \
- CFG_CMD_ELF | \
- CFG_CMD_EXT2 | \
- CFG_CMD_FAT | \
- CFG_CMD_HWFLOW | \
- /* CFG_CMD_IDE | */ \
- /* CFG_CMD_IRQ | */ \
- CFG_CMD_JFFS2 | \
- CFG_CMD_MMC | \
- CFG_CMD_NAND | \
- CFG_CMD_PING | \
- CFG_CMD_PORTIO | \
- CFG_CMD_REGINFO | \
- CFG_CMD_SAVES | \
- CFG_CMD_USB)
-
-/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-#include <cmd_confdefs.h>
-
-#define CONFIG_BOOTDELAY 3
-#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
-/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
-#define CONFIG_NETMASK 255.255.255.0
-#define CONFIG_IPADDR 10.0.0.110
-#define CONFIG_SERVERIP 10.0.0.1
-/*#define CONFIG_BOOTFILE "elinos-lart" */
-#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
-
-#define CONFIG_DOS_PARTITION 1
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-/* what's this ? it's not used anywhere */
-#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP /* undef to save memory */
-#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
-#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS 16 /* max number of command args */
-#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-
-#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-
-#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-
-#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-
-/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-/* it to wrap 100 times (total 1562500) to get 1 sec. */
-#define CFG_HZ 1562500
-
-/* valid baudrates */
-#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-
-/*-----------------------------------------------------------------------
- * Stack sizes
- *
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-#endif
-
-/* IDE/ATA config */
-
-#if 0
-#define CFG_IDE_MAXBUS 1
-#define CFG_IDE_MAXDEVICE 2
-#define CFG_IDE_PREINIT 0
-
-#define CFG_ATA_BASE_ADDR
-#endif
-
-#define CONFIG_USB_OHCI 1
-
-/*-----------------------------------------------------------------------
- * Physical Memory Map
- */
-#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-
-#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
-
-#define CFG_FLASH_BASE PHYS_FLASH_1
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-
-#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
-#if 0
-#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
-#endif
-
-#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
-#ifdef CONFIG_AMD_LV800
-#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
-#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
-#endif
-#ifdef CONFIG_AMD_LV400
-#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
-#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
-#endif
-
-/* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
-
-#define CFG_ENV_IS_IN_NAND 1
-#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-
-#define NAND_MAX_CHIPS 1
-#define CFG_NAND_BASE 0x4e000000
-#define CFG_MAX_NAND_DEVICE 1
-
-#define CONFIG_MMC 1
-#define CFG_MMC_BASE 0xff000000
-
-#define CONFIG_EXT2 1
-
-/* FAT driver in u-boot is broken currently */
-#define CONFIG_FAT 1
-#define CONFIG_SUPPORT_VFAT
-
-/* ATAG configuration */
-#define CONFIG_INITRD_TAG 1
-#define CONFIG_SETUP_MEMORY_TAGS 1
-#define CONFIG_CMDLINE_TAG 1
-#if 0
-#define CONFIG_SERIAL_TAG 1
-#define CONFIG_REVISION_TAG 1
-#endif
-
-
-#if 0
-#define CONFIG_VIDEO
-#define CONFIG_VIDEO_S3C2410
-#define CONFIG_CFB_CONSOLE
-#define CONFIG_VIDEO_LOGO
-#define CONFIG_VGA_AS_SINGLE_DEVICE
-
-#define VIDEO_KBD_INIT_FCT 0
-#define VIDEO_TSTC_FCT serial_tstc
-#define VIDEO_GETC_FCT serial_getc
-
-#define LCD_VIDEO_ADDR 0x33d00000
-#endif
-
-#endif /* __CONFIG_H */
diff --git a/packages/uboot/files/qt2410_nand.h b/packages/uboot/files/qt2410_nand.h
deleted file mode 100644
index 627f365f86..0000000000
--- a/packages/uboot/files/qt2410_nand.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- * Gary Jennejohn <gj@denx.de>
- * David Mueller <d.mueller@elsoft.ch>
- *
- * Configuation settings for the SAMSUNG SMDK2410 board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#if 0
-/* If we want to start u-boot from usb bootloader in NOR flash */
-#define CONFIG_SKIP_RELOCATE_UBOOT 1
-#define CONFIG_SKIP_LOWLEVEL_INIT 1
-#else
-/* If we want to start u-boot directly from within NAND flash */
-#define CONFIG_S3C2410_NAND_BOOT 1
-#endif
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-
-/* input clock of PLL */
-#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
-
-
-#define USE_920T_MMU 1
-#define CONFIG_USE_IRQ 1
-//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-
-/*
- * Size of malloc() pool
- */
-#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-
-/*
- * Hardware drivers
- */
-#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
-#define CS8900_BASE 0x19000300
-#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
-#define CONFIG_HWFLOW 1
-
-/************************************************************
- * RTC
- ************************************************************/
-#define CONFIG_RTC_S3C24X0 1
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE 115200
-
-/***********************************************************
- * Command definition
- ***********************************************************/
-#define CONFIG_COMMANDS \
- (CONFIG_CMD_DFL | \
- CFG_CMD_BSP | \
- CFG_CMD_CACHE | \
- CFG_CMD_DATE | \
- CFG_CMD_DHCP | \
- CFG_CMD_DIAG | \
- CFG_CMD_ELF | \
- CFG_CMD_EXT2 | \
- CFG_CMD_FAT | \
- CFG_CMD_HWFLOW | \
- /* CFG_CMD_IDE | */ \
- /* CFG_CMD_IRQ | */ \
- CFG_CMD_JFFS2 | \
- CFG_CMD_MMC | \
- CFG_CMD_NAND | \
- CFG_CMD_PING | \
- CFG_CMD_PORTIO | \
- CFG_CMD_REGINFO | \
- CFG_CMD_SAVES | \
- CFG_CMD_USB)
-
-/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-#include <cmd_confdefs.h>
-
-#define CONFIG_BOOTDELAY 3
-#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
-/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
-#define CONFIG_NETMASK 255.255.255.0
-#define CONFIG_IPADDR 10.0.0.110
-#define CONFIG_SERVERIP 10.0.0.1
-/*#define CONFIG_BOOTFILE "elinos-lart" */
-#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
-
-#define CONFIG_DOS_PARTITION 1
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-/* what's this ? it's not used anywhere */
-#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP /* undef to save memory */
-#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
-#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS 16 /* max number of command args */
-#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-
-#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-
-#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-
-#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-
-/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-/* it to wrap 100 times (total 1562500) to get 1 sec. */
-#define CFG_HZ 1562500
-
-/* valid baudrates */
-#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-
-/*-----------------------------------------------------------------------
- * Stack sizes
- *
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-#endif
-
-/* IDE/ATA config */
-
-#if 0
-#define CFG_IDE_MAXBUS 1
-#define CFG_IDE_MAXDEVICE 2
-#define CFG_IDE_PREINIT 0
-
-#define CFG_ATA_BASE_ADDR
-#endif
-
-#define CONFIG_USB_OHCI 1
-
-/*-----------------------------------------------------------------------
- * Physical Memory Map
- */
-#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-
-#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
-
-#define CFG_FLASH_BASE PHYS_FLASH_1
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-
-#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
-#if 0
-#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
-#endif
-
-#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
-#ifdef CONFIG_AMD_LV800
-#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
-#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
-#endif
-#ifdef CONFIG_AMD_LV400
-#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
-#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
-#endif
-
-/* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
-
-#define CFG_ENV_IS_IN_NAND 1
-#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-
-#define NAND_MAX_CHIPS 1
-#define CFG_NAND_BASE 0x4e000000
-#define CFG_MAX_NAND_DEVICE 1
-
-#define CONFIG_MMC 1
-#define CFG_MMC_BASE 0xff000000
-
-#define CONFIG_EXT2 1
-
-/* FAT driver in u-boot is broken currently */
-#define CONFIG_FAT 1
-#define CONFIG_SUPPORT_VFAT
-
-/* ATAG configuration */
-#define CONFIG_INITRD_TAG 1
-#define CONFIG_SETUP_MEMORY_TAGS 1
-#define CONFIG_CMDLINE_TAG 1
-#if 0
-#define CONFIG_SERIAL_TAG 1
-#define CONFIG_REVISION_TAG 1
-#endif
-
-
-#if 0
-#define CONFIG_VIDEO
-#define CONFIG_VIDEO_S3C2410
-#define CONFIG_CFB_CONSOLE
-#define CONFIG_VIDEO_LOGO
-#define CONFIG_VGA_AS_SINGLE_DEVICE
-
-#define VIDEO_KBD_INIT_FCT 0
-#define VIDEO_TSTC_FCT serial_tstc
-#define VIDEO_GETC_FCT serial_getc
-
-#define LCD_VIDEO_ADDR 0x33d00000
-#endif
-
-#endif /* __CONFIG_H */
diff --git a/packages/uboot/files/qt2410_ram.h b/packages/uboot/files/qt2410_ram.h
deleted file mode 100644
index 62cc88eaf0..0000000000
--- a/packages/uboot/files/qt2410_ram.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- * Gary Jennejohn <gj@denx.de>
- * David Mueller <d.mueller@elsoft.ch>
- *
- * Configuation settings for the SAMSUNG SMDK2410 board.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#if 1
-/* If we want to start u-boot from usb bootloader in NOR flash */
-#define CONFIG_SKIP_RELOCATE_UBOOT 1
-#define CONFIG_SKIP_LOWLEVEL_INIT 1
-#else
-/* If we want to start u-boot directly from within NAND flash */
-#define CONFIG_S3C2410_NAND_BOOT 1
-#endif
-
-/*
- * High Level Configuration Options
- * (easy to change)
- */
-#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-
-/* input clock of PLL */
-#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
-
-
-#define USE_920T_MMU 1
-#define CONFIG_USE_IRQ 1
-//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-
-/*
- * Size of malloc() pool
- */
-#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-
-/*
- * Hardware drivers
- */
-#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
-#define CS8900_BASE 0x19000300
-#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
-
-/*
- * select serial console configuration
- */
-#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
-#define CONFIG_HWFLOW 1
-
-/************************************************************
- * RTC
- ************************************************************/
-#define CONFIG_RTC_S3C24X0 1
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-
-#define CONFIG_BAUDRATE 115200
-
-/***********************************************************
- * Command definition
- ***********************************************************/
-#define CONFIG_COMMANDS \
- (CONFIG_CMD_DFL | \
- CFG_CMD_BSP | \
- CFG_CMD_CACHE | \
- CFG_CMD_DATE | \
- CFG_CMD_DHCP | \
- CFG_CMD_DIAG | \
- CFG_CMD_ELF | \
- CFG_CMD_EXT2 | \
- CFG_CMD_FAT | \
- CFG_CMD_HWFLOW | \
- /* CFG_CMD_IDE | */ \
- /* CFG_CMD_IRQ | */ \
- CFG_CMD_JFFS2 | \
- CFG_CMD_MMC | \
- CFG_CMD_NAND | \
- CFG_CMD_PING | \
- CFG_CMD_PORTIO | \
- CFG_CMD_REGINFO | \
- CFG_CMD_SAVES | \
- CFG_CMD_USB)
-
-/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-#include <cmd_confdefs.h>
-
-#define CONFIG_BOOTDELAY 3
-#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
-/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
-#define CONFIG_NETMASK 255.255.255.0
-#define CONFIG_IPADDR 10.0.0.110
-#define CONFIG_SERVERIP 10.0.0.1
-/*#define CONFIG_BOOTFILE "elinos-lart" */
-#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
-
-#define CONFIG_DOS_PARTITION 1
-
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-/* what's this ? it's not used anywhere */
-#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-#endif
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP /* undef to save memory */
-#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
-#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define CFG_MAXARGS 16 /* max number of command args */
-#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-
-#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-
-#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-
-#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-
-/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-/* it to wrap 100 times (total 1562500) to get 1 sec. */
-#define CFG_HZ 1562500
-
-/* valid baudrates */
-#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-
-/*-----------------------------------------------------------------------
- * Stack sizes
- *
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-#ifdef CONFIG_USE_IRQ
-#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-#endif
-
-/* IDE/ATA config */
-
-#if 0
-#define CFG_IDE_MAXBUS 1
-#define CFG_IDE_MAXDEVICE 2
-#define CFG_IDE_PREINIT 0
-
-#define CFG_ATA_BASE_ADDR
-#endif
-
-#define CONFIG_USB_OHCI 1
-
-/*-----------------------------------------------------------------------
- * Physical Memory Map
- */
-#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-
-#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
-
-#define CFG_FLASH_BASE PHYS_FLASH_1
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-
-#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
-#if 0
-#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
-#endif
-
-#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
-#ifdef CONFIG_AMD_LV800
-#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
-#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
-#endif
-#ifdef CONFIG_AMD_LV400
-#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
-#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
-#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
-#endif
-
-/* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
-
-#define CFG_ENV_IS_IN_NAND 1
-#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-
-#define NAND_MAX_CHIPS 1
-#define CFG_NAND_BASE 0x4e000000
-#define CFG_MAX_NAND_DEVICE 1
-
-#define CONFIG_MMC 1
-#define CFG_MMC_BASE 0xff000000
-
-#define CONFIG_EXT2 1
-
-/* FAT driver in u-boot is broken currently */
-#define CONFIG_FAT 1
-#define CONFIG_SUPPORT_VFAT
-
-/* ATAG configuration */
-#define CONFIG_INITRD_TAG 1
-#define CONFIG_SETUP_MEMORY_TAGS 1
-#define CONFIG_CMDLINE_TAG 1
-#if 0
-#define CONFIG_SERIAL_TAG 1
-#define CONFIG_REVISION_TAG 1
-#endif
-
-
-#if 0
-#define CONFIG_VIDEO
-#define CONFIG_VIDEO_S3C2410
-#define CONFIG_CFB_CONSOLE
-#define CONFIG_VIDEO_LOGO
-#define CONFIG_VGA_AS_SINGLE_DEVICE
-
-#define VIDEO_KBD_INIT_FCT 0
-#define VIDEO_TSTC_FCT serial_tstc
-#define VIDEO_GETC_FCT serial_getc
-
-#define LCD_VIDEO_ADDR 0x33d00000
-#endif
-
-#endif /* __CONFIG_H */
diff --git a/packages/uboot/files/u-boot-20060807-qt2410.patch b/packages/uboot/files/u-boot-20060807-qt2410.patch
deleted file mode 100644
index ed9f987c81..0000000000
--- a/packages/uboot/files/u-boot-20060807-qt2410.patch
+++ /dev/null
@@ -1,8435 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 128ae59..5d7b5bb 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1638,6 +1638,9 @@ omap730p2_cs3boot_config : unconfig
- sbc2410x_config: unconfig
- @./mkconfig $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
-
-+qt2410_config : unconfig
-+ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
-+
- scb9328_config : unconfig
- @./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx
-
-diff --git a/board/qt2410/Makefile b/board/qt2410/Makefile
-new file mode 100644
-index 0000000..407b256
---- /dev/null
-+++ b/board/qt2410/Makefile
-@@ -0,0 +1,47 @@
-+#
-+# (C) Copyright 2000, 2001, 2002
-+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+#
-+# See file CREDITS for list of people who contributed to this
-+# project.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+
-+include $(TOPDIR)/config.mk
-+
-+LIB = lib$(BOARD).a
-+
-+OBJS := qt2410.o flash.o
-+SOBJS := lowlevel_init.o
-+
-+$(LIB): $(OBJS) $(SOBJS)
-+ $(AR) crv $@ $(OBJS) $(SOBJS)
-+
-+clean:
-+ rm -f $(SOBJS) $(OBJS)
-+
-+distclean: clean
-+ rm -f $(LIB) core *.bak .depend
-+
-+#########################################################################
-+
-+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
-+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
-+
-+-include .depend
-+
-+#########################################################################
-diff --git a/board/qt2410/config.mk b/board/qt2410/config.mk
-new file mode 100644
-index 0000000..1af85da
---- /dev/null
-+++ b/board/qt2410/config.mk
-@@ -0,0 +1,25 @@
-+#
-+# (C) Copyright 2002
-+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+#
-+# SAMSUNG SMDK2410 board with S3C2410X (ARM920T) cpu
-+#
-+# see http://www.samsung.com/ for more information on SAMSUNG
-+#
-+
-+#
-+# SMDK2410 has 1 bank of 64 MB DRAM
-+#
-+# 3000'0000 to 3400'0000
-+#
-+# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
-+# optionally with a ramdisk at 3080'0000
-+#
-+# we load ourself to 33F8'0000
-+#
-+# download area is 3300'0000
-+#
-+
-+
-+TEXT_BASE = 0x33F80000
-diff --git a/board/qt2410/flash.c b/board/qt2410/flash.c
-new file mode 100644
-index 0000000..993946b
---- /dev/null
-+++ b/board/qt2410/flash.c
-@@ -0,0 +1,433 @@
-+/*
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Alex Zuepke <azu@sysgo.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+ulong myflush (void);
-+
-+
-+#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
-+#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
-+
-+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
-+
-+
-+#define CMD_READ_ARRAY 0x000000F0
-+#define CMD_UNLOCK1 0x000000AA
-+#define CMD_UNLOCK2 0x00000055
-+#define CMD_ERASE_SETUP 0x00000080
-+#define CMD_ERASE_CONFIRM 0x00000030
-+#define CMD_PROGRAM 0x000000A0
-+#define CMD_UNLOCK_BYPASS 0x00000020
-+
-+#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
-+#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
-+
-+#define BIT_ERASE_DONE 0x00000080
-+#define BIT_RDY_MASK 0x00000080
-+#define BIT_PROGRAM_ERROR 0x00000020
-+#define BIT_TIMEOUT 0x80000000 /* our flag */
-+
-+#define READY 1
-+#define ERR 2
-+#define TMO 4
-+
-+/*-----------------------------------------------------------------------
-+ */
-+
-+ulong flash_init (void)
-+{
-+ int i, j;
-+ ulong size = 0;
-+
-+ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
-+ ulong flashbase = 0;
-+
-+ flash_info[i].flash_id =
-+#if defined(CONFIG_AMD_LV400)
-+ (AMD_MANUFACT & FLASH_VENDMASK) |
-+ (AMD_ID_LV400B & FLASH_TYPEMASK);
-+#elif defined(CONFIG_AMD_LV800)
-+ (AMD_MANUFACT & FLASH_VENDMASK) |
-+ (AMD_ID_LV800B & FLASH_TYPEMASK);
-+#else
-+#error "Unknown flash configured"
-+#endif
-+ flash_info[i].size = FLASH_BANK_SIZE;
-+ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
-+ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
-+ if (i == 0)
-+ flashbase = PHYS_FLASH_1;
-+ else
-+ panic ("configured too many flash banks!\n");
-+ for (j = 0; j < flash_info[i].sector_count; j++) {
-+ if (j <= 3) {
-+ /* 1st one is 16 KB */
-+ if (j == 0) {
-+ flash_info[i].start[j] =
-+ flashbase + 0;
-+ }
-+
-+ /* 2nd and 3rd are both 8 KB */
-+ if ((j == 1) || (j == 2)) {
-+ flash_info[i].start[j] =
-+ flashbase + 0x4000 + (j -
-+ 1) *
-+ 0x2000;
-+ }
-+
-+ /* 4th 32 KB */
-+ if (j == 3) {
-+ flash_info[i].start[j] =
-+ flashbase + 0x8000;
-+ }
-+ } else {
-+ flash_info[i].start[j] =
-+ flashbase + (j - 3) * MAIN_SECT_SIZE;
-+ }
-+ }
-+ size += flash_info[i].size;
-+ }
-+
-+ flash_protect (FLAG_PROTECT_SET,
-+ CFG_FLASH_BASE,
-+ CFG_FLASH_BASE + monitor_flash_len - 1,
-+ &flash_info[0]);
-+
-+ flash_protect (FLAG_PROTECT_SET,
-+ CFG_ENV_ADDR,
-+ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
-+
-+ return size;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ */
-+void flash_print_info (flash_info_t * info)
-+{
-+ int i;
-+
-+ switch (info->flash_id & FLASH_VENDMASK) {
-+ case (AMD_MANUFACT & FLASH_VENDMASK):
-+ printf ("AMD: ");
-+ break;
-+ default:
-+ printf ("Unknown Vendor ");
-+ break;
-+ }
-+
-+ switch (info->flash_id & FLASH_TYPEMASK) {
-+ case (AMD_ID_LV400B & FLASH_TYPEMASK):
-+ printf ("1x Amd29LV400BB (4Mbit)\n");
-+ break;
-+ case (AMD_ID_LV800B & FLASH_TYPEMASK):
-+ printf ("1x Amd29LV800BB (8Mbit)\n");
-+ break;
-+ default:
-+ printf ("Unknown Chip Type\n");
-+ goto Done;
-+ break;
-+ }
-+
-+ printf (" Size: %ld MB in %d Sectors\n",
-+ info->size >> 20, info->sector_count);
-+
-+ printf (" Sector Start Addresses:");
-+ for (i = 0; i < info->sector_count; i++) {
-+ if ((i % 5) == 0) {
-+ printf ("\n ");
-+ }
-+ printf (" %08lX%s", info->start[i],
-+ info->protect[i] ? " (RO)" : " ");
-+ }
-+ printf ("\n");
-+
-+ Done:;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ */
-+
-+int flash_erase (flash_info_t * info, int s_first, int s_last)
-+{
-+ ushort result;
-+ int iflag, cflag, prot, sect;
-+ int rc = ERR_OK;
-+ int chip;
-+
-+ /* first look for protection bits */
-+
-+ if (info->flash_id == FLASH_UNKNOWN)
-+ return ERR_UNKNOWN_FLASH_TYPE;
-+
-+ if ((s_first < 0) || (s_first > s_last)) {
-+ return ERR_INVAL;
-+ }
-+
-+ if ((info->flash_id & FLASH_VENDMASK) !=
-+ (AMD_MANUFACT & FLASH_VENDMASK)) {
-+ return ERR_UNKNOWN_FLASH_VENDOR;
-+ }
-+
-+ prot = 0;
-+ for (sect = s_first; sect <= s_last; ++sect) {
-+ if (info->protect[sect]) {
-+ prot++;
-+ }
-+ }
-+ if (prot)
-+ return ERR_PROTECTED;
-+
-+ /*
-+ * Disable interrupts which might cause a timeout
-+ * here. Remember that our exception vectors are
-+ * at address 0 in the flash, and we don't want a
-+ * (ticker) exception to happen while the flash
-+ * chip is in programming mode.
-+ */
-+ cflag = icache_status ();
-+ icache_disable ();
-+ iflag = disable_interrupts ();
-+
-+ /* Start erase on unprotected sectors */
-+ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
-+ printf ("Erasing sector %2d ... ", sect);
-+
-+ /* arm simple, non interrupt dependent timer */
-+ reset_timer_masked ();
-+
-+ if (info->protect[sect] == 0) { /* not protected */
-+ vu_short *addr = (vu_short *) (info->start[sect]);
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ *addr = CMD_ERASE_CONFIRM;
-+
-+ /* wait until flash is ready */
-+ chip = 0;
-+
-+ do {
-+ result = *addr;
-+
-+ /* check timeout */
-+ if (get_timer_masked () >
-+ CFG_FLASH_ERASE_TOUT) {
-+ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-+ chip = TMO;
-+ break;
-+ }
-+
-+ if (!chip
-+ && (result & 0xFFFF) & BIT_ERASE_DONE)
-+ chip = READY;
-+
-+ if (!chip
-+ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
-+ chip = ERR;
-+
-+ } while (!chip);
-+
-+ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-+
-+ if (chip == ERR) {
-+ rc = ERR_PROG_ERROR;
-+ goto outahere;
-+ }
-+ if (chip == TMO) {
-+ rc = ERR_TIMOUT;
-+ goto outahere;
-+ }
-+
-+ printf ("ok.\n");
-+ } else { /* it was protected */
-+
-+ printf ("protected!\n");
-+ }
-+ }
-+
-+ if (ctrlc ())
-+ printf ("User Interrupt!\n");
-+
-+ outahere:
-+ /* allow flash to settle - wait 10 ms */
-+ udelay_masked (10000);
-+
-+ if (iflag)
-+ enable_interrupts ();
-+
-+ if (cflag)
-+ icache_enable ();
-+
-+ return rc;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ * Copy memory to flash
-+ */
-+
-+volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
-+{
-+ vu_short *addr = (vu_short *) dest;
-+ ushort result;
-+ int rc = ERR_OK;
-+ int cflag, iflag;
-+ int chip;
-+
-+ /*
-+ * Check if Flash is (sufficiently) erased
-+ */
-+ result = *addr;
-+ if ((result & data) != data)
-+ return ERR_NOT_ERASED;
-+
-+
-+ /*
-+ * Disable interrupts which might cause a timeout
-+ * here. Remember that our exception vectors are
-+ * at address 0 in the flash, and we don't want a
-+ * (ticker) exception to happen while the flash
-+ * chip is in programming mode.
-+ */
-+ cflag = icache_status ();
-+ icache_disable ();
-+ iflag = disable_interrupts ();
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
-+ *addr = CMD_PROGRAM;
-+ *addr = data;
-+
-+ /* arm simple, non interrupt dependent timer */
-+ reset_timer_masked ();
-+
-+ /* wait until flash is ready */
-+ chip = 0;
-+ do {
-+ result = *addr;
-+
-+ /* check timeout */
-+ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
-+ chip = ERR | TMO;
-+ break;
-+ }
-+ if (!chip && ((result & 0x80) == (data & 0x80)))
-+ chip = READY;
-+
-+ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
-+ result = *addr;
-+
-+ if ((result & 0x80) == (data & 0x80))
-+ chip = READY;
-+ else
-+ chip = ERR;
-+ }
-+
-+ } while (!chip);
-+
-+ *addr = CMD_READ_ARRAY;
-+
-+ if (chip == ERR || *addr != data)
-+ rc = ERR_PROG_ERROR;
-+
-+ if (iflag)
-+ enable_interrupts ();
-+
-+ if (cflag)
-+ icache_enable ();
-+
-+ return rc;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ * Copy memory to flash.
-+ */
-+
-+int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-+{
-+ ulong cp, wp;
-+ int l;
-+ int i, rc;
-+ ushort data;
-+
-+ wp = (addr & ~1); /* get lower word aligned address */
-+
-+ /*
-+ * handle unaligned start bytes
-+ */
-+ if ((l = addr - wp) != 0) {
-+ data = 0;
-+ for (i = 0, cp = wp; i < l; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+ for (; i < 2 && cnt > 0; ++i) {
-+ data = (data >> 8) | (*src++ << 8);
-+ --cnt;
-+ ++cp;
-+ }
-+ for (; cnt == 0 && i < 2; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+
-+ if ((rc = write_hword (info, wp, data)) != 0) {
-+ return (rc);
-+ }
-+ wp += 2;
-+ }
-+
-+ /*
-+ * handle word aligned part
-+ */
-+ while (cnt >= 2) {
-+ data = *((vu_short *) src);
-+ if ((rc = write_hword (info, wp, data)) != 0) {
-+ return (rc);
-+ }
-+ src += 2;
-+ wp += 2;
-+ cnt -= 2;
-+ }
-+
-+ if (cnt == 0) {
-+ return ERR_OK;
-+ }
-+
-+ /*
-+ * handle unaligned tail bytes
-+ */
-+ data = 0;
-+ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
-+ data = (data >> 8) | (*src++ << 8);
-+ --cnt;
-+ }
-+ for (; i < 2; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+
-+ return write_hword (info, wp, data);
-+}
-diff --git a/board/qt2410/lowlevel_init.S b/board/qt2410/lowlevel_init.S
-new file mode 100644
-index 0000000..310f2a0
---- /dev/null
-+++ b/board/qt2410/lowlevel_init.S
-@@ -0,0 +1,167 @@
-+/*
-+ * Memory Setup stuff - taken from blob memsetup.S
-+ *
-+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
-+ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
-+ *
-+ * Modified for the Samsung SMDK2410 by
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+
-+#include <config.h>
-+#include <version.h>
-+
-+
-+/* some parameters for the board */
-+
-+/*
-+ *
-+ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
-+ *
-+ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
-+ *
-+ */
-+
-+#define BWSCON 0x48000000
-+
-+/* BWSCON */
-+#define DW8 (0x0)
-+#define DW16 (0x1)
-+#define DW32 (0x2)
-+#define WAIT (0x1<<2)
-+#define UBLB (0x1<<3)
-+
-+#define B1_BWSCON (DW32)
-+#define B2_BWSCON (DW16)
-+#define B3_BWSCON (DW16 + WAIT + UBLB)
-+#define B4_BWSCON (DW16)
-+#define B5_BWSCON (DW16)
-+#define B6_BWSCON (DW32)
-+#define B7_BWSCON (DW32)
-+
-+/* BANK0CON */
-+#define B0_Tacs 0x0 /* 0clk */
-+#define B0_Tcos 0x0 /* 0clk */
-+#define B0_Tacc 0x7 /* 14clk */
-+#define B0_Tcoh 0x0 /* 0clk */
-+#define B0_Tah 0x0 /* 0clk */
-+#define B0_Tacp 0x0
-+#define B0_PMC 0x0 /* normal */
-+
-+/* BANK1CON */
-+#define B1_Tacs 0x0 /* 0clk */
-+#define B1_Tcos 0x0 /* 0clk */
-+#define B1_Tacc 0x7 /* 14clk */
-+#define B1_Tcoh 0x0 /* 0clk */
-+#define B1_Tah 0x0 /* 0clk */
-+#define B1_Tacp 0x0
-+#define B1_PMC 0x0
-+
-+#define B2_Tacs 0x0
-+#define B2_Tcos 0x0
-+#define B2_Tacc 0x7
-+#define B2_Tcoh 0x0
-+#define B2_Tah 0x0
-+#define B2_Tacp 0x0
-+#define B2_PMC 0x0
-+
-+#define B3_Tacs 0x0 /* 0clk */
-+#define B3_Tcos 0x3 /* 4clk */
-+#define B3_Tacc 0x7 /* 14clk */
-+#define B3_Tcoh 0x1 /* 1clk */
-+#define B3_Tah 0x0 /* 0clk */
-+#define B3_Tacp 0x3 /* 6clk */
-+#define B3_PMC 0x0 /* normal */
-+
-+#define B4_Tacs 0x0 /* 0clk */
-+#define B4_Tcos 0x0 /* 0clk */
-+#define B4_Tacc 0x7 /* 14clk */
-+#define B4_Tcoh 0x0 /* 0clk */
-+#define B4_Tah 0x0 /* 0clk */
-+#define B4_Tacp 0x0
-+#define B4_PMC 0x0 /* normal */
-+
-+#define B5_Tacs 0x0 /* 0clk */
-+#define B5_Tcos 0x0 /* 0clk */
-+#define B5_Tacc 0x7 /* 14clk */
-+#define B5_Tcoh 0x0 /* 0clk */
-+#define B5_Tah 0x0 /* 0clk */
-+#define B5_Tacp 0x0
-+#define B5_PMC 0x0 /* normal */
-+
-+#define B6_MT 0x3 /* SDRAM */
-+#define B6_Trcd 0x1
-+#define B6_SCAN 0x1 /* 9bit */
-+
-+#define B7_MT 0x3 /* SDRAM */
-+#define B7_Trcd 0x1 /* 3clk */
-+#define B7_SCAN 0x1 /* 9bit */
-+
-+/* REFRESH parameter */
-+#define REFEN 0x1 /* Refresh enable */
-+#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
-+#define Trp 0x0 /* 2clk */
-+#define Trc 0x3 /* 7clk */
-+#define Tchr 0x2 /* 3clk */
-+#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
-+/**************************************/
-+
-+_TEXT_BASE:
-+ .word TEXT_BASE
-+
-+.globl lowlevel_init
-+lowlevel_init:
-+ /* memory control configuration */
-+ /* make r0 relative the current location so that it */
-+ /* reads SMRDATA out of FLASH rather than memory ! */
-+ ldr r0, =SMRDATA
-+ ldr r1, _TEXT_BASE
-+ sub r0, r0, r1
-+ ldr r1, =BWSCON /* Bus Width Status Controller */
-+ add r2, r0, #13*4
-+0:
-+ ldr r3, [r0], #4
-+ str r3, [r1], #4
-+ cmp r2, r0
-+ bne 0b
-+
-+ /* everything is fine now */
-+ mov pc, lr
-+
-+ .ltorg
-+/* the literal pools origin */
-+
-+SMRDATA:
-+ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
-+ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
-+ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
-+ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
-+ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
-+ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
-+ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
-+ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
-+ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
-+ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
-+ .word 0x32
-+ .word 0x30
-+ .word 0x30
-diff --git a/board/qt2410/qt2410.c b/board/qt2410/qt2410.c
-new file mode 100644
-index 0000000..133b748
---- /dev/null
-+++ b/board/qt2410/qt2410.c
-@@ -0,0 +1,130 @@
-+/*
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ *
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+#include <s3c2410.h>
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#define FCLK_SPEED 1
-+
-+#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
-+#define M_MDIV 0xC3
-+#define M_PDIV 0x4
-+#define M_SDIV 0x1
-+#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
-+#if 0
-+#define M_MDIV 0xA1
-+#define M_PDIV 0x3
-+#define M_SDIV 0x1
-+#else
-+#define M_MDIV 0x5c
-+#define M_PDIV 0x4
-+#define M_SDIV 0x0
-+#endif
-+#endif
-+
-+#define USB_CLOCK 1
-+
-+#if USB_CLOCK==0
-+#define U_M_MDIV 0xA1
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x1
-+#elif USB_CLOCK==1
-+#define U_M_MDIV 0x48
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x2
-+#endif
-+
-+static inline void delay (unsigned long loops)
-+{
-+ __asm__ volatile ("1:\n"
-+ "subs %0, %1, #1\n"
-+ "bne 1b":"=r" (loops):"0" (loops));
-+}
-+
-+/*
-+ * Miscellaneous platform dependent initialisations
-+ */
-+
-+int board_init (void)
-+{
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
-+
-+ /* to reduce PLL lock time, adjust the LOCKTIME register */
-+ clk_power->LOCKTIME = 0xFFFFFF;
-+
-+ /* configure MPLL */
-+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (4000);
-+
-+ /* configure UPLL */
-+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (8000);
-+
-+ /* set up the I/O ports */
-+ gpio->GPACON = 0x007FFFFF;
-+ gpio->GPBCON = 0x00044555;
-+ gpio->GPBUP = 0x000007FF;
-+ gpio->GPCCON = 0xAAAAAAAA;
-+ gpio->GPCUP = 0x0000FFFF;
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+ gpio->GPECON = 0xAAAAAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+ gpio->GPFCON = 0x000055AA;
-+ gpio->GPFUP = 0x000000FF;
-+ gpio->GPGCON = 0xFF95FFBA;
-+ //gpio->GPGUP = 0x0000FFFF;
-+ gpio->GPGUP = 0x0000AFEF;
-+ gpio->GPHCON = 0x0028FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+ /* arch number of SMDK2410-Board */
-+ gd->bd->bi_arch_number = MACH_TYPE_QT2410;
-+
-+ /* adress of boot parameters */
-+ gd->bd->bi_boot_params = 0x30000100;
-+
-+ icache_enable();
-+ dcache_enable();
-+
-+ return 0;
-+}
-+
-+int dram_init (void)
-+{
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+ return 0;
-+}
-diff --git a/board/qt2410/u-boot.lds b/board/qt2410/u-boot.lds
-new file mode 100644
-index 0000000..f4fbf96
---- /dev/null
-+++ b/board/qt2410/u-boot.lds
-@@ -0,0 +1,57 @@
-+/*
-+ * (C) Copyright 2002
-+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
-+OUTPUT_ARCH(arm)
-+ENTRY(_start)
-+SECTIONS
-+{
-+ . = 0x00000000;
-+
-+ . = ALIGN(4);
-+ .text :
-+ {
-+ cpu/arm920t/start.o (.text)
-+ *(.text)
-+ }
-+
-+ . = ALIGN(4);
-+ .rodata : { *(.rodata) }
-+
-+ . = ALIGN(4);
-+ .data : { *(.data) }
-+
-+ . = ALIGN(4);
-+ .got : { *(.got) }
-+
-+ . = .;
-+ __u_boot_cmd_start = .;
-+ .u_boot_cmd : { *(.u_boot_cmd) }
-+ __u_boot_cmd_end = .;
-+
-+ . = ALIGN(4);
-+ __bss_start = .;
-+ .bss : { *(.bss) }
-+ _end = .;
-+}
-diff --git a/cpu/arm920t/s3c24x0/Makefile b/cpu/arm920t/s3c24x0/Makefile
-index af9e4ef..10f33f2 100644
---- a/cpu/arm920t/s3c24x0/Makefile
-+++ b/cpu/arm920t/s3c24x0/Makefile
-@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
- LIB = lib$(SOC).a
-
- OBJS = i2c.o interrupts.o serial.o speed.o \
-- usb_ohci.o
-+ usb_ohci.o mmc.o nand_read.o nand.o
-
- all: .depend $(LIB)
-
-diff --git a/cpu/arm920t/s3c24x0/mmc.c b/cpu/arm920t/s3c24x0/mmc.c
-new file mode 100644
-index 0000000..b7057e2
---- /dev/null
-+++ b/cpu/arm920t/s3c24x0/mmc.c
-@@ -0,0 +1,568 @@
-+/*
-+ * u-boot S3C2410 MMC/SD card driver
-+ * (C) Copyright 2006 by Harald Welte <laforge@gnumonks.org>
-+ *
-+ * based on u-boot pxa MMC driver and linux/drivers/mmc/s3c2410mci.c
-+ * (C) 2005-2005 Thomas Kleffel
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <config.h>
-+#include <common.h>
-+#include <mmc.h>
-+#include <asm/errno.h>
-+#include <asm/io.h>
-+#include <s3c2410.h>
-+#include <part.h>
-+
-+#ifdef CONFIG_MMC
-+
-+#define CONFIG_MMC_WIDE
-+
-+//#define MMC_DEBUG
-+
-+#ifdef MMC_DEBUG
-+#ifdef debug
-+#undef debug
-+#endif
-+#define debug printf
-+#endif
-+
-+static S3C2410_SDI *sdi;
-+
-+extern int
-+fat_register_device(block_dev_desc_t *dev_desc, int part_no);
-+
-+static block_dev_desc_t mmc_dev;
-+
-+block_dev_desc_t * mmc_get_dev(int dev)
-+{
-+ return ((block_dev_desc_t *)&mmc_dev);
-+}
-+
-+/*
-+ * FIXME needs to read cid and csd info to determine block size
-+ * and other parameters
-+ */
-+static uchar mmc_buf[MMC_BLOCK_SIZE];
-+static mmc_csd_t mmc_csd;
-+static int mmc_ready = 0;
-+static int wide = 0;
-+
-+
-+#define CMD_F_RESP 0x01
-+#define CMD_F_RESP_LONG 0x02
-+
-+static u_int32_t *
-+/****************************************************/
-+mmc_cmd(ushort cmd, ulong arg, ushort flags)
-+/****************************************************/
-+{
-+ static u_int32_t resp[5];
-+ ulong status;
-+ int i;
-+
-+ u_int32_t ccon, csta;
-+ u_int32_t csta_rdy_bit = S3C2410_SDICMDSTAT_CMDSENT;
-+
-+ memset(resp, 0, sizeof(resp));
-+
-+ debug("mmc_cmd CMD%d arg=0x%08x flags=%x\n", cmd, arg, flags);
-+
-+ sdi->SDICSTA = 0xffffffff;
-+ sdi->SDIDSTA = 0xffffffff;
-+ sdi->SDIFSTA = 0xffffffff;
-+
-+ sdi->SDICARG = arg;
-+
-+ ccon = cmd & S3C2410_SDICMDCON_INDEX;
-+ ccon |= S3C2410_SDICMDCON_SENDERHOST|S3C2410_SDICMDCON_CMDSTART;
-+
-+ if (flags & CMD_F_RESP) {
-+ ccon |= S3C2410_SDICMDCON_WAITRSP;
-+ csta_rdy_bit = S3C2410_SDICMDSTAT_RSPFIN; /* 1 << 9 */
-+ }
-+
-+ if (flags & CMD_F_RESP_LONG)
-+ ccon |= S3C2410_SDICMDCON_LONGRSP;
-+
-+ sdi->SDICCON = ccon;
-+
-+ while (1) {
-+ csta = sdi->SDICSTA;
-+ if (csta & csta_rdy_bit)
-+ break;
-+ if (csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
-+ printf("===============> MMC CMD Timeout\n");
-+ sdi->SDICSTA |= S3C2410_SDICMDSTAT_CMDTIMEOUT;
-+ break;
-+ }
-+ }
-+
-+ debug("final MMC CMD status 0x%x\n", csta);
-+
-+ sdi->SDICSTA |= csta_rdy_bit;
-+
-+ if (flags & CMD_F_RESP) {
-+ resp[0] = sdi->SDIRSP0;
-+ resp[1] = sdi->SDIRSP1;
-+ resp[2] = sdi->SDIRSP2;
-+ resp[3] = sdi->SDIRSP3;
-+ }
-+
-+#if 0
-+ for (i=0; i<4; i ++) {
-+ debug("MMC resp[%d] = 0x%08x\n", i, resp[i]);
-+ }
-+#endif
-+
-+ return resp;
-+}
-+
-+#define FIFO_FILL(host) ((host->SDIFSTA & S3C2410_SDIFSTA_COUNTMASK) >> 2)
-+
-+static int
-+/****************************************************/
-+mmc_block_read(uchar *dst, ulong src, ulong len)
-+/****************************************************/
-+{
-+ u_int32_t dcon, fifo;
-+ u_int32_t *dst_u32 = (u_int32_t *)dst;
-+ u_int32_t *resp;
-+
-+ if (len == 0) {
-+ return 0;
-+ }
-+
-+ debug("mmc_block_rd dst %lx src %lx len %d\n", (ulong)dst, src, len);
-+
-+ /* set block len */
-+ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, len, CMD_F_RESP);
-+ sdi->SDIBSIZE = len;
-+
-+ //sdi->SDIPRE = 0xff;
-+
-+ /* setup data */
-+ dcon = (len >> 9) & S3C2410_SDIDCON_BLKNUM_MASK;
-+ dcon |= S3C2410_SDIDCON_BLOCKMODE;
-+ dcon |= S3C2410_SDIDCON_RXAFTERCMD|S3C2410_SDIDCON_XFER_RXSTART;
-+ if (wide)
-+ dcon |= S3C2410_SDIDCON_WIDEBUS;
-+ sdi->SDIDCON = dcon;
-+
-+ /* send read command */
-+ resp = mmc_cmd(MMC_CMD_READ_BLOCK, src, CMD_F_RESP);
-+
-+ while (len > 0) {
-+ u_int32_t sdidsta = sdi->SDIDSTA;
-+ fifo = FIFO_FILL(sdi);
-+ if (sdidsta & (S3C2410_SDIDSTA_FIFOFAIL|
-+ S3C2410_SDIDSTA_CRCFAIL|
-+ S3C2410_SDIDSTA_RXCRCFAIL|
-+ S3C2410_SDIDSTA_DATATIMEOUT)) {
-+ printf("mmc_block_read: err SDIDSTA=0x%08x\n", sdidsta);
-+ return -EIO;
-+ }
-+
-+ while (fifo--) {
-+ //debug("dst_u32 = 0x%08x\n", dst_u32);
-+ *(dst_u32++) = sdi->SDIDAT;
-+ if (len >= 4)
-+ len -= 4;
-+ else {
-+ len = 0;
-+ break;
-+ }
-+ }
-+ }
-+
-+#if 1
-+ debug("waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
-+ while (!(sdi->SDIDSTA & (1 << 4))) {}
-+ debug("done waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
-+#endif
-+
-+ sdi->SDIDCON = 0;
-+
-+#if 0
-+ if (!(sdi->SDIDSTA & S3C2410_SDIDSTA_XFERFINISH))
-+ printf("mmc_block_read; transfer not finished!\n");
-+#endif
-+
-+ return 0;
-+}
-+
-+static int
-+/****************************************************/
-+mmc_block_write(ulong dst, uchar *src, int len)
-+/****************************************************/
-+{
-+#if 0
-+ uchar *resp;
-+ ushort argh, argl;
-+ ulong status;
-+
-+ if (len == 0) {
-+ return 0;
-+ }
-+
-+ debug("mmc_block_wr dst %lx src %lx len %d\n", dst, (ulong)src, len);
-+
-+ argh = len >> 16;
-+ argl = len & 0xffff;
-+
-+ /* set block len */
-+ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, argh, argl, CMD_F_RESP);
-+
-+ /* send write command */
-+ argh = dst >> 16;
-+ argl = dst & 0xffff;
-+ MMC_STRPCL = MMC_STRPCL_STOP_CLK;
-+ MMC_NOB = 1;
-+ MMC_BLKLEN = len;
-+ resp = mmc_cmd(MMC_CMD_WRITE_BLOCK, dst, CMD_F_RESP,
-+ MMC_CMDAT_R1|MMC_CMDAT_WRITE|MMC_CMDAT_BLOCK|MMC_CMDAT_DATA_EN);
-+
-+ MMC_I_MASK = ~MMC_I_MASK_TXFIFO_WR_REQ;
-+ while (len) {
-+ if (MMC_I_REG & MMC_I_REG_TXFIFO_WR_REQ) {
-+ int i, bytes = min(32,len);
-+
-+ for (i=0; i<bytes; i++) {
-+ MMC_TXFIFO = *src++;
-+ }
-+ if (bytes < 32) {
-+ MMC_PRTBUF = MMC_PRTBUF_BUF_PART_FULL;
-+ }
-+ len -= bytes;
-+ }
-+ status = MMC_STAT;
-+ if (status & MMC_STAT_ERRORS) {
-+ printf("MMC_STAT error %lx\n", status);
-+ return -1;
-+ }
-+ }
-+ MMC_I_MASK = ~MMC_I_MASK_DATA_TRAN_DONE;
-+ while (!(MMC_I_REG & MMC_I_REG_DATA_TRAN_DONE));
-+ MMC_I_MASK = ~MMC_I_MASK_PRG_DONE;
-+ while (!(MMC_I_REG & MMC_I_REG_PRG_DONE));
-+ status = MMC_STAT;
-+ if (status & MMC_STAT_ERRORS) {
-+ printf("MMC_STAT error %lx\n", status);
-+ return -1;
-+ }
-+#endif
-+ return 0;
-+}
-+
-+
-+int
-+/****************************************************/
-+mmc_read(ulong src, uchar *dst, int size)
-+/****************************************************/
-+{
-+ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
-+ ulong mmc_block_size, mmc_block_address;
-+
-+ if (size == 0) {
-+ return 0;
-+ }
-+
-+ if (!mmc_ready) {
-+ printf("Please initialize the MMC first\n");
-+ return -1;
-+ }
-+
-+ mmc_block_size = MMC_BLOCK_SIZE;
-+ mmc_block_address = ~(mmc_block_size - 1);
-+
-+ src -= CFG_MMC_BASE;
-+ end = src + size;
-+ part_start = ~mmc_block_address & src;
-+ part_end = ~mmc_block_address & end;
-+ aligned_start = mmc_block_address & src;
-+ aligned_end = mmc_block_address & end;
-+
-+ /* all block aligned accesses */
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_start) {
-+ part_len = mmc_block_size - part_start;
-+ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(dst, mmc_buf+part_start, part_len);
-+ dst += part_len;
-+ src += part_len;
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ for (; src < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
-+ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read((uchar *)(dst), src, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_end && src < end) {
-+ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(dst, mmc_buf, part_end);
-+ }
-+ return 0;
-+}
-+
-+int
-+/****************************************************/
-+mmc_write(uchar *src, ulong dst, int size)
-+/****************************************************/
-+{
-+ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
-+ ulong mmc_block_size, mmc_block_address;
-+
-+ if (size == 0) {
-+ return 0;
-+ }
-+
-+ if (!mmc_ready) {
-+ printf("Please initialize the MMC first\n");
-+ return -1;
-+ }
-+
-+ mmc_block_size = MMC_BLOCK_SIZE;
-+ mmc_block_address = ~(mmc_block_size - 1);
-+
-+ dst -= CFG_MMC_BASE;
-+ end = dst + size;
-+ part_start = ~mmc_block_address & dst;
-+ part_end = ~mmc_block_address & end;
-+ aligned_start = mmc_block_address & dst;
-+ aligned_end = mmc_block_address & end;
-+
-+ /* all block aligned accesses */
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_start) {
-+ part_len = mmc_block_size - part_start;
-+ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ (ulong)src, dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(mmc_buf+part_start, src, part_len);
-+ if ((mmc_block_write(aligned_start, mmc_buf, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ dst += part_len;
-+ src += part_len;
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ for (; dst < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
-+ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_write(dst, (uchar *)src, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_end && dst < end) {
-+ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(mmc_buf, src, part_end);
-+ if ((mmc_block_write(aligned_end, mmc_buf, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ return 0;
-+}
-+
-+ulong
-+/****************************************************/
-+mmc_bread(int dev_num, ulong blknr, ulong blkcnt, ulong *dst)
-+/****************************************************/
-+{
-+ int mmc_block_size = MMC_BLOCK_SIZE;
-+ ulong src = blknr * mmc_block_size + CFG_MMC_BASE;
-+
-+ mmc_read(src, (uchar *)dst, blkcnt*mmc_block_size);
-+ return blkcnt;
-+}
-+
-+static u_int16_t rca = MMC_DEFAULT_RCA;
-+
-+static u_int32_t mmc_size(const struct mmc_csd *csd)
-+{
-+ u_int32_t block_len, mult, blocknr;
-+
-+ block_len = csd->read_bl_len << 12;
-+ mult = csd->c_size_mult1 << 8;
-+ blocknr = (csd->c_size+1) * mult;
-+
-+ return blocknr * block_len;
-+}
-+
-+int
-+/****************************************************/
-+mmc_init(int verbose)
-+/****************************************************/
-+{
-+ int retries, rc = -ENODEV;
-+ int is_sd = 0;
-+ u_int32_t *resp;
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+
-+ sdi = S3C2410_GetBase_SDI();
-+
-+ debug("mmc_init(PCLK=%u)\n", get_PCLK());
-+
-+ clk_power->CLKCON |= (1 << 9);
-+
-+ /* S3C2410 has some bug that prevents reliable operation at higher speed */
-+ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
-+ sdi->SDIPRE = 0x02; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
-+ sdi->SDIBSIZE = 512;
-+ sdi->SDIDTIMER = 0xffff;
-+ sdi->SDIIMSK = 0x0;
-+ sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2440_SDICON_MMCCLOCK;
-+ udelay(125000); /* FIXME: 74 SDCLK cycles */
-+
-+ mmc_csd.c_size = 0;
-+
-+ /* reset */
-+ retries = 10;
-+ resp = mmc_cmd(MMC_CMD_RESET, 0, 0);
-+
-+ printf("trying to detect SD Card...\n");
-+ while (retries--) {
-+ int i;
-+ udelay(100000);
-+ resp = mmc_cmd(55, 0x00000000, CMD_F_RESP);
-+ resp = mmc_cmd(41, 0x00300000, CMD_F_RESP);
-+
-+ if (resp[0] & (1 << 31)) {
-+ is_sd = 1;
-+ break;
-+ }
-+ }
-+
-+ if (retries == 0 && !is_sd) {
-+ retries = 10;
-+ printf("failed to detect SD Card, trying MMC\n");
-+ resp = mmc_cmd(MMC_CMD_SEND_OP_COND, 0x00ffc000, CMD_F_RESP);
-+ while (retries-- && resp && !(resp[4] & 0x80)) {
-+ debug("resp %x %x\n", resp[0], resp[1]);
-+ udelay(50);
-+ resp = mmc_cmd(1, 0x00ffff00, CMD_F_RESP);
-+ }
-+ }
-+
-+ /* try to get card id */
-+ resp = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, CMD_F_RESP|CMD_F_RESP_LONG);
-+ if (resp) {
-+ /* TODO configure mmc driver depending on card attributes */
-+ mmc_cid_t *cid = (mmc_cid_t *)resp;
-+ if (verbose) {
-+ printf("MMC found. Card desciption is:\n");
-+ printf("Manufacturer ID = %02x%02x%02x\n",
-+ cid->id[0], cid->id[1], cid->id[2]);
-+ printf("HW/FW Revision = %x %x\n",cid->hwrev, cid->fwrev);
-+ cid->hwrev = cid->fwrev = 0; /* null terminate string */
-+ printf("Product Name = %s\n",cid->name);
-+ printf("Serial Number = %02x%02x%02x\n",
-+ cid->sn[0], cid->sn[1], cid->sn[2]);
-+ printf("Month = %d\n",cid->month);
-+ printf("Year = %d\n",1997 + cid->year);
-+ }
-+ /* fill in device description */
-+ mmc_dev.if_type = IF_TYPE_MMC;
-+ mmc_dev.part_type = PART_TYPE_DOS;
-+ mmc_dev.dev = 0;
-+ mmc_dev.lun = 0;
-+ mmc_dev.type = 0;
-+ /* FIXME fill in the correct size (is set to 32MByte) */
-+ mmc_dev.blksz = 512;
-+ mmc_dev.lba = 0x10000;
-+ sprintf(mmc_dev.vendor,"Man %02x%02x%02x Snr %02x%02x%02x",
-+ cid->id[0], cid->id[1], cid->id[2],
-+ cid->sn[0], cid->sn[1], cid->sn[2]);
-+ sprintf(mmc_dev.product,"%s",cid->name);
-+ sprintf(mmc_dev.revision,"%x %x",cid->hwrev, cid->fwrev);
-+ mmc_dev.removable = 0;
-+ mmc_dev.block_read = mmc_bread;
-+
-+ /* MMC exists, get CSD too */
-+ resp = mmc_cmd(MMC_CMD_SET_RCA, MMC_DEFAULT_RCA, CMD_F_RESP);
-+ if (is_sd)
-+ rca = resp[0] >> 16;
-+
-+ resp = mmc_cmd(MMC_CMD_SEND_CSD, rca<<16, CMD_F_RESP|CMD_F_RESP_LONG);
-+ if (resp) {
-+ mmc_csd_t *csd = (mmc_csd_t *)resp;
-+ memcpy(&mmc_csd, csd, sizeof(csd));
-+ rc = 0;
-+ mmc_ready = 1;
-+ /* FIXME add verbose printout for csd */
-+ printf("READ_BL_LEN=%u, C_SIZE_MULT=%u, C_SIZE=%u\n",
-+ csd->read_bl_len, csd->c_size_mult1, csd->c_size);
-+ printf("size = %u\n", mmc_size(csd));
-+ }
-+ }
-+
-+ resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca<<16, CMD_F_RESP);
-+
-+#ifdef CONFIG_MMC_WIDE
-+ if (is_sd) {
-+ resp = mmc_cmd(55, rca<<16, CMD_F_RESP);
-+ resp = mmc_cmd(6, 0x02, CMD_F_RESP);
-+ wide = 1;
-+ }
-+#endif
-+
-+ fat_register_device(&mmc_dev,1); /* partitions start counting with 1 */
-+
-+ return rc;
-+}
-+
-+int
-+mmc_ident(block_dev_desc_t *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+mmc2info(ulong addr)
-+{
-+ /* FIXME hard codes to 32 MB device */
-+ if (addr >= CFG_MMC_BASE && addr < CFG_MMC_BASE + 0x02000000) {
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+#endif /* CONFIG_MMC */
-diff --git a/cpu/arm920t/s3c24x0/nand.c b/cpu/arm920t/s3c24x0/nand.c
-new file mode 100644
-index 0000000..f720229
---- /dev/null
-+++ b/cpu/arm920t/s3c24x0/nand.c
-@@ -0,0 +1,212 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+#if 0
-+#define DEBUGN printf
-+#else
-+#define DEBUGN(x, args ...) {}
-+#endif
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_NAND)
-+#if !defined(CFG_NAND_LEGACY)
-+
-+#include <nand.h>
-+#include <s3c2410.h>
-+
-+#define __REGb(x) (*(volatile unsigned char *)(x))
-+#define __REGi(x) (*(volatile unsigned int *)(x))
-+
-+#define NF_BASE 0x4e000000
-+#define NFCONF __REGi(NF_BASE + 0x0)
-+#define NFCMD __REGb(NF_BASE + 0x4)
-+#define NFADDR __REGb(NF_BASE + 0x8)
-+#define NFDATA __REGb(NF_BASE + 0xc)
-+#define NFSTAT __REGb(NF_BASE + 0x10)
-+
-+#define S3C2410_NFCONF_EN (1<<15)
-+#define S3C2410_NFCONF_512BYTE (1<<14)
-+#define S3C2410_NFCONF_4STEP (1<<13)
-+#define S3C2410_NFCONF_INITECC (1<<12)
-+#define S3C2410_NFCONF_nFCE (1<<11)
-+#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
-+#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
-+#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
-+
-+static u16 s3c2410_read_word(struct mtd_info *mtd)
-+{
-+ unsigned char byte = 0;
-+
-+ printf("s3c2410_read_word: WARNING, this function is not implemented yet\n");
-+ return byte;
-+}
-+
-+static void s3c2410_write_word(struct mtd_info *mtd, u16 word)
-+{
-+ printf("s3c2410_write_word: WARNING, this function is not implemented yet\n");
-+}
-+
-+static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
-+{
-+ struct nand_chip *chip = mtd->priv;
-+
-+ DEBUGN("hwcontrol(): 0x%02x: ", cmd);
-+
-+ switch (cmd) {
-+ case NAND_CTL_SETNCE:
-+ NFCONF &= ~S3C2410_NFCONF_nFCE;
-+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
-+ break;
-+ case NAND_CTL_CLRNCE:
-+ NFCONF |= S3C2410_NFCONF_nFCE;
-+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
-+ break;
-+ case NAND_CTL_SETALE:
-+ chip->IO_ADDR_W = NF_BASE + 0x8;
-+ DEBUGN("SETALE\n");
-+ break;
-+ case NAND_CTL_SETCLE:
-+ chip->IO_ADDR_W = NF_BASE + 0x4;
-+ DEBUGN("SETCLE\n");
-+ break;
-+ default:
-+ chip->IO_ADDR_W = NF_BASE + 0xc;
-+ break;
-+ }
-+ return;
-+}
-+
-+static int s3c2410_dev_ready(struct mtd_info *mtd)
-+{
-+ DEBUGN("dev_ready\n");
-+ return (NFSTAT & 0x01);
-+}
-+
-+static void s3c2410_cmdfunc(struct mtd_info *mtd, unsigned cmd,
-+ int column, int page_addr)
-+{
-+ DEBUGN("cmdfunc(): 0x%02x, col=%d, page=%d\n", cmd, column, page_addr);
-+
-+ switch (cmd) {
-+ case NAND_CMD_READ0:
-+ case NAND_CMD_READ1:
-+ case NAND_CMD_READOOB:
-+ NFCMD = cmd;
-+ NFADDR = column & 0xff;
-+ NFADDR = page_addr & 0xff;
-+ NFADDR = (page_addr >> 8) & 0xff;
-+ NFADDR = (page_addr >> 16) & 0xff;
-+ break;
-+ case NAND_CMD_READID:
-+ NFCMD = cmd;
-+ NFADDR = 0;
-+ break;
-+ case NAND_CMD_PAGEPROG:
-+ NFCMD = cmd;
-+ printf("PAGEPROG not implemented\n");
-+ break;
-+ case NAND_CMD_ERASE1:
-+ NFCMD = cmd;
-+ NFADDR = page_addr & 0xff;
-+ NFADDR = (page_addr >> 8) & 0xff;
-+ NFADDR = (page_addr >> 16) & 0xff;
-+ break;
-+ case NAND_CMD_ERASE2:
-+ NFCMD = cmd;
-+ break;
-+ case NAND_CMD_SEQIN:
-+ printf("SEQIN not implemented\n");
-+ break;
-+ case NAND_CMD_STATUS:
-+ NFCMD = cmd;
-+ break;
-+ case NAND_CMD_RESET:
-+ NFCMD = cmd;
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ while (!s3c2410_dev_ready(mtd));
-+}
-+
-+void board_nand_init(struct nand_chip *nand)
-+{
-+ u_int32_t cfg;
-+ u_int8_t tacls, twrph0, twrph1;
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+
-+ DEBUGN("board_nand_init()\n");
-+
-+ clk_power->CLKCON |= (1 << 4);
-+
-+ /* initialize hardware */
-+ twrph0 = 3; twrph1 = 0; tacls = 0;
-+
-+ /* default timings: maximum */
-+ //twrph0 = 8; twrph1 = 8; tacls = 8;
-+
-+ cfg = S3C2410_NFCONF_EN;
-+ cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
-+ cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
-+ cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
-+
-+ //NFCONF = cfg;
-+ NFCONF = 0xf842;
-+
-+ /* initialize nand_chip data structure */
-+ nand->IO_ADDR_R = nand->IO_ADDR_W = 0x4e00000c;
-+
-+ /* read_buf and write_buf are default */
-+ /* read_byte and write_byte are default */
-+
-+ /* need to override word read/write since default routines try 16bit wide
-+ * register access of an (in our case) 8bit register */
-+ nand->read_word = s3c2410_read_word;
-+ nand->write_word = s3c2410_write_word;
-+
-+ /* hwcontrol always must be implemented */
-+ nand->hwcontrol = s3c2410_hwcontrol;
-+
-+ nand->dev_ready = s3c2410_dev_ready;
-+
-+ nand->eccmode = NAND_ECC_SOFT;
-+ nand->options = 0;
-+ //nand->waitfunc = dfc_wait;
-+
-+ //nand->cmdfunc = s3c2410_cmdfunc;
-+ //nand->autooob = &delta_oob;
-+ //nand->badblock_pattern = &delta_bbt_descr;
-+
-+#if 0
-+ /* reset */
-+ nand->hwcontrol(NULL, NAND_CTL_SETNCE);
-+ nand->cmdfunc(NULL, NAND_CMD_RESET, -1, -1);
-+ while (nand->dev_ready(NULL) == 0) {}
-+ nand->hwcontrol(NULL, NAND_CTL_CLRNCE);
-+#endif
-+
-+ DEBUGN("end of nand_init\n");
-+}
-+
-+#else
-+ #error "U-Boot legacy NAND support not available for S3C2410"
-+#endif
-+#endif
-diff --git a/cpu/arm920t/s3c24x0/nand_read.c b/cpu/arm920t/s3c24x0/nand_read.c
-new file mode 100644
-index 0000000..9d97932
---- /dev/null
-+++ b/cpu/arm920t/s3c24x0/nand_read.c
-@@ -0,0 +1,75 @@
-+/*
-+ * nand_read.c: Simple NAND read functions for booting from NAND
-+ *
-+ * Taken from GPLv2 licensed vivi bootloader,
-+ * Copyright (C) 2002 MIZI Research, Inc.
-+ *
-+ * Author: Hwang, Chideok <hwang@mizi.com>
-+ * Date : $Date: 2004/02/04 10:37:37 $
-+ *
-+ * u-boot integration (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ */
-+
-+#include <common.h>
-+
-+#ifdef CONFIG_S3C2410_NAND_BOOT
-+
-+#define __REGb(x) (*(volatile unsigned char *)(x))
-+#define __REGi(x) (*(volatile unsigned int *)(x))
-+#define NF_BASE 0x4e000000
-+#define NFCONF __REGi(NF_BASE + 0x0)
-+#define NFCMD __REGb(NF_BASE + 0x4)
-+#define NFADDR __REGb(NF_BASE + 0x8)
-+#define NFDATA __REGb(NF_BASE + 0xc)
-+#define NFSTAT __REGb(NF_BASE + 0x10)
-+
-+#define BUSY 1
-+inline void wait_idle(void) {
-+ int i;
-+
-+ while(!(NFSTAT & BUSY))
-+ for(i=0; i<10; i++);
-+}
-+
-+#define NAND_SECTOR_SIZE 512
-+#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
-+
-+/* low level nand read function */
-+int
-+nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
-+{
-+ int i, j;
-+
-+ if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
-+ return -1; /* invalid alignment */
-+ }
-+
-+ /* chip Enable */
-+ NFCONF &= ~0x800;
-+ for(i=0; i<10; i++);
-+
-+ for(i=start_addr; i < (start_addr + size);) {
-+ /* READ0 */
-+ NFCMD = 0;
-+
-+ /* Write Address */
-+ NFADDR = i & 0xff;
-+ NFADDR = (i >> 9) & 0xff;
-+ NFADDR = (i >> 17) & 0xff;
-+ NFADDR = (i >> 25) & 0xff;
-+
-+ wait_idle();
-+
-+ for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
-+ *buf = (NFDATA & 0xff);
-+ buf++;
-+ }
-+ }
-+
-+ /* chip Disable */
-+ NFCONF |= 0x800; /* chip disable */
-+
-+ return 0;
-+}
-+
-+#endif /* CONFIG_S3C2410_NAND_BOOT */
-diff --git a/cpu/arm920t/start.S b/cpu/arm920t/start.S
-index 346f0d0..232e2c2 100644
---- a/cpu/arm920t/start.S
-+++ b/cpu/arm920t/start.S
-@@ -5,6 +5,10 @@
- * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
- * Copyright (c) 2002 Gary Jennejohn <gj@denx.de>
- *
-+ * S3C2410 NAND portions
-+ * Copyright (c) 2001 MIZI Research, Inc.
-+ * Copyright (c) 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
-@@ -27,6 +31,7 @@
-
- #include <config.h>
- #include <version.h>
-+#include <s3c2410.h>
-
-
- /*
-@@ -161,6 +166,7 @@ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
- #endif
-
- #ifndef CONFIG_SKIP_RELOCATE_UBOOT
-+#ifndef CONFIG_S3C2410_NAND_BOOT
- relocate: /* relocate U-Boot to RAM */
- adr r0, _start /* r0 <- current position of code */
- ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
-@@ -177,6 +183,93 @@ copy_loop:
- stmia r1!, {r3-r10} /* copy to target address [r1] */
- cmp r0, r2 /* until source end addreee [r2] */
- ble copy_loop
-+#else /* NAND_BOOT */
-+relocate:
-+copy_myself:
-+ /* mov r10, lr */
-+
-+ @ reset NAND
-+ mov r1, #S3C2410_NAND_BASE
-+ ldr r2, =0xf842 @ initial value enable tacls=3,rph0=6,rph1=0
-+ str r2, [r1, #oNFCONF]
-+ ldr r2, [r1, #oNFCONF]
-+ bic r2, r2, #0x800 @ enable chip
-+ str r2, [r1, #oNFCONF]
-+ mov r2, #0xff @ RESET command
-+ strb r2, [r1, #oNFCMD]
-+ mov r3, #0 @ wait
-+1: add r3, r3, #0x1
-+ cmp r3, #0xa
-+ blt 1b
-+2: ldr r2, [r1, #oNFSTAT] @ wait ready
-+ tst r2, #0x1
-+ beq 2b
-+ ldr r2, [r1, #oNFCONF]
-+ orr r2, r2, #0x800 @ disable chip
-+ str r2, [r1, #oNFCONF]
-+
-+#if 0
-+ @ get ready to call C functions (for nand_read())
-+ ldr sp, DW_STACK_START @ setup stack pointer
-+ mov fp, #0 @ no previous frame, so fp=0
-+#else
-+ ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
-+ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
-+ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */
-+#ifdef CONFIG_USE_IRQ
-+ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
-+#endif
-+ sub sp, r0, #12 /* leave 3 words for abort-stack */
-+#endif
-+
-+ @ copy u-boot to RAM
-+ ldr r0, _TEXT_BASE
-+ mov r1, #0x0
-+ mov r2, #0x30000
-+ bl nand_read_ll
-+
-+ tst r0, #0x0
-+ beq ok_nand_read
-+#ifdef CONFIG_DEBUG_LL
-+bad_nand_read:
-+ ldr r0, STR_FAIL
-+ ldr r1, SerBase
-+ bl PrintWord
-+1: b 1b @ infinite loop
-+#endif
-+
-+ok_nand_read:
-+#ifdef CONFIG_DEBUG_LL
-+ ldr r0, STR_OK
-+ ldr r1, SerBase
-+ bl PrintWord
-+#endif
-+
-+ @ verify
-+ mov r0, #0
-+ @ldr r1, =0x33f00000
-+ ldr r1, _TEXT_BASE
-+ mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
-+go_next:
-+ ldr r3, [r0], #4
-+ ldr r4, [r1], #4
-+ teq r3, r4
-+ bne notmatch
-+ subs r2, r2, #4
-+ beq done_nand_read
-+ bne go_next
-+notmatch:
-+#ifdef CONFIG_DEBUG_LL
-+ sub r0, r0, #4
-+ ldr r1, SerBase
-+ bl PrintHexWord
-+ ldr r0, STR_FAIL
-+ ldr r1, SerBase
-+ bl PrintWord
-+#endif
-+1: b 1b
-+done_nand_read:
-+#endif /* NAND_BOOT */
- #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
-
- /* Set up the stack */
-diff --git a/drivers/Makefile b/drivers/Makefile
-index 9be95c7..eef266a 100644
---- a/drivers/Makefile
-+++ b/drivers/Makefile
-@@ -50,7 +50,7 @@ OBJS = 3c589.o 5701rls.o ali512x.o \
- videomodes.o w83c553f.o \
- ks8695eth.o \
- pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
-- rpx_pcmcia.o
-+ rpx_pcmcia.o s3c2410_fb.o
-
- all: $(LIB)
-
-diff --git a/drivers/cs8900.c b/drivers/cs8900.c
-index 082434c..1cce622 100644
---- a/drivers/cs8900.c
-+++ b/drivers/cs8900.c
-@@ -120,6 +120,7 @@ void cs8900_get_enetaddr (uchar * addr)
- unsigned char env_enetaddr[6];
- char *tmp = getenv ("ethaddr");
- char *end;
-+ unsigned short chip_id;
-
- for (i=0; i<6; i++) {
- env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;
-@@ -128,7 +129,9 @@ void cs8900_get_enetaddr (uchar * addr)
- }
-
- /* verify chip id */
-- if (get_reg_init_bus (PP_ChipID) != 0x630e)
-+ chip_id = get_reg_init_bus (PP_ChipID);
-+ printf("\ncs8900a chipid 0x%04x\n", chip_id);
-+ if (chip_id != 0x630e)
- return;
- eth_reset ();
- if ((get_reg (PP_SelfST) & (PP_SelfSTAT_EEPROM | PP_SelfSTAT_EEPROM_OK)) ==
-diff --git a/drivers/s3c2410_fb.c b/drivers/s3c2410_fb.c
-new file mode 100644
-index 0000000..fc389a9
---- /dev/null
-+++ b/drivers/s3c2410_fb.c
-@@ -0,0 +1,182 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+#if defined(CONFIG_VIDEO_S3C2410)
-+
-+#include <video_fb.h>
-+#include "videomodes.h"
-+#include <s3c2410.h>
-+/*
-+ * Export Graphic Device
-+ */
-+GraphicDevice smi;
-+
-+#define VIDEO_MEM_SIZE 0x200000
-+
-+/*******************************************************************************
-+ *
-+ * Init video chip with common Linux graphic modes (lilo)
-+ */
-+void *video_hw_init (void)
-+{
-+ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
-+ GraphicDevice *pGD = (GraphicDevice *)&smi;
-+ int videomode;
-+ unsigned long t1, hsynch, vsynch;
-+ char *penv;
-+ int tmp, i, bits_per_pixel;
-+ struct ctfb_res_modes *res_mode;
-+ struct ctfb_res_modes var_mode;
-+ unsigned char videoout;
-+ unsigned int *vm;
-+
-+ /* Search for video chip */
-+ printf("Video: ");
-+
-+ tmp = 0;
-+
-+ videomode = CFG_DEFAULT_VIDEO_MODE;
-+ /* get video mode via environment */
-+ if ((penv = getenv ("videomode")) != NULL) {
-+ /* deceide if it is a string */
-+ if (penv[0] <= '9') {
-+ videomode = (int) simple_strtoul (penv, NULL, 16);
-+ tmp = 1;
-+ }
-+ } else {
-+ tmp = 1;
-+ }
-+ if (tmp) {
-+ /* parameter are vesa modes */
-+ /* search params */
-+ for (i = 0; i < VESA_MODES_COUNT; i++) {
-+ if (vesa_modes[i].vesanr == videomode)
-+ break;
-+ }
-+ if (i == VESA_MODES_COUNT) {
-+ printf ("no VESA Mode found, switching to mode 0x%x ", CFG_DEFAULT_VIDEO_MODE);
-+ i = 0;
-+ }
-+ res_mode =
-+ (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].
-+ resindex];
-+ bits_per_pixel = vesa_modes[i].bits_per_pixel;
-+ } else {
-+
-+ res_mode = (struct ctfb_res_modes *) &var_mode;
-+ bits_per_pixel = video_get_params (res_mode, penv);
-+ }
-+
-+ /* calculate hsynch and vsynch freq (info only) */
-+ t1 = (res_mode->left_margin + res_mode->xres +
-+ res_mode->right_margin + res_mode->hsync_len) / 8;
-+ t1 *= 8;
-+ t1 *= res_mode->pixclock;
-+ t1 /= 1000;
-+ hsynch = 1000000000L / t1;
-+ t1 *=
-+ (res_mode->upper_margin + res_mode->yres +
-+ res_mode->lower_margin + res_mode->vsync_len);
-+ t1 /= 1000;
-+ vsynch = 1000000000L / t1;
-+
-+ /* fill in Graphic device struct */
-+ sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres,
-+ res_mode->yres, bits_per_pixel, (hsynch / 1000),
-+ (vsynch / 1000));
-+ printf ("%s\n", pGD->modeIdent);
-+ pGD->winSizeX = res_mode->xres;
-+ pGD->winSizeY = res_mode->yres;
-+ pGD->plnSizeX = res_mode->xres;
-+ pGD->plnSizeY = res_mode->yres;
-+ switch (bits_per_pixel) {
-+ case 8:
-+ pGD->gdfBytesPP = 1;
-+ pGD->gdfIndex = GDF__8BIT_INDEX;
-+ break;
-+ case 15:
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_15BIT_555RGB;
-+ break;
-+ case 16:
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_16BIT_565RGB;
-+ break;
-+ case 24:
-+ pGD->gdfBytesPP = 3;
-+ pGD->gdfIndex = GDF_24BIT_888RGB;
-+ break;
-+ }
-+
-+#if 0
-+ pGD->isaBase = CFG_ISA_IO;
-+ pGD->pciBase = pci_mem_base;
-+ pGD->dprBase = (pci_mem_base + 0x400000 + 0x8000);
-+ pGD->vprBase = (pci_mem_base + 0x400000 + 0xc000);
-+ pGD->cprBase = (pci_mem_base + 0x400000 + 0xe000);
-+#endif
-+ pGD->frameAdrs = LCD_VIDEO_ADDR;
-+ pGD->memSize = VIDEO_MEM_SIZE;
-+
-+ lcd->LCDSADDR1 = LCD_VIDEO_ADDR >> 1;
-+ lcd->LCDSADDR2 = (LCD_VIDEO_ADDR + 0x4b000) >> 1;
-+ lcd->LCDSADDR3 = 0x000000f0;
-+
-+ lcd->LCDCON1 = 0x00000479;
-+ lcd->LCDCON2 = 0x014fc183;
-+ lcd->LCDCON3 = 0x0060ef07;
-+ lcd->LCDCON4 = 0x00000003;
-+ lcd->LCDCON5 = 0x00000b09;
-+ lcd->LPCSEL = 0x00000cf0;
-+
-+ pGD->winSizeX = pGD->plnSizeX = 240;
-+ pGD->winSizeY = pGD->plnSizeY = 320;
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_16BIT_565RGB;
-+
-+ /* Enable Display */
-+ videoout = 2; /* Default output is CRT */
-+ if ((penv = getenv ("videoout")) != NULL) {
-+ /* deceide if it is a string */
-+ videoout = (int) simple_strtoul (penv, NULL, 16);
-+ }
-+
-+ printf("clearing video memory\n");
-+ /* Clear video memory */
-+ i = pGD->memSize/4;
-+ vm = (unsigned int *)pGD->frameAdrs;
-+ while(i--)
-+ *vm++ = 0;
-+
-+ printf("returning from video_hw_init\n");
-+ return ((void*)&smi);
-+}
-+
-+void
-+video_set_lut (unsigned int index, /* color number */
-+ unsigned char r, /* red */
-+ unsigned char g, /* green */
-+ unsigned char b /* blue */
-+ )
-+{
-+}
-+
-+#endif /* CONFIG_VIDEO_S3C2410 */
-diff --git a/drivers/usbdcore_s3c2410.c b/drivers/usbdcore_s3c2410.c
-new file mode 100644
-index 0000000..143fdf2
---- /dev/null
-+++ b/drivers/usbdcore_s3c2410.c
-@@ -0,0 +1,1609 @@
-+/*
-+ * (C) Copyright 2003
-+ * Gerry Hamel, geh@ti.com, Texas Instruments
-+ *
-+ * Based on
-+ * linux/drivers/usb/device/bi/omap.c
-+ * TI OMAP1510 USB bus interface driver
-+ *
-+ * Author: MontaVista Software, Inc.
-+ * source@mvista.com
-+ * (C) Copyright 2002
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <common.h>
-+
-+#if defined(CONFIG_S3C2410) && defined(CONFIG_USB_DEVICE)
-+
-+#include <asm/io.h>
-+
-+#include "usbdcore.h"
-+#include "usbdcore_s3c2410.h"
-+#include "usbdcore_ep0.h"
-+
-+
-+#define UDC_INIT_MDELAY 80 /* Device settle delay */
-+#define UDC_MAX_ENDPOINTS 31 /* Number of endpoints on this UDC */
-+
-+/* Some kind of debugging output... */
-+#if 1
-+#define UDCDBG(str)
-+#define UDCDBGA(fmt,args...)
-+#else /* The bugs still exists... */
-+#define UDCDBG(str) serial_printf("[%s] %s:%d: " str "\n", __FILE__,__FUNCTION__,__LINE__)
-+#define UDCDBGA(fmt,args...) serial_printf("[%s] %s:%d: " fmt "\n", __FILE__,__FUNCTION__,__LINE__, ##args)
-+#endif
-+
-+#if 1
-+#define UDCREG(name)
-+#define UDCREGL(name)
-+#else /* The bugs still exists... */
-+#define UDCREG(name) serial_printf("%s():%d: %s[%08x]=%.4x\n",__FUNCTION__,__LINE__, (#name), name, inw(name)) /* For 16-bit regs */
-+#define UDCREGL(name) serial_printf("%s():%d: %s[%08x]=%.8x\n",__FUNCTION__,__LINE__, (#name), name, inl(name)) /* For 32-bit regs */
-+#endif
-+
-+
-+static struct urb *ep0_urb = NULL;
-+
-+static struct usb_device_instance *udc_device; /* Used in interrupt handler */
-+static u16 udc_devstat = 0; /* UDC status (DEVSTAT) */
-+static u32 udc_interrupts = 0;
-+
-+static void udc_stall_ep (unsigned int ep_addr);
-+
-+
-+static struct usb_endpoint_instance *s3c2410_find_ep (int ep)
-+{
-+ int i;
-+
-+ for (i = 0; i < udc_device->bus->max_endpoints; i++) {
-+ if (udc_device->bus->endpoint_array[i].endpoint_address == ep)
-+ return &udc_device->bus->endpoint_array[i];
-+ }
-+ return NULL;
-+}
-+
-+/* ************************************************************************** */
-+/* IO
-+ */
-+
-+/*
-+ * omap1510_prepare_endpoint_for_rx
-+ *
-+ * This function implements TRM Figure 14-11.
-+ *
-+ * The endpoint to prepare for transfer is specified as a physical endpoint
-+ * number. For OUT (rx) endpoints 1 through 15, the corresponding endpoint
-+ * configuration register is checked to see if the endpoint is ISO or not.
-+ * If the OUT endpoint is valid and is non-ISO then its FIFO is enabled.
-+ * No action is taken for endpoint 0 or for IN (tx) endpoints 16 through 30.
-+ */
-+static void omap1510_prepare_endpoint_for_rx (int ep_addr)
-+{
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("omap1510_prepare_endpoint %x", ep_addr);
-+ if (((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) {
-+ if ((inw (UDC_EP_RX (ep_num)) &
-+ (UDC_EPn_RX_Valid | UDC_EPn_RX_Iso)) ==
-+ UDC_EPn_RX_Valid) {
-+ /* rx endpoint is valid, non-ISO, so enable its FIFO */
-+ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ outw (0, UDC_EP_NUM);
-+ }
-+ }
-+}
-+
-+/* omap1510_configure_endpoints
-+ *
-+ * This function implements TRM Figure 14-10.
-+ */
-+static void omap1510_configure_endpoints (struct usb_device_instance *device)
-+{
-+ int ep;
-+ struct usb_bus_instance *bus;
-+ struct usb_endpoint_instance *endpoint;
-+ unsigned short ep_ptr;
-+ unsigned short ep_size;
-+ unsigned short ep_isoc;
-+ unsigned short ep_doublebuffer;
-+ int ep_addr;
-+ int packet_size;
-+ int buffer_size;
-+ int attributes;
-+
-+ bus = device->bus;
-+
-+ /* There is a dedicated 2048 byte buffer for USB packets that may be
-+ * arbitrarily partitioned among the endpoints on 8-byte boundaries.
-+ * The first 8 bytes are reserved for receiving setup packets on
-+ * endpoint 0.
-+ */
-+ ep_ptr = 8; /* reserve the first 8 bytes for the setup fifo */
-+
-+ for (ep = 0; ep < bus->max_endpoints; ep++) {
-+ endpoint = bus->endpoint_array + ep;
-+ ep_addr = endpoint->endpoint_address;
-+ if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* IN endpoint */
-+ packet_size = endpoint->tx_packetSize;
-+ attributes = endpoint->tx_attributes;
-+ } else {
-+ /* OUT endpoint */
-+ packet_size = endpoint->rcv_packetSize;
-+ attributes = endpoint->rcv_attributes;
-+ }
-+
-+ switch (packet_size) {
-+ case 0:
-+ ep_size = 0;
-+ break;
-+ case 8:
-+ ep_size = 0;
-+ break;
-+ case 16:
-+ ep_size = 1;
-+ break;
-+ case 32:
-+ ep_size = 2;
-+ break;
-+ case 64:
-+ ep_size = 3;
-+ break;
-+ case 128:
-+ ep_size = 4;
-+ break;
-+ case 256:
-+ ep_size = 5;
-+ break;
-+ case 512:
-+ ep_size = 6;
-+ break;
-+ default:
-+ UDCDBGA ("ep 0x%02x has bad packet size %d",
-+ ep_addr, packet_size);
-+ packet_size = 0;
-+ ep_size = 0;
-+ break;
-+ }
-+
-+ switch (attributes & USB_ENDPOINT_XFERTYPE_MASK) {
-+ case USB_ENDPOINT_XFER_CONTROL:
-+ case USB_ENDPOINT_XFER_BULK:
-+ case USB_ENDPOINT_XFER_INT:
-+ default:
-+ /* A non-isochronous endpoint may optionally be
-+ * double-buffered. For now we disable
-+ * double-buffering.
-+ */
-+ ep_doublebuffer = 0;
-+ ep_isoc = 0;
-+ if (packet_size > 64)
-+ packet_size = 0;
-+ if (!ep || !ep_doublebuffer)
-+ buffer_size = packet_size;
-+ else
-+ buffer_size = packet_size * 2;
-+ break;
-+ case USB_ENDPOINT_XFER_ISOC:
-+ /* Isochronous endpoints are always double-
-+ * buffered, but the double-buffering bit
-+ * in the endpoint configuration register
-+ * becomes the msb of the endpoint size so we
-+ * set the double-buffering flag to zero.
-+ */
-+ ep_doublebuffer = 0;
-+ ep_isoc = 1;
-+ buffer_size = packet_size * 2;
-+ break;
-+ }
-+
-+ /* check to see if our packet buffer RAM is exhausted */
-+ if ((ep_ptr + buffer_size) > 2048) {
-+ UDCDBGA ("out of packet RAM for ep 0x%02x buf size %d", ep_addr, buffer_size);
-+ buffer_size = packet_size = 0;
-+ }
-+
-+ /* force a default configuration for endpoint 0 since it is
-+ * always enabled
-+ */
-+ if (!ep && ((packet_size < 8) || (packet_size > 64))) {
-+ buffer_size = packet_size = 64;
-+ ep_size = 3;
-+ }
-+
-+ if (!ep) {
-+ /* configure endpoint 0 */
-+ outw ((ep_size << 12) | (ep_ptr >> 3), UDC_EP0);
-+ /*UDCDBGA("ep 0 buffer offset 0x%03x packet size 0x%03x", */
-+ /* ep_ptr, packet_size); */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* IN endpoint */
-+ if (packet_size) {
-+ outw ((1 << 15) | (ep_doublebuffer << 14) |
-+ (ep_size << 12) | (ep_isoc << 11) |
-+ (ep_ptr >> 3),
-+ UDC_EP_TX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ UDCDBGA ("IN ep %d buffer offset 0x%03x"
-+ " packet size 0x%03x",
-+ ep_addr & USB_ENDPOINT_NUMBER_MASK,
-+ ep_ptr, packet_size);
-+ } else {
-+ outw (0,
-+ UDC_EP_TX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ }
-+ } else {
-+ /* OUT endpoint */
-+ if (packet_size) {
-+ outw ((1 << 15) | (ep_doublebuffer << 14) |
-+ (ep_size << 12) | (ep_isoc << 11) |
-+ (ep_ptr >> 3),
-+ UDC_EP_RX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ UDCDBGA ("OUT ep %d buffer offset 0x%03x"
-+ " packet size 0x%03x",
-+ ep_addr & USB_ENDPOINT_NUMBER_MASK,
-+ ep_ptr, packet_size);
-+ } else {
-+ outw (0,
-+ UDC_EP_RX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ }
-+ }
-+ ep_ptr += buffer_size;
-+ }
-+}
-+
-+static void s3c2410_deconfigure_device (void)
-+{
-+ int epnum;
-+
-+ UDCDBG ("clear Cfg_Lock");
-+ outw (inw (UDC_SYSCON1) & ~UDC_Cfg_Lock, UDC_SYSCON1);
-+ UDCREG (UDC_SYSCON1);
-+
-+ /* deconfigure all endpoints */
-+ for (epnum = 1; epnum <= 15; epnum++) {
-+ outw (0, UDC_EP_RX (epnum));
-+ outw (0, UDC_EP_TX (epnum));
-+ }
-+}
-+
-+static void s3c2410_configure_device (struct usb_device_instance *device)
-+{
-+ u_int32_t tmp;
-+
-+ s3c2410_configure_endpoints(device);
-+
-+ /* disable EP0-4 SUBD interrupts ? */
-+ outw(0x00, S3C2410_UDC_USB_INT_EN_REG);
-+
-+ /* UPLL already configured by board-level init code */
-+
-+ /* configure USB pads to device mode */
-+ tmp = inw(S3C2410_MISCCR);
-+ tmp &= ~(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND1);
-+ outw(tmp, S3C2410_MISCCR);
-+
-+ tmp = inb(S3C2410_CLKSLOW);
-+ tmp &= ~S3C2410_CLKSLOW_USB_CLK_DISABLE;
-+ outw(tmp, S3C2410_CLKSLOW);
-+
-+ /* clear interrupt registers */
-+ inb(S3C2410_UDC_EP_INT_REG);
-+ inb(S3C2410_UDC_USB_INT_REG);
-+
-+ /* enable USB interrupts for RESET and SUSPEND/RESUME */
-+ outb(S3C2410_UDC_USBINT_RESET|S3C2410_UDC_USBINT_SUSPEND,
-+ S3C2410_UDC_USB_INT_EN_REG);
-+
-+}
-+
-+/* omap1510_write_noniso_tx_fifo
-+ *
-+ * This function implements TRM Figure 14-30.
-+ *
-+ * If the endpoint has an active tx_urb, then the next packet of data from the
-+ * URB is written to the tx FIFO. The total amount of data in the urb is given
-+ * by urb->actual_length. The maximum amount of data that can be sent in any
-+ * one packet is given by endpoint->tx_packetSize. The number of data bytes
-+ * from this URB that have already been transmitted is given by endpoint->sent.
-+ * endpoint->last is updated by this routine with the number of data bytes
-+ * transmitted in this packet.
-+ *
-+ * In accordance with Figure 14-30, the EP_NUM register must already have been
-+ * written with the value to select the appropriate tx FIFO before this routine
-+ * is called.
-+ */
-+static void omap1510_write_noniso_tx_fifo (struct usb_endpoint_instance
-+ *endpoint)
-+{
-+ struct urb *urb = endpoint->tx_urb;
-+
-+ if (urb) {
-+ unsigned int last, i;
-+
-+ UDCDBGA ("urb->buffer %p, buffer_length %d, actual_length %d",
-+ urb->buffer, urb->buffer_length, urb->actual_length);
-+ if ((last =
-+ MIN (urb->actual_length - endpoint->sent,
-+ endpoint->tx_packetSize))) {
-+ u8 *cp = urb->buffer + endpoint->sent;
-+
-+ UDCDBGA ("endpoint->sent %d, tx_packetSize %d, last %d", endpoint->sent, endpoint->tx_packetSize, last);
-+
-+ if (((u32) cp & 1) == 0) { /* word aligned? */
-+ outsw (UDC_DATA, cp, last >> 1);
-+ } else { /* byte aligned. */
-+ for (i = 0; i < (last >> 1); i++) {
-+ u16 w = ((u16) cp[2 * i + 1] << 8) |
-+ (u16) cp[2 * i];
-+ outw (w, UDC_DATA);
-+ }
-+ }
-+ if (last & 1) {
-+ outb (*(cp + last - 1), UDC_DATA);
-+ }
-+ }
-+ endpoint->last = last;
-+ }
-+}
-+
-+/* omap1510_read_noniso_rx_fifo
-+ *
-+ * This function implements TRM Figure 14-28.
-+ *
-+ * If the endpoint has an active rcv_urb, then the next packet of data is read
-+ * from the rcv FIFO and written to rcv_urb->buffer at offset
-+ * rcv_urb->actual_length to append the packet data to the data from any
-+ * previous packets for this transfer. We assume that there is sufficient room
-+ * left in the buffer to hold an entire packet of data.
-+ *
-+ * The return value is the number of bytes read from the FIFO for this packet.
-+ *
-+ * In accordance with Figure 14-28, the EP_NUM register must already have been
-+ * written with the value to select the appropriate rcv FIFO before this routine
-+ * is called.
-+ */
-+static int omap1510_read_noniso_rx_fifo (struct usb_endpoint_instance
-+ *endpoint)
-+{
-+ struct urb *urb = endpoint->rcv_urb;
-+ int len = 0;
-+
-+ if (urb) {
-+ len = inw (UDC_RXFSTAT);
-+
-+ if (len) {
-+ unsigned char *cp = urb->buffer + urb->actual_length;
-+
-+ insw (UDC_DATA, cp, len >> 1);
-+ if (len & 1)
-+ *(cp + len - 1) = inb (UDC_DATA);
-+ }
-+ }
-+ return len;
-+}
-+
-+/* omap1510_prepare_for_control_write_status
-+ *
-+ * This function implements TRM Figure 14-17.
-+ *
-+ * We have to deal here with non-autodecoded control writes that haven't already
-+ * been dealt with by ep0_recv_setup. The non-autodecoded standard control
-+ * write requests are: set/clear endpoint feature, set configuration, set
-+ * interface, and set descriptor. ep0_recv_setup handles set/clear requests for
-+ * ENDPOINT_HALT by halting the endpoint for a set request and resetting the
-+ * endpoint for a clear request. ep0_recv_setup returns an error for
-+ * SET_DESCRIPTOR requests which causes them to be terminated with a stall by
-+ * the setup handler. A SET_INTERFACE request is handled by ep0_recv_setup by
-+ * generating a DEVICE_SET_INTERFACE event. This leaves only the
-+ * SET_CONFIGURATION event for us to deal with here.
-+ *
-+ */
-+static void omap1510_prepare_for_control_write_status (struct urb *urb)
-+{
-+ struct usb_device_request *request = &urb->device_request;;
-+
-+ /* check for a SET_CONFIGURATION request */
-+ if (request->bRequest == USB_REQ_SET_CONFIGURATION) {
-+ int configuration = le16_to_cpu (request->wValue) & 0xff;
-+ unsigned short devstat = inw (UDC_DEVSTAT);
-+
-+ if ((devstat & (UDC_ADD | UDC_CFG)) == UDC_ADD) {
-+ /* device is currently in ADDRESSED state */
-+ if (configuration) {
-+ /* Assume the specified non-zero configuration
-+ * value is valid and switch to the CONFIGURED
-+ * state.
-+ */
-+ outw (UDC_Dev_Cfg, UDC_SYSCON2);
-+ }
-+ } else if ((devstat & UDC_CFG) == UDC_CFG) {
-+ /* device is currently in CONFIGURED state */
-+ if (!configuration) {
-+ /* Switch to ADDRESSED state. */
-+ outw (UDC_Clr_Cfg, UDC_SYSCON2);
-+ }
-+ }
-+ }
-+
-+ /* select EP0 tx FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ /* clear endpoint (no data bytes in status stage) */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+ /* enable the EP0 tx FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the endpoint */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+}
-+
-+/* udc_state_transition_up
-+ * udc_state_transition_down
-+ *
-+ * Helper functions to implement device state changes. The device states and
-+ * the events that transition between them are:
-+ *
-+ * STATE_ATTACHED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_HUB_CONFIGURED DEVICE_HUB_RESET
-+ * || /\
-+ * \/ ||
-+ * STATE_POWERED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_RESET DEVICE_POWER_INTERRUPTION
-+ * || /\
-+ * \/ ||
-+ * STATE_DEFAULT
-+ * || /\
-+ * \/ ||
-+ * DEVICE_ADDRESS_ASSIGNED DEVICE_RESET
-+ * || /\
-+ * \/ ||
-+ * STATE_ADDRESSED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_CONFIGURED DEVICE_DE_CONFIGURED
-+ * || /\
-+ * \/ ||
-+ * STATE_CONFIGURED
-+ *
-+ * udc_state_transition_up transitions up (in the direction from STATE_ATTACHED
-+ * to STATE_CONFIGURED) from the specified initial state to the specified final
-+ * state, passing through each intermediate state on the way. If the initial
-+ * state is at or above (i.e. nearer to STATE_CONFIGURED) the final state, then
-+ * no state transitions will take place.
-+ *
-+ * udc_state_transition_down transitions down (in the direction from
-+ * STATE_CONFIGURED to STATE_ATTACHED) from the specified initial state to the
-+ * specified final state, passing through each intermediate state on the way.
-+ * If the initial state is at or below (i.e. nearer to STATE_ATTACHED) the final
-+ * state, then no state transitions will take place.
-+ *
-+ * These functions must only be called with interrupts disabled.
-+ */
-+static void udc_state_transition_up (usb_device_state_t initial,
-+ usb_device_state_t final)
-+{
-+ if (initial < final) {
-+ switch (initial) {
-+ case STATE_ATTACHED:
-+ usbd_device_event_irq (udc_device,
-+ DEVICE_HUB_CONFIGURED, 0);
-+ if (final == STATE_POWERED)
-+ break;
-+ case STATE_POWERED:
-+ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
-+ if (final == STATE_DEFAULT)
-+ break;
-+ case STATE_DEFAULT:
-+ usbd_device_event_irq (udc_device,
-+ DEVICE_ADDRESS_ASSIGNED, 0);
-+ if (final == STATE_ADDRESSED)
-+ break;
-+ case STATE_ADDRESSED:
-+ usbd_device_event_irq (udc_device, DEVICE_CONFIGURED,
-+ 0);
-+ case STATE_CONFIGURED:
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+}
-+
-+static void udc_state_transition_down (usb_device_state_t initial,
-+ usb_device_state_t final)
-+{
-+ if (initial > final) {
-+ switch (initial) {
-+ case STATE_CONFIGURED:
-+ usbd_device_event_irq (udc_device, DEVICE_DE_CONFIGURED, 0);
-+ if (final == STATE_ADDRESSED)
-+ break;
-+ case STATE_ADDRESSED:
-+ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
-+ if (final == STATE_DEFAULT)
-+ break;
-+ case STATE_DEFAULT:
-+ usbd_device_event_irq (udc_device, DEVICE_POWER_INTERRUPTION, 0);
-+ if (final == STATE_POWERED)
-+ break;
-+ case STATE_POWERED:
-+ usbd_device_event_irq (udc_device, DEVICE_HUB_RESET, 0);
-+ case STATE_ATTACHED:
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+}
-+
-+/* Handle all device state changes.
-+ * This function implements TRM Figure 14-21.
-+ */
-+static void omap1510_udc_state_changed (void)
-+{
-+ u16 bits;
-+ u16 devstat = inw (UDC_DEVSTAT);
-+
-+ UDCDBGA ("state changed, devstat %x, old %x", devstat, udc_devstat);
-+
-+ bits = devstat ^ udc_devstat;
-+ if (bits) {
-+ if (bits & UDC_ATT) {
-+ if (devstat & UDC_ATT) {
-+ UDCDBG ("device attached and powered");
-+ udc_state_transition_up (udc_device->device_state, STATE_POWERED);
-+ } else {
-+ UDCDBG ("device detached or unpowered");
-+ udc_state_transition_down (udc_device->device_state, STATE_ATTACHED);
-+ }
-+ }
-+ if (bits & UDC_USB_Reset) {
-+ if (devstat & UDC_USB_Reset) {
-+ UDCDBG ("device reset in progess");
-+ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
-+ } else {
-+ UDCDBG ("device reset completed");
-+ }
-+ }
-+ if (bits & UDC_DEF) {
-+ if (devstat & UDC_DEF) {
-+ UDCDBG ("device entering default state");
-+ udc_state_transition_up (udc_device->device_state, STATE_DEFAULT);
-+ } else {
-+ UDCDBG ("device leaving default state");
-+ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
-+ }
-+ }
-+ if (bits & UDC_SUS) {
-+ if (devstat & UDC_SUS) {
-+ UDCDBG ("entering suspended state");
-+ usbd_device_event_irq (udc_device, DEVICE_BUS_INACTIVE, 0);
-+ } else {
-+ UDCDBG ("leaving suspended state");
-+ usbd_device_event_irq (udc_device, DEVICE_BUS_ACTIVITY, 0);
-+ }
-+ }
-+ if (bits & UDC_R_WK_OK) {
-+ UDCDBGA ("remote wakeup %s", (devstat & UDC_R_WK_OK)
-+ ? "enabled" : "disabled");
-+ }
-+ if (bits & UDC_ADD) {
-+ if (devstat & UDC_ADD) {
-+ UDCDBG ("default -> addressed");
-+ udc_state_transition_up (udc_device->device_state, STATE_ADDRESSED);
-+ } else {
-+ UDCDBG ("addressed -> default");
-+ udc_state_transition_down (udc_device->device_state, STATE_DEFAULT);
-+ }
-+ }
-+ if (bits & UDC_CFG) {
-+ if (devstat & UDC_CFG) {
-+ UDCDBG ("device configured");
-+ /* The ep0_recv_setup function generates the
-+ * DEVICE_CONFIGURED event when a
-+ * USB_REQ_SET_CONFIGURATION setup packet is
-+ * received, so we should already be in the
-+ * state STATE_CONFIGURED.
-+ */
-+ udc_state_transition_up (udc_device->device_state, STATE_CONFIGURED);
-+ } else {
-+ UDCDBG ("device deconfigured");
-+ udc_state_transition_down (udc_device->device_state, STATE_ADDRESSED);
-+ }
-+ }
-+ }
-+
-+ /* Clear interrupt source */
-+ outw (UDC_DS_Chg, UDC_IRQ_SRC);
-+
-+ /* Save current DEVSTAT */
-+ udc_devstat = devstat;
-+}
-+
-+static void s3c2410_udc_ep0(void)
-+{
-+ u_int8_t ep0csr;
-+
-+ UDCDBG("-> Entering EP0 handler");
-+
-+ S3C2410_UDC_SETIX(EP0);
-+ ep0csr = inb(S3C2410_UDC_IN_CSR1_REG);
-+
-+ /* clear stall status */
-+ if (ep0csr & S3C2410_UDC_EP0_CSR_SENTSTL) {
-+ clear_sp0_sst;
-+ /* FIXME */
-+ ep0_idle();
-+ }
-+
-+ if (ep0csr & S3C2410_UDC_EP0_CSR_SE
-+ && dev->ep0state != EP0_IDLE) {
-+ clear_ep0_se;
-+ ep0_idle();
-+ }
-+
-+ switch (dev->ep0state) {
-+ case EP0_IDLE:
-+ if (ep0crs & S3C2410_UDC_EP0_CSR_OPKRDY) {
-+ }
-+ break;
-+ case EP0_IN_DATA_PHASE:
-+ break;
-+ case EP0_OUT_DATA_PHASE:
-+ break;
-+ case EP0_END_XFER:
-+ break;
-+ case EP0_STALL:
-+ set_ep0_ss;
-+ break;
-+ }
-+}
-+
-+
-+}
-+
-+/* Handle SETUP USB interrupt.
-+ * This function implements TRM Figure 14-14.
-+ */
-+static void omap1510_udc_setup (struct usb_endpoint_instance *endpoint)
-+{
-+ UDCDBG ("-> Entering device setup");
-+
-+ do {
-+ const int setup_pktsize = 8;
-+ unsigned char *datap =
-+ (unsigned char *) &ep0_urb->device_request;
-+
-+ /* Gain access to EP 0 setup FIFO */
-+ outw (UDC_Setup_Sel, UDC_EP_NUM);
-+
-+ /* Read control request data */
-+ insb (UDC_DATA, datap, setup_pktsize);
-+
-+ UDCDBGA ("EP0 setup read [%x %x %x %x %x %x %x %x]",
-+ *(datap + 0), *(datap + 1), *(datap + 2),
-+ *(datap + 3), *(datap + 4), *(datap + 5),
-+ *(datap + 6), *(datap + 7));
-+
-+ /* Reset EP0 setup FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } while (inw (UDC_IRQ_SRC) & UDC_Setup);
-+
-+ /* Try to process setup packet */
-+ if (ep0_recv_setup (ep0_urb)) {
-+ /* Not a setup packet, stall next EP0 transaction */
-+ udc_stall_ep (0);
-+ UDCDBG ("can't parse setup packet, still waiting for setup");
-+ return;
-+ }
-+
-+ /* Check direction */
-+ if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK)
-+ == USB_REQ_HOST2DEVICE) {
-+ UDCDBG ("control write on EP0");
-+ if (le16_to_cpu (ep0_urb->device_request.wLength)) {
-+ /* We don't support control write data stages.
-+ * The only standard control write request with a data
-+ * stage is SET_DESCRIPTOR, and ep0_recv_setup doesn't
-+ * support that so we just stall those requests. A
-+ * function driver might support a non-standard
-+ * write request with a data stage, but it isn't
-+ * obvious what we would do with the data if we read it
-+ * so we'll just stall it. It seems like the API isn't
-+ * quite right here.
-+ */
-+#if 0
-+ /* Here is what we would do if we did support control
-+ * write data stages.
-+ */
-+ ep0_urb->actual_length = 0;
-+ outw (0, UDC_EP_NUM);
-+ /* enable the EP0 rx FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+#else
-+ /* Stall this request */
-+ UDCDBG ("Stalling unsupported EP0 control write data "
-+ "stage.");
-+ udc_stall_ep (0);
-+#endif
-+ } else {
-+ omap1510_prepare_for_control_write_status (ep0_urb);
-+ }
-+ } else {
-+ UDCDBG ("control read on EP0");
-+ /* The ep0_recv_setup function has already placed our response
-+ * packet data in ep0_urb->buffer and the packet length in
-+ * ep0_urb->actual_length.
-+ */
-+ endpoint->tx_urb = ep0_urb;
-+ endpoint->sent = 0;
-+ /* select the EP0 tx FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ /* Write packet data to the FIFO. omap1510_write_noniso_tx_fifo
-+ * will update endpoint->last with the number of bytes written
-+ * to the FIFO.
-+ */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable the FIFO to start the packet transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the EP0 tx FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+
-+ UDCDBG ("<- Leaving device setup");
-+}
-+
-+/* Handle endpoint 0 RX interrupt
-+ * This routine implements TRM Figure 14-16.
-+ */
-+static void omap1510_udc_ep0_rx (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short status;
-+
-+ UDCDBG ("RX on EP0");
-+ /* select EP0 rx FIFO */
-+ outw (UDC_EP_Sel, UDC_EP_NUM);
-+
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ /* Check direction */
-+ if ((ep0_urb->device_request.bmRequestType
-+ & USB_REQ_DIRECTION_MASK) == USB_REQ_HOST2DEVICE) {
-+ /* This rx interrupt must be for a control write data
-+ * stage packet.
-+ *
-+ * We don't support control write data stages.
-+ * We should never end up here.
-+ */
-+
-+ /* clear the EP0 rx FIFO */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+
-+ /* deselect the EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+
-+ UDCDBG ("Stalling unexpected EP0 control write "
-+ "data stage packet");
-+ udc_stall_ep (0);
-+ } else {
-+ /* This rx interrupt must be for a control read status
-+ * stage packet.
-+ */
-+ UDCDBG ("ACK on EP0 control read status stage packet");
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBG ("EP0 stall during RX");
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } else {
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Handle endpoint 0 TX interrupt
-+ * This routine implements TRM Figure 14-18.
-+ */
-+static void omap1510_udc_ep0_tx (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short status;
-+ struct usb_device_request *request = &ep0_urb->device_request;
-+
-+ UDCDBG ("TX on EP0");
-+ /* select EP0 TX FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+
-+ status = inw (UDC_STAT_FLG);
-+ if (status & UDC_ACK) {
-+ /* Check direction */
-+ if ((request->bmRequestType & USB_REQ_DIRECTION_MASK) ==
-+ USB_REQ_HOST2DEVICE) {
-+ /* This tx interrupt must be for a control write status
-+ * stage packet.
-+ */
-+ UDCDBG ("ACK on EP0 control write status stage packet");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ } else {
-+ /* This tx interrupt must be for a control read data
-+ * stage packet.
-+ */
-+ int wLength = le16_to_cpu (request->wLength);
-+
-+ /* Update our count of bytes sent so far in this
-+ * transfer.
-+ */
-+ endpoint->sent += endpoint->last;
-+
-+ /* We are finished with this transfer if we have sent
-+ * all of the bytes in our tx urb (urb->actual_length)
-+ * unless we need a zero-length terminating packet. We
-+ * need a zero-length terminating packet if we returned
-+ * fewer bytes than were requested (wLength) by the host,
-+ * and the number of bytes we returned is an exact
-+ * multiple of the packet size endpoint->tx_packetSize.
-+ */
-+ if ((endpoint->sent == ep0_urb->actual_length)
-+ && ((ep0_urb->actual_length == wLength)
-+ || (endpoint->last !=
-+ endpoint->tx_packetSize))) {
-+ /* Done with control read data stage. */
-+ UDCDBG ("control read data stage complete");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ /* select EP0 RX FIFO to prepare for control
-+ * read status stage.
-+ */
-+ outw (UDC_EP_Sel, UDC_EP_NUM);
-+ /* clear the EP0 RX FIFO */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+ /* enable the EP0 RX FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the EP0 RX FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } else {
-+ /* We still have another packet of data to send
-+ * in this control read data stage or else we
-+ * need a zero-length terminating packet.
-+ */
-+ UDCDBG ("ACK control read data stage packet");
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable the EP0 tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBG ("EP0 stall during TX");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ } else {
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Handle RX transaction on non-ISO endpoint.
-+ * This function implements TRM Figure 14-27.
-+ * The ep argument is a physical endpoint number for a non-ISO OUT endpoint
-+ * in the range 1 to 15.
-+ */
-+static void omap1510_udc_epn_rx (int ep)
-+{
-+ unsigned short status;
-+
-+ /* Check endpoint status */
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ int nbytes;
-+ struct usb_endpoint_instance *endpoint =
-+ omap1510_find_ep (ep);
-+
-+ nbytes = omap1510_read_noniso_rx_fifo (endpoint);
-+ usbd_rcv_complete (endpoint, nbytes, 0);
-+
-+ /* enable rx FIFO to prepare for next packet */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ } else if (status & UDC_STALL) {
-+ UDCDBGA ("STALL on RX endpoint %d", ep);
-+ } else if (status & UDC_NAK) {
-+ UDCDBGA ("NAK on RX ep %d", ep);
-+ } else {
-+ serial_printf ("omap-bi: RX on ep %d with status %x", ep,
-+ status);
-+ }
-+}
-+
-+/* Handle TX transaction on non-ISO endpoint.
-+ * This function implements TRM Figure 14-29.
-+ * The ep argument is a physical endpoint number for a non-ISO IN endpoint
-+ * in the range 16 to 30.
-+ */
-+static void omap1510_udc_epn_tx (int ep)
-+{
-+ unsigned short status;
-+
-+ /*serial_printf("omap1510_udc_epn_tx( %x )\n",ep); */
-+
-+ /* Check endpoint status */
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ struct usb_endpoint_instance *endpoint =
-+ omap1510_find_ep (ep);
-+
-+ /* We need to transmit a terminating zero-length packet now if
-+ * we have sent all of the data in this URB and the transfer
-+ * size was an exact multiple of the packet size.
-+ */
-+ if (endpoint->tx_urb
-+ && (endpoint->last == endpoint->tx_packetSize)
-+ && (endpoint->tx_urb->actual_length - endpoint->sent -
-+ endpoint->last == 0)) {
-+ /* Prepare to transmit a zero-length packet. */
-+ endpoint->sent += endpoint->last;
-+ /* write 0 bytes of data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ } else if (endpoint->tx_urb
-+ && endpoint->tx_urb->actual_length) {
-+ /* retire the data that was just sent */
-+ usbd_tx_complete (endpoint);
-+ /* Check to see if we have more data ready to transmit
-+ * now.
-+ */
-+ if (endpoint->tx_urb
-+ && endpoint->tx_urb->actual_length) {
-+ /* write data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ }
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBGA ("STALL on TX endpoint %d", ep);
-+ } else if (status & UDC_NAK) {
-+ UDCDBGA ("NAK on TX endpoint %d", ep);
-+ } else {
-+ /*serial_printf("omap-bi: TX on ep %d with status %x\n", ep, status); */
-+ }
-+}
-+
-+
-+/*
-+-------------------------------------------------------------------------------
-+*/
-+
-+/* Handle general USB interrupts and dispatch according to type.
-+ * This function implements TRM Figure 14-13.
-+ */
-+void s3c2410_udc_irq (void)
-+{
-+ u_int8_t save_idx = inb(S3C2410_UDC_INDEX_REG);
-+ u_int8_t usb_status = inb(S3C2410_UDC_USB_INT_REG);
-+ u_int8_t usbd_status = inb(S3C2410_UDC_EP_INT_REG);
-+
-+ UDCDBGA("< IRQ usbs=0x%02x, usbds=0x%02x start >", usb_status,
-+ usbd_status);
-+
-+ if (usb_status & S3C2410_UDC_USBINT_RESET) {
-+ valid_irq++;
-+ }
-+
-+ if (usb_status & S3C2410_UDC_USBINT_RESUME) {
-+ valid_irq++;
-+
-+ }
-+
-+ if (usb_status & S3C2410_UDC_USBINT_SUSPEND) {
-+ valid_irq++;
-+
-+ }
-+
-+ /* Endpoint Interrupts */
-+ if (usbd_status) {
-+ int i;
-+
-+ if (usbd_status & S3C2410_UDC_INT_EP0) {
-+ s3c2410_udc_ep0();
-+ outb(S3C2410_UDC_INT_EP0, S3C2410_UDC_EP_INT_REG);
-+ valid_irq++;
-+ }
-+
-+ for (i = 1; i < 5; i++) {
-+ u_int32_t tmp = 1 << i;
-+
-+ if (usbd_status & tmp) {
-+ /* FIXME: Handle EP X */
-+ s3c2410_udc_epn(i);
-+ outb(tmp, S3C2410_UDC_EP_INT_REG);
-+ valid_irq++;
-+ }
-+ }
-+ }
-+ outb(save_idx, S3C2410_UDC_INDEX_REG);
-+
-+#if 0
-+ if (!(irq_src & ~UDC_SOF_Flg)) /* ignore SOF interrupts ) */
-+ return;
-+
-+ UDCDBGA ("< IRQ #%d start >- %x", udc_interrupts, irq_src);
-+ /*serial_printf("< IRQ #%d start >- %x\n", udc_interrupts, irq_src); */
-+
-+ if (irq_src & UDC_DS_Chg) {
-+ /* Device status changed */
-+ omap1510_udc_state_changed ();
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EP0_RX) {
-+ /* Endpoint 0 receive */
-+ outw (UDC_EP0_RX, UDC_IRQ_SRC); /* ack interrupt */
-+ omap1510_udc_ep0_rx (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EP0_TX) {
-+ /* Endpoint 0 transmit */
-+ outw (UDC_EP0_TX, UDC_IRQ_SRC); /* ack interrupt */
-+ omap1510_udc_ep0_tx (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_Setup) {
-+ /* Device setup */
-+ omap1510_udc_setup (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ /*if (!valid_irq) */
-+ /* serial_printf("unknown interrupt, IRQ_SRC %.4x\n", irq_src); */
-+#endif
-+ UDCDBGA ("< IRQ end >", udc_interrupts);
-+
-+ udc_interrupts++;
-+}
-+
-+/* This function implements TRM Figure 14-26. */
-+void omap1510_udc_noniso_irq (void)
-+{
-+ unsigned short epnum;
-+ unsigned short irq_src = inw (UDC_IRQ_SRC);
-+ int valid_irq = 0;
-+
-+ if (!(irq_src & (UDC_EPn_RX | UDC_EPn_TX)))
-+ return;
-+
-+ UDCDBGA ("non-ISO IRQ, IRQ_SRC %x", inw (UDC_IRQ_SRC));
-+
-+ if (irq_src & UDC_EPn_RX) { /* Endpoint N OUT transaction */
-+ /* Determine the endpoint number for this interrupt */
-+ epnum = (inw (UDC_EPN_STAT) & 0x0f00) >> 8;
-+ UDCDBGA ("RX on ep %x", epnum);
-+
-+ /* acknowledge interrupt */
-+ outw (UDC_EPn_RX, UDC_IRQ_SRC);
-+
-+ if (epnum) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | epnum, UDC_EP_NUM);
-+
-+ omap1510_udc_epn_rx (epnum);
-+
-+ /* deselect the endpoint FIFO */
-+ outw (epnum, UDC_EP_NUM);
-+ }
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EPn_TX) { /* Endpoint N IN transaction */
-+ /* Determine the endpoint number for this interrupt */
-+ epnum = (inw (UDC_EPN_STAT) & 0x000f) | USB_DIR_IN;
-+ UDCDBGA ("TX on ep %x", epnum);
-+
-+ /* acknowledge interrupt */
-+ outw (UDC_EPn_TX, UDC_IRQ_SRC);
-+
-+ if (epnum) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
-+
-+ omap1510_udc_epn_tx (epnum);
-+
-+ /* deselect the endpoint FIFO */
-+ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ }
-+ valid_irq++;
-+ }
-+ if (!valid_irq)
-+ serial_printf (": unknown non-ISO interrupt, IRQ_SRC %.4x\n",
-+ irq_src);
-+}
-+
-+/*
-+-------------------------------------------------------------------------------
-+*/
-+
-+
-+/*
-+ * Start of public functions.
-+ */
-+
-+/* Called to start packet transmission. */
-+void udc_endpoint_write (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short epnum =
-+ endpoint->endpoint_address & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("Starting transmit on ep %x", epnum);
-+
-+ if (endpoint->tx_urb) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ /* write data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the endpoint FIFO */
-+ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Start to initialize h/w stuff */
-+int udc_init (void)
-+{
-+ u16 udc_rev;
-+ uchar value;
-+ ulong gpio;
-+ int i;
-+
-+ /* Let the device settle down before we start */
-+ for (i = 0; i < UDC_INIT_MDELAY; i++) udelay(1000);
-+
-+ udc_device = NULL;
-+
-+ UDCDBG ("starting");
-+
-+ /* Check peripheral reset. Must be 1 to make sure
-+ MPU TIPB peripheral reset is inactive */
-+ UDCREG (ARM_RSTCT2);
-+
-+ /* Set and check clock control.
-+ * We might ought to be using the clock control API to do
-+ * this instead of fiddling with the clock registers directly
-+ * here.
-+ */
-+ outw ((1 << 4) | (1 << 5), CLOCK_CTRL);
-+ UDCREG (CLOCK_CTRL);
-+ /* Set and check APLL */
-+ outw (0x0008, APLL_CTRL);
-+ UDCREG (APLL_CTRL);
-+ /* Set and check DPLL */
-+ outw (0x2210, DPLL_CTRL);
-+ UDCREG (DPLL_CTRL);
-+ /* Set and check SOFT */
-+ outw ((1 << 4) | (1 << 3) | 1, SOFT_REQ);
-+ /* Short delay to wait for DPLL */
-+ udelay (1000);
-+
-+ /* Print banner with device revision */
-+ udc_rev = inw (UDC_REV) & 0xff;
-+ printf ("USB: TI OMAP1510 USB function module rev %d.%d\n",
-+ udc_rev >> 4, udc_rev & 0xf);
-+
-+#ifdef CONFIG_OMAP_SX1
-+ i2c_read (0x32, 0x04, 1, &value, 1);
-+ value |= 0x04;
-+ i2c_write (0x32, 0x04, 1, &value, 1);
-+
-+ i2c_read (0x32, 0x03, 1, &value, 1);
-+ value |= 0x01;
-+ i2c_write (0x32, 0x03, 1, &value, 1);
-+
-+ gpio = inl(GPIO_PIN_CONTROL_REG);
-+ gpio |= 0x0002; /* A_IRDA_OFF */
-+ gpio |= 0x0800; /* A_SWITCH */
-+ gpio |= 0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_PIN_CONTROL_REG);
-+
-+ gpio = inl(GPIO_DIR_CONTROL_REG);
-+ gpio &= ~0x0002; /* A_IRDA_OFF */
-+ gpio &= ~0x0800; /* A_SWITCH */
-+ gpio &= ~0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_DIR_CONTROL_REG);
-+
-+ gpio = inl(GPIO_DATA_OUTPUT_REG);
-+ gpio |= 0x0002; /* A_IRDA_OFF */
-+ gpio &= ~0x0800; /* A_SWITCH */
-+ gpio &= ~0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_DATA_OUTPUT_REG);
-+#endif
-+
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
-+ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+
-+ /*
-+ * At this point, device is ready for configuration...
-+ */
-+
-+ UDCDBG ("disable USB interrupts");
-+ outw (0, UDC_IRQ_EN);
-+ UDCREG (UDC_IRQ_EN);
-+
-+ UDCDBG ("disable USB DMA");
-+ outw (0, UDC_DMA_IRQ_EN);
-+ UDCREG (UDC_DMA_IRQ_EN);
-+
-+ UDCDBG ("initialize SYSCON1");
-+ outw (UDC_Self_Pwr | UDC_Pullup_En, UDC_SYSCON1);
-+ UDCREG (UDC_SYSCON1);
-+
-+ return 0;
-+}
-+
-+/* Stall endpoint */
-+static void udc_stall_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("stall ep_addr %d", ep_addr);
-+
-+ /* REVISIT?
-+ * The OMAP TRM section 14.2.4.2 says we must check that the FIFO
-+ * is empty before halting the endpoint. The current implementation
-+ * doesn't check that the FIFO is empty.
-+ */
-+
-+ if (!ep_num) {
-+ outw (UDC_Stall_Cmd, UDC_SYSCON2);
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
-+ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
-+ /* we have a valid rx endpoint, so halt it */
-+ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_Halt, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ }
-+ } else {
-+ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
-+ /* we have a valid tx endpoint, so halt it */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_Halt, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ }
-+ }
-+}
-+
-+/* Reset endpoint */
-+#if 0
-+static void udc_reset_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("reset ep_addr %d", ep_addr);
-+
-+ if (!ep_num) {
-+ /* control endpoint 0 can't be reset */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
-+ UDCDBGA ("UDC_EP_RX(%d) = 0x%04x", ep_num,
-+ inw (UDC_EP_RX (ep_num)));
-+ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
-+ /* we have a valid rx endpoint, so reset it */
-+ outw (ep_num | UDC_EP_Sel, UDC_EP_NUM);
-+ outw (UDC_Reset_EP, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ UDCDBGA ("OUT endpoint %d reset", ep_num);
-+ }
-+ } else {
-+ UDCDBGA ("UDC_EP_TX(%d) = 0x%04x", ep_num,
-+ inw (UDC_EP_TX (ep_num)));
-+ /* Resetting of tx endpoints seems to be causing the USB function
-+ * module to fail, which causes problems when the driver is
-+ * uninstalled. We'll skip resetting tx endpoints for now until
-+ * we figure out what the problem is.
-+ */
-+#if 0
-+ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
-+ /* we have a valid tx endpoint, so reset it */
-+ outw (ep_num | UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ outw (UDC_Reset_EP, UDC_CTRL);
-+ outw (ep_num | UDC_EP_Dir, UDC_EP_NUM);
-+ UDCDBGA ("IN endpoint %d reset", ep_num);
-+ }
-+#endif
-+ }
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_check_ep - check logical endpoint
-+ *
-+ * Return physical endpoint number to use for this logical endpoint or zero if not valid.
-+ */
-+#if 0
-+int udc_check_ep (int logical_endpoint, int packetsize)
-+{
-+ if ((logical_endpoint == 0x80) ||
-+ ((logical_endpoint & 0x8f) != logical_endpoint)) {
-+ return 0;
-+ }
-+
-+ switch (packetsize) {
-+ case 8:
-+ case 16:
-+ case 32:
-+ case 64:
-+ case 128:
-+ case 256:
-+ case 512:
-+ break;
-+ default:
-+ return 0;
-+ }
-+
-+ return EP_ADDR_TO_PHYS_EP (logical_endpoint);
-+}
-+#endif
-+
-+/*
-+ * udc_setup_ep - setup endpoint
-+ *
-+ * Associate a physical endpoint with endpoint_instance
-+ */
-+void udc_setup_ep (struct usb_device_instance *device,
-+ unsigned int ep, struct usb_endpoint_instance *endpoint)
-+{
-+ UDCDBGA ("setting up endpoint addr %x", endpoint->endpoint_address);
-+
-+ /* This routine gets called by bi_modinit for endpoint 0 and from
-+ * bi_config for all of the other endpoints. bi_config gets called
-+ * during the DEVICE_CREATE, DEVICE_CONFIGURED, and
-+ * DEVICE_SET_INTERFACE events. We need to reconfigure the OMAP packet
-+ * RAM after bi_config scans the selected device configuration and
-+ * initializes the endpoint structures, but before this routine enables
-+ * the OUT endpoint FIFOs. Since bi_config calls this routine in a
-+ * loop for endpoints 1 through UDC_MAX_ENDPOINTS, we reconfigure our
-+ * packet RAM here when ep==1.
-+ * I really hate to do this here, but it seems like the API exported
-+ * by the USB bus interface controller driver to the usbd-bi module
-+ * isn't quite right so there is no good place to do this.
-+ */
-+ if (ep == 1) {
-+ omap1510_deconfigure_device ();
-+ omap1510_configure_device (device);
-+ }
-+
-+ if (endpoint && (ep < UDC_MAX_ENDPOINTS)) {
-+ int ep_addr = endpoint->endpoint_address;
-+
-+ if (!ep_addr) {
-+ /* nothing to do for endpoint 0 */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* nothing to do for IN (tx) endpoints */
-+ } else { /* OUT (rx) endpoint */
-+ if (endpoint->rcv_packetSize) {
-+ /*struct urb* urb = &(urb_out_array[ep&0xFF]); */
-+ /*urb->endpoint = endpoint; */
-+ /*urb->device = device; */
-+ /*urb->buffer_length = sizeof(urb->buffer); */
-+
-+ /*endpoint->rcv_urb = urb; */
-+ omap1510_prepare_endpoint_for_rx (ep_addr);
-+ }
-+ }
-+ }
-+}
-+
-+/**
-+ * udc_disable_ep - disable endpoint
-+ * @ep:
-+ *
-+ * Disable specified endpoint
-+ */
-+#if 0
-+void udc_disable_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+ struct usb_endpoint_instance *endpoint = omap1510_find_ep (ep_addr); /*udc_device->bus->endpoint_array + ep; */
-+
-+ UDCDBGA ("disable ep_addr %d", ep_addr);
-+
-+ if (!ep_num) {
-+ /* nothing to do for endpoint 0 */ ;
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ if (endpoint->tx_packetSize) {
-+ /* we have a valid tx endpoint */
-+ /*usbd_flush_tx(endpoint); */
-+ endpoint->tx_urb = NULL;
-+ }
-+ } else {
-+ if (endpoint->rcv_packetSize) {
-+ /* we have a valid rx endpoint */
-+ /*usbd_flush_rcv(endpoint); */
-+ endpoint->rcv_urb = NULL;
-+ }
-+ }
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_connected - is the USB cable connected
-+ *
-+ * Return non-zero if cable is connected.
-+ */
-+#if 0
-+int udc_connected (void)
-+{
-+ return ((inw (UDC_DEVSTAT) & UDC_ATT) == UDC_ATT);
-+}
-+#endif
-+
-+/* Turn on the USB connection by enabling the pullup resistor */
-+void udc_connect (void)
-+{
-+ UDCDBG ("connect, enable Pullup");
-+}
-+
-+/* Turn off the USB connection by disabling the pullup resistor */
-+void udc_disconnect (void)
-+{
-+ UDCDBG ("disconnect, disable Pullup");
-+}
-+
-+/* ************************************************************************** */
-+
-+
-+/*
-+ * udc_disable_interrupts - disable interrupts
-+ * switch off interrupts
-+ */
-+#if 0
-+void udc_disable_interrupts (struct usb_device_instance *device)
-+{
-+ UDCDBG ("disabling all interrupts");
-+ outw (0, UDC_IRQ_EN);
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_ep0_packetsize - return ep0 packetsize
-+ */
-+#if 0
-+int udc_ep0_packetsize (void)
-+{
-+ return EP0_PACKETSIZE;
-+}
-+#endif
-+
-+/* Switch on the UDC */
-+void udc_enable (struct usb_device_instance *device)
-+{
-+ UDCDBGA ("enable device %p, status %d", device, device->status);
-+
-+ /* initialize driver state variables */
-+ udc_devstat = 0;
-+
-+ /* Save the device structure pointer */
-+ udc_device = device;
-+
-+ /* Setup ep0 urb */
-+ if (!ep0_urb) {
-+ ep0_urb =
-+ usbd_alloc_urb (udc_device,
-+ udc_device->bus->endpoint_array);
-+ } else {
-+ serial_printf ("udc_enable: ep0_urb already allocated %p\n",
-+ ep0_urb);
-+ }
-+
-+#ifdef FIXME
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_CTRL | UDC_VBUS_MODE,
-+ FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+#endif
-+
-+ s3c2410_configure_device(device);
-+}
-+
-+/* Switch off the UDC */
-+void udc_disable (void)
-+{
-+ UDCDBG ("disable UDC");
-+
-+ s3c2410_deconfigure_device();
-+
-+#ifdef FIXME
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
-+ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+#endif
-+
-+ /* Free ep0 URB */
-+ if (ep0_urb) {
-+ /*usbd_dealloc_urb(ep0_urb); */
-+ ep0_urb = NULL;
-+ }
-+
-+ /* Reset device pointer.
-+ * We ought to do this here to balance the initialization of udc_device
-+ * in udc_enable, but some of our other exported functions get called
-+ * by the bus interface driver after udc_disable, so we have to hang on
-+ * to the device pointer to avoid a null pointer dereference. */
-+ /* udc_device = NULL; */
-+}
-+
-+/**
-+ * udc_startup - allow udc code to do any additional startup
-+ */
-+void udc_startup_events (struct usb_device_instance *device)
-+{
-+ /* The DEVICE_INIT event puts the USB device in the state STATE_INIT. */
-+ usbd_device_event_irq (device, DEVICE_INIT, 0);
-+
-+ /* The DEVICE_CREATE event puts the USB device in the state
-+ * STATE_ATTACHED.
-+ */
-+ usbd_device_event_irq (device, DEVICE_CREATE, 0);
-+
-+ /* Some USB controller driver implementations signal
-+ * DEVICE_HUB_CONFIGURED and DEVICE_RESET events here.
-+ * DEVICE_HUB_CONFIGURED causes a transition to the state STATE_POWERED,
-+ * and DEVICE_RESET causes a transition to the state STATE_DEFAULT.
-+ * The OMAP USB client controller has the capability to detect when the
-+ * USB cable is connected to a powered USB bus via the ATT bit in the
-+ * DEVSTAT register, so we will defer the DEVICE_HUB_CONFIGURED and
-+ * DEVICE_RESET events until later.
-+ */
-+
-+ udc_enable (device);
-+}
-+
-+#endif
-diff --git a/examples/Makefile b/examples/Makefile
-index a342d75..082e52e 100644
---- a/examples/Makefile
-+++ b/examples/Makefile
-@@ -60,7 +60,7 @@ endif
- include $(TOPDIR)/config.mk
-
- SREC = hello_world.srec
--BIN = hello_world.bin hello_world
-+BIN = hello_world hello_world.bin
-
- ifeq ($(CPU),mpc8xx)
- SREC = test_burst.srec
-@@ -122,7 +122,7 @@ clibdir := $(shell dirname `$(CC) $(CFLA
-
- CPPFLAGS += -I..
-
--all: .depend $(OBJS) $(LIB) $(SREC) $(BIN)
-+all: .depend $(OBJS) $(LIB) $(BIN) $(SREC)
-
- #########################################################################
- $(LIB): .depend $(LIBOBJS)
-diff --git a/include/asm-arm/arch-s3c24x0/mmc.h b/include/asm-arm/arch-s3c24x0/mmc.h
-new file mode 100644
-index 0000000..d9178f3
---- /dev/null
-+++ b/include/asm-arm/arch-s3c24x0/mmc.h
-@@ -0,0 +1,112 @@
-+/*
-+ * linux/drivers/mmc/mmc_pxa.h
-+ *
-+ * Author: Vladimir Shebordaev, Igor Oblakov
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * $Id: mmc_pxa.h,v 0.3.1.6 2002/09/25 19:25:48 ted Exp ted $
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+#ifndef __MMC_PXA_P_H__
-+#define __MMC_PXA_P_H__
-+
-+#include <asm/arch/regs-sdi.h>
-+
-+#define MMC_DEFAULT_RCA (1<<16)
-+
-+#define MMC_BLOCK_SIZE 512
-+#define MMC_CMD_RESET 0
-+#define MMC_CMD_SEND_OP_COND 1
-+#define MMC_CMD_ALL_SEND_CID 2
-+#define MMC_CMD_SET_RCA 3
-+#define MMC_CMD_SELECT_CARD 7
-+#define MMC_CMD_SEND_CSD 9
-+#define MMC_CMD_SEND_CID 10
-+#define MMC_CMD_SEND_STATUS 13
-+#define MMC_CMD_SET_BLOCKLEN 16
-+#define MMC_CMD_READ_BLOCK 17
-+#define MMC_CMD_RD_BLK_MULTI 18
-+#define MMC_CMD_WRITE_BLOCK 24
-+
-+#define MMC_MAX_BLOCK_SIZE 512
-+
-+#define MMC_R1_IDLE_STATE 0x01
-+#define MMC_R1_ERASE_STATE 0x02
-+#define MMC_R1_ILLEGAL_CMD 0x04
-+#define MMC_R1_COM_CRC_ERR 0x08
-+#define MMC_R1_ERASE_SEQ_ERR 0x01
-+#define MMC_R1_ADDR_ERR 0x02
-+#define MMC_R1_PARAM_ERR 0x04
-+
-+#define MMC_R1B_WP_ERASE_SKIP 0x0002
-+#define MMC_R1B_ERR 0x0004
-+#define MMC_R1B_CC_ERR 0x0008
-+#define MMC_R1B_CARD_ECC_ERR 0x0010
-+#define MMC_R1B_WP_VIOLATION 0x0020
-+#define MMC_R1B_ERASE_PARAM 0x0040
-+#define MMC_R1B_OOR 0x0080
-+#define MMC_R1B_IDLE_STATE 0x0100
-+#define MMC_R1B_ERASE_RESET 0x0200
-+#define MMC_R1B_ILLEGAL_CMD 0x0400
-+#define MMC_R1B_COM_CRC_ERR 0x0800
-+#define MMC_R1B_ERASE_SEQ_ERR 0x1000
-+#define MMC_R1B_ADDR_ERR 0x2000
-+#define MMC_R1B_PARAM_ERR 0x4000
-+
-+typedef struct mmc_cid
-+{
-+/* FIXME: BYTE_ORDER */
-+ uchar year:4,
-+ month:4;
-+ uchar sn[3];
-+ uchar fwrev:4,
-+ hwrev:4;
-+ uchar name[6];
-+ uchar id[3];
-+} mmc_cid_t;
-+
-+typedef struct mmc_csd
-+{
-+ uchar ecc:2,
-+ file_format:2,
-+ tmp_write_protect:1,
-+ perm_write_protect:1,
-+ copy:1,
-+ file_format_grp:1;
-+ uint64_t content_prot_app:1,
-+ rsvd3:4,
-+ write_bl_partial:1,
-+ write_bl_len:4,
-+ r2w_factor:3,
-+ default_ecc:2,
-+ wp_grp_enable:1,
-+ wp_grp_size:5,
-+ erase_grp_mult:5,
-+ erase_grp_size:5,
-+ c_size_mult1:3,
-+ vdd_w_curr_max:3,
-+ vdd_w_curr_min:3,
-+ vdd_r_curr_max:3,
-+ vdd_r_curr_min:3,
-+ c_size:12,
-+ rsvd2:2,
-+ dsr_imp:1,
-+ read_blk_misalign:1,
-+ write_blk_misalign:1,
-+ read_bl_partial:1;
-+
-+ ushort read_bl_len:4,
-+ ccc:12;
-+ uchar tran_speed;
-+ uchar nsac;
-+ uchar taac;
-+ uchar rsvd1:2,
-+ spec_vers:4,
-+ csd_structure:2;
-+} mmc_csd_t;
-+
-+
-+#endif /* __MMC_PXA_P_H__ */
-diff --git a/include/asm-arm/arch-s3c24x0/regs-sdi.h b/include/asm-arm/arch-s3c24x0/regs-sdi.h
-new file mode 100644
-index 0000000..9b5b9d1
---- /dev/null
-+++ b/include/asm-arm/arch-s3c24x0/regs-sdi.h
-@@ -0,0 +1,110 @@
-+/* linux/include/asm/arch-s3c2410/regs-sdi.h
-+ *
-+ * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>
-+ * http://www.simtec.co.uk/products/SWLINUX/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * S3C2410 MMC/SDIO register definitions
-+ *
-+ * Changelog:
-+ * 18-Aug-2004 Ben Dooks Created initial file
-+ * 29-Nov-2004 Koen Martens Added some missing defines, fixed duplicates
-+ * 29-Nov-2004 Ben Dooks Updated Koen's patch
-+*/
-+
-+#ifndef __ASM_ARM_REGS_SDI
-+#define __ASM_ARM_REGS_SDI "regs-sdi.h"
-+
-+#define S3C2440_SDICON_SDRESET (1<<8)
-+#define S3C2440_SDICON_MMCCLOCK (1<<5)
-+#define S3C2410_SDICON_BYTEORDER (1<<4)
-+#define S3C2410_SDICON_SDIOIRQ (1<<3)
-+#define S3C2410_SDICON_RWAITEN (1<<2)
-+#define S3C2410_SDICON_FIFORESET (1<<1)
-+#define S3C2410_SDICON_CLOCKTYPE (1<<0)
-+
-+#define S3C2410_SDICMDCON_ABORT (1<<12)
-+#define S3C2410_SDICMDCON_WITHDATA (1<<11)
-+#define S3C2410_SDICMDCON_LONGRSP (1<<10)
-+#define S3C2410_SDICMDCON_WAITRSP (1<<9)
-+#define S3C2410_SDICMDCON_CMDSTART (1<<8)
-+#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
-+#define S3C2410_SDICMDCON_INDEX (0x3f)
-+
-+#define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
-+#define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
-+#define S3C2410_SDICMDSTAT_CMDTIMEOUT (1<<10)
-+#define S3C2410_SDICMDSTAT_RSPFIN (1<<9)
-+#define S3C2410_SDICMDSTAT_XFERING (1<<8)
-+#define S3C2410_SDICMDSTAT_INDEX (0xff)
-+
-+#define S3C2440_SDIDCON_DS_BYTE (0<<22)
-+#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
-+#define S3C2440_SDIDCON_DS_WORD (2<<22)
-+#define S3C2410_SDIDCON_IRQPERIOD (1<<21)
-+#define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
-+#define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
-+#define S3C2410_SDIDCON_BUSYAFTERCMD (1<<18)
-+#define S3C2410_SDIDCON_BLOCKMODE (1<<17)
-+#define S3C2410_SDIDCON_WIDEBUS (1<<16)
-+#define S3C2410_SDIDCON_DMAEN (1<<15)
-+#define S3C2410_SDIDCON_STOP (1<<14)
-+#define S3C2440_SDIDCON_DATSTART (1<<14)
-+#define S3C2410_SDIDCON_DATMODE (3<<12)
-+#define S3C2410_SDIDCON_BLKNUM (0x7ff)
-+
-+/* constants for S3C2410_SDIDCON_DATMODE */
-+#define S3C2410_SDIDCON_XFER_READY (0<<12)
-+#define S3C2410_SDIDCON_XFER_CHKSTART (1<<12)
-+#define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
-+#define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
-+
-+#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
-+#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
-+
-+#define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
-+#define S3C2410_SDIDSTA_SDIOIRQDETECT (1<<9)
-+#define S3C2410_SDIDSTA_FIFOFAIL (1<<8) /* reserved on 2440 */
-+#define S3C2410_SDIDSTA_CRCFAIL (1<<7)
-+#define S3C2410_SDIDSTA_RXCRCFAIL (1<<6)
-+#define S3C2410_SDIDSTA_DATATIMEOUT (1<<5)
-+#define S3C2410_SDIDSTA_XFERFINISH (1<<4)
-+#define S3C2410_SDIDSTA_BUSYFINISH (1<<3)
-+#define S3C2410_SDIDSTA_SBITERR (1<<2) /* reserved on 2410a/2440 */
-+#define S3C2410_SDIDSTA_TXDATAON (1<<1)
-+#define S3C2410_SDIDSTA_RXDATAON (1<<0)
-+
-+#define S3C2440_SDIFSTA_FIFORESET (1<<16)
-+#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
-+#define S3C2410_SDIFSTA_TFDET (1<<13)
-+#define S3C2410_SDIFSTA_RFDET (1<<12)
-+#define S3C2410_SDIFSTA_TFHALF (1<<11)
-+#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
-+#define S3C2410_SDIFSTA_RFLAST (1<<9)
-+#define S3C2410_SDIFSTA_RFFULL (1<<8)
-+#define S3C2410_SDIFSTA_RFHALF (1<<7)
-+#define S3C2410_SDIFSTA_COUNTMASK (0x7f)
-+
-+#define S3C2410_SDIIMSK_RESPONSECRC (1<<17)
-+#define S3C2410_SDIIMSK_CMDSENT (1<<16)
-+#define S3C2410_SDIIMSK_CMDTIMEOUT (1<<15)
-+#define S3C2410_SDIIMSK_RESPONSEND (1<<14)
-+#define S3C2410_SDIIMSK_READWAIT (1<<13)
-+#define S3C2410_SDIIMSK_SDIOIRQ (1<<12)
-+#define S3C2410_SDIIMSK_FIFOFAIL (1<<11)
-+#define S3C2410_SDIIMSK_CRCSTATUS (1<<10)
-+#define S3C2410_SDIIMSK_DATACRC (1<<9)
-+#define S3C2410_SDIIMSK_DATATIMEOUT (1<<8)
-+#define S3C2410_SDIIMSK_DATAFINISH (1<<7)
-+#define S3C2410_SDIIMSK_BUSYFINISH (1<<6)
-+#define S3C2410_SDIIMSK_SBITERR (1<<5) /* reserved 2440/2410a */
-+#define S3C2410_SDIIMSK_TXFIFOHALF (1<<4)
-+#define S3C2410_SDIIMSK_TXFIFOEMPTY (1<<3)
-+#define S3C2410_SDIIMSK_RXFIFOLAST (1<<2)
-+#define S3C2410_SDIIMSK_RXFIFOFULL (1<<1)
-+#define S3C2410_SDIIMSK_RXFIFOHALF (1<<0)
-+
-+#endif /* __ASM_ARM_REGS_SDI */
-diff --git a/include/asm-arm/mach-types.h b/include/asm-arm/mach-types.h
-index 7d7888e..4e9c6d9 100644
---- a/include/asm-arm/mach-types.h
-+++ b/include/asm-arm/mach-types.h
-@@ -424,7 +424,7 @@ #define MACH_TYPE_MT02 4
- #define MACH_TYPE_MPORT3S 411
- #define MACH_TYPE_RA_ALPHA 412
- #define MACH_TYPE_XCEP 413
--#define MACH_TYPE_ARCOM_MERCURY 414
-+#define MACH_TYPE_ARCOM_VULCAN 414
- #define MACH_TYPE_STARGATE 415
- #define MACH_TYPE_ARMADILLOJ 416
- #define MACH_TYPE_ELROY_JACK 417
-@@ -457,7 +457,7 @@ #define MACH_TYPE_ESL_SARVA 4
- #define MACH_TYPE_XM250 444
- #define MACH_TYPE_T6TC1XB 445
- #define MACH_TYPE_ESS710 446
--#define MACH_TYPE_MX3ADS 447
-+#define MACH_TYPE_MX31ADS 447
- #define MACH_TYPE_HIMALAYA 448
- #define MACH_TYPE_BOLFENK 449
- #define MACH_TYPE_AT91RM9200KR 450
-@@ -736,7 +736,308 @@ #define MACH_TYPE_ADSPORTAL 7
- #define MACH_TYPE_LN2410SBC 725
- #define MACH_TYPE_CB3RUFC 726
- #define MACH_TYPE_MP2USB 727
--#define MACH_TYPE_PDNB3 1002
-+#define MACH_TYPE_NTNP425C 728
-+#define MACH_TYPE_COLIBRI 729
-+#define MACH_TYPE_PCM7220 730
-+#define MACH_TYPE_GATEWAY7001 731
-+#define MACH_TYPE_PCM027 732
-+#define MACH_TYPE_CMPXA 733
-+#define MACH_TYPE_ANUBIS 734
-+#define MACH_TYPE_ITE8152 735
-+#define MACH_TYPE_LPC3XXX 736
-+#define MACH_TYPE_PUPPETEER 737
-+#define MACH_TYPE_MACH_VADATECH 738
-+#define MACH_TYPE_E570 739
-+#define MACH_TYPE_X50 740
-+#define MACH_TYPE_RECON 741
-+#define MACH_TYPE_XBOARDGP8 742
-+#define MACH_TYPE_FPIC2 743
-+#define MACH_TYPE_AKITA 744
-+#define MACH_TYPE_A81 745
-+#define MACH_TYPE_SVM_SC25X 746
-+#define MACH_TYPE_VADATECH020 747
-+#define MACH_TYPE_TLI 748
-+#define MACH_TYPE_EDB9315LC 749
-+#define MACH_TYPE_PASSEC 750
-+#define MACH_TYPE_DS_TIGER 751
-+#define MACH_TYPE_E310 752
-+#define MACH_TYPE_E330 753
-+#define MACH_TYPE_RT3000 754
-+#define MACH_TYPE_NOKIA770 755
-+#define MACH_TYPE_PNX0106 756
-+#define MACH_TYPE_HX21XX 757
-+#define MACH_TYPE_FARADAY 758
-+#define MACH_TYPE_SBC9312 759
-+#define MACH_TYPE_BATMAN 760
-+#define MACH_TYPE_JPD201 761
-+#define MACH_TYPE_MIPSA 762
-+#define MACH_TYPE_KACOM 763
-+#define MACH_TYPE_SWARCOCPU 764
-+#define MACH_TYPE_SWARCODSL 765
-+#define MACH_TYPE_BLUEANGEL 766
-+#define MACH_TYPE_HAIRYGRAMA 767
-+#define MACH_TYPE_BANFF 768
-+#define MACH_TYPE_CARMEVA 769
-+#define MACH_TYPE_SAM255 770
-+#define MACH_TYPE_PPM10 771
-+#define MACH_TYPE_EDB9315A 772
-+#define MACH_TYPE_SUNSET 773
-+#define MACH_TYPE_STARGATE2 774
-+#define MACH_TYPE_INTELMOTE2 775
-+#define MACH_TYPE_TRIZEPS4 776
-+#define MACH_TYPE_MAINSTONE2 777
-+#define MACH_TYPE_EZ_IXP42X 778
-+#define MACH_TYPE_TAPWAVE_ZODIAC 779
-+#define MACH_TYPE_UNIVERSALMETER 780
-+#define MACH_TYPE_HICOARM9 781
-+#define MACH_TYPE_PNX4008 782
-+#define MACH_TYPE_KWS6000 783
-+#define MACH_TYPE_PORTUX920T 784
-+#define MACH_TYPE_EZ_X5 785
-+#define MACH_TYPE_OMAP_RUDOLPH 786
-+#define MACH_TYPE_CPUAT91 787
-+#define MACH_TYPE_REA9200 788
-+#define MACH_TYPE_ACTS_PUNE_SA1110 789
-+#define MACH_TYPE_IXP425 790
-+#define MACH_TYPE_ARGONPLUSODYSSEY 791
-+#define MACH_TYPE_PERCH 792
-+#define MACH_TYPE_EIS05R1 793
-+#define MACH_TYPE_PEPPERPAD 794
-+#define MACH_TYPE_SB3010 795
-+#define MACH_TYPE_RM9200 796
-+#define MACH_TYPE_DMA03 797
-+#define MACH_TYPE_ROAD_S101 798
-+#define MACH_TYPE_IQ_NEXTGEN_A 799
-+#define MACH_TYPE_IQ_NEXTGEN_B 800
-+#define MACH_TYPE_IQ_NEXTGEN_C 801
-+#define MACH_TYPE_IQ_NEXTGEN_D 802
-+#define MACH_TYPE_IQ_NEXTGEN_E 803
-+#define MACH_TYPE_MALLOW_AT91 804
-+#define MACH_TYPE_CYBERTRACKER_I 805
-+#define MACH_TYPE_GESBC931X 806
-+#define MACH_TYPE_CENTIPAD 807
-+#define MACH_TYPE_ARMSOC 808
-+#define MACH_TYPE_SE4200 809
-+#define MACH_TYPE_EMS197A 810
-+#define MACH_TYPE_MICRO9 811
-+#define MACH_TYPE_MICRO9L 812
-+#define MACH_TYPE_UC5471DSP 813
-+#define MACH_TYPE_SJ5471ENG 814
-+#define MACH_TYPE_CMPXA26X 815
-+#define MACH_TYPE_NC 816
-+#define MACH_TYPE_OMAP_PALMTE 817
-+#define MACH_TYPE_AJAX52X 818
-+#define MACH_TYPE_SIRIUSTAR 819
-+#define MACH_TYPE_IODATA_HDLG 820
-+#define MACH_TYPE_AT91RM9200UTL 821
-+#define MACH_TYPE_BIOSAFE 822
-+#define MACH_TYPE_MP1000 823
-+#define MACH_TYPE_PARSY 824
-+#define MACH_TYPE_CCXP 825
-+#define MACH_TYPE_OMAP_GSAMPLE 826
-+#define MACH_TYPE_REALVIEW_EB 827
-+#define MACH_TYPE_SAMOA 828
-+#define MACH_TYPE_T3XSCALE 829
-+#define MACH_TYPE_I878 830
-+#define MACH_TYPE_BORZOI 831
-+#define MACH_TYPE_GECKO 832
-+#define MACH_TYPE_DS101 833
-+#define MACH_TYPE_OMAP_PALMTT2 834
-+#define MACH_TYPE_XSCALE_PALMLD 835
-+#define MACH_TYPE_CC9C 836
-+#define MACH_TYPE_SBC1670 837
-+#define MACH_TYPE_IXDP28X5 838
-+#define MACH_TYPE_OMAP_PALMTT 839
-+#define MACH_TYPE_ML696K 840
-+#define MACH_TYPE_ARCOM_ZEUS 841
-+#define MACH_TYPE_OSIRIS 842
-+#define MACH_TYPE_MAESTRO 843
-+#define MACH_TYPE_TUNGE2 844
-+#define MACH_TYPE_IXBBM 845
-+#define MACH_TYPE_MX27 846
-+#define MACH_TYPE_AX8004 847
-+#define MACH_TYPE_AT91SAM9261EK 848
-+#define MACH_TYPE_LOFT 849
-+#define MACH_TYPE_MAGPIE 850
-+#define MACH_TYPE_MX21 851
-+#define MACH_TYPE_MB87M3400 852
-+#define MACH_TYPE_MGUARD_DELTA 853
-+#define MACH_TYPE_DAVINCI_DVDP 854
-+#define MACH_TYPE_HTCUNIVERSAL 855
-+#define MACH_TYPE_TPAD 856
-+#define MACH_TYPE_ROVERP3 857
-+#define MACH_TYPE_JORNADA928 858
-+#define MACH_TYPE_MV88FXX81 859
-+#define MACH_TYPE_STMP36XX 860
-+#define MACH_TYPE_SXNI79524 861
-+#define MACH_TYPE_AMS_DELTA 862
-+#define MACH_TYPE_URANIUM 863
-+#define MACH_TYPE_UCON 864
-+#define MACH_TYPE_NAS100D 865
-+#define MACH_TYPE_L083_1000 866
-+#define MACH_TYPE_EZX 867
-+#define MACH_TYPE_PNX5220 868
-+#define MACH_TYPE_BUTTE 869
-+#define MACH_TYPE_SRM2 870
-+#define MACH_TYPE_DSBR 871
-+#define MACH_TYPE_CRYSTALBALL 872
-+#define MACH_TYPE_TINYPXA27X 873
-+#define MACH_TYPE_HERBIE 874
-+#define MACH_TYPE_MAGICIAN 875
-+#define MACH_TYPE_CM4002 876
-+#define MACH_TYPE_B4 877
-+#define MACH_TYPE_MAUI 878
-+#define MACH_TYPE_CYBERTRACKER_G 879
-+#define MACH_TYPE_NXDKN 880
-+#define MACH_TYPE_MIO8390 881
-+#define MACH_TYPE_OMI_BOARD 882
-+#define MACH_TYPE_MX21CIV 883
-+#define MACH_TYPE_MAHI_CDAC 884
-+#define MACH_TYPE_XSCALE_PALMTX 885
-+#define MACH_TYPE_S3C2413 887
-+#define MACH_TYPE_SAMSYS_EP0 888
-+#define MACH_TYPE_WG302V1 889
-+#define MACH_TYPE_WG302V2 890
-+#define MACH_TYPE_EB42X 891
-+#define MACH_TYPE_IQ331ES 892
-+#define MACH_TYPE_COSYDSP 893
-+#define MACH_TYPE_UPLAT7D 894
-+#define MACH_TYPE_PTDAVINCI 895
-+#define MACH_TYPE_MBUS 896
-+#define MACH_TYPE_NADIA2VB 897
-+#define MACH_TYPE_R1000 898
-+#define MACH_TYPE_HW90250 899
-+#define MACH_TYPE_OMAP_2430SDP 900
-+#define MACH_TYPE_DAVINCI_EVM 901
-+#define MACH_TYPE_OMAP_TORNADO 902
-+#define MACH_TYPE_OLOCREEK 903
-+#define MACH_TYPE_PALMZ72 904
-+#define MACH_TYPE_NXDB500 905
-+#define MACH_TYPE_APF9328 906
-+#define MACH_TYPE_OMAP_WIPOQ 907
-+#define MACH_TYPE_OMAP_TWIP 908
-+#define MACH_TYPE_XSCALE_PALMTREO650 909
-+#define MACH_TYPE_ACUMEN 910
-+#define MACH_TYPE_XP100 911
-+#define MACH_TYPE_FS2410 912
-+#define MACH_TYPE_PXA270_CERF 913
-+#define MACH_TYPE_SQ2FTLPALM 914
-+#define MACH_TYPE_BSEMSERVER 915
-+#define MACH_TYPE_NETCLIENT 916
-+#define MACH_TYPE_XSCALE_PALMTT5 917
-+#define MACH_TYPE_OMAP_PALMTC 918
-+#define MACH_TYPE_OMAP_APOLLON 919
-+#define MACH_TYPE_ARGONLVEVB 920
-+#define MACH_TYPE_REA_2D 921
-+#define MACH_TYPE_TI3E524 922
-+#define MACH_TYPE_ATEB9200 923
-+#define MACH_TYPE_AUCKLAND 924
-+#define MACH_TYPE_AK3320M 925
-+#define MACH_TYPE_DURAMAX 926
-+#define MACH_TYPE_N35 927
-+#define MACH_TYPE_PRONGHORN 928
-+#define MACH_TYPE_FUNDY 929
-+#define MACH_TYPE_LOGICPD_PXA270 930
-+#define MACH_TYPE_CPU777 931
-+#define MACH_TYPE_SIMICON9201 932
-+#define MACH_TYPE_LEAP2_HPM 933
-+#define MACH_TYPE_CM922TXA10 934
-+#define MACH_TYPE_PXA 935
-+#define MACH_TYPE_SANDGATE2 936
-+#define MACH_TYPE_SANDGATE2G 937
-+#define MACH_TYPE_SANDGATE2P 938
-+#define MACH_TYPE_FRED_JACK 939
-+#define MACH_TYPE_TTG_COLOR1 940
-+#define MACH_TYPE_NXEB500HMI 941
-+#define MACH_TYPE_NETDCU8 942
-+#define MACH_TYPE_ML675050_CPU_BOA 943
-+#define MACH_TYPE_NG_FVX538 944
-+#define MACH_TYPE_NG_FVS338 945
-+#define MACH_TYPE_PNX4103 946
-+#define MACH_TYPE_HESDB 947
-+#define MACH_TYPE_XSILO 948
-+#define MACH_TYPE_ESPRESSO 949
-+#define MACH_TYPE_EMLC 950
-+#define MACH_TYPE_SISTERON 951
-+#define MACH_TYPE_RX1950 952
-+#define MACH_TYPE_TSC_VENUS 953
-+#define MACH_TYPE_DS101J 954
-+#define MACH_TYPE_MXC30030ADS 955
-+#define MACH_TYPE_FUJITSU_WIMAXSOC 956
-+#define MACH_TYPE_DUALPCMODEM 957
-+#define MACH_TYPE_GESBC9312 958
-+#define MACH_TYPE_HTCAPACHE 959
-+#define MACH_TYPE_IXDP435 960
-+#define MACH_TYPE_CATPROVT100 961
-+#define MACH_TYPE_PICOTUX1XX 962
-+#define MACH_TYPE_PICOTUX2XX 963
-+#define MACH_TYPE_DSMG600 964
-+#define MACH_TYPE_EMPC2 965
-+#define MACH_TYPE_VENTURA 966
-+#define MACH_TYPE_PHIDGET_SBC 967
-+#define MACH_TYPE_IJ3K 968
-+#define MACH_TYPE_PISGAH 969
-+#define MACH_TYPE_OMAP_FSAMPLE 970
-+#define MACH_TYPE_SG720 971
-+#define MACH_TYPE_REDFOX 972
-+#define MACH_TYPE_MYSH_EP9315_1 973
-+#define MACH_TYPE_TPF106 974
-+#define MACH_TYPE_AT91RM9200KG 975
-+#define MACH_TYPE_SLEDB 976
-+#define MACH_TYPE_ONTRACK 977
-+#define MACH_TYPE_PM1200 978
-+#define MACH_TYPE_ESS24XXX 979
-+#define MACH_TYPE_COREMP7 980
-+#define MACH_TYPE_NEXCODER_6446 981
-+#define MACH_TYPE_STVC8380 982
-+#define MACH_TYPE_TEKLYNX 983
-+#define MACH_TYPE_CARBONADO 984
-+#define MACH_TYPE_SYSMOS_MP730 985
-+#define MACH_TYPE_SNAPPER_CL15 986
-+#define MACH_TYPE_PGIGIM 987
-+#define MACH_TYPE_PTX9160P2 988
-+#define MACH_TYPE_DCORE1 989
-+#define MACH_TYPE_VICTORPXA 990
-+#define MACH_TYPE_MX2DTB 991
-+#define MACH_TYPE_PXA_IREX_ER0100 992
-+#define MACH_TYPE_OMAP_PALMZ71 993
-+#define MACH_TYPE_BARTEC_DEG 994
-+#define MACH_TYPE_HW50251 995
-+#define MACH_TYPE_IBOX 996
-+#define MACH_TYPE_ATLASLH7A404 997
-+#define MACH_TYPE_PT2026 998
-+#define MACH_TYPE_HTCALPINE 999
-+#define MACH_TYPE_BARTEC_VTU 1000
-+#define MACH_TYPE_VCOREII 1001
-+#define MACH_TYPE_PDNB3 1002
-+#define MACH_TYPE_HTCBEETLES 1003
-+#define MACH_TYPE_S3C6400 1004
-+#define MACH_TYPE_S3C2443 1005
-+#define MACH_TYPE_OMAP_LDK 1006
-+#define MACH_TYPE_SMDK2460 1007
-+#define MACH_TYPE_SMDK2440 1008
-+#define MACH_TYPE_SMDK2412 1009
-+#define MACH_TYPE_WEBBOX 1010
-+#define MACH_TYPE_CWWNDP 1011
-+#define MACH_TYPE_DRAGON 1012
-+#define MACH_TYPE_OPENDO_CPU_BOARD 1013
-+#define MACH_TYPE_CCM2200 1014
-+#define MACH_TYPE_ETWARM 1015
-+#define MACH_TYPE_M93030 1016
-+#define MACH_TYPE_CC7U 1017
-+#define MACH_TYPE_MTT_RANGER 1018
-+#define MACH_TYPE_NEXUS 1019
-+#define MACH_TYPE_DESMAN 1020
-+#define MACH_TYPE_BKDE303 1021
-+#define MACH_TYPE_SMDK2413 1022
-+#define MACH_TYPE_AML_M7200 1023
-+#define MACH_TYPE_AML_M5900 1024
-+#define MACH_TYPE_SG640 1025
-+#define MACH_TYPE_EDG79524 1026
-+#define MACH_TYPE_AI2410 1027
-+#define MACH_TYPE_IXP465 1028
-+#define MACH_TYPE_BALLOON3 1029
-+#define MACH_TYPE_QT2410 1108
-
- #ifdef CONFIG_ARCH_EBSA110
- # ifdef machine_arch_type
-@@ -3541,9 +3842,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_RAMSES
- # endif
--# define machine_is_ramses() (machine_arch_type == MACH_TYPE_RAMSES)
-+# define machine_is_mnci() (machine_arch_type == MACH_TYPE_RAMSES)
- #else
--# define machine_is_ramses() (0)
-+# define machine_is_mnci() (0)
- #endif
-
- #ifdef CONFIG_ARCH_S28X
-@@ -4501,9 +4802,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_M825XX
- # endif
--# define machine_is_m825xx() (machine_arch_type == MACH_TYPE_M825XX)
-+# define machine_is_comcerto() (machine_arch_type == MACH_TYPE_M825XX)
- #else
--# define machine_is_m825xx() (0)
-+# define machine_is_comcerto() (0)
- #endif
-
- #ifdef CONFIG_SA1100_M7100
-@@ -5658,16 +5959,16 @@ #else
- # define machine_is_xcep() (0)
- #endif
-
--#ifdef CONFIG_MACH_ARCOM_MERCURY
-+#ifdef CONFIG_MACH_ARCOM_VULCAN
- # ifdef machine_arch_type
- # undef machine_arch_type
- # define machine_arch_type __machine_arch_type
- # else
--# define machine_arch_type MACH_TYPE_ARCOM_MERCURY
-+# define machine_arch_type MACH_TYPE_ARCOM_VULCAN
- # endif
--# define machine_is_arcom_mercury() (machine_arch_type == MACH_TYPE_ARCOM_MERCURY)
-+# define machine_is_arcom_vulcan() (machine_arch_type == MACH_TYPE_ARCOM_VULCAN)
- #else
--# define machine_is_arcom_mercury() (0)
-+# define machine_is_arcom_vulcan() (0)
- #endif
-
- #ifdef CONFIG_MACH_STARGATE
-@@ -6054,16 +6355,16 @@ #else
- # define machine_is_ess710() (0)
- #endif
-
--#ifdef CONFIG_MACH_MX3ADS
-+#ifdef CONFIG_MACH_MX31ADS
- # ifdef machine_arch_type
- # undef machine_arch_type
- # define machine_arch_type __machine_arch_type
- # else
--# define machine_arch_type MACH_TYPE_MX3ADS
-+# define machine_arch_type MACH_TYPE_MX31ADS
- # endif
--# define machine_is_mx3ads() (machine_arch_type == MACH_TYPE_MX3ADS)
-+# define machine_is_mx31ads() (machine_arch_type == MACH_TYPE_MX31ADS)
- #else
--# define machine_is_mx3ads() (0)
-+# define machine_is_mx31ads() (0)
- #endif
-
- #ifdef CONFIG_MACH_HIMALAYA
-@@ -7333,9 +7634,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_ARGONPLUSEVB
- # endif
--# define machine_is_argonplusevb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
-+# define machine_is_i30030evb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
- #else
--# define machine_is_argonplusevb() (0)
-+# define machine_is_i30030evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_SCMA11EVB
-@@ -7345,9 +7646,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_SCMA11EVB
- # endif
--# define machine_is_scma11evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
-+# define machine_is_mxc27530evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
- #else
--# define machine_is_scma11evb() (0)
-+# define machine_is_mxc27530evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_SMDK2800
-@@ -8305,9 +8606,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_SCMA11BB
- # endif
--# define machine_is_scma11bb() (machine_arch_type == MACH_TYPE_SCMA11BB)
-+# define machine_is_mxc27530ads() (machine_arch_type == MACH_TYPE_SCMA11BB)
- #else
--# define machine_is_scma11bb() (0)
-+# define machine_is_mxc27530ads() (0)
- #endif
-
- #ifdef CONFIG_MACH_TRIZEPS3
-@@ -9193,9 +9494,9 @@ # define machine_arch_type __machine_ar
- # else
- # define machine_arch_type MACH_TYPE_ZEUSEVB
- # endif
--# define machine_is_zeusevb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
-+# define machine_is_mxc91131evb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
- #else
--# define machine_is_zeusevb() (0)
-+# define machine_is_mxc91131evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_P700
-@@ -9402,6 +9703,3630 @@ #else
- # define machine_is_mp2usb() (0)
- #endif
-
-+#ifdef CONFIG_MACH_NTNP425C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NTNP425C
-+# endif
-+# define machine_is_ntnp425c() (machine_arch_type == MACH_TYPE_NTNP425C)
-+#else
-+# define machine_is_ntnp425c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COLIBRI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COLIBRI
-+# endif
-+# define machine_is_colibri() (machine_arch_type == MACH_TYPE_COLIBRI)
-+#else
-+# define machine_is_colibri() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PCM7220
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PCM7220
-+# endif
-+# define machine_is_pcm7220() (machine_arch_type == MACH_TYPE_PCM7220)
-+#else
-+# define machine_is_pcm7220() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GATEWAY7001
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GATEWAY7001
-+# endif
-+# define machine_is_gateway7001() (machine_arch_type == MACH_TYPE_GATEWAY7001)
-+#else
-+# define machine_is_gateway7001() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PCM027
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PCM027
-+# endif
-+# define machine_is_pcm027() (machine_arch_type == MACH_TYPE_PCM027)
-+#else
-+# define machine_is_pcm027() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CMPXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CMPXA
-+# endif
-+# define machine_is_cmpxa() (machine_arch_type == MACH_TYPE_CMPXA)
-+#else
-+# define machine_is_cmpxa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ANUBIS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ANUBIS
-+# endif
-+# define machine_is_anubis() (machine_arch_type == MACH_TYPE_ANUBIS)
-+#else
-+# define machine_is_anubis() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ITE8152
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ITE8152
-+# endif
-+# define machine_is_ite8152() (machine_arch_type == MACH_TYPE_ITE8152)
-+#else
-+# define machine_is_ite8152() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LPC3XXX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LPC3XXX
-+# endif
-+# define machine_is_lpc3xxx() (machine_arch_type == MACH_TYPE_LPC3XXX)
-+#else
-+# define machine_is_lpc3xxx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PUPPETEER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PUPPETEER
-+# endif
-+# define machine_is_puppeteer() (machine_arch_type == MACH_TYPE_PUPPETEER)
-+#else
-+# define machine_is_puppeteer() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MACH_VADATECH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MACH_VADATECH
-+# endif
-+# define machine_is_vt001() (machine_arch_type == MACH_TYPE_MACH_VADATECH)
-+#else
-+# define machine_is_vt001() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E570
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E570
-+# endif
-+# define machine_is_e570() (machine_arch_type == MACH_TYPE_E570)
-+#else
-+# define machine_is_e570() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_X50
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_X50
-+# endif
-+# define machine_is_x50() (machine_arch_type == MACH_TYPE_X50)
-+#else
-+# define machine_is_x50() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RECON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RECON
-+# endif
-+# define machine_is_recon() (machine_arch_type == MACH_TYPE_RECON)
-+#else
-+# define machine_is_recon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XBOARDGP8
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XBOARDGP8
-+# endif
-+# define machine_is_xboardgp8() (machine_arch_type == MACH_TYPE_XBOARDGP8)
-+#else
-+# define machine_is_xboardgp8() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FPIC2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FPIC2
-+# endif
-+# define machine_is_fpic2() (machine_arch_type == MACH_TYPE_FPIC2)
-+#else
-+# define machine_is_fpic2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AKITA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AKITA
-+# endif
-+# define machine_is_akita() (machine_arch_type == MACH_TYPE_AKITA)
-+#else
-+# define machine_is_akita() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_A81
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_A81
-+# endif
-+# define machine_is_a81() (machine_arch_type == MACH_TYPE_A81)
-+#else
-+# define machine_is_a81() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SVM_SC25X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SVM_SC25X
-+# endif
-+# define machine_is_svm_sc25x() (machine_arch_type == MACH_TYPE_SVM_SC25X)
-+#else
-+# define machine_is_svm_sc25x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VADATECH020
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VADATECH020
-+# endif
-+# define machine_is_vt020() (machine_arch_type == MACH_TYPE_VADATECH020)
-+#else
-+# define machine_is_vt020() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TLI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TLI
-+# endif
-+# define machine_is_tli() (machine_arch_type == MACH_TYPE_TLI)
-+#else
-+# define machine_is_tli() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDB9315LC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDB9315LC
-+# endif
-+# define machine_is_edb9315lc() (machine_arch_type == MACH_TYPE_EDB9315LC)
-+#else
-+# define machine_is_edb9315lc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PASSEC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PASSEC
-+# endif
-+# define machine_is_passec() (machine_arch_type == MACH_TYPE_PASSEC)
-+#else
-+# define machine_is_passec() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS_TIGER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS_TIGER
-+# endif
-+# define machine_is_ds_tiger() (machine_arch_type == MACH_TYPE_DS_TIGER)
-+#else
-+# define machine_is_ds_tiger() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E310
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E310
-+# endif
-+# define machine_is_e310() (machine_arch_type == MACH_TYPE_E310)
-+#else
-+# define machine_is_e310() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E330
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E330
-+# endif
-+# define machine_is_e330() (machine_arch_type == MACH_TYPE_E330)
-+#else
-+# define machine_is_e330() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RT3000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RT3000
-+# endif
-+# define machine_is_rt3000() (machine_arch_type == MACH_TYPE_RT3000)
-+#else
-+# define machine_is_rt3000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NOKIA770
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NOKIA770
-+# endif
-+# define machine_is_nokia770() (machine_arch_type == MACH_TYPE_NOKIA770)
-+#else
-+# define machine_is_nokia770() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX0106
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX0106
-+# endif
-+# define machine_is_pnx0106() (machine_arch_type == MACH_TYPE_PNX0106)
-+#else
-+# define machine_is_pnx0106() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HX21XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HX21XX
-+# endif
-+# define machine_is_hx21xx() (machine_arch_type == MACH_TYPE_HX21XX)
-+#else
-+# define machine_is_hx21xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FARADAY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FARADAY
-+# endif
-+# define machine_is_faraday() (machine_arch_type == MACH_TYPE_FARADAY)
-+#else
-+# define machine_is_faraday() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SBC9312
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SBC9312
-+# endif
-+# define machine_is_sbc9312() (machine_arch_type == MACH_TYPE_SBC9312)
-+#else
-+# define machine_is_sbc9312() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BATMAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BATMAN
-+# endif
-+# define machine_is_batman() (machine_arch_type == MACH_TYPE_BATMAN)
-+#else
-+# define machine_is_batman() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_JPD201
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_JPD201
-+# endif
-+# define machine_is_jpd201() (machine_arch_type == MACH_TYPE_JPD201)
-+#else
-+# define machine_is_jpd201() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MIPSA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MIPSA
-+# endif
-+# define machine_is_mipsa() (machine_arch_type == MACH_TYPE_MIPSA)
-+#else
-+# define machine_is_mipsa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_KACOM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_KACOM
-+# endif
-+# define machine_is_kacom() (machine_arch_type == MACH_TYPE_KACOM)
-+#else
-+# define machine_is_kacom() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SWARCOCPU
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SWARCOCPU
-+# endif
-+# define machine_is_swarcocpu() (machine_arch_type == MACH_TYPE_SWARCOCPU)
-+#else
-+# define machine_is_swarcocpu() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SWARCODSL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SWARCODSL
-+# endif
-+# define machine_is_swarcodsl() (machine_arch_type == MACH_TYPE_SWARCODSL)
-+#else
-+# define machine_is_swarcodsl() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BLUEANGEL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BLUEANGEL
-+# endif
-+# define machine_is_blueangel() (machine_arch_type == MACH_TYPE_BLUEANGEL)
-+#else
-+# define machine_is_blueangel() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HAIRYGRAMA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HAIRYGRAMA
-+# endif
-+# define machine_is_hairygrama() (machine_arch_type == MACH_TYPE_HAIRYGRAMA)
-+#else
-+# define machine_is_hairygrama() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BANFF
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BANFF
-+# endif
-+# define machine_is_banff() (machine_arch_type == MACH_TYPE_BANFF)
-+#else
-+# define machine_is_banff() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CARMEVA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CARMEVA
-+# endif
-+# define machine_is_carmeva() (machine_arch_type == MACH_TYPE_CARMEVA)
-+#else
-+# define machine_is_carmeva() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAM255
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAM255
-+# endif
-+# define machine_is_sam255() (machine_arch_type == MACH_TYPE_SAM255)
-+#else
-+# define machine_is_sam255() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PPM10
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PPM10
-+# endif
-+# define machine_is_ppm10() (machine_arch_type == MACH_TYPE_PPM10)
-+#else
-+# define machine_is_ppm10() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDB9315A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDB9315A
-+# endif
-+# define machine_is_edb9315a() (machine_arch_type == MACH_TYPE_EDB9315A)
-+#else
-+# define machine_is_edb9315a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SUNSET
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SUNSET
-+# endif
-+# define machine_is_sunset() (machine_arch_type == MACH_TYPE_SUNSET)
-+#else
-+# define machine_is_sunset() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STARGATE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STARGATE2
-+# endif
-+# define machine_is_stargate2() (machine_arch_type == MACH_TYPE_STARGATE2)
-+#else
-+# define machine_is_stargate2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_INTELMOTE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_INTELMOTE2
-+# endif
-+# define machine_is_intelmote2() (machine_arch_type == MACH_TYPE_INTELMOTE2)
-+#else
-+# define machine_is_intelmote2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TRIZEPS4
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TRIZEPS4
-+# endif
-+# define machine_is_trizeps4() (machine_arch_type == MACH_TYPE_TRIZEPS4)
-+#else
-+# define machine_is_trizeps4() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAINSTONE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAINSTONE2
-+# endif
-+# define machine_is_mainstone2() (machine_arch_type == MACH_TYPE_MAINSTONE2)
-+#else
-+# define machine_is_mainstone2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZ_IXP42X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZ_IXP42X
-+# endif
-+# define machine_is_ez_ixp42x() (machine_arch_type == MACH_TYPE_EZ_IXP42X)
-+#else
-+# define machine_is_ez_ixp42x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TAPWAVE_ZODIAC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TAPWAVE_ZODIAC
-+# endif
-+# define machine_is_tapwave_zodiac() (machine_arch_type == MACH_TYPE_TAPWAVE_ZODIAC)
-+#else
-+# define machine_is_tapwave_zodiac() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UNIVERSALMETER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UNIVERSALMETER
-+# endif
-+# define machine_is_universalmeter() (machine_arch_type == MACH_TYPE_UNIVERSALMETER)
-+#else
-+# define machine_is_universalmeter() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HICOARM9
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HICOARM9
-+# endif
-+# define machine_is_hicoarm9() (machine_arch_type == MACH_TYPE_HICOARM9)
-+#else
-+# define machine_is_hicoarm9() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX4008
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX4008
-+# endif
-+# define machine_is_pnx4008() (machine_arch_type == MACH_TYPE_PNX4008)
-+#else
-+# define machine_is_pnx4008() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_KWS6000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_KWS6000
-+# endif
-+# define machine_is_kws6000() (machine_arch_type == MACH_TYPE_KWS6000)
-+#else
-+# define machine_is_kws6000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PORTUX920T
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PORTUX920T
-+# endif
-+# define machine_is_portux920t() (machine_arch_type == MACH_TYPE_PORTUX920T)
-+#else
-+# define machine_is_portux920t() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZ_X5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZ_X5
-+# endif
-+# define machine_is_ez_x5() (machine_arch_type == MACH_TYPE_EZ_X5)
-+#else
-+# define machine_is_ez_x5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_RUDOLPH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_RUDOLPH
-+# endif
-+# define machine_is_omap_rudolph() (machine_arch_type == MACH_TYPE_OMAP_RUDOLPH)
-+#else
-+# define machine_is_omap_rudolph() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CPUAT91
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CPUAT91
-+# endif
-+# define machine_is_cpuat91() (machine_arch_type == MACH_TYPE_CPUAT91)
-+#else
-+# define machine_is_cpuat91() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REA9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REA9200
-+# endif
-+# define machine_is_rea9200() (machine_arch_type == MACH_TYPE_REA9200)
-+#else
-+# define machine_is_rea9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ACTS_PUNE_SA1110
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ACTS_PUNE_SA1110
-+# endif
-+# define machine_is_acts_pune_sa1110() (machine_arch_type == MACH_TYPE_ACTS_PUNE_SA1110)
-+#else
-+# define machine_is_acts_pune_sa1110() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXP425
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXP425
-+# endif
-+# define machine_is_ixp425() (machine_arch_type == MACH_TYPE_IXP425)
-+#else
-+# define machine_is_ixp425() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARGONPLUSODYSSEY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARGONPLUSODYSSEY
-+# endif
-+# define machine_is_i30030ads() (machine_arch_type == MACH_TYPE_ARGONPLUSODYSSEY)
-+#else
-+# define machine_is_i30030ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PERCH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PERCH
-+# endif
-+# define machine_is_perch() (machine_arch_type == MACH_TYPE_PERCH)
-+#else
-+# define machine_is_perch() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EIS05R1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EIS05R1
-+# endif
-+# define machine_is_eis05r1() (machine_arch_type == MACH_TYPE_EIS05R1)
-+#else
-+# define machine_is_eis05r1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PEPPERPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PEPPERPAD
-+# endif
-+# define machine_is_pepperpad() (machine_arch_type == MACH_TYPE_PEPPERPAD)
-+#else
-+# define machine_is_pepperpad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SB3010
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SB3010
-+# endif
-+# define machine_is_sb3010() (machine_arch_type == MACH_TYPE_SB3010)
-+#else
-+# define machine_is_sb3010() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RM9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RM9200
-+# endif
-+# define machine_is_rm9200() (machine_arch_type == MACH_TYPE_RM9200)
-+#else
-+# define machine_is_rm9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DMA03
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DMA03
-+# endif
-+# define machine_is_dma03() (machine_arch_type == MACH_TYPE_DMA03)
-+#else
-+# define machine_is_dma03() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ROAD_S101
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ROAD_S101
-+# endif
-+# define machine_is_road_s101() (machine_arch_type == MACH_TYPE_ROAD_S101)
-+#else
-+# define machine_is_road_s101() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_A
-+# endif
-+# define machine_is_iq_nextgen_a() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_A)
-+#else
-+# define machine_is_iq_nextgen_a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_B
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_B
-+# endif
-+# define machine_is_iq_nextgen_b() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_B)
-+#else
-+# define machine_is_iq_nextgen_b() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_C
-+# endif
-+# define machine_is_iq_nextgen_c() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_C)
-+#else
-+# define machine_is_iq_nextgen_c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_D
-+# endif
-+# define machine_is_iq_nextgen_d() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_D)
-+#else
-+# define machine_is_iq_nextgen_d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_E
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_E
-+# endif
-+# define machine_is_iq_nextgen_e() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_E)
-+#else
-+# define machine_is_iq_nextgen_e() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MALLOW_AT91
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MALLOW_AT91
-+# endif
-+# define machine_is_mallow_at91() (machine_arch_type == MACH_TYPE_MALLOW_AT91)
-+#else
-+# define machine_is_mallow_at91() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CYBERTRACKER_I
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CYBERTRACKER_I
-+# endif
-+# define machine_is_cybertracker_i() (machine_arch_type == MACH_TYPE_CYBERTRACKER_I)
-+#else
-+# define machine_is_cybertracker_i() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GESBC931X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GESBC931X
-+# endif
-+# define machine_is_gesbc931x() (machine_arch_type == MACH_TYPE_GESBC931X)
-+#else
-+# define machine_is_gesbc931x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CENTIPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CENTIPAD
-+# endif
-+# define machine_is_centipad() (machine_arch_type == MACH_TYPE_CENTIPAD)
-+#else
-+# define machine_is_centipad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARMSOC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARMSOC
-+# endif
-+# define machine_is_armsoc() (machine_arch_type == MACH_TYPE_ARMSOC)
-+#else
-+# define machine_is_armsoc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SE4200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SE4200
-+# endif
-+# define machine_is_se4200() (machine_arch_type == MACH_TYPE_SE4200)
-+#else
-+# define machine_is_se4200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMS197A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMS197A
-+# endif
-+# define machine_is_ems197a() (machine_arch_type == MACH_TYPE_EMS197A)
-+#else
-+# define machine_is_ems197a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MICRO9
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MICRO9
-+# endif
-+# define machine_is_micro9() (machine_arch_type == MACH_TYPE_MICRO9)
-+#else
-+# define machine_is_micro9() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MICRO9L
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MICRO9L
-+# endif
-+# define machine_is_micro9l() (machine_arch_type == MACH_TYPE_MICRO9L)
-+#else
-+# define machine_is_micro9l() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UC5471DSP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UC5471DSP
-+# endif
-+# define machine_is_uc5471dsp() (machine_arch_type == MACH_TYPE_UC5471DSP)
-+#else
-+# define machine_is_uc5471dsp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SJ5471ENG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SJ5471ENG
-+# endif
-+# define machine_is_sj5471eng() (machine_arch_type == MACH_TYPE_SJ5471ENG)
-+#else
-+# define machine_is_sj5471eng() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CMPXA26X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CMPXA26X
-+# endif
-+# define machine_is_none() (machine_arch_type == MACH_TYPE_CMPXA26X)
-+#else
-+# define machine_is_none() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NC
-+# endif
-+# define machine_is_nc1() (machine_arch_type == MACH_TYPE_NC)
-+#else
-+# define machine_is_nc1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTE
-+# endif
-+# define machine_is_omap_palmte() (machine_arch_type == MACH_TYPE_OMAP_PALMTE)
-+#else
-+# define machine_is_omap_palmte() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AJAX52X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AJAX52X
-+# endif
-+# define machine_is_ajax52x() (machine_arch_type == MACH_TYPE_AJAX52X)
-+#else
-+# define machine_is_ajax52x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SIRIUSTAR
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SIRIUSTAR
-+# endif
-+# define machine_is_siriustar() (machine_arch_type == MACH_TYPE_SIRIUSTAR)
-+#else
-+# define machine_is_siriustar() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IODATA_HDLG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IODATA_HDLG
-+# endif
-+# define machine_is_iodata_hdlg() (machine_arch_type == MACH_TYPE_IODATA_HDLG)
-+#else
-+# define machine_is_iodata_hdlg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91RM9200UTL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91RM9200UTL
-+# endif
-+# define machine_is_at91rm9200utl() (machine_arch_type == MACH_TYPE_AT91RM9200UTL)
-+#else
-+# define machine_is_at91rm9200utl() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BIOSAFE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BIOSAFE
-+# endif
-+# define machine_is_biosafe() (machine_arch_type == MACH_TYPE_BIOSAFE)
-+#else
-+# define machine_is_biosafe() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MP1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MP1000
-+# endif
-+# define machine_is_mp1000() (machine_arch_type == MACH_TYPE_MP1000)
-+#else
-+# define machine_is_mp1000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PARSY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PARSY
-+# endif
-+# define machine_is_parsy() (machine_arch_type == MACH_TYPE_PARSY)
-+#else
-+# define machine_is_parsy() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CCXP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CCXP
-+# endif
-+# define machine_is_ccxp270() (machine_arch_type == MACH_TYPE_CCXP)
-+#else
-+# define machine_is_ccxp270() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_GSAMPLE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_GSAMPLE
-+# endif
-+# define machine_is_omap_gsample() (machine_arch_type == MACH_TYPE_OMAP_GSAMPLE)
-+#else
-+# define machine_is_omap_gsample() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REALVIEW_EB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REALVIEW_EB
-+# endif
-+# define machine_is_realview_eb() (machine_arch_type == MACH_TYPE_REALVIEW_EB)
-+#else
-+# define machine_is_realview_eb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAMOA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAMOA
-+# endif
-+# define machine_is_samoa() (machine_arch_type == MACH_TYPE_SAMOA)
-+#else
-+# define machine_is_samoa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_T3XSCALE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_T3XSCALE
-+# endif
-+# define machine_is_t3xscale() (machine_arch_type == MACH_TYPE_T3XSCALE)
-+#else
-+# define machine_is_t3xscale() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_I878
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_I878
-+# endif
-+# define machine_is_i878() (machine_arch_type == MACH_TYPE_I878)
-+#else
-+# define machine_is_i878() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BORZOI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BORZOI
-+# endif
-+# define machine_is_borzoi() (machine_arch_type == MACH_TYPE_BORZOI)
-+#else
-+# define machine_is_borzoi() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GECKO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GECKO
-+# endif
-+# define machine_is_gecko() (machine_arch_type == MACH_TYPE_GECKO)
-+#else
-+# define machine_is_gecko() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS101
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS101
-+# endif
-+# define machine_is_ds101() (machine_arch_type == MACH_TYPE_DS101)
-+#else
-+# define machine_is_ds101() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTT2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTT2
-+# endif
-+# define machine_is_omap_palmtt2() (machine_arch_type == MACH_TYPE_OMAP_PALMTT2)
-+#else
-+# define machine_is_omap_palmtt2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMLD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMLD
-+# endif
-+# define machine_is_xscale_palmld() (machine_arch_type == MACH_TYPE_XSCALE_PALMLD)
-+#else
-+# define machine_is_xscale_palmld() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CC9C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CC9C
-+# endif
-+# define machine_is_cc9c() (machine_arch_type == MACH_TYPE_CC9C)
-+#else
-+# define machine_is_cc9c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SBC1670
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SBC1670
-+# endif
-+# define machine_is_sbc1670() (machine_arch_type == MACH_TYPE_SBC1670)
-+#else
-+# define machine_is_sbc1670() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXDP28X5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXDP28X5
-+# endif
-+# define machine_is_ixdp28x5() (machine_arch_type == MACH_TYPE_IXDP28X5)
-+#else
-+# define machine_is_ixdp28x5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTT
-+# endif
-+# define machine_is_omap_palmtt() (machine_arch_type == MACH_TYPE_OMAP_PALMTT)
-+#else
-+# define machine_is_omap_palmtt() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ML696K
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ML696K
-+# endif
-+# define machine_is_ml696k() (machine_arch_type == MACH_TYPE_ML696K)
-+#else
-+# define machine_is_ml696k() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARCOM_ZEUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARCOM_ZEUS
-+# endif
-+# define machine_is_arcom_zeus() (machine_arch_type == MACH_TYPE_ARCOM_ZEUS)
-+#else
-+# define machine_is_arcom_zeus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OSIRIS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OSIRIS
-+# endif
-+# define machine_is_osiris() (machine_arch_type == MACH_TYPE_OSIRIS)
-+#else
-+# define machine_is_osiris() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAESTRO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAESTRO
-+# endif
-+# define machine_is_maestro() (machine_arch_type == MACH_TYPE_MAESTRO)
-+#else
-+# define machine_is_maestro() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TUNGE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TUNGE2
-+# endif
-+# define machine_is_tunge2() (machine_arch_type == MACH_TYPE_TUNGE2)
-+#else
-+# define machine_is_tunge2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXBBM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXBBM
-+# endif
-+# define machine_is_ixbbm() (machine_arch_type == MACH_TYPE_IXBBM)
-+#else
-+# define machine_is_ixbbm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX27
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX27
-+# endif
-+# define machine_is_mx27ads() (machine_arch_type == MACH_TYPE_MX27)
-+#else
-+# define machine_is_mx27ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AX8004
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AX8004
-+# endif
-+# define machine_is_ax8004() (machine_arch_type == MACH_TYPE_AX8004)
-+#else
-+# define machine_is_ax8004() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91SAM9261EK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91SAM9261EK
-+# endif
-+# define machine_is_at91sam9261ek() (machine_arch_type == MACH_TYPE_AT91SAM9261EK)
-+#else
-+# define machine_is_at91sam9261ek() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LOFT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LOFT
-+# endif
-+# define machine_is_loft() (machine_arch_type == MACH_TYPE_LOFT)
-+#else
-+# define machine_is_loft() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAGPIE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAGPIE
-+# endif
-+# define machine_is_magpie() (machine_arch_type == MACH_TYPE_MAGPIE)
-+#else
-+# define machine_is_magpie() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX21
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX21
-+# endif
-+# define machine_is_mx21ads() (machine_arch_type == MACH_TYPE_MX21)
-+#else
-+# define machine_is_mx21ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MB87M3400
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MB87M3400
-+# endif
-+# define machine_is_mb87m3400() (machine_arch_type == MACH_TYPE_MB87M3400)
-+#else
-+# define machine_is_mb87m3400() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MGUARD_DELTA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MGUARD_DELTA
-+# endif
-+# define machine_is_mguard_delta() (machine_arch_type == MACH_TYPE_MGUARD_DELTA)
-+#else
-+# define machine_is_mguard_delta() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DAVINCI_DVDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DAVINCI_DVDP
-+# endif
-+# define machine_is_davinci_dvdp() (machine_arch_type == MACH_TYPE_DAVINCI_DVDP)
-+#else
-+# define machine_is_davinci_dvdp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCUNIVERSAL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCUNIVERSAL
-+# endif
-+# define machine_is_htcuniversal() (machine_arch_type == MACH_TYPE_HTCUNIVERSAL)
-+#else
-+# define machine_is_htcuniversal() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TPAD
-+# endif
-+# define machine_is_tpad() (machine_arch_type == MACH_TYPE_TPAD)
-+#else
-+# define machine_is_tpad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ROVERP3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ROVERP3
-+# endif
-+# define machine_is_roverp3() (machine_arch_type == MACH_TYPE_ROVERP3)
-+#else
-+# define machine_is_roverp3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_JORNADA928
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_JORNADA928
-+# endif
-+# define machine_is_jornada928() (machine_arch_type == MACH_TYPE_JORNADA928)
-+#else
-+# define machine_is_jornada928() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MV88FXX81
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MV88FXX81
-+# endif
-+# define machine_is_mv88fxx81() (machine_arch_type == MACH_TYPE_MV88FXX81)
-+#else
-+# define machine_is_mv88fxx81() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STMP36XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STMP36XX
-+# endif
-+# define machine_is_stmp36xx() (machine_arch_type == MACH_TYPE_STMP36XX)
-+#else
-+# define machine_is_stmp36xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SXNI79524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SXNI79524
-+# endif
-+# define machine_is_sxni79524() (machine_arch_type == MACH_TYPE_SXNI79524)
-+#else
-+# define machine_is_sxni79524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AMS_DELTA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AMS_DELTA
-+# endif
-+# define machine_is_ams_delta() (machine_arch_type == MACH_TYPE_AMS_DELTA)
-+#else
-+# define machine_is_ams_delta() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_URANIUM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_URANIUM
-+# endif
-+# define machine_is_uranium() (machine_arch_type == MACH_TYPE_URANIUM)
-+#else
-+# define machine_is_uranium() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UCON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UCON
-+# endif
-+# define machine_is_ucon() (machine_arch_type == MACH_TYPE_UCON)
-+#else
-+# define machine_is_ucon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NAS100D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NAS100D
-+# endif
-+# define machine_is_nas100d() (machine_arch_type == MACH_TYPE_NAS100D)
-+#else
-+# define machine_is_nas100d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_L083_1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_L083_1000
-+# endif
-+# define machine_is_l083() (machine_arch_type == MACH_TYPE_L083_1000)
-+#else
-+# define machine_is_l083() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZX
-+# endif
-+# define machine_is_ezx() (machine_arch_type == MACH_TYPE_EZX)
-+#else
-+# define machine_is_ezx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX5220
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX5220
-+# endif
-+# define machine_is_pnx5220() (machine_arch_type == MACH_TYPE_PNX5220)
-+#else
-+# define machine_is_pnx5220() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BUTTE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BUTTE
-+# endif
-+# define machine_is_butte() (machine_arch_type == MACH_TYPE_BUTTE)
-+#else
-+# define machine_is_butte() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SRM2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SRM2
-+# endif
-+# define machine_is_srm2() (machine_arch_type == MACH_TYPE_SRM2)
-+#else
-+# define machine_is_srm2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DSBR
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DSBR
-+# endif
-+# define machine_is_dsbr() (machine_arch_type == MACH_TYPE_DSBR)
-+#else
-+# define machine_is_dsbr() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CRYSTALBALL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CRYSTALBALL
-+# endif
-+# define machine_is_crystalball() (machine_arch_type == MACH_TYPE_CRYSTALBALL)
-+#else
-+# define machine_is_crystalball() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TINYPXA27X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TINYPXA27X
-+# endif
-+# define machine_is_tinypxa27x() (machine_arch_type == MACH_TYPE_TINYPXA27X)
-+#else
-+# define machine_is_tinypxa27x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HERBIE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HERBIE
-+# endif
-+# define machine_is_herbie() (machine_arch_type == MACH_TYPE_HERBIE)
-+#else
-+# define machine_is_herbie() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAGICIAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAGICIAN
-+# endif
-+# define machine_is_magician() (machine_arch_type == MACH_TYPE_MAGICIAN)
-+#else
-+# define machine_is_magician() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CM4002
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CM4002
-+# endif
-+# define machine_is_cm4002() (machine_arch_type == MACH_TYPE_CM4002)
-+#else
-+# define machine_is_cm4002() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_B4
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_B4
-+# endif
-+# define machine_is_b4() (machine_arch_type == MACH_TYPE_B4)
-+#else
-+# define machine_is_b4() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAUI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAUI
-+# endif
-+# define machine_is_maui() (machine_arch_type == MACH_TYPE_MAUI)
-+#else
-+# define machine_is_maui() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CYBERTRACKER_G
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CYBERTRACKER_G
-+# endif
-+# define machine_is_cybertracker_g() (machine_arch_type == MACH_TYPE_CYBERTRACKER_G)
-+#else
-+# define machine_is_cybertracker_g() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXDKN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXDKN
-+# endif
-+# define machine_is_nxdkn() (machine_arch_type == MACH_TYPE_NXDKN)
-+#else
-+# define machine_is_nxdkn() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MIO8390
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MIO8390
-+# endif
-+# define machine_is_mio8390() (machine_arch_type == MACH_TYPE_MIO8390)
-+#else
-+# define machine_is_mio8390() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMI_BOARD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMI_BOARD
-+# endif
-+# define machine_is_omi_board() (machine_arch_type == MACH_TYPE_OMI_BOARD)
-+#else
-+# define machine_is_omi_board() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX21CIV
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX21CIV
-+# endif
-+# define machine_is_mx21civ() (machine_arch_type == MACH_TYPE_MX21CIV)
-+#else
-+# define machine_is_mx21civ() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAHI_CDAC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAHI_CDAC
-+# endif
-+# define machine_is_mahi_cdac() (machine_arch_type == MACH_TYPE_MAHI_CDAC)
-+#else
-+# define machine_is_mahi_cdac() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTX
-+# endif
-+# define machine_is_xscale_palmtx() (machine_arch_type == MACH_TYPE_XSCALE_PALMTX)
-+#else
-+# define machine_is_xscale_palmtx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C2413
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C2413
-+# endif
-+# define machine_is_s3c2413() (machine_arch_type == MACH_TYPE_S3C2413)
-+#else
-+# define machine_is_s3c2413() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAMSYS_EP0
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAMSYS_EP0
-+# endif
-+# define machine_is_samsys_ep0() (machine_arch_type == MACH_TYPE_SAMSYS_EP0)
-+#else
-+# define machine_is_samsys_ep0() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WG302V1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WG302V1
-+# endif
-+# define machine_is_wg302v1() (machine_arch_type == MACH_TYPE_WG302V1)
-+#else
-+# define machine_is_wg302v1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WG302V2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WG302V2
-+# endif
-+# define machine_is_wg302v2() (machine_arch_type == MACH_TYPE_WG302V2)
-+#else
-+# define machine_is_wg302v2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EB42X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EB42X
-+# endif
-+# define machine_is_eb42x() (machine_arch_type == MACH_TYPE_EB42X)
-+#else
-+# define machine_is_eb42x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ331ES
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ331ES
-+# endif
-+# define machine_is_iq331es() (machine_arch_type == MACH_TYPE_IQ331ES)
-+#else
-+# define machine_is_iq331es() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COSYDSP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COSYDSP
-+# endif
-+# define machine_is_cosydsp() (machine_arch_type == MACH_TYPE_COSYDSP)
-+#else
-+# define machine_is_cosydsp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UPLAT7D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UPLAT7D
-+# endif
-+# define machine_is_uplat7d_proto() (machine_arch_type == MACH_TYPE_UPLAT7D)
-+#else
-+# define machine_is_uplat7d_proto() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PTDAVINCI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PTDAVINCI
-+# endif
-+# define machine_is_ptdavinci() (machine_arch_type == MACH_TYPE_PTDAVINCI)
-+#else
-+# define machine_is_ptdavinci() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MBUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MBUS
-+# endif
-+# define machine_is_mbus() (machine_arch_type == MACH_TYPE_MBUS)
-+#else
-+# define machine_is_mbus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NADIA2VB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NADIA2VB
-+# endif
-+# define machine_is_nadia2vb() (machine_arch_type == MACH_TYPE_NADIA2VB)
-+#else
-+# define machine_is_nadia2vb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_R1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_R1000
-+# endif
-+# define machine_is_r1000() (machine_arch_type == MACH_TYPE_R1000)
-+#else
-+# define machine_is_r1000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HW90250
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HW90250
-+# endif
-+# define machine_is_hw90250() (machine_arch_type == MACH_TYPE_HW90250)
-+#else
-+# define machine_is_hw90250() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_2430SDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_2430SDP
-+# endif
-+# define machine_is_omap_2430sdp() (machine_arch_type == MACH_TYPE_OMAP_2430SDP)
-+#else
-+# define machine_is_omap_2430sdp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DAVINCI_EVM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DAVINCI_EVM
-+# endif
-+# define machine_is_davinci_evm() (machine_arch_type == MACH_TYPE_DAVINCI_EVM)
-+#else
-+# define machine_is_davinci_evm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_TORNADO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_TORNADO
-+# endif
-+# define machine_is_omap_tornado() (machine_arch_type == MACH_TYPE_OMAP_TORNADO)
-+#else
-+# define machine_is_omap_tornado() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OLOCREEK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OLOCREEK
-+# endif
-+# define machine_is_olocreek() (machine_arch_type == MACH_TYPE_OLOCREEK)
-+#else
-+# define machine_is_olocreek() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PALMZ72
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PALMZ72
-+# endif
-+# define machine_is_palmz72() (machine_arch_type == MACH_TYPE_PALMZ72)
-+#else
-+# define machine_is_palmz72() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXDB500
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXDB500
-+# endif
-+# define machine_is_nxdb500() (machine_arch_type == MACH_TYPE_NXDB500)
-+#else
-+# define machine_is_nxdb500() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_APF9328
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_APF9328
-+# endif
-+# define machine_is_apf9328() (machine_arch_type == MACH_TYPE_APF9328)
-+#else
-+# define machine_is_apf9328() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_WIPOQ
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_WIPOQ
-+# endif
-+# define machine_is_omap_wipoq() (machine_arch_type == MACH_TYPE_OMAP_WIPOQ)
-+#else
-+# define machine_is_omap_wipoq() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_TWIP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_TWIP
-+# endif
-+# define machine_is_omap_twip() (machine_arch_type == MACH_TYPE_OMAP_TWIP)
-+#else
-+# define machine_is_omap_twip() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTREO650
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTREO650
-+# endif
-+# define machine_is_xscale_treo650() (machine_arch_type == MACH_TYPE_XSCALE_PALMTREO650)
-+#else
-+# define machine_is_xscale_treo650() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ACUMEN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ACUMEN
-+# endif
-+# define machine_is_acumen() (machine_arch_type == MACH_TYPE_ACUMEN)
-+#else
-+# define machine_is_acumen() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XP100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XP100
-+# endif
-+# define machine_is_xp100() (machine_arch_type == MACH_TYPE_XP100)
-+#else
-+# define machine_is_xp100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FS2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FS2410
-+# endif
-+# define machine_is_fs2410() (machine_arch_type == MACH_TYPE_FS2410)
-+#else
-+# define machine_is_fs2410() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA270_CERF
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA270_CERF
-+# endif
-+# define machine_is_pxa270_cerf() (machine_arch_type == MACH_TYPE_PXA270_CERF)
-+#else
-+# define machine_is_pxa270_cerf() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SQ2FTLPALM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SQ2FTLPALM
-+# endif
-+# define machine_is_sq2ftlpalm() (machine_arch_type == MACH_TYPE_SQ2FTLPALM)
-+#else
-+# define machine_is_sq2ftlpalm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BSEMSERVER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BSEMSERVER
-+# endif
-+# define machine_is_bsemserver() (machine_arch_type == MACH_TYPE_BSEMSERVER)
-+#else
-+# define machine_is_bsemserver() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NETCLIENT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NETCLIENT
-+# endif
-+# define machine_is_netclient() (machine_arch_type == MACH_TYPE_NETCLIENT)
-+#else
-+# define machine_is_netclient() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTT5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTT5
-+# endif
-+# define machine_is_xscale_palmtt5() (machine_arch_type == MACH_TYPE_XSCALE_PALMTT5)
-+#else
-+# define machine_is_xscale_palmtt5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTC
-+# endif
-+# define machine_is_xscale_palmtc() (machine_arch_type == MACH_TYPE_OMAP_PALMTC)
-+#else
-+# define machine_is_xscale_palmtc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_APOLLON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_APOLLON
-+# endif
-+# define machine_is_omap_apollon() (machine_arch_type == MACH_TYPE_OMAP_APOLLON)
-+#else
-+# define machine_is_omap_apollon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARGONLVEVB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARGONLVEVB
-+# endif
-+# define machine_is_mxc30030evb() (machine_arch_type == MACH_TYPE_ARGONLVEVB)
-+#else
-+# define machine_is_mxc30030evb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REA_2D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REA_2D
-+# endif
-+# define machine_is_rea_2d() (machine_arch_type == MACH_TYPE_REA_2D)
-+#else
-+# define machine_is_rea_2d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TI3E524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TI3E524
-+# endif
-+# define machine_is_eti3e524() (machine_arch_type == MACH_TYPE_TI3E524)
-+#else
-+# define machine_is_eti3e524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ATEB9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ATEB9200
-+# endif
-+# define machine_is_ateb9200() (machine_arch_type == MACH_TYPE_ATEB9200)
-+#else
-+# define machine_is_ateb9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AUCKLAND
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AUCKLAND
-+# endif
-+# define machine_is_auckland() (machine_arch_type == MACH_TYPE_AUCKLAND)
-+#else
-+# define machine_is_auckland() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AK3320M
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AK3320M
-+# endif
-+# define machine_is_ak3220m() (machine_arch_type == MACH_TYPE_AK3320M)
-+#else
-+# define machine_is_ak3220m() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DURAMAX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DURAMAX
-+# endif
-+# define machine_is_duramax() (machine_arch_type == MACH_TYPE_DURAMAX)
-+#else
-+# define machine_is_duramax() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_N35
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_N35
-+# endif
-+# define machine_is_n35() (machine_arch_type == MACH_TYPE_N35)
-+#else
-+# define machine_is_n35() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PRONGHORN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PRONGHORN
-+# endif
-+# define machine_is_pronghorn() (machine_arch_type == MACH_TYPE_PRONGHORN)
-+#else
-+# define machine_is_pronghorn() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FUNDY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FUNDY
-+# endif
-+# define machine_is_fundy() (machine_arch_type == MACH_TYPE_FUNDY)
-+#else
-+# define machine_is_fundy() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LOGICPD_PXA270
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LOGICPD_PXA270
-+# endif
-+# define machine_is_logicpd_pxa270() (machine_arch_type == MACH_TYPE_LOGICPD_PXA270)
-+#else
-+# define machine_is_logicpd_pxa270() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CPU777
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CPU777
-+# endif
-+# define machine_is_cpu777() (machine_arch_type == MACH_TYPE_CPU777)
-+#else
-+# define machine_is_cpu777() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SIMICON9201
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SIMICON9201
-+# endif
-+# define machine_is_simicon9201() (machine_arch_type == MACH_TYPE_SIMICON9201)
-+#else
-+# define machine_is_simicon9201() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LEAP2_HPM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LEAP2_HPM
-+# endif
-+# define machine_is_leap2_hpm() (machine_arch_type == MACH_TYPE_LEAP2_HPM)
-+#else
-+# define machine_is_leap2_hpm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CM922TXA10
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CM922TXA10
-+# endif
-+# define machine_is_cm922txa10() (machine_arch_type == MACH_TYPE_CM922TXA10)
-+#else
-+# define machine_is_cm922txa10() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA
-+# endif
-+# define machine_is_sandgate() (machine_arch_type == MACH_TYPE_PXA)
-+#else
-+# define machine_is_sandgate() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2
-+# endif
-+# define machine_is_sandgate2() (machine_arch_type == MACH_TYPE_SANDGATE2)
-+#else
-+# define machine_is_sandgate2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2G
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2G
-+# endif
-+# define machine_is_sandgate2g() (machine_arch_type == MACH_TYPE_SANDGATE2G)
-+#else
-+# define machine_is_sandgate2g() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2P
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2P
-+# endif
-+# define machine_is_sandgate2p() (machine_arch_type == MACH_TYPE_SANDGATE2P)
-+#else
-+# define machine_is_sandgate2p() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FRED_JACK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FRED_JACK
-+# endif
-+# define machine_is_fred_jack() (machine_arch_type == MACH_TYPE_FRED_JACK)
-+#else
-+# define machine_is_fred_jack() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TTG_COLOR1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TTG_COLOR1
-+# endif
-+# define machine_is_ttg_color1() (machine_arch_type == MACH_TYPE_TTG_COLOR1)
-+#else
-+# define machine_is_ttg_color1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXEB500HMI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXEB500HMI
-+# endif
-+# define machine_is_nxeb500hmi() (machine_arch_type == MACH_TYPE_NXEB500HMI)
-+#else
-+# define machine_is_nxeb500hmi() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NETDCU8
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NETDCU8
-+# endif
-+# define machine_is_netdcu8() (machine_arch_type == MACH_TYPE_NETDCU8)
-+#else
-+# define machine_is_netdcu8() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ML675050_CPU_BOA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ML675050_CPU_BOA
-+# endif
-+# define machine_is_ml675050_cpu_boa() (machine_arch_type == MACH_TYPE_ML675050_CPU_BOA)
-+#else
-+# define machine_is_ml675050_cpu_boa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NG_FVX538
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NG_FVX538
-+# endif
-+# define machine_is_ng_fvx538() (machine_arch_type == MACH_TYPE_NG_FVX538)
-+#else
-+# define machine_is_ng_fvx538() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NG_FVS338
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NG_FVS338
-+# endif
-+# define machine_is_ng_fvs338() (machine_arch_type == MACH_TYPE_NG_FVS338)
-+#else
-+# define machine_is_ng_fvs338() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX4103
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX4103
-+# endif
-+# define machine_is_pnx4103() (machine_arch_type == MACH_TYPE_PNX4103)
-+#else
-+# define machine_is_pnx4103() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HESDB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HESDB
-+# endif
-+# define machine_is_hesdb() (machine_arch_type == MACH_TYPE_HESDB)
-+#else
-+# define machine_is_hesdb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSILO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSILO
-+# endif
-+# define machine_is_xsilo() (machine_arch_type == MACH_TYPE_XSILO)
-+#else
-+# define machine_is_xsilo() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ESPRESSO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ESPRESSO
-+# endif
-+# define machine_is_espresso() (machine_arch_type == MACH_TYPE_ESPRESSO)
-+#else
-+# define machine_is_espresso() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMLC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMLC
-+# endif
-+# define machine_is_emlc() (machine_arch_type == MACH_TYPE_EMLC)
-+#else
-+# define machine_is_emlc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SISTERON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SISTERON
-+# endif
-+# define machine_is_sisteron() (machine_arch_type == MACH_TYPE_SISTERON)
-+#else
-+# define machine_is_sisteron() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RX1950
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RX1950
-+# endif
-+# define machine_is_rx1950() (machine_arch_type == MACH_TYPE_RX1950)
-+#else
-+# define machine_is_rx1950() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TSC_VENUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TSC_VENUS
-+# endif
-+# define machine_is_tsc_venus() (machine_arch_type == MACH_TYPE_TSC_VENUS)
-+#else
-+# define machine_is_tsc_venus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS101J
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS101J
-+# endif
-+# define machine_is_ds101j() (machine_arch_type == MACH_TYPE_DS101J)
-+#else
-+# define machine_is_ds101j() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MXC30030ADS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MXC30030ADS
-+# endif
-+# define machine_is_mxc30030ads() (machine_arch_type == MACH_TYPE_MXC30030ADS)
-+#else
-+# define machine_is_mxc30030ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FUJITSU_WIMAXSOC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FUJITSU_WIMAXSOC
-+# endif
-+# define machine_is_fujitsu_wimaxsoc() (machine_arch_type == MACH_TYPE_FUJITSU_WIMAXSOC)
-+#else
-+# define machine_is_fujitsu_wimaxsoc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DUALPCMODEM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DUALPCMODEM
-+# endif
-+# define machine_is_dualpcmodem() (machine_arch_type == MACH_TYPE_DUALPCMODEM)
-+#else
-+# define machine_is_dualpcmodem() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GESBC9312
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GESBC9312
-+# endif
-+# define machine_is_gesbc9312() (machine_arch_type == MACH_TYPE_GESBC9312)
-+#else
-+# define machine_is_gesbc9312() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCAPACHE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCAPACHE
-+# endif
-+# define machine_is_htcapache() (machine_arch_type == MACH_TYPE_HTCAPACHE)
-+#else
-+# define machine_is_htcapache() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXDP435
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXDP435
-+# endif
-+# define machine_is_ixdp435() (machine_arch_type == MACH_TYPE_IXDP435)
-+#else
-+# define machine_is_ixdp435() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CATPROVT100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CATPROVT100
-+# endif
-+# define machine_is_catprovt100() (machine_arch_type == MACH_TYPE_CATPROVT100)
-+#else
-+# define machine_is_catprovt100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PICOTUX1XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PICOTUX1XX
-+# endif
-+# define machine_is_picotux1xx() (machine_arch_type == MACH_TYPE_PICOTUX1XX)
-+#else
-+# define machine_is_picotux1xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PICOTUX2XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PICOTUX2XX
-+# endif
-+# define machine_is_picotux2xx() (machine_arch_type == MACH_TYPE_PICOTUX2XX)
-+#else
-+# define machine_is_picotux2xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DSMG600
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DSMG600
-+# endif
-+# define machine_is_dsmg600() (machine_arch_type == MACH_TYPE_DSMG600)
-+#else
-+# define machine_is_dsmg600() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMPC2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMPC2
-+# endif
-+# define machine_is_empc2() (machine_arch_type == MACH_TYPE_EMPC2)
-+#else
-+# define machine_is_empc2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VENTURA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VENTURA
-+# endif
-+# define machine_is_ventura() (machine_arch_type == MACH_TYPE_VENTURA)
-+#else
-+# define machine_is_ventura() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PHIDGET_SBC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PHIDGET_SBC
-+# endif
-+# define machine_is_phidget_sbc() (machine_arch_type == MACH_TYPE_PHIDGET_SBC)
-+#else
-+# define machine_is_phidget_sbc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IJ3K
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IJ3K
-+# endif
-+# define machine_is_ij3k() (machine_arch_type == MACH_TYPE_IJ3K)
-+#else
-+# define machine_is_ij3k() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PISGAH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PISGAH
-+# endif
-+# define machine_is_pisgah() (machine_arch_type == MACH_TYPE_PISGAH)
-+#else
-+# define machine_is_pisgah() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_FSAMPLE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_FSAMPLE
-+# endif
-+# define machine_is_omap_fsample() (machine_arch_type == MACH_TYPE_OMAP_FSAMPLE)
-+#else
-+# define machine_is_omap_fsample() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SG720
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SG720
-+# endif
-+# define machine_is_sg720() (machine_arch_type == MACH_TYPE_SG720)
-+#else
-+# define machine_is_sg720() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REDFOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REDFOX
-+# endif
-+# define machine_is_redfox() (machine_arch_type == MACH_TYPE_REDFOX)
-+#else
-+# define machine_is_redfox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MYSH_EP9315_1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MYSH_EP9315_1
-+# endif
-+# define machine_is_mysh_ep9315_1() (machine_arch_type == MACH_TYPE_MYSH_EP9315_1)
-+#else
-+# define machine_is_mysh_ep9315_1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TPF106
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TPF106
-+# endif
-+# define machine_is_tpf106() (machine_arch_type == MACH_TYPE_TPF106)
-+#else
-+# define machine_is_tpf106() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91RM9200KG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91RM9200KG
-+# endif
-+# define machine_is_at91rm9200kg() (machine_arch_type == MACH_TYPE_AT91RM9200KG)
-+#else
-+# define machine_is_at91rm9200kg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SLEDB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SLEDB
-+# endif
-+# define machine_is_racemt2() (machine_arch_type == MACH_TYPE_SLEDB)
-+#else
-+# define machine_is_racemt2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ONTRACK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ONTRACK
-+# endif
-+# define machine_is_ontrack() (machine_arch_type == MACH_TYPE_ONTRACK)
-+#else
-+# define machine_is_ontrack() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PM1200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PM1200
-+# endif
-+# define machine_is_pm1200() (machine_arch_type == MACH_TYPE_PM1200)
-+#else
-+# define machine_is_pm1200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ESS24XXX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ESS24XXX
-+# endif
-+# define machine_is_ess24562() (machine_arch_type == MACH_TYPE_ESS24XXX)
-+#else
-+# define machine_is_ess24562() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COREMP7
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COREMP7
-+# endif
-+# define machine_is_coremp7() (machine_arch_type == MACH_TYPE_COREMP7)
-+#else
-+# define machine_is_coremp7() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NEXCODER_6446
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NEXCODER_6446
-+# endif
-+# define machine_is_nexcoder_6446() (machine_arch_type == MACH_TYPE_NEXCODER_6446)
-+#else
-+# define machine_is_nexcoder_6446() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STVC8380
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STVC8380
-+# endif
-+# define machine_is_stvc8380() (machine_arch_type == MACH_TYPE_STVC8380)
-+#else
-+# define machine_is_stvc8380() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TEKLYNX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TEKLYNX
-+# endif
-+# define machine_is_teklynx() (machine_arch_type == MACH_TYPE_TEKLYNX)
-+#else
-+# define machine_is_teklynx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CARBONADO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CARBONADO
-+# endif
-+# define machine_is_carbonado() (machine_arch_type == MACH_TYPE_CARBONADO)
-+#else
-+# define machine_is_carbonado() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SYSMOS_MP730
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SYSMOS_MP730
-+# endif
-+# define machine_is_sysmos_mp730() (machine_arch_type == MACH_TYPE_SYSMOS_MP730)
-+#else
-+# define machine_is_sysmos_mp730() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SNAPPER_CL15
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SNAPPER_CL15
-+# endif
-+# define machine_is_snapper_cl15() (machine_arch_type == MACH_TYPE_SNAPPER_CL15)
-+#else
-+# define machine_is_snapper_cl15() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PGIGIM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PGIGIM
-+# endif
-+# define machine_is_pgigim() (machine_arch_type == MACH_TYPE_PGIGIM)
-+#else
-+# define machine_is_pgigim() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PTX9160P2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PTX9160P2
-+# endif
-+# define machine_is_ptx9160p2() (machine_arch_type == MACH_TYPE_PTX9160P2)
-+#else
-+# define machine_is_ptx9160p2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DCORE1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DCORE1
-+# endif
-+# define machine_is_dcore1() (machine_arch_type == MACH_TYPE_DCORE1)
-+#else
-+# define machine_is_dcore1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VICTORPXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VICTORPXA
-+# endif
-+# define machine_is_victorpxa() (machine_arch_type == MACH_TYPE_VICTORPXA)
-+#else
-+# define machine_is_victorpxa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX2DTB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX2DTB
-+# endif
-+# define machine_is_mx2dtb() (machine_arch_type == MACH_TYPE_MX2DTB)
-+#else
-+# define machine_is_mx2dtb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA_IREX_ER0100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA_IREX_ER0100
-+# endif
-+# define machine_is_pxa_irex_er0100() (machine_arch_type == MACH_TYPE_PXA_IREX_ER0100)
-+#else
-+# define machine_is_pxa_irex_er0100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMZ71
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMZ71
-+# endif
-+# define machine_is_omap_palmz71() (machine_arch_type == MACH_TYPE_OMAP_PALMZ71)
-+#else
-+# define machine_is_omap_palmz71() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BARTEC_DEG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BARTEC_DEG
-+# endif
-+# define machine_is_bartec_deg() (machine_arch_type == MACH_TYPE_BARTEC_DEG)
-+#else
-+# define machine_is_bartec_deg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HW50251
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HW50251
-+# endif
-+# define machine_is_hw50251() (machine_arch_type == MACH_TYPE_HW50251)
-+#else
-+# define machine_is_hw50251() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IBOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IBOX
-+# endif
-+# define machine_is_ibox() (machine_arch_type == MACH_TYPE_IBOX)
-+#else
-+# define machine_is_ibox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ATLASLH7A404
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ATLASLH7A404
-+# endif
-+# define machine_is_atlaslh7a404() (machine_arch_type == MACH_TYPE_ATLASLH7A404)
-+#else
-+# define machine_is_atlaslh7a404() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PT2026
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PT2026
-+# endif
-+# define machine_is_pt2026() (machine_arch_type == MACH_TYPE_PT2026)
-+#else
-+# define machine_is_pt2026() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCALPINE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCALPINE
-+# endif
-+# define machine_is_htcalpine() (machine_arch_type == MACH_TYPE_HTCALPINE)
-+#else
-+# define machine_is_htcalpine() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BARTEC_VTU
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BARTEC_VTU
-+# endif
-+# define machine_is_bartec_vtu() (machine_arch_type == MACH_TYPE_BARTEC_VTU)
-+#else
-+# define machine_is_bartec_vtu() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VCOREII
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VCOREII
-+# endif
-+# define machine_is_vcoreii() (machine_arch_type == MACH_TYPE_VCOREII)
-+#else
-+# define machine_is_vcoreii() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PDNB3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PDNB3
-+# endif
-+# define machine_is_pdnb3() (machine_arch_type == MACH_TYPE_PDNB3)
-+#else
-+# define machine_is_pdnb3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCBEETLES
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCBEETLES
-+# endif
-+# define machine_is_htcbeetles() (machine_arch_type == MACH_TYPE_HTCBEETLES)
-+#else
-+# define machine_is_htcbeetles() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C6400
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C6400
-+# endif
-+# define machine_is_s3c6400() (machine_arch_type == MACH_TYPE_S3C6400)
-+#else
-+# define machine_is_s3c6400() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C2443
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C2443
-+# endif
-+# define machine_is_s3c2443() (machine_arch_type == MACH_TYPE_S3C2443)
-+#else
-+# define machine_is_s3c2443() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_LDK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_LDK
-+# endif
-+# define machine_is_omap_ldk() (machine_arch_type == MACH_TYPE_OMAP_LDK)
-+#else
-+# define machine_is_omap_ldk() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2460
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2460
-+# endif
-+# define machine_is_smdk2460() (machine_arch_type == MACH_TYPE_SMDK2460)
-+#else
-+# define machine_is_smdk2460() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2440
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2440
-+# endif
-+# define machine_is_smdk2440() (machine_arch_type == MACH_TYPE_SMDK2440)
-+#else
-+# define machine_is_smdk2440() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2412
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2412
-+# endif
-+# define machine_is_smdk2412() (machine_arch_type == MACH_TYPE_SMDK2412)
-+#else
-+# define machine_is_smdk2412() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WEBBOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WEBBOX
-+# endif
-+# define machine_is_webbox() (machine_arch_type == MACH_TYPE_WEBBOX)
-+#else
-+# define machine_is_webbox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CWWNDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CWWNDP
-+# endif
-+# define machine_is_cwwndp() (machine_arch_type == MACH_TYPE_CWWNDP)
-+#else
-+# define machine_is_cwwndp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DRAGON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DRAGON
-+# endif
-+# define machine_is_dragon() (machine_arch_type == MACH_TYPE_DRAGON)
-+#else
-+# define machine_is_dragon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OPENDO_CPU_BOARD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OPENDO_CPU_BOARD
-+# endif
-+# define machine_is_opendo_cpu_board() (machine_arch_type == MACH_TYPE_OPENDO_CPU_BOARD)
-+#else
-+# define machine_is_opendo_cpu_board() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CCM2200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CCM2200
-+# endif
-+# define machine_is_ccm2200() (machine_arch_type == MACH_TYPE_CCM2200)
-+#else
-+# define machine_is_ccm2200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ETWARM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ETWARM
-+# endif
-+# define machine_is_etwarm() (machine_arch_type == MACH_TYPE_ETWARM)
-+#else
-+# define machine_is_etwarm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_M93030
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_M93030
-+# endif
-+# define machine_is_m93030() (machine_arch_type == MACH_TYPE_M93030)
-+#else
-+# define machine_is_m93030() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CC7U
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CC7U
-+# endif
-+# define machine_is_cc7u() (machine_arch_type == MACH_TYPE_CC7U)
-+#else
-+# define machine_is_cc7u() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MTT_RANGER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MTT_RANGER
-+# endif
-+# define machine_is_mtt_ranger() (machine_arch_type == MACH_TYPE_MTT_RANGER)
-+#else
-+# define machine_is_mtt_ranger() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NEXUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NEXUS
-+# endif
-+# define machine_is_nexus() (machine_arch_type == MACH_TYPE_NEXUS)
-+#else
-+# define machine_is_nexus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DESMAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DESMAN
-+# endif
-+# define machine_is_desman() (machine_arch_type == MACH_TYPE_DESMAN)
-+#else
-+# define machine_is_desman() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BKDE303
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BKDE303
-+# endif
-+# define machine_is_bkde303() (machine_arch_type == MACH_TYPE_BKDE303)
-+#else
-+# define machine_is_bkde303() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2413
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2413
-+# endif
-+# define machine_is_smdk2413() (machine_arch_type == MACH_TYPE_SMDK2413)
-+#else
-+# define machine_is_smdk2413() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AML_M7200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AML_M7200
-+# endif
-+# define machine_is_aml_m7200() (machine_arch_type == MACH_TYPE_AML_M7200)
-+#else
-+# define machine_is_aml_m7200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AML_M5900
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AML_M5900
-+# endif
-+# define machine_is_aml_m5900() (machine_arch_type == MACH_TYPE_AML_M5900)
-+#else
-+# define machine_is_aml_m5900() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SG640
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SG640
-+# endif
-+# define machine_is_sg640() (machine_arch_type == MACH_TYPE_SG640)
-+#else
-+# define machine_is_sg640() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDG79524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDG79524
-+# endif
-+# define machine_is_edg79524() (machine_arch_type == MACH_TYPE_EDG79524)
-+#else
-+# define machine_is_edg79524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AI2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AI2410
-+# endif
-+# define machine_is_ai2410() (machine_arch_type == MACH_TYPE_AI2410)
-+#else
-+# define machine_is_ai2410() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXP465
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXP465
-+# endif
-+# define machine_is_ixp465() (machine_arch_type == MACH_TYPE_IXP465)
-+#else
-+# define machine_is_ixp465() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BALLOON3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BALLOON3
-+# endif
-+# define machine_is_balloon3() (machine_arch_type == MACH_TYPE_BALLOON3)
-+#else
-+# define machine_is_balloon3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_QT2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_QT2410
-+# endif
-+# define machine_is_qt2410() (machine_arch_type == MACH_TYPE_QT2410)
-+#else
-+# define machine_is_qt2410() (0)
-+#endif
-+
- /*
- * These have not yet been registered
- */
-diff --git a/include/configs/qt2410.h b/include/configs/qt2410.h
-new file mode 100644
-index 0000000..627f365
---- /dev/null
-+++ b/include/configs/qt2410.h
-@@ -0,0 +1,256 @@
-+/*
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ * Gary Jennejohn <gj@denx.de>
-+ * David Mueller <d.mueller@elsoft.ch>
-+ *
-+ * Configuation settings for the SAMSUNG SMDK2410 board.
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#ifndef __CONFIG_H
-+#define __CONFIG_H
-+
-+#if 0
-+/* If we want to start u-boot from usb bootloader in NOR flash */
-+#define CONFIG_SKIP_RELOCATE_UBOOT 1
-+#define CONFIG_SKIP_LOWLEVEL_INIT 1
-+#else
-+/* If we want to start u-boot directly from within NAND flash */
-+#define CONFIG_S3C2410_NAND_BOOT 1
-+#endif
-+
-+/*
-+ * High Level Configuration Options
-+ * (easy to change)
-+ */
-+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-+
-+/* input clock of PLL */
-+#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
-+
-+
-+#define USE_920T_MMU 1
-+#define CONFIG_USE_IRQ 1
-+//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-+
-+/*
-+ * Size of malloc() pool
-+ */
-+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-+
-+/*
-+ * Hardware drivers
-+ */
-+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
-+#define CS8900_BASE 0x19000300
-+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
-+
-+/*
-+ * select serial console configuration
-+ */
-+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
-+#define CONFIG_HWFLOW 1
-+
-+/************************************************************
-+ * RTC
-+ ************************************************************/
-+#define CONFIG_RTC_S3C24X0 1
-+
-+/* allow to overwrite serial and ethaddr */
-+#define CONFIG_ENV_OVERWRITE
-+
-+#define CONFIG_BAUDRATE 115200
-+
-+/***********************************************************
-+ * Command definition
-+ ***********************************************************/
-+#define CONFIG_COMMANDS \
-+ (CONFIG_CMD_DFL | \
-+ CFG_CMD_BSP | \
-+ CFG_CMD_CACHE | \
-+ CFG_CMD_DATE | \
-+ CFG_CMD_DHCP | \
-+ CFG_CMD_DIAG | \
-+ CFG_CMD_ELF | \
-+ CFG_CMD_EXT2 | \
-+ CFG_CMD_FAT | \
-+ CFG_CMD_HWFLOW | \
-+ /* CFG_CMD_IDE | */ \
-+ /* CFG_CMD_IRQ | */ \
-+ CFG_CMD_JFFS2 | \
-+ CFG_CMD_MMC | \
-+ CFG_CMD_NAND | \
-+ CFG_CMD_PING | \
-+ CFG_CMD_PORTIO | \
-+ CFG_CMD_REGINFO | \
-+ CFG_CMD_SAVES | \
-+ CFG_CMD_USB)
-+
-+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-+#include <cmd_confdefs.h>
-+
-+#define CONFIG_BOOTDELAY 3
-+#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
-+/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
-+#define CONFIG_NETMASK 255.255.255.0
-+#define CONFIG_IPADDR 10.0.0.110
-+#define CONFIG_SERVERIP 10.0.0.1
-+/*#define CONFIG_BOOTFILE "elinos-lart" */
-+#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
-+
-+#define CONFIG_DOS_PARTITION 1
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-+/* what's this ? it's not used anywhere */
-+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-+#endif
-+
-+/*
-+ * Miscellaneous configurable options
-+ */
-+#define CFG_LONGHELP /* undef to save memory */
-+#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
-+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-+#define CFG_MAXARGS 16 /* max number of command args */
-+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-+
-+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-+
-+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-+
-+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-+
-+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-+/* it to wrap 100 times (total 1562500) to get 1 sec. */
-+#define CFG_HZ 1562500
-+
-+/* valid baudrates */
-+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-+
-+/*-----------------------------------------------------------------------
-+ * Stack sizes
-+ *
-+ * The stack sizes are set up in start.S using the settings below
-+ */
-+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-+#ifdef CONFIG_USE_IRQ
-+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-+#endif
-+
-+/* IDE/ATA config */
-+
-+#if 0
-+#define CFG_IDE_MAXBUS 1
-+#define CFG_IDE_MAXDEVICE 2
-+#define CFG_IDE_PREINIT 0
-+
-+#define CFG_ATA_BASE_ADDR
-+#endif
-+
-+#define CONFIG_USB_OHCI 1
-+
-+/*-----------------------------------------------------------------------
-+ * Physical Memory Map
-+ */
-+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-+
-+#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
-+
-+#define CFG_FLASH_BASE PHYS_FLASH_1
-+
-+/*-----------------------------------------------------------------------
-+ * FLASH and environment organization
-+ */
-+
-+#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
-+#if 0
-+#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
-+#endif
-+
-+#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
-+#ifdef CONFIG_AMD_LV800
-+#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
-+#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
-+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
-+#endif
-+#ifdef CONFIG_AMD_LV400
-+#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
-+#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
-+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
-+#endif
-+
-+/* timeout values are in ticks */
-+#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
-+#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
-+
-+#define CFG_ENV_IS_IN_NAND 1
-+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-+
-+#define NAND_MAX_CHIPS 1
-+#define CFG_NAND_BASE 0x4e000000
-+#define CFG_MAX_NAND_DEVICE 1
-+
-+#define CONFIG_MMC 1
-+#define CFG_MMC_BASE 0xff000000
-+
-+#define CONFIG_EXT2 1
-+
-+/* FAT driver in u-boot is broken currently */
-+#define CONFIG_FAT 1
-+#define CONFIG_SUPPORT_VFAT
-+
-+/* ATAG configuration */
-+#define CONFIG_INITRD_TAG 1
-+#define CONFIG_SETUP_MEMORY_TAGS 1
-+#define CONFIG_CMDLINE_TAG 1
-+#if 0
-+#define CONFIG_SERIAL_TAG 1
-+#define CONFIG_REVISION_TAG 1
-+#endif
-+
-+
-+#if 0
-+#define CONFIG_VIDEO
-+#define CONFIG_VIDEO_S3C2410
-+#define CONFIG_CFB_CONSOLE
-+#define CONFIG_VIDEO_LOGO
-+#define CONFIG_VGA_AS_SINGLE_DEVICE
-+
-+#define VIDEO_KBD_INIT_FCT 0
-+#define VIDEO_TSTC_FCT serial_tstc
-+#define VIDEO_GETC_FCT serial_getc
-+
-+#define LCD_VIDEO_ADDR 0x33d00000
-+#endif
-+
-+#endif /* __CONFIG_H */
-diff --git a/include/s3c2410.h b/include/s3c2410.h
-index 86495f6..913521d 100644
---- a/include/s3c2410.h
-+++ b/include/s3c2410.h
-@@ -38,12 +38,6 @@ #define S3C24X0_SPI_CHANNELS 2
- #define S3C2410_ECCSIZE 512
- #define S3C2410_ECCBYTES 3
-
--typedef enum {
-- S3C24X0_UART0,
-- S3C24X0_UART1,
-- S3C24X0_UART2
--} S3C24X0_UARTS_NR;
--
- /* S3C2410 device base addresses */
- #define S3C24X0_MEMCTL_BASE 0x48000000
- #define S3C24X0_USB_HOST_BASE 0x49000000
-@@ -65,9 +59,23 @@ #define S3C24X0_SPI_BASE 0x59000000
- #define S3C2410_SDI_BASE 0x5A000000
-
-
-+#define oNFCONF 0x00
-+#define oNFCMD 0x04
-+#define oNFADDR 0x08
-+#define oNFDATA 0x0C
-+#define oNFSTAT 0x10
-+#define oNFECC 0x14
-+
-+#ifndef __ASSEMBLER__
-+
- /* include common stuff */
- #include <s3c24x0.h>
-
-+typedef enum {
-+ S3C24X0_UART0,
-+ S3C24X0_UART1,
-+ S3C24X0_UART2
-+} S3C24X0_UARTS_NR;
-
- static inline S3C24X0_MEMCTL * const S3C24X0_GetBase_MEMCTL(void)
- {
-@@ -142,6 +150,7 @@ static inline S3C2410_SDI * const S3C241
- return (S3C2410_SDI * const)S3C2410_SDI_BASE;
- }
-
-+#endif
-
- /* ISR */
- #define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
-diff --git a/include/s3c24x0.h b/include/s3c24x0.h
-index 71f35a5..557b91f 100644
---- a/include/s3c24x0.h
-+++ b/include/s3c24x0.h
-@@ -637,13 +637,7 @@ typedef struct {
- S3C24X0_REG32 SDIDCNT;
- S3C24X0_REG32 SDIDSTA;
- S3C24X0_REG32 SDIFSTA;
--#ifdef __BIG_ENDIAN
-- S3C24X0_REG8 res[3];
-- S3C24X0_REG8 SDIDAT;
--#else
-- S3C24X0_REG8 SDIDAT;
-- S3C24X0_REG8 res[3];
--#endif
-+ S3C24X0_REG32 SDIDAT;
- S3C24X0_REG32 SDIIMSK;
- } /*__attribute__((__packed__))*/ S3C2410_SDI;
-
-@@ -1123,11 +1117,7 @@ #define rSDIDatCon (*(volatile unsigned
- #define rSDIDatCnt (*(volatile unsigned *)0x5A000030)
- #define rSDIDatSta (*(volatile unsigned *)0x5A000034)
- #define rSDIFSTA (*(volatile unsigned *)0x5A000038)
--#ifdef __BIG_ENDIAN
--#define rSDIDAT (*(volatile unsigned char *)0x5A00003F)
--#else
--#define rSDIDAT (*(volatile unsigned char *)0x5A00003C)
--#endif
-+#define rSDIDAT (*(volatile unsigned *)0x5A00003C)
- #define rSDIIntMsk (*(volatile unsigned *)0x5A000040)
-
- #endif
diff --git a/packages/uboot/files/u-boot-20060807.tar.bz2 b/packages/uboot/files/u-boot-20060807.tar.bz2
deleted file mode 100644
index 7b35fcfdd1..0000000000
--- a/packages/uboot/files/u-boot-20060807.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/uboot/files/u-boot-20060907-gta01.patch b/packages/uboot/files/u-boot-20060907-gta01.patch
deleted file mode 100644
index 6aa54fa208..0000000000
--- a/packages/uboot/files/u-boot-20060907-gta01.patch
+++ /dev/null
@@ -1,901 +0,0 @@
-diff --exclude .git -Nru u-boot/Makefile u-boot.new/Makefile
---- u-boot/Makefile 2006-08-11 23:19:07.000000000 +0200
-+++ u-boot.new/Makefile 2006-10-26 13:02:41.000000000 +0200
-@@ -1641,6 +1641,9 @@
- qt2410_config : unconfig
- @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
-
-+gta01_config : unconfig
-+ @./mkconfig $(@:_config=) arm arm920t gta01 NULL s3c24x0
-+
- scb9328_config : unconfig
- @./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx
-
-diff --exclude .git -Nru u-boot/board/gta01/Makefile u-boot.new/board/gta01/Makefile
---- u-boot/board/gta01/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/gta01/Makefile 2006-10-25 17:21:44.000000000 +0200
-@@ -0,0 +1,47 @@
-+#
-+# (C) Copyright 2000, 2001, 2002
-+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+#
-+# See file CREDITS for list of people who contributed to this
-+# project.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+
-+include $(TOPDIR)/config.mk
-+
-+LIB = lib$(BOARD).a
-+
-+OBJS := gta01.o
-+SOBJS := lowlevel_init.o
-+
-+$(LIB): $(OBJS) $(SOBJS)
-+ $(AR) crv $@ $(OBJS) $(SOBJS)
-+
-+clean:
-+ rm -f $(SOBJS) $(OBJS)
-+
-+distclean: clean
-+ rm -f $(LIB) core *.bak .depend
-+
-+#########################################################################
-+
-+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
-+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
-+
-+-include .depend
-+
-+#########################################################################
-diff --exclude .git -Nru u-boot/board/gta01/config.mk u-boot.new/board/gta01/config.mk
---- u-boot/board/gta01/config.mk 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/gta01/config.mk 2006-10-25 17:22:09.000000000 +0200
-@@ -0,0 +1,25 @@
-+#
-+# (C) Copyright 2002
-+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+#
-+# FIC GTA01 board with S3C2410X (ARM920T) cpu
-+#
-+# see http://www.samsung.com/ for more information on SAMSUNG
-+#
-+
-+#
-+# GTA01 has 1 bank of 64 MB DRAM
-+#
-+# 3000'0000 to 3400'0000
-+#
-+# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
-+# optionally with a ramdisk at 3080'0000
-+#
-+# we load ourself to 33F8'0000
-+#
-+# download area is 3300'0000
-+#
-+
-+
-+TEXT_BASE = 0x33F80000
-diff --exclude .git -Nru u-boot/board/gta01/gta01.c u-boot.new/board/gta01/gta01.c
---- u-boot/board/gta01/gta01.c 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/gta01/gta01.c 2006-10-25 17:27:50.000000000 +0200
-@@ -0,0 +1,133 @@
-+/*
-+ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * based on existing S3C2410 startup code in u-boot:
-+ *
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ *
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+#include <s3c2410.h>
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#if 1
-+//#define M_MDIV 0xA1 /* Fout = 202.8MHz */
-+//#define M_PDIV 0x3
-+//#define M_SDIV 0x1
-+#define M_MDIV 0x90 /* Fout = 202.8MHz */
-+#define M_PDIV 0x7
-+#define M_SDIV 0x0
-+#else
-+#define M_MDIV 0x5c /* Fout = 150.0MHz */
-+#define M_PDIV 0x4
-+#define M_SDIV 0x0
-+#endif
-+
-+#if 1
-+#define U_M_MDIV 0x78
-+#define U_M_PDIV 0x2
-+#define U_M_SDIV 0x3
-+#else
-+#define U_M_MDIV 0x48
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x2
-+#endif
-+
-+static inline void delay (unsigned long loops)
-+{
-+ __asm__ volatile ("1:\n"
-+ "subs %0, %1, #1\n"
-+ "bne 1b":"=r" (loops):"0" (loops));
-+}
-+
-+/*
-+ * Miscellaneous platform dependent initialisations
-+ */
-+
-+int board_init (void)
-+{
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
-+
-+ /* to reduce PLL lock time, adjust the LOCKTIME register */
-+ clk_power->LOCKTIME = 0xFFFFFF;
-+
-+ /* configure MPLL */
-+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (4000);
-+
-+ /* configure UPLL */
-+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (8000);
-+
-+ /* set up the I/O ports */
-+ gpio->GPACON = 0x007FFFFF;
-+
-+ gpio->GPBCON = 0x00005056;
-+ gpio->GPBUP = 0x000007FF;
-+
-+ gpio->GPCCON = 0xAAAA12A8;
-+ gpio->GPCUP = 0x0000FFFF;
-+
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+
-+ gpio->GPECON = 0xAAAAAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+
-+ gpio->GPFCON = 0x00002AA9;
-+ gpio->GPFUP = 0x000000FF;
-+
-+ gpio->GPGCON = 0xA846F0C0;
-+ gpio->GPGUP = 0x0000AFEF;
-+
-+ gpio->GPHCON = 0x0008FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+ /* arch number of SMDK2410-Board */
-+ gd->bd->bi_arch_number = MACH_TYPE_GTA01;
-+
-+ /* adress of boot parameters */
-+ gd->bd->bi_boot_params = 0x30000100;
-+
-+ icache_enable();
-+ dcache_enable();
-+
-+ return 0;
-+}
-+
-+int dram_init (void)
-+{
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+ return 0;
-+}
-diff --exclude .git -Nru u-boot/board/gta01/lowlevel_init.S u-boot.new/board/gta01/lowlevel_init.S
---- u-boot/board/gta01/lowlevel_init.S 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/gta01/lowlevel_init.S 2006-10-25 17:20:42.000000000 +0200
-@@ -0,0 +1,171 @@
-+/*
-+ * Memory Setup stuff - taken from blob memsetup.S
-+ *
-+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
-+ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
-+ *
-+ * Modified for the FIC GTA01 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+
-+#include <config.h>
-+#include <version.h>
-+
-+
-+/* some parameters for the board */
-+
-+/*
-+ *
-+ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
-+ *
-+ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
-+ *
-+ */
-+
-+#define BWSCON 0x48000000
-+
-+/* BWSCON */
-+#define DW8 (0x0)
-+#define DW16 (0x1)
-+#define DW32 (0x2)
-+#define WAIT (0x1<<2)
-+#define UBLB (0x1<<3)
-+
-+#define B1_BWSCON (DW32)
-+#define B2_BWSCON (DW16)
-+#define B3_BWSCON (DW16 + WAIT + UBLB)
-+#define B4_BWSCON (DW16)
-+#define B5_BWSCON (DW16)
-+#define B6_BWSCON (DW32)
-+#define B7_BWSCON (DW32)
-+
-+/* BANK0CON */
-+#define B0_Tacs 0x0 /* 0clk */
-+#define B0_Tcos 0x0 /* 0clk */
-+#define B0_Tacc 0x7 /* 14clk */
-+#define B0_Tcoh 0x0 /* 0clk */
-+#define B0_Tah 0x0 /* 0clk */
-+#define B0_Tacp 0x0
-+#define B0_PMC 0x0 /* normal */
-+
-+/* BANK1CON */
-+#define B1_Tacs 0x0 /* 0clk */
-+#define B1_Tcos 0x0 /* 0clk */
-+#define B1_Tacc 0x7 /* 14clk */
-+#define B1_Tcoh 0x0 /* 0clk */
-+#define B1_Tah 0x0 /* 0clk */
-+#define B1_Tacp 0x0
-+#define B1_PMC 0x0
-+
-+#define B2_Tacs 0x0
-+#define B2_Tcos 0x0
-+#define B2_Tacc 0x7
-+#define B2_Tcoh 0x0
-+#define B2_Tah 0x0
-+#define B2_Tacp 0x0
-+#define B2_PMC 0x0
-+
-+#define B3_Tacs 0x0 /* 0clk */
-+#define B3_Tcos 0x3 /* 4clk */
-+#define B3_Tacc 0x7 /* 14clk */
-+#define B3_Tcoh 0x1 /* 1clk */
-+#define B3_Tah 0x0 /* 0clk */
-+#define B3_Tacp 0x3 /* 6clk */
-+#define B3_PMC 0x0 /* normal */
-+
-+#define B4_Tacs 0x0 /* 0clk */
-+#define B4_Tcos 0x0 /* 0clk */
-+#define B4_Tacc 0x7 /* 14clk */
-+#define B4_Tcoh 0x0 /* 0clk */
-+#define B4_Tah 0x0 /* 0clk */
-+#define B4_Tacp 0x0
-+#define B4_PMC 0x0 /* normal */
-+
-+#define B5_Tacs 0x0 /* 0clk */
-+#define B5_Tcos 0x0 /* 0clk */
-+#define B5_Tacc 0x7 /* 14clk */
-+#define B5_Tcoh 0x0 /* 0clk */
-+#define B5_Tah 0x0 /* 0clk */
-+#define B5_Tacp 0x0
-+#define B5_PMC 0x0 /* normal */
-+
-+#define B6_MT 0x3 /* SDRAM */
-+#define B6_Trcd 0x1
-+#define B6_SCAN 0x1 /* 9bit */
-+
-+#define B7_MT 0x3 /* SDRAM */
-+#define B7_Trcd 0x1 /* 3clk */
-+#define B7_SCAN 0x1 /* 9bit */
-+
-+/* REFRESH parameter */
-+#define REFEN 0x1 /* Refresh enable */
-+#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
-+#define Trp 0x1 /* 3clk */
-+#define Trc 0x3 /* 7clk */
-+#define Tchr 0x2 /* 3clk */
-+//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
-+#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */
-+/**************************************/
-+
-+_TEXT_BASE:
-+ .word TEXT_BASE
-+
-+.globl lowlevel_init
-+lowlevel_init:
-+ /* memory control configuration */
-+ /* make r0 relative the current location so that it */
-+ /* reads SMRDATA out of FLASH rather than memory ! */
-+ ldr r0, =SMRDATA
-+ ldr r1, _TEXT_BASE
-+ sub r0, r0, r1
-+ ldr r1, =BWSCON /* Bus Width Status Controller */
-+ add r2, r0, #13*4
-+0:
-+ ldr r3, [r0], #4
-+ str r3, [r1], #4
-+ cmp r2, r0
-+ bne 0b
-+
-+ /* setup asynchronous bus mode */
-+ mrc p15, 0, r1 ,c1 ,c0, 0
-+ orr r1, r1, #0xc0000000
-+ mcr p15, 0, r1, c1, c0, 0
-+
-+ /* everything is fine now */
-+ mov pc, lr
-+
-+ .ltorg
-+/* the literal pools origin */
-+
-+SMRDATA:
-+ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
-+ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
-+ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
-+ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
-+ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
-+ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
-+ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
-+ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
-+ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
-+ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
-+ .word 0xb2
-+ .word 0x30
-+ .word 0x30
-diff --exclude .git -Nru u-boot/board/gta01/u-boot.lds u-boot.new/board/gta01/u-boot.lds
---- u-boot/board/gta01/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/gta01/u-boot.lds 2006-10-25 17:28:02.000000000 +0200
-@@ -0,0 +1,57 @@
-+/*
-+ * (C) Copyright 2002
-+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
-+OUTPUT_ARCH(arm)
-+ENTRY(_start)
-+SECTIONS
-+{
-+ . = 0x00000000;
-+
-+ . = ALIGN(4);
-+ .text :
-+ {
-+ cpu/arm920t/start.o (.text)
-+ *(.text)
-+ }
-+
-+ . = ALIGN(4);
-+ .rodata : { *(.rodata) }
-+
-+ . = ALIGN(4);
-+ .data : { *(.data) }
-+
-+ . = ALIGN(4);
-+ .got : { *(.got) }
-+
-+ . = .;
-+ __u_boot_cmd_start = .;
-+ .u_boot_cmd : { *(.u_boot_cmd) }
-+ __u_boot_cmd_end = .;
-+
-+ . = ALIGN(4);
-+ __bss_start = .;
-+ .bss : { *(.bss) }
-+ _end = .;
-+}
-diff --exclude .git -Nru u-boot/board/qt2410/qt2410.c.old u-boot.new/board/qt2410/qt2410.c.old
---- u-boot/board/qt2410/qt2410.c.old 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/board/qt2410/qt2410.c.old 2006-10-10 11:09:43.000000000 +0200
-@@ -0,0 +1,127 @@
-+/*
-+ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * based on existing S3C2410 startup code in u-boot:
-+ *
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ *
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+#include <s3c2410.h>
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#if 1
-+#define M_MDIV 0xA1 /* Fout = 202.8MHz */
-+#define M_PDIV 0x3
-+#define M_SDIV 0x1
-+//#define M_MDIV 0x90 /* Fout = 202.8MHz */
-+//#define M_PDIV 0x7
-+//#define M_SDIV 0x0
-+#else
-+#define M_MDIV 0x5c /* Fout = 150.0MHz */
-+#define M_PDIV 0x4
-+#define M_SDIV 0x0
-+#endif
-+
-+#if 1
-+#define U_M_MDIV 0x78
-+#define U_M_PDIV 0x2
-+#define U_M_SDIV 0x3
-+#else
-+#define U_M_MDIV 0x48
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x2
-+#endif
-+
-+static inline void delay (unsigned long loops)
-+{
-+ __asm__ volatile ("1:\n"
-+ "subs %0, %1, #1\n"
-+ "bne 1b":"=r" (loops):"0" (loops));
-+}
-+
-+/*
-+ * Miscellaneous platform dependent initialisations
-+ */
-+
-+int board_init (void)
-+{
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
-+
-+ /* to reduce PLL lock time, adjust the LOCKTIME register */
-+ clk_power->LOCKTIME = 0xFFFFFF;
-+
-+ /* configure MPLL */
-+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (4000);
-+
-+ /* configure UPLL */
-+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (8000);
-+
-+ /* set up the I/O ports */
-+ gpio->GPACON = 0x007FFFFF;
-+ gpio->GPBCON = 0x00044555;
-+ gpio->GPBUP = 0x000007FF;
-+ gpio->GPCCON = 0xAAAAAAAA;
-+ gpio->GPCUP = 0x0000FFFF;
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+ gpio->GPECON = 0xAAAAAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+ gpio->GPFCON = 0x000055AA;
-+ gpio->GPFUP = 0x000000FF;
-+ gpio->GPGCON = 0xFF95FFBA;
-+ //gpio->GPGUP = 0x0000FFFF;
-+ gpio->GPGUP = 0x0000AFEF;
-+ gpio->GPHCON = 0x0028FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+ /* arch number of SMDK2410-Board */
-+ gd->bd->bi_arch_number = MACH_TYPE_QT2410;
-+
-+ /* adress of boot parameters */
-+ gd->bd->bi_boot_params = 0x30000100;
-+
-+ icache_enable();
-+ dcache_enable();
-+
-+ return 0;
-+}
-+
-+int dram_init (void)
-+{
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+ return 0;
-+}
-diff --exclude .git -Nru u-boot/fs/cramfs/cramfs.c u-boot.new/fs/cramfs/cramfs.c
---- u-boot/fs/cramfs/cramfs.c 2006-07-14 12:41:02.000000000 +0200
-+++ u-boot.new/fs/cramfs/cramfs.c 2006-10-26 14:01:41.000000000 +0200
-@@ -27,7 +27,7 @@
- #include <common.h>
- #include <malloc.h>
-
--#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)
-+#if (CONFIG_COMMANDS & CFG_CMD_CRAMFS)
-
- #include <asm/byteorder.h>
- #include <linux/stat.h>
-@@ -343,5 +343,22 @@
- }
- return 1;
- }
--
-+#else
-+int cramfs_load (char *loadoffset, struct part_info *info, char *filename)
-+{
-+ return -1;
-+}
-+int cramfs_ls (struct part_info *info, char *filename)
-+{
-+ return 0;
-+}
-+int cramfs_info (struct part_info *info)
-+{
-+ return 0;
-+}
-+int cramfs_check (struct part_info *info)
-+{
-+ return 0;
-+}
- #endif /* CFG_FS_CRAMFS */
-+
-diff --exclude .git -Nru u-boot/include/asm-arm/mach-types.h u-boot.new/include/asm-arm/mach-types.h
---- u-boot/include/asm-arm/mach-types.h 2006-08-11 23:19:07.000000000 +0200
-+++ u-boot.new/include/asm-arm/mach-types.h 2006-10-25 23:55:00.000000000 +0200
-@@ -1038,6 +1038,7 @@
- #define MACH_TYPE_IXP465 1028
- #define MACH_TYPE_BALLOON3 1029
- #define MACH_TYPE_QT2410 1108
-+#define MACH_TYPE_GTA01 1182
-
- #ifdef CONFIG_ARCH_EBSA110
- # ifdef machine_arch_type
-@@ -13327,6 +13328,19 @@
- # define machine_is_qt2410() (0)
- #endif
-
-+#ifdef CONFIG_MACH_GTA01
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GTA01
-+# endif
-+# define machine_is_gta01() (machine_arch_type == MACH_TYPE_GTA01)
-+#else
-+# define machine_is_gta01() (0)
-+#endif
-+
-+
- /*
- * These have not yet been registered
- */
-diff --exclude .git -Nru u-boot/include/configs/gta01.h u-boot.new/include/configs/gta01.h
---- u-boot/include/configs/gta01.h 1970-01-01 01:00:00.000000000 +0100
-+++ u-boot.new/include/configs/gta01.h 2006-10-26 20:21:30.000000000 +0200
-@@ -0,0 +1,233 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * Configuation settings for the FIC GTA01 Linux GSM phone
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#ifndef __CONFIG_H
-+#define __CONFIG_H
-+
-+/* we want to start u-boot directly from within NAND flash */
-+#define CONFIG_S3C2410_NAND_BOOT 1
-+
-+/*
-+ * High Level Configuration Options
-+ * (easy to change)
-+ */
-+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-+
-+/* input clock of PLL */
-+#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA01 has 12MHz input clock */
-+
-+
-+#define USE_920T_MMU 1
-+#define CONFIG_USE_IRQ 1
-+
-+/*
-+ * Size of malloc() pool
-+ */
-+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-+
-+/*
-+ * Hardware drivers
-+ */
-+
-+/*
-+ * select serial console configuration
-+ */
-+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on GTA01 */
-+//#define CONFIG_HWFLOW 1
-+
-+/************************************************************
-+ * RTC
-+ ************************************************************/
-+#define CONFIG_RTC_S3C24X0 1
-+
-+/* allow to overwrite serial and ethaddr */
-+#define CONFIG_ENV_OVERWRITE
-+
-+#define CONFIG_BAUDRATE 115200
-+
-+/***********************************************************
-+ * Command definition
-+ ***********************************************************/
-+#define CONFIG_COMMANDS (\
-+ CFG_CMD_BDI | \
-+ CFG_CMD_LOADS | \
-+ CFG_CMD_LAODB | \
-+ CFG_CMD_IMI | \
-+ CFG_CMD_CACHE | \
-+ CFG_CMD_MEMORY | \
-+ CFG_CMD_ENV | \
-+ /* CFG_CMD_IRQ | */ \
-+ CFG_CMD_BOOTD | \
-+ CFG_CMD_CONSOLE | \
-+ CFG_CMD_ASKENV | \
-+ CFG_CMD_RUN | \
-+ CFG_CMD_ECHO | \
-+ CFG_CMD_I2C | \
-+ CFG_CMD_REGINFO | \
-+ CFG_CMD_IMMAP | \
-+ CFG_CMD_DATE | \
-+ CFG_CMD_AUTOSCRIPT | \
-+ CFG_CMD_BSP | \
-+ CFG_CMD_ELF | \
-+ CFG_CMD_MISC | \
-+ CFG_CMD_USB | \
-+ CFG_CMD_JFFS2 | \
-+ CFG_CMD_DIAG | \
-+ /* CFG_CMD_HWFLOW | */ \
-+ CFG_CMD_SAVES | \
-+ CFG_CMD_NAND | \
-+ CFG_CMD_PORTIO | \
-+ CFG_CMD_MMC | \
-+ CFG_CMD_FAT | \
-+ CFG_CMD_EXT2 | \
-+ 0)
-+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-+#include <cmd_confdefs.h>
-+
-+#define CONFIG_BOOTDELAY 3
-+#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
-+/*#define CONFIG_BOOTFILE "elinos-lart" */
-+#define CONFIG_BOOTCOMMAND "nand load 0x32000000 0x34000 0x200000; bootm 0x32000000"
-+
-+#define CONFIG_DOS_PARTITION 1
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-+/* what's this ? it's not used anywhere */
-+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-+#endif
-+
-+/*
-+ * Miscellaneous configurable options
-+ */
-+#define CFG_LONGHELP /* undef to save memory */
-+#define CFG_PROMPT "GTA01 # " /* Monitor Command Prompt */
-+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-+#define CFG_MAXARGS 16 /* max number of command args */
-+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-+
-+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-+
-+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-+
-+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-+
-+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-+/* it to wrap 100 times (total 1562500) to get 1 sec. */
-+#define CFG_HZ 1562500
-+
-+/* valid baudrates */
-+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-+
-+/*-----------------------------------------------------------------------
-+ * Stack sizes
-+ *
-+ * The stack sizes are set up in start.S using the settings below
-+ */
-+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-+#ifdef CONFIG_USE_IRQ
-+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-+#endif
-+
-+#define CONFIG_USB_OHCI 1
-+
-+/*-----------------------------------------------------------------------
-+ * Physical Memory Map
-+ */
-+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-+
-+/*-----------------------------------------------------------------------
-+ * FLASH and environment organization
-+ */
-+
-+#if 1
-+#define CFG_NO_FLASH 1
-+#else
-+#define CFG_MAX_FLASH_SECT 1
-+#define CFG_MAX_FLASH_BANKS 1
-+#endif
-+
-+#define CFG_ENV_IS_IN_NAND 1
-+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-+
-+#define NAND_MAX_CHIPS 1
-+#define CFG_NAND_BASE 0x4e000000
-+#define CFG_MAX_NAND_DEVICE 1
-+
-+#define CONFIG_MMC 1
-+#define CFG_MMC_BASE 0xff000000
-+
-+/* EXT2 driver */
-+#define CONFIG_EXT2 1
-+
-+/* FAT driver in u-boot is broken currently */
-+#define CONFIG_FAT 1
-+#define CONFIG_SUPPORT_VFAT 1
-+
-+/* JFFS2 driver */
-+#define CONFIG_JFFS2_NAND 1
-+#define CONFIG_JFFS2_NAND_DEV 0
-+#define CONFIG_JFFS2_NAND_OFF 0x634000
-+#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
-+
-+/* ATAG configuration */
-+#define CONFIG_INITRD_TAG 1
-+#define CONFIG_SETUP_MEMORY_TAGS 1
-+#define CONFIG_CMDLINE_TAG 1
-+#if 0
-+#define CONFIG_SERIAL_TAG 1
-+#define CONFIG_REVISION_TAG 1
-+#endif
-+
-+#define CONFIG_DRIVER_S3C24X0_I2C 1
-+#define CONFIG_HARD_I2C 1
-+#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50707 data sheet */
-+#define CFG_I2C_SLAVE 0x7f
-+
-+
-+#if 0
-+#define CONFIG_VIDEO
-+#define CONFIG_VIDEO_S3C2410
-+#define CONFIG_CFB_CONSOLE
-+#define CONFIG_VIDEO_LOGO
-+#define CONFIG_VGA_AS_SINGLE_DEVICE
-+
-+#define VIDEO_KBD_INIT_FCT 0
-+#define VIDEO_TSTC_FCT serial_tstc
-+#define VIDEO_GETC_FCT serial_getc
-+
-+#define LCD_VIDEO_ADDR 0x33d00000
-+#endif
-+
-+#endif /* __CONFIG_H */
diff --git a/packages/uboot/files/u-boot-20060907.tar.bz2 b/packages/uboot/files/u-boot-20060907.tar.bz2
deleted file mode 100644
index 66b562cafe..0000000000
--- a/packages/uboot/files/u-boot-20060907.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/packages/uboot/files/u-boot-20061030-gta01bv2.patch b/packages/uboot/files/u-boot-20061030-gta01bv2.patch
deleted file mode 100644
index 9e2d19338e..0000000000
--- a/packages/uboot/files/u-boot-20061030-gta01bv2.patch
+++ /dev/null
@@ -1,246 +0,0 @@
-This patch adds support for the GTA01Bv2 variant of the FIC GTA01 (Neo1973) phone
-
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2007-01-04 12:22:12.000000000 +0100
-+++ git/Makefile 2007-01-04 12:22:16.000000000 +0100
-@@ -1918,6 +1918,7 @@
-
- gta01_config \
- gta01v3_config \
-+gta01bv2_config \
- gta01v4_config : unconfig
- @board/gta01/split_by_variant.sh $@
-
-Index: git/board/gta01/gta01.c
-===================================================================
---- git.orig/board/gta01/gta01.c 2007-01-04 12:22:12.000000000 +0100
-+++ git/board/gta01/gta01.c 2007-01-04 12:22:16.000000000 +0100
-@@ -35,28 +35,29 @@
-
- DECLARE_GLOBAL_DATA_PTR;
-
--#if 1
-+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
- //#define M_MDIV 0xA1 /* Fout = 202.8MHz */
- //#define M_PDIV 0x3
- //#define M_SDIV 0x1
- #define M_MDIV 0x90 /* Fout = 202.8MHz */
- #define M_PDIV 0x7
- #define M_SDIV 0x0
--#else
--#define M_MDIV 0x5c /* Fout = 150.0MHz */
--#define M_PDIV 0x4
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+#if 0
-+#define M_MDIV 0x7d /* Fout = 266MHz */
-+#define M_PDIV 0x1
-+#define M_SDIV 0x1
-+#endif
-+#define M_MDIV 0x90 /* Fout = 202.8MHz */
-+#define M_PDIV 0x7
- #define M_SDIV 0x0
-+#else
-+#error Please define GTA01 revision
- #endif
-
--#if 1
- #define U_M_MDIV 0x78
- #define U_M_PDIV 0x2
- #define U_M_SDIV 0x3
--#else
--#define U_M_MDIV 0x48
--#define U_M_PDIV 0x3
--#define U_M_SDIV 0x2
--#endif
-
- static inline void delay (unsigned long loops)
- {
-@@ -137,7 +138,31 @@
-
- gpio->GPHCON = 0x0000FAAA;
- gpio->GPHUP = 0x000007FF;
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+ gpio->GPACON = 0x005E47FF;
-
-+ gpio->GPBCON = 0x00145416;
-+ gpio->GPBUP = 0x000007FF;
-+ gpio->GPBDAT |= 0x4; /* Set GBP2 to high (Flash power-up) */
-+
-+ gpio->GPCCON = 0xAAAA12A9;
-+ gpio->GPCUP = 0x0000FFFF;
-+
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+
-+ gpio->GPECON = 0xA02AAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+
-+ gpio->GPFCON = 0x0000aa19;
-+ gpio->GPFUP = 0x000000FF;
-+ gpio->GPFDAT |= 0x4; /* Set GBF2 to high (nGSM_EN) */
-+
-+ gpio->GPGCON = 0xFF40F0C1;
-+ gpio->GPGUP = 0x0000AFEF;
-+
-+ gpio->GPHCON = 0x0000FAAA;
-+ gpio->GPHUP = 0x000007FF;
- #else
- #error Please define GTA01 version
- #endif
-@@ -156,9 +181,11 @@
-
- int board_late_init(void)
- {
-+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
- const char mmc_power = 0x8f;
-- /* enable D3REG 3.3V (SC/MMC power) */
-+ /* enable D2REG 3.3V (SC/MMC power) */
- i2c_write(0x08, 0x25, 1, &mmc_power, 1);
-+#endif
- return 0;
- }
-
-@@ -176,5 +203,7 @@
- return 0x00000130;
- #elif defined(CONFIG_ARCH_GTA01_v4)
- return 0x00000140;
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+ return 0x00000220;
- #endif
- }
-Index: git/board/gta01/split_by_variant.sh
-===================================================================
---- git.orig/board/gta01/split_by_variant.sh 2007-01-04 12:22:12.000000000 +0100
-+++ git/board/gta01/split_by_variant.sh 2007-01-04 12:22:16.000000000 +0100
-@@ -15,16 +15,23 @@
- case "$1" in
- gta01v4_config)
- echo "#define CONFIG_ARCH_GTA01_v4" > ${obj}include/config.h
-+ echo "GTA01_BIG_FLASH=n" > ${obj}board/gta01/config.tmp
- ;;
-
- gta01v3_config)
- echo "#define CONFIG_ARCH_GTA01_v3" > ${obj}include/config.h
-+ echo "GTA01_BIG_FLASH=n" > ${obj}board/gta01/config.tmp
- ;;
-
-+ gta01bv2_config)
-+ echo "#define CONFIG_ARCH_GTA01B_v2" > ${obj}include/config.h
-+ echo "GTA01_BIG_FLASH=y" > ${obj}board/gta01/config.tmp
-+ ;;
-
- *)
- echo "$0:: Unrecognised config - using gta01v3_config"
- echo "#define CONFIG_ARCH_GTA01_v3" > ${obj}include/config.h
-+ echo "GTA01_BIG_FLASH=n" > ${obj}board/gta01/config.tmp
- ;;
-
- esac
-Index: git/include/configs/gta01.h
-===================================================================
---- git.orig/include/configs/gta01.h 2007-01-04 12:22:12.000000000 +0100
-+++ git/include/configs/gta01.h 2007-01-04 12:22:16.000000000 +0100
-@@ -128,6 +128,8 @@
- #define CFG_PROMPT "GTA01v3 # " /* Monitor Command Prompt */
- #elif defined(CONFIG_ARCH_GTA01_v4)
- #define CFG_PROMPT "GTA01v4 # " /* Monitor Command Prompt */
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+#define CFG_PROMPT "GTA01Bv2 # " /* Monitor Command Prompt */
- #endif
- #define CFG_CBSIZE 256 /* Console I/O Buffer Size */
- #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-@@ -166,7 +168,13 @@
- */
- #define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
- #define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-+#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
- #define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */
-+#else
-+#error Please define GTA01 variant
-+#endif
- #define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-
- /*-----------------------------------------------------------------------
-Index: git/board/gta01/lowlevel_init.S
-===================================================================
---- git.orig/board/gta01/lowlevel_init.S 2007-01-04 12:22:07.000000000 +0100
-+++ git/board/gta01/lowlevel_init.S 2007-01-04 12:22:16.000000000 +0100
-@@ -108,12 +108,16 @@
- #define B5_PMC 0x0 /* normal */
-
- #define B6_MT 0x3 /* SDRAM */
--#define B6_Trcd 0x1
-+#define B6_Trcd 0x1 /* 3clk */
-+#if defined (CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
- #define B6_SCAN 0x1 /* 9bit */
-+#elif defined(CONFIG_ARCH_GTA01B_v2)
-+#define B6_SCAN 0x2 /* 10bit */
-+#endif
-
- #define B7_MT 0x3 /* SDRAM */
- #define B7_Trcd 0x1 /* 3clk */
--#define B7_SCAN 0x1 /* 9bit */
-+#define B7_SCAN 0x2 /* 10bit */
-
- /* REFRESH parameter */
- #define REFEN 0x1 /* Refresh enable */
-@@ -149,6 +153,19 @@
- orr r1, r1, #0xc0000000
- mcr p15, 0, r1, c1, c0, 0
-
-+#if defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2)
-+ /* switch on power for NAND */
-+ ldr r0, =0x56000010 /* GPBCON */
-+ ldr r1, [r0]
-+ orr r1, r1, #0x10
-+ str r1, [r0]
-+
-+ ldr r0, =0x56000014 /* GPBDAT */
-+ ldr r1, [r0]
-+ orr r1, r1, #(1 <<2)
-+ str r1, [r0]
-+#endif
-+
- /* everything is fine now */
- mov pc, lr
-
-Index: git/board/gta01/config.mk
-===================================================================
---- git.orig/board/gta01/config.mk 2007-01-04 12:22:07.000000000 +0100
-+++ git/board/gta01/config.mk 2007-01-04 12:22:16.000000000 +0100
-@@ -8,18 +8,26 @@
- # see http://www.samsung.com/ for more information on SAMSUNG
- #
-
-+# GTA01v3 has 1 bank of 64 MB SDRAM
-+# GTA01v4 has 1 bank of 64 MB SDRAM
- #
--# GTA01 has 1 bank of 64 MB DRAM
-+# 3000'0000 to 3400'0000
-+# we load ourself to 33F8'0000
-+#
-+# GTA01Bv2 or later has 1 bank of 128 MB SDRAM
- #
--# 3000'0000 to 3400'0000
-+# 3000'0000 to 3800'0000
-+# we load ourself to 37F8'0000
- #
- # Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
- # optionally with a ramdisk at 3080'0000
- #
--# we load ourself to 33F8'0000
--#
--# download area is 3300'0000
--#
-+# download area is 3200'0000 or 3300'0000
-
-+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
-
-+ifeq ($(GTA01_BIG_RAM),y)
-+TEXT_BASE = 0x37F80000
-+else
- TEXT_BASE = 0x33F80000
-+endif
diff --git a/packages/uboot/files/u-boot-20061030-gta01v4.patch b/packages/uboot/files/u-boot-20061030-gta01v4.patch
deleted file mode 100644
index 8910dcf831..0000000000
--- a/packages/uboot/files/u-boot-20061030-gta01v4.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2007-01-04 12:22:08.000000000 +0100
-+++ git/Makefile 2007-01-04 12:22:12.000000000 +0100
-@@ -1916,8 +1916,10 @@
- qt2410_config : unconfig
- @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
-
--gta01_config : unconfig
-- @./mkconfig $(@:_config=) arm arm920t gta01 NULL s3c24x0
-+gta01_config \
-+gta01v3_config \
-+gta01v4_config : unconfig
-+ @board/gta01/split_by_variant.sh $@
-
- scb9328_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
-Index: git/board/gta01/gta01.c
-===================================================================
---- git.orig/board/gta01/gta01.c 2007-01-04 12:22:08.000000000 +0100
-+++ git/board/gta01/gta01.c 2007-01-04 12:22:12.000000000 +0100
-@@ -90,6 +90,7 @@
- delay (8000);
-
- /* set up the I/O ports */
-+#if defined(CONFIG_ARCH_GTA01_v3)
- gpio->GPACON = 0x007FFFFF;
-
- gpio->GPBCON = 0x00005056;
-@@ -112,6 +113,34 @@
-
- gpio->GPHCON = 0x0008FAAA;
- gpio->GPHUP = 0x000007FF;
-+#elif defined(CONFIG_ARCH_GTA01_v4)
-+ gpio->GPACON = 0x007FFFFF; //0x005E47FF;
-+
-+ gpio->GPBDAT |= 0x4; /* Set GBP2 to high (Flash power-up) */
-+ gpio->GPBCON = 0x00005056; //0x00045016;
-+ gpio->GPBUP = 0x000007FF;
-+
-+ gpio->GPCCON = 0xAAAA12A9;
-+ gpio->GPCUP = 0x0000FFFF;
-+
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+
-+ gpio->GPECON = 0xA02AAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+
-+ gpio->GPFCON = 0x0000aa09;
-+ gpio->GPFUP = 0x000000FF;
-+
-+ gpio->GPGCON = 0xFF40F0C1;
-+ gpio->GPGUP = 0x0000FFFF;
-+
-+ gpio->GPHCON = 0x0000FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+#else
-+#error Please define GTA01 version
-+#endif
-
- /* arch number of SMDK2410-Board */
- gd->bd->bi_arch_number = MACH_TYPE_GTA01;
-@@ -143,5 +172,9 @@
-
- u_int32_t get_board_rev(void)
- {
-+#if defined(CONFIG_ARCH_GTA01_v3)
- return 0x00000130;
-+#elif defined(CONFIG_ARCH_GTA01_v4)
-+ return 0x00000140;
-+#endif
- }
-Index: git/board/gta01/split_by_variant.sh
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/split_by_variant.sh 2007-01-04 12:22:12.000000000 +0100
-@@ -0,0 +1,36 @@
-+#!/bin/sh
-+# ---------------------------------------------------------
-+# Set the core module defines according to Core Module
-+# ---------------------------------------------------------
-+# ---------------------------------------------------------
-+# Set up the GTA01 type define
-+# ---------------------------------------------------------
-+
-+mkdir -p ${obj}include
-+if [ "$1" == "" ]
-+then
-+ echo "$0:: No parameters - using GTA01v3 config"
-+ echo "#define CONFIG_ARCH_GTA01_v3" > ${obj}include/config.h
-+else
-+ case "$1" in
-+ gta01v4_config)
-+ echo "#define CONFIG_ARCH_GTA01_v4" > ${obj}include/config.h
-+ ;;
-+
-+ gta01v3_config)
-+ echo "#define CONFIG_ARCH_GTA01_v3" > ${obj}include/config.h
-+ ;;
-+
-+
-+ *)
-+ echo "$0:: Unrecognised config - using gta01v3_config"
-+ echo "#define CONFIG_ARCH_GTA01_v3" > ${obj}include/config.h
-+ ;;
-+
-+ esac
-+
-+fi
-+# ---------------------------------------------------------
-+# Complete the configuration
-+# ---------------------------------------------------------
-+$MKCONFIG -a gta01 arm arm920t gta01 NULL s3c24x0
-Index: git/include/configs/gta01.h
-===================================================================
---- git.orig/include/configs/gta01.h 2007-01-04 12:22:08.000000000 +0100
-+++ git/include/configs/gta01.h 2007-01-04 12:22:12.000000000 +0100
-@@ -124,7 +124,11 @@
- * Miscellaneous configurable options
- */
- #define CFG_LONGHELP /* undef to save memory */
--#define CFG_PROMPT "GTA01 # " /* Monitor Command Prompt */
-+#if defined(CONFIG_ARCH_GTA01_v3)
-+#define CFG_PROMPT "GTA01v3 # " /* Monitor Command Prompt */
-+#elif defined(CONFIG_ARCH_GTA01_v4)
-+#define CFG_PROMPT "GTA01v4 # " /* Monitor Command Prompt */
-+#endif
- #define CFG_CBSIZE 256 /* Console I/O Buffer Size */
- #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
- #define CFG_MAXARGS 16 /* max number of command args */
diff --git a/packages/uboot/files/u-boot-20061030-qt2410-gta01.patch b/packages/uboot/files/u-boot-20061030-qt2410-gta01.patch
deleted file mode 100644
index 91f85479bc..0000000000
--- a/packages/uboot/files/u-boot-20061030-qt2410-gta01.patch
+++ /dev/null
@@ -1,9272 +0,0 @@
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2007-01-04 12:21:15.000000000 +0100
-+++ git/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -1913,6 +1913,12 @@
- sbc2410x_config: unconfig
- @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
-
-+qt2410_config : unconfig
-+ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
-+
-+gta01_config : unconfig
-+ @./mkconfig $(@:_config=) arm arm920t gta01 NULL s3c24x0
-+
- scb9328_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
-
-Index: git/board/gta01/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,47 @@
-+#
-+# (C) Copyright 2000, 2001, 2002
-+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+#
-+# See file CREDITS for list of people who contributed to this
-+# project.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+
-+include $(TOPDIR)/config.mk
-+
-+LIB = lib$(BOARD).a
-+
-+OBJS := gta01.o
-+SOBJS := lowlevel_init.o
-+
-+$(LIB): $(OBJS) $(SOBJS)
-+ $(AR) crv $@ $(OBJS) $(SOBJS)
-+
-+clean:
-+ rm -f $(SOBJS) $(OBJS)
-+
-+distclean: clean
-+ rm -f $(LIB) core *.bak .depend
-+
-+#########################################################################
-+
-+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
-+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
-+
-+-include .depend
-+
-+#########################################################################
-Index: git/board/gta01/config.mk
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/config.mk 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,25 @@
-+#
-+# (C) Copyright 2002
-+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+#
-+# FIC GTA01 board with S3C2410X (ARM920T) cpu
-+#
-+# see http://www.samsung.com/ for more information on SAMSUNG
-+#
-+
-+#
-+# GTA01 has 1 bank of 64 MB DRAM
-+#
-+# 3000'0000 to 3400'0000
-+#
-+# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
-+# optionally with a ramdisk at 3080'0000
-+#
-+# we load ourself to 33F8'0000
-+#
-+# download area is 3300'0000
-+#
-+
-+
-+TEXT_BASE = 0x33F80000
-Index: git/board/gta01/gta01.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/gta01.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,147 @@
-+/*
-+ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * based on existing S3C2410 startup code in u-boot:
-+ *
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ *
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+#include <s3c2410.h>
-+#include <i2c.h>
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#if 1
-+//#define M_MDIV 0xA1 /* Fout = 202.8MHz */
-+//#define M_PDIV 0x3
-+//#define M_SDIV 0x1
-+#define M_MDIV 0x90 /* Fout = 202.8MHz */
-+#define M_PDIV 0x7
-+#define M_SDIV 0x0
-+#else
-+#define M_MDIV 0x5c /* Fout = 150.0MHz */
-+#define M_PDIV 0x4
-+#define M_SDIV 0x0
-+#endif
-+
-+#if 1
-+#define U_M_MDIV 0x78
-+#define U_M_PDIV 0x2
-+#define U_M_SDIV 0x3
-+#else
-+#define U_M_MDIV 0x48
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x2
-+#endif
-+
-+static inline void delay (unsigned long loops)
-+{
-+ __asm__ volatile ("1:\n"
-+ "subs %0, %1, #1\n"
-+ "bne 1b":"=r" (loops):"0" (loops));
-+}
-+
-+/*
-+ * Miscellaneous platform dependent initialisations
-+ */
-+
-+int board_init (void)
-+{
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
-+
-+ /* to reduce PLL lock time, adjust the LOCKTIME register */
-+ clk_power->LOCKTIME = 0xFFFFFF;
-+
-+ /* configure MPLL */
-+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (4000);
-+
-+ /* configure UPLL */
-+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (8000);
-+
-+ /* set up the I/O ports */
-+ gpio->GPACON = 0x007FFFFF;
-+
-+ gpio->GPBCON = 0x00005056;
-+ gpio->GPBUP = 0x000007FF;
-+
-+ gpio->GPCCON = 0xAAAA12A8;
-+ gpio->GPCUP = 0x0000FFFF;
-+
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+
-+ gpio->GPECON = 0xAAAAAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+
-+ gpio->GPFCON = 0x00002AA9;
-+ gpio->GPFUP = 0x000000FF;
-+
-+ gpio->GPGCON = 0xA846F0C0;
-+ gpio->GPGUP = 0x0000AFEF;
-+
-+ gpio->GPHCON = 0x0008FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+ /* arch number of SMDK2410-Board */
-+ gd->bd->bi_arch_number = MACH_TYPE_GTA01;
-+
-+ /* adress of boot parameters */
-+ gd->bd->bi_boot_params = 0x30000100;
-+
-+ icache_enable();
-+ dcache_enable();
-+
-+ return 0;
-+}
-+
-+int board_late_init(void)
-+{
-+ const char mmc_power = 0x8f;
-+ /* enable D3REG 3.3V (SC/MMC power) */
-+ i2c_write(0x08, 0x25, 1, &mmc_power, 1);
-+ return 0;
-+}
-+
-+int dram_init (void)
-+{
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+ return 0;
-+}
-+
-+u_int32_t get_board_rev(void)
-+{
-+ return 0x00000130;
-+}
-Index: git/board/gta01/lowlevel_init.S
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/lowlevel_init.S 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,171 @@
-+/*
-+ * Memory Setup stuff - taken from blob memsetup.S
-+ *
-+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
-+ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
-+ *
-+ * Modified for the FIC GTA01 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+
-+#include <config.h>
-+#include <version.h>
-+
-+
-+/* some parameters for the board */
-+
-+/*
-+ *
-+ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
-+ *
-+ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
-+ *
-+ */
-+
-+#define BWSCON 0x48000000
-+
-+/* BWSCON */
-+#define DW8 (0x0)
-+#define DW16 (0x1)
-+#define DW32 (0x2)
-+#define WAIT (0x1<<2)
-+#define UBLB (0x1<<3)
-+
-+#define B1_BWSCON (DW32)
-+#define B2_BWSCON (DW16)
-+#define B3_BWSCON (DW16 + WAIT + UBLB)
-+#define B4_BWSCON (DW16)
-+#define B5_BWSCON (DW16)
-+#define B6_BWSCON (DW32)
-+#define B7_BWSCON (DW32)
-+
-+/* BANK0CON */
-+#define B0_Tacs 0x0 /* 0clk */
-+#define B0_Tcos 0x0 /* 0clk */
-+#define B0_Tacc 0x7 /* 14clk */
-+#define B0_Tcoh 0x0 /* 0clk */
-+#define B0_Tah 0x0 /* 0clk */
-+#define B0_Tacp 0x0
-+#define B0_PMC 0x0 /* normal */
-+
-+/* BANK1CON */
-+#define B1_Tacs 0x0 /* 0clk */
-+#define B1_Tcos 0x0 /* 0clk */
-+#define B1_Tacc 0x7 /* 14clk */
-+#define B1_Tcoh 0x0 /* 0clk */
-+#define B1_Tah 0x0 /* 0clk */
-+#define B1_Tacp 0x0
-+#define B1_PMC 0x0
-+
-+#define B2_Tacs 0x0
-+#define B2_Tcos 0x0
-+#define B2_Tacc 0x7
-+#define B2_Tcoh 0x0
-+#define B2_Tah 0x0
-+#define B2_Tacp 0x0
-+#define B2_PMC 0x0
-+
-+#define B3_Tacs 0x0 /* 0clk */
-+#define B3_Tcos 0x3 /* 4clk */
-+#define B3_Tacc 0x7 /* 14clk */
-+#define B3_Tcoh 0x1 /* 1clk */
-+#define B3_Tah 0x0 /* 0clk */
-+#define B3_Tacp 0x3 /* 6clk */
-+#define B3_PMC 0x0 /* normal */
-+
-+#define B4_Tacs 0x0 /* 0clk */
-+#define B4_Tcos 0x0 /* 0clk */
-+#define B4_Tacc 0x7 /* 14clk */
-+#define B4_Tcoh 0x0 /* 0clk */
-+#define B4_Tah 0x0 /* 0clk */
-+#define B4_Tacp 0x0
-+#define B4_PMC 0x0 /* normal */
-+
-+#define B5_Tacs 0x0 /* 0clk */
-+#define B5_Tcos 0x0 /* 0clk */
-+#define B5_Tacc 0x7 /* 14clk */
-+#define B5_Tcoh 0x0 /* 0clk */
-+#define B5_Tah 0x0 /* 0clk */
-+#define B5_Tacp 0x0
-+#define B5_PMC 0x0 /* normal */
-+
-+#define B6_MT 0x3 /* SDRAM */
-+#define B6_Trcd 0x1
-+#define B6_SCAN 0x1 /* 9bit */
-+
-+#define B7_MT 0x3 /* SDRAM */
-+#define B7_Trcd 0x1 /* 3clk */
-+#define B7_SCAN 0x1 /* 9bit */
-+
-+/* REFRESH parameter */
-+#define REFEN 0x1 /* Refresh enable */
-+#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
-+#define Trp 0x1 /* 3clk */
-+#define Trc 0x3 /* 7clk */
-+#define Tchr 0x2 /* 3clk */
-+//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
-+#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */
-+/**************************************/
-+
-+_TEXT_BASE:
-+ .word TEXT_BASE
-+
-+.globl lowlevel_init
-+lowlevel_init:
-+ /* memory control configuration */
-+ /* make r0 relative the current location so that it */
-+ /* reads SMRDATA out of FLASH rather than memory ! */
-+ ldr r0, =SMRDATA
-+ ldr r1, _TEXT_BASE
-+ sub r0, r0, r1
-+ ldr r1, =BWSCON /* Bus Width Status Controller */
-+ add r2, r0, #13*4
-+0:
-+ ldr r3, [r0], #4
-+ str r3, [r1], #4
-+ cmp r2, r0
-+ bne 0b
-+
-+ /* setup asynchronous bus mode */
-+ mrc p15, 0, r1 ,c1 ,c0, 0
-+ orr r1, r1, #0xc0000000
-+ mcr p15, 0, r1, c1, c0, 0
-+
-+ /* everything is fine now */
-+ mov pc, lr
-+
-+ .ltorg
-+/* the literal pools origin */
-+
-+SMRDATA:
-+ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
-+ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
-+ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
-+ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
-+ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
-+ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
-+ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
-+ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
-+ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
-+ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
-+ .word 0xb2
-+ .word 0x30
-+ .word 0x30
-Index: git/board/gta01/u-boot.lds
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/gta01/u-boot.lds 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,57 @@
-+/*
-+ * (C) Copyright 2002
-+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
-+OUTPUT_ARCH(arm)
-+ENTRY(_start)
-+SECTIONS
-+{
-+ . = 0x00000000;
-+
-+ . = ALIGN(4);
-+ .text :
-+ {
-+ cpu/arm920t/start.o (.text)
-+ *(.text)
-+ }
-+
-+ . = ALIGN(4);
-+ .rodata : { *(.rodata) }
-+
-+ . = ALIGN(4);
-+ .data : { *(.data) }
-+
-+ . = ALIGN(4);
-+ .got : { *(.got) }
-+
-+ . = .;
-+ __u_boot_cmd_start = .;
-+ .u_boot_cmd : { *(.u_boot_cmd) }
-+ __u_boot_cmd_end = .;
-+
-+ . = ALIGN(4);
-+ __bss_start = .;
-+ .bss : { *(.bss) }
-+ _end = .;
-+}
-Index: git/board/qt2410/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,47 @@
-+#
-+# (C) Copyright 2000, 2001, 2002
-+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+#
-+# See file CREDITS for list of people who contributed to this
-+# project.
-+#
-+# This program is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU General Public License as
-+# published by the Free Software Foundation; either version 2 of
-+# the License, or (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+# MA 02111-1307 USA
-+#
-+
-+include $(TOPDIR)/config.mk
-+
-+LIB = lib$(BOARD).a
-+
-+OBJS := qt2410.o flash.o
-+SOBJS := lowlevel_init.o
-+
-+$(LIB): $(OBJS) $(SOBJS)
-+ $(AR) crv $@ $(OBJS) $(SOBJS)
-+
-+clean:
-+ rm -f $(SOBJS) $(OBJS)
-+
-+distclean: clean
-+ rm -f $(LIB) core *.bak .depend
-+
-+#########################################################################
-+
-+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
-+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
-+
-+-include .depend
-+
-+#########################################################################
-Index: git/board/qt2410/config.mk
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/config.mk 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,25 @@
-+#
-+# (C) Copyright 2002
-+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+#
-+# SAMSUNG SMDK2410 board with S3C2410X (ARM920T) cpu
-+#
-+# see http://www.samsung.com/ for more information on SAMSUNG
-+#
-+
-+#
-+# SMDK2410 has 1 bank of 64 MB DRAM
-+#
-+# 3000'0000 to 3400'0000
-+#
-+# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
-+# optionally with a ramdisk at 3080'0000
-+#
-+# we load ourself to 33F8'0000
-+#
-+# download area is 3300'0000
-+#
-+
-+
-+TEXT_BASE = 0x33F80000
-Index: git/board/qt2410/flash.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/flash.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,435 @@
-+/*
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Alex Zuepke <azu@sysgo.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+ulong myflush (void);
-+
-+
-+#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
-+#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
-+
-+flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
-+
-+
-+#define CMD_READ_ARRAY 0x000000F0
-+#define CMD_UNLOCK1 0x000000AA
-+#define CMD_UNLOCK2 0x00000055
-+#define CMD_ERASE_SETUP 0x00000080
-+#define CMD_ERASE_CONFIRM 0x00000030
-+#define CMD_PROGRAM 0x000000A0
-+#define CMD_UNLOCK_BYPASS 0x00000020
-+
-+#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
-+#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
-+
-+#define BIT_ERASE_DONE 0x00000080
-+#define BIT_RDY_MASK 0x00000080
-+#define BIT_PROGRAM_ERROR 0x00000020
-+#define BIT_TIMEOUT 0x80000000 /* our flag */
-+
-+#define READY 1
-+#define ERR 2
-+#define TMO 4
-+
-+/*-----------------------------------------------------------------------
-+ */
-+
-+ulong flash_init (void)
-+{
-+ int i, j;
-+ ulong size = 0;
-+
-+ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
-+ ulong flashbase = 0;
-+
-+ flash_info[i].flash_id =
-+#if defined(CONFIG_AMD_LV400)
-+ (AMD_MANUFACT & FLASH_VENDMASK) |
-+ (AMD_ID_LV400B & FLASH_TYPEMASK);
-+#elif defined(CONFIG_AMD_LV800)
-+ (AMD_MANUFACT & FLASH_VENDMASK) |
-+ (AMD_ID_LV800B & FLASH_TYPEMASK);
-+#else
-+#error "Unknown flash configured"
-+#endif
-+ flash_info[i].size = FLASH_BANK_SIZE;
-+ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
-+ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
-+ if (i == 0)
-+ flashbase = PHYS_FLASH_1;
-+ else
-+ panic ("configured too many flash banks!\n");
-+ for (j = 0; j < flash_info[i].sector_count; j++) {
-+ if (j <= 3) {
-+ /* 1st one is 16 KB */
-+ if (j == 0) {
-+ flash_info[i].start[j] =
-+ flashbase + 0;
-+ }
-+
-+ /* 2nd and 3rd are both 8 KB */
-+ if ((j == 1) || (j == 2)) {
-+ flash_info[i].start[j] =
-+ flashbase + 0x4000 + (j -
-+ 1) *
-+ 0x2000;
-+ }
-+
-+ /* 4th 32 KB */
-+ if (j == 3) {
-+ flash_info[i].start[j] =
-+ flashbase + 0x8000;
-+ }
-+ } else {
-+ flash_info[i].start[j] =
-+ flashbase + (j - 3) * MAIN_SECT_SIZE;
-+ }
-+ }
-+ size += flash_info[i].size;
-+ }
-+
-+ flash_protect (FLAG_PROTECT_SET,
-+ CFG_FLASH_BASE,
-+ CFG_FLASH_BASE + monitor_flash_len - 1,
-+ &flash_info[0]);
-+
-+#if 0
-+ flash_protect (FLAG_PROTECT_SET,
-+ CFG_ENV_ADDR,
-+ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
-+#endif
-+
-+ return size;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ */
-+void flash_print_info (flash_info_t * info)
-+{
-+ int i;
-+
-+ switch (info->flash_id & FLASH_VENDMASK) {
-+ case (AMD_MANUFACT & FLASH_VENDMASK):
-+ printf ("AMD: ");
-+ break;
-+ default:
-+ printf ("Unknown Vendor ");
-+ break;
-+ }
-+
-+ switch (info->flash_id & FLASH_TYPEMASK) {
-+ case (AMD_ID_LV400B & FLASH_TYPEMASK):
-+ printf ("1x Amd29LV400BB (4Mbit)\n");
-+ break;
-+ case (AMD_ID_LV800B & FLASH_TYPEMASK):
-+ printf ("1x Amd29LV800BB (8Mbit)\n");
-+ break;
-+ default:
-+ printf ("Unknown Chip Type\n");
-+ goto Done;
-+ break;
-+ }
-+
-+ printf (" Size: %ld MB in %d Sectors\n",
-+ info->size >> 20, info->sector_count);
-+
-+ printf (" Sector Start Addresses:");
-+ for (i = 0; i < info->sector_count; i++) {
-+ if ((i % 5) == 0) {
-+ printf ("\n ");
-+ }
-+ printf (" %08lX%s", info->start[i],
-+ info->protect[i] ? " (RO)" : " ");
-+ }
-+ printf ("\n");
-+
-+ Done:;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ */
-+
-+int flash_erase (flash_info_t * info, int s_first, int s_last)
-+{
-+ ushort result;
-+ int iflag, cflag, prot, sect;
-+ int rc = ERR_OK;
-+ int chip;
-+
-+ /* first look for protection bits */
-+
-+ if (info->flash_id == FLASH_UNKNOWN)
-+ return ERR_UNKNOWN_FLASH_TYPE;
-+
-+ if ((s_first < 0) || (s_first > s_last)) {
-+ return ERR_INVAL;
-+ }
-+
-+ if ((info->flash_id & FLASH_VENDMASK) !=
-+ (AMD_MANUFACT & FLASH_VENDMASK)) {
-+ return ERR_UNKNOWN_FLASH_VENDOR;
-+ }
-+
-+ prot = 0;
-+ for (sect = s_first; sect <= s_last; ++sect) {
-+ if (info->protect[sect]) {
-+ prot++;
-+ }
-+ }
-+ if (prot)
-+ return ERR_PROTECTED;
-+
-+ /*
-+ * Disable interrupts which might cause a timeout
-+ * here. Remember that our exception vectors are
-+ * at address 0 in the flash, and we don't want a
-+ * (ticker) exception to happen while the flash
-+ * chip is in programming mode.
-+ */
-+ cflag = icache_status ();
-+ icache_disable ();
-+ iflag = disable_interrupts ();
-+
-+ /* Start erase on unprotected sectors */
-+ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
-+ printf ("Erasing sector %2d ... ", sect);
-+
-+ /* arm simple, non interrupt dependent timer */
-+ reset_timer_masked ();
-+
-+ if (info->protect[sect] == 0) { /* not protected */
-+ vu_short *addr = (vu_short *) (info->start[sect]);
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ *addr = CMD_ERASE_CONFIRM;
-+
-+ /* wait until flash is ready */
-+ chip = 0;
-+
-+ do {
-+ result = *addr;
-+
-+ /* check timeout */
-+ if (get_timer_masked () >
-+ CFG_FLASH_ERASE_TOUT) {
-+ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-+ chip = TMO;
-+ break;
-+ }
-+
-+ if (!chip
-+ && (result & 0xFFFF) & BIT_ERASE_DONE)
-+ chip = READY;
-+
-+ if (!chip
-+ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
-+ chip = ERR;
-+
-+ } while (!chip);
-+
-+ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
-+
-+ if (chip == ERR) {
-+ rc = ERR_PROG_ERROR;
-+ goto outahere;
-+ }
-+ if (chip == TMO) {
-+ rc = ERR_TIMOUT;
-+ goto outahere;
-+ }
-+
-+ printf ("ok.\n");
-+ } else { /* it was protected */
-+
-+ printf ("protected!\n");
-+ }
-+ }
-+
-+ if (ctrlc ())
-+ printf ("User Interrupt!\n");
-+
-+ outahere:
-+ /* allow flash to settle - wait 10 ms */
-+ udelay_masked (10000);
-+
-+ if (iflag)
-+ enable_interrupts ();
-+
-+ if (cflag)
-+ icache_enable ();
-+
-+ return rc;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ * Copy memory to flash
-+ */
-+
-+volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
-+{
-+ vu_short *addr = (vu_short *) dest;
-+ ushort result;
-+ int rc = ERR_OK;
-+ int cflag, iflag;
-+ int chip;
-+
-+ /*
-+ * Check if Flash is (sufficiently) erased
-+ */
-+ result = *addr;
-+ if ((result & data) != data)
-+ return ERR_NOT_ERASED;
-+
-+
-+ /*
-+ * Disable interrupts which might cause a timeout
-+ * here. Remember that our exception vectors are
-+ * at address 0 in the flash, and we don't want a
-+ * (ticker) exception to happen while the flash
-+ * chip is in programming mode.
-+ */
-+ cflag = icache_status ();
-+ icache_disable ();
-+ iflag = disable_interrupts ();
-+
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
-+ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
-+ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
-+ *addr = CMD_PROGRAM;
-+ *addr = data;
-+
-+ /* arm simple, non interrupt dependent timer */
-+ reset_timer_masked ();
-+
-+ /* wait until flash is ready */
-+ chip = 0;
-+ do {
-+ result = *addr;
-+
-+ /* check timeout */
-+ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
-+ chip = ERR | TMO;
-+ break;
-+ }
-+ if (!chip && ((result & 0x80) == (data & 0x80)))
-+ chip = READY;
-+
-+ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
-+ result = *addr;
-+
-+ if ((result & 0x80) == (data & 0x80))
-+ chip = READY;
-+ else
-+ chip = ERR;
-+ }
-+
-+ } while (!chip);
-+
-+ *addr = CMD_READ_ARRAY;
-+
-+ if (chip == ERR || *addr != data)
-+ rc = ERR_PROG_ERROR;
-+
-+ if (iflag)
-+ enable_interrupts ();
-+
-+ if (cflag)
-+ icache_enable ();
-+
-+ return rc;
-+}
-+
-+/*-----------------------------------------------------------------------
-+ * Copy memory to flash.
-+ */
-+
-+int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-+{
-+ ulong cp, wp;
-+ int l;
-+ int i, rc;
-+ ushort data;
-+
-+ wp = (addr & ~1); /* get lower word aligned address */
-+
-+ /*
-+ * handle unaligned start bytes
-+ */
-+ if ((l = addr - wp) != 0) {
-+ data = 0;
-+ for (i = 0, cp = wp; i < l; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+ for (; i < 2 && cnt > 0; ++i) {
-+ data = (data >> 8) | (*src++ << 8);
-+ --cnt;
-+ ++cp;
-+ }
-+ for (; cnt == 0 && i < 2; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+
-+ if ((rc = write_hword (info, wp, data)) != 0) {
-+ return (rc);
-+ }
-+ wp += 2;
-+ }
-+
-+ /*
-+ * handle word aligned part
-+ */
-+ while (cnt >= 2) {
-+ data = *((vu_short *) src);
-+ if ((rc = write_hword (info, wp, data)) != 0) {
-+ return (rc);
-+ }
-+ src += 2;
-+ wp += 2;
-+ cnt -= 2;
-+ }
-+
-+ if (cnt == 0) {
-+ return ERR_OK;
-+ }
-+
-+ /*
-+ * handle unaligned tail bytes
-+ */
-+ data = 0;
-+ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
-+ data = (data >> 8) | (*src++ << 8);
-+ --cnt;
-+ }
-+ for (; i < 2; ++i, ++cp) {
-+ data = (data >> 8) | (*(uchar *) cp << 8);
-+ }
-+
-+ return write_hword (info, wp, data);
-+}
-Index: git/board/qt2410/lowlevel_init.S
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/lowlevel_init.S 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,173 @@
-+/*
-+ * Memory Setup stuff - taken from blob memsetup.S
-+ *
-+ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
-+ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
-+ *
-+ * Modified for the Samsung SMDK2410 by
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+
-+#include <config.h>
-+#include <version.h>
-+
-+
-+/* some parameters for the board */
-+
-+/*
-+ *
-+ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
-+ *
-+ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
-+ *
-+ */
-+
-+#define BWSCON 0x48000000
-+
-+/* BWSCON */
-+#define DW8 (0x0)
-+#define DW16 (0x1)
-+#define DW32 (0x2)
-+#define WAIT (0x1<<2)
-+#define UBLB (0x1<<3)
-+
-+#define B1_BWSCON (DW32)
-+#define B2_BWSCON (DW16)
-+#define B3_BWSCON (DW16 + WAIT + UBLB)
-+#define B4_BWSCON (DW16)
-+#define B5_BWSCON (DW16)
-+#define B6_BWSCON (DW32)
-+#define B7_BWSCON (DW32)
-+
-+/* BANK0CON */
-+#define B0_Tacs 0x0 /* 0clk */
-+#define B0_Tcos 0x0 /* 0clk */
-+#define B0_Tacc 0x7 /* 14clk */
-+#define B0_Tcoh 0x0 /* 0clk */
-+#define B0_Tah 0x0 /* 0clk */
-+#define B0_Tacp 0x0
-+#define B0_PMC 0x0 /* normal */
-+
-+/* BANK1CON */
-+#define B1_Tacs 0x0 /* 0clk */
-+#define B1_Tcos 0x0 /* 0clk */
-+#define B1_Tacc 0x7 /* 14clk */
-+#define B1_Tcoh 0x0 /* 0clk */
-+#define B1_Tah 0x0 /* 0clk */
-+#define B1_Tacp 0x0
-+#define B1_PMC 0x0
-+
-+#define B2_Tacs 0x0
-+#define B2_Tcos 0x0
-+#define B2_Tacc 0x7
-+#define B2_Tcoh 0x0
-+#define B2_Tah 0x0
-+#define B2_Tacp 0x0
-+#define B2_PMC 0x0
-+
-+#define B3_Tacs 0x0 /* 0clk */
-+#define B3_Tcos 0x3 /* 4clk */
-+#define B3_Tacc 0x7 /* 14clk */
-+#define B3_Tcoh 0x1 /* 1clk */
-+#define B3_Tah 0x0 /* 0clk */
-+#define B3_Tacp 0x3 /* 6clk */
-+#define B3_PMC 0x0 /* normal */
-+
-+#define B4_Tacs 0x0 /* 0clk */
-+#define B4_Tcos 0x0 /* 0clk */
-+#define B4_Tacc 0x7 /* 14clk */
-+#define B4_Tcoh 0x0 /* 0clk */
-+#define B4_Tah 0x0 /* 0clk */
-+#define B4_Tacp 0x0
-+#define B4_PMC 0x0 /* normal */
-+
-+#define B5_Tacs 0x0 /* 0clk */
-+#define B5_Tcos 0x0 /* 0clk */
-+#define B5_Tacc 0x7 /* 14clk */
-+#define B5_Tcoh 0x0 /* 0clk */
-+#define B5_Tah 0x0 /* 0clk */
-+#define B5_Tacp 0x0
-+#define B5_PMC 0x0 /* normal */
-+
-+#define B6_MT 0x3 /* SDRAM */
-+#define B6_Trcd 0x1
-+#define B6_SCAN 0x1 /* 9bit */
-+
-+#define B7_MT 0x3 /* SDRAM */
-+#define B7_Trcd 0x1 /* 3clk */
-+#define B7_SCAN 0x1 /* 9bit */
-+
-+/* REFRESH parameter */
-+#define REFEN 0x1 /* Refresh enable */
-+#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
-+#define Trp 0x1 /* 3clk */
-+#define Trc 0x3 /* 7clk */
-+#define Tchr 0x2 /* 3clk */
-+//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
-+#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */
-+/**************************************/
-+
-+_TEXT_BASE:
-+ .word TEXT_BASE
-+
-+.globl lowlevel_init
-+lowlevel_init:
-+ /* memory control configuration */
-+ /* make r0 relative the current location so that it */
-+ /* reads SMRDATA out of FLASH rather than memory ! */
-+ ldr r0, =SMRDATA
-+ ldr r1, _TEXT_BASE
-+ sub r0, r0, r1
-+ ldr r1, =BWSCON /* Bus Width Status Controller */
-+ add r2, r0, #13*4
-+0:
-+ ldr r3, [r0], #4
-+ str r3, [r1], #4
-+ cmp r2, r0
-+ bne 0b
-+
-+ /* setup asynchronous bus mode */
-+ mrc p15, 0, r1 ,c1 ,c0, 0
-+ orr r1, r1, #0xc0000000
-+ mcr p15, 0, r1, c1, c0, 0
-+
-+ /* everything is fine now */
-+ mov pc, lr
-+
-+ .ltorg
-+/* the literal pools origin */
-+
-+SMRDATA:
-+ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
-+ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
-+ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
-+ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
-+ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
-+ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
-+ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
-+ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
-+ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
-+ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
-+ .word 0xb2
-+ .word 0x30
-+ .word 0x30
-Index: git/board/qt2410/qt2410.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/qt2410.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,127 @@
-+/*
-+ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * based on existing S3C2410 startup code in u-boot:
-+ *
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ *
-+ * (C) Copyright 2002
-+ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+#include <s3c2410.h>
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#if 1
-+//#define M_MDIV 0xA1 /* Fout = 202.8MHz */
-+//#define M_PDIV 0x3
-+//#define M_SDIV 0x1
-+#define M_MDIV 0x90 /* Fout = 202.8MHz */
-+#define M_PDIV 0x7
-+#define M_SDIV 0x0
-+#else
-+#define M_MDIV 0x5c /* Fout = 150.0MHz */
-+#define M_PDIV 0x4
-+#define M_SDIV 0x0
-+#endif
-+
-+#if 1
-+#define U_M_MDIV 0x78
-+#define U_M_PDIV 0x2
-+#define U_M_SDIV 0x3
-+#else
-+#define U_M_MDIV 0x48
-+#define U_M_PDIV 0x3
-+#define U_M_SDIV 0x2
-+#endif
-+
-+static inline void delay (unsigned long loops)
-+{
-+ __asm__ volatile ("1:\n"
-+ "subs %0, %1, #1\n"
-+ "bne 1b":"=r" (loops):"0" (loops));
-+}
-+
-+/*
-+ * Miscellaneous platform dependent initialisations
-+ */
-+
-+int board_init (void)
-+{
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
-+
-+ /* to reduce PLL lock time, adjust the LOCKTIME register */
-+ clk_power->LOCKTIME = 0xFFFFFF;
-+
-+ /* configure MPLL */
-+ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (4000);
-+
-+ /* configure UPLL */
-+ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
-+
-+ /* some delay between MPLL and UPLL */
-+ delay (8000);
-+
-+ /* set up the I/O ports */
-+ gpio->GPACON = 0x007FFFFF;
-+ gpio->GPBCON = 0x00044555;
-+ gpio->GPBUP = 0x000007FF;
-+ gpio->GPCCON = 0xAAAAAAAA;
-+ gpio->GPCUP = 0x0000FFFF;
-+ gpio->GPDCON = 0xAAAAAAAA;
-+ gpio->GPDUP = 0x0000FFFF;
-+ gpio->GPECON = 0xAAAAAAAA;
-+ gpio->GPEUP = 0x0000FFFF;
-+ gpio->GPFCON = 0x000055AA;
-+ gpio->GPFUP = 0x000000FF;
-+ gpio->GPGCON = 0xFF95FFBA;
-+ //gpio->GPGUP = 0x0000FFFF;
-+ gpio->GPGUP = 0x0000AFEF;
-+ gpio->GPHCON = 0x0028FAAA;
-+ gpio->GPHUP = 0x000007FF;
-+
-+ /* arch number of SMDK2410-Board */
-+ gd->bd->bi_arch_number = MACH_TYPE_QT2410;
-+
-+ /* adress of boot parameters */
-+ gd->bd->bi_boot_params = 0x30000100;
-+
-+ icache_enable();
-+ dcache_enable();
-+
-+ return 0;
-+}
-+
-+int dram_init (void)
-+{
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+ return 0;
-+}
-Index: git/board/qt2410/u-boot.lds
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/board/qt2410/u-boot.lds 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,57 @@
-+/*
-+ * (C) Copyright 2002
-+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
-+/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
-+OUTPUT_ARCH(arm)
-+ENTRY(_start)
-+SECTIONS
-+{
-+ . = 0x00000000;
-+
-+ . = ALIGN(4);
-+ .text :
-+ {
-+ cpu/arm920t/start.o (.text)
-+ *(.text)
-+ }
-+
-+ . = ALIGN(4);
-+ .rodata : { *(.rodata) }
-+
-+ . = ALIGN(4);
-+ .data : { *(.data) }
-+
-+ . = ALIGN(4);
-+ .got : { *(.got) }
-+
-+ . = .;
-+ __u_boot_cmd_start = .;
-+ .u_boot_cmd : { *(.u_boot_cmd) }
-+ __u_boot_cmd_end = .;
-+
-+ . = ALIGN(4);
-+ __bss_start = .;
-+ .bss : { *(.bss) }
-+ _end = .;
-+}
-Index: git/common/Makefile
-===================================================================
---- git.orig/common/Makefile 2007-01-04 12:21:15.000000000 +0100
-+++ git/common/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -28,7 +28,7 @@
- AOBJS =
-
- COBJS = main.o ACEX1K.o altera.o bedbug.o circbuf.o \
-- cmd_ace.o cmd_autoscript.o \
-+ cmd_ace.o cmd_arm920.o cmd_autoscript.o \
- cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \
- cmd_cache.o cmd_console.o \
- cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \
-Index: git/common/cmd_arm920.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/common/cmd_arm920.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,64 @@
-+/*
-+ * (C) Copyright 2003
-+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+/*
-+ * Boot support
-+ */
-+#include <common.h>
-+#include <command.h>
-+#include <net.h> /* for print_IPaddr */
-+
-+DECLARE_GLOBAL_DATA_PTR;
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_BDI)
-+
-+extern unsigned long read_p15_c1(void);
-+extern void write_p15_c1(unsigned long);
-+
-+int do_arm920 ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-+{
-+ int i;
-+
-+ if (strcmp(argv[1], "cp15c1")) {
-+ printf("Usage:\n%s\n", cmdtp->usage);
-+ return 1;
-+ }
-+
-+ if (!strcmp(argv[2], "write")) {
-+ ulong val = simple_strtoul(argv[3], NULL, 16);
-+ printf("setting cp15c1 to 0x%08x\n", val);
-+ write_p15_c1(val);
-+ } else if (!strcmp(argv[2], "read"))
-+ printf("cp15c1 = 0x%08x\n", read_p15_c1());
-+
-+ return 0;
-+}
-+
-+/* -------------------------------------------------------------------- */
-+
-+U_BOOT_CMD(
-+ arm920, 4, 1, do_arm920,
-+ "arm920_cp15 - print cp15",
-+ NULL
-+);
-+#endif /* CFG_CMD_BDI */
-Index: git/cpu/arm920t/cpu.c
-===================================================================
---- git.orig/cpu/arm920t/cpu.c 2007-01-04 12:21:15.000000000 +0100
-+++ git/cpu/arm920t/cpu.c 2007-01-04 12:21:18.000000000 +0100
-@@ -38,7 +38,7 @@
- #endif
-
- /* read co-processor 15, register #1 (control register) */
--static unsigned long read_p15_c1 (void)
-+unsigned long read_p15_c1 (void)
- {
- unsigned long value;
-
-@@ -55,7 +55,7 @@
- }
-
- /* write to co-processor 15, register #1 (control register) */
--static void write_p15_c1 (unsigned long value)
-+void write_p15_c1 (unsigned long value)
- {
- #ifdef MMU_DEBUG
- printf ("write %08lx to p15/c1\n", value);
-Index: git/cpu/arm920t/s3c24x0/Makefile
-===================================================================
---- git.orig/cpu/arm920t/s3c24x0/Makefile 2007-01-04 12:21:15.000000000 +0100
-+++ git/cpu/arm920t/s3c24x0/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -26,7 +26,7 @@
- LIB = $(obj)lib$(SOC).a
-
- COBJS = i2c.o interrupts.o serial.o speed.o \
-- usb_ohci.o
-+ usb_ohci.o mmc.o nand_read.o nand.o
-
- SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
- OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
-Index: git/cpu/arm920t/s3c24x0/mmc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/cpu/arm920t/s3c24x0/mmc.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,568 @@
-+/*
-+ * u-boot S3C2410 MMC/SD card driver
-+ * (C) Copyright 2006 by Harald Welte <laforge@gnumonks.org>
-+ *
-+ * based on u-boot pxa MMC driver and linux/drivers/mmc/s3c2410mci.c
-+ * (C) 2005-2005 Thomas Kleffel
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <config.h>
-+#include <common.h>
-+#include <mmc.h>
-+#include <asm/errno.h>
-+#include <asm/io.h>
-+#include <s3c2410.h>
-+#include <part.h>
-+
-+#ifdef CONFIG_MMC
-+
-+#define CONFIG_MMC_WIDE
-+
-+//#define MMC_DEBUG
-+
-+#ifdef MMC_DEBUG
-+#ifdef debug
-+#undef debug
-+#endif
-+#define debug printf
-+#endif
-+
-+static S3C2410_SDI *sdi;
-+
-+extern int
-+fat_register_device(block_dev_desc_t *dev_desc, int part_no);
-+
-+static block_dev_desc_t mmc_dev;
-+
-+block_dev_desc_t * mmc_get_dev(int dev)
-+{
-+ return ((block_dev_desc_t *)&mmc_dev);
-+}
-+
-+/*
-+ * FIXME needs to read cid and csd info to determine block size
-+ * and other parameters
-+ */
-+static uchar mmc_buf[MMC_BLOCK_SIZE];
-+static mmc_csd_t mmc_csd;
-+static int mmc_ready = 0;
-+static int wide = 0;
-+
-+
-+#define CMD_F_RESP 0x01
-+#define CMD_F_RESP_LONG 0x02
-+
-+static u_int32_t *
-+/****************************************************/
-+mmc_cmd(ushort cmd, ulong arg, ushort flags)
-+/****************************************************/
-+{
-+ static u_int32_t resp[5];
-+ ulong status;
-+ int i;
-+
-+ u_int32_t ccon, csta;
-+ u_int32_t csta_rdy_bit = S3C2410_SDICMDSTAT_CMDSENT;
-+
-+ memset(resp, 0, sizeof(resp));
-+
-+ debug("mmc_cmd CMD%d arg=0x%08x flags=%x\n", cmd, arg, flags);
-+
-+ sdi->SDICSTA = 0xffffffff;
-+ sdi->SDIDSTA = 0xffffffff;
-+ sdi->SDIFSTA = 0xffffffff;
-+
-+ sdi->SDICARG = arg;
-+
-+ ccon = cmd & S3C2410_SDICMDCON_INDEX;
-+ ccon |= S3C2410_SDICMDCON_SENDERHOST|S3C2410_SDICMDCON_CMDSTART;
-+
-+ if (flags & CMD_F_RESP) {
-+ ccon |= S3C2410_SDICMDCON_WAITRSP;
-+ csta_rdy_bit = S3C2410_SDICMDSTAT_RSPFIN; /* 1 << 9 */
-+ }
-+
-+ if (flags & CMD_F_RESP_LONG)
-+ ccon |= S3C2410_SDICMDCON_LONGRSP;
-+
-+ sdi->SDICCON = ccon;
-+
-+ while (1) {
-+ csta = sdi->SDICSTA;
-+ if (csta & csta_rdy_bit)
-+ break;
-+ if (csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
-+ printf("===============> MMC CMD Timeout\n");
-+ sdi->SDICSTA |= S3C2410_SDICMDSTAT_CMDTIMEOUT;
-+ break;
-+ }
-+ }
-+
-+ debug("final MMC CMD status 0x%x\n", csta);
-+
-+ sdi->SDICSTA |= csta_rdy_bit;
-+
-+ if (flags & CMD_F_RESP) {
-+ resp[0] = sdi->SDIRSP0;
-+ resp[1] = sdi->SDIRSP1;
-+ resp[2] = sdi->SDIRSP2;
-+ resp[3] = sdi->SDIRSP3;
-+ }
-+
-+#if 0
-+ for (i=0; i<4; i ++) {
-+ debug("MMC resp[%d] = 0x%08x\n", i, resp[i]);
-+ }
-+#endif
-+
-+ return resp;
-+}
-+
-+#define FIFO_FILL(host) ((host->SDIFSTA & S3C2410_SDIFSTA_COUNTMASK) >> 2)
-+
-+static int
-+/****************************************************/
-+mmc_block_read(uchar *dst, ulong src, ulong len)
-+/****************************************************/
-+{
-+ u_int32_t dcon, fifo;
-+ u_int32_t *dst_u32 = (u_int32_t *)dst;
-+ u_int32_t *resp;
-+
-+ if (len == 0) {
-+ return 0;
-+ }
-+
-+ debug("mmc_block_rd dst %lx src %lx len %d\n", (ulong)dst, src, len);
-+
-+ /* set block len */
-+ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, len, CMD_F_RESP);
-+ sdi->SDIBSIZE = len;
-+
-+ //sdi->SDIPRE = 0xff;
-+
-+ /* setup data */
-+ dcon = (len >> 9) & S3C2410_SDIDCON_BLKNUM_MASK;
-+ dcon |= S3C2410_SDIDCON_BLOCKMODE;
-+ dcon |= S3C2410_SDIDCON_RXAFTERCMD|S3C2410_SDIDCON_XFER_RXSTART;
-+ if (wide)
-+ dcon |= S3C2410_SDIDCON_WIDEBUS;
-+ sdi->SDIDCON = dcon;
-+
-+ /* send read command */
-+ resp = mmc_cmd(MMC_CMD_READ_BLOCK, src, CMD_F_RESP);
-+
-+ while (len > 0) {
-+ u_int32_t sdidsta = sdi->SDIDSTA;
-+ fifo = FIFO_FILL(sdi);
-+ if (sdidsta & (S3C2410_SDIDSTA_FIFOFAIL|
-+ S3C2410_SDIDSTA_CRCFAIL|
-+ S3C2410_SDIDSTA_RXCRCFAIL|
-+ S3C2410_SDIDSTA_DATATIMEOUT)) {
-+ printf("mmc_block_read: err SDIDSTA=0x%08x\n", sdidsta);
-+ return -EIO;
-+ }
-+
-+ while (fifo--) {
-+ //debug("dst_u32 = 0x%08x\n", dst_u32);
-+ *(dst_u32++) = sdi->SDIDAT;
-+ if (len >= 4)
-+ len -= 4;
-+ else {
-+ len = 0;
-+ break;
-+ }
-+ }
-+ }
-+
-+#if 1
-+ debug("waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
-+ while (!(sdi->SDIDSTA & (1 << 4))) {}
-+ debug("done waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
-+#endif
-+
-+ sdi->SDIDCON = 0;
-+
-+#if 0
-+ if (!(sdi->SDIDSTA & S3C2410_SDIDSTA_XFERFINISH))
-+ printf("mmc_block_read; transfer not finished!\n");
-+#endif
-+
-+ return 0;
-+}
-+
-+static int
-+/****************************************************/
-+mmc_block_write(ulong dst, uchar *src, int len)
-+/****************************************************/
-+{
-+#if 0
-+ uchar *resp;
-+ ushort argh, argl;
-+ ulong status;
-+
-+ if (len == 0) {
-+ return 0;
-+ }
-+
-+ debug("mmc_block_wr dst %lx src %lx len %d\n", dst, (ulong)src, len);
-+
-+ argh = len >> 16;
-+ argl = len & 0xffff;
-+
-+ /* set block len */
-+ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, argh, argl, CMD_F_RESP);
-+
-+ /* send write command */
-+ argh = dst >> 16;
-+ argl = dst & 0xffff;
-+ MMC_STRPCL = MMC_STRPCL_STOP_CLK;
-+ MMC_NOB = 1;
-+ MMC_BLKLEN = len;
-+ resp = mmc_cmd(MMC_CMD_WRITE_BLOCK, dst, CMD_F_RESP,
-+ MMC_CMDAT_R1|MMC_CMDAT_WRITE|MMC_CMDAT_BLOCK|MMC_CMDAT_DATA_EN);
-+
-+ MMC_I_MASK = ~MMC_I_MASK_TXFIFO_WR_REQ;
-+ while (len) {
-+ if (MMC_I_REG & MMC_I_REG_TXFIFO_WR_REQ) {
-+ int i, bytes = min(32,len);
-+
-+ for (i=0; i<bytes; i++) {
-+ MMC_TXFIFO = *src++;
-+ }
-+ if (bytes < 32) {
-+ MMC_PRTBUF = MMC_PRTBUF_BUF_PART_FULL;
-+ }
-+ len -= bytes;
-+ }
-+ status = MMC_STAT;
-+ if (status & MMC_STAT_ERRORS) {
-+ printf("MMC_STAT error %lx\n", status);
-+ return -1;
-+ }
-+ }
-+ MMC_I_MASK = ~MMC_I_MASK_DATA_TRAN_DONE;
-+ while (!(MMC_I_REG & MMC_I_REG_DATA_TRAN_DONE));
-+ MMC_I_MASK = ~MMC_I_MASK_PRG_DONE;
-+ while (!(MMC_I_REG & MMC_I_REG_PRG_DONE));
-+ status = MMC_STAT;
-+ if (status & MMC_STAT_ERRORS) {
-+ printf("MMC_STAT error %lx\n", status);
-+ return -1;
-+ }
-+#endif
-+ return 0;
-+}
-+
-+
-+int
-+/****************************************************/
-+mmc_read(ulong src, uchar *dst, int size)
-+/****************************************************/
-+{
-+ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
-+ ulong mmc_block_size, mmc_block_address;
-+
-+ if (size == 0) {
-+ return 0;
-+ }
-+
-+ if (!mmc_ready) {
-+ printf("Please initialize the MMC first\n");
-+ return -1;
-+ }
-+
-+ mmc_block_size = MMC_BLOCK_SIZE;
-+ mmc_block_address = ~(mmc_block_size - 1);
-+
-+ src -= CFG_MMC_BASE;
-+ end = src + size;
-+ part_start = ~mmc_block_address & src;
-+ part_end = ~mmc_block_address & end;
-+ aligned_start = mmc_block_address & src;
-+ aligned_end = mmc_block_address & end;
-+
-+ /* all block aligned accesses */
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_start) {
-+ part_len = mmc_block_size - part_start;
-+ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(dst, mmc_buf+part_start, part_len);
-+ dst += part_len;
-+ src += part_len;
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ for (; src < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
-+ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read((uchar *)(dst), src, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_end && src < end) {
-+ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(dst, mmc_buf, part_end);
-+ }
-+ return 0;
-+}
-+
-+int
-+/****************************************************/
-+mmc_write(uchar *src, ulong dst, int size)
-+/****************************************************/
-+{
-+ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
-+ ulong mmc_block_size, mmc_block_address;
-+
-+ if (size == 0) {
-+ return 0;
-+ }
-+
-+ if (!mmc_ready) {
-+ printf("Please initialize the MMC first\n");
-+ return -1;
-+ }
-+
-+ mmc_block_size = MMC_BLOCK_SIZE;
-+ mmc_block_address = ~(mmc_block_size - 1);
-+
-+ dst -= CFG_MMC_BASE;
-+ end = dst + size;
-+ part_start = ~mmc_block_address & dst;
-+ part_end = ~mmc_block_address & end;
-+ aligned_start = mmc_block_address & dst;
-+ aligned_end = mmc_block_address & end;
-+
-+ /* all block aligned accesses */
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_start) {
-+ part_len = mmc_block_size - part_start;
-+ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ (ulong)src, dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(mmc_buf+part_start, src, part_len);
-+ if ((mmc_block_write(aligned_start, mmc_buf, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ dst += part_len;
-+ src += part_len;
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ for (; dst < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
-+ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_write(dst, (uchar *)src, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if (part_end && dst < end) {
-+ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
-+ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
-+ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ memcpy(mmc_buf, src, part_end);
-+ if ((mmc_block_write(aligned_end, mmc_buf, mmc_block_size)) < 0) {
-+ return -1;
-+ }
-+ }
-+ return 0;
-+}
-+
-+ulong
-+/****************************************************/
-+mmc_bread(int dev_num, ulong blknr, ulong blkcnt, ulong *dst)
-+/****************************************************/
-+{
-+ int mmc_block_size = MMC_BLOCK_SIZE;
-+ ulong src = blknr * mmc_block_size + CFG_MMC_BASE;
-+
-+ mmc_read(src, (uchar *)dst, blkcnt*mmc_block_size);
-+ return blkcnt;
-+}
-+
-+static u_int16_t rca = MMC_DEFAULT_RCA;
-+
-+static u_int32_t mmc_size(const struct mmc_csd *csd)
-+{
-+ u_int32_t block_len, mult, blocknr;
-+
-+ block_len = csd->read_bl_len << 12;
-+ mult = csd->c_size_mult1 << 8;
-+ blocknr = (csd->c_size+1) * mult;
-+
-+ return blocknr * block_len;
-+}
-+
-+int
-+/****************************************************/
-+mmc_init(int verbose)
-+/****************************************************/
-+{
-+ int retries, rc = -ENODEV;
-+ int is_sd = 0;
-+ u_int32_t *resp;
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+
-+ sdi = S3C2410_GetBase_SDI();
-+
-+ debug("mmc_init(PCLK=%u)\n", get_PCLK());
-+
-+ clk_power->CLKCON |= (1 << 9);
-+
-+ /* S3C2410 has some bug that prevents reliable operation at higher speed */
-+ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
-+ sdi->SDIPRE = 0x02; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
-+ sdi->SDIBSIZE = 512;
-+ sdi->SDIDTIMER = 0xffff;
-+ sdi->SDIIMSK = 0x0;
-+ sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2440_SDICON_MMCCLOCK;
-+ udelay(125000); /* FIXME: 74 SDCLK cycles */
-+
-+ mmc_csd.c_size = 0;
-+
-+ /* reset */
-+ retries = 10;
-+ resp = mmc_cmd(MMC_CMD_RESET, 0, 0);
-+
-+ printf("trying to detect SD Card...\n");
-+ while (retries--) {
-+ int i;
-+ udelay(100000);
-+ resp = mmc_cmd(55, 0x00000000, CMD_F_RESP);
-+ resp = mmc_cmd(41, 0x00300000, CMD_F_RESP);
-+
-+ if (resp[0] & (1 << 31)) {
-+ is_sd = 1;
-+ break;
-+ }
-+ }
-+
-+ if (retries == 0 && !is_sd) {
-+ retries = 10;
-+ printf("failed to detect SD Card, trying MMC\n");
-+ resp = mmc_cmd(MMC_CMD_SEND_OP_COND, 0x00ffc000, CMD_F_RESP);
-+ while (retries-- && resp && !(resp[4] & 0x80)) {
-+ debug("resp %x %x\n", resp[0], resp[1]);
-+ udelay(50);
-+ resp = mmc_cmd(1, 0x00ffff00, CMD_F_RESP);
-+ }
-+ }
-+
-+ /* try to get card id */
-+ resp = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, CMD_F_RESP|CMD_F_RESP_LONG);
-+ if (resp) {
-+ /* TODO configure mmc driver depending on card attributes */
-+ mmc_cid_t *cid = (mmc_cid_t *)resp;
-+ if (verbose) {
-+ printf("MMC found. Card desciption is:\n");
-+ printf("Manufacturer ID = %02x%02x%02x\n",
-+ cid->id[0], cid->id[1], cid->id[2]);
-+ printf("HW/FW Revision = %x %x\n",cid->hwrev, cid->fwrev);
-+ cid->hwrev = cid->fwrev = 0; /* null terminate string */
-+ printf("Product Name = %s\n",cid->name);
-+ printf("Serial Number = %02x%02x%02x\n",
-+ cid->sn[0], cid->sn[1], cid->sn[2]);
-+ printf("Month = %d\n",cid->month);
-+ printf("Year = %d\n",1997 + cid->year);
-+ }
-+ /* fill in device description */
-+ mmc_dev.if_type = IF_TYPE_MMC;
-+ mmc_dev.part_type = PART_TYPE_DOS;
-+ mmc_dev.dev = 0;
-+ mmc_dev.lun = 0;
-+ mmc_dev.type = 0;
-+ /* FIXME fill in the correct size (is set to 32MByte) */
-+ mmc_dev.blksz = 512;
-+ mmc_dev.lba = 0x10000;
-+ sprintf(mmc_dev.vendor,"Man %02x%02x%02x Snr %02x%02x%02x",
-+ cid->id[0], cid->id[1], cid->id[2],
-+ cid->sn[0], cid->sn[1], cid->sn[2]);
-+ sprintf(mmc_dev.product,"%s",cid->name);
-+ sprintf(mmc_dev.revision,"%x %x",cid->hwrev, cid->fwrev);
-+ mmc_dev.removable = 0;
-+ mmc_dev.block_read = mmc_bread;
-+
-+ /* MMC exists, get CSD too */
-+ resp = mmc_cmd(MMC_CMD_SET_RCA, MMC_DEFAULT_RCA, CMD_F_RESP);
-+ if (is_sd)
-+ rca = resp[0] >> 16;
-+
-+ resp = mmc_cmd(MMC_CMD_SEND_CSD, rca<<16, CMD_F_RESP|CMD_F_RESP_LONG);
-+ if (resp) {
-+ mmc_csd_t *csd = (mmc_csd_t *)resp;
-+ memcpy(&mmc_csd, csd, sizeof(csd));
-+ rc = 0;
-+ mmc_ready = 1;
-+ /* FIXME add verbose printout for csd */
-+ printf("READ_BL_LEN=%u, C_SIZE_MULT=%u, C_SIZE=%u\n",
-+ csd->read_bl_len, csd->c_size_mult1, csd->c_size);
-+ printf("size = %u\n", mmc_size(csd));
-+ }
-+ }
-+
-+ resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca<<16, CMD_F_RESP);
-+
-+#ifdef CONFIG_MMC_WIDE
-+ if (is_sd) {
-+ resp = mmc_cmd(55, rca<<16, CMD_F_RESP);
-+ resp = mmc_cmd(6, 0x02, CMD_F_RESP);
-+ wide = 1;
-+ }
-+#endif
-+
-+ fat_register_device(&mmc_dev,1); /* partitions start counting with 1 */
-+
-+ return rc;
-+}
-+
-+int
-+mmc_ident(block_dev_desc_t *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+mmc2info(ulong addr)
-+{
-+ /* FIXME hard codes to 32 MB device */
-+ if (addr >= CFG_MMC_BASE && addr < CFG_MMC_BASE + 0x02000000) {
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+#endif /* CONFIG_MMC */
-Index: git/cpu/arm920t/s3c24x0/nand.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/cpu/arm920t/s3c24x0/nand.c 2007-01-04 12:21:45.000000000 +0100
-@@ -0,0 +1,213 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+#if 0
-+#define DEBUGN printf
-+#else
-+#define DEBUGN(x, args ...) {}
-+#endif
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_NAND)
-+#if !defined(CFG_NAND_LEGACY)
-+
-+#include <nand.h>
-+#include <s3c2410.h>
-+
-+#define __REGb(x) (*(volatile unsigned char *)(x))
-+#define __REGi(x) (*(volatile unsigned int *)(x))
-+
-+#define NF_BASE 0x4e000000
-+#define NFCONF __REGi(NF_BASE + 0x0)
-+#define NFCMD __REGb(NF_BASE + 0x4)
-+#define NFADDR __REGb(NF_BASE + 0x8)
-+#define NFDATA __REGb(NF_BASE + 0xc)
-+#define NFSTAT __REGb(NF_BASE + 0x10)
-+
-+#define S3C2410_NFCONF_EN (1<<15)
-+#define S3C2410_NFCONF_512BYTE (1<<14)
-+#define S3C2410_NFCONF_4STEP (1<<13)
-+#define S3C2410_NFCONF_INITECC (1<<12)
-+#define S3C2410_NFCONF_nFCE (1<<11)
-+#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
-+#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
-+#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
-+
-+static u16 s3c2410_read_word(struct mtd_info *mtd)
-+{
-+ unsigned char byte = 0;
-+
-+ printf("s3c2410_read_word: WARNING, this function is not implemented yet\n");
-+ return byte;
-+}
-+
-+static void s3c2410_write_word(struct mtd_info *mtd, u16 word)
-+{
-+ printf("s3c2410_write_word: WARNING, this function is not implemented yet\n");
-+}
-+
-+static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
-+{
-+ struct nand_chip *chip = mtd->priv;
-+
-+ DEBUGN("hwcontrol(): 0x%02x: ", cmd);
-+
-+ switch (cmd) {
-+ case NAND_CTL_SETNCE:
-+ NFCONF &= ~S3C2410_NFCONF_nFCE;
-+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
-+ break;
-+ case NAND_CTL_CLRNCE:
-+ NFCONF |= S3C2410_NFCONF_nFCE;
-+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
-+ break;
-+ case NAND_CTL_SETALE:
-+ chip->IO_ADDR_W = NF_BASE + 0x8;
-+ DEBUGN("SETALE\n");
-+ break;
-+ case NAND_CTL_SETCLE:
-+ chip->IO_ADDR_W = NF_BASE + 0x4;
-+ DEBUGN("SETCLE\n");
-+ break;
-+ default:
-+ chip->IO_ADDR_W = NF_BASE + 0xc;
-+ break;
-+ }
-+ return;
-+}
-+
-+static int s3c2410_dev_ready(struct mtd_info *mtd)
-+{
-+ DEBUGN("dev_ready\n");
-+ return (NFSTAT & 0x01);
-+}
-+
-+static void s3c2410_cmdfunc(struct mtd_info *mtd, unsigned cmd,
-+ int column, int page_addr)
-+{
-+ DEBUGN("cmdfunc(): 0x%02x, col=%d, page=%d\n", cmd, column, page_addr);
-+
-+ switch (cmd) {
-+ case NAND_CMD_READ0:
-+ case NAND_CMD_READ1:
-+ case NAND_CMD_READOOB:
-+ NFCMD = cmd;
-+ NFADDR = column & 0xff;
-+ NFADDR = page_addr & 0xff;
-+ NFADDR = (page_addr >> 8) & 0xff;
-+ NFADDR = (page_addr >> 16) & 0xff;
-+ break;
-+ case NAND_CMD_READID:
-+ NFCMD = cmd;
-+ NFADDR = 0;
-+ break;
-+ case NAND_CMD_PAGEPROG:
-+ NFCMD = cmd;
-+ printf("PAGEPROG not implemented\n");
-+ break;
-+ case NAND_CMD_ERASE1:
-+ NFCMD = cmd;
-+ NFADDR = page_addr & 0xff;
-+ NFADDR = (page_addr >> 8) & 0xff;
-+ NFADDR = (page_addr >> 16) & 0xff;
-+ break;
-+ case NAND_CMD_ERASE2:
-+ NFCMD = cmd;
-+ break;
-+ case NAND_CMD_SEQIN:
-+ printf("SEQIN not implemented\n");
-+ break;
-+ case NAND_CMD_STATUS:
-+ NFCMD = cmd;
-+ break;
-+ case NAND_CMD_RESET:
-+ NFCMD = cmd;
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ while (!s3c2410_dev_ready(mtd));
-+}
-+
-+int board_nand_init(struct nand_chip *nand)
-+{
-+ u_int32_t cfg;
-+ u_int8_t tacls, twrph0, twrph1;
-+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
-+
-+ DEBUGN("board_nand_init()\n");
-+
-+ clk_power->CLKCON |= (1 << 4);
-+
-+ /* initialize hardware */
-+ twrph0 = 3; twrph1 = 0; tacls = 0;
-+
-+ /* default timings: maximum */
-+ //twrph0 = 8; twrph1 = 8; tacls = 8;
-+
-+ cfg = S3C2410_NFCONF_EN;
-+ cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
-+ cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
-+ cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
-+
-+ //NFCONF = cfg;
-+ NFCONF = 0xf842;
-+
-+ /* initialize nand_chip data structure */
-+ nand->IO_ADDR_R = nand->IO_ADDR_W = 0x4e00000c;
-+
-+ /* read_buf and write_buf are default */
-+ /* read_byte and write_byte are default */
-+
-+ /* need to override word read/write since default routines try 16bit wide
-+ * register access of an (in our case) 8bit register */
-+ nand->read_word = s3c2410_read_word;
-+ nand->write_word = s3c2410_write_word;
-+
-+ /* hwcontrol always must be implemented */
-+ nand->hwcontrol = s3c2410_hwcontrol;
-+
-+ nand->dev_ready = s3c2410_dev_ready;
-+
-+ nand->eccmode = NAND_ECC_SOFT;
-+ nand->options = 0;
-+ //nand->waitfunc = dfc_wait;
-+
-+ //nand->cmdfunc = s3c2410_cmdfunc;
-+ //nand->autooob = &delta_oob;
-+ //nand->badblock_pattern = &delta_bbt_descr;
-+
-+#if 0
-+ /* reset */
-+ nand->hwcontrol(NULL, NAND_CTL_SETNCE);
-+ nand->cmdfunc(NULL, NAND_CMD_RESET, -1, -1);
-+ while (nand->dev_ready(NULL) == 0) {}
-+ nand->hwcontrol(NULL, NAND_CTL_CLRNCE);
-+#endif
-+
-+ DEBUGN("end of nand_init\n");
-+ return 0;
-+}
-+
-+#else
-+ #error "U-Boot legacy NAND support not available for S3C2410"
-+#endif
-+#endif
-Index: git/cpu/arm920t/s3c24x0/nand_read.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/cpu/arm920t/s3c24x0/nand_read.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,75 @@
-+/*
-+ * nand_read.c: Simple NAND read functions for booting from NAND
-+ *
-+ * Taken from GPLv2 licensed vivi bootloader,
-+ * Copyright (C) 2002 MIZI Research, Inc.
-+ *
-+ * Author: Hwang, Chideok <hwang@mizi.com>
-+ * Date : $Date: 2004/02/04 10:37:37 $
-+ *
-+ * u-boot integration (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
-+ */
-+
-+#include <common.h>
-+
-+#ifdef CONFIG_S3C2410_NAND_BOOT
-+
-+#define __REGb(x) (*(volatile unsigned char *)(x))
-+#define __REGi(x) (*(volatile unsigned int *)(x))
-+#define NF_BASE 0x4e000000
-+#define NFCONF __REGi(NF_BASE + 0x0)
-+#define NFCMD __REGb(NF_BASE + 0x4)
-+#define NFADDR __REGb(NF_BASE + 0x8)
-+#define NFDATA __REGb(NF_BASE + 0xc)
-+#define NFSTAT __REGb(NF_BASE + 0x10)
-+
-+#define BUSY 1
-+inline void wait_idle(void) {
-+ int i;
-+
-+ while(!(NFSTAT & BUSY))
-+ for(i=0; i<10; i++);
-+}
-+
-+#define NAND_SECTOR_SIZE 512
-+#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
-+
-+/* low level nand read function */
-+int
-+nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
-+{
-+ int i, j;
-+
-+ if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
-+ return -1; /* invalid alignment */
-+ }
-+
-+ /* chip Enable */
-+ NFCONF &= ~0x800;
-+ for(i=0; i<10; i++);
-+
-+ for(i=start_addr; i < (start_addr + size);) {
-+ /* READ0 */
-+ NFCMD = 0;
-+
-+ /* Write Address */
-+ NFADDR = i & 0xff;
-+ NFADDR = (i >> 9) & 0xff;
-+ NFADDR = (i >> 17) & 0xff;
-+ NFADDR = (i >> 25) & 0xff;
-+
-+ wait_idle();
-+
-+ for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
-+ *buf = (NFDATA & 0xff);
-+ buf++;
-+ }
-+ }
-+
-+ /* chip Disable */
-+ NFCONF |= 0x800; /* chip disable */
-+
-+ return 0;
-+}
-+
-+#endif /* CONFIG_S3C2410_NAND_BOOT */
-Index: git/cpu/arm920t/start.S
-===================================================================
---- git.orig/cpu/arm920t/start.S 2007-01-04 12:21:15.000000000 +0100
-+++ git/cpu/arm920t/start.S 2007-01-04 12:21:18.000000000 +0100
-@@ -5,6 +5,10 @@
- * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
- * Copyright (c) 2002 Gary Jennejohn <gj@denx.de>
- *
-+ * S3C2410 NAND portions
-+ * Copyright (c) 2001 MIZI Research, Inc.
-+ * Copyright (c) 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
-@@ -27,6 +31,7 @@
-
- #include <config.h>
- #include <version.h>
-+#include <s3c2410.h>
-
-
- /*
-@@ -158,9 +163,17 @@
- */
- #ifndef CONFIG_SKIP_LOWLEVEL_INIT
- bl cpu_init_crit
-+#else
-+ /* QT2410: configure bank 3 correctly to make ethernet work */
-+ ldr r1, =0x48000000
-+ ldr r2, =0x00001f4c
-+ str r2, [r1, #0x10]
-+ ldr r2, =0x2211d122
-+ str r2, [r1]
- #endif
-
- #ifndef CONFIG_SKIP_RELOCATE_UBOOT
-+#ifndef CONFIG_S3C2410_NAND_BOOT
- relocate: /* relocate U-Boot to RAM */
- adr r0, _start /* r0 <- current position of code */
- ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
-@@ -177,6 +190,93 @@
- stmia r1!, {r3-r10} /* copy to target address [r1] */
- cmp r0, r2 /* until source end addreee [r2] */
- ble copy_loop
-+#else /* NAND_BOOT */
-+relocate:
-+copy_myself:
-+ /* mov r10, lr */
-+
-+ @ reset NAND
-+ mov r1, #S3C2410_NAND_BASE
-+ ldr r2, =0xf842 @ initial value enable tacls=3,rph0=6,rph1=0
-+ str r2, [r1, #oNFCONF]
-+ ldr r2, [r1, #oNFCONF]
-+ bic r2, r2, #0x800 @ enable chip
-+ str r2, [r1, #oNFCONF]
-+ mov r2, #0xff @ RESET command
-+ strb r2, [r1, #oNFCMD]
-+ mov r3, #0 @ wait
-+1: add r3, r3, #0x1
-+ cmp r3, #0xa
-+ blt 1b
-+2: ldr r2, [r1, #oNFSTAT] @ wait ready
-+ tst r2, #0x1
-+ beq 2b
-+ ldr r2, [r1, #oNFCONF]
-+ orr r2, r2, #0x800 @ disable chip
-+ str r2, [r1, #oNFCONF]
-+
-+#if 0
-+ @ get ready to call C functions (for nand_read())
-+ ldr sp, DW_STACK_START @ setup stack pointer
-+ mov fp, #0 @ no previous frame, so fp=0
-+#else
-+ ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
-+ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
-+ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */
-+#ifdef CONFIG_USE_IRQ
-+ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
-+#endif
-+ sub sp, r0, #12 /* leave 3 words for abort-stack */
-+#endif
-+
-+ @ copy u-boot to RAM
-+ ldr r0, _TEXT_BASE
-+ mov r1, #0x0
-+ mov r2, #0x30000
-+ bl nand_read_ll
-+
-+ tst r0, #0x0
-+ beq ok_nand_read
-+#ifdef CONFIG_DEBUG_LL
-+bad_nand_read:
-+ ldr r0, STR_FAIL
-+ ldr r1, SerBase
-+ bl PrintWord
-+1: b 1b @ infinite loop
-+#endif
-+
-+ok_nand_read:
-+#ifdef CONFIG_DEBUG_LL
-+ ldr r0, STR_OK
-+ ldr r1, SerBase
-+ bl PrintWord
-+#endif
-+
-+ @ verify
-+ mov r0, #0
-+ @ldr r1, =0x33f00000
-+ ldr r1, _TEXT_BASE
-+ mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
-+go_next:
-+ ldr r3, [r0], #4
-+ ldr r4, [r1], #4
-+ teq r3, r4
-+ bne notmatch
-+ subs r2, r2, #4
-+ beq done_nand_read
-+ bne go_next
-+notmatch:
-+#ifdef CONFIG_DEBUG_LL
-+ sub r0, r0, #4
-+ ldr r1, SerBase
-+ bl PrintHexWord
-+ ldr r0, STR_FAIL
-+ ldr r1, SerBase
-+ bl PrintWord
-+#endif
-+1: b 1b
-+done_nand_read:
-+#endif /* NAND_BOOT */
- #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
-
- /* Set up the stack */
-Index: git/drivers/Makefile
-===================================================================
---- git.orig/drivers/Makefile 2007-01-04 12:21:15.000000000 +0100
-+++ git/drivers/Makefile 2007-01-04 12:21:18.000000000 +0100
-@@ -51,7 +51,7 @@
- ks8695eth.o \
- pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
- rpx_pcmcia.o \
-- fsl_i2c.o
-+ fsl_i2c.o s3c2410_fb.o
-
- SRCS := $(COBJS:.o=.c)
- OBJS := $(addprefix $(obj),$(COBJS))
-Index: git/drivers/cs8900.c
-===================================================================
---- git.orig/drivers/cs8900.c 2007-01-04 12:21:15.000000000 +0100
-+++ git/drivers/cs8900.c 2007-01-04 12:21:18.000000000 +0100
-@@ -120,6 +120,7 @@
- unsigned char env_enetaddr[6];
- char *tmp = getenv ("ethaddr");
- char *end;
-+ unsigned short chip_id;
-
- for (i=0; i<6; i++) {
- env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;
-@@ -128,7 +129,9 @@
- }
-
- /* verify chip id */
-- if (get_reg_init_bus (PP_ChipID) != 0x630e)
-+ chip_id = get_reg_init_bus (PP_ChipID);
-+ printf("\ncs8900a chipid 0x%04x\n", chip_id);
-+ if (chip_id != 0x630e)
- return;
- eth_reset ();
- if ((get_reg (PP_SelfST) & (PP_SelfSTAT_EEPROM | PP_SelfSTAT_EEPROM_OK)) ==
-Index: git/drivers/s3c2410_fb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/s3c2410_fb.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,182 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#include <common.h>
-+
-+#if defined(CONFIG_VIDEO_S3C2410)
-+
-+#include <video_fb.h>
-+#include "videomodes.h"
-+#include <s3c2410.h>
-+/*
-+ * Export Graphic Device
-+ */
-+GraphicDevice smi;
-+
-+#define VIDEO_MEM_SIZE 0x200000
-+
-+/*******************************************************************************
-+ *
-+ * Init video chip with common Linux graphic modes (lilo)
-+ */
-+void *video_hw_init (void)
-+{
-+ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
-+ GraphicDevice *pGD = (GraphicDevice *)&smi;
-+ int videomode;
-+ unsigned long t1, hsynch, vsynch;
-+ char *penv;
-+ int tmp, i, bits_per_pixel;
-+ struct ctfb_res_modes *res_mode;
-+ struct ctfb_res_modes var_mode;
-+ unsigned char videoout;
-+ unsigned int *vm;
-+
-+ /* Search for video chip */
-+ printf("Video: ");
-+
-+ tmp = 0;
-+
-+ videomode = CFG_DEFAULT_VIDEO_MODE;
-+ /* get video mode via environment */
-+ if ((penv = getenv ("videomode")) != NULL) {
-+ /* deceide if it is a string */
-+ if (penv[0] <= '9') {
-+ videomode = (int) simple_strtoul (penv, NULL, 16);
-+ tmp = 1;
-+ }
-+ } else {
-+ tmp = 1;
-+ }
-+ if (tmp) {
-+ /* parameter are vesa modes */
-+ /* search params */
-+ for (i = 0; i < VESA_MODES_COUNT; i++) {
-+ if (vesa_modes[i].vesanr == videomode)
-+ break;
-+ }
-+ if (i == VESA_MODES_COUNT) {
-+ printf ("no VESA Mode found, switching to mode 0x%x ", CFG_DEFAULT_VIDEO_MODE);
-+ i = 0;
-+ }
-+ res_mode =
-+ (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].
-+ resindex];
-+ bits_per_pixel = vesa_modes[i].bits_per_pixel;
-+ } else {
-+
-+ res_mode = (struct ctfb_res_modes *) &var_mode;
-+ bits_per_pixel = video_get_params (res_mode, penv);
-+ }
-+
-+ /* calculate hsynch and vsynch freq (info only) */
-+ t1 = (res_mode->left_margin + res_mode->xres +
-+ res_mode->right_margin + res_mode->hsync_len) / 8;
-+ t1 *= 8;
-+ t1 *= res_mode->pixclock;
-+ t1 /= 1000;
-+ hsynch = 1000000000L / t1;
-+ t1 *=
-+ (res_mode->upper_margin + res_mode->yres +
-+ res_mode->lower_margin + res_mode->vsync_len);
-+ t1 /= 1000;
-+ vsynch = 1000000000L / t1;
-+
-+ /* fill in Graphic device struct */
-+ sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres,
-+ res_mode->yres, bits_per_pixel, (hsynch / 1000),
-+ (vsynch / 1000));
-+ printf ("%s\n", pGD->modeIdent);
-+ pGD->winSizeX = res_mode->xres;
-+ pGD->winSizeY = res_mode->yres;
-+ pGD->plnSizeX = res_mode->xres;
-+ pGD->plnSizeY = res_mode->yres;
-+ switch (bits_per_pixel) {
-+ case 8:
-+ pGD->gdfBytesPP = 1;
-+ pGD->gdfIndex = GDF__8BIT_INDEX;
-+ break;
-+ case 15:
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_15BIT_555RGB;
-+ break;
-+ case 16:
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_16BIT_565RGB;
-+ break;
-+ case 24:
-+ pGD->gdfBytesPP = 3;
-+ pGD->gdfIndex = GDF_24BIT_888RGB;
-+ break;
-+ }
-+
-+#if 0
-+ pGD->isaBase = CFG_ISA_IO;
-+ pGD->pciBase = pci_mem_base;
-+ pGD->dprBase = (pci_mem_base + 0x400000 + 0x8000);
-+ pGD->vprBase = (pci_mem_base + 0x400000 + 0xc000);
-+ pGD->cprBase = (pci_mem_base + 0x400000 + 0xe000);
-+#endif
-+ pGD->frameAdrs = LCD_VIDEO_ADDR;
-+ pGD->memSize = VIDEO_MEM_SIZE;
-+
-+ lcd->LCDSADDR1 = LCD_VIDEO_ADDR >> 1;
-+ lcd->LCDSADDR2 = (LCD_VIDEO_ADDR + 0x4b000) >> 1;
-+ lcd->LCDSADDR3 = 0x000000f0;
-+
-+ lcd->LCDCON1 = 0x00000479;
-+ lcd->LCDCON2 = 0x014fc183;
-+ lcd->LCDCON3 = 0x0060ef07;
-+ lcd->LCDCON4 = 0x00000003;
-+ lcd->LCDCON5 = 0x00000b09;
-+ lcd->LPCSEL = 0x00000cf0;
-+
-+ pGD->winSizeX = pGD->plnSizeX = 240;
-+ pGD->winSizeY = pGD->plnSizeY = 320;
-+ pGD->gdfBytesPP = 2;
-+ pGD->gdfIndex = GDF_16BIT_565RGB;
-+
-+ /* Enable Display */
-+ videoout = 2; /* Default output is CRT */
-+ if ((penv = getenv ("videoout")) != NULL) {
-+ /* deceide if it is a string */
-+ videoout = (int) simple_strtoul (penv, NULL, 16);
-+ }
-+
-+ printf("clearing video memory\n");
-+ /* Clear video memory */
-+ i = pGD->memSize/4;
-+ vm = (unsigned int *)pGD->frameAdrs;
-+ while(i--)
-+ *vm++ = 0;
-+
-+ printf("returning from video_hw_init\n");
-+ return ((void*)&smi);
-+}
-+
-+void
-+video_set_lut (unsigned int index, /* color number */
-+ unsigned char r, /* red */
-+ unsigned char g, /* green */
-+ unsigned char b /* blue */
-+ )
-+{
-+}
-+
-+#endif /* CONFIG_VIDEO_S3C2410 */
-Index: git/drivers/usbdcore_s3c2410.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/usbdcore_s3c2410.c 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,1609 @@
-+/*
-+ * (C) Copyright 2003
-+ * Gerry Hamel, geh@ti.com, Texas Instruments
-+ *
-+ * Based on
-+ * linux/drivers/usb/device/bi/omap.c
-+ * TI OMAP1510 USB bus interface driver
-+ *
-+ * Author: MontaVista Software, Inc.
-+ * source@mvista.com
-+ * (C) Copyright 2002
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <common.h>
-+
-+#if defined(CONFIG_S3C2410) && defined(CONFIG_USB_DEVICE)
-+
-+#include <asm/io.h>
-+
-+#include "usbdcore.h"
-+#include "usbdcore_s3c2410.h"
-+#include "usbdcore_ep0.h"
-+
-+
-+#define UDC_INIT_MDELAY 80 /* Device settle delay */
-+#define UDC_MAX_ENDPOINTS 31 /* Number of endpoints on this UDC */
-+
-+/* Some kind of debugging output... */
-+#if 1
-+#define UDCDBG(str)
-+#define UDCDBGA(fmt,args...)
-+#else /* The bugs still exists... */
-+#define UDCDBG(str) serial_printf("[%s] %s:%d: " str "\n", __FILE__,__FUNCTION__,__LINE__)
-+#define UDCDBGA(fmt,args...) serial_printf("[%s] %s:%d: " fmt "\n", __FILE__,__FUNCTION__,__LINE__, ##args)
-+#endif
-+
-+#if 1
-+#define UDCREG(name)
-+#define UDCREGL(name)
-+#else /* The bugs still exists... */
-+#define UDCREG(name) serial_printf("%s():%d: %s[%08x]=%.4x\n",__FUNCTION__,__LINE__, (#name), name, inw(name)) /* For 16-bit regs */
-+#define UDCREGL(name) serial_printf("%s():%d: %s[%08x]=%.8x\n",__FUNCTION__,__LINE__, (#name), name, inl(name)) /* For 32-bit regs */
-+#endif
-+
-+
-+static struct urb *ep0_urb = NULL;
-+
-+static struct usb_device_instance *udc_device; /* Used in interrupt handler */
-+static u16 udc_devstat = 0; /* UDC status (DEVSTAT) */
-+static u32 udc_interrupts = 0;
-+
-+static void udc_stall_ep (unsigned int ep_addr);
-+
-+
-+static struct usb_endpoint_instance *s3c2410_find_ep (int ep)
-+{
-+ int i;
-+
-+ for (i = 0; i < udc_device->bus->max_endpoints; i++) {
-+ if (udc_device->bus->endpoint_array[i].endpoint_address == ep)
-+ return &udc_device->bus->endpoint_array[i];
-+ }
-+ return NULL;
-+}
-+
-+/* ************************************************************************** */
-+/* IO
-+ */
-+
-+/*
-+ * omap1510_prepare_endpoint_for_rx
-+ *
-+ * This function implements TRM Figure 14-11.
-+ *
-+ * The endpoint to prepare for transfer is specified as a physical endpoint
-+ * number. For OUT (rx) endpoints 1 through 15, the corresponding endpoint
-+ * configuration register is checked to see if the endpoint is ISO or not.
-+ * If the OUT endpoint is valid and is non-ISO then its FIFO is enabled.
-+ * No action is taken for endpoint 0 or for IN (tx) endpoints 16 through 30.
-+ */
-+static void omap1510_prepare_endpoint_for_rx (int ep_addr)
-+{
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("omap1510_prepare_endpoint %x", ep_addr);
-+ if (((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) {
-+ if ((inw (UDC_EP_RX (ep_num)) &
-+ (UDC_EPn_RX_Valid | UDC_EPn_RX_Iso)) ==
-+ UDC_EPn_RX_Valid) {
-+ /* rx endpoint is valid, non-ISO, so enable its FIFO */
-+ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ outw (0, UDC_EP_NUM);
-+ }
-+ }
-+}
-+
-+/* omap1510_configure_endpoints
-+ *
-+ * This function implements TRM Figure 14-10.
-+ */
-+static void omap1510_configure_endpoints (struct usb_device_instance *device)
-+{
-+ int ep;
-+ struct usb_bus_instance *bus;
-+ struct usb_endpoint_instance *endpoint;
-+ unsigned short ep_ptr;
-+ unsigned short ep_size;
-+ unsigned short ep_isoc;
-+ unsigned short ep_doublebuffer;
-+ int ep_addr;
-+ int packet_size;
-+ int buffer_size;
-+ int attributes;
-+
-+ bus = device->bus;
-+
-+ /* There is a dedicated 2048 byte buffer for USB packets that may be
-+ * arbitrarily partitioned among the endpoints on 8-byte boundaries.
-+ * The first 8 bytes are reserved for receiving setup packets on
-+ * endpoint 0.
-+ */
-+ ep_ptr = 8; /* reserve the first 8 bytes for the setup fifo */
-+
-+ for (ep = 0; ep < bus->max_endpoints; ep++) {
-+ endpoint = bus->endpoint_array + ep;
-+ ep_addr = endpoint->endpoint_address;
-+ if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* IN endpoint */
-+ packet_size = endpoint->tx_packetSize;
-+ attributes = endpoint->tx_attributes;
-+ } else {
-+ /* OUT endpoint */
-+ packet_size = endpoint->rcv_packetSize;
-+ attributes = endpoint->rcv_attributes;
-+ }
-+
-+ switch (packet_size) {
-+ case 0:
-+ ep_size = 0;
-+ break;
-+ case 8:
-+ ep_size = 0;
-+ break;
-+ case 16:
-+ ep_size = 1;
-+ break;
-+ case 32:
-+ ep_size = 2;
-+ break;
-+ case 64:
-+ ep_size = 3;
-+ break;
-+ case 128:
-+ ep_size = 4;
-+ break;
-+ case 256:
-+ ep_size = 5;
-+ break;
-+ case 512:
-+ ep_size = 6;
-+ break;
-+ default:
-+ UDCDBGA ("ep 0x%02x has bad packet size %d",
-+ ep_addr, packet_size);
-+ packet_size = 0;
-+ ep_size = 0;
-+ break;
-+ }
-+
-+ switch (attributes & USB_ENDPOINT_XFERTYPE_MASK) {
-+ case USB_ENDPOINT_XFER_CONTROL:
-+ case USB_ENDPOINT_XFER_BULK:
-+ case USB_ENDPOINT_XFER_INT:
-+ default:
-+ /* A non-isochronous endpoint may optionally be
-+ * double-buffered. For now we disable
-+ * double-buffering.
-+ */
-+ ep_doublebuffer = 0;
-+ ep_isoc = 0;
-+ if (packet_size > 64)
-+ packet_size = 0;
-+ if (!ep || !ep_doublebuffer)
-+ buffer_size = packet_size;
-+ else
-+ buffer_size = packet_size * 2;
-+ break;
-+ case USB_ENDPOINT_XFER_ISOC:
-+ /* Isochronous endpoints are always double-
-+ * buffered, but the double-buffering bit
-+ * in the endpoint configuration register
-+ * becomes the msb of the endpoint size so we
-+ * set the double-buffering flag to zero.
-+ */
-+ ep_doublebuffer = 0;
-+ ep_isoc = 1;
-+ buffer_size = packet_size * 2;
-+ break;
-+ }
-+
-+ /* check to see if our packet buffer RAM is exhausted */
-+ if ((ep_ptr + buffer_size) > 2048) {
-+ UDCDBGA ("out of packet RAM for ep 0x%02x buf size %d", ep_addr, buffer_size);
-+ buffer_size = packet_size = 0;
-+ }
-+
-+ /* force a default configuration for endpoint 0 since it is
-+ * always enabled
-+ */
-+ if (!ep && ((packet_size < 8) || (packet_size > 64))) {
-+ buffer_size = packet_size = 64;
-+ ep_size = 3;
-+ }
-+
-+ if (!ep) {
-+ /* configure endpoint 0 */
-+ outw ((ep_size << 12) | (ep_ptr >> 3), UDC_EP0);
-+ /*UDCDBGA("ep 0 buffer offset 0x%03x packet size 0x%03x", */
-+ /* ep_ptr, packet_size); */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* IN endpoint */
-+ if (packet_size) {
-+ outw ((1 << 15) | (ep_doublebuffer << 14) |
-+ (ep_size << 12) | (ep_isoc << 11) |
-+ (ep_ptr >> 3),
-+ UDC_EP_TX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ UDCDBGA ("IN ep %d buffer offset 0x%03x"
-+ " packet size 0x%03x",
-+ ep_addr & USB_ENDPOINT_NUMBER_MASK,
-+ ep_ptr, packet_size);
-+ } else {
-+ outw (0,
-+ UDC_EP_TX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ }
-+ } else {
-+ /* OUT endpoint */
-+ if (packet_size) {
-+ outw ((1 << 15) | (ep_doublebuffer << 14) |
-+ (ep_size << 12) | (ep_isoc << 11) |
-+ (ep_ptr >> 3),
-+ UDC_EP_RX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ UDCDBGA ("OUT ep %d buffer offset 0x%03x"
-+ " packet size 0x%03x",
-+ ep_addr & USB_ENDPOINT_NUMBER_MASK,
-+ ep_ptr, packet_size);
-+ } else {
-+ outw (0,
-+ UDC_EP_RX (ep_addr &
-+ USB_ENDPOINT_NUMBER_MASK));
-+ }
-+ }
-+ ep_ptr += buffer_size;
-+ }
-+}
-+
-+static void s3c2410_deconfigure_device (void)
-+{
-+ int epnum;
-+
-+ UDCDBG ("clear Cfg_Lock");
-+ outw (inw (UDC_SYSCON1) & ~UDC_Cfg_Lock, UDC_SYSCON1);
-+ UDCREG (UDC_SYSCON1);
-+
-+ /* deconfigure all endpoints */
-+ for (epnum = 1; epnum <= 15; epnum++) {
-+ outw (0, UDC_EP_RX (epnum));
-+ outw (0, UDC_EP_TX (epnum));
-+ }
-+}
-+
-+static void s3c2410_configure_device (struct usb_device_instance *device)
-+{
-+ u_int32_t tmp;
-+
-+ s3c2410_configure_endpoints(device);
-+
-+ /* disable EP0-4 SUBD interrupts ? */
-+ outw(0x00, S3C2410_UDC_USB_INT_EN_REG);
-+
-+ /* UPLL already configured by board-level init code */
-+
-+ /* configure USB pads to device mode */
-+ tmp = inw(S3C2410_MISCCR);
-+ tmp &= ~(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND1);
-+ outw(tmp, S3C2410_MISCCR);
-+
-+ tmp = inb(S3C2410_CLKSLOW);
-+ tmp &= ~S3C2410_CLKSLOW_USB_CLK_DISABLE;
-+ outw(tmp, S3C2410_CLKSLOW);
-+
-+ /* clear interrupt registers */
-+ inb(S3C2410_UDC_EP_INT_REG);
-+ inb(S3C2410_UDC_USB_INT_REG);
-+
-+ /* enable USB interrupts for RESET and SUSPEND/RESUME */
-+ outb(S3C2410_UDC_USBINT_RESET|S3C2410_UDC_USBINT_SUSPEND,
-+ S3C2410_UDC_USB_INT_EN_REG);
-+
-+}
-+
-+/* omap1510_write_noniso_tx_fifo
-+ *
-+ * This function implements TRM Figure 14-30.
-+ *
-+ * If the endpoint has an active tx_urb, then the next packet of data from the
-+ * URB is written to the tx FIFO. The total amount of data in the urb is given
-+ * by urb->actual_length. The maximum amount of data that can be sent in any
-+ * one packet is given by endpoint->tx_packetSize. The number of data bytes
-+ * from this URB that have already been transmitted is given by endpoint->sent.
-+ * endpoint->last is updated by this routine with the number of data bytes
-+ * transmitted in this packet.
-+ *
-+ * In accordance with Figure 14-30, the EP_NUM register must already have been
-+ * written with the value to select the appropriate tx FIFO before this routine
-+ * is called.
-+ */
-+static void omap1510_write_noniso_tx_fifo (struct usb_endpoint_instance
-+ *endpoint)
-+{
-+ struct urb *urb = endpoint->tx_urb;
-+
-+ if (urb) {
-+ unsigned int last, i;
-+
-+ UDCDBGA ("urb->buffer %p, buffer_length %d, actual_length %d",
-+ urb->buffer, urb->buffer_length, urb->actual_length);
-+ if ((last =
-+ MIN (urb->actual_length - endpoint->sent,
-+ endpoint->tx_packetSize))) {
-+ u8 *cp = urb->buffer + endpoint->sent;
-+
-+ UDCDBGA ("endpoint->sent %d, tx_packetSize %d, last %d", endpoint->sent, endpoint->tx_packetSize, last);
-+
-+ if (((u32) cp & 1) == 0) { /* word aligned? */
-+ outsw (UDC_DATA, cp, last >> 1);
-+ } else { /* byte aligned. */
-+ for (i = 0; i < (last >> 1); i++) {
-+ u16 w = ((u16) cp[2 * i + 1] << 8) |
-+ (u16) cp[2 * i];
-+ outw (w, UDC_DATA);
-+ }
-+ }
-+ if (last & 1) {
-+ outb (*(cp + last - 1), UDC_DATA);
-+ }
-+ }
-+ endpoint->last = last;
-+ }
-+}
-+
-+/* omap1510_read_noniso_rx_fifo
-+ *
-+ * This function implements TRM Figure 14-28.
-+ *
-+ * If the endpoint has an active rcv_urb, then the next packet of data is read
-+ * from the rcv FIFO and written to rcv_urb->buffer at offset
-+ * rcv_urb->actual_length to append the packet data to the data from any
-+ * previous packets for this transfer. We assume that there is sufficient room
-+ * left in the buffer to hold an entire packet of data.
-+ *
-+ * The return value is the number of bytes read from the FIFO for this packet.
-+ *
-+ * In accordance with Figure 14-28, the EP_NUM register must already have been
-+ * written with the value to select the appropriate rcv FIFO before this routine
-+ * is called.
-+ */
-+static int omap1510_read_noniso_rx_fifo (struct usb_endpoint_instance
-+ *endpoint)
-+{
-+ struct urb *urb = endpoint->rcv_urb;
-+ int len = 0;
-+
-+ if (urb) {
-+ len = inw (UDC_RXFSTAT);
-+
-+ if (len) {
-+ unsigned char *cp = urb->buffer + urb->actual_length;
-+
-+ insw (UDC_DATA, cp, len >> 1);
-+ if (len & 1)
-+ *(cp + len - 1) = inb (UDC_DATA);
-+ }
-+ }
-+ return len;
-+}
-+
-+/* omap1510_prepare_for_control_write_status
-+ *
-+ * This function implements TRM Figure 14-17.
-+ *
-+ * We have to deal here with non-autodecoded control writes that haven't already
-+ * been dealt with by ep0_recv_setup. The non-autodecoded standard control
-+ * write requests are: set/clear endpoint feature, set configuration, set
-+ * interface, and set descriptor. ep0_recv_setup handles set/clear requests for
-+ * ENDPOINT_HALT by halting the endpoint for a set request and resetting the
-+ * endpoint for a clear request. ep0_recv_setup returns an error for
-+ * SET_DESCRIPTOR requests which causes them to be terminated with a stall by
-+ * the setup handler. A SET_INTERFACE request is handled by ep0_recv_setup by
-+ * generating a DEVICE_SET_INTERFACE event. This leaves only the
-+ * SET_CONFIGURATION event for us to deal with here.
-+ *
-+ */
-+static void omap1510_prepare_for_control_write_status (struct urb *urb)
-+{
-+ struct usb_device_request *request = &urb->device_request;;
-+
-+ /* check for a SET_CONFIGURATION request */
-+ if (request->bRequest == USB_REQ_SET_CONFIGURATION) {
-+ int configuration = le16_to_cpu (request->wValue) & 0xff;
-+ unsigned short devstat = inw (UDC_DEVSTAT);
-+
-+ if ((devstat & (UDC_ADD | UDC_CFG)) == UDC_ADD) {
-+ /* device is currently in ADDRESSED state */
-+ if (configuration) {
-+ /* Assume the specified non-zero configuration
-+ * value is valid and switch to the CONFIGURED
-+ * state.
-+ */
-+ outw (UDC_Dev_Cfg, UDC_SYSCON2);
-+ }
-+ } else if ((devstat & UDC_CFG) == UDC_CFG) {
-+ /* device is currently in CONFIGURED state */
-+ if (!configuration) {
-+ /* Switch to ADDRESSED state. */
-+ outw (UDC_Clr_Cfg, UDC_SYSCON2);
-+ }
-+ }
-+ }
-+
-+ /* select EP0 tx FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ /* clear endpoint (no data bytes in status stage) */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+ /* enable the EP0 tx FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the endpoint */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+}
-+
-+/* udc_state_transition_up
-+ * udc_state_transition_down
-+ *
-+ * Helper functions to implement device state changes. The device states and
-+ * the events that transition between them are:
-+ *
-+ * STATE_ATTACHED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_HUB_CONFIGURED DEVICE_HUB_RESET
-+ * || /\
-+ * \/ ||
-+ * STATE_POWERED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_RESET DEVICE_POWER_INTERRUPTION
-+ * || /\
-+ * \/ ||
-+ * STATE_DEFAULT
-+ * || /\
-+ * \/ ||
-+ * DEVICE_ADDRESS_ASSIGNED DEVICE_RESET
-+ * || /\
-+ * \/ ||
-+ * STATE_ADDRESSED
-+ * || /\
-+ * \/ ||
-+ * DEVICE_CONFIGURED DEVICE_DE_CONFIGURED
-+ * || /\
-+ * \/ ||
-+ * STATE_CONFIGURED
-+ *
-+ * udc_state_transition_up transitions up (in the direction from STATE_ATTACHED
-+ * to STATE_CONFIGURED) from the specified initial state to the specified final
-+ * state, passing through each intermediate state on the way. If the initial
-+ * state is at or above (i.e. nearer to STATE_CONFIGURED) the final state, then
-+ * no state transitions will take place.
-+ *
-+ * udc_state_transition_down transitions down (in the direction from
-+ * STATE_CONFIGURED to STATE_ATTACHED) from the specified initial state to the
-+ * specified final state, passing through each intermediate state on the way.
-+ * If the initial state is at or below (i.e. nearer to STATE_ATTACHED) the final
-+ * state, then no state transitions will take place.
-+ *
-+ * These functions must only be called with interrupts disabled.
-+ */
-+static void udc_state_transition_up (usb_device_state_t initial,
-+ usb_device_state_t final)
-+{
-+ if (initial < final) {
-+ switch (initial) {
-+ case STATE_ATTACHED:
-+ usbd_device_event_irq (udc_device,
-+ DEVICE_HUB_CONFIGURED, 0);
-+ if (final == STATE_POWERED)
-+ break;
-+ case STATE_POWERED:
-+ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
-+ if (final == STATE_DEFAULT)
-+ break;
-+ case STATE_DEFAULT:
-+ usbd_device_event_irq (udc_device,
-+ DEVICE_ADDRESS_ASSIGNED, 0);
-+ if (final == STATE_ADDRESSED)
-+ break;
-+ case STATE_ADDRESSED:
-+ usbd_device_event_irq (udc_device, DEVICE_CONFIGURED,
-+ 0);
-+ case STATE_CONFIGURED:
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+}
-+
-+static void udc_state_transition_down (usb_device_state_t initial,
-+ usb_device_state_t final)
-+{
-+ if (initial > final) {
-+ switch (initial) {
-+ case STATE_CONFIGURED:
-+ usbd_device_event_irq (udc_device, DEVICE_DE_CONFIGURED, 0);
-+ if (final == STATE_ADDRESSED)
-+ break;
-+ case STATE_ADDRESSED:
-+ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
-+ if (final == STATE_DEFAULT)
-+ break;
-+ case STATE_DEFAULT:
-+ usbd_device_event_irq (udc_device, DEVICE_POWER_INTERRUPTION, 0);
-+ if (final == STATE_POWERED)
-+ break;
-+ case STATE_POWERED:
-+ usbd_device_event_irq (udc_device, DEVICE_HUB_RESET, 0);
-+ case STATE_ATTACHED:
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+}
-+
-+/* Handle all device state changes.
-+ * This function implements TRM Figure 14-21.
-+ */
-+static void omap1510_udc_state_changed (void)
-+{
-+ u16 bits;
-+ u16 devstat = inw (UDC_DEVSTAT);
-+
-+ UDCDBGA ("state changed, devstat %x, old %x", devstat, udc_devstat);
-+
-+ bits = devstat ^ udc_devstat;
-+ if (bits) {
-+ if (bits & UDC_ATT) {
-+ if (devstat & UDC_ATT) {
-+ UDCDBG ("device attached and powered");
-+ udc_state_transition_up (udc_device->device_state, STATE_POWERED);
-+ } else {
-+ UDCDBG ("device detached or unpowered");
-+ udc_state_transition_down (udc_device->device_state, STATE_ATTACHED);
-+ }
-+ }
-+ if (bits & UDC_USB_Reset) {
-+ if (devstat & UDC_USB_Reset) {
-+ UDCDBG ("device reset in progess");
-+ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
-+ } else {
-+ UDCDBG ("device reset completed");
-+ }
-+ }
-+ if (bits & UDC_DEF) {
-+ if (devstat & UDC_DEF) {
-+ UDCDBG ("device entering default state");
-+ udc_state_transition_up (udc_device->device_state, STATE_DEFAULT);
-+ } else {
-+ UDCDBG ("device leaving default state");
-+ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
-+ }
-+ }
-+ if (bits & UDC_SUS) {
-+ if (devstat & UDC_SUS) {
-+ UDCDBG ("entering suspended state");
-+ usbd_device_event_irq (udc_device, DEVICE_BUS_INACTIVE, 0);
-+ } else {
-+ UDCDBG ("leaving suspended state");
-+ usbd_device_event_irq (udc_device, DEVICE_BUS_ACTIVITY, 0);
-+ }
-+ }
-+ if (bits & UDC_R_WK_OK) {
-+ UDCDBGA ("remote wakeup %s", (devstat & UDC_R_WK_OK)
-+ ? "enabled" : "disabled");
-+ }
-+ if (bits & UDC_ADD) {
-+ if (devstat & UDC_ADD) {
-+ UDCDBG ("default -> addressed");
-+ udc_state_transition_up (udc_device->device_state, STATE_ADDRESSED);
-+ } else {
-+ UDCDBG ("addressed -> default");
-+ udc_state_transition_down (udc_device->device_state, STATE_DEFAULT);
-+ }
-+ }
-+ if (bits & UDC_CFG) {
-+ if (devstat & UDC_CFG) {
-+ UDCDBG ("device configured");
-+ /* The ep0_recv_setup function generates the
-+ * DEVICE_CONFIGURED event when a
-+ * USB_REQ_SET_CONFIGURATION setup packet is
-+ * received, so we should already be in the
-+ * state STATE_CONFIGURED.
-+ */
-+ udc_state_transition_up (udc_device->device_state, STATE_CONFIGURED);
-+ } else {
-+ UDCDBG ("device deconfigured");
-+ udc_state_transition_down (udc_device->device_state, STATE_ADDRESSED);
-+ }
-+ }
-+ }
-+
-+ /* Clear interrupt source */
-+ outw (UDC_DS_Chg, UDC_IRQ_SRC);
-+
-+ /* Save current DEVSTAT */
-+ udc_devstat = devstat;
-+}
-+
-+static void s3c2410_udc_ep0(void)
-+{
-+ u_int8_t ep0csr;
-+
-+ UDCDBG("-> Entering EP0 handler");
-+
-+ S3C2410_UDC_SETIX(EP0);
-+ ep0csr = inb(S3C2410_UDC_IN_CSR1_REG);
-+
-+ /* clear stall status */
-+ if (ep0csr & S3C2410_UDC_EP0_CSR_SENTSTL) {
-+ clear_sp0_sst;
-+ /* FIXME */
-+ ep0_idle();
-+ }
-+
-+ if (ep0csr & S3C2410_UDC_EP0_CSR_SE
-+ && dev->ep0state != EP0_IDLE) {
-+ clear_ep0_se;
-+ ep0_idle();
-+ }
-+
-+ switch (dev->ep0state) {
-+ case EP0_IDLE:
-+ if (ep0crs & S3C2410_UDC_EP0_CSR_OPKRDY) {
-+ }
-+ break;
-+ case EP0_IN_DATA_PHASE:
-+ break;
-+ case EP0_OUT_DATA_PHASE:
-+ break;
-+ case EP0_END_XFER:
-+ break;
-+ case EP0_STALL:
-+ set_ep0_ss;
-+ break;
-+ }
-+}
-+
-+
-+}
-+
-+/* Handle SETUP USB interrupt.
-+ * This function implements TRM Figure 14-14.
-+ */
-+static void omap1510_udc_setup (struct usb_endpoint_instance *endpoint)
-+{
-+ UDCDBG ("-> Entering device setup");
-+
-+ do {
-+ const int setup_pktsize = 8;
-+ unsigned char *datap =
-+ (unsigned char *) &ep0_urb->device_request;
-+
-+ /* Gain access to EP 0 setup FIFO */
-+ outw (UDC_Setup_Sel, UDC_EP_NUM);
-+
-+ /* Read control request data */
-+ insb (UDC_DATA, datap, setup_pktsize);
-+
-+ UDCDBGA ("EP0 setup read [%x %x %x %x %x %x %x %x]",
-+ *(datap + 0), *(datap + 1), *(datap + 2),
-+ *(datap + 3), *(datap + 4), *(datap + 5),
-+ *(datap + 6), *(datap + 7));
-+
-+ /* Reset EP0 setup FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } while (inw (UDC_IRQ_SRC) & UDC_Setup);
-+
-+ /* Try to process setup packet */
-+ if (ep0_recv_setup (ep0_urb)) {
-+ /* Not a setup packet, stall next EP0 transaction */
-+ udc_stall_ep (0);
-+ UDCDBG ("can't parse setup packet, still waiting for setup");
-+ return;
-+ }
-+
-+ /* Check direction */
-+ if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK)
-+ == USB_REQ_HOST2DEVICE) {
-+ UDCDBG ("control write on EP0");
-+ if (le16_to_cpu (ep0_urb->device_request.wLength)) {
-+ /* We don't support control write data stages.
-+ * The only standard control write request with a data
-+ * stage is SET_DESCRIPTOR, and ep0_recv_setup doesn't
-+ * support that so we just stall those requests. A
-+ * function driver might support a non-standard
-+ * write request with a data stage, but it isn't
-+ * obvious what we would do with the data if we read it
-+ * so we'll just stall it. It seems like the API isn't
-+ * quite right here.
-+ */
-+#if 0
-+ /* Here is what we would do if we did support control
-+ * write data stages.
-+ */
-+ ep0_urb->actual_length = 0;
-+ outw (0, UDC_EP_NUM);
-+ /* enable the EP0 rx FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+#else
-+ /* Stall this request */
-+ UDCDBG ("Stalling unsupported EP0 control write data "
-+ "stage.");
-+ udc_stall_ep (0);
-+#endif
-+ } else {
-+ omap1510_prepare_for_control_write_status (ep0_urb);
-+ }
-+ } else {
-+ UDCDBG ("control read on EP0");
-+ /* The ep0_recv_setup function has already placed our response
-+ * packet data in ep0_urb->buffer and the packet length in
-+ * ep0_urb->actual_length.
-+ */
-+ endpoint->tx_urb = ep0_urb;
-+ endpoint->sent = 0;
-+ /* select the EP0 tx FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ /* Write packet data to the FIFO. omap1510_write_noniso_tx_fifo
-+ * will update endpoint->last with the number of bytes written
-+ * to the FIFO.
-+ */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable the FIFO to start the packet transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the EP0 tx FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+
-+ UDCDBG ("<- Leaving device setup");
-+}
-+
-+/* Handle endpoint 0 RX interrupt
-+ * This routine implements TRM Figure 14-16.
-+ */
-+static void omap1510_udc_ep0_rx (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short status;
-+
-+ UDCDBG ("RX on EP0");
-+ /* select EP0 rx FIFO */
-+ outw (UDC_EP_Sel, UDC_EP_NUM);
-+
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ /* Check direction */
-+ if ((ep0_urb->device_request.bmRequestType
-+ & USB_REQ_DIRECTION_MASK) == USB_REQ_HOST2DEVICE) {
-+ /* This rx interrupt must be for a control write data
-+ * stage packet.
-+ *
-+ * We don't support control write data stages.
-+ * We should never end up here.
-+ */
-+
-+ /* clear the EP0 rx FIFO */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+
-+ /* deselect the EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+
-+ UDCDBG ("Stalling unexpected EP0 control write "
-+ "data stage packet");
-+ udc_stall_ep (0);
-+ } else {
-+ /* This rx interrupt must be for a control read status
-+ * stage packet.
-+ */
-+ UDCDBG ("ACK on EP0 control read status stage packet");
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBG ("EP0 stall during RX");
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } else {
-+ /* deselect EP0 rx FIFO */
-+ outw (0, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Handle endpoint 0 TX interrupt
-+ * This routine implements TRM Figure 14-18.
-+ */
-+static void omap1510_udc_ep0_tx (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short status;
-+ struct usb_device_request *request = &ep0_urb->device_request;
-+
-+ UDCDBG ("TX on EP0");
-+ /* select EP0 TX FIFO */
-+ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+
-+ status = inw (UDC_STAT_FLG);
-+ if (status & UDC_ACK) {
-+ /* Check direction */
-+ if ((request->bmRequestType & USB_REQ_DIRECTION_MASK) ==
-+ USB_REQ_HOST2DEVICE) {
-+ /* This tx interrupt must be for a control write status
-+ * stage packet.
-+ */
-+ UDCDBG ("ACK on EP0 control write status stage packet");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ } else {
-+ /* This tx interrupt must be for a control read data
-+ * stage packet.
-+ */
-+ int wLength = le16_to_cpu (request->wLength);
-+
-+ /* Update our count of bytes sent so far in this
-+ * transfer.
-+ */
-+ endpoint->sent += endpoint->last;
-+
-+ /* We are finished with this transfer if we have sent
-+ * all of the bytes in our tx urb (urb->actual_length)
-+ * unless we need a zero-length terminating packet. We
-+ * need a zero-length terminating packet if we returned
-+ * fewer bytes than were requested (wLength) by the host,
-+ * and the number of bytes we returned is an exact
-+ * multiple of the packet size endpoint->tx_packetSize.
-+ */
-+ if ((endpoint->sent == ep0_urb->actual_length)
-+ && ((ep0_urb->actual_length == wLength)
-+ || (endpoint->last !=
-+ endpoint->tx_packetSize))) {
-+ /* Done with control read data stage. */
-+ UDCDBG ("control read data stage complete");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ /* select EP0 RX FIFO to prepare for control
-+ * read status stage.
-+ */
-+ outw (UDC_EP_Sel, UDC_EP_NUM);
-+ /* clear the EP0 RX FIFO */
-+ outw (UDC_Clr_EP, UDC_CTRL);
-+ /* enable the EP0 RX FIFO */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the EP0 RX FIFO */
-+ outw (0, UDC_EP_NUM);
-+ } else {
-+ /* We still have another packet of data to send
-+ * in this control read data stage or else we
-+ * need a zero-length terminating packet.
-+ */
-+ UDCDBG ("ACK control read data stage packet");
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable the EP0 tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBG ("EP0 stall during TX");
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ } else {
-+ /* deselect EP0 TX FIFO */
-+ outw (UDC_EP_Dir, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Handle RX transaction on non-ISO endpoint.
-+ * This function implements TRM Figure 14-27.
-+ * The ep argument is a physical endpoint number for a non-ISO OUT endpoint
-+ * in the range 1 to 15.
-+ */
-+static void omap1510_udc_epn_rx (int ep)
-+{
-+ unsigned short status;
-+
-+ /* Check endpoint status */
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ int nbytes;
-+ struct usb_endpoint_instance *endpoint =
-+ omap1510_find_ep (ep);
-+
-+ nbytes = omap1510_read_noniso_rx_fifo (endpoint);
-+ usbd_rcv_complete (endpoint, nbytes, 0);
-+
-+ /* enable rx FIFO to prepare for next packet */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ } else if (status & UDC_STALL) {
-+ UDCDBGA ("STALL on RX endpoint %d", ep);
-+ } else if (status & UDC_NAK) {
-+ UDCDBGA ("NAK on RX ep %d", ep);
-+ } else {
-+ serial_printf ("omap-bi: RX on ep %d with status %x", ep,
-+ status);
-+ }
-+}
-+
-+/* Handle TX transaction on non-ISO endpoint.
-+ * This function implements TRM Figure 14-29.
-+ * The ep argument is a physical endpoint number for a non-ISO IN endpoint
-+ * in the range 16 to 30.
-+ */
-+static void omap1510_udc_epn_tx (int ep)
-+{
-+ unsigned short status;
-+
-+ /*serial_printf("omap1510_udc_epn_tx( %x )\n",ep); */
-+
-+ /* Check endpoint status */
-+ status = inw (UDC_STAT_FLG);
-+
-+ if (status & UDC_ACK) {
-+ struct usb_endpoint_instance *endpoint =
-+ omap1510_find_ep (ep);
-+
-+ /* We need to transmit a terminating zero-length packet now if
-+ * we have sent all of the data in this URB and the transfer
-+ * size was an exact multiple of the packet size.
-+ */
-+ if (endpoint->tx_urb
-+ && (endpoint->last == endpoint->tx_packetSize)
-+ && (endpoint->tx_urb->actual_length - endpoint->sent -
-+ endpoint->last == 0)) {
-+ /* Prepare to transmit a zero-length packet. */
-+ endpoint->sent += endpoint->last;
-+ /* write 0 bytes of data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ } else if (endpoint->tx_urb
-+ && endpoint->tx_urb->actual_length) {
-+ /* retire the data that was just sent */
-+ usbd_tx_complete (endpoint);
-+ /* Check to see if we have more data ready to transmit
-+ * now.
-+ */
-+ if (endpoint->tx_urb
-+ && endpoint->tx_urb->actual_length) {
-+ /* write data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ }
-+ }
-+ } else if (status & UDC_STALL) {
-+ UDCDBGA ("STALL on TX endpoint %d", ep);
-+ } else if (status & UDC_NAK) {
-+ UDCDBGA ("NAK on TX endpoint %d", ep);
-+ } else {
-+ /*serial_printf("omap-bi: TX on ep %d with status %x\n", ep, status); */
-+ }
-+}
-+
-+
-+/*
-+-------------------------------------------------------------------------------
-+*/
-+
-+/* Handle general USB interrupts and dispatch according to type.
-+ * This function implements TRM Figure 14-13.
-+ */
-+void s3c2410_udc_irq (void)
-+{
-+ u_int8_t save_idx = inb(S3C2410_UDC_INDEX_REG);
-+ u_int8_t usb_status = inb(S3C2410_UDC_USB_INT_REG);
-+ u_int8_t usbd_status = inb(S3C2410_UDC_EP_INT_REG);
-+
-+ UDCDBGA("< IRQ usbs=0x%02x, usbds=0x%02x start >", usb_status,
-+ usbd_status);
-+
-+ if (usb_status & S3C2410_UDC_USBINT_RESET) {
-+ valid_irq++;
-+ }
-+
-+ if (usb_status & S3C2410_UDC_USBINT_RESUME) {
-+ valid_irq++;
-+
-+ }
-+
-+ if (usb_status & S3C2410_UDC_USBINT_SUSPEND) {
-+ valid_irq++;
-+
-+ }
-+
-+ /* Endpoint Interrupts */
-+ if (usbd_status) {
-+ int i;
-+
-+ if (usbd_status & S3C2410_UDC_INT_EP0) {
-+ s3c2410_udc_ep0();
-+ outb(S3C2410_UDC_INT_EP0, S3C2410_UDC_EP_INT_REG);
-+ valid_irq++;
-+ }
-+
-+ for (i = 1; i < 5; i++) {
-+ u_int32_t tmp = 1 << i;
-+
-+ if (usbd_status & tmp) {
-+ /* FIXME: Handle EP X */
-+ s3c2410_udc_epn(i);
-+ outb(tmp, S3C2410_UDC_EP_INT_REG);
-+ valid_irq++;
-+ }
-+ }
-+ }
-+ outb(save_idx, S3C2410_UDC_INDEX_REG);
-+
-+#if 0
-+ if (!(irq_src & ~UDC_SOF_Flg)) /* ignore SOF interrupts ) */
-+ return;
-+
-+ UDCDBGA ("< IRQ #%d start >- %x", udc_interrupts, irq_src);
-+ /*serial_printf("< IRQ #%d start >- %x\n", udc_interrupts, irq_src); */
-+
-+ if (irq_src & UDC_DS_Chg) {
-+ /* Device status changed */
-+ omap1510_udc_state_changed ();
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EP0_RX) {
-+ /* Endpoint 0 receive */
-+ outw (UDC_EP0_RX, UDC_IRQ_SRC); /* ack interrupt */
-+ omap1510_udc_ep0_rx (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EP0_TX) {
-+ /* Endpoint 0 transmit */
-+ outw (UDC_EP0_TX, UDC_IRQ_SRC); /* ack interrupt */
-+ omap1510_udc_ep0_tx (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_Setup) {
-+ /* Device setup */
-+ omap1510_udc_setup (udc_device->bus->endpoint_array + 0);
-+ valid_irq++;
-+ }
-+ /*if (!valid_irq) */
-+ /* serial_printf("unknown interrupt, IRQ_SRC %.4x\n", irq_src); */
-+#endif
-+ UDCDBGA ("< IRQ end >", udc_interrupts);
-+
-+ udc_interrupts++;
-+}
-+
-+/* This function implements TRM Figure 14-26. */
-+void omap1510_udc_noniso_irq (void)
-+{
-+ unsigned short epnum;
-+ unsigned short irq_src = inw (UDC_IRQ_SRC);
-+ int valid_irq = 0;
-+
-+ if (!(irq_src & (UDC_EPn_RX | UDC_EPn_TX)))
-+ return;
-+
-+ UDCDBGA ("non-ISO IRQ, IRQ_SRC %x", inw (UDC_IRQ_SRC));
-+
-+ if (irq_src & UDC_EPn_RX) { /* Endpoint N OUT transaction */
-+ /* Determine the endpoint number for this interrupt */
-+ epnum = (inw (UDC_EPN_STAT) & 0x0f00) >> 8;
-+ UDCDBGA ("RX on ep %x", epnum);
-+
-+ /* acknowledge interrupt */
-+ outw (UDC_EPn_RX, UDC_IRQ_SRC);
-+
-+ if (epnum) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | epnum, UDC_EP_NUM);
-+
-+ omap1510_udc_epn_rx (epnum);
-+
-+ /* deselect the endpoint FIFO */
-+ outw (epnum, UDC_EP_NUM);
-+ }
-+ valid_irq++;
-+ }
-+ if (irq_src & UDC_EPn_TX) { /* Endpoint N IN transaction */
-+ /* Determine the endpoint number for this interrupt */
-+ epnum = (inw (UDC_EPN_STAT) & 0x000f) | USB_DIR_IN;
-+ UDCDBGA ("TX on ep %x", epnum);
-+
-+ /* acknowledge interrupt */
-+ outw (UDC_EPn_TX, UDC_IRQ_SRC);
-+
-+ if (epnum) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
-+
-+ omap1510_udc_epn_tx (epnum);
-+
-+ /* deselect the endpoint FIFO */
-+ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ }
-+ valid_irq++;
-+ }
-+ if (!valid_irq)
-+ serial_printf (": unknown non-ISO interrupt, IRQ_SRC %.4x\n",
-+ irq_src);
-+}
-+
-+/*
-+-------------------------------------------------------------------------------
-+*/
-+
-+
-+/*
-+ * Start of public functions.
-+ */
-+
-+/* Called to start packet transmission. */
-+void udc_endpoint_write (struct usb_endpoint_instance *endpoint)
-+{
-+ unsigned short epnum =
-+ endpoint->endpoint_address & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("Starting transmit on ep %x", epnum);
-+
-+ if (endpoint->tx_urb) {
-+ /* select the endpoint FIFO */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ /* write data to FIFO */
-+ omap1510_write_noniso_tx_fifo (endpoint);
-+ /* enable tx FIFO to start transmission */
-+ outw (UDC_Set_FIFO_En, UDC_CTRL);
-+ /* deselect the endpoint FIFO */
-+ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
-+ }
-+}
-+
-+/* Start to initialize h/w stuff */
-+int udc_init (void)
-+{
-+ u16 udc_rev;
-+ uchar value;
-+ ulong gpio;
-+ int i;
-+
-+ /* Let the device settle down before we start */
-+ for (i = 0; i < UDC_INIT_MDELAY; i++) udelay(1000);
-+
-+ udc_device = NULL;
-+
-+ UDCDBG ("starting");
-+
-+ /* Check peripheral reset. Must be 1 to make sure
-+ MPU TIPB peripheral reset is inactive */
-+ UDCREG (ARM_RSTCT2);
-+
-+ /* Set and check clock control.
-+ * We might ought to be using the clock control API to do
-+ * this instead of fiddling with the clock registers directly
-+ * here.
-+ */
-+ outw ((1 << 4) | (1 << 5), CLOCK_CTRL);
-+ UDCREG (CLOCK_CTRL);
-+ /* Set and check APLL */
-+ outw (0x0008, APLL_CTRL);
-+ UDCREG (APLL_CTRL);
-+ /* Set and check DPLL */
-+ outw (0x2210, DPLL_CTRL);
-+ UDCREG (DPLL_CTRL);
-+ /* Set and check SOFT */
-+ outw ((1 << 4) | (1 << 3) | 1, SOFT_REQ);
-+ /* Short delay to wait for DPLL */
-+ udelay (1000);
-+
-+ /* Print banner with device revision */
-+ udc_rev = inw (UDC_REV) & 0xff;
-+ printf ("USB: TI OMAP1510 USB function module rev %d.%d\n",
-+ udc_rev >> 4, udc_rev & 0xf);
-+
-+#ifdef CONFIG_OMAP_SX1
-+ i2c_read (0x32, 0x04, 1, &value, 1);
-+ value |= 0x04;
-+ i2c_write (0x32, 0x04, 1, &value, 1);
-+
-+ i2c_read (0x32, 0x03, 1, &value, 1);
-+ value |= 0x01;
-+ i2c_write (0x32, 0x03, 1, &value, 1);
-+
-+ gpio = inl(GPIO_PIN_CONTROL_REG);
-+ gpio |= 0x0002; /* A_IRDA_OFF */
-+ gpio |= 0x0800; /* A_SWITCH */
-+ gpio |= 0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_PIN_CONTROL_REG);
-+
-+ gpio = inl(GPIO_DIR_CONTROL_REG);
-+ gpio &= ~0x0002; /* A_IRDA_OFF */
-+ gpio &= ~0x0800; /* A_SWITCH */
-+ gpio &= ~0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_DIR_CONTROL_REG);
-+
-+ gpio = inl(GPIO_DATA_OUTPUT_REG);
-+ gpio |= 0x0002; /* A_IRDA_OFF */
-+ gpio &= ~0x0800; /* A_SWITCH */
-+ gpio &= ~0x8000; /* A_USB_ON */
-+ outl (gpio, GPIO_DATA_OUTPUT_REG);
-+#endif
-+
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
-+ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+
-+ /*
-+ * At this point, device is ready for configuration...
-+ */
-+
-+ UDCDBG ("disable USB interrupts");
-+ outw (0, UDC_IRQ_EN);
-+ UDCREG (UDC_IRQ_EN);
-+
-+ UDCDBG ("disable USB DMA");
-+ outw (0, UDC_DMA_IRQ_EN);
-+ UDCREG (UDC_DMA_IRQ_EN);
-+
-+ UDCDBG ("initialize SYSCON1");
-+ outw (UDC_Self_Pwr | UDC_Pullup_En, UDC_SYSCON1);
-+ UDCREG (UDC_SYSCON1);
-+
-+ return 0;
-+}
-+
-+/* Stall endpoint */
-+static void udc_stall_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("stall ep_addr %d", ep_addr);
-+
-+ /* REVISIT?
-+ * The OMAP TRM section 14.2.4.2 says we must check that the FIFO
-+ * is empty before halting the endpoint. The current implementation
-+ * doesn't check that the FIFO is empty.
-+ */
-+
-+ if (!ep_num) {
-+ outw (UDC_Stall_Cmd, UDC_SYSCON2);
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
-+ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
-+ /* we have a valid rx endpoint, so halt it */
-+ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_Halt, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ }
-+ } else {
-+ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
-+ /* we have a valid tx endpoint, so halt it */
-+ outw (UDC_EP_Sel | UDC_EP_Dir | ep_num, UDC_EP_NUM);
-+ outw (UDC_Set_Halt, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ }
-+ }
-+}
-+
-+/* Reset endpoint */
-+#if 0
-+static void udc_reset_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+
-+ UDCDBGA ("reset ep_addr %d", ep_addr);
-+
-+ if (!ep_num) {
-+ /* control endpoint 0 can't be reset */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
-+ UDCDBGA ("UDC_EP_RX(%d) = 0x%04x", ep_num,
-+ inw (UDC_EP_RX (ep_num)));
-+ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
-+ /* we have a valid rx endpoint, so reset it */
-+ outw (ep_num | UDC_EP_Sel, UDC_EP_NUM);
-+ outw (UDC_Reset_EP, UDC_CTRL);
-+ outw (ep_num, UDC_EP_NUM);
-+ UDCDBGA ("OUT endpoint %d reset", ep_num);
-+ }
-+ } else {
-+ UDCDBGA ("UDC_EP_TX(%d) = 0x%04x", ep_num,
-+ inw (UDC_EP_TX (ep_num)));
-+ /* Resetting of tx endpoints seems to be causing the USB function
-+ * module to fail, which causes problems when the driver is
-+ * uninstalled. We'll skip resetting tx endpoints for now until
-+ * we figure out what the problem is.
-+ */
-+#if 0
-+ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
-+ /* we have a valid tx endpoint, so reset it */
-+ outw (ep_num | UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
-+ outw (UDC_Reset_EP, UDC_CTRL);
-+ outw (ep_num | UDC_EP_Dir, UDC_EP_NUM);
-+ UDCDBGA ("IN endpoint %d reset", ep_num);
-+ }
-+#endif
-+ }
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_check_ep - check logical endpoint
-+ *
-+ * Return physical endpoint number to use for this logical endpoint or zero if not valid.
-+ */
-+#if 0
-+int udc_check_ep (int logical_endpoint, int packetsize)
-+{
-+ if ((logical_endpoint == 0x80) ||
-+ ((logical_endpoint & 0x8f) != logical_endpoint)) {
-+ return 0;
-+ }
-+
-+ switch (packetsize) {
-+ case 8:
-+ case 16:
-+ case 32:
-+ case 64:
-+ case 128:
-+ case 256:
-+ case 512:
-+ break;
-+ default:
-+ return 0;
-+ }
-+
-+ return EP_ADDR_TO_PHYS_EP (logical_endpoint);
-+}
-+#endif
-+
-+/*
-+ * udc_setup_ep - setup endpoint
-+ *
-+ * Associate a physical endpoint with endpoint_instance
-+ */
-+void udc_setup_ep (struct usb_device_instance *device,
-+ unsigned int ep, struct usb_endpoint_instance *endpoint)
-+{
-+ UDCDBGA ("setting up endpoint addr %x", endpoint->endpoint_address);
-+
-+ /* This routine gets called by bi_modinit for endpoint 0 and from
-+ * bi_config for all of the other endpoints. bi_config gets called
-+ * during the DEVICE_CREATE, DEVICE_CONFIGURED, and
-+ * DEVICE_SET_INTERFACE events. We need to reconfigure the OMAP packet
-+ * RAM after bi_config scans the selected device configuration and
-+ * initializes the endpoint structures, but before this routine enables
-+ * the OUT endpoint FIFOs. Since bi_config calls this routine in a
-+ * loop for endpoints 1 through UDC_MAX_ENDPOINTS, we reconfigure our
-+ * packet RAM here when ep==1.
-+ * I really hate to do this here, but it seems like the API exported
-+ * by the USB bus interface controller driver to the usbd-bi module
-+ * isn't quite right so there is no good place to do this.
-+ */
-+ if (ep == 1) {
-+ omap1510_deconfigure_device ();
-+ omap1510_configure_device (device);
-+ }
-+
-+ if (endpoint && (ep < UDC_MAX_ENDPOINTS)) {
-+ int ep_addr = endpoint->endpoint_address;
-+
-+ if (!ep_addr) {
-+ /* nothing to do for endpoint 0 */
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ /* nothing to do for IN (tx) endpoints */
-+ } else { /* OUT (rx) endpoint */
-+ if (endpoint->rcv_packetSize) {
-+ /*struct urb* urb = &(urb_out_array[ep&0xFF]); */
-+ /*urb->endpoint = endpoint; */
-+ /*urb->device = device; */
-+ /*urb->buffer_length = sizeof(urb->buffer); */
-+
-+ /*endpoint->rcv_urb = urb; */
-+ omap1510_prepare_endpoint_for_rx (ep_addr);
-+ }
-+ }
-+ }
-+}
-+
-+/**
-+ * udc_disable_ep - disable endpoint
-+ * @ep:
-+ *
-+ * Disable specified endpoint
-+ */
-+#if 0
-+void udc_disable_ep (unsigned int ep_addr)
-+{
-+ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
-+ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
-+ struct usb_endpoint_instance *endpoint = omap1510_find_ep (ep_addr); /*udc_device->bus->endpoint_array + ep; */
-+
-+ UDCDBGA ("disable ep_addr %d", ep_addr);
-+
-+ if (!ep_num) {
-+ /* nothing to do for endpoint 0 */ ;
-+ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
-+ if (endpoint->tx_packetSize) {
-+ /* we have a valid tx endpoint */
-+ /*usbd_flush_tx(endpoint); */
-+ endpoint->tx_urb = NULL;
-+ }
-+ } else {
-+ if (endpoint->rcv_packetSize) {
-+ /* we have a valid rx endpoint */
-+ /*usbd_flush_rcv(endpoint); */
-+ endpoint->rcv_urb = NULL;
-+ }
-+ }
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_connected - is the USB cable connected
-+ *
-+ * Return non-zero if cable is connected.
-+ */
-+#if 0
-+int udc_connected (void)
-+{
-+ return ((inw (UDC_DEVSTAT) & UDC_ATT) == UDC_ATT);
-+}
-+#endif
-+
-+/* Turn on the USB connection by enabling the pullup resistor */
-+void udc_connect (void)
-+{
-+ UDCDBG ("connect, enable Pullup");
-+}
-+
-+/* Turn off the USB connection by disabling the pullup resistor */
-+void udc_disconnect (void)
-+{
-+ UDCDBG ("disconnect, disable Pullup");
-+}
-+
-+/* ************************************************************************** */
-+
-+
-+/*
-+ * udc_disable_interrupts - disable interrupts
-+ * switch off interrupts
-+ */
-+#if 0
-+void udc_disable_interrupts (struct usb_device_instance *device)
-+{
-+ UDCDBG ("disabling all interrupts");
-+ outw (0, UDC_IRQ_EN);
-+}
-+#endif
-+
-+/* ************************************************************************** */
-+
-+/**
-+ * udc_ep0_packetsize - return ep0 packetsize
-+ */
-+#if 0
-+int udc_ep0_packetsize (void)
-+{
-+ return EP0_PACKETSIZE;
-+}
-+#endif
-+
-+/* Switch on the UDC */
-+void udc_enable (struct usb_device_instance *device)
-+{
-+ UDCDBGA ("enable device %p, status %d", device, device->status);
-+
-+ /* initialize driver state variables */
-+ udc_devstat = 0;
-+
-+ /* Save the device structure pointer */
-+ udc_device = device;
-+
-+ /* Setup ep0 urb */
-+ if (!ep0_urb) {
-+ ep0_urb =
-+ usbd_alloc_urb (udc_device,
-+ udc_device->bus->endpoint_array);
-+ } else {
-+ serial_printf ("udc_enable: ep0_urb already allocated %p\n",
-+ ep0_urb);
-+ }
-+
-+#ifdef FIXME
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_CTRL | UDC_VBUS_MODE,
-+ FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+#endif
-+
-+ s3c2410_configure_device(device);
-+}
-+
-+/* Switch off the UDC */
-+void udc_disable (void)
-+{
-+ UDCDBG ("disable UDC");
-+
-+ s3c2410_deconfigure_device();
-+
-+#ifdef FIXME
-+ /* The VBUS_MODE bit selects whether VBUS detection is done via
-+ * software (1) or hardware (0). When software detection is
-+ * selected, VBUS_CTRL selects whether USB is not connected (0)
-+ * or connected (1).
-+ */
-+ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
-+ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
-+ UDCREGL (FUNC_MUX_CTRL_0);
-+#endif
-+
-+ /* Free ep0 URB */
-+ if (ep0_urb) {
-+ /*usbd_dealloc_urb(ep0_urb); */
-+ ep0_urb = NULL;
-+ }
-+
-+ /* Reset device pointer.
-+ * We ought to do this here to balance the initialization of udc_device
-+ * in udc_enable, but some of our other exported functions get called
-+ * by the bus interface driver after udc_disable, so we have to hang on
-+ * to the device pointer to avoid a null pointer dereference. */
-+ /* udc_device = NULL; */
-+}
-+
-+/**
-+ * udc_startup - allow udc code to do any additional startup
-+ */
-+void udc_startup_events (struct usb_device_instance *device)
-+{
-+ /* The DEVICE_INIT event puts the USB device in the state STATE_INIT. */
-+ usbd_device_event_irq (device, DEVICE_INIT, 0);
-+
-+ /* The DEVICE_CREATE event puts the USB device in the state
-+ * STATE_ATTACHED.
-+ */
-+ usbd_device_event_irq (device, DEVICE_CREATE, 0);
-+
-+ /* Some USB controller driver implementations signal
-+ * DEVICE_HUB_CONFIGURED and DEVICE_RESET events here.
-+ * DEVICE_HUB_CONFIGURED causes a transition to the state STATE_POWERED,
-+ * and DEVICE_RESET causes a transition to the state STATE_DEFAULT.
-+ * The OMAP USB client controller has the capability to detect when the
-+ * USB cable is connected to a powered USB bus via the ATT bit in the
-+ * DEVSTAT register, so we will defer the DEVICE_HUB_CONFIGURED and
-+ * DEVICE_RESET events until later.
-+ */
-+
-+ udc_enable (device);
-+}
-+
-+#endif
-Index: git/fs/cramfs/cramfs.c
-===================================================================
---- git.orig/fs/cramfs/cramfs.c 2007-01-04 12:21:15.000000000 +0100
-+++ git/fs/cramfs/cramfs.c 2007-01-04 12:21:18.000000000 +0100
-@@ -27,7 +27,7 @@
- #include <common.h>
- #include <malloc.h>
-
--#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)
-+#if (CONFIG_COMMANDS & CFG_CMD_CRAMFS)
-
- #include <asm/byteorder.h>
- #include <linux/stat.h>
-@@ -343,5 +343,22 @@
- }
- return 1;
- }
--
-+#else
-+int cramfs_load (char *loadoffset, struct part_info *info, char *filename)
-+{
-+ return -1;
-+}
-+int cramfs_ls (struct part_info *info, char *filename)
-+{
-+ return 0;
-+}
-+int cramfs_info (struct part_info *info)
-+{
-+ return 0;
-+}
-+int cramfs_check (struct part_info *info)
-+{
-+ return 0;
-+}
- #endif /* CFG_FS_CRAMFS */
-+
-Index: git/include/asm-arm/arch-s3c24x0/mmc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/asm-arm/arch-s3c24x0/mmc.h 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,112 @@
-+/*
-+ * linux/drivers/mmc/mmc_pxa.h
-+ *
-+ * Author: Vladimir Shebordaev, Igor Oblakov
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * $Id: mmc_pxa.h,v 0.3.1.6 2002/09/25 19:25:48 ted Exp ted $
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+#ifndef __MMC_PXA_P_H__
-+#define __MMC_PXA_P_H__
-+
-+#include <asm/arch/regs-sdi.h>
-+
-+#define MMC_DEFAULT_RCA (1<<16)
-+
-+#define MMC_BLOCK_SIZE 512
-+#define MMC_CMD_RESET 0
-+#define MMC_CMD_SEND_OP_COND 1
-+#define MMC_CMD_ALL_SEND_CID 2
-+#define MMC_CMD_SET_RCA 3
-+#define MMC_CMD_SELECT_CARD 7
-+#define MMC_CMD_SEND_CSD 9
-+#define MMC_CMD_SEND_CID 10
-+#define MMC_CMD_SEND_STATUS 13
-+#define MMC_CMD_SET_BLOCKLEN 16
-+#define MMC_CMD_READ_BLOCK 17
-+#define MMC_CMD_RD_BLK_MULTI 18
-+#define MMC_CMD_WRITE_BLOCK 24
-+
-+#define MMC_MAX_BLOCK_SIZE 512
-+
-+#define MMC_R1_IDLE_STATE 0x01
-+#define MMC_R1_ERASE_STATE 0x02
-+#define MMC_R1_ILLEGAL_CMD 0x04
-+#define MMC_R1_COM_CRC_ERR 0x08
-+#define MMC_R1_ERASE_SEQ_ERR 0x01
-+#define MMC_R1_ADDR_ERR 0x02
-+#define MMC_R1_PARAM_ERR 0x04
-+
-+#define MMC_R1B_WP_ERASE_SKIP 0x0002
-+#define MMC_R1B_ERR 0x0004
-+#define MMC_R1B_CC_ERR 0x0008
-+#define MMC_R1B_CARD_ECC_ERR 0x0010
-+#define MMC_R1B_WP_VIOLATION 0x0020
-+#define MMC_R1B_ERASE_PARAM 0x0040
-+#define MMC_R1B_OOR 0x0080
-+#define MMC_R1B_IDLE_STATE 0x0100
-+#define MMC_R1B_ERASE_RESET 0x0200
-+#define MMC_R1B_ILLEGAL_CMD 0x0400
-+#define MMC_R1B_COM_CRC_ERR 0x0800
-+#define MMC_R1B_ERASE_SEQ_ERR 0x1000
-+#define MMC_R1B_ADDR_ERR 0x2000
-+#define MMC_R1B_PARAM_ERR 0x4000
-+
-+typedef struct mmc_cid
-+{
-+/* FIXME: BYTE_ORDER */
-+ uchar year:4,
-+ month:4;
-+ uchar sn[3];
-+ uchar fwrev:4,
-+ hwrev:4;
-+ uchar name[6];
-+ uchar id[3];
-+} mmc_cid_t;
-+
-+typedef struct mmc_csd
-+{
-+ uchar ecc:2,
-+ file_format:2,
-+ tmp_write_protect:1,
-+ perm_write_protect:1,
-+ copy:1,
-+ file_format_grp:1;
-+ uint64_t content_prot_app:1,
-+ rsvd3:4,
-+ write_bl_partial:1,
-+ write_bl_len:4,
-+ r2w_factor:3,
-+ default_ecc:2,
-+ wp_grp_enable:1,
-+ wp_grp_size:5,
-+ erase_grp_mult:5,
-+ erase_grp_size:5,
-+ c_size_mult1:3,
-+ vdd_w_curr_max:3,
-+ vdd_w_curr_min:3,
-+ vdd_r_curr_max:3,
-+ vdd_r_curr_min:3,
-+ c_size:12,
-+ rsvd2:2,
-+ dsr_imp:1,
-+ read_blk_misalign:1,
-+ write_blk_misalign:1,
-+ read_bl_partial:1;
-+
-+ ushort read_bl_len:4,
-+ ccc:12;
-+ uchar tran_speed;
-+ uchar nsac;
-+ uchar taac;
-+ uchar rsvd1:2,
-+ spec_vers:4,
-+ csd_structure:2;
-+} mmc_csd_t;
-+
-+
-+#endif /* __MMC_PXA_P_H__ */
-Index: git/include/asm-arm/arch-s3c24x0/regs-sdi.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/asm-arm/arch-s3c24x0/regs-sdi.h 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,110 @@
-+/* linux/include/asm/arch-s3c2410/regs-sdi.h
-+ *
-+ * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>
-+ * http://www.simtec.co.uk/products/SWLINUX/
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * S3C2410 MMC/SDIO register definitions
-+ *
-+ * Changelog:
-+ * 18-Aug-2004 Ben Dooks Created initial file
-+ * 29-Nov-2004 Koen Martens Added some missing defines, fixed duplicates
-+ * 29-Nov-2004 Ben Dooks Updated Koen's patch
-+*/
-+
-+#ifndef __ASM_ARM_REGS_SDI
-+#define __ASM_ARM_REGS_SDI "regs-sdi.h"
-+
-+#define S3C2440_SDICON_SDRESET (1<<8)
-+#define S3C2440_SDICON_MMCCLOCK (1<<5)
-+#define S3C2410_SDICON_BYTEORDER (1<<4)
-+#define S3C2410_SDICON_SDIOIRQ (1<<3)
-+#define S3C2410_SDICON_RWAITEN (1<<2)
-+#define S3C2410_SDICON_FIFORESET (1<<1)
-+#define S3C2410_SDICON_CLOCKTYPE (1<<0)
-+
-+#define S3C2410_SDICMDCON_ABORT (1<<12)
-+#define S3C2410_SDICMDCON_WITHDATA (1<<11)
-+#define S3C2410_SDICMDCON_LONGRSP (1<<10)
-+#define S3C2410_SDICMDCON_WAITRSP (1<<9)
-+#define S3C2410_SDICMDCON_CMDSTART (1<<8)
-+#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
-+#define S3C2410_SDICMDCON_INDEX (0x3f)
-+
-+#define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
-+#define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
-+#define S3C2410_SDICMDSTAT_CMDTIMEOUT (1<<10)
-+#define S3C2410_SDICMDSTAT_RSPFIN (1<<9)
-+#define S3C2410_SDICMDSTAT_XFERING (1<<8)
-+#define S3C2410_SDICMDSTAT_INDEX (0xff)
-+
-+#define S3C2440_SDIDCON_DS_BYTE (0<<22)
-+#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
-+#define S3C2440_SDIDCON_DS_WORD (2<<22)
-+#define S3C2410_SDIDCON_IRQPERIOD (1<<21)
-+#define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
-+#define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
-+#define S3C2410_SDIDCON_BUSYAFTERCMD (1<<18)
-+#define S3C2410_SDIDCON_BLOCKMODE (1<<17)
-+#define S3C2410_SDIDCON_WIDEBUS (1<<16)
-+#define S3C2410_SDIDCON_DMAEN (1<<15)
-+#define S3C2410_SDIDCON_STOP (1<<14)
-+#define S3C2440_SDIDCON_DATSTART (1<<14)
-+#define S3C2410_SDIDCON_DATMODE (3<<12)
-+#define S3C2410_SDIDCON_BLKNUM (0x7ff)
-+
-+/* constants for S3C2410_SDIDCON_DATMODE */
-+#define S3C2410_SDIDCON_XFER_READY (0<<12)
-+#define S3C2410_SDIDCON_XFER_CHKSTART (1<<12)
-+#define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
-+#define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
-+
-+#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
-+#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
-+
-+#define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
-+#define S3C2410_SDIDSTA_SDIOIRQDETECT (1<<9)
-+#define S3C2410_SDIDSTA_FIFOFAIL (1<<8) /* reserved on 2440 */
-+#define S3C2410_SDIDSTA_CRCFAIL (1<<7)
-+#define S3C2410_SDIDSTA_RXCRCFAIL (1<<6)
-+#define S3C2410_SDIDSTA_DATATIMEOUT (1<<5)
-+#define S3C2410_SDIDSTA_XFERFINISH (1<<4)
-+#define S3C2410_SDIDSTA_BUSYFINISH (1<<3)
-+#define S3C2410_SDIDSTA_SBITERR (1<<2) /* reserved on 2410a/2440 */
-+#define S3C2410_SDIDSTA_TXDATAON (1<<1)
-+#define S3C2410_SDIDSTA_RXDATAON (1<<0)
-+
-+#define S3C2440_SDIFSTA_FIFORESET (1<<16)
-+#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
-+#define S3C2410_SDIFSTA_TFDET (1<<13)
-+#define S3C2410_SDIFSTA_RFDET (1<<12)
-+#define S3C2410_SDIFSTA_TFHALF (1<<11)
-+#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
-+#define S3C2410_SDIFSTA_RFLAST (1<<9)
-+#define S3C2410_SDIFSTA_RFFULL (1<<8)
-+#define S3C2410_SDIFSTA_RFHALF (1<<7)
-+#define S3C2410_SDIFSTA_COUNTMASK (0x7f)
-+
-+#define S3C2410_SDIIMSK_RESPONSECRC (1<<17)
-+#define S3C2410_SDIIMSK_CMDSENT (1<<16)
-+#define S3C2410_SDIIMSK_CMDTIMEOUT (1<<15)
-+#define S3C2410_SDIIMSK_RESPONSEND (1<<14)
-+#define S3C2410_SDIIMSK_READWAIT (1<<13)
-+#define S3C2410_SDIIMSK_SDIOIRQ (1<<12)
-+#define S3C2410_SDIIMSK_FIFOFAIL (1<<11)
-+#define S3C2410_SDIIMSK_CRCSTATUS (1<<10)
-+#define S3C2410_SDIIMSK_DATACRC (1<<9)
-+#define S3C2410_SDIIMSK_DATATIMEOUT (1<<8)
-+#define S3C2410_SDIIMSK_DATAFINISH (1<<7)
-+#define S3C2410_SDIIMSK_BUSYFINISH (1<<6)
-+#define S3C2410_SDIIMSK_SBITERR (1<<5) /* reserved 2440/2410a */
-+#define S3C2410_SDIIMSK_TXFIFOHALF (1<<4)
-+#define S3C2410_SDIIMSK_TXFIFOEMPTY (1<<3)
-+#define S3C2410_SDIIMSK_RXFIFOLAST (1<<2)
-+#define S3C2410_SDIIMSK_RXFIFOFULL (1<<1)
-+#define S3C2410_SDIIMSK_RXFIFOHALF (1<<0)
-+
-+#endif /* __ASM_ARM_REGS_SDI */
-Index: git/include/asm-arm/mach-types.h
-===================================================================
---- git.orig/include/asm-arm/mach-types.h 2007-01-04 12:21:15.000000000 +0100
-+++ git/include/asm-arm/mach-types.h 2007-01-04 12:21:18.000000000 +0100
-@@ -424,7 +424,7 @@
- #define MACH_TYPE_MPORT3S 411
- #define MACH_TYPE_RA_ALPHA 412
- #define MACH_TYPE_XCEP 413
--#define MACH_TYPE_ARCOM_MERCURY 414
-+#define MACH_TYPE_ARCOM_VULCAN 414
- #define MACH_TYPE_STARGATE 415
- #define MACH_TYPE_ARMADILLOJ 416
- #define MACH_TYPE_ELROY_JACK 417
-@@ -457,7 +457,7 @@
- #define MACH_TYPE_XM250 444
- #define MACH_TYPE_T6TC1XB 445
- #define MACH_TYPE_ESS710 446
--#define MACH_TYPE_MX3ADS 447
-+#define MACH_TYPE_MX31ADS 447
- #define MACH_TYPE_HIMALAYA 448
- #define MACH_TYPE_BOLFENK 449
- #define MACH_TYPE_AT91RM9200KR 450
-@@ -736,7 +736,309 @@
- #define MACH_TYPE_LN2410SBC 725
- #define MACH_TYPE_CB3RUFC 726
- #define MACH_TYPE_MP2USB 727
--#define MACH_TYPE_PDNB3 1002
-+#define MACH_TYPE_NTNP425C 728
-+#define MACH_TYPE_COLIBRI 729
-+#define MACH_TYPE_PCM7220 730
-+#define MACH_TYPE_GATEWAY7001 731
-+#define MACH_TYPE_PCM027 732
-+#define MACH_TYPE_CMPXA 733
-+#define MACH_TYPE_ANUBIS 734
-+#define MACH_TYPE_ITE8152 735
-+#define MACH_TYPE_LPC3XXX 736
-+#define MACH_TYPE_PUPPETEER 737
-+#define MACH_TYPE_MACH_VADATECH 738
-+#define MACH_TYPE_E570 739
-+#define MACH_TYPE_X50 740
-+#define MACH_TYPE_RECON 741
-+#define MACH_TYPE_XBOARDGP8 742
-+#define MACH_TYPE_FPIC2 743
-+#define MACH_TYPE_AKITA 744
-+#define MACH_TYPE_A81 745
-+#define MACH_TYPE_SVM_SC25X 746
-+#define MACH_TYPE_VADATECH020 747
-+#define MACH_TYPE_TLI 748
-+#define MACH_TYPE_EDB9315LC 749
-+#define MACH_TYPE_PASSEC 750
-+#define MACH_TYPE_DS_TIGER 751
-+#define MACH_TYPE_E310 752
-+#define MACH_TYPE_E330 753
-+#define MACH_TYPE_RT3000 754
-+#define MACH_TYPE_NOKIA770 755
-+#define MACH_TYPE_PNX0106 756
-+#define MACH_TYPE_HX21XX 757
-+#define MACH_TYPE_FARADAY 758
-+#define MACH_TYPE_SBC9312 759
-+#define MACH_TYPE_BATMAN 760
-+#define MACH_TYPE_JPD201 761
-+#define MACH_TYPE_MIPSA 762
-+#define MACH_TYPE_KACOM 763
-+#define MACH_TYPE_SWARCOCPU 764
-+#define MACH_TYPE_SWARCODSL 765
-+#define MACH_TYPE_BLUEANGEL 766
-+#define MACH_TYPE_HAIRYGRAMA 767
-+#define MACH_TYPE_BANFF 768
-+#define MACH_TYPE_CARMEVA 769
-+#define MACH_TYPE_SAM255 770
-+#define MACH_TYPE_PPM10 771
-+#define MACH_TYPE_EDB9315A 772
-+#define MACH_TYPE_SUNSET 773
-+#define MACH_TYPE_STARGATE2 774
-+#define MACH_TYPE_INTELMOTE2 775
-+#define MACH_TYPE_TRIZEPS4 776
-+#define MACH_TYPE_MAINSTONE2 777
-+#define MACH_TYPE_EZ_IXP42X 778
-+#define MACH_TYPE_TAPWAVE_ZODIAC 779
-+#define MACH_TYPE_UNIVERSALMETER 780
-+#define MACH_TYPE_HICOARM9 781
-+#define MACH_TYPE_PNX4008 782
-+#define MACH_TYPE_KWS6000 783
-+#define MACH_TYPE_PORTUX920T 784
-+#define MACH_TYPE_EZ_X5 785
-+#define MACH_TYPE_OMAP_RUDOLPH 786
-+#define MACH_TYPE_CPUAT91 787
-+#define MACH_TYPE_REA9200 788
-+#define MACH_TYPE_ACTS_PUNE_SA1110 789
-+#define MACH_TYPE_IXP425 790
-+#define MACH_TYPE_ARGONPLUSODYSSEY 791
-+#define MACH_TYPE_PERCH 792
-+#define MACH_TYPE_EIS05R1 793
-+#define MACH_TYPE_PEPPERPAD 794
-+#define MACH_TYPE_SB3010 795
-+#define MACH_TYPE_RM9200 796
-+#define MACH_TYPE_DMA03 797
-+#define MACH_TYPE_ROAD_S101 798
-+#define MACH_TYPE_IQ_NEXTGEN_A 799
-+#define MACH_TYPE_IQ_NEXTGEN_B 800
-+#define MACH_TYPE_IQ_NEXTGEN_C 801
-+#define MACH_TYPE_IQ_NEXTGEN_D 802
-+#define MACH_TYPE_IQ_NEXTGEN_E 803
-+#define MACH_TYPE_MALLOW_AT91 804
-+#define MACH_TYPE_CYBERTRACKER_I 805
-+#define MACH_TYPE_GESBC931X 806
-+#define MACH_TYPE_CENTIPAD 807
-+#define MACH_TYPE_ARMSOC 808
-+#define MACH_TYPE_SE4200 809
-+#define MACH_TYPE_EMS197A 810
-+#define MACH_TYPE_MICRO9 811
-+#define MACH_TYPE_MICRO9L 812
-+#define MACH_TYPE_UC5471DSP 813
-+#define MACH_TYPE_SJ5471ENG 814
-+#define MACH_TYPE_CMPXA26X 815
-+#define MACH_TYPE_NC 816
-+#define MACH_TYPE_OMAP_PALMTE 817
-+#define MACH_TYPE_AJAX52X 818
-+#define MACH_TYPE_SIRIUSTAR 819
-+#define MACH_TYPE_IODATA_HDLG 820
-+#define MACH_TYPE_AT91RM9200UTL 821
-+#define MACH_TYPE_BIOSAFE 822
-+#define MACH_TYPE_MP1000 823
-+#define MACH_TYPE_PARSY 824
-+#define MACH_TYPE_CCXP 825
-+#define MACH_TYPE_OMAP_GSAMPLE 826
-+#define MACH_TYPE_REALVIEW_EB 827
-+#define MACH_TYPE_SAMOA 828
-+#define MACH_TYPE_T3XSCALE 829
-+#define MACH_TYPE_I878 830
-+#define MACH_TYPE_BORZOI 831
-+#define MACH_TYPE_GECKO 832
-+#define MACH_TYPE_DS101 833
-+#define MACH_TYPE_OMAP_PALMTT2 834
-+#define MACH_TYPE_XSCALE_PALMLD 835
-+#define MACH_TYPE_CC9C 836
-+#define MACH_TYPE_SBC1670 837
-+#define MACH_TYPE_IXDP28X5 838
-+#define MACH_TYPE_OMAP_PALMTT 839
-+#define MACH_TYPE_ML696K 840
-+#define MACH_TYPE_ARCOM_ZEUS 841
-+#define MACH_TYPE_OSIRIS 842
-+#define MACH_TYPE_MAESTRO 843
-+#define MACH_TYPE_TUNGE2 844
-+#define MACH_TYPE_IXBBM 845
-+#define MACH_TYPE_MX27 846
-+#define MACH_TYPE_AX8004 847
-+#define MACH_TYPE_AT91SAM9261EK 848
-+#define MACH_TYPE_LOFT 849
-+#define MACH_TYPE_MAGPIE 850
-+#define MACH_TYPE_MX21 851
-+#define MACH_TYPE_MB87M3400 852
-+#define MACH_TYPE_MGUARD_DELTA 853
-+#define MACH_TYPE_DAVINCI_DVDP 854
-+#define MACH_TYPE_HTCUNIVERSAL 855
-+#define MACH_TYPE_TPAD 856
-+#define MACH_TYPE_ROVERP3 857
-+#define MACH_TYPE_JORNADA928 858
-+#define MACH_TYPE_MV88FXX81 859
-+#define MACH_TYPE_STMP36XX 860
-+#define MACH_TYPE_SXNI79524 861
-+#define MACH_TYPE_AMS_DELTA 862
-+#define MACH_TYPE_URANIUM 863
-+#define MACH_TYPE_UCON 864
-+#define MACH_TYPE_NAS100D 865
-+#define MACH_TYPE_L083_1000 866
-+#define MACH_TYPE_EZX 867
-+#define MACH_TYPE_PNX5220 868
-+#define MACH_TYPE_BUTTE 869
-+#define MACH_TYPE_SRM2 870
-+#define MACH_TYPE_DSBR 871
-+#define MACH_TYPE_CRYSTALBALL 872
-+#define MACH_TYPE_TINYPXA27X 873
-+#define MACH_TYPE_HERBIE 874
-+#define MACH_TYPE_MAGICIAN 875
-+#define MACH_TYPE_CM4002 876
-+#define MACH_TYPE_B4 877
-+#define MACH_TYPE_MAUI 878
-+#define MACH_TYPE_CYBERTRACKER_G 879
-+#define MACH_TYPE_NXDKN 880
-+#define MACH_TYPE_MIO8390 881
-+#define MACH_TYPE_OMI_BOARD 882
-+#define MACH_TYPE_MX21CIV 883
-+#define MACH_TYPE_MAHI_CDAC 884
-+#define MACH_TYPE_XSCALE_PALMTX 885
-+#define MACH_TYPE_S3C2413 887
-+#define MACH_TYPE_SAMSYS_EP0 888
-+#define MACH_TYPE_WG302V1 889
-+#define MACH_TYPE_WG302V2 890
-+#define MACH_TYPE_EB42X 891
-+#define MACH_TYPE_IQ331ES 892
-+#define MACH_TYPE_COSYDSP 893
-+#define MACH_TYPE_UPLAT7D 894
-+#define MACH_TYPE_PTDAVINCI 895
-+#define MACH_TYPE_MBUS 896
-+#define MACH_TYPE_NADIA2VB 897
-+#define MACH_TYPE_R1000 898
-+#define MACH_TYPE_HW90250 899
-+#define MACH_TYPE_OMAP_2430SDP 900
-+#define MACH_TYPE_DAVINCI_EVM 901
-+#define MACH_TYPE_OMAP_TORNADO 902
-+#define MACH_TYPE_OLOCREEK 903
-+#define MACH_TYPE_PALMZ72 904
-+#define MACH_TYPE_NXDB500 905
-+#define MACH_TYPE_APF9328 906
-+#define MACH_TYPE_OMAP_WIPOQ 907
-+#define MACH_TYPE_OMAP_TWIP 908
-+#define MACH_TYPE_XSCALE_PALMTREO650 909
-+#define MACH_TYPE_ACUMEN 910
-+#define MACH_TYPE_XP100 911
-+#define MACH_TYPE_FS2410 912
-+#define MACH_TYPE_PXA270_CERF 913
-+#define MACH_TYPE_SQ2FTLPALM 914
-+#define MACH_TYPE_BSEMSERVER 915
-+#define MACH_TYPE_NETCLIENT 916
-+#define MACH_TYPE_XSCALE_PALMTT5 917
-+#define MACH_TYPE_OMAP_PALMTC 918
-+#define MACH_TYPE_OMAP_APOLLON 919
-+#define MACH_TYPE_ARGONLVEVB 920
-+#define MACH_TYPE_REA_2D 921
-+#define MACH_TYPE_TI3E524 922
-+#define MACH_TYPE_ATEB9200 923
-+#define MACH_TYPE_AUCKLAND 924
-+#define MACH_TYPE_AK3320M 925
-+#define MACH_TYPE_DURAMAX 926
-+#define MACH_TYPE_N35 927
-+#define MACH_TYPE_PRONGHORN 928
-+#define MACH_TYPE_FUNDY 929
-+#define MACH_TYPE_LOGICPD_PXA270 930
-+#define MACH_TYPE_CPU777 931
-+#define MACH_TYPE_SIMICON9201 932
-+#define MACH_TYPE_LEAP2_HPM 933
-+#define MACH_TYPE_CM922TXA10 934
-+#define MACH_TYPE_PXA 935
-+#define MACH_TYPE_SANDGATE2 936
-+#define MACH_TYPE_SANDGATE2G 937
-+#define MACH_TYPE_SANDGATE2P 938
-+#define MACH_TYPE_FRED_JACK 939
-+#define MACH_TYPE_TTG_COLOR1 940
-+#define MACH_TYPE_NXEB500HMI 941
-+#define MACH_TYPE_NETDCU8 942
-+#define MACH_TYPE_ML675050_CPU_BOA 943
-+#define MACH_TYPE_NG_FVX538 944
-+#define MACH_TYPE_NG_FVS338 945
-+#define MACH_TYPE_PNX4103 946
-+#define MACH_TYPE_HESDB 947
-+#define MACH_TYPE_XSILO 948
-+#define MACH_TYPE_ESPRESSO 949
-+#define MACH_TYPE_EMLC 950
-+#define MACH_TYPE_SISTERON 951
-+#define MACH_TYPE_RX1950 952
-+#define MACH_TYPE_TSC_VENUS 953
-+#define MACH_TYPE_DS101J 954
-+#define MACH_TYPE_MXC30030ADS 955
-+#define MACH_TYPE_FUJITSU_WIMAXSOC 956
-+#define MACH_TYPE_DUALPCMODEM 957
-+#define MACH_TYPE_GESBC9312 958
-+#define MACH_TYPE_HTCAPACHE 959
-+#define MACH_TYPE_IXDP435 960
-+#define MACH_TYPE_CATPROVT100 961
-+#define MACH_TYPE_PICOTUX1XX 962
-+#define MACH_TYPE_PICOTUX2XX 963
-+#define MACH_TYPE_DSMG600 964
-+#define MACH_TYPE_EMPC2 965
-+#define MACH_TYPE_VENTURA 966
-+#define MACH_TYPE_PHIDGET_SBC 967
-+#define MACH_TYPE_IJ3K 968
-+#define MACH_TYPE_PISGAH 969
-+#define MACH_TYPE_OMAP_FSAMPLE 970
-+#define MACH_TYPE_SG720 971
-+#define MACH_TYPE_REDFOX 972
-+#define MACH_TYPE_MYSH_EP9315_1 973
-+#define MACH_TYPE_TPF106 974
-+#define MACH_TYPE_AT91RM9200KG 975
-+#define MACH_TYPE_SLEDB 976
-+#define MACH_TYPE_ONTRACK 977
-+#define MACH_TYPE_PM1200 978
-+#define MACH_TYPE_ESS24XXX 979
-+#define MACH_TYPE_COREMP7 980
-+#define MACH_TYPE_NEXCODER_6446 981
-+#define MACH_TYPE_STVC8380 982
-+#define MACH_TYPE_TEKLYNX 983
-+#define MACH_TYPE_CARBONADO 984
-+#define MACH_TYPE_SYSMOS_MP730 985
-+#define MACH_TYPE_SNAPPER_CL15 986
-+#define MACH_TYPE_PGIGIM 987
-+#define MACH_TYPE_PTX9160P2 988
-+#define MACH_TYPE_DCORE1 989
-+#define MACH_TYPE_VICTORPXA 990
-+#define MACH_TYPE_MX2DTB 991
-+#define MACH_TYPE_PXA_IREX_ER0100 992
-+#define MACH_TYPE_OMAP_PALMZ71 993
-+#define MACH_TYPE_BARTEC_DEG 994
-+#define MACH_TYPE_HW50251 995
-+#define MACH_TYPE_IBOX 996
-+#define MACH_TYPE_ATLASLH7A404 997
-+#define MACH_TYPE_PT2026 998
-+#define MACH_TYPE_HTCALPINE 999
-+#define MACH_TYPE_BARTEC_VTU 1000
-+#define MACH_TYPE_VCOREII 1001
-+#define MACH_TYPE_PDNB3 1002
-+#define MACH_TYPE_HTCBEETLES 1003
-+#define MACH_TYPE_S3C6400 1004
-+#define MACH_TYPE_S3C2443 1005
-+#define MACH_TYPE_OMAP_LDK 1006
-+#define MACH_TYPE_SMDK2460 1007
-+#define MACH_TYPE_SMDK2440 1008
-+#define MACH_TYPE_SMDK2412 1009
-+#define MACH_TYPE_WEBBOX 1010
-+#define MACH_TYPE_CWWNDP 1011
-+#define MACH_TYPE_DRAGON 1012
-+#define MACH_TYPE_OPENDO_CPU_BOARD 1013
-+#define MACH_TYPE_CCM2200 1014
-+#define MACH_TYPE_ETWARM 1015
-+#define MACH_TYPE_M93030 1016
-+#define MACH_TYPE_CC7U 1017
-+#define MACH_TYPE_MTT_RANGER 1018
-+#define MACH_TYPE_NEXUS 1019
-+#define MACH_TYPE_DESMAN 1020
-+#define MACH_TYPE_BKDE303 1021
-+#define MACH_TYPE_SMDK2413 1022
-+#define MACH_TYPE_AML_M7200 1023
-+#define MACH_TYPE_AML_M5900 1024
-+#define MACH_TYPE_SG640 1025
-+#define MACH_TYPE_EDG79524 1026
-+#define MACH_TYPE_AI2410 1027
-+#define MACH_TYPE_IXP465 1028
-+#define MACH_TYPE_BALLOON3 1029
-+#define MACH_TYPE_QT2410 1108
-+#define MACH_TYPE_GTA01 1182
-
- #ifdef CONFIG_ARCH_EBSA110
- # ifdef machine_arch_type
-@@ -3541,9 +3843,9 @@
- # else
- # define machine_arch_type MACH_TYPE_RAMSES
- # endif
--# define machine_is_ramses() (machine_arch_type == MACH_TYPE_RAMSES)
-+# define machine_is_mnci() (machine_arch_type == MACH_TYPE_RAMSES)
- #else
--# define machine_is_ramses() (0)
-+# define machine_is_mnci() (0)
- #endif
-
- #ifdef CONFIG_ARCH_S28X
-@@ -4501,9 +4803,9 @@
- # else
- # define machine_arch_type MACH_TYPE_M825XX
- # endif
--# define machine_is_m825xx() (machine_arch_type == MACH_TYPE_M825XX)
-+# define machine_is_comcerto() (machine_arch_type == MACH_TYPE_M825XX)
- #else
--# define machine_is_m825xx() (0)
-+# define machine_is_comcerto() (0)
- #endif
-
- #ifdef CONFIG_SA1100_M7100
-@@ -5658,16 +5960,16 @@
- # define machine_is_xcep() (0)
- #endif
-
--#ifdef CONFIG_MACH_ARCOM_MERCURY
-+#ifdef CONFIG_MACH_ARCOM_VULCAN
- # ifdef machine_arch_type
- # undef machine_arch_type
- # define machine_arch_type __machine_arch_type
- # else
--# define machine_arch_type MACH_TYPE_ARCOM_MERCURY
-+# define machine_arch_type MACH_TYPE_ARCOM_VULCAN
- # endif
--# define machine_is_arcom_mercury() (machine_arch_type == MACH_TYPE_ARCOM_MERCURY)
-+# define machine_is_arcom_vulcan() (machine_arch_type == MACH_TYPE_ARCOM_VULCAN)
- #else
--# define machine_is_arcom_mercury() (0)
-+# define machine_is_arcom_vulcan() (0)
- #endif
-
- #ifdef CONFIG_MACH_STARGATE
-@@ -6054,16 +6356,16 @@
- # define machine_is_ess710() (0)
- #endif
-
--#ifdef CONFIG_MACH_MX3ADS
-+#ifdef CONFIG_MACH_MX31ADS
- # ifdef machine_arch_type
- # undef machine_arch_type
- # define machine_arch_type __machine_arch_type
- # else
--# define machine_arch_type MACH_TYPE_MX3ADS
-+# define machine_arch_type MACH_TYPE_MX31ADS
- # endif
--# define machine_is_mx3ads() (machine_arch_type == MACH_TYPE_MX3ADS)
-+# define machine_is_mx31ads() (machine_arch_type == MACH_TYPE_MX31ADS)
- #else
--# define machine_is_mx3ads() (0)
-+# define machine_is_mx31ads() (0)
- #endif
-
- #ifdef CONFIG_MACH_HIMALAYA
-@@ -7333,9 +7635,9 @@
- # else
- # define machine_arch_type MACH_TYPE_ARGONPLUSEVB
- # endif
--# define machine_is_argonplusevb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
-+# define machine_is_i30030evb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
- #else
--# define machine_is_argonplusevb() (0)
-+# define machine_is_i30030evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_SCMA11EVB
-@@ -7345,9 +7647,9 @@
- # else
- # define machine_arch_type MACH_TYPE_SCMA11EVB
- # endif
--# define machine_is_scma11evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
-+# define machine_is_mxc27530evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
- #else
--# define machine_is_scma11evb() (0)
-+# define machine_is_mxc27530evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_SMDK2800
-@@ -8305,9 +8607,9 @@
- # else
- # define machine_arch_type MACH_TYPE_SCMA11BB
- # endif
--# define machine_is_scma11bb() (machine_arch_type == MACH_TYPE_SCMA11BB)
-+# define machine_is_mxc27530ads() (machine_arch_type == MACH_TYPE_SCMA11BB)
- #else
--# define machine_is_scma11bb() (0)
-+# define machine_is_mxc27530ads() (0)
- #endif
-
- #ifdef CONFIG_MACH_TRIZEPS3
-@@ -9193,9 +9495,9 @@
- # else
- # define machine_arch_type MACH_TYPE_ZEUSEVB
- # endif
--# define machine_is_zeusevb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
-+# define machine_is_mxc91131evb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
- #else
--# define machine_is_zeusevb() (0)
-+# define machine_is_mxc91131evb() (0)
- #endif
-
- #ifdef CONFIG_MACH_P700
-@@ -9402,6 +9704,3643 @@
- # define machine_is_mp2usb() (0)
- #endif
-
-+#ifdef CONFIG_MACH_NTNP425C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NTNP425C
-+# endif
-+# define machine_is_ntnp425c() (machine_arch_type == MACH_TYPE_NTNP425C)
-+#else
-+# define machine_is_ntnp425c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COLIBRI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COLIBRI
-+# endif
-+# define machine_is_colibri() (machine_arch_type == MACH_TYPE_COLIBRI)
-+#else
-+# define machine_is_colibri() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PCM7220
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PCM7220
-+# endif
-+# define machine_is_pcm7220() (machine_arch_type == MACH_TYPE_PCM7220)
-+#else
-+# define machine_is_pcm7220() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GATEWAY7001
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GATEWAY7001
-+# endif
-+# define machine_is_gateway7001() (machine_arch_type == MACH_TYPE_GATEWAY7001)
-+#else
-+# define machine_is_gateway7001() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PCM027
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PCM027
-+# endif
-+# define machine_is_pcm027() (machine_arch_type == MACH_TYPE_PCM027)
-+#else
-+# define machine_is_pcm027() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CMPXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CMPXA
-+# endif
-+# define machine_is_cmpxa() (machine_arch_type == MACH_TYPE_CMPXA)
-+#else
-+# define machine_is_cmpxa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ANUBIS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ANUBIS
-+# endif
-+# define machine_is_anubis() (machine_arch_type == MACH_TYPE_ANUBIS)
-+#else
-+# define machine_is_anubis() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ITE8152
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ITE8152
-+# endif
-+# define machine_is_ite8152() (machine_arch_type == MACH_TYPE_ITE8152)
-+#else
-+# define machine_is_ite8152() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LPC3XXX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LPC3XXX
-+# endif
-+# define machine_is_lpc3xxx() (machine_arch_type == MACH_TYPE_LPC3XXX)
-+#else
-+# define machine_is_lpc3xxx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PUPPETEER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PUPPETEER
-+# endif
-+# define machine_is_puppeteer() (machine_arch_type == MACH_TYPE_PUPPETEER)
-+#else
-+# define machine_is_puppeteer() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MACH_VADATECH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MACH_VADATECH
-+# endif
-+# define machine_is_vt001() (machine_arch_type == MACH_TYPE_MACH_VADATECH)
-+#else
-+# define machine_is_vt001() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E570
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E570
-+# endif
-+# define machine_is_e570() (machine_arch_type == MACH_TYPE_E570)
-+#else
-+# define machine_is_e570() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_X50
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_X50
-+# endif
-+# define machine_is_x50() (machine_arch_type == MACH_TYPE_X50)
-+#else
-+# define machine_is_x50() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RECON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RECON
-+# endif
-+# define machine_is_recon() (machine_arch_type == MACH_TYPE_RECON)
-+#else
-+# define machine_is_recon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XBOARDGP8
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XBOARDGP8
-+# endif
-+# define machine_is_xboardgp8() (machine_arch_type == MACH_TYPE_XBOARDGP8)
-+#else
-+# define machine_is_xboardgp8() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FPIC2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FPIC2
-+# endif
-+# define machine_is_fpic2() (machine_arch_type == MACH_TYPE_FPIC2)
-+#else
-+# define machine_is_fpic2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AKITA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AKITA
-+# endif
-+# define machine_is_akita() (machine_arch_type == MACH_TYPE_AKITA)
-+#else
-+# define machine_is_akita() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_A81
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_A81
-+# endif
-+# define machine_is_a81() (machine_arch_type == MACH_TYPE_A81)
-+#else
-+# define machine_is_a81() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SVM_SC25X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SVM_SC25X
-+# endif
-+# define machine_is_svm_sc25x() (machine_arch_type == MACH_TYPE_SVM_SC25X)
-+#else
-+# define machine_is_svm_sc25x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VADATECH020
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VADATECH020
-+# endif
-+# define machine_is_vt020() (machine_arch_type == MACH_TYPE_VADATECH020)
-+#else
-+# define machine_is_vt020() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TLI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TLI
-+# endif
-+# define machine_is_tli() (machine_arch_type == MACH_TYPE_TLI)
-+#else
-+# define machine_is_tli() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDB9315LC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDB9315LC
-+# endif
-+# define machine_is_edb9315lc() (machine_arch_type == MACH_TYPE_EDB9315LC)
-+#else
-+# define machine_is_edb9315lc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PASSEC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PASSEC
-+# endif
-+# define machine_is_passec() (machine_arch_type == MACH_TYPE_PASSEC)
-+#else
-+# define machine_is_passec() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS_TIGER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS_TIGER
-+# endif
-+# define machine_is_ds_tiger() (machine_arch_type == MACH_TYPE_DS_TIGER)
-+#else
-+# define machine_is_ds_tiger() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E310
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E310
-+# endif
-+# define machine_is_e310() (machine_arch_type == MACH_TYPE_E310)
-+#else
-+# define machine_is_e310() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_E330
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_E330
-+# endif
-+# define machine_is_e330() (machine_arch_type == MACH_TYPE_E330)
-+#else
-+# define machine_is_e330() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RT3000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RT3000
-+# endif
-+# define machine_is_rt3000() (machine_arch_type == MACH_TYPE_RT3000)
-+#else
-+# define machine_is_rt3000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NOKIA770
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NOKIA770
-+# endif
-+# define machine_is_nokia770() (machine_arch_type == MACH_TYPE_NOKIA770)
-+#else
-+# define machine_is_nokia770() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX0106
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX0106
-+# endif
-+# define machine_is_pnx0106() (machine_arch_type == MACH_TYPE_PNX0106)
-+#else
-+# define machine_is_pnx0106() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HX21XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HX21XX
-+# endif
-+# define machine_is_hx21xx() (machine_arch_type == MACH_TYPE_HX21XX)
-+#else
-+# define machine_is_hx21xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FARADAY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FARADAY
-+# endif
-+# define machine_is_faraday() (machine_arch_type == MACH_TYPE_FARADAY)
-+#else
-+# define machine_is_faraday() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SBC9312
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SBC9312
-+# endif
-+# define machine_is_sbc9312() (machine_arch_type == MACH_TYPE_SBC9312)
-+#else
-+# define machine_is_sbc9312() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BATMAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BATMAN
-+# endif
-+# define machine_is_batman() (machine_arch_type == MACH_TYPE_BATMAN)
-+#else
-+# define machine_is_batman() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_JPD201
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_JPD201
-+# endif
-+# define machine_is_jpd201() (machine_arch_type == MACH_TYPE_JPD201)
-+#else
-+# define machine_is_jpd201() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MIPSA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MIPSA
-+# endif
-+# define machine_is_mipsa() (machine_arch_type == MACH_TYPE_MIPSA)
-+#else
-+# define machine_is_mipsa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_KACOM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_KACOM
-+# endif
-+# define machine_is_kacom() (machine_arch_type == MACH_TYPE_KACOM)
-+#else
-+# define machine_is_kacom() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SWARCOCPU
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SWARCOCPU
-+# endif
-+# define machine_is_swarcocpu() (machine_arch_type == MACH_TYPE_SWARCOCPU)
-+#else
-+# define machine_is_swarcocpu() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SWARCODSL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SWARCODSL
-+# endif
-+# define machine_is_swarcodsl() (machine_arch_type == MACH_TYPE_SWARCODSL)
-+#else
-+# define machine_is_swarcodsl() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BLUEANGEL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BLUEANGEL
-+# endif
-+# define machine_is_blueangel() (machine_arch_type == MACH_TYPE_BLUEANGEL)
-+#else
-+# define machine_is_blueangel() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HAIRYGRAMA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HAIRYGRAMA
-+# endif
-+# define machine_is_hairygrama() (machine_arch_type == MACH_TYPE_HAIRYGRAMA)
-+#else
-+# define machine_is_hairygrama() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BANFF
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BANFF
-+# endif
-+# define machine_is_banff() (machine_arch_type == MACH_TYPE_BANFF)
-+#else
-+# define machine_is_banff() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CARMEVA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CARMEVA
-+# endif
-+# define machine_is_carmeva() (machine_arch_type == MACH_TYPE_CARMEVA)
-+#else
-+# define machine_is_carmeva() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAM255
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAM255
-+# endif
-+# define machine_is_sam255() (machine_arch_type == MACH_TYPE_SAM255)
-+#else
-+# define machine_is_sam255() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PPM10
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PPM10
-+# endif
-+# define machine_is_ppm10() (machine_arch_type == MACH_TYPE_PPM10)
-+#else
-+# define machine_is_ppm10() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDB9315A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDB9315A
-+# endif
-+# define machine_is_edb9315a() (machine_arch_type == MACH_TYPE_EDB9315A)
-+#else
-+# define machine_is_edb9315a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SUNSET
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SUNSET
-+# endif
-+# define machine_is_sunset() (machine_arch_type == MACH_TYPE_SUNSET)
-+#else
-+# define machine_is_sunset() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STARGATE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STARGATE2
-+# endif
-+# define machine_is_stargate2() (machine_arch_type == MACH_TYPE_STARGATE2)
-+#else
-+# define machine_is_stargate2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_INTELMOTE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_INTELMOTE2
-+# endif
-+# define machine_is_intelmote2() (machine_arch_type == MACH_TYPE_INTELMOTE2)
-+#else
-+# define machine_is_intelmote2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TRIZEPS4
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TRIZEPS4
-+# endif
-+# define machine_is_trizeps4() (machine_arch_type == MACH_TYPE_TRIZEPS4)
-+#else
-+# define machine_is_trizeps4() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAINSTONE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAINSTONE2
-+# endif
-+# define machine_is_mainstone2() (machine_arch_type == MACH_TYPE_MAINSTONE2)
-+#else
-+# define machine_is_mainstone2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZ_IXP42X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZ_IXP42X
-+# endif
-+# define machine_is_ez_ixp42x() (machine_arch_type == MACH_TYPE_EZ_IXP42X)
-+#else
-+# define machine_is_ez_ixp42x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TAPWAVE_ZODIAC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TAPWAVE_ZODIAC
-+# endif
-+# define machine_is_tapwave_zodiac() (machine_arch_type == MACH_TYPE_TAPWAVE_ZODIAC)
-+#else
-+# define machine_is_tapwave_zodiac() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UNIVERSALMETER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UNIVERSALMETER
-+# endif
-+# define machine_is_universalmeter() (machine_arch_type == MACH_TYPE_UNIVERSALMETER)
-+#else
-+# define machine_is_universalmeter() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HICOARM9
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HICOARM9
-+# endif
-+# define machine_is_hicoarm9() (machine_arch_type == MACH_TYPE_HICOARM9)
-+#else
-+# define machine_is_hicoarm9() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX4008
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX4008
-+# endif
-+# define machine_is_pnx4008() (machine_arch_type == MACH_TYPE_PNX4008)
-+#else
-+# define machine_is_pnx4008() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_KWS6000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_KWS6000
-+# endif
-+# define machine_is_kws6000() (machine_arch_type == MACH_TYPE_KWS6000)
-+#else
-+# define machine_is_kws6000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PORTUX920T
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PORTUX920T
-+# endif
-+# define machine_is_portux920t() (machine_arch_type == MACH_TYPE_PORTUX920T)
-+#else
-+# define machine_is_portux920t() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZ_X5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZ_X5
-+# endif
-+# define machine_is_ez_x5() (machine_arch_type == MACH_TYPE_EZ_X5)
-+#else
-+# define machine_is_ez_x5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_RUDOLPH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_RUDOLPH
-+# endif
-+# define machine_is_omap_rudolph() (machine_arch_type == MACH_TYPE_OMAP_RUDOLPH)
-+#else
-+# define machine_is_omap_rudolph() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CPUAT91
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CPUAT91
-+# endif
-+# define machine_is_cpuat91() (machine_arch_type == MACH_TYPE_CPUAT91)
-+#else
-+# define machine_is_cpuat91() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REA9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REA9200
-+# endif
-+# define machine_is_rea9200() (machine_arch_type == MACH_TYPE_REA9200)
-+#else
-+# define machine_is_rea9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ACTS_PUNE_SA1110
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ACTS_PUNE_SA1110
-+# endif
-+# define machine_is_acts_pune_sa1110() (machine_arch_type == MACH_TYPE_ACTS_PUNE_SA1110)
-+#else
-+# define machine_is_acts_pune_sa1110() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXP425
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXP425
-+# endif
-+# define machine_is_ixp425() (machine_arch_type == MACH_TYPE_IXP425)
-+#else
-+# define machine_is_ixp425() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARGONPLUSODYSSEY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARGONPLUSODYSSEY
-+# endif
-+# define machine_is_i30030ads() (machine_arch_type == MACH_TYPE_ARGONPLUSODYSSEY)
-+#else
-+# define machine_is_i30030ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PERCH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PERCH
-+# endif
-+# define machine_is_perch() (machine_arch_type == MACH_TYPE_PERCH)
-+#else
-+# define machine_is_perch() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EIS05R1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EIS05R1
-+# endif
-+# define machine_is_eis05r1() (machine_arch_type == MACH_TYPE_EIS05R1)
-+#else
-+# define machine_is_eis05r1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PEPPERPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PEPPERPAD
-+# endif
-+# define machine_is_pepperpad() (machine_arch_type == MACH_TYPE_PEPPERPAD)
-+#else
-+# define machine_is_pepperpad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SB3010
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SB3010
-+# endif
-+# define machine_is_sb3010() (machine_arch_type == MACH_TYPE_SB3010)
-+#else
-+# define machine_is_sb3010() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RM9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RM9200
-+# endif
-+# define machine_is_rm9200() (machine_arch_type == MACH_TYPE_RM9200)
-+#else
-+# define machine_is_rm9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DMA03
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DMA03
-+# endif
-+# define machine_is_dma03() (machine_arch_type == MACH_TYPE_DMA03)
-+#else
-+# define machine_is_dma03() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ROAD_S101
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ROAD_S101
-+# endif
-+# define machine_is_road_s101() (machine_arch_type == MACH_TYPE_ROAD_S101)
-+#else
-+# define machine_is_road_s101() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_A
-+# endif
-+# define machine_is_iq_nextgen_a() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_A)
-+#else
-+# define machine_is_iq_nextgen_a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_B
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_B
-+# endif
-+# define machine_is_iq_nextgen_b() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_B)
-+#else
-+# define machine_is_iq_nextgen_b() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_C
-+# endif
-+# define machine_is_iq_nextgen_c() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_C)
-+#else
-+# define machine_is_iq_nextgen_c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_D
-+# endif
-+# define machine_is_iq_nextgen_d() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_D)
-+#else
-+# define machine_is_iq_nextgen_d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ_NEXTGEN_E
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_E
-+# endif
-+# define machine_is_iq_nextgen_e() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_E)
-+#else
-+# define machine_is_iq_nextgen_e() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MALLOW_AT91
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MALLOW_AT91
-+# endif
-+# define machine_is_mallow_at91() (machine_arch_type == MACH_TYPE_MALLOW_AT91)
-+#else
-+# define machine_is_mallow_at91() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CYBERTRACKER_I
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CYBERTRACKER_I
-+# endif
-+# define machine_is_cybertracker_i() (machine_arch_type == MACH_TYPE_CYBERTRACKER_I)
-+#else
-+# define machine_is_cybertracker_i() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GESBC931X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GESBC931X
-+# endif
-+# define machine_is_gesbc931x() (machine_arch_type == MACH_TYPE_GESBC931X)
-+#else
-+# define machine_is_gesbc931x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CENTIPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CENTIPAD
-+# endif
-+# define machine_is_centipad() (machine_arch_type == MACH_TYPE_CENTIPAD)
-+#else
-+# define machine_is_centipad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARMSOC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARMSOC
-+# endif
-+# define machine_is_armsoc() (machine_arch_type == MACH_TYPE_ARMSOC)
-+#else
-+# define machine_is_armsoc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SE4200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SE4200
-+# endif
-+# define machine_is_se4200() (machine_arch_type == MACH_TYPE_SE4200)
-+#else
-+# define machine_is_se4200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMS197A
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMS197A
-+# endif
-+# define machine_is_ems197a() (machine_arch_type == MACH_TYPE_EMS197A)
-+#else
-+# define machine_is_ems197a() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MICRO9
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MICRO9
-+# endif
-+# define machine_is_micro9() (machine_arch_type == MACH_TYPE_MICRO9)
-+#else
-+# define machine_is_micro9() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MICRO9L
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MICRO9L
-+# endif
-+# define machine_is_micro9l() (machine_arch_type == MACH_TYPE_MICRO9L)
-+#else
-+# define machine_is_micro9l() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UC5471DSP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UC5471DSP
-+# endif
-+# define machine_is_uc5471dsp() (machine_arch_type == MACH_TYPE_UC5471DSP)
-+#else
-+# define machine_is_uc5471dsp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SJ5471ENG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SJ5471ENG
-+# endif
-+# define machine_is_sj5471eng() (machine_arch_type == MACH_TYPE_SJ5471ENG)
-+#else
-+# define machine_is_sj5471eng() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CMPXA26X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CMPXA26X
-+# endif
-+# define machine_is_none() (machine_arch_type == MACH_TYPE_CMPXA26X)
-+#else
-+# define machine_is_none() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NC
-+# endif
-+# define machine_is_nc1() (machine_arch_type == MACH_TYPE_NC)
-+#else
-+# define machine_is_nc1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTE
-+# endif
-+# define machine_is_omap_palmte() (machine_arch_type == MACH_TYPE_OMAP_PALMTE)
-+#else
-+# define machine_is_omap_palmte() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AJAX52X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AJAX52X
-+# endif
-+# define machine_is_ajax52x() (machine_arch_type == MACH_TYPE_AJAX52X)
-+#else
-+# define machine_is_ajax52x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SIRIUSTAR
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SIRIUSTAR
-+# endif
-+# define machine_is_siriustar() (machine_arch_type == MACH_TYPE_SIRIUSTAR)
-+#else
-+# define machine_is_siriustar() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IODATA_HDLG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IODATA_HDLG
-+# endif
-+# define machine_is_iodata_hdlg() (machine_arch_type == MACH_TYPE_IODATA_HDLG)
-+#else
-+# define machine_is_iodata_hdlg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91RM9200UTL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91RM9200UTL
-+# endif
-+# define machine_is_at91rm9200utl() (machine_arch_type == MACH_TYPE_AT91RM9200UTL)
-+#else
-+# define machine_is_at91rm9200utl() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BIOSAFE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BIOSAFE
-+# endif
-+# define machine_is_biosafe() (machine_arch_type == MACH_TYPE_BIOSAFE)
-+#else
-+# define machine_is_biosafe() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MP1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MP1000
-+# endif
-+# define machine_is_mp1000() (machine_arch_type == MACH_TYPE_MP1000)
-+#else
-+# define machine_is_mp1000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PARSY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PARSY
-+# endif
-+# define machine_is_parsy() (machine_arch_type == MACH_TYPE_PARSY)
-+#else
-+# define machine_is_parsy() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CCXP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CCXP
-+# endif
-+# define machine_is_ccxp270() (machine_arch_type == MACH_TYPE_CCXP)
-+#else
-+# define machine_is_ccxp270() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_GSAMPLE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_GSAMPLE
-+# endif
-+# define machine_is_omap_gsample() (machine_arch_type == MACH_TYPE_OMAP_GSAMPLE)
-+#else
-+# define machine_is_omap_gsample() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REALVIEW_EB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REALVIEW_EB
-+# endif
-+# define machine_is_realview_eb() (machine_arch_type == MACH_TYPE_REALVIEW_EB)
-+#else
-+# define machine_is_realview_eb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAMOA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAMOA
-+# endif
-+# define machine_is_samoa() (machine_arch_type == MACH_TYPE_SAMOA)
-+#else
-+# define machine_is_samoa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_T3XSCALE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_T3XSCALE
-+# endif
-+# define machine_is_t3xscale() (machine_arch_type == MACH_TYPE_T3XSCALE)
-+#else
-+# define machine_is_t3xscale() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_I878
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_I878
-+# endif
-+# define machine_is_i878() (machine_arch_type == MACH_TYPE_I878)
-+#else
-+# define machine_is_i878() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BORZOI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BORZOI
-+# endif
-+# define machine_is_borzoi() (machine_arch_type == MACH_TYPE_BORZOI)
-+#else
-+# define machine_is_borzoi() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GECKO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GECKO
-+# endif
-+# define machine_is_gecko() (machine_arch_type == MACH_TYPE_GECKO)
-+#else
-+# define machine_is_gecko() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS101
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS101
-+# endif
-+# define machine_is_ds101() (machine_arch_type == MACH_TYPE_DS101)
-+#else
-+# define machine_is_ds101() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTT2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTT2
-+# endif
-+# define machine_is_omap_palmtt2() (machine_arch_type == MACH_TYPE_OMAP_PALMTT2)
-+#else
-+# define machine_is_omap_palmtt2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMLD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMLD
-+# endif
-+# define machine_is_xscale_palmld() (machine_arch_type == MACH_TYPE_XSCALE_PALMLD)
-+#else
-+# define machine_is_xscale_palmld() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CC9C
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CC9C
-+# endif
-+# define machine_is_cc9c() (machine_arch_type == MACH_TYPE_CC9C)
-+#else
-+# define machine_is_cc9c() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SBC1670
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SBC1670
-+# endif
-+# define machine_is_sbc1670() (machine_arch_type == MACH_TYPE_SBC1670)
-+#else
-+# define machine_is_sbc1670() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXDP28X5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXDP28X5
-+# endif
-+# define machine_is_ixdp28x5() (machine_arch_type == MACH_TYPE_IXDP28X5)
-+#else
-+# define machine_is_ixdp28x5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTT
-+# endif
-+# define machine_is_omap_palmtt() (machine_arch_type == MACH_TYPE_OMAP_PALMTT)
-+#else
-+# define machine_is_omap_palmtt() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ML696K
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ML696K
-+# endif
-+# define machine_is_ml696k() (machine_arch_type == MACH_TYPE_ML696K)
-+#else
-+# define machine_is_ml696k() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARCOM_ZEUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARCOM_ZEUS
-+# endif
-+# define machine_is_arcom_zeus() (machine_arch_type == MACH_TYPE_ARCOM_ZEUS)
-+#else
-+# define machine_is_arcom_zeus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OSIRIS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OSIRIS
-+# endif
-+# define machine_is_osiris() (machine_arch_type == MACH_TYPE_OSIRIS)
-+#else
-+# define machine_is_osiris() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAESTRO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAESTRO
-+# endif
-+# define machine_is_maestro() (machine_arch_type == MACH_TYPE_MAESTRO)
-+#else
-+# define machine_is_maestro() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TUNGE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TUNGE2
-+# endif
-+# define machine_is_tunge2() (machine_arch_type == MACH_TYPE_TUNGE2)
-+#else
-+# define machine_is_tunge2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXBBM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXBBM
-+# endif
-+# define machine_is_ixbbm() (machine_arch_type == MACH_TYPE_IXBBM)
-+#else
-+# define machine_is_ixbbm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX27
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX27
-+# endif
-+# define machine_is_mx27ads() (machine_arch_type == MACH_TYPE_MX27)
-+#else
-+# define machine_is_mx27ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AX8004
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AX8004
-+# endif
-+# define machine_is_ax8004() (machine_arch_type == MACH_TYPE_AX8004)
-+#else
-+# define machine_is_ax8004() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91SAM9261EK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91SAM9261EK
-+# endif
-+# define machine_is_at91sam9261ek() (machine_arch_type == MACH_TYPE_AT91SAM9261EK)
-+#else
-+# define machine_is_at91sam9261ek() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LOFT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LOFT
-+# endif
-+# define machine_is_loft() (machine_arch_type == MACH_TYPE_LOFT)
-+#else
-+# define machine_is_loft() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAGPIE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAGPIE
-+# endif
-+# define machine_is_magpie() (machine_arch_type == MACH_TYPE_MAGPIE)
-+#else
-+# define machine_is_magpie() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX21
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX21
-+# endif
-+# define machine_is_mx21ads() (machine_arch_type == MACH_TYPE_MX21)
-+#else
-+# define machine_is_mx21ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MB87M3400
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MB87M3400
-+# endif
-+# define machine_is_mb87m3400() (machine_arch_type == MACH_TYPE_MB87M3400)
-+#else
-+# define machine_is_mb87m3400() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MGUARD_DELTA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MGUARD_DELTA
-+# endif
-+# define machine_is_mguard_delta() (machine_arch_type == MACH_TYPE_MGUARD_DELTA)
-+#else
-+# define machine_is_mguard_delta() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DAVINCI_DVDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DAVINCI_DVDP
-+# endif
-+# define machine_is_davinci_dvdp() (machine_arch_type == MACH_TYPE_DAVINCI_DVDP)
-+#else
-+# define machine_is_davinci_dvdp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCUNIVERSAL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCUNIVERSAL
-+# endif
-+# define machine_is_htcuniversal() (machine_arch_type == MACH_TYPE_HTCUNIVERSAL)
-+#else
-+# define machine_is_htcuniversal() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TPAD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TPAD
-+# endif
-+# define machine_is_tpad() (machine_arch_type == MACH_TYPE_TPAD)
-+#else
-+# define machine_is_tpad() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ROVERP3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ROVERP3
-+# endif
-+# define machine_is_roverp3() (machine_arch_type == MACH_TYPE_ROVERP3)
-+#else
-+# define machine_is_roverp3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_JORNADA928
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_JORNADA928
-+# endif
-+# define machine_is_jornada928() (machine_arch_type == MACH_TYPE_JORNADA928)
-+#else
-+# define machine_is_jornada928() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MV88FXX81
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MV88FXX81
-+# endif
-+# define machine_is_mv88fxx81() (machine_arch_type == MACH_TYPE_MV88FXX81)
-+#else
-+# define machine_is_mv88fxx81() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STMP36XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STMP36XX
-+# endif
-+# define machine_is_stmp36xx() (machine_arch_type == MACH_TYPE_STMP36XX)
-+#else
-+# define machine_is_stmp36xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SXNI79524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SXNI79524
-+# endif
-+# define machine_is_sxni79524() (machine_arch_type == MACH_TYPE_SXNI79524)
-+#else
-+# define machine_is_sxni79524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AMS_DELTA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AMS_DELTA
-+# endif
-+# define machine_is_ams_delta() (machine_arch_type == MACH_TYPE_AMS_DELTA)
-+#else
-+# define machine_is_ams_delta() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_URANIUM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_URANIUM
-+# endif
-+# define machine_is_uranium() (machine_arch_type == MACH_TYPE_URANIUM)
-+#else
-+# define machine_is_uranium() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UCON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UCON
-+# endif
-+# define machine_is_ucon() (machine_arch_type == MACH_TYPE_UCON)
-+#else
-+# define machine_is_ucon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NAS100D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NAS100D
-+# endif
-+# define machine_is_nas100d() (machine_arch_type == MACH_TYPE_NAS100D)
-+#else
-+# define machine_is_nas100d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_L083_1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_L083_1000
-+# endif
-+# define machine_is_l083() (machine_arch_type == MACH_TYPE_L083_1000)
-+#else
-+# define machine_is_l083() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EZX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EZX
-+# endif
-+# define machine_is_ezx() (machine_arch_type == MACH_TYPE_EZX)
-+#else
-+# define machine_is_ezx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX5220
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX5220
-+# endif
-+# define machine_is_pnx5220() (machine_arch_type == MACH_TYPE_PNX5220)
-+#else
-+# define machine_is_pnx5220() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BUTTE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BUTTE
-+# endif
-+# define machine_is_butte() (machine_arch_type == MACH_TYPE_BUTTE)
-+#else
-+# define machine_is_butte() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SRM2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SRM2
-+# endif
-+# define machine_is_srm2() (machine_arch_type == MACH_TYPE_SRM2)
-+#else
-+# define machine_is_srm2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DSBR
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DSBR
-+# endif
-+# define machine_is_dsbr() (machine_arch_type == MACH_TYPE_DSBR)
-+#else
-+# define machine_is_dsbr() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CRYSTALBALL
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CRYSTALBALL
-+# endif
-+# define machine_is_crystalball() (machine_arch_type == MACH_TYPE_CRYSTALBALL)
-+#else
-+# define machine_is_crystalball() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TINYPXA27X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TINYPXA27X
-+# endif
-+# define machine_is_tinypxa27x() (machine_arch_type == MACH_TYPE_TINYPXA27X)
-+#else
-+# define machine_is_tinypxa27x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HERBIE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HERBIE
-+# endif
-+# define machine_is_herbie() (machine_arch_type == MACH_TYPE_HERBIE)
-+#else
-+# define machine_is_herbie() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAGICIAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAGICIAN
-+# endif
-+# define machine_is_magician() (machine_arch_type == MACH_TYPE_MAGICIAN)
-+#else
-+# define machine_is_magician() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CM4002
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CM4002
-+# endif
-+# define machine_is_cm4002() (machine_arch_type == MACH_TYPE_CM4002)
-+#else
-+# define machine_is_cm4002() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_B4
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_B4
-+# endif
-+# define machine_is_b4() (machine_arch_type == MACH_TYPE_B4)
-+#else
-+# define machine_is_b4() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAUI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAUI
-+# endif
-+# define machine_is_maui() (machine_arch_type == MACH_TYPE_MAUI)
-+#else
-+# define machine_is_maui() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CYBERTRACKER_G
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CYBERTRACKER_G
-+# endif
-+# define machine_is_cybertracker_g() (machine_arch_type == MACH_TYPE_CYBERTRACKER_G)
-+#else
-+# define machine_is_cybertracker_g() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXDKN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXDKN
-+# endif
-+# define machine_is_nxdkn() (machine_arch_type == MACH_TYPE_NXDKN)
-+#else
-+# define machine_is_nxdkn() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MIO8390
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MIO8390
-+# endif
-+# define machine_is_mio8390() (machine_arch_type == MACH_TYPE_MIO8390)
-+#else
-+# define machine_is_mio8390() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMI_BOARD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMI_BOARD
-+# endif
-+# define machine_is_omi_board() (machine_arch_type == MACH_TYPE_OMI_BOARD)
-+#else
-+# define machine_is_omi_board() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX21CIV
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX21CIV
-+# endif
-+# define machine_is_mx21civ() (machine_arch_type == MACH_TYPE_MX21CIV)
-+#else
-+# define machine_is_mx21civ() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MAHI_CDAC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MAHI_CDAC
-+# endif
-+# define machine_is_mahi_cdac() (machine_arch_type == MACH_TYPE_MAHI_CDAC)
-+#else
-+# define machine_is_mahi_cdac() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTX
-+# endif
-+# define machine_is_xscale_palmtx() (machine_arch_type == MACH_TYPE_XSCALE_PALMTX)
-+#else
-+# define machine_is_xscale_palmtx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C2413
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C2413
-+# endif
-+# define machine_is_s3c2413() (machine_arch_type == MACH_TYPE_S3C2413)
-+#else
-+# define machine_is_s3c2413() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SAMSYS_EP0
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SAMSYS_EP0
-+# endif
-+# define machine_is_samsys_ep0() (machine_arch_type == MACH_TYPE_SAMSYS_EP0)
-+#else
-+# define machine_is_samsys_ep0() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WG302V1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WG302V1
-+# endif
-+# define machine_is_wg302v1() (machine_arch_type == MACH_TYPE_WG302V1)
-+#else
-+# define machine_is_wg302v1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WG302V2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WG302V2
-+# endif
-+# define machine_is_wg302v2() (machine_arch_type == MACH_TYPE_WG302V2)
-+#else
-+# define machine_is_wg302v2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EB42X
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EB42X
-+# endif
-+# define machine_is_eb42x() (machine_arch_type == MACH_TYPE_EB42X)
-+#else
-+# define machine_is_eb42x() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IQ331ES
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IQ331ES
-+# endif
-+# define machine_is_iq331es() (machine_arch_type == MACH_TYPE_IQ331ES)
-+#else
-+# define machine_is_iq331es() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COSYDSP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COSYDSP
-+# endif
-+# define machine_is_cosydsp() (machine_arch_type == MACH_TYPE_COSYDSP)
-+#else
-+# define machine_is_cosydsp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_UPLAT7D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_UPLAT7D
-+# endif
-+# define machine_is_uplat7d_proto() (machine_arch_type == MACH_TYPE_UPLAT7D)
-+#else
-+# define machine_is_uplat7d_proto() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PTDAVINCI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PTDAVINCI
-+# endif
-+# define machine_is_ptdavinci() (machine_arch_type == MACH_TYPE_PTDAVINCI)
-+#else
-+# define machine_is_ptdavinci() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MBUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MBUS
-+# endif
-+# define machine_is_mbus() (machine_arch_type == MACH_TYPE_MBUS)
-+#else
-+# define machine_is_mbus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NADIA2VB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NADIA2VB
-+# endif
-+# define machine_is_nadia2vb() (machine_arch_type == MACH_TYPE_NADIA2VB)
-+#else
-+# define machine_is_nadia2vb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_R1000
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_R1000
-+# endif
-+# define machine_is_r1000() (machine_arch_type == MACH_TYPE_R1000)
-+#else
-+# define machine_is_r1000() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HW90250
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HW90250
-+# endif
-+# define machine_is_hw90250() (machine_arch_type == MACH_TYPE_HW90250)
-+#else
-+# define machine_is_hw90250() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_2430SDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_2430SDP
-+# endif
-+# define machine_is_omap_2430sdp() (machine_arch_type == MACH_TYPE_OMAP_2430SDP)
-+#else
-+# define machine_is_omap_2430sdp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DAVINCI_EVM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DAVINCI_EVM
-+# endif
-+# define machine_is_davinci_evm() (machine_arch_type == MACH_TYPE_DAVINCI_EVM)
-+#else
-+# define machine_is_davinci_evm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_TORNADO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_TORNADO
-+# endif
-+# define machine_is_omap_tornado() (machine_arch_type == MACH_TYPE_OMAP_TORNADO)
-+#else
-+# define machine_is_omap_tornado() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OLOCREEK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OLOCREEK
-+# endif
-+# define machine_is_olocreek() (machine_arch_type == MACH_TYPE_OLOCREEK)
-+#else
-+# define machine_is_olocreek() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PALMZ72
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PALMZ72
-+# endif
-+# define machine_is_palmz72() (machine_arch_type == MACH_TYPE_PALMZ72)
-+#else
-+# define machine_is_palmz72() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXDB500
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXDB500
-+# endif
-+# define machine_is_nxdb500() (machine_arch_type == MACH_TYPE_NXDB500)
-+#else
-+# define machine_is_nxdb500() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_APF9328
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_APF9328
-+# endif
-+# define machine_is_apf9328() (machine_arch_type == MACH_TYPE_APF9328)
-+#else
-+# define machine_is_apf9328() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_WIPOQ
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_WIPOQ
-+# endif
-+# define machine_is_omap_wipoq() (machine_arch_type == MACH_TYPE_OMAP_WIPOQ)
-+#else
-+# define machine_is_omap_wipoq() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_TWIP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_TWIP
-+# endif
-+# define machine_is_omap_twip() (machine_arch_type == MACH_TYPE_OMAP_TWIP)
-+#else
-+# define machine_is_omap_twip() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTREO650
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTREO650
-+# endif
-+# define machine_is_xscale_treo650() (machine_arch_type == MACH_TYPE_XSCALE_PALMTREO650)
-+#else
-+# define machine_is_xscale_treo650() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ACUMEN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ACUMEN
-+# endif
-+# define machine_is_acumen() (machine_arch_type == MACH_TYPE_ACUMEN)
-+#else
-+# define machine_is_acumen() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XP100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XP100
-+# endif
-+# define machine_is_xp100() (machine_arch_type == MACH_TYPE_XP100)
-+#else
-+# define machine_is_xp100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FS2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FS2410
-+# endif
-+# define machine_is_fs2410() (machine_arch_type == MACH_TYPE_FS2410)
-+#else
-+# define machine_is_fs2410() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA270_CERF
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA270_CERF
-+# endif
-+# define machine_is_pxa270_cerf() (machine_arch_type == MACH_TYPE_PXA270_CERF)
-+#else
-+# define machine_is_pxa270_cerf() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SQ2FTLPALM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SQ2FTLPALM
-+# endif
-+# define machine_is_sq2ftlpalm() (machine_arch_type == MACH_TYPE_SQ2FTLPALM)
-+#else
-+# define machine_is_sq2ftlpalm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BSEMSERVER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BSEMSERVER
-+# endif
-+# define machine_is_bsemserver() (machine_arch_type == MACH_TYPE_BSEMSERVER)
-+#else
-+# define machine_is_bsemserver() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NETCLIENT
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NETCLIENT
-+# endif
-+# define machine_is_netclient() (machine_arch_type == MACH_TYPE_NETCLIENT)
-+#else
-+# define machine_is_netclient() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSCALE_PALMTT5
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSCALE_PALMTT5
-+# endif
-+# define machine_is_xscale_palmtt5() (machine_arch_type == MACH_TYPE_XSCALE_PALMTT5)
-+#else
-+# define machine_is_xscale_palmtt5() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMTC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMTC
-+# endif
-+# define machine_is_xscale_palmtc() (machine_arch_type == MACH_TYPE_OMAP_PALMTC)
-+#else
-+# define machine_is_xscale_palmtc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_APOLLON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_APOLLON
-+# endif
-+# define machine_is_omap_apollon() (machine_arch_type == MACH_TYPE_OMAP_APOLLON)
-+#else
-+# define machine_is_omap_apollon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ARGONLVEVB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ARGONLVEVB
-+# endif
-+# define machine_is_mxc30030evb() (machine_arch_type == MACH_TYPE_ARGONLVEVB)
-+#else
-+# define machine_is_mxc30030evb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REA_2D
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REA_2D
-+# endif
-+# define machine_is_rea_2d() (machine_arch_type == MACH_TYPE_REA_2D)
-+#else
-+# define machine_is_rea_2d() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TI3E524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TI3E524
-+# endif
-+# define machine_is_eti3e524() (machine_arch_type == MACH_TYPE_TI3E524)
-+#else
-+# define machine_is_eti3e524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ATEB9200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ATEB9200
-+# endif
-+# define machine_is_ateb9200() (machine_arch_type == MACH_TYPE_ATEB9200)
-+#else
-+# define machine_is_ateb9200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AUCKLAND
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AUCKLAND
-+# endif
-+# define machine_is_auckland() (machine_arch_type == MACH_TYPE_AUCKLAND)
-+#else
-+# define machine_is_auckland() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AK3320M
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AK3320M
-+# endif
-+# define machine_is_ak3220m() (machine_arch_type == MACH_TYPE_AK3320M)
-+#else
-+# define machine_is_ak3220m() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DURAMAX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DURAMAX
-+# endif
-+# define machine_is_duramax() (machine_arch_type == MACH_TYPE_DURAMAX)
-+#else
-+# define machine_is_duramax() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_N35
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_N35
-+# endif
-+# define machine_is_n35() (machine_arch_type == MACH_TYPE_N35)
-+#else
-+# define machine_is_n35() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PRONGHORN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PRONGHORN
-+# endif
-+# define machine_is_pronghorn() (machine_arch_type == MACH_TYPE_PRONGHORN)
-+#else
-+# define machine_is_pronghorn() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FUNDY
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FUNDY
-+# endif
-+# define machine_is_fundy() (machine_arch_type == MACH_TYPE_FUNDY)
-+#else
-+# define machine_is_fundy() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LOGICPD_PXA270
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LOGICPD_PXA270
-+# endif
-+# define machine_is_logicpd_pxa270() (machine_arch_type == MACH_TYPE_LOGICPD_PXA270)
-+#else
-+# define machine_is_logicpd_pxa270() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CPU777
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CPU777
-+# endif
-+# define machine_is_cpu777() (machine_arch_type == MACH_TYPE_CPU777)
-+#else
-+# define machine_is_cpu777() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SIMICON9201
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SIMICON9201
-+# endif
-+# define machine_is_simicon9201() (machine_arch_type == MACH_TYPE_SIMICON9201)
-+#else
-+# define machine_is_simicon9201() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_LEAP2_HPM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_LEAP2_HPM
-+# endif
-+# define machine_is_leap2_hpm() (machine_arch_type == MACH_TYPE_LEAP2_HPM)
-+#else
-+# define machine_is_leap2_hpm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CM922TXA10
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CM922TXA10
-+# endif
-+# define machine_is_cm922txa10() (machine_arch_type == MACH_TYPE_CM922TXA10)
-+#else
-+# define machine_is_cm922txa10() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA
-+# endif
-+# define machine_is_sandgate() (machine_arch_type == MACH_TYPE_PXA)
-+#else
-+# define machine_is_sandgate() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2
-+# endif
-+# define machine_is_sandgate2() (machine_arch_type == MACH_TYPE_SANDGATE2)
-+#else
-+# define machine_is_sandgate2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2G
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2G
-+# endif
-+# define machine_is_sandgate2g() (machine_arch_type == MACH_TYPE_SANDGATE2G)
-+#else
-+# define machine_is_sandgate2g() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SANDGATE2P
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SANDGATE2P
-+# endif
-+# define machine_is_sandgate2p() (machine_arch_type == MACH_TYPE_SANDGATE2P)
-+#else
-+# define machine_is_sandgate2p() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FRED_JACK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FRED_JACK
-+# endif
-+# define machine_is_fred_jack() (machine_arch_type == MACH_TYPE_FRED_JACK)
-+#else
-+# define machine_is_fred_jack() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TTG_COLOR1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TTG_COLOR1
-+# endif
-+# define machine_is_ttg_color1() (machine_arch_type == MACH_TYPE_TTG_COLOR1)
-+#else
-+# define machine_is_ttg_color1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NXEB500HMI
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NXEB500HMI
-+# endif
-+# define machine_is_nxeb500hmi() (machine_arch_type == MACH_TYPE_NXEB500HMI)
-+#else
-+# define machine_is_nxeb500hmi() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NETDCU8
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NETDCU8
-+# endif
-+# define machine_is_netdcu8() (machine_arch_type == MACH_TYPE_NETDCU8)
-+#else
-+# define machine_is_netdcu8() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ML675050_CPU_BOA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ML675050_CPU_BOA
-+# endif
-+# define machine_is_ml675050_cpu_boa() (machine_arch_type == MACH_TYPE_ML675050_CPU_BOA)
-+#else
-+# define machine_is_ml675050_cpu_boa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NG_FVX538
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NG_FVX538
-+# endif
-+# define machine_is_ng_fvx538() (machine_arch_type == MACH_TYPE_NG_FVX538)
-+#else
-+# define machine_is_ng_fvx538() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NG_FVS338
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NG_FVS338
-+# endif
-+# define machine_is_ng_fvs338() (machine_arch_type == MACH_TYPE_NG_FVS338)
-+#else
-+# define machine_is_ng_fvs338() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PNX4103
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PNX4103
-+# endif
-+# define machine_is_pnx4103() (machine_arch_type == MACH_TYPE_PNX4103)
-+#else
-+# define machine_is_pnx4103() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HESDB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HESDB
-+# endif
-+# define machine_is_hesdb() (machine_arch_type == MACH_TYPE_HESDB)
-+#else
-+# define machine_is_hesdb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_XSILO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_XSILO
-+# endif
-+# define machine_is_xsilo() (machine_arch_type == MACH_TYPE_XSILO)
-+#else
-+# define machine_is_xsilo() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ESPRESSO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ESPRESSO
-+# endif
-+# define machine_is_espresso() (machine_arch_type == MACH_TYPE_ESPRESSO)
-+#else
-+# define machine_is_espresso() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMLC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMLC
-+# endif
-+# define machine_is_emlc() (machine_arch_type == MACH_TYPE_EMLC)
-+#else
-+# define machine_is_emlc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SISTERON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SISTERON
-+# endif
-+# define machine_is_sisteron() (machine_arch_type == MACH_TYPE_SISTERON)
-+#else
-+# define machine_is_sisteron() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_RX1950
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_RX1950
-+# endif
-+# define machine_is_rx1950() (machine_arch_type == MACH_TYPE_RX1950)
-+#else
-+# define machine_is_rx1950() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TSC_VENUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TSC_VENUS
-+# endif
-+# define machine_is_tsc_venus() (machine_arch_type == MACH_TYPE_TSC_VENUS)
-+#else
-+# define machine_is_tsc_venus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DS101J
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DS101J
-+# endif
-+# define machine_is_ds101j() (machine_arch_type == MACH_TYPE_DS101J)
-+#else
-+# define machine_is_ds101j() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MXC30030ADS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MXC30030ADS
-+# endif
-+# define machine_is_mxc30030ads() (machine_arch_type == MACH_TYPE_MXC30030ADS)
-+#else
-+# define machine_is_mxc30030ads() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_FUJITSU_WIMAXSOC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_FUJITSU_WIMAXSOC
-+# endif
-+# define machine_is_fujitsu_wimaxsoc() (machine_arch_type == MACH_TYPE_FUJITSU_WIMAXSOC)
-+#else
-+# define machine_is_fujitsu_wimaxsoc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DUALPCMODEM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DUALPCMODEM
-+# endif
-+# define machine_is_dualpcmodem() (machine_arch_type == MACH_TYPE_DUALPCMODEM)
-+#else
-+# define machine_is_dualpcmodem() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GESBC9312
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GESBC9312
-+# endif
-+# define machine_is_gesbc9312() (machine_arch_type == MACH_TYPE_GESBC9312)
-+#else
-+# define machine_is_gesbc9312() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCAPACHE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCAPACHE
-+# endif
-+# define machine_is_htcapache() (machine_arch_type == MACH_TYPE_HTCAPACHE)
-+#else
-+# define machine_is_htcapache() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXDP435
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXDP435
-+# endif
-+# define machine_is_ixdp435() (machine_arch_type == MACH_TYPE_IXDP435)
-+#else
-+# define machine_is_ixdp435() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CATPROVT100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CATPROVT100
-+# endif
-+# define machine_is_catprovt100() (machine_arch_type == MACH_TYPE_CATPROVT100)
-+#else
-+# define machine_is_catprovt100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PICOTUX1XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PICOTUX1XX
-+# endif
-+# define machine_is_picotux1xx() (machine_arch_type == MACH_TYPE_PICOTUX1XX)
-+#else
-+# define machine_is_picotux1xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PICOTUX2XX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PICOTUX2XX
-+# endif
-+# define machine_is_picotux2xx() (machine_arch_type == MACH_TYPE_PICOTUX2XX)
-+#else
-+# define machine_is_picotux2xx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DSMG600
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DSMG600
-+# endif
-+# define machine_is_dsmg600() (machine_arch_type == MACH_TYPE_DSMG600)
-+#else
-+# define machine_is_dsmg600() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EMPC2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EMPC2
-+# endif
-+# define machine_is_empc2() (machine_arch_type == MACH_TYPE_EMPC2)
-+#else
-+# define machine_is_empc2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VENTURA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VENTURA
-+# endif
-+# define machine_is_ventura() (machine_arch_type == MACH_TYPE_VENTURA)
-+#else
-+# define machine_is_ventura() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PHIDGET_SBC
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PHIDGET_SBC
-+# endif
-+# define machine_is_phidget_sbc() (machine_arch_type == MACH_TYPE_PHIDGET_SBC)
-+#else
-+# define machine_is_phidget_sbc() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IJ3K
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IJ3K
-+# endif
-+# define machine_is_ij3k() (machine_arch_type == MACH_TYPE_IJ3K)
-+#else
-+# define machine_is_ij3k() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PISGAH
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PISGAH
-+# endif
-+# define machine_is_pisgah() (machine_arch_type == MACH_TYPE_PISGAH)
-+#else
-+# define machine_is_pisgah() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_FSAMPLE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_FSAMPLE
-+# endif
-+# define machine_is_omap_fsample() (machine_arch_type == MACH_TYPE_OMAP_FSAMPLE)
-+#else
-+# define machine_is_omap_fsample() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SG720
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SG720
-+# endif
-+# define machine_is_sg720() (machine_arch_type == MACH_TYPE_SG720)
-+#else
-+# define machine_is_sg720() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_REDFOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_REDFOX
-+# endif
-+# define machine_is_redfox() (machine_arch_type == MACH_TYPE_REDFOX)
-+#else
-+# define machine_is_redfox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MYSH_EP9315_1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MYSH_EP9315_1
-+# endif
-+# define machine_is_mysh_ep9315_1() (machine_arch_type == MACH_TYPE_MYSH_EP9315_1)
-+#else
-+# define machine_is_mysh_ep9315_1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TPF106
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TPF106
-+# endif
-+# define machine_is_tpf106() (machine_arch_type == MACH_TYPE_TPF106)
-+#else
-+# define machine_is_tpf106() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AT91RM9200KG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AT91RM9200KG
-+# endif
-+# define machine_is_at91rm9200kg() (machine_arch_type == MACH_TYPE_AT91RM9200KG)
-+#else
-+# define machine_is_at91rm9200kg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SLEDB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SLEDB
-+# endif
-+# define machine_is_racemt2() (machine_arch_type == MACH_TYPE_SLEDB)
-+#else
-+# define machine_is_racemt2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ONTRACK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ONTRACK
-+# endif
-+# define machine_is_ontrack() (machine_arch_type == MACH_TYPE_ONTRACK)
-+#else
-+# define machine_is_ontrack() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PM1200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PM1200
-+# endif
-+# define machine_is_pm1200() (machine_arch_type == MACH_TYPE_PM1200)
-+#else
-+# define machine_is_pm1200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ESS24XXX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ESS24XXX
-+# endif
-+# define machine_is_ess24562() (machine_arch_type == MACH_TYPE_ESS24XXX)
-+#else
-+# define machine_is_ess24562() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_COREMP7
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_COREMP7
-+# endif
-+# define machine_is_coremp7() (machine_arch_type == MACH_TYPE_COREMP7)
-+#else
-+# define machine_is_coremp7() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NEXCODER_6446
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NEXCODER_6446
-+# endif
-+# define machine_is_nexcoder_6446() (machine_arch_type == MACH_TYPE_NEXCODER_6446)
-+#else
-+# define machine_is_nexcoder_6446() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_STVC8380
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_STVC8380
-+# endif
-+# define machine_is_stvc8380() (machine_arch_type == MACH_TYPE_STVC8380)
-+#else
-+# define machine_is_stvc8380() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_TEKLYNX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_TEKLYNX
-+# endif
-+# define machine_is_teklynx() (machine_arch_type == MACH_TYPE_TEKLYNX)
-+#else
-+# define machine_is_teklynx() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CARBONADO
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CARBONADO
-+# endif
-+# define machine_is_carbonado() (machine_arch_type == MACH_TYPE_CARBONADO)
-+#else
-+# define machine_is_carbonado() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SYSMOS_MP730
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SYSMOS_MP730
-+# endif
-+# define machine_is_sysmos_mp730() (machine_arch_type == MACH_TYPE_SYSMOS_MP730)
-+#else
-+# define machine_is_sysmos_mp730() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SNAPPER_CL15
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SNAPPER_CL15
-+# endif
-+# define machine_is_snapper_cl15() (machine_arch_type == MACH_TYPE_SNAPPER_CL15)
-+#else
-+# define machine_is_snapper_cl15() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PGIGIM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PGIGIM
-+# endif
-+# define machine_is_pgigim() (machine_arch_type == MACH_TYPE_PGIGIM)
-+#else
-+# define machine_is_pgigim() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PTX9160P2
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PTX9160P2
-+# endif
-+# define machine_is_ptx9160p2() (machine_arch_type == MACH_TYPE_PTX9160P2)
-+#else
-+# define machine_is_ptx9160p2() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DCORE1
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DCORE1
-+# endif
-+# define machine_is_dcore1() (machine_arch_type == MACH_TYPE_DCORE1)
-+#else
-+# define machine_is_dcore1() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VICTORPXA
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VICTORPXA
-+# endif
-+# define machine_is_victorpxa() (machine_arch_type == MACH_TYPE_VICTORPXA)
-+#else
-+# define machine_is_victorpxa() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MX2DTB
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MX2DTB
-+# endif
-+# define machine_is_mx2dtb() (machine_arch_type == MACH_TYPE_MX2DTB)
-+#else
-+# define machine_is_mx2dtb() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PXA_IREX_ER0100
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PXA_IREX_ER0100
-+# endif
-+# define machine_is_pxa_irex_er0100() (machine_arch_type == MACH_TYPE_PXA_IREX_ER0100)
-+#else
-+# define machine_is_pxa_irex_er0100() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_PALMZ71
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_PALMZ71
-+# endif
-+# define machine_is_omap_palmz71() (machine_arch_type == MACH_TYPE_OMAP_PALMZ71)
-+#else
-+# define machine_is_omap_palmz71() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BARTEC_DEG
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BARTEC_DEG
-+# endif
-+# define machine_is_bartec_deg() (machine_arch_type == MACH_TYPE_BARTEC_DEG)
-+#else
-+# define machine_is_bartec_deg() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HW50251
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HW50251
-+# endif
-+# define machine_is_hw50251() (machine_arch_type == MACH_TYPE_HW50251)
-+#else
-+# define machine_is_hw50251() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IBOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IBOX
-+# endif
-+# define machine_is_ibox() (machine_arch_type == MACH_TYPE_IBOX)
-+#else
-+# define machine_is_ibox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ATLASLH7A404
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ATLASLH7A404
-+# endif
-+# define machine_is_atlaslh7a404() (machine_arch_type == MACH_TYPE_ATLASLH7A404)
-+#else
-+# define machine_is_atlaslh7a404() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PT2026
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PT2026
-+# endif
-+# define machine_is_pt2026() (machine_arch_type == MACH_TYPE_PT2026)
-+#else
-+# define machine_is_pt2026() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCALPINE
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCALPINE
-+# endif
-+# define machine_is_htcalpine() (machine_arch_type == MACH_TYPE_HTCALPINE)
-+#else
-+# define machine_is_htcalpine() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BARTEC_VTU
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BARTEC_VTU
-+# endif
-+# define machine_is_bartec_vtu() (machine_arch_type == MACH_TYPE_BARTEC_VTU)
-+#else
-+# define machine_is_bartec_vtu() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_VCOREII
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_VCOREII
-+# endif
-+# define machine_is_vcoreii() (machine_arch_type == MACH_TYPE_VCOREII)
-+#else
-+# define machine_is_vcoreii() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_PDNB3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_PDNB3
-+# endif
-+# define machine_is_pdnb3() (machine_arch_type == MACH_TYPE_PDNB3)
-+#else
-+# define machine_is_pdnb3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_HTCBEETLES
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_HTCBEETLES
-+# endif
-+# define machine_is_htcbeetles() (machine_arch_type == MACH_TYPE_HTCBEETLES)
-+#else
-+# define machine_is_htcbeetles() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C6400
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C6400
-+# endif
-+# define machine_is_s3c6400() (machine_arch_type == MACH_TYPE_S3C6400)
-+#else
-+# define machine_is_s3c6400() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_S3C2443
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_S3C2443
-+# endif
-+# define machine_is_s3c2443() (machine_arch_type == MACH_TYPE_S3C2443)
-+#else
-+# define machine_is_s3c2443() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OMAP_LDK
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OMAP_LDK
-+# endif
-+# define machine_is_omap_ldk() (machine_arch_type == MACH_TYPE_OMAP_LDK)
-+#else
-+# define machine_is_omap_ldk() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2460
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2460
-+# endif
-+# define machine_is_smdk2460() (machine_arch_type == MACH_TYPE_SMDK2460)
-+#else
-+# define machine_is_smdk2460() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2440
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2440
-+# endif
-+# define machine_is_smdk2440() (machine_arch_type == MACH_TYPE_SMDK2440)
-+#else
-+# define machine_is_smdk2440() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2412
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2412
-+# endif
-+# define machine_is_smdk2412() (machine_arch_type == MACH_TYPE_SMDK2412)
-+#else
-+# define machine_is_smdk2412() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_WEBBOX
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_WEBBOX
-+# endif
-+# define machine_is_webbox() (machine_arch_type == MACH_TYPE_WEBBOX)
-+#else
-+# define machine_is_webbox() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CWWNDP
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CWWNDP
-+# endif
-+# define machine_is_cwwndp() (machine_arch_type == MACH_TYPE_CWWNDP)
-+#else
-+# define machine_is_cwwndp() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DRAGON
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DRAGON
-+# endif
-+# define machine_is_dragon() (machine_arch_type == MACH_TYPE_DRAGON)
-+#else
-+# define machine_is_dragon() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_OPENDO_CPU_BOARD
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_OPENDO_CPU_BOARD
-+# endif
-+# define machine_is_opendo_cpu_board() (machine_arch_type == MACH_TYPE_OPENDO_CPU_BOARD)
-+#else
-+# define machine_is_opendo_cpu_board() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CCM2200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CCM2200
-+# endif
-+# define machine_is_ccm2200() (machine_arch_type == MACH_TYPE_CCM2200)
-+#else
-+# define machine_is_ccm2200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_ETWARM
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_ETWARM
-+# endif
-+# define machine_is_etwarm() (machine_arch_type == MACH_TYPE_ETWARM)
-+#else
-+# define machine_is_etwarm() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_M93030
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_M93030
-+# endif
-+# define machine_is_m93030() (machine_arch_type == MACH_TYPE_M93030)
-+#else
-+# define machine_is_m93030() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_CC7U
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_CC7U
-+# endif
-+# define machine_is_cc7u() (machine_arch_type == MACH_TYPE_CC7U)
-+#else
-+# define machine_is_cc7u() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_MTT_RANGER
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_MTT_RANGER
-+# endif
-+# define machine_is_mtt_ranger() (machine_arch_type == MACH_TYPE_MTT_RANGER)
-+#else
-+# define machine_is_mtt_ranger() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_NEXUS
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_NEXUS
-+# endif
-+# define machine_is_nexus() (machine_arch_type == MACH_TYPE_NEXUS)
-+#else
-+# define machine_is_nexus() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_DESMAN
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_DESMAN
-+# endif
-+# define machine_is_desman() (machine_arch_type == MACH_TYPE_DESMAN)
-+#else
-+# define machine_is_desman() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BKDE303
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BKDE303
-+# endif
-+# define machine_is_bkde303() (machine_arch_type == MACH_TYPE_BKDE303)
-+#else
-+# define machine_is_bkde303() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SMDK2413
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SMDK2413
-+# endif
-+# define machine_is_smdk2413() (machine_arch_type == MACH_TYPE_SMDK2413)
-+#else
-+# define machine_is_smdk2413() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AML_M7200
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AML_M7200
-+# endif
-+# define machine_is_aml_m7200() (machine_arch_type == MACH_TYPE_AML_M7200)
-+#else
-+# define machine_is_aml_m7200() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AML_M5900
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AML_M5900
-+# endif
-+# define machine_is_aml_m5900() (machine_arch_type == MACH_TYPE_AML_M5900)
-+#else
-+# define machine_is_aml_m5900() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_SG640
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_SG640
-+# endif
-+# define machine_is_sg640() (machine_arch_type == MACH_TYPE_SG640)
-+#else
-+# define machine_is_sg640() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_EDG79524
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_EDG79524
-+# endif
-+# define machine_is_edg79524() (machine_arch_type == MACH_TYPE_EDG79524)
-+#else
-+# define machine_is_edg79524() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_AI2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_AI2410
-+# endif
-+# define machine_is_ai2410() (machine_arch_type == MACH_TYPE_AI2410)
-+#else
-+# define machine_is_ai2410() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_IXP465
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_IXP465
-+# endif
-+# define machine_is_ixp465() (machine_arch_type == MACH_TYPE_IXP465)
-+#else
-+# define machine_is_ixp465() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_BALLOON3
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_BALLOON3
-+# endif
-+# define machine_is_balloon3() (machine_arch_type == MACH_TYPE_BALLOON3)
-+#else
-+# define machine_is_balloon3() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_QT2410
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_QT2410
-+# endif
-+# define machine_is_qt2410() (machine_arch_type == MACH_TYPE_QT2410)
-+#else
-+# define machine_is_qt2410() (0)
-+#endif
-+
-+#ifdef CONFIG_MACH_GTA01
-+# ifdef machine_arch_type
-+# undef machine_arch_type
-+# define machine_arch_type __machine_arch_type
-+# else
-+# define machine_arch_type MACH_TYPE_GTA01
-+# endif
-+# define machine_is_gta01() (machine_arch_type == MACH_TYPE_GTA01)
-+#else
-+# define machine_is_gta01() (0)
-+#endif
-+
-+
- /*
- * These have not yet been registered
- */
-Index: git/include/configs/gta01.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/configs/gta01.h 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,233 @@
-+/*
-+ * (C) Copyright 2006 Harald Welte <hwelte@hmw-consulting.de>
-+ *
-+ * Configuation settings for the FIC GTA01 Linux GSM phone
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#ifndef __CONFIG_H
-+#define __CONFIG_H
-+
-+/* we want to start u-boot directly from within NAND flash */
-+#define CONFIG_S3C2410_NAND_BOOT 1
-+
-+/*
-+ * High Level Configuration Options
-+ * (easy to change)
-+ */
-+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-+
-+/* input clock of PLL */
-+#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA01 has 12MHz input clock */
-+
-+
-+#define USE_920T_MMU 1
-+#define CONFIG_USE_IRQ 1
-+
-+/*
-+ * Size of malloc() pool
-+ */
-+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-+
-+/*
-+ * Hardware drivers
-+ */
-+
-+/*
-+ * select serial console configuration
-+ */
-+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on GTA01 */
-+//#define CONFIG_HWFLOW 1
-+
-+/************************************************************
-+ * RTC
-+ ************************************************************/
-+#define CONFIG_RTC_S3C24X0 1
-+
-+/* allow to overwrite serial and ethaddr */
-+#define CONFIG_ENV_OVERWRITE
-+
-+#define CONFIG_BAUDRATE 115200
-+
-+/***********************************************************
-+ * Command definition
-+ ***********************************************************/
-+#define CONFIG_COMMANDS (\
-+ CFG_CMD_BDI | \
-+ CFG_CMD_LOADS | \
-+ CFG_CMD_LAODB | \
-+ CFG_CMD_IMI | \
-+ CFG_CMD_CACHE | \
-+ CFG_CMD_MEMORY | \
-+ CFG_CMD_ENV | \
-+ /* CFG_CMD_IRQ | */ \
-+ CFG_CMD_BOOTD | \
-+ CFG_CMD_CONSOLE | \
-+ CFG_CMD_ASKENV | \
-+ CFG_CMD_RUN | \
-+ CFG_CMD_ECHO | \
-+ CFG_CMD_I2C | \
-+ CFG_CMD_REGINFO | \
-+ CFG_CMD_IMMAP | \
-+ CFG_CMD_DATE | \
-+ CFG_CMD_AUTOSCRIPT | \
-+ CFG_CMD_BSP | \
-+ CFG_CMD_ELF | \
-+ CFG_CMD_MISC | \
-+ CFG_CMD_USB | \
-+ CFG_CMD_JFFS2 | \
-+ CFG_CMD_DIAG | \
-+ /* CFG_CMD_HWFLOW | */ \
-+ CFG_CMD_SAVES | \
-+ CFG_CMD_NAND | \
-+ CFG_CMD_PORTIO | \
-+ CFG_CMD_MMC | \
-+ CFG_CMD_FAT | \
-+ CFG_CMD_EXT2 | \
-+ 0)
-+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-+#include <cmd_confdefs.h>
-+
-+#define CONFIG_BOOTDELAY 3
-+#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
-+#define CONFIG_BOOTCOMMAND "nand read 0x32000000 0x34000 0x200000; bootm 0x32000000"
-+
-+#define CONFIG_DOS_PARTITION 1
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-+/* what's this ? it's not used anywhere */
-+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-+#endif
-+
-+/*
-+ * Miscellaneous configurable options
-+ */
-+#define CFG_LONGHELP /* undef to save memory */
-+#define CFG_PROMPT "GTA01 # " /* Monitor Command Prompt */
-+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-+#define CFG_MAXARGS 16 /* max number of command args */
-+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-+
-+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-+
-+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-+
-+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-+
-+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-+/* it to wrap 100 times (total 1562500) to get 1 sec. */
-+#define CFG_HZ 1562500
-+
-+/* valid baudrates */
-+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-+
-+/*-----------------------------------------------------------------------
-+ * Stack sizes
-+ *
-+ * The stack sizes are set up in start.S using the settings below
-+ */
-+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-+#ifdef CONFIG_USE_IRQ
-+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-+#endif
-+
-+#define CONFIG_USB_OHCI 1
-+
-+/*-----------------------------------------------------------------------
-+ * Physical Memory Map
-+ */
-+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-+
-+/*-----------------------------------------------------------------------
-+ * FLASH and environment organization
-+ */
-+
-+/* No NOR flash in this device */
-+#define CFG_NO_FLASH 1
-+
-+#define CFG_ENV_IS_IN_NAND 1
-+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-+
-+#define NAND_MAX_CHIPS 1
-+#define CFG_NAND_BASE 0x4e000000
-+#define CFG_MAX_NAND_DEVICE 1
-+
-+#define CONFIG_MMC 1
-+#define CFG_MMC_BASE 0xff000000
-+
-+/* EXT2 driver */
-+#define CONFIG_EXT2 1
-+
-+#if 0
-+/* FAT driver in u-boot is broken currently */
-+#define CONFIG_FAT 1
-+#define CONFIG_SUPPORT_VFAT 1
-+#endif
-+
-+/* JFFS2 driver */
-+#define CONFIG_JFFS2_CMDLINE 1
-+#define CONFIG_JFFS2_NAND 1
-+#define CONFIG_JFFS2_NAND_DEV 0
-+#define CONFIG_JFFS2_NAND_OFF 0x634000
-+#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
-+
-+/* ATAG configuration */
-+#define CONFIG_INITRD_TAG 1
-+#define CONFIG_SETUP_MEMORY_TAGS 1
-+#define CONFIG_CMDLINE_TAG 1
-+#define CONFIG_REVISION_TAG 1
-+#if 0
-+#define CONFIG_SERIAL_TAG 1
-+#endif
-+
-+#define CONFIG_DRIVER_S3C24X0_I2C 1
-+#define CONFIG_HARD_I2C 1
-+#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50606 data sheet */
-+#define CFG_I2C_SLAVE 0x7f
-+
-+/* we have a board_late_init() function */
-+#define BOARD_LATE_INIT 1
-+
-+#if 0
-+#define CONFIG_VIDEO
-+#define CONFIG_VIDEO_S3C2410
-+#define CONFIG_CFB_CONSOLE
-+#define CONFIG_VIDEO_LOGO
-+#define CONFIG_VGA_AS_SINGLE_DEVICE
-+
-+#define VIDEO_KBD_INIT_FCT 0
-+#define VIDEO_TSTC_FCT serial_tstc
-+#define VIDEO_GETC_FCT serial_getc
-+
-+#define LCD_VIDEO_ADDR 0x33d00000
-+#endif
-+
-+#endif /* __CONFIG_H */
-Index: git/include/configs/qt2410.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/configs/qt2410.h 2007-01-04 12:21:18.000000000 +0100
-@@ -0,0 +1,245 @@
-+/*
-+ * (C) Copyright 2002
-+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
-+ * Marius Groeger <mgroeger@sysgo.de>
-+ * Gary Jennejohn <gj@denx.de>
-+ * David Mueller <d.mueller@elsoft.ch>
-+ *
-+ * Configuation settings for the SAMSUNG SMDK2410 board.
-+ *
-+ * See file CREDITS for list of people who contributed to this
-+ * project.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of
-+ * the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ */
-+
-+#ifndef __CONFIG_H
-+#define __CONFIG_H
-+
-+#if 1
-+/* If we want to start u-boot from usb bootloader in NOR flash */
-+#define CONFIG_SKIP_RELOCATE_UBOOT 1
-+#define CONFIG_SKIP_LOWLEVEL_INIT 1
-+#else
-+/* If we want to start u-boot directly from within NAND flash */
-+#define CONFIG_S3C2410_NAND_BOOT 1
-+#endif
-+
-+/*
-+ * High Level Configuration Options
-+ * (easy to change)
-+ */
-+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
-+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
-+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
-+
-+/* input clock of PLL */
-+#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
-+
-+
-+#define USE_920T_MMU 1
-+#define CONFIG_USE_IRQ 1
-+//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-+
-+/*
-+ * Size of malloc() pool
-+ */
-+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
-+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
-+
-+/*
-+ * Hardware drivers
-+ */
-+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
-+#define CS8900_BASE 0x19000300
-+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
-+
-+/*
-+ * select serial console configuration
-+ */
-+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
-+#define CONFIG_HWFLOW 1
-+
-+/************************************************************
-+ * RTC
-+ ************************************************************/
-+#define CONFIG_RTC_S3C24X0 1
-+
-+/* allow to overwrite serial and ethaddr */
-+#define CONFIG_ENV_OVERWRITE
-+
-+#define CONFIG_BAUDRATE 115200
-+
-+/***********************************************************
-+ * Command definition
-+ ***********************************************************/
-+#define CONFIG_COMMANDS \
-+ (CONFIG_CMD_DFL | \
-+ CFG_CMD_BSP | \
-+ CFG_CMD_CACHE | \
-+ CFG_CMD_DATE | \
-+ CFG_CMD_DHCP | \
-+ CFG_CMD_DIAG | \
-+ CFG_CMD_ELF | \
-+ CFG_CMD_EXT2 | \
-+ CFG_CMD_FAT | \
-+ CFG_CMD_HWFLOW | \
-+ /* CFG_CMD_IDE | */ \
-+ /* CFG_CMD_IRQ | */ \
-+ CFG_CMD_JFFS2 | \
-+ CFG_CMD_MMC | \
-+ CFG_CMD_NAND | \
-+ CFG_CMD_PING | \
-+ CFG_CMD_PORTIO | \
-+ CFG_CMD_REGINFO | \
-+ CFG_CMD_SAVES | \
-+ CFG_CMD_USB)
-+
-+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-+#include <cmd_confdefs.h>
-+
-+#define CONFIG_BOOTDELAY 3
-+#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
-+#define CONFIG_ETHADDR 01:ab:cd:ef:fe:dc
-+#define CONFIG_NETMASK 255.255.255.0
-+#define CONFIG_IPADDR 10.0.0.110
-+#define CONFIG_SERVERIP 10.0.0.1
-+/*#define CONFIG_BOOTFILE "elinos-lart" */
-+#define CONFIG_BOOTCOMMAND "nand load 0x32000000 0x34000 0x200000; bootm 0x32000000"
-+
-+#define CONFIG_DOS_PARTITION 1
-+
-+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
-+/* what's this ? it's not used anywhere */
-+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
-+#endif
-+
-+/*
-+ * Miscellaneous configurable options
-+ */
-+#define CFG_LONGHELP /* undef to save memory */
-+#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
-+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
-+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-+#define CFG_MAXARGS 16 /* max number of command args */
-+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
-+
-+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
-+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
-+
-+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
-+
-+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
-+
-+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
-+/* it to wrap 100 times (total 1562500) to get 1 sec. */
-+#define CFG_HZ 1562500
-+
-+/* valid baudrates */
-+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
-+
-+/*-----------------------------------------------------------------------
-+ * Stack sizes
-+ *
-+ * The stack sizes are set up in start.S using the settings below
-+ */
-+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
-+#ifdef CONFIG_USE_IRQ
-+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
-+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
-+#endif
-+
-+/* IDE/ATA config */
-+
-+#if 0
-+#define CFG_IDE_MAXBUS 1
-+#define CFG_IDE_MAXDEVICE 2
-+#define CFG_IDE_PREINIT 0
-+
-+#define CFG_ATA_BASE_ADDR
-+#endif
-+
-+#define CONFIG_USB_OHCI 1
-+
-+/*-----------------------------------------------------------------------
-+ * Physical Memory Map
-+ */
-+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
-+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
-+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
-+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
-+
-+#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
-+
-+#define CFG_FLASH_BASE PHYS_FLASH_1
-+
-+/*-----------------------------------------------------------------------
-+ * FLASH and environment organization
-+ */
-+
-+#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
-+
-+#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
-+#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
-+#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
-+
-+/* timeout values are in ticks */
-+#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
-+#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
-+
-+#define CFG_ENV_IS_IN_NAND 1
-+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
-+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
-+
-+#define NAND_MAX_CHIPS 1
-+#define CFG_NAND_BASE 0x4e000000
-+#define CFG_MAX_NAND_DEVICE 1
-+
-+#define CONFIG_MMC 1
-+#define CFG_MMC_BASE 0xff000000
-+
-+#define CONFIG_EXT2 1
-+
-+/* FAT driver in u-boot is broken currently */
-+#define CONFIG_FAT 1
-+#define CONFIG_SUPPORT_VFAT 1
-+
-+/* ATAG configuration */
-+#define CONFIG_INITRD_TAG 1
-+#define CONFIG_SETUP_MEMORY_TAGS 1
-+#define CONFIG_CMDLINE_TAG 1
-+#if 0
-+#define CONFIG_SERIAL_TAG 1
-+#define CONFIG_REVISION_TAG 1
-+#endif
-+
-+
-+#if 0
-+#define CONFIG_VIDEO
-+#define CONFIG_VIDEO_S3C2410
-+#define CONFIG_CFB_CONSOLE
-+#define CONFIG_VIDEO_LOGO
-+#define CONFIG_VGA_AS_SINGLE_DEVICE
-+
-+#define VIDEO_KBD_INIT_FCT 0
-+#define VIDEO_TSTC_FCT serial_tstc
-+#define VIDEO_GETC_FCT serial_getc
-+
-+#define LCD_VIDEO_ADDR 0x33d00000
-+#endif
-+
-+#endif /* __CONFIG_H */
-Index: git/include/s3c2410.h
-===================================================================
---- git.orig/include/s3c2410.h 2007-01-04 12:21:15.000000000 +0100
-+++ git/include/s3c2410.h 2007-01-04 12:21:18.000000000 +0100
-@@ -38,12 +38,6 @@
- #define S3C2410_ECCSIZE 512
- #define S3C2410_ECCBYTES 3
-
--typedef enum {
-- S3C24X0_UART0,
-- S3C24X0_UART1,
-- S3C24X0_UART2
--} S3C24X0_UARTS_NR;
--
- /* S3C2410 device base addresses */
- #define S3C24X0_MEMCTL_BASE 0x48000000
- #define S3C24X0_USB_HOST_BASE 0x49000000
-@@ -65,9 +59,23 @@
- #define S3C2410_SDI_BASE 0x5A000000
-
-
-+#define oNFCONF 0x00
-+#define oNFCMD 0x04
-+#define oNFADDR 0x08
-+#define oNFDATA 0x0C
-+#define oNFSTAT 0x10
-+#define oNFECC 0x14
-+
-+#ifndef __ASSEMBLER__
-+
- /* include common stuff */
- #include <s3c24x0.h>
-
-+typedef enum {
-+ S3C24X0_UART0,
-+ S3C24X0_UART1,
-+ S3C24X0_UART2
-+} S3C24X0_UARTS_NR;
-
- static inline S3C24X0_MEMCTL * const S3C24X0_GetBase_MEMCTL(void)
- {
-@@ -142,6 +150,7 @@
- return (S3C2410_SDI * const)S3C2410_SDI_BASE;
- }
-
-+#endif
-
- /* ISR */
- #define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
-Index: git/include/s3c24x0.h
-===================================================================
---- git.orig/include/s3c24x0.h 2007-01-04 12:21:15.000000000 +0100
-+++ git/include/s3c24x0.h 2007-01-04 12:21:18.000000000 +0100
-@@ -637,13 +637,7 @@
- S3C24X0_REG32 SDIDCNT;
- S3C24X0_REG32 SDIDSTA;
- S3C24X0_REG32 SDIFSTA;
--#ifdef __BIG_ENDIAN
-- S3C24X0_REG8 res[3];
-- S3C24X0_REG8 SDIDAT;
--#else
-- S3C24X0_REG8 SDIDAT;
-- S3C24X0_REG8 res[3];
--#endif
-+ S3C24X0_REG32 SDIDAT;
- S3C24X0_REG32 SDIIMSK;
- } /*__attribute__((__packed__))*/ S3C2410_SDI;
-
-@@ -1123,11 +1117,7 @@
- #define rSDIDatCnt (*(volatile unsigned *)0x5A000030)
- #define rSDIDatSta (*(volatile unsigned *)0x5A000034)
- #define rSDIFSTA (*(volatile unsigned *)0x5A000038)
--#ifdef __BIG_ENDIAN
--#define rSDIDAT (*(volatile unsigned char *)0x5A00003F)
--#else
--#define rSDIDAT (*(volatile unsigned char *)0x5A00003C)
--#endif
-+#define rSDIDAT (*(volatile unsigned *)0x5A00003C)
- #define rSDIIntMsk (*(volatile unsigned *)0x5A000040)
-
- #endif
diff --git a/packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch b/packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch
new file mode 100644
index 0000000000..e90cc0de71
--- /dev/null
+++ b/packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch
@@ -0,0 +1,19 @@
+--- a/tools/Makefile 2007-03-11 00:55:44.000000000 +0000
++++ b/tools/Makefile 2007-03-11 00:55:52.000000000 +0000
+@@ -194,14 +194,14 @@
+
+ $(obj)environment.c:
+ @rm -f $(obj)environment.c
+- ln -s $(src)../common/environment.c $(obj)environment.c
++ ln -sf $(src)../common/environment.c $(obj)environment.c
+
+ $(obj)environment.o: $(obj)environment.c
+ $(CC) -g $(HOST_ENVIRO_CFLAGS) $(CPPFLAGS) -c -o $@ $<
+
+ $(obj)crc32.c:
+ @rm -f $(obj)crc32.c
+- ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c
++ ln -sf $(src)../lib_generic/crc32.c $(obj)crc32.c
+
+ $(LOGO_H): $(obj)bmp_logo $(LOGO_BMP)
+ $(obj)./bmp_logo $(LOGO_BMP) >$@
diff --git a/packages/uboot/files/uboot-eabi-fix-HACK.patch b/packages/uboot/files/uboot-eabi-fix-HACK.patch
new file mode 100644
index 0000000000..65b212917d
--- /dev/null
+++ b/packages/uboot/files/uboot-eabi-fix-HACK.patch
@@ -0,0 +1,197 @@
+Index: git/lib_arm/div0.c
+===================================================================
+--- git.orig/lib_arm/div0.c
++++ git/lib_arm/div0.c
+@@ -22,9 +22,3 @@
+ */
+
+ /* Replacement (=dummy) for GNU/Linux division-by zero handler */
+-void __div0 (void)
+-{
+- extern void hang (void);
+-
+- hang();
+-}
+Index: git/board/neo1973/common/bootmenu.c
+===================================================================
+--- git.orig/board/neo1973/common/bootmenu.c
++++ git/board/neo1973/common/bootmenu.c
+@@ -118,3 +118,14 @@ void neo1973_bootmenu(void)
+ bootmenu_add("Factory reset", factory_reset, NULL);
+ bootmenu();
+ }
++
++void raise()
++{
++ serial_printf( "*** something's wrong... please reset ***\n" );
++}
++
++void abort()
++{
++ serial_printf( "*** something's wrong... please reset ***\n" );
++}
++
+Index: git/board/neo1973/gta01/u-boot.lds
+===================================================================
+--- git.orig/board/neo1973/gta01/u-boot.lds
++++ git/board/neo1973/gta01/u-boot.lds
+@@ -39,6 +39,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/neo1973/gta02/u-boot.lds
+===================================================================
+--- git.orig/board/neo1973/gta02/u-boot.lds
++++ git/board/neo1973/gta02/u-boot.lds
+@@ -39,6 +39,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/neo1973/common/lowlevel_foo.lds
+===================================================================
+--- git.orig/board/neo1973/common/lowlevel_foo.lds
++++ git/board/neo1973/common/lowlevel_foo.lds
+@@ -37,6 +37,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/hxd8/hxd8.c
+===================================================================
+--- git.orig/board/hxd8/hxd8.c
++++ git/board/hxd8/hxd8.c
+@@ -187,3 +187,6 @@ unsigned int dynpart_size[] = {
+ char *dynpart_names[] = {
+ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
+
++void raise() {}
++
++void abort() {}
+Index: git/board/hxd8/u-boot.lds
+===================================================================
+--- git.orig/board/hxd8/u-boot.lds
++++ git/board/hxd8/u-boot.lds
+@@ -39,6 +39,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/hxd8/lowlevel_foo.lds
+===================================================================
+--- git.orig/board/hxd8/lowlevel_foo.lds
++++ git/board/hxd8/lowlevel_foo.lds
+@@ -37,6 +37,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/qt2410/qt2410.c
+===================================================================
+--- git.orig/board/qt2410/qt2410.c
++++ git/board/qt2410/qt2410.c
+@@ -156,3 +156,7 @@ unsigned int dynpart_size[] = {
+ char *dynpart_names[] = {
+ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
+
++void raise() {}
++
++void abort() {}
++
+Index: git/board/qt2410/u-boot.lds
+===================================================================
+--- git.orig/board/qt2410/u-boot.lds
++++ git/board/qt2410/u-boot.lds
+@@ -39,6 +39,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/Makefile
+===================================================================
+--- git.orig/Makefile
++++ git/Makefile
+@@ -225,7 +225,7 @@ LIBS := $(addprefix $(obj),$(LIBS))
+ .PHONY : $(LIBS)
+
+ # Add GCC lib
+-PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
++PLATFORM_LIBS += -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc -lgcc_eh
+
+ # The "tools" are needed early, so put this first
+ # Don't include stuff already done in $(LIBS)
+Index: git/board/smdk2440/smdk2440.c
+===================================================================
+--- git.orig/board/smdk2440/smdk2440.c
++++ git/board/smdk2440/smdk2440.c
+@@ -150,3 +150,6 @@ char *dynpart_names[] = {
+ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
+
+
++void raise() {}
++void abort() {}
++
+Index: git/board/smdk2440/u-boot.lds
+===================================================================
+--- git.orig/board/smdk2440/u-boot.lds
++++ git/board/smdk2440/u-boot.lds
+@@ -39,6 +39,10 @@ SECTIONS
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
++ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
++ __exidx_start = .;
++ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
++ __exidx_end = .;
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+Index: git/board/neo1973/gta02/gta02.c
+===================================================================
+--- git.orig/board/neo1973/gta02/gta02.c
++++ git/board/neo1973/gta02/gta02.c
+@@ -321,3 +321,7 @@ int neo1973_set_charge_mode(enum neo1973
+ /* FIXME */
+ return 0;
+ }
++
++void raise() {}
++void abort() {}
++
diff --git a/packages/uboot/u-boot-1.1.2/u-boot-emetec.patch b/packages/uboot/u-boot-1.1.2/u-boot-emetec.patch
new file mode 100644
index 0000000000..ab3f106e71
--- /dev/null
+++ b/packages/uboot/u-boot-1.1.2/u-boot-emetec.patch
@@ -0,0 +1,2170 @@
+diff -uNr u-boot-1.1.2/.pc/.version u-boot-emetec-1.1.2/.pc/.version
+--- u-boot-1.1.2/.pc/.version 2007-04-20 00:01:06.000000000 +0300
++++ u-boot-emetec-1.1.2/.pc/.version 1970-01-01 02:00:00.000000000 +0200
+@@ -1 +0,0 @@
+-2
+diff -uNr u-boot-1.1.2/.pc/applied-patches u-boot-emetec-1.1.2/.pc/applied-patches
+--- u-boot-1.1.2/.pc/applied-patches 2007-04-20 00:01:06.000000000 +0300
++++ u-boot-emetec-1.1.2/.pc/applied-patches 1970-01-01 02:00:00.000000000 +0200
+@@ -1 +0,0 @@
+-arm_flags.patch
+diff -uNr u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk u-boot-emetec-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk
+--- u-boot-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk 2003-05-23 15:36:21.000000000 +0300
++++ u-boot-emetec-1.1.2/.pc/arm_flags.patch/cpu/pxa/config.mk 1970-01-01 02:00:00.000000000 +0200
+@@ -1,28 +0,0 @@
+-#
+-# (C) Copyright 2002
+-# Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+-# Marius Groeger <mgroeger@sysgo.de>
+-#
+-# See file CREDITS for list of people who contributed to this
+-# project.
+-#
+-# This program is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License as
+-# published by the Free Software Foundation; either version 2 of
+-# the License, or (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+-# MA 02111-1307 USA
+-#
+-
+-PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \
+- -mshort-load-bytes -msoft-float
+-
+-PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
+diff -uNr u-boot-1.1.2/MAKEALL u-boot-emetec-1.1.2/MAKEALL
+--- u-boot-1.1.2/MAKEALL 2004-12-31 11:32:48.000000000 +0200
++++ u-boot-emetec-1.1.2/MAKEALL 2005-03-11 22:23:47.000000000 +0200
+@@ -69,7 +69,7 @@
+ ml300 OCOTEA OCRTC ORSG \
+ PCI405 PIP405 PLU405 PMC405 \
+ PPChameleonEVB VOH405 W7OLMC W7OLMG \
+- WALNUT405 WUH405 XPEDITE1K \
++ WALNUT405 WUH405 XPEDITE1K EMETEC405 \
+ "
+
+ #########################################################################
+diff -uNr u-boot-1.1.2/Makefile u-boot-emetec-1.1.2/Makefile
+--- u-boot-1.1.2/Makefile 2004-12-19 11:58:11.000000000 +0200
++++ u-boot-emetec-1.1.2/Makefile 2005-03-14 22:43:56.000000000 +0200
+@@ -54,7 +54,7 @@
+ CROSS_COMPILE =
+ else
+ ifeq ($(ARCH),ppc)
+-CROSS_COMPILE = ppc_8xx-
++CROSS_COMPILE = ppc_4xx-
+ endif
+ ifeq ($(ARCH),arm)
+ CROSS_COMPILE = arm-linux-
+@@ -127,7 +127,6 @@
+ # The "tools" are needed early, so put this first
+ # Don't include stuff already done in $(LIBS)
+ SUBDIRS = tools \
+- examples \
+ post \
+ post/cpu
+ .PHONY : $(SUBDIRS)
+@@ -838,6 +837,9 @@
+
+ VOM405_config: unconfig
+ @./mkconfig $(@:_config=) ppc ppc4xx vom405 esd
++
++EMETEC405_config: unconfig
++ @./mkconfig $(@:_config=) ppc ppc4xx emetec405
+
+ W7OLMC_config \
+ W7OLMG_config: unconfig
+diff -uNr u-boot-1.1.2/board/emetec405/Makefile u-boot-emetec-1.1.2/board/emetec405/Makefile
+--- u-boot-1.1.2/board/emetec405/Makefile 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/Makefile 2005-04-26 22:34:53.000000000 +0300
+@@ -0,0 +1,46 @@
++#
++# (C) Copyright 2000
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS = $(BOARD).o flash.o
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++sinclude .depend
++
++#########################################################################
+diff -uNr u-boot-1.1.2/board/emetec405/config.mk u-boot-emetec-1.1.2/board/emetec405/config.mk
+--- u-boot-1.1.2/board/emetec405/config.mk 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/config.mk 2005-03-11 22:26:43.000000000 +0200
+@@ -0,0 +1,28 @@
++#
++# (C) Copyright 2000
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++#
++# emetec EMETEC405 boards
++#
++
++TEXT_BASE = 0xFFFC0000
+diff -uNr u-boot-1.1.2/board/emetec405/emetec405.c u-boot-emetec-1.1.2/board/emetec405/emetec405.c
+--- u-boot-1.1.2/board/emetec405/emetec405.c 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/emetec405.c 2005-04-26 23:02:01.000000000 +0300
+@@ -0,0 +1,106 @@
++/*
++ * (C) Copyright 2001-2003
++ * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/processor.h>
++#include <command.h>
++#include <malloc.h>
++
++
++int board_early_init_f (void)
++{
++ /*-------------------------------------------------------------------------+
++ | Interrupt controller setup for the Walnut board.
++ | Note: IRQ 0-15 405GP internally generated; active high; level sensitive
++ | IRQ 16 405GP internally generated; active low; level sensitive
++ | IRQ 17-24 RESERVED
++ | IRQ 25 (EXT IRQ 0) FPGA; active high; level sensitive
++ | IRQ 26 (EXT IRQ 1) SMI; active high; level sensitive
++ | IRQ 27 (EXT IRQ 2) Not Used
++ | IRQ 28 (EXT IRQ 3) PCI SLOT 3; active low; level sensitive
++ | IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive
++ | IRQ 30 (EXT IRQ 5) PCI SLOT 1; active low; level sensitive
++ | IRQ 31 (EXT IRQ 6) PCI SLOT 0; active low; level sensitive
++ | Note for Walnut board:
++ | An interrupt taken for the FPGA (IRQ 25) indicates that either
++ | the Mouse, Keyboard, IRDA, or External Expansion caused the
++ | interrupt. The FPGA must be read to determine which device
++ | caused the interrupt. The default setting of the FPGA clears
++ |
++ +-------------------------------------------------------------------------*/
++
++ mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
++ mtdcr (uicer, 0x00000000); /* disable all ints */
++ mtdcr (uiccr, 0x00000000); /* set all to be non-critical */
++ mtdcr (uicpr, 0xFFFFFFE0); /* set int polarities */
++ mtdcr (uictr, 0x10000000); /* set int trigger levels */
++ mtdcr (uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority */
++ mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
++
++ return 0;
++}
++
++
++int misc_init_f (void)
++{
++ return 0; /* dummy implementation */
++}
++
++
++int misc_init_r (void)
++{
++ return 0; /* dummy implementation */
++}
++
++
++/*
++ * Check Board Identity:
++ */
++int checkboard (void)
++{
++ unsigned char str[64];
++
++ puts ("Board: MAGICBOX\n");
++
++ return 0;
++}
++
++
++long int initdram (int board_type)
++{
++ unsigned long val;
++
++ mtdcr(memcfga, mem_mb0cf);
++ val = mfdcr(memcfgd);
++
++ return (4*1024*1024 << ((val & 0x000e0000) >> 17));
++}
++
++
++int testdram (void)
++{
++ printf ("test: 32 MB - ok\n");
++
++ return (0);
++}
++
+diff -uNr u-boot-1.1.2/board/emetec405/flash.c u-boot-emetec-1.1.2/board/emetec405/flash.c
+--- u-boot-1.1.2/board/emetec405/flash.c 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/flash.c 2005-05-25 10:14:13.000000000 +0300
+@@ -0,0 +1,544 @@
++/*
++ * (C) Copyright 2000
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#include <common.h>
++#include <ppc4xx.h>
++#include <asm/processor.h>
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
++
++/*-----------------------------------------------------------------------
++ * Functions
++ */
++static ulong flash_get_size (vu_long * addr, flash_info_t * info);
++static void flash_get_offsets (ulong base, flash_info_t * info);
++
++/*-----------------------------------------------------------------------
++ */
++unsigned long flash_init (void)
++{
++ unsigned long size_b0;
++ int i;
++ uint pbcr;
++ unsigned long base_b0;
++ int size_val = 0;
++
++ /* Init: no FLASHes known */
++ for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
++ flash_info[i].flash_id = FLASH_UNKNOWN;
++ }
++
++ /* Static FLASH Bank configuration here - FIXME XXX */
++
++ size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
++
++ if (flash_info[0].flash_id == FLASH_UNKNOWN) {
++ printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",
++ size_b0, size_b0<<20);
++ }
++
++ /* Setup offsets */
++ flash_get_offsets (-size_b0, &flash_info[0]);
++
++ /* Re-do sizing to get full correct info */
++ mtdcr(ebccfga, pb0cr);
++ pbcr = mfdcr(ebccfgd);
++ mtdcr(ebccfga, pb0cr);
++ base_b0 = -size_b0;
++ switch (size_b0) {
++ case 1 << 20:
++ size_val = 0;
++ break;
++ case 2 << 20:
++ size_val = 1;
++ break;
++ case 4 << 20:
++ size_val = 2;
++ break;
++ case 8 << 20:
++ size_val = 3;
++ break;
++ case 16 << 20:
++ size_val = 4;
++ break;
++ }
++ pbcr = (pbcr & 0x0001ffff) | base_b0 | (size_val << 17);
++ mtdcr(ebccfgd, pbcr);
++
++ /* Monitor protection ON by default */
++ (void)flash_protect(FLAG_PROTECT_SET,
++ -CFG_MONITOR_LEN,
++ 0xffffffff,
++ &flash_info[0]);
++
++ flash_info[0].size = size_b0;
++
++ return (size_b0);
++}
++
++/*-----------------------------------------------------------------------
++ */
++static void flash_get_offsets (ulong base, flash_info_t *info)
++{
++ int i;
++ short n;
++
++ base += info->size;
++ i = info->sector_count;
++
++ switch (info->flash_id & FLASH_TYPEMASK)
++ {
++ case FLASH_STMW320DT :
++ /* 1 x 16k boot sector */
++ base -= 16 << 10;
++ --i;
++ info->start[i] = base;
++ /* 2 x 8k boot sectors */
++ for (n=0; n<2; ++n) {
++ base -= 8 << 10;
++ --i;
++ info->start[i] = base;
++ }
++ /* 1 x 32k boot sector */
++ base -= 32 << 10;
++ --i;
++ info->start[i] = base;
++ break;
++
++ case FLASH_STMW640DT :
++ /* 8 x 8k boot sectors */
++ for (n=0; n<8; ++n) {
++ base -= 8 << 10;
++ --i;
++ info->start[i] = base;
++ }
++ break;
++ };
++ /* 64k regular sectors */
++ while (i > 0) {
++ base -= 64 << 10;
++ --i;
++ info->start[i] = base;
++ }
++}
++
++/*-----------------------------------------------------------------------
++ */
++static ulong flash_get_size (vu_long *addr, flash_info_t *info)
++{
++ short i;
++ short n;
++ CFG_FLASH_WORD_SIZE value;
++ ulong base = (ulong)addr;
++ volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *)addr;
++
++ /* Write auto select command: read Manufacturer ID */
++ addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00900090;
++
++ value = addr2[CFG_FLASH_READ0];
++
++ switch (value) {
++ case (CFG_FLASH_WORD_SIZE)SST_MANUFACT:
++ info->flash_id = FLASH_MAN_SST;
++ break;
++ case (CFG_FLASH_WORD_SIZE)STM_MANUFACT:
++ info->flash_id = FLASH_MAN_STM;
++ break;
++ default:
++ info->flash_id = FLASH_UNKNOWN;
++ info->sector_count = 0;
++ info->size = 0;
++ return (0);
++ }
++
++ value = addr2[CFG_FLASH_READ1]; /* device ID */
++
++ switch (value) {
++ case (CFG_FLASH_WORD_SIZE)STM_ID_29W320DT:
++ info->flash_id += FLASH_STMW320DT;
++ info->sector_count = 67;
++ info->size = 0x00400000;
++
++ /* set up sector start address table for FLASH_STMW320DT */
++ /* set sector offsets for top boot block type */
++ base += info->size;
++ i = info->sector_count;
++ /* 1 x 16k boot sector */
++ base -= 16 << 10;
++ --i;
++ info->start[i] = base;
++ /* 2 x 8k boot sectors */
++ for (n=0; n<2; ++n) {
++ base -= 8 << 10;
++ --i;
++ info->start[i] = base;
++ };
++ /* 1 x 32k boot sector */
++ base -= 32 << 10;
++ --i;
++ info->start[i] = base;
++
++ /* 64k regular sectors */
++ while (i > 0)
++ {
++ base -= 64 << 10;
++ --i;
++ info->start[i] = base;
++ };
++ break; /* => 4 MB */
++
++ case (CFG_FLASH_WORD_SIZE)STM_ID_29W640DT:
++ info->flash_id += FLASH_STMW640DT;
++ info->sector_count = 135;
++ info->size = 0x00800000;
++
++ /* set up sector start address table for FLASH_STMW640DT */
++ /* set sector offsets for top boot block type */
++ base += info->size;
++ i = info->sector_count;
++ /* 8 x 8k boot sectors */
++ for (n=0; n<8; ++n) {
++ base -= 8 << 10;
++ --i;
++ info->start[i] = base;
++ };
++
++ /* 64k regular sectors */
++ while (i > 0)
++ {
++ base -= 64 << 10;
++ --i;
++ info->start[i] = base;
++ };
++
++ break; /* => 8 MB */
++ default:
++ info->flash_id = FLASH_UNKNOWN;
++ return (0); /* => no or unknown flash */
++ }
++
++ /* check for protected sectors */
++ for (i = 0; i < info->sector_count; i++) {
++ /* read sector protection at sector address, (A7 .. A0) = 0x02 */
++ /* D0 = 1 if protected */
++ addr2 = (volatile CFG_FLASH_WORD_SIZE *)(info->start[i]);
++ if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST)
++ info->protect[i] = 0;
++ else
++ info->protect[i] = addr2[CFG_FLASH_READ2] & 1;
++ }
++
++ /*
++ * Prevent writes to uninitialized FLASH.
++ */
++ if (info->flash_id != FLASH_UNKNOWN) {
++ addr2 = (CFG_FLASH_WORD_SIZE *)info->start[0];
++ *addr2 = (CFG_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */
++ }
++
++ return (info->size);
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t *info)
++{
++ int i;
++ int k;
++ int size;
++ int erased;
++ volatile unsigned long *flash;
++
++ switch (info->flash_id & FLASH_TYPEMASK)
++ {
++ case FLASH_STMW320DT :
++ printf ("ST M29W320DT (32 M, top sector)\n");
++ break;
++ case FLASH_STMW640DT :
++ printf ("ST M29W640DT (64 M, top sector)\n");
++ break;
++ default :
++ printf ("Missing or unknown FLASH type\n");
++ return;
++ };
++ printf (" Size: %ld MB in %d Sectors\n", info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i=0; i<info->sector_count; ++i) {
++ /*
++ * Check if whole sector is erased
++ */
++ if (i != (info->sector_count-1))
++ size = info->start[i+1] - info->start[i];
++ else
++ size = info->start[0] + info->size - info->start[i];
++ erased = 1;
++ flash = (volatile unsigned long *)info->start[i];
++ size = size >> 2; /* divide by 4 for longword access */
++ for (k=0; k<size; k++)
++ {
++ if (*flash++ != 0xffffffff)
++ {
++ erased = 0;
++ break;
++ }
++ }
++
++ if ((i % 5) == 0)
++ printf ("\n ");
++ printf (" %08lX%s%s",
++ info->start[i],
++ erased ? " E" : " ",
++ info->protect[i] ? "RO " : " "
++ );
++ }
++ printf ("\n");
++ return;
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t *info, int s_first, int s_last)
++{
++ volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *)(info->start[0]);
++ volatile CFG_FLASH_WORD_SIZE *addr2;
++ int flag, prot, sect, l_sect;
++ ulong start, now, last;
++ int i;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ if (info->flash_id == FLASH_UNKNOWN) {
++ printf ("- missing\n");
++ } else {
++ printf ("- no sectors to erase\n");
++ }
++ return 1;
++ }
++
++ if (info->flash_id == FLASH_UNKNOWN) {
++ printf ("Can't erase unknown flash type - aborted\n");
++ return 1;
++ }
++
++ prot = 0;
++ for (sect=s_first; sect<=s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++
++ if (prot) {
++ printf ("- Warning: %d protected sectors will not be erased!\n",
++ prot);
++ } else {
++ printf ("\n");
++ }
++
++ l_sect = -1;
++
++ /* Disable interrupts which might cause a timeout here */
++ flag = disable_interrupts();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect<=s_last; sect++) {
++ if (info->protect[sect] == 0) { /* not protected */
++ addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[sect]);
++ if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) {
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00800080;
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ addr2[0] = (CFG_FLASH_WORD_SIZE)0x00500050; /* block erase */
++ for (i=0; i<50; i++)
++ udelay(1000); /* wait 1 ms */
++ } else {
++ if (sect == s_first) {
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00800080;
++ addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ }
++ addr2[0] = (CFG_FLASH_WORD_SIZE)0x00300030; /* sector erase */
++ }
++ l_sect = sect;
++ }
++ }
++
++ /* re-enable interrupts if necessary */
++ if (flag)
++ enable_interrupts();
++
++ /* wait at least 80us - let's wait 1 ms */
++ udelay (1000);
++
++ /*
++ * We wait for the last triggered sector
++ */
++ if (l_sect < 0)
++ goto DONE;
++
++ start = get_timer (0);
++ last = start;
++ addr = (CFG_FLASH_WORD_SIZE *)(info->start[l_sect]);
++ while ((addr[0] & (CFG_FLASH_WORD_SIZE)0x00800080) != (CFG_FLASH_WORD_SIZE)0x00800080) {
++ if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
++ printf ("Timeout\n");
++ return 1;
++ }
++ /* show that we're waiting */
++ if ((now - last) > 1000) { /* every second */
++ putc ('.');
++ last = now;
++ }
++ }
++
++DONE:
++ /* reset to read mode */
++ addr = (CFG_FLASH_WORD_SIZE *)info->start[0];
++ addr[0] = (CFG_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */
++
++ printf (" done\n");
++ return 0;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash, returns:
++ * 0 - OK
++ * 1 - write timeout
++ * 2 - Flash not erased
++ */
++
++int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
++{
++ ulong cp, wp, data;
++ int i, l, rc;
++
++ wp = (addr & ~3); /* get lower word aligned address */
++
++ /*
++ * handle unaligned start bytes
++ */
++ if ((l = addr - wp) != 0) {
++ data = 0;
++ for (i=0, cp=wp; i<l; ++i, ++cp) {
++ data = (data << 8) | (*(uchar *)cp);
++ }
++ for (; i<4 && cnt>0; ++i) {
++ data = (data << 8) | *src++;
++ --cnt;
++ ++cp;
++ }
++ for (; cnt==0 && i<4; ++i, ++cp) {
++ data = (data << 8) | (*(uchar *)cp);
++ }
++
++ if ((rc = write_word(info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 4;
++ }
++
++ /*
++ * handle word aligned part
++ */
++ while (cnt >= 4) {
++ data = 0;
++ for (i=0; i<4; ++i) {
++ data = (data << 8) | *src++;
++ }
++ if ((rc = write_word(info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 4;
++ cnt -= 4;
++ }
++
++ if (cnt == 0) {
++ return (0);
++ }
++
++ /*
++ * handle unaligned tail bytes
++ */
++ data = 0;
++ for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
++ data = (data << 8) | *src++;
++ --cnt;
++ }
++ for (; i<4; ++i, ++cp) {
++ data = (data << 8) | (*(uchar *)cp);
++ }
++
++ return (write_word(info, wp, data));
++}
++
++/*-----------------------------------------------------------------------
++ * Write a word to Flash, returns:
++ * 0 - OK
++ * 1 - write timeout
++ * 2 - Flash not erased
++ */
++static int write_word (flash_info_t *info, ulong dest, ulong data)
++{
++ volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[0]);
++ volatile CFG_FLASH_WORD_SIZE *dest2 = (CFG_FLASH_WORD_SIZE *)dest;
++ volatile CFG_FLASH_WORD_SIZE *data2 = (CFG_FLASH_WORD_SIZE *)&data;
++ ulong start;
++ int flag;
++ int i;
++
++ /* Check if Flash is (sufficiently) erased */
++ if ((*((volatile ulong *)dest) & data) != data) {
++ return (2);
++ }
++ /* Disable interrupts which might cause a timeout here */
++ flag = disable_interrupts();
++
++ for (i=0; i<4/sizeof(CFG_FLASH_WORD_SIZE); i++)
++ {
++ addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA;
++ addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055;
++ addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00A000A0;
++
++ dest2[i] = data2[i];
++
++ /* re-enable interrupts if necessary */
++ if (flag)
++ enable_interrupts();
++
++ /* data polling for D7 */
++ start = get_timer (0);
++ while ((dest2[i] & (CFG_FLASH_WORD_SIZE)0x00800080) !=
++ (data2[i] & (CFG_FLASH_WORD_SIZE)0x00800080)) {
++ if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
++ return (1);
++ }
++ }
++ }
++
++ return (0);
++}
+diff -uNr u-boot-1.1.2/board/emetec405/pllmr.c u-boot-emetec-1.1.2/board/emetec405/pllmr.c
+--- u-boot-1.1.2/board/emetec405/pllmr.c 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/pllmr.c 2005-03-14 22:32:04.000000000 +0200
+@@ -0,0 +1,19 @@
++#define PLL_CPUDIV_1 0x00000000
++#define PLL_PLBDIV_2 0x00010000
++#define PLL_OPBDIV_2 0x00001000
++#define PLL_EXTBUSDIV_3 0x00000100
++#define PLL_MALDIV_1 0x00000000
++#define PLL_PCIDIV_4 0x00000003
++
++#define PLL_FBKDIV_8 0x00800000
++#define PLL_FWDDIVA_4 0x00040000
++#define PLL_FWDDIVB_4 0x00004000
++#define PLL_TUNE_15_M_40 0x0000023E /* 14 < M <= 40 */
++#define PLL_TUNE_VCO_LOW 0x00000000 /* 500MHz <= VCO <= 800MHz */
++
++#define PLLMR0_200_100_50_25 (PLL_CPUDIV_1 | PLL_PLBDIV_2 | \
++ PLL_OPBDIV_2 | PLL_EXTBUSDIV_3 | \
++ PLL_MALDIV_1 | PLL_PCIDIV_4)
++#define PLLMR1_200_100_50_25 (PLL_FBKDIV_8 | \
++ PLL_FWDDIVA_4 | PLL_FWDDIVB_4 | \
++ PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
+diff -uNr u-boot-1.1.2/board/emetec405/u-boot.lds u-boot-emetec-1.1.2/board/emetec405/u-boot.lds
+--- u-boot-1.1.2/board/emetec405/u-boot.lds 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/board/emetec405/u-boot.lds 2003-09-12 11:41:39.000000000 +0300
+@@ -0,0 +1,147 @@
++/*
++ * (C) Copyright 2000
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_ARCH(powerpc)
++SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
++/* Do we need any of these for elf?
++ __DYNAMIC = 0; */
++SECTIONS
++{
++ .resetvec 0xFFFFFFFC :
++ {
++ *(.resetvec)
++ } = 0xffff
++
++ /* Read-only sections, merged into text segment: */
++ . = + SIZEOF_HEADERS;
++ .interp : { *(.interp) }
++ .hash : { *(.hash) }
++ .dynsym : { *(.dynsym) }
++ .dynstr : { *(.dynstr) }
++ .rel.text : { *(.rel.text) }
++ .rela.text : { *(.rela.text) }
++ .rel.data : { *(.rel.data) }
++ .rela.data : { *(.rela.data) }
++ .rel.rodata : { *(.rel.rodata) }
++ .rela.rodata : { *(.rela.rodata) }
++ .rel.got : { *(.rel.got) }
++ .rela.got : { *(.rela.got) }
++ .rel.ctors : { *(.rel.ctors) }
++ .rela.ctors : { *(.rela.ctors) }
++ .rel.dtors : { *(.rel.dtors) }
++ .rela.dtors : { *(.rela.dtors) }
++ .rel.bss : { *(.rel.bss) }
++ .rela.bss : { *(.rela.bss) }
++ .rel.plt : { *(.rel.plt) }
++ .rela.plt : { *(.rela.plt) }
++ .init : { *(.init) }
++ .plt : { *(.plt) }
++ .text :
++ {
++ /* WARNING - the following is hand-optimized to fit within */
++ /* the sector layout of our flash chips! XXX FIXME XXX */
++
++ cpu/ppc4xx/start.o (.text)
++ cpu/ppc4xx/traps.o (.text)
++ cpu/ppc4xx/interrupts.o (.text)
++ cpu/ppc4xx/serial.o (.text)
++ cpu/ppc4xx/cpu_init.o (.text)
++ cpu/ppc4xx/speed.o (.text)
++ cpu/ppc4xx/405gp_enet.o (.text)
++ common/dlmalloc.o (.text)
++ lib_generic/crc32.o (.text)
++ lib_ppc/extable.o (.text)
++ lib_generic/zlib.o (.text)
++
++/* . = env_offset;*/
++/* common/environment.o(.text)*/
++
++ *(.text)
++ *(.fixup)
++ *(.got1)
++ }
++ _etext = .;
++ PROVIDE (etext = .);
++ .rodata :
++ {
++ *(.rodata)
++ *(.rodata1)
++ *(.rodata.str1.4)
++ }
++ .fini : { *(.fini) } =0
++ .ctors : { *(.ctors) }
++ .dtors : { *(.dtors) }
++
++ /* Read-write section, merged into data segment: */
++ . = (. + 0x00FF) & 0xFFFFFF00;
++ _erotext = .;
++ PROVIDE (erotext = .);
++ .reloc :
++ {
++ *(.got)
++ _GOT2_TABLE_ = .;
++ *(.got2)
++ _FIXUP_TABLE_ = .;
++ *(.fixup)
++ }
++ __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
++ __fixup_entries = (. - _FIXUP_TABLE_)>>2;
++
++ .data :
++ {
++ *(.data)
++ *(.data1)
++ *(.sdata)
++ *(.sdata2)
++ *(.dynamic)
++ CONSTRUCTORS
++ }
++ _edata = .;
++ PROVIDE (edata = .);
++
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ __start___ex_table = .;
++ __ex_table : { *(__ex_table) }
++ __stop___ex_table = .;
++
++ . = ALIGN(256);
++ __init_begin = .;
++ .text.init : { *(.text.init) }
++ .data.init : { *(.data.init) }
++ . = ALIGN(256);
++ __init_end = .;
++
++ __bss_start = .;
++ .bss :
++ {
++ *(.sbss) *(.scommon)
++ *(.dynbss)
++ *(.bss)
++ *(COMMON)
++ }
++ _end = . ;
++ PROVIDE (end = .);
++}
+diff -uNr u-boot-1.1.2/copy.sh u-boot-emetec-1.1.2/copy.sh
+--- u-boot-1.1.2/copy.sh 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/copy.sh 2005-03-17 23:26:42.000000000 +0200
+@@ -0,0 +1,2 @@
++cp u-boot.bin /home/admin/uboot/uboot_v6.bin
++cp u-boot.srec /home/admin/uboot/uboot_v6.srec
+diff -uNr u-boot-1.1.2/cpu/ppc4xx/405gp_enet.c u-boot-emetec-1.1.2/cpu/ppc4xx/405gp_enet.c
+--- u-boot-1.1.2/cpu/ppc4xx/405gp_enet.c 2004-07-02 17:36:35.000000000 +0300
++++ u-boot-emetec-1.1.2/cpu/ppc4xx/405gp_enet.c 2005-05-06 18:07:02.000000000 +0300
+@@ -133,7 +133,7 @@
+ /*-----------------------------------------------------------------------------+
+ * Prototypes and externals.
+ *-----------------------------------------------------------------------------*/
+-static void enet_rcv (struct eth_device *dev, unsigned long malisr);
++static void enet_rcv (struct eth_device *dev, unsigned long malisr);
+
+ int enetInt (struct eth_device *dev);
+ static void mal_err (struct eth_device *dev, unsigned long isr,
+@@ -190,11 +190,15 @@
+ unsigned short reg_short;
+
+ EMAC_405_HW_PST hw_p = dev->priv;
++
++ puts ("Test 1\n");
+ /* before doing anything, figure out if we have a MAC address */
+ /* if not, bail */
+ if (memcmp (dev->enetaddr, "\0\0\0\0\0\0", 6) == 0)
+ return -1;
+
++ puts ("Test 2\n");
++
+ msr = mfmsr ();
+ mtmsr (msr & ~(MSR_EE)); /* disable interrupts */
+
+@@ -1023,6 +1027,8 @@
+ #else
+ emac0_dev = dev;
+ #endif
++ // print device name
++ printf("%s\n", dev->name);
+
+ } /* end for each supported device */
+
+diff -uNr u-boot-1.1.2/cpu/pxa/config.mk u-boot-emetec-1.1.2/cpu/pxa/config.mk
+--- u-boot-1.1.2/cpu/pxa/config.mk 2007-04-20 00:01:06.000000000 +0300
++++ u-boot-emetec-1.1.2/cpu/pxa/config.mk 2003-05-23 15:36:21.000000000 +0300
+@@ -23,6 +23,6 @@
+ #
+
+ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \
+- -msoft-float
++ -mshort-load-bytes -msoft-float
+
+ PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
+diff -uNr u-boot-1.1.2/include/configs/EMETEC405.h u-boot-emetec-1.1.2/include/configs/EMETEC405.h
+--- u-boot-1.1.2/include/configs/EMETEC405.h 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/include/configs/EMETEC405.h 2005-05-25 10:08:39.000000000 +0300
+@@ -0,0 +1,349 @@
++/*
++ * (C) Copyright 2001-2003
++ * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/*
++ * board/config.h - configuration options, board specific
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#define FLASH_8MB 1
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++
++#define CONFIG_405EP 1 /* This is a PPC405 CPU */
++#define CONFIG_4xx 1 /* ...member of PPC4xx family */
++#define CONFIG_EMETEC405 1 /* ...on a EMETEC405 board */
++
++#define CONFIG_BOARD_EARLY_INIT_F 1 /* call board_early_init_f() */
++#define CONFIG_MISC_INIT_R 1 /* call misc_init_r() */
++
++#define CONFIG_SYS_CLK_FREQ 25000000 /* external frequency to pll */
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */
++
++#undef CONFIG_BOOTARGS
++#undef CONFIG_BOOTCOMMAND
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "ramargs=setenv bootargs console=ttyS0,115200 " \
++ "root=/dev/ram rw\0" \
++ "flash_mem=run ramargs;" \
++ "bootm $(kernel_addr) $(ramdisk_addr)\0" \
++ "kernel_addr=ffC00000\0" \
++ "ramdisk_addr=ffCE0000\0" \
++ ""
++#define CONFIG_BOOTCOMMAND "run flash_mem"
++
++#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
++
++#define CONFIG_MII 1 /* MII PHY management */
++#define CONFIG_PHY_ADDR 0 /* PHY address */
++
++#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
++ CFG_CMD_NET | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_IRQ | \
++ CFG_CMD_ELF | \
++ CFG_CMD_I2C | \
++ CFG_CMD_PING | \
++ CFG_CMD_EEPROM )
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#undef CONFIG_WATCHDOG /* watchdog disabled */
++
++#define CONFIG_SDRAM_BANK0 1 /* init onboard SDRAM bank 0 */
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "=> " /* Monitor Command Prompt */
++
++#undef CFG_HUSH_PARSER /* use "hush" command parser */
++#ifdef CFG_HUSH_PARSER
++#define CFG_PROMPT_HUSH_PS2 "> "
++#endif
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */
++#else
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#endif
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */
++
++#define CFG_CONSOLE_INFO_QUIET 1 /* don't print console @ startup*/
++
++#define CFG_MEMTEST_START 0x0400000 /* memtest works on */
++#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
++
++#undef CFG_EXT_SERIAL_CLOCK /* no external serial clock used */
++#define CFG_IGNORE_405_UART_ERRATA_59 /* ignore ppc405gp errata #59 */
++#define CFG_BASE_BAUD 691200
++
++/* The following table includes the supported baudrates */
++#define CFG_BAUDRATE_TABLE \
++ { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, \
++ 57600, 115200, 230400, 460800, 921600 }
++
++#define CFG_LOAD_ADDR 0x100000 /* default load address */
++#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */
++
++#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */
++
++#define CONFIG_ZERO_BOOTDELAY_CHECK /* check for keypress on bootdelay==0 */
++
++#define CONFIG_VERSION_VARIABLE 1 /* include version env variable */
++
++#define CFG_RX_ETH_BUFFER 16 /* use 16 rx buffer on 405 emac */
++
++/* Ethernet stuff */
++#define CONFIG_ENV_OVERWRITE /* Let the user to change the Ethernet MAC addresses */
++#define CONFIG_ETHADDR 00:50:C2:1E:AF:FE
++
++#define CONFIG_IPADDR 192.168.0.50
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_SERVERIP 192.168.0.1
++
++/*-----------------------------------------------------------------------
++ * PCI stuff
++ *-----------------------------------------------------------------------
++ */
++#define PCI_HOST_ADAPTER 0 // configure as pci adapter
++#define PCI_HOST_FORCE 1 // configure as pci host
++#define PCI_HOST_AUTO 2 // detected via arbiter enable
++
++#define CONFIG_PCI // include pci support
++#define CONFIG_PCI_HOST PCI_HOST_FORCE // select pci host function
++#define CONFIG_PCI_PNP // do pci plug-and-play
++
++
++#define CFG_PCI_SUBSYS_VENDORID 0x0000 // PCI Vendor ID: IBM
++#define CFG_PCI_SUBSYS_DEVICEID 0x0000 // PCI Device ID: 405GP
++#define CFG_PCI_PTM1LA 0x00000000 // point to sdram
++#define CFG_PCI_PTM1MS 0x80000001 // 2GB, enable hard-wired to 1
++#define CFG_PCI_PTM1PCI 0x00000000 // Host: use this pci address
++#define CFG_PCI_PTM2LA 0x00000000 // disabled
++#define CFG_PCI_PTM2MS 0x00000000 // disabled
++#define CFG_PCI_PTM2PCI 0x00000000 // Host: use this pci address
++
++/*-----------------------------------------------------------------------
++ * Start addresses for the final memory configuration
++ * (Set up by the startup code)
++ * Please note that CFG_SDRAM_BASE _must_ start at 0
++ */
++
++/*
++ * Flash configuration (8,16 or 32 MB)
++ * TEXT base always at 0xFFF00000
++ * ENV_ADDR always at 0xFFF40000
++ * FLASH_BASE at 0xFE000000 for 32 MB
++ * 0xFF000000 for 16 MB
++ * 0xFF800000 for 8 MB
++ * 0xFFC00000 for 4 MB
++ */
++
++#define CFG_SDRAM_BASE 0x00000000
++#define CFG_FLASH_BASE 0xFFFC0000
++#define CFG_MONITOR_BASE CFG_FLASH_BASE
++#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */
++#define CFG_MALLOC_LEN (256 * 1024) /* Reserve 256 kB for malloc() */
++
++/*
++ * For booting Linux, the board info and command line data
++ * have to be in the first 8 MB of memory, since this is
++ * the maximum mapped by the Linux kernel during initialization.
++ */
++#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
++/*-----------------------------------------------------------------------
++ * FLASH organization
++ */
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */
++
++#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
++#define CFG_FLASH_WRITE_TOUT 1000 /* Timeout for Flash Write (in ms) */
++
++#define CFG_FLASH_WORD_SIZE unsigned short /* flash word size (width) */
++#define CFG_FLASH_ADDR0 0x5555 /* 1st address for flash config cycles */
++#define CFG_FLASH_ADDR1 0x2AAA /* 2nd address for flash config cycles */
++/*
++ * The following defines are added for buggy IOP480 byte interface.
++ * All other boards should use the standard values (CPCI405 etc.)
++ */
++#define CFG_FLASH_READ0 0x0000 /* 0 is standard */
++#define CFG_FLASH_READ1 0x0001 /* 1 is standard */
++#define CFG_FLASH_READ2 0x0002 /* 2 is standard */
++
++#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */
++
++/*
++#define CFG_ENV_IS_IN_FLASH 1
++//Address and size of Primary Environment Sector
++#define CFG_ENV_ADDR 0xFFFFA000
++#define CFG_ENV_SIZE 0x2000
++*/
++
++/*-----------------------------------------------------------------------
++ * Environment Variable setup
++ */
++#define CFG_ENV_IS_IN_EEPROM 1 // use EEPROM for environment vars
++#define CFG_ENV_OFFSET 0x100 // environment starts at the beginning of the EEPROM
++#define CFG_ENV_SIZE 0x700 // 2048 bytes may be used for env vars
++
++/*-----------------------------------------------------------------------
++ * I2C EEPROM (CAT24WC16) for environment
++ */
++#define CONFIG_HARD_I2C // I2c with hardware support
++#define CFG_I2C_SPEED 400000 // I2C speed and slave address
++#define CFG_I2C_SLAVE 0x7F
++
++#define CFG_I2C_EEPROM_ADDR 0x50 // EEPROM CAT28WC08
++#define CFG_I2C_EEPROM_ADDR_LEN 1 // Bytes of address
++
++#define CFG_I2C_EEPROM_ADDR_OVERFLOW 0x07
++#define CFG_EEPROM_PAGE_WRITE_BITS 4 // The Catalyst CAT24WC08 has
++ // 16 byte page write mode using
++ // last 4 bits of the address
++#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 // and takes up to 10 msec
++#define CFG_EEPROM_PAGE_WRITE_ENABLE
++
++/*-----------------------------------------------------------------------
++ * Cache Configuration
++ */
++#define CFG_DCACHE_SIZE 16384 /* For IBM 405 CPUs, older 405 ppc's */
++ /* have only 8kB, 16kB is save here */
++#define CFG_CACHELINE_SIZE 32 /* ... */
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
++#endif
++
++/*
++ * Init Memory Controller:
++ *
++ * BR0/1 and OR0/1 (FLASH)
++ */
++
++#if FLASH_8MB == 1
++#define FLASH_BASE0_PRELIM 0xFF800000 /* FLASH bank #0 */
++#else
++#define FLASH_BASE0_PRELIM 0xFFC00000 /* FLASH bank #0 */
++#endif
++
++/*-----------------------------------------------------------------------
++ * External Bus Controller (EBC) Setup
++ */
++
++/* Memory Bank 0 (Flash Bank 0) initialization */
++#if FLASH_8MB == 1
++#define CFG_EBC_PB0AP 0x92015480
++#define CFG_EBC_PB0CR 0xFFC5B000 /* BAS=0xFFC,BS=8MB,BU=R/W,BW=16bit */
++#else
++#define CFG_EBC_PB0AP 0x92015480
++#define CFG_EBC_PB0CR 0xFFC5A000 /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
++#endif
++
++/*-----------------------------------------------------------------------
++ * Definitions for initial stack pointer and data area (in data cache)
++ */
++/* use on chip memory ( OCM ) for temperary stack until sdram is tested */
++#define CFG_TEMP_STACK_OCM 1
++
++/* On Chip Memory location */
++#define CFG_OCM_DATA_ADDR 0xF8000000
++#define CFG_OCM_DATA_SIZE 0x1000
++#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR /* inside of SDRAM */
++#define CFG_INIT_RAM_END CFG_OCM_DATA_SIZE /* End of used area in RAM */
++
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
++#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET
++
++/*-----------------------------------------------------------------------
++ * Definitions for GPIO setup (PPC405EP specific)
++ *
++ * GPIO0[0] - External Bus Controller BLAST output
++ * GPIO0[1-9] - Instruction trace outputs -> GPIO
++ * GPIO0[10-13] - External Bus Controller CS_1 - CS_4 outputs
++ * GPIO0[14-16] - External Bus Controller ABUS3-ABUS5 outputs -> GPIO
++ * GPIO0[17-23] - External Interrupts IRQ0 - IRQ6 inputs
++ * GPIO0[24-27] - UART0 control signal inputs/outputs
++ * GPIO0[28-29] - UART1 data signal input/output
++ * GPIO0[30-31] - EMAC0 and EMAC1 reject packet inputs
++ */
++#define CFG_GPIO0_OSRH 0x40000550
++#define CFG_GPIO0_OSRL 0x00000110
++#define CFG_GPIO0_ISR1H 0x00000000
++#define CFG_GPIO0_ISR1L 0x15555445
++#define CFG_GPIO0_TSRH 0x00000000
++#define CFG_GPIO0_TSRL 0x00000000
++#define CFG_GPIO0_TCR 0xF7FE0014
++
++/*
++ * Internal Definitions
++ *
++ * Boot Flags
++ */
++#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
++#define BOOTFLAG_WARM 0x02 /* Software reboot */
++
++#define PLL_CPUDIV_1 0x00000000
++#define PLL_PLBDIV_2 0x00010000
++#define PLL_OPBDIV_2 0x00001000
++
++#define PLL_EXTBUSDIV_4 0x00000200
++
++#define PLL_MALDIV_1 0x00000000
++#define PLL_PCIDIV_2 0x00000001
++#define PLL_PCIDIV_4 0x00000003
++
++#define PLL_FBKDIV_8 0x00800000
++
++#define PLL_FWDDIVA_4 0x00040000
++#define PLL_FWDDIVB_4 0x00004000
++#define PLL_TUNE_15_M_40 0x0000023E /* 14 < M <= 40 */
++#define PLL_TUNE_VCO_LOW 0x00000000 /* 500MHz <= VCO <= 800MHz */
++
++#define PLLMR0_200_100_50_25 (PLL_CPUDIV_1 | PLL_PLBDIV_2 | \
++ PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 | \
++ PLL_MALDIV_1 | PLL_PCIDIV_4)
++#define PLLMR1_200_100_50_25 (PLL_FBKDIV_8 | \
++ PLL_FWDDIVA_4 | PLL_FWDDIVB_4 | \
++ PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
++/*
++ * Default speed selection (cpu_plb_opb_ebc) in mhz.
++ * This value will be set if iic boot eprom is disabled.
++ */
++#define PLLMR0_DEFAULT PLLMR0_200_100_50_25
++#define PLLMR1_DEFAULT PLLMR1_200_100_50_25
++
++#endif /* __CONFIG_H */
+diff -uNr u-boot-1.1.2/include/configs/EMETEC405.h.old u-boot-emetec-1.1.2/include/configs/EMETEC405.h.old
+--- u-boot-1.1.2/include/configs/EMETEC405.h.old 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/include/configs/EMETEC405.h.old 2005-03-17 23:00:33.000000000 +0200
+@@ -0,0 +1,349 @@
++/*
++ * (C) Copyright 2001-2003
++ * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/*
++ * board/config.h - configuration options, board specific
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++
++#define CONFIG_405EP 1 /* This is a PPC405 CPU */
++#define CONFIG_4xx 1 /* ...member of PPC4xx family */
++#define CONFIG_EMETEC405 1 /* ...on a EMETEC405 board */
++
++#define CONFIG_BOARD_EARLY_INIT_F 1 /* call board_early_init_f() */
++#define CONFIG_MISC_INIT_R 1 /* call misc_init_r() */
++
++#define CONFIG_SYS_CLK_FREQ 25000000 /* external frequency to pll */
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */
++
++#undef CONFIG_BOOTARGS
++#undef CONFIG_BOOTCOMMAND
++
++#define CONFIG_PREBOOT /* enable preboot variable */
++
++#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
++
++#define CONFIG_MII 1 /* MII PHY management */
++#define CONFIG_PHY_ADDR 0 /* PHY address */
++#define CONFIG_LXT971_NO_SLEEP 1 /* disable sleep mode in LXT971 */
++
++/*
++#define CONFIG_PHY_CLK_FREQ EMAC_STACR_CLK_66MHZ // 66 MHz OPB clock
++*/
++
++#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_IRQ | \
++ CFG_CMD_ELF | \
++ CFG_CMD_I2C | \
++ CFG_CMD_MII | \
++ CFG_CMD_PING | \
++ CFG_CMD_EEPROM )
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#undef CONFIG_WATCHDOG /* watchdog disabled */
++
++#define CONFIG_SDRAM_BANK0 1 /* init onboard SDRAM bank 0 */
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "=> " /* Monitor Command Prompt */
++
++#undef CFG_HUSH_PARSER /* use "hush" command parser */
++#ifdef CFG_HUSH_PARSER
++#define CFG_PROMPT_HUSH_PS2 "> "
++#endif
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */
++#else
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#endif
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */
++
++#define CFG_CONSOLE_INFO_QUIET 1 /* don't print console @ startup*/
++
++#define CFG_MEMTEST_START 0x0400000 /* memtest works on */
++#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */
++
++#undef CFG_EXT_SERIAL_CLOCK /* no external serial clock used */
++#define CFG_IGNORE_405_UART_ERRATA_59 /* ignore ppc405gp errata #59 */
++#define CFG_BASE_BAUD 691200
++#undef CONFIG_UART1_CONSOLE /* define for uart1 as console */
++
++/* The following table includes the supported baudrates */
++#define CFG_BAUDRATE_TABLE \
++ { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, \
++ 57600, 115200, 230400, 460800, 921600 }
++
++#define CFG_LOAD_ADDR 0x100000 /* default load address */
++#define CFG_EXTBDINFO 1 /* To use extended board_into (bd_t) */
++
++#define CFG_HZ 1000 /* decrementer freq: 1 ms ticks */
++
++#define CONFIG_ZERO_BOOTDELAY_CHECK /* check for keypress on bootdelay==0 */
++
++#define CONFIG_VERSION_VARIABLE 1 /* include version env variable */
++
++#define CFG_RX_ETH_BUFFER 16 /* use 16 rx buffer on 405 emac */
++
++/* Ethernet stuff */
++#define CONFIG_ENV_OVERWRITE /* Let the user to change the Ethernet MAC addresses */
++#define CONFIG_ETHADDR 00:50:C2:1E:AF:FE
++#define CONFIG_HAS_ETH1
++#define CONFIG_ETH1ADDR 00:50:C2:1E:AF:FD
++
++#define CONFIG_IPADDR 192.168.0.50
++#define CONFIG_IP1ADDR 192.168.0.51
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_SERVERIP 192.168.0.1
++
++/*-----------------------------------------------------------------------
++ * PCI stuff
++ *-----------------------------------------------------------------------
++ */
++#define PCI_HOST_ADAPTER 0 /* configure as pci adapter */
++#define PCI_HOST_FORCE 1 /* configure as pci host */
++#define PCI_HOST_AUTO 2 /* detected via arbiter enable */
++
++#undef CONFIG_PCI /* include pci support */
++#define CONFIG_PCI_HOST PCI_HOST_HOST /* select pci host function */
++#undef CONFIG_PCI_PNP /* do pci plug-and-play */
++ /* resource configuration */
++
++#undef CONFIG_PCI_SCAN_SHOW /* print pci devices @ startup */
++
++#define CFG_PCI_SUBSYS_VENDORID 0x12FE /* PCI Vendor ID: esd gmbh */
++#define CFG_PCI_SUBSYS_DEVICEID 0x0405 /* PCI Device ID: CPCI-405 */
++#define CFG_PCI_CLASSCODE 0x0b20 /* PCI Class Code: Processor/PPC*/
++#define CFG_PCI_PTM1LA 0x00000000 /* point to sdram */
++#define CFG_PCI_PTM1MS 0xfc000001 /* 64MB, enable hard-wired to 1 */
++#define CFG_PCI_PTM1PCI 0x00000000 /* Host: use this pci address */
++#define CFG_PCI_PTM2LA 0xffc00000 /* point to flash */
++#define CFG_PCI_PTM2MS 0xffc00001 /* 4MB, enable */
++#define CFG_PCI_PTM2PCI 0x04000000 /* Host: use this pci address */
++
++/*-----------------------------------------------------------------------
++ * Start addresses for the final memory configuration
++ * (Set up by the startup code)
++ * Please note that CFG_SDRAM_BASE _must_ start at 0
++ */
++#define CFG_SDRAM_BASE 0x00000000
++#define CFG_FLASH_BASE 0xFFFC0000
++#define CFG_MONITOR_BASE CFG_FLASH_BASE
++#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */
++#define CFG_MALLOC_LEN (256 * 1024) /* Reserve 256 kB for malloc() */
++
++/*
++ * For booting Linux, the board info and command line data
++ * have to be in the first 8 MB of memory, since this is
++ * the maximum mapped by the Linux kernel during initialization.
++ */
++#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
++/*-----------------------------------------------------------------------
++ * FLASH organization
++ */
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */
++
++#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */
++#define CFG_FLASH_WRITE_TOUT 1000 /* Timeout for Flash Write (in ms) */
++
++#define CFG_FLASH_WORD_SIZE unsigned short /* flash word size (width) */
++#define CFG_FLASH_ADDR0 0x5555 /* 1st address for flash config cycles */
++#define CFG_FLASH_ADDR1 0x2AAA /* 2nd address for flash config cycles */
++/*
++ * The following defines are added for buggy IOP480 byte interface.
++ * All other boards should use the standard values (CPCI405 etc.)
++ */
++#define CFG_FLASH_READ0 0x0000 /* 0 is standard */
++#define CFG_FLASH_READ1 0x0001 /* 1 is standard */
++#define CFG_FLASH_READ2 0x0002 /* 2 is standard */
++
++#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */
++
++#if 0 /* test-only */
++#define CFG_JFFS2_FIRST_BANK 0 /* use for JFFS2 */
++#define CFG_JFFS2_NUM_BANKS 1 /* ! second bank contains U-Boot */
++#endif
++
++/*-----------------------------------------------------------------------
++ * Environment Variable setup
++ */
++#define CFG_ENV_IS_IN_EEPROM 1 /* use EEPROM for environment vars */
++#define CFG_ENV_OFFSET 0x100 /* environment starts at the beginning of the EEPROM */
++#define CFG_ENV_SIZE 0x700 /* 2048 bytes may be used for env vars*/
++ /* total size of a CAT24WC16 is 2048 bytes */
++
++#define CFG_NVRAM_BASE_ADDR 0xF0000500 /* NVRAM base address */
++#define CFG_NVRAM_SIZE 242 /* NVRAM size */
++
++/*-----------------------------------------------------------------------
++ * I2C EEPROM (CAT24WC16) for environment
++ */
++#define CONFIG_HARD_I2C /* I2c with hardware support */
++#define CFG_I2C_SPEED 400000 /* I2C speed and slave address */
++#define CFG_I2C_SLAVE 0x7F
++
++#define CFG_I2C_EEPROM_ADDR 0x50 /* EEPROM CAT28WC08 */
++#define CFG_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */
++/* mask of address bits that overflow into the "EEPROM chip address" */
++#define CFG_I2C_EEPROM_ADDR_OVERFLOW 0x07
++#define CFG_EEPROM_PAGE_WRITE_BITS 4 /* The Catalyst CAT24WC08 has */
++ /* 16 byte page write mode using*/
++ /* last 4 bits of the address */
++#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 /* and takes up to 10 msec */
++#define CFG_EEPROM_PAGE_WRITE_ENABLE
++
++/*-----------------------------------------------------------------------
++ * Cache Configuration
++ */
++#define CFG_DCACHE_SIZE 16384 /* For IBM 405 CPUs, older 405 ppc's */
++ /* have only 8kB, 16kB is save here */
++#define CFG_CACHELINE_SIZE 32 /* ... */
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
++#endif
++
++/*
++ * Init Memory Controller:
++ *
++ * BR0/1 and OR0/1 (FLASH)
++ */
++
++#define FLASH_BASE0_PRELIM 0xFFC00000 /* FLASH bank #0 */
++
++/*-----------------------------------------------------------------------
++ * External Bus Controller (EBC) Setup
++ */
++
++/* Memory Bank 0 (Flash Bank 0, NOR-FLASH) initialization */
++#define CFG_EBC_PB0AP 0x92015480
++#define CFG_EBC_PB0CR 0xFFC5A000 /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */
++
++#define DUART0_BA 0xF0000000 /* DUART Base Address */
++#define DUART1_BA 0xF0000008 /* DUART Base Address */
++#define DUART2_BA 0xF0000010 /* DUART Base Address */
++#define DUART3_BA 0xF0000018 /* DUART Base Address */
++
++/*-----------------------------------------------------------------------
++ * FPGA stuff
++ */
++#define CFG_FPGA_SPARTAN2 1 /* using Xilinx Spartan 2 now */
++#define CFG_FPGA_MAX_SIZE 128*1024 /* 128kByte is enough for XC2S50E*/
++
++/* FPGA program pin configuration */
++#define CFG_FPGA_PRG 0x04000000 /* FPGA program pin (ppc output) */
++#define CFG_FPGA_CLK 0x02000000 /* FPGA clk pin (ppc output) */
++#define CFG_FPGA_DATA 0x01000000 /* FPGA data pin (ppc output) */
++#define CFG_FPGA_INIT 0x00010000 /* FPGA init pin (ppc input) */
++#define CFG_FPGA_DONE 0x00008000 /* FPGA done pin (ppc input) */
++
++/*-----------------------------------------------------------------------
++ * Definitions for initial stack pointer and data area (in data cache)
++ */
++/* use on chip memory ( OCM ) for temperary stack until sdram is tested */
++#define CFG_TEMP_STACK_OCM 1
++
++/* On Chip Memory location */
++#define CFG_OCM_DATA_ADDR 0xF8000000
++#define CFG_OCM_DATA_SIZE 0x1000
++#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR /* inside of SDRAM */
++#define CFG_INIT_RAM_END CFG_OCM_DATA_SIZE /* End of used area in RAM */
++
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
++#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET
++
++/*-----------------------------------------------------------------------
++ * Definitions for GPIO setup (PPC405EP specific)
++ *
++ * GPIO0[0] - External Bus Controller BLAST output
++ * GPIO0[1-9] - Instruction trace outputs -> GPIO
++ * GPIO0[10-13] - External Bus Controller CS_1 - CS_4 outputs
++ * GPIO0[14-16] - External Bus Controller ABUS3-ABUS5 outputs -> GPIO
++ * GPIO0[17-23] - External Interrupts IRQ0 - IRQ6 inputs
++ * GPIO0[24-27] - UART0 control signal inputs/outputs
++ * GPIO0[28-29] - UART1 data signal input/output
++ * GPIO0[30-31] - EMAC0 and EMAC1 reject packet inputs
++ */
++#define CFG_GPIO0_OSRH 0x40000550
++#define CFG_GPIO0_OSRL 0x00000110
++#define CFG_GPIO0_ISR1H 0x00000000
++#define CFG_GPIO0_ISR1L 0x15555445
++#define CFG_GPIO0_TSRH 0x00000000
++#define CFG_GPIO0_TSRL 0x00000000
++#define CFG_GPIO0_TCR 0xF7FE0014
++
++/*
++ * Internal Definitions
++ *
++ * Boot Flags
++ */
++#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
++#define BOOTFLAG_WARM 0x02 /* Software reboot */
++
++#define PLL_CPUDIV_1 0x00000000
++#define PLL_PLBDIV_2 0x00010000
++#define PLL_OPBDIV_2 0x00001000
++#define PLL_EXTBUSDIV_3 0x00000100
++#define PLL_MALDIV_1 0x00000000
++#define PLL_PCIDIV_4 0x00000003
++
++#define PLL_FBKDIV_8 0x00800000
++#define PLL_FWDDIVA_4 0x00040000
++#define PLL_FWDDIVB_4 0x00004000
++#define PLL_TUNE_15_M_40 0x0000023E /* 14 < M <= 40 */
++#define PLL_TUNE_VCO_LOW 0x00000000 /* 500MHz <= VCO <= 800MHz */
++
++#define PLLMR0_200_100_50_25 (PLL_CPUDIV_1 | PLL_PLBDIV_2 | \
++ PLL_OPBDIV_2 | PLL_EXTBUSDIV_3 | \
++ PLL_MALDIV_1 | PLL_PCIDIV_4)
++#define PLLMR1_200_100_50_25 (PLL_FBKDIV_8 | \
++ PLL_FWDDIVA_4 | PLL_FWDDIVB_4 | \
++ PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW)
++/*
++ * Default speed selection (cpu_plb_opb_ebc) in mhz.
++ * This value will be set if iic boot eprom is disabled.
++ */
++#define PLLMR0_DEFAULT PLLMR0_200_100_50_25
++#define PLLMR1_DEFAULT PLLMR1_200_100_50_25
++
++#endif /* __CONFIG_H */
+diff -uNr u-boot-1.1.2/include/configs/HUB405.h u-boot-emetec-1.1.2/include/configs/HUB405.h
+--- u-boot-1.1.2/include/configs/HUB405.h 2004-12-31 11:32:53.000000000 +0200
++++ u-boot-emetec-1.1.2/include/configs/HUB405.h 2005-03-11 22:19:12.000000000 +0200
+@@ -35,7 +35,7 @@
+
+ #define CONFIG_405EP 1 /* This is a PPC405 CPU */
+ #define CONFIG_4xx 1 /* ...member of PPC4xx family */
+-#define CONFIG_HUB405 1 /* ...on a HUB405 board */
++#define CONFIG_EMETEC405 1 /* ...on a EMETEC405 board */
+
+ #define CONFIG_BOARD_EARLY_INIT_F 1 /* call board_early_init_f() */
+ #define CONFIG_MISC_INIT_R 1 /* call misc_init_r() */
+diff -uNr u-boot-1.1.2/include/flash.h u-boot-emetec-1.1.2/include/flash.h
+--- u-boot-1.1.2/include/flash.h 2004-12-16 20:01:48.000000000 +0200
++++ u-boot-emetec-1.1.2/include/flash.h 2005-05-25 10:04:56.000000000 +0300
+@@ -229,7 +229,11 @@
+
+ #define STM_ID_x800AB 0x005B005B /* M29W800AB ID (8M = 512K x 16 ) */
+ #define STM_ID_29W320DT 0x22CA22CA /* M29W320DT ID (32 M, top boot sector) */
+-#define STM_ID_29W320DB 0x22CB22CB /* M29W320DB ID (32 M, bottom boot sect) */
++#define STM_ID_29W320DB 0x22CB22CB /* M29W320DB ID (32 M, bottom boot sect)*/
++
++#define STM_ID_29W640DT 0x22DE22DE /* M29W640DT ID (64 M, top boot sector) */
++#define STM_ID_29W640DB 0x22DF22DF /* M29W640DB ID (64 M, bottom boot sect)*/
++
+ #define STM_ID_29W040B 0x00E300E3 /* M29W040B ID (4M = 512K x 8) */
+
+ #define INTEL_ID_28F016S 0x66a066a0 /* 28F016S[VS] ID (16M = 512k x 16) */
+@@ -328,6 +332,8 @@
+ #define FLASH_STM800AB 0x0051 /* STM M29WF800AB ( 8M = 512K x 16 ) */
+ #define FLASH_STMW320DT 0x0052 /* STM M29W320DT (32 M, top boot sector) */
+ #define FLASH_STMW320DB 0x0053 /* STM M29W320DB (32 M, bottom boot sect)*/
++#define FLASH_STMW640DT 0x0054 /* STM M29W640DT (64 M, top boot sector) */
++#define FLASH_STMW640DB 0x0055 /* STM M29W640DB (64 M, bottom boot sect)*/
+ #define FLASH_STM320DB 0x00CB /* STM M29W320DB (4M = 64K x 64, bottom)*/
+ #define FLASH_STM800DT 0x00D7 /* STM M29W800DT (1M = 64K x 16, top) */
+ #define FLASH_STM800DB 0x005B /* STM M29W800DB (1M = 64K x 16, bottom)*/
+diff -uNr u-boot-1.1.2/include/net.h u-boot-emetec-1.1.2/include/net.h
+--- u-boot-1.1.2/include/net.h 2004-10-10 00:56:21.000000000 +0300
++++ u-boot-emetec-1.1.2/include/net.h 2005-04-27 23:16:40.000000000 +0300
+@@ -331,9 +331,9 @@
+ #define NETLOOP_SUCCESS 3
+ #define NETLOOP_FAIL 4
+
+-#ifdef CONFIG_NET_MULTI
++/* #ifdef CONFIG_NET_MULTI */
+ extern int NetRestartWrap; /* Tried all network devices */
+-#endif
++/* #endif */
+
+ typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS } proto_t;
+
+diff -uNr u-boot-1.1.2/lib_ppc/board.c u-boot-emetec-1.1.2/lib_ppc/board.c
+--- u-boot-1.1.2/lib_ppc/board.c 2004-12-31 11:32:54.000000000 +0200
++++ u-boot-emetec-1.1.2/lib_ppc/board.c 2005-04-27 23:03:33.000000000 +0300
+@@ -970,7 +970,8 @@
+ nand_init(); /* go init the NAND */
+ #endif
+
+-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
++
++#if (CONFIG_COMMANDS & CFG_CMD_NET) /* && defined(CONFIG_NET_MULTI) */
+ WATCHDOG_RESET ();
+ puts ("Net: ");
+ eth_initialize (bd);
+diff -uNr u-boot-1.1.2/loadftp.sh u-boot-emetec-1.1.2/loadftp.sh
+--- u-boot-1.1.2/loadftp.sh 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/loadftp.sh 2005-04-25 21:30:54.000000000 +0300
+@@ -0,0 +1 @@
++cp u-boot.bin /home/ftp/uboot.bin
+diff -uNr u-boot-1.1.2/loadwww.sh u-boot-emetec-1.1.2/loadwww.sh
+--- u-boot-1.1.2/loadwww.sh 1970-01-01 02:00:00.000000000 +0200
++++ u-boot-emetec-1.1.2/loadwww.sh 2005-03-12 13:06:19.000000000 +0200
+@@ -0,0 +1,2 @@
++#!/bin/bash
++rsync -vzr --rsh='ssh -l admin -p 5522' /home/admin/uboot/ admin@mhaber.net:/home/admin/uboot
+diff -uNr u-boot-1.1.2/net/eth.c u-boot-emetec-1.1.2/net/eth.c
+--- u-boot-1.1.2/net/eth.c 2004-12-16 19:49:38.000000000 +0200
++++ u-boot-emetec-1.1.2/net/eth.c 2005-05-06 18:04:08.000000000 +0300
+@@ -25,7 +25,7 @@
+ #include <command.h>
+ #include <net.h>
+
+-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
++#if (CONFIG_COMMANDS & CFG_CMD_NET) /* && defined(CONFIG_NET_MULTI) */
+
+ #ifdef CFG_GT_6426x
+ extern int gt6426x_eth_initialize(bd_t *bis);
+@@ -126,10 +126,13 @@
+ #ifdef CONFIG_DB64460
+ mv6446x_eth_initialize(bis);
+ #endif
++
+ #if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
+ ( defined(CONFIG_440) && !defined(CONFIG_NET_MULTI) )
+ ppc_4xx_eth_initialize(bis);
++ eth_number=1;
+ #endif
++
+ #if defined(CONFIG_440) && defined(CONFIG_NET_MULTI)
+ ppc_440x_eth_initialize(bis);
+ #endif
+@@ -197,6 +200,7 @@
+ rtl8169_initialize(bis);
+ #endif
+
++#if defined(CONFIG_NET_MULTI)
+ if (!eth_devices) {
+ puts ("No ethernet found.\n");
+ } else {
+@@ -248,7 +252,6 @@
+ dev = dev->next;
+ } while(dev != eth_devices);
+
+-#ifdef CONFIG_NET_MULTI
+ /* update current ethernet name */
+ if (eth_current) {
+ char *act = getenv("ethact");
+@@ -256,14 +259,14 @@
+ setenv("ethact", eth_current->name);
+ } else
+ setenv("ethact", NULL);
+-#endif
+-
+ putc ('\n');
+ }
++#endif
+
+ return eth_number;
+ }
+
++#ifdef CONFIG_NET_MULTI
+ void eth_set_enetaddr(int num, char *addr) {
+ struct eth_device *dev;
+ unsigned char enetaddr[6];
+@@ -362,21 +365,20 @@
+
+ eth_current = eth_current->next;
+
+-#ifdef CONFIG_NET_MULTI
++//#ifdef CONFIG_NET_MULTI
+ /* update current ethernet name */
+ {
+ char *act = getenv("ethact");
+ if (act == NULL || strcmp(act, eth_current->name) != 0)
+ setenv("ethact", eth_current->name);
+ }
+-#endif
++//#endif
+
+ if (first_failed == eth_current) {
+ NetRestartWrap = 1;
+ }
+ }
+
+-#ifdef CONFIG_NET_MULTI
+ void eth_set_current(void)
+ {
+ char *act;
+@@ -397,10 +399,11 @@
+
+ setenv("ethact", eth_current->name);
+ }
+-#endif
+
+ char *eth_get_name (void)
+ {
+ return (eth_current ? eth_current->name : "unknown");
+ }
+ #endif
++
++#endif
+diff -uNr u-boot-1.1.2/net/net.c u-boot-emetec-1.1.2/net/net.c
+--- u-boot-1.1.2/net/net.c 2004-10-12 01:51:14.000000000 +0300
++++ u-boot-emetec-1.1.2/net/net.c 2005-04-27 23:34:20.000000000 +0300
+@@ -126,11 +126,11 @@
+ { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
+ #endif
+ int NetState; /* Network loop state */
+-#ifdef CONFIG_NET_MULTI
++/* #ifdef CONFIG_NET_MULTI */
+ int NetRestartWrap = 0; /* Tried all network devices */
+ static int NetRestarted = 0; /* Network loop restarted */
+ static int NetDevExists = 0; /* At least one device configured */
+-#endif
++/* #endif */
+
+ /* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */
+ ushort NetOurVLAN = 0xFFFF; /* default is without VLAN */
+diff -uNr u-boot-1.1.2/patches/arm_flags.patch u-boot-emetec-1.1.2/patches/arm_flags.patch
+--- u-boot-1.1.2/patches/arm_flags.patch 2007-04-20 00:01:06.000000000 +0300
++++ u-boot-emetec-1.1.2/patches/arm_flags.patch 1970-01-01 02:00:00.000000000 +0200
+@@ -1,15 +0,0 @@
+-
+-#
+-# Patch managed by http://www.holgerschurig.de/patcher.html
+-#
+-
+---- u-boot-1.1.2/cpu/pxa/config.mk~armflags
+-+++ u-boot-1.1.2/cpu/pxa/config.mk
+-@@ -23,6 +23,6 @@
+- #
+-
+- PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \
+-- -mshort-load-bytes -msoft-float
+-+ -msoft-float
+-
+- PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
+diff -uNr u-boot-1.1.2/patches/series u-boot-emetec-1.1.2/patches/series
+--- u-boot-1.1.2/patches/series 2007-04-20 00:01:06.000000000 +0300
++++ u-boot-emetec-1.1.2/patches/series 1970-01-01 02:00:00.000000000 +0200
+@@ -1 +0,0 @@
+-arm_flags.patch -p1
+diff -uNr u-boot-1.1.2/lib_ppc/board.c new-uboot-1.1.2/lib_ppc/board.c
+--- u-boot-1.1.2/lib_ppc/board.c 2005-04-27 23:03:33.000000000 +0300
++++ new-uboot-1.1.2/lib_ppc/board.c 2007-04-20 00:55:16.000000000 +0300
+@@ -347,6 +347,7 @@
+
+ bd_t *bd;
+ ulong len, addr, addr_sp;
++ ulong *s;
+ gd_t *id;
+ init_fnc_t **init_fnc_ptr;
+ #ifdef CONFIG_PRAM
+@@ -466,8 +467,10 @@
+ */
+ addr_sp -= 16;
+ addr_sp &= ~0xF;
+- *((ulong *) addr_sp)-- = 0;
+- *((ulong *) addr_sp)-- = 0;
++ s = (ulong *)addr_sp;
++ *s-- = 0;
++ *s-- = 0;
++ addr_sp = (ulong)s;
+ debug ("Stack Pointer at: %08lx\n", addr_sp);
+
+ /*
+diff -uNr u-boot-1.1.2/net/net.c new-uboot-1.1.2/net/net.c
+--- u-boot-1.1.2/net/net.c 2005-04-27 23:34:20.000000000 +0300
++++ new-uboot-1.1.2/net/net.c 2007-04-20 01:00:26.000000000 +0300
+@@ -1491,14 +1491,17 @@
+ unsigned
+ NetCksum(uchar * ptr, int len)
+ {
+- ulong xsum;
+
+- xsum = 0;
+- while (len-- > 0)
+- xsum += *((ushort *)ptr)++;
+- xsum = (xsum & 0xffff) + (xsum >> 16);
+- xsum = (xsum & 0xffff) + (xsum >> 16);
+- return (xsum & 0xffff);
++ ulong xsum;
++ ushort *p = (ushort *)ptr;
++
++ xsum = 0;
++ while (len-- > 0)
++ xsum += *p++;
++ xsum = (xsum & 0xffff) + (xsum >> 16);
++ xsum = (xsum & 0xffff) + (xsum >> 16);
++ return (xsum & 0xffff);
++
+ }
+
+ int
+diff -uNr u-boot-1.1.2/net/tftp.c new-uboot-1.1.2/net/tftp.c
+--- u-boot-1.1.2/net/tftp.c 2004-04-16 00:48:55.000000000 +0300
++++ new-uboot-1.1.2/net/tftp.c 2005-12-16 18:39:27.000000000 +0200
+@@ -58,7 +58,7 @@
+ static char *tftp_filename;
+
+ #ifdef CFG_DIRECT_FLASH_TFTP
+-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++extern flash_info_t flash_info[];
+ #endif
+
+ static __inline__ void
+@@ -78,7 +78,7 @@
+ }
+
+ if (rc) { /* Flash is destination for this packet */
+- rc = flash_write ((uchar *)src, (ulong)(load_addr+offset), len);
++ rc = flash_write ((char *)src, (ulong)(load_addr+offset), len);
+ if (rc) {
+ flash_perror (rc);
+ NetState = NETLOOP_FAIL;
+@@ -106,6 +106,7 @@
+ volatile uchar * pkt;
+ volatile uchar * xp;
+ int len = 0;
++ volatile ushort *s;
+
+ /*
+ * We will always be sending some sort of packet, so
+@@ -117,7 +118,9 @@
+
+ case STATE_RRQ:
+ xp = pkt;
+- *((ushort *)pkt)++ = htons(TFTP_RRQ);
++ s = (ushort *)pkt;
++ *s++ = htons(TFTP_RRQ);
++ pkt = (uchar *)s;
+ strcpy ((char *)pkt, tftp_filename);
+ pkt += strlen(tftp_filename) + 1;
+ strcpy ((char *)pkt, "octet");
+@@ -135,15 +138,19 @@
+ case STATE_DATA:
+ case STATE_OACK:
+ xp = pkt;
+- *((ushort *)pkt)++ = htons(TFTP_ACK);
+- *((ushort *)pkt)++ = htons(TftpBlock);
++ s = (ushort *)pkt;
++ *s++ = htons(TFTP_ACK);
++ *s++ = htons(TftpBlock);
++ pkt = (uchar *)s;
+ len = pkt - xp;
+ break;
+
+ case STATE_TOO_LARGE:
+ xp = pkt;
+- *((ushort *)pkt)++ = htons(TFTP_ERROR);
+- *((ushort *)pkt)++ = htons(3);
++ s = (ushort *)pkt;
++ *s++ = htons(TFTP_ERROR);
++ *s++ = htons(3);
++ pkt = (uchar *)s;
+ strcpy ((char *)pkt, "File too large");
+ pkt += 14 /*strlen("File too large")*/ + 1;
+ len = pkt - xp;
+@@ -151,8 +158,10 @@
+
+ case STATE_BAD_MAGIC:
+ xp = pkt;
+- *((ushort *)pkt)++ = htons(TFTP_ERROR);
+- *((ushort *)pkt)++ = htons(2);
++ s = (ushort *)pkt;
++ *s++ = htons(TFTP_ERROR);
++ *s++ = htons(2);
++ pkt = (uchar *)s;
+ strcpy ((char *)pkt, "File has bad magic");
+ pkt += 18 /*strlen("File has bad magic")*/ + 1;
+ len = pkt - xp;
+@@ -167,6 +176,7 @@
+ TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
+ {
+ ushort proto;
++ ushort *s;
+
+ if (dest != TftpOurPort) {
+ return;
+@@ -180,7 +190,9 @@
+ }
+ len -= 2;
+ /* warning: don't use increment (++) in ntohs() macros!! */
+- proto = *((ushort *)pkt)++;
++ s = (ushort *)pkt;
++ proto = *s++;
++ pkt = (uchar *)s;
+ switch (ntohs(proto)) {
+
+ case TFTP_RRQ:
+@@ -301,14 +313,16 @@
+ void
+ TftpStart (void)
+ {
+- if (BootFile[0] == '\0') {
+- IPaddr_t OurIP = ntohl(NetOurIP);
++#ifdef CONFIG_TFTP_PORT
++ char *ep; /* Environment pointer */
++#endif
+
++ if (BootFile[0] == '\0') {
+ sprintf(default_filename, "%02lX%02lX%02lX%02lX.img",
+- OurIP & 0xFF,
+- (OurIP >> 8) & 0xFF,
+- (OurIP >> 16) & 0xFF,
+- (OurIP >> 24) & 0xFF );
++ NetOurIP & 0xFF,
++ (NetOurIP >> 8) & 0xFF,
++ (NetOurIP >> 16) & 0xFF,
++ (NetOurIP >> 24) & 0xFF );
+ tftp_filename = default_filename;
+
+ printf ("*** Warning: no boot file name; using '%s'\n",
+@@ -354,7 +368,16 @@
+ TftpServerPort = WELL_KNOWN_PORT;
+ TftpTimeoutCount = 0;
+ TftpState = STATE_RRQ;
++ /* Use a pseudo-random port unless a specific port is set */
+ TftpOurPort = 1024 + (get_timer(0) % 3072);
++#ifdef CONFIG_TFTP_PORT
++ if ((ep = getenv("tftpdstp")) != NULL) {
++ TftpServerPort = simple_strtol(ep, NULL, 10);
++ }
++ if ((ep = getenv("tftpsrcp")) != NULL) {
++ TftpOurPort= simple_strtol(ep, NULL, 10);
++ }
++#endif
+ TftpBlock = 0;
+
+ /* zero out server ether in case the server ip has changed */
+diff -uNr u-boot-1.1.2/board/emetec405/flash.c new-uboot-1.1.2/board/emetec405/flash.c
+--- u-boot-1.1.2/board/emetec405/flash.c 2007-04-20 00:40:26.000000000 +0300
++++ new-uboot-1.1.2/board/emetec405/flash.c 2007-04-20 00:41:11.000000000 +0300
+@@ -31,6 +31,7 @@
+ */
+ static ulong flash_get_size (vu_long * addr, flash_info_t * info);
+ static void flash_get_offsets (ulong base, flash_info_t * info);
++static int write_word (flash_info_t *info, ulong dest, ulong data);
+
+ /*-----------------------------------------------------------------------
+ */
diff --git a/packages/uboot/u-boot-1.1.6/sarge-uboot.patch b/packages/uboot/u-boot-1.1.6/sarge-uboot.patch
new file mode 100644
index 0000000000..0c0d56f4d1
--- /dev/null
+++ b/packages/uboot/u-boot-1.1.6/sarge-uboot.patch
@@ -0,0 +1,3326 @@
+diff -Nurp ../u-boot-1.1.6/arm_config.mk ./arm_config.mk
+--- ../u-boot-1.1.6/arm_config.mk 2006-11-02 15:15:01.000000000 +0100
++++ ./arm_config.mk 2007-04-23 18:07:47.000000000 +0200
+@@ -21,4 +21,6 @@
+ # MA 02111-1307 USA
+ #
+
++#PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 -msoft-float
++PLATFORM_CPPFLAGS += -march=armv4t -mtune=arm920t
+ PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__
+diff -Nurp ../u-boot-1.1.6/board/sarge/config.mk ./board/sarge/config.mk
+--- ../u-boot-1.1.6/board/sarge/config.mk 1970-01-01 01:00:00.000000000 +0100
++++ ./board/sarge/config.mk 2007-03-21 00:31:33.000000000 +0100
+@@ -0,0 +1 @@
++TEXT_BASE = 0x21F00000
+diff -Nurp ../u-boot-1.1.6/board/sarge/flash.c ./board/sarge/flash.c
+--- ../u-boot-1.1.6/board/sarge/flash.c 1970-01-01 01:00:00.000000000 +0100
++++ ./board/sarge/flash.c 2007-03-09 01:25:41.000000000 +0100
+@@ -0,0 +1,504 @@
++/*
++ * (C) Copyright 2002
++ * Lineo, Inc. <www.lineo.com>
++ * Bernhard Kuhn <bkuhn@lineo.com>
++ *
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Alex Zuepke <azu@sysgo.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++ulong myflush(void);
++
++
++/* Flash Organization Structure */
++typedef struct OrgDef
++{
++ unsigned int sector_number;
++ unsigned int sector_size;
++} OrgDef;
++
++
++/* Flash Organizations */
++OrgDef OrgAT49BV16x4[] =
++{
++ { 8, 8*1024 }, /* 8 * 8 kBytes sectors */
++ { 2, 32*1024 }, /* 2 * 32 kBytes sectors */
++ { 30, 64*1024 }, /* 30 * 64 kBytes sectors */
++};
++
++OrgDef OrgAT49BV16x4A[] =
++{
++ { 8, 8*1024 }, /* 8 * 8 kBytes sectors */
++ { 31, 64*1024 }, /* 31 * 64 kBytes sectors */
++};
++
++OrgDef OrgAT49BV6416[] =
++{
++ { 8, 8*1024 }, /* 8 * 8 kBytes sectors */
++ { 127, 64*1024 }, /* 127 * 64 kBytes sectors */
++};
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++
++/* AT49BV1614A Codes */
++#define FLASH_CODE1 0xAA
++#define FLASH_CODE2 0x55
++#define ID_IN_CODE 0x90
++#define ID_OUT_CODE 0xF0
++
++
++#define CMD_READ_ARRAY 0x00F0
++#define CMD_UNLOCK1 0x00AA
++#define CMD_UNLOCK2 0x0055
++#define CMD_ERASE_SETUP 0x0080
++#define CMD_ERASE_CONFIRM 0x0030
++#define CMD_PROGRAM 0x00A0
++#define CMD_UNLOCK_BYPASS 0x0020
++#define CMD_SECTOR_UNLOCK 0x0070
++
++#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00005555<<1)))
++#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00002AAA<<1)))
++
++#define BIT_ERASE_DONE 0x0080
++#define BIT_RDY_MASK 0x0080
++#define BIT_PROGRAM_ERROR 0x0020
++#define BIT_TIMEOUT 0x80000000 /* our flag */
++
++#define READY 1
++#define ERR 2
++#define TMO 4
++
++/*-----------------------------------------------------------------------
++ */
++void flash_identification (flash_info_t * info)
++{
++ volatile u16 manuf_code, device_code, add_device_code;
++
++ MEM_FLASH_ADDR1 = FLASH_CODE1;
++ MEM_FLASH_ADDR2 = FLASH_CODE2;
++ MEM_FLASH_ADDR1 = ID_IN_CODE;
++
++ manuf_code = *(volatile u16 *) CFG_FLASH_BASE;
++ device_code = *(volatile u16 *) (CFG_FLASH_BASE + 2);
++ add_device_code = *(volatile u16 *) (CFG_FLASH_BASE + (3 << 1));
++
++ MEM_FLASH_ADDR1 = FLASH_CODE1;
++ MEM_FLASH_ADDR2 = FLASH_CODE2;
++ MEM_FLASH_ADDR1 = ID_OUT_CODE;
++
++ /* Vendor type */
++ info->flash_id = ATM_MANUFACT & FLASH_VENDMASK;
++ printf ("Atmel: ");
++
++ if ((device_code & FLASH_TYPEMASK) == (ATM_ID_BV1614 & FLASH_TYPEMASK)) {
++
++ if ((add_device_code & FLASH_TYPEMASK) ==
++ (ATM_ID_BV1614A & FLASH_TYPEMASK)) {
++ info->flash_id |= ATM_ID_BV1614A & FLASH_TYPEMASK;
++ printf ("AT49BV1614A (16Mbit)\n");
++ } else { /* AT49BV1614 Flash */
++ info->flash_id |= ATM_ID_BV1614 & FLASH_TYPEMASK;
++ printf ("AT49BV1614 (16Mbit)\n");
++ }
++
++ } else if ((device_code & FLASH_TYPEMASK) == (ATM_ID_BV6416 & FLASH_TYPEMASK)) {
++ info->flash_id |= ATM_ID_BV6416 & FLASH_TYPEMASK;
++ printf ("AT49BV6416 (64Mbit)\n");
++ }
++}
++
++ushort flash_number_sector(OrgDef *pOrgDef, unsigned int nb_blocks)
++{
++ int i, nb_sectors = 0;
++
++ for (i=0; i<nb_blocks; i++){
++ nb_sectors += pOrgDef[i].sector_number;
++ }
++
++ return nb_sectors;
++}
++
++void flash_unlock_sector(flash_info_t * info, unsigned int sector)
++{
++ volatile u16 *addr = (volatile u16 *) (info->start[sector]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ *addr = CMD_SECTOR_UNLOCK;
++}
++
++
++ulong flash_init (void)
++{
++ int i, j, k;
++ unsigned int flash_nb_blocks, sector;
++ unsigned int start_address;
++ OrgDef *pOrgDef;
++
++ ulong size = 0;
++
++ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
++ ulong flashbase = 0;
++
++ flash_identification (&flash_info[i]);
++
++ if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==
++ (ATM_ID_BV1614 & FLASH_TYPEMASK)) {
++
++ pOrgDef = OrgAT49BV16x4;
++ flash_nb_blocks = sizeof (OrgAT49BV16x4) / sizeof (OrgDef);
++ } else if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==
++ (ATM_ID_BV1614A & FLASH_TYPEMASK)){ /* AT49BV1614A Flash */
++
++ pOrgDef = OrgAT49BV16x4A;
++ flash_nb_blocks = sizeof (OrgAT49BV16x4A) / sizeof (OrgDef);
++ } else if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==
++ (ATM_ID_BV6416 & FLASH_TYPEMASK)){ /* AT49BV6416 Flash */
++
++ pOrgDef = OrgAT49BV6416;
++ flash_nb_blocks = sizeof (OrgAT49BV6416) / sizeof (OrgDef);
++ } else {
++ flash_nb_blocks = 0;
++ pOrgDef = OrgAT49BV16x4;
++ }
++
++ flash_info[i].sector_count = flash_number_sector(pOrgDef, flash_nb_blocks);
++ memset (flash_info[i].protect, 0, flash_info[i].sector_count);
++
++ if (i == 0)
++ flashbase = PHYS_FLASH_1;
++ else
++ panic ("configured too many flash banks!\n");
++
++ sector = 0;
++ start_address = flashbase;
++ flash_info[i].size = 0;
++
++ for (j = 0; j < flash_nb_blocks; j++) {
++ for (k = 0; k < pOrgDef[j].sector_number; k++) {
++ flash_info[i].start[sector++] = start_address;
++ start_address += pOrgDef[j].sector_size;
++ flash_info[i].size += pOrgDef[j].sector_size;
++ }
++ }
++
++ size += flash_info[i].size;
++
++ if ((flash_info[i].flash_id & FLASH_TYPEMASK) ==
++ (ATM_ID_BV6416 & FLASH_TYPEMASK)){ /* AT49BV6416 Flash */
++
++ /* Unlock all sectors at reset */
++ for (j=0; j<flash_info[i].sector_count; j++){
++ flash_unlock_sector(&flash_info[i], j);
++ }
++ }
++ }
++
++ /* Protect binary boot image */
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_FLASH_BASE,
++ CFG_FLASH_BASE + CFG_BOOT_SIZE - 1, &flash_info[0]);
++
++ /* Protect environment variables */
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_ENV_ADDR,
++ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
++
++ /* Protect U-Boot gzipped image */
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_U_BOOT_BASE,
++ CFG_U_BOOT_BASE + CFG_U_BOOT_SIZE - 1, &flash_info[0]);
++
++ return size;
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t * info)
++{
++ int i;
++
++ switch (info->flash_id & FLASH_VENDMASK) {
++ case (ATM_MANUFACT & FLASH_VENDMASK):
++ printf ("Atmel: ");
++ break;
++ default:
++ printf ("Unknown Vendor ");
++ break;
++ }
++
++ switch (info->flash_id & FLASH_TYPEMASK) {
++ case (ATM_ID_BV1614 & FLASH_TYPEMASK):
++ printf ("AT49BV1614 (16Mbit)\n");
++ break;
++ case (ATM_ID_BV1614A & FLASH_TYPEMASK):
++ printf ("AT49BV1614A (16Mbit)\n");
++ break;
++ case (ATM_ID_BV6416 & FLASH_TYPEMASK):
++ printf ("AT49BV6416 (64Mbit)\n");
++ break;
++ default:
++ printf ("Unknown Chip Type\n");
++ return;
++ }
++
++ printf (" Size: %ld MB in %d Sectors\n",
++ info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i = 0; i < info->sector_count; i++) {
++ if ((i % 5) == 0) {
++ printf ("\n ");
++ }
++ printf (" %08lX%s", info->start[i],
++ info->protect[i] ? " (RO)" : " ");
++ }
++ printf ("\n");
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t * info, int s_first, int s_last)
++{
++ ulong result;
++ int iflag, cflag, prot, sect;
++ int rc = ERR_OK;
++ int chip1;
++
++ /* first look for protection bits */
++
++ if (info->flash_id == FLASH_UNKNOWN)
++ return ERR_UNKNOWN_FLASH_TYPE;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ return ERR_INVAL;
++ }
++
++ if ((info->flash_id & FLASH_VENDMASK) !=
++ (ATM_MANUFACT & FLASH_VENDMASK)) {
++ return ERR_UNKNOWN_FLASH_VENDOR;
++ }
++
++ prot = 0;
++ for (sect = s_first; sect <= s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++ if (prot)
++ return ERR_PROTECTED;
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
++ printf ("Erasing sector %2d ... ", sect);
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ if (info->protect[sect] == 0) { /* not protected */
++ volatile u16 *addr = (volatile u16 *) (info->start[sect]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ *addr = CMD_ERASE_CONFIRM;
++
++ /* wait until flash is ready */
++ chip1 = 0;
++
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++ chip1 = TMO;
++ break;
++ }
++
++ if (!chip1 && (result & 0xFFFF) & BIT_ERASE_DONE)
++ chip1 = READY;
++
++ } while (!chip1);
++
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++
++ if (chip1 == ERR) {
++ rc = ERR_PROG_ERROR;
++ goto outahere;
++ }
++ if (chip1 == TMO) {
++ rc = ERR_TIMOUT;
++ goto outahere;
++ }
++
++ printf ("ok.\n");
++ } else { /* it was protected */
++ printf ("protected!\n");
++ }
++ }
++
++ if (ctrlc ())
++ printf ("User Interrupt!\n");
++
++outahere:
++ /* allow flash to settle - wait 10 ms */
++ udelay_masked (10000);
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash
++ */
++
++volatile static int write_word (flash_info_t * info, ulong dest,
++ ulong data)
++{
++ volatile u16 *addr = (volatile u16 *) dest;
++ ulong result;
++ int rc = ERR_OK;
++ int cflag, iflag;
++ int chip1;
++
++ /*
++ * Check if Flash is (sufficiently) erased
++ */
++ result = *addr;
++ if ((result & data) != data)
++ return ERR_NOT_ERASED;
++
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_PROGRAM;
++ *addr = data;
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ /* wait until flash is ready */
++ chip1 = 0;
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ chip1 = ERR | TMO;
++ break;
++ }
++ if (!chip1 && ((result & 0x80) == (data & 0x80)))
++ chip1 = READY;
++
++ } while (!chip1);
++
++ *addr = CMD_READ_ARRAY;
++
++ if (chip1 == ERR || *addr != data)
++ rc = ERR_PROG_ERROR;
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash.
++ */
++
++int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
++{
++ ulong wp, data;
++ int rc;
++
++ if (addr & 1) {
++ printf ("unaligned destination not supported\n");
++ return ERR_ALIGN;
++ };
++
++ if ((int) src & 1) {
++ printf ("unaligned source not supported\n");
++ return ERR_ALIGN;
++ };
++
++ wp = addr;
++
++ while (cnt >= 2) {
++ data = *((volatile u16 *) src);
++ if ((rc = write_word (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 2;
++ wp += 2;
++ cnt -= 2;
++ }
++
++ if (cnt == 1) {
++ data = (*((volatile u8 *) src)) | (*((volatile u8 *) (wp + 1)) <<
++ 8);
++ if ((rc = write_word (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 1;
++ wp += 1;
++ cnt -= 1;
++ };
++
++ return ERR_OK;
++}
+diff -Nurp ../u-boot-1.1.6/board/sarge/Makefile ./board/sarge/Makefile
+--- ../u-boot-1.1.6/board/sarge/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ ./board/sarge/Makefile 2007-03-14 01:05:48.000000000 +0100
+@@ -0,0 +1,46 @@
++#
++# (C) Copyright 2007
++# Grzegorz Rajtar, mcgregor@blackmesaeast.com.pl.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS := sarge_board.o at45.o flash.o
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++-include .depend
++
++#########################################################################
+diff -Nurp ../u-boot-1.1.6/board/sarge/sarge_board.c ./board/sarge/sarge_board.c
+--- ../u-boot-1.1.6/board/sarge/sarge_board.c 1970-01-01 01:00:00.000000000 +0100
++++ ./board/sarge/sarge_board.c 2007-05-11 23:45:25.000000000 +0200
+@@ -0,0 +1,363 @@
++/*
++ * (C) Copyright 2007
++ * Grzegorz Rajtar <mcgregor@blackmesaeast.com.pl>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/AT91RM9200.h>
++#include <at91rm9200_net.h>
++#include <dm9161.h>
++#include <rtl8201bl.h>
++#include <ste100p.h>
++#include <miiphy.h>
++/* ------------------------------------------------------------------------- */
++/*
++ * Miscelaneous platform dependent initialisations
++ */
++
++void lowlevel_init(void)
++{
++}
++/* ------------------------------------------------------------------------- */
++
++void cs_init(int enable)
++{
++ unsigned long flag =
++ AT91C_PIO_PA0 | AT91C_PIO_PA1 | AT91C_PIO_PA2 |
++ AT91C_PIO_PA4 | AT91C_PIO_PA5 | AT91C_PIO_PA6;
++ //MISO, MOSI, SPCK, NPCS1, NPCS2, NPCS3;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++}
++
++void mac_init(int enable)
++{
++ unsigned long flag =
++ // ETXCK, ETXEN, ETX0, ETX1, EXRS,
++ // ERX0, ERX1, ERXER, EMDC, EMDIO
++ AT91C_PIO_PA7 | AT91C_PIO_PA8 | AT91C_PIO_PA9 | AT91C_PIO_PA10 |
++ AT91C_PIO_PA11 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | AT91C_PIO_PA14 |
++ AT91C_PIO_PA13 | AT91C_PIO_PA16;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++
++ //ERXCK, ECOL, ERXDV, ERX3, ERX2, ETXER, ETX3, ETX2
++ flag = AT91C_PIO_PB19 | AT91C_PIO_PB18 | AT91C_PIO_PB17 | AT91C_PIO_PB16 |
++ AT91C_PIO_PB15 | AT91C_PIO_PB14 | AT91C_PIO_PB13 | AT91C_PIO_PB12;
++
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_BSR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ // EMDINT -
++ flag = AT91C_PIO_PB1;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_IER = flag;
++ }
++ else
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_IDR = flag;
++ }
++}
++
++void peripheral_init(int enable)
++{
++ unsigned long flag =
++ // A - TXD0, RXD0, SCK0, RXD2, TXD2, I2C_SCL. I2C_SDA
++ AT91C_PIO_PA17 | AT91C_PIO_PA18 | AT91C_PIO_PA19 |
++ AT91C_PIO_PA20 | AT91C_PIO_PA21 | AT91C_PIO_PA22 |
++ AT91C_PIO_PA23 | AT91C_PA25_TWD | AT91C_PA26_TWCK;
++
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++
++ //B - PCK1
++ flag = AT91C_PIO_PA24;
++
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_BSR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++
++
++ // PA20, PA21 - I/O
++ flag = AT91C_PIO_PA20 | AT91C_PIO_PA21;
++ if (enable)
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++
++ // A - PCK0, RXD1, TXD1,RF1,RK1, RD1, TD1, TK1, TF1
++ flag = AT91C_PIO_PB27 | AT91C_PIO_PB21 | AT91C_PIO_PB20 |
++ AT91C_PIO_PB11 | AT91C_PIO_PB10 | AT91C_PIO_PB9 |
++ AT91C_PIO_PB8 | AT91C_PIO_PB7 | AT91C_PIO_PB6;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ // I/O PB26 - PB22
++ flag = AT91C_PIO_PB22 | AT91C_PIO_PB23 | AT91C_PIO_PB24 |
++ AT91C_PIO_PB25 | AT91C_PIO_PB26;
++ if (enable)
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++}
++
++void mmc_init(int enable)
++{
++ // MCCK, MCCDA, MCDA0
++ unsigned long flag =
++ AT91C_PIO_PA27 | AT91C_PIO_PA28 | AT91C_PIO_PA29;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_PER = flag;
++ // MCDA3, MCDA2, MCDA1
++ flag = AT91C_PIO_PB5 | AT91C_PIO_PB4 | AT91C_PIO_PB3;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_BSR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ //MCWP, MCCD
++ flag = AT91C_PIO_PB2 | AT91C_PIO_PB0;
++
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_IER = AT91C_PIO_PB0;
++ }
++ else
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_IDR = AT91C_PIO_PB0;
++ }
++}
++
++void irq_init(int enable)
++{
++ // IRQ, FIQ
++ unsigned long flag =
++ AT91C_PIO_PB29 | AT91C_PIO_PB28;
++ if (enable)
++ {
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PDR = flag;
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_ASR = flag;
++ }
++ else
++ ((AT91PS_PIO) AT91C_BASE_PIOB)->PIO_PER = flag;
++}
++
++int board_init (void)
++{
++ DECLARE_GLOBAL_DATA_PTR;
++ long flag;
++
++ /* Enable Ctrlc */
++ console_init_f ();
++
++ /* sarge board specific */
++ /*
++ cs_init(1);
++ mac_init(1);
++ peripheral_init(1);
++ mmc_init(1);
++ irq_init(1);
++ */
++
++ /* PIOB and PIOA clock enabling */
++
++ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOA;
++ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOB;
++
++
++ //miiphy_init();
++ /* memory and cpu-speed are setup before relocation */
++ /* so we do _nothing_ here */
++
++ /* Correct IRDA resistor problem */
++ /* Set PA23_TXD in Output */
++ ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER = AT91C_PA23_TXD2;
++
++ /* arch number of AT91RM9200-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ DECLARE_GLOBAL_DATA_PTR;
++
++ gd->bd->bi_dram[0].start = PHYS_SDRAM;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
++ return 0;
++}
++
++
++int sarge_before_linux(void)
++{
++ DECLARE_GLOBAL_DATA_PTR;
++ AT91PS_EMAC mac = AT91C_BASE_EMAC;
++ char* isolate_str = getenv("phy_isolate");
++ if (strlen(isolate_str) && strcmp(isolate_str, "yes") == 0)
++ {
++ printf("\nisolating PHY\n");
++ eth_init(gd->bd);
++ ste100p_DisableInterrupts(mac);
++ ste100p_Isolate(mac);
++ }
++}
++
++#ifdef CONFIG_DRIVER_ETHER
++#if (CONFIG_COMMANDS & CFG_CMD_NET)
++
++/*
++ * Name:
++ * at91rm9200_GetPhyInterface
++ * Description:
++ * Initialise the interface functions to the PHY
++ * Arguments:
++ * None
++ * Return value:
++ * None
++ */
++void at91rm9200_GetPhyInterface(AT91PS_PhyOps p_phyops)
++{
++#ifdef DM9161_ETH
++ p_phyops->Init = dm9161_InitPhy;
++ p_phyops->IsPhyConnected = dm9161_IsPhyConnected;
++ p_phyops->GetLinkSpeed = dm9161_GetLinkSpeed;
++ p_phyops->AutoNegotiate = dm9161_AutoNegotiate;
++#endif
++
++#ifdef RTL8201BL_ETH
++ p_phyops->Init = rtl8201bl_InitPhy;
++ p_phyops->IsPhyConnected = rtl8201bl_IsPhyConnected;
++ p_phyops->GetLinkSpeed = rtl8201bl_GetLinkSpeed;
++ p_phyops->AutoNegotiate = rtl8201bl_AutoNegotiate;
++
++#endif
++#ifdef STE100P_ETH
++ p_phyops->Init = ste100p_InitPhy;
++ p_phyops->IsPhyConnected = ste100p_IsPhyConnected;
++ p_phyops->GetLinkSpeed = ste100p_GetLinkSpeed;
++ p_phyops->AutoNegotiate = ste100p_AutoNegotiate;
++ p_phyops->Isolate = ste100p_Isolate;
++
++#endif
++
++}
++
++#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
++#endif /* CONFIG_DRIVER_ETHER */
++
++/*
++ * Disk On Chip (NAND) Millenium initialization.
++ * The NAND lives in the CS2* space
++ */
++#if (CONFIG_COMMANDS & CFG_CMD_NAND)
++extern ulong nand_probe (ulong physadr);
++
++#define AT91_SMARTMEDIA_BASE 0x40000000 /* physical address to access memory on NCS3 */
++void nand_init (void)
++{
++ /* Setup Smart Media, fitst enable the address range of CS3 */
++ *AT91C_EBI_CSA |= AT91C_EBI_CS3A_SMC_SmartMedia;
++ /* set the bus interface characteristics based on
++ tDS Data Set up Time 30 - ns
++ tDH Data Hold Time 20 - ns
++ tALS ALE Set up Time 20 - ns
++ 16ns at 60 MHz ~= 3 */
++/*memory mapping structures */
++#define SM_ID_RWH (5 << 28)
++#define SM_RWH (1 << 28)
++#define SM_RWS (0 << 24)
++#define SM_TDF (1 << 8)
++#define SM_NWS (3)
++ AT91C_BASE_SMC2->SMC2_CSR[3] = (SM_RWH | SM_RWS |
++ AT91C_SMC2_ACSS_STANDARD | AT91C_SMC2_DBW_8 |
++ SM_TDF | AT91C_SMC2_WSEN | SM_NWS);
++
++ /* enable the SMOE line PC0=SMCE, A21=CLE, A22=ALE */
++ *AT91C_PIOC_ASR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE |
++ AT91C_PC3_BFBAA_SMWE;
++ *AT91C_PIOC_PDR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE |
++ AT91C_PC3_BFBAA_SMWE;
++
++ /* Configure PC2 as input (signal READY of the SmartMedia) */
++ *AT91C_PIOC_PER = AT91C_PC2_BFAVD; /* enable direct output enable */
++ *AT91C_PIOC_ODR = AT91C_PC2_BFAVD; /* disable output */
++
++ /* Configure PB1 as input (signal Card Detect of the SmartMedia) */
++ *AT91C_PIOB_PER = AT91C_PIO_PB1; /* enable direct output enable */
++ *AT91C_PIOB_ODR = AT91C_PIO_PB1; /* disable output */
++
++ /* PIOB and PIOC clock enabling */
++ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOB;
++ *AT91C_PMC_PCER = 1 << AT91C_ID_PIOC;
++
++ if (*AT91C_PIOB_PDSR & AT91C_PIO_PB1)
++ printf (" No SmartMedia card inserted\n");
++#ifdef DEBUG
++ printf (" SmartMedia card inserted\n");
++
++ printf ("Probing at 0x%.8x\n", AT91_SMARTMEDIA_BASE);
++#endif
++ printf ("%4lu MB\n", nand_probe(AT91_SMARTMEDIA_BASE) >> 20);
++}
++#endif
+diff -Nurp ../u-boot-1.1.6/board/sarge/u-boot.lds ./board/sarge/u-boot.lds
+--- ../u-boot-1.1.6/board/sarge/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
++++ ./board/sarge/u-boot.lds 2007-03-09 01:25:41.000000000 +0100
+@@ -0,0 +1,57 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+diff -Nurp ../u-boot-1.1.6/common/cmd_bootm.c ./common/cmd_bootm.c
+--- ../u-boot-1.1.6/common/cmd_bootm.c 2006-11-02 15:15:01.000000000 +0100
++++ ./common/cmd_bootm.c 2007-03-27 02:55:11.000000000 +0200
+@@ -79,7 +79,10 @@ DECLARE_GLOBAL_DATA_PTR;
+ # define CHUNKSZ (64 * 1024)
+ #endif
+
+-int gunzip (void *, int, unsigned char *, unsigned long *);
++
++//int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp);
++int gunzip(unsigned char *inbuf, unsigned long *insize, unsigned char *outbuf, unsigned long *outsize);
++
+
+ static void *zalloc(void *, unsigned, unsigned);
+ static void zfree(void *, void *, unsigned);
+@@ -94,6 +97,12 @@ extern flash_info_t flash_info[]; /* inf
+ static int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+ #endif
+
++
++#ifdef CONFIG_HAS_DATAFLASH
++extern int AT91F_DataflashInit(void);
++#endif
++
++
+ static void print_type (image_header_t *hdr);
+
+ #ifdef __I386__
+@@ -176,8 +185,9 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+
+ /* Copy header so we can blank CRC field for re-calculation */
+ #ifdef CONFIG_HAS_DATAFLASH
++ AT91F_DataflashInit();
+ if (addr_dataflash(addr)){
+- read_dataflash(addr, sizeof(image_header_t), (char *)&header);
++ read_dataflash(addr, sizeof(image_header_t), (char *)&header);
+ } else
+ #endif
+ memmove (&header, (char *)addr, sizeof(image_header_t));
+@@ -194,7 +204,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+ } else
+ #endif /* __I386__ */
+ {
+- puts ("Bad Magic Number\n");
++ printf ("Bad Magic Number, got 0x%x, should be: 0x%x\n", hdr->ih_magic, IH_MAGIC);
+ SHOW_BOOT_PROGRESS (-1);
+ return 1;
+ }
+@@ -216,9 +226,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+
+ #ifdef CONFIG_HAS_DATAFLASH
+ if (addr_dataflash(addr)){
+- len = ntohl(hdr->ih_size) + sizeof(image_header_t);
+- read_dataflash(addr, len, (char *)CFG_LOAD_ADDR);
+- addr = CFG_LOAD_ADDR;
++ len = ntohl(hdr->ih_size) + sizeof(image_header_t);
++ char* env_loadaddr = getenv("loadaddr");
++ unsigned long load_addr = CFG_LOAD_ADDR;
++ if (env_loadaddr)
++ load_addr = simple_strtoul(env_loadaddr, NULL, 16);
++ read_dataflash(addr, len, (char *)load_addr);
++ addr = load_addr;
++
+ }
+ #endif
+
+@@ -227,6 +242,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+ print_image_hdr ((image_header_t *)addr);
+
+ data = addr + sizeof(image_header_t);
++
+ len = ntohl(hdr->ih_size);
+
+ if (verify) {
+@@ -343,12 +359,24 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+ break;
+ case IH_COMP_GZIP:
+ printf (" Uncompressing %s ... ", name);
+- if (gunzip ((void *)ntohl(hdr->ih_load), unc_len,
+- (uchar *)data, &len) != 0) {
+- puts ("GUNZIP ERROR - must RESET board to recover\n");
++ int res;
++ if ((res = gunzip ((uchar *)data, &len, (void *)ntohl(hdr->ih_load), &unc_len
++ )) != 0) {
++ printf ("GUNZIP ERROR (code %d)- must RESET board to recover\n", res);
+ SHOW_BOOT_PROGRESS (-6);
++
+ do_reset (cmdtp, flag, argc, argv);
+ }
++ //addr = ntohl(hdr->ih_load);
++ //old gunzip switched parameters list
++
++/* if ((res = gunzip ((void *)ntohl(hdr->ih_load), unc_len,
++ (uchar *)data, &len)) != 0) {
++ printf ("GUNZIP ERROR (code %d)- must RESET board to recover\n", res);
++ SHOW_BOOT_PROGRESS (-6);
++ do_reset (cmdtp, flag, argc, argv);
++ } */
++
+ break;
+ #ifdef CONFIG_BZIP2
+ case IH_COMP_BZIP2:
+@@ -413,7 +441,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag
+ default: /* handled by (original) Linux case */
+ case IH_OS_LINUX:
+ #ifdef CONFIG_SILENT_CONSOLE
+- fixup_silent_linux();
++// fixup_silent_linux();
+ #endif
+ do_bootm_linux (cmdtp, flag, argc, argv,
+ addr, len_ptr, verify);
+@@ -1429,12 +1457,13 @@ static void zfree(void *x, void *addr, u
+
+ #define DEFLATED 8
+
++/*
+ int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp)
+ {
+ z_stream s;
+ int r, i, flags;
+
+- /* skip header */
++ // skip header
+ i = 10;
+ flags = src[3];
+ if (src[2] != DEFLATED || (flags & RESERVED) != 0) {
+@@ -1462,9 +1491,10 @@ int gunzip(void *dst, int dstlen, unsign
+ s.outcb = (cb_func)WATCHDOG_RESET;
+ #else
+ s.outcb = Z_NULL;
+-#endif /* CONFIG_HW_WATCHDOG */
+-
++#endif // CONFIG_HW_WATCHDOG //
++
+ r = inflateInit2(&s, -MAX_WBITS);
++ // gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp)
+ if (r != Z_OK) {
+ printf ("Error: inflateInit2() returned %d\n", r);
+ return (-1);
+@@ -1480,9 +1510,8 @@ int gunzip(void *dst, int dstlen, unsign
+ }
+ *lenp = s.next_out - (unsigned char *) dst;
+ inflateEnd(&s);
+-
+ return (0);
+-}
++}*/
+
+ #ifdef CONFIG_BZIP2
+ void bz_internal_error(int errcode)
+diff -Nurp ../u-boot-1.1.6/cpu/arm920t/at91rm9200/Makefile ./cpu/arm920t/at91rm9200/Makefile
+--- ../u-boot-1.1.6/cpu/arm920t/at91rm9200/Makefile 2006-11-02 15:15:01.000000000 +0100
++++ ./cpu/arm920t/at91rm9200/Makefile 2007-05-13 20:19:07.000000000 +0200
+@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
+ LIB = $(obj)lib$(SOC).a
+
+ COBJS = bcm5221.o dm9161.o ether.o i2c.o interrupts.o \
+- lxt972.o serial.o usb_ohci.o
++ lxt972.o serial.o usb_ohci.o ste100p.o
+ SOBJS = lowlevel_init.o
+
+ SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+diff -Nurp ../u-boot-1.1.6/cpu/arm920t/at91rm9200/ste100p.c ./cpu/arm920t/at91rm9200/ste100p.c
+--- ../u-boot-1.1.6/cpu/arm920t/at91rm9200/ste100p.c 1970-01-01 01:00:00.000000000 +0100
++++ ./cpu/arm920t/at91rm9200/ste100p.c 2007-05-10 02:02:34.000000000 +0200
+@@ -0,0 +1,517 @@
++/*
++ * (C) Copyright 2007
++ * Author : Grzegorz Rajtar (McGregor) (mcgregor@blackmesaeast.com.pl)
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <at91rm9200_net.h>
++#include <net.h>
++#include <ste100p.h>
++
++#ifdef CONFIG_DRIVER_ETHER
++
++#if (CONFIG_COMMANDS & CFG_CMD_NET)
++
++void PhyReset(AT91PS_EMAC p_mac)
++{
++ static long init_wait = 0;
++ unsigned short IntValue;
++ unsigned Status;
++
++#ifdef DEBUG_ETHER
++ printf("ste100p PhyReset \n");
++#endif
++ at91rm9200_EmacEnableMDIO (p_mac);
++
++
++ // first software reset the STE100P
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++ udelay(1000);
++ IntValue |= STE100P_XCR_RESET;
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &IntValue);
++ udelay(10000);
++
++ while (1)
++ {
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++ if ((IntValue & STE100P_XCR_RESET) != STE100P_XCR_RESET)
++ break;
++ udelay(1000);
++ }
++
++
++ IntValue = STE100P_ANA_FC | STE100P_ANA_TXF | STE100P_ANA_TXH |
++ STE100P_ANA_10F | STE100P_ANA_10H;
++
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_ANA_REG, &IntValue);
++
++ //default configuration
++#ifdef CONFIG_STE100P_OVERRIDE_HARDWARE
++ IntValue = STE100P_100CTR_ENDCR | STE100P_100CTR_ENRZI | STE100P_100CTR_EN4B5B;
++ IntValue &= ~(STE100P_100CTR_DISRER);
++ IntValue &= ~(STE100P_100CTR_ISOTX);
++ IntValue &= ~(STE100P_100CTR_DISMLT);
++ IntValue &= ~(STE100P_100CTR_DISCRM);
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_100CTR_REG, &IntValue);
++
++#endif //CONFIG_STE100P_OVERRIDE_HARDWARE
++
++ /* Disable PHY Interrupts */
++
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(10000);
++ /* disable all interrypts from SE100P */
++
++ IntValue &= ~(STE100P_XIE_ANCE | STE100P_XIE_RFE | STE100P_XIE_LDE |
++ STE100P_XIE_ANAE | STE100P_XIE_PDFE | STE100P_XIE_ANPE | STE100P_XIE_REFE);
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(10000);
++
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++
++ IntValue |= STE100P_XCR_AN | STE100P_XCR_RSTRT_AN;
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &IntValue);
++
++ at91rm9200_EmacDisableMDIO (p_mac);
++}
++
++/*
++ * Name:
++ * ste100p_Isolate
++ * Description:
++ * Isolates PHY
++ * Arguments:
++ * p_mac - pointer to AT91S_EMAC struct
++ * Return value:
++ * TRUE - if id isolated successfuly
++ * FALSE- if error
++ */
++
++unsigned int ste100p_Isolate (AT91PS_EMAC p_mac)
++{
++ unsigned int result = FALSE;
++ unsigned short IntValue;
++
++ at91rm9200_EmacEnableMDIO (p_mac);
++ udelay(10000);
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++
++ IntValue |= STE100P_XCR_ISOLATE ;//| STE100P_XCR_PWRDN;
++ //IntValue &= ~STE100P_XCR_RESET;
++ //IntValue &= ~STE100P_XCR_AN;
++
++ result = at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &IntValue);
++ udelay(10000);
++ //Isolate is latch so we need to read once more the register
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++ at91rm9200_EmacDisableMDIO (p_mac);
++
++#ifdef DEBUG_ETHER
++ printf("ste100p_Isolate [%d]\n", result);
++#endif
++ return result;
++}
++
++
++/*
++ * Name:
++ * ste100p_IsPhyConnected
++ * Description:
++ * Reads the 2 PHY ID registers
++ * Arguments:
++ * p_mac - pointer to AT91S_EMAC struct
++ * Return value:
++ * TRUE - if id read successfully
++ * FALSE- if error
++ */
++unsigned int ste100p_IsPhyConnected (AT91PS_EMAC p_mac)
++{
++ unsigned short Id1, Id2;
++ unsigned int result = FALSE;
++
++ at91rm9200_EmacEnableMDIO (p_mac);
++ udelay(10000);
++ do
++ {
++ Id1 = Id2 = 0;
++ udelay(10000);
++ at91rm9200_EmacReadPhy (p_mac, STE100P_PID1_REG, &Id1);
++
++ udelay(10000);
++ at91rm9200_EmacReadPhy (p_mac, STE100P_PID2_REG, &Id2);
++
++ Id2 = (Id2 & STE100P_PID2_PHYID_MASK) >> 6;
++
++ if ((Id1 == STE100P_PID1_PHYID_VAL) && (Id2 == STE100P_PID2_PHYID_VAL))
++ result = TRUE;
++ } while (!result);
++
++ at91rm9200_EmacDisableMDIO (p_mac);
++#ifdef DEBUG_ETHER
++ printf ("ste100p id1[0x%02x] id2[0x%02x]\r\n", Id1, Id2);
++#endif
++ return result;
++}
++
++/*
++ * Name:
++ * ste100p_GetLinkSpeed
++ * Description:
++ * Link parallel detection status of MAC is checked and set in the
++ * MAC configuration registers
++ * Arguments:
++ * p_mac - pointer to MAC
++ * Return value:
++ * TRUE - if link status set succesfully
++ * FALSE - if link status not set
++ */
++UCHAR ste100p_GetLinkSpeed (AT91PS_EMAC p_mac)
++{
++ unsigned short stat;
++ int result = 0;
++
++ result = at91rm9200_EmacReadPhy (p_mac, STE100P_XSR_REG, &stat);
++
++ if (!result)
++ return FALSE;
++
++ if (!(stat & STE100P_XSR_LINK)) /* link status up? */
++ { //last link failure is latched so reread STE100P_XSR_REG for new value
++ result = at91rm9200_EmacReadPhy (p_mac, STE100P_XSR_REG, &stat);
++ if (!result || !(stat & STE100P_XSR_LINK))
++ return FALSE;
++ }
++
++ if (stat & STE100P_XSR_100TX_FULL) {
++ /*set Emac for 100BaseTX and Full Duplex */
++ p_mac->EMAC_CFG |= AT91C_EMAC_SPD | AT91C_EMAC_FD;
++ return TRUE;
++ }
++
++ if (stat & STE100P_XSR_100TX) {
++ /*set Emac for 100BaseTX and Half Duplex */
++ p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
++ ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
++ | AT91C_EMAC_SPD;
++ return TRUE;
++ }
++
++ if (stat & STE100P_XSR_10T_FULL) {
++ /*set MII for 10BaseT and Full Duplex */
++ p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
++ ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
++ | AT91C_EMAC_FD;
++ return TRUE;
++ }
++
++ if (stat & STE100P_XSR_10T) {
++ /*set MII for 10BaseT and Half Duplex */
++ p_mac->EMAC_CFG &= ~(AT91C_EMAC_SPD | AT91C_EMAC_FD);
++ return TRUE;
++ }
++
++ return FALSE;
++}
++
++
++/*
++ * Name:
++ * ste100p_Deisolate
++ * Description:
++ * deisolates PHY
++ * Arguments:
++ * p_mac - pointer to struct AT91S_EMAC
++ */
++
++void ste100p_Deisolate (AT91PS_EMAC p_mac)
++{
++ unsigned short IntValue;
++
++ IntValue = STE100P_XCR_SPEED | STE100P_XCR_AN |
++ STE100P_XCR_COLLEN;
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &IntValue);
++
++ udelay(10000);
++ IntValue = STE100P_100CTR_EN4B5B | STE100P_100CTR_ENRZI |
++ STE100P_100CTR_ENDCR;
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_100CTR_REG, &IntValue);
++ udelay(10000);
++
++
++ if ((IntValue & STE100P_XCR_ISOLATE) == STE100P_XCR_ISOLATE)
++ {
++ IntValue &= ~STE100P_XCR_ISOLATE;
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &IntValue);
++ udelay(10000);
++ //isolate is latch so read once more the register
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &IntValue);
++ udelay(10000);
++ }
++}
++
++/*
++ * Name:
++ * ste100p_WaitForLink
++ * Description:
++ * waits for link with timeout
++ * Arguments:
++ * p_mac - pointer to struct AT91S_EMAC
++ * timeout - timeout in miliseconds
++ */
++
++UCHAR ste100p_WaitForLink (AT91PS_EMAC p_mac, unsigned long timeout)
++{
++ unsigned long loop ;
++ unsigned short IntValue;
++
++ loop = 0;
++ do
++ {
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XSR_REG, &IntValue);
++ if (IntValue & STE100P_XSR_LINK)
++ return TRUE;
++
++ udelay(1000);
++ loop++;
++ if (loop > timeout)
++ break;
++
++ } while (1);
++
++ return FALSE;
++}
++
++/*
++ * Name:
++ * ste100p_InitPhy
++ * Description:
++ * MAC starts checking its link by using parallel detection and
++ * Autonegotiation and the same is set in the MAC configuration registers
++ * Arguments:
++ * p_mac - pointer to struct AT91S_EMAC
++ * Return value:
++ * TRUE - if link status set succesfully
++ * FALSE - if link status not set
++ */
++UCHAR ste100p_InitPhy (AT91PS_EMAC p_mac)
++{
++ UCHAR ret = FALSE;
++ unsigned short IntValue;
++ int aneg_status;
++ unsigned long loop;
++
++ PhyReset(p_mac);
++
++ at91rm9200_EmacEnableMDIO (p_mac);
++
++ ste100p_Deisolate(p_mac);
++
++ at91rm9200_EmacDisableMDIO (p_mac);
++
++
++
++#if 1
++ at91rm9200_EmacEnableMDIO (p_mac);
++
++ ste100p_WaitForLink(p_mac, 10000 /* timeout in ms */);
++
++ ret = ste100p_GetLinkSpeed (p_mac);
++
++ if (!ret)
++ {
++ ste100p_AutoNegotiate(p_mac, aneg_status);
++#ifdef DEBUG_ETHER
++ if (aneg_status)
++ {
++ printf("link speed autonegotiated\n");
++ ret = ste100p_GetLinkSpeed (p_mac);
++ }
++ else
++ printf("auto-neogtiation failed\n");
++#endif //DEBUG_ETHER
++ }
++
++ /* Disable PHY Interrupts */
++
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(1000);
++ /* disable all interrypts from SE100P */
++
++ IntValue &= ~(STE100P_XIE_ANCE | STE100P_XIE_RFE | STE100P_XIE_LDE |
++ STE100P_XIE_ANAE | STE100P_XIE_PDFE | STE100P_XIE_ANPE | STE100P_XIE_REFE);
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(10000);
++
++
++
++ at91rm9200_EmacDisableMDIO (p_mac);
++ udelay(1000);
++#endif
++
++#ifdef DEBUG_ETHER
++ printf("ste100p InitPhy [");
++ if (ret)
++ printf("OK]\n");
++ else
++ printf("FAILED]\n");
++#endif //DEBUG_ETHER
++ return (ret);
++}
++
++
++/*
++ * Name:
++ * ste100p_AutoNegotiate
++ * Description:
++ * MAC Autonegotiates with the partner status of same is set in the
++ * MAC configuration registers
++ * Arguments:
++ * dev - pointer to struct net_device
++ * Return value:
++ * TRUE - if link status set successfully
++ * FALSE - if link status not set
++ */
++UCHAR ste100p_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
++{
++ unsigned short value;
++ unsigned short PhyAnar;
++ unsigned short PhyAnalpar;
++#ifdef DEBUG_ETHER
++ printf("ste100p AutoNegotiate\n");
++#endif //DEBUG_ETHER
++#if 1
++ /* Set ste100p control register */
++ if (!at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++ value &= ~STE100P_XCR_AN; /* remove autonegotiation enable */
++ value |= STE100P_XCR_ISOLATE; /* Electrically isolate PHY */
++ if (!at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++ if (!at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++
++ /* Set the Auto_negotiation Advertisement Register */
++ /* MII advertising for Next page, 100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3 */
++ PhyAnar = STE100P_ANA_NXTPG | STE100P_ANA_TXF | STE100P_ANA_TXH |
++ STE100P_ANA_10F | STE100P_ANA_10H | STE100P_ANA_SF;
++ if (!at91rm9200_EmacWritePhy (p_mac, STE100P_ANA_REG, &PhyAnar))
++ return FALSE;
++
++ /* Read the Control Register */
++ if (!at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++ value |= STE100P_XCR_SPEED | STE100P_XCR_AN | STE100P_XCR_FULL_DUP;
++ if (!at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++ /* Restart Auto_negotiation */
++ value |= STE100P_XCR_AN;
++ value &= ~STE100P_XCR_ISOLATE;
++ value |= STE100P_XCR_RSTRT_AN;
++
++ if (!at91rm9200_EmacWritePhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++ udelay(10000);
++ if (!at91rm9200_EmacReadPhy (p_mac, STE100P_XCR_REG, &value))
++ return FALSE;
++
++ /*check AutoNegotiate complete */
++ udelay (10000);
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XSR_REG, &value);
++ if (!(value & STE100P_XSR_AN_COMPLETE))
++ return FALSE;
++
++ /* Get the AutoNeg Link partner base page */
++ if (!at91rm9200_EmacReadPhy (p_mac, STE100P_ANLP_REG, &PhyAnalpar))
++ return FALSE;
++
++ if ((PhyAnar & STE100P_ANA_TXF) && (PhyAnalpar & STE100P_ANLP_LPTXF)) {
++ /*set MII for 100BaseTX and Full Duplex */
++ p_mac->EMAC_CFG |= AT91C_EMAC_SPD | AT91C_EMAC_FD;
++ return TRUE;
++ }
++
++ if ((PhyAnar & STE100P_ANA_10F) && (PhyAnalpar & STE100P_ANLP_LPTXH)) {
++ /*set MII for 10BaseT and Full Duplex */
++ p_mac->EMAC_CFG = (p_mac->EMAC_CFG &
++ ~(AT91C_EMAC_SPD | AT91C_EMAC_FD))
++ | AT91C_EMAC_FD;
++ return TRUE;
++ }
++#endif
++ return FALSE;
++}
++
++/*
++ * Name:
++ * ste100p_DisableInterrupts
++ * Description:
++ * disables interrupts
++ * Arguments:
++ * p_mac - pointer to AT91S_EMAC struct
++ */
++void ste100p_DisableInterrupts (AT91PS_EMAC p_mac)
++{
++
++ unsigned short IntValue;
++ unsigned int rep;
++
++ rep = 0;
++
++ at91rm9200_EmacEnableMDIO (p_mac);
++
++ /* Disable PHY Interrupts */
++
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(10000);
++ /* disable all interrypts from SE100P */
++
++ IntValue &= ~(STE100P_XIE_ANCE | STE100P_XIE_RFE | STE100P_XIE_LDE |
++ STE100P_XIE_ANAE | STE100P_XIE_PDFE | STE100P_XIE_ANPE | STE100P_XIE_REFE);
++
++ at91rm9200_EmacWritePhy (p_mac, STE100P_XIE_REG, &IntValue);
++ udelay(10000);
++
++ IntValue = 1;
++
++ do
++ {
++ at91rm9200_EmacReadPhy (p_mac, STE100P_XCSIIS_REG, &IntValue);
++ rep++;
++ } while (IntValue != 0 && rep < 100);
++
++ at91rm9200_EmacDisableMDIO (p_mac);
++}
++
++
++#endif /* CONFIG_COMMANDS & CFG_CMD_NET */
++
++#endif /* CONFIG_DRIVER_ETHER */
+diff -Nurp ../u-boot-1.1.6/drivers/dataflash.c ./drivers/dataflash.c
+--- ../u-boot-1.1.6/drivers/dataflash.c 2006-11-02 15:15:01.000000000 +0100
++++ ./drivers/dataflash.c 2007-03-19 23:43:20.000000000 +0100
+@@ -46,8 +46,8 @@ extern int AT91F_DataFlashRead (AT91PS_D
+ unsigned long size, char *buffer);
+ extern int AT91F_DataFlashWrite( AT91PS_DataFlash pDataFlash,
+ unsigned char *src,
+- int dest,
+- int size );
++ unsigned long dest,
++ unsigned long size );
+
+ int AT91F_DataflashInit (void)
+ {
+@@ -68,6 +68,8 @@ int AT91F_DataflashInit (void)
+ dataflash_info[i].Device.pages_size = 528;
+ dataflash_info[i].Device.page_offset = 10;
+ dataflash_info[i].Device.byte_mask = 0x300;
++ dataflash_info[i].Device.total_size =
++ dataflash_info[i].Device.pages_size * dataflash_info[i].Device.pages_number;
+ dataflash_info[i].Device.cs = cs[i][1];
+ dataflash_info[i].Desc.DataFlash_state = IDLE;
+ dataflash_info[i].logical_address = cs[i][0];
+@@ -79,6 +81,8 @@ int AT91F_DataflashInit (void)
+ dataflash_info[i].Device.pages_size = 528;
+ dataflash_info[i].Device.page_offset = 10;
+ dataflash_info[i].Device.byte_mask = 0x300;
++ dataflash_info[i].Device.total_size =
++ dataflash_info[i].Device.pages_size * dataflash_info[i].Device.pages_number;
+ dataflash_info[i].Device.cs = cs[i][1];
+ dataflash_info[i].Desc.DataFlash_state = IDLE;
+ dataflash_info[i].logical_address = cs[i][0];
+@@ -90,6 +94,8 @@ int AT91F_DataflashInit (void)
+ dataflash_info[i].Device.pages_size = 1056;
+ dataflash_info[i].Device.page_offset = 11;
+ dataflash_info[i].Device.byte_mask = 0x700;
++ dataflash_info[i].Device.total_size =
++ dataflash_info[i].Device.pages_size * dataflash_info[i].Device.pages_number;
+ dataflash_info[i].Device.cs = cs[i][1];
+ dataflash_info[i].Desc.DataFlash_state = IDLE;
+ dataflash_info[i].logical_address = cs[i][0];
+@@ -100,6 +106,8 @@ int AT91F_DataflashInit (void)
+ dataflash_info[i].Device.pages_size = 1056;
+ dataflash_info[i].Device.page_offset = 11;
+ dataflash_info[i].Device.byte_mask = 0x700;
++ dataflash_info[i].Device.total_size =
++ dataflash_info[i].Device.pages_size * dataflash_info[i].Device.pages_number;
+ dataflash_info[i].Device.cs = cs[i][1];
+ dataflash_info[i].Desc.DataFlash_state = IDLE;
+ dataflash_info[i].logical_address = cs[i][0];
+@@ -220,11 +228,13 @@ int addr_dataflash (unsigned long addr)
+ int size_dataflash (AT91PS_DataFlash pdataFlash, unsigned long addr, unsigned long size)
+ {
+ /* is outside the dataflash */
+- if (((int)addr & 0x0FFFFFFF) > (pdataFlash->pDevice->pages_size *
+- pdataFlash->pDevice->pages_number)) return 0;
++
++ if (((unsigned long)addr & 0x0FFFFFFF) > pdataFlash->pDevice->total_size)
++ return 0;
+ /* is too large for the dataflash */
+- if (size > ((pdataFlash->pDevice->pages_size *
+- pdataFlash->pDevice->pages_number) - ((int)addr & 0x0FFFFFFF))) return 0;
++
++ if (size > ( pdataFlash->pDevice->total_size - ((unsigned long)addr & 0x0FFFFFFF)))
++ return 0;
+
+ return 1;
+ }
+diff -Nurp ../u-boot-1.1.6/include/asm-arm/arch-at91rm9200/AT91RM9200.h ./include/asm-arm/arch-at91rm9200/AT91RM9200.h
+--- ../u-boot-1.1.6/include/asm-arm/arch-at91rm9200/AT91RM9200.h 2006-11-02 15:15:01.000000000 +0100
++++ ./include/asm-arm/arch-at91rm9200/AT91RM9200.h 2007-03-11 16:21:22.000000000 +0100
+@@ -625,14 +625,40 @@ typedef struct _AT91S_PDC
+ #define AT91C_PA26_TWCK ((unsigned int) 1 << 26)
+ #define AT91C_PA31_DTXD ((unsigned int) AT91C_PIO_PA31) /* DBGU Debug Transmit Data */
+ #define AT91C_PIO_PA17 ((unsigned int) 1 << 17) /* Pin Controlled by PA17 */
++#define AT91C_PIO_PA19 ((unsigned int) 1 << 19) /* Pin Controlled by PA19 */
++#define AT91C_PIO_PA22 ((unsigned int) 1 << 22) /* Pin Controlled by PA22 */
++#define AT91C_PIO_PA23 ((unsigned int) 1 << 23) /* Pin Controlled by PA23 */
++#define AT91C_PIO_PA24 ((unsigned int) 1 << 24) /* Pin Controlled by PA24 */
++#define AT91C_PIO_PA25 ((unsigned int) 1 << 25) /* Pin Controlled by PA26 */
++#define AT91C_PIO_PA27 ((unsigned int) 1 << 27) /* Pin Controlled by PA27 */
++#define AT91C_PIO_PA28 ((unsigned int) 1 << 28) /* Pin Controlled by PA28 */
++#define AT91C_PIO_PA29 ((unsigned int) 1 << 29) /* Pin Controlled by PA29 */
++
+ #define AT91C_PA17_TXD0 AT91C_PIO_PA17 /* USART0 Transmit Data */
+ #define AT91C_PIO_PA18 ((unsigned int) 1 << 18) /* Pin Controlled by PA18 */
+ #define AT91C_PA18_RXD0 AT91C_PIO_PA18 /* USART0 Receive Data */
+ #define AT91C_PIO_PB20 ((unsigned int) 1 << 20) /* Pin Controlled by PB20 */
+ #define AT91C_PB20_RXD1 AT91C_PIO_PB20 /* USART1 Receive Data */
++
++#define AT91C_PIO_PB29 ((unsigned int) 1 << 29) /* Pin Controlled by PB29 */
++#define AT91C_PIO_PB28 ((unsigned int) 1 << 28) /* Pin Controlled by PB28 */
++
+ #define AT91C_PIO_PB21 ((unsigned int) 1 << 21) /* Pin Controlled by PB21 */
+ #define AT91C_PB21_TXD1 AT91C_PIO_PB21 /* USART1 Transmit Data */
+
++
++#define AT91C_PIO_PB0 ((unsigned int) 1 << 0) /* Pin Controlled by PB0 */
++#define AT91C_PIO_PB2 ((unsigned int) 1 << 2) /* Pin Controlled by PB2 */
++#define AT91C_PIO_PB8 ((unsigned int) 1 << 8) /* Pin Controlled by PB8 */
++#define AT91C_PIO_PB9 ((unsigned int) 1 << 9) /* Pin Controlled by PB9 */
++#define AT91C_PIO_PB10 ((unsigned int) 1 << 10) /* Pin Controlled by PB10 */
++#define AT91C_PIO_PB11 ((unsigned int) 1 << 11) /* Pin Controlled by PB11 */
++
++#define AT91C_PIO_PB22 ((unsigned int) 1 << 22) /* Pin Controlled by PB22 */
++#define AT91C_PIO_PB23 ((unsigned int) 1 << 23) /* Pin Controlled by PB23 */
++#define AT91C_PIO_PB24 ((unsigned int) 1 << 24) /* Pin Controlled by PB24 */
++#define AT91C_PIO_PB26 ((unsigned int) 1 << 26) /* Pin Controlled by PB26 */
++
+ #define AT91C_ID_SYS ((unsigned int) 1) /* System Peripheral */
+ #define AT91C_ID_PIOA ((unsigned int) 2) /* PIO port A */
+ #define AT91C_ID_PIOB ((unsigned int) 3) /* PIO port B */
+@@ -671,6 +697,8 @@ typedef struct _AT91S_PDC
+ #define AT91C_PIO_PA6 ((unsigned int) 1 << 6) /* Pin Controlled by PA6 */
+ #define AT91C_PA6_NPCS3 ((unsigned int) AT91C_PIO_PA6) /* SPI Peripheral Chip Select 3 */
+
++#define AT91C_PIO_PA20 ((unsigned int) 1 << 20) /* Pin Controlled by PA20 */
++#define AT91C_PIO_PA21 ((unsigned int) 1 << 21) /* Pin Controlled by PA21 */
+ #define AT91C_PIO_PA16 ((unsigned int) 1 << 16) /* Pin Controlled by PA16 */
+ #define AT91C_PA16_EMDIO ((unsigned int) AT91C_PIO_PA16) /* Ethernet MAC Management Data Input/Output */
+ #define AT91C_PIO_PA15 ((unsigned int) 1 << 15) /* Pin Controlled by PA15 */
+@@ -697,6 +725,7 @@ typedef struct _AT91S_PDC
+ #define AT91C_PIO_PB5 ((unsigned int) 1 << 5) /* Pin Controlled by PB5 */
+ #define AT91C_PIO_PB6 ((unsigned int) 1 << 6) /* Pin Controlled by PB6 */
+ #define AT91C_PIO_PB7 ((unsigned int) 1 << 7) /* Pin Controlled by PB7 */
++#define AT91C_PIO_PB27 ((unsigned int) 1 << 27) /* Pin Controlled by PB27 */
+ #define AT91C_PIO_PB25 ((unsigned int) 1 << 25) /* Pin Controlled by PB25 */
+ #define AT91C_PB25_DSR1 ((unsigned int) AT91C_PIO_PB25) /* USART 1 Data Set ready */
+ #define AT91C_PB25_EF100 ((unsigned int) AT91C_PIO_PB25) /* Ethernet MAC Force 100 Mbits */
+diff -Nurp ../u-boot-1.1.6/include/asm-arm/arch-at91rm9200/mmc.h ./include/asm-arm/arch-at91rm9200/mmc.h
+--- ../u-boot-1.1.6/include/asm-arm/arch-at91rm9200/mmc.h 1970-01-01 01:00:00.000000000 +0100
++++ ./include/asm-arm/arch-at91rm9200/mmc.h 2006-10-13 20:55:04.000000000 +0200
+@@ -0,0 +1,117 @@
++/*
++ * linux/include/linux/mmc/mmc.h
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef MMC_H
++#define MMC_H
++
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/device.h>
++
++struct request;
++struct mmc_data;
++struct mmc_request;
++
++struct mmc_command {
++ u32 opcode;
++ u32 arg;
++ u32 resp[4];
++ unsigned int flags; /* expected response type */
++#define MMC_RSP_PRESENT (1 << 0)
++#define MMC_RSP_136 (1 << 1) /* 136 bit response */
++#define MMC_RSP_CRC (1 << 2) /* expect valid crc */
++#define MMC_RSP_BUSY (1 << 3) /* card may send busy */
++#define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */
++#define MMC_CMD_MASK (3 << 5) /* command type */
++#define MMC_CMD_AC (0 << 5)
++#define MMC_CMD_ADTC (1 << 5)
++#define MMC_CMD_BC (2 << 5)
++#define MMC_CMD_BCR (3 << 5)
++
++/*
++ * These are the response types, and correspond to valid bit
++ * patterns of the above flags. One additional valid pattern
++ * is all zeros, which means we don't expect a response.
++ */
++#define MMC_RSP_NONE (0)
++#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
++#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
++#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
++#define MMC_RSP_R3 (MMC_RSP_PRESENT)
++#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC)
++
++#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
++
++/*
++ * These are the command types.
++ */
++#define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK)
++
++ unsigned int retries; /* max number of retries */
++ unsigned int error; /* command error */
++
++#define MMC_ERR_NONE 0
++#define MMC_ERR_TIMEOUT 1
++#define MMC_ERR_BADCRC 2
++#define MMC_ERR_FIFO 3
++#define MMC_ERR_FAILED 4
++#define MMC_ERR_INVALID 5
++
++ struct mmc_data *data; /* data segment associated with cmd */
++ struct mmc_request *mrq; /* associated request */
++};
++
++struct mmc_data {
++ unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */
++ unsigned int timeout_clks; /* data timeout (in clocks) */
++ unsigned int blksz_bits; /* data block size */
++ unsigned int blksz; /* data block size */
++ unsigned int blocks; /* number of blocks */
++ unsigned int error; /* data error */
++ unsigned int flags;
++
++#define MMC_DATA_WRITE (1 << 8)
++#define MMC_DATA_READ (1 << 9)
++#define MMC_DATA_STREAM (1 << 10)
++#define MMC_DATA_MULTI (1 << 11)
++
++ unsigned int bytes_xfered;
++
++ struct mmc_command *stop; /* stop command */
++ struct mmc_request *mrq; /* associated request */
++
++ unsigned int sg_len; /* size of scatter list */
++ struct scatterlist *sg; /* I/O scatter list */
++};
++
++struct mmc_request {
++ struct mmc_command *cmd;
++ struct mmc_data *data;
++ struct mmc_command *stop;
++
++ void *done_data; /* completion data */
++ void (*done)(struct mmc_request *);/* completion function */
++};
++
++struct mmc_host;
++struct mmc_card;
++
++extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
++extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
++extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int,
++ struct mmc_command *, int);
++
++extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
++
++static inline void mmc_claim_host(struct mmc_host *host)
++{
++ __mmc_claim_host(host, (struct mmc_card *)-1);
++}
++
++extern void mmc_release_host(struct mmc_host *host);
++
++#endif
+diff -Nurp ../u-boot-1.1.6/include/at91rm9200_net.h ./include/at91rm9200_net.h
+--- ../u-boot-1.1.6/include/at91rm9200_net.h 2006-11-02 15:15:01.000000000 +0100
++++ ./include/at91rm9200_net.h 2007-05-04 22:14:56.000000000 +0200
+@@ -38,6 +38,7 @@ typedef struct _AT91S_PhyOps
+ unsigned int (*IsPhyConnected)(AT91S_EMAC *pmac);
+ unsigned char (*GetLinkSpeed)(AT91S_EMAC *pmac);
+ unsigned char (*AutoNegotiate)(AT91S_EMAC *pmac, int *);
++ unsigned int (*Isolate)(AT91S_EMAC *pmac);
+
+ } AT91S_PhyOps,*AT91PS_PhyOps;
+
+diff -Nurp ../u-boot-1.1.6/include/configs/sarge.h ./include/configs/sarge.h
+--- ../u-boot-1.1.6/include/configs/sarge.h 1970-01-01 01:00:00.000000000 +0100
++++ ./include/configs/sarge.h 2007-05-10 00:02:56.000000000 +0200
+@@ -0,0 +1,281 @@
++/*
++ * Grzegorz Rajtar <mcgregor@blackmesaeast.com.pl>
++ *
++ * Configuation settings for the Sarge (AT91RM9200DK like) board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++
++//#define DEBUG
++
++#define CFG_SARGE_STACK_SIZE (32 * 1024)
++
++/* ARM asynchronous clock */
++#define AT91C_MAIN_CLOCK 179712000 /* from 18.432 MHz crystal (18432000 / 4 * 39) */
++#define AT91C_MASTER_CLOCK 59904000 /* peripheral clock (AT91C_MASTER_CLOCK / 3) */
++/* #define AT91C_MASTER_CLOCK 44928000 */ /* peripheral clock (AT91C_MASTER_CLOCK / 4) */
++#define CFG_AT91C_BRGR_DIVISOR 33
++
++#define AT91_SLOW_CLOCK 32768 /* slow clock */
++
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_AT91RM9200 1 /* It's an Atmel AT91RM9200 SoC */
++#define CONFIG_AT91RM9200_SARGE 1
++
++#define CONFIG_USE_IRQ 1 /* we don't need IRQ/FIQ stuff */
++//#undef CONFIG_USE_IRQ
++#define USE_920T_MMU 1
++//#undef USE_920T_MMU
++#define MMU_DEBUG 1
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CFG_USE_MAIN_OSCILLATOR 1
++
++
++#ifndef CONFIG_SKIP_LOWLEVEL_INIT
++#define CFG_USE_MAIN_OSCILLATOR 1
++/* flash */
++#define MC_PUIA_VAL 0x00000000
++#define MC_PUP_VAL 0x00000000
++#define MC_PUER_VAL 0x00000000
++#define MC_ASR_VAL 0x00000000
++#define MC_AASR_VAL 0x00000000
++#define EBI_CFGR_VAL 0x00000000
++#define SMC2_CSR_VAL 0x00003284 /* 16bit, 2 TDF, 4 WS */
++
++/* clocks */
++#define PLLAR_VAL 0x20263E04 /* 179.712000 MHz for PCK */
++#define PLLBR_VAL 0x10483E0E /* 48.054857 MHz (divider by 2 for USB) */
++#define MCKR_VAL 0x00000202 /* PCK/3 = MCK Master Clock = 59.904000MHz from PLLA */
++
++/* sdram */
++#define PIOC_ASR_VAL 0xFFFF0000 /* Configure PIOC as peripheral (D16/D31) */
++#define PIOC_BSR_VAL 0x00000000
++#define PIOC_PDR_VAL 0xFFFF0000
++#define EBI_CSA_VAL 0x00000002 /* CS1=SDRAM */
++//#define SDRC_CR_VAL 0x2188c155 /* set up the SDRAM */
++#define SDRC_CR_VAL 0x2188A155 /* set up the SDRAM */
++#define SDRAM 0x20000000 /* address of the SDRAM */
++#define SDRAM1 0x20000080 /* address of the SDRAM */
++#define SDRAM_VAL 0x00000000 /* value written to SDRAM */
++#define SDRC_MR_VAL 0x00000002 /* Precharge All */
++#define SDRC_MR_VAL1 0x00000004 /* refresh */
++#define SDRC_MR_VAL2 0x00000003 /* Load Mode Register */
++#define SDRC_MR_VAL3 0x00000000 /* Normal Mode */
++#define SDRC_TR_VAL 0x000002E0 /* Write refresh rate */
++#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + (128 << 10))
++//#define CFG_MALLOC_LEN ((4 << 20))
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++#define CONFIG_BAUDRATE 115200
++//#define CFG_CONSOLE_INFO_QUIET 0
++#undef CFG_CONSOLE_INFO_QUIET
++
++/*
++ * Hardware drivers
++ */
++
++/* define one of these to choose the DBGU, USART0 or USART1 as console */
++#define CONFIG_DBGU
++#undef CONFIG_USART0
++#undef CONFIG_USART1
++
++#undef CONFIG_HWFLOW /* don't include RTS/CTS flow control support */
++
++#undef CONFIG_MODEM_SUPPORT /* disable modem initialization stuff */
++
++#define CONFIG_BOOTDELAY 3
++/* #define CONFIG_ENV_OVERWRITE 1 */
++
++#define CONFIG_MII 1
++#define CONFIG_HARD_I2C
++#define CFG_I2C_SPEED 100000
++#define CFG_I2C_SLAVE 0xFE
++//#define CONFIG_TERSE_MII 1
++#define CONFIG_DOS_PARTITION 1
++#define CONFIG_USB_OHCI 1
++#define CONFIG_COMMANDS \
++ ((CONFIG_CMD_DFL | CFG_CMD_MII | CFG_CMD_NET | \
++ CFG_CMD_MISC | \
++ CFG_CMD_SDRAM | \
++ CFG_CMD_PING | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_BOOTP | \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_I2C | \
++ CFG_CMD_EEPROM | \
++ CFG_CMD_USB | \
++ CFG_CMD_BDI) & \
++ ~(CFG_CMD_IMI | \
++ CFG_CMD_AUTOSCRIPT | \
++ CFG_CMD_LOADS ))
++
++#define CFG_I2C_EEPROM_ADDR_LEN 1
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++//#define CFG_MAX_NAND_DEVICE 1 /* Max number of NAND devices */
++//#define SECTORSIZE 512
++
++//#define ADDR_COLUMN 1
++//#define ADDR_PAGE 2
++//#define ADDR_COLUMN_PAGE 3
++
++//#define NAND_ChipID_UNKNOWN 0x00
++//#define NAND_MAX_FLOORS 1
++//#define NAND_MAX_CHIPS 1
++
++//#define AT91_SMART_MEDIA_ALE (1 << 22) /* our ALE is AD22 */
++//#define AT91_SMART_MEDIA_CLE (1 << 21) /* our CLE is AD21 */
++
++//#define NAND_DISABLE_CE(nand) do { *AT91C_PIOC_SODR = AT91C_PIO_PC0;} while(0)
++//#define NAND_ENABLE_CE(nand) do { *AT91C_PIOC_CODR = AT91C_PIO_PC0;} while(0)
++
++//#define NAND_WAIT_READY(nand) while (!(*AT91C_PIOC_PDSR & AT91C_PIO_PC2))
++
++//#define WRITE_NAND_COMMAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_CLE) = (__u8)(d); } while(0)
++//#define WRITE_NAND_ADDRESS(d, adr) do{ *(volatile __u8 *)((unsigned long)adr | AT91_SMART_MEDIA_ALE) = (__u8)(d); } while(0)
++//#define WRITE_NAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)d; } while(0)
++//#define READ_NAND(adr) ((volatile unsigned char)(*(volatile __u8 *)(unsigned long)adr))
++/* the following are NOP's in our implementation */
++//#define NAND_CTL_CLRALE(nandptr)
++//#define NAND_CTL_SETALE(nandptr)
++//#define NAND_CTL_CLRCLE(nandptr)
++//#define NAND_CTL_SETCLE(nandptr)
++
++
++#define CONFIG_NR_DRAM_BANKS 1
++#define PHYS_SDRAM 0x20000000
++#define PHYS_SDRAM_SIZE 0x2000000 /* 32 megs */
++
++#define CFG_MEMTEST_START PHYS_SDRAM
++#define CFG_MEMTEST_END CFG_MEMTEST_START + PHYS_SDRAM_SIZE - 262144
++
++#define CONFIG_DRIVER_ETHER 1
++#define CONFIG_NET_RETRY_COUNT 20
++#define STE100P_ETH 1
++//#define CONFIG_STE100P_OVERRIDE_HARDWARE 1
++
++#define CONFIG_HAS_DATAFLASH 1
++#define CFG_SPI_WRITE_TOUT (10 * CFG_HZ)
++#define CFG_MAX_DATAFLASH_BANKS 2
++#define CFG_MAX_DATAFLASH_PAGES 16384
++#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* Logical adress for CS0 */
++#define CFG_DATAFLASH_LOGIC_ADDR_CS3 0xD0000000 /* Logical adress for CS3 */
++
++#define PHYS_FLASH_1 0x10000000
++#define PHYS_FLASH_SIZE 0x200000 /* 2 megs main flash */
++#define CFG_FLASH_BASE PHYS_FLASH_1
++#define CFG_MAX_FLASH_BANKS 1
++#define CFG_MAX_FLASH_SECT 256
++#define CFG_FLASH_ERASE_TOUT (10 * CFG_HZ) /* Timeout for Flash Erase */
++#define CFG_FLASH_WRITE_TOUT (10 * CFG_HZ) /* Timeout for Flash Write */
++
++
++#define CFG_ENV_IS_IN_DATAFLASH
++
++#ifdef CFG_ENV_IS_IN_DATAFLASH
++#define CFG_ENV_OFFSET 0x200000
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x2000 /* 0x2000 */
++#else
++#define CFG_ENV_IS_IN_FLASH 1
++#ifdef CONFIG_SKIP_LOWLEVEL_INIT
++#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x60000) /* after u-boot.bin */
++#define CFG_ENV_SIZE 0x10000 /* sectors are 64K here */
++#else
++#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0xe000) /* between boot.bin and u-boot.bin.gz */
++#define CFG_ENV_SIZE 0x2000 /* 0x8000 */
++#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
++#endif /* CFG_ENV_IS_IN_DATAFLASH */
++
++#define CFG_LOAD_ADDR 0x21000000
++
++#ifdef CONFIG_SKIP_LOWLEVEL_INIT
++#define CFG_BOOT_SIZE 0x00 /* 0 KBytes */
++#define CFG_U_BOOT_BASE PHYS_FLASH_1
++#define CFG_U_BOOT_SIZE 0x60000 /* 384 KBytes */
++#else
++#define CFG_BOOT_SIZE 0x6000 /* 24 KBytes */
++#define CFG_U_BOOT_BASE (PHYS_FLASH_1 + 0x10000)
++#define CFG_U_BOOT_SIZE 0x10000 /* 128 KBytes */
++#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
++
++#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
++
++#define CFG_PROMPT "U-Boot> " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++
++#ifndef __ASSEMBLY__
++/*-----------------------------------------------------------------------
++ * Board specific extension for bd_info
++ *
++ * This structure is embedded in the global bd_info (bd_t) structure
++ * and can be used by the board specific code (eg board/...)
++ */
++
++struct bd_info_ext {
++ /* helper variable for board environment handling
++ *
++ * env_crc_valid == 0 => uninitialised
++ * env_crc_valid > 0 => environment crc in flash is valid
++ * env_crc_valid < 0 => environment crc in flash is invalid
++ */
++ int env_crc_valid;
++};
++#endif
++
++#define CFG_HZ 1000
++#define CFG_HZ_CLOCK AT91C_MASTER_CLOCK/2 /* AT91C_TC0_CMR is implicitly set to */
++#define CONFIG_STACKSIZE (32 * 1024) /* regular stack */
++
++ /* AT91C_TC_TIMER_DIV1_CLOCK */
++#ifdef CONFIG_USE_IRQ
++//#error CONFIG_USE_IRQ not supported
++ #define CONFIG_STACKSIZE_IRQ (4*1024)
++ #define CONFIG_STACKSIZE_FIQ (4*1024)
++#endif
++
++#define CONFIG_BOOTARGS "mem=32M rootfstype=ext2 root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=5 init=/sbin/init"
++#define CONFIG_ETHADDR 00:01:20:38:00:5b
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_IPADDR 192.168.0.212
++#define CONFIG_SERVERIP 192.168.0.200
++#define CONFIG_BOOTCOMMAND " bootm 0xC0040000"
++#define CONFIG_BOOTFILE "sarge_at91.img"
++#define CONFIG_ROOTPATH "/tftp/at91/rootfs"
++#define CONFIG_LOADADDR 0x21000000
++#define CONFIG_NFSARGS "mem=32M console=ttyS0,115200n8 root=/dev/nfs nfsroot=192.168.0.200:/tftp/at91/rootfs,timeo=200,retrans=500 ip=:::::eth0:on"
++#endif
+diff -Nurp ../u-boot-1.1.6/include/dataflash.h ./include/dataflash.h
+--- ../u-boot-1.1.6/include/dataflash.h 2006-11-02 15:15:01.000000000 +0100
++++ ./include/dataflash.h 2007-03-19 23:29:49.000000000 +0100
+@@ -79,6 +79,7 @@ typedef struct _AT91S_Dataflash {
+ int page_offset; /* page offset in command */
+ int byte_mask; /* byte mask in command */
+ int cs;
++ unsigned long total_size;
+ dataflash_protect_t area_list[NB_DATAFLASH_AREA]; /* area protection status */
+ } AT91S_DataflashFeatures, *AT91PS_DataflashFeatures;
+
+@@ -107,7 +108,7 @@ typedef struct _AT91S_DATAFLASH_INFO {
+ #define AT45DB642 0x3c
+ #define AT45DB128 0x10
+
+-#define AT91C_DATAFLASH_TIMEOUT 10000 /* For AT91F_DataFlashWaitReady */
++#define AT91C_DATAFLASH_TIMEOUT 800000 /* For AT91F_DataFlashWaitReady */
+
+ /* DataFlash return value */
+ #define DATAFLASH_BUSY 0x00
+diff -Nurp ../u-boot-1.1.6/include/_exports.h ./include/_exports.h
+--- ../u-boot-1.1.6/include/_exports.h 2006-11-02 15:15:01.000000000 +0100
++++ ./include/_exports.h 2007-03-15 23:41:08.000000000 +0100
+@@ -18,4 +18,4 @@ EXPORT_FUNC(simple_strtoul)
+ #if (CONFIG_COMMANDS & CFG_CMD_I2C)
+ EXPORT_FUNC(i2c_write)
+ EXPORT_FUNC(i2c_read)
+-#endif /* CFG_CMD_I2C */
++#endif /* CFG_CMD_I2C */
+\ Brak znaku nowej linii na końcu pliku
+diff -Nurp ../u-boot-1.1.6/include/gunzip.h ./include/gunzip.h
+--- ../u-boot-1.1.6/include/gunzip.h 1970-01-01 01:00:00.000000000 +0100
++++ ./include/gunzip.h 2007-03-21 23:23:36.000000000 +0100
+@@ -0,0 +1,73 @@
++#ifndef _GUNZIP_H
++#define _GUNZIP_H
++
++/* unzip code taken from bios-lt project */
++/* http://sourceforge.net/projects/bios-lt */
++/* maintainer Liu Tao */
++
++#define ERR_BADMAGIC 1
++#define ERR_BADMETHOD 2
++#define ERR_ENCRYPTED 3
++#define ERR_MULTIPART 4
++#define ERR_INVALIDFLAGS 5
++#define ERR_BADFORMAT1 6
++#define ERR_BADFORMAT2 7
++#define ERR_MEM 8
++#define ERR_BADFORMAT 9
++#define ERR_CRC 10
++#define ERR_LENGTH 11
++
++#define PACK_MAGIC "\037\036" /* Magic header for packed files */
++#define GZIP_MAGIC "\037\213" /* Magic header for gzip files, 1F 8B */
++#define OLD_GZIP_MAGIC "\037\236" /* Magic header for gzip 0.5 = freeze 1.x */
++#define LZH_MAGIC "\037\240" /* Magic header for SCO LZH Compress files*/
++#define PKZIP_MAGIC "\120\113\003\004" /* Magic header for pkzip files */
++
++/* gzip flag byte */
++#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
++#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
++#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
++#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
++#define COMMENT 0x10 /* bit 4 set: file comment present */
++#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
++#define RESERVED 0xC0 /* bit 6,7: reserved */
++
++/* If B_MAX needs to be larger than 16, then h and x[] should be ulong. */
++#define B_MAX 16 /* maximum bit length of any code (16 for explode) */
++#define N_MAX 288 /* maximum number of codes in any set */
++
++
++#define NULL 0
++
++#define __TYPES_DEFINED
++#ifndef TYPES_DEFINED
++typedef unsigned char uchar;
++typedef unsigned short ushort;
++typedef unsigned long ulong;
++typedef ushort huft_code;
++typedef uchar huft_bits;
++#endif
++
++#define get_uchar(guz) (uchar)(guz->inptr < guz->insize ? guz->inbuf[guz->inptr++] : 0)
++#define get_ushort(guz) ((ushort)get_uchar(guz) | (ushort)get_uchar(guz) << 8)
++#define get_ulong(guz) ((ulong)get_uchar(guz)|(ulong)get_uchar(guz)<<8|(ulong)get_uchar(guz)<<16|(ulong)get_uchar(guz) << 24)
++#define output_char(guz, ch) (guz)->outbuf[(guz)->outptr++] = ch
++
++typedef struct {
++ uchar *inbuf;
++ ulong insize;
++ ulong inptr;
++
++ uchar *outbuf;
++ ulong outsize;
++ ulong outptr;
++
++ ulong bitbuf;
++ ulong bufbits;
++
++} gunzip_t;
++
++int gunzip(unsigned char *inbuf, unsigned long *insize,
++ unsigned char *outbuf, unsigned long *outsize);
++
++#endif /* _GUNZIP_H */
+diff -Nurp ../u-boot-1.1.6/include/ste100p.h ./include/ste100p.h
+--- ../u-boot-1.1.6/include/ste100p.h 1970-01-01 01:00:00.000000000 +0100
++++ ./include/ste100p.h 2007-05-05 01:38:11.000000000 +0200
+@@ -0,0 +1,163 @@
++#ifndef _ste100p_h_
++#define _ste100p_h_
++
++
++// UTILS
++#define Bit(n) (1<<(n))
++
++
++// STE100P register offsets.
++
++#define STE100P_XCR_REG 0x00
++#define STE100P_XSR_REG 0x01
++#define STE100P_PID1_REG 0x02
++#define STE100P_PID2_REG 0x03
++#define STE100P_ANA_REG 0x04
++#define STE100P_ANLP_REG 0x05
++#define STE100P_ANE_REG 0x06
++#define STE100P_XCSIIS_REG 0x11
++#define STE100P_XIE_REG 0x12
++#define STE100P_100CTR_REG 0x13
++#define STE100P_XMC_REG 0x14
++
++
++// STE100P XCR - Control register bit defines.
++#define STE100P_XCR_RESET 0x8000 //(RW)
++#define STE100P_XCR_LOOPBACK 0x4000 //(RW)
++#define STE100P_XCR_SPEED 0x2000 // 1=100Meg, 0=10Meg (RW)
++#define STE100P_XCR_AN 0x1000 // 1=Enable auto negotiation, 0=disable it (RW)
++#define STE100P_XCR_PWRDN 0x0800 // 1=Enable power down (RW)
++#define STE100P_XCR_ISOLATE 0x0400 // 1=Isolate PHY from MII (RW)
++#define STE100P_XCR_RSTRT_AN 0x0200 // 1=Restart Auto Negotioation process (RW)
++#define STE100P_XCR_FULL_DUP 0x0100 // 1=Enable full duplex mode, 0=half dup (RW)
++#define STE100P_XCR_COLLEN 0x0080 // 1=Collision test control (RW)
++
++// STE100P XSR - Control status bit defines.
++
++#define STE100P_XSR_100T4 Bit(15) // (RO)
++#define STE100P_XSR_100TX_FULL Bit(14) // (RO)
++#define STE100P_XSR_100TX Bit(13) // (RO)
++#define STE100P_XSR_10T_FULL Bit(12) // (RO)
++#define STE100P_XSR_10T Bit(11) // (RO)
++#define STE100P_XSR_MFPS Bit(6) //MF preamble suppression (RO)
++#define STE100P_XSR_AN_COMPLETE Bit(5)
++#define STE100P_XSR_RF Bit(4) //RF result of remote fault detection (RO/LH)
++#define STE100P_XSR_AN Bit(3) //AN - auto-negotation ability, always 1 for STE100P (RO)
++#define STE100P_XSR_LINK Bit(2) // Link status (RO/LL)
++#define STE100P_XSR_JABBER Bit(1) // Jabber condition is detected (10Base-T only) (RO/LH)
++#define STE100P_XSR_EXT Bit(0) // Extended register support, always 1 for STE100P (RO)
++
++
++// STE100P PHY identification bit defines.
++
++#define STE100P_PID1_PHYID_VAL 0x1C04 // (RO)
++
++#define STE100P_PID2_PHYID_MASK 0xFC00 // (RO)
++#define STE100P_PID2_PHYID_VAL 0x0
++#define STE100P_PID2_MODEL_MASK 0x01F0 // (RO)
++#define STE100P_PID2_MODEL_VAL 0x1
++#define STE100P_PID2_REV_MASK 0x000F // (RO)
++#define STE100P_PID2_REV_VAL 0x1
++
++// STE100P auto-negatiation bit defines.
++
++#define STE100P_ANA_NXTPG Bit(15) //Next Page avability, always 0 for STE100P. (RO)
++#define STE100P_ANA_RF Bit(13) // Remote fault function. (RW)
++#define STE100P_ANA_FC Bit(10) // Flow Control function Ability, 1 - supports PAUSE operation of flow control for full-duplex link. (RW)
++#define STE100P_ANA_T4 Bit(9) // 100Base-T4 ability, always 0 for STE100P. (RO)
++#define STE100P_ANA_TXF Bit(8) // 100Base-TX full duplex ability, 1 with 100Base-TX full duplex ability. (RW)
++#define STE100P_ANA_TXH Bit(7) // 100Base-TX half duplex ability, 1 with 100Base-TX half duplex ability. (RW)
++
++#define STE100P_ANA_10F Bit(6) // 10Base-T full duplex ability, 1 with 10Base-T full duplex ability. (RW)
++#define STE100P_ANA_10H Bit(5) // 10Base-T half duplex ability, 1 with 10Base-T half duplex ability. (RW)
++#define STE100P_ANA_SF 0x0000 // select field, default val 0, (RO)
++#define STE100P_ANA_SF_MASK 0x000F // STE100P_ANA_SF mask
++
++// STE100P auto-negatiation link partner ability bit defines.
++
++#define STE100P_ANLP_LPNP Bit(15) // Link partner next page, 1 ON. (RO)
++#define STE100P_ANLP_LPACK Bit(14) // Received link parnter ACK, 1 received. (RO)
++#define STE100P_ANLP_LPRF Bit(13) // Link partner's remote fault status, 1 - remote fault detected. (RO)
++#define STE100P_ANLP_LPFC Bit(10) // Link partner's flow control ability, 1 - link partner with PAUSE function full duplex link ability. (RO)
++#define STE100P_ANLP_LPT4 Bit(9) // Link partner's 100Base-T4 ability, 1 - link parnter with 100Base-T4 ability. (RO)
++#define STE100P_ANLP_LPTXF Bit(8) // Link partner's 100Base-TX full duplex ability, 1 - link parnter with 100Base-TX full duplex ability. (RO)
++#define STE100P_ANLP_LPTXH Bit(7) // Link partner's 100Base-TX half duplex ability, 1 - link parnter with 100Base-TX half duplex ability. (RO)
++#define STE100P_ANLP_LP10F Bit(6) // Link partner's 10Base-T full duplex ability, 1 - link parnter with 10Base-T full duplex ability. (RO)
++#define STE100P_ANLP_LP10H Bit(5) // Link partner's 10Base-T half duplex ability, 1 - link parnter with 10Base-T half duplex ability. (RO)
++#define STE100P_ANLP_LPFS 0x001F // Link partner selct field, default 0x0001 = IEEE 802.3 (RO)
++
++// STE100P auto-negatiation expansion bit defines.
++
++#define STE100P_ANE_PDF Bit(4) // Parallel detection fault, 1 - fault detecrted (RO/LH).
++#define STE100P_ANE_LPNP Bit(3) // Link partner's next page ability, 1 - link partner with next page ability (RO).
++#define STE100P_ANE_NP Bit(2) // STE100P next page ability, always 0 (RO).
++#define STE100P_ANE_PR Bit(1) // Page received, 1 - a new page has been received (RO/LH).
++#define STE100P_ANE_LPAN Bit(0) // Link partner auto-negotiation ability, 1 - LP has auto-negotiation ability (RO)
++
++// STE100P configuration information and interrupt status bit defines
++
++#define STE100P_XCIIS_SPEED Bit(9) // Configured information of SPEED, 0 - 10Mbit/s, 1 - 100Mbit/s. (RO)
++#define STE100P_XCIIS_DUPLEX Bit(8) // Configured information of DUPLEX, 0 - half-duplex, 1 - full-duplex. (RO)
++#define STE100P_XCIIS_PAUSE Bit(7) // Configured information of PAUSE, 0 - pause function disabled, 1 - pause function enabled. (RO)
++#define STE100P_XCIIS_ANC Bit(6) // Interrupt source of auto-negotiation completed, 0 - auto-negotiation is not completed yet. (RO/LH)
++#define STE100P_XCIIS_RFD Bit(5) // Interrupt source of remote fault detected, 0 -fault not detected, 1 - fault detected. (RO/LH)
++#define STE100P_XCIIS_LS Bit(4) // Interrupt source link fail, 0 - link test status is up, 1 - link is down. (RO/LH).
++#define STE100P_XCIIS_ANAR Bit(3) // Interrupt source of auto-negotiation ACK received, 0 - auto-negotiation not received. (RO/LH)
++#define STE100P_XCIIS_PDF Bit(2) // Interrupt source of parallel detection fault, 0 - fault not detected. (RO/LH)
++#define STE100P_XCIIS_ANPR Bit(1) // Interrupt source of auto-negotiation page received, 1 - auto-negotiation page os received (RO/LH)
++#define STE100P_XCIIS_REF Bit(0) // Interrupt source of receive full error, 0 - the receive error number is less than 64, 1 - 64 error packets
++ // are received (RO/LH)
++
++// STE100P interrupt enable register bit defines
++
++#define STE100P_XIE_ANCE Bit(6) // Auto-negtiation completed interrupt enable: 0/1 - disable/enable auto-negotiation completed interrupt. (RW)
++#define STE100P_XIE_RFE Bit(5) // Remote fault detected interrupt enable: 0/1 - disable/enable remote fault detection interrupt. (RW)
++#define STE100P_XIE_LDE Bit(4) // Link down interrupt enable: 0/1 - disable/enable link down detection interrupt. (RW)
++#define STE100P_XIE_ANAE Bit(3) // Auto-negotiation acknowledge interrupt enable: 0/1 - disable/enable link partner acknowledge interrupt. (RW)
++#define STE100P_XIE_PDFE Bit(2) // Parallel detection fault interrupt enable: 0/1 - disable/enable fault parallel detection interrupt. (RW)
++#define STE100P_XIE_ANPE Bit(1) // Auto-negotiation page received interrupt enable: 0/1 - disable/enable auto-negotiation page received interrupt. (RW)
++#define STE100P_XIE_REFE Bit(0) // RX_ERR page full interrupt enable: 0 - disable rx_err full interrupt, 1 - enable more than 64 time rx_err interrupt (RW)
++
++// STE100P 100Base-TX control register bit defines
++
++#define STE100P_100CTR_DISRER Bit(13) // Disable the RX_ERR counter, 0 - receive error counter RX_ERR is enabled, 1 - ... disabled. (RW)
++#define STE100P_100CTR_ANC Bit(12) // Auto-negotiation completed, 0 - auto-negotiation process has not completed yet, 1 - auto-negotiation process has completed. (RO)
++#define STE100P_100CTR_ENRLB Bit(9) // Enable remote loop-back function: 1 - enable, 0 - disable (RW)
++#define STE100P_100CTR_ENDCR Bit(8) // Enable DC restoration: 0 - disable, 1 - enable (RW)
++#define STE100P_100CTR_ENRZI Bit(7) // Enable the conversions between NRZ and NRZI (RW)
++#define STE100P_100CTR_EN4B5B Bit(6) // Enable 4B/5B encoder and decoder, 0 - the 4B/5B encoder and decoder are bypassed, 1 - .. enabled. (RW)
++#define STE100P_100CTR_ISOTX Bit(5) // Transmit isolation: 1 - isolate from MII, 0 - for normal operation. (RW)
++#define STE100P_100CTR_CMODE_MASK 0x001C // Reporting of current operation mode of transceiver: (RO)
++ // 000 - in auto-negotiation
++ // 001 - 10Base-T half duplex
++ // 010 - 100Base-TX half duplex
++ // 011 - reserved
++ // 100 - reserved
++ // 101 - 10Base-T full duplex
++ // 110 - 100Base-TX full duplex
++ // 111 - isolation, auto-negotiation disable
++#define STE100P_100CTR_DISMLT Bit(1) // Disable MLT3, 0 - encoder/decoder enabled, 1 - ... disabled, (RW)
++#define STE100P_100CTR_DISCRM Bit(0) // Disable Scramble, 0 - scrambler/descambler enabled, 1 - scrambler/descambler disabled, (RW)
++
++
++// STE100P mode control register bit defines
++
++#define STE100P_XMC_LD Bit(11) // Long distance mode of 10Base-T: 0 - notmal squelch level, 1 - reduces squelch for extended cable lenght. (RW)
++#define STE100P_XMC_PAD_MASK 0x00F8 // PHY addres 4:0 - 0x0000 after reset causes to isolate the PHY from MII (PR0 - 10 bit is set) (RW).
++#define STE100P_XMC_MFPSE Bit(1) // MF preamble supression enable, 1 - accept management frames with pre-amble supressed. (RW)
++
++
++/* (R0) - register is rea-only.
++ * (RW) - register is rea-write.
++ * (LH) - latching high and cleared by reading.
++ * (LL) - latching low and cleared by reading.
++ */
++
++unsigned int ste100p_IsPhyConnected (AT91PS_EMAC p_mac);
++unsigned int ste100p_Isolate (AT91PS_EMAC p_mac);
++void ste100p_DisableInterrupts (AT91PS_EMAC p_mac);
++UCHAR ste100p_GetLinkSpeed (AT91PS_EMAC p_mac);
++UCHAR ste100p_InitPhy (AT91PS_EMAC p_mac);
++UCHAR ste100p_AutoNegotiate (AT91PS_EMAC p_mac, int *status);
++
++#endif // _ste100p_h_
+diff -Nurp ../u-boot-1.1.6/lib_arm/armlinux.c ./lib_arm/armlinux.c
+--- ../u-boot-1.1.6/lib_arm/armlinux.c 2006-11-02 15:15:01.000000000 +0100
++++ ./lib_arm/armlinux.c 2007-05-05 01:28:02.000000000 +0200
+@@ -62,6 +62,10 @@ static void setup_end_tag (bd_t *bd);
+ static void setup_videolfb_tag (gd_t *gd);
+ # endif
+
++#ifdef CONFIG_AT91RM9200_SARGE
++int sarge_before_linux(void);
++#endif
++
+
+ static struct tag *params;
+ #endif /* CONFIG_SETUP_MEMORY_TAGS || CONFIG_CMDLINE_TAG || CONFIG_INITRD_TAG */
+@@ -89,9 +93,7 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, i
+ #ifdef CONFIG_CMDLINE_TAG
+ char *commandline = getenv ("bootargs");
+ #endif
+-
+ theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);
+-
+ /*
+ * Check if there is an initrd image
+ */
+@@ -224,7 +226,7 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, i
+
+ debug ("## Transferring control to Linux (at address %08lx) ...\n",
+ (ulong) theKernel);
+-
++
+ #if defined (CONFIG_SETUP_MEMORY_TAGS) || \
+ defined (CONFIG_CMDLINE_TAG) || \
+ defined (CONFIG_INITRD_TAG) || \
+@@ -255,6 +257,10 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, i
+ setup_end_tag (bd);
+ #endif
+
++#ifdef CONFIG_AT91RM9200_SARGE
++ sarge_before_linux();
++#endif
++
+ /* we assume that the kernel is in place */
+ printf ("\nStarting kernel ...\n\n");
+
+@@ -267,6 +273,8 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, i
+
+ cleanup_before_linux ();
+
++
++ printf("kernel address is 0x%x\n", theKernel);
+ theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
+ }
+
+@@ -348,7 +356,7 @@ static void setup_initrd_tag (bd_t *bd,
+
+ params->u.initrd.start = initrd_start;
+ params->u.initrd.size = initrd_end - initrd_start;
+-
++
+ params = tag_next (params);
+ }
+ #endif /* CONFIG_INITRD_TAG */
+diff -Nurp ../u-boot-1.1.6/lib_arm/board.c ./lib_arm/board.c
+--- ../u-boot-1.1.6/lib_arm/board.c 2006-11-02 15:15:01.000000000 +0100
++++ ./lib_arm/board.c 2007-05-04 23:21:40.000000000 +0200
+@@ -94,6 +94,8 @@ void mem_malloc_init (ulong dest_addr)
+ mem_malloc_end = dest_addr + CFG_MALLOC_LEN;
+ mem_malloc_brk = mem_malloc_start;
+
++ //printf("mem_malloc_start = %x, mem_malloc_end = %x\n",
++ // mem_malloc_start, mem_malloc_end);
+ memset ((void *) mem_malloc_start, 0,
+ mem_malloc_end - mem_malloc_start);
+ }
+@@ -254,11 +256,14 @@ void start_armboot (void)
+ memset (gd->bd, 0, sizeof (bd_t));
+
+ monitor_flash_len = _bss_start - _armboot_start;
+-
++ int num = 0;
+ for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
+ if ((*init_fnc_ptr)() != 0) {
++ printf("hanf at %d\n", num);
+ hang ();
+ }
++ else
++ num++;
+ }
+
+ #ifndef CFG_NO_FLASH
+@@ -391,8 +396,10 @@ void start_armboot (void)
+ #if defined(CONFIG_NET_MULTI)
+ puts ("Net: ");
+ #endif
+- eth_initialize(gd->bd);
++ puts("eth_initialize\n");
++ eth_initialize(gd->bd);
+ #endif
++
+ /* main_loop() can return to retry autoboot, if so just run it again. */
+ for (;;) {
+ main_loop ();
+diff -Nurp ../u-boot-1.1.6/lib_generic/gunzip.c ./lib_generic/gunzip.c
+--- ../u-boot-1.1.6/lib_generic/gunzip.c 1970-01-01 01:00:00.000000000 +0100
++++ ./lib_generic/gunzip.c 2007-03-22 00:44:21.000000000 +0100
+@@ -0,0 +1,613 @@
++#include "gunzip.h"
++
++/* unzip code taken from bios-lt project */
++/* http://sourceforge.net/projects/bios-lt */
++/* maintainer Liu Tao */
++
++static const ulong crc_32_tab[256] = {
++ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
++ 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
++ 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
++ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
++ 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
++ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
++ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
++ 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
++ 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
++ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
++ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
++ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
++ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
++ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
++ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
++ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
++ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
++ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
++ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
++ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
++ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
++ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
++ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
++ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
++ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
++ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
++ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
++};
++
++static const huft_code mask_bits[] = {
++ 0x0000,
++ 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
++ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
++};
++
++/* Tables for deflate from PKZIP's appnote.txt. */
++static const unsigned border[] = { /* Order of the bit length code lengths */
++ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
++
++static const ushort cplext[] = { /* Extra bits for literal codes 257..285 */
++ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
++ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99
++}; /* 99==invalid */
++
++static const ushort cplens[] = { /* Copy lengths for literal codes 257..285 */
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
++ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
++}; /* note: see note #13 above about the 258 in this list. */
++
++static const ushort cpdext[] = { /* Extra bits for distance codes */
++ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
++ 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13
++};
++
++static const ushort cpdist[] = { /* Copy offsets for distance codes 0..29 */
++ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
++ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
++ 8193, 12289, 16385, 24577
++};
++
++static huft_code bit_reverse(huft_code code, huft_bits bits)
++{
++ huft_code ret = 0;
++ int i;
++
++ for (i = 0; i < bits; i++) {
++ if (code & (1 << i))
++ ret |= (1 << (bits - i - 1));
++ }
++
++ return ret;
++}
++
++static huft_code huft_get_code(
++ huft_bits *b, /* code lengths in bits (all assumed <= B_MAX) */
++ int n, /* number of codes (assumed <= N_MAX) */
++ int k /* index */
++ )
++{
++ huft_code code = 0;
++ huft_bits bits = b[k];
++ int i;
++
++ if (bits == 0)
++ return 0;
++
++ for (i = 0; i < n; i++) {
++ if (b[i] < bits && b[i] > 0)
++ code += 1 << (b[k] - b[i]);
++ else if ((i < k) && (b[i] == bits))
++ code += 1;
++ }
++
++ return bit_reverse(code, bits);
++}
++
++static int huft_build_table(
++ huft_bits *b, /* code lengths in bits (all assumed <= B_MAX) */
++ int n, /* number of codes (assumed <= N_MAX) */
++ huft_code *t /* result: starting table */
++ )
++{
++ int i;
++
++ for (i = 0; i < n; i++) {
++ t[i] = huft_get_code(b, n, i);
++ }
++
++ return 0;
++}
++
++static int huft_get_value(
++ huft_bits *b, /* code lengths in bits (all assumed <= B_MAX) */
++ huft_code *t, /* huft table */
++ int n, /* number of codes (assumed <= N_MAX) */
++ huft_code code,
++ huft_bits *bits
++ )
++{
++ int i;
++
++ for (i = 0; i < n; i++) {
++ if (b[i] == 0)
++ continue;
++
++ if ((code & ~(0xffff << b[i])) == t[i])
++ break;
++ }
++
++ if (i == n)
++ return -1;
++
++ *bits = b[i];
++ return i;
++}
++
++static huft_code peek_bits(gunzip_t *guz, huft_bits n)
++{
++ huft_code r;
++
++ while (guz->bufbits < (n))
++ {
++ guz->bitbuf |= ((ulong)get_uchar(guz)) << guz->bufbits;
++ guz->bufbits += 8;
++ }
++ r = guz->bitbuf & mask_bits[n];
++
++ return r;
++}
++
++static void skip_bits(gunzip_t *guz, huft_bits n)
++{
++ guz->bitbuf >>= (n);
++ guz->bufbits -= (n);
++}
++
++static huft_code get_bits(gunzip_t *guz, huft_bits n)
++{
++ huft_code r;
++
++ while (guz->bufbits < (n))
++ {
++ guz->bitbuf |= ((ulong)get_uchar(guz)) << guz->bufbits;
++ guz->bufbits += 8;
++ }
++ r = guz->bitbuf & mask_bits[n];
++
++ guz->bitbuf >>= (n);
++ guz->bufbits -= (n);
++
++ return r;
++}
++
++static int inflate_codes(gunzip_t *guz,
++ huft_bits *ll,
++ huft_code *tl, /* literal/length decoder tables */
++ huft_bits *ld,
++ huft_code *td, /* distance decoder tables */
++ int nl, /* number of bits decoded by tl[] */
++ int nd /* number of bits decoded by td[] */
++ )
++{
++ register int i, j;
++ register huft_code code;
++ register huft_bits bits;
++ register int value, n;
++ register uchar *outbuf;
++ register ulong outptr;
++ register huft_code codex;
++ huft_bits bits_tmp;
++ huft_code ftl[256], ftlex[512], ftd[256];
++ int ftnex = 0;
++ int len, dist;
++
++ outbuf = guz->outbuf;
++ outptr = guz->outptr;
++
++ for (i = 0; i < 256; i++) {
++ ftl[i] = 0xffff;
++ ftd[i] = 0xffff;
++ }
++
++ for (i = 0; i < 512; i++)
++ ftlex[i] = 0xffff;
++
++ for (i = 0; i < nl; i++) {
++
++ bits = ll[i];
++ if (bits > 0 && bits <= 8) {
++ code = (ushort)i | (bits << 9);
++ for (j = 0; j < (1 << (8 - bits)); j++) {
++ ftl[tl[i] | (j << bits)] = code;
++ }
++
++ } else if (bits > 8 && bits < 12 && ftnex < 64) {
++ code = tl[i] & 0xff;
++ if (ftl[code] == 0xffff) {
++ n = (ftnex++) << 3;
++ ftl[code] = 0x8000 | n;
++ } else
++ n = ftl[code] & 0x7fff;
++
++ code = (ushort)i | (bits << 9);
++ n += tl[i] >> 8;
++ for (j = 0; j < (1 << (11 - bits)); j++) {
++ ftlex[n | (j << (bits - 8))] = code;
++ }
++ }
++ }
++
++ for (i = 0; i < nd; i++) {
++ bits = ld[i];
++ code = (ushort)i + (bits << 9);
++ if (bits > 0 && bits <= 8) {
++ for (j = 0; j < (1 << (8 - bits)); j++) {
++ ftd[td[i] | (j << bits)] = code;
++ }
++ }
++ }
++
++ while (1) {
++
++ code = peek_bits(guz, 8);
++
++ if (!(ftl[code] & 0x8000)) {
++ value = ftl[code] & 0x01ff;
++ bits = ftl[code] >> 9;
++
++ } else if (ftl[code] != 0xffff) {
++ n = ftl[code] & 0x7fff;
++ code = peek_bits(guz, 11);
++ codex = code >> 8;
++ if (ftlex[n + codex] != 0xffff) {
++ value = ftlex[n + codex] & 0x01ff;
++ bits = ftlex[n + codex] >> 9;
++ } else {
++ code = peek_bits(guz, 16);
++ value = huft_get_value(ll, tl, nl, code, &bits_tmp);
++ bits = bits_tmp;
++ if (value == -1)
++ return 1; /* error in compressed data */
++ }
++
++ } else {
++ code = peek_bits(guz, 16);
++ value = huft_get_value(ll, tl, nl, code, &bits_tmp);
++ bits = bits_tmp;
++ if (value == -1)
++ return 1; /* error in compressed data */
++ }
++ skip_bits(guz, bits);
++
++ if (value < 256) {
++ outbuf[outptr++] = (uchar)value;
++ } else if (value > 256) {
++ code = get_bits(guz, cplext[value - 257]);
++ len = cplens[value - 257] + code;
++
++ code = peek_bits(guz, 8);
++ if (ftd[code] != 0xffff) {
++ value = ftd[code] & 0x01ff;
++ bits = ftd[code] >> 9;
++ } else {
++ code = peek_bits(guz, 16);
++ value = huft_get_value(ld, td, nd, code, &bits_tmp);
++ bits = bits_tmp;
++ if (value == -1)
++ return 1; /* error in compressed data */
++ }
++ skip_bits(guz, bits);
++ dist = cpdist[value] + get_bits(guz, cpdext[value]);
++
++ for (i = 0; i < len; i++)
++ outbuf[outptr++] = outbuf[outptr - dist];
++ } else {
++ break;
++ }
++ }
++
++ guz->outbuf = outbuf;
++ guz->outptr = outptr;
++
++ return 0;
++}
++
++static int inflate_stored(gunzip_t *guz)
++{
++ ulong n; /* number of bytes in block */
++
++ /* go to byte boundary */
++ n = guz->bufbits & 7;
++ get_bits(guz, n);
++
++ /* get the length and its complement */
++ n = get_bits(guz, 16);
++ if (n != (~get_bits(guz, 16) & 0xffff))
++ return 1; /* error in compressed data */
++
++ /* read and output the compressed data */
++ while (n--)
++ output_char(guz, (uchar)get_bits(guz, 8));
++
++ return 0;
++}
++
++static int inflate_fixed(gunzip_t *guz)
++{
++ huft_bits ll[288], ld[32];
++ huft_code tl[288], td[32];
++ int i;
++
++ /* set up literal table */
++ for (i = 0; i < 144; i++)
++ ll[i] = 8;
++ for (; i < 256; i++)
++ ll[i] = 9;
++ for (; i < 280; i++)
++ ll[i] = 7;
++ for (; i < 288; i++) /* make a complete, but wrong code set */
++ ll[i] = 8;
++ huft_build_table(ll, 288, tl);
++
++ for (i = 0; i < 30; i++)
++ ld[i] = 5;
++ huft_build_table(ld, 30, td);
++
++ return inflate_codes(guz, ll, tl, ld, td, 288, 30);
++
++}
++
++static int build_bits_table(gunzip_t *guz,
++ huft_bits *lb,
++ huft_code *tb,
++ int nb,
++ huft_bits *ll,
++ int nl
++ )
++{
++ huft_bits bits;
++ huft_code code;
++ int value, i, n;
++
++ i = 0;
++ while (i < nl) {
++ code = peek_bits(guz, 16);
++ value = huft_get_value(lb, tb, 19, code, &bits);
++ if (value == -1)
++ return 1; /* error in compressed data */
++ skip_bits(guz, bits);
++ if (value < 16) {
++ ll[i++] = value;
++ } else if (value == 16) {
++ code = get_bits(guz, 2);
++ for (n = 0; n < code + 3; n++) {
++ ll[i++] = ll[i - 1];
++ }
++ } else if (value == 17) {
++ code = get_bits(guz, 3);
++ for (n = 0; n < code + 3; n++)
++ ll[i++] = 0;
++ } else if (value == 18) {
++ code = get_bits(guz, 7);
++ for (n = 0; n < code + 11; n++)
++ ll[i++] = 0;
++ }
++ }
++
++ return 0;
++}
++
++static int inflate_dynamic(gunzip_t *guz)
++{
++ huft_bits lb[19], ll[288], ld[32];
++ huft_code tb[19], tl[288], td[32];
++ int nb; /* number of bit length codes */
++ int nl; /* number of literal/length codes */
++ int nd; /* number of distance codes */
++ int i;
++
++ /* read in table lengths */
++ nl = 257 + get_bits(guz, 5); /* number of literal/length codes */
++ nd = 1 + get_bits(guz, 5); /* number of distance codes */
++ nb = 4 + get_bits(guz, 4); /* number of bit length codes */
++ if (nl > 286 || nd > 30)
++ return 1; /* bad lengths */
++
++ /* read in bit-length-code lengths */
++ for (i = 0; i < nb; i++)
++ lb[border[i]] = get_bits(guz, 3);
++ for (; i < 19; i++)
++ lb[border[i]] = 0;
++ huft_build_table(lb, 19, tb);
++
++ build_bits_table(guz, lb, tb, 19, ll, nl);
++ huft_build_table(ll, nl, tl);
++
++ build_bits_table(guz, lb, tb, 19, ld, nd);
++ huft_build_table(ld, nd, td);
++
++ return inflate_codes(guz, ll, tl, ld, td, nl, nd);
++}
++
++static int inflate_block(gunzip_t *guz, ulong *e)
++{
++ ulong t; /* block type */
++
++ /* read in last block bit */
++ *e = get_bits(guz, 1);
++
++ /* read in block type */
++ t = get_bits(guz, 2);
++
++ /* inflate that block type */
++ if (t == 0)
++ return inflate_stored(guz);
++ if (t == 1)
++ return inflate_fixed(guz);
++ if (t == 2)
++ return inflate_dynamic(guz);
++
++ /* bad block type */
++ return 2;
++}
++
++static int inflate(gunzip_t *guz)
++{
++ ulong e; /* last block flag */
++ int r; /* result code */
++ /* unsigned h; maximum struct huft's malloc'ed */
++
++ /* decompress until the last block */
++ do {
++ if ((r = inflate_block(guz, &e)) != 0) {
++ return r;
++ }
++ } while (!e);
++
++ /* Undo too much lookahead. The next read will be byte aligned so we
++ * can discard unused bits in the last meaningful byte.
++ */
++ while (guz->bufbits >= 8) {
++ guz->bufbits -= 8;
++ guz->inptr--;
++ }
++
++ /* return success */
++ return 0;
++}
++
++static void init_gunzip_struct(gunzip_t *guz,
++ uchar *inbuf, ulong insize, uchar *outbuf, ulong outsize)
++{
++ guz->inbuf = inbuf;
++ guz->insize = insize;
++ guz->inptr = 0;
++
++ guz->outbuf = outbuf;
++ guz->outsize = outsize;
++ guz->outptr = 0;
++
++ guz->bitbuf = 0;
++ guz->bufbits = 0;
++}
++
++ulong get_crc(uchar *buf, int len)
++{
++ ulong crc;
++ uchar ch;
++ int i;
++
++ crc = 0xffffffffL;
++ for (i = 0; i < len; i++) {
++ ch = buf[i];
++ crc = crc_32_tab[((int)crc ^ ch) & 0xff] ^ (crc >> 8);
++ }
++ crc = (crc ^ 0xffffffffL);
++
++ return crc;
++}
++
++int gunzip(uchar *inbuf, ulong *insize, uchar *outbuf, ulong *outsize)
++{
++ gunzip_t guz_struct;
++ gunzip_t *guz;
++ uchar magic[2]; /* magic header */
++ uchar method;
++ uchar flags;
++ ulong orig_crc = 0; /* original crc */
++ ulong orig_len = 0; /* original uncompressed length */
++ int res;
++
++ guz = &guz_struct;
++ init_gunzip_struct(guz, inbuf, *insize, outbuf, *outsize);
++
++
++ magic[0] = get_uchar(guz);
++ magic[1] = get_uchar(guz);
++ method = get_uchar(guz);
++
++ if (magic[0] != 0x1f || magic[1] != 0x8b)
++ return ERR_BADMAGIC;
++
++ /* We only support method #8, DEFLATED */
++ if (method != 8)
++ return ERR_BADMETHOD;
++
++ flags = get_uchar(guz);
++ if (flags & ENCRYPTED)
++ return ERR_ENCRYPTED;
++
++ if (flags & CONTINUATION)
++ return ERR_MULTIPART;
++
++ if (flags & RESERVED)
++ return ERR_INVALIDFLAGS;
++
++ get_ulong(guz); /* Get timestamp */
++
++ get_uchar(guz); /* Ignore extra flags for the moment */
++ get_uchar(guz); /* Ignore OS type for the moment */
++
++ if (flags & EXTRA_FIELD) {
++ ushort len;
++
++ len = get_ushort(guz);
++ while (len--)
++ get_uchar(guz);
++ }
++
++ /* Get original file name if it was truncated */
++ if (flags & ORIG_NAME) {
++ /* Discard the old name */
++ while (get_uchar(guz) != 0);
++ }
++
++ /* Discard file comment if any */
++ if (flags & COMMENT) {
++ while (get_uchar(guz) != 0);
++ }
++
++ /* Decompress */
++ if ((res = inflate(guz)) != 0) {
++ switch (res) {
++ case 1:
++ /* invalid compressed format (err=1) */
++ res = ERR_BADFORMAT1;
++ break;
++ case 2:
++ /* invalid compressed format (err=2) */
++ res = ERR_BADFORMAT2;
++ break;
++ case 3:
++ /* out of memory */
++ res = ERR_MEM;
++ break;
++ default:
++ /* invalid compressed format (other) */
++ res = ERR_BADFORMAT;
++ }
++
++ return res;
++ }
++ /* Get the crc and original length */
++ /* crc32 (see algorithm.doc)
++ * uncompressed input size modulo 2^32
++ */
++ orig_crc = get_ulong(guz);
++ orig_len = get_ulong(guz);
++
++ /* Validate decompression */
++// if (orig_crc != get_crc(guz->outbuf, guz->outptr))
++// return ERR_CRC;
++
++ if (orig_len != guz->outptr)
++ return ERR_LENGTH;
++
++ *insize = guz->inptr;
++ *outsize = guz->outptr;
++
++ return 0;
++}
+diff -Nurp ../u-boot-1.1.6/lib_generic/Makefile ./lib_generic/Makefile
+--- ../u-boot-1.1.6/lib_generic/Makefile 2006-11-02 15:15:01.000000000 +0100
++++ ./lib_generic/Makefile 2007-03-25 17:49:13.000000000 +0200
+@@ -28,7 +28,8 @@ LIB = $(obj)libgeneric.a
+ COBJS = bzlib.o bzlib_crctable.o bzlib_decompress.o \
+ bzlib_randtable.o bzlib_huffman.o \
+ crc32.o ctype.o display_options.o ldiv.o \
+- string.o vsprintf.o zlib.o
++ string.o vsprintf.o gunzip.o
++# zlib.o gunzip.o
+
+ SRCS := $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(COBJS))
+Pliki ../u-boot-1.1.6/loader-sarge i ./loader-sarge różnią się
+diff -Nurp ../u-boot-1.1.6/Makefile ./Makefile
+--- ../u-boot-1.1.6/Makefile 2006-11-02 15:15:01.000000000 +0100
++++ ./Makefile 2007-03-29 20:07:54.000000000 +0200
+@@ -1882,6 +1882,9 @@ smdk2410_config : unconfig
+ SX1_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm925t sx1
+
++sarge_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm920t sarge NULL at91rm9200
++
+ # TRAB default configuration: 8 MB Flash, 32 MB RAM
+ trab_config \
+ trab_bigram_config \
+diff -Nurp ../u-boot-1.1.6/net/bootp.c ./net/bootp.c
+--- ../u-boot-1.1.6/net/bootp.c 2006-11-02 15:15:01.000000000 +0100
++++ ./net/bootp.c 2007-05-09 23:46:31.000000000 +0200
+@@ -35,7 +35,7 @@
+
+ #define TIMEOUT 5 /* Seconds before trying BOOTP again */
+ #ifndef CONFIG_NET_RETRY_COUNT
+-# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
++# define TIMEOUT_COUNT 10 /* # of timeouts before giving up */
+ #else
+ # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
+ #endif
+diff -Nurp ../u-boot-1.1.6/net/eth.c ./net/eth.c
+--- ../u-boot-1.1.6/net/eth.c 2006-11-02 15:15:01.000000000 +0100
++++ ./net/eth.c 2007-05-09 23:47:19.000000000 +0200
+@@ -397,10 +397,10 @@ int eth_send(volatile void *packet, int
+ }
+
+ int eth_rx(void)
+-{
++{
+ if (!eth_current)
+ return -1;
+-
++
+ return eth_current->recv(eth_current);
+ }
+
+diff -Nurp ../u-boot-1.1.6/net/Makefile ./net/Makefile
+--- ../u-boot-1.1.6/net/Makefile 2006-11-02 15:15:01.000000000 +0100
++++ ./net/Makefile 2007-05-09 23:52:55.000000000 +0200
+@@ -23,7 +23,7 @@
+
+ include $(TOPDIR)/config.mk
+
+-# CFLAGS += -DET_DEBUG -DDEBUG
++#CFLAGS += -DET_DEBUG -DDEBUG -DDEBUG_BOOTP_EXT
+
+ LIB = $(obj)libnet.a
+
+diff -Nurp ../u-boot-1.1.6/net/net.c ./net/net.c
+--- ../u-boot-1.1.6/net/net.c 2006-11-02 15:15:01.000000000 +0100
++++ ./net/net.c 2007-05-09 23:47:40.000000000 +0200
+@@ -78,6 +78,7 @@
+ #include <watchdog.h>
+ #include <command.h>
+ #include <net.h>
++#include <linux/ctype.h>
+ #include "bootp.h"
+ #include "tftp.h"
+ #include "rarp.h"
+@@ -1745,7 +1746,23 @@ void print_IPaddr (IPaddr_t x)
+
+ IPaddr_t getenv_IPaddr (char *var)
+ {
+- return (string_to_ip(getenv(var)));
++ /* new code changed by Yu Lu ,
++ to solve the problem of
++ mess up the ip addr from environment variables */
++ char tmp_str[64];
++ // printf("DebugLY1: \n\r");
++ //puts(getenv(var));
++
++ strcpy(tmp_str, getenv(var) );
++ if(isxdigit(*tmp_str))
++ return (string_to_ip( tmp_str ));
++ else
++ return (string_to_ip( tmp_str+1 ));
++ //return (string_to_ip(getenv(var)+1));
++ /* old code is the below */
++ // return (string_to_ip(getenv(var)));
++
++ //return (string_to_ip(getenv(var)));
+ }
+
+ ushort getenv_VLAN(char *var)
diff --git a/packages/uboot/u-boot-1.2.0/.mtn2git_empty b/packages/uboot/u-boot-1.2.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/defconfig_lsppchd b/packages/uboot/u-boot-1.2.0/defconfig_lsppchd
new file mode 100644
index 0000000000..5919f5eb2c
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/defconfig_lsppchd
@@ -0,0 +1,500 @@
+/*
+ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if 0
+#define DEBUG
+#endif
+
+/*-----------------------------------------------------------------------
+ * User configurable settings:
+ * Mandatory settings:
+ * CONFIG_IPADDR_LS - the IP address of the LinkStation
+ * CONFIG_SERVERIP_LS - the address of the server for NFS/TFTP/DHCP/BOOTP
+ * Optional settins:
+ * CONFIG_NCIP_LS - the adress of the computer running net console
+ * if not configured, it will be set to
+ * CONFIG_SERVERIP_LS
+ */
+
+#define CONFIG_IPADDR_LS 192.168.11.150
+#define CONFIG_SERVERIP_LS 192.168.11.149
+
+#if !defined(CONFIG_IPADDR_LS) || !defined(CONFIG_SERVERIP_LS)
+#error Both CONFIG_IPADDR_LS and CONFIG_SERVERIP_LS must be defined
+#endif
+
+#if !defined(CONFIG_NCIP_LS)
+#define CONFIG_NCIP_LS CONFIG_SERVERIP_LS
+#endif
+
+/*----------------------------------------------------------------------
+ * DO NOT CHANGE ANYTHING BELOW, UNLESS YOU KNOW WHAT YOU ARE DOING
+ *---------------------------------------------------------------------*/
+
+#define CONFIG_MPC8245 1
+#define CONFIG_LINKSTATION 1
+
+/*---------------------------------------
+ * Supported models
+ *
+ * LinkStation HDLAN /KuroBox Standard (CONFIG_HLAN)
+ * LinkStation old model (CONFIG_LAN) - totally untested
+ * LinkStation HGLAN / KuroBox HG (CONFIG_HGLAN)
+ *
+ * Models not supported yet
+ * TeraStatin (CONFIG_HTGL)
+ */
+
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define CONFIG_IDENT_STRING " LinkStation / KuroBox"
+#elif defined(CONFIG_HGLAN)
+#define CONFIG_IDENT_STRING " LinkStation HG / KuroBox HG"
+#elif defined(CONFIG_HTGL)
+#define CONFIG_IDENT_STRING " TeraStation"
+#else
+#error No LinkStation model defined
+#endif
+
+#define CONFIG_BOOTDELAY 10
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+#undef CONFIG_BOOT_RETRY_TIME
+
+#define CONFIG_AUTOBOOT_KEYED
+#define CONFIG_AUTOBOOT_PROMPT "Boot in %02d seconds ('s' to stop)..."
+#define CONFIG_AUTOBOOT_STOP_STR "s"
+
+#define CONFIG_COMMANDS (CFG_CMD_BDI | \
+ CFG_CMD_LOADS | \
+ CFG_CMD_LOADB | \
+ CFG_CMD_FLASH | \
+ CFG_CMD_MEMORY | \
+ CFG_CMD_NET | \
+ CFG_CMD_ENV | \
+ CFG_CMD_IDE | \
+ CFG_CMD_PCI | \
+ CFG_CMD_BOOTD | \
+ CFG_CMD_CONSOLE | \
+ CFG_CMD_RUN | \
+ CFG_CMD_ECHO | \
+ CFG_CMD_DHCP | \
+ CFG_CMD_PING | \
+ CFG_CMD_NFS | \
+ CFG_CMD_EXT2 )
+#define CONFIG_BOOTP_MASK CONFIG_BOOTP_ALL
+
+#define CONFIG_OF_FLAT_TREE 1
+
+#ifdef CONFIG_OF_FLAT_TREE
+#define OF_CPU "PowerPC,603e"
+#define OF_SOC "soc10x@80000000"
+#define OF_STDOUT_PATH "/soc10x/serial@80004600"
+#endif
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP /* undef to save memory */
+#define CFG_PROMPT "=> " /* Monitor Command Prompt */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+
+#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
+#define CFG_MAXARGS 16 /* Max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+#define CFG_LOAD_ADDR 0x00800000 /* Default load address: 8 MB */
+
+//#define CONFIG_BOOTCOMMAND "run nfsboot"
+#define CONFIG_BOOTCOMMAND "run bootcmd1"
+#define CONFIG_BOOTARGS "root=/dev/sda1 netconsole=6666@192.168.11.150/,@192.168.11.149/ rtc-rs5c372.probe=0,0x32"
+#define CONFIG_NFSBOOTCOMMAND "bootp;run nfsargs;bootm"
+
+#define CFG_CONSOLE_IS_IN_ENV
+
+#define XMK_STR(x) #x
+#define MK_STR(x) XMK_STR(x)
+
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define UBFILE "share/u-boot/u-boot-hd.flash.bin"
+#elif defined(CONFIG_HGLAN)
+#define UBFILE "share/u-boot/u-boot-hg.flash.bin"
+#elif defined(CONFIG_HTGL)
+#define UBFILE "share/u-boot/u-boot-ht.flash.bin"
+#else
+#error No LinkStation model defined
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "autoload=no\0" \
+ "stdin=nc\0" \
+ "stdout=nc\0" \
+ "stderr=nc\0" \
+ "ipaddr="MK_STR(CONFIG_IPADDR_LS)"\0" \
+ "netmask=255.255.255.0\0" \
+ "serverip="MK_STR(CONFIG_SERVERIP_LS)"\0" \
+ "ncip="MK_STR(CONFIG_NCIP_LS)"\0" \
+ "netretry=no\0" \
+ "nc=setenv stdin nc;setenv stdout nc;setenv stderr nc\0" \
+ "ser=setenv stdin serial;setenv stdout serial;setenv stderr serial\0" \
+ "ldaddr=800000\0" \
+ "hdpart=0:1\0" \
+ "hdfile=boot/uImage\0" \
+ "hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile};ext2load ide ${hdpart} 7f0000 boot/kuroboxHD.dtb\0" \
+ "boothd=setenv bootargs " CONFIG_BOOTARGS ";bootm ${ldaddr} - 7f0000\0" \
+ "hdboot=run hdload boothd\0" \
+ "flboot=setenv bootargs root=/dev/hda1;bootm ffc00000\0" \
+ "emboot=setenv bootargs root=/dev/ram0;bootm ffc00000\0" \
+ "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0" \
+ "bootretry=30\0" \
+ "bootcmd1=run hdboot;run flboot\0" \
+ "bootcmd2=run flboot\0" \
+ "bootcmd3=run emboot\0" \
+ "writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4\0" \
+ "writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4\0" \
+ "ubpart=0:1\0" \
+ "ubfile="UBFILE"\0" \
+ "ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}\0" \
+ "ubsaddr=fff00000\0" \
+ "ubeaddr=fff2ffff\0" \
+ "ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}\0" \
+ "upgrade=run ubload ubflash\0"
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ */
+#define CONFIG_PCI
+#undef CONFIG_PCI_PNP
+#define CONFIG_PCI_SCAN_SHOW
+
+#ifndef CONFIG_PCI_PNP
+/* Keep the following defines in sync with the BAT mappings */
+
+#define PCI_ETH_IOADDR 0xbfff00
+#define PCI_ETH_MEMADDR 0xbffffc00
+#define PCI_IDE_IOADDR 0xbffed0
+#define PCI_IDE_MEMADDR 0xbffffb00
+#define PCI_USB0_IOADDR 0
+#define PCI_USB0_MEMADDR 0xbfffe000
+#define PCI_USB1_IOADDR 0
+#define PCI_USB1_MEMADDR 0xbfffd000
+#define PCI_USB2_IOADDR 0
+#define PCI_USB2_MEMADDR 0xbfffcf00
+
+#endif
+
+/*-----------------------------------------------------------------------
+ * Ethernet stuff
+ */
+#define CONFIG_NET_MULTI
+
+#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
+#define CONFIG_TULIP
+#define CONFIG_TULIP_USE_IO
+#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
+#define CONFIG_RTL8169
+#endif
+
+#define CONFIG_NET_RETRY_COUNT 5
+
+#define CONFIG_NETCONSOLE
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE 0x00000000
+
+#define CFG_FLASH_BASE 0xFFC00000
+#define CFG_MONITOR_BASE TEXT_BASE
+
+#define CFG_RESET_ADDRESS 0xFFF00100
+#define CFG_EUMB_ADDR 0x80000000
+#define CFG_PCI_MEM_ADDR 0xB0000000
+#define CFG_MISC_REGION_ADDR 0xFE000000
+
+#define CFG_MONITOR_LEN 0x00040000 /* 256 kB */
+#define CFG_MALLOC_LEN (512 << 10) /* Reserve some kB for malloc() */
+
+#define CFG_MEMTEST_START 0x00100000 /* memtest works on */
+#define CFG_MEMTEST_END 0x00800000 /* 1M ... 8M in DRAM */
+
+/* Maximum amount of RAM */
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define CFG_MAX_RAM_SIZE 0x04000000 /* 64MB of SDRAM */
+#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
+#define CFG_MAX_RAM_SIZE 0x08000000 /* 128MB of SDRAM */
+#else
+#error Unknown LinkStation type
+#endif
+
+/*-----------------------------------------------------------------------
+ * Change TEXT_BASE in bord/linkstation/config.mk to get a RAM build
+ *
+ * RAM based builds are for testing purposes. A Linux module, uloader.o,
+ * exists to load U-Boot and pass control to it
+ *
+ * Always do "make clean" after changing the build type
+ */
+#if CFG_MONITOR_BASE < CFG_FLASH_BASE
+#define CFG_RAMBOOT
+#endif
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area
+ */
+#if 1 /* RAM is available when the first C function is called */
+#define CFG_INIT_RAM_ADDR (CFG_SDRAM_BASE + CFG_MAX_RAM_SIZE - 0x1000)
+#else
+#define CFG_INIT_RAM_ADDR 0x40000000
+#endif
+#define CFG_INIT_RAM_END 0x1000
+#define CFG_GBL_DATA_SIZE 128
+#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+
+/*----------------------------------------------------------------------
+ * Serial configuration
+ */
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_BAUDRATE 57600
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+
+#define CFG_NS16550_REG_SIZE 1
+
+#define CFG_NS16550_CLK get_bus_freq(0)
+
+#define CFG_NS16550_COM1 (CFG_EUMB_ADDR + 0x4600) /* Console port */
+#define CFG_NS16550_COM2 (CFG_EUMB_ADDR + 0x4500) /* AVR port */
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ * For the detail description refer to the MPC8245 user's manual.
+ *
+ * Unless indicated otherwise, the values are
+ * taken from the orignal Linkstation boot code
+ *
+ * Most of the low level configuration setttings are normally used
+ * in cpu/mpc824x/cpu_init.c which is NOT used by this implementation.
+ * Low level initialisation is done in board/linkstation/early_init.S
+ * The values below are included for reference purpose only
+ */
+
+/* FIXME: 32.768 MHz is the crystal frequency but */
+/* the real frequency is lower by about 0.75% */
+#define CONFIG_SYS_CLK_FREQ 32768000
+#define CFG_HZ 1000
+
+/* Bit-field values for MCCR1. */
+#define CFG_ROMNAL 0
+#define CFG_ROMFAL 11
+
+#define CFG_BANK0_ROW 2 /* Only bank 0 used: 13 x n x 4 */
+#define CFG_BANK1_ROW 0
+#define CFG_BANK2_ROW 0
+#define CFG_BANK3_ROW 0
+#define CFG_BANK4_ROW 0
+#define CFG_BANK5_ROW 0
+#define CFG_BANK6_ROW 0
+#define CFG_BANK7_ROW 0
+
+/* Bit-field values for MCCR2. */
+#define CFG_TSWAIT 0
+#define CFG_REFINT 1400
+
+/* Burst To Precharge. Bits of this value go to MCCR3 and MCCR4. */
+#define CFG_BSTOPRE 121
+
+/* Bit-field values for MCCR3. */
+#define CFG_REFREC 7
+
+/* Bit-field values for MCCR4. */
+#define CFG_PRETOACT 2
+#define CFG_ACTTOPRE 5 /* Original value was 2 */
+#define CFG_ACTORW 2
+#define CFG_SDMODE_CAS_LAT 2 /* For 100MHz bus. Use 3 for 133MHz */
+#define CFG_REGISTERD_TYPE_BUFFER 1
+#define CFG_EXTROM 1 /* Original setting but there is no EXTROM */
+#define CFG_REGDIMM 0
+#define CFG_DBUS_SIZE2 1
+#define CFG_SDMODE_WRAP 0
+
+#define CFG_PGMAX 0x32 /* All boards use this setting. Original 0x92 */
+#define CFG_SDRAM_DSCD 0x30
+
+/* Memory bank settings.
+ * Only bits 20-29 are actually used from these vales to set the
+ * start/end addresses. The upper two bits will always be 0, and the lower
+ * 20 bits will be 0x00000 for a start address, or 0xfffff for an end
+ * address. Refer to the MPC8240 book.
+ */
+
+#define CFG_BANK0_START 0x00000000
+#define CFG_BANK0_END (CFG_MAX_RAM_SIZE - 1)
+#define CFG_BANK0_ENABLE 1
+#define CFG_BANK1_START 0x3ff00000
+#define CFG_BANK1_END 0x3fffffff
+#define CFG_BANK1_ENABLE 0
+#define CFG_BANK2_START 0x3ff00000
+#define CFG_BANK2_END 0x3fffffff
+#define CFG_BANK2_ENABLE 0
+#define CFG_BANK3_START 0x3ff00000
+#define CFG_BANK3_END 0x3fffffff
+#define CFG_BANK3_ENABLE 0
+#define CFG_BANK4_START 0x3ff00000
+#define CFG_BANK4_END 0x3fffffff
+#define CFG_BANK4_ENABLE 0
+#define CFG_BANK5_START 0x3ff00000
+#define CFG_BANK5_END 0x3fffffff
+#define CFG_BANK5_ENABLE 0
+#define CFG_BANK6_START 0x3ff00000
+#define CFG_BANK6_END 0x3fffffff
+#define CFG_BANK6_ENABLE 0
+#define CFG_BANK7_START 0x3ff00000
+#define CFG_BANK7_END 0x3fffffff
+#define CFG_BANK7_ENABLE 0
+
+#define CFG_ODCR 0x95 /* 0x15 or 0x95 ? */
+
+/*----------------------------------------------------------------------
+ * Initial BAT mappings
+ */
+
+/* NOTES:
+ * 1) GUARDED and WRITETHROUGH not allowed in IBATS
+ * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT
+ */
+
+/* SDRAM */
+#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_128M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT0L CFG_IBAT0L
+#define CFG_DBAT0U CFG_IBAT0U
+
+/* EUMB: 1MB of address space */
+#define CFG_IBAT1L (CFG_EUMB_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT1U (CFG_EUMB_ADDR | BATU_BL_1M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT1L (CFG_IBAT1L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT1U CFG_IBAT1U
+
+/* PCI Mem: 256MB of address space */
+#define CFG_IBAT2L (CFG_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT2U (CFG_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT2L (CFG_IBAT2L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT2U CFG_IBAT2U
+
+/* PCI and local ROM/Flash: last 32MB of address space */
+#define CFG_IBAT3L (CFG_MISC_REGION_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT3U (CFG_MISC_REGION_ADDR | BATU_BL_32M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT3L (CFG_IBAT3L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT3U CFG_IBAT3U
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ *
+ * FIXME: This doesn't appear to be true for the newer kernels
+ * which map more that 8 MB
+ */
+#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#undef CFG_FLASH_PROTECTION
+#define CFG_MAX_FLASH_BANKS 1 /* Max number of flash banks */
+#define CFG_MAX_FLASH_SECT 72 /* Max number of sectors per flash */
+
+#define CFG_FLASH_ERASE_TOUT 12000
+#define CFG_FLASH_WRITE_TOUT 1000
+
+
+#define CFG_ENV_IS_IN_FLASH
+/*
+ * The original LinkStation flash organisation uses
+ * 448 kB (0xFFF00000 - 0xFFF6FFFF) for the boot loader
+ * We use the last sector of this area to store the environment
+ * which leaves max. 384 kB for the U-Boot itself
+ */
+#define CFG_ENV_ADDR 0xFFF60000
+#define CFG_ENV_SIZE 0x00010000
+#define CFG_ENV_SECT_SIZE 0x00010000
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE 32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
+#endif
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA definitions
+ */
+#undef CONFIG_IDE_LED /* No IDE LED */
+#define CONFIG_IDE_RESET /* no reset for ide supported */
+#define CONFIG_IDE_PREINIT /* check for units */
+#define CONFIG_LBA48 /* 48 bit LBA supported */
+
+#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) || defined(CONFIG_HGLAN)
+#define CFG_IDE_MAXBUS 1 /* Scan only 1 IDE bus */
+#define CFG_IDE_MAXDEVICE 1 /* Only 1 drive per IDE bus */
+#elif defined(CONFIG_HGTL)
+#define CFG_IDE_MAXBUS 2 /* Max. 2 IDE busses */
+#define CFG_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */
+#else
+#error Config IDE: Unknown LinkStation type
+#endif
+
+#define CFG_ATA_BASE_ADDR 0
+
+#define CFG_ATA_DATA_OFFSET 0 /* Offset for data I/O */
+#define CFG_ATA_REG_OFFSET 0 /* Offset for normal registers */
+#define CFG_ATA_ALT_OFFSET 0 /* Offset for alternate registers */
+
+/*-----------------------------------------------------------------------
+ * Partitions and file system
+ */
+#define CONFIG_DOS_PARTITION
+
+/*-----------------------------------------------------------------------
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#endif /* __CONFIG_H */
+
+/* vim: set ts=4: */
diff --git a/packages/uboot/u-boot-1.2.0/defconfig_lsppchg b/packages/uboot/u-boot-1.2.0/defconfig_lsppchg
new file mode 100644
index 0000000000..b9943b4c76
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/defconfig_lsppchg
@@ -0,0 +1,500 @@
+/*
+ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if 0
+#define DEBUG
+#endif
+
+/*-----------------------------------------------------------------------
+ * User configurable settings:
+ * Mandatory settings:
+ * CONFIG_IPADDR_LS - the IP address of the LinkStation
+ * CONFIG_SERVERIP_LS - the address of the server for NFS/TFTP/DHCP/BOOTP
+ * Optional settins:
+ * CONFIG_NCIP_LS - the adress of the computer running net console
+ * if not configured, it will be set to
+ * CONFIG_SERVERIP_LS
+ */
+
+#define CONFIG_IPADDR_LS 192.168.11.150
+#define CONFIG_SERVERIP_LS 192.168.11.149
+
+#if !defined(CONFIG_IPADDR_LS) || !defined(CONFIG_SERVERIP_LS)
+#error Both CONFIG_IPADDR_LS and CONFIG_SERVERIP_LS must be defined
+#endif
+
+#if !defined(CONFIG_NCIP_LS)
+#define CONFIG_NCIP_LS CONFIG_SERVERIP_LS
+#endif
+
+/*----------------------------------------------------------------------
+ * DO NOT CHANGE ANYTHING BELOW, UNLESS YOU KNOW WHAT YOU ARE DOING
+ *---------------------------------------------------------------------*/
+
+#define CONFIG_MPC8245 1
+#define CONFIG_LINKSTATION 1
+
+/*---------------------------------------
+ * Supported models
+ *
+ * LinkStation HDLAN /KuroBox Standard (CONFIG_HLAN)
+ * LinkStation old model (CONFIG_LAN) - totally untested
+ * LinkStation HGLAN / KuroBox HG (CONFIG_HGLAN)
+ *
+ * Models not supported yet
+ * TeraStatin (CONFIG_HTGL)
+ */
+
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define CONFIG_IDENT_STRING " LinkStation / KuroBox"
+#elif defined(CONFIG_HGLAN)
+#define CONFIG_IDENT_STRING " LinkStation HG / KuroBox HG"
+#elif defined(CONFIG_HTGL)
+#define CONFIG_IDENT_STRING " TeraStation"
+#else
+#error No LinkStation model defined
+#endif
+
+#define CONFIG_BOOTDELAY 10
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+#undef CONFIG_BOOT_RETRY_TIME
+
+#define CONFIG_AUTOBOOT_KEYED
+#define CONFIG_AUTOBOOT_PROMPT "Boot in %02d seconds ('s' to stop)..."
+#define CONFIG_AUTOBOOT_STOP_STR "s"
+
+#define CONFIG_COMMANDS (CFG_CMD_BDI | \
+ CFG_CMD_LOADS | \
+ CFG_CMD_LOADB | \
+ CFG_CMD_FLASH | \
+ CFG_CMD_MEMORY | \
+ CFG_CMD_NET | \
+ CFG_CMD_ENV | \
+ CFG_CMD_IDE | \
+ CFG_CMD_PCI | \
+ CFG_CMD_BOOTD | \
+ CFG_CMD_CONSOLE | \
+ CFG_CMD_RUN | \
+ CFG_CMD_ECHO | \
+ CFG_CMD_DHCP | \
+ CFG_CMD_PING | \
+ CFG_CMD_NFS | \
+ CFG_CMD_EXT2 )
+#define CONFIG_BOOTP_MASK CONFIG_BOOTP_ALL
+
+#define CONFIG_OF_FLAT_TREE 1
+
+#ifdef CONFIG_OF_FLAT_TREE
+#define OF_CPU "PowerPC,603e"
+#define OF_SOC "soc10x@80000000"
+#define OF_STDOUT_PATH "/soc10x/serial@80004600"
+#endif
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP /* undef to save memory */
+#define CFG_PROMPT "=> " /* Monitor Command Prompt */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+
+#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
+#define CFG_MAXARGS 16 /* Max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+#define CFG_LOAD_ADDR 0x00800000 /* Default load address: 8 MB */
+
+//#define CONFIG_BOOTCOMMAND "run nfsboot"
+#define CONFIG_BOOTCOMMAND "run bootcmd1"
+#define CONFIG_BOOTARGS "root=/dev/sda1 netconsole=6666@192.168.11.150/,@192.168.11.149/ rtc-rs5c372.probe=0,0x32"
+#define CONFIG_NFSBOOTCOMMAND "bootp;run nfsargs;bootm"
+
+#define CFG_CONSOLE_IS_IN_ENV
+
+#define XMK_STR(x) #x
+#define MK_STR(x) XMK_STR(x)
+
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define UBFILE "share/u-boot/u-boot-hd.flash.bin"
+#elif defined(CONFIG_HGLAN)
+#define UBFILE "share/u-boot/u-boot-hg.flash.bin"
+#elif defined(CONFIG_HTGL)
+#define UBFILE "share/u-boot/u-boot-ht.flash.bin"
+#else
+#error No LinkStation model defined
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "autoload=no\0" \
+ "stdin=nc\0" \
+ "stdout=nc\0" \
+ "stderr=nc\0" \
+ "ipaddr="MK_STR(CONFIG_IPADDR_LS)"\0" \
+ "netmask=255.255.255.0\0" \
+ "serverip="MK_STR(CONFIG_SERVERIP_LS)"\0" \
+ "ncip="MK_STR(CONFIG_NCIP_LS)"\0" \
+ "netretry=no\0" \
+ "nc=setenv stdin nc;setenv stdout nc;setenv stderr nc\0" \
+ "ser=setenv stdin serial;setenv stdout serial;setenv stderr serial\0" \
+ "ldaddr=800000\0" \
+ "hdpart=0:1\0" \
+ "hdfile=boot/uImage\0" \
+ "hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile};ext2load ide ${hdpart} 7f0000 boot/kuroboxHG.dtb\0" \
+ "boothd=setenv bootargs " CONFIG_BOOTARGS ";bootm ${ldaddr} - 7f0000\0" \
+ "hdboot=run hdload boothd\0" \
+ "flboot=setenv bootargs root=/dev/hda1;bootm ffc00000\0" \
+ "emboot=setenv bootargs root=/dev/ram0;bootm ffc00000\0" \
+ "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0" \
+ "bootretry=30\0" \
+ "bootcmd1=run hdboot;run flboot\0" \
+ "bootcmd2=run flboot\0" \
+ "bootcmd3=run emboot\0" \
+ "writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4\0" \
+ "writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4\0" \
+ "ubpart=0:1\0" \
+ "ubfile="UBFILE"\0" \
+ "ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}\0" \
+ "ubsaddr=fff00000\0" \
+ "ubeaddr=fff2ffff\0" \
+ "ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}\0" \
+ "upgrade=run ubload ubflash\0"
+
+/*-----------------------------------------------------------------------
+ * PCI stuff
+ */
+#define CONFIG_PCI
+#undef CONFIG_PCI_PNP
+#define CONFIG_PCI_SCAN_SHOW
+
+#ifndef CONFIG_PCI_PNP
+/* Keep the following defines in sync with the BAT mappings */
+
+#define PCI_ETH_IOADDR 0xbfff00
+#define PCI_ETH_MEMADDR 0xbffffc00
+#define PCI_IDE_IOADDR 0xbffed0
+#define PCI_IDE_MEMADDR 0xbffffb00
+#define PCI_USB0_IOADDR 0
+#define PCI_USB0_MEMADDR 0xbfffe000
+#define PCI_USB1_IOADDR 0
+#define PCI_USB1_MEMADDR 0xbfffd000
+#define PCI_USB2_IOADDR 0
+#define PCI_USB2_MEMADDR 0xbfffcf00
+
+#endif
+
+/*-----------------------------------------------------------------------
+ * Ethernet stuff
+ */
+#define CONFIG_NET_MULTI
+
+#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
+#define CONFIG_TULIP
+#define CONFIG_TULIP_USE_IO
+#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
+#define CONFIG_RTL8169
+#endif
+
+#define CONFIG_NET_RETRY_COUNT 5
+
+#define CONFIG_NETCONSOLE
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE 0x00000000
+
+#define CFG_FLASH_BASE 0xFFC00000
+#define CFG_MONITOR_BASE TEXT_BASE
+
+#define CFG_RESET_ADDRESS 0xFFF00100
+#define CFG_EUMB_ADDR 0x80000000
+#define CFG_PCI_MEM_ADDR 0xB0000000
+#define CFG_MISC_REGION_ADDR 0xFE000000
+
+#define CFG_MONITOR_LEN 0x00040000 /* 256 kB */
+#define CFG_MALLOC_LEN (512 << 10) /* Reserve some kB for malloc() */
+
+#define CFG_MEMTEST_START 0x00100000 /* memtest works on */
+#define CFG_MEMTEST_END 0x00800000 /* 1M ... 8M in DRAM */
+
+/* Maximum amount of RAM */
+#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
+#define CFG_MAX_RAM_SIZE 0x04000000 /* 64MB of SDRAM */
+#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
+#define CFG_MAX_RAM_SIZE 0x08000000 /* 128MB of SDRAM */
+#else
+#error Unknown LinkStation type
+#endif
+
+/*-----------------------------------------------------------------------
+ * Change TEXT_BASE in bord/linkstation/config.mk to get a RAM build
+ *
+ * RAM based builds are for testing purposes. A Linux module, uloader.o,
+ * exists to load U-Boot and pass control to it
+ *
+ * Always do "make clean" after changing the build type
+ */
+#if CFG_MONITOR_BASE < CFG_FLASH_BASE
+#define CFG_RAMBOOT
+#endif
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area
+ */
+#if 1 /* RAM is available when the first C function is called */
+#define CFG_INIT_RAM_ADDR (CFG_SDRAM_BASE + CFG_MAX_RAM_SIZE - 0x1000)
+#else
+#define CFG_INIT_RAM_ADDR 0x40000000
+#endif
+#define CFG_INIT_RAM_END 0x1000
+#define CFG_GBL_DATA_SIZE 128
+#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+
+/*----------------------------------------------------------------------
+ * Serial configuration
+ */
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_BAUDRATE 57600
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+
+#define CFG_NS16550_REG_SIZE 1
+
+#define CFG_NS16550_CLK get_bus_freq(0)
+
+#define CFG_NS16550_COM1 (CFG_EUMB_ADDR + 0x4600) /* Console port */
+#define CFG_NS16550_COM2 (CFG_EUMB_ADDR + 0x4500) /* AVR port */
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ * For the detail description refer to the MPC8245 user's manual.
+ *
+ * Unless indicated otherwise, the values are
+ * taken from the orignal Linkstation boot code
+ *
+ * Most of the low level configuration setttings are normally used
+ * in cpu/mpc824x/cpu_init.c which is NOT used by this implementation.
+ * Low level initialisation is done in board/linkstation/early_init.S
+ * The values below are included for reference purpose only
+ */
+
+/* FIXME: 32.768 MHz is the crystal frequency but */
+/* the real frequency is lower by about 0.75% */
+#define CONFIG_SYS_CLK_FREQ 32768000
+#define CFG_HZ 1000
+
+/* Bit-field values for MCCR1. */
+#define CFG_ROMNAL 0
+#define CFG_ROMFAL 11
+
+#define CFG_BANK0_ROW 2 /* Only bank 0 used: 13 x n x 4 */
+#define CFG_BANK1_ROW 0
+#define CFG_BANK2_ROW 0
+#define CFG_BANK3_ROW 0
+#define CFG_BANK4_ROW 0
+#define CFG_BANK5_ROW 0
+#define CFG_BANK6_ROW 0
+#define CFG_BANK7_ROW 0
+
+/* Bit-field values for MCCR2. */
+#define CFG_TSWAIT 0
+#define CFG_REFINT 1400
+
+/* Burst To Precharge. Bits of this value go to MCCR3 and MCCR4. */
+#define CFG_BSTOPRE 121
+
+/* Bit-field values for MCCR3. */
+#define CFG_REFREC 7
+
+/* Bit-field values for MCCR4. */
+#define CFG_PRETOACT 2
+#define CFG_ACTTOPRE 5 /* Original value was 2 */
+#define CFG_ACTORW 2
+#define CFG_SDMODE_CAS_LAT 2 /* For 100MHz bus. Use 3 for 133MHz */
+#define CFG_REGISTERD_TYPE_BUFFER 1
+#define CFG_EXTROM 1 /* Original setting but there is no EXTROM */
+#define CFG_REGDIMM 0
+#define CFG_DBUS_SIZE2 1
+#define CFG_SDMODE_WRAP 0
+
+#define CFG_PGMAX 0x32 /* All boards use this setting. Original 0x92 */
+#define CFG_SDRAM_DSCD 0x30
+
+/* Memory bank settings.
+ * Only bits 20-29 are actually used from these vales to set the
+ * start/end addresses. The upper two bits will always be 0, and the lower
+ * 20 bits will be 0x00000 for a start address, or 0xfffff for an end
+ * address. Refer to the MPC8240 book.
+ */
+
+#define CFG_BANK0_START 0x00000000
+#define CFG_BANK0_END (CFG_MAX_RAM_SIZE - 1)
+#define CFG_BANK0_ENABLE 1
+#define CFG_BANK1_START 0x3ff00000
+#define CFG_BANK1_END 0x3fffffff
+#define CFG_BANK1_ENABLE 0
+#define CFG_BANK2_START 0x3ff00000
+#define CFG_BANK2_END 0x3fffffff
+#define CFG_BANK2_ENABLE 0
+#define CFG_BANK3_START 0x3ff00000
+#define CFG_BANK3_END 0x3fffffff
+#define CFG_BANK3_ENABLE 0
+#define CFG_BANK4_START 0x3ff00000
+#define CFG_BANK4_END 0x3fffffff
+#define CFG_BANK4_ENABLE 0
+#define CFG_BANK5_START 0x3ff00000
+#define CFG_BANK5_END 0x3fffffff
+#define CFG_BANK5_ENABLE 0
+#define CFG_BANK6_START 0x3ff00000
+#define CFG_BANK6_END 0x3fffffff
+#define CFG_BANK6_ENABLE 0
+#define CFG_BANK7_START 0x3ff00000
+#define CFG_BANK7_END 0x3fffffff
+#define CFG_BANK7_ENABLE 0
+
+#define CFG_ODCR 0x95 /* 0x15 or 0x95 ? */
+
+/*----------------------------------------------------------------------
+ * Initial BAT mappings
+ */
+
+/* NOTES:
+ * 1) GUARDED and WRITETHROUGH not allowed in IBATS
+ * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT
+ */
+
+/* SDRAM */
+#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
+#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_128M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT0L CFG_IBAT0L
+#define CFG_DBAT0U CFG_IBAT0U
+
+/* EUMB: 1MB of address space */
+#define CFG_IBAT1L (CFG_EUMB_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT1U (CFG_EUMB_ADDR | BATU_BL_1M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT1L (CFG_IBAT1L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT1U CFG_IBAT1U
+
+/* PCI Mem: 256MB of address space */
+#define CFG_IBAT2L (CFG_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT2U (CFG_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT2L (CFG_IBAT2L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT2U CFG_IBAT2U
+
+/* PCI and local ROM/Flash: last 32MB of address space */
+#define CFG_IBAT3L (CFG_MISC_REGION_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
+#define CFG_IBAT3U (CFG_MISC_REGION_ADDR | BATU_BL_32M | BATU_VS | BATU_VP)
+
+#define CFG_DBAT3L (CFG_IBAT3L | BATL_GUARDEDSTORAGE)
+#define CFG_DBAT3U CFG_IBAT3U
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ *
+ * FIXME: This doesn't appear to be true for the newer kernels
+ * which map more that 8 MB
+ */
+#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#undef CFG_FLASH_PROTECTION
+#define CFG_MAX_FLASH_BANKS 1 /* Max number of flash banks */
+#define CFG_MAX_FLASH_SECT 72 /* Max number of sectors per flash */
+
+#define CFG_FLASH_ERASE_TOUT 12000
+#define CFG_FLASH_WRITE_TOUT 1000
+
+
+#define CFG_ENV_IS_IN_FLASH
+/*
+ * The original LinkStation flash organisation uses
+ * 448 kB (0xFFF00000 - 0xFFF6FFFF) for the boot loader
+ * We use the last sector of this area to store the environment
+ * which leaves max. 384 kB for the U-Boot itself
+ */
+#define CFG_ENV_ADDR 0xFFF60000
+#define CFG_ENV_SIZE 0x00010000
+#define CFG_ENV_SECT_SIZE 0x00010000
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE 32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
+#endif
+
+/*-----------------------------------------------------------------------
+ * IDE/ATA definitions
+ */
+#undef CONFIG_IDE_LED /* No IDE LED */
+#define CONFIG_IDE_RESET /* no reset for ide supported */
+#define CONFIG_IDE_PREINIT /* check for units */
+#define CONFIG_LBA48 /* 48 bit LBA supported */
+
+#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) || defined(CONFIG_HGLAN)
+#define CFG_IDE_MAXBUS 1 /* Scan only 1 IDE bus */
+#define CFG_IDE_MAXDEVICE 1 /* Only 1 drive per IDE bus */
+#elif defined(CONFIG_HGTL)
+#define CFG_IDE_MAXBUS 2 /* Max. 2 IDE busses */
+#define CFG_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */
+#else
+#error Config IDE: Unknown LinkStation type
+#endif
+
+#define CFG_ATA_BASE_ADDR 0
+
+#define CFG_ATA_DATA_OFFSET 0 /* Offset for data I/O */
+#define CFG_ATA_REG_OFFSET 0 /* Offset for normal registers */
+#define CFG_ATA_ALT_OFFSET 0 /* Offset for alternate registers */
+
+/*-----------------------------------------------------------------------
+ * Partitions and file system
+ */
+#define CONFIG_DOS_PARTITION
+
+/*-----------------------------------------------------------------------
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#endif /* __CONFIG_H */
+
+/* vim: set ts=4: */
diff --git a/packages/uboot-utils/env-Makefile.patch b/packages/uboot/u-boot-1.2.0/env-Makefile.patch
index ad3a6b39a3..ad3a6b39a3 100644
--- a/packages/uboot-utils/env-Makefile.patch
+++ b/packages/uboot/u-boot-1.2.0/env-Makefile.patch
diff --git a/packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty b/packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config b/packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config
new file mode 100644
index 0000000000..9fe07672c5
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config
@@ -0,0 +1,6 @@
+# Configuration file for fw_(printenv/saveenv) utility.
+# Up to two entries are valid, in this case the redundand
+# environment sector is assumed present.
+
+# MTD device name Device offset Env. size Flash sector size
+/dev/mtd1 0x0000 0x4000 0x4000
diff --git a/packages/uboot-utils/fw_env.c.patch b/packages/uboot/u-boot-1.2.0/fw_env.c.patch
index 62f364ad4a..62f364ad4a 100644
--- a/packages/uboot-utils/fw_env.c.patch
+++ b/packages/uboot/u-boot-1.2.0/fw_env.c.patch
diff --git a/packages/uboot/u-boot-1.2.0/fw_env.config b/packages/uboot/u-boot-1.2.0/fw_env.config
new file mode 100644
index 0000000000..2432bd866c
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/fw_env.config
@@ -0,0 +1,7 @@
+# Configuration file for fw_(printenv/saveenv) utility.
+# Up to two entries are valid, in this case the redundand
+# environment sector is assumed present.
+
+# MTD device name Device offset Env. size Flash sector size
+/dev/mtd1 0x0000 0x4000 0x4000
+/dev/mtd2 0x0000 0x4000 0x4000
diff --git a/packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff b/packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff
new file mode 100644
index 0000000000..02027b1062
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff
@@ -0,0 +1,2286 @@
+diff --git a/arch/powerpc/boot/dts/kuroboxHG.dts b/arch/powerpc/boot/dts/kuroboxHG.dts
+new file mode 100644
+index 0000000..6c76ef6
+--- /dev/null
++++ b/arch/powerpc/boot/dts/kuroboxHG.dts
+@@ -0,0 +1,183 @@
++/*
++ * Device Tree Souce for Buffalo KuroboxHG
++ *
++ * Based on sandpoint.dts
++ *
++ * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de>
++ *
++ * This file is licensed under
++ * the terms of the GNU General Public License version 2. This program
++ * is licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++
++XXXX add flash parts, rtc, ??
++
++build with: "dtc -f -I dts -O dtb -o kuroboxHG.dtb -V 16 kuroboxHG.dts"
++
++
++ */
++
++/ {
++ linux,phandle = <1000>;
++ model = "KuroboxHG";
++ compatible = "linkstation";
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ cpus {
++ linux,phandle = <2000>;
++ #cpus = <1>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++
++ PowerPC,603e { /* Really 8241 */
++ linux,phandle = <2100>;
++ linux,boot-cpu;
++ device_type = "cpu";
++ reg = <0>;
++ clock-frequency = <fdad680>; /* Fixed by bootwrapper */
++ timebase-frequency = <1F04000>; /* Fixed by bootwrapper */
++ bus-frequency = <0>; /* From bootloader */
++ /* Following required by dtc but not used */
++ i-cache-line-size = <0>;
++ d-cache-line-size = <0>;
++ i-cache-size = <4000>;
++ d-cache-size = <4000>;
++ };
++ };
++
++ memory {
++ linux,phandle = <3000>;
++ device_type = "memory";
++ reg = <00000000 08000000>;
++ };
++
++ soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */
++ linux,phandle = <4000>;
++ #address-cells = <1>;
++ #size-cells = <1>;
++ #interrupt-cells = <2>;
++ device_type = "soc";
++ compatible = "mpc10x";
++ store-gathering = <0>; /* 0 == off, !0 == on */
++ reg = <80000000 00100000>;
++ ranges = <80000000 80000000 70000000 /* pci mem space */
++ fc000000 fc000000 00100000 /* EUMB */
++ fe000000 fe000000 00c00000 /* pci i/o space */
++ fec00000 fec00000 00300000 /* pci cfg regs */
++ fef00000 fef00000 00100000>; /* pci iack */
++
++ dma@80001100 {
++ linux,phandle = <4100>;
++ #interrupt-cells = <1>;
++ #address-cells = <1>;
++ #size-cells = <1>;
++ device_type = "dma";
++ compatible = "fsl-dma";
++ clock-frequency = <0>;
++ reg = <80001100 24>;
++ interrupts = <6 0>;
++ interrupt-parent = <4400>;
++ };
++
++ dma@80001200 {
++ linux,phandle = <4200>;
++ #interrupt-cells = <1>;
++ #address-cells = <1>;
++ #size-cells = <1>;
++ device_type = "dma";
++ compatible = "fsl-dma";
++ clock-frequency = <0>;
++ reg = <80001200 24>;
++ interrupts = <7 0>;
++ interrupt-parent = <4400>;
++ };
++
++ i2c@80003000 {
++ linux,phandle = <4300>;
++ device_type = "i2c";
++ compatible = "fsl-i2c";
++ clock-frequency = <0>;
++ reg = <80003000 1000>;
++ interrupts = <5 2>;
++ interrupt-parent = <4400>;
++ };
++
++ serial@80004500 {
++ linux,phandle = <4511>;
++ device_type = "serial";
++ compatible = "ns16550";
++ reg = <80004500 8>;
++ clock-frequency = <7c044a8>;
++ current-speed = <2580>;
++ interrupts = <9 2>;
++ interrupt-parent = <4400>;
++ };
++
++ serial@80004600 {
++ linux,phandle = <4512>;
++ device_type = "serial";
++ compatible = "ns16550";
++ reg = <80004600 8>;
++ clock-frequency = <7c044a8>;
++ current-speed = <e100>;
++ interrupts = <a 0>;
++ interrupt-parent = <4400>;
++ };
++
++ pic@80040000 {
++ linux,phandle = <4400>;
++ #interrupt-cells = <2>;
++ #address-cells = <0>;
++ device_type = "open-pic";
++ compatible = "chrp,open-pic";
++ interrupt-controller;
++ reg = <80040000 40000>;
++ clock-frequency = <0>; /* ??? */
++ built-in;
++ };
++
++ pci@fec00000 {
++ linux,phandle = <4500>;
++ #address-cells = <3>;
++ #size-cells = <2>;
++ #interrupt-cells = <1>;
++ device_type = "pci";
++ compatible = "mpc10x-pci";
++ reg = <fec00000 400000>;
++ ranges = <01000000 0 0 fe000000 0 00c00000
++ 02000000 0 80000000 80000000 0 70000000>;
++ bus-range = <0 ff>;
++ clock-frequency = <7f28155>;
++ interrupt-parent = <4400>;
++ interrupt-map-mask = <f800 0 0 7>;
++ interrupt-map = <
++ /* IDSEL 0x11 - IRQ0 ETH */
++ 5800 0 0 1 4400 0 1
++ 5800 0 0 2 4400 1 1
++ 5800 0 0 3 4400 2 1
++ 5800 0 0 4 4400 3 1
++ /* IDSEL 0x12 - IRQ1 IDE0 */
++ 6000 0 0 1 4400 1 1
++ 6000 0 0 2 4400 2 1
++ 6000 0 0 3 4400 3 1
++ 6000 0 0 4 4400 0 1
++ /* IDSEL 0x13 - IRQ4 IDE1 */
++ 6800 0 0 1 4400 3 1
++ 6800 0 0 2 4400 0 1
++ 6800 0 0 3 4400 1 1
++ 6800 0 0 4 4400 2 1
++ /* IDSEL 0x14 - IRQ3 USB2.0 */
++ 7000 0 0 1 4400 3 1
++ 7000 0 0 2 4400 3 1
++ 7000 0 0 3 4400 3 1
++ 7000 0 0 4 4400 3 1
++ /* IDSEL 0x15 - IRQ2 fan ctrl*/
++ 7800 0 0 1 4400 2 1
++ 7800 0 0 2 4400 3 1
++ 7800 0 0 3 4400 0 1
++ 7800 0 0 4 4400 1 1
++ >;
++ };
++ };
++};
+diff --git a/arch/powerpc/configs/kuroboxhg_defconfig b/arch/powerpc/configs/kuroboxhg_defconfig
+new file mode 100644
+index 0000000..136632f
+--- /dev/null
++++ b/arch/powerpc/configs/kuroboxhg_defconfig
+@@ -0,0 +1,1577 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.19-rc2
++# Wed Nov 1 16:56:07 2006
++#
++# CONFIG_PPC64 is not set
++CONFIG_PPC32=y
++CONFIG_PPC_MERGE=y
++CONFIG_MMU=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_IRQ_PER_CPU=y
++CONFIG_RWSEM_XCHGADD_ALGORITHM=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_FIND_NEXT_BIT=y
++CONFIG_PPC=y
++CONFIG_EARLY_PRINTK=y
++CONFIG_GENERIC_NVRAM=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
++CONFIG_ARCH_MAY_HAVE_PC_FDC=y
++CONFIG_PPC_OF=y
++CONFIG_PPC_UDBG_16550=y
++# CONFIG_GENERIC_TBSYNC is not set
++CONFIG_AUDIT_ARCH=y
++# CONFIG_DEFAULT_UIMAGE is not set
++
++#
++# Processor support
++#
++CONFIG_CLASSIC32=y
++# CONFIG_PPC_52xx is not set
++# CONFIG_PPC_82xx is not set
++# CONFIG_PPC_83xx is not set
++# CONFIG_PPC_85xx is not set
++# CONFIG_PPC_86xx is not set
++# CONFIG_40x is not set
++# CONFIG_44x is not set
++# CONFIG_8xx is not set
++# CONFIG_E200 is not set
++CONFIG_6xx=y
++CONFIG_PPC_FPU=y
++# CONFIG_ALTIVEC is not set
++CONFIG_PPC_STD_MMU=y
++CONFIG_PPC_STD_MMU_32=y
++# CONFIG_SMP is not set
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION="-kuroboxHG"
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++CONFIG_POSIX_MQUEUE=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++# CONFIG_RELAY is not set
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++# CONFIG_SYSCTL_SYSCALL is not set
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++
++#
++# Platform support
++#
++# CONFIG_PPC_MULTIPLATFORM is not set
++CONFIG_EMBEDDED6xx=y
++# CONFIG_APUS is not set
++# CONFIG_PPC_CELL is not set
++# CONFIG_PPC_CELL_NATIVE is not set
++# CONFIG_PPC_RTAS is not set
++# CONFIG_MMIO_NVRAM is not set
++# CONFIG_PPC_MPC106 is not set
++# CONFIG_PPC_970_NAP is not set
++# CONFIG_CPU_FREQ is not set
++# CONFIG_TAU is not set
++# CONFIG_KATANA is not set
++# CONFIG_WILLOW is not set
++# CONFIG_CPCI690 is not set
++# CONFIG_POWERPMC250 is not set
++# CONFIG_CHESTNUT is not set
++# CONFIG_SPRUCE is not set
++# CONFIG_HDPU is not set
++# CONFIG_EV64260 is not set
++# CONFIG_LOPEC is not set
++# CONFIG_MVME5100 is not set
++# CONFIG_PPLUS is not set
++# CONFIG_PRPMC750 is not set
++# CONFIG_PRPMC800 is not set
++# CONFIG_SANDPOINT is not set
++CONFIG_LINKSTATION=y
++# CONFIG_MPC7448HPC2 is not set
++# CONFIG_RADSTONE_PPC7D is not set
++# CONFIG_PAL4 is not set
++# CONFIG_GEMINI is not set
++# CONFIG_EST8260 is not set
++# CONFIG_SBC82xx is not set
++# CONFIG_SBS8260 is not set
++# CONFIG_RPX8260 is not set
++# CONFIG_TQM8260 is not set
++# CONFIG_ADS8272 is not set
++# CONFIG_PQ2FADS is not set
++# CONFIG_LITE5200 is not set
++# CONFIG_EV64360 is not set
++CONFIG_PPC_GEN550=y
++CONFIG_MPC10X_BRIDGE=y
++CONFIG_MPC10X_OPENPIC=y
++# CONFIG_MPC10X_STORE_GATHERING is not set
++# CONFIG_WANT_EARLY_SERIAL is not set
++CONFIG_MPIC=y
++
++#
++# Kernel options
++#
++# CONFIG_HIGHMEM is not set
++CONFIG_HZ_100=y
++# CONFIG_HZ_250 is not set
++# CONFIG_HZ_1000 is not set
++CONFIG_HZ=100
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
++# CONFIG_PREEMPT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_POPULATES_NODE_MAP=y
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_PROC_DEVICETREE=y
++CONFIG_CMDLINE_BOOL=y
++CONFIG_CMDLINE="console=ttyS1,57600 root=/dev/sdd1 netconsole=@192.168.1.7/eth0,@192.168.1.1/00:50:BF:A4:59:71 rtc-rs5c372.probe=0,0x32"
++# CONFIG_PM is not set
++# CONFIG_SECCOMP is not set
++CONFIG_ISA_DMA_API=y
++
++#
++# Bus options
++#
++CONFIG_GENERIC_ISA_DMA=y
++# CONFIG_MPIC_WEIRD is not set
++# CONFIG_PPC_I8259 is not set
++CONFIG_PPC_INDIRECT_PCI=y
++CONFIG_FSL_SOC=y
++CONFIG_PCI=y
++CONFIG_PCI_DOMAINS=y
++# CONFIG_PCIEPORTBUS is not set
++# CONFIG_PCI_MULTITHREAD_PROBE is not set
++# CONFIG_PCI_DEBUG is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# PCI Hotplug Support
++#
++# CONFIG_HOTPLUG_PCI is not set
++
++#
++# Advanced setup
++#
++# CONFIG_ADVANCED_OPTIONS is not set
++
++#
++# Default settings for advanced configuration options are used
++#
++CONFIG_HIGHMEM_START=0xfe000000
++CONFIG_LOWMEM_SIZE=0x30000000
++CONFIG_KERNEL_START=0xc0000000
++CONFIG_TASK_SIZE=0x80000000
++CONFIG_BOOT_LOAD=0x00800000
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++
++#
++# IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++
++#
++# Core Netfilter Configuration
++#
++# CONFIG_NETFILTER_NETLINK is not set
++CONFIG_NETFILTER_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
++# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
++# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
++# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
++# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
++# CONFIG_NETFILTER_XT_MATCH_REALM is not set
++# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
++CONFIG_NETFILTER_XT_MATCH_STATE=m
++# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
++# CONFIG_NETFILTER_XT_MATCH_STRING is not set
++# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
++
++#
++# IP: Netfilter Configuration
++#
++CONFIG_IP_NF_CONNTRACK=m
++# CONFIG_IP_NF_CT_ACCT is not set
++# CONFIG_IP_NF_CONNTRACK_MARK is not set
++# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
++# CONFIG_IP_NF_CT_PROTO_SCTP is not set
++CONFIG_IP_NF_FTP=m
++CONFIG_IP_NF_IRC=m
++# CONFIG_IP_NF_NETBIOS_NS is not set
++CONFIG_IP_NF_TFTP=m
++# CONFIG_IP_NF_AMANDA is not set
++# CONFIG_IP_NF_PPTP is not set
++# CONFIG_IP_NF_H323 is not set
++# CONFIG_IP_NF_SIP is not set
++# CONFIG_IP_NF_QUEUE is not set
++CONFIG_IP_NF_IPTABLES=m
++CONFIG_IP_NF_MATCH_IPRANGE=m
++# CONFIG_IP_NF_MATCH_TOS is not set
++# CONFIG_IP_NF_MATCH_RECENT is not set
++# CONFIG_IP_NF_MATCH_ECN is not set
++# CONFIG_IP_NF_MATCH_AH is not set
++# CONFIG_IP_NF_MATCH_TTL is not set
++# CONFIG_IP_NF_MATCH_OWNER is not set
++# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
++# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
++CONFIG_IP_NF_FILTER=m
++CONFIG_IP_NF_TARGET_REJECT=m
++# CONFIG_IP_NF_TARGET_LOG is not set
++# CONFIG_IP_NF_TARGET_ULOG is not set
++# CONFIG_IP_NF_TARGET_TCPMSS is not set
++CONFIG_IP_NF_NAT=m
++CONFIG_IP_NF_NAT_NEEDED=y
++CONFIG_IP_NF_TARGET_MASQUERADE=m
++CONFIG_IP_NF_TARGET_REDIRECT=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_SAME=m
++# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
++CONFIG_IP_NF_NAT_IRC=m
++CONFIG_IP_NF_NAT_FTP=m
++CONFIG_IP_NF_NAT_TFTP=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_TOS=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_IEEE80211=m
++CONFIG_IEEE80211_DEBUG=y
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++CONFIG_IEEE80211_CRYPT_TKIP=m
++CONFIG_IEEE80211_SOFTMAC=m
++CONFIG_IEEE80211_SOFTMAC_DEBUG=y
++CONFIG_WIRELESS_EXT=y
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_CONCAT=y
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++CONFIG_MTD_JEDECPROBE=y
++CONFIG_MTD_GEN_PROBE=y
++CONFIG_MTD_CFI_ADV_OPTIONS=y
++CONFIG_MTD_CFI_NOSWAP=y
++# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
++CONFIG_MTD_CFI_GEOMETRY=y
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++# CONFIG_MTD_CFI_I2 is not set
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_OTP is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++CONFIG_MTD_CFI_AMDSTD=y
++# CONFIG_MTD_CFI_STAA is not set
++CONFIG_MTD_CFI_UTIL=y
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0xffc00000
++CONFIG_MTD_PHYSMAP_LEN=0x400000
++CONFIG_MTD_PHYSMAP_BANKWIDTH=1
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_SX8 is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=2
++CONFIG_BLK_DEV_RAM_SIZE=8192
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++CONFIG_CHR_DEV_SG=y
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC94XX is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ARCMSR is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
++# CONFIG_SCSI_HPTIOP is not set
++# CONFIG_SCSI_BUSLOGIC is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_EATA is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GDTH is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_STEX is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_IPR is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_QLA_ISCSI is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++CONFIG_ATA=y
++# CONFIG_SATA_AHCI is not set
++# CONFIG_SATA_SVW is not set
++# CONFIG_ATA_PIIX is not set
++# CONFIG_SATA_MV is not set
++# CONFIG_SATA_NV is not set
++# CONFIG_PDC_ADMA is not set
++# CONFIG_SATA_QSTOR is not set
++# CONFIG_SATA_PROMISE is not set
++# CONFIG_SATA_SX4 is not set
++# CONFIG_SATA_SIL is not set
++# CONFIG_SATA_SIL24 is not set
++# CONFIG_SATA_SIS is not set
++# CONFIG_SATA_ULI is not set
++# CONFIG_SATA_VIA is not set
++# CONFIG_SATA_VITESSE is not set
++# CONFIG_PATA_ALI is not set
++# CONFIG_PATA_AMD is not set
++# CONFIG_PATA_ARTOP is not set
++# CONFIG_PATA_ATIIXP is not set
++# CONFIG_PATA_CMD64X is not set
++# CONFIG_PATA_CS5520 is not set
++# CONFIG_PATA_CS5530 is not set
++# CONFIG_PATA_CYPRESS is not set
++# CONFIG_PATA_EFAR is not set
++# CONFIG_ATA_GENERIC is not set
++# CONFIG_PATA_HPT366 is not set
++# CONFIG_PATA_HPT37X is not set
++# CONFIG_PATA_HPT3X2N is not set
++# CONFIG_PATA_HPT3X3 is not set
++# CONFIG_PATA_IT821X is not set
++# CONFIG_PATA_JMICRON is not set
++# CONFIG_PATA_TRIFLEX is not set
++# CONFIG_PATA_MPIIX is not set
++# CONFIG_PATA_OLDPIIX is not set
++# CONFIG_PATA_NETCELL is not set
++# CONFIG_PATA_NS87410 is not set
++# CONFIG_PATA_OPTI is not set
++# CONFIG_PATA_OPTIDMA is not set
++# CONFIG_PATA_PDC_OLD is not set
++# CONFIG_PATA_RADISYS is not set
++# CONFIG_PATA_RZ1000 is not set
++# CONFIG_PATA_SC1200 is not set
++# CONFIG_PATA_SERVERWORKS is not set
++# CONFIG_PATA_PDC2027X is not set
++CONFIG_PATA_SIL680=y
++# CONFIG_PATA_SIS is not set
++# CONFIG_PATA_VIA is not set
++# CONFIG_PATA_WINBOND is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_SPI is not set
++# CONFIG_FUSION_FC is not set
++# CONFIG_FUSION_SAS is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++
++#
++# Macintosh device drivers
++#
++# CONFIG_WINDFARM is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++CONFIG_TUN=m
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++
++#
++# PHY device support
++#
++
++#
++# Ethernet (10 or 100Mbit)
++#
++# CONFIG_NET_ETHERNET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++CONFIG_R8169=y
++# CONFIG_R8169_NAPI is not set
++# CONFIG_SIS190 is not set
++# CONFIG_SKGE is not set
++# CONFIG_SKY2 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_BNX2 is not set
++# CONFIG_QLA3XXX is not set
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_CHELSIO_T1 is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++# CONFIG_MYRI10GE is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_NET_WIRELESS_RTNETLINK is not set
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++
++#
++# Wireless 802.11b ISA/PCI cards support
++#
++# CONFIG_IPW2100 is not set
++# CONFIG_IPW2200 is not set
++# CONFIG_AIRO is not set
++# CONFIG_HERMES is not set
++# CONFIG_ATMEL is not set
++
++#
++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
++#
++# CONFIG_PRISM54 is not set
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_HOSTAP is not set
++# CONFIG_BCM43XX is not set
++# CONFIG_ZD1211RW is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NET_FC is not set
++# CONFIG_SHAPER is not set
++CONFIG_NETCONSOLE=y
++CONFIG_NETPOLL=y
++# CONFIG_NETPOLL_RX is not set
++# CONFIG_NETPOLL_TRAP is not set
++CONFIG_NET_POLL_CONTROLLER=y
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++CONFIG_INPUT_EVDEV=m
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++CONFIG_INPUT_MISC=y
++CONFIG_INPUT_UINPUT=m
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_I8042 is not set
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_PCIPS2 is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++CONFIG_SERIAL_8250=y
++CONFIG_SERIAL_8250_CONSOLE=y
++CONFIG_SERIAL_8250_PCI=y
++CONFIG_SERIAL_8250_NR_UARTS=4
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++# CONFIG_SERIAL_8250_EXTENDED is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_NVRAM is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++
++#
++# I2C support
++#
++CONFIG_I2C=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_ALI1535 is not set
++# CONFIG_I2C_ALI1563 is not set
++# CONFIG_I2C_ALI15X3 is not set
++# CONFIG_I2C_AMD756 is not set
++# CONFIG_I2C_AMD8111 is not set
++# CONFIG_I2C_I801 is not set
++# CONFIG_I2C_I810 is not set
++# CONFIG_I2C_PIIX4 is not set
++CONFIG_I2C_MPC=y
++# CONFIG_I2C_NFORCE2 is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_PROSAVAGE is not set
++# CONFIG_I2C_SAVAGE4 is not set
++# CONFIG_I2C_SIS5595 is not set
++# CONFIG_I2C_SIS630 is not set
++# CONFIG_I2C_SIS96X is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_VIA is not set
++# CONFIG_I2C_VIAPRO is not set
++# CONFIG_I2C_VOODOO3 is not set
++# CONFIG_I2C_PCA_ISA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++CONFIG_SENSORS_EEPROM=m
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_M41T00 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++
++#
++# Hardware Monitoring support
++#
++CONFIG_HWMON=y
++# CONFIG_HWMON_VID is not set
++# CONFIG_SENSORS_ABITUGURU is not set
++# CONFIG_SENSORS_ADM1021 is not set
++# CONFIG_SENSORS_ADM1025 is not set
++# CONFIG_SENSORS_ADM1026 is not set
++# CONFIG_SENSORS_ADM1031 is not set
++# CONFIG_SENSORS_ADM9240 is not set
++# CONFIG_SENSORS_ASB100 is not set
++# CONFIG_SENSORS_ATXP1 is not set
++# CONFIG_SENSORS_DS1621 is not set
++# CONFIG_SENSORS_F71805F is not set
++# CONFIG_SENSORS_FSCHER is not set
++# CONFIG_SENSORS_FSCPOS is not set
++# CONFIG_SENSORS_GL518SM is not set
++# CONFIG_SENSORS_GL520SM is not set
++# CONFIG_SENSORS_IT87 is not set
++# CONFIG_SENSORS_LM63 is not set
++# CONFIG_SENSORS_LM75 is not set
++# CONFIG_SENSORS_LM77 is not set
++# CONFIG_SENSORS_LM78 is not set
++# CONFIG_SENSORS_LM80 is not set
++# CONFIG_SENSORS_LM83 is not set
++# CONFIG_SENSORS_LM85 is not set
++# CONFIG_SENSORS_LM87 is not set
++# CONFIG_SENSORS_LM90 is not set
++# CONFIG_SENSORS_LM92 is not set
++# CONFIG_SENSORS_MAX1619 is not set
++# CONFIG_SENSORS_PC87360 is not set
++# CONFIG_SENSORS_SIS5595 is not set
++# CONFIG_SENSORS_SMSC47M1 is not set
++# CONFIG_SENSORS_SMSC47M192 is not set
++# CONFIG_SENSORS_SMSC47B397 is not set
++# CONFIG_SENSORS_VIA686A is not set
++# CONFIG_SENSORS_VT1211 is not set
++# CONFIG_SENSORS_VT8231 is not set
++# CONFIG_SENSORS_W83781D is not set
++# CONFIG_SENSORS_W83791D is not set
++# CONFIG_SENSORS_W83792D is not set
++# CONFIG_SENSORS_W83L785TS is not set
++# CONFIG_SENSORS_W83627HF is not set
++# CONFIG_SENSORS_W83627EHF is not set
++# CONFIG_HWMON_DEBUG_CHIP is not set
++
++#
++# Misc devices
++#
++# CONFIG_TIFM_CORE is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++CONFIG_FIRMWARE_EDID=y
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++CONFIG_USB_EHCI_HCD=y
++# CONFIG_USB_EHCI_SPLIT_ISO is not set
++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_UHCI_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=m
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Input Devices
++#
++# CONFIG_USB_HID is not set
++
++#
++# USB HID Boot Protocol drivers
++#
++# CONFIG_USB_KBD is not set
++# CONFIG_USB_MOUSE is not set
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_ACECAD is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++# CONFIG_USB_TOUCHSCREEN is not set
++# CONFIG_USB_YEALINK is not set
++# CONFIG_USB_XPAD is not set
++# CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
++CONFIG_USB_MON=y
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++CONFIG_USB_SERIAL=y
++CONFIG_USB_SERIAL_CONSOLE=y
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_AIRCABLE is not set
++# CONFIG_USB_SERIAL_AIRPRIME is not set
++# CONFIG_USB_SERIAL_ARK3116 is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_CP2101 is not set
++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++CONFIG_USB_SERIAL_FTDI_SIO=y
++# CONFIG_USB_SERIAL_FUNSOFT is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
++# CONFIG_USB_SERIAL_GARMIN is not set
++# CONFIG_USB_SERIAL_IPW is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_KOBIL_SCT is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_MOS7840 is not set
++# CONFIG_USB_SERIAL_NAVMAN is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_HP4X is not set
++# CONFIG_USB_SERIAL_SAFE is not set
++# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
++# CONFIG_USB_SERIAL_TI is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OPTION is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++# CONFIG_MMC is not set
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
++# InfiniBand support
++#
++# CONFIG_INFINIBAND is not set
++
++#
++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
++#
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++
++#
++# RTC drivers
++#
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++CONFIG_RTC_DRV_RS5C372=y
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_TEST is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# DMA Engine support
++#
++# CONFIG_DMA_ENGINE is not set
++
++#
++# DMA Clients
++#
++
++#
++# DMA Devices
++#
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_ZISOFS_FS=m
++CONFIG_UDF_FS=m
++CONFIG_UDF_NLS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=m
++# CONFIG_NTFS_DEBUG is not set
++# CONFIG_NTFS_RW is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_KCORE=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++# CONFIG_NFS_DIRECTIO is not set
++CONFIG_NFSD=m
++CONFIG_NFSD_V3=y
++# CONFIG_NFSD_V3_ACL is not set
++# CONFIG_NFSD_V4 is not set
++CONFIG_NFSD_TCP=y
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_EXPORTFS=m
++CONFIG_NFS_ACL_SUPPORT=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++CONFIG_SUNRPC_GSS=y
++CONFIG_RPCSEC_GSS_KRB5=y
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=m
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=m
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=m
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=m
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++CONFIG_LIBCRC32C=m
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
++CONFIG_PLIST=y
++
++#
++# Instrumentation Support
++#
++CONFIG_PROFILING=y
++CONFIG_OPROFILE=m
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_RWSEMS is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++CONFIG_FORCED_INLINING=y
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_DEBUGGER is not set
++# CONFIG_BDI_SWITCH is not set
++# CONFIG_BOOTX_TEXT is not set
++# CONFIG_SERIAL_TEXT_DEBUG is not set
++# CONFIG_PPC_EARLY_DEBUG is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_MANAGER=m
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=m
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_ECB is not set
++# CONFIG_CRYPTO_CBC is not set
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_BLOWFISH=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_TWOFISH_COMMON=m
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=m
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_DEFLATE=m
++CONFIG_CRYPTO_MICHAEL_MIC=m
++CONFIG_CRYPTO_CRC32C=m
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Hardware crypto devices
++#
+diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig
+index 234a861..c1c6748 100644
+--- a/arch/powerpc/platforms/embedded6xx/Kconfig
++++ b/arch/powerpc/platforms/embedded6xx/Kconfig
+@@ -76,6 +76,15 @@ config PRPMC800
+ Select SANDPOINT if configuring for a Motorola Sandpoint X3
+ (any flavor).
+
++config LINKSTATION
++ bool "Linkstation / Kurobox(HG) from Buffalo"
++ select MPIC
++ select FSL_SOC
++ select PPC_UDBG_16550 if SERIAL_8250
++ help
++ Select LINKSTATION if configuring for a PPC-based Linkstation
++ (LS-1) or Kurobox(HG) from Buffalo Technologies.
++
+ config MPC7448HPC2
+ bool "Freescale MPC7448HPC2(Taiga)"
+ select TSI108_BRIDGE
+@@ -210,7 +219,7 @@ config PPC_GEN550
+ depends on SANDPOINT || SPRUCE || PPLUS || \
+ PRPMC750 || PRPMC800 || LOPEC || \
+ (EV64260 && !SERIAL_MPSC) || CHESTNUT || RADSTONE_PPC7D || \
+- 83xx
++ 83xx || LINKSTATION
+ default y
+
+ config FORCE
+@@ -284,13 +293,13 @@ config HARRIER
+
+ config MPC10X_BRIDGE
+ bool
+- depends on POWERPMC250 || LOPEC || SANDPOINT
++ depends on POWERPMC250 || LOPEC || SANDPOINT || LINKSTATION
+ select PPC_INDIRECT_PCI
+ default y
+
+ config MPC10X_OPENPIC
+ bool
+- depends on POWERPMC250 || LOPEC || SANDPOINT
++ depends on POWERPMC250 || LOPEC || SANDPOINT || LINKSTATION
+ default y
+
+ config MPC10X_STORE_GATHERING
+diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile
+index fa499fe..1f3edc7 100644
+--- a/arch/powerpc/platforms/embedded6xx/Makefile
++++ b/arch/powerpc/platforms/embedded6xx/Makefile
+@@ -3,3 +3,4 @@ #
+ #
+ obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
+ obj-$(CONFIG_SANDPOINT) += sandpoint.o
++obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
+diff --git a/arch/powerpc/platforms/embedded6xx/linkstation.c b/arch/powerpc/platforms/embedded6xx/linkstation.c
+new file mode 100644
+index 0000000..30bcb5b
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/linkstation.c
+@@ -0,0 +1,254 @@
++/*
++ * arch/powerpc/platforms/embedded6xx/linkstation.c
++ *
++ * Board setup routines for the Buffalo Linkstation / Kurobox Platform.
++ *
++ * Author: Mark A. Greer
++ * mgreer@mvista.com
++ *
++ * 2000-2003 (c) MontaVista Software, Inc. This file is licensed under
++ * the terms of the GNU General Public License version 2. This program
++ * is licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#include <linux/stddef.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/errno.h>
++#include <linux/reboot.h>
++#include <linux/pci.h>
++#include <linux/kdev_t.h>
++#include <linux/major.h>
++#include <linux/initrd.h>
++#include <linux/console.h>
++#include <linux/delay.h>
++#include <linux/ide.h>
++#include <linux/seq_file.h>
++#include <linux/root_dev.h>
++#include <linux/serial.h>
++#include <linux/tty.h> /* for linux/serial_core.h */
++#include <linux/serial_core.h>
++#include <linux/serial_reg.h>
++#include <linux/serial_8250.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/system.h>
++#include <asm/pgtable.h>
++#include <asm/page.h>
++#include <asm/time.h>
++#include <asm/dma.h>
++#include <asm/io.h>
++#include <asm/machdep.h>
++#include <asm/prom.h>
++#include <asm/smp.h>
++#include <asm/vga.h>
++#include <asm/i8259.h>
++#include <asm/mpic.h>
++#include <asm/todc.h>
++#include <asm/bootinfo.h>
++#include <asm/mpc10x.h>
++#include <asm/pci-bridge.h>
++#include <asm/ppc_sys.h>
++
++static struct mtd_partition linkstation_physmap_partitions[] = {
++ {
++ .name = "mtd_firmimg",
++ .offset = 0x000000,
++ .size = 0x300000,
++ },
++ {
++ .name = "mtd_bootcode",
++ .offset = 0x300000,
++ .size = 0x70000,
++ },
++ {
++ .name = "mtd_status",
++ .offset = 0x370000,
++ .size = 0x10000,
++ },
++ {
++ .name = "mtd_conf",
++ .offset = 0x380000,
++ .size = 0x80000,
++ },
++ {
++ .name = "mtd_allflash",
++ .offset = 0x000000,
++ .size = 0x400000,
++ },
++ {
++ .name = "mtd_data",
++ .offset = 0x310000,
++ .size = 0xf0000,
++ },
++};
++
++/*
++ * Buffalo linkstation interrupt routing.
++ */
++
++void __init linkstation_pcibios_fixup(void)
++{
++ struct pci_dev *dev = NULL;
++
++ for_each_pci_dev(dev)
++ pci_read_irq_line(dev);
++}
++
++static int __init add_bridge(struct device_node *dev)
++{
++ int len;
++ struct pci_controller *hose;
++ int *bus_range;
++
++ printk("Adding PCI host bridge %s\n", dev->full_name);
++
++ bus_range = (int *) get_property(dev, "bus-range", &len);
++ if (bus_range == NULL || len < 2 * sizeof(int))
++ printk(KERN_WARNING "Can't get bus-range for %s, assume"
++ " bus 0\n", dev->full_name);
++
++ hose = pcibios_alloc_controller();
++ if (hose == NULL)
++ return -ENOMEM;
++ hose->first_busno = bus_range ? bus_range[0] : 0;
++ hose->last_busno = bus_range ? bus_range[1] : 0xff;
++ hose->arch_data = dev;
++ setup_indirect_pci(hose, 0xfec00000, 0xfee00000);
++
++ /* Interpret the "ranges" property */
++ /* This also maps the I/O region and sets isa_io/mem_base */
++ pci_process_bridge_OF_ranges(hose, dev, 1);
++
++ return 0;
++}
++
++static void __init linkstation_setup_arch(void)
++{
++ struct device_node *np;
++#ifdef CONFIG_MTD_PHYSMAP
++ physmap_set_partitions(linkstation_physmap_partitions,
++ ARRAY_SIZE(linkstation_physmap_partitions));
++#endif
++
++#ifdef CONFIG_BLK_DEV_INITRD
++ if (initrd_start)
++ ROOT_DEV = Root_RAM0;
++ else
++#endif
++#ifdef CONFIG_ROOT_NFS
++ ROOT_DEV = Root_NFS;
++#else
++ ROOT_DEV = Root_HDA1;
++#endif
++
++ /* Lookup PCI host bridges */
++ for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
++ add_bridge(np);
++
++ ppc_md.pci_swizzle = common_swizzle;
++
++ printk(KERN_INFO "BUFFALO Network Attached Storage Series\n");
++ printk(KERN_INFO "(C) 2002-2005 BUFFALO INC.\n");
++}
++
++/*
++ * Interrupt setup and service. Interrrupts on the linkstation come
++ * from the four PCI slots plus onboard 8241 devices: I2C, DUART.
++ */
++static void __init linkstation_init_IRQ(void)
++{
++ struct mpic *mpic;
++ struct device_node *dnp;
++ void *prop;
++ int size;
++ phys_addr_t paddr;
++
++ dnp = of_find_node_by_type(NULL, "open-pic");
++ if (dnp == NULL)
++ return;
++
++ prop = (struct device_node *)get_property(dnp, "reg", &size);
++ paddr = (phys_addr_t)of_translate_address(dnp, prop);
++
++ mpic = mpic_alloc(dnp, paddr, MPIC_PRIMARY | MPIC_WANTS_RESET, 4, 32, " EPIC ");
++ BUG_ON(mpic == NULL);
++
++ /* PCI IRQs */
++ mpic_assign_isu(mpic, 0, paddr + 0x10200);
++
++ /* I2C */
++ mpic_assign_isu(mpic, 1, paddr + 0x11000);
++
++ /* ttyS0, ttyS1 */
++ mpic_assign_isu(mpic, 2, paddr + 0x11100);
++
++ mpic_init(mpic);
++}
++
++extern void avr_uart_configure(void);
++extern void avr_uart_send(const char);
++
++static void linkstation_restart(char *cmd)
++{
++ local_irq_disable();
++
++ /* Reset system via AVR */
++ avr_uart_configure();
++ /* Send reboot command */
++ avr_uart_send('C');
++
++ for(;;) /* Spin until reset happens */
++ avr_uart_send('G'); /* "kick" */
++}
++
++static void linkstation_power_off(void)
++{
++ local_irq_disable();
++
++ avr_uart_configure();
++ /* send shutdown command */
++ avr_uart_send('E');
++
++ for(;;) /* Spin until power-off happens */
++ avr_uart_send('G'); /* "kick" */
++ /* NOTREACHED */
++}
++
++static void linkstation_halt(void)
++{
++ linkstation_power_off();
++ /* NOTREACHED */
++}
++
++static void linkstation_show_cpuinfo(struct seq_file *m)
++{
++ seq_printf(m, "vendor\t\t: Buffalo Technology\n");
++ seq_printf(m, "machine\t\t: Linkstation I/Kurobox(HG)\n");
++}
++
++static int __init linkstation_probe(void)
++{
++ unsigned long root;
++
++ root = of_get_flat_dt_root();
++
++ if (!of_flat_dt_is_compatible(root, "linkstation"))
++ return 0;
++ return 1;
++}
++
++define_machine(linkstation){
++ .name = "Buffalo Linkstation",
++ .probe = linkstation_probe,
++ .setup_arch = linkstation_setup_arch,
++ .init_IRQ = linkstation_init_IRQ,
++ .show_cpuinfo = linkstation_show_cpuinfo,
++ .pcibios_fixup = linkstation_pcibios_fixup,
++ .get_irq = mpic_get_irq,
++ .restart = linkstation_restart,
++ .power_off = linkstation_power_off,
++ .halt = linkstation_halt,
++ .calibrate_decr = generic_calibrate_decr,
++};
+diff --git a/arch/powerpc/platforms/embedded6xx/ls_uart.c b/arch/powerpc/platforms/embedded6xx/ls_uart.c
+new file mode 100644
+index 0000000..b640115
+--- /dev/null
++++ b/arch/powerpc/platforms/embedded6xx/ls_uart.c
+@@ -0,0 +1,131 @@
++#include <linux/workqueue.h>
++#include <linux/string.h>
++#include <linux/delay.h>
++#include <linux/serial_reg.h>
++#include <linux/serial_8250.h>
++#include <asm/io.h>
++#include <asm/mpc10x.h>
++#include <asm/ppc_sys.h>
++#include <asm/prom.h>
++#include <asm/termbits.h>
++
++static void __iomem *avr_addr;
++static unsigned long avr_clock;
++
++static struct work_struct wd_work;
++
++static void wd_stop(void *unused)
++{
++ const char string[] = "AAAAFFFFJJJJ>>>>VVVV>>>>ZZZZVVVVKKKK";
++ int i = 0, rescue = 8;
++ int len = strlen(string);
++
++ while (rescue--) {
++ int j;
++ char lsr = in_8(avr_addr + UART_LSR);
++
++ if (lsr & (UART_LSR_THRE | UART_LSR_TEMT)) {
++ for (j = 0; j < 16 && i < len; j++, i++)
++ out_8(avr_addr + UART_TX, string[i]);
++ if (i == len) {
++ /* Read "OK" back: 4ms for the last "KKKK"
++ plus a couple bytes back */
++ msleep(7);
++ printk("linkstation: disarming the AVR watchdog: ");
++ while (in_8(avr_addr + UART_LSR) & UART_LSR_DR)
++ printk("%c", in_8(avr_addr + UART_RX));
++ break;
++ }
++ }
++ msleep(17);
++ }
++ printk("\n");
++}
++
++#define AVR_QUOT(clock) ((clock) + 8 * 9600) / (16 * 9600)
++
++void avr_uart_configure(void)
++{
++ unsigned char cval = UART_LCR_WLEN8;
++ unsigned int quot = AVR_QUOT(avr_clock);
++
++ if (!avr_addr || !avr_clock)
++ return;
++
++ out_8(avr_addr + UART_LCR, cval); /* initialise UART */
++ out_8(avr_addr + UART_MCR, 0);
++ out_8(avr_addr + UART_IER, 0);
++
++ cval |= UART_LCR_STOP | UART_LCR_PARITY | UART_LCR_EPAR;
++
++ out_8(avr_addr + UART_LCR, cval); /* Set character format */
++
++ out_8(avr_addr + UART_LCR, cval | UART_LCR_DLAB); /* set DLAB */
++ out_8(avr_addr + UART_DLL, quot & 0xff); /* LS of divisor */
++ out_8(avr_addr + UART_DLM, quot >> 8); /* MS of divisor */
++ out_8(avr_addr + UART_LCR, cval); /* reset DLAB */
++ out_8(avr_addr + UART_FCR, UART_FCR_ENABLE_FIFO); /* enable FIFO */
++}
++
++void avr_uart_send(const char c)
++{
++ if (!avr_addr || !avr_clock)
++ return;
++
++ out_8(avr_addr + UART_TX, c);
++ out_8(avr_addr + UART_TX, c);
++ out_8(avr_addr + UART_TX, c);
++ out_8(avr_addr + UART_TX, c);
++}
++
++static void __init ls_uart_init(void)
++{
++ local_irq_disable();
++
++#ifndef CONFIG_SERIAL_8250
++ out_8(avr_addr + UART_FCR, UART_FCR_ENABLE_FIFO); /* enable FIFO */
++ out_8(avr_addr + UART_FCR, UART_FCR_ENABLE_FIFO |
++ UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); /* clear FIFOs */
++ out_8(avr_addr + UART_FCR, 0);
++ out_8(avr_addr + UART_IER, 0);
++
++ /* Clear up interrupts */
++ (void) in_8(avr_addr + UART_LSR);
++ (void) in_8(avr_addr + UART_RX);
++ (void) in_8(avr_addr + UART_IIR);
++ (void) in_8(avr_addr + UART_MSR);
++#endif
++ avr_uart_configure();
++
++ local_irq_enable();
++}
++
++static int __init ls_uarts_init(void)
++{
++ struct device_node *avr;
++ phys_addr_t phys_addr;
++ int len;
++
++ avr = of_find_node_by_path("/soc10x/serial@80004500");
++ if (!avr)
++ return -EINVAL;
++
++ avr_clock = *(u32*)get_property(avr, "clock-frequency", &len);
++ phys_addr = ((u32*)get_property(avr, "reg", &len))[0];
++
++ if (!avr_clock || !phys_addr)
++ return -EINVAL;
++
++ avr_addr = ioremap(phys_addr, 32);
++ if (!avr_addr)
++ return -EFAULT;
++
++ ls_uart_init();
++
++ INIT_WORK(&wd_work, wd_stop, NULL);
++ schedule_work(&wd_work);
++
++ return 0;
++}
++
++late_initcall(ls_uarts_init);
+diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
+index f1c7575..25cd8de 100644
+--- a/drivers/net/r8169.c
++++ b/drivers/net/r8169.c
+@@ -1396,41 +1396,6 @@ static void rtl8169_netpoll(struct net_d
+ }
+ #endif
+
+-static void __rtl8169_set_mac_addr(struct net_device *dev, void __iomem *ioaddr)
+-{
+- unsigned int i, j;
+-
+- RTL_W8(Cfg9346, Cfg9346_Unlock);
+- for (i = 0; i < 2; i++) {
+- __le32 l = 0;
+-
+- for (j = 0; j < 4; j++) {
+- l <<= 8;
+- l |= dev->dev_addr[4*i + j];
+- }
+- RTL_W32(MAC0 + 4*i, cpu_to_be32(l));
+- }
+- RTL_W8(Cfg9346, Cfg9346_Lock);
+-}
+-
+-static int rtl8169_set_mac_addr(struct net_device *dev, void *p)
+-{
+- struct rtl8169_private *tp = netdev_priv(dev);
+- struct sockaddr *addr = p;
+-
+- if (!is_valid_ether_addr(addr->sa_data))
+- return -EINVAL;
+-
+- memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+-
+- if (netif_running(dev)) {
+- spin_lock_irq(&tp->lock);
+- __rtl8169_set_mac_addr(dev, tp->mmio_addr);
+- spin_unlock_irq(&tp->lock);
+- }
+- return 0;
+-}
+-
+ static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
+ void __iomem *ioaddr)
+ {
+@@ -1680,7 +1645,6 @@ rtl8169_init_one(struct pci_dev *pdev, c
+ dev->stop = rtl8169_close;
+ dev->tx_timeout = rtl8169_tx_timeout;
+ dev->set_multicast_list = rtl8169_set_rx_mode;
+- dev->set_mac_address = rtl8169_set_mac_addr;
+ dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
+ dev->irq = pdev->irq;
+ dev->base_addr = (unsigned long) ioaddr;
+@@ -1928,8 +1892,6 @@ rtl8169_hw_start(struct net_device *dev)
+ /* Enable all known interrupts by setting the interrupt mask. */
+ RTL_W16(IntrMask, rtl8169_intr_mask);
+
+- __rtl8169_set_mac_addr(dev, ioaddr);
+-
+ netif_start_queue(dev);
+ }
+
diff --git a/packages/uboot/u-boot-1.2.0/qnap.diff b/packages/uboot/u-boot-1.2.0/qnap.diff
new file mode 100644
index 0000000000..b9ac34e6a8
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/qnap.diff
@@ -0,0 +1,1089 @@
+--- u-boot-1.2.0.vanilla/board/qnap/config.mk 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/config.mk 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,35 @@
++#
++# (C) Copyright 2000, 2001
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++# Valid values for TEXT_BASE are:
++#
++# Standard configuration
++# 0xFFF00000 boot from flash
++#
++# Standard configuration
++# 0xFFF60000 chain boot from flash
++#
++
++
++TEXT_BASE = 0xFFF60000
++
++PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
+--- u-boot-1.2.0.vanilla/board/qnap/ide.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/ide.c 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,67 @@
++/*
++ * (C) Copyright 2000
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++ #include <common.h>
++
++#ifdef CFG_CMD_IDE
++#include <ata.h>
++#include <ide.h>
++#include <pci.h>
++
++extern ulong ide_bus_offset[CFG_IDE_MAXBUS];
++extern struct pci_controller hose;
++
++int ide_preinit (void)
++{
++ int status;
++ pci_dev_t devbusfn;
++ int l;
++
++ status = 1;
++ for (l = 0; l < CFG_IDE_MAXBUS; l++) {
++ ide_bus_offset[l] = -ATA_STATUS;
++ }
++ devbusfn = pci_find_device (0x1095, 0x3512, 0);
++
++ if (devbusfn != -1) {
++
++ status = 0;
++
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0,
++ (u32 *) &ide_bus_offset[0]);
++ ide_bus_offset[0] &= 0xfffffffe;
++ ide_bus_offset[0] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[0] & 0xfffffffe,
++ PCI_REGION_IO);
++
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_2,
++ (u32 *) &ide_bus_offset[1]);
++ ide_bus_offset[1] &= 0xfffffffe;
++ ide_bus_offset[1] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[1] & 0xfffffffe,
++ PCI_REGION_IO);
++ }
++ return (status);
++}
++
++#endif /* of CONFIG_CMDS_IDE */
+--- u-boot-1.2.0.vanilla/board/qnap/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/Makefile 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,40 @@
++#
++# (C) Copyright 2000
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS = $(BOARD).o ide.o
++
++$(LIB): .depend $(OBJS)
++ $(AR) crv $@ $(OBJS)
++
++#########################################################################
++
++.depend: Makefile $(OBJS:.o=.c)
++ $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@
++
++sinclude .depend
++
++#########################################################################
+--- u-boot-1.2.0.vanilla/board/qnap/qnap.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/qnap.c 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,126 @@
++/*
++ * Copyright (C) 2006 Andrew Luyten <u-boot@luyten.org.uk>
++ *
++ * Copyright (C) 2000
++ * Rob Taylor, Flying Pig Systems. robt@flyingpig.com.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++
++#include <common.h>
++#include <mpc824x.h>
++#include <pci.h>
++
++int checkboard (void)
++{
++ ulong busfreq = get_bus_freq(0);
++ char buf[32];
++
++ printf("Board: QNAP TS-101/TS-201 local bus at %s MHz\n", strmhz(buf, busfreq));
++ return 0;
++}
++
++
++long int initdram (int board_type)
++{
++ long size;
++ long new_bank0_end;
++ long mear1;
++ long emear1;
++
++ size = get_ram_size(CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE);
++
++ new_bank0_end = size - 1;
++ mear1 = mpc824x_mpc107_getreg(MEAR1);
++ emear1 = mpc824x_mpc107_getreg(EMEAR1);
++ mear1 = (mear1 & 0xFFFFFF00) |
++ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
++ emear1 = (emear1 & 0xFFFFFF00) |
++ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
++ mpc824x_mpc107_setreg(MEAR1, mear1);
++ mpc824x_mpc107_setreg(EMEAR1, emear1);
++
++ return (size);
++}
++
++/*
++ * Initialize PCI Devices, report devices found.
++ */
++#ifndef CONFIG_PCI_PNP
++
++static struct pci_config_table pci_qnap_config_table[] = {
++ /* vendor, device, class */
++ /* bus, dev, func */
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0f, 0, /* RTL8110SC or Intel 82540EM */
++ /* Gigabit ethernet controller */
++ pci_cfgfunc_config_device, { PCI_ETH_IOADDR,
++ PCI_ETH_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0d, 0, /* SII3512 */
++ /* SATA controller */
++ pci_cfgfunc_config_device, { PCI_IDE_IOADDR,
++ PCI_IDE_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 0, /* D720101 USB controller, 1st USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB0_IOADDR,
++ PCI_USB0_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 1, /* D720101 USB controller, 2nd USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB1_IOADDR,
++ PCI_USB1_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 2, /* D720101 USB controller, USB 2.0 */
++ pci_cfgfunc_config_device, { PCI_USB2_IOADDR,
++ PCI_USB2_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { }
++};
++#endif
++
++struct pci_controller hose = {
++#ifndef CONFIG_PCI_PNP
++ config_table: pci_qnap_config_table,
++#endif
++};
++
++void pci_init_board(void)
++{
++ pci_mpc824x_init(&hose);
++
++ /* Reset USB 1.1 !/
++ out_le32(PCI_USB0_MEMADDR+8, 1);
++ out_le32(PCI_USB1_MEMADDR+8, 1);
++ */
++}
+--- u-boot-1.2.0.vanilla/board/qnap/README 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/README 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,10 @@
++*This port of U-Boot will run on a QNAP TS-101/TS-201 NAS*
++Andrew Luyten (u-boot@luyten.org.uk)
++
++Adapted from a Linkstation port by Mihai Georgian
++http://http://www.linuxnotincluded.org.uk/
++
++Adapted from Motorola Sandpoint 3 development system equipped with
++a Unity X4 PPMC card (MPC8240 CPU) only. It is a snapshot of work
++in progress and far from being completed.
++Thomas Koeller
+--- u-boot-1.2.0.vanilla/board/qnap/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/u-boot.lds 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,136 @@
++/*
++ * (C) Copyright 2001
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_ARCH(powerpc)
++SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
++/* Do we need any of these for elf?
++ __DYNAMIC = 0; */
++SECTIONS
++{
++ /* Read-only sections, merged into text segment: */
++ . = + SIZEOF_HEADERS;
++ .interp : { *(.interp) }
++ .hash : { *(.hash) }
++ .dynsym : { *(.dynsym) }
++ .dynstr : { *(.dynstr) }
++ .rel.text : { *(.rel.text) }
++ .rela.text : { *(.rela.text) }
++ .rel.data : { *(.rel.data) }
++ .rela.data : { *(.rela.data) }
++ .rel.rodata : { *(.rel.rodata) }
++ .rela.rodata : { *(.rela.rodata) }
++ .rel.got : { *(.rel.got) }
++ .rela.got : { *(.rela.got) }
++ .rel.ctors : { *(.rel.ctors) }
++ .rela.ctors : { *(.rela.ctors) }
++ .rel.dtors : { *(.rel.dtors) }
++ .rela.dtors : { *(.rela.dtors) }
++ .rel.bss : { *(.rel.bss) }
++ .rela.bss : { *(.rela.bss) }
++ .rel.plt : { *(.rel.plt) }
++ .rela.plt : { *(.rela.plt) }
++ .init : { *(.init) }
++ .plt : { *(.plt) }
++ .text :
++ {
++ cpu/mpc824x/start.o (.text)
++ lib_ppc/board.o (.text)
++ lib_ppc/ppcstring.o (.text)
++ lib_generic/vsprintf.o (.text)
++ lib_generic/crc32.o (.text)
++ lib_generic/zlib.o (.text)
++
++ . = DEFINED(env_offset) ? env_offset : .;
++ common/environment.o (.text)
++
++ *(.text)
++
++ *(.fixup)
++ *(.got1)
++ . = ALIGN(16);
++ *(.rodata)
++ *(.rodata1)
++ *(.rodata.str1.4)
++ *(.eh_frame)
++ }
++ .fini : { *(.fini) } =0
++ .ctors : { *(.ctors) }
++ .dtors : { *(.dtors) }
++
++ /* Read-write section, merged into data segment: */
++ . = (. + 0x0FFF) & 0xFFFFF000;
++ _erotext = .;
++ PROVIDE (erotext = .);
++ .reloc :
++ {
++ *(.got)
++ _GOT2_TABLE_ = .;
++ *(.got2)
++ _FIXUP_TABLE_ = .;
++ *(.fixup)
++ }
++ __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
++ __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
++
++ .data :
++ {
++ *(.data)
++ *(.data1)
++ *(.sdata)
++ *(.sdata2)
++ *(.dynamic)
++ CONSTRUCTORS
++ }
++ _edata = .;
++ PROVIDE (edata = .);
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++
++ . = .;
++ __start___ex_table = .;
++ __ex_table : { *(__ex_table) }
++ __stop___ex_table = .;
++
++ . = ALIGN(4096);
++ __init_begin = .;
++ .text.init : { *(.text.init) }
++ .data.init : { *(.data.init) }
++ . = ALIGN(4096);
++ __init_end = .;
++
++ __bss_start = .;
++ .bss :
++ {
++ *(.sbss) *(.scommon)
++ *(.dynbss)
++ *(.bss)
++ *(COMMON)
++ }
++
++ _end = . ;
++ PROVIDE (end = .);
++}
+--- u-boot-1.2.0.vanilla/cpu/mpc824x/cpu.c 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/cpu/mpc824x/cpu.c 2007-02-26 01:55:37.000000000 +0100
+@@ -44,7 +44,11 @@
+ break;
+
+ case CPU_TYPE_8245:
++#ifdef CONFIG_MPC8241
++ puts ("MPC8241"); /* impossible to distinguish using chip registers */
++#else
+ puts ("MPC8245");
++#endif
+ break;
+
+ default:
+--- u-boot-1.2.0.vanilla/drivers/rtl8169.c 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/drivers/rtl8169.c 2007-02-26 01:55:37.000000000 +0100
+@@ -48,7 +48,10 @@
+ *
+ * Indent Options: indent -kr -i8
+ ***************************************************************************/
+-
++/*
++ * 26 August 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ * Modified to use le32_to_cpu and cpu_to_le32 properly
++ */
+ #include <common.h>
+ #include <malloc.h>
+ #include <net.h>
+@@ -68,6 +71,7 @@
+ static u32 ioaddr;
+
+ /* Condensed operations for readability. */
++#define virt_to_bus(addr) cpu_to_le32(addr)
+ #define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr))
+ #define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
+
+@@ -247,8 +251,15 @@
+ u8 version; /* depend on RTL8169 docs */
+ u32 RxConfigMask; /* should clear the bits supported by this chip */
+ } rtl_chip_info[] = {
+- {"RTL-8169", 0x00, 0xff7e1880,},
+- {"RTL-8169", 0x04, 0xff7e1880,},
++ {"RTL8169", 0x00, 0xff7e1880,},
++ {"RTL8169s/8110s", 0x02, 0xff7e1880,},
++ {"RTL8169s/8110s", 0x04, 0xff7e1880,},
++ {"RTL8169sb/8110sb", 0x10, 0xff7e1880,},
++ {"RTL8169sc/8110sc", 0x18, 0xff7e1880,},
++ {"RTL8168b/8111sb", 0x30, 0xff7e1880,},
++ {"RTL8168b/8111sb", 0x38, 0xff7e1880,},
++ {"RTL8101e", 0x34, 0xff7e1880,},
++ {"RTL8100e", 0x32, 0xff7e1880,},
+ };
+
+ enum _DescStatusBit {
+@@ -315,6 +326,7 @@
+
+ static struct pci_device_id supported[] = {
+ {PCI_VENDOR_ID_REALTEK, 0x8169},
++ {PCI_VENDOR_ID_REALTEK, 0x8167},
+ {}
+ };
+
+@@ -383,13 +395,15 @@
+ for (i = ARRAY_SIZE(rtl_chip_info) - 1; i >= 0; i--){
+ if (tmp == rtl_chip_info[i].version) {
+ tpc->chipset = i;
++ printf ("%s... ", rtl_chip_info[i].name);
+ goto match;
+ }
+ }
+
+ /* if unknown chip, assume array element #0, original RTL-8169 in this case */
+ printf("PCI device %s: unknown chip version, assuming RTL-8169\n", dev->name);
+- printf("PCI device: TxConfig = 0x%hX\n", (unsigned long) RTL_R32(TxConfig));
++ printf("PCI device: TxConfig = 0x%lX\n", (unsigned long) RTL_R32(TxConfig));
++
+ tpc->chipset = 0;
+
+ match:
+@@ -413,23 +427,23 @@
+ ioaddr = dev->iobase;
+
+ cur_rx = tpc->cur_rx;
+- if ((tpc->RxDescArray[cur_rx].status & OWNbit) == 0) {
+- if (!(tpc->RxDescArray[cur_rx].status & RxRES)) {
++ if ((le32_to_cpu(tpc->RxDescArray[cur_rx].status) & OWNbit) == 0) {
++ if (!(le32_to_cpu(tpc->RxDescArray[cur_rx].status) & RxRES)) {
+ unsigned char rxdata[RX_BUF_LEN];
+- length = (int) (tpc->RxDescArray[cur_rx].
+- status & 0x00001FFF) - 4;
++ length = (int) (le32_to_cpu(tpc->RxDescArray[cur_rx].
++ status) & 0x00001FFF) - 4;
+
+ memcpy(rxdata, tpc->RxBufferRing[cur_rx], length);
+ NetReceive(rxdata, length);
+
+ if (cur_rx == NUM_RX_DESC - 1)
+ tpc->RxDescArray[cur_rx].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+ tpc->RxDescArray[cur_rx].status =
+- OWNbit + RX_BUF_SIZE;
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+ tpc->RxDescArray[cur_rx].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[cur_rx]);
++ cpu_to_le32((u32)tpc->RxBufferRing[cur_rx]);
+ } else {
+ puts("Error Rx");
+ }
+@@ -454,6 +468,7 @@
+ u8 *ptxb;
+ int entry = tpc->cur_tx % NUM_TX_DESC;
+ u32 len = length;
++ int ret;
+
+ #ifdef DEBUG_RTL8169_TX
+ int stime = currticks();
+@@ -465,39 +480,46 @@
+
+ /* point to the current txb incase multiple tx_rings are used */
+ ptxb = tpc->Tx_skbuff[entry * MAX_ETH_FRAME_SIZE];
++#ifdef DEBUG_RTL8169_TX
++ printf("ptxb: %08X, length: %d\n", ptxb, (int)length);
++#endif
+ memcpy(ptxb, (char *)packet, (int)length);
+
+ while (len < ETH_ZLEN)
+ ptxb[len++] = '\0';
+
+- tpc->TxDescArray[entry].buf_addr = virt_to_bus(ptxb);
++ tpc->TxDescArray[entry].buf_addr = cpu_to_le32((u32)ptxb);
+ if (entry != (NUM_TX_DESC - 1)) {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | FSbit | LSbit) | ((len > ETH_ZLEN) ?
+- len : ETH_ZLEN);
++ cpu_to_le32((OWNbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ } else {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | EORbit | FSbit | LSbit) |
+- ((len > ETH_ZLEN) ? length : ETH_ZLEN);
++ cpu_to_le32((OWNbit | EORbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ }
+ RTL_W8(TxPoll, 0x40); /* set polling bit */
+
+ tpc->cur_tx++;
+ to = currticks() + TX_TIMEOUT;
+- while ((tpc->TxDescArray[entry].status & OWNbit) && (currticks() < to)); /* wait */
++ while ((le32_to_cpu(tpc->TxDescArray[entry].status) & OWNbit)
++ && (currticks() < to)); /* wait */
+
+ if (currticks() >= to) {
+ #ifdef DEBUG_RTL8169_TX
+ puts ("tx timeout/error\n");
+ printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
+ #endif
+- return 0;
++ ret = 0;
+ } else {
+ #ifdef DEBUG_RTL8169_TX
+ puts("tx done\n");
+ #endif
+- return length;
++ ret = length;
+ }
++ /* Delay to make net console (nc) work properly */
++ udelay(20);
++ return ret;
+ }
+
+ static void rtl8169_set_rx_mode(struct eth_device *dev)
+@@ -564,8 +586,8 @@
+
+ tpc->cur_rx = 0;
+
+- RTL_W32(TxDescStartAddr, virt_to_le32desc(tpc->TxDescArray));
+- RTL_W32(RxDescStartAddr, virt_to_le32desc(tpc->RxDescArray));
++ RTL_W32(TxDescStartAddr, virt_to_le32desc((u32)tpc->TxDescArray));
++ RTL_W32(RxDescStartAddr, virt_to_le32desc((u32)tpc->RxDescArray));
+ RTL_W8(Cfg9346, Cfg9346_Lock);
+ udelay(10);
+
+@@ -603,13 +625,14 @@
+ for (i = 0; i < NUM_RX_DESC; i++) {
+ if (i == (NUM_RX_DESC - 1))
+ tpc->RxDescArray[i].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+- tpc->RxDescArray[i].status = OWNbit + RX_BUF_SIZE;
++ tpc->RxDescArray[i].status =
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+
+ tpc->RxBufferRing[i] = &rxb[i * RX_BUF_SIZE];
+ tpc->RxDescArray[i].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[i]);
++ cpu_to_le32((u32)tpc->RxBufferRing[i]);
+ }
+
+ #ifdef DEBUG_RTL8169
+@@ -620,7 +643,7 @@
+ /**************************************************************************
+ RESET - Finish setting up the ethernet interface
+ ***************************************************************************/
+-static void rtl_reset(struct eth_device *dev, bd_t *bis)
++static int rtl_reset(struct eth_device *dev, bd_t *bis)
+ {
+ int i;
+ u8 diff;
+@@ -635,21 +658,27 @@
+ if (tpc->TxDescArrays == 0)
+ puts("Allot Error");
+ /* Tx Desscriptor needs 256 bytes alignment; */
+- TxPhyAddr = virt_to_bus(tpc->TxDescArrays);
++ TxPhyAddr = (u32)tpc->TxDescArrays;
+ diff = 256 - (TxPhyAddr - ((TxPhyAddr >> 8) << 8));
+ TxPhyAddr += diff;
+ tpc->TxDescArray = (struct TxDesc *) (tpc->TxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->TxDescArray: %08X\n", tpc->TxDescArray);
++#endif
+
+ tpc->RxDescArrays = rx_ring;
+ /* Rx Desscriptor needs 256 bytes alignment; */
+- RxPhyAddr = virt_to_bus(tpc->RxDescArrays);
++ RxPhyAddr = (u32)tpc->RxDescArrays;
+ diff = 256 - (RxPhyAddr - ((RxPhyAddr >> 8) << 8));
+ RxPhyAddr += diff;
+ tpc->RxDescArray = (struct RxDesc *) (tpc->RxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->RxDescArray: %08X\n", tpc->RxDescArray);
++#endif
+
+ if (tpc->TxDescArrays == NULL || tpc->RxDescArrays == NULL) {
+ puts("Allocate RxDescArray or TxDescArray failed\n");
+- return;
++ return 0;
+ }
+
+ rtl8169_init_ring(dev);
+@@ -669,6 +698,7 @@
+ #ifdef DEBUG_RTL8169
+ printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
+ #endif
++ return 1;
+ }
+
+ /**************************************************************************
+@@ -733,7 +763,7 @@
+
+ /* Get MAC address. FIXME: read EEPROM */
+ for (i = 0; i < MAC_ADDR_LEN; i++)
+- dev->enetaddr[i] = RTL_R8(MAC0 + i);
++ bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i);
+
+ #ifdef DEBUG_RTL8169
+ printf("MAC Address");
+@@ -814,17 +844,14 @@
+ if (option & _1000bpsF) {
+ #ifdef DEBUG_RTL8169
+ printf("%s: 1000Mbps Full-duplex operation.\n",
+- dev->name);
++ dev->name);
+ #endif
+ } else {
+ #ifdef DEBUG_RTL8169
+- printf
+- ("%s: %sMbps %s-duplex operation.\n",
+- dev->name,
+- (option & _100bps) ? "100" :
+- "10",
+- (option & FullDup) ? "Full" :
+- "Half");
++ printf("%s: %sMbps %s-duplex operation.\n",
++ dev->name,
++ (option & _100bps) ? "100" : "10",
++ (option & FullDup) ? "Full" : "Half");
+ #endif
+ }
+ break;
+@@ -886,3 +913,5 @@
+ }
+
+ #endif
++
++/* vim: set ts=4: */
+--- u-boot-1.2.0.vanilla/include/configs/qnap.h 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/include/configs/qnap.h 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,354 @@
++/*
++ * Copyright (C) 2006 Andrew Luyten <u-boot@luyten.org.uk>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/* ------------------------------------------------------------------------- */
++
++/*
++ * board/config.h - configuration options, board specific
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++
++#define CONFIG_MPC824X 1
++#define CONFIG_MPC8245 1
++#define CONFIG_MPC8241 1
++
++#define CONFIG_IDENT_STRING " OpenTS(c)"
++#define CONFIG_TIMESTAMP
++#define CFG_HUSH_PARSER 1
++#define CFG_PROMPT_HUSH_PS2 "turbostation> "
++#define CONFIG_BOOTDELAY 3
++
++
++/*----------------------------------------------------------------------
++ * Define supported commands
++ */
++
++#define CONFIG_COMMANDS ( \
++ CONFIG_CMD_DFL | \
++ CFG_CMD_ELF | \
++ CFG_CMD_I2C | \
++ CFG_CMD_PING | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_IDE | \
++ CFG_CMD_EXT2 | \
++ CFG_CMD_DATE | \
++ CFG_CMD_PCI )
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++
++/*-----------------------------------------------------------------------
++ * Miscellaneous configurable options
++ */
++
++#define CFG_LONGHELP 1 /* undef to save memory */
++#define CFG_PROMPT "=> " /* Monitor Command Prompt*/
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size*/
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size*/
++#define CFG_MAXARGS 16 /* max number of command args*/
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size*/
++#define CFG_LOAD_ADDR 0x00100000 /* default load address */
++#define CFG_HZ 1000 /* decrementer freq:1 ms ticks*/
++
++
++/*-----------------------------------------------------------------------
++ * PCI
++ *
++ */
++
++#define CONFIG_PCI
++#undef CONFIG_PCI_PNP
++
++#define PCI_ETH_IOADDR 0xbffe00
++#define PCI_ETH_MEMADDR 0xbfffce00
++
++#define PCI_IDE_IOADDR 0xbfffd0
++#define PCI_IDE_MEMADDR 0xbffffe00
++
++#define PCI_USB0_IOADDR 0
++#define PCI_USB0_MEMADDR 0xbfffe000
++#define PCI_USB1_IOADDR 0
++#define PCI_USB1_MEMADDR 0xbfffd000
++#define PCI_USB2_IOADDR 0
++#define PCI_USB2_MEMADDR 0xbfffcf00
++
++
++/*-----------------------------------------------------------------------
++ * Start addresses for the final memory configuration
++ * (Set up by the startup code)
++ */
++
++#define CFG_SDRAM_BASE 0x00000000
++#define CFG_MONITOR_BASE TEXT_BASE
++#undef CFG_RAMBOOT
++
++#define CFG_PCI_MEM_ADDR 0xB0000000
++#define CFG_EUMB_ADDR 0xFC000000
++#define CFG_FLASH_BASE 0xFF000000
++
++#define CFG_RESET_ADDRESS 0xFFF00100
++
++#define CFG_MONITOR_LEN (256 << 10)
++#define CFG_MALLOC_LEN (512 << 10)
++
++#define CFG_MEMTEST_START 0x00000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x04000000 /* 0 ... 32 MB in DRAM */
++#define CFG_MAX_RAM_SIZE 0x10000000 /* up to 256M of SDRAM */
++
++
++/*-----------------------------------------------------------------------
++ * Definitions for initial stack pointer and data area
++ */
++
++#define CFG_INIT_RAM_ADDR 0x40000000
++#define CFG_INIT_RAM_END 0x1000
++#define CFG_GBL_DATA_SIZE 128
++#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
++
++
++/*-----------------------------------------------------------------------
++ * FLASH organization
++ */
++
++#define CFG_FLASH_CFI 1
++#define CFG_FLASH_CFI_DRIVER 1 /* Use the common driver */
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#define CFG_MAX_FLASH_SECT 128 /* max number of sectors on one chip*/
++#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */
++#define CFG_FLASH_USE_BUFFER_WRITE /* faster writes */
++
++#define CFG_ENV_IS_IN_FLASH 1
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x00FA0000)
++#define CFG_ENV_SECT_SIZE 0x00020000 /* Total Size of Environment Sector*/
++
++
++/*-----------------------------------------------------------------------
++ * Gigabit Ethernet
++ */
++
++#define CONFIG_NET_MULTI
++#define CONFIG_RTL8169
++
++
++/*-----------------------------------------------------------------------
++ * Filesystems
++ */
++
++#define CONFIG_MAC_PARTITION
++#define CONFIG_DOS_PARTITION
++//#define CONFIG_ISO_PARTITION
++
++
++/*-----------------------------------------------------------------------
++ * IDE/ATA
++ */
++
++#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
++#undef CONFIG_IDE_LED /* no led for ide supported */
++#undef CONFIG_IDE_RESET /* no reset for ide supported */
++#undef CONFIG_ATAPI /* no ATAPI support */
++
++#define CONFIG_IDE_PREINIT /* To set up MMIO adresses */
++#define CONFIG_LBA48 /* Large disk support */
++
++#define CFG_IDE_MAXBUS 2 /* Two channels x 1 device each */
++#define CFG_IDE_MAXDEVICE (CFG_IDE_MAXBUS*1)
++
++#define CFG_ATA_BASE_ADDR 0x0000 /* Set up in board specific code */
++#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
++#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */
++#define CFG_ATA_ALT_OFFSET 0x0000 /* Offset for alternate registers */
++
++
++/*----------------------------------------------------------------------
++ * On Chip Serial configuration
++ */
++
++#define CONFIG_CONS_INDEX 1
++#define CONFIG_BAUDRATE 115200
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++#define CFG_NS16550
++#define CFG_NS16550_SERIAL
++
++#define CFG_NS16550_REG_SIZE 1
++#define CFG_NS16550_CLK get_bus_freq(0)
++
++#define CFG_NS16550_COM1 (CFG_EUMB_ADDR + 0x4500) /* Console port */
++#define CFG_NS16550_COM2 (CFG_EUMB_ADDR + 0x4600) /* PIC ? */
++
++
++/*----------------------------------------------------------------------
++ * i2c support configuration
++ */
++
++#define CONFIG_HARD_I2C 1 /* To enable I2C support */
++#undef CONFIG_SOFT_I2C /* I2C bit-banged */
++#define CFG_I2C_SPEED 400000 /* I2C speed and slave address */
++#define CFG_I2C_SLAVE 0x7F
++
++#define CONFIG_RTC_RS5C372A /* Real-time clock chip */
++
++
++/*----------------------------------------------------------------------
++ * Low Level Configuration Settings
++ * (address mappings, register initial values, etc.)
++ * You should know what you are doing if you make changes here.
++ */
++
++#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
++
++#define CFG_ROMNAL 7 /*rom/flash next access time */
++#define CFG_ROMFAL 11 /*rom/flash access time */
++
++#define CFG_REFINT 430 /* no of clock cycles between CBR refresh cycles */
++
++/* the following are for SDRAM only*/
++#define CFG_BSTOPRE 121 /* Burst To Precharge, sets open page interval */
++#define CFG_REFREC 8 /* Refresh to activate interval */
++#define CFG_RDLAT 4 /* data latency from read command */
++#define CFG_PRETOACT 3 /* Precharge to activate interval */
++#define CFG_ACTTOPRE 5 /* Activate to Precharge interval */
++#define CFG_ACTORW 3 /* Activate to R/W */
++#define CFG_SDMODE_CAS_LAT 3 /* SDMODE CAS latency */
++#define CFG_SDMODE_WRAP 0 /* SDMODE wrap type */
++
++#define CFG_REGISTERD_TYPE_BUFFER 1
++#define CFG_EXTROM 1
++#define CFG_REGDIMM 0
++
++
++/*----------------------------------------------------------------------
++ * memory bank settings
++ *
++ * only bits 20-29 are actually used from these vales to set the
++ * start/end address the upper two bits will be 0, and the lower 20
++ * bits will be set to 0x00000 for a start address, or 0xfffff for an
++ * end address
++ */
++
++#define CFG_BANK0_START 0x00000000
++#define CFG_BANK0_END (CFG_MAX_RAM_SIZE - 1)
++#define CFG_BANK0_ENABLE 1
++#define CFG_BANK1_START 0x3ff00000
++#define CFG_BANK1_END 0x3fffffff
++#define CFG_BANK1_ENABLE 0
++#define CFG_BANK2_START 0x3ff00000
++#define CFG_BANK2_END 0x3fffffff
++#define CFG_BANK2_ENABLE 0
++#define CFG_BANK3_START 0x3ff00000
++#define CFG_BANK3_END 0x3fffffff
++#define CFG_BANK3_ENABLE 0
++#define CFG_BANK4_START 0x00000000
++#define CFG_BANK4_END 0x00000000
++#define CFG_BANK4_ENABLE 0
++#define CFG_BANK5_START 0x00000000
++#define CFG_BANK5_END 0x00000000
++#define CFG_BANK5_ENABLE 0
++#define CFG_BANK6_START 0x00000000
++#define CFG_BANK6_END 0x00000000
++#define CFG_BANK6_ENABLE 0
++#define CFG_BANK7_START 0x00000000
++#define CFG_BANK7_END 0x00000000
++#define CFG_BANK7_ENABLE 0
++
++
++/*
++ * Memory bank enable bitmask, specifying which of the banks defined above
++ are actually present. MSB is for bank #7, LSB is for bank #0.
++ */
++#define CFG_BANK_ENABLE 0x01
++
++#define CFG_ODCR 0xff /* configures line driver impedances, */
++ /* see 8240 book for bit definitions */
++#define CFG_PGMAX 0x32 /* how long the 8240 retains the */
++ /* currently accessed page in memory */
++ /* see 8240 book for details */
++#define CFG_DBUS_SIZE2 1
++#define CFG_BANK0_ROW 2
++
++
++/*----------------------------------------------------------------------
++ * Initial BAT mappings
++ */
++
++/* SDRAM 0 - 256MB */
++#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
++#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
++
++/* stack in DCACHE @ 1GB (no backing mem) */
++#define CFG_IBAT1L (CFG_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
++#define CFG_IBAT1U (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
++
++/* PCI memory */
++#define CFG_IBAT2L (CFG_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT2U (CFG_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP)
++
++/* Flash, config addrs, etc */
++#define CFG_IBAT3L (0xF0000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT3U (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT0L CFG_IBAT0L
++#define CFG_DBAT0U CFG_IBAT0U
++#define CFG_DBAT1L CFG_IBAT1L
++#define CFG_DBAT1U CFG_IBAT1U
++#define CFG_DBAT2L CFG_IBAT2L
++#define CFG_DBAT2U CFG_IBAT2U
++#define CFG_DBAT3L CFG_IBAT3L
++#define CFG_DBAT3U CFG_IBAT3U
++
++/*
++ * For booting Linux, the board info and command line data
++ * have to be in the first 8 MB of memory, since this is
++ * the maximum mapped by the Linux kernel during initialization.
++ */
++#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
++
++
++/*-----------------------------------------------------------------------
++ * Cache Configuration
++ */
++
++#define CFG_CACHELINE_SIZE 32 /* For MPC8240 CPU */
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++# define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
++#endif
++
++
++/*-----------------------------------------------------------------------
++ * Internal Definitions
++ *
++ * Boot Flags
++ */
++#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
++#define BOOTFLAG_WARM 0x02 /* Software reboot */
++
++
++#endif /* __CONFIG_H */
+--- u-boot-1.2.0.vanilla/Makefile 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/Makefile 2007-02-26 01:55:37.000000000 +0100
+@@ -1296,6 +1296,9 @@
+ PN62_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x pn62
+
++qnap_config: unconfig
++ @$(MKCONFIG) $(@:_config=) ppc mpc824x qnap
++
+ Sandpoint8240_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x sandpoint
+
diff --git a/packages/uboot-utils/tools-Makefile.patch b/packages/uboot/u-boot-1.2.0/tools-Makefile.patch
index a44bc917d6..a44bc917d6 100644
--- a/packages/uboot-utils/tools-Makefile.patch
+++ b/packages/uboot/u-boot-1.2.0/tools-Makefile.patch
diff --git a/packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty b/packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/turbostation/fw_env.config b/packages/uboot/u-boot-1.2.0/turbostation/fw_env.config
new file mode 100644
index 0000000000..2432bd866c
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/turbostation/fw_env.config
@@ -0,0 +1,7 @@
+# Configuration file for fw_(printenv/saveenv) utility.
+# Up to two entries are valid, in this case the redundand
+# environment sector is assumed present.
+
+# MTD device name Device offset Env. size Flash sector size
+/dev/mtd1 0x0000 0x4000 0x4000
+/dev/mtd2 0x0000 0x4000 0x4000
diff --git a/packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch b/packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch
new file mode 100644
index 0000000000..182c3785c7
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch
@@ -0,0 +1,29 @@
+diff -ur u-boot-86xx-kuro_clean/include/configs/linkstation.h u-boot-86xx-kuro_flash/include/configs/linkstation.h
+--- u-boot-86xx-kuro_clean/include/configs/linkstation.h 2006-11-06 22:05:38.000000000 +0100
++++ u-boot-86xx-kuro_flash/include/configs/linkstation.h 2006-10-28 11:27:42.000000000 +0200
+@@ -101,6 +101,14 @@
+ CFG_CMD_EXT2 )
+ #define CONFIG_BOOTP_MASK CONFIG_BOOTP_ALL
+
++#define CONFIG_OF_FLAT_TREE 1
++
++#ifdef CONFIG_OF_FLAT_TREE
++#define OF_CPU "PowerPC,603e"
++#define OF_SOC "soc10x@80000000"
++#define OF_STDOUT_PATH "/soc10x/serial@80004600"
++#endif
++
+ /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+ #include <cmd_confdefs.h>
+
+@@ -151,8 +159,8 @@
+ "ldaddr=800000\0" \
+ "hdpart=0:1\0" \
+ "hdfile=boot/vmlinux.UBoot\0" \
+- "hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile}\0" \
+- "boothd=setenv bootargs root=/dev/hda1;bootm ${ldaddr}\0" \
++ "hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile};ext2load ide ${hdpart} 7f0000 boot/kuroboxHG.dtb\0" \
++ "boothd=setenv bootargs " CONFIG_BOOTARGS ";bootm ${ldaddr} - 7f0000\0" \
+ "hdboot=run hdload boothd\0" \
+ "flboot=setenv bootargs root=/dev/hda1;bootm ffc00000\0" \
+ "emboot=setenv bootargs root=/dev/ram0;bootm ffc00000\0" \
diff --git a/packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch b/packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch
new file mode 100644
index 0000000000..79f7a8e48a
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch
@@ -0,0 +1,5595 @@
+diff -urN u-boot-86xx/MAKEALL u-boot-86xx-kuro_clean/MAKEALL
+--- u-boot-86xx/MAKEALL 2006-10-13 00:27:12.000000000 +0200
++++ u-boot-86xx-kuro_clean/MAKEALL 2006-11-06 22:13:16.000000000 +0100
+@@ -106,9 +106,9 @@
+ LIST_824x=" \
+ A3000 barco BMW CPC45 \
+ CU824 debris eXalion HIDDEN_DRAGON \
+- MOUSSE MUSENKI MVBLUE \
+- OXC PN62 Sandpoint8240 Sandpoint8245 \
+- sbc8240 SL8245 utx8245 \
++ linkstation linkstationhg MOUSSE MUSENKI \
++ MVBLUE OXC PN62 Sandpoint8240 \
++ Sandpoint8245 sbc8240 SL8245 utx8245 \
+ "
+
+ #########################################################################
+diff -urN u-boot-86xx/Makefile u-boot-86xx-kuro_clean/Makefile
+--- u-boot-86xx/Makefile 2006-10-13 00:27:12.000000000 +0200
++++ u-boot-86xx-kuro_clean/Makefile 2006-11-06 22:15:20.000000000 +0100
+@@ -122,7 +122,7 @@
+ CROSS_COMPILE =
+ else
+ ifeq ($(ARCH),ppc)
+-CROSS_COMPILE = powerpc-linux-
++CROSS_COMPILE = ppc_6xx-
+ endif
+ ifeq ($(ARCH),arm)
+ CROSS_COMPILE = arm-linux-
+@@ -237,6 +237,40 @@
+
+ all: $(ALL)
+
++LSMODEL := $(shell head -n 1 include/config.h)
++
++linkstation_HGLAN_RAM: include/config.h
++ @[ -n "$(findstring HGLAN_RAM, $(LSMODEL))" ] || \
++ { echo "Bad configuration: $(LSMODEL)" ; \
++ exit 1 ; \
++ }
++ @make all
++ @mv u-boot.bin u-boot-hg.ram.bin
++
++linkstation_HGLAN: include/config.h
++ @[ -n "$(findstring HGLAN_ROM, $(LSMODEL))" ] || \
++ { echo "Bad configuration: $(LSMODEL)" ; \
++ exit 1 ; \
++ }
++ @make all
++ @mv u-boot.bin u-boot-hg.flash.bin
++
++linkstation_HDLAN_RAM: include/config.h
++ @[ -n "$(findstring HDLAN_RAM, $(LSMODEL))" ] || \
++ { echo "Bad configuration: $(LSMODEL)" ; \
++ exit 1 ; \
++ }
++ @make all
++ @mv u-boot.bin u-boot-hd.ram.bin
++
++linkstation_HDLAN: include/config.h
++ @[ -n "$(findstring HDLAN_ROM, $(LSMODEL))" ] || \
++ { echo "Bad configuration: $(LSMODEL)" ; \
++ exit 1 ; \
++ }
++ @make all
++ @mv u-boot.bin u-boot-hd.flash.bin
++
+ $(obj)u-boot.hex: $(obj)u-boot
+ $(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
+
+@@ -317,6 +351,10 @@
+
+ #########################################################################
+ else
++linkstation_HGLAN_RAM \
++linkstation_HGLAN \
++linkstation_HDLAN_RAM \
++linkstation_HDLAN \
+ all $(obj)u-boot.hex $(obj)u-boot.srec $(obj)u-boot.bin \
+ $(obj)u-boot.img $(obj)u-boot.dis $(obj)u-boot \
+ $(SUBDIRS) version gdbtools updater env depend \
+@@ -1262,6 +1300,38 @@
+ kvme080_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x kvme080 etin
+
++linkstation_HGLAN_RAM_config: mrproper
++ @>include/config.h ; \
++ echo "/* HGLAN_RAM */" >>include/config.h ; \
++ echo "#define CONFIG_HGLAN 1" >>include/config.h ; \
++ echo "TEXT_BASE = 0x07F00000" >board/linkstation/config.tmp ; \
++ ./mkconfig -a linkstation ppc mpc824x linkstation ; \
++ echo "LinkStation HGLAN -- RAM BUILD ..."
++
++linkstation_HGLAN_config: mrproper
++ @>include/config.h ; \
++ echo "/* HGLAN_ROM */" >>include/config.h ; \
++ echo "#define CONFIG_HGLAN 1" >>include/config.h ; \
++ echo "TEXT_BASE = 0xFFF00000" >board/linkstation/config.tmp ; \
++ ./mkconfig -a linkstation ppc mpc824x linkstation ; \
++ echo "LinkStation HGLAN -- ROM BUILD ..."
++
++linkstation_HDLAN_RAM_config: mrproper
++ @>include/config.h ; \
++ echo "/* HDLAN_RAM */" >>include/config.h ; \
++ echo "#define CONFIG_HLAN 1" >>include/config.h ; \
++ echo "TEXT_BASE = 0x03F00000" >board/linkstation/config.tmp ; \
++ ./mkconfig -a linkstation ppc mpc824x linkstation ; \
++ echo "LinkStation HDLAN -- RAM BUILD ..."
++
++linkstation_HDLAN_config: mrproper
++ @>include/config.h ; \
++ echo "/* HDLAN_ROM */" >>include/config.h ; \
++ echo "#define CONFIG_HLAN 1" >>include/config.h ; \
++ echo "TEXT_BASE = 0xFFF00000" >board/linkstation/config.tmp ; \
++ ./mkconfig -a linkstation ppc mpc824x linkstation ; \
++ echo "LinkStation HDLAN -- ROM BUILD ..."
++
+ MOUSSE_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x mousse
+
+diff -urN u-boot-86xx/board/linkstation/INSTALL u-boot-86xx-kuro_clean/board/linkstation/INSTALL
+--- u-boot-86xx/board/linkstation/INSTALL 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/INSTALL 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,631 @@
++
++ Installing U-Boot for LinkStation
++
++ For U-Boot port version 2.1.0
++ 16 September 2006
++
++ Copyright (c) 2006 Mihai Georgian
++
++ Permission is granted to copy, distribute and/or modify this document under
++ the terms of the [1]GNU Free Documentation License, Version 1.2 or any later
++ version published by the Free Software Foundation; with no Invariant
++ Sections, no Front-Cover Texts, and no Back-Cover Texts. The full text of
++ the license can be obtained by clicking on the above link.
++
++ No liability for the contents of this document can be accepted. The
++ information in this document is provided in good faith but no warranty can
++ be made for its accuracy and the author does not take any responsibility.
++ Use the concepts, examples and information at your own risk. There may be
++ errors and inaccuracies, that could be damaging to your system.
++
++ Use of a term in this document should not be regarded as affecting the
++ validity of any trademark or service mark. Naming of particular products or
++ brands should not be seen as endorsements.
++ _________________________________________________________________
++
++ WARNING
++
++ Flashing the LinkStation with unauthorised firmare voids your warranty. When
++ installing firmware on an embedded computer things can and, sometimes, do go
++ wrong. The power can go down in the middle of the flash operation or the
++ flash write can fail rendering your LinkStation unusable. Please read this
++ entire page carefully before attempting to install U-Boot.
++
++ If you are not prepared to lose your LinkStation, do not attempt to install
++ U-Boot
++
++ Introduction
++
++ U-Boot for the LinkStation is distributed as a source patch against
++ u-boot-1.1.4. To compile it you will need either a cross toolchain installed
++ on your PC or native development tools installed on your LinkStation. These
++ instructions assume that you are running Linux on a X86 PC and that you are
++ using a cross toolchain.
++
++ To allow testing of U-Boot on your LinkStation without burning it into
++ flash, a kernel module named uloader.o is provided. Uloader allows you to
++ use Linux to load a RAM build of U-Boot and start it. The RAM build of
++ U-Boot is very close to the ROM build. The only differences are the absence
++ of the basic initialisation code (which cannot run from RAM) and the link
++ address. It is strongly recommended that you test U-Boot on your LinkStation
++ using a RAM build before building the ROM version and attempting to burn it
++ into flash. Once you have the RAM build up and running you can use it to
++ install (burn) the ROM version.
++
++ Supported Hardware
++
++ The LinkStation port of U-Boot described in this document supports the
++ following PowerPC based models:
++ 1. LinkStation version 1 (model HD-HLAN-1)
++ 2. KuroBox standard
++ 3. LinkStation HG (model HD-HGLAN)
++ 4. KuroBox HG
++
++ This version of U-Boot will certainly not work on the the LinkStation
++ version 2 (model HD-HLAN-2) as the LinkStation version 2 is based on a MIPS
++ processor. The MIPS processor is completely different from the PowerPC
++ processor and attempting to flash a LinkStation version 2 with PowerPC
++ firmware it is guaranteed to make it completely unusable.
++
++ Get telnet Access
++
++ Try to connect to your LinkStation using telnet. If you see the telnet
++ command prompt, read [2]CGI Exploit (PowerPC) original method of Hacking the
++ LinkStation about how to get telnet access.
++
++ If the above method doesn't work for you, read [3]Turn your LinkStation into
++ a Kuro Box (PowerPC) for other methods to get telnet access.
++
++ The above methods do not work for the LinkStation HG. For this model, the
++ only solution is to load a telnet-enabled version of the firmware. Read the
++ pages about [4]OpenLink and the [5]firmware flasher
++
++ You can also try to flash [6]a modified version of the original firmware.
++
++ Install the Serial Console
++
++ Installing the serial console is not an absolute requirement and it will
++ void your warranty. U-Boot can be installed and controlled without it.
++ However, the serial console will give you the best control over both U-Boot
++ and Linux.
++
++ Read [7]Add a Serial port to the PowerPC Linkstation to learn how to install
++ the serial console.
++
++ Install netcat (nc)
++
++ If you haven't installed the serial console you will need to install netcat
++ (nc). Netcat is a networking utility which reads and writes data across
++ network connections, using the TCP/IP protocol. It comes standard with most
++ Linux distributions. For more information, visit the netcat home page
++ [8]http://netcat.sourceforge.net or [9]http://www.vulnwatch.org/netcat for
++ the Windows version.
++
++ Get the ELDK
++
++ If you don't have a cross toolchain installed, download the DENX Embedded
++ Linux Development Kit (ELDK) from
++ [10]http://ftp.sunet.se/pub/Linux/distributions/eldk/3.1.1/ppc-linux-x86/iso
++ /ppc-2005-03-07.iso, install it and spend some time getting familiar with
++ it.
++
++ Preparation
++
++ Create the build directory and set the environment variable UBOOT_BUILD to
++ the path to it
++ # mkdir <your_build_directory>
++ # export UBOOT_BUILD=<your_build_directory>
++ # cd $UBOOT_BUILD
++ Download the tarball for u-boot-1.1.4 from
++ [11]ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.4.tar.bz2
++ Download the LinkStation patch, [12]u-boot-1.1.4-list-2.1.0.diff.gz
++ Download the uloader module for your LinkStation / KuroBox model.
++ * For the LinkStation 1 / KuroBox standard, download
++ [13]uloader-2.4.17.tar.gz
++ * For the LinkStation HG / KuroBox HG, download [14]uloader-2.4.20.tar.gz
++
++ Untar u-boot-1.1.4 and apply the patch.
++ # tar xjf u-boot-1.1.4.tar.bz2
++ # cd u-boot-1.1.4
++ # gunzip ../u-boot-1.1.4-list-2.01.diff.gz | patch -p1
++
++ Untar the uloader archive for your LinkStation / KuroBox model. The archive
++ contains the source code, a binary module compiled for the original
++ LinkStation kernel and a simple bash script to load and start a RAM build of
++ U-Boot.
++
++ The binary in uloader-2.4.17.tar.gz has been compiled against
++ 2.4.17_mvl21-sandpoint. Use only on the LinkStation 1 / KuroBox standard.
++ The binary in uloader-2.4.20.tar.gz has been compiled against
++ 2.4.20_mvl31-ppc_linkstation. Use only on the LinkStation HG / KuroBog HG.
++ If you have a different kernel version, you may need to recompile the module
++ for your kernel. Compiling the module requires a fully configured kernel
++ source tree. It is recommended to use the same gcc version as the one used
++ to compile the kernel. There is a small but important difference between the
++ two uloader source archives. The difference is the U-Boot load address. If
++ you compile uloader for the LinkStation 1 / KuroBox standard, use the
++ sources in uloader-2.4.17.tar.gz. If you compile for the LinkStation HG /
++ KuroBox HG, use the sources in uloader-2.4.20.tar.gz. In both cases you
++ need to modify the Makefile to match your development environment.
++
++ LinkStation 1 / KuroBox standard
++ # cd ..
++ # tar xzf uloader-2.4.17.tar.gz
++ # cd u-boot-1.1.4
++
++ LinkStation HG / KuroBox HG
++ # cd ..
++ # tar xzf uloader-2.4.20.tar.gz
++ # cd u-boot-1.1.4
++
++ Source your ELDK environment
++ # . <path_to_your_ELDK>/config_6xx
++
++ Configure
++
++ Edit include/configs/linkstation.h and set the following variables for your
++ environment:
++
++ CONFIG_IPADDR_LS - the IP address of your LinkStation while running
++ U-Boot (mandatory). The default address is
++ 192.168.11.150.
++ CONFIG_SERVERIP_LS - the IP address of the NFS/TFTP/DHCP/BOOTP server,
++ normally the address of your Linux PC (mandatory).
++ The default address is 192.168.11.149.
++ CONFIG_NCIP_LS - the address of the computer running netcat (nc),
++ normally the address of your Linux PC (optional).
++ If the define is missing, CONFIG_NCIP_LS will be
++ set to the same value as CONFIG_SERVERIP_LS
++
++ RAM Build
++
++ For LinkStation 1 / KuroBox standard run:
++ make linkstation_HDLAN_RAM_config
++ make linkstation_HDLAN_RAM
++
++ The name of the resulting binary is u-boot-hd.ram.bin
++
++ For LinkStation HG / KuroBox HG run:
++ make linkstation_HGLAN_RAM_config
++ make linkstation_HGLAN_RAM
++
++ The name of the resulting binary is u-boot-hg.ram.bin
++
++ Net Console
++
++ The net console is the U-Boot driver which uses the UDP protocol with a
++ default port of 6666 to send the console output to and receive the console
++ input from a remote computer. You need to run netcat on the remote computer
++ to communicate with the U-Boot net console. The communication is
++ bidirectional. Netcat will display on your screen the console output
++ received from U-Boot and will send your keyboard input back to U-Boot.
++
++ If U-Boot cannot contact the remote computer, it switches the console to the
++ serial port. To show that it changed the console, U-Boot makes the HDD LED
++ blink with the pattern corresponding to the serial console (see The Reset
++ Button below). The timeout period is 20 sec.
++
++ Minimal Console
++
++ U-Boot for the LinkStation is designed to allow some control over the boot
++ process even in the absence of a console. For this, it uses the power button
++ (the big button at the front) and the reset button (the small red button at
++ the back).
++
++ Before installing U-Boot, when the LinkStation is switched on, the power LED
++ starts blinking, the original boot loader starts executing and, very
++ quickly, it starts booting the kernel from flash. If U-Boot is installed,
++ the power LED will change from blinking quickly to blinking very slowly. The
++ blink pattern is the same as the one used to indicate sleep mode in normal
++ operation. When the power LED starts blinking slowly at boot, U-Boot has
++ taken over and it is counting down the boot delay before booting the kernel.
++ The default boot delay is 10 sec. From the moment when the power LED starts
++ blinking slowly and for the duration of the boot delay, you can control the
++ boot process with the power and reset buttons.
++
++ The Power Button
++
++ If you push the power button and keep it pressed for more than 1 sec, the
++ boot process will stop and the LinkStation will wait for a command. A
++ stopped boot process is indicated by the power LED being lit solid. The
++ effect is the same a pressing 's' on the console.
++
++ A long push of the power button acts as a toggle. If the boot delay count
++ down is in progress, a long push of the power button stops the boot process.
++ If the boot process is stopped (U-Boot is at the command prompt, even if you
++ can't see it), a long push of the power button restarts the boot process
++ resetting the boot delay to its original value. The restart of the boot
++ process is indicated by the power LED blinking slowly.
++
++ By default U-Boot supports three pre-configured boot commands:
++ 1. The first boot command will attempt to load and boot a file named
++ boot/vmlinux.UBoot from the first hard disk partition, /dev/hda1. The
++ file can be in any of the U-Boot bootable formats but uImage is the
++ preferred format. If the file is missing or corrupted, U-Boot will fall
++ back to booting the original kernel from flash.
++ 2. The second boot command will boot the original kernel from flash.
++ Please note that the original kernel for the LinkStation 1 / KuroBox
++ standard has a bug in the function that calibrates the decrementer and
++ it will stop for up to 180 sec during boot. This bug is not an U-Boot
++ bug but a kernel bug which is uncovered by the fact that U-Boot
++ activates the decrementer where the original boot loader does not.
++ The original kernel for LinkStation HG / KuroBox HG does not suffer from
++ the above problem.
++ 3. The third boot command will attempt to boot in emergency mode (EM). It
++ does this by passing the argument root=/dev/ram0 to the kernel.
++ LinkStation / LinkStation HG owners should avoid booting in EM mode as
++ the root password for this mode on the LinkStation is unknown.
++ The original kernel for the LinkStation / KuroBox standard and for some
++ of the earlier LinkStation HG / KuroBox HG models ignores the root
++ argument. These models will boot normally from the on-board flash when
++ the EM boot command is used. Read the section on EM mode if your
++ LinkStation HG / KuroBox HG has a kernel that doesn't boot in EM mode
++ using this boot command.
++
++ You can cycle through the boot commands with the power button.
++
++ To see which of the three commands U-Boot is going to execute, press the
++ power button quickly. The HDD LED (the third from the top) will start
++ blinking. The number of times the LED blinks, shows the number of the active
++ boot command. For example, a pattern short on - short off - short on - long
++ off, means that the boot command number 2 is active. U-Boot will repeat the
++ blinking cycle for a total duration of about 5 sec counting from the moment
++ the power button is released.
++
++ A short press of the power button while the HDD LED is blinking will advance
++ the boot command to the next one.
++
++ Changing the boot command does not change the boot status. If the boot is
++ stopped, it will not be restarted. If the boot is in progress, it will not
++ be stopped but the boot delay will be reset to the original value.
++
++ The Reset Button
++
++ Two consoles are currently configured, the serial console and the net
++ console. The first console is the serial console and the second console is
++ the net console (nc). The net console is the default console.
++
++ The reset button can be used, similarly to the power button, to switch
++ consoles. A press on the reset button (here, it doesn't matter how long you
++ keep the button pressed) displays the currently active console using the HDD
++ LED. Repeatedly pressing the reset button while the HDD LED is blinking will
++ toggle between the two consoles. The blinking pattern is different from the
++ one showing the boot command. The pattern which shows that the second (net)
++ console is active is short off - short on - short off - long on. U-Boot will
++ repeat the blinking cycle for a total duration of about 5 sec counting from
++ the moment the reset button is released.
++
++ Load and Test
++
++ Mount the LinkStation SMB public share and copy the following files to it:
++
++ For LinkStation 1 / KuroBox standard
++ # mount -t smbfs -o password="" //<your_linkstation_name_or_ip>/share/mnt
++ # cp u-boot-hd.ram.bin /mnt
++ # cp ../uloader-2.4.17/uloader.o /mnt
++ # cp ../uloader-2.4.17/u-boot-load-hd.sh /mnt
++ # umount /mmt
++
++ For LinkStation HG / KuroBox HG
++ # mount -t smbfs -o password="" //<your_linkstation_name_or_ip>/share/mnt
++ # cp u-boot-hg.ram.bin /mnt
++ # cp ../uloader-2.4.20/uloader.o /mnt
++ # cp ../uloader-2.4.20/u-boot-load-hg.sh /mnt
++ # umount /mmt
++
++ If you installed the serial port, open another window and use minicom to
++ connect to your LinkStation serial console. The serial port settings are
++ 57600,N,8, the same as the settings used by the original Linux kernel.
++
++ Start netcat to communicate with the U-Boot net console. Open another window
++ and run board/linkstation/nc.sh. Nc.sh is a simple script which invokes
++ netcat with the correct options. To quit nc, press ^T (control-T).
++ # cd $UBOOT_BUILD/u-boot-1.1.4
++ # board/linkstation/nc.sh <ip_of_your_linkstation>
++
++ Where <ip_of_your_linkstation> is CONFIG_IPADDR_LS (see Configure U-Boot
++ above). When you run nc.sh nothing will be written to the screen. This is
++ normal as Linux is not using the net console.
++
++ From your original window, use telnet to connect to the LinkStation and
++ launch U-Boot. Replace lshg in the example below with the name / IP address
++ of your LinkStation. Replace myroot with the login you created when you
++ gained telnet access. For LinkStation 1 / KuroBox standard, use
++ u-boot-load-hd.sh instead of u-boot-load-hg.sh. Type the commands shown in
++ bold.
++ # telnet lshg
++ Trying 192.168.0.58...
++ Connected to lshg.
++ Escape character is '^]'.
++ BUFFALO INC. Link Station series HD-HGLAN (IEMITSU)
++ HD-HGLAN6C5 login: myroot
++ Linux (none) 2.4.20_mvl31-ppc_linkstation #3 Thu May 19 13:34:18 JST 2005
++ ppc unknown
++ root@HD-HGLAN6C5:~# cd /mnt/share
++ root@HD-HGLAN6C5:/mnt/share# ./u-boot-load-hg.sh
++ root@HD-HGLAN6C5:/mnt/share# exit
++ Connection closed by foreign host.
++ #
++
++ If you have a serial console you should see the initial U-Boot startup
++ messages. Even if the default console is the net console, U-Boot still sends
++ the console output to the serial port until it initialises the network
++ controller.
++ U-Boot 1.1.4 LiSt 2.1.0 (Sep 12 2006 - 23:09:44) LinkStation HG / KuroBox HG
++ CPU: MPC8245 Revision 1.4 at 262.144 MHz: 16 kB I-Cache 16 kB D-Cache
++ DRAM: 128 MB
++ FLASH: 4 MB
++ *** Warning - bad CRC, using default environment
++ 00 0b 10ec 8169 0200 ff
++ 00 0c 1283 8212 0180 ff
++ 00 0e 1033 0035 0c03 ff
++ 00 0e 1033 0035 0c03 ff
++ 00 0e 1033 00e0 0c03 ff
++ Net: RTL8169#0
++
++ Watch the net console window. After a few seconds, time needed by U-Boot to
++ initialise the network controller and the IDE controller you should see the
++ U-Boot messages.
++ U-Boot 1.1.4 LiSt 2.1.0 (Sep 12 2006 - 23:09:44) LinkStation HG / KuroBox HG
++ IDE: Bus 0: OK
++ Device 0: Model: Maxtor 7Y250P0 Firm: YAR41BW0 Ser#: Y62W8PDE
++ Type: Hard Disk
++ Supports 48-bit addressing
++ Capacity: 239372.4 MB = 233.7 GB (490234752 x 512)
++ Boot in 10 seconds ('s' to stop)...
++
++ Press 's' on your keyboard to stop the boot process.
++
++ If you want to use the serial console, watch the power LED of your
++ LinkStation. When it starts blinking very slowly, use the power button to
++ stop the boot process. Wait for the power LED to go dim and press and hold
++ the power button until the LED lights up brightly indicating that the boot
++ process has stopped. Now press the reset button twice and you should see the
++ U-Boot command prompt (=>) in your minicom window. You can now control
++ U-Boot from the minicom window.
++
++ Using u-boot-load-hd.sh / u-boot-load-hg.sh leads to the above results on
++ devices with the original software. On some LinkStations with modified
++ software, reboot has been modified to send a reboot command to the AVR.
++ This is indicated by the fast blinking of the power LED immediately after
++ running u-boot-load-hd.sh / u-boot-load-hg.sh. Once the AVR receives a
++ reboot command, the reboot process cannot be stopped. The AVR will reboot
++ the LinkStation 5 min after receiving the reboot command.
++ If you find yourself in the above situation you can still test U-Boot by
++ booting your LinkStation with the AVR disabled. Press and hold the reset
++ button and then press the power button. All LEDs will start flashing but
++ your LinkStation will boot normally. Now you can use the procedure
++ described above with one caveat: the AVR being disabled, pressing the
++ buttons will have no effect so you will not be able to test the behaviour
++ of the minimal console.
++
++ Once you get the U-Boot command prompt, start testing it. Read the
++ [15]U-Boot documentation and try each command you are interested in.
++
++ Keep in mind that U-Boot interprets all input number as hex numbers. If, for
++ example, you type 256, U-Boot will interpret it as 598 decimal.
++
++ When you are testing memory write commands, do not attempt to write to the
++ first MB of memory (0x00000000 to 0x00100000) as you will be overwriting the
++ exception vectors and U-Boot will crash.
++
++ An important command is flinfo which displays information about the flash
++ chip. If the information displayed is correct for your flash, test the flash
++ erase and flash write commands. To do this, you will need to find an empty
++ sector, one for which each byte is 0xFF. Hint: check the last flash sector
++ first, chances are that it's empty. When you are testing commands that write
++ to the flash, always remember that you can write a single byte but you can
++ only erase whole sectors.
++
++ Be very careful not to write to the flash memory range 0xFFC00000 to
++ 0xFFF7FFFF. This area contains the Linux kernel, the initial RAM disk used
++ for EM mode, the bootloader and the configuration sector (which holds the
++ "OKOK" or "NGNG" pattern). The range 0xFFF80000 to 0xFFFFFFFF is the user
++ area and, in most cases, is empty. Always check using the U-Boot command md
++ (memory display) if the flash area you intend to use is empty (all bytes are
++ 0xFF). For more information about the flash organisation, read
++ [16]PPCFlashROM for the LinkStation 1 / KuroBox standard or [17]HGFlashROM
++ for the LinkStation HG / KuroBox HG.
++
++ ROM Build
++
++ Once you are happy with the RAM build, you are ready for the ROM build.
++
++ For LinkStation 1 / KuroBox standard run:
++ make linkstation_HDLAN_config
++ make linkstation_HDLAN
++
++ The name of the resulting binary is u-boot-hd.flash.bin
++
++ For LinkStation HG / KuroBox HG run:
++ make linkstation_HGLAN_config
++ make linkstation_HGLAN
++
++ The name of the resulting binary is u-boot-hg.flash.bin
++
++ Install
++
++ Do not attempt to flash from U-Boot if the power LED is blinking. Your
++ LinkStation is likely to reboot and you will end up with a "brick"
++ Test the flash commands thoroughly before deciding to burn U-Boot into
++ flash. Write at least 128 kB to the flash to test potential timeout
++ problems
++ The flash routines in this version of U-Boot for the LinkStation should be
++ able to identify and handle any CFI flash which uses the AMD standard
++ command set. However, they were tested only on a LinkStation with a Fujitsu
++ MBM29PL32TM flash chip and on a LinkStation HG with a ST Micro M29DW324DB
++ flash chip.
++ Be very careful not to flash your hardware with the wrong U-Boot build.
++ Flashing any RAM build or flashing a ROM build for the LinkStation 1 /
++ KuroBox standard into the LinkStation HG / KuroBox HG or viceversa will
++ "brick" your device. This is especially true if you are flashing from Linux
++ as U-Boot has safety checks to avoid flashing the wrong build.
++
++ Flashing U-Boot from U-Boot
++
++ The RAM build of U-Boot can be used to load and flash the ROM build. This is
++ the preferred method.
++
++ Boot your LinkStation normally. Open a telnet session and create a directory
++ to hold the U-Boot flash image.
++ root@linkstation:~# cd /mnt/share
++ root@linkstation:/mnt/share# mkdir u-boot
++
++ Copy the U-Boot flash image to your LinkStation SMB share in the directory
++ u-boot.
++
++ Load the RAM build of U-Boot and at the U-Boot command prompt type:
++ => run upgrade
++
++ U-Boot will attempt to load the ROM build from the directory share/u-boot/
++ on the third partition of the hard drive. If the load is successful, it will
++ do the following:
++ 1. unprotect the bootloader area;
++ 2. erase the bootloader area;
++ 3. copy the loaded file to the bootloader area;
++ 4. verify the copy;
++
++ Here is the output of run upgrade
++ => run upgrade
++ Loading 0:3:share/u-boot/u-boot-hg.flash.bin
++ 174668 bytes read
++ Un-Protected 3 sectors
++ Flash erase: first = 55 @ 0xfff00000
++ last = 57 @ 0xfff20000
++ Flash erase: Done
++ Erased 3 sectors
++ Copy to Flash... done
++ Total of 174668 bytes were the same
++ =>
++
++ When the above sequence finishes, U-Boot returns to the command prompt (=>).
++
++ Depending on your flash chip, the flash operation can take a long time. Wait
++ patiently and do not try to power down or otherwise interrupt the flash or
++ you will end up with a "brick".
++
++ Reboot:
++ => reset
++
++ The power LED should start blinking slowly and, if you have a serial
++ console, you should see the U-Boot startup messages. Your LinkStation is now
++ running U-Boot.
++
++ Flashing U-Boot from Linux
++
++ Connect to your LinkStation using either the serial port or telnet.
++
++ For LinkStation 1 / KuroBox standard run:
++ # cd /mnt/share/u-boot
++ # dd if=u-boot-hd.flash.bin of=/dev/fl2 bs=1k
++ # cmp u-boot.bin /dev/fl2
++
++ For LinkStation HG / KuroBox HG run:
++ # cd /mnt/share/u-boot
++ # dd if=u-boot-hg.flash.bin of=/dev/mtd1 bs=1k
++ # cmp u-boot.bin /dev/mtd1
++
++ The above commands for LinkStation HG / KuroBox HG will work on devices with
++ the original kernel version 2.4.20 but might to work on earlier devices
++ using kernel version 2.4.17. Please check which device corresponds to the
++ bootloader partition on your hardware.
++
++ If the Flash Fails
++
++ If the flash was not written correctly but U-Boot returns at the command
++ prompt, try to re-run run upgrade.
++
++ If the same happens when you attempt to install U-Boot from Linux, try to dd
++ again.
++
++ If your flash fails completely, for example due to a power failure, all is
++ not completely lost. You can still use a JTAG cable to re-flash your
++ Linkstation. Unfortunately, this is a relatively complicated and expensive
++ solution as it involves acquiring or building the JTAG cable and soldering
++ the header for it on the LinkStation motherboard. For more information on
++ how to use a JTAG cable with the LinkStation you can visit
++ [18]www.linkstationwiki.net and [19]www.kurobox.com/mwiki.
++
++ EM Mode
++
++ Warning for the LinkStation / LinkStation HG users
++
++ Do not attempt to boot into EM mode using the method described here. The
++ password for the EM mode is unknown for all LinkStation models.
++
++ Once you have U-Boot installed in the on-board flash, you can boot in EM
++ mode even if the third boot command described above doesn't work.
++
++ Stop the boot countdown by pressing 's' in your net console window and, at
++ the U-Boot command prompt, run:
++ => run writeng
++ => run flboot
++
++ The above commands write "NGNG" to 0xFFF70000 and boot from the on-board
++ flash. To revert to normal boot by writing "OKOK" to 0xFFF70000, run:
++ => run writeok
++ => boot
++
++ Advanced configuration
++
++ The initial U-Boot configuration can be changed by editing the file
++ include/configs/linkstation.h.
++
++ In all the examples below, please note the backslash-zero (\0) at the end of
++ the strings and the space-backslash ( \) at the end of each lines and do not
++ change them.
++
++ Change the name of the default boot file
++
++ Search for the lines containing:
++ "hdpart=0:1\0" \
++ "hdfile=boot/vmlinux.UBoot\0" \
++
++ and change them to the values you want. Partition 0:1 means disk 0,
++ partition 1. Obviously, you can only change the partition number as there is
++ only one disk. The name of the file must be given relative to the root of
++ the partition.
++
++ Change the default console to the serial console
++
++ Search for the lines containing:
++ "stdin=nc\0" \
++ "stdout=nc\0" \
++ "stderr=nc\0" \
++
++ and change them to:
++ "stdin=serial\0" \
++ "stdout=serial\0" \
++ "stderr=serial\0" \
++
++ Change the default boot command to boot from flash
++
++ Search for the lines containing:
++ "bootcmd1=run hdboot;run flboot\0" \
++ "bootcmd2=run flboot\0" \
++
++ and change them to:
++ "bootcmd1=run flboot\0" \
++ "bootcmd2=run hdboot;run flboot\0" \
++
++References
++
++ 1. http://www.linuxnotincluded.org.uk/fdl.txt
++ 2. http://www.linkstationwiki.net/index.php?title=CGI_Exploit_%28PowerPC%29_original_method_of_Hacking_the_LinkStation
++ 3. http://www.linkstationwiki.net/index.php?title=Turn_your_LinkStation_into_a_Kuro_Box_%28PowerPC%29
++ 4. http://linkstationwiki.net/index.php?title=OpenLink
++ 5. http://linkstationwiki.net/index.php?title=The_LinkStation_firmware_flasher
++ 6. http://downloads.linkstationwiki.net/snapshots/HD-HGLAN_149_100_telnet.zip
++ 7. http://www.linkstationwiki.net/index.php?title=Add_a_Serial_port_to_the_PowerPC_Linkstation
++ 8. http://netcat.sourceforge.net/
++ 9. http://www.vulnwatch.org/netcat
++ 10. http://ftp.sunet.se/pub/Linux/distributions/eldk/3.1.1/ppc-linux-x86/iso/ppc-2005-03-07.iso
++ 11. ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.4.tar.bz2
++ 12. http://www.linuxnotincluded.org.uk/linkstation/downloads/u-boot-1.1.4-list-2.1.0.diff.gz
++ 13. http://www.linuxnotincluded.org.uk/linkstation/downloads/uloader-2.4.17.tar.gz
++ 14. http://www.linuxnotincluded.org.uk/linkstation/downloads/uloader-2.4.20.tar.gz
++ 15. http://www.denx.de/wiki/DULG/Manual
++ 16. http://linkstationwiki.net/index.php?title=Information/PPCFlashROM
++ 17. http://linkstationwiki.net/index.php?title=Information/HGFlashROM
++ 18. http://www.linkstationwiki.net/
++ 19. http://www.kurobox.com/mwiki
+diff -urN u-boot-86xx/board/linkstation/Makefile u-boot-86xx-kuro_clean/board/linkstation/Makefile
+--- u-boot-86xx/board/linkstation/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/Makefile 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,41 @@
++#
++# (C) Copyright 2001
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS = $(BOARD).o flash.o ide.o hwctl.o bootls.o avr.o
++SOBJS = early_init.o
++
++$(LIB): .depend $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++sinclude .depend
++
++#########################################################################
+diff -urN u-boot-86xx/board/linkstation/avr.c u-boot-86xx-kuro_clean/board/linkstation/avr.c
+--- u-boot-86xx/board/linkstation/avr.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/avr.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,307 @@
++/*
++ * avr.c
++ *
++ * AVR functions
++ *
++ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#include <common.h>
++#include <ns16550.h>
++#include <console.h>
++
++/* Button codes from the AVR */
++#define PWRR 0x20 /* Power button release */
++#define PWRP 0x21 /* Power button push */
++#define RESR 0x22 /* Reset button release */
++#define RESP 0x23 /* Reset button push */
++#define AVRINIT 0x33 /* Init complete */
++#define AVRRESET 0x31 /* Reset request */
++
++/* LED commands */
++#define PWRBLINKSTRT '[' /* Blink power LED */
++#define PWRBLINKSTOP 'Z' /* Solid power LED */
++#define HDDLEDON 'W' /* HDD LED on */
++#define HDDLEDOFF 'V' /* HDD LED off */
++#define HDDBLINKSTRT 'Y' /* HDD LED start blink */
++#define HDDBLINKSTOP 'X' /* HDD LED stop blink */
++
++/* Timings for LEDs blinking to show choice */
++#define PULSETIME 250 /* msecs */
++#define LONGPAUSE (5 * PULSETIME)
++
++/* Button press times */
++#define PUSHHOLD 1000 /* msecs */
++#define NOBUTTON (6 * (LONGPAUSE+PULSETIME))
++
++/* Boot and console choices */
++#define MAX_BOOT_CHOICE 3
++
++static char *consoles[] = {
++ "serial",
++#if defined(CONFIG_NETCONSOLE)
++ "nc",
++#endif
++};
++#define MAX_CONS_CHOICE (sizeof(consoles)/sizeof(char *))
++
++#if !defined(CONFIG_NETCONSOLE)
++#define DEF_CONS_CHOICE 0
++#else
++#define DEF_CONS_CHOICE 1
++#endif
++
++#define perror(fmt,args...) printf("%s: ",__FUNCTION__);printf(fmt,##args)
++
++extern void miconCntl_SendCmd(unsigned char dat);
++extern void miconCntl_DisWDT(void);
++
++static int boot_stop;
++
++static int boot_choice = 1;
++static int cons_choice = DEF_CONS_CHOICE;
++
++static char envbuffer[16];
++
++void init_AVR_DUART (void)
++{
++ NS16550_t AVR_port = (NS16550_t) CFG_NS16550_COM2;
++ int clock_divisor = CFG_NS16550_CLK / 16 / 9600;
++
++ /*
++ * AVR port init sequence taken from
++ * the original Linkstation init code
++ * Normal U-Boot serial reinit doesn't
++ * work because the AVR uses even parity
++ */
++ AVR_port->lcr = 0x00;
++ AVR_port->ier = 0x00;
++ AVR_port->lcr = LCR_BKSE;
++ AVR_port->dll = clock_divisor & 0xff;
++ AVR_port->dlm = (clock_divisor >> 8) & 0xff;
++ AVR_port->lcr = LCR_WLS_8 | LCR_PEN | LCR_EPS;
++ AVR_port->mcr = 0x00;
++ AVR_port->fcr = FCR_FIFO_EN | FCR_RXSR | FCR_TXSR;
++
++ miconCntl_DisWDT();
++
++ boot_stop = 0;
++ miconCntl_SendCmd(PWRBLINKSTRT);
++}
++
++void hw_watchdog_reset (void)
++{
++}
++
++static inline int avr_tstc(void)
++{
++ return (NS16550_tstc((NS16550_t)CFG_NS16550_COM2));
++}
++
++static inline char avr_getc(void)
++{
++ return (NS16550_getc((NS16550_t)CFG_NS16550_COM2));
++}
++
++static int push_timeout(char button_code)
++{
++ ulong push_start = get_timer(0);
++ while (get_timer(push_start) <= PUSHHOLD)
++ if (avr_tstc() && avr_getc() == button_code)
++ return 0;
++ return 1;
++}
++
++static void next_boot_choice(void)
++{
++ ulong return_start;
++ ulong pulse_start;
++ int on_times;
++ int button_on;
++ int led_state;
++ char c;
++
++ button_on = 0;
++ return_start = get_timer(0);
++
++ on_times = boot_choice;
++ led_state = 0;
++ miconCntl_SendCmd(HDDLEDOFF);
++ pulse_start = get_timer(0);
++
++ while (get_timer(return_start) <= NOBUTTON || button_on)
++ {
++ if (avr_tstc()) {
++ c = avr_getc();
++ if (c == PWRP)
++ button_on = 1;
++ else if (c == PWRR) {
++ button_on = 0;
++ return_start = get_timer(0);
++ if (++boot_choice > MAX_BOOT_CHOICE)
++ boot_choice = 1;
++ sprintf(envbuffer, "bootcmd%d", boot_choice);
++ if (getenv(envbuffer)) {
++ sprintf(envbuffer, "run bootcmd%d", boot_choice);
++ setenv("bootcmd", envbuffer);
++ }
++ on_times = boot_choice;
++ led_state = 1;
++ miconCntl_SendCmd(HDDLEDON);
++ pulse_start = get_timer(0);
++ } else {
++ perror("Unexpected code: 0x%02X\n", c);
++ }
++ }
++ if (on_times && get_timer(pulse_start) > PULSETIME) {
++ if (led_state == 1) {
++ --on_times;
++ led_state = 0;
++ miconCntl_SendCmd(HDDLEDOFF);
++ } else {
++ led_state = 1;
++ miconCntl_SendCmd(HDDLEDON);
++ }
++ pulse_start = get_timer(0);
++ }
++ if (!on_times && get_timer(pulse_start) > LONGPAUSE) {
++ on_times = boot_choice;
++ led_state = 1;
++ miconCntl_SendCmd(HDDLEDON);
++ pulse_start = get_timer(0);
++ }
++ }
++ if (led_state)
++ miconCntl_SendCmd(HDDLEDOFF);
++}
++
++void next_cons_choice(int console)
++{
++ ulong return_start;
++ ulong pulse_start;
++ int on_times;
++ int button_on;
++ int led_state;
++ char c;
++ device_t *idev;
++ device_t *odev;
++
++ button_on = 0;
++ cons_choice = console;
++ return_start = get_timer(0);
++
++ on_times = cons_choice+1;
++ led_state = 1;
++ miconCntl_SendCmd(HDDLEDON);
++ pulse_start = get_timer(0);
++
++ while (get_timer(return_start) <= NOBUTTON || button_on)
++ {
++ if (avr_tstc()) {
++ c = avr_getc();
++ if (c == RESP)
++ button_on = 1;
++ else if (c == RESR) {
++ button_on = 0;
++ return_start = get_timer(0);
++ cons_choice = (cons_choice + 1) % MAX_CONS_CHOICE;
++ idev = search_device(DEV_FLAGS_INPUT, consoles[cons_choice]);
++ odev = search_device(DEV_FLAGS_OUTPUT, consoles[cons_choice]);
++ console_setfile (stdin, idev);
++ console_setfile (stdout, odev);
++ console_setfile (stderr, odev);
++ on_times = cons_choice+1;
++ led_state = 0;
++ miconCntl_SendCmd(HDDLEDOFF);
++ pulse_start = get_timer(0);
++ } else {
++ perror("Unexpected code: 0x%02X\n", c);
++ }
++ }
++ if (on_times && get_timer(pulse_start) > PULSETIME) {
++ if (led_state == 0) {
++ --on_times;
++ led_state = 1;
++ miconCntl_SendCmd(HDDLEDON);
++ } else {
++ led_state = 0;
++ miconCntl_SendCmd(HDDLEDOFF);
++ }
++ pulse_start = get_timer(0);
++ }
++ if (!on_times && get_timer(pulse_start) > LONGPAUSE) {
++ on_times = cons_choice+1;
++ led_state = 0;
++ miconCntl_SendCmd(HDDLEDOFF);
++ pulse_start = get_timer(0);
++ }
++ }
++ if (led_state);
++ miconCntl_SendCmd(HDDLEDOFF);
++}
++
++int avr_input(void)
++{
++ char avr_button;
++ int ret;
++
++ if (!avr_tstc())
++ return 0;
++
++ avr_button = avr_getc();
++ switch (avr_button) {
++ case PWRP:
++ if (push_timeout(PWRR)) {
++ /* Timeout before power button release */
++ boot_stop = ~boot_stop;
++ if (boot_stop)
++ miconCntl_SendCmd(PWRBLINKSTOP);
++ else
++ miconCntl_SendCmd(PWRBLINKSTRT);
++ /* Wait for power button release */
++ while (avr_getc() != PWRR)
++ ;
++ }
++ else
++ /* Power button released */
++ next_boot_choice();
++ break;
++ case RESP:
++ /* Wait for Reset button release */
++ while (avr_getc() != RESR)
++ ;
++ next_cons_choice(cons_choice);
++ break;
++ case AVRINIT:
++ return 0;
++ default:
++ perror("Unexpected code: 0x%02X\n", avr_button);
++ return 0;
++ }
++ if (boot_stop)
++ return (-3);
++ else
++ return (-2);
++}
++
++void avr_StopBoot(void)
++{
++ boot_stop = ~0;
++ miconCntl_SendCmd(PWRBLINKSTOP);
++}
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/bootls.c u-boot-86xx-kuro_clean/board/linkstation/bootls.c
+--- u-boot-86xx/board/linkstation/bootls.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/bootls.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,304 @@
++/*
++ * bootls.c
++ *
++ * Boot a Linkstation kernel of type firmimg.bin
++ *
++ * U-Boot loader code for Linkstation kernel. A file of type firmimg.bin
++ * consists of a header, immediately followed by a compressed kernel image,
++ * followed by a compressed initrd image.
++ *
++ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ * Derived from:
++ *
++ * arch/ppc/common/misc-simple.c (linux-2.4.17_mvl21-sandpoint)
++ * Author: Matt Porter <mporter@mvista.com>
++ * Derived from arch/ppc/boot/prep/misc.c
++ * 2001 (c) MontaVista, Software, Inc.
++ *
++ * common/cmd_bootm.c (u-boot-1.1.4)
++ * (C) Copyright 2000-2002
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ */
++
++#include <common.h>
++#include <command.h>
++
++#include "firminfo.h"
++
++#define _ALIGN(addr,size) (((addr)+size-1)&(~(size-1)))
++
++struct bi_record {
++ unsigned long tag; /* tag ID */
++ unsigned long size; /* size of record (in bytes) */
++ unsigned long data[0]; /* data */
++};
++
++#define BI_FIRST 0x1010 /* first record - marker */
++#define BI_LAST 0x1011 /* last record - marker */
++
++extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
++extern int gunzip(void *, int, unsigned char *, int *);
++
++/*
++ * output BYTE data
++ */
++static inline void outb(volatile unsigned char *addr, int val)
++{
++ asm volatile("eieio");
++ asm volatile("stb%U0%X0 %1,%0; sync; isync" : "=m" (*addr) : "r" (val));
++}
++
++unsigned long checksum_check(unsigned char* addr, unsigned long size)
++{
++ long *laddr = (long *)addr;
++ unsigned long sum = 0,remain = 0;
++ int i;
++ while(size>=4) {
++ sum += *laddr;
++ laddr++;
++ size -= 4;
++ }
++ addr = (unsigned char*)laddr;
++ for(i=0;i<4;++i) {
++ remain = remain << 8;
++ if(size>i) remain += *addr;
++ addr++;
++ }
++ sum += remain;
++ return sum;
++}
++
++void do_boot_lskernel (cmd_tbl_t *cmdtp,
++ int flag,
++ int argc,
++ char *argv[],
++ unsigned long load_addr,
++ unsigned long *len_ptr,
++ int verify)
++{
++ DECLARE_GLOBAL_DATA_PTR;
++
++ char *zimage_start;
++ int zimage_size;
++ unsigned long initrd_start;
++ unsigned long initrd_end;
++ unsigned long sp;
++ unsigned long cmd_start;
++ unsigned long cmd_end;
++ char *cmdline;
++ char *s;
++ bd_t *kbd;
++ void (*kernel)(bd_t *, ulong, ulong, ulong, ulong);
++ unsigned long iflag;
++ struct firminfo *info = (struct firminfo *)load_addr;
++ struct bi_record *rec;
++
++ int i;
++ char *flashstr="FLASH";
++
++ for (i=0; i <= 4; i++)
++ if (info->subver[i] != flashstr[i]) {
++ puts ("Not a Linkstation kernel\n");
++ return;
++ }
++
++ printf("\n******* Product Information *******\n");
++ printf("----------------------------------\n");
++
++ printf("Product Name: %s\n", info->firmname);
++ printf(" VER: %d.%02d\n", info->ver_major, info->ver_minor);
++ printf(" Date: %d/%d/%d %d:%d:%d\n",
++ info->year+1900, info->mon, info->day,
++ info->hour,info->min,info->sec);
++ printf("----------------------------------\n");
++
++ if (verify) {
++ printf("Verifying checksum... ");
++ if (checksum_check((unsigned char*)info, info->size) != 0) {
++ printf("Failed!: checksum %08X, expecting 0\n",
++ checksum_check((unsigned char*)info, info->size));
++ return; /* Returns on error */
++ } else
++ printf("OK\n");
++ }
++
++ zimage_start = (char*)info + info->kernel_offset;
++ zimage_size = (int)info->kernel_size;
++ iflag = disable_interrupts();
++ puts("Uncompressing kernel...");
++ if (gunzip(0, 0x400000, zimage_start, &zimage_size) != 0) {
++ puts ("Failed! MUST reset board to recover\n");
++ do_reset (cmdtp, flag, argc, argv);
++ } else
++ puts("done.\n");
++
++ /*
++ * Allocate space for command line and board info - the
++ * address should be as high as possible within the reach of
++ * the kernel (see CFG_BOOTMAPSZ settings), but in unused
++ * memory, which means far enough below the current stack
++ * pointer.
++ */
++
++ asm( "mr %0,1": "=r"(sp) : );
++ debug ("## Current stack ends at 0x%08lX ", sp);
++ sp -= 2048; /* just to be sure */
++ if (sp > CFG_BOOTMAPSZ)
++ sp = CFG_BOOTMAPSZ;
++ sp &= ~0xF;
++ debug ("=> set upper limit to 0x%08lX\n", sp);
++
++ cmdline = (char *)((sp - CFG_BARGSIZE) & ~0xF);
++ if ((s = getenv("bootargs")) == NULL)
++ s = "root=/dev/hda1";
++ strcpy (cmdline, s);
++ cmd_start = (ulong)&cmdline[0];
++ cmd_end = cmd_start + strlen(cmdline);
++ debug ("## cmdline at 0x%08lX ... 0x%08lX\n", cmd_start, cmd_end);
++
++ kbd = (bd_t *)(((ulong)cmdline - sizeof(bd_t)) & ~0xF);
++ *kbd = *(gd->bd);
++ if ((s = getenv ("clocks_in_mhz")) != NULL) {
++ /* convert all clock information to MHz */
++ kbd->bi_intfreq /= 1000000L;
++ kbd->bi_busfreq /= 1000000L;
++ }
++
++ kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))0x4;
++
++ if (info->initrd_size > 0) {
++ initrd_start = (unsigned long)((char*)info + info->initrd_offset);
++ initrd_end = initrd_start + info->initrd_size;
++ if(initrd_start > 0xffc00000 && initrd_end < 0xffefffff) {
++ unsigned long nsp;
++ unsigned long data;
++
++ data = initrd_start;
++ /*
++ * the inital ramdisk does not need to be within
++ * CFG_BOOTMAPSZ as it is not accessed until after
++ * the mm system is initialised.
++ *
++ * do the stack bottom calculation again and see if
++ * the initrd will fit just below the monitor stack
++ * bottom without overwriting the area allocated
++ * above for command line args and board info.
++ */
++ asm( "mr %0,1": "=r"(nsp) : );
++ nsp -= 2048; /* just to be sure */
++ nsp &= ~0xF;
++ nsp -= info->initrd_size;
++ nsp &= ~(4096 - 1); /* align on page */
++ initrd_start = nsp;
++ initrd_end = initrd_start + info->initrd_size;
++ printf ("Loading Ramdisk at 0x%08lX, end 0x%08lX ... ",
++ initrd_start, initrd_end);
++ memmove ((void *)initrd_start, (void *)data, info->initrd_size);
++ puts ("OK\n");
++ }
++ } else {
++ initrd_start = 0;
++ initrd_end = 0;
++ }
++
++ /*
++ * The kernel looks for this structure even if
++ * the information in it is replaced by the
++ * Linkstation kernel
++ */
++ rec = (struct bi_record *)_ALIGN((unsigned long)zimage_size +
++ (1 << 20) - 1,(1 << 20));
++ rec->tag = BI_FIRST;
++ rec->size = sizeof(struct bi_record);
++ rec = (struct bi_record *)((unsigned long)rec + rec->size);
++ rec->tag = BI_LAST;
++ rec->size = sizeof(struct bi_record);
++
++#if defined(CONFIG_HLAN) || defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ // kernel load done.
++ outb(0x80004500, 0x49); // send signal
++ outb(0x80004500, 0x49); // send signal
++ outb(0x80004500, 0x49); // send signal
++ outb(0x80004500, 0x49); // send signal
++#endif
++#if defined(CONFIG_HGLAN)
++ // full speed
++ udelay(10000); /* 10 msec */
++ outb(0x80004500, 0x5D); // send signal
++ outb(0x80004500, 0x5D); // send signal
++ outb(0x80004500, 0x5D); // send signal
++ outb(0x80004500, 0x5D); // send signal
++#endif
++#if defined(CONFIG_HTGL)
++ // LINK/ACT led controll
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x39); // 9
++ outb(0x80004500, 0x31); // 1
++ outb(0x80004500, 0x39); // 9
++ outb(0x80004500, 0x30); // 0
++ outb(0x80004500, 0x92); // 1000Mbps down
++ outb(0x80004500, 0x92); // 1000Mbps down
++
++ udelay(10000); /* 10 msec */
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x39); // 9
++ outb(0x80004500, 0x30); // 0
++ outb(0x80004500, 0x39); // 9
++ outb(0x80004500, 0x30); // 0
++ outb(0x80004500, 0x90); // 100Mbps down
++ outb(0x80004500, 0x90); // 100Mbps down
++
++ udelay(10000); /* 10 msec */
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x61); // a
++ outb(0x80004500, 0x38); // 8
++ outb(0x80004500, 0x46); // F
++ outb(0x80004500, 0x39); // 9
++ outb(0x80004500, 0x30); // 0
++ outb(0x80004500, 0x8E); // 10Mbps down
++ outb(0x80004500, 0x8E); // 10Mbps down
++
++ udelay(10000); /* 10 msec */
++ outb(0x80004500, 0x5F); // _
++ outb(0x80004500, 0x5F); // _
++#endif
++
++/*
++ * This is what the original boot loader sends
++ * just before jumping to the kernel start
++ */
++ outb(0xFF000001, 0xFF);
++
++ puts("Booting the kernel\n");
++
++ /*
++ * Linux Kernel Parameters:
++ * r3: ptr to board info data
++ * r4: initrd_start or 0 if no initrd
++ * r5: initrd_end - unused if r4 is 0
++ * r6: Start of command line string
++ * r7: End of command line string
++ */
++ (*kernel)((bd_t *)0xFF000001, initrd_start, initrd_end, cmd_start, cmd_end);
++}
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/config.mk u-boot-86xx-kuro_clean/board/linkstation/config.mk
+--- u-boot-86xx/board/linkstation/config.mk 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/config.mk 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,50 @@
++#
++# (C) Copyright 2001-2003
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++# LinkStation/LinkStation-HG:
++#
++# Valid values for TEXT_BASE are:
++#
++# Standard configuration - all models
++# 0xFFF00000 boot from flash
++#
++# Test configuration (boot from RAM using uloader.o)
++# LinkStation HD-HLAN and KuroBox Standard
++# 0x03F00000 boot from RAM
++# LinkStation HD-HGLAN and KuroBox HG
++# 0x07F00000 boot from RAM
++#
++
++sinclude $(TOPDIR)/board/$(BOARDDIR)/config.tmp
++
++ifndef TEXT_BASE
++# For flash image - all models
++TEXT_BASE = 0xFFF00000
++# For RAM image
++# HLAN and LAN
++#TEXT_BASE = 0x03F00000
++# HGLAN and HGTL
++#TEXT_BASE = 0x07F00000
++endif
++
++PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
+diff -urN u-boot-86xx/board/linkstation/early_init.S u-boot-86xx-kuro_clean/board/linkstation/early_init.S
+--- u-boot-86xx/board/linkstation/early_init.S 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/early_init.S 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,432 @@
++/*
++ * board/linkstation/early_init.S
++ *
++ * Begin at some arbitrary location in RAM or Flash
++ * Initialize core registers
++ * Configure memory controller (Not executing from RAM)
++ * Initialize UARTs
++ * Simple RAM test (currently suspended)
++ *
++ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ * Modified for U-Boot from arch/ppc/boot/linkstation/head.S from
++ * the GPL code for the Buffalo Terastation, derived in its turn from:
++ *
++ * arch/ppc/boot/sandpoint/head.S
++ *
++ * Initial board bringup code for Motorola SPS Sandpoint test platform
++ *
++ * Author: Mark A. Greer
++ * mgreer@mvista.com
++ * Derived from arch/ppc/boot/pcore/head.S (mporter@mvista.com)
++ *
++ * Copyright 2001 MontaVista Software Inc.
++ */
++
++#include <config.h>
++#include <ppc_asm.tmpl>
++#include <mpc824x.h>
++#include <ppc_defs.h>
++#include <asm/cache.h>
++
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++#define RAM_SIZE 0x04000000
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++#define RAM_SIZE 0x08000000
++#endif
++
++#define UART1 0x80004500
++#define UART1_IER 0x80004501
++#define UART1_FCR 0x80004502
++#define UART1_LCR 0x80004503
++#define UART1_DCR 0x80004511
++#define UART2 0x80004600
++#define UART2_IER 0x80004601
++#define UART2_FCR 0x80004602
++#define UART2_LCR 0x80004603
++#define UART2_DCR 0x80004611
++
++#define WM32(address,data) \
++ lis r3, address@h; \
++ ori r3, r3, address@l; \
++ lis r4, data@h; \
++ ori r4, r4, data@l; \
++ stw r4, 0x0000(r3); \
++ sync; \
++ isync;
++
++#define WM16(address,data) \
++ lis r3, address@h; \
++ ori r3, r3, address@l; \
++ li r4, data; \
++ sth r4, 0x0000(r3); \
++ sync; \
++ isync;
++
++#define WM8(address,data) \
++ lis r3, address@h; \
++ ori r3, r3, address@l; \
++ li r4, data; \
++ stb r4, 0(r3); \
++ sync; \
++ isync;
++
++ .text
++
++ .globl early_init_f
++early_init_f:
++/*
++ * Configure core registers
++ */
++
++ /* Establish default MSR value, exception prefix 0xFFF */
++ li r3,MSR_IP|MSR_FP
++ mtmsr r3
++
++ /* Clear BATS */
++ li r8,0
++ mtspr DBAT0U,r8
++ mtspr DBAT0L,r8
++ mtspr DBAT1U,r8
++ mtspr DBAT1L,r8
++ mtspr DBAT2U,r8
++ mtspr DBAT2L,r8
++ mtspr DBAT3U,r8
++ mtspr DBAT3L,r8
++ mtspr IBAT0U,r8
++ mtspr IBAT0L,r8
++ mtspr IBAT1U,r8
++ mtspr IBAT1L,r8
++ mtspr IBAT2U,r8
++ mtspr IBAT2L,r8
++ mtspr IBAT3U,r8
++ mtspr IBAT3L,r8
++ isync
++ sync
++ sync
++
++ /* Set segment registers */
++ lis r8, 0x0000
++ isync
++ mtsr SR0,r8
++ mtsr SR1,r8
++ mtsr SR2,r8
++ mtsr SR3,r8
++ mtsr SR4,r8
++ mtsr SR5,r8
++ mtsr SR6,r8
++ mtsr SR7,r8
++ mtsr SR8,r8
++ mtsr SR9,r8
++ mtsr SR10,r8
++ mtsr SR11,r8
++ mtsr SR12,r8
++ mtsr SR13,r8
++ mtsr SR14,r8
++ mtsr SR15,r8
++ isync
++ sync
++ sync
++
++ /* Disable L1 icache/dcache */
++ li r4,0x0000
++ isync
++ mtspr HID0,r4
++ sync
++ isync
++
++ /* Flash Invalidate L1 icache/dcache */
++
++ ori r4,r4,0x8000
++ ori r8,r4,0x0800
++ isync
++ mtspr HID0,r8
++ sync
++ isync
++
++ /* Older cores need to manually clear ICFI bit */
++
++ mtspr HID0,r4
++ sync
++ isync
++
++#if !defined(CFG_RAMBOOT)
++melco_config_start:
++ /* --- CPU Configration registor setting for LinkStation --- */
++ WM32(0x80041020,0x000000a0) /* Reset EPIC */
++
++ /* errata for latency timer */
++ WM32(0xFEC00000,0x0d000080)
++ WM8(0xFEE00001,0x20)
++ /* cash size */
++ WM32(0xFEC00000,0x0c000080)
++ WM8(0xFEE00000,0x08)
++ /* PCI configuration command register */
++ WM32(0xFEC00000,0x04000080)
++ WM16(0xFEE00000,0x0600)
++ /* Processor interface configuration register 1 */
++ WM32(0xFEC00000,0xa8000080)
++ /* WM32(0xFEE00000,0xd8131400) */
++ lis r3, 0xFEE00000@h
++ ori r3, r3, 0xFEE00000@l
++
++ lwz r5, 0(r3) /* load PCIR1 Config */
++ lis r4, 0x0
++ ori r4, r4, 0x1000
++ and r5, r4, r5 /* Get Bit20(RCS0) */
++
++ lis r4, 0xd8130400@h
++ ori r4, r4, 0xd8130400@l
++ or r4, r4, r5 /* Save (RCS0) */
++
++ stw r4, 0x0000(r3)
++ sync
++ isync
++
++ /* Processor interface configuration register 2 */
++ WM32(0xFEC00000,0xac000080)
++ WM32(0xFEE00000,0x00000004)
++ /* Embeded Utility Memory Block Base Address register */
++ WM32(0xFEC00000,0x78000080)
++ WM32(0xFEE00000,0x00000080)
++ /* Address map B option register */
++ WM32(0xFEC00000,0xe0000080)
++ WM8(0xFEE00000,0x20) /* DLL_RESET on */
++
++ /* Address map B option register */
++ WM32(0xFEC00000,0xe0000080)
++ WM8(0xFEE00000,0xc0)
++ /* PCI arbiter control register */
++ WM32(0xFEC00000,0x46000080)
++ WM16(0xFEE00002,0x00c0)
++
++ /* Added to use the high drive strength for the memory selects & addressing */
++ WM32(0xFEC00000,0x73000080)
++ /* WM8(0xFEE00003,0x15) */ /*0x17*/
++ /* Motorola Errata refer to User's Manual Errata#19 */
++ /* WM8(0xFEE00003,0xD5) */
++ WM8(0xFEE00003,0x95)
++
++ /* set miscellaneous I/O control register 1 */
++ WM32(0xFEC00000,0x76000080)
++ WM8(0xFEE00002,0x00) /*0x02*/
++ /* set miscellaneous I/O control register 2 */
++ WM32(0xFEC00000,0x77000080)
++ WM8(0xFEE00003,0x30) /* 0x30 */
++
++ /* init memory controller */
++ WM32(0xFEC00000,0x80000080)
++ WM32(0xFEE00000,0x00FFFFFF)
++
++ WM32(0xFEC00000,0x84000080)
++ WM32(0xFEE00000,0xFFFFFFFF)
++
++ WM32(0xFEC00000,0x90000080)
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM32(0xFEE00000,0x3FFFFFFF) /* 64MB */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM32(0xFEE00000,0x7FFFFFFF) /* 128MB */
++#endif
++
++ WM32(0xFEC00000,0x94000080)
++ WM32(0xFEE00000,0xFFFFFFFF)
++
++ WM32(0xFEC00000,0x88000080)
++ WM32(0xFEE00000,0x00030303)
++ /* EMSAR2 */
++ WM32(0xFEC00000,0x8C000080)
++ WM32(0xFEE00000,0x03030303)
++ /* select EMSER1 */
++ WM32(0xFEC00000,0x98000080)
++ WM32(0xFEE00000,0x00030303)
++ /* select EMSER2 */
++ WM32(0xFEC00000,0x9C000080)
++ WM32(0xFEE00000,0x03030303)
++
++ /* MMCR1 */
++ WM32(0xFEC00000,0xf0000080)
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM32(0xFEE00000,0x0200E005) /* bank 0 13xnx4 */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM32(0xFEE00000,0x0200E005) /* bank 0 13xnx4 */
++#endif
++ /* MCCR2 */
++ WM32(0xFEC00000,0xf4000080)
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM32(0xFEE00000,0xe0150000) /* 100MHz Memory bus */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM32(0xFEE00000,0x80150000) /* 133MHz Memory bus */
++#endif
++ /* MCCR3 */
++ WM32(0xFEC00000,0xf8000080)
++ WM32(0xFEE00000,0x00000077) /* BSTOPRE_M =7 / REFREC=8 */
++
++ /* MCCR4 */
++ WM32(0xFEC00000,0xfc000080)
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM32(0xFEE00000,0x29233222) /* CAS latency=2, burst length=8, Ext Rom=eable */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM32(0xFEE00000,0x29323222) /* CAS latency=3, burst length=4, Ext Rom=eable */
++#endif
++
++ /* Output driver control register */
++ WM32(0xFEC00000,0x73000080)
++ WM8(0xFEE00003,0x15) /* for all 40 ohm */
++ /* CLK driver Control Register */
++ WM32(0xFEC00000,0x74000080)
++ WM16(0xFEE00000,0x7078)
++ /* select MBEN */
++ WM32(0xFEC00000,0xa0000080)
++ WM8(0xFEE00000, 0x01)
++ /* MPM */
++ WM32(0xFEC00000,0xa3000080)
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM8(0xFEE00003,0xF2) /* PGMAX = 242 */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM8(0xFEE00003,0xC9) /* PGMAX = 201 */
++#endif
++ /* ERCR s */
++ WM32(0xFEC00000,0xd0000080) /* ; select ERCR1 */
++ WM32(0xFEE00000,0xffffff85)
++ WM32(0xFEC00000,0xd4000080) /* ; select ERCR2 */
++ WM32(0xFEE00000,0xffffff05)
++ WM32(0xFEC00000,0xd8000080) /* ; select ERCR3 */
++ WM32(0xFEE00000,0x0000f80f)
++ WM32(0xFEC00000,0xdc000080) /* ; select ERCR4 */
++ WM32(0xFEE00000,0x0e000000)
++
++ /* MCCR1 */
++ WM32(0xFEC00000,0xf0000080)
++ WM32(0xFEE00000,0x0200E805) /* 11 + 3 clock wait MEMGO on */
++
++ /* Init UART for AVR */
++ WM8(UART1_LCR,0x00) /* clear LCR */
++ WM8(UART1_IER,0x00) /* disable interrupt */
++ WM8(UART1_LCR,0x80) /* set LCR[DLAB] bit */
++ WM8(UART1_DCR,0x01) /* set DUART mode */
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM8(UART1, 0x8B) /* set DLL(baudrate 9600bps, 100MHz) */
++ WM8(UART1_IER,0x02) /* set DLM(baudrate 9600bps, 100MHz) */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM8(UART1, 0x61) /* set DLL(baudrate 9600bps, 133MHz) */
++ WM8(UART1_IER,0x03) /* set DLM(baudrate 9600bps, 133MHz) */
++#endif
++ WM8(UART1_LCR,0x1b) /* set 8data, 1stop, even parity */
++ WM8(UART1, 0x00) /* clear MCR */
++ WM8(UART1_FCR,0x07) /* clear & enable FIFO */
++
++ /* Init UART for CONSOLE */
++ WM8(UART2_LCR,0x00) /* clear LCR */
++ WM8(UART2_IER,0x00) /* disable interrupt */
++ WM8(UART2_LCR,0x80) /* set LCR[DLAB] bit */
++ WM8(UART1_DCR,0x01) /* set DUART mode */
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++ WM8(UART2, 0x6C) /* set DLL(baudrate 57600bps, 100MHz) */
++ WM8(UART2_IER,0x00) /* set DLM(baudrate 57600bps, 100MHz) */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++ WM8(UART2, 0x90) /* set DLL(baudrate 57600bps, 133MHz) */
++ WM8(UART2_IER,0x00) /* set DLM(baudrate 57600bps, 133MHz) */
++#endif
++ WM8(UART2_LCR,0x03) /* set 8data, 1stop, non parity */
++ WM8(UART2, 0x00) /* clear MCR */
++ WM8(UART2_FCR,0x07) /* clear & enable FIFO */
++#endif /* !defined (CFG_RAMBOOT)
++
++ /* PCI Command Register initialize */
++ lis r3, 0x8000
++ ori r3, r3, 0x0004
++ lis r4, 0xFEC0
++ ori r4, r4, 0x0000
++ stwbrx r4, 0, r3
++ sync
++ isync
++
++ li r6, 0x0006
++ lis r5, 0xFEE0
++ ori r5, r5, 0x0000
++ sthbrx r5, 0, r6
++ sync
++ isync
++
++#if !defined(CFG_RAMBOOT)
++check_ram:
++ /* Wait 1 sec for AVR become enable */
++ li r3,1000
++ mulli r3,r3,1000
++ mulli r4,r3,1000 /* nanoseconds */
++ addi r4,r4,39
++ li r5,40 /* 40ns if for 100 Mhz bus */
++ divw r4,r4,r5 /* BUS ticks */
++1: mftbu r5
++ mftb r6
++ mftbu r7
++ cmp 0,r5,r7
++ bne 1b /* Get [synced] base time */
++ addc r9,r6,r4 /* Compute end time */
++ addze r8,r5
++2: mftbu r5
++ cmp 0,r5,r8
++ blt 2b
++ bgt 3f
++ mftb r6
++ cmp 0,r6,r9
++ blt 2b
++#if 1
++3:
++#else
++ /* Check RAM */
++ /* set start address(0x00000000) */
++3: xor r4,r4,r4
++ lis r5, RAM_SIZE@h
++ ori r5, r5, RAM_SIZE@l
++ lis r6, 0xaaaa /* mask pattern a */
++ ori r6, r6, 0xaaaa
++ lis r7, 0x5555 /* mask pattern b */
++ ori r7, r7, 0x5555
++ lis r8, 0x0000 /* check step size */
++ ori r8, r8, 0x0100
++check_ram_loop:
++ cmp 0,r4,r5
++ beq check_ram_end
++ stw r6,0(r4)
++ isync
++ lwz r3,0(r4)
++ isync
++ cmp 0,r3,r6
++ bne ram_error
++ stw r7,0x00fc(r4)
++ isync
++ lwz r3,0x00fc(r4)
++ isync
++ cmp 0,r3,r7
++ bne ram_error
++ add r4,r4,r8
++ b check_ram_loop
++ram_error:
++#if defined(CONFIG_LAN)
++ WM8(UART1,0x39) /* ram error */
++#elif defined(CONFIG_HGLAN) ||defined(CONFIG_HLAN) || defined(CONFIG_HTGL)
++ WM8(UART1,0x6F) /* ram error */
++#endif
++ b ram_error
++check_ram_end:
++#endif /* #if 1 */
++#endif /* !defined (CFG_RAMBOOT) */
++
++/* The instruction cache is enabled and the data cache is disabled */
++ blr
+diff -urN u-boot-86xx/board/linkstation/firminfo.h u-boot-86xx-kuro_clean/board/linkstation/firminfo.h
+--- u-boot-86xx/board/linkstation/firminfo.h 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/firminfo.h 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,27 @@
++#define FIRMNAME_MAX 31
++#define SUBVERSION_MAX 31
++#define FIRMINFO_VER 1
++
++struct firminfo {
++ unsigned long info_ver;
++ unsigned long firmid;
++ char firmname[FIRMNAME_MAX+1];
++ char subver[SUBVERSION_MAX+1];
++ unsigned short ver_major;
++ unsigned short ver_minor;
++ unsigned short build;
++ char year;
++ char mon;
++ char day;
++ char hour;
++ char min;
++ char sec;
++ unsigned long size;
++ unsigned long chksum;
++
++ unsigned long kernel_offset;
++ unsigned long kernel_size;
++ unsigned long initrd_offset;
++ unsigned long initrd_size;
++ } __attribute((aligned(4)));
++// ----------------------------------------------------
+diff -urN u-boot-86xx/board/linkstation/flash.c u-boot-86xx-kuro_clean/board/linkstation/flash.c
+--- u-boot-86xx/board/linkstation/flash.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/flash.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,893 @@
++/*
++ * flash.c
++ *
++ * Flash device interface for LinkStation
++ * Supports CFI flash devices using the AMD standard command set
++ *
++ * Copyright (C) 2006 Mihai Georgin <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ * Based on the MTD code from the Linux kernel
++ *
++ * Based on include/melco/flashd.c (linux-2.4.17_mvl21-sandpoint)
++ * Copyright (C) 2001-2004 BUFFALO INC.
++ */
++#include <common.h>
++#include <asm/io.h>
++#include <mpc824x.h>
++
++#if 0
++#define DEBUG_CFI
++#endif
++
++#undef debug
++#ifdef DEBUG_CFI
++#define debug(fmt,args...) printf(fmt,##args)
++#else
++#define debug(fmt,args...)
++#endif /* DEBUG_CFI */
++
++#if CFG_MAX_FLASH_BANKS > 1
++#error Only 1 flash bank supported
++#endif
++
++#define perror(fmt,args...) printf("%s: ",__FUNCTION__);printf(fmt,##args)
++
++#define MAX_ERASE_REGIONS 4
++
++#define P_ID_NONE 0
++#define P_ID_INTEL_EXT 1
++#define P_ID_AMD_STD 2
++#define P_ID_INTEL_STD 3
++#define P_ID_AMD_EXT 4
++#define P_ID_MITSUBISHI_STD 256
++#define P_ID_MITSUBISHI_EXT 257
++#define P_ID_RESERVED 65535
++
++#define CFI_DEVICETYPE_X8 (8 / 8)
++#define CFI_DEVICETYPE_X16 (16 / 8)
++
++#define FLASH_DATA_MASK 0xFF
++
++#define FUJ_MANUFACT_LS (FUJ_MANUFACT & FLASH_DATA_MASK)
++#define STM_MANUFACT_LS (STM_MANUFACT & FLASH_DATA_MASK)
++#define MX_MANUFACT_LS (MX_MANUFACT & FLASH_DATA_MASK)
++
++/* Unknown manufacturer */
++#define FLASH_MAN_UNKNOWN 0xFFFF0000
++
++/* Fujitsu MBM29PL320MT which is using the same */
++/* codes as the AMD Am29LV320MT "mirror" flash */
++#define AMD_ID_MIRROR_LS (AMD_ID_MIRROR & FLASH_DATA_MASK)
++#define AMD_ID_LV320T_2_LS (AMD_ID_LV320T_2 & FLASH_DATA_MASK)
++#define AMD_ID_LV320T_3_LS (AMD_ID_LV320T_3 & FLASH_DATA_MASK)
++
++/* ST Micro M29W320DT and M29W320DB */
++#define STM_ID_29W320DT_LS (STM_ID_29W320DT & FLASH_DATA_MASK)
++#define STM_ID_29W320DB_LS (STM_ID_29W320DB & FLASH_DATA_MASK)
++
++/* ST Micro M29DW324DT and M29DW324DB */
++#define STM_ID_29W324DT_LS (STM_ID_29W324DT & FLASH_DATA_MASK)
++#define STM_ID_29W324DB_LS (STM_ID_29W324DB & FLASH_DATA_MASK)
++
++/* Macronix MX29LV320T */
++#define MX_ID_LV320T_LS (MX_ID_LV320T & FLASH_DATA_MASK)
++
++/* Basic Query Structure */
++struct cfi_ident {
++ __u8 qry[3];
++ __u16 P_ID;
++ __u16 P_ADR;
++ __u16 A_ID;
++ __u16 A_ADR;
++ __u8 VccMin;
++ __u8 VccMax;
++ __u8 VppMin;
++ __u8 VppMax;
++ __u8 WordWriteTimeoutTyp;
++ __u8 BufWriteTimeoutTyp;
++ __u8 BlockEraseTimeoutTyp;
++ __u8 ChipEraseTimeoutTyp;
++ __u8 WordWriteTimeoutMax;
++ __u8 BufWriteTimeoutMax;
++ __u8 BlockEraseTimeoutMax;
++ __u8 ChipEraseTimeoutMax;
++ __u8 DevSize;
++ __u16 InterfaceDesc;
++ __u16 MaxBufWriteSize;
++ __u8 NumEraseRegions;
++ __u32 EraseRegionInfo[MAX_ERASE_REGIONS];
++} __attribute__((packed));
++
++struct cfi_private {
++ __u32 base;
++ int device_type;
++ int addr_unlock1;
++ int addr_unlock2;
++ struct cfi_ident *cfiq;
++ int mfr;
++ int id[3]; /* Supports AMD MirrorBit flash */
++ char *flash_name;
++ int wrd_wr_time;
++ int buf_wr_time;
++ int erase_time;
++ int (*blk_erase)(flash_info_t *info, int s_first, int s_last);
++ int (*blk_write)(flash_info_t *info, __u8 *buf, __u32 addr, int sz);
++};
++
++static inline __u8 cfi_read8(__u32 addr)
++{
++ return (*(volatile __u8 *)(addr));
++}
++
++static inline void cfi_write8(__u8 val, __u32 addr)
++{
++ *(volatile __u8 *)(addr) = val;
++ sync();
++}
++
++/*
++ * Sends a CFI command to a bank of flash for the given type.
++ * Returns the offset to the sent command
++ */
++static inline __u32 cfi_cmd(__u8 cmd, __u32 cmd_addr, __u32 base, int type)
++{
++ __u32 addr;
++
++ addr = base + cmd_addr * type;
++ if (cmd_addr * type == 0x554)
++ ++addr;
++
++ cfi_write8(cmd, addr);
++
++ return addr - base;
++}
++
++static inline __u8 cfi_read_query(__u32 addr)
++{
++ return cfi_read8(addr);
++}
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++static struct cfi_private cfis;
++static struct cfi_ident cfi_idents;
++static struct cfi_private *cfi;
++
++static int cfi_probe_chip(struct cfi_private *cfi);
++static unsigned long cfi_amdstd_setup(struct cfi_private *cfi, int primary);
++static void print_cfi_ident(struct cfi_ident *);
++static int flash_amdstd_erase(flash_info_t *info, int s_first, int s_last);
++static int flash_amdstd_wbuff(flash_info_t *info, __u8 *buf, __u32 addr,int sz);
++static int flash_amdstd_wubyp(flash_info_t *info, __u8 *buf, __u32 addr,int sz);
++static int flash_amdstd_write(flash_info_t *info, __u8 *buf, __u32 addr,int sz);
++
++
++
++unsigned long flash_init(void)
++{
++ unsigned long flash_size;
++ __u16 type;
++
++ debug("%s\n", __FUNCTION__);
++
++ cfi = &cfis;
++ memset(cfi, 0, sizeof(struct cfi_private));
++
++ cfi->base = CFG_FLASH_BASE;
++
++ /* Identify CFI chip */
++ /* Probe for X8 device first */
++ cfi->device_type = CFI_DEVICETYPE_X8;
++ if (cfi_probe_chip(cfi)) {
++ /* The probe didn't like it */
++ /* so probe for X16/X8 device */
++ cfi->device_type = CFI_DEVICETYPE_X16;
++ if (cfi_probe_chip(cfi)) {
++ /* The probe didn't like it */
++ return 0UL;
++ }
++ }
++
++ /* Check if it is AMD standard cmd set */
++ type = cfi->cfiq->P_ID;
++ if (type == P_ID_AMD_STD)
++ flash_size = cfi_amdstd_setup(cfi, 1);
++ else {
++ perror("Primary cmd set is not AMD std. Trying alternate.\n");
++ flash_size = 0;
++ }
++ if (!flash_size) {
++ type = cfi->cfiq->A_ID;
++ if (type == P_ID_AMD_STD)
++ flash_size = cfi_amdstd_setup(cfi, 0);
++ else {
++ perror("Alternate cmd set is not AMD std.\n");
++ return 0UL;
++ }
++ }
++
++ if (flash_size && flash_size == 4*1024*1024) {
++ /* Flash protection ON by default */
++ flash_protect(FLAG_PROTECT_SET, cfi->base, cfi->base+flash_size-1, flash_info);
++
++ return flash_size;
++ }
++
++ if (flash_size) {
++ perror("Unsupported flash size: %d\n", flash_size);
++ } else {
++ perror("Vendor Command Set not supported\n");
++ printf("Primary: 0x%04X, Alternate: 0x%04X\n",
++ cfi->cfiq->P_ID, cfi->cfiq->A_ID);
++ }
++ return 0UL;
++}
++
++void flash_print_info(flash_info_t *info)
++{
++ int i;
++
++ debug("%s\n", __FUNCTION__);
++
++ printf("Flash chip: %s\n\n",
++ cfi->flash_name?cfi->flash_name:"UNKNOWN");
++ print_cfi_ident(cfi->cfiq);
++ printf("\nActual values used by U-Boot:\n");
++ printf("Word write timeout: %6d ms\n", cfi->wrd_wr_time);
++ printf("Buffer write timeout: %6d ms\n", cfi->buf_wr_time);
++ printf("Sector erase timeout: %6d ms\n", cfi->erase_time);
++ printf("\nSize: %ld MiB in %d Sectors\n",info->size>>20,info->sector_count);
++ printf (" Sector Start Addresses:");
++ for (i=0; i<info->sector_count; i++) {
++ if (!(i % 5))
++ printf ("\n ");
++ printf (" %08lX%s", info->start[i], info->protect[i]?" (RO)" : " (RW)");
++ }
++ printf ("\n");
++}
++
++int flash_erase(flash_info_t *info, int s_first, int s_last)
++{
++ return (*(cfi->blk_erase))(info, s_first, s_last);
++}
++
++int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt)
++{
++ return (*(cfi->blk_write))(info, src, addr, cnt);
++}
++
++static int cfi_probe_chip(struct cfi_private *cfi)
++{
++ int ofs_factor = cfi->device_type;
++ __u32 base = cfi->base;
++ int num_erase_regions, scount;
++ int i;
++
++ debug("%s\n", __FUNCTION__);
++
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++ cfi_cmd(0x98, 0x55, base, cfi->device_type);
++
++ if (cfi_read8(base + ofs_factor * 0x10) != 'Q' ||
++ cfi_read8(base + ofs_factor * 0x11) != 'R' ||
++ cfi_read8(base + ofs_factor * 0x12) != 'Y') {
++ debug("Not a CFI flash\n");
++ /* Put the chip back into read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++ return -1;
++ }
++
++ num_erase_regions = cfi_read_query(base + 0x2C * ofs_factor);
++ if (!num_erase_regions) {
++ perror("No erase regions\n");
++ /* Put the chip back into read read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++ return -1;
++ }
++ if (num_erase_regions > MAX_ERASE_REGIONS) {
++ perror("Number of erase regions (%d) > MAX_ERASE_REGIONS (%d)\n",
++ num_erase_regions, MAX_ERASE_REGIONS);
++ /* Put the chip back into read read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++ return -1;
++ }
++
++ cfi->cfiq = &cfi_idents;
++ memset(cfi->cfiq, 0, sizeof(struct cfi_ident));
++ debug("cfi->cfiq: 0x%08X\n", cfi->cfiq);
++
++ /* Read the CFI info structure */
++ for (i=0; i < sizeof(struct cfi_ident) + num_erase_regions * 4; i++)
++ ((__u8 *)cfi->cfiq)[i] = cfi_read_query(base + (0x10 + i) * ofs_factor);
++
++ /* Do any necessary byteswapping */
++ cfi->cfiq->P_ID = __le16_to_cpu(cfi->cfiq->P_ID);
++ cfi->cfiq->P_ADR = __le16_to_cpu(cfi->cfiq->P_ADR);
++ cfi->cfiq->A_ID = __le16_to_cpu(cfi->cfiq->A_ID);
++ cfi->cfiq->A_ADR = __le16_to_cpu(cfi->cfiq->A_ADR);
++ cfi->cfiq->InterfaceDesc = __le16_to_cpu(cfi->cfiq->InterfaceDesc);
++ cfi->cfiq->MaxBufWriteSize = __le16_to_cpu(cfi->cfiq->MaxBufWriteSize);
++
++#if 0
++ /* Dump the information therein */
++ print_cfi_ident(cfi->cfiq);
++#endif
++
++ scount = 0;
++ for (i=0; i<cfi->cfiq->NumEraseRegions; i++) {
++ cfi->cfiq->EraseRegionInfo[i] = __le32_to_cpu(cfi->cfiq->EraseRegionInfo[i]);
++ scount += (cfi->cfiq->EraseRegionInfo[i] & 0xFFFF) + 1;
++ debug(" Erase Region #%d: sector size 0x%4.4X bytes, %d sectors\n",
++ i, (cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xFF,
++ (cfi->cfiq->EraseRegionInfo[i] & 0xFFFF) + 1);
++ }
++ /* Put it back into Read Mode */
++ cfi_cmd(0xF0, 0, base, cfi->device_type);
++
++ if (scount > CFG_MAX_FLASH_SECT) {
++ perror("Number of sectors (%d) > CFG_MAX_FLASH_SECT (%d)\n",
++ scount, CFG_MAX_FLASH_SECT);
++ return -1;
++ }
++
++ debug("Found x%d device in 8-bit mode\n", cfi->device_type*8);
++
++ return 0;
++}
++
++static char *vendorname(__u16 vendor)
++{
++ switch (vendor) {
++ case P_ID_NONE:
++ return "None";
++ case P_ID_INTEL_EXT:
++ return "Intel/Sharp Extended";
++ case P_ID_AMD_STD:
++ return "AMD/Fujitsu Standard";
++ case P_ID_INTEL_STD:
++ return "Intel/Sharp Standard";
++ case P_ID_AMD_EXT:
++ return "AMD/Fujitsu Extended";
++ case P_ID_MITSUBISHI_STD:
++ return "Mitsubishi Standard";
++ case P_ID_MITSUBISHI_EXT:
++ return "Mitsubishi Extended";
++ case P_ID_RESERVED:
++ return "Not Allowed / Reserved for Future Use";
++ default:
++ return "Unknown";
++ }
++}
++
++static void print_cfi_ident(struct cfi_ident *cfip)
++{
++ printf("CFI Query Results:\n");
++ printf("Primary Vendor Command Set: 0x%4.4X (%s)\n",
++ cfip->P_ID, vendorname(cfip->P_ID));
++ if (cfip->P_ADR)
++ printf("Primary Algorithm Table at 0x%4.4X\n", cfip->P_ADR);
++ else
++ printf("No Primary Algorithm Table\n");
++
++ printf("Alternate Vendor Command Set: 0x%4.4X (%s)\n",
++ cfip->A_ID, vendorname(cfip->A_ID));
++ if (cfip->A_ADR)
++ printf("Alternate Algorithm Table at 0x%4.4X\n", cfip->A_ADR);
++ else
++ printf("No Alternate Algorithm Table\n");
++
++ printf("Vcc Min.: %d.%d V\n", cfip->VccMin >> 4, cfip->VccMin & 0xF);
++ printf("Vcc Max.: %d.%d V\n", cfip->VccMax >> 4, cfip->VccMax & 0xF);
++ if (cfip->VppMin) {
++ printf("Vpp Min.: %d.%d V\n", cfip->VppMin >> 4, cfip->VppMin & 0xF);
++ printf("Vpp Max.: %d.%d V\n", cfip->VppMax >> 4, cfip->VppMax & 0xF);
++ }
++ else
++ printf("No Vpp line\n");
++
++ printf("Typical byte/word write timeout: %d us\n",
++ 1<<cfip->WordWriteTimeoutTyp);
++ printf("Maximum byte/word write timeout: %d us\n",
++ (1<<cfip->WordWriteTimeoutMax) * (1<<cfip->WordWriteTimeoutTyp));
++
++ if (cfip->BufWriteTimeoutTyp || cfip->BufWriteTimeoutMax) {
++ printf("Typical full buffer write timeout: %d us\n",
++ 1<<cfip->BufWriteTimeoutTyp);
++ printf("Maximum full buffer write timeout: %d us\n",
++ (1<<cfip->BufWriteTimeoutMax) * (1<<cfip->BufWriteTimeoutTyp));
++ }
++ else
++ printf("Full buffer write not supported\n");
++
++ printf("Typical block erase timeout: %d ms\n",
++ 1<<cfip->BlockEraseTimeoutTyp);
++ printf("Maximum block erase timeout: %d ms\n",
++ (1<<cfip->BlockEraseTimeoutMax) * (1<<cfip->BlockEraseTimeoutTyp));
++ if (cfip->ChipEraseTimeoutTyp || cfip->ChipEraseTimeoutMax) {
++ printf("Typical chip erase timeout: %d ms\n",
++ 1<<cfip->ChipEraseTimeoutTyp);
++ printf("Maximum chip erase timeout: %d ms\n",
++ (1<<cfip->ChipEraseTimeoutMax) * (1<<cfip->ChipEraseTimeoutTyp));
++ }
++ else
++ printf("Chip erase not supported\n");
++
++ printf("Device size: 0x%X bytes (%d MiB)\n",
++ 1 << cfip->DevSize, 1 << (cfip->DevSize - 20));
++ printf("Flash Device Interface description: 0x%4.4X\n",cfip->InterfaceDesc);
++ switch(cfip->InterfaceDesc) {
++ case 0:
++ printf(" - x8-only asynchronous interface\n");
++ break;
++ case 1:
++ printf(" - x16-only asynchronous interface\n");
++ break;
++ case 2:
++ printf(" - x8 / x16 via BYTE# with asynchronous interface\n");
++ break;
++ case 3:
++ printf(" - x32-only asynchronous interface\n");
++ break;
++ case 65535:
++ printf(" - Not Allowed / Reserved\n");
++ break;
++ default:
++ printf(" - Unknown\n");
++ break;
++ }
++ printf("Max. bytes in buffer write: %d\n", 1 << cfip->MaxBufWriteSize);
++ printf("Number of Erase Block Regions: %d\n", cfip->NumEraseRegions);
++}
++
++static unsigned long cfi_amdstd_setup(struct cfi_private *cfi, int primary)
++{
++ flash_info_t *info = &flash_info[0];
++ __u32 base = cfi->base;
++ int ofs_factor = cfi->device_type;
++ __u32 addr_et = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
++ __u8 major, minor, bootloc;
++ __u32 offset, ernum, ersize;
++ int i, j;
++
++ /* Put the chip into read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++ /* Autoselect */
++ cfi_cmd(0xAA, 0x555, base, cfi->device_type);
++ cfi_cmd(0x55, 0x2AA, base, cfi->device_type);
++ cfi_cmd(0x90, 0x555, base, cfi->device_type);
++ /* Read manufacturer and device id */
++ cfi->mfr = cfi_read_query(base + 0x00 * ofs_factor);
++ if ((cfi->id[0] = cfi_read_query(base + 0x01 * ofs_factor)) == 0x7E) {
++ cfi->id[1] = cfi_read_query(base + 0x0E * ofs_factor);
++ cfi->id[2] = cfi_read_query(base + 0x0F * ofs_factor);
++ }
++ /* Put the chip into read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++
++ /* Put the chip into read query mode */
++ cfi_cmd(0x98, 0x55, base, cfi->device_type);
++ /* Find the boot block location and swap the erase regions as necessary */
++ major = cfi_read_query(base + (addr_et + 3) * ofs_factor);
++ minor = cfi_read_query(base + (addr_et + 4) * ofs_factor);
++ debug(" Amd/Fujitsu Extended Query Table v%c.%c at 0x%4.4X\n",
++ major, minor, addr_et);
++
++ if (((major << 8) | minor) < 0x3131) {
++ /* CFI version 1.0 => don't trust bootloc */
++ if (cfi->id[0] & 0x80) {
++ printf("Device ID is 0x%02X. Assuming broken CFI table.\n",
++ cfi->id[0]);
++ bootloc = 3; /* top boot */
++ } else
++ bootloc = 2; /* bottom boot */
++ } else
++ bootloc = cfi_read_query(base + (addr_et + 0xF) * ofs_factor);
++
++ if (bootloc == 3 && cfi->cfiq->NumEraseRegions > 1) {
++ debug("Top boot block. Swapping erase regions.\n");
++ for (i=0; i<cfi->cfiq->NumEraseRegions / 2; i++) {
++ int j = (cfi->cfiq->NumEraseRegions-1)-i;
++ __u32 swap;
++
++ swap = cfi->cfiq->EraseRegionInfo[i];
++ cfi->cfiq->EraseRegionInfo[i] = cfi->cfiq->EraseRegionInfo[j];
++ cfi->cfiq->EraseRegionInfo[j] = swap;
++ }
++ }
++
++ /* Put the chip into read array mode */
++ cfi_cmd(0xF0, 0x00, base, cfi->device_type);
++
++ switch (cfi->device_type) {
++ case CFI_DEVICETYPE_X8:
++ /* X8 chip */
++ cfi->addr_unlock1 = 0x555;
++ cfi->addr_unlock2 = 0x2AA;
++ break;
++ case CFI_DEVICETYPE_X16:
++ /* X16 chip in X8 mode */
++ cfi->addr_unlock1 = 0xAAA;
++ cfi->addr_unlock2 = 0x555;
++ break;
++ default:
++ perror("Unsupported device type %d\n", cfi->device_type);
++ return 0UL;
++ }
++
++ cfi->wrd_wr_time = 1 << cfi->cfiq->WordWriteTimeoutTyp;
++ cfi->wrd_wr_time *= 1 << cfi->cfiq->WordWriteTimeoutMax;
++ /* Word write time is in us, convert to ms */
++ cfi->wrd_wr_time = cfi->wrd_wr_time / 1000 + 1;
++ if (cfi->wrd_wr_time == 1)
++ /* Account for the timer resolution which is 1 ms */
++ cfi->wrd_wr_time = 2;
++ cfi->buf_wr_time = 1 << cfi->cfiq->BufWriteTimeoutTyp;
++ cfi->buf_wr_time *= 1 << cfi->cfiq->BufWriteTimeoutMax;
++ /* Buffer write time is in us, convert to ms */
++ cfi->buf_wr_time = cfi->buf_wr_time / 1000 + 1;
++ if (cfi->buf_wr_time == 1)
++ /* Account for the timer resolution which is 1 ms */
++ cfi->buf_wr_time = 2;
++ cfi->erase_time = 1 << cfi->cfiq->BlockEraseTimeoutTyp;
++ cfi->erase_time *= 1 << cfi->cfiq->BlockEraseTimeoutMax;
++
++ info->size = (1 << cfi->cfiq->DevSize);
++
++ info->sector_count = 0;
++ offset = CFG_FLASH_BASE;
++ for (i=0; i < cfi->cfiq->NumEraseRegions; i++) {
++ ersize = ((cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xFF);
++ ernum = (cfi->cfiq->EraseRegionInfo[i] & 0xFFFF) + 1;
++
++ for (j=0; j < ernum; j++) {
++ info->start[info->sector_count + j] = offset;
++ offset += ersize;
++ }
++
++ info->sector_count += ernum;
++ }
++
++ switch (cfi->mfr) {
++ case FUJ_MANUFACT_LS:
++ info->flash_id = FLASH_MAN_FUJ;
++ switch (cfi->id[0]) {
++ case AMD_ID_MIRROR_LS:
++ if (cfi->id[1] == AMD_ID_LV320T_2_LS &&
++ cfi->id[2] == AMD_ID_LV320T_3_LS) {
++ info->flash_id += FLASH_AMLV320T;
++ cfi->blk_write = flash_amdstd_wbuff;
++ cfi->flash_name = "FUJITSU MBM29PL32TM";
++ } else
++ info->flash_id += FLASH_UNKNOWN;
++ break;
++ default:
++ info->flash_id += FLASH_UNKNOWN;
++ break;
++ }
++ break;
++ case STM_MANUFACT_LS:
++ info->flash_id = FLASH_MAN_STM;
++ switch (cfi->id[0]) {
++ case STM_ID_29W320DT_LS:
++ info->flash_id += FLASH_STMW320DT;
++ cfi->blk_write = flash_amdstd_wubyp;
++ cfi->flash_name = "STMICRO M29W320DT";
++ break;
++ case STM_ID_29W320DB_LS:
++ info->flash_id += FLASH_STMW320DB;
++ cfi->blk_write = flash_amdstd_wubyp;
++ cfi->flash_name = "STMICRO M29W320DB";
++ break;
++ case STM_ID_29W324DT_LS:
++ info->flash_id += FLASH_STMW324DT;
++ cfi->blk_write = flash_amdstd_wubyp;
++ cfi->flash_name = "STMICRO M29W324DT";
++ break;
++ case STM_ID_29W324DB_LS:
++ info->flash_id += FLASH_STMW324DB;
++ cfi->blk_write = flash_amdstd_wubyp;
++ cfi->flash_name = "STMICRO M29W324DB";
++ break;
++ default:
++ info->flash_id += FLASH_UNKNOWN;
++ break;
++ }
++ break;
++ case MX_MANUFACT_LS:
++ info->flash_id = FLASH_MAN_MX;
++ switch (cfi->id[0]) {
++ case MX_ID_LV320T_LS:
++ info->flash_id += FLASH_MXLV320T;
++ cfi->blk_write = flash_amdstd_write;
++ cfi->flash_name = "MXIC MX29LV320T";
++ break;
++ default:
++ info->flash_id += FLASH_UNKNOWN;
++ break;
++ }
++ break;
++ default:
++ info->flash_id = FLASH_AMD_COMP;
++ break;
++ }
++
++ if ((info->flash_id & FLASH_TYPEMASK) == FLASH_UNKNOWN) {
++ /* Unknown but supported CFI flash */
++ cfi->flash_name = NULL;
++ if (cfi->cfiq->MaxBufWriteSize)
++ cfi->blk_write = flash_amdstd_wbuff;
++ else
++ cfi->blk_write = flash_amdstd_write;
++ }
++
++ cfi->blk_erase = flash_amdstd_erase;
++
++ return info->size;
++}
++
++#define BIT(x) (1<<x)
++/*
++ * Check the flash command state
++ */
++static int flash_amdstd_state(__u32 addr, __u32 target, int timeout)
++{
++ __u32 start_time = get_timer(0);
++ __u32 data;
++
++ debug("%s\n", __FUNCTION__);
++
++ do {
++ data = cfi_read8(addr);
++ if((data & BIT(7)) == (target & BIT(7)))
++ return 0;
++ if(data & BIT(5)) {
++ data = cfi_read8(addr);
++ if((data & BIT(7)) == (target & BIT(7)))
++ return 0;
++ else
++ return -1;
++ }
++ } while (get_timer(start_time) < timeout);
++ return -1;
++}
++
++/*
++ * Verify data written to flash
++ */
++static int flash_amdstd_vrfy(flash_info_t *info, __u8 *buf, __u32 addr, int sz)
++{
++ __u32 base = cfi->base;
++ __u8 *faddr;
++ long i;
++
++ debug("%s\n", __FUNCTION__);
++
++ faddr = (__u8 *)addr;
++ for(i=0; i < sz; i++) {
++ if(faddr[i] != buf[i]) {
++ printf("Flash Write verify fail at %08x. ", &faddr[i]);
++ printf("Expecting: %02X, Actual: %02X\n", faddr[i], buf[i]);
++ printf("Retrying...");
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0xA0, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_write8(buf[i], (__u32)&faddr[i]);
++ if (flash_amdstd_state((__u32)&faddr[i], buf[i], cfi->wrd_wr_time)) {
++ printf("failed again\n");
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++ return 1;
++ } else
++ printf("suceeded\n");
++ }
++ }
++ return 0;
++}
++
++/*
++ * Erase flash sectors
++ */
++static int flash_amdstd_erase(flash_info_t *info, int s_first, int s_last)
++{
++ int prot, sect, nsect, flag;
++ __u32 l_sect;
++ __u32 base = cfi->base;
++
++ debug("%s\n", __FUNCTION__);
++
++ if (!info->size) {
++ printf ("Flash erase: Can't erase unsupported flash\n");
++ return 1;
++ }
++
++ if (s_first < 0 || s_first > s_last ||
++ s_first > (info->sector_count - 1) ||
++ s_last > (info->sector_count - 1)) {
++ printf ("Flash erase: no sectors to erase\n");
++ return 1;
++ }
++
++ printf("\nFlash erase: first = %d @ 0x%08lx\n",
++ s_first, info->start[s_first]);
++ printf(" last = %d @ 0x%08lx\n", s_last, info->start[s_last]);
++
++ nsect = s_last - s_first + 1;
++ for (prot = 0, sect=s_first; sect<=s_last; ++sect)
++ if (info->protect[sect])
++ prot++;
++ if (prot) {
++ if (prot == nsect) {
++ printf("Warning: All requested sectors are protected!\n");
++ printf(" No sectors to erase\n");
++ return 1;
++ }
++ else
++ printf("Warning: %d protected sectors will not be erased!\n", prot);
++ }
++ cfi_cmd(0xF0, 0x00, base, CFI_DEVICETYPE_X8);
++ udelay(1000);
++
++ /* Disable interrupts which might cause a timeout here */
++ flag = disable_interrupts();
++
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x80, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ for (sect = s_first; sect <= s_last; sect++)
++ if (!info->protect[sect]) {
++ l_sect = info->start[sect];
++ cfi_write8(0x30, l_sect);
++ }
++ /* Erase begins 50us after the last sector address */
++ udelay(50);
++
++ /* All erase commands sent, enable interrupts */
++ if (flag)
++ enable_interrupts();
++
++ if (flash_amdstd_state(l_sect, 0xff, cfi->erase_time * nsect)) {
++ printf("Flash erase: Timeout\n");
++ cfi_cmd(0xF0, 0x00, base, CFI_DEVICETYPE_X8);
++ return 1;
++ }
++ printf("Flash erase: Done\n");
++ return 0;
++}
++
++/*
++ * Write to flash using Write Buffer programming
++ */
++static int flash_amdstd_wbuff(flash_info_t *info, __u8 *buf, __u32 addr, int sz)
++{
++ __u32 base = cfi->base;
++ __u32 wbufsz;
++ __u32 size, wsize, waddr, saddr;
++ __u8 *wbuf;
++ int i;
++
++ debug("%s\n", __FUNCTION__);
++
++ size = sz;
++ wbuf = buf;
++ wbufsz = 1 << cfi->cfiq->MaxBufWriteSize;
++
++ waddr = (addr + wbufsz - 1) & ~(wbufsz - 1);
++ if (waddr > addr)
++ wsize = waddr-addr;
++ else
++ wsize = wbufsz;
++ if (wsize > size)
++ wsize = size;
++ waddr = addr;
++
++ while (size > 0) {
++ for (i = 0; i < info->sector_count; i++)
++ if (waddr < info->start[i])
++ break;
++ saddr = info->start[i-1];
++
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ cfi_write8(0x25, saddr);
++ cfi_write8(wsize-1, saddr);
++ for (i = 0; i < wsize; i++)
++ cfi_write8(*wbuf++, waddr++);
++ cfi_write8(0x29, saddr);
++
++ if (flash_amdstd_state(waddr-1, *(wbuf-1), cfi->buf_wr_time)) {
++ printf("Flash write buffer: Timeout\n");
++ cfi_cmd(0xF0, 0x00, base, CFI_DEVICETYPE_X8);
++ return 1;
++ }
++
++ size -= wsize;
++ if ((wsize = wbufsz) > size)
++ wsize = size;
++ }
++
++ return flash_amdstd_vrfy(info, buf, addr, sz);
++}
++
++/*
++ * Write to flash using Unlock Bypass command sequence
++ */
++static int flash_amdstd_wubyp(flash_info_t *info, __u8 *buf, __u32 addr, int sz)
++{
++ __u32 base = cfi->base;
++ __u32 waddr;
++ long i;
++
++ debug("%s\n", __FUNCTION__);
++
++ waddr = addr;
++
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x20, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++
++ for(i=0; i < sz; i++) {
++ cfi_write8(0xA0, waddr);
++ cfi_write8(buf[i], waddr);
++ if (flash_amdstd_state(waddr, buf[i], cfi->wrd_wr_time)) {
++ printf("Flash unlock bypass write: Timeout\n");
++ cfi_cmd(0x90, 0, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x00, 0, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++ return 1;
++ }
++ waddr++;
++ }
++ cfi_cmd(0x90, 0, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x00, 0, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++
++ return flash_amdstd_vrfy(info, buf, addr, sz);
++}
++
++/*
++ * Write to flash using Word/Byte Program command sequence
++ */
++static int flash_amdstd_write(flash_info_t *info, __u8 *buf, __u32 addr, int sz)
++{
++ __u32 base = cfi->base;
++ __u32 waddr;
++ long i;
++
++ debug("%s\n", __FUNCTION__);
++
++ waddr = addr;
++
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++ for (i = 0; i < sz; i++) {
++ cfi_cmd(0xAA, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0x55, cfi->addr_unlock2, base, CFI_DEVICETYPE_X8);
++ cfi_cmd(0xA0, cfi->addr_unlock1, base, CFI_DEVICETYPE_X8);
++ cfi_write8(buf[i], waddr);
++ if (flash_amdstd_state(waddr, buf[i], cfi->wrd_wr_time)) {
++ printf("Flash write: Timeout\n");
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++ return 1;
++ }
++ waddr++;
++ }
++ cfi_cmd(0xF0, 0, base, CFI_DEVICETYPE_X8);
++
++ return flash_amdstd_vrfy(info, buf, addr, sz);
++}
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/hwctl.c u-boot-86xx-kuro_clean/board/linkstation/hwctl.c
+--- u-boot-86xx/board/linkstation/hwctl.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/hwctl.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,258 @@
++/*
++ * hwctl.c
++ *
++ * LinkStation HW Control Driver
++ *
++ * Copyright (C) 2001-2004 BUFFALO INC.
++ *
++ * This software may be used and distributed according to the terms of
++ * the GNU General Public License (GPL), incorporated herein by reference.
++ * Drivers based on or derived from this code fall under the GPL and must
++ * retain the authorship, copyright and license notice. This file is not
++ * a complete program and may only be used when the entire operating
++ * system is licensed under the GPL.
++ *
++ */
++
++#include <config.h>
++#include <common.h>
++#include <command.h>
++
++#define mdelay(n) udelay((n)*1000)
++
++#define AVR_PORT CFG_NS16550_COM2
++extern void udelay(unsigned long usec);
++
++
++// output BYTE data
++static inline void out_b(volatile unsigned char *addr, int val)
++{
++ __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
++}
++
++#if 0
++// PWR,DISK_FULL/STATUS,DIAG LED controll
++void blink_led(unsigned char state)
++{
++#ifdef CONFIG_HTGL
++ switch (state)
++ {
++ case FLASH_CLEAR_START:
++ case FLASH_UPDATE_START:
++ out_b(AVR_PORT, 0x61);
++ out_b(AVR_PORT, 0x61);
++ out_b(AVR_PORT, 0x38);
++ out_b(AVR_PORT, 0x30);
++ out_b(AVR_PORT, 0x34);
++ out_b(AVR_PORT, 0x31);
++ mdelay(10);
++ out_b(AVR_PORT, 0x61);
++ out_b(AVR_PORT, 0x61);
++ out_b(AVR_PORT, 0x38);
++ out_b(AVR_PORT, 0x31);
++ out_b(AVR_PORT, 0x34);
++ out_b(AVR_PORT, 0x31);
++ mdelay(10);
++ out_b(AVR_PORT, 0x71);
++ out_b(AVR_PORT, 0x71);
++// out_b(AVR_PORT, 0x71);
++// out_b(AVR_PORT, 0x71);
++ mdelay(10);
++ out_b(AVR_PORT, 0x73);
++ out_b(AVR_PORT, 0x73);
++// out_b(AVR_PORT, 0x73);
++// out_b(AVR_PORT, 0x73);
++ mdelay(10);
++ break;
++ case FLASH_CLEAR_END:
++ case FLASH_UPDATE_END:
++ out_b(AVR_PORT, 0x70);
++ out_b(AVR_PORT, 0x70);
++// out_b(AVR_PORT, 0x70);
++// out_b(AVR_PORT, 0x70);
++ mdelay(10);
++ out_b(AVR_PORT, 0x72);
++ out_b(AVR_PORT, 0x72);
++// out_b(AVR_PORT, 0x72);
++// out_b(AVR_PORT, 0x72);
++ mdelay(10);
++ break;
++ case RAID_RESYNC_START:
++ break;
++ case RAID_RESYNC_END:
++ break;
++ default:
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++ break;
++ }
++#else
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++ out_b(AVR_PORT, state);
++#endif
++
++}
++#endif
++
++// 2005.5.10 BUFFALO add
++//--------------------------------------------------------------
++static inline void miconCntl_SendUart(unsigned char dat)
++{
++ out_b((char *)AVR_PORT, dat);
++ udelay(1000);
++}
++
++//--------------------------------------------------------------
++void miconCntl_SendCmd(unsigned char dat)
++{
++ int i;
++
++ for (i=0; i<4; i++){
++ miconCntl_SendUart(dat);
++ }
++}
++
++//--------------------------------------------------------------
++void miconCntl_FanLow(void)
++{
++ debug("%s\n",__FUNCTION__);
++#ifdef CONFIG_HTGL
++ miconCntl_SendCmd(0x5C);
++#endif
++}
++//--------------------------------------------------------------
++void miconCntl_FanHigh(void)
++{
++ debug("%s\n",__FUNCTION__);
++#ifdef CONFIG_HTGL
++ miconCntl_SendCmd(0x5D);
++#endif
++}
++
++//--------------------------------------------------------------
++//1000Mbps
++void miconCntl_Eth1000M(int up)
++{
++ debug("%s (%d)\n",__FUNCTION__,up);
++#ifdef CONFIG_HTGL
++ if (up){
++ miconCntl_SendCmd(0x93);
++ }else{
++ miconCntl_SendCmd(0x92);
++ }
++#else
++ if (up){
++ miconCntl_SendCmd(0x5D);
++ }else{
++ miconCntl_SendCmd(0x5C);
++ }
++#endif
++}
++//--------------------------------------------------------------
++//100Mbps
++void miconCntl_Eth100M(int up)
++{
++ debug("%s (%d)\n",__FUNCTION__,up);
++#ifdef CONFIG_HTGL
++ if (up){
++ miconCntl_SendCmd(0x91);
++ }else{
++ miconCntl_SendCmd(0x90);
++ }
++#else
++ if (up){
++ miconCntl_SendCmd(0x5C);
++ }
++#endif
++}
++//--------------------------------------------------------------
++//10Mbps
++void miconCntl_Eth10M(int up)
++{
++ debug("%s (%d)\n",__FUNCTION__,up);
++#ifdef CONFIG_HTGL
++ if (up){
++ miconCntl_SendCmd(0x8F);
++ }else{
++ miconCntl_SendCmd(0x8E);
++ }
++#else
++ if (up){
++ miconCntl_SendCmd(0x5C);
++ }
++#endif
++}
++//--------------------------------------------------------------
++//��������
++void miconCntl_5f(void)
++{
++ debug("%s\n",__FUNCTION__);
++ miconCntl_SendCmd(0x5F);
++ mdelay(100);
++}
++
++//--------------------------------------------------------------
++// "reboot start" signal
++void miconCntl_Reboot(void)
++{
++ debug("%s\n",__FUNCTION__);
++ miconCntl_SendCmd(0x43);
++}
++#if 0
++//--------------------------------------------------------------
++// Raid recovery start
++void miconCntl_RadiRecovery(void)
++{
++ debug("%s\n",__FUNCTION__);
++#ifdef CONFIG_HTGL
++ miconCntl_SendUart(0x61); // a
++ miconCntl_SendUart(0x61); // a
++ miconCntl_SendUart(0x38); // 8
++ miconCntl_SendUart(0x30); // 0
++ miconCntl_SendUart(0x34); // 4
++ miconCntl_SendUart(0x31); // 1
++ miconCntl_SendCmd(0x71); // q
++#endif
++}
++//--------------------------------------------------------------
++// Raid recovery finish
++void miconCntl_RadiRecoveryFin(void)
++{
++ debug("%s\n",__FUNCTION__);
++#ifdef CONFIG_HTGL
++ miconCntl_SendCmd(0x70);
++#endif
++}
++#endif
++
++// ---------------------------------------------------------------
++// Disable watchdog timer
++void miconCntl_DisWDT(void)
++{
++ debug("%s\n",__FUNCTION__);
++ miconCntl_SendCmd(0x41); // A
++ miconCntl_SendCmd(0x46); // F
++ miconCntl_SendCmd(0x4A); // J
++ miconCntl_SendCmd(0x3E); // >
++ miconCntl_SendCmd(0x56); // V
++ miconCntl_SendCmd(0x3E); // >
++ miconCntl_SendCmd(0x5A); // Z
++ miconCntl_SendCmd(0x56); // V
++ miconCntl_SendCmd(0x4B); // K
++}
++// ---------------------------------------------------------------
++// U-Boot calls this function
++int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ disable_interrupts();
++ miconCntl_Reboot();
++ while (1)
++ miconCntl_SendUart(0x47); /* Wait for reboot */
++
++}
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/ide.c u-boot-86xx-kuro_clean/board/linkstation/ide.c
+--- u-boot-86xx/board/linkstation/ide.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/ide.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,101 @@
++/*
++ * (C) Copyright 2000
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++/* ide.c - ide support functions */
++
++
++#include <common.h>
++
++#ifdef CFG_CMD_IDE
++#include <ata.h>
++#include <ide.h>
++#include <pci.h>
++
++#define IT8212_PCI_CpuCONTROL 0x5e
++#define IT8212_PCI_PciModeCONTROL 0x50
++#define IT8212_PCI_IdeIoCONFIG 0x40
++#define IT8212_PCI_IdeBusSkewCONTROL 0x4c
++#define IT8212_PCI_IdeDrivingCURRENT 0x42
++
++extern ulong ide_bus_offset[CFG_IDE_MAXBUS];
++extern struct pci_controller hose;
++
++int ide_preinit (void)
++{
++ int status;
++ pci_dev_t devbusfn;
++ int l;
++
++ status = 1;
++ for (l = 0; l < CFG_IDE_MAXBUS; l++) {
++ ide_bus_offset[l] = -ATA_STATUS;
++ }
++ devbusfn = pci_find_device (PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680, 0);
++ if (devbusfn == -1)
++ devbusfn = pci_find_device (PCI_VENDOR_ID_ITE,PCI_DEVICE_ID_ITE_8212,0);
++ if (devbusfn != -1) {
++ status = 0;
++
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0,
++ (u32 *) &ide_bus_offset[0]);
++ ide_bus_offset[0] &= 0xfffffffe;
++ ide_bus_offset[0] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[0] & 0xfffffffe,
++ PCI_REGION_IO);
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_2,
++ (u32 *) &ide_bus_offset[1]);
++ ide_bus_offset[1] &= 0xfffffffe;
++ ide_bus_offset[1] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[1] & 0xfffffffe,
++ PCI_REGION_IO);
++ }
++
++ if (pci_find_device (PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8212, 0) != -1) {
++ pci_write_config_byte(devbusfn, IT8212_PCI_CpuCONTROL, 0x01);
++ pci_write_config_byte(devbusfn, IT8212_PCI_PciModeCONTROL, 0x00);
++ pci_write_config_word(devbusfn, PCI_COMMAND, 0x0047);
++#ifdef CONFIG_IT8212_SECONDARY_ENABLE
++ pci_write_config_word(devbusfn, IT8212_PCI_IdeIoCONFIG, 0xA0F3);
++#else
++ pci_write_config_word(devbusfn, IT8212_PCI_IdeIoCONFIG, 0x8031);
++#endif
++ pci_write_config_dword(devbusfn, IT8212_PCI_IdeBusSkewCONTROL, 0x02040204);
++// __LS_COMMENT__ BUFFALO changed 2004.11.10 changed for EMI
++ pci_write_config_byte(devbusfn, IT8212_PCI_IdeDrivingCURRENT, 0x36); // 10mA
++// pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x09); // 4mA
++// pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x12); // 6mA
++// pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x24); // 6mA,2mA
++// pci_write_config_byte(dev, IT8212_PCI_IdeDrivingCURRENT, 0x2D); // 8mA,4mA
++ pci_write_config_byte(devbusfn, PCI_LATENCY_TIMER, 0x00);
++ }
++
++ return (status);
++}
++
++void ide_set_reset (int flag) {
++ return;
++}
++
++#endif /* of CONFIG_CMDS_IDE */
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/linkstation.c u-boot-86xx-kuro_clean/board/linkstation/linkstation.c
+--- u-boot-86xx/board/linkstation/linkstation.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/linkstation.c 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,127 @@
++/*
++ * linkstation.c
++ *
++ * Misc LinkStation specific functions
++ *
++ * Copyright (C) 2006 Mihai Georgin <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <version.h>
++#include <common.h>
++#include <mpc824x.h>
++#include <asm/io.h>
++#include <ns16550.h>
++
++#ifdef CONFIG_PCI
++#include <pci.h>
++#endif
++
++extern void init_AVR_DUART(void);
++extern void hw_watchdog_reset(void);
++
++int checkboard (void)
++{
++ DECLARE_GLOBAL_DATA_PTR;
++ ulong busfreq = get_bus_freq (0);
++ char buf[32];
++ char *p;
++ bd_t *bd = gd->bd;
++
++ init_AVR_DUART();
++ hw_watchdog_reset();
++
++ if ((p = getenv ("console_nr")) != NULL) {
++ unsigned long con_nr = simple_strtoul (p, NULL, 10) & 3;
++
++ bd->bi_baudrate &= ~3;
++ bd->bi_baudrate |= con_nr & 3;
++ }
++ return 0;
++}
++
++long int initdram (int board_type)
++{
++ return (get_ram_size(CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE));
++}
++
++/*
++ * Initialize PCI Devices
++ */
++#ifdef CONFIG_PCI
++
++#ifndef CONFIG_PCI_PNP
++
++static struct pci_config_table pci_linkstation_config_table[] = {
++ /* vendor, device, class */
++ /* bus, dev, func */
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0b, 0, /* AN983B or RTL8110S */
++ /* ethernet controller */
++ pci_cfgfunc_config_device, { PCI_ETH_IOADDR,
++ PCI_ETH_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0c, 0, /* SII680 or IT8211AF */
++ /* ide controller */
++ pci_cfgfunc_config_device, { PCI_IDE_IOADDR,
++ PCI_IDE_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 0, /* D720101 USB controller, 1st USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB0_IOADDR,
++ PCI_USB0_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 1, /* D720101 USB controller, 2nd USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB1_IOADDR,
++ PCI_USB1_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 2, /* D720101 USB controller, USB 2.0 */
++ pci_cfgfunc_config_device, { PCI_USB2_IOADDR,
++ PCI_USB2_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { }
++};
++#endif
++
++struct pci_controller hose = {
++#ifndef CONFIG_PCI_PNP
++ config_table:pci_linkstation_config_table,
++#endif
++};
++
++void pci_init_board (void)
++{
++ pci_mpc824x_init (&hose);
++
++ /* Reset USB 1.1 */
++ out_le32(PCI_USB0_MEMADDR+8, 1);
++ out_le32(PCI_USB1_MEMADDR+8, 1);
++
++}
++#endif /* CONFIG_PCI */
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/board/linkstation/nc.sh u-boot-86xx-kuro_clean/board/linkstation/nc.sh
+--- u-boot-86xx/board/linkstation/nc.sh 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/nc.sh 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,10 @@
++#! /bin/bash
++
++[ $# = 1 ] || { echo "Usage: $0 target_ip" >&2 ; exit 1 ; }
++TARGET_IP=$1
++
++stty -icanon -echo intr ^T
++#nc -u -l -p 6666 < /dev/null &
++nc -u -p 6666 -v -v ${TARGET_IP} 6666
++stty icanon echo intr ^C
++
+diff -urN u-boot-86xx/board/linkstation/u-boot.lds u-boot-86xx-kuro_clean/board/linkstation/u-boot.lds
+--- u-boot-86xx/board/linkstation/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/board/linkstation/u-boot.lds 2006-11-06 22:05:38.000000000 +0100
+@@ -0,0 +1,138 @@
++/*
++ * (C) Copyright 2001
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_ARCH(powerpc)
++/*
++SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); SEARCH_DIR(/usr/lib/gcc-lib/ppc-linux/3.3.3);
++*/
++/* Do we need any of these for elf?
++ __DYNAMIC = 0; */
++SECTIONS
++{
++ /* Read-only sections, merged into text segment: */
++ . = + SIZEOF_HEADERS;
++ .interp : { *(.interp) }
++ .hash : { *(.hash) }
++ .dynsym : { *(.dynsym) }
++ .dynstr : { *(.dynstr) }
++ .rel.text : { *(.rel.text) }
++ .rela.text : { *(.rela.text) }
++ .rel.data : { *(.rel.data) }
++ .rela.data : { *(.rela.data) }
++ .rel.rodata : { *(.rel.rodata) }
++ .rela.rodata : { *(.rela.rodata) }
++ .rel.got : { *(.rel.got) }
++ .rela.got : { *(.rela.got) }
++ .rel.ctors : { *(.rel.ctors) }
++ .rela.ctors : { *(.rela.ctors) }
++ .rel.dtors : { *(.rel.dtors) }
++ .rela.dtors : { *(.rela.dtors) }
++ .rel.bss : { *(.rel.bss) }
++ .rela.bss : { *(.rela.bss) }
++ .rel.plt : { *(.rel.plt) }
++ .rela.plt : { *(.rela.plt) }
++ .init : { *(.init) }
++ .plt : { *(.plt) }
++ .text :
++ {
++ cpu/mpc824x/start.o (.text)
++ lib_ppc/board.o (.text)
++ lib_ppc/ppcstring.o (.text)
++ lib_generic/vsprintf.o (.text)
++ lib_generic/crc32.o (.text)
++ lib_generic/zlib.o (.text)
++
++ . = DEFINED(env_offset) ? env_offset : .;
++ common/environment.o (.text)
++
++ *(.text)
++
++ *(.fixup)
++ *(.got1)
++ . = ALIGN(16);
++ *(.rodata)
++ *(.rodata1)
++ *(.rodata.str1.4)
++ *(.eh_frame)
++ }
++ .fini : { *(.fini) } =0
++ .ctors : { *(.ctors) }
++ .dtors : { *(.dtors) }
++
++ /* Read-write section, merged into data segment: */
++ . = (. + 0x0FFF) & 0xFFFFF000;
++ _erotext = .;
++ PROVIDE (erotext = .);
++ .reloc :
++ {
++ *(.got)
++ _GOT2_TABLE_ = .;
++ *(.got2)
++ _FIXUP_TABLE_ = .;
++ *(.fixup)
++ }
++ __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
++ __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
++
++ .data :
++ {
++ *(.data)
++ *(.data1)
++ *(.sdata)
++ *(.sdata2)
++ *(.dynamic)
++ CONSTRUCTORS
++ }
++ _edata = .;
++ PROVIDE (edata = .);
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++
++ . = .;
++ __start___ex_table = .;
++ __ex_table : { *(__ex_table) }
++ __stop___ex_table = .;
++
++ . = ALIGN(4096);
++ __init_begin = .;
++ .text.init : { *(.text.init) }
++ .data.init : { *(.data.init) }
++ . = ALIGN(4096);
++ __init_end = .;
++
++ __bss_start = .;
++ .bss :
++ {
++ *(.sbss) *(.scommon)
++ *(.dynbss)
++ *(.bss)
++ *(COMMON)
++ }
++
++ _end = . ;
++ PROVIDE (end = .);
++}
+diff -urN u-boot-86xx/common/cmd_bootm.c u-boot-86xx-kuro_clean/common/cmd_bootm.c
+--- u-boot-86xx/common/cmd_bootm.c 2006-10-13 00:27:16.000000000 +0200
++++ u-boot-86xx-kuro_clean/common/cmd_bootm.c 2006-11-06 22:05:38.000000000 +0100
+@@ -193,6 +193,12 @@
+ verify = 0;
+ } else
+ #endif /* __I386__ */
++#ifdef CONFIG_LINKSTATION
++ extern boot_os_Fcn do_boot_lskernel;
++ do_boot_lskernel(cmdtp, flag, argc, argv,
++ addr, NULL, verify);
++ return 1; /* Only returns on error */
++#endif
+ {
+ puts ("Bad Magic Number\n");
+ SHOW_BOOT_PROGRESS (-1);
+diff -urN u-boot-86xx/common/cmd_ext2.c u-boot-86xx-kuro_clean/common/cmd_ext2.c
+--- u-boot-86xx/common/cmd_ext2.c 2006-10-13 00:27:16.000000000 +0200
++++ u-boot-86xx-kuro_clean/common/cmd_ext2.c 2006-11-06 22:05:38.000000000 +0100
+@@ -283,7 +283,8 @@
+ sprintf(buf, "%lX", filelen);
+ setenv("filesize", buf);
+
+- return(filelen);
++// return(filelen);
++ return(0);
+ }
+
+ U_BOOT_CMD(
+diff -urN u-boot-86xx/common/console.c u-boot-86xx-kuro_clean/common/console.c
+--- u-boot-86xx/common/console.c 2006-10-13 00:27:16.000000000 +0200
++++ u-boot-86xx-kuro_clean/common/console.c 2006-11-06 22:05:38.000000000 +0100
+@@ -48,7 +48,7 @@
+
+ #endif /* CFG_CONSOLE_IS_IN_ENV */
+
+-static int console_setfile (int file, device_t * dev)
++int console_setfile (int file, device_t * dev)
+ {
+ int error = 0;
+
+@@ -444,22 +444,27 @@
+ gd->flags |= GD_FLG_DEVINIT; /* device initialization completed */
+
+ #ifndef CFG_CONSOLE_INFO_QUIET
++ if (strcmp(stdio_devices[stdout]->name, "serial")) {
++ extern char version_string[];
++ printf ("\n%s\n", version_string);
++ }
++
+ /* Print information */
+- puts ("In: ");
++ puts ("stdin : ");
+ if (stdio_devices[stdin] == NULL) {
+ puts ("No input devices available!\n");
+ } else {
+ printf ("%s\n", stdio_devices[stdin]->name);
+ }
+
+- puts ("Out: ");
++ puts ("stdout: ");
+ if (stdio_devices[stdout] == NULL) {
+ puts ("No output devices available!\n");
+ } else {
+ printf ("%s\n", stdio_devices[stdout]->name);
+ }
+
+- puts ("Err: ");
++ puts ("stderr: ");
+ if (stdio_devices[stderr] == NULL) {
+ puts ("No error devices available!\n");
+ } else {
+diff -urN u-boot-86xx/common/main.c u-boot-86xx-kuro_clean/common/main.c
+--- u-boot-86xx/common/main.c 2006-10-13 00:27:16.000000000 +0200
++++ u-boot-86xx-kuro_clean/common/main.c 2006-11-06 22:05:38.000000000 +0100
+@@ -84,6 +84,11 @@
+ extern void mdm_init(void); /* defined in board.c */
+ #endif
+
++#ifdef CONFIG_LINKSTATION
++extern int avr_input(void);
++extern void avr_StopBoot(void);
++#endif
++
+ /***************************************************************************
+ * Watch for 'delay' seconds for autoboot stop or autoboot delay string.
+ * returns: 0 - no key string, allow autoboot
+@@ -162,7 +167,14 @@
+ /* In order to keep up with incoming data, check timeout only
+ * when catch up.
+ */
++ uint64_t onesec = endtick(1);
++ int bootremain = bootdelay;
+ while (!abort && get_ticks() <= etime) {
++ if (get_ticks() >= onesec) {
++ onesec = endtick(1);
++ putc('\r');
++ printf (CONFIG_AUTOBOOT_PROMPT, --bootremain);
++ }
+ for (i = 0; i < sizeof(delaykey) / sizeof(delaykey[0]); i ++) {
+ if (delaykey[i].len > 0 &&
+ presskey_len >= delaykey[i].len &&
+@@ -183,6 +195,20 @@
+ }
+ }
+
++#ifdef CONFIG_LINKSTATION
++ int avr_action = avr_input();
++ if (avr_action == -3)
++ /* Abort boot */
++ abort = 1;
++ else if (avr_action == -2) {
++ /* Restart boot */
++ putc('\r');
++ printf (CONFIG_AUTOBOOT_PROMPT, bootdelay);
++ etime = endtick(bootdelay);
++ onesec = endtick(1);
++ bootremain = bootdelay;
++ }
++#endif
+ if (tstc()) {
+ if (presskey_len < presskey_max) {
+ presskey [presskey_len ++] = getc();
+@@ -195,6 +221,7 @@
+ }
+ }
+ }
++ putc('\n');
+ # if DEBUG_BOOTKEYS
+ if (!abort)
+ puts ("key timeout\n");
+@@ -411,6 +438,10 @@
+ int prev = disable_ctrlc(1); /* disable Control C checking */
+ # endif
+
++#ifdef CONFIG_LINKSTATION
++ s = getenv("bootcmd"); /* bootcmd can change (see avr.c) */
++#endif
++
+ # ifndef CFG_HUSH_PARSER
+ run_command (s, 0);
+ # else
+@@ -445,6 +476,10 @@
+ }
+ #endif
+
++#ifdef CONFIG_LINKSTATION
++ avr_StopBoot();
++#endif
++
+ /*
+ * Main Loop for Monitor Command Processing
+ */
+@@ -469,6 +504,10 @@
+ strcpy (lastcommand, console_buffer);
+ else if (len == 0)
+ flag |= CMD_FLAG_REPEAT;
++#ifdef CONFIG_LINKSTATION
++ else if (len == -2)
++ return;
++#endif
+ #ifdef CONFIG_BOOT_RETRY_TIME
+ else if (len == -2) {
+ /* -2 means timed out, retry autoboot
+@@ -978,6 +1017,15 @@
+ show_activity(0);
+ }
+ #endif
++#ifdef CONFIG_LINKSTATION
++ while (!tstc()) {
++ int avr_ret = avr_input();
++ if (avr_ret == -2)
++ return (-2);
++ else if (avr_ret > 0)
++ return avr_ret;
++ }
++#endif
+ c = getc();
+
+ /*
+diff -urN u-boot-86xx/cpu/mpc824x/cpu.c u-boot-86xx-kuro_clean/cpu/mpc824x/cpu.c
+--- u-boot-86xx/cpu/mpc824x/cpu.c 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/cpu/mpc824x/cpu.c 2006-11-06 22:05:38.000000000 +0100
+@@ -92,6 +92,7 @@
+
+ /*------------------------------------------------------------------- */
+
++#ifndef CONFIG_LINKSTATION
+ int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+ {
+ ulong msr, addr;
+@@ -125,6 +126,7 @@
+ return 1;
+
+ }
++#endif
+
+ /* ------------------------------------------------------------------------- */
+
+diff -urN u-boot-86xx/cpu/mpc824x/start.S u-boot-86xx-kuro_clean/cpu/mpc824x/start.S
+--- u-boot-86xx/cpu/mpc824x/start.S 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/cpu/mpc824x/start.S 2006-11-06 22:05:38.000000000 +0100
+@@ -130,7 +130,7 @@
+
+
+ in_flash:
+-#if defined(CONFIG_BMW)
++#if defined(CONFIG_BMW) || defined(CONFIG_LINKSTATION)
+ bl early_init_f /* Must be ASM: no stack yet! */
+ #endif
+ /*
+@@ -155,6 +155,7 @@
+ mtspr HID0, r2
+ sync
+
++#if !defined(CONFIG_LINKSTATION)
+ /* Allocate Initial RAM in data cache.
+ */
+ lis r3, CFG_INIT_RAM_ADDR@h
+@@ -175,6 +176,7 @@
+ ori r3, r3, 0x0080
+ sync
+ mtspr 1011, r3
++#endif /* !CONFIG_LINKSTATION */
+ #endif /* !CONFIG_BMW */
+ /*
+ * Thisk the stack pointer *somewhere* sensible. Doesnt
+@@ -195,7 +197,9 @@
+ GET_GOT /* initialize GOT access */
+
+ /* r3: IMMR */
++#if !defined(CONFIG_LINKSTATION)
+ bl cpu_init_f /* run low-level CPU init code (from Flash) */
++#endif
+
+ mr r3, r21
+ /* r3: BOOTFLAG */
+@@ -475,7 +479,7 @@
+ mr r10, r5 /* Save copy of Destination Address */
+
+ mr r3, r5 /* Destination Address */
+-#ifdef CFG_RAMBOOT
++#if defined(CFG_RAMBOOT) && !defined(CONFIG_LINKSTATION)
+ lis r4, CFG_SDRAM_BASE@h /* Source Address */
+ ori r4, r4, CFG_SDRAM_BASE@l
+ #else
+@@ -689,6 +693,14 @@
+ cmplw 0, r7, r8
+ blt 4b
+
++ mfmsr r7 /* Exception prefix 0x000 */
++ li r8,0
++ ori r8,r8,MSR_IP
++ andc r7,r7,r8
++ SYNC
++ mtmsr r7
++ SYNC
++
+ mtlr r4 /* restore link register */
+ blr
+
+diff -urN u-boot-86xx/drivers/dc2114x.c u-boot-86xx-kuro_clean/drivers/dc2114x.c
+--- u-boot-86xx/drivers/dc2114x.c 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/drivers/dc2114x.c 2006-11-06 22:05:38.000000000 +0100
+@@ -27,14 +27,20 @@
+ #include <net.h>
+ #include <pci.h>
+
++#if 0
++#define DEBUG_TRACE
++#define DEBUG_TULIP
++#endif
++
+ #undef DEBUG_SROM
+ #undef DEBUG_SROM2
+
+ #undef UPDATE_SROM
+
+-/* PCI Registers.
++/*
++ * PCI Registers.
+ */
+-#define PCI_CFDA_PSM 0x43
++#define PCI_CFDA_PSM 0x43
+
+ #define CFRV_RN 0x000000f0 /* Revision Number */
+
+@@ -43,10 +49,12 @@
+
+ #define DC2114x_BRK 0x0020 /* CFRV break between DC21142 & DC21143 */
+
+-/* Ethernet chip registers.
++/*
++ * Ethernet chip registers.
+ */
+ #define DE4X5_BMR 0x000 /* Bus Mode Register */
+ #define DE4X5_TPD 0x008 /* Transmit Poll Demand Reg */
++#define DE4X5_RPD 0x010 /* Receive Poll Demand Reg */
+ #define DE4X5_RRBA 0x018 /* RX Ring Base Address Reg */
+ #define DE4X5_TRBA 0x020 /* TX Ring Base Address Reg */
+ #define DE4X5_STS 0x028 /* Status Register */
+@@ -54,7 +62,8 @@
+ #define DE4X5_SICR 0x068 /* SIA Connectivity Register */
+ #define DE4X5_APROM 0x048 /* Ethernet Address PROM */
+
+-/* Register bits.
++/*
++ * Register bits.
+ */
+ #define BMR_SWR 0x00000001 /* Software Reset */
+ #define STS_TS 0x00700000 /* Transmit Process State */
+@@ -64,8 +73,10 @@
+ #define OMR_PS 0x00040000 /* Port Select */
+ #define OMR_SDP 0x02000000 /* SD Polarity - MUST BE ASSERTED */
+ #define OMR_PM 0x00000080 /* Pass All Multicast */
++#define OMR_PMS 0x00000040 /* Promiscuous */
+
+-/* Descriptor bits.
++/*
++ * Descriptor bits.
+ */
+ #define R_OWN 0x80000000 /* Own Bit */
+ #define RD_RER 0x02000000 /* Receive End Of Ring */
+@@ -85,10 +96,10 @@
+
+ #define SROM_HWADD 0x0014 /* Hardware Address offset in SROM */
+ #define SROM_RD 0x00004000 /* Read from Boot ROM */
+-#define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */
++#define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */
+ #define EE_WRITE_0 0x4801
+ #define EE_WRITE_1 0x4805
+-#define EE_DATA_READ 0x08 /* EEPROM chip data out. */
++#define EE_DATA_READ 0x08 /* EEPROM chip data out. */
+ #define SROM_SR 0x00000800 /* Select Serial ROM when set */
+
+ #define DT_IN 0x00000004 /* Serial Data In */
+@@ -97,6 +108,36 @@
+
+ #define POLL_DEMAND 1
+
++#ifndef PCI_VENDOR_ID_ADMTEK
++# define PCI_VENDOR_ID_ADMTEK 0x1317
++#endif
++#ifndef PCI_DEVICE_ID_ADMTEK_AN983B
++# define PCI_DEVICE_ID_ADMTEK_AN983B 0x985
++#endif
++
++/* The chip types have been taken from linux-2.4.31
++ * drivers/net/tulip/tulip.h
++ * Only COMET is used for now
++ */
++enum chips {
++ DC21040 = 0,
++ DC21041 = 1,
++ DC21140 = 2,
++ DC21142 = 3, DC21143 = 3,
++ LC82C168,
++ MX98713,
++ MX98715,
++ MX98725,
++ AX88140,
++ PNIC2,
++ COMET,
++ COMPEX9881,
++ I21145,
++ DM910X,
++ CONEXANT,
++};
++static int chip_idx = DC21143;
++
+ #ifdef CONFIG_TULIP_FIX_DAVICOM
+ #define RESET_DM9102(dev) {\
+ unsigned long i;\
+@@ -108,58 +149,63 @@
+ #else
+ #define RESET_DE4X5(dev) {\
+ int i;\
+- i=INL(dev, DE4X5_BMR);\
+- udelay(1000);\
++ i=0x01A04000;\
+ OUTL(dev, i | BMR_SWR, DE4X5_BMR);\
+ udelay(1000);\
+ OUTL(dev, i, DE4X5_BMR);\
+ udelay(1000);\
+- for (i=0;i<5;i++) {INL(dev, DE4X5_BMR); udelay(10000);}\
+- udelay(1000);\
+ }
+ #endif
+
+ #define START_DE4X5(dev) {\
+- s32 omr; \
++ u32 omr; \
+ omr = INL(dev, DE4X5_OMR);\
+ omr |= OMR_ST | OMR_SR;\
+ OUTL(dev, omr, DE4X5_OMR); /* Enable the TX and/or RX */\
+ }
+
+ #define STOP_DE4X5(dev) {\
+- s32 omr; \
++ u32 omr; \
+ omr = INL(dev, DE4X5_OMR);\
+ omr &= ~(OMR_ST|OMR_SR);\
+ OUTL(dev, omr, DE4X5_OMR); /* Disable the TX and/or RX */ \
+ }
+
+-#define NUM_RX_DESC PKTBUFSRX
++#define NUM_RX_DESC 4
+ #ifndef CONFIG_TULIP_FIX_DAVICOM
+- #define NUM_TX_DESC 1 /* Number of TX descriptors */
++ #define NUM_TX_DESC 2 /* Number of TX descriptors */
+ #else
+ #define NUM_TX_DESC 4
+ #endif
+-#define RX_BUFF_SZ PKTSIZE_ALIGN
++#define BUFLEN 1536
+
+ #define TOUT_LOOP 1000000
+
+ #define SETUP_FRAME_LEN 192
+ #define ETH_ALEN 6
++#define ETH_ZLEN 60
+
+ struct de4x5_desc {
+- volatile s32 status;
++ volatile u32 status;
+ u32 des1;
+ u32 buf;
+ u32 next;
+ };
+
+-static struct de4x5_desc rx_ring[NUM_RX_DESC] __attribute__ ((aligned(32))); /* RX descriptor ring */
+-static struct de4x5_desc tx_ring[NUM_TX_DESC] __attribute__ ((aligned(32))); /* TX descriptor ring */
+-static int rx_new; /* RX descriptor ring pointer */
+-static int tx_new; /* TX descriptor ring pointer */
++/* Note: transmit and receive buffers must be longword aligned and
++ longword divisable */
+
+-static char rxRingSize;
+-static char txRingSize;
++/* TX descriptor ring */
++static struct de4x5_desc tx_ring[NUM_TX_DESC] __attribute__ ((aligned(4)));
++/* TX buffer */
++static unsigned char txb[BUFLEN] __attribute__ ((aligned(32)));
++
++/* RX descriptor ring */
++static struct de4x5_desc rx_ring[NUM_RX_DESC] __attribute__ ((aligned(4)));
++/* RX buffers */
++static unsigned char rxb[NUM_RX_DESC * BUFLEN] __attribute__ ((aligned(32)));
++
++static int rx_new; /* RX descriptor ring pointer */
+
+ #if defined(UPDATE_SROM) || !defined(CONFIG_TULIP_FIX_DAVICOM)
+ static void sendto_srom(struct eth_device* dev, u_int command, u_long addr);
+@@ -204,6 +250,7 @@
+ static struct pci_device_id supported[] = {
+ { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST },
+ { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142 },
++ { PCI_VENDOR_ID_ADMTEK, PCI_DEVICE_ID_ADMTEK_AN983B },
+ #ifdef CONFIG_TULIP_FIX_DAVICOM
+ { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DAVICOM_DM9102A },
+ #endif
+@@ -214,29 +261,44 @@
+ {
+ int idx=0;
+ int card_number = 0;
+- unsigned int cfrv;
++ unsigned int cfrv;
+ unsigned char timer;
+- pci_dev_t devbusfn;
++ pci_dev_t devbusfn;
+ unsigned int iobase;
+ unsigned short status;
+ struct eth_device* dev;
++ u16 vendor;
++ u16 device;
+
++#ifdef DEBUG_TULIP
++ printf("%s\n", __FUNCTION__);
++#endif
+ while(1) {
+ devbusfn = pci_find_devices(supported, idx++);
+ if (devbusfn == -1) {
+ break;
+ }
++ pci_read_config_word(devbusfn, PCI_VENDOR_ID, &vendor);
++ pci_read_config_word(devbusfn, PCI_DEVICE_ID, &device);
+
+- /* Get the chip configuration revision register. */
+- pci_read_config_dword(devbusfn, PCI_REVISION_ID, &cfrv);
++ debug("dc21x4x: devbusfn: %08lX, VID: %08lX, DID: %08lX\n",
++ devbusfn, vendor, device);
++
++ if (vendor == PCI_VENDOR_ID_ADMTEK && \
++ device == PCI_DEVICE_ID_ADMTEK_AN983B) {
++ chip_idx = COMET;
++ } else {
++ /* Get the chip configuration revision register. */
++ pci_read_config_dword(devbusfn, PCI_REVISION_ID, &cfrv);
+
+ #ifndef CONFIG_TULIP_FIX_DAVICOM
+- if ((cfrv & CFRV_RN) < DC2114x_BRK ) {
+- printf("Error: The chip is not DC21143.\n");
+- continue;
+- }
++ if ((cfrv & CFRV_RN) < DC2114x_BRK ) {
++ printf("Error: The chip is not DC21143.\n");
++ idx++;
++ continue;
++ }
+ #endif
+-
++ }
+ pci_read_config_word(devbusfn, PCI_COMMAND, &status);
+ status |=
+ #ifdef CONFIG_TULIP_USE_IO
+@@ -286,7 +348,10 @@
+ #ifdef CONFIG_TULIP_FIX_DAVICOM
+ sprintf(dev->name, "Davicom#%d", card_number);
+ #else
+- sprintf(dev->name, "dc21x4x#%d", card_number);
++ if (chip_idx == COMET)
++ sprintf(dev->name, "COMET#%d", card_number);
++ else
++ sprintf(dev->name, "dc21x4x#%d", card_number);
+ #endif
+
+ #ifdef CONFIG_TULIP_USE_IO
+@@ -303,8 +368,6 @@
+ /* Ensure we're not sleeping. */
+ pci_write_config_byte(devbusfn, PCI_CFDA_PSM, WAKEUP);
+
+- udelay(10 * 1000);
+-
+ #ifndef CONFIG_TULIP_FIX_DAVICOM
+ read_hw_addr(dev, bis);
+ #endif
+@@ -321,8 +384,9 @@
+ int i;
+ int devbusfn = (int) dev->priv;
+
+- /* Ensure we're not sleeping. */
+- pci_write_config_byte(devbusfn, PCI_CFDA_PSM, WAKEUP);
++#if defined(DEBUG_TULIP) || defined(DEBUG_TRACE)
++ serial_printf("%0lu %s\n", get_timer(0), __FUNCTION__);
++#endif
+
+ #ifdef CONFIG_TULIP_FIX_DAVICOM
+ RESET_DM9102(dev);
+@@ -330,57 +394,71 @@
+ RESET_DE4X5(dev);
+ #endif
+
+- if ((INL(dev, DE4X5_STS) & (STS_TS | STS_RS)) != 0) {
+- printf("Error: Cannot reset ethernet controller.\n");
+- return 0;
+- }
+-
+ #ifdef CONFIG_TULIP_SELECT_MEDIA
+ dc21x4x_select_media(dev);
+ #else
+- OUTL(dev, OMR_SDP | OMR_PS | OMR_PM, DE4X5_OMR);
++ if (chip_idx == COMET) {
++ /* No multicast */
++ OUTL(dev, 0, 0xAC);
++ OUTL(dev, 0, 0xB0);
++ } else {
++ OUTL(dev, OMR_SDP | OMR_PS | OMR_PM, DE4X5_OMR);
++ }
+ #endif
+
+ for (i = 0; i < NUM_RX_DESC; i++) {
+ rx_ring[i].status = cpu_to_le32(R_OWN);
+- rx_ring[i].des1 = cpu_to_le32(RX_BUFF_SZ);
+- rx_ring[i].buf = cpu_to_le32(phys_to_bus((u32) NetRxPackets[i]));
+-#ifdef CONFIG_TULIP_FIX_DAVICOM
+- rx_ring[i].next = cpu_to_le32(phys_to_bus((u32) &rx_ring[(i+1) % NUM_RX_DESC]));
+-#else
+- rx_ring[i].next = 0;
+-#endif
++ rx_ring[i].des1 = cpu_to_le32(BUFLEN);
++ rx_ring[i].buf = cpu_to_le32(phys_to_bus((u32)&rxb[i * BUFLEN]));
++ rx_ring[i].next = cpu_to_le32(phys_to_bus((u32)&rx_ring[i+1]));
+ }
++ /* Write the end of list marker to the descriptor lists. */
++ rx_ring[NUM_RX_DESC - 1].des1 |= cpu_to_le32(RD_RER);
++ rx_ring[NUM_RX_DESC - 1].next = cpu_to_le32(phys_to_bus((u32)&rx_ring[0]));
+
+- for (i=0; i < NUM_TX_DESC; i++) {
+- tx_ring[i].status = 0;
+- tx_ring[i].des1 = 0;
+- tx_ring[i].buf = 0;
++ /* Point to the first descriptor */
++ rx_new = 0;
+
+-#ifdef CONFIG_TULIP_FIX_DAVICOM
+- tx_ring[i].next = cpu_to_le32(phys_to_bus((u32) &tx_ring[(i+1) % NUM_TX_DESC]));
+-#else
+- tx_ring[i].next = 0;
+-#endif
+- }
++ /* We only use 1 transmit buffer, but we use 2 descriptors so
++ transmit engines have somewhere to point to if they feel the need */
+
+- rxRingSize = NUM_RX_DESC;
+- txRingSize = NUM_TX_DESC;
++ tx_ring[0].status = 0;
++ tx_ring[0].des1 = 0;
++ tx_ring[0].buf = cpu_to_le32(phys_to_bus((u32)&txb[0]));
++ tx_ring[0].next = cpu_to_le32(phys_to_bus((u32)&tx_ring[1]));
++
++ /* this descriptor should never get used, since it will never be owned
++ by the machine (status will always == 0) */
++
++ tx_ring[1].status = 0;
++ tx_ring[1].des1 = 0;
++ tx_ring[1].buf = cpu_to_le32(phys_to_bus((u32)&txb[0]));
++ tx_ring[1].next = cpu_to_le32(phys_to_bus((u32)&tx_ring[0]));
+
+ /* Write the end of list marker to the descriptor lists. */
+- rx_ring[rxRingSize - 1].des1 |= cpu_to_le32(RD_RER);
+- tx_ring[txRingSize - 1].des1 |= cpu_to_le32(TD_TER);
++ tx_ring[1].des1 |= cpu_to_le32(TD_TER);
+
+ /* Tell the adapter where the TX/RX rings are located. */
+- OUTL(dev, phys_to_bus((u32) &rx_ring), DE4X5_RRBA);
+- OUTL(dev, phys_to_bus((u32) &tx_ring), DE4X5_TRBA);
++ OUTL(dev, phys_to_bus((u32) &rx_ring[0]), DE4X5_RRBA);
++ OUTL(dev, phys_to_bus((u32) &tx_ring[0]), DE4X5_TRBA);
++
++ if (chip_idx == COMET) {
++ /* Bit 18 (0x00040000) is reserved in the AN983B */
++ /* datasheet, but it is used by the tulip driver */
++ OUTL(dev, (INL(dev, (DE4X5_OMR)) & ~(OMR_PMS | OMR_PM)) | OMR_PS, DE4X5_OMR);
++ /* Enable automatic Tx underrun recovery */
++ OUTL(dev, INL(dev, 0x88) | 1, 0x88);
++// OUTL(dev, INL(dev, 0x88) | 0x19, 0x88);
++ }
+
+ START_DE4X5(dev);
+
+- tx_new = 0;
+- rx_new = 0;
++ /* Start receiving */
++ OUTL(dev, POLL_DEMAND, DE4X5_RPD);
+
+- send_setup_frame(dev, bis);
++ if (chip_idx != COMET) { /* No setup frame needed by COMET */
++ send_setup_frame(dev, bis);
++ }
+
+ return 1;
+ }
+@@ -389,90 +467,117 @@
+ {
+ int status = -1;
+ int i;
++ u32 len = length;
+
+ if (length <= 0) {
+ printf("%s: bad packet size: %d\n", dev->name, length);
+ goto Done;
+ }
+
+- for(i = 0; tx_ring[tx_new].status & cpu_to_le32(T_OWN); i++) {
++ for(i = 0; tx_ring[0].status & cpu_to_le32(T_OWN); i++) {
+ if (i >= TOUT_LOOP) {
+- printf("%s: tx error buffer not ready\n", dev->name);
++ printf(".%s: Tx not ready\n", dev->name);
+ goto Done;
+ }
+ }
+
+- tx_ring[tx_new].buf = cpu_to_le32(phys_to_bus((u32) packet));
+- tx_ring[tx_new].des1 = cpu_to_le32(TD_TER | TD_LS | TD_FS | length);
+- tx_ring[tx_new].status = cpu_to_le32(T_OWN);
++ /* Disable the TX */
++ OUTL(dev, INL(dev, DE4X5_OMR) & ~OMR_ST, DE4X5_OMR);
++
++ memcpy(txb, (char*)packet, length);
++
++ /* setup the transmit descriptor */
++ tx_ring[0].des1 = cpu_to_le32(TD_LS | TD_FS | length);
++ tx_ring[0].status = cpu_to_le32(T_OWN);
+
++ /* Point to transmit descriptor */
++ OUTL(dev, phys_to_bus((u32) &tx_ring[0]), DE4X5_TRBA);
++
++ /* Enable the TX */
++ OUTL(dev, INL(dev, DE4X5_OMR) | OMR_ST, DE4X5_OMR);
++
++ /* Immediate transmit demand */
+ OUTL(dev, POLL_DEMAND, DE4X5_TPD);
+
+- for(i = 0; tx_ring[tx_new].status & cpu_to_le32(T_OWN); i++) {
++ for(i = 0; tx_ring[0].status & cpu_to_le32(T_OWN); i++) {
+ if (i >= TOUT_LOOP) {
+- printf(".%s: tx buffer not ready\n", dev->name);
++ printf(".%s: Tx Timeout\n", dev->name);
+ goto Done;
+ }
+ }
+
+- if (le32_to_cpu(tx_ring[tx_new].status) & TD_ES) {
+-#if 0 /* test-only */
++#ifdef DEBUG_TRACE
++ serial_printf("%0lu Tx L2: %d P: %04X IP: %08X\n",
++ get_timer(0), i, *((u16 *)(packet+0xC)),
++ *((u32 *)(packet+0x1E)));
++#endif
++
++ if (le32_to_cpu(tx_ring[0].status) & TD_ES) {
++#if 1 /* test-only */
+ printf("TX error status = 0x%08X\n",
+- le32_to_cpu(tx_ring[tx_new].status));
++ le32_to_cpu(tx_ring[0].status));
+ #endif
+- tx_ring[tx_new].status = 0x0;
++ tx_ring[0].status = 0x0;
+ goto Done;
+ }
+
+ status = length;
+
+ Done:
+- tx_new = (tx_new+1) % NUM_TX_DESC;
+ return status;
+ }
+
+ static int dc21x4x_recv(struct eth_device* dev)
+ {
+- s32 status;
++ u32 status;
++ int rx_prv;
+ int length = 0;
+
+- for ( ; ; ) {
+- status = (s32)le32_to_cpu(rx_ring[rx_new].status);
++#ifdef DEBUG_TULIP
++ u32 csr5 = INL(dev, DE4X5_STS);
++ if ((csr5 & STS_RS) != 0x00060000) {
++ OUTL(dev, 0x0001ffff, DE4X5_STS);
++ printf("Receive status: 0x%08X\n", csr5);
++ }
++#endif
+
+- if (status & R_OWN) {
+- break;
+- }
++ status = (u32)le32_to_cpu(rx_ring[rx_new].status);
++ if (status & R_OWN)
++ return 0;
+
+- if (status & RD_LS) {
+- /* Valid frame status.
+- */
+- if (status & RD_ES) {
+-
+- /* There was an error.
+- */
+- printf("RX error status = 0x%08X\n", status);
+- } else {
+- /* A valid frame received.
+- */
+- length = (le32_to_cpu(rx_ring[rx_new].status) >> 16);
+-
+- /* Pass the packet up to the protocol
+- * layers.
+- */
+- NetReceive(NetRxPackets[rx_new], length - 4);
+- }
++#ifdef DEBUG_TULIP
++ printf("recv status: 0x%08X\n", status);
++#endif
+
+- /* Change buffer ownership for this frame, back
+- * to the adapter.
+- */
++ if (status & RD_LS) {
++#ifdef DEBUG_TRACE
++ serial_printf("rx: %d status: %08X\n", rx_new, status);
++#endif
++ /* Valid frame status */
++ if (status & RD_ES) {
++ /* There was an error */
++ printf("RX error status = 0x%08X\n", status);
+ rx_ring[rx_new].status = cpu_to_le32(R_OWN);
+- }
++ } else {
++ /* Received valid frame */
++ length = (int)(le32_to_cpu(rx_ring[rx_new].status) >> 16);
++
++ /* Pass the packet up to the protocol layers. */
++ unsigned char rxdata[BUFLEN];
++ memcpy(rxdata, rxb + rx_new * BUFLEN, length - 4);
+
+- /* Update entry information.
+- */
+- rx_new = (rx_new + 1) % rxRingSize;
++ /* Give buffer ownership for this
++ * frame back to the adapter */
++ rx_ring[rx_new].status = cpu_to_le32(R_OWN);
++
++ /* Pass the received packet to the upper layer */
++ NetReceive(rxdata, length - 4);
++ }
+ }
+
++ /* Update current descriptor index */
++ rx_new = (rx_new + 1) % NUM_RX_DESC;
++
+ return length;
+ }
+
+@@ -480,10 +585,12 @@
+ {
+ int devbusfn = (int) dev->priv;
+
++#ifdef DEBUG_TULIP
++ printf("%s\n", __FUNCTION__);
++#endif
+ STOP_DE4X5(dev);
+ OUTL(dev, 0, DE4X5_SICR);
+
+- pci_write_config_byte(devbusfn, PCI_CFDA_PSM, SLEEP);
+ }
+
+ static void send_setup_frame(struct eth_device* dev, bd_t *bis)
+@@ -501,30 +608,29 @@
+ }
+ }
+
+- for(i = 0; tx_ring[tx_new].status & cpu_to_le32(T_OWN); i++) {
++ for(i = 0; tx_ring[0].status & cpu_to_le32(T_OWN); i++) {
+ if (i >= TOUT_LOOP) {
+ printf("%s: tx error buffer not ready\n", dev->name);
+ goto Done;
+ }
+ }
+
+- tx_ring[tx_new].buf = cpu_to_le32(phys_to_bus((u32) &setup_frame[0]));
+- tx_ring[tx_new].des1 = cpu_to_le32(TD_TER | TD_SET| SETUP_FRAME_LEN);
+- tx_ring[tx_new].status = cpu_to_le32(T_OWN);
++ tx_ring[0].buf = cpu_to_le32(phys_to_bus((u32) &setup_frame[0]));
++ tx_ring[0].des1 = cpu_to_le32(TD_TER | TD_SET| SETUP_FRAME_LEN);
++ tx_ring[0].status = cpu_to_le32(T_OWN);
+
+ OUTL(dev, POLL_DEMAND, DE4X5_TPD);
+
+- for(i = 0; tx_ring[tx_new].status & cpu_to_le32(T_OWN); i++) {
++ for(i = 0; tx_ring[0].status & cpu_to_le32(T_OWN); i++) {
+ if (i >= TOUT_LOOP) {
+ printf("%s: tx buffer not ready\n", dev->name);
+ goto Done;
+ }
+ }
+
+- if (le32_to_cpu(tx_ring[tx_new].status) != 0x7FFFFFFF) {
+- printf("TX error status2 = 0x%08X\n", le32_to_cpu(tx_ring[tx_new].status));
++ if (le32_to_cpu(tx_ring[0].status) != 0x7FFFFFFF) {
++ printf("TX error status2 = 0x%08X\n", le32_to_cpu(tx_ring[0].status));
+ }
+- tx_new = (tx_new+1) % NUM_TX_DESC;
+
+ Done:
+ return;
+@@ -543,7 +649,7 @@
+ static int
+ getfrom_srom(struct eth_device* dev, u_long addr)
+ {
+- s32 tmp;
++ u32 tmp;
+
+ tmp = INL(dev, addr);
+ udelay(1);
+@@ -708,19 +814,27 @@
+ #ifndef CONFIG_TULIP_FIX_DAVICOM
+ static void read_hw_addr(struct eth_device *dev, bd_t *bis)
+ {
+- u_short tmp, *p = (u_short *)(&dev->enetaddr[0]);
+- int i, j = 0;
+-
+- for (i = 0; i < (ETH_ALEN >> 1); i++) {
+- tmp = read_srom(dev, DE4X5_APROM, ((SROM_HWADD >> 1) + i));
+- *p = le16_to_cpu(tmp);
+- j += *p++;
+- }
+-
+- if ((j == 0) || (j == 0x2fffd)) {
+- memset (dev->enetaddr, 0, ETH_ALEN);
+- debug ("Warning: can't read HW address from SROM.\n");
+- goto Done;
++ if (chip_idx == COMET) {
++ /* COMET reads the ehernet address directly from the EEPROM */
++ *(u32 *)dev->enetaddr = cpu_to_le32(INL(dev, 0xA4));
++ *(u16 *)(dev->enetaddr+4) = cpu_to_le16(INL(dev, 0xA8));
++ *(u32 *)bis->bi_enetaddr = *(u32 *)dev->enetaddr;
++ *(u16 *)(bis->bi_enetaddr+4) = *(u16 *)(dev->enetaddr+4);
++ } else {
++ u_short tmp, *p = (u_short *)(&dev->enetaddr[0]);
++ int i, j = 0;
++
++ for (i = 0; i < (ETH_ALEN >> 1); i++) {
++ tmp=read_srom(dev, DE4X5_APROM, ((SROM_HWADD >> 1)+i));
++ *p = le16_to_cpu(tmp);
++ j += *p++;
++ }
++
++ if ((j == 0) || (j == 0x2fffd)) {
++ memset (dev->enetaddr, 0, ETH_ALEN);
++ debug ("Warning: can't read HW address from SROM.\n");
++ goto Done;
++ }
+ }
+
+ return;
+@@ -769,3 +883,5 @@
+ #endif /* UPDATE_SROM */
+
+ #endif /* CFG_CMD_NET && CONFIG_NET_MULTI && CONFIG_TULIP */
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/drivers/netconsole.c u-boot-86xx-kuro_clean/drivers/netconsole.c
+--- u-boot-86xx/drivers/netconsole.c 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/drivers/netconsole.c 2006-11-06 22:05:38.000000000 +0100
+@@ -27,6 +27,7 @@
+
+ #include <command.h>
+ #include <devices.h>
++#include <console.h>
+ #include <net.h>
+
+ DECLARE_GLOBAL_DATA_PTR;
+@@ -124,6 +125,26 @@
+ output_packet_len = len;
+ NetLoop (NETCONS); /* wait for arp reply and send packet */
+ output_packet_len = 0;
++#if defined(CFG_CONSOLE_IS_IN_ENV) || defined(CONFIG_SILENT_CONSOLE)
++ if (NetState == NETLOOP_FAIL) {
++ /* ARP failed, fail back to serial console */
++ device_t *idev;
++ device_t *odev;
++
++ idev = search_device(DEV_FLAGS_INPUT, "serial");
++ odev = search_device(DEV_FLAGS_OUTPUT, "serial");
++
++ console_setfile (stdin, idev);
++ console_setfile (stdout, odev);
++ console_setfile (stderr, odev);
++
++#if defined(CONFIG_LINKSTATION)
++ void next_cons_choice(int console);
++ /* Console 0 is the serial console */
++ next_cons_choice(0);
++#endif
++ }
++#endif
+ return;
+ }
+
+@@ -236,7 +257,8 @@
+
+ input_recursion = 1;
+
+- net_timeout = 1;
++// net_timeout = 1;
++ net_timeout = 50;
+ NetLoop (NETCONS); /* kind of poll */
+
+ input_recursion = 0;
+diff -urN u-boot-86xx/drivers/rtl8169.c u-boot-86xx-kuro_clean/drivers/rtl8169.c
+--- u-boot-86xx/drivers/rtl8169.c 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/drivers/rtl8169.c 2006-11-06 22:05:38.000000000 +0100
+@@ -48,7 +48,10 @@
+ *
+ * Indent Options: indent -kr -i8
+ ***************************************************************************/
+-
++/*
++ * 26 August 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ * Modified to use le32_to_cpu and cpu_to_le32 properly
++ */
+ #include <common.h>
+ #include <malloc.h>
+ #include <net.h>
+@@ -68,6 +71,7 @@
+ static u32 ioaddr;
+
+ /* Condensed operations for readability. */
++#define virt_to_bus(addr) cpu_to_le32(addr)
+ #define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr))
+ #define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
+
+@@ -413,23 +417,23 @@
+ ioaddr = dev->iobase;
+
+ cur_rx = tpc->cur_rx;
+- if ((tpc->RxDescArray[cur_rx].status & OWNbit) == 0) {
+- if (!(tpc->RxDescArray[cur_rx].status & RxRES)) {
++ if ((le32_to_cpu(tpc->RxDescArray[cur_rx].status) & OWNbit) == 0) {
++ if (!(le32_to_cpu(tpc->RxDescArray[cur_rx].status) & RxRES)) {
+ unsigned char rxdata[RX_BUF_LEN];
+- length = (int) (tpc->RxDescArray[cur_rx].
+- status & 0x00001FFF) - 4;
++ length = (int) (le32_to_cpu(tpc->RxDescArray[cur_rx].
++ status) & 0x00001FFF) - 4;
+
+ memcpy(rxdata, tpc->RxBufferRing[cur_rx], length);
+ NetReceive(rxdata, length);
+
+ if (cur_rx == NUM_RX_DESC - 1)
+ tpc->RxDescArray[cur_rx].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+ tpc->RxDescArray[cur_rx].status =
+- OWNbit + RX_BUF_SIZE;
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+ tpc->RxDescArray[cur_rx].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[cur_rx]);
++ cpu_to_le32(tpc->RxBufferRing[cur_rx]);
+ } else {
+ puts("Error Rx");
+ }
+@@ -454,6 +458,7 @@
+ u8 *ptxb;
+ int entry = tpc->cur_tx % NUM_TX_DESC;
+ u32 len = length;
++ int ret;
+
+ #ifdef DEBUG_RTL8169_TX
+ int stime = currticks();
+@@ -465,39 +470,46 @@
+
+ /* point to the current txb incase multiple tx_rings are used */
+ ptxb = tpc->Tx_skbuff[entry * MAX_ETH_FRAME_SIZE];
++#ifdef DEBUG_RTL8169_TX
++ printf("ptxb: %08X, length: %d\n", ptxb, (int)length);
++#endif
+ memcpy(ptxb, (char *)packet, (int)length);
+
+ while (len < ETH_ZLEN)
+ ptxb[len++] = '\0';
+
+- tpc->TxDescArray[entry].buf_addr = virt_to_bus(ptxb);
++ tpc->TxDescArray[entry].buf_addr = cpu_to_le32(ptxb);
+ if (entry != (NUM_TX_DESC - 1)) {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | FSbit | LSbit) | ((len > ETH_ZLEN) ?
+- len : ETH_ZLEN);
++ cpu_to_le32((OWNbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ } else {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | EORbit | FSbit | LSbit) |
+- ((len > ETH_ZLEN) ? length : ETH_ZLEN);
++ cpu_to_le32((OWNbit | EORbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ }
+ RTL_W8(TxPoll, 0x40); /* set polling bit */
+
+ tpc->cur_tx++;
+ to = currticks() + TX_TIMEOUT;
+- while ((tpc->TxDescArray[entry].status & OWNbit) && (currticks() < to)); /* wait */
++ while ((le32_to_cpu(tpc->TxDescArray[entry].status) & OWNbit)
++ && (currticks() < to)); /* wait */
+
+ if (currticks() >= to) {
+ #ifdef DEBUG_RTL8169_TX
+ puts ("tx timeout/error\n");
+ printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
+ #endif
+- return 0;
++ ret = 0;
+ } else {
+ #ifdef DEBUG_RTL8169_TX
+ puts("tx done\n");
+ #endif
+- return length;
++ ret = length;
+ }
++ /* Delay to make net console (nc) work properly */
++ udelay(20);
++ return ret;
+ }
+
+ static void rtl8169_set_rx_mode(struct eth_device *dev)
+@@ -603,13 +615,14 @@
+ for (i = 0; i < NUM_RX_DESC; i++) {
+ if (i == (NUM_RX_DESC - 1))
+ tpc->RxDescArray[i].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+- tpc->RxDescArray[i].status = OWNbit + RX_BUF_SIZE;
++ tpc->RxDescArray[i].status =
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+
+ tpc->RxBufferRing[i] = &rxb[i * RX_BUF_SIZE];
+ tpc->RxDescArray[i].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[i]);
++ cpu_to_le32(tpc->RxBufferRing[i]);
+ }
+
+ #ifdef DEBUG_RTL8169
+@@ -635,17 +648,23 @@
+ if (tpc->TxDescArrays == 0)
+ puts("Allot Error");
+ /* Tx Desscriptor needs 256 bytes alignment; */
+- TxPhyAddr = virt_to_bus(tpc->TxDescArrays);
++ TxPhyAddr = tpc->TxDescArrays;
+ diff = 256 - (TxPhyAddr - ((TxPhyAddr >> 8) << 8));
+ TxPhyAddr += diff;
+ tpc->TxDescArray = (struct TxDesc *) (tpc->TxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->TxDescArray: %08X\n", tpc->TxDescArray);
++#endif
+
+ tpc->RxDescArrays = rx_ring;
+ /* Rx Desscriptor needs 256 bytes alignment; */
+- RxPhyAddr = virt_to_bus(tpc->RxDescArrays);
++ RxPhyAddr = tpc->RxDescArrays;
+ diff = 256 - (RxPhyAddr - ((RxPhyAddr >> 8) << 8));
+ RxPhyAddr += diff;
+ tpc->RxDescArray = (struct RxDesc *) (tpc->RxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->RxDescArray: %08X\n", tpc->RxDescArray);
++#endif
+
+ if (tpc->TxDescArrays == NULL || tpc->RxDescArrays == NULL) {
+ puts("Allocate RxDescArray or TxDescArray failed\n");
+@@ -733,7 +752,7 @@
+
+ /* Get MAC address. FIXME: read EEPROM */
+ for (i = 0; i < MAC_ADDR_LEN; i++)
+- dev->enetaddr[i] = RTL_R8(MAC0 + i);
++ bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i);
+
+ #ifdef DEBUG_RTL8169
+ printf("MAC Address");
+@@ -805,33 +824,68 @@
+ PHY_Enable_Auto_Nego | PHY_Restart_Auto_Nego);
+ udelay(100);
+
++#ifdef CONFIG_LINKSTATION
++void miconCntl_FanLow(void);
++void miconCntl_FanHigh(void);
++void miconCntl_Eth1000M(int up);
++void miconCntl_Eth100M(int up);
++void miconCntl_Eth10M(int up);
++void miconCntl_5f(void);
++
++ miconCntl_FanLow();
++#endif
++
+ /* wait for auto-negotiation process */
+ for (i = 10000; i > 0; i--) {
+ /* check if auto-negotiation complete */
+ if (mdio_read(PHY_STAT_REG) & PHY_Auto_Neco_Comp) {
+ udelay(100);
+ option = RTL_R8(PHYstatus);
++#if defined(CONFIG_LINKSTATION) && defined(CONFIG_HTGL)
+ if (option & _1000bpsF) {
+ #ifdef DEBUG_RTL8169
+ printf("%s: 1000Mbps Full-duplex operation.\n",
+ dev->name);
+ #endif
+- } else {
++ miconCntl_Eth1000M(1);
++ } else if (option & _100bps) {
++#ifdef DEBUG_RTL8169
++ printf("%s: 100Mbps %s-duplexoperation.\n",
++ dev->name,
++ (option & FullDup) ? "Full" : "Half");
++#endif
++ miconCntl_Eth100M(1);
++ } else if (option & _10bps) {
+ #ifdef DEBUG_RTL8169
+ printf
+- ("%s: %sMbps %s-duplex operation.\n",
++ ("%s: 10Mbps %s-duplex operation.\n",
+ dev->name,
+- (option & _100bps) ? "100" :
+- "10",
+- (option & FullDup) ? "Full" :
+- "Half");
++ (option & FullDup) ? "Full" : "Half");
++#endif
++ miconCntl_Eth100M(1);
++ }
++ miconCntl_5f();
++#else /* !defined(CONFIG_LINKSTATION) || !defined(CONFIG_HTGL) */
++ if (option & _1000bpsF) {
++#ifdef DEBUG_RTL8169
++ printf("%s: 1000Mbps Full-duplex operation.\n",
++ dev->name);
++#endif
++ miconCntl_FanHigh();
++ } else {
++#ifdef DEBUG_RTL8169
++ printk("%s: %sMbps %s-duplex operation.\n",
++ dev->name,
++ (option & _100bps) ? "100" : "10",
++ (option & FullDup) ? "Full" : "Half");
+ #endif
+ }
++#endif
+ break;
+ } else {
+ udelay(100);
+ }
+- } /* end for-loop to wait for auto-negotiation process */
++ } /* end for-loop to wait for auto-negotiation process */
+
+ } else {
+ udelay(100);
+@@ -886,3 +940,5 @@
+ }
+
+ #endif
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/fs/ext2/ext2fs.c u-boot-86xx-kuro_clean/fs/ext2/ext2fs.c
+--- u-boot-86xx/fs/ext2/ext2fs.c 2006-10-13 00:27:17.000000000 +0200
++++ u-boot-86xx-kuro_clean/fs/ext2/ext2fs.c 2006-11-06 22:05:38.000000000 +0100
+@@ -35,6 +35,8 @@
+
+ /* Magic value used to identify an ext2 filesystem. */
+ #define EXT2_MAGIC 0xEF53
++/* Magic value used to identify Buffalo's idea of ext2 */
++#define LINKSTATION_MAGIC 0xEF54
+ /* Amount of indirect blocks in an inode. */
+ #define INDIRECT_BLOCKS 12
+ /* Maximum lenght of a pathname. */
+@@ -851,7 +853,8 @@
+ goto fail;
+ }
+ /* Make sure this is an ext2 filesystem. */
+- if (__le16_to_cpu (data->sblock.magic) != EXT2_MAGIC) {
++ if ((__le16_to_cpu (data->sblock.magic) != EXT2_MAGIC) &&
++ (__le16_to_cpu (data->sblock.magic) != LINKSTATION_MAGIC)) {
+ goto fail;
+ }
+ data->diropen.data = data;
+diff -urN u-boot-86xx/include/configs/linkstation.h u-boot-86xx-kuro_clean/include/configs/linkstation.h
+--- u-boot-86xx/include/configs/linkstation.h 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-86xx-kuro_clean/include/configs/linkstation.h 2006-11-06 22:30:33.000000000 +0100
+@@ -0,0 +1,492 @@
++/*
++ * Copyright (C) 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if 0
++#define DEBUG
++#endif
++
++/*-----------------------------------------------------------------------
++ * User configurable settings:
++ * Mandatory settings:
++ * CONFIG_IPADDR_LS - the IP address of the LinkStation
++ * CONFIG_SERVERIP_LS - the address of the server for NFS/TFTP/DHCP/BOOTP
++ * Optional settins:
++ * CONFIG_NCIP_LS - the adress of the computer running net console
++ * if not configured, it will be set to
++ * CONFIG_SERVERIP_LS
++ */
++
++#define CONFIG_IPADDR_LS 192.168.11.150
++#define CONFIG_SERVERIP_LS 192.168.11.149
++
++#if !defined(CONFIG_IPADDR_LS) || !defined(CONFIG_SERVERIP_LS)
++#error Both CONFIG_IPADDR_LS and CONFIG_SERVERIP_LS must be defined
++#endif
++
++#if !defined(CONFIG_NCIP_LS)
++#define CONFIG_NCIP_LS CONFIG_SERVERIP_LS
++#endif
++
++/*----------------------------------------------------------------------
++ * DO NOT CHANGE ANYTHING BELOW, UNLESS YOU KNOW WHAT YOU ARE DOING
++ *---------------------------------------------------------------------*/
++
++#define CONFIG_MPC8245 1
++#define CONFIG_LINKSTATION 1
++
++/*---------------------------------------
++ * Supported models
++ *
++ * LinkStation HDLAN /KuroBox Standard (CONFIG_HLAN)
++ * LinkStation old model (CONFIG_LAN) - totally untested
++ * LinkStation HGLAN / KuroBox HG (CONFIG_HGLAN)
++ *
++ * Models not supported yet
++ * TeraStatin (CONFIG_HTGL)
++ */
++
++#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
++#define CONFIG_IDENT_STRING " LinkStation / KuroBox"
++#elif defined(CONFIG_HGLAN)
++#define CONFIG_IDENT_STRING " LinkStation HG / KuroBox HG"
++#elif defined(CONFIG_HTGL)
++#define CONFIG_IDENT_STRING " TeraStation"
++#else
++#error No LinkStation model defined
++#endif
++
++#define CONFIG_BOOTDELAY 10
++#define CONFIG_ZERO_BOOTDELAY_CHECK
++#undef CONFIG_BOOT_RETRY_TIME
++
++#define CONFIG_AUTOBOOT_KEYED
++#define CONFIG_AUTOBOOT_PROMPT "Boot in %02d seconds ('s' to stop)..."
++#define CONFIG_AUTOBOOT_STOP_STR "s"
++
++#define CONFIG_COMMANDS (CFG_CMD_BDI | \
++ CFG_CMD_LOADS | \
++ CFG_CMD_LOADB | \
++ CFG_CMD_FLASH | \
++ CFG_CMD_MEMORY | \
++ CFG_CMD_NET | \
++ CFG_CMD_ENV | \
++ CFG_CMD_IDE | \
++ CFG_CMD_PCI | \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_CONSOLE | \
++ CFG_CMD_RUN | \
++ CFG_CMD_ECHO | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_PING | \
++ CFG_CMD_NFS | \
++ CFG_CMD_EXT2 )
++#define CONFIG_BOOTP_MASK CONFIG_BOOTP_ALL
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "=> " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_MAXARGS 16 /* Max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++#define CFG_LOAD_ADDR 0x00800000 /* Default load address: 8 MB */
++
++//#define CONFIG_BOOTCOMMAND "run nfsboot"
++#define CONFIG_BOOTCOMMAND "run bootcmd1"
++#define CONFIG_BOOTARGS "root=/dev/hda1"
++#define CONFIG_NFSBOOTCOMMAND "bootp;run nfsargs;bootm"
++
++#define CFG_CONSOLE_IS_IN_ENV
++
++#define XMK_STR(x) #x
++#define MK_STR(x) XMK_STR(x)
++
++#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
++#define UBFILE "share/u-boot/u-boot-hd.flash.bin"
++#elif defined(CONFIG_HGLAN)
++#define UBFILE "share/u-boot/u-boot-hg.flash.bin"
++#elif defined(CONFIG_HTGL)
++#define UBFILE "share/u-boot/u-boot-ht.flash.bin"
++#else
++#error No LinkStation model defined
++#endif
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "autoload=no\0" \
++ "stdin=nc\0" \
++ "stdout=nc\0" \
++ "stderr=nc\0" \
++ "ipaddr="MK_STR(CONFIG_IPADDR_LS)"\0" \
++ "netmask=255.255.255.0\0" \
++ "serverip="MK_STR(CONFIG_SERVERIP_LS)"\0" \
++ "ncip="MK_STR(CONFIG_NCIP_LS)"\0" \
++ "netretry=no\0" \
++ "nc=setenv stdin nc;setenv stdout nc;setenv stderr nc\0" \
++ "ser=setenv stdin serial;setenv stdout serial;setenv stderr serial\0" \
++ "ldaddr=800000\0" \
++ "hdpart=0:1\0" \
++ "hdfile=boot/vmlinux.UBoot\0" \
++ "hdload=echo Loading ${hdpart}:${hdfile};ext2load ide ${hdpart} ${ldaddr} ${hdfile}\0" \
++ "boothd=setenv bootargs root=/dev/hda1;bootm ${ldaddr}\0" \
++ "hdboot=run hdload boothd\0" \
++ "flboot=setenv bootargs root=/dev/hda1;bootm ffc00000\0" \
++ "emboot=setenv bootargs root=/dev/ram0;bootm ffc00000\0" \
++ "nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} " \
++ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off\0" \
++ "bootretry=30\0" \
++ "bootcmd1=run hdboot;run flboot\0" \
++ "bootcmd2=run flboot\0" \
++ "bootcmd3=run emboot\0" \
++ "writeng=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4e474e47 1;cp.b 800000 fff70000 4\0" \
++ "writeok=protect off fff70000 fff7ffff;era fff70000 fff7ffff;mw.l 800000 4f4b4f4b 1;cp.b 800000 fff70000 4\0" \
++ "ubpart=0:3\0" \
++ "ubfile="UBFILE"\0" \
++ "ubload=echo Loading ${ubpart}:${ubfile};ext2load ide ${ubpart} ${ldaddr} ${ubfile}\0" \
++ "ubsaddr=fff00000\0" \
++ "ubeaddr=fff2ffff\0" \
++ "ubflash=protect off ${ubsaddr} ${ubeaddr};era ${ubsaddr} ${ubeaddr};cp.b ${ldaddr} ${ubsaddr} ${filesize};cmp.b ${ldaddr} ${ubsaddr} ${filesize}\0" \
++ "upgrade=run ubload ubflash\0"
++
++/*-----------------------------------------------------------------------
++ * PCI stuff
++ */
++#define CONFIG_PCI
++#undef CONFIG_PCI_PNP
++#define CONFIG_PCI_SCAN_SHOW
++
++#ifndef CONFIG_PCI_PNP
++/* Keep the following defines in sync with the BAT mappings */
++
++#define PCI_ETH_IOADDR 0xbfff00
++#define PCI_ETH_MEMADDR 0xbffffc00
++#define PCI_IDE_IOADDR 0xbffed0
++#define PCI_IDE_MEMADDR 0xbffffb00
++#define PCI_USB0_IOADDR 0
++#define PCI_USB0_MEMADDR 0xbfffe000
++#define PCI_USB1_IOADDR 0
++#define PCI_USB1_MEMADDR 0xbfffd000
++#define PCI_USB2_IOADDR 0
++#define PCI_USB2_MEMADDR 0xbfffcf00
++
++#endif
++
++/*-----------------------------------------------------------------------
++ * Ethernet stuff
++ */
++#define CONFIG_NET_MULTI
++
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN)
++#define CONFIG_TULIP
++#define CONFIG_TULIP_USE_IO
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++#define CONFIG_RTL8169
++#endif
++
++#define CONFIG_NET_RETRY_COUNT 5
++
++#define CONFIG_NETCONSOLE
++
++/*-----------------------------------------------------------------------
++ * Start addresses for the final memory configuration
++ * (Set up by the startup code)
++ * Please note that CFG_SDRAM_BASE _must_ start at 0
++ */
++#define CFG_SDRAM_BASE 0x00000000
++
++#define CFG_FLASH_BASE 0xFFC00000
++#define CFG_MONITOR_BASE TEXT_BASE
++
++#define CFG_RESET_ADDRESS 0xFFF00100
++#define CFG_EUMB_ADDR 0x80000000
++#define CFG_PCI_MEM_ADDR 0xB0000000
++#define CFG_MISC_REGION_ADDR 0xFE000000
++
++#define CFG_MONITOR_LEN 0x00040000 /* 256 kB */
++#define CFG_MALLOC_LEN (512 << 10) /* Reserve some kB for malloc() */
++
++#define CFG_MEMTEST_START 0x00100000 /* memtest works on */
++#define CFG_MEMTEST_END 0x00800000 /* 1M ... 8M in DRAM */
++
++/* Maximum amount of RAM */
++#if defined(CONFIG_HLAN) || defined(CONFIG_LAN)
++#define CFG_MAX_RAM_SIZE 0x04000000 /* 64MB of SDRAM */
++#elif defined(CONFIG_HGLAN) || defined(CONFIG_HTGL)
++#define CFG_MAX_RAM_SIZE 0x08000000 /* 128MB of SDRAM */
++#else
++#error Unknown LinkStation type
++#endif
++
++/*-----------------------------------------------------------------------
++ * Change TEXT_BASE in bord/linkstation/config.mk to get a RAM build
++ *
++ * RAM based builds are for testing purposes. A Linux module, uloader.o,
++ * exists to load U-Boot and pass control to it
++ *
++ * Always do "make clean" after changing the build type
++ */
++#if CFG_MONITOR_BASE < CFG_FLASH_BASE
++#define CFG_RAMBOOT
++#endif
++
++/*-----------------------------------------------------------------------
++ * Definitions for initial stack pointer and data area
++ */
++#if 1 /* RAM is available when the first C function is called */
++#define CFG_INIT_RAM_ADDR (CFG_SDRAM_BASE + CFG_MAX_RAM_SIZE - 0x1000)
++#else
++#define CFG_INIT_RAM_ADDR 0x40000000
++#endif
++#define CFG_INIT_RAM_END 0x1000
++#define CFG_GBL_DATA_SIZE 128
++#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
++
++/*----------------------------------------------------------------------
++ * Serial configuration
++ */
++#define CONFIG_CONS_INDEX 1
++#define CONFIG_BAUDRATE 57600
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++#define CFG_NS16550
++#define CFG_NS16550_SERIAL
++
++#define CFG_NS16550_REG_SIZE 1
++
++#define CFG_NS16550_CLK get_bus_freq(0)
++
++#define CFG_NS16550_COM1 (CFG_EUMB_ADDR + 0x4600) /* Console port */
++#define CFG_NS16550_COM2 (CFG_EUMB_ADDR + 0x4500) /* AVR port */
++
++/*
++ * Low Level Configuration Settings
++ * (address mappings, register initial values, etc.)
++ * You should know what you are doing if you make changes here.
++ * For the detail description refer to the MPC8245 user's manual.
++ *
++ * Unless indicated otherwise, the values are
++ * taken from the orignal Linkstation boot code
++ *
++ * Most of the low level configuration setttings are normally used
++ * in cpu/mpc824x/cpu_init.c which is NOT used by this implementation.
++ * Low level initialisation is done in board/linkstation/early_init.S
++ * The values below are included for reference purpose only
++ */
++
++/* FIXME: 32.768 MHz is the crystal frequency but */
++/* the real frequency is lower by about 0.75% */
++#define CONFIG_SYS_CLK_FREQ 32768000
++#define CFG_HZ 1000
++
++/* Bit-field values for MCCR1. */
++#define CFG_ROMNAL 0
++#define CFG_ROMFAL 11
++
++#define CFG_BANK0_ROW 2 /* Only bank 0 used: 13 x n x 4 */
++#define CFG_BANK1_ROW 0
++#define CFG_BANK2_ROW 0
++#define CFG_BANK3_ROW 0
++#define CFG_BANK4_ROW 0
++#define CFG_BANK5_ROW 0
++#define CFG_BANK6_ROW 0
++#define CFG_BANK7_ROW 0
++
++/* Bit-field values for MCCR2. */
++#define CFG_TSWAIT 0
++#define CFG_REFINT 1400
++
++/* Burst To Precharge. Bits of this value go to MCCR3 and MCCR4. */
++#define CFG_BSTOPRE 121
++
++/* Bit-field values for MCCR3. */
++#define CFG_REFREC 7
++
++/* Bit-field values for MCCR4. */
++#define CFG_PRETOACT 2
++#define CFG_ACTTOPRE 5 /* Original value was 2 */
++#define CFG_ACTORW 2
++#define CFG_SDMODE_CAS_LAT 2 /* For 100MHz bus. Use 3 for 133MHz */
++#define CFG_REGISTERD_TYPE_BUFFER 1
++#define CFG_EXTROM 1 /* Original setting but there is no EXTROM */
++#define CFG_REGDIMM 0
++#define CFG_DBUS_SIZE2 1
++#define CFG_SDMODE_WRAP 0
++
++#define CFG_PGMAX 0x32 /* All boards use this setting. Original 0x92 */
++#define CFG_SDRAM_DSCD 0x30
++
++/* Memory bank settings.
++ * Only bits 20-29 are actually used from these vales to set the
++ * start/end addresses. The upper two bits will always be 0, and the lower
++ * 20 bits will be 0x00000 for a start address, or 0xfffff for an end
++ * address. Refer to the MPC8240 book.
++ */
++
++#define CFG_BANK0_START 0x00000000
++#define CFG_BANK0_END (CFG_MAX_RAM_SIZE - 1)
++#define CFG_BANK0_ENABLE 1
++#define CFG_BANK1_START 0x3ff00000
++#define CFG_BANK1_END 0x3fffffff
++#define CFG_BANK1_ENABLE 0
++#define CFG_BANK2_START 0x3ff00000
++#define CFG_BANK2_END 0x3fffffff
++#define CFG_BANK2_ENABLE 0
++#define CFG_BANK3_START 0x3ff00000
++#define CFG_BANK3_END 0x3fffffff
++#define CFG_BANK3_ENABLE 0
++#define CFG_BANK4_START 0x3ff00000
++#define CFG_BANK4_END 0x3fffffff
++#define CFG_BANK4_ENABLE 0
++#define CFG_BANK5_START 0x3ff00000
++#define CFG_BANK5_END 0x3fffffff
++#define CFG_BANK5_ENABLE 0
++#define CFG_BANK6_START 0x3ff00000
++#define CFG_BANK6_END 0x3fffffff
++#define CFG_BANK6_ENABLE 0
++#define CFG_BANK7_START 0x3ff00000
++#define CFG_BANK7_END 0x3fffffff
++#define CFG_BANK7_ENABLE 0
++
++#define CFG_ODCR 0x95 /* 0x15 or 0x95 ? */
++
++/*----------------------------------------------------------------------
++ * Initial BAT mappings
++ */
++
++/* NOTES:
++ * 1) GUARDED and WRITETHROUGH not allowed in IBATS
++ * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT
++ */
++
++/* SDRAM */
++#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
++#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_128M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT0L CFG_IBAT0L
++#define CFG_DBAT0U CFG_IBAT0U
++
++/* EUMB: 1MB of address space */
++#define CFG_IBAT1L (CFG_EUMB_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT1U (CFG_EUMB_ADDR | BATU_BL_1M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT1L (CFG_IBAT1L | BATL_GUARDEDSTORAGE)
++#define CFG_DBAT1U CFG_IBAT1U
++
++/* PCI Mem: 256MB of address space */
++#define CFG_IBAT2L (CFG_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT2U (CFG_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT2L (CFG_IBAT2L | BATL_GUARDEDSTORAGE)
++#define CFG_DBAT2U CFG_IBAT2U
++
++/* PCI and local ROM/Flash: last 32MB of address space */
++#define CFG_IBAT3L (CFG_MISC_REGION_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT3U (CFG_MISC_REGION_ADDR | BATU_BL_32M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT3L (CFG_IBAT3L | BATL_GUARDEDSTORAGE)
++#define CFG_DBAT3U CFG_IBAT3U
++
++/*
++ * For booting Linux, the board info and command line data
++ * have to be in the first 8 MB of memory, since this is
++ * the maximum mapped by the Linux kernel during initialization.
++ *
++ * FIXME: This doesn't appear to be true for the newer kernels
++ * which map more that 8 MB
++ */
++#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
++
++/*-----------------------------------------------------------------------
++ * FLASH organization
++ */
++#undef CFG_FLASH_PROTECTION
++#define CFG_MAX_FLASH_BANKS 1 /* Max number of flash banks */
++#define CFG_MAX_FLASH_SECT 72 /* Max number of sectors per flash */
++
++#define CFG_FLASH_ERASE_TOUT 12000
++#define CFG_FLASH_WRITE_TOUT 1000
++
++
++#define CFG_ENV_IS_IN_FLASH
++/*
++ * The original LinkStation flash organisation uses
++ * 448 kB (0xFFF00000 - 0xFFF6FFFF) for the boot loader
++ * We use the last sector of this area to store the environment
++ * which leaves max. 384 kB for the U-Boot itself
++ */
++#define CFG_ENV_ADDR 0xFFF60000
++#define CFG_ENV_SIZE 0x00010000
++#define CFG_ENV_SECT_SIZE 0x00010000
++
++/*-----------------------------------------------------------------------
++ * Cache Configuration
++ */
++#define CFG_CACHELINE_SIZE 32
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
++#endif
++
++/*-----------------------------------------------------------------------
++ * IDE/ATA definitions
++ */
++#undef CONFIG_IDE_LED /* No IDE LED */
++#define CONFIG_IDE_RESET /* no reset for ide supported */
++#define CONFIG_IDE_PREINIT /* check for units */
++#define CONFIG_LBA48 /* 48 bit LBA supported */
++
++#if defined(CONFIG_LAN) || defined(CONFIG_HLAN) || defined(CONFIG_HGLAN)
++#define CFG_IDE_MAXBUS 1 /* Scan only 1 IDE bus */
++#define CFG_IDE_MAXDEVICE 1 /* Only 1 drive per IDE bus */
++#elif defined(CONFIG_HGTL)
++#define CFG_IDE_MAXBUS 2 /* Max. 2 IDE busses */
++#define CFG_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */
++#else
++#error Config IDE: Unknown LinkStation type
++#endif
++
++#define CFG_ATA_BASE_ADDR 0
++
++#define CFG_ATA_DATA_OFFSET 0 /* Offset for data I/O */
++#define CFG_ATA_REG_OFFSET 0 /* Offset for normal registers */
++#define CFG_ATA_ALT_OFFSET 0 /* Offset for alternate registers */
++
++/*-----------------------------------------------------------------------
++ * Partitions and file system
++ */
++#define CONFIG_DOS_PARTITION
++
++/*-----------------------------------------------------------------------
++ * Internal Definitions
++ *
++ * Boot Flags
++ */
++#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
++#define BOOTFLAG_WARM 0x02 /* Software reboot */
++
++#endif /* __CONFIG_H */
++
++/* vim: set ts=4: */
+diff -urN u-boot-86xx/include/devices.h u-boot-86xx-kuro_clean/include/devices.h
+--- u-boot-86xx/include/devices.h 2006-10-13 00:27:18.000000000 +0200
++++ u-boot-86xx-kuro_clean/include/devices.h 2006-11-06 22:05:38.000000000 +0100
+@@ -93,6 +93,7 @@
+ int devices_init (void);
+ int devices_done (void);
+ int device_deregister(char *devname);
++int console_setfile (int file, device_t * dev);
+ #ifdef CONFIG_LCD
+ int drv_lcd_init (void);
+ #endif
+@@ -111,5 +112,8 @@
+ #ifdef CONFIG_NETCONSOLE
+ int drv_nc_init (void);
+ #endif
++#if defined(CFG_CONSOLE_IS_IN_ENV) || defined(CONFIG_SPLASH_SCREEN) || defined(CONFIG_SILENT_CONSOLE)
++device_t *search_device (int flags, char *name);
++#endif
+
+ #endif /* _DEVICES_H_ */
+diff -urN u-boot-86xx/include/flash.h u-boot-86xx-kuro_clean/include/flash.h
+--- u-boot-86xx/include/flash.h 2006-10-13 00:27:18.000000000 +0200
++++ u-boot-86xx-kuro_clean/include/flash.h 2006-11-06 22:05:38.000000000 +0100
+@@ -215,6 +215,8 @@
+
+ #define AMD_ID_LV320B_2 0x221A221A /* 2d ID word for AM29LV320MB at 0x38 */
+ #define AMD_ID_LV320B_3 0x22002200 /* 3d ID word for AM29LV320MB at 0x3c */
++#define AMD_ID_LV320T_2 0x221A221A /* 2d ID word for AM29LV320MT at 0x38 */
++#define AMD_ID_LV320T_3 0x22012201 /* 3d ID word for AM29LV320MT at 0x3c */
+
+ #define AMD_ID_LV640U 0x22D722D7 /* 29LV640U ID (64 M, uniform sectors) */
+ #define AMD_ID_LV650U 0x22D722D7 /* 29LV650U ID (64 M, uniform sectors) */
+@@ -246,6 +248,8 @@
+ #define STM_ID_x800AB 0x005B005B /* M29W800AB ID (8M = 512K x 16 ) */
+ #define STM_ID_29W320DT 0x22CA22CA /* M29W320DT ID (32 M, top boot sector) */
+ #define STM_ID_29W320DB 0x22CB22CB /* M29W320DB ID (32 M, bottom boot sect) */
++#define STM_ID_29W324DT 0x225C225C /* M29W324DT ID (32 M, top boot sector) */
++#define STM_ID_29W324DB 0x225D225D /* M29W324DB ID (32 M, bottom boot sect) */
+ #define STM_ID_29W040B 0x00E300E3 /* M29W040B ID (4M = 512K x 8) */
+ #define FLASH_PSD4256GV 0x00E9 /* PSD4256 Flash and CPLD combination */
+
+@@ -353,6 +357,8 @@
+ #define FLASH_STM800AB 0x0051 /* STM M29WF800AB ( 8M = 512K x 16 ) */
+ #define FLASH_STMW320DT 0x0052 /* STM M29W320DT (32 M, top boot sector) */
+ #define FLASH_STMW320DB 0x0053 /* STM M29W320DB (32 M, bottom boot sect)*/
++#define FLASH_STMW324DT 0x005C /* STM M29W320DT (32 M, top boot sector) */
++#define FLASH_STMW324DB 0x005D /* STM M29W320DB (32 M, bottom boot sect)*/
+ #define FLASH_STM320DB 0x00CB /* STM M29W320DB (4M = 64K x 64, bottom)*/
+ #define FLASH_STM800DT 0x00D7 /* STM M29W800DT (1M = 64K x 16, top) */
+ #define FLASH_STM800DB 0x005B /* STM M29W800DB (1M = 64K x 16, bottom)*/
+diff -urN u-boot-86xx/include/pci_ids.h u-boot-86xx-kuro_clean/include/pci_ids.h
+--- u-boot-86xx/include/pci_ids.h 2006-10-13 00:27:18.000000000 +0200
++++ u-boot-86xx-kuro_clean/include/pci_ids.h 2006-11-06 22:05:38.000000000 +0100
+@@ -1473,6 +1473,8 @@
+ #define PCI_DEVICE_ID_ITE_IT8172G_AUDIO 0x0801
+ #define PCI_DEVICE_ID_ITE_IT8181 0x8181
+ #define PCI_DEVICE_ID_ITE_8872 0x8872
++#define PCI_DEVICE_ID_ITE_8211 0x8211
++#define PCI_DEVICE_ID_ITE_8212 0x8212
+
+ #define PCI_DEVICE_ID_ITE_IT8330G_0 0xe886
+
+diff -urN u-boot-86xx/lib_ppc/board.c u-boot-86xx-kuro_clean/lib_ppc/board.c
+--- u-boot-86xx/lib_ppc/board.c 2006-10-13 00:27:19.000000000 +0200
++++ u-boot-86xx-kuro_clean/lib_ppc/board.c 2006-11-06 22:05:38.000000000 +0100
+@@ -439,6 +439,10 @@
+ */
+ addr -= len;
+ addr &= ~(4096 - 1);
++#ifdef CONFIG_LINKSTATION
++ /* U-Boot code at 1 MB boundary to make it easier to debug */
++ addr &= ~(1048576 - 1);
++#endif
+ #ifdef CONFIG_E500
+ /* round down to next 64 kB limit so that IVPR stays aligned */
+ addr &= ~(65536 - 1);
+@@ -895,8 +899,10 @@
+ /* Initialize the jump table for applications */
+ jumptable_init ();
+
++#if !defined(CONFIG_LINKSTATION)
+ /* Initialize the console (after the relocation and devices init) */
+ console_init_r ();
++#endif
+
+ #if defined(CONFIG_CCM) || \
+ defined(CONFIG_COGENT) || \
+@@ -949,6 +955,7 @@
+ if ((s = getenv ("loadaddr")) != NULL) {
+ load_addr = simple_strtoul (s, NULL, 16);
+ }
++ debug("load_addr: %08lx\n", load_addr);
+ #if (CONFIG_COMMANDS & CFG_CMD_NET)
+ if ((s = getenv ("bootfile")) != NULL) {
+ copy_filename (BootFile, s, sizeof (BootFile));
+@@ -998,6 +1005,11 @@
+ reset_phy ();
+ #endif
+
++#if defined(CONFIG_LINKSTATION)
++ /* The LinkStation uses the net console by default */
++ console_init_r ();
++#endif
++
+ #ifdef CONFIG_POST
+ post_run (NULL, POST_RAM | post_bootmode_get(0));
+ #endif
+diff -urN u-boot-86xx/lib_ppc/interrupts.c u-boot-86xx-kuro_clean/lib_ppc/interrupts.c
+--- u-boot-86xx/lib_ppc/interrupts.c 2006-10-13 00:27:19.000000000 +0200
++++ u-boot-86xx-kuro_clean/lib_ppc/interrupts.c 2006-11-06 22:05:38.000000000 +0100
+@@ -40,7 +40,7 @@
+ #endif
+
+ extern int interrupt_init_cpu (unsigned *);
+-extern void timer_interrupt_cpu (struct pt_regs *);
++extern void timer_interrupt_cpu (struct pt_regs *, ulong timestamp);
+
+ static unsigned decrementer_count; /* count value for 1e6/HZ microseconds */
+
+@@ -111,7 +111,7 @@
+ void timer_interrupt (struct pt_regs *regs)
+ {
+ /* call cpu specific function from $(CPU)/interrupts.c */
+- timer_interrupt_cpu (regs);
++ timer_interrupt_cpu (regs, timestamp);
+
+ /* Restore Decrementer Count */
+ set_dec (decrementer_count);
+diff -urN u-boot-86xx/net/net.c u-boot-86xx-kuro_clean/net/net.c
+--- u-boot-86xx/net/net.c 2006-10-13 00:27:19.000000000 +0200
++++ u-boot-86xx-kuro_clean/net/net.c 2006-11-06 22:05:38.000000000 +0100
+@@ -641,6 +641,11 @@
+ {
+ uchar *pkt;
+
++#ifdef ET_DEBUG
++ printf("%s dest: %08lx, dport: %d, sport: %d, len: %d\n",
++ __FUNCTION__, dest, dport, sport, len);
++#endif
++
+ /* convert to new style broadcast */
+ if (dest == 0)
+ dest = 0xFFFFFFFF;
+@@ -758,6 +763,8 @@
+ IPaddr_t tmp;
+ volatile IP_t *ip = (volatile IP_t *)pkt;
+
++ if (!pkt && !dest && !src && !len) /* ARP packet */
++ return;
+ tmp = NetReadIP((void *)&ip->ip_src);
+ if (tmp != NetPingIP)
+ return;
+@@ -1146,7 +1153,7 @@
+ ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
+
+ #ifdef ET_DEBUG
+- printf("packet received\n");
++ printf("%s: packet received\n", __FUNCTION__);
+ #endif
+
+ NetRxPkt = inpkt;
+@@ -1171,10 +1178,6 @@
+
+ x = ntohs(et->et_protlen);
+
+-#ifdef ET_DEBUG
+- printf("packet received\n");
+-#endif
+-
+ if (x < 1514) {
+ /*
+ * Got a 802 packet. Check the other protocol field.
+@@ -1305,13 +1308,16 @@
+ /* matched waiting packet's address */
+ if (tmp == NetArpWaitReplyIP) {
+ #ifdef ET_DEBUG
+- puts ("Got it\n");
++ puts ("ARP reply IP matches original pkt IP\n");
+ #endif
+ /* save address for later use */
+ memcpy(NetArpWaitPacketMAC, &arp->ar_data[0], 6);
+
+ #ifdef CONFIG_NETCONSOLE
+- (*packetHandler)(0,0,0,0);
++ if (packetHandler)
++ (*packetHandler)(0,0,0,0);
++ else
++ printf("ARP: NULL packetHandler\n");
+ #endif
+ /* modify header, and transmit it */
+ memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6);
+@@ -1354,7 +1360,10 @@
+ NetCopyIP(&NetServerIP, &arp->ar_data[ 6]);
+ memcpy (NetServerEther, &arp->ar_data[ 0], 6);
+
+- (*packetHandler)(0,0,0,0);
++ if (packetHandler)
++ (*packetHandler)(0,0,0,0);
++ else
++ printf("ARP: NULL packetHandler\n");
+ }
+ break;
+
+diff -urN u-boot-86xx/net/nfs.c u-boot-86xx-kuro_clean/net/nfs.c
+--- u-boot-86xx/net/nfs.c 2006-10-13 00:27:19.000000000 +0200
++++ u-boot-86xx-kuro_clean/net/nfs.c 2006-11-06 22:05:38.000000000 +0100
+@@ -29,7 +29,7 @@
+ #include "nfs.h"
+ #include "bootp.h"
+
+-/*#define NFS_DEBUG*/
++#undef NFS_DEBUG
+
+ #if ((CONFIG_COMMANDS & CFG_CMD_NET) && (CONFIG_COMMANDS & CFG_CMD_NFS))
+
+@@ -180,6 +180,9 @@
+ int sport;
+
+ id = ++rpc_id;
++#ifdef NFS_DEBUG
++ printf ("%s xid: %d, rpc_id: %d\n", __FUNCTION__, id, rpc_id);
++#endif
+ pkt.u.call.id = htonl(id);
+ pkt.u.call.type = htonl(MSG_CALL);
+ pkt.u.call.rpcvers = htonl(2); /* use RPC version 2 */
+@@ -213,6 +216,10 @@
+ {
+ uint32_t data[16];
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ data[0] = 0; data[1] = 0; /* auth credential */
+ data[2] = 0; data[3] = 0; /* auth verifier */
+ data[4] = htonl(prog);
+@@ -234,6 +241,10 @@
+ int len;
+ int pathlen;
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ pathlen = strlen (path);
+
+ p = &(data[0]);
+@@ -259,6 +270,10 @@
+ uint32_t *p;
+ int len;
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ if ((NfsSrvMountPort == -1) || (!fs_mounted)) {
+ /* Nothing mounted, nothing to umount */
+ return;
+@@ -286,6 +301,10 @@
+ uint32_t *p;
+ int len;
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ p = &(data[0]);
+ p = (uint32_t *)rpc_add_credentials ((long *)p);
+
+@@ -308,6 +327,10 @@
+ int len;
+ int fnamelen;
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ fnamelen = strlen (fname);
+
+ p = &(data[0]);
+@@ -335,6 +358,10 @@
+ uint32_t *p;
+ int len;
+
++#ifdef NFS_DEBUG
++ printf ("%s\n", __FUNCTION__);
++#endif
++
+ p = &(data[0]);
+ p = (uint32_t *)rpc_add_credentials ((long *)p);
+
+@@ -405,8 +432,13 @@
+
+ if (rpc_pkt.u.reply.rstatus ||
+ rpc_pkt.u.reply.verifier ||
+- rpc_pkt.u.reply.astatus ||
+ rpc_pkt.u.reply.astatus) {
++#ifdef NFS_DEBUG
++ printf ("rstatus: %d\n", rpc_pkt.u.reply.rstatus);
++ printf ("verifier: %08lx\n", rpc_pkt.u.reply.verifier);
++ printf ("v2: %08lx\n", rpc_pkt.u.reply.v2);
++ printf ("astatus: %d\n", rpc_pkt.u.reply.astatus);
++#endif
+ return -1;
+ }
+
+@@ -433,13 +465,24 @@
+
+ memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+
+- if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
++ if (ntohl(rpc_pkt.u.reply.id) != rpc_id) {
++#ifdef NFS_DEBUG
++ printf ("rpc_id error. expected: %d, got: %d\n", \
++ rpc_id, ntohl(rpc_pkt.u.reply.id));
++#endif
+ return -1;
++ }
+
+ if (rpc_pkt.u.reply.rstatus ||
+ rpc_pkt.u.reply.verifier ||
+ rpc_pkt.u.reply.astatus ||
+ rpc_pkt.u.reply.data[0]) {
++#ifdef NFS_DEBUG
++ printf ("rstatus: %d\n", rpc_pkt.u.reply.rstatus);
++ printf ("verifier: %08lx\n", rpc_pkt.u.reply.verifier);
++ printf ("astatus: %d\n", rpc_pkt.u.reply.astatus);
++ printf ("data[0]: %08lx\n", rpc_pkt.u.reply.data[0]);
++#endif
+ return -1;
+ }
+
+@@ -544,7 +587,7 @@
+ struct rpc_t rpc_pkt;
+ int rlen;
+
+-#ifdef NFS_DEBUG_nop
++#ifdef NFS_DEBUG
+ printf ("%s\n", __FUNCTION__);
+ #endif
+
+@@ -601,6 +644,8 @@
+ printf ("%s\n", __FUNCTION__);
+ #endif
+
++ if (!pkt && !dest && !src && !len) /* ARP packet */
++ return;
+ if (dest != NfsOurPort) return;
+
+ switch (NfsState) {
+diff -urN u-boot-86xx/tools/Makefile u-boot-86xx-kuro_clean/tools/Makefile
+--- u-boot-86xx/tools/Makefile 2006-10-13 00:27:19.000000000 +0200
++++ u-boot-86xx-kuro_clean/tools/Makefile 2006-11-06 22:18:42.000000000 +0100
+@@ -21,10 +21,10 @@
+ # MA 02111-1307 USA
+ #
+
+-BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
++BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX) ncb$(SFX)
+
+ OBJ_LINKS = environment.o crc32.o
+-OBJ_FILES = img2srec.o mkimage.o envcrc.o gen_eth_addr.o bmp_logo.o
++OBJ_FILES = img2srec.o mkimage.o envcrc.o gen_eth_addr.o bmp_logo.o ncb.o
+
+ ifeq ($(ARCH),mips)
+ BIN_FILES += inca-swap-bytes$(SFX)
diff --git a/packages/uboot/u-boot-1.2.0/uboot-qnap.diff b/packages/uboot/u-boot-1.2.0/uboot-qnap.diff
new file mode 100644
index 0000000000..2b2a17da7f
--- /dev/null
+++ b/packages/uboot/u-boot-1.2.0/uboot-qnap.diff
@@ -0,0 +1,1100 @@
+--- u-boot-1.2.0.vanilla/board/qnap/config.mk 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/config.mk 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,35 @@
++#
++# (C) Copyright 2000, 2001
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++# Valid values for TEXT_BASE are:
++#
++# Standard configuration
++# 0xFFF00000 boot from flash
++#
++# Standard configuration
++# 0xFFE60000 chain boot from flash
++#
++
++
++TEXT_BASE = 0xFFE60000
++
++PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
+--- u-boot-1.2.0.vanilla/board/qnap/ide.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/ide.c 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,67 @@
++/*
++ * (C) Copyright 2000
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++ #include <common.h>
++
++#ifdef CFG_CMD_IDE
++#include <ata.h>
++#include <ide.h>
++#include <pci.h>
++
++extern ulong ide_bus_offset[CFG_IDE_MAXBUS];
++extern struct pci_controller hose;
++
++int ide_preinit (void)
++{
++ int status;
++ pci_dev_t devbusfn;
++ int l;
++
++ status = 1;
++ for (l = 0; l < CFG_IDE_MAXBUS; l++) {
++ ide_bus_offset[l] = -ATA_STATUS;
++ }
++ devbusfn = pci_find_device (0x1095, 0x3512, 0);
++
++ if (devbusfn != -1) {
++
++ status = 0;
++
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0,
++ (u32 *) &ide_bus_offset[0]);
++ ide_bus_offset[0] &= 0xfffffffe;
++ ide_bus_offset[0] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[0] & 0xfffffffe,
++ PCI_REGION_IO);
++
++ pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_2,
++ (u32 *) &ide_bus_offset[1]);
++ ide_bus_offset[1] &= 0xfffffffe;
++ ide_bus_offset[1] = pci_hose_bus_to_phys(&hose,
++ ide_bus_offset[1] & 0xfffffffe,
++ PCI_REGION_IO);
++ }
++ return (status);
++}
++
++#endif /* of CONFIG_CMDS_IDE */
+--- u-boot-1.2.0.vanilla/board/qnap/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/Makefile 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,40 @@
++#
++# (C) Copyright 2000
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS = $(BOARD).o ide.o
++
++$(LIB): .depend $(OBJS)
++ $(AR) crv $@ $(OBJS)
++
++#########################################################################
++
++.depend: Makefile $(OBJS:.o=.c)
++ $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@
++
++sinclude .depend
++
++#########################################################################
+--- u-boot-1.2.0.vanilla/board/qnap/qnap.c 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/qnap.c 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,126 @@
++/*
++ * Copyright (C) 2006 Andrew Luyten <u-boot@luyten.org.uk>
++ *
++ * Copyright (C) 2000
++ * Rob Taylor, Flying Pig Systems. robt@flyingpig.com.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++
++#include <common.h>
++#include <mpc824x.h>
++#include <pci.h>
++
++int checkboard (void)
++{
++ ulong busfreq = get_bus_freq(0);
++ char buf[32];
++
++ printf("Board: QNAP TS-101/TS-201 local bus at %s MHz\n", strmhz(buf, busfreq));
++ return 0;
++}
++
++
++long int initdram (int board_type)
++{
++ long size;
++ long new_bank0_end;
++ long mear1;
++ long emear1;
++
++ size = get_ram_size(CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE);
++
++ new_bank0_end = size - 1;
++ mear1 = mpc824x_mpc107_getreg(MEAR1);
++ emear1 = mpc824x_mpc107_getreg(EMEAR1);
++ mear1 = (mear1 & 0xFFFFFF00) |
++ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
++ emear1 = (emear1 & 0xFFFFFF00) |
++ ((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
++ mpc824x_mpc107_setreg(MEAR1, mear1);
++ mpc824x_mpc107_setreg(EMEAR1, emear1);
++
++ return (size);
++}
++
++/*
++ * Initialize PCI Devices, report devices found.
++ */
++#ifndef CONFIG_PCI_PNP
++
++static struct pci_config_table pci_qnap_config_table[] = {
++ /* vendor, device, class */
++ /* bus, dev, func */
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0f, 0, /* RTL8110SC or Intel 82540EM */
++ /* Gigabit ethernet controller */
++ pci_cfgfunc_config_device, { PCI_ETH_IOADDR,
++ PCI_ETH_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0d, 0, /* SII3512 */
++ /* SATA controller */
++ pci_cfgfunc_config_device, { PCI_IDE_IOADDR,
++ PCI_IDE_MEMADDR,
++ PCI_COMMAND_IO |
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 0, /* D720101 USB controller, 1st USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB0_IOADDR,
++ PCI_USB0_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 1, /* D720101 USB controller, 2nd USB 1.1 */
++ pci_cfgfunc_config_device, { PCI_USB1_IOADDR,
++ PCI_USB1_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
++ PCI_ANY_ID, 0x0e, 2, /* D720101 USB controller, USB 2.0 */
++ pci_cfgfunc_config_device, { PCI_USB2_IOADDR,
++ PCI_USB2_MEMADDR,
++ PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER }},
++ { }
++};
++#endif
++
++struct pci_controller hose = {
++#ifndef CONFIG_PCI_PNP
++ config_table: pci_qnap_config_table,
++#endif
++};
++
++void pci_init_board(void)
++{
++ pci_mpc824x_init(&hose);
++
++ /* Reset USB 1.1 !/
++ out_le32(PCI_USB0_MEMADDR+8, 1);
++ out_le32(PCI_USB1_MEMADDR+8, 1);
++ */
++}
+--- u-boot-1.2.0.vanilla/board/qnap/README 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/README 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,10 @@
++*This port of U-Boot will run on a QNAP TS-101/TS-201 NAS*
++Andrew Luyten (u-boot@luyten.org.uk)
++
++Adapted from a Linkstation port by Mihai Georgian
++http://http://www.linuxnotincluded.org.uk/
++
++Adapted from Motorola Sandpoint 3 development system equipped with
++a Unity X4 PPMC card (MPC8240 CPU) only. It is a snapshot of work
++in progress and far from being completed.
++Thomas Koeller
+--- u-boot-1.2.0.vanilla/board/qnap/u-boot.lds 1970-01-01 01:00:00.000000000 +0100
++++ u-boot-1.2.0/board/qnap/u-boot.lds 2007-02-26 01:55:37.000000000 +0100
+@@ -0,0 +1,136 @@
++/*
++ * (C) Copyright 2001
++ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_ARCH(powerpc)
++SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
++/* Do we need any of these for elf?
++ __DYNAMIC = 0; */
++SECTIONS
++{
++ /* Read-only sections, merged into text segment: */
++ . = + SIZEOF_HEADERS;
++ .interp : { *(.interp) }
++ .hash : { *(.hash) }
++ .dynsym : { *(.dynsym) }
++ .dynstr : { *(.dynstr) }
++ .rel.text : { *(.rel.text) }
++ .rela.text : { *(.rela.text) }
++ .rel.data : { *(.rel.data) }
++ .rela.data : { *(.rela.data) }
++ .rel.rodata : { *(.rel.rodata) }
++ .rela.rodata : { *(.rela.rodata) }
++ .rel.got : { *(.rel.got) }
++ .rela.got : { *(.rela.got) }
++ .rel.ctors : { *(.rel.ctors) }
++ .rela.ctors : { *(.rela.ctors) }
++ .rel.dtors : { *(.rel.dtors) }
++ .rela.dtors : { *(.rela.dtors) }
++ .rel.bss : { *(.rel.bss) }
++ .rela.bss : { *(.rela.bss) }
++ .rel.plt : { *(.rel.plt) }
++ .rela.plt : { *(.rela.plt) }
++ .init : { *(.init) }
++ .plt : { *(.plt) }
++ .text :
++ {
++ cpu/mpc824x/start.o (.text)
++ lib_ppc/board.o (.text)
++ lib_ppc/ppcstring.o (.text)
++ lib_generic/vsprintf.o (.text)
++ lib_generic/crc32.o (.text)
++ lib_generic/zlib.o (.text)
++
++ . = DEFINED(env_offset) ? env_offset : .;
++ common/environment.o (.text)
++
++ *(.text)
++
++ *(.fixup)
++ *(.got1)
++ . = ALIGN(16);
++ *(.rodata)
++ *(.rodata1)
++ *(.rodata.str1.4)
++ *(.eh_frame)
++ }
++ .fini : { *(.fini) } =0
++ .ctors : { *(.ctors) }
++ .dtors : { *(.dtors) }
++
++ /* Read-write section, merged into data segment: */
++ . = (. + 0x0FFF) & 0xFFFFF000;
++ _erotext = .;
++ PROVIDE (erotext = .);
++ .reloc :
++ {
++ *(.got)
++ _GOT2_TABLE_ = .;
++ *(.got2)
++ _FIXUP_TABLE_ = .;
++ *(.fixup)
++ }
++ __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
++ __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
++
++ .data :
++ {
++ *(.data)
++ *(.data1)
++ *(.sdata)
++ *(.sdata2)
++ *(.dynamic)
++ CONSTRUCTORS
++ }
++ _edata = .;
++ PROVIDE (edata = .);
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++
++ . = .;
++ __start___ex_table = .;
++ __ex_table : { *(__ex_table) }
++ __stop___ex_table = .;
++
++ . = ALIGN(4096);
++ __init_begin = .;
++ .text.init : { *(.text.init) }
++ .data.init : { *(.data.init) }
++ . = ALIGN(4096);
++ __init_end = .;
++
++ __bss_start = .;
++ .bss :
++ {
++ *(.sbss) *(.scommon)
++ *(.dynbss)
++ *(.bss)
++ *(COMMON)
++ }
++
++ _end = . ;
++ PROVIDE (end = .);
++}
+--- u-boot-1.2.0.vanilla/cpu/mpc824x/cpu.c 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/cpu/mpc824x/cpu.c 2007-02-26 01:55:37.000000000 +0100
+@@ -44,7 +44,11 @@
+ break;
+
+ case CPU_TYPE_8245:
++#ifdef CONFIG_MPC8241
++ puts ("MPC8241"); /* impossible to distinguish using chip registers */
++#else
+ puts ("MPC8245");
++#endif
+ break;
+
+ default:
+--- u-boot-1.2.0.vanilla/drivers/rtl8169.c 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/drivers/rtl8169.c 2007-02-26 01:55:37.000000000 +0100
+@@ -48,7 +48,10 @@
+ *
+ * Indent Options: indent -kr -i8
+ ***************************************************************************/
+-
++/*
++ * 26 August 2006 Mihai Georgian <u-boot@linuxnotincluded.org.uk>
++ * Modified to use le32_to_cpu and cpu_to_le32 properly
++ */
+ #include <common.h>
+ #include <malloc.h>
+ #include <net.h>
+@@ -68,6 +71,7 @@
+ static u32 ioaddr;
+
+ /* Condensed operations for readability. */
++#define virt_to_bus(addr) cpu_to_le32(addr)
+ #define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr))
+ #define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
+
+@@ -247,8 +251,15 @@
+ u8 version; /* depend on RTL8169 docs */
+ u32 RxConfigMask; /* should clear the bits supported by this chip */
+ } rtl_chip_info[] = {
+- {"RTL-8169", 0x00, 0xff7e1880,},
+- {"RTL-8169", 0x04, 0xff7e1880,},
++ {"RTL8169", 0x00, 0xff7e1880,},
++ {"RTL8169s/8110s", 0x02, 0xff7e1880,},
++ {"RTL8169s/8110s", 0x04, 0xff7e1880,},
++ {"RTL8169sb/8110sb", 0x10, 0xff7e1880,},
++ {"RTL8169sc/8110sc", 0x18, 0xff7e1880,},
++ {"RTL8168b/8111sb", 0x30, 0xff7e1880,},
++ {"RTL8168b/8111sb", 0x38, 0xff7e1880,},
++ {"RTL8101e", 0x34, 0xff7e1880,},
++ {"RTL8100e", 0x32, 0xff7e1880,},
+ };
+
+ enum _DescStatusBit {
+@@ -315,6 +326,7 @@
+
+ static struct pci_device_id supported[] = {
+ {PCI_VENDOR_ID_REALTEK, 0x8169},
++ {PCI_VENDOR_ID_REALTEK, 0x8167},
+ {}
+ };
+
+@@ -383,13 +395,15 @@
+ for (i = ARRAY_SIZE(rtl_chip_info) - 1; i >= 0; i--){
+ if (tmp == rtl_chip_info[i].version) {
+ tpc->chipset = i;
++ printf ("%s... ", rtl_chip_info[i].name);
+ goto match;
+ }
+ }
+
+ /* if unknown chip, assume array element #0, original RTL-8169 in this case */
+ printf("PCI device %s: unknown chip version, assuming RTL-8169\n", dev->name);
+- printf("PCI device: TxConfig = 0x%hX\n", (unsigned long) RTL_R32(TxConfig));
++ printf("PCI device: TxConfig = 0x%lX\n", (unsigned long) RTL_R32(TxConfig));
++
+ tpc->chipset = 0;
+
+ match:
+@@ -413,23 +427,23 @@
+ ioaddr = dev->iobase;
+
+ cur_rx = tpc->cur_rx;
+- if ((tpc->RxDescArray[cur_rx].status & OWNbit) == 0) {
+- if (!(tpc->RxDescArray[cur_rx].status & RxRES)) {
++ if ((le32_to_cpu(tpc->RxDescArray[cur_rx].status) & OWNbit) == 0) {
++ if (!(le32_to_cpu(tpc->RxDescArray[cur_rx].status) & RxRES)) {
+ unsigned char rxdata[RX_BUF_LEN];
+- length = (int) (tpc->RxDescArray[cur_rx].
+- status & 0x00001FFF) - 4;
++ length = (int) (le32_to_cpu(tpc->RxDescArray[cur_rx].
++ status) & 0x00001FFF) - 4;
+
+ memcpy(rxdata, tpc->RxBufferRing[cur_rx], length);
+ NetReceive(rxdata, length);
+
+ if (cur_rx == NUM_RX_DESC - 1)
+ tpc->RxDescArray[cur_rx].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+ tpc->RxDescArray[cur_rx].status =
+- OWNbit + RX_BUF_SIZE;
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+ tpc->RxDescArray[cur_rx].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[cur_rx]);
++ cpu_to_le32((u32)tpc->RxBufferRing[cur_rx]);
+ } else {
+ puts("Error Rx");
+ }
+@@ -454,6 +468,7 @@
+ u8 *ptxb;
+ int entry = tpc->cur_tx % NUM_TX_DESC;
+ u32 len = length;
++ int ret;
+
+ #ifdef DEBUG_RTL8169_TX
+ int stime = currticks();
+@@ -465,39 +480,46 @@
+
+ /* point to the current txb incase multiple tx_rings are used */
+ ptxb = tpc->Tx_skbuff[entry * MAX_ETH_FRAME_SIZE];
++#ifdef DEBUG_RTL8169_TX
++ printf("ptxb: %08X, length: %d\n", ptxb, (int)length);
++#endif
+ memcpy(ptxb, (char *)packet, (int)length);
+
+ while (len < ETH_ZLEN)
+ ptxb[len++] = '\0';
+
+- tpc->TxDescArray[entry].buf_addr = virt_to_bus(ptxb);
++ tpc->TxDescArray[entry].buf_addr = cpu_to_le32((u32)ptxb);
+ if (entry != (NUM_TX_DESC - 1)) {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | FSbit | LSbit) | ((len > ETH_ZLEN) ?
+- len : ETH_ZLEN);
++ cpu_to_le32((OWNbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ } else {
+ tpc->TxDescArray[entry].status =
+- (OWNbit | EORbit | FSbit | LSbit) |
+- ((len > ETH_ZLEN) ? length : ETH_ZLEN);
++ cpu_to_le32((OWNbit | EORbit | FSbit | LSbit) |
++ ((len > ETH_ZLEN) ? len : ETH_ZLEN));
+ }
+ RTL_W8(TxPoll, 0x40); /* set polling bit */
+
+ tpc->cur_tx++;
+ to = currticks() + TX_TIMEOUT;
+- while ((tpc->TxDescArray[entry].status & OWNbit) && (currticks() < to)); /* wait */
++ while ((le32_to_cpu(tpc->TxDescArray[entry].status) & OWNbit)
++ && (currticks() < to)); /* wait */
+
+ if (currticks() >= to) {
+ #ifdef DEBUG_RTL8169_TX
+ puts ("tx timeout/error\n");
+ printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
+ #endif
+- return 0;
++ ret = 0;
+ } else {
+ #ifdef DEBUG_RTL8169_TX
+ puts("tx done\n");
+ #endif
+- return length;
++ ret = length;
+ }
++ /* Delay to make net console (nc) work properly */
++ udelay(20);
++ return ret;
+ }
+
+ static void rtl8169_set_rx_mode(struct eth_device *dev)
+@@ -564,8 +586,8 @@
+
+ tpc->cur_rx = 0;
+
+- RTL_W32(TxDescStartAddr, virt_to_le32desc(tpc->TxDescArray));
+- RTL_W32(RxDescStartAddr, virt_to_le32desc(tpc->RxDescArray));
++ RTL_W32(TxDescStartAddr, virt_to_le32desc((u32)tpc->TxDescArray));
++ RTL_W32(RxDescStartAddr, virt_to_le32desc((u32)tpc->RxDescArray));
+ RTL_W8(Cfg9346, Cfg9346_Lock);
+ udelay(10);
+
+@@ -603,13 +625,14 @@
+ for (i = 0; i < NUM_RX_DESC; i++) {
+ if (i == (NUM_RX_DESC - 1))
+ tpc->RxDescArray[i].status =
+- (OWNbit | EORbit) + RX_BUF_SIZE;
++ cpu_to_le32((OWNbit | EORbit) + RX_BUF_SIZE);
+ else
+- tpc->RxDescArray[i].status = OWNbit + RX_BUF_SIZE;
++ tpc->RxDescArray[i].status =
++ cpu_to_le32(OWNbit + RX_BUF_SIZE);
+
+ tpc->RxBufferRing[i] = &rxb[i * RX_BUF_SIZE];
+ tpc->RxDescArray[i].buf_addr =
+- virt_to_bus(tpc->RxBufferRing[i]);
++ cpu_to_le32((u32)tpc->RxBufferRing[i]);
+ }
+
+ #ifdef DEBUG_RTL8169
+@@ -620,7 +643,7 @@
+ /**************************************************************************
+ RESET - Finish setting up the ethernet interface
+ ***************************************************************************/
+-static void rtl_reset(struct eth_device *dev, bd_t *bis)
++static int rtl_reset(struct eth_device *dev, bd_t *bis)
+ {
+ int i;
+ u8 diff;
+@@ -635,21 +658,27 @@
+ if (tpc->TxDescArrays == 0)
+ puts("Allot Error");
+ /* Tx Desscriptor needs 256 bytes alignment; */
+- TxPhyAddr = virt_to_bus(tpc->TxDescArrays);
++ TxPhyAddr = (u32)tpc->TxDescArrays;
+ diff = 256 - (TxPhyAddr - ((TxPhyAddr >> 8) << 8));
+ TxPhyAddr += diff;
+ tpc->TxDescArray = (struct TxDesc *) (tpc->TxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->TxDescArray: %08X\n", tpc->TxDescArray);
++#endif
+
+ tpc->RxDescArrays = rx_ring;
+ /* Rx Desscriptor needs 256 bytes alignment; */
+- RxPhyAddr = virt_to_bus(tpc->RxDescArrays);
++ RxPhyAddr = (u32)tpc->RxDescArrays;
+ diff = 256 - (RxPhyAddr - ((RxPhyAddr >> 8) << 8));
+ RxPhyAddr += diff;
+ tpc->RxDescArray = (struct RxDesc *) (tpc->RxDescArrays + diff);
++#ifdef DEBUG_RTL8169
++ printf("tpc->RxDescArray: %08X\n", tpc->RxDescArray);
++#endif
+
+ if (tpc->TxDescArrays == NULL || tpc->RxDescArrays == NULL) {
+ puts("Allocate RxDescArray or TxDescArray failed\n");
+- return;
++ return 0;
+ }
+
+ rtl8169_init_ring(dev);
+@@ -669,6 +698,7 @@
+ #ifdef DEBUG_RTL8169
+ printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime);
+ #endif
++ return 1;
+ }
+
+ /**************************************************************************
+@@ -733,7 +763,7 @@
+
+ /* Get MAC address. FIXME: read EEPROM */
+ for (i = 0; i < MAC_ADDR_LEN; i++)
+- dev->enetaddr[i] = RTL_R8(MAC0 + i);
++ bis->bi_enetaddr[i] = dev->enetaddr[i] = RTL_R8(MAC0 + i);
+
+ #ifdef DEBUG_RTL8169
+ printf("MAC Address");
+@@ -814,17 +844,14 @@
+ if (option & _1000bpsF) {
+ #ifdef DEBUG_RTL8169
+ printf("%s: 1000Mbps Full-duplex operation.\n",
+- dev->name);
++ dev->name);
+ #endif
+ } else {
+ #ifdef DEBUG_RTL8169
+- printf
+- ("%s: %sMbps %s-duplex operation.\n",
+- dev->name,
+- (option & _100bps) ? "100" :
+- "10",
+- (option & FullDup) ? "Full" :
+- "Half");
++ printf("%s: %sMbps %s-duplex operation.\n",
++ dev->name,
++ (option & _100bps) ? "100" : "10",
++ (option & FullDup) ? "Full" : "Half");
+ #endif
+ }
+ break;
+@@ -886,3 +913,5 @@
+ }
+
+ #endif
++
++/* vim: set ts=4: */
+Index: u-boot-1.2.0/include/configs/qnap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot-1.2.0/include/configs/qnap.h 2007-04-07 21:56:55.376393000 +0200
+@@ -0,0 +1,363 @@
++/*
++ * Copyright (C) 2006 Andrew Luyten <u-boot@luyten.org.uk>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/* ------------------------------------------------------------------------- */
++
++/*
++ * board/config.h - configuration options, board specific
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++
++#define CONFIG_MPC824X 1
++#define CONFIG_MPC8245 1
++#define CONFIG_MPC8241 1
++
++#define CONFIG_IDENT_STRING " OpenTS(c)"
++#define CONFIG_TIMESTAMP
++#define CFG_HUSH_PARSER 1
++#define CFG_PROMPT_HUSH_PS2 "turbostation> "
++#define CONFIG_BOOTDELAY 3
++
++
++/*----------------------------------------------------------------------
++ * Define supported commands
++ */
++
++#define CONFIG_COMMANDS ( \
++ CONFIG_CMD_DFL | \
++ CFG_CMD_ELF | \
++ CFG_CMD_I2C | \
++ CFG_CMD_PING | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_IDE | \
++ CFG_CMD_EXT2 | \
++ CFG_CMD_DATE | \
++ CFG_CMD_PCI )
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++
++/*-----------------------------------------------------------------------
++ * Miscellaneous configurable options
++ */
++
++#define CFG_LONGHELP 1 /* undef to save memory */
++#define CFG_PROMPT "=> " /* Monitor Command Prompt*/
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size*/
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size*/
++#define CFG_MAXARGS 16 /* max number of command args*/
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size*/
++#define CFG_LOAD_ADDR 0x00100000 /* default load address */
++#define CFG_HZ 1000 /* decrementer freq:1 ms ticks*/
++
++
++/*-----------------------------------------------------------------------
++ * PCI
++ *
++ */
++
++#define CONFIG_PCI
++#undef CONFIG_PCI_PNP
++
++#define PCI_ETH_IOADDR 0xbffe00
++#define PCI_ETH_MEMADDR 0xbfffce00
++
++#define PCI_IDE_IOADDR 0xbfffd0
++#define PCI_IDE_MEMADDR 0xbffffe00
++
++#define PCI_USB0_IOADDR 0
++#define PCI_USB0_MEMADDR 0xbfffe000
++#define PCI_USB1_IOADDR 0
++#define PCI_USB1_MEMADDR 0xbfffd000
++#define PCI_USB2_IOADDR 0
++#define PCI_USB2_MEMADDR 0xbfffcf00
++
++
++/*-----------------------------------------------------------------------
++ * Start addresses for the final memory configuration
++ * (Set up by the startup code)
++ */
++
++#define CFG_SDRAM_BASE 0x00000000
++#define CFG_MONITOR_BASE TEXT_BASE
++#undef CFG_RAMBOOT
++
++#define CFG_PCI_MEM_ADDR 0xB0000000
++#define CFG_EUMB_ADDR 0xFC000000
++#define CFG_FLASH_BASE 0xFF000000
++
++#define CFG_RESET_ADDRESS 0xFFF00100
++
++#define CFG_MONITOR_LEN (256 << 10)
++#define CFG_MALLOC_LEN (512 << 10)
++
++#define CFG_MEMTEST_START 0x00000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x04000000 /* 0 ... 32 MB in DRAM */
++#define CFG_MAX_RAM_SIZE 0x10000000 /* up to 256M of SDRAM */
++
++
++/*-----------------------------------------------------------------------
++ * Definitions for initial stack pointer and data area
++ */
++
++#define CFG_INIT_RAM_ADDR 0x40000000
++#define CFG_INIT_RAM_END 0x1000
++#define CFG_GBL_DATA_SIZE 128
++#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
++
++
++/*-----------------------------------------------------------------------
++ * FLASH organization
++ */
++
++#define CFG_FLASH_CFI 1
++#define CFG_FLASH_CFI_DRIVER 1 /* Use the common driver */
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#define CFG_MAX_FLASH_SECT 128 /* max number of sectors on one chip*/
++#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */
++#define CFG_FLASH_USE_BUFFER_WRITE /* faster writes */
++
++#define CFG_ENV_IS_IN_FLASH 1
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x00EA0000)
++#define CFG_ENV_SECT_SIZE 0x00020000 /* Total Size of Environment Sector*/
++
++
++/*-----------------------------------------------------------------------
++ * Gigabit Ethernet
++ */
++
++#define CONFIG_NET_MULTI
++#define CONFIG_RTL8169
++
++
++/*-----------------------------------------------------------------------
++ * Filesystems
++ */
++
++#define CONFIG_MAC_PARTITION
++#define CONFIG_DOS_PARTITION
++//#define CONFIG_ISO_PARTITION
++
++
++/*-----------------------------------------------------------------------
++ * IDE/ATA
++ */
++
++#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
++#undef CONFIG_IDE_LED /* no led for ide supported */
++#undef CONFIG_IDE_RESET /* no reset for ide supported */
++#undef CONFIG_ATAPI /* no ATAPI support */
++
++#define CONFIG_IDE_PREINIT /* To set up MMIO adresses */
++#define CONFIG_LBA48 /* Large disk support */
++
++#define CFG_IDE_MAXBUS 2 /* Two channels x 1 device each */
++#define CFG_IDE_MAXDEVICE (CFG_IDE_MAXBUS*1)
++
++#define CFG_ATA_BASE_ADDR 0x0000 /* Set up in board specific code */
++#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */
++#define CFG_ATA_REG_OFFSET 0x0000 /* Offset for normal register accesses */
++#define CFG_ATA_ALT_OFFSET 0x0000 /* Offset for alternate registers */
++
++
++/*----------------------------------------------------------------------
++ * On Chip Serial configuration
++ */
++
++#define CONFIG_CONS_INDEX 1
++#define CONFIG_BAUDRATE 115200
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++#define CFG_NS16550
++#define CFG_NS16550_SERIAL
++
++#define CFG_NS16550_REG_SIZE 1
++#define CFG_NS16550_CLK get_bus_freq(0)
++
++#define CFG_NS16550_COM1 (CFG_EUMB_ADDR + 0x4500) /* Console port */
++#define CFG_NS16550_COM2 (CFG_EUMB_ADDR + 0x4600) /* PIC ? */
++
++
++/*----------------------------------------------------------------------
++ * i2c support configuration
++ */
++
++#define CONFIG_HARD_I2C 1 /* To enable I2C support */
++#undef CONFIG_SOFT_I2C /* I2C bit-banged */
++#define CFG_I2C_SPEED 400000 /* I2C speed and slave address */
++#define CFG_I2C_SLAVE 0x7F
++
++#define CONFIG_RTC_RS5C372A /* Real-time clock chip */
++
++
++/*----------------------------------------------------------------------
++ * Low Level Configuration Settings
++ * (address mappings, register initial values, etc.)
++ * You should know what you are doing if you make changes here.
++ */
++
++#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
++
++#define CFG_ROMNAL 7 /*rom/flash next access time */
++#define CFG_ROMFAL 11 /*rom/flash access time */
++
++#define CFG_REFINT 430 /* no of clock cycles between CBR refresh cycles */
++
++/* the following are for SDRAM only*/
++#define CFG_BSTOPRE 121 /* Burst To Precharge, sets open page interval */
++#define CFG_REFREC 8 /* Refresh to activate interval */
++#define CFG_RDLAT 4 /* data latency from read command */
++#define CFG_PRETOACT 3 /* Precharge to activate interval */
++#define CFG_ACTTOPRE 5 /* Activate to Precharge interval */
++#define CFG_ACTORW 3 /* Activate to R/W */
++#define CFG_SDMODE_CAS_LAT 3 /* SDMODE CAS latency */
++#define CFG_SDMODE_WRAP 0 /* SDMODE wrap type */
++
++#define CFG_REGISTERD_TYPE_BUFFER 1
++#define CFG_EXTROM 1
++#define CFG_REGDIMM 0
++
++
++/*----------------------------------------------------------------------
++ * memory bank settings
++ *
++ * only bits 20-29 are actually used from these vales to set the
++ * start/end address the upper two bits will be 0, and the lower 20
++ * bits will be set to 0x00000 for a start address, or 0xfffff for an
++ * end address
++ */
++
++#define CFG_BANK0_START 0x00000000
++#define CFG_BANK0_END (CFG_MAX_RAM_SIZE - 1)
++#define CFG_BANK0_ENABLE 1
++#define CFG_BANK1_START 0x3ff00000
++#define CFG_BANK1_END 0x3fffffff
++#define CFG_BANK1_ENABLE 0
++#define CFG_BANK2_START 0x3ff00000
++#define CFG_BANK2_END 0x3fffffff
++#define CFG_BANK2_ENABLE 0
++#define CFG_BANK3_START 0x3ff00000
++#define CFG_BANK3_END 0x3fffffff
++#define CFG_BANK3_ENABLE 0
++#define CFG_BANK4_START 0x00000000
++#define CFG_BANK4_END 0x00000000
++#define CFG_BANK4_ENABLE 0
++#define CFG_BANK5_START 0x00000000
++#define CFG_BANK5_END 0x00000000
++#define CFG_BANK5_ENABLE 0
++#define CFG_BANK6_START 0x00000000
++#define CFG_BANK6_END 0x00000000
++#define CFG_BANK6_ENABLE 0
++#define CFG_BANK7_START 0x00000000
++#define CFG_BANK7_END 0x00000000
++#define CFG_BANK7_ENABLE 0
++
++
++/*
++ * Memory bank enable bitmask, specifying which of the banks defined above
++ are actually present. MSB is for bank #7, LSB is for bank #0.
++ */
++#define CFG_BANK_ENABLE 0x01
++
++#define CFG_ODCR 0xff /* configures line driver impedances, */
++ /* see 8240 book for bit definitions */
++#define CFG_PGMAX 0x32 /* how long the 8240 retains the */
++ /* currently accessed page in memory */
++ /* see 8240 book for details */
++#define CFG_DBUS_SIZE2 1
++#define CFG_BANK0_ROW 2
++
++
++/*----------------------------------------------------------------------
++ * Initial BAT mappings
++ */
++
++/* SDRAM 0 - 256MB */
++#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
++#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
++
++/* stack in DCACHE @ 1GB (no backing mem) */
++#define CFG_IBAT1L (CFG_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
++#define CFG_IBAT1U (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)
++
++/* PCI memory */
++#define CFG_IBAT2L (CFG_PCI_MEM_ADDR | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT2U (CFG_PCI_MEM_ADDR | BATU_BL_256M | BATU_VS | BATU_VP)
++
++/* Flash, config addrs, etc */
++#define CFG_IBAT3L (0xF0000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
++#define CFG_IBAT3U (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
++
++#define CFG_DBAT0L CFG_IBAT0L
++#define CFG_DBAT0U CFG_IBAT0U
++#define CFG_DBAT1L CFG_IBAT1L
++#define CFG_DBAT1U CFG_IBAT1U
++#define CFG_DBAT2L CFG_IBAT2L
++#define CFG_DBAT2U CFG_IBAT2U
++#define CFG_DBAT3L CFG_IBAT3L
++#define CFG_DBAT3U CFG_IBAT3U
++
++/*
++ * For booting Linux, the board info and command line data
++ * have to be in the first 8 MB of memory, since this is
++ * the maximum mapped by the Linux kernel during initialization.
++ */
++#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
++
++
++/*-----------------------------------------------------------------------
++ * Cache Configuration
++ */
++
++#define CFG_CACHELINE_SIZE 32 /* For MPC8240 CPU */
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++# define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */
++#endif
++
++
++/*-----------------------------------------------------------------------
++ * Internal Definitions
++ *
++ * Boot Flags
++ */
++#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
++#define BOOTFLAG_WARM 0x02 /* Software reboot */
++
++/* pass open firmware flat tree */
++#define CONFIG_OF_FLAT_TREE 1
++
++/* maximum size of the flat tree (8K) */
++#define OF_FLAT_TREE_MAX_SIZE 8192
++
++#define OF_CPU "PowerPC,603e"
++#define OF_STDOUT_PATH "/soc10x/serial@fc004500"
++
++#endif /* __CONFIG_H */
++
+--- u-boot-1.2.0.vanilla/Makefile 2007-01-07 00:13:11.000000000 +0100
++++ u-boot-1.2.0/Makefile 2007-02-26 01:55:37.000000000 +0100
+@@ -1296,6 +1296,9 @@
+ PN62_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x pn62
+
++qnap_config: unconfig
++ @$(MKCONFIG) $(@:_config=) ppc mpc824x qnap
++
+ Sandpoint8240_config: unconfig
+ @$(MKCONFIG) $(@:_config=) ppc mpc824x sandpoint
+
diff --git a/packages/uboot/u-boot-LABEL.2006.06.30.2020/nohelloworld.patch b/packages/uboot/u-boot-LABEL.2006.06.30.2020/nohelloworld.patch
deleted file mode 100644
index d98cefe28e..0000000000
--- a/packages/uboot/u-boot-LABEL.2006.06.30.2020/nohelloworld.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: git/examples/Makefile
-===================================================================
---- git.orig/examples/Makefile 2006-10-20 09:53:20.000000000 +0200
-+++ git/examples/Makefile 2006-10-20 10:17:55.658554000 +0200
-@@ -59,9 +59,6 @@
-
- include $(TOPDIR)/config.mk
-
--SREC = hello_world.srec
--BIN = hello_world.bin hello_world
--
- ifeq ($(CPU),mpc8xx)
- SREC = test_burst.srec
- BIN = test_burst.bin test_burst
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty b/packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch b/packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch
new file mode 100644
index 0000000000..d7a2a872e5
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch
@@ -0,0 +1,52 @@
+This patch makes creation of the BBT optional for the s3c24x0 platform.
+It adds:
+
+- a new platform-independent NAND-wide flag NAND_DONT_CREATE_BBT
+- one user of this flag, namely s3c24x0
+
+Experimental.
+
+- Werner Almesberger <werner@openmoko.org>
+
+
+Index: u-boot/cpu/arm920t/s3c24x0/nand.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/nand.c 2007-02-16 23:53:29.000000000 +0100
++++ u-boot/cpu/arm920t/s3c24x0/nand.c 2007-02-16 23:53:54.000000000 +0100
+@@ -169,7 +169,7 @@
+
+ nand->eccmode = NAND_ECC_SOFT;
+ #ifdef CONFIG_S3C2410_NAND_BBT
+- nand->options = NAND_USE_FLASH_BBT;
++ nand->options = NAND_USE_FLASH_BBT | NAND_DONT_CREATE_BBT;
+ #else
+ nand->options = 0;
+ #endif
+Index: u-boot/drivers/nand/nand_bbt.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_bbt.c 2007-02-16 23:53:36.000000000 +0100
++++ u-boot/drivers/nand/nand_bbt.c 2007-02-16 23:53:54.000000000 +0100
+@@ -678,7 +678,8 @@
+ }
+ create:
+ /* Create the bad block table by scanning the device ? */
+- if (!(td->options & NAND_BBT_CREATE))
++ if (!(td->options & NAND_BBT_CREATE) ||
++ (this->options & NAND_DONT_CREATE_BBT))
+ continue;
+
+ /* Create the table in memory by scanning the chip(s) */
+Index: u-boot/include/linux/mtd/nand.h
+===================================================================
+--- u-boot.orig/include/linux/mtd/nand.h 2007-02-16 23:53:08.000000000 +0100
++++ u-boot/include/linux/mtd/nand.h 2007-02-16 23:53:54.000000000 +0100
+@@ -187,7 +187,8 @@
+ * This can only work if we have the ecc bytes directly behind the
+ * data bytes. Applies for DOC and AG-AND Renesas HW Reed Solomon generators */
+ #define NAND_HWECC_SYNDROME 0x00020000
+-
++/* Do not create an BBT if none is found. Overrides NAND_BBT_CREATE. */
++#define NAND_DONT_CREATE_BBT 0x00040000
+
+ /* Options set by nand scan */
+ /* Nand scan has allocated oob_buf */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch b/packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch
new file mode 100644
index 0000000000..37b2807908
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch
@@ -0,0 +1,69 @@
+Scan also the second OOB page for bad block information.
+
+board/neo1973/gta01/nand.c (board_nand_init): added board-specific badblock
+ pattern which sets NAND_BBT_SCAN2NDPAGE
+drivers/nand/nand_base.c (nand_block_bad): also consider the second page in a
+ block if NAND_BBT_SCAN2NDPAGE is set
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/board/neo1973/gta01/nand.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/nand.c
++++ u-boot/board/neo1973/gta01/nand.c
+@@ -113,9 +113,23 @@
+ }
+
+
++/* Derived from drivers/nand/nand_bbt.c:smallpage_flashbased */
++
++static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
++
++static struct nand_bbt_descr badblock_pattern = {
++ .options =
++ NAND_BBT_SCANEMPTY | NAND_BBT_SCANALLPAGES | NAND_BBT_SCAN2NDPAGE,
++ .offs = 5,
++ .len = 1,
++ .pattern = scan_ff_pattern
++};
++
++
+ int board_nand_init(struct nand_chip *nand)
+ {
+ nand->read_otp = samsung_nand_read_otp;
+ nand->write_otp = samsung_nand_write_otp;
++ nand->badblock_pattern = &badblock_pattern;
+ return s3c24x0_nand_init(nand);
+ }
+Index: u-boot/drivers/nand/nand_base.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_base.c
++++ u-boot/drivers/nand/nand_base.c
+@@ -421,7 +421,7 @@
+ *
+ * Check, if the block is bad.
+ */
+-static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
++static int nand_block_bad_page(struct mtd_info *mtd, loff_t ofs, int getchip)
+ {
+ int page, chipnr, res = 0;
+ struct nand_chip *this = mtd->priv;
+@@ -460,6 +460,18 @@
+ return res;
+ }
+
++static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
++{
++ struct nand_chip *this = mtd->priv;
++
++ if (nand_block_bad_page(mtd, ofs, getchip))
++ return 1;
++ if (this->badblock_pattern->options & NAND_BBT_SCAN2NDPAGE &&
++ nand_block_bad_page(mtd, ofs+(1 << this->page_shift), getchip))
++ return 1;
++ return 0;
++}
++
+ /**
+ * nand_default_block_markbad - [DEFAULT] mark a block bad
+ * @mtd: MTD device structure
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch b/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch
new file mode 100644
index 0000000000..fa0de39ab7
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch
@@ -0,0 +1,98 @@
+Auto-detect whether we're booting from RAM or NAND, and act accordingly. This
+allows us to use the same u-boot binary for all boot modes.
+
+include/configs/neo1973.h: introduced new config option
+ CONFIG_LL_INIT_NAND_ONLY to perform low-level initialization only when
+ booting from NAND
+include/configs/neo1973.h: got rid of BUILD_FOR_RAM
+cpu/arm920t/start.S: detect if we need to boot from NAND at run time (i.e., if
+ we're running at address 0)
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -157,18 +157,26 @@
+ str r1, [r0]
+ #endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */
+
+- /*
+- * we do sys-critical inits only at reboot,
+- * not when booting from ram!
+- */
+ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
++#ifndef CONFIG_LL_INIT_NAND_ONLY
+ bl cpu_init_crit
+ #endif
++#endif
+
+ #ifndef CONFIG_SKIP_RELOCATE_UBOOT
+-#ifndef CONFIG_S3C2410_NAND_BOOT
+-relocate: /* relocate U-Boot to RAM */
+ adr r0, _start /* r0 <- current position of code */
++
++#ifdef CONFIG_S3C2410_NAND_BOOT
++ /* are we running from NAND ? */
++#define BWSCON 0x48000000
++ ldr r1, =BWSCON /* Z = CPU booted from NAND */
++ ldr r1, [r1]
++ tst r1, #6 /* BWSCON[2:1] = OM[1:0] */
++ teqeq r0, #0 /* Z &= running at address 0 */
++ beq nand_load
++#endif /* CONFIG_S3C2410_NAND_BOOT */
++
++relocate: /* relocate U-Boot to RAM */
+ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
+ cmp r0, r1 /* don't reloc during debug */
+ beq done_relocate
+@@ -188,10 +196,13 @@
+ ldr pc, _done_relocate /* jump to relocated code */
+ _done_relocate:
+ .word done_relocate
+-done_relocate:
+-#else /* NAND_BOOT */
+-relocate:
+-copy_myself:
++
++#ifdef CONFIG_S3C2410_NAND_BOOT
++nand_load:
++#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && defined(CONFIG_LL_INIT_NAND_ONLY)
++ bl cpu_init_crit
++#endif
++
+ /* mov r10, lr */
+
+ @ reset NAND
+@@ -275,7 +286,8 @@
+ #endif
+ 1: b 1b
+ done_nand_read:
+-#endif /* NAND_BOOT */
++#endif /* CONFIG_S3C2410_NAND_BOOT */
++done_relocate:
+ #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
+
+ /* Set up the stack */
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -26,14 +26,10 @@
+ #ifndef __CONFIG_H
+ #define __CONFIG_H
+
+-#if defined(BUILD_FOR_RAM)
+-/* If we want to start u-boot from inside RAM */
+-#define CONFIG_SKIP_LOWLEVEL_INIT 1
+-#else
+-/* we want to start u-boot directly from within NAND flash */
++/* we want to be able to start u-boot directly from within NAND flash */
++#define CONFIG_LL_INIT_NAND_ONLY
+ #define CONFIG_S3C2410_NAND_BOOT 1
+ #define CONFIG_S3C2410_NAND_SKIP_BAD 1
+-#endif
+
+ #define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch b/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch
new file mode 100644
index 0000000000..53a3e05c67
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch
@@ -0,0 +1,62 @@
+This patch allows us to boot from anywhere in RAM. It mainly sets the stage
+for later patches. The only real changes here is the better handling of already
+cached code (e.g., if we were started by a previous instance of u-boot), and
+that we drop CONFIG_SKIP_RELOCATE_UBOOT from neo1973.h
+
+cpu/arm920t/start.S: if not relocating, instead of going straight to
+ stack_setup, jump to done_relocate, which may perform other setup tasks
+cpu/arm920t/start.S: after relocating, flush the cache and jump to the new code
+include/configs/neo1973.h: remove CONFIG_SKIP_RELOCATE_UBOOT
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -171,7 +171,7 @@ relocate: /* relocate U-Boot to RAM
+ adr r0, _start /* r0 <- current position of code */
+ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
+ cmp r0, r1 /* don't reloc during debug */
+- beq stack_setup
++ beq done_relocate
+
+ ldr r2, _armboot_start
+ ldr r3, _bss_start
+@@ -181,8 +181,14 @@ relocate: /* relocate U-Boot to RAM
+ copy_loop:
+ ldmia r0!, {r3-r10} /* copy from source address [r0] */
+ stmia r1!, {r3-r10} /* copy to target address [r1] */
+- cmp r0, r2 /* until source end addreee [r2] */
++ cmp r0, r2 /* until source end address [r2] */
+ ble copy_loop
++ mov r0, #0 /* flush v3/v4 cache */
++ mcr p15, 0, r0, c7, c7, 0
++ ldr pc, _done_relocate /* jump to relocated code */
++_done_relocate:
++ .word done_relocate
++done_relocate:
+ #else /* NAND_BOOT */
+ relocate:
+ copy_myself:
+@@ -270,7 +276,7 @@ notmatch:
+ 1: b 1b
+ done_nand_read:
+ #endif /* NAND_BOOT */
+-#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
++#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
+
+ /* Set up the stack */
+ stack_setup:
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -28,7 +28,6 @@
+
+ #if defined(BUILD_FOR_RAM)
+ /* If we want to start u-boot from inside RAM */
+-#define CONFIG_SKIP_RELOCATE_UBOOT 1
+ #define CONFIG_SKIP_LOWLEVEL_INIT 1
+ #else
+ /* we want to start u-boot directly from within NAND flash */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch b/packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch
new file mode 100644
index 0000000000..352967ae06
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch
@@ -0,0 +1,769 @@
+board/neo1973/bootmenu.c: simple configurable boot menu
+board/neo1973/neo1973.c (neo1973_new_second): return 1 if a new second has
+ started since the last call
+board/neo1973/neo1973.c (neo1973_on_key_pressed): return 1 if the $POWER key is
+ pressed
+board/neo1973/neo1973.c (board_late_init): make use of neo1973_new_second and
+ neo1973_on_key_pressed
+board/neo1973/neo1973.h: added function prototypes
+u-boot/board/neo1973/neo1973.c (board_late_init): enter the boot menu when
+ "AUX" was pressed at least half the time
+u-boot/board/neo1973/neo1973.c (board_late_init): minor code cleanup
+u-boot/common/console.c, include/console.h: added "console_poll_hook" to be
+ called when waiting for console in put in "getc" and "tstc"
+board/neo1973/neo1973.c (board_late_init): poll for the boot menu also on RAM
+ boot, reset, or unknown cause
+board/neo1973/neo1973.c (board_late_init): don't look for the power key if
+ woken up by the charger
+board/neo1973/neo1973.h, board/neo1973/neo1973.c, board/neo1973/bootmenu.c:
+ renamed neo1973_911_key_pressed to neo1973_aux_key_pressed
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/board/neo1973/common/bootmenu.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/bootmenu.c
+@@ -0,0 +1,120 @@
++/*
++ * bootmenu.c - Boot menu
++ *
++ * Copyright (C) 2006-2007 by OpenMoko, Inc.
++ * Written by Werner Almesberger <werner@openmoko.org>
++ * All Rights Reserved
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++
++#include <common.h>
++#include <environment.h>
++#include <bootmenu.h>
++#include <asm/atomic.h>
++
++#ifdef CONFIG_USBD_DFU
++#include "usbdcore.h"
++#include "usb_dfu.h"
++#endif
++
++#include "neo1973.h"
++
++
++#define DEBOUNCE_LOOPS 1000 /* wild guess */
++
++
++static int debounce(int (*fn)(void), int *last)
++{
++ int on, i;
++
++again:
++ on = fn();
++ if (on != *last)
++ for (i = DEBOUNCE_LOOPS; i; i--)
++ if (on != fn())
++ goto again;
++ *last = on;
++ return on;
++}
++
++
++static int aux_key(void *user)
++{
++ static int last_aux = -1;
++
++ return debounce(neo1973_aux_key_pressed, &last_aux);
++}
++
++
++static int on_key(void *user)
++{
++ static int last_on = -1;
++
++ return debounce(neo1973_on_key_pressed, &last_on);
++}
++
++
++static void factory_reset(void *user)
++{
++ default_env();
++ run_command("dynpart", 0);
++ run_command("bootd", 0);
++}
++
++
++static int seconds(void *user)
++{
++ return neo1973_new_second();
++}
++
++
++static int system_idle(void)
++{
++#ifdef CONFIG_USBD_DFU
++ if (system_dfu_state)
++ return *system_dfu_state == DFU_STATE_appIDLE;
++#endif
++ return 1;
++}
++
++
++static void poweroff_if_idle(void *user)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ if (system_idle())
++ neo1973_poweroff();
++ local_irq_restore(flags);
++}
++
++
++static struct bootmenu_setup bootmenu_setup = {
++ .next_key = aux_key,
++ .enter_key = on_key,
++ .seconds = seconds,
++ .idle_action = poweroff_if_idle,
++};
++
++
++void neo1973_bootmenu(void)
++{
++ bootmenu_add("Boot", NULL, "bootd");
++ bootmenu_init(&bootmenu_setup);
++ bootmenu_add("Factory reset", factory_reset, NULL);
++ bootmenu();
++}
+Index: u-boot/board/neo1973/gta01/gta01.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/gta01.c
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -229,10 +229,15 @@ int board_late_init(void)
+ extern unsigned char booted_from_nand;
+ unsigned char tmp;
+ char buf[32];
++ int menu_vote = 0; /* <= 0: no, > 0: yes */
++ int seconds = 0;
+
+ /* Initialize the Power Management Unit with a safe register set */
+ pcf50606_init();
+
++ /* if there's no other reason, must be regular reset */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_RESET;
++
+ if (!booted_from_nand)
+ goto woken_by_reset;
+
+@@ -242,45 +247,41 @@ int board_late_init(void)
+ setenv("pcf50606_int1", buf);
+
+ if (tmp & PCF50606_INT1_ALARM) {
+- /* we've been woken up by RTC alarm or charger insert, boot */
++ /* we've been woken up by RTC alarm, boot */
+ neo1973_wakeup_cause = NEO1973_WAKEUP_ALARM;
+ goto continue_boot;
+ }
+ if (tmp & PCF50606_INT1_EXTONR) {
++ /* we've been woken up by charger insert */
+ neo1973_wakeup_cause = NEO1973_WAKEUP_CHARGER;
+ }
+
+ if (tmp & PCF50606_INT1_ONKEYF) {
+- int seconds = 0;
+- neo1973_wakeup_cause = NEO1973_WAKEUP_POWER_KEY;
+ /* we've been woken up by a falling edge of the onkey */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_POWER_KEY;
++ }
+
+- /* we can't just setenv(bootdelay,-1) because that would
+- * accidentially become permanent if the user does saveenv */
+- if (neo1973_911_key_pressed())
+- nobootdelay = 1;
+-
+- while (1) {
+- u_int8_t int1, oocs;
+-
+- oocs = pcf50606_reg_read(PCF50606_REG_OOCS);
+- if (oocs & PFC50606_OOCS_ONKEY)
+- break;
+-
+- int1 = pcf50606_reg_read(PCF50606_REG_INT1);
+- if (int1 & PCF50606_INT1_SECOND)
+- seconds++;
+-
+- if (seconds >= POWER_KEY_SECONDS)
+- goto continue_boot;
+- }
+- /* Power off if minimum number of seconds not reached */
+- neo1973_poweroff();
++ if (neo1973_wakeup_cause == NEO1973_WAKEUP_CHARGER) {
++ /* if we still think it was only a charger insert, boot */
++ goto continue_boot;
+ }
+
+ woken_by_reset:
+- /* if there's no other reason, must be regular reset */
+- neo1973_wakeup_cause = NEO1973_WAKEUP_RESET;
++
++ while (neo1973_wakeup_cause == NEO1973_WAKEUP_RESET ||
++ neo1973_on_key_pressed()) {
++ if (neo1973_aux_key_pressed())
++ menu_vote++;
++ else
++ menu_vote--;
++
++ if (neo1973_new_second())
++ seconds++;
++ if (seconds >= POWER_KEY_SECONDS)
++ goto continue_boot;
++ }
++ /* Power off if minimum number of seconds not reached */
++ neo1973_poweroff();
+
+ continue_boot:
+ jbt6k74_init();
+@@ -304,6 +305,11 @@ continue_boot:
+ }
+ #endif
+
++ if (menu_vote > 0) {
++ neo1973_bootmenu();
++ nobootdelay = 1;
++ }
++
+ return 0;
+ }
+
+@@ -369,7 +375,17 @@ void neo1973_vibrator(int on)
+ #endif
+ }
+
+-int neo1973_911_key_pressed(void)
++int neo1973_new_second(void)
++{
++ return pcf50606_reg_read(PCF50606_REG_INT1) & PCF50606_INT1_SECOND;
++}
++
++int neo1973_on_key_pressed(void)
++{
++ return !(pcf50606_reg_read(PCF50606_REG_OOCS) & PFC50606_OOCS_ONKEY);
++}
++
++int neo1973_aux_key_pressed(void)
+ {
+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
+ if (gpio->GPFDAT & (1 << 6))
+Index: u-boot/board/neo1973/gta01/Makefile
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/Makefile
++++ u-boot/board/neo1973/gta01/Makefile
+@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
+
+ LIB = lib$(BOARD).a
+
+-OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o
++OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o ../common/bootmenu.o
+ SOBJS := ../common/lowlevel_init.o
+
+ .PHONY: all
+Index: u-boot/board/neo1973/common/neo1973.h
+===================================================================
+--- u-boot.orig/board/neo1973/common/neo1973.h
++++ u-boot/board/neo1973/common/neo1973.h
+@@ -29,4 +29,10 @@ int neo1973_911_key_pressed(void);
+ const char *neo1973_get_charge_status(void);
+ int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd);
+
++int neo1973_new_second(void);
++int neo1973_on_key_pressed(void);
++int neo1973_aux_key_pressed(void);
++
++void neo1973_bootmenu(void);
++
+ #endif
+Index: u-boot/common/console.c
+===================================================================
+--- u-boot.orig/common/console.c
++++ u-boot/common/console.c
+@@ -160,8 +160,12 @@ void fprintf (int file, const char *fmt,
+
+ /** U-Boot INITIAL CONSOLE-COMPATIBLE FUNCTION *****************************/
+
++void (*console_poll_hook)(int activity);
++
+ int getc (void)
+ {
++ while (console_poll_hook && !tstc());
++
+ if (gd->flags & GD_FLG_DEVINIT) {
+ /* Get from the standard input */
+ return fgetc (stdin);
+@@ -171,7 +175,7 @@ int getc (void)
+ return serial_getc ();
+ }
+
+-int tstc (void)
++static int do_tstc (void)
+ {
+ if (gd->flags & GD_FLG_DEVINIT) {
+ /* Test the standard input */
+@@ -182,6 +186,16 @@ int tstc (void)
+ return serial_tstc ();
+ }
+
++int tstc (void)
++{
++ int ret;
++
++ ret = do_tstc();
++ if (console_poll_hook)
++ console_poll_hook(ret);
++ return ret;
++}
++
+ void putc (const char c)
+ {
+ #ifdef CONFIG_SILENT_CONSOLE
+Index: u-boot/include/console.h
+===================================================================
+--- u-boot.orig/include/console.h
++++ u-boot/include/console.h
+@@ -33,6 +33,8 @@
+ extern device_t *stdio_devices[] ;
+ extern char *stdio_names[MAX_FILES] ;
+
++extern void (*console_poll_hook)(int activity);
++
+ int console_realloc(int top);
+
+ #endif
+Index: u-boot/common/Makefile
+===================================================================
+--- u-boot.orig/common/Makefile
++++ u-boot/common/Makefile
+@@ -50,7 +50,8 @@ COBJS = main.o ACEX1K.o altera.o bedbug.
+ memsize.o miiphybb.o miiphyutil.o \
+ s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o spartan3.o \
+ usb.o usb_kbd.o usb_storage.o \
+- virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o cmd_mfsl.o
++ virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o cmd_mfsl.o \
++ bootmenu.o
+
+ SRCS := $(AOBJS:.o=.S) $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(AOBJS) $(COBJS))
+Index: u-boot/common/bootmenu.c
+===================================================================
+--- /dev/null
++++ u-boot/common/bootmenu.c
+@@ -0,0 +1,311 @@
++/*
++ * bootmenu.c - Boot menu
++ *
++ * Copyright (C) 2006-2007 by OpenMoko, Inc.
++ * Written by Werner Almesberger <werner@openmoko.org>
++ * All Rights Reserved
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++
++#include <common.h>
++
++#ifdef CFG_BOOTMENU
++
++#include <malloc.h>
++#include <devices.h>
++#include <console.h>
++#include <bootmenu.h>
++
++
++extern const char version_string[];
++
++
++#define ANSI_CLEAR "\e[2J"
++#define ANSI_REVERSE "\e[7m"
++#define ANSI_NORMAL "\e[m"
++#define ANSI_GOTOYX "\e[%d;%dH"
++
++/*
++ * MIN_BOOT_MENU_TIMEOUT ensures that users can't by accident set the timeout
++ * unusably short.
++ */
++#define MIN_BOOT_MENU_TIMEOUT 10 /* 10 seconds */
++#define BOOT_MENU_TIMEOUT 60 /* 60 seconds */
++#define AFTER_COMMAND_WAIT 3 /* wait (2,3] after running commands */
++#define MAX_MENU_ITEMS 10 /* cut off after that many */
++
++#define TOP_ROW 2
++#define MENU_0_ROW (TOP_ROW+5)
++
++
++struct option {
++ const char *label;
++ void (*fn)(void *user); /* run_command if NULL */
++ void *user;
++};
++
++
++static const struct bootmenu_setup *setup;
++static struct option options[MAX_MENU_ITEMS];
++static int num_options = 0;
++static int max_width = 0;
++
++static device_t *bm_con;
++
++
++static void bm_printf(const char *fmt, ...)
++{
++ va_list args;
++ char printbuffer[CFG_PBSIZE];
++
++ va_start(args, fmt);
++ vsprintf(printbuffer, fmt, args);
++ va_end(args);
++
++ bm_con->puts(printbuffer);
++}
++
++
++static char *get_option(int n)
++{
++ char name[] = "menu_XX";
++
++ sprintf(name+5, "%d", n);
++ return getenv(name);
++}
++
++
++static void print_option(const struct option *option, int reverse)
++{
++ int n = option-options;
++
++ bm_printf(ANSI_GOTOYX, MENU_0_ROW+n, 1);
++ if (reverse)
++ bm_printf(ANSI_REVERSE);
++ bm_printf(" %-*s ", max_width, option->label);
++ if (reverse)
++ bm_printf(ANSI_NORMAL);
++}
++
++
++static int get_var_positive_int(char *var, int default_value)
++{
++ const char *s;
++ char *end;
++ int n;
++
++ s = getenv(var);
++ if (!s)
++ return default_value;
++ n = simple_strtoul(s, &end, 0);
++ if (!*s || *end || n < 1)
++ return default_value;
++ return n;
++}
++
++
++static void show_bootmenu(void)
++{
++ const struct option *option;
++
++ bm_printf(ANSI_CLEAR ANSI_GOTOYX "%s", TOP_ROW, 1, version_string);
++ bm_printf(ANSI_GOTOYX "*** BOOT MENU ***", TOP_ROW+3, 1);
++ bm_printf(ANSI_GOTOYX, MENU_0_ROW, 1);
++
++ for (option = options; option != options+num_options; option++)
++ print_option(option, option == options);
++
++ bm_printf("\n\nPress [AUX] to select, [POWER] to execute.\n");
++}
++
++
++static void redirect_console(int grab)
++{
++ static device_t *orig_stdout, *orig_stderr;
++
++ if (grab) {
++ orig_stdout = stdio_devices[stdout];
++ orig_stderr = stdio_devices[stderr];
++ stdio_devices[stdout] = bm_con;
++ stdio_devices[stderr] = bm_con;
++ }
++ else {
++ /*
++ * Make this conditional, because the command may also change
++ * the console.
++ */
++ if (stdio_devices[stdout] == bm_con)
++ stdio_devices[stdout] = orig_stdout;
++ if (stdio_devices[stderr] == bm_con)
++ stdio_devices[stderr] = orig_stderr;
++ }
++}
++
++
++static void do_option(const struct option *option)
++{
++ int seconds, aux;
++
++ bm_printf(ANSI_CLEAR ANSI_GOTOYX, 1, 1);
++ redirect_console(1);
++
++ if (option->fn)
++ option->fn(option->user);
++ else
++ run_command(option->user, 0);
++
++ redirect_console(0);
++ seconds = get_var_positive_int("after_command_wait",
++ AFTER_COMMAND_WAIT);
++ if (seconds)
++ bm_printf("\nPress [AUX] to %s.",
++ option ? "return to boot menu" : "power off");
++ aux = 1; /* require up-down transition */
++ while (seconds) {
++ int tmp;
++
++ tmp = setup->next_key(setup->user);
++ if (tmp && !aux)
++ break;
++ aux = tmp;
++ if (setup->seconds(setup->user))
++ seconds--;
++ }
++ if (!option)
++ setup->idle_action(setup->idle_action);
++ show_bootmenu();
++}
++
++
++static void bootmenu_hook(int activity)
++{
++ static int aux = 1, on = 1;
++ static const struct option *option = options;
++ static int seconds = 0;
++ int tmp;
++
++ if (activity)
++ seconds = 0;
++ tmp = setup->next_key(setup->user);
++ if (tmp && !aux) {
++ print_option(option, 0);
++ option++;
++ if (option == options+num_options)
++ option = options;
++ print_option(option, 1);
++ seconds = 0;
++ }
++ aux = tmp;
++ tmp = setup->enter_key(setup->user);
++ if (tmp && !on) {
++ do_option(option);
++ option = options;
++ seconds = 0;
++ }
++ on = tmp;
++ if (setup->seconds(setup->user)) {
++ int timeout;
++
++ timeout = get_var_positive_int("boot_menu_timeout",
++ BOOT_MENU_TIMEOUT);
++ if (timeout < MIN_BOOT_MENU_TIMEOUT)
++ timeout = MIN_BOOT_MENU_TIMEOUT;
++ if (++seconds > timeout) {
++ setup->idle_action(setup->idle_action);
++ seconds = 0;
++ }
++ }
++}
++
++
++static device_t *find_console(const char *name)
++{
++ int i;
++
++ for (i = 1; i != ListNumItems(devlist); i++) {
++ device_t *dev = ListGetPtrToItem(devlist, i);
++
++ if (!strcmp(name, dev->name))
++ if (dev->flags & DEV_FLAGS_OUTPUT)
++ return dev;
++ }
++ return NULL;
++}
++
++
++void bootmenu_add(const char *label, void (*fn)(void *user), void *user)
++{
++ int len;
++
++ options[num_options].label = label;
++ options[num_options].fn = fn;
++ options[num_options].user = user;
++ num_options++;
++
++ len = strlen(label);
++ if (len > max_width)
++ max_width = len;
++}
++
++
++void bootmenu_init(struct bootmenu_setup *__setup)
++{
++ int n;
++
++ setup = __setup;
++ for (n = 1; n != MAX_MENU_ITEMS+1; n++) {
++ const char *spec, *colon;
++
++ spec = get_option(n);
++ if (!spec)
++ continue;
++ colon = strchr(spec, ':');
++ if (!colon)
++ bootmenu_add(spec, NULL, (char *) spec);
++ else {
++ char *label;
++ int len = colon-spec;
++
++ label = malloc(len+1);
++ if (!label)
++ return;
++ memcpy(label, spec, len);
++ label[len] = 0;
++ bootmenu_add(label, NULL, (char *) colon+1);
++ }
++ }
++}
++
++
++void bootmenu(void)
++{
++ bm_con = find_console("vga");
++ if (bm_con && bm_con->start && bm_con->start() < 0)
++ bm_con = NULL;
++ if (!bm_con)
++ bm_con = stdio_devices[stdout];
++ if (!bm_con)
++ return;
++#if 0
++ console_assign(stdout, "vga");
++ console_assign(stderr, "vga");
++#endif
++ show_bootmenu();
++ console_poll_hook = bootmenu_hook;
++}
++
++#endif /* CFG_BOOTMENU */
+Index: u-boot/include/bootmenu.h
+===================================================================
+--- /dev/null
++++ u-boot/include/bootmenu.h
+@@ -0,0 +1,71 @@
++/*
++ * bootmenu.h - Boot menu
++ *
++ * Copyright (C) 2006-2007 by OpenMoko, Inc.
++ * Written by Werner Almesberger <werner@openmoko.org>
++ * All Rights Reserved
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++#ifndef BOOTMENU_H
++#define BOOTMENU_H
++
++#define MIN_BOOT_MENU_TIMEOUT 10 /* 10 seconds */
++#define BOOT_MENU_TIMEOUT 60 /* 60 seconds */
++#define AFTER_COMMAND_WAIT 3 /* wait (2,3] after running commands */
++#define MAX_MENU_ITEMS 10 /* cut off after that many */
++
++
++struct bootmenu_setup {
++ /* non-zero while the "next" key is being pressed */
++ int (*next_key)(void *user);
++
++ /* non-zero while the "enter" key is being pressed */
++ int (*enter_key)(void *user);
++
++ /* return the number of seconds that have passed since the last call
++ to "seconds". It's okay to limit the range to [0, 1]. */
++ int (*seconds)(void *user);
++
++ /* action to take if the boot menu times out */
++ void (*idle_action)(void *user);
++
++ /* user-specific data, passes "as is" to the functions above */
++ void *user;
++};
++
++
++/*
++ * Initialize the menu from the environment.
++ */
++
++void bootmenu_init(struct bootmenu_setup *setup);
++
++/*
++ * To add entries on top of the boot menu, call bootmenu_add before
++ * bootmenu_init. To add entries at the end, call it after bootmenu_init.
++ * If "fn" is NULL, the command specified in "user" is executed.
++ */
++
++void bootmenu_add(const char *label, void (*fn)(void *user), void *user);
++
++/*
++ * Run the boot menu.
++ */
++
++void bootmenu(void);
++
++#endif /* !BOOTMENU_H */
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -160,6 +160,8 @@
+ /* valid baudrates */
+ #define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
++#define CFG_BOOTMENU
++
+ /*-----------------------------------------------------------------------
+ * Stack sizes
+ *
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch b/packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch
new file mode 100644
index 0000000000..ee4c1984fc
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch
@@ -0,0 +1,58 @@
+common/cmd_mem.c: new command "unzip srcaddr dstaddr [dstsize]" to unzip from
+ memory to memory, and option CONFIG_UNZIP to enable it
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/common/cmd_mem.c
+===================================================================
+--- u-boot.orig/common/cmd_mem.c
++++ u-boot/common/cmd_mem.c
+@@ -1148,6 +1148,34 @@ int do_mem_crc (cmd_tbl_t *cmdtp, int fl
+ }
+ #endif /* CONFIG_CRC32_VERIFY */
+
++
++#ifdef CONFIG_UNZIP
++int gunzip (void *, int, unsigned char *, unsigned long *);
++
++int do_unzip ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ unsigned long src, dst;
++ unsigned long src_len = ~0UL, dst_len = ~0UL;
++ int err;
++
++ switch (argc) {
++ case 4:
++ dst_len = simple_strtoul(argv[3], NULL, 16);
++ /* fall through */
++ case 3:
++ src = simple_strtoul(argv[1], NULL, 16);
++ dst = simple_strtoul(argv[2], NULL, 16);
++ break;
++ default:
++ printf ("Usage:\n%s\n", cmdtp->usage);
++ return 1;
++ }
++
++ return !!gunzip((void *) dst, dst_len, (void *) src, &src_len);
++}
++#endif /* CONFIG_UNZIP */
++
++
+ /**************************************************/
+ #if (CONFIG_COMMANDS & CFG_CMD_MEMORY)
+ U_BOOT_CMD(
+@@ -1251,5 +1279,13 @@ U_BOOT_CMD(
+ );
+ #endif /* CONFIG_MX_CYCLIC */
+
++#ifdef CONFIG_UNZIP
++U_BOOT_CMD(
++ unzip, 4, 1, do_unzip,
++ "unzip - unzip a memory region\n",
++ "srcaddr dstaddr [dstsize]\n"
++);
++#endif /* CONFIG_UNZIP */
++
+ #endif
+ #endif /* CFG_CMD_MEMORY */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch b/packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch
new file mode 100644
index 0000000000..2ac5b75dee
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch
@@ -0,0 +1,127 @@
+drivers/cfb_console.c: added processing of ANSI escape sequences \e[2J, \e[m,
+ \e[7m, and \e[row;colH
+drivers/cfb_console.c (video_putc): make \r return to the beginning of the line
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/drivers/cfb_console.c
+===================================================================
+--- u-boot.orig/drivers/cfb_console.c
++++ u-boot/drivers/cfb_console.c
+@@ -181,6 +181,7 @@ CONFIG_VIDEO_HW_CURSOR: - Uses the
+
+ #include <version.h>
+ #include <linux/types.h>
++#include <linux/ctype.h>
+ #include <devices.h>
+ #include <video_font.h>
+ #ifdef CFG_CMD_DATE
+@@ -676,10 +677,96 @@ static void console_newline (void)
+
+ /*****************************************************************************/
+
++static enum {
++ CS_NORMAL = 0,
++ CS_ESC,
++ CS_NUM1,
++ CS_NUM2,
++} state = 0;
++
++static int num1, num2;
++
++
++static void swap_drawing_colors(void)
++{
++ eorx = fgx;
++ fgx = bgx;
++ bgx = eorx;
++ eorx = fgx ^ bgx;
++}
++
++
++static void process_sequence(char c)
++{
++ static int inverted = 0;
++ int i, inv;
++
++ switch (c) {
++ case 'J':
++ /* assume num1 == 2 */
++ for (i = 0; i != CONSOLE_ROWS; i++)
++ console_scrollup();
++ break;
++ case 'H':
++ if (num1 > CONSOLE_ROWS || num2 > CONSOLE_COLS)
++ break;
++ console_col = num2 ? num2-1 : 0;
++ console_row = num1 ? num1-1 : 0;
++ break;
++ case 'm':
++ inv = num1 == 7;
++ if (num1 && !inv)
++ break;
++ if (inverted != inv)
++ swap_drawing_colors();
++ inverted = inv;
++ break;
++ }
++}
++
++
++static void escape_sequence(char c)
++{
++ switch (state) {
++ case CS_ESC:
++ state = c == '[' ? CS_NUM1 : CS_NORMAL;
++ num1 = num2 = 0;
++ break;
++ case CS_NUM1:
++ if (isdigit(c))
++ num1 = num1*10+c-'0';
++ else if (c == ';')
++ state = CS_NUM2;
++ else {
++ process_sequence(c);
++ state = CS_NORMAL;
++ }
++ break;
++ case CS_NUM2:
++ if (isdigit(c))
++ num2 = num2*10+c-'0';
++ else {
++ process_sequence(c);
++ state = CS_NORMAL;
++ }
++ default:
++ /* can't happen */;
++ }
++}
++
++
+ void video_putc (const char c)
+ {
++ if (state) {
++ escape_sequence(c);
++ CURSOR_SET;
++ return;
++ }
++
+ switch (c) {
+- case 13: /* ignore */
++ case 13: /* return to beginning of line */
++ CURSOR_OFF;
++ console_col = 0;
+ break;
+
+ case '\n': /* next line */
+@@ -698,6 +785,10 @@ void video_putc (const char c)
+ console_back ();
+ break;
+
++ case '\e':
++ state = CS_ESC;
++ break;
++
+ default: /* draw the char */
+ video_putchar (console_col * VIDEO_FONT_WIDTH,
+ console_row * VIDEO_FONT_HEIGHT,
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch b/packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch
new file mode 100644
index 0000000000..b9ae4f29fe
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch
@@ -0,0 +1,101 @@
+common/env_common.c (default_env): new function that resets the environment to
+ the default value
+common/env_common.c (env_relocate): use default_env instead of own copy
+common/env_nand.c (env_relocate_spec): use default_env instead of own copy
+include/environment.h: added default_env prototype
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/common/env_common.c
+===================================================================
+--- u-boot.orig/common/env_common.c
++++ u-boot/common/env_common.c
+@@ -202,6 +202,25 @@ uchar *env_get_addr (int index)
+ }
+ }
+
++void default_env(void)
++{
++ if (sizeof(default_environment) > ENV_SIZE)
++ {
++ puts ("*** Error - default environment is too large\n\n");
++ return;
++ }
++
++ memset (env_ptr, 0, sizeof(env_t));
++ memcpy (env_ptr->data,
++ default_environment,
++ sizeof(default_environment));
++#ifdef CFG_REDUNDAND_ENVIRONMENT
++ env_ptr->flags = 0xFF;
++#endif
++ env_crc_update ();
++ gd->env_valid = 1;
++}
++
+ void env_relocate (void)
+ {
+ DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,
+@@ -245,23 +264,8 @@ void env_relocate (void)
+ gd->env_valid = 0;
+ #endif
+
+- if (gd->env_valid == 0) {
+- if (sizeof(default_environment) > ENV_SIZE)
+- {
+- puts ("*** Error - default environment is too large\n\n");
+- return;
+- }
+-
+- memset (env_ptr, 0, sizeof(env_t));
+- memcpy (env_ptr->data,
+- default_environment,
+- sizeof(default_environment));
+-#ifdef CFG_REDUNDAND_ENVIRONMENT
+- env_ptr->flags = 0xFF;
+-#endif
+- env_crc_update ();
+- gd->env_valid = 1;
+- }
++ if (gd->env_valid == 0)
++ default_env();
+ else {
+ env_relocate_spec ();
+ }
+Index: u-boot/common/env_nand.c
+===================================================================
+--- u-boot.orig/common/env_nand.c
++++ u-boot/common/env_nand.c
+@@ -313,19 +313,7 @@ void env_relocate_spec (void)
+ static void use_default()
+ {
+ puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
+-
+- if (default_environment_size > CFG_ENV_SIZE){
+- puts ("*** Error - default environment is too large\n\n");
+- return;
+- }
+-
+- memset (env_ptr, 0, sizeof(env_t));
+- memcpy (env_ptr->data,
+- default_environment,
+- default_environment_size);
+- env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE);
+- gd->env_valid = 1;
+-
++ default_env();
+ }
+ #endif
+
+Index: u-boot/include/environment.h
+===================================================================
+--- u-boot.orig/include/environment.h
++++ u-boot/include/environment.h
+@@ -107,4 +107,7 @@ typedef struct environment_s {
+ unsigned char data[ENV_SIZE]; /* Environment data */
+ } env_t;
+
++
++void default_env(void);
++
+ #endif /* _ENVIRONMENT_H_ */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch b/packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch
new file mode 100644
index 0000000000..23d4b13626
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch
@@ -0,0 +1,22 @@
+common/cmd_nand.c (yes): if the environment variable "dontask" is set to "y" or
+ "Y", non-interactively assume the answer was "yes". In all other cases, ask.
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c
++++ u-boot/common/cmd_nand.c
+@@ -165,8 +165,12 @@ out:
+
+ static int yes(void)
+ {
++ char *s;
+ char c;
+
++ s = getenv("dontask");
++ if (s && (s[0] =='y' || s[0] == 'Y') && !s[1])
++ return 1;
+ c = getc();
+ if (c != 'y' && c != 'Y')
+ return 0;
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch b/packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch
new file mode 100644
index 0000000000..cf12352553
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch
@@ -0,0 +1,139 @@
+common/cmd_nand.c: globalized arg_off_size
+include/util.h: new header to convenience functions, such as arg_off_size
+common/cmd_dynenv.c (do_dynenv): use arg_off_size to sanity-check offset and to
+ allow use of partition name
+common/cmd_dynenv.c (do_dynenv): indicate in no uncertain terms when an update
+ would not work due to Flash bits already cleared
+common/cmd_dynenv.c (do_dynenv): update CFG_ENV_OFFSET after successful "dynenv
+ set", so that we can write the new environment without having to reboot
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c
++++ u-boot/common/cmd_nand.c
+@@ -100,7 +100,7 @@ static inline int str2long(char *p, ulon
+ return (*p != '\0' && *endptr == '\0') ? 1 : 0;
+ }
+
+-static int
++int
+ arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off, ulong *size)
+ {
+ int idx = nand_curr_device;
+Index: u-boot/include/util.h
+===================================================================
+--- /dev/null
++++ u-boot/include/util.h
+@@ -0,0 +1,33 @@
++/*
++ * util.h - Convenience functions
++ *
++ * (C) Copyright 2006-2007 OpenMoko, Inc.
++ * Author: Werner Almesberger <werner@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef UTIL_H
++#define UTIL_H
++
++#include "nand.h"
++
++
++/* common/cmd_nand.c */
++int arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off,
++ ulong *size);
++
++#endif /* UTIL_H */
+Index: u-boot/common/cmd_dynenv.c
+===================================================================
+--- u-boot.orig/common/cmd_dynenv.c
++++ u-boot/common/cmd_dynenv.c
+@@ -23,6 +23,7 @@
+ #include <malloc.h>
+ #include <environment.h>
+ #include <nand.h>
++#include <util.h>
+ #include <asm/errno.h>
+
+ #if defined(CFG_ENV_OFFSET_OOB)
+@@ -39,8 +40,8 @@ int do_dynenv(cmd_tbl_t *cmdtp, int flag
+ if (!buf)
+ return -ENOMEM;
+
++ ret = mtd->read_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
+ if (!strcmp(cmd, "get")) {
+- ret = mtd->read_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
+
+ if (buf[0] == 'E' && buf[1] == 'N' &&
+ buf[2] == 'V' && buf[3] == '0')
+@@ -49,7 +50,8 @@ int do_dynenv(cmd_tbl_t *cmdtp, int flag
+ printf("No dynamic environment marker in OOB block 0\n");
+
+ } else if (!strcmp(cmd, "set")) {
+- unsigned long addr;
++ unsigned long addr, dummy;
++
+ if (argc < 3)
+ goto usage;
+
+@@ -57,7 +59,23 @@ int do_dynenv(cmd_tbl_t *cmdtp, int flag
+ buf[1] = 'N';
+ buf[2] = 'V';
+ buf[3] = '0';
+- addr = simple_strtoul(argv[2], NULL, 16);
++
++ if (arg_off_size(argc-2, argv+2, mtd, &addr, &dummy) < 0) {
++ printf("Offset or partition name expected\n");
++ goto fail;
++ }
++ if (!ret) {
++ uint8_t tmp[4];
++ int i;
++
++ memcpy(&tmp, &addr, 4);
++ for (i = 0; i != 4; i++)
++ if (tmp[i] & ~buf[i+4]) {
++ printf("ERROR: erase OOB block to "
++ "write this value\n");
++ goto fail;
++ }
++ }
+ memcpy(buf+4, &addr, 4);
+
+ printf("%02x %02x %02x %02x - %02x %02x %02x %02x\n",
+@@ -65,6 +83,8 @@ int do_dynenv(cmd_tbl_t *cmdtp, int flag
+ buf[4], buf[5], buf[6], buf[7]);
+
+ ret = mtd->write_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
++ if (!ret)
++ CFG_ENV_OFFSET = addr;
+ } else
+ goto usage;
+
+@@ -72,8 +92,9 @@ int do_dynenv(cmd_tbl_t *cmdtp, int flag
+ return ret;
+
+ usage:
+- free(buf);
+ printf("Usage:\n%s\n", cmdtp->usage);
++fail:
++ free(buf);
+ return 1;
+ }
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch b/packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch
new file mode 100644
index 0000000000..7326c2daa6
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch
@@ -0,0 +1,40 @@
+Index: u-boot/board/neo1973/neo1973.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/gta01.c
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -68,8 +68,12 @@ DECLARE_GLOBAL_DATA_PTR;
+ #define U_M_PDIV 0x2
+ #define U_M_SDIV 0x3
+
++#define VALID_WAKEUP_REASONS (PCF50606_INT1_ONKEYF | PCF50606_INT1_ALARM)
++
+ unsigned int neo1973_wakeup_cause;
+ extern int nobootdelay;
++static unsigned char int1;
++
+
+ static inline void delay (unsigned long loops)
+ {
+@@ -179,6 +183,13 @@ int board_init (void)
+ #error Please define GTA01 version
+ #endif
+
++ i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);
++ int1 = pcf50606_reg_read(PCF50606_REG_INT1);
++ if (!(int1 & VALID_WAKEUP_REASONS) && !neo1973_aux_key_pressed()) {
++ pcf50606_reg_write(PCF50606_REG_OOCC1, PCF50606_OOCC1_GOSTDBY);
++ while (1);
++ }
++
+ /* arch number of SMDK2410-Board */
+ gd->bd->bi_arch_number = MACH_TYPE_NEO1973_GTA01;
+
+@@ -200,7 +211,7 @@ int board_late_init(void)
+ pcf50606_init();
+
+ /* obtain wake-up reason, save INT1 in environment */
+- tmp = pcf50606_reg_read(PCF50606_REG_INT1);
++ tmp = int1; //pcf50606_reg_read(PCF50606_REG_INT1);
+ sprintf(buf, "0x%02x", tmp);
+ setenv("pcf50606_int1", buf);
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch b/packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch
new file mode 100644
index 0000000000..dcb721c8d3
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch
@@ -0,0 +1,56 @@
+drivers/cfb_console.c: include asm/byteorder.h for le32_to_cpu and friends
+ [ shouldn't someone else have found this long ago ? ]
+include/configs/neo1973.h (CONFIG_COMMANDS): add CFG_CMD_BMP
+include/configs/neo1973.h: enable splash screen and BMP support
+include/configs/neo1973.h: remove #if 1 ... #endif around video definitions
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/drivers/cfb_console.c
+===================================================================
+--- u-boot.orig/drivers/cfb_console.c
++++ u-boot/drivers/cfb_console.c
+@@ -191,6 +191,7 @@ CONFIG_VIDEO_HW_CURSOR: - Uses the
+ #if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
+ #include <watchdog.h>
+ #include <bmp_layout.h>
++#include <asm/byteorder.h>
+ #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
+
+ /*****************************************************************************/
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -86,6 +86,7 @@
+ /* CFG_CMD_IRQ | */ \
+ CFG_CMD_BOOTD | \
+ CFG_CMD_CONSOLE | \
++ CFG_CMD_BMP | \
+ CFG_CMD_ASKENV | \
+ CFG_CMD_RUN | \
+ CFG_CMD_ECHO | \
+@@ -244,19 +245,21 @@
+ /* we have a board_late_init() function */
+ #define BOARD_LATE_INIT 1
+
+-#if 1
+ #define CONFIG_VIDEO
+ #define CONFIG_VIDEO_S3C2410
+ #define CONFIG_CFB_CONSOLE
+ #define CONFIG_VIDEO_LOGO
++#define CONFIG_SPLASH_SCREEN
++#define CFG_VIDEO_LOGO_MAX_SIZE (640*480+1024+100) /* 100 = slack */
++#define CONFIG_VIDEO_BMP_GZIP
+ #define CONFIG_VGA_AS_SINGLE_DEVICE
++#define CONFIG_UNZIP
+
+ #define VIDEO_KBD_INIT_FCT 0
+ #define VIDEO_TSTC_FCT serial_tstc
+ #define VIDEO_GETC_FCT serial_getc
+
+ #define LCD_VIDEO_ADDR 0x33d00000
+-#endif
+
+ #define CONFIG_S3C2410_NAND_BBT 1
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch b/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
new file mode 100644
index 0000000000..5a2dd61461
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
@@ -0,0 +1,198 @@
+This patch adds support for CFG_ENV_OFFSET_PATCHED and
+CFG_ENV_OFFSET_OOB.
+
+Both try to solve the problem of fixing the environment location in NAND flash
+at compile time, which doesn't work well if the NAND flash has a bad block at
+exactly that location.
+
+CFG_ENV_OFFSET_PATCHED puts the environment in a global variable. You can then
+use the linker script to put that variable to a fixed location in the u-boot
+image. Then you can use bianry patching during the production flash process.
+
+The idea of CFG_ENV_OFFSET_OOB is to store the environment offset in the NAND
+OOB data of block 0. We can do this in case the vendor makes a guarantee that
+block 0 never is a factory-default bad block.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/common/env_nand.c
+===================================================================
+--- u-boot.orig/common/env_nand.c
++++ u-boot/common/env_nand.c
+@@ -271,6 +271,33 @@
+ ulong total;
+ int ret;
+
++#if defined(CFG_ENV_OFFSET_OOB)
++ struct mtd_info *mtd = &nand_info[0];
++ struct nand_chip *this = mtd->priv;
++ int buf_len;
++ uint8_t *buf;
++
++ buf_len = (1 << this->bbt_erase_shift);
++ buf_len += (buf_len >> this->page_shift) * mtd->oobsize;
++ buf = malloc(buf_len);
++ if (!buf)
++ return;
++
++ nand_read_raw(mtd, buf, 0, mtd->oobblock, mtd->oobsize);
++ if (buf[mtd->oobblock + 8 + 0] == 'E' &&
++ buf[mtd->oobblock + 8 + 1] == 'N' &&
++ buf[mtd->oobblock + 8 + 2] == 'V' &&
++ buf[mtd->oobblock + 8 + 3] == '0') {
++ CFG_ENV_OFFSET = *((unsigned long *) &buf[mtd->oobblock + 8 + 4]);
++ /* fall through to the normal environment reading code below */
++ free(buf);
++ puts("Found Environment offset in OOB..\n");
++ } else {
++ free(buf);
++ return use_default();
++ }
++#endif
++
+ total = CFG_ENV_SIZE;
+ ret = nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);
+ if (ret || total != CFG_ENV_SIZE)
+Index: u-boot/common/environment.c
+===================================================================
+--- u-boot.orig/common/environment.c
++++ u-boot/common/environment.c
+@@ -29,6 +29,12 @@
+ #undef __ASSEMBLY__
+ #include <environment.h>
+
++#if defined(CFG_ENV_OFFSET_PATCHED)
++unsigned long env_offset = CFG_ENV_OFFSET_PATCHED;
++#elif defined(CFG_ENV_OFFSET_OOB)
++unsigned long env_offset = CFG_ENV_OFFSET_OOB;
++#endif
++
+ /*
+ * Handle HOSTS that have prepended
+ * crap on symbol names, not TARGETS.
+Index: u-boot/include/environment.h
+===================================================================
+--- u-boot.orig/include/environment.h
++++ u-boot/include/environment.h
+@@ -70,6 +70,10 @@
+ #endif /* CFG_ENV_IS_IN_FLASH */
+
+ #if defined(CFG_ENV_IS_IN_NAND)
++#if defined(CFG_ENV_OFFSET_PATCHED) || defined(CFG_ENV_OFFSET_OOB)
++extern unsigned long env_offset;
++#define CFG_ENV_OFFSET env_offset
++#else
+ # ifndef CFG_ENV_OFFSET
+ # error "Need to define CFG_ENV_OFFSET when using CFG_ENV_IS_IN_NAND"
+ # endif
+@@ -82,6 +86,7 @@
+ # ifdef CFG_ENV_IS_EMBEDDED
+ # define ENV_IS_EMBEDDED 1
+ # endif
++#endif /* CFG_ENV_NAND_PATCHED */
+ #endif /* CFG_ENV_IS_IN_NAND */
+
+
+Index: u-boot/common/Makefile
+===================================================================
+--- u-boot.orig/common/Makefile
++++ u-boot/common/Makefile
+@@ -31,7 +31,7 @@
+ cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \
+ cmd_cache.o cmd_console.o \
+ cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \
+- cmd_eeprom.o cmd_elf.o cmd_ext2.o \
++ cmd_dynenv.o cmd_eeprom.o cmd_elf.o cmd_ext2.o \
+ cmd_fat.o cmd_fdc.o cmd_fdt.o cmd_fdos.o cmd_flash.o cmd_fpga.o \
+ cmd_i2c.o cmd_ide.o cmd_immap.o cmd_itest.o cmd_jffs2.o \
+ cmd_load.o cmd_log.o \
+Index: u-boot/common/cmd_dynenv.c
+===================================================================
+--- /dev/null
++++ u-boot/common/cmd_dynenv.c
+@@ -0,0 +1,85 @@
++/*
++ * (C) Copyright 2006-2007 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <command.h>
++#include <malloc.h>
++#include <environment.h>
++#include <nand.h>
++#include <asm/errno.h>
++
++#if defined(CFG_ENV_OFFSET_OOB)
++
++int do_dynenv(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ struct mtd_info *mtd = &nand_info[0];
++ int ret, size = 8;
++ uint8_t *buf;
++
++ char *cmd = argv[1];
++
++ buf = malloc(mtd->oobsize);
++ if (!buf)
++ return -ENOMEM;
++
++ if (!strcmp(cmd, "get")) {
++ ret = mtd->read_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
++
++ if (buf[0] == 'E' && buf[1] == 'N' &&
++ buf[2] == 'V' && buf[3] == '0')
++ printf("0x%08x\n", *((u_int32_t *) &buf[4]));
++ else
++ printf("No dynamic environment marker in OOB block 0\n");
++
++ } else if (!strcmp(cmd, "set")) {
++ unsigned long addr;
++ if (argc < 3)
++ goto usage;
++
++ buf[0] = 'E';
++ buf[1] = 'N';
++ buf[2] = 'V';
++ buf[3] = '0';
++ addr = simple_strtoul(argv[2], NULL, 16);
++ memcpy(buf+4, &addr, 4);
++
++ printf("%02x %02x %02x %02x - %02x %02x %02x %02x\n",
++ buf[0], buf[1], buf[2], buf[3],
++ buf[4], buf[5], buf[6], buf[7]);
++
++ ret = mtd->write_oob(mtd, 8, size, (size_t *) &size, (u_char *) buf);
++ } else
++ goto usage;
++
++ free(buf);
++ return ret;
++
++usage:
++ free(buf);
++ printf("Usage:\n%s\n", cmdtp->usage);
++ return 1;
++}
++
++U_BOOT_CMD(dynenv, 3, 1, do_dynenv,
++ "dynenv - dynamically placed (NAND) environment\n",
++ "dynenv set off - set enviromnent offset\n"
++ "dynenv get - get environment offset\n");
++
++#endif /* CFG_ENV_OFFSET_OOB */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch b/packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch
new file mode 100644
index 0000000000..ff8e9cd6fc
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch
@@ -0,0 +1,17 @@
+This patch adds the hex-printing of the file size read by 'ext2load'
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot.git/common/cmd_ext2.c
+===================================================================
+--- u-boot.git.orig/common/cmd_ext2.c 2007-01-02 18:26:17.000000000 +0100
++++ u-boot.git/common/cmd_ext2.c 2007-01-02 18:26:27.000000000 +0100
+@@ -279,7 +279,7 @@
+ /* Loading ok, update default load address */
+ load_addr = addr;
+
+- printf ("\n%ld bytes read\n", filelen);
++ printf ("\n%ld (0x%lx) bytes read\n", filelen, filelen);
+ sprintf(buf, "%lX", filelen);
+ setenv("filesize", buf);
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch b/packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch
new file mode 100644
index 0000000000..715c46ed81
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch
@@ -0,0 +1,229 @@
+board/neo1973/lowlevel_foo.S: http://people.openmoko.org/laforge/tmp/bbt-20070206/lowlevel_foo.S
+board/neo1973/lowlevel_foo.lds: http://people.openmoko.org/laforge/tmp/bbt-20070206/lowlevel_foo.lds
+board/neo1973/Makefile: added building of lowlevel_foo.bin (based on
+ http://people.openmoko.org/laforge/tmp/bbt-20070206/lowlevel_foo.build.sh)
+
+Index: u-boot/board/neo1973/common/lowlevel_foo.S
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/lowlevel_foo.S
+@@ -0,0 +1,82 @@
++
++_start:
++ b reset
++undefvec:
++ b undefvec
++swivec:
++ b swivec
++pabtvec:
++ b pabtvec
++dabtvec:
++ b dabtvec
++rsvdvec:
++ b rsvdvec
++irqvec:
++ b irqvec
++fiqvec:
++ b fiqvec
++
++reset:
++ /*
++ * set the cpu to SVC32 mode
++ */
++ mrs r0,cpsr
++ bic r0,r0,#0x1f
++ orr r0,r0,#0xd3
++ msr cpsr,r0
++
++/* turn off the watchdog */
++#define pWTCON 0x53000000
++#define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
++#define INTSUBMSK 0x4A00001C
++#define CLKDIVN 0x4C000014 /* clock divisor register */
++
++ ldr r0, =pWTCON
++ mov r1, #0x0
++ str r1, [r0]
++
++ mov r1, #0xffffffff
++ ldr r0, =INTMSK
++ str r1, [r0]
++ ldr r1, =0x3ff
++ ldr r0, =INTSUBMSK
++ str r1, [r0]
++
++ /* FCLK:HCLK:PCLK = 1:2:4 */
++ /* default FCLK is 120 MHz ! */
++ ldr r0, =CLKDIVN
++ mov r1, #3
++ str r1, [r0]
++
++ bl cpu_init_crit
++ ldr r0,=TEXT_BASE
++ mov pc, r0
++
++cpu_init_crit:
++ /*
++ * flush v4 I/D caches
++ */
++ mov r0, #0
++ mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
++ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
++
++ /*
++ * disable MMU stuff and caches
++ */
++ mrc p15, 0, r0, c1, c0, 0
++ bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
++ bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
++ orr r0, r0, #0x00000002 @ set bit 2 (A) Align
++ orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
++ mcr p15, 0, r0, c1, c0, 0
++
++ /*
++ * before relocating, we have to setup RAM timing
++ * because memory timing is board-dependend, you will
++ * find a lowlevel_init.S in your board directory.
++ */
++ mov ip, lr
++ bl lowlevel_init
++ mov lr, ip
++ mov pc, lr
++
+Index: u-boot/board/neo1973/common/lowlevel_foo.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/lowlevel_foo.lds
+@@ -0,0 +1,56 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ lowlevel_foo.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/board/neo1973/gta01/Makefile
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/Makefile
++++ u-boot/board/neo1973/gta01/Makefile
+@@ -28,14 +28,31 @@
+ OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o
+ SOBJS := ../common/lowlevel_init.o
+
++.PHONY: all
++
++all: $(LIB) lowevel_foo.bin
++
+ $(LIB): $(OBJS) $(SOBJS)
+ $(AR) crv $@ $(OBJS) $(SOBJS)
+
++lowlevel_foo.o: ../common/lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o ../common/lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o ../common/lowlevel_init.o ../common/lowlevel_foo.lds
++ $(LD) -T ../common/lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ ../common/lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
++
+ clean:
+- rm -f $(SOBJS) $(OBJS)
++ rm -f $(SOBJS) $(OBJS) lowlevel_foo lowlevel_foo.o
+
+ distclean: clean
+- rm -f $(LIB) core *.bak .depend
++ rm -f $(LIB) core *.bak .depend lowlevel_foo.bin
+
+ #########################################################################
+
+Index: u-boot/board/qt2410/Makefile
+===================================================================
+--- u-boot.orig/board/qt2410/Makefile
++++ u-boot/board/qt2410/Makefile
+@@ -28,14 +28,31 @@
+ OBJS := qt2410.o flash.o
+ SOBJS := lowlevel_init.o
+
++.PHONY: all
++
++all: $(LIB) lowevel_foo.bin
++
+ $(LIB): $(OBJS) $(SOBJS)
+ $(AR) crv $@ $(OBJS) $(SOBJS)
+
++lowlevel_foo.o: ../neo1973/common/lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o ../neo1973/common/lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o lowlevel_init.o \
++ ../neo1973/common/lowlevel_foo.lds
++ $(LD) -T ../neo1973/common/lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
+ clean:
+- rm -f $(SOBJS) $(OBJS)
++ rm -f $(SOBJS) $(OBJS) lowlevel_foo lowlevel_foo.o
+
+ distclean: clean
+- rm -f $(LIB) core *.bak .depend
++ rm -f $(LIB) core *.bak .depend lowlevel_foo.bin
+
+ #########################################################################
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch b/packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch
new file mode 100644
index 0000000000..fcf54b9fd1
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch
@@ -0,0 +1,73 @@
+board/neo1973/neo1973.c (board_late_init): moved MMC power-up to separate
+ function
+cpu/arm920t/s3c24x0/mmc.c (mmc_init): call mmc_power_up and return -ENODEV
+ immediately if there is no card
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/board/neo1973/neo1973.c
+===================================================================
+--- u-boot.orig/board/neo1973/neo1973.c
++++ u-boot/board/neo1973/neo1973.c
+@@ -223,6 +223,19 @@ int board_init (void)
+ return 0;
+ }
+
++int mmc_power_up(void)
++{
++#if defined(CONFIG_ARCH_GTA01B_v4)
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* check if sd card is inserted, and power-up if it is */
++ if (gpio->GPFDAT & (1 << 5))
++ return 0;
++ gpio->GPBDAT &= ~(1 << 2);
++#endif /* !CONFIG_ARCH_GTA01B_v4 */
++ return 1;
++}
++
+ int board_late_init(void)
+ {
+ unsigned char tmp;
+@@ -289,14 +302,8 @@ continue_boot:
+ /* switch on the backlight */
+ neo1973_backlight(1);
+
+-#if defined(CONFIG_ARCH_GTA01B_v4)
+- {
+- /* check if sd card is inserted, and power-up if it is */
+- S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
+- if (!(gpio->GPFDAT & (1 << 5)))
+- gpio->GPBDAT &= ~(1 << 2);
+- }
+-#endif
++ /* check if sd card is inserted, and power-up if it is */
++ mmc_power_up();
+
+ return 0;
+ }
+Index: u-boot/cpu/arm920t/s3c24x0/mmc.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/mmc.c
++++ u-boot/cpu/arm920t/s3c24x0/mmc.c
+@@ -381,6 +381,11 @@ static void print_sd_cid(const struct sd
+ cid->crc >> 1, cid->crc & 1);
+ }
+
++int __attribute__((weak)) mmc_power_up(void)
++{
++ return 1;
++}
++
+ int mmc_init(int verbose)
+ {
+ int retries, rc = -ENODEV;
+@@ -393,6 +398,8 @@ int mmc_init(int verbose)
+ debug("mmc_init(PCLK=%u)\n", get_PCLK());
+
+ clk_power->CLKCON |= (1 << 9);
++ if (!mmc_power_up())
++ return -ENODEV;
+
+ /* S3C2410 has some bug that prevents reliable operation at higher speed */
+ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch b/packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch
new file mode 100644
index 0000000000..a5800e2499
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch
@@ -0,0 +1,30 @@
+This patch makes nand_block_checkbad check both the BBT and the actual
+OOB data. This avoids accidently passing blocks as good when BBT and
+OOB markers are not synchronized, e.g., before "nand createbbt".
+
+Experimental.
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/drivers/nand/nand_base.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_base.c
++++ u-boot/drivers/nand/nand_base.c
+@@ -517,11 +517,14 @@ static int nand_block_checkbad (struct m
+ {
+ struct nand_chip *this = mtd->priv;
+
+- if (!this->bbt)
+- return this->block_bad(mtd, ofs, getchip);
++ if (this->block_bad(mtd, ofs, getchip))
++ return 1;
+
+ /* Return info from the table */
+- return nand_isbad_bbt (mtd, ofs, allowbbt);
++ if (this->bbt && nand_isbad_bbt (mtd, ofs, allowbbt))
++ return 1;
++
++ return 0;
+ }
+
+ /**
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch b/packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch
new file mode 100644
index 0000000000..74b79da0a9
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch
@@ -0,0 +1,126 @@
+This patch adds user-requested BBT creation. It includes the following changes:
+
+- common/cmd_nand.c: move yes/no decision to separate function
+- do_nand: ask for confirmation for "nand erase"
+- do_nand: add command "nand createbbt" to erase NAND and create a new BBT
+
+Experimental.
+
+- Werner Almesberger <werner@openmoko.org>
+
+
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c 2007-02-16 23:53:28.000000000 +0100
++++ u-boot/common/cmd_nand.c 2007-02-16 23:53:57.000000000 +0100
+@@ -163,6 +163,17 @@
+ return 0;
+ }
+
++static int yes(void)
++{
++ char c;
++
++ c = getc();
++ if (c != 'y' && c != 'Y')
++ return 0;
++ c = getc();
++ return c == '\r' || c == '\n';
++}
++
+ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+ {
+ int i, dev, ret;
+@@ -228,7 +239,8 @@
+ strncmp(cmd, "read", 4) != 0 && strncmp(cmd, "write", 5) != 0 &&
+ strcmp(cmd, "scrub") != 0 && strcmp(cmd, "markbad") != 0 &&
+ strcmp(cmd, "biterr") != 0 &&
+- strcmp(cmd, "lock") != 0 && strcmp(cmd, "unlock") != 0 )
++ strcmp(cmd, "lock") != 0 && strcmp(cmd, "unlock") != 0 &&
++ strcmp(cmd, "createbbt") != 0 )
+ goto usage;
+
+ /* the following commands operate on the current device */
+@@ -283,13 +295,23 @@
+ "are sure of what you are doing!\n"
+ "\nReally scrub this NAND flash? <y/N>\n");
+
+- if (getc() == 'y' && getc() == '\r') {
++ if (yes()) {
+ opts.scrub = 1;
+ } else {
+ puts("scrub aborted\n");
+ return -1;
+ }
+ }
++ else {
++ if (opts.length == nand->size) {
++ puts("Really erase everything ? <y/N>\n");
++ if (!yes()) {
++ puts("erase aborted\n");
++ return -1;
++ }
++ }
++ }
++
+ ret = nand_erase_opts(nand, &opts);
+ printf("%s\n", ret ? "ERROR" : "OK");
+
+@@ -458,6 +480,33 @@
+ return 0;
+ }
+
++ if (strcmp(cmd, "createbbt") == 0) {
++ struct nand_chip *nand_chip = nand->priv;
++ nand_erase_options_t opts;
++
++ puts("Create BBT and erase everything ? <y/N>\n");
++ if (!yes()) {
++ puts("createbbt aborted\n");
++ return -1;
++ }
++ memset(&opts, 0, sizeof(opts));
++ opts.length = nand->size;
++ if (nand_erase_opts(nand, &opts)) {
++ puts("Erase failed\n");
++ return 1;
++ }
++ nand_chip->options &= ~NAND_DONT_CREATE_BBT;
++ puts("Creating BBT. Please wait ...");
++ if (nand_default_bbt(nand)) {
++ puts("\nFailed\n");
++ return 1;
++ }
++ else {
++ puts("\n");
++ return 0;
++ }
++ }
++
+ usage:
+ printf("Usage:\n%s\n", cmdtp->usage);
+ return 1;
+@@ -478,7 +527,8 @@
+ "nand markbad off - mark bad block at offset (UNSAFE)\n"
+ "nand biterr off - make a bit error at offset (UNSAFE)\n"
+ "nand lock [tight] [status] - bring nand to lock state or display locked pages\n"
+- "nand unlock [offset] [size] - unlock section\n");
++ "nand unlock [offset] [size] - unlock section\n"
++ "nand createbbt - create bad block table\n");
+
+ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
+ ulong offset, ulong addr, char *cmd)
+Index: u-boot/drivers/nand/nand_bbt.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_bbt.c 2007-02-16 23:53:54.000000000 +0100
++++ u-boot/drivers/nand/nand_bbt.c 2007-02-16 23:53:57.000000000 +0100
+@@ -795,7 +795,8 @@
+
+ len = mtd->size >> (this->bbt_erase_shift + 2);
+ /* Allocate memory (2bit per block) */
+- this->bbt = kmalloc (len, GFP_KERNEL);
++ if (!this->bbt)
++ this->bbt = kmalloc (len, GFP_KERNEL);
+ if (!this->bbt) {
+ printk (KERN_ERR "nand_scan_bbt: Out of memory\n");
+ return -ENOMEM;
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch b/packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch
new file mode 100644
index 0000000000..ecce004ca6
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch
@@ -0,0 +1,354 @@
+This patch adds support for 'dynamic partitions'. This basically
+works as follows:
+* The nand code generates a bad-block-table at the first scan of the chip
+* The dynamic partition code calculates the raw partition sizes based on
+ the bad block table. E.g. if you have a partition of size 0x30000, and there are
+ two bad blocks (0x4000 each) in it, the raw size will increase to 0x38000, and the
+ following partitions get shifted towards the end of flash.
+
+Please note that currently the desired partition sizes are stored at compile-time
+in an array in drivers/nand/nand_bbt.c, so this definitely needs to change before
+submitting/merging upstream.
+
+In order to calculate the partiton map (and set mtdparts accordingly), you can use
+the 'dynpart' command at the prompt. Use 'saveenv' to make the setting permanent.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/drivers/nand/nand_bbt.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_bbt.c
++++ u-boot/drivers/nand/nand_bbt.c
+@@ -1044,9 +1044,86 @@
+ switch ((int)res) {
+ case 0x00: return 0;
+ case 0x01: return 1;
++ case 0x03: return 1;
+ case 0x02: return allowbbt ? 0 : 1;
+ }
+ return 1;
+ }
+
++#if defined(CONFIG_NAND_DYNPART)
++
++extern unsigned int dynpart_size[];
++extern char *dynpart_names[];
++
++#define MTDPARTS_MAX_SIZE 512
++
++
++static int skip_offs(const struct nand_chip *this, unsigned int offs)
++{
++ int block = (int) (offs >> (this->bbt_erase_shift - 1));
++ u_int8_t bbt = (this->bbt[block >> 3] >> (block & 0x06)) & 0x03;
++
++ return bbt == 3;
++}
++
++int nand_create_mtd_dynpart(struct mtd_info *mtd)
++{
++ struct nand_chip *this = mtd->priv;
++ int part;
++ char *mtdparts;
++ unsigned int cur_offs = 0;
++
++ mtdparts = malloc(MTDPARTS_MAX_SIZE); /* FIXME: bounds checking */
++ if (!mtdparts)
++ return -ENOMEM;
++
++ sprintf(mtdparts, "mtdparts=" CFG_NAND_DYNPART_MTD_KERNEL_NAME ":");
++
++ for (part = 0; dynpart_size[part] != 0; part++) {
++ unsigned int bb_delta = 0;
++ unsigned int offs = 0;
++ char mtdpart[32];
++
++ for (offs = cur_offs;
++ offs < cur_offs + dynpart_size[part] + bb_delta;
++ offs += mtd->erasesize) {
++ if (skip_offs(this, offs))
++ bb_delta += mtd->erasesize;
++ }
++
++ /*
++ * Absorb bad blocks immediately following this partition also
++ * into the partition, in order to make next partition start
++ * with a good block. This simplifies handling of the
++ * environment partition.
++ */
++ while (offs < this->chipsize && skip_offs(this, offs)) {
++ bb_delta += mtd->erasesize;
++ offs += mtd->erasesize;
++ }
++
++ if (cur_offs + dynpart_size[part] + bb_delta > this->chipsize)
++ dynpart_size[part] = this->chipsize - cur_offs - bb_delta;
++#if 0
++ printf("partition %u: start = 0x%08x, end=%08x size=%08x, size_inc_bb=%08x\n",
++ part, cur_offs, cur_offs + dynpart_size[part] + bb_delta,
++ dynpart_size[part], dynpart_size[part] + bb_delta);
++#endif
++ cur_offs += dynpart_size[part] + bb_delta;
++ sprintf(mtdpart, "0x%.8x(%.16s),", dynpart_size[part] + bb_delta,
++ dynpart_names[part]);
++ mtdpart[sizeof(mtdpart)-1] = '\0';
++ strncat(mtdparts, mtdpart,
++ MTDPARTS_MAX_SIZE-strlen(mtdparts)-1);
++ }
++
++ mtdparts[strlen(mtdparts)-1] = '\0';
++ printf("mtdparts %s\n", mtdparts);
++ setenv("mtdparts", mtdparts);
++
++ free(mtdparts);
++ return 0;
++}
++#endif /* CONFIG_NAND_DYNPART */
++
+ #endif
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -99,7 +99,7 @@
+ CFG_CMD_ELF | \
+ CFG_CMD_MISC | \
+ /* CFG_CMD_USB | */ \
+- /* CFG_CMD_JFFS2 | */ \
++ CFG_CMD_JFFS2 | \
+ CFG_CMD_DIAG | \
+ /* CFG_CMD_HWFLOW | */ \
+ CFG_CMD_SAVES | \
+@@ -212,13 +212,13 @@
+ #define CONFIG_FAT 1
+ #define CONFIG_SUPPORT_VFAT
+
+-#if 0
++#if 1
+ /* JFFS2 driver */
+ #define CONFIG_JFFS2_CMDLINE 1
+ #define CONFIG_JFFS2_NAND 1
+ #define CONFIG_JFFS2_NAND_DEV 0
+-#define CONFIG_JFFS2_NAND_OFF 0x634000
+-#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
+ #endif
+
+ /* ATAG configuration */
+@@ -257,4 +257,9 @@
+
+ #define CONFIG_DRIVER_PCF50606 1
+
++#define MTDIDS_DEFAULT "nand0=neo1973-nand"
++#define MTPARTS_DEFAULT "neo1973-nand:256k(u-boot),16k(u-boot_env),2M(kernel),640k(splash),-(jffs2)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "neo1973-nand"
++#define CONFIG_NAND_DYNPART
++
+ #endif /* __CONFIG_H */
+Index: u-boot/common/cmd_jffs2.c
+===================================================================
+--- u-boot.orig/common/cmd_jffs2.c
++++ u-boot/common/cmd_jffs2.c
+@@ -1841,6 +1841,29 @@
+ return NULL;
+ }
+
++/* Return the 'net size' of the partition (i.e. excluding any bad blocks) */
++unsigned int nand_net_part_size(struct part_info *part)
++{
++ struct mtd_info *mtd;
++ unsigned int offs;
++ unsigned int bb_delta = 0;
++
++ if (!part || !part->dev || !part->dev->id ||
++ part->dev->id->num >= CFG_MAX_NAND_DEVICE)
++ return 0;
++
++ mtd = &nand_info[part->dev->id->num];
++
++ for (offs = part->offset; offs < part->offset + part->size;
++ offs += mtd->erasesize) {
++ if (nand_isbad_bbt(mtd, offs, 0))
++ bb_delta += mtd->erasesize;
++ }
++
++ return part->size - bb_delta;
++}
++
++
+ /***************************************************/
+ /* U-boot commands */
+ /***************************************************/
+@@ -2132,6 +2155,24 @@
+ printf ("Usage:\n%s\n", cmdtp->usage);
+ return 1;
+ }
++
++#if defined(CONFIG_NAND_DYNPART)
++extern int nand_create_mtd_dynpart(struct mtd_info *mtd);
++
++int do_dynpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++#if 0
++ int i = simple_strtoul(argv[1], NULL, 0);
++ if (i >= CFG_MAX_NAND_DEVICE)
++ return -EINVAL;
++#endif
++ nand_create_mtd_dynpart(&nand_info[0]);
++
++ return 0;
++}
++#endif /* CONFIG_NAND_DYNPART */
++
++
+ #endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+ /***************************************************/
+@@ -2197,6 +2238,15 @@
+ "<name> := '(' NAME ')'\n"
+ "<ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel)\n"
+ );
++
++#if defined(CONFIG_NAND_DYNPART)
++U_BOOT_CMD(
++ dynpart, 1, 1, do_dynpart,
++ "dynpart\t- dynamically calculate partition table based on BBT\n",
++ "\n"
++ " - sets 'mtdparts' according to BBT\n");
++#endif /* CONFIG_NAND_DYNPART */
++
+ #endif /* #ifdef CONFIG_JFFS2_CMDLINE */
+
+ /***************************************************/
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c
++++ u-boot/common/cmd_nand.c
+@@ -101,7 +101,7 @@
+ }
+
+ int
+-arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off, ulong *size)
++arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off, ulong *size, int net)
+ {
+ int idx = nand_curr_device;
+ #if (CONFIG_COMMANDS & CFG_CMD_JFFS2) && defined(CONFIG_JFFS2_CMDLINE)
+@@ -122,10 +122,17 @@
+ printf("'%s' is not a number\n", argv[1]);
+ return -1;
+ }
+- if (*size > part->size)
+- *size = part->size;
++ if (*size > part->size) {
++ if (net)
++ *size = nand_net_part_size(part);
++ else
++ *size = part->size;
++ }
+ } else {
+- *size = part->size;
++ if (net)
++ *size = nand_net_part_size(part);
++ else
++ *size = part->size;
+ }
+ idx = dev->id->num;
+ *nand = nand_info[idx];
+@@ -261,7 +268,7 @@
+
+ printf("\nNAND %s: ", scrub ? "scrub" : "erase");
+ /* skip first two or three arguments, look for offset and size */
+- if (arg_off_size(argc - o, argv + o, nand, &off, &size) != 0)
++ if (arg_off_size(argc - o, argv + o, nand, &off, &size, 0) != 0)
+ return 1;
+
+ memset(&opts, 0, sizeof(opts));
+@@ -323,7 +330,7 @@
+
+ read = strncmp(cmd, "read", 4) == 0; /* 1 = read, 0 = write */
+ printf("\nNAND %s: ", read ? "read" : "write");
+- if (arg_off_size(argc - 3, argv + 3, nand, &off, &size) != 0)
++ if (arg_off_size(argc - 3, argv + 3, nand, &off, &size, 1) != 0)
+ return 1;
+
+ s = strchr(cmd, '.');
+@@ -445,7 +452,7 @@
+ }
+
+ if (strcmp(cmd, "unlock") == 0) {
+- if (arg_off_size(argc - 2, argv + 2, nand, &off, &size) < 0)
++ if (arg_off_size(argc - 2, argv + 2, nand, &off, &size, 0) < 0)
+ return 1;
+
+ if (!nand_unlock(nand, off, size)) {
+Index: u-boot/common/cmd_dynenv.c
+===================================================================
+--- u-boot.orig/common/cmd_dynenv.c
++++ u-boot/common/cmd_dynenv.c
+@@ -60,7 +60,7 @@
+ buf[2] = 'V';
+ buf[3] = '0';
+
+- if (arg_off_size(argc-2, argv+2, mtd, &addr, &dummy) < 0) {
++ if (arg_off_size(argc-2, argv+2, mtd, &addr, &dummy, 1) < 0) {
+ printf("Offset or partition name expected\n");
+ goto fail;
+ }
+Index: u-boot/include/util.h
+===================================================================
+--- u-boot.orig/include/util.h
++++ u-boot/include/util.h
+@@ -28,6 +28,6 @@
+
+ /* common/cmd_nand.c */
+ int arg_off_size(int argc, char *argv[], nand_info_t *nand, ulong *off,
+- ulong *size);
++ ulong *size, int net);
+
+ #endif /* UTIL_H */
+Index: u-boot/board/qt2410/qt2410.c
+===================================================================
+--- u-boot.orig/board/qt2410/qt2410.c
++++ u-boot/board/qt2410/qt2410.c
+@@ -126,3 +126,9 @@
+
+ return 0;
+ }
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, 0x4000, 0x200000, 0xa0000, 0x3d5c000-CFG_UBOOT_SIZE, 0 };
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
+Index: u-boot/board/neo1973/gta01/gta01.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/gta01.c
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -429,3 +434,14 @@
+ return 0;
+ }
+
++
++/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000.
++ "initrd" is sized such that it can hold two uncompressed 16 bit 640*480
++ images: 640*480*2*2 = 1228800 < 1245184. */
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, 0x4000, 0x200000, 0xa0000, 0x3d5c000-CFG_UBOOT_SIZE, 0 };
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
++
+Index: u-boot/include/configs/qt2410.h
+===================================================================
+--- u-boot.orig/include/configs/qt2410.h
++++ u-boot/include/configs/qt2410.h
+@@ -283,5 +283,7 @@
+
+ #define MTDIDS_DEFAULT "nand0=qt2410-nand"
+ #define MTPARTS_DEFAULT "qt2410-nand:192k(u-boot),8k(u-boot_env),2M(kernel),2M(splash),-(jffs2)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "qt2410-nand"
++#define CONFIG_NAND_DYNPART
+
+ #endif /* __CONFIG_H */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch b/packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch
new file mode 100644
index 0000000000..b0e9bf4c4b
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch
@@ -0,0 +1,302 @@
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c
++++ u-boot/common/cmd_nand.c
+@@ -392,6 +392,14 @@
+ else
+ ret = nand->write_oob(nand, off, size, &size,
+ (u_char *) addr);
++ } else if (s != NULL && !strcmp(s, ".otp")) {
++ /* read out-of-band data */
++ if (read)
++ ret = nand->read_otp(nand, off, size, &size,
++ (u_char *) addr);
++ else
++ ret = nand->write_otp(nand, off, size, &size,
++ (u_char *) addr);
+ } else {
+ if (read)
+ ret = nand_read(nand, off, &size, (u_char *)addr);
+@@ -527,8 +535,9 @@
+ "nand - NAND sub-system\n",
+ "info - show available NAND devices\n"
+ "nand device [dev] - show or set current device\n"
+- "nand read[.jffs2] - addr off|partition size\n"
+- "nand write[.jffs2] - addr off|partiton size - read/write `size' bytes starting\n"
++ "nand read[.jffs2, .oob, .otp] addr off|partition size\n"
++ "nand write[.jffs2, .oob, .otp] addr off|partiton size\n"
++ " - read/write `size' bytes starting\n"
+ " at offset `off' to/from memory address `addr'\n"
+ "nand erase [clean] [off size] - erase `size' bytes from\n"
+ " offset `off' (entire device if not specified)\n"
+Index: u-boot/cpu/arm920t/s3c24x0/nand.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/nand.c
++++ u-boot/cpu/arm920t/s3c24x0/nand.c
+@@ -205,7 +205,7 @@
+ }
+ #endif
+
+-int board_nand_init(struct nand_chip *nand)
++int s3c24x0_nand_init(struct nand_chip *nand)
+ {
+ u_int32_t cfg;
+ u_int8_t tacls, twrph0, twrph1;
+Index: u-boot/drivers/nand/nand_base.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_base.c
++++ u-boot/drivers/nand/nand_base.c
+@@ -2042,6 +2042,32 @@
+ }
+ #endif
+
++/*
++ * See nand_read_oob and nand_write_oob
++ */
++
++static int nand_read_otp(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, u_char *buf)
++{
++ struct nand_chip *this = mtd->priv;
++
++ if (!this->read_otp)
++ return -ENOSYS;
++ return this->read_otp(mtd, from, len, retlen, buf);
++
++}
++
++static int nand_write_otp(struct mtd_info *mtd, loff_t to, size_t len,
++ size_t *retlen, const u_char *buf)
++{
++ struct nand_chip *this = mtd->priv;
++
++ if (!this->write_otp)
++ return -ENOSYS;
++ return this->write_otp(mtd, to, len, retlen, buf);
++}
++
++
+ /**
+ * single_erease_cmd - [GENERIC] NAND standard block erase command function
+ * @mtd: MTD device structure
+@@ -2613,6 +2639,8 @@
+ mtd->write_ecc = nand_write_ecc;
+ mtd->read_oob = nand_read_oob;
+ mtd->write_oob = nand_write_oob;
++ mtd->read_otp = nand_read_otp;
++ mtd->write_otp = nand_write_otp;
+ /* XXX U-BOOT XXX */
+ #if 0
+ mtd->readv = NULL;
+Index: u-boot/include/linux/mtd/mtd.h
+===================================================================
+--- u-boot.orig/include/linux/mtd/mtd.h
++++ u-boot/include/linux/mtd/mtd.h
+@@ -95,6 +95,9 @@
+ int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
+ int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
+
++ int (*read_otp) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
++ int (*write_otp) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
++
+ /*
+ * Methods to access the protection register area, present in some
+ * flash devices. The user data is one time programmable but the
+Index: u-boot/include/linux/mtd/nand.h
+===================================================================
+--- u-boot.orig/include/linux/mtd/nand.h
++++ u-boot/include/linux/mtd/nand.h
+@@ -307,6 +307,10 @@
+ void (*enable_hwecc)(struct mtd_info *mtd, int mode);
+ void (*erase_cmd)(struct mtd_info *mtd, int page);
+ int (*scan_bbt)(struct mtd_info *mtd);
++ int (*read_otp)(struct mtd_info *mtd, loff_t from,
++ size_t len, size_t *retlen, u_char *buf);
++ int (*write_otp) (struct mtd_info *mtd, loff_t to,
++ size_t len, size_t *retlen, const u_char *buf);
+ int eccmode;
+ int eccsize;
+ int eccbytes;
+Index: u-boot/board/neo1973/gta01/Makefile
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/Makefile
++++ u-boot/board/neo1973/gta01/Makefile
+@@ -25,7 +25,7 @@
+
+ LIB = lib$(BOARD).a
+
+-OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o ../common/bootmenu.o
++OBJS := gta01.o pcf50606.o nand.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o ../common/bootmenu.o
+ SOBJS := ../common/lowlevel_init.o
+
+ .PHONY: all
+Index: u-boot/board/neo1973/gta01/nand.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/nand.c
+@@ -0,0 +1,121 @@
++/*
++ * nand.c - Board-specific NAND setup
++ *
++ * Copyright (C) 2007 by OpenMoko, Inc.
++ * Written by Werner Almesberger <werner@openmoko.org>
++ * All Rights Reserved
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include "config.h" /* nand.h needs NAND_MAX_CHIPS */
++#include "linux/mtd/mtd.h"
++#include "linux/mtd/nand.h"
++#include "asm/errno.h"
++
++
++int s3c24x0_nand_init(struct nand_chip *nand);
++
++
++static void samsung_nand_begin_otp(struct mtd_info *mtd)
++{
++ struct nand_chip *this = mtd->priv;
++
++ /* @@@FIXME: this is ugly - we select the NAND chip to send the
++ mode switch commands, knowing that it will be switched off later */
++ this->select_chip(mtd, 0);
++ /* "magic" mode change */
++ this->cmdfunc(mtd, 0x30, -1, -1);
++ this->cmdfunc(mtd, 0x65, -1, -1);
++}
++
++
++static void samsung_nand_end_otp(struct mtd_info *mtd)
++{
++ struct nand_chip *this = mtd->priv;
++
++ /* read/write deselected the chip so now we need to select again */
++ this->select_chip(mtd, 0);
++ this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
++ this->select_chip(mtd, -1);
++}
++
++
++static loff_t otp_page[] = {
++ 0x15, /* 00-XX-00-00, with XX = 15h-19h */
++ 0x16,
++ 0x17,
++ 0x18,
++ 0x19,
++ 0x1b, /* 00-1B-00-00 */
++};
++
++#define OTP_PAGES (sizeof(otp_page)/sizeof(*otp_page))
++
++
++static int convert_otp_address(loff_t *addr, size_t *len)
++{
++ int page;
++
++ if (*len && *addr >> 9 != (*addr+*len-1) >> 9)
++ return -EINVAL;
++ if (*len > 512)
++ return -EINVAL;
++ page = *addr >> 9;
++ if (page >= OTP_PAGES)
++ return -EINVAL;
++ *addr = otp_page[page] << 9;
++ return 0;
++}
++
++
++static int samsung_nand_read_otp(struct mtd_info *mtd, loff_t from,
++ size_t len, size_t *retlen, u_char *buf)
++{
++ int ret;
++
++ ret = convert_otp_address(&from, &len);
++ if (ret)
++ return ret;
++ samsung_nand_begin_otp(mtd);
++ ret = mtd->read(mtd, from, len, retlen, buf);
++ samsung_nand_end_otp(mtd);
++ return ret;
++}
++
++
++static int samsung_nand_write_otp(struct mtd_info *mtd, loff_t to,
++ size_t len, size_t *retlen, const u_char *buf)
++{
++ int ret;
++
++ ret = convert_otp_address(&to, &len);
++ if (ret)
++ return ret;
++ samsung_nand_begin_otp(mtd);
++ ret = mtd->write(mtd, to, len, retlen, buf);
++ samsung_nand_end_otp(mtd);
++ return ret;
++}
++
++
++int board_nand_init(struct nand_chip *nand)
++{
++ nand->read_otp = samsung_nand_read_otp;
++ nand->write_otp = samsung_nand_write_otp;
++ return s3c24x0_nand_init(nand);
++}
+Index: u-boot/board/neo1973/gta02/nand.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/nand.c
+@@ -0,0 +1,39 @@
++/*
++ * nand.c - Board-specific NAND setup
++ *
++ * Copyright (C) 2007 by OpenMoko, Inc.
++ * Written by Werner Almesberger <werner@openmoko.org>
++ * All Rights Reserved
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include "config.h" /* nand.h needs NAND_MAX_CHIPS */
++#include "linux/mtd/mtd.h"
++#include "linux/mtd/nand.h"
++
++
++int s3c24x0_nand_init(struct nand_chip *nand);
++
++
++/* Add OTP et al later */
++
++
++int board_nand_init(struct nand_chip *nand)
++{
++ return s3c24x0_nand_init(nand);
++}
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch b/packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch
new file mode 100644
index 0000000000..8360409e46
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch
@@ -0,0 +1,23 @@
+Re-introduce the 'nand read.oob' and 'nand write.oob' commands
+that used to exist with the legacy NAND code
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+Index: u-boot.git/common/cmd_nand.c
+===================================================================
+--- u-boot.git.orig/common/cmd_nand.c 2007-01-26 15:41:13.000000000 +0100
++++ u-boot.git/common/cmd_nand.c 2007-01-26 15:49:37.000000000 +0100
+@@ -351,6 +351,14 @@
+ opts.quiet = quiet;
+ ret = nand_write_opts(nand, &opts);
+ }
++ } else if (s != NULL && !strcmp(s, ".oob")) {
++ /* read out-of-band data */
++ if (read)
++ ret = nand->read_oob(nand, off, size, &size,
++ (u_char *) addr);
++ else
++ ret = nand->write_oob(nand, off, size, &size,
++ (u_char *) addr);
+ } else {
+ if (read)
+ ret = nand_read(nand, off, &size, (u_char *)addr);
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch b/packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch
new file mode 100644
index 0000000000..6f6af2c758
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch
@@ -0,0 +1,316 @@
+Index: u-boot/drivers/usbtty.c
+===================================================================
+--- u-boot.orig/drivers/usbtty.c
++++ u-boot/drivers/usbtty.c
+@@ -66,7 +66,7 @@
+ /*
+ * Defines
+ */
+-#define NUM_CONFIGS 1
++#define NUM_CONFIGS 2
+ #define MAX_INTERFACES 2
+ #define NUM_ENDPOINTS 3
+ #define ACM_TX_ENDPOINT 3
+@@ -192,8 +192,7 @@
+ #endif
+ .bConfigurationValue = 1,
+ .iConfiguration = STR_CONFIG,
+- .bmAttributes =
+- BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
++ .bmAttributes = BMATTRIBUTE_RESERVED,
+ .bMaxPower = USBTTY_MAXPOWER
+ },
+ /* Interface 1 */
+@@ -294,6 +293,120 @@
+ .func_dfu = DFU_FUNC_DESC,
+ #endif
+ },
++ {
++ .configuration_desc ={
++ .bLength =
++ sizeof(struct usb_configuration_descriptor),
++ .bDescriptorType = USB_DT_CONFIG,
++ .wTotalLength =
++ cpu_to_le16(sizeof(struct acm_config_desc)
++#ifdef CONFIG_USBD_DFU
++ - sizeof(struct usb_interface_descriptor)
++ - sizeof(struct usb_dfu_func_descriptor)
++#endif
++ ),
++ .bNumInterfaces = NUM_ACM_INTERFACES,
++ .bConfigurationValue = 2,
++ .iConfiguration = STR_CONFIG,
++ .bmAttributes = BMATTRIBUTE_RESERVED,
++ .bMaxPower = 50, /* 100mA */
++ },
++ /* Interface 1 */
++ .interface_desc = {
++ .bLength = sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0,
++ .bAlternateSetting = 0,
++ .bNumEndpoints = 0x01,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
++ .bInterfaceSubClass = COMMUNICATIONS_ACM_SUBCLASS,
++ .bInterfaceProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
++ .iInterface = STR_CTRL_INTERFACE,
++ },
++ .usb_class_header = {
++ .bFunctionLength =
++ sizeof(struct usb_class_header_function_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_HEADER,
++ .bcdCDC = cpu_to_le16(110),
++ },
++ .usb_class_call_mgt = {
++ .bFunctionLength =
++ sizeof(struct usb_class_call_management_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_CMF,
++ .bmCapabilities = 0x00,
++ .bDataInterface = 0x01,
++ },
++ .usb_class_acm = {
++ .bFunctionLength =
++ sizeof(struct usb_class_abstract_control_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_ACMF,
++ .bmCapabilities = 0x00,
++ },
++ .usb_class_union = {
++ .bFunctionLength =
++ sizeof(struct usb_class_union_function_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_UF,
++ .bMasterInterface = 0x00,
++ .bSlaveInterface0 = 0x01,
++ },
++ .notification_endpoint = {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x01 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_INT,
++ .wMaxPacketSize
++ = cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++
++ /* Interface 2 */
++ .data_class_interface = {
++ .bLength =
++ sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x01,
++ .bAlternateSetting = 0x00,
++ .bNumEndpoints = 0x02,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_DATA,
++ .bInterfaceSubClass = DATA_INTERFACE_SUBCLASS_NONE,
++ .bInterfaceProtocol = DATA_INTERFACE_PROTOCOL_NONE,
++ .iInterface = STR_DATA_INTERFACE,
++ },
++ .data_endpoints = {
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x02 | USB_DIR_OUT,
++ .bmAttributes =
++ USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x03 | USB_DIR_IN,
++ .bmAttributes =
++ USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ },
++ /* We don't add the DFU functional descriptor here since we only
++ * want to do DFU in the high-current charging mode for safety reasons */
++ },
++
+ };
+
+ static struct rs232_emu rs232_desc={
+@@ -330,8 +443,7 @@
+ .bNumInterfaces = NUM_GSERIAL_INTERFACES,
+ .bConfigurationValue = 1,
+ .iConfiguration = STR_CONFIG,
+- .bmAttributes =
+- BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
++ .bmAttributes = BMATTRIBUTE_RESERVED,
+ .bMaxPower = USBTTY_MAXPOWER
+ },
+ .interface_desc = {
+@@ -384,6 +496,68 @@
+ },
+ },
+ },
++ {
++ .configuration_desc ={
++ .bLength = sizeof(struct usb_configuration_descriptor),
++ .bDescriptorType = USB_DT_CONFIG,
++ .wTotalLength =
++ cpu_to_le16(sizeof(struct gserial_config_desc)),
++ .bNumInterfaces = NUM_GSERIAL_INTERFACES,
++ .bConfigurationValue = 1,
++ .iConfiguration = STR_CONFIG,
++ .bmAttributes = BMATTRIBUTE_RESERVED,
++ .bMaxPower = 50
++ },
++ .interface_desc = {
++ {
++ .bLength =
++ sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0,
++ .bAlternateSetting = 0,
++ .bNumEndpoints = NUM_ENDPOINTS,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_VENDOR,
++ .bInterfaceSubClass =
++ COMMUNICATIONS_NO_SUBCLASS,
++ .bInterfaceProtocol =
++ COMMUNICATIONS_NO_PROTOCOL,
++ .iInterface = STR_DATA_INTERFACE
++ },
++ },
++ .data_endpoints = {
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x01 | USB_DIR_OUT,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_OUT_PKTSIZE),
++ .bInterval= 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x02 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_IN_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x03 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_INT,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ },
++ },
+ };
+
+ /*
+@@ -679,12 +853,14 @@
+ bus_instance->maxpacketsize = 64;
+ bus_instance->serial_number_str = serial_number;
+
+- /* configuration instance */
+- memset (config_instance, 0,
+- sizeof (struct usb_configuration_instance));
+- config_instance->interfaces = interface_count;
+- config_instance->configuration_descriptor = configuration_descriptor;
+- config_instance->interface_instance_array = interface_instance;
++ /* configuration instances */
++ for (i = 0; i < NUM_CONFIGS; i++) {
++ memset(&config_instance[i], 0, sizeof(config_instance));
++ config_instance[i].interfaces = interface_count;
++ /* FIXME: this breaks for the non-ACM case */
++ config_instance[i].configuration_descriptor = &acm_configuration_descriptors[i];
++ config_instance[i].interface_instance_array = interface_instance;
++ }
+
+ /* interface instance */
+ memset (interface_instance, 0,
+@@ -1043,9 +1219,17 @@
+ usbtty_configured_flag = 0;
+ break;
+ case DEVICE_CONFIGURED:
++ printf("DEVICE_CONFIGURED: %u\n", device->configuration);
++ if (device->configuration == 1)
++ udc_ctrl(UDC_CTRL_500mA_ENABLE, 1);
++ else
++ udc_ctrl(UDC_CTRL_500mA_ENABLE, 0);
+ usbtty_configured_flag = 1;
+ break;
+-
++ case DEVICE_DE_CONFIGURED:
++ printf("DEVICE_DE_CONFIGURED\n");
++ udc_ctrl(UDC_CTRL_500mA_ENABLE, 0);
++ break;
+ case DEVICE_ADDRESS_ASSIGNED:
+ usbtty_init_endpoints ();
+
+Index: u-boot/drivers/usbtty.h
+===================================================================
+--- u-boot.orig/drivers/usbtty.h
++++ u-boot/drivers/usbtty.h
+@@ -60,7 +60,7 @@
+ #define USBTTY_DEVICE_CLASS COMMUNICATIONS_DEVICE_CLASS
+
+ #define USBTTY_BCD_DEVICE 0x00
+-#define USBTTY_MAXPOWER 0x00
++#define USBTTY_MAXPOWER 250 /* 500mA */
+
+ #define STR_LANG 0x00
+ #define STR_MANUFACTURER 0x01
+Index: u-boot/board/neo1973/common/udc.c
+===================================================================
+--- u-boot.orig/board/neo1973/common/udc.c
++++ u-boot/board/neo1973/common/udc.c
+@@ -2,6 +2,7 @@
+ #include <common.h>
+ #include <usbdcore.h>
+ #include <s3c2410.h>
++#include <pcf50606.h>
+
+ void udc_ctrl(enum usbd_event event, int param)
+ {
+@@ -17,6 +18,13 @@
+ gpio->GPBDAT &= ~(1 << 9);
+ #endif
+ break;
++ case UDC_CTRL_500mA_ENABLE:
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4) || \
++ defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
++ defined(CONFIG_ARCH_GTA01B_v4)
++ pcf50606_charge_autofast(param);
++#endif
++ break;
+ default:
+ break;
+ }
+Index: u-boot/include/usbdcore.h
+===================================================================
+--- u-boot.orig/include/usbdcore.h
++++ u-boot/include/usbdcore.h
+@@ -686,8 +686,8 @@
+
+ enum usbd_event {
+ UDC_CTRL_PULLUP_ENABLE,
++ UDC_CTRL_500mA_ENABLE,
+ };
+
+ void udc_ctrl(enum usbd_event event, int param);
+ #endif
+-#endif
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch b/packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch
new file mode 100644
index 0000000000..f32cbde27b
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch
@@ -0,0 +1,137 @@
+Provide a place where the loader can patch the binary, such that it executes a
+command string from RAM. We use this for automated installs, where we can thus
+use the same u-boot binary for all stages.
+
+include/configs/neo1973.h: new option CFG_PREBOOT_OVERRIDE to allow setting of
+ the preboot command in memory
+cpu/arm920t/start.S: added variable "preboot_override" at known location
+ (_start+0x40)
+common/main.c (main_loop): if preboot_override is set, execute the command
+ string found there
+common/env_common.c (env_relocate): if preboot_override is set, always use the
+ default environment
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -77,6 +77,14 @@ _fiq: .word fiq
+ *************************************************************************
+ */
+
++
++/* Must follow the .balign above, so we get a well-known address ! */
++#ifdef CFG_PREBOOT_OVERRIDE
++.globl preboot_override
++preboot_override:
++ .word 0
++#endif
++
+ #ifdef CONFIG_S3C2410_NAND_BOOT
+ .globl booted_from_nand
+ booted_from_nand:
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -207,6 +207,7 @@
+ #define CFG_ENV_IS_IN_NAND 1
+ #define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
+ #define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */
++#define CFG_PREBOOT_OVERRIDE 1 /* allow preboot from memory */
+
+ #define NAND_MAX_CHIPS 1
+ #define CFG_NAND_BASE 0x4e000000
+Index: u-boot/common/main.c
+===================================================================
+--- u-boot.orig/common/main.c
++++ u-boot/common/main.c
+@@ -85,6 +85,11 @@ int do_mdm_init = 0;
+ extern void mdm_init(void); /* defined in board.c */
+ #endif
+
++#ifdef CFG_PREBOOT_OVERRIDE
++extern char *preboot_override;
++#endif
++
++
+ /***************************************************************************
+ * Watch for 'delay' seconds for autoboot stop or autoboot delay string.
+ * returns: 0 - no key string, allow autoboot
+@@ -306,8 +311,8 @@ void main_loop (void)
+ char *s;
+ int bootdelay;
+ #endif
+-#ifdef CONFIG_PREBOOT
+- char *p;
++#if defined(CONFIG_PREBOOT) || defined(CFG_PREBOOT_OVERRIDE)
++ char *p = NULL;
+ #endif
+ #ifdef CONFIG_BOOTCOUNT_LIMIT
+ unsigned long bootcount = 0;
+@@ -364,8 +369,23 @@ void main_loop (void)
+ install_auto_complete();
+ #endif
+
++#if defined(CONFIG_PREBOOT) || defined(CFG_PREBOOT_OVERRIDE)
+ #ifdef CONFIG_PREBOOT
+- if ((p = getenv ("preboot")) != NULL) {
++ p = getenv ("preboot");
++#endif
++#ifdef CFG_PREBOOT_OVERRIDE
++ if (preboot_override) {
++ /* for convenience, preboot_override may end in \n, not \0 */
++ p = strchr(preboot_override, '\n');
++ if (p)
++ *p = 0;
++ /* make sure we can overwrite the load area if we want to */
++ p = strdup(preboot_override);
++ /* clean the image in case we want to flash it */
++ preboot_override = NULL;
++ }
++#endif /* CFG_PREBOOT_OVERRIDE */
++ if (p) {
+ # ifdef CONFIG_AUTOBOOT_KEYED
+ int prev = disable_ctrlc(1); /* disable Control C checking */
+ # endif
+@@ -381,7 +401,7 @@ void main_loop (void)
+ disable_ctrlc(prev); /* restore Control C checking */
+ # endif
+ }
+-#endif /* CONFIG_PREBOOT */
++#endif /* CONFIG_PREBOOT || CFG_PREBOOT_OVERRIDE */
+
+ #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
+ s = getenv ("bootdelay");
+Index: u-boot/common/env_common.c
+===================================================================
+--- u-boot.orig/common/env_common.c
++++ u-boot/common/env_common.c
+@@ -37,6 +37,10 @@
+ # define SHOW_BOOT_PROGRESS(arg)
+ #endif
+
++#ifdef CFG_PREBOOT_OVERRIDE
++extern char *preboot_override;
++#endif
++
+ DECLARE_GLOBAL_DATA_PTR;
+
+ #ifdef CONFIG_AMIGAONEG3SE
+@@ -234,7 +238,14 @@ void env_relocate (void)
+ puts ("*** Warning - bad CRC, using default environment\n\n");
+ SHOW_BOOT_PROGRESS (-1);
+ #endif
++ }
++
++#ifdef CFG_PREBOOT_OVERRIDE
++ if (preboot_override)
++ gd->env_valid = 0;
++#endif
+
++ if (gd->env_valid == 0) {
+ if (sizeof(default_environment) > ENV_SIZE)
+ {
+ puts ("*** Error - default environment is too large\n\n");
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch b/packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch
new file mode 100644
index 0000000000..a1c381a2cf
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch
@@ -0,0 +1,31 @@
+include/configs/neo1973.h: increase heap from 128 kB to 400 kB, for BMP image
+ decompression
+ [ note: increasing it to 512 kB trips over something. note sure what.
+ find out. ]
+include/configs/neo1973.h: raise number of command line arguments from 16 to 64
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -54,7 +54,8 @@
+ /*
+ * Size of malloc() pool
+ */
+-#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 400*1024)
++ /* >> CFG_VIDEO_LOGO_MAX_SIZE */
+ #define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
+
+ /*
+@@ -142,7 +143,7 @@
+ #endif
+ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+ #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+-#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_MAXARGS 64 /* max number of command args */
+ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+ #define CFG_MEMTEST_START 0x30000000 /* memtest works on */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/series b/packages/uboot/u-boot-mkimage-openmoko-native/series
new file mode 100644
index 0000000000..4fc7d1342f
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/series
@@ -0,0 +1,76 @@
+# just some local hacks
+uboot-machtypes.patch
+ext2load_hex.patch
+uboot-mokoversion.patch
+
+# those we want to get mainline
+uboot-s3c2410-warnings-fix.patch
+uboot-strtoul.patch
+uboot-cramfs_but_no_jffs2.patch
+nand-read_write_oob.patch
+uboot-arm920t-gd_in_irq.patch
+uboot-arm920_s3c2410_irq_demux.patch
+uboot-s3c2410-nand.patch
+uboot-cmd_s3c2410.patch
+uboot-s3c2410-mmc.patch
+env_nand_oob.patch
+dynenv-harden.patch
+uboot-s3c2410_fb.patch
+uboot-20061030-qt2410.patch
+uboot-20061030-neo1973.patch
+
+# under construction, but intended for mainline
+uboot-s3c2410-misccr-definitions.patch
+
+boot-from-ram-reloc.patch
+boot-from-ram-and-nand.patch
+wakeup-reason-nand-only.patch
+uboot-neo1973-resume.patch
+
+# this will be somewhat more difficult
+nand-dynamic_partitions.patch
+uboot-s3c2410-norelocate_irqvec_cpy.patch
+uboot-usbtty-acm.patch
+uboot-s3c2410_udc.patch
+
+# those need to be cleaned up
+bbt-create-optional.patch
+nand-createbbt.patch
+dontask.patch
+nand-badisbad.patch
+uboot-bbt-quiet.patch
+
+# splash screen
+raise-limits.patch
+splashimage-command.patch
+cmd-unzip.patch
+enable-splash-bmp.patch
+
+# for automated installation
+preboot-override.patch
+lowlevel_foo.patch
+
+# move these later, once the dust has settled
+default-env.patch
+console-ansi.patch
+boot-menu.patch
+
+# those have to be implemented fully
+uboot-dfu.patch
+uboot-neo1973-defaultenv.patch
+uboot-nand-markbad-reallybad.patch
+usbdcore-multiple_configs.patch
+neo1973-chargefast.patch
+
+uboot-s3c2440.patch
+uboot-smdk2440.patch
+uboot-hxd8.patch
+
+uboot-license.patch
+
+uboot-gta02.patch
+uboot-s3c2443.patch
+uboot-smdk2443.patch
+
+# for review, merge soon
+unbusy-i2c.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch b/packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch
new file mode 100644
index 0000000000..8ea48cf484
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch
@@ -0,0 +1,24 @@
+drivers/cfb_console.c (video_logo): if "splashimage" doesn't contain an
+ address, use its content as a command
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/drivers/cfb_console.c
+===================================================================
+--- u-boot.orig/drivers/cfb_console.c
++++ u-boot/drivers/cfb_console.c
+@@ -1121,7 +1121,13 @@ static void *video_logo (void)
+ ulong addr;
+
+ if ((s = getenv ("splashimage")) != NULL) {
+- addr = simple_strtoul (s, NULL, 16);
++ char *end;
++
++ addr = simple_strtoul (s, &end, 16);
++ if (*end) {
++ run_command(s, 0);
++ return video_fb_address;
++ }
+
+ if (video_display_bitmap (addr, 0, 0) == 0) {
+ return ((void *) (video_fb_address));
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch
new file mode 100644
index 0000000000..7c70244b38
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch
@@ -0,0 +1,2248 @@
+This patch adds neo1973 'board' (FIC Neo1973 phone) support to u-boot.
+Specifically, it adds support for the GTA01v3, GTA01v4, GTA01Bv2 and
+GTA01Bv3 hardware revisions.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2009,6 +2009,14 @@
+ sbc2410x_config: unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
+
++gta01_config \
++gta01v3_config \
++gta01bv2_config \
++gta01bv3_config \
++gta01bv4_config \
++gta01v4_config : unconfig
++ @sh board/neo1973/gta01/split_by_variant.sh $@
++
+ qt2410_config : unconfig
+ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
+
+Index: u-boot/common/main.c
+===================================================================
+--- u-boot.orig/common/main.c
++++ u-boot/common/main.c
+@@ -61,6 +61,7 @@
+ #undef DEBUG_PARSER
+
+ char console_buffer[CFG_CBSIZE]; /* console I/O buffer */
++int nobootdelay;
+
+ #ifndef CONFIG_CMDLINE_EDITING
+ static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen);
+@@ -376,7 +377,7 @@
+
+ debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
+
+- if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
++ if (!nobootdelay && bootdelay >= 0 && s && !abortboot (bootdelay)) {
+ # ifdef CONFIG_AUTOBOOT_KEYED
+ int prev = disable_ctrlc(1); /* disable Control C checking */
+ # endif
+Index: u-boot/drivers/Makefile
+===================================================================
+--- u-boot.orig/drivers/Makefile
++++ u-boot/drivers/Makefile
+@@ -50,6 +50,7 @@
+ usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \
+ videomodes.o w83c553f.o \
+ ks8695eth.o \
++ pcf50606.o \
+ pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
+ rpx_pcmcia.o \
+ fsl_i2c.o s3c2410_fb.o
+Index: u-boot/drivers/pcf50606.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/pcf50606.c
+@@ -0,0 +1,112 @@
++
++#include <common.h>
++
++#ifdef CONFIG_DRIVER_PCF50606
++
++#include <i2c.h>
++#include <pcf50606.h>
++#include <asm/atomic.h>
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++
++#define PCF50606_I2C_ADDR 0x08
++
++void __pcf50606_reg_write(u_int8_t reg, u_int8_t val)
++{
++ i2c_write(PCF50606_I2C_ADDR, reg, 1, &val, 1);
++}
++
++u_int8_t __pcf50606_reg_read(u_int8_t reg)
++{
++ u_int8_t tmp;
++ i2c_read(PCF50606_I2C_ADDR, reg, 1, &tmp, 1);
++ return tmp;
++}
++
++void pcf50606_reg_write(u_int8_t reg, u_int8_t val)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ __pcf50606_reg_write(reg, val);
++ local_irq_restore(flags);
++}
++
++u_int8_t pcf50606_reg_read(u_int8_t reg)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = __pcf50606_reg_read(reg);
++ local_irq_restore(flags);
++
++ return tmp;
++}
++
++void pcf50606_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = __pcf50606_reg_read(reg);
++ __pcf50606_reg_write(reg, (val & mask) | (tmp & ~mask));
++ local_irq_restore(flags);
++}
++
++void pcf50606_reg_clear_bits(u_int8_t reg, u_int8_t bits)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = pcf50606_reg_read(reg);
++ pcf50606_reg_write(reg, (tmp & ~bits));
++ local_irq_restore(flags);
++}
++
++static const u_int8_t regs_valid[] = {
++ PCF50606_REG_OOCS, PCF50606_REG_INT1M, PCF50606_REG_INT2M,
++ PCF50606_REG_INT3M, PCF50606_REG_OOCC1, PCF50606_REG_OOCC2,
++ PCF50606_REG_PSSC, PCF50606_REG_PWROKM, PCF50606_REG_DCDC1,
++ PCF50606_REG_DCDC2, PCF50606_REG_DCDC3, PCF50606_REG_DCDC4,
++ PCF50606_REG_DCDEC1, PCF50606_REG_DCDEC2, PCF50606_REG_DCUDC1,
++ PCF50606_REG_DCUDC2, PCF50606_REG_IOREGC, PCF50606_REG_D1REGC1,
++ PCF50606_REG_D2REGC1, PCF50606_REG_D3REGC1, PCF50606_REG_LPREGC1,
++ PCF50606_REG_LPREGC2, PCF50606_REG_MBCC1, PCF50606_REG_MBCC2,
++ PCF50606_REG_MBCC3, PCF50606_REG_BBCC, PCF50606_REG_ADCC1,
++ PCF50606_REG_ADCC2, PCF50606_REG_ACDC1, PCF50606_REG_BVMC,
++ PCF50606_REG_PWMC1, PCF50606_REG_LEDC1, PCF50606_REG_LEDC2,
++ PCF50606_REG_GPOC1, PCF50606_REG_GPOC2, PCF50606_REG_GPOC3,
++ PCF50606_REG_GPOC4, PCF50606_REG_GPOC5,
++};
++
++
++/* initialize PCF50606 register set */
++void pcf50606_init(void)
++{
++ unsigned long flags;
++ int i;
++
++ local_irq_save(flags);
++ for (i = 0; i < ARRAY_SIZE(regs_valid); i++) {
++ __pcf50606_reg_write(regs_valid[i],
++ pcf50606_initial_regs[regs_valid[i]]);
++ }
++ local_irq_restore(flags);
++}
++
++void pcf50606_charge_autofast(int on)
++{
++ if (on) {
++ printf("Enabling automatic fast charge\n");
++ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1,
++ PCF50606_MBCC1_AUTOFST,
++ PCF50606_MBCC1_AUTOFST);
++ } else {
++ printf("Disabling fast charge\n");
++ pcf50606_reg_write(PCF50606_REG_MBCC1, 0x00);
++ }
++}
++
++#endif /* CONFIG DRIVER_PCF50606 */
+Index: u-boot/include/pcf50606.h
+===================================================================
+--- /dev/null
++++ u-boot/include/pcf50606.h
+@@ -0,0 +1,273 @@
++#ifndef _PCF50606_H
++#define _PCF50606_H
++
++/* Philips PCF50606 Power Managemnt Unit (PMU) driver
++ * (C) 2006-2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ */
++
++enum pfc50606_regs {
++ PCF50606_REG_ID = 0x00,
++ PCF50606_REG_OOCS = 0x01,
++ PCF50606_REG_INT1 = 0x02, /* Interrupt Status */
++ PCF50606_REG_INT2 = 0x03, /* Interrupt Status */
++ PCF50606_REG_INT3 = 0x04, /* Interrupt Status */
++ PCF50606_REG_INT1M = 0x05, /* Interrupt Mask */
++ PCF50606_REG_INT2M = 0x06, /* Interrupt Mask */
++ PCF50606_REG_INT3M = 0x07, /* Interrupt Mask */
++ PCF50606_REG_OOCC1 = 0x08,
++ PCF50606_REG_OOCC2 = 0x09,
++ PCF50606_REG_RTCSC = 0x0a, /* Second */
++ PCF50606_REG_RTCMN = 0x0b, /* Minute */
++ PCF50606_REG_RTCHR = 0x0c, /* Hour */
++ PCF50606_REG_RTCWD = 0x0d, /* Weekday */
++ PCF50606_REG_RTCDT = 0x0e, /* Day */
++ PCF50606_REG_RTCMT = 0x0f, /* Month */
++ PCF50606_REG_RTCYR = 0x10, /* Year */
++ PCF50606_REG_RTCSCA = 0x11, /* Alarm Second */
++ PCF50606_REG_RTCMNA = 0x12, /* Alarm Minute */
++ PCF50606_REG_RTCHRA = 0x13, /* Alarm Hour */
++ PCF50606_REG_RTCWDA = 0x14, /* Alarm Weekday */
++ PCF50606_REG_RTCDTA = 0x15, /* Alarm Day */
++ PCF50606_REG_RTCMTA = 0x16, /* Alarm Month */
++ PCF50606_REG_RTCYRA = 0x17, /* Alarm Year */
++ PCF50606_REG_PSSC = 0x18, /* Power sequencing */
++ PCF50606_REG_PWROKM = 0x19, /* PWROK mask */
++ PCF50606_REG_PWROKS = 0x1a, /* PWROK status */
++ PCF50606_REG_DCDC1 = 0x1b,
++ PCF50606_REG_DCDC2 = 0x1c,
++ PCF50606_REG_DCDC3 = 0x1d,
++ PCF50606_REG_DCDC4 = 0x1e,
++ PCF50606_REG_DCDEC1 = 0x1f,
++ PCF50606_REG_DCDEC2 = 0x20,
++ PCF50606_REG_DCUDC1 = 0x21,
++ PCF50606_REG_DCUDC2 = 0x22,
++ PCF50606_REG_IOREGC = 0x23,
++ PCF50606_REG_D1REGC1 = 0x24,
++ PCF50606_REG_D2REGC1 = 0x25,
++ PCF50606_REG_D3REGC1 = 0x26,
++ PCF50606_REG_LPREGC1 = 0x27,
++ PCF50606_REG_LPREGC2 = 0x28,
++ PCF50606_REG_MBCC1 = 0x29,
++ PCF50606_REG_MBCC2 = 0x2a,
++ PCF50606_REG_MBCC3 = 0x2b,
++ PCF50606_REG_MBCS1 = 0x2c,
++ PCF50606_REG_BBCC = 0x2d,
++ PCF50606_REG_ADCC1 = 0x2e,
++ PCF50606_REG_ADCC2 = 0x2f,
++ PCF50606_REG_ADCS1 = 0x30,
++ PCF50606_REG_ADCS2 = 0x31,
++ PCF50606_REG_ADCS3 = 0x32,
++ PCF50606_REG_ACDC1 = 0x33,
++ PCF50606_REG_BVMC = 0x34,
++ PCF50606_REG_PWMC1 = 0x35,
++ PCF50606_REG_LEDC1 = 0x36,
++ PCF50606_REG_LEDC2 = 0x37,
++ PCF50606_REG_GPOC1 = 0x38,
++ PCF50606_REG_GPOC2 = 0x39,
++ PCF50606_REG_GPOC3 = 0x3a,
++ PCF50606_REG_GPOC4 = 0x3b,
++ PCF50606_REG_GPOC5 = 0x3c,
++ __NUM_PCF50606_REGS
++};
++
++enum pcf50606_reg_oocs {
++ PFC50606_OOCS_ONKEY = 0x01,
++ PCF50606_OOCS_EXTON = 0x02,
++ PCF50606_OOCS_PWROKRST = 0x04,
++ PCF50606_OOCS_BATOK = 0x08,
++ PCF50606_OOCS_BACKOK = 0x10,
++ PCF50606_OOCS_CHGOK = 0x20,
++ PCF50606_OOCS_TEMPOK = 0x40,
++ PCF50606_OOCS_WDTEXP = 0x80,
++};
++
++enum pcf50606_reg_oocc1 {
++ PCF50606_OOCC1_GOSTDBY = 0x01,
++ PCF50606_OOCC1_TOTRST = 0x02,
++ PCF50606_OOCC1_CLK32ON = 0x04,
++ PCF50606_OOCC1_WDTRST = 0x08,
++ PCF50606_OOCC1_RTCWAK = 0x10,
++ PCF50606_OOCC1_CHGWAK = 0x20,
++ PCF50606_OOCC1_EXTONWAK_HIGH = 0x40,
++ PCF50606_OOCC1_EXTONWAK_LOW = 0x80,
++ PCF50606_OOCC1_EXTONWAK_NO_WAKEUP = 0x3f,
++};
++
++enum pcf50606_reg_oocc2 {
++ PCF50606_OOCC2_ONKEYDB_NONE = 0x00,
++ PCF50606_OOCC2_ONKEYDB_14ms = 0x01,
++ PCF50606_OOCC2_ONKEYDB_62ms = 0x02,
++ PCF50606_OOCC2_ONKEYDB_500ms = 0x03,
++ PCF50606_OOCC2_EXTONDB_NONE = 0x00,
++ PCF50606_OOCC2_EXTONDB_14ms = 0x04,
++ PCF50606_OOCC2_EXTONDB_62ms = 0x08,
++ PCF50606_OOCC2_EXTONDB_500ms = 0x0c,
++};
++
++enum pcf50606_reg_int1 {
++ PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */
++ PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */
++ PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */
++ PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */
++ PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */
++ PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */
++ PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */
++};
++
++enum pcf50606_reg_int2 {
++ PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */
++ PCF50606_INT2_CHGRM = 0x02, /* Charger removed */
++ PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */
++ PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */
++ PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */
++ PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */
++ PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */
++ PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */
++};
++
++enum pcf50606_reg_int3 {
++ PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */
++ PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */
++ PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */
++ PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */
++ PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */
++ PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */
++};
++
++/* used by PSSC, PWROKM, PWROKS, */
++enum pcf50606_regu {
++ PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */
++ PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */
++ PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */
++ PCF50606_REGU_IO = 0x08, /* IO in phase 2 */
++ PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */
++ PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */
++ PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */
++ PCF50606_REGU_LP = 0x80, /* LP in phase 2 */
++};
++
++enum pcf50606_reg_dcdc4 {
++ PCF50606_DCDC4_MODE_AUTO = 0x00,
++ PCF50606_DCDC4_MODE_PWM = 0x01,
++ PCF50606_DCDC4_MODE_PCF = 0x02,
++ PCF50606_DCDC4_OFF_FLOAT = 0x00,
++ PCF50606_DCDC4_OFF_BYPASS = 0x04,
++ PCF50606_DCDC4_OFF_PULLDOWN = 0x08,
++ PCF50606_DCDC4_CURLIM_500mA = 0x00,
++ PCF50606_DCDC4_CURLIM_750mA = 0x10,
++ PCF50606_DCDC4_CURLIM_1000mA = 0x20,
++ PCF50606_DCDC4_CURLIM_1250mA = 0x30,
++ PCF50606_DCDC4_TOGGLE = 0x40,
++ PCF50606_DCDC4_REGSEL_DCDC2 = 0x80,
++};
++
++enum pcf50606_reg_dcdec2 {
++ PCF50606_DCDEC2_MODE_AUTO = 0x00,
++ PCF50606_DCDEC2_MODE_PWM = 0x01,
++ PCF50606_DCDEC2_MODE_PCF = 0x02,
++ PCF50606_DCDEC2_OFF_FLOAT = 0x00,
++ PCF50606_DCDEC2_OFF_BYPASS = 0x04,
++};
++
++enum pcf50606_reg_dcudc2 {
++ PCF50606_DCUDC2_MODE_AUTO = 0x00,
++ PCF50606_DCUDC2_MODE_PWM = 0x01,
++ PCF50606_DCUDC2_MODE_PCF = 0x02,
++ PCF50606_DCUDC2_OFF_FLOAT = 0x00,
++ PCF50606_DCUDC2_OFF_BYPASS = 0x04,
++};
++
++enum pcf50606_reg_adcc1 {
++ PCF50606_ADCC1_TSCMODACT = 0x01,
++ PCF50606_ADCC1_TSCMODSTB = 0x02,
++ PCF50606_ADCC1_TRATSET = 0x04,
++ PCF50606_ADCC1_NTCSWAPE = 0x08,
++ PCF50606_ADCC1_NTCSWAOFF = 0x10,
++ PCF50606_ADCC1_EXTSYNCBREAK = 0x20,
++ /* reserved */
++ PCF50606_ADCC1_TSCINT = 0x80,
++};
++
++enum pcf50606_reg_adcc2 {
++ PCF50606_ADCC2_ADCSTART = 0x01,
++ /* see enum pcf50606_adcc2_adcmux */
++ PCF50606_ADCC2_SYNC_NONE = 0x00,
++ PCF50606_ADCC2_SYNC_TXON = 0x20,
++ PCF50606_ADCC2_SYNC_PWREN1 = 0x40,
++ PCF50606_ADCC2_SYNC_PWREN2 = 0x60,
++ PCF50606_ADCC2_RES_10BIT = 0x00,
++ PCF50606_ADCC2_RES_8BIT = 0x80,
++};
++
++#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1)
++
++#define ADCMUX_SHIFT 1
++enum pcf50606_adcc2_adcmux {
++ PCF50606_ADCMUX_BATVOLT_RES = 0x0 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_BATVOLT_SUBTR = 0x1 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_ADCIN1_RES = 0x2 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_ADCIN1_SUBTR = 0x3 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_BATTEMP = 0x4 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_ADCIN2 = 0x5 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_ADCIN3 = 0x6 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_ADCIN3_RATIO = 0x7 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_XPOS = 0x8 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_YPOS = 0x9 << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_P1 = 0xa << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_P2 = 0xb << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_BATVOLT_ADCIN1 = 0xc << ADCMUX_SHIFT,
++ PCF50606_ADCMUX_XY_SEQUENCE = 0xe << ADCMUX_SHIFT,
++ PCF50606_P1_P2_RESISTANCE = 0xf << ADCMUX_SHIFT,
++};
++
++enum pcf50606_adcs2 {
++ PCF50606_ADCS2_ADCRDY = 0x80,
++};
++
++enum pcf50606_reg_mbcc1 {
++ PCF50606_MBCC1_CHGAPE = 0x01,
++ PCF50606_MBCC1_AUTOFST = 0x02,
++#define PCF50606_MBCC1_CHGMOD_MASK 0x1c
++#define PCF50606_MBCC1_CHGMOD_SHIFT 2
++ PCF50606_MBCC1_CHGMOD_QUAL = 0x00,
++ PCF50606_MBCC1_CHGMOD_PRE = 0x04,
++ PCF50606_MBCC1_CHGMOD_TRICKLE = 0x08,
++ PCF50606_MBCC1_CHGMOD_FAST_CCCV = 0x0c,
++ PCF50606_MBCC1_CHGMOD_FAST_NOCC = 0x10,
++ PCF50606_MBCC1_CHGMOD_FAST_NOCV = 0x14,
++ PCF50606_MBCC1_CHGMOD_FAST_SW = 0x18,
++ PCF50606_MBCC1_CHGMOD_IDLE = 0x1c,
++ PCF50606_MBCC1_DETMOD_LOWCHG = 0x20,
++ PCF50606_MBCC1_DETMOD_WDRST = 0x40,
++};
++
++enum pcf50606_reg_bvmc {
++ PCF50606_BVMC_LOWBAT = 0x01,
++ PCF50606_BVMC_THRSHLD_NULL = 0x00,
++ PCF50606_BVMC_THRSHLD_2V8 = 0x02,
++ PCF50606_BVMC_THRSHLD_2V9 = 0x04,
++ PCF50606_BVMC_THRSHLD_3V = 0x08,
++ PCF50606_BVMC_THRSHLD_3V1 = 0x08,
++ PCF50606_BVMC_THRSHLD_3V2 = 0x0a,
++ PCF50606_BVMC_THRSHLD_3V3 = 0x0c,
++ PCF50606_BVMC_THRSHLD_3V4 = 0x0e,
++ PCF50606_BVMC_DISDB = 0x10,
++};
++
++/* this is to be provided by the board implementation */
++extern const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS];
++
++void pcf50606_reg_write(u_int8_t reg, u_int8_t val);
++
++u_int8_t pcf50606_reg_read(u_int8_t reg);
++
++void pcf50606_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val);
++void pcf50606_reg_clear_bits(u_int8_t reg, u_int8_t bits);
++
++void pcf50606_init(void);
++void pcf50606_charge_autofast(int on);
++
++#endif /* _PCF50606_H */
++
+Index: u-boot/board/neo1973/common/cmd_neo1973.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/cmd_neo1973.c
+@@ -0,0 +1,99 @@
++/*
++ * (C) Copyright 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/*
++ * Boot support
++ */
++#include <common.h>
++#include <command.h>
++#include <net.h> /* for print_IPaddr */
++#include <s3c2410.h>
++
++#include "neo1973.h"
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#if (CONFIG_COMMANDS & CFG_CMD_BDI)
++
++int do_neo1973 ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ int i;
++
++ if (!strcmp(argv[1], "info")) {
++ printf("FIC Neo1973 Hardware Revision 0x%04x\n", get_board_rev());
++ } else if (!strcmp(argv[1], "power-off")) {
++ neo1973_poweroff();
++ } else if (!strcmp(argv[1], "charger") || !strcmp(argv[1], "charge")) {
++ if (argc < 3)
++ goto out_help;
++ if (!strcmp(argv[2], "status") || !strcmp(argv[2], "state")) {
++ printf("%s\n", neo1973_get_charge_status());
++ } else if (!strcmp(argv[2], "autofast")) {
++ neo1973_set_charge_mode(NEO1973_CHGCMD_AUTOFAST);
++ } else if (!strcmp(argv[2], "!autofast")) {
++ neo1973_set_charge_mode(NEO1973_CHGCMD_NO_AUTOFAST);
++ } else if (!strcmp(argv[2], "off")) {
++ neo1973_set_charge_mode(NEO1973_CHGCMD_OFF);
++ } else if (!strcmp(argv[2], "fast")) {
++ neo1973_set_charge_mode(NEO1973_CHGCMD_FAST);
++ } else
++ goto out_help;
++ } else if (!strcmp(argv[1], "backlight")) {
++ if (argc < 3)
++ goto out_help;
++ if (!strcmp(argv[2], "on"))
++ neo1973_backlight(1);
++ else
++ neo1973_backlight(0);
++ } else if (!strcmp(argv[1], "vibrator")) {
++ if (argc < 3)
++ goto out_help;
++ if (!strcmp(argv[2], "on"))
++ neo1973_vibrator(1);
++ else
++ neo1973_vibrator(0);
++ } else {
++out_help:
++ printf("Usage:\n%s\n", cmdtp->usage);
++ return 1;
++ }
++
++ return 0;
++}
++
++/* -------------------------------------------------------------------- */
++
++U_BOOT_CMD(
++ neo1973, 4, 1, do_neo1973,
++ "neo1973 - phone specific commands\n",
++ "neo1973 info - display phone informantion\n"
++ "neo1973 power-off - switch off the phone\n"
++ "neo1973 charger status - display charger status\n"
++ "neo1973 charger autofast - enable automatic fast (500mA) charging\n"
++ "neo1973 charger !autofast - disable automatic fast (500mA) charging\n"
++ "neo1973 charger fast - enable fast (500mA) charging\n"
++ "neo1973 charger off - disable charging\n"
++ "neo1973 backlight (on|off) - switch backlight on or off\n"
++ "neo1973 vibrator (on|off) - switch vibrator on or off\n"
++);
++#endif /* CFG_CMD_BDI */
+Index: u-boot/board/neo1973/common/jbt6k74.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/jbt6k74.c
+@@ -0,0 +1,420 @@
++/* u-boot driver for the tpo JBT6K74-AS LCM ASIC
++ *
++ * Copyright (C) 2006-2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ * All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++#include <common.h>
++#include <spi.h>
++#include <video_fb.h>
++#include <asm/errno.h>
++#include <s3c2410.h>
++#include "jbt6k74.h"
++
++#if 0
++#define DEBUGP(x, args...) printf("%s: " x, __FUNCTION__, ## args);
++#define DEBUGPC(x, args...) printf(x, ## args);
++#else
++#define DEBUGP(x, args...) do { } while (0)
++#define DEBUGPC(x, args...) do { } while (0)
++#endif
++
++
++enum jbt_register {
++ JBT_REG_SLEEP_IN = 0x10,
++ JBT_REG_SLEEP_OUT = 0x11,
++
++ JBT_REG_DISPLAY_OFF = 0x28,
++ JBT_REG_DISPLAY_ON = 0x29,
++
++ JBT_REG_RGB_FORMAT = 0x3a,
++ JBT_REG_QUAD_RATE = 0x3b,
++
++ JBT_REG_POWER_ON_OFF = 0xb0,
++ JBT_REG_BOOSTER_OP = 0xb1,
++ JBT_REG_BOOSTER_MODE = 0xb2,
++ JBT_REG_BOOSTER_FREQ = 0xb3,
++ JBT_REG_OPAMP_SYSCLK = 0xb4,
++ JBT_REG_VSC_VOLTAGE = 0xb5,
++ JBT_REG_VCOM_VOLTAGE = 0xb6,
++ JBT_REG_EXT_DISPL = 0xb7,
++ JBT_REG_OUTPUT_CONTROL = 0xb8,
++ JBT_REG_DCCLK_DCEV = 0xb9,
++ JBT_REG_DISPLAY_MODE1 = 0xba,
++ JBT_REG_DISPLAY_MODE2 = 0xbb,
++ JBT_REG_DISPLAY_MODE = 0xbc,
++ JBT_REG_ASW_SLEW = 0xbd,
++ JBT_REG_DUMMY_DISPLAY = 0xbe,
++ JBT_REG_DRIVE_SYSTEM = 0xbf,
++
++ JBT_REG_SLEEP_OUT_FR_A = 0xc0,
++ JBT_REG_SLEEP_OUT_FR_B = 0xc1,
++ JBT_REG_SLEEP_OUT_FR_C = 0xc2,
++ JBT_REG_SLEEP_IN_LCCNT_D = 0xc3,
++ JBT_REG_SLEEP_IN_LCCNT_E = 0xc4,
++ JBT_REG_SLEEP_IN_LCCNT_F = 0xc5,
++ JBT_REG_SLEEP_IN_LCCNT_G = 0xc6,
++
++ JBT_REG_GAMMA1_FINE_1 = 0xc7,
++ JBT_REG_GAMMA1_FINE_2 = 0xc8,
++ JBT_REG_GAMMA1_INCLINATION = 0xc9,
++ JBT_REG_GAMMA1_BLUE_OFFSET = 0xca,
++
++ JBT_REG_BLANK_CONTROL = 0xcf,
++ JBT_REG_BLANK_TH_TV = 0xd0,
++ JBT_REG_CKV_ON_OFF = 0xd1,
++ JBT_REG_CKV_1_2 = 0xd2,
++ JBT_REG_OEV_TIMING = 0xd3,
++ JBT_REG_ASW_TIMING_1 = 0xd4,
++ JBT_REG_ASW_TIMING_2 = 0xd5,
++
++ JBT_REG_HCLOCK_VGA = 0xec,
++ JBT_REG_HCLOCK_QVGA = 0xed,
++
++};
++
++static const char *jbt_state_names[] = {
++ [JBT_STATE_DEEP_STANDBY] = "deep-standby",
++ [JBT_STATE_SLEEP] = "sleep",
++ [JBT_STATE_NORMAL] = "normal",
++};
++
++#define GTA01_SCLK (1 << 7) /* GPG7 */
++#define GTA01_MOSI (1 << 6) /* GPG6 */
++#define GTA01_MISO (1 << 5) /* GPG5 */
++#define GTA01_CS (1 << 3) /* GPG3 */
++
++#define SPI_READ ((immr->GPGDAT & GTA01_MISO) != 0)
++
++#define SPI_CS(bit) if (bit) gpio->GPGDAT |= GTA01_CS; \
++ else gpio->GPGDAT &= ~GTA01_CS
++
++#define SPI_SDA(bit) if (bit) gpio->GPGDAT |= GTA01_MOSI; \
++ else gpio->GPGDAT &= ~GTA01_MOSI
++
++#define SPI_SCL(bit) if (bit) gpio->GPGDAT |= GTA01_SCLK; \
++ else gpio->GPGDAT &= ~GTA01_SCLK
++
++/* 150uS minimum clock cycle, we have two of this plus our other
++ * instructions */
++#define SPI_DELAY udelay(100) /* 200uS */
++
++
++#define JBT_TX_BUF_SIZE
++struct jbt_info {
++ enum jbt_state state;
++ u_int16_t tx_buf[4];
++ struct spi_device *spi_dev;
++};
++
++static struct jbt_info _jbt, *jbt = &_jbt;
++
++static int jbt_spi_xfer(int wordnum, int bitlen, u_int16_t *dout)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ u_int16_t tmpdout = 0;
++ int i, j;
++
++ DEBUGP("spi_xfer: dout %08X wordnum %u bitlen %d\n",
++ *(uint *)dout, wordnum, bitlen);
++
++ SPI_CS(0);
++
++ for (i = 0; i < wordnum; i ++) {
++ tmpdout = dout[i];
++
++ for (j = 0; j < bitlen; j++) {
++ SPI_SCL(0);
++ if (tmpdout & (1 << bitlen-1)) {
++ SPI_SDA(1);
++ DEBUGPC("1");
++ } else {
++ SPI_SDA(0);
++ DEBUGPC("0");
++ }
++ SPI_DELAY;
++ SPI_SCL(1);
++ SPI_DELAY;
++ tmpdout <<= 1;
++ }
++ DEBUGPC(" ");
++ }
++ DEBUGPC("\n");
++
++ SPI_CS(1);
++
++ return 0;
++}
++
++#define JBT_COMMAND 0x000
++#define JBT_DATA 0x100
++
++static int jbt_reg_write_nodata(struct jbt_info *jbt, u_int8_t reg)
++{
++ int rc;
++
++ jbt->tx_buf[0] = JBT_COMMAND | reg;
++
++ rc = jbt_spi_xfer(1, 9, jbt->tx_buf);
++
++ return rc;
++}
++
++
++static int jbt_reg_write(struct jbt_info *jbt, u_int8_t reg, u_int8_t data)
++{
++ int rc;
++
++ jbt->tx_buf[0] = JBT_COMMAND | reg;
++ jbt->tx_buf[1] = JBT_DATA | data;
++
++ rc = jbt_spi_xfer(2, 9, jbt->tx_buf);
++
++ return rc;
++}
++
++static int jbt_reg_write16(struct jbt_info *jbt, u_int8_t reg, u_int16_t data)
++{
++ int rc;
++
++ jbt->tx_buf[0] = JBT_COMMAND | reg;
++ jbt->tx_buf[1] = JBT_DATA | (data >> 8);
++ jbt->tx_buf[2] = JBT_DATA | (data & 0xff);
++
++ rc = jbt_spi_xfer(3, 9, jbt->tx_buf);
++
++ return rc;
++}
++
++static int jbt_init_regs(struct jbt_info *jbt)
++{
++ int rc;
++
++ DEBUGP("entering\n");
++
++ rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE1, 0x01);
++ rc |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE2, 0x00);
++ rc |= jbt_reg_write(jbt, JBT_REG_RGB_FORMAT, 0x60);
++ rc |= jbt_reg_write(jbt, JBT_REG_DRIVE_SYSTEM, 0x10);
++ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_OP, 0x56);
++ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_MODE, 0x33);
++ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_FREQ, 0x11);
++ rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_FREQ, 0x11);
++ rc |= jbt_reg_write(jbt, JBT_REG_OPAMP_SYSCLK, 0x02);
++ rc |= jbt_reg_write(jbt, JBT_REG_VSC_VOLTAGE, 0x2b);
++ rc |= jbt_reg_write(jbt, JBT_REG_VCOM_VOLTAGE, 0x40);
++ rc |= jbt_reg_write(jbt, JBT_REG_EXT_DISPL, 0x03);
++ rc |= jbt_reg_write(jbt, JBT_REG_DCCLK_DCEV, 0x04);
++ rc |= jbt_reg_write(jbt, JBT_REG_ASW_SLEW, 0x02);
++ rc |= jbt_reg_write(jbt, JBT_REG_DUMMY_DISPLAY, 0x00);
++
++ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_A, 0x11);
++ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_B, 0x11);
++ rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_C, 0x11);
++ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_D, 0x2040);
++ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_E, 0x60c0);
++ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_F, 0x1020);
++ rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_G, 0x60c0);
++
++ rc |= jbt_reg_write16(jbt, JBT_REG_GAMMA1_FINE_1, 0x5533);
++ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_FINE_2, 0x00);
++ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_INCLINATION, 0x00);
++ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00);
++ rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00);
++
++ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_VGA, 0x1f0);
++ rc |= jbt_reg_write(jbt, JBT_REG_BLANK_CONTROL, 0x02);
++ rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV, 0x0804);
++ rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV, 0x0804);
++
++ rc |= jbt_reg_write(jbt, JBT_REG_CKV_ON_OFF, 0x01);
++ rc |= jbt_reg_write16(jbt, JBT_REG_CKV_1_2, 0x0000);
++
++ rc |= jbt_reg_write16(jbt, JBT_REG_OEV_TIMING, 0x0d0e);
++ rc |= jbt_reg_write16(jbt, JBT_REG_ASW_TIMING_1, 0x11a4);
++ rc |= jbt_reg_write(jbt, JBT_REG_ASW_TIMING_2, 0x0e);
++
++#if 0
++ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_QVGA, 0x00ff);
++ rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_QVGA, 0x00ff);
++#endif
++
++ return rc;
++}
++
++static int standby_to_sleep(struct jbt_info *jbt)
++{
++ int rc;
++
++ DEBUGP("entering\n");
++
++ /* three times command zero */
++ rc = jbt_reg_write_nodata(jbt, 0x00);
++ udelay(1000);
++ rc = jbt_reg_write_nodata(jbt, 0x00);
++ udelay(1000);
++ rc = jbt_reg_write_nodata(jbt, 0x00);
++ udelay(1000);
++
++ /* deep standby out */
++ rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x17);
++
++ return rc;
++}
++
++static int sleep_to_normal(struct jbt_info *jbt)
++{
++ int rc;
++ DEBUGP("entering\n");
++
++ /* RGB I/F on, RAM wirte off, QVGA through, SIGCON enable */
++ rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x80);
++
++ /* Quad mode off */
++ rc |= jbt_reg_write(jbt, JBT_REG_QUAD_RATE, 0x00);
++
++ /* AVDD on, XVDD on */
++ rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x16);
++
++ /* Output control */
++ rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0xfff9);
++
++ /* Sleep mode off */
++ rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT);
++
++ /* initialize register set */
++ rc |= jbt_init_regs(jbt);
++ return rc;
++}
++
++static int normal_to_sleep(struct jbt_info *jbt)
++{
++ int rc;
++ DEBUGP("entering\n");
++
++ rc = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
++ rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8002);
++ rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN);
++
++ return rc;
++}
++
++static int sleep_to_standby(struct jbt_info *jbt)
++{
++ DEBUGP("entering\n");
++ return jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00);
++}
++
++/* frontend function */
++int jbt6k74_enter_state(enum jbt_state new_state)
++{
++ int rc = -EINVAL;
++
++ DEBUGP("entering(old_state=%u, new_state=%u)\n", jbt->state, new_state);
++
++ switch (jbt->state) {
++ case JBT_STATE_DEEP_STANDBY:
++ switch (new_state) {
++ case JBT_STATE_DEEP_STANDBY:
++ rc = 0;
++ break;
++ case JBT_STATE_SLEEP:
++ rc = standby_to_sleep(jbt);
++ break;
++ case JBT_STATE_NORMAL:
++ /* first transition into sleep */
++ rc = standby_to_sleep(jbt);
++ /* then transition into normal */
++ rc |= sleep_to_normal(jbt);
++ break;
++ }
++ break;
++ case JBT_STATE_SLEEP:
++ switch (new_state) {
++ case JBT_STATE_SLEEP:
++ rc = 0;
++ break;
++ case JBT_STATE_DEEP_STANDBY:
++ rc = sleep_to_standby(jbt);
++ break;
++ case JBT_STATE_NORMAL:
++ rc = sleep_to_normal(jbt);
++ break;
++ }
++ break;
++ case JBT_STATE_NORMAL:
++ switch (new_state) {
++ case JBT_STATE_NORMAL:
++ rc = 0;
++ break;
++ case JBT_STATE_DEEP_STANDBY:
++ /* first transition into sleep */
++ rc = normal_to_sleep(jbt);
++ /* then transition into deep standby */
++ rc |= sleep_to_standby(jbt);
++ break;
++ case JBT_STATE_SLEEP:
++ rc = normal_to_sleep(jbt);
++ break;
++ }
++ break;
++ }
++
++ return rc;
++}
++
++int jbt6k74_display_onoff(int on)
++{
++ DEBUGP("entering\n");
++ if (on)
++ return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
++ else
++ return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
++}
++
++int jbt6k74_init(void)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* initialize SPI for GPIO bitbang */
++ gpio->GPGCON &= 0xffff033f;
++ gpio->GPGCON |= 0x00005440;
++
++ /* get LCM out of reset */
++ gpio->GPCDAT |= (1 << 6);
++
++ /* according to data sheet: wait 50ms (Tpos of LCM). However, 50ms
++ * seems unreliable with later LCM batches, increasing to 90ms */
++ udelay(90000);
++
++ return 0;
++}
++
++void board_video_init(GraphicDevice *pGD)
++{
++ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
++
++ lcd->LCDCON1 = 0x00000178; /* CLKVAL=1, BPPMODE=16bpp, TFT, ENVID=0 */
++
++ lcd->LCDCON2 = 0x019fc3c1;
++ lcd->LCDCON3 = 0x0039df67;
++ lcd->LCDCON4 = 0x00000007;
++ lcd->LCDCON5 = 0x0001cf09;
++ lcd->LPCSEL = 0x00000000;
++}
+Index: u-boot/board/neo1973/common/jbt6k74.h
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/jbt6k74.h
+@@ -0,0 +1,14 @@
++#ifndef _JBT6K74_H
++#define _JBT6K74_H
++
++enum jbt_state {
++ JBT_STATE_DEEP_STANDBY,
++ JBT_STATE_SLEEP,
++ JBT_STATE_NORMAL,
++};
++
++int jbt6k74_init(void);
++int jbt6k74_display_onoff(int on);
++int jbt6k74_enter_state(enum jbt_state new_state);
++
++#endif
+Index: u-boot/board/neo1973/common/lowlevel_init.S
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/lowlevel_init.S
+@@ -0,0 +1,187 @@
++/*
++ * Memory Setup stuff - taken from blob memsetup.S
++ *
++ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
++ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
++ *
++ * Modified for the FIC Neo1973 GTA01 by Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1 /* 3clk */
++#if defined (CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++#define B6_SCAN 0x1 /* 9bit */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
++ defined(CONFIG_ARCH_GTA01B_v4)
++#define B6_SCAN 0x2 /* 10bit */
++#endif
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x2 /* 10bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x1 /* 3clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ adr r0, SMRDATA
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* setup asynchronous bus mode */
++ mrc p15, 0, r1 ,c1 ,c0, 0
++ orr r1, r1, #0xc0000000
++ mcr p15, 0, r1, c1, c0, 0
++
++#if defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ /* switch on power for NAND */
++ ldr r0, =0x56000010 /* GPBCON */
++ ldr r1, [r0]
++ orr r1, r1, #0x10
++ str r1, [r0]
++
++ ldr r0, =0x56000014 /* GPBDAT */
++ ldr r1, [r0]
++ orr r1, r1, #(1 <<2)
++ str r1, [r0]
++#endif
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0xb2
++ .word 0x30
++ .word 0x30
+Index: u-boot/board/neo1973/gta01/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/Makefile
+@@ -0,0 +1,47 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o
++SOBJS := ../common/lowlevel_init.o
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++-include .depend
++
++#########################################################################
+Index: u-boot/board/neo1973/gta01/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/config.mk
+@@ -0,0 +1,34 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# FIC Neo1973 GTA01 board with S3C2410X (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++# GTA01v3 has 1 bank of 64 MB SDRAM
++# GTA01v4 has 1 bank of 64 MB SDRAM
++#
++# 3000'0000 to 3400'0000
++# we load ourself to 33F8'0000
++#
++# GTA01Bv2 or later has 1 bank of 128 MB SDRAM
++#
++# 3000'0000 to 3800'0000
++# we load ourself to 37F8'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# download area is 3200'0000 or 3300'0000
++
++sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
++
++ifeq ($(GTA01_BIG_RAM),y)
++# FIXME: TEXT_BASE = 0x37F80000
++TEXT_BASE = 0x33F80000
++else
++TEXT_BASE = 0x33F80000
++endif
+Index: u-boot/board/neo1973/gta01/gta01.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -0,0 +1,422 @@
++/*
++ * (C) 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on existing S3C2410 startup code in u-boot:
++ *
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <s3c2410.h>
++#include <i2c.h>
++
++#include "pcf50606.h"
++
++#include "../common/neo1973.h"
++#include "../common/jbt6k74.h"
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* That many seconds the power key needs to be pressed to power up */
++#define POWER_KEY_SECONDS 2
++
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++//#define M_MDIV 0xA1 /* Fout = 202.8MHz */
++//#define M_PDIV 0x3
++//#define M_SDIV 0x1
++#define M_MDIV 0x90 /* Fout = 202.8MHz */
++#define M_PDIV 0x7
++#define M_SDIV 0x0
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++/* In case the debug board is attached, we cannot go beyond 200 MHz */
++#if 0
++#define M_MDIV 0x7d /* Fout = 266MHz */
++#define M_PDIV 0x1
++#define M_SDIV 0x1
++#else
++#define M_MDIV 0x90 /* Fout = 202.8MHz */
++#define M_PDIV 0x7
++#define M_SDIV 0x0
++#endif
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++/* This board doesn't have bus lines at teh debug port, and we can go to 266 */
++#define M_MDIV 0x7d /* Fout = 266MHz */
++#define M_PDIV 0x1
++#define M_SDIV 0x1
++#else
++#error Please define GTA01 revision
++#endif
++
++#define U_M_MDIV 0x78
++#define U_M_PDIV 0x2
++#define U_M_SDIV 0x3
++
++unsigned int neo1973_wakeup_cause;
++extern int nobootdelay;
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++#if defined(CONFIG_ARCH_GTA01_v3)
++ gpio->GPACON = 0x007FFFFF;
++
++ gpio->GPBCON = 0x00005055;
++ gpio->GPBUP = 0x000007FF;
++
++ gpio->GPCCON = 0xAAAA12A8;
++ gpio->GPCUP = 0x0000FFFF;
++
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++
++ gpio->GPFCON = 0x00002AA9;
++ gpio->GPFUP = 0x000000FF;
++
++ gpio->GPGCON = 0xA846F0C0;
++ gpio->GPGUP = 0x0000AFEF;
++
++ gpio->GPHCON = 0x0008FAAA;
++ gpio->GPHUP = 0x000007FF;
++#elif defined(CONFIG_ARCH_GTA01_v4)
++ gpio->GPACON = 0x005E47FF;
++
++ gpio->GPBCON = 0x00045015;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (Flash power-up) */
++
++ gpio->GPCCON = 0xAAAA12A9;
++ gpio->GPCUP = 0x0000FFFF;
++
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++
++ gpio->GPECON = 0xA02AAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++
++ gpio->GPFCON = 0x0000aa09;
++ gpio->GPFUP = 0x000000FF;
++
++ gpio->GPGCON = 0xFF40F0C1;
++ gpio->GPGUP = 0x0000AFEF;
++
++ gpio->GPHCON = 0x0000FAAA;
++ gpio->GPHUP = 0x000007FF;
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ gpio->GPACON = 0x005E4FFF;
++
++ gpio->GPBCON = 0x00145415;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (Flash power-up) */
++
++ gpio->GPCCON = 0xAAAA12A9;
++ gpio->GPCUP = 0x0000FFFF;
++
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++
++ gpio->GPECON = 0xA02AAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++
++ gpio->GPFCON = 0x0000aa19;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPFDAT |= 0x4; /* Set GBF2 to high (nGSM_EN) */
++
++ gpio->GPGCON = 0xFF40F0C1;
++ gpio->GPGUP = 0x0000AFEF;
++
++ gpio->GPHCON = 0x0000FAAA;
++ gpio->GPHUP = 0x000007FF;
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ gpio->GPACON = 0x0005E0FFF;
++ gpio->GPADAT |= (1 << 16); /* Set GPA16 to high (nNAND_WP) */
++
++ gpio->GPBCON = 0x00045455;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPBDAT |= 0x4; /* Set GPB2 to high (SD power down) */
++
++ gpio->GPCCON = 0xAAAA12A9;
++ gpio->GPCUP = 0x0000FFFF;
++
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++
++ gpio->GPFCON = 0x0000aa99;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPFDAT |= 0x4; /* Set GBF2 to high (nGSM_EN) */
++
++ gpio->GPGCON = 0xFF14F0F8;
++ gpio->GPGUP = 0x0000AFEF;
++
++ gpio->GPHCON = 0x0000FAAA;
++ gpio->GPHUP = 0x000007FF;
++#else
++#error Please define GTA01 version
++#endif
++
++ /* arch number of SMDK2410-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_NEO1973_GTA01;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++int board_late_init(void)
++{
++ unsigned char tmp;
++ char buf[32];
++
++ /* Initialize the Power Management Unit with a safe register set */
++ pcf50606_init();
++
++ /* obtain wake-up reason, save INT1 in environment */
++ tmp = pcf50606_reg_read(PCF50606_REG_INT1);
++ sprintf(buf, "0x%02x", tmp);
++ setenv("pcf50606_int1", buf);
++
++ if (tmp & PCF50606_INT1_ALARM) {
++ /* we've been woken up by RTC alarm or charger insert, boot */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_ALARM;
++ goto continue_boot;
++ }
++ if (tmp & PCF50606_INT1_EXTONR) {
++ neo1973_wakeup_cause = NEO1973_WAKEUP_CHARGER;
++ }
++
++ if (tmp & PCF50606_INT1_ONKEYF) {
++ int seconds = 0;
++ neo1973_wakeup_cause = NEO1973_WAKEUP_POWER_KEY;
++ /* we've been woken up by a falling edge of the onkey */
++
++ /* we can't just setenv(bootdelay,-1) because that would
++ * accidentially become permanent if the user does saveenv */
++ if (neo1973_911_key_pressed())
++ nobootdelay = 1;
++
++ while (1) {
++ u_int8_t int1, oocs;
++
++ oocs = pcf50606_reg_read(PCF50606_REG_OOCS);
++ if (oocs & PFC50606_OOCS_ONKEY)
++ break;
++
++ int1 = pcf50606_reg_read(PCF50606_REG_INT1);
++ if (int1 & PCF50606_INT1_SECOND)
++ seconds++;
++
++ if (seconds >= POWER_KEY_SECONDS)
++ goto continue_boot;
++ }
++ /* Power off if minimum number of seconds not reached */
++ neo1973_poweroff();
++ }
++
++ /* if there's no other reason, must be regular reset */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_RESET;
++
++continue_boot:
++ jbt6k74_init();
++ jbt6k74_enter_state(JBT_STATE_NORMAL);
++ jbt6k74_display_onoff(1);
++
++ /* issue a short pulse with the vibrator */
++ neo1973_vibrator(1);
++ udelay(50000);
++ neo1973_vibrator(0);
++
++ /* switch on the backlight */
++ neo1973_backlight(1);
++
++#if defined(CONFIG_ARCH_GTA01B_v4)
++ {
++ /* check if sd card is inserted, and power-up if it is */
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (!(gpio->GPFDAT & (1 << 5)))
++ gpio->GPBDAT &= ~(1 << 2);
++ }
++#endif
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
++
++u_int32_t get_board_rev(void)
++{
++#if defined(CONFIG_ARCH_GTA01_v3)
++ return 0x00000130;
++#elif defined(CONFIG_ARCH_GTA01_v4)
++ return 0x00000140;
++#elif defined(CONFIG_ARCH_GTA01B_v2)
++ return 0x00000220;
++#elif defined(CONFIG_ARCH_GTA01B_v3)
++ return 0x00000230;
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ return 0x00000240;
++#endif
++}
++
++void neo1973_poweroff(void)
++{
++ serial_printf("poweroff\n");
++ udc_disconnect();
++ pcf50606_reg_write(PCF50606_REG_OOCC1, PCF50606_OOCC1_GOSTDBY);
++ /* don't return to caller */
++ while (1) ;
++}
++
++void neo1973_backlight(int on)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (on)
++ gpio->GPBDAT |= 0x01;
++ else
++ gpio->GPBDAT &= ~0x01;
++}
++
++void neo1973_vibrator(int on)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (on)
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ gpio->GPGDAT |= (1 << 11); /* GPG11 */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ gpio->GPBDAT |= (1 << 10); /* GPB10 */
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ gpio->GPBDAT |= (1 << 3); /* GPB3 */
++#endif
++ else
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ gpio->GPGDAT &= ~(1 << 11); /* GPG11 */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ gpio->GPBDAT &= ~(1 << 10); /* GPB10 */
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ gpio->GPBDAT &= ~(1 << 3); /* GPB3 */
++#endif
++}
++
++int neo1973_911_key_pressed(void)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (gpio->GPFDAT & (1 << 6))
++ return 0;
++ return 1;
++}
++
++static const char *chgstate_names[] = {
++ [PCF50606_MBCC1_CHGMOD_QUAL] = "qualification",
++ [PCF50606_MBCC1_CHGMOD_PRE] = "pre",
++ [PCF50606_MBCC1_CHGMOD_TRICKLE] = "trickle",
++ [PCF50606_MBCC1_CHGMOD_FAST_CCCV] = "fast_cccv",
++ [PCF50606_MBCC1_CHGMOD_FAST_NOCC] = "fast_nocc",
++ [PCF50606_MBCC1_CHGMOD_FAST_NOCV] = "fast_nocv",
++ [PCF50606_MBCC1_CHGMOD_FAST_SW] = "fast_switch",
++ [PCF50606_MBCC1_CHGMOD_IDLE] = "idle",
++};
++
++const char *neo1973_get_charge_status(void)
++{
++ u_int8_t mbcc1 = pcf50606_reg_read(PCF50606_REG_MBCC1);
++ u_int8_t chgmod = (mbcc1 & PCF50606_MBCC1_CHGMOD_MASK);
++ return chgstate_names[chgmod];
++}
++
++int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd)
++{
++ switch (cmd) {
++ case NEO1973_CHGCMD_NONE:
++ break;
++ case NEO1973_CHGCMD_AUTOFAST:
++ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1,
++ PCF50606_MBCC1_AUTOFST,
++ PCF50606_MBCC1_AUTOFST);
++ break;
++ case NEO1973_CHGCMD_NO_AUTOFAST:
++ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1,
++ PCF50606_MBCC1_AUTOFST, 0);
++ break;
++ case NEO1973_CHGCMD_OFF:
++ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1,
++ PCF50606_MBCC1_CHGMOD_MASK,
++ PCF50606_MBCC1_CHGMOD_IDLE);
++ break;
++
++ case NEO1973_CHGCMD_FAST:
++ case NEO1973_CHGCMD_FASTER:
++ pcf50606_reg_set_bit_mask(PCF50606_REG_MBCC1,
++ PCF50606_MBCC1_CHGMOD_MASK,
++ PCF50606_MBCC1_CHGMOD_FAST_CCCV);
++ break;
++ }
++ return 0;
++}
++
+Index: u-boot/board/neo1973/gta01/pcf50606.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/pcf50606.c
+@@ -0,0 +1,100 @@
++
++#include <common.h>
++#include <pcf50606.h>
++
++/* initial register set for PCF50606 in Neo1973 devices */
++const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS] = {
++ [PCF50606_REG_OOCS] = 0x00,
++ /* gap */
++ [PCF50606_REG_INT1M] = PCF50606_INT1_SECOND,
++ [PCF50606_REG_INT2M] = 0x00,
++ [PCF50606_REG_INT3M] = PCF50606_INT3_TSCPRES,
++ [PCF50606_REG_OOCC1] = PCF50606_OOCC1_RTCWAK |
++ PCF50606_OOCC1_CHGWAK |
++ PCF50606_OOCC1_EXTONWAK_HIGH,
++ [PCF50606_REG_OOCC2] = PCF50606_OOCC2_ONKEYDB_14ms |
++ PCF50606_OOCC2_EXTONDB_14ms,
++ /* gap */
++ [PCF50606_REG_PSSC] = 0x00,
++ [PCF50606_REG_PWROKM] = 0x00,
++ /* gap */
++#if defined(CONFIG_ARCH_GTA01B_v2)
++ [PCF50606_REG_DCDC1] = 0x1e, /* GL_3V3: off */
++#elif defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_DCDC1] = 0x18, /* GL_1V5: off */
++#endif
++ [PCF50606_REG_DCDC2] = 0x00,
++ [PCF50606_REG_DCDC3] = 0x00,
++ [PCF50606_REG_DCDC4] = 0x30, /* 1.25A */
++
++ [PCF50606_REG_DCDEC1] = 0xe8, /* IO_3V3: on */
++ [PCF50606_REG_DCDEC2] = 0x00,
++
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ [PCF50606_REG_DCUDC1] = 0xe3, /* CORE_1V8: 1.8V */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ [PCF50606_REG_DCUDC1] = 0xe4, /* CORE_1V8: 2.1V */
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_DCUDC1] = 0xc4, /* CORE_1V8: 2.1V if PWREN2 = HIGH */
++#endif
++ [PCF50606_REG_DCUDC2] = 0x30, /* 1.25A current limit */
++
++#if defined(CONFIG_ARCH_GTA01_v3)
++ [PCF50606_REG_IOREGC] = 0x13, /* VTCXO_2V8: off */
++#elif defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || \
++ defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4)
++ //see internal bug 94 [PCF50606_REG_IOREGC] = 0x18, /* CODEC_3V3: off */
++ [PCF50606_REG_IOREGC] = 0xf8, /* CODEC_3V3: on */
++#endif
++
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ [PCF50606_REG_D1REGC1] = 0x15, /* VRF_3V: off */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
++ defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_D1REGC1] = 0x16, /* BT_3V15: off */
++#endif
++
++#if defined(CONFIG_ARCH_GTA01_v3)
++ [PCF50606_REG_D2REGC1] = 0xf8, /* SD_3V3: on */
++#elif defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || \
++ defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_D2REGC1] = 0x10, /* GL_2V5: off */
++#endif
++
++#if defined(CONFIG_ARCH_GTA01_v3)
++ [PCF50606_REG_D3REGC1] = 0x18, /* CODEC_3V3: off */
++#elif defined(CONFIG_ARCH_GTA01_v4)
++ [PCF50606_REG_D3REGC1] = 0x13, /* VTXCO_2V8: off */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ [PCF50606_REG_D3REGC1] = 0x00, /* USER1: off */
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_D3REGC1] = 0xec, /* STBY_1V8: 2.1V */
++#endif
++
++ [PCF50606_REG_LPREGC1] = 0xf8, /* LCM_3V3: on */
++ [PCF50606_REG_LPREGC2] = 0x00,
++
++ [PCF50606_REG_MBCC1] = 0x01, /* CHGAPE */
++ [PCF50606_REG_MBCC2] = 0x00, /* unlimited charging */
++ [PCF50606_REG_MBCC3] = 0x1a, /* 0.2*Ifast, 4.20V */
++ [PCF50606_REG_BBCC] = 0x1f, /* 400uA */
++ [PCF50606_REG_ADCC1] = 0x00,
++ [PCF50606_REG_ADCC2] = 0x00,
++ /* gap */
++#if defined(CONFIG_ARCH_GTA01B_v4)
++ [PCF50606_REG_ACDC1] = 0x86, /* ACD thresh 1.6V, enabled */
++#else
++ [PCF50606_REG_ACDC1] = 0x00,
++#endif
++ [PCF50606_REG_BVMC] = PCF50606_BVMC_THRSHLD_3V3,
++ [PCF50606_REG_PWMC1] = 0x00,
++ [PCF50606_REG_LEDC1] = 0x00,
++ [PCF50606_REG_LEDC2] = 0x00,
++ [PCF50606_REG_GPOC1] = 0x00,
++ [PCF50606_REG_GPOC2] = 0x00,
++ [PCF50606_REG_GPOC3] = 0x00,
++ [PCF50606_REG_GPOC4] = 0x00,
++ [PCF50606_REG_GPOC5] = 0x00,
++};
++
++
+Index: u-boot/board/neo1973/gta01/split_by_variant.sh
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/split_by_variant.sh
+@@ -0,0 +1,57 @@
++#!/bin/sh
++# ---------------------------------------------------------
++# Set the core module defines according to Core Module
++# ---------------------------------------------------------
++# ---------------------------------------------------------
++# Set up the GTA01 type define
++# ---------------------------------------------------------
++
++CFGINC=${obj}include/config.h
++CFGTMP=${obj}board/neo1973/gta01/config.tmp
++
++mkdir -p ${obj}include
++if [ "$1" == "" ]
++then
++ echo "$0:: No parameters - using GTA01Bv3 config"
++ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC
++ echo "GTA01_BIG_RAM=y" > $CFGTMP
++else
++ case "$1" in
++ gta01v4_config)
++ echo "#define CONFIG_ARCH_GTA01_v4" > $CFGINC
++ echo "GTA01_BIG_RAM=n" > $CFGTMP
++ ;;
++
++ gta01v3_config)
++ echo "#define CONFIG_ARCH_GTA01_v3" > $CFGINC
++ echo "GTA01_BIG_RAM=n" > $CFGTMP
++ ;;
++
++ gta01bv2_config)
++ echo "#define CONFIG_ARCH_GTA01B_v2" > $CFGINC
++ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ ;;
++
++ gta01bv3_config)
++ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC
++ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ ;;
++
++ gta01bv4_config)
++ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC
++ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ ;;
++
++ *)
++ echo "$0:: Unrecognised config - using GTA01Bv4 config"
++ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC
++ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ ;;
++
++ esac
++
++fi
++# ---------------------------------------------------------
++# Complete the configuration
++# ---------------------------------------------------------
++$MKCONFIG -a neo1973_gta01 arm arm920t gta01 neo1973 s3c24x0
+Index: u-boot/board/neo1973/gta01/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta01/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -0,0 +1,265 @@
++/*
++ * (C) Copyright 2006 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * Configuation settings for the FIC Neo1973 GTA01 Linux GSM phone
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if defined(BUILD_FOR_RAM)
++/* If we want to start u-boot from inside RAM */
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#else
++/* we want to start u-boot directly from within NAND flash */
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++#endif
++
++#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
++#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA01 has 12MHz input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on GTA01 */
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS (\
++ CFG_CMD_BDI | \
++ CFG_CMD_LOADS | \
++ CFG_CMD_LAODB | \
++ CFG_CMD_IMI | \
++ CFG_CMD_CACHE | \
++ CFG_CMD_MEMORY | \
++ CFG_CMD_ENV | \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_CONSOLE | \
++ CFG_CMD_ASKENV | \
++ CFG_CMD_RUN | \
++ CFG_CMD_ECHO | \
++ CFG_CMD_I2C | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_IMMAP | \
++ CFG_CMD_DATE | \
++ CFG_CMD_AUTOSCRIPT | \
++ CFG_CMD_BSP | \
++ CFG_CMD_ELF | \
++ CFG_CMD_MISC | \
++ /* CFG_CMD_USB | */ \
++ /* CFG_CMD_JFFS2 | */ \
++ CFG_CMD_DIAG | \
++ /* CFG_CMD_HWFLOW | */ \
++ CFG_CMD_SAVES | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_MMC | \
++ CFG_CMD_FAT | \
++ CFG_CMD_EXT2 | \
++ 0)
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
++#define CONFIG_BOOTCOMMAND "nand read.e 0x32000000 0x34000 0x200000; bootm 0x32000000"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#if defined(CONFIG_ARCH_GTA01_v3)
++#define CFG_PROMPT "GTA01v3 # " /* Monitor Command Prompt */
++#elif defined(CONFIG_ARCH_GTA01_v4)
++#define CFG_PROMPT "GTA01v4 # " /* Monitor Command Prompt */
++#elif defined(CONFIG_ARCH_GTA01B_v2)
++#define CFG_PROMPT "GTA01Bv2 # " /* Monitor Command Prompt */
++#elif defined(CONFIG_ARCH_GTA01B_v3)
++#define CFG_PROMPT "GTA01Bv3 # " /* Monitor Command Prompt */
++#elif defined(CONFIG_ARCH_GTA01B_v4)
++#define CFG_PROMPT "GTA01Bv4 # " /* Monitor Command Prompt */
++#endif
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x33000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++#if 0
++#define CONFIG_USB_OHCI 1
++#endif
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
++ defined(CONFIG_ARCH_GTA01B_v4)
++#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */
++#else
++#error Please define GTA01 variant
++#endif
++#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++/* No NOR flash in this device */
++#define CFG_NO_FLASH 1
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++/* EXT2 driver */
++#define CONFIG_EXT2 1
++
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 0
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++#define CONFIG_JFFS2_NAND_OFF 0x634000
++#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_REVISION_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#endif
++
++#define CONFIG_DRIVER_S3C24X0_I2C 1
++#define CONFIG_HARD_I2C 1
++#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50606 data sheet */
++#define CFG_I2C_SLAVE 0x7f
++
++/* we have a board_late_init() function */
++#define BOARD_LATE_INIT 1
++
++#if 1
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#define CONFIG_S3C2410_NAND_BBT 1
++#define CONFIG_S3C2410_NAND_HWECC 1
++
++#define CONFIG_DRIVER_PCF50606 1
++
++#endif /* __CONFIG_H */
+Index: u-boot/board/neo1973/common/neo1973.h
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/neo1973.h
+@@ -0,0 +1,32 @@
++#ifndef _NEO1973_H
++#define _NEO1973_H
++
++enum wakeup_reason {
++ NEO1973_WAKEUP_NONE,
++ NEO1973_WAKEUP_RESET,
++ NEO1973_WAKEUP_POWER_KEY,
++ NEO1973_WAKEUP_CHARGER,
++ NEO1973_WAKEUP_ALARM,
++};
++
++enum neo1973_charger_cmd {
++ NEO1973_CHGCMD_NONE,
++ NEO1973_CHGCMD_AUTOFAST,
++ NEO1973_CHGCMD_NO_AUTOFAST,
++ NEO1973_CHGCMD_OFF,
++ NEO1973_CHGCMD_FAST,
++ NEO1973_CHGCMD_FASTER,
++};
++
++extern unsigned int neo1973_wakeup_cause;
++
++void neo1973_poweroff(void);
++void neo1973_backlight(int on);
++void neo1973_vibrator(int on);
++
++int neo1973_911_key_pressed(void);
++
++const char *neo1973_get_charge_status(void);
++int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd);
++
++#endif
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch
new file mode 100644
index 0000000000..343598902f
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch
@@ -0,0 +1,1233 @@
+This patch adds 'board' support for the Armzone QT2410
+development board to u-boot.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2009,6 +2009,9 @@
+ sbc2410x_config: unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
+
++qt2410_config : unconfig
++ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
++
+ scb9328_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
+
+Index: u-boot/board/qt2410/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/Makefile
+@@ -0,0 +1,47 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS := qt2410.o flash.o
++SOBJS := lowlevel_init.o
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++-include .depend
++
++#########################################################################
+Index: u-boot/board/qt2410/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/config.mk
+@@ -0,0 +1,29 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# SAMSUNG SMDK2410 board with S3C2410X (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x511d
++CONFIG_USB_DFU_REVISION=0x0100
++
++#
++# SMDK2410 has 1 bank of 64 MB DRAM
++#
++# 3000'0000 to 3400'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# we load ourself to 33F8'0000
++#
++# download area is 3300'0000
++#
++
++
++TEXT_BASE = 0x33F80000
+Index: u-boot/board/qt2410/flash.c
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/flash.c
+@@ -0,0 +1,435 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Alex Zuepke <azu@sysgo.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++ulong myflush (void);
++
++
++#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
++#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++
++
++#define CMD_READ_ARRAY 0x000000F0
++#define CMD_UNLOCK1 0x000000AA
++#define CMD_UNLOCK2 0x00000055
++#define CMD_ERASE_SETUP 0x00000080
++#define CMD_ERASE_CONFIRM 0x00000030
++#define CMD_PROGRAM 0x000000A0
++#define CMD_UNLOCK_BYPASS 0x00000020
++
++#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
++#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
++
++#define BIT_ERASE_DONE 0x00000080
++#define BIT_RDY_MASK 0x00000080
++#define BIT_PROGRAM_ERROR 0x00000020
++#define BIT_TIMEOUT 0x80000000 /* our flag */
++
++#define READY 1
++#define ERR 2
++#define TMO 4
++
++/*-----------------------------------------------------------------------
++ */
++
++ulong flash_init (void)
++{
++ int i, j;
++ ulong size = 0;
++
++ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
++ ulong flashbase = 0;
++
++ flash_info[i].flash_id =
++#if defined(CONFIG_AMD_LV400)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV400B & FLASH_TYPEMASK);
++#elif defined(CONFIG_AMD_LV800)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV800B & FLASH_TYPEMASK);
++#else
++#error "Unknown flash configured"
++#endif
++ flash_info[i].size = FLASH_BANK_SIZE;
++ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
++ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
++ if (i == 0)
++ flashbase = PHYS_FLASH_1;
++ else
++ panic ("configured too many flash banks!\n");
++ for (j = 0; j < flash_info[i].sector_count; j++) {
++ if (j <= 3) {
++ /* 1st one is 16 KB */
++ if (j == 0) {
++ flash_info[i].start[j] =
++ flashbase + 0;
++ }
++
++ /* 2nd and 3rd are both 8 KB */
++ if ((j == 1) || (j == 2)) {
++ flash_info[i].start[j] =
++ flashbase + 0x4000 + (j -
++ 1) *
++ 0x2000;
++ }
++
++ /* 4th 32 KB */
++ if (j == 3) {
++ flash_info[i].start[j] =
++ flashbase + 0x8000;
++ }
++ } else {
++ flash_info[i].start[j] =
++ flashbase + (j - 3) * MAIN_SECT_SIZE;
++ }
++ }
++ size += flash_info[i].size;
++ }
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_FLASH_BASE,
++ CFG_FLASH_BASE + monitor_flash_len - 1,
++ &flash_info[0]);
++
++#if 0
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_ENV_ADDR,
++ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
++#endif
++
++ return size;
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t * info)
++{
++ int i;
++
++ switch (info->flash_id & FLASH_VENDMASK) {
++ case (AMD_MANUFACT & FLASH_VENDMASK):
++ printf ("AMD: ");
++ break;
++ default:
++ printf ("Unknown Vendor ");
++ break;
++ }
++
++ switch (info->flash_id & FLASH_TYPEMASK) {
++ case (AMD_ID_LV400B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV400BB (4Mbit)\n");
++ break;
++ case (AMD_ID_LV800B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV800BB (8Mbit)\n");
++ break;
++ default:
++ printf ("Unknown Chip Type\n");
++ goto Done;
++ break;
++ }
++
++ printf (" Size: %ld MB in %d Sectors\n",
++ info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i = 0; i < info->sector_count; i++) {
++ if ((i % 5) == 0) {
++ printf ("\n ");
++ }
++ printf (" %08lX%s", info->start[i],
++ info->protect[i] ? " (RO)" : " ");
++ }
++ printf ("\n");
++
++ Done:;
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t * info, int s_first, int s_last)
++{
++ ushort result;
++ int iflag, cflag, prot, sect;
++ int rc = ERR_OK;
++ int chip;
++
++ /* first look for protection bits */
++
++ if (info->flash_id == FLASH_UNKNOWN)
++ return ERR_UNKNOWN_FLASH_TYPE;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ return ERR_INVAL;
++ }
++
++ if ((info->flash_id & FLASH_VENDMASK) !=
++ (AMD_MANUFACT & FLASH_VENDMASK)) {
++ return ERR_UNKNOWN_FLASH_VENDOR;
++ }
++
++ prot = 0;
++ for (sect = s_first; sect <= s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++ if (prot)
++ return ERR_PROTECTED;
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
++ printf ("Erasing sector %2d ... ", sect);
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ if (info->protect[sect] == 0) { /* not protected */
++ vu_short *addr = (vu_short *) (info->start[sect]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ *addr = CMD_ERASE_CONFIRM;
++
++ /* wait until flash is ready */
++ chip = 0;
++
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () >
++ CFG_FLASH_ERASE_TOUT) {
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++ chip = TMO;
++ break;
++ }
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_ERASE_DONE)
++ chip = READY;
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
++ chip = ERR;
++
++ } while (!chip);
++
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++
++ if (chip == ERR) {
++ rc = ERR_PROG_ERROR;
++ goto outahere;
++ }
++ if (chip == TMO) {
++ rc = ERR_TIMOUT;
++ goto outahere;
++ }
++
++ printf ("ok.\n");
++ } else { /* it was protected */
++
++ printf ("protected!\n");
++ }
++ }
++
++ if (ctrlc ())
++ printf ("User Interrupt!\n");
++
++ outahere:
++ /* allow flash to settle - wait 10 ms */
++ udelay_masked (10000);
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash
++ */
++
++volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
++{
++ vu_short *addr = (vu_short *) dest;
++ ushort result;
++ int rc = ERR_OK;
++ int cflag, iflag;
++ int chip;
++
++ /*
++ * Check if Flash is (sufficiently) erased
++ */
++ result = *addr;
++ if ((result & data) != data)
++ return ERR_NOT_ERASED;
++
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
++ *addr = CMD_PROGRAM;
++ *addr = data;
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ /* wait until flash is ready */
++ chip = 0;
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ chip = ERR | TMO;
++ break;
++ }
++ if (!chip && ((result & 0x80) == (data & 0x80)))
++ chip = READY;
++
++ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
++ result = *addr;
++
++ if ((result & 0x80) == (data & 0x80))
++ chip = READY;
++ else
++ chip = ERR;
++ }
++
++ } while (!chip);
++
++ *addr = CMD_READ_ARRAY;
++
++ if (chip == ERR || *addr != data)
++ rc = ERR_PROG_ERROR;
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash.
++ */
++
++int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
++{
++ ulong cp, wp;
++ int l;
++ int i, rc;
++ ushort data;
++
++ wp = (addr & ~1); /* get lower word aligned address */
++
++ /*
++ * handle unaligned start bytes
++ */
++ if ((l = addr - wp) != 0) {
++ data = 0;
++ for (i = 0, cp = wp; i < l; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++ for (; i < 2 && cnt > 0; ++i) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ ++cp;
++ }
++ for (; cnt == 0 && i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 2;
++ }
++
++ /*
++ * handle word aligned part
++ */
++ while (cnt >= 2) {
++ data = *((vu_short *) src);
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 2;
++ wp += 2;
++ cnt -= 2;
++ }
++
++ if (cnt == 0) {
++ return ERR_OK;
++ }
++
++ /*
++ * handle unaligned tail bytes
++ */
++ data = 0;
++ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ }
++ for (; i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ return write_hword (info, wp, data);
++}
+Index: u-boot/board/qt2410/lowlevel_init.S
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/lowlevel_init.S
+@@ -0,0 +1,171 @@
++/*
++ * Memory Setup stuff - taken from blob memsetup.S
++ *
++ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
++ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
++ *
++ * Modified for the Samsung SMDK2410 by
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1
++#define B6_SCAN 0x1 /* 9bit */
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x1 /* 9bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x1 /* 3clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++//#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++#define REFCNT 997 /* period=17.5us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ adr r0, SMRDATA
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* setup asynchronous bus mode */
++ mrc p15, 0, r1 ,c1 ,c0, 0
++ orr r1, r1, #0xc0000000
++ mcr p15, 0, r1, c1, c0, 0
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0xb2
++ .word 0x30
++ .word 0x30
+Index: u-boot/board/qt2410/qt2410.c
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/qt2410.c
+@@ -0,0 +1,152 @@
++/*
++ * (C) 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on existing S3C2410 startup code in u-boot:
++ *
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <video_fb.h>
++#include <usbdcore.h>
++#include <s3c2410.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#if 1
++//#define M_MDIV 0xA1 /* Fout = 202.8MHz */
++//#define M_PDIV 0x3
++//#define M_SDIV 0x1
++#define M_MDIV 0x90 /* Fout = 202.8MHz */
++#define M_PDIV 0x7
++#define M_SDIV 0x0
++#else
++#define M_MDIV 0x5c /* Fout = 150.0MHz */
++#define M_PDIV 0x4
++#define M_SDIV 0x0
++#endif
++
++#if 1
++#define U_M_MDIV 0x78
++#define U_M_PDIV 0x2
++#define U_M_SDIV 0x3
++#else
++#define U_M_MDIV 0x48
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x2
++#endif
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++ gpio->GPACON = 0x007FFFFF;
++ gpio->GPBCON = 0x00044555;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPCCON = 0xAAAAAAAA;
++ gpio->GPCUP = 0x0000FFFF;
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++ gpio->GPFCON = 0x000055AA;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPGCON = 0xFF95FFBA;
++ //gpio->GPGUP = 0x0000FFFF;
++ gpio->GPGUP = 0x0000AFEF;
++ gpio->GPHCON = 0x0028FAAA;
++ gpio->GPHUP = 0x000007FF;
++
++ /* arch number of SMDK2410-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_QT2410;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++#if defined(CONFIG_USB_DEVICE)
++void udc_ctrl(enum usbd_event event, int param)
++{
++}
++#endif
++
++void board_video_init(GraphicDevice *pGD)
++{
++ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
++
++ /* FIXME: select LCM type by env variable */
++
++ /* Configuration for GTA01 LCM on QT2410 */
++ lcd->LCDCON1 = 0x00000178; /* CLKVAL=1, BPPMODE=16bpp, TFT, ENVID=0 */
++
++ lcd->LCDCON2 = 0x019fc3c1;
++ lcd->LCDCON3 = 0x0039df67;
++ lcd->LCDCON4 = 0x00000007;
++ lcd->LCDCON5 = 0x0001cf09;
++ lcd->LPCSEL = 0x00000000;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
+Index: u-boot/board/qt2410/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/qt2410/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/include/configs/qt2410.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/qt2410.h
+@@ -0,0 +1,287 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ * Gary Jennejohn <gj@denx.de>
++ * David Mueller <d.mueller@elsoft.ch>
++ *
++ * Configuation settings for the Armzone QT2410 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if 0
++/* If we want to start u-boot from usb bootloader in NOR flash */
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#else
++/* If we want to start u-boot directly from within NAND flash */
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++#endif
++
++#define CFG_UBOOT_SIZE 0x40000
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
++#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 400*1024)
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++#if 0
++#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
++#define CS8900_BASE 0x19000300
++#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
++#endif
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
++#define CONFIG_HWFLOW 1
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS (\
++ CFG_CMD_BDI | \
++ CFG_CMD_LOADS | \
++ CFG_CMD_LOADB | \
++ CFG_CMD_IMI | \
++ CFG_CMD_CACHE | \
++ CFG_CMD_MEMORY | \
++ CFG_CMD_ENV | \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_CONSOLE | \
++ CFG_CMD_BMP | \
++ CFG_CMD_ASKENV | \
++ CFG_CMD_RUN | \
++ CFG_CMD_ECHO | \
++ CFG_CMD_I2C | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_IMMAP | \
++ CFG_CMD_DATE | \
++ CFG_CMD_AUTOSCRIPT | \
++ CFG_CMD_BSP | \
++ CFG_CMD_ELF | \
++ CFG_CMD_MISC | \
++ /* CFG_CMD_USB | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_DIAG | \
++ CFG_CMD_HWFLOW | \
++ CFG_CMD_SAVES | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_MMC | \
++ CFG_CMD_FAT | \
++ CFG_CMD_EXT2 | \
++ 0)
++
++#if 0
++ CFG_CMD_DHCP | \
++ CFG_CMD_PING | \
++ CFG_CMD_NET | \
++
++#endif
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
++#define CONFIG_ETHADDR 01:ab:cd:ef:fe:dc
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_IPADDR 10.0.0.110
++#define CONFIG_SERVERIP 10.0.0.1
++/*#define CONFIG_BOOTFILE "elinos-lart" */
++#define CONFIG_BOOTCOMMAND "nand load 0x32000000 0x34000 0x200000; bootm 0x32000000"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 64 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x33000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++#define CONFIG_USB_OHCI 1
++
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x511d /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "Armzone"
++#define CONFIG_USBD_PRODUCT_NAME "QT2410 Bootloader " U_BOOT_VERSION
++#define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 0x4000
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
++#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
++
++#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
++
++#define CFG_FLASH_BASE PHYS_FLASH_1
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
++
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
++#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
++
++/* timeout values are in ticks */
++#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
++#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++#define CONFIG_EXT2 1
++
++/* FAT driver in u-boot is broken currently */
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 1
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++
++#define CONFIG_DRIVER_S3C24X0_I2C 1
++#define CONFIG_HARD_I2C 1
++#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50606 data sheet */
++#define CFG_I2C_SLAVE 0x7f
++
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_SPLASH_SCREEN
++#define CFG_VIDEO_LOGO_MAX_SIZE (640*480+1024+100) /* 100 = slack */
++#define CONFIG_VIDEO_BMP_GZIP
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++#define CONFIG_UNZIP
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++
++#define CONFIG_S3C2410_NAND_BBT 1
++
++#define MTDIDS_DEFAULT "nand0=qt2410-nand"
++#define MTPARTS_DEFAULT "qt2410-nand:192k(u-boot),8k(u-boot_env),2M(kernel),2M(splash),-(jffs2)"
++
++#endif /* __CONFIG_H */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch
new file mode 100644
index 0000000000..b39a268c84
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch
@@ -0,0 +1,56 @@
+This patch adds a IRQ demultiplexer callback to the arm920 cpu core code,
+plus a stub implementation of it for the S3C2410.
+
+Index: u-boot.git/cpu/arm920t/interrupts.c
+===================================================================
+--- u-boot.git.orig/cpu/arm920t/interrupts.c 2007-02-05 22:49:11.000000000 +0100
++++ u-boot.git/cpu/arm920t/interrupts.c 2007-02-05 23:19:01.000000000 +0100
+@@ -161,11 +161,16 @@
+
+ void do_irq (struct pt_regs *pt_regs)
+ {
+-#if defined (CONFIG_USE_IRQ) && defined (CONFIG_ARCH_INTEGRATOR)
++#if defined (CONFIG_USE_IRQ)
++#if defined (ARM920_IRQ_CALLBACK)
++ ARM920_IRQ_CALLBACK();
++ return;
++#elif defined (CONFIG_ARCH_INTEGRATOR)
+ /* ASSUMED to be a timer interrupt */
+ /* Just clear it - count handled in */
+ /* integratorap.c */
+ *(volatile ulong *)(CFG_TIMERBASE + 0x0C) = 0;
++#endif /* ARCH_INTEGRATOR */
+ #else
+ printf ("interrupt request\n");
+ show_regs (pt_regs);
+Index: u-boot.git/cpu/arm920t/s3c24x0/interrupts.c
+===================================================================
+--- u-boot.git.orig/cpu/arm920t/s3c24x0/interrupts.c 2007-02-05 22:49:11.000000000 +0100
++++ u-boot.git/cpu/arm920t/s3c24x0/interrupts.c 2007-02-05 23:21:35.000000000 +0100
+@@ -216,4 +216,13 @@
+ /*NOTREACHED*/
+ }
+
++#ifdef CONFIG_USE_IRQ
++void s3c2410_irq(void)
++{
++ S3C24X0_INTERRUPT * irq = S3C24X0_GetBase_INTERRUPT();
++ u_int32_t intpnd = irq->INTPND;
++
++}
++#endif /* USE_IRQ */
++
+ #endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) */
+Index: u-boot.git/include/common.h
+===================================================================
+--- u-boot.git.orig/include/common.h 2007-02-05 22:49:11.000000000 +0100
++++ u-boot.git/include/common.h 2007-02-05 23:19:01.000000000 +0100
+@@ -452,6 +452,8 @@
+ ulong get_PCI_freq (void);
+ #endif
+ #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_LH7A40X)
++void s3c2410_irq(void);
++#define ARM920_IRQ_CALLBACK s3c2410_irq
+ ulong get_FCLK (void);
+ ulong get_HCLK (void);
+ ulong get_PCLK (void);
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch
new file mode 100644
index 0000000000..b3d7bc1166
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch
@@ -0,0 +1,28 @@
+This patch allows us to use the 'gd' pointer (and thus environment
+and everything else associated with it) from interrupt context on
+arm920t.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S 2007-02-24 02:35:38.000000000 +0100
++++ u-boot/cpu/arm920t/start.S 2007-02-24 02:36:01.000000000 +0100
+@@ -474,12 +474,12 @@
+ .macro irq_save_user_regs
+ sub sp, sp, #S_FRAME_SIZE
+ stmia sp, {r0 - r12} @ Calling r0-r12
+- add r8, sp, #S_PC
+- stmdb r8, {sp, lr}^ @ Calling SP, LR
+- str lr, [r8, #0] @ Save calling PC
++ add r7, sp, #S_PC
++ stmdb r7, {sp, lr}^ @ Calling SP, LR
++ str lr, [r7, #0] @ Save calling PC
+ mrs r6, spsr
+- str r6, [r8, #4] @ Save CPSR
+- str r0, [r8, #8] @ Save OLD_R0
++ str r6, [r7, #4] @ Save CPSR
++ str r0, [r7, #8] @ Save OLD_R0
+ mov r0, sp
+ .endm
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch
new file mode 100644
index 0000000000..9b1febe956
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch
@@ -0,0 +1,43 @@
+This patch makes the u-boot NAND BBT code a bit more quiet
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/drivers/nand/nand_bbt.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_bbt.c 2007-02-16 23:54:02.000000000 +0100
++++ u-boot/drivers/nand/nand_bbt.c 2007-02-16 23:54:05.000000000 +0100
+@@ -157,10 +157,6 @@
+ this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
+ continue;
+ }
+- /* Leave it for now, if its matured we can move this
+- * message to MTD_DEBUG_LEVEL0 */
+- printk (KERN_DEBUG "nand_read_bbt: Bad block at 0x%08x\n",
+- ((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ /* Factory marked bad or worn out ? */
+ if (tmp == 0)
+ this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
+@@ -229,14 +225,12 @@
+ if (td->options & NAND_BBT_VERSION) {
+ nand_read_raw (mtd, buf, td->pages[0] << this->page_shift, mtd->oobblock, mtd->oobsize);
+ td->version[0] = buf[mtd->oobblock + td->veroffs];
+- printk (KERN_DEBUG "Bad block table at page %d, version 0x%02X\n", td->pages[0], td->version[0]);
+ }
+
+ /* Read the mirror version, if available */
+ if (md && (md->options & NAND_BBT_VERSION)) {
+ nand_read_raw (mtd, buf, md->pages[0] << this->page_shift, mtd->oobblock, mtd->oobsize);
+ md->version[0] = buf[mtd->oobblock + md->veroffs];
+- printk (KERN_DEBUG "Bad block table at page %d, version 0x%02X\n", md->pages[0], md->version[0]);
+ }
+
+ return 1;
+@@ -374,8 +368,6 @@
+ for (i = 0; i < chips; i++) {
+ if (td->pages[i] == -1)
+ printk (KERN_WARNING "Bad block table not found for chip %d\n", i);
+- else
+- printk (KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i], td->version[i]);
+ }
+ return 0;
+ }
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch
new file mode 100644
index 0000000000..993ef4f6f2
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch
@@ -0,0 +1,175 @@
+This patch adds a new 's3c2410' command which currently supports 's3c2410 speed
+{set,get,list} and thus allows dynamic change of the CPU clock.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/cpu/arm920t/s3c24x0/Makefile
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/Makefile 2007-02-24 15:14:00.000000000 +0100
++++ u-boot/cpu/arm920t/s3c24x0/Makefile 2007-02-24 15:21:02.000000000 +0100
+@@ -26,7 +26,7 @@
+ LIB = $(obj)lib$(SOC).a
+
+ COBJS = i2c.o interrupts.o serial.o speed.o \
+- usb_ohci.o nand_read.o nand.o
++ usb_ohci.o nand_read.o nand.o cmd_s3c2410.o
+
+ SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+Index: u-boot/cpu/arm920t/s3c24x0/cmd_s3c2410.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot/cpu/arm920t/s3c24x0/cmd_s3c2410.c 2007-02-24 15:22:17.000000000 +0100
+@@ -0,0 +1,152 @@
++/*
++ * (C) Copyright 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/*
++ * Boot support
++ */
++#include <common.h>
++#include <command.h>
++#include <net.h> /* for print_IPaddr */
++#include <s3c2410.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#if (CONFIG_COMMANDS & CFG_CMD_BDI)
++
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++#define MHZ 1000000
++
++static void print_cpu_speed(void)
++{
++ printf("FCLK = %u MHz, HCLK = %u MHz, PCLK = %u MHz\n",
++ get_FCLK()/MHZ, get_HCLK()/MHZ, get_PCLK()/MHZ);
++}
++
++struct s3c2410_pll_speed {
++ u_int16_t mhz;
++ u_int32_t mpllcon;
++ u_int32_t clkdivn;
++};
++
++#define CLKDIVN_1_1_1 0x00
++#define CLKDIVN_1_2_2 0x02
++#define CLKDIVN_1_2_4 0x03
++#define CLKDIVN_1_4_4 0x04
++
++static const struct s3c2410_pll_speed pll_configs[] = {
++ {
++ .mhz = 50,
++ .mpllcon = ((0x5c << 12) + (0x4 << 4) + 0x2),
++ .clkdivn = CLKDIVN_1_1_1,
++ },
++ {
++ .mhz = 101,
++ .mpllcon = ((0x7f << 12) + (0x2 << 4) + 0x2),
++ .clkdivn = CLKDIVN_1_2_2,
++ },
++ {
++ .mhz = 202,
++ .mpllcon = ((0x90 << 12) + (0x7 << 4) + 0x0),
++ .clkdivn = CLKDIVN_1_2_4,
++ },
++ {
++ .mhz = 266,
++ .mpllcon = ((0x7d << 12) + (0x1 << 4) + 0x1),
++ .clkdivn = CLKDIVN_1_2_4,
++ },
++};
++
++static void list_cpu_speeds(void)
++{
++ int i;
++ for (i = 0; i < ARRAY_SIZE(pll_configs); i++)
++ printf("%u MHz\n", pll_configs[i].mhz);
++}
++
++static int reconfig_mpll(u_int16_t mhz)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(pll_configs); i++) {
++ if (pll_configs[i].mhz == mhz) {
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = pll_configs[i].mpllcon;
++ clk_power->UPLLCON = ((0x78 << 12) + (0x2 << 4) + 0x3),
++ clk_power->CLKDIVN = pll_configs[i].clkdivn;
++
++ /* If we changed the speed, we need to re-configure
++ * the serial baud rate generator */
++ serial_setbrg();
++ return 0;
++ }
++ }
++ return -1;
++}
++
++int do_s3c2410 ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ if (!strcmp(argv[1], "speed")) {
++ if (argc < 2)
++ goto out_help;
++ if (!strcmp(argv[2], "get"))
++ print_cpu_speed();
++ else if (!strcmp(argv[2], "list"))
++ list_cpu_speeds();
++ else if (!strcmp(argv[2], "set")) {
++ unsigned long mhz;
++ if (argc < 3)
++ goto out_help;
++
++ mhz = simple_strtoul(argv[3], NULL, 10);
++
++ if (reconfig_mpll(mhz) < 0)
++ printf("error, speed %uMHz unknown\n", mhz);
++ else
++ print_cpu_speed();
++ } else
++ goto out_help;
++ } else {
++out_help:
++ printf("Usage:\n%s\n", cmdtp->usage);
++ return 1;
++ }
++
++ return 0;
++}
++
++/* -------------------------------------------------------------------- */
++
++
++U_BOOT_CMD(
++ s3c2410, 4, 1, do_s3c2410,
++ "s3c2410 - SoC specific commands\n",
++ "speed get - display current PLL speed config\n"
++ "s3c2410 speed list - display supporte PLL speed configs\n"
++ "s3c2410 speed set - set PLL speed\n"
++);
++
++#endif
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch
new file mode 100644
index 0000000000..349b83697e
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch
@@ -0,0 +1,41 @@
+Fix building with CRAMFS but not JFFS2 support
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/fs/cramfs/cramfs.c
+===================================================================
+--- u-boot.orig/fs/cramfs/cramfs.c 2007-02-17 11:46:26.000000000 +0100
++++ u-boot/fs/cramfs/cramfs.c 2007-02-17 11:54:36.000000000 +0100
+@@ -27,7 +27,7 @@
+ #include <common.h>
+ #include <malloc.h>
+
+-#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)
++#if (CONFIG_COMMANDS & CFG_CMD_CRAMFS)
+
+ #include <asm/byteorder.h>
+ #include <linux/stat.h>
+Index: u-boot/common/cmd_jffs2.c
+===================================================================
+--- u-boot.orig/common/cmd_jffs2.c 2007-02-17 11:47:51.000000000 +0100
++++ u-boot/common/cmd_jffs2.c 2007-02-17 14:08:25.000000000 +0100
+@@ -170,10 +170,19 @@
+ static struct mtd_device *current_dev = NULL;
+ static u8 current_partnum = 0;
+
++#ifdef CFG_CMD_CRAMFS
+ extern int cramfs_check (struct part_info *info);
+ extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename);
+ extern int cramfs_ls (struct part_info *info, char *filename);
+ extern int cramfs_info (struct part_info *info);
++#else
++/* defining empty macros for function names is ugly but avoids ifdef clutter
++ * all over the code */
++#define cramfs_check(x) (0)
++#define cramfs_load(x,y,z) (-1)
++#define cramfs_ls(x,y) (0)
++#define cramfs_info(x) (0)
++#endif
+
+ static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num);
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch
new file mode 100644
index 0000000000..1122f4894f
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch
@@ -0,0 +1,2081 @@
+Index: u-boot/drivers/usbdcore_ep0.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_ep0.c
++++ u-boot/drivers/usbdcore_ep0.c
+@@ -42,10 +42,15 @@
+ */
+
+ #include <common.h>
++DECLARE_GLOBAL_DATA_PTR;
+
+ #if defined(CONFIG_USB_DEVICE)
+ #include "usbdcore.h"
+
++#ifdef CONFIG_USBD_DFU
++#include <usb_dfu.h>
++#endif
++
+ #if 0
+ #define dbg_ep0(lvl,fmt,args...) serial_printf("[%s] %s:%d: "fmt"\n",__FILE__,__FUNCTION__,__LINE__,##args)
+ #else
+@@ -213,7 +218,7 @@
+ urb->buffer = device_descriptor;
+ urb->actual_length = MIN(sizeof(*device_descriptor), max);
+ }
+- /*dbg_ep0(3, "copied device configuration, actual_length: %x", urb->actual_length); */
++ dbg_ep0(3, "using device configuration, actual_length: %x", urb->actual_length);
+ break;
+
+ case USB_DESCRIPTOR_TYPE_CONFIGURATION:
+@@ -267,7 +272,24 @@
+ return -1;
+ case USB_DESCRIPTOR_TYPE_ENDPOINT:
+ return -1;
++ /* This really means "Class Specific Descriptor #1 == USB_DT_DFU */
+ case USB_DESCRIPTOR_TYPE_HID:
++#ifdef CONFIG_USBD_DFU
++ {
++ int bNumInterface =
++ le16_to_cpu(urb->device_request.wIndex);
++
++ /* In runtime mode, we only respond to the DFU INTERFACE,
++ * whereas in DFU mode, we respond for all intrfaces */
++ if (device->dfu_state != DFU_STATE_appIDLE &&
++ device->dfu_state != DFU_STATE_appDETACH ||
++ bNumInterface == CONFIG_USBD_DFU_INTERFACE) {
++ urb->buffer = &device->dfu_cfg_desc->func_dfu;
++ urb->actual_length = sizeof(struct usb_dfu_func_descriptor);
++ } else
++ return -1;
++ }
++#else /* CONFIG_USBD_DFU */
+ {
+ return -1; /* unsupported at this time */
+ #if 0
+@@ -294,6 +316,7 @@
+ max);
+ #endif
+ }
++#endif /* CONFIG_USBD_DFU */
+ break;
+ case USB_DESCRIPTOR_TYPE_REPORT:
+ {
+@@ -388,6 +411,24 @@
+ le16_to_cpu (request->wLength),
+ USBD_DEVICE_REQUESTS (request->bRequest));
+
++#ifdef CONFIG_USBD_DFU
++ if ((request->bmRequestType & 0x3f) == USB_TYPE_DFU &&
++ (device->dfu_state != DFU_STATE_appIDLE ||
++ le16_to_cpu(request->wIndex) == CONFIG_USBD_DFU_INTERFACE)) {
++ int rc = dfu_ep0_handler(urb);
++ switch (rc) {
++ case DFU_EP0_NONE:
++ case DFU_EP0_UNHANDLED:
++ break;
++ case DFU_EP0_ZLP:
++ case DFU_EP0_DATA:
++ return 0;
++ case DFU_EP0_STALL:
++ return -1;
++ }
++ }
++#endif /* CONFIG_USB_DFU */
++
+ /* handle USB Standard Request (c.f. USB Spec table 9-2) */
+ if ((request->bmRequestType & USB_REQ_TYPE_MASK) != 0) {
+ if (device->device_state <= STATE_CONFIGURED)
+@@ -570,7 +611,8 @@
+ device->interface = le16_to_cpu (request->wIndex);
+ device->alternate = le16_to_cpu (request->wValue);
+ /*dbg_ep0(2, "set interface: %d alternate: %d", device->interface, device->alternate); */
+- serial_printf ("DEVICE_SET_INTERFACE.. event?\n");
++ usbd_device_event_irq(device, DEVICE_SET_INTERFACE,
++ (request->wIndex << 16 | request->wValue));
+ return 0;
+
+ case USB_REQ_GET_STATUS:
+Index: u-boot/drivers/usbdfu.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/usbdfu.c
+@@ -0,0 +1,1069 @@
++/*
++ * (C) 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on existing SAM7DFU code from OpenPCD:
++ * (C) Copyright 2006 by Harald Welte <hwelte@hmw-consulting.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ * TODO:
++ * - make NAND support reasonably self-contained and put in apropriate
++ * ifdefs
++ * - add some means of synchronization, i.e. block commandline access
++ * while DFU transfer is in progress, and return to commandline once
++ * we're finished
++ * - add VERIFY support after writing to flash
++ * - sanely free() resources allocated during first uppload/download
++ * request when aborting
++ * - sanely free resources when another alternate interface is selected
++ *
++ * Maybe:
++ * - add something like uImage or some other header that provides CRC
++ * checking?
++ * - make 'dnstate' attached to 'struct usb_device_instance'
++ */
++
++#include <config.h>
++#if defined(CONFIG_USBD_DFU)
++
++#include <common.h>
++DECLARE_GLOBAL_DATA_PTR;
++
++#include <malloc.h>
++#include <linux/types.h>
++#include <linux/list.h>
++#include <asm/errno.h>
++#include <usbdcore.h>
++#include <usb_dfu.h>
++#include <usb_dfu_descriptors.h>
++#include <usb_dfu_trailer.h>
++
++#include <nand.h>
++#include <jffs2/load_kernel.h>
++int mtdparts_init(void);
++extern struct list_head devices;
++
++#include "usbdcore_s3c2410.h"
++#include "usbtty.h" /* for STR_* defs */
++
++#define RET_NOTHING 0
++#define RET_ZLP 1
++#define RET_STALL 2
++
++volatile enum dfu_state *system_dfu_state; /* for 3rd parties */
++
++
++struct dnload_state {
++ nand_info_t *nand;
++ struct part_info *part;
++ unsigned int part_net_size; /* net sizee (excl. bad blocks) of part */
++
++ nand_erase_options_t erase_opts;
++ nand_write_options_t write_opts;
++ nand_read_options_t read_opts;
++
++ unsigned char *ptr; /* pointer to next empty byte in buffer */
++ unsigned int off; /* offset of current erase page in flash chip */
++ unsigned char *buf; /* pointer to allocated erase page buffer */
++
++ /* unless doing an atomic transfer, we use the static buffer below.
++ * This saves us from having to clean up dynamic allications in the
++ * various error paths of the code. Also, it will always work, no
++ * matter what the memory situation is. */
++ unsigned char _buf[0x20000]; /* FIXME: depends flash page size */
++};
++
++static struct dnload_state _dnstate;
++
++static int dfu_trailer_matching(const struct uboot_dfu_trailer *trailer)
++{
++ if (trailer->magic != UBOOT_DFU_TRAILER_MAGIC ||
++ trailer->version != UBOOT_DFU_TRAILER_V1 ||
++ trailer->vendor != CONFIG_USBD_VENDORID ||
++ (trailer->product != CONFIG_USBD_PRODUCTID_CDCACM &&
++ trailer->product != CONFIG_USBD_PRODUCTID_GSERIAL))
++ return 0;
++#ifdef CONFIG_REVISION_TAG
++ if (trailer->revision != get_board_rev())
++ return 0;
++#endif
++
++ return 1;
++}
++
++static struct part_info *get_partition_nand(int idx)
++{
++ struct mtd_device *dev;
++ struct part_info *part;
++ struct list_head *pentry;
++ int i;
++
++ if (mtdparts_init())
++ return NULL;
++ if (list_empty(&devices))
++ return NULL;
++
++ dev = list_entry(devices.next, struct mtd_device, link);
++ i = 0;
++ list_for_each(pentry, &dev->parts) {
++ if (i == idx) {
++ part = list_entry(pentry, struct part_info, link);
++ return part;
++ }
++ i++;
++ }
++
++ return NULL;
++}
++
++#define LOAD_ADDR ((unsigned char *)0x32000000)
++
++static int initialize_ds_nand(struct usb_device_instance *dev, struct dnload_state *ds)
++{
++ ds->part = get_partition_nand(dev->alternate - 1);
++ if (!ds->part) {
++ printf("DFU: unable to find partition %u\b", dev->alternate-1);
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++ ds->nand = &nand_info[ds->part->dev->id->num];
++ ds->off = ds->part->offset;
++ ds->part_net_size = nand_net_part_size(ds->part);
++
++ if (ds->nand->erasesize > sizeof(ds->_buf)) {
++ printf("*** Warning - NAND ERASESIZE bigger than static buffer\n");
++ ds->buf = malloc(ds->nand->erasesize);
++ if (!ds->buf) {
++ printf("DFU: can't allocate %u bytes\n", ds->nand->erasesize);
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++ } else
++ ds->buf = ds->_buf;
++
++ ds->ptr = ds->buf;
++
++ memset(&ds->read_opts, 0, sizeof(ds->read_opts));
++
++ memset(&ds->erase_opts, 0, sizeof(ds->erase_opts));
++ ds->erase_opts.quiet = 1;
++ /* FIXME: do this more dynamic */
++ if (!strcmp(ds->part->name, "rootfs"))
++ ds->erase_opts.jffs2 = 1;
++
++ memset(&ds->write_opts, 0, sizeof(ds->write_opts));
++ ds->write_opts.pad = 1;
++ ds->write_opts.blockalign = 1;
++ ds->write_opts.quiet = 1;
++
++ debug("initialize_ds_nand(dev=%p, ds=%p): ", dev, ds);
++ debug("nand=%p, ptr=%p, buf=%p, off=0x%x\n", ds->nand, ds->ptr, ds->buf, ds->off);
++
++ return RET_NOTHING;
++}
++
++static int erase_flash_verify_nand(struct urb *urb, struct dnload_state *ds,
++ unsigned long erasesize, unsigned long size)
++{
++ struct usb_device_instance *dev = urb->device;
++ int rc;
++
++ debug("erase_flash_verify_nand(urb=%p, ds=%p, erase=0x%x size=0x%x)\n",
++ urb, ds, erasesize, size);
++
++ if (erasesize == ds->nand->erasesize) {
++ /* we're only writing a single block and need to
++ * do bad block skipping / offset adjustments our own */
++ while (ds->nand->block_isbad(ds->nand, ds->off)) {
++ debug("SKIP_ONE_BLOCK(0x%08x)!!\n", ds->off);
++ ds->off += ds->nand->erasesize;
++ }
++ }
++
++ /* we have finished one eraseblock, flash it */
++ ds->erase_opts.offset = ds->off;
++ ds->erase_opts.length = erasesize;
++ debug("Erasing 0x%x bytes @ offset 0x%x (jffs=%u)\n",
++ ds->erase_opts.length, ds->erase_opts.offset,
++ ds->erase_opts.jffs2);
++ rc = nand_erase_opts(ds->nand, &ds->erase_opts);
++ if (rc) {
++ debug("Error erasing\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errERASE;
++ return RET_STALL;
++ }
++
++ ds->write_opts.buffer = ds->buf;
++ ds->write_opts.length = size;
++ ds->write_opts.offset = ds->off;
++ debug("Writing 0x%x bytes @ offset 0x%x\n", size, ds->off);
++ rc = nand_write_opts(ds->nand, &ds->write_opts);
++ if (rc) {
++ debug("Error writing\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errWRITE;
++ return RET_STALL;
++ }
++
++ ds->off += size;
++ ds->ptr = ds->buf;
++
++ /* FIXME: implement verify! */
++ return RET_NOTHING;
++}
++
++static int erase_tail_clean_nand(struct urb *urb, struct dnload_state *ds)
++{
++ struct usb_device_instance *dev = urb->device;
++ int rc;
++
++ ds->erase_opts.offset = ds->off;
++ ds->erase_opts.length = ds->part->size-ds->off;
++ debug("Erasing 0x%x bytes @ offset 0x%x (jffs=%u)\n",
++ ds->erase_opts.length, ds->erase_opts.offset,
++ ds->erase_opts.jffs2);
++ rc = nand_erase_opts(ds->nand, &ds->erase_opts);
++ if (rc) {
++ debug("Error erasing\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errERASE;
++ return RET_STALL;
++ }
++
++ ds->off += ds->part->size; /* for consistency */
++
++ return RET_NOTHING;
++}
++
++/* Read the next erase blcok from NAND into buffer */
++static int read_next_nand(struct urb *urb, struct dnload_state *ds)
++{
++ struct usb_device_instance *dev = urb->device;
++ int rc;
++
++ ds->read_opts.buffer = ds->buf;
++ ds->read_opts.length = ds->nand->erasesize;
++ ds->read_opts.offset = ds->off;
++ ds->read_opts.quiet = 1;
++
++ debug("Reading 0x%x@0x%x to 0x%08p\n", ds->nand->erasesize,
++ ds->off, ds->buf);
++ rc = nand_read_opts(ds->nand, &ds->read_opts);
++ if (rc) {
++ debug("Error reading\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errWRITE;
++ return RET_STALL;
++ }
++ ds->off += ds->nand->erasesize;
++ ds->ptr = ds->buf;
++
++ return RET_NOTHING;
++}
++
++
++static int handle_dnload(struct urb *urb, u_int16_t val, u_int16_t len, int first)
++{
++ struct usb_device_instance *dev = urb->device;
++ struct dnload_state *ds = &_dnstate;
++ unsigned int actual_len = len;
++ unsigned int remain_len;
++ unsigned long size;
++ int rc;
++
++ debug("download(len=%u, first=%u) ", len, first);
++
++ if (len > CONFIG_USBD_DFU_XFER_SIZE) {
++ /* Too big. Not that we'd really care, but it's a
++ * DFU protocol violation */
++ debug("length exceeds flash page size ");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++
++ if (first) {
++ /* Make sure that we have a valid mtd partition table */
++ char *mtdp = getenv("mtdparts");
++ if (!mtdp)
++ run_command("dynpart", 0);
++ }
++
++ if (len == 0) {
++ debug("zero-size write -> MANIFEST_SYNC ");
++ dev->dfu_state = DFU_STATE_dfuMANIFEST_SYNC;
++
++ /* cleanup */
++ switch (dev->alternate) {
++ char buf[12];
++ case 0:
++ sprintf(buf, "%lx", ds->ptr - ds->buf);
++ setenv("filesize", buf);
++ ds->ptr = ds->buf;
++ break;
++ case 1:
++ if (ds->ptr >
++ ds->buf + sizeof(struct uboot_dfu_trailer)) {
++ struct uboot_dfu_trailer trailer;
++ dfu_trailer_mirror(&trailer, ds->ptr);
++ if (!dfu_trailer_matching(&trailer)) {
++ printf("DFU TRAILER NOT OK\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errTARGET;
++ return RET_STALL;
++ }
++
++ rc = erase_flash_verify_nand(urb, ds,
++ ds->part->size,
++ ds->part_net_size);
++ /* re-write dynenv marker in OOB */
++ run_command("dynenv set u-boot_env", 0);
++ }
++ ds->nand = NULL;
++ free(ds->buf);
++ ds->ptr = ds->buf = ds->_buf;
++ break;
++ default:
++ rc = 0;
++ if (ds->ptr > ds->buf)
++ rc = erase_flash_verify_nand(urb, ds,
++ ds->nand->erasesize,
++ ds->nand->erasesize);
++ /* rootfs partition */
++ if (!rc && dev->alternate == 5)
++ rc = erase_tail_clean_nand(urb, ds);
++
++ ds->nand = NULL;
++ break;
++ }
++
++ return RET_ZLP;
++ }
++
++ if (urb->actual_length != len) {
++ debug("urb->actual_length(%u) != len(%u) ?!? ",
++ urb->actual_length, len);
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++
++ if (first && ds->buf && ds->buf != ds->_buf && ds->buf != LOAD_ADDR) {
++ free(ds->buf);
++ ds->buf = ds->_buf;
++ }
++
++ switch (dev->alternate) {
++ case 0:
++ if (first) {
++ printf("Starting DFU DOWNLOAD to RAM (0x%08p)\n",
++ LOAD_ADDR);
++ ds->buf = LOAD_ADDR;
++ ds->ptr = ds->buf;
++ }
++
++ memcpy(ds->ptr, urb->buffer, len);
++ ds->ptr += len;
++ break;
++ case 1:
++ if (first) {
++ rc = initialize_ds_nand(dev, ds);
++ if (rc)
++ return rc;
++ ds->buf = malloc(ds->part_net_size);
++ if (!ds->buf) {
++ printf("No memory for atomic buffer!!\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errUNKNOWN;
++ return RET_STALL;
++ }
++ ds->ptr = ds->buf;
++ printf("Starting Atomic DFU DOWNLOAD to partition '%s'\n",
++ ds->part->name);
++ }
++
++ remain_len = (ds->buf + ds->part_net_size) - ds->ptr;
++ if (remain_len < len) {
++ len = remain_len;
++ printf("End of write exceeds partition end\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++ memcpy(ds->ptr, urb->buffer, len);
++ ds->ptr += len;
++ break;
++ default:
++ if (first) {
++ rc = initialize_ds_nand(dev, ds);
++ if (rc)
++ return rc;
++ printf("Starting DFU DOWNLOAD to partition '%s'\n",
++ ds->part->name);
++ }
++
++ size = ds->nand->erasesize;
++ remain_len = ds->buf + size - ds->ptr;
++ if (remain_len < len)
++ actual_len = remain_len;
++
++ memcpy(ds->ptr, urb->buffer, actual_len);
++ ds->ptr += actual_len;
++
++ /* check partition end */
++ if (ds->off + (ds->ptr - ds->buf) > ds->part->offset + ds->part->size) {
++ printf("End of write exceeds partition end\n");
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ return RET_STALL;
++ }
++
++ if (ds->ptr >= ds->buf + size) {
++ rc = erase_flash_verify_nand(urb, ds,
++ ds->nand->erasesize,
++ ds->nand->erasesize);
++ if (rc)
++ return rc;
++ /* copy remainder of data into buffer */
++ memcpy(ds->ptr, urb->buffer + actual_len, len - actual_len);
++ ds->ptr += (len - actual_len);
++ }
++ break;
++ }
++
++ return RET_ZLP;
++}
++
++static int handle_upload(struct urb *urb, u_int16_t val, u_int16_t len, int first)
++{
++ struct usb_device_instance *dev = urb->device;
++ struct dnload_state *ds = &_dnstate;
++ unsigned int remain;
++ int rc;
++
++ debug("upload(val=0x%02x, len=%u, first=%u) ", val, len, first);
++
++ if (len > CONFIG_USBD_DFU_XFER_SIZE) {
++ /* Too big */
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ dev->dfu_status = DFU_STATUS_errADDRESS;
++ //udc_ep0_send_stall();
++ debug("Error: Transfer size > CONFIG_USBD_DFU_XFER_SIZE ");
++ return -EINVAL;
++ }
++
++ switch (dev->alternate) {
++ case 0:
++ if (first) {
++ printf("Starting DFU Upload of RAM (0x%08p)\n",
++ LOAD_ADDR);
++ ds->ptr = ds->buf;
++ }
++
++ /* FIXME: end at some more dynamic point */
++ if (ds->ptr + len > LOAD_ADDR + 0x200000)
++ len = (LOAD_ADDR + 0x200000) - ds->ptr;
++
++ urb->buffer = ds->ptr;
++ urb->actual_length = len;
++ ds->ptr += len;
++ break;
++ default:
++ if (first) {
++ rc = initialize_ds_nand(dev, ds);
++ if (rc)
++ return -EINVAL;
++ printf("Starting DFU Upload of partition '%s'\n",
++ ds->part->name);
++ rc = read_next_nand(urb, ds);
++ if (rc)
++ return -EINVAL;
++ }
++
++ if (len > ds->nand->erasesize) {
++ printf("We don't support transfers bigger than %u\n",
++ ds->nand->erasesize);
++ len = ds->nand->erasesize;
++ }
++
++ remain = ds->nand->erasesize - (ds->ptr - ds->buf);
++ if (len < remain)
++ remain = len;
++
++ debug("copying %u bytes ", remain);
++ urb->buffer = ds->ptr;
++ ds->ptr += remain;
++ urb->actual_length = remain;
++
++ if (ds->ptr >= ds->buf + ds->nand->erasesize &&
++ ds->off < ds->part->offset + ds->part->size) {
++ rc = read_next_nand(urb, ds);
++ if (rc)
++ return -EINVAL;
++ if (len > remain) {
++ debug("copying another %u bytes ", len - remain);
++ memcpy(urb->buffer + remain, ds->ptr, len - remain);
++ ds->ptr += (len - remain);
++ urb->actual_length += (len - remain);
++ }
++ }
++ break;
++ }
++
++ debug("returning len=%u\n", len);
++ return len;
++}
++
++static void handle_getstatus(struct urb *urb, int max)
++{
++ struct usb_device_instance *dev = urb->device;
++ struct dfu_status *dstat = (struct dfu_status *) urb->buffer;
++
++ debug("getstatus ");
++
++ if (!urb->buffer || urb->buffer_length < sizeof(*dstat)) {
++ debug("invalid urb! ");
++ return;
++ }
++
++ switch (dev->dfu_state) {
++ case DFU_STATE_dfuDNLOAD_SYNC:
++ case DFU_STATE_dfuDNBUSY:
++#if 0
++ if (fsr & AT91C_MC_PROGE) {
++ debug("errPROG ");
++ dev->dfu_status = DFU_STATUS_errPROG;
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ } else if (fsr & AT91C_MC_LOCKE) {
++ debug("errWRITE ");
++ dev->dfu_status = DFU_STATUS_errWRITE;
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ } else if (fsr & AT91C_MC_FRDY) {
++#endif
++ debug("DNLOAD_IDLE ");
++ dev->dfu_state = DFU_STATE_dfuDNLOAD_IDLE;
++#if 0
++ } else {
++ debug("DNBUSY ");
++ dev->dfu_state = DFU_STATE_dfuDNBUSY;
++ }
++#endif
++ break;
++ case DFU_STATE_dfuMANIFEST_SYNC:
++ break;
++ default:
++ //return;
++ break;
++ }
++
++ /* send status response */
++ dstat->bStatus = dev->dfu_status;
++ dstat->bState = dev->dfu_state;
++ dstat->iString = 0;
++ /* FIXME: set dstat->bwPollTimeout */
++ urb->actual_length = MIN(sizeof(*dstat), max);
++
++ /* we don't need to explicitly send data here, will
++ * be done by the original caller! */
++}
++
++static void handle_getstate(struct urb *urb, int max)
++{
++ debug("getstate ");
++
++ if (!urb->buffer || urb->buffer_length < sizeof(u_int8_t)) {
++ debug("invalid urb! ");
++ return;
++ }
++
++ urb->buffer[0] = urb->device->dfu_state & 0xff;
++ urb->actual_length = sizeof(u_int8_t);
++}
++
++#ifndef CONFIG_USBD_PRODUCTID_DFU
++#define CONFIG_USBD_PRODUCTID_DFU CONFIG_USBD_PRODUCTID_CDCACM
++#endif
++
++static const struct usb_device_descriptor dfu_dev_descriptor = {
++ .bLength = USB_DT_DEVICE_SIZE,
++ .bDescriptorType = USB_DT_DEVICE,
++ .bcdUSB = 0x0100,
++ .bDeviceClass = 0x00,
++ .bDeviceSubClass = 0x00,
++ .bDeviceProtocol = 0x00,
++ .bMaxPacketSize0 = EP0_MAX_PACKET_SIZE,
++ .idVendor = CONFIG_USBD_VENDORID,
++ .idProduct = CONFIG_USBD_PRODUCTID_DFU,
++ .bcdDevice = 0x0000,
++ .iManufacturer = DFU_STR_MANUFACTURER,
++ .iProduct = DFU_STR_PRODUCT,
++ .iSerialNumber = DFU_STR_SERIAL,
++ .bNumConfigurations = 0x01,
++};
++
++static const struct _dfu_desc dfu_cfg_descriptor = {
++ .ucfg = {
++ .bLength = USB_DT_CONFIG_SIZE,
++ .bDescriptorType = USB_DT_CONFIG,
++ .wTotalLength = USB_DT_CONFIG_SIZE +
++ DFU_NUM_ALTERNATES * USB_DT_INTERFACE_SIZE +
++ USB_DT_DFU_SIZE,
++ .bNumInterfaces = 5,
++ .bConfigurationValue = 1,
++ .iConfiguration = DFU_STR_CONFIG,
++ .bmAttributes = BMATTRIBUTE_RESERVED,
++ .bMaxPower = 50,
++ },
++ .uif[0] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x00,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT0,
++ },
++ .uif[1] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x01,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT1,
++ },
++ .uif[2] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x02,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT2,
++ },
++ .uif[3] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x03,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT3,
++ },
++ .uif[4] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x04,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT4,
++ },
++ .uif[5] = {
++ .bLength = USB_DT_INTERFACE_SIZE,
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x00,
++ .bAlternateSetting = 0x05,
++ .bNumEndpoints = 0x00,
++ .bInterfaceClass = 0xfe,
++ .bInterfaceSubClass = 0x01,
++ .bInterfaceProtocol = 0x02,
++ .iInterface = DFU_STR_ALT5,
++ },
++ .func_dfu = DFU_FUNC_DESC,
++};
++
++int dfu_ep0_handler(struct urb *urb)
++{
++ int rc, ret = RET_NOTHING;
++ u_int8_t req = urb->device_request.bRequest;
++ u_int16_t val = urb->device_request.wValue;
++ u_int16_t len = urb->device_request.wLength;
++ struct usb_device_instance *dev = urb->device;
++
++ debug("dfu_ep0(req=0x%x, val=0x%x, len=%u) old_state = %u ",
++ req, val, len, dev->dfu_state);
++
++ switch (dev->dfu_state) {
++ case DFU_STATE_appIDLE:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ case USB_REQ_DFU_DETACH:
++ dev->dfu_state = DFU_STATE_appDETACH;
++ ret = RET_ZLP;
++ goto out;
++ break;
++ default:
++ ret = RET_STALL;
++ }
++ break;
++ case DFU_STATE_appDETACH:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_appIDLE;
++ ret = RET_STALL;
++ goto out;
++ break;
++ }
++ /* FIXME: implement timer to return to appIDLE */
++ break;
++ case DFU_STATE_dfuIDLE:
++ switch (req) {
++ case USB_REQ_DFU_DNLOAD:
++ if (len == 0) {
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ goto out;
++ }
++ dev->dfu_state = DFU_STATE_dfuDNLOAD_SYNC;
++ ret = handle_dnload(urb, val, len, 1);
++ break;
++ case USB_REQ_DFU_UPLOAD:
++ dev->dfu_state = DFU_STATE_dfuUPLOAD_IDLE;
++ handle_upload(urb, val, len, 1);
++ break;
++ case USB_REQ_DFU_ABORT:
++ /* no zlp? */
++ ret = RET_ZLP;
++ break;
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ case USB_REQ_DFU_DETACH:
++ /* Proprietary extension: 'detach' from idle mode and
++ * get back to runtime mode in case of USB Reset. As
++ * much as I dislike this, we just can't use every USB
++ * bus reset to switch back to runtime mode, since at
++ * least the Linux USB stack likes to send a number of resets
++ * in a row :( */
++ dev->dfu_state = DFU_STATE_dfuMANIFEST_WAIT_RST;
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ goto out;
++ break;
++ }
++ break;
++ case DFU_STATE_dfuDNLOAD_SYNC:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ /* FIXME: state transition depending on block completeness */
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ goto out;
++ }
++ break;
++ case DFU_STATE_dfuDNBUSY:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ /* FIXME: only accept getstatus if bwPollTimeout
++ * has elapsed */
++ handle_getstatus(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ goto out;
++ }
++ break;
++ case DFU_STATE_dfuDNLOAD_IDLE:
++ switch (req) {
++ case USB_REQ_DFU_DNLOAD:
++ dev->dfu_state = DFU_STATE_dfuDNLOAD_SYNC;
++ ret = handle_dnload(urb, val, len, 0);
++ break;
++ case USB_REQ_DFU_ABORT:
++ dev->dfu_state = DFU_STATE_dfuIDLE;
++ ret = RET_ZLP;
++ break;
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ break;
++ }
++ break;
++ case DFU_STATE_dfuMANIFEST_SYNC:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ /* We're MainfestationTolerant */
++ dev->dfu_state = DFU_STATE_dfuIDLE;
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ break;
++ }
++ break;
++ case DFU_STATE_dfuMANIFEST:
++ /* we should never go here */
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ break;
++ case DFU_STATE_dfuMANIFEST_WAIT_RST:
++ /* we should never go here */
++ break;
++ case DFU_STATE_dfuUPLOAD_IDLE:
++ switch (req) {
++ case USB_REQ_DFU_UPLOAD:
++ /* state transition if less data then requested */
++ rc = handle_upload(urb, val, len, 0);
++ if (rc >= 0 && rc < len)
++ dev->dfu_state = DFU_STATE_dfuIDLE;
++ break;
++ case USB_REQ_DFU_ABORT:
++ dev->dfu_state = DFU_STATE_dfuIDLE;
++ /* no zlp? */
++ ret = RET_ZLP;
++ break;
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ break;
++ }
++ break;
++ case DFU_STATE_dfuERROR:
++ switch (req) {
++ case USB_REQ_DFU_GETSTATUS:
++ handle_getstatus(urb, len);
++ break;
++ case USB_REQ_DFU_GETSTATE:
++ handle_getstate(urb, len);
++ break;
++ case USB_REQ_DFU_CLRSTATUS:
++ dev->dfu_state = DFU_STATE_dfuIDLE;
++ dev->dfu_status = DFU_STATUS_OK;
++ /* no zlp? */
++ ret = RET_ZLP;
++ break;
++ default:
++ dev->dfu_state = DFU_STATE_dfuERROR;
++ ret = RET_STALL;
++ break;
++ }
++ break;
++ default:
++ return DFU_EP0_UNHANDLED;
++ break;
++ }
++
++out:
++ debug("new_state = %u, ret = %u\n", dev->dfu_state, ret);
++
++ switch (ret) {
++ case RET_ZLP:
++ //udc_ep0_send_zlp();
++ urb->actual_length = 0;
++ return DFU_EP0_ZLP;
++ break;
++ case RET_STALL:
++ //udc_ep0_send_stall();
++ return DFU_EP0_STALL;
++ break;
++ case RET_NOTHING:
++ break;
++ }
++
++ return DFU_EP0_DATA;
++}
++
++void str2wide (char *str, u16 * wide);
++static struct usb_string_descriptor *create_usbstring(char *string)
++{
++ struct usb_string_descriptor *strdesc;
++ int size = sizeof(*strdesc) + strlen(string)*2;
++
++ if (size > 255)
++ return NULL;
++
++ strdesc = malloc(size);
++ if (!strdesc)
++ return NULL;
++
++ strdesc->bLength = size;
++ strdesc->bDescriptorType = USB_DT_STRING;
++ str2wide(string, strdesc->wData);
++
++ return strdesc;
++}
++
++
++static void dfu_init_strings(struct usb_device_instance *dev)
++{
++ int i;
++ struct usb_string_descriptor *strdesc;
++
++ strdesc = create_usbstring(CONFIG_DFU_CFG_STR);
++ usb_strings[DFU_STR_CONFIG] = strdesc;
++
++ for (i = 0; i < DFU_NUM_ALTERNATES; i++) {
++ if (i == 0) {
++ strdesc = create_usbstring(CONFIG_DFU_ALT0_STR);
++ } else {
++ struct part_info *part = get_partition_nand(i-1);
++
++ if (part)
++ strdesc = create_usbstring(part->name);
++ else
++ strdesc =
++ create_usbstring("undefined partition");
++ }
++ if (!strdesc)
++ continue;
++ usb_strings[STR_COUNT+i+1] = strdesc;
++ }
++}
++
++int dfu_init_instance(struct usb_device_instance *dev)
++{
++ dev->dfu_dev_desc = &dfu_dev_descriptor;
++ dev->dfu_cfg_desc = &dfu_cfg_descriptor;
++ dev->dfu_state = DFU_STATE_appIDLE;
++ dev->dfu_status = DFU_STATUS_OK;
++
++ if (system_dfu_state)
++ printf("SURPRISE: system_dfu_state is already set\n");
++ system_dfu_state = &dev->dfu_state;
++
++ dfu_init_strings(dev);
++
++ return 0;
++}
++
++static int stdout_switched;
++
++/* event handler for usb device state events */
++void dfu_event(struct usb_device_instance *device,
++ usb_device_event_t event, int data)
++{
++ char *out;
++
++ switch (event) {
++ case DEVICE_RESET:
++ switch (device->dfu_state) {
++ case DFU_STATE_appDETACH:
++ device->dfu_state = DFU_STATE_dfuIDLE;
++ out = getenv("stdout");
++ if (out && !strcmp(out, "usbtty")) {
++ setenv("stdout", "vga");
++ setenv("stderr", "vga");
++ stdout_switched = 1;
++ }
++ printf("DFU: Switching to DFU Mode\n");
++ break;
++ case DFU_STATE_dfuMANIFEST_WAIT_RST:
++ device->dfu_state = DFU_STATE_appIDLE;
++ printf("DFU: Switching back to Runtime mode\n");
++ if (stdout_switched) {
++ setenv("stdout", "usbtty");
++ setenv("stderr", "usbtty");
++ stdout_switched = 0;
++ }
++ break;
++ default:
++ break;
++ }
++ break;
++ case DEVICE_CONFIGURED:
++ case DEVICE_DE_CONFIGURED:
++ debug("SET_CONFIGURATION(%u) ", device->configuration);
++ /* fallthrough */
++ case DEVICE_SET_INTERFACE:
++ debug("SET_INTERFACE(%u,%u) old_state = %u ",
++ device->interface, device->alternate,
++ device->dfu_state);
++ switch (device->dfu_state) {
++ case DFU_STATE_appIDLE:
++ case DFU_STATE_appDETACH:
++ case DFU_STATE_dfuIDLE:
++ case DFU_STATE_dfuMANIFEST_WAIT_RST:
++ /* do nothing, we're fine */
++ break;
++ case DFU_STATE_dfuDNLOAD_SYNC:
++ case DFU_STATE_dfuDNBUSY:
++ case DFU_STATE_dfuDNLOAD_IDLE:
++ case DFU_STATE_dfuMANIFEST:
++ device->dfu_state = DFU_STATE_dfuERROR;
++ device->dfu_status = DFU_STATUS_errNOTDONE;
++ /* FIXME: free malloc()ed buffer! */
++ break;
++ case DFU_STATE_dfuMANIFEST_SYNC:
++ case DFU_STATE_dfuUPLOAD_IDLE:
++ case DFU_STATE_dfuERROR:
++ device->dfu_state = DFU_STATE_dfuERROR;
++ device->dfu_status = DFU_STATUS_errUNKNOWN;
++ break;
++ }
++ debug("new_state = %u\n", device->dfu_state);
++ break;
++ default:
++ break;
++ }
++}
++#endif /* CONFIG_USBD_DFU */
+Index: u-boot/drivers/Makefile
+===================================================================
+--- u-boot.orig/drivers/Makefile
++++ u-boot/drivers/Makefile
+@@ -47,7 +47,7 @@
+ status_led.o sym53c8xx.o systemace.o ahci.o \
+ ti_pci1410a.o tigon3.o tsec.o \
+ tsi108_eth.o tsi108_i2c.o tsi108_pci.o \
+- usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbdcore_s3c2410.o usbtty.o \
++ usbdcore.o usbdfu.o usbdcore_ep0.o usbdcore_omap1510.o usbdcore_s3c2410.o usbtty.o \
+ videomodes.o w83c553f.o \
+ ks8695eth.o \
+ pcf50606.o \
+Index: u-boot/drivers/usbdcore.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore.c
++++ u-boot/drivers/usbdcore.c
+@@ -31,6 +31,7 @@
+
+ #include <malloc.h>
+ #include "usbdcore.h"
++#include <usb_dfu.h>
+
+ #define MAX_INTERFACES 2
+
+@@ -212,6 +213,10 @@
+ */
+ struct usb_device_descriptor *usbd_device_device_descriptor (struct usb_device_instance *device, int port)
+ {
++#ifdef CONFIG_USBD_DFU
++ if (device->dfu_state != DFU_STATE_appIDLE)
++ return device->dfu_dev_desc;
++#endif
+ return (device->device_descriptor);
+ }
+
+@@ -232,6 +237,10 @@
+ if (!(configuration_instance = usbd_device_configuration_instance (device, port, configuration))) {
+ return NULL;
+ }
++#ifdef CONFIG_USBD_DFU
++ if (device->dfu_state != DFU_STATE_appIDLE)
++ return (&device->dfu_cfg_desc->ucfg);
++#endif
+ return (configuration_instance->configuration_descriptor);
+ }
+
+@@ -253,6 +262,13 @@
+ if (!(interface_instance = usbd_device_interface_instance (device, port, configuration, interface))) {
+ return NULL;
+ }
++#ifdef CONFIG_USBD_DFU
++ if (device->dfu_state != DFU_STATE_appIDLE) {
++ if (alternate < 0 || alternate >= DFU_NUM_ALTERNATES)
++ return NULL;
++ return &device->dfu_cfg_desc->uif[alternate];
++ }
++#endif
+ if ((alternate < 0) || (alternate >= interface_instance->alternates)) {
+ return NULL;
+ }
+@@ -681,4 +697,7 @@
+ /* usbdbg("calling device->event"); */
+ device->event(device, event, data);
+ }
++#ifdef CONFIG_USBD_DFU
++ dfu_event(device, event, data);
++#endif
+ }
+Index: u-boot/drivers/usbtty.c
+===================================================================
+--- u-boot.orig/drivers/usbtty.c
++++ u-boot/drivers/usbtty.c
+@@ -31,6 +31,8 @@
+ #include "usbtty.h"
+ #include "usb_cdc_acm.h"
+ #include "usbdescriptors.h"
++#include <usb_dfu_descriptors.h>
++#include <usb_dfu.h>
+ #include <config.h> /* If defined, override Linux identifiers with
+ * vendor specific ones */
+
+@@ -118,7 +120,7 @@
+ static unsigned short rx_endpoint = 0;
+ static unsigned short tx_endpoint = 0;
+ static unsigned short interface_count = 0;
+-static struct usb_string_descriptor *usbtty_string_table[STR_COUNT];
++static struct usb_string_descriptor *usbtty_string_table[NUM_STRINGS];
+
+ /* USB Descriptor Strings */
+ static u8 wstrLang[4] = {4,USB_DT_STRING,0x9,0x4};
+@@ -169,6 +171,10 @@
+ struct usb_interface_descriptor data_class_interface;
+ struct usb_endpoint_descriptor
+ data_endpoints[NUM_ENDPOINTS-1] __attribute__((packed));
++#ifdef CONFIG_USBD_DFU
++ struct usb_interface_descriptor uif_dfu;
++ struct usb_dfu_func_descriptor func_dfu;
++#endif
+ } __attribute__((packed));
+
+ static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
+@@ -179,7 +185,11 @@
+ .bDescriptorType = USB_DT_CONFIG,
+ .wTotalLength =
+ cpu_to_le16(sizeof(struct acm_config_desc)),
++#ifdef CONFIG_USBD_DFU
++ .bNumInterfaces = NUM_ACM_INTERFACES +1,
++#else
+ .bNumInterfaces = NUM_ACM_INTERFACES,
++#endif
+ .bConfigurationValue = 1,
+ .iConfiguration = STR_CONFIG,
+ .bmAttributes =
+@@ -278,6 +288,11 @@
+ .bInterval = 0xFF,
+ },
+ },
++#ifdef CONFIG_USBD_DFU
++ /* Interface 3 */
++ .uif_dfu = DFU_RT_IF_DESC,
++ .func_dfu = DFU_FUNC_DESC,
++#endif
+ },
+ };
+
+@@ -390,7 +405,7 @@
+ void usbtty_poll (void);
+
+ /* utility function for converting char* to wide string used by USB */
+-static void str2wide (char *str, u16 * wide)
++void str2wide (char *str, u16 * wide)
+ {
+ int i;
+ for (i = 0; i < strlen (str) && str[i]; i++){
+@@ -652,6 +667,9 @@
+ device_instance->bus = bus_instance;
+ device_instance->configurations = NUM_CONFIGS;
+ device_instance->configuration_instance_array = config_instance;
++#ifdef CONFIG_USBD_DFU
++ dfu_init_instance(device_instance);
++#endif
+
+ /* initialize bus instance */
+ memset (bus_instance, 0, sizeof (struct usb_bus_instance));
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -167,7 +167,7 @@
+ */
+ #define CONFIG_STACKSIZE (128*1024) /* regular stack */
+ #ifdef CONFIG_USE_IRQ
+-#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_IRQ (8*1024) /* IRQ stack */
+ #define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
+ #endif
+
+@@ -184,6 +184,10 @@
+ #define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc"
+ #define CONFIG_USBD_PRODUCT_NAME "Neo1973 Bootloader " U_BOOT_VERSION
+ #define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 4096 /* 0x4000 */
++#define CONFIG_USBD_DFU_INTERFACE 2
++
+
+ /*-----------------------------------------------------------------------
+ * Physical Memory Map
+Index: u-boot/include/usb_dfu.h
+===================================================================
+--- /dev/null
++++ u-boot/include/usb_dfu.h
+@@ -0,0 +1,99 @@
++#ifndef _DFU_H
++#define _DFU_H
++
++/* USB Device Firmware Update Implementation for u-boot
++ * (C) 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on: USB Device Firmware Update Implementation for OpenPCD
++ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
++ *
++ * This ought to be compliant to the USB DFU Spec 1.0 as available from
++ * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <asm/types.h>
++#include <usbdescriptors.h>
++#include <usb_dfu_descriptors.h>
++#include <config.h>
++
++/* USB DFU functional descriptor */
++#define DFU_FUNC_DESC { \
++ .bLength = USB_DT_DFU_SIZE, \
++ .bDescriptorType = USB_DT_DFU, \
++ .bmAttributes = USB_DFU_CAN_UPLOAD | USB_DFU_CAN_DOWNLOAD | USB_DFU_MANIFEST_TOL, \
++ .wDetachTimeOut = 0xff00, \
++ .wTransferSize = CONFIG_USBD_DFU_XFER_SIZE, \
++ .bcdDFUVersion = 0x0100, \
++}
++
++/* USB Interface descriptor in Runtime mode */
++#define DFU_RT_IF_DESC { \
++ .bLength = USB_DT_INTERFACE_SIZE, \
++ .bDescriptorType = USB_DT_INTERFACE, \
++ .bInterfaceNumber = CONFIG_USBD_DFU_INTERFACE, \
++ .bAlternateSetting = 0x00, \
++ .bNumEndpoints = 0x00, \
++ .bInterfaceClass = 0xfe, \
++ .bInterfaceSubClass = 0x01, \
++ .bInterfaceProtocol = 0x01, \
++ .iInterface = DFU_STR_CONFIG, \
++}
++
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++
++#define DFU_NUM_ALTERNATES 6
++
++#define DFU_STR_MANUFACTURER STR_MANUFACTURER
++#define DFU_STR_PRODUCT STR_PRODUCT
++#define DFU_STR_SERIAL STR_SERIAL
++#define DFU_STR_CONFIG (STR_COUNT)
++#define DFU_STR_ALT0 (STR_COUNT+1)
++#define DFU_STR_ALT1 (STR_COUNT+2)
++#define DFU_STR_ALT2 (STR_COUNT+3)
++#define DFU_STR_ALT3 (STR_COUNT+4)
++#define DFU_STR_ALT4 (STR_COUNT+5)
++#define DFU_STR_ALT5 (STR_COUNT+6)
++#define DFU_STR_COUNT (STR_COUNT+7)
++
++#define DFU_NUM_STRINGS (STR_COUNT+8)
++
++#define CONFIG_DFU_CFG_STR "USB Device Firmware Upgrade"
++#define CONFIG_DFU_ALT0_STR "RAM 0x32000000"
++
++struct _dfu_desc {
++ struct usb_configuration_descriptor ucfg;
++ struct usb_interface_descriptor uif[DFU_NUM_ALTERNATES];
++ struct usb_dfu_func_descriptor func_dfu;
++};
++
++int dfu_init_instance(struct usb_device_instance *dev);
++
++#define DFU_EP0_NONE 0
++#define DFU_EP0_UNHANDLED 1
++#define DFU_EP0_STALL 2
++#define DFU_EP0_ZLP 3
++#define DFU_EP0_DATA 4
++
++extern volatile enum dfu_state *system_dfu_state; /* for 3rd parties */
++
++int dfu_ep0_handler(struct urb *urb);
++
++void dfu_event(struct usb_device_instance *device,
++ usb_device_event_t event, int data);
++
++#endif /* _DFU_H */
+Index: u-boot/include/usb_dfu_descriptors.h
+===================================================================
+--- /dev/null
++++ u-boot/include/usb_dfu_descriptors.h
+@@ -0,0 +1,94 @@
++#ifndef _USB_DFU_H
++#define _USB_DFU_H
++/* USB Device Firmware Update Implementation for OpenPCD
++ * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de>
++ *
++ * Protocol definitions for USB DFU
++ *
++ * This ought to be compliant to the USB DFU Spec 1.0 as available from
++ * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++
++#define USB_DT_DFU 0x21
++
++struct usb_dfu_func_descriptor {
++ u_int8_t bLength;
++ u_int8_t bDescriptorType;
++ u_int8_t bmAttributes;
++#define USB_DFU_CAN_DOWNLOAD (1 << 0)
++#define USB_DFU_CAN_UPLOAD (1 << 1)
++#define USB_DFU_MANIFEST_TOL (1 << 2)
++#define USB_DFU_WILL_DETACH (1 << 3)
++ u_int16_t wDetachTimeOut;
++ u_int16_t wTransferSize;
++ u_int16_t bcdDFUVersion;
++} __attribute__ ((packed));
++
++#define USB_DT_DFU_SIZE 9
++
++#define USB_TYPE_DFU (USB_TYPE_CLASS|USB_RECIP_INTERFACE)
++
++/* DFU class-specific requests (Section 3, DFU Rev 1.1) */
++#define USB_REQ_DFU_DETACH 0x00
++#define USB_REQ_DFU_DNLOAD 0x01
++#define USB_REQ_DFU_UPLOAD 0x02
++#define USB_REQ_DFU_GETSTATUS 0x03
++#define USB_REQ_DFU_CLRSTATUS 0x04
++#define USB_REQ_DFU_GETSTATE 0x05
++#define USB_REQ_DFU_ABORT 0x06
++
++struct dfu_status {
++ u_int8_t bStatus;
++ u_int8_t bwPollTimeout[3];
++ u_int8_t bState;
++ u_int8_t iString;
++} __attribute__((packed));
++
++#define DFU_STATUS_OK 0x00
++#define DFU_STATUS_errTARGET 0x01
++#define DFU_STATUS_errFILE 0x02
++#define DFU_STATUS_errWRITE 0x03
++#define DFU_STATUS_errERASE 0x04
++#define DFU_STATUS_errCHECK_ERASED 0x05
++#define DFU_STATUS_errPROG 0x06
++#define DFU_STATUS_errVERIFY 0x07
++#define DFU_STATUS_errADDRESS 0x08
++#define DFU_STATUS_errNOTDONE 0x09
++#define DFU_STATUS_errFIRMWARE 0x0a
++#define DFU_STATUS_errVENDOR 0x0b
++#define DFU_STATUS_errUSBR 0x0c
++#define DFU_STATUS_errPOR 0x0d
++#define DFU_STATUS_errUNKNOWN 0x0e
++#define DFU_STATUS_errSTALLEDPKT 0x0f
++
++enum dfu_state {
++ DFU_STATE_appIDLE = 0,
++ DFU_STATE_appDETACH = 1,
++ DFU_STATE_dfuIDLE = 2,
++ DFU_STATE_dfuDNLOAD_SYNC = 3,
++ DFU_STATE_dfuDNBUSY = 4,
++ DFU_STATE_dfuDNLOAD_IDLE = 5,
++ DFU_STATE_dfuMANIFEST_SYNC = 6,
++ DFU_STATE_dfuMANIFEST = 7,
++ DFU_STATE_dfuMANIFEST_WAIT_RST = 8,
++ DFU_STATE_dfuUPLOAD_IDLE = 9,
++ DFU_STATE_dfuERROR = 10,
++};
++
++#endif /* _USB_DFU_H */
+Index: u-boot/include/usbdcore.h
+===================================================================
+--- u-boot.orig/include/usbdcore.h
++++ u-boot/include/usbdcore.h
+@@ -33,6 +33,7 @@
+
+ #include <common.h>
+ #include "usbdescriptors.h"
++#include <usb_dfu_descriptors.h>
+
+
+ #define MAX_URBS_QUEUED 5
+@@ -475,7 +476,11 @@
+ * function driver to inform it that data has arrived.
+ */
+
++#ifdef CONFIG_USBD_DFU
++#define URB_BUF_SIZE (128+CONFIG_USBD_DFU_XFER_SIZE)
++#else
+ #define URB_BUF_SIZE 128 /* in linux we'd malloc this, but in u-boot we prefer static data */
++#endif
+ struct urb {
+
+ struct usb_endpoint_instance *endpoint;
+@@ -603,6 +608,12 @@
+ unsigned long usbd_rxtx_timestamp;
+ unsigned long usbd_last_rxtx_timestamp;
+
++#ifdef CONFIG_USBD_DFU
++ const struct usb_device_descriptor *dfu_dev_desc;
++ const struct _dfu_desc *dfu_cfg_desc;
++ enum dfu_state dfu_state;
++ u_int8_t dfu_status;
++#endif
+ };
+
+ /* Bus Interface configuration structure
+@@ -632,6 +643,8 @@
+ extern char *usbd_device_requests[];
+ extern char *usbd_device_descriptors[];
+
++extern struct usb_string_descriptor **usb_strings;
++
+ void urb_link_init (urb_link * ul);
+ void urb_detach (struct urb *urb);
+ urb_link *first_urb_link (urb_link * hd);
+Index: u-boot/drivers/usbtty.h
+===================================================================
+--- u-boot.orig/drivers/usbtty.h
++++ u-boot/drivers/usbtty.h
+@@ -71,4 +71,10 @@
+ #define STR_CTRL_INTERFACE 0x06
+ #define STR_COUNT 0x07
+
++#ifdef CONFIG_USBD_DFU
++#define NUM_STRINGS DFU_STR_COUNT
++#else
++#define NUM_STRINGS STR_COUNT
++#endif
++
+ #endif
+Index: u-boot/include/configs/qt2410.h
+===================================================================
+--- u-boot.orig/include/configs/qt2410.h
++++ u-boot/include/configs/qt2410.h
+@@ -199,7 +199,8 @@
+ #define CONFIG_USBD_PRODUCT_NAME "QT2410 Bootloader " U_BOOT_VERSION
+ #define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
+ #define CONFIG_USBD_DFU 1
+-#define CONFIG_USBD_DFU_XFER_SIZE 0x4000
++#define CONFIG_USBD_DFU_XFER_SIZE 4096
++#define CONFIG_USBD_DFU_INTERFACE 2
+
+ /*-----------------------------------------------------------------------
+ * Physical Memory Map
+Index: u-boot/tools/Makefile
+===================================================================
+--- u-boot.orig/tools/Makefile
++++ u-boot/tools/Makefile
+@@ -21,10 +21,10 @@
+ # MA 02111-1307 USA
+ #
+
+-BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX)
++BIN_FILES = img2srec$(SFX) mkimage$(SFX) envcrc$(SFX) gen_eth_addr$(SFX) bmp_logo$(SFX) mkudfu$(SFX)
+
+ OBJ_LINKS = environment.o crc32.o
+-OBJ_FILES = img2srec.o mkimage.o envcrc.o gen_eth_addr.o bmp_logo.o
++OBJ_FILES = img2srec.o mkimage.o envcrc.o gen_eth_addr.o bmp_logo.o mkudfu.o
+
+ ifeq ($(ARCH),mips)
+ BIN_FILES += inca-swap-bytes$(SFX)
+@@ -137,6 +137,10 @@
+ $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
+ $(STRIP) $@
+
++$(obj)mkudfu$(SFX): $(obj)mkudfu.o
++ $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
++ $(STRIP) $@
++
+ $(obj)ncb$(SFX): $(obj)ncb.o
+ $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
+ $(STRIP) $@
+Index: u-boot/tools/mkudfu.c
+===================================================================
+--- /dev/null
++++ u-boot/tools/mkudfu.c
+@@ -0,0 +1,314 @@
++/*
++ * USB DFU file trailer tool
++ * (C) Copyright by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on mkimage.c, copyright information as follows:
++ *
++ * (C) Copyright 2000-2004
++ * DENX Software Engineering
++ * Wolfgang Denk, wd@denx.de
++ * All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <errno.h>
++#include <fcntl.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#ifndef __WIN32__
++#include <netinet/in.h> /* for host / network byte order conversions */
++#endif
++#include <sys/mman.h>
++#include <sys/stat.h>
++#include <time.h>
++#include <unistd.h>
++
++#if defined(__BEOS__) || defined(__NetBSD__) || defined(__APPLE__)
++#include <inttypes.h>
++#endif
++
++#ifdef __WIN32__
++typedef unsigned int __u32;
++
++#define SWAP_LONG(x) \
++ ((__u32)( \
++ (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \
++ (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \
++ (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \
++ (((__u32)(x) & (__u32)0xff000000UL) >> 24) ))
++typedef unsigned char uint8_t;
++typedef unsigned short uint16_t;
++typedef unsigned int uint32_t;
++
++#define ntohl(a) SWAP_LONG(a)
++#define htonl(a) SWAP_LONG(a)
++#endif /* __WIN32__ */
++
++#ifndef O_BINARY /* should be define'd on __WIN32__ */
++#define O_BINARY 0
++#endif
++
++#include <usb_dfu_trailer.h>
++
++extern int errno;
++
++#ifndef MAP_FAILED
++#define MAP_FAILED (-1)
++#endif
++
++static char *cmdname;
++
++static char *datafile;
++static char *imagefile;
++
++
++static void usage()
++{
++ fprintf (stderr, "%s - create / display u-boot DFU trailer\n", cmdname);
++ fprintf (stderr, "Usage: %s -l image\n"
++ " -l ==> list image header information\n"
++ " %s -v VID -p PID -r REV -d data_file image\n",
++ cmdname, cmdname);
++ fprintf (stderr, " -v ==> set vendor ID to 'VID'\n"
++ " -p ==> set product ID system to 'PID'\n"
++ " -r ==> set hardware revision to 'REV'\n"
++ " -d ==> use 'data_file' as input file\n"
++ );
++ exit (EXIT_FAILURE);
++}
++
++static void print_trailer(struct uboot_dfu_trailer *trailer)
++{
++ printf("===> DFU Trailer information:\n");
++ printf("Trailer Vers.: %d\n", trailer->version);
++ printf("Trailer Length: %d\n", trailer->length);
++ printf("VendorID: 0x%04x\n", trailer->vendor);
++ printf("ProductID: 0x%04x\n", trailer->product);
++ printf("HW Revision: 0x%04x\n", trailer->revision);
++}
++
++static void copy_file (int ifd, const char *datafile, int pad)
++{
++ int dfd;
++ struct stat sbuf;
++ unsigned char *ptr;
++ int tail;
++ int zero = 0;
++ int offset = 0;
++ int size;
++
++ if ((dfd = open(datafile, O_RDONLY|O_BINARY)) < 0) {
++ fprintf (stderr, "%s: Can't open %s: %s\n",
++ cmdname, datafile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ if (fstat(dfd, &sbuf) < 0) {
++ fprintf (stderr, "%s: Can't stat %s: %s\n",
++ cmdname, datafile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ ptr = (unsigned char *)mmap(0, sbuf.st_size,
++ PROT_READ, MAP_SHARED, dfd, 0);
++ if (ptr == (unsigned char *)MAP_FAILED) {
++ fprintf (stderr, "%s: Can't read %s: %s\n",
++ cmdname, datafile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ size = sbuf.st_size - offset;
++ if (write(ifd, ptr + offset, size) != size) {
++ fprintf (stderr, "%s: Write error on %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ if (pad && ((tail = size % 4) != 0)) {
++
++ if (write(ifd, (char *)&zero, 4-tail) != 4-tail) {
++ fprintf (stderr, "%s: Write error on %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++ }
++
++ (void) munmap((void *)ptr, sbuf.st_size);
++ (void) close (dfd);
++}
++
++
++int main(int argc, char **argv)
++{
++ int ifd;
++ int lflag = 0;
++ struct stat sbuf;
++ u_int16_t opt_vendor, opt_product, opt_revision;
++ struct uboot_dfu_trailer _hdr, _mirror, *hdr = &_hdr;
++
++ opt_vendor = opt_product = opt_revision = 0;
++
++ cmdname = *argv;
++
++ while (--argc > 0 && **++argv == '-') {
++ while (*++*argv) {
++ switch (**argv) {
++ case 'l':
++ lflag = 1;
++ break;
++ case 'v':
++ if (--argc <= 0)
++ usage ();
++ opt_vendor = strtoul(*++argv, NULL, 16);
++ goto NXTARG;
++ case 'p':
++ if (--argc <= 0)
++ usage ();
++ opt_product = strtoul(*++argv, NULL, 16);
++ goto NXTARG;
++ case 'r':
++ if (--argc <= 0)
++ usage ();
++ opt_revision = strtoul(*++argv, NULL, 16);
++ goto NXTARG;
++ case 'd':
++ if (--argc <= 0)
++ usage ();
++ datafile = *++argv;
++ goto NXTARG;
++ case 'h':
++ usage();
++ break;
++ default:
++ usage();
++ }
++ }
++NXTARG: ;
++ }
++
++ if (argc != 1)
++ usage();
++
++ imagefile = *argv;
++
++ if (lflag)
++ ifd = open(imagefile, O_RDONLY|O_BINARY);
++ else
++ ifd = open(imagefile, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, 0666);
++
++ if (ifd < 0) {
++ fprintf (stderr, "%s: Can't open %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ if (lflag) {
++ unsigned char *ptr;
++ /* list header information of existing image */
++ if (fstat(ifd, &sbuf) < 0) {
++ fprintf (stderr, "%s: Can't stat %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ if ((unsigned)sbuf.st_size < sizeof(struct uboot_dfu_trailer)) {
++ fprintf (stderr,
++ "%s: Bad size: \"%s\" is no valid image\n",
++ cmdname, imagefile);
++ exit (EXIT_FAILURE);
++ }
++
++ ptr = (unsigned char *)mmap(0, sbuf.st_size,
++ PROT_READ, MAP_SHARED, ifd, 0);
++ if ((caddr_t)ptr == (caddr_t)-1) {
++ fprintf (stderr, "%s: Can't read %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ dfu_trailer_mirror(hdr, ptr+sbuf.st_size);
++
++ if (hdr->magic != UBOOT_DFU_TRAILER_MAGIC) {
++ fprintf (stderr,
++ "%s: Bad Magic Number: \"%s\" is no valid image\n",
++ cmdname, imagefile);
++ exit (EXIT_FAILURE);
++ }
++
++ /* for multi-file images we need the data part, too */
++ print_trailer(hdr);
++
++ (void) munmap((void *)ptr, sbuf.st_size);
++ (void) close (ifd);
++
++ exit (EXIT_SUCCESS);
++ }
++
++ /* if we're not listing: */
++
++ copy_file (ifd, datafile, 0);
++
++ memset (hdr, 0, sizeof(struct uboot_dfu_trailer));
++
++ /* Build new header */
++ hdr->version = UBOOT_DFU_TRAILER_V1;
++ hdr->magic = UBOOT_DFU_TRAILER_MAGIC;
++ hdr->length = sizeof(struct uboot_dfu_trailer);
++ hdr->vendor = opt_vendor;
++ hdr->product = opt_product;
++ hdr->revision = opt_revision;
++
++ print_trailer(hdr);
++ dfu_trailer_mirror(&_mirror, (unsigned char *)hdr+sizeof(*hdr));
++
++ if (write(ifd, &_mirror, sizeof(struct uboot_dfu_trailer))
++ != sizeof(struct uboot_dfu_trailer)) {
++ fprintf (stderr, "%s: Write error on %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ /* We're a bit of paranoid */
++#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__)
++ (void) fdatasync (ifd);
++#else
++ (void) fsync (ifd);
++#endif
++
++ if (fstat(ifd, &sbuf) < 0) {
++ fprintf (stderr, "%s: Can't stat %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ /* We're a bit of paranoid */
++#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__)
++ (void) fdatasync (ifd);
++#else
++ (void) fsync (ifd);
++#endif
++
++ if (close(ifd)) {
++ fprintf (stderr, "%s: Write error on %s: %s\n",
++ cmdname, imagefile, strerror(errno));
++ exit (EXIT_FAILURE);
++ }
++
++ exit (EXIT_SUCCESS);
++}
+Index: u-boot/include/usb_dfu_trailer.h
+===================================================================
+--- /dev/null
++++ u-boot/include/usb_dfu_trailer.h
+@@ -0,0 +1,31 @@
++#ifndef _USB_DFU_TRAILER_H
++#define _USB_DFU_TRAILER_H
++
++/* trailer handling for DFU files */
++
++#define UBOOT_DFU_TRAILER_V1 1
++#define UBOOT_DFU_TRAILER_MAGIC 0x19731978
++struct uboot_dfu_trailer {
++ u_int32_t magic;
++ u_int16_t version;
++ u_int16_t length;
++ u_int16_t vendor;
++ u_int16_t product;
++ u_int32_t revision;
++} __attribute__((packed));
++
++/* we mirror the trailer because we want it to be longer in later versions
++ * while keeping backwards compatibility */
++static inline void dfu_trailer_mirror(struct uboot_dfu_trailer *trailer,
++ unsigned char *eof)
++{
++ int i;
++ int len = sizeof(struct uboot_dfu_trailer);
++ unsigned char *src = eof - len;
++ unsigned char *dst = (unsigned char *) trailer;
++
++ for (i = 0; i < len; i++)
++ dst[len-1-i] = src[i];
++}
++
++#endif /* _USB_DFU_TRAILER_H */
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -261,6 +261,12 @@
+ $(obj)u-boot.bin: $(obj)u-boot
+ $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
++$(obj)u-boot.udfu: $(obj)u-boot.bin
++ ./tools/mkudfu -v $(CONFIG_USB_DFU_VENDOR) \
++ -p $(CONFIG_USB_DFU_PRODUCT) \
++ -r $(CONFIG_USB_DFU_REVISION) \
++ -d $< $@
++
+ $(obj)u-boot.img: $(obj)u-boot.bin
+ ./tools/mkimage -A $(ARCH) -T firmware -C none \
+ -a $(TEXT_BASE) -e 0 \
+Index: u-boot/board/neo1973/gta01/split_by_variant.sh
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/split_by_variant.sh
++++ u-boot/board/neo1973/gta01/split_by_variant.sh
+@@ -15,37 +15,44 @@
+ echo "$0:: No parameters - using GTA01Bv3 config"
+ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC
+ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0230" > $CFGTMP
+ else
+ case "$1" in
+ gta01v4_config)
+ echo "#define CONFIG_ARCH_GTA01_v4" > $CFGINC
+ echo "GTA01_BIG_RAM=n" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0140" > $CFGTMP
+ ;;
+
+ gta01v3_config)
+ echo "#define CONFIG_ARCH_GTA01_v3" > $CFGINC
+ echo "GTA01_BIG_RAM=n" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0130" > $CFGTMP
+ ;;
+
+ gta01bv2_config)
+ echo "#define CONFIG_ARCH_GTA01B_v2" > $CFGINC
+ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0220" > $CFGTMP
+ ;;
+
+ gta01bv3_config)
+ echo "#define CONFIG_ARCH_GTA01B_v3" > $CFGINC
+ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0230" > $CFGTMP
+ ;;
+
+ gta01bv4_config)
+ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC
+ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0240" > $CFGTMP
+ ;;
+
+ *)
+ echo "$0:: Unrecognised config - using GTA01Bv4 config"
+ echo "#define CONFIG_ARCH_GTA01B_v4" > $CFGINC
+ echo "GTA01_BIG_RAM=y" > $CFGTMP
++ echo "CONFIG_USB_DFU_REVISION=0x0240" > $CFGTMP
+ ;;
+
+ esac
+Index: u-boot/board/neo1973/gta01/config.mk
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/config.mk
++++ u-boot/board/neo1973/gta01/config.mk
+@@ -24,6 +24,9 @@
+ #
+ # download area is 3200'0000 or 3300'0000
+
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x5119
++
+ sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
+
+ ifeq ($(GTA01_BIG_RAM),y)
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch
new file mode 100644
index 0000000000..ca54ebeff7
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch
@@ -0,0 +1,1560 @@
+Add support for new GTA02 version of Neo1973
+
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2038,6 +2038,10 @@
+ sbc2410x_config: unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
+
++gta02_config \
++gta02v1_config : unconfig
++ @sh board/neo1973/gta02/split_by_variant.sh $@
++
+ gta01_config \
+ gta01v3_config \
+ gta01bv2_config \
+Index: u-boot/board/neo1973/gta02/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/Makefile
+@@ -0,0 +1,64 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS := gta02.o pcf50633.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o ../common/bootmenu.o
++SOBJS := ../common/lowlevel_init.o
++
++.PHONY: all
++
++all: $(LIB) lowevel_foo.bin
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++lowlevel_foo.o: ../common/lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o ../common/lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o ../common/lowlevel_init.o ../common/lowlevel_foo.lds
++ $(LD) -T ../common/lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ ../common/lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
++
++clean:
++ rm -f $(SOBJS) $(OBJS) lowlevel_foo lowlevel_foo.o
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend lowlevel_foo.bin
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++-include .depend
++
++#########################################################################
+Index: u-boot/board/neo1973/gta02/gta02.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/gta02.c
+@@ -0,0 +1,313 @@
++/*
++ * (C) 2006-2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on existing S3C2410 startup code in u-boot:
++ *
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <s3c2440.h>
++#include <i2c.h>
++
++#include "../common/neo1973.h"
++#include "../common/jbt6k74.h"
++
++#include "pcf50633.h"
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* That many seconds the power key needs to be pressed to power up */
++#define POWER_KEY_SECONDS 2
++
++#define M_MDIV 0x7f /* Fout = 405.00MHz */
++#define M_PDIV 0x2
++#define M_SDIV 0x1
++
++#define U_M_MDIV 0x38
++#define U_M_PDIV 0x2
++#define U_M_SDIV 0x2
++
++unsigned int neo1973_wakeup_cause;
++extern int nobootdelay;
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++#if defined(CONFIG_ARCH_GTA02_v1)
++ gpio->GPACON = 0x007E1FFF;
++ gpio->GPADAT |= (1 << 16); /* Set GPA16 to high (nNAND_WP) */
++
++ gpio->GPBCON = 0x00155555;
++ gpio->GPBUP = 0x000007FF;
++
++ gpio->GPCCON = 0x55551155;
++ gpio->GPCUP = 0x0000FFFF;
++
++ gpio->GPDCON = 0x55555555;
++ gpio->GPDUP = 0x0000FFFF;
++
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++
++ gpio->GPFCON = 0x0000AAAA;
++ gpio->GPFUP = 0x000000FF;
++
++ gpio->GPGCON = 0x013DFDFA;
++ gpio->GPGUP = 0x0000FFFF;
++
++ gpio->GPHCON = 0x0028AAAA;
++ gpio->GPHUP = 0x000007FF;
++
++ gpio->GPJCON = 0x1545541;
++#else
++#error Please define GTA02 version
++#endif
++
++ /* arch number of SMDK2410-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_NEO1973_GTA02;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++int board_late_init(void)
++{
++ extern unsigned char booted_from_nand;
++ unsigned char tmp;
++ char buf[32];
++ int menu_vote = 0; /* <= 0: no, > 0: yes */
++ int seconds = 0;
++
++ /* Initialize the Power Management Unit with a safe register set */
++ pcf50633_init();
++#if 0
++ /* if there's no other reason, must be regular reset */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_RESET;
++
++ if (!booted_from_nand)
++ goto woken_by_reset;
++
++ /* obtain wake-up reason, save INT1 in environment */
++ tmp = pcf50606_reg_read(PCF50606_REG_INT1);
++ sprintf(buf, "0x%02x", tmp);
++ setenv("pcf50606_int1", buf);
++
++ if (tmp & PCF50606_INT1_ALARM) {
++ /* we've been woken up by RTC alarm, boot */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_ALARM;
++ goto continue_boot;
++ }
++ if (tmp & PCF50606_INT1_EXTONR) {
++ /* we've been woken up by charger insert */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_CHARGER;
++ }
++
++ if (tmp & PCF50606_INT1_ONKEYF) {
++ /* we've been woken up by a falling edge of the onkey */
++ neo1973_wakeup_cause = NEO1973_WAKEUP_POWER_KEY;
++ }
++
++ if (neo1973_wakeup_cause == NEO1973_WAKEUP_CHARGER) {
++ /* if we still think it was only a charger insert, boot */
++ goto continue_boot;
++ }
++
++woken_by_reset:
++
++ while (neo1973_wakeup_cause == NEO1973_WAKEUP_RESET ||
++ neo1973_on_key_pressed()) {
++ if (neo1973_aux_key_pressed())
++ menu_vote++;
++ else
++ menu_vote--;
++
++ if (neo1973_new_second())
++ seconds++;
++ if (seconds >= POWER_KEY_SECONDS)
++ goto continue_boot;
++ }
++ /* Power off if minimum number of seconds not reached */
++ neo1973_poweroff();
++
++continue_boot:
++ jbt6k74_init();
++ jbt6k74_enter_state(JBT_STATE_NORMAL);
++ jbt6k74_display_onoff(1);
++#endif
++
++ /* issue a short pulse with the vibrator */
++ neo1973_vibrator(1);
++ udelay(50000);
++ neo1973_vibrator(0);
++
++ /* switch on the backlight */
++ neo1973_backlight(1);
++
++#if 0
++ {
++ /* check if sd card is inserted, and power-up if it is */
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (!(gpio->GPFDAT & (1 << 5)))
++ gpio->GPBDAT &= ~(1 << 2);
++ }
++
++ if (menu_vote > 0) {
++ bootmenu();
++ nobootdelay = 1;
++ }
++#endif
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
++
++u_int32_t get_board_rev(void)
++{
++#if defined(CONFIG_ARCH_GTA02_v1)
++ return 0x00000310;
++#endif
++}
++
++void neo1973_poweroff(void)
++{
++ printf("poweroff\n");
++ udc_disconnect();
++ pcf50633_reg_write(PCF50633_REG_OOCSHDWN, 0x01);
++ /* don't return to caller */
++ while (1) ;
++}
++
++void neo1973_backlight(int on)
++{
++ /* FIXME: PMU based implementation */
++}
++
++/* FIXME: shared */
++void neo1973_vibrator(int on)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (on)
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ gpio->GPGDAT |= (1 << 11); /* GPG11 */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ gpio->GPBDAT |= (1 << 10); /* GPB10 */
++#elif defined(CONFIG_ARCH_GTA01B_v4) || defined(CONFIG_ARCH_GTA02_v1)
++ gpio->GPBDAT |= (1 << 3); /* GPB3 */
++#endif
++ else
++#if defined(CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
++ gpio->GPGDAT &= ~(1 << 11); /* GPG11 */
++#elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3)
++ gpio->GPBDAT &= ~(1 << 10); /* GPB10 */
++#elif defined(CONFIG_ARCH_GTA01B_v4) || defined(CONFIG_ARCH_GTA02_v1)
++ gpio->GPBDAT &= ~(1 << 3); /* GPB3 */
++#endif
++}
++
++int neo1973_new_second(void)
++{
++ return pcf50633_reg_read(PCF50633_REG_INT1) & PCF50633_INT1_SECOND;
++}
++
++int neo1973_on_key_pressed(void)
++{
++ return !(pcf50633_reg_read(PCF50633_REG_OOCSTAT)
++ & PCF50633_OOCSTAT_ONKEY);
++}
++
++/* FIXME: shared */
++int neo1973_aux_key_pressed(void)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ if (gpio->GPFDAT & (1 << 6))
++ return 0;
++ return 1;
++}
++
++/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000.
++ "initrd" is sized such that it can hold two uncompressed 16 bit 640*480
++ images: 640*480*2*2 = 1228800 < 1245184. */
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, CFG_ENV_SIZE, 0x200000, 0xa0000, 0x1fce0000, 0 };
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
++
++const char *neo1973_get_charge_status(void)
++{
++ /* FIXME */
++ return "unknown";
++}
++
++int neo1973_set_charge_mode(enum neo1973_charger_cmd cmd)
++{
++ /* FIXME */
++ return 0;
++}
+Index: u-boot/board/neo1973/gta02/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/include/configs/neo1973_gta02.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/neo1973_gta02.h
+@@ -0,0 +1,276 @@
++/*
++ * (C) Copyright 2007 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * Configuation settings for the FIC Neo1973 GTA02 Linux GSM phone
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* we want to be able to start u-boot directly from within NAND flash */
++#define CONFIG_LL_INIT_NAND_ONLY
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++
++#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2410 SoC */
++#define CONFIG_SMDK2440 1 /* on a SAMSUNG SMDK2410 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 12000000/* the GTA02 has this input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 400*1024)
++ /* >> CFG_VIDEO_LOGO_MAX_SIZE */
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL3 1 /* we use SERIAL 1 on GTA01 */
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS (\
++ CFG_CMD_BDI | \
++ CFG_CMD_LOADS | \
++ CFG_CMD_LAODB | \
++ CFG_CMD_IMI | \
++ CFG_CMD_CACHE | \
++ CFG_CMD_MEMORY | \
++ CFG_CMD_ENV | \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_CONSOLE | \
++ /* CFG_CMD_BMP | */ \
++ CFG_CMD_ASKENV | \
++ CFG_CMD_RUN | \
++ CFG_CMD_ECHO | \
++ CFG_CMD_I2C | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_IMMAP | \
++ CFG_CMD_DATE | \
++ CFG_CMD_AUTOSCRIPT | \
++ CFG_CMD_BSP | \
++ CFG_CMD_ELF | \
++ CFG_CMD_MISC | \
++ /* CFG_CMD_USB | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_DIAG | \
++ /* CFG_CMD_HWFLOW | */ \
++ CFG_CMD_SAVES | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_MMC | \
++ CFG_CMD_FAT | \
++ CFG_CMD_EXT2 | \
++ 0)
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS ""
++#define CONFIG_BOOTCOMMAND "setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#if defined(CONFIG_ARCH_GTA02_v1)
++#define CFG_PROMPT "GTA02v1 # " /* Monitor Command Prompt */
++#endif
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 64 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x33000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++#define CFG_BOOTMENU
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (8*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++#if 0
++#define CONFIG_USB_OHCI 1
++#endif
++
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x5119 /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc"
++#define CONFIG_USBD_PRODUCT_NAME "Neo1973 Bootloader " U_BOOT_VERSION
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 4096 /* 0x4000 */
++#define CONFIG_USBD_DFU_INTERFACE 2
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "usbtty=cdc_acm\0" \
++ "bootargs_base=rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8\0" \
++ ""
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */
++#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++/* No NOR flash in this device */
++#define CFG_NO_FLASH 1
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x40000 /* 128k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */
++#define CFG_PREBOOT_OVERRIDE 1 /* allow preboot from memory */
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++/* EXT2 driver */
++#define CONFIG_EXT2 1
++
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 1
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_REVISION_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#endif
++
++#define CONFIG_DRIVER_S3C24X0_I2C 1
++#define CONFIG_HARD_I2C 1
++#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50633 data sheet */
++#define CFG_I2C_SLAVE 0x7f
++
++/* we have a board_late_init() function */
++#define BOARD_LATE_INIT 1
++
++#if 0
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_SPLASH_SCREEN
++#define CFG_VIDEO_LOGO_MAX_SIZE (640*480+1024+100) /* 100 = slack */
++#define CONFIG_VIDEO_BMP_GZIP
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++#define CONFIG_UNZIP
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#define CONFIG_S3C2410_NAND_BBT 1
++//#define CONFIG_S3C2410_NAND_HWECC 1
++
++#define CONFIG_DRIVER_PCF50633 1
++
++#define MTDIDS_DEFAULT "nand0=neo1973-nand"
++#define MTPARTS_DEFAULT "neo1973-nand:256k(u-boot),128k(u-boot_env),2M(kernel),640k(splash),-(jffs2)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "neo1973-nand"
++#define CONFIG_NAND_DYNPART
++
++#endif /* __CONFIG_H */
+Index: u-boot/board/neo1973/gta02/split_by_variant.sh
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/split_by_variant.sh
+@@ -0,0 +1,37 @@
++#!/bin/sh
++# ---------------------------------------------------------
++# Set the core module defines according to Core Module
++# ---------------------------------------------------------
++# ---------------------------------------------------------
++# Set up the GTA01 type define
++# ---------------------------------------------------------
++
++CFGINC=${obj}include/config.h
++CFGTMP=${obj}board/neo1973/gta02/config.tmp
++
++mkdir -p ${obj}include
++if [ "$1" == "" ]
++then
++ echo "$0:: No parameters - using GTA02Bv1 config"
++ echo "#define CONFIG_ARCH_GTA02_v1" > $CFGINC
++ echo "CONFIG_USB_DFU_REVISION=0x0310" > $CFGTMP
++else
++ case "$1" in
++ gta02v1_config)
++ echo "#define CONFIG_ARCH_GTA02_v1" > $CFGINC
++ echo "CONFIG_USB_DFU_REVISION=0x0310" > $CFGTMP
++ ;;
++
++ *)
++ echo "$0:: Unrecognised config - using GTA02v1 config"
++ echo "#define CONFIG_ARCH_GTA02_v1" > $CFGINC
++ echo "CONFIG_USB_DFU_REVISION=0x0310" > $CFGTMP
++ ;;
++
++ esac
++
++fi
++# ---------------------------------------------------------
++# Complete the configuration
++# ---------------------------------------------------------
++$MKCONFIG -a neo1973_gta02 arm arm920t gta02 neo1973 s3c24x0
+Index: u-boot/include/pcf50633.h
+===================================================================
+--- /dev/null
++++ u-boot/include/pcf50633.h
+@@ -0,0 +1,235 @@
++#ifndef _PCF50633_H
++#define _PCF50633_H
++
++/* Philips PCF50633 Power Managemnt Unit (PMU) driver
++ * (C) 2006-2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ */
++
++enum pfc50633_regs {
++ PCF50633_REG_VERSION = 0x00,
++ PCF50633_REG_VARIANT = 0x01,
++ PCF50633_REG_INT1 = 0x02, /* Interrupt Status */
++ PCF50633_REG_INT2 = 0x03, /* Interrupt Status */
++ PCF50633_REG_INT3 = 0x04, /* Interrupt Status */
++ PCF50633_REG_INT4 = 0x05, /* Interrupt Status */
++ PCF50633_REG_INT5 = 0x06, /* Interrupt Status */
++ PCF50633_REG_INT1M = 0x07, /* Interrupt Mask */
++ PCF50633_REG_INT2M = 0x08, /* Interrupt Mask */
++ PCF50633_REG_INT3M = 0x09, /* Interrupt Mask */
++ PCF50633_REG_INT4M = 0x0a, /* Interrupt Mask */
++ PCF50633_REG_INT5M = 0x0b, /* Interrupt Mask */
++ PCF50633_REG_OOCSHDWN = 0x0c,
++ PCF50633_REG_OOCWAKE = 0x0d,
++ PCF50633_REG_OOCTIM1 = 0x0e,
++ PCF50633_REG_OOCTIM2 = 0x0f,
++ PCF50633_REG_OOCMODE = 0x10,
++ PCF50633_REG_OOCCTL = 0x11,
++ PCF50633_REG_OOCSTAT = 0x12,
++ PCF50633_REG_GPIOCTL = 0x13,
++ PCF50633_REG_GPIO1CFG = 0x14,
++ PCF50633_REG_GPIO2CFG = 0x15,
++ PCF50633_REG_GPIO3CFG = 0x16,
++ PCF50633_REG_GPOCFG = 0x17,
++ PCF50633_REG_BVMCTL = 0x18,
++ PCF50633_REG_SVMCTL = 0x19,
++ PCF50633_REG_AUTOOUT = 0x1a,
++ PCF50633_REG_AUTOENA = 0x1b,
++ PCF50633_REG_AUTOCTL = 0x1c,
++ PCF50633_REG_AUTOMXC = 0x1d,
++ PCF50633_REG_DOWN1OUT = 0x1e,
++ PCF50633_REG_DOWN1ENA = 0x1f,
++ PCF50633_REG_DOWN1CTL = 0x20,
++ PCF50633_REG_DOWN1MXC = 0x21,
++ PCF50633_REG_DOWN2OUT = 0x22,
++ PCF50633_REG_DOWN2ENA = 0x23,
++ PCF50633_REG_DOWN2CTL = 0x24,
++ PCF50633_REG_DOWN2MXC = 0x25,
++ PCF50633_REG_MEMLDOOUT = 0x26,
++ PCF50633_REG_MEMLDOENA = 0x27,
++ PCF50633_REG_LEDOUT = 0x28,
++ PCF50633_REG_LEDENA = 0x29,
++ PCF50633_REG_LEDCTL = 0x2a,
++ PCF50633_REG_LEDDIM = 0x2b,
++ /* reserved */
++ PCF50633_REG_LDO1OUT = 0x2d,
++ PCF50633_REG_LDO1ENA = 0x2e,
++ PCF50633_REG_LDO2OUT = 0x2f,
++ PCF50633_REG_LDO2ENA = 0x30,
++ PCF50633_REG_LDO3OUT = 0x31,
++ PCF50633_REG_LDO3ENA = 0x32,
++ PCF50633_REG_LDO4OUT = 0x33,
++ PCF50633_REG_LDO4ENA = 0x34,
++ PCF50633_REG_LDO5OUT = 0x35,
++ PCF50633_REG_LDO5ENA = 0x36,
++ PCF50633_REG_LDO6OUT = 0x37,
++ PCF50633_REG_LDO6ENA = 0x38,
++ PCF50633_REG_HCLDOOUT = 0x39,
++ PCF50633_REG_HCLDOENA = 0x3a,
++ PCF50633_REG_STBYCTL1 = 0x3b,
++ PCF50633_REG_STBYCTL2 = 0x3c,
++ PCF50633_REG_DEBPF1 = 0x3d,
++ PCF50633_REG_DEBPF2 = 0x3e,
++ PCF50633_REG_DEBPF3 = 0x3f,
++ PCF50633_REG_HCLDOOVL = 0x40,
++ PCF50633_REG_DCDCSTAT = 0x41,
++ PCF50633_REG_LDOSTAT = 0x42,
++ PCF50633_REG_MBCC1 = 0x43,
++ PCF50633_REG_MBCC2 = 0x44,
++ PCF50633_REG_MBCC3 = 0x45,
++ PCF50633_REG_MBCC4 = 0x46,
++ PCF50633_REG_MBCC5 = 0x47,
++ PCF50633_REG_MBCC6 = 0x48,
++ PCF50633_REG_MBCC7 = 0x49,
++ PCF50633_REG_MBCC8 = 0x4a,
++ PCF50633_REG_MBCS1 = 0x4b,
++ PCF50633_REG_MBCS2 = 0x4c,
++ PCF50633_REG_MBCS3 = 0x4d,
++ PCF50633_REG_BBCCTL = 0x4e,
++ PCF50633_REG_ALMGAIN = 0x4f,
++ PCF50633_REG_ALMDATA = 0x50,
++ /* reserved */
++ PCF50633_REG_ADCC3 = 0x52,
++ PCF50633_REG_ADCC2 = 0x53,
++ PCF50633_REG_ADCC1 = 0x54,
++ PCF50633_REG_ADCS1 = 0x55,
++ PCF50633_REG_ADCS2 = 0x56,
++ PCF50633_REG_ADCS3 = 0x57,
++ /* reserved */
++ PCF50633_REG_RTCSC = 0x59, /* Second */
++ PCF50633_REG_RTCMN = 0x5a, /* Minute */
++ PCF50633_REG_RTCHR = 0x5b, /* Hour */
++ PCF50633_REG_RTCWD = 0x5c, /* Weekday */
++ PCF50633_REG_RTCDT = 0x5d, /* Day */
++ PCF50633_REG_RTCMT = 0x5e, /* Month */
++ PCF50633_REG_RTCYR = 0x5f, /* Year */
++ PCF50633_REG_RTCSCA = 0x60, /* Alarm Second */
++ PCF50633_REG_RTCMNA = 0x61, /* Alarm Minute */
++ PCF50633_REG_RTCHRA = 0x62, /* Alarm Hour */
++ PCF50633_REG_RTCWDA = 0x63, /* Alarm Weekday */
++ PCF50633_REG_RTCDTA = 0x64, /* Alarm Day */
++ PCF50633_REG_RTCMTA = 0x65, /* Alarm Month */
++ PCF50633_REG_RTCYRA = 0x66, /* Alarm Year */
++
++ PCF50633_REG_MEMBYTE0 = 0x67,
++ PCF50633_REG_MEMBYTE1 = 0x68,
++ PCF50633_REG_MEMBYTE2 = 0x69,
++ PCF50633_REG_MEMBYTE3 = 0x6a,
++ PCF50633_REG_MEMBYTE4 = 0x6b,
++ PCF50633_REG_MEMBYTE5 = 0x6c,
++ PCF50633_REG_MEMBYTE6 = 0x6d,
++ PCF50633_REG_MEMBYTE7 = 0x6e,
++ /* reserved */
++ PCF50633_REG_DCDCPFM = 0x84,
++ __NUM_PCF50633_REGS
++};
++
++enum pcf50633_reg_int1 {
++ PCF50633_INT1_ADPINS = 0x01, /* Adapter inserted */
++ PCF50633_INT1_ADPREM = 0x02, /* Adapter removed */
++ PCF50633_INT1_USBINS = 0x04, /* USB inserted */
++ PCF50633_INT1_USBREM = 0x08, /* USB removed */
++ /* reserved */
++ PCF50633_INT1_ALARM = 0x40, /* RTC alarm time is reached */
++ PCF50633_INT1_SECOND = 0x80, /* RTC periodic second interrupt */
++};
++
++enum pcf50633_reg_int2 {
++ PCF50633_INT2_ONKEYR = 0x01, /* ONKEY rising edge */
++ PCF50633_INT2_ONKEYF = 0x02, /* ONKEY falling edge */
++ PCF50633_INT2_EXTON1R = 0x04, /* EXTON1 rising edge */
++ PCF50633_INT2_EXTON1F = 0x08, /* EXTON1 falling edge */
++ PCF50633_INT2_EXTON2R = 0x10, /* EXTON2 rising edge */
++ PCF50633_INT2_EXTON2F = 0x20, /* EXTON2 falling edge */
++ PCF50633_INT2_EXTON3R = 0x40, /* EXTON3 rising edge */
++ PCF50633_INT2_EXTON3F = 0x80, /* EXTON3 falling edge */
++};
++
++enum pcf50633_reg_int3 {
++ PCF50633_INT3_BATFULL = 0x01, /* Battery full */
++ PCF50633_INT3_CHGHALT = 0x02, /* Charger halt */
++ PCF50633_INT3_THLIMON = 0x04,
++ PCF50633_INT3_THLIMOFF = 0x08,
++ PCF50633_INT3_USBLIMON = 0x10,
++ PCF50633_INT3_USBLIMOFF = 0x20,
++ PCF50633_INT3_ADCRDY = 0x40, /* ADC conversion finished */
++ PCF50633_INT3_ONKEY1S = 0x80, /* ONKEY pressed 1 second */
++};
++
++enum pcf50633_reg_int4 {
++ PCF50633_INT4_LOWSYS = 0x01,
++ PCF50633_INT4_LOWBAT = 0x02,
++ PCF50633_INT4_HIGHTMP = 0x04,
++ PCF50633_INT4_AUTOPWRFAIL = 0x08,
++ PCF50633_INT4_DWN1PWRFAIL = 0x10,
++ PCF50633_INT4_DWN2PWRFAIL = 0x20,
++ PCF50633_INT4_LEDPWRFAIL = 0x40,
++ PCF50633_INT4_LEDOVP = 0x80,
++};
++
++enum pcf50633_reg_int5 {
++ PCF50633_INT4_LDO1PWRFAIL = 0x01,
++ PCF50633_INT4_LDO2PWRFAIL = 0x02,
++ PCF50633_INT4_LDO3PWRFAIL = 0x04,
++ PCF50633_INT4_LDO4PWRFAIL = 0x08,
++ PCF50633_INT4_LDO5PWRFAIL = 0x10,
++ PCF50633_INT4_LDO6PWRFAIL = 0x20,
++ PCF50633_INT4_HCLDOPWRFAIL = 0x40,
++ PCF50633_INT4_HCLDOOVL = 0x80,
++};
++
++enum pcf50633_reg_oocwake {
++ PCF50633_OOCWAKE_ONKEY = 0x01,
++ PCF50633_OOCWAKE_EXTON1 = 0x02,
++ PCF50633_OOCWAKE_EXTON2 = 0x04,
++ PCF50633_OOCWAKE_EXTON3 = 0x08,
++ PCF50633_OOCWAKE_RTC = 0x10,
++ /* reserved */
++ PCF50633_OOCWAKE_USB = 0x40,
++ PCF50633_OOCWAKE_ADP = 0x80,
++};
++
++enum pcf50633_reg_mbcc1 {
++ PCF50633_MBCC1_CHGENA = 0x01, /* Charger enable */
++ PCF50633_MBCC1_AUTOSTOP = 0x02,
++ PCF50633_MBCC1_AUTORES = 0x04, /* automatic resume */
++ PCF50633_MBCC1_RESUME = 0x08, /* explicit resume cmd */
++ PCF50633_MBCC1_RESTART = 0x10, /* restart charging */
++ PCF50633_MBCC1_PREWDTIME_60M = 0x20, /* max. precharging time */
++ PCF50633_MBCC1_WDTIME_1H = 0x00,
++ PCF50633_MBCC1_WDTIME_2H = 0x40,
++ PCF50633_MBCC1_WDTIME_4H = 0x80,
++ PCF50633_MBCC1_WDTIME_6H = 0xc0,
++};
++#define PCF50633_MBCC1_WDTIME_MASK 0xc0
++
++enum pcf50633_reg_mbcc2 {
++ PCF50633_MBCC2_VBATCOND_2V7 = 0x00,
++ PCF50633_MBCC2_VBATCOND_2V85 = 0x01,
++ PCF50633_MBCC2_VBATCOND_3V = 0x02,
++ PCF50633_MBCC2_VBATCOND_3V15 = 0x03,
++ PCF50633_MBCC2_VMAX_4V = 0x00,
++ PCF50633_MBCC2_VMAX_4V20 = 0x28,
++ PCF50633_MBCC2_VRESDEBTIME_64S = 0x80, /* debounce time (32/64sec) */
++};
++#define PCF50633_MBCC2_VBATCOND_MASK 0x03
++#define PCF50633_MBCC2_VMAX_MASK 0x3c
++
++#define PCF50633_OOCSTAT_ONKEY 0x01
++
++/* this is to be provided by the board implementation */
++extern const u_int8_t pcf50633_initial_regs[__NUM_PCF50633_REGS];
++
++void pcf50633_reg_write(u_int8_t reg, u_int8_t val);
++
++u_int8_t pcf50633_reg_read(u_int8_t reg);
++
++void pcf50633_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val);
++void pcf50633_reg_clear_bits(u_int8_t reg, u_int8_t bits);
++
++void pcf50633_init(void);
++void pcf50633_usb_maxcurrent(unsigned int ma);
++
++#endif /* _PCF50633_H */
++
+Index: u-boot/drivers/pcf50633.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/pcf50633.c
+@@ -0,0 +1,142 @@
++#include <common.h>
++
++#ifdef CONFIG_DRIVER_PCF50633
++
++#include <i2c.h>
++#include <pcf50633.h>
++#include <asm/atomic.h>
++#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
++
++#define PCF50633_I2C_ADDR 0x73
++
++void __pcf50633_reg_write(u_int8_t reg, u_int8_t val)
++{
++ i2c_write(PCF50633_I2C_ADDR, reg, 1, &val, 1);
++}
++
++u_int8_t __pcf50633_reg_read(u_int8_t reg)
++{
++ u_int8_t tmp;
++ i2c_read(PCF50633_I2C_ADDR, reg, 1, &tmp, 1);
++ return tmp;
++}
++
++void pcf50633_reg_write(u_int8_t reg, u_int8_t val)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ __pcf50633_reg_write(reg, val);
++ local_irq_restore(flags);
++}
++
++u_int8_t pcf50633_reg_read(u_int8_t reg)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = __pcf50633_reg_read(reg);
++ local_irq_restore(flags);
++
++ return tmp;
++}
++
++void pcf50633_reg_set_bit_mask(u_int8_t reg, u_int8_t mask, u_int8_t val)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = __pcf50633_reg_read(reg);
++ __pcf50633_reg_write(reg, (val & mask) | (tmp & ~mask));
++ local_irq_restore(flags);
++}
++
++void pcf50633_reg_clear_bits(u_int8_t reg, u_int8_t bits)
++{
++ unsigned long flags;
++ u_int8_t tmp;
++
++ local_irq_save(flags);
++ tmp = pcf50633_reg_read(reg);
++ pcf50633_reg_write(reg, (tmp & ~bits));
++ local_irq_restore(flags);
++}
++
++static const u_int8_t regs_invalid[] = {
++ PCF50633_REG_VERSION,
++ PCF50633_REG_VARIANT,
++ PCF50633_REG_OOCSHDWN,
++ PCF50633_REG_INT1,
++ PCF50633_REG_INT2,
++ PCF50633_REG_INT3,
++ PCF50633_REG_INT4,
++ PCF50633_REG_INT5,
++ PCF50633_REG_OOCSTAT,
++ 0x2c,
++ PCF50633_REG_DCDCSTAT,
++ PCF50633_REG_LDOSTAT,
++ PCF50633_REG_MBCS1,
++ PCF50633_REG_MBCS2,
++ PCF50633_REG_MBCS3,
++ PCF50633_REG_ALMDATA,
++ 0x51,
++ /* 0x55 ... 0x6e: don't write */
++ /* 0x6f ... 0x83: reserved */
++};
++#define PCF50633_LAST_REG 0x55
++
++static int reg_is_invalid(u_int8_t reg)
++{
++ int i;
++
++ /* all registers above 0x55 (ADCS1) except 0x84 */
++ if (reg == PCF50633_REG_DCDCPFM)
++ return 0;
++ if (reg >= 0x55)
++ return 1;
++
++ for (i = 0; i < ARRAY_SIZE(regs_invalid); i++) {
++ if (regs_invalid[i] > reg)
++ return 0;
++ if (regs_invalid[i] == reg)
++ return 1;
++ }
++
++ return 0;
++}
++
++
++/* initialize PCF50633 register set */
++void pcf50633_init(void)
++{
++ unsigned long flags;
++ u_int8_t i;
++
++ local_irq_save(flags);
++ for (i = 0; i < PCF50633_LAST_REG; i++) {
++ if (reg_is_invalid(i))
++ continue;
++ __pcf50633_reg_write(i, pcf50633_initial_regs[i]);
++ }
++ local_irq_restore(flags);
++}
++
++void pcf50633_usb_maxcurrent(unsigned int ma)
++{
++ u_int8_t val;
++
++ if (ma < 100)
++ val = 0x03;
++ else if (ma < 500)
++ val = 0x00;
++ else if (ma < 1000)
++ val = 0x01;
++ else
++ val = 0x02;
++
++ return pcf50633_reg_set_bit_mask(PCF50633_REG_MBCC7, 0x03, val);
++}
++
++#endif /* CONFIG DRIVER_PCF50633 */
+Index: u-boot/board/neo1973/common/lowlevel_init.S
+===================================================================
+--- u-boot.orig/board/neo1973/common/lowlevel_init.S
++++ u-boot/board/neo1973/common/lowlevel_init.S
+@@ -49,7 +49,7 @@
+ #define WAIT (0x1<<2)
+ #define UBLB (0x1<<3)
+
+-#define B1_BWSCON (DW32)
++#define B1_BWSCON (DW16 + WAIT + UBLB)
+ #define B2_BWSCON (DW16)
+ #define B3_BWSCON (DW16 + WAIT + UBLB)
+ #define B4_BWSCON (DW16)
+@@ -68,9 +68,9 @@
+
+ /* BANK1CON */
+ #define B1_Tacs 0x0 /* 0clk */
+-#define B1_Tcos 0x0 /* 0clk */
+-#define B1_Tacc 0x7 /* 14clk */
+-#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tcos 0x1 /* 1clk */
++#define B1_Tacc 0x4 /* 4clk */
++#define B1_Tcoh 0x1 /* 1clk */
+ #define B1_Tah 0x0 /* 0clk */
+ #define B1_Tacp 0x0
+ #define B1_PMC 0x0
+@@ -112,7 +112,7 @@
+ #if defined (CONFIG_ARCH_GTA01_v3) || defined(CONFIG_ARCH_GTA01_v4)
+ #define B6_SCAN 0x1 /* 9bit */
+ #elif defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
+- defined(CONFIG_ARCH_GTA01B_v4)
++ defined(CONFIG_ARCH_GTA01B_v4) || defined(CONFIG_ARCH_GTA02_v1)
+ #define B6_SCAN 0x2 /* 10bit */
+ #endif
+
+@@ -165,6 +165,18 @@
+ str r1, [r0]
+ #endif
+
++#if defined(CONFIG_ARCH_GTA02_v1)
++ /* enable KEEPACT to make sure PMU keeps us alive */
++ ldr r0, =0x56000000 /* GPJ base */
++ ldr r1, [r0, #0xd0] /* GPJCON */
++ orr r1, r1, #(1 << 6)
++ str r1, [r0, #0xd0]
++
++ ldr r1, [r0, #0xd4] /* GPJDAT */
++ orr r1, r1, #(1 << 3)
++ str r1, [r0, #0xd4]
++#endif
++
+ /* everything is fine now */
+ mov pc, lr
+
+Index: u-boot/board/neo1973/gta02/pcf50633.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/pcf50633.c
+@@ -0,0 +1,91 @@
++
++#include <common.h>
++#include <pcf50633.h>
++
++/* initial register set for PCF50633 in Neo1973 GTA02 devices */
++const u_int8_t pcf50633_initial_regs[__NUM_PCF50633_REGS] = {
++ /* gap */
++ [PCF50633_REG_INT1M] = PCF50633_INT1_SECOND,
++ [PCF50633_REG_INT2M] = PCF50633_INT2_EXTON3F |
++ PCF50633_INT2_EXTON3R |
++ PCF50633_INT2_EXTON2F |
++ PCF50633_INT2_EXTON2R |
++ PCF50633_INT2_EXTON1R |
++ PCF50633_INT2_EXTON1F,
++ [PCF50633_REG_INT3M] = PCF50633_INT3_ADCRDY,
++ [PCF50633_REG_INT4M] = 0x00,
++ [PCF50633_REG_INT5M] = 0x00,
++
++ [PCF50633_REG_OOCWAKE] = 0xd3, /* wake from ONKEY,EXTON!,RTC,USB,ADP */
++ [PCF50633_REG_OOCTIM1] = 0xaa, /* debounce 14ms everything */
++ [PCF50633_REG_OOCTIM2] = 0x4a,
++ [PCF50633_REG_OOCMODE] = 0x55,
++ [PCF50633_REG_OOCCTL] = 0x44,
++
++ [PCF50633_REG_GPIOCTL] = 0x01, /* only GPIO1 is input */
++ [PCF50633_REG_GPIO2CFG] = 0x00,
++ [PCF50633_REG_GPIO3CFG] = 0x00,
++ [PCF50633_REG_GPOCFG] = 0x00,
++
++ [PCF50633_REG_SVMCTL] = 0x08, /* 3.10V SYS voltage thresh. */
++ [PCF50633_REG_BVMCTL] = 0x02, /* 2.80V BAT voltage thresh. */
++
++ [PCF50633_REG_STBYCTL1] = 0x00,
++ [PCF50633_REG_STBYCTL2] = 0x00,
++
++ [PCF50633_REG_DEBPF1] = 0xff,
++ [PCF50633_REG_DEBPF2] = 0xff,
++ [PCF50633_REG_DEBPF2] = 0x3f,
++
++ [PCF50633_REG_AUTOOUT] = 0x6b, /* 3.300V */
++ [PCF50633_REG_AUTOENA] = 0x01, /* always on */
++ [PCF50633_REG_AUTOCTL] = 0x00, /* automatic up/down operation */
++ [PCF50633_REG_AUTOMXC] = 0x0a, /* 400mA at startup FIXME */
++
++ [PCF50633_REG_DOWN1OUT] = 0x1b, /* 1.3V (0x1b * .025V + 0.625V) */
++ [PCF50633_REG_DOWN1ENA] = 0x02, /* enabled if GPIO1 = HIGH */
++ [PCF50633_REG_DOWN1CTL] = 0x00, /* no DVM */
++ [PCF50633_REG_DOWN1MXC] = 0x22, /* limit to 510mA at startup */
++
++ [PCF50633_REG_DOWN2OUT] = 0x2f, /* 1.8V (0x2f * .025V + 0.625V) */
++ [PCF50633_REG_DOWN2ENA] = 0x02, /* enabled if GPIO1 = HIGH */
++ [PCF50633_REG_DOWN2CTL] = 0x00, /* no DVM */
++ [PCF50633_REG_DOWN2MXC] = 0x22, /* limit to 510mA at startup */
++
++ [PCF50633_REG_MEMLDOOUT] = 0x00,
++ [PCF50633_REG_MEMLDOENA] = 0x00,
++
++ [PCF50633_REG_LEDOUT] = 0x2f, /* full backlight power */
++ [PCF50633_REG_LEDENA] = 0x02, /* enabled if GPIO1 = HIGH */
++ [PCF50633_REG_LEDCTL] = 0x05, /* ovp enabled, ocp 500mA */
++ [PCF50633_REG_LEDDIM] = 0x20, /* dimming curve */
++
++ [PCF50633_REG_LDO1OUT] = 0x04, /* 1.3V (4 * 0.1V + 0.9V) */
++ [PCF50633_REG_LDO1ENA] = 0x01, /* always on */
++
++ [PCF50633_REG_LDO2OUT] = 0x18, /* 3.3V (24 * 0.1V + 0.9V) */
++ [PCF50633_REG_LDO2ENA] = 0x02, /* enabled if GPIO1 = HIGH */
++
++ [PCF50633_REG_LDO3OUT] = 0x15, /* 3.0V (21 * 0.1V + 0.9V) */
++ [PCF50633_REG_LDO3ENA] = 0x02, /* enabled if GPIO1 = HIGH */
++
++ [PCF50633_REG_LDO4ENA] = 0x00,
++ [PCF50633_REG_LDO5ENA] = 0x00,
++ [PCF50633_REG_LDO6ENA] = 0x00,
++
++ [PCF50633_REG_HCLDOOUT] = 0x18, /* 3.3V (24 * 0.1V + 0.9V) */
++ [PCF50633_REG_HCLDOENA] = 0x00, /* off by default*/
++
++ [PCF50633_REG_DCDCPFM] = 0x00, /* off by default*/
++
++ [PCF50633_REG_MBCC1] = 0xe6,
++ [PCF50633_REG_MBCC2] = 0x28, /* Vbatconid=2.7V, Vmax=4.20V */
++ [PCF50633_REG_MBCC3] = 0x19, /* 25/255 == 98mA pre-charge */
++ [PCF50633_REG_MBCC4] = 0xff, /* 255/255 == 1A adapter fast */
++ [PCF50633_REG_MBCC5] = 0x7f, /* 127/255 == 500mA usb fast */
++ [PCF50633_REG_MBCC6] = 0x00, /* cutoff current 1/32 * Ichg */
++ [PCF50633_REG_MBCC7] = 0x00, /* 1.6A max bat curr, USB 100mA */
++ [PCF50633_REG_MBCC8] = 0x00,
++
++ [PCF50633_REG_BBCCTL] = 0x19, /* 3V, 200uA, on */
++};
+Index: u-boot/board/neo1973/gta02/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/gta02/config.mk
+@@ -0,0 +1,32 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# FIC Neo1973 GTA01 board with S3C2410X (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++# GTA01v3 has 1 bank of 64 MB SDRAM
++# GTA01v4 has 1 bank of 64 MB SDRAM
++#
++# 3000'0000 to 3400'0000
++# we load ourself to 33F8'0000
++#
++# GTA01Bv2 or later has 1 bank of 128 MB SDRAM
++#
++# 3000'0000 to 3800'0000
++# we load ourself to 37F8'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# download area is 3200'0000 or 3300'0000
++
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x5119
++
++sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
++
++TEXT_BASE = 0x33F80000
+Index: u-boot/drivers/smedia3362.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/smedia3362.c
+@@ -0,0 +1,125 @@
++/*
++ * (C) Copyright 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if defined(CONFIG_VIDEO_GLAMO3362)
++
++#include <video_fb.h>
++#include "videomodes.h"
++#include <s3c2410.h>
++#include "smedia3362.h"
++
++/*
++ * Export Graphic Device
++ */
++GraphicDevice smi;
++
++
++struct glamo_script {
++ u_int16_t reg;
++ u_int16_t val;
++} __attribute__((packed));
++
++/* from 'initial glamo 3365 script' */
++static struct glamo_script gl3362_init_script[] = {
++ /* clock */
++ { GLAMO_REG_CLOCK_MEMORY, 0x300a },
++ { GLAMO_REG_CLOCK_LCD, 0x10aa },
++ { GLAMO_REG_CLOCK_MMC, 0x100a },
++ { GLAMO_REG_CLOCK_ISP, 0x32aa },
++ { GLAMO_REG_CLOCK_JPEG, 0x100a },
++ { GLAMO_REG_CLOCK_3D, 0x302a },
++ { GLAMO_REG_CLOCK_2D, 0x302a },
++ //{ GLAMO_REG_CLOCK_RISC1, 0x1aaa },
++ //{ GLAMO_REG_CLOCK_RISC2, 0x002a },
++ { GLAMO_REG_CLOCK_MPEG, 0x3aaa },
++ { GLAMO_REG_CLOCK_MPROC, 0x12aa },
++ { 0xfffe, 5 },
++ { GLAMO_REG_CLOCK_HOST, 0x000d },
++ { GLAMO_REG_CLOCK_MEMORY, 0x000a }I,
++ { GLAMO_REG_CLOCK_LCD, 0x00ee },
++ { GLAMO_REG_CLOCK_MMC, 0x000a },
++ { GLAMO_REG_CLOCK_ISP, 0x02aa },
++ { GLAMO_REG_CLOCK_JPEG, 0x000a },
++ { GLAMO_REG_CLOCK_3D, 0x002a },
++ { GLAMO_REG_CLOCK_2D, 0x002a },
++ //{ GLAMO_REG_CLOCK_RISC1, 0x0aaa },
++ //{ GLAMO_REG_CLOCK_RISC2, 0x002a },
++ { GLAMO_REG_CLOCK_MPEG, 0x0aaa },
++ { GLAMO_REG_CLOCK_MPROC, 0x02aa },
++ { 0xfffe, 5 },
++ { GLAMO_REG_PLL_GEN1, 0x061a }, /* PLL1=50MHz, OSCI=32kHz */
++ { GLAMO_REG_PLL_GEN3, 0x09c3 }, /* PLL2=80MHz, OSCI=32kHz */
++ { 0xfffe, 5 },
++ { GLAMO_REG_CLOCK_GEN5_1, 0x18ff },
++ { GLAMO_REG_CLOCK_GEN5_2, 0x051f },
++ { GLAMO_REG_CLOCK_GEN6, 0x2000 },
++ { GLAMO_REG_CLOCK_GEN7, 0x0105 },
++ { GLAMO_REG_CLOCK_GEN8, 0x0100 },
++ { GLAMO_REG_CLOCK_GEN10, 0x0017 },
++ { GLAMO_REG_CLOCK_GEN11, 0x0017 },
++
++ /* hostbus interface */
++ { GLAMO_REG_HOSTBUS(1), 0x0e00 },
++ { GLAMO_REG_HOSTBUS(2), 0x07ff },
++ { GLAMO_REG_HOSTBUS(4), 0x0080 },
++ { GLAMO_REG_HOSTBUS(5), 0x0244 },
++ { GLAMO_REG_HOSTBUS(6), 0x0600 },
++ { GLAMO_REG_HOSTBUS(12), 0xf00e },
++
++ /* memory */
++ { GLAMO_REG_MEM_TYPE, 0x0874 }, /* VRAM 8Mbyte */
++ { GLAMO_REG_MEM_GEN, 0xafaf },
++ { GLAMO_REG_MEM_TIMING(1), 0x0108 },
++ { GLAMO_REG_MEM_TIMING(2), 0x0010 },
++ { GLAMO_REG_MEM_TIMING(3), 0x0000 },
++ { GLAMO_REG_MEM_TIMING(4), 0x0000 },
++ { GLAMO_REG_MEM_TIMING(5), 0x0000 },
++ { GLAMO_REG_MEM_TIMING(6), 0x0000 },
++ { GLAMO_REG_MEM_TIMING(7), 0x0000 },
++ { GLAMO_REG_MEM_TIMING(8), 0x1002 },
++ { GLAMO_REG_MEM_TIMING(9), 0x6006 },
++ { GLAMO_REG_MEM_TIMING(10), 0x00ff },
++ { GLAMO_REG_MEM_TIMING(11), 0x0001 },
++ { GLAMO_REG_MEM_POWER1, 0x0020 },
++ { GLAMO_REG_MEM_POWRE2, 0x0000 },
++ { GLAMO_REG_MEM_DRAM1, 0x0000 },
++ { 0xfffe, 1 },
++ { GLAMO_REG_MEM_DRAM1, 0xc100 },
++ { GLAMO_REG_MEM_DRAM2, 0x01d6 },
++};
++
++static int glamo3362_init(void)
++{
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(gl3362_init_script); i++) {
++ struct glamo_reg *reg = gl3362_init_script[i];
++
++ if (reg->reg == 0xfffe)
++ delay(reg->val);
++ else
++ gl3362_reg_write(reg->reg, reg->val);
++ }
++ /* FIXME */
++}
++
++#endif /* CONFIG_VIDEO_GLAMO3362 */
+Index: u-boot/drivers/Makefile
+===================================================================
+--- u-boot.orig/drivers/Makefile
++++ u-boot/drivers/Makefile
+@@ -50,7 +50,7 @@
+ usbdcore.o usbdfu.o usbdcore_ep0.o usbdcore_omap1510.o usbdcore_s3c2410.o usbtty.o \
+ videomodes.o w83c553f.o \
+ ks8695eth.o \
+- pcf50606.o \
++ pcf50606.o pcf50633.o \
+ pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
+ rpx_pcmcia.o \
+ fsl_i2c.o s3c2410_fb.o
+Index: u-boot/common/cmd_nand.c
+===================================================================
+--- u-boot.orig/common/cmd_nand.c
++++ u-boot/common/cmd_nand.c
+@@ -208,8 +208,10 @@
+ putc('\n');
+ for (i = 0; i < CFG_MAX_NAND_DEVICE; i++) {
+ if (nand_info[i].name)
+- printf("Device %d: %s, sector size %lu KiB\n",
++ printf("Device %d: %s, page size %lu, "
++ "sector size %lu KiB\n",
+ i, nand_info[i].name,
++ nand_info[i].oobblock,
+ nand_info[i].erasesize >> 10);
+ }
+ return 0;
+Index: u-boot/drivers/nand/nand_ids.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_ids.c
++++ u-boot/drivers/nand/nand_ids.c
+@@ -67,7 +67,7 @@
+
+ {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0},
+
+- {"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0},
++ //{"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0},
+
+ /* These are the new chips with large page size. The pagesize
+ * and the erasesize is determined from the extended id bytes
+Index: u-boot/board/neo1973/common/udc.c
+===================================================================
+--- u-boot.orig/board/neo1973/common/udc.c
++++ u-boot/board/neo1973/common/udc.c
+@@ -3,6 +3,7 @@
+ #include <usbdcore.h>
+ #include <s3c2410.h>
+ #include <pcf50606.h>
++#include <pcf50633.h>
+
+ void udc_ctrl(enum usbd_event event, int param)
+ {
+@@ -23,6 +24,11 @@
+ defined(CONFIG_ARCH_GTA01B_v2) || defined(CONFIG_ARCH_GTA01B_v3) || \
+ defined(CONFIG_ARCH_GTA01B_v4)
+ pcf50606_charge_autofast(param);
++#elif defined(CONFIG_ARCH_GTA02_v1)
++ if (param)
++ pcf50633_usb_maxcurrent(500);
++ else
++ pcf50633_usb_maxcurrent(0);
+ #endif
+ break;
+ default:
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch
new file mode 100644
index 0000000000..f85fdea836
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch
@@ -0,0 +1,1169 @@
+Patch to add HXD8 support
+
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2026,6 +2026,9 @@
+ qt2410_config : unconfig
+ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
+
++hxd8_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm920t hxd8 NULL s3c24x0
++
+ scb9328_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t scb9328 NULL imx
+
+Index: u-boot/board/hxd8/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/Makefile
+@@ -0,0 +1,65 @@
++#
++# (C) Copyright 2000-2006
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS := hxd8.o udc.o pcf50606.o
++SOBJS := lowlevel_init.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++all: $(LIB) lowevel_foo.bin
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++lowlevel_foo.o: lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o lowlevel_init.o lowlevel_foo.lds
++ $(LD) -T ./lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+Index: u-boot/board/hxd8/hxd8.c
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/hxd8.c
+@@ -0,0 +1,189 @@
++/*
++ * (C) Copyright 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <video_fb.h>
++#include <nand.h>
++#include <pcf50606.h>
++#include <s3c2440.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#define FCLK_SPEED 1
++
++#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
++#define M_MDIV 0xC3
++#define M_PDIV 0x4
++#define M_SDIV 0x1
++#elif FCLK_SPEED==1
++#if 0
++#define M_MDIV 0x6e /* Fout = 399.65MHz */
++#define M_PDIV 0x3
++#define M_SDIV 0x1
++#else
++#define M_MDIV 0x61 /* Fout = 296.35MHz due to wrong PLL capacitors */
++#define M_PDIV 0x1
++#define M_SDIV 0x2
++#endif
++#endif
++
++#define USB_CLOCK 1
++
++#if USB_CLOCK==0
++#define U_M_MDIV 0xA1
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x1
++#elif USB_CLOCK==1
++#define U_M_MDIV 0x3c
++#define U_M_PDIV 0x4
++#define U_M_SDIV 0x2
++#endif
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++ gpio->GPACON = 0x005E0FFE;
++ gpio->GPADAT = 0x0001C000;
++ gpio->GPBCON = 0x00045542;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPCCON = 0xAAAA02A9;
++ gpio->GPCUP = 0x0000FFFF;
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++ gpio->GPFCON = 0x0000AAA9;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPGCON = 0x027D0316;
++ gpio->GPGUP = 0x0000FFFF;
++ gpio->GPHCON = 0x0014AAAA;
++ gpio->GPHUP = 0x000007FF;
++ gpio->GPJCON = 0x00000000;
++
++ /* USB CHG enable */
++ gpio->GPGDAT |= ( 1 << 11);
++#if 0
++ /* USB Device Part */
++ /*GPGCON is reset for USB Device */
++ gpio->GPGCON = (gpio->GPGCON & ~(3 << 24)) | (1 << 24); /* Output Mode */
++ gpio->GPGUP = gpio->GPGUP | ( 1 << 12); /* Pull up disable */
++
++ gpio->GPGDAT |= ( 1 << 12);
++ gpio->GPGDAT &= ~( 1 << 12);
++ udelay(20000);
++ gpio->GPGDAT |= ( 1 << 12);
++#endif
++
++ /* arch number of SMDK2440-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_HXD8;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++void board_video_init(GraphicDevice *pGD)
++{
++ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
++
++ lcd->LCDCON1 = 0x0000057b;
++ lcd->LCDCON2 = 0x0143c049;
++ lcd->LCDCON3 = 0x0009df01;
++ lcd->LCDCON4 = 0x00000028;
++ lcd->LCDCON5 = 0x00000b08;
++
++ lcd->TPAL = 0x01202020;
++
++ //lcd->LCDCON5 |= (0x01 << 3);
++}
++
++int board_late_init(void)
++{
++ /* Initialize the Power Management Unit with a safe register set */
++ pcf50606_init();
++
++ return 0;
++}
++
++int dram_init(void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
++
++u_int32_t get_board_rev(void)
++{
++ return 0x00000110;
++}
++
++/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000.
++ "initrd" is sized such that it can hold two uncompressed 16 bit 640*480
++ images: 640*480*2*2 = 1228800 < 1245184. */
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, 0x20000, 0x200000, 0xa0000, 0x3fd00000, 0 };
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
+Index: u-boot/board/hxd8/lowlevel_init.S
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/lowlevel_init.S
+@@ -0,0 +1,171 @@
++/*
++ * Memory Setup stuff - taken from blob memsetup.S
++ *
++ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
++ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
++ *
++ * Modified for the FIC HXD8 by Harald Welte <laforge@openmoko.org>
++ * (C) Copyright 2007 by OpenMoko, Inc.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1 /* 3clk */
++#define B6_SCAN 0x2 /* 10bit */
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x1 /* 9bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x1 /* 3clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ ldr r0, =SMRDATA
++ ldr r1, _TEXT_BASE
++ sub r0, r0, r1
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* setup asynchronous bus mode */
++ mrc p15, 0, r1 ,c1 ,c0, 0
++ orr r1, r1, #0xc0000000
++ mcr p15, 0, r1, c1, c0, 0
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0x32
++ .word 0x30
++ .word 0x30
+Index: u-boot/include/configs/hxd8.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/hxd8.h
+@@ -0,0 +1,277 @@
++/*
++ * (C) Copyright 2007 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * Configuation settings for the FIC HXD8
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* we want to be able to start u-boot directly from within NAND flash */
++#define CONFIG_LL_INIT_NAND_ONLY
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++
++#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
++#define CONFIG_SMDK2440 1 /* on a SAMSUNG SMDK2440 Board */
++#define CONFIG_HXD8 1 /* on a FIC HXD8 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 16934400/* the HXD8 has this input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 2048*1024)
++ /* >> CFG_VIDEO_LOGO_MAX_SIZE */
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL3 1 /* we use SERIAL 3 on HXD8 */
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS (\
++ CFG_CMD_BDI | \
++ CFG_CMD_LOADS | \
++ CFG_CMD_LAODB | \
++ CFG_CMD_IMI | \
++ CFG_CMD_CACHE | \
++ CFG_CMD_MEMORY | \
++ CFG_CMD_ENV | \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_BOOTD | \
++ CFG_CMD_CONSOLE | \
++ /* CFG_CMD_BMP | */ \
++ CFG_CMD_ASKENV | \
++ CFG_CMD_RUN | \
++ CFG_CMD_ECHO | \
++ CFG_CMD_I2C | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_IMMAP | \
++ CFG_CMD_DATE | \
++ CFG_CMD_AUTOSCRIPT | \
++ CFG_CMD_BSP | \
++ CFG_CMD_ELF | \
++ CFG_CMD_MISC | \
++ /* CFG_CMD_USB | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_DIAG | \
++ /* CFG_CMD_HWFLOW | */ \
++ CFG_CMD_SAVES | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_MMC | \
++ CFG_CMD_FAT | \
++ CFG_CMD_EXT2 | \
++ 0)
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS ""
++#define CONFIG_BOOTCOMMAND "setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 3 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "HXD8 # " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 64 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x33000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (512*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (8*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++#if 0
++#define CONFIG_USB_OHCI 1
++#endif
++
++#if 1
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x511a /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc"
++#define CONFIG_USBD_PRODUCT_NAME "HXD8 Bootloader " U_BOOT_VERSION
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 4096 /* 0x4000 */
++#define CONFIG_USBD_DFU_INTERFACE 2
++#endif
++#define CFG_CONSOLE_IS_IN_ENV 1
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "usbtty=cdc_acm\0" \
++ "bootargs_base=rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC2,115200 console=tty0 loglevel=8\0" \
++ ""
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x08000000 /* 128 MB */
++#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++/* No NOR flash in this device */
++#define CFG_NO_FLASH 1
++
++#define CFG_ENV_SIZE 0x20000 /* 128k Total Size of Environment Sector */
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_OFFSET_OOB 1 /* Location of ENV stored in block 0 OOB */
++#define CFG_PREBOOT_OVERRIDE 1 /* allow preboot from memory */
++
++#define NAND_MAX_CHIPS 3
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE NAND_MAX_CHIPS
++#define CFG_NAND_BASE_LIST { CFG_NAND_BASE, CFG_NAND_BASE, CFG_NAND_BASE }
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++/* EXT2 driver */
++#define CONFIG_EXT2 1
++
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 1
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_REVISION_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#endif
++
++#define CONFIG_DRIVER_S3C24X0_I2C 1
++#define CONFIG_HARD_I2C 1
++#define CFG_I2C_SPEED 400000 /* 400kHz according to PCF50606 data sheet */
++#define CFG_I2C_SLAVE 0x7f
++
++/* we have a board_late_init() function */
++#define BOARD_LATE_INIT 1
++
++#if 1
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_SPLASH_SCREEN
++#define CFG_VIDEO_LOGO_MAX_SIZE (640*480+1024+100) /* 100 = slack */
++#define CONFIG_VIDEO_BMP_GZIP
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++#define CONFIG_UNZIP
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#define CONFIG_S3C2410_NAND_BBT 1
++//#define CONFIG_S3C2410_NAND_HWECC 1
++
++#define CONFIG_DRIVER_PCF50606 1
++
++#define MTDIDS_DEFAULT "nand0=hxd8-nand"
++#define MTPARTS_DEFAULT "hxd8-nand:256k(u-boot),128k(u-boot_env),2M(kernel),640k(splash),0x3fd00000(jffs2)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "hxd8-nand"
++#define CONFIG_NAND_DYNPART
++
++#endif /* __CONFIG_H */
+Index: u-boot/board/hxd8/udc.c
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/udc.c
+@@ -0,0 +1,30 @@
++
++#include <common.h>
++#include <usbdcore.h>
++#include <s3c2440.h>
++
++#if defined(CONFIG_USB_DEVICE)
++
++void udc_ctrl(enum usbd_event event, int param)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ switch (event) {
++ case UDC_CTRL_PULLUP_ENABLE:
++ if (param)
++ gpio->GPBDAT |= (1 << 9); /* GPB9 */
++ else
++ gpio->GPBDAT &= ~(1 << 9); /* GPB9 */
++ break;
++ case UDC_CTRL_500mA_ENABLE:
++ if (param)
++ gpio->GPADAT |= (1 << 0); /* GPA0 */
++ else
++ gpio->GPADAT &= ~(1 << 0); /* GPA0 */
++ break;
++ default:
++ break;
++ }
++}
++
++#endif /* CONFIG_USB_DEVICE */
+Index: u-boot/board/hxd8/pcf50606.c
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/pcf50606.c
+@@ -0,0 +1,67 @@
++
++#include <common.h>
++#include <pcf50606.h>
++
++/* initial register set for PCF50606 in HXD8 devices */
++const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS] = {
++ [PCF50606_REG_OOCS] = 0x00,
++ /* gap */
++ [PCF50606_REG_INT1M] = PCF50606_INT1_SECOND,
++ [PCF50606_REG_INT2M] = PCF50606_INT2_CHGFOK |
++ PCF50606_INT2_CHGERR |
++ PCF50606_INT2_CHGFRDY |
++ PCF50606_INT2_CHGPROT |
++ PCF50606_INT2_CHGWD10S |
++ PCF50606_INT2_CHGWDEXP,
++ [PCF50606_REG_INT3M] = PCF50606_INT3_TSCPRES,
++ [PCF50606_REG_OOCC1] = PCF50606_OOCC1_RTCWAK |
++ PCF50606_OOCC1_CHGWAK &
++ PCF50606_OOCC1_EXTONWAK_NO_WAKEUP,
++ [PCF50606_REG_OOCC2] = PCF50606_OOCC2_ONKEYDB_14ms |
++ PCF50606_OOCC2_EXTONDB_14ms,
++ /* gap */
++ [PCF50606_REG_PSSC] = 0x00,
++ [PCF50606_REG_PWROKM] = 0x00,
++ /* gap */
++ [PCF50606_REG_DCDC1] = 0xf0, /* CORE_1V3: on */
++ [PCF50606_REG_DCDC2] = 0x00,
++ [PCF50606_REG_DCDC3] = 0x00,
++ [PCF50606_REG_DCDC4] = 0x30, /* 1.25A */
++
++ [PCF50606_REG_DCDEC1] = 0xe8, /* IO1_3V3: off */
++ [PCF50606_REG_DCDEC2] = 0x00,
++
++ [PCF50606_REG_DCUDC1] = 0x08, /* RF_3V3: off */
++ [PCF50606_REG_DCUDC2] = 0x30, /* 1.25A current limit */
++
++ [PCF50606_REG_IOREGC] = 0xf8, /* AUDIO_3V3: on */
++
++ [PCF50606_REG_D1REGC1] = 0xf8, /* RC_3V3: on */
++
++ [PCF50606_REG_D2REGC1] = 0x18, /* GPS_3V3: off */
++
++ [PCF50606_REG_D3REGC1] = 0xf8, /* IO2_3V3: off */
++
++ [PCF50606_REG_LPREGC1] = 0xf8, /* LCM_3V3: on */
++ [PCF50606_REG_LPREGC2] = 0x00,
++
++ [PCF50606_REG_MBCC1] = 0x00, /* charger unused */
++ [PCF50606_REG_MBCC2] = 0x00, /* unlimited charging */
++ [PCF50606_REG_MBCC3] = 0x1a, /* 0.2*Ifast, 4.20V */
++ [PCF50606_REG_BBCC] = 0x1f, /* 400uA */
++ [PCF50606_REG_ADCC1] = 0x00,
++ [PCF50606_REG_ADCC2] = 0x00,
++ /* gap */
++ [PCF50606_REG_ACDC1] = 0x00,
++ [PCF50606_REG_BVMC] = PCF50606_BVMC_THRSHLD_3V3,
++ [PCF50606_REG_PWMC1] = 0x1f, /* clock: 512 DC: 15/16*/
++ [PCF50606_REG_LEDC1] = 0x00,
++ [PCF50606_REG_LEDC2] = 0x00,
++ [PCF50606_REG_GPOC1] = 0x03, /* PWM ACTIVE */
++ [PCF50606_REG_GPOC2] = 0x07, /* back light pull low */
++ [PCF50606_REG_GPOC3] = 0x00,
++ [PCF50606_REG_GPOC4] = 0x00,
++ [PCF50606_REG_GPOC5] = 0x00,
++};
++
++
+Index: u-boot/board/hxd8/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/config.mk
+@@ -0,0 +1,27 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# FIC HXD8 board with S3C2440X (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x511a
++CONFIG_USB_DFU_REVISION=0x0100
++
++#
++# HXD81v011 or later has 1 bank of 128 MB SDRAM
++#
++# 3000'0000 to 3800'0000
++# we load ourself to 37F8'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# download area is 3200'0000 or 3300'0000
++
++# FIXME: TEXT_BASE = 0x37F80000
++TEXT_BASE = 0x33F80000
+Index: u-boot/board/hxd8/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/board/hxd8/lowlevel_foo.S
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/lowlevel_foo.S
+@@ -0,0 +1,87 @@
++
++_start:
++ b reset
++undefvec:
++ b undefvec
++swivec:
++ b swivec
++pabtvec:
++ b pabtvec
++dabtvec:
++ b dabtvec
++rsvdvec:
++ b rsvdvec
++irqvec:
++ b irqvec
++fiqvec:
++ b fiqvec
++
++reset:
++ /*
++ * set the cpu to SVC32 mode
++ */
++ mrs r0,cpsr
++ bic r0,r0,#0x1f
++ orr r0,r0,#0xd3
++ msr cpsr,r0
++
++/* turn off the watchdog */
++#define pWTCON 0x53000000
++#define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
++#define INTSUBMSK 0x4A00001C
++#define CLKDIVN 0x4C000014 /* clock divisor register */
++#define CAMDIVN 0x4C000018
++
++ ldr r0, =pWTCON
++ mov r1, #0x0
++ str r1, [r0]
++
++ mov r1, #0xffffffff
++ ldr r0, =INTMSK
++ str r1, [r0]
++ ldr r1, =0x7ff
++ ldr r0, =INTSUBMSK
++ str r1, [r0]
++
++ /* FCLK:HCLK:PCLK = 1:3:6 */
++ ldr r0, =CAMDIVN
++ mov r1, #0
++ str r1, [r0]
++
++ /* FCLK:HCLK:PCLK = 1:3:6 */
++ ldr r0, =CLKDIVN
++ mov r1, #7
++ str r1, [r0]
++
++ bl cpu_init_crit
++ ldr r0,=TEXT_BASE
++ mov pc, r0
++
++cpu_init_crit:
++ /*
++ * flush v4 I/D caches
++ */
++ mov r0, #0
++ mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
++ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
++
++ /*
++ * disable MMU stuff and caches
++ */
++ mrc p15, 0, r0, c1, c0, 0
++ bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
++ bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
++ orr r0, r0, #0x00000002 @ set bit 2 (A) Align
++ orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
++ mcr p15, 0, r0, c1, c0, 0
++
++ /*
++ * before relocating, we have to setup RAM timing
++ * because memory timing is board-dependend, you will
++ * find a lowlevel_init.S in your board directory.
++ */
++ mov ip, lr
++ bl lowlevel_init
++ mov lr, ip
++ mov pc, lr
++
+Index: u-boot/board/hxd8/lowlevel_foo.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/hxd8/lowlevel_foo.lds
+@@ -0,0 +1,56 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ lowlevel_foo.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/cpu/arm920t/s3c24x0/nand.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/nand.c
++++ u-boot/cpu/arm920t/s3c24x0/nand.c
+@@ -83,6 +83,59 @@
+ #define NFDATA __REGb(NF_BASE + oNFDATA)
+ #define NFSTAT __REGb(NF_BASE + oNFSTAT)
+
++#if defined(CONFIG_HXD8)
++static int hxd8_nand_dev_ready(struct mtd_info *mtd)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ u_int32_t val = gpio->GPCDAT;
++
++ switch (nand_curr_device) {
++ case 0:
++ return (NFSTAT & 0x01);
++ case 1: /* RnB 3 */
++ return ((val>>6) & 0x01);
++ case 2: /* RnB 4 */
++ return ((val>>7) & 0x01);
++ case 3: /* RnB 2 */
++ return ((val>>5) & 0x01);
++ default:
++ return 0;
++ }
++}
++
++/* 4G Nand flash chip select function */
++static void hxd8_nand_select_chip(struct nand_chip *this, int chip)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ if (chip == 0)
++ gpio->GPGDAT &= ~(1 << 1);
++ else
++ gpio->GPGDAT |= (1 << 1);
++
++ if (chip == 1)
++ gpio->GPADAT &= ~(1 << 15);
++ else
++ gpio->GPADAT |= (1 << 15);
++
++ if (chip == 2)
++ gpio->GPADAT &= ~(1 << 16);
++ else
++ gpio->GPADAT |= (1 << 16);
++
++ if (chip == 3)
++ gpio->GPADAT &= ~(1 << 14);
++ else
++ gpio->GPADAT |= (1 << 14);
++
++ /* UGLY: ew don't have mtd_info pointer, but know that
++ * s3c24xx hwcontrol function does not use it for CLRNCE */
++ if (chip == -1)
++ this->hwcontrol(NULL, NAND_CTL_CLRNCE);
++ else
++ this->hwcontrol(NULL, NAND_CTL_SETNCE);
++}
++#endif
+
+ static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
+ {
+@@ -251,6 +304,11 @@
+ nand->eccmode = NAND_ECC_SOFT;
+ #endif
+
++#if defined(CONFIG_HXD8)
++ nand->dev_ready = hxd8_nand_dev_ready;
++ nand->select_chip = hxd8_nand_select_chip;
++#endif
++
+ #ifdef CONFIG_S3C2410_NAND_BBT
+ nand->options = NAND_USE_FLASH_BBT | NAND_DONT_CREATE_BBT;
+ #else
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch
new file mode 100644
index 0000000000..227a97e71a
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch
@@ -0,0 +1,712 @@
+Index: u-boot/common/Makefile
+===================================================================
+--- u-boot.orig/common/Makefile
++++ u-boot/common/Makefile
+@@ -34,7 +34,7 @@
+ cmd_dynenv.o cmd_eeprom.o cmd_elf.o cmd_ext2.o \
+ cmd_fat.o cmd_fdc.o cmd_fdt.o cmd_fdos.o cmd_flash.o cmd_fpga.o \
+ cmd_i2c.o cmd_ide.o cmd_immap.o cmd_itest.o cmd_jffs2.o \
+- cmd_load.o cmd_log.o \
++ cmd_license.o cmd_load.o cmd_log.o \
+ cmd_mem.o cmd_mii.o cmd_misc.o cmd_mmc.o \
+ cmd_nand.o cmd_net.o cmd_nvedit.o \
+ cmd_pci.o cmd_pcmcia.o cmd_portio.o \
+Index: u-boot/common/cmd_license.c
+===================================================================
+--- /dev/null
++++ u-boot/common/cmd_license.c
+@@ -0,0 +1,57 @@
++/*
++ * (C) Copyright 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if (CONFIG_COMMANDS & CFG_CMD_LICENSE)
++
++#define LICENSE_MAX 20480
++#include <command.h>
++#include <malloc.h>
++#include <license.h>
++int gunzip(void *, int, unsigned char *, unsigned long *);
++
++int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
++{
++ char *tok, *dst = malloc(LICENSE_MAX);
++ unsigned long len = LICENSE_MAX;
++
++ if (!dst)
++ return -1;
++
++ if (gunzip(dst, LICENSE_MAX, gpl_gz, &len) != 0) {
++ printf("Error uncompressing license text\n");
++ free(dst);
++ return -1;
++ }
++ puts(dst);
++ free(dst);
++
++ return 0;
++}
++
++U_BOOT_CMD(license, 1, 1, do_license,
++ "license - print GPL license text\n",
++ NULL);
++
++#endif /* CFG_CMD_LICENSE */
+Index: u-boot/include/cmd_confdefs.h
+===================================================================
+--- u-boot.orig/include/cmd_confdefs.h
++++ u-boot/include/cmd_confdefs.h
+@@ -75,6 +75,7 @@
+ #define CFG_CMD_FPGA 0x0000010000000000ULL /* FPGA configuration Support */
+ #define CFG_CMD_HWFLOW 0x0000020000000000ULL /* RTS/CTS hw flow control */
+ #define CFG_CMD_SAVES 0x0000040000000000ULL /* save S record dump */
++#define CFG_CMD_LICENSE 0x0000080000000000ULL /* Display GPL License */
+ #define CFG_CMD_SPI 0x0000100000000000ULL /* SPI utility */
+ #define CFG_CMD_FDOS 0x0000200000000000ULL /* Floppy DOS support */
+ #define CFG_CMD_VFD 0x0000400000000000ULL /* VFD support (TRAB) */
+Index: u-boot/include/license.h
+===================================================================
+--- /dev/null
++++ u-boot/include/license.h
+@@ -0,0 +1,584 @@
++/* bin2header converting 'gpl.gz' */
++unsigned char gpl_gz[] = {
++ 0x1f, 0x8b, 0x08, 0x08, 0xb2, 0x10, 0x0d, 0x46, 0x00, 0x03,
++ 0x67, 0x70, 0x6c, 0x00, 0x9d, 0x5b, 0x5d, 0x77, 0xdb, 0x46,
++ 0x92, 0x7d, 0x4e, 0xff, 0x8a, 0x3e, 0x7e, 0x89, 0x74, 0x0e,
++ 0xc3, 0xc4, 0x9e, 0x9d, 0xdd, 0x49, 0xfc, 0x44, 0x49, 0x94,
++ 0xcd, 0x1d, 0x99, 0x52, 0x48, 0xca, 0x8e, 0x1f, 0x41, 0xb2,
++ 0x29, 0x62, 0x0c, 0x02, 0x5c, 0x7c, 0x48, 0xe6, 0xbf, 0xdf,
++ 0x7b, 0xab, 0xba, 0x81, 0x06, 0x49, 0x25, 0xb3, 0x9b, 0x93,
++ 0xc4, 0x16, 0x09, 0x54, 0xd7, 0x77, 0xdd, 0xaa, 0x2e, 0xfd,
++ 0xf0, 0x83, 0xc5, 0x3f, 0x1f, 0xa6, 0x8f, 0xf6, 0xc3, 0x78,
++ 0x3a, 0x9e, 0x8d, 0xee, 0xec, 0xc3, 0xe3, 0xd5, 0xdd, 0xe4,
++ 0xda, 0xe2, 0xbf, 0xf1, 0x74, 0x3e, 0x36, 0x3f, 0xc8, 0x03,
++ 0xf8, 0xe7, 0xb3, 0x2b, 0xab, 0xb4, 0xc8, 0xed, 0xbb, 0x81,
++ 0xfd, 0xef, 0x26, 0x77, 0xf6, 0xed, 0xaf, 0xbf, 0xbe, 0x35,
++ 0xc6, 0x5e, 0x17, 0xfb, 0x43, 0x99, 0x3e, 0x6d, 0x6b, 0x7b,
++ 0x71, 0x7d, 0x89, 0x0f, 0xff, 0xf1, 0xeb, 0x40, 0xbe, 0xb2,
++ 0xb7, 0xa5, 0x73, 0x76, 0x5e, 0x6c, 0xea, 0x97, 0xa4, 0x74,
++ 0xf6, 0xb6, 0x68, 0xf2, 0x75, 0x52, 0x83, 0xc0, 0xc0, 0x4e,
++ 0xf2, 0xd5, 0x70, 0x60, 0xec, 0xdf, 0xf9, 0x4c, 0x92, 0x7f,
++ 0xcb, 0xd2, 0xdc, 0xce, 0x6b, 0x3c, 0x5d, 0x0f, 0xec, 0x6d,
++ 0xba, 0xa9, 0xb7, 0xf6, 0x36, 0x2b, 0x8a, 0x72, 0x60, 0xaf,
++ 0x8a, 0xaa, 0xe6, 0xf3, 0x9f, 0x46, 0xf6, 0x97, 0x77, 0x6f,
++ 0xdf, 0xfe, 0xf2, 0xd3, 0xdb, 0xbf, 0xfd, 0xf2, 0xd6, 0x3e,
++ 0xce, 0x47, 0xc6, 0x8e, 0x9f, 0x5d, 0x79, 0x28, 0xc0, 0x45,
++ 0x5a, 0xd9, 0xbd, 0x2b, 0x77, 0x69, 0x5d, 0xbb, 0xb5, 0xad,
++ 0x0b, 0xbb, 0x02, 0x3b, 0x36, 0xc9, 0xd7, 0x76, 0x9d, 0x56,
++ 0x75, 0x99, 0x2e, 0x9b, 0xda, 0x59, 0x3c, 0xbb, 0xc4, 0xd1,
++ 0x3b, 0x7e, 0x99, 0xba, 0xca, 0xd8, 0x62, 0x63, 0xeb, 0x2d,
++ 0xde, 0xcc, 0xd2, 0x95, 0xcb, 0x2b, 0x67, 0xd7, 0xc5, 0xaa,
++ 0xd9, 0xb9, 0x1c, 0xe7, 0xe3, 0x79, 0xbb, 0xda, 0x26, 0xf9,
++ 0x53, 0x9a, 0x3f, 0xd9, 0xb4, 0x26, 0xf9, 0xbc, 0xa8, 0x6d,
++ 0x92, 0x65, 0xc5, 0x8b, 0x5b, 0x0f, 0x0d, 0xd4, 0x21, 0xfa,
++ 0x78, 0x28, 0x5d, 0xb2, 0x5b, 0x66, 0x0e, 0x0a, 0xb0, 0x8b,
++ 0xad, 0x0b, 0x94, 0x2a, 0xbb, 0x29, 0x4a, 0xbb, 0x03, 0xdf,
++ 0xb6, 0x0a, 0x92, 0xf3, 0xbf, 0xb5, 0xab, 0xd2, 0xa7, 0x5c,
++ 0x39, 0xac, 0x93, 0x6f, 0xf8, 0xf0, 0x25, 0x39, 0xd8, 0x43,
++ 0xd1, 0x94, 0x66, 0x03, 0xc1, 0xd7, 0xc5, 0x8e, 0xdf, 0x54,
++ 0x5b, 0x79, 0x1e, 0xcc, 0x0b, 0x0b, 0x10, 0xae, 0x1e, 0x5a,
++ 0x7b, 0x75, 0x00, 0xdf, 0x79, 0x5d, 0x26, 0x15, 0xf8, 0xab,
++ 0x71, 0x96, 0x18, 0xcb, 0xe5, 0xae, 0x4c, 0x32, 0xfb, 0xd0,
++ 0x2c, 0x71, 0xb4, 0xb9, 0xf3, 0x82, 0x80, 0xdd, 0x34, 0xaf,
++ 0x5d, 0xbe, 0xd6, 0xa3, 0x9e, 0x9a, 0x04, 0x0a, 0xae, 0x61,
++ 0x07, 0x1e, 0x65, 0xff, 0xec, 0x28, 0x7e, 0x67, 0x02, 0xcf,
++ 0x3f, 0xfd, 0x84, 0x47, 0x76, 0xe4, 0xb3, 0x6a, 0xf0, 0x18,
++ 0x0f, 0x6d, 0xc5, 0xc1, 0x11, 0x7c, 0x56, 0x04, 0x85, 0x5a,
++ 0xc0, 0x63, 0x65, 0x9b, 0x0a, 0xbe, 0x31, 0xa4, 0x26, 0xd2,
++ 0xca, 0xf4, 0x59, 0xb3, 0x81, 0xb5, 0x64, 0xbf, 0xcf, 0xa0,
++ 0x7c, 0x1e, 0x2e, 0xfa, 0x11, 0x1b, 0xb8, 0xbe, 0x97, 0x98,
++ 0xce, 0x4b, 0x7e, 0xac, 0x22, 0x0d, 0xe6, 0x22, 0x4d, 0x92,
++ 0x1f, 0x6c, 0x81, 0x77, 0x4a, 0xbb, 0x2f, 0x8b, 0xa7, 0x32,
++ 0xd9, 0xd9, 0x97, 0x6d, 0x41, 0xca, 0x4d, 0xbd, 0x2d, 0xca,
++ 0x0a, 0x5a, 0xda, 0xc1, 0x0f, 0xf0, 0xa4, 0x69, 0x2a, 0x35,
++ 0x1f, 0x58, 0xba, 0x98, 0x17, 0x3b, 0xe7, 0x5f, 0x7b, 0xcd,
++ 0x23, 0x7b, 0xc2, 0xad, 0x0a, 0xb8, 0x0b, 0xd4, 0xb7, 0x3c,
++ 0x98, 0xa0, 0xec, 0x3b, 0x57, 0x41, 0x40, 0xfb, 0x8a, 0x60,
++ 0x69, 0x5e, 0xd5, 0x2e, 0x59, 0x0f, 0x2f, 0xad, 0xfd, 0x5a,
++ 0x34, 0x76, 0x95, 0xe4, 0x22, 0xeb, 0xc1, 0x2a, 0x2f, 0xa2,
++ 0x79, 0xcf, 0x70, 0x05, 0x03, 0x16, 0xc5, 0x90, 0x4e, 0xf3,
++ 0x65, 0xeb, 0x72, 0xfb, 0x02, 0xbd, 0xee, 0x5d, 0xf2, 0x8d,
++ 0xca, 0x10, 0xa5, 0x06, 0x46, 0x06, 0xfc, 0x8a, 0x0c, 0x95,
++ 0x6e, 0xe3, 0xca, 0x92, 0xd2, 0x40, 0x01, 0xde, 0x7e, 0x03,
++ 0xba, 0xa4, 0xd9, 0x97, 0x38, 0x1f, 0x02, 0xde, 0x37, 0xaf,
++ 0x71, 0x56, 0x9d, 0xb8, 0x5e, 0x6c, 0xd2, 0xa4, 0xa6, 0x53,
++ 0x98, 0x6d, 0xf2, 0xac, 0x06, 0x8e, 0x9c, 0x23, 0x0a, 0x1d,
++ 0x8d, 0x98, 0x13, 0xfe, 0xec, 0x85, 0x77, 0x9d, 0xf2, 0x49,
++ 0x3c, 0xc1, 0x48, 0x38, 0x41, 0x49, 0xcf, 0x38, 0xda, 0xa6,
++ 0x1b, 0x92, 0xb6, 0x2f, 0x69, 0xb5, 0xbd, 0x1c, 0xb4, 0x47,
++ 0x41, 0x96, 0x95, 0x4b, 0x9f, 0x49, 0xa4, 0x29, 0x57, 0x24,
++ 0xbd, 0x86, 0x61, 0x4a, 0x51, 0xd8, 0x93, 0x43, 0xa8, 0xd5,
++ 0x26, 0xbc, 0x08, 0x9f, 0xc5, 0x8f, 0xd1, 0xab, 0x7c, 0xc6,
++ 0x3b, 0x6a, 0xcf, 0x19, 0xf1, 0x3a, 0x7c, 0xcf, 0x82, 0xc7,
++ 0x95, 0x72, 0x49, 0x22, 0xb9, 0xcd, 0xdd, 0x8b, 0xf2, 0x1b,
++ 0xf4, 0xfe, 0x5e, 0x7d, 0x28, 0x90, 0xfb, 0x96, 0x17, 0x2f,
++ 0x2d, 0xdd, 0x75, 0x41, 0x9a, 0x15, 0x29, 0x43, 0xcf, 0x95,
++ 0x58, 0x67, 0x51, 0xf0, 0xd5, 0xda, 0xad, 0x6a, 0x8d, 0x1c,
++ 0x49, 0x70, 0x95, 0x58, 0x25, 0x77, 0x91, 0x2e, 0x4b, 0x47,
++ 0x4d, 0xad, 0xe8, 0x44, 0x95, 0x92, 0x87, 0x32, 0x96, 0xe9,
++ 0xda, 0xc0, 0x57, 0x99, 0x9d, 0xa8, 0x4c, 0x97, 0x4b, 0xa4,
++ 0xfb, 0x43, 0x94, 0x12, 0x19, 0xa7, 0x47, 0x57, 0xdf, 0xf4,
++ 0xab, 0x82, 0x56, 0x29, 0x19, 0xb7, 0xa5, 0x08, 0xa8, 0x4f,
++ 0x0d, 0xcd, 0x42, 0xdf, 0xe9, 0x9d, 0x82, 0x88, 0xae, 0xb2,
++ 0xa4, 0x16, 0xe2, 0x2b, 0x57, 0xd6, 0x09, 0x04, 0xc6, 0x13,
++ 0x7b, 0x7c, 0x99, 0x2e, 0xd3, 0x2c, 0xad, 0x53, 0x9f, 0x86,
++ 0x48, 0x59, 0x35, 0x6a, 0xce, 0x5a, 0x34, 0xd6, 0xe4, 0x80,
++ 0x1c, 0x79, 0xf5, 0xef, 0x8a, 0x75, 0xba, 0xa1, 0xfb, 0x8a,
++ 0x2a, 0x6e, 0xf1, 0x85, 0xfb, 0x9e, 0xec, 0xf6, 0x19, 0x1e,
++ 0xf2, 0x4f, 0x9c, 0x25, 0x57, 0x35, 0xab, 0xad, 0x4d, 0x82,
++ 0xca, 0xa1, 0xab, 0xad, 0x63, 0xd4, 0x19, 0xfc, 0x54, 0xa7,
++ 0x22, 0xb1, 0xa4, 0x0c, 0xbb, 0x71, 0x20, 0x24, 0xe7, 0x34,
++ 0x48, 0x03, 0x4f, 0xa9, 0xf7, 0x3f, 0x78, 0x47, 0x0a, 0x52,
++ 0x39, 0x94, 0xc3, 0xb4, 0xd2, 0x69, 0x41, 0xf4, 0xca, 0x30,
++ 0xb2, 0xf4, 0xd5, 0xa1, 0x46, 0x99, 0xbc, 0x7b, 0xe4, 0xce,
++ 0x78, 0xe5, 0x20, 0x01, 0x36, 0x68, 0x5d, 0x2d, 0x72, 0x2f,
++ 0x7c, 0x6b, 0x22, 0xcf, 0x03, 0x9d, 0x11, 0x5c, 0xa2, 0xe5,
++ 0xa3, 0xda, 0xc2, 0x25, 0xf0, 0xcc, 0x2e, 0x38, 0x03, 0x8a,
++ 0x0a, 0x53, 0x90, 0x50, 0x55, 0x87, 0xc1, 0xdf, 0xd2, 0xd2,
++ 0x04, 0xd3, 0x30, 0x86, 0xdd, 0x39, 0x2f, 0x81, 0xdf, 0xa3,
++ 0x84, 0xd5, 0x2f, 0xb0, 0x69, 0xed, 0xf6, 0xd5, 0x6f, 0xf6,
++ 0xe2, 0xed, 0xa5, 0x94, 0x25, 0xad, 0x92, 0x7d, 0xad, 0xc3,
++ 0x2d, 0xcd, 0xc5, 0xbb, 0x4b, 0xe8, 0x0f, 0x71, 0xee, 0xdd,
++ 0x24, 0x2a, 0x4c, 0x2f, 0xdb, 0x14, 0x4a, 0xa5, 0x8e, 0x2a,
++ 0xf9, 0x32, 0x73, 0x4f, 0x08, 0x73, 0x29, 0x78, 0x95, 0x14,
++ 0x63, 0x5f, 0xf1, 0x06, 0xb1, 0x85, 0x41, 0xf3, 0x67, 0xa9,
++ 0x42, 0x62, 0xc6, 0xf8, 0x3c, 0xe1, 0x7a, 0x94, 0x55, 0xd0,
++ 0x10, 0x6d, 0xe1, 0x12, 0x5a, 0x4c, 0xb2, 0x27, 0xd2, 0xad,
++ 0x17, 0x85, 0x54, 0x19, 0x2c, 0x10, 0x48, 0x1d, 0x5e, 0xa2,
++ 0x31, 0x38, 0xbc, 0x77, 0x38, 0x23, 0x0a, 0x77, 0xa1, 0x08,
++ 0x37, 0x74, 0xdc, 0xaa, 0xc6, 0x6b, 0x55, 0x6b, 0x0a, 0xcd,
++ 0xa6, 0x79, 0x81, 0xf7, 0x4b, 0x16, 0xa1, 0x83, 0x1c, 0x29,
++ 0xd2, 0xf5, 0x6a, 0x0d, 0x0c, 0x31, 0xd9, 0x9c, 0x94, 0x18,
++ 0x61, 0x3e, 0x95, 0x34, 0x8c, 0xcf, 0x77, 0x8e, 0xa7, 0xb8,
++ 0xac, 0xd2, 0x5a, 0xb0, 0x4f, 0x90, 0x8f, 0xc1, 0x61, 0x4e,
++ 0xfe, 0x8c, 0xcf, 0x16, 0x55, 0xec, 0x41, 0x60, 0xd7, 0x9b,
++ 0x0c, 0xcc, 0xbc, 0x04, 0xe7, 0x10, 0x07, 0x0a, 0x25, 0x9d,
++ 0x27, 0x16, 0x30, 0x49, 0x9a, 0x27, 0xd9, 0x00, 0x67, 0xa8,
++ 0x48, 0xac, 0x31, 0x50, 0x04, 0x2a, 0xfb, 0x4e, 0x4a, 0x69,
++ 0x59, 0xac, 0x9b, 0x95, 0xb2, 0x21, 0x35, 0x84, 0xd6, 0x85,
++ 0x77, 0x92, 0x00, 0x52, 0x73, 0x46, 0xd3, 0xd3, 0x0a, 0x11,
++ 0x2d, 0xe3, 0xcb, 0xd1, 0x8f, 0x78, 0x60, 0xdf, 0xd4, 0x52,
++ 0x60, 0xd4, 0x5d, 0x6e, 0xf9, 0x75, 0x76, 0x18, 0xc8, 0x21,
++ 0x71, 0x7a, 0x22, 0x4b, 0xf5, 0x16, 0x88, 0x02, 0x95, 0x1b,
++ 0x67, 0xa1, 0xda, 0x53, 0x97, 0x35, 0x4a, 0x88, 0x48, 0xef,
++ 0x6b, 0xe3, 0x9e, 0x5f, 0xd7, 0x2c, 0xb3, 0xf0, 0x3b, 0xe6,
++ 0x56, 0xc9, 0x20, 0xcf, 0x45, 0xba, 0x96, 0xf3, 0xd7, 0xcc,
++ 0x8e, 0xa5, 0x4a, 0x8c, 0xfa, 0x15, 0xdc, 0x81, 0x85, 0x11,
++ 0xc1, 0x99, 0xa8, 0xd2, 0xdb, 0xc2, 0x49, 0x21, 0xd2, 0x7c,
++ 0x9d, 0x3e, 0xa7, 0xeb, 0x86, 0x4c, 0xd9, 0x62, 0x29, 0x89,
++ 0x44, 0x0f, 0x69, 0xe1, 0x0c, 0x22, 0x3e, 0xb7, 0x0e, 0xbe,
++ 0xb9, 0x92, 0x68, 0x93, 0x3a, 0xb4, 0xed, 0xc8, 0xe0, 0x4f,
++ 0x94, 0x21, 0x57, 0x27, 0xe5, 0x61, 0xe8, 0x93, 0x26, 0x7c,
++ 0x82, 0xee, 0x02, 0x33, 0x8b, 0xf3, 0x88, 0xc6, 0x77, 0xc9,
++ 0x9a, 0x58, 0xc6, 0xae, 0x32, 0x97, 0x78, 0x0e, 0xa1, 0x02,
++ 0x2f, 0x90, 0x86, 0xdf, 0xb2, 0x85, 0x50, 0x6b, 0x75, 0x4d,
++ 0xef, 0x5a, 0x3f, 0x7a, 0xb4, 0xc1, 0x2c, 0x8f, 0x8f, 0xa9,
++ 0xf7, 0xf6, 0xb9, 0x44, 0x70, 0xd9, 0x30, 0x40, 0xb0, 0x3d,
++ 0xed, 0xdf, 0x46, 0xae, 0xd4, 0xa7, 0x02, 0x12, 0x6a, 0xd6,
++ 0x24, 0x4d, 0x06, 0x0a, 0x24, 0x18, 0x74, 0xe9, 0xcb, 0xfb,
++ 0xba, 0x51, 0x6f, 0x5b, 0x29, 0x18, 0xd8, 0x14, 0x04, 0x7b,
++ 0x02, 0xf5, 0xfe, 0x02, 0x1a, 0xe3, 0xdb, 0xc5, 0x78, 0xf6,
++ 0x69, 0x6e, 0x47, 0xd3, 0x1b, 0x7b, 0x7d, 0x3f, 0xbd, 0x99,
++ 0x2c, 0x26, 0xf7, 0xd3, 0xb9, 0xbd, 0xbd, 0x9f, 0xe1, 0xc7,
++ 0x87, 0xaf, 0x93, 0xe9, 0x87, 0x81, 0xbd, 0x99, 0xcc, 0x17,
++ 0xb3, 0xc9, 0xd5, 0x23, 0xbf, 0x92, 0x07, 0x3f, 0xdd, 0xdf,
++ 0x4c, 0x6e, 0x27, 0xd7, 0x23, 0x7e, 0x40, 0xde, 0x7f, 0x19,
++ 0x0a, 0x6e, 0x3a, 0x07, 0x94, 0xbc, 0x37, 0x8a, 0xae, 0x21,
++ 0x80, 0xa2, 0x98, 0x97, 0xa2, 0xfc, 0xe6, 0x13, 0x03, 0x71,
++ 0x21, 0xac, 0x56, 0x99, 0x84, 0x9a, 0x61, 0xe9, 0xdd, 0x67,
++ 0x89, 0x77, 0x57, 0xfa, 0x44, 0x97, 0x75, 0xb6, 0x45, 0xc6,
++ 0xda, 0x52, 0x25, 0x07, 0x0f, 0x6c, 0x77, 0xc0, 0x9f, 0x50,
++ 0x7a, 0x97, 0x36, 0xd6, 0xa6, 0x69, 0xcb, 0x8f, 0xaa, 0x30,
++ 0xa0, 0xe4, 0xf3, 0xe8, 0x62, 0xa8, 0x5a, 0x7f, 0xf3, 0xa0,
++ 0xfc, 0xbd, 0x01, 0x76, 0x76, 0xd0, 0xdb, 0xc0, 0x08, 0x64,
++ 0x69, 0xd9, 0x97, 0xaa, 0x10, 0xc9, 0x40, 0xee, 0x25, 0xed,
++ 0xc1, 0x25, 0xdf, 0x88, 0x28, 0xcb, 0x44, 0x83, 0x59, 0x4e,
++ 0x0e, 0xd4, 0xcc, 0xce, 0xa1, 0xcc, 0x59, 0x97, 0x8a, 0xc8,
++ 0xd1, 0x37, 0xa4, 0x41, 0xba, 0x60, 0x35, 0x7d, 0x86, 0xc1,
++ 0xe0, 0x5e, 0x42, 0x45, 0x99, 0xef, 0x04, 0xce, 0x92, 0x97,
++ 0xdf, 0x34, 0xa4, 0x53, 0xe1, 0x05, 0x92, 0xe3, 0x58, 0x7d,
++ 0xd6, 0xab, 0xcd, 0x7b, 0x73, 0x8f, 0xb2, 0xdd, 0x17, 0xa5,
++ 0x78, 0x81, 0x60, 0x89, 0x81, 0xf1, 0x0c, 0xb4, 0x1d, 0x04,
++ 0x25, 0x60, 0x7a, 0x8f, 0x3d, 0xa6, 0x0a, 0x19, 0xb7, 0x2d,
++ 0xcd, 0x6b, 0xa6, 0x0e, 0xca, 0x2f, 0x16, 0x33, 0x19, 0x42,
++ 0xb3, 0x49, 0x9e, 0xa8, 0xb2, 0x8b, 0x8f, 0x48, 0x8c, 0xc8,
++ 0x03, 0x1b, 0xa8, 0x78, 0xd0, 0xbe, 0xc0, 0x03, 0x05, 0xba,
++ 0xaf, 0xb2, 0x86, 0xd0, 0x9d, 0x47, 0x14, 0x0d, 0x5d, 0x1d,
++ 0x80, 0xd6, 0x7f, 0x9d, 0x9b, 0x60, 0x19, 0xfb, 0x26, 0x3e,
++ 0xfd, 0x0d, 0x81, 0xe7, 0x98, 0x99, 0xdc, 0x07, 0x86, 0x64,
++ 0xb8, 0x64, 0xbd, 0x2e, 0x9d, 0x64, 0xc9, 0xa4, 0xb2, 0x6f,
++ 0x50, 0x3a, 0xde, 0xc0, 0xa1, 0x47, 0xc8, 0xee, 0xcf, 0x8a,
++ 0x0f, 0x0a, 0xaf, 0x57, 0xe2, 0xaa, 0xd7, 0xc2, 0xa2, 0x27,
++ 0xa4, 0x60, 0x49, 0xe2, 0xce, 0x0e, 0x1f, 0xab, 0x77, 0x78,
++ 0x77, 0x78, 0xaf, 0x19, 0x56, 0x40, 0x59, 0x53, 0x57, 0xa9,
++ 0x44, 0x3c, 0x0a, 0x28, 0xa8, 0x07, 0x57, 0x49, 0x98, 0x2c,
++ 0x37, 0xa6, 0x6c, 0xf2, 0x13, 0xd5, 0xfb, 0x9c, 0x1c, 0x80,
++ 0x8e, 0x5b, 0x0f, 0x3c, 0x60, 0x13, 0x6a, 0x48, 0xa3, 0xc8,
++ 0x02, 0xc5, 0x2e, 0x7e, 0xc5, 0x44, 0x50, 0xbd, 0xc8, 0x89,
++ 0xb6, 0x37, 0x72, 0x20, 0x6d, 0x2b, 0x25, 0x40, 0xb2, 0x68,
++ 0x5a, 0x4b, 0x41, 0xb4, 0x27, 0x8e, 0x66, 0xc2, 0xc9, 0x17,
++ 0xc8, 0x82, 0x6e, 0x4f, 0xe4, 0x95, 0x4b, 0x4f, 0x82, 0x84,
++ 0x45, 0xe6, 0x96, 0x0e, 0xf0, 0x5c, 0xf2, 0x16, 0xe4, 0x3c,
++ 0xc3, 0xf1, 0xe5, 0xd0, 0x7c, 0x51, 0x7c, 0x63, 0x5b, 0x27,
++ 0x2b, 0x1b, 0xa2, 0x6d, 0xd2, 0xaa, 0x78, 0x4a, 0x28, 0x3b,
++ 0xad, 0x90, 0xeb, 0xc2, 0x69, 0x21, 0x78, 0x3b, 0x54, 0x0c,
++ 0x93, 0x1c, 0xfe, 0x9d, 0x76, 0x35, 0x40, 0x35, 0x4f, 0xe6,
++ 0xc7, 0x2a, 0x86, 0x31, 0x34, 0x6f, 0x8c, 0xad, 0x89, 0x9a,
++ 0xd3, 0x5c, 0x22, 0x64, 0x87, 0x22, 0xd0, 0x00, 0x87, 0x21,
++ 0xf8, 0x90, 0xe5, 0x5d, 0x07, 0x7f, 0x0d, 0x55, 0xb3, 0x4f,
++ 0x57, 0x4d, 0xd1, 0x54, 0x99, 0x9e, 0x8e, 0x9c, 0x23, 0xa9,
++ 0x1c, 0xbe, 0x8b, 0x4f, 0xf6, 0x0c, 0x74, 0xd4, 0x17, 0x08,
++ 0x21, 0x10, 0xc1, 0x33, 0x19, 0x3f, 0x65, 0xba, 0x48, 0xf3,
++ 0x99, 0xc7, 0x0b, 0xb1, 0xca, 0x92, 0x74, 0x07, 0xad, 0x80,
++ 0xe9, 0x50, 0xf8, 0xdf, 0xdb, 0x6f, 0xce, 0xed, 0x19, 0x12,
++ 0xf4, 0x00, 0x0f, 0xee, 0x8c, 0xbe, 0x56, 0x85, 0x82, 0x45,
++ 0xf8, 0xc3, 0xe6, 0xb8, 0x97, 0x09, 0xb5, 0xef, 0xa3, 0xf0,
++ 0xc9, 0xb2, 0x72, 0x39, 0x4e, 0x61, 0x29, 0x83, 0x6c, 0x2d,
++ 0x69, 0xc3, 0x67, 0x04, 0x43, 0x76, 0xdd, 0x61, 0x84, 0x03,
++ 0xfa, 0xaa, 0x83, 0x23, 0x88, 0x28, 0x21, 0xb1, 0xf9, 0x73,
++ 0x4c, 0x92, 0x15, 0xb0, 0xae, 0xc2, 0xb6, 0xee, 0x69, 0x98,
++ 0xaa, 0xb5, 0x92, 0x36, 0x3a, 0x82, 0x5d, 0x3d, 0x8c, 0x41,
++ 0xaa, 0xdd, 0x1e, 0x2a, 0x04, 0x47, 0xe6, 0xfd, 0x5a, 0x83,
++ 0x39, 0x74, 0x6b, 0x7a, 0x92, 0xe2, 0xbb, 0x83, 0xa7, 0x92,
++ 0x78, 0x98, 0x58, 0xec, 0x7d, 0x86, 0xa1, 0xcc, 0x2d, 0x3a,
++ 0x8a, 0xe0, 0x17, 0x6b, 0xee, 0xf7, 0xd0, 0x97, 0x07, 0xcc,
++ 0x2c, 0x9e, 0xf3, 0xae, 0xf3, 0x1c, 0x0f, 0xef, 0x84, 0xa2,
++ 0x4a, 0x55, 0x9e, 0x77, 0x98, 0x90, 0x31, 0x7d, 0x66, 0x33,
++ 0x9a, 0xd9, 0xf0, 0x44, 0x23, 0x65, 0x71, 0xa7, 0xec, 0xbe,
++ 0x9a, 0x8a, 0x07, 0xbe, 0x94, 0xaa, 0x9f, 0xc6, 0x38, 0x53,
++ 0x52, 0x7b, 0x3f, 0x11, 0xfa, 0x04, 0x6f, 0xcf, 0x94, 0x92,
++ 0xb9, 0x17, 0xee, 0xad, 0x49, 0x96, 0x88, 0xdb, 0x33, 0x7e,
++ 0x09, 0xd7, 0x00, 0xde, 0xde, 0x39, 0xa7, 0x4e, 0xa2, 0x52,
++ 0x54, 0x2e, 0x2a, 0xe3, 0xbf, 0x51, 0x07, 0xd6, 0x26, 0x97,
++ 0x5d, 0x0f, 0xb0, 0x4a, 0x9a, 0x4a, 0x1b, 0x88, 0x16, 0x32,
++ 0x6e, 0xd2, 0x4c, 0xcb, 0xe7, 0x0a, 0xba, 0x15, 0xc5, 0x42,
++ 0x46, 0x86, 0xb7, 0x77, 0x39, 0xa1, 0x51, 0x31, 0xaf, 0x4a,
++ 0x4c, 0x87, 0x16, 0x53, 0xf4, 0xad, 0x39, 0x47, 0x29, 0x84,
++ 0x0c, 0xb4, 0x66, 0xb3, 0xe5, 0x1d, 0x4f, 0x9f, 0x1a, 0x2a,
++ 0x1f, 0xcb, 0x13, 0x3e, 0xc4, 0x37, 0xa9, 0x80, 0x96, 0x6c,
++ 0xa4, 0x2f, 0x28, 0xc7, 0x47, 0x96, 0xef, 0x6c, 0x91, 0xd3,
++ 0x49, 0xe6, 0x05, 0xc5, 0x59, 0xbe, 0x15, 0xfc, 0x55, 0xd6,
++ 0x6d, 0x59, 0x97, 0xcf, 0x2a, 0x2d, 0x75, 0x94, 0xeb, 0x28,
++ 0x05, 0x7a, 0xc3, 0x0a, 0x0d, 0x79, 0x4f, 0x50, 0x77, 0xb1,
++ 0x61, 0x0f, 0xd4, 0x03, 0x54, 0xc8, 0x11, 0x89, 0x3f, 0x25,
++ 0xa1, 0x16, 0x82, 0x3f, 0xb3, 0x44, 0x49, 0x34, 0xa6, 0xe5,
++ 0xba, 0xa5, 0x42, 0x07, 0x7a, 0x0d, 0x09, 0x84, 0xd2, 0xaf,
++ 0xe2, 0xaf, 0x2e, 0x03, 0x72, 0x6f, 0x55, 0x1f, 0x0a, 0x7d,
++ 0x0e, 0xbf, 0x12, 0x58, 0x09, 0x50, 0xbb, 0xd6, 0xc9, 0x8c,
++ 0x34, 0x07, 0x1c, 0x4e, 0x95, 0x09, 0xcb, 0x10, 0xf2, 0x8c,
++ 0x17, 0x1e, 0x89, 0x16, 0x09, 0x36, 0x6a, 0x09, 0x55, 0x95,
++ 0xf4, 0x51, 0xf9, 0x12, 0x96, 0x2a, 0x59, 0x52, 0x43, 0x16,
++ 0x66, 0x44, 0xd0, 0xf5, 0xe4, 0xf5, 0x88, 0xa0, 0x60, 0xc4,
++ 0x34, 0xf7, 0x0c, 0x71, 0xc2, 0x54, 0xae, 0x51, 0x69, 0x4b,
++ 0x66, 0x0b, 0xe9, 0x0b, 0xc1, 0x5d, 0xca, 0x24, 0x5f, 0xd2,
++ 0x28, 0x00, 0x4a, 0x74, 0x68, 0xf5, 0xa7, 0x3c, 0x2f, 0x1a,
++ 0x64, 0x17, 0x8e, 0x00, 0x7d, 0x11, 0x96, 0xa0, 0xe8, 0x65,
++ 0x3c, 0x7b, 0x36, 0xe3, 0x25, 0x42, 0xc0, 0x7f, 0xf0, 0x7a,
++ 0xeb, 0x73, 0x41, 0x48, 0x8b, 0xf6, 0x65, 0x10, 0x10, 0x58,
++ 0xeb, 0x1f, 0x3e, 0x0a, 0x94, 0x8f, 0xf6, 0x85, 0xcb, 0x6e,
++ 0x5e, 0x21, 0xb3, 0x35, 0x89, 0xf8, 0x08, 0xd5, 0xab, 0xc7,
++ 0x07, 0x6d, 0x8b, 0xb9, 0x84, 0xc2, 0x71, 0xc0, 0xf8, 0x32,
++ 0xea, 0xb2, 0x2c, 0xd4, 0x2f, 0x92, 0xb3, 0xd2, 0xeb, 0x16,
++ 0xf6, 0x39, 0x75, 0x2f, 0x47, 0x39, 0x51, 0xa8, 0x74, 0x08,
++ 0xef, 0x62, 0xfc, 0x7d, 0xe5, 0x24, 0x5d, 0xfd, 0xc6, 0x02,
++ 0xdb, 0x2b, 0xd9, 0x75, 0xe5, 0xb2, 0x4d, 0x98, 0x38, 0x06,
++ 0x1b, 0x80, 0x37, 0x21, 0xc1, 0x5a, 0x27, 0x25, 0xbd, 0xf5,
++ 0x04, 0x55, 0xbe, 0x0e, 0x09, 0xf2, 0x9e, 0xca, 0x07, 0x9a,
++ 0xc4, 0x7a, 0x19, 0x28, 0x48, 0x73, 0x8a, 0x10, 0xfe, 0xa7,
++ 0x49, 0x4b, 0x9d, 0xc0, 0x28, 0xc5, 0x23, 0x62, 0xc3, 0x4b,
++ 0xd3, 0x4e, 0x4d, 0xe4, 0xd1, 0x9d, 0x8e, 0x14, 0x64, 0x22,
++ 0xe7, 0x8b, 0x49, 0xeb, 0xae, 0x72, 0x64, 0x17, 0x1d, 0xd2,
++ 0x8a, 0x9a, 0x94, 0x50, 0x00, 0xdf, 0x27, 0x68, 0x02, 0x6d,
++ 0xe5, 0xfc, 0xd8, 0x45, 0xf4, 0xc3, 0x66, 0x52, 0x5e, 0x51,
++ 0x2c, 0xf4, 0x6a, 0x64, 0x0e, 0xa4, 0x2c, 0x71, 0xf2, 0xb0,
++ 0x24, 0x1f, 0x49, 0x55, 0xe4, 0xa0, 0x26, 0x73, 0x5c, 0x22,
++ 0xa3, 0x52, 0x00, 0x62, 0x07, 0x3b, 0xf8, 0x70, 0xe5, 0x10,
++ 0x7c, 0x74, 0x33, 0x1e, 0x50, 0x79, 0xb8, 0xb7, 0x83, 0x8a,
++ 0x9f, 0xd9, 0x85, 0xd5, 0x0c, 0x84, 0x38, 0x04, 0xd5, 0xb0,
++ 0x04, 0x3c, 0x12, 0xa1, 0x03, 0x4e, 0xb1, 0x64, 0x50, 0xdd,
++ 0xc9, 0x59, 0xa0, 0xb2, 0xb5, 0xec, 0x4b, 0x24, 0x1d, 0xe5,
++ 0x23, 0x99, 0x76, 0x24, 0xd5, 0xd1, 0xd1, 0x9c, 0x38, 0x37,
++ 0x75, 0xfb, 0x82, 0x39, 0xf2, 0xb9, 0x2a, 0xd9, 0x45, 0x5a,
++ 0xc1, 0xdb, 0x92, 0x79, 0xa4, 0xc3, 0xd4, 0x0c, 0xa3, 0x9d,
++ 0x49, 0x5a, 0xf5, 0x6a, 0x8a, 0x39, 0xae, 0x29, 0x92, 0x57,
++ 0x63, 0xbc, 0xe9, 0x6b, 0x96, 0xd2, 0x08, 0x2d, 0xa1, 0x7f,
++ 0x2b, 0x24, 0x21, 0xd3, 0xd7, 0x80, 0x4e, 0x7f, 0xbb, 0x61,
++ 0x88, 0x76, 0x79, 0x8a, 0x01, 0x02, 0x16, 0x46, 0x0b, 0xf1,
++ 0x9d, 0xf3, 0x70, 0x6f, 0x7a, 0x43, 0xd3, 0x96, 0xfe, 0x98,
++ 0x80, 0x31, 0x1b, 0x29, 0x16, 0x3a, 0x0c, 0xc1, 0x07, 0xd2,
++ 0x7a, 0xaa, 0x58, 0xa5, 0x7b, 0x4a, 0xca, 0x35, 0x6a, 0x81,
++ 0xd8, 0x1f, 0x2f, 0xd9, 0x17, 0x56, 0x69, 0x1d, 0x8d, 0x2d,
++ 0xf0, 0xe2, 0x20, 0xba, 0x23, 0x20, 0xa7, 0x32, 0x7c, 0xaf,
++ 0xdb, 0x7c, 0xe9, 0xf5, 0x24, 0xb5, 0x88, 0xb8, 0x28, 0x9a,
++ 0xfe, 0x09, 0x4e, 0xad, 0x6a, 0x13, 0x0f, 0x8e, 0xf0, 0x98,
++ 0x36, 0x77, 0x25, 0xaf, 0x33, 0x00, 0x02, 0x84, 0x59, 0x1d,
++ 0x03, 0xe0, 0xb9, 0xf7, 0x16, 0x56, 0xda, 0x4a, 0xdf, 0xd0,
++ 0x1d, 0x25, 0xdd, 0x8d, 0x71, 0xdf, 0x5d, 0xa9, 0xcd, 0x6f,
++ 0x18, 0x9b, 0xe9, 0x64, 0x88, 0x03, 0x8c, 0xec, 0xac, 0xb2,
++ 0xa3, 0xfe, 0xa9, 0x28, 0x81, 0xe6, 0x32, 0xce, 0x32, 0x42,
++ 0x37, 0x55, 0x9d, 0x45, 0x02, 0x90, 0x79, 0x92, 0xb3, 0xb3,
++ 0x48, 0xf5, 0x1a, 0x67, 0xc7, 0x44, 0x97, 0x3c, 0x3d, 0x51,
++ 0x4b, 0x81, 0xac, 0x6f, 0x79, 0x54, 0x0e, 0x6a, 0xe5, 0x1c,
++ 0x21, 0x73, 0x0c, 0xb5, 0x24, 0x3f, 0xca, 0x87, 0x7f, 0x02,
++ 0x44, 0x2e, 0xf9, 0x73, 0x62, 0x9f, 0x8b, 0xac, 0xe1, 0x44,
++ 0x7f, 0x83, 0xa6, 0xb7, 0xaa, 0x8b, 0x12, 0x7d, 0x95, 0x4f,
++ 0xe9, 0x9d, 0x7c, 0x0a, 0x7d, 0xbb, 0x24, 0xb4, 0x2c, 0x43,
++ 0xfa, 0x8b, 0xb8, 0xd3, 0xac, 0x29, 0x3e, 0xcd, 0x26, 0xe5,
++ 0x6c, 0x91, 0xfb, 0xdb, 0x9f, 0x23, 0xf5, 0x63, 0x11, 0x8e,
++ 0xb9, 0x67, 0x07, 0xa9, 0xb5, 0x34, 0xa0, 0x9f, 0x77, 0x97,
++ 0x2c, 0x51, 0xc5, 0xf2, 0x5f, 0x9c, 0xa8, 0x84, 0x09, 0x38,
++ 0xac, 0xb7, 0x6a, 0x6a, 0xc9, 0x37, 0x04, 0x64, 0x67, 0xca,
++ 0xaf, 0x99, 0x87, 0x88, 0x7b, 0x2b, 0x3c, 0xbc, 0xb3, 0x02,
++ 0xa2, 0x5e, 0xc3, 0x50, 0x48, 0x06, 0x1c, 0x98, 0xf9, 0x98,
++ 0xd2, 0x81, 0x06, 0x34, 0xd0, 0xc1, 0xa7, 0xd1, 0x0a, 0x25,
++ 0x79, 0x4f, 0xb4, 0x02, 0xff, 0x6d, 0xad, 0xc1, 0xcf, 0x32,
++ 0x27, 0xa5, 0xae, 0xd4, 0x89, 0xb2, 0xd4, 0xc1, 0x1d, 0x22,
++ 0x03, 0x00, 0xea, 0x27, 0xd6, 0x72, 0x32, 0xa9, 0xf8, 0xa9,
++ 0xeb, 0x41, 0x06, 0x3e, 0xe6, 0x43, 0xd4, 0x46, 0x33, 0x85,
++ 0x3f, 0x01, 0x82, 0x5a, 0x6a, 0xfa, 0xe2, 0x88, 0x81, 0xbd,
++ 0xf1, 0x56, 0xa0, 0x56, 0xec, 0x92, 0x32, 0x85, 0xff, 0x37,
++ 0x61, 0x2c, 0xd4, 0x8d, 0x08, 0x59, 0x73, 0x14, 0x8c, 0xbd,
++ 0x87, 0x0a, 0x07, 0x2d, 0x20, 0x3b, 0x95, 0x2c, 0x69, 0xe3,
++ 0x49, 0x10, 0xf7, 0xc0, 0x3e, 0x27, 0x59, 0xaa, 0xe4, 0xa0,
++ 0xb3, 0x0c, 0xd9, 0xb9, 0x96, 0xe9, 0x9b, 0xca, 0x75, 0x70,
++ 0x49, 0x29, 0xd7, 0x34, 0x5d, 0x57, 0x21, 0xf8, 0x48, 0x12,
++ 0xc2, 0x61, 0xe0, 0xf1, 0xb8, 0x07, 0x50, 0x39, 0xef, 0xb2,
++ 0x74, 0xfc, 0x9c, 0xeb, 0x6d, 0x9e, 0xe0, 0x22, 0x7f, 0xbd,
++ 0x15, 0x1a, 0x04, 0x16, 0x3f, 0x57, 0x06, 0xa8, 0xed, 0x15,
++ 0x17, 0xfb, 0xeb, 0x40, 0x8a, 0xb0, 0xea, 0x5e, 0x28, 0x1c,
++ 0x6b, 0x3c, 0x2a, 0xd1, 0xc7, 0xc6, 0xe9, 0xd9, 0x41, 0x70,
++ 0x9f, 0xd6, 0xdf, 0x7f, 0xcf, 0x06, 0xaf, 0xeb, 0x5f, 0x25,
++ 0xf9, 0x7f, 0xd8, 0x60, 0xf5, 0x9a, 0x77, 0xa5, 0x39, 0x55,
++ 0xa0, 0x99, 0x22, 0x6a, 0x59, 0x05, 0x9e, 0xfa, 0xc2, 0x2c,
++ 0x06, 0xd2, 0xd2, 0x7f, 0x74, 0x0b, 0xf5, 0x8a, 0xc8, 0x84,
++ 0x28, 0x32, 0x3c, 0x4b, 0x32, 0xf0, 0x92, 0x6b, 0x3e, 0xf3,
++ 0x28, 0xc6, 0xdf, 0xd9, 0xea, 0x74, 0x60, 0x23, 0xc3, 0xc3,
++ 0x9c, 0x40, 0x94, 0x99, 0x12, 0x5d, 0xdb, 0xc9, 0xb4, 0x23,
++ 0x4c, 0x11, 0x58, 0xf4, 0xf8, 0x7e, 0xcb, 0x5f, 0x0c, 0xb5,
++ 0xfe, 0x3a, 0x78, 0x45, 0xde, 0x16, 0x9f, 0x26, 0xad, 0xd7,
++ 0xb1, 0x2b, 0x87, 0x5e, 0x4a, 0x9d, 0xee, 0xd8, 0x79, 0xb3,
++ 0x0c, 0xd5, 0x61, 0xa9, 0xda, 0xf7, 0xc8, 0xa5, 0x77, 0x3d,
++ 0xb6, 0xe9, 0x92, 0x8a, 0x0e, 0xc4, 0x94, 0x17, 0xb9, 0x14,
++ 0x54, 0x73, 0xec, 0xda, 0xca, 0xc9, 0x87, 0x78, 0x15, 0xe7,
++ 0xe7, 0xb4, 0xfd, 0xc6, 0x0c, 0xfa, 0x94, 0xeb, 0xd0, 0x5b,
++ 0xe9, 0x19, 0x62, 0xa6, 0x75, 0x20, 0xd7, 0x86, 0xbe, 0x9e,
++ 0x6e, 0xe4, 0x74, 0x3d, 0x32, 0xdc, 0xc6, 0x9c, 0xf0, 0x85,
++ 0xcf, 0x71, 0x48, 0xc3, 0x56, 0x29, 0xed, 0x9a, 0x16, 0x34,
++ 0x76, 0x59, 0x53, 0x49, 0x63, 0x92, 0x54, 0x55, 0xb1, 0x4a,
++ 0xc3, 0x3c, 0x0c, 0x21, 0x90, 0xd0, 0xf1, 0xdd, 0x26, 0xcd,
++ 0x53, 0x9d, 0xb4, 0xb2, 0xcd, 0xf2, 0xcf, 0x6b, 0x1e, 0x2e,
++ 0xd3, 0xbd, 0x5e, 0x27, 0xb3, 0x60, 0x9b, 0x50, 0xbf, 0xc8,
++ 0x5c, 0xea, 0xc7, 0x64, 0x02, 0x7b, 0x38, 0x1f, 0xcf, 0xb2,
++ 0x24, 0x06, 0x0e, 0x9d, 0x44, 0x90, 0xf2, 0x23, 0x0c, 0xff,
++ 0x4c, 0xa5, 0x13, 0xdb, 0x99, 0x6a, 0xef, 0xc4, 0xe2, 0x2e,
++ 0x60, 0xd9, 0xc1, 0x89, 0x3c, 0x71, 0xb8, 0xc8, 0x05, 0x1f,
++ 0xab, 0x86, 0x1f, 0xc7, 0xf1, 0x2e, 0x4f, 0xae, 0x06, 0xdb,
++ 0x49, 0x4f, 0x8b, 0x69, 0xe3, 0xd7, 0x2e, 0xd8, 0xb5, 0xeb,
++ 0xb4, 0xd0, 0x53, 0x86, 0x8e, 0x96, 0xd2, 0x80, 0x18, 0xda,
++ 0xe9, 0xb2, 0x8b, 0x84, 0x5d, 0xf2, 0x2f, 0x41, 0x00, 0x3b,
++ 0x78, 0xb4, 0xa0, 0xd3, 0x0b, 0x95, 0x90, 0x1c, 0x7f, 0x83,
++ 0x1b, 0xbb, 0x4c, 0xa1, 0x49, 0xc5, 0x34, 0x7e, 0xe9, 0x25,
++ 0x34, 0xa8, 0x51, 0xa5, 0xf6, 0xac, 0xd5, 0xa1, 0xaa, 0x01,
++ 0xdd, 0x64, 0xc6, 0xc4, 0xc4, 0xdb, 0x97, 0x9f, 0x8d, 0x12,
++ 0xb4, 0xda, 0xe4, 0x82, 0x5b, 0x84, 0xe7, 0xf6, 0x28, 0xe3,
++ 0x51, 0x7b, 0xe2, 0x23, 0x54, 0xe6, 0xcc, 0x7d, 0xed, 0xa1,
++ 0xc8, 0x6f, 0x4e, 0xd0, 0x42, 0x44, 0x9d, 0x10, 0x2b, 0x8a,
++ 0x00, 0xde, 0xd5, 0xf8, 0x31, 0x99, 0x38, 0x3a, 0xf8, 0x33,
++ 0xa0, 0x2e, 0x47, 0xfb, 0x6d, 0x0c, 0x41, 0xc7, 0x89, 0xbf,
++ 0x88, 0x16, 0x6f, 0x90, 0x29, 0xb5, 0x47, 0xb5, 0xe1, 0x2d,
++ 0x4b, 0xb8, 0x8e, 0xd4, 0x4c, 0x2e, 0x8f, 0x08, 0x9c, 0x78,
++ 0x5f, 0x80, 0xdb, 0x02, 0x46, 0x85, 0x18, 0xbe, 0x68, 0x04,
++ 0xe7, 0x57, 0xe6, 0x1c, 0xac, 0xec, 0x65, 0x49, 0x5e, 0x51,
++ 0x10, 0x1f, 0x37, 0x4f, 0xdb, 0x28, 0xb7, 0xa7, 0xfe, 0xbe,
++ 0x5c, 0x67, 0x9c, 0xbb, 0x3d, 0x7a, 0xa6, 0x68, 0xa3, 0x24,
++ 0x22, 0x72, 0x34, 0x2d, 0x8a, 0x94, 0x21, 0x90, 0xe1, 0x3f,
++ 0x3a, 0xc8, 0x40, 0x27, 0xd2, 0x31, 0x90, 0x0e, 0x6b, 0xd0,
++ 0xfd, 0xc9, 0x08, 0x5d, 0xe1, 0x6b, 0x0c, 0x5a, 0x7a, 0x50,
++ 0xc2, 0xa8, 0xa3, 0xd2, 0x79, 0xdd, 0xf7, 0x3d, 0xc7, 0xb8,
++ 0xd2, 0x3e, 0xf9, 0x4a, 0x1f, 0xb2, 0x79, 0x84, 0x54, 0x78,
++ 0x95, 0xc9, 0xf1, 0x12, 0x9c, 0x62, 0x5f, 0x1b, 0x81, 0x38,
++ 0x2f, 0x02, 0x06, 0x8b, 0x57, 0x8f, 0x7f, 0xfd, 0x74, 0xa6,
++ 0x4f, 0x5e, 0x2a, 0xa9, 0x0b, 0xca, 0x45, 0x51, 0xd2, 0xb0,
++ 0x0a, 0xd4, 0xbe, 0x96, 0xb1, 0x88, 0xa4, 0xb4, 0x63, 0xef,
++ 0xd2, 0xf3, 0x0c, 0x5b, 0xa6, 0x0d, 0xc3, 0xa0, 0x5f, 0x22,
++ 0x68, 0xb9, 0x11, 0x6a, 0x73, 0xab, 0x4e, 0xac, 0x44, 0x19,
++ 0xe1, 0x8e, 0x5d, 0xac, 0xcb, 0x02, 0x11, 0x00, 0x5a, 0x34,
++ 0x11, 0x6c, 0x2f, 0xdf, 0xc2, 0xda, 0x42, 0x5a, 0x76, 0xab,
++ 0x37, 0x2d, 0x63, 0x12, 0x39, 0x62, 0x25, 0x76, 0x37, 0x4c,
++ 0xc5, 0x81, 0x01, 0xb4, 0x83, 0xbc, 0xe5, 0xc2, 0xbf, 0x9b,
++ 0x26, 0xd3, 0xc4, 0x92, 0xa5, 0x09, 0x5a, 0x47, 0x31, 0xdd,
++ 0xdf, 0xd5, 0x74, 0xa1, 0xbb, 0x8b, 0x7b, 0x4d, 0x7a, 0xe4,
++ 0xbe, 0x3e, 0x6a, 0xc1, 0xaa, 0x94, 0x23, 0xc9, 0x70, 0x33,
++ 0x2d, 0x9e, 0xe3, 0x77, 0x2d, 0x24, 0xd7, 0xb6, 0xe2, 0x13,
++ 0x13, 0x8b, 0x87, 0xf3, 0x02, 0xf3, 0x89, 0x0d, 0xbe, 0x0e,
++ 0x6d, 0xfb, 0xf7, 0xb8, 0x7e, 0xa0, 0x87, 0x0c, 0xfe, 0x8a,
++ 0x61, 0x38, 0x0d, 0xaa, 0xab, 0xe3, 0x9b, 0x0f, 0xdd, 0xbb,
++ 0x61, 0xc3, 0x9b, 0x84, 0xa6, 0xac, 0x94, 0x1b, 0xba, 0x6d,
++ 0xba, 0x4c, 0x6b, 0x1d, 0xd4, 0x67, 0xc9, 0x4b, 0x7b, 0x75,
++ 0xef, 0xfb, 0xc4, 0x53, 0x79, 0x94, 0x0e, 0x6a, 0x4b, 0xc1,
++ 0x8b, 0xe9, 0xe5, 0x41, 0x6f, 0xc5, 0x64, 0x5a, 0xd1, 0xc3,
++ 0xd7, 0x47, 0xa3, 0xfb, 0x0b, 0x3f, 0x5e, 0x7c, 0x75, 0xc4,
++ 0x7e, 0xa9, 0xa3, 0x1d, 0xde, 0x36, 0xae, 0x5a, 0xaf, 0xd1,
++ 0xf3, 0x13, 0x3f, 0xd2, 0xed, 0xd9, 0xb8, 0x16, 0xfc, 0xca,
++ 0x3b, 0x6a, 0xce, 0x1b, 0xc3, 0x8a, 0xd1, 0xff, 0xe5, 0x56,
++ 0x4f, 0x39, 0x6e, 0xd9, 0x37, 0x47, 0x4a, 0x3c, 0xea, 0x70,
++ 0xfc, 0x9e, 0xc3, 0x7f, 0x0e, 0xf5, 0x16, 0xa5, 0x4e, 0x77,
++ 0xce, 0xe3, 0x93, 0x3f, 0x43, 0xfa, 0x7f, 0x21, 0x71, 0x1d,
++ 0x6f, 0x34, 0x1c, 0x05, 0x90, 0x77, 0x7e, 0x76, 0xc8, 0x21,
++ 0x1a, 0x43, 0x46, 0x33, 0xe1, 0x16, 0xd9, 0x7f, 0xa3, 0x6b,
++ 0x22, 0x1a, 0xc4, 0xfd, 0x49, 0x62, 0x74, 0xbb, 0x1f, 0xf8,
++ 0x42, 0x74, 0x4b, 0x2a, 0xaa, 0x79, 0x97, 0xed, 0x5e, 0xb9,
++ 0x09, 0x0d, 0xfb, 0x13, 0x3e, 0x3d, 0xa5, 0x28, 0x0c, 0x7e,
++ 0x6e, 0xb9, 0x69, 0x4a, 0xb9, 0xad, 0xea, 0x6d, 0x9b, 0xf8,
++ 0x16, 0xac, 0x1b, 0xa9, 0xff, 0x68, 0xdb, 0x5e, 0xd3, 0xe7,
++ 0x56, 0x9f, 0x00, 0xc4, 0xaf, 0xa1, 0x8a, 0xad, 0x5c, 0x70,
++ 0x0d, 0x4d, 0x3f, 0x92, 0xfc, 0x7a, 0x8a, 0x82, 0x24, 0x34,
++ 0xb6, 0xf8, 0xff, 0x8a, 0x76, 0xea, 0x22, 0xd0, 0x5f, 0x28,
++ 0x45, 0xd9, 0x58, 0xe4, 0x38, 0x6a, 0xc8, 0xfe, 0x6b, 0x68,
++ 0x27, 0x1b, 0xad, 0xeb, 0x32, 0x4d, 0x41, 0x88, 0xb6, 0xf7,
++ 0x02, 0xac, 0x01, 0x68, 0xda, 0xff, 0xd5, 0xac, 0x9f, 0x64,
++ 0x92, 0xa7, 0x18, 0x25, 0x6a, 0x4e, 0xf5, 0xc2, 0xd9, 0x00,
++ 0x88, 0xb2, 0xe0, 0xb8, 0xf0, 0xd0, 0xc6, 0xdb, 0x33, 0xdc,
++ 0x1e, 0x70, 0x5c, 0x63, 0x2f, 0xf4, 0xaa, 0x79, 0x97, 0xfa,
++ 0xbd, 0x42, 0x7f, 0x59, 0x8d, 0x70, 0x6d, 0x5c, 0x75, 0x39,
++ 0x30, 0x91, 0x17, 0x0a, 0x16, 0x16, 0x3d, 0x8a, 0x23, 0xd0,
++ 0x77, 0x2e, 0xfc, 0xf2, 0x0b, 0x85, 0x52, 0xae, 0x00, 0xfc,
++ 0x04, 0x90, 0xa0, 0x5b, 0x0e, 0x07, 0x77, 0x99, 0xfa, 0x32,
++ 0x94, 0x69, 0xae, 0xf9, 0x21, 0x4c, 0x6a, 0x0f, 0xf4, 0xdb,
++ 0x23, 0x8e, 0x62, 0x64, 0xa0, 0x97, 0x6d, 0x1a, 0xcb, 0x2c,
++ 0x17, 0x1c, 0x7d, 0xf2, 0xdc, 0xb6, 0x32, 0xbe, 0xfe, 0xae,
++ 0xee, 0x5b, 0xf8, 0xe5, 0x27, 0xbe, 0x1e, 0x4f, 0xf4, 0x0b,
++ 0x0f, 0xc6, 0x2b, 0xae, 0xec, 0xc0, 0xbd, 0xaa, 0x74, 0xd7,
++ 0x64, 0x08, 0x53, 0xa7, 0x57, 0x45, 0x7a, 0x7d, 0x81, 0x1a,
++ 0xf2, 0xe4, 0x61, 0x65, 0x97, 0xf5, 0x4d, 0x7c, 0x69, 0x13,
++ 0x6d, 0xea, 0x39, 0xd8, 0x52, 0x86, 0xef, 0xd1, 0x6b, 0xbe,
++ 0xf2, 0x9f, 0x18, 0x91, 0xc8, 0x3b, 0x38, 0xe6, 0x2b, 0xb1,
++ 0xe7, 0xef, 0xfc, 0x4f, 0xd7, 0x92, 0x92, 0x60, 0xdd, 0x76,
++ 0x75, 0xa6, 0x68, 0x32, 0xc5, 0x71, 0xba, 0x1f, 0x6a, 0xcb,
++ 0xe2, 0x80, 0x2e, 0xe1, 0xf0, 0x93, 0xec, 0x13, 0x44, 0xc1,
++ 0x1d, 0xc1, 0x84, 0x70, 0x0a, 0x92, 0x9f, 0xa2, 0xde, 0x42,
++ 0x76, 0x70, 0x8a, 0xf6, 0x7a, 0xcd, 0x5f, 0xb0, 0xac, 0x51,
++ 0x16, 0x56, 0xdc, 0xcf, 0x90, 0xa1, 0x7d, 0xfb, 0x13, 0xba,
++ 0x48, 0x01, 0x15, 0x90, 0x43, 0x45, 0x94, 0xcc, 0x23, 0x7d,
++ 0x85, 0x5f, 0xf7, 0xa4, 0x33, 0x80, 0xab, 0xa0, 0xde, 0x25,
++ 0x94, 0x44, 0xec, 0xac, 0x73, 0xa8, 0xb8, 0xce, 0xc9, 0x63,
++ 0x4b, 0x26, 0x43, 0xde, 0xa7, 0x97, 0x2c, 0x5a, 0xed, 0x34,
++ 0x48, 0x8c, 0xfc, 0x27, 0xec, 0x2b, 0x84, 0x8b, 0xae, 0x7c,
++ 0x4e, 0xe6, 0x51, 0xf8, 0xeb, 0xd6, 0x65, 0x04, 0xd2, 0xda,
++ 0x0b, 0x73, 0x8d, 0x2e, 0xd7, 0xa0, 0x74, 0x02, 0xf2, 0xb4,
++ 0xf4, 0x0a, 0x09, 0x06, 0xe3, 0xaa, 0xc9, 0x12, 0x64, 0xda,
++ 0xb4, 0x5c, 0x35, 0xbb, 0x4a, 0xb2, 0xb6, 0x66, 0xb8, 0x65,
++ 0x92, 0x75, 0x29, 0xdc, 0xc5, 0xe4, 0xa3, 0x2d, 0x54, 0xa3,
++ 0x33, 0xc9, 0x70, 0x9b, 0x12, 0x1e, 0x8a, 0x2e, 0x25, 0x8e,
++ 0xb6, 0x56, 0xfd, 0xf6, 0x64, 0xae, 0x2e, 0x64, 0xe2, 0x63,
++ 0x79, 0x7f, 0x3a, 0xe9, 0x4d, 0xdc, 0xf6, 0x4d, 0x29, 0x19,
++ 0xec, 0xcc, 0xc8, 0x0d, 0x96, 0x69, 0x7c, 0x7d, 0x96, 0x9f,
++ 0x34, 0xea, 0xa3, 0xd5, 0x93, 0xaa, 0x5b, 0xaa, 0xe0, 0x98,
++ 0x1f, 0xae, 0x7a, 0xf0, 0xc3, 0x33, 0x99, 0xd6, 0x85, 0x2d,
++ 0x3d, 0x3f, 0xaa, 0xd3, 0xb9, 0x41, 0x5a, 0x1f, 0xfc, 0x5d,
++ 0x90, 0x91, 0x59, 0xb6, 0x3e, 0xf9, 0xbe, 0x7f, 0xf8, 0x36,
++ 0xf1, 0x0d, 0x0d, 0xa5, 0x8b, 0x38, 0x0c, 0x77, 0x7c, 0x7e,
++ 0x8d, 0x86, 0x42, 0x3f, 0x95, 0x9e, 0x62, 0xed, 0x77, 0x30,
++ 0xbb, 0xfe, 0xba, 0x67, 0x62, 0xc5, 0xfc, 0x83, 0x76, 0xbc,
++ 0x6a, 0x52, 0xba, 0x3e, 0x33, 0x89, 0x96, 0xf8, 0xbd, 0x2e,
++ 0x67, 0x04, 0xef, 0xdf, 0xcb, 0x40, 0x9e, 0x0a, 0xb3, 0xf6,
++ 0x93, 0xd8, 0xd1, 0x15, 0x78, 0xbe, 0xdb, 0xc7, 0x31, 0x4f,
++ 0xdc, 0xea, 0x40, 0x58, 0x6b, 0xd6, 0xf1, 0xc7, 0xb4, 0x9d,
++ 0xf8, 0x0b, 0x2f, 0xf0, 0x4b, 0xb9, 0x81, 0xe4, 0x6a, 0xdf,
++ 0x09, 0x4b, 0x6e, 0x6d, 0x82, 0xb7, 0x4b, 0xea, 0xf2, 0x2d,
++ 0x89, 0xac, 0x22, 0xfa, 0x7c, 0x5e, 0xe4, 0x3a, 0xef, 0xae,
++ 0x24, 0x71, 0xca, 0x56, 0xcb, 0x2a, 0x6a, 0xd9, 0x12, 0x80,
++ 0x25, 0x79, 0xe9, 0xbd, 0x9f, 0xa1, 0x36, 0xfb, 0xf6, 0xb2,
++ 0x57, 0x36, 0xa8, 0x7e, 0x5e, 0x17, 0xb9, 0x1a, 0x60, 0x8d,
++ 0xea, 0xb3, 0x96, 0xb5, 0x52, 0xd9, 0xb3, 0xb2, 0xd5, 0x56,
++ 0x7c, 0x86, 0x60, 0x50, 0xca, 0x7b, 0x6f, 0x56, 0xd0, 0xf2,
++ 0x1a, 0xf8, 0xeb, 0x92, 0x91, 0x67, 0x52, 0x97, 0x4f, 0xda,
++ 0x6d, 0x09, 0x9f, 0x06, 0x7d, 0x25, 0xd4, 0x44, 0xbc, 0x2d,
++ 0x52, 0xc1, 0x84, 0x8b, 0xa3, 0xa8, 0x89, 0xdd, 0x54, 0xf6,
++ 0xe1, 0xc8, 0x28, 0x4f, 0xe1, 0x70, 0x5f, 0xb6, 0x9b, 0x5e,
++ 0x7c, 0x8f, 0xb8, 0x84, 0x1a, 0xdc, 0xb3, 0x06, 0xc0, 0xd2,
++ 0x9d, 0x56, 0x2b, 0xad, 0xaa, 0x55, 0x7d, 0x92, 0x9e, 0x59,
++ 0xe5, 0xfe, 0x31, 0x0c, 0x37, 0x6b, 0xc7, 0x53, 0x8a, 0x9f,
++ 0xfd, 0xc6, 0xeb, 0x51, 0xc2, 0x4a, 0xab, 0x68, 0x77, 0x82,
++ 0x97, 0x07, 0x61, 0x31, 0x54, 0xda, 0xa2, 0x92, 0x39, 0xcb,
++ 0xf7, 0xa6, 0x74, 0x95, 0xce, 0xf9, 0x97, 0x87, 0xee, 0x5a,
++ 0x2b, 0xee, 0xd2, 0x35, 0x45, 0x77, 0x68, 0xe4, 0x64, 0x91,
++ 0x88, 0x49, 0x51, 0x1a, 0xaf, 0xaa, 0xc7, 0xc7, 0x69, 0x17,
++ 0x20, 0x09, 0x3d, 0x59, 0xaf, 0x75, 0xea, 0x40, 0x1f, 0x80,
++ 0xb5, 0x9f, 0x1c, 0x1f, 0xdf, 0x6f, 0xe5, 0xfa, 0xbc, 0x27,
++ 0x62, 0xb4, 0xf1, 0x82, 0xb2, 0xa6, 0x17, 0x71, 0x46, 0xf3,
++ 0x70, 0x2b, 0xca, 0x40, 0xd7, 0x32, 0x93, 0xba, 0xff, 0x6a,
++ 0xef, 0x37, 0x01, 0x74, 0x98, 0x93, 0x0b, 0x06, 0xd8, 0xa1,
++ 0x13, 0x30, 0x9d, 0x22, 0x34, 0x73, 0x34, 0x95, 0x3f, 0xc0,
++ 0xad, 0x59, 0x11, 0x73, 0xbd, 0x99, 0x5a, 0x25, 0x5a, 0x5c,
++ 0xa3, 0x54, 0x0c, 0x8c, 0x5f, 0x20, 0x80, 0x79, 0x41, 0x52,
++ 0x49, 0x3e, 0x8f, 0x58, 0x44, 0x98, 0xc3, 0x29, 0xc3, 0x78,
++ 0xd1, 0xdf, 0x3d, 0x2e, 0x8b, 0xf5, 0xc9, 0x8a, 0x81, 0x58,
++ 0xf5, 0xd7, 0xa1, 0xac, 0xc1, 0xbc, 0xba, 0x85, 0x4e, 0x4d,
++ 0x85, 0xd5, 0x8b, 0xd2, 0x3d, 0xa7, 0x72, 0x75, 0xab, 0x26,
++ 0xe7, 0x42, 0xf3, 0xb3, 0xfe, 0xfe, 0x45, 0x65, 0xbc, 0xed,
++ 0x5f, 0x59, 0x47, 0x57, 0x08, 0x40, 0x10, 0xcb, 0x68, 0xc2,
++ 0x9f, 0x10, 0x6f, 0x4e, 0xd9, 0x62, 0x1a, 0x12, 0x3b, 0xf4,
++ 0x4b, 0x14, 0xf8, 0x94, 0xb9, 0x1d, 0xbc, 0x57, 0xfb, 0xb4,
++ 0x94, 0x95, 0xf5, 0x30, 0x64, 0xaa, 0x18, 0xb7, 0xfe, 0x0d,
++ 0xfd, 0xcd, 0x08, 0x72, 0x08, 0xd8, 0xc9, 0xbd, 0x05, 0xbc,
++ 0xb0, 0x76, 0x70, 0xb1, 0x4c, 0x32, 0xbc, 0x6e, 0x1b, 0xc9,
++ 0x11, 0xed, 0xf6, 0xa4, 0x5e, 0x72, 0xc0, 0x11, 0x65, 0xfd,
++ 0x51, 0xb0, 0xb5, 0x27, 0x46, 0x53, 0x71, 0xba, 0xca, 0x69,
++ 0x23, 0x4d, 0x08, 0x1b, 0x37, 0x10, 0x9a, 0x69, 0x31, 0x3c,
++ 0x91, 0x37, 0xbb, 0xa5, 0x2b, 0xbb, 0xdd, 0xd0, 0xd0, 0x1a,
++ 0xcb, 0x2c, 0x67, 0x23, 0xbd, 0xfa, 0xd1, 0xb3, 0x27, 0x7d,
++ 0x84, 0x66, 0xca, 0x68, 0x9b, 0xce, 0x17, 0xda, 0x37, 0xcc,
++ 0xdd, 0xdc, 0xd2, 0x2a, 0x03, 0x85, 0x37, 0x83, 0xae, 0x89,
++ 0x93, 0x8a, 0x1d, 0x16, 0x34, 0xba, 0xd1, 0x79, 0x34, 0x3e,
++ 0xed, 0xe3, 0xe9, 0xb0, 0x21, 0x16, 0xee, 0x07, 0x03, 0x53,
++ 0x45, 0x19, 0x56, 0x06, 0x7a, 0x47, 0x05, 0x03, 0x77, 0x3b,
++ 0x7a, 0x74, 0x07, 0x73, 0xc6, 0x1d, 0x4e, 0x64, 0xef, 0xae,
++ 0x33, 0x54, 0x09, 0x87, 0x73, 0x2a, 0x38, 0xba, 0x22, 0x3b,
++ 0xb4, 0x0b, 0x2c, 0x45, 0x80, 0xf9, 0xe1, 0x15, 0xb6, 0xa6,
++ 0xe7, 0xb9, 0x39, 0xf7, 0xeb, 0x18, 0xba, 0xb7, 0xf4, 0xcb,
++ 0x30, 0x60, 0xc7, 0xb0, 0x7f, 0x1a, 0x45, 0x87, 0x40, 0x85,
++ 0x93, 0xe5, 0x13, 0x59, 0x84, 0xd3, 0xf4, 0x1b, 0x6f, 0xa0,
++ 0x56, 0xfe, 0xf6, 0xae, 0x17, 0xc1, 0x47, 0x98, 0x5a, 0x3d,
++ 0x4d, 0x2e, 0x88, 0x19, 0x62, 0xae, 0x5f, 0x1e, 0x8c, 0xdf,
++ 0x9f, 0x27, 0x7a, 0xef, 0x1a, 0x69, 0x8f, 0x0c, 0xdb, 0x22,
++ 0xd0, 0xde, 0x46, 0xc6, 0x69, 0xee, 0x2f, 0x34, 0x7f, 0x74,
++ 0xdc, 0x6b, 0xf1, 0xfa, 0x5e, 0x7e, 0x7d, 0xa3, 0xd8, 0x39,
++ 0x06, 0x59, 0x65, 0xa4, 0x1c, 0xb4, 0x23, 0xc6, 0xaa, 0xdd,
++ 0x76, 0xf6, 0xbf, 0xa2, 0xc1, 0x1a, 0x26, 0x7a, 0x97, 0x11,
++ 0x06, 0x22, 0x0f, 0x2e, 0xbf, 0xee, 0x78, 0xe1, 0xba, 0xf8,
++ 0x53, 0x91, 0x64, 0x12, 0xdd, 0x12, 0x7b, 0xe5, 0x73, 0x70,
++ 0x3b, 0x45, 0x05, 0x48, 0x39, 0x8d, 0xae, 0xf2, 0xe2, 0xfd,
++ 0x6e, 0x06, 0x20, 0x1f, 0x85, 0x5f, 0xee, 0xe9, 0xfd, 0xca,
++ 0x8c, 0x52, 0x2a, 0x76, 0x45, 0xdb, 0xb2, 0xf3, 0x97, 0x7e,
++ 0x74, 0xb1, 0x61, 0x8d, 0x04, 0xe3, 0xcb, 0x48, 0xfb, 0xca,
++ 0x93, 0xe6, 0x93, 0xec, 0xd0, 0xfd, 0x96, 0xd3, 0xf4, 0xde,
++ 0x7e, 0x19, 0xcd, 0x66, 0xa3, 0xe9, 0xe2, 0xab, 0xd8, 0xff,
++ 0xed, 0xd0, 0x5e, 0x8d, 0xaf, 0x47, 0x8f, 0xf3, 0xb1, 0x5d,
++ 0x7c, 0x1c, 0xdb, 0x87, 0xd9, 0xfd, 0x87, 0xd9, 0xe8, 0x93,
++ 0x9d, 0xcc, 0xc3, 0x4a, 0xec, 0x8d, 0xbd, 0x9d, 0x8d, 0xc7,
++ 0xf6, 0xfe, 0xd6, 0x5e, 0x7f, 0x1c, 0xcd, 0x3e, 0x8c, 0x07,
++ 0x7c, 0x6e, 0x36, 0xe6, 0x13, 0x31, 0x2d, 0x2e, 0xc8, 0x46,
++ 0x04, 0xf0, 0xd4, 0xbd, 0xfc, 0x3c, 0xfe, 0x63, 0x31, 0x9e,
++ 0x2e, 0xec, 0xc3, 0x78, 0xf6, 0x69, 0xb2, 0x58, 0x80, 0xda,
++ 0xd5, 0x57, 0x3b, 0x7a, 0x78, 0x00, 0xf1, 0xd1, 0xd5, 0xdd,
++ 0xd8, 0xde, 0x8d, 0xbe, 0x40, 0x9b, 0xe3, 0x3f, 0xae, 0xc7,
++ 0x0f, 0x0b, 0xfb, 0xe5, 0xe3, 0x78, 0x6a, 0xee, 0x49, 0xfe,
++ 0xcb, 0x04, 0xfc, 0xcc, 0x17, 0x23, 0xbe, 0x30, 0x99, 0xda,
++ 0x2f, 0xb3, 0xc9, 0x62, 0x32, 0xfd, 0x20, 0x04, 0xb9, 0x85,
++ 0x3b, 0x9b, 0x7c, 0xf8, 0xb8, 0xb0, 0x1f, 0xef, 0xef, 0x6e,
++ 0xc6, 0x33, 0x59, 0xd5, 0xfd, 0x19, 0xa7, 0xcb, 0x8b, 0xf6,
++ 0x61, 0x34, 0x5b, 0x4c, 0xc6, 0x73, 0x03, 0x3e, 0x3e, 0x4f,
++ 0x6e, 0xfa, 0x42, 0xbd, 0x19, 0xcd, 0xc1, 0xf6, 0x1b, 0xfb,
++ 0x65, 0xb2, 0xf8, 0x78, 0xff, 0xb8, 0x68, 0x99, 0xa7, 0x70,
++ 0xa3, 0xe9, 0x57, 0xfb, 0xcf, 0xc9, 0xf4, 0x66, 0x60, 0xc7,
++ 0x13, 0x21, 0x34, 0xfe, 0xe3, 0x61, 0x36, 0x9e, 0x43, 0x7e,
++ 0x03, 0xda, 0x93, 0x4f, 0xe0, 0x78, 0x8c, 0x2f, 0x27, 0xd3,
++ 0xeb, 0xbb, 0xc7, 0x1b, 0xd9, 0x02, 0xbe, 0x02, 0x85, 0xe9,
++ 0xfd, 0x02, 0x7a, 0x82, 0x64, 0xe0, 0x73, 0x71, 0x2f, 0xaa,
++ 0x09, 0xcf, 0x06, 0xea, 0x60, 0x06, 0xf4, 0xcd, 0xa7, 0xf1,
++ 0x0c, 0xfa, 0x9b, 0x2e, 0x46, 0x57, 0x93, 0xbb, 0x09, 0x8e,
++ 0xe4, 0xda, 0xf0, 0xed, 0x64, 0x31, 0xc5, 0x11, 0xb2, 0x5c,
++ 0x3c, 0x52, 0xce, 0xaf, 0x1f, 0xef, 0x46, 0x10, 0xe2, 0x71,
++ 0xf6, 0x70, 0x3f, 0x1f, 0x73, 0x7c, 0x43, 0x15, 0x82, 0x08,
++ 0x14, 0x3e, 0x9b, 0xcc, 0xff, 0x69, 0x47, 0x73, 0xe3, 0x15,
++ 0xfb, 0xfb, 0xe3, 0xa8, 0x25, 0x04, 0xed, 0x82, 0xc6, 0xa7,
++ 0xd1, 0xf4, 0x5a, 0x0c, 0x75, 0x64, 0x48, 0x8a, 0x6b, 0xbf,
++ 0xde, 0x3f, 0xb2, 0x6a, 0x40, 0xee, 0xbb, 0x1b, 0x3e, 0x60,
++ 0xc2, 0x03, 0x54, 0xd4, 0xd8, 0xde, 0x8c, 0x6f, 0xc7, 0xd7,
++ 0x8b, 0xc9, 0x67, 0x98, 0x17, 0x4f, 0xe2, 0x98, 0xf9, 0xe3,
++ 0xa7, 0xb1, 0xd7, 0xf7, 0x7c, 0x21, 0x0a, 0xba, 0xbb, 0xb3,
++ 0xd3, 0xf1, 0x35, 0xf8, 0x1d, 0xcd, 0xbe, 0xda, 0xf9, 0x78,
++ 0xf6, 0x79, 0x72, 0x4d, 0x3d, 0x98, 0xd9, 0xf8, 0x61, 0x34,
++ 0x81, 0xfa, 0xb9, 0x20, 0x3d, 0x9b, 0x91, 0xca, 0xfd, 0x54,
++ 0x73, 0xcb, 0xbb, 0x21, 0x8d, 0x07, 0x2f, 0x19, 0x7f, 0xa6,
++ 0x0f, 0x3c, 0x4e, 0xef, 0x28, 0xed, 0x6c, 0xfc, 0xfb, 0x23,
++ 0xe4, 0x39, 0xe3, 0x09, 0xa4, 0x31, 0xfa, 0x00, 0x6f, 0xa3,
++ 0x32, 0x23, 0xbb, 0x9b, 0x2f, 0x13, 0x1c, 0x4e, 0x0b, 0x1d,
++ 0x1b, 0x7f, 0x20, 0xaf, 0xe0, 0x8b, 0xce, 0xf8, 0x5f, 0xe1,
++ 0x46, 0xf7, 0xf6, 0xd3, 0xe8, 0xab, 0x6e, 0x65, 0x7f, 0xf5,
++ 0xee, 0x01, 0x36, 0xdb, 0xb5, 0xed, 0xbe, 0x57, 0xc0, 0x29,
++ 0x3a, 0xef, 0x1c, 0x5d, 0xdd, 0x53, 0x07, 0x57, 0xe0, 0x67,
++ 0x22, 0x6c, 0x81, 0x11, 0x2a, 0x84, 0x26, 0xba, 0x19, 0x7d,
++ 0x1a, 0x7d, 0x18, 0xcf, 0x07, 0xa6, 0x75, 0x02, 0x39, 0xda,
++ 0x6f, 0x92, 0x0f, 0xec, 0xfc, 0x61, 0x7c, 0x3d, 0xe1, 0x5f,
++ 0xf0, 0x3d, 0x5c, 0x0f, 0xb6, 0xbe, 0x53, 0xad, 0x20, 0x8a,
++ 0x7e, 0x7f, 0xa4, 0x15, 0xf1, 0x81, 0x27, 0x62, 0x47, 0x30,
++ 0x27, 0x45, 0xa3, 0x1f, 0x7a, 0x93, 0x31, 0x06, 0xe9, 0x6b,
++ 0xd3, 0xe0, 0x23, 0x38, 0xfb, 0x38, 0x2e, 0x2f, 0xba, 0xb3,
++ 0x8f, 0xfc, 0x8f, 0x7e, 0x71, 0x77, 0x3f, 0xa7, 0xb3, 0xe1,
++ 0x90, 0xc5, 0xc8, 0x0a, 0xc7, 0xf8, 0xf3, 0x6a, 0xcc, 0xa7,
++ 0x67, 0xe3, 0x29, 0xf4, 0x25, 0xe1, 0x34, 0xba, 0xbe, 0x7e,
++ 0x9c, 0x21, 0xb4, 0xf8, 0x04, 0xdf, 0x00, 0x37, 0xf3, 0x47,
++ 0x04, 0xdb, 0x64, 0x2a, 0x46, 0x31, 0x94, 0x57, 0xa2, 0x79,
++ 0x32, 0xbb, 0x09, 0xf1, 0x24, 0x7a, 0xb6, 0xb7, 0xa3, 0xc9,
++ 0xdd, 0xe3, 0xec, 0xc4, 0xc7, 0x70, 0xf2, 0x3d, 0x54, 0x48,
++ 0x92, 0xe2, 0x6b, 0xad, 0x41, 0x82, 0x93, 0xcd, 0x2f, 0x07,
++ 0xe2, 0x03, 0x76, 0x72, 0x8b, 0xa3, 0xae, 0x3f, 0x7a, 0xeb,
++ 0xd9, 0x5e, 0xd4, 0x7e, 0xb5, 0x1f, 0x61, 0x8a, 0xab, 0x31,
++ 0x1e, 0x1b, 0xdd, 0x7c, 0x9e, 0x30, 0xf3, 0xe8, 0x39, 0x06,
++ 0xb1, 0x30, 0x9f, 0x78, 0x9d, 0xdc, 0x7b, 0x0a, 0x5e, 0x8f,
++ 0xed, 0x4e, 0x3f, 0xa2, 0x44, 0x9f, 0x3f, 0xb3, 0xbd, 0x6f,
++ 0xfe, 0x17, 0x84, 0xf3, 0x1b, 0xef, 0x12, 0x3b, 0x00, 0x00,
++
++};
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -110,6 +110,7 @@
+ CFG_CMD_MMC | \
+ CFG_CMD_FAT | \
+ CFG_CMD_EXT2 | \
++ CFG_CMD_LICENSE | \
+ 0)
+ /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+ #include <cmd_confdefs.h>
+Index: u-boot/include/configs/hxd8.h
+===================================================================
+--- u-boot.orig/include/configs/hxd8.h
++++ u-boot/include/configs/hxd8.h
+@@ -110,6 +110,7 @@
+ CFG_CMD_MMC | \
+ CFG_CMD_FAT | \
+ CFG_CMD_EXT2 | \
++ CFG_CMD_LICENSE | \
+ 0)
+ /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+ #include <cmd_confdefs.h>
+Index: u-boot/include/configs/smdk2440.h
+===================================================================
+--- u-boot.orig/include/configs/smdk2440.h
++++ u-boot/include/configs/smdk2440.h
+@@ -110,6 +110,7 @@
+ CFG_CMD_PORTIO | \
+ CFG_CMD_REGINFO | \
+ CFG_CMD_SAVES | \
++ CFG_CMD_LICENSE | \
+ CFG_CMD_USB)
+
+ /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch
new file mode 100644
index 0000000000..db3cee6e99
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch
@@ -0,0 +1,4121 @@
+This adds a more recent version of mach-types.h to u-boot
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/include/asm-arm/mach-types.h
+===================================================================
+--- u-boot.orig/include/asm-arm/mach-types.h
++++ u-boot/include/asm-arm/mach-types.h
+@@ -424,7 +424,7 @@
+ #define MACH_TYPE_MPORT3S 411
+ #define MACH_TYPE_RA_ALPHA 412
+ #define MACH_TYPE_XCEP 413
+-#define MACH_TYPE_ARCOM_MERCURY 414
++#define MACH_TYPE_ARCOM_VULCAN 414
+ #define MACH_TYPE_STARGATE 415
+ #define MACH_TYPE_ARMADILLOJ 416
+ #define MACH_TYPE_ELROY_JACK 417
+@@ -457,7 +457,7 @@
+ #define MACH_TYPE_XM250 444
+ #define MACH_TYPE_T6TC1XB 445
+ #define MACH_TYPE_ESS710 446
+-#define MACH_TYPE_MX3ADS 447
++#define MACH_TYPE_MX31ADS 447
+ #define MACH_TYPE_HIMALAYA 448
+ #define MACH_TYPE_BOLFENK 449
+ #define MACH_TYPE_AT91RM9200KR 450
+@@ -736,7 +736,311 @@
+ #define MACH_TYPE_LN2410SBC 725
+ #define MACH_TYPE_CB3RUFC 726
+ #define MACH_TYPE_MP2USB 727
+-#define MACH_TYPE_PDNB3 1002
++#define MACH_TYPE_NTNP425C 728
++#define MACH_TYPE_COLIBRI 729
++#define MACH_TYPE_PCM7220 730
++#define MACH_TYPE_GATEWAY7001 731
++#define MACH_TYPE_PCM027 732
++#define MACH_TYPE_CMPXA 733
++#define MACH_TYPE_ANUBIS 734
++#define MACH_TYPE_ITE8152 735
++#define MACH_TYPE_LPC3XXX 736
++#define MACH_TYPE_PUPPETEER 737
++#define MACH_TYPE_MACH_VADATECH 738
++#define MACH_TYPE_E570 739
++#define MACH_TYPE_X50 740
++#define MACH_TYPE_RECON 741
++#define MACH_TYPE_XBOARDGP8 742
++#define MACH_TYPE_FPIC2 743
++#define MACH_TYPE_AKITA 744
++#define MACH_TYPE_A81 745
++#define MACH_TYPE_SVM_SC25X 746
++#define MACH_TYPE_VADATECH020 747
++#define MACH_TYPE_TLI 748
++#define MACH_TYPE_EDB9315LC 749
++#define MACH_TYPE_PASSEC 750
++#define MACH_TYPE_DS_TIGER 751
++#define MACH_TYPE_E310 752
++#define MACH_TYPE_E330 753
++#define MACH_TYPE_RT3000 754
++#define MACH_TYPE_NOKIA770 755
++#define MACH_TYPE_PNX0106 756
++#define MACH_TYPE_HX21XX 757
++#define MACH_TYPE_FARADAY 758
++#define MACH_TYPE_SBC9312 759
++#define MACH_TYPE_BATMAN 760
++#define MACH_TYPE_JPD201 761
++#define MACH_TYPE_MIPSA 762
++#define MACH_TYPE_KACOM 763
++#define MACH_TYPE_SWARCOCPU 764
++#define MACH_TYPE_SWARCODSL 765
++#define MACH_TYPE_BLUEANGEL 766
++#define MACH_TYPE_HAIRYGRAMA 767
++#define MACH_TYPE_BANFF 768
++#define MACH_TYPE_CARMEVA 769
++#define MACH_TYPE_SAM255 770
++#define MACH_TYPE_PPM10 771
++#define MACH_TYPE_EDB9315A 772
++#define MACH_TYPE_SUNSET 773
++#define MACH_TYPE_STARGATE2 774
++#define MACH_TYPE_INTELMOTE2 775
++#define MACH_TYPE_TRIZEPS4 776
++#define MACH_TYPE_MAINSTONE2 777
++#define MACH_TYPE_EZ_IXP42X 778
++#define MACH_TYPE_TAPWAVE_ZODIAC 779
++#define MACH_TYPE_UNIVERSALMETER 780
++#define MACH_TYPE_HICOARM9 781
++#define MACH_TYPE_PNX4008 782
++#define MACH_TYPE_KWS6000 783
++#define MACH_TYPE_PORTUX920T 784
++#define MACH_TYPE_EZ_X5 785
++#define MACH_TYPE_OMAP_RUDOLPH 786
++#define MACH_TYPE_CPUAT91 787
++#define MACH_TYPE_REA9200 788
++#define MACH_TYPE_ACTS_PUNE_SA1110 789
++#define MACH_TYPE_IXP425 790
++#define MACH_TYPE_ARGONPLUSODYSSEY 791
++#define MACH_TYPE_PERCH 792
++#define MACH_TYPE_EIS05R1 793
++#define MACH_TYPE_PEPPERPAD 794
++#define MACH_TYPE_SB3010 795
++#define MACH_TYPE_RM9200 796
++#define MACH_TYPE_DMA03 797
++#define MACH_TYPE_ROAD_S101 798
++#define MACH_TYPE_IQ_NEXTGEN_A 799
++#define MACH_TYPE_IQ_NEXTGEN_B 800
++#define MACH_TYPE_IQ_NEXTGEN_C 801
++#define MACH_TYPE_IQ_NEXTGEN_D 802
++#define MACH_TYPE_IQ_NEXTGEN_E 803
++#define MACH_TYPE_MALLOW_AT91 804
++#define MACH_TYPE_CYBERTRACKER_I 805
++#define MACH_TYPE_GESBC931X 806
++#define MACH_TYPE_CENTIPAD 807
++#define MACH_TYPE_ARMSOC 808
++#define MACH_TYPE_SE4200 809
++#define MACH_TYPE_EMS197A 810
++#define MACH_TYPE_MICRO9 811
++#define MACH_TYPE_MICRO9L 812
++#define MACH_TYPE_UC5471DSP 813
++#define MACH_TYPE_SJ5471ENG 814
++#define MACH_TYPE_CMPXA26X 815
++#define MACH_TYPE_NC 816
++#define MACH_TYPE_OMAP_PALMTE 817
++#define MACH_TYPE_AJAX52X 818
++#define MACH_TYPE_SIRIUSTAR 819
++#define MACH_TYPE_IODATA_HDLG 820
++#define MACH_TYPE_AT91RM9200UTL 821
++#define MACH_TYPE_BIOSAFE 822
++#define MACH_TYPE_MP1000 823
++#define MACH_TYPE_PARSY 824
++#define MACH_TYPE_CCXP 825
++#define MACH_TYPE_OMAP_GSAMPLE 826
++#define MACH_TYPE_REALVIEW_EB 827
++#define MACH_TYPE_SAMOA 828
++#define MACH_TYPE_T3XSCALE 829
++#define MACH_TYPE_I878 830
++#define MACH_TYPE_BORZOI 831
++#define MACH_TYPE_GECKO 832
++#define MACH_TYPE_DS101 833
++#define MACH_TYPE_OMAP_PALMTT2 834
++#define MACH_TYPE_XSCALE_PALMLD 835
++#define MACH_TYPE_CC9C 836
++#define MACH_TYPE_SBC1670 837
++#define MACH_TYPE_IXDP28X5 838
++#define MACH_TYPE_OMAP_PALMTT 839
++#define MACH_TYPE_ML696K 840
++#define MACH_TYPE_ARCOM_ZEUS 841
++#define MACH_TYPE_OSIRIS 842
++#define MACH_TYPE_MAESTRO 843
++#define MACH_TYPE_TUNGE2 844
++#define MACH_TYPE_IXBBM 845
++#define MACH_TYPE_MX27 846
++#define MACH_TYPE_AX8004 847
++#define MACH_TYPE_AT91SAM9261EK 848
++#define MACH_TYPE_LOFT 849
++#define MACH_TYPE_MAGPIE 850
++#define MACH_TYPE_MX21 851
++#define MACH_TYPE_MB87M3400 852
++#define MACH_TYPE_MGUARD_DELTA 853
++#define MACH_TYPE_DAVINCI_DVDP 854
++#define MACH_TYPE_HTCUNIVERSAL 855
++#define MACH_TYPE_TPAD 856
++#define MACH_TYPE_ROVERP3 857
++#define MACH_TYPE_JORNADA928 858
++#define MACH_TYPE_MV88FXX81 859
++#define MACH_TYPE_STMP36XX 860
++#define MACH_TYPE_SXNI79524 861
++#define MACH_TYPE_AMS_DELTA 862
++#define MACH_TYPE_URANIUM 863
++#define MACH_TYPE_UCON 864
++#define MACH_TYPE_NAS100D 865
++#define MACH_TYPE_L083_1000 866
++#define MACH_TYPE_EZX 867
++#define MACH_TYPE_PNX5220 868
++#define MACH_TYPE_BUTTE 869
++#define MACH_TYPE_SRM2 870
++#define MACH_TYPE_DSBR 871
++#define MACH_TYPE_CRYSTALBALL 872
++#define MACH_TYPE_TINYPXA27X 873
++#define MACH_TYPE_HERBIE 874
++#define MACH_TYPE_MAGICIAN 875
++#define MACH_TYPE_CM4002 876
++#define MACH_TYPE_B4 877
++#define MACH_TYPE_MAUI 878
++#define MACH_TYPE_CYBERTRACKER_G 879
++#define MACH_TYPE_NXDKN 880
++#define MACH_TYPE_MIO8390 881
++#define MACH_TYPE_OMI_BOARD 882
++#define MACH_TYPE_MX21CIV 883
++#define MACH_TYPE_MAHI_CDAC 884
++#define MACH_TYPE_XSCALE_PALMTX 885
++#define MACH_TYPE_S3C2413 887
++#define MACH_TYPE_SAMSYS_EP0 888
++#define MACH_TYPE_WG302V1 889
++#define MACH_TYPE_WG302V2 890
++#define MACH_TYPE_EB42X 891
++#define MACH_TYPE_IQ331ES 892
++#define MACH_TYPE_COSYDSP 893
++#define MACH_TYPE_UPLAT7D 894
++#define MACH_TYPE_PTDAVINCI 895
++#define MACH_TYPE_MBUS 896
++#define MACH_TYPE_NADIA2VB 897
++#define MACH_TYPE_R1000 898
++#define MACH_TYPE_HW90250 899
++#define MACH_TYPE_OMAP_2430SDP 900
++#define MACH_TYPE_DAVINCI_EVM 901
++#define MACH_TYPE_OMAP_TORNADO 902
++#define MACH_TYPE_OLOCREEK 903
++#define MACH_TYPE_PALMZ72 904
++#define MACH_TYPE_NXDB500 905
++#define MACH_TYPE_APF9328 906
++#define MACH_TYPE_OMAP_WIPOQ 907
++#define MACH_TYPE_OMAP_TWIP 908
++#define MACH_TYPE_XSCALE_PALMTREO650 909
++#define MACH_TYPE_ACUMEN 910
++#define MACH_TYPE_XP100 911
++#define MACH_TYPE_FS2410 912
++#define MACH_TYPE_PXA270_CERF 913
++#define MACH_TYPE_SQ2FTLPALM 914
++#define MACH_TYPE_BSEMSERVER 915
++#define MACH_TYPE_NETCLIENT 916
++#define MACH_TYPE_XSCALE_PALMTT5 917
++#define MACH_TYPE_OMAP_PALMTC 918
++#define MACH_TYPE_OMAP_APOLLON 919
++#define MACH_TYPE_ARGONLVEVB 920
++#define MACH_TYPE_REA_2D 921
++#define MACH_TYPE_TI3E524 922
++#define MACH_TYPE_ATEB9200 923
++#define MACH_TYPE_AUCKLAND 924
++#define MACH_TYPE_AK3320M 925
++#define MACH_TYPE_DURAMAX 926
++#define MACH_TYPE_N35 927
++#define MACH_TYPE_PRONGHORN 928
++#define MACH_TYPE_FUNDY 929
++#define MACH_TYPE_LOGICPD_PXA270 930
++#define MACH_TYPE_CPU777 931
++#define MACH_TYPE_SIMICON9201 932
++#define MACH_TYPE_LEAP2_HPM 933
++#define MACH_TYPE_CM922TXA10 934
++#define MACH_TYPE_PXA 935
++#define MACH_TYPE_SANDGATE2 936
++#define MACH_TYPE_SANDGATE2G 937
++#define MACH_TYPE_SANDGATE2P 938
++#define MACH_TYPE_FRED_JACK 939
++#define MACH_TYPE_TTG_COLOR1 940
++#define MACH_TYPE_NXEB500HMI 941
++#define MACH_TYPE_NETDCU8 942
++#define MACH_TYPE_ML675050_CPU_BOA 943
++#define MACH_TYPE_NG_FVX538 944
++#define MACH_TYPE_NG_FVS338 945
++#define MACH_TYPE_PNX4103 946
++#define MACH_TYPE_HESDB 947
++#define MACH_TYPE_XSILO 948
++#define MACH_TYPE_ESPRESSO 949
++#define MACH_TYPE_EMLC 950
++#define MACH_TYPE_SISTERON 951
++#define MACH_TYPE_RX1950 952
++#define MACH_TYPE_TSC_VENUS 953
++#define MACH_TYPE_DS101J 954
++#define MACH_TYPE_MXC30030ADS 955
++#define MACH_TYPE_FUJITSU_WIMAXSOC 956
++#define MACH_TYPE_DUALPCMODEM 957
++#define MACH_TYPE_GESBC9312 958
++#define MACH_TYPE_HTCAPACHE 959
++#define MACH_TYPE_IXDP435 960
++#define MACH_TYPE_CATPROVT100 961
++#define MACH_TYPE_PICOTUX1XX 962
++#define MACH_TYPE_PICOTUX2XX 963
++#define MACH_TYPE_DSMG600 964
++#define MACH_TYPE_EMPC2 965
++#define MACH_TYPE_VENTURA 966
++#define MACH_TYPE_PHIDGET_SBC 967
++#define MACH_TYPE_IJ3K 968
++#define MACH_TYPE_PISGAH 969
++#define MACH_TYPE_OMAP_FSAMPLE 970
++#define MACH_TYPE_SG720 971
++#define MACH_TYPE_REDFOX 972
++#define MACH_TYPE_MYSH_EP9315_1 973
++#define MACH_TYPE_TPF106 974
++#define MACH_TYPE_AT91RM9200KG 975
++#define MACH_TYPE_SLEDB 976
++#define MACH_TYPE_ONTRACK 977
++#define MACH_TYPE_PM1200 978
++#define MACH_TYPE_ESS24XXX 979
++#define MACH_TYPE_COREMP7 980
++#define MACH_TYPE_NEXCODER_6446 981
++#define MACH_TYPE_STVC8380 982
++#define MACH_TYPE_TEKLYNX 983
++#define MACH_TYPE_CARBONADO 984
++#define MACH_TYPE_SYSMOS_MP730 985
++#define MACH_TYPE_SNAPPER_CL15 986
++#define MACH_TYPE_PGIGIM 987
++#define MACH_TYPE_PTX9160P2 988
++#define MACH_TYPE_DCORE1 989
++#define MACH_TYPE_VICTORPXA 990
++#define MACH_TYPE_MX2DTB 991
++#define MACH_TYPE_PXA_IREX_ER0100 992
++#define MACH_TYPE_OMAP_PALMZ71 993
++#define MACH_TYPE_BARTEC_DEG 994
++#define MACH_TYPE_HW50251 995
++#define MACH_TYPE_IBOX 996
++#define MACH_TYPE_ATLASLH7A404 997
++#define MACH_TYPE_PT2026 998
++#define MACH_TYPE_HTCALPINE 999
++#define MACH_TYPE_BARTEC_VTU 1000
++#define MACH_TYPE_VCOREII 1001
++#define MACH_TYPE_PDNB3 1002
++#define MACH_TYPE_HTCBEETLES 1003
++#define MACH_TYPE_S3C6400 1004
++#define MACH_TYPE_S3C2443 1005
++#define MACH_TYPE_OMAP_LDK 1006
++#define MACH_TYPE_SMDK2460 1007
++#define MACH_TYPE_SMDK2440 1008
++#define MACH_TYPE_SMDK2412 1009
++#define MACH_TYPE_WEBBOX 1010
++#define MACH_TYPE_CWWNDP 1011
++#define MACH_TYPE_DRAGON 1012
++#define MACH_TYPE_OPENDO_CPU_BOARD 1013
++#define MACH_TYPE_CCM2200 1014
++#define MACH_TYPE_ETWARM 1015
++#define MACH_TYPE_M93030 1016
++#define MACH_TYPE_CC7U 1017
++#define MACH_TYPE_MTT_RANGER 1018
++#define MACH_TYPE_NEXUS 1019
++#define MACH_TYPE_DESMAN 1020
++#define MACH_TYPE_BKDE303 1021
++#define MACH_TYPE_SMDK2413 1022
++#define MACH_TYPE_AML_M7200 1023
++#define MACH_TYPE_AML_M5900 1024
++#define MACH_TYPE_SG640 1025
++#define MACH_TYPE_EDG79524 1026
++#define MACH_TYPE_AI2410 1027
++#define MACH_TYPE_IXP465 1028
++#define MACH_TYPE_BALLOON3 1029
++#define MACH_TYPE_QT2410 1108
++#define MACH_TYPE_NEO1973_GTA01 1182
++#define MACH_TYPE_HXD8 1303
++#define MACH_TYPE_NEO1973_GTA02 1304
+
+ #ifdef CONFIG_ARCH_EBSA110
+ # ifdef machine_arch_type
+@@ -3541,9 +3845,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_RAMSES
+ # endif
+-# define machine_is_ramses() (machine_arch_type == MACH_TYPE_RAMSES)
++# define machine_is_mnci() (machine_arch_type == MACH_TYPE_RAMSES)
+ #else
+-# define machine_is_ramses() (0)
++# define machine_is_mnci() (0)
+ #endif
+
+ #ifdef CONFIG_ARCH_S28X
+@@ -4501,9 +4805,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_M825XX
+ # endif
+-# define machine_is_m825xx() (machine_arch_type == MACH_TYPE_M825XX)
++# define machine_is_comcerto() (machine_arch_type == MACH_TYPE_M825XX)
+ #else
+-# define machine_is_m825xx() (0)
++# define machine_is_comcerto() (0)
+ #endif
+
+ #ifdef CONFIG_SA1100_M7100
+@@ -5658,16 +5962,16 @@
+ # define machine_is_xcep() (0)
+ #endif
+
+-#ifdef CONFIG_MACH_ARCOM_MERCURY
++#ifdef CONFIG_MACH_ARCOM_VULCAN
+ # ifdef machine_arch_type
+ # undef machine_arch_type
+ # define machine_arch_type __machine_arch_type
+ # else
+-# define machine_arch_type MACH_TYPE_ARCOM_MERCURY
++# define machine_arch_type MACH_TYPE_ARCOM_VULCAN
+ # endif
+-# define machine_is_arcom_mercury() (machine_arch_type == MACH_TYPE_ARCOM_MERCURY)
++# define machine_is_arcom_vulcan() (machine_arch_type == MACH_TYPE_ARCOM_VULCAN)
+ #else
+-# define machine_is_arcom_mercury() (0)
++# define machine_is_arcom_vulcan() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_STARGATE
+@@ -6054,16 +6358,16 @@
+ # define machine_is_ess710() (0)
+ #endif
+
+-#ifdef CONFIG_MACH_MX3ADS
++#ifdef CONFIG_MACH_MX31ADS
+ # ifdef machine_arch_type
+ # undef machine_arch_type
+ # define machine_arch_type __machine_arch_type
+ # else
+-# define machine_arch_type MACH_TYPE_MX3ADS
++# define machine_arch_type MACH_TYPE_MX31ADS
+ # endif
+-# define machine_is_mx3ads() (machine_arch_type == MACH_TYPE_MX3ADS)
++# define machine_is_mx31ads() (machine_arch_type == MACH_TYPE_MX31ADS)
+ #else
+-# define machine_is_mx3ads() (0)
++# define machine_is_mx31ads() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_HIMALAYA
+@@ -7333,9 +7637,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_ARGONPLUSEVB
+ # endif
+-# define machine_is_argonplusevb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
++# define machine_is_i30030evb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
+ #else
+-# define machine_is_argonplusevb() (0)
++# define machine_is_i30030evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_SCMA11EVB
+@@ -7345,9 +7649,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_SCMA11EVB
+ # endif
+-# define machine_is_scma11evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
++# define machine_is_mxc27530evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
+ #else
+-# define machine_is_scma11evb() (0)
++# define machine_is_mxc27530evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_SMDK2800
+@@ -8305,9 +8609,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_SCMA11BB
+ # endif
+-# define machine_is_scma11bb() (machine_arch_type == MACH_TYPE_SCMA11BB)
++# define machine_is_mxc27530ads() (machine_arch_type == MACH_TYPE_SCMA11BB)
+ #else
+-# define machine_is_scma11bb() (0)
++# define machine_is_mxc27530ads() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_TRIZEPS3
+@@ -9193,9 +9497,9 @@
+ # else
+ # define machine_arch_type MACH_TYPE_ZEUSEVB
+ # endif
+-# define machine_is_zeusevb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
++# define machine_is_mxc91131evb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
+ #else
+-# define machine_is_zeusevb() (0)
++# define machine_is_mxc91131evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_P700
+@@ -9402,6 +9706,3667 @@
+ # define machine_is_mp2usb() (0)
+ #endif
+
++#ifdef CONFIG_MACH_NTNP425C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NTNP425C
++# endif
++# define machine_is_ntnp425c() (machine_arch_type == MACH_TYPE_NTNP425C)
++#else
++# define machine_is_ntnp425c() (0)
++#endif
++
++#ifdef CONFIG_MACH_COLIBRI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COLIBRI
++# endif
++# define machine_is_colibri() (machine_arch_type == MACH_TYPE_COLIBRI)
++#else
++# define machine_is_colibri() (0)
++#endif
++
++#ifdef CONFIG_MACH_PCM7220
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PCM7220
++# endif
++# define machine_is_pcm7220() (machine_arch_type == MACH_TYPE_PCM7220)
++#else
++# define machine_is_pcm7220() (0)
++#endif
++
++#ifdef CONFIG_MACH_GATEWAY7001
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GATEWAY7001
++# endif
++# define machine_is_gateway7001() (machine_arch_type == MACH_TYPE_GATEWAY7001)
++#else
++# define machine_is_gateway7001() (0)
++#endif
++
++#ifdef CONFIG_MACH_PCM027
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PCM027
++# endif
++# define machine_is_pcm027() (machine_arch_type == MACH_TYPE_PCM027)
++#else
++# define machine_is_pcm027() (0)
++#endif
++
++#ifdef CONFIG_MACH_CMPXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CMPXA
++# endif
++# define machine_is_cmpxa() (machine_arch_type == MACH_TYPE_CMPXA)
++#else
++# define machine_is_cmpxa() (0)
++#endif
++
++#ifdef CONFIG_MACH_ANUBIS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ANUBIS
++# endif
++# define machine_is_anubis() (machine_arch_type == MACH_TYPE_ANUBIS)
++#else
++# define machine_is_anubis() (0)
++#endif
++
++#ifdef CONFIG_MACH_ITE8152
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ITE8152
++# endif
++# define machine_is_ite8152() (machine_arch_type == MACH_TYPE_ITE8152)
++#else
++# define machine_is_ite8152() (0)
++#endif
++
++#ifdef CONFIG_MACH_LPC3XXX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LPC3XXX
++# endif
++# define machine_is_lpc3xxx() (machine_arch_type == MACH_TYPE_LPC3XXX)
++#else
++# define machine_is_lpc3xxx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PUPPETEER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PUPPETEER
++# endif
++# define machine_is_puppeteer() (machine_arch_type == MACH_TYPE_PUPPETEER)
++#else
++# define machine_is_puppeteer() (0)
++#endif
++
++#ifdef CONFIG_MACH_MACH_VADATECH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MACH_VADATECH
++# endif
++# define machine_is_vt001() (machine_arch_type == MACH_TYPE_MACH_VADATECH)
++#else
++# define machine_is_vt001() (0)
++#endif
++
++#ifdef CONFIG_MACH_E570
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E570
++# endif
++# define machine_is_e570() (machine_arch_type == MACH_TYPE_E570)
++#else
++# define machine_is_e570() (0)
++#endif
++
++#ifdef CONFIG_MACH_X50
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_X50
++# endif
++# define machine_is_x50() (machine_arch_type == MACH_TYPE_X50)
++#else
++# define machine_is_x50() (0)
++#endif
++
++#ifdef CONFIG_MACH_RECON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RECON
++# endif
++# define machine_is_recon() (machine_arch_type == MACH_TYPE_RECON)
++#else
++# define machine_is_recon() (0)
++#endif
++
++#ifdef CONFIG_MACH_XBOARDGP8
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XBOARDGP8
++# endif
++# define machine_is_xboardgp8() (machine_arch_type == MACH_TYPE_XBOARDGP8)
++#else
++# define machine_is_xboardgp8() (0)
++#endif
++
++#ifdef CONFIG_MACH_FPIC2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FPIC2
++# endif
++# define machine_is_fpic2() (machine_arch_type == MACH_TYPE_FPIC2)
++#else
++# define machine_is_fpic2() (0)
++#endif
++
++#ifdef CONFIG_MACH_AKITA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AKITA
++# endif
++# define machine_is_akita() (machine_arch_type == MACH_TYPE_AKITA)
++#else
++# define machine_is_akita() (0)
++#endif
++
++#ifdef CONFIG_MACH_A81
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_A81
++# endif
++# define machine_is_a81() (machine_arch_type == MACH_TYPE_A81)
++#else
++# define machine_is_a81() (0)
++#endif
++
++#ifdef CONFIG_MACH_SVM_SC25X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SVM_SC25X
++# endif
++# define machine_is_svm_sc25x() (machine_arch_type == MACH_TYPE_SVM_SC25X)
++#else
++# define machine_is_svm_sc25x() (0)
++#endif
++
++#ifdef CONFIG_MACH_VADATECH020
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VADATECH020
++# endif
++# define machine_is_vt020() (machine_arch_type == MACH_TYPE_VADATECH020)
++#else
++# define machine_is_vt020() (0)
++#endif
++
++#ifdef CONFIG_MACH_TLI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TLI
++# endif
++# define machine_is_tli() (machine_arch_type == MACH_TYPE_TLI)
++#else
++# define machine_is_tli() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDB9315LC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDB9315LC
++# endif
++# define machine_is_edb9315lc() (machine_arch_type == MACH_TYPE_EDB9315LC)
++#else
++# define machine_is_edb9315lc() (0)
++#endif
++
++#ifdef CONFIG_MACH_PASSEC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PASSEC
++# endif
++# define machine_is_passec() (machine_arch_type == MACH_TYPE_PASSEC)
++#else
++# define machine_is_passec() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS_TIGER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS_TIGER
++# endif
++# define machine_is_ds_tiger() (machine_arch_type == MACH_TYPE_DS_TIGER)
++#else
++# define machine_is_ds_tiger() (0)
++#endif
++
++#ifdef CONFIG_MACH_E310
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E310
++# endif
++# define machine_is_e310() (machine_arch_type == MACH_TYPE_E310)
++#else
++# define machine_is_e310() (0)
++#endif
++
++#ifdef CONFIG_MACH_E330
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E330
++# endif
++# define machine_is_e330() (machine_arch_type == MACH_TYPE_E330)
++#else
++# define machine_is_e330() (0)
++#endif
++
++#ifdef CONFIG_MACH_RT3000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RT3000
++# endif
++# define machine_is_rt3000() (machine_arch_type == MACH_TYPE_RT3000)
++#else
++# define machine_is_rt3000() (0)
++#endif
++
++#ifdef CONFIG_MACH_NOKIA770
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NOKIA770
++# endif
++# define machine_is_nokia770() (machine_arch_type == MACH_TYPE_NOKIA770)
++#else
++# define machine_is_nokia770() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX0106
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX0106
++# endif
++# define machine_is_pnx0106() (machine_arch_type == MACH_TYPE_PNX0106)
++#else
++# define machine_is_pnx0106() (0)
++#endif
++
++#ifdef CONFIG_MACH_HX21XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HX21XX
++# endif
++# define machine_is_hx21xx() (machine_arch_type == MACH_TYPE_HX21XX)
++#else
++# define machine_is_hx21xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_FARADAY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FARADAY
++# endif
++# define machine_is_faraday() (machine_arch_type == MACH_TYPE_FARADAY)
++#else
++# define machine_is_faraday() (0)
++#endif
++
++#ifdef CONFIG_MACH_SBC9312
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SBC9312
++# endif
++# define machine_is_sbc9312() (machine_arch_type == MACH_TYPE_SBC9312)
++#else
++# define machine_is_sbc9312() (0)
++#endif
++
++#ifdef CONFIG_MACH_BATMAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BATMAN
++# endif
++# define machine_is_batman() (machine_arch_type == MACH_TYPE_BATMAN)
++#else
++# define machine_is_batman() (0)
++#endif
++
++#ifdef CONFIG_MACH_JPD201
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_JPD201
++# endif
++# define machine_is_jpd201() (machine_arch_type == MACH_TYPE_JPD201)
++#else
++# define machine_is_jpd201() (0)
++#endif
++
++#ifdef CONFIG_MACH_MIPSA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MIPSA
++# endif
++# define machine_is_mipsa() (machine_arch_type == MACH_TYPE_MIPSA)
++#else
++# define machine_is_mipsa() (0)
++#endif
++
++#ifdef CONFIG_MACH_KACOM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_KACOM
++# endif
++# define machine_is_kacom() (machine_arch_type == MACH_TYPE_KACOM)
++#else
++# define machine_is_kacom() (0)
++#endif
++
++#ifdef CONFIG_MACH_SWARCOCPU
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SWARCOCPU
++# endif
++# define machine_is_swarcocpu() (machine_arch_type == MACH_TYPE_SWARCOCPU)
++#else
++# define machine_is_swarcocpu() (0)
++#endif
++
++#ifdef CONFIG_MACH_SWARCODSL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SWARCODSL
++# endif
++# define machine_is_swarcodsl() (machine_arch_type == MACH_TYPE_SWARCODSL)
++#else
++# define machine_is_swarcodsl() (0)
++#endif
++
++#ifdef CONFIG_MACH_BLUEANGEL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BLUEANGEL
++# endif
++# define machine_is_blueangel() (machine_arch_type == MACH_TYPE_BLUEANGEL)
++#else
++# define machine_is_blueangel() (0)
++#endif
++
++#ifdef CONFIG_MACH_HAIRYGRAMA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HAIRYGRAMA
++# endif
++# define machine_is_hairygrama() (machine_arch_type == MACH_TYPE_HAIRYGRAMA)
++#else
++# define machine_is_hairygrama() (0)
++#endif
++
++#ifdef CONFIG_MACH_BANFF
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BANFF
++# endif
++# define machine_is_banff() (machine_arch_type == MACH_TYPE_BANFF)
++#else
++# define machine_is_banff() (0)
++#endif
++
++#ifdef CONFIG_MACH_CARMEVA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CARMEVA
++# endif
++# define machine_is_carmeva() (machine_arch_type == MACH_TYPE_CARMEVA)
++#else
++# define machine_is_carmeva() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAM255
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAM255
++# endif
++# define machine_is_sam255() (machine_arch_type == MACH_TYPE_SAM255)
++#else
++# define machine_is_sam255() (0)
++#endif
++
++#ifdef CONFIG_MACH_PPM10
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PPM10
++# endif
++# define machine_is_ppm10() (machine_arch_type == MACH_TYPE_PPM10)
++#else
++# define machine_is_ppm10() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDB9315A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDB9315A
++# endif
++# define machine_is_edb9315a() (machine_arch_type == MACH_TYPE_EDB9315A)
++#else
++# define machine_is_edb9315a() (0)
++#endif
++
++#ifdef CONFIG_MACH_SUNSET
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SUNSET
++# endif
++# define machine_is_sunset() (machine_arch_type == MACH_TYPE_SUNSET)
++#else
++# define machine_is_sunset() (0)
++#endif
++
++#ifdef CONFIG_MACH_STARGATE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STARGATE2
++# endif
++# define machine_is_stargate2() (machine_arch_type == MACH_TYPE_STARGATE2)
++#else
++# define machine_is_stargate2() (0)
++#endif
++
++#ifdef CONFIG_MACH_INTELMOTE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_INTELMOTE2
++# endif
++# define machine_is_intelmote2() (machine_arch_type == MACH_TYPE_INTELMOTE2)
++#else
++# define machine_is_intelmote2() (0)
++#endif
++
++#ifdef CONFIG_MACH_TRIZEPS4
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TRIZEPS4
++# endif
++# define machine_is_trizeps4() (machine_arch_type == MACH_TYPE_TRIZEPS4)
++#else
++# define machine_is_trizeps4() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAINSTONE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAINSTONE2
++# endif
++# define machine_is_mainstone2() (machine_arch_type == MACH_TYPE_MAINSTONE2)
++#else
++# define machine_is_mainstone2() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZ_IXP42X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZ_IXP42X
++# endif
++# define machine_is_ez_ixp42x() (machine_arch_type == MACH_TYPE_EZ_IXP42X)
++#else
++# define machine_is_ez_ixp42x() (0)
++#endif
++
++#ifdef CONFIG_MACH_TAPWAVE_ZODIAC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TAPWAVE_ZODIAC
++# endif
++# define machine_is_tapwave_zodiac() (machine_arch_type == MACH_TYPE_TAPWAVE_ZODIAC)
++#else
++# define machine_is_tapwave_zodiac() (0)
++#endif
++
++#ifdef CONFIG_MACH_UNIVERSALMETER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UNIVERSALMETER
++# endif
++# define machine_is_universalmeter() (machine_arch_type == MACH_TYPE_UNIVERSALMETER)
++#else
++# define machine_is_universalmeter() (0)
++#endif
++
++#ifdef CONFIG_MACH_HICOARM9
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HICOARM9
++# endif
++# define machine_is_hicoarm9() (machine_arch_type == MACH_TYPE_HICOARM9)
++#else
++# define machine_is_hicoarm9() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX4008
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX4008
++# endif
++# define machine_is_pnx4008() (machine_arch_type == MACH_TYPE_PNX4008)
++#else
++# define machine_is_pnx4008() (0)
++#endif
++
++#ifdef CONFIG_MACH_KWS6000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_KWS6000
++# endif
++# define machine_is_kws6000() (machine_arch_type == MACH_TYPE_KWS6000)
++#else
++# define machine_is_kws6000() (0)
++#endif
++
++#ifdef CONFIG_MACH_PORTUX920T
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PORTUX920T
++# endif
++# define machine_is_portux920t() (machine_arch_type == MACH_TYPE_PORTUX920T)
++#else
++# define machine_is_portux920t() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZ_X5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZ_X5
++# endif
++# define machine_is_ez_x5() (machine_arch_type == MACH_TYPE_EZ_X5)
++#else
++# define machine_is_ez_x5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_RUDOLPH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_RUDOLPH
++# endif
++# define machine_is_omap_rudolph() (machine_arch_type == MACH_TYPE_OMAP_RUDOLPH)
++#else
++# define machine_is_omap_rudolph() (0)
++#endif
++
++#ifdef CONFIG_MACH_CPUAT91
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CPUAT91
++# endif
++# define machine_is_cpuat91() (machine_arch_type == MACH_TYPE_CPUAT91)
++#else
++# define machine_is_cpuat91() (0)
++#endif
++
++#ifdef CONFIG_MACH_REA9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REA9200
++# endif
++# define machine_is_rea9200() (machine_arch_type == MACH_TYPE_REA9200)
++#else
++# define machine_is_rea9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ACTS_PUNE_SA1110
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ACTS_PUNE_SA1110
++# endif
++# define machine_is_acts_pune_sa1110() (machine_arch_type == MACH_TYPE_ACTS_PUNE_SA1110)
++#else
++# define machine_is_acts_pune_sa1110() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXP425
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXP425
++# endif
++# define machine_is_ixp425() (machine_arch_type == MACH_TYPE_IXP425)
++#else
++# define machine_is_ixp425() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARGONPLUSODYSSEY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARGONPLUSODYSSEY
++# endif
++# define machine_is_i30030ads() (machine_arch_type == MACH_TYPE_ARGONPLUSODYSSEY)
++#else
++# define machine_is_i30030ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_PERCH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PERCH
++# endif
++# define machine_is_perch() (machine_arch_type == MACH_TYPE_PERCH)
++#else
++# define machine_is_perch() (0)
++#endif
++
++#ifdef CONFIG_MACH_EIS05R1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EIS05R1
++# endif
++# define machine_is_eis05r1() (machine_arch_type == MACH_TYPE_EIS05R1)
++#else
++# define machine_is_eis05r1() (0)
++#endif
++
++#ifdef CONFIG_MACH_PEPPERPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PEPPERPAD
++# endif
++# define machine_is_pepperpad() (machine_arch_type == MACH_TYPE_PEPPERPAD)
++#else
++# define machine_is_pepperpad() (0)
++#endif
++
++#ifdef CONFIG_MACH_SB3010
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SB3010
++# endif
++# define machine_is_sb3010() (machine_arch_type == MACH_TYPE_SB3010)
++#else
++# define machine_is_sb3010() (0)
++#endif
++
++#ifdef CONFIG_MACH_RM9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RM9200
++# endif
++# define machine_is_rm9200() (machine_arch_type == MACH_TYPE_RM9200)
++#else
++# define machine_is_rm9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_DMA03
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DMA03
++# endif
++# define machine_is_dma03() (machine_arch_type == MACH_TYPE_DMA03)
++#else
++# define machine_is_dma03() (0)
++#endif
++
++#ifdef CONFIG_MACH_ROAD_S101
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ROAD_S101
++# endif
++# define machine_is_road_s101() (machine_arch_type == MACH_TYPE_ROAD_S101)
++#else
++# define machine_is_road_s101() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_A
++# endif
++# define machine_is_iq_nextgen_a() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_A)
++#else
++# define machine_is_iq_nextgen_a() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_B
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_B
++# endif
++# define machine_is_iq_nextgen_b() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_B)
++#else
++# define machine_is_iq_nextgen_b() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_C
++# endif
++# define machine_is_iq_nextgen_c() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_C)
++#else
++# define machine_is_iq_nextgen_c() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_D
++# endif
++# define machine_is_iq_nextgen_d() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_D)
++#else
++# define machine_is_iq_nextgen_d() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_E
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_E
++# endif
++# define machine_is_iq_nextgen_e() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_E)
++#else
++# define machine_is_iq_nextgen_e() (0)
++#endif
++
++#ifdef CONFIG_MACH_MALLOW_AT91
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MALLOW_AT91
++# endif
++# define machine_is_mallow_at91() (machine_arch_type == MACH_TYPE_MALLOW_AT91)
++#else
++# define machine_is_mallow_at91() (0)
++#endif
++
++#ifdef CONFIG_MACH_CYBERTRACKER_I
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CYBERTRACKER_I
++# endif
++# define machine_is_cybertracker_i() (machine_arch_type == MACH_TYPE_CYBERTRACKER_I)
++#else
++# define machine_is_cybertracker_i() (0)
++#endif
++
++#ifdef CONFIG_MACH_GESBC931X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GESBC931X
++# endif
++# define machine_is_gesbc931x() (machine_arch_type == MACH_TYPE_GESBC931X)
++#else
++# define machine_is_gesbc931x() (0)
++#endif
++
++#ifdef CONFIG_MACH_CENTIPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CENTIPAD
++# endif
++# define machine_is_centipad() (machine_arch_type == MACH_TYPE_CENTIPAD)
++#else
++# define machine_is_centipad() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARMSOC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARMSOC
++# endif
++# define machine_is_armsoc() (machine_arch_type == MACH_TYPE_ARMSOC)
++#else
++# define machine_is_armsoc() (0)
++#endif
++
++#ifdef CONFIG_MACH_SE4200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SE4200
++# endif
++# define machine_is_se4200() (machine_arch_type == MACH_TYPE_SE4200)
++#else
++# define machine_is_se4200() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMS197A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMS197A
++# endif
++# define machine_is_ems197a() (machine_arch_type == MACH_TYPE_EMS197A)
++#else
++# define machine_is_ems197a() (0)
++#endif
++
++#ifdef CONFIG_MACH_MICRO9
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MICRO9
++# endif
++# define machine_is_micro9() (machine_arch_type == MACH_TYPE_MICRO9)
++#else
++# define machine_is_micro9() (0)
++#endif
++
++#ifdef CONFIG_MACH_MICRO9L
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MICRO9L
++# endif
++# define machine_is_micro9l() (machine_arch_type == MACH_TYPE_MICRO9L)
++#else
++# define machine_is_micro9l() (0)
++#endif
++
++#ifdef CONFIG_MACH_UC5471DSP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UC5471DSP
++# endif
++# define machine_is_uc5471dsp() (machine_arch_type == MACH_TYPE_UC5471DSP)
++#else
++# define machine_is_uc5471dsp() (0)
++#endif
++
++#ifdef CONFIG_MACH_SJ5471ENG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SJ5471ENG
++# endif
++# define machine_is_sj5471eng() (machine_arch_type == MACH_TYPE_SJ5471ENG)
++#else
++# define machine_is_sj5471eng() (0)
++#endif
++
++#ifdef CONFIG_MACH_CMPXA26X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CMPXA26X
++# endif
++# define machine_is_none() (machine_arch_type == MACH_TYPE_CMPXA26X)
++#else
++# define machine_is_none() (0)
++#endif
++
++#ifdef CONFIG_MACH_NC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NC
++# endif
++# define machine_is_nc1() (machine_arch_type == MACH_TYPE_NC)
++#else
++# define machine_is_nc1() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTE
++# endif
++# define machine_is_omap_palmte() (machine_arch_type == MACH_TYPE_OMAP_PALMTE)
++#else
++# define machine_is_omap_palmte() (0)
++#endif
++
++#ifdef CONFIG_MACH_AJAX52X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AJAX52X
++# endif
++# define machine_is_ajax52x() (machine_arch_type == MACH_TYPE_AJAX52X)
++#else
++# define machine_is_ajax52x() (0)
++#endif
++
++#ifdef CONFIG_MACH_SIRIUSTAR
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SIRIUSTAR
++# endif
++# define machine_is_siriustar() (machine_arch_type == MACH_TYPE_SIRIUSTAR)
++#else
++# define machine_is_siriustar() (0)
++#endif
++
++#ifdef CONFIG_MACH_IODATA_HDLG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IODATA_HDLG
++# endif
++# define machine_is_iodata_hdlg() (machine_arch_type == MACH_TYPE_IODATA_HDLG)
++#else
++# define machine_is_iodata_hdlg() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91RM9200UTL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91RM9200UTL
++# endif
++# define machine_is_at91rm9200utl() (machine_arch_type == MACH_TYPE_AT91RM9200UTL)
++#else
++# define machine_is_at91rm9200utl() (0)
++#endif
++
++#ifdef CONFIG_MACH_BIOSAFE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BIOSAFE
++# endif
++# define machine_is_biosafe() (machine_arch_type == MACH_TYPE_BIOSAFE)
++#else
++# define machine_is_biosafe() (0)
++#endif
++
++#ifdef CONFIG_MACH_MP1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MP1000
++# endif
++# define machine_is_mp1000() (machine_arch_type == MACH_TYPE_MP1000)
++#else
++# define machine_is_mp1000() (0)
++#endif
++
++#ifdef CONFIG_MACH_PARSY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PARSY
++# endif
++# define machine_is_parsy() (machine_arch_type == MACH_TYPE_PARSY)
++#else
++# define machine_is_parsy() (0)
++#endif
++
++#ifdef CONFIG_MACH_CCXP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CCXP
++# endif
++# define machine_is_ccxp270() (machine_arch_type == MACH_TYPE_CCXP)
++#else
++# define machine_is_ccxp270() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_GSAMPLE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_GSAMPLE
++# endif
++# define machine_is_omap_gsample() (machine_arch_type == MACH_TYPE_OMAP_GSAMPLE)
++#else
++# define machine_is_omap_gsample() (0)
++#endif
++
++#ifdef CONFIG_MACH_REALVIEW_EB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REALVIEW_EB
++# endif
++# define machine_is_realview_eb() (machine_arch_type == MACH_TYPE_REALVIEW_EB)
++#else
++# define machine_is_realview_eb() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAMOA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAMOA
++# endif
++# define machine_is_samoa() (machine_arch_type == MACH_TYPE_SAMOA)
++#else
++# define machine_is_samoa() (0)
++#endif
++
++#ifdef CONFIG_MACH_T3XSCALE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_T3XSCALE
++# endif
++# define machine_is_t3xscale() (machine_arch_type == MACH_TYPE_T3XSCALE)
++#else
++# define machine_is_t3xscale() (0)
++#endif
++
++#ifdef CONFIG_MACH_I878
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_I878
++# endif
++# define machine_is_i878() (machine_arch_type == MACH_TYPE_I878)
++#else
++# define machine_is_i878() (0)
++#endif
++
++#ifdef CONFIG_MACH_BORZOI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BORZOI
++# endif
++# define machine_is_borzoi() (machine_arch_type == MACH_TYPE_BORZOI)
++#else
++# define machine_is_borzoi() (0)
++#endif
++
++#ifdef CONFIG_MACH_GECKO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GECKO
++# endif
++# define machine_is_gecko() (machine_arch_type == MACH_TYPE_GECKO)
++#else
++# define machine_is_gecko() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS101
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS101
++# endif
++# define machine_is_ds101() (machine_arch_type == MACH_TYPE_DS101)
++#else
++# define machine_is_ds101() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTT2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTT2
++# endif
++# define machine_is_omap_palmtt2() (machine_arch_type == MACH_TYPE_OMAP_PALMTT2)
++#else
++# define machine_is_omap_palmtt2() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMLD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMLD
++# endif
++# define machine_is_xscale_palmld() (machine_arch_type == MACH_TYPE_XSCALE_PALMLD)
++#else
++# define machine_is_xscale_palmld() (0)
++#endif
++
++#ifdef CONFIG_MACH_CC9C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CC9C
++# endif
++# define machine_is_cc9c() (machine_arch_type == MACH_TYPE_CC9C)
++#else
++# define machine_is_cc9c() (0)
++#endif
++
++#ifdef CONFIG_MACH_SBC1670
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SBC1670
++# endif
++# define machine_is_sbc1670() (machine_arch_type == MACH_TYPE_SBC1670)
++#else
++# define machine_is_sbc1670() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXDP28X5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXDP28X5
++# endif
++# define machine_is_ixdp28x5() (machine_arch_type == MACH_TYPE_IXDP28X5)
++#else
++# define machine_is_ixdp28x5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTT
++# endif
++# define machine_is_omap_palmtt() (machine_arch_type == MACH_TYPE_OMAP_PALMTT)
++#else
++# define machine_is_omap_palmtt() (0)
++#endif
++
++#ifdef CONFIG_MACH_ML696K
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ML696K
++# endif
++# define machine_is_ml696k() (machine_arch_type == MACH_TYPE_ML696K)
++#else
++# define machine_is_ml696k() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARCOM_ZEUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARCOM_ZEUS
++# endif
++# define machine_is_arcom_zeus() (machine_arch_type == MACH_TYPE_ARCOM_ZEUS)
++#else
++# define machine_is_arcom_zeus() (0)
++#endif
++
++#ifdef CONFIG_MACH_OSIRIS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OSIRIS
++# endif
++# define machine_is_osiris() (machine_arch_type == MACH_TYPE_OSIRIS)
++#else
++# define machine_is_osiris() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAESTRO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAESTRO
++# endif
++# define machine_is_maestro() (machine_arch_type == MACH_TYPE_MAESTRO)
++#else
++# define machine_is_maestro() (0)
++#endif
++
++#ifdef CONFIG_MACH_TUNGE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TUNGE2
++# endif
++# define machine_is_tunge2() (machine_arch_type == MACH_TYPE_TUNGE2)
++#else
++# define machine_is_tunge2() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXBBM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXBBM
++# endif
++# define machine_is_ixbbm() (machine_arch_type == MACH_TYPE_IXBBM)
++#else
++# define machine_is_ixbbm() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX27
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX27
++# endif
++# define machine_is_mx27ads() (machine_arch_type == MACH_TYPE_MX27)
++#else
++# define machine_is_mx27ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_AX8004
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AX8004
++# endif
++# define machine_is_ax8004() (machine_arch_type == MACH_TYPE_AX8004)
++#else
++# define machine_is_ax8004() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91SAM9261EK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9261EK
++# endif
++# define machine_is_at91sam9261ek() (machine_arch_type == MACH_TYPE_AT91SAM9261EK)
++#else
++# define machine_is_at91sam9261ek() (0)
++#endif
++
++#ifdef CONFIG_MACH_LOFT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LOFT
++# endif
++# define machine_is_loft() (machine_arch_type == MACH_TYPE_LOFT)
++#else
++# define machine_is_loft() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAGPIE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAGPIE
++# endif
++# define machine_is_magpie() (machine_arch_type == MACH_TYPE_MAGPIE)
++#else
++# define machine_is_magpie() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX21
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX21
++# endif
++# define machine_is_mx21ads() (machine_arch_type == MACH_TYPE_MX21)
++#else
++# define machine_is_mx21ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_MB87M3400
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MB87M3400
++# endif
++# define machine_is_mb87m3400() (machine_arch_type == MACH_TYPE_MB87M3400)
++#else
++# define machine_is_mb87m3400() (0)
++#endif
++
++#ifdef CONFIG_MACH_MGUARD_DELTA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MGUARD_DELTA
++# endif
++# define machine_is_mguard_delta() (machine_arch_type == MACH_TYPE_MGUARD_DELTA)
++#else
++# define machine_is_mguard_delta() (0)
++#endif
++
++#ifdef CONFIG_MACH_DAVINCI_DVDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DAVINCI_DVDP
++# endif
++# define machine_is_davinci_dvdp() (machine_arch_type == MACH_TYPE_DAVINCI_DVDP)
++#else
++# define machine_is_davinci_dvdp() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCUNIVERSAL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCUNIVERSAL
++# endif
++# define machine_is_htcuniversal() (machine_arch_type == MACH_TYPE_HTCUNIVERSAL)
++#else
++# define machine_is_htcuniversal() (0)
++#endif
++
++#ifdef CONFIG_MACH_TPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TPAD
++# endif
++# define machine_is_tpad() (machine_arch_type == MACH_TYPE_TPAD)
++#else
++# define machine_is_tpad() (0)
++#endif
++
++#ifdef CONFIG_MACH_ROVERP3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ROVERP3
++# endif
++# define machine_is_roverp3() (machine_arch_type == MACH_TYPE_ROVERP3)
++#else
++# define machine_is_roverp3() (0)
++#endif
++
++#ifdef CONFIG_MACH_JORNADA928
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_JORNADA928
++# endif
++# define machine_is_jornada928() (machine_arch_type == MACH_TYPE_JORNADA928)
++#else
++# define machine_is_jornada928() (0)
++#endif
++
++#ifdef CONFIG_MACH_MV88FXX81
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MV88FXX81
++# endif
++# define machine_is_mv88fxx81() (machine_arch_type == MACH_TYPE_MV88FXX81)
++#else
++# define machine_is_mv88fxx81() (0)
++#endif
++
++#ifdef CONFIG_MACH_STMP36XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STMP36XX
++# endif
++# define machine_is_stmp36xx() (machine_arch_type == MACH_TYPE_STMP36XX)
++#else
++# define machine_is_stmp36xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_SXNI79524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SXNI79524
++# endif
++# define machine_is_sxni79524() (machine_arch_type == MACH_TYPE_SXNI79524)
++#else
++# define machine_is_sxni79524() (0)
++#endif
++
++#ifdef CONFIG_MACH_AMS_DELTA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AMS_DELTA
++# endif
++# define machine_is_ams_delta() (machine_arch_type == MACH_TYPE_AMS_DELTA)
++#else
++# define machine_is_ams_delta() (0)
++#endif
++
++#ifdef CONFIG_MACH_URANIUM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_URANIUM
++# endif
++# define machine_is_uranium() (machine_arch_type == MACH_TYPE_URANIUM)
++#else
++# define machine_is_uranium() (0)
++#endif
++
++#ifdef CONFIG_MACH_UCON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UCON
++# endif
++# define machine_is_ucon() (machine_arch_type == MACH_TYPE_UCON)
++#else
++# define machine_is_ucon() (0)
++#endif
++
++#ifdef CONFIG_MACH_NAS100D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NAS100D
++# endif
++# define machine_is_nas100d() (machine_arch_type == MACH_TYPE_NAS100D)
++#else
++# define machine_is_nas100d() (0)
++#endif
++
++#ifdef CONFIG_MACH_L083_1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_L083_1000
++# endif
++# define machine_is_l083() (machine_arch_type == MACH_TYPE_L083_1000)
++#else
++# define machine_is_l083() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZX
++# endif
++# define machine_is_ezx() (machine_arch_type == MACH_TYPE_EZX)
++#else
++# define machine_is_ezx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX5220
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX5220
++# endif
++# define machine_is_pnx5220() (machine_arch_type == MACH_TYPE_PNX5220)
++#else
++# define machine_is_pnx5220() (0)
++#endif
++
++#ifdef CONFIG_MACH_BUTTE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BUTTE
++# endif
++# define machine_is_butte() (machine_arch_type == MACH_TYPE_BUTTE)
++#else
++# define machine_is_butte() (0)
++#endif
++
++#ifdef CONFIG_MACH_SRM2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SRM2
++# endif
++# define machine_is_srm2() (machine_arch_type == MACH_TYPE_SRM2)
++#else
++# define machine_is_srm2() (0)
++#endif
++
++#ifdef CONFIG_MACH_DSBR
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DSBR
++# endif
++# define machine_is_dsbr() (machine_arch_type == MACH_TYPE_DSBR)
++#else
++# define machine_is_dsbr() (0)
++#endif
++
++#ifdef CONFIG_MACH_CRYSTALBALL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CRYSTALBALL
++# endif
++# define machine_is_crystalball() (machine_arch_type == MACH_TYPE_CRYSTALBALL)
++#else
++# define machine_is_crystalball() (0)
++#endif
++
++#ifdef CONFIG_MACH_TINYPXA27X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TINYPXA27X
++# endif
++# define machine_is_tinypxa27x() (machine_arch_type == MACH_TYPE_TINYPXA27X)
++#else
++# define machine_is_tinypxa27x() (0)
++#endif
++
++#ifdef CONFIG_MACH_HERBIE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HERBIE
++# endif
++# define machine_is_herbie() (machine_arch_type == MACH_TYPE_HERBIE)
++#else
++# define machine_is_herbie() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAGICIAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAGICIAN
++# endif
++# define machine_is_magician() (machine_arch_type == MACH_TYPE_MAGICIAN)
++#else
++# define machine_is_magician() (0)
++#endif
++
++#ifdef CONFIG_MACH_CM4002
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CM4002
++# endif
++# define machine_is_cm4002() (machine_arch_type == MACH_TYPE_CM4002)
++#else
++# define machine_is_cm4002() (0)
++#endif
++
++#ifdef CONFIG_MACH_B4
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_B4
++# endif
++# define machine_is_b4() (machine_arch_type == MACH_TYPE_B4)
++#else
++# define machine_is_b4() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAUI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAUI
++# endif
++# define machine_is_maui() (machine_arch_type == MACH_TYPE_MAUI)
++#else
++# define machine_is_maui() (0)
++#endif
++
++#ifdef CONFIG_MACH_CYBERTRACKER_G
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CYBERTRACKER_G
++# endif
++# define machine_is_cybertracker_g() (machine_arch_type == MACH_TYPE_CYBERTRACKER_G)
++#else
++# define machine_is_cybertracker_g() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXDKN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXDKN
++# endif
++# define machine_is_nxdkn() (machine_arch_type == MACH_TYPE_NXDKN)
++#else
++# define machine_is_nxdkn() (0)
++#endif
++
++#ifdef CONFIG_MACH_MIO8390
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MIO8390
++# endif
++# define machine_is_mio8390() (machine_arch_type == MACH_TYPE_MIO8390)
++#else
++# define machine_is_mio8390() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMI_BOARD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMI_BOARD
++# endif
++# define machine_is_omi_board() (machine_arch_type == MACH_TYPE_OMI_BOARD)
++#else
++# define machine_is_omi_board() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX21CIV
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX21CIV
++# endif
++# define machine_is_mx21civ() (machine_arch_type == MACH_TYPE_MX21CIV)
++#else
++# define machine_is_mx21civ() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAHI_CDAC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAHI_CDAC
++# endif
++# define machine_is_mahi_cdac() (machine_arch_type == MACH_TYPE_MAHI_CDAC)
++#else
++# define machine_is_mahi_cdac() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTX
++# endif
++# define machine_is_xscale_palmtx() (machine_arch_type == MACH_TYPE_XSCALE_PALMTX)
++#else
++# define machine_is_xscale_palmtx() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C2413
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C2413
++# endif
++# define machine_is_s3c2413() (machine_arch_type == MACH_TYPE_S3C2413)
++#else
++# define machine_is_s3c2413() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAMSYS_EP0
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAMSYS_EP0
++# endif
++# define machine_is_samsys_ep0() (machine_arch_type == MACH_TYPE_SAMSYS_EP0)
++#else
++# define machine_is_samsys_ep0() (0)
++#endif
++
++#ifdef CONFIG_MACH_WG302V1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WG302V1
++# endif
++# define machine_is_wg302v1() (machine_arch_type == MACH_TYPE_WG302V1)
++#else
++# define machine_is_wg302v1() (0)
++#endif
++
++#ifdef CONFIG_MACH_WG302V2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WG302V2
++# endif
++# define machine_is_wg302v2() (machine_arch_type == MACH_TYPE_WG302V2)
++#else
++# define machine_is_wg302v2() (0)
++#endif
++
++#ifdef CONFIG_MACH_EB42X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EB42X
++# endif
++# define machine_is_eb42x() (machine_arch_type == MACH_TYPE_EB42X)
++#else
++# define machine_is_eb42x() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ331ES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ331ES
++# endif
++# define machine_is_iq331es() (machine_arch_type == MACH_TYPE_IQ331ES)
++#else
++# define machine_is_iq331es() (0)
++#endif
++
++#ifdef CONFIG_MACH_COSYDSP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COSYDSP
++# endif
++# define machine_is_cosydsp() (machine_arch_type == MACH_TYPE_COSYDSP)
++#else
++# define machine_is_cosydsp() (0)
++#endif
++
++#ifdef CONFIG_MACH_UPLAT7D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UPLAT7D
++# endif
++# define machine_is_uplat7d_proto() (machine_arch_type == MACH_TYPE_UPLAT7D)
++#else
++# define machine_is_uplat7d_proto() (0)
++#endif
++
++#ifdef CONFIG_MACH_PTDAVINCI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PTDAVINCI
++# endif
++# define machine_is_ptdavinci() (machine_arch_type == MACH_TYPE_PTDAVINCI)
++#else
++# define machine_is_ptdavinci() (0)
++#endif
++
++#ifdef CONFIG_MACH_MBUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MBUS
++# endif
++# define machine_is_mbus() (machine_arch_type == MACH_TYPE_MBUS)
++#else
++# define machine_is_mbus() (0)
++#endif
++
++#ifdef CONFIG_MACH_NADIA2VB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NADIA2VB
++# endif
++# define machine_is_nadia2vb() (machine_arch_type == MACH_TYPE_NADIA2VB)
++#else
++# define machine_is_nadia2vb() (0)
++#endif
++
++#ifdef CONFIG_MACH_R1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_R1000
++# endif
++# define machine_is_r1000() (machine_arch_type == MACH_TYPE_R1000)
++#else
++# define machine_is_r1000() (0)
++#endif
++
++#ifdef CONFIG_MACH_HW90250
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HW90250
++# endif
++# define machine_is_hw90250() (machine_arch_type == MACH_TYPE_HW90250)
++#else
++# define machine_is_hw90250() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_2430SDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_2430SDP
++# endif
++# define machine_is_omap_2430sdp() (machine_arch_type == MACH_TYPE_OMAP_2430SDP)
++#else
++# define machine_is_omap_2430sdp() (0)
++#endif
++
++#ifdef CONFIG_MACH_DAVINCI_EVM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DAVINCI_EVM
++# endif
++# define machine_is_davinci_evm() (machine_arch_type == MACH_TYPE_DAVINCI_EVM)
++#else
++# define machine_is_davinci_evm() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_TORNADO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_TORNADO
++# endif
++# define machine_is_omap_tornado() (machine_arch_type == MACH_TYPE_OMAP_TORNADO)
++#else
++# define machine_is_omap_tornado() (0)
++#endif
++
++#ifdef CONFIG_MACH_OLOCREEK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OLOCREEK
++# endif
++# define machine_is_olocreek() (machine_arch_type == MACH_TYPE_OLOCREEK)
++#else
++# define machine_is_olocreek() (0)
++#endif
++
++#ifdef CONFIG_MACH_PALMZ72
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PALMZ72
++# endif
++# define machine_is_palmz72() (machine_arch_type == MACH_TYPE_PALMZ72)
++#else
++# define machine_is_palmz72() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXDB500
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXDB500
++# endif
++# define machine_is_nxdb500() (machine_arch_type == MACH_TYPE_NXDB500)
++#else
++# define machine_is_nxdb500() (0)
++#endif
++
++#ifdef CONFIG_MACH_APF9328
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_APF9328
++# endif
++# define machine_is_apf9328() (machine_arch_type == MACH_TYPE_APF9328)
++#else
++# define machine_is_apf9328() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_WIPOQ
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_WIPOQ
++# endif
++# define machine_is_omap_wipoq() (machine_arch_type == MACH_TYPE_OMAP_WIPOQ)
++#else
++# define machine_is_omap_wipoq() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_TWIP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_TWIP
++# endif
++# define machine_is_omap_twip() (machine_arch_type == MACH_TYPE_OMAP_TWIP)
++#else
++# define machine_is_omap_twip() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTREO650
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTREO650
++# endif
++# define machine_is_xscale_treo650() (machine_arch_type == MACH_TYPE_XSCALE_PALMTREO650)
++#else
++# define machine_is_xscale_treo650() (0)
++#endif
++
++#ifdef CONFIG_MACH_ACUMEN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ACUMEN
++# endif
++# define machine_is_acumen() (machine_arch_type == MACH_TYPE_ACUMEN)
++#else
++# define machine_is_acumen() (0)
++#endif
++
++#ifdef CONFIG_MACH_XP100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XP100
++# endif
++# define machine_is_xp100() (machine_arch_type == MACH_TYPE_XP100)
++#else
++# define machine_is_xp100() (0)
++#endif
++
++#ifdef CONFIG_MACH_FS2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FS2410
++# endif
++# define machine_is_fs2410() (machine_arch_type == MACH_TYPE_FS2410)
++#else
++# define machine_is_fs2410() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA270_CERF
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA270_CERF
++# endif
++# define machine_is_pxa270_cerf() (machine_arch_type == MACH_TYPE_PXA270_CERF)
++#else
++# define machine_is_pxa270_cerf() (0)
++#endif
++
++#ifdef CONFIG_MACH_SQ2FTLPALM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SQ2FTLPALM
++# endif
++# define machine_is_sq2ftlpalm() (machine_arch_type == MACH_TYPE_SQ2FTLPALM)
++#else
++# define machine_is_sq2ftlpalm() (0)
++#endif
++
++#ifdef CONFIG_MACH_BSEMSERVER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BSEMSERVER
++# endif
++# define machine_is_bsemserver() (machine_arch_type == MACH_TYPE_BSEMSERVER)
++#else
++# define machine_is_bsemserver() (0)
++#endif
++
++#ifdef CONFIG_MACH_NETCLIENT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NETCLIENT
++# endif
++# define machine_is_netclient() (machine_arch_type == MACH_TYPE_NETCLIENT)
++#else
++# define machine_is_netclient() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTT5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTT5
++# endif
++# define machine_is_xscale_palmtt5() (machine_arch_type == MACH_TYPE_XSCALE_PALMTT5)
++#else
++# define machine_is_xscale_palmtt5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTC
++# endif
++# define machine_is_xscale_palmtc() (machine_arch_type == MACH_TYPE_OMAP_PALMTC)
++#else
++# define machine_is_xscale_palmtc() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_APOLLON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_APOLLON
++# endif
++# define machine_is_omap_apollon() (machine_arch_type == MACH_TYPE_OMAP_APOLLON)
++#else
++# define machine_is_omap_apollon() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARGONLVEVB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARGONLVEVB
++# endif
++# define machine_is_mxc30030evb() (machine_arch_type == MACH_TYPE_ARGONLVEVB)
++#else
++# define machine_is_mxc30030evb() (0)
++#endif
++
++#ifdef CONFIG_MACH_REA_2D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REA_2D
++# endif
++# define machine_is_rea_2d() (machine_arch_type == MACH_TYPE_REA_2D)
++#else
++# define machine_is_rea_2d() (0)
++#endif
++
++#ifdef CONFIG_MACH_TI3E524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TI3E524
++# endif
++# define machine_is_eti3e524() (machine_arch_type == MACH_TYPE_TI3E524)
++#else
++# define machine_is_eti3e524() (0)
++#endif
++
++#ifdef CONFIG_MACH_ATEB9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ATEB9200
++# endif
++# define machine_is_ateb9200() (machine_arch_type == MACH_TYPE_ATEB9200)
++#else
++# define machine_is_ateb9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_AUCKLAND
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AUCKLAND
++# endif
++# define machine_is_auckland() (machine_arch_type == MACH_TYPE_AUCKLAND)
++#else
++# define machine_is_auckland() (0)
++#endif
++
++#ifdef CONFIG_MACH_AK3320M
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AK3320M
++# endif
++# define machine_is_ak3220m() (machine_arch_type == MACH_TYPE_AK3320M)
++#else
++# define machine_is_ak3220m() (0)
++#endif
++
++#ifdef CONFIG_MACH_DURAMAX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DURAMAX
++# endif
++# define machine_is_duramax() (machine_arch_type == MACH_TYPE_DURAMAX)
++#else
++# define machine_is_duramax() (0)
++#endif
++
++#ifdef CONFIG_MACH_N35
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_N35
++# endif
++# define machine_is_n35() (machine_arch_type == MACH_TYPE_N35)
++#else
++# define machine_is_n35() (0)
++#endif
++
++#ifdef CONFIG_MACH_PRONGHORN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PRONGHORN
++# endif
++# define machine_is_pronghorn() (machine_arch_type == MACH_TYPE_PRONGHORN)
++#else
++# define machine_is_pronghorn() (0)
++#endif
++
++#ifdef CONFIG_MACH_FUNDY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FUNDY
++# endif
++# define machine_is_fundy() (machine_arch_type == MACH_TYPE_FUNDY)
++#else
++# define machine_is_fundy() (0)
++#endif
++
++#ifdef CONFIG_MACH_LOGICPD_PXA270
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LOGICPD_PXA270
++# endif
++# define machine_is_logicpd_pxa270() (machine_arch_type == MACH_TYPE_LOGICPD_PXA270)
++#else
++# define machine_is_logicpd_pxa270() (0)
++#endif
++
++#ifdef CONFIG_MACH_CPU777
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CPU777
++# endif
++# define machine_is_cpu777() (machine_arch_type == MACH_TYPE_CPU777)
++#else
++# define machine_is_cpu777() (0)
++#endif
++
++#ifdef CONFIG_MACH_SIMICON9201
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SIMICON9201
++# endif
++# define machine_is_simicon9201() (machine_arch_type == MACH_TYPE_SIMICON9201)
++#else
++# define machine_is_simicon9201() (0)
++#endif
++
++#ifdef CONFIG_MACH_LEAP2_HPM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LEAP2_HPM
++# endif
++# define machine_is_leap2_hpm() (machine_arch_type == MACH_TYPE_LEAP2_HPM)
++#else
++# define machine_is_leap2_hpm() (0)
++#endif
++
++#ifdef CONFIG_MACH_CM922TXA10
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CM922TXA10
++# endif
++# define machine_is_cm922txa10() (machine_arch_type == MACH_TYPE_CM922TXA10)
++#else
++# define machine_is_cm922txa10() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA
++# endif
++# define machine_is_sandgate() (machine_arch_type == MACH_TYPE_PXA)
++#else
++# define machine_is_sandgate() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2
++# endif
++# define machine_is_sandgate2() (machine_arch_type == MACH_TYPE_SANDGATE2)
++#else
++# define machine_is_sandgate2() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2G
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2G
++# endif
++# define machine_is_sandgate2g() (machine_arch_type == MACH_TYPE_SANDGATE2G)
++#else
++# define machine_is_sandgate2g() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2P
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2P
++# endif
++# define machine_is_sandgate2p() (machine_arch_type == MACH_TYPE_SANDGATE2P)
++#else
++# define machine_is_sandgate2p() (0)
++#endif
++
++#ifdef CONFIG_MACH_FRED_JACK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FRED_JACK
++# endif
++# define machine_is_fred_jack() (machine_arch_type == MACH_TYPE_FRED_JACK)
++#else
++# define machine_is_fred_jack() (0)
++#endif
++
++#ifdef CONFIG_MACH_TTG_COLOR1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TTG_COLOR1
++# endif
++# define machine_is_ttg_color1() (machine_arch_type == MACH_TYPE_TTG_COLOR1)
++#else
++# define machine_is_ttg_color1() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXEB500HMI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXEB500HMI
++# endif
++# define machine_is_nxeb500hmi() (machine_arch_type == MACH_TYPE_NXEB500HMI)
++#else
++# define machine_is_nxeb500hmi() (0)
++#endif
++
++#ifdef CONFIG_MACH_NETDCU8
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NETDCU8
++# endif
++# define machine_is_netdcu8() (machine_arch_type == MACH_TYPE_NETDCU8)
++#else
++# define machine_is_netdcu8() (0)
++#endif
++
++#ifdef CONFIG_MACH_ML675050_CPU_BOA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ML675050_CPU_BOA
++# endif
++# define machine_is_ml675050_cpu_boa() (machine_arch_type == MACH_TYPE_ML675050_CPU_BOA)
++#else
++# define machine_is_ml675050_cpu_boa() (0)
++#endif
++
++#ifdef CONFIG_MACH_NG_FVX538
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NG_FVX538
++# endif
++# define machine_is_ng_fvx538() (machine_arch_type == MACH_TYPE_NG_FVX538)
++#else
++# define machine_is_ng_fvx538() (0)
++#endif
++
++#ifdef CONFIG_MACH_NG_FVS338
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NG_FVS338
++# endif
++# define machine_is_ng_fvs338() (machine_arch_type == MACH_TYPE_NG_FVS338)
++#else
++# define machine_is_ng_fvs338() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX4103
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX4103
++# endif
++# define machine_is_pnx4103() (machine_arch_type == MACH_TYPE_PNX4103)
++#else
++# define machine_is_pnx4103() (0)
++#endif
++
++#ifdef CONFIG_MACH_HESDB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HESDB
++# endif
++# define machine_is_hesdb() (machine_arch_type == MACH_TYPE_HESDB)
++#else
++# define machine_is_hesdb() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSILO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSILO
++# endif
++# define machine_is_xsilo() (machine_arch_type == MACH_TYPE_XSILO)
++#else
++# define machine_is_xsilo() (0)
++#endif
++
++#ifdef CONFIG_MACH_ESPRESSO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ESPRESSO
++# endif
++# define machine_is_espresso() (machine_arch_type == MACH_TYPE_ESPRESSO)
++#else
++# define machine_is_espresso() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMLC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMLC
++# endif
++# define machine_is_emlc() (machine_arch_type == MACH_TYPE_EMLC)
++#else
++# define machine_is_emlc() (0)
++#endif
++
++#ifdef CONFIG_MACH_SISTERON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SISTERON
++# endif
++# define machine_is_sisteron() (machine_arch_type == MACH_TYPE_SISTERON)
++#else
++# define machine_is_sisteron() (0)
++#endif
++
++#ifdef CONFIG_MACH_RX1950
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RX1950
++# endif
++# define machine_is_rx1950() (machine_arch_type == MACH_TYPE_RX1950)
++#else
++# define machine_is_rx1950() (0)
++#endif
++
++#ifdef CONFIG_MACH_TSC_VENUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TSC_VENUS
++# endif
++# define machine_is_tsc_venus() (machine_arch_type == MACH_TYPE_TSC_VENUS)
++#else
++# define machine_is_tsc_venus() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS101J
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS101J
++# endif
++# define machine_is_ds101j() (machine_arch_type == MACH_TYPE_DS101J)
++#else
++# define machine_is_ds101j() (0)
++#endif
++
++#ifdef CONFIG_MACH_MXC30030ADS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MXC30030ADS
++# endif
++# define machine_is_mxc30030ads() (machine_arch_type == MACH_TYPE_MXC30030ADS)
++#else
++# define machine_is_mxc30030ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_FUJITSU_WIMAXSOC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FUJITSU_WIMAXSOC
++# endif
++# define machine_is_fujitsu_wimaxsoc() (machine_arch_type == MACH_TYPE_FUJITSU_WIMAXSOC)
++#else
++# define machine_is_fujitsu_wimaxsoc() (0)
++#endif
++
++#ifdef CONFIG_MACH_DUALPCMODEM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DUALPCMODEM
++# endif
++# define machine_is_dualpcmodem() (machine_arch_type == MACH_TYPE_DUALPCMODEM)
++#else
++# define machine_is_dualpcmodem() (0)
++#endif
++
++#ifdef CONFIG_MACH_GESBC9312
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GESBC9312
++# endif
++# define machine_is_gesbc9312() (machine_arch_type == MACH_TYPE_GESBC9312)
++#else
++# define machine_is_gesbc9312() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCAPACHE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCAPACHE
++# endif
++# define machine_is_htcapache() (machine_arch_type == MACH_TYPE_HTCAPACHE)
++#else
++# define machine_is_htcapache() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXDP435
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXDP435
++# endif
++# define machine_is_ixdp435() (machine_arch_type == MACH_TYPE_IXDP435)
++#else
++# define machine_is_ixdp435() (0)
++#endif
++
++#ifdef CONFIG_MACH_CATPROVT100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CATPROVT100
++# endif
++# define machine_is_catprovt100() (machine_arch_type == MACH_TYPE_CATPROVT100)
++#else
++# define machine_is_catprovt100() (0)
++#endif
++
++#ifdef CONFIG_MACH_PICOTUX1XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PICOTUX1XX
++# endif
++# define machine_is_picotux1xx() (machine_arch_type == MACH_TYPE_PICOTUX1XX)
++#else
++# define machine_is_picotux1xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PICOTUX2XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PICOTUX2XX
++# endif
++# define machine_is_picotux2xx() (machine_arch_type == MACH_TYPE_PICOTUX2XX)
++#else
++# define machine_is_picotux2xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_DSMG600
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DSMG600
++# endif
++# define machine_is_dsmg600() (machine_arch_type == MACH_TYPE_DSMG600)
++#else
++# define machine_is_dsmg600() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMPC2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMPC2
++# endif
++# define machine_is_empc2() (machine_arch_type == MACH_TYPE_EMPC2)
++#else
++# define machine_is_empc2() (0)
++#endif
++
++#ifdef CONFIG_MACH_VENTURA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VENTURA
++# endif
++# define machine_is_ventura() (machine_arch_type == MACH_TYPE_VENTURA)
++#else
++# define machine_is_ventura() (0)
++#endif
++
++#ifdef CONFIG_MACH_PHIDGET_SBC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PHIDGET_SBC
++# endif
++# define machine_is_phidget_sbc() (machine_arch_type == MACH_TYPE_PHIDGET_SBC)
++#else
++# define machine_is_phidget_sbc() (0)
++#endif
++
++#ifdef CONFIG_MACH_IJ3K
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IJ3K
++# endif
++# define machine_is_ij3k() (machine_arch_type == MACH_TYPE_IJ3K)
++#else
++# define machine_is_ij3k() (0)
++#endif
++
++#ifdef CONFIG_MACH_PISGAH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PISGAH
++# endif
++# define machine_is_pisgah() (machine_arch_type == MACH_TYPE_PISGAH)
++#else
++# define machine_is_pisgah() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_FSAMPLE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_FSAMPLE
++# endif
++# define machine_is_omap_fsample() (machine_arch_type == MACH_TYPE_OMAP_FSAMPLE)
++#else
++# define machine_is_omap_fsample() (0)
++#endif
++
++#ifdef CONFIG_MACH_SG720
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SG720
++# endif
++# define machine_is_sg720() (machine_arch_type == MACH_TYPE_SG720)
++#else
++# define machine_is_sg720() (0)
++#endif
++
++#ifdef CONFIG_MACH_REDFOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REDFOX
++# endif
++# define machine_is_redfox() (machine_arch_type == MACH_TYPE_REDFOX)
++#else
++# define machine_is_redfox() (0)
++#endif
++
++#ifdef CONFIG_MACH_MYSH_EP9315_1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MYSH_EP9315_1
++# endif
++# define machine_is_mysh_ep9315_1() (machine_arch_type == MACH_TYPE_MYSH_EP9315_1)
++#else
++# define machine_is_mysh_ep9315_1() (0)
++#endif
++
++#ifdef CONFIG_MACH_TPF106
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TPF106
++# endif
++# define machine_is_tpf106() (machine_arch_type == MACH_TYPE_TPF106)
++#else
++# define machine_is_tpf106() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91RM9200KG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91RM9200KG
++# endif
++# define machine_is_at91rm9200kg() (machine_arch_type == MACH_TYPE_AT91RM9200KG)
++#else
++# define machine_is_at91rm9200kg() (0)
++#endif
++
++#ifdef CONFIG_MACH_SLEDB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SLEDB
++# endif
++# define machine_is_racemt2() (machine_arch_type == MACH_TYPE_SLEDB)
++#else
++# define machine_is_racemt2() (0)
++#endif
++
++#ifdef CONFIG_MACH_ONTRACK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ONTRACK
++# endif
++# define machine_is_ontrack() (machine_arch_type == MACH_TYPE_ONTRACK)
++#else
++# define machine_is_ontrack() (0)
++#endif
++
++#ifdef CONFIG_MACH_PM1200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PM1200
++# endif
++# define machine_is_pm1200() (machine_arch_type == MACH_TYPE_PM1200)
++#else
++# define machine_is_pm1200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ESS24XXX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ESS24XXX
++# endif
++# define machine_is_ess24562() (machine_arch_type == MACH_TYPE_ESS24XXX)
++#else
++# define machine_is_ess24562() (0)
++#endif
++
++#ifdef CONFIG_MACH_COREMP7
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COREMP7
++# endif
++# define machine_is_coremp7() (machine_arch_type == MACH_TYPE_COREMP7)
++#else
++# define machine_is_coremp7() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEXCODER_6446
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEXCODER_6446
++# endif
++# define machine_is_nexcoder_6446() (machine_arch_type == MACH_TYPE_NEXCODER_6446)
++#else
++# define machine_is_nexcoder_6446() (0)
++#endif
++
++#ifdef CONFIG_MACH_STVC8380
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STVC8380
++# endif
++# define machine_is_stvc8380() (machine_arch_type == MACH_TYPE_STVC8380)
++#else
++# define machine_is_stvc8380() (0)
++#endif
++
++#ifdef CONFIG_MACH_TEKLYNX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TEKLYNX
++# endif
++# define machine_is_teklynx() (machine_arch_type == MACH_TYPE_TEKLYNX)
++#else
++# define machine_is_teklynx() (0)
++#endif
++
++#ifdef CONFIG_MACH_CARBONADO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CARBONADO
++# endif
++# define machine_is_carbonado() (machine_arch_type == MACH_TYPE_CARBONADO)
++#else
++# define machine_is_carbonado() (0)
++#endif
++
++#ifdef CONFIG_MACH_SYSMOS_MP730
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SYSMOS_MP730
++# endif
++# define machine_is_sysmos_mp730() (machine_arch_type == MACH_TYPE_SYSMOS_MP730)
++#else
++# define machine_is_sysmos_mp730() (0)
++#endif
++
++#ifdef CONFIG_MACH_SNAPPER_CL15
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SNAPPER_CL15
++# endif
++# define machine_is_snapper_cl15() (machine_arch_type == MACH_TYPE_SNAPPER_CL15)
++#else
++# define machine_is_snapper_cl15() (0)
++#endif
++
++#ifdef CONFIG_MACH_PGIGIM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PGIGIM
++# endif
++# define machine_is_pgigim() (machine_arch_type == MACH_TYPE_PGIGIM)
++#else
++# define machine_is_pgigim() (0)
++#endif
++
++#ifdef CONFIG_MACH_PTX9160P2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PTX9160P2
++# endif
++# define machine_is_ptx9160p2() (machine_arch_type == MACH_TYPE_PTX9160P2)
++#else
++# define machine_is_ptx9160p2() (0)
++#endif
++
++#ifdef CONFIG_MACH_DCORE1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DCORE1
++# endif
++# define machine_is_dcore1() (machine_arch_type == MACH_TYPE_DCORE1)
++#else
++# define machine_is_dcore1() (0)
++#endif
++
++#ifdef CONFIG_MACH_VICTORPXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VICTORPXA
++# endif
++# define machine_is_victorpxa() (machine_arch_type == MACH_TYPE_VICTORPXA)
++#else
++# define machine_is_victorpxa() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX2DTB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX2DTB
++# endif
++# define machine_is_mx2dtb() (machine_arch_type == MACH_TYPE_MX2DTB)
++#else
++# define machine_is_mx2dtb() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA_IREX_ER0100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA_IREX_ER0100
++# endif
++# define machine_is_pxa_irex_er0100() (machine_arch_type == MACH_TYPE_PXA_IREX_ER0100)
++#else
++# define machine_is_pxa_irex_er0100() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMZ71
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMZ71
++# endif
++# define machine_is_omap_palmz71() (machine_arch_type == MACH_TYPE_OMAP_PALMZ71)
++#else
++# define machine_is_omap_palmz71() (0)
++#endif
++
++#ifdef CONFIG_MACH_BARTEC_DEG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BARTEC_DEG
++# endif
++# define machine_is_bartec_deg() (machine_arch_type == MACH_TYPE_BARTEC_DEG)
++#else
++# define machine_is_bartec_deg() (0)
++#endif
++
++#ifdef CONFIG_MACH_HW50251
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HW50251
++# endif
++# define machine_is_hw50251() (machine_arch_type == MACH_TYPE_HW50251)
++#else
++# define machine_is_hw50251() (0)
++#endif
++
++#ifdef CONFIG_MACH_IBOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IBOX
++# endif
++# define machine_is_ibox() (machine_arch_type == MACH_TYPE_IBOX)
++#else
++# define machine_is_ibox() (0)
++#endif
++
++#ifdef CONFIG_MACH_ATLASLH7A404
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ATLASLH7A404
++# endif
++# define machine_is_atlaslh7a404() (machine_arch_type == MACH_TYPE_ATLASLH7A404)
++#else
++# define machine_is_atlaslh7a404() (0)
++#endif
++
++#ifdef CONFIG_MACH_PT2026
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PT2026
++# endif
++# define machine_is_pt2026() (machine_arch_type == MACH_TYPE_PT2026)
++#else
++# define machine_is_pt2026() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCALPINE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCALPINE
++# endif
++# define machine_is_htcalpine() (machine_arch_type == MACH_TYPE_HTCALPINE)
++#else
++# define machine_is_htcalpine() (0)
++#endif
++
++#ifdef CONFIG_MACH_BARTEC_VTU
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BARTEC_VTU
++# endif
++# define machine_is_bartec_vtu() (machine_arch_type == MACH_TYPE_BARTEC_VTU)
++#else
++# define machine_is_bartec_vtu() (0)
++#endif
++
++#ifdef CONFIG_MACH_VCOREII
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VCOREII
++# endif
++# define machine_is_vcoreii() (machine_arch_type == MACH_TYPE_VCOREII)
++#else
++# define machine_is_vcoreii() (0)
++#endif
++
++#ifdef CONFIG_MACH_PDNB3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PDNB3
++# endif
++# define machine_is_pdnb3() (machine_arch_type == MACH_TYPE_PDNB3)
++#else
++# define machine_is_pdnb3() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCBEETLES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCBEETLES
++# endif
++# define machine_is_htcbeetles() (machine_arch_type == MACH_TYPE_HTCBEETLES)
++#else
++# define machine_is_htcbeetles() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C6400
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C6400
++# endif
++# define machine_is_s3c6400() (machine_arch_type == MACH_TYPE_S3C6400)
++#else
++# define machine_is_s3c6400() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C2443
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C2443
++# endif
++# define machine_is_s3c2443() (machine_arch_type == MACH_TYPE_S3C2443)
++#else
++# define machine_is_s3c2443() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_LDK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_LDK
++# endif
++# define machine_is_omap_ldk() (machine_arch_type == MACH_TYPE_OMAP_LDK)
++#else
++# define machine_is_omap_ldk() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2460
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2460
++# endif
++# define machine_is_smdk2460() (machine_arch_type == MACH_TYPE_SMDK2460)
++#else
++# define machine_is_smdk2460() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2440
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2440
++# endif
++# define machine_is_smdk2440() (machine_arch_type == MACH_TYPE_SMDK2440)
++#else
++# define machine_is_smdk2440() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2412
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2412
++# endif
++# define machine_is_smdk2412() (machine_arch_type == MACH_TYPE_SMDK2412)
++#else
++# define machine_is_smdk2412() (0)
++#endif
++
++#ifdef CONFIG_MACH_WEBBOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WEBBOX
++# endif
++# define machine_is_webbox() (machine_arch_type == MACH_TYPE_WEBBOX)
++#else
++# define machine_is_webbox() (0)
++#endif
++
++#ifdef CONFIG_MACH_CWWNDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CWWNDP
++# endif
++# define machine_is_cwwndp() (machine_arch_type == MACH_TYPE_CWWNDP)
++#else
++# define machine_is_cwwndp() (0)
++#endif
++
++#ifdef CONFIG_MACH_DRAGON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DRAGON
++# endif
++# define machine_is_dragon() (machine_arch_type == MACH_TYPE_DRAGON)
++#else
++# define machine_is_dragon() (0)
++#endif
++
++#ifdef CONFIG_MACH_OPENDO_CPU_BOARD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OPENDO_CPU_BOARD
++# endif
++# define machine_is_opendo_cpu_board() (machine_arch_type == MACH_TYPE_OPENDO_CPU_BOARD)
++#else
++# define machine_is_opendo_cpu_board() (0)
++#endif
++
++#ifdef CONFIG_MACH_CCM2200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CCM2200
++# endif
++# define machine_is_ccm2200() (machine_arch_type == MACH_TYPE_CCM2200)
++#else
++# define machine_is_ccm2200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ETWARM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ETWARM
++# endif
++# define machine_is_etwarm() (machine_arch_type == MACH_TYPE_ETWARM)
++#else
++# define machine_is_etwarm() (0)
++#endif
++
++#ifdef CONFIG_MACH_M93030
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_M93030
++# endif
++# define machine_is_m93030() (machine_arch_type == MACH_TYPE_M93030)
++#else
++# define machine_is_m93030() (0)
++#endif
++
++#ifdef CONFIG_MACH_CC7U
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CC7U
++# endif
++# define machine_is_cc7u() (machine_arch_type == MACH_TYPE_CC7U)
++#else
++# define machine_is_cc7u() (0)
++#endif
++
++#ifdef CONFIG_MACH_MTT_RANGER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MTT_RANGER
++# endif
++# define machine_is_mtt_ranger() (machine_arch_type == MACH_TYPE_MTT_RANGER)
++#else
++# define machine_is_mtt_ranger() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEXUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEXUS
++# endif
++# define machine_is_nexus() (machine_arch_type == MACH_TYPE_NEXUS)
++#else
++# define machine_is_nexus() (0)
++#endif
++
++#ifdef CONFIG_MACH_DESMAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DESMAN
++# endif
++# define machine_is_desman() (machine_arch_type == MACH_TYPE_DESMAN)
++#else
++# define machine_is_desman() (0)
++#endif
++
++#ifdef CONFIG_MACH_BKDE303
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BKDE303
++# endif
++# define machine_is_bkde303() (machine_arch_type == MACH_TYPE_BKDE303)
++#else
++# define machine_is_bkde303() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2413
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2413
++# endif
++# define machine_is_smdk2413() (machine_arch_type == MACH_TYPE_SMDK2413)
++#else
++# define machine_is_smdk2413() (0)
++#endif
++
++#ifdef CONFIG_MACH_AML_M7200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AML_M7200
++# endif
++# define machine_is_aml_m7200() (machine_arch_type == MACH_TYPE_AML_M7200)
++#else
++# define machine_is_aml_m7200() (0)
++#endif
++
++#ifdef CONFIG_MACH_AML_M5900
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AML_M5900
++# endif
++# define machine_is_aml_m5900() (machine_arch_type == MACH_TYPE_AML_M5900)
++#else
++# define machine_is_aml_m5900() (0)
++#endif
++
++#ifdef CONFIG_MACH_SG640
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SG640
++# endif
++# define machine_is_sg640() (machine_arch_type == MACH_TYPE_SG640)
++#else
++# define machine_is_sg640() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDG79524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDG79524
++# endif
++# define machine_is_edg79524() (machine_arch_type == MACH_TYPE_EDG79524)
++#else
++# define machine_is_edg79524() (0)
++#endif
++
++#ifdef CONFIG_MACH_AI2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AI2410
++# endif
++# define machine_is_ai2410() (machine_arch_type == MACH_TYPE_AI2410)
++#else
++# define machine_is_ai2410() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXP465
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXP465
++# endif
++# define machine_is_ixp465() (machine_arch_type == MACH_TYPE_IXP465)
++#else
++# define machine_is_ixp465() (0)
++#endif
++
++#ifdef CONFIG_MACH_BALLOON3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BALLOON3
++# endif
++# define machine_is_balloon3() (machine_arch_type == MACH_TYPE_BALLOON3)
++#else
++# define machine_is_balloon3() (0)
++#endif
++
++#ifdef CONFIG_MACH_QT2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_QT2410
++# endif
++# define machine_is_qt2410() (machine_arch_type == MACH_TYPE_QT2410)
++#else
++# define machine_is_qt2410() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEO1973_GTA01
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEO1973_GTA01
++# endif
++# define machine_is_neo1973_gta01() (machine_arch_type == MACH_TYPE_NEO1973_GTA01)
++#else
++# define machine_is_neo1973_gta01() (0)
++#endif
++
++#ifdef CONFIG_MACH_HXD8
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HXD8
++# endif
++# define machine_is_hxd8() (machine_arch_type == MACH_TYPE_HXD8)
++#else
++# define machine_is_neo8() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEO1973_GTA02
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEO1973_GTA02
++# endif
++# define machine_is_neo1973_gta02() (machine_arch_type == MACH_TYPE_NEO1973_GTA02)
++#else
++# define machine_is_neo1973_gta02() (0)
++#endif
++
++
+ /*
+ * These have not yet been registered
+ */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch
new file mode 100644
index 0000000000..a44434155e
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch
@@ -0,0 +1,10 @@
+Index: u-boot/tools/setlocalversion
+===================================================================
+--- u-boot.orig/tools/setlocalversion 2007-03-26 14:42:58.000000000 +0200
++++ u-boot/tools/setlocalversion 2007-03-26 14:46:47.000000000 +0200
+@@ -20,3 +20,5 @@
+ printf '%s' -dirty
+ fi
+ fi
++
++printf '%s' -moko9
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch
new file mode 100644
index 0000000000..d630889e3c
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch
@@ -0,0 +1,20 @@
+This patch makes sure that the 'nand markbad' command does not only mark a block
+'bad' in the bad-block table, but _also_ marks it bad in the OOB area.
+
+we need this to preserve the bad block status when re-creating the bad block table
+at some later point.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+Index: u-boot/drivers/nand/nand_base.c
+===================================================================
+--- u-boot.orig/drivers/nand/nand_base.c 2007-03-01 12:47:31.000000000 +0100
++++ u-boot/drivers/nand/nand_base.c 2007-03-01 12:48:08.000000000 +0100
+@@ -481,7 +481,7 @@
+
+ /* Do we have a flash based bad block table ? */
+ if (this->options & NAND_USE_FLASH_BBT)
+- return nand_update_bbt (mtd, ofs);
++ nand_update_bbt (mtd, ofs);
+
+ /* We write two bytes, so we dont have to mess with 16 bit access */
+ ofs += mtd->oobsize + (this->badblockpos & ~0x01);
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch
new file mode 100644
index 0000000000..7e3aa4f480
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch
@@ -0,0 +1,31 @@
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h 2007-02-27 00:43:16.000000000 +0100
++++ u-boot/include/configs/neo1973_gta01.h 2007-02-27 00:47:49.000000000 +0100
+@@ -115,8 +115,8 @@
+ #include <cmd_confdefs.h>
+
+ #define CONFIG_BOOTDELAY 3
+-#define CONFIG_BOOTARGS "rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8"
+-#define CONFIG_BOOTCOMMAND "nand read.e 0x32000000 0x34000 0x200000; bootm 0x32000000"
++#define CONFIG_BOOTARGS ""
++#define CONFIG_BOOTCOMMAND "setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000"
+
+ #define CONFIG_DOS_PARTITION 1
+
+@@ -181,11 +181,14 @@
+ #define CONFIG_USBD_PRODUCTID_CDCACM 0x5119 /* CDC ACM */
+ #define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc"
+ #define CONFIG_USBD_PRODUCT_NAME "Neo1973 Bootloader " U_BOOT_VERSION
+-#define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
+ #define CONFIG_USBD_DFU 1
+ #define CONFIG_USBD_DFU_XFER_SIZE 4096 /* 0x4000 */
+ #define CONFIG_USBD_DFU_INTERFACE 2
+
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "usbtty=cdc_acm\0" \
++ "bootargs_base=rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8\0" \
++ ""
+
+ /*-----------------------------------------------------------------------
+ * Physical Memory Map
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch
new file mode 100644
index 0000000000..19d912620d
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch
@@ -0,0 +1,113 @@
+Resume support for low-level uboot code, Version 5
+
+Signed-off-by: Ben Dooks <ben-linux@fluff.org>
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S 2007-02-28 03:51:24.000000000 +0100
++++ u-boot/cpu/arm920t/start.S 2007-03-01 02:43:47.000000000 +0100
+@@ -158,18 +158,68 @@
+ str r1, [r0]
+ # endif
+
++ /* default FCLK is 202 MHz ! */
++#define LOCKTIME 0x4c000000
++#define UPLLCON 0x4c000008
++//#define MPLLCFG ((0x90 << 12) + (0x2 << 4) + 0x2)
++#define MPLLCFG ((0x90 << 12) + (0x7 << 4) + 0x0)
++#define UPLLCFG ((0x78 << 12) + (0x2 << 4) + 0x3)
++ ldr r0, =LOCKTIME
++ mov r1, #0xffffff
++ str r1, [r0]
++
++ ldr r0, =UPLLCON
++ ldr r1, =UPLLCFG
++ str r1, [r0]
++
++ /* Page 7-19, seven nops between UPLL and MPLL */
++ nop
++ nop
++ nop
++ nop
++ nop
++ nop
++ nop
++
++ ldr r1, =MPLLCFG
++ str r1, [r0, #-4] /* MPLLCON */
++
+ /* FCLK:HCLK:PCLK = 1:2:4 */
+- /* default FCLK is 120 MHz ! */
+ ldr r0, =CLKDIVN
+ mov r1, #3
+ str r1, [r0]
++
++#if 1
++ /* enable uart */
++ ldr r0, =0x4c00000c /* clkcon */
++ ldr r1, =0x7fff0 /* all clocks on */
++ str r1, [r0]
++
++ /* gpio UART0 init */
++ ldr r0, =0x56000070
++ mov r1, #0xaa
++ str r1, [r0]
++
++ /* init uart */
++ ldr r0, =0x50000000
++ mov r1, #0x03
++ str r1, [r0]
++ ldr r1, =0x245
++ str r1, [r0, #0x04]
++ mov r1, #0x01
++ str r1, [r0, #0x08]
++ mov r1, #0x00
++ str r1, [r0, #0x0c]
++ mov r1, #0x1a
++ str r1, [r0, #0x28]
++#endif
++
+ #endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */
+
+ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
+ #ifndef CONFIG_LL_INIT_NAND_ONLY
+ bl cpu_init_crit
+ #endif
+-#endif
+
+ #ifndef CONFIG_SKIP_RELOCATE_UBOOT
+ adr r0, _start /* r0 <- current position of code */
+@@ -202,9 +252,33 @@
+
+ #ifdef CONFIG_S3C2410_NAND_BOOT
+ nand_load:
++ /* take sdram out of power down */
++ ldr r0, =0x56000080 /* misccr */
++ ldr r1, [ r0 ]
++ bic r1, r1, #(S3C2410_MISCCR_nEN_SCLK0 | S3C2410_MISCCR_nEN_SCLK1 | S3C2410_MISCCR_nEN_SCLKE)
++ str r1, [ r0 ]
++
++ /* ensure signals stabalise */
++ mov r1, #128
++1: subs r1, r1, #1
++ bpl 1b
++
+ #if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && defined(CONFIG_LL_INIT_NAND_ONLY)
+ bl cpu_init_crit
+ #endif
++#if defined(CONFIG_S3C2410)
++ /* ensure some refresh has happened */
++ ldr r1, =0xfffff
++1: subs r1, r1, #1
++ bpl 1b
++
++ /* test for resume */
++ ldr r1, =0x560000B4 /* gstatus2 */
++ ldr r0, [ r1 ]
++ tst r0, #0x02 /* is this resume from power down */
++ ldrne pc, [r1, #4] /* gstatus3 */
++#endif /* CONFIG_S3C2410 */
++#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+ /* mov r10, lr */
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch
new file mode 100644
index 0000000000..6efe24651a
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch
@@ -0,0 +1,45 @@
+Index: u-boot/include/s3c2410.h
+===================================================================
+--- u-boot.orig/include/s3c2410.h
++++ u-boot/include/s3c2410.h
+@@ -233,4 +233,40 @@ static inline S3C2410_SDI * S3C2410_GetB
+ rINTPND;\
+ }
+ /* Wait until rINTPND is changed for the case that the ISR is very short. */
++
++#define S3C2410_MISCCR_USBDEV (0<<3)
++#define S3C2410_MISCCR_USBHOST (1<<3)
++
++#define S3C2410_MISCCR_CLK0_MPLL (0<<4)
++#define S3C2410_MISCCR_CLK0_UPLL (1<<4)
++#define S3C2410_MISCCR_CLK0_FCLK (2<<4)
++#define S3C2410_MISCCR_CLK0_HCLK (3<<4)
++#define S3C2410_MISCCR_CLK0_PCLK (4<<4)
++#define S3C2410_MISCCR_CLK0_DCLK0 (5<<4)
++#define S3C2410_MISCCR_CLK0_MASK (7<<4)
++
++#define S3C2410_MISCCR_CLK1_MPLL (0<<8)
++#define S3C2410_MISCCR_CLK1_UPLL (1<<8)
++#define S3C2410_MISCCR_CLK1_FCLK (2<<8)
++#define S3C2410_MISCCR_CLK1_HCLK (3<<8)
++#define S3C2410_MISCCR_CLK1_PCLK (4<<8)
++#define S3C2410_MISCCR_CLK1_DCLK1 (5<<8)
++#define S3C2410_MISCCR_CLK1_MASK (7<<8)
++
++#define S3C2410_MISCCR_USBSUSPND0 (1<<12)
++#define S3C2410_MISCCR_USBSUSPND1 (1<<13)
++
++#define S3C2410_MISCCR_nRSTCON (1<<16)
++
++#define S3C2410_MISCCR_nEN_SCLK0 (1<<17)
++#define S3C2410_MISCCR_nEN_SCLK1 (1<<18)
++#define S3C2410_MISCCR_nEN_SCLKE (1<<19)
++#define S3C2410_MISCCR_SDSLEEP (7<<17)
++
++#define S3C2410_CLKSLOW_UCLK_OFF (1<<7)
++#define S3C2410_CLKSLOW_MPLL_OFF (1<<5)
++#define S3C2410_CLKSLOW_SLOW (1<<4)
++#define S3C2410_CLKSLOW_SLOWVAL(x) (x)
++#define S3C2410_CLKSLOW_GET_SLOWVAL(x) ((x) & 7)
++
+ #endif /*__S3C2410_H__*/
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch
new file mode 100644
index 0000000000..b775beaa07
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch
@@ -0,0 +1,818 @@
+This patch adds MMC/SD support to the S3C2410 SoC code in
+u-boot
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/cpu/arm920t/s3c24x0/Makefile
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/Makefile
++++ u-boot/cpu/arm920t/s3c24x0/Makefile
+@@ -26,7 +26,7 @@
+ LIB = $(obj)lib$(SOC).a
+
+ COBJS = i2c.o interrupts.o serial.o speed.o \
+- usb_ohci.o nand_read.o nand.o cmd_s3c2410.o
++ usb_ohci.o nand_read.o nand.o mmc.o cmd_s3c2410.o
+
+ SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+Index: u-boot/cpu/arm920t/s3c24x0/mmc.c
+===================================================================
+--- /dev/null
++++ u-boot/cpu/arm920t/s3c24x0/mmc.c
+@@ -0,0 +1,531 @@
++/*
++ * u-boot S3C2410 MMC/SD card driver
++ * (C) Copyright 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on u-boot pxa MMC driver and linux/drivers/mmc/s3c2410mci.c
++ * (C) 2005-2005 Thomas Kleffel
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <config.h>
++#include <common.h>
++#include <mmc.h>
++#include <asm/errno.h>
++#include <asm/io.h>
++#include <s3c2410.h>
++#include <part.h>
++#include <fat.h>
++
++#ifdef CONFIG_MMC
++
++#define CONFIG_MMC_WIDE
++
++static S3C2410_SDI *sdi;
++
++static block_dev_desc_t mmc_dev;
++
++block_dev_desc_t * mmc_get_dev(int dev)
++{
++ return ((block_dev_desc_t *)&mmc_dev);
++}
++
++/*
++ * FIXME needs to read cid and csd info to determine block size
++ * and other parameters
++ */
++static uchar mmc_buf[MMC_BLOCK_SIZE];
++static mmc_csd_t mmc_csd;
++static int mmc_ready = 0;
++static int wide = 0;
++
++
++#define CMD_F_RESP 0x01
++#define CMD_F_RESP_LONG 0x02
++
++static u_int32_t *mmc_cmd(ushort cmd, ulong arg, ushort flags)
++{
++ static u_int32_t resp[5];
++
++ u_int32_t ccon, csta;
++ u_int32_t csta_rdy_bit = S3C2410_SDICMDSTAT_CMDSENT;
++
++ memset(resp, 0, sizeof(resp));
++
++ debug("mmc_cmd CMD%d arg=0x%08x flags=%x\n", cmd, arg, flags);
++
++ sdi->SDICSTA = 0xffffffff;
++ sdi->SDIDSTA = 0xffffffff;
++ sdi->SDIFSTA = 0xffffffff;
++
++ sdi->SDICARG = arg;
++
++ ccon = cmd & S3C2410_SDICMDCON_INDEX;
++ ccon |= S3C2410_SDICMDCON_SENDERHOST|S3C2410_SDICMDCON_CMDSTART;
++
++ if (flags & CMD_F_RESP) {
++ ccon |= S3C2410_SDICMDCON_WAITRSP;
++ csta_rdy_bit = S3C2410_SDICMDSTAT_RSPFIN; /* 1 << 9 */
++ }
++
++ if (flags & CMD_F_RESP_LONG)
++ ccon |= S3C2410_SDICMDCON_LONGRSP;
++
++ sdi->SDICCON = ccon;
++
++ while (1) {
++ csta = sdi->SDICSTA;
++ if (csta & csta_rdy_bit)
++ break;
++ if (csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
++ printf("===============> MMC CMD Timeout\n");
++ sdi->SDICSTA |= S3C2410_SDICMDSTAT_CMDTIMEOUT;
++ break;
++ }
++ }
++
++ debug("final MMC CMD status 0x%x\n", csta);
++
++ sdi->SDICSTA |= csta_rdy_bit;
++
++ if (flags & CMD_F_RESP) {
++ resp[0] = sdi->SDIRSP0;
++ resp[1] = sdi->SDIRSP1;
++ resp[2] = sdi->SDIRSP2;
++ resp[3] = sdi->SDIRSP3;
++ }
++
++ return resp;
++}
++
++#define FIFO_FILL(host) ((host->SDIFSTA & S3C2410_SDIFSTA_COUNTMASK) >> 2)
++
++static int mmc_block_read(uchar *dst, ulong src, ulong len)
++{
++ u_int32_t dcon, fifo;
++ u_int32_t *dst_u32 = (u_int32_t *)dst;
++ u_int32_t *resp;
++
++ if (len == 0)
++ return 0;
++
++ debug("mmc_block_rd dst %lx src %lx len %d\n", (ulong)dst, src, len);
++
++ /* set block len */
++ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, len, CMD_F_RESP);
++ sdi->SDIBSIZE = len;
++
++ //sdi->SDIPRE = 0xff;
++
++ /* setup data */
++ dcon = (len >> 9) & S3C2410_SDIDCON_BLKNUM;
++ dcon |= S3C2410_SDIDCON_BLOCKMODE;
++ dcon |= S3C2410_SDIDCON_RXAFTERCMD|S3C2410_SDIDCON_XFER_RXSTART;
++ if (wide)
++ dcon |= S3C2410_SDIDCON_WIDEBUS;
++ sdi->SDIDCON = dcon;
++
++ /* send read command */
++ resp = mmc_cmd(MMC_CMD_READ_BLOCK, src, CMD_F_RESP);
++
++ while (len > 0) {
++ u_int32_t sdidsta = sdi->SDIDSTA;
++ fifo = FIFO_FILL(sdi);
++ if (sdidsta & (S3C2410_SDIDSTA_FIFOFAIL|
++ S3C2410_SDIDSTA_CRCFAIL|
++ S3C2410_SDIDSTA_RXCRCFAIL|
++ S3C2410_SDIDSTA_DATATIMEOUT)) {
++ printf("mmc_block_read: err SDIDSTA=0x%08x\n", sdidsta);
++ return -EIO;
++ }
++
++ while (fifo--) {
++ //debug("dst_u32 = 0x%08x\n", dst_u32);
++ *(dst_u32++) = sdi->SDIDAT;
++ if (len >= 4)
++ len -= 4;
++ else {
++ len = 0;
++ break;
++ }
++ }
++ }
++
++ debug("waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
++ while (!(sdi->SDIDSTA & (1 << 4))) {}
++ debug("done waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
++
++ sdi->SDIDCON = 0;
++
++ if (!(sdi->SDIDSTA & S3C2410_SDIDSTA_XFERFINISH))
++ debug("mmc_block_read; transfer not finished!\n");
++
++ return 0;
++}
++
++static int mmc_block_write(ulong dst, uchar *src, int len)
++{
++ printf("MMC block write not yet supported on S3C2410!\n");
++ return -1;
++}
++
++
++int mmc_read(ulong src, uchar *dst, int size)
++{
++ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
++ ulong mmc_block_size, mmc_block_address;
++
++ if (size == 0)
++ return 0;
++
++ if (!mmc_ready) {
++ printf("Please initialize the MMC first\n");
++ return -1;
++ }
++
++ mmc_block_size = MMC_BLOCK_SIZE;
++ mmc_block_address = ~(mmc_block_size - 1);
++
++ src -= CFG_MMC_BASE;
++ end = src + size;
++ part_start = ~mmc_block_address & src;
++ part_end = ~mmc_block_address & end;
++ aligned_start = mmc_block_address & src;
++ aligned_end = mmc_block_address & end;
++
++ /* all block aligned accesses */
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_start) {
++ part_len = mmc_block_size - part_start;
++ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0)
++ return -1;
++
++ memcpy(dst, mmc_buf+part_start, part_len);
++ dst += part_len;
++ src += part_len;
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ for (; src < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
++ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read((uchar *)(dst), src, mmc_block_size)) < 0)
++ return -1;
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_end && src < end) {
++ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0)
++ return -1;
++
++ memcpy(dst, mmc_buf, part_end);
++ }
++ return 0;
++}
++
++int mmc_write(uchar *src, ulong dst, int size)
++{
++ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
++ ulong mmc_block_size, mmc_block_address;
++
++ if (size == 0)
++ return 0;
++
++ if (!mmc_ready) {
++ printf("Please initialize the MMC first\n");
++ return -1;
++ }
++
++ mmc_block_size = MMC_BLOCK_SIZE;
++ mmc_block_address = ~(mmc_block_size - 1);
++
++ dst -= CFG_MMC_BASE;
++ end = dst + size;
++ part_start = ~mmc_block_address & dst;
++ part_end = ~mmc_block_address & end;
++ aligned_start = mmc_block_address & dst;
++ aligned_end = mmc_block_address & end;
++
++ /* all block aligned accesses */
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_start) {
++ part_len = mmc_block_size - part_start;
++ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ (ulong)src, dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0)
++ return -1;
++
++ memcpy(mmc_buf+part_start, src, part_len);
++ if ((mmc_block_write(aligned_start, mmc_buf, mmc_block_size)) < 0)
++ return -1;
++
++ dst += part_len;
++ src += part_len;
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ for (; dst < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
++ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_write(dst, (uchar *)src, mmc_block_size)) < 0)
++ return -1;
++
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_end && dst < end) {
++ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0)
++ return -1;
++
++ memcpy(mmc_buf, src, part_end);
++ if ((mmc_block_write(aligned_end, mmc_buf, mmc_block_size)) < 0)
++ return -1;
++
++ }
++ return 0;
++}
++
++ulong mmc_bread(int dev_num, ulong blknr, ulong blkcnt, void *dst)
++{
++ int mmc_block_size = MMC_BLOCK_SIZE;
++ ulong src = blknr * mmc_block_size + CFG_MMC_BASE;
++
++ mmc_read(src, dst, blkcnt*mmc_block_size);
++ return blkcnt;
++}
++
++/* MMC_DEFAULT_RCA should probably be just 1, but this may break other code
++ that expects it to be shifted. */
++static u_int16_t rca = MMC_DEFAULT_RCA >> 16;
++
++static u_int32_t mmc_size(const struct mmc_csd *csd)
++{
++ u_int32_t block_len, mult, blocknr;
++
++ block_len = csd->read_bl_len << 12;
++ mult = csd->c_size_mult1 << 8;
++ blocknr = (csd->c_size+1) * mult;
++
++ return blocknr * block_len;
++}
++
++struct sd_cid {
++ char pnm_0; /* product name */
++ char oid_1; /* OEM/application ID */
++ char oid_0;
++ uint8_t mid; /* manufacturer ID */
++ char pnm_4;
++ char pnm_3;
++ char pnm_2;
++ char pnm_1;
++ uint8_t psn_2; /* product serial number */
++ uint8_t psn_1;
++ uint8_t psn_0; /* MSB */
++ uint8_t prv; /* product revision */
++ uint8_t crc; /* CRC7 checksum, b0 is unused and set to 1 */
++ uint8_t mdt_1; /* manufacturing date, LSB, RRRRyyyy yyyymmmm */
++ uint8_t mdt_0; /* MSB */
++ uint8_t psn_3; /* LSB */
++};
++
++static void print_mmc_cid(mmc_cid_t *cid)
++{
++ printf("MMC found. Card desciption is:\n");
++ printf("Manufacturer ID = %02x%02x%02x\n",
++ cid->id[0], cid->id[1], cid->id[2]);
++ printf("HW/FW Revision = %x %x\n",cid->hwrev, cid->fwrev);
++ cid->hwrev = cid->fwrev = 0; /* null terminate string */
++ printf("Product Name = %s\n",cid->name);
++ printf("Serial Number = %02x%02x%02x\n",
++ cid->sn[0], cid->sn[1], cid->sn[2]);
++ printf("Month = %d\n",cid->month);
++ printf("Year = %d\n",1997 + cid->year);
++}
++
++static void print_sd_cid(const struct sd_cid *cid)
++{
++ printf("Manufacturer: 0x%02x, OEM \"%c%c\"\n",
++ cid->mid, cid->oid_0, cid->oid_1);
++ printf("Product name: \"%c%c%c%c%c\", revision %d.%d\n",
++ cid->pnm_0, cid->pnm_1, cid->pnm_2, cid->pnm_3, cid->pnm_4,
++ cid->prv >> 4, cid->prv & 15);
++ printf("Serial number: %u\n",
++ cid->psn_0 << 24 | cid->psn_1 << 16 | cid->psn_2 << 8 |
++ cid->psn_3);
++ printf("Manufacturing date: %d/%d\n",
++ cid->mdt_1 & 15,
++ 2000+((cid->mdt_0 & 15) << 4)+((cid->mdt_1 & 0xf0) >> 4));
++ printf("CRC: 0x%02x, b0 = %d\n",
++ cid->crc >> 1, cid->crc & 1);
++}
++
++int mmc_init(int verbose)
++{
++ int retries, rc = -ENODEV;
++ int is_sd = 0;
++ u_int32_t *resp;
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++
++ sdi = S3C2410_GetBase_SDI();
++
++ debug("mmc_init(PCLK=%u)\n", get_PCLK());
++
++ clk_power->CLKCON |= (1 << 9);
++
++ /* S3C2410 has some bug that prevents reliable operation at higher speed */
++ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
++ sdi->SDIPRE = 0x02; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
++ sdi->SDIBSIZE = 512;
++ sdi->SDIDTIMER = 0xffff;
++ sdi->SDIIMSK = 0x0;
++ sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2440_SDICON_MMCCLOCK;
++ udelay(125000); /* FIXME: 74 SDCLK cycles */
++
++ mmc_csd.c_size = 0;
++
++ /* reset */
++ retries = 10;
++ resp = mmc_cmd(MMC_CMD_RESET, 0, 0);
++
++ printf("trying to detect SD Card...\n");
++ while (retries--) {
++ udelay(100000);
++ resp = mmc_cmd(55, 0x00000000, CMD_F_RESP);
++ resp = mmc_cmd(41, 0x00300000, CMD_F_RESP);
++
++ if (resp[0] & (1 << 31)) {
++ is_sd = 1;
++ break;
++ }
++ }
++
++ if (retries == 0 && !is_sd) {
++ retries = 10;
++ printf("failed to detect SD Card, trying MMC\n");
++ resp = mmc_cmd(MMC_CMD_SEND_OP_COND, 0x00ffc000, CMD_F_RESP);
++ while (retries-- && resp && !(resp[4] & 0x80)) {
++ debug("resp %x %x\n", resp[0], resp[1]);
++ udelay(50);
++ resp = mmc_cmd(1, 0x00ffff00, CMD_F_RESP);
++ }
++ }
++
++ /* try to get card id */
++ resp = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, CMD_F_RESP|CMD_F_RESP_LONG);
++ if (resp) {
++ if (!is_sd) {
++ /* TODO configure mmc driver depending on card
++ attributes */
++ mmc_cid_t *cid = (mmc_cid_t *)resp;
++
++ if (verbose)
++ print_mmc_cid(cid);
++ sprintf((char *) mmc_dev.vendor,
++ "Man %02x%02x%02x Snr %02x%02x%02x",
++ cid->id[0], cid->id[1], cid->id[2],
++ cid->sn[0], cid->sn[1], cid->sn[2]);
++ sprintf((char *) mmc_dev.product,"%s",cid->name);
++ sprintf((char *) mmc_dev.revision,"%x %x",
++ cid->hwrev, cid->fwrev);
++ }
++ else {
++ struct sd_cid *cid = (struct sd_cid *) resp;
++
++ if (verbose)
++ print_sd_cid(cid);
++ sprintf((char *) mmc_dev.vendor,
++ "Man %02 OEM %c%c \"%c%c%c%c%c\"",
++ cid->mid, cid->oid_0, cid->oid_1,
++ cid->pnm_0, cid->pnm_1, cid->pnm_2, cid->pnm_3,
++ cid->pnm_4);
++ sprintf((char *) mmc_dev.product, "%d",
++ cid->psn_0 << 24 | cid->psn_1 << 16 |
++ cid->psn_2 << 8 | cid->psn_3);
++ sprintf((char *) mmc_dev.revision, "%d.%d",
++ cid->prv >> 4, cid->prv & 15);
++ }
++
++ /* fill in device description */
++ mmc_dev.if_type = IF_TYPE_MMC;
++ mmc_dev.part_type = PART_TYPE_DOS;
++ mmc_dev.dev = 0;
++ mmc_dev.lun = 0;
++ mmc_dev.type = 0;
++ /* FIXME fill in the correct size (is set to 32MByte) */
++ mmc_dev.blksz = 512;
++ mmc_dev.lba = 0x10000;
++ mmc_dev.removable = 0;
++ mmc_dev.block_read = mmc_bread;
++
++ /* MMC exists, get CSD too */
++ resp = mmc_cmd(MMC_CMD_SET_RCA, MMC_DEFAULT_RCA, CMD_F_RESP);
++ if (is_sd)
++ rca = resp[0] >> 16;
++
++ resp = mmc_cmd(MMC_CMD_SEND_CSD, rca<<16, CMD_F_RESP|CMD_F_RESP_LONG);
++ if (resp) {
++ mmc_csd_t *csd = (mmc_csd_t *)resp;
++ memcpy(&mmc_csd, csd, sizeof(csd));
++ rc = 0;
++ mmc_ready = 1;
++ /* FIXME add verbose printout for csd */
++ printf("READ_BL_LEN=%u, C_SIZE_MULT=%u, C_SIZE=%u\n",
++ csd->read_bl_len, csd->c_size_mult1, csd->c_size);
++ printf("size = %u\n", mmc_size(csd));
++ }
++ }
++
++ resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca<<16, CMD_F_RESP);
++
++#ifdef CONFIG_MMC_WIDE
++ if (is_sd) {
++ resp = mmc_cmd(55, rca<<16, CMD_F_RESP);
++ resp = mmc_cmd(6, 0x02, CMD_F_RESP);
++ wide = 1;
++ }
++#endif
++
++ fat_register_device(&mmc_dev,1); /* partitions start counting with 1 */
++
++ return rc;
++}
++
++int
++mmc_ident(block_dev_desc_t *dev)
++{
++ return 0;
++}
++
++int
++mmc2info(ulong addr)
++{
++ /* FIXME hard codes to 32 MB device */
++ if (addr >= CFG_MMC_BASE && addr < CFG_MMC_BASE + 0x02000000)
++ return 1;
++
++ return 0;
++}
++
++#endif /* CONFIG_MMC */
+Index: u-boot/include/asm-arm/arch-s3c24x0/mmc.h
+===================================================================
+--- /dev/null
++++ u-boot/include/asm-arm/arch-s3c24x0/mmc.h
+@@ -0,0 +1,112 @@
++/*
++ * linux/drivers/mmc/mmc_pxa.h
++ *
++ * Author: Vladimir Shebordaev, Igor Oblakov
++ * Copyright: MontaVista Software Inc.
++ *
++ * $Id: mmc_pxa.h,v 0.3.1.6 2002/09/25 19:25:48 ted Exp ted $
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __MMC_PXA_P_H__
++#define __MMC_PXA_P_H__
++
++#include <asm/arch/regs-sdi.h>
++
++#define MMC_DEFAULT_RCA (1<<16)
++
++#define MMC_BLOCK_SIZE 512
++#define MMC_CMD_RESET 0
++#define MMC_CMD_SEND_OP_COND 1
++#define MMC_CMD_ALL_SEND_CID 2
++#define MMC_CMD_SET_RCA 3
++#define MMC_CMD_SELECT_CARD 7
++#define MMC_CMD_SEND_CSD 9
++#define MMC_CMD_SEND_CID 10
++#define MMC_CMD_SEND_STATUS 13
++#define MMC_CMD_SET_BLOCKLEN 16
++#define MMC_CMD_READ_BLOCK 17
++#define MMC_CMD_RD_BLK_MULTI 18
++#define MMC_CMD_WRITE_BLOCK 24
++
++#define MMC_MAX_BLOCK_SIZE 512
++
++#define MMC_R1_IDLE_STATE 0x01
++#define MMC_R1_ERASE_STATE 0x02
++#define MMC_R1_ILLEGAL_CMD 0x04
++#define MMC_R1_COM_CRC_ERR 0x08
++#define MMC_R1_ERASE_SEQ_ERR 0x01
++#define MMC_R1_ADDR_ERR 0x02
++#define MMC_R1_PARAM_ERR 0x04
++
++#define MMC_R1B_WP_ERASE_SKIP 0x0002
++#define MMC_R1B_ERR 0x0004
++#define MMC_R1B_CC_ERR 0x0008
++#define MMC_R1B_CARD_ECC_ERR 0x0010
++#define MMC_R1B_WP_VIOLATION 0x0020
++#define MMC_R1B_ERASE_PARAM 0x0040
++#define MMC_R1B_OOR 0x0080
++#define MMC_R1B_IDLE_STATE 0x0100
++#define MMC_R1B_ERASE_RESET 0x0200
++#define MMC_R1B_ILLEGAL_CMD 0x0400
++#define MMC_R1B_COM_CRC_ERR 0x0800
++#define MMC_R1B_ERASE_SEQ_ERR 0x1000
++#define MMC_R1B_ADDR_ERR 0x2000
++#define MMC_R1B_PARAM_ERR 0x4000
++
++typedef struct mmc_cid
++{
++ /* FIXME: BYTE_ORDER */
++ uchar year:4,
++ month:4;
++ uchar sn[3];
++ uchar fwrev:4,
++ hwrev:4;
++ uchar name[6];
++ uchar id[3];
++} mmc_cid_t;
++
++typedef struct mmc_csd
++{
++ uchar ecc:2,
++ file_format:2,
++ tmp_write_protect:1,
++ perm_write_protect:1,
++ copy:1,
++ file_format_grp:1;
++ uint64_t content_prot_app:1,
++ rsvd3:4,
++ write_bl_partial:1,
++ write_bl_len:4,
++ r2w_factor:3,
++ default_ecc:2,
++ wp_grp_enable:1,
++ wp_grp_size:5,
++ erase_grp_mult:5,
++ erase_grp_size:5,
++ c_size_mult1:3,
++ vdd_w_curr_max:3,
++ vdd_w_curr_min:3,
++ vdd_r_curr_max:3,
++ vdd_r_curr_min:3,
++ c_size:12,
++ rsvd2:2,
++ dsr_imp:1,
++ read_blk_misalign:1,
++ write_blk_misalign:1,
++ read_bl_partial:1;
++
++ ushort read_bl_len:4,
++ ccc:12;
++ uchar tran_speed;
++ uchar nsac;
++ uchar taac;
++ uchar rsvd1:2,
++ spec_vers:4,
++ csd_structure:2;
++} mmc_csd_t;
++
++
++#endif /* __MMC_PXA_P_H__ */
+Index: u-boot/include/asm-arm/arch-s3c24x0/regs-sdi.h
+===================================================================
+--- /dev/null
++++ u-boot/include/asm-arm/arch-s3c24x0/regs-sdi.h
+@@ -0,0 +1,110 @@
++/* linux/include/asm/arch-s3c2410/regs-sdi.h
++ *
++ * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>
++ * http://www.simtec.co.uk/products/SWLINUX/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * S3C2410 MMC/SDIO register definitions
++ *
++ * Changelog:
++ * 18-Aug-2004 Ben Dooks Created initial file
++ * 29-Nov-2004 Koen Martens Added some missing defines, fixed duplicates
++ * 29-Nov-2004 Ben Dooks Updated Koen's patch
++*/
++
++#ifndef __ASM_ARM_REGS_SDI
++#define __ASM_ARM_REGS_SDI "regs-sdi.h"
++
++#define S3C2440_SDICON_SDRESET (1<<8)
++#define S3C2440_SDICON_MMCCLOCK (1<<5)
++#define S3C2410_SDICON_BYTEORDER (1<<4)
++#define S3C2410_SDICON_SDIOIRQ (1<<3)
++#define S3C2410_SDICON_RWAITEN (1<<2)
++#define S3C2410_SDICON_FIFORESET (1<<1)
++#define S3C2410_SDICON_CLOCKTYPE (1<<0)
++
++#define S3C2410_SDICMDCON_ABORT (1<<12)
++#define S3C2410_SDICMDCON_WITHDATA (1<<11)
++#define S3C2410_SDICMDCON_LONGRSP (1<<10)
++#define S3C2410_SDICMDCON_WAITRSP (1<<9)
++#define S3C2410_SDICMDCON_CMDSTART (1<<8)
++#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
++#define S3C2410_SDICMDCON_INDEX (0x3f)
++
++#define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
++#define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
++#define S3C2410_SDICMDSTAT_CMDTIMEOUT (1<<10)
++#define S3C2410_SDICMDSTAT_RSPFIN (1<<9)
++#define S3C2410_SDICMDSTAT_XFERING (1<<8)
++#define S3C2410_SDICMDSTAT_INDEX (0xff)
++
++#define S3C2440_SDIDCON_DS_BYTE (0<<22)
++#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
++#define S3C2440_SDIDCON_DS_WORD (2<<22)
++#define S3C2410_SDIDCON_IRQPERIOD (1<<21)
++#define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
++#define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
++#define S3C2410_SDIDCON_BUSYAFTERCMD (1<<18)
++#define S3C2410_SDIDCON_BLOCKMODE (1<<17)
++#define S3C2410_SDIDCON_WIDEBUS (1<<16)
++#define S3C2410_SDIDCON_DMAEN (1<<15)
++#define S3C2410_SDIDCON_STOP (1<<14)
++#define S3C2440_SDIDCON_DATSTART (1<<14)
++#define S3C2410_SDIDCON_DATMODE (3<<12)
++#define S3C2410_SDIDCON_BLKNUM (0x7ff)
++
++/* constants for S3C2410_SDIDCON_DATMODE */
++#define S3C2410_SDIDCON_XFER_READY (0<<12)
++#define S3C2410_SDIDCON_XFER_CHKSTART (1<<12)
++#define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
++#define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
++
++#define S3C2410_SDIDCNT_BLKNUM_MASK (0xFFF)
++#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
++
++#define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
++#define S3C2410_SDIDSTA_SDIOIRQDETECT (1<<9)
++#define S3C2410_SDIDSTA_FIFOFAIL (1<<8) /* reserved on 2440 */
++#define S3C2410_SDIDSTA_CRCFAIL (1<<7)
++#define S3C2410_SDIDSTA_RXCRCFAIL (1<<6)
++#define S3C2410_SDIDSTA_DATATIMEOUT (1<<5)
++#define S3C2410_SDIDSTA_XFERFINISH (1<<4)
++#define S3C2410_SDIDSTA_BUSYFINISH (1<<3)
++#define S3C2410_SDIDSTA_SBITERR (1<<2) /* reserved on 2410a/2440 */
++#define S3C2410_SDIDSTA_TXDATAON (1<<1)
++#define S3C2410_SDIDSTA_RXDATAON (1<<0)
++
++#define S3C2440_SDIFSTA_FIFORESET (1<<16)
++#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
++#define S3C2410_SDIFSTA_TFDET (1<<13)
++#define S3C2410_SDIFSTA_RFDET (1<<12)
++#define S3C2410_SDIFSTA_TFHALF (1<<11)
++#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
++#define S3C2410_SDIFSTA_RFLAST (1<<9)
++#define S3C2410_SDIFSTA_RFFULL (1<<8)
++#define S3C2410_SDIFSTA_RFHALF (1<<7)
++#define S3C2410_SDIFSTA_COUNTMASK (0x7f)
++
++#define S3C2410_SDIIMSK_RESPONSECRC (1<<17)
++#define S3C2410_SDIIMSK_CMDSENT (1<<16)
++#define S3C2410_SDIIMSK_CMDTIMEOUT (1<<15)
++#define S3C2410_SDIIMSK_RESPONSEND (1<<14)
++#define S3C2410_SDIIMSK_READWAIT (1<<13)
++#define S3C2410_SDIIMSK_SDIOIRQ (1<<12)
++#define S3C2410_SDIIMSK_FIFOFAIL (1<<11)
++#define S3C2410_SDIIMSK_CRCSTATUS (1<<10)
++#define S3C2410_SDIIMSK_DATACRC (1<<9)
++#define S3C2410_SDIIMSK_DATATIMEOUT (1<<8)
++#define S3C2410_SDIIMSK_DATAFINISH (1<<7)
++#define S3C2410_SDIIMSK_BUSYFINISH (1<<6)
++#define S3C2410_SDIIMSK_SBITERR (1<<5) /* reserved 2440/2410a */
++#define S3C2410_SDIIMSK_TXFIFOHALF (1<<4)
++#define S3C2410_SDIIMSK_TXFIFOEMPTY (1<<3)
++#define S3C2410_SDIIMSK_RXFIFOLAST (1<<2)
++#define S3C2410_SDIIMSK_RXFIFOFULL (1<<1)
++#define S3C2410_SDIIMSK_RXFIFOHALF (1<<0)
++
++#endif /* __ASM_ARM_REGS_SDI */
+Index: u-boot/include/s3c24x0.h
+===================================================================
+--- u-boot.orig/include/s3c24x0.h
++++ u-boot/include/s3c24x0.h
+@@ -637,13 +637,7 @@
+ S3C24X0_REG32 SDIDCNT;
+ S3C24X0_REG32 SDIDSTA;
+ S3C24X0_REG32 SDIFSTA;
+-#ifdef __BIG_ENDIAN
+- S3C24X0_REG8 res[3];
+- S3C24X0_REG8 SDIDAT;
+-#else
+- S3C24X0_REG8 SDIDAT;
+- S3C24X0_REG8 res[3];
+-#endif
++ S3C24X0_REG32 SDIDAT;
+ S3C24X0_REG32 SDIIMSK;
+ } /*__attribute__((__packed__))*/ S3C2410_SDI;
+
+@@ -1123,11 +1117,7 @@
+ #define rSDIDatCnt (*(volatile unsigned *)0x5A000030)
+ #define rSDIDatSta (*(volatile unsigned *)0x5A000034)
+ #define rSDIFSTA (*(volatile unsigned *)0x5A000038)
+-#ifdef __BIG_ENDIAN
+-#define rSDIDAT (*(volatile unsigned char *)0x5A00003F)
+-#else
+-#define rSDIDAT (*(volatile unsigned char *)0x5A00003C)
+-#endif
++#define rSDIDAT (*(volatile unsigned *)0x5A00003C)
+ #define rSDIIntMsk (*(volatile unsigned *)0x5A000040)
+
+ #endif
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch
new file mode 100644
index 0000000000..dc363bbbab
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch
@@ -0,0 +1,525 @@
+This patch adds NAND (including boot-from-NAND via steppingstone) support to
+the S3C2410 SoC code in u-boot
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/cpu/arm920t/s3c24x0/Makefile
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/Makefile 2007-02-28 03:47:44.000000000 +0100
++++ u-boot/cpu/arm920t/s3c24x0/Makefile 2007-03-01 14:29:32.000000000 +0100
+@@ -26,7 +26,7 @@
+ LIB = $(obj)lib$(SOC).a
+
+ COBJS = i2c.o interrupts.o serial.o speed.o \
+- usb_ohci.o
++ usb_ohci.o nand_read.o nand.o
+
+ SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+Index: u-boot/cpu/arm920t/s3c24x0/nand.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot/cpu/arm920t/s3c24x0/nand.c 2007-03-01 14:30:27.000000000 +0100
+@@ -0,0 +1,225 @@
++/*
++ * (C) Copyright 2006 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if 0
++#define DEBUGN printf
++#else
++#define DEBUGN(x, args ...) {}
++#endif
++
++#if (CONFIG_COMMANDS & CFG_CMD_NAND)
++#if !defined(CFG_NAND_LEGACY)
++
++#include <nand.h>
++#include <s3c2410.h>
++
++#define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REGi(x) (*(volatile unsigned int *)(x))
++
++#define NF_BASE 0x4e000000
++#define NFCONF __REGi(NF_BASE + 0x0)
++#define NFCMD __REGb(NF_BASE + 0x4)
++#define NFADDR __REGb(NF_BASE + 0x8)
++#define NFDATA __REGb(NF_BASE + 0xc)
++#define NFSTAT __REGb(NF_BASE + 0x10)
++#define NFECC0 __REGb(NF_BASE + 0x14)
++#define NFECC1 __REGb(NF_BASE + 0x15)
++#define NFECC2 __REGb(NF_BASE + 0x16)
++
++#define S3C2410_NFCONF_EN (1<<15)
++#define S3C2410_NFCONF_512BYTE (1<<14)
++#define S3C2410_NFCONF_4STEP (1<<13)
++#define S3C2410_NFCONF_INITECC (1<<12)
++#define S3C2410_NFCONF_nFCE (1<<11)
++#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
++#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
++#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
++
++static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip *chip = mtd->priv;
++
++ DEBUGN("hwcontrol(): 0x%02x: ", cmd);
++
++ switch (cmd) {
++ case NAND_CTL_SETNCE:
++ NFCONF &= ~S3C2410_NFCONF_nFCE;
++ DEBUGN("NFCONF=0x%08x\n", NFCONF);
++ break;
++ case NAND_CTL_CLRNCE:
++ NFCONF |= S3C2410_NFCONF_nFCE;
++ DEBUGN("NFCONF=0x%08x\n", NFCONF);
++ break;
++ case NAND_CTL_SETALE:
++ chip->IO_ADDR_W = NF_BASE + 0x8;
++ DEBUGN("SETALE\n");
++ break;
++ case NAND_CTL_SETCLE:
++ chip->IO_ADDR_W = NF_BASE + 0x4;
++ DEBUGN("SETCLE\n");
++ break;
++ default:
++ chip->IO_ADDR_W = NF_BASE + 0xc;
++ break;
++ }
++ return;
++}
++
++static int s3c2410_dev_ready(struct mtd_info *mtd)
++{
++ DEBUGN("dev_ready\n");
++ return (NFSTAT & 0x01);
++}
++
++static void s3c2410_cmdfunc(struct mtd_info *mtd, unsigned cmd,
++ int column, int page_addr)
++{
++ DEBUGN("cmdfunc(): 0x%02x, col=%d, page=%d\n", cmd, column, page_addr);
++
++ switch (cmd) {
++ case NAND_CMD_READ0:
++ case NAND_CMD_READ1:
++ case NAND_CMD_READOOB:
++ NFCMD = cmd;
++ NFADDR = column & 0xff;
++ NFADDR = page_addr & 0xff;
++ NFADDR = (page_addr >> 8) & 0xff;
++ NFADDR = (page_addr >> 16) & 0xff;
++ break;
++ case NAND_CMD_READID:
++ NFCMD = cmd;
++ NFADDR = 0;
++ break;
++ case NAND_CMD_PAGEPROG:
++ NFCMD = cmd;
++ printf("PAGEPROG not implemented\n");
++ break;
++ case NAND_CMD_ERASE1:
++ NFCMD = cmd;
++ NFADDR = page_addr & 0xff;
++ NFADDR = (page_addr >> 8) & 0xff;
++ NFADDR = (page_addr >> 16) & 0xff;
++ break;
++ case NAND_CMD_ERASE2:
++ NFCMD = cmd;
++ break;
++ case NAND_CMD_SEQIN:
++ printf("SEQIN not implemented\n");
++ break;
++ case NAND_CMD_STATUS:
++ NFCMD = cmd;
++ break;
++ case NAND_CMD_RESET:
++ NFCMD = cmd;
++ break;
++ default:
++ break;
++ }
++
++ while (!s3c2410_dev_ready(mtd));
++}
++
++#ifdef CONFIG_S3C2410_NAND_HWECC
++void s3c2410_nand_enable_hwecc(struct mtd_info *mtd, int mode)
++{
++ DEBUGN("s3c2410_nand_enable_hwecc(%p, %d)\n", mtd ,mode);
++ NFCONF |= S3C2410_NFCONF_INITECC;
++}
++
++static int s3c2410_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code)
++{
++ ecc_code[0] = NFECC0;
++ ecc_code[1] = NFECC1;
++ ecc_code[2] = NFECC2;
++ DEBUGN("s3c2410_nand_calculate_hwecc(%p,): 0x%02x 0x%02x 0x%02x\n", mtd , ecc_code[0], ecc_code[1], ecc_code[2]);
++
++ return 0;
++}
++
++int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc)
++{
++ if (read_ecc[0] == calc_ecc[0] &&
++ read_ecc[1] == calc_ecc[1] &&
++ read_ecc[2] == calc_ecc[2])
++ return 0;
++
++ printf("s3c2410_nand_correct_data: not implemented\n");
++ return -1;
++}
++#endif
++
++int board_nand_init(struct nand_chip *nand)
++{
++ u_int32_t cfg;
++ u_int8_t tacls, twrph0, twrph1;
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++
++ DEBUGN("board_nand_init()\n");
++
++ clk_power->CLKCON |= (1 << 4);
++
++ /* initialize hardware */
++ twrph0 = 3; twrph1 = 0; tacls = 0;
++
++ cfg = S3C2410_NFCONF_EN;
++ cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
++ cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
++ cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
++
++ NFCONF = cfg;
++ //NFCONF = 0xf842;
++
++ /* initialize nand_chip data structure */
++ nand->IO_ADDR_R = nand->IO_ADDR_W = 0x4e00000c;
++
++ /* read_buf and write_buf are default */
++ /* read_byte and write_byte are default */
++
++ /* hwcontrol always must be implemented */
++ nand->hwcontrol = s3c2410_hwcontrol;
++
++ nand->dev_ready = s3c2410_dev_ready;
++
++#ifdef CONFIG_S3C2410_NAND_HWECC
++ nand->enable_hwecc = s3c2410_nand_enable_hwecc;
++ nand->calculate_ecc = s3c2410_nand_calculate_ecc;
++ nand->correct_data = s3c2410_nand_correct_data;
++ nand->eccmode = NAND_ECC_HW3_512;
++#else
++ nand->eccmode = NAND_ECC_SOFT;
++#endif
++
++#ifdef CONFIG_S3C2410_NAND_BBT
++ nand->options = NAND_USE_FLASH_BBT;
++#else
++ nand->options = 0;
++#endif
++
++ DEBUGN("end of nand_init\n");
++
++ return 0;
++}
++
++#else
++ #error "U-Boot legacy NAND support not available for S3C2410"
++#endif
++#endif
+Index: u-boot/cpu/arm920t/s3c24x0/nand_read.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot/cpu/arm920t/s3c24x0/nand_read.c 2007-02-28 03:51:24.000000000 +0100
+@@ -0,0 +1,98 @@
++/*
++ * nand_read.c: Simple NAND read functions for booting from NAND
++ *
++ * This is used by cpu/arm920/start.S assembler code,
++ * and the board-specific linker script must make sure this
++ * file is linked within the first 4kB of NAND flash.
++ *
++ * Taken from GPLv2 licensed vivi bootloader,
++ * Copyright (C) 2002 MIZI Research, Inc.
++ *
++ * Author: Hwang, Chideok <hwang@mizi.com>
++ * Date : $Date: 2004/02/04 10:37:37 $
++ *
++ * u-boot integration and bad-block skipping (C) 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ */
++
++#include <common.h>
++
++#ifdef CONFIG_S3C2410_NAND_BOOT
++
++#define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REGi(x) (*(volatile unsigned int *)(x))
++#define NF_BASE 0x4e000000
++#define NFCONF __REGi(NF_BASE + 0x0)
++#define NFCMD __REGb(NF_BASE + 0x4)
++#define NFADDR __REGb(NF_BASE + 0x8)
++#define NFDATA __REGb(NF_BASE + 0xc)
++#define NFSTAT __REGb(NF_BASE + 0x10)
++
++#define BUSY 1
++inline void wait_idle(void)
++{
++ int i;
++
++ while (!(NFSTAT & BUSY))
++ for (i=0; i<10; i++);
++}
++
++#define NAND_SECTOR_SIZE 512
++#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
++#define NAND_PAGE_SIZE 0x4000
++
++/* low level nand read function */
++int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
++{
++ int i, j;
++
++ if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))
++ return -1; /* invalid alignment */
++
++ /* chip Enable */
++ NFCONF &= ~0x800;
++ for (i=0; i<10; i++);
++
++ for (i=start_addr; i < (start_addr + size);) {
++#ifdef CONFIG_S3C2410_NAND_SKIP_BAD
++ if (start_addr % NAND_PAGE_SIZE == 0) {
++ unsigned char data;
++ NFCMD = 0x50;
++ NFADDR = 517&0xf;
++ NFADDR = (i >> 9) & 0xff;
++ NFADDR = (i >> 17) & 0xff;
++ NFADDR = (i >> 25) & 0xff;
++ wait_idle();
++ data = (NFDATA & 0xff);
++ if (data != 0xff) {
++ /* Bad block */
++ i += NAND_PAGE_SIZE;
++ size += NAND_PAGE_SIZE;
++ continue;
++ }
++ }
++#endif
++ /* READ0 */
++ NFCMD = 0;
++
++ /* Write Address */
++ NFADDR = i & 0xff;
++ NFADDR = (i >> 9) & 0xff;
++ NFADDR = (i >> 17) & 0xff;
++ NFADDR = (i >> 25) & 0xff;
++
++ wait_idle();
++
++ for (j=0; j < NAND_SECTOR_SIZE; j++, i++) {
++ *buf = (NFDATA & 0xff);
++ buf++;
++ }
++ }
++
++ /* chip Disable */
++ NFCONF |= 0x800; /* chip disable */
++
++ return 0;
++}
++
++#endif /* CONFIG_S3C2410_NAND_BOOT */
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S 2007-02-28 03:47:44.000000000 +0100
++++ u-boot/cpu/arm920t/start.S 2007-03-01 14:29:22.000000000 +0100
+@@ -5,6 +5,10 @@
+ * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
+ * Copyright (c) 2002 Gary Jennejohn <gj@denx.de>
+ *
++ * S3C2410 NAND portions
++ * Copyright (c) 2001 MIZI Research, Inc.
++ * Copyright (c) 2006 OpenMoko, Inc. (Harald Welte <laforge@openmmoko.org>
++ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+@@ -27,6 +31,7 @@
+
+ #include <config.h>
+ #include <version.h>
++#include <s3c2410.h>
+
+
+ /*
+@@ -161,6 +166,7 @@
+ #endif
+
+ #ifndef CONFIG_SKIP_RELOCATE_UBOOT
++#ifndef CONFIG_S3C2410_NAND_BOOT
+ relocate: /* relocate U-Boot to RAM */
+ adr r0, _start /* r0 <- current position of code */
+ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
+@@ -177,6 +183,93 @@
+ stmia r1!, {r3-r10} /* copy to target address [r1] */
+ cmp r0, r2 /* until source end addreee [r2] */
+ ble copy_loop
++#else /* NAND_BOOT */
++relocate:
++copy_myself:
++ /* mov r10, lr */
++
++ @ reset NAND
++ mov r1, #S3C2410_NAND_BASE
++ ldr r2, =0xf842 @ initial value enable tacls=3,rph0=6,rph1=0
++ str r2, [r1, #oNFCONF]
++ ldr r2, [r1, #oNFCONF]
++ bic r2, r2, #0x800 @ enable chip
++ str r2, [r1, #oNFCONF]
++ mov r2, #0xff @ RESET command
++ strb r2, [r1, #oNFCMD]
++ mov r3, #0 @ wait
++1: add r3, r3, #0x1
++ cmp r3, #0xa
++ blt 1b
++2: ldr r2, [r1, #oNFSTAT] @ wait ready
++ tst r2, #0x1
++ beq 2b
++ ldr r2, [r1, #oNFCONF]
++ orr r2, r2, #0x800 @ disable chip
++ str r2, [r1, #oNFCONF]
++
++#if 0
++ @ get ready to call C functions (for nand_read())
++ ldr sp, DW_STACK_START @ setup stack pointer
++ mov fp, #0 @ no previous frame, so fp=0
++#else
++ ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
++ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
++ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */
++#ifdef CONFIG_USE_IRQ
++ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
++#endif
++ sub sp, r0, #12 /* leave 3 words for abort-stack */
++#endif
++
++ @ copy u-boot to RAM
++ ldr r0, _TEXT_BASE
++ mov r1, #0x0
++ mov r2, #CFG_UBOOT_SIZE
++ bl nand_read_ll
++
++ tst r0, #0x0
++ beq ok_nand_read
++#ifdef CONFIG_DEBUG_LL
++bad_nand_read:
++ ldr r0, STR_FAIL
++ ldr r1, SerBase
++ bl PrintWord
++1: b 1b @ infinite loop
++#endif
++
++ok_nand_read:
++#ifdef CONFIG_DEBUG_LL
++ ldr r0, STR_OK
++ ldr r1, SerBase
++ bl PrintWord
++#endif
++
++ @ verify
++ mov r0, #0
++ @ldr r1, =0x33f00000
++ ldr r1, _TEXT_BASE
++ mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
++go_next:
++ ldr r3, [r0], #4
++ ldr r4, [r1], #4
++ teq r3, r4
++ bne notmatch
++ subs r2, r2, #4
++ beq done_nand_read
++ bne go_next
++notmatch:
++#ifdef CONFIG_DEBUG_LL
++ sub r0, r0, #4
++ ldr r1, SerBase
++ bl PrintHexWord
++ ldr r0, STR_FAIL
++ ldr r1, SerBase
++ bl PrintWord
++#endif
++1: b 1b
++done_nand_read:
++#endif /* NAND_BOOT */
+ #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
+
+ /* Set up the stack */
+Index: u-boot/include/s3c2410.h
+===================================================================
+--- u-boot.orig/include/s3c2410.h 2007-02-28 03:51:24.000000000 +0100
++++ u-boot/include/s3c2410.h 2007-03-01 14:29:22.000000000 +0100
+@@ -38,12 +38,6 @@
+ #define S3C2410_ECCSIZE 512
+ #define S3C2410_ECCBYTES 3
+
+-typedef enum {
+- S3C24X0_UART0,
+- S3C24X0_UART1,
+- S3C24X0_UART2
+-} S3C24X0_UARTS_NR;
+-
+ /* S3C2410 device base addresses */
+ #define S3C24X0_MEMCTL_BASE 0x48000000
+ #define S3C24X0_USB_HOST_BASE 0x49000000
+@@ -65,9 +59,23 @@
+ #define S3C2410_SDI_BASE 0x5A000000
+
+
++#define oNFCONF 0x00
++#define oNFCMD 0x04
++#define oNFADDR 0x08
++#define oNFDATA 0x0C
++#define oNFSTAT 0x10
++#define oNFECC 0x14
++
++#ifndef __ASSEMBLER__
++
+ /* include common stuff */
+ #include <s3c24x0.h>
+
++typedef enum {
++ S3C24X0_UART0,
++ S3C24X0_UART1,
++ S3C24X0_UART2
++} S3C24X0_UARTS_NR;
+
+ static inline S3C24X0_MEMCTL * S3C24X0_GetBase_MEMCTL(void)
+ {
+@@ -142,6 +150,7 @@
+ return (S3C2410_SDI * const)S3C2410_SDI_BASE;
+ }
+
++#endif
+
+ /* ISR */
+ #define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch
new file mode 100644
index 0000000000..0d5a49771d
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch
@@ -0,0 +1,32 @@
+If we've somehow magically make u-boot end up in RAM (JTAG, ...), then that RAM
+is mapped to 0x30000000 and not 0, so we need to copy the interrupt vectors, etc.
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -332,7 +332,23 @@ done_nand_read:
+ strb r1, [r0]
+ #endif /* CONFIG_S3C2410_NAND_BOOT */
+ done_relocate:
+-#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
++
++#if defined(CONFIG_USE_IRQ) && defined(CONFIG_S3C2410)
++ /* In the case of the S3C2410, if we've somehow magically (JTAG, ...)
++ ended up in RAM, then that ram is mapped to 0x30000000 and not 0.
++ So we need to copy the interrupt vectors, etc. */
++
++ mov r0, #0
++ ldr r1, _TEXT_BASE
++ mov r2, #0x40
++irqvec_cpy_next:
++ ldr r3, [r1], #4
++ str r3, [r0], #4
++ subs r2, r2, #4
++ bne irqvec_cpy_next
++#endif /* CONFIG_USE_IRQ */
++
++#endif /* !CONFIG_SKIP_RELOCATE_UBOOT */
+
+ /* Set up the stack */
+ stack_setup:
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch
new file mode 100644
index 0000000000..8cc442a865
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch
@@ -0,0 +1,98 @@
+Index: u-boot/include/s3c2410.h
+===================================================================
+--- u-boot.orig/include/s3c2410.h 2007-02-16 23:53:20.000000000 +0100
++++ u-boot/include/s3c2410.h 2007-02-16 23:53:21.000000000 +0100
+@@ -69,75 +69,75 @@
+ #include <s3c24x0.h>
+
+
+-static inline S3C24X0_MEMCTL * const S3C24X0_GetBase_MEMCTL(void)
++static inline S3C24X0_MEMCTL * S3C24X0_GetBase_MEMCTL(void)
+ {
+ return (S3C24X0_MEMCTL * const)S3C24X0_MEMCTL_BASE;
+ }
+-static inline S3C24X0_USB_HOST * const S3C24X0_GetBase_USB_HOST(void)
++static inline S3C24X0_USB_HOST * S3C24X0_GetBase_USB_HOST(void)
+ {
+ return (S3C24X0_USB_HOST * const)S3C24X0_USB_HOST_BASE;
+ }
+-static inline S3C24X0_INTERRUPT * const S3C24X0_GetBase_INTERRUPT(void)
++static inline S3C24X0_INTERRUPT * S3C24X0_GetBase_INTERRUPT(void)
+ {
+ return (S3C24X0_INTERRUPT * const)S3C24X0_INTERRUPT_BASE;
+ }
+-static inline S3C24X0_DMAS * const S3C24X0_GetBase_DMAS(void)
++static inline S3C24X0_DMAS * S3C24X0_GetBase_DMAS(void)
+ {
+ return (S3C24X0_DMAS * const)S3C24X0_DMA_BASE;
+ }
+-static inline S3C24X0_CLOCK_POWER * const S3C24X0_GetBase_CLOCK_POWER(void)
++static inline S3C24X0_CLOCK_POWER * S3C24X0_GetBase_CLOCK_POWER(void)
+ {
+ return (S3C24X0_CLOCK_POWER * const)S3C24X0_CLOCK_POWER_BASE;
+ }
+-static inline S3C24X0_LCD * const S3C24X0_GetBase_LCD(void)
++static inline S3C24X0_LCD * S3C24X0_GetBase_LCD(void)
+ {
+ return (S3C24X0_LCD * const)S3C24X0_LCD_BASE;
+ }
+-static inline S3C2410_NAND * const S3C2410_GetBase_NAND(void)
++static inline S3C2410_NAND * S3C2410_GetBase_NAND(void)
+ {
+ return (S3C2410_NAND * const)S3C2410_NAND_BASE;
+ }
+-static inline S3C24X0_UART * const S3C24X0_GetBase_UART(S3C24X0_UARTS_NR nr)
++static inline S3C24X0_UART * S3C24X0_GetBase_UART(S3C24X0_UARTS_NR nr)
+ {
+ return (S3C24X0_UART * const)(S3C24X0_UART_BASE + (nr * 0x4000));
+ }
+-static inline S3C24X0_TIMERS * const S3C24X0_GetBase_TIMERS(void)
++static inline S3C24X0_TIMERS * S3C24X0_GetBase_TIMERS(void)
+ {
+ return (S3C24X0_TIMERS * const)S3C24X0_TIMER_BASE;
+ }
+-static inline S3C24X0_USB_DEVICE * const S3C24X0_GetBase_USB_DEVICE(void)
++static inline S3C24X0_USB_DEVICE * S3C24X0_GetBase_USB_DEVICE(void)
+ {
+ return (S3C24X0_USB_DEVICE * const)S3C24X0_USB_DEVICE_BASE;
+ }
+-static inline S3C24X0_WATCHDOG * const S3C24X0_GetBase_WATCHDOG(void)
++static inline S3C24X0_WATCHDOG * S3C24X0_GetBase_WATCHDOG(void)
+ {
+ return (S3C24X0_WATCHDOG * const)S3C24X0_WATCHDOG_BASE;
+ }
+-static inline S3C24X0_I2C * const S3C24X0_GetBase_I2C(void)
++static inline S3C24X0_I2C * S3C24X0_GetBase_I2C(void)
+ {
+ return (S3C24X0_I2C * const)S3C24X0_I2C_BASE;
+ }
+-static inline S3C24X0_I2S * const S3C24X0_GetBase_I2S(void)
++static inline S3C24X0_I2S * S3C24X0_GetBase_I2S(void)
+ {
+ return (S3C24X0_I2S * const)S3C24X0_I2S_BASE;
+ }
+-static inline S3C24X0_GPIO * const S3C24X0_GetBase_GPIO(void)
++static inline S3C24X0_GPIO * S3C24X0_GetBase_GPIO(void)
+ {
+ return (S3C24X0_GPIO * const)S3C24X0_GPIO_BASE;
+ }
+-static inline S3C24X0_RTC * const S3C24X0_GetBase_RTC(void)
++static inline S3C24X0_RTC * S3C24X0_GetBase_RTC(void)
+ {
+ return (S3C24X0_RTC * const)S3C24X0_RTC_BASE;
+ }
+-static inline S3C2410_ADC * const S3C2410_GetBase_ADC(void)
++static inline S3C2410_ADC * S3C2410_GetBase_ADC(void)
+ {
+ return (S3C2410_ADC * const)S3C2410_ADC_BASE;
+ }
+-static inline S3C24X0_SPI * const S3C24X0_GetBase_SPI(void)
++static inline S3C24X0_SPI * S3C24X0_GetBase_SPI(void)
+ {
+ return (S3C24X0_SPI * const)S3C24X0_SPI_BASE;
+ }
+-static inline S3C2410_SDI * const S3C2410_GetBase_SDI(void)
++static inline S3C2410_SDI * S3C2410_GetBase_SDI(void)
+ {
+ return (S3C2410_SDI * const)S3C2410_SDI_BASE;
+ }
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch
new file mode 100644
index 0000000000..b50853554b
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch
@@ -0,0 +1,215 @@
+Index: u-boot/drivers/Makefile
+===================================================================
+--- u-boot.orig/drivers/Makefile
++++ u-boot/drivers/Makefile
+@@ -52,7 +52,7 @@
+ ks8695eth.o \
+ pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
+ rpx_pcmcia.o \
+- fsl_i2c.o
++ fsl_i2c.o s3c2410_fb.o
+
+ SRCS := $(COBJS:.o=.c)
+ OBJS := $(addprefix $(obj),$(COBJS))
+Index: u-boot/drivers/s3c2410_fb.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/s3c2410_fb.c
+@@ -0,0 +1,166 @@
++/*
++ * (C) Copyright 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if defined(CONFIG_VIDEO_S3C2410)
++
++#include <video_fb.h>
++#include "videomodes.h"
++#include <s3c2410.h>
++/*
++ * Export Graphic Device
++ */
++GraphicDevice smi;
++
++#define VIDEO_MEM_SIZE 0x200000 /* 480x640x16bit = 614400 bytes */
++
++extern void board_video_init(GraphicDevice *pGD);
++
++/*******************************************************************************
++ *
++ * Init video chip with common Linux graphic modes (lilo)
++ */
++void *video_hw_init (void)
++{
++ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
++ GraphicDevice *pGD = (GraphicDevice *)&smi;
++ int videomode;
++ unsigned long t1, hsynch, vsynch;
++ char *penv;
++ int tmp, i, bits_per_pixel;
++ struct ctfb_res_modes *res_mode;
++ struct ctfb_res_modes var_mode;
++ unsigned char videoout;
++
++ /* Search for video chip */
++ printf("Video: ");
++
++ tmp = 0;
++
++ videomode = CFG_DEFAULT_VIDEO_MODE;
++ /* get video mode via environment */
++ if ((penv = getenv ("videomode")) != NULL) {
++ /* deceide if it is a string */
++ if (penv[0] <= '9') {
++ videomode = (int) simple_strtoul (penv, NULL, 16);
++ tmp = 1;
++ }
++ } else {
++ tmp = 1;
++ }
++ if (tmp) {
++ /* parameter are vesa modes */
++ /* search params */
++ for (i = 0; i < VESA_MODES_COUNT; i++) {
++ if (vesa_modes[i].vesanr == videomode)
++ break;
++ }
++ if (i == VESA_MODES_COUNT) {
++ printf ("no VESA Mode found, switching to mode 0x%x ", CFG_DEFAULT_VIDEO_MODE);
++ i = 0;
++ }
++ res_mode =
++ (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].
++ resindex];
++ bits_per_pixel = vesa_modes[i].bits_per_pixel;
++ } else {
++
++ res_mode = (struct ctfb_res_modes *) &var_mode;
++ bits_per_pixel = video_get_params (res_mode, penv);
++ }
++
++ /* calculate hsynch and vsynch freq (info only) */
++ t1 = (res_mode->left_margin + res_mode->xres +
++ res_mode->right_margin + res_mode->hsync_len) / 8;
++ t1 *= 8;
++ t1 *= res_mode->pixclock;
++ t1 /= 1000;
++ hsynch = 1000000000L / t1;
++ t1 *=
++ (res_mode->upper_margin + res_mode->yres +
++ res_mode->lower_margin + res_mode->vsync_len);
++ t1 /= 1000;
++ vsynch = 1000000000L / t1;
++
++ /* fill in Graphic device struct */
++ sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres,
++ res_mode->yres, bits_per_pixel, (hsynch / 1000),
++ (vsynch / 1000));
++ printf ("%s\n", pGD->modeIdent);
++ pGD->winSizeX = res_mode->xres;
++ pGD->winSizeY = res_mode->yres;
++ pGD->plnSizeX = res_mode->xres;
++ pGD->plnSizeY = res_mode->yres;
++ switch (bits_per_pixel) {
++ case 8:
++ pGD->gdfBytesPP = 1;
++ pGD->gdfIndex = GDF__8BIT_INDEX;
++ break;
++ case 15:
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_15BIT_555RGB;
++ break;
++ case 16:
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_16BIT_565RGB;
++ break;
++ case 24:
++ pGD->gdfBytesPP = 3;
++ pGD->gdfIndex = GDF_24BIT_888RGB;
++ break;
++ }
++
++ /* statically configure settings */
++ pGD->winSizeX = pGD->plnSizeX = 480;
++ pGD->winSizeY = pGD->plnSizeY = 640;
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_16BIT_565RGB;
++
++ pGD->frameAdrs = LCD_VIDEO_ADDR;
++ pGD->memSize = VIDEO_MEM_SIZE;
++
++ board_video_init(pGD);
++
++ lcd->LCDSADDR1 = pGD->frameAdrs >> 1;
++
++ /* This marks the end of the frame buffer. */
++ lcd->LCDSADDR2 = (lcd->LCDSADDR1&0x1fffff) + (pGD->winSizeX+0) * pGD->winSizeY;
++ lcd->LCDSADDR3 = pGD->winSizeX;
++
++ /* Clear video memory */
++ memset(pGD->frameAdrs, 0, pGD->memSize);
++
++ /* Enable Display */
++ lcd->LCDCON1 |= 0x01; /* ENVID = 1 */
++
++ return ((void*)&smi);
++}
++
++void
++video_set_lut (unsigned int index, /* color number */
++ unsigned char r, /* red */
++ unsigned char g, /* green */
++ unsigned char b /* blue */
++ )
++{
++}
++
++#endif /* CONFIG_VIDEO_S3C2410 */
+Index: u-boot/drivers/cfb_console.c
+===================================================================
+--- u-boot.orig/drivers/cfb_console.c
++++ u-boot/drivers/cfb_console.c
+@@ -141,6 +141,14 @@
+ #endif
+
+ /*****************************************************************************/
++/* Defines for the S3C2410 driver */
++/*****************************************************************************/
++#ifdef CONFIG_VIDEO_S3C2410
++/* it actually is little-endian, but the host CPU, too ! */
++//#define VIDEO_FB_LITTLE_ENDIAN
++#endif
++
++/*****************************************************************************/
+ /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc */
+ /*****************************************************************************/
+ #include <video_fb.h>
+@@ -307,6 +315,11 @@
+ #define SHORTSWAP32(x) (x)
+ #endif
+
++#ifdef CONFIG_VIDEO_S3C2410
++#undef SHORTSWAP32
++#define SHORTSWAP32(x) ((((x) & 0xffff) << 16) | (((x) >> 16) & 0xffff))
++#endif
++
+ #if defined(DEBUG) || defined(DEBUG_CFB_CONSOLE)
+ #define PRINTD(x) printf(x)
+ #else
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch
new file mode 100644
index 0000000000..16bee3e26a
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch
@@ -0,0 +1,1263 @@
+USB Device Controller Driver for Samsung S3C2410 SoC
+
+Index: u-boot/drivers/Makefile
+===================================================================
+--- u-boot.orig/drivers/Makefile
++++ u-boot/drivers/Makefile
+@@ -47,7 +47,7 @@
+ status_led.o sym53c8xx.o systemace.o ahci.o \
+ ti_pci1410a.o tigon3.o tsec.o \
+ tsi108_eth.o tsi108_i2c.o tsi108_pci.o \
+- usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \
++ usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbdcore_s3c2410.o usbtty.o \
+ videomodes.o w83c553f.o \
+ ks8695eth.o \
+ pcf50606.o \
+Index: u-boot/drivers/usbdcore_s3c2410.c
+===================================================================
+--- /dev/null
++++ u-boot/drivers/usbdcore_s3c2410.c
+@@ -0,0 +1,730 @@
++/* S3C2410 USB Device Controller Driver for u-boot
++ *
++ * (C) Copyright 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * based on Linux' s3c2410_udc.c, which is
++ * Copyright (C) 2004-2006 Herbert Pötzl - Arnaud Patard
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#include <config.h>
++
++#if defined(CONFIG_S3C2410) && defined(CONFIG_USB_DEVICE)
++
++#include <common.h>
++
++/* we can't use the regular debug macros since the console might be
++ * set to usbtty, which would cause deadlocks! */
++#ifdef DEBUG
++#undef debug
++#undef debugX
++#define debug(fmt,args...) serial_printf (fmt ,##args)
++#define debugX(level,fmt,args...) if (DEBUG>=level) serial_printf(fmt,##args)
++#endif
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#include <asm/io.h>
++#include <s3c2410.h>
++
++#include "usbdcore.h"
++#include "usbdcore_s3c2410.h"
++#include "usbdcore_ep0.h"
++#include <usb_cdc_acm.h>
++
++enum ep0_state {
++ EP0_IDLE,
++ EP0_IN_DATA_PHASE,
++ EP0_OUT_DATA_PHASE,
++ EP0_END_XFER,
++ EP0_STALL,
++};
++
++static struct urb *ep0_urb = NULL;
++
++static struct usb_device_instance *udc_device; /* Used in interrupt handler */
++
++static inline int fifo_count_out(void)
++{
++ int tmp;
++
++ tmp = inl(S3C2410_UDC_OUT_FIFO_CNT2_REG) << 8;
++ tmp |= inl(S3C2410_UDC_OUT_FIFO_CNT1_REG);
++
++ return tmp & 0xffff;
++}
++
++static const unsigned long ep_fifo_reg[S3C2410_UDC_NUM_ENDPOINTS] = {
++ S3C2410_UDC_EP0_FIFO_REG,
++ S3C2410_UDC_EP1_FIFO_REG,
++ S3C2410_UDC_EP2_FIFO_REG,
++ S3C2410_UDC_EP3_FIFO_REG,
++ S3C2410_UDC_EP4_FIFO_REG,
++};
++
++static int s3c2410_write_noniso_tx_fifo(struct usb_endpoint_instance *endpoint)
++{
++ struct urb *urb = endpoint->tx_urb;
++ unsigned int last, i;
++ unsigned int ep = endpoint->endpoint_address & 0x7f;
++ unsigned long fifo_reg = ep_fifo_reg[ep];
++
++ /* WARNING: don't ever put serial debug printf's in non-error codepaths
++ * here, it is called from the time critical EP0 codepath ! */
++
++ if (!urb || ep >= S3C2410_UDC_NUM_ENDPOINTS) {
++ serial_printf("no urb or wrong endpoint\n");
++ return -1;
++ }
++
++ S3C2410_UDC_SETIX(ep);
++ if ((last = MIN(urb->actual_length - endpoint->sent,
++ endpoint->tx_packetSize))) {
++ u8 *cp = urb->buffer + endpoint->sent;
++
++ for (i = 0; i < last; i++)
++ outb(*(cp+i), fifo_reg);
++ }
++ endpoint->last = last;
++
++ if (endpoint->sent + last < urb->actual_length) {
++ /* not all data has been transmitted so far */
++ return 0;
++ }
++
++ if (last == endpoint->tx_packetSize) {
++ /* we need to send one more packet (ZLP) */
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static void s3c2410_deconfigure_device (void)
++{
++ /* FIXME: Implement this */
++}
++
++static void s3c2410_configure_device (struct usb_device_instance *device)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++ S3C24X0_CLOCK_POWER * const cpower = S3C24X0_GetBase_CLOCK_POWER();
++
++ /* disable EP0-4 SUBD interrupts ? */
++ outl(0x00, S3C2410_UDC_USB_INT_EN_REG);
++
++ /* UPLL already configured by board-level init code */
++
++ /* configure USB pads to device mode */
++ gpio->MISCCR &= ~(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND1);
++
++ /* don't disable USB clock */
++ cpower->CLKSLOW &= ~S3C2410_CLKSLOW_UCLK_OFF;
++
++ /* clear interrupt registers */
++ inl(S3C2410_UDC_EP_INT_REG);
++ inl(S3C2410_UDC_USB_INT_REG);
++ outl(0xff, S3C2410_UDC_EP_INT_REG);
++ outl(0xff, S3C2410_UDC_USB_INT_REG);
++
++ /* enable USB interrupts for RESET and SUSPEND/RESUME */
++ outl(S3C2410_UDC_USBINT_RESET|S3C2410_UDC_USBINT_SUSPEND,
++ S3C2410_UDC_USB_INT_EN_REG);
++}
++
++static void udc_set_address(unsigned char address)
++{
++ address |= 0x80; /* ADDR_UPDATE bit */
++ outl(address, S3C2410_UDC_FUNC_ADDR_REG);
++}
++
++extern struct usb_device_descriptor device_descriptor;
++
++static void s3c2410_udc_ep0(void)
++{
++ u_int8_t ep0csr;
++ struct usb_endpoint_instance *ep0 = udc_device->bus->endpoint_array;
++
++ S3C2410_UDC_SETIX(0);
++ ep0csr = inl(S3C2410_UDC_IN_CSR1_REG);
++
++ /* clear stall status */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SENTSTL) {
++ serial_printf("Clearing SENT_STALL\n");
++ clear_ep0_sst();
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SOPKTRDY)
++ clear_ep0_opr();
++ ep0->state = EP0_IDLE;
++ return;
++ }
++
++ /* clear setup end */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SE
++ /* && ep0->state != EP0_IDLE */) {
++ serial_printf("Clearing SETUP_END\n");
++ clear_ep0_se();
++#if 1
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SOPKTRDY) {
++ /* Flush FIFO */
++ while (inl(S3C2410_UDC_OUT_FIFO_CNT1_REG))
++ inl(S3C2410_UDC_EP0_FIFO_REG);
++ clear_ep0_opr();
++ }
++#endif
++ ep0->state = EP0_IDLE;
++ return;
++ }
++
++ /* Don't ever put [serial] debugging in non-error codepaths here, it
++ * will violate the tight timing constraints of this USB Device
++ * controller (and lead to bus enumeration failures) */
++
++ switch (ep0->state) {
++ int i, fifo_count;
++ unsigned char *datap;
++ case EP0_IDLE:
++ if (!(ep0csr & S3C2410_UDC_EP0_CSR_OPKRDY))
++ break;
++
++ datap = (unsigned char *) &ep0_urb->device_request;
++ /* host->device packet has been received */
++
++ /* pull it out of the fifo */
++ fifo_count = fifo_count_out();
++ for (i = 0; i < fifo_count; i++) {
++ *datap = (unsigned char)inl(S3C2410_UDC_EP0_FIFO_REG);
++ datap++;
++ }
++ if (fifo_count != 8) {
++ debug("STRANGE FIFO COUNT: %u bytes\n", fifo_count);
++ set_ep0_ss();
++ return;
++ }
++
++ if (ep0_urb->device_request.wLength == 0) {
++ if (ep0_recv_setup(ep0_urb)) {
++ /* Not a setup packet, stall next EP0 transaction */
++ debug("can't parse setup packet1\n");
++ set_ep0_ss();
++ set_ep0_de_out();
++ ep0->state = EP0_IDLE;
++ return;
++ }
++ /* There are some requests with which we need to deal
++ * manually here */
++ switch (ep0_urb->device_request.bRequest) {
++ case USB_REQ_SET_CONFIGURATION:
++ if (!ep0_urb->device_request.wValue)
++ usbd_device_event_irq(udc_device,
++ DEVICE_DE_CONFIGURED, 0);
++ else
++ usbd_device_event_irq(udc_device,
++ DEVICE_CONFIGURED, 0);
++ break;
++ case USB_REQ_SET_ADDRESS:
++ udc_set_address(udc_device->address);
++ usbd_device_event_irq(udc_device,
++ DEVICE_ADDRESS_ASSIGNED, 0);
++ break;
++ default:
++ break;
++ }
++ set_ep0_de_out();
++ ep0->state = EP0_IDLE;
++ } else {
++ if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK)
++ == USB_REQ_HOST2DEVICE) {
++ clear_ep0_opr();
++ ep0->state = EP0_OUT_DATA_PHASE;
++ ep0_urb->buffer = ep0_urb->buffer_data;
++ ep0_urb->buffer_length = sizeof(ep0_urb->buffer_data);
++ ep0_urb->actual_length = 0;
++ } else {
++ ep0->state = EP0_IN_DATA_PHASE;
++
++ if (ep0_recv_setup(ep0_urb)) {
++ /* Not a setup packet, stall next EP0 transaction */
++ debug("can't parse setup packet2\n");
++ set_ep0_ss();
++ //set_ep0_de_out();
++ ep0->state = EP0_IDLE;
++ return;
++ }
++ clear_ep0_opr();
++ ep0->tx_urb = ep0_urb;
++ ep0->sent = ep0->last = 0;
++
++ if (s3c2410_write_noniso_tx_fifo(ep0)) {
++ ep0->state = EP0_IDLE;
++ set_ep0_de_in();
++ } else
++ set_ep0_ipr();
++ }
++ }
++ break;
++ case EP0_IN_DATA_PHASE:
++ if (!(ep0csr & S3C2410_UDC_EP0_CSR_IPKRDY)) {
++ ep0->sent += ep0->last;
++
++ if (s3c2410_write_noniso_tx_fifo(ep0)) {
++ ep0->state = EP0_IDLE;
++ set_ep0_de_in();
++ } else
++ set_ep0_ipr();
++ }
++ break;
++ case EP0_OUT_DATA_PHASE:
++ if (ep0csr & S3C2410_UDC_EP0_CSR_OPKRDY) {
++ u32 urb_avail = ep0_urb->buffer_length - ep0_urb->actual_length;
++ u_int8_t *cp = ep0_urb->buffer + ep0_urb->actual_length;
++ int i, fifo_count;
++
++ fifo_count = fifo_count_out();
++ if (fifo_count < urb_avail)
++ urb_avail = fifo_count;
++
++ for (i = 0; i < urb_avail; i++)
++ *cp++ = inl(S3C2410_UDC_EP0_FIFO_REG);
++
++ ep0_urb->actual_length += urb_avail;
++
++ if (fifo_count < ep0->rcv_packetSize ||
++ ep0_urb->actual_length >= ep0_urb->device_request.wLength) {
++ ep0->state = EP0_IDLE;
++ if (ep0_recv_setup(ep0_urb)) {
++ /* Not a setup packet, stall next EP0 transaction */
++ debug("can't parse setup packet3\n");
++ set_ep0_ss();
++ //set_ep0_de_out();
++ return;
++ }
++ set_ep0_de_out();
++ } else
++ clear_ep0_opr();
++ }
++ break;
++ case EP0_END_XFER:
++ ep0->state = EP0_IDLE;
++ break;
++ case EP0_STALL:
++ //set_ep0_ss;
++ ep0->state = EP0_IDLE;
++ break;
++ }
++}
++
++
++static void s3c2410_udc_epn(int ep)
++{
++ struct usb_endpoint_instance *endpoint;
++ struct urb *urb;
++ u32 ep_csr1;
++
++ if (ep >= S3C2410_UDC_NUM_ENDPOINTS)
++ return;
++
++ endpoint = &udc_device->bus->endpoint_array[ep];
++
++ S3C2410_UDC_SETIX(ep);
++
++ if (endpoint->endpoint_address & USB_DIR_IN) {
++ /* IN transfer (device to host) */
++ ep_csr1 = inl(S3C2410_UDC_IN_CSR1_REG);
++ debug("for ep=%u, CSR1=0x%x ", ep, ep_csr1);
++
++ urb = endpoint->tx_urb;
++ if (ep_csr1 & S3C2410_UDC_ICSR1_SENTSTL) {
++ /* Stall handshake */
++ debug("stall\n");
++ outl(0x00, S3C2410_UDC_IN_CSR1_REG);
++ return;
++ }
++ if (!(ep_csr1 & S3C2410_UDC_ICSR1_PKTRDY) && urb &&
++ urb->actual_length) {
++
++ debug("completing previously send data ");
++ usbd_tx_complete(endpoint);
++
++ /* push pending data into FIFO */
++ if ((endpoint->last == endpoint->tx_packetSize) &&
++ (urb->actual_length - endpoint->sent - endpoint->last == 0)) {
++ endpoint->sent += endpoint->last;
++ /* Write 0 bytes of data (ZLP) */
++ debug("ZLP ");
++ outl(ep_csr1|S3C2410_UDC_ICSR1_PKTRDY, S3C2410_UDC_IN_CSR1_REG);
++ } else {
++ /* write actual data to fifo */
++ debug("TX_DATA ");
++ s3c2410_write_noniso_tx_fifo(endpoint);
++ outl(ep_csr1|S3C2410_UDC_ICSR1_PKTRDY, S3C2410_UDC_IN_CSR1_REG);
++ }
++ }
++ debug("\n");
++ } else {
++ /* OUT transfer (host to device) */
++ ep_csr1 = inl(S3C2410_UDC_OUT_CSR1_REG);
++ debug("for ep=%u, CSR1=0x%x ", ep, ep_csr1);
++
++ urb = endpoint->rcv_urb;
++ if (ep_csr1 & S3C2410_UDC_OCSR1_SENTSTL) {
++ /* Stall handshake */
++ outl(0x00, S3C2410_UDC_IN_CSR1_REG);
++ return;
++ }
++ if ((ep_csr1 & S3C2410_UDC_OCSR1_PKTRDY) && urb) {
++ /* Read pending data from fifo */
++ u32 fifo_count = fifo_count_out();
++ int is_last = 0;
++ u32 i, urb_avail = urb->buffer_length - urb->actual_length;
++ u8 *cp = urb->buffer + urb->actual_length;
++
++ if (fifo_count < endpoint->rcv_packetSize)
++ is_last = 1;
++
++ debug("fifo_count=%u is_last=%, urb_avail=%u)\n",
++ fifo_count, is_last, urb_avail);
++
++ if (fifo_count < urb_avail)
++ urb_avail = fifo_count;
++
++ for (i = 0; i < urb_avail; i++)
++ *cp++ = inb(ep_fifo_reg[ep]);
++
++ if (is_last)
++ outl(ep_csr1 & ~S3C2410_UDC_OCSR1_PKTRDY,
++ S3C2410_UDC_OUT_CSR1_REG);
++
++ usbd_rcv_complete(endpoint, urb_avail, 0);
++ }
++ }
++
++ urb = endpoint->rcv_urb;
++}
++
++/*
++-------------------------------------------------------------------------------
++*/
++
++/* this is just an empty wrapper for usbtty who assumes polling operation */
++void udc_irq(void)
++{
++}
++
++/* Handle general USB interrupts and dispatch according to type.
++ * This function implements TRM Figure 14-13.
++ */
++void s3c2410_udc_irq(void)
++{
++ struct usb_endpoint_instance *ep0 = udc_device->bus->endpoint_array;
++ u_int32_t save_idx = inl(S3C2410_UDC_INDEX_REG);
++
++ /* read interrupt sources */
++ u_int32_t usb_status = inl(S3C2410_UDC_USB_INT_REG);
++ u_int32_t usbd_status = inl(S3C2410_UDC_EP_INT_REG);
++
++ //debug("< IRQ usbs=0x%02x, usbds=0x%02x start >", usb_status, usbd_status);
++
++ /* clear interrupts */
++ outl(usb_status, S3C2410_UDC_USB_INT_REG);
++
++ if (usb_status & S3C2410_UDC_USBINT_RESET) {
++ //serial_putc('R');
++ debug("RESET pwr=0x%x\n", inl(S3C2410_UDC_PWR_REG));
++ udc_setup_ep(udc_device, 0, ep0);
++ outl(S3C2410_UDC_EP0_CSR_SSE|S3C2410_UDC_EP0_CSR_SOPKTRDY, S3C2410_UDC_EP0_CSR_REG);
++ ep0->state = EP0_IDLE;
++ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
++ }
++
++ if (usb_status & S3C2410_UDC_USBINT_RESUME) {
++ debug("RESUME\n");
++ usbd_device_event_irq(udc_device, DEVICE_BUS_ACTIVITY, 0);
++ }
++
++ if (usb_status & S3C2410_UDC_USBINT_SUSPEND) {
++ debug("SUSPEND\n");
++ usbd_device_event_irq(udc_device, DEVICE_BUS_INACTIVE, 0);
++ }
++
++ /* Endpoint Interrupts */
++ if (usbd_status) {
++ int i;
++
++ if (usbd_status & S3C2410_UDC_INT_EP0) {
++ outl(S3C2410_UDC_INT_EP0, S3C2410_UDC_EP_INT_REG);
++ s3c2410_udc_ep0();
++ }
++
++ for (i = 1; i < 5; i++) {
++ u_int32_t tmp = 1 << i;
++
++ if (usbd_status & tmp) {
++ /* FIXME: Handle EP X */
++ outl(tmp, S3C2410_UDC_EP_INT_REG);
++ s3c2410_udc_epn(i);
++ }
++ }
++ }
++ S3C2410_UDC_SETIX(save_idx);
++}
++
++/*
++-------------------------------------------------------------------------------
++*/
++
++
++/*
++ * Start of public functions.
++ */
++
++/* Called to start packet transmission. */
++void udc_endpoint_write (struct usb_endpoint_instance *endpoint)
++{
++ unsigned short epnum =
++ endpoint->endpoint_address & USB_ENDPOINT_NUMBER_MASK;
++
++ debug("Entering for ep %x ", epnum);
++
++ if (endpoint->tx_urb) {
++ u32 ep_csr1;
++ debug("We have an URB, transmitting\n");
++
++ s3c2410_write_noniso_tx_fifo(endpoint);
++
++ S3C2410_UDC_SETIX(epnum);
++
++ ep_csr1 = inl(S3C2410_UDC_IN_CSR1_REG);
++ outl(ep_csr1|S3C2410_UDC_ICSR1_PKTRDY, S3C2410_UDC_IN_CSR1_REG);
++ } else
++ debug("\n");
++}
++
++/* Start to initialize h/w stuff */
++int udc_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_INTERRUPT * irq = S3C24X0_GetBase_INTERRUPT();
++
++ udc_device = NULL;
++
++ /* Set and check clock control.
++ * We might ought to be using the clock control API to do
++ * this instead of fiddling with the clock registers directly
++ * here.
++ */
++ clk_power->CLKCON |= (1 << 7);
++
++ /* Print banner with device revision */
++ printf("USB: S3C2410 USB Deviced\n");
++
++ /*
++ * At this point, device is ready for configuration...
++ */
++ outl(0x00, S3C2410_UDC_EP_INT_EN_REG);
++ outl(0x00, S3C2410_UDC_USB_INT_EN_REG);
++
++ irq->INTMSK &= ~BIT_USBD;
++
++ return 0;
++}
++
++/*
++ * udc_setup_ep - setup endpoint
++ *
++ * Associate a physical endpoint with endpoint_instance
++ */
++int udc_setup_ep (struct usb_device_instance *device,
++ unsigned int ep, struct usb_endpoint_instance *endpoint)
++{
++ int ep_addr = endpoint->endpoint_address;
++ int packet_size;
++ int attributes;
++ u_int32_t maxp;
++
++ S3C2410_UDC_SETIX(ep);
++
++ if (ep) {
++ if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ /* IN endpoint */
++ outl(S3C2410_UDC_ICSR1_FFLUSH|S3C2410_UDC_ICSR1_CLRDT,
++ S3C2410_UDC_IN_CSR1_REG);
++ outl(S3C2410_UDC_ICSR2_MODEIN, S3C2410_UDC_IN_CSR2_REG);
++ packet_size = endpoint->tx_packetSize;
++ attributes = endpoint->tx_attributes;
++ } else {
++ /* OUT endpoint */
++ outl(S3C2410_UDC_ICSR1_CLRDT, S3C2410_UDC_IN_CSR1_REG);
++ outl(0, S3C2410_UDC_IN_CSR2_REG);
++ outl(S3C2410_UDC_OCSR1_FFLUSH|S3C2410_UDC_OCSR1_CLRDT,
++ S3C2410_UDC_OUT_CSR1_REG);
++ outl(0, S3C2410_UDC_OUT_CSR2_REG);
++ packet_size = endpoint->rcv_packetSize;
++ attributes = endpoint->rcv_attributes;
++ }
++ } else
++ packet_size = endpoint->tx_packetSize;
++
++ switch (packet_size) {
++ case 8:
++ maxp = S3C2410_UDC_MAXP_8;
++ break;
++ case 16:
++ maxp = S3C2410_UDC_MAXP_16;
++ break;
++ case 32:
++ maxp = S3C2410_UDC_MAXP_32;
++ break;
++ case 64:
++ maxp = S3C2410_UDC_MAXP_64;
++ break;
++ default:
++ debug("invalid packet size %u\n", packet_size);
++ return -1;
++ }
++
++ debug("setting up endpoint %u addr %x packet_size %u maxp %u\n", ep,
++ endpoint->endpoint_address, packet_size, maxp);
++
++ /* Set maximum packet size */
++ writel(maxp, S3C2410_UDC_MAXP_REG);
++
++ return 0;
++}
++
++/* ************************************************************************** */
++
++/**
++ * udc_connected - is the USB cable connected
++ *
++ * Return non-zero if cable is connected.
++ */
++#if 0
++int udc_connected (void)
++{
++ return ((inw (UDC_DEVSTAT) & UDC_ATT) == UDC_ATT);
++}
++#endif
++
++/* Turn on the USB connection by enabling the pullup resistor */
++void udc_connect (void)
++{
++ debug("connect, enable Pullup\n");
++ S3C24X0_INTERRUPT * irq = S3C24X0_GetBase_INTERRUPT();
++
++ udc_ctrl(UDC_CTRL_PULLUP_ENABLE, 0);
++ udelay(10000);
++ udc_ctrl(UDC_CTRL_PULLUP_ENABLE, 1);
++
++ irq->INTMSK &= ~BIT_USBD;
++}
++
++/* Turn off the USB connection by disabling the pullup resistor */
++void udc_disconnect (void)
++{
++ debug("disconnect, disable Pullup\n");
++ S3C24X0_INTERRUPT * irq = S3C24X0_GetBase_INTERRUPT();
++
++ udc_ctrl(UDC_CTRL_PULLUP_ENABLE, 0);
++
++ /* Disable interrupt (we don't want to get interrupts while the kernel
++ * is relocating itself */
++ irq->INTMSK |= BIT_USBD;
++}
++
++/* Switch on the UDC */
++void udc_enable (struct usb_device_instance *device)
++{
++ debug("enable device %p, status %d\n", device, device->status);
++
++ /* Save the device structure pointer */
++ udc_device = device;
++
++ /* Setup ep0 urb */
++ if (!ep0_urb)
++ ep0_urb = usbd_alloc_urb(udc_device,
++ udc_device->bus->endpoint_array);
++ else
++ serial_printf("udc_enable: ep0_urb already allocated %p\n",
++ ep0_urb);
++
++ s3c2410_configure_device(device);
++}
++
++/* Switch off the UDC */
++void udc_disable (void)
++{
++ debug("disable UDC\n");
++
++ s3c2410_deconfigure_device();
++
++ /* Free ep0 URB */
++ if (ep0_urb) {
++ /*usbd_dealloc_urb(ep0_urb); */
++ ep0_urb = NULL;
++ }
++
++ /* Reset device pointer.
++ * We ought to do this here to balance the initialization of udc_device
++ * in udc_enable, but some of our other exported functions get called
++ * by the bus interface driver after udc_disable, so we have to hang on
++ * to the device pointer to avoid a null pointer dereference. */
++ /* udc_device = NULL; */
++}
++
++/**
++ * udc_startup - allow udc code to do any additional startup
++ */
++void udc_startup_events (struct usb_device_instance *device)
++{
++ /* The DEVICE_INIT event puts the USB device in the state STATE_INIT. */
++ usbd_device_event_irq (device, DEVICE_INIT, 0);
++
++ /* The DEVICE_CREATE event puts the USB device in the state
++ * STATE_ATTACHED.
++ */
++ usbd_device_event_irq (device, DEVICE_CREATE, 0);
++
++ /* Some USB controller driver implementations signal
++ * DEVICE_HUB_CONFIGURED and DEVICE_RESET events here.
++ * DEVICE_HUB_CONFIGURED causes a transition to the state STATE_POWERED,
++ * and DEVICE_RESET causes a transition to the state STATE_DEFAULT.
++ * The OMAP USB client controller has the capability to detect when the
++ * USB cable is connected to a powered USB bus via the ATT bit in the
++ * DEVSTAT register, so we will defer the DEVICE_HUB_CONFIGURED and
++ * DEVICE_RESET events until later.
++ */
++
++ /* The GTA01 can detect usb device attachment, but we just assume being
++ * attached for now (go to STATE_POWERED) */
++ usbd_device_event_irq (device, DEVICE_HUB_CONFIGURED, 0);
++
++ udc_enable (device);
++}
++
++void udc_set_nak(int epid)
++{
++ /* FIXME: implement this */
++}
++
++void udc_unset_nak(int epid)
++{
++ /* FIXME: implement this */
++}
++
++#endif /* CONFIG_S3C2410 && CONFIG_USB_DEVICE */
+Index: u-boot/drivers/usbdcore_s3c2410.h
+===================================================================
+--- /dev/null
++++ u-boot/drivers/usbdcore_s3c2410.h
+@@ -0,0 +1,273 @@
++/* linux/include/asm/arch-s3c2410/regs-udc.h
++ *
++ * Copyright (C) 2004 Herbert Poetzl <herbert@13thfloor.at>
++ *
++ * This include file is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * Changelog:
++ * 01-08-2004 Initial creation
++ * 12-09-2004 Cleanup for submission
++ * 24-10-2004 Fixed S3C2410_UDC_MAXP_REG definition
++ * 10-03-2005 Changed S3C2410_VA to S3C24XX_VA
++ * 10-01-2007 Modify for u-boot
++ */
++
++#ifndef __ASM_ARCH_REGS_UDC_H
++#define __ASM_ARCH_REGS_UDC_H
++
++#define S3C2410_UDC_REG_BASE_PHYS 0x52000000
++#define S3C2410_UDC_NUM_ENDPOINTS 5
++
++#define S3C2410_USBDREG(x) (x + S3C2410_UDC_REG_BASE_PHYS)
++
++#define S3C2410_UDC_FUNC_ADDR_REG S3C2410_USBDREG(0x0140)
++#define S3C2410_UDC_PWR_REG S3C2410_USBDREG(0x0144)
++#define S3C2410_UDC_EP_INT_REG S3C2410_USBDREG(0x0148)
++
++#define S3C2410_UDC_USB_INT_REG S3C2410_USBDREG(0x0158)
++#define S3C2410_UDC_EP_INT_EN_REG S3C2410_USBDREG(0x015c)
++
++#define S3C2410_UDC_USB_INT_EN_REG S3C2410_USBDREG(0x016c)
++
++#define S3C2410_UDC_FRAME_NUM1_REG S3C2410_USBDREG(0x0170)
++#define S3C2410_UDC_FRAME_NUM2_REG S3C2410_USBDREG(0x0174)
++
++#define S3C2410_UDC_EP0_FIFO_REG S3C2410_USBDREG(0x01c0)
++#define S3C2410_UDC_EP1_FIFO_REG S3C2410_USBDREG(0x01c4)
++#define S3C2410_UDC_EP2_FIFO_REG S3C2410_USBDREG(0x01c8)
++#define S3C2410_UDC_EP3_FIFO_REG S3C2410_USBDREG(0x01cc)
++#define S3C2410_UDC_EP4_FIFO_REG S3C2410_USBDREG(0x01d0)
++
++#define S3C2410_UDC_EP1_DMA_CON S3C2410_USBDREG(0x0200)
++#define S3C2410_UDC_EP1_DMA_UNIT S3C2410_USBDREG(0x0204)
++#define S3C2410_UDC_EP1_DMA_FIFO S3C2410_USBDREG(0x0208)
++#define S3C2410_UDC_EP1_DMA_TTC_L S3C2410_USBDREG(0x020c)
++#define S3C2410_UDC_EP1_DMA_TTC_M S3C2410_USBDREG(0x0210)
++#define S3C2410_UDC_EP1_DMA_TTC_H S3C2410_USBDREG(0x0214)
++
++#define S3C2410_UDC_EP2_DMA_CON S3C2410_USBDREG(0x0218)
++#define S3C2410_UDC_EP2_DMA_UNIT S3C2410_USBDREG(0x021c)
++#define S3C2410_UDC_EP2_DMA_FIFO S3C2410_USBDREG(0x0220)
++#define S3C2410_UDC_EP2_DMA_TTC_L S3C2410_USBDREG(0x0224)
++#define S3C2410_UDC_EP2_DMA_TTC_M S3C2410_USBDREG(0x0228)
++#define S3C2410_UDC_EP2_DMA_TTC_H S3C2410_USBDREG(0x022c)
++
++#define S3C2410_UDC_EP3_DMA_CON S3C2410_USBDREG(0x0240)
++#define S3C2410_UDC_EP3_DMA_UNIT S3C2410_USBDREG(0x0244)
++#define S3C2410_UDC_EP3_DMA_FIFO S3C2410_USBDREG(0x0248)
++#define S3C2410_UDC_EP3_DMA_TTC_L S3C2410_USBDREG(0x024c)
++#define S3C2410_UDC_EP3_DMA_TTC_M S3C2410_USBDREG(0x0250)
++#define S3C2410_UDC_EP3_DMA_TTC_H S3C2410_USBDREG(0x0254)
++
++#define S3C2410_UDC_EP4_DMA_CON S3C2410_USBDREG(0x0258)
++#define S3C2410_UDC_EP4_DMA_UNIT S3C2410_USBDREG(0x025c)
++#define S3C2410_UDC_EP4_DMA_FIFO S3C2410_USBDREG(0x0260)
++#define S3C2410_UDC_EP4_DMA_TTC_L S3C2410_USBDREG(0x0264)
++#define S3C2410_UDC_EP4_DMA_TTC_M S3C2410_USBDREG(0x0268)
++#define S3C2410_UDC_EP4_DMA_TTC_H S3C2410_USBDREG(0x026c)
++
++#define S3C2410_UDC_INDEX_REG S3C2410_USBDREG(0x0178)
++
++/* indexed registers */
++
++#define S3C2410_UDC_MAXP_REG S3C2410_USBDREG(0x0180)
++
++#define S3C2410_UDC_EP0_CSR_REG S3C2410_USBDREG(0x0184)
++
++#define S3C2410_UDC_IN_CSR1_REG S3C2410_USBDREG(0x0184)
++#define S3C2410_UDC_IN_CSR2_REG S3C2410_USBDREG(0x0188)
++
++#define S3C2410_UDC_OUT_CSR1_REG S3C2410_USBDREG(0x0190)
++#define S3C2410_UDC_OUT_CSR2_REG S3C2410_USBDREG(0x0194)
++#define S3C2410_UDC_OUT_FIFO_CNT1_REG S3C2410_USBDREG(0x0198)
++#define S3C2410_UDC_OUT_FIFO_CNT2_REG S3C2410_USBDREG(0x019c)
++
++
++
++#define S3C2410_UDC_PWR_ISOUP (1<<7) // R/W
++#define S3C2410_UDC_PWR_RESET (1<<3) // R
++#define S3C2410_UDC_PWR_RESUME (1<<2) // R/W
++#define S3C2410_UDC_PWR_SUSPEND (1<<1) // R
++#define S3C2410_UDC_PWR_ENSUSPEND (1<<0) // R/W
++
++#define S3C2410_UDC_PWR_DEFAULT 0x00
++
++#define S3C2410_UDC_INT_EP4 (1<<4) // R/W (clear only)
++#define S3C2410_UDC_INT_EP3 (1<<3) // R/W (clear only)
++#define S3C2410_UDC_INT_EP2 (1<<2) // R/W (clear only)
++#define S3C2410_UDC_INT_EP1 (1<<1) // R/W (clear only)
++#define S3C2410_UDC_INT_EP0 (1<<0) // R/W (clear only)
++
++#define S3C2410_UDC_USBINT_RESET (1<<2) // R/W (clear only)
++#define S3C2410_UDC_USBINT_RESUME (1<<1) // R/W (clear only)
++#define S3C2410_UDC_USBINT_SUSPEND (1<<0) // R/W (clear only)
++
++#define S3C2410_UDC_INTE_EP4 (1<<4) // R/W
++#define S3C2410_UDC_INTE_EP3 (1<<3) // R/W
++#define S3C2410_UDC_INTE_EP2 (1<<2) // R/W
++#define S3C2410_UDC_INTE_EP1 (1<<1) // R/W
++#define S3C2410_UDC_INTE_EP0 (1<<0) // R/W
++
++#define S3C2410_UDC_USBINTE_RESET (1<<2) // R/W
++#define S3C2410_UDC_USBINTE_SUSPEND (1<<0) // R/W
++
++
++#define S3C2410_UDC_INDEX_EP0 (0x00)
++#define S3C2410_UDC_INDEX_EP1 (0x01) // ??
++#define S3C2410_UDC_INDEX_EP2 (0x02) // ??
++#define S3C2410_UDC_INDEX_EP3 (0x03) // ??
++#define S3C2410_UDC_INDEX_EP4 (0x04) // ??
++
++#define S3C2410_UDC_ICSR1_CLRDT (1<<6) // R/W
++#define S3C2410_UDC_ICSR1_SENTSTL (1<<5) // R/W (clear only)
++#define S3C2410_UDC_ICSR1_SENDSTL (1<<4) // R/W
++#define S3C2410_UDC_ICSR1_FFLUSH (1<<3) // W (set only)
++#define S3C2410_UDC_ICSR1_UNDRUN (1<<2) // R/W (clear only)
++#define S3C2410_UDC_ICSR1_PKTRDY (1<<0) // R/W (set only)
++
++#define S3C2410_UDC_ICSR2_AUTOSET (1<<7) // R/W
++#define S3C2410_UDC_ICSR2_ISO (1<<6) // R/W
++#define S3C2410_UDC_ICSR2_MODEIN (1<<5) // R/W
++#define S3C2410_UDC_ICSR2_DMAIEN (1<<4) // R/W
++
++#define S3C2410_UDC_OCSR1_CLRDT (1<<7) // R/W
++#define S3C2410_UDC_OCSR1_SENTSTL (1<<6) // R/W (clear only)
++#define S3C2410_UDC_OCSR1_SENDSTL (1<<5) // R/W
++#define S3C2410_UDC_OCSR1_FFLUSH (1<<4) // R/W
++#define S3C2410_UDC_OCSR1_DERROR (1<<3) // R
++#define S3C2410_UDC_OCSR1_OVRRUN (1<<2) // R/W (clear only)
++#define S3C2410_UDC_OCSR1_PKTRDY (1<<0) // R/W (clear only)
++
++#define S3C2410_UDC_OCSR2_AUTOCLR (1<<7) // R/W
++#define S3C2410_UDC_OCSR2_ISO (1<<6) // R/W
++#define S3C2410_UDC_OCSR2_DMAIEN (1<<5) // R/W
++
++#define S3C2410_UDC_SETIX(X) writel(X, S3C2410_UDC_INDEX_REG)
++
++#define S3C2410_UDC_EP0_CSR_OPKRDY (1<<0)
++#define S3C2410_UDC_EP0_CSR_IPKRDY (1<<1)
++#define S3C2410_UDC_EP0_CSR_SENTSTL (1<<2)
++#define S3C2410_UDC_EP0_CSR_DE (1<<3)
++#define S3C2410_UDC_EP0_CSR_SE (1<<4)
++#define S3C2410_UDC_EP0_CSR_SENDSTL (1<<5)
++#define S3C2410_UDC_EP0_CSR_SOPKTRDY (1<<6)
++#define S3C2410_UDC_EP0_CSR_SSE (1<<7)
++
++#define S3C2410_UDC_MAXP_8 (1<<0)
++#define S3C2410_UDC_MAXP_16 (1<<1)
++#define S3C2410_UDC_MAXP_32 (1<<2)
++#define S3C2410_UDC_MAXP_64 (1<<3)
++
++/****************** MACROS ******************/
++#define BIT_MASK 0xFF
++
++#if 1
++#define maskl(v,m,a) \
++ writel((readl(a) & ~(m))|((v)&(m)), (a))
++#else
++#define maskl(v,m,a) do { \
++ unsigned long foo = readl(a); \
++ unsigned long bar = (foo & ~(m)) | ((v)&(m)); \
++ serial_printf("0x%08x:0x%x->0x%x\n", (a), foo, bar); \
++ writel(bar, (a)); \
++} while(0)
++#endif
++
++#define clear_ep0_sst() do { \
++ S3C2410_UDC_SETIX(0); \
++ writel(0x00, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define clear_ep0_se() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl(S3C2410_UDC_EP0_CSR_SSE, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define clear_ep0_opr() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl(S3C2410_UDC_EP0_CSR_SOPKTRDY, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_ipr() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl(S3C2410_UDC_EP0_CSR_IPKRDY, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_de() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl(S3C2410_UDC_EP0_CSR_DE, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_ss() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl(S3C2410_UDC_EP0_CSR_SENDSTL, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_de_out() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl((S3C2410_UDC_EP0_CSR_SOPKTRDY \
++ | S3C2410_UDC_EP0_CSR_DE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_sse_out() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl((S3C2410_UDC_EP0_CSR_SOPKTRDY \
++ | S3C2410_UDC_EP0_CSR_SSE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_de_in() do { \
++ S3C2410_UDC_SETIX(0); \
++ maskl((S3C2410_UDC_EP0_CSR_IPKRDY \
++ | S3C2410_UDC_EP0_CSR_DE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++
++#if 0
++
++#define clear_stall_ep1_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP1); \
++ orl(0,base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep2_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP2); \
++ orl(0, base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep3_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP3); \
++ orl(0,base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep4_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP4); \
++ orl(0, base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++#endif
++
++/* S3C2410 Endpoint parameters */
++#define EP0_MAX_PACKET_SIZE 16
++#define UDC_OUT_ENDPOINT 2
++#define UDC_OUT_PACKET_SIZE 64
++#define UDC_IN_ENDPOINT 1
++#define UDC_IN_PACKET_SIZE 64
++#define UDC_INT_ENDPOINT 5
++#define UDC_INT_PACKET_SIZE 16
++#define UDC_BULK_PACKET_SIZE 16
++
++#endif
+Index: u-boot/drivers/usbdcore_ep0.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_ep0.c
++++ u-boot/drivers/usbdcore_ep0.c
+@@ -43,7 +43,7 @@
+
+ #include <common.h>
+
+-#if defined(CONFIG_OMAP1510) && defined(CONFIG_USB_DEVICE)
++#if defined(CONFIG_USB_DEVICE)
+ #include "usbdcore.h"
+
+ #if 0
+@@ -187,9 +187,13 @@
+ if (!urb || !urb->buffer || !urb->buffer_length
+ || (urb->buffer_length < 255)) {
+ dbg_ep0 (2, "invalid urb %p", urb);
++ serial_printf("invalid urb %p", urb);
+ return -1L;
+ }
+
++ /* re-initialize the ep0 buffer pointer */
++ urb->buffer = (u8 *) urb->buffer_data;
++
+ /* setup tx urb */
+ urb->actual_length = 0;
+ cp = urb->buffer;
+@@ -206,17 +210,8 @@
+ usbd_device_device_descriptor (device, port))) {
+ return -1;
+ }
+- /* copy descriptor for this device */
+- copy_config (urb, device_descriptor,
+- sizeof (struct usb_device_descriptor),
+- max);
+-
+- /* correct the correct control endpoint 0 max packet size into the descriptor */
+- device_descriptor =
+- (struct usb_device_descriptor *) urb->buffer;
+- device_descriptor->bMaxPacketSize0 =
+- urb->device->bus->maxpacketsize;
+-
++ urb->buffer = device_descriptor;
++ urb->actual_length = MIN(sizeof(*device_descriptor), max);
+ }
+ /*dbg_ep0(3, "copied device configuration, actual_length: %x", urb->actual_length); */
+ break;
+@@ -250,11 +245,9 @@
+ index);
+ return -1;
+ }
+- copy_config (urb, configuration_descriptor,
+- sizeof (struct
+- usb_configuration_descriptor),
+- max);
+-
++ urb->buffer = configuration_descriptor;
++ urb->actual_length =
++ MIN(le16_to_cpu(configuration_descriptor->wTotalLength), max);
+ }
+ break;
+
+@@ -376,6 +369,7 @@
+ dbg_ep0 (0, "entering ep0_recv_setup()");
+ if (!urb || !urb->device) {
+ dbg_ep0 (3, "invalid URB %p", urb);
++ serial_printf("invalid URB %p", urb);
+ return -1;
+ }
+
+@@ -400,6 +394,7 @@
+ return device->cdc_recv_setup(request, urb);
+ dbg_ep0 (1, "non standard request: %x",
+ request->bmRequestType & USB_REQ_TYPE_MASK);
++ serial_printf("non standard request: %x", request->bmRequestType & USB_REQ_TYPE_MASK);
+ return -1; /* Stall here */
+ }
+
+@@ -448,6 +443,8 @@
+ dbg_ep0 (1, "request %s not allowed in UNKNOWN state: %s",
+ USBD_DEVICE_REQUESTS (request->bRequest),
+ usbd_device_states[device->device_state]);
++ serial_printf("request %s not allowed in UNKNOWN state: %s", USBD_DEVICE_REQUESTS (request->bRequest), usbd_device_states[device->device_state]);
++ break;
+ return -1;
+ }
+
+@@ -545,7 +542,8 @@
+ /*dbg_ep0(2, "address: %d %d %d", */
+ /* request->wValue, le16_to_cpu(request->wValue), device->address); */
+
+- serial_printf ("DEVICE_ADDRESS_ASSIGNED.. event?\n");
++ //serial_printf ("DEVICE_ADDRESS_ASSIGNED.. event?\n");
++ //udc_set_address(device->address);
+ return 0;
+
+ case USB_REQ_SET_DESCRIPTOR: /* XXX should we support this? */
+Index: u-boot/include/configs/neo1973_gta01.h
+===================================================================
+--- u-boot.orig/include/configs/neo1973_gta01.h
++++ u-boot/include/configs/neo1973_gta01.h
+@@ -173,6 +173,16 @@
+ #define CONFIG_USB_OHCI 1
+ #endif
+
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x5119 /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc"
++#define CONFIG_USBD_PRODUCT_NAME "Neo1973 Bootloader " U_BOOT_VERSION
++#define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
++
+ /*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+Index: u-boot/cpu/arm920t/s3c24x0/interrupts.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/interrupts.c
++++ u-boot/cpu/arm920t/s3c24x0/interrupts.c
+@@ -222,6 +222,13 @@
+ S3C24X0_INTERRUPT * irq = S3C24X0_GetBase_INTERRUPT();
+ u_int32_t intpnd = irq->INTPND;
+
++#ifdef CONFIG_USB_DEVICE
++ if (intpnd & BIT_USBD) {
++ s3c2410_udc_irq();
++ irq->SRCPND = BIT_USBD;
++ irq->INTPND = BIT_USBD;
++ }
++#endif /* USB_DEVICE */
+ }
+ #endif /* USE_IRQ */
+
+Index: u-boot/drivers/usbtty.h
+===================================================================
+--- u-boot.orig/drivers/usbtty.h
++++ u-boot/drivers/usbtty.h
+@@ -29,6 +29,8 @@
+ #include "usbdcore_mpc8xx.h"
+ #elif defined(CONFIG_OMAP1510)
+ #include "usbdcore_omap1510.h"
++#elif defined(CONFIG_S3C2410)
++#include "usbdcore_s3c2410.h"
+ #endif
+
+ #include <config.h>
+Index: u-boot/board/neo1973/common/cmd_neo1973.c
+===================================================================
+--- u-boot.orig/board/neo1973/common/cmd_neo1973.c
++++ u-boot/board/neo1973/common/cmd_neo1973.c
+@@ -72,6 +72,18 @@
+ neo1973_vibrator(1);
+ else
+ neo1973_vibrator(0);
++ } else if (!strcmp(argv[1], "udc")) {
++ if (argc < 3)
++ goto out_help;
++ if (!strcmp(argv[2], "udc")) {
++ if (argc < 4)
++ goto out_help;
++ if (!strcmp(argv[3], "on"))
++ udc_connect();
++ else
++ udc_disconnect();
++ } else
++ goto out_help;
+ } else {
+ out_help:
+ printf("Usage:\n%s\n", cmdtp->usage);
+@@ -95,5 +107,6 @@
+ "neo1973 charger off - disable charging\n"
+ "neo1973 backlight (on|off) - switch backlight on or off\n"
+ "neo1973 vibrator (on|off) - switch vibrator on or off\n"
++ "neo1973 udc pullup (on|off) - switch pull-up on or off\n"
+ );
+ #endif /* CFG_CMD_BDI */
+Index: u-boot/board/neo1973/gta01/Makefile
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/Makefile
++++ u-boot/board/neo1973/gta01/Makefile
+@@ -25,7 +25,7 @@
+
+ LIB = lib$(BOARD).a
+
+-OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o
++OBJS := gta01.o pcf50606.o ../common/cmd_neo1973.o ../common/jbt6k74.o ../common/udc.o
+ SOBJS := ../common/lowlevel_init.o
+
+ $(LIB): $(OBJS) $(SOBJS)
+Index: u-boot/board/neo1973/common/udc.c
+===================================================================
+--- /dev/null
++++ u-boot/board/neo1973/common/udc.c
+@@ -0,0 +1,23 @@
++
++#include <common.h>
++#include <usbdcore.h>
++#include <s3c2410.h>
++
++void udc_ctrl(enum usbd_event event, int param)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ switch (event) {
++ case UDC_CTRL_PULLUP_ENABLE:
++#if defined(CONFIG_ARCH_GTA01_v4) || defined(CONFIG_ARCH_GTA01B_v2) || \
++ defined(CONFIG_ARCH_GTA01B_v3) || defined(CONFIG_ARCH_GTA01B_v4)
++ if (param)
++ gpio->GPBDAT |= (1 << 9);
++ else
++ gpio->GPBDAT &= ~(1 << 9);
++#endif
++ break;
++ default:
++ break;
++ }
++}
+Index: u-boot/include/usbdcore.h
+===================================================================
+--- u-boot.orig/include/usbdcore.h
++++ u-boot/include/usbdcore.h
+@@ -671,4 +671,10 @@
+ void usbd_rcv_complete(struct usb_endpoint_instance *endpoint, int len, int urb_bad);
+ void usbd_tx_complete (struct usb_endpoint_instance *endpoint);
+
++enum usbd_event {
++ UDC_CTRL_PULLUP_ENABLE,
++};
++
++void udc_ctrl(enum usbd_event event, int param);
++#endif
+ #endif
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch
new file mode 100644
index 0000000000..da0fb8cf2d
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch
@@ -0,0 +1,1301 @@
+Add proper support for S3C2440 CPU's
+
+Index: u-boot/include/s3c24x0.h
+===================================================================
+--- u-boot.orig/include/s3c24x0.h
++++ u-boot/include/s3c24x0.h
+@@ -82,7 +82,7 @@
+ S3C24X0_REG32 PRIORITY;
+ S3C24X0_REG32 INTPND;
+ S3C24X0_REG32 INTOFFSET;
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ S3C24X0_REG32 SUBSRCPND;
+ S3C24X0_REG32 INTSUBMSK;
+ #endif
+@@ -92,11 +92,11 @@
+ /* DMAS (see manual chapter 8) */
+ typedef struct {
+ S3C24X0_REG32 DISRC;
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ S3C24X0_REG32 DISRCC;
+ #endif
+ S3C24X0_REG32 DIDST;
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ S3C24X0_REG32 DIDSTC;
+ #endif
+ S3C24X0_REG32 DCON;
+@@ -107,7 +107,7 @@
+ #ifdef CONFIG_S3C2400
+ S3C24X0_REG32 res[1];
+ #endif
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ S3C24X0_REG32 res[7];
+ #endif
+ } /*__attribute__((__packed__))*/ S3C24X0_DMA;
+@@ -126,6 +126,9 @@
+ S3C24X0_REG32 CLKCON;
+ S3C24X0_REG32 CLKSLOW;
+ S3C24X0_REG32 CLKDIVN;
++#ifdef CONFIG_S3C2440
++ S3C24X0_REG32 CAMDIVN;
++#endif
+ } /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;
+
+
+@@ -145,7 +148,7 @@
+ S3C24X0_REG32 res[8];
+ S3C24X0_REG32 DITHMODE;
+ S3C24X0_REG32 TPAL;
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ S3C24X0_REG32 LCDINTPND;
+ S3C24X0_REG32 LCDSRCPND;
+ S3C24X0_REG32 LCDINTMSK;
+@@ -157,6 +160,9 @@
+ /* NAND FLASH (see S3C2410 manual chapter 6) */
+ typedef struct {
+ S3C24X0_REG32 NFCONF;
++#ifdef CONFIG_S3C2440
++ S3C24X0_REG32 NFCONT;
++#endif
+ S3C24X0_REG32 NFCMD;
+ S3C24X0_REG32 NFADDR;
+ S3C24X0_REG32 NFDATA;
+@@ -164,6 +170,15 @@
+ S3C24X0_REG32 NFECC;
+ } /*__attribute__((__packed__))*/ S3C2410_NAND;
+
++/* NAND FLASH (see S3C2440 manual chapter 6) */
++typedef struct {
++ S3C24X0_REG32 NFCONF;
++ S3C24X0_REG32 NFCMD;
++ S3C24X0_REG32 NFADDR;
++ S3C24X0_REG32 NFDATA;
++ S3C24X0_REG32 NFSTAT;
++ S3C24X0_REG32 NFECC;
++} /*__attribute__((__packed__))*/ S3C2440_NAND;
+
+ /* UART (see manual chapter 11) */
+ typedef struct {
+@@ -451,6 +466,65 @@
+ S3C24X0_REG32 GSTATUS3;
+ S3C24X0_REG32 GSTATUS4;
+ #endif
++#ifdef CONFIG_S3C2440
++ S3C24X0_REG32 GPACON;
++ S3C24X0_REG32 GPADAT;
++ S3C24X0_REG32 res1[2];
++ S3C24X0_REG32 GPBCON;
++ S3C24X0_REG32 GPBDAT;
++ S3C24X0_REG32 GPBUP;
++ S3C24X0_REG32 res2;
++ S3C24X0_REG32 GPCCON;
++ S3C24X0_REG32 GPCDAT;
++ S3C24X0_REG32 GPCUP;
++ S3C24X0_REG32 res3;
++ S3C24X0_REG32 GPDCON;
++ S3C24X0_REG32 GPDDAT;
++ S3C24X0_REG32 GPDUP;
++ S3C24X0_REG32 res4;
++ S3C24X0_REG32 GPECON;
++ S3C24X0_REG32 GPEDAT;
++ S3C24X0_REG32 GPEUP;
++ S3C24X0_REG32 res5;
++ S3C24X0_REG32 GPFCON;
++ S3C24X0_REG32 GPFDAT;
++ S3C24X0_REG32 GPFUP;
++ S3C24X0_REG32 res6;
++ S3C24X0_REG32 GPGCON;
++ S3C24X0_REG32 GPGDAT;
++ S3C24X0_REG32 GPGUP;
++ S3C24X0_REG32 res7;
++ S3C24X0_REG32 GPHCON;
++ S3C24X0_REG32 GPHDAT;
++ S3C24X0_REG32 GPHUP;
++ S3C24X0_REG32 res8;
++
++ S3C24X0_REG32 MISCCR;
++ S3C24X0_REG32 DCLKCON;
++ S3C24X0_REG32 EXTINT0;
++ S3C24X0_REG32 EXTINT1;
++ S3C24X0_REG32 EXTINT2;
++ S3C24X0_REG32 EINTFLT0;
++ S3C24X0_REG32 EINTFLT1;
++ S3C24X0_REG32 EINTFLT2;
++ S3C24X0_REG32 EINTFLT3;
++ S3C24X0_REG32 EINTMASK;
++ S3C24X0_REG32 EINTPEND;
++ S3C24X0_REG32 GSTATUS0;
++ S3C24X0_REG32 GSTATUS1;
++ S3C24X0_REG32 GSTATUS2;
++ S3C24X0_REG32 GSTATUS3;
++ S3C24X0_REG32 GSTATUS4;
++
++ S3C24X0_REG32 res9;
++ S3C24X0_REG32 DSC0;
++ S3C24X0_REG32 DSC1;
++ S3C24X0_REG32 MSLCON;
++ S3C24X0_REG32 GPJCON;
++ S3C24X0_REG32 GPJDAT;
++ S3C24X0_REG32 GPJUP;
++ S3C24X0_REG32 res10;
++#endif
+ } /*__attribute__((__packed__))*/ S3C24X0_GPIO;
+
+
+@@ -637,8 +711,13 @@
+ S3C24X0_REG32 SDIDCNT;
+ S3C24X0_REG32 SDIDSTA;
+ S3C24X0_REG32 SDIFSTA;
++#if defined(CONFIG_S3C2410)
+ S3C24X0_REG32 SDIDAT;
+ S3C24X0_REG32 SDIIMSK;
++#elif defined(CONFIG_S3C2440)
++ S3C24X0_REG32 SDIIMSK;
++ S3C24X0_REG32 SDIDAT;
++#endif
+ } /*__attribute__((__packed__))*/ S3C2410_SDI;
+
+
+Index: u-boot/rtc/s3c24x0_rtc.c
+===================================================================
+--- u-boot.orig/rtc/s3c24x0_rtc.c
++++ u-boot/rtc/s3c24x0_rtc.c
+@@ -34,6 +34,8 @@
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+
+ #include <rtc.h>
+Index: u-boot/include/s3c2440.h
+===================================================================
+--- /dev/null
++++ u-boot/include/s3c2440.h
+@@ -0,0 +1,300 @@
++/*
++ * (C) Copyright 2003
++ * David Müller ELSOFT AG Switzerland. d.mueller@elsoft.ch
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++/************************************************
++ * NAME : s3c2440.h
++ * Version : 2007.
++ *
++ * Based on S3C2410X User's manual Rev 1.1
++ ************************************************/
++
++#ifndef __S3C2440_H__
++#define __S3C2440_H__
++
++#define S3C24X0_UART_CHANNELS 3
++#define S3C24X0_SPI_CHANNELS 2
++
++/* S3C2440 only supports 512 Byte HW ECC */
++#define S3C2440_ECCSIZE 512
++#define S3C2440_ECCBYTES 3
++
++/* S3C2440 device base addresses */
++#define S3C24X0_MEMCTL_BASE 0x48000000
++#define S3C24X0_USB_HOST_BASE 0x49000000
++#define S3C24X0_INTERRUPT_BASE 0x4A000000
++#define S3C24X0_DMA_BASE 0x4B000000
++#define S3C24X0_CLOCK_POWER_BASE 0x4C000000
++#define S3C24X0_LCD_BASE 0x4D000000
++#define S3C2440_NAND_BASE 0x4E000000
++#define S3C24X0_UART_BASE 0x50000000
++#define S3C24X0_TIMER_BASE 0x51000000
++#define S3C24X0_USB_DEVICE_BASE 0x52000140
++#define USB_DEVICE_PHYS_ADR 0x52000000
++#define S3C24X0_WATCHDOG_BASE 0x53000000
++#define S3C24X0_I2C_BASE 0x54000000
++#define S3C24X0_I2S_BASE 0x55000000
++#define S3C24X0_GPIO_BASE 0x56000000
++#define S3C24X0_RTC_BASE 0x57000000
++#define S3C2440_ADC_BASE 0x58000000
++#define S3C24X0_SPI_BASE 0x59000000
++#define S3C2440_SDI_BASE 0x5A000000
++
++#define oNFCONF 0x00
++#define oNFCONT 0x04
++
++#ifndef __ASSEMBLER__
++
++/* include common stuff */
++#include <s3c24x0.h>
++
++typedef enum {
++ S3C24X0_UART0,
++ S3C24X0_UART1,
++ S3C24X0_UART2
++} S3C24X0_UARTS_NR;
++
++static inline S3C24X0_MEMCTL * S3C24X0_GetBase_MEMCTL(void)
++{
++ return (S3C24X0_MEMCTL * const)S3C24X0_MEMCTL_BASE;
++}
++static inline S3C24X0_USB_HOST * S3C24X0_GetBase_USB_HOST(void)
++{
++ return (S3C24X0_USB_HOST * const)S3C24X0_USB_HOST_BASE;
++}
++static inline S3C24X0_INTERRUPT * S3C24X0_GetBase_INTERRUPT(void)
++{
++ return (S3C24X0_INTERRUPT * const)S3C24X0_INTERRUPT_BASE;
++}
++static inline S3C24X0_DMAS * S3C24X0_GetBase_DMAS(void)
++{
++ return (S3C24X0_DMAS * const)S3C24X0_DMA_BASE;
++}
++static inline S3C24X0_CLOCK_POWER * S3C24X0_GetBase_CLOCK_POWER(void)
++{
++ return (S3C24X0_CLOCK_POWER * const)S3C24X0_CLOCK_POWER_BASE;
++}
++static inline S3C24X0_LCD * S3C24X0_GetBase_LCD(void)
++{
++ return (S3C24X0_LCD * const)S3C24X0_LCD_BASE;
++}
++static inline S3C2440_NAND * S3C2440_GetBase_NAND(void)
++{
++ return (S3C2440_NAND * const)S3C2440_NAND_BASE;
++}
++static inline S3C24X0_UART * S3C24X0_GetBase_UART(S3C24X0_UARTS_NR nr)
++{
++ return (S3C24X0_UART * const)(S3C24X0_UART_BASE + (nr * 0x4000));
++}
++static inline S3C24X0_TIMERS * S3C24X0_GetBase_TIMERS(void)
++{
++ return (S3C24X0_TIMERS * const)S3C24X0_TIMER_BASE;
++}
++static inline S3C24X0_USB_DEVICE * S3C24X0_GetBase_USB_DEVICE(void)
++{
++ return (S3C24X0_USB_DEVICE * const)S3C24X0_USB_DEVICE_BASE;
++}
++static inline S3C24X0_WATCHDOG * S3C24X0_GetBase_WATCHDOG(void)
++{
++ return (S3C24X0_WATCHDOG * const)S3C24X0_WATCHDOG_BASE;
++}
++static inline S3C24X0_I2C * S3C24X0_GetBase_I2C(void)
++{
++ return (S3C24X0_I2C * const)S3C24X0_I2C_BASE;
++}
++static inline S3C24X0_I2S * S3C24X0_GetBase_I2S(void)
++{
++ return (S3C24X0_I2S * const)S3C24X0_I2S_BASE;
++}
++static inline S3C24X0_GPIO * S3C24X0_GetBase_GPIO(void)
++{
++ return (S3C24X0_GPIO * const)S3C24X0_GPIO_BASE;
++}
++static inline S3C24X0_RTC * S3C24X0_GetBase_RTC(void)
++{
++ return (S3C24X0_RTC * const)S3C24X0_RTC_BASE;
++}
++/*
++static inline S3C2440_ADC * S3C2440_GetBase_ADC(void)
++{
++ return (S3C2440_ADC * const)S3C2440_ADC_BASE;
++}
++static inline S3C24X0_SPI * S3C24X0_GetBase_SPI(void)
++{
++ return (S3C24X0_SPI * const)S3C24X0_SPI_BASE;
++}
++*/
++static inline S3C2410_SDI * S3C2410_GetBase_SDI(void)
++{
++ return (S3C2410_SDI * const)S3C2440_SDI_BASE;
++}
++
++#endif /* __ASSEMBLER__ */
++
++/* ISR */
++#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
++#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
++#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
++#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xC))
++#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))
++#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
++#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18))
++#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1C))
++
++#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
++#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24))
++#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28))
++#define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x2C))
++#define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30))
++#define pISR_EINT8_23 (*(unsigned *)(_ISR_STARTADDRESS+0x34))
++#define pISR_BAT_FLT (*(unsigned *)(_ISR_STARTADDRESS+0x3C))
++#define pISR_TICK (*(unsigned *)(_ISR_STARTADDRESS+0x40))
++#define pISR_WDT (*(unsigned *)(_ISR_STARTADDRESS+0x44))
++#define pISR_TIMER0 (*(unsigned *)(_ISR_STARTADDRESS+0x48))
++#define pISR_TIMER1 (*(unsigned *)(_ISR_STARTADDRESS+0x4C))
++#define pISR_TIMER2 (*(unsigned *)(_ISR_STARTADDRESS+0x50))
++#define pISR_TIMER3 (*(unsigned *)(_ISR_STARTADDRESS+0x54))
++#define pISR_TIMER4 (*(unsigned *)(_ISR_STARTADDRESS+0x58))
++#define pISR_UART2 (*(unsigned *)(_ISR_STARTADDRESS+0x5C))
++#define pISR_NOTUSED (*(unsigned *)(_ISR_STARTADDRESS+0x60))
++#define pISR_DMA0 (*(unsigned *)(_ISR_STARTADDRESS+0x64))
++#define pISR_DMA1 (*(unsigned *)(_ISR_STARTADDRESS+0x68))
++#define pISR_DMA2 (*(unsigned *)(_ISR_STARTADDRESS+0x6C))
++#define pISR_DMA3 (*(unsigned *)(_ISR_STARTADDRESS+0x70))
++#define pISR_SDI (*(unsigned *)(_ISR_STARTADDRESS+0x74))
++#define pISR_SPI0 (*(unsigned *)(_ISR_STARTADDRESS+0x78))
++#define pISR_UART1 (*(unsigned *)(_ISR_STARTADDRESS+0x7C))
++#define pISR_USBD (*(unsigned *)(_ISR_STARTADDRESS+0x84))
++#define pISR_USBH (*(unsigned *)(_ISR_STARTADDRESS+0x88))
++#define pISR_IIC (*(unsigned *)(_ISR_STARTADDRESS+0x8C))
++#define pISR_UART0 (*(unsigned *)(_ISR_STARTADDRESS+0x90))
++#define pISR_SPI1 (*(unsigned *)(_ISR_STARTADDRESS+0x94))
++#define pISR_RTC (*(unsigned *)(_ISR_STARTADDRESS+0x98))
++#define pISR_ADC (*(unsigned *)(_ISR_STARTADDRESS+0xA0))
++
++
++/* PENDING BIT */
++#define BIT_EINT0 (0x1)
++#define BIT_EINT1 (0x1<<1)
++#define BIT_EINT2 (0x1<<2)
++#define BIT_EINT3 (0x1<<3)
++#define BIT_EINT4_7 (0x1<<4)
++#define BIT_EINT8_23 (0x1<<5)
++#define BIT_BAT_FLT (0x1<<7)
++#define BIT_TICK (0x1<<8)
++#define BIT_WDT (0x1<<9)
++#define BIT_TIMER0 (0x1<<10)
++#define BIT_TIMER1 (0x1<<11)
++#define BIT_TIMER2 (0x1<<12)
++#define BIT_TIMER3 (0x1<<13)
++#define BIT_TIMER4 (0x1<<14)
++#define BIT_UART2 (0x1<<15)
++#define BIT_LCD (0x1<<16)
++#define BIT_DMA0 (0x1<<17)
++#define BIT_DMA1 (0x1<<18)
++#define BIT_DMA2 (0x1<<19)
++#define BIT_DMA3 (0x1<<20)
++#define BIT_SDI (0x1<<21)
++#define BIT_SPI0 (0x1<<22)
++#define BIT_UART1 (0x1<<23)
++#define BIT_USBD (0x1<<25)
++#define BIT_USBH (0x1<<26)
++#define BIT_IIC (0x1<<27)
++#define BIT_UART0 (0x1<<28)
++#define BIT_SPI1 (0x1<<29)
++#define BIT_RTC (0x1<<30)
++#define BIT_ADC (0x1<<31)
++#define BIT_ALLMSK (0xFFFFFFFF)
++
++#define ClearPending(bit) {\
++ rSRCPND = bit;\
++ rINTPND = bit;\
++ rINTPND;\
++ }
++/* Wait until rINTPND is changed for the case that the ISR is very short. */
++
++#define __REG(x) (*(volatile unsigned long *)(x))
++#define __REGl(x) (*(volatile unsigned long *)(x))
++#define __REGw(x) (*(volatile unsigned short *)(x))
++#define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REG2(x,y) (*(volatile unsigned long *)((x) + (y)))
++
++/*
++ * * Nand flash controller
++ * */
++
++#define NFDATA8 (*(volatile unsigned char *)0x4E000010)
++#define NFDATA16 (*(volatile unsigned short *)0x4E000010)
++#define NFDATA32 (*(volatile unsigned *)0x4E000010)
++
++#define NFCONF __REG(0x4E000000)
++#define NFCONT __REG(0x4E000004)
++#define NFCMD __REG(0x4E000008)
++#define NFADDR __REGb(0x4E00000C)
++#define NFMECCD0 __REG(0x4E000014)
++#define NFMECCD1 __REG(0x4E000018)
++#define NFSECCD __REG(0x4E00001C)
++#define NFSTAT __REG(0x4E000020)
++#define NFESTAT0 __REG(0x4E000024)
++#define NFESTAT1 __REG(0x4E000028)
++#define NFMECC0 __REG(0x4E00002C)
++#define NFMECC1 __REG(0x4E000030)
++#define NFSECC __REG(0x4E000034)
++#define NFSBLK __REG(0x4E000038)
++
++
++#define S3C2410_MISCCR_USBDEV (0<<3)
++#define S3C2410_MISCCR_USBHOST (1<<3)
++
++#define S3C2410_MISCCR_CLK0_MPLL (0<<4)
++#define S3C2410_MISCCR_CLK0_UPLL (1<<4)
++#define S3C2410_MISCCR_CLK0_FCLK (2<<4)
++#define S3C2410_MISCCR_CLK0_HCLK (3<<4)
++#define S3C2410_MISCCR_CLK0_PCLK (4<<4)
++#define S3C2410_MISCCR_CLK0_DCLK0 (5<<4)
++#define S3C2410_MISCCR_CLK0_MASK (7<<4)
++
++#define S3C2410_MISCCR_CLK1_MPLL (0<<8)
++#define S3C2410_MISCCR_CLK1_UPLL (1<<8)
++#define S3C2410_MISCCR_CLK1_FCLK (2<<8)
++#define S3C2410_MISCCR_CLK1_HCLK (3<<8)
++#define S3C2410_MISCCR_CLK1_PCLK (4<<8)
++#define S3C2410_MISCCR_CLK1_DCLK1 (5<<8)
++#define S3C2410_MISCCR_CLK1_MASK (7<<8)
++
++#define S3C2410_MISCCR_USBSUSPND0 (1<<12)
++#define S3C2410_MISCCR_USBSUSPND1 (1<<13)
++
++#define S3C2410_MISCCR_nRSTCON (1<<16)
++
++#define S3C2410_MISCCR_nEN_SCLK0 (1<<17)
++#define S3C2410_MISCCR_nEN_SCLK1 (1<<18)
++#define S3C2410_MISCCR_nEN_SCLKE (1<<19)
++#define S3C2410_MISCCR_SDSLEEP (7<<17)
++
++#define S3C2410_CLKSLOW_UCLK_OFF (1<<7)
++#define S3C2410_CLKSLOW_MPLL_OFF (1<<5)
++#define S3C2410_CLKSLOW_SLOW (1<<4)
++#define S3C2410_CLKSLOW_SLOWVAL(x) (x)
++#define S3C2410_CLKSLOW_GET_SLOWVAL(x) ((x) & 7)
++
++#endif /*__S3C2440_H__*/
+Index: u-boot/include/common.h
+===================================================================
+--- u-boot.orig/include/common.h
++++ u-boot/include/common.h
+@@ -454,7 +454,7 @@
+ ulong get_OPB_freq (void);
+ ulong get_PCI_freq (void);
+ #endif
+-#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_LH7A40X)
++#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_LH7A40X)
+ void s3c2410_irq(void);
+ #define ARM920_IRQ_CALLBACK s3c2410_irq
+ ulong get_FCLK (void);
+Index: u-boot/cpu/arm920t/s3c24x0/usb_ohci.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/usb_ohci.c
++++ u-boot/cpu/arm920t/s3c24x0/usb_ohci.c
+@@ -44,6 +44,8 @@
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+
+ #include <malloc.h>
+Index: u-boot/cpu/arm920t/s3c24x0/speed.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/speed.c
++++ u-boot/cpu/arm920t/s3c24x0/speed.c
+@@ -30,12 +30,15 @@
+ */
+
+ #include <common.h>
+-#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)
++#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || \
++ defined (CONFIG_S3C2440) || defined (CONFIG_TRAB)
+
+ #if defined(CONFIG_S3C2400)
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+
+ #define MPLL 0
+@@ -66,8 +69,12 @@
+ m = ((r & 0xFF000) >> 12) + 8;
+ p = ((r & 0x003F0) >> 4) + 2;
+ s = r & 0x3;
+-
++#ifndef CONFIG_S3C2440
+ return((CONFIG_SYS_CLK_FREQ * m) / (p << s));
++#else
++ /* To avoid integer overflow, changed the calc order */
++ return( 2 * m * (CONFIG_SYS_CLK_FREQ / (p << s )) );
++#endif
+ }
+
+ /* return FCLK frequency */
+@@ -81,7 +88,21 @@
+ {
+ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
+
++#ifndef CONFIG_S3C2440
+ return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());
++#else
++ switch (clk_power->CLKDIVN & 0x6) {
++ case 0x0:
++ return get_FCLK();
++ case 0x2:
++ return get_FCLK()/2;
++ case 0x4:
++ return (clk_power->CAMDIVN & 0x200) ? get_FCLK()/8 : get_FCLK()/4;
++ case 0x6:
++ return (clk_power->CAMDIVN & 0x100) ? get_FCLK()/6 : get_FCLK()/3;
++ }
++ return 0;
++#endif
+ }
+
+ /* return PCLK frequency */
+@@ -98,4 +119,5 @@
+ return(get_PLLCLK(UPLL));
+ }
+
+-#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) */
++#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) ||
++ defined(CONFIG_S3C2440) || defined (CONFIG_TRAB) */
+Index: u-boot/cpu/arm920t/s3c24x0/interrupts.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/interrupts.c
++++ u-boot/cpu/arm920t/s3c24x0/interrupts.c
+@@ -30,13 +30,16 @@
+ */
+
+ #include <common.h>
+-#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)
++#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || \
++ defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)
+
+ #include <arm920t.h>
+ #if defined(CONFIG_S3C2400)
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+
+ int timer_load_val = 0;
+@@ -59,6 +62,7 @@
+ /* use PWM Timer 4 because it has no output */
+ /* prescaler for Timer 4 is 16 */
+ timers->TCFG0 = 0x0f00;
++#ifndef CONFIG_S3C2440
+ if (timer_load_val == 0)
+ {
+ /*
+@@ -68,6 +72,9 @@
+ */
+ timer_load_val = get_PCLK()/(2 * 16 * 100);
+ }
++#else
++ timer_load_val = get_PCLK()/(2 * 16 * 100);
++#endif
+ /* load value for 10 ms timeout */
+ lastdec = timers->TCNTB4 = timer_load_val;
+ /* auto load, manual update of Timer 4 */
+@@ -178,6 +185,7 @@
+ tbclk = timer_load_val * 100;
+ #elif defined(CONFIG_SBC2410X) || \
+ defined(CONFIG_SMDK2410) || \
++ defined(CONFIG_SMDK2440) || \
+ defined(CONFIG_VCMA9)
+ tbclk = CFG_HZ;
+ #else
+@@ -232,4 +240,5 @@
+ }
+ #endif /* USE_IRQ */
+
+-#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) */
++#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) ||
++ defined(CONFIG_S3C2440) || defined (CONFIG_TRAB) */
+Index: u-boot/cpu/arm920t/s3c24x0/serial.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/serial.c
++++ u-boot/cpu/arm920t/s3c24x0/serial.c
+@@ -19,12 +19,15 @@
+ */
+
+ #include <common.h>
+-#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)
++#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || \
++ defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)
+
+ #if defined(CONFIG_S3C2400) || defined(CONFIG_TRAB)
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+
+ DECLARE_GLOBAL_DATA_PTR;
+@@ -180,4 +183,5 @@
+ }
+ }
+
+-#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB) */
++#endif /* defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) ||
++ defined(CONFIG_S3C2440) || defined (CONFIG_TRAB) */
+Index: u-boot/cpu/arm920t/s3c24x0/i2c.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/i2c.c
++++ u-boot/cpu/arm920t/s3c24x0/i2c.c
+@@ -34,6 +34,8 @@
+ #include <s3c2400.h>
+ #elif defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
+ #endif
+ #include <i2c.h>
+
+@@ -63,7 +65,7 @@
+ {
+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
+
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ return (gpio->GPEDAT & 0x8000) >> 15;
+ #endif
+ #ifdef CONFIG_S3C2400
+@@ -82,7 +84,7 @@
+ {
+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
+
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ gpio->GPEDAT = (gpio->GPEDAT & ~0x4000) | (x&1) << 14;
+ #endif
+ #ifdef CONFIG_S3C2400
+@@ -139,7 +141,7 @@
+ }
+
+ if ((status & I2CSTAT_BSY) || GetI2CSDA () == 0) {
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ ulong old_gpecon = gpio->GPECON;
+ #endif
+ #ifdef CONFIG_S3C2400
+@@ -147,7 +149,7 @@
+ #endif
+ /* bus still busy probably by (most) previously interrupted transfer */
+
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ /* set I2CSDA and I2CSCL (GPE15, GPE14) to GPIO */
+ gpio->GPECON = (gpio->GPECON & ~0xF0000000) | 0x10000000;
+ #endif
+@@ -171,7 +173,7 @@
+ udelay (1000);
+
+ /* restore pin functions */
+-#ifdef CONFIG_S3C2410
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ gpio->GPECON = old_gpecon;
+ #endif
+ #ifdef CONFIG_S3C2400
+Index: u-boot/drivers/usbdcore_s3c2410.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_s3c2410.c
++++ u-boot/drivers/usbdcore_s3c2410.c
+@@ -24,7 +24,7 @@
+
+ #include <config.h>
+
+-#if defined(CONFIG_S3C2410) && defined(CONFIG_USB_DEVICE)
++#if (defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)) && defined(CONFIG_USB_DEVICE)
+
+ #include <common.h>
+
+Index: u-boot/drivers/usbtty.h
+===================================================================
+--- u-boot.orig/drivers/usbtty.h
++++ u-boot/drivers/usbtty.h
+@@ -29,7 +29,7 @@
+ #include "usbdcore_mpc8xx.h"
+ #elif defined(CONFIG_OMAP1510)
+ #include "usbdcore_omap1510.h"
+-#elif defined(CONFIG_S3C2410)
++#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ #include "usbdcore_s3c2410.h"
+ #endif
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -31,7 +31,11 @@
+
+ #include <config.h>
+ #include <version.h>
++#if defined(CONFIG_S3C2410)
+ #include <s3c2410.h>
++#elif defined(CONFIG_S3C2440)
++#include <s3c2440.h>
++#endif
+
+
+ /*
+@@ -142,14 +146,32 @@
+ # define pWTCON 0x15300000
+ # define INTMSK 0x14400008 /* Interupt-Controller base addresses */
+ # define CLKDIVN 0x14800014 /* clock divisor register */
+-#elif defined(CONFIG_S3C2410)
++#elif defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)
+ # define pWTCON 0x53000000
+ # define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
+ # define INTSUBMSK 0x4A00001C
+ # define CLKDIVN 0x4C000014 /* clock divisor register */
+ #endif
+
+-#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
++#if defined(CONFIG_S3C2410)
++# define INTSUBMSK_val 0x7ff
++# define MPLLCON_val ((0x90 << 12) + (0x7 << 4) + 0x0) /* 202 MHz */
++# define UPLLCON_val ((0x78 << 12) + (0x2 << 4) + 0x3)
++# define CLKDIVN_val 3 /* FCLK:HCLK:PCLK = 1:2:4 */
++#elif defined(CONFIG_S3C2440)
++# define INTSUBMSK_val 0xffff
++#if (CONFIG_SYS_CLK_FREQ == 16934400)
++# define MPLLCON_val ((0x61 << 12) + (0x1 << 4) + 0x2) /* 296.35 MHz */
++# define UPLLCON_val ((0x3c << 12) + (0x4 << 4) + 0x2) /* 47.98 MHz */
++#else if (CONFIG_SYS_CLK_FREQ == 12000000)
++# define MPLLCON_val ((0x44 << 12) + (0x1 << 4) + 0x1) /* 304.00 MHz */
++# define UPLLCON_val ((0x38 << 12) + (0x2 << 4) + 0x2) /* 48.00 MHz */
++#endif
++# define CLKDIVN_val 7 /* FCLK:HCLK:PCLK = 1:3:6 */
++# define CAMDIVN 0x4C000018
++#endif
++
++#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ ldr r0, =pWTCON
+ mov r1, #0x0
+ str r1, [r0]
+@@ -160,24 +182,34 @@
+ mov r1, #0xffffffff
+ ldr r0, =INTMSK
+ str r1, [r0]
+-# if defined(CONFIG_S3C2410)
+- ldr r1, =0x3ff
++# if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
++ ldr r1, =INTSUBMSK_val
+ ldr r0, =INTSUBMSK
+ str r1, [r0]
+ # endif
+
+- /* default FCLK is 202 MHz ! */
++#if defined(CONFIG_S3C2440)
++ /* Make sure we get FCLK:HCLK:PCLK = 1:3:6 */
++ ldr r0, =CAMDIVN
++ mov r1, #0
++ str r1, [r0]
++#endif
++
++ /* Clock asynchronous mode */
++ mrc p15, 0, r1, c1, c0, 0
++ orr r1, r1, #0xc0000000
++ mcr p15, 0, r1, c1, c0, 0
++
++
+ #define LOCKTIME 0x4c000000
+ #define UPLLCON 0x4c000008
+-//#define MPLLCFG ((0x90 << 12) + (0x2 << 4) + 0x2)
+-#define MPLLCFG ((0x90 << 12) + (0x7 << 4) + 0x0)
+-#define UPLLCFG ((0x78 << 12) + (0x2 << 4) + 0x3)
++
+ ldr r0, =LOCKTIME
+ mov r1, #0xffffff
+ str r1, [r0]
+
+ ldr r0, =UPLLCON
+- ldr r1, =UPLLCFG
++ ldr r1, =UPLLCON_val
+ str r1, [r0]
+
+ /* Page 7-19, seven nops between UPLL and MPLL */
+@@ -189,12 +221,12 @@
+ nop
+ nop
+
+- ldr r1, =MPLLCFG
++ ldr r1, =MPLLCON_val
+ str r1, [r0, #-4] /* MPLLCON */
+
+ /* FCLK:HCLK:PCLK = 1:2:4 */
+ ldr r0, =CLKDIVN
+- mov r1, #3
++ mov r1, #CLKDIVN_val
+ str r1, [r0]
+
+ #if 1
+@@ -222,7 +254,7 @@
+ str r1, [r0, #0x28]
+ #endif
+
+-#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */
++#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */
+
+ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
+ #ifndef CONFIG_LL_INIT_NAND_ONLY
+@@ -279,7 +311,7 @@
+ #if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && defined(CONFIG_LL_INIT_NAND_ONLY)
+ bl cpu_init_crit
+ #endif
+-#if defined(CONFIG_S3C2410)
++#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
+ /* ensure some refresh has happened */
+ ldr r1, =0xfffff
+ 1: subs r1, r1, #1
+@@ -290,11 +322,12 @@
+ ldr r0, [ r1 ]
+ tst r0, #0x02 /* is this resume from power down */
+ ldrne pc, [r1, #4] /* gstatus3 */
+-#endif /* CONFIG_S3C2410 */
++#endif /* CONFIG_S3C2410 || CONFIG_S3C2440 */
+ #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+ /* mov r10, lr */
+
++#if defined(CONFIG_S3C2410)
+ @ reset NAND
+ mov r1, #S3C2410_NAND_BASE
+ ldr r2, =0xf842 @ initial value enable tacls=3,rph0=6,rph1=0
+@@ -314,6 +347,17 @@
+ ldr r2, [r1, #oNFCONF]
+ orr r2, r2, #0x800 @ disable chip
+ str r2, [r1, #oNFCONF]
++#elif defined(CONFIG_S3C2440)
++ mov r1, #S3C2440_NAND_BASE
++ ldr r2, =0xfff0 @ initial value tacls=3,rph0=7,rph1=7
++ ldr r3, [r1, #oNFCONF]
++ orr r3, r3, r2
++ str r3, [r1, #oNFCONF]
++
++ ldr r3, [r1, #oNFCONT]
++ orr r3, r3, #1 @ enable nand controller
++ str r3, [r1, #oNFCONT]
++#endif
+
+ #if 0
+ @ get ready to call C functions (for nand_read())
+@@ -382,7 +426,7 @@
+ #endif /* CONFIG_S3C2410_NAND_BOOT */
+ done_relocate:
+
+-#if defined(CONFIG_USE_IRQ) && defined(CONFIG_S3C2410)
++#if defined(CONFIG_USE_IRQ) && (defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440))
+ /* In the case of the S3C2410, if we've somehow magically (JTAG, ...)
+ ended up in RAM, then that ram is mapped to 0x30000000 and not 0.
+ So we need to copy the interrupt vectors, etc. */
+Index: u-boot/cpu/arm920t/s3c24x0/nand_read.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/nand_read.c
++++ u-boot/cpu/arm920t/s3c24x0/nand_read.c
+@@ -16,30 +16,141 @@
+ */
+
+ #include <common.h>
++#include <linux/mtd/nand.h>
+
+ #ifdef CONFIG_S3C2410_NAND_BOOT
+
+ #define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REGw(x) (*(volatile unsigned short *)(x))
+ #define __REGi(x) (*(volatile unsigned int *)(x))
+ #define NF_BASE 0x4e000000
++#if defined(CONFIG_S3C2410)
+ #define NFCONF __REGi(NF_BASE + 0x0)
+ #define NFCMD __REGb(NF_BASE + 0x4)
+ #define NFADDR __REGb(NF_BASE + 0x8)
+ #define NFDATA __REGb(NF_BASE + 0xc)
+ #define NFSTAT __REGb(NF_BASE + 0x10)
++#define NFSTAT_BUSY 1
++#define nand_select() (NFCONF &= ~0x800)
++#define nand_deselect() (NFCONF |= 0x800)
++#define nand_clear_RnB() do {} while (0)
++#elif defined(CONFIG_S3C2440)
++#define NFCONF __REGi(NF_BASE + 0x0)
++#define NFCONT __REGi(NF_BASE + 0x4)
++#define NFCMD __REGb(NF_BASE + 0x8)
++#define NFADDR __REGb(NF_BASE + 0xc)
++#define NFDATA __REGb(NF_BASE + 0x10)
++#define NFDATA16 __REGw(NF_BASE + 0x10)
++#define NFSTAT __REGb(NF_BASE + 0x20)
++#define NFSTAT_BUSY 1
++#define nand_select() (NFCONT &= ~(1 << 1))
++#define nand_deselect() (NFCONT |= (1 << 1))
++#define nand_clear_RnB() (NFSTAT |= (1 << 2))
++#endif
+
+-#define BUSY 1
+-inline void wait_idle(void)
++static inline void nand_wait(void)
+ {
+ int i;
+
+- while (!(NFSTAT & BUSY))
++ while (!(NFSTAT & NFSTAT_BUSY))
+ for (i=0; i<10; i++);
+ }
+
+-#define NAND_SECTOR_SIZE 512
+-#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
+-#define NAND_PAGE_SIZE 0x4000
++#if defined(CONFIG_S3C2410)
++/* configuration for 2410 with 512byte sized flash */
++#define NAND_PAGE_SIZE 512
++#define BAD_BLOCK_OFFSET 517
++#define NAND_BLOCK_MASK (NAND_PAGE_SIZE - 1)
++#define NAND_BLOCK_SIZE 0x4000
++#else
++/* configuration for 2440 with 2048byte sized flash */
++#define NAND_5_ADDR_CYCLE
++#define NAND_PAGE_SIZE 2048
++#define BAD_BLOCK_OFFSET NAND_PAGE_SIZE
++#define NAND_BLOCK_MASK (NAND_PAGE_SIZE - 1)
++#define NAND_BLOCK_SIZE (NAND_PAGE_SIZE * 64)
++#endif
++
++/* compile time failure in case of an invalid configuration */
++#if defined(CONFIG_S3C2410) && (NAND_PAGE_SIZE != 512)
++#error "S3C2410 does not support nand page size != 512"
++#endif
++
++static int is_bad_block(unsigned long i)
++{
++ unsigned char data;
++ unsigned long page_num;
++
++ /* FIXME: do this twice, for first and second page in block */
++
++ nand_clear_RnB();
++#if (NAND_PAGE_SIZE == 512)
++ NFCMD = NAND_CMD_READOOB; /* 0x50 */
++ NFADDR = BAD_BLOCK_OFFSET & 0xf;
++ NFADDR = (i >> 9) & 0xff;
++ NFADDR = (i >> 17) & 0xff;
++ NFADDR = (i >> 25) & 0xff;
++#elif (NAND_PAGE_SIZE == 2048)
++ page_num = i >> 11; /* addr / 2048 */
++ NFCMD = NAND_CMD_READ0;
++ NFADDR = BAD_BLOCK_OFFSET & 0xff;
++ NFADDR = (BAD_BLOCK_OFFSET >> 8) & 0xff;
++ NFADDR = page_num & 0xff;
++ NFADDR = (page_num >> 8) & 0xff;
++ NFADDR = (page_num >> 16) & 0xff;
++ NFCMD = NAND_CMD_READSTART;
++#endif
++ nand_wait();
++ data = (NFDATA & 0xff);
++ if (data != 0xff)
++ return 1;
++
++ return 0;
++}
++
++static int nand_read_page_ll(unsigned char *buf, unsigned long addr)
++{
++ unsigned short *ptr16 = (unsigned short *)buf;
++ unsigned int i, page_num;
++
++ nand_clear_RnB();
++
++ NFCMD = NAND_CMD_READ0;
++
++#if (NAND_PAGE_SIZE == 512)
++ /* Write Address */
++ NFADDR = addr & 0xff;
++ NFADDR = (addr >> 9) & 0xff;
++ NFADDR = (addr >> 17) & 0xff;
++ NFADDR = (addr >> 25) & 0xff;
++#elif (NAND_PAGE_SIZE == 2048)
++ page_num = addr >> 11; /* addr / 2048 */
++ /* Write Address */
++ NFADDR = 0;
++ NFADDR = 0;
++ NFADDR = page_num & 0xff;
++ NFADDR = (page_num >> 8) & 0xff;
++ NFADDR = (page_num >> 16) & 0xff;
++ NFCMD = NAND_CMD_READSTART;
++#else
++#error "unsupported nand page size"
++#endif
++ nand_wait();
++
++#if defined(CONFIG_S3C2410)
++ for (i = 0; i < NAND_PAGE_SIZE; i++) {
++ *buf = (NFDATA & 0xff);
++ buf++;
++ }
++#elif defined(CONFIG_S3C2440)
++ for (i = 0; i < NAND_PAGE_SIZE/2; i++) {
++ *ptr16 = NFDATA16;
++ ptr16++;
++ }
++#endif
++
++ return NAND_PAGE_SIZE;
++}
+
+ /* low level nand read function */
+ int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
+@@ -50,47 +161,28 @@
+ return -1; /* invalid alignment */
+
+ /* chip Enable */
+- NFCONF &= ~0x800;
++ nand_select();
++ nand_clear_RnB();
+ for (i=0; i<10; i++);
+
+ for (i=start_addr; i < (start_addr + size);) {
+ #ifdef CONFIG_S3C2410_NAND_SKIP_BAD
+- if (start_addr % NAND_PAGE_SIZE == 0) {
+- unsigned char data;
+- NFCMD = 0x50;
+- NFADDR = 517&0xf;
+- NFADDR = (i >> 9) & 0xff;
+- NFADDR = (i >> 17) & 0xff;
+- NFADDR = (i >> 25) & 0xff;
+- wait_idle();
+- data = (NFDATA & 0xff);
+- if (data != 0xff) {
++ if (start_addr % NAND_BLOCK_SIZE == 0) {
++ if (is_bad_block(i)) {
+ /* Bad block */
+- i += NAND_PAGE_SIZE;
+- size += NAND_PAGE_SIZE;
++ i += NAND_BLOCK_SIZE;
++ size += NAND_BLOCK_SIZE;
+ continue;
+ }
+ }
+ #endif
+- /* READ0 */
+- NFCMD = 0;
+-
+- /* Write Address */
+- NFADDR = i & 0xff;
+- NFADDR = (i >> 9) & 0xff;
+- NFADDR = (i >> 17) & 0xff;
+- NFADDR = (i >> 25) & 0xff;
+-
+- wait_idle();
+-
+- for (j=0; j < NAND_SECTOR_SIZE; j++, i++) {
+- *buf = (NFDATA & 0xff);
+- buf++;
+- }
++ j = nand_read_page_ll(buf, i);
++ i += j;
++ buf += j;
+ }
+
+ /* chip Disable */
+- NFCONF |= 0x800; /* chip disable */
++ nand_deselect();
+
+ return 0;
+ }
+Index: u-boot/cpu/arm920t/s3c24x0/nand.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/nand.c
++++ u-boot/cpu/arm920t/s3c24x0/nand.c
+@@ -36,24 +36,54 @@
+ #define __REGi(x) (*(volatile unsigned int *)(x))
+
+ #define NF_BASE 0x4e000000
++
+ #define NFCONF __REGi(NF_BASE + 0x0)
+-#define NFCMD __REGb(NF_BASE + 0x4)
+-#define NFADDR __REGb(NF_BASE + 0x8)
+-#define NFDATA __REGb(NF_BASE + 0xc)
+-#define NFSTAT __REGb(NF_BASE + 0x10)
++
++#if defined(CONFIG_S3C2410)
++
++#define oNFCMD 0x4
++#define oNFADDR 0x8
++#define oNFDATA 0xc
++#define oNFSTAT 0x10
+ #define NFECC0 __REGb(NF_BASE + 0x14)
+ #define NFECC1 __REGb(NF_BASE + 0x15)
+ #define NFECC2 __REGb(NF_BASE + 0x16)
++#define NFCONF_nFCE (1<<11)
+
+ #define S3C2410_NFCONF_EN (1<<15)
+ #define S3C2410_NFCONF_512BYTE (1<<14)
+ #define S3C2410_NFCONF_4STEP (1<<13)
+ #define S3C2410_NFCONF_INITECC (1<<12)
+-#define S3C2410_NFCONF_nFCE (1<<11)
+ #define S3C2410_NFCONF_TACLS(x) ((x)<<8)
+ #define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
+ #define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
+
++#elif defined(CONFIG_S3C2440)
++
++#define oNFCMD 0x8
++#define oNFADDR 0xc
++#define oNFDATA 0x10
++#define oNFSTAT 0x20
++
++#define NFCONT __REGi(NF_BASE + 0x04)
++#define NFMECC0 __REGi(NF_BASE + 0x2C)
++#define NFCONF_nFCE (1<<1)
++#define S3C2440_NFCONF_INITECC (1<<4)
++#define S3C2440_NFCONF_MAINECCLOCK (1<<5)
++#define nand_select() (NFCONT &= ~(1 << 1))
++#define nand_deselect() (NFCONT |= (1 << 1))
++#define nand_clear_RnB() (NFSTAT |= (1 << 2))
++#define nand_detect_RB() { while(!(NFSTAT&(1<<2))); }
++#define nand_wait() { while(!(NFSTAT & 0x4)); } /* RnB_TransDectect */
++
++#endif
++
++#define NFCMD __REGb(NF_BASE + oNFCMD)
++#define NFADDR __REGb(NF_BASE + oNFADDR)
++#define NFDATA __REGb(NF_BASE + oNFDATA)
++#define NFSTAT __REGb(NF_BASE + oNFSTAT)
++
++
+ static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
+ {
+ struct nand_chip *chip = mtd->priv;
+@@ -62,23 +92,31 @@
+
+ switch (cmd) {
+ case NAND_CTL_SETNCE:
+- NFCONF &= ~S3C2410_NFCONF_nFCE;
++#if defined(CONFIG_S3C2410)
++ NFCONF &= ~NFCONF_nFCE;
++#elif defined(CONFIG_S3C2440)
++ NFCONT &= ~NFCONF_nFCE;
++#endif
+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
+ break;
+ case NAND_CTL_CLRNCE:
+- NFCONF |= S3C2410_NFCONF_nFCE;
++#if defined(CONFIG_S3C2410)
++ NFCONF |= NFCONF_nFCE;
++#elif defined(CONFIG_S3C2440)
++ NFCONT &= ~NFCONF_nFCE;
++#endif
+ DEBUGN("NFCONF=0x%08x\n", NFCONF);
+ break;
+ case NAND_CTL_SETALE:
+- chip->IO_ADDR_W = NF_BASE + 0x8;
++ chip->IO_ADDR_W = NF_BASE + oNFADDR;
+ DEBUGN("SETALE\n");
+ break;
+ case NAND_CTL_SETCLE:
+- chip->IO_ADDR_W = NF_BASE + 0x4;
++ chip->IO_ADDR_W = NF_BASE + oNFCMD;
+ DEBUGN("SETCLE\n");
+ break;
+ default:
+- chip->IO_ADDR_W = NF_BASE + 0xc;
++ chip->IO_ADDR_W = NF_BASE + oNFDATA;
+ break;
+ }
+ return;
+@@ -180,16 +218,21 @@
+ /* initialize hardware */
+ twrph0 = 3; twrph1 = 0; tacls = 0;
+
++#if defined(CONFIG_S3C2410)
+ cfg = S3C2410_NFCONF_EN;
+ cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
+ cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
+ cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
+
+ NFCONF = cfg;
+- //NFCONF = 0xf842;
++#elif defined(CONFIG_S3C2440)
++ twrph0 = 7; twrph1 = 7; tacls = 7;
++ NFCONF = (tacls<<12)|(twrph0<<8)|(twrph1<<4)|(0<<0);
++ NFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);
++#endif
+
+ /* initialize nand_chip data structure */
+- nand->IO_ADDR_R = nand->IO_ADDR_W = 0x4e00000c;
++ nand->IO_ADDR_R = nand->IO_ADDR_W = NF_BASE + oNFDATA;
+
+ /* read_buf and write_buf are default */
+ /* read_byte and write_byte are default */
+@@ -214,12 +257,23 @@
+ nand->options = 0;
+ #endif
+
++#if defined(CONFIG_S3C2440)
++/*
++ nand_select();
++ nand_clear_RnB();
++ NFCMD = NAND_CMD_RESET;
++ { volatile int i; for (i = 0; i < 10; i ++); }
++ nand_detect_RB();
++ nand_deselect();
++*/
++#endif
++
+ DEBUGN("end of nand_init\n");
+
+ return 0;
+ }
+
+ #else
+- #error "U-Boot legacy NAND support not available for S3C2410"
++ #error "U-Boot legacy NAND support not available for S3C24xx"
+ #endif
+ #endif
+Index: u-boot/cpu/arm920t/s3c24x0/mmc.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/mmc.c
++++ u-boot/cpu/arm920t/s3c24x0/mmc.c
+@@ -137,6 +137,9 @@
+ dcon |= S3C2410_SDIDCON_RXAFTERCMD|S3C2410_SDIDCON_XFER_RXSTART;
+ if (wide)
+ dcon |= S3C2410_SDIDCON_WIDEBUS;
++#if defined(CONFIG_S3C2440)
++ dcon |= S3C2440_SDIDCON_DS_WORD | S3C2440_SDIDCON_DATSTART;
++#endif
+ sdi->SDIDCON = dcon;
+
+ /* send read command */
+@@ -394,13 +397,18 @@
+
+ clk_power->CLKCON |= (1 << 9);
+
++ sdi->SDIBSIZE = 512;
++#if defined(CONFIG_S3C2410)
+ /* S3C2410 has some bug that prevents reliable operation at higher speed */
+ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
+- sdi->SDIPRE = 0x02; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
+- sdi->SDIBSIZE = 512;
++ sdi->SDIPRE = 0x02; /* 2410: SDCLK = PCLK/2 / (SDIPRE+1) = 11MHz */
+ sdi->SDIDTIMER = 0xffff;
++#elif defined(CONFIG_S3C2440)
++ sdi->SDIPRE = 0x05; /* 2410: SDCLK = PCLK / (SDIPRE+1) = 11MHz */
++ sdi->SDIDTIMER = 0x7fffff;
++#endif
+ sdi->SDIIMSK = 0x0;
+- sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2440_SDICON_MMCCLOCK;
++ sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2410_SDICON_CLOCKTYPE;
+ udelay(125000); /* FIXME: 74 SDCLK cycles */
+
+ mmc_csd.c_size = 0;
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch
new file mode 100644
index 0000000000..62ae5592ab
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch
@@ -0,0 +1,256 @@
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -35,6 +35,8 @@
+ #include <s3c2410.h>
+ #elif defined(CONFIG_S3C2440)
+ #include <s3c2440.h>
++#elif defined(CONFIG_S3C2443)
++#include <s3c2443.h>
+ #endif
+
+
+@@ -164,9 +166,15 @@
+ # define UPLLCON_val ((0x3c << 12) + (0x4 << 4) + 0x2)
+ # define CLKDIVN_val 7 /* FCLK:HCLK:PCLK = 1:3:6 */
+ # define CAMDIVN 0x4C000018
++#elif defined(CONFIG_S3C2443)
++# define INTSUBMSK_val 0x1fffffff
++# define EPLLCON_val ((40 << 16) | (1 << 8) | (1)) /* 96 MHz */
++# define MPLLCON_val ((81 << 16) | (2 << 8) | (0)) /* 1068 MHz */
++# define CLKDIV0_val ((8 << 9) | (1 << 4) | (1 << 3) | (1 << 2)
+ #endif
+
+-#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
++#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || \
++ defined(CONFIG_S3C2440) || defined(CONFIG_S3C2443)
+ ldr r0, =pWTCON
+ mov r1, #0x0
+ str r1, [r0]
+@@ -177,7 +185,7 @@
+ mov r1, #0xffffffff
+ ldr r0, =INTMSK
+ str r1, [r0]
+-# if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
++# if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_S3C2443)
+ ldr r1, =INTSUBMSK_val
+ ldr r0, =INTSUBMSK
+ str r1, [r0]
+@@ -196,6 +204,43 @@
+ mcr p15, 0, r1, c1, c0, 0
+
+
++#if defined(CONFIG_S3C2443)
++#define LOCKCON0 0x4c000000
++#define LOCKCON1 0x4c000004
++#define MPLLCON 0x4c000010
++#define EPLLCON 0x4c000018
++
++ ldr r0, =CLKDIV0
++ ldr r1, =CLKDIV0_val
++ str r1, [r0]
++
++ /* set safe (way too long) locktime for both PLLs */
++ ldr r0, =LOCKCON0
++ mov r1, #0xffffff
++ str r1, [r0]
++ ldr r0, =LOCKCON1
++ str r1, [r0]
++
++ /* configure MPLL */
++ ldr r0, =MPLLCON
++ ldr r1, =MPLLCON_val
++ str r1, [r0]
++
++ /* select MPLL clock out for SYSCLK */
++ ldr r0, =CLKSRC
++ ldr r1, [r0]
++ orr r1, r1, #0x10
++ str r1, [r0]
++
++#if 0
++ /* configure EPLL */
++ ldr r0, =EPLLCON
++ ldr r1, =EPLLCON_val
++ str r1, [r0]
++#endif
++
++
++#else /* i.e. 2440, 2410 and 2440 */
+ #define LOCKTIME 0x4c000000
+ #define UPLLCON 0x4c000008
+
+@@ -223,6 +268,7 @@
+ ldr r0, =CLKDIVN
+ mov r1, #CLKDIVN_val
+ str r1, [r0]
++#endif
+
+ #if 1
+ /* enable uart */
+@@ -249,7 +295,7 @@
+ str r1, [r0, #0x28]
+ #endif
+
+-#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */
++#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 || CONFIG_S3C2443 */
+
+ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
+ #ifndef CONFIG_LL_INIT_NAND_ONLY
+Index: u-boot/cpu/arm920t/s3c24x0/interrupts.c
+===================================================================
+--- u-boot.orig/cpu/arm920t/s3c24x0/interrupts.c
++++ u-boot/cpu/arm920t/s3c24x0/interrupts.c
+@@ -31,7 +31,8 @@
+
+ #include <common.h>
+ #if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || \
+- defined(CONFIG_S3C2440) || defined (CONFIG_TRAB)
++ defined(CONFIG_S3C2440) || defined(CONFIG_S3C2443) || \
++ defined (CONFIG_TRAB)
+
+ #include <arm920t.h>
+ #if defined(CONFIG_S3C2400)
+@@ -40,6 +41,8 @@
+ #include <s3c2410.h>
+ #elif defined(CONFIG_S3C2440)
+ #include <s3c2440.h>
++#elif defined(CONFIG_S3C2443)
++#include <s3c2443.h>
+ #endif
+
+ int timer_load_val = 0;
+@@ -186,6 +189,7 @@
+ #elif defined(CONFIG_SBC2410X) || \
+ defined(CONFIG_SMDK2410) || \
+ defined(CONFIG_SMDK2440) || \
++ defined(CONFIG_SMDK2443) || \
+ defined(CONFIG_VCMA9)
+ tbclk = CFG_HZ;
+ #else
+Index: u-boot/drivers/usbdcore_s3c2410.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_s3c2410.c
++++ u-boot/drivers/usbdcore_s3c2410.c
+@@ -24,7 +24,8 @@
+
+ #include <config.h>
+
+-#if (defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)) && defined(CONFIG_USB_DEVICE)
++#if (defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || \
++ defined(CONFIG_S3C2443)) && defined(CONFIG_USB_DEVICE)
+
+ #include <common.h>
+
+Index: u-boot/include/s3c2443.h
+===================================================================
+--- /dev/null
++++ u-boot/include/s3c2443.h
+@@ -0,0 +1,106 @@
++/*
++ * (C) Copyright 2007 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __S3C2443_H
++#define __S3C2443_H
++
++#include <s3c24x0.h>
++
++/* CLOCK & POWER MANAGEMENT (see S3C2443 manual chapter 2) */
++typedef struct {
++ S3C24X0_REG32 LOCKCON0;
++ S3C24X0_REG32 LOCKCON1;
++ S3C24X0_REG32 OSCSET;
++ S3C24X0_REG32 res1;
++ S3C24X0_REG32 MPLLCON;
++ S3C24X0_REG32 res2;
++ S3C24X0_REG32 EPLLCON;
++ S3C24X0_REG32 res3;
++ S3C24X0_REG32 CLKSRC;
++ S3C24X0_REG32 CLKDIV0;
++ S3C24X0_REG32 CLKDIV1;
++ S3C24X0_REG32 res4;
++ S3C24X0_REG32 HCLKCON;
++ S3C24X0_REG32 PCLKCON;
++ S3C24X0_REG32 SCLKCON;
++ S3C24X0_REG32 res5;
++ S3C24X0_REG32 PWRMODE;
++ S3C24X0_REG32 SWRST;
++ S3C24X0_REG32 res6[2];
++ S3C24X0_REG32 BUSPRI0;
++ S3C24X0_REG32 res7[3];
++} /*__attribute__((__packed__))*/ S3C2443_CLOCK_POWER;
++
++/* NAND FLASH (see S3C2443 manual chapter 7) */
++typedef struct {
++ S3C24X0_REG32 NFCONF;
++ S3C24X0_REG32 NFCONT;
++ S3C24X0_REG32 NFCMD;
++ S3C24X0_REG32 NFADDR;
++ S3C24X0_REG32 NFDATA;
++ S3C24X0_REG32 NFMECCD0;
++ S3C24X0_REG32 NFMECCD1;
++ S3C24X0_REG32 NFSECCD;
++ S3C24X0_REG32 NFSBLK;
++ S3C24X0_REG32 NFEBLK;
++ S3C24X0_REG32 NFSTAT;
++ S3C24X0_REG32 NFECCERR0;
++ S3C24X0_REG32 NFECCERR1;
++ S3C24X0_REG32 NFMECC0;
++ S3C24X0_REG32 NFMECC1;
++ S3C24X0_REG32 NFSECC;
++ S3C24X0_REG32 NFMLCBITPT;
++} /*__attribute__((__packed__))*/ S3C2443_NAND;
++
++/* STATIC MEMORY (see S3C2443 manual chapter 5) */
++struct s3c2443_sm_bank {
++ S3C24X0_REG32 SMBIDCYR;
++ S3C24X0_REG32 SMBWSTRDR;
++ S3C24X0_REG32 SMBWSTWRR;
++ S3C24X0_REG32 SMBWSTOENR;
++ S3C24X0_REG32 SMBWSTWENR;
++ S3C24X0_REG32 SMBCR;
++ S3C24X0_REG32 SMBSR;
++ S3C24X0_REG32 SMBWSTBRDR;
++};
++
++typedef struct {
++ struct s3c2443_sm_bank bank[5]; /* 0x4f000000..0x4f0000bf */
++ S3C24X0_REG32 res[0x40]; /* 0x4f0000c0..0x4f0000ff */
++ S3C24X0_REG32 SMBONETYPER;
++ S3C24X0_REG32 SMCSR;
++ S3C24X0_REG32 SMCCR;
++} /*__attribute__((__packed__))*/ S3C2443_SMEM;
++
++
++/* MOBILE DRAM (see S3C2443 manual chapter 6) */
++typedef struct {
++ S3C24X0_REG32 BANKCFG;
++ S3C24X0_REG32 BANKCON1;
++ S3C24X0_REG32 BANKCON2;
++ S3C24X0_REG32 BANKCON3;
++ S3C24X0_REG32 REFRESH;
++ S3C24X0_REG32 TIMEOUT;
++} /*__attribute__((__packed__))*/ S3C2443_MDRAM
++
++#endif /* __S3C2443_H */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch
new file mode 100644
index 0000000000..09392ad2cf
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch
@@ -0,0 +1,1481 @@
+Add support for the Samsung SMDK2440 development board
+
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2035,6 +2035,9 @@
+ smdk2410_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
+
++smdk2440_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 NULL s3c24x0
++
+ SX1_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm925t sx1
+
+Index: u-boot/include/configs/smdk2440.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/smdk2440.h
+@@ -0,0 +1,296 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ * Gary Jennejohn <gj@denx.de>
++ * David Mueller <d.mueller@elsoft.ch>
++ *
++ * Configuation settings for the SAMSUNG SMDK2440 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if 0
++/* If we want to start u-boot from usb bootloader in NOR flash */
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#else
++/* If we want to start u-boot directly from within NAND flash */
++#define CONFIG_LL_INIT_NAND_ONLY
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++#endif
++
++#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
++#define CONFIG_SMDK2440 1 /* on a SAMSUNG SMDK2440 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 16934400/* SMDK2440 has 16.9344MHz input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 2048*1024)
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
++#define CS8900_BASE 0x19000300
++#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2440 */
++#define CONFIG_HWFLOW 1
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS \
++ (CONFIG_CMD_DFL | \
++ /*CFG_CMD_BSP | */ \
++ CFG_CMD_CACHE | \
++ CFG_CMD_DATE | \
++ /*CFG_CMD_DHCP | */ \
++ CFG_CMD_DIAG | \
++ CFG_CMD_ELF | \
++ CFG_CMD_EXT2 | \
++ CFG_CMD_FAT | \
++ /*CFG_CMD_HWFLOW | */ \
++ /* CFG_CMD_IDE | */ \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_MMC | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PING | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_SAVES | \
++ CFG_CMD_USB)
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS "root=/dev/mtdblock4 rootfstype=jffs2 console=ttySAC2,115200 loglevel=8"
++#define CONFIG_ETHADDR 00:0c:20:02:0a:5b
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_IPADDR 192.168.1.100
++#define CONFIG_SERVERIP 192.168.1.21
++/*#define CONFIG_BOOTFILE "elinos-lart" */
++//#define CONFIG_BOOTCOMMAND "nand read 0x32000000 0x34000 0x200000; bootm"
++#define CONFIG_BOOTCOMMAND "nand read.e 0x32000000 0x100000 0x200000; bootm"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "SMDK2440 # " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 32 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x32000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (512*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (8*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++/* IDE/ATA config */
++
++#if 0
++#define CFG_IDE_MAXBUS 1
++#define CFG_IDE_MAXDEVICE 2
++#define CFG_IDE_PREINIT 0
++
++#define CFG_ATA_BASE_ADDR
++#endif
++
++#define CONFIG_USB_OHCI 1
++
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* FIC */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x511b /* SMDK2440 CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "OpenMoko, Inc."
++#define CONFIG_USBD_PRODUCT_NAME "S3C2440 Bootloader " U_BOOT_VERSION
++#define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 4096
++#define CONFIG_USBD_DFU_INTERFACE 2
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
++
++#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
++
++#define CFG_FLASH_BASE PHYS_FLASH_1
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
++#if 0
++#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
++#endif
++
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#ifdef CONFIG_AMD_LV800
++#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
++#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
++#endif
++#ifdef CONFIG_AMD_LV400
++#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
++#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
++#endif
++
++/* timeout values are in ticks */
++#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
++#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x20000 /* 128k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET_OOB 1
++#define CFG_PREBOOT_OVERRIDE 1
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++#define CONFIG_EXT2 1
++
++#define CONFIG_NEW_QT2440 0
++
++/* FAT driver in u-boot is broken currently */
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 1
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#define CONFIG_REVISION_TAG 1
++#endif
++
++
++#if 0
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#define CONFIG_S3C2410_NAND_BBT 1
++//#define CONFIG_S3C2410_NAND_HWECC 1
++
++#define CFG_NAND_YAFFS_WRITE
++#define CFG_NAND_YAFFS1_NEW_OOB_LAYOUT
++
++#define MTDIDS_DEFAULT "nand0=smdk2440-nand"
++#define MTPARTS_DEFAULT "smdk2440-nand:0x00100000(u-boot),0x00200000(kernel),0x00200000(update),0x00100000(splash),0x01400000(jffs2),-(temp)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "smdk2440-nand"
++#define CONFIG_NAND_DYNPART
++
++#endif /* __CONFIG_H */
+Index: u-boot/include/configs/smdk2440nand.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/smdk2440nand.h
+@@ -0,0 +1,47 @@
++/*
++ * (C) Copyright 2004
++ * Samsung Electronics : SW.LEE <hitchcar@samsung.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ */
++
++#ifndef __SMDK2440_NAND_H
++#define __SMDK2440_NAND_H
++
++#define CFG_ENV_NAND_BLOCK 8
++
++#if 0 //old flash
++#define NAND_OOB_SIZE (16)
++#define NAND_PAGES_IN_BLOCK (32)
++#define NAND_PAGE_SIZE (512)
++
++#define NAND_BLOCK_SIZE (NAND_PAGE_SIZE*NAND_PAGES_IN_BLOCK)
++#define NAND_BLOCK_MASK (NAND_BLOCK_SIZE - 1)
++#define NAND_PAGE_MASK (NAND_PAGE_SIZE - 1)
++#else //new flash
++#define NAND_OOB_SIZE (64)
++#define NAND_PAGES_IN_BLOCK (64)
++#define NAND_PAGE_SIZE (2048)
++
++#define NAND_BLOCK_SIZE (NAND_PAGE_SIZE*NAND_PAGES_IN_BLOCK)
++#define NAND_BLOCK_MASK (NAND_BLOCK_SIZE - 1)
++#define NAND_PAGE_MASK (NAND_PAGE_SIZE - 1)
++
++#endif
++
++
++
++//#define NAND_3_ADDR_CYCLE 1
++//#define S3C24X0_16BIT_NAND 1
++
++#ifdef KINGFISH
++#undef S3C24X0_16BIT_NAND
++#define S3C24X0_16BIT_NAND 1
++#endif
++
++#endif
++
+Index: u-boot/board/smdk2440/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/Makefile
+@@ -0,0 +1,67 @@
++#
++# (C) Copyright 2000-2006
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS := smdk2440.o flash.o udc.o
++SOBJS := lowlevel_init.o
++
++.PHONY: all
++
++all: $(LIB) lowlevel_foo.bin
++
++SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++lowlevel_foo.o: lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o lowlevel_init.o lowlevel_foo.lds
++ $(LD) -T ./lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowlevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+Index: u-boot/board/smdk2440/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/config.mk
+@@ -0,0 +1,29 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# SAMSUNG SMDK2440 board with S3C2440 (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x511b
++CONFIG_USB_DFU_REVISION=0x0100
++
++#
++# SMDK2440 has 1 bank of 64 MB DRAM
++#
++# 3000'0000 to 3400'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# we load ourself to 33F8'0000
++#
++# download area is 3300'0000
++#
++
++
++TEXT_BASE = 0x33F80000
+Index: u-boot/board/smdk2440/flash.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/flash.c
+@@ -0,0 +1,433 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Alex Zuepke <azu@sysgo.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++ulong myflush (void);
++
++
++#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
++#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++
++
++#define CMD_READ_ARRAY 0x000000F0
++#define CMD_UNLOCK1 0x000000AA
++#define CMD_UNLOCK2 0x00000055
++#define CMD_ERASE_SETUP 0x00000080
++#define CMD_ERASE_CONFIRM 0x00000030
++#define CMD_PROGRAM 0x000000A0
++#define CMD_UNLOCK_BYPASS 0x00000020
++
++#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
++#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
++
++#define BIT_ERASE_DONE 0x00000080
++#define BIT_RDY_MASK 0x00000080
++#define BIT_PROGRAM_ERROR 0x00000020
++#define BIT_TIMEOUT 0x80000000 /* our flag */
++
++#define READY 1
++#define ERR 2
++#define TMO 4
++
++/*-----------------------------------------------------------------------
++ */
++
++ulong flash_init (void)
++{
++ int i, j;
++ ulong size = 0;
++
++ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
++ ulong flashbase = 0;
++
++ flash_info[i].flash_id =
++#if defined(CONFIG_AMD_LV400)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV400B & FLASH_TYPEMASK);
++#elif defined(CONFIG_AMD_LV800)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV800B & FLASH_TYPEMASK);
++#else
++#error "Unknown flash configured"
++#endif
++ flash_info[i].size = FLASH_BANK_SIZE;
++ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
++ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
++ if (i == 0)
++ flashbase = PHYS_FLASH_1;
++ else
++ panic ("configured too many flash banks!\n");
++ for (j = 0; j < flash_info[i].sector_count; j++) {
++ if (j <= 3) {
++ /* 1st one is 16 KB */
++ if (j == 0) {
++ flash_info[i].start[j] =
++ flashbase + 0;
++ }
++
++ /* 2nd and 3rd are both 8 KB */
++ if ((j == 1) || (j == 2)) {
++ flash_info[i].start[j] =
++ flashbase + 0x4000 + (j -
++ 1) *
++ 0x2000;
++ }
++
++ /* 4th 32 KB */
++ if (j == 3) {
++ flash_info[i].start[j] =
++ flashbase + 0x8000;
++ }
++ } else {
++ flash_info[i].start[j] =
++ flashbase + (j - 3) * MAIN_SECT_SIZE;
++ }
++ }
++ size += flash_info[i].size;
++ }
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_FLASH_BASE,
++ CFG_FLASH_BASE + monitor_flash_len - 1,
++ &flash_info[0]);
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_ENV_ADDR,
++ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
++
++ return size;
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t * info)
++{
++ int i;
++
++ switch (info->flash_id & FLASH_VENDMASK) {
++ case (AMD_MANUFACT & FLASH_VENDMASK):
++ printf ("AMD: ");
++ break;
++ default:
++ printf ("Unknown Vendor ");
++ break;
++ }
++
++ switch (info->flash_id & FLASH_TYPEMASK) {
++ case (AMD_ID_LV400B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV400BB (4Mbit)\n");
++ break;
++ case (AMD_ID_LV800B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV800BB (8Mbit)\n");
++ break;
++ default:
++ printf ("Unknown Chip Type\n");
++ goto Done;
++ break;
++ }
++
++ printf (" Size: %ld MB in %d Sectors\n",
++ info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i = 0; i < info->sector_count; i++) {
++ if ((i % 5) == 0) {
++ printf ("\n ");
++ }
++ printf (" %08lX%s", info->start[i],
++ info->protect[i] ? " (RO)" : " ");
++ }
++ printf ("\n");
++
++ Done:;
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t * info, int s_first, int s_last)
++{
++ ushort result;
++ int iflag, cflag, prot, sect;
++ int rc = ERR_OK;
++ int chip;
++
++ /* first look for protection bits */
++
++ if (info->flash_id == FLASH_UNKNOWN)
++ return ERR_UNKNOWN_FLASH_TYPE;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ return ERR_INVAL;
++ }
++
++ if ((info->flash_id & FLASH_VENDMASK) !=
++ (AMD_MANUFACT & FLASH_VENDMASK)) {
++ return ERR_UNKNOWN_FLASH_VENDOR;
++ }
++
++ prot = 0;
++ for (sect = s_first; sect <= s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++ if (prot)
++ return ERR_PROTECTED;
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
++ printf ("Erasing sector %2d ... ", sect);
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ if (info->protect[sect] == 0) { /* not protected */
++ vu_short *addr = (vu_short *) (info->start[sect]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ *addr = CMD_ERASE_CONFIRM;
++
++ /* wait until flash is ready */
++ chip = 0;
++
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () >
++ CFG_FLASH_ERASE_TOUT) {
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++ chip = TMO;
++ break;
++ }
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_ERASE_DONE)
++ chip = READY;
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
++ chip = ERR;
++
++ } while (!chip);
++
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++
++ if (chip == ERR) {
++ rc = ERR_PROG_ERROR;
++ goto outahere;
++ }
++ if (chip == TMO) {
++ rc = ERR_TIMOUT;
++ goto outahere;
++ }
++
++ printf ("ok.\n");
++ } else { /* it was protected */
++
++ printf ("protected!\n");
++ }
++ }
++
++ if (ctrlc ())
++ printf ("User Interrupt!\n");
++
++ outahere:
++ /* allow flash to settle - wait 10 ms */
++ udelay_masked (10000);
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash
++ */
++
++volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
++{
++ vu_short *addr = (vu_short *) dest;
++ ushort result;
++ int rc = ERR_OK;
++ int cflag, iflag;
++ int chip;
++
++ /*
++ * Check if Flash is (sufficiently) erased
++ */
++ result = *addr;
++ if ((result & data) != data)
++ return ERR_NOT_ERASED;
++
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
++ *addr = CMD_PROGRAM;
++ *addr = data;
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ /* wait until flash is ready */
++ chip = 0;
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ chip = ERR | TMO;
++ break;
++ }
++ if (!chip && ((result & 0x80) == (data & 0x80)))
++ chip = READY;
++
++ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
++ result = *addr;
++
++ if ((result & 0x80) == (data & 0x80))
++ chip = READY;
++ else
++ chip = ERR;
++ }
++
++ } while (!chip);
++
++ *addr = CMD_READ_ARRAY;
++
++ if (chip == ERR || *addr != data)
++ rc = ERR_PROG_ERROR;
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash.
++ */
++
++int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
++{
++ ulong cp, wp;
++ int l;
++ int i, rc;
++ ushort data;
++
++ wp = (addr & ~1); /* get lower word aligned address */
++
++ /*
++ * handle unaligned start bytes
++ */
++ if ((l = addr - wp) != 0) {
++ data = 0;
++ for (i = 0, cp = wp; i < l; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++ for (; i < 2 && cnt > 0; ++i) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ ++cp;
++ }
++ for (; cnt == 0 && i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 2;
++ }
++
++ /*
++ * handle word aligned part
++ */
++ while (cnt >= 2) {
++ data = *((vu_short *) src);
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 2;
++ wp += 2;
++ cnt -= 2;
++ }
++
++ if (cnt == 0) {
++ return ERR_OK;
++ }
++
++ /*
++ * handle unaligned tail bytes
++ */
++ data = 0;
++ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ }
++ for (; i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ return write_hword (info, wp, data);
++}
+Index: u-boot/board/smdk2440/lowlevel_init.S
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/lowlevel_init.S
+@@ -0,0 +1,167 @@
++/*
++ * Memory Setup stuff - taken from blob memsetup.S
++ *
++ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl) and
++ * Jan-Derk Bakker (J.D.Bakker@its.tudelft.nl)
++ *
++ * Modified for the Samsung SMDK2410 by
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1
++#define B6_SCAN 0x1 /* 9bit */
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x1 /* 9bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x0 /* 2clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ ldr r0, =SMRDATA
++ ldr r1, _TEXT_BASE
++ sub r0, r0, r1
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0x32
++ .word 0x30
++ .word 0x30
+Index: u-boot/board/smdk2440/smdk2440.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/smdk2440.c
+@@ -0,0 +1,152 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger@sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <s3c2440.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#define FCLK_SPEED 1
++
++#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
++#define M_MDIV 0xC3
++#define M_PDIV 0x4
++#define M_SDIV 0x1
++#elif FCLK_SPEED==1 /* Fout = 399.65MHz */
++#define M_MDIV 0x6e
++#define M_PDIV 0x3
++#define M_SDIV 0x1
++#endif
++
++#define USB_CLOCK 1
++
++#if USB_CLOCK==0
++#define U_M_MDIV 0xA1
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x1
++#elif USB_CLOCK==1
++#define U_M_MDIV 0x3c
++#define U_M_PDIV 0x4
++#define U_M_SDIV 0x2
++#endif
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++ gpio->GPACON = 0x007FFFFF;
++ gpio->GPBCON = 0x002a9655;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPCCON = 0xAAAAAAAA;
++ gpio->GPCUP = 0x0000FFFF;
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++ gpio->GPFCON = 0x000055AA;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPGCON = 0xFD95FFBA;
++ gpio->GPGUP = 0x0000FFFF;
++#ifdef CONFIG_SERIAL3
++ gpio->GPHCON = 0x002AAAAA;
++#else
++ gpio->GPHCON = 0x002AFAAA;
++#endif
++ gpio->GPHUP = 0x000007FF;
++
++ gpio->GPJCON = 0x2AAAAAA;
++
++#if 0
++ /* USB Device Part */
++ /*GPGCON is reset for USB Device */
++ gpio->GPGCON = (gpio->GPGCON & ~(3 << 24)) | (1 << 24); /* Output Mode */
++ gpio->GPGUP = gpio->GPGUP | ( 1 << 12); /* Pull up disable */
++
++ gpio->GPGDAT |= ( 1 << 12) ;
++ gpio->GPGDAT &= ~( 1 << 12) ;
++ udelay(20000);
++ gpio->GPGDAT |= ( 1 << 12) ;
++#endif
++
++ /* arch number of SMDK2440-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
++
++/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000.
++ "initrd" is sized such that it can hold two uncompressed 16 bit 640*480
++ images: 640*480*2*2 = 1228800 < 1245184. */
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, 0x20000, 0x200000, 0xa0000, 0x3d5c000-CFG_UBOOT_SIZE, 0 };
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
++
+Index: u-boot/board/smdk2440/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/board/smdk2440/udc.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/udc.c
+@@ -0,0 +1,23 @@
++
++#include <common.h>
++#include <usbdcore.h>
++#include <s3c2440.h>
++
++void udc_ctrl(enum usbd_event event, int param)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ switch (event) {
++ case UDC_CTRL_PULLUP_ENABLE:
++ if (param)
++ gpio->GPGDAT |= (1 << 12);
++ else
++ gpio->GPGDAT &= ~(1 << 12);
++ break;
++ case UDC_CTRL_500mA_ENABLE:
++ /* IGNORE */
++ break;
++ default:
++ break;
++ }
++}
+Index: u-boot/board/smdk2440/lowlevel_foo.S
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/lowlevel_foo.S
+@@ -0,0 +1,82 @@
++
++_start:
++ b reset
++undefvec:
++ b undefvec
++swivec:
++ b swivec
++pabtvec:
++ b pabtvec
++dabtvec:
++ b dabtvec
++rsvdvec:
++ b rsvdvec
++irqvec:
++ b irqvec
++fiqvec:
++ b fiqvec
++
++reset:
++ /*
++ * set the cpu to SVC32 mode
++ */
++ mrs r0,cpsr
++ bic r0,r0,#0x1f
++ orr r0,r0,#0xd3
++ msr cpsr,r0
++
++/* turn off the watchdog */
++#define pWTCON 0x53000000
++#define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
++#define INTSUBMSK 0x4A00001C
++#define CLKDIVN 0x4C000014 /* clock divisor register */
++
++ ldr r0, =pWTCON
++ mov r1, #0x0
++ str r1, [r0]
++
++ mov r1, #0xffffffff
++ ldr r0, =INTMSK
++ str r1, [r0]
++ ldr r1, =0x3ff
++ ldr r0, =INTSUBMSK
++ str r1, [r0]
++
++ /* FCLK:HCLK:PCLK = 1:2:4 */
++ /* default FCLK is 120 MHz ! */
++ ldr r0, =CLKDIVN
++ mov r1, #3
++ str r1, [r0]
++
++ bl cpu_init_crit
++ ldr r0,=TEXT_BASE
++ mov pc, r0
++
++cpu_init_crit:
++ /*
++ * flush v4 I/D caches
++ */
++ mov r0, #0
++ mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
++ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
++
++ /*
++ * disable MMU stuff and caches
++ */
++ mrc p15, 0, r0, c1, c0, 0
++ bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
++ bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
++ orr r0, r0, #0x00000002 @ set bit 2 (A) Align
++ orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
++ mcr p15, 0, r0, c1, c0, 0
++
++ /*
++ * before relocating, we have to setup RAM timing
++ * because memory timing is board-dependend, you will
++ * find a lowlevel_init.S in your board directory.
++ */
++ mov ip, lr
++ bl lowlevel_init
++ mov lr, ip
++ mov pc, lr
++
+Index: u-boot/board/smdk2440/lowlevel_foo.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2440/lowlevel_foo.lds
+@@ -0,0 +1,56 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ lowlevel_foo.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch
new file mode 100644
index 0000000000..5757cc078b
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch
@@ -0,0 +1,1411 @@
+Index: u-boot/Makefile
+===================================================================
+--- u-boot.orig/Makefile
++++ u-boot/Makefile
+@@ -2045,6 +2045,9 @@
+ smdk2440_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 NULL s3c24x0
+
++smdk2443_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm920t smdk2443 NULL s3c24x0
++
+ SX1_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm925t sx1
+
+Index: u-boot/board/smdk2443/Makefile
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/Makefile
+@@ -0,0 +1,67 @@
++#
++# (C) Copyright 2000-2006
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS := smdk2443.o flash.o udc.o
++SOBJS := lowlevel_init.o
++
++.PHONY: all
++
++all: $(LIB) lowlevel_foo.bin
++
++SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++lowlevel_foo.o: lowlevel_foo.S
++ $(CC) -c -DTEXT_BASE=0x33F80000 -march=armv4 \
++ -o lowlevel_foo.o lowlevel_foo.S
++
++lowlevel_foo: lowlevel_foo.o lowlevel_init.o lowlevel_foo.lds
++ $(LD) -T ./lowlevel_foo.lds -Ttext 0x33f80000 -Bstatic \
++ lowlevel_init.o lowlevel_foo.o -o lowlevel_foo
++
++lowlevel_foo.bin: lowlevel_foo
++ $(CROSS_COMPILE)objcopy --gap-fill=0xff -O binary \
++ lowlevel_foo lowlevel_foo.bin
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+Index: u-boot/board/smdk2443/smdk2443.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/smdk2443.c
+@@ -0,0 +1,147 @@
++/*
++ * (C) Copyright 2006 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <s3c2440.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#define FCLK_SPEED 1
++
++#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
++#define M_MDIV 0xC3
++#define M_PDIV 0x4
++#define M_SDIV 0x1
++#elif FCLK_SPEED==1 /* Fout = 399.65MHz */
++#define M_MDIV 0x6e
++#define M_PDIV 0x3
++#define M_SDIV 0x1
++#endif
++
++#define USB_CLOCK 1
++
++#if USB_CLOCK==0
++#define U_M_MDIV 0xA1
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x1
++#elif USB_CLOCK==1
++#define U_M_MDIV 0x3c
++#define U_M_PDIV 0x4
++#define U_M_SDIV 0x2
++#endif
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++ gpio->GPACON = 0x007FFFFF;
++ gpio->GPBCON = 0x00044555;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPCCON = 0xAAAAAAAA;
++ gpio->GPCUP = 0x0000FFFF;
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++ gpio->GPFCON = 0x000055AA;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPGCON = 0xFD95FFBA;
++ gpio->GPGUP = 0x0000FFFF;
++#ifdef CONFIG_SERIAL3
++ gpio->GPHCON = 0x002AAAAA;
++#else
++ gpio->GPHCON = 0x002AFAAA;
++#endif
++ gpio->GPHUP = 0x000007FF;
++
++#if 0
++ /* USB Device Part */
++ /*GPGCON is reset for USB Device */
++ gpio->GPGCON = (gpio->GPGCON & ~(3 << 24)) | (1 << 24); /* Output Mode */
++ gpio->GPGUP = gpio->GPGUP | ( 1 << 12); /* Pull up disable */
++
++ gpio->GPGDAT |= ( 1 << 12) ;
++ gpio->GPGDAT &= ~( 1 << 12) ;
++ udelay(20000);
++ gpio->GPGDAT |= ( 1 << 12) ;
++#endif
++
++ /* arch number of SMDK2440-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
++
++/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000.
++ "initrd" is sized such that it can hold two uncompressed 16 bit 640*480
++ images: 640*480*2*2 = 1228800 < 1245184. */
++
++unsigned int dynpart_size[] = {
++ CFG_UBOOT_SIZE, 0x20000, 0x200000, 0xa0000, 0x3d5c000-CFG_UBOOT_SIZE, 0 };
++
++char *dynpart_names[] = {
++ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
++
++
+Index: u-boot/board/smdk2443/u-boot.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/u-boot.lds
+@@ -0,0 +1,58 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ cpu/arm920t/s3c24x0/nand_read.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/include/configs/smdk2443.h
+===================================================================
+--- /dev/null
++++ u-boot/include/configs/smdk2443.h
+@@ -0,0 +1,289 @@
++/*
++ * (C) Copyright 2007 OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * Configuation settings for the SAMSUNG SMDK2443 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if 0
++/* If we want to start u-boot from usb bootloader in NOR flash */
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#else
++/* If we want to start u-boot directly from within NAND flash */
++#define CONFIG_LL_INIT_NAND_ONLY
++#define CONFIG_S3C2410_NAND_BOOT 1
++#define CONFIG_S3C2410_NAND_SKIP_BAD 1
++#endif
++
++#define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */
++#define CONFIG_SMDK2443 1 /* on a SAMSUNG SMDK2440 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 16934400/* SMDK2440 has 16.9344MHz input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 2048*1024)
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
++#define CS8900_BASE 0x19000300
++#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2440 */
++#define CONFIG_HWFLOW 1
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS \
++ (CONFIG_CMD_DFL | \
++ /*CFG_CMD_BSP | */ \
++ CFG_CMD_CACHE | \
++ CFG_CMD_DATE | \
++ /*CFG_CMD_DHCP | */ \
++ CFG_CMD_DIAG | \
++ CFG_CMD_ELF | \
++ CFG_CMD_EXT2 | \
++ CFG_CMD_FAT | \
++ /*CFG_CMD_HWFLOW | */ \
++ /* CFG_CMD_IDE | */ \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_MMC | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PING | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_SAVES | \
++ CFG_CMD_LICENSE | \
++ CFG_CMD_USB)
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS "root=/dev/mtdblock4 rootfstype=jffs2 console=ttySAC2,115200 loglevel=8"
++#define CONFIG_ETHADDR 00:0c:20:02:0a:5b
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_IPADDR 192.168.1.100
++#define CONFIG_SERVERIP 192.168.1.21
++#define CONFIG_BOOTCOMMAND "nand read.e 0x32000000 0x100000 0x200000; bootm"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "SMDK2443 # " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 32 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x32000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (512*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (8*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++/* IDE/ATA config */
++
++#if 0
++#define CFG_IDE_MAXBUS 1
++#define CFG_IDE_MAXDEVICE 2
++#define CFG_IDE_PREINIT 0
++
++#define CFG_ATA_BASE_ADDR
++#endif
++
++#define CONFIG_USB_OHCI 1
++
++#define CONFIG_USB_DEVICE 1
++#define CONFIG_USB_TTY 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++#define CONFIG_USBD_VENDORID 0x1457 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0x5119 /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "FiWin"
++#define CONFIG_USBD_PRODUCT_NAME "S3C2443 Bootloader " U_BOOT_VERSION
++#define CONFIG_EXTRA_ENV_SETTINGS "usbtty=cdc_acm\0"
++#define CONFIG_USBD_DFU 1
++#define CONFIG_USBD_DFU_XFER_SIZE 4096
++#define CONFIG_USBD_DFU_INTERFACE 2
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
++
++#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
++
++#define CFG_FLASH_BASE PHYS_FLASH_1
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
++#if 0
++#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
++#endif
++
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#ifdef CONFIG_AMD_LV800
++#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
++#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
++#endif
++#ifdef CONFIG_AMD_LV400
++#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
++#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
++#endif
++
++/* timeout values are in ticks */
++#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
++#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x20000 /* 128k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET_OOB 1
++#define CFG_PREBOOT_OVERRIDE 1
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++#define CONFIG_EXT2 1
++
++/* FAT driver in u-boot is broken currently */
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++#if 1
++/* JFFS2 driver */
++#define CONFIG_JFFS2_CMDLINE 1
++#define CONFIG_JFFS2_NAND 1
++#define CONFIG_JFFS2_NAND_DEV 0
++//#define CONFIG_JFFS2_NAND_OFF 0x634000
++//#define CONFIG_JFFS2_NAND_SIZE 0x39cc000
++#endif
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#define CONFIG_REVISION_TAG 1
++#endif
++
++
++#if 0
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#define CONFIG_S3C2410_NAND_BBT 1
++//#define CONFIG_S3C2410_NAND_HWECC 1
++
++#define CFG_NAND_YAFFS_WRITE
++#define CFG_NAND_YAFFS1_NEW_OOB_LAYOUT
++
++#define MTDIDS_DEFAULT "nand0=smdk2443-nand"
++#define MTPARTS_DEFAULT "smdk2443-nand:0x00100000(u-boot),0x00200000(kernel),0x00200000(update),0x00100000(splash),0x01400000(jffs2),-(temp)"
++#define CFG_NAND_DYNPART_MTD_KERNEL_NAME "smdk2443-nand"
++#define CONFIG_NAND_DYNPART
++
++#endif /* __CONFIG_H */
+Index: u-boot/board/smdk2443/lowlevel_foo.S
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/lowlevel_foo.S
+@@ -0,0 +1,82 @@
++
++_start:
++ b reset
++undefvec:
++ b undefvec
++swivec:
++ b swivec
++pabtvec:
++ b pabtvec
++dabtvec:
++ b dabtvec
++rsvdvec:
++ b rsvdvec
++irqvec:
++ b irqvec
++fiqvec:
++ b fiqvec
++
++reset:
++ /*
++ * set the cpu to SVC32 mode
++ */
++ mrs r0,cpsr
++ bic r0,r0,#0x1f
++ orr r0,r0,#0xd3
++ msr cpsr,r0
++
++/* turn off the watchdog */
++#define pWTCON 0x53000000
++#define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
++#define INTSUBMSK 0x4A00001C
++#define CLKDIVN 0x4C000014 /* clock divisor register */
++
++ ldr r0, =pWTCON
++ mov r1, #0x0
++ str r1, [r0]
++
++ mov r1, #0xffffffff
++ ldr r0, =INTMSK
++ str r1, [r0]
++ ldr r1, =0x3ff
++ ldr r0, =INTSUBMSK
++ str r1, [r0]
++
++ /* FCLK:HCLK:PCLK = 1:2:4 */
++ /* default FCLK is 120 MHz ! */
++ ldr r0, =CLKDIVN
++ mov r1, #3
++ str r1, [r0]
++
++ bl cpu_init_crit
++ ldr r0,=TEXT_BASE
++ mov pc, r0
++
++cpu_init_crit:
++ /*
++ * flush v4 I/D caches
++ */
++ mov r0, #0
++ mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
++ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
++
++ /*
++ * disable MMU stuff and caches
++ */
++ mrc p15, 0, r0, c1, c0, 0
++ bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
++ bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
++ orr r0, r0, #0x00000002 @ set bit 2 (A) Align
++ orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
++ mcr p15, 0, r0, c1, c0, 0
++
++ /*
++ * before relocating, we have to setup RAM timing
++ * because memory timing is board-dependend, you will
++ * find a lowlevel_init.S in your board directory.
++ */
++ mov ip, lr
++ bl lowlevel_init
++ mov lr, ip
++ mov pc, lr
++
+Index: u-boot/board/smdk2443/lowlevel_init.S
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/lowlevel_init.S
+@@ -0,0 +1,163 @@
++/*
++ * SMDK2443 Memory Setup
++ *
++ * Copyright (C) 2007 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge@openmoko.org>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar@sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1
++#define B6_SCAN 0x1 /* 9bit */
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x1 /* 9bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x0 /* 2clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ ldr r0, =SMRDATA
++ ldr r1, _TEXT_BASE
++ sub r0, r0, r1
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0x32
++ .word 0x30
++ .word 0x30
+Index: u-boot/board/smdk2443/config.mk
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/config.mk
+@@ -0,0 +1,29 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++# David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
++#
++# SAMSUNG SMDK2443 board with S3C2443 (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++CONFIG_USB_DFU_VENDOR=0x1457
++CONFIG_USB_DFU_PRODUCT=0x511c
++CONFIG_USB_DFU_REVISION=0x0100
++
++#
++# SMDK2443 has 1 bank of 64 MB DRAM
++#
++# 3000'0000 to 3400'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# we load ourself to 33F8'0000
++#
++# download area is 3300'0000
++#
++
++
++TEXT_BASE = 0x33F80000
+Index: u-boot/board/smdk2443/lowlevel_foo.lds
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/lowlevel_foo.lds
+@@ -0,0 +1,56 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ lowlevel_foo.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+Index: u-boot/board/smdk2443/flash.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/flash.c
+@@ -0,0 +1,433 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Alex Zuepke <azu@sysgo.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++ulong myflush (void);
++
++
++#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
++#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++
++
++#define CMD_READ_ARRAY 0x000000F0
++#define CMD_UNLOCK1 0x000000AA
++#define CMD_UNLOCK2 0x00000055
++#define CMD_ERASE_SETUP 0x00000080
++#define CMD_ERASE_CONFIRM 0x00000030
++#define CMD_PROGRAM 0x000000A0
++#define CMD_UNLOCK_BYPASS 0x00000020
++
++#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
++#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
++
++#define BIT_ERASE_DONE 0x00000080
++#define BIT_RDY_MASK 0x00000080
++#define BIT_PROGRAM_ERROR 0x00000020
++#define BIT_TIMEOUT 0x80000000 /* our flag */
++
++#define READY 1
++#define ERR 2
++#define TMO 4
++
++/*-----------------------------------------------------------------------
++ */
++
++ulong flash_init (void)
++{
++ int i, j;
++ ulong size = 0;
++
++ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
++ ulong flashbase = 0;
++
++ flash_info[i].flash_id =
++#if defined(CONFIG_AMD_LV400)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV400B & FLASH_TYPEMASK);
++#elif defined(CONFIG_AMD_LV800)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV800B & FLASH_TYPEMASK);
++#else
++#error "Unknown flash configured"
++#endif
++ flash_info[i].size = FLASH_BANK_SIZE;
++ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
++ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
++ if (i == 0)
++ flashbase = PHYS_FLASH_1;
++ else
++ panic ("configured too many flash banks!\n");
++ for (j = 0; j < flash_info[i].sector_count; j++) {
++ if (j <= 3) {
++ /* 1st one is 16 KB */
++ if (j == 0) {
++ flash_info[i].start[j] =
++ flashbase + 0;
++ }
++
++ /* 2nd and 3rd are both 8 KB */
++ if ((j == 1) || (j == 2)) {
++ flash_info[i].start[j] =
++ flashbase + 0x4000 + (j -
++ 1) *
++ 0x2000;
++ }
++
++ /* 4th 32 KB */
++ if (j == 3) {
++ flash_info[i].start[j] =
++ flashbase + 0x8000;
++ }
++ } else {
++ flash_info[i].start[j] =
++ flashbase + (j - 3) * MAIN_SECT_SIZE;
++ }
++ }
++ size += flash_info[i].size;
++ }
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_FLASH_BASE,
++ CFG_FLASH_BASE + monitor_flash_len - 1,
++ &flash_info[0]);
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_ENV_ADDR,
++ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
++
++ return size;
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t * info)
++{
++ int i;
++
++ switch (info->flash_id & FLASH_VENDMASK) {
++ case (AMD_MANUFACT & FLASH_VENDMASK):
++ printf ("AMD: ");
++ break;
++ default:
++ printf ("Unknown Vendor ");
++ break;
++ }
++
++ switch (info->flash_id & FLASH_TYPEMASK) {
++ case (AMD_ID_LV400B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV400BB (4Mbit)\n");
++ break;
++ case (AMD_ID_LV800B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV800BB (8Mbit)\n");
++ break;
++ default:
++ printf ("Unknown Chip Type\n");
++ goto Done;
++ break;
++ }
++
++ printf (" Size: %ld MB in %d Sectors\n",
++ info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i = 0; i < info->sector_count; i++) {
++ if ((i % 5) == 0) {
++ printf ("\n ");
++ }
++ printf (" %08lX%s", info->start[i],
++ info->protect[i] ? " (RO)" : " ");
++ }
++ printf ("\n");
++
++ Done:;
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t * info, int s_first, int s_last)
++{
++ ushort result;
++ int iflag, cflag, prot, sect;
++ int rc = ERR_OK;
++ int chip;
++
++ /* first look for protection bits */
++
++ if (info->flash_id == FLASH_UNKNOWN)
++ return ERR_UNKNOWN_FLASH_TYPE;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ return ERR_INVAL;
++ }
++
++ if ((info->flash_id & FLASH_VENDMASK) !=
++ (AMD_MANUFACT & FLASH_VENDMASK)) {
++ return ERR_UNKNOWN_FLASH_VENDOR;
++ }
++
++ prot = 0;
++ for (sect = s_first; sect <= s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++ if (prot)
++ return ERR_PROTECTED;
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
++ printf ("Erasing sector %2d ... ", sect);
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ if (info->protect[sect] == 0) { /* not protected */
++ vu_short *addr = (vu_short *) (info->start[sect]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ *addr = CMD_ERASE_CONFIRM;
++
++ /* wait until flash is ready */
++ chip = 0;
++
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () >
++ CFG_FLASH_ERASE_TOUT) {
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++ chip = TMO;
++ break;
++ }
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_ERASE_DONE)
++ chip = READY;
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
++ chip = ERR;
++
++ } while (!chip);
++
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++
++ if (chip == ERR) {
++ rc = ERR_PROG_ERROR;
++ goto outahere;
++ }
++ if (chip == TMO) {
++ rc = ERR_TIMOUT;
++ goto outahere;
++ }
++
++ printf ("ok.\n");
++ } else { /* it was protected */
++
++ printf ("protected!\n");
++ }
++ }
++
++ if (ctrlc ())
++ printf ("User Interrupt!\n");
++
++ outahere:
++ /* allow flash to settle - wait 10 ms */
++ udelay_masked (10000);
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash
++ */
++
++volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
++{
++ vu_short *addr = (vu_short *) dest;
++ ushort result;
++ int rc = ERR_OK;
++ int cflag, iflag;
++ int chip;
++
++ /*
++ * Check if Flash is (sufficiently) erased
++ */
++ result = *addr;
++ if ((result & data) != data)
++ return ERR_NOT_ERASED;
++
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
++ *addr = CMD_PROGRAM;
++ *addr = data;
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ /* wait until flash is ready */
++ chip = 0;
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ chip = ERR | TMO;
++ break;
++ }
++ if (!chip && ((result & 0x80) == (data & 0x80)))
++ chip = READY;
++
++ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
++ result = *addr;
++
++ if ((result & 0x80) == (data & 0x80))
++ chip = READY;
++ else
++ chip = ERR;
++ }
++
++ } while (!chip);
++
++ *addr = CMD_READ_ARRAY;
++
++ if (chip == ERR || *addr != data)
++ rc = ERR_PROG_ERROR;
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash.
++ */
++
++int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
++{
++ ulong cp, wp;
++ int l;
++ int i, rc;
++ ushort data;
++
++ wp = (addr & ~1); /* get lower word aligned address */
++
++ /*
++ * handle unaligned start bytes
++ */
++ if ((l = addr - wp) != 0) {
++ data = 0;
++ for (i = 0, cp = wp; i < l; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++ for (; i < 2 && cnt > 0; ++i) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ ++cp;
++ }
++ for (; cnt == 0 && i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 2;
++ }
++
++ /*
++ * handle word aligned part
++ */
++ while (cnt >= 2) {
++ data = *((vu_short *) src);
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 2;
++ wp += 2;
++ cnt -= 2;
++ }
++
++ if (cnt == 0) {
++ return ERR_OK;
++ }
++
++ /*
++ * handle unaligned tail bytes
++ */
++ data = 0;
++ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ }
++ for (; i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ return write_hword (info, wp, data);
++}
+Index: u-boot/board/smdk2443/udc.c
+===================================================================
+--- /dev/null
++++ u-boot/board/smdk2443/udc.c
+@@ -0,0 +1,23 @@
++
++#include <common.h>
++#include <usbdcore.h>
++#include <s3c2440.h>
++
++void udc_ctrl(enum usbd_event event, int param)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ switch (event) {
++ case UDC_CTRL_PULLUP_ENABLE:
++ if (param)
++ gpio->GPGDAT |= (1 << 12);
++ else
++ gpio->GPGDAT &= ~(1 << 12);
++ break;
++ case UDC_CTRL_500mA_ENABLE:
++ /* IGNORE */
++ break;
++ default:
++ break;
++ }
++}
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch
new file mode 100644
index 0000000000..a88e94b006
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch
@@ -0,0 +1,43 @@
+Make simple_strtoul work with upper-case hex numbers.
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/lib_generic/vsprintf.c
+===================================================================
+--- u-boot.orig/lib_generic/vsprintf.c
++++ u-boot/lib_generic/vsprintf.c
+@@ -25,21 +25,22 @@ unsigned long simple_strtoul(const char
+ {
+ unsigned long result = 0,value;
+
+- if (*cp == '0') {
+- cp++;
+- if ((*cp == 'x') && isxdigit(cp[1])) {
+- base = 16;
+- cp++;
+- }
+- if (!base) {
+- base = 8;
+- }
+- }
+ if (!base) {
+ base = 10;
++ if (*cp == '0') {
++ base = 8;
++ cp++;
++ if ((toupper(*cp) == 'X') && isxdigit(cp[1])) {
++ cp++;
++ base = 16;
++ }
++ }
++ } else if (base == 16) {
++ if (cp[0] == '0' && toupper(cp[1]) == 'X')
++ cp += 2;
+ }
+- while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
+- ? toupper(*cp) : *cp)-'A'+10) < base) {
++ while (isxdigit(*cp) &&
++ (value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10) < base) {
+ result = result*base + value;
+ cp++;
+ }
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch
new file mode 100644
index 0000000000..722a227aa6
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch
@@ -0,0 +1,1607 @@
+This patch adds cdc_acm interoperability to u-boot usbtty.
+
+It was taken (almost blindly) from the Linux for Siemens SX1 project on
+handhelds.org. Please don't complain to me about coding style issues
+or whitespace changes in this one - HW.
+
+Index: u-boot/drivers/usbtty.c
+===================================================================
+--- u-boot.orig/drivers/usbtty.c 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/drivers/usbtty.c 2007-02-08 21:11:55.000000000 +0100
+@@ -1,6 +1,9 @@
+ /*
+ * (C) Copyright 2003
+ * Gerry Hamel, geh@ti.com, Texas Instruments
++ *
++ * (C) Copyright 2006
++ * Bryan O'Donoghue, bodonoghue <at> codehermit.ie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -22,26 +25,61 @@
+
+ #ifdef CONFIG_USB_TTY
+
++#include <asm/io.h>
+ #include <circbuf.h>
+ #include <devices.h>
+ #include "usbtty.h"
++#include "usb_cdc_acm.h"
++#include "usbdescriptors.h"
++#include <config.h> /* If defined, override Linux identifiers with
++ * vendor specific ones */
+
+ #if 0
+-#define TTYDBG(fmt,args...) serial_printf("[%s] %s %d: "fmt, __FILE__,__FUNCTION__,__LINE__,##args)
++//+++ debug print into memory buffer,like kernel log
++static char* log_buf = 0x10e00000; // somewhere in RAM
++static char log_str[512];
++#define TTYDBG(fmt,args...)\
++ sprintf(log_str,"\n[%s] %s %d: "fmt, __FILE__,__FUNCTION__,__LINE__,##args);\
++ memcpy(log_buf, log_str, strlen(log_str));\
++ log_buf+=strlen(log_str);\
++ strcpy(log_buf,"\n---------------------------------------------------")\
++//---
+ #else
+ #define TTYDBG(fmt,args...) do{}while(0)
+ #endif
+
+ #if 0
+-#define TTYERR(fmt,args...) serial_printf("ERROR![%s] %s %d: "fmt, __FILE__,__FUNCTION__,__LINE__,##args)
++#define TTYDBG(fmt,args...)\
++ serial_printf("[%s] %s %d: "fmt"\n", __FILE__,__FUNCTION__,__LINE__,##args)
++#endif
++
++#if 0
++#define TTYERR(fmt,args...)\
++ serial_printf("ERROR![%s] %s %d: "fmt"\n", __FILE__,__FUNCTION__,\
++ __LINE__,##args)
+ #else
+ #define TTYERR(fmt,args...) do{}while(0)
+ #endif
+
+ /*
++ * Defines
++ */
++#define NUM_CONFIGS 1
++#define MAX_INTERFACES 2
++#define NUM_ENDPOINTS 3
++#define ACM_TX_ENDPOINT 3
++#define ACM_RX_ENDPOINT 2
++#define GSERIAL_TX_ENDPOINT 2
++#define GSERIAL_RX_ENDPOINT 1
++#define NUM_ACM_INTERFACES 2
++#define NUM_GSERIAL_INTERFACES 1
++#define CONFIG_USBD_DATA_INTERFACE_STR "Bulk Data Interface"
++#define CONFIG_USBD_CTRL_INTERFACE_STR "Control Interface"
++
++/*
+ * Buffers to hold input and output data
+ */
+-#define USBTTY_BUFFER_SIZE 256
++#define USBTTY_BUFFER_SIZE 2048
+ static circbuf_t usbtty_input;
+ static circbuf_t usbtty_output;
+
+@@ -50,157 +88,336 @@
+ * Instance variables
+ */
+ static device_t usbttydev;
+-static struct usb_device_instance device_instance[1];
+-static struct usb_bus_instance bus_instance[1];
++static struct usb_device_instance device_instance[1];
++static struct usb_bus_instance bus_instance[1];
+ static struct usb_configuration_instance config_instance[NUM_CONFIGS];
+-static struct usb_interface_instance interface_instance[NUM_INTERFACES];
+-static struct usb_alternate_instance alternate_instance[NUM_INTERFACES];
+-static struct usb_endpoint_instance endpoint_instance[NUM_ENDPOINTS+1]; /* one extra for control endpoint */
+-
+-/*
+- * Static allocation of urbs
+- */
+-#define RECV_ENDPOINT 1
+-#define TX_ENDPOINT 2
++static struct usb_interface_instance interface_instance[MAX_INTERFACES];
++static struct usb_alternate_instance alternate_instance[MAX_INTERFACES];
++/* one extra for control endpoint */
++static struct usb_endpoint_instance endpoint_instance[NUM_ENDPOINTS+1];
+
+ /*
+ * Global flag
+ */
+ int usbtty_configured_flag = 0;
+
+-
+ /*
+ * Serial number
+ */
+ static char serial_number[16];
+
++
+ /*
+- * Descriptors
++ * Descriptors, Strings, Local variables.
+ */
++
++/* defined and used by usbdcore_ep0.c */
++extern struct usb_string_descriptor **usb_strings;
++
++/* Indicies, References */
++static unsigned short rx_endpoint = 0;
++static unsigned short tx_endpoint = 0;
++static unsigned short interface_count = 0;
++static struct usb_string_descriptor *usbtty_string_table[STR_COUNT];
++
++/* USB Descriptor Strings */
+ static u8 wstrLang[4] = {4,USB_DT_STRING,0x9,0x4};
+ static u8 wstrManufacturer[2 + 2*(sizeof(CONFIG_USBD_MANUFACTURER)-1)];
+ static u8 wstrProduct[2 + 2*(sizeof(CONFIG_USBD_PRODUCT_NAME)-1)];
+ static u8 wstrSerial[2 + 2*(sizeof(serial_number) - 1)];
+ static u8 wstrConfiguration[2 + 2*(sizeof(CONFIG_USBD_CONFIGURATION_STR)-1)];
+-static u8 wstrInterface[2 + 2*(sizeof(CONFIG_USBD_INTERFACE_STR)-1)];
+-
+-static struct usb_string_descriptor *usbtty_string_table[] = {
+- (struct usb_string_descriptor*)wstrLang,
+- (struct usb_string_descriptor*)wstrManufacturer,
+- (struct usb_string_descriptor*)wstrProduct,
+- (struct usb_string_descriptor*)wstrSerial,
+- (struct usb_string_descriptor*)wstrConfiguration,
+- (struct usb_string_descriptor*)wstrInterface
+-};
+-extern struct usb_string_descriptor **usb_strings; /* defined and used by omap1510_ep0.c */
++static u8 wstrDataInterface[2 + 2*(sizeof(CONFIG_USBD_DATA_INTERFACE_STR)-1)];
++static u8 wstrCtrlInterface[2 + 2*(sizeof(CONFIG_USBD_DATA_INTERFACE_STR)-1)];
+
++/* Standard USB Data Structures */
++static struct usb_interface_descriptor interface_descriptors[MAX_INTERFACES];
++static struct usb_endpoint_descriptor *ep_descriptor_ptrs[NUM_ENDPOINTS];
++static struct usb_configuration_descriptor *configuration_descriptor = 0;
+ static struct usb_device_descriptor device_descriptor = {
+- bLength: sizeof(struct usb_device_descriptor),
+- bDescriptorType: USB_DT_DEVICE,
+- bcdUSB: USB_BCD_VERSION,
+- bDeviceClass: USBTTY_DEVICE_CLASS,
+- bDeviceSubClass: USBTTY_DEVICE_SUBCLASS,
+- bDeviceProtocol: USBTTY_DEVICE_PROTOCOL,
+- bMaxPacketSize0: EP0_MAX_PACKET_SIZE,
+- idVendor: CONFIG_USBD_VENDORID,
+- idProduct: CONFIG_USBD_PRODUCTID,
+- bcdDevice: USBTTY_BCD_DEVICE,
+- iManufacturer: STR_MANUFACTURER,
+- iProduct: STR_PRODUCT,
+- iSerialNumber: STR_SERIAL,
+- bNumConfigurations: NUM_CONFIGS
+- };
+-static struct usb_configuration_descriptor config_descriptors[NUM_CONFIGS] = {
+- {
+- bLength: sizeof(struct usb_configuration_descriptor),
+- bDescriptorType: USB_DT_CONFIG,
+- wTotalLength: (sizeof(struct usb_configuration_descriptor)*NUM_CONFIGS) +
+- (sizeof(struct usb_interface_descriptor)*NUM_INTERFACES) +
+- (sizeof(struct usb_endpoint_descriptor)*NUM_ENDPOINTS),
+- bNumInterfaces: NUM_INTERFACES,
+- bConfigurationValue: 1,
+- iConfiguration: STR_CONFIG,
+- bmAttributes: BMATTRIBUTE_SELF_POWERED | BMATTRIBUTE_RESERVED,
+- bMaxPower: USBTTY_MAXPOWER
+- },
+-};
+-static struct usb_interface_descriptor interface_descriptors[NUM_INTERFACES] = {
+- {
+- bLength: sizeof(struct usb_interface_descriptor),
+- bDescriptorType: USB_DT_INTERFACE,
+- bInterfaceNumber: 0,
+- bAlternateSetting: 0,
+- bNumEndpoints: NUM_ENDPOINTS,
+- bInterfaceClass: USBTTY_INTERFACE_CLASS,
+- bInterfaceSubClass: USBTTY_INTERFACE_SUBCLASS,
+- bInterfaceProtocol: USBTTY_INTERFACE_PROTOCOL,
+- iInterface: STR_INTERFACE
+- },
++ .bLength = sizeof(struct usb_device_descriptor),
++ .bDescriptorType = USB_DT_DEVICE,
++ .bcdUSB = cpu_to_le16(USB_BCD_VERSION),
++ .bDeviceSubClass = 0x00,
++ .bDeviceProtocol = 0x00,
++ .bMaxPacketSize0 = EP0_MAX_PACKET_SIZE,
++ .idVendor = cpu_to_le16(CONFIG_USBD_VENDORID),
++ .bcdDevice = cpu_to_le16(USBTTY_BCD_DEVICE),
++ .iManufacturer = STR_MANUFACTURER,
++ .iProduct = STR_PRODUCT,
++ .iSerialNumber = STR_SERIAL,
++ .bNumConfigurations = NUM_CONFIGS
+ };
+-static struct usb_endpoint_descriptor ep_descriptors[NUM_ENDPOINTS] = {
+- {
+- bLength: sizeof(struct usb_endpoint_descriptor),
+- bDescriptorType: USB_DT_ENDPOINT,
+- bEndpointAddress: CONFIG_USBD_SERIAL_OUT_ENDPOINT | USB_DIR_OUT,
+- bmAttributes: USB_ENDPOINT_XFER_BULK,
+- wMaxPacketSize: CONFIG_USBD_SERIAL_OUT_PKTSIZE,
+- bInterval: 0
+- },
+- {
+- bLength: sizeof(struct usb_endpoint_descriptor),
+- bDescriptorType: USB_DT_ENDPOINT,
+- bEndpointAddress: CONFIG_USBD_SERIAL_IN_ENDPOINT | USB_DIR_IN,
+- bmAttributes: USB_ENDPOINT_XFER_BULK,
+- wMaxPacketSize: CONFIG_USBD_SERIAL_IN_PKTSIZE,
+- bInterval: 0
+- },
+- {
+- bLength: sizeof(struct usb_endpoint_descriptor),
+- bDescriptorType: USB_DT_ENDPOINT,
+- bEndpointAddress: CONFIG_USBD_SERIAL_INT_ENDPOINT | USB_DIR_IN,
+- bmAttributes: USB_ENDPOINT_XFER_INT,
+- wMaxPacketSize: CONFIG_USBD_SERIAL_INT_PKTSIZE,
+- bInterval: 0
+- },
+-};
+-static struct usb_endpoint_descriptor *ep_descriptor_ptrs[NUM_ENDPOINTS] = {
+- &(ep_descriptors[0]),
+- &(ep_descriptors[1]),
+- &(ep_descriptors[2]),
++
++
++/*
++ * Static CDC ACM specific descriptors
++ */
++
++struct acm_config_desc {
++ struct usb_configuration_descriptor configuration_desc;
++
++ /* Master Interface */
++ struct usb_interface_descriptor interface_desc;
++
++ struct usb_class_header_function_descriptor usb_class_header;
++ struct usb_class_call_management_descriptor usb_class_call_mgt;
++ struct usb_class_abstract_control_descriptor usb_class_acm;
++ struct usb_class_union_function_descriptor usb_class_union;
++ struct usb_endpoint_descriptor notification_endpoint;
++
++ /* Slave Interface */
++ struct usb_interface_descriptor data_class_interface;
++ struct usb_endpoint_descriptor
++ data_endpoints[NUM_ENDPOINTS-1] __attribute__((packed));
++} __attribute__((packed));
++
++static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
++ {
++ .configuration_desc ={
++ .bLength =
++ sizeof(struct usb_configuration_descriptor),
++ .bDescriptorType = USB_DT_CONFIG,
++ .wTotalLength =
++ cpu_to_le16(sizeof(struct acm_config_desc)),
++ .bNumInterfaces = NUM_ACM_INTERFACES,
++ .bConfigurationValue = 1,
++ .iConfiguration = STR_CONFIG,
++ .bmAttributes =
++ BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
++ .bMaxPower = USBTTY_MAXPOWER
++ },
++ /* Interface 1 */
++ .interface_desc = {
++ .bLength = sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0,
++ .bAlternateSetting = 0,
++ .bNumEndpoints = 0x01,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
++ .bInterfaceSubClass = COMMUNICATIONS_ACM_SUBCLASS,
++ .bInterfaceProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
++ .iInterface = STR_CTRL_INTERFACE,
++ },
++ .usb_class_header = {
++ .bFunctionLength =
++ sizeof(struct usb_class_header_function_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_HEADER,
++ .bcdCDC = cpu_to_le16(110),
++ },
++ .usb_class_call_mgt = {
++ .bFunctionLength =
++ sizeof(struct usb_class_call_management_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_CMF,
++ .bmCapabilities = 0x00,
++ .bDataInterface = 0x01,
++ },
++ .usb_class_acm = {
++ .bFunctionLength =
++ sizeof(struct usb_class_abstract_control_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_ACMF,
++ .bmCapabilities = 0x00,
++ },
++ .usb_class_union = {
++ .bFunctionLength =
++ sizeof(struct usb_class_union_function_descriptor),
++ .bDescriptorType = CS_INTERFACE,
++ .bDescriptorSubtype = USB_ST_UF,
++ .bMasterInterface = 0x00,
++ .bSlaveInterface0 = 0x01,
++ },
++ .notification_endpoint = {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x01 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_INT,
++ .wMaxPacketSize
++ = cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++
++ /* Interface 2 */
++ .data_class_interface = {
++ .bLength =
++ sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0x01,
++ .bAlternateSetting = 0x00,
++ .bNumEndpoints = 0x02,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_DATA,
++ .bInterfaceSubClass = DATA_INTERFACE_SUBCLASS_NONE,
++ .bInterfaceProtocol = DATA_INTERFACE_PROTOCOL_NONE,
++ .iInterface = STR_DATA_INTERFACE,
++ },
++ .data_endpoints = {
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x02 | USB_DIR_OUT,
++ .bmAttributes =
++ USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x03 | USB_DIR_IN,
++ .bmAttributes =
++ USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ },
++ },
++};
++
++static struct rs232_emu rs232_desc={
++ .dter = 115200,
++ .stop_bits = 0x00,
++ .parity = 0x00,
++ .data_bits = 0x08
+ };
+
+-/* utility function for converting char* to wide string used by USB */
+-static void str2wide (char *str, u16 * wide)
+-{
+- int i;
+
+- for (i = 0; i < strlen (str) && str[i]; i++)
+- wide[i] = (u16) str[i];
+-}
++/*
++ * Static Generic Serial specific data
++ */
++
++
++struct gserial_config_desc {
++
++ struct usb_configuration_descriptor configuration_desc;
++ struct usb_interface_descriptor
++ interface_desc[NUM_GSERIAL_INTERFACES] __attribute__((packed));
++ struct usb_endpoint_descriptor
++ data_endpoints[NUM_ENDPOINTS] __attribute__((packed));
++
++} __attribute__((packed));
++
++static struct gserial_config_desc
++gserial_configuration_descriptors[NUM_CONFIGS] ={
++ {
++ .configuration_desc ={
++ .bLength = sizeof(struct usb_configuration_descriptor),
++ .bDescriptorType = USB_DT_CONFIG,
++ .wTotalLength =
++ cpu_to_le16(sizeof(struct gserial_config_desc)),
++ .bNumInterfaces = NUM_GSERIAL_INTERFACES,
++ .bConfigurationValue = 1,
++ .iConfiguration = STR_CONFIG,
++ .bmAttributes =
++ BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
++ .bMaxPower = USBTTY_MAXPOWER
++ },
++ .interface_desc = {
++ {
++ .bLength =
++ sizeof(struct usb_interface_descriptor),
++ .bDescriptorType = USB_DT_INTERFACE,
++ .bInterfaceNumber = 0,
++ .bAlternateSetting = 0,
++ .bNumEndpoints = NUM_ENDPOINTS,
++ .bInterfaceClass =
++ COMMUNICATIONS_INTERFACE_CLASS_VENDOR,
++ .bInterfaceSubClass =
++ COMMUNICATIONS_NO_SUBCLASS,
++ .bInterfaceProtocol =
++ COMMUNICATIONS_NO_PROTOCOL,
++ .iInterface = STR_DATA_INTERFACE
++ },
++ },
++ .data_endpoints = {
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x01 | USB_DIR_OUT,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_OUT_PKTSIZE),
++ .bInterval= 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x02 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_IN_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ {
++ .bLength =
++ sizeof(struct usb_endpoint_descriptor),
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0x03 | USB_DIR_IN,
++ .bmAttributes = USB_ENDPOINT_XFER_INT,
++ .wMaxPacketSize =
++ cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
++ .bInterval = 0xFF,
++ },
++ },
++ },
++};
+
+ /*
+- * Prototypes
++ * Static Function Prototypes
+ */
++
+ static void usbtty_init_strings (void);
+ static void usbtty_init_instances (void);
+ static void usbtty_init_endpoints (void);
+-
++static void usbtty_init_terminal_type(short type);
+ static void usbtty_event_handler (struct usb_device_instance *device,
+- usb_device_event_t event, int data);
++ usb_device_event_t event, int data);
++static int usbtty_cdc_setup(struct usb_device_request *request,
++ struct urb *urb);
+ static int usbtty_configured (void);
+-
+ static int write_buffer (circbuf_t * buf);
+ static int fill_buffer (circbuf_t * buf);
+
+ void usbtty_poll (void);
+-static void pretend_interrupts (void);
+
++/* utility function for converting char* to wide string used by USB */
++static void str2wide (char *str, u16 * wide)
++{
++ int i;
++ for (i = 0; i < strlen (str) && str[i]; i++){
++ #if defined(__LITTLE_ENDIAN)
++ wide[i] = (u16) str[i];
++ #elif defined(__BIG_ENDIAN)
++ wide[i] = ((u16)(str[i])<<8);
++ #else
++ #error "__LITTLE_ENDIAN or __BIG_ENDIAN undefined"
++ #endif
++ }
++}
+
+ /*
+ * Test whether a character is in the RX buffer
+ */
++
+ int usbtty_tstc (void)
+ {
++ struct usb_endpoint_instance *endpoint =
++ &endpoint_instance[rx_endpoint];
++
++ /* If no input data exists, allow more RX to be accepted */
++ if(usbtty_input.size <= 0){
++ udc_unset_nak(endpoint->endpoint_address&0x03);
++ }
++
+ usbtty_poll ();
+ return (usbtty_input.size > 0);
+ }
+@@ -210,15 +427,21 @@
+ * otherwise. When the function is succesfull, the character read is
+ * written into its argument c.
+ */
++
+ int usbtty_getc (void)
+ {
+ char c;
++ struct usb_endpoint_instance *endpoint =
++ &endpoint_instance[rx_endpoint];
+
+ while (usbtty_input.size <= 0) {
++ udc_unset_nak(endpoint->endpoint_address&0x03);
+ usbtty_poll ();
+ }
+
+ buf_pop (&usbtty_input, &c, 1);
++ udc_set_nak(endpoint->endpoint_address&0x03);
++
+ return c;
+ }
+
+@@ -238,7 +461,6 @@
+ }
+ }
+
+-
+ /* usbtty_puts() helper function for finding the next '\n' in a string */
+ static int next_nl_pos (const char *s)
+ {
+@@ -252,8 +474,9 @@
+ }
+
+ /*
+- * Output a string to the usb client port.
++ * Output a string to the usb client port - implementing flow control
+ */
++
+ static void __usbtty_puts (const char *str, int len)
+ {
+ int maxlen = usbtty_output.totalsize;
+@@ -261,22 +484,19 @@
+
+ /* break str into chunks < buffer size, if needed */
+ while (len > 0) {
+- space = maxlen - usbtty_output.size;
++ usbtty_poll ();
+
++ space = maxlen - usbtty_output.size;
+ /* Empty buffer here, if needed, to ensure space... */
+- if (space <= 0) {
++ if (space) {
+ write_buffer (&usbtty_output);
+- space = maxlen - usbtty_output.size;
+- if (space <= 0) {
+- space = len; /* allow old data to be overwritten. */
+- }
+- }
+-
+- n = MIN (space, MIN (len, maxlen));
+- buf_push (&usbtty_output, str, n);
++
++ n = MIN (space, MIN (len, maxlen));
++ buf_push (&usbtty_output, str, n);
+
+- str += n;
+- len -= n;
++ str += n;
++ len -= n;
++ }
+ }
+ }
+
+@@ -313,8 +533,10 @@
+ {
+ int rc;
+ char * sn;
++ char * tt;
+ int snlen;
+
++ /* Get serial number */
+ if (!(sn = getenv("serial#"))) {
+ sn = "000000000000";
+ }
+@@ -327,6 +549,14 @@
+ memcpy (serial_number, sn, snlen);
+ serial_number[snlen] = '\0';
+
++ /* Decide on which type of UDC device to be.
++ */
++
++ if(!(tt = getenv("usbtty"))) {
++ tt = "generic";
++ }
++ usbtty_init_terminal_type(strcmp(tt,"cdc_acm"));
++
+ /* prepare buffers... */
+ buf_init (&usbtty_input, USBTTY_BUFFER_SIZE);
+ buf_init (&usbtty_output, USBTTY_BUFFER_SIZE);
+@@ -337,7 +567,7 @@
+ usbtty_init_strings ();
+ usbtty_init_instances ();
+
+- udc_startup_events (device_instance); /* Enable our device, initialize udc pointers */
++ udc_startup_events (device_instance);/* Enable dev, init udc pointers */
+ udc_connect (); /* Enable pullup for host detection */
+
+ usbtty_init_endpoints ();
+@@ -362,34 +592,52 @@
+ {
+ struct usb_string_descriptor *string;
+
++ usbtty_string_table[STR_LANG] =
++ (struct usb_string_descriptor*)wstrLang;
++
+ string = (struct usb_string_descriptor *) wstrManufacturer;
+- string->bLength = sizeof (wstrManufacturer);
++ string->bLength = sizeof(wstrManufacturer);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (CONFIG_USBD_MANUFACTURER, string->wData);
++ usbtty_string_table[STR_MANUFACTURER]=string;
++
+
+ string = (struct usb_string_descriptor *) wstrProduct;
+- string->bLength = sizeof (wstrProduct);
++ string->bLength = sizeof(wstrProduct);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (CONFIG_USBD_PRODUCT_NAME, string->wData);
++ usbtty_string_table[STR_PRODUCT]=string;
++
+
+ string = (struct usb_string_descriptor *) wstrSerial;
+- string->bLength = 2 + 2*strlen(serial_number);
++ string->bLength = sizeof(serial_number);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (serial_number, string->wData);
++ usbtty_string_table[STR_SERIAL]=string;
++
+
+ string = (struct usb_string_descriptor *) wstrConfiguration;
+- string->bLength = sizeof (wstrConfiguration);
++ string->bLength = sizeof(wstrConfiguration);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (CONFIG_USBD_CONFIGURATION_STR, string->wData);
++ usbtty_string_table[STR_CONFIG]=string;
++
++
++ string = (struct usb_string_descriptor *) wstrDataInterface;
++ string->bLength = sizeof(wstrDataInterface);
++ string->bDescriptorType = USB_DT_STRING;
++ str2wide (CONFIG_USBD_DATA_INTERFACE_STR, string->wData);
++ usbtty_string_table[STR_DATA_INTERFACE]=string;
+
+- string = (struct usb_string_descriptor *) wstrInterface;
+- string->bLength = sizeof (wstrInterface);
++ string = (struct usb_string_descriptor *) wstrCtrlInterface;
++ string->bLength = sizeof(wstrCtrlInterface);
+ string->bDescriptorType = USB_DT_STRING;
+- str2wide (CONFIG_USBD_INTERFACE_STR, string->wData);
++ str2wide (CONFIG_USBD_CTRL_INTERFACE_STR, string->wData);
++ usbtty_string_table[STR_CTRL_INTERFACE]=string;
+
+ /* Now, initialize the string table for ep0 handling */
+ usb_strings = usbtty_string_table;
+-}
++}
+
+ static void usbtty_init_instances (void)
+ {
+@@ -400,6 +648,7 @@
+ device_instance->device_state = STATE_INIT;
+ device_instance->device_descriptor = &device_descriptor;
+ device_instance->event = usbtty_event_handler;
++ device_instance->cdc_recv_setup = usbtty_cdc_setup;
+ device_instance->bus = bus_instance;
+ device_instance->configurations = NUM_CONFIGS;
+ device_instance->configuration_instance_array = config_instance;
+@@ -415,8 +664,8 @@
+ /* configuration instance */
+ memset (config_instance, 0,
+ sizeof (struct usb_configuration_instance));
+- config_instance->interfaces = NUM_INTERFACES;
+- config_instance->configuration_descriptor = config_descriptors;
++ config_instance->interfaces = interface_count;
++ config_instance->configuration_descriptor = configuration_descriptor;
+ config_instance->interface_instance_array = interface_instance;
+
+ /* interface instance */
+@@ -447,17 +696,22 @@
+ sizeof (struct usb_endpoint_instance));
+
+ endpoint_instance[i].endpoint_address =
+- ep_descriptors[i - 1].bEndpointAddress;
++ ep_descriptor_ptrs[i - 1]->bEndpointAddress;
+
+- endpoint_instance[i].rcv_packetSize =
+- ep_descriptors[i - 1].wMaxPacketSize;
+ endpoint_instance[i].rcv_attributes =
+- ep_descriptors[i - 1].bmAttributes;
++ ep_descriptor_ptrs[i - 1]->bmAttributes;
++
++ endpoint_instance[i].rcv_packetSize =
++ le16_to_cpu(ep_descriptor_ptrs[i - 1]->wMaxPacketSize);
++
++ endpoint_instance[i].tx_attributes =
++ ep_descriptor_ptrs[i - 1]->bmAttributes;
+
+ endpoint_instance[i].tx_packetSize =
+- ep_descriptors[i - 1].wMaxPacketSize;
++ le16_to_cpu(ep_descriptor_ptrs[i - 1]->wMaxPacketSize);
++
+ endpoint_instance[i].tx_attributes =
+- ep_descriptors[i - 1].bmAttributes;
++ ep_descriptor_ptrs[i - 1]->bmAttributes;
+
+ urb_link_init (&endpoint_instance[i].rcv);
+ urb_link_init (&endpoint_instance[i].rdy);
+@@ -480,13 +734,79 @@
+ int i;
+
+ bus_instance->max_endpoints = NUM_ENDPOINTS + 1;
+- for (i = 0; i <= NUM_ENDPOINTS; i++) {
++ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ udc_setup_ep (device_instance, i, &endpoint_instance[i]);
+ }
+ }
+
++/* usbtty_init_terminal_type
++ *
++ * Do some late binding for our device type.
++ */
++static void usbtty_init_terminal_type(short type)
++{
++ switch(type){
++ /* CDC ACM */
++ case 0:
++ /* Assign endpoint descriptors */
++ ep_descriptor_ptrs[0] =
++ &acm_configuration_descriptors[0].notification_endpoint;
++ ep_descriptor_ptrs[1] =
++ &acm_configuration_descriptors[0].data_endpoints[0];
++ ep_descriptor_ptrs[2] =
++ &acm_configuration_descriptors[0].data_endpoints[1];
++
++ /* Enumerate Device Descriptor */
++ device_descriptor.bDeviceClass =
++ COMMUNICATIONS_DEVICE_CLASS;
++ device_descriptor.idProduct =
++ cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM);
++
++ /* Assign endpoint indices */
++ tx_endpoint = ACM_TX_ENDPOINT;
++ rx_endpoint = ACM_RX_ENDPOINT;
++
++ /* Configuration Descriptor */
++ configuration_descriptor =
++ (struct usb_configuration_descriptor*)
++ &acm_configuration_descriptors;
++
++ /* Interface count */
++ interface_count = NUM_ACM_INTERFACES;
++ break;
++
++ /* BULK IN/OUT & Default */
++ case 1:
++ default:
++ /* Assign endpoint descriptors */
++ ep_descriptor_ptrs[0] =
++ &gserial_configuration_descriptors[0].data_endpoints[0];
++ ep_descriptor_ptrs[1] =
++ &gserial_configuration_descriptors[0].data_endpoints[1];
++ ep_descriptor_ptrs[2] =
++ &gserial_configuration_descriptors[0].data_endpoints[2];
++
++ /* Enumerate Device Descriptor */
++ device_descriptor.bDeviceClass = 0xFF;
++ device_descriptor.idProduct =
++ cpu_to_le16(CONFIG_USBD_PRODUCTID_GSERIAL);
++
++ /* Assign endpoint indices */
++ tx_endpoint = GSERIAL_TX_ENDPOINT;
++ rx_endpoint = GSERIAL_RX_ENDPOINT;
++
++ /* Configuration Descriptor */
++ configuration_descriptor =
++ (struct usb_configuration_descriptor*)
++ &gserial_configuration_descriptors;
++
++ /* Interface count */
++ interface_count = NUM_GSERIAL_INTERFACES;
++ break;
++ }
++}
+
+-/*********************************************************************************/
++/******************************************************************************/
+
+ static struct urb *next_urb (struct usb_device_instance *device,
+ struct usb_endpoint_instance *endpoint)
+@@ -522,82 +842,179 @@
+
+ static int write_buffer (circbuf_t * buf)
+ {
+- if (!usbtty_configured ()) {
+- return 0;
+- }
++ if (!usbtty_configured ()) {
++ return 0;
++ }
++
++ if (buf->size) {
++
++ struct usb_endpoint_instance *endpoint =
++ &endpoint_instance[tx_endpoint];
++ struct urb *current_urb = NULL;
++ char *dest;
++
++ int space_avail;
++ int popnum, popped;
++ int total = 0;
++
++ /* Break buffer into urb sized pieces, and link each to the endpoint */
++ while (buf->size > 0) {
++ TTYDBG ("buf->size= %d",buf->size);
++ current_urb = next_urb (device_instance, endpoint);
++ if (!current_urb) {
++ TTYDBG ("current_urb is NULL, buf->size %d\n",
++ buf->size);
++ return total;
++ }
++
++ dest = current_urb->buffer +
++ current_urb->actual_length;
++
++ space_avail =
++ current_urb->buffer_length -
++ current_urb->actual_length;
++ TTYDBG ("space_avail= %d",space_avail);
++ popnum = MIN (space_avail, buf->size);
++ if (popnum == 0)
++ break;
++
++ popped = buf_pop (buf, dest, popnum);
++ TTYDBG ("popped= %d, %s",popped, dest);
++ if (popped == 0)
++ break;
++ current_urb->actual_length += popped;
++ total += popped;
++
++ /* If endpoint->last == 0, then transfers have not started on this endpoint */
++ if (endpoint->last == 0) {
++ udc_endpoint_write (endpoint);
++ }
++
++ } /* end while */
++ TTYDBG (" total= %d",total);
++ return total;
++ } /* end if tx_urb */
+
+- if (buf->size) {
++ return 0;
++}
++// static int write_buffer (circbuf_t * buf)
++// {
++// if (!usbtty_configured ()) {
++// return 0;
++// }
++//
++// struct usb_endpoint_instance *endpoint =
++// &endpoint_instance[tx_endpoint];
++// struct urb *current_urb = NULL;
++//
++// current_urb = next_urb (device_instance, endpoint);
++// /* TX data still exists - send it now
++// */
++// if(endpoint->sent < current_urb->actual_length){
++// if(udc_endpoint_write (endpoint)){
++// /* Write pre-empted by RX */
++// return -1;
++// }
++// }
++//
++// if (buf->size) {
++// char *dest;
++//
++// int space_avail;
++// int popnum, popped;
++// int total = 0;
++//
++// /* Break buffer into urb sized pieces,
++// * and link each to the endpoint
++// */
++// while (buf->size > 0) {
++//
++// if (!current_urb) {
++// TTYERR ("current_urb is NULL, buf->size %d\n",
++// buf->size);
++// return total;
++// }
++//
++// dest = (char*)current_urb->buffer +
++// current_urb->actual_length;
++//
++// space_avail =
++// current_urb->buffer_length -
++// current_urb->actual_length;
++// popnum = MIN (space_avail, buf->size);
++// if (popnum == 0)
++// break;
++//
++// popped = buf_pop (buf, dest, popnum);
++// if (popped == 0)
++// break;
++// current_urb->actual_length += popped;
++// total += popped;
++//
++// /* If endpoint->last == 0, then transfers have
++// * not started on this endpoint
++// */
++// if (endpoint->last == 0) {
++// if(udc_endpoint_write (endpoint)){
++// /* Write pre-empted by RX */
++// return -1;
++// }
++// }
++//
++// }/* end while */
++// return total;
++// }
++//
++// return 0;
++// }
+
+- struct usb_endpoint_instance *endpoint =
+- &endpoint_instance[TX_ENDPOINT];
+- struct urb *current_urb = NULL;
+- char *dest;
+-
+- int space_avail;
+- int popnum, popped;
+- int total = 0;
+-
+- /* Break buffer into urb sized pieces, and link each to the endpoint */
+- while (buf->size > 0) {
+- current_urb = next_urb (device_instance, endpoint);
+- if (!current_urb) {
+- TTYERR ("current_urb is NULL, buf->size %d\n",
+- buf->size);
+- return total;
+- }
+-
+- dest = current_urb->buffer +
+- current_urb->actual_length;
+-
+- space_avail =
+- current_urb->buffer_length -
+- current_urb->actual_length;
+- popnum = MIN (space_avail, buf->size);
+- if (popnum == 0)
+- break;
+-
+- popped = buf_pop (buf, dest, popnum);
+- if (popped == 0)
+- break;
+- current_urb->actual_length += popped;
+- total += popped;
+-
+- /* If endpoint->last == 0, then transfers have not started on this endpoint */
+- if (endpoint->last == 0) {
+- udc_endpoint_write (endpoint);
+- }
+-
+- } /* end while */
+- return total;
+- } /* end if tx_urb */
++static int fill_buffer (circbuf_t * buf)
++{
++ struct usb_endpoint_instance *endpoint =
++ &endpoint_instance[rx_endpoint];
+
+- return 0;
+-}
++ if (endpoint->rcv_urb && endpoint->rcv_urb->actual_length) {
++ unsigned int nb = endpoint->rcv_urb->actual_length;
++ char *src = (char *) endpoint->rcv_urb->buffer;
+
++ buf_push (buf, src, nb);
++ endpoint->rcv_urb->actual_length = 0;
++
++ TTYDBG ("nb= %d",nb);
++ return nb;
++ }
++
++ return 0;
++}
++/*
+ static int fill_buffer (circbuf_t * buf)
+ {
+ struct usb_endpoint_instance *endpoint =
+- &endpoint_instance[RECV_ENDPOINT];
++ &endpoint_instance[rx_endpoint];
+
+ if (endpoint->rcv_urb && endpoint->rcv_urb->actual_length) {
+- unsigned int nb = endpoint->rcv_urb->actual_length;
++ unsigned int nb = 0;
+ char *src = (char *) endpoint->rcv_urb->buffer;
++ unsigned int rx_avail = buf->totalsize - buf->size;
+
+- buf_push (buf, src, nb);
+- endpoint->rcv_urb->actual_length = 0;
++ if(rx_avail >= endpoint->rcv_urb->actual_length){
+
++ nb = endpoint->rcv_urb->actual_length;
++ buf_push (buf, src, nb);
++ endpoint->rcv_urb->actual_length = 0;
++
++ }
+ return nb;
+ }
+-
+ return 0;
+ }
+-
++*/
+ static int usbtty_configured (void)
+ {
+ return usbtty_configured_flag;
+ }
+
+-/*********************************************************************************/
++/******************************************************************************/
+
+ static void usbtty_event_handler (struct usb_device_instance *device,
+ usb_device_event_t event, int data)
+@@ -619,8 +1036,34 @@
+ }
+ }
+
+-/*********************************************************************************/
++/******************************************************************************/
+
++int usbtty_cdc_setup(struct usb_device_request *request, struct urb *urb)
++{
++ switch (request->bRequest){
++
++ case ACM_SET_CONTROL_LINE_STATE: /* Implies DTE ready */
++ break;
++ case ACM_SEND_ENCAPSULATED_COMMAND : /* Required */
++ break;
++ case ACM_SET_LINE_ENCODING : /* DTE stop/parity bits
++ * per character */
++ break;
++ case ACM_GET_ENCAPSULATED_RESPONSE : /* request response */
++ break;
++ case ACM_GET_LINE_ENCODING : /* request DTE rate,
++ * stop/parity bits */
++ memcpy (urb->buffer , &rs232_desc, sizeof(rs232_desc));
++ urb->actual_length = sizeof(rs232_desc);
++
++ break;
++ default:
++ return 1;
++ }
++ return 0;
++}
++
++/******************************************************************************/
+
+ /*
+ * Since interrupt handling has not yet been implemented, we use this function
+@@ -630,36 +1073,29 @@
+ void usbtty_poll (void)
+ {
+ /* New interrupts? */
+- pretend_interrupts ();
++ udc_irq();
+
+- /* Write any output data to host buffer (do this before checking interrupts to avoid missing one) */
++ /* Write any output data to host buffer
++ * (do this before checking interrupts to avoid missing one)
++ */
+ if (usbtty_configured ()) {
+ write_buffer (&usbtty_output);
+ }
+
+ /* New interrupts? */
+- pretend_interrupts ();
+-
+- /* Check for new data from host.. (do this after checking interrupts to get latest data) */
++ udc_irq();
++
++ /* Check for new data from host..
++ * (do this after checking interrupts to get latest data)
++ */
+ if (usbtty_configured ()) {
+ fill_buffer (&usbtty_input);
+ }
+
+ /* New interrupts? */
+- pretend_interrupts ();
+-}
++ udc_irq();
+
+-static void pretend_interrupts (void)
+-{
+- /* Loop while we have interrupts.
+- * If we don't do this, the input chain
+- * polling delay is likely to miss
+- * host requests.
+- */
+- while (inw (UDC_IRQ_SRC) & ~UDC_SOF_Flg) {
+- /* Handle any new IRQs */
+- omap1510_udc_irq ();
+- omap1510_udc_noniso_irq ();
+- }
+ }
++
++
+ #endif
+Index: u-boot/drivers/usbtty.h
+===================================================================
+--- u-boot.orig/drivers/usbtty.h 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/drivers/usbtty.h 2007-02-08 21:11:55.000000000 +0100
+@@ -2,6 +2,9 @@
+ * (C) Copyright 2003
+ * Gerry Hamel, geh@ti.com, Texas Instruments
+ *
++ * (C) Copyright 2006
++ * Bryan O'Donoghue, bodonoghue <at> codehermit.ie, CodeHermit
++ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+@@ -21,44 +24,49 @@
+ #ifndef __USB_TTY_H__
+ #define __USB_TTY_H__
+
+-
+ #include "usbdcore.h"
++#if defined(CONFIG_PPC)
++#include "usbdcore_mpc8xx.h"
++#elif defined(CONFIG_OMAP1510)
+ #include "usbdcore_omap1510.h"
++#endif
+
++#include <config.h>
++#include <version.h>
+
+-#define NUM_CONFIGS 1
+-#define NUM_INTERFACES 1
+-#define NUM_ENDPOINTS 3
++/* If no VendorID/ProductID is defined in config.h, pretend to be Linux
++ * DO NOT Reuse this Vendor/Product setup with protocol incompatible devices */
+
+-#define EP0_MAX_PACKET_SIZE 64
++#ifndef CONFIG_USBD_VENDORID
++#define CONFIG_USBD_VENDORID 0x0525 /* Linux/NetChip */
++#define CONFIG_USBD_PRODUCTID_GSERIAL 0xa4a6 /* gserial */
++#define CONFIG_USBD_PRODUCTID_CDCACM 0xa4a7 /* CDC ACM */
++#define CONFIG_USBD_MANUFACTURER "Das U-Boot"
++#define CONFIG_USBD_PRODUCT_NAME U_BOOT_VERSION
++#endif /* CONFIG_USBD_VENDORID */
+
+ #define CONFIG_USBD_CONFIGURATION_STR "TTY via USB"
+-#define CONFIG_USBD_INTERFACE_STR "Simple Serial Data Interface - Bulk Mode"
+-
+-
+-#define CONFIG_USBD_SERIAL_OUT_ENDPOINT 2
+-#define CONFIG_USBD_SERIAL_OUT_PKTSIZE 64
+-#define CONFIG_USBD_SERIAL_IN_ENDPOINT 1
+-#define CONFIG_USBD_SERIAL_IN_PKTSIZE 64
+-#define CONFIG_USBD_SERIAL_INT_ENDPOINT 5
+-#define CONFIG_USBD_SERIAL_INT_PKTSIZE 16
+
++#define CONFIG_USBD_SERIAL_OUT_ENDPOINT UDC_OUT_ENDPOINT
++#define CONFIG_USBD_SERIAL_OUT_PKTSIZE UDC_OUT_PACKET_SIZE
++#define CONFIG_USBD_SERIAL_IN_ENDPOINT UDC_IN_ENDPOINT
++#define CONFIG_USBD_SERIAL_IN_PKTSIZE UDC_IN_PACKET_SIZE
++#define CONFIG_USBD_SERIAL_INT_ENDPOINT UDC_INT_ENDPOINT
++#define CONFIG_USBD_SERIAL_INT_PKTSIZE UDC_INT_PACKET_SIZE
++#define CONFIG_USBD_SERIAL_BULK_PKTSIZE UDC_BULK_PACKET_SIZE
+
+ #define USBTTY_DEVICE_CLASS COMMUNICATIONS_DEVICE_CLASS
+-#define USBTTY_DEVICE_SUBCLASS COMMUNICATIONS_NO_SUBCLASS
+-#define USBTTY_DEVICE_PROTOCOL COMMUNICATIONS_NO_PROTOCOL
+
+-#define USBTTY_INTERFACE_CLASS 0xFF /* Vendor Specific */
+-#define USBTTY_INTERFACE_SUBCLASS 0x02
+-#define USBTTY_INTERFACE_PROTOCOL 0x01
+-
+-#define USBTTY_BCD_DEVICE 0x0
+-#define USBTTY_MAXPOWER 0x0
+-
+-#define STR_MANUFACTURER 1
+-#define STR_PRODUCT 2
+-#define STR_SERIAL 3
+-#define STR_CONFIG 4
+-#define STR_INTERFACE 5
++#define USBTTY_BCD_DEVICE 0x00
++#define USBTTY_MAXPOWER 0x00
++
++#define STR_LANG 0x00
++#define STR_MANUFACTURER 0x01
++#define STR_PRODUCT 0x02
++#define STR_SERIAL 0x03
++#define STR_CONFIG 0x04
++#define STR_DATA_INTERFACE 0x05
++#define STR_CTRL_INTERFACE 0x06
++#define STR_COUNT 0x07
+
+ #endif
+Index: u-boot/drivers/usbdcore_omap1510.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_omap1510.c 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/drivers/usbdcore_omap1510.c 2007-02-08 21:11:55.000000000 +0100
+@@ -960,7 +960,7 @@
+ /* Handle general USB interrupts and dispatch according to type.
+ * This function implements TRM Figure 14-13.
+ */
+-void omap1510_udc_irq (void)
++static void omap1510_udc_irq (void)
+ {
+ u16 irq_src = inw (UDC_IRQ_SRC);
+ int valid_irq = 0;
+@@ -1000,7 +1000,7 @@
+ }
+
+ /* This function implements TRM Figure 14-26. */
+-void omap1510_udc_noniso_irq (void)
++static void omap1510_udc_noniso_irq (void)
+ {
+ unsigned short epnum;
+ unsigned short irq_src = inw (UDC_IRQ_SRC);
+@@ -1054,6 +1054,20 @@
+ irq_src);
+ }
+
++void udc_irq(void)
++{
++ /* Loop while we have interrupts.
++ * If we don't do this, the input chain
++ * polling delay is likely to miss
++ * host requests.
++ */
++ while (inw (UDC_IRQ_SRC) & ~UDC_SOF_Flg) {
++ /* Handle any new IRQs */
++ omap1510_udc_irq ();
++ omap1510_udc_noniso_irq ();
++ }
++}
++
+ /*
+ -------------------------------------------------------------------------------
+ */
+Index: u-boot/include/usb_cdc_acm.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ u-boot/include/usb_cdc_acm.h 2007-02-08 21:11:55.000000000 +0100
+@@ -0,0 +1,43 @@
++/*
++ * (C) Copyright 2006
++ * Bryan O'Donoghue, deckard <at> codehermit.ie, CodeHermit
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++/* ACM Control Requests */
++#define ACM_SEND_ENCAPSULATED_COMMAND 0x00
++#define ACM_GET_ENCAPSULATED_RESPONSE 0x01
++#define ACM_SET_COMM_FEATURE 0x02
++#define ACM_GET_COMM_FEATRUE 0x03
++#define ACM_CLEAR_COMM_FEATURE 0x04
++#define ACM_SET_LINE_ENCODING 0x20
++#define ACM_GET_LINE_ENCODING 0x21
++#define ACM_SET_CONTROL_LINE_STATE 0x22
++#define ACM_SEND_BREAK 0x23
++
++/* ACM Notification Codes */
++#define ACM_NETWORK_CONNECTION 0x00
++#define ACM_RESPONSE_AVAILABLE 0x01
++#define ACM_SERIAL_STATE 0x20
++
++/* Format of response expected by a ACM_GET_LINE_ENCODING request */
++struct rs232_emu{
++ unsigned long dter;
++ unsigned char stop_bits;
++ unsigned char parity;
++ unsigned char data_bits;
++}__attribute__((packed));
+Index: u-boot/include/usbdcore_omap1510.h
+===================================================================
+--- u-boot.orig/include/usbdcore_omap1510.h 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/include/usbdcore_omap1510.h 2007-02-08 21:11:55.000000000 +0100
+@@ -161,13 +161,23 @@
+ #define UDC_VBUS_CTRL (1 << 19)
+ #define UDC_VBUS_MODE (1 << 18)
+
+-
+-void omap1510_udc_irq(void);
+-void omap1510_udc_noniso_irq(void);
+-
++/* OMAP Endpoint parameters */
++#define EP0_MAX_PACKET_SIZE 64
++#define UDC_OUT_ENDPOINT 2
++#define UDC_OUT_PACKET_SIZE 64
++#define UDC_IN_ENDPOINT 1
++#define UDC_IN_PACKET_SIZE 64
++#define UDC_INT_ENDPOINT 5
++#define UDC_INT_PACKET_SIZE 16
++#define UDC_BULK_PACKET_SIZE 16
++
++void udc_irq (void);
++/* Flow control */
++void udc_set_nak(int epid);
++void udc_unset_nak (int epid);
+
+ /* Higher level functions for abstracting away from specific device */
+-void udc_endpoint_write(struct usb_endpoint_instance *endpoint);
++int udc_endpoint_write(struct usb_endpoint_instance *endpoint);
+
+ int udc_init (void);
+
+Index: u-boot/include/usbdescriptors.h
+===================================================================
+--- u-boot.orig/include/usbdescriptors.h 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/include/usbdescriptors.h 2007-02-08 21:11:55.000000000 +0100
+@@ -92,15 +92,17 @@
+ #define COMMUNICATIONS_DEVICE_CLASS 0x02
+
+ /* c.f. CDC 4.2 Table 15 */
+-#define COMMUNICATIONS_INTERFACE_CLASS 0x02
++#define COMMUNICATIONS_INTERFACE_CLASS_CONTROL 0x02
++#define COMMUNICATIONS_INTERFACE_CLASS_DATA 0x0A
++#define COMMUNICATIONS_INTERFACE_CLASS_VENDOR 0x0FF
+
+ /* c.f. CDC 4.3 Table 16 */
+-#define COMMUNICATIONS_NO_SUBCLASS 0x00
++#define COMMUNICATIONS_NO_SUBCLASS 0x00
+ #define COMMUNICATIONS_DLCM_SUBCLASS 0x01
+-#define COMMUNICATIONS_ACM_SUBCLASS 0x02
+-#define COMMUNICATIONS_TCM_SUBCLASS 0x03
++#define COMMUNICATIONS_ACM_SUBCLASS 0x02
++#define COMMUNICATIONS_TCM_SUBCLASS 0x03
+ #define COMMUNICATIONS_MCCM_SUBCLASS 0x04
+-#define COMMUNICATIONS_CCM_SUBCLASS 0x05
++#define COMMUNICATIONS_CCM_SUBCLASS 0x05
+ #define COMMUNICATIONS_ENCM_SUBCLASS 0x06
+ #define COMMUNICATIONS_ANCM_SUBCLASS 0x07
+
+@@ -110,15 +112,22 @@
+ #define COMMUNICATIONS_MDLM_SUBCLASS 0x0a
+ #define COMMUNICATIONS_OBEX_SUBCLASS 0x0b
+
+-/* c.f. CDC 4.6 Table 18 */
++/* c.f. CDC 4.4 Table 17 */
++#define COMMUNICATIONS_NO_PROTOCOL 0x00
++#define COMMUNICATIONS_V25TER_PROTOCOL 0x01 /*Common AT Hayes compatible*/
++
++/* c.f. CDC 4.5 Table 18 */
+ #define DATA_INTERFACE_CLASS 0x0a
+
++/* c.f. CDC 4.6 No Table */
++#define DATA_INTERFACE_SUBCLASS_NONE 0x00 /* No subclass pertinent */
++
+ /* c.f. CDC 4.7 Table 19 */
+-#define COMMUNICATIONS_NO_PROTOCOL 0x00
++#define DATA_INTERFACE_PROTOCOL_NONE 0x00 /* No class protcol required */
+
+
+ /* c.f. CDC 5.2.3 Table 24 */
+-#define CS_INTERFACE 0x24
++#define CS_INTERFACE 0x24
+ #define CS_ENDPOINT 0x25
+
+ /*
+@@ -128,7 +137,7 @@
+ * c.f. WMCD 5.3 Table 5.3
+ */
+
+-#define USB_ST_HEADER 0x00
++#define USB_ST_HEADER 0x00
+ #define USB_ST_CMF 0x01
+ #define USB_ST_ACMF 0x02
+ #define USB_ST_DLMF 0x03
+@@ -137,18 +146,18 @@
+ #define USB_ST_UF 0x06
+ #define USB_ST_CSF 0x07
+ #define USB_ST_TOMF 0x08
+-#define USB_ST_USBTF 0x09
++#define USB_ST_USBTF 0x09
+ #define USB_ST_NCT 0x0a
+ #define USB_ST_PUF 0x0b
+ #define USB_ST_EUF 0x0c
+ #define USB_ST_MCMF 0x0d
+ #define USB_ST_CCMF 0x0e
+ #define USB_ST_ENF 0x0f
+-#define USB_ST_ATMNF 0x10
++#define USB_ST_ATMNF 0x10
+
+ #define USB_ST_WHCM 0x11
+ #define USB_ST_MDLM 0x12
+-#define USB_ST_MDLMD 0x13
++#define USB_ST_MDLMD 0x13
+ #define USB_ST_DMM 0x14
+ #define USB_ST_OBEX 0x15
+ #define USB_ST_CS 0x16
+@@ -312,7 +321,8 @@
+ u8 bDescriptorType;
+ u8 bDescriptorSubtype; /* 0x06 */
+ u8 bMasterInterface;
+- u8 bSlaveInterface0[0];
++ //u8 bSlaveInterface0[0];
++ u8 bSlaveInterface0;
+ } __attribute__ ((packed));
+
+ struct usb_class_country_selection_descriptor {
+Index: u-boot/include/usbdcore.h
+===================================================================
+--- u-boot.orig/include/usbdcore.h 2007-02-08 21:11:27.000000000 +0100
++++ u-boot/include/usbdcore.h 2007-02-08 21:11:55.000000000 +0100
+@@ -576,6 +576,9 @@
+
+ void (*event) (struct usb_device_instance *device, usb_device_event_t event, int data);
+
++ /* Do cdc device specific control requests */
++ int (*cdc_recv_setup)(struct usb_device_request *request, struct urb *urb);
++
+ /* bus interface */
+ struct usb_bus_instance *bus; /* which bus interface driver */
+
+Index: u-boot/drivers/usbdcore_ep0.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_ep0.c 2007-02-08 21:12:05.000000000 +0100
++++ u-boot/drivers/usbdcore_ep0.c 2007-02-08 21:12:08.000000000 +0100
+@@ -223,7 +223,6 @@
+
+ case USB_DESCRIPTOR_TYPE_CONFIGURATION:
+ {
+- int bNumInterface;
+ struct usb_configuration_descriptor
+ *configuration_descriptor;
+ struct usb_device_descriptor *device_descriptor;
+@@ -256,105 +255,6 @@
+ usb_configuration_descriptor),
+ max);
+
+-
+- /* iterate across interfaces for specified configuration */
+- dbg_ep0 (0, "bNumInterfaces: %d",
+- configuration_descriptor->bNumInterfaces);
+- for (bNumInterface = 0;
+- bNumInterface <
+- configuration_descriptor->bNumInterfaces;
+- bNumInterface++) {
+-
+- int bAlternateSetting;
+- struct usb_interface_instance
+- *interface_instance;
+-
+- dbg_ep0 (3, "[%d] bNumInterfaces: %d",
+- bNumInterface,
+- configuration_descriptor->bNumInterfaces);
+-
+- if (! (interface_instance = usbd_device_interface_instance (device,
+- port, index, bNumInterface)))
+- {
+- dbg_ep0 (3, "[%d] interface_instance NULL",
+- bNumInterface);
+- return -1;
+- }
+- /* iterate across interface alternates */
+- for (bAlternateSetting = 0;
+- bAlternateSetting < interface_instance->alternates;
+- bAlternateSetting++) {
+- /*int class; */
+- int bNumEndpoint;
+- struct usb_interface_descriptor *interface_descriptor;
+-
+- struct usb_alternate_instance *alternate_instance;
+-
+- dbg_ep0 (3, "[%d:%d] alternates: %d",
+- bNumInterface,
+- bAlternateSetting,
+- interface_instance->alternates);
+-
+- if (! (alternate_instance = usbd_device_alternate_instance (device, port, index, bNumInterface, bAlternateSetting))) {
+- dbg_ep0 (3, "[%d] alternate_instance NULL",
+- bNumInterface);
+- return -1;
+- }
+- /* copy descriptor for this interface */
+- copy_config (urb, alternate_instance->interface_descriptor,
+- sizeof (struct usb_interface_descriptor),
+- max);
+-
+- /*dbg_ep0(3, "[%d:%d] classes: %d endpoints: %d", bNumInterface, bAlternateSetting, */
+- /* alternate_instance->classes, alternate_instance->endpoints); */
+-
+- /* iterate across classes for this alternate interface */
+-#if 0
+- for (class = 0;
+- class < alternate_instance->classes;
+- class++) {
+- struct usb_class_descriptor *class_descriptor;
+- /*dbg_ep0(3, "[%d:%d:%d] classes: %d", bNumInterface, bAlternateSetting, */
+- /* class, alternate_instance->classes); */
+- if (!(class_descriptor = usbd_device_class_descriptor_index (device, port, index, bNumInterface, bAlternateSetting, class))) {
+- dbg_ep0 (3, "[%d] class NULL",
+- class);
+- return -1;
+- }
+- /* copy descriptor for this class */
+- copy_config (urb, class_descriptor,
+- sizeof (struct usb_class_descriptor),
+- max);
+- }
+-#endif
+-
+- /* iterate across endpoints for this alternate interface */
+- interface_descriptor = alternate_instance->interface_descriptor;
+- for (bNumEndpoint = 0;
+- bNumEndpoint < alternate_instance->endpoints;
+- bNumEndpoint++) {
+- struct usb_endpoint_descriptor *endpoint_descriptor;
+- dbg_ep0 (3, "[%d:%d:%d] endpoint: %d",
+- bNumInterface,
+- bAlternateSetting,
+- bNumEndpoint,
+- interface_descriptor->
+- bNumEndpoints);
+- if (!(endpoint_descriptor = usbd_device_endpoint_descriptor_index (device, port, index, bNumInterface, bAlternateSetting, bNumEndpoint))) {
+- dbg_ep0 (3, "[%d] endpoint NULL",
+- bNumEndpoint);
+- return -1;
+- }
+- /* copy descriptor for this endpoint */
+- copy_config (urb, endpoint_descriptor,
+- sizeof (struct usb_endpoint_descriptor),
+- max);
+- }
+- }
+- }
+- dbg_ep0 (3, "lengths: %d %d",
+- le16_to_cpu (configuration_descriptor->wTotalLength),
+- urb->actual_length);
+ }
+ break;
+
+@@ -363,6 +263,7 @@
+ struct usb_string_descriptor *string_descriptor;
+
+ if (!(string_descriptor = usbd_get_string (index))) {
++ dbg_ep0(0, "Invalid string index %u\n", index);
+ return -1;
+ }
+ /*dbg_ep0(3, "string_descriptor: %p", string_descriptor); */
+@@ -495,6 +396,8 @@
+
+ /* handle USB Standard Request (c.f. USB Spec table 9-2) */
+ if ((request->bmRequestType & USB_REQ_TYPE_MASK) != 0) {
++ if (device->device_state <= STATE_CONFIGURED)
++ return device->cdc_recv_setup(request, urb);
+ dbg_ep0 (1, "non standard request: %x",
+ request->bmRequestType & USB_REQ_TYPE_MASK);
+ return -1; /* Stall here */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch b/packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch
new file mode 100644
index 0000000000..680b301620
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch
@@ -0,0 +1,88 @@
+board/neo1973/gta01/gta01.c: added logic to detect pending PMU interrupts
+board/neo1973/gta01/gta01.c (neo1973_new_second, neo1973_on_key_pressed): only
+ poll PMU if there is a pending interrupt
+board/neo1973/gta01/pcf50606.c (pcf50606_initial_regs): cleared (unmasked)
+ SECONDM in INT1M
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/board/neo1973/gta01/gta01.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/gta01.c
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -375,19 +375,60 @@
+ #endif
+ }
+
++static int pwr_int_pending(void)
++{
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++#if defined(CONFIG_ARCH_GTA01B_v4)
++ return !(gpio->GPGDAT & (1 << 1)); /* EINT9/GPG1 */
++#else
++ return !(gpio->GPGDAT & (1 << 8)); /* EINT16/GPG8 */
++#endif /* !CONFIG_ARCH_GTA01B_v4 */
++}
++
++static int have_int1(uint8_t mask)
++{
++ static uint8_t pending = 0;
++
++ if (pwr_int_pending()) {
++ /*
++ * We retrieve all interupts, so that we clear any stray ones
++ * in INT2 and INT3.
++ */
++ uint8_t int1,int2,int3;
++
++ int1 = pcf50606_reg_read(PCF50606_REG_INT1);
++ int2 = pcf50606_reg_read(PCF50606_REG_INT2);
++ int3 = pcf50606_reg_read(PCF50606_REG_INT3);
++ pending |= int1;
++ }
++ if (!(pending & mask))
++ return 0;
++ pending &= ~mask;
++ return 1;
++}
++
+ int neo1973_new_second(void)
+ {
+- return pcf50606_reg_read(PCF50606_REG_INT1) & PCF50606_INT1_SECOND;
++ return have_int1(PCF50606_INT1_SECOND);
+ }
+
+ int neo1973_on_key_pressed(void)
+ {
+- return !(pcf50606_reg_read(PCF50606_REG_OOCS) & PFC50606_OOCS_ONKEY);
++ static int pressed = -1;
++
++ if (pressed == -1 ||
++ have_int1(PCF50606_INT1_ONKEYF | PCF50606_INT1_ONKEYR)) {
++ pressed = !(pcf50606_reg_read(PCF50606_REG_OOCS) &
++ PFC50606_OOCS_ONKEY);
++}
++ return pressed;
+ }
+
+ int neo1973_aux_key_pressed(void)
+ {
+ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
+ if (gpio->GPFDAT & (1 << 6))
+ return 0;
+ return 1;
+Index: u-boot/board/neo1973/gta01/pcf50606.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/pcf50606.c
++++ u-boot/board/neo1973/gta01/pcf50606.c
+@@ -6,7 +6,7 @@
+ const u_int8_t pcf50606_initial_regs[__NUM_PCF50606_REGS] = {
+ [PCF50606_REG_OOCS] = 0x00,
+ /* gap */
+- [PCF50606_REG_INT1M] = PCF50606_INT1_SECOND,
++ [PCF50606_REG_INT1M] = 0x00,
+ [PCF50606_REG_INT2M] = 0x00,
+ [PCF50606_REG_INT3M] = PCF50606_INT3_TSCPRES,
+ [PCF50606_REG_OOCC1] = PCF50606_OOCC1_RTCWAK |
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch b/packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch
new file mode 100644
index 0000000000..339289699a
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch
@@ -0,0 +1,63 @@
+This patch fixes bugs in usbdcore*.c related to the use of devices
+with multiple configurations.
+
+The original code made mistakes about the meaning of configuration value and
+configuration index, and the resulting off-by-one errors resulted in:
+
+* SET_CONFIGURATION always selected the first configuration, no matter what
+ wValue is being passed.
+* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first
+ configuration (index 0).
+
+Signed-off-by: Harald Welte <laforge@openmoko.org>
+
+Index: u-boot/drivers/usbdcore_ep0.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore_ep0.c 2007-03-14 20:29:05.000000000 +0100
++++ u-boot/drivers/usbdcore_ep0.c 2007-03-14 20:29:06.000000000 +0100
+@@ -233,8 +233,8 @@
+ return -1;
+ }
+ /*dbg_ep0(2, "%d %d", index, device_descriptor->bNumConfigurations); */
+- if (index > device_descriptor->bNumConfigurations) {
+- dbg_ep0 (0, "index too large: %d > %d", index,
++ if (index >= device_descriptor->bNumConfigurations) {
++ dbg_ep0 (0, "index too large: %d >= %d", index,
+ device_descriptor->
+ bNumConfigurations);
+ return -1;
+@@ -593,13 +593,8 @@
+
+ case USB_REQ_SET_CONFIGURATION:
+ /* c.f. 9.4.7 - the top half of wValue is reserved */
+- /* */
+- if ((device->configuration =
+- le16_to_cpu (request->wValue) & 0x7f) != 0) {
+- /* c.f. 9.4.7 - zero is the default or addressed state, in our case this */
+- /* is the same is configuration zero */
+- device->configuration = 0; /* TBR - ?????? */
+- }
++ device->configuration = le16_to_cpu(request->wValue) & 0xff;
++
+ /* reset interface and alternate settings */
+ device->interface = device->alternate = 0;
+
+Index: u-boot/drivers/usbdcore.c
+===================================================================
+--- u-boot.orig/drivers/usbdcore.c 2007-03-14 20:29:05.000000000 +0100
++++ u-boot/drivers/usbdcore.c 2007-03-14 20:37:37.000000000 +0100
+@@ -147,12 +147,9 @@
+ static struct usb_configuration_instance *usbd_device_configuration_instance (struct usb_device_instance *device,
+ unsigned int port, unsigned int configuration)
+ {
+- /* XXX */
+- configuration = configuration ? configuration - 1 : 0;
+-
+- if (configuration >= device->configurations) {
++ if (configuration >= device->configurations)
+ return NULL;
+- }
++
+ return device->configuration_instance_array + configuration;
+ }
+
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch b/packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch
new file mode 100644
index 0000000000..132a9f8da5
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch
@@ -0,0 +1,68 @@
+This patch should get rid of spurious poweroff after booting from RAM.
+Experimental.
+
+cpu/arm920t/start.S: record in global variable "booted_from_nand" whether we
+ booted from NAND or not
+board/neo1973/neo1973.c (board_late_init): if booted from RAM, assume that
+ wakeup cause was "reset", and skip poweroff check
+
+- Werner Almesberger <werner@openmoko.org>
+
+Index: u-boot/board/neo1973/gta01/gta01.c
+===================================================================
+--- u-boot.orig/board/neo1973/gta01/gta01.c
++++ u-boot/board/neo1973/gta01/gta01.c
+@@ -226,12 +226,16 @@
+
+ int board_late_init(void)
+ {
++ extern unsigned char booted_from_nand;
+ unsigned char tmp;
+ char buf[32];
+
+ /* Initialize the Power Management Unit with a safe register set */
+ pcf50606_init();
+
++ if (!booted_from_nand)
++ goto woken_by_reset;
++
+ /* obtain wake-up reason, save INT1 in environment */
+ tmp = pcf50606_reg_read(PCF50606_REG_INT1);
+ sprintf(buf, "0x%02x", tmp);
+@@ -274,6 +278,7 @@
+ neo1973_poweroff();
+ }
+
++woken_by_reset:
+ /* if there's no other reason, must be regular reset */
+ neo1973_wakeup_cause = NEO1973_WAKEUP_RESET;
+
+Index: u-boot/cpu/arm920t/start.S
+===================================================================
+--- u-boot.orig/cpu/arm920t/start.S
++++ u-boot/cpu/arm920t/start.S
+@@ -77,6 +77,14 @@
+ *************************************************************************
+ */
+
++#ifdef CONFIG_S3C2410_NAND_BOOT
++.globl booted_from_nand
++booted_from_nand:
++ .word 0
++_booted_from_nand:
++ .word booted_from_nand
++#endif /* CONFIG_S3C2410_NAND_BOOT */
++
+ _TEXT_BASE:
+ .word TEXT_BASE
+
+@@ -281,6 +289,9 @@
+ #endif
+ 1: b 1b
+ done_nand_read:
++ ldr r0, _booted_from_nand
++ mov r1, #1
++ strb r1, [r0]
+ #endif /* CONFIG_S3C2410_NAND_BOOT */
+ done_relocate:
+ #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb b/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb
new file mode 100644
index 0000000000..8d69a54c4c
--- /dev/null
+++ b/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb
@@ -0,0 +1,82 @@
+require uboot-openmoko_svn.bb
+
+PV = "1.2.0+git9912121f7ed804ea58fd62f3f230b5dcfc357d88svn2238"
+
+SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git;tag=9912121f7ed804ea58fd62f3f230b5dcfc357d88 \
+file://uboot-machtypes.patch;patch=1 \
+file://ext2load_hex.patch;patch=1 \
+file://uboot-s3c2410-warnings-fix.patch;patch=1 \
+file://uboot-strtoul.patch;patch=1 \
+file://uboot-cramfs_but_no_jffs2.patch;patch=1 \
+file://nand-read_write_oob.patch;patch=1 \
+file://uboot-arm920t-gd_in_irq.patch;patch=1 \
+file://uboot-arm920_s3c2410_irq_demux.patch;patch=1 \
+file://uboot-s3c2410-nand.patch;patch=1 \
+file://uboot-cmd_s3c2410.patch;patch=1 \
+file://uboot-s3c2410-mmc.patch;patch=1 \
+file://env_nand_oob.patch;patch=1 \
+file://dynenv-harden.patch;patch=1 \
+file://uboot-s3c2410_fb.patch;patch=1 \
+file://uboot-20061030-qt2410.patch;patch=1 \
+file://uboot-20061030-neo1973.patch;patch=1 \
+file://uboot-s3c2410-misccr-definitions.patch;patch=1 \
+file://boot-from-ram-reloc.patch;patch=1 \
+file://boot-from-ram-and-nand.patch;patch=1 \
+file://wakeup-reason-nand-only.patch;patch=1 \
+file://uboot-neo1973-resume.patch;patch=1 \
+file://nand-dynamic_partitions.patch;patch=1 \
+file://uboot-s3c2410-norelocate_irqvec_cpy.patch;patch=1 \
+file://uboot-usbtty-acm.patch;patch=1 \
+file://uboot-s3c2410_udc.patch;patch=1 \
+file://bbt-create-optional.patch;patch=1 \
+file://nand-createbbt.patch;patch=1 \
+file://dontask.patch;patch=1 \
+file://nand-badisbad.patch;patch=1 \
+file://uboot-bbt-quiet.patch;patch=1 \
+file://raise-limits.patch;patch=1 \
+file://splashimage-command.patch;patch=1 \
+file://cmd-unzip.patch;patch=1 \
+file://enable-splash-bmp.patch;patch=1 \
+file://preboot-override.patch;patch=1 \
+file://lowlevel_foo.patch;patch=1 \
+file://default-env.patch;patch=1 \
+file://console-ansi.patch;patch=1 \
+file://boot-menu.patch;patch=1 \
+file://uboot-dfu.patch;patch=1 \
+file://uboot-neo1973-defaultenv.patch;patch=1 \
+file://uboot-nand-markbad-reallybad.patch;patch=1 \
+file://usbdcore-multiple_configs.patch;patch=1 \
+file://neo1973-chargefast.patch;patch=1 \
+file://uboot-s3c2440.patch;patch=1 \
+file://uboot-smdk2440.patch;patch=1 \
+file://uboot-hxd8.patch;patch=1 \
+file://uboot-license.patch;patch=1 \
+file://uboot-gta02.patch;patch=1 \
+file://uboot-s3c2443.patch;patch=1 \
+file://uboot-smdk2443.patch;patch=1 \
+file://unbusy-i2c.patch;patch=1 \
+"
+
+PROVIDES = ""
+TARGET_LDFLAGS = ""
+
+do_quilt() {
+:
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta01/split_by_variant.sh
+ oe_runmake gta01bv3_config
+ oe_runmake clean
+ oe_runmake tools
+}
+
+do_deploy () {
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+ ln -sf ${STAGING_BINDIR_NATIVE}/uboot-mkimage ${STAGING_BINDIR_NATIVE}/mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+
+
diff --git a/packages/uboot/u-boot.inc b/packages/uboot/u-boot.inc
index 3b26e55f1b..9f7356d5d7 100644
--- a/packages/uboot/u-boot.inc
+++ b/packages/uboot/u-boot.inc
@@ -5,6 +5,8 @@ PRIORITY = "optional"
LICENSE = "GPL"
PROVIDES = "virtual/bootloader"
+PARALLEL_MAKE=""
+
EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
UBOOT_MACHINE ?= "${MACHINE}_config"
@@ -26,5 +28,6 @@ do_deploy[dirs] = "${S}"
addtask deploy before do_build after do_compile
do_stage() {
- install -m755 tools/mkimage ${STAGING_BINDIR_NATIVE}
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 755 tools/mkimage ${STAGING_BINDIR_NATIVE}/
}
diff --git a/packages/uboot/u-boot_1.1.2.bb b/packages/uboot/u-boot_1.1.2.bb
index cefaa9b1a1..da8da74ad5 100644
--- a/packages/uboot/u-boot_1.1.2.bb
+++ b/packages/uboot/u-boot_1.1.2.bb
@@ -1,3 +1,4 @@
+PR = "r1"
require u-boot.inc
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \
@@ -7,12 +8,16 @@ SRC_URI_append_mnci = "file://mnci.patch;patch=1 \
file://mnci-jffs2.patch;patch=1 \
file://cmd-arm-linux.patch;patch=1 \
file://command-names.patch;patch=1"
+
+SRC_URI_append_magicbox = "file://u-boot-emetec.patch;patch=1 "
+
# TODO: SRC_URI_append_rt3000
TARGET_LDFLAGS = ""
UBOOT_MACHINE_mnci = "mnci_config"
UBOOT_MACHINE_vibren = "pxa255_idp_config"
+UBOOT_MACHINE_magicbox = "EMETEC405_config"
inherit base
diff --git a/packages/uboot/u-boot_1.1.4.bb b/packages/uboot/u-boot_1.1.4.bb
index 5c158f2401..45d24df455 100644
--- a/packages/uboot/u-boot_1.1.4.bb
+++ b/packages/uboot/u-boot_1.1.4.bb
@@ -25,11 +25,15 @@ SRC_URI_append_amsdelta = "\
SRC_URI_append_dht-walnut= "\
file://u-boot-dht-walnut-df2.patch;patch=1"
+SRC_URI_append_avr32= "\
+ http://avr32linux.org/twiki/pub/Main/UbootPatches/u-boot-1.1.4-avr1.patch.bz2;patch=1"
+
EXTRA_OEMAKE_gumstix = "CROSS_COMPILE=${TARGET_PREFIX} GUMSTIX_400MHZ=${GUMSTIX_400MHZ}"
TARGET_LDFLAGS = ""
UBOOT_MACHINE_dht-walnut = "walnut_config"
+UBOOT_MACHINE_atngw100 = "atngw_config"
def gumstix_mhz(d):
import bb
diff --git a/packages/uboot/u-boot_1.1.6.bb b/packages/uboot/u-boot_1.1.6.bb
index 7bd09c6f35..bec1a619e4 100644
--- a/packages/uboot/u-boot_1.1.6.bb
+++ b/packages/uboot/u-boot_1.1.6.bb
@@ -1,8 +1,12 @@
require u-boot.inc
-PR = "r1"
+PR = "r2"
SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-1.1.6.tar.bz2 \
file://devkit-idp.patch;patch=1"
+SRC_URI_append_sarge-at91 = " file://sarge-uboot.patch;patch=1"
+
PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+UBOOT_MACHINE_sarge-at91 = "sarge_config"
diff --git a/packages/uboot/u-boot_1.2.0.bb b/packages/uboot/u-boot_1.2.0.bb
new file mode 100644
index 0000000000..f1075bb00b
--- /dev/null
+++ b/packages/uboot/u-boot_1.2.0.bb
@@ -0,0 +1,25 @@
+require u-boot.inc
+
+PR = "r2"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-1.2.0.tar.bz2 \
+ "
+SRC_URI_append_turbostation = "file://qnap.diff;patch=1"
+
+SRC_URI_append_lsppchg = "file://u-boot-kurobox.patch;patch=1 \
+ file://u-boot-kurobox-fdt.patch;patch=1 \
+ file://defconfig_lsppchg"
+
+SRC_URI_append_lsppchd = "file://u-boot-kurobox.patch;patch=1 \
+ file://u-boot-kurobox-fdt.patch;patch=1 \
+ file://defconfig_lsppchg"
+
+do_compile_prepend_lsppchg () {
+ cp ${WORKDIR}/defconfig_lsppchg ${S}/include/configs/linkstation.h
+}
+
+do_compile_prepend_lsppchd () {
+ cp ${WORKDIR}/defconfig_lsppchd ${S}/include/configs/linkstation.h
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/uboot/u-boot_LABEL.2006.06.30.2020.bb b/packages/uboot/u-boot_LABEL.2006.06.30.2020.bb
deleted file mode 100644
index c29aba7cd5..0000000000
--- a/packages/uboot/u-boot_LABEL.2006.06.30.2020.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require u-boot.inc
-
-PR = "r2"
-
-TAG = "${@bb.data.getVar('PV',d,1).replace('.', '_')}"
-
-SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git;tag=${TAG} \
- file://nohelloworld.patch;patch=1"
-# file://config.patch;patch=1"
-
-SRC_URI_append_navman-icn330 = " http://www.duff.dk/navman/navman-u-boot-2006-30-2020.patch;patch=1"
-
-S = "${WORKDIR}/git"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-#inherit base
diff --git a/packages/uboot/u-boot_git.bb b/packages/uboot/u-boot_git.bb
index 9362b62041..07f3ed9977 100644
--- a/packages/uboot/u-boot_git.bb
+++ b/packages/uboot/u-boot_git.bb
@@ -1,8 +1,10 @@
require u-boot.inc
-
+PR="r1"
DEFAULT_PREFERENCE = "-1"
SRC_URI = "git://www.denx.de/git/u-boot.git;protocol=git "
+SRC_URI_sequoia = "git://www.denx.de/git/u-boot.git;protocol=git;tag=cf3b41e0c1111dbb865b6e34e9f3c3d3145a6093"
+
S = "${WORKDIR}/git"
diff --git a/packages/uboot/uboot-gta01_svn.bb b/packages/uboot/uboot-gta01_svn.bb
deleted file mode 100644
index b78b81dd17..0000000000
--- a/packages/uboot/uboot-gta01_svn.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) support"
-AUTHOR = "Harald Welte <laforge@openmoko.org>
-LICENSE = "GPL"
-SECTION = "bootloader"
-PRIORITY = "optional"
-PV = "1.2.0+svn${SRCDATE}"
-PR = "r3"
-
-PROVIDES = "virtual/bootloader"
-S = "${WORKDIR}/git"
-
-SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git \
- svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=https \
- file://fix-arm920t-eabi.patch;patch=1"
-
-EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
-TARGET_LDFLAGS = ""
-UBOOT_MACHINES = "gta01v3 gta01v4 gta01bv2 gta01bv3"
-
-do_quilt() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_compile () {
- chmod +x board/neo1973/split_by_variant.sh
- for type in ram nand
- do
- for mach in ${UBOOT_MACHINES}
- do
- oe_runmake ${mach}_config
- oe_runmake clean
- if [ ${type} == "ram" ]; then
- echo 'PLATFORM_RELFLAGS += -DBUILD_FOR_RAM' >> board/neo1973/config.tmp
- fi
- oe_runmake all
- mv u-boot.bin u-boot_${mach}_${type}.bin
- done
- done
-}
-
-do_deploy () {
- install -d ${DEPLOY_DIR_IMAGE}
- for type in nand ram
- do
- for mach in ${UBOOT_MACHINES}
- do
- install ${S}/u-boot_${mach}_${type}.bin ${DEPLOY_DIR_IMAGE}/u-boot_${type}-${mach}-${DATETIME}.bin
- done
- done
- install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
-}
-
-do_deploy[dirs] = "${S}"
-addtask deploy before do_build after do_compile
-addtask quilt before do_patch after do_unpack
diff --git a/packages/uboot/uboot-openmoko_svn.bb b/packages/uboot/uboot-openmoko_svn.bb
new file mode 100644
index 0000000000..d7a07a7d00
--- /dev/null
+++ b/packages/uboot/uboot-openmoko_svn.bb
@@ -0,0 +1,88 @@
+DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) support"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+LICENSE = "GPL"
+SECTION = "bootloader"
+PRIORITY = "optional"
+
+UBOOT_UPSTREAM_REV = "8993e54b6f397973794f3d6f47d3b3c0c98dd4f6"
+PV = "1.2.0+git${UBOOT_UPSTREAM_REV}+svn${SRCDATE}"
+
+PROVIDES = "virtual/bootloader"
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git;tag=${UBOOT_UPSTREAM_REV} \
+ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=http \
+ file://uboot-eabi-fix-HACK.patch \
+ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
+"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 smdk2440 hxd8 qt2410 gta02v1"
+
+do_quilt() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_svnrev() {
+ FILE=${S}/tools/setlocalversion
+ OLDFILE=$FILE.old
+ NEWFILE=$FILE.new
+ cp $FILE $OLDFILE
+ LINES=`cat $OLDFILE | wc -l`
+ LINES_WE_WANT=$(($LINES-1))
+ LASTLINE=`cat $OLDFILE | tail -n 1`
+ cat $OLDFILE | head -n $LINES_WE_WANT > $NEWFILE
+ echo ${LASTLINE}_${PR} >> $NEWFILE
+ rm $FILE && mv $NEWFILE $FILE
+}
+
+do_configure_prepend() {
+ find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta*/split_by_variant.sh
+ for mach in ${UBOOT_MACHINES}
+ do
+ oe_runmake ${mach}_config
+ oe_runmake clean
+ find board -name lowlevel_foo.bin -exec rm '{}' \;
+ oe_runmake all
+ oe_runmake u-boot.udfu
+ if [ -f u-boot.udfu ]; then
+ mv u-boot.udfu u-boot_${mach}.bin
+ else
+ mv u-boot.bin u-boot_${mach}.bin
+ fi
+ if [ -f board/${mach}/lowlevel_foo.bin ]; then
+ mv board/${mach}/lowlevel_foo.bin \
+ lowlevel_foo_${mach}.bin
+ else
+ find board -name lowlevel_foo.bin \
+ -exec mv '{}' lowlevel_foo_${mach}.bin \;
+ fi
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for mach in ${UBOOT_MACHINES}
+ do
+ install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
+ if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
+ install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
+ fi
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+addtask quilt before do_patch after do_unpack
+addtask svnrev before do_patch after do_quilt
diff --git a/packages/uboot/uboot-qt2410_0.0+cvs20061030.bb b/packages/uboot/uboot-qt2410_0.0+cvs20061030.bb
deleted file mode 100644
index 102030f147..0000000000
--- a/packages/uboot/uboot-qt2410_0.0+cvs20061030.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-DESCRIPTION = "U-boot bootloader w/ armzone qt2410 support"
-SECTION = "bootloader"
-PRIORITY = "optional"
-LICENSE = "GPL"
-SRCDATE := "${PV}"
-PR = "r0"
-
-PROVIDES = "virtual/bootloader"
-S = "${WORKDIR}/git"
-
-SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git \
- file://u-boot-20061030-qt2410-gta01.patch;patch=1 \
- file://qt2410_*.h"
-
-EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
-TARGET_LDFLAGS = ""
-UBOOT_MACHINE = "qt2410_config"
-
-inherit base
-
-do_compile () {
- for type in nand ram
- do
- install -m 0644 ${WORKDIR}/qt2410_${type}.h include/configs/qt2410.h
- oe_runmake ${UBOOT_MACHINE}
- oe_runmake all
- mv u-boot.bin u-boot_$type.bin
- done
-}
-
-do_deploy () {
- install -d ${DEPLOY_DIR_IMAGE}
- for type in nand ram
- do
- install ${S}/u-boot_$type.bin ${DEPLOY_DIR_IMAGE}/u-boot_$type-${MACHINE}-${DATETIME}.bin
- done
- install -m 0755 tools/mkimage ${STAGING_BINDIR}/uboot-mkimage
-}
-
-do_deploy[dirs] = "${S}"
-addtask deploy before do_build after do_compile
diff --git a/packages/uboot/uboot-utils_1.2.0.bb b/packages/uboot/uboot-utils_1.2.0.bb
new file mode 100644
index 0000000000..8a5d7dce3c
--- /dev/null
+++ b/packages/uboot/uboot-utils_1.2.0.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "U-boot bootloader OS env. access tools for PPC"
+SECTION = "bootloaders"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "mtd-utils"
+PR = "r5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/u-boot/u-boot-${PV}.tar.bz2 \
+ file://fw_env.c.patch;patch=1 \
+ file://tools-Makefile.patch;patch=1 \
+ file://env-Makefile.patch;patch=1 \
+ file://fw_env.config"
+
+S = "${WORKDIR}/u-boot-${PV}"
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+
+UBOOT_MACHINE ?= "${MACHINE}_config"
+
+inherit base
+
+do_configure() {
+ :
+}
+
+do_compile () {
+ oe_runmake Sandpoint8240_config
+ oe_runmake tools
+}
+
+# install mkimage for the kernel makefile
+do_stage() {
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 755 ${S}/tools/mkimage ${STAGING_BINDIR_NATIVE}/
+}
+
+do_install () {
+ install -d ${D}/sbin
+ install -d ${D}${sysconfdir}
+ install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
+ install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_printenv
+ install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_setenv
+}
diff --git a/packages/uclibc/files/errno_values.h.patch b/packages/uclibc/files/errno_values.h.patch
new file mode 100644
index 0000000000..a1e39c181b
--- /dev/null
+++ b/packages/uclibc/files/errno_values.h.patch
@@ -0,0 +1,21 @@
+Index: uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h
+===================================================================
+--- uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h 2002-08-23 20:48:19.000000000 +0200
++++ uClibc-0.9.29/libc/sysdeps/linux/common/bits/errno_values.h 2007-07-01 22:11:53.000000000 +0200
+@@ -134,4 +134,16 @@
+ #define ENOMEDIUM 123 /* No medium found */
+ #define EMEDIUMTYPE 124 /* Wrong medium type */
+
++/* the following errornumbers are only in 2.6 */
++
++#define ECANCELED 125 /* Operation Canceled */
++#define ENOKEY 126 /* Required key not available */
++#define EKEYEXPIRED 127 /* Key has expired */
++#define EKEYREVOKED 128 /* Key has been revoked */
++#define EKEYREJECTED 129 /* Key was rejected by service */
++
++/* for robust mutexes */
++#define EOWNERDEAD 130 /* Owner died */
++#define ENOTRECOVERABLE 131 /* State not recoverable */
++
+ #endif /* _BITS_ERRNO_VALUES_H */
diff --git a/packages/uclibc/files/termios.h.patch b/packages/uclibc/files/termios.h.patch
new file mode 100644
index 0000000000..f7200ba393
--- /dev/null
+++ b/packages/uclibc/files/termios.h.patch
@@ -0,0 +1,22 @@
+Index: uClibc-0.9.29/libc/sysdeps/linux/common/bits/termios.h
+===================================================================
+--- uClibc-0.9.29.orig/libc/sysdeps/linux/common/bits/termios.h 2006-02-13 09:41:37.000000000 +0100
++++ uClibc-0.9.29/libc/sysdeps/linux/common/bits/termios.h 2007-07-03 00:41:27.000000000 +0200
+@@ -156,7 +156,6 @@
+ #endif
+ #define B57600 0010001
+ #define B115200 0010002
+-#if 0 /* limited on uClibc, keep in sync w/ cfsetspeed.c */
+ #define B230400 0010003
+ #define B460800 0010004
+ #define B500000 0010005
+@@ -171,9 +170,6 @@
+ #define B3500000 0010016
+ #define B4000000 0010017
+ #define __MAX_BAUD B4000000
+-#else
+-#define __MAX_BAUD B115200
+-#endif
+ #ifdef __USE_MISC
+ # define CIBAUD 002003600000 /* input baud rate (not used) */
+ # define CMSPAR 010000000000 /* mark or space (stick) parity */
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/.mtn2git_empty b/packages/uclibc/uclibc-0.9.28/avr32/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config
new file mode 100644
index 0000000000..c59defd311
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config
@@ -0,0 +1,177 @@
+#
+# Automatically generated make config: don't edit
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+TARGET_avr32=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+HAVE_ELF=y
+TARGET_ARCH="avr32"
+ARCH_SUPPORTS_BIG_ENDIAN=y
+UCLIBC_COMPLETELY_PIC=y
+CONFIG_AP7000=y
+LINKRELAX=y
+# CONFIG_GENERIC_386 is not set
+# CONFIG_386 is not set
+# CONFIG_486 is not set
+# CONFIG_586 is not set
+# CONFIG_586MMX is not set
+# CONFIG_686 is not set
+# CONFIG_PENTIUMII is not set
+# CONFIG_PENTIUMIII is not set
+# CONFIG_PENTIUM4 is not set
+# CONFIG_K6 is not set
+# CONFIG_K7 is not set
+# CONFIG_ELAN is not set
+# CONFIG_CRUSOE is not set
+# CONFIG_WINCHIPC6 is not set
+# CONFIG_WINCHIP2 is not set
+# CONFIG_CYRIXIII is not set
+# CONFIG_NEHEMIAH is not set
+# ARCH_LITTLE_ENDIAN is not set
+ARCH_BIG_ENDIAN=y
+# ARCH_HAS_NO_MMU is not set
+ARCH_HAS_MMU=y
+UCLIBC_HAS_FLOATS=y
+# HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_SOURCE="/usr/src/linux"
+C_SYMBOL_PREFIX=""
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+HAVE_SHARED=y
+# ARCH_HAS_NO_LDSO is not set
+BUILD_UCLIBC_LDSO=y
+FORCE_SHAREABLE_TEXT_SEGMENTS=y
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+LDSO_RUNPATH=y
+# DL_FINI_CRT_COMPAT is not set
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+# PTHREADS_DEBUG_SUPPORT is not set
+UCLIBC_HAS_LFS=y
+UCLIBC_STATIC_LDCONFIG=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+# MALLOC_GLIBC_COMPAT is not set
+UCLIBC_DYNAMIC_ATEXIT=y
+HAS_SHADOW=y
+UNIX98PTY_ONLY=y
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+UCLIBC_HAS_CTYPE_UNSAFE=y
+# UCLIBC_HAS_CTYPE_CHECKED is not set
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+# UCLIBC_HAS_WCHAR is not set
+# UCLIBC_HAS_LOCALE is not set
+# UCLIBC_HAS_HEXADECIMAL_FLOATS is not set
+# UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set
+# USE_OLD_VFPRINTF is not set
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+UCLIBC_HAS_STDIO_BUFSIZ_4096=y
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+# UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE is not set
+# UCLIBC_HAS_GLIBC_CUSTOM_STREAMS is not set
+# UCLIBC_HAS_PRINTF_M_SPEC is not set
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+# UCLIBC_HAS_WORDEXP is not set
+# UCLIBC_HAS_FTW is not set
+UCLIBC_HAS_GLOB=y
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="$(DEVEL_PREFIX)/lib"
+RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"
+DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"
+
+#
+# uClibc security related options
+#
+# UCLIBC_SECURITY is not set
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+WARNINGS="-Wall"
+# UCLIBC_MJN3_ONLY is not set
diff --git a/packages/uclibc/uclibc-0.9.28/powerpc/uClibc.config b/packages/uclibc/uclibc-0.9.28/powerpc/uClibc.config
index 8a12c10961..76f77c5744 100644
--- a/packages/uclibc/uclibc-0.9.28/powerpc/uClibc.config
+++ b/packages/uclibc/uclibc-0.9.28/powerpc/uClibc.config
@@ -40,6 +40,7 @@ ARCH_HAS_MMU=y
ARCH_USE_MMU=y
UCLIBC_HAS_FLOATS=y
UCLIBC_HAS_FPU=y
+HAS_FPU=y
DO_C99_MATH=y
KERNEL_SOURCE="/proj/oplinux-0.2/op-linux/branches/oplinux-0.2/efika/build/tmp/cross/powerpc-linux-uclibc"
HAVE_DOT_CONFIG=y
@@ -54,6 +55,7 @@ DOPIC=y
HAVE_SHARED=y
# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
LDSO_LDD_SUPPORT=y
+BUILD_UCLIBC_LDSO=y
LDSO_CACHE_SUPPORT=y
# LDSO_PRELOAD_FILE_SUPPORT is not set
LDSO_BASE_FILENAME="ld.so"
@@ -73,6 +75,8 @@ UCLIBC_DYNAMIC_ATEXIT=y
COMPAT_ATEXIT=y
# UCLIBC_SUSV3_LEGACY is not set
UCLIBC_HAS_SHADOW=y
+HAS_SHADOW=y
+DL_FINI_CRT_COMPAT=n
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
UCLIBC_HAS___PROGNAME=y
UNIX98PTY_ONLY=y
@@ -155,6 +159,7 @@ DEVEL_PREFIX="//usr"
#
# Security options
#
+UCLIBC_SECURITY=n
# UCLIBC_BUILD_PIE is not set
# UCLIBC_HAS_ARC4RANDOM is not set
# HAVE_NO_SSP is not set
diff --git a/packages/uclibc/uclibc-0.9.29/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/a780/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/a780/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/a780/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/a780/uClibc.machine b/packages/uclibc/uclibc-0.9.29/a780/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/a780/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/akita/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/akita/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/akita/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/akita/uClibc.machine b/packages/uclibc/uclibc-0.9.29/akita/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/akita/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/arm/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/arm/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/arm/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/arm/uClibc.machine b/packages/uclibc/uclibc-0.9.29/arm/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/arm/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/armeb/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/armeb/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/armeb/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/armeb/uClibc.machine b/packages/uclibc/uclibc-0.9.29/armeb/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/armeb/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 22:07:03 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_BIG_ENDIAN=y
+ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN is not set
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/bfin/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/bfin/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/bfin/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine b/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine
new file mode 100644
index 0000000000..5243119d2e
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/bfin/uClibc.machine
@@ -0,0 +1,58 @@
+#
+# Automatically generated make config: don't edit
+# Mon Jun 11 14:03:30 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+TARGET_bfin=y
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="bfin"
+FORCE_OPTIONS_FOR_ARCH=y
+TARGET_SUBARCH=""
+# UCLIBC_FORMAT_ELF is not set
+# UCLIBC_FORMAT_FDPIC_ELF is not set
+# UCLIBC_FORMAT_FLAT is not set
+# UCLIBC_FORMAT_FLAT_SEP_DATA is not set
+UCLIBC_FORMAT_SHARED_FLAT=y
+UCLIBC_SHARED_FLAT_ID=1
+ARCH_LITTLE_ENDIAN=y
+
+#
+# Using Little Endian
+#
+ARCH_HAS_NO_MMU=y
+
+#
+# Target CPU lacks a memory management unit (MMU)
+#
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+UCLIBC_UCLINUX_BROKEN_MUNMAP=y
+EXCLUDE_BRK=y
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/c7x0/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/c7x0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/c7x0/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/c7x0/uClibc.machine b/packages/uclibc/uclibc-0.9.29/c7x0/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/c7x0/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/collie/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/collie/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/collie/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/collie/uClibc.machine b/packages/uclibc/uclibc-0.9.29/collie/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/collie/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/compulab-pxa270/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/efika/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/efika/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/efika/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/efika/uClibc.machine b/packages/uclibc/uclibc-0.9.29/efika/uClibc.machine
new file mode 100644
index 0000000000..e059257c09
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/efika/uClibc.machine
@@ -0,0 +1,53 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:25:50 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_CLASSIC=y
+# CONFIG_E500 is not set
+TARGET_SUBARCH="classic"
+
+#
+# Using ELF file format
+#
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/powerpc-angstrom-linux-uclibc/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/ep93xx/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/ep93xx/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/ep93xx/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/ep93xx/uClibc.machine b/packages/uclibc/uclibc-0.9.29/ep93xx/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/ep93xx/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine b/packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine
new file mode 100644
index 0000000000..898b73a33b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine
@@ -0,0 +1,69 @@
+#
+# Automatically generated make config: don't edit
+# Mon May 14 10:23:14 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+CONFIG_ARM920T=y
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h2200/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h2200/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h2200/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h2200/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h2200/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h2200/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h3600/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h3600/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3600/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h3600/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h3600/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3600/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h3800/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h3800/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3800/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h3800/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h3800/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3800/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h3900/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h3900/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3900/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h3900/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h3900/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h3900/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h4000/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h4000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h4000/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h4000/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h4000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h4000/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/h5000/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/h5000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h5000/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/h5000/uClibc.machine b/packages/uclibc/uclibc-0.9.29/h5000/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/h5000/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/hx4700/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/hx4700/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/hx4700/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/hx4700/uClibc.machine b/packages/uclibc/uclibc-0.9.29/hx4700/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/hx4700/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/ixp4xxbe/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/ixp4xxbe/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/ixp4xxbe/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/ixp4xxbe/uClibc.machine b/packages/uclibc/uclibc-0.9.29/ixp4xxbe/uClibc.machine
new file mode 100644
index 0000000000..2d9f63e531
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/ixp4xxbe/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 22:07:03 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_BIG_ENDIAN=y
+ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN is not set
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/palmld/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/palmld/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmld/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/palmld/uClibc.machine b/packages/uclibc/uclibc-0.9.29/palmld/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmld/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/palmz31/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/palmz31/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmz31/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/palmz31/uClibc.machine b/packages/uclibc/uclibc-0.9.29/palmz31/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmz31/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/palmz72/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/palmz72/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmz72/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/palmz72/uClibc.machine b/packages/uclibc/uclibc-0.9.29/palmz72/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/palmz72/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/poodle/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/poodle/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/poodle/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/poodle/uClibc.machine b/packages/uclibc/uclibc-0.9.29/poodle/uClibc.machine
new file mode 100644
index 0000000000..ec0385bc0f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/poodle/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:16:02 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+CONFIG_ARM_XSCALE=y
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/data/build/koen/OE/build/tmp/angstrom/cross/arm-angstrom-linux-uclibcgnueabi/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/simpad/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/simpad/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/simpad/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/simpad/uClibc.machine b/packages/uclibc/uclibc-0.9.29/simpad/uClibc.machine
new file mode 100644
index 0000000000..6e89444a64
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/simpad/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sun May 13 11:29:51 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+CONFIG_ARM_OABI=y
+# CONFIG_ARM_EABI is not set
+# USE_BX is not set
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+CONFIG_ARM_SA1100=y
+# CONFIG_ARM_XSCALE is not set
+# CONFIG_ARM_IWMMXT is not set
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/spitz/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/spitz/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/spitz/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/spitz/uClibc.machine b/packages/uclibc/uclibc-0.9.29/spitz/uClibc.machine
new file mode 100644
index 0000000000..e27931cf6b
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/spitz/uClibc.machine
@@ -0,0 +1,70 @@
+#
+# Automatically generated make config: don't edit
+# Sat May 12 23:18:41 2007
+#
+# TARGET_alpha is not set
+TARGET_arm=y
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="arm"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_ARM_OABI is not set
+CONFIG_ARM_EABI=y
+USE_BX=y
+# CONFIG_GENERIC_ARM is not set
+# CONFIG_ARM610 is not set
+# CONFIG_ARM710 is not set
+# CONFIG_ARM7TDMI is not set
+# CONFIG_ARM720T is not set
+# CONFIG_ARM920T is not set
+# CONFIG_ARM922T is not set
+# CONFIG_ARM926T is not set
+# CONFIG_ARM10T is not set
+# CONFIG_ARM1136JF_S is not set
+# CONFIG_ARM1176JZ_S is not set
+# CONFIG_ARM1176JZF_S is not set
+# CONFIG_ARM_SA110 is not set
+# CONFIG_ARM_SA1100 is not set
+# CONFIG_ARM_XSCALE is not set
+CONFIG_ARM_IWMMXT=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
+
diff --git a/packages/uclibc/uclibc-0.9.29/titan/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/titan/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/titan/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-0.9.29/titan/uClibc.machine b/packages/uclibc/uclibc-0.9.29/titan/uClibc.machine
new file mode 100644
index 0000000000..75c5328056
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/titan/uClibc.machine
@@ -0,0 +1,52 @@
+#
+# Automatically generated make config: don't edit
+# Wed May 16 12:03:09 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+# TARGET_powerpc is not set
+TARGET_sh=y
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="sh"
+FORCE_OPTIONS_FOR_ARCH=y
+# CONFIG_SH2A is not set
+# CONFIG_SH2 is not set
+# CONFIG_SH3 is not set
+CONFIG_SH4=y
+TARGET_SUBARCH=""
+
+#
+# Using ELF file format
+#
+ARCH_ANY_ENDIAN=y
+ARCH_LITTLE_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN is not set
+ARCH_WANTS_LITTLE_ENDIAN=y
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+UCLIBC_HAS_FPU=y
+KERNEL_HEADERS="/usr/include"
+HAVE_DOT_CONFIG=y
diff --git a/packages/uclibc/uclibc-0.9.29/uClibc.config b/packages/uclibc/uclibc-0.9.29/uClibc.config
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/uClibc.config
diff --git a/packages/uclibc/uclibc-0.9.29/uClibc.distro b/packages/uclibc/uclibc-0.9.29/uClibc.distro
new file mode 100644
index 0000000000..b326ff03b5
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.29/uClibc.distro
@@ -0,0 +1,146 @@
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+# DOPIC is not set
+# HAVE_NO_SHARED is not set
+# ARCH_HAS_NO_LDSO is not set
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# UCLIBC_STATIC_LDCONFIG is not set
+LDSO_RUNPATH=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+LINUXTHREADS_OLD=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+COMPAT_ATEXIT=y
+UCLIBC_SUSV3_LEGACY=y
+UCLIBC_SUSV3_LEGACY_MACROS=y
+UCLIBC_HAS_SHADOW=y
+# UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set
+UCLIBC_HAS___PROGNAME=y
+UNIX98PTY_ONLY=y
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Advanced Library Settings
+#
+UCLIBC_PWD_BUFFER_SIZE=256
+UCLIBC_GRP_BUFFER_SIZE=256
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+# UCLIBC_HAS_REENTRANT_RPC is not set
+# UCLIBC_USE_NETLINK is not set
+# UCLIBC_HAS_BSD_RES_CLOSE is not set
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+UCLIBC_HAS_STDIO_BUFSIZ_256=y
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+UCLIBC_HAS_GNU_GETSUBOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+# UCLIBC_HAS_REGEX_OLD is not set
+UCLIBC_HAS_FNMATCH=y
+# UCLIBC_HAS_FNMATCH_OLD is not set
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+# UCLIBC_HAS_GNU_GLOB is not set
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="//usr"
+
+#
+# Security options
+#
+# UCLIBC_BUILD_PIE is not set
+# UCLIBC_HAS_ARC4RANDOM is not set
+# HAVE_NO_SSP is not set
+# UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+UCLIBC_BUILD_NOW=y
+UCLIBC_BUILD_NOEXECSTACK=y
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+UCLIBC_EXTRA_CFLAGS=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+DOSTRIP=y
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MALLOC_DEBUGGING is not set
+WARNINGS="-Wall"
+# EXTRA_WARNINGS is not set
+# DOMULTI is not set
+# UCLIBC_MJN3_ONLY is not set
+
+# math stuff for perl
+DO_C99_MATH=y
diff --git a/packages/uclibc/uclibc-cvs/magicbox/.mtn2git_empty b/packages/uclibc/uclibc-cvs/magicbox/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uclibc/uclibc-cvs/magicbox/.mtn2git_empty
diff --git a/packages/uclibc/uclibc-cvs/magicbox/uClibc.config b/packages/uclibc/uclibc-cvs/magicbox/uClibc.config
new file mode 100644
index 0000000000..6542d49fd0
--- /dev/null
+++ b/packages/uclibc/uclibc-cvs/magicbox/uClibc.config
@@ -0,0 +1,181 @@
+#
+# Automatically generated make config: don't edit
+# Thu May 3 00:20:29 2007
+#
+# TARGET_alpha is not set
+# TARGET_arm is not set
+# TARGET_bfin is not set
+# TARGET_cris is not set
+# TARGET_e1 is not set
+# TARGET_frv is not set
+# TARGET_h8300 is not set
+# TARGET_hppa is not set
+# TARGET_i386 is not set
+# TARGET_i960 is not set
+# TARGET_ia64 is not set
+# TARGET_m68k is not set
+# TARGET_microblaze is not set
+# TARGET_mips is not set
+# TARGET_nios is not set
+# TARGET_nios2 is not set
+TARGET_powerpc=y
+# TARGET_sh is not set
+# TARGET_sh64 is not set
+# TARGET_sparc is not set
+# TARGET_v850 is not set
+# TARGET_vax is not set
+# TARGET_x86_64 is not set
+
+#
+# Target Architecture Features and Options
+#
+TARGET_ARCH="powerpc"
+FORCE_OPTIONS_FOR_ARCH=y
+ARCH_BIG_ENDIAN=y
+
+#
+# Using Big Endian
+#
+ARCH_HAS_MMU=y
+ARCH_USE_MMU=y
+UCLIBC_HAS_FLOATS=y
+# UCLIBC_HAS_FPU is not set
+UCLIBC_HAS_SOFT_FLOAT=y
+DO_C99_MATH=y
+KERNEL_SOURCE="/proj/oplinux-0.2/tmp/uclibc/cross/powerpc-linux-uclibc"
+HAVE_DOT_CONFIG=y
+
+#
+# General Library Settings
+#
+# HAVE_NO_PIC is not set
+DOPIC=y
+# HAVE_NO_SHARED is not set
+# ARCH_HAS_NO_LDSO is not set
+HAVE_SHARED=y
+# FORCE_SHAREABLE_TEXT_SEGMENTS is not set
+LDSO_LDD_SUPPORT=y
+LDSO_CACHE_SUPPORT=y
+# LDSO_PRELOAD_FILE_SUPPORT is not set
+LDSO_BASE_FILENAME="ld.so"
+# UCLIBC_STATIC_LDCONFIG is not set
+LDSO_RUNPATH=y
+UCLIBC_CTOR_DTOR=y
+# HAS_NO_THREADS is not set
+UCLIBC_HAS_THREADS=y
+PTHREADS_DEBUG_SUPPORT=y
+LINUXTHREADS_OLD=y
+UCLIBC_HAS_LFS=y
+# MALLOC is not set
+# MALLOC_SIMPLE is not set
+MALLOC_STANDARD=y
+MALLOC_GLIBC_COMPAT=y
+UCLIBC_DYNAMIC_ATEXIT=y
+COMPAT_ATEXIT=y
+UCLIBC_SUSV3_LEGACY=y
+UCLIBC_HAS_SHADOW=y
+UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
+UCLIBC_HAS___PROGNAME=y
+UNIX98PTY_ONLY=y
+ASSUME_DEVPTS=y
+UCLIBC_HAS_TM_EXTENSIONS=y
+UCLIBC_HAS_TZ_CACHING=y
+UCLIBC_HAS_TZ_FILE=y
+UCLIBC_HAS_TZ_FILE_READ_MANY=y
+UCLIBC_TZ_FILE_PATH="/etc/TZ"
+
+#
+# Networking Support
+#
+UCLIBC_HAS_IPV6=y
+UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
+UCLIBC_HAS_REENTRANT_RPC=y
+UCLIBC_USE_NETLINK=y
+
+#
+# String and Stdio Support
+#
+UCLIBC_HAS_STRING_GENERIC_OPT=y
+UCLIBC_HAS_STRING_ARCH_OPT=y
+UCLIBC_HAS_CTYPE_TABLES=y
+UCLIBC_HAS_CTYPE_SIGNED=y
+# UCLIBC_HAS_CTYPE_UNSAFE is not set
+UCLIBC_HAS_CTYPE_CHECKED=y
+# UCLIBC_HAS_CTYPE_ENFORCED is not set
+UCLIBC_HAS_WCHAR=y
+# UCLIBC_HAS_LOCALE is not set
+UCLIBC_HAS_HEXADECIMAL_FLOATS=y
+UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
+UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
+UCLIBC_HAS_SCANF_GLIBC_A_FLAG=y
+# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
+UCLIBC_HAS_STDIO_BUFSIZ_256=y
+# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_4096 is not set
+# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
+UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
+# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
+# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
+UCLIBC_HAS_STDIO_GETC_MACRO=y
+UCLIBC_HAS_STDIO_PUTC_MACRO=y
+UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
+# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set
+UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
+UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
+UCLIBC_HAS_PRINTF_M_SPEC=y
+UCLIBC_HAS_ERRNO_MESSAGES=y
+# UCLIBC_HAS_SYS_ERRLIST is not set
+UCLIBC_HAS_SIGNUM_MESSAGES=y
+# UCLIBC_HAS_SYS_SIGLIST is not set
+UCLIBC_HAS_GNU_GETOPT=y
+UCLIBC_HAS_GNU_GETSUBOPT=y
+
+#
+# Big and Tall
+#
+UCLIBC_HAS_REGEX=y
+UCLIBC_HAS_REGEX_OLD=y
+UCLIBC_HAS_FNMATCH=y
+UCLIBC_HAS_FNMATCH_OLD=y
+UCLIBC_HAS_WORDEXP=y
+UCLIBC_HAS_FTW=y
+UCLIBC_HAS_GLOB=y
+# UCLIBC_HAS_GNU_GLOB is not set
+
+#
+# Library Installation Options
+#
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="//usr"
+
+#
+# Security options
+#
+# UCLIBC_BUILD_PIE is not set
+# UCLIBC_HAS_ARC4RANDOM is not set
+# HAVE_NO_SSP is not set
+# UCLIBC_HAS_SSP is not set
+UCLIBC_BUILD_RELRO=y
+# UCLIBC_BUILD_NOW is not set
+UCLIBC_BUILD_NOEXECSTACK=y
+
+#
+# uClibc development/debugging options
+#
+CROSS_COMPILER_PREFIX=""
+# DODEBUG is not set
+# DODEBUG_PT is not set
+DOSTRIP=y
+# DOASSERTS is not set
+# SUPPORT_LD_DEBUG is not set
+# SUPPORT_LD_DEBUG_EARLY is not set
+# UCLIBC_MALLOC_DEBUGGING is not set
+WARNINGS="-Wall"
+# EXTRA_WARNINGS is not set
+# DOMULTI is not set
+# UCLIBC_MJN3_ONLY is not set
diff --git a/packages/uclibc/uclibc-initial_0.9.29.bb b/packages/uclibc/uclibc-initial_0.9.29.bb
new file mode 100644
index 0000000000..840acafeac
--- /dev/null
+++ b/packages/uclibc/uclibc-initial_0.9.29.bb
@@ -0,0 +1,32 @@
+SECTION = "base"
+require uclibc_${PV}.bb
+
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/uclibc-${PV}', '${FILE_DIRNAME}/uclibc', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+
+DEPENDS = "linux-libc-headers"
+PROVIDES = "virtual/${TARGET_PREFIX}libc-initial"
+PACKAGES = ""
+
+do_stage() {
+ # Install initial headers into the cross dir
+ make PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \
+ RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \
+ pregen install_dev
+
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/include
+ mkdir -p ${CROSS_DIR}/${TARGET_SYS}/lib
+ ln -sf include ${CROSS_DIR}/${TARGET_SYS}/sys-include
+ rm -rf ${CROSS_DIR}/${TARGET_SYS}/${prefix}
+
+ # This conflicts with the c++ version of this header
+ rm -f ${UCLIBC_PREFIX}/include/bits/atomicity.h
+}
+
+do_install() {
+ :
+}
+
+do_compile () {
+ :
+}
diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc
index d81cfc636a..ca6613d315 100644
--- a/packages/uclibc/uclibc.inc
+++ b/packages/uclibc/uclibc.inc
@@ -26,7 +26,7 @@ DEPENDS = "virtual/${TARGET_PREFIX}binutils \
INHIBIT_DEFAULT_DEPS = "1"
PARALLEL_MAKE = ""
-PACKAGES =+ "ldd uclibc-utils uclibc-gconv uclibc-thread-db"
+PACKAGES =+ "ldd uclibc-utils-dbg uclibc-utils uclibc-gconv uclibc-thread-db"
uclibc_baselibs = "/lib/libcrypt*.so* /lib/libdl*.so \
/lib/libintl*.so* /lib/libm*.so \
@@ -41,6 +41,7 @@ FILES_${PN} = "${sysconfdir} ${uclibc_baselibs} /sbin/ldconfig \
FILES_ldd = "${bindir}/ldd"
FILES_uclibc-dev += "${libdir}/*.o"
FILES_uclibc-utils = "${bindir} ${sbindir}"
+FILES_uclibc-utils-dbg += "${bindir}/.debug ${sbindir}/.debug"
FILES_uclibc-gconv = "${libdir}/gconv"
FILES_uclibc-thread-db = "/lib/libthread_db*"
RPROVIDES_uclibc-dev += "libc-dev"
@@ -56,9 +57,7 @@ UCLIBC_LOCALE_URI = "http://www.uclibc.org/downloads/${UCLIBC_LOCALE_FILE}"
UCLIBC_LOCALE_URI_arm = "http://openembedded.org/dl/uclibc-locale/${UCLIBC_LOCALE_FILE}"
SRC_URI = "${@['${UCLIBC_LOCALE_URI}', ''][bb.data.getVar('USE_NLS', d, 1) != 'yes']} \
- file://uClibc.config \
- file://uClibc.machine \
- file://uClibc.distro"
+ file://uClibc.config"
UCLIBC_PREFIX = "${CROSS_DIR}/${TARGET_SYS}"
UCLIBC_STAGE_PREFIX = "${STAGING_DIR}/${HOST_SYS}"
@@ -72,8 +71,15 @@ EXTRA_OEMAKE_task_do_populate_staging = "${OEMAKE_NO_CC}"
EXTRA_OEMAKE_task_do_package = "${OEMAKE_NO_CC}"
KERNEL_SOURCE = "${CROSS_DIR}/${TARGET_SYS}/include"
+KERNEL_HEADERS = "${CROSS_DIR}/${TARGET_SYS}/include"
+
+# Lets munge this via siteinfo.bbclass as well:
+# ARCH_BIG_ENDIAN=y
+# ARCH_WANTS_BIG_ENDIAN=y
+# ARCH_WANTS_LITTLE_ENDIAN is not set
configmangle = 's,^KERNEL_SOURCE=.*,KERNEL_SOURCE="${KERNEL_SOURCE}",g; \
+ s,^KERNEL_HEADERS=.*,KERNEL_HEADERS="${KERNEL_HEADERS}",g; \
s,^RUNTIME_PREFIX=.*,RUNTIME_PREFIX="/",g; \
s,^DEVEL_PREFIX=.*,DEVEL_PREFIX="/${prefix}",g; \
s,^SHARED_LIB_LOADER_PATH=.*,SHARED_LIB_LOADER_PATH="/lib",; \
@@ -101,18 +107,28 @@ python do_patch () {
do_configure() {
rm -f ${S}/.config
- # This stuff works like the standard OE OVERRIDES - keep the files
- # in the same order as the default OVERRIDES (well, reverse order,
- # because unlike overrides the last takes precedence)
- cat ${WORKDIR}/uClibc.config ${WORKDIR}/uClibc.distro ${WORKDIR}/uClibc.machine >${S}/.config
+ # For uClibc 0.9.29, OpenEmbedded splits the uClibc.config in two parts:
+ # uClibc.machine and uClibc.distro. So, if they exist use them, otherwise
+ # use a uClibc.config
+ if [ -f ${WORKDIR}/uClibc.machine -a -f ${WORKDIR}/uClibc.distro ]; then
+ echo "### uClibc.machine ###" >${S}/merged.config
+ cat ${WORKDIR}/uClibc.machine >>${S}/merged.config
+ echo "### uClibc.distro ###" >>${S}/merged.config
+ cat ${WORKDIR}/uClibc.distro >>${S}/merged.config
+ else
+ echo "### uClibc.config ###" >${S}/merged.config
+ cat ${WORKDIR}/uClibc.config >>${S}/merged.config
+ fi
+ cp ${S}/merged.config ${S}/.config
+
+ # Mangle the resulting .config depending on OE variables
perl -i -p -e 's,^CROSS=.*,TARGET_ARCH=${TARGET_ARCH}\nCROSS=${TARGET_PREFIX},g' ${S}/Rules.mak
perl -i -p -e '${configmangle}' ${S}/.config
-
sed -i -e '/CONFIG_ARM_EABI/d' ${S}/.config
- if [ "${TARGET_OS}" == "linux-gnueabi" -o "${TARGET_OS}" == "linux-uclibcgnueabi" ]; then
+ if [ "${TARGET_OS}" = "linux-gnueabi" -o "${TARGET_OS}" = "linux-uclibcgnueabi" ]; then
echo "CONFIG_ARM_EABI=y" >> ${S}/.config
else
echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config
diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb
index 4cc39fcd07..2c557ec606 100644
--- a/packages/uclibc/uclibc_0.9.28.bb
+++ b/packages/uclibc/uclibc_0.9.28.bb
@@ -22,20 +22,31 @@ S = "${WORKDIR}/uClibc-${PV}"
#SRC_URI += "file://nokernelheadercheck.patch;patch=1"
#
# Thumb support
-SRC_URI += " file://thumb-defined-arm-or-thumb.patch;patch=1"
#
# Thumb interworking support
-SRC_URI += " file://thumb-mov-pc-bx.patch;patch=1"
-SRC_URI += " file://thumb-swi-r7.patch;patch=1"
-SRC_URI += " file://thumb-sysnum-h.patch;patch=1"
-SRC_URI += " file://thumb-asm-swi.patch;patch=1"
-SRC_URI += " file://thumb-call-via-rx.patch;patch=1"
-SRC_URI += " file://dl-startup.h.patch;patch=1"
-SRC_URI += " file://dl-string.h.patch;patch=1"
-SRC_URI += " file://dl-sysdep.h.patch;patch=1"
+THUMBSTUFF = " \
+ file://thumb-defined-arm-or-thumb.patch;patch=1 \
+ file://thumb-mov-pc-bx.patch;patch=1 \
+ file://thumb-swi-r7.patch;patch=1 \
+ file://thumb-sysnum-h.patch;patch=1 \
+ file://thumb-asm-swi.patch;patch=1 \
+ file://thumb-call-via-rx.patch;patch=1 \
+ file://dl-startup.h.patch;patch=1 \
+ file://dl-string.h.patch;patch=1 \
+ file://dl-sysdep.h.patch;patch=1 \
+ "
+
+SRC_URI_append_arm = " ${THUMBSTUFF} "
+
#
# This is a core change and is controversial, maybe even wrong
# on some architectures
THUMB_INTERWORK_RESOLVE_PATCH = ""
THUMB_INTERWORK_RESOLVE_PATCH_thumb-interwork = " file://thumb-resolve.patch;patch=1"
SRC_URI += " ${THUMB_INTERWORK_RESOLVE_PATCH}"
+
+
+DEFAULT_PREFERENCE_avr32 = "6000"
+SRC_URI_append_avr32 = " http://avr32linux.org/twiki/pub/Main/MicroClibcPatches/uClibc-0.9.28-avr1.patch.bz2;patch=1 "
+
+
diff --git a/packages/uclibc/uclibc_0.9.29.bb b/packages/uclibc/uclibc_0.9.29.bb
new file mode 100644
index 0000000000..f27bbe7c22
--- /dev/null
+++ b/packages/uclibc/uclibc_0.9.29.bb
@@ -0,0 +1,36 @@
+# UCLIBC_BASE should be the latest released revision of uclibc (that way
+# the config files will typically be correct!) uclibc-cvs takes precedence
+# over uclibc-${UCLIBC_BASE}, if a config file in uclibc-cvs is out of date
+# try removing it
+#
+# UCLIBC_BASE can be set in a distro file, but whether this works depends
+# on whether the base patches apply to the selected (SRCDATE) svn release.
+#
+UCLIBC_BASE ?= "0.9.29"
+PR = "r6"
+
+require uclibc.inc
+
+PROVIDES += "virtual/${TARGET_PREFIX}libc-for-gcc"
+
+SRC_URI += "file://uClibc.machine file://uClibc.distro \
+ file://errno_values.h.patch;patch=1 \
+ file://termios.h.patch;patch=1 \
+ "
+
+# mmap-unsigned-shift_bugid1303.patch
+# http://uclibc.org/lists/uclibc-cvs/2007-May/011360.html;patch=1"
+
+#recent versions uclibc require real kernel headers
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+#as stated above, uclibc needs real kernel-headers
+#however: we can't depend on virtual/kernel when nptl hits due to depends deadlocking ....
+KERNEL_SOURCE = "${CROSS_DIR}/${TARGET_SYS}"
+
+SRC_URI += "http://www.uclibc.org/downloads/uClibc-${PV}.tar.bz2"
+
+S = "${WORKDIR}/uClibc-${UCLIBC_BASE}"
+
+LEAD_SONAME = "libc.so"
+
diff --git a/packages/udev/files/init b/packages/udev/files/init
index 8cbab188f0..a13b9afcd5 100755
--- a/packages/udev/files/init
+++ b/packages/udev/files/init
@@ -1,9 +1,9 @@
-#!/bin/sh -e
+#!/bin/sh
UDEVSTART=/sbin/udevstart
# defaults
-tmpfs_size="10M"
+tmpfs_size="2M"
udev_root="/dev"
[ -x $UDEVSTART ] || exit 0
diff --git a/packages/udev/udev-092/init b/packages/udev/udev-092/init
index 5a60d52a9a..42cb8ea2ce 100644
--- a/packages/udev/udev-092/init
+++ b/packages/udev/udev-092/init
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
### BEGIN INIT INFO
# Provides: udev
# Required-Start: mountvirtfs
@@ -119,7 +119,7 @@ PATH="/sbin:/bin:/usr/bin"
[ -x /sbin/udevd ] || exit 0
# defaults
-tmpfs_size="10M"
+tmpfs_size="2M"
udev_root="/dev"
udevd_timeout=30
diff --git a/packages/udev/udev-097/init b/packages/udev/udev-097/init
index cc25c026a3..ff2ad8ef73 100644
--- a/packages/udev/udev-097/init
+++ b/packages/udev/udev-097/init
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
### BEGIN INIT INFO
# Provides: udev
# Required-Start: mountvirtfs
@@ -131,7 +131,7 @@ warn_if_interactive() {
PATH="/sbin:/bin:/usr/bin"
# defaults
-tmpfs_size="10M"
+tmpfs_size="2M"
udev_root="/dev"
if [ -e /etc/udev/udev.conf ]; then
diff --git a/packages/udev/udev-100/init b/packages/udev/udev-100/init
index cc25c026a3..ff2ad8ef73 100644
--- a/packages/udev/udev-100/init
+++ b/packages/udev/udev-100/init
@@ -1,4 +1,4 @@
-#!/bin/sh -e
+#!/bin/sh
### BEGIN INIT INFO
# Provides: udev
# Required-Start: mountvirtfs
@@ -131,7 +131,7 @@ warn_if_interactive() {
PATH="/sbin:/bin:/usr/bin"
# defaults
-tmpfs_size="10M"
+tmpfs_size="2M"
udev_root="/dev"
if [ -e /etc/udev/udev.conf ]; then
diff --git a/packages/udev/udev-hostap-cs-vcc-workaround_1.0.bb b/packages/udev/udev-hostap-cs-vcc-workaround_1.0.bb
new file mode 100644
index 0000000000..4076cb2dd6
--- /dev/null
+++ b/packages/udev/udev-hostap-cs-vcc-workaround_1.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "A hack to force VCC to 5v for hostap_cs cards. This will fry your \
+card one sweet day."
+PR = "r1"
+
+SRC_URI = " file://50-hostap_cs.rules "
+
+do_install() {
+ install -d ${D}${sysconfdir}/udev/rules.d/
+ install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/udev/udev.inc b/packages/udev/udev.inc
index 32b9b28784..e9c83d4e5a 100644
--- a/packages/udev/udev.inc
+++ b/packages/udev/udev.inc
@@ -12,17 +12,12 @@ SRC_URI += " \
file://local.rules \
file://init"
-UDEV_DEVFS_RULES ?= "0"
+inherit update-rc.d autotools pkgconfig
-PACKAGES =+ "udev-utils libvolume-id libvolume-id-dev"
+PARALLEL_MAKE = ""
+UDEV_DEVFS_RULES ?= "0"
PKG_libvolume-id-dev = "libvolume-id-dev"
-FILES_libvolume-id-dev = "${includedir}/libvolume_id.h ${libdir}/libvolume_id.a ${libdir}/libvolume_id.so ${libdir}/pkgconfig/libvolume_id.pc"
-FILES_udev-utils = "${usrbindir}/udevinfo ${usrbindir}/udevtest"
-FILES_libvolume-id = "${base_libdir}/libvolume_id.so.*"
-
-inherit update-rc.d autotools pkgconfig
-
INITSCRIPT_NAME = "udev"
INITSCRIPT_PARAMS = "start 04 S ."
@@ -37,8 +32,6 @@ bindir = "/bin"
sbindir = "/sbin"
UDEV_EXTRAS = "<override me>"
-FILES_${PN} += "${usrbindir}/* ${usrsbindir}/*"
-FILES_${PN}-dbg += "${usrbindir}/.debug ${usrsbindir}/.debug"
EXTRA_OEMAKE = "-e \
'EXTRAS=${UDEV_EXTRAS}' \
'STRIP=echo'"
@@ -68,3 +61,10 @@ do_install () {
do_stage () {
autotools_stage_all
}
+
+PACKAGES =+ "udev-utils libvolume-id libvolume-id-dev"
+FILES_libvolume-id-dev = "${includedir}/libvolume_id.h ${libdir}/libvolume_id.a ${libdir}/libvolume_id.so ${libdir}/pkgconfig/libvolume_id.pc"
+FILES_udev-utils = "${usrbindir}/udevinfo ${usrbindir}/udevtest"
+FILES_libvolume-id = "${base_libdir}/libvolume_id.so.*"
+FILES_${PN} += "${usrbindir}/* ${usrsbindir}/*"
+FILES_${PN}-dbg += "${usrbindir}/.debug ${usrsbindir}/.debug"
diff --git a/packages/udev/udev_092.bb b/packages/udev/udev_092.bb
index 7f6685d926..b946b98c56 100644
--- a/packages/udev/udev_092.bb
+++ b/packages/udev/udev_092.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "udev is a daemon which dynamically creates and removes device nodes from \
/dev/, handles hotplug events and loads drivers at boot time. It replaces \
the hotplug package and requires a kernel not older than 2.6.12."
-RPROVIDES = "hotplug"
+RPROVIDES_${PN} = "hotplug"
-PR = "r16"
+PR = "r20"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -14,9 +14,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz
file://mount.blacklist \
"
-SRC_URI_append_h2200 = " file://50-hostap_cs.rules "
-PACKAGE_ARCH_h2200 = "h2200"
-
require udev.inc
INITSCRIPT_PARAMS = "start 03 S ."
@@ -55,10 +52,6 @@ do_install () {
install -m 0755 ${WORKDIR}/udevsynthesize.sh ${D}${sbindir}/udevsynthesize
}
-do_install_append_h2200() {
- install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
-}
-
pkg_postinst_append() {
# Add the root partition to mount.blacklist to avoid a bug in the auto-mounter,
diff --git a/packages/udev/udev_097.bb b/packages/udev/udev_097.bb
index 2af5556dbd..360e6019d5 100644
--- a/packages/udev/udev_097.bb
+++ b/packages/udev/udev_097.bb
@@ -8,7 +8,7 @@ used to detect the type of a file system and read its metadata."
DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \
needed to link programs with libvolume_id."
-PR = "r7"
+PR = "r10"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -18,9 +18,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz
require udev.inc
-SRC_URI_append_h2200 = " file://50-hostap_cs.rules "
-PACKAGE_ARCH_h2200 = "h2200"
-
INITSCRIPT_PARAMS = "start 03 S ."
FILES_${PN} += "${base_libdir}/udev/*"
diff --git a/packages/udev/udev_100.bb b/packages/udev/udev_100.bb
index bef4cb7301..e4ef8395a6 100644
--- a/packages/udev/udev_100.bb
+++ b/packages/udev/udev_100.bb
@@ -9,7 +9,7 @@ used to detect the type of a file system and read its metadata."
DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \
needed to link programs with libvolume_id."
-PR = "r6"
+PR = "r9"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -19,9 +19,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz
require udev.inc
-SRC_URI_append_h2200 = " file://50-hostap_cs.rules "
-PACKAGE_ARCH_h2200 = "h2200"
-
INITSCRIPT_PARAMS = "start 03 S ."
FILES_${PN} += "${base_libdir}/udev/*"
@@ -56,10 +53,6 @@ do_install () {
install -d ${D}${base_libdir}/udev/
}
-do_install_append_h2200() {
- install -m 0644 ${WORKDIR}/50-hostap_cs.rules ${D}${sysconfdir}/udev/rules.d/50-hostap_cs.rules
-}
-
pkg_postinst_append() {
# Add the root partition to mount.blacklist to avoid a bug in the auto-mounter,
diff --git a/packages/uicmoc/uicmoc-native-2.3.10/kernel-asm-page.patch b/packages/uicmoc/uicmoc-native-2.3.10/kernel-asm-page.patch
new file mode 100644
index 0000000000..0d3187417a
--- /dev/null
+++ b/packages/uicmoc/uicmoc-native-2.3.10/kernel-asm-page.patch
@@ -0,0 +1,20 @@
+diff --git a/src/kernel/qpixmapcache.cpp b/src/kernel/qpixmapcache.cpp
+index c2e7d9b..8d39585 100644
+--- a/src/kernel/qpixmapcache.cpp
++++ b/src/kernel/qpixmapcache.cpp
+@@ -123,9 +123,12 @@ void cleanup_pixmap_cache();
+ #ifdef THROW_AWAY_UNUSED_PAGES
+ # include <sys/mman.h> // madvise
+-# include <asm/page.h> // PAGE_SIZE,PAGE_MASK,PAGE_ALIGN
++# include <unistd.h> // getpagesize()
++# if (!defined(PAGE_ALIGN)) && defined(PAGE_SIZE) && defined(PAGE_MASK)
++# define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
++# endif
+ # ifndef PAGE_ALIGN
+-# define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
+-# endif // PAGE_ALIGN
++# define PAGE_ALIGN(addr) (((addr)+getpagesize()-1)&~(getpagesize()-1))
++# endif
+ #endif // THROW_AWAY_UNUSED_PAGES
+
+
diff --git a/packages/uicmoc/uicmoc-native_2.3.10.bb b/packages/uicmoc/uicmoc-native_2.3.10.bb
index 90c9b432fb..4d6b16a3b3 100644
--- a/packages/uicmoc/uicmoc-native_2.3.10.bb
+++ b/packages/uicmoc/uicmoc-native_2.3.10.bb
@@ -3,14 +3,15 @@ HOMEPAGE = "http://www.trolltech.com"
SECTION = "devel"
PRIORITY = "optional"
LICENSE = "GPL QPL"
-PR = "r2"
+PR = "r4"
SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz \
file://fix-makefile.patch;patch=1 \
file://gcc3_4.patch;patch=1" \
file://gcc4.patch;patch=1 \
file://gcc4_1.patch;patch=1 \
- file://64bit-cleanup.patch;patch=1"
+ file://64bit-cleanup.patch;patch=1 \
+ file://kernel-asm-page.patch;patch=1"
S = "${WORKDIR}/qt-${PV}"
inherit native qmake-base
diff --git a/packages/uicmoc/uicmoc4-native-4.2.3/.mtn2git_empty b/packages/uicmoc/uicmoc4-native-4.2.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uicmoc/uicmoc4-native-4.2.3/.mtn2git_empty
diff --git a/packages/uicmoc/uicmoc4-native-4.1.1/fix-mkspecs.patch b/packages/uicmoc/uicmoc4-native-4.2.3/fix-mkspecs.patch
index 491edde370..491edde370 100644
--- a/packages/uicmoc/uicmoc4-native-4.1.1/fix-mkspecs.patch
+++ b/packages/uicmoc/uicmoc4-native-4.2.3/fix-mkspecs.patch
diff --git a/packages/uicmoc/uicmoc4-native_4.1.1.bb b/packages/uicmoc/uicmoc4-native_4.1.1.bb
deleted file mode 100644
index 59bdd1bc40..0000000000
--- a/packages/uicmoc/uicmoc4-native_4.1.1.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-DESCRIPTION = "User-Interface-, Meta-Object-, and Resource Compiler for Qt/[X11|Mac|Embedded] version 4.x"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "GPL QPL"
-PR = "r0"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz"
-
-S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
-
-inherit native
-
-EXTRA_OECONF = "-qt-libjpeg -qt-gif -system-zlib \
- -no-nis -no-cups -no-exceptions \
- -no-accessibility -no-libjpeg \
- -no-nas-sound -no-sm \
- -no-xshape -no-xinerama \
- -no-xcursor -no-xrandr \
- -no-xrender -no-fontconfig \
- -no-tablet -no-xkb \
- -no-libpng \
- -verbose -release -fast -static "
-EXTRA_OEMAKE = " "
-
-do_configure() {
- echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
-}
-
-do_compile() {
- unset CC CXX CFLAGS LFLAGS CXXFLAGS CPPFLAGS
- cd ${S}/src/tools/moc && oe_runmake CC="${CC}" CXX="${CXX}"
- cd ${S}/src/corelib && oe_runmake CC="${CC}" CXX="${CXX}"
- cd ${S}/src/xml && oe_runmake CC="${CC}" CXX="${CXX}"
- cd ${S}/src/tools/uic && oe_runmake CC="${CC}" CXX="${CXX}"
- cd ${S}/src/tools/rcc && oe_runmake CC="${CC}" CXX="${CXX}"
-}
-
-do_stage() {
- install -m 0755 bin/moc ${STAGING_BINDIR}/moc4
- install -m 0755 bin/uic ${STAGING_BINDIR}/uic4
- install -m 0755 bin/rcc ${STAGING_BINDIR}/rcc4
-}
diff --git a/packages/uicmoc/uicmoc4-native_4.2.3.bb b/packages/uicmoc/uicmoc4-native_4.2.3.bb
new file mode 100644
index 0000000000..341b092e29
--- /dev/null
+++ b/packages/uicmoc/uicmoc4-native_4.2.3.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "User-Interface-, Meta-Object-, and Resource Compiler for Qt/[X11|Mac|Embedded] version 4.x"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL QPL"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz"
+
+S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "-qt-libjpeg -qt-gif -system-zlib \
+ -no-nis -no-cups -no-exceptions \
+ -no-accessibility -no-libjpeg \
+ -no-nas-sound -no-sm \
+ -no-xshape -no-xinerama \
+ -no-xcursor -no-xrandr \
+ -no-xrender -no-fontconfig \
+ -no-tablet -no-xkb \
+ -no-libpng \
+ -verbose -release -fast -static "
+EXTRA_OEMAKE = " "
+
+do_configure() {
+ echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+}
+
+do_compile() {
+ unset CC CXX CFLAGS LFLAGS CXXFLAGS CPPFLAGS
+ cd ${S}/src/tools/moc && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/corelib && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/xml && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/tools/uic && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/tools/rcc && oe_runmake CC="${CC}" CXX="${CXX}"
+}
+
+do_stage() {
+ install -m 0755 bin/moc ${STAGING_BINDIR}/moc4
+ install -m 0755 bin/uic ${STAGING_BINDIR}/uic4
+ install -m 0755 bin/rcc ${STAGING_BINDIR}/rcc4
+}
diff --git a/packages/uicmoc/uicmoc4-native_4.3.0.bb b/packages/uicmoc/uicmoc4-native_4.3.0.bb
new file mode 100644
index 0000000000..fbfd8125cd
--- /dev/null
+++ b/packages/uicmoc/uicmoc4-native_4.3.0.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "User-Interface-, Meta-Object-, and Resource Compiler for Qt/[X11|Mac|Embedded] version 4.x"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL QPL"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz"
+
+S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "-prefix ${STAGING_DIR}/${BUILD_SYS}/qt4 \
+ -qt-libjpeg -qt-gif -system-zlib \
+ -no-nis -no-cups -no-exceptions \
+ -no-accessibility -no-libjpeg \
+ -no-nas-sound -no-sm \
+ -no-xshape -no-xinerama \
+ -no-xcursor -no-xrandr \
+ -no-xrender -no-fontconfig \
+ -no-tablet -no-xkb \
+ -no-libpng \
+ -verbose -release -fast -static \
+ -qt3support "
+EXTRA_OEMAKE = " "
+
+do_configure() {
+ echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+}
+
+do_compile() {
+ unset CC CXX CFLAGS LFLAGS CXXFLAGS CPPFLAGS
+ cd ${S}/src/tools/moc && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/corelib && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/sql && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/qt3support && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/xml && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/tools/uic && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/tools/rcc && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/network && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/gui && oe_runmake CC="${CC}" CXX="${CXX}"
+ cd ${S}/src/tools/uic3 && oe_runmake CC="${CC}" CXX="${CXX}"
+}
+
+do_stage() {
+ install -m 0755 bin/moc ${STAGING_BINDIR}/moc4
+ install -m 0755 bin/uic ${STAGING_BINDIR}/uic4
+ install -m 0755 bin/uic3 ${STAGING_BINDIR}/uic34
+ install -m 0755 bin/rcc ${STAGING_BINDIR}/rcc4
+ install -d ${STAGING_DIR}/${BUILD_SYS}/qt4/
+ install -m 0644 tools/porting/src/q3porting.xml ${STAGING_DIR}/${BUILD_SYS}/qt4/
+}
diff --git a/packages/uim/uim-native_1.3.1.bb b/packages/uim/uim-native_1.3.1.bb
index 5249ac6394..e77d24d819 100644
--- a/packages/uim/uim-native_1.3.1.bb
+++ b/packages/uim/uim-native_1.3.1.bb
@@ -1,3 +1,6 @@
require uim.inc
DEPENDS = "gtk+ anthy intltool-native"
inherit native autotools pkgconfig
+PR = "r1"
+
+S = "${WORKDIR}/uim-${PV}"
diff --git a/packages/uim/uim.inc b/packages/uim/uim.inc
index 94eb11d332..dc8ba50b6f 100644
--- a/packages/uim/uim.inc
+++ b/packages/uim/uim.inc
@@ -14,3 +14,5 @@ EXTRA_OECONF += "--disable-applet \
--without-eb"
SRC_URI = "http://uim.freedesktop.org/releases/uim/stable/uim-${PV}.tar.bz2"
+
+FILES_${PN}-dbg += "${libdir}/*/*/immodules/.debug ${libdir}/uim/plugin"
diff --git a/packages/uim/uim_1.3.1.bb b/packages/uim/uim_1.3.1.bb
index e5ddcd0737..fce91c30e3 100644
--- a/packages/uim/uim_1.3.1.bb
+++ b/packages/uim/uim_1.3.1.bb
@@ -1,13 +1,13 @@
require uim.inc
DEPENDS = "gtk+ uim-native anthy fontconfig libxft xt glib-2.0 ncurses"
SECTION_uim-gtk2.0 = "x11/inputmethods"
-PR = "r1"
+PR = "r2"
SRC_URI += "file://uim-module-manager.patch;patch=1"
inherit autotools pkgconfig
-PACKAGES = "uim-xim uim-utils uim-skk uim-gtk2.0 uim-fep uim-common uim-anthy libuim0 libuim-dev"
+PACKAGES += "uim-xim uim-utils uim-skk uim-gtk2.0 uim-fep uim-common uim-anthy libuim0 libuim-dev"
LEAD_SONAME = "libuim.so.1"
RDEPENDS_uim = "libuim0"
diff --git a/packages/unionfs/unionfs.inc b/packages/unionfs/unionfs.inc
index 652d79cc83..4035937740 100644
--- a/packages/unionfs/unionfs.inc
+++ b/packages/unionfs/unionfs.inc
@@ -4,7 +4,7 @@ physical content separate."
HOMEPAGE = "http://www.fsl.cs.sunysb.edu/project-unionfs.html"
LICENSE = "GPL"
-SRC_URI = "ftp://ftp.fsl.cs.sunysb.edu/pub/unionfs/unionfs-${PV}.tar.gz \
+SRC_URI = "ftp://ftp.fsl.cs.sunysb.edu/pub/unionfs/unionfs-1.x/unionfs-${PV}.tar.gz \
file://make.patch;patch=1"
S = "${WORKDIR}/unionfs-${PV}"
FILESPATH = "${FILE_DIRNAME}/unionfs-${PV}:${FILE_DIRNAME}/unionfs:${FILE_DIRNAME}/files:${FILE_DIRNAME}"
diff --git a/packages/upstart/.mtn2git_empty b/packages/upstart/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/upstart/.mtn2git_empty
diff --git a/packages/upstart/files/.mtn2git_empty b/packages/upstart/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/upstart/files/.mtn2git_empty
diff --git a/packages/upstart/files/autoconf_version.patch b/packages/upstart/files/autoconf_version.patch
new file mode 100644
index 0000000000..73b19879fb
--- /dev/null
+++ b/packages/upstart/files/autoconf_version.patch
@@ -0,0 +1,12 @@
+Index: upstart-0.3.8/configure.ac
+===================================================================
+--- upstart-0.3.8.orig/configure.ac 2007-05-09 22:02:14.000000000 +0200
++++ upstart-0.3.8/configure.ac 2007-05-09 22:02:24.000000000 +0200
+@@ -1,6 +1,6 @@
+ # Process this file with autoconf to produce a configure script.
+
+-AC_PREREQ(2.60)
++AC_PREREQ(2.59)
+ AC_INIT([upstart], [0.3.8], [upstart-devel@lists.ubuntu.com])
+ AC_COPYRIGHT([[Copyright © 2007 Canonical Ltd.]])
+ AC_CONFIG_SRCDIR([init/main.c])
diff --git a/packages/upstart/upstart.inc b/packages/upstart/upstart.inc
new file mode 100644
index 0000000000..59f21c9ed5
--- /dev/null
+++ b/packages/upstart/upstart.inc
@@ -0,0 +1,26 @@
+SECTION = "base"
+PRIORITY = "optional"
+DEPENDS = ""
+DESCRIPTION = "Event driven system init"
+LICENSE = "GPL"
+
+inherit autotools pkgconfig
+
+# --enable-compat builds halt, reboot, shutdown tools
+EXTRA_OECONF += "--enable-compat"
+
+do_stage () {
+ autotools_stage_all
+}
+
+# libupstart can be used for upstart event generation from other programs.
+# However it is not used by upstart itself, so package it seperately.
+PACKAGES =+ "libupstart libupstart-dev"
+FILES_libupstart += "${libdir}/libupstart.so.*"
+FILES_libupstart-dev += "${libdir}/libupstart.* ${includedir}/upstart/"
+
+# upstart-sysvcompat provides Sys V Init compatible tools: halt, reboot,
+# shutdown, telinit. These might be needed by other scripts.
+PACKAGES =+ "upstart-sysvcompat upstart-sysvtools-doc"
+FILES_upstart-sysvcompat += "${sbindir}/reboot ${sbindir}/halt ${sbindir}/shutdown ${sbindir}/telinit"
+FILES_upstart-sysvcompat-doc += "${mandir}/*/reboot.* ${mandir}/*/halt.* ${mandir}/*/shutdown.* ${mandir}/*/telinit.*"
diff --git a/packages/upstart/upstart_0.3.8.bb b/packages/upstart/upstart_0.3.8.bb
new file mode 100644
index 0000000000..5a4cf872a8
--- /dev/null
+++ b/packages/upstart/upstart_0.3.8.bb
@@ -0,0 +1,7 @@
+require upstart.inc
+
+SRC_URI = "http://upstart.ubuntu.com/download/0.3/upstart-${PV}.tar.bz2 \
+file://autoconf_version.patch;patch=1"
+
+PR = "r1"
+
diff --git a/packages/usb-gadget-mode/.mtn2git_empty b/packages/usb-gadget-mode/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/.mtn2git_empty b/packages/usb-gadget-mode/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/akita/.mtn2git_empty b/packages/usb-gadget-mode/files/akita/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/akita/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/akita/usb-gadget.conf b/packages/usb-gadget-mode/files/akita/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/packages/usb-gadget-mode/files/akita/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/c7x0/.mtn2git_empty b/packages/usb-gadget-mode/files/c7x0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/c7x0/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/c7x0/usb-gadget.conf b/packages/usb-gadget-mode/files/c7x0/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/packages/usb-gadget-mode/files/c7x0/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/collie/.mtn2git_empty b/packages/usb-gadget-mode/files/collie/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/collie/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/collie/usb-gadget.conf b/packages/usb-gadget-mode/files/collie/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/packages/usb-gadget-mode/files/collie/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/spitz/.mtn2git_empty b/packages/usb-gadget-mode/files/spitz/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/spitz/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/spitz/usb-gadget.conf b/packages/usb-gadget-mode/files/spitz/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/packages/usb-gadget-mode/files/spitz/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/tosa/.mtn2git_empty b/packages/usb-gadget-mode/files/tosa/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/usb-gadget-mode/files/tosa/.mtn2git_empty
diff --git a/packages/usb-gadget-mode/files/tosa/usb-gadget.conf b/packages/usb-gadget-mode/files/tosa/usb-gadget.conf
new file mode 100644
index 0000000000..717687d4c3
--- /dev/null
+++ b/packages/usb-gadget-mode/files/tosa/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="networking"
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/usb-gadget b/packages/usb-gadget-mode/files/usb-gadget
new file mode 100755
index 0000000000..6f957fd263
--- /dev/null
+++ b/packages/usb-gadget-mode/files/usb-gadget
@@ -0,0 +1,62 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: usb-gadget
+# Date: 20070606 (YMD)
+#
+#################################################################################
+#
+# 20070606 - v0.0.1 - Initial release
+# 20070630 - v0.0.2 - Add forgotten host mode
+
+CONF_FILE="/etc/default/usb-gadget"
+
+die() {
+ echo "ERROR: $1"
+ exit 1
+}
+
+go() {
+ test -e "$CONF_FILE" && . "$CONF_FILE"
+
+ case "$USB_MODE" in
+ networking) setup_usb g_ether "$MODULE_OPTIONS" ;;
+ storage) setup_usb g_file_storage "$MODULE_OPTIONS" ;;
+ hostmode) unload_usb_gadgets
+ setup_usb ohci_hcd "$MODULE_OPTIONS" ;;
+ none) unload_usb_gadgets ;;
+ esac
+
+}
+
+setup_usb() {
+
+ if ! ( lsmod | grep -q "$1" )
+ then
+ unload_usb_gadgets
+ echo "Loading [$1]"
+ modprobe "$1" "$MODULE_OPTIONS"
+ else
+ echo "Already loaded: [$1]"
+ fi
+}
+
+unload_usb_gadgets() {
+ KERNEL_VERSION="`uname -r`"
+ GADGET_MODULES="`find /lib/modules/$KERNEL_VERSION/kernel/drivers/usb/gadget -name "*g_*"`"
+
+ for module in $GADGET_MODULES
+ do
+ MODULE_NAME="`basename $module | sed "s/\.ko//"`"
+
+ if ( lsmod | grep -q "$MODULE_NAME" )
+ then
+ echo "Unloading [$MODULE_NAME]"
+ rmmod "$module"
+ fi
+ done
+}
+
+go
diff --git a/packages/usb-gadget-mode/files/usb-gadget.conf b/packages/usb-gadget-mode/files/usb-gadget.conf
new file mode 100644
index 0000000000..3b5ebd6433
--- /dev/null
+++ b/packages/usb-gadget-mode/files/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE=""
+MODULE_OPTIONS=""
+
diff --git a/packages/usb-gadget-mode/files/usb-gadget.init b/packages/usb-gadget-mode/files/usb-gadget.init
new file mode 100755
index 0000000000..7bf456b652
--- /dev/null
+++ b/packages/usb-gadget-mode/files/usb-gadget.init
@@ -0,0 +1,16 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: usb-gadget.init
+# Date: 20070606 (YMD)
+#
+#################################################################################
+#
+# 20070606 - v0.0.1 - Initial release
+
+case "$1" in
+start) usb-gadget ;;
+esac
+
diff --git a/packages/usb-gadget-mode/usb-gadget-mode.bb b/packages/usb-gadget-mode/usb-gadget-mode.bb
new file mode 100644
index 0000000000..d1fab638f2
--- /dev/null
+++ b/packages/usb-gadget-mode/usb-gadget-mode.bb
@@ -0,0 +1,50 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: usb-gadget-mode.bb
+# Date: 20070606 (YMD)
+
+DESCRIPTION = "Manage the default USB gadget mode"
+SECTION = "console/network"
+LICENSE = "GPL"
+
+######################################################################################
+
+PV = "0.0.2"
+PR = "r0"
+
+######################################################################################
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+######################################################################################
+
+SRC_URI = "file://usb-gadget.conf \
+ file://usb-gadget \
+ file://usb-gadget.init"
+
+######################################################################################
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${bindir}
+ install -d ${D}${sysconfdir}/default
+
+ install -m 0644 ${WORKDIR}/usb-gadget.conf ${D}${sysconfdir}/default/usb-gadget
+ install -m 0755 ${WORKDIR}/usb-gadget.init ${D}${sysconfdir}/init.d/usb-gadget
+ install -m 0755 ${WORKDIR}/usb-gadget ${D}${bindir}
+}
+
+pkg_postinst() {
+
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt usb-gadget defaults 50
+}
+
+pkg_postrm() {
+ update-rc.d -f usb-gadget remove
+}
diff --git a/packages/util-linux/files/glibc-umount2.patch b/packages/util-linux/files/glibc-umount2.patch
new file mode 100644
index 0000000000..3da3a85cfc
--- /dev/null
+++ b/packages/util-linux/files/glibc-umount2.patch
@@ -0,0 +1,18 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 10sparcumount.dpatch by Jeff Bailey <jbailey@ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Sparc and Arm have umount2 in glibc.
+
+@DPATCH@
+--- util-linux/mount/umount.c 2005-05-20 11:39:07.000000000 +0000
++++ util-linux/mount/umount.c 2005-05-20 11:39:15.000000000 +0000
+@@ -31,7 +31,7 @@
+ #include <arpa/inet.h>
+ #endif
+
+-#if defined(MNT_FORCE) && !defined(__sparc__) && !defined(__arm__)
++#if defined(MNT_FORCE)
+ /* Interesting ... it seems libc knows about MNT_FORCE and presumably
+ about umount2 as well -- need not do anything */
+ #else /* MNT_FORCE */
diff --git a/packages/util-linux/util-linux.inc b/packages/util-linux/util-linux.inc
index a5ff009669..2b527678c4 100644
--- a/packages/util-linux/util-linux.inc
+++ b/packages/util-linux/util-linux.inc
@@ -23,7 +23,7 @@ FILES_util-linux-cfdisk = "/sbin/cfdisk"
FILES_util-linux-sfdisk = "/sbin/sfdisk"
FILES_util-linux-swaponoff = "/sbin/swapon.${PN} /sbin/swapoff.${PN}"
FILES_util-linux-losetup = "/sbin/losetup.${PN}"
-FILES_util-linux-mount = "/bin/mount.${PN}"
+FILES_util-linux-mount = "/bin/mount.${PN} ${sysconfdir}/default/mountall"
FILES_util-linux-umount = "/bin/umount.${PN}"
FILES_util-linux-readprofile = "/usr/sbin/readprofile"
@@ -95,6 +95,8 @@ do_install () {
mv ${D}${base_bindir}/umount ${D}${base_bindir}/umount.${PN}
mv ${D}${base_bindir}/mount ${D}${base_bindir}/mount.${PN}
mv ${D}${base_sbindir}/fdisk ${D}${base_sbindir}/fdisk.${PN}
+ install -d ${D}${sysconfdir}/default/
+ echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
checklink swapon ${D}${base_sbindir}/swapoff ".${PN}"
checklink shutdown ${D}${base_sbindir}/reboot ".${PN}"
diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb
index 32cbadae64..9d4b59c855 100644
--- a/packages/util-linux/util-linux_2.12r.bb
+++ b/packages/util-linux/util-linux_2.12r.bb
@@ -2,5 +2,6 @@ require util-linux.inc
SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1"
SRC_URI += "file://glibc-fix.patch;patch=1"
+SRC_URI += "file://glibc-umount2.patch;patch=1"
-PR = "r10"
+PR = "r12"
diff --git a/packages/uucp/files/.mtn2git_empty b/packages/uucp/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uucp/files/.mtn2git_empty
diff --git a/packages/uucp/files/policy.patch b/packages/uucp/files/policy.patch
new file mode 100644
index 0000000000..26f1f172b8
--- /dev/null
+++ b/packages/uucp/files/policy.patch
@@ -0,0 +1,85 @@
+Index: uucp-1.07/policy.h
+===================================================================
+--- uucp-1.07.orig/policy.h 2003-05-29 06:08:45.000000000 +0000
++++ uucp-1.07/policy.h 2007-03-09 00:51:55.000000000 +0000
+@@ -240,7 +240,7 @@
+ the sendmail choice below. Otherwise, select one of the other
+ choices as appropriate. */
+ #if 1
+-#define MAIL_PROGRAM "/usr/lib/sendmail -t"
++#define MAIL_PROGRAM "/usr/sbin/sendmail -oi -t"
+ /* #define MAIL_PROGRAM "/usr/sbin/sendmail -t" */
+ #define MAIL_PROGRAM_TO_BODY 1
+ #define MAIL_PROGRAM_SUBJECT_BODY 1
+@@ -302,7 +302,7 @@
+ /* #define LOCKDIR "/usr/spool/locks" */
+ /* #define LOCKDIR "/usr/spool/uucp/LCK" */
+ /* #define LOCKDIR "/var/spool/lock" */
+-/* #define LOCKDIR "/var/lock" */
++#define LOCKDIR "/var/lock"
+
+ /* You must also specify the format of the lock files by setting
+ exactly one of the following macros to 1. Check an existing lock
+@@ -349,7 +349,7 @@
+ The format for QNX lock files was made up just for Taylor UUCP.
+ QNX doesn't come with a version of UUCP. */
+ #define HAVE_V2_LOCKFILES 0
+-#define HAVE_HDB_LOCKFILES 0
++#define HAVE_HDB_LOCKFILES 1
+ #define HAVE_SCO_LOCKFILES 0
+ #define HAVE_SVR4_LOCKFILES 0
+ #define HAVE_SEQUENT_LOCKFILES 0
+@@ -466,8 +466,8 @@
+ When looking something up (a system, a port, etc.) the new style
+ configuration files will be read first, followed by the V2
+ configuration files, followed by the HDB configuration files. */
+-#define HAVE_V2_CONFIG 0
+-#define HAVE_HDB_CONFIG 0
++#define HAVE_V2_CONFIG 1
++#define HAVE_HDB_CONFIG 1
+
+ /* Exactly one of the following macros must be set to 1. The exact
+ format of the spool directories is explained in unix/spool.c.
+@@ -572,7 +572,7 @@
+ /* The name of the default spool directory. If HAVE_TAYLOR_CONFIG is
+ set to 1, this may be overridden by the ``spool'' command in the
+ configuration file. */
+-#define SPOOLDIR "/usr/spool/uucp"
++#define SPOOLDIR "/var/spool/uucp"
+ /* #define SPOOLDIR "/var/spool/uucp" */
+
+ /* The name of the default public directory. If HAVE_TAYLOR_CONFIG is
+@@ -580,7 +580,7 @@
+ configuration file. Also, a particular system may be given a
+ specific public directory by using the ``pubdir'' command in the
+ system file. */
+-#define PUBDIR "/usr/spool/uucppublic"
++#define PUBDIR "/var/spool/uucppublic"
+ /* #define PUBDIR "/var/spool/uucppublic" */
+
+ /* The default command path. This is a space separated list of
+@@ -644,21 +644,21 @@
+ /* The default log file when using HAVE_TAYLOR_LOGGING. When using
+ HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile''
+ command in the configuration file. */
+-#define LOGFILE "/usr/spool/uucp/Log"
++#define LOGFILE "/var/spool/uucp/Log"
+ /* #define LOGFILE "/var/spool/uucp/Log" */
+ /* #define LOGFILE "/var/log/uucp/Log" */
+
+ /* The default statistics file when using HAVE_TAYLOR_LOGGING. When
+ using HAVE_TAYLOR_CONFIG, this may be overridden by the
+ ``statfile'' command in the configuration file. */
+-#define STATFILE "/usr/spool/uucp/Stats"
++#define STATFILE "/var/spool/uucp/Stats"
+ /* #define STATFILE "/var/spool/uucp/Stats" */
+ /* #define STATFILE "/var/log/uucp/Stats" */
+
+ /* The default debugging file when using HAVE_TAYLOR_LOGGING. When
+ using HAVE_TAYLOR_CONFIG, this may be overridden by the
+ ``debugfile'' command in the configuration file. */
+-#define DEBUGFILE "/usr/spool/uucp/Debug"
++#define DEBUGFILE "/var/spool/uucp/Debug"
+ /* #define DEBUGFILE "/var/spool/uucp/Debug" */
+ /* #define DEBUGFILE "/var/log/uucp/Debug" */
+
diff --git a/packages/uucp/uucp_1.07.bb b/packages/uucp/uucp_1.07.bb
index 948f251e70..ddc16d94f2 100644
--- a/packages/uucp/uucp_1.07.bb
+++ b/packages/uucp/uucp_1.07.bb
@@ -1,16 +1,22 @@
DESCRIPTION = "UUCP is used to transfer mail, news and random files between systems which are not connected by more modern networks. The communication can be made via modems, direct (hard-wired) serial connections or via an IP connection."
+HOMEPAGE = "http://www.airs.com/ian/uucp.html"
+SECTION = "console/utils"
LICENSE = "GPLv2"
-SECTION = "console"
+PR = "r2"
inherit autotools
-SRC_URI = "http://ftp.debian.org/debian/pool/main/u/uucp/uucp_1.07.orig.tar.gz"
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/uucp/uucp-${PV}.tar.gz \
+ file://policy.patch;patch=1"
do_configure() {
libtoolize --force
oe_runconf
}
+do_install_append() {
+ fakeroot install -d -g uucp -o uucp ${D}/var/spool/uucp
+}
PACKAGES =+ "cu"
-FILES_cu = "${bindir}/cu"
+FILES_cu = "${bindir}/cu /var/spool"
diff --git a/packages/valgrind/valgrind_3.2.3.bb b/packages/valgrind/valgrind_3.2.3.bb
new file mode 100644
index 0000000000..6cc835a9f4
--- /dev/null
+++ b/packages/valgrind/valgrind_3.2.3.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Valgrind memory debugger"
+HOMEPAGE = "http://www.valgrind.org/"
+SECTION = "devel"
+LICENSE = "GPL"
+DEPENDS = "virtual/libx11"
+PR = "r0"
+
+SRC_URI = "http://www.valgrind.org/downloads/valgrind-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = "--enable-tls"
+
+COMPATIBLE_HOST = "^i.86.*-linux"
+
+FILES_${PN}-dbg += "/usr/lib/valgrind/x86-linux/.debug"
diff --git a/packages/vincent/vincent_svn.bb b/packages/vincent/vincent_svn.bb
index 87e111875a..f872f727be 100644
--- a/packages/vincent/vincent_svn.bb
+++ b/packages/vincent/vincent_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD"
PV = "0.0+svn${SRCDATE}"
PR = "r0"
-SRC_URI = "svn://svn.sourceforge.net/svnroot/ogl-es/branches;module=linux_nokia_770;proto=https"
+SRC_URI = "svn://ogl-es.svn.sourceforge.net/svnroot/ogl-es/branches;module=linux_nokia_770;proto=https"
S = "${WORKDIR}/linux_nokia_770/ogles/projects/linux-x11"
diff --git a/packages/vsftpd/vsftpd-2.0.5/syscall.patch b/packages/vsftpd/vsftpd-2.0.5/syscall.patch
new file mode 100644
index 0000000000..b91cd5392b
--- /dev/null
+++ b/packages/vsftpd/vsftpd-2.0.5/syscall.patch
@@ -0,0 +1,12 @@
+Index: vsftpd-2.0.5/sysdeputil.c
+===================================================================
+--- vsftpd-2.0.5.orig/sysdeputil.c 2007-05-20 21:20:01.000000000 +0200
++++ vsftpd-2.0.5/sysdeputil.c 2007-05-20 21:20:28.000000000 +0200
+@@ -159,7 +159,6 @@
+ #include <linux/capability.h>
+ #include <errno.h>
+ #include <syscall.h>
+-_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
+ /* Gross HACK to avoid warnings - linux headers overlap glibc headers */
+ #undef __NFDBITS
+ #undef __FDMASK
diff --git a/packages/vsftpd/vsftpd_2.0.5.bb b/packages/vsftpd/vsftpd_2.0.5.bb
index 81aec46845..fc10d27f08 100644
--- a/packages/vsftpd/vsftpd_2.0.5.bb
+++ b/packages/vsftpd/vsftpd_2.0.5.bb
@@ -1,12 +1,12 @@
DESCRIPTION = "Secure ftp daemon"
SECTION = "console/network"
LICENSE = "GPL"
-DEPENDS = "openssl"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://vsftpd.beasts.org/users/cevans/vsftpd-${PV}.tar.gz \
file://makefile.patch;patch=1 \
file://nopam.patch;patch=1 \
+ file://syscall.patch;patch=1 \
file://init \
file://vsftpd.conf"
@@ -20,7 +20,7 @@ do_configure() {
}
do_compile() {
- oe_runmake "LIBS=-lssl -lcrypto -lcrypt -L${STAGING_LIBDIR}"
+ oe_runmake "LIBS=-lcrypt -L${STAGING_LIBDIR}"
}
do_install() {
diff --git a/packages/vte/vte_0.11.15.bb b/packages/vte/vte_0.11.15.bb
index 7b1c7c803c..71ca0a04bd 100644
--- a/packages/vte/vte_0.11.15.bb
+++ b/packages/vte/vte_0.11.15.bb
@@ -1,8 +1,14 @@
+DESCRIPTION = "vte is a virtual terminal emulator"
LICENSE = "LGPL"
+PR = "r2"
inherit gnome
+EXTRA_OECONF = "--disable-gtk-doc"
do_stage() {
-autotools_stage_all
+ autotools_stage_all
}
+
+PACKAGES =+ "libvte"
+FILES_libvte = "${libdir}/*.so*"
diff --git a/packages/watchdog/watchdog_5.3.1.bb b/packages/watchdog/watchdog_5.3.1.bb
new file mode 100644
index 0000000000..fd8e756619
--- /dev/null
+++ b/packages/watchdog/watchdog_5.3.1.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "System watchdog daemon"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "http://www.ibiblio.org/pub/Linux/system/daemons/watchdog/${PN}_${PV}.tar.gz"
+
+inherit autotools
+
+FILES = "${sysconfdir}/watchdog.conf ${sbindir}/watchdog"
diff --git a/packages/webcam-server/.mtn2git_empty b/packages/webcam-server/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/webcam-server/.mtn2git_empty
diff --git a/packages/webcam-server/webcam-server_0.50.bb b/packages/webcam-server/webcam-server_0.50.bb
new file mode 100644
index 0000000000..df7873c382
--- /dev/null
+++ b/packages/webcam-server/webcam-server_0.50.bb
@@ -0,0 +1,22 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: Untitled
+# Date: 20070317 (YMD)
+
+DESCRIPTION = "webcam_server is a program that allows others to view your webcam from a web browser."
+HOMEPAGE = "http://webcamserver.sourceforge.net/"
+LICENSE = "GPL"
+
+######################################################################################
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/webcamserver/webcam_server-${PV}.tar.gz"
+
+S = "${WORKDIR}/webcam_server-${PV}"
+
+######################################################################################
+
+inherit autotools
diff --git a/packages/webkit/.mtn2git_empty b/packages/webkit/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/webkit/.mtn2git_empty
diff --git a/packages/webkit/webkit/.mtn2git_empty b/packages/webkit/webkit/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/webkit/webkit/.mtn2git_empty
diff --git a/packages/webkit/webkit/Makefile b/packages/webkit/webkit/Makefile
new file mode 100644
index 0000000000..89344f7a58
--- /dev/null
+++ b/packages/webkit/webkit/Makefile
@@ -0,0 +1,22 @@
+MODULES = JavaScriptCore JavaScriptGlue WebCore WebKit WebKitTools
+
+all:
+ @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \
+ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done
+
+debug d development dev develop:
+ @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \
+ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done
+
+release r deployment dep deploy:
+ @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \
+ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done
+
+universal u:
+ @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \
+ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done
+
+clean:
+ @for dir in $(MODULES); do ${MAKE} $@ -C $$dir; exit_status=$$?; \
+ if [ $$exit_status -ne 0 ]; then exit $$exit_status; fi; done
+
diff --git a/packages/webkit/webkit/Makefile.shared b/packages/webkit/webkit/Makefile.shared
new file mode 100644
index 0000000000..a036aacc50
--- /dev/null
+++ b/packages/webkit/webkit/Makefile.shared
@@ -0,0 +1,21 @@
+SCRIPTS_PATH ?= ../WebKitTools/Scripts
+XCODE_OPTIONS = `perl -I$(SCRIPTS_PATH) -Mwebkitdirs -e 'print XcodeOptionString()'` $(ARGS)
+
+all:
+ ( xcodebuild $(OTHER_OPTIONS) $(XCODE_OPTIONS) | grep -v setenv && exit $${PIPESTATUS[0]} )
+
+debug d development dev develop: force
+ $(SCRIPTS_PATH)/set-webkit-configuration --debug
+ ( xcodebuild $(OTHER_OPTIONS) $(XCODE_OPTIONS) | grep -v setenv && exit $${PIPESTATUS[0]} )
+
+release r deployment dep deploy: force
+ $(SCRIPTS_PATH)/set-webkit-configuration --release
+ ( xcodebuild $(OTHER_OPTIONS) $(XCODE_OPTIONS) | grep -v setenv && exit $${PIPESTATUS[0]} )
+
+universal u: force
+ ( xcodebuild $(OTHER_OPTIONS) $(XCODE_OPTIONS) 'ARCHS=ppc i386' | grep -v setenv && exit $${PIPESTATUS[0]} )
+
+clean:
+ ( xcodebuild $(OTHER_OPTIONS) -alltargets clean $(XCODE_OPTIONS) | grep -v setenv && exit $${PIPESTATUS[0]} )
+
+force: ;
diff --git a/packages/webkit/webkit/WebKit.pri b/packages/webkit/webkit/WebKit.pri
new file mode 100644
index 0000000000..0375102a0c
--- /dev/null
+++ b/packages/webkit/webkit/WebKit.pri
@@ -0,0 +1,61 @@
+# Include file to make it easy to include WebKit into Qt projects
+
+
+isEmpty(OUTPUT_DIR) {
+ CONFIG(release):OUTPUT_DIR=$$PWD/WebKitBuild/Release
+ CONFIG(debug):OUTPUT_DIR=$$PWD/WebKitBuild/Debug
+}
+
+!gdk-port:CONFIG += qt-port
+qt-port:DEFINES += BUILDING_QT__=1
+qt-port:!building-libs:LIBS += -L$$OUTPUT_DIR/lib -lQtWebKit
+gdk-port:CONFIG += link_pkgconfig
+gdk-port:PKGCONFIG += cairo gdk-2.0 gtk+-2.0 libcurl
+gdk-port:DEFINES += BUILDING_GDK__=1 BUILDING_CAIRO__
+gdk-port:LIBS += -L$$OUTPUT_DIR/lib -lWebKitGdk $$system(icu-config --ldflags) -ljpeg -lpng -lcurl
+gdk-port:QMAKE_CXXFLAGS += $$system(icu-config --cppflags)
+
+DEFINES += USE_SYSTEM_MALLOC
+CONFIG(release) {
+ DEFINES += NDEBUG
+}
+
+BASE_DIR = $$PWD
+qt-port:INCLUDEPATH += \
+ $$PWD/WebKitQt/Api
+gdk-port:INCLUDEPATH += \
+ $$BASE_DIR/WebCore/platform/gdk \
+ $$BASE_DIR/WebCore/platform/network/curl \
+ $$BASE_DIR/WebCore/platform/graphics/cairo \
+ $$BASE_DIR/WebCore/loader/gdk \
+ $$BASE_DIR/WebCore/page/gdk \
+ $$BASE_DIR/WebKit/gtk/Api \
+ $$BASE_DIR/WebKit/gtk/WebCoreSupport
+INCLUDEPATH += \
+ $$BASE_DIR/JavaScriptCore/ \
+ $$BASE_DIR/JavaScriptCore/kjs \
+ $$BASE_DIR/JavaScriptCore/bindings \
+ $$BASE_DIR/JavaScriptCore/bindings/c \
+ $$BASE_DIR/JavaScriptCore/wtf \
+ $$BASE_DIR/JavaScriptCore/ForwardingHeaders \
+ $$BASE_DIR/WebCore \
+ $$BASE_DIR/WebCore/ForwardingHeaders \
+ $$BASE_DIR/WebCore/platform \
+ $$BASE_DIR/WebCore/platform/network \
+ $$BASE_DIR/WebCore/platform/graphics \
+ $$BASE_DIR/WebCore/loader \
+ $$BASE_DIR/WebCore/page \
+ $$BASE_DIR/WebCore/css \
+ $$BASE_DIR/WebCore/dom \
+ $$BASE_DIR/WebCore/bridge \
+ $$BASE_DIR/WebCore/editing \
+ $$BASE_DIR/WebCore/rendering \
+ $$BASE_DIR/WebCore/history \
+ $$BASE_DIR/WebCore/xml \
+ $$BASE_DIR/WebCore/html
+
+
+macx {
+ INCLUDEPATH += /usr/include/libxml2
+ LIBS += -lxml2 -lxslt
+}
diff --git a/packages/webkit/webkit/WebKit.pro b/packages/webkit/webkit/WebKit.pro
new file mode 100644
index 0000000000..335d11e6e7
--- /dev/null
+++ b/packages/webkit/webkit/WebKit.pro
@@ -0,0 +1,13 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+!gdk-port:CONFIG += qt-port
+qt-port:SUBDIRS += WebKitQt/Plugins
+SUBDIRS += \
+ WebCore \
+ JavaScriptCore/kjs/testkjs.pro
+
+qt-port:SUBDIRS += \
+ WebKitQt/QtLauncher \
+ WebKitTools/DumpRenderTree/DumpRenderTree.qtproj/DumpRenderTree.pro
+gdk-port:SUBDIRS += \
+ WebKitTools/GdkLauncher
diff --git a/packages/webkit/webkit_svn.bb b/packages/webkit/webkit_svn.bb
new file mode 100644
index 0000000000..8a6480d54f
--- /dev/null
+++ b/packages/webkit/webkit_svn.bb
@@ -0,0 +1,64 @@
+DEPENDS = "flex-native gperf-native gperf perl-native curl icu uicmoc4-native qmake2-native libxml2 sqlite3 cairo libxslt libidn gnutls gtk+"
+
+# Yes, this is wrong...
+PV = "0.0+svn${SRCDATE}"
+PR = "r1"
+
+inherit qmake qt4x11 pkgconfig
+
+SRC_URI = "\
+ svn://svn.webkit.org/repository/webkit/trunk/;module=JavaScriptCore;proto=http \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=JavaScriptGlue;proto=http \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=WebCore;proto=http \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=WebKit;proto=http \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=WebKitLibraries;proto=http \
+# svn://svn.webkit.org/repository/webkit/trunk/;module=WebKitQt;proto=http \
+ svn://svn.webkit.org/repository/webkit/trunk/;module=WebKitTools;proto=http \
+ file://Makefile \
+ file://Makefile.shared \
+ file://WebKit.pri \
+ file://WebKit.pro \
+"
+S = "${WORKDIR}/"
+
+do_configure_append() {
+ qmake2 -spec ${QMAKESPEC} CONFIG+=gdk-port CONFIG-=qt CONFIG-=release CONFIG+=debug
+ mkdir -p WebKitBuilds/Debug
+ cd WebKitBuilds/Debug
+ PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \
+ WEBKIT_INC_DIR=${prefix}/include WEBKIT_LIB_DIR=${libdir}
+}
+
+do_compile_prepend() {
+ mkdir -p ${S}/WebKitBuilds/Debug/JavaScriptCore/pcre/tmp/
+ cd ${S}/JavaScriptCore/pcre
+ ${BUILD_CC} dftables.c -o dftables -I. -I../wtf
+ cp dftables ${S}/WebKitBuilds/Debug/JavaScriptCore/pcre/tmp/
+ cd ${S}/WebKitBuilds/Debug
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${libdir}
+ install -d ${D}${libdir}/pkgconfig
+
+ install -m 0755 ${S}/WebKitBuilds/Debug/WebKitTools/GdkLauncher/GdkLauncher ${D}${bindir}
+ cd ${S}/WebKitBuilds/Debug
+ PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \
+ WEBKIT_INC_DIR=${D}${prefix}/include WEBKIT_LIB_DIR=${D}${libdir}
+ oe_runmake install
+}
+
+do_stage() {
+ install -d ${STAGING_LIBDIR}
+ install -d ${STAGING_INCDIR}
+ cd ${S}/WebKitBuilds/Debug
+ PWD=`pwd` qmake2 -spec ${QMAKESPEC} -r OUTPUT_DIR=$PWD/ CONFIG-=qt CONFIG+=gdk-port $PWD/../../WebKit.pro \
+ WEBKIT_INC_DIR=${STAGING_INCDIR} WEBKIT_LIB_DIR=${STAGING_LIBDIR}
+ oe_runmake install
+}
+
+PACKAGES =+ "webkit-gdklauncher-dbg webkit-gdklauncher"
+
+FILES_webkit-gdklauncher = "${bindir}/GdkLauncher"
+FILES_webkit-gdklauncher-dbg = "${bindir}/.debug/GdkLauncher"
diff --git a/packages/wget/wget-1.9.1/ipv6-fix.patch b/packages/wget/wget-1.9.1/ipv6-fix.patch
new file mode 100644
index 0000000000..315dd25c00
--- /dev/null
+++ b/packages/wget/wget-1.9.1/ipv6-fix.patch
@@ -0,0 +1,31 @@
+If the kernel has IPv6 support then wget tries to create sockets using
+AF_INET6 and then gets an EAFNOSUPPORT error, which it treats as a
+connection failure, resulting in wget not being able to work. This patch
+makes it switch it's default protocol to IPv4 when it sees that IPv6 isn't
+supported in the kernel.
+
+Index: wget-1.9.1/src/connect.c
+===================================================================
+--- wget-1.9.1.orig/src/connect.c 2003-11-02 01:08:22.000000000 +1100
++++ wget-1.9.1/src/connect.c 2007-06-02 01:39:55.000000000 +1000
+@@ -244,12 +244,20 @@
+ {
+ ip_address addr;
+ int sock;
++retry:
+ address_list_copy_one (al, i, &addr);
+
+ sock = connect_to_one (&addr, port, silent);
+ if (sock >= 0)
+ /* Success. */
+ return sock;
++
++ if (errno == EAFNOSUPPORT && ip_default_family == AF_INET6)
++ {
++ DEBUGP (("No IPv6 support, changing default to IPv4.\n"));
++ ip_default_family = AF_INET;
++ goto retry;
++ }
+
+ address_list_set_faulty (al, i);
+
diff --git a/packages/wget/wget_1.9.1.bb b/packages/wget/wget_1.9.1.bb
index 2e576bd2e4..d3858e4e47 100644
--- a/packages/wget/wget_1.9.1.bb
+++ b/packages/wget/wget_1.9.1.bb
@@ -1,12 +1,13 @@
DESCRIPTION = "A console URL download utility featuring HTTP, FTP, and more."
SECTION = "console/network"
DEPENDS = ""
-PR = "r6"
+PR = "r7"
LICENSE = "GPL"
SRC_URI = "${GNU_MIRROR}/wget/wget-${PV}.tar.gz \
file://m4macros.patch;patch=1 \
- file://autotools.patch;patch=1"
+ file://autotools.patch;patch=1 \
+ file://ipv6-fix.patch;patch=1"
S = "${WORKDIR}/wget-${PV}"
inherit autotools gettext
diff --git a/packages/wifi-radar/wifi-radar_1.9.6.bb b/packages/wifi-radar/wifi-radar_1.9.6.bb
index 70e913e086..59d24b9d74 100644
--- a/packages/wifi-radar/wifi-radar_1.9.6.bb
+++ b/packages/wifi-radar/wifi-radar_1.9.6.bb
@@ -3,9 +3,11 @@ DESCRIPTION="WiFi Radar is a Python/PyGTK2 utility for managing WiFi profiles."
HOMEPAGE="http://www.bitbuilder.com/wifi_radar/"
LICENSE = "GPL"
+PR = "r1"
+
PACKAGE_ARCH = "all"
-RDEPENDS = "python-core python-pygtk2 python-re python-io"
+RDEPENDS = "python-core python-pygtk2 python-re python-io python-pygobject python-pycairo"
SRC_URI="http://wifi-radar.systemimager.org/pub/${PN}-${PV}.tar.bz2 \
file://wifi-radar.patch;patch=1 \
diff --git a/packages/wireless-tools/wireless-tools.inc b/packages/wireless-tools/wireless-tools.inc
new file mode 100644
index 0000000000..857f63c91b
--- /dev/null
+++ b/packages/wireless-tools/wireless-tools.inc
@@ -0,0 +1,36 @@
+DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
+HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
+SECTION = "base"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "file://man.patch;patch=1 \
+ file://wireless-tools.if-pre-up"
+
+CFLAGS =+ "-I${S}"
+EXTRA_OEMAKE = "-e 'BUILD_SHARED=y' \
+ 'INSTALL_DIR=${D}${base_sbindir}' \
+ 'INSTALL_LIB=${D}${libdir}' \
+ 'INSTALL_INC=${D}${includedir}' \
+ 'INSTALL_MAN=${D}${mandir}'"
+
+do_compile() {
+ oe_runmake all libiw.a
+}
+
+do_stage() {
+ install -m 0644 wireless.h ${STAGING_INCDIR}/
+ install -m 0644 iwlib.h ${STAGING_INCDIR}/
+ oe_libinstall -a -so libiw ${STAGING_LIBDIR}/
+}
+
+PACKAGES += "libiw libiw-dev libiw-doc libiw-dbg ifrename ifrename-dbg ifrename-doc"
+FILES_libiw += "${libdir}/*.so.*"
+FILES_libiw-dbg += "${libdir}/.debug/*.so.*"
+FILES_libiw-dev += "${libdir}/*.a ${libdir}/*.so ${includedir}"
+FILES_libiw-doc += "${mandir}/man7"
+FILES_ifrename += "${sbindir}/ifrename"
+FILES_ifrename-dbg += "${sbindir}/.debug/ifrename"
+FILES_ifrename-doc += "${mandir}/man8/ifrename.8 ${mandir}/man5/iftab.5"
+FILES_${PN} += "${bindir} ${sbindir}/iw* ${base_sbindir} ${base_bindir} ${sysconfdir}/network"
+FILES_${PN}-doc += "${mandir}/man8"
diff --git a/packages/wireless-tools/wireless-tools_26.bb b/packages/wireless-tools/wireless-tools_26.bb
deleted file mode 100644
index 4a478663e6..0000000000
--- a/packages/wireless-tools/wireless-tools_26.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
-HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
-PR = "r6"
-
-SRC_URI = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.${PV}.tar.gz \
- file://man.patch;patch=1 \
- file://wireless-tools.if-pre-up"
-S = "${WORKDIR}/wireless_tools.${PV}"
-
-inherit module-base
-
-do_configure() {
- rm -f wireless.h
-}
-
-do_compile() {
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- oe_runmake KERNEL_SRC=${KERNEL_SOURCE} KERNEL_VERSION=${KERNEL_VERSION} BUILD_SHARED=y
-}
-
-do_install() {
- oe_runmake PREFIX=${D} install
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
-}
-
-FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* \
- ${sysconfdir} ${sharedstatedir} ${localstatedir} \
- /bin /sbin /lib/*.so* ${datadir}/${PN} ${libdir}/${PN} \
- /etc/network"
diff --git a/packages/wireless-tools/wireless-tools_27.bb b/packages/wireless-tools/wireless-tools_27.bb
deleted file mode 100644
index c26e40cf3c..0000000000
--- a/packages/wireless-tools/wireless-tools_27.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
-HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
-SECTION = "base"
-PRIORITY = "optional"
-#DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.${PV}.tar.gz \
- file://man.patch;patch=1 \
- file://fixheaders.patch;patch=1 \
- file://wireless-tools.if-pre-up"
-S = "${WORKDIR}/wireless_tools.${PV}"
-
-CFLAGS =+ "-I${S}"
-EXTRA_OEMAKE = "-e 'BUILD_SHARED=y' \
- 'INSTALL_DIR=${D}${base_sbindir}' \
- 'INSTALL_LIB=${D}${libdir}' \
- 'INSTALL_INC=${D}${includedir}' \
- 'INSTALL_MAN=${D}${mandir}'"
-
-do_compile() {
- oe_runmake all libiw.a
-}
-
-do_stage () {
- install -m 0644 wireless.h ${STAGING_INCDIR}/
- install -m 0644 iwlib.h ${STAGING_INCDIR}/
- oe_libinstall -a -so libiw ${STAGING_LIBDIR}/
-}
-
-do_install() {
- oe_runmake PREFIX=${D} install install-static
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
-}
-
-PACKAGES = "libiw libiw-dev libiw-doc ${PN} ${PN}-doc"
-FILES_libiw = "${libdir}/*.so.*"
-FILES_libiw-dev = "${libdir}/*.a ${libdir}/*.so ${includedir}"
-FILES_libiw-doc = "${mandir}/man7"
-FILES_${PN} = "${bindir} ${sbindir} ${base_sbindir} ${base_bindir} ${sysconfdir}/network"
-FILES_${PN}-doc = "${mandir}/man8"
diff --git a/packages/wireless-tools/wireless-tools_28+29pre10.bb b/packages/wireless-tools/wireless-tools_28+29pre10.bb
new file mode 100644
index 0000000000..cf519cd9f1
--- /dev/null
+++ b/packages/wireless-tools/wireless-tools_28+29pre10.bb
@@ -0,0 +1,14 @@
+require wireless-tools.inc
+
+PR = "r3"
+
+SRC_URI += "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.pre10.tar.gz"
+S = "${WORKDIR}/wireless_tools.29"
+
+do_install() {
+ oe_runmake PREFIX=${D} install-iwmulticall install-dynamic install-man install-hdr
+ install -d ${D}${sbindir}
+ install -m 0755 ifrename ${D}${sbindir}/ifrename
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
+}
diff --git a/packages/wireless-tools/wireless-tools_28+29pre21.bb b/packages/wireless-tools/wireless-tools_28+29pre21.bb
new file mode 100644
index 0000000000..b42af6fee2
--- /dev/null
+++ b/packages/wireless-tools/wireless-tools_28+29pre21.bb
@@ -0,0 +1,14 @@
+require wireless-tools.inc
+
+SRC_URI += "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.pre21.tar.gz \
+ file://zzz-wireless.if-pre-up"
+S = "${WORKDIR}/wireless_tools.29"
+
+do_install() {
+ oe_runmake PREFIX=${D} install-iwmulticall install-dynamic install-man install-hdr
+ install -d ${D}${sbindir}
+ install -m 0755 ifrename ${D}${sbindir}/ifrename
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
+ install ${WORKDIR}/zzz-wireless.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/zzz-wireless
+}
diff --git a/packages/wireless-tools/wireless-tools_28-pre13.bb b/packages/wireless-tools/wireless-tools_28-pre13.bb
deleted file mode 100644
index 170f67deeb..0000000000
--- a/packages/wireless-tools/wireless-tools_28-pre13.bb
+++ /dev/null
@@ -1,43 +0,0 @@
-DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
-HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
-SECTION = "base"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.28.pre13.tar.gz \
- file://man.patch;patch=1 \
- file://wireless-tools.if-pre-up \
- file://zzz-wireless.if-pre-up"
-S = "${WORKDIR}/wireless_tools.28"
-
-CFLAGS =+ "-I${S}"
-EXTRA_OEMAKE = "-e 'BUILD_SHARED=y' \
- 'INSTALL_DIR=${D}${base_sbindir}' \
- 'INSTALL_LIB=${D}${libdir}' \
- 'INSTALL_INC=${D}${includedir}' \
- 'INSTALL_MAN=${D}${mandir}'"
-
-do_compile() {
- oe_runmake all libiw.a
-}
-
-do_stage() {
- install -m 0644 wireless.h ${STAGING_INCDIR}/
- install -m 0644 iwlib.h ${STAGING_INCDIR}/
- oe_libinstall -a -so libiw ${STAGING_LIBDIR}/
-}
-
-do_install() {
- oe_runmake PREFIX=${D} install-iwmulticall install-dynamic
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
- install ${WORKDIR}/zzz-wireless.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/zzz-wireless
-}
-
-PACKAGES = "libiw libiw-dev libiw-doc ${PN} ${PN}-doc"
-FILES_libiw = "${libdir}/*.so.*"
-FILES_libiw-dev = "${libdir}/*.a ${libdir}/*.so ${includedir}"
-FILES_libiw-doc = "${mandir}/man7"
-FILES_${PN} = "${bindir} ${sbindir} ${base_sbindir} ${base_bindir} ${sysconfdir}/network"
-FILES_${PN}-doc = "${mandir}/man8"
diff --git a/packages/wireless-tools/wireless-tools_28.bb b/packages/wireless-tools/wireless-tools_28.bb
new file mode 100644
index 0000000000..92a49daae2
--- /dev/null
+++ b/packages/wireless-tools/wireless-tools_28.bb
@@ -0,0 +1,14 @@
+require wireless-tools.inc
+
+PR = "r1"
+
+SRC_URI += "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.28.pre13.tar.gz \
+ file://zzz-wireless.if-pre-up"
+S = "${WORKDIR}/wireless_tools.28"
+
+do_install() {
+ oe_runmake PREFIX=${D} install-iwmulticall install-dynamic
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
+ install ${WORKDIR}/zzz-wireless.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/zzz-wireless
+}
diff --git a/packages/wireless-tools/wireless-tools_29-pre10.bb b/packages/wireless-tools/wireless-tools_29-pre10.bb
deleted file mode 100644
index febe662602..0000000000
--- a/packages/wireless-tools/wireless-tools_29-pre10.bb
+++ /dev/null
@@ -1,45 +0,0 @@
-DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
-HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
-SECTION = "base"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PR = "r2"
-
-SRC_URI = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.pre10.tar.gz \
- file://man.patch;patch=1 \
- file://wireless-tools.if-pre-up"
-
-S = "${WORKDIR}/wireless_tools.29"
-
-CFLAGS =+ "-I${S}"
-EXTRA_OEMAKE = "-e 'BUILD_SHARED=y' \
- 'INSTALL_DIR=${D}${base_sbindir}' \
- 'INSTALL_LIB=${D}${libdir}' \
- 'INSTALL_INC=${D}${includedir}' \
- 'INSTALL_MAN=${D}${mandir}'"
-
-do_compile() {
- oe_runmake all libiw.a
-}
-
-do_stage() {
- install -m 0644 wireless.h ${STAGING_INCDIR}/
- install -m 0644 iwlib.h ${STAGING_INCDIR}/
- oe_libinstall -a -so libiw ${STAGING_LIBDIR}/
-}
-
-do_install() {
- oe_runmake PREFIX=${D} install-iwmulticall install-dynamic install-man install-hdr
- install -d ${D}${sbindir}
- install -m 0755 ifrename ${D}${sbindir}/ifrename
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
-}
-
-PACKAGES = "libiw libiw-dev libiw-doc ifrename ${PN} ${PN}-doc ${PN}-dbg "
-FILES_libiw = "${libdir}/*.so.*"
-FILES_libiw-dev = "${libdir}/*.a ${libdir}/*.so ${includedir}"
-FILES_libiw-doc = "${mandir}/man7"
-FILES_ifrename = "${sbindir}/ifrename"
-FILES_${PN} = "${bindir} ${sbindir}/iw* ${base_sbindir} ${base_bindir} ${sysconfdir}/network"
-FILES_${PN}-doc = "${mandir}/man8"
diff --git a/packages/wireshark/wireshark_0.99.4.bb b/packages/wireshark/wireshark_0.99.4.bb
index 5b1fa72a1b..e34ca849d4 100644
--- a/packages/wireshark/wireshark_0.99.4.bb
+++ b/packages/wireshark/wireshark_0.99.4.bb
@@ -4,6 +4,8 @@ SECTION = "x11/network"
LICENSE = "GPL"
DEPENDS = "perl-native gtk+ gnutls libpcap pcre expat"
+PR = "r1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${PN}-${PV}.tar.bz2 \
file://use-our-lemon.patch;patch=1 \
file://no-host-includes.patch;patch=1"
@@ -14,3 +16,7 @@ do_compile_prepend() {
${BUILD_CC} ${BUILD_CFLAGS} -o rdps rdps.c
oe_runmake -C tools/lemon CC="${BUILD_CC} ${BUILD_CFLAGS}" LDFLAGS="${BUILD_LDFLAGS}"
}
+
+FILES_${PN}-dbg += "${libdir}/wireshark/plugins/${PV}/.debug"
+
+
diff --git a/packages/wlan-ng/wlan-ng-utils.inc b/packages/wlan-ng/wlan-ng-utils.inc
new file mode 100644
index 0000000000..fe00e161d3
--- /dev/null
+++ b/packages/wlan-ng/wlan-ng-utils.inc
@@ -0,0 +1,68 @@
+DESCRIPTION = "linux-wlan-ng userland utilities"
+HOMEPAGE = "http://www.linux-wlan.org"
+SECTION = "kernel/userland"
+LICENSE = "GPL"
+DEPENDS = "virtual/kernel"
+S = "${WORKDIR}/linux-wlan-ng-${PV}"
+
+SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
+ file://only-the-utils.patch;patch=1 \
+ file://wlan-ng.modutils \
+ file://wlan.agent \
+ file://usbctl \
+ file://resume \
+ file://pre-up \
+ file://post-down \
+ file://config.in"
+
+# yeah, it's kind of backwards, but otherwise the config step will fail
+inherit module
+
+do_configure() {
+ install -m 0655 ${WORKDIR}/config.in ${S}/config.in
+ oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
+
+ if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
+ echo "PRISM2_PCMCIA=y" >> config.mk
+ echo "WLAN_KERN_PCMCIA=y" >> config.mk
+ fi
+ echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
+ echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
+ echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
+ echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
+ echo "RC_DIR=${sysconfdir}/" >> config.mk
+ echo "CC=${CC}" >> config.mk
+ echo "LD=${LD}" >> config.mk
+
+ # Shut up, you broken buildsystem
+ install -m 0655 config.mk src/prism2/config.mk
+ install -d src/prism2/driver/include
+ ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
+ ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
+}
+
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ oe_runmake install
+ mkdir -p ${D}${sysconfdir}/modutils/
+ mkdir -p ${D}${sysconfdir}/hotplug/
+ mkdir -p ${D}${base_sbindir}/
+ install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
+ install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
+ install -d ${D}${sysconfdir}/network/if-post-down.d
+ install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
+ install -d ${D}${sysconfdir}/apm/resume.d
+ install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
+ install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
+ install -d ${D}${mandir}/man1
+ install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
+}
+
+FILES_${PN}-doc += "/usr/local/man"
+FILES_${PN}-dbg += "/sbin/.debug"
+FILES_${PN} = "/etc /sbin"
diff --git a/packages/wlan-ng/wlan-ng-utils_0.2.1-pre26.bb b/packages/wlan-ng/wlan-ng-utils_0.2.1-pre26.bb
index 7fd9844e7d..9ac5348a98 100644
--- a/packages/wlan-ng/wlan-ng-utils_0.2.1-pre26.bb
+++ b/packages/wlan-ng/wlan-ng-utils_0.2.1-pre26.bb
@@ -1,67 +1,3 @@
-DESCRIPTION = "linux-wlan-ng userland utilities"
-HOMEPAGE = "http://www.linux-wlan.org"
-SECTION = "kernel/userland"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
- file://only-the-utils.patch;patch=1 \
- file://wlan-ng.modutils \
- file://wlan.agent \
- file://usbctl \
- file://resume \
- file://pre-up \
- file://post-down \
- file://config.in"
-S = "${WORKDIR}/linux-wlan-ng-${PV}"
-
-# yeah, it's kind of backwards, but otherwise the config step will fail
-inherit module
-
-do_configure() {
- install -m 0655 ${WORKDIR}/config.in ${S}/config.in
- oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
-
- if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
- echo "PRISM2_PCMCIA=y" >> config.mk
- echo "WLAN_KERN_PCMCIA=y" >> config.mk
- fi
- echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
- echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
- echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
- echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
- echo "RC_DIR=${sysconfdir}/" >> config.mk
- echo "CC=${CC}" >> config.mk
- echo "LD=${LD}" >> config.mk
+require wlan-ng-utils.inc
- # Shut up, you broken buildsystem
- install -m 0655 config.mk src/prism2/config.mk
- install -d src/prism2/driver/include
- ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
- ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
-}
-
-do_compile() {
- oe_runmake all
-}
-
-do_install() {
- oe_runmake install
- mkdir -p ${D}${sysconfdir}/modutils/
- mkdir -p ${D}${sysconfdir}/hotplug/
- mkdir -p ${D}${base_sbindir}/
- install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
- install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
- install -d ${D}${sysconfdir}/network/if-post-down.d
- install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
- install -d ${D}${sysconfdir}/apm/resume.d
- install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
- install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
- install -d ${D}${mandir}/man1
- install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
-}
-
-FILES_${PN} = "/etc /sbin"
+PR = "r1"
diff --git a/packages/wlan-ng/wlan-ng-utils_0.2.3.bb b/packages/wlan-ng/wlan-ng-utils_0.2.3.bb
index 6206bbbbf5..d4e0a39c70 100644
--- a/packages/wlan-ng/wlan-ng-utils_0.2.3.bb
+++ b/packages/wlan-ng/wlan-ng-utils_0.2.3.bb
@@ -1,70 +1,7 @@
-DESCRIPTION = "linux-wlan-ng userland utilities"
-HOMEPAGE = "http://www.linux-wlan.org"
-SECTION = "kernel/userland"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
+require wlan-ng-utils.inc
+
PR = "r2"
-SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
- file://only-the-utils.patch;patch=1 \
- file://scripts-makefile-hostcc.patch;patch=1 \
+SRC_URI += "file://scripts-makefile-hostcc.patch;patch=1 \
file://pcmciasrc.patch;patch=1 \
- file://hostldflags.patch;patch=1 \
- file://wlan-ng.modutils \
- file://wlan.agent \
- file://usbctl \
- file://resume \
- file://pre-up \
- file://post-down \
- file://config.in"
-S = "${WORKDIR}/linux-wlan-ng-${PV}"
-
-# yeah, it's kind of backwards, but otherwise the config step will fail
-inherit module
-
-do_configure() {
- install -m 0655 ${WORKDIR}/config.in ${S}/config.in
- oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
-
- if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
- echo "PRISM2_PCMCIA=y" >> config.mk
- echo "WLAN_KERN_PCMCIA=y" >> config.mk
- fi
- echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
- echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
- echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
- echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
- echo "RC_DIR=${sysconfdir}/" >> config.mk
- echo "CC=${CC}" >> config.mk
- echo "LD=${LD}" >> config.mk
-
- # Shut up, you broken buildsystem
- install -m 0655 config.mk src/prism2/config.mk
- install -d src/prism2/driver/include
- ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
- ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
-}
-
-do_compile() {
- oe_runmake all
-}
-
-do_install() {
- oe_runmake install
- mkdir -p ${D}${sysconfdir}/modutils/
- mkdir -p ${D}${sysconfdir}/hotplug/
- mkdir -p ${D}${base_sbindir}/
- install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
- install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
- install -d ${D}${sysconfdir}/network/if-post-down.d
- install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
- install -d ${D}${sysconfdir}/apm/resume.d
- install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
- install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
- install -d ${D}${mandir}/man1
- install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
-}
-
-FILES_${PN} = "/etc /sbin"
+ file://hostldflags.patch;patch=1"
diff --git a/packages/wlan-ng/wlan-ng-utils_0.2.4+svn20060823.bb b/packages/wlan-ng/wlan-ng-utils_0.2.4+svn20060823.bb
index 27cb04e97f..f71a2ee34a 100644
--- a/packages/wlan-ng/wlan-ng-utils_0.2.4+svn20060823.bb
+++ b/packages/wlan-ng/wlan-ng-utils_0.2.4+svn20060823.bb
@@ -1,8 +1,4 @@
-DESCRIPTION = "linux-wlan-ng userland utilities"
-HOMEPAGE = "http://www.linux-wlan.org"
-SECTION = "kernel/userland"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
+require wlan-ng-utils.inc
SRCDATE = "20060823"
PV = "0.2.4+svn${SRCDATE}"
@@ -20,53 +16,3 @@ SRC_URI = "svn://svn.shaftnet.org/linux-wlan-ng;module=trunk \
file://post-down \
file://config.in"
S = "${WORKDIR}/trunk"
-
-# yeah, it's kind of backwards, but otherwise the config step will fail
-inherit module
-
-do_configure() {
- install -m 0655 ${WORKDIR}/config.in ${S}/config.in
- oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
-
- if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
- echo "PRISM2_PCMCIA=y" >> config.mk
- echo "WLAN_KERN_PCMCIA=y" >> config.mk
- fi
- echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
- echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
- echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
- echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
- echo "RC_DIR=${sysconfdir}/" >> config.mk
- echo "CC=${CC}" >> config.mk
- echo "LD=${LD}" >> config.mk
-
- # Shut up, you broken buildsystem
- install -m 0655 config.mk src/prism2/config.mk
- install -d src/prism2/driver/include
- ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
- ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
-}
-
-do_compile() {
- oe_runmake all
-}
-
-do_install() {
- oe_runmake install
- mkdir -p ${D}${sysconfdir}/modutils/
- mkdir -p ${D}${sysconfdir}/hotplug/
- mkdir -p ${D}${base_sbindir}/
- install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
- install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
- install -d ${D}${sysconfdir}/network/if-post-down.d
- install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
- install -d ${D}${sysconfdir}/apm/resume.d
- install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
- install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
- install -d ${D}${mandir}/man1
- install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
-}
-
-FILES_${PN} = "/etc /sbin"
diff --git a/packages/wlan-ng/wlan-ng-utils_0.2.7.bb b/packages/wlan-ng/wlan-ng-utils_0.2.7.bb
index 929f67fe16..0b6f33e380 100644
--- a/packages/wlan-ng/wlan-ng-utils_0.2.7.bb
+++ b/packages/wlan-ng/wlan-ng-utils_0.2.7.bb
@@ -1,69 +1,7 @@
-DESCRIPTION = "linux-wlan-ng userland utilities"
-HOMEPAGE = "http://www.linux-wlan.org"
-SECTION = "kernel/userland"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
+require wlan-ng-utils.inc
-SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
- file://only-the-utils.patch;patch=1 \
- file://scripts-makefile-hostcc.patch;patch=1 \
+SRC_URI += "file://scripts-makefile-hostcc.patch;patch=1 \
file://pcmciasrc.patch;patch=1 \
- file://hostldflags.patch;patch=1 \
- file://wlan-ng.modutils \
- file://wlan.agent \
- file://usbctl \
- file://resume \
- file://pre-up \
- file://post-down \
- file://config.in"
-S = "${WORKDIR}/linux-wlan-ng-${PV}"
+ file://hostldflags.patch;patch=1"
-# yeah, it's kind of backwards, but otherwise the config step will fail
-inherit module
-
-do_configure() {
- install -m 0655 ${WORKDIR}/config.in ${S}/config.in
- oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
-
- if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
- echo "PRISM2_PCMCIA=y" >> config.mk
- echo "WLAN_KERN_PCMCIA=y" >> config.mk
- fi
- echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
- echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
- echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
- echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
- echo "RC_DIR=${sysconfdir}/" >> config.mk
- echo "CC=${CC}" >> config.mk
- echo "LD=${LD}" >> config.mk
-
- # Shut up, you broken buildsystem
- install -m 0655 config.mk src/prism2/config.mk
- install -d src/prism2/driver/include
- ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
- ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
-}
-
-do_compile() {
- oe_runmake all
-}
-
-do_install() {
- oe_runmake install
- mkdir -p ${D}${sysconfdir}/modutils/
- mkdir -p ${D}${sysconfdir}/hotplug/
- mkdir -p ${D}${base_sbindir}/
- install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
- install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
- install -d ${D}${sysconfdir}/network/if-post-down.d
- install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
- install -d ${D}${sysconfdir}/apm/resume.d
- install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
- install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
- install -d ${D}${mandir}/man1
- install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
-}
-
-FILES_${PN} = "/etc /sbin"
+PR = "r1"
diff --git a/packages/wlan-ng/wlan-ng-utils_svn.bb b/packages/wlan-ng/wlan-ng-utils_svn.bb
index c85779abc2..fae48545ff 100644
--- a/packages/wlan-ng/wlan-ng-utils_svn.bb
+++ b/packages/wlan-ng/wlan-ng-utils_svn.bb
@@ -1,8 +1,5 @@
-DESCRIPTION = "linux-wlan-ng userland utilities"
-HOMEPAGE = "http://www.linux-wlan.org"
-SECTION = "kernel/userland"
-DEPENDS = "virtual/kernel"
-LICENSE = "GPL"
+require wlan-ng-utils.inc
+
PR = "r2"
PV = "0.2.4+svn${SRCDATE}"
@@ -20,54 +17,6 @@ SRC_URI = "svn://svn.shaftnet.org/linux-wlan-ng;module=trunk \
file://config.in"
S = "${WORKDIR}/trunk"
-# yeah, it's kind of backwards, but otherwise the config step will fail
-inherit module
-
-do_configure() {
- install -m 0655 ${WORKDIR}/config.in ${S}/config.in
- oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
-
- if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
- echo "PRISM2_PCMCIA=y" >> config.mk
- echo "WLAN_KERN_PCMCIA=y" >> config.mk
- fi
- echo "TARGET_ROOT_ON_HOST=${D}/" >> config.mk
- echo "FIRMWARE_DIR=/etc/wlan" >> config.mk
- echo "TARGET_MODDIR=${D}/lib/modules/${KERNEL_VERSION}/wlan-ng" >> config.mk
- echo "TARGET_INST_EXEDIR=${D}/sbin" >> config.mk
- echo "RC_DIR=${sysconfdir}/" >> config.mk
- echo "CC=${CC}" >> config.mk
- echo "LD=${LD}" >> config.mk
-
- # Shut up, you broken buildsystem
- install -m 0655 config.mk src/prism2/config.mk
- install -d src/prism2/driver/include
- ln -sf ${S}/src/include/wlan src/prism2/driver/include/wlan
- ln -sf ${S}/src/prism2/include/prism2 src/prism2/driver/include/prism2
-}
-
-do_compile() {
- oe_runmake all
-}
-
-do_install() {
- oe_runmake install
- mkdir -p ${D}${sysconfdir}/modutils/
- mkdir -p ${D}${sysconfdir}/hotplug/
- mkdir -p ${D}${base_sbindir}/
- install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
- install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
- install -d ${D}${sysconfdir}/network/if-pre-up.d
- install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
- install -d ${D}${sysconfdir}/network/if-post-down.d
- install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
- install -d ${D}${sysconfdir}/apm/resume.d
- install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
- install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
- install -d ${D}${mandir}/man1
- install -m 0644 ${S}/man/*.1 ${D}${mandir}/man1/
-}
-
FILES_${PN} = "/etc /sbin"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/wpa-supplicant/files/functions.sh b/packages/wpa-supplicant/files/functions.sh
new file mode 100755
index 0000000000..5132fbbca4
--- /dev/null
+++ b/packages/wpa-supplicant/files/functions.sh
@@ -0,0 +1,841 @@
+#!/bin/sh
+
+# Copyright (C) 2006 Debian/Ubuntu wpasupplicant Maintainers
+# <pkg-wpa-devel@lists.alioth.debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# On Debian GNU/Linux systems, the text of the GPL license can be
+# found in /usr/share/common-licenses/GPL.
+
+#####################################################################
+## global variables
+# wpa_supplicant variables
+WPA_SUP_BIN="/usr/sbin/wpa_supplicant"
+WPA_SUP_PNAME="wpa_supplicant"
+WPA_SUP_PIDFILE="/var/run/wpa_supplicant.$WPA_IFACE.pid"
+
+# wpa_cli variables
+WPA_CLI_BIN="/usr/sbin/wpa_cli"
+WPA_CLI_PNAME="wpa_cli"
+WPA_CLI_PIDFILE="/var/run/wpa_action.$WPA_IFACE.pid"
+WPA_CLI_LOGFILE="/var/log/wpa_action.log"
+WPA_CLI_TIMESTAMP="/var/run/wpa_action.$WPA_IFACE.timestamp"
+
+# default ctrl_interface socket directory
+if [ -z "$WPA_CTRL_DIR" ]; then
+ WPA_CTRL_DIR="/var/run/wpa_supplicant"
+fi
+
+# verbosity variables
+if [ -n "$IF_WPA_VERBOSITY" ] || [ "$VERBOSITY" = "1" ]; then
+ TO_NULL="/dev/stdout"
+ DAEMON_VERBOSITY="--verbose"
+else
+ TO_NULL="/dev/null"
+ DAEMON_VERBOSITY="--quiet"
+fi
+
+#####################################################################
+## wpa_cli wrapper
+# Path to common ctrl_interface socket and iface supplied.
+# NB: WPA_CTRL_DIR cannot be used for interactive commands.
+#
+wpa_cli () {
+ $WPA_CLI_BIN -p $WPA_CTRL_DIR -i $WPA_IFACE "$@"
+}
+
+#####################################################################
+## verbose and stderr message wrapper
+# Ensures a standard and easily identifiable message is printed by
+# scripts using this function library.
+#
+# verbose To stdout when IF_WPA_VERBOSITY or VERBOSITY is true
+#
+# action Same as verbose but without newline
+# Useful for allowing wpa_cli commands to echo result
+# value of 'OK' or 'FAILED'
+#
+# stderr Echo warning or error messages to stderr
+#
+# NB: when called by wpa_action, there is no redirection (verbose)
+#
+wpa_msg () {
+
+ if [ -n "$WPA_ACTION" ]; then
+ shift
+ echo "wpa_action: $@"
+ return
+ fi
+
+ case "$1" in
+ "verbose")
+ shift
+ echo "$WPA_SUP_PNAME: $@" >$TO_NULL
+ ;;
+ "action")
+ shift
+ echo -n "$WPA_SUP_PNAME: $@ -- " >$TO_NULL
+ ;;
+ "stderr")
+ shift
+ echo "$WPA_SUP_PNAME: $@" >/dev/stderr
+ ;;
+ *)
+ ;;
+ esac
+}
+
+#####################################################################
+## validate daemon pid files
+# Test daemon process ID files via start-stop-daemon with a signal 0
+# given the exec binary and pidfile location.
+#
+# $1 daemon
+# $2 pidfile
+#
+# Returns true when pidfile exists, the process ID exists _and_ was
+# created by the exec binary.
+#
+# If the test fails, but the pidfile exists, it is stale
+#
+test_daemon_pidfile () {
+ local DAEMON PIDFILE
+
+ if [ -n "$1" ]; then
+ DAEMON="$1"
+ fi
+
+ if [ -f "$2" ]; then
+ PIDFILE="$2"
+ fi
+
+ if [ -n "$DAEMON" ] && [ -f "$PIDFILE" ]; then
+ if start-stop-daemon --stop --quiet --signal 0 \
+ --exec "$DAEMON" --pidfile "$PIDFILE"; then
+ return 0
+ else
+ rm -f "$PIDFILE"
+ return 1
+ fi
+ else
+ return 1
+ fi
+}
+
+# validate wpa_supplicant pidfile
+test_wpa_supplicant () {
+ test_daemon_pidfile "$WPA_SUP_BIN" "$WPA_SUP_PIDFILE"
+}
+
+# validate wpa_cli pidfile
+test_wpa_cli () {
+ test_daemon_pidfile "$WPA_CLI_BIN" "$WPA_CLI_PIDFILE"
+}
+
+#####################################################################
+## daemonize wpa_supplicant
+# Start wpa_supplicant via start-stop-dameon with all required
+# options. Will start if environment variable WPA_SUP_CONF is present
+#
+# Required options:
+# -B dameonize/background process
+# -D driver backend ('wext' if none given)
+# -P process ID file
+# -C path to ctrl_interface socket directory
+#
+# Optional options:
+# -c configuration file
+# -W wait for wpa_cli to attach to ctrl_interface socket
+# -b bridge interface name
+#
+init_wpa_supplicant () {
+ if [ -n "$WPA_SUP_CONF" ]; then
+ # wpa-action was removed, point to wpa-roam
+ if [ -n "$IF_WPA_ACTION" ]; then
+ wpa_msg stderr "wpa-action support has been removed"
+ wpa_msg stderr "refer to /usr/share/doc/wpasupplicant/README.modes.gz"
+ return 1
+ fi
+
+ local WPA_SUP_DRIVER WPA_SUP_OPTIONS
+
+ if [ -n "$WPA_ACTION_SCRIPT" ]; then
+ if [ -x "$WPA_ACTION_SCRIPT" ]; then
+ WPA_SUP_OPTIONS="-W -B -P $WPA_SUP_PIDFILE -i $WPA_IFACE"
+ wpa_msg verbose "wait for wpa_cli to attach"
+ else
+ wpa_msg stderr "action script \"$WPA_ACTION_SCRIPT\" not executable"
+ return 1
+ fi
+ else
+ WPA_SUP_OPTIONS="-B -P $WPA_SUP_PIDFILE -i $WPA_IFACE"
+ fi
+
+ if [ -n "$IF_WPA_BRIDGE" ]; then
+ WPA_SUP_OPTIONS="$WPA_SUP_OPTIONS -b $IF_WPA_BRIDGE"
+ wpa_msg verbose "wpa-bridge $IF_WPA_BRIDGE"
+ fi
+
+ if [ -n "$IF_WPA_DRIVER" ]; then
+ WPA_SUP_DRIVER="$IF_WPA_DRIVER"
+ wpa_msg verbose "wpa-driver $WPA_SUP_DRIVER"
+ else
+ WPA_SUP_DRIVER="wext"
+ wpa_msg verbose "using default driver type: wpa-driver $WPA_SUP_DRIVER"
+ fi
+
+ wpa_msg verbose "$WPA_SUP_BIN $WPA_SUP_OPTIONS -D $WPA_SUP_DRIVER $WPA_SUP_CONF"
+
+ start-stop-daemon --start --oknodo $DAEMON_VERBOSITY \
+ --name $WPA_SUP_PNAME --startas $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE \
+ -- $WPA_SUP_OPTIONS -D $WPA_SUP_DRIVER $WPA_SUP_CONF
+
+ if [ "$?" != "0" ]; then
+ wpa_msg stderr "$WPA_SUP_BIN daemon failed to start"
+ return 1
+ fi
+
+ local WPA_SOCKET_WAIT MAX_WPA_SOCKET_WAIT
+ WPA_SOCKET_WAIT="0"
+ MAX_WPA_SOCKET_WAIT="5"
+ until [ -S "$WPA_CTRL_DIR/$WPA_IFACE" ]; do
+ if [ "$WPA_SOCKET_WAIT" -ge "$MAX_WPA_SOCKET_WAIT" ]; then
+ wpa_msg stderr "ctrl_interface socket not found at $WPA_CTRL_DIR/$WPA_IFACE"
+ return 1
+ else
+ wpa_msg verbose "waiting for \"$WPA_CTRL_DIR/$WPA_IFACE\": $WPA_SOCKET_WAIT (max. $MAX_WPA_SOCKET_WAIT)"
+ fi
+
+ WPA_SOCKET_WAIT=$(($WPA_SOCKET_WAIT + 1))
+ sleep 1
+ done
+
+ wpa_msg verbose "ctrl_interface socket located at $WPA_CTRL_DIR/$WPA_IFACE"
+ else
+ wpa_msg stderr "init_wpa_supplicant() called without WPA_SUP_CONF"
+ return 1
+ fi
+}
+
+#####################################################################
+## stop wpa_supplicant process
+# Kill wpa_supplicant via start-stop-daemon, given the location of
+# the pidfile or ctrl_interface socket path and interface name
+#
+kill_wpa_supplicant () {
+ if test_wpa_supplicant; then
+
+ wpa_msg verbose "terminating $WPA_SUP_PNAME daemon via pidfile $WPA_SUP_PIDFILE"
+
+ start-stop-daemon --stop --oknodo $DAEMON_VERBOSITY \
+ --exec $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE
+
+ if [ -f "$WPA_SUP_PIDFILE" ]; then
+ rm -f "$WPA_SUP_PIDFILE"
+ fi
+ elif [ -S "$WPA_CTRL_DIR/$WPA_IFACE" ]; then
+
+ wpa_msg action "terminating via ctrl_interface socket $WPA_CTRL_DIR/$WPA_IFACE"
+
+ wpa_cli terminate >$TO_NULL
+
+ if [ -S "$WPA_CTRL_DIR/$WPA_IFACE" ]; then
+ rm -f "$WPA_CTRL_DIR/$WPA_IFACE"
+ fi
+ fi
+}
+
+#####################################################################
+## reload wpa_supplicant process
+# Sending a HUP signal causes wpa_supplicant to reparse its
+# configuration file
+#
+reload_wpa_supplicant () {
+ if test_wpa_supplicant; then
+ wpa_msg verbose "reloading wpa_supplicant configuration file via HUP signal"
+ start-stop-daemon --stop --signal HUP \
+ --name "$WPA_SUP_PNAME" --pidfile "$WPA_SUP_PIDFILE"
+ else
+ wpa_msg verbose "cannot $WPA_ACTION, $WPA_SUP_PIDFILE does not exist"
+ fi
+}
+
+#####################################################################
+## daemonize wpa_cli and action script
+# If environment variable WPA_ACTION_SCRIPT is present, wpa_cli will
+# be spawned via start-stop-daemon
+#
+# Required options:
+# -a action script => wpa_action
+# -P process ID file
+# -B background process
+#
+init_wpa_cli () {
+ if [ -n "$WPA_ACTION_SCRIPT" ]; then
+ local WPA_CLI_OPTIONS
+ WPA_CLI_OPTIONS="-B -P $WPA_CLI_PIDFILE -i $WPA_IFACE"
+
+ wpa_msg verbose "$WPA_CLI_BIN $WPA_CLI_OPTIONS -p $WPA_CTRL_DIR -a $WPA_ACTION_SCRIPT"
+
+ start-stop-daemon --start --oknodo $DAEMON_VERBOSITY \
+ --name $WPA_CLI_PNAME --startas $WPA_CLI_BIN --pidfile $WPA_CLI_PIDFILE \
+ -- $WPA_CLI_OPTIONS -p $WPA_CTRL_DIR -a $WPA_ACTION_SCRIPT
+
+ if [ "$?" != "0" ]; then
+ wpa_msg stderr "$WPA_CLI_BIN daemon failed to start"
+ return 1
+ fi
+ fi
+}
+
+#####################################################################
+## stop wpa_cli process
+# Kill wpa_cli via start-stop-daemon, given the location of the
+# pidfile
+#
+kill_wpa_cli () {
+ if test_wpa_cli; then
+
+ wpa_msg verbose "terminating $WPA_CLI_PNAME daemon via pidfile $WPA_CLI_PIDFILE"
+
+ start-stop-daemon --stop --oknodo $DAEMON_VERBOSITY \
+ --exec $WPA_CLI_BIN --pidfile $WPA_CLI_PIDFILE
+
+ if [ -f "$WPA_CLI_PIDFILE" ]; then
+ rm -f "$WPA_CLI_PIDFILE"
+ fi
+ fi
+}
+
+#####################################################################
+## higher level wpa_cli wrapper for variable and set_network commands
+# wpa_cli_do <value> <type> <variable> [set_network variable] <desc>
+#
+# $1 envorinment variable
+# $2 data type of variable {raw|ascii}
+# $3 wpa_cli variable, if $3 is set_network, shift and take
+# set_network subvariable
+# $4 wpa-* string as it would appear in interfaces file, enhances
+# verbose messages
+#
+wpa_cli_do () {
+ if [ -z "$1" ]; then
+ return 0
+ fi
+
+ local WPACLISET_VALUE WPACLISET_VARIABLE WPACLISET_DESC
+
+ case "$2" in
+ ascii)
+ # Double quote
+ WPACLISET_VALUE="\"$1\""
+ ;;
+ raw|*)
+ # Provide raw value
+ WPACLISET_VALUE="$1"
+ ;;
+ esac
+
+ case "$3" in
+ set_network)
+ if [ -z "$WPA_ID" ]; then
+ return 1
+ fi
+ shift
+ WPACLISET_VARIABLE="set_network $WPA_ID $3"
+ ;;
+ *)
+ WPACLISET_VARIABLE="$3"
+ ;;
+ esac
+
+ case "$4" in
+ *-psk|*-passphrase|*-passwd*|*-wep-key*)
+ WPACLISET_DESC="$4 *****"
+ ;;
+ *)
+ WPACLISET_DESC="$4 $WPACLISET_VALUE"
+ ;;
+ esac
+
+ wpa_msg action "$WPACLISET_DESC"
+
+ wpa_cli $WPACLISET_VARIABLE "$WPACLISET_VALUE" >$TO_NULL
+}
+
+#####################################################################
+## check value data type in plaintext or hex
+# returns 0 if input consists of hexadecimal digits only, 1 otherwise
+#
+ishex () {
+ if [ -z "$1" ]; then
+ return 0
+ fi
+
+ case "$1" in
+ *[!0-9a-fA-F]*)
+ # plaintext
+ return 1
+ ;;
+ *)
+ # hexadecimal
+ return 0
+ ;;
+ esac
+}
+
+#####################################################################
+## sanity check and set psk|passphrase
+# Warn about strange psk|passphrase values
+#
+# $1 psk or passphrase value
+#
+# If psk is surrounded by quotes strip them.
+#
+# If psk contains all hexadecimal characters and string length is 64:
+# is 256bit hexadecimal
+# else:
+# is plaintext
+#
+# plaintext passphrases must be 8 - 63 characters in length
+# 256-bit hexadecimal key must be 64 characters in length
+#
+wpa_key_check_and_set () {
+ if [ -z "$1" ]; then
+ return 0
+ fi
+
+ local KEY KEY_TYPE
+
+ case "$1" in
+ '"'*'"')
+ # Strip surrounding quotation marks
+ KEY=$(echo -n "$1" | sed 's/^"//;s/"$//')
+ ;;
+ *)
+ KEY="$1"
+ ;;
+ esac
+
+ if ishex "$KEY" && [ "${#KEY}" -eq "64" ]; then
+ KEY_TYPE="raw"
+ else
+ KEY_TYPE="ascii"
+ if [ "${#KEY}" -lt "8" ] || [ "${#KEY}" -gt "63" ]; then
+ wpa_msg stderr \
+ "plaintext or ascii wpa-psk has ${#KEY} characters, it must have between 8 and 63"
+ wpa_msg stderr \
+ "if wpa-psk truly is a 256-bit hexadecimal key, it must have 64 characters"
+ fi
+ fi
+
+ wpa_cli_do "$KEY" "$KEY_TYPE" \
+ set_network psk wpa-psk
+}
+
+#####################################################################
+## formulate a usable configuration from interfaces(5) wpa- lines
+# A series of wpa_cli commands corresponding to environment variables
+# created as a result of wpa- lines in an interfaces stanza.
+#
+# NB: no-act when roaming daemon is used (to avoid prematurely
+# attaching to ctrl_interface socket)
+#
+conf_wpa_supplicant () {
+ if [ -n "$WPA_ACTION_SCRIPT" ]; then
+ return 0
+ fi
+
+ if [ "$IF_WPA_DRIVER" = "wired" ]; then
+ IF_WPA_AP_SCAN="0"
+ wpa_msg verbose "forcing ap_scan=0 (required for wired IEEE8021X auth)"
+ fi
+
+ if [ -n "$IF_WPA_ESSID" ]; then
+ # #403316, be similar to wireless tools
+ IF_WPA_SSID="$IF_WPA_ESSID"
+ fi
+
+ wpa_cli_do "$IF_WPA_AP_SCAN" raw \
+ ap_scan wpa-ap-scan
+
+ wpa_cli_do "$IF_WPA_PREAUTHENTICATE" raw \
+ preauthenticate wpa-preauthenticate
+
+ if [ -n "$IF_WPA_SSID" ] || [ "$IF_WPA_DRIVER" = "wired" ]; then
+
+ case "$IF_WPA_SSID" in
+ '"'*'"')
+ IF_WPA_SSID=$(echo -n "$IF_WPA_SSID" | sed 's/^"//;s/"$//')
+ ;;
+ *)
+ ;;
+ esac
+
+ WPA_ID=$(wpa_cli add_network)
+
+ wpa_msg verbose "configuring network block -- $WPA_ID"
+
+ wpa_cli_do "$IF_WPA_SSID" ascii \
+ set_network ssid wpa-ssid
+
+ wpa_cli_do "$IF_WPA_PRIORITY" raw \
+ set_network priority wpa-priority
+
+ wpa_cli_do "$IF_WPA_BSSID" raw \
+ set_network bssid wpa-bssid
+
+ if [ -s "$IF_WPA_PSK_FILE" ]; then
+ IF_WPA_PSK=$(cat "$IF_WPA_PSK_FILE")
+ fi
+
+ # remain compat with wpa-passphrase-file
+ if [ -s "$IF_WPA_PASSPHRASE_FILE" ]; then
+ IF_WPA_PSK=$(cat "$IF_WPA_PASSPHRASE_FILE")
+ fi
+
+ # remain compat with wpa-passphrase
+ if [ -n "$IF_WPA_PASSPHRASE" ]; then
+ IF_WPA_PSK="$IF_WPA_PASSPHRASE"
+ fi
+
+ if [ -n "$IF_WPA_PSK" ]; then
+ wpa_key_check_and_set "$IF_WPA_PSK"
+ fi
+
+ wpa_cli_do "$IF_WPA_PAIRWISE" raw \
+ set_network pairwise wpa-pairwise
+
+ wpa_cli_do "$IF_WPA_GROUP" raw \
+ set_network group wpa-group
+
+ wpa_cli_do "$IF_WPA_MODE" raw \
+ set_network mode wpa-mode
+
+ wpa_cli_do "$IF_WPA_FREQUENCY" raw \
+ set_network frequency wpa-frequency
+
+ wpa_cli_do "$IF_WPA_KEY_MGMT" raw \
+ set_network key_mgmt wpa-key-mgmt
+
+ wpa_cli_do "$IF_WPA_PROTO" raw \
+ set_network proto wpa-proto
+
+ wpa_cli_do "$IF_WPA_AUTH_ALG" raw \
+ set_network auth_alg wpa-auth-alg
+
+ wpa_cli_do "$IF_WPA_SCAN_SSID" raw \
+ set_network scan_ssid wpa-scan-ssid
+
+ wpa_cli_do "$IF_WPA_IDENTITY" ascii \
+ set_network identity wpa-identity
+
+ wpa_cli_do "$IF_WPA_ANONYMOUS_IDENTITY" ascii \
+ set_network anonymous_identity wpa-anonymous-identity
+
+ wpa_cli_do "$IF_WPA_EAP" raw \
+ set_network eap wpa-eap
+
+ wpa_cli_do "$IF_WPA_EAPPSK" raw \
+ set_network eappsk wpa-eappsk
+
+ wpa_cli_do "$IF_WPA_NAI" ascii \
+ set_network nai wpa-nai
+
+ wpa_cli_do "$IF_WPA_PASSWORD" ascii \
+ set_network password wpa-password
+
+ wpa_cli_do "$IF_WPA_CA_CERT" ascii \
+ set_network ca_cert wpa-ca-cert
+
+ wpa_cli_do "$IF_WPA_CA_PATH" ascii \
+ set_network ca_path wpa-ca-path
+
+ wpa_cli_do "$IF_WPA_CLIENT_CERT" ascii \
+ set_network client_cert wpa-client-cert
+
+ wpa_cli_do "$IF_WPA_PRIVATE_KEY" ascii \
+ set_network private_key wpa-private-key
+
+ wpa_cli_do "$IF_WPA_PRIVATE_KEY_PASSWD" ascii \
+ set_network private_key_passwd wpa-private-key-passwd
+
+ wpa_cli_do "$IF_WPA_DH_FILE" ascii \
+ set_network dh_file wpa-dh-file
+
+ wpa_cli_do "$IF_WPA_SUBJECT_MATCH" ascii \
+ set_network subject_match wpa-subject-match
+
+ wpa_cli_do "$IF_WPA_ALTSUBJECT_MATCH" ascii \
+ set_network altsubject_match wpa-altsubject-match
+
+ wpa_cli_do "$IF_WPA_CA_CERT2" ascii \
+ set_network ca_cert2 wpa-ca-cert2
+
+ wpa_cli_do "$IF_WPA_CA_PATH2" ascii \
+ set_network ca_path2 wpa-ca-path2
+
+ wpa_cli_do "$IF_WPA_CLIENT_CERT2" ascii \
+ set_network client_cert2 wpa-client-cert2
+
+ wpa_cli_do "$IF_WPA_PRIVATE_KEY2" ascii \
+ set_network private_key2 wpa-private-key2
+
+ wpa_cli_do "$IF_WPA_PRIVATE_KEY_PASSWD2" ascii \
+ set_network private_key_passwd2 wpa-private-key-passwd2
+
+ wpa_cli_do "$IF_WPA_DH_FILE2" ascii \
+ set_network dh_file2 wpa-dh-file2
+
+ wpa_cli_do "$IF_WPA_SUBJECT_MATCH2" ascii \
+ set_network subject_match2 wpa-subject-match2
+
+ wpa_cli_do "$IF_WPA_ALTSUBJECT_MATCH2" ascii \
+ set_network altsubject_match2 wpa-altsubject-match2
+
+ wpa_cli_do "$IF_WPA_EAP_METHODS" raw \
+ set_network eap_methods wpa-eap-methods
+
+ wpa_cli_do "$IF_WPA_PHASE1" ascii \
+ set_network phase1 wpa-phase1
+
+ wpa_cli_do "$IF_WPA_PHASE2" ascii \
+ set_network phase2 wpa-phase2
+
+ wpa_cli_do "$IF_WPA_PCSC" raw \
+ set_network pcsc wpa-pcsc
+
+ wpa_cli_do "$IF_WPA_PIN" ascii \
+ set_network pin wpa-pin
+
+ wpa_cli_do "$IF_WPA_ENGINE" raw \
+ set_network engine wpa-engine
+
+ wpa_cli_do "$IF_WPA_ENGINE_ID" ascii \
+ set_network engine_id wpa-engine-id
+
+ wpa_cli_do "$IF_WPA_KEY_ID" ascii \
+ set_network key_id wpa-key-id
+
+ wpa_cli_do "$IF_WPA_EAPOL_FLAGS" raw \
+ set_network eapol_flags wpa-eapol-flags
+
+ wpa_cli_do "$IF_WPA_WEP_KEY0" raw \
+ set_network wep_key0 wpa-wep-key0
+
+ wpa_cli_do "$IF_WPA_WEP_KEY1" raw \
+ set_network wep_key1 wpa-wep-key1
+
+ wpa_cli_do "$IF_WPA_WEP_KEY2" raw \
+ set_network wep_key2 wpa-wep-key2
+
+ wpa_cli_do "$IF_WPA_WEP_KEY3" raw \
+ set_network wep_key3 wpa-wep-key3
+
+ wpa_cli_do "$IF_WPA_WEP_TX_KEYIDX" raw \
+ set_network wep_tx_keyidx wpa-wep-tx-keyidx
+
+ wpa_cli_do "$IF_WPA_PROACTIVE_KEY_CACHING" raw \
+ set_network proactive_key_caching wpa-proactive-key-caching
+
+ wpa_cli_do "$IF_WPA_PAC_FILE" ascii \
+ set_network pac_file wpa-pac-file
+
+ wpa_cli_do "$IF_WPA_MODE" raw \
+ set_network mode wpa-mode
+
+ wpa_cli_do "$IF_WPA_PEERKEY" raw \
+ set_network peerkey wpa-peerkey
+
+ wpa_cli_do "$IF_FRAGMENT_SIZE" raw \
+ set_network fragment_size wpa-fragment-size
+
+ wpa_cli_do "$IF_WPA_ID_STR" ascii \
+ set_network id_str wpa-id-str
+
+ wpa_cli_do "$WPA_ID" raw \
+ enable_network "enabling network block"
+ fi
+}
+
+#####################################################################
+## wpa_action basic logging
+# Log actions to file, test to see if it is writeable first
+#
+wpa_log_init () {
+ if touch "$WPA_CLI_LOGFILE" 2>/dev/null; then
+ exec >> "$WPA_CLI_LOGFILE" 2>&1
+ fi
+}
+
+# log timestamp and wpa_action arguments
+wpa_log_action () {
+ echo "########## $(date +"%H:%M:%S %Y-%m-%d") ##########"
+ echo "IFACE=$WPA_IFACE ACTION=$WPA_ACTION"
+}
+
+# log wpa_cli environment variables
+wpa_log_environment () {
+ echo "WPA_ID=$WPA_ID WPA_ID_STR=$WPA_ID_STR"
+ echo "WPA_CTRL_DIR=$WPA_CTRL_DIR"
+}
+
+#####################################################################
+## hysteresis checking
+# Networking tools such as dhcp clients used with ifupdown can
+# synthesize artificial ACTION events, particuarly just after a
+# DISCONNECTED/CONNECTED events are experienced in quick succession.
+# This can lead to infinite event loops, and in extreme cases has the
+# potential to cause system instability.
+#
+wpa_hysteresis_event () {
+ echo "$(date +%s)" > "$WPA_CLI_TIMESTAMP"
+}
+
+wpa_hysteresis_check () {
+ if [ -f "$WPA_CLI_TIMESTAMP" ]; then
+ local TIME TIMESTAMP TIMEWAIT
+ TIME=$(date +%s)
+ # current time minus 4 second event buffer
+ TIMEWAIT=$(($TIME-4))
+ # get time of last event
+ TIMESTAMP=$(cat $WPA_CLI_TIMESTAMP)
+ # compare values, allowing new action to be processed
+ # only if last action was more than 4 seconds ago
+ if [ "$TIMEWAIT" -le "$TIMESTAMP" ]; then
+ echo "Ignoring $WPA_ACTION event, too soon after previous event"
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
+#####################################################################
+## identify ifupdown files
+# Identify ifupdown core files, so that state of the interface can be
+# checked. This is the weakest part of the wpa_action roaming scheme,
+# it would be _much_ better if stateless ifupdown capabilities were
+# a reality.
+#
+ifupdown_check () {
+ if [ -e /etc/network/interfaces ]; then
+ INTERFACES_FILE="/etc/network/interfaces"
+ else
+ echo "Cannot locate ifupdown's \"interfaces\" file, $WPA_IFACE will not be configured"
+ return 1
+ fi
+
+ if [ -e /etc/network/run/ifstate ]; then
+ # debian's ifupdown
+ IFSTATE_FILE="/etc/network/run/ifstate"
+ elif [ -e /var/run/network/ifstate ]; then
+ # ubuntu's
+ IFSTATE_FILE="/var/run/network/ifstate"
+ else
+ echo "Cannot locate ifupdown's \"ifstate\" file, $WPA_IFACE will not be configured"
+ return 1
+ fi
+
+ return 0
+}
+
+#####################################################################
+## apply mapping logic and ifup logical interface
+# Apply mapping logic via id_str or external mapping script, check
+# state of IFACE with respect to ifupdown and ifup logical interaface
+#
+ifup () {
+ local WPA_LOGICAL_IFACE
+
+ if [ -z "$IF_WPA_MAPPING_SCRIPT_PRIORITY" ] && [ -n "$WPA_ID_STR" ]; then
+ WPA_LOGICAL_IFACE="$WPA_ID_STR"
+ echo "Mapping logical interface via id_str: $WPA_LOGICAL_IFACE"
+ fi
+
+ if [ -z "$WPA_LOGICAL_IFACE" ] && [ -n "$IF_WPA_MAPPING_SCRIPT" ]; then
+ echo "Mapping logical interface via wpa-mapping-script: $IF_WPA_MAPPING_SCRIPT"
+
+ local WPA_MAP_STDIN
+
+ WPA_MAP_STDIN=$(set | sed --quiet 's/^\(IF_WPA_MAP[0-9]*\)=.*/echo \$\1/p')
+
+ if [ -n "$WPA_MAP_STDIN" ]; then
+ WPA_LOGICAL_IFACE=$(eval "$WPA_MAP_STDIN" | "$IF_WPA_MAPPING_SCRIPT" "$WPA_IFACE")
+ else
+ WPA_LOGICAL_IFACE=$("$IF_WPA_MAPPING_SCRIPT" "$WPA_IFACE")
+ fi
+
+ if [ -n "$WPA_LOGICAL_IFACE" ]; then
+ echo "Mapping script result: $WPA_LOGICAL_IFACE"
+ else
+ echo "Mapping script failed."
+ fi
+ fi
+
+ if [ -z "$WPA_LOGICAL_IFACE" ]; then
+ if [ -n "$IF_WPA_ROAM_DEFAULT_IFACE" ]; then
+ WPA_LOGICAL_IFACE="$IF_WPA_ROAM_DEFAULT_IFACE"
+ echo "Using wpa-roam-default-iface: $WPA_LOGICAL_IFACE"
+ else
+ WPA_LOGICAL_IFACE="default"
+ echo "Using fallback logical interface: $WPA_LOGICAL_IFACE"
+ fi
+ fi
+
+ if [ -n "$WPA_LOGICAL_IFACE" ]; then
+ if egrep -q "^iface[[:space:]]+$WPA_LOGICAL_IFACE[[:space:]]+inet" "$INTERFACES_FILE"; then
+
+ echo "ifup $WPA_IFACE=$WPA_LOGICAL_IFACE"
+
+ if grep --quiet "^$WPA_IFACE=$WPA_IFACE" "$IFSTATE_FILE"; then
+ # Force settings over the unconfigured "master" IFACE
+ /sbin/ifup --force "$WPA_IFACE=$WPA_LOGICAL_IFACE"
+ else
+ /sbin/ifup "$WPA_IFACE=$WPA_LOGICAL_IFACE"
+ fi
+ else
+ echo "No network defined for \"$WPA_LOGICAL_IFACE\" in \"$INTERFACES_FILE\""
+ fi
+ else
+ echo "No suitable logical interface mapping for ifupdown to configure"
+ fi
+}
+
+#####################################################################
+## ifdown IFACE
+# Check IFACE state and ifdown as requested.
+#
+ifdown () {
+ if grep --quiet "^$WPA_IFACE" "$IFSTATE_FILE"; then
+ echo "ifdown $WPA_IFACE"
+ /sbin/ifdown "$WPA_IFACE"
+ else
+ echo "Ignoring request to take \"$WPA_IFACE\" down, it is not up"
+ fi
+}
+
+#####################################################################
+## keep IFACE scanning
+# After ifdown, the IFACE may be left "down", and inhibits
+# wpa_supplicant's ability to continue roaming.
+#
+# NB: use iproute if present, flushing the IFACE first
+#
+if_post_down_up () {
+ if [ -x /sbin/ip ]; then
+ /sbin/ip addr flush dev "$WPA_IFACE" 2>/dev/null
+ /sbin/ip link set "$WPA_IFACE" up
+ else
+ /sbin/ifconfig "$WPA_IFACE" up
+ fi
+}
diff --git a/packages/wpa-supplicant/files/ifupdown.sh b/packages/wpa-supplicant/files/ifupdown.sh
new file mode 100755
index 0000000000..71486f7648
--- /dev/null
+++ b/packages/wpa-supplicant/files/ifupdown.sh
@@ -0,0 +1,132 @@
+#!/bin/sh
+
+# Copyright (C) 2006 Debian/Ubuntu wpasupplicant Maintainers
+# <pkg-wpa-devel@lists.alioth.debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# On Debian GNU/Linux systems, the text of the GPL license can be
+# found in /usr/share/common-licenses/GPL.
+
+if [ -n "$IF_WPA_MAINT_DEBUG" ]; then
+ set -x
+fi
+
+# quit if we're called for the loopback
+if [ "$IFACE" = lo ]; then
+ exit 0
+fi
+
+# allow wpa_supplicant interface to be specified via wpa-iface
+# useful for starting wpa_supplicant on one interface of a bridge
+if [ -n "$IF_WPA_IFACE" ]; then
+ WPA_IFACE="$IF_WPA_IFACE"
+else
+ WPA_IFACE="$IFACE"
+fi
+
+# source functions
+if [ -f /etc/wpa_supplicant/functions.sh ]; then
+ . /etc/wpa_supplicant/functions.sh
+else
+ exit 0
+fi
+
+# quit if executables are not installed
+if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
+ exit 0
+fi
+
+# quit if wpa_action is active
+if test_wpa_cli; then
+ exit 0
+fi
+
+#echo "Initial WPA Checks Pass"
+
+# preliminary sanity checks for roaming daemon
+if [ -n "$IF_WPA_ROAM" ]; then
+ if [ "$METHOD" != "manual" ]; then
+ wpa_msg stderr "wpa-roam can only be used with the \"manual\" inet METHOD"
+ exit 1
+ fi
+ if [ -n "$IF_WPA_MAPPING_SCRIPT" ]; then
+ if ! type "$IF_WPA_MAPPING_SCRIPT" >/dev/null; then
+ wpa_msg stderr "wpa-mapping-script \"$IF_WPA_MAPPING_SCRIPT\" is not valid"
+ exit 1
+ fi
+ fi
+ if [ -n "$IF_WPA_MAPPING_SCRIPT_PRIORITY" ] && [ -z "$IF_WPA_MAPPING_SCRIPT" ]; then
+ wpa_msg stderr "\"wpa-mapping-script-priority 1\" is invalid without a wpa-mapping-script"
+ exit 1
+ fi
+ IF_WPA_CONF="$IF_WPA_ROAM"
+ WPA_ACTION_SCRIPT="/sbin/wpa_action"
+fi
+
+# master function; determines if ifupdown.sh should do something or not
+if [ -n "$IF_WPA_CONF" ]; then
+ if [ ! -s "$IF_WPA_CONF" ]; then
+ wpa_msg stderr "cannot read contents of $IF_WPA_CONF"
+ exit 1
+ fi
+ WPA_SUP_CONF_CTRL_DIR=$(sed --quiet \
+ 's/[[:space:]]*#.*//g;s/[[:space:]]\+.*$//g;s/^\(ctrl_interface\|DIR\)=\(.*\)/\2/p' "$IF_WPA_CONF")
+ if [ -n "$WPA_SUP_CONF_CTRL_DIR" ]; then
+ WPA_CTRL_DIR="$WPA_SUP_CONF_CTRL_DIR"
+ fi
+ WPA_SUP_CONF="-c $IF_WPA_CONF -C $WPA_CTRL_DIR"
+elif set | grep -q "^IF_WPA"; then
+ WPA_SUP_CONF="-C $WPA_CTRL_DIR"
+else
+ exit 0
+fi
+
+case "$MODE" in
+ start)
+ PHASE="pre-up"
+ echo "WPA: Configuring Interface"
+ case "$PHASE" in
+ pre-up)
+ kill_wpa_supplicant
+ init_wpa_supplicant || echo "FAILED"
+ conf_wpa_supplicant || { kill_wpa_supplicant; exit 1; }
+ ;;
+ post-up)
+ init_wpa_cli || { kill_wpa_supplicant; exit 1; }
+ ;;
+ esac
+ ;;
+
+ stop)
+ PHASE="post-down"
+ echo "WPA: Terminating"
+ case "$PHASE" in
+ pre-down)
+ kill_wpa_cli
+ ;;
+ post-down)
+ kill_wpa_supplicant
+ ;;
+ *)
+ wpa_msg stderr "unknown phase: \"$PHASE\""
+ exit 1
+ ;;
+ esac
+ ;;
+
+ *)
+ wpa_msg stderr "unknown mode: \"$MODE\""
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/wpa-supplicant/wpa-supplicant-0.5.inc b/packages/wpa-supplicant/wpa-supplicant-0.5.inc
index 28f355c612..b5e53e3f56 100644
--- a/packages/wpa-supplicant/wpa-supplicant-0.5.inc
+++ b/packages/wpa-supplicant/wpa-supplicant-0.5.inc
@@ -12,24 +12,18 @@ DEFAULT_PREFERENCE = "-2"
SRC_URI = "http://hostap.epitest.fi/releases/wpa_supplicant-${PV}.tar.gz \
file://defconfig-gnutls \
- file://init.sh \
file://gnutlsfix.patch;patch=1 \
- file://defaults-sane \
- file://wpa-supplicant.sh \
- file://wpa_supplicant.conf \
- file://wpa_supplicant.conf-sane"
+ file://ifupdown.sh \
+ file://functions.sh"
S = "${WORKDIR}/wpa_supplicant-${PV}"
-PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli "
+PACKAGES_prepend = "wpa-supplicant-passphrase "
FILES_wpa-supplicant-passphrase = "/usr/sbin/wpa_passphrase"
-FILES_wpa-supplicant-cli = "/usr/sbin/wpa_cli"
-RRECOMMENDS_${PN} = "wpa-supplicant-passphrase wpa-supplicant-cli"
+RREPLACES = "wpa-supplicant-cli"
-INITSCRIPT_NAME = "wpa"
-INITSCRIPT_PARAMS = "defaults 10"
-inherit update-rc.d
+RRECOMMENDS_${PN} = "wpa-supplicant-passphrase"
export HAS_PCI = "${@base_contains('COMBINED_FEATURES', 'pci', 1, 0,d)}"
@@ -55,20 +49,16 @@ do_install () {
install -d ${D}${localstatedir}/run/wpa_supplicant
install -d ${D}${docdir}/wpa_supplicant
- install -m 644 README ${WORKDIR}/wpa_supplicant.conf ${D}${docdir}/wpa_supplicant
-
- install -d ${D}${sysconfdir}/init.d
- install -m 700 ${WORKDIR}/init.sh ${D}${sysconfdir}/init.d/wpa
-
- install -d ${D}${sysconfdir}/default
- install -m 600 ${WORKDIR}/defaults-sane ${D}${sysconfdir}/default/wpa
- install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf
+ install -m 644 README ${D}${docdir}/wpa_supplicant
install -d ${D}${sysconfdir}/network/if-pre-up.d/
install -d ${D}${sysconfdir}/network/if-post-down.d/
install -d ${D}${sysconfdir}/network/if-down.d/
- install -m 644 ${WORKDIR}/wpa_supplicant.conf ${D}${sysconfdir}
- install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
- cd ${D}${sysconfdir}/network/ && \
- ln -sf ../if-pre-up.d/wpa-supplicant if-post-down.d/wpa-supplicant
+
+ install -d ${D}${sysconfdir}/wpa_supplicant
+ install -m 755 ${WORKDIR}/ifupdown.sh ${D}${sysconfdir}/wpa_supplicant/
+ install -m 755 ${WORKDIR}/functions.sh ${D}${sysconfdir}/wpa_supplicant
+
+ ln -s /etc/wpa_supplicant/ifupdown.sh ${D}${sysconfdir}/network/if-pre-up.d/wpasupplicant
+ ln -s /etc/wpa_supplicant/ifupdown.sh ${D}${sysconfdir}/network/if-post-down.d/wpasupplicant
}
diff --git a/packages/wpa-supplicant/wpa-supplicant_0.5.5.bb b/packages/wpa-supplicant/wpa-supplicant_0.5.5.bb
index 67a5b99b0f..ce744b3fe7 100644
--- a/packages/wpa-supplicant/wpa-supplicant_0.5.5.bb
+++ b/packages/wpa-supplicant/wpa-supplicant_0.5.5.bb
@@ -1,3 +1,3 @@
require wpa-supplicant-0.5.inc
-PR = "r1"
+PR = "r3"
diff --git a/packages/wpa-supplicant/wpa-supplicant_0.5.7.bb b/packages/wpa-supplicant/wpa-supplicant_0.5.7.bb
index 6594bbfdbe..2aa871bb74 100644
--- a/packages/wpa-supplicant/wpa-supplicant_0.5.7.bb
+++ b/packages/wpa-supplicant/wpa-supplicant_0.5.7.bb
@@ -1 +1,3 @@
require wpa-supplicant-0.5.inc
+
+PR = "r1" \ No newline at end of file
diff --git a/packages/wrt/wrt-imagetools-native.bb b/packages/wrt/wrt-imagetools-native.bb
index cd5d802765..f9f459eea6 100644
--- a/packages/wrt/wrt-imagetools-native.bb
+++ b/packages/wrt/wrt-imagetools-native.bb
@@ -1,4 +1,5 @@
-SRC_URI = "cvs://anonymous@openwrt.org/openwrt;module=openwrt/target/utils/src;tag=TESTED"
+#SRC_URI = "svn://svn.openwrt.org/openwrt;module=trunk/tools/firmware-utils/src;proto=https"
+SRC_URI = ${SOURCEFORGE_MIRROR}/gakusei/openwrt-imagetools-svn-rev7641.tar.bz2
S = "${WORKDIR}/src/"
inherit native
@@ -13,4 +14,4 @@ do_stage() {
install -m 0755 ${S}/trx ${STAGING_BINDIR}
install -m 0755 ${S}/motorola-bin ${STAGING_BINDIR}
install -m 0755 ${S}/addpattern ${STAGING_BINDIR}
-} \ No newline at end of file
+}
diff --git a/packages/xcalibrate/xcalibrate_git.bb b/packages/xcalibrate/xcalibrate_git.bb
index 7b2b4d3b63..aba693ad6c 100644
--- a/packages/xcalibrate/xcalibrate_git.bb
+++ b/packages/xcalibrate/xcalibrate_git.bb
@@ -1,11 +1,12 @@
-PV = "0.0+git${SRCDATE}"
LICENSE = "BSD-X"
SECTION = "x11/libs"
PRIORITY = "optional"
DEPENDS = "virtual/libx11 xcalibrateext libxext"
DESCRIPTION = "XCalibrate client-side library"
-SRC_URI = "git://anongit.freedesktop.org/xorg/lib/libXCalibrate;protocol=git"
+PV = "0.0+git4be232e30cd33a44a1ce6d3ec429ee6101540c62"
+
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libXCalibrate;protocol=git;tag=4be232e30cd33a44a1ce6d3ec429ee6101540c62"
S = "${WORKDIR}/git"
inherit autotools pkgconfig
diff --git a/packages/xcalibrateext/xcalibrateext_git.bb b/packages/xcalibrateext/xcalibrateext_git.bb
index 40c21ebd74..16955b5753 100644
--- a/packages/xcalibrateext/xcalibrateext_git.bb
+++ b/packages/xcalibrateext/xcalibrateext_git.bb
@@ -1,13 +1,17 @@
-PV = "0.0+git${SRCDATE}"
SECTION = "x11/libs"
LICENSE = "BSD-X"
DESCRIPTION = "XCalibrate extension headers"
-SRC_URI = "git://anongit.freedesktop.org/xorg/proto/calibrateproto;protocol=git"
+PV = "0.0+gita1d5ef0c73fbef3e758c51b57ac69ba9567bae04"
+PR = "r1"
+
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/proto/calibrateproto;protocol=git;tag=a1d5ef0c73fbef3e758c51b57ac69ba9567bae04"
S = "${WORKDIR}/git"
inherit autotools pkgconfig
do_stage() {
autotools_stage_all
+ #make it compatible with the old package from cvs
+ ln -sf ${PKG_CONFIG_PATH}/xcalibrateproto.pc ${PKG_CONFIG_PATH}/xcalibrateext.pc
}
diff --git a/packages/xcb/libpthread-stubs_0.1.bb b/packages/xcb/libpthread-stubs_0.1.bb
new file mode 100644
index 0000000000..9614a74a68
--- /dev/null
+++ b/packages/xcb/libpthread-stubs_0.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "This library provides weak aliases for pthread functions \
+not provided in libc or otherwise available by default."
+SECTION = "x11/libs"
+LICENSE = "MIT-X"
+HOMEPAGE = "http://xcb.freedesktop.org"
+
+PARALLEL_MAKE = ""
+#DEPENDS = "xcb-proto xproto libxau libxslt-native"
+# DEPENDS += "xsltproc-native gperf-native"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/libpthread-stubs-${PV}.tar.bz2"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/xcb/libxcb.inc b/packages/xcb/libxcb.inc
new file mode 100644
index 0000000000..6e7bd5edec
--- /dev/null
+++ b/packages/xcb/libxcb.inc
@@ -0,0 +1,46 @@
+DESCRIPTION = "XCB: an X protocol C binding"
+SECTION = "x11/libs"
+LICENSE = "MIT-X"
+HOMEPAGE = "http://xcb.freedesktop.org"
+
+PARALLEL_MAKE = ""
+DEPENDS = "xcb-proto xproto libxau libxslt-native"
+# DEPENDS += "xsltproc-native gperf-native"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.bz2"
+
+PACKAGES =+ "libxcb-composite libxcb-damage libxcb-dpms libxcb-glx \
+ libxcb-randr libxcb-record libxcb-render libxcb-res \
+ libxcb-screensaver libxcb-shape libxcb-shm libxcb-sync \
+ libxcb-xevie libxcb-xf86dri libxcb-xfixes libxcb-xlib \
+ libxcb-xprint libxcb-xtest libxcb-xv libxcb-xvmc"
+
+FILES_${PN} = "${libdir}/libxcb.so.*"
+#FILES_${PN}-dev = "${libdir}/libxcb.* ${libdir}/pkgconfig/*.pc ${includedir}/xcb/*.h"
+FILES_libxcb-composite = "${libdir}/libxcb-composite.so.*"
+FILES_libxcb-damage = "${libdir}/libxcb-damage.so.*"
+FILES_libxcb-dpms = "${libdir}/libxcb-dpms.so.*"
+FILES_libxcb-glx = "${libdir}/libxcb-glx.so.*"
+FILES_libxcb-randr = "${libdir}/libxcb-randr.so.*"
+FILES_libxcb-record = "${libdir}/libxcb-record.so.*"
+FILES_libxcb-render = "${libdir}/libxcb-render.so.*"
+FILES_libxcb-res = "${libdir}/libxcb-res.so.*"
+FILES_libxcb-screensaver = "${libdir}/libxcb-screensaver.so.*"
+FILES_libxcb-shape = "${libdir}/libxcb-shape.so.*"
+FILES_libxcb-shm = "${libdir}/libxcb-shm.so.*"
+FILES_libxcb-sync = "${libdir}/libxcb-sync.so.*"
+FILES_libxcb-xevie = "${libdir}/libxcb-xevie.so.*"
+FILES_libxcb-xf86dri = "${libdir}/libxcb-xf86dri.so.*"
+FILES_libxcb-xfixes = "${libdir}/libxcb-xfixes.so.*"
+FILES_libxcb-xinerama = "${libdir}/libxcb-xinerama.so.*"
+FILES_libxcb-xlib = "${libdir}/libxcb-xlib.so.*"
+FILES_libxcb-xprint = "${libdir}/libxcb-xprint.so.*"
+FILES_libxcb-xtest = "${libdir}/libxcb-xtest.so.*"
+FILES_libxcb-xv = "${libdir}/libxcb-xv.so.*"
+FILES_libxcb-xvmc = "${libdir}/libxcb-xvmc.so.*"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/xcb/libxcb_0.9.91.bb b/packages/xcb/libxcb_0.9.91.bb
index 67b3d10496..a1ab9fe143 100644
--- a/packages/xcb/libxcb_0.9.91.bb
+++ b/packages/xcb/libxcb_0.9.91.bb
@@ -1,45 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include libxcb.inc
PR = "r0"
-
-PARALLEL_MAKE = ""
-DEPENDS = "xcb-proto libxau"
-# DEPENDS += "xsltproc-native gperf-native"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.bz2"
-
-PACKAGES =+ "libxcb-composite libxcb-damage libxcb-dpms libxcb-glx \
- libxcb-randr libxcb-record libxcb-render libxcb-res \
- libxcb-screensaver libxcb-shape libxcb-shm libxcb-sync \
- libxcb-xevie libxcb-xf86dri libxcb-xfixes libxcb-xprint \
- libxcb-xtest libxcb-xv libxcb-xvmc libxcb"
-
-FILES_${PN} = "${libdir}/libxcb.so.*"
-#FILES_${PN}-dev = "${libdir}/libxcb.* ${libdir}/pkgconfig/*.pc ${includedir}/xcb/*.h"
-FILES_libxcb-composite = "${libdir}/libxcb-composite.so*"
-FILES_libxcb-damage = "${libdir}/libxcb-damage.so.*"
-FILES_libxcb-dpms = "${libdir}/libxcb-dpms.so.*"
-FILES_libxcb-glx = "${libdir}/libxcb-glx.so.*"
-FILES_libxcb-randr = "${libdir}/libxcb-randr.so.*"
-FILES_libxcb-record = "${libdir}/libxcb-record.so.*"
-FILES_libxcb-render = "${libdir}/libxcb-render.so.*"
-FILES_libxcb-res = "${libdir}/libxcb-res.so.*"
-FILES_libxcb-screensaver = "${libdir}/libxcb-screensaver.so.*"
-FILES_libxcb-shape = "${libdir}/libxcb-shape.so.*"
-FILES_libxcb-shm = "${libdir}/libxcb-shm.so.*"
-FILES_libxcb-sync = "${libdir}/libxcb-sync.so.*"
-FILES_libxcb-xevie = "${libdir}/libxcb-xevie.so.*"
-FILES_libxcb-xf86dri = "${libdir}/libxcb-xf86dri.so.*"
-FILES_libxcb-xfixes = "${libdir}/libxcb-xfixes.so.*"
-FILES_libxcb-xprint = "${libdir}/libxcb-xprint.so.*"
-FILES_libxcb-xtest = "${libdir}/libxcb-xtest.so.*"
-FILES_libxcb-xv = "${libdir}/libxcb-xv.so.*"
-FILES_libxcb-xvmc = "${libdir}/libxcb-xvmc.so.*"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/xcb/libxcb_0.9.92.bb b/packages/xcb/libxcb_0.9.92.bb
index 26eea1d576..a1ab9fe143 100644
--- a/packages/xcb/libxcb_0.9.92.bb
+++ b/packages/xcb/libxcb_0.9.92.bb
@@ -1,46 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include libxcb.inc
PR = "r0"
-
-PARALLEL_MAKE = ""
-DEPENDS = "xcb-proto libxau"
-# DEPENDS += "xsltproc-native gperf-native"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-${PV}.tar.bz2"
-
-PACKAGES =+ "libxcb-composite libxcb-damage libxcb-dpms libxcb-glx \
- libxcb-randr libxcb-record libxcb-render libxcb-res \
- libxcb-screensaver libxcb-shape libxcb-shm libxcb-sync \
- libxcb-xevie libxcb-xf86dri libxcb-xfixes libxcb-xlib \
- libxcb-xprint libxcb-xtest libxcb-xv libxcb-xvmc"
-
-FILES_${PN} = "${libdir}/libxcb.so.*"
-#FILES_${PN}-dev = "${libdir}/libxcb.* ${libdir}/pkgconfig/*.pc ${includedir}/xcb/*.h"
-FILES_libxcb-composite = "${libdir}/libxcb-composite.so*"
-FILES_libxcb-damage = "${libdir}/libxcb-damage.so.*"
-FILES_libxcb-dpms = "${libdir}/libxcb-dpms.so.*"
-FILES_libxcb-glx = "${libdir}/libxcb-glx.so.*"
-FILES_libxcb-randr = "${libdir}/libxcb-randr.so.*"
-FILES_libxcb-record = "${libdir}/libxcb-record.so.*"
-FILES_libxcb-render = "${libdir}/libxcb-render.so.*"
-FILES_libxcb-res = "${libdir}/libxcb-res.so.*"
-FILES_libxcb-screensaver = "${libdir}/libxcb-screensaver.so.*"
-FILES_libxcb-shape = "${libdir}/libxcb-shape.so.*"
-FILES_libxcb-shm = "${libdir}/libxcb-shm.so.*"
-FILES_libxcb-sync = "${libdir}/libxcb-sync.so.*"
-FILES_libxcb-xevie = "${libdir}/libxcb-xevie.so.*"
-FILES_libxcb-xf86dri = "${libdir}/libxcb-xf86dri.so.*"
-FILES_libxcb-xfixes = "${libdir}/libxcb-xfixes.so.*"
-FILES_libxcb-xlib = "${libdir}/libxcb-xlib.so.*"
-FILES_libxcb-xprint = "${libdir}/libxcb-xprint.so.*"
-FILES_libxcb-xtest = "${libdir}/libxcb-xtest.so.*"
-FILES_libxcb-xv = "${libdir}/libxcb-xv.so.*"
-FILES_libxcb-xvmc = "${libdir}/libxcb-xvmc.so.*"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/xcb/libxcb_0.9.93.bb b/packages/xcb/libxcb_0.9.93.bb
new file mode 100644
index 0000000000..b74243e898
--- /dev/null
+++ b/packages/xcb/libxcb_0.9.93.bb
@@ -0,0 +1,4 @@
+include libxcb.inc
+PR = "r2"
+
+PACKAGES =+ "libxcb-xinerama"
diff --git a/packages/xcb/libxcb_1.0.bb b/packages/xcb/libxcb_1.0.bb
new file mode 100644
index 0000000000..dd88a5390f
--- /dev/null
+++ b/packages/xcb/libxcb_1.0.bb
@@ -0,0 +1,6 @@
+include libxcb.inc
+PR = "r0"
+
+DEPENDS += "libpthread-stubs"
+
+PACKAGES =+ "libxcb-xinerama"
diff --git a/packages/xcb/libxcb_git.bb b/packages/xcb/libxcb_git.bb
index e6b42c1a31..cb7326efa0 100644
--- a/packages/xcb/libxcb_git.bb
+++ b/packages/xcb/libxcb_git.bb
@@ -1,77 +1,12 @@
DEFAULT_PREFERENCE = "-1"
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
-PV = "0.9+git"
+include libxcb.inc
+PV = "1.0+git"
PR = "r0"
-PARALLEL_MAKE = ""
-
-
-DEPENDS = "xcb-proto xproto libxau"
-# DEPENDS += "xsltproc-native gperf-native"
+DEPENDS += "libpthread-stubs"
SRC_URI = "git://anongit.freedesktop.org/git/xcb;protocol=git"
S = "${WORKDIR}/git/xcb"
-PACKAGES = "libxcb libxcb-dev libxcbcomposite libxcbcomposite-dev \
- libxcbdamage libxcbdamage-dev libxcbdpms libxcbdpms-dev \
- libxcbglx libxcbglx-dev libxcbrandr libxcbrandr-dev \
- libxcbrecord libxcbrecord-dev libxcbrender libxcbrender-dev \
- libxcbres libxcbres-dev libxcbscreensaver libxcbscreensaver-dev \
- libxcbshape libxcbshape-dev libxcbshm libxcbshm-dev \
- libxcbsync libxcbsync-dev libxcbxevie libxcbxevie-dev \
- libxcbxf86dri libxcbxf86dri-dev libxcbxfixes libxcbxfixes-dev \
- libxcbxprint libxcbxprint-dev libxcbxtest libxcbxtest-dev \
- libxcbxv libxcbxv-dev libxcbxvmc libxcbxvmc-dev"
-
-FILES_${PN} = "${libdir}/libXCB.so.*"
-FILES_${PN}-dev = "${libdir}/libXCB.* ${libdir}/pkgconfig/xcb.pc ${includedir}/X11/XCB/xcb.h ${includedir}/X11/XCB/xcb_types.h \
- ${includedir}/X11/XCB/xc_misc.h ${includedir}/X11/XCB/bigreq.h ${includedir}/X11/XCB/xproto.h \
- ${includedir}/X11/XCB/xcbxlib.h ${includedir}/X11/XCB/xcbext.h"
-FILES_libxcbcomposite = "${libdir}/libXCBcomposite.so*"
-FILES_libxcbcomposite-dev = "${libdir}/libXCBcomposite.* ${libdir}/pkgconfig/xcb-composite.pc ${includedir}/X11/XCB/composite.h"
-FILES_libxcbdamage = "${libdir}/libXCBdamage.so.*"
-FILES_libxcbdamage-dev = "${libdir}/libXCBdamage.* ${libdir}/pkgconfig/xcb-damage.pc ${includedir}/X11/XCB/damage.h"
-FILES_libxcbdpms = "${libdir}/libXCBdpms.so.*"
-FILES_libxcbdpms-dev = "${libdir}/libXCBdpms.* ${libdir}/pkgconfig/xcb-dpms.pc ${includedir}/X11/XCB/dpms.h"
-FILES_libxcbglx = "${libdir}/libXCBglx.so.*"
-FILES_libxcbglx-dev = "${libdir}/libXCBglx.* ${libdir}/pkgconfig/xcb-glx.pc ${includedir}/X11/XCB/glx.h"
-FILES_libxcbrandr = "${libdir}/libXCBrandr.so.*"
-FILES_libxcbrandr-dev = "${libdir}/libXCBrandr.* ${libdir}/pkgconfig/xcb-randr.pc ${includedir}/X11/XCB/randr.h"
-FILES_libxcbrecord = "${libdir}/libXCBrecord.so.*"
-FILES_libxcbrecord-dev = "${libdir}/libXCBrecord.* ${libdir}/pkgconfig/xcb-record.pc ${includedir}/X11/XCB/record.h"
-FILES_libxcbrender = "${libdir}/libXCBrender.so.*"
-FILES_libxcbrender-dev = "${libdir}/libXCBrender.* ${libdir}/pkgconfig/xcb-render.pc ${includedir}/X11/XCB/render.h"
-FILES_libxcbres = "${libdir}/libXCBres.so.*"
-FILES_libxcbres-dev = "${libdir}/libXCBres.* ${libdir}/pkgconfig/xcb-res.pc ${includedir}/X11/XCB/res.h"
-FILES_libxcbscreensaver = "${libdir}/libXCBscreensaver.so.*"
-FILES_libxcbscreensaver-dev = "${libdir}/libXCBscreensaver.* ${libdir}/pkgconfig/xcb-screensaver.pc ${includedir}/X11/XCB/screensaver.h"
-FILES_libxcbshape = "${libdir}/libXCBshape.so.*"
-FILES_libxcbshape-dev = "${libdir}/libXCBshape.* ${libdir}/pkgconfig/xcb-shape.pc ${includedir}/X11/XCB/shape.h"
-FILES_libxcbshm = "${libdir}/libXCBshm.so.*"
-FILES_libxcbshm-dev = "${libdir}/libXCBshm.* ${libdir}/pkgconfig/xcb-shm.pc ${includedir}/X11/XCB/shm.h"
-FILES_libxcbsync = "${libdir}/libXCBsync.so.*"
-FILES_libxcbsync-dev = "${libdir}/libXCBsync.* ${libdir}/pkgconfig/xcb-sync.pc ${includedir}/X11/XCB/sync.h"
-FILES_libxcbxevie = "${libdir}/libXCBxevie.so.*"
-FILES_libxcbxevie-dev = "${libdir}/libXCBxevie.* ${libdir}/pkgconfig/xcb-xevie.pc ${includedir}/X11/XCB/xevie.h"
-FILES_libxcbxf86dri = "${libdir}/libXCBxf86dri.so.*"
-FILES_libxcbxf86dri-dev = "${libdir}/libXCBxf86dri.* ${libdir}/pkgconfig/xcb-xf86dri.pc ${includedir}/X11/XCB/xf86dri.h"
-FILES_libxcbxfixes = "${libdir}/libXCBxfixes.so.*"
-FILES_libxcbxfixes-dev = "${libdir}/libXCBxfixes.* ${libdir}/pkgconfig/xcb-xfixes.pc ${includedir}/X11/XCB/xfixes.h"
-FILES_libxcbxprint = "${libdir}/libXCBxprint.so.*"
-FILES_libxcbxprint-dev = "${libdir}/libXCBxprint.* ${libdir}/pkgconfig/xcb-xprint.pc ${includedir}/X11/XCB/xprint.h"
-FILES_libxcbxtest = "${libdir}/libXCBxtest.so.*"
-FILES_libxcbxtest-dev = "${libdir}/libXCBxtest.* ${libdir}/pkgconfig/xcb-xtest.pc ${includedir}/X11/XCB/xtest.h"
-FILES_libxcbxv = "${libdir}/libXCBxv.so.*"
-FILES_libxcbxv-dev = "${libdir}/libXCBxv.* ${libdir}/pkgconfig/xcb-xv.pc ${includedir}/X11/XCB/xv.h"
-FILES_libxcbxvmc = "${libdir}/libXCBxvmc.so.*"
-FILES_libxcbxvmc-dev = "${libdir}/libXCBxvmc.* ${libdir}/pkgconfig/xcb-xvmc.pc ${includedir}/X11/XCB/xvmc.h"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
+PACKAGES =+ "libxcb-xinerama"
diff --git a/packages/xcb/xcb-proto.inc b/packages/xcb/xcb-proto.inc
new file mode 100644
index 0000000000..ca477f36d3
--- /dev/null
+++ b/packages/xcb/xcb-proto.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "XCB: an X protocol C binding"
+SECTION = "x11/libs"
+LICENSE = "MIT-X"
+HOMEPAGE = "http://xcb.freedesktop.org"
+
+SRC_URI = "http://xcb.freedesktop.org/dist/xcb-proto-${PV}.tar.bz2"
+
+inherit autotools pkgconfig
+
+FILES_${PN}-dev += "${datadir}/xcb/*.xml"
+
+do_stage() {
+ oe_runmake DESTDIR="${D}" install
+ mkdir -p ${STAGING_LIBDIR}/pkgconfig
+ install ${D}${libdir}/pkgconfig/xcb-proto.pc ${STAGING_LIBDIR}/pkgconfig
+ mkdir -p ${STAGING_DATADIR}/xcb
+ install ${D}${datadir}/xcb/*.xml ${STAGING_DATADIR}/xcb
+}
diff --git a/packages/xcb/xcb-proto_0.9.91.bb b/packages/xcb/xcb-proto_0.9.91.bb
index 2c3c885627..7ca4463402 100644
--- a/packages/xcb/xcb-proto_0.9.91.bb
+++ b/packages/xcb/xcb-proto_0.9.91.bb
@@ -1,19 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include xcb-proto.inc
PR = "r0"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/xcb-proto-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-FILES_${PN}-dev += "${datadir}/xcb/*.xml"
-
-do_stage() {
- oe_runmake DESTDIR="${D}" install
- mkdir -p ${STAGING_LIBDIR}/pkgconfig
- install ${D}${libdir}/pkgconfig/xcb-proto.pc ${STAGING_LIBDIR}/pkgconfig
- mkdir -p ${STAGING_DATADIR}/xcb
- install ${D}${datadir}/xcb/*.xml ${STAGING_DATADIR}/xcb
-}
diff --git a/packages/xcb/xcb-proto_0.9.92.bb b/packages/xcb/xcb-proto_0.9.92.bb
index f7f4160d5b..7ca4463402 100644
--- a/packages/xcb/xcb-proto_0.9.92.bb
+++ b/packages/xcb/xcb-proto_0.9.92.bb
@@ -1,19 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include xcb-proto.inc
PR = "r0"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/xcb-proto-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-FILES_${PN}-dev += "${datadir}/xcb/*.xml ${datadir}/xcb/xcb.xsd"
-
-do_stage() {
- oe_runmake DESTDIR="${D}" install
- mkdir -p ${STAGING_LIBDIR}/pkgconfig
- install ${D}${libdir}/pkgconfig/xcb-proto.pc ${STAGING_LIBDIR}/pkgconfig
- mkdir -p ${STAGING_DATADIR}/xcb
- install ${D}${datadir}/xcb/*.xml ${STAGING_DATADIR}/xcb
-}
diff --git a/packages/xcb/xcb-proto_0.9.93.bb b/packages/xcb/xcb-proto_0.9.93.bb
new file mode 100644
index 0000000000..7ca4463402
--- /dev/null
+++ b/packages/xcb/xcb-proto_0.9.93.bb
@@ -0,0 +1,2 @@
+include xcb-proto.inc
+PR = "r0"
diff --git a/packages/xcb/xcb-proto_0.9.bb b/packages/xcb/xcb-proto_0.9.bb
index 853da9cc5a..b483c426d3 100644
--- a/packages/xcb/xcb-proto_0.9.bb
+++ b/packages/xcb/xcb-proto_0.9.bb
@@ -1,13 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include xcb-proto.bb
PR = "r0"
-
-SRC_URI = "http://xcb.freedesktop.org/dist/xcb-proto-0.9.tar.bz2"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
diff --git a/packages/xcb/xcb-proto_1.0.bb b/packages/xcb/xcb-proto_1.0.bb
new file mode 100644
index 0000000000..7ca4463402
--- /dev/null
+++ b/packages/xcb/xcb-proto_1.0.bb
@@ -0,0 +1,2 @@
+include xcb-proto.inc
+PR = "r0"
diff --git a/packages/xcb/xcb-proto_git.bb b/packages/xcb/xcb-proto_git.bb
index e7dcf61de1..26b6ce7d01 100644
--- a/packages/xcb/xcb-proto_git.bb
+++ b/packages/xcb/xcb-proto_git.bb
@@ -1,17 +1,13 @@
DEFAULT_PREFERENCE = "-1"
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
-PV = "0.9+git"
+include xcb-proto.inc
+PV = "1.0+git"
PR = "r0"
SRC_URI = "git://anongit.freedesktop.org/git/xcb;protocol=git"
S = "${WORKDIR}/git/xcb-proto"
-inherit autotools pkgconfig
-
do_stage() {
autotools_stage_all
}
+
diff --git a/packages/xcb/xcb-util.inc b/packages/xcb/xcb-util.inc
new file mode 100644
index 0000000000..4509a2b52b
--- /dev/null
+++ b/packages/xcb/xcb-util.inc
@@ -0,0 +1,31 @@
+DESCRIPTION = "XCB: an X protocol C binding"
+SECTION = "x11/libs"
+LICENSE = "MIT-X"
+HOMEPAGE = "http://xcb.freedesktop.org"
+
+DEPENDS = "libxcb"
+# DEPENDS += "gperf-native"
+
+PARALLEL_MAKE = ""
+
+SRC_URI = "http://xcb.freedesktop.org/dist/xcb-util-${PV}.tar.bz2"
+
+PACKAGES =+ "libxcbatom libxcbaux libxcbevent libxcbicccm \
+ libxcbimage libxcbkeysyms libxcbproperty \
+ libxcbreply libxcbwm"
+
+FILES_libxcbatom = "${libdir}/libXCBAtom.so.*"
+FILES_libxcbaux = "${libdir}/libXCBAux.so.*"
+FILES_libxcbevent = "${libdir}/libXCBEvent.so.*"
+FILES_libxcbicccm = "${libdir}/libXCBICCCM.so.*"
+FILES_libxcbimage = "${libdir}/libXCBImage.so.*"
+FILES_libxcbkeysyms = "${libdir}/libXCBKeysyms.so.*"
+FILES_libxcbproperty = "${libdir}/libXCBProperty.so.*"
+FILES_libxcbreply = "${libdir}/libXCBReply.so.*"
+FILES_libxcbwm = "${libdir}/libXCBWM.so.*"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/xcb/xcb-util_0.1.bb b/packages/xcb/xcb-util_0.1.bb
index e7db2271ea..5f3057f489 100644
--- a/packages/xcb/xcb-util_0.1.bb
+++ b/packages/xcb/xcb-util_0.1.bb
@@ -1,41 +1,2 @@
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
+include xcb-util.inc
PR = "r0"
-
-DEPENDS = "libxcb"
-# DEPENDS += "gperf-native"
-
-PARALLEL_MAKE = ""
-
-SRC_URI = "http://xcb.freedesktop.org/dist/xcb-util-0.1.tar.bz2"
-
-PACKAGES = "libxcbatom libxcbatom-dev libxcbaux libxcbaux-dev libxcbevent libxcbevent-dev libxcbicccm libxcbicccm-dev \
- libxcbimage libxcbimage-dev libxcbkeysyms libxcbkeysyms-dev libxcbproperty libxcbproperty-dev \
- libxcbreply libxcbreply-dev libxcbwm libxcbwm-dev"
-
-FILES_libxcbatom = "${libdir}/libXCBAtom.so.*"
-FILES_libxcbatom-dev = "${libdir}/libXCBAtom.* ${libdir}/pkgconfig/xcb-atom.pc ${includedir}/X11/XCB/xcb_atom.h"
-FILES_libxcbaux = "${libdir}/libXCBAux.so.*"
-FILES_libxcbaux-dev = "${libdir}/libXCBAux.* ${libdir}/pkgconfig/xcb-aux.pc ${includedir}/X11/XCB/xcb_aux.h"
-FILES_libxcbevent = "${libdir}/libXCBEvent.so.*"
-FILES_libxcbevent-dev = "${libdir}/libXCBEvent.* ${libdir}/pkgconfig/xcb-event.pc ${includedir}/X11/XCB/xcb_event.h"
-FILES_libxcbicccm = "${libdir}/libXCBICCCM.so.*"
-FILES_libxcbicccm-dev = "${libdir}/libICCCM.* ${libdir}/pkgconfig/xcb-icccm.pc ${includedir}/X11/XCB/xcb_icccm.h"
-FILES_libxcbimage = "${libdir}/libXCBImage.so.*"
-FILES_libxcbimage-dev = "${libdir}/libXCBImage.* ${libdir}/pkgconfig/xcb-image.pc ${includedir}/X11/XCB/xcb_image.h"
-FILES_libxcbkeysyms = "${libdir}/libXCBKeysyms.so.*"
-FILES_libxcbkeysyms-dev = "${libdir}/libXCBKeysyms.* ${libdir}/pkgconfig/xcb-keysyms.pc ${includedir}/X11/XCB/xcb_keysyms.h"
-FILES_libxcbproperty = "${libdir}/libXCBProperty.so.*"
-FILES_libxcbproperty-dev = "${libdir}/libXCBProperty.* ${libdir}/pkgconfig/xcb-property.pc ${includedir}/X11/XCB/xcb_property.h"
-FILES_libxcbreply = "${libdir}/libXCBReply.so.*"
-FILES_libxcbreply-dev = "${libdir}/libXCBReply.* ${libdir}/pkgconfig/xcb-reply.pc ${includedir}/X11/XCB/xcb_reply.h"
-FILES_libxcbwm = "${libdir}/libXCBWM.so.*"
-FILES_libxcbwm-dev = "${libdir}/libXCBWM.* ${libdir}/pkgconfig/xcb-wm.pc ${includedir}/X11/XCB/xcb_wm.h"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/xcb/xcb-util_0.2.bb b/packages/xcb/xcb-util_0.2.bb
new file mode 100644
index 0000000000..5f3057f489
--- /dev/null
+++ b/packages/xcb/xcb-util_0.2.bb
@@ -0,0 +1,2 @@
+include xcb-util.inc
+PR = "r0"
diff --git a/packages/xcb/xcb-util_git.bb b/packages/xcb/xcb-util_git.bb
index 9065c62d15..8806081b75 100644
--- a/packages/xcb/xcb-util_git.bb
+++ b/packages/xcb/xcb-util_git.bb
@@ -1,45 +1,8 @@
DEFAULT_PREFERENCE = "-1"
-DESCRIPTION = "XCB: an X protocol C binding"
-SECTION = "x11/libs"
-LICENSE = "MIT-X"
-HOMEPAGE = "http://xcb.freedesktop.org"
-PV = "0.1+git"
+include xcb-util.inc
+PV = "0.2+git"
PR = "r0"
-DEPENDS = "libxcb"
-# DEPENDS += "gperf-native"
-
-PARALLEL_MAKE = ""
-
SRC_URI = "git://anongit.freedesktop.org/git/xcb;protocol=git"
S = "${WORKDIR}/git/xcb-util"
-
-PACKAGES = "libxcbatom libxcbatom-dev libxcbaux libxcbaux-dev libxcbevent libxcbevent-dev libxcbicccm libxcbicccm-dev \
- libxcbimage libxcbimage-dev libxcbkeysyms libxcbkeysyms-dev libxcbproperty libxcbproperty-dev \
- libxcbreply libxcbreply-dev libxcbwm libxcbwm-dev"
-
-FILES_libxcbatom = "${libdir}/libXCBAtom.so.*"
-FILES_libxcbatom-dev = "${libdir}/libXCBAtom.* ${libdir}/pkgconfig/xcb-atom.pc ${includedir}/X11/XCB/xcb_atom.h"
-FILES_libxcbaux = "${libdir}/libXCBAux.so.*"
-FILES_libxcbaux-dev = "${libdir}/libXCBAux.* ${libdir}/pkgconfig/xcb-aux.pc ${includedir}/X11/XCB/xcb_aux.h"
-FILES_libxcbevent = "${libdir}/libXCBEvent.so.*"
-FILES_libxcbevent-dev = "${libdir}/libXCBEvent.* ${libdir}/pkgconfig/xcb-event.pc ${includedir}/X11/XCB/xcb_event.h"
-FILES_libxcbicccm = "${libdir}/libXCBICCCM.so.*"
-FILES_libxcbicccm-dev = "${libdir}/libICCCM.* ${libdir}/pkgconfig/xcb-icccm.pc ${includedir}/X11/XCB/xcb_icccm.h"
-FILES_libxcbimage = "${libdir}/libXCBImage.so.*"
-FILES_libxcbimage-dev = "${libdir}/libXCBImage.* ${libdir}/pkgconfig/xcb-image.pc ${includedir}/X11/XCB/xcb_image.h"
-FILES_libxcbkeysyms = "${libdir}/libXCBKeysyms.so.*"
-FILES_libxcbkeysyms-dev = "${libdir}/libXCBKeysyms.* ${libdir}/pkgconfig/xcb-keysyms.pc ${includedir}/X11/XCB/xcb_keysyms.h"
-FILES_libxcbproperty = "${libdir}/libXCBProperty.so.*"
-FILES_libxcbproperty-dev = "${libdir}/libXCBProperty.* ${libdir}/pkgconfig/xcb-property.pc ${includedir}/X11/XCB/xcb_property.h"
-FILES_libxcbreply = "${libdir}/libXCBReply.so.*"
-FILES_libxcbreply-dev = "${libdir}/libXCBReply.* ${libdir}/pkgconfig/xcb-reply.pc ${includedir}/X11/XCB/xcb_reply.h"
-FILES_libxcbwm = "${libdir}/libXCBWM.so.*"
-FILES_libxcbwm-dev = "${libdir}/libXCBWM.* ${libdir}/pkgconfig/xcb-wm.pc ${includedir}/X11/XCB/xcb_wm.h"
-
-inherit autotools pkgconfig
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/xchat/xchat_2.6.0.bb b/packages/xchat/xchat_2.6.0.bb
deleted file mode 100644
index 378a189db9..0000000000
--- a/packages/xchat/xchat_2.6.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Full-featured IRC chat client with scripting support"
-LICENSE = "GPL"
-HOMEPAGE = "http://www.xchat.org"
-SECTION = "x11/network"
-DEPENDS = "libgcrypt zlib gtk+"
-PR = "r1"
-
-SRC_URI = "http://www.xchat.org/files/source/2.6/xchat-${PV}.tar.bz2"
-
-inherit autotools
-EXTRA_OECONF = " --disable-perl --disable-python "
-
diff --git a/packages/xchat/xchat_2.6.1.bb b/packages/xchat/xchat_2.6.1.bb
index ec058067c5..fc362a9c41 100644
--- a/packages/xchat/xchat_2.6.1.bb
+++ b/packages/xchat/xchat_2.6.1.bb
@@ -3,10 +3,11 @@ LICENSE = "GPL"
HOMEPAGE = "http://www.xchat.org"
SECTION = "x11/network"
DEPENDS = "libgcrypt zlib gtk+"
-PR = "r2"
+PR = "r3"
SRC_URI = "http://www.xchat.org/files/source/2.6/xchat-${PV}.tar.bz2"
inherit autotools
EXTRA_OECONF = " --disable-perl --disable-python "
+FILES_${PN}-dbg += " /usr/lib/xchat/plugins/.debug"
diff --git a/packages/xchat/xchat_2.6.8.bb b/packages/xchat/xchat_2.6.8.bb
new file mode 100644
index 0000000000..4c6dc732d4
--- /dev/null
+++ b/packages/xchat/xchat_2.6.8.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Full-featured IRC chat client with scripting support"
+LICENSE = "GPL"
+HOMEPAGE = "http://www.xchat.org"
+SECTION = "x11/network"
+DEPENDS = "libgcrypt zlib gtk+"
+PR = "r0"
+
+SRC_URI = "http://www.xchat.org/files/source/2.6/xchat-${PV}.tar.bz2"
+
+inherit autotools
+EXTRA_OECONF = " --disable-perl --disable-python "
+
+FILES_${PN}-dbg += " /usr/lib/xchat/plugins/.debug"
diff --git a/packages/xfce-mcs-manager/xfce-mcs-manager_4.2.3.bb b/packages/xfce-mcs-manager/xfce-mcs-manager_4.2.3.bb
deleted file mode 100644
index de5cf2b012..0000000000
--- a/packages/xfce-mcs-manager/xfce-mcs-manager_4.2.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce-mcs-manager OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce-mcs-manager/xfce-mcs-manager_4.3.99.2.bb b/packages/xfce-mcs-manager/xfce-mcs-manager_4.3.99.2.bb
deleted file mode 100644
index de5cf2b012..0000000000
--- a/packages/xfce-mcs-manager/xfce-mcs-manager_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce-mcs-manager OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.3.bb b/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.3.bb
deleted file mode 100644
index 02ad97e860..0000000000
--- a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce-mcs-plugins OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.3.99.2.bb b/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.3.99.2.bb
deleted file mode 100644
index 02ad97e860..0000000000
--- a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce-mcs-plugins OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce-utils/xfce-utils_4.3.99.2.bb b/packages/xfce-utils/xfce-utils_4.3.99.2.bb
deleted file mode 100644
index 472ba68a14..0000000000
--- a/packages/xfce-utils/xfce-utils_4.3.99.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# xfce-utils OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-PR = "r2"
-require ${PN}.inc
diff --git a/packages/xfce/.mtn2git_empty b/packages/xfce/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xfce/.mtn2git_empty
diff --git a/packages/xfce/exo_0.3.2.bb b/packages/xfce/exo_0.3.2.bb
new file mode 100644
index 0000000000..6bf0e1292f
--- /dev/null
+++ b/packages/xfce/exo_0.3.2.bb
@@ -0,0 +1,17 @@
+
+DEPENDS = "libxfce4util xfce-mcs-manager hal liburi-perl-native python-native"
+
+inherit pkgconfig xfce
+
+SRC_URI = "http://www.us.xfce.org/archive/xfce-4.4.1/src/exo-0.3.2.tar.bz2"
+
+# Note: Python checking is broken
+
+do_stage() {
+ autotools_stage_all
+}
+
+FILES_${PN} += "${datadir}/xfce4/ \
+ ${libdir}/xfce4/mcs-plugins/exo-preferred-applications-settings.so"
+FILES_${PN}-dev += "${libdir}/xfce4/mcs-plugins/exo-preferred-applications-settings.*"
+FILES_${PN}-dbg += "${libdir}/xfce4/mcs-plugins/.debug/exo-preferred-applications-settings.*"
diff --git a/packages/xfce/gtk-xfce-engine_2.4.1.bb b/packages/xfce/gtk-xfce-engine_2.4.1.bb
new file mode 100644
index 0000000000..bcfecaf53b
--- /dev/null
+++ b/packages/xfce/gtk-xfce-engine_2.4.1.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "XFCE theme for GTK"
+
+inherit xfce
+
+SRC_URI = "http://www.us.xfce.org/archive/xfce-4.4.1/src/gtk-xfce-engine-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/gtk-2.0/*/engines/libxfce.so \
+ ${datadir}/themes/"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug"
diff --git a/packages/libxfce4mcs/libxfce4mcs.inc b/packages/xfce/libxfce4mcs.inc
index 19268fc9b3..19268fc9b3 100644
--- a/packages/libxfce4mcs/libxfce4mcs.inc
+++ b/packages/xfce/libxfce4mcs.inc
diff --git a/packages/libxfce4mcs/libxfce4mcs_4.2.2.bb b/packages/xfce/libxfce4mcs_4.4.1.bb
index 07d7a95ae1..07d7a95ae1 100644
--- a/packages/libxfce4mcs/libxfce4mcs_4.2.2.bb
+++ b/packages/xfce/libxfce4mcs_4.4.1.bb
diff --git a/packages/xfce/libxfce4util.inc b/packages/xfce/libxfce4util.inc
new file mode 100644
index 0000000000..d5dd6d6565
--- /dev/null
+++ b/packages/xfce/libxfce4util.inc
@@ -0,0 +1,26 @@
+# libxfce4util OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION = "Basic utility library for Xfce4"
+SECTION = "x11/libs"
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 xfce4-dev-tools"
+
+inherit xfce pkgconfig
+
+MACROS="m4/X11.m4 m4/debug.m4 m4/depends.m4 m4/i18n.m4"
+
+do_stage() {
+ install -d ${STAGING_LIBDIR} ${STAGING_INCDIR}/libxfce4util
+ # The line below expands to the list of headers that native makefile
+ # would install. Complain and/or fix if it's not portable enough
+ for file in $(eval $(make -n -C libxfce4util install|grep "^list='[^.]\\+.h"|cut -d\; -f1); echo $list); do
+ install -m 644 libxfce4util/$file ${STAGING_INCDIR}/libxfce4util
+ done
+
+ oe_libinstall -C libxfce4util -so libxfce4util ${STAGING_LIBDIR}
+
+}
+
+FILES_${PN}-dev += " ${datadir}/xfce4/m4"
diff --git a/packages/xfce/libxfce4util_4.4.1.bb b/packages/xfce/libxfce4util_4.4.1.bb
new file mode 100644
index 0000000000..70f5ddac93
--- /dev/null
+++ b/packages/xfce/libxfce4util_4.4.1.bb
@@ -0,0 +1,5 @@
+# libxfce4util OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+require ${PN}.inc
diff --git a/packages/libxfcegui4/libxfcegui4.inc b/packages/xfce/libxfcegui4.inc
index 714e365af4..714e365af4 100644
--- a/packages/libxfcegui4/libxfcegui4.inc
+++ b/packages/xfce/libxfcegui4.inc
diff --git a/packages/libxfcegui4/libxfcegui4_4.2.2.bb b/packages/xfce/libxfcegui4_4.4.1.bb
index 2def53685a..2def53685a 100644
--- a/packages/libxfcegui4/libxfcegui4_4.2.2.bb
+++ b/packages/xfce/libxfcegui4_4.4.1.bb
diff --git a/packages/xfce/mousepad_0.2.12.bb b/packages/xfce/mousepad_0.2.12.bb
new file mode 100644
index 0000000000..670a28dbd7
--- /dev/null
+++ b/packages/xfce/mousepad_0.2.12.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Text editor for Xfce based on Leafpad"
+DEPENDS = "libxfce4util xfce-mcs-manager hal liburi-perl-native python-native"
+
+inherit xfce
+
+SRC_URI = "http://www.us.xfce.org/archive/xfce-4.4.1/src/mousepad-${PV}.tar.bz2"
diff --git a/packages/xfce/orage_4.4.1.bb b/packages/xfce/orage_4.4.1.bb
new file mode 100644
index 0000000000..b8f5284454
--- /dev/null
+++ b/packages/xfce/orage_4.4.1.bb
@@ -0,0 +1,5 @@
+DESCRIPTION = "Calendar application for the Xfce Desktop Environment"
+DEPENDS = "libxfcegui4 exo libxml-parser-perl-native xfce4-panel xfce-mcs-manager"
+RREPLACES = "xfcalendar"
+
+inherit xfce
diff --git a/packages/xfce/thunar_0.8.0.bb b/packages/xfce/thunar_0.8.0.bb
new file mode 100644
index 0000000000..ea739e4cde
--- /dev/null
+++ b/packages/xfce/thunar_0.8.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "File manager for the Xfce Desktop Environment"
+DEPENDS = "libxfcegui4 exo dbus-glib libexif xfce4-panel libice libsm"
+
+inherit xfce
+
+SRC_URI = "http://thunar.xfce.org/download/sources/Thunar/0.8.0/Thunar-0.8.0.tar.bz2"
+
+S = "${WORKDIR}/Thunar-${PV}/"
+
+FILES_${PN} += "${libdir}/thunarx-1/*.so \
+ ${datadir}/dbus-1 \
+ ${datadir}/thumbnailers \
+ ${datadir}/Thunar \
+ ${datadir}/xfce4"
+FILES_${PN}-dbg += "${libdir}/thunarx-1/.debug/"
diff --git a/packages/xfce-mcs-manager/xfce-mcs-manager.inc b/packages/xfce/xfce-mcs-manager.inc
index c50bf0ca64..c50bf0ca64 100644
--- a/packages/xfce-mcs-manager/xfce-mcs-manager.inc
+++ b/packages/xfce/xfce-mcs-manager.inc
diff --git a/packages/xfce-mcs-manager/xfce-mcs-manager_4.2.2.bb b/packages/xfce/xfce-mcs-manager_4.4.1.bb
index de5cf2b012..de5cf2b012 100644
--- a/packages/xfce-mcs-manager/xfce-mcs-manager_4.2.2.bb
+++ b/packages/xfce/xfce-mcs-manager_4.4.1.bb
diff --git a/packages/xfce-mcs-plugins/xfce-mcs-plugins.inc b/packages/xfce/xfce-mcs-plugins.inc
index b5b4505e98..b5b4505e98 100644
--- a/packages/xfce-mcs-plugins/xfce-mcs-plugins.inc
+++ b/packages/xfce/xfce-mcs-plugins.inc
diff --git a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.2.bb b/packages/xfce/xfce-mcs-plugins_4.4.1.bb
index 02ad97e860..02ad97e860 100644
--- a/packages/xfce-mcs-plugins/xfce-mcs-plugins_4.2.2.bb
+++ b/packages/xfce/xfce-mcs-plugins_4.4.1.bb
diff --git a/packages/xfce/xfce-terminal_0.2.6.bb b/packages/xfce/xfce-terminal_0.2.6.bb
new file mode 100644
index 0000000000..07a8eb6eb5
--- /dev/null
+++ b/packages/xfce/xfce-terminal_0.2.6.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "Terminal emulator for the Xfce desktop environment"
+DEPENDS = "exo vte dbus-glib gtk+"
+
+inherit xfce
+
+SRC_URI = "http://www.us.xfce.org/archive/xfce-4.4.1/src/Terminal-${PV}.tar.bz2"
+
+S = "${WORKDIR}/Terminal-${PV}"
diff --git a/packages/xfce-utils/xfce-utils.inc b/packages/xfce/xfce-utils.inc
index 0b191194d7..0b191194d7 100644
--- a/packages/xfce-utils/xfce-utils.inc
+++ b/packages/xfce/xfce-utils.inc
diff --git a/packages/xfce-utils/xfce-utils_4.2.2.bb b/packages/xfce/xfce-utils_4.4.1.bb
index 57909f2c2d..57909f2c2d 100644
--- a/packages/xfce-utils/xfce-utils_4.2.2.bb
+++ b/packages/xfce/xfce-utils_4.4.1.bb
diff --git a/packages/xfce4-goodies/xfce4-appfinder.inc b/packages/xfce/xfce4-appfinder.inc
index 0d102f3bd0..0d102f3bd0 100644
--- a/packages/xfce4-goodies/xfce4-appfinder.inc
+++ b/packages/xfce/xfce4-appfinder.inc
diff --git a/packages/xfce4-goodies/xfce4-appfinder_4.2.2.bb b/packages/xfce/xfce4-appfinder_4.4.1.bb
index f7c97970d5..f7c97970d5 100644
--- a/packages/xfce4-goodies/xfce4-appfinder_4.2.2.bb
+++ b/packages/xfce/xfce4-appfinder_4.4.1.bb
diff --git a/packages/xfce/xfce4-dev-tools.inc b/packages/xfce/xfce4-dev-tools.inc
new file mode 100644
index 0000000000..03f64e39e5
--- /dev/null
+++ b/packages/xfce/xfce4-dev-tools.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Xfce4 development tools"
+SECTION = "x11/libs"
+LICENSE = "GPL"
+
+inherit xfce pkgconfig
+
+do_stage() {
+ install -d ${STAGING_DATADIR}/aclocal
+ install -m 644 m4macros/*.m4 ${STAGING_DATADIR}/aclocal/
+}
+
+FILES_${PN}-dev += " ${datadir}/xfce4/dev-tools/m4macros/*.m4"
diff --git a/packages/xfce/xfce4-dev-tools_4.4.0.bb b/packages/xfce/xfce4-dev-tools_4.4.0.bb
new file mode 100644
index 0000000000..bd54419686
--- /dev/null
+++ b/packages/xfce/xfce4-dev-tools_4.4.0.bb
@@ -0,0 +1 @@
+require ${PN}.inc
diff --git a/packages/xfce/xfce4-icon-theme_4.4.1.bb b/packages/xfce/xfce4-icon-theme_4.4.1.bb
new file mode 100644
index 0000000000..69d9dacbac
--- /dev/null
+++ b/packages/xfce/xfce4-icon-theme_4.4.1.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "Rodent vector icon theme used by XFCE"
+PACKAGE_ARCH = "all"
+
+inherit xfce
+
+FILES_${PN} += "${datadir}/xfce4"
diff --git a/packages/xfce4-goodies/xfce4-mixer.inc b/packages/xfce/xfce4-mixer.inc
index a923489f32..a923489f32 100644
--- a/packages/xfce4-goodies/xfce4-mixer.inc
+++ b/packages/xfce/xfce4-mixer.inc
diff --git a/packages/xfce4-goodies/xfce4-mixer_4.2.2.bb b/packages/xfce/xfce4-mixer_4.4.1.bb
index 6dd3c0565b..6dd3c0565b 100644
--- a/packages/xfce4-goodies/xfce4-mixer_4.2.2.bb
+++ b/packages/xfce/xfce4-mixer_4.4.1.bb
diff --git a/packages/xfce/xfce4-panel.inc b/packages/xfce/xfce4-panel.inc
new file mode 100644
index 0000000000..dbd1baef60
--- /dev/null
+++ b/packages/xfce/xfce4-panel.inc
@@ -0,0 +1,25 @@
+# xfce4-panel OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION = "XFCE4 Panel"
+SECTION = "x11"
+DEPENDS = "startup-notification virtual/libx11 libxfcegui4 libxfce4mcs xfce-mcs-manager libxml2"
+
+inherit pkgconfig xfce
+
+EXTRA_OECONF += " --enable-startup-notification"
+
+
+do_stage() {
+autotools_stage_all
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
+
+PACKAGES += "${PN}-plugins ${PN}-mcs-plugins"
+FILES_${PN}-plugins += "${libdir}/xfce4/panel-plugins/*.so*"
+FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/"
+FILES_${PN}-dbg += "${libdir}/xfce4/mcs-plugins/.debug"
diff --git a/packages/xfce/xfce4-panel_4.4.1.bb b/packages/xfce/xfce4-panel_4.4.1.bb
new file mode 100644
index 0000000000..ae2abba28d
--- /dev/null
+++ b/packages/xfce/xfce4-panel_4.4.1.bb
@@ -0,0 +1,6 @@
+# xfce4-panel OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+PR="r2"
+require ${PN}.inc
diff --git a/packages/xfce/xfce4-session_4.4.1.bb b/packages/xfce/xfce4-session_4.4.1.bb
new file mode 100644
index 0000000000..a572b80f55
--- /dev/null
+++ b/packages/xfce/xfce4-session_4.4.1.bb
@@ -0,0 +1,4 @@
+DESCRIPTION = "Calendar application for the Xfce Desktop Environment"
+DEPENDS = "libxfcegui4 libxfce4util xfce-mcs-manager dbus"
+
+inherit xfce
diff --git a/packages/xfce/xfdesktop.inc b/packages/xfce/xfdesktop.inc
new file mode 100644
index 0000000000..50a4f488cc
--- /dev/null
+++ b/packages/xfce/xfdesktop.inc
@@ -0,0 +1,15 @@
+# xfdesktop OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION="xfce4 Desktop Background Manager"
+SECTION = "x11/base"
+DEPENDS = "virtual/libx11 libxfcegui4 libxfce4mcs libxml2 xfce4-panel"
+
+inherit xfce
+PACKAGES += "xfdesktop-backdrops ${PN}-mcs-plugins"
+
+FILES_xfdesktop-backdrops="${datadir}/xfce4/backdrops/*"
+FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/*.so"
+FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so"
+FILES_${PN}-dbg += "/usr/libexec/xfce4/panel-plugins/.debug"
diff --git a/packages/xfce/xfdesktop_4.4.1.bb b/packages/xfce/xfdesktop_4.4.1.bb
new file mode 100644
index 0000000000..9c84150180
--- /dev/null
+++ b/packages/xfce/xfdesktop_4.4.1.bb
@@ -0,0 +1,6 @@
+# xfdesktop OE build file
+# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+PR = "r2"
+require ${PN}.inc
diff --git a/packages/xfprint/xfprint_4.2.0.bb b/packages/xfce/xfprint_4.4.1.bb
index 7e349ce881..7e349ce881 100644
--- a/packages/xfprint/xfprint_4.2.0.bb
+++ b/packages/xfce/xfprint_4.4.1.bb
diff --git a/packages/xfwm4-themes/xfwm4-themes.inc b/packages/xfce/xfwm4-themes.inc
index c60edc5b83..c60edc5b83 100644
--- a/packages/xfwm4-themes/xfwm4-themes.inc
+++ b/packages/xfce/xfwm4-themes.inc
diff --git a/packages/xfwm4-themes/xfwm4-themes_4.2.2.bb b/packages/xfce/xfwm4-themes_4.4.1.bb
index 9f67ad2ed9..9f67ad2ed9 100644
--- a/packages/xfwm4-themes/xfwm4-themes_4.2.2.bb
+++ b/packages/xfce/xfwm4-themes_4.4.1.bb
diff --git a/packages/xfwm4/xfwm4.inc b/packages/xfce/xfwm4.inc
index e7e5bc1862..e7e5bc1862 100644
--- a/packages/xfwm4/xfwm4.inc
+++ b/packages/xfce/xfwm4.inc
diff --git a/packages/xfwm4/xfwm4_4.2.2.bb b/packages/xfce/xfwm4_4.4.1.bb
index 2fc47e641e..2fc47e641e 100644
--- a/packages/xfwm4/xfwm4_4.2.2.bb
+++ b/packages/xfce/xfwm4_4.4.1.bb
diff --git a/packages/xfce4-goodies/xfce4-appfinder_4.3.99.2.bb b/packages/xfce4-goodies/xfce4-appfinder_4.3.99.2.bb
deleted file mode 100644
index f7c97970d5..0000000000
--- a/packages/xfce4-goodies/xfce4-appfinder_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce4-appfinder build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce4-goodies/xfce4-mixer_4.3.99.2.bb b/packages/xfce4-goodies/xfce4-mixer_4.3.99.2.bb
deleted file mode 100644
index 6dd3c0565b..0000000000
--- a/packages/xfce4-goodies/xfce4-mixer_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfce-mixer-plugin OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfce4-panel/xfce4-panel.inc b/packages/xfce4-panel/xfce4-panel.inc
deleted file mode 100644
index e43807540e..0000000000
--- a/packages/xfce4-panel/xfce4-panel.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-# xfce4-panel OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION = "XFCE4 Panel"
-SECTION = "x11"
-DEPENDS = "startup-notification virtual/libx11 libxfcegui4 libxfce4mcs xfce-mcs-manager libxml2"
-
-inherit pkgconfig xfce
-
-EXTRA_OECONF += " --enable-startup-notification"
-
-
-do_stage() {
-autotools_stage_all
-}
-
-do_install() {
- oe_runmake DESTDIR=${D} install
-}
-
-PACKAGES += "${PN}-plugins ${PN}-mcs-plugins"
-FILES_${PN}-plugins += "${libdir}/xfce4/panel-plugins/*.so*"
-FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/"
diff --git a/packages/xfce4-panel/xfce4-panel_4.2.2.bb b/packages/xfce4-panel/xfce4-panel_4.2.2.bb
deleted file mode 100644
index 18dce6fa3c..0000000000
--- a/packages/xfce4-panel/xfce4-panel_4.2.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# xfce4-panel OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-PR="r1"
-require ${PN}.inc
diff --git a/packages/xfce4-panel/xfce4-panel_4.3.99.2.bb b/packages/xfce4-panel/xfce4-panel_4.3.99.2.bb
deleted file mode 100644
index 18dce6fa3c..0000000000
--- a/packages/xfce4-panel/xfce4-panel_4.3.99.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# xfce4-panel OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-PR="r1"
-require ${PN}.inc
diff --git a/packages/xfdesktop/xfdesktop.inc b/packages/xfdesktop/xfdesktop.inc
deleted file mode 100644
index e3e64ef355..0000000000
--- a/packages/xfdesktop/xfdesktop.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-# xfdesktop OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION="xfce4 Desktop Background Manager"
-SECTION = "x11/base"
-DEPENDS = "virtual/libx11 libxfcegui4 libxfce4mcs libxml2 xfce4-panel"
-
-inherit xfce
-PACKAGES += "xfdesktop-backdrops ${PN}-mcs-plugins"
-
-FILES_xfdesktop-backdrops="${datadir}/xfce4/backdrops/*"
-FILES_${PN}-mcs-plugins += "${libdir}/xfce4/mcs-plugins/*.so"
-FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so"
diff --git a/packages/xfdesktop/xfdesktop_4.2.0.bb b/packages/xfdesktop/xfdesktop_4.2.0.bb
deleted file mode 100644
index 7a90487cc8..0000000000
--- a/packages/xfdesktop/xfdesktop_4.2.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-# xfdesktop OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION="xfce4 Desktop Background Manager"
-SECTION = "x11/base"
-DEPENDS = "virtual/libx11 libxfcegui4 libxfce4mcs libxml2"
-
-inherit xfce
-PACKAGES += "xfdesktop-backdrops"
-
-FILES_xfdesktop-backdrops="${datadir}/xfce4/backdrops/*"
diff --git a/packages/xfdesktop/xfdesktop_4.2.2.bb b/packages/xfdesktop/xfdesktop_4.2.2.bb
deleted file mode 100644
index d7af836791..0000000000
--- a/packages/xfdesktop/xfdesktop_4.2.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# xfdesktop OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-PR = "r1"
-require ${PN}.inc
diff --git a/packages/xfdesktop/xfdesktop_4.3.99.2.bb b/packages/xfdesktop/xfdesktop_4.3.99.2.bb
deleted file mode 100644
index d7af836791..0000000000
--- a/packages/xfdesktop/xfdesktop_4.3.99.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# xfdesktop OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-PR = "r1"
-require ${PN}.inc
diff --git a/packages/xfsprogs/xfsprogs_2.8.16.bb b/packages/xfsprogs/xfsprogs_2.8.16.bb
index 60cc6a2994..603b6cbb08 100644
--- a/packages/xfsprogs/xfsprogs_2.8.16.bb
+++ b/packages/xfsprogs/xfsprogs_2.8.16.bb
@@ -2,7 +2,8 @@ DESCRIPTION = "XFS Filesystem Utilities"
HOMEPAGE = "http://oss.sgi.com/projects/xfs"
LICENSE = "GPL"
SECTION = "base"
-PR = "r0"
+PR = "r2"
+DEPENDS = "e2fsprogs-libs"
SRC_URI = "ftp://oss.sgi.com/projects/xfs/download/download/cmd_tars/xfsprogs_2.8.16-1.tar.gz"
@@ -11,7 +12,7 @@ inherit autotools
EXTRA_OECONF = "--enable-gettext=no"
do_configure () {
- export LIBTOOL="${STAGING_BINDIR}/${HOST_SYS}-libtool"
+ export LIBTOOL="${STAGING_BINDIR_NATIVE}/${HOST_SYS}-libtool"
export DEBUG="-DNDEBUG"
oe_runconf
}
diff --git a/packages/xfwm4-themes/xfwm4-themes_4.2.0.bb b/packages/xfwm4-themes/xfwm4-themes_4.2.0.bb
deleted file mode 100644
index f133e9524c..0000000000
--- a/packages/xfwm4-themes/xfwm4-themes_4.2.0.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-# xfwm4-themes OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION="XFCE4 Window Manager Themes"
-SECTION = "x11/wm"
-
-inherit xfce
-
-# No ${PN} for this one
-PACKAGES=""
-
-PACKAGES_DYNAMIC = "xfwm4-theme-*"
-
-python populate_packages_prepend () {
- themedir = bb.data.expand('${datadir}/xfwm4/themes', d)
- do_split_packages(d, themedir, '^(.*)', 'xfwm4-theme-%s', 'XFWM4 theme %s', allow_dirs=True)
-}
diff --git a/packages/xfwm4-themes/xfwm4-themes_4.3.99.2.bb b/packages/xfwm4-themes/xfwm4-themes_4.3.99.2.bb
deleted file mode 100644
index 9f67ad2ed9..0000000000
--- a/packages/xfwm4-themes/xfwm4-themes_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfwm4-themes OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfwm4/xfwm4_4.2.0.bb b/packages/xfwm4/xfwm4_4.2.0.bb
deleted file mode 100644
index e6fbd22b59..0000000000
--- a/packages/xfwm4/xfwm4_4.2.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-# xfwm4 OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION="XFCE4 Window Manager"
-SECTION = "x11/wm"
-inherit xfce
-
-
-FILES_${PN} += "${datadir}/xfwm4/defaults ${datadir}/xfwm4/themes/default.keys/*"
-
-DEPENDS = "startup-notification virtual/libx11 libxpm libxfce4util libxfcegui4 libxfce4mcs xfce-mcs-manager"
-
-
-EXTRA_OECONF += " --enable-startup-notification"
-
-PACKAGES_DYNAMIC = "xfwm4-theme-*"
-
-python populate_packages_prepend () {
- themedir = bb.data.expand('${datadir}/themes', d)
- do_split_packages(d, themedir, '^(.*)', 'xfwm4-theme-%s', 'XFWM4 theme %s', allow_dirs=True)
-}
diff --git a/packages/xfwm4/xfwm4_4.2.3.2.bb b/packages/xfwm4/xfwm4_4.2.3.2.bb
deleted file mode 100644
index e1feff01f1..0000000000
--- a/packages/xfwm4/xfwm4_4.2.3.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfwm4 OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xfwm4/xfwm4_4.3.99.2.bb b/packages/xfwm4/xfwm4_4.3.99.2.bb
deleted file mode 100644
index e1feff01f1..0000000000
--- a/packages/xfwm4/xfwm4_4.3.99.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-# xfwm4 OE build file
-# Copyright (C) 2004, Advanced Micro Devices, Inc. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-require ${PN}.inc
diff --git a/packages/xkbd/xkbd-layout-ru_0.1.1.bb b/packages/xkbd/xkbd-layout-ru_0.1.1.bb
new file mode 100644
index 0000000000..e65d91b7c0
--- /dev/null
+++ b/packages/xkbd/xkbd-layout-ru_0.1.1.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "xkbd i18n layouts"
+SECTION = "x11"
+PRIORITY = "optional"
+LICENSE = "GPL"
+PACKAGE_ARCH = "all"
+PR = "r0"
+RDEPENDS = "xkbd"
+
+SRC_URI = "http://whitenoise.ssrlab.com/pda/xkbd/xkbd-ru-en-123_0.1.1.tar.gz"
+
+S = "${WORKDIR}"
+
+do_install () {
+ install -d ${D}${prefix}/share/xkbd
+ cd usr/share/xkbd/
+ for i in *.xkbd; do
+ install -m 644 $i ${D}${prefix}/share/xkbd/${i}
+ done
+}
+
+FILES_${PN} = "${prefix}/share/xkbd/*.xkbd"
diff --git a/packages/xorg-app/appres_1.0.1.bb b/packages/xorg-app/appres_1.0.1.bb
new file mode 100644
index 0000000000..4b6447a82e
--- /dev/null
+++ b/packages/xorg-app/appres_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "The appres program prints the resources seen by an application."
+
+DEPENDS += " virtual/libx11 libxt"
+
diff --git a/packages/xorg-app/appres_X11R7.0-1.0.0.bb b/packages/xorg-app/appres_X11R7.0-1.0.0.bb
deleted file mode 100644
index 5805a0fe04..0000000000
--- a/packages/xorg-app/appres_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "The appres program prints the resources seen by an application."
-
-DEPENDS += " virtual/libx11 libxt"
-
diff --git a/packages/xorg-app/bdftopcf-native_X11R7.0-1.0.0.bb b/packages/xorg-app/bdftopcf-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index 7b6aa37311..0000000000
--- a/packages/xorg-app/bdftopcf-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "Native bdftopdf utility"
-SECTION = "x11/fonts"
-LICENSE = "MIT-X"
-
-S="${WORKDIR}/bdftopcf-${PV}"
-
-DEPENDS = "libxfont-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/bdftopcf-X11R7.0-1.0.0.tar.gz"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-app/bdftopcf_X11R7.0-1.0.0.bb b/packages/xorg-app/bdftopcf_X11R7.0-1.0.0.bb
deleted file mode 100644
index d9f37daf1a..0000000000
--- a/packages/xorg-app/bdftopcf_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "bdftopcf is a font compiler for the X server and font server."
-
-DEPENDS += " libxfont"
-
diff --git a/packages/xorg-app/beforelight_1.0.2.bb b/packages/xorg-app/beforelight_1.0.2.bb
new file mode 100644
index 0000000000..a83c84eb79
--- /dev/null
+++ b/packages/xorg-app/beforelight_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " virtual/libx11 libxscrnsaver libxt libxaw libxt"
+
diff --git a/packages/xorg-app/beforelight_X11R7.0-1.0.1.bb b/packages/xorg-app/beforelight_X11R7.0-1.0.1.bb
deleted file mode 100644
index 5a64332d48..0000000000
--- a/packages/xorg-app/beforelight_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxscrnsaver libxt libxaw libxt"
-
diff --git a/packages/xorg-app/bitmap_X11R7.0-1.0.1.bb b/packages/xorg-app/bitmap_X11R7.0-1.0.1.bb
deleted file mode 100644
index c933d4f718..0000000000
--- a/packages/xorg-app/bitmap_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu xbitmaps libxt"
diff --git a/packages/xorg-app/bitmap_X11R7.1-1.0.2.bb b/packages/xorg-app/bitmap_X11R7.1-1.0.2.bb
deleted file mode 100644
index 4d9a7f53de..0000000000
--- a/packages/xorg-app/bitmap_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu xbitmaps libxt"
-
diff --git a/packages/xorg-app/editres_1.0.2.bb b/packages/xorg-app/editres_1.0.2.bb
new file mode 100644
index 0000000000..e5bf19bd71
--- /dev/null
+++ b/packages/xorg-app/editres_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " virtual/libx11 libxt libxmu libxaw"
+
diff --git a/packages/xorg-app/editres_X11R7.0-1.0.1.bb b/packages/xorg-app/editres_X11R7.0-1.0.1.bb
deleted file mode 100644
index 281a33c4bd..0000000000
--- a/packages/xorg-app/editres_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxt libxmu libxaw"
-
diff --git a/packages/xorg-app/fonttosfnt_1.0.3.bb b/packages/xorg-app/fonttosfnt_1.0.3.bb
new file mode 100644
index 0000000000..8b7d7be108
--- /dev/null
+++ b/packages/xorg-app/fonttosfnt_1.0.3.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xproto freetype libfontenc"
+
diff --git a/packages/xorg-app/fonttosfnt_X11R7.0-1.0.1.bb b/packages/xorg-app/fonttosfnt_X11R7.0-1.0.1.bb
deleted file mode 100644
index fb84802ca6..0000000000
--- a/packages/xorg-app/fonttosfnt_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto freetype libfontenc"
-
diff --git a/packages/xorg-app/fslsfonts_X11R7.0-1.0.1.bb b/packages/xorg-app/fslsfonts_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0257648e20..0000000000
--- a/packages/xorg-app/fslsfonts_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libfs"
-
diff --git a/packages/xorg-app/fstobdf_X11R7.0-1.0.1.bb b/packages/xorg-app/fstobdf_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0257648e20..0000000000
--- a/packages/xorg-app/fstobdf_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libfs"
-
diff --git a/packages/xorg-app/fstobdf_X11R7.1-1.0.2.bb b/packages/xorg-app/fstobdf_X11R7.1-1.0.2.bb
deleted file mode 100644
index 0257648e20..0000000000
--- a/packages/xorg-app/fstobdf_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libfs"
-
diff --git a/packages/xorg-app/iceauth_X11R7.0-1.0.1.bb b/packages/xorg-app/iceauth_X11R7.0-1.0.1.bb
deleted file mode 100644
index 5f94b334be..0000000000
--- a/packages/xorg-app/iceauth_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto libice"
-
diff --git a/packages/xorg-app/ico_X11R7.0-1.0.1.bb b/packages/xorg-app/ico_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/ico_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/lbxproxy_X11R7.0-1.0.1.bb b/packages/xorg-app/lbxproxy_X11R7.0-1.0.1.bb
deleted file mode 100644
index b9aa49f4ab..0000000000
--- a/packages/xorg-app/lbxproxy_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "Applications that would like to take advantage of the Low Bandwidth \
-extension to X (LBX) must make their connections to an lbxproxy."
-
-DEPENDS += " xtrans libxext liblbxutil virtual/libx11 libice xproxymngproto bigreqsproto zlib"
diff --git a/packages/xorg-app/listres_X11R7.0-1.0.1.bb b/packages/xorg-app/listres_X11R7.0-1.0.1.bb
deleted file mode 100644
index 61fb362e23..0000000000
--- a/packages/xorg-app/listres_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw virtual/libx11 libxt libxmu"
-
diff --git a/packages/xorg-app/luit_1.0.2.bb b/packages/xorg-app/luit_1.0.2.bb
new file mode 100644
index 0000000000..67fc3266ae
--- /dev/null
+++ b/packages/xorg-app/luit_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " zlib zlib virtual/libx11 libfontenc"
+
diff --git a/packages/xorg-app/luit_X11R7.0-1.0.1.bb b/packages/xorg-app/luit_X11R7.0-1.0.1.bb
deleted file mode 100644
index dd599b3ad7..0000000000
--- a/packages/xorg-app/luit_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " zlib zlib virtual/libx11 libfontenc"
-
diff --git a/packages/xorg-app/mkcfm_X11R7.0-1.0.1.bb b/packages/xorg-app/mkcfm_X11R7.0-1.0.1.bb
deleted file mode 100644
index d2974045c2..0000000000
--- a/packages/xorg-app/mkcfm_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxfont libfs libfontenc"
-
diff --git a/packages/xorg-app/mkfontdir-native_1.0.3.bb b/packages/xorg-app/mkfontdir-native_1.0.3.bb
new file mode 100644
index 0000000000..2753b185ba
--- /dev/null
+++ b/packages/xorg-app/mkfontdir-native_1.0.3.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "X mkfontdir app"
+SECTION = "x11/applications"
+LICENSE = "MIT-X"
+DEPENDS = "util-macros-native mkfontscale-native"
+PR = "r1"
+PE = "1"
+
+S = "${WORKDIR}/mkfontdir-${PV}"
+SRC_URI = "${XORG_MIRROR}/X11R7.1/src/app/mkfontdir-${PV}.tar.bz2"
+
+inherit native autotools pkgconfig
diff --git a/packages/xorg-app/mkfontdir-native_X11R7.0-1.0.1.bb b/packages/xorg-app/mkfontdir-native_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0787a7ced7..0000000000
--- a/packages/xorg-app/mkfontdir-native_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-DESCRIPTION = "X mkfontdir app"
-SECTION = "x11/applications"
-LICENSE = "MIT-X"
-
-S="${WORKDIR}/mkfontdir-${PV}"
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/mkfontdir-${PV}.tar.bz2"
-
-DEPENDS = "util-macros-native"
-inherit native autotools pkgconfig
diff --git a/packages/xorg-app/mkfontdir-native_X11R7.1-1.0.2.bb b/packages/xorg-app/mkfontdir-native_X11R7.1-1.0.2.bb
deleted file mode 100644
index 0eb85010b9..0000000000
--- a/packages/xorg-app/mkfontdir-native_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-DESCRIPTION = "X mkfontdir app"
-SECTION = "x11/applications"
-LICENSE = "MIT-X"
-
-S="${WORKDIR}/mkfontdir-${PV}"
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/app/mkfontdir-${PV}.tar.bz2"
-
-DEPENDS = "util-macros-native"
-inherit native autotools pkgconfig
diff --git a/packages/xorg-app/mkfontdir_1.0.3.bb b/packages/xorg-app/mkfontdir_1.0.3.bb
new file mode 100644
index 0000000000..a65149408d
--- /dev/null
+++ b/packages/xorg-app/mkfontdir_1.0.3.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+PE = "1"
+
+RDEPENDS += "mkfontscale"
+
diff --git a/packages/xorg-app/mkfontdir_X11R7.0-1.0.1.bb b/packages/xorg-app/mkfontdir_X11R7.0-1.0.1.bb
deleted file mode 100644
index 556afd2867..0000000000
--- a/packages/xorg-app/mkfontdir_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-app/mkfontdir_X11R7.1-1.0.2.bb b/packages/xorg-app/mkfontdir_X11R7.1-1.0.2.bb
deleted file mode 100644
index 556afd2867..0000000000
--- a/packages/xorg-app/mkfontdir_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-app/mkfontscale-native_X11R7.0-1.0.1.bb b/packages/xorg-app/mkfontscale-native_X11R7.0-1.0.1.bb
deleted file mode 100644
index 5bbab6a5fd..0000000000
--- a/packages/xorg-app/mkfontscale-native_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "X mkfontscale app"
-SECTION = "x11/applications"
-LICENSE = "MIT-X"
-S="${WORKDIR}/mkfontscale-${PV}"
-
-DEPENDS = "libx11-native libfontenc-native freetype-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/mkfontscale-${PV}.tar.bz2"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-app/mkfontscale_X11R7.0-1.0.1.bb b/packages/xorg-app/mkfontscale_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2f5eab7d63..0000000000
--- a/packages/xorg-app/mkfontscale_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " zlib libfontenc freetype virtual/libx11"
-
diff --git a/packages/xorg-app/oclock_X11R7.0-1.0.1.bb b/packages/xorg-app/oclock_X11R7.0-1.0.1.bb
deleted file mode 100644
index f275cc94d4..0000000000
--- a/packages/xorg-app/oclock_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu libxext libxt"
-
diff --git a/packages/xorg-app/proxymngr_X11R7.0-1.0.1.bb b/packages/xorg-app/proxymngr_X11R7.0-1.0.1.bb
deleted file mode 100644
index ea4a1ad78d..0000000000
--- a/packages/xorg-app/proxymngr_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libice libxt virtual/libx11 xproxymngproto"
-
diff --git a/packages/xorg-app/rgb_X11R7.0-1.0.0.bb b/packages/xorg-app/rgb_X11R7.0-1.0.0.bb
deleted file mode 100644
index 1c46d69a0b..0000000000
--- a/packages/xorg-app/rgb_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxt"
-
diff --git a/packages/xorg-app/rgb_X11R7.1-1.0.1.bb b/packages/xorg-app/rgb_X11R7.1-1.0.1.bb
deleted file mode 100644
index 59dd8abd27..0000000000
--- a/packages/xorg-app/rgb_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-app-common.inc
-PR = "r1"
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto util-macros"
-
-FILES_${PN} += "${datadir}/X11"
-
-
diff --git a/packages/xorg-app/rstart_X11R7.0-1.0.1.bb b/packages/xorg-app/rstart_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/rstart_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/rstart_X11R7.1-1.0.2.bb b/packages/xorg-app/rstart_X11R7.1-1.0.2.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/rstart_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/scripts_X11R7.0-1.0.1.bb b/packages/xorg-app/scripts_X11R7.0-1.0.1.bb
deleted file mode 100644
index 00bfde0620..0000000000
--- a/packages/xorg-app/scripts_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
-
diff --git a/packages/xorg-app/sessreg_1.0.2.bb b/packages/xorg-app/sessreg_1.0.2.bb
new file mode 100644
index 0000000000..dc281b41b0
--- /dev/null
+++ b/packages/xorg-app/sessreg_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " virtual/libx11"
+
diff --git a/packages/xorg-app/sessreg_X11R7.0-1.0.0.bb b/packages/xorg-app/sessreg_X11R7.0-1.0.0.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/sessreg_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/setxkbmap_1.0.3.bb b/packages/xorg-app/setxkbmap_1.0.3.bb
new file mode 100644
index 0000000000..9b97cf437a
--- /dev/null
+++ b/packages/xorg-app/setxkbmap_1.0.3.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " libxkbfile virtual/libx11"
+
diff --git a/packages/xorg-app/setxkbmap_X11R7.0-1.0.1.bb b/packages/xorg-app/setxkbmap_X11R7.0-1.0.1.bb
deleted file mode 100644
index 8001d661e7..0000000000
--- a/packages/xorg-app/setxkbmap_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/setxkbmap_X11R7.1-1.0.2.bb b/packages/xorg-app/setxkbmap_X11R7.1-1.0.2.bb
deleted file mode 100644
index 8001d661e7..0000000000
--- a/packages/xorg-app/setxkbmap_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/showfont_X11R7.0-1.0.1.bb b/packages/xorg-app/showfont_X11R7.0-1.0.1.bb
deleted file mode 100644
index 165202b2da..0000000000
--- a/packages/xorg-app/showfont_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libfs"
-
diff --git a/packages/xorg-app/smproxy_X11R7.0-1.0.1.bb b/packages/xorg-app/smproxy_X11R7.0-1.0.1.bb
deleted file mode 100644
index 843541dc77..0000000000
--- a/packages/xorg-app/smproxy_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxt libxmu"
-
diff --git a/packages/xorg-app/smproxy_X11R7.1-1.0.2.bb b/packages/xorg-app/smproxy_X11R7.1-1.0.2.bb
deleted file mode 100644
index 843541dc77..0000000000
--- a/packages/xorg-app/smproxy_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxt libxmu"
-
diff --git a/packages/xorg-app/twm_1.0.3.bb b/packages/xorg-app/twm_1.0.3.bb
new file mode 100644
index 0000000000..b8e75b2bbd
--- /dev/null
+++ b/packages/xorg-app/twm_1.0.3.bb
@@ -0,0 +1,11 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "tiny window manager"
+
+DEPENDS += " virtual/libx11 libxext libxt libxmu"
+
+ALTERNATIVE_PATH = "${bindir}/twm"
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PRIORITY = "1"
diff --git a/packages/xorg-app/twm_X11R7.0-1.0.1.bb b/packages/xorg-app/twm_X11R7.0-1.0.1.bb
deleted file mode 100644
index 3cbab36e9b..0000000000
--- a/packages/xorg-app/twm_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "tiny window manager"
-
-DEPENDS += " virtual/libx11 libxext libxt libxmu"
-
-ALTERNATIVE_PATH = "${bindir}/twm"
-ALTERNATIVE_NAME = "x-window-manager"
-ALTERNATIVE_LINK = "${bindir}/x-window-manager"
-ALTERNATIVE_PRIORITY = "1"
diff --git a/packages/xorg-app/viewres_X11R7.0-1.0.1.bb b/packages/xorg-app/viewres_X11R7.0-1.0.1.bb
deleted file mode 100644
index 50c6a97949..0000000000
--- a/packages/xorg-app/viewres_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxt"
-
diff --git a/packages/xorg-app/x11perf_1.4.1.bb b/packages/xorg-app/x11perf_1.4.1.bb
new file mode 100644
index 0000000000..35680e7925
--- /dev/null
+++ b/packages/xorg-app/x11perf_1.4.1.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X11 server performance test program"
+DEPENDS += "libxmu libxrender libxft libxext fontconfig"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-app/x11perf_X11R7.0-1.0.1.bb b/packages/xorg-app/x11perf_X11R7.0-1.0.1.bb
deleted file mode 100644
index 905f3cdced..0000000000
--- a/packages/xorg-app/x11perf_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu"
-
diff --git a/packages/xorg-app/x11perf_X11R7.1-1.4.1.bb b/packages/xorg-app/x11perf_X11R7.1-1.4.1.bb
deleted file mode 100644
index 8581abd43c..0000000000
--- a/packages/xorg-app/x11perf_X11R7.1-1.4.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu libxrender libxft libxext"
diff --git a/packages/xorg-app/xauth_1.0.2.bb b/packages/xorg-app/xauth_1.0.2.bb
new file mode 100644
index 0000000000..93ddf7e828
--- /dev/null
+++ b/packages/xorg-app/xauth_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X authority file utility"
+DEPENDS += "libxau libxext libxmu"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-app/xauth_X11R7.0-1.0.1.bb b/packages/xorg-app/xauth_X11R7.0-1.0.1.bb
deleted file mode 100644
index b891ff90ef..0000000000
--- a/packages/xorg-app/xauth_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxau libxext libxmu"
-
diff --git a/packages/xorg-app/xbiff_X11R7.0-1.0.1.bb b/packages/xorg-app/xbiff_X11R7.0-1.0.1.bb
deleted file mode 100644
index 5e21a9e590..0000000000
--- a/packages/xorg-app/xbiff_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw xbitmaps libxext"
-
diff --git a/packages/xorg-app/xcalc_X11R7.0-1.0.1.bb b/packages/xorg-app/xcalc_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xcalc_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xclipboard_X11R7.0-1.0.1.bb b/packages/xorg-app/xclipboard_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xclipboard_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xclock_X11R7.0-1.0.1.bb b/packages/xorg-app/xclock_X11R7.0-1.0.1.bb
deleted file mode 100644
index 7ad19bb1bb..0000000000
--- a/packages/xorg-app/xclock_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxaw libxrender libxft libxkbfile libxt"
-
diff --git a/packages/xorg-app/xclock_X11R7.1-1.0.2.bb b/packages/xorg-app/xclock_X11R7.1-1.0.2.bb
deleted file mode 100644
index 7ad19bb1bb..0000000000
--- a/packages/xorg-app/xclock_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxaw libxrender libxft libxkbfile libxt"
-
diff --git a/packages/xorg-app/xcmsdb_X11R7.0-1.0.1.bb b/packages/xorg-app/xcmsdb_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/xcmsdb_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xconsole_X11R7.0-1.0.1.bb b/packages/xorg-app/xconsole_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xconsole_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xconsole_X11R7.1-1.0.2.bb b/packages/xorg-app/xconsole_X11R7.1-1.0.2.bb
deleted file mode 100644
index 50c6a97949..0000000000
--- a/packages/xorg-app/xconsole_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxt"
-
diff --git a/packages/xorg-app/xcursorgen_X11R7.0-1.0.0.bb b/packages/xorg-app/xcursorgen_X11R7.0-1.0.0.bb
deleted file mode 100644
index 2dbb5b76ce..0000000000
--- a/packages/xorg-app/xcursorgen_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxcursor libpng"
-
diff --git a/packages/xorg-app/xcursorgen_X11R7.1-1.0.1.bb b/packages/xorg-app/xcursorgen_X11R7.1-1.0.1.bb
deleted file mode 100644
index 2dbb5b76ce..0000000000
--- a/packages/xorg-app/xcursorgen_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxcursor libpng"
-
diff --git a/packages/xorg-app/xdbedizzy_1.0.2.bb b/packages/xorg-app/xdbedizzy_1.0.2.bb
new file mode 100644
index 0000000000..43d5a4bbb8
--- /dev/null
+++ b/packages/xorg-app/xdbedizzy_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " libxp libxprintutil libxp libxau libxext"
+
diff --git a/packages/xorg-app/xdbedizzy_X11R7.0-1.0.1.bb b/packages/xorg-app/xdbedizzy_X11R7.0-1.0.1.bb
deleted file mode 100644
index 37d37250df..0000000000
--- a/packages/xorg-app/xdbedizzy_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxp libxprintutil libxp libxau libxext"
-
diff --git a/packages/xorg-app/xditview_X11R7.0-1.0.1.bb b/packages/xorg-app/xditview_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xditview_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xdm_1.1.3.bb b/packages/xorg-app/xdm_1.1.3.bb
new file mode 100644
index 0000000000..5df9fdd7bf
--- /dev/null
+++ b/packages/xorg-app/xdm_1.1.3.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "X display manager"
+
+DEPENDS += " libxmu libxinerama libxpm libxdmcp libxau virtual/libx11 libxext libxdmcp libxt libxaw"
+
+EXTRA_OECONF += " --with-random-device=/dev/urandom"
diff --git a/packages/xorg-app/xdm_1.1.4.bb b/packages/xorg-app/xdm_1.1.4.bb
new file mode 100644
index 0000000000..7b4195e3d8
--- /dev/null
+++ b/packages/xorg-app/xdm_1.1.4.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "X display manager"
+
+DEPENDS += " libxmu libxinerama libxpm libxdmcp libxau virtual/libx11 libxext libxdmcp libxt"
+
+EXTRA_OECONF += " --with-random-device=/dev/urandom"
diff --git a/packages/xorg-app/xdm_X11R7.0-1.0.1.bb b/packages/xorg-app/xdm_X11R7.0-1.0.1.bb
deleted file mode 100644
index d2c87b6a57..0000000000
--- a/packages/xorg-app/xdm_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X display manager"
-
-DEPENDS += " libxmu libxinerama libxpm libxdmcp libxau virtual/libx11 libxext libxdmcp libxt"
-
-EXTRA_OECONF += " --with-random-device=/dev/urandom"
-
diff --git a/packages/xorg-app/xdm_X11R7.1-1.0.4.bb b/packages/xorg-app/xdm_X11R7.1-1.0.4.bb
deleted file mode 100644
index 955fd33732..0000000000
--- a/packages/xorg-app/xdm_X11R7.1-1.0.4.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X display manager"
-
-DEPENDS += " libxmu libxinerama libxpm libxdmcp libxau virtual/libx11 libxext libxdmcp libxt"
-
-EXTRA_OECONF += " --with-random-device=/dev/urandom"
diff --git a/packages/xorg-app/xdpyinfo_1.0.2.bb b/packages/xorg-app/xdpyinfo_1.0.2.bb
new file mode 100644
index 0000000000..4764a7089f
--- /dev/null
+++ b/packages/xorg-app/xdpyinfo_1.0.2.bb
@@ -0,0 +1,11 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X display information utility"
+LICENSE = "MIT"
+DEPENDS += "libxtst libxext libxxf86vm libxxf86dga libxxf86misc libxi libxrender libxinerama libdmx libxp libxau"
+PR = "r1"
+PE = "1"
+
+SRC_URI += "file://disable-xkb.patch;patch=1"
+
+EXTRA_OECONF = "--disable-xkb"
diff --git a/packages/xorg-app/xdpyinfo_X11R7.0-1.0.1.bb b/packages/xorg-app/xdpyinfo_X11R7.0-1.0.1.bb
deleted file mode 100644
index d212bc1422..0000000000
--- a/packages/xorg-app/xdpyinfo_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X display information utility"
-LICENSE = "MIT"
-
-DEPENDS += " libxtst libxext virtual/libx11 libxxf86vm libxxf86dga libxxf86misc libxi libxrender libxinerama libdmx libxp"
-
-SRC_URI += "file://disable-xkb.patch;patch=1"
-
-EXTRA_OECONF = "--disable-xkb"
diff --git a/packages/xorg-app/xdriinfo_X11R7.0-1.0.0.bb b/packages/xorg-app/xdriinfo_X11R7.0-1.0.0.bb
deleted file mode 100644
index 61e5837b9e..0000000000
--- a/packages/xorg-app/xdriinfo_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 glproto mesa"
-
diff --git a/packages/xorg-app/xdriinfo_X11R7.1-1.0.1.bb b/packages/xorg-app/xdriinfo_X11R7.1-1.0.1.bb
deleted file mode 100644
index 61e5837b9e..0000000000
--- a/packages/xorg-app/xdriinfo_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 glproto mesa"
-
diff --git a/packages/xorg-app/xedit_X11R7.0-1.0.1.bb b/packages/xorg-app/xedit_X11R7.0-1.0.1.bb
deleted file mode 100644
index c4008cc579..0000000000
--- a/packages/xorg-app/xedit_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxprintutil libxp libxt"
-
diff --git a/packages/xorg-app/xedit_X11R7.1-1.0.2.bb b/packages/xorg-app/xedit_X11R7.1-1.0.2.bb
deleted file mode 100644
index c4008cc579..0000000000
--- a/packages/xorg-app/xedit_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxprintutil libxp libxt"
-
diff --git a/packages/xorg-app/xev-1.0.2/.mtn2git_empty b/packages/xorg-app/xev-1.0.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-app/xev-1.0.2/.mtn2git_empty
diff --git a/packages/xorg-app/xev-1.0.2/diet-x11.patch b/packages/xorg-app/xev-1.0.2/diet-x11.patch
new file mode 100644
index 0000000000..9f515e8c73
--- /dev/null
+++ b/packages/xorg-app/xev-1.0.2/diet-x11.patch
@@ -0,0 +1,80 @@
+---
+ xev.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+Index: xev-1.0.2/xev.c
+===================================================================
+--- xev-1.0.2.orig/xev.c 2006-06-02 00:25:44.000000000 +0100
++++ xev-1.0.2/xev.c 2007-05-10 15:22:07.000000000 +0100
+@@ -109,7 +109,7 @@ do_KeyPress (XEvent *eventp)
+ nbytes = XLookupString (e, str, 256, &ks, NULL);
+
+ /* not supposed to call XmbLookupString on a key release event */
+- if (e->type == KeyPress && xic) {
++ /*if (e->type == KeyPress && xic) {
+ do {
+ nmbbytes = XmbLookupString (xic, e, buf, bsize - 1, &ks, &status);
+ buf[nmbbytes] = '\0';
+@@ -119,7 +119,7 @@ do_KeyPress (XEvent *eventp)
+ buf = realloc (buf, bsize);
+ }
+ } while (status == XBufferOverflow);
+- }
++ }*/
+
+ if (ks == NoSymbol)
+ ksname = "NoSymbol";
+@@ -149,7 +149,7 @@ do_KeyPress (XEvent *eventp)
+ }
+
+ /* not supposed to call XmbLookupString on a key release event */
+- if (e->type == KeyPress && xic) {
++ /*if (e->type == KeyPress && xic) {
+ printf (" XmbLookupString gives %d bytes: ", nmbbytes);
+ if (nmbbytes > 0) {
+ dump (buf, nmbbytes);
+@@ -157,7 +157,7 @@ do_KeyPress (XEvent *eventp)
+ } else {
+ printf ("\n");
+ }
+- }
++ } */
+
+ printf (" XFilterEvent returns: %s\n",
+ XFilterEvent (eventp, e->window) ? "True" : "False");
+@@ -804,7 +804,7 @@ main (int argc, char **argv)
+ fprintf (stderr, "%s: XSetLocaleModifiers failed\n", ProgramName);
+ }
+
+- xim = XOpenIM (dpy, NULL, NULL, NULL);
++ /*xim = XOpenIM (dpy, NULL, NULL, NULL);
+ if (xim == NULL) {
+ fprintf (stderr, "%s: XOpenIM failed\n", ProgramName);
+ }
+@@ -831,7 +831,7 @@ main (int argc, char **argv)
+ }
+ XFree (xim_styles);
+ }
+- }
++ }*/
+
+ screen = DefaultScreen (dpy);
+
+@@ -891,7 +891,7 @@ main (int argc, char **argv)
+ printf ("Outer window is 0x%lx, inner window is 0x%lx\n", w, subw);
+ }
+
+- if (xim && xim_style) {
++ /*if (xim && xim_style) {
+ xic = XCreateIC (xim,
+ XNInputStyle, xim_style,
+ XNClientWindow, w,
+@@ -901,7 +901,7 @@ main (int argc, char **argv)
+ if (xic == NULL) {
+ fprintf (stderr, "XCreateIC failed\n");
+ }
+- }
++ }*/
+
+ for (done = 0; !done; ) {
+ XEvent event;
diff --git a/packages/xorg-app/xev_1.0.2.bb b/packages/xorg-app/xev_1.0.2.bb
new file mode 100644
index 0000000000..b7a4070a8f
--- /dev/null
+++ b/packages/xorg-app/xev_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X Event Viewer"
+LICENSE = "MIT"
+PE = "1"
+
+SRC_URI += "file://diet-x11.patch;patch=1"
diff --git a/packages/xorg-app/xev_X11R7.0-1.0.1.bb b/packages/xorg-app/xev_X11R7.0-1.0.1.bb
deleted file mode 100644
index 1969eb3c07..0000000000
--- a/packages/xorg-app/xev_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X Event Viewer"
-LICENSE = "MIT"
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xeyes_X11R7.0-1.0.1.bb b/packages/xorg-app/xeyes_X11R7.0-1.0.1.bb
deleted file mode 100644
index de9861c60e..0000000000
--- a/packages/xorg-app/xeyes_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxau libxt libxext libxmu"
diff --git a/packages/xorg-app/xf86dga_1.0.2.bb b/packages/xorg-app/xf86dga_1.0.2.bb
new file mode 100644
index 0000000000..462797a68d
--- /dev/null
+++ b/packages/xorg-app/xf86dga_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " virtual/libx11 libxxf86dga libxt libxaw libxmu"
+
diff --git a/packages/xorg-app/xf86dga_X11R7.0-1.0.1.bb b/packages/xorg-app/xf86dga_X11R7.0-1.0.1.bb
deleted file mode 100644
index 6a5f12d484..0000000000
--- a/packages/xorg-app/xf86dga_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxxf86dga libxt libxaw libxmu"
-
diff --git a/packages/xorg-app/xfd_X11R7.0-1.0.1.bb b/packages/xorg-app/xfd_X11R7.0-1.0.1.bb
deleted file mode 100644
index 1751f4bdf7..0000000000
--- a/packages/xorg-app/xfd_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw freetype fontconfig libxft libxt"
-
diff --git a/packages/xorg-app/xfindproxy_X11R7.0-1.0.1.bb b/packages/xorg-app/xfindproxy_X11R7.0-1.0.1.bb
deleted file mode 100644
index bf8ad7904b..0000000000
--- a/packages/xorg-app/xfindproxy_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libice libxt xproxymngproto"
-
diff --git a/packages/xorg-app/xfontsel_X11R7.0-1.0.1.bb b/packages/xorg-app/xfontsel_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xfontsel_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xfs_1.0.4.bb b/packages/xorg-app/xfs_1.0.4.bb
new file mode 100644
index 0000000000..b6db0f9b81
--- /dev/null
+++ b/packages/xorg-app/xfs_1.0.4.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "X fontserver"
+
+DEPENDS += " libfs libxfont xtrans"
+
diff --git a/packages/xorg-app/xfs_X11R7.0-1.0.1.bb b/packages/xorg-app/xfs_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9567be7a12..0000000000
--- a/packages/xorg-app/xfs_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X fontserver"
-
-DEPENDS += " libfs libxfont xtrans"
-
diff --git a/packages/xorg-app/xfs_X11R7.1-1.0.2.bb b/packages/xorg-app/xfs_X11R7.1-1.0.2.bb
deleted file mode 100644
index 9567be7a12..0000000000
--- a/packages/xorg-app/xfs_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X fontserver"
-
-DEPENDS += " libfs libxfont xtrans"
-
diff --git a/packages/xorg-app/xfsinfo_X11R7.0-1.0.1.bb b/packages/xorg-app/xfsinfo_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0257648e20..0000000000
--- a/packages/xorg-app/xfsinfo_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libfs"
-
diff --git a/packages/xorg-app/xfwp_X11R7.0-1.0.1.bb b/packages/xorg-app/xfwp_X11R7.0-1.0.1.bb
deleted file mode 100644
index b9dc35b367..0000000000
--- a/packages/xorg-app/xfwp_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libice xproxymngproto"
-
diff --git a/packages/xorg-app/xgamma_X11R7.0-1.0.1.bb b/packages/xorg-app/xgamma_X11R7.0-1.0.1.bb
deleted file mode 100644
index 7549d9902f..0000000000
--- a/packages/xorg-app/xgamma_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxxf86vm"
-
diff --git a/packages/xorg-app/xgc_X11R7.0-1.0.1.bb b/packages/xorg-app/xgc_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xgc_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xhost_1.0.2.bb b/packages/xorg-app/xhost_1.0.2.bb
new file mode 100644
index 0000000000..af5beadd79
--- /dev/null
+++ b/packages/xorg-app/xhost_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "Server access control program for X"
+LICENSE = "MIT"
+DEPENDS += "libxmu libxau"
+PE = "1"
diff --git a/packages/xorg-app/xhost_X11R7.0-1.0.0.bb b/packages/xorg-app/xhost_X11R7.0-1.0.0.bb
deleted file mode 100644
index e997ffc6a6..0000000000
--- a/packages/xorg-app/xhost_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "Server access control program for X"
-LICENSE = "MIT"
-
-DEPENDS += " virtual/libx11 libxmu libxau"
-
diff --git a/packages/xorg-app/xhost_X11R7.1-1.0.1.bb b/packages/xorg-app/xhost_X11R7.1-1.0.1.bb
deleted file mode 100644
index e997ffc6a6..0000000000
--- a/packages/xorg-app/xhost_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "Server access control program for X"
-LICENSE = "MIT"
-
-DEPENDS += " virtual/libx11 libxmu libxau"
-
diff --git a/packages/xorg-app/xinit_1.0.3.bb b/packages/xorg-app/xinit_1.0.3.bb
new file mode 100644
index 0000000000..155bfc7c43
--- /dev/null
+++ b/packages/xorg-app/xinit_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " virtual/libx11"
+FILES_${PN} += " /usr/lib/X11/xinit"
+
diff --git a/packages/xorg-app/xinit_1.0.4.bb b/packages/xorg-app/xinit_1.0.4.bb
new file mode 100644
index 0000000000..ce82fb05d4
--- /dev/null
+++ b/packages/xorg-app/xinit_1.0.4.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X Window System initializer"
+PE = "1"
+
+FILES_${PN} += "${libdir}X11/xinit"
diff --git a/packages/xorg-app/xinit_X11R7.0-1.0.1.bb b/packages/xorg-app/xinit_X11R7.0-1.0.1.bb
deleted file mode 100644
index 00bfde0620..0000000000
--- a/packages/xorg-app/xinit_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
-
diff --git a/packages/xorg-app/xinit_X11R7.1-1.0.2.bb b/packages/xorg-app/xinit_X11R7.1-1.0.2.bb
deleted file mode 100644
index 025a578370..0000000000
--- a/packages/xorg-app/xinit_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-FILES_${PN} += " /usr/lib/X11/xinit"
-
diff --git a/packages/xorg-app/xkbcomp_X11R7.0-1.0.1.bb b/packages/xorg-app/xkbcomp_X11R7.0-1.0.1.bb
deleted file mode 100644
index f6b9503cd8..0000000000
--- a/packages/xorg-app/xkbcomp_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "The X Keyboard Extension essentially replaces the core protocol definition of keyboard."
-
-DEPENDS += " virtual/libx11 libxkbfile"
-
diff --git a/packages/xorg-app/xkbcomp_X11R7.1-1.0.2.bb b/packages/xorg-app/xkbcomp_X11R7.1-1.0.2.bb
deleted file mode 100644
index f6b9503cd8..0000000000
--- a/packages/xorg-app/xkbcomp_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "The X Keyboard Extension essentially replaces the core protocol definition of keyboard."
-
-DEPENDS += " virtual/libx11 libxkbfile"
-
diff --git a/packages/xorg-app/xkbevd_X11R7.0-1.0.1.bb b/packages/xorg-app/xkbevd_X11R7.0-1.0.1.bb
deleted file mode 100644
index 8001d661e7..0000000000
--- a/packages/xorg-app/xkbevd_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/xkbevd_X11R7.1-1.0.2.bb b/packages/xorg-app/xkbevd_X11R7.1-1.0.2.bb
deleted file mode 100644
index 8001d661e7..0000000000
--- a/packages/xorg-app/xkbevd_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/xkbprint_X11R7.0-1.0.1.bb b/packages/xorg-app/xkbprint_X11R7.0-1.0.1.bb
deleted file mode 100644
index 8001d661e7..0000000000
--- a/packages/xorg-app/xkbprint_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/xkbutils_X11R7.0-1.0.1.bb b/packages/xorg-app/xkbutils_X11R7.0-1.0.1.bb
deleted file mode 100644
index 15ce7e6011..0000000000
--- a/packages/xorg-app/xkbutils_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxkbfile virtual/libx11"
-
diff --git a/packages/xorg-app/xkill_X11R7.0-1.0.1.bb b/packages/xorg-app/xkill_X11R7.0-1.0.1.bb
deleted file mode 100644
index 905f3cdced..0000000000
--- a/packages/xorg-app/xkill_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu"
-
diff --git a/packages/xorg-app/xload_X11R7.0-1.0.1.bb b/packages/xorg-app/xload_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xload_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xlogo_X11R7.0-1.0.1.bb b/packages/xorg-app/xlogo_X11R7.0-1.0.1.bb
deleted file mode 100644
index b328683361..0000000000
--- a/packages/xorg-app/xlogo_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxprintutil libxp libxrender libxft libxext libxt"
-
diff --git a/packages/xorg-app/xlsatoms_X11R7.0-1.0.1.bb b/packages/xorg-app/xlsatoms_X11R7.0-1.0.1.bb
deleted file mode 100644
index 905f3cdced..0000000000
--- a/packages/xorg-app/xlsatoms_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu"
-
diff --git a/packages/xorg-app/xlsclients_X11R7.0-1.0.1.bb b/packages/xorg-app/xlsclients_X11R7.0-1.0.1.bb
deleted file mode 100644
index 905f3cdced..0000000000
--- a/packages/xorg-app/xlsclients_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxmu"
-
diff --git a/packages/xorg-app/xlsfonts_X11R7.0-1.0.1.bb b/packages/xorg-app/xlsfonts_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/xlsfonts_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xmag_X11R7.0-1.0.1.bb b/packages/xorg-app/xmag_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xmag_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xman_X11R7.0-1.0.1.bb b/packages/xorg-app/xman_X11R7.0-1.0.1.bb
deleted file mode 100644
index 7559ace10c..0000000000
--- a/packages/xorg-app/xman_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxprintutil libxp libxt"
-RDEPENDS = " man"
-
-FILES_${PN} += " /usr/share/X11/xman.help"
diff --git a/packages/xorg-app/xman_X11R7.1-1.0.2.bb b/packages/xorg-app/xman_X11R7.1-1.0.2.bb
deleted file mode 100644
index 7559ace10c..0000000000
--- a/packages/xorg-app/xman_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxprintutil libxp libxt"
-RDEPENDS = " man"
-
-FILES_${PN} += " /usr/share/X11/xman.help"
diff --git a/packages/xorg-app/xmessage_X11R7.0-1.0.1.bb b/packages/xorg-app/xmessage_X11R7.0-1.0.1.bb
deleted file mode 100644
index da0a1896b3..0000000000
--- a/packages/xorg-app/xmessage_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "xmessage displays a message or query in a window."
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xmh_X11R7.0-1.0.1.bb b/packages/xorg-app/xmh_X11R7.0-1.0.1.bb
deleted file mode 100644
index 9ef50b8ffd..0000000000
--- a/packages/xorg-app/xmh_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xmodmap_1.0.2.bb b/packages/xorg-app/xmodmap_1.0.2.bb
new file mode 100644
index 0000000000..4b031293a2
--- /dev/null
+++ b/packages/xorg-app/xmodmap_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "utility for modifying keymaps and pointer button mappings in X"
+LICENSE = "MIT"
+PE = "1"
diff --git a/packages/xorg-app/xmodmap_X11R7.0-1.0.0.bb b/packages/xorg-app/xmodmap_X11R7.0-1.0.0.bb
deleted file mode 100644
index 856aae8e6c..0000000000
--- a/packages/xorg-app/xmodmap_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "Utility for modifying keymaps and pointer button mappings in X"
-LICENSE = "MIT"
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xmodmap_X11R7.1-1.0.1.bb b/packages/xorg-app/xmodmap_X11R7.1-1.0.1.bb
deleted file mode 100644
index da12303b23..0000000000
--- a/packages/xorg-app/xmodmap_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "utility for modifying keymaps and pointer button mappings in X"
-LICENSE = "MIT"
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xmore_X11R7.0-1.0.1.bb b/packages/xorg-app/xmore_X11R7.0-1.0.1.bb
deleted file mode 100644
index 88b90afb05..0000000000
--- a/packages/xorg-app/xmore_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxprintutil libxp libxt"
-
diff --git a/packages/xorg-app/xorg-app-common.inc b/packages/xorg-app/xorg-app-common.inc
index b2a73f9ca8..cd7f654be2 100644
--- a/packages/xorg-app/xorg-app-common.inc
+++ b/packages/xorg-app/xorg-app-common.inc
@@ -1,17 +1,19 @@
DESCRIPTION = "X application"
-HOMEPAGE = "http://www.x.org"
-SECTION = "x11/applications"
+HOMEPAGE = "http://www.x.org/"
+SECTION = "x11/apps"
LICENSE = "MIT-X"
+DEPENDS = "util-macros-native virtual/libx11"
-#DEPENDS = ""
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/app/${XORG_PN}-${PV}.tar.bz2"
-S = "${WORKDIR}/${XORG_PN}-${PV}"
-FILES_${PN} += " /usr/lib/X11/${XORG_PN}"
+SRC_URI = "${XORG_MIRROR}/individual/app/${XORG_PN}-${PV}.tar.bz2"
+
+S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
do_stage() {
- autotools_stage_all
+ autotools_stage_all
}
+
+FILES_${PN} += " /usr/lib/X11/${XORG_PN}"
diff --git a/packages/xorg-app/xphelloworld_X11R7.0-1.0.1.bb b/packages/xorg-app/xphelloworld_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2153dfd459..0000000000
--- a/packages/xorg-app/xphelloworld_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxprintapputil libxaw libxprintutil libxt libxp"
-
diff --git a/packages/xorg-app/xplsprinters_X11R7.0-1.0.1.bb b/packages/xorg-app/xplsprinters_X11R7.0-1.0.1.bb
deleted file mode 100644
index 79f4194c48..0000000000
--- a/packages/xorg-app/xplsprinters_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxp libxprintutil virtual/libx11"
-
diff --git a/packages/xorg-app/xpr_X11R7.0-1.0.1.bb b/packages/xorg-app/xpr_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2dd7807ec5..0000000000
--- a/packages/xorg-app/xpr_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu virtual/libx11"
-
diff --git a/packages/xorg-app/xprehashprinterlist_X11R7.0-1.0.1.bb b/packages/xorg-app/xprehashprinterlist_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0718958efe..0000000000
--- a/packages/xorg-app/xprehashprinterlist_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxp virtual/libx11"
-
diff --git a/packages/xorg-app/xprop_1.0.2.bb b/packages/xorg-app/xprop_1.0.2.bb
new file mode 100644
index 0000000000..8623021717
--- /dev/null
+++ b/packages/xorg-app/xprop_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " libxmu virtual/libx11"
+
diff --git a/packages/xorg-app/xprop_X11R7.0-1.0.1.bb b/packages/xorg-app/xprop_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2dd7807ec5..0000000000
--- a/packages/xorg-app/xprop_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu virtual/libx11"
-
diff --git a/packages/xorg-app/xrandr/.mtn2git_empty b/packages/xorg-app/xrandr/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-app/xrandr/.mtn2git_empty
diff --git a/packages/xorg-app/xrandr/resolve_symbol_clash.patch b/packages/xorg-app/xrandr/resolve_symbol_clash.patch
new file mode 100644
index 0000000000..1ecf9563f6
--- /dev/null
+++ b/packages/xorg-app/xrandr/resolve_symbol_clash.patch
@@ -0,0 +1,33 @@
+---
+ xrandr.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- xrandr-1.2.2.orig/xrandr.c
++++ xrandr-1.2.2/xrandr.c
+@@ -189,7 +189,7 @@
+
+ #if HAS_RANDR_1_2
+ typedef enum _policy {
+- clone, extend
++ policy_clone, extend
+ } policy_t;
+
+ typedef enum _relation {
+@@ -1602,7 +1602,7 @@
+ int ret = 0;
+ #if HAS_RANDR_1_2
+ output_t *output = NULL;
+- policy_t policy = clone;
++ policy_t policy = policy_clone;
+ Bool setit_1_2 = False;
+ Bool query_1_2 = False;
+ Bool modeit = False;
+@@ -1863,7 +1863,7 @@
+ continue;
+ }
+ if (!strcmp ("--clone", argv[i])) {
+- policy = clone;
++ policy = policy_clone;
+ setit_1_2 = True;
+ continue;
+ }
diff --git a/packages/xorg-app/xrandr_1.2.0.bb b/packages/xorg-app/xrandr_1.2.0.bb
new file mode 100644
index 0000000000..b730f6ce79
--- /dev/null
+++ b/packages/xorg-app/xrandr_1.2.0.bb
@@ -0,0 +1,9 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X Resize and Rotate extension command."
+LICENSE= "BSD-X"
+
+DEPENDS += " libxrandr libxrender virtual/libx11"
+PE = "1"
+PR = "r2"
+
diff --git a/packages/xorg-app/xrandr_1.2.2.bb b/packages/xorg-app/xrandr_1.2.2.bb
new file mode 100644
index 0000000000..05ef6af95d
--- /dev/null
+++ b/packages/xorg-app/xrandr_1.2.2.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X Resize and Rotate extension command."
+LICENSE= "BSD-X"
+DEPENDS += "libxrandr libxrender"
+PE = "1"
+
+SRC_URI += "file://resolve_symbol_clash.patch;patch=1"
diff --git a/packages/xorg-app/xrandr_X11R7.0-1.0.1.bb b/packages/xorg-app/xrandr_X11R7.0-1.0.1.bb
deleted file mode 100644
index 4b878cc32e..0000000000
--- a/packages/xorg-app/xrandr_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X Resize and Rotate extension command."
-LICENSE= "BSD-X"
-
-DEPENDS += " libxrandr libxrender virtual/libx11"
-
diff --git a/packages/xorg-app/xrandr_X11R7.1-1.0.2.bb b/packages/xorg-app/xrandr_X11R7.1-1.0.2.bb
deleted file mode 100644
index 4b878cc32e..0000000000
--- a/packages/xorg-app/xrandr_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X Resize and Rotate extension command."
-LICENSE= "BSD-X"
-
-DEPENDS += " libxrandr libxrender virtual/libx11"
-
diff --git a/packages/xorg-app/xrdb_1.0.3.bb b/packages/xorg-app/xrdb_1.0.3.bb
new file mode 100644
index 0000000000..177d3ab23b
--- /dev/null
+++ b/packages/xorg-app/xrdb_1.0.3.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "X server resource database utility"
+LICENSE = "xrdb"
+DEPENDS += "libxmu"
+PE = "1"
diff --git a/packages/xorg-app/xrdb_X11R7.0-1.0.1.bb b/packages/xorg-app/xrdb_X11R7.0-1.0.1.bb
deleted file mode 100644
index 65f08f2bb6..0000000000
--- a/packages/xorg-app/xrdb_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X server resource database utility"
-LICENSE = "xrdb"
-
-DEPENDS += " libxmu virtual/libx11 libxext"
-
diff --git a/packages/xorg-app/xrdb_X11R7.1-1.0.2.bb b/packages/xorg-app/xrdb_X11R7.1-1.0.2.bb
deleted file mode 100644
index 24a5ac9208..0000000000
--- a/packages/xorg-app/xrdb_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "X server resource database utility"
-LICENSE = "xrdb"
-
-DEPENDS += " libxmu virtual/libx11 libxext"
diff --git a/packages/xorg-app/xrefresh_X11R7.0-1.0.1.bb b/packages/xorg-app/xrefresh_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/xrefresh_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xrefresh_X11R7.1-1.0.2.bb b/packages/xorg-app/xrefresh_X11R7.1-1.0.2.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/xrefresh_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-app/xrx_X11R7.0-1.0.1.bb b/packages/xorg-app/xrx_X11R7.0-1.0.1.bb
deleted file mode 100644
index d956f3aecd..0000000000
--- a/packages/xorg-app/xrx_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw virtual/libx11 libxt libxext xtrans xproxymngproto libxau"
-
diff --git a/packages/xorg-app/xset_1.0.2.bb b/packages/xorg-app/xset_1.0.2.bb
new file mode 100644
index 0000000000..fa2e4c25a2
--- /dev/null
+++ b/packages/xorg-app/xset_1.0.2.bb
@@ -0,0 +1,11 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "user preference utility for X"
+LICENSE = "MIT"
+DEPENDS += "libxext libxxf86misc libxfontcache libxmu libxp libxau"
+PE = "1"
+
+SRC_URI += "file://disable-xkb.patch;patch=1"
+
+CFLAGS += "-D_GNU_SOURCE"
+EXTRA_OECONF = "--disable-xkb"
diff --git a/packages/xorg-app/xset_X11R7.0-1.0.1.bb b/packages/xorg-app/xset_X11R7.0-1.0.1.bb
deleted file mode 100644
index 72c315c6a1..0000000000
--- a/packages/xorg-app/xset_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "user preference utility for X"
-LICENSE = "MIT"
-
-DEPENDS += " libxmu libxext virtual/libx11 libxxf86misc libxfontcache libxp"
-
-SRC_URI += "file://disable-xkb.patch;patch=1"
-
-CFLAGS += "-D_GNU_SOURCE"
-EXTRA_OECONF = "--disable-xkb"
-
diff --git a/packages/xorg-app/xset_X11R7.1-1.0.2.bb b/packages/xorg-app/xset_X11R7.1-1.0.2.bb
deleted file mode 100644
index 72c315c6a1..0000000000
--- a/packages/xorg-app/xset_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require xorg-app-common.inc
-
-DESCRIPTION = "user preference utility for X"
-LICENSE = "MIT"
-
-DEPENDS += " libxmu libxext virtual/libx11 libxxf86misc libxfontcache libxp"
-
-SRC_URI += "file://disable-xkb.patch;patch=1"
-
-CFLAGS += "-D_GNU_SOURCE"
-EXTRA_OECONF = "--disable-xkb"
-
diff --git a/packages/xorg-app/xsetmode_X11R7.0-1.0.0.bb b/packages/xorg-app/xsetmode_X11R7.0-1.0.0.bb
deleted file mode 100644
index d473975d5e..0000000000
--- a/packages/xorg-app/xsetmode_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxi virtual/libx11"
-
diff --git a/packages/xorg-app/xsetpointer_X11R7.0-1.0.0.bb b/packages/xorg-app/xsetpointer_X11R7.0-1.0.0.bb
deleted file mode 100644
index d473975d5e..0000000000
--- a/packages/xorg-app/xsetpointer_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxi virtual/libx11"
-
diff --git a/packages/xorg-app/xsetroot_X11R7.0-1.0.1.bb b/packages/xorg-app/xsetroot_X11R7.0-1.0.1.bb
deleted file mode 100644
index d5ddbadb49..0000000000
--- a/packages/xorg-app/xsetroot_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu virtual/libx11 xbitmaps"
-
diff --git a/packages/xorg-app/xsm_X11R7.0-1.0.1.bb b/packages/xorg-app/xsm_X11R7.0-1.0.1.bb
deleted file mode 100644
index 6c22106e5a..0000000000
--- a/packages/xorg-app/xsm_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = "X Session Manager"
-
-DEPENDS += " libxaw libxt"
-
diff --git a/packages/xorg-app/xstdcmap_X11R7.0-1.0.1.bb b/packages/xorg-app/xstdcmap_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2dd7807ec5..0000000000
--- a/packages/xorg-app/xstdcmap_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu virtual/libx11"
-
diff --git a/packages/xorg-app/xterm_207.bb b/packages/xorg-app/xterm_207.bb
index 5d02234b35..8c940bd2e8 100644
--- a/packages/xorg-app/xterm_207.bb
+++ b/packages/xorg-app/xterm_207.bb
@@ -11,7 +11,7 @@ inherit autotools pkgconfig
FILES_${PN} += " /usr/lib/X11"
#EXTRA_OERECONF = " -I${S}/xterm.m4"
-EXTRA_OECONF = " --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} FREETYPE_CONFIG=${STAGING_DIR}/${BUILD_SYS}/bin/freetype-config"
+EXTRA_OECONF = " --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} FREETYPE_CONFIG=${STAGING_DIR}/${BUILD_SYS}/bin/freetype-config --disable-imake"
#do_configure_prepend () {
# mv ${S}/aclocal.m4 ${S}/xterm.m4
diff --git a/packages/xorg-app/xtrap_X11R7.0-1.0.1.bb b/packages/xorg-app/xtrap_X11R7.0-1.0.1.bb
deleted file mode 100644
index 91933be884..0000000000
--- a/packages/xorg-app/xtrap_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxtrap"
-
diff --git a/packages/xorg-app/xtrap_X11R7.1-1.0.2.bb b/packages/xorg-app/xtrap_X11R7.1-1.0.2.bb
deleted file mode 100644
index 91933be884..0000000000
--- a/packages/xorg-app/xtrap_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxtrap"
-
diff --git a/packages/xorg-app/xvidtune_X11R7.0-1.0.1.bb b/packages/xorg-app/xvidtune_X11R7.0-1.0.1.bb
deleted file mode 100644
index 66fa7fff7f..0000000000
--- a/packages/xorg-app/xvidtune_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxaw libxxf86vm libxt"
-
diff --git a/packages/xorg-app/xvinfo_1.0.1.bb b/packages/xorg-app/xvinfo_1.0.1.bb
new file mode 100644
index 0000000000..ac27f13f34
--- /dev/null
+++ b/packages/xorg-app/xvinfo_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+
+DESCRIPTION = "Print out X-Video extension adaptor information"
+DEPENDS += " libxv"
+PE = "1"
diff --git a/packages/xorg-app/xvinfo_X11R7.0-1.0.1.bb b/packages/xorg-app/xvinfo_X11R7.0-1.0.1.bb
deleted file mode 100644
index e0fe5605bc..0000000000
--- a/packages/xorg-app/xvinfo_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxv virtual/libx11"
-
diff --git a/packages/xorg-app/xwd_X11R7.0-1.0.1.bb b/packages/xorg-app/xwd_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2dd7807ec5..0000000000
--- a/packages/xorg-app/xwd_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu virtual/libx11"
-
diff --git a/packages/xorg-app/xwininfo_X11R7.0-1.0.1.bb b/packages/xorg-app/xwininfo_X11R7.0-1.0.1.bb
deleted file mode 100644
index 71fb6f0ca4..0000000000
--- a/packages/xorg-app/xwininfo_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu libxext virtual/libx11"
-
diff --git a/packages/xorg-app/xwininfo_X11R7.1-1.0.2.bb b/packages/xorg-app/xwininfo_X11R7.1-1.0.2.bb
deleted file mode 100644
index 71fb6f0ca4..0000000000
--- a/packages/xorg-app/xwininfo_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxmu libxext virtual/libx11"
-
diff --git a/packages/xorg-app/xwud_X11R7.0-1.0.1.bb b/packages/xorg-app/xwud_X11R7.0-1.0.1.bb
deleted file mode 100644
index d584483e44..0000000000
--- a/packages/xorg-app/xwud_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-app-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
diff --git a/packages/xorg-data/xbitmaps_X11R7.0-1.0.1.bb b/packages/xorg-data/xbitmaps_X11R7.0-1.0.1.bb
deleted file mode 100644
index 502b3c1419..0000000000
--- a/packages/xorg-data/xbitmaps_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-data-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-data/xcursor-themes_X11R7.0-1.0.1.bb b/packages/xorg-data/xcursor-themes_X11R7.0-1.0.1.bb
deleted file mode 100644
index 8d765a1bb7..0000000000
--- a/packages/xorg-data/xcursor-themes_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-data-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " libxcursor"
-
diff --git a/packages/xorg-data/xkbdata_X11R7.0-1.0.1.bb b/packages/xorg-data/xkbdata_X11R7.0-1.0.1.bb
deleted file mode 100644
index dc02f163f6..0000000000
--- a/packages/xorg-data/xkbdata_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-data-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-RDEPENDS = "xkbcomp"
-
-FILES_${PN} += " /usr/share/X11/xkb"
-
diff --git a/packages/xorg-doc/xorg-doc-common.inc b/packages/xorg-doc/xorg-doc-common.inc
index de47e60df1..4c3d6e8987 100644
--- a/packages/xorg-doc/xorg-doc-common.inc
+++ b/packages/xorg-doc/xorg-doc-common.inc
@@ -5,7 +5,8 @@ LICENSE = "MIT-X"
#DEPENDS = ""
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/doc/${XORG_PN}-${PV}.tar.bz2"
+XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
+SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/doc/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/packages/xorg-doc/xorg-docs_X11R7.0-1.0.1.bb b/packages/xorg-doc/xorg-docs_X11R7.0-1.0.1.bb
deleted file mode 100644
index 069f25ad10..0000000000
--- a/packages/xorg-doc/xorg-docs_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-doc-common.inc
-
-DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \
-source tree."
-
-DEPENDS += " intltool"
-
-FILES_${PN} += " /usr/share/X11/doc"
-
diff --git a/packages/xorg-doc/xorg-docs_X11R7.1-1.2.bb b/packages/xorg-doc/xorg-docs_X11R7.1-1.2.bb
deleted file mode 100644
index 069f25ad10..0000000000
--- a/packages/xorg-doc/xorg-docs_X11R7.1-1.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-doc-common.inc
-
-DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \
-source tree."
-
-DEPENDS += " intltool"
-
-FILES_${PN} += " /usr/share/X11/doc"
-
diff --git a/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb
new file mode 100644
index 0000000000..18a3ef964a
--- /dev/null
+++ b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb
@@ -0,0 +1,8 @@
+require xorg-doc-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
+
+FILES_${PN} += " /usr/share/X11/sgml"
diff --git a/packages/xorg-doc/xorg-sgml-doctools_X11R7.0-1.0.1.bb b/packages/xorg-doc/xorg-sgml-doctools_X11R7.0-1.0.1.bb
deleted file mode 100644
index 45dd0d692d..0000000000
--- a/packages/xorg-doc/xorg-sgml-doctools_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-doc-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-FILES_${PN} += " /usr/share/X11/sgml"
diff --git a/packages/xorg-doc/xorg-sgml-doctools_X11R7.1-1.1.bb b/packages/xorg-doc/xorg-sgml-doctools_X11R7.1-1.1.bb
deleted file mode 100644
index 45dd0d692d..0000000000
--- a/packages/xorg-doc/xorg-sgml-doctools_X11R7.1-1.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-doc-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-FILES_${PN} += " /usr/share/X11/sgml"
diff --git a/packages/xorg-driver/xf86-input-acecad_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-acecad_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-acecad_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-acecad_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-acecad_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-acecad_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-aiptek_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-aiptek_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-aiptek_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-aiptek_X11R7.1-1.0.1.bb b/packages/xorg-driver/xf86-input-aiptek_X11R7.1-1.0.1.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-aiptek_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-calcomp_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-calcomp_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-calcomp_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-calcomp_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-calcomp_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-calcomp_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-citron_X11R7.0-2.1.1.5.bb b/packages/xorg-driver/xf86-input-citron_X11R7.0-2.1.1.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-citron_X11R7.0-2.1.1.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-citron_X11R7.1-2.2.0.bb b/packages/xorg-driver/xf86-input-citron_X11R7.1-2.2.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-citron_X11R7.1-2.2.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-digitaledge_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-input-digitaledge_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-digitaledge_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-digitaledge_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-digitaledge_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-digitaledge_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-dmc_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-dmc_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-dmc_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-dmc_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-dmc_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-dmc_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-dynapro_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-dynapro_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-dynapro_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-dynapro_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-dynapro_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-dynapro_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-elo2300_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-elo2300_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-elo2300_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-elo2300_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-elo2300_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-elo2300_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-evdev_1.1.5.bb b/packages/xorg-driver/xf86-input-evdev_1.1.5.bb
new file mode 100644
index 0000000000..8260dd6a60
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-evdev_1.1.5.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+
+PE = "1"
+#DESCRIPTION = ""
+
+DEPENDS += " kbproto"
+
diff --git a/packages/xorg-driver/xf86-input-evdev_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-evdev_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-evdev_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-evdev_X11R7.1-1.1.2.bb b/packages/xorg-driver/xf86-input-evdev_X11R7.1-1.1.2.bb
deleted file mode 100644
index 47acb760d2..0000000000
--- a/packages/xorg-driver/xf86-input-evdev_X11R7.1-1.1.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " kbproto"
-
diff --git a/packages/xorg-driver/xf86-input-fpit_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-fpit_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-fpit_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-fpit_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-fpit_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-fpit_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-hyperpen_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-hyperpen_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-hyperpen_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-hyperpen_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-hyperpen_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-hyperpen_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-jamstudio_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-jamstudio_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-jamstudio_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-jamstudio_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-jamstudio_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-jamstudio_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-joystick_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-joystick_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-joystick_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-joystick_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-joystick_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-joystick_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-keyboard_1.1.1.bb b/packages/xorg-driver/xf86-input-keyboard_1.1.1.bb
new file mode 100644
index 0000000000..b4ef6c683e
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-keyboard_1.1.1.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " kbproto"
+
diff --git a/packages/xorg-driver/xf86-input-keyboard_1.2.0.bb b/packages/xorg-driver/xf86-input-keyboard_1.2.0.bb
new file mode 100644
index 0000000000..b4ef6c683e
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-keyboard_1.2.0.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " kbproto"
+
diff --git a/packages/xorg-driver/xf86-input-keyboard_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-input-keyboard_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index 47acb760d2..0000000000
--- a/packages/xorg-driver/xf86-input-keyboard_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " kbproto"
-
diff --git a/packages/xorg-driver/xf86-input-keyboard_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-keyboard_X11R7.1-1.1.0.bb
deleted file mode 100644
index 47acb760d2..0000000000
--- a/packages/xorg-driver/xf86-input-keyboard_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " kbproto"
-
diff --git a/packages/xorg-driver/xf86-input-magellan_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-magellan_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-magellan_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-magellan_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-magellan_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-magellan_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-magictouch_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-magictouch_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-magictouch_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-magictouch_X11R7.1-1.0.0.5.bb b/packages/xorg-driver/xf86-input-magictouch_X11R7.1-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-magictouch_X11R7.1-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-microtouch_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-microtouch_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-microtouch_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-microtouch_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-microtouch_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-microtouch_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-mouse_1.1.2.bb b/packages/xorg-driver/xf86-input-mouse_1.1.2.bb
new file mode 100644
index 0000000000..eb464ad5a6
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-mouse_1.1.2.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+DESCRIPTION = "Mouse Support in X11"
+
+#DEPENDS += " "
+
diff --git a/packages/xorg-driver/xf86-input-mouse_1.2.1.bb b/packages/xorg-driver/xf86-input-mouse_1.2.1.bb
new file mode 100644
index 0000000000..eb464ad5a6
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-mouse_1.2.1.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+DESCRIPTION = "Mouse Support in X11"
+
+#DEPENDS += " "
+
diff --git a/packages/xorg-driver/xf86-input-mouse_X11R7.0-1.0.3.1.bb b/packages/xorg-driver/xf86-input-mouse_X11R7.0-1.0.3.1.bb
deleted file mode 100644
index a76eec5e1f..0000000000
--- a/packages/xorg-driver/xf86-input-mouse_X11R7.0-1.0.3.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-DESCRIPTION = "Mouse Support in X11"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-mouse_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-mouse_X11R7.1-1.1.0.bb
deleted file mode 100644
index a76eec5e1f..0000000000
--- a/packages/xorg-driver/xf86-input-mouse_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-DESCRIPTION = "Mouse Support in X11"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-mutouch_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-mutouch_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-mutouch_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-mutouch_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-mutouch_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-mutouch_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-palmax_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-palmax_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-palmax_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-palmax_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-palmax_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-palmax_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-penmount_1.2.0.bb b/packages/xorg-driver/xf86-input-penmount_1.2.0.bb
new file mode 100644
index 0000000000..f6032bceaa
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-penmount_1.2.0.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
+
diff --git a/packages/xorg-driver/xf86-input-penmount_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-penmount_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-penmount_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-penmount_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-penmount_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-penmount_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-spaceorb_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-spaceorb_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-spaceorb_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-spaceorb_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-spaceorb_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-spaceorb_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-summa_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-summa_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-summa_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-summa_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-summa_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-summa_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-tek4957_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-tek4957_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-tek4957_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-tek4957_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-tek4957_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-tek4957_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-ur98_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-ur98_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-ur98_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-ur98_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-ur98_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-ur98_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-vmmouse_X11R7.1-12.4.0.bb b/packages/xorg-driver/xf86-input-vmmouse_X11R7.1-12.4.0.bb
deleted file mode 100644
index 7942a3ab2e..0000000000
--- a/packages/xorg-driver/xf86-input-vmmouse_X11R7.1-12.4.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-driver-input.inc
-
-DESCRIPTION = "The VMMouse driver enables support for the special VMMouse protocol \
-that is provided by VMware virtual machines to give absolute pointer \
-positioning. "
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-void_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-void_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-void_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-input-void_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-input-void_X11R7.1-1.1.0.bb
deleted file mode 100644
index ee92f6c162..0000000000
--- a/packages/xorg-driver/xf86-input-void_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-input.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-video-apm_X11R7.0-1.0.1.5.bb b/packages/xorg-driver/xf86-video-apm_X11R7.0-1.0.1.5.bb
deleted file mode 100644
index 63e473c720..0000000000
--- a/packages/xorg-driver/xf86-video-apm_X11R7.0-1.0.1.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
-
-DEPENDS += " xf86rushproto"
-
diff --git a/packages/xorg-driver/xf86-video-apm_X11R7.1-1.1.1.bb b/packages/xorg-driver/xf86-video-apm_X11R7.1-1.1.1.bb
deleted file mode 100644
index 63e473c720..0000000000
--- a/packages/xorg-driver/xf86-video-apm_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
-
-DEPENDS += " xf86rushproto"
-
diff --git a/packages/xorg-driver/xf86-video-ark_X11R7.0-0.5.0.5.bb b/packages/xorg-driver/xf86-video-ark_X11R7.0-0.5.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-ark_X11R7.0-0.5.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-ark_X11R7.1-0.6.0.bb b/packages/xorg-driver/xf86-video-ark_X11R7.1-0.6.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-ark_X11R7.1-0.6.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-ast_X11R7.1-0.81.0.bb b/packages/xorg-driver/xf86-video-ast_X11R7.1-0.81.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-ast_X11R7.1-0.81.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-ati_6.6.3.bb b/packages/xorg-driver/xf86-video-ati_6.6.3.bb
new file mode 100644
index 0000000000..994b8b6a3c
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-ati_6.6.3.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-ati_X11R7.0-6.5.7.3.bb b/packages/xorg-driver/xf86-video-ati_X11R7.0-6.5.7.3.bb
deleted file mode 100644
index c811bf888a..0000000000
--- a/packages/xorg-driver/xf86-video-ati_X11R7.0-6.5.7.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-ati_X11R7.1-6.6.0.bb b/packages/xorg-driver/xf86-video-ati_X11R7.1-6.6.0.bb
deleted file mode 100644
index c811bf888a..0000000000
--- a/packages/xorg-driver/xf86-video-ati_X11R7.1-6.6.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-chips_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-video-chips_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-chips_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-chips_X11R7.1-1.1.1.bb b/packages/xorg-driver/xf86-video-chips_X11R7.1-1.1.1.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-chips_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-cirrus_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-cirrus_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-cirrus_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-cirrus_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-cirrus_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-cirrus_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-cyrix_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-cyrix_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-cyrix_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-cyrix_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-cyrix_X11R7.1-1.1.0.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-cyrix_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-dummy_X11R7.0-0.1.0.5.bb b/packages/xorg-driver/xf86-video-dummy_X11R7.0-0.1.0.5.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-dummy_X11R7.0-0.1.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-dummy_X11R7.1-0.2.0.bb b/packages/xorg-driver/xf86-video-dummy_X11R7.1-0.2.0.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-dummy_X11R7.1-0.2.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-fbdev_0.3.1.bb b/packages/xorg-driver/xf86-video-fbdev_0.3.1.bb
new file mode 100644
index 0000000000..843aa707b7
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-fbdev_0.3.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-fbdev_X11R7.0-0.1.0.5.bb b/packages/xorg-driver/xf86-video-fbdev_X11R7.0-0.1.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-fbdev_X11R7.0-0.1.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-fbdev_X11R7.1-0.3.0.bb b/packages/xorg-driver/xf86-video-fbdev_X11R7.1-0.3.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-fbdev_X11R7.1-0.3.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-glint_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-video-glint_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index 4b57f17b9e..0000000000
--- a/packages/xorg-driver/xf86-video-glint_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-glint_X11R7.1-1.1.1.bb b/packages/xorg-driver/xf86-video-glint_X11R7.1-1.1.1.bb
deleted file mode 100644
index 4b57f17b9e..0000000000
--- a/packages/xorg-driver/xf86-video-glint_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-i128_1.1.0.6.bb b/packages/xorg-driver/xf86-video-i128_1.1.0.6.bb
new file mode 100644
index 0000000000..89cedc8b1a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-i128_1.1.0.6.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "Number Nine I128 for X11"
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-i128_X11R7.0-1.1.0.5.bb b/packages/xorg-driver/xf86-video-i128_X11R7.0-1.1.0.5.bb
deleted file mode 100644
index 3b867c9c56..0000000000
--- a/packages/xorg-driver/xf86-video-i128_X11R7.0-1.1.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "Number Nine I128 for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-i128_X11R7.1-1.1.0.5.bb b/packages/xorg-driver/xf86-video-i128_X11R7.1-1.1.0.5.bb
deleted file mode 100644
index 3b867c9c56..0000000000
--- a/packages/xorg-driver/xf86-video-i128_X11R7.1-1.1.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "Number Nine I128 for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-i740_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-i740_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index 4935a006cd..0000000000
--- a/packages/xorg-driver/xf86-video-i740_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "I740 for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-i740_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-i740_X11R7.1-1.1.0.bb
deleted file mode 100644
index 4935a006cd..0000000000
--- a/packages/xorg-driver/xf86-video-i740_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "I740 for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-i810_1.6.5.bb b/packages/xorg-driver/xf86-video-i810_1.6.5.bb
new file mode 100644
index 0000000000..198985f247
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-i810_1.6.5.bb
@@ -0,0 +1,7 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "I810 for X11"
+
+DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
+
diff --git a/packages/xorg-driver/xf86-video-i810_X11R7.0-1.4.1.3.bb b/packages/xorg-driver/xf86-video-i810_X11R7.0-1.4.1.3.bb
deleted file mode 100644
index 8dc577aeaa..0000000000
--- a/packages/xorg-driver/xf86-video-i810_X11R7.0-1.4.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "I810 for X11"
-
-DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-i810_X11R7.1-1.6.0.bb b/packages/xorg-driver/xf86-video-i810_X11R7.1-1.6.0.bb
deleted file mode 100644
index 8dc577aeaa..0000000000
--- a/packages/xorg-driver/xf86-video-i810_X11R7.1-1.6.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "I810 for X11"
-
-DEPENDS += " virtual/libx11 libxvmc drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-imstt_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-imstt_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-imstt_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-imstt_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-imstt_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-imstt_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-mga_X11R7.0-1.2.1.3.bb b/packages/xorg-driver/xf86-video-mga_X11R7.0-1.2.1.3.bb
deleted file mode 100644
index a66e410315..0000000000
--- a/packages/xorg-driver/xf86-video-mga_X11R7.0-1.2.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-mga_X11R7.1-1.4.1.bb b/packages/xorg-driver/xf86-video-mga_X11R7.1-1.4.1.bb
deleted file mode 100644
index a66e410315..0000000000
--- a/packages/xorg-driver/xf86-video-mga_X11R7.1-1.4.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-neomagic_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-neomagic_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index e5f997e0fa..0000000000
--- a/packages/xorg-driver/xf86-video-neomagic_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-neomagic_X11R7.1-1.1.1.bb b/packages/xorg-driver/xf86-video-neomagic_X11R7.1-1.1.1.bb
deleted file mode 100644
index 4c2a45f05e..0000000000
--- a/packages/xorg-driver/xf86-video-neomagic_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
-
-DEPENDS += " xf86dgaproto"
-
diff --git a/packages/xorg-driver/xf86-video-newport_0.2.1.bb b/packages/xorg-driver/xf86-video-newport_0.2.1.bb
new file mode 100644
index 0000000000..b9f88fcc6f
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-newport_0.2.1.bb
@@ -0,0 +1,7 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "This is an unaccelerated driver for the SGI newport cards."
+
+#DEPENDS += " "
+
diff --git a/packages/xorg-driver/xf86-video-newport_X11R7.0-0.1.4.1.bb b/packages/xorg-driver/xf86-video-newport_X11R7.0-0.1.4.1.bb
deleted file mode 100644
index 956a2021c1..0000000000
--- a/packages/xorg-driver/xf86-video-newport_X11R7.0-0.1.4.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "This is an unaccelerated driver for the SGI newport cards."
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-video-newport_X11R7.1-0.2.0.bb b/packages/xorg-driver/xf86-video-newport_X11R7.1-0.2.0.bb
deleted file mode 100644
index 956a2021c1..0000000000
--- a/packages/xorg-driver/xf86-video-newport_X11R7.1-0.2.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "This is an unaccelerated driver for the SGI newport cards."
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-video-nsc_2.8.2.bb b/packages/xorg-driver/xf86-video-nsc_2.8.2.bb
new file mode 100644
index 0000000000..bf50e87839
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-nsc_2.8.2.bb
@@ -0,0 +1,9 @@
+require xorg-driver-video.inc
+PE = "1"
+PR = "r2"
+
+DEPENDS += " xf86dgaproto"
+
+# This driver is broken because it's seldom updated. It compiles
+# but fails to communicate with the card without this deprecated define.
+EXTRA_OEMAKE += "CFLAGS+=-DXFree86Server"
diff --git a/packages/xorg-driver/xf86-video-nsc_X11R7.0-2.7.6.5.bb b/packages/xorg-driver/xf86-video-nsc_X11R7.0-2.7.6.5.bb
deleted file mode 100644
index 1dad571e13..0000000000
--- a/packages/xorg-driver/xf86-video-nsc_X11R7.0-2.7.6.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
-
diff --git a/packages/xorg-driver/xf86-video-nsc_X11R7.1-2.8.1.bb b/packages/xorg-driver/xf86-video-nsc_X11R7.1-2.8.1.bb
deleted file mode 100644
index 1dad571e13..0000000000
--- a/packages/xorg-driver/xf86-video-nsc_X11R7.1-2.8.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
-
diff --git a/packages/xorg-driver/xf86-video-nv_1.2.2.1.bb b/packages/xorg-driver/xf86-video-nv_1.2.2.1.bb
new file mode 100644
index 0000000000..843aa707b7
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-nv_1.2.2.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-nv_X11R7.0-1.0.1.5.bb b/packages/xorg-driver/xf86-video-nv_X11R7.0-1.0.1.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-nv_X11R7.0-1.0.1.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-nv_X11R7.1-1.1.1.bb b/packages/xorg-driver/xf86-video-nv_X11R7.1-1.1.1.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-nv_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-rendition_4.1.3.bb b/packages/xorg-driver/xf86-video-rendition_4.1.3.bb
new file mode 100644
index 0000000000..e6c89a8c74
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-rendition_4.1.3.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-rendition_X11R7.0-4.0.1.3.bb b/packages/xorg-driver/xf86-video-rendition_X11R7.0-4.0.1.3.bb
deleted file mode 100644
index 84edd97fd3..0000000000
--- a/packages/xorg-driver/xf86-video-rendition_X11R7.0-4.0.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-rendition_X11R7.1-4.1.0.bb b/packages/xorg-driver/xf86-video-rendition_X11R7.1-4.1.0.bb
deleted file mode 100644
index 84edd97fd3..0000000000
--- a/packages/xorg-driver/xf86-video-rendition_X11R7.1-4.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver supporting cards based on the V1000 or the V2x00."
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-s3_0.5.0.bb b/packages/xorg-driver/xf86-video-s3_0.5.0.bb
new file mode 100644
index 0000000000..843aa707b7
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-s3_0.5.0.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-s3_X11R7.0-0.3.5.5.bb b/packages/xorg-driver/xf86-video-s3_X11R7.0-0.3.5.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-s3_X11R7.0-0.3.5.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-s3_X11R7.1-0.4.1.bb b/packages/xorg-driver/xf86-video-s3_X11R7.1-0.4.1.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-s3_X11R7.1-0.4.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-s3virge_X11R7.0-1.8.6.5.bb b/packages/xorg-driver/xf86-video-s3virge_X11R7.0-1.8.6.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-s3virge_X11R7.0-1.8.6.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-s3virge_X11R7.1-1.9.1.bb b/packages/xorg-driver/xf86-video-s3virge_X11R7.1-1.9.1.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-s3virge_X11R7.1-1.9.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-savage_2.1.2.bb b/packages/xorg-driver/xf86-video-savage_2.1.2.bb
new file mode 100644
index 0000000000..999b319b23
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-savage_2.1.2.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-savage_X11R7.0-2.0.2.3.bb b/packages/xorg-driver/xf86-video-savage_X11R7.0-2.0.2.3.bb
deleted file mode 100644
index d05a26bddd..0000000000
--- a/packages/xorg-driver/xf86-video-savage_X11R7.0-2.0.2.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-savage_X11R7.1-2.1.1.bb b/packages/xorg-driver/xf86-video-savage_X11R7.1-2.1.1.bb
deleted file mode 100644
index f898676111..0000000000
--- a/packages/xorg-driver/xf86-video-savage_X11R7.1-2.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-siliconmotion_1.5.1.bb b/packages/xorg-driver/xf86-video-siliconmotion_1.5.1.bb
new file mode 100644
index 0000000000..a6f3a5c2c4
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-siliconmotion_1.5.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+
+PE = "1"
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-siliconmotion_X11R7.0-1.3.1.5.bb b/packages/xorg-driver/xf86-video-siliconmotion_X11R7.0-1.3.1.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-siliconmotion_X11R7.0-1.3.1.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-siliconmotion_X11R7.1-1.4.1.bb b/packages/xorg-driver/xf86-video-siliconmotion_X11R7.1-1.4.1.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-siliconmotion_X11R7.1-1.4.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-sis_0.9.3.bb b/packages/xorg-driver/xf86-video-sis_0.9.3.bb
new file mode 100644
index 0000000000..ab53a64646
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-sis_0.9.3.bb
@@ -0,0 +1,7 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto"
+
diff --git a/packages/xorg-driver/xf86-video-sis_X11R7.0-0.8.1.3.bb b/packages/xorg-driver/xf86-video-sis_X11R7.0-0.8.1.3.bb
deleted file mode 100644
index 2cd161cec2..0000000000
--- a/packages/xorg-driver/xf86-video-sis_X11R7.0-0.8.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-sis_X11R7.1-0.9.1.bb b/packages/xorg-driver/xf86-video-sis_X11R7.1-0.9.1.bb
deleted file mode 100644
index 2cd161cec2..0000000000
--- a/packages/xorg-driver/xf86-video-sis_X11R7.1-0.9.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto xf86dgaproto drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-sisusb_X11R7.0-0.7.1.3.bb b/packages/xorg-driver/xf86-video-sisusb_X11R7.0-0.7.1.3.bb
deleted file mode 100644
index 9e662ff6bb..0000000000
--- a/packages/xorg-driver/xf86-video-sisusb_X11R7.0-0.7.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto"
-
diff --git a/packages/xorg-driver/xf86-video-sisusb_X11R7.1-0.8.1.bb b/packages/xorg-driver/xf86-video-sisusb_X11R7.1-0.8.1.bb
deleted file mode 100644
index 9e662ff6bb..0000000000
--- a/packages/xorg-driver/xf86-video-sisusb_X11R7.1-0.8.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xineramaproto xf86miscproto"
-
diff --git a/packages/xorg-driver/xf86-video-sunbw2_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-sunbw2_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index f005c731ef..0000000000
--- a/packages/xorg-driver/xf86-video-sunbw2_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-driver/xf86-video-sunbw2_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-sunbw2_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-sunbw2_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg14_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-suncg14_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg14_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg14_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-suncg14_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg14_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg3_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-suncg3_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg3_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg3_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-suncg3_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg3_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg6_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-suncg6_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg6_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suncg6_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-suncg6_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suncg6_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-sunffb_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-video-sunffb_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index d05a26bddd..0000000000
--- a/packages/xorg-driver/xf86-video-sunffb_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
-
diff --git a/packages/xorg-driver/xf86-video-sunffb_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-sunffb_X11R7.1-1.1.0.bb
deleted file mode 100644
index f898676111..0000000000
--- a/packages/xorg-driver/xf86-video-sunffb_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-sunleo_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-sunleo_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-sunleo_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-sunleo_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-sunleo_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-sunleo_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suntcx_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-suntcx_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suntcx_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-suntcx_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-suntcx_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-suntcx_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-tdfx_1.3.0.bb b/packages/xorg-driver/xf86-video-tdfx_1.3.0.bb
new file mode 100644
index 0000000000..999b319b23
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-tdfx_1.3.0.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-tdfx_X11R7.0-1.1.1.3.bb b/packages/xorg-driver/xf86-video-tdfx_X11R7.0-1.1.1.3.bb
deleted file mode 100644
index f898676111..0000000000
--- a/packages/xorg-driver/xf86-video-tdfx_X11R7.0-1.1.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-tdfx_X11R7.1-1.2.1.bb b/packages/xorg-driver/xf86-video-tdfx_X11R7.1-1.2.1.bb
deleted file mode 100644
index f898676111..0000000000
--- a/packages/xorg-driver/xf86-video-tdfx_X11R7.1-1.2.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-tga_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-tga_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index 3ede51328b..0000000000
--- a/packages/xorg-driver/xf86-video-tga_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "DEC 21030 X11 driver"
-
-DEPENDS += " xf86dgaproto"
-
diff --git a/packages/xorg-driver/xf86-video-tga_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-tga_X11R7.1-1.1.0.bb
deleted file mode 100644
index 3ede51328b..0000000000
--- a/packages/xorg-driver/xf86-video-tga_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "DEC 21030 X11 driver"
-
-DEPENDS += " xf86dgaproto"
-
diff --git a/packages/xorg-driver/xf86-video-trident_1.2.3.bb b/packages/xorg-driver/xf86-video-trident_1.2.3.bb
new file mode 100644
index 0000000000..065e64dfb1
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-trident_1.2.3.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-trident_X11R7.0-1.0.1.2.bb b/packages/xorg-driver/xf86-video-trident_X11R7.0-1.0.1.2.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-trident_X11R7.0-1.0.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-trident_X11R7.1-1.2.1.bb b/packages/xorg-driver/xf86-video-trident_X11R7.1-1.2.1.bb
deleted file mode 100644
index 92216d1e4a..0000000000
--- a/packages/xorg-driver/xf86-video-trident_X11R7.1-1.2.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-tseng_1.1.1.bb b/packages/xorg-driver/xf86-video-tseng_1.1.1.bb
new file mode 100644
index 0000000000..843aa707b7
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-tseng_1.1.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-tseng_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-tseng_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-tseng_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-tseng_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-tseng_X11R7.1-1.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-tseng_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-v4l_X11R7.0-0.0.1.5.bb b/packages/xorg-driver/xf86-video-v4l_X11R7.0-0.0.1.5.bb
deleted file mode 100644
index ae5f660b08..0000000000
--- a/packages/xorg-driver/xf86-video-v4l_X11R7.0-0.0.1.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "Video 4 Linux adaptor driver for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-v4l_X11R7.1-0.1.1.bb b/packages/xorg-driver/xf86-video-v4l_X11R7.1-0.1.1.bb
deleted file mode 100644
index ae5f660b08..0000000000
--- a/packages/xorg-driver/xf86-video-v4l_X11R7.1-0.1.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "Video 4 Linux adaptor driver for X11"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vesa_1.3.0.bb b/packages/xorg-driver/xf86-video-vesa_1.3.0.bb
new file mode 100644
index 0000000000..1e6760c3dc
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-vesa_1.3.0.bb
@@ -0,0 +1,8 @@
+require xorg-driver-video.inc
+PE = "1"
+
+SRC_URI += "file://fix-includepath.patch;patch=1"
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vesa_X11R7.0-1.0.1.3.bb b/packages/xorg-driver/xf86-video-vesa_X11R7.0-1.0.1.3.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-vesa_X11R7.0-1.0.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vesa_X11R7.1-1.2.0.bb b/packages/xorg-driver/xf86-video-vesa_X11R7.1-1.2.0.bb
deleted file mode 100644
index c04d4b4346..0000000000
--- a/packages/xorg-driver/xf86-video-vesa_X11R7.1-1.2.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-driver-video.inc
-
-SRC_URI += "file://fix-includepath.patch;patch=1"
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vga_X11R7.0-4.0.0.5.bb b/packages/xorg-driver/xf86-video-vga_X11R7.0-4.0.0.5.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-vga_X11R7.0-4.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vga_X11R7.1-4.1.0.bb b/packages/xorg-driver/xf86-video-vga_X11R7.1-4.1.0.bb
deleted file mode 100644
index a87a5f7a56..0000000000
--- a/packages/xorg-driver/xf86-video-vga_X11R7.1-4.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-via_0.2.2.bb b/packages/xorg-driver/xf86-video-via_0.2.2.bb
new file mode 100644
index 0000000000..a3ce7324c3
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-via_0.2.2.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS += " drm xf86driproto libxvmc"
diff --git a/packages/xorg-driver/xf86-video-via_X11R7.0-0.1.33.2.bb b/packages/xorg-driver/xf86-video-via_X11R7.0-0.1.33.2.bb
deleted file mode 100644
index e202a0d54e..0000000000
--- a/packages/xorg-driver/xf86-video-via_X11R7.0-0.1.33.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto libxvmc"
diff --git a/packages/xorg-driver/xf86-video-via_X11R7.1-0.2.1.bb b/packages/xorg-driver/xf86-video-via_X11R7.1-0.2.1.bb
deleted file mode 100644
index e202a0d54e..0000000000
--- a/packages/xorg-driver/xf86-video-via_X11R7.1-0.2.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " drm xf86driproto libxvmc"
diff --git a/packages/xorg-driver/xf86-video-vmware_10.14.1.bb b/packages/xorg-driver/xf86-video-vmware_10.14.1.bb
new file mode 100644
index 0000000000..c8169407cb
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-vmware_10.14.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "X11 driver for VMware SVGA Device"
+
+#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vmware_X11R7.0-10.11.1.3.bb b/packages/xorg-driver/xf86-video-vmware_X11R7.0-10.11.1.3.bb
deleted file mode 100644
index c8898e462b..0000000000
--- a/packages/xorg-driver/xf86-video-vmware_X11R7.0-10.11.1.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for VMware SVGA Device"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-vmware_X11R7.1-10.13.0.bb b/packages/xorg-driver/xf86-video-vmware_X11R7.1-10.13.0.bb
deleted file mode 100644
index c8898e462b..0000000000
--- a/packages/xorg-driver/xf86-video-vmware_X11R7.1-10.13.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for VMware SVGA Device"
-
-#DEPENDS += " "
diff --git a/packages/xorg-driver/xf86-video-voodoo_1.1.1.bb b/packages/xorg-driver/xf86-video-voodoo_1.1.1.bb
new file mode 100644
index 0000000000..bfceb2995c
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-voodoo_1.1.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
+
+DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-voodoo_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-video-voodoo_X11R7.0-1.0.0.5.bb
deleted file mode 100644
index db2545c9c3..0000000000
--- a/packages/xorg-driver/xf86-video-voodoo_X11R7.0-1.0.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xf86-video-voodoo_X11R7.1-1.1.0.bb b/packages/xorg-driver/xf86-video-voodoo_X11R7.1-1.1.0.bb
deleted file mode 100644
index db2545c9c3..0000000000
--- a/packages/xorg-driver/xf86-video-voodoo_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-driver-video.inc
-
-DESCRIPTION = "X11 driver for Voodoo/Voodoo2"
-
-DEPENDS += " xf86dgaproto"
diff --git a/packages/xorg-driver/xorg-driver-common.inc b/packages/xorg-driver/xorg-driver-common.inc
index ae85f602f0..8053e6c236 100644
--- a/packages/xorg-driver/xorg-driver-common.inc
+++ b/packages/xorg-driver/xorg-driver-common.inc
@@ -7,7 +7,8 @@ PR = "r1"
DEPENDS = "randrproto xorg-server xproto"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/driver/${XORG_PN}-${PV}.tar.bz2"
+XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
+SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/driver/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/packages/xorg-font/encodings_1.0.2.bb b/packages/xorg-font/encodings_1.0.2.bb
new file mode 100644
index 0000000000..da67d037aa
--- /dev/null
+++ b/packages/xorg-font/encodings_1.0.2.bb
@@ -0,0 +1,8 @@
+require xorg-font-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
+
+DEPENDS = "mkfontscale-native"
+RDEPENDS = ""
+
diff --git a/packages/xorg-font/encodings_X11R7.0-1.0.0.bb b/packages/xorg-font/encodings_X11R7.0-1.0.0.bb
deleted file mode 100644
index f25d150d61..0000000000
--- a/packages/xorg-font/encodings_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS = "mkfontscale-native"
-RDEPENDS = ""
-
diff --git a/packages/xorg-font/font-adobe-100dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-adobe-100dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index 94e4a48083..0000000000
--- a/packages/xorg-font/font-adobe-100dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-adobe-75dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-adobe-75dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-adobe-75dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-adobe-utopia-100dpi_X11R7.0-1.0.1.bb b/packages/xorg-font/font-adobe-utopia-100dpi_X11R7.0-1.0.1.bb
deleted file mode 100644
index 536a3f6e60..0000000000
--- a/packages/xorg-font/font-adobe-utopia-100dpi_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "Adobe typeface software"
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-adobe-utopia-75dpi_X11R7.0-1.0.1.bb b/packages/xorg-font/font-adobe-utopia-75dpi_X11R7.0-1.0.1.bb
deleted file mode 100644
index cd9773cc61..0000000000
--- a/packages/xorg-font/font-adobe-utopia-75dpi_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "Adobe typeface software"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-adobe-utopia-type1_X11R7.0-1.0.1.bb b/packages/xorg-font/font-adobe-utopia-type1_X11R7.0-1.0.1.bb
deleted file mode 100644
index cd9773cc61..0000000000
--- a/packages/xorg-font/font-adobe-utopia-type1_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "Adobe typeface software"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-alias_X11R7.0-1.0.1.bb b/packages/xorg-font/font-alias_X11R7.0-1.0.1.bb
deleted file mode 100644
index 12f8c63088..0000000000
--- a/packages/xorg-font/font-alias_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "X font aliases."
-
-DEPENDS = "virtual/xserver font-util"
-RDEPENDS = "encodings font-util"
-
diff --git a/packages/xorg-font/font-arabic-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-arabic-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index 8b8f914f4f..0000000000
--- a/packages/xorg-font/font-arabic-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "100dpi, 24 point (approximately) font to minimally support (almost) all \
-of the Arabic characters available in Unicode."
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-bh-100dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-100dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-100dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bh-75dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-75dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-75dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bh-lucidatypewriter-100dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-100dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-lucidatypewriter-100dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bh-lucidatypewriter-75dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-75dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-lucidatypewriter-75dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bh-ttf_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-ttf_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-ttf_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bh-type1_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bh-type1_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bh-type1_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bitstream-100dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bitstream-100dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bitstream-100dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bitstream-75dpi_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bitstream-75dpi_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bitstream-75dpi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bitstream-speedo_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bitstream-speedo_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bitstream-speedo_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-bitstream-type1_X11R7.0-1.0.0.bb b/packages/xorg-font/font-bitstream-type1_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-bitstream-type1_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-cronyx-cyrillic_X11R7.0-1.0.0.bb b/packages/xorg-font/font-cronyx-cyrillic_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-cronyx-cyrillic_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-cursor-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-cursor-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-cursor-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-daewoo-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-daewoo-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-daewoo-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-dec-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-dec-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-dec-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-ibm-type1_X11R7.0-1.0.0.bb b/packages/xorg-font/font-ibm-type1_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-ibm-type1_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-isas-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-isas-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-isas-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-jis-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-jis-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-jis-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-micro-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-micro-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index 82d6f5350e..0000000000
--- a/packages/xorg-font/font-micro-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
--EXTRA_OECONF = "--disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r"
diff --git a/packages/xorg-font/font-misc-cyrillic_X11R7.0-1.0.0.bb b/packages/xorg-font/font-misc-cyrillic_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-misc-cyrillic_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-misc-ethiopic_X11R7.0-1.0.0.bb b/packages/xorg-font/font-misc-ethiopic_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-misc-ethiopic_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-misc-meltho_X11R7.0-1.0.0.bb b/packages/xorg-font/font-misc-meltho_X11R7.0-1.0.0.bb
deleted file mode 100644
index 5ab5967ab6..0000000000
--- a/packages/xorg-font/font-misc-meltho_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "These fonts are designed for the display of Syriac text."
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-misc-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-misc-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-misc-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-mutt-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-mutt-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index 216c123346..0000000000
--- a/packages/xorg-font/font-mutt-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "Provides a 12pt, 100dpi proportional font with many of \
-the glyphs needed for Unicode text."
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-font/font-schumacher-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-schumacher-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-schumacher-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-screen-cyrillic_X11R7.0-1.0.0.bb b/packages/xorg-font/font-screen-cyrillic_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-screen-cyrillic_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-sony-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-sony-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-sony-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-sun-misc_X11R7.0-1.0.0.bb b/packages/xorg-font/font-sun-misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-sun-misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-util-native_X11R7.0-1.0.0.bb b/packages/xorg-font/font-util-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index e12d658230..0000000000
--- a/packages/xorg-font/font-util-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "X font utils."
-SECTION = "x11/fonts"
-LICENSE = "MIT-X"
-
-S="${WORKDIR}/font-util-${PV}"
-
-DEPENDS = "bdftopcf-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/font/font-util-${PV}.tar.gz"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-font/font-util-native_X11R7.1-1.0.1.bb b/packages/xorg-font/font-util-native_X11R7.1-1.0.1.bb
deleted file mode 100644
index 86e7b62b63..0000000000
--- a/packages/xorg-font/font-util-native_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "X font utils."
-SECTION = "x11/fonts"
-LICENSE = "MIT-X"
-
-S="${WORKDIR}/font-util-${PV}"
-
-DEPENDS = "bdftopcf-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/font/font-util-${PV}.tar.gz"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-font/font-util_X11R7.0-1.0.0.bb b/packages/xorg-font/font-util_X11R7.0-1.0.0.bb
deleted file mode 100644
index fea5089e2d..0000000000
--- a/packages/xorg-font/font-util_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "X font utils."
-
-DEPENDS = "encodings"
-RDEPENDS = "encodings"
-
diff --git a/packages/xorg-font/font-util_X11R7.1-1.0.1.bb b/packages/xorg-font/font-util_X11R7.1-1.0.1.bb
deleted file mode 100644
index 9074beb55a..0000000000
--- a/packages/xorg-font/font-util_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-font-common.inc
-
-DESCRIPTION = "X font utils."
-
-DEPENDS = "encodings"
-RDEPENDS = "mkfontdir mkfontscale encodings"
-
-PR="r1"
-
diff --git a/packages/xorg-font/font-winitzki-cyrillic_X11R7.0-1.0.0.bb b/packages/xorg-font/font-winitzki-cyrillic_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-winitzki-cyrillic_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/font-xfree86-type1_X11R7.0-1.0.0.bb b/packages/xorg-font/font-xfree86-type1_X11R7.0-1.0.0.bb
deleted file mode 100644
index e929e911ec..0000000000
--- a/packages/xorg-font/font-xfree86-type1_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-font-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-font/xorg-font-common.inc b/packages/xorg-font/xorg-font-common.inc
index 137ee0917f..148437a3e3 100644
--- a/packages/xorg-font/xorg-font-common.inc
+++ b/packages/xorg-font/xorg-font-common.inc
@@ -6,7 +6,8 @@ DEPENDS = " encodings font-alias font-util-native mkfontdir-native mkfontscale-n
RDEPENDS = "encodings font-util font-alias"
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/font/${XORG_PN}-${PV}.tar.bz2"
+XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
+SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/font/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/packages/xorg-lib/diet-x11/makekeys.diff b/packages/xorg-lib/diet-x11/makekeys.diff
new file mode 100644
index 0000000000..cea08725ec
--- /dev/null
+++ b/packages/xorg-lib/diet-x11/makekeys.diff
@@ -0,0 +1,12 @@
+diff -Nru libX11-X11R7.1-1.0.1.org/src/util/makekeys.c libX11-X11R7.1-1.0.1/src/util/makekeys.c
+--- libX11-X11R7.1-1.0.1.org/src/util/makekeys.c 2007-03-08 14:34:34.000000000 +0100
++++ libX11-X11R7.1-1.0.1/src/util/makekeys.c 2007-03-08 14:34:58.000000000 +0100
+@@ -49,7 +49,7 @@
+ KeySym val;
+ } info[KTNUM];
+
+-#define MIN_REHASH 10
++#define MIN_REHASH 15
+ #define MATCHES 10
+
+ char tab[KTNUM];
diff --git a/packages/xorg-lib/diet-x11_1.1.1.bb b/packages/xorg-lib/diet-x11_1.1.1.bb
new file mode 100644
index 0000000000..8dc3174a16
--- /dev/null
+++ b/packages/xorg-lib/diet-x11_1.1.1.bb
@@ -0,0 +1,11 @@
+SECTION = "x11/base"
+require libx11_${PV}.bb
+
+EXTRA_OECONF += "--disable-udc --enable-xcms --disable-xlocale --disable-xkb"
+CFLAGS += "-D_GNU_SOURCE"
+
+SRC_URI += "file://X18NCMSstubs.diff;patch=1 \
+ file://fix-disable-xlocale.diff;patch=1 \
+ file://fix-utf8-wrong-define.patch;patch=1 \
+ file://xim.patch;patch=1 \
+ file://xchar2b.patch;patch=1"
diff --git a/packages/xorg-lib/diet-x11_1.1.2.bb b/packages/xorg-lib/diet-x11_1.1.2.bb
new file mode 100644
index 0000000000..f032987b88
--- /dev/null
+++ b/packages/xorg-lib/diet-x11_1.1.2.bb
@@ -0,0 +1,8 @@
+require libx11_${PV}.bb
+
+SRC_URI += "file://X18NCMSstubs.diff;patch=1 \
+ file://fix-disable-xlocale.diff;patch=1 \
+ file://fix-utf8-wrong-define.patch;patch=1"
+
+EXTRA_OECONF += "--disable-udc --disable-xcms --disable-xlocale --disable-xkb"
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/packages/xorg-lib/diet-x11_X11R7.0-1.0.0.bb b/packages/xorg-lib/diet-x11_X11R7.0-1.0.0.bb
deleted file mode 100644
index b30098c850..0000000000
--- a/packages/xorg-lib/diet-x11_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "x11/base"
-require libx11_${PV}.bb
-
-EXTRA_OECONF += "--disable-udc --disable-xcms --disable-xlocale --disable-xkb"
-CFLAGS += "-D_GNU_SOURCE"
-
-SRC_URI += "file://X18NCMSstubs.diff;patch=1 \
- file://fix-disable-xlocale.diff;patch=1 \
- file://fix-utf8-wrong-define.patch;patch=1"
-
-#do_stage_append () {
-# rm -f ${STAGING_INCDIR}/X11/XKBlib.h
-#}
diff --git a/packages/xorg-lib/diet-x11_X11R7.1-1.0.1.bb b/packages/xorg-lib/diet-x11_X11R7.1-1.0.1.bb
deleted file mode 100644
index 52e01dde75..0000000000
--- a/packages/xorg-lib/diet-x11_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SECTION = "x11/base"
-require libx11_${PV}.bb
-
-EXTRA_OECONF += "--disable-udc --enable-xcms --disable-xlocale --disable-xkb"
-CFLAGS += "-D_GNU_SOURCE"
-
-PR = "r4"
-
-SRC_URI += "file://X18NCMSstubs.diff;patch=1 \
- file://fix-disable-xlocale.diff;patch=1 \
- file://fix-utf8-wrong-define.patch;patch=1 \
- file://xim.patch;patch=1 \
- file://xchar2b.patch;patch=1"
diff --git a/packages/xorg-lib/files/ruutf8.patch b/packages/xorg-lib/files/ruutf8.patch
new file mode 100644
index 0000000000..0822b30cb8
--- /dev/null
+++ b/packages/xorg-lib/files/ruutf8.patch
@@ -0,0 +1,12 @@
+diff --git a/nls/locale.alias.pre b/nls/locale.alias.pre
+index a74ca75..ff5bc3f 100644
+--- a/nls/locale.alias.pre
++++ b/nls/locale.alias.pre
+@@ -898,6 +898,7 @@ ru_RU.cp1251: ru_RU.CP1251
+ ru_RU.microsoftcp1251: ru_RU.CP1251
+ ru_RU.microsoft-cp1251: ru_RU.CP1251
+ ru_RU.MICROSOFT-CP1251: ru_RU.CP1251
++ru_RU.utf8: ru_RU.UTF-8
+ #if defined(INCLUDE_ru_SU)
+ XCOMM ru_SU is redundant now
+ ru_SU: ru_RU.KOI8-R
diff --git a/packages/xorg-lib/libapplewm_1.0.0.bb b/packages/xorg-lib/libapplewm_1.0.0.bb
new file mode 100644
index 0000000000..bc502fb505
--- /dev/null
+++ b/packages/xorg-lib/libapplewm_1.0.0.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+
+DEPENDS += "libxext applewmproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libAppleWM"
diff --git a/packages/xorg-lib/libapplewm_X11R7.0-1.0.0.bb b/packages/xorg-lib/libapplewm_X11R7.0-1.0.0.bb
deleted file mode 100644
index 28abffa735..0000000000
--- a/packages/xorg-lib/libapplewm_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto applewmproto"
-
-XORG_PN = "libAppleWM"
-
diff --git a/packages/xorg-lib/libdmx_1.0.2.bb b/packages/xorg-lib/libdmx_1.0.2.bb
new file mode 100644
index 0000000000..9b66101563
--- /dev/null
+++ b/packages/xorg-lib/libdmx_1.0.2.bb
@@ -0,0 +1,6 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Distributed Multihead extension library"
+DEPENDS += "libxext dmxproto"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-lib/libdmx_X11R7.0-1.0.1.bb b/packages/xorg-lib/libdmx_X11R7.0-1.0.1.bb
deleted file mode 100644
index a612982a95..0000000000
--- a/packages/xorg-lib/libdmx_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto dmxproto"
diff --git a/packages/xorg-lib/libdmx_X11R7.1-1.0.2.bb b/packages/xorg-lib/libdmx_X11R7.1-1.0.2.bb
deleted file mode 100644
index a612982a95..0000000000
--- a/packages/xorg-lib/libdmx_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto dmxproto"
diff --git a/packages/xorg-lib/libfontenc-native_1.0.4.bb b/packages/xorg-lib/libfontenc-native_1.0.4.bb
new file mode 100644
index 0000000000..a907e08f12
--- /dev/null
+++ b/packages/xorg-lib/libfontenc-native_1.0.4.bb
@@ -0,0 +1,8 @@
+require libfontenc_${PV}.bb
+
+DEPENDS = "zlib-native xproto-native"
+PE = "1"
+
+XORG_PN = "libfontenc"
+
+inherit native
diff --git a/packages/xorg-lib/libfontenc-native_X11R7.0-1.0.1.bb b/packages/xorg-lib/libfontenc-native_X11R7.0-1.0.1.bb
deleted file mode 100644
index f410b5d94e..0000000000
--- a/packages/xorg-lib/libfontenc-native_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "X fontenc library (used by libxfont)."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "zlib-native xproto-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/libfontenc-${PV}.tar.bz2"
-S = "${WORKDIR}/libfontenc-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libfontenc-native_X11R7.1-1.0.2.bb b/packages/xorg-lib/libfontenc-native_X11R7.1-1.0.2.bb
deleted file mode 100644
index 5a3febbca8..0000000000
--- a/packages/xorg-lib/libfontenc-native_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "X libfontenc library (used by libxfont)."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "zlib-native xproto-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/lib/libfontenc-${PV}.tar.bz2"
-S = "${WORKDIR}/libfontenc-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libfontenc_1.0.4.bb b/packages/xorg-lib/libfontenc_1.0.4.bb
new file mode 100644
index 0000000000..654fc72eca
--- /dev/null
+++ b/packages/xorg-lib/libfontenc_1.0.4.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 font encoding library"
+LICENSE = "BSD-X"
+DEPENDS += "zlib xproto"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-lib/libfontenc_X11R7.0-1.0.1.bb b/packages/xorg-lib/libfontenc_X11R7.0-1.0.1.bb
deleted file mode 100644
index a4badc38ce..0000000000
--- a/packages/xorg-lib/libfontenc_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X fontenc library (used by libxfont)."
-LICENSE = "BSD-X"
-PRIORITY = "optional"
-
-DEPENDS += " zlib xproto"
-
diff --git a/packages/xorg-lib/libfontenc_X11R7.1-1.0.2.bb b/packages/xorg-lib/libfontenc_X11R7.1-1.0.2.bb
deleted file mode 100644
index a4badc38ce..0000000000
--- a/packages/xorg-lib/libfontenc_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X fontenc library (used by libxfont)."
-LICENSE = "BSD-X"
-PRIORITY = "optional"
-
-DEPENDS += " zlib xproto"
-
diff --git a/packages/xorg-lib/libfs_1.0.0.bb b/packages/xorg-lib/libfs_1.0.0.bb
new file mode 100644
index 0000000000..010aa311e0
--- /dev/null
+++ b/packages/xorg-lib/libfs_1.0.0.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Font Services library"
+DEPENDS += "xproto fontsproto xtrans"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libFS"
diff --git a/packages/xorg-lib/libfs_X11R7.0-1.0.0.bb b/packages/xorg-lib/libfs_X11R7.0-1.0.0.bb
deleted file mode 100644
index 5c07ce682c..0000000000
--- a/packages/xorg-lib/libfs_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = " "
-
-DEPENDS += " xproto fontsproto xtrans"
-
-XORG_PN = "libFS"
-
diff --git a/packages/xorg-lib/libice_1.0.3.bb b/packages/xorg-lib/libice_1.0.3.bb
new file mode 100644
index 0000000000..e4a6557397
--- /dev/null
+++ b/packages/xorg-lib/libice_1.0.3.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Inter-Client Exchange library"
+DEPENDS += "xproto xtrans"
+PROVIDES = "ice"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libICE"
diff --git a/packages/xorg-lib/libice_X11R7.0-1.0.0.bb b/packages/xorg-lib/libice_X11R7.0-1.0.0.bb
deleted file mode 100644
index da40983162..0000000000
--- a/packages/xorg-lib/libice_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 ICE library"
-PRIORITY = "optional"
-
-DEPENDS += " xproto xtrans"
-PROVIDES = "ice"
-
-XORG_PN = "libICE"
-
diff --git a/packages/xorg-lib/libice_X11R7.1-1.0.1.bb b/packages/xorg-lib/libice_X11R7.1-1.0.1.bb
deleted file mode 100644
index da40983162..0000000000
--- a/packages/xorg-lib/libice_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 ICE library"
-PRIORITY = "optional"
-
-DEPENDS += " xproto xtrans"
-PROVIDES = "ice"
-
-XORG_PN = "libICE"
-
diff --git a/packages/xorg-lib/liblbxutil_1.0.1.bb b/packages/xorg-lib/liblbxutil_1.0.1.bb
new file mode 100644
index 0000000000..adb7b0513e
--- /dev/null
+++ b/packages/xorg-lib/liblbxutil_1.0.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "XFIXES Extension"
+DEPENDS += " xextproto xproto zlib"
+PROVIDES = "lbxutil"
+PE = "1"
+
+SRC_URI += "file://mkg3states.patch;patch=1"
+
+export CC_FOR_BUILD = "gcc"
diff --git a/packages/xorg-lib/liblbxutil_X11R7.0-1.0.0.bb b/packages/xorg-lib/liblbxutil_X11R7.0-1.0.0.bb
deleted file mode 100644
index 57b2987968..0000000000
--- a/packages/xorg-lib/liblbxutil_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-SRC_URI += "file://mkg3states-1.0.0.patch;patch=0"
-
-DESCRIPTION = "XFIXES Extension"
-
-DEPENDS += " xextproto xproto zlib"
-PROVIDES = "lbxutil"
diff --git a/packages/xorg-lib/liblbxutil_X11R7.1-1.0.1.bb b/packages/xorg-lib/liblbxutil_X11R7.1-1.0.1.bb
deleted file mode 100644
index 1b8660dda6..0000000000
--- a/packages/xorg-lib/liblbxutil_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-export CC_FOR_BUILD = "gcc"
-
-SRC_URI += "file://mkg3states.patch;patch=1"
-
-DESCRIPTION = "XFIXES Extension"
-
-DEPENDS += " xextproto xproto zlib"
-PROVIDES = "lbxutil"
diff --git a/packages/xorg-lib/liboldx_1.0.1.bb b/packages/xorg-lib/liboldx_1.0.1.bb
new file mode 100644
index 0000000000..84470cbc78
--- /dev/null
+++ b/packages/xorg-lib/liboldx_1.0.1.bb
@@ -0,0 +1,6 @@
+require xorg-lib-common.inc
+
+DEPENDS += " virtual/libx11"
+PE = "1"
+
+XORG_PN = "liboldX"
diff --git a/packages/xorg-lib/liboldx_X11R7.0-1.0.1.bb b/packages/xorg-lib/liboldx_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2a380a65f6..0000000000
--- a/packages/xorg-lib/liboldx_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11"
-
-XORG_PN = "liboldX"
-
diff --git a/packages/xorg-lib/libsm_1.0.2.bb b/packages/xorg-lib/libsm_1.0.2.bb
new file mode 100644
index 0000000000..e5113dfc76
--- /dev/null
+++ b/packages/xorg-lib/libsm_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "Session management library"
+PRIORITY = "optional"
+
+DEPENDS += " libice xproto xtrans"
+
+XORG_PN = "libSM"
+
diff --git a/packages/xorg-lib/libsm_1.0.3.bb b/packages/xorg-lib/libsm_1.0.3.bb
new file mode 100644
index 0000000000..edb6ff45ca
--- /dev/null
+++ b/packages/xorg-lib/libsm_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Session management library"
+DEPENDS += "libice xproto xtrans"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libSM"
diff --git a/packages/xorg-lib/libsm_X11R7.0-1.0.0.bb b/packages/xorg-lib/libsm_X11R7.0-1.0.0.bb
deleted file mode 100644
index 383e29e743..0000000000
--- a/packages/xorg-lib/libsm_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Session management library"
-PRIORITY = "optional"
-
-DEPENDS += " libice xproto xtrans"
-
-XORG_PN = "libSM"
-
diff --git a/packages/xorg-lib/libsm_X11R7.1-1.0.1.bb b/packages/xorg-lib/libsm_X11R7.1-1.0.1.bb
deleted file mode 100644
index 383e29e743..0000000000
--- a/packages/xorg-lib/libsm_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Session management library"
-PRIORITY = "optional"
-
-DEPENDS += " libice xproto xtrans"
-
-XORG_PN = "libSM"
-
diff --git a/packages/xorg-lib/libwindowswm_1.0.0.bb b/packages/xorg-lib/libwindowswm_1.0.0.bb
new file mode 100644
index 0000000000..a03d49505b
--- /dev/null
+++ b/packages/xorg-lib/libwindowswm_1.0.0.bb
@@ -0,0 +1,6 @@
+require xorg-lib-common.inc
+
+DEPENDS += "libxext windowswmproto"
+PE = "1"
+
+XORG_PN = "libWindowsWM"
diff --git a/packages/xorg-lib/libwindowswm_X11R7.0-1.0.0.bb b/packages/xorg-lib/libwindowswm_X11R7.0-1.0.0.bb
deleted file mode 100644
index 90b8aeca49..0000000000
--- a/packages/xorg-lib/libwindowswm_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto windowswmproto"
-
-XORG_PN = "libWindowsWM"
-
diff --git a/packages/xorg-lib/libx11-native_1.0.1.bb b/packages/xorg-lib/libx11-native_1.0.1.bb
new file mode 100644
index 0000000000..7bc5fd3524
--- /dev/null
+++ b/packages/xorg-lib/libx11-native_1.0.1.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Base X libs."
+SECTION = "x11/libs"
+PRIORITY = "optional"
+LICENSE = "XFree86"
+PE = "1"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11"
+
+DEPENDS = "xproto-native xextproto-native libxau-native xtrans-native libxdmcp-native xcmiscproto-native xf86bigfontproto-native kbproto-native inputproto-native bigreqsproto-native util-macros-native"
+PROVIDES = "x11-native"
+
+XORG_PN = "libX11"
+
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-1.1.1.tar.bz2"
+S = "${WORKDIR}/libX11-${PV}"
+
+inherit native autotools pkgconfig
+
+EXTRA_OECONF="--enable-malloc0returnsnull"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C src/util 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makekeys
+ )
+ rm -f ${STAGING_INCDIR}/X11/Xlib.h
+ oe_runmake
+}
diff --git a/packages/xorg-lib/libx11-native_X11R7.0-1.0.0.bb b/packages/xorg-lib/libx11-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index 2023b5741d..0000000000
--- a/packages/xorg-lib/libx11-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Base X libs."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "XFree86"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11"
-
-DEPENDS = "xproto-native xextproto-native libxau-native xtrans-native libxdmcp-native xcmiscproto-native xf86bigfontproto-native kbproto-native inputproto-native bigreqsproto-native util-macros-native"
-PROVIDES = "x11-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/libX11-${PV}.tar.bz2"
-S = "${WORKDIR}/libX11-${PV}"
-
-inherit native autotools pkgconfig
-
-EXTRA_OECONF="--enable-malloc0returnsnull"
-
-do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C src/util 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makekeys
- )
- rm -f ${STAGING_INCDIR}/X11/Xlib.h
- oe_runmake
-}
diff --git a/packages/xorg-lib/libx11-native_X11R7.1-1.0.1.bb b/packages/xorg-lib/libx11-native_X11R7.1-1.0.1.bb
deleted file mode 100644
index 2b84b2c53c..0000000000
--- a/packages/xorg-lib/libx11-native_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "Base X libs."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "XFree86"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/libx11"
-
-DEPENDS = "xproto-native xextproto-native libxau-native xtrans-native libxdmcp-native xcmiscproto-native xf86bigfontproto-native kbproto-native inputproto-native bigreqsproto-native util-macros-native"
-PROVIDES = "x11-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/lib/libX11-${PV}.tar.bz2"
-S = "${WORKDIR}/libX11-${PV}"
-
-inherit native autotools pkgconfig
-
-EXTRA_OECONF="--enable-malloc0returnsnull"
-
-do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C src/util 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makekeys
- )
- rm -f ${STAGING_INCDIR}/X11/Xlib.h
- oe_runmake
-}
diff --git a/packages/xorg-lib/libx11/makekeys.diff b/packages/xorg-lib/libx11/makekeys.diff
new file mode 100644
index 0000000000..cea08725ec
--- /dev/null
+++ b/packages/xorg-lib/libx11/makekeys.diff
@@ -0,0 +1,12 @@
+diff -Nru libX11-X11R7.1-1.0.1.org/src/util/makekeys.c libX11-X11R7.1-1.0.1/src/util/makekeys.c
+--- libX11-X11R7.1-1.0.1.org/src/util/makekeys.c 2007-03-08 14:34:34.000000000 +0100
++++ libX11-X11R7.1-1.0.1/src/util/makekeys.c 2007-03-08 14:34:58.000000000 +0100
+@@ -49,7 +49,7 @@
+ KeySym val;
+ } info[KTNUM];
+
+-#define MIN_REHASH 10
++#define MIN_REHASH 15
+ #define MATCHES 10
+
+ char tab[KTNUM];
diff --git a/packages/xorg-lib/libx11_1.1.1.bb b/packages/xorg-lib/libx11_1.1.1.bb
new file mode 100644
index 0000000000..7ac5b58345
--- /dev/null
+++ b/packages/xorg-lib/libx11_1.1.1.bb
@@ -0,0 +1,29 @@
+require xorg-lib-common.inc
+PE = "1"
+PR = "r4"
+
+DESCRIPTION = "Base X libs."
+
+DEPENDS += " bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
+ libxcb libxdmcp xf86bigfontproto kbproto inputproto"
+PROVIDES = "virtual/libx11"
+
+XORG_PN = "libX11"
+
+PACKAGES =+ "libx11-xcb"
+
+SRC_URI += " file://ruutf8.patch;patch=1"
+
+FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt"
+FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
+FILES_${PN}-xcb = "${libdir}/libX11-xcb.so.*"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
+ cd src/util; touch makekeys-makekeys.o ; ${BUILD_CC} ${BUILD_CFLAGS} makekeys.c -o makekeys
+ cd ../../
+ ) || exit 1
+ oe_runmake
+}
+
diff --git a/packages/xorg-lib/libx11_1.1.2.bb b/packages/xorg-lib/libx11_1.1.2.bb
new file mode 100644
index 0000000000..e6b0ec5d8b
--- /dev/null
+++ b/packages/xorg-lib/libx11_1.1.2.bb
@@ -0,0 +1,24 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "Base X libs."
+DEPENDS += "bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
+ libxdmcp xf86bigfontproto kbproto inputproto"
+PROVIDES = "virtual/libx11"
+PE = "1"
+PR = "r1"
+
+XORG_PN = "libX11"
+
+EXTRA_OECONF += "--without-xcb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
+ cd src/util; touch makekeys-makekeys.o ; ${BUILD_CC} ${BUILD_CFLAGS} makekeys.c -o makekeys
+ cd ../../
+ ) || exit 1
+ oe_runmake
+}
+
+FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt"
+FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
diff --git a/packages/xorg-lib/libx11_X11R7.0-1.0.0.bb b/packages/xorg-lib/libx11_X11R7.0-1.0.0.bb
deleted file mode 100644
index c01fa729fb..0000000000
--- a/packages/xorg-lib/libx11_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Base X libs."
-
-DEPENDS += " bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
- libxdmcp xf86bigfontproto kbproto inputproto"
-PROVIDES = "virtual/libx11"
-RPROVIDES = "virtual/libx11"
-
-XORG_PN = "libX11"
-
-FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt"
-FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
-
-do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C src/util 'X11_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makekeys
- ) || exit 1
- rm -f ${STAGING_INCDIR}/X11/Xlib.h
- oe_runmake
-}
diff --git a/packages/xorg-lib/libx11_X11R7.1-1.0.1.bb b/packages/xorg-lib/libx11_X11R7.1-1.0.1.bb
deleted file mode 100644
index 64f4585e0f..0000000000
--- a/packages/xorg-lib/libx11_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-require xorg-lib-common.inc
-
-PR = "r4"
-
-DESCRIPTION = "Base X libs."
-
-DEPENDS += " bigreqsproto xproto xextproto xtrans libxau xcmiscproto \
- libxdmcp xf86bigfontproto kbproto inputproto"
-PROVIDES = "virtual/libx11"
-RPROVIDES = "virtual/libx11"
-
-XORG_PN = "libX11"
-
-FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB ${libdir}/X11/Xcms.txt"
-FILES_${PN}-locale += "${datadir}/X11/locale ${libdir}/X11/locale"
-
-do_compile() {
- (
- unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
- cd src/util; touch makekeys-makekeys.o ; ${BUILD_CC} ${BUILD_CFLAGS} makekeys.c -o makekeys
- ) || exit 1
- rm -f ${STAGING_INCDIR}/X11/Xlib.h
- oe_runmake
-}
diff --git a/packages/xorg-lib/libx11_git.bb b/packages/xorg-lib/libx11_git.bb
index 3f7fd5853e..422afc92e0 100644
--- a/packages/xorg-lib/libx11_git.bb
+++ b/packages/xorg-lib/libx11_git.bb
@@ -2,12 +2,10 @@ DEFAULT_PREFERENCE = "-1"
DESCRIPTION = "Xlib/XCB: Xlib with XCB transport"
SECTION = "x11/libs"
-PRIORITY = "optional"
LICENSE = "XFree86"
-
DEPENDS = "libxcb xproto xextproto libxau xtrans libxdmcp xcmiscproto xf86bigfontproto kbproto inputproto bigreqsproto util-macros"
PROVIDES = "virtual/libx11"
-RPROVIDES = "virtual/libx11"
+PR = "r3"
FILES_${PN} += "${datadir}/X11/XKeysymDB ${datadir}/X11/XErrorDB"
FILES_${PN}-locale += "${datadir}/X11/locale"
@@ -19,15 +17,17 @@ inherit autotools pkgconfig
EXTRA_OECONF="--enable-malloc0returnsnull"
+
do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C src/util 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makekeys
- )
- rm -f ${STAGING_INCDIR}/X11/Xlib.h
- oe_runmake
+ (
+ unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
+ cd src/util; touch makekeys-makekeys.o ; ${BUILD_CC} ${BUILD_CFLAGS} makekeys.c -o makekeys
+ cd ../../
+ ) || exit 1
+ oe_runmake
}
+
do_stage() {
autotools_stage_all
}
diff --git a/packages/xorg-lib/libxau-native_1.0.3.bb b/packages/xorg-lib/libxau-native_1.0.3.bb
new file mode 100644
index 0000000000..953a93adf1
--- /dev/null
+++ b/packages/xorg-lib/libxau-native_1.0.3.bb
@@ -0,0 +1,8 @@
+require libxau_${PV}.bb
+
+DEPENDS = "xproto-native util-macros-native"
+PR = "r1"
+
+XORG_PN = "libXau"
+
+inherit native
diff --git a/packages/xorg-lib/libxau-native_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxau-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index 0e28057d82..0000000000
--- a/packages/xorg-lib/libxau-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/libXau-${PV}.tar.bz2"
-S = "${WORKDIR}/libXau-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libxau-native_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxau-native_X11R7.1-1.0.1.bb
deleted file mode 100644
index 617ee7e6b3..0000000000
--- a/packages/xorg-lib/libxau-native_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/lib/libXau-${PV}.tar.bz2"
-S = "${WORKDIR}/libXau-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libxau_1.0.3.bb b/packages/xorg-lib/libxau_1.0.3.bb
new file mode 100644
index 0000000000..3a77534cff
--- /dev/null
+++ b/packages/xorg-lib/libxau_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "A Sample Authorization Protocol for X"
+DEPENDS += " xproto"
+PROVIDES = "xau"
+PE = "1"
+
+XORG_PN = "libXau"
diff --git a/packages/xorg-lib/libxau_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxau_X11R7.0-1.0.0.bb
deleted file mode 100644
index 5ad793c9b8..0000000000
--- a/packages/xorg-lib/libxau_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "A Sample Authorization Protocol for X"
-PRIORITY = "optional"
-
-DEPENDS += " xproto"
-PROVIDES = "xau"
-
-XORG_PN = "libXau"
-
diff --git a/packages/xorg-lib/libxau_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxau_X11R7.1-1.0.1.bb
deleted file mode 100644
index 5ad793c9b8..0000000000
--- a/packages/xorg-lib/libxau_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "A Sample Authorization Protocol for X"
-PRIORITY = "optional"
-
-DEPENDS += " xproto"
-PROVIDES = "xau"
-
-XORG_PN = "libXau"
-
diff --git a/packages/xorg-lib/libxaw_1.0.3.bb b/packages/xorg-lib/libxaw_1.0.3.bb
new file mode 100644
index 0000000000..f45431e79e
--- /dev/null
+++ b/packages/xorg-lib/libxaw_1.0.3.bb
@@ -0,0 +1,21 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Athena Widget Set"
+DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
+PROVIDES = "xaw"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXaw"
+
+do_stage_append () {
+ ln -sf libXaw6.so.6 ${STAGING_LIBDIR}/libXaw.so.6
+ ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so.7
+ ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so
+}
+
+PACKAGES =+ "libxaw6 libxaw7 libxaw8"
+
+FILES_libxaw6 = "${libdir}/libXaw6.so.6*"
+FILES_libxaw7 = "${libdir}/libXaw7.so.7*"
+FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
diff --git a/packages/xorg-lib/libxaw_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxaw_X11R7.0-1.0.1.bb
deleted file mode 100644
index 3961042a2d..0000000000
--- a/packages/xorg-lib/libxaw_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xaw is the X Athena Widget Set."
-
-DEPENDS += " xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
-PROVIDES = "xaw"
-
-XORG_PN = "libXaw"
-
-do_stage () {
- autotools_stage_all
- ln -sf libXaw6.so.6 ${STAGING_LIBDIR}/libXaw.so.6
- ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so.7
- ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so
-}
diff --git a/packages/xorg-lib/libxaw_X11R7.1-1.0.2.bb b/packages/xorg-lib/libxaw_X11R7.1-1.0.2.bb
deleted file mode 100644
index 3961042a2d..0000000000
--- a/packages/xorg-lib/libxaw_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xaw is the X Athena Widget Set."
-
-DEPENDS += " xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
-PROVIDES = "xaw"
-
-XORG_PN = "libXaw"
-
-do_stage () {
- autotools_stage_all
- ln -sf libXaw6.so.6 ${STAGING_LIBDIR}/libXaw.so.6
- ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so.7
- ln -sf libXaw7.so.7 ${STAGING_LIBDIR}/libXaw.so
-}
diff --git a/packages/xorg-lib/libxcalibrate/.mtn2git_empty b/packages/xorg-lib/libxcalibrate/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-lib/libxcalibrate/.mtn2git_empty
diff --git a/packages/xorg-lib/libxcalibrate/coords.patch b/packages/xorg-lib/libxcalibrate/coords.patch
new file mode 100644
index 0000000000..19cf1639f6
--- /dev/null
+++ b/packages/xorg-lib/libxcalibrate/coords.patch
@@ -0,0 +1,50 @@
+---
+ xcalibrate.c | 26 ++++++++++++++++++++++++++
+ xcalibrate.h | 2 ++
+ 2 files changed, 28 insertions(+)
+
+Index: XCalibrate/xcalibrate.c
+===================================================================
+--- XCalibrate.orig/xcalibrate.c 2007-06-30 14:12:22.000000000 +0100
++++ XCalibrate/xcalibrate.c 2007-06-30 14:18:10.000000000 +0100
+@@ -227,3 +227,29 @@ XCalibrateSetRawMode (Display *dpy, Bool
+ SyncHandle ();
+ return 0;
+ }
++
++Status
++XCalibrateScreenToCoord (Display *dpy, int *x, int *y)
++{
++ XExtDisplayInfo *info = XCalibrateFindDisplay (dpy);
++ xXCalibrateScreenToCoordReq *req;
++ xXCalibrateScreenToCoordReply rep;
++ LockDisplay (dpy);
++ GetReq (XCalibrateScreenToCoord, req);
++ req->reqType = info->codes->major_opcode;
++ req->xCalibrateReqType = X_XCalibrateScreenToCoord;
++ req->x = *x;
++ req->y = *y;
++ if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
++ {
++ UnlockDisplay (dpy);
++ SyncHandle ();
++ return 1;
++ }
++ *x = rep.x;
++ *y = rep.y;
++ UnlockDisplay (dpy);
++ SyncHandle ();
++ return 0;
++}
++
+Index: XCalibrate/xcalibrate.h
+===================================================================
+--- XCalibrate.orig/xcalibrate.h 2007-06-30 14:16:16.000000000 +0100
++++ XCalibrate/xcalibrate.h 2007-06-30 14:16:38.000000000 +0100
+@@ -43,4 +43,6 @@ Status XCalibrateQueryVersion (Display *
+
+ Status XCalibrateSetRawMode (Display *dpy, Bool enable);
+
++Status XCalibrateScreenToCoord (Display *dpy, int *x, int *y);
++
+ #endif
diff --git a/packages/xorg-lib/libxcalibrate_git.bb b/packages/xorg-lib/libxcalibrate_git.bb
index 94b5265103..99f11e40fd 100644
--- a/packages/xorg-lib/libxcalibrate_git.bb
+++ b/packages/xorg-lib/libxcalibrate_git.bb
@@ -1,19 +1,14 @@
+require xorg-lib-common.inc
+
DESCRIPTION = " Touchscreen calibration client library"
-SECTION = "x11/libs"
-PRIORITY = "optional"
LICENSE = "BSD-X"
-
-PV = "0.0+git${SRCDATE}"
-
DEPENDS = "virtual/libx11 calibrateproto libxext"
+PV = "0.0+git${SRCDATE}"
+PR = "r2"
-FILES_${PN}-locale += "${datadir}/X11/locale"
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libXCalibrate;protocol=git;tag=4be232e30cd33a44a1ce6d3ec429ee6101540c62 \
+ file://coords.patch;patch=1"
-SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libXCalibrate;protocol=git"
S = "${WORKDIR}/git"
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
+FILES_${PN}-locale += "${datadir}/X11/locale"
diff --git a/packages/xorg-lib/libxcomposite_0.3.1.bb b/packages/xorg-lib/libxcomposite_0.3.1.bb
new file mode 100644
index 0000000000..71842d4a4d
--- /dev/null
+++ b/packages/xorg-lib/libxcomposite_0.3.1.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Composite extension library."
+LICENSE= "BSD-X"
+
+DEPENDS += " compositeproto virtual/libx11 libxfixes"
+PROVIDES = "xcomposite"
+
+XORG_PN = "libXcomposite"
+
+SRC_URI += " file://change-include-order.patch;patch=1"
diff --git a/packages/xorg-lib/libxcomposite_0.4.0.bb b/packages/xorg-lib/libxcomposite_0.4.0.bb
new file mode 100644
index 0000000000..8921b927bf
--- /dev/null
+++ b/packages/xorg-lib/libxcomposite_0.4.0.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Composite extension library."
+LICENSE= "BSD-X"
+DEPENDS += " compositeproto virtual/libx11 libxfixes"
+PROVIDES = "xcomposite"
+PE = "1"
+
+XORG_PN = "libXcomposite"
+
+SRC_URI += " file://change-include-order.patch;patch=1"
diff --git a/packages/xorg-lib/libxcomposite_X11R7.0-0.2.2.2.bb b/packages/xorg-lib/libxcomposite_X11R7.0-0.2.2.2.bb
deleted file mode 100644
index 4cab60a531..0000000000
--- a/packages/xorg-lib/libxcomposite_X11R7.0-0.2.2.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Composite extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " compositeproto virtual/libx11 libxfixes"
-PROVIDES = "xcomposite"
-
-XORG_PN = "libXcomposite"
-
-SRC_URI += " file://change-include-order.patch;patch=1"
diff --git a/packages/xorg-lib/libxcomposite_X11R7.1-0.3.bb b/packages/xorg-lib/libxcomposite_X11R7.1-0.3.bb
deleted file mode 100644
index 4cab60a531..0000000000
--- a/packages/xorg-lib/libxcomposite_X11R7.1-0.3.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Composite extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " compositeproto virtual/libx11 libxfixes"
-PROVIDES = "xcomposite"
-
-XORG_PN = "libXcomposite"
-
-SRC_URI += " file://change-include-order.patch;patch=1"
diff --git a/packages/xorg-lib/libxcursor_1.1.8.bb b/packages/xorg-lib/libxcursor_1.1.8.bb
new file mode 100644
index 0000000000..4713eccc48
--- /dev/null
+++ b/packages/xorg-lib/libxcursor_1.1.8.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X cursor management library"
+LICENSE= "BSD-X"
+DEPENDS += "libxrender libxfixes"
+PR = "r2"
+PE = "1"
+
+XORG_PN = "libXcursor"
diff --git a/packages/xorg-lib/libxcursor_X11R7.0-1.1.5.2.bb b/packages/xorg-lib/libxcursor_X11R7.0-1.1.5.2.bb
deleted file mode 100644
index 2b13c4213c..0000000000
--- a/packages/xorg-lib/libxcursor_X11R7.0-1.1.5.2.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Cursor library"
-LICENSE= "BSD-X"
-
-DEPENDS += " libxrender libxfixes virtual/libx11 fixesproto"
-
-XORG_PN = "libXcursor"
-
-FILES_${PN} += "${libdir}/libXcursor.so"
diff --git a/packages/xorg-lib/libxcursor_X11R7.1-1.1.6.bb b/packages/xorg-lib/libxcursor_X11R7.1-1.1.6.bb
deleted file mode 100644
index 2b13c4213c..0000000000
--- a/packages/xorg-lib/libxcursor_X11R7.1-1.1.6.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Cursor library"
-LICENSE= "BSD-X"
-
-DEPENDS += " libxrender libxfixes virtual/libx11 fixesproto"
-
-XORG_PN = "libXcursor"
-
-FILES_${PN} += "${libdir}/libXcursor.so"
diff --git a/packages/xorg-lib/libxdamage_1.0.4.bb b/packages/xorg-lib/libxdamage_1.0.4.bb
new file mode 100644
index 0000000000..dd6fc42df6
--- /dev/null
+++ b/packages/xorg-lib/libxdamage_1.0.4.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Damage extension library."
+LICENSE= "BSD-X"
+
+DEPENDS += " virtual/libx11 damageproto libxfixes fixesproto xextproto"
+PROVIDES = "xdamage"
+
+XORG_PN = "libXdamage"
+
diff --git a/packages/xorg-lib/libxdamage_1.1.1.bb b/packages/xorg-lib/libxdamage_1.1.1.bb
new file mode 100644
index 0000000000..e56d1d0954
--- /dev/null
+++ b/packages/xorg-lib/libxdamage_1.1.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 damaged region extension library"
+LICENSE= "BSD-X"
+DEPENDS += "damageproto libxfixes"
+PROVIDES = "xdamage"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXdamage"
diff --git a/packages/xorg-lib/libxdamage_X11R7.0-1.0.2.2.bb b/packages/xorg-lib/libxdamage_X11R7.0-1.0.2.2.bb
deleted file mode 100644
index 6bb9c39f60..0000000000
--- a/packages/xorg-lib/libxdamage_X11R7.0-1.0.2.2.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Damage extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " virtual/libx11 damageproto libxfixes fixesproto xextproto"
-PROVIDES = "xdamage"
-
-XORG_PN = "libXdamage"
-
diff --git a/packages/xorg-lib/libxdamage_X11R7.1-1.0.3.bb b/packages/xorg-lib/libxdamage_X11R7.1-1.0.3.bb
deleted file mode 100644
index 6bb9c39f60..0000000000
--- a/packages/xorg-lib/libxdamage_X11R7.1-1.0.3.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Damage extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " virtual/libx11 damageproto libxfixes fixesproto xextproto"
-PROVIDES = "xdamage"
-
-XORG_PN = "libXdamage"
-
diff --git a/packages/xorg-lib/libxdmcp-native_1.0.2.bb b/packages/xorg-lib/libxdmcp-native_1.0.2.bb
new file mode 100644
index 0000000000..d57f8ac48e
--- /dev/null
+++ b/packages/xorg-lib/libxdmcp-native_1.0.2.bb
@@ -0,0 +1,9 @@
+require libxdmcp_${PV}.bb
+
+DEPENDS = "xproto-native util-macros-native"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXdmcp"
+
+inherit native
diff --git a/packages/xorg-lib/libxdmcp-native_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxdmcp-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index d34088a255..0000000000
--- a/packages/xorg-lib/libxdmcp-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/libXdmcp-${PV}.tar.bz2"
-S = "${WORKDIR}/libXdmcp-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libxdmcp-native_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxdmcp-native_X11R7.1-1.0.1.bb
deleted file mode 100644
index 12b5bbe905..0000000000
--- a/packages/xorg-lib/libxdmcp-native_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/lib/libXdmcp-${PV}.tar.bz2"
-S = "${WORKDIR}/libXdmcp-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/libxdmcp_1.0.2.bb b/packages/xorg-lib/libxdmcp_1.0.2.bb
new file mode 100644
index 0000000000..0aa95b4677
--- /dev/null
+++ b/packages/xorg-lib/libxdmcp_1.0.2.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Display Manager Control Protocol library"
+DEPENDS += "xproto"
+PROVIDES = "xdmcp"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXdmcp"
diff --git a/packages/xorg-lib/libxdmcp_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxdmcp_X11R7.0-1.0.0.bb
deleted file mode 100644
index c0139498c5..0000000000
--- a/packages/xorg-lib/libxdmcp_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Display Manager Control Protocol library."
-PRIORITY = "optional"
-
-DEPENDS += " xproto"
-PROVIDES = "xdmcp"
-
-XORG_PN = "libXdmcp"
-
diff --git a/packages/xorg-lib/libxdmcp_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxdmcp_X11R7.1-1.0.1.bb
deleted file mode 100644
index c0139498c5..0000000000
--- a/packages/xorg-lib/libxdmcp_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Display Manager Control Protocol library."
-PRIORITY = "optional"
-
-DEPENDS += " xproto"
-PROVIDES = "xdmcp"
-
-XORG_PN = "libXdmcp"
-
diff --git a/packages/xorg-lib/libxevie_1.0.2.bb b/packages/xorg-lib/libxevie_1.0.2.bb
new file mode 100644
index 0000000000..6c6b4595aa
--- /dev/null
+++ b/packages/xorg-lib/libxevie_1.0.2.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 EvIE extension library"
+DEPENDS += "libxext evieext"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXevie"
diff --git a/packages/xorg-lib/libxevie_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxevie_X11R7.0-1.0.0.bb
deleted file mode 100644
index 4c3a134633..0000000000
--- a/packages/xorg-lib/libxevie_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext evieext"
-
-XORG_PN = "libXevie"
-
diff --git a/packages/xorg-lib/libxevie_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxevie_X11R7.1-1.0.1.bb
deleted file mode 100644
index 4c3a134633..0000000000
--- a/packages/xorg-lib/libxevie_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext evieext"
-
-XORG_PN = "libXevie"
-
diff --git a/packages/xorg-lib/libxext_1.0.2.bb b/packages/xorg-lib/libxext_1.0.2.bb
new file mode 100644
index 0000000000..a64067e2ad
--- /dev/null
+++ b/packages/xorg-lib/libxext_1.0.2.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Server Extension library"
+PRIORITY = "optional"
+
+DEPENDS += " xproto virtual/libx11 xextproto libxau"
+PROVIDES = "xext"
+
+XORG_PN = "libXext"
+
diff --git a/packages/xorg-lib/libxext_1.0.3.bb b/packages/xorg-lib/libxext_1.0.3.bb
new file mode 100644
index 0000000000..81231a866c
--- /dev/null
+++ b/packages/xorg-lib/libxext_1.0.3.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 miscellaneous extension library"
+DEPENDS += "xproto virtual/libx11 xextproto libxau"
+PROVIDES = "xext"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXext"
diff --git a/packages/xorg-lib/libxext_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxext_X11R7.0-1.0.0.bb
deleted file mode 100644
index fc2061514a..0000000000
--- a/packages/xorg-lib/libxext_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Server Extension library"
-PRIORITY = "optional"
-
-DEPENDS += " xproto virtual/libx11 xextproto libxau"
-PROVIDES = "xext"
-
-XORG_PN = "libXext"
-
diff --git a/packages/xorg-lib/libxext_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxext_X11R7.1-1.0.1.bb
deleted file mode 100644
index fc2061514a..0000000000
--- a/packages/xorg-lib/libxext_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Server Extension library"
-PRIORITY = "optional"
-
-DEPENDS += " xproto virtual/libx11 xextproto libxau"
-PROVIDES = "xext"
-
-XORG_PN = "libXext"
-
diff --git a/packages/xorg-lib/libxfixes_4.0.3.bb b/packages/xorg-lib/libxfixes_4.0.3.bb
new file mode 100644
index 0000000000..5b2100a815
--- /dev/null
+++ b/packages/xorg-lib/libxfixes_4.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Fixes extension library."
+LICENSE= "BSD-X"
+DEPENDS += "virtual/libx11 xproto fixesproto xextproto"
+PE = "1"
+
+XORG_PN = "libXfixes"
diff --git a/packages/xorg-lib/libxfixes_X11R7.0-3.0.1.2.bb b/packages/xorg-lib/libxfixes_X11R7.0-3.0.1.2.bb
deleted file mode 100644
index b63633dea2..0000000000
--- a/packages/xorg-lib/libxfixes_X11R7.0-3.0.1.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Fixes extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " virtual/libx11 xproto fixesproto xextproto"
-
-XORG_PN = "libXfixes"
-
diff --git a/packages/xorg-lib/libxfixes_X11R7.1-4.0.1.bb b/packages/xorg-lib/libxfixes_X11R7.1-4.0.1.bb
deleted file mode 100644
index b63633dea2..0000000000
--- a/packages/xorg-lib/libxfixes_X11R7.1-4.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Fixes extension library."
-LICENSE= "BSD-X"
-
-DEPENDS += " virtual/libx11 xproto fixesproto xextproto"
-
-XORG_PN = "libXfixes"
-
diff --git a/packages/xorg-lib/libxfont-native_1.3.0.bb b/packages/xorg-lib/libxfont-native_1.3.0.bb
new file mode 100644
index 0000000000..efd1e07d6a
--- /dev/null
+++ b/packages/xorg-lib/libxfont-native_1.3.0.bb
@@ -0,0 +1,10 @@
+require libxfont_${PV}.bb
+
+DEPENDS = "xproto-native zlib-native fontcacheproto-native fontsproto-native \
+ libfontenc-native xtrans-native freetype-native util-macros-native"
+PE = "1"
+
+# no need for patch used in libxfont
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+
+inherit native
diff --git a/packages/xorg-lib/libxfont-native_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxfont-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index f49c207637..0000000000
--- a/packages/xorg-lib/libxfont-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "X font library (used by the X server)."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native zlib-native fontcacheproto-native fontsproto-native libfontenc-native xtrans-native freetype-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/libXfont-${PV}.tar.bz2"
-S = "${WORKDIR}/libXfont-${PV}"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-lib/libxfont-native_X11R7.1-1.1.0.bb b/packages/xorg-lib/libxfont-native_X11R7.1-1.1.0.bb
deleted file mode 100644
index e4d721dfe4..0000000000
--- a/packages/xorg-lib/libxfont-native_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "X font library (used by the X server)."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native zlib-native fontcacheproto-native fontsproto-native libfontenc-native xtrans-native freetype-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/lib/libXfont-${PV}.tar.bz2"
-S = "${WORKDIR}/libXfont-${PV}"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-lib/libxfont-native_X11R7.1-1.2.0.bb b/packages/xorg-lib/libxfont-native_X11R7.1-1.2.0.bb
deleted file mode 100644
index 073b54f7cf..0000000000
--- a/packages/xorg-lib/libxfont-native_X11R7.1-1.2.0.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-DESCRIPTION = "X font library (used by the X server)."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "xproto-native zlib-native fontcacheproto-native fontsproto-native libfontenc-native xtrans-native freetype-native util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/individual/lib/libXfont-1.2.0.tar.bz2"
-S = "${WORKDIR}/libXfont-1.2.0"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch b/packages/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch
new file mode 100644
index 0000000000..dd307434b9
--- /dev/null
+++ b/packages/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch
@@ -0,0 +1,188 @@
+commit 7670d4a2720c61fbc7b989fed14c676f04ac3ad1
+Author: Dodji Seketeli <dodji@openedhand.com>
+Date: Mon Jul 16 12:24:34 2007 +0200
+
+ Remove side effects from BuiltinReadDirectory()
+
+ The first time BuiltinReadDirectory() is called,
+ save the content of builtin_dir and builtin_alias,
+ before calling FontFileAddFontFile(), because that fonction
+ will modify those.
+
+ Then, in subsequent calls to BuiltinReadDirectory(), restore
+ builtin_dir and builtin_alias so that the side effect incurred
+ by the first call disappears.
+
+diff --git a/src/builtins/dir.c b/src/builtins/dir.c
+index c272449..97f1e1e 100644
+--- a/src/builtins/dir.c
++++ b/src/builtins/dir.c
+@@ -29,6 +29,133 @@
+ #endif
+ #include "builtin.h"
+
++BuiltinDirPtr
++BuiltinDirsDup (const BuiltinDirPtr a_dirs,
++ int a_dirs_len)
++{
++ BuiltinDirPtr dirs=NULL ;
++ int i=0 ;
++
++ if (!a_dirs)
++ return NULL ;
++
++ dirs = xcalloc (a_dirs_len, sizeof (BuiltinDirRec)) ;
++ if (!dirs)
++ return NULL ;
++
++ for (i=0; i < a_dirs_len; i++) {
++ int len = strlen (a_dirs[i].file_name) ;
++ dirs[i].file_name = xcalloc (1, len) ;
++ memmove (dirs[i].file_name, a_dirs[i].file_name, len);
++ len = strlen (a_dirs[i].font_name) ;
++ dirs[i].font_name = xcalloc (1, len) ;
++ memmove (dirs[i].font_name, a_dirs[i].font_name, len);
++ }
++ return dirs ;
++}
++
++/**
++ * Copy a_save back into a_cur
++ * @param a_cur the instance of BuiltinDir to restore
++ * @param a_saved the saved instance of BuiltinDir to copy into a_cur
++ * @return 0 if went okay, 1 otherwise.
++ */
++int
++BuiltinDirRestore (BuiltinDirPtr a_cur,
++ const BuiltinDirPtr a_saved)
++{
++ if (!a_cur)
++ return 1 ;
++ if (!a_saved)
++ return 0 ;
++
++ if (a_saved->font_name)
++ memmove (a_cur->font_name, a_saved->font_name, strlen (a_saved->font_name)) ;
++ return 0 ;
++}
++
++
++int
++BuiltinDirsRestore (BuiltinDirPtr a_cur_tab,
++ const BuiltinDirPtr a_saved_tab,
++ int a_tab_len)
++{
++ int i=0 ;
++
++ if (!a_cur_tab)
++ return 1 ;
++ if (!a_saved_tab)
++ return 0 ;
++
++ for (i=0 ; i < a_tab_len; i++) {
++ if (BuiltinDirRestore (&a_cur_tab[i], &a_saved_tab[i]))
++ return 1 ;
++ }
++ return 0 ;
++}
++
++BuiltinAliasPtr
++BuiltinAliasesDup (const BuiltinAliasPtr a_aliases,
++ int a_aliases_len)
++{
++ BuiltinAliasPtr aliases=NULL ;
++ int i=0 ;
++
++ if (!a_aliases)
++ return NULL ;
++
++ aliases = xcalloc (a_aliases_len, sizeof (BuiltinAliasRec)) ;
++ if (!aliases)
++ return NULL ;
++
++ for (i=0; i < a_aliases_len; i++) {
++ int len = strlen (a_aliases[i].font_name) ;
++ aliases[i].font_name = xcalloc (1, len) ;
++ memmove (aliases[i].font_name, a_aliases[i].font_name, len);
++ }
++ return aliases ;
++}
++
++/**
++ * Copy a_save back into a_cur
++ * @param a_cur the instance of BuiltinAlias to restore
++ * @param a_saved the saved instance of BuiltinAlias to copy into a_cur
++ * @return 0 if went okay, 1 otherwise.
++ */
++int
++BuiltinAliasRestore (BuiltinAliasPtr a_cur,
++ const BuiltinAliasPtr a_save)
++{
++ if (!a_cur)
++ return 1 ;
++ if (!a_save)
++ return 0 ;
++ if (a_save->alias_name)
++ memmove (a_cur->alias_name, a_save->alias_name, strlen (a_save->alias_name)) ;
++ if (a_save->font_name)
++ memmove (a_cur->font_name, a_save->font_name, strlen (a_save->font_name)) ;
++ return 0 ;
++}
++
++int
++BuiltinAliasesRestore (BuiltinAliasPtr a_cur_tab,
++ const BuiltinAliasPtr a_saved_tab,
++ int a_tab_len)
++{
++ int i=0 ;
++
++ if (!a_cur_tab)
++ return 1 ;
++ if (!a_saved_tab)
++ return 0 ;
++
++ for (i=0 ; i < a_tab_len; i++) {
++ if (BuiltinAliasRestore (&a_cur_tab[i], &a_saved_tab[i]))
++ return 1 ;
++ }
++ return 0 ;
++}
++
+ int
+ BuiltinReadDirectory (char *directory, FontDirectoryPtr *pdir)
+ {
+@@ -36,6 +163,34 @@ BuiltinReadDirectory (char *directory, FontDirectoryPtr *pdir)
+ int i;
+
+ dir = FontFileMakeDir ("", builtin_dir_count);
++ static BuiltinDirPtr saved_builtin_dir ;
++ static BuiltinAliasPtr saved_builtin_alias ;
++
++
++ if (saved_builtin_dir)
++ {
++ BuiltinDirsRestore ((BuiltinDirPtr) builtin_dir,
++ saved_builtin_dir,
++ builtin_dir_count) ;
++ }
++ else
++ {
++ saved_builtin_dir = BuiltinDirsDup ((const BuiltinDirPtr) builtin_dir,
++ builtin_dir_count) ;
++ }
++
++ if (saved_builtin_alias)
++ {
++ BuiltinAliasesRestore ((BuiltinAliasPtr) builtin_alias,
++ saved_builtin_alias,
++ builtin_alias_count) ;
++ }
++ else
++ {
++ saved_builtin_alias = BuiltinAliasesDup ((const BuiltinAliasPtr) builtin_alias,
++ builtin_alias_count) ;
++ }
++
+ for (i = 0; i < builtin_dir_count; i++)
+ {
+ if (!FontFileAddFontFile (dir,
diff --git a/packages/xorg-lib/libxfont_1.2.7.bb b/packages/xorg-lib/libxfont_1.2.7.bb
new file mode 100644
index 0000000000..cc855c0106
--- /dev/null
+++ b/packages/xorg-lib/libxfont_1.2.7.bb
@@ -0,0 +1,14 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X font library (used by the X server)."
+LICENSE= "BSD-X"
+PRIORITY = "optional"
+
+SRC_URI += "file://no-scalable-crash.patch;patch=1"
+
+DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
+PROVIDES = "xfont"
+
+XORG_PN = "libXfont"
+
diff --git a/packages/xorg-lib/libxfont_1.2.8.bb b/packages/xorg-lib/libxfont_1.2.8.bb
new file mode 100644
index 0000000000..cc855c0106
--- /dev/null
+++ b/packages/xorg-lib/libxfont_1.2.8.bb
@@ -0,0 +1,14 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X font library (used by the X server)."
+LICENSE= "BSD-X"
+PRIORITY = "optional"
+
+SRC_URI += "file://no-scalable-crash.patch;patch=1"
+
+DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
+PROVIDES = "xfont"
+
+XORG_PN = "libXfont"
+
diff --git a/packages/xorg-lib/libxfont_1.3.0.bb b/packages/xorg-lib/libxfont_1.3.0.bb
new file mode 100644
index 0000000000..d452d9796d
--- /dev/null
+++ b/packages/xorg-lib/libxfont_1.3.0.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 font rasterisation library"
+LICENSE= "BSD-X"
+DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc"
+PROVIDES = "xfont"
+PR = "r2"
+PE = "1"
+
+SRC_URI += "file://no-scalable-crash.patch;patch=1 \
+ file://builtinreaddirectory-no-side-effect.patch;patch=1"
+
+XORG_PN = "libXfont"
diff --git a/packages/xorg-lib/libxfont_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxfont_X11R7.0-1.0.0.bb
deleted file mode 100644
index a3a28d6578..0000000000
--- a/packages/xorg-lib/libxfont_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require xorg-lib-common.inc
-
-PR = "r1"
-SRC_URI += "file://no-scalable-crash.patch;patch=1"
-
-
-DESCRIPTION = "X font library (used by the X server)."
-LICENSE= "BSD-X"
-PRIORITY = "optional"
-
-DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
-PROVIDES = "xfont"
-
-XORG_PN = "libXfont"
-
diff --git a/packages/xorg-lib/libxfont_X11R7.1-1.1.0.bb b/packages/xorg-lib/libxfont_X11R7.1-1.1.0.bb
deleted file mode 100644
index 748a71f1ae..0000000000
--- a/packages/xorg-lib/libxfont_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X font library (used by the X server)."
-LICENSE= "BSD-X"
-PRIORITY = "optional"
-
-DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
-PROVIDES = "xfont"
-
-XORG_PN = "libXfont"
-
diff --git a/packages/xorg-lib/libxfont_X11R7.1-1.2.0.bb b/packages/xorg-lib/libxfont_X11R7.1-1.2.0.bb
deleted file mode 100644
index 8739822a07..0000000000
--- a/packages/xorg-lib/libxfont_X11R7.1-1.2.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require xorg-lib-common.inc
-
-PR = "r1"
-
-DESCRIPTION = "X font library (used by the X server)."
-LICENSE= "BSD-X"
-PRIORITY = "optional"
-
-SRC_URI = "${XORG_MIRROR}/individual/lib/libXfont-1.2.0.tar.bz2"
-SRC_URI += "file://no-scalable-crash.patch;patch=1"
-
-DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
-PROVIDES = "xfont"
-
-XORG_PN = "libXfont"
-
-S = "${WORKDIR}/libXfont-1.2.0"
diff --git a/packages/xorg-lib/libxfontcache_1.0.4.bb b/packages/xorg-lib/libxfontcache_1.0.4.bb
new file mode 100644
index 0000000000..ee999de4f5
--- /dev/null
+++ b/packages/xorg-lib/libxfontcache_1.0.4.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X-TrueType font cache extension client library"
+DEPENDS += "libxext fontcacheproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXfontcache"
diff --git a/packages/xorg-lib/libxfontcache_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxfontcache_X11R7.0-1.0.1.bb
deleted file mode 100644
index c75278ecb0..0000000000
--- a/packages/xorg-lib/libxfontcache_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto fontcacheproto"
-
-XORG_PN = "libXfontcache"
-
diff --git a/packages/xorg-lib/libxfontcache_X11R7.1-1.0.2.bb b/packages/xorg-lib/libxfontcache_X11R7.1-1.0.2.bb
deleted file mode 100644
index c75278ecb0..0000000000
--- a/packages/xorg-lib/libxfontcache_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxext xextproto fontcacheproto"
-
-XORG_PN = "libXfontcache"
-
diff --git a/packages/xorg-lib/libxft_2.1.12.bb b/packages/xorg-lib/libxft_2.1.12.bb
new file mode 100644
index 0000000000..8e54dac01d
--- /dev/null
+++ b/packages/xorg-lib/libxft_2.1.12.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "FreeType-based font drawing library for X"
+DEPENDS += "libxrender freetype fontconfig"
+PROVIDES = "xft"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXft"
+
+python do_package() {
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_${PN}', 'libxft2', d)
+ bb.build.exec_func('package_do_package', d)
+}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
+ ${libdir}/*.a ${libdir}/pkgconfig \
+ ${datadir}/aclocal ${bindir} ${sbindir}"
diff --git a/packages/xorg-lib/libxft_X11R7.0-2.1.12.bb b/packages/xorg-lib/libxft_X11R7.0-2.1.12.bb
deleted file mode 100644
index 5ae8247296..0000000000
--- a/packages/xorg-lib/libxft_X11R7.0-2.1.12.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require xorg-lib-common.inc
-
-SRC_URI = "${XORG_MIRROR}/individual/lib/libXft-2.1.12.tar.bz2"
-S = "${WORKDIR}/${XORG_PN}-2.1.12"
-
-
-DESCRIPTION = "X FreeType library. Client-side fonts with FreeType."
-
-DEPENDS += " libxrender freetype fontconfig"
-PROVIDES = "xft"
-
-XORG_PN = "libXft"
-
-FILES_${PN} = "${libdir}/lib*.so.*"
-FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
- ${libdir}/*.a ${libdir}/pkgconfig \
- ${datadir}/aclocal ${bindir} ${sbindir}"
-
-python do_package() {
- if bb.data.getVar('DEBIAN_NAMES', d, 1):
- bb.data.setVar('PKG_${PN}', 'libxft2', d)
- bb.build.exec_func('package_do_package', d)
-}
diff --git a/packages/xorg-lib/libxft_X11R7.0-2.1.8.2.bb b/packages/xorg-lib/libxft_X11R7.0-2.1.8.2.bb
deleted file mode 100644
index 092c25d3ab..0000000000
--- a/packages/xorg-lib/libxft_X11R7.0-2.1.8.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X FreeType library. Client-side fonts with FreeType."
-
-DEPENDS += " libxrender freetype fontconfig"
-PROVIDES = "xft"
-
-XORG_PN = "libXft"
-
-FILES_${PN} = "${libdir}/lib*.so.*"
-FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
- ${libdir}/*.a ${libdir}/pkgconfig \
- ${datadir}/aclocal ${bindir} ${sbindir}"
-
-python do_package() {
- if bb.data.getVar('DEBIAN_NAMES', d, 1):
- bb.data.setVar('PKG_${PN}', 'libxft2', d)
- bb.build.exec_func('package_do_package', d)
-}
diff --git a/packages/xorg-lib/libxi_1.0.2.bb b/packages/xorg-lib/libxi_1.0.2.bb
new file mode 100644
index 0000000000..84c67f5ae3
--- /dev/null
+++ b/packages/xorg-lib/libxi_1.0.2.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Input extension library."
+
+DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
+
+XORG_PN = "libXi"
+
diff --git a/packages/xorg-lib/libxi_1.1.0.bb b/packages/xorg-lib/libxi_1.1.0.bb
new file mode 100644
index 0000000000..84c67f5ae3
--- /dev/null
+++ b/packages/xorg-lib/libxi_1.1.0.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Input extension library."
+
+DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
+
+XORG_PN = "libXi"
+
diff --git a/packages/xorg-lib/libxi_1.1.2.bb b/packages/xorg-lib/libxi_1.1.2.bb
new file mode 100644
index 0000000000..31e3b4906d
--- /dev/null
+++ b/packages/xorg-lib/libxi_1.1.2.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Input extension library"
+DEPENDS += "libxext inputproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXi"
diff --git a/packages/xorg-lib/libxi_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxi_X11R7.0-1.0.0.bb
deleted file mode 100644
index af5e4008eb..0000000000
--- a/packages/xorg-lib/libxi_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Input extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
-
-XORG_PN = "libXi"
-
diff --git a/packages/xorg-lib/libxi_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxi_X11R7.1-1.0.1.bb
deleted file mode 100644
index af5e4008eb..0000000000
--- a/packages/xorg-lib/libxi_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Input extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
-
-XORG_PN = "libXi"
-
diff --git a/packages/xorg-lib/libxinerama_1.0.2.bb b/packages/xorg-lib/libxinerama_1.0.2.bb
new file mode 100644
index 0000000000..b7135bc28e
--- /dev/null
+++ b/packages/xorg-lib/libxinerama_1.0.2.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Xinerama extension library"
+DEPENDS += "libxext xineramaproto"
+PROVIDES = "xinerama"
+PR = "r3"
+PE = "1"
+
+XORG_PN = "libXinerama"
diff --git a/packages/xorg-lib/libxinerama_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxinerama_X11R7.0-1.0.1.bb
deleted file mode 100644
index 8f72c20898..0000000000
--- a/packages/xorg-lib/libxinerama_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xinerama library"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 libxext xextproto xineramaproto"
-PROVIDES = "xinerama"
-
-XORG_PN = "libXinerama"
-
diff --git a/packages/xorg-lib/libxkbfile_1.0.4.bb b/packages/xorg-lib/libxkbfile_1.0.4.bb
new file mode 100644
index 0000000000..a404180d49
--- /dev/null
+++ b/packages/xorg-lib/libxkbfile_1.0.4.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 keyboard file manipulation library"
+LICENSE= "GPL"
+DEPENDS += "virtual/libx11 kbproto"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-lib/libxkbfile_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxkbfile_X11R7.0-1.0.1.bb
deleted file mode 100644
index 715dcd0554..0000000000
--- a/packages/xorg-lib/libxkbfile_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 keyboard library"
-LICENSE= "GPL"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 kbproto"
-
diff --git a/packages/xorg-lib/libxkbfile_X11R7.1-1.0.3.bb b/packages/xorg-lib/libxkbfile_X11R7.1-1.0.3.bb
deleted file mode 100644
index 715dcd0554..0000000000
--- a/packages/xorg-lib/libxkbfile_X11R7.1-1.0.3.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 keyboard library"
-LICENSE= "GPL"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 kbproto"
-
diff --git a/packages/xorg-lib/libxkbui_1.0.2.bb b/packages/xorg-lib/libxkbui_1.0.2.bb
new file mode 100644
index 0000000000..9a3f5f1327
--- /dev/null
+++ b/packages/xorg-lib/libxkbui_1.0.2.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 keyboard UI presentation library"
+LICENSE= "GPL"
+DEPENDS += "virtual/libx11 libxt libxkbfile"
+PROVIDES = "xkbui"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-lib/libxkbui_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxkbui_X11R7.0-1.0.1.bb
deleted file mode 100644
index e094728c2f..0000000000
--- a/packages/xorg-lib/libxkbui_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 lbxkbui library"
-LICENSE= "GPL"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 libxt libxkbfile"
-PROVIDES = "xkbui"
diff --git a/packages/xorg-lib/libxkbui_X11R7.1-1.0.2.bb b/packages/xorg-lib/libxkbui_X11R7.1-1.0.2.bb
deleted file mode 100644
index e094728c2f..0000000000
--- a/packages/xorg-lib/libxkbui_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X11 lbxkbui library"
-LICENSE= "GPL"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 libxt libxkbfile"
-PROVIDES = "xkbui"
diff --git a/packages/xorg-lib/libxmu_1.0.3.bb b/packages/xorg-lib/libxmu_1.0.3.bb
new file mode 100644
index 0000000000..9a02bf82be
--- /dev/null
+++ b/packages/xorg-lib/libxmu_1.0.3.bb
@@ -0,0 +1,16 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 miscellaneous utility library"
+DEPENDS += "libxt libxext"
+PROVIDES = "xmu"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXmu"
+
+LEAD_SONAME = "libXmu"
+
+PACKAGES =+ "libxmuu libxmuu-dev"
+
+FILES_libxmuu = "${libdir}/libXmuu.so.*"
+FILES_libxmuu-dev = "${libdir}/libXmuu.so"
diff --git a/packages/xorg-lib/libxmu_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxmu_X11R7.0-1.0.0.bb
deleted file mode 100644
index 02df24cd9f..0000000000
--- a/packages/xorg-lib/libxmu_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Window System miscellaneous utility library"
-PRIORITY = "optional"
-
-DEPENDS += " libxt libxext xextproto virtual/libx11"
-PROVIDES = "xmu"
-
-XORG_PN = "libXmu"
-
-PACKAGES =+ "libxmuu libxmuu-dev"
-
-FILES_libxmuu = "${libdir}/libXmuu.so.*"
-FILES_libxmuu-dev = "${libdir}/libXmuu.so"
-
-LEAD_SONAME = "libXmu"
diff --git a/packages/xorg-lib/libxmu_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxmu_X11R7.1-1.0.1.bb
deleted file mode 100644
index 02df24cd9f..0000000000
--- a/packages/xorg-lib/libxmu_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Window System miscellaneous utility library"
-PRIORITY = "optional"
-
-DEPENDS += " libxt libxext xextproto virtual/libx11"
-PROVIDES = "xmu"
-
-XORG_PN = "libXmu"
-
-PACKAGES =+ "libxmuu libxmuu-dev"
-
-FILES_libxmuu = "${libdir}/libXmuu.so.*"
-FILES_libxmuu-dev = "${libdir}/libXmuu.so"
-
-LEAD_SONAME = "libXmu"
diff --git a/packages/xorg-lib/libxp_1.0.0.bb b/packages/xorg-lib/libxp_1.0.0.bb
new file mode 100644
index 0000000000..53fb47c054
--- /dev/null
+++ b/packages/xorg-lib/libxp_1.0.0.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Printing Extension (Xprint) client library"
+DEPENDS += "libxext libxau printproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXp"
+
+CFLAGS_append += " -I ${S}/include/X11/XprintUtil -I ${S}/include/X11/extensions"
diff --git a/packages/xorg-lib/libxp_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxp_X11R7.0-1.0.0.bb
deleted file mode 100644
index fc7ecb5778..0000000000
--- a/packages/xorg-lib/libxp_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X print extension library."
-
-DEPENDS += " virtual/libx11 libxext xextproto libxau printproto"
-
-XORG_PN = "libXp"
-
-CFLAGS_append += " -I ${S}/include/X11/XprintUtil -I ${S}/include/X11/extensions"
-EXTRA_OECONF="--enable-malloc0returnsnull"
diff --git a/packages/xorg-lib/libxpm_3.5.6.bb b/packages/xorg-lib/libxpm_3.5.6.bb
new file mode 100644
index 0000000000..4e0a6eaacd
--- /dev/null
+++ b/packages/xorg-lib/libxpm_3.5.6.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Pixmap library"
+LICENSE = "X-BSD"
+DEPENDS += "libxt libxext"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXpm"
+
+PACKAGES =+ "sxpm cxpm"
+FILES_cxpm = "${bindir}/cxpm"
+FILES_sxpm = "${bindir}/sxpm"
diff --git a/packages/xorg-lib/libxpm_X11R7.0-3.5.4.2.bb b/packages/xorg-lib/libxpm_X11R7.0-3.5.4.2.bb
deleted file mode 100644
index 3ff582a8e3..0000000000
--- a/packages/xorg-lib/libxpm_X11R7.0-3.5.4.2.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Pixmap library."
-PRIORITY = "optional"
-LICENSE = "X-BSD"
-
-DEPENDS += " xproto virtual/libx11 libxt libxext xextproto"
-
-XORG_PN = "libXpm"
-
-PACKAGES =+ "sxpm cxpm"
-FILES_cxpm = "${bindir}/cxpm"
-FILES_sxpm = "${bindir}/sxpm"
diff --git a/packages/xorg-lib/libxpm_X11R7.1-3.5.5.bb b/packages/xorg-lib/libxpm_X11R7.1-3.5.5.bb
deleted file mode 100644
index 3ff582a8e3..0000000000
--- a/packages/xorg-lib/libxpm_X11R7.1-3.5.5.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Pixmap library."
-PRIORITY = "optional"
-LICENSE = "X-BSD"
-
-DEPENDS += " xproto virtual/libx11 libxt libxext xextproto"
-
-XORG_PN = "libXpm"
-
-PACKAGES =+ "sxpm cxpm"
-FILES_cxpm = "${bindir}/cxpm"
-FILES_sxpm = "${bindir}/sxpm"
diff --git a/packages/xorg-lib/libxprintapputil_1.0.1.bb b/packages/xorg-lib/libxprintapputil_1.0.1.bb
new file mode 100644
index 0000000000..3a24a888d1
--- /dev/null
+++ b/packages/xorg-lib/libxprintapputil_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "Xprint job utility client library"
+DEPENDS += "libxp libxt libxprintutil"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXprintAppUtil"
diff --git a/packages/xorg-lib/libxprintapputil_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxprintapputil_X11R7.0-1.0.1.bb
deleted file mode 100644
index 077ac40a0a..0000000000
--- a/packages/xorg-lib/libxprintapputil_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxp libxprintutil printproto libxau"
-
-XORG_PN = "libXprintAppUtil"
-
diff --git a/packages/xorg-lib/libxprintutil_1.0.1.bb b/packages/xorg-lib/libxprintutil_1.0.1.bb
new file mode 100644
index 0000000000..327138e7fd
--- /dev/null
+++ b/packages/xorg-lib/libxprintutil_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "Xprint printer utility client library"
+DEPENDS += "libxp libxt"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXprintUtil"
diff --git a/packages/xorg-lib/libxprintutil_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxprintutil_X11R7.0-1.0.1.bb
deleted file mode 100644
index f965b9a2bc..0000000000
--- a/packages/xorg-lib/libxprintutil_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxp libxt printproto libxau"
-
-XORG_PN = "libXprintUtil"
-
diff --git a/packages/xorg-lib/libxrandr_1.1.2.bb b/packages/xorg-lib/libxrandr_1.1.2.bb
new file mode 100644
index 0000000000..18e5deffb8
--- /dev/null
+++ b/packages/xorg-lib/libxrandr_1.1.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Resize and Rotate extension library."
+LICENSE = "BSD-X"
+
+DEPENDS += " virtual/libx11 randrproto libxext xextproto libxrender renderproto"
+
+XORG_PN = "libXrandr"
+
diff --git a/packages/xorg-lib/libxrandr_1.2.1.bb b/packages/xorg-lib/libxrandr_1.2.1.bb
new file mode 100644
index 0000000000..cf2a73a72c
--- /dev/null
+++ b/packages/xorg-lib/libxrandr_1.2.1.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Resize and Rotate extension library"
+LICENSE = "BSD-X"
+DEPENDS += "randrproto libxrender"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXrandr"
diff --git a/packages/xorg-lib/libxrandr_X11R7.0-1.1.0.2.bb b/packages/xorg-lib/libxrandr_X11R7.0-1.1.0.2.bb
deleted file mode 100644
index 363550fade..0000000000
--- a/packages/xorg-lib/libxrandr_X11R7.0-1.1.0.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Resize and Rotate extension library."
-LICENSE = "BSD-X"
-
-DEPENDS += " virtual/libx11 randrproto libxext xextproto libxrender renderproto"
-
-XORG_PN = "libXrandr"
-
diff --git a/packages/xorg-lib/libxrandr_X11R7.1-1.1.1.bb b/packages/xorg-lib/libxrandr_X11R7.1-1.1.1.bb
deleted file mode 100644
index 363550fade..0000000000
--- a/packages/xorg-lib/libxrandr_X11R7.1-1.1.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Resize and Rotate extension library."
-LICENSE = "BSD-X"
-
-DEPENDS += " virtual/libx11 randrproto libxext xextproto libxrender renderproto"
-
-XORG_PN = "libXrandr"
-
diff --git a/packages/xorg-lib/libxrender_0.9.2.bb b/packages/xorg-lib/libxrender_0.9.2.bb
new file mode 100644
index 0000000000..f8b9c37b50
--- /dev/null
+++ b/packages/xorg-lib/libxrender_0.9.2.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Rendering Extension client library"
+LICENSE = "BSD-X"
+DEPENDS += "virtual/libx11 renderproto xproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXrender"
diff --git a/packages/xorg-lib/libxrender_X11R7.0-0.9.0.2.bb b/packages/xorg-lib/libxrender_X11R7.0-0.9.0.2.bb
deleted file mode 100644
index 32ba95721d..0000000000
--- a/packages/xorg-lib/libxrender_X11R7.0-0.9.0.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Render extension library."
-LICENSE = "BSD-X"
-
-DEPENDS += " virtual/libx11 renderproto"
-
-XORG_PN = "libXrender"
-
diff --git a/packages/xorg-lib/libxrender_X11R7.1-0.9.1.bb b/packages/xorg-lib/libxrender_X11R7.1-0.9.1.bb
deleted file mode 100644
index 32ba95721d..0000000000
--- a/packages/xorg-lib/libxrender_X11R7.1-0.9.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Render extension library."
-LICENSE = "BSD-X"
-
-DEPENDS += " virtual/libx11 renderproto"
-
-XORG_PN = "libXrender"
-
diff --git a/packages/xorg-lib/libxres_1.0.3.bb b/packages/xorg-lib/libxres_1.0.3.bb
new file mode 100644
index 0000000000..02a0cae0d8
--- /dev/null
+++ b/packages/xorg-lib/libxres_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Resource extension library"
+DEPENDS += "libxext resourceproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXres"
diff --git a/packages/xorg-lib/libxres_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxres_X11R7.0-1.0.0.bb
deleted file mode 100644
index 282947e7fe..0000000000
--- a/packages/xorg-lib/libxres_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Resource usage library."
-
-DEPENDS += " virtual/libx11 libxext xextproto resourceproto"
-
-XORG_PN = "libXres"
-
diff --git a/packages/xorg-lib/libxres_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxres_X11R7.1-1.0.1.bb
deleted file mode 100644
index 282947e7fe..0000000000
--- a/packages/xorg-lib/libxres_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Resource usage library."
-
-DEPENDS += " virtual/libx11 libxext xextproto resourceproto"
-
-XORG_PN = "libXres"
-
diff --git a/packages/xorg-lib/libxscrnsaver_1.1.2.bb b/packages/xorg-lib/libxscrnsaver_1.1.2.bb
new file mode 100644
index 0000000000..ff22c337a0
--- /dev/null
+++ b/packages/xorg-lib/libxscrnsaver_1.1.2.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Screen Saver extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext scrnsaverproto"
+PROVIDES = "libxss"
+RREPLACES = "libxss"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXScrnSaver"
diff --git a/packages/xorg-lib/libxscrnsaver_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxscrnsaver_X11R7.0-1.0.1.bb
deleted file mode 100644
index 2f0168e2b5..0000000000
--- a/packages/xorg-lib/libxscrnsaver_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X screen saver extension library."
-LICENSE = "GPL"
-
-DEPENDS += " virtual/libx11 libxext xextproto scrnsaverproto"
-
-XORG_PN = "libXScrnSaver"
-
-PROVIDES = "libxss"
-RREPLACES = "libxss"
-
-#CFLAGS_append += " -I ${S}/include/X11/XprintUtil -I ${S}/include/X11/extensions"
diff --git a/packages/xorg-lib/libxscrnsaver_X11R7.1-1.1.0.bb b/packages/xorg-lib/libxscrnsaver_X11R7.1-1.1.0.bb
deleted file mode 100644
index 2f0168e2b5..0000000000
--- a/packages/xorg-lib/libxscrnsaver_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X screen saver extension library."
-LICENSE = "GPL"
-
-DEPENDS += " virtual/libx11 libxext xextproto scrnsaverproto"
-
-XORG_PN = "libXScrnSaver"
-
-PROVIDES = "libxss"
-RREPLACES = "libxss"
-
-#CFLAGS_append += " -I ${S}/include/X11/XprintUtil -I ${S}/include/X11/extensions"
diff --git a/packages/xorg-lib/libxt_1.0.4.bb b/packages/xorg-lib/libxt_1.0.4.bb
new file mode 100644
index 0000000000..e67590bdf1
--- /dev/null
+++ b/packages/xorg-lib/libxt_1.0.4.bb
@@ -0,0 +1,20 @@
+require xorg-lib-common.inc
+PE = "1"
+
+DESCRIPTION = "X Toolkit Intrinsics"
+PRIORITY = "optional"
+
+DEPENDS += " libsm virtual/libx11 xproto kbproto"
+PROVIDES = "xt"
+
+XORG_PN = "libXt"
+
+EXTRA_OECONF="--enable-malloc0returnsnull --disable-install-makestrs --disable-xkb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+ ) || exit 1
+ oe_runmake
+}
diff --git a/packages/xorg-lib/libxt_1.0.5.bb b/packages/xorg-lib/libxt_1.0.5.bb
new file mode 100644
index 0000000000..5b25c4b3a5
--- /dev/null
+++ b/packages/xorg-lib/libxt_1.0.5.bb
@@ -0,0 +1,19 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 toolkit intrinsics library"
+DEPENDS += "libsm virtual/libx11 kbproto"
+PROVIDES = "xt"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXt"
+
+EXTRA_OECONF += "--disable-install-makestrs --disable-xkb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+ ) || exit 1
+ oe_runmake
+}
diff --git a/packages/xorg-lib/libxt_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxt_X11R7.0-1.0.0.bb
deleted file mode 100644
index 520ab10c0e..0000000000
--- a/packages/xorg-lib/libxt_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Toolkit Intrinsics"
-PRIORITY = "optional"
-
-DEPENDS += " libsm virtual/libx11 xproto kbproto"
-PROVIDES = "xt"
-
-XORG_PN = "libXt"
-
-EXTRA_OECONF="--enable-malloc0returnsnull --disable-install-makestrs --disable-xkb"
-
-do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
- ) || exit 1
- oe_runmake
-}
diff --git a/packages/xorg-lib/libxt_X11R7.1-1.0.2.bb b/packages/xorg-lib/libxt_X11R7.1-1.0.2.bb
deleted file mode 100644
index 520ab10c0e..0000000000
--- a/packages/xorg-lib/libxt_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Toolkit Intrinsics"
-PRIORITY = "optional"
-
-DEPENDS += " libsm virtual/libx11 xproto kbproto"
-PROVIDES = "xt"
-
-XORG_PN = "libXt"
-
-EXTRA_OECONF="--enable-malloc0returnsnull --disable-install-makestrs --disable-xkb"
-
-do_compile() {
- (
- unset CC LD CXX CCLD
- oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
- ) || exit 1
- oe_runmake
-}
diff --git a/packages/xorg-lib/libxtrap_1.0.0.bb b/packages/xorg-lib/libxtrap_1.0.0.bb
new file mode 100644
index 0000000000..7a25ae5bce
--- /dev/null
+++ b/packages/xorg-lib/libxtrap_1.0.0.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 event trapping extension library"
+DEPENDS += "libxt trapproto libxext"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXTrap"
diff --git a/packages/xorg-lib/libxtrap_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxtrap_X11R7.0-1.0.0.bb
deleted file mode 100644
index f9ebac47f9..0000000000
--- a/packages/xorg-lib/libxtrap_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " virtual/libx11 libxt trapproto libxext xextproto"
-
-XORG_PN = "libXTrap"
-
diff --git a/packages/xorg-lib/libxtst_1.0.2.bb b/packages/xorg-lib/libxtst_1.0.2.bb
new file mode 100644
index 0000000000..14e10ff285
--- /dev/null
+++ b/packages/xorg-lib/libxtst_1.0.2.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Test Extension: client side library"
+DEPENDS += "libxext recordproto inputproto"
+PROVIDES = "xtst"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXtst"
diff --git a/packages/xorg-lib/libxtst_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxtst_X11R7.0-1.0.1.bb
deleted file mode 100644
index 802ea2836d..0000000000
--- a/packages/xorg-lib/libxtst_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Test Extension: client side library"
-PRIORITY = "optional"
-
-DEPENDS += " virtual/libx11 libxext recordproto xextproto inputproto"
-PROVIDES = "xtst"
-
-XORG_PN = "libXtst"
-
diff --git a/packages/xorg-lib/libxv_1.0.3.bb b/packages/xorg-lib/libxv_1.0.3.bb
new file mode 100644
index 0000000000..6014326e90
--- /dev/null
+++ b/packages/xorg-lib/libxv_1.0.3.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Video extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext videoproto"
+PR = "r1"
+
+XORG_PN = "libXv"
diff --git a/packages/xorg-lib/libxv_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxv_X11R7.0-1.0.1.bb
deleted file mode 100644
index 0d045940e3..0000000000
--- a/packages/xorg-lib/libxv_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Video extension library."
-LICENSE = "GPL"
-
-DEPENDS += " virtual/libx11 libxext xextproto videoproto"
-
-XORG_PN = "libXv"
-
diff --git a/packages/xorg-lib/libxvmc_1.0.4.bb b/packages/xorg-lib/libxvmc_1.0.4.bb
new file mode 100644
index 0000000000..64943ce9bd
--- /dev/null
+++ b/packages/xorg-lib/libxvmc_1.0.4.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X Video Motion Compensation extension library"
+DEPENDS += "libxext libxv videoproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXvMC"
diff --git a/packages/xorg-lib/libxvmc_X11R7.0-1.0.1.bb b/packages/xorg-lib/libxvmc_X11R7.0-1.0.1.bb
deleted file mode 100644
index a0f9f7be25..0000000000
--- a/packages/xorg-lib/libxvmc_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Video Motion Compensation extension library."
-
-DEPENDS += " virtual/libx11 libxext libxv xextproto videoproto"
-
-XORG_PN = "libXvMC"
-
diff --git a/packages/xorg-lib/libxvmc_X11R7.1-1.0.2.bb b/packages/xorg-lib/libxvmc_X11R7.1-1.0.2.bb
deleted file mode 100644
index a0f9f7be25..0000000000
--- a/packages/xorg-lib/libxvmc_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "X Video Motion Compensation extension library."
-
-DEPENDS += " virtual/libx11 libxext libxv xextproto videoproto"
-
-XORG_PN = "libXvMC"
-
diff --git a/packages/xorg-lib/libxxf86dga_1.0.1.bb b/packages/xorg-lib/libxxf86dga_1.0.1.bb
new file mode 100644
index 0000000000..47492d7108
--- /dev/null
+++ b/packages/xorg-lib/libxxf86dga_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 Direct Graphics Access extension library"
+DEPENDS += "libxext xf86dgaproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXxf86dga"
diff --git a/packages/xorg-lib/libxxf86dga_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxxf86dga_X11R7.0-1.0.0.bb
deleted file mode 100644
index e067190b84..0000000000
--- a/packages/xorg-lib/libxxf86dga_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xxf86dga extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86dgaproto"
-
-XORG_PN = "libXxf86dga"
-
diff --git a/packages/xorg-lib/libxxf86dga_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxxf86dga_X11R7.1-1.0.1.bb
deleted file mode 100644
index e067190b84..0000000000
--- a/packages/xorg-lib/libxxf86dga_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xxf86dga extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86dgaproto"
-
-XORG_PN = "libXxf86dga"
-
diff --git a/packages/xorg-lib/libxxf86misc_1.0.1.bb b/packages/xorg-lib/libxxf86misc_1.0.1.bb
new file mode 100644
index 0000000000..d1f8719cde
--- /dev/null
+++ b/packages/xorg-lib/libxxf86misc_1.0.1.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 XFree86 miscellaneous extension library"
+DEPENDS += "libxext xf86miscproto"
+PROVIDES = "xxf86misc"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXxf86misc"
diff --git a/packages/xorg-lib/libxxf86misc_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxxf86misc_X11R7.0-1.0.0.bb
deleted file mode 100644
index 3af4acba96..0000000000
--- a/packages/xorg-lib/libxxf86misc_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86miscproto"
-PROVIDES = "xxf86misc"
-
-XORG_PN = "libXxf86misc"
-
diff --git a/packages/xorg-lib/libxxf86misc_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxxf86misc_X11R7.1-1.0.1.bb
deleted file mode 100644
index 3af4acba96..0000000000
--- a/packages/xorg-lib/libxxf86misc_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86miscproto"
-PROVIDES = "xxf86misc"
-
-XORG_PN = "libXxf86misc"
-
diff --git a/packages/xorg-lib/libxxf86vm_1.0.1.bb b/packages/xorg-lib/libxxf86vm_1.0.1.bb
new file mode 100644
index 0000000000..efb90d4854
--- /dev/null
+++ b/packages/xorg-lib/libxxf86vm_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "X11 XFree86 video mode extension library"
+DEPENDS += "libxext xf86vidmodeproto"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "libXxf86vm"
diff --git a/packages/xorg-lib/libxxf86vm_X11R7.0-1.0.0.bb b/packages/xorg-lib/libxxf86vm_X11R7.0-1.0.0.bb
deleted file mode 100644
index b85e2d2477..0000000000
--- a/packages/xorg-lib/libxxf86vm_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xxf86vm extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86vidmodeproto"
-
-XORG_PN = "libXxf86vm"
-
diff --git a/packages/xorg-lib/libxxf86vm_X11R7.1-1.0.1.bb b/packages/xorg-lib/libxxf86vm_X11R7.1-1.0.1.bb
deleted file mode 100644
index b85e2d2477..0000000000
--- a/packages/xorg-lib/libxxf86vm_X11R7.1-1.0.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-lib-common.inc
-
-DESCRIPTION = "Xxf86vm extension library."
-
-DEPENDS += " xproto virtual/libx11 xextproto libxext xf86vidmodeproto"
-
-XORG_PN = "libXxf86vm"
-
diff --git a/packages/xorg-lib/pixman_0.9.4.bb b/packages/xorg-lib/pixman_0.9.4.bb
new file mode 100644
index 0000000000..08b29fedef
--- /dev/null
+++ b/packages/xorg-lib/pixman_0.9.4.bb
@@ -0,0 +1,6 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "Library for lowlevel pixel operations"
+DEPENDS = "virtual/libx11"
+PR = "r0"
+
diff --git a/packages/xorg-lib/xorg-headers-native.bb b/packages/xorg-lib/xorg-headers-native.bb
index f88bcc7aee..82d5d79415 100644
--- a/packages/xorg-lib/xorg-headers-native.bb
+++ b/packages/xorg-lib/xorg-headers-native.bb
@@ -6,4 +6,3 @@ do_stage() {
install -d ${STAGING_INCDIR}
cp -pPfR ${WORKDIR}/X11 ${STAGING_INCDIR}
}
-
diff --git a/packages/xorg-lib/xorg-lib-common.inc b/packages/xorg-lib/xorg-lib-common.inc
index 0c6c1388d2..130f8d1755 100644
--- a/packages/xorg-lib/xorg-lib-common.inc
+++ b/packages/xorg-lib/xorg-lib-common.inc
@@ -1,10 +1,12 @@
HOMEPAGE = "http://www.x.org"
SECTION = "x11/libs"
LICENSE = "MIT-X"
-
DEPENDS = "util-macros xorg-headers-native"
+
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/lib/${XORG_PN}-${PV}.tar.bz2"
+
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
@@ -12,5 +14,5 @@ inherit autotools pkgconfig
EXTRA_OECONF = "--enable-malloc0returnsnull"
do_stage() {
- autotools_stage_all
+ autotools_stage_all
}
diff --git a/packages/xorg-lib/xtrans-native_1.0.3.bb b/packages/xorg-lib/xtrans-native_1.0.3.bb
new file mode 100644
index 0000000000..722d7e15e7
--- /dev/null
+++ b/packages/xorg-lib/xtrans-native_1.0.3.bb
@@ -0,0 +1,10 @@
+require xtrans_${PV}.bb
+
+DEPENDS = "util-macros-native"
+PE = "1"
+
+XORG_PN = "xtrans"
+
+SRC_URI = "${XORG_MIRROR}/individual/lib/${XORG_PN}-${PV}.tar.bz2"
+
+inherit native
diff --git a/packages/xorg-lib/xtrans-native_X11R7.0-1.0.0.bb b/packages/xorg-lib/xtrans-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index 7d24f07432..0000000000
--- a/packages/xorg-lib/xtrans-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "BSD-X"
-
-DEPENDS = "util-macros-native"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/lib/xtrans-${PV}.tar.bz2"
-S = "${WORKDIR}/xtrans-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-lib/xtrans_1.0.3.bb b/packages/xorg-lib/xtrans_1.0.3.bb
new file mode 100644
index 0000000000..42cf655a3f
--- /dev/null
+++ b/packages/xorg-lib/xtrans_1.0.3.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+PE = "1"
+
+SRC_URI += "file://fix-missing-includepath.patch;patch=1"
diff --git a/packages/xorg-lib/xtrans_X11R7.0-1.0.0.bb b/packages/xorg-lib/xtrans_X11R7.0-1.0.0.bb
deleted file mode 100644
index 2c38782a57..0000000000
--- a/packages/xorg-lib/xtrans_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require xorg-lib-common.inc
-PR = "r1"
-
-SRC_URI += "file://fix-missing-includepath.patch;patch=1"
-
-DESCRIPTION = "network API translation layer to \
-insulate X applications and libraries from OS \
-network vageries."
-
diff --git a/packages/xorg-proto/applewmproto_1.0.3.bb b/packages/xorg-proto/applewmproto_1.0.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/applewmproto_1.0.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/applewmproto_X11R7.0-1.0.3.bb b/packages/xorg-proto/applewmproto_X11R7.0-1.0.3.bb
deleted file mode 100644
index 1f4cf97e70..0000000000
--- a/packages/xorg-proto/applewmproto_X11R7.0-1.0.3.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-proto/bigreqsproto-native_1.0.2.bb b/packages/xorg-proto/bigreqsproto-native_1.0.2.bb
new file mode 100644
index 0000000000..e86417195d
--- /dev/null
+++ b/packages/xorg-proto/bigreqsproto-native_1.0.2.bb
@@ -0,0 +1,7 @@
+require bigreqsproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "bigreqsproto"
+
+inherit native
diff --git a/packages/xorg-proto/bigreqsproto-native_X11R7.0-1.0.2.bb b/packages/xorg-proto/bigreqsproto-native_X11R7.0-1.0.2.bb
deleted file mode 100644
index f46c1da93e..0000000000
--- a/packages/xorg-proto/bigreqsproto-native_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/bigreqsproto-${PV}.tar.bz2"
-S = "${WORKDIR}/bigreqsproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/bigreqsproto_1.0.2.bb b/packages/xorg-proto/bigreqsproto_1.0.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/bigreqsproto_1.0.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/bigreqsproto_X11R7.0-1.0.2.bb b/packages/xorg-proto/bigreqsproto_X11R7.0-1.0.2.bb
deleted file mode 100644
index 1f4cf97e70..0000000000
--- a/packages/xorg-proto/bigreqsproto_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-proto/calibrateproto/.mtn2git_empty b/packages/xorg-proto/calibrateproto/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-proto/calibrateproto/.mtn2git_empty
diff --git a/packages/xorg-proto/calibrateproto/coords.patch b/packages/xorg-proto/calibrateproto/coords.patch
new file mode 100644
index 0000000000..8f44b029c5
--- /dev/null
+++ b/packages/xorg-proto/calibrateproto/coords.patch
@@ -0,0 +1,56 @@
+---
+ xcalibrateproto.h | 25 +++++++++++++++++++++++++
+ xcalibratewire.h | 3 ++-
+ 2 files changed, 27 insertions(+), 1 deletion(-)
+
+Index: XCalibrateExt/xcalibrateproto.h
+===================================================================
+--- XCalibrateExt.orig/xcalibrateproto.h 2004-06-02 20:18:47.000000000 +0100
++++ XCalibrateExt/xcalibrateproto.h 2007-06-30 14:17:29.000000000 +0100
+@@ -78,6 +78,31 @@ typedef struct {
+
+ #define sz_xXCalibrateRawModeReply 32
+
++typedef struct {
++ CARD8 reqType;
++ CARD8 xCalibrateReqType;
++ CARD16 length B16;
++ CARD32 x B32;
++ CARD32 y B32;
++} xXCalibrateScreenToCoordReq;
++
++#define sz_xXCalibrateScreenToCoordReq 12
++
++typedef struct {
++ BYTE type; /* X_Reply */
++ BYTE pad1;
++ CARD16 sequenceNumber B16;
++ CARD32 x;
++ CARD32 y;
++ CARD32 pad2 B32;
++ CARD32 pad3 B32;
++ CARD32 pad4 B32;
++ CARD32 pad5 B32;
++ CARD32 pad6 B32;
++} xXCalibrateScreenToCoordReply;
++
++#define sz_xXCalibrateScreenToCoordReply 32
++
+ /* Events */
+
+ typedef struct {
+Index: XCalibrateExt/xcalibratewire.h
+===================================================================
+--- XCalibrateExt.orig/xcalibratewire.h 2004-06-02 20:18:47.000000000 +0100
++++ XCalibrateExt/xcalibratewire.h 2007-06-30 14:17:29.000000000 +0100
+@@ -31,8 +31,9 @@
+
+ #define X_XCalibrateQueryVersion 0
+ #define X_XCalibrateRawMode 1
++#define X_XCalibrateScreenToCoord 2
+
+-#define XCalibrateNumberRequests (X_XCalibrateSetRawMode + 1)
++#define XCalibrateNumberRequests (X_XCalibrateScreenToCoord + 1)
+
+ #define X_XCalibrateRawTouchscreen 0
+
diff --git a/packages/xorg-proto/calibrateproto_git.bb b/packages/xorg-proto/calibrateproto_git.bb
index 8c61f3c0a4..60308601b9 100644
--- a/packages/xorg-proto/calibrateproto_git.bb
+++ b/packages/xorg-proto/calibrateproto_git.bb
@@ -1,9 +1,11 @@
require xorg-proto-common.inc
-DESCRIPTION = " Touchscreen calibration protocol"
+DESCRIPTION = "Touchscreen calibration protocol"
PV = "0.0+git${SRCDATE}"
+PR = "r1"
-SRC_URI = "git://anongit.freedesktop.org/git/xorg/proto/calibrateproto;protocol=git"
-S = "${WORKDIR}/git"
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/proto/calibrateproto;protocol=git;tag=a1d5ef0c73fbef3e758c51b57ac69ba9567bae04 \
+ file://coords.patch;patch=1"
+S = "${WORKDIR}/git"
diff --git a/packages/xorg-proto/compositeproto_0.4.bb b/packages/xorg-proto/compositeproto_0.4.bb
new file mode 100644
index 0000000000..f74413c551
--- /dev/null
+++ b/packages/xorg-proto/compositeproto_0.4.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "compositeext"
+PE = "1"
diff --git a/packages/xorg-proto/compositeproto_X11R7.0-0.2.2.bb b/packages/xorg-proto/compositeproto_X11R7.0-0.2.2.bb
deleted file mode 100644
index 59eae3a0bb..0000000000
--- a/packages/xorg-proto/compositeproto_X11R7.0-0.2.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "compositeext"
diff --git a/packages/xorg-proto/compositeproto_X11R7.1-0.3.1.bb b/packages/xorg-proto/compositeproto_X11R7.1-0.3.1.bb
deleted file mode 100644
index 59eae3a0bb..0000000000
--- a/packages/xorg-proto/compositeproto_X11R7.1-0.3.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "compositeext"
diff --git a/packages/xorg-proto/damageproto_1.1.0.bb b/packages/xorg-proto/damageproto_1.1.0.bb
new file mode 100644
index 0000000000..202ec2874f
--- /dev/null
+++ b/packages/xorg-proto/damageproto_1.1.0.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "damageext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/damageproto_X11R7.0-1.0.3.bb b/packages/xorg-proto/damageproto_X11R7.0-1.0.3.bb
deleted file mode 100644
index a05558f979..0000000000
--- a/packages/xorg-proto/damageproto_X11R7.0-1.0.3.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "damageext"
diff --git a/packages/xorg-proto/dmxproto_2.2.2.bb b/packages/xorg-proto/dmxproto_2.2.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/dmxproto_2.2.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/dmxproto_X11R7.0-2.2.2.bb b/packages/xorg-proto/dmxproto_X11R7.0-2.2.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/dmxproto_X11R7.0-2.2.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/evieext_1.0.2.bb b/packages/xorg-proto/evieext_1.0.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/evieext_1.0.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/evieext_X11R7.0-1.0.2.bb b/packages/xorg-proto/evieext_X11R7.0-1.0.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/evieext_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/fixesproto_4.0.bb b/packages/xorg-proto/fixesproto_4.0.bb
new file mode 100644
index 0000000000..1bc36e00da
--- /dev/null
+++ b/packages/xorg-proto/fixesproto_4.0.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "fixesext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/fixesproto_X11R7.0-3.0.2.bb b/packages/xorg-proto/fixesproto_X11R7.0-3.0.2.bb
deleted file mode 100644
index 16ff0441b5..0000000000
--- a/packages/xorg-proto/fixesproto_X11R7.0-3.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "fixesext"
diff --git a/packages/xorg-proto/fixesproto_X11R7.1-4.0.bb b/packages/xorg-proto/fixesproto_X11R7.1-4.0.bb
deleted file mode 100644
index 16ff0441b5..0000000000
--- a/packages/xorg-proto/fixesproto_X11R7.1-4.0.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "fixesext"
diff --git a/packages/xorg-proto/fontcacheproto-native_0.1.2.bb b/packages/xorg-proto/fontcacheproto-native_0.1.2.bb
new file mode 100644
index 0000000000..f6df67f59e
--- /dev/null
+++ b/packages/xorg-proto/fontcacheproto-native_0.1.2.bb
@@ -0,0 +1,7 @@
+require fontcacheproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "fontcacheproto"
+
+inherit native
diff --git a/packages/xorg-proto/fontcacheproto-native_X11R7.0-0.1.2.bb b/packages/xorg-proto/fontcacheproto-native_X11R7.0-0.1.2.bb
deleted file mode 100644
index a9ff843cb3..0000000000
--- a/packages/xorg-proto/fontcacheproto-native_X11R7.0-0.1.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/fontcacheproto-${PV}.tar.bz2"
-S = "${WORKDIR}/fontcacheproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/fontcacheproto_0.1.2.bb b/packages/xorg-proto/fontcacheproto_0.1.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/fontcacheproto_0.1.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/fontcacheproto_X11R7.0-0.1.2.bb b/packages/xorg-proto/fontcacheproto_X11R7.0-0.1.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/fontcacheproto_X11R7.0-0.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/fontsproto-native_2.0.2.bb b/packages/xorg-proto/fontsproto-native_2.0.2.bb
new file mode 100644
index 0000000000..4371a07836
--- /dev/null
+++ b/packages/xorg-proto/fontsproto-native_2.0.2.bb
@@ -0,0 +1,9 @@
+require fontsproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "fontsproto"
+
+S = "${WORKDIR}/fontsproto-${PV}"
+
+inherit native
diff --git a/packages/xorg-proto/fontsproto-native_X11R7.0-2.0.2.bb b/packages/xorg-proto/fontsproto-native_X11R7.0-2.0.2.bb
deleted file mode 100644
index 34a32f97be..0000000000
--- a/packages/xorg-proto/fontsproto-native_X11R7.0-2.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/fontsproto-${PV}.tar.bz2"
-S = "${WORKDIR}/fontsproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/fontsproto_2.0.2.bb b/packages/xorg-proto/fontsproto_2.0.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/fontsproto_2.0.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/fontsproto_X11R7.0-2.0.2.bb b/packages/xorg-proto/fontsproto_X11R7.0-2.0.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/fontsproto_X11R7.0-2.0.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/glproto_1.4.8.bb b/packages/xorg-proto/glproto_1.4.8.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/glproto_1.4.8.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/glproto_X11R7.0-1.4.3.bb b/packages/xorg-proto/glproto_X11R7.0-1.4.3.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/glproto_X11R7.0-1.4.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/glproto_X11R7.1-1.4.7.bb b/packages/xorg-proto/glproto_X11R7.1-1.4.7.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/glproto_X11R7.1-1.4.7.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/inputproto-native_1.4.2.bb b/packages/xorg-proto/inputproto-native_1.4.2.bb
new file mode 100644
index 0000000000..11e0dae601
--- /dev/null
+++ b/packages/xorg-proto/inputproto-native_1.4.2.bb
@@ -0,0 +1,7 @@
+require inputproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "inputproto"
+
+inherit native
diff --git a/packages/xorg-proto/inputproto-native_X11R7.0-1.3.2.bb b/packages/xorg-proto/inputproto-native_X11R7.0-1.3.2.bb
deleted file mode 100644
index c47701289d..0000000000
--- a/packages/xorg-proto/inputproto-native_X11R7.0-1.3.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/inputproto-${PV}.tar.bz2"
-S = "${WORKDIR}/inputproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/inputproto_1.4.1.bb b/packages/xorg-proto/inputproto_1.4.1.bb
new file mode 100644
index 0000000000..40af1d2115
--- /dev/null
+++ b/packages/xorg-proto/inputproto_1.4.1.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+PE = "1"
+
+#DESCRIPTION = ""
diff --git a/packages/xorg-proto/inputproto_1.4.2.bb b/packages/xorg-proto/inputproto_1.4.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/inputproto_1.4.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/inputproto_X11R7.0-1.3.2.bb b/packages/xorg-proto/inputproto_X11R7.0-1.3.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/inputproto_X11R7.0-1.3.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/inputproto_X11R7.1-1.4.bb b/packages/xorg-proto/inputproto_X11R7.1-1.4.bb
deleted file mode 100644
index 26260c401e..0000000000
--- a/packages/xorg-proto/inputproto_X11R7.1-1.4.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require xorg-proto-common.inc
-
-SRC_URI = "${XORG_MIRROR}/individual/proto/inputproto-1.4.tar.gz"
-S = "${WORKDIR}/${XORG_PN}-1.4"
diff --git a/packages/xorg-proto/kbproto-native_1.0.3.bb b/packages/xorg-proto/kbproto-native_1.0.3.bb
new file mode 100644
index 0000000000..68c677c07b
--- /dev/null
+++ b/packages/xorg-proto/kbproto-native_1.0.3.bb
@@ -0,0 +1,7 @@
+require kbproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "kbproto"
+
+inherit native
diff --git a/packages/xorg-proto/kbproto-native_X11R7.0-1.0.2.bb b/packages/xorg-proto/kbproto-native_X11R7.0-1.0.2.bb
deleted file mode 100644
index e7d1f9c992..0000000000
--- a/packages/xorg-proto/kbproto-native_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/kbproto-${PV}.tar.bz2"
-S = "${WORKDIR}/kbproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/kbproto_1.0.3.bb b/packages/xorg-proto/kbproto_1.0.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/kbproto_1.0.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/kbproto_X11R7.0-1.0.2.bb b/packages/xorg-proto/kbproto_X11R7.0-1.0.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/kbproto_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/kbproto_X11R7.1-1.0.3.bb b/packages/xorg-proto/kbproto_X11R7.1-1.0.3.bb
deleted file mode 100644
index 813143995d..0000000000
--- a/packages/xorg-proto/kbproto_X11R7.1-1.0.3.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require xorg-proto-common.inc
-
-SRC_URI = "${XORG_MIRROR}/individual/proto/${XORG_PN}-1.0.3.tar.bz2"
-S = "${WORKDIR}/${XORG_PN}-1.0.3"
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/printproto_1.0.3.bb b/packages/xorg-proto/printproto_1.0.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/printproto_1.0.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/printproto_X11R7.0-1.0.3.bb b/packages/xorg-proto/printproto_X11R7.0-1.0.3.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/printproto_X11R7.0-1.0.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/randrproto_1.2.1.bb b/packages/xorg-proto/randrproto_1.2.1.bb
new file mode 100644
index 0000000000..eb8c7e0147
--- /dev/null
+++ b/packages/xorg-proto/randrproto_1.2.1.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "randrext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/randrproto_X11R7.0-1.1.2.bb b/packages/xorg-proto/randrproto_X11R7.0-1.1.2.bb
deleted file mode 100644
index ffdbf51ebf..0000000000
--- a/packages/xorg-proto/randrproto_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "randrext"
diff --git a/packages/xorg-proto/recordproto_1.13.2.bb b/packages/xorg-proto/recordproto_1.13.2.bb
new file mode 100644
index 0000000000..af63403600
--- /dev/null
+++ b/packages/xorg-proto/recordproto_1.13.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "recordext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/recordproto_X11R7.0-1.13.2.bb b/packages/xorg-proto/recordproto_X11R7.0-1.13.2.bb
deleted file mode 100644
index 255ab83609..0000000000
--- a/packages/xorg-proto/recordproto_X11R7.0-1.13.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "recordext"
diff --git a/packages/xorg-proto/renderproto_0.9.2.bb b/packages/xorg-proto/renderproto_0.9.2.bb
new file mode 100644
index 0000000000..39f4b66be7
--- /dev/null
+++ b/packages/xorg-proto/renderproto_0.9.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "renderext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/renderproto_X11R7.0-0.9.2.bb b/packages/xorg-proto/renderproto_X11R7.0-0.9.2.bb
deleted file mode 100644
index 881eed5240..0000000000
--- a/packages/xorg-proto/renderproto_X11R7.0-0.9.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "renderext"
diff --git a/packages/xorg-proto/resourceproto_1.0.2.bb b/packages/xorg-proto/resourceproto_1.0.2.bb
new file mode 100644
index 0000000000..1fb8aa7f12
--- /dev/null
+++ b/packages/xorg-proto/resourceproto_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "resourceext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/resourceproto_X11R7.0-1.0.2.bb b/packages/xorg-proto/resourceproto_X11R7.0-1.0.2.bb
deleted file mode 100644
index 231eb0b37f..0000000000
--- a/packages/xorg-proto/resourceproto_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "resourceext"
diff --git a/packages/xorg-proto/scrnsaverproto_1.1.0.bb b/packages/xorg-proto/scrnsaverproto_1.1.0.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/scrnsaverproto_1.1.0.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/scrnsaverproto_X11R7.0-1.0.2.bb b/packages/xorg-proto/scrnsaverproto_X11R7.0-1.0.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/scrnsaverproto_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/scrnsaverproto_X11R7.1-1.1.0.bb b/packages/xorg-proto/scrnsaverproto_X11R7.1-1.1.0.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/scrnsaverproto_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/trapproto_3.4.3.bb b/packages/xorg-proto/trapproto_3.4.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/trapproto_3.4.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/trapproto_X11R7.0-3.4.3.bb b/packages/xorg-proto/trapproto_X11R7.0-3.4.3.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/trapproto_X11R7.0-3.4.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/videoproto_2.2.2.bb b/packages/xorg-proto/videoproto_2.2.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/videoproto_2.2.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/videoproto_X11R7.0-2.2.2.bb b/packages/xorg-proto/videoproto_X11R7.0-2.2.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/videoproto_X11R7.0-2.2.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/windowswmproto_1.0.3.bb b/packages/xorg-proto/windowswmproto_1.0.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/windowswmproto_1.0.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/windowswmproto_X11R7.0-1.0.3.bb b/packages/xorg-proto/windowswmproto_X11R7.0-1.0.3.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/windowswmproto_X11R7.0-1.0.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xcmiscproto-native_1.1.2.bb b/packages/xorg-proto/xcmiscproto-native_1.1.2.bb
new file mode 100644
index 0000000000..417a2aaf13
--- /dev/null
+++ b/packages/xorg-proto/xcmiscproto-native_1.1.2.bb
@@ -0,0 +1,7 @@
+require xcmiscproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "xcmiscproto"
+
+inherit native
diff --git a/packages/xorg-proto/xcmiscproto-native_X11R7.0-1.1.2.bb b/packages/xorg-proto/xcmiscproto-native_X11R7.0-1.1.2.bb
deleted file mode 100644
index 1ccfc89032..0000000000
--- a/packages/xorg-proto/xcmiscproto-native_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/xcmiscproto-${PV}.tar.bz2"
-S = "${WORKDIR}/xcmiscproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/xcmiscproto_1.1.2.bb b/packages/xorg-proto/xcmiscproto_1.1.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xcmiscproto_1.1.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xcmiscproto_X11R7.0-1.1.2.bb b/packages/xorg-proto/xcmiscproto_X11R7.0-1.1.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xcmiscproto_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xextproto-native_7.0.2.bb b/packages/xorg-proto/xextproto-native_7.0.2.bb
new file mode 100644
index 0000000000..ff2bc4ffd3
--- /dev/null
+++ b/packages/xorg-proto/xextproto-native_7.0.2.bb
@@ -0,0 +1,7 @@
+require xextproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "xextproto"
+
+inherit native
diff --git a/packages/xorg-proto/xextproto-native_X11R7.0-7.0.2.bb b/packages/xorg-proto/xextproto-native_X11R7.0-7.0.2.bb
deleted file mode 100644
index 50d6c5b2e9..0000000000
--- a/packages/xorg-proto/xextproto-native_X11R7.0-7.0.2.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/protto/xextproto-${PV}.tar.bz2"
-S = "${WORKDIR}/xextproto-${PV}"
-
-inherit native autotools pkgconfig
-
-PROVIDES = "xextensions-native"
diff --git a/packages/xorg-proto/xextproto_7.0.2.bb b/packages/xorg-proto/xextproto_7.0.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xextproto_7.0.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xextproto_X11R7.0-7.0.2.bb b/packages/xorg-proto/xextproto_X11R7.0-7.0.2.bb
deleted file mode 100644
index 3b35a020e4..0000000000
--- a/packages/xorg-proto/xextproto_X11R7.0-7.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-PROVIDES = "xextensions"
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xf86bigfontproto-native_1.1.2.bb b/packages/xorg-proto/xf86bigfontproto-native_1.1.2.bb
new file mode 100644
index 0000000000..b0ac594997
--- /dev/null
+++ b/packages/xorg-proto/xf86bigfontproto-native_1.1.2.bb
@@ -0,0 +1,7 @@
+require xf86bigfontproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "xf86bigfontproto"
+
+inherit native
diff --git a/packages/xorg-proto/xf86bigfontproto-native_X11R7.0-1.1.2.bb b/packages/xorg-proto/xf86bigfontproto-native_X11R7.0-1.1.2.bb
deleted file mode 100644
index e37d738633..0000000000
--- a/packages/xorg-proto/xf86bigfontproto-native_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/xf86bigfontproto-${PV}.tar.bz2"
-S = "${WORKDIR}/xf86bigfontproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/xf86bigfontproto_1.1.2.bb b/packages/xorg-proto/xf86bigfontproto_1.1.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xf86bigfontproto_1.1.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86bigfontproto_X11R7.0-1.1.2.bb b/packages/xorg-proto/xf86bigfontproto_X11R7.0-1.1.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xf86bigfontproto_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xf86dgaproto_2.0.2.bb b/packages/xorg-proto/xf86dgaproto_2.0.2.bb
new file mode 100644
index 0000000000..2e0e734858
--- /dev/null
+++ b/packages/xorg-proto/xf86dgaproto_2.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "xxf86dgaext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86dgaproto_X11R7.0-2.0.2.bb b/packages/xorg-proto/xf86dgaproto_X11R7.0-2.0.2.bb
deleted file mode 100644
index 18207c0307..0000000000
--- a/packages/xorg-proto/xf86dgaproto_X11R7.0-2.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "xxf86dgaext"
diff --git a/packages/xorg-proto/xf86driproto_2.0.3.bb b/packages/xorg-proto/xf86driproto_2.0.3.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xf86driproto_2.0.3.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86driproto_X11R7.0-2.0.3.bb b/packages/xorg-proto/xf86driproto_X11R7.0-2.0.3.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xf86driproto_X11R7.0-2.0.3.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xf86miscproto_0.9.2.bb b/packages/xorg-proto/xf86miscproto_0.9.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xf86miscproto_0.9.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86miscproto_X11R7.0-0.9.2.bb b/packages/xorg-proto/xf86miscproto_X11R7.0-0.9.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xf86miscproto_X11R7.0-0.9.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xf86rushproto_1.1.2.bb b/packages/xorg-proto/xf86rushproto_1.1.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xf86rushproto_1.1.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86rushproto_X11R7.0-1.1.2.bb b/packages/xorg-proto/xf86rushproto_X11R7.0-1.1.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xf86rushproto_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xf86vidmodeproto_2.2.2.bb b/packages/xorg-proto/xf86vidmodeproto_2.2.2.bb
new file mode 100644
index 0000000000..946be11407
--- /dev/null
+++ b/packages/xorg-proto/xf86vidmodeproto_2.2.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+CONFLICTS = "xxf86vmext"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xf86vidmodeproto_X11R7.0-2.2.2.bb b/packages/xorg-proto/xf86vidmodeproto_X11R7.0-2.2.2.bb
deleted file mode 100644
index d3acf1f590..0000000000
--- a/packages/xorg-proto/xf86vidmodeproto_X11R7.0-2.2.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-CONFLICTS = "xxf86vmext"
diff --git a/packages/xorg-proto/xineramaproto_1.1.2.bb b/packages/xorg-proto/xineramaproto_1.1.2.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xineramaproto_1.1.2.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xineramaproto_X11R7.0-1.1.2.bb b/packages/xorg-proto/xineramaproto_X11R7.0-1.1.2.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xineramaproto_X11R7.0-1.1.2.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xorg-proto-common.inc b/packages/xorg-proto/xorg-proto-common.inc
index 017e8755a8..248bbc7e11 100644
--- a/packages/xorg-proto/xorg-proto-common.inc
+++ b/packages/xorg-proto/xorg-proto-common.inc
@@ -1,15 +1,16 @@
-DESCRIPTION = "X protocol headers"
+DESCRIPTION = "X protocol headers: ${XORG_PN}"
HOMEPAGE = "http://www.x.org"
SECTION = "x11/libs"
LICENSE = "MIT-X"
-#DEPENDS = ""
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/proto/${XORG_PN}-${PV}.tar.bz2"
+
+SRC_URI = "${XORG_MIRROR}/individual/proto/${XORG_PN}-${PV}.tar.bz2"
+
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
do_stage() {
- autotools_stage_all
+ autotools_stage_all
}
diff --git a/packages/xorg-proto/xproto-native_7.0.10.bb b/packages/xorg-proto/xproto-native_7.0.10.bb
new file mode 100644
index 0000000000..88ed38e93c
--- /dev/null
+++ b/packages/xorg-proto/xproto-native_7.0.10.bb
@@ -0,0 +1,7 @@
+require xproto_${PV}.bb
+
+PR = "r1"
+
+XORG_PN = "xproto"
+
+inherit native
diff --git a/packages/xorg-proto/xproto-native_X11R7.0-7.0.4.bb b/packages/xorg-proto/xproto-native_X11R7.0-7.0.4.bb
deleted file mode 100644
index 34a74b77e8..0000000000
--- a/packages/xorg-proto/xproto-native_X11R7.0-7.0.4.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/proto/xproto-${PV}.tar.bz2"
-S = "${WORKDIR}/xproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/xproto-native_X11R7.1-7.0.5.bb b/packages/xorg-proto/xproto-native_X11R7.1-7.0.5.bb
deleted file mode 100644
index 80ddcd7e6e..0000000000
--- a/packages/xorg-proto/xproto-native_X11R7.1-7.0.5.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-DESCRIPTION = "X protocol headers"
-SECTION = "x11/libs"
-LICENSE= "MIT-X"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/proto/xproto-${PV}.tar.bz2"
-S = "${WORKDIR}/xproto-${PV}"
-
-inherit native autotools pkgconfig
diff --git a/packages/xorg-proto/xproto_7.0.10.bb b/packages/xorg-proto/xproto_7.0.10.bb
new file mode 100644
index 0000000000..9f09fff7b7
--- /dev/null
+++ b/packages/xorg-proto/xproto_7.0.10.bb
@@ -0,0 +1,4 @@
+require xorg-proto-common.inc
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xproto_X11R7.0-7.0.4.bb b/packages/xorg-proto/xproto_X11R7.0-7.0.4.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xproto_X11R7.0-7.0.4.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xproto_X11R7.1-7.0.5.bb b/packages/xorg-proto/xproto_X11R7.1-7.0.5.bb
deleted file mode 100644
index d7cd7c8c86..0000000000
--- a/packages/xorg-proto/xproto_X11R7.1-7.0.5.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require xorg-proto-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xproto_X11R7.1-7.0.8.bb b/packages/xorg-proto/xproto_X11R7.1-7.0.8.bb
deleted file mode 100644
index a901c5b61b..0000000000
--- a/packages/xorg-proto/xproto_X11R7.1-7.0.8.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-proto-common.inc
-
-XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/development/X11R7.2-RC3/proto/${XORG_PN}-7.0.9.tar.gz"
-S = "${WORKDIR}/${XORG_PN}-7.0.9"
-
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-proto/xproxymanagementprotocol_1.0.2.bb b/packages/xorg-proto/xproxymanagementprotocol_1.0.2.bb
new file mode 100644
index 0000000000..9c3d9efa71
--- /dev/null
+++ b/packages/xorg-proto/xproxymanagementprotocol_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-proto-common.inc
+
+PROVIDES="xproxymngproto"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-proto/xproxymanagementprotocol_X11R7.0-1.0.2.bb b/packages/xorg-proto/xproxymanagementprotocol_X11R7.0-1.0.2.bb
deleted file mode 100644
index b265a53346..0000000000
--- a/packages/xorg-proto/xproxymanagementprotocol_X11R7.0-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-proto-common.inc
-
-PROVIDES="xproxymngproto"
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-util/gccmakedep_1.0.2.bb b/packages/xorg-util/gccmakedep_1.0.2.bb
new file mode 100644
index 0000000000..3abfa037a2
--- /dev/null
+++ b/packages/xorg-util/gccmakedep_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "create dependencies in makefiles using 'gcc -M'"
+RDEPENDS = "gcc"
+
+PR = "r2"
+PE = "1"
diff --git a/packages/xorg-util/gccmakedep_X11R7.0-1.0.1.bb b/packages/xorg-util/gccmakedep_X11R7.0-1.0.1.bb
deleted file mode 100644
index f9dc1f3d3e..0000000000
--- a/packages/xorg-util/gccmakedep_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-util/gccmakedep_X11R7.1-1.0.2.bb b/packages/xorg-util/gccmakedep_X11R7.1-1.0.2.bb
deleted file mode 100644
index f9dc1f3d3e..0000000000
--- a/packages/xorg-util/gccmakedep_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-util/imake_1.0.2.bb b/packages/xorg-util/imake_1.0.2.bb
new file mode 100644
index 0000000000..deeb4477a1
--- /dev/null
+++ b/packages/xorg-util/imake_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "C preprocessor interface to the make utility"
+RDEPENDS = "perl xproto"
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-util/imake_X11R7.0-1.0.1.bb b/packages/xorg-util/imake_X11R7.0-1.0.1.bb
deleted file mode 100644
index b2b11cf038..0000000000
--- a/packages/xorg-util/imake_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "imake utility"
-
-DEPENDS += " perl xproto"
-
diff --git a/packages/xorg-util/imake_X11R7.1-1.0.2.bb b/packages/xorg-util/imake_X11R7.1-1.0.2.bb
deleted file mode 100644
index b2b11cf038..0000000000
--- a/packages/xorg-util/imake_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "imake utility"
-
-DEPENDS += " perl xproto"
-
diff --git a/packages/xorg-util/lndir_1.0.1.bb b/packages/xorg-util/lndir_1.0.1.bb
new file mode 100644
index 0000000000..34309a6487
--- /dev/null
+++ b/packages/xorg-util/lndir_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "create a shadow directory of symbolic links to another directory tree"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-util/lndir_X11R7.0-1.0.1.bb b/packages/xorg-util/lndir_X11R7.0-1.0.1.bb
deleted file mode 100644
index 09a7787ee3..0000000000
--- a/packages/xorg-util/lndir_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto"
-
diff --git a/packages/xorg-util/makedepend-native_1.0.1.bb b/packages/xorg-util/makedepend-native_1.0.1.bb
new file mode 100644
index 0000000000..7fbe81a4a3
--- /dev/null
+++ b/packages/xorg-util/makedepend-native_1.0.1.bb
@@ -0,0 +1,9 @@
+require xorg-util-common.inc
+inherit native
+
+DESCRIPTION = "create dependencies in makefiles"
+DEPENDS = "xproto-native"
+PR = "r1"
+PE = "1"
+
+XORG_PN = "makedepend"
diff --git a/packages/xorg-util/makedepend-native_X11R7.0-1.0.0.bb b/packages/xorg-util/makedepend-native_X11R7.0-1.0.0.bb
deleted file mode 100644
index 1b8476be47..0000000000
--- a/packages/xorg-util/makedepend-native_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-util-common.inc
-inherit native
-
-#DESCRIPTION = ""
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/util/makedepend-${PV}.tar.bz2"
-S="${WORKDIR}/makedepend-${PV}"
-
-DEPENDS += " util-macros-native xproto-native"
-
diff --git a/packages/xorg-util/makedepend_1.0.1.bb b/packages/xorg-util/makedepend_1.0.1.bb
new file mode 100644
index 0000000000..3605b51d49
--- /dev/null
+++ b/packages/xorg-util/makedepend_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "create dependencies in makefiles"
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-util/makedepend_X11R7.0-1.0.0.bb b/packages/xorg-util/makedepend_X11R7.0-1.0.0.bb
deleted file mode 100644
index 09a7787ee3..0000000000
--- a/packages/xorg-util/makedepend_X11R7.0-1.0.0.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-DEPENDS += " xproto"
-
diff --git a/packages/xorg-util/util-macros-native_1.1.5.bb b/packages/xorg-util/util-macros-native_1.1.5.bb
new file mode 100644
index 0000000000..c327f3f54e
--- /dev/null
+++ b/packages/xorg-util/util-macros-native_1.1.5.bb
@@ -0,0 +1,9 @@
+require util-macros_${PV}.bb
+
+inherit native
+
+PR = "r1"
+
+XORG_PN = "util-macros"
+
+S = "${WORKDIR}/util-macros-1.1.5"
diff --git a/packages/xorg-util/util-macros-native_X11R7.0-1.0.1.bb b/packages/xorg-util/util-macros-native_X11R7.0-1.0.1.bb
deleted file mode 100644
index dcfc7ebaee..0000000000
--- a/packages/xorg-util/util-macros-native_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-DESCRIPTION = "X autotools macros"
-SECTION = "x11/libs"
-LICENSE= "Xorg"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.0/src/util/util-macros-${PV}.tar.bz2"
-S = "${WORKDIR}/util-macros-${PV}"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-util/util-macros-native_X11R7.1-1.0.2.bb b/packages/xorg-util/util-macros-native_X11R7.1-1.0.2.bb
deleted file mode 100644
index 239750bb80..0000000000
--- a/packages/xorg-util/util-macros-native_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-DESCRIPTION = "X autotools macros"
-SECTION = "x11/libs"
-LICENSE= "Xorg"
-
-SRC_URI = "${XORG_MIRROR}/X11R7.1/src/util/util-macros-${PV}.tar.bz2"
-S = "${WORKDIR}/util-macros-${PV}"
-
-inherit native autotools pkgconfig
-
diff --git a/packages/xorg-util/util-macros_1.1.5.bb b/packages/xorg-util/util-macros_1.1.5.bb
new file mode 100644
index 0000000000..22634bffd2
--- /dev/null
+++ b/packages/xorg-util/util-macros_1.1.5.bb
@@ -0,0 +1,7 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X autotools macros"
+PR = "r1"
+PE = "1"
+
+SRC_URI += "file://unbreak_cross_compile.patch;patch=1"
diff --git a/packages/xorg-util/util-macros_X11R7.0-1.0.1.bb b/packages/xorg-util/util-macros_X11R7.0-1.0.1.bb
deleted file mode 100644
index 4e2ddece48..0000000000
--- a/packages/xorg-util/util-macros_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-util/util-macros_X11R7.1-1.0.2.bb b/packages/xorg-util/util-macros_X11R7.1-1.0.2.bb
deleted file mode 100644
index 4e2ddece48..0000000000
--- a/packages/xorg-util/util-macros_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-
-#DEPENDS += " "
-
diff --git a/packages/xorg-util/util-macros_X11R7.1-1.1.5.bb b/packages/xorg-util/util-macros_X11R7.1-1.1.5.bb
deleted file mode 100644
index 06dd0a5d73..0000000000
--- a/packages/xorg-util/util-macros_X11R7.1-1.1.5.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require xorg-util-common.inc
-
-DESCRIPTION = "X autotools macros"
-
-PR = "r1"
-
-SRC_URI = "${XORG_MIRROR}/individual/util/${XORG_PN}-1.1.5.tar.gz \
- file://unbreak_cross_compile.patch;patch=1 "
-S = "${WORKDIR}/${XORG_PN}-1.1.5"
-
diff --git a/packages/xorg-util/xorg-cf-files_1.0.2.bb b/packages/xorg-util/xorg-cf-files_1.0.2.bb
new file mode 100644
index 0000000000..7c3fb8d7e9
--- /dev/null
+++ b/packages/xorg-util/xorg-cf-files_1.0.2.bb
@@ -0,0 +1,8 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X Window System CF files"
+
+PR = "r1"
+PE = "1"
+
+FILES_${PN} += " /usr/lib/X11/config"
diff --git a/packages/xorg-util/xorg-cf-files_X11R7.0-1.0.1.bb b/packages/xorg-util/xorg-cf-files_X11R7.0-1.0.1.bb
deleted file mode 100644
index f1b6b0d4f7..0000000000
--- a/packages/xorg-util/xorg-cf-files_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-FILES_${PN} += " /usr/lib/X11/config"
diff --git a/packages/xorg-util/xorg-cf-files_X11R7.1-1.0.2.bb b/packages/xorg-util/xorg-cf-files_X11R7.1-1.0.2.bb
deleted file mode 100644
index f1b6b0d4f7..0000000000
--- a/packages/xorg-util/xorg-cf-files_X11R7.1-1.0.2.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require xorg-util-common.inc
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-FILES_${PN} += " /usr/lib/X11/config"
diff --git a/packages/xorg-util/xorg-util-common.inc b/packages/xorg-util/xorg-util-common.inc
index f6e9c65b78..56aae30725 100644
--- a/packages/xorg-util/xorg-util-common.inc
+++ b/packages/xorg-util/xorg-util-common.inc
@@ -2,13 +2,14 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/utils"
LICENSE = "MIT-X"
-#DEPENDS = ""
XORG_PN = "${PN}"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/util/${XORG_PN}-${PV}.tar.bz2"
+
+SRC_URI = "${XORG_MIRROR}/individual/util/${XORG_PN}-${PV}.tar.gz"
+
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
do_stage() {
- autotools_stage_all
+ autotools_stage_all
}
diff --git a/packages/xorg-xserver/xorg-xserver-common.inc b/packages/xorg-xserver/xorg-xserver-common.inc
index 3aa3aaf3c6..b45f3eeac6 100644
--- a/packages/xorg-xserver/xorg-xserver-common.inc
+++ b/packages/xorg-xserver/xorg-xserver-common.inc
@@ -2,44 +2,34 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/base"
LICENSE = "MIT-X"
-RPROVIDES_${PN} = "virtual/xserver"
PROVIDES = "virtual/xserver"
-MESA_VER ?= "6.5"
-
-DEPENDS = "fontconfig freetype flex-native lbxutil kbproto \
+DEPENDS = "fontconfig freetype flex-native lbxutil kbproto \
xf86driproto drm glproto randrproto renderproto fixesproto damageproto \
xcmiscproto xextproto xproto xf86miscproto xf86vidmodeproto xf86bigfontproto \
scrnsaverproto bigreqsproto resourceproto fontsproto inputproto \
xf86dgaproto videoproto compositeproto trapproto recordproto dmxproto \
resourceproto xineramaproto xtrans evieext libxkbfile libxfont libxau \
libfontenc libxdmcp libxxf86vm libxaw libxmu libxt libxpm libxext libx11 \
-libxkbui libxxf86misc libxi libdmx libxtst libxres mesa mkfontscale-native"
+libxkbui libxxf86misc libxi libdmx libxtst libxres mesa"
-RDEPENDS_${PN} = "rgb"
+REPENDS="rgb"
XORG_PN = "xorg-server"
-SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/xserver/${XORG_PN}-${PV}.tar.bz2 \
- ${SOURCEFORGE_MIRROR}/mesa3d/MesaLib-${MESA_VER}.tar.bz2 \
+SRC_URI = "${XORG_MIRROR}/${@bb.data.getVar('PV', d, 1)[0:7]}/src/xserver/${XORG_PN}-${PV}.tar.gz \
file://xorg.conf"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
-EXTRA_OECONF = "--disable-builddocs --with-mesa-source=${WORKDIR}/Mesa-${MESA_VER}"
-
-PACKAGES =+ "${PN}-xprint ${PN}-xvfb ${PN}-utils ${PN}-xnest ${PN}-dmx"
+PACKAGES =+ "${PN}-xprint ${PN}-xvfb ${PN}-utils"
-FILES_${PN}-xprint = "${libdir}/X11/xserver/*/print ${bindir}/Xprt"
+FILES_${PN}-xprint = "${libdir}/X11/xserver/*/print"
FILES_${PN}-xvfb = "${bindir}/Xvfb"
-FILES_${PN}-xnest = "${bindir}/Xnest"
-FILES_${PN}-dmx = "${bindir}/Xdmx ${bindir}/dmx* ${bindir}/xdmxconfig ${bindir}/xdmx ${bindir}/vdltodmx"
FILES_${PN}-utils = "${bindir}/scanpci ${bindir}/pcitweak ${bindir}/ioport ${bindir}/in[bwl] ${bindir}/out[bwl] ${bindir}/mmap[rw] ${bindir}/gtf ${bindir}/getconfig ${bindir}/getconfig.pl"
-FILES_${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/xserver/SecurityPolicy ${libdir}/xorg/modules/*.so ${libdir}/xorg/modules/*/*.so /etc/X11"
+FILES_${PN} = "${bindir} ${libdir}/X11/Options ${libdir}/X11/Cards ${libdir}/X11/getconfig ${libdir}/X11/etc ${libdir}/xserver/SecurityPolicy ${libdir}/modules ${libdir}/xorg/modules /etc/X11 "
FILES_${PN}-doc += "${libdir}/X11/doc /usr/share/X11/xkb/compiled/README.compiled"
-FILES_${PN}-dbg += "${libdir}/xorg/modules/.debug ${libdir}/xorg/modules/*/.debug"
-FILES_${PN}-dev += "${libdir}/xorg/modules/*.la ${libdir}/xorg/modules/*/*.la"
do_stage() {
autotools_stage_all
@@ -47,5 +37,5 @@ do_stage() {
do_install_append () {
install -d ${D}/etc/X11
- install -m 0644 ${WORKDIR}/xorg.conf ${D}/etc/X11/
+ install -m0644 ${WORKDIR}/xorg.conf ${D}/etc/X11/
}
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/.mtn2git_empty b/packages/xorg-xserver/xserver-kdrive-1.2.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/.mtn2git_empty
diff --git a/packages/xorg-xserver/xserver-kdrive/disable-xf86-dga-xorgcfg-git.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/disable-xf86-dga-xorgcfg.patch
index 4b7e41e3e9..4b7e41e3e9 100644
--- a/packages/xorg-xserver/xserver-kdrive/disable-xf86-dga-xorgcfg-git.patch
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/disable-xf86-dga-xorgcfg.patch
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-epson.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-epson.patch
new file mode 100644
index 0000000000..8ec3a37c78
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-epson.patch
@@ -0,0 +1,11 @@
+Index: xorg-server-1.2.0/hw/kdrive/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/hw/kdrive/Makefile.am 2007-03-28 17:11:38.000000000 +0200
++++ xorg-server-1.2.0/hw/kdrive/Makefile.am 2007-03-28 17:12:28.000000000 +0200
+@@ -1,5 +1,5 @@
+ if KDRIVEFBDEV
+-FBDEV_SUBDIRS = fbdev
++FBDEV_SUBDIRS = fbdev epson
+ endif
+
+ if KDRIVEIMAGEON
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-tslib.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-tslib.patch
new file mode 100644
index 0000000000..9a59530ed3
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-tslib.patch
@@ -0,0 +1,12 @@
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-03-29 13:28:10.000000000 +0200
++++ xorg-server-1.2.0/configure.ac 2007-03-29 13:28:35.000000000 +0200
+@@ -1517,6 +1517,7 @@
+ AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
+ fi
+ AC_DEFINE(TSLIB, 1, [Have tslib support])
++ AC_DEFINE(TOUCHSCREEN, 1, [Have touchscreen support])
+ fi
+
+ # damage shadow extension glx (NOTYET) fb mi
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-xcalibrate.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-xcalibrate.patch
new file mode 100644
index 0000000000..11931f83d6
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/enable-xcalibrate.patch
@@ -0,0 +1,51 @@
+Index: xorg-server-1.2.0/mi/miinitext.c
+===================================================================
+--- xorg-server-1.2.0.orig/mi/miinitext.c 2007-01-23 06:39:17.000000000 +0100
++++ xorg-server-1.2.0/mi/miinitext.c 2007-03-30 11:28:44.000000000 +0200
+@@ -372,6 +372,9 @@
+ #ifdef DMXEXT
+ extern void DMXExtensionInit(INITARGS);
+ #endif
++#ifdef XCALIBRATE
++extern void XCalibrateExtensionInit(INITARGS);
++#endif
+ #ifdef XEVIE
+ extern void XevieExtensionInit(INITARGS);
+ #endif
+@@ -663,6 +666,9 @@
+ #ifdef DAMAGE
+ if (!noDamageExtension) DamageExtensionInit();
+ #endif
++#ifdef XCALIBRATE
++ XCalibrateExtensionInit ();
++#endif
+ }
+
+ void
+Index: xorg-server-1.2.0/include/kdrive-config.h.in
+===================================================================
+--- xorg-server-1.2.0.orig/include/kdrive-config.h.in 2007-03-30 11:31:07.000000000 +0200
++++ xorg-server-1.2.0/include/kdrive-config.h.in 2007-03-30 11:34:09.000000000 +0200
+@@ -22,6 +22,9 @@
+ /* Support tslib touchscreen abstraction library */
+ #undef TSLIB
+
++/* Build XCalibrate extension */
++#undef XCALIBRATE
++
+ /* Verbose debugging output hilarity */
+ #undef DEBUG
+
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-03-30 12:47:25.000000000 +0200
++++ xorg-server-1.2.0/configure.ac 2007-03-30 12:39:01.000000000 +0200
+@@ -1540,7 +1540,7 @@
+ ;;
+ esac
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+- KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_OS_LIB $KDRIVE_PURE_LIBS $KDRIVE_STUB_LIB $TSLIB_LIBS"
++ KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_PURE_LIBS $KDRIVE_OS_LIB $KDRIVE_STUB_LIB $TSLIB_LIBS"
+
+ # check if we can build Xephyr
+ PKG_CHECK_MODULES(XEPHYR, x11 xext xfont xau xdmcp, [xephyr="yes"], [xephyr="no"])
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/fbcompositesrc8888revnpx0565.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/fbcompositesrc8888revnpx0565.patch
new file mode 100644
index 0000000000..e128123419
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/fbcompositesrc8888revnpx0565.patch
@@ -0,0 +1,194 @@
+Hello all,
+
+The attached patch provides a fast path for the case of performing
+a8b8g8r8 non-premultiplied (aka the GdkPixbuf format) OVER r5g6b5 via
+a new function called fbCompositeSrc_8888RevNPx0565. Basically, it's
+just an adaptation of the previous work I talked about here:
+
+http://lists.freedesktop.org/archives/xorg/2007-April/023763.html
+
+On my Nokia N800, I get a 3.4x speedup when running this little gdk
+benchmark program:
+
+http://amelang.net/composite_pixbuf.c
+
+The source file is kinda large (4.5MB) due to an embedded GdkPixbuf.
+
+Dan Amelang
+-------------- next part --------------
+From 63bdc0476c09669cabccffe4b35f8f56aff965a5 Mon Sep 17 00:00:00 2001
+From: Dan Amelang <dan at amelang.net>
+Date: Mon, 30 Apr 2007 03:22:52 -0700
+Subject: [PATCH] Implement fbCompositeSrc_8888RevNPx0565
+
+This provides a fast path for the common case of compositing GdkPixmaps
+with r5g6b5 images. On a simple GDK benchmark application, I get a
+3.4x increase in performance on the Nokia N800 (which currently is
+running xserver 1.1.99.3).
+
+All of the optimizations used here are already explained in the following
+post to the Xorg mailing list:
+
+ http://lists.freedesktop.org/archives/xorg/2007-April/023763.html
+---
+ fb/fbpict.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 139 insertions(+), 0 deletions(-)
+
+diff --git a/fb/fbpict.c b/fb/fbpict.c
+index a735967..3bd57fb 100644
+--- a/fb/fbpict.c
++++ b/fb/fbpict.c
+@@ -781,6 +781,143 @@ fbCompositeSrc_8888x0565 (CARD8 op,
+ fbFinishAccess (pSrc->pDrawable);
+ }
+
++
++#define cvt8888Revto0565(s) ((((s) >> 19) & 0x001f) | \
++ (((s) >> 5) & 0x07e0) | \
++ (((s) << 8) & 0xf800))
++
++#define FbOverU_8888RevNPx565(s, d) \
++ \
++ /* Extract alpha */ \
++ s_a = (s) >> 24; \
++ \
++ /* Extract r8g8b8 color channels */ \
++ s_r = ( (s) & 0xff); \
++ s_g = (((s) >> 8) & 0xff); \
++ s_b = (((s) >> 16) & 0xff); \
++ \
++ /* Extract r5g6b5 color channels */ \
++ d_r = ((d) >> 8) & 0xf8; \
++ d_g = ((d) >> 3) & 0xfc; \
++ d_b = ((d) << 3) & 0xf8; \
++ \
++ /* Use the higher bits of the channel to fill out the bottom */ \
++ d_r |= (d_r >> 5); \
++ d_g |= (d_g >> 6); \
++ d_b |= (d_b >> 5); \
++ \
++ /* Blend */ \
++ d_r = (s_r - d_r) * s_a + (d_r << 8); \
++ d_g = (s_g - d_g) * s_a + (d_g << 8); \
++ d_b = (s_b - d_b) * s_a + (d_b << 8); \
++ \
++ /* Pack result as r5g6b5 */ \
++ (d) = (d_r & 0xf800) | ((d_g & 0xfc00) >> 5) | (d_b >> 11)
++
++void
++fbCompositeSrc_8888RevNPx0565 (FbComposeData *params)
++{
++ CARD16 *dstLine, *dst;
++ CARD32 *srcLine, *src;
++ FbStride dstStride, srcStride;
++ int w, h;
++
++ fbComposeGetStart (params->src, params->xSrc, params->ySrc, CARD32,
++ srcStride, srcLine, 1);
++ fbComposeGetStart (params->dest, params->xDest, params->yDest, CARD16,
++ dstStride, dstLine, 1);
++ h = params->height;
++
++ while (h--)
++ {
++ CARD32 s1, s2, s3, s4;
++ int d_r, d_g, d_b, s_r, s_g, s_b, s_a;
++ CARD32 *dst_2px_wide;
++
++ src = srcLine;
++ srcLine += srcStride;
++ dst_2px_wide = (CARD32 *) dstLine;
++ dstLine += dstStride;
++ w = params->width - 4;
++
++ while (w >= 0)
++ {
++ s1 = *src;
++ s2 = *(src + 1);
++ s3 = *(src + 2);
++ s4 = *(src + 3);
++
++ w -= 4;
++ src += 4;
++
++ /* Check if the next 4 pixels are opaque */
++ if ((s1 & s2 & s3 & s4) > 0xfeffffff)
++ {
++ /* In this case, we just perform a SOURCE for all 4 pixels */
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++ *dst_2px_wide++ = (cvt8888Revto0565 (s1) << 16) |
++ cvt8888Revto0565 (s2);
++ *dst_2px_wide++ = (cvt8888Revto0565 (s3) << 16) |
++ cvt8888Revto0565 (s4);
++#else
++ *dst_2px_wide++ = cvt8888Revto0565 (s1) |
++ (cvt8888Revto0565 (s2) << 16);
++ *dst_2px_wide++ = cvt8888Revto0565 (s3) |
++ (cvt8888Revto0565 (s4) << 16);
++#endif
++ }
++ /* Next, check if the next 4 pixels have any alpha in them at all */
++ else if ((s1 | s2 | s3 | s4) > 0x00ffffff)
++ {
++ /* In which case, we perform OVER on each one of them */
++ CARD32 d1, d2, d3, d4;
++
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++ d1 = (*dst_2px_wide >> 16);
++ d2 = (*dst_2px_wide & 0xffff);
++ FbOverU_8888RevNPx565 (s1, d1);
++ FbOverU_8888RevNPx565 (s2, d2);
++ *dst_2px_wide++ = (d1 << 16) | d2;
++#else
++ d2 = (*dst_2px_wide >> 16);
++ d1 = (*dst_2px_wide & 0xffff);
++ FbOverU_8888RevNPx565 (s1, d1);
++ FbOverU_8888RevNPx565 (s2, d2);
++ *dst_2px_wide++ = d1 | (d2 << 16);
++#endif
++
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++ d3 = (*dst_2px_wide >> 16);
++ d4 = (*dst_2px_wide & 0xffff);
++ FbOverU_8888RevNPx565 (s3, d3);
++ FbOverU_8888RevNPx565 (s4, d4);
++ *dst_2px_wide++ = (d3 << 16) | d4;
++#else
++ d4 = (*dst_2px_wide >> 16);
++ d3 = (*dst_2px_wide & 0xffff);
++ FbOverU_8888RevNPx565 (s3, d3);
++ FbOverU_8888RevNPx565 (s4, d4);
++ *dst_2px_wide++ = d3 | (d4 << 16);
++#endif
++ }
++ else
++ {
++ /* Do nothing, since the source pixels are all transparent */
++ dst_2px_wide += 2;
++ }
++ }
++
++ /* Deal with left over pixels */
++ for (dst = (CARD16 *) dst_2px_wide; w > -4; w--)
++ {
++ CARD32 d = *dst;
++ CARD32 s = *src++;
++ FbOverU_8888RevNPx565 (s, d);
++ *dst++ = d;
++ }
++ }
++}
++
+ void
+ fbCompositeSrcAdd_8000x8000 (CARD8 op,
+ PicturePtr pSrc,
+@@ -1669,7 +1806,9 @@ fbComposite (CARD8 op,
+ #ifdef USE_MMX
+ if (fbHaveMMX())
+ func = fbCompositeSrc_8888RevNPx0565mmx;
++ else
+ #endif
++ func = fbCompositeSrc_8888RevNPx0565;
+ break;
+ default:
+ break;
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch
new file mode 100644
index 0000000000..b143eedff3
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/kdrive-imageon.patch
@@ -0,0 +1,9079 @@
+# Author: Manuel Teira <manuel.teira@telefonica.net> (sirfred in #oe)
+# Description: New driver for the Imageon ATI Card. Implementing:
+# -Hardware solid fills
+# -Hardware bitblt
+# -Hardware cursors
+# -XV Extension
+# -Internal and External Imageon offscreen memory support
+# -Hardware RandR rotation (without using a shadow framebuffer)
+# -Support for RandR mode changing
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-06-17 10:49:00.000000000 +0200
++++ xorg-server-1.2.0/configure.ac 2007-06-17 10:49:02.000000000 +0200
+@@ -444,6 +444,7 @@
+ AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
+ AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
+ AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
++AC_ARG_ENABLE(imageon, AS_HELP_STRING([--enable-imageon], [Build the kdrive Ximageon server (default: no)]), [KDRIVEIMAGEON=$enableval], [KDRIVEIMAGEON=no])
+ dnl xprint
+ AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
+ AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
+@@ -1581,6 +1582,11 @@
+ AC_SUBST([XSDL_INCS])
+
+
++AM_CONDITIONAL(KDRIVEIMAGEON, [test "x$KDRIVEIMAGEON" = xyes])
++if test "x$KDRIVEIMAGEON" = xyes; then
++ AC_DEFINE(KDRIVEIMAGEON, 1, [Build Ximageon server])
++fi
++
+ dnl these only go in xkb-config.h (which is shared by the Xorg and Xnest servers)
+ AC_DEFINE(__XKBDEFRULES__, "xorg", [Default XKB rules])
+ AC_DEFINE_DIR(XKB_BASE_DIRECTORY, XKBPATH, [Path to XKB data])
+@@ -1806,6 +1812,7 @@
+ hw/kdrive/epson/Makefile
+ hw/kdrive/fake/Makefile
+ hw/kdrive/fbdev/Makefile
++hw/kdrive/imageon/Makefile
+ hw/kdrive/i810/Makefile
+ hw/kdrive/linux/Makefile
+ hw/kdrive/mach64/Makefile
+Index: xorg-server-1.2.0/hw/kdrive/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/hw/kdrive/Makefile.am 2007-06-17 10:49:00.000000000 +0200
++++ xorg-server-1.2.0/hw/kdrive/Makefile.am 2007-06-17 11:03:40.000000000 +0200
+@@ -1,24 +1,15 @@
+-if KDRIVEVESA
+-VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+- smi via
+-endif
+-
+ if KDRIVEFBDEV
+-FBDEV_SUBDIRS = fbdev epson
+-endif
+-
+-if XSDLSERVER
+-XSDL_SUBDIRS = sdl
+-endif
+-
+-if XEPHYR
+-XEPHYR_SUBDIRS = ephyr
++FBDEV_SUBDIRS = fbdev
+ endif
+
+ if KDRIVELINUX
+ LINUX_SUBDIRS = linux
+ endif
+
++if KDRIVEIMAGEON
++IMAGEON_SUBDIRS = imageon
++endif
++
+ SUBDIRS = \
+ src \
+ $(LINUX_SUBDIRS) \
+@@ -26,7 +17,7 @@
+ $(FBDEV_SUBDIRS) \
+ $(VESA_SUBDIRS) \
+ $(XEPHYR_SUBDIRS) \
+- fake
++ $(IMAGEON_SUBDIRS)
+
+ DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+ smi via fbdev sdl ephyr src linux fake sis300
+Index: xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/Makefile.am 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,47 @@
++if KDRIVEFBDEV
++FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
++FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
++endif
++
++INCLUDES = \
++ @KDRIVE_INCS@ \
++ $(FBDEV_INCLUDES) \
++ @KDRIVE_CFLAGS@
++
++bin_PROGRAMS = Ximageon
++
++if TSLIB
++TSLIB_FLAG = -lts
++endif
++
++noinst_LIBRARIES = libimageon.a
++
++libimageon_a_SOURCES = \
++ imageon.h \
++ imageon_regs.h \
++ imageon_const.h \
++ imageon.c \
++ imageon_cursor.c \
++ imageon_draw.c \
++ imageon_support.c \
++ imageon_video.c
++
++
++
++Ximageon_SOURCES = \
++ imageon_stub.c
++
++W100_LIBS = \
++ libimageon.a \
++ $(FBDEV_LIBS) \
++ @KDRIVE_LIBS@
++
++Ximageon_LDADD = \
++ $(W100_LIBS) \
++ @XSERVER_LIBS@ \
++ $(TSLIB_FLAG)
++
++
++Ximageon_DEPENDENCIES = \
++ libimageon.a \
++ $(FBDEV_LIBS)
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,606 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++#include "imageon.h"
++#include "imageon_regs.h"
++#include "imageon_support.h"
++
++W100CardEntry w100_cards[] = {
++ {0x1002, 0x5644, 0, "ATI Imageon 3200"},
++ {0x1002, 0x5741, W100XVSupport, "ATI Imageon 100"},
++ {0x1002, 0x5744, 0, "ATI Imageon 3220"},
++ {0, 0, 0, NULL}
++};
++
++W100ModeSpec w100_modes[] = {
++ {800, 600, 16, W100_EXTMEM, FALSE},
++ {640, 480, 16, W100_EXTMEM, FALSE},
++ {320, 240, 16, W100_INTMEM, FALSE},
++ { 0, 0, 0, 0, FALSE}
++};
++
++W100StartupInfo w100StartupInfo;
++
++extern void (*tslib_transform_coords)(long *x, long *y, void *closure);
++extern void *tslib_transform_closure;
++
++static void
++W100Startup(W100CardInfo *w100c)
++{
++ int i;
++ DBG_IMAGEON(("--W100Startup\n"));
++ W100ModeSpec *modes;
++ /* Take the current graphics mode */
++ if (!W100GetFbMode(w100c, &w100StartupInfo.mode)) {
++ ErrorF("(E) Unable to get current mode\n");
++ }
++ w100StartupInfo.randr = W100GetRotation(w100c);
++ w100StartupInfo.portrait = w100StartupInfo.mode.width < w100StartupInfo.mode.height;
++
++ /* Test the valid modes */
++ for (modes = w100_modes; modes->width; modes++) {
++ modes->supported = W100CheckFbMode(w100c, modes);
++ }
++
++ DBG_IMAGEON(("Startup Mode: %dx%d@%d, rot: %d, portrait: %s\n",
++ w100StartupInfo.mode.width,
++ w100StartupInfo.mode.height,
++ w100StartupInfo.mode.bpp,
++ w100StartupInfo.randr,
++ w100StartupInfo.portrait ? "Yes" : "No"));
++
++ /* Tell the kernel to never switch off external memory */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "extmem", "1");
++
++ /* Disable framebuffer accel */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "accel", "0");
++
++ /* Enable fastsysclk */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "fastpllclk", "1");
++
++}
++
++
++static Bool
++W100Map(KdCardInfo * card, W100CardInfo *w100c)
++{
++ DBG_IMAGEON(("--W100Map\n"));
++ w100c->mem_base = (CARD8 *) KdMapDevice(W100_MEM_BASE, W100_MEM_SIZE);
++
++ if (w100c->mem_base == NULL) {
++ return FALSE;
++ }
++
++ w100c->reg_base = w100c->mem_base + W100_REG_OFFSET;
++
++ /*
++ * It doesn't matter mapping all the area as registers.
++ * There's only difference when HAVE_ASM_MTRR_H is defined.
++ * So, this call is doing nothing.
++ */
++ KdSetMappedMode(W100_MEM_BASE, W100_MEM_SIZE, KD_MAPPED_MODE_REGISTERS);
++
++ return TRUE;
++}
++
++static void
++W100Unmap(KdCardInfo * card, W100CardInfo *w100c)
++{
++ DBG_IMAGEON(("--W100Unmap\n"));
++ if (w100c->mem_base) {
++ KdResetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
++ KD_MAPPED_MODE_REGISTERS);
++ KdUnmapDevice((void *) w100c->mem_base, W100_MEM_SIZE);
++ w100c->mem_base = w100c->reg_base = 0;
++ }
++}
++
++static void W100MemSetup(W100CardInfo *w100c)
++{
++ int reg_value;
++ int int_start, int_size;
++ int ext_start, ext_size;
++ int i;
++ DBG_IMAGEON(("--W100MemSetup\n"));
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ xfree(w100c->memareas[i]);
++ }
++ xfree(w100c->memareas);
++
++ reg_value = MMIO_IN32(mmMC_FB_LOCATION);
++ int_start = (reg_value & 0xffff) << 8;
++ int_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++ DBG_IMAGEON(("(I) MC_FB_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++ reg_value, int_start, int_size));
++
++ reg_value = MMIO_IN32(mmMC_EXT_MEM_LOCATION);
++ ext_start = (reg_value & 0xffff) << 8;
++ ext_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++ DBG_IMAGEON(("(I) MC_EXT_MEM_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++ reg_value, ext_start, ext_size));
++
++ w100c->num_memareas = (ext_size > 0) ? 2 : 1;
++ w100c->memareas = xcalloc(sizeof(W100MemArea *), w100c->num_memareas);
++
++ w100c->memareas[W100_INTMEM] = xcalloc(sizeof(W100MemArea), 1);
++ w100c->memareas[W100_INTMEM]->priority = KD_VIDMEM_MAXPRIO;
++ w100c->memareas[W100_INTMEM]->start = (CARD8 *) int_start;
++ w100c->memareas[W100_INTMEM]->size = int_size;
++
++ if (w100c->num_memareas == 2) {
++ w100c->memareas[W100_EXTMEM] = xcalloc(sizeof(W100MemArea), 1);
++ w100c->memareas[W100_EXTMEM]->priority = KD_VIDMEM_MINPRIO;
++ w100c->memareas[W100_EXTMEM]->start = (CARD8 *) ext_start;
++ w100c->memareas[W100_EXTMEM]->size = ext_size;
++ }
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ DBG_IMAGEON(("(I) Memory mapped at 0x%08x(0x%08x), size %d bytes\n",
++ W100_CARD2HOST(w100c->memareas[i]->start),
++ w100c->memareas[i]->start,
++ w100c->memareas[i]->size));
++ }
++
++}
++
++static Bool
++W100CardInit(KdCardInfo * card)
++{
++ W100CardInfo *w100c;
++
++ W100CardEntry *model = &w100_cards[0];
++ static Bool initialized = FALSE;
++
++ DBG_IMAGEON(("--W100CardInit\n"));
++
++ w100c = xcalloc(sizeof(W100CardInfo), 1);
++ if (w100c == NULL)
++ return FALSE;
++
++ if (!fbdevInitialize(card, &w100c->fbdev)) {
++ return FALSE;
++ }
++
++ if (!W100Map(card, w100c)) {
++ xfree(w100c);
++ return FALSE;
++ }
++ card->driver = w100c;
++
++ while (model->name) {
++ if (model->device == card->attr.deviceID) {
++ w100c->card_id = model;
++ break;
++ }
++ model++;
++ }
++
++ ErrorF("(I) Using ATI card: %s\n", w100c->card_id->name);
++
++ if (!initialized) {
++ initialized = TRUE;
++ W100Startup(w100c);
++ }
++
++ w100c->hw_window.mode = W100GetModeSpec(w100c, &w100StartupInfo.mode);
++ w100c->hw_window.randr = w100StartupInfo.randr;
++
++ tslib_transform_closure = w100c;
++ tslib_transform_coords = W100TransformTsLibCoordinates;
++ return TRUE;
++}
++
++
++static void
++W100CardFini(KdCardInfo * card)
++{
++ W100CardInfo *w100c = (W100CardInfo *) card->driver;
++
++ DBG_IMAGEON(("--W100CardFini\n"));
++ W100Unmap(card, w100c);
++ fbdevCardFini(card);
++}
++
++static void
++W100Setup(KdScreenInfo *screen)
++{
++ W100CardInfo(screen);
++ W100MemArea *mem;
++ KdMouseMatrix m;
++ int fb_size, i;
++
++ DBG_IMAGEON(("--W100Setup\n"));
++
++ /* Adjust mode */
++ w100c->hw_window.width = screen->width;
++ w100c->hw_window.height = screen->height;
++ w100c->hw_window.bpp = screen->fb[0].bitsPerPixel;
++ W100SetupGraphicWindow(w100c);
++
++ /* Get some register values */
++ w100c->regs.ENG_CNTL = MMIO_IN32(mmENG_CNTL);
++ w100c->regs.VIDEO_CTRL = MMIO_IN32(mmVIDEO_CTRL);
++ w100c->regs.GRAPHIC_H_DISP = MMIO_IN32(mmGRAPHIC_H_DISP);
++ w100c->regs.GRAPHIC_V_DISP = MMIO_IN32(mmGRAPHIC_V_DISP);
++ w100c->regs.DISP_DEBUG2 = MMIO_IN32(mmDISP_DEBUG2);
++
++ W100MemSetup(w100c);
++
++ /* Clear the VideoMemAreas set up by the framebuffer initialization */
++ for (i = 0; i < screen->num_videomem_areas; i++) {
++ xfree(screen->videomem_areas[i]);
++ }
++ xfree(screen->videomem_areas);
++
++ screen->videomem_areas = xcalloc(sizeof(KdVideoMemArea *),
++ w100c->num_memareas);
++ screen->num_videomem_areas = w100c->num_memareas;
++
++ screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8;
++ fb_size = screen->fb[0].byteStride * screen->height;
++
++ DBG_IMAGEON(("(I) Framebuffer required size: %d bytes\n", fb_size));
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ mem = w100c->memareas[i];
++ screen->videomem_areas[i] = xcalloc(sizeof(KdVideoMemArea), 1);
++ screen->videomem_areas[i]->priority = mem->priority;
++ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
++ screen->videomem_areas[i]->size = mem->size;
++ if (w100c->hw_window.mode->fbpool == i) {
++ DBG_IMAGEON(("(I) FrameBuffer in w100 memzone 0x%08x(0x%08x)\n",
++ W100_CARD2HOST(mem->start), mem->start));
++ screen->videomem_areas[i]->available_offset = fb_size;
++ screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start);
++ } else {
++ screen->videomem_areas[i]->available_offset = 0;
++ }
++ DBG_IMAGEON(("New videomem_area(priority:%d, start:0x%08x, size:%d, available_offset:%d\n",
++ screen->videomem_areas[i]->priority,
++ screen->videomem_areas[i]->base,
++ screen->videomem_areas[i]->size,
++ screen->videomem_areas[i]->available_offset));
++ }
++
++
++ w100c->hw_window.offset = W100_HOST2CARD(screen->fb[0].frameBuffer);
++
++ KdComputeMouseMatrix(&m, screen->randr,
++ w100StartupInfo.portrait ?
++ W100_MIN(screen->width, screen->height) :
++ W100_MAX(screen->width, screen->height),
++ w100StartupInfo.portrait ?
++ W100_MAX(screen->width, screen->height) :
++ W100_MIN(screen->width, screen->height));
++
++ KdSetMouseMatrix(&m);
++
++ DBG_IMAGEON(("Window(width:%d,height:%d,bpp:%d,offset:0x%08x"
++ "(0x%08x), randr:%d)\n",
++ w100c->hw_window.width,
++ w100c->hw_window.height,
++ w100c->hw_window.bpp,
++ w100c->hw_window.offset,
++ screen->fb[0].frameBuffer,
++ w100c->hw_window.randr));
++
++}
++
++static Bool
++W100ScreenInit(KdScreenInfo * screen)
++{
++ W100ScreenInfo *w100s;
++ W100CardInfo(screen);
++ Bool success = FALSE;
++
++ DBG_IMAGEON(("--W100ScreenInit\n"));
++ w100s = xcalloc(sizeof(W100ScreenInfo), 1);
++ if (w100s == NULL)
++ return FALSE;
++
++ w100s->w100c = w100c;
++ w100s->screen = screen;
++ screen->driver = w100s;
++
++ success = fbdevScreenInitialize(screen, &w100s->fbdev);
++
++ if (!success) {
++ screen->driver = NULL;
++ xfree(w100s);
++ return FALSE;
++ }
++
++ W100Setup(screen);
++
++ return TRUE;
++}
++
++static void
++W100ScreenFini(KdScreenInfo * screen)
++{
++ W100ScreenInfo *w100s = (W100ScreenInfo *) screen->driver;
++ DBG_IMAGEON(("--W100ScreenFini\n"));
++ fbdevScreenFini(screen);
++ xfree(w100s);
++ screen->driver = 0;
++}
++
++static Bool
++W100InitScreen(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ DBG_IMAGEON(("--W100InitScreen\n"));
++ if (w100c->card_id->caps & W100XVSupport) {
++ W100InitVideo(pScreen);
++ }
++ return fbdevInitScreen(pScreen);
++}
++
++#ifdef RANDR
++
++static Bool W100RandRSetConfig(ScreenPtr pScreen,
++ Rotation randr,
++ int rate,
++ RRScreenSizePtr pSize)
++{
++ KdScreenPriv(pScreen);
++ KdScreenInfo *screen = pScreenPriv->screen;
++ W100CardInfo(pScreenPriv);
++ Bool screenEnabled = pScreenPriv->enabled;
++
++ DBG_IMAGEON(("--W100RandRSetConfig(randr:%d,pSize:%dx%d)\n",
++ randr, pSize->width, pSize->height));
++
++ if (screenEnabled) {
++ KdDisableScreen(pScreen);
++ }
++
++ if (randr & (RR_Rotate_0|RR_Rotate_180)) {
++ pScreen->mmWidth = screen->width_mm;
++ pScreen->mmHeight = screen->height_mm;
++ pScreen->width = pSize->width;
++ pScreen->height = pSize->height;
++ } else {
++ pScreen->mmWidth = screen->height_mm;
++ pScreen->mmHeight = screen->width_mm;
++ pScreen->width = pSize->height;
++ pScreen->height = pSize->width;
++ }
++
++ screen->randr = randr;
++ screen->width = pScreen->width;
++ screen->height = pScreen->height;
++ w100c->hw_window.randr = KdSubRotation(w100StartupInfo.randr, randr);
++ w100c->hw_window.mode = W100GetBestMode(w100c, pScreen->width, pScreen->height);
++
++ KdOffscreenSwapOut(screen->pScreen);
++
++ W100Setup(screen);
++
++ DBG_IMAGEON(("ModifyPixMapHeader(width:%d,height:%d,depth:%d,bpp:%d,bs:%d,fb:0x%08x)\n", pScreen->width, pScreen->height,
++ screen->fb[0].depth,
++ screen->fb[0].bitsPerPixel,
++ screen->fb[0].byteStride,
++ screen->fb[0].frameBuffer));
++
++
++ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen),
++ pScreen->width,
++ pScreen->height,
++ screen->fb[0].depth,
++ screen->fb[0].bitsPerPixel,
++ screen->fb[0].byteStride,
++ screen->fb[0].frameBuffer);
++
++
++ if (screenEnabled) {
++ KdEnableScreen(pScreen);
++ }
++ return TRUE;
++}
++
++static Bool W100RandRGetInfo(ScreenPtr pScreen, Rotation *rotations)
++{
++ KdScreenPriv(pScreen);
++ KdScreenInfo *screen = pScreenPriv->screen;
++ W100CardInfo(pScreenPriv);
++ RRScreenSizePtr pSize;
++ Rotation randr;
++ W100ModeSpec *modes;
++ int i;
++
++ DBG_IMAGEON(("--W100RandRGetInfo\n"));
++
++ *rotations = RR_Rotate_All;
++
++ for (modes = w100_modes; modes->width; modes++) {
++ if (modes->supported) {
++ pSize = RRRegisterSize(pScreen,
++ modes->width,
++ modes->height,
++ screen->width_mm,
++ screen->height_mm);
++ if (modes == w100c->hw_window.mode) {
++ RRSetCurrentConfig(pScreen, screen->randr, 0, pSize);
++ }
++ }
++ }
++
++ return TRUE;
++}
++
++static Bool W100RandRInit(ScreenPtr pScreen)
++{
++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
++ DBG_IMAGEON(("--W100RandRInit\n"));
++ pScrPriv->rrSetConfig = W100RandRSetConfig;
++ pScrPriv->rrGetInfo = W100RandRGetInfo;
++ return TRUE;
++}
++
++#endif
++
++static Bool
++W100FinishInitScreen(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ DBG_IMAGEON(("--W100FinishInitScreen\n"));
++ if (!fbdevFinishInitScreen(pScreen))
++ return FALSE;
++
++#ifdef RANDR
++ if (!W100RandRInit(pScreen))
++ return FALSE;
++#endif
++ return TRUE;
++}
++
++static Bool
++W100CreateResources(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ return fbdevCreateResources(pScreen);
++}
++
++static void
++W100Preserve(KdCardInfo * card)
++{
++ W100CardInfo *w100c = card->driver;
++ DBG_IMAGEON(("--W100Preserve\n"));
++
++ fbdevPreserve(card);
++}
++
++static void
++W100Restore(KdCardInfo * card)
++{
++ W100CardInfo *w100c = card->driver;
++ DBG_IMAGEON(("--W100Restore\n"));
++ fbdevRestore(card);
++}
++
++static Bool
++W100DPMS(ScreenPtr pScreen, int mode)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ DBG_IMAGEON(("--W100DPMS\n"));
++ return fbdevDPMS(pScreen, mode);
++}
++
++static Bool
++W100Enable(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ DBG_IMAGEON(("--W100Enable\n"));
++
++ /*
++ if (!fbdevEnable(pScreen))
++ return FALSE;
++ */
++
++ if (w100c->mem_base == NULL) {
++ if (!W100Map(pScreenPriv->screen->card, w100c)) {
++ return FALSE;
++ }
++ W100Setup(pScreenPriv->screen);
++ }
++ W100SetupGraphicEngine(w100c);
++
++ graphic_offset_u go;
++ go.val = MMIO_IN32(mmGRAPHIC_OFFSET);
++ DBG_IMAGEON(("Graphic offset is 0x%08x(0x%08x)\n",
++ go.f.graphic_offset,
++ W100_CARD2HOST(go.f.graphic_offset)));
++
++
++ return TRUE;
++}
++
++static void
++W100Disable(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ DBG_IMAGEON(("--W100Disable\n"));
++ //W100Unmap(pScreenPriv->card, w100c);
++
++ fbdevDisable(pScreen);
++}
++
++static void
++W100GetColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ fbdevGetColors(pScreen, fb, n, pdefs);
++}
++
++static void
++W100PutColors(ScreenPtr pScreen, int fb, int n, xColorItem * pdefs)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++
++ fbdevPutColors(pScreen, fb, n, pdefs);
++}
++
++KdCardFuncs W100Funcs = {
++ W100CardInit, /* cardinit */
++ W100ScreenInit, /* scrinit */
++ W100InitScreen, /* initScreen */
++ W100FinishInitScreen, /* finishInitScreen */
++ W100CreateResources, /* createRes */
++ W100Preserve, /* preserve */
++ W100Enable, /* enable */
++ W100DPMS, /* dpms */
++ W100Disable, /* disable */
++ W100Restore, /* restore */
++ W100ScreenFini, /* scrfini */
++ W100CardFini, /* cardfini */
++
++ W100CursorInit, /* initCursor */
++ W100CursorEnable, /* enableCursor */
++ W100CursorDisable, /* disableCursor */
++ W100CursorFini, /* finiCursor */
++ W100RecolorCursor, /* recolorCursor */
++
++ W100InitAccel, /* initAccel */
++ W100EnableAccel, /* enableAccel */
++ W100DisableAccel, /* disableAccel */
++ W100FiniAccel, /* finiAccel */
++
++ W100GetColors, /* getColors */
++ W100PutColors, /* putColors */
++};
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_const.h 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,161 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifndef __IMAGEON_CONST_H__
++#define __IMAGEON_CONST_H__
++
++// DP_GUI_MASTER_CNTL.GMC_Brush_DataType
++// DP_DATATYPE.Brush_DataType
++#define DP_BRUSH_8x8MONOOPA 0 //8x8 mono pattern (expanded to frgd, bkgd)
++#define DP_BRUSH_8x8MONOTRA 1 //8x8 mono pattern (expanded to frgd, leave_alone)
++#define DP_PEN_32x1MONOOPA 6 //32x1 mono pattern (expanded to frgd, bkgd)
++#define DP_PEN_32x1MONOTRA 7 //32x1 mono pattern (expanded to frgd, leave_alone)
++#define DP_BRUSH_8x8COLOR 10 //8x8 color pattern
++#define DP_BRUSH_SOLIDCOLOR 13 //solid color pattern (frgd)
++#define DP_BRUSH_NONE 15 //no brush used
++
++#define SIZE_BRUSH_8x8MONO 2
++#define SIZE_PEN_32x1MONO 1
++#define SIZE_BRUSH_8x8COLOR_8 16
++#define SIZE_BRUSH_8x8COLOR_16 32
++#define MAX_BRUSH_SIZE SIZE_BRUSH_8x8COLOR_16
++
++// DP_GUI_MASTER_CNTL.GMC_Dst_DataType
++// DP_DATATYPE.Dp_Dst_DataType
++#define DP_DST_8BPP 2 // 8 bpp grey scale
++#define DP_DST_16BPP_1555 3 //16 bpp aRGB 1555
++#define DP_DST_16BPP_444 5 //16 bpp aRGB 4444
++
++// DP_GUI_MASTER_CNTL.GMC_Src_DataType
++// DP_DATATYPE.Dp_Src_DataType
++#define DP_SRC_1BPP_OPA 0 //mono (expanded to frgd, bkgd)
++#define DP_SRC_1BPP_TRA 1 //mono (expanded to frgd, leave_alone)
++#define DP_SRC_COLOR_SAME_AS_DST 3 //color (same as DST)
++#define DP_SRC_SOLID_COLOR_BLT 4 //solid color for Blt (use frgd)
++#define DP_SRC_4BPP 5 //4 bpp
++#define DP_SRC_12BPP_PACKED 6 //12 bpp packed
++
++// DP_GUI_MASTER_CNTL.GMC_Byte_Pix_Order
++// DP_DATATYPE.Dp_Byte_Pix_Order
++#define DP_PIX_ORDER_MSB2LSB 0 //monochrome pixel order from MSBit to LSBit
++#define DP_PIX_ORDER_LSB2MSB 1 //monochrome pixel order from LSBit to MSBit
++
++// DP_GUI_MASTER_CNTL.GMC_Dp_Src_Source
++#define DP_SRC_MEM_LINEAR 1 //loaded from memory (linear trajectory)
++#define DP_SRC_MEM_RECTANGULAR 2 //loaded from memory (rectangular trajectory)
++#define DP_SRC_HOSTDATA_BIT 3 //loaded from hostdata (linear trajectory)
++#define DP_SRC_HOSTDATA_BYTE 4 //loaded from hostdata (linear trajectory & byte-aligned)
++
++// DP_GUI_MASTER_CNTL.GMC_Dp_Op
++#define DP_OP_ROP 0
++#define DP_OP_ARITHMETIC 1
++
++// E2_ARITHMETIC_CNTL.opcode
++#define E2_OPC_GLBALP_ADD_SRC2 0
++#define E2_OPC_GLBALP_SUB_SRC2 1
++#define E2_OPC_SRC1_ADD_SRC2 2
++#define E2_OPC_SRC1_SUB_SRC2 3
++#define E2_OPC_DST_SADDBLEND_SRC2 4
++#define E2_OPC_DST_CADDBLEND_SRC2 5
++#define E2_OPC_DST_CSUBBLEND_SRC2 6
++#define E2_OPC_LF_SRC2 7
++#define E2_OPC_SCALE_SRC2 8
++#define E2_OPC_STRETCH_SRC2 9
++#define E2_OPC_SRC1_4BPPCPYWEXP 10
++#define E2_OPC_MC1 11
++#define E2_OPC_MC2 12
++#define E2_OPC_MC1_IDCT 13
++#define E2_OPC_MC2_IDCT 14
++#define E2_OPC_IDCT_ONLY_IFRAME 15
++
++// E2_ARITHMETIC_CNTL.clamp
++#define E2_CLAMP_OFF 0
++#define E2_CLAMP_ON 1
++
++// E2_ARITHMETIC_CNTL.rounding
++#define E2_ROUNDING_TRUNCATE 0
++#define E2_ROUNDING_TO_INFINITY 1
++
++// E2_ARITHMETIC_CNTL.srcblend
++#define E2_SRCBLEND_GLOBALALPHA 0
++#define E2_SRCBLEND_ZERO 1
++#define E2_SRCBLEND_SRC2ALPHA 2
++#define E2_SRCBLEND_DSTALPHA 3
++#define E2_SRCBLEND_ALPHA1PLANE 4
++
++// E2_ARITHMETIC_CNTL.destblend
++#define E2_DSTBLEND_GLOBALALPHA 0
++#define E2_DSTBLEND_ZERO 1
++#define E2_DSTBLEND_SRC2ALPHA 2
++#define E2_DSTBLEND_DSTALPHA 3
++#define E2_DSTBLEND_ALPHA1PLANE 4
++
++// LCD_FORMAT.lcd_type
++#define LCDTYPE_TFT333 0
++#define LCDTYPE_TFT444 1
++#define LCDTYPE_TFT555 2
++#define LCDTYPE_TFT666 3
++#define LCDTYPE_COLSTNPACK4 4
++#define LCDTYPE_COLSTNPACK8F1 5
++#define LCDTYPE_COLSTNPACK8F2 6
++#define LCDTYPE_COLSTNPACK16 7
++#define LCDTYPE_MONSTNPACK4 8
++#define LCDTYPE_MONSTNPACK8 9
++
++// CP_RB_CNTL.rb_bufsz
++#define RB_SIZE_2K 8
++#define RB_SIZE_4K 9
++#define RB_SIZE_8K 10
++#define RB_SIZE_16K 11
++#define RB_SIZE_32K 12
++#define RB_SIZE_64K 13
++
++// GRAPHIC_CTRL.color_depth
++#define COLOR_DEPTH_1BPP 0
++#define COLOR_DEPTH_2BPP 1
++#define COLOR_DEPTH_4BPP 2
++#define COLOR_DEPTH_8BPP 3
++#define COLOR_DEPTH_332 4
++#define COLOR_DEPTH_A444 5
++#define COLOR_DEPTH_A555 6
++
++// VIDEO_CTRL.video_mode
++#define VIDEO_MODE_422 0
++#define VIDEO_MODE_420 1
++
++// CLR_CMP_CNTL.cmp_fcn_src
++#define CMP_FCN_SRC_NEQ 4
++#define CMP_FCN_SRC_EQ 5
++
++// CLR_CMP_CNTL.cmp_src
++#define CMP_SRC_SRC 1
++
++// Overlay formats
++#define OVLFORMAT_YUV422 (6)
++#define OVLFORMAT_YUV420 (7)
++#define OVLFORMAT_RGB565 (5)
++#define OVLFORMAT_EQU_DISPLAY (8)
++
++#define W100_CLK_SRC_XTAL 0
++#define W100_CLK_SRC_PLL 1
++
++#endif
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_cursor.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,569 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++
++#include "cursorstr.h"
++#include "imageon.h"
++#include "imageon_regs.h"
++
++#define W100_CURSOR_HEIGHT (16)
++#define W100_CURSOR_WIDTH (16)
++#define W100_CURSOR_PITCH (W100_CURSOR_WIDTH / 4)
++
++#define W100_CURSOR_SIZE W100_CURSOR_PITCH * W100_CURSOR_WIDTH
++
++static CARD16 expand2bpp[256];
++
++static CARD16 spread_byte(CARD8 b)
++{
++ CARD16 s = b;
++
++ s = ((s & 0x00f0) << 4) | (s & 0x000f);
++ s = ((s & 0x0c0c) << 2) | (s & 0x0303);
++ s = ((s & 0x2222) << 1) | (s & 0x1111);
++ return s;
++}
++
++static void W100InitExpansionTable()
++{
++ int i;
++ for (i = 0; i < 256; i++) {
++ expand2bpp[i] = spread_byte(i);
++ }
++}
++
++#define BigEndian(v) \
++ (((v & 0x000000ff) << 24) | \
++ ((v & 0x0000ff00) << 8) | \
++ ((v & 0x00ff0000) >> 8) | \
++ ((v & 0xff000000) >> 24))
++
++#define PixelOffset(x, y) \
++ (((y) * W100_CURSOR_PITCH + ((x) / 4)) >> 2)
++
++#define PixelShift(x, y) \
++ (2 * ((x) % 16))
++
++#define PixelMask(x, y) \
++ ((0xc0000000) >> PixelShift(x, y))
++
++#define PixelVal(src, x, y) \
++ ((*(src + PixelOffset(x, y)) & PixelMask(x, y)) >> (30 - PixelShift(x, y)))
++
++#define SetPixelVal(ptr, x, y, val) \
++ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) = \
++ *(((CARD32 *)(ptr)) + PixelOffset(x, y)) & ~PixelMask(x, y) | \
++ ((val) & 0x03) << (30 - PixelShift(x2, y2))
++
++#define DUMP_CURSOR(src) do { \
++ int x; \
++ int y; \
++ for (y = 0; y < W100_CURSOR_HEIGHT; y++) { \
++ DBG_IMAGEON(("Line %02d: ", y)); \
++ for (x = 0; x < W100_CURSOR_WIDTH; x++) { \
++ DBG_IMAGEON(("%d", PixelVal(src,x,y))); \
++ } \
++ DBG_IMAGEON(("\n")); \
++ } \
++ DBG_IMAGEON((".\n")); \
++} while (0)
++
++static void
++W100RotateCursor(int randr, CARD32 *src, CARD32 *dst)
++{
++ int x1, y1, x2, y2;
++
++ switch (randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ x1 = 0;
++ y1 = 0;
++ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) {
++ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) {
++ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
++ ++x1;
++ if (x1 >= W100_CURSOR_WIDTH) {
++ x1 = 0;
++ ++y1;
++ }
++ }
++ }
++ break;
++ case RR_Rotate_90:
++ x1 = 0;
++ y1 = 0;
++ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) {
++ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >=0; --y2) {
++ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
++ ++x1;
++ if (x1 >= W100_CURSOR_WIDTH) {
++ x1 = 0;
++ ++y1;
++ }
++ }
++ }
++ break;
++ case RR_Rotate_180:
++ x1 = 0;
++ y1 = 0;
++ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >= 0; --y2) {
++ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) {
++ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
++ ++x1;
++ if (x1 >= W100_CURSOR_WIDTH) {
++ x1 = 0;
++ ++y1;
++ }
++ }
++ }
++ break;
++ case RR_Rotate_270:
++ x1 = 0;
++ y1 = 0;
++ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) {
++ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) {
++ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
++ ++x1;
++ if (x1 >= W100_CURSOR_WIDTH) {
++ x1 = 0;
++ ++y1;
++ }
++ }
++ }
++ break;
++ }
++}
++
++static void
++W100SetCursorColors(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ CursorPtr pCursor = pCurPriv->pCursor;
++ CursorBitsPtr bits = pCursor->bits;
++ cursor_color_u fgcolor;
++ cursor_color_u bgcolor;
++
++ fgcolor.f.cur_color_r = pCursor->foreRed >> 8;
++ fgcolor.f.cur_color_g = pCursor->foreGreen >> 8;
++ fgcolor.f.cur_color_b = pCursor->foreBlue >> 8;
++
++ bgcolor.f.cur_color_r = pCursor->backRed >> 8;
++ bgcolor.f.cur_color_g = pCursor->backGreen >> 8;
++ bgcolor.f.cur_color_b = pCursor->backBlue >> 8;
++
++ DBG_IMAGEON(("W100SetCursorColors fg(%02x,%02x,%02x), bg(%02x,%02x,%02x)\n",
++ fgcolor.f.cur_color_r,
++ fgcolor.f.cur_color_g,
++ fgcolor.f.cur_color_b,
++ bgcolor.f.cur_color_r,
++ bgcolor.f.cur_color_g,
++ bgcolor.f.cur_color_b));
++
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmCURSOR1_COLOR0, bgcolor.val);
++ MMIO_OUT32(mmCURSOR1_COLOR1, fgcolor.val);
++ W100EnableDisplayUpdate(w100c);
++
++}
++
++static void
++W100LoadCursor(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ CursorPtr pCursor = pCurPriv->pCursor;
++ CursorBitsPtr bits = pCursor->bits;
++ CARD32 *dst;
++ CARD8 tmpCursor0[W100_CURSOR_SIZE];
++ CARD8 tmpCursor1[W100_CURSOR_SIZE];
++ CARD32 expValue, expMask;
++ CARD32 *src;
++ CARD32 *mask;
++ int lwsrc;
++ int line, i;
++ int h, w;
++
++
++ pCurPriv->pCursor = pCursor;
++ pCurPriv->xhot = bits->xhot;
++ pCurPriv->yhot = bits->yhot;
++
++ memset(tmpCursor0, 0xaa, W100_CURSOR_SIZE);
++
++ h = bits->height;
++ w = bits->width;
++ if (h > W100_CURSOR_HEIGHT) {
++ h = W100_CURSOR_HEIGHT;
++ }
++
++ if (w > W100_CURSOR_WIDTH) {
++ w = W100_CURSOR_WIDTH;
++ }
++
++ src = (CARD32*) bits->source;
++ dst = (CARD32*) tmpCursor0;
++ mask = (CARD32*) bits->mask;
++
++ lwsrc = BitmapBytePad(bits->width) >> 2;
++
++ for (line = 0; line < h; line++) {
++ for (i = 0; i < lwsrc; i++) {
++ expValue =
++ (expand2bpp[src[i] & 0xff]) |
++ (expand2bpp[(src[i] >> 8) & 0xff] << 16);
++ expMask =
++ (expand2bpp[mask[i] & 0xff]) |
++ (expand2bpp[(mask[i] >> 8) & 0xff] << 16);
++ expMask |= (expMask << 1); /* Expand 01 -> 11, 00 -> 00 */
++ dst[i] = (0xaaaaaaaa & ~expMask) | (expValue & expMask);
++ }
++ src += lwsrc;
++ mask += lwsrc;
++ dst += lwsrc;
++ }
++
++ /* Rotate the pixmap to get the correct orientation */
++ W100RotateCursor(w100c->hw_window.randr,
++ (CARD32*) tmpCursor0,
++ (CARD32*) tmpCursor1);
++
++ DUMP_CURSOR((CARD32*)tmpCursor1);
++ /* Correct endianness */
++ src = (CARD32*) tmpCursor1;
++ dst = (CARD32*) (pCurPriv->area->vidmem->base + pCurPriv->area->offset);
++ DBG_IMAGEON(("W100LoadCursor(xhot:%d,yhot:%d,width:%d,height:%d) dst(0x%08x)\n",
++ bits->xhot, bits->yhot,
++ bits->width, bits->height,
++ dst));
++
++ for (line = 0; line < h; line++) {
++ for (i = 0; i < lwsrc; i++) {
++ dst[i] = BigEndian(src[i]);
++ }
++ src += lwsrc;
++ dst += lwsrc;
++ }
++
++ W100SetCursorColors(pScreen);
++}
++
++static void
++W100UnloadCursor(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ cursor_h_pos_u hpos;
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ DBG_IMAGEON(("W100UnloadCursor pCurPriv:%p\n", pCurPriv));
++
++ hpos.val = pCurPriv->hpos;
++ hpos.f.cur_en = 0;
++
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val);
++ W100EnableDisplayUpdate(w100c);
++ pCurPriv->hpos = hpos.val;
++}
++
++static void
++W100MoveCursor(ScreenPtr pScreen, int x, int y)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ int xoffs, yoffs;
++ cursor_offset_u cursor_offset;
++ cursor_h_pos_u hpos;
++ cursor_v_pos_u vpos;
++ graphic_h_disp_u graphic_hdisp;
++ graphic_v_disp_u graphic_vdisp;
++ BoxRec cursorBox, deviceBox;
++
++
++ if (!pCurPriv->has_cursor) {
++ return;
++ }
++ if (!pScreenPriv->enabled) {
++ return;
++ }
++
++ graphic_hdisp.val = w100c->regs.GRAPHIC_H_DISP;
++ graphic_vdisp.val = w100c->regs.GRAPHIC_V_DISP;
++ xoffs = 0;
++ yoffs = 0;
++ cursorBox.x1 = x - pCurPriv->xhot;
++ cursorBox.y1 = y - pCurPriv->yhot;
++ cursorBox.x2 = cursorBox.x1 + pCurPriv->width - 1;
++ cursorBox.y2 = cursorBox.y1 + pCurPriv->height - 1;
++ W100MapToDevice(w100c, &cursorBox, &deviceBox);
++
++ if (deviceBox.x1 < 0) {
++ xoffs = -deviceBox.x1;
++ deviceBox.x1 = 0;
++ }
++
++ if (deviceBox.y1 < 0) {
++ yoffs = -deviceBox.y1;
++ deviceBox.y1 = 0;
++ }
++
++ hpos.f.cur_h_start = graphic_hdisp.f.graphic_h_start + deviceBox.x1;
++ hpos.f.cur_h_end = graphic_hdisp.f.graphic_h_start + deviceBox.x2 + 1;
++ hpos.f.cur_en = 1;
++ vpos.f.cur_v_start = graphic_vdisp.f.graphic_v_start + deviceBox.y1;
++ vpos.f.cur_v_end = graphic_vdisp.f.graphic_v_start + deviceBox.y2 + 1;
++
++ cursor_offset.f.cur_x_offset = xoffs;
++ cursor_offset.f.cur_y_offset = yoffs;
++ cursor_offset.f.cur_offset = (CARD32)
++ W100_HOST2CARD(pCurPriv->area->vidmem->base
++ + pCurPriv->area->offset);
++ DBG_IMAGEON(("W100MoveCursor dst(x:%d,y:%d),"
++ "hwpos(hpos.start:%d,hpos.end:%d,vpos.start:%d,vpos.end:%d),"
++ "mapped(x:%d,y:%d,xoffs:%d,yoffs:%d)\n",
++ x, y,
++ hpos.f.cur_h_start, hpos.f.cur_h_end,
++ vpos.f.cur_v_start, vpos.f.cur_v_end,
++ deviceBox.x1, deviceBox.y1, xoffs, yoffs));
++
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmCURSOR1_OFFSET, cursor_offset.val);
++ MMIO_OUT32(mmCURSOR1_V_POS, vpos.val);
++ MMIO_OUT32(mmCURSOR1_H_POS, hpos.val);
++ W100EnableDisplayUpdate(w100c);
++
++ pCurPriv->hpos = hpos.val;
++ pCurPriv->vpos = vpos.val;
++ pCurPriv->coffset = cursor_offset.val;
++
++}
++
++static Bool
++W100RealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ DBG_IMAGEON(("W100RealizeCursor\n"));
++
++ if (!pScreenPriv->enabled) {
++ return TRUE;
++ }
++
++ if (pCursor && pCurPriv->pCursor == pCursor) {
++ int x, y;
++ miPointerPosition(&x, &y);
++ W100LoadCursor(pScreen);
++ W100MoveCursor(pScreen, x, y);
++ }
++ return TRUE;
++}
++
++
++static Bool
++W100UnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
++{
++ DBG_IMAGEON(("W100UnrealizeCursor\n"));
++ return TRUE;
++}
++
++
++static void
++W100SetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ pCurPriv->pCursor = pCursor;
++
++ if (!pScreenPriv->enabled) {
++ return;
++ }
++
++ if (pCursor) {
++ W100LoadCursor(pScreen);
++ W100MoveCursor(pScreen, x, y);
++ } else {
++ W100UnloadCursor(pScreen);
++ }
++}
++
++
++miPointerSpriteFuncRec W100PointerSpriteFuncs = {
++ W100RealizeCursor,
++ W100UnrealizeCursor,
++ W100SetCursor,
++ W100MoveCursor,
++};
++
++static void
++W100QueryBestSize(int class, unsigned short *pwidth, unsigned short *pheight,
++ ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ switch (class) {
++ case CursorShape:
++ if (*pwidth > pCurPriv->width) {
++ *pwidth = pCurPriv->width;
++ }
++ if (*pheight > pCurPriv->height) {
++ *pheight = pCurPriv->height;
++ }
++ if (*pwidth > pScreen->width) {
++ *pwidth = pScreen->width;
++ }
++ if (*pheight > pScreen->height) {
++ *pheight = pScreen->height;
++ }
++ break;
++ default:
++ fbQueryBestSize(class, pwidth, pheight, pScreen);
++ break;
++ }
++}
++
++static void
++W100CursorSave(ScreenPtr pScreen, KdOffscreenArea *area)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ DBG_IMAGEON(("W100CursorSave\n"));
++
++ pCurPriv->area = NULL;
++}
++
++void
++W100CursorEnable(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ if (!pCurPriv->has_cursor) {
++ return;
++ }
++
++ DBG_IMAGEON(("W100CursorEnable\n"));
++
++ if (pCurPriv->area == NULL) {
++ pCurPriv->area = KdOffscreenAlloc(pScreen,
++ W100_CURSOR_SIZE, 0, TRUE,
++ W100CursorSave, w100s);
++ }
++ if (pCurPriv->area == NULL) {
++ FatalError("Couldn't allocate offscreen memory for cursor.\n");
++ } else {
++ DBG_IMAGEON(("Cursor memory at 0x%08x(0x%08x)\n",
++ pCurPriv->area->vidmem->base + pCurPriv->area->offset,
++ W100_HOST2CARD(pCurPriv->area->vidmem->base
++ + pCurPriv->area->offset)));
++ }
++ if (pCurPriv->pCursor) {
++ int x, y;
++ miPointerPosition(&x, &y);
++ W100LoadCursor(pScreen);
++ W100MoveCursor(pScreen, x, y);
++ } else {
++ W100UnloadCursor(pScreen);
++ }
++}
++
++
++void
++W100CursorDisable(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++ DBG_IMAGEON(("W100CursorDisable\n"));
++
++ if (!pScreenPriv->enabled || !pCurPriv->has_cursor) {
++ return;
++ }
++
++ if (pCurPriv->pCursor) {
++ W100UnloadCursor(pScreen);
++ }
++
++ pCurPriv->area = NULL;
++}
++
++Bool
++W100CursorInit(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ DBG_IMAGEON(("W100CursorInit\n"));
++
++ pCurPriv->width = W100_CURSOR_WIDTH;
++ pCurPriv->height = W100_CURSOR_HEIGHT;
++ pScreen->QueryBestSize = W100QueryBestSize;
++ miPointerInitialize(pScreen,
++ &W100PointerSpriteFuncs,
++ &kdPointerScreenFuncs,
++ FALSE);
++ pCurPriv->has_cursor = TRUE;
++ pCurPriv->pCursor = NULL;
++ W100InitExpansionTable();
++ return TRUE;
++}
++
++
++void
++W100RecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef)
++{
++ return;
++}
++
++
++void
++W100CursorFini(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100Cursor *pCurPriv = &w100s->cursor;
++
++ pCurPriv->has_cursor = FALSE;
++ pCurPriv->pCursor = NULL;
++}
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_draw.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_draw.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,238 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++
++#include "imageon.h"
++#include "imageon_regs.h"
++#include "imageon_const.h"
++#include "imageon_support.h"
++#include "kaa.h"
++
++static W100CardInfo *currentCard;
++
++void
++W100WaitMarker(ScreenPtr pScreen, int marker)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100WaitIdle(w100c);
++}
++
++Bool
++W100PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
++{
++ KdScreenPriv(pPix->drawable.pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100CardInfo(pScreenPriv);
++ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
++ int fifoEntries = 4;
++
++ DBG_IMAGEON(("W100PrepareSolid(alu:%d, pm:0x%08x, fg:%d)\n",
++ alu, pm, fg));
++
++ W100ResetContext(w100c);
++ W100SetPixelMask(w100c, pm);
++
++ if (W100SetDestinationPixmap(pPix)) {
++ if (w100c->ctx.mask.enable) {
++ ++fifoEntries;
++ }
++ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) {
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeSolidGmc(w100c, alu));
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++ MMIO_OUT32(mmDP_BRUSH_FRGD_CLR, fg);
++
++ if (w100c->ctx.mask.enable) {
++ MMIO_OUT32(mmDP_WRITE_MSK, pm);
++ }
++ currentCard = w100c;
++ return TRUE;
++ }
++ }
++ ErrorF("Error in W100PrepareSolid\n");
++ return FALSE;
++}
++
++void
++W100Solid(int x1, int y1, int x2, int y2)
++{
++ W100CardInfo *w100c = currentCard;
++ DBG_IMAGEON(("W100Solid(x1:%d,y1:%d,x2:%d,y2:%d)\n", x1, y1, x2, y2));
++
++ if (W100WaitCmdFifoEntries(w100c, 2)) {
++ MMIO_OUT32(mmDST_Y_X, (y1 << 16) | x1);
++ MMIO_OUT32(mmDST_HEIGHT_WIDTH, ((y2 - y1) << 16) | (x2 - x1));
++ } else {
++ ErrorF("Error in W100Solid\n");
++ }
++}
++
++void
++W100DoneSolid(void)
++{
++}
++
++
++Bool
++W100PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst,
++ int dx, int dy, int alu, Pixel pm)
++{
++ KdScreenPriv(pDst->drawable.pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100CardInfo(pScreenPriv);
++ dp_datatype_u datatype;
++
++ int fifoEntries = 6;
++
++ W100ResetContext(w100c);
++ W100SetPixelMask(w100c, pm);
++ W100SetXForm(w100c, dx, dy);
++
++ if (W100SetSourcePixmap(pSrc) && W100SetDestinationPixmap(pDst)) {
++ DBG_IMAGEON(("W100PrepareCopy(src(pitch:%d,offset:0x%08x),"
++ "dst(pitch:%d,offset:0x%08x))\n",
++ w100c->ctx.src.pitch,
++ w100c->ctx.src.offset,
++ w100c->ctx.dst.pitch,
++ w100c->ctx.dst.offset));
++ if (w100c->ctx.mask.enable) {
++ ++fifoEntries;
++ }
++
++ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) {
++ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch);
++ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset);
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeCopyGmc(w100c, alu));
++ if (w100c->ctx.mask.enable) {
++ MMIO_OUT32(mmDP_WRITE_MSK, pm);
++ }
++ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath);
++ currentCard = w100c;
++ return TRUE;
++ }
++ }
++ ErrorF("Error in W100PrepareCopy\n");
++ return FALSE;
++}
++
++void
++W100Copy(int srcX, int srcY, int dstX, int dstY, int w, int h)
++{
++ W100CardInfo *w100c = currentCard;
++ DBG_IMAGEON(("W100Copy(src(x:%d,y:%d),dst(x:%d,y:%d),w:%d,h:%d)\n",
++ srcX, srcY,
++ dstX, dstY,
++ w, h));
++ if (w100c->ctx.xform.dx < 0) {
++ dstX += w - 1;
++ srcX += w - 1;
++ }
++
++ if (w100c->ctx.xform.dy < 0) {
++ dstY += h - 1;
++ srcY += h - 1;
++ }
++
++ if (W100WaitCmdFifoEntries(w100c, 3)) {
++ MMIO_OUT32(mmSRC_Y_X, (srcY << 16) | srcX);
++ MMIO_OUT32(mmDST_Y_X, (dstY << 16) | dstX);
++ MMIO_OUT32(mmDST_HEIGHT_WIDTH, (h << 16) | w);
++ } else {
++ ErrorF("Error in W100Copy\n");
++ }
++}
++
++void
++W100DoneCopy(void)
++{
++}
++
++Bool
++W100InitAccel(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++
++
++ DBG_IMAGEON(("--W100InitAccel: %d/%d depth/bpp\n",
++ pScreenPriv->screen->fb[0].depth,
++ pScreenPriv->screen->fb[0].bitsPerPixel));
++
++ memset(&w100s->kaa, 0, sizeof(KaaScreenInfoRec));
++ w100s->kaa.waitMarker = W100WaitMarker;
++ w100s->kaa.PrepareSolid = W100PrepareSolid;
++ w100s->kaa.Solid = W100Solid;
++ w100s->kaa.DoneSolid = W100DoneSolid;
++ w100s->kaa.PrepareCopy = W100PrepareCopy;
++ w100s->kaa.Copy = W100Copy;
++ w100s->kaa.DoneCopy = W100DoneCopy;
++
++ w100s->kaa.flags |= KAA_OFFSCREEN_PIXMAPS;
++ /* Offset alignment, not sure if this is enought */
++ w100s->kaa.offsetAlign = 0;
++ w100s->kaa.pitchAlign = 16;
++
++ if (!kaaDrawInit(pScreen, &w100s->kaa)) {
++ return FALSE;
++ }
++ DBG_IMAGEON(("KAA flags: 0x%08x\n", w100s->kaa.flags));
++ return TRUE;
++}
++
++void
++W100EnableAccel(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100CardInfo(pScreenPriv);
++
++ DBG_IMAGEON(("--W100EnableAccel\n"));
++
++ w100s->kaa.PrepareBlend = NULL;
++ w100s->kaa.Blend = NULL;
++ w100s->kaa.DoneBlend = NULL;
++ w100s->kaa.CheckComposite = NULL;
++ w100s->kaa.PrepareComposite = NULL;
++ w100s->kaa.Composite = NULL;
++ w100s->kaa.DoneComposite = NULL;
++ w100s->kaa.UploadToScreen = NULL;
++ w100s->kaa.UploadToScratch = NULL;
++ kaaMarkSync(pScreen);
++}
++
++void
++W100DisableAccel(ScreenPtr pScreen)
++{
++ DBG_IMAGEON(("--W100DisableAccel\n"));
++}
++
++void
++W100FiniAccel(ScreenPtr pScreen)
++{
++ DBG_IMAGEON(("--W100FiniAccel\n"));
++}
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon.h 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,284 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifndef _IMAGEON_H_
++#define _IMAGEON_H_
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++
++#include <fbdev.h>
++
++#include <kxv.h>
++
++#define DEBUG_IMAGEON 0
++#if DEBUG_IMAGEON
++#define DBG_IMAGEON(a) ErrorF a
++#else
++#define DBG_IMAGEON(a)
++#endif
++
++
++#define W100_MEM_BASE (0x08000000)
++#define W100_REG_OFFSET (0x00010000)
++#define W100_REG_BASE (W100_MEM_BASE + W100_REG_OFFSET)
++#define W100_MEM_SIZE (0x01000000)
++#define W100_REG_SIZE (0x00002000)
++#define W100_CMDFIFO_SIZE (16)
++
++#define W100_CARD2HOST(x) (w100c->mem_base + (CARD32)(x))
++#define W100_HOST2CARD(x) ((x) - (CARD32)(w100c->mem_base))
++#define W100_MEMAREAS (2)
++#define W100_INTMEM (0)
++#define W100_EXTMEM (1)
++
++#define W100_SYSFS_BASE "/sys/bus/platform/devices/w100fb/"
++
++#define MMIO_OUT32(a, v) (*(VOL32 *)((w100c->reg_base) + (a)) = (v))
++#define MMIO_IN32(a) (*(VOL32 *)((w100c->reg_base) + (a)))
++
++#define W100_MAX(x, y) ((x) > (y) ? x : y)
++#define W100_MIN(x, y) ((x) < (y) ? x : y)
++
++#define W100_ALIGN(q, a) ((q + a - 1) & ~(a - 1))
++
++#define TIMEOUT_LOCALS struct timeval _target, _curtime;
++
++static inline Bool
++tv_le(struct timeval *tv1, struct timeval *tv2)
++{
++ if (tv1->tv_sec < tv2->tv_sec ||
++ (tv1->tv_sec == tv2->tv_sec &&
++ tv1->tv_usec < tv2->tv_usec))
++ return TRUE;
++ else
++ return FALSE;
++}
++
++#define WHILE_NOT_TIMEOUT(_timeout) \
++ gettimeofday(&_target, NULL); \
++ _target.tv_usec += ((_timeout) * 1000000); \
++ _target.tv_sec += _target.tv_usec / 1000000; \
++ _target.tv_usec = _target.tv_usec % 1000000; \
++ while (gettimeofday(&_curtime, NULL), tv_le(&_curtime, &_target))
++
++#define TIMEDOUT() (!tv_le(&_curtime, &_target))
++
++typedef volatile CARD8 VOL8;
++typedef volatile CARD16 VOL16;
++typedef volatile CARD32 VOL32;
++
++typedef struct _W100CardEntry {
++ CARD16 vendor;
++ CARD16 device;
++ CARD8 caps;
++ char *name;
++} W100CardEntry;
++
++
++typedef enum _W100Caps {
++ W100XVSupport = 1
++} W100Caps;
++
++typedef struct _W100ModeSpec {
++ CARD16 width;
++ CARD16 height;
++ CARD8 bpp;
++ CARD8 fbpool;
++ Bool supported;
++} W100ModeSpec;
++
++typedef struct _W100BoxRec {
++ CARD16 x;
++ CARD16 y;
++ CARD16 w;
++ CARD16 h;
++} W100BoxRec, *W100BoxPtr;
++
++typedef struct _W100Mode {
++ CARD16 width;
++ CARD16 height;
++ CARD8 bpp;
++} W100Mode;
++
++typedef struct _W100MemArea {
++ CARD8 *start;
++ CARD32 size;
++ CARD8 priority;
++} W100MemArea;
++
++typedef struct _W100StartupInfo {
++ W100CardEntry *card_id;
++ W100Mode mode;
++ Bool portrait;
++ int randr;
++} W100StartupInfo;
++
++typedef struct _W100CardInfo {
++ FbdevPriv fbdev;
++ W100CardEntry *card_id;
++ CARD8 *mem_base;
++ CARD8 *reg_base;
++ W100MemArea **memareas;
++ int num_memareas;
++ int cmdfifo_entries;
++ struct {
++ CARD32 ENG_CNTL;
++ CARD32 VIDEO_CTRL;
++ CARD32 GRAPHIC_H_DISP;
++ CARD32 GRAPHIC_V_DISP;
++ CARD32 DISP_DEBUG2;
++ } regs;
++ struct {
++ CARD8 *offset;
++ CARD16 width;
++ CARD16 height;
++ int randr;
++ W100ModeSpec *mode;
++ CARD8 bpp;
++ } hw_window;
++ CARD8 last_dst_videomem;
++ CARD8 last_src_videomem;
++ struct {
++ struct {
++ CARD8 datatype;
++ CARD32 pitch;
++ CARD32 offset;
++ CARD8 videomem;
++ } dst;
++ struct {
++ CARD8 datatype;
++ CARD32 pitch;
++ CARD32 offset;
++ CARD8 videomem;
++ } src;
++ struct {
++ int dx;
++ int dy;
++ int randr;
++ Bool mirror;
++ CARD32 dataPath;
++ } xform;
++ struct {
++ Pixel pm;
++ Bool enable;
++ } mask;
++ } ctx;
++} W100CardInfo;
++
++#define W100GetCardInfo(kd) ((W100CardInfo *) ((kd)->card->driver))
++#define W100CardInfo(kd) W100CardInfo *w100c = W100GetCardInfo(kd)
++
++typedef struct _W100Cursor {
++ int width, height;
++ int xhot, yhot;
++ Bool has_cursor;
++ CursorPtr pCursor;
++ KdOffscreenArea *area;
++ CARD32 vpos;
++ CARD32 hpos;
++ CARD32 coffset;
++} W100Cursor;
++
++typedef struct _W100ScreenInfo {
++ FbdevScrPriv fbdev;
++ KaaScreenInfoRec kaa;
++ W100CardInfo *w100c;
++ KdScreenInfo *screen;
++ KdVideoAdaptorPtr pAdaptor;
++ W100Cursor cursor;
++} W100ScreenInfo;
++
++#define W100GetScreenInfo(kd) ((W100ScreenInfo *) ((kd)->screen->driver))
++#define W100ScreenInfo(kd) W100ScreenInfo *w100s = W100GetScreenInfo(kd)
++
++typedef enum _W100VideoStatus {
++ W100_OVERLAY_ON = 1,
++ W100_OVERLAY_CONFIGURED = 2
++} W100VideoStatus;
++
++
++typedef struct _W100PortPriv {
++ CARD32 videoStatus;
++ CARD32 videoCtrl;
++ RegionRec clip;
++ struct {
++ int width; /* Source width */
++ int height; /* Source height */
++ unsigned char *buffer; /* Source buffer */
++ int id; /* Source FOURCC */
++ int size; /* Size of source rect (bytes) */
++ KdOffscreenArea *surface; /* Source surface (on card memory) */
++ BoxRec box; /* Source rect boundaries */
++ } src;
++ struct {
++ BoxRec box; /* Screen rectangle */
++ } dst;
++ struct {
++ int size; /* Size of the overlay surface (bytes) */
++ KdOffscreenArea *surface; /* Overlay surface (on card memory) */
++ BoxRec box; /* Overlay box (util size) */
++ BoxRec frame; /* Overlay box (plus corrections) */
++ Bool changed; /* To avoid recalculations */
++ int horExp; /* Horizontal expansion */
++ int verExp; /* Vertical expansion */
++ int maxSize; /* Maximum allowed surface size (bytes) */
++ int colorKey; /* Colour to replace with overlay */
++ int brightness; /* Brigthness */
++ } ovl;
++ struct {
++ int size; /* Number of planes */
++ int bpp; /* bpp of the planes */
++ int offset[3]; /* Planes offsets */
++ CARD32 yplane; /* Offset (card) of Y plane */
++ CARD32 uplane; /* Offset (card) of U plane */
++ CARD32 vplane; /* Offset (card) of V plane */
++ } planes;
++ Bool changed; /* To track changes and avoid recalculations */
++} W100PortPrivRec, *W100PortPrivPtr;
++
++extern KdCardFuncs W100Funcs;
++
++/* imageon_draw.c */
++void W100WaitMarker(ScreenPtr pScreen, int marker);
++Bool W100PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg);
++void W100Solid(int x1, int y1, int x2, int y2);
++Bool W100PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst,
++ int dx, int dy, int alu, Pixel pm);
++void W100Copy(int srcX, int srcY, int dstX, int dstY, int w, int h);
++void W100DoneCopy(void);
++Bool W100InitAccel(ScreenPtr pScreen);
++void W100EnableAccel(ScreenPtr pScreen);
++void W100DisableAccel(ScreenPtr pScreen);
++void W100FiniAccel(ScreenPtr pScreen);
++/* imageon_cursor.c */
++void W100CursorEnable(ScreenPtr pScreen);
++void W100CursorDisable(ScreenPtr pScreen);
++Bool W100CursorInit(ScreenPtr pScreen);
++void W100RecolorCursor(ScreenPtr pScreen, int ndef, xColorItem * pdef);
++void W100CursorFini(ScreenPtr pScreen);
++
++
++
++
++#endif /* _IMAGEON_H_ */
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_regs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_regs.h 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,4155 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifndef __IMAGEON_REGS_H__
++#define __IMAGEON_REGS_H__
++
++/* Block CIF Start: */
++#define mmCHIP_ID 0x0000
++#define mmREVISION_ID 0x0004
++#define mmWRAP_BUF_A 0x0008
++#define mmWRAP_BUF_B 0x000C
++#define mmWRAP_TOP_DIR 0x0010
++#define mmWRAP_START_DIR 0x0014
++#define mmCIF_CNTL 0x0018
++#define mmCFGREG_BASE 0x001C
++#define mmCIF_IO 0x0020
++#define mmCIF_READ_DBG 0x0024
++#define mmCIF_WRITE_DBG 0x0028
++#define cfgIND_ADDR_A_0 0x0000
++#define cfgIND_ADDR_A_1 0x0001
++#define cfgIND_ADDR_A_2 0x0002
++#define cfgIND_DATA_A 0x0003
++#define cfgREG_BASE 0x0004
++#define cfgINTF_CNTL 0x0005
++#define cfgSTATUS 0x0006
++#define cfgCPU_DEFAULTS 0x0007
++#define cfgIND_ADDR_B_0 0x0008
++#define cfgIND_ADDR_B_1 0x0009
++#define cfgIND_ADDR_B_2 0x000A
++#define cfgIND_DATA_B 0x000B
++#define cfgPM4_RPTR 0x000C
++#define cfgSCRATCH 0x000D
++#define cfgPM4_WRPTR_0 0x000E
++#define cfgPM4_WRPTR_1 0x000F
++/* Block CIF End: */
++
++/* Block CP Start: */
++#define mmCP_RB_CNTL 0x0210
++#define mmCP_RB_BASE 0x0214
++#define mmCP_RB_RPTR_ADDR 0x0218
++#define mmCP_RB_RPTR 0x021C
++#define mmCP_RB_RPTR_WR 0x02F8
++#define mmCP_RB_WPTR 0x0220
++#define mmCP_IB_BASE 0x0228
++#define mmCP_IB_BUFSZ 0x022C
++#define mmCP_CSQ_CNTL 0x0230
++#define mmCP_CSQ_APER_PRIMARY 0x0300
++#define mmCP_CSQ_APER_INDIRECT 0x0340
++#define mmCP_ME_CNTL 0x0240
++#define mmCP_ME_RAM_ADDR 0x0244
++#define mmCP_ME_RAM_RADDR 0x0248
++#define mmCP_ME_RAM_DATAH 0x024C
++#define mmCP_ME_RAM_DATAL 0x0250
++#define mmCP_DEBUG 0x025C
++#define mmSCRATCH_REG0 0x0260
++#define mmSCRATCH_REG1 0x0264
++#define mmSCRATCH_REG2 0x0268
++#define mmSCRATCH_REG3 0x026C
++#define mmSCRATCH_REG4 0x0270
++#define mmSCRATCH_REG5 0x0274
++#define mmSCRATCH_UMSK 0x0280
++#define mmSCRATCH_ADDR 0x0284
++#define mmCP_CSQ_ADDR 0x02E4
++#define mmCP_CSQ_DATA 0x02E8
++#define mmCP_CSQ_STAT 0x02EC
++#define mmCP_STAT 0x02F0
++#define mmGEN_INT_CNTL 0x0200
++#define mmGEN_INT_STATUS 0x0204
++/* Block CP End: */
++
++/* Block DISPLAY Start: */
++#define mmLCD_FORMAT 0x0410
++#define mmGRAPHIC_CTRL 0x0414
++#define mmGRAPHIC_OFFSET 0x0418
++#define mmGRAPHIC_PITCH 0x041C
++#define mmCRTC_TOTAL 0x0420
++#define mmACTIVE_H_DISP 0x0424
++#define mmACTIVE_V_DISP 0x0428
++#define mmGRAPHIC_H_DISP 0x042C
++#define mmGRAPHIC_V_DISP 0x0430
++#define mmVIDEO_CTRL 0x0434
++#define mmGRAPHIC_KEY 0x0438
++#define mmVIDEO_Y_OFFSET 0x043C
++#define mmVIDEO_Y_PITCH 0x0440
++#define mmVIDEO_U_OFFSET 0x0444
++#define mmVIDEO_U_PITCH 0x0448
++#define mmVIDEO_V_OFFSET 0x044C
++#define mmVIDEO_V_PITCH 0x0450
++#define mmVIDEO_H_POS 0x0454
++#define mmVIDEO_V_POS 0x0458
++#define mmBRIGHTNESS_CNTL 0x045C
++#define mmCURSOR1_OFFSET 0x0460
++#define mmCURSOR1_H_POS 0x0464
++#define mmCURSOR1_V_POS 0x0468
++#define mmCURSOR1_COLOR0 0x046C
++#define mmCURSOR1_COLOR1 0x0470
++#define mmCURSOR2_OFFSET 0x0474
++#define mmCURSOR2_H_POS 0x0478
++#define mmCURSOR2_V_POS 0x047C
++#define mmCURSOR2_COLOR0 0x0480
++#define mmCURSOR2_COLOR1 0x0484
++#define mmDISP_INT_CNTL 0x0488
++#define mmCRTC_SS 0x048C
++#define mmCRTC_LS 0x0490
++#define mmCRTC_REV 0x0494
++#define mmCRTC_DCLK 0x049C
++#define mmCRTC_GS 0x04A0
++#define mmCRTC_VPOS_GS 0x04A4
++#define mmCRTC_GCLK 0x04A8
++#define mmCRTC_GOE 0x04AC
++#define mmCRTC_FRAME 0x04B0
++#define mmCRTC_FRAME_VPOS 0x04B4
++#define mmGPIO_DATA 0x04B8
++#define mmGPIO_CNTL1 0x04BC
++#define mmGPIO_CNTL2 0x04C0
++#define mmLCDD_CNTL1 0x04C4
++#define mmLCDD_CNTL2 0x04C8
++#define mmGENLCD_CNTL1 0x04CC
++#define mmGENLCD_CNTL2 0x04D0
++#define mmDISP_DEBUG 0x04D4
++#define mmDISP_DB_BUF_CNTL 0x04D8
++#define mmDISP_CRC_SIG 0x04DC
++#define mmCRTC_DEFAULT_COUNT 0x04E0
++#define mmLCD_BACKGROUND_COLOR 0x04E4
++#define mmCRTC_PS2 0x04E8
++#define mmCRTC_PS2_VPOS 0x04EC
++#define mmCRTC_PS1_ACTIVE 0x04F0
++#define mmCRTC_PS1_NACTIVE 0x04F4
++#define mmCRTC_GCLK_EXT 0x04F8
++#define mmCRTC_ALW 0x04FC
++#define mmCRTC_ALW_VPOS 0x0500
++#define mmCRTC_PSK 0x0504
++#define mmCRTC_PSK_HPOS 0x0508
++#define mmCRTC_CV4_START 0x050C
++#define mmCRTC_CV4_END 0x0510
++#define mmCRTC_CV4_HPOS 0x0514
++#define mmCRTC_ECK 0x051C
++#define mmREFRESH_CNTL 0x0520
++#define mmGENLCD_CNTL3 0x0524
++#define mmGPIO_DATA2 0x0528
++#define mmGPIO_CNTL3 0x052C
++#define mmGPIO_CNTL4 0x0530
++#define mmCHIP_STRAP 0x0534
++#define mmDISP_DEBUG2 0x0538
++#define mmDEBUG_BUS_CNTL 0x053C
++#define mmGAMMA_VALUE1 0x0540
++#define mmGAMMA_VALUE2 0x0544
++#define mmGAMMA_SLOPE 0x0548
++#define mmGEN_STATUS 0x054C
++#define mmHW_INT 0x0550
++/* Block DISPLAY End: */
++
++/* Block GFX Start: */
++#define mmDST_OFFSET 0x1004
++#define mmDST_PITCH 0x1008
++#define mmDST_PITCH_OFFSET 0x102C
++#define mmDST_X 0x101C
++#define mmDST_Y 0x1020
++#define mmDST_X_Y 0x1194
++#define mmDST_Y_X 0x1038
++#define mmDST_WIDTH 0x100C
++#define mmDST_HEIGHT 0x1010
++#define mmDST_WIDTH_HEIGHT 0x1198
++#define mmDST_HEIGHT_WIDTH 0x103C
++#define mmDST_HEIGHT_WIDTH_8 0x118C
++#define mmDST_HEIGHT_Y 0x11A0
++#define mmDST_WIDTH_X 0x1188
++#define mmDST_WIDTH_X_INCY 0x119C
++#define mmDST_LINE_START 0x1090
++#define mmDST_LINE_END 0x1094
++#define mmBRUSH_OFFSET 0x108C
++#define mmBRUSH_Y_X 0x1074
++#define mmDP_BRUSH_FRGD_CLR 0x107C
++#define mmDP_BRUSH_BKGD_CLR 0x1078
++#define mmSRC2_OFFSET 0x1060
++#define mmSRC2_PITCH 0x1064
++#define mmSRC2_PITCH_OFFSET 0x1068
++#define mmSRC2_X 0x1050
++#define mmSRC2_Y 0x1054
++#define mmSRC2_X_Y 0x1058
++#define mmSRC2_WIDTH 0x1080
++#define mmSRC2_HEIGHT 0x1084
++#define mmSRC2_INC 0x1088
++#define mmSRC_OFFSET 0x11AC
++#define mmSRC_PITCH 0x11B0
++#define mmSRC_PITCH_OFFSET 0x1028
++#define mmSRC_X 0x1014
++#define mmSRC_Y 0x1018
++#define mmSRC_X_Y 0x1190
++#define mmSRC_Y_X 0x1034
++#define mmSRC_WIDTH 0x1040
++#define mmSRC_HEIGHT 0x1044
++#define mmSRC_INC 0x1048
++#define mmHOST_DATA0 0x13C0
++#define mmHOST_DATA1 0x13C4
++#define mmHOST_DATA2 0x13C8
++#define mmHOST_DATA3 0x13CC
++#define mmHOST_DATA4 0x13D0
++#define mmHOST_DATA5 0x13D4
++#define mmHOST_DATA6 0x13D8
++#define mmHOST_DATA7 0x13DC
++#define mmHOST_DATA_LAST 0x13E0
++#define mmDP_SRC_FRGD_CLR 0x1240
++#define mmDP_SRC_BKGD_CLR 0x1244
++#define mmSC_LEFT 0x1140
++#define mmSC_RIGHT 0x1144
++#define mmSC_TOP 0x1148
++#define mmSC_BOTTOM 0x114C
++#define mmSRC_SC_RIGHT 0x1154
++#define mmSRC_SC_BOTTOM 0x115C
++#define mmDP_CNTL 0x11C8
++#define mmDP_CNTL_DST_DIR 0x11CC
++#define mmDP_DATATYPE 0x12C4
++#define mmDP_MIX 0x12C8
++#define mmDP_WRITE_MSK 0x12CC
++#define mmCLR_CMP_CLR_SRC 0x1234
++#define mmCLR_CMP_CLR_DST 0x1238
++#define mmCLR_CMP_CNTL 0x1230
++#define mmCLR_CMP_MSK 0x123C
++#define mmDEFAULT_PITCH_OFFSET 0x10A0
++#define mmDEFAULT_SC_BOTTOM_RIGHT 0x10A8
++#define mmDEFAULT2_SC_BOTTOM_RIGHT 0x10AC
++#define mmREF1_PITCH_OFFSET 0x10B8
++#define mmREF2_PITCH_OFFSET 0x10BC
++#define mmREF3_PITCH_OFFSET 0x10C0
++#define mmREF4_PITCH_OFFSET 0x10C4
++#define mmREF5_PITCH_OFFSET 0x10C8
++#define mmREF6_PITCH_OFFSET 0x10CC
++#define mmDP_GUI_MASTER_CNTL 0x106C
++#define mmSC_TOP_LEFT 0x11BC
++#define mmSC_BOTTOM_RIGHT 0x11C0
++#define mmSRC_SC_BOTTOM_RIGHT 0x11C4
++#define mmGLOBAL_ALPHA 0x1210
++#define mmFILTER_COEF 0x1214
++#define mmMVC_CNTL_START 0x11E0
++#define mmE2_ARITHMETIC_CNTL 0x1220
++#define mmDEBUG0 0x1280
++#define mmDEBUG1 0x1284
++#define mmDEBUG2 0x1288
++#define mmDEBUG3 0x128C
++#define mmDEBUG4 0x1290
++#define mmDEBUG5 0x1294
++#define mmDEBUG6 0x1298
++#define mmDEBUG7 0x129C
++#define mmDEBUG8 0x12A0
++#define mmDEBUG9 0x12A4
++#define mmDEBUG10 0x12A8
++#define mmDEBUG11 0x12AC
++#define mmDEBUG12 0x12B0
++#define mmDEBUG13 0x12B4
++#define mmDEBUG14 0x12B8
++#define mmDEBUG15 0x12BC
++#define mmENG_CNTL 0x13E8
++#define mmENG_PERF_CNT 0x13F0
++/* Block GFX End: */
++
++/* Block IDCT Start: */
++#define mmIDCT_RUNS 0x0C00
++#define mmIDCT_LEVELS 0x0C04
++#define mmIDCT_CONTROL 0x0C3C
++#define mmIDCT_AUTH_CONTROL 0x0C08
++#define mmIDCT_AUTH 0x0C0C
++/* Block IDCT End: */
++
++/* Block MC Start: */
++#define mmMEM_CNTL 0x0180
++#define mmMEM_ARB 0x0184
++#define mmMC_FB_LOCATION 0x0188
++#define mmMEM_EXT_CNTL 0x018C
++#define mmMC_EXT_MEM_LOCATION 0x0190
++#define mmMEM_EXT_TIMING_CNTL 0x0194
++#define mmMEM_SDRAM_MODE_REG 0x0198
++#define mmMEM_IO_CNTL 0x019C
++#define mmMC_DEBUG 0x01A0
++#define mmMC_BIST_CTRL 0x01A4
++#define mmMC_BIST_COLLAR_READ 0x01A8
++#define mmTC_MISMATCH 0x01AC
++#define mmMC_PERF_MON_CNTL 0x01B0
++#define mmMC_PERF_COUNTERS 0x01B4
++/* Block MC End: */
++
++/* Block RBBM Start: */
++#define mmWAIT_UNTIL 0x1400
++#define mmISYNC_CNTL 0x1404
++#define mmRBBM_GUICNTL 0x1408
++#define mmRBBM_STATUS 0x0140
++#define mmRBBM_STATUS_alt_1 0x140C
++#define mmRBBM_CNTL 0x0144
++#define mmRBBM_SOFT_RESET 0x0148
++#define mmNQWAIT_UNTIL 0x0150
++#define mmRBBM_DEBUG 0x016C
++#define mmRBBM_CMDFIFO_ADDR 0x0170
++#define mmRBBM_CMDFIFO_DATAL 0x0174
++#define mmRBBM_CMDFIFO_DATAH 0x0178
++#define mmRBBM_CMDFIFO_STAT 0x017C
++/* Block RBBM End: */
++
++/* Block CG Start: */
++#define mmCLK_PIN_CNTL 0x0080
++#define mmPLL_REF_FB_DIV 0x0084
++#define mmPLL_CNTL 0x0088
++#define mmSCLK_CNTL 0x008C
++#define mmPCLK_CNTL 0x0090
++#define mmCLK_TEST_CNTL 0x0094
++#define mmPWRMGT_CNTL 0x0098
++#define mmPWRMGT_STATUS 0x009C
++/* Block CG End: */
++
++/* default value definitions */
++#define defCHIP_ID 0x00001002
++#define defREVISION_ID 0x00000000
++#define defWRAP_BUF_A 0x01000000
++#define defWRAP_BUF_B 0x01000000
++#define defWRAP_TOP_DIR 0x00000000
++#define defWRAP_START_DIR 0x00000000
++//#define defCIF_CNTL 0x00082900
++#define defCIF_CNTL 0x00182d00 //??updated by Tobey Z.for Sharp,Oct11,2002
++#define defCFGREG_BASE 0x00000000
++//#define defCIF_IO 0x000c0800
++#define defCIF_IO 0x000C0902 //??updated by Tobey Z.for Sharp,Oct11,2002
++#define defCIF_READ_DBG 0x00018223
++#define defCIF_WRITE_DBG 0x00002100
++#define defIND_ADDR_A_0 0x00000000
++#define defIND_ADDR_A_1 0x00000000
++#define defIND_ADDR_A_2 0x00000000
++#define defIND_DATA_A 0x00000000
++#define defREG_BASE 0x00000001
++#define defINTF_CNTL 0x00000011
++#define defSTATUS 0x00000000
++#define defCPU_DEFAULTS 0x00000006
++#define defIND_ADDR_B_0 0x00000000
++#define defIND_ADDR_B_1 0x00000000
++#define defIND_ADDR_B_2 0x00000000
++#define defIND_DATA_B 0x00000000
++#define defPM4_RPTR 0x00000000
++#define defSCRATCH 0x00000000
++#define defPM4_WRPTR_0 0x00000000
++#define defPM4_WRPTR_1 0x00000000
++#define defCP_RB_CNTL 0x00000000
++#define defCP_RB_BASE 0x00000000
++#define defCP_RB_RPTR_ADDR 0x00000000
++#define defCP_RB_RPTR 0x00000000
++#define defCP_RB_RPTR_WR 0x00000000
++#define defCP_RB_WPTR 0x00000000
++#define defCP_IB_BASE 0x00000000
++#define defCP_IB_BUFSZ 0x00000000
++#define defCP_CSQ_CNTL 0x00000000
++#define defCP_CSQ_APER_PRIMARY 0x00000000
++#define defCP_CSQ_APER_INDIRECT 0x00000000
++#define defCP_ME_CNTL 0x40000000
++#define defCP_ME_RAM_ADDR 0x00000000
++#define defCP_ME_RAM_RADDR 0x00000000
++#define defCP_ME_RAM_DATAH 0x00000000
++#define defCP_ME_RAM_DATAL 0x00000000
++#define defCP_DEBUG 0x00000000
++#define defSCRATCH_REG0 0x00000000
++#define defSCRATCH_REG1 0x00000000
++#define defSCRATCH_REG2 0x00000000
++#define defSCRATCH_REG3 0x00000000
++#define defSCRATCH_REG4 0x00000000
++#define defSCRATCH_REG5 0x00000000
++#define defSCRATCH_UMSK 0x00000000
++#define defSCRATCH_ADDR 0x00000000
++#define defCP_CSQ_ADDR 0x00000000
++#define defCP_CSQ_DATA 0x00000000
++#define defCP_CSQ_STAT 0x00000000
++#define defCP_STAT 0x00000000
++#define defGEN_INT_CNTL 0x00000000
++#define defGEN_INT_STATUS_rd 0x00080000
++#define defGEN_INT_STATUS_wr 0x00000000
++#define defLCD_FORMAT 0x00000000
++#define defGRAPHIC_CTRL 0x00000000
++#define defGRAPHIC_OFFSET 0x00000000
++#define defGRAPHIC_PITCH 0x00000000
++#define defCRTC_TOTAL 0x00000000
++#define defACTIVE_H_DISP 0x00000000
++#define defACTIVE_V_DISP 0x00000000
++#define defGRAPHIC_H_DISP 0x00000000
++#define defGRAPHIC_V_DISP 0x00000000
++#define defVIDEO_CTRL 0x00000000
++#define defGRAPHIC_KEY 0x00000000
++#define defVIDEO_Y_OFFSET 0x00000000
++#define defVIDEO_Y_PITCH 0x00000000
++#define defVIDEO_U_OFFSET 0x00000000
++#define defVIDEO_U_PITCH 0x00000000
++#define defVIDEO_V_OFFSET 0x00000000
++#define defVIDEO_V_PITCH 0x00000000
++#define defVIDEO_H_POS 0x00000000
++#define defVIDEO_V_POS 0x00000000
++#define defBRIGHTNESS_CNTL 0x00000000
++#define defCURSOR1_OFFSET 0x00000000
++#define defCURSOR1_H_POS 0x00000000
++#define defCURSOR1_V_POS 0x00000000
++#define defCURSOR1_COLOR0 0x00000000
++#define defCURSOR1_COLOR1 0x00000000
++#define defCURSOR2_OFFSET 0x00000000
++#define defCURSOR2_H_POS 0x00000000
++#define defCURSOR2_V_POS 0x00000000
++#define defCURSOR2_COLOR0 0x00000000
++#define defCURSOR2_COLOR1 0x00000000
++#define defDISP_INT_CNTL 0x00000000
++#define defCRTC_SS 0x00000000
++#define defCRTC_LS 0x00000000
++#define defCRTC_REV 0x00000000
++#define defCRTC_DCLK 0x00000000
++#define defCRTC_GS 0x00000000
++#define defCRTC_VPOS_GS 0x00000000
++#define defCRTC_GCLK 0x00000000
++#define defCRTC_GOE 0x00000000
++#define defCRTC_FRAME 0x00000000
++#define defCRTC_FRAME_VPOS 0x00000000
++#define defGPIO_DATA 0x00000000
++#define defGPIO_CNTL1 0xff00ff00
++#define defGPIO_CNTL2 0x00000000
++#define defLCDD_CNTL1 0x0000ffff
++#define defLCDD_CNTL2 0x00000000
++#define defGENLCD_CNTL1 0x00aaa002
++#define defGENLCD_CNTL2 0x00000002
++#define defDISP_DEBUG 0x00000000
++#define defDISP_DB_BUF_CNTL_rd 0x00000000
++#define defDISP_DB_BUF_CNTL_wr 0x00000000
++#define defDISP_CRC_SIG 0x00000000
++#define defCRTC_DEFAULT_COUNT 0x00000000
++#define defLCD_BACKGROUND_COLOR 0x00000000
++#define defCRTC_PS2 0x00000000
++#define defCRTC_PS2_VPOS 0x00000000
++#define defCRTC_PS1_ACTIVE 0x00000000
++#define defCRTC_PS1_NACTIVE 0x00000000
++#define defCRTC_GCLK_EXT 0x00000000
++#define defCRTC_ALW 0x00000000
++#define defCRTC_ALW_VPOS 0x00000000
++#define defCRTC_PSK 0x00000000
++#define defCRTC_PSK_HPOS 0x00000000
++#define defCRTC_CV4_START 0x00000000
++#define defCRTC_CV4_END 0x00000000
++#define defCRTC_CV4_HPOS 0x00000000
++#define defCRTC_ECK 0x00000000
++#define defREFRESH_CNTL 0x00000000
++#define defGENLCD_CNTL3 0x000002aa
++#define defGPIO_DATA2 0x00000000
++#define defGPIO_CNTL3 0x00000000
++#define defGPIO_CNTL4 0x00000000
++#define defCHIP_STRAP 0x00000000
++#define defDISP_DEBUG2 0x00000000
++#define defDEBUG_BUS_CNTL 0x00000000
++#define defGAMMA_VALUE1 0x00000000
++#define defGAMMA_VALUE2 0x00000000
++#define defGAMMA_SLOPE 0x00000000
++#define defGEN_STATUS 0x00000000
++#define defHW_INT 0x00000000
++#define defDST_OFFSET 0x00000000
++#define defDST_PITCH 0x00000000
++#define defDST_PITCH_OFFSET 0x00000000
++#define defDST_X 0x00000000
++#define defDST_Y 0x00000000
++#define defDST_X_Y 0x00000000
++#define defDST_Y_X 0x00000000
++#define defDST_WIDTH 0x00000000
++#define defDST_HEIGHT 0x00000000
++#define defDST_WIDTH_HEIGHT 0x00000000
++#define defDST_HEIGHT_WIDTH 0x00000000
++#define defDST_HEIGHT_WIDTH_8 0x00000000
++#define defDST_HEIGHT_Y 0x00000000
++#define defDST_WIDTH_X 0x00000000
++#define defDST_WIDTH_X_INCY 0x00000000
++#define defDST_LINE_START 0x00000000
++#define defDST_LINE_END 0x00000000
++#define defBRUSH_OFFSET 0x00000000
++#define defBRUSH_Y_X 0x00000000
++#define defDP_BRUSH_FRGD_CLR 0x00000000
++#define defDP_BRUSH_BKGD_CLR 0x00000000
++#define defSRC2_OFFSET 0x00000000
++#define defSRC2_PITCH 0x00000000
++#define defSRC2_PITCH_OFFSET 0x00000000
++#define defSRC2_X 0x00000000
++#define defSRC2_Y 0x00000000
++#define defSRC2_X_Y 0x00000000
++#define defSRC2_WIDTH 0x00000000
++#define defSRC2_HEIGHT 0x00000000
++#define defSRC2_INC 0x00000000
++#define defSRC_OFFSET 0x00000000
++#define defSRC_PITCH 0x00000000
++#define defSRC_PITCH_OFFSET 0x00000000
++#define defSRC_X 0x00000000
++#define defSRC_Y 0x00000000
++#define defSRC_X_Y 0x00000000
++#define defSRC_Y_X 0x00000000
++#define defSRC_WIDTH 0x00000000
++#define defSRC_HEIGHT 0x00000000
++#define defSRC_INC 0x00000000
++#define defHOST_DATA0 0x00000000
++#define defHOST_DATA1 0x00000000
++#define defHOST_DATA2 0x00000000
++#define defHOST_DATA3 0x00000000
++#define defHOST_DATA4 0x00000000
++#define defHOST_DATA5 0x00000000
++#define defHOST_DATA6 0x00000000
++#define defHOST_DATA7 0x00000000
++#define defHOST_DATA_LAST 0x00000000
++#define defDP_SRC_FRGD_CLR 0x00000000
++#define defDP_SRC_BKGD_CLR 0x00000000
++#define defSC_LEFT 0x00000000
++#define defSC_RIGHT 0x00000000
++#define defSC_TOP 0x00000000
++#define defSC_BOTTOM 0x00000000
++#define defSRC_SC_RIGHT 0x00000000
++#define defSRC_SC_BOTTOM 0x00000000
++#define defDP_CNTL 0x00000000
++#define defDP_CNTL_DST_DIR 0x00000000
++#define defDP_DATATYPE 0x00000000
++#define defDP_MIX 0x00000000
++#define defDP_WRITE_MSK 0x00000000
++#define defCLR_CMP_CLR_SRC 0x00000000
++#define defCLR_CMP_CLR_DST 0x00000000
++#define defCLR_CMP_CNTL 0x00000000
++#define defCLR_CMP_MSK 0x00000000
++#define defDEFAULT_PITCH_OFFSET 0x00000000
++#define defDEFAULT_SC_BOTTOM_RIGHT 0x00000000
++#define defDEFAULT2_SC_BOTTOM_RIGHT 0x00000000
++#define defREF1_PITCH_OFFSET 0x00000000
++#define defREF2_PITCH_OFFSET 0x00000000
++#define defREF3_PITCH_OFFSET 0x00000000
++#define defREF4_PITCH_OFFSET 0x00000000
++#define defREF5_PITCH_OFFSET 0x00000000
++#define defREF6_PITCH_OFFSET 0x00000000
++#define defDP_GUI_MASTER_CNTL 0x00000000
++#define defSC_TOP_LEFT 0x00000000
++#define defSC_BOTTOM_RIGHT 0x00000000
++#define defSRC_SC_BOTTOM_RIGHT 0x00000000
++#define defGLOBAL_ALPHA 0x00000000
++#define defFILTER_COEF 0x00000000
++#define defMVC_CNTL_START 0x00000000
++#define defE2_ARITHMETIC_CNTL 0x00000000
++#define defDEBUG0 0x00000000
++#define defDEBUG1 0x00000000
++#define defDEBUG2 0x00000000
++#define defDEBUG3 0x00000000
++#define defDEBUG4 0x00000000
++#define defDEBUG5 0x00000000
++#define defDEBUG6 0x00000000
++#define defDEBUG7 0x00000000
++#define defDEBUG8 0x00000000
++#define defDEBUG9 0x00000000
++#define defDEBUG10 0x00000000
++#define defDEBUG11 0x00000000
++#define defDEBUG12 0x00000000
++#define defDEBUG13 0x00000000
++#define defDEBUG14 0x00000000
++#define defDEBUG15 0x00000000
++#define defENG_CNTL 0x00000003
++#define defENG_PERF_CNT 0x00000000
++#define defIDCT_RUNS 0x00000000
++#define defIDCT_LEVELS 0x00000000
++#define defIDCT_CONTROL 0x00000000
++#define defIDCT_AUTH_CONTROL 0x00000000
++#define defIDCT_AUTH 0x00000000
++#define defMEM_CNTL 0x00000006
++#define defMEM_ARB 0x00000000
++#define defMC_FB_LOCATION 0x00ff0000
++#define defMEM_EXT_CNTL 0x00040010
++#define defMC_EXT_MEM_LOCATION 0x07ff0000
++#define defMEM_EXT_TIMING_CNTL 0x00140c73
++#define defMEM_SDRAM_MODE_REG 0x00050000
++#define defMEM_IO_CNTL 0x00ff00ff
++#define defMC_DEBUG 0x00000000
++#define defMC_BIST_CTRL 0x00000000
++#define defMC_BIST_COLLAR_READ 0x00000000
++#define defTC_MISMATCH 0x00000000
++#define defMC_PERF_MON_CNTL 0x00000000
++#define defMC_PERF_COUNTERS 0x00000000
++#define defWAIT_UNTIL 0xc5cdcdcd
++#define defISYNC_CNTL 0x00000000
++#define defRBBM_GUICNTL 0x00000000
++#define defRBBM_STATUS 0x81cdcd40
++#define defRBBM_CNTL 0x0000000f
++#define defRBBM_SOFT_RESET 0x00000000
++#define defNQWAIT_UNTIL 0x00000001
++#define defRBBM_DEBUG 0x00000000
++#define defRBBM_CMDFIFO_ADDR 0x0000000d
++#define defRBBM_CMDFIFO_DATAL 0xcdcdcdcd
++#define defRBBM_CMDFIFO_DATAH 0x00000dcd
++#define defRBBM_CMDFIFO_STAT 0x00000d0d
++#define defCLK_PIN_CNTL 0x0000003f
++#define defPLL_REF_FB_DIV 0x5a500000
++#define defPLL_CNTL 0x4b000203
++#define defSCLK_CNTL 0x00ff0300
++#define defPCLK_CNTL 0x00010000
++#define defCLK_TEST_CNTL 0x00000000
++#define defPWRMGT_CNTL 0x00000004
++#define defPWRMGT_STATUS 0x00000001
++
++#define CFG_BASE_BOOT_DEFAULT 0x0
++#define CFG_BASE_VALUE 0x0
++#define REG_BASE_BOOT_DEFAULT 0x01
++#define REG_BASE_VALUE 0x10000
++#define MEM_INT_BASE_VALUE 0x100000
++#define MEM_INT_TOP_VALUE_W100 0x15ffff
++#define MEM_EXT_BASE_VALUE 0x800000
++#define MEM_EXT_TOP_VALUE 0x9fffff
++#define WRAP_BUF_BASE_VALUE 0x80000
++#define WRAP_BUF_TOP_VALUE 0xbffff
++
++
++/* data structure definitions */
++
++typedef struct _chip_id_t {
++ unsigned long vendor_id : 16;
++ unsigned long device_id : 16;
++ } chip_id_t;
++
++typedef union {
++ unsigned long val : 32;
++ chip_id_t f;
++} chip_id_u;
++
++typedef struct _revision_id_t {
++ unsigned long minor_rev_id : 4;
++ unsigned long major_rev_id : 4;
++ unsigned long : 24;
++ } revision_id_t;
++
++typedef union {
++ unsigned long val : 32;
++ revision_id_t f;
++} revision_id_u;
++
++typedef struct _wrap_buf_a_t {
++ unsigned long offset_addr_a : 24;
++ unsigned long block_size_a : 3;
++ unsigned long : 5;
++ } wrap_buf_a_t;
++
++typedef union {
++ unsigned long val : 32;
++ wrap_buf_a_t f;
++} wrap_buf_a_u;
++
++typedef struct _wrap_buf_b_t {
++ unsigned long offset_addr_b : 24;
++ unsigned long block_size_b : 3;
++ unsigned long : 5;
++ } wrap_buf_b_t;
++
++typedef union {
++ unsigned long val : 32;
++ wrap_buf_b_t f;
++} wrap_buf_b_u;
++
++typedef struct _wrap_top_dir_t {
++ unsigned long top_addr : 23;
++ unsigned long : 9;
++ } wrap_top_dir_t;
++
++typedef union {
++ unsigned long val : 32;
++ wrap_top_dir_t f;
++} wrap_top_dir_u;
++
++typedef struct _wrap_start_dir_t {
++ unsigned long start_addr : 23;
++ unsigned long : 9;
++ } wrap_start_dir_t;
++
++typedef union {
++ unsigned long val : 32;
++ wrap_start_dir_t f;
++} wrap_start_dir_u;
++
++typedef struct _cif_cntl_t {
++ unsigned long swap_reg : 2;
++ unsigned long swap_fbuf_1 : 2;
++ unsigned long swap_fbuf_2 : 2;
++ unsigned long swap_fbuf_3 : 2;
++ unsigned long pmi_int_disable : 1;
++ unsigned long pmi_schmen_disable : 1;
++ unsigned long intb_oe : 1;
++ unsigned long en_wait_to_compensate_dq_prop_dly : 1;
++ unsigned long compensate_wait_rd_size : 2;
++ unsigned long wait_asserted_timeout_val : 2;
++ unsigned long wait_masked_val : 2;
++ unsigned long en_wait_timeout : 1;
++ unsigned long en_one_clk_setup_before_wait : 1;
++ unsigned long interrupt_active_high : 1;
++ unsigned long en_overwrite_straps : 1;
++ unsigned long strap_wait_active_hi : 1;
++ unsigned long lat_busy_count : 2;
++ unsigned long lat_rd_pm4_sclk_busy : 1;
++ unsigned long dis_system_bits : 1;
++ unsigned long dis_mr : 1;
++ unsigned long cif_spare_1 : 4;
++ } cif_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ cif_cntl_t f;
++} cif_cntl_u;
++
++typedef struct _cfgreg_base_t {
++ unsigned long cfgreg_base : 24;
++ unsigned long : 8;
++ } cfgreg_base_t;
++
++typedef union {
++ unsigned long val : 32;
++ cfgreg_base_t f;
++} cfgreg_base_u;
++
++typedef struct _cif_io_t {
++ unsigned long dq_srp : 1;
++ unsigned long dq_srn : 1;
++ unsigned long dq_sp : 4;
++ unsigned long dq_sn : 4;
++ unsigned long waitb_srp : 1;
++ unsigned long waitb_srn : 1;
++ unsigned long waitb_sp : 4;
++ unsigned long waitb_sn : 4;
++ unsigned long intb_srp : 1;
++ unsigned long intb_srn : 1;
++ unsigned long intb_sp : 4;
++ unsigned long intb_sn : 4;
++ unsigned long : 2;
++ } cif_io_t;
++
++typedef union {
++ unsigned long val : 32;
++ cif_io_t f;
++} cif_io_u;
++
++typedef struct _cif_read_dbg_t {
++ unsigned long unpacker_pre_fetch_trig_gen : 2;
++ unsigned long dly_second_rd_fetch_trig : 1;
++ unsigned long rst_rd_burst_id : 1;
++ unsigned long dis_rd_burst_id : 1;
++ unsigned long en_block_rd_when_packer_is_not_emp : 1;
++ unsigned long dis_pre_fetch_cntl_sm : 1;
++ unsigned long rbbm_chrncy_dis : 1;
++ unsigned long rbbm_rd_after_wr_lat : 2;
++ unsigned long dis_be_during_rd : 1;
++ unsigned long one_clk_invalidate_pulse : 1;
++ unsigned long dis_chnl_priority : 1;
++ unsigned long rst_read_path_a_pls : 1;
++ unsigned long rst_read_path_b_pls : 1;
++ unsigned long dis_reg_rd_fetch_trig : 1;
++ unsigned long dis_rd_fetch_trig_from_ind_addr : 1;
++ unsigned long dis_rd_same_byte_to_trig_fetch : 1;
++ unsigned long dis_dir_wrap : 1;
++ unsigned long dis_ring_buf_to_force_dec : 1;
++ unsigned long dis_addr_comp_in_16bit : 1;
++ unsigned long clr_w : 1;
++ unsigned long err_rd_tag_is_3 : 1;
++ unsigned long err_load_when_ful_a : 1;
++ unsigned long err_load_when_ful_b : 1;
++ unsigned long : 7;
++ } cif_read_dbg_t;
++
++typedef union {
++ unsigned long val : 32;
++ cif_read_dbg_t f;
++} cif_read_dbg_u;
++
++typedef struct _cif_write_dbg_t {
++ unsigned long packer_timeout_count : 2;
++ unsigned long en_upper_load_cond : 1;
++ unsigned long en_chnl_change_cond : 1;
++ unsigned long dis_addr_comp_cond : 1;
++ unsigned long dis_load_same_byte_addr_cond : 1;
++ unsigned long dis_timeout_cond : 1;
++ unsigned long dis_timeout_during_rbbm : 1;
++ unsigned long dis_packer_ful_during_rbbm_timeout : 1;
++ unsigned long en_dword_split_to_rbbm : 1;
++ unsigned long en_dummy_val : 1;
++ unsigned long dummy_val_sel : 1;
++ unsigned long mask_pm4_wrptr_dec : 1;
++ unsigned long dis_mc_clean_cond : 1;
++ unsigned long err_two_reqi_during_ful : 1;
++ unsigned long err_reqi_during_idle_clk : 1;
++ unsigned long err_global : 1;
++ unsigned long en_wr_buf_dbg_load : 1;
++ unsigned long en_wr_buf_dbg_path : 1;
++ unsigned long sel_wr_buf_byte : 3;
++ unsigned long dis_rd_flush_wr : 1;
++ unsigned long dis_packer_ful_cond : 1;
++ unsigned long dis_invalidate_by_ops_chnl : 1;
++ unsigned long en_halt_when_reqi_err : 1;
++ unsigned long cif_spare_2 : 5;
++ unsigned long : 1;
++ } cif_write_dbg_t;
++
++typedef union {
++ unsigned long val : 32;
++ cif_write_dbg_t f;
++} cif_write_dbg_u;
++
++typedef struct _ind_addr_a_0_t {
++ unsigned char ind_addr_a_0 : 8;
++ } ind_addr_a_0_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_a_0_t f;
++} ind_addr_a_0_u;
++
++typedef struct _ind_addr_a_1_t {
++ unsigned char ind_addr_a_1 : 8;
++ } ind_addr_a_1_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_a_1_t f;
++} ind_addr_a_1_u;
++
++typedef struct _ind_addr_a_2_t {
++ unsigned char ind_addr_a_2 : 8;
++ } ind_addr_a_2_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_a_2_t f;
++} ind_addr_a_2_u;
++
++typedef struct _ind_data_a_t {
++ unsigned char ind_data_a : 8;
++ } ind_data_a_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_data_a_t f;
++} ind_data_a_u;
++
++typedef struct _reg_base_t {
++ unsigned char reg_base : 8;
++ } reg_base_t;
++
++typedef union {
++ unsigned char val : 8;
++ reg_base_t f;
++} reg_base_u;
++
++typedef struct _intf_cntl_t {
++ unsigned char ad_inc_a : 1;
++ unsigned char ring_buf_a : 1;
++ unsigned char rd_fetch_trigger_a : 1;
++ unsigned char rd_data_rdy_a : 1;
++ unsigned char ad_inc_b : 1;
++ unsigned char ring_buf_b : 1;
++ unsigned char rd_fetch_trigger_b : 1;
++ unsigned char rd_data_rdy_b : 1;
++ } intf_cntl_t;
++
++typedef union {
++ unsigned char val : 8;
++ intf_cntl_t f;
++} intf_cntl_u;
++
++typedef struct _status_t {
++ unsigned char wr_fifo_available_space : 2;
++ unsigned char fbuf_wr_pipe_emp : 1;
++ unsigned char soft_reset : 1;
++ unsigned char system_pwm_mode : 2;
++ unsigned char mem_access_dis : 1;
++ unsigned char en_pre_fetch : 1;
++ } status_t;
++
++typedef union {
++ unsigned char val : 8;
++ status_t f;
++} status_u;
++
++typedef struct _cpu_defaults_t {
++ unsigned char unpack_rd_data : 1;
++ unsigned char access_ind_addr_a : 1;
++ unsigned char access_ind_addr_b : 1;
++ unsigned char access_scratch_reg : 1;
++ unsigned char pack_wr_data : 1;
++ unsigned char transition_size : 1;
++ unsigned char en_read_buf_mode : 1;
++ unsigned char rd_fetch_scratch : 1;
++ } cpu_defaults_t;
++
++typedef union {
++ unsigned char val : 8;
++ cpu_defaults_t f;
++} cpu_defaults_u;
++
++typedef struct _ind_addr_b_0_t {
++ unsigned char ind_addr_b_0 : 8;
++ } ind_addr_b_0_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_b_0_t f;
++} ind_addr_b_0_u;
++
++typedef struct _ind_addr_b_1_t {
++ unsigned char ind_addr_b_1 : 8;
++ } ind_addr_b_1_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_b_1_t f;
++} ind_addr_b_1_u;
++
++typedef struct _ind_addr_b_2_t {
++ unsigned char ind_addr_b_2 : 8;
++ } ind_addr_b_2_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_addr_b_2_t f;
++} ind_addr_b_2_u;
++
++typedef struct _ind_data_b_t {
++ unsigned char ind_data_b : 8;
++ } ind_data_b_t;
++
++typedef union {
++ unsigned char val : 8;
++ ind_data_b_t f;
++} ind_data_b_u;
++
++typedef struct _pm4_rptr_t {
++ unsigned char pm4_rptr : 8;
++ } pm4_rptr_t;
++
++typedef union {
++ unsigned char val : 8;
++ pm4_rptr_t f;
++} pm4_rptr_u;
++
++typedef struct _scratch_t {
++ unsigned char scratch : 8;
++ } scratch_t;
++
++typedef union {
++ unsigned char val : 8;
++ scratch_t f;
++} scratch_u;
++
++typedef struct _pm4_wrptr_0_t {
++ unsigned char pm4_wrptr_0 : 8;
++ } pm4_wrptr_0_t;
++
++typedef union {
++ unsigned char val : 8;
++ pm4_wrptr_0_t f;
++} pm4_wrptr_0_u;
++
++typedef struct _pm4_wrptr_1_t {
++ unsigned char pm4_wrptr_1 : 6;
++ unsigned char rd_fetch_pm4_rptr : 1;
++ unsigned char wrptr_atomic_update_w : 1;
++ } pm4_wrptr_1_t;
++
++typedef union {
++ unsigned char val : 8;
++ pm4_wrptr_1_t f;
++} pm4_wrptr_1_u;
++
++typedef struct _cp_rb_cntl_t {
++ unsigned long rb_bufsz : 6;
++ unsigned long : 2;
++ unsigned long rb_blksz : 6;
++ unsigned long : 2;
++ unsigned long buf_swap : 2;
++ unsigned long max_fetch : 2;
++ unsigned long : 7;
++ unsigned long rb_no_update : 1;
++ unsigned long : 3;
++ unsigned long rb_rptr_wr_ena : 1;
++ } cp_rb_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_cntl_t f;
++} cp_rb_cntl_u;
++
++typedef struct _cp_rb_base_t {
++ unsigned long : 2;
++ unsigned long rb_base : 22;
++ unsigned long : 8;
++ } cp_rb_base_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_base_t f;
++} cp_rb_base_u;
++
++typedef struct _cp_rb_rptr_addr_t {
++ unsigned long rb_rptr_swap : 2;
++ unsigned long rb_rptr_addr : 22;
++ unsigned long : 8;
++ } cp_rb_rptr_addr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_rptr_addr_t f;
++} cp_rb_rptr_addr_u;
++
++typedef struct _cp_rb_rptr_t {
++ unsigned long rb_rptr : 23;
++ unsigned long : 9;
++ } cp_rb_rptr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_rptr_t f;
++} cp_rb_rptr_u;
++
++typedef struct _cp_rb_rptr_wr_t {
++ unsigned long rb_rptr_wr : 23;
++ unsigned long : 9;
++ } cp_rb_rptr_wr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_rptr_wr_t f;
++} cp_rb_rptr_wr_u;
++
++typedef struct _cp_rb_wptr_t {
++ unsigned long rb_wptr : 23;
++ unsigned long : 9;
++ } cp_rb_wptr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_rb_wptr_t f;
++} cp_rb_wptr_u;
++
++typedef struct _cp_ib_base_t {
++ unsigned long : 2;
++ unsigned long ib_base : 22;
++ unsigned long : 8;
++ } cp_ib_base_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_ib_base_t f;
++} cp_ib_base_u;
++
++typedef struct _cp_ib_bufsz_t {
++ unsigned long ib_bufsz : 23;
++ unsigned long : 9;
++ } cp_ib_bufsz_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_ib_bufsz_t f;
++} cp_ib_bufsz_u;
++
++typedef struct _cp_csq_cntl_t {
++ unsigned long csq_cnt_primary : 8;
++ unsigned long csq_cnt_indirect : 8;
++ unsigned long : 12;
++ unsigned long csq_mode : 4;
++ } cp_csq_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_cntl_t f;
++} cp_csq_cntl_u;
++
++typedef struct _cp_csq_aper_primary_t {
++ unsigned long cp_csq_aper_primary : 32;
++ } cp_csq_aper_primary_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_aper_primary_t f;
++} cp_csq_aper_primary_u;
++
++typedef struct _cp_csq_aper_indirect_t {
++ unsigned long cp_csq_aper_indirect : 32;
++ } cp_csq_aper_indirect_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_aper_indirect_t f;
++} cp_csq_aper_indirect_u;
++
++typedef struct _cp_me_cntl_t {
++ unsigned long me_stat : 16;
++ unsigned long me_statmux : 5;
++ unsigned long : 8;
++ unsigned long me_busy : 1;
++ unsigned long me_mode : 1;
++ unsigned long me_step : 1;
++ } cp_me_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_me_cntl_t f;
++} cp_me_cntl_u;
++
++typedef struct _cp_me_ram_addr_t {
++ unsigned long me_ram_addr : 8;
++ unsigned long : 24;
++ } cp_me_ram_addr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_me_ram_addr_t f;
++} cp_me_ram_addr_u;
++
++typedef struct _cp_me_ram_raddr_t {
++ unsigned long me_ram_raddr : 8;
++ unsigned long : 24;
++ } cp_me_ram_raddr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_me_ram_raddr_t f;
++} cp_me_ram_raddr_u;
++
++typedef struct _cp_me_ram_datah_t {
++ unsigned long me_ram_datah : 6;
++ unsigned long : 26;
++ } cp_me_ram_datah_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_me_ram_datah_t f;
++} cp_me_ram_datah_u;
++
++typedef struct _cp_me_ram_datal_t {
++ unsigned long me_ram_datal : 32;
++ } cp_me_ram_datal_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_me_ram_datal_t f;
++} cp_me_ram_datal_u;
++
++typedef struct _cp_debug_t {
++ unsigned long cp_debug : 32;
++ } cp_debug_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_debug_t f;
++} cp_debug_u;
++
++typedef struct _scratch_reg0_t {
++ unsigned long scratch_reg0 : 32;
++ } scratch_reg0_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg0_t f;
++} scratch_reg0_u;
++
++typedef struct _scratch_reg1_t {
++ unsigned long scratch_reg1 : 32;
++ } scratch_reg1_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg1_t f;
++} scratch_reg1_u;
++
++typedef struct _scratch_reg2_t {
++ unsigned long scratch_reg2 : 32;
++ } scratch_reg2_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg2_t f;
++} scratch_reg2_u;
++
++typedef struct _scratch_reg3_t {
++ unsigned long scratch_reg3 : 32;
++ } scratch_reg3_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg3_t f;
++} scratch_reg3_u;
++
++typedef struct _scratch_reg4_t {
++ unsigned long scratch_reg4 : 32;
++ } scratch_reg4_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg4_t f;
++} scratch_reg4_u;
++
++typedef struct _scratch_reg5_t {
++ unsigned long scratch_reg5 : 32;
++ } scratch_reg5_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_reg5_t f;
++} scratch_reg5_u;
++
++typedef struct _scratch_umsk_t {
++ unsigned long scratch_umsk : 6;
++ unsigned long : 10;
++ unsigned long scratch_swap : 2;
++ unsigned long : 14;
++ } scratch_umsk_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_umsk_t f;
++} scratch_umsk_u;
++
++typedef struct _scratch_addr_t {
++ unsigned long : 5;
++ unsigned long scratch_addr : 27;
++ } scratch_addr_t;
++
++typedef union {
++ unsigned long val : 32;
++ scratch_addr_t f;
++} scratch_addr_u;
++
++typedef struct _cp_csq_addr_t {
++ unsigned long : 2;
++ unsigned long csq_addr : 8;
++ unsigned long : 22;
++ } cp_csq_addr_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_addr_t f;
++} cp_csq_addr_u;
++
++typedef struct _cp_csq_data_t {
++ unsigned long csq_data : 32;
++ } cp_csq_data_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_data_t f;
++} cp_csq_data_u;
++
++typedef struct _cp_csq_stat_t {
++ unsigned long csq_rptr_primary : 8;
++ unsigned long csq_wptr_primary : 8;
++ unsigned long csq_rptr_indirect : 8;
++ unsigned long csq_wptr_indirect : 8;
++ } cp_csq_stat_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_csq_stat_t f;
++} cp_csq_stat_u;
++
++typedef struct _cp_stat_t {
++ unsigned long mru_busy : 1;
++ unsigned long mwu_busy : 1;
++ unsigned long rsiu_busy : 1;
++ unsigned long rciu_busy : 1;
++ unsigned long : 5;
++ unsigned long csf_primary_busy : 1;
++ unsigned long csf_indirect_busy : 1;
++ unsigned long csq_primary_busy : 1;
++ unsigned long csq_indirect_busy : 1;
++ unsigned long csi_busy : 1;
++ unsigned long : 14;
++ unsigned long guidma_busy : 1;
++ unsigned long viddma_busy : 1;
++ unsigned long cmdstrm_busy : 1;
++ unsigned long cp_busy : 1;
++ } cp_stat_t;
++
++typedef union {
++ unsigned long val : 32;
++ cp_stat_t f;
++} cp_stat_u;
++
++typedef struct _gen_int_cntl_t {
++ unsigned long crtc_vblank_mask : 1;
++ unsigned long crtc_vline_mask : 1;
++ unsigned long crtc_hwint1_mask : 1;
++ unsigned long crtc_hwint2_mask : 1;
++ unsigned long : 15;
++ unsigned long gui_idle_mask : 1;
++ unsigned long : 8;
++ unsigned long pm4_idle_int_mask : 1;
++ unsigned long dvi_i2c_int_mask : 1;
++ unsigned long : 2;
++ } gen_int_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ gen_int_cntl_t f;
++} gen_int_cntl_u;
++
++typedef struct _gen_int_status_rd_t {
++ unsigned long crtc_vblank_stat : 1;
++ unsigned long crtc_vline_stat : 1;
++ unsigned long crtc_hwint1_stat : 1;
++ unsigned long crtc_hwint2_stat : 1;
++ unsigned long : 15;
++ unsigned long gui_idle_stat : 1;
++ unsigned long : 8;
++ unsigned long pm4_idle_int_stat : 1;
++ unsigned long dvi_i2c_int_stat : 1;
++ unsigned long : 2;
++ } gen_int_status_rd_t;
++
++typedef union {
++ unsigned long val : 32;
++ gen_int_status_rd_t f;
++} gen_int_status_rd_u;
++
++typedef struct _gen_int_status_wr_t {
++ unsigned long crtc_vblank_stat_ak : 1;
++ unsigned long crtc_vline_stat_ak : 1;
++ unsigned long crtc_hwint1_stat_ak : 1;
++ unsigned long crtc_hwint2_stat_ak : 1;
++ unsigned long : 15;
++ unsigned long gui_idle_stat_ak : 1;
++ unsigned long : 8;
++ unsigned long pm4_idle_int_ak : 1;
++ unsigned long dvi_i2c_int_ak : 1;
++ unsigned long : 2;
++ } gen_int_status_wr_t;
++
++typedef union {
++ unsigned long val : 32;
++ gen_int_status_wr_t f;
++} gen_int_status_wr_u;
++
++typedef struct _lcd_format_t {
++ unsigned long lcd_type : 4;
++ unsigned long color_to_mono : 1;
++ unsigned long data_inv : 1;
++ unsigned long stn_fm : 2;
++ unsigned long tft_fm : 2;
++ unsigned long scan_lr_en : 1;
++ unsigned long scan_ud_en : 1;
++ unsigned long pol_inv : 1;
++ unsigned long rst_fm : 1;
++ unsigned long yuv_to_rgb : 1;
++ unsigned long hr_tft : 1;
++ unsigned long ulc_panel : 1;
++ unsigned long : 15;
++ } lcd_format_t;
++
++typedef union {
++ unsigned long val : 32;
++ lcd_format_t f;
++} lcd_format_u;
++
++typedef struct _graphic_ctrl_t {
++ unsigned long color_depth : 3;
++ unsigned long portrait_mode : 2;
++ unsigned long low_power_on : 1;
++ unsigned long req_freq : 4;
++ unsigned long en_crtc : 1;
++ unsigned long en_graphic_req : 1;
++ unsigned long en_graphic_crtc : 1;
++ unsigned long total_req_graphic : 9;
++ unsigned long lcd_pclk_on : 1;
++ unsigned long lcd_sclk_on : 1;
++ unsigned long pclk_running : 1;
++ unsigned long sclk_running : 1;
++ unsigned long : 6;
++ } graphic_ctrl_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_ctrl_t f;
++} graphic_ctrl_u;
++
++typedef struct _graphic_offset_t {
++ unsigned long graphic_offset : 24;
++ unsigned long : 8;
++ } graphic_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_offset_t f;
++} graphic_offset_u;
++
++typedef struct _graphic_pitch_t {
++ unsigned long graphic_pitch : 11;
++ unsigned long : 21;
++ } graphic_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_pitch_t f;
++} graphic_pitch_u;
++
++typedef struct _crtc_total_t {
++ unsigned long crtc_h_total : 10;
++ unsigned long : 6;
++ unsigned long crtc_v_total : 10;
++ unsigned long : 6;
++ } crtc_total_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_total_t f;
++} crtc_total_u;
++
++typedef struct _active_h_disp_t {
++ unsigned long active_h_start : 10;
++ unsigned long : 6;
++ unsigned long active_h_end : 10;
++ unsigned long : 6;
++ } active_h_disp_t;
++
++typedef union {
++ unsigned long val : 32;
++ active_h_disp_t f;
++} active_h_disp_u;
++
++typedef struct _active_v_disp_t {
++ unsigned long active_v_start : 10;
++ unsigned long : 6;
++ unsigned long active_v_end : 10;
++ unsigned long : 6;
++ } active_v_disp_t;
++
++typedef union {
++ unsigned long val : 32;
++ active_v_disp_t f;
++} active_v_disp_u;
++
++typedef struct _graphic_h_disp_t {
++ unsigned long graphic_h_start : 10;
++ unsigned long : 6;
++ unsigned long graphic_h_end : 10;
++ unsigned long : 6;
++ } graphic_h_disp_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_h_disp_t f;
++} graphic_h_disp_u;
++
++typedef struct _graphic_v_disp_t {
++ unsigned long graphic_v_start : 10;
++ unsigned long : 6;
++ unsigned long graphic_v_end : 10;
++ unsigned long : 6;
++ } graphic_v_disp_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_v_disp_t f;
++} graphic_v_disp_u;
++
++typedef struct _video_ctrl_t {
++ unsigned long video_mode : 1;
++ unsigned long keyer_en : 1;
++ unsigned long en_video_req : 1;
++ unsigned long en_graphic_req_video : 1;
++ unsigned long en_video_crtc : 1;
++ unsigned long video_hor_exp : 2;
++ unsigned long video_ver_exp : 2;
++ unsigned long uv_combine : 1;
++ unsigned long total_req_video : 9;
++ unsigned long video_ch_sel : 1;
++ unsigned long video_portrait : 2;
++ unsigned long yuv2rgb_en : 1;
++ unsigned long yuv2rgb_option : 1;
++ unsigned long video_inv_hor : 1;
++ unsigned long video_inv_ver : 1;
++ unsigned long gamma_sel : 2;
++ unsigned long dis_limit : 1;
++ unsigned long en_uv_hblend : 1;
++ unsigned long rgb_gamma_sel : 2;
++ } video_ctrl_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_ctrl_t f;
++} video_ctrl_u;
++
++typedef struct _graphic_key_t {
++ unsigned long keyer_color : 16;
++ unsigned long keyer_mask : 16;
++ } graphic_key_t;
++
++typedef union {
++ unsigned long val : 32;
++ graphic_key_t f;
++} graphic_key_u;
++
++typedef struct _video_y_offset_t {
++ unsigned long y_offset : 24;
++ unsigned long : 8;
++ } video_y_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_y_offset_t f;
++} video_y_offset_u;
++
++typedef struct _video_y_pitch_t {
++ unsigned long y_pitch : 11;
++ unsigned long : 21;
++ } video_y_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_y_pitch_t f;
++} video_y_pitch_u;
++
++typedef struct _video_u_offset_t {
++ unsigned long u_offset : 24;
++ unsigned long : 8;
++ } video_u_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_u_offset_t f;
++} video_u_offset_u;
++
++typedef struct _video_u_pitch_t {
++ unsigned long u_pitch : 11;
++ unsigned long : 21;
++ } video_u_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_u_pitch_t f;
++} video_u_pitch_u;
++
++typedef struct _video_v_offset_t {
++ unsigned long v_offset : 24;
++ unsigned long : 8;
++ } video_v_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_v_offset_t f;
++} video_v_offset_u;
++
++typedef struct _video_v_pitch_t {
++ unsigned long v_pitch : 11;
++ unsigned long : 21;
++ } video_v_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_v_pitch_t f;
++} video_v_pitch_u;
++
++typedef struct _video_h_pos_t {
++ unsigned long video_h_start : 10;
++ unsigned long : 6;
++ unsigned long video_h_end : 10;
++ unsigned long : 6;
++ } video_h_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_h_pos_t f;
++} video_h_pos_u;
++
++typedef struct _video_v_pos_t {
++ unsigned long video_v_start : 10;
++ unsigned long : 6;
++ unsigned long video_v_end : 10;
++ unsigned long : 6;
++ } video_v_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ video_v_pos_t f;
++} video_v_pos_u;
++
++typedef struct _brightness_cntl_t {
++ unsigned long brightness : 7;
++ unsigned long : 25;
++ } brightness_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ brightness_cntl_t f;
++} brightness_cntl_u;
++
++typedef struct _cursor1_offset_t {
++ unsigned long cur1_offset : 24;
++ unsigned long cur1_x_offset : 4;
++ unsigned long cur1_y_offset : 4;
++ } cursor1_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor1_offset_t f;
++} cursor1_offset_u;
++
++typedef struct _cursor1_h_pos_t {
++ unsigned long cur1_h_start : 10;
++ unsigned long : 6;
++ unsigned long cur1_h_end : 10;
++ unsigned long : 5;
++ unsigned long cur1_en : 1;
++ } cursor1_h_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor1_h_pos_t f;
++} cursor1_h_pos_u;
++
++typedef struct _cursor1_v_pos_t {
++ unsigned long cur1_v_start : 10;
++ unsigned long : 6;
++ unsigned long cur1_v_end : 10;
++ unsigned long : 6;
++ } cursor1_v_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor1_v_pos_t f;
++} cursor1_v_pos_u;
++
++typedef struct _cursor1_color0_t {
++ unsigned long cur1_color0_r : 8;
++ unsigned long cur1_color0_g : 8;
++ unsigned long cur1_color0_b : 8;
++ unsigned long : 8;
++ } cursor1_color0_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor1_color0_t f;
++} cursor1_color0_u;
++
++typedef struct _cursor1_color1_t {
++ unsigned long cur1_color1_r : 8;
++ unsigned long cur1_color1_g : 8;
++ unsigned long cur1_color1_b : 8;
++ unsigned long : 8;
++ } cursor1_color1_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor1_color1_t f;
++} cursor1_color1_u;
++
++typedef struct _cursor2_offset_t {
++ unsigned long cur2_offset : 24;
++ unsigned long cur2_x_offset : 4;
++ unsigned long cur2_y_offset : 4;
++ } cursor2_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor2_offset_t f;
++} cursor2_offset_u;
++
++typedef struct _cursor2_h_pos_t {
++ unsigned long cur2_h_start : 10;
++ unsigned long : 6;
++ unsigned long cur2_h_end : 10;
++ unsigned long : 5;
++ unsigned long cur2_en : 1;
++ } cursor2_h_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor2_h_pos_t f;
++} cursor2_h_pos_u;
++
++typedef struct _cursor2_v_pos_t {
++ unsigned long cur2_v_start : 10;
++ unsigned long : 6;
++ unsigned long cur2_v_end : 10;
++ unsigned long : 6;
++ } cursor2_v_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor2_v_pos_t f;
++} cursor2_v_pos_u;
++
++typedef struct _cursor2_color0_t {
++ unsigned long cur2_color0_r : 8;
++ unsigned long cur2_color0_g : 8;
++ unsigned long cur2_color0_b : 8;
++ unsigned long : 8;
++ } cursor2_color0_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor2_color0_t f;
++} cursor2_color0_u;
++
++typedef struct _cursor2_color1_t {
++ unsigned long cur2_color1_r : 8;
++ unsigned long cur2_color1_g : 8;
++ unsigned long cur2_color1_b : 8;
++ unsigned long : 8;
++ } cursor2_color1_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor2_color1_t f;
++} cursor2_color1_u;
++
++typedef struct _disp_int_cntl_t {
++ unsigned long vline_int_pos : 10;
++ unsigned long : 6;
++ unsigned long hpos_int_pos : 10;
++ unsigned long : 4;
++ unsigned long vblank_int_pol : 1;
++ unsigned long frame_int_pol : 1;
++ } disp_int_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_int_cntl_t f;
++} disp_int_cntl_u;
++
++typedef struct _crtc_ss_t {
++ unsigned long ss_start : 10;
++ unsigned long : 6;
++ unsigned long ss_end : 10;
++ unsigned long : 2;
++ unsigned long ss_align : 1;
++ unsigned long ss_pol : 1;
++ unsigned long ss_run_mode : 1;
++ unsigned long ss_en : 1;
++ } crtc_ss_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ss_t f;
++} crtc_ss_u;
++
++typedef struct _crtc_ls_t {
++ unsigned long ls_start : 10;
++ unsigned long : 6;
++ unsigned long ls_end : 10;
++ unsigned long : 2;
++ unsigned long ls_align : 1;
++ unsigned long ls_pol : 1;
++ unsigned long ls_run_mode : 1;
++ unsigned long ls_en : 1;
++ } crtc_ls_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ls_t f;
++} crtc_ls_u;
++
++typedef struct _crtc_rev_t {
++ unsigned long rev_pos : 10;
++ unsigned long : 6;
++ unsigned long rev_align : 1;
++ unsigned long rev_freq_nref : 5;
++ unsigned long rev_en : 1;
++ unsigned long : 9;
++ } crtc_rev_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_rev_t f;
++} crtc_rev_u;
++
++typedef struct _crtc_dclk_t {
++ unsigned long dclk_start : 10;
++ unsigned long : 6;
++ unsigned long dclk_end : 10;
++ unsigned long : 1;
++ unsigned long dclk_run_mode : 2;
++ unsigned long dclk_pol : 1;
++ unsigned long dclk_align : 1;
++ unsigned long dclk_en : 1;
++ } crtc_dclk_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_dclk_t f;
++} crtc_dclk_u;
++
++typedef struct _crtc_gs_t {
++ unsigned long gs_start : 10;
++ unsigned long : 6;
++ unsigned long gs_end : 10;
++ unsigned long : 3;
++ unsigned long gs_align : 1;
++ unsigned long gs_pol : 1;
++ unsigned long gs_en : 1;
++ } crtc_gs_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_gs_t f;
++} crtc_gs_u;
++
++typedef struct _crtc_vpos_gs_t {
++ unsigned long gs_vpos_start : 10;
++ unsigned long : 6;
++ unsigned long gs_vpos_end : 10;
++ unsigned long : 6;
++ } crtc_vpos_gs_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_vpos_gs_t f;
++} crtc_vpos_gs_u;
++
++typedef struct _crtc_gclk_t {
++ unsigned long gclk_start : 10;
++ unsigned long : 6;
++ unsigned long gclk_end : 10;
++ unsigned long : 3;
++ unsigned long gclk_align : 1;
++ unsigned long gclk_pol : 1;
++ unsigned long gclk_en : 1;
++ } crtc_gclk_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_gclk_t f;
++} crtc_gclk_u;
++
++typedef struct _crtc_goe_t {
++ unsigned long goe_start : 10;
++ unsigned long : 6;
++ unsigned long goe_end : 10;
++ unsigned long : 3;
++ unsigned long goe_align : 1;
++ unsigned long goe_pol : 1;
++ unsigned long goe_en : 1;
++ } crtc_goe_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_goe_t f;
++} crtc_goe_u;
++
++typedef struct _crtc_frame_t {
++ unsigned long crtc_fr_start : 10;
++ unsigned long : 6;
++ unsigned long crtc_fr_end : 10;
++ unsigned long : 4;
++ unsigned long crtc_frame_en : 1;
++ unsigned long crtc_frame_align : 1;
++ } crtc_frame_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_frame_t f;
++} crtc_frame_u;
++
++typedef struct _crtc_frame_vpos_t {
++ unsigned long crtc_fr_vpos : 10;
++ unsigned long : 22;
++ } crtc_frame_vpos_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_frame_vpos_t f;
++} crtc_frame_vpos_u;
++
++typedef struct _gpio_data_t {
++ unsigned long gio_out : 16;
++ unsigned long gio_in : 16;
++ } gpio_data_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_data_t f;
++} gpio_data_u;
++
++typedef struct _gpio_cntl1_t {
++ unsigned long gio_pd : 16;
++ unsigned long gio_schmen : 16;
++ } gpio_cntl1_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_cntl1_t f;
++} gpio_cntl1_u;
++
++typedef struct _gpio_cntl2_t {
++ unsigned long gio_oe : 16;
++ unsigned long gio_srp : 1;
++ unsigned long gio_srn : 1;
++ unsigned long gio_sp : 4;
++ unsigned long gio_sn : 4;
++ unsigned long : 6;
++ } gpio_cntl2_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_cntl2_t f;
++} gpio_cntl2_u;
++
++typedef struct _lcdd_cntl1_t {
++ unsigned long lcdd_pd : 18;
++ unsigned long lcdd_srp : 1;
++ unsigned long lcdd_srn : 1;
++ unsigned long lcdd_sp : 4;
++ unsigned long lcdd_sn : 4;
++ unsigned long lcdd_align : 1;
++ unsigned long : 3;
++ } lcdd_cntl1_t;
++
++typedef union {
++ unsigned long val : 32;
++ lcdd_cntl1_t f;
++} lcdd_cntl1_u;
++
++typedef struct _lcdd_cntl2_t {
++ unsigned long lcdd_oe : 18;
++ unsigned long : 14;
++ } lcdd_cntl2_t;
++
++typedef union {
++ unsigned long val : 32;
++ lcdd_cntl2_t f;
++} lcdd_cntl2_u;
++
++typedef struct _genlcd_cntl1_t {
++ unsigned long dclk_oe : 1;
++ unsigned long dclk_pd : 1;
++ unsigned long dclk_srp : 1;
++ unsigned long dclk_srn : 1;
++ unsigned long dclk_sp : 4;
++ unsigned long dclk_sn : 4;
++ unsigned long ss_oe : 1;
++ unsigned long ss_pd : 1;
++ unsigned long ls_oe : 1;
++ unsigned long ls_pd : 1;
++ unsigned long gs_oe : 1;
++ unsigned long gs_pd : 1;
++ unsigned long goe_oe : 1;
++ unsigned long goe_pd : 1;
++ unsigned long rev_oe : 1;
++ unsigned long rev_pd : 1;
++ unsigned long frame_oe : 1;
++ unsigned long frame_pd : 1;
++ unsigned long : 8;
++ } genlcd_cntl1_t;
++
++typedef union {
++ unsigned long val : 32;
++ genlcd_cntl1_t f;
++} genlcd_cntl1_u;
++
++typedef struct _genlcd_cntl2_t {
++ unsigned long gclk_oe : 1;
++ unsigned long gclk_pd : 1;
++ unsigned long gclk_srp : 1;
++ unsigned long gclk_srn : 1;
++ unsigned long gclk_sp : 4;
++ unsigned long gclk_sn : 4;
++ unsigned long genlcd_srp : 1;
++ unsigned long genlcd_srn : 1;
++ unsigned long genlcd_sp : 4;
++ unsigned long genlcd_sn : 4;
++ unsigned long : 10;
++ } genlcd_cntl2_t;
++
++typedef union {
++ unsigned long val : 32;
++ genlcd_cntl2_t f;
++} genlcd_cntl2_u;
++
++typedef struct _disp_debug_t {
++ unsigned long disp_debug : 32;
++ } disp_debug_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_debug_t f;
++} disp_debug_u;
++
++typedef struct _disp_db_buf_cntl_rd_t {
++ unsigned long en_db_buf : 1;
++ unsigned long update_db_buf_done : 1;
++ unsigned long db_buf_cntl : 6;
++ unsigned long : 24;
++ } disp_db_buf_cntl_rd_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_db_buf_cntl_rd_t f;
++} disp_db_buf_cntl_rd_u;
++
++typedef struct _disp_db_buf_cntl_wr_t {
++ unsigned long en_db_buf : 1;
++ unsigned long update_db_buf : 1;
++ unsigned long db_buf_cntl : 6;
++ unsigned long : 24;
++ } disp_db_buf_cntl_wr_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_db_buf_cntl_wr_t f;
++} disp_db_buf_cntl_wr_u;
++
++typedef struct _disp_crc_sig_t {
++ unsigned long crc_sig_r : 6;
++ unsigned long crc_sig_g : 6;
++ unsigned long crc_sig_b : 6;
++ unsigned long crc_cont_en : 1;
++ unsigned long crc_en : 1;
++ unsigned long crc_mask_en : 1;
++ unsigned long crc_sig_cntl : 6;
++ unsigned long : 5;
++ } disp_crc_sig_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_crc_sig_t f;
++} disp_crc_sig_u;
++
++typedef struct _crtc_default_count_t {
++ unsigned long crtc_hcount_def : 10;
++ unsigned long : 6;
++ unsigned long crtc_vcount_def : 10;
++ unsigned long : 6;
++ } crtc_default_count_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_default_count_t f;
++} crtc_default_count_u;
++
++typedef struct _lcd_background_color_t {
++ unsigned long lcd_bg_red : 8;
++ unsigned long lcd_bg_green : 8;
++ unsigned long lcd_bg_blue : 8;
++ unsigned long : 8;
++ } lcd_background_color_t;
++
++typedef union {
++ unsigned long val : 32;
++ lcd_background_color_t f;
++} lcd_background_color_u;
++
++typedef struct _crtc_ps2_t {
++ unsigned long ps2_start : 10;
++ unsigned long : 6;
++ unsigned long ps2_end : 10;
++ unsigned long : 4;
++ unsigned long ps2_pol : 1;
++ unsigned long ps2_en : 1;
++ } crtc_ps2_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ps2_t f;
++} crtc_ps2_u;
++
++typedef struct _crtc_ps2_vpos_t {
++ unsigned long ps2_vpos_start : 10;
++ unsigned long : 6;
++ unsigned long ps2_vpos_end : 10;
++ unsigned long : 6;
++ } crtc_ps2_vpos_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ps2_vpos_t f;
++} crtc_ps2_vpos_u;
++
++typedef struct _crtc_ps1_active_t {
++ unsigned long ps1_h_start : 10;
++ unsigned long : 6;
++ unsigned long ps1_h_end : 10;
++ unsigned long : 3;
++ unsigned long ps1_pol : 1;
++ unsigned long ps1_en : 1;
++ unsigned long ps1_use_nactive : 1;
++ } crtc_ps1_active_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ps1_active_t f;
++} crtc_ps1_active_u;
++
++typedef struct _crtc_ps1_nactive_t {
++ unsigned long ps1_h_start_na : 10;
++ unsigned long : 6;
++ unsigned long ps1_h_end_na : 10;
++ unsigned long : 5;
++ unsigned long ps1_en_na : 1;
++ } crtc_ps1_nactive_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_ps1_nactive_t f;
++} crtc_ps1_nactive_u;
++
++typedef struct _crtc_gclk_ext_t {
++ unsigned long gclk_alter_start : 10;
++ unsigned long : 6;
++ unsigned long gclk_alter_width : 2;
++ unsigned long gclk_en_alter : 1;
++ unsigned long gclk_db_width : 2;
++ unsigned long : 11;
++ } crtc_gclk_ext_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_gclk_ext_t f;
++} crtc_gclk_ext_u;
++
++typedef struct _crtc_alw_t {
++ unsigned long alw_hstart : 10;
++ unsigned long : 6;
++ unsigned long alw_hend : 10;
++ unsigned long : 4;
++ unsigned long alw_delay : 1;
++ unsigned long alw_en : 1;
++ } crtc_alw_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_alw_t f;
++} crtc_alw_u;
++
++typedef struct _crtc_alw_vpos_t {
++ unsigned long alw_vstart : 10;
++ unsigned long : 6;
++ unsigned long alw_vend : 10;
++ unsigned long : 6;
++ } crtc_alw_vpos_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_alw_vpos_t f;
++} crtc_alw_vpos_u;
++
++typedef struct _crtc_psk_t {
++ unsigned long psk_vstart : 10;
++ unsigned long : 6;
++ unsigned long psk_vend : 10;
++ unsigned long : 4;
++ unsigned long psk_pol : 1;
++ unsigned long psk_en : 1;
++ } crtc_psk_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_psk_t f;
++} crtc_psk_u;
++
++typedef struct _crtc_psk_hpos_t {
++ unsigned long psk_hstart : 10;
++ unsigned long : 6;
++ unsigned long psk_hend : 10;
++ unsigned long : 6;
++ } crtc_psk_hpos_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_psk_hpos_t f;
++} crtc_psk_hpos_u;
++
++typedef struct _crtc_cv4_start_t {
++ unsigned long cv4_vstart : 10;
++ unsigned long : 20;
++ unsigned long cv4_pol : 1;
++ unsigned long cv4_en : 1;
++ } crtc_cv4_start_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_cv4_start_t f;
++} crtc_cv4_start_u;
++
++typedef struct _crtc_cv4_end_t {
++ unsigned long cv4_vend1 : 10;
++ unsigned long : 6;
++ unsigned long cv4_vend2 : 10;
++ unsigned long : 6;
++ } crtc_cv4_end_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_cv4_end_t f;
++} crtc_cv4_end_u;
++
++typedef struct _crtc_cv4_hpos_t {
++ unsigned long cv4_hstart : 10;
++ unsigned long : 6;
++ unsigned long cv4_hend : 10;
++ unsigned long : 6;
++ } crtc_cv4_hpos_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_cv4_hpos_t f;
++} crtc_cv4_hpos_u;
++
++typedef struct _crtc_eck_t {
++ unsigned long eck_freq1 : 3;
++ unsigned long eck_en : 1;
++ unsigned long : 28;
++ } crtc_eck_t;
++
++typedef union {
++ unsigned long val : 32;
++ crtc_eck_t f;
++} crtc_eck_u;
++
++typedef struct _refresh_cntl_t {
++ unsigned long ref_frame : 3;
++ unsigned long nref_frame : 5;
++ unsigned long ref_cntl : 1;
++ unsigned long stop_sm_nref : 1;
++ unsigned long stop_req_nref : 1;
++ unsigned long : 21;
++ } refresh_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ refresh_cntl_t f;
++} refresh_cntl_u;
++
++typedef struct _genlcd_cntl3_t {
++ unsigned long ps1_oe : 1;
++ unsigned long ps1_pd : 1;
++ unsigned long ps2_oe : 1;
++ unsigned long ps2_pd : 1;
++ unsigned long rev2_oe : 1;
++ unsigned long rev2_pd : 1;
++ unsigned long awl_oe : 1;
++ unsigned long awl_pd : 1;
++ unsigned long dinv_oe : 1;
++ unsigned long dinv_pd : 1;
++ unsigned long psk_out : 1;
++ unsigned long psd_out : 1;
++ unsigned long eck_out : 1;
++ unsigned long cv4_out : 1;
++ unsigned long ps1_out : 1;
++ unsigned long ps2_out : 1;
++ unsigned long rev_out : 1;
++ unsigned long rev2_out : 1;
++ unsigned long : 14;
++ } genlcd_cntl3_t;
++
++typedef union {
++ unsigned long val : 32;
++ genlcd_cntl3_t f;
++} genlcd_cntl3_u;
++
++typedef struct _gpio_data2_t {
++ unsigned long gio2_out : 16;
++ unsigned long gio2_in : 16;
++ } gpio_data2_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_data2_t f;
++} gpio_data2_u;
++
++typedef struct _gpio_cntl3_t {
++ unsigned long gio2_pd : 16;
++ unsigned long gio2_schmen : 16;
++ } gpio_cntl3_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_cntl3_t f;
++} gpio_cntl3_u;
++
++typedef struct _gpio_cntl4_t {
++ unsigned long gio2_oe : 16;
++ unsigned long : 16;
++ } gpio_cntl4_t;
++
++typedef union {
++ unsigned long val : 32;
++ gpio_cntl4_t f;
++} gpio_cntl4_u;
++
++typedef struct _chip_strap_t {
++ unsigned long config_strap : 8;
++ unsigned long pkg_strap : 1;
++ unsigned long : 23;
++ } chip_strap_t;
++
++typedef union {
++ unsigned long val : 32;
++ chip_strap_t f;
++} chip_strap_u;
++
++typedef struct _disp_debug2_t {
++ unsigned long disp_debug2 : 32;
++ } disp_debug2_t;
++
++typedef union {
++ unsigned long val : 32;
++ disp_debug2_t f;
++} disp_debug2_u;
++
++typedef struct _debug_bus_cntl_t {
++ unsigned long debug_testmux : 4;
++ unsigned long debug_testsel : 4;
++ unsigned long debug_gioa_sel : 2;
++ unsigned long debug_giob_sel : 2;
++ unsigned long debug_clk_sel : 1;
++ unsigned long debug_clk_inv : 1;
++ unsigned long : 2;
++ unsigned long debug_bus : 16;
++ } debug_bus_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug_bus_cntl_t f;
++} debug_bus_cntl_u;
++
++typedef struct _gamma_value1_t {
++ unsigned long gamma1 : 8;
++ unsigned long gamma2 : 8;
++ unsigned long gamma3 : 8;
++ unsigned long gamma4 : 8;
++ } gamma_value1_t;
++
++typedef union {
++ unsigned long val : 32;
++ gamma_value1_t f;
++} gamma_value1_u;
++
++typedef struct _gamma_value2_t {
++ unsigned long gamma5 : 8;
++ unsigned long gamma6 : 8;
++ unsigned long gamma7 : 8;
++ unsigned long gamma8 : 8;
++ } gamma_value2_t;
++
++typedef union {
++ unsigned long val : 32;
++ gamma_value2_t f;
++} gamma_value2_u;
++
++typedef struct _gamma_slope_t {
++ unsigned long slope1 : 3;
++ unsigned long slope2 : 3;
++ unsigned long slope3 : 3;
++ unsigned long slope4 : 3;
++ unsigned long slope5 : 3;
++ unsigned long slope6 : 3;
++ unsigned long slope7 : 3;
++ unsigned long slope8 : 3;
++ unsigned long : 8;
++ } gamma_slope_t;
++
++typedef union {
++ unsigned long val : 32;
++ gamma_slope_t f;
++} gamma_slope_u;
++
++typedef struct _gen_status_t {
++ unsigned long status : 16;
++ unsigned long : 16;
++ } gen_status_t;
++
++typedef union {
++ unsigned long val : 32;
++ gen_status_t f;
++} gen_status_u;
++
++typedef struct _hw_int_t {
++ unsigned long hwint1_pos : 5;
++ unsigned long hwint2_pos : 5;
++ unsigned long hwint1_pol : 1;
++ unsigned long hwint2_pol : 1;
++ unsigned long hwint1_en_db : 1;
++ unsigned long hwint2_en_db : 1;
++ unsigned long : 18;
++ } hw_int_t;
++
++typedef union {
++ unsigned long val : 32;
++ hw_int_t f;
++} hw_int_u;
++
++typedef struct _dst_offset_t {
++ unsigned long dst_offset : 24;
++ unsigned long : 8;
++ } dst_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_offset_t f;
++} dst_offset_u;
++
++typedef struct _dst_pitch_t {
++ unsigned long dst_pitch : 14;
++ unsigned long mc_dst_pitch_mul : 2;
++ unsigned long : 16;
++ } dst_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_pitch_t f;
++} dst_pitch_u;
++
++typedef struct _dst_pitch_offset_t {
++ unsigned long dst_offset : 20;
++ unsigned long dst_pitch : 10;
++ unsigned long mc_dst_pitch_mul : 2;
++ } dst_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_pitch_offset_t f;
++} dst_pitch_offset_u;
++
++typedef struct _dst_x_t {
++ unsigned long dst_x : 14;
++ unsigned long : 18;
++ } dst_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_x_t f;
++} dst_x_u;
++
++typedef struct _dst_y_t {
++ unsigned long dst_y : 14;
++ unsigned long : 18;
++ } dst_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_y_t f;
++} dst_y_u;
++
++typedef struct _dst_x_y_t {
++ unsigned long dst_y : 14;
++ unsigned long : 2;
++ unsigned long dst_x : 14;
++ unsigned long : 2;
++ } dst_x_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_x_y_t f;
++} dst_x_y_u;
++
++typedef struct _dst_y_x_t {
++ unsigned long dst_x : 14;
++ unsigned long : 2;
++ unsigned long dst_y : 14;
++ unsigned long : 2;
++ } dst_y_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_y_x_t f;
++} dst_y_x_u;
++
++typedef struct _dst_width_t {
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_width_b1 : 6;
++ unsigned long : 18;
++ } dst_width_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_width_t f;
++} dst_width_u;
++
++typedef struct _dst_height_t {
++ unsigned long dst_height : 14;
++ unsigned long : 18;
++ } dst_height_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_height_t f;
++} dst_height_u;
++
++typedef struct _dst_width_height_t {
++ unsigned long dst_height : 14;
++ unsigned long : 2;
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_width_b1 : 6;
++ unsigned long : 2;
++ } dst_width_height_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_width_height_t f;
++} dst_width_height_u;
++
++typedef struct _dst_height_width_t {
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_width_b1 : 6;
++ unsigned long : 2;
++ unsigned long dst_height : 14;
++ unsigned long : 2;
++ } dst_height_width_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_height_width_t f;
++} dst_height_width_u;
++
++typedef struct _dst_height_width_8_t {
++ unsigned long : 16;
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_height : 8;
++ } dst_height_width_8_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_height_width_8_t f;
++} dst_height_width_8_u;
++
++typedef struct _dst_height_y_t {
++ unsigned long dst_y : 14;
++ unsigned long : 2;
++ unsigned long dst_height : 14;
++ unsigned long : 2;
++ } dst_height_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_height_y_t f;
++} dst_height_y_u;
++
++typedef struct _dst_width_x_t {
++ unsigned long dst_x : 14;
++ unsigned long : 2;
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_width_b1 : 6;
++ unsigned long : 2;
++ } dst_width_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_width_x_t f;
++} dst_width_x_u;
++
++typedef struct _dst_width_x_incy_t {
++ unsigned long dst_x : 14;
++ unsigned long : 2;
++ unsigned long dst_width_b0 : 8;
++ unsigned long dst_width_b1 : 6;
++ unsigned long : 2;
++ } dst_width_x_incy_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_width_x_incy_t f;
++} dst_width_x_incy_u;
++
++typedef struct _dst_line_start_t {
++ unsigned long dst_start_x : 14;
++ unsigned long : 2;
++ unsigned long dst_start_y : 14;
++ unsigned long : 2;
++ } dst_line_start_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_line_start_t f;
++} dst_line_start_u;
++
++typedef struct _dst_line_end_t {
++ unsigned long dst_end_x : 14;
++ unsigned long : 2;
++ unsigned long dst_end_y_b0 : 8;
++ unsigned long dst_end_y_b1 : 6;
++ unsigned long : 2;
++ } dst_line_end_t;
++
++typedef union {
++ unsigned long val : 32;
++ dst_line_end_t f;
++} dst_line_end_u;
++
++typedef struct _brush_offset_t {
++ unsigned long brush_offset : 24;
++ unsigned long : 8;
++ } brush_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ brush_offset_t f;
++} brush_offset_u;
++
++typedef struct _brush_y_x_t {
++ unsigned long brush_x : 5;
++ unsigned long : 3;
++ unsigned long brush_y : 3;
++ unsigned long : 21;
++ } brush_y_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ brush_y_x_t f;
++} brush_y_x_u;
++
++typedef struct _dp_brush_frgd_clr_t {
++ unsigned long dp_brush_frgd_clr : 32;
++ } dp_brush_frgd_clr_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_brush_frgd_clr_t f;
++} dp_brush_frgd_clr_u;
++
++typedef struct _dp_brush_bkgd_clr_t {
++ unsigned long dp_brush_bkgd_clr : 32;
++ } dp_brush_bkgd_clr_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_brush_bkgd_clr_t f;
++} dp_brush_bkgd_clr_u;
++
++typedef struct _src2_offset_t {
++ unsigned long src2_offset : 24;
++ unsigned long : 8;
++ } src2_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_offset_t f;
++} src2_offset_u;
++
++typedef struct _src2_pitch_t {
++ unsigned long src2_pitch : 14;
++ unsigned long src2_pitch_mul : 2;
++ unsigned long : 16;
++ } src2_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_pitch_t f;
++} src2_pitch_u;
++
++typedef struct _src2_pitch_offset_t {
++ unsigned long src2_offset : 20;
++ unsigned long : 2;
++ unsigned long src2_pitch : 8;
++ unsigned long src2_pitch_mul : 2;
++ } src2_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_pitch_offset_t f;
++} src2_pitch_offset_u;
++
++typedef struct _src2_x_t {
++ unsigned long src_x : 14;
++ unsigned long : 18;
++ } src2_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_x_t f;
++} src2_x_u;
++
++typedef struct _src2_y_t {
++ unsigned long src_y : 14;
++ unsigned long : 18;
++ } src2_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_y_t f;
++} src2_y_u;
++
++typedef struct _src2_x_y_t {
++ unsigned long src_y : 14;
++ unsigned long : 2;
++ unsigned long src_x : 14;
++ unsigned long : 2;
++ } src2_x_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_x_y_t f;
++} src2_x_y_u;
++
++typedef struct _src2_width_t {
++ unsigned long src2_width : 14;
++ unsigned long : 18;
++ } src2_width_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_width_t f;
++} src2_width_u;
++
++typedef struct _src2_height_t {
++ unsigned long src2_height : 14;
++ unsigned long : 18;
++ } src2_height_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_height_t f;
++} src2_height_u;
++
++typedef struct _src2_inc_t {
++ unsigned long src2_xinc : 6;
++ unsigned long : 2;
++ unsigned long src2_yinc : 6;
++ unsigned long : 18;
++ } src2_inc_t;
++
++typedef union {
++ unsigned long val : 32;
++ src2_inc_t f;
++} src2_inc_u;
++
++typedef struct _src_offset_t {
++ unsigned long src_offset : 24;
++ unsigned long : 8;
++ } src_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_offset_t f;
++} src_offset_u;
++
++typedef struct _src_pitch_t {
++ unsigned long src_pitch : 14;
++ unsigned long src_pitch_mul : 2;
++ unsigned long : 16;
++ } src_pitch_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_pitch_t f;
++} src_pitch_u;
++
++typedef struct _src_pitch_offset_t {
++ unsigned long src_offset : 20;
++ unsigned long src_pitch : 10;
++ unsigned long src_pitch_mul : 2;
++ } src_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_pitch_offset_t f;
++} src_pitch_offset_u;
++
++typedef struct _src_x_t {
++ unsigned long src_x : 14;
++ unsigned long : 18;
++ } src_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_x_t f;
++} src_x_u;
++
++typedef struct _src_y_t {
++ unsigned long src_y : 14;
++ unsigned long : 18;
++ } src_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_y_t f;
++} src_y_u;
++
++typedef struct _src_x_y_t {
++ unsigned long src_y : 14;
++ unsigned long : 2;
++ unsigned long src_x : 14;
++ unsigned long : 2;
++ } src_x_y_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_x_y_t f;
++} src_x_y_u;
++
++typedef struct _src_y_x_t {
++ unsigned long src_x : 14;
++ unsigned long : 2;
++ unsigned long src_y : 14;
++ unsigned long : 2;
++ } src_y_x_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_y_x_t f;
++} src_y_x_u;
++
++typedef struct _src_width_t {
++ unsigned long src_width : 14;
++ unsigned long : 18;
++ } src_width_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_width_t f;
++} src_width_u;
++
++typedef struct _src_height_t {
++ unsigned long src_height : 14;
++ unsigned long : 18;
++ } src_height_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_height_t f;
++} src_height_u;
++
++typedef struct _src_inc_t {
++ unsigned long src_xinc : 6;
++ unsigned long : 2;
++ unsigned long src_yinc : 6;
++ unsigned long : 18;
++ } src_inc_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_inc_t f;
++} src_inc_u;
++
++typedef struct _host_data0_t {
++ unsigned long host_data : 32;
++ } host_data0_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data0_t f;
++} host_data0_u;
++
++typedef struct _host_data1_t {
++ unsigned long host_data : 32;
++ } host_data1_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data1_t f;
++} host_data1_u;
++
++typedef struct _host_data2_t {
++ unsigned long host_data : 32;
++ } host_data2_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data2_t f;
++} host_data2_u;
++
++typedef struct _host_data3_t {
++ unsigned long host_data : 32;
++ } host_data3_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data3_t f;
++} host_data3_u;
++
++typedef struct _host_data4_t {
++ unsigned long host_data : 32;
++ } host_data4_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data4_t f;
++} host_data4_u;
++
++typedef struct _host_data5_t {
++ unsigned long host_data : 32;
++ } host_data5_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data5_t f;
++} host_data5_u;
++
++typedef struct _host_data6_t {
++ unsigned long host_data : 32;
++ } host_data6_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data6_t f;
++} host_data6_u;
++
++typedef struct _host_data7_t {
++ unsigned long host_data : 32;
++ } host_data7_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data7_t f;
++} host_data7_u;
++
++typedef struct _host_data_last_t {
++ unsigned long host_data_last : 32;
++ } host_data_last_t;
++
++typedef union {
++ unsigned long val : 32;
++ host_data_last_t f;
++} host_data_last_u;
++
++typedef struct _dp_src_frgd_clr_t {
++ unsigned long dp_src_frgd_clr : 32;
++ } dp_src_frgd_clr_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_src_frgd_clr_t f;
++} dp_src_frgd_clr_u;
++
++typedef struct _dp_src_bkgd_clr_t {
++ unsigned long dp_src_bkgd_clr : 32;
++ } dp_src_bkgd_clr_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_src_bkgd_clr_t f;
++} dp_src_bkgd_clr_u;
++
++typedef struct _sc_left_t {
++ unsigned long sc_left : 14;
++ unsigned long : 18;
++ } sc_left_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_left_t f;
++} sc_left_u;
++
++typedef struct _sc_right_t {
++ unsigned long sc_right : 14;
++ unsigned long : 18;
++ } sc_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_right_t f;
++} sc_right_u;
++
++typedef struct _sc_top_t {
++ unsigned long sc_top : 14;
++ unsigned long : 18;
++ } sc_top_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_top_t f;
++} sc_top_u;
++
++typedef struct _sc_bottom_t {
++ unsigned long sc_bottom : 14;
++ unsigned long : 18;
++ } sc_bottom_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_bottom_t f;
++} sc_bottom_u;
++
++typedef struct _src_sc_right_t {
++ unsigned long sc_right : 14;
++ unsigned long : 18;
++ } src_sc_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_sc_right_t f;
++} src_sc_right_u;
++
++typedef struct _src_sc_bottom_t {
++ unsigned long sc_bottom : 14;
++ unsigned long : 18;
++ } src_sc_bottom_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_sc_bottom_t f;
++} src_sc_bottom_u;
++
++typedef struct _dp_cntl_t {
++ unsigned long dst_x_dir : 1;
++ unsigned long dst_y_dir : 1;
++ unsigned long src_x_dir : 1;
++ unsigned long src_y_dir : 1;
++ unsigned long dst_major_x : 1;
++ unsigned long src_major_x : 1;
++ unsigned long : 26;
++ } dp_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_cntl_t f;
++} dp_cntl_u;
++
++typedef struct _dp_cntl_dst_dir_t {
++ unsigned long : 15;
++ unsigned long dst_y_dir : 1;
++ unsigned long : 15;
++ unsigned long dst_x_dir : 1;
++ } dp_cntl_dst_dir_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_cntl_dst_dir_t f;
++} dp_cntl_dst_dir_u;
++
++typedef struct _dp_datatype_t {
++ unsigned long dp_dst_datatype : 4;
++ unsigned long : 4;
++ unsigned long dp_brush_datatype : 4;
++ unsigned long dp_src2_type : 1;
++ unsigned long dp_src2_datatype : 3;
++ unsigned long dp_src_datatype : 3;
++ unsigned long : 11;
++ unsigned long dp_byte_pix_order : 1;
++ unsigned long : 1;
++ } dp_datatype_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_datatype_t f;
++} dp_datatype_u;
++
++typedef struct _dp_mix_t {
++ unsigned long : 8;
++ unsigned long dp_src_source : 3;
++ unsigned long dp_src2_source : 3;
++ unsigned long : 2;
++ unsigned long dp_rop3 : 8;
++ unsigned long dp_op : 1;
++ unsigned long : 7;
++ } dp_mix_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_mix_t f;
++} dp_mix_u;
++
++typedef struct _dp_write_msk_t {
++ unsigned long dp_write_msk : 32;
++ } dp_write_msk_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_write_msk_t f;
++} dp_write_msk_u;
++
++typedef struct _clr_cmp_clr_src_t {
++ unsigned long clr_cmp_clr_src : 32;
++ } clr_cmp_clr_src_t;
++
++typedef union {
++ unsigned long val : 32;
++ clr_cmp_clr_src_t f;
++} clr_cmp_clr_src_u;
++
++typedef struct _clr_cmp_clr_dst_t {
++ unsigned long clr_cmp_clr_dst : 32;
++ } clr_cmp_clr_dst_t;
++
++typedef union {
++ unsigned long val : 32;
++ clr_cmp_clr_dst_t f;
++} clr_cmp_clr_dst_u;
++
++typedef struct _clr_cmp_cntl_t {
++ unsigned long clr_cmp_fcn_src : 3;
++ unsigned long : 5;
++ unsigned long clr_cmp_fcn_dst : 3;
++ unsigned long : 13;
++ unsigned long clr_cmp_src : 2;
++ unsigned long : 6;
++ } clr_cmp_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ clr_cmp_cntl_t f;
++} clr_cmp_cntl_u;
++
++typedef struct _clr_cmp_msk_t {
++ unsigned long clr_cmp_msk : 32;
++ } clr_cmp_msk_t;
++
++typedef union {
++ unsigned long val : 32;
++ clr_cmp_msk_t f;
++} clr_cmp_msk_u;
++
++typedef struct _default_pitch_offset_t {
++ unsigned long default_offset : 20;
++ unsigned long default_pitch : 10;
++ unsigned long : 2;
++ } default_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ default_pitch_offset_t f;
++} default_pitch_offset_u;
++
++typedef struct _default_sc_bottom_right_t {
++ unsigned long default_sc_right : 14;
++ unsigned long : 2;
++ unsigned long default_sc_bottom : 14;
++ unsigned long : 2;
++ } default_sc_bottom_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ default_sc_bottom_right_t f;
++} default_sc_bottom_right_u;
++
++typedef struct _default2_sc_bottom_right_t {
++ unsigned long default_sc_right : 14;
++ unsigned long : 2;
++ unsigned long default_sc_bottom : 14;
++ unsigned long : 2;
++ } default2_sc_bottom_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ default2_sc_bottom_right_t f;
++} default2_sc_bottom_right_u;
++
++typedef struct _ref1_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref1_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref1_pitch_offset_t f;
++} ref1_pitch_offset_u;
++
++typedef struct _ref2_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref2_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref2_pitch_offset_t f;
++} ref2_pitch_offset_u;
++
++typedef struct _ref3_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref3_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref3_pitch_offset_t f;
++} ref3_pitch_offset_u;
++
++typedef struct _ref4_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref4_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref4_pitch_offset_t f;
++} ref4_pitch_offset_u;
++
++typedef struct _ref5_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref5_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref5_pitch_offset_t f;
++} ref5_pitch_offset_u;
++
++typedef struct _ref6_pitch_offset_t {
++ unsigned long offset : 20;
++ unsigned long : 2;
++ unsigned long pitch : 8;
++ unsigned long : 2;
++ } ref6_pitch_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ ref6_pitch_offset_t f;
++} ref6_pitch_offset_u;
++
++typedef struct _dp_gui_master_cntl_t {
++ unsigned long gmc_src_pitch_offset_cntl : 1;
++ unsigned long gmc_dst_pitch_offset_cntl : 1;
++ unsigned long gmc_src_clipping : 1;
++ unsigned long gmc_dst_clipping : 1;
++ unsigned long gmc_brush_datatype : 4;
++ unsigned long gmc_dst_datatype : 4;
++ unsigned long gmc_src_datatype : 3;
++ unsigned long gmc_byte_pix_order : 1;
++ unsigned long gmc_default_sel : 1;
++ unsigned long gmc_rop3 : 8;
++ unsigned long gmc_dp_src_source : 3;
++ unsigned long gmc_clr_cmp_fcn_dis : 1;
++ unsigned long : 1;
++ unsigned long gmc_wr_msk_dis : 1;
++ unsigned long gmc_dp_op : 1;
++ } dp_gui_master_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ dp_gui_master_cntl_t f;
++} dp_gui_master_cntl_u;
++
++typedef struct _sc_top_left_t {
++ unsigned long sc_left : 14;
++ unsigned long : 2;
++ unsigned long sc_top : 14;
++ unsigned long : 2;
++ } sc_top_left_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_top_left_t f;
++} sc_top_left_u;
++
++typedef struct _sc_bottom_right_t {
++ unsigned long sc_right : 14;
++ unsigned long : 2;
++ unsigned long sc_bottom : 14;
++ unsigned long : 2;
++ } sc_bottom_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ sc_bottom_right_t f;
++} sc_bottom_right_u;
++
++typedef struct _src_sc_bottom_right_t {
++ unsigned long sc_right : 14;
++ unsigned long : 2;
++ unsigned long sc_bottom : 14;
++ unsigned long : 2;
++ } src_sc_bottom_right_t;
++
++typedef union {
++ unsigned long val : 32;
++ src_sc_bottom_right_t f;
++} src_sc_bottom_right_u;
++
++typedef struct _global_alpha_t {
++ unsigned long alpha_r : 8;
++ unsigned long alpha_g : 8;
++ unsigned long alpha_b : 8;
++ unsigned long alpha_a : 8;
++ } global_alpha_t;
++
++typedef union {
++ unsigned long val : 32;
++ global_alpha_t f;
++} global_alpha_u;
++
++typedef struct _filter_coef_t {
++ unsigned long c_4 : 4;
++ unsigned long c_3 : 4;
++ unsigned long c_2 : 4;
++ unsigned long c_1 : 4;
++ unsigned long c1 : 4;
++ unsigned long c2 : 4;
++ unsigned long c3 : 4;
++ unsigned long c4 : 4;
++ } filter_coef_t;
++
++typedef union {
++ unsigned long val : 32;
++ filter_coef_t f;
++} filter_coef_u;
++
++typedef struct _mvc_cntl_start_t {
++ unsigned long mc_cntl_src_1_index : 4;
++ unsigned long mc_cntl_dst_offset : 20;
++ unsigned long mc_dst_pitch_mul : 2;
++ unsigned long mc_cntl_src_2_index : 3;
++ unsigned long mc_cntl_width_height_sel : 3;
++ } mvc_cntl_start_t;
++
++typedef union {
++ unsigned long val : 32;
++ mvc_cntl_start_t f;
++} mvc_cntl_start_u;
++
++typedef struct _e2_arithmetic_cntl_t {
++ unsigned long opcode : 5;
++ unsigned long shiftright : 4;
++ unsigned long clamp : 1;
++ unsigned long rounding : 2;
++ unsigned long filter_n : 3;
++ unsigned long : 1;
++ unsigned long srcblend_inv : 1;
++ unsigned long srcblend : 4;
++ unsigned long : 3;
++ unsigned long dstblend_inv : 1;
++ unsigned long dstblend : 4;
++ unsigned long dst_signed : 1;
++ unsigned long autoinc : 1;
++ unsigned long : 1;
++ } e2_arithmetic_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ e2_arithmetic_cntl_t f;
++} e2_arithmetic_cntl_u;
++
++typedef struct _debug0_t {
++ unsigned long debug0_r : 8;
++ unsigned long : 8;
++ unsigned long debug0_rw : 8;
++ unsigned long : 8;
++ } debug0_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug0_t f;
++} debug0_u;
++
++typedef struct _debug1_t {
++ unsigned long debug1_r : 8;
++ unsigned long : 8;
++ unsigned long debug1_rw : 8;
++ unsigned long : 8;
++ } debug1_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug1_t f;
++} debug1_u;
++
++typedef struct _debug2_t {
++ unsigned long debug2_r : 8;
++ unsigned long : 8;
++ unsigned long debug2_rw : 8;
++ unsigned long : 8;
++ } debug2_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug2_t f;
++} debug2_u;
++
++typedef struct _debug3_t {
++ unsigned long : 32;
++ } debug3_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug3_t f;
++} debug3_u;
++
++typedef struct _debug4_t {
++ unsigned long : 32;
++ } debug4_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug4_t f;
++} debug4_u;
++
++typedef struct _debug5_t {
++ unsigned long : 32;
++ } debug5_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug5_t f;
++} debug5_u;
++
++typedef struct _debug6_t {
++ unsigned long : 32;
++ } debug6_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug6_t f;
++} debug6_u;
++
++typedef struct _debug7_t {
++ unsigned long : 32;
++ } debug7_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug7_t f;
++} debug7_u;
++
++typedef struct _debug8_t {
++ unsigned long : 32;
++ } debug8_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug8_t f;
++} debug8_u;
++
++typedef struct _debug9_t {
++ unsigned long : 32;
++ } debug9_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug9_t f;
++} debug9_u;
++
++typedef struct _debug10_t {
++ unsigned long : 32;
++ } debug10_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug10_t f;
++} debug10_u;
++
++typedef struct _debug11_t {
++ unsigned long : 32;
++ } debug11_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug11_t f;
++} debug11_u;
++
++typedef struct _debug12_t {
++ unsigned long : 32;
++ } debug12_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug12_t f;
++} debug12_u;
++
++typedef struct _debug13_t {
++ unsigned long : 32;
++ } debug13_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug13_t f;
++} debug13_u;
++
++typedef struct _debug14_t {
++ unsigned long : 32;
++ } debug14_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug14_t f;
++} debug14_u;
++
++typedef struct _debug15_t {
++ unsigned long : 32;
++ } debug15_t;
++
++typedef union {
++ unsigned long val : 32;
++ debug15_t f;
++} debug15_u;
++
++typedef struct _eng_cntl_t {
++ unsigned long erc_reg_rd_ws : 1;
++ unsigned long erc_reg_wr_ws : 1;
++ unsigned long erc_idle_reg_wr : 1;
++ unsigned long dis_engine_triggers : 1;
++ unsigned long dis_rop_src_uses_dst_w_h : 1;
++ unsigned long dis_src_uses_dst_dirmaj : 1;
++ unsigned long : 6;
++ unsigned long force_3dclk_when_2dclk : 1;
++ unsigned long : 19;
++ } eng_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ eng_cntl_t f;
++} eng_cntl_u;
++
++typedef struct _eng_perf_cnt_t {
++ unsigned long perf_cnt : 20;
++ unsigned long perf_sel : 4;
++ unsigned long perf_en : 1;
++ unsigned long : 3;
++ unsigned long perf_clr : 1;
++ unsigned long : 3;
++ } eng_perf_cnt_t;
++
++typedef union {
++ unsigned long val : 32;
++ eng_perf_cnt_t f;
++} eng_perf_cnt_u;
++
++typedef struct _idct_runs_t {
++ unsigned long idct_runs_3 : 8;
++ unsigned long idct_runs_2 : 8;
++ unsigned long idct_runs_1 : 8;
++ unsigned long idct_runs_0 : 8;
++ } idct_runs_t;
++
++typedef union {
++ unsigned long val : 32;
++ idct_runs_t f;
++} idct_runs_u;
++
++typedef struct _idct_levels_t {
++ unsigned long idct_level_hi : 16;
++ unsigned long idct_level_lo : 16;
++ } idct_levels_t;
++
++typedef union {
++ unsigned long val : 32;
++ idct_levels_t f;
++} idct_levels_u;
++
++typedef struct _idct_control_t {
++ unsigned long idct_ctl_luma_rd_format : 2;
++ unsigned long idct_ctl_chroma_rd_format : 2;
++ unsigned long idct_ctl_scan_pattern : 1;
++ unsigned long idct_ctl_intra : 1;
++ unsigned long idct_ctl_flush : 1;
++ unsigned long idct_ctl_passthru : 1;
++ unsigned long idct_ctl_sw_reset : 1;
++ unsigned long idct_ctl_constreq : 1;
++ unsigned long idct_ctl_scramble : 1;
++ unsigned long idct_ctl_alt_scan : 1;
++ unsigned long : 20;
++ } idct_control_t;
++
++typedef union {
++ unsigned long val : 32;
++ idct_control_t f;
++} idct_control_u;
++
++typedef struct _idct_auth_control_t {
++ unsigned long control_bits : 32;
++ } idct_auth_control_t;
++
++typedef union {
++ unsigned long val : 32;
++ idct_auth_control_t f;
++} idct_auth_control_u;
++
++typedef struct _idct_auth_t {
++ unsigned long auth : 32;
++ } idct_auth_t;
++
++typedef union {
++ unsigned long val : 32;
++ idct_auth_t f;
++} idct_auth_u;
++
++typedef struct _mem_cntl_t {
++ unsigned long : 1;
++ unsigned long en_mem_ch1 : 1;
++ unsigned long en_mem_ch2 : 1;
++ unsigned long int_mem_mapping : 1;
++ unsigned long : 28;
++ } mem_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_cntl_t f;
++} mem_cntl_u;
++
++typedef struct _mem_arb_t {
++ unsigned long disp_time_slot : 4;
++ unsigned long disp_timer : 4;
++ unsigned long arb_option : 1;
++ unsigned long : 23;
++ } mem_arb_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_arb_t f;
++} mem_arb_u;
++
++typedef struct _mc_fb_location_t {
++ unsigned long mc_fb_start : 16;
++ unsigned long mc_fb_top : 16;
++ } mc_fb_location_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_fb_location_t f;
++} mc_fb_location_u;
++
++typedef struct _mem_ext_cntl_t {
++ unsigned long mem_ext_enable : 1;
++ unsigned long mem_ap_enable : 1;
++ unsigned long mem_addr_mapping : 2;
++ unsigned long mem_wdoe_cntl : 2;
++ unsigned long mem_wdoe_extend : 1;
++ unsigned long : 1;
++ unsigned long mem_page_timer : 8;
++ unsigned long mem_dynamic_cke : 1;
++ unsigned long mem_sdram_tri_en : 1;
++ unsigned long mem_self_refresh_en : 1;
++ unsigned long mem_power_down : 1;
++ unsigned long mem_hw_power_down_en : 1;
++ unsigned long mem_power_down_stat : 1;
++ unsigned long : 3;
++ unsigned long mem_pd_mck : 1;
++ unsigned long mem_pd_ma : 1;
++ unsigned long mem_pd_mdq : 1;
++ unsigned long mem_tristate_mck : 1;
++ unsigned long mem_tristate_ma : 1;
++ unsigned long mem_tristate_mcke : 1;
++ unsigned long mem_invert_mck : 1;
++ } mem_ext_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_ext_cntl_t f;
++} mem_ext_cntl_u;
++
++typedef struct _mc_ext_mem_location_t {
++ unsigned long mc_ext_mem_start : 16;
++ unsigned long mc_ext_mem_top : 16;
++ } mc_ext_mem_location_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_ext_mem_location_t f;
++} mc_ext_mem_location_u;
++
++typedef struct _mem_ext_timing_cntl_t {
++ unsigned long mem_trp : 2;
++ unsigned long mem_trcd : 2;
++ unsigned long mem_tras : 3;
++ unsigned long : 1;
++ unsigned long mem_trrd : 2;
++ unsigned long mem_tr2w : 2;
++ unsigned long mem_twr : 2;
++ unsigned long : 4;
++ unsigned long mem_twr_mode : 1;
++ unsigned long : 1;
++ unsigned long mem_refresh_dis : 1;
++ unsigned long : 3;
++ unsigned long mem_refresh_rate : 8;
++ } mem_ext_timing_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_ext_timing_cntl_t f;
++} mem_ext_timing_cntl_u;
++
++typedef struct _mem_sdram_mode_reg_t {
++ unsigned long mem_mode_reg : 14;
++ unsigned long : 2;
++ unsigned long mem_read_latency : 2;
++ unsigned long mem_schmen_latency : 2;
++ unsigned long mem_cas_latency : 2;
++ unsigned long mem_schmen_extend : 1;
++ unsigned long : 8;
++ unsigned long mem_sdram_reset : 1;
++ } mem_sdram_mode_reg_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_sdram_mode_reg_t f;
++} mem_sdram_mode_reg_u;
++
++typedef struct _mem_io_cntl_t {
++ unsigned long mem_sn_mck : 4;
++ unsigned long mem_sn_ma : 4;
++ unsigned long mem_sn_mdq : 4;
++ unsigned long mem_srn_mck : 1;
++ unsigned long mem_srn_ma : 1;
++ unsigned long mem_srn_mdq : 1;
++ unsigned long : 1;
++ unsigned long mem_sp_mck : 4;
++ unsigned long mem_sp_ma : 4;
++ unsigned long mem_sp_mdq : 4;
++ unsigned long mem_srp_mck : 1;
++ unsigned long mem_srp_ma : 1;
++ unsigned long mem_srp_mdq : 1;
++ unsigned long : 1;
++ } mem_io_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mem_io_cntl_t f;
++} mem_io_cntl_u;
++
++typedef struct _mc_debug_t {
++ unsigned long mc_debug : 32;
++ } mc_debug_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_debug_t f;
++} mc_debug_u;
++
++typedef struct _mc_bist_ctrl_t {
++ unsigned long mc_bist_ctrl : 32;
++ } mc_bist_ctrl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_bist_ctrl_t f;
++} mc_bist_ctrl_u;
++
++typedef struct _mc_bist_collar_read_t {
++ unsigned long mc_bist_collar_read : 32;
++ } mc_bist_collar_read_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_bist_collar_read_t f;
++} mc_bist_collar_read_u;
++
++typedef struct _tc_mismatch_t {
++ unsigned long tc_mismatch : 24;
++ unsigned long : 8;
++ } tc_mismatch_t;
++
++typedef union {
++ unsigned long val : 32;
++ tc_mismatch_t f;
++} tc_mismatch_u;
++
++typedef struct _mc_perf_mon_cntl_t {
++ unsigned long clr_perf : 1;
++ unsigned long en_perf : 1;
++ unsigned long : 2;
++ unsigned long perf_op_a : 2;
++ unsigned long perf_op_b : 2;
++ unsigned long : 8;
++ unsigned long monitor_period : 8;
++ unsigned long perf_count_a_overflow : 1;
++ unsigned long perf_count_b_overflow : 1;
++ unsigned long : 6;
++ } mc_perf_mon_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_perf_mon_cntl_t f;
++} mc_perf_mon_cntl_u;
++
++typedef struct _mc_perf_counters_t {
++ unsigned long mc_perf_counter_a : 16;
++ unsigned long mc_perf_counter_b : 16;
++ } mc_perf_counters_t;
++
++typedef union {
++ unsigned long val : 32;
++ mc_perf_counters_t f;
++} mc_perf_counters_u;
++
++typedef struct _wait_until_t {
++ unsigned long wait_crtc_pflip : 1;
++ unsigned long wait_re_crtc_vline : 1;
++ unsigned long wait_fe_crtc_vline : 1;
++ unsigned long wait_crtc_vline : 1;
++ unsigned long wait_dma_viph0_idle : 1;
++ unsigned long wait_dma_viph1_idle : 1;
++ unsigned long wait_dma_viph2_idle : 1;
++ unsigned long wait_dma_viph3_idle : 1;
++ unsigned long wait_dma_vid_idle : 1;
++ unsigned long wait_dma_gui_idle : 1;
++ unsigned long wait_cmdfifo : 1;
++ unsigned long wait_ov0_flip : 1;
++ unsigned long wait_ov0_slicedone : 1;
++ unsigned long : 1;
++ unsigned long wait_2d_idle : 1;
++ unsigned long wait_3d_idle : 1;
++ unsigned long wait_2d_idleclean : 1;
++ unsigned long wait_3d_idleclean : 1;
++ unsigned long wait_host_idleclean : 1;
++ unsigned long wait_extern_sig : 1;
++ unsigned long cmdfifo_entries : 7;
++ unsigned long : 3;
++ unsigned long wait_both_crtc_pflip : 1;
++ unsigned long eng_display_select : 1;
++ } wait_until_t;
++
++typedef union {
++ unsigned long val : 32;
++ wait_until_t f;
++} wait_until_u;
++
++typedef struct _isync_cntl_t {
++ unsigned long isync_any2d_idle3d : 1;
++ unsigned long isync_any3d_idle2d : 1;
++ unsigned long isync_trig2d_idle3d : 1;
++ unsigned long isync_trig3d_idle2d : 1;
++ unsigned long isync_wait_idlegui : 1;
++ unsigned long isync_cpscratch_idlegui : 1;
++ unsigned long : 26;
++ } isync_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ isync_cntl_t f;
++} isync_cntl_u;
++
++typedef struct _rbbm_guicntl_t {
++ unsigned long host_data_swap : 2;
++ unsigned long : 30;
++ } rbbm_guicntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_guicntl_t f;
++} rbbm_guicntl_u;
++
++typedef struct _rbbm_status_t {
++ unsigned long cmdfifo_avail : 7;
++ unsigned long : 1;
++ unsigned long hirq_on_rbb : 1;
++ unsigned long cprq_on_rbb : 1;
++ unsigned long cfrq_on_rbb : 1;
++ unsigned long hirq_in_rtbuf : 1;
++ unsigned long cprq_in_rtbuf : 1;
++ unsigned long cfrq_in_rtbuf : 1;
++ unsigned long cf_pipe_busy : 1;
++ unsigned long eng_ev_busy : 1;
++ unsigned long cp_cmdstrm_busy : 1;
++ unsigned long e2_busy : 1;
++ unsigned long rb2d_busy : 1;
++ unsigned long rb3d_busy : 1;
++ unsigned long se_busy : 1;
++ unsigned long re_busy : 1;
++ unsigned long tam_busy : 1;
++ unsigned long tdm_busy : 1;
++ unsigned long pb_busy : 1;
++ unsigned long : 6;
++ unsigned long gui_active : 1;
++ } rbbm_status_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_status_t f;
++} rbbm_status_u;
++
++typedef struct _rbbm_cntl_t {
++ unsigned long rb_settle : 4;
++ unsigned long abortclks_hi : 3;
++ unsigned long : 1;
++ unsigned long abortclks_cp : 3;
++ unsigned long : 1;
++ unsigned long abortclks_cfifo : 3;
++ unsigned long : 2;
++ unsigned long cpq_data_swap : 1;
++ unsigned long : 3;
++ unsigned long no_abort_idct : 1;
++ unsigned long no_abort_bios : 1;
++ unsigned long no_abort_fb : 1;
++ unsigned long no_abort_cp : 1;
++ unsigned long no_abort_hi : 1;
++ unsigned long no_abort_hdp : 1;
++ unsigned long no_abort_mc : 1;
++ unsigned long no_abort_aic : 1;
++ unsigned long no_abort_vip : 1;
++ unsigned long no_abort_disp : 1;
++ unsigned long no_abort_cg : 1;
++ } rbbm_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_cntl_t f;
++} rbbm_cntl_u;
++
++typedef struct _rbbm_soft_reset_t {
++ unsigned long soft_reset_cp : 1;
++ unsigned long soft_reset_hi : 1;
++ unsigned long reserved3 : 3;
++ unsigned long soft_reset_e2 : 1;
++ unsigned long reserved2 : 2;
++ unsigned long soft_reset_mc : 1;
++ unsigned long reserved1 : 2;
++ unsigned long soft_reset_disp : 1;
++ unsigned long soft_reset_cg : 1;
++ unsigned long : 19;
++ } rbbm_soft_reset_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_soft_reset_t f;
++} rbbm_soft_reset_u;
++
++typedef struct _nqwait_until_t {
++ unsigned long wait_gui_idle : 1;
++ unsigned long : 31;
++ } nqwait_until_t;
++
++typedef union {
++ unsigned long val : 32;
++ nqwait_until_t f;
++} nqwait_until_u;
++
++typedef struct _rbbm_debug_t {
++ unsigned long rbbm_debug : 32;
++ } rbbm_debug_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_debug_t f;
++} rbbm_debug_u;
++
++typedef struct _rbbm_cmdfifo_addr_t {
++ unsigned long cmdfifo_addr : 6;
++ unsigned long : 26;
++ } rbbm_cmdfifo_addr_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_cmdfifo_addr_t f;
++} rbbm_cmdfifo_addr_u;
++
++typedef struct _rbbm_cmdfifo_datal_t {
++ unsigned long cmdfifo_datal : 32;
++ } rbbm_cmdfifo_datal_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_cmdfifo_datal_t f;
++} rbbm_cmdfifo_datal_u;
++
++typedef struct _rbbm_cmdfifo_datah_t {
++ unsigned long cmdfifo_datah : 12;
++ unsigned long : 20;
++ } rbbm_cmdfifo_datah_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_cmdfifo_datah_t f;
++} rbbm_cmdfifo_datah_u;
++
++typedef struct _rbbm_cmdfifo_stat_t {
++ unsigned long cmdfifo_rptr : 6;
++ unsigned long : 2;
++ unsigned long cmdfifo_wptr : 6;
++ unsigned long : 18;
++ } rbbm_cmdfifo_stat_t;
++
++typedef union {
++ unsigned long val : 32;
++ rbbm_cmdfifo_stat_t f;
++} rbbm_cmdfifo_stat_u;
++
++typedef struct _clk_pin_cntl_t {
++ unsigned long osc_en : 1;
++ unsigned long osc_gain : 5;
++ unsigned long dont_use_xtalin : 1;
++ unsigned long xtalin_pm_en : 1;
++ unsigned long xtalin_dbl_en : 1;
++ unsigned long : 7;
++ unsigned long cg_debug : 16;
++ } clk_pin_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ clk_pin_cntl_t f;
++} clk_pin_cntl_u;
++
++typedef struct _pll_ref_fb_div_t {
++ unsigned long pll_ref_div : 4;
++ unsigned long : 4;
++ unsigned long pll_fb_div_int : 6;
++ unsigned long : 2;
++ unsigned long pll_fb_div_frac : 3;
++ unsigned long : 1;
++ unsigned long pll_reset_time : 4;
++ unsigned long pll_lock_time : 8;
++ } pll_ref_fb_div_t;
++
++typedef union {
++ unsigned long val : 32;
++ pll_ref_fb_div_t f;
++} pll_ref_fb_div_u;
++
++typedef struct _pll_cntl_t {
++ unsigned long pll_pwdn : 1;
++ unsigned long pll_reset : 1;
++ unsigned long pll_pm_en : 1;
++ unsigned long pll_mode : 1;
++ unsigned long pll_refclk_sel : 1;
++ unsigned long pll_fbclk_sel : 1;
++ unsigned long pll_tcpoff : 1;
++ unsigned long pll_pcp : 3;
++ unsigned long pll_pvg : 3;
++ unsigned long pll_vcofr : 1;
++ unsigned long pll_ioffset : 2;
++ unsigned long pll_pecc_mode : 2;
++ unsigned long pll_pecc_scon : 2;
++ unsigned long pll_dactal : 4;
++ unsigned long pll_cp_clip : 2;
++ unsigned long pll_conf : 3;
++ unsigned long pll_mbctrl : 2;
++ unsigned long pll_ring_off : 1;
++ } pll_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ pll_cntl_t f;
++} pll_cntl_u;
++
++typedef struct _sclk_cntl_t {
++ unsigned long sclk_src_sel : 2;
++ unsigned long : 2;
++ unsigned long sclk_post_div_fast : 4;
++ unsigned long sclk_clkon_hys : 3;
++ unsigned long sclk_post_div_slow : 4;
++ unsigned long disp_cg_ok2switch_en : 1;
++ unsigned long sclk_force_reg : 1;
++ unsigned long sclk_force_disp : 1;
++ unsigned long sclk_force_mc : 1;
++ unsigned long sclk_force_extmc : 1;
++ unsigned long sclk_force_cp : 1;
++ unsigned long sclk_force_e2 : 1;
++ unsigned long sclk_force_e3 : 1;
++ unsigned long sclk_force_idct : 1;
++ unsigned long sclk_force_bist : 1;
++ unsigned long busy_extend_cp : 1;
++ unsigned long busy_extend_e2 : 1;
++ unsigned long busy_extend_e3 : 1;
++ unsigned long busy_extend_idct : 1;
++ unsigned long : 3;
++ } sclk_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ sclk_cntl_t f;
++} sclk_cntl_u;
++
++typedef struct _pclk_cntl_t {
++ unsigned long pclk_src_sel : 2;
++ unsigned long : 2;
++ unsigned long pclk_post_div : 4;
++ unsigned long : 8;
++ unsigned long pclk_force_disp : 1;
++ unsigned long : 15;
++ } pclk_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ pclk_cntl_t f;
++} pclk_cntl_u;
++
++typedef struct _clk_test_cntl_t {
++ unsigned long testclk_sel : 4;
++ unsigned long : 3;
++ unsigned long start_check_freq : 1;
++ unsigned long tstcount_rst : 1;
++ unsigned long : 15;
++ unsigned long test_count : 8;
++ } clk_test_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ clk_test_cntl_t f;
++} clk_test_cntl_u;
++
++typedef struct _pwrmgt_cntl_t {
++ unsigned long pwm_enable : 1;
++ unsigned long : 1;
++ unsigned long pwm_mode_req : 2;
++ unsigned long pwm_wakeup_cond : 2;
++ unsigned long pwm_fast_noml_hw_en : 1;
++ unsigned long pwm_noml_fast_hw_en : 1;
++ unsigned long pwm_fast_noml_cond : 4;
++ unsigned long pwm_noml_fast_cond : 4;
++ unsigned long pwm_idle_timer : 8;
++ unsigned long pwm_busy_timer : 8;
++ } pwrmgt_cntl_t;
++
++typedef union {
++ unsigned long val : 32;
++ pwrmgt_cntl_t f;
++} pwrmgt_cntl_u;
++
++typedef struct _pwrmgt_status_t {
++ unsigned long pwm_mode : 2;
++ unsigned long : 30;
++ } pwrmgt_status_t;
++
++typedef union {
++ unsigned long val : 32;
++ pwrmgt_status_t f;
++} pwrmgt_status_u;
++
++typedef struct _cursor_offset_t {
++ unsigned long cur_offset : 24;
++ unsigned long cur_x_offset : 4;
++ unsigned long cur_y_offset : 4;
++} cursor_offset_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor_offset_t f;
++} cursor_offset_u;
++
++typedef struct _cursor_h_pos_t {
++ unsigned long cur_h_start : 10;
++ unsigned long : 6;
++ unsigned long cur_h_end : 10;
++ unsigned long : 5;
++ unsigned long cur_en : 1;
++} cursor_h_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor_h_pos_t f;
++} cursor_h_pos_u;
++
++typedef struct _cursor_v_pos_t {
++ unsigned long cur_v_start : 10;
++ unsigned long : 6;
++ unsigned long cur_v_end : 10;
++ unsigned long : 6;
++} cursor_v_pos_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor_v_pos_t f;
++} cursor_v_pos_u;
++
++typedef struct _cursor_color_t {
++ unsigned long cur_color_r : 8;
++ unsigned long cur_color_g : 8;
++ unsigned long cur_color_b : 8;
++ unsigned long : 8;
++} cursor_color_t;
++
++typedef union {
++ unsigned long val : 32;
++ cursor_color_t f;
++} cursor_color_u;
++
++#endif
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_stub.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_stub.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,95 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++#include "imageon.h"
++#include "imageon_regs.h"
++#include "klinux.h"
++
++extern W100CardEntry w100_cards[];
++
++static Bool
++FindW100(CARD16 vendor, CARD16 device, KdCardAttr * attr)
++{
++ CARD8 *mmio;
++ CARD32 chip_id;
++ Bool found = FALSE;
++
++ mmio = KdMapDevice(W100_REG_BASE, W100_REG_SIZE);
++ KdSetMappedMode((CARD32) mmio, W100_REG_SIZE,
++ KD_MAPPED_MODE_REGISTERS);
++
++ chip_id = (*(VOL32 *)(mmio + mmCHIP_ID));
++ if ((vendor | (device << 16)) == chip_id) {
++ ErrorF("(I) Found W100 Chip ID: %08x\n\n", chip_id);
++ attr->deviceID = device;
++ attr->vendorID = vendor;
++ found = TRUE;
++ }
++ KdUnmapDevice(mmio, W100_REG_SIZE);
++ return found;
++}
++
++
++void
++InitCard(char *name)
++{
++ int i;
++ W100CardEntry *entry;
++ KdCardAttr attr;
++
++ for (entry = w100_cards; entry->name; entry++) {
++ if (FindW100(entry->vendor, entry->device, &attr)) {
++ KdCardInfoAdd(&W100Funcs, &attr, 0);
++ break;
++ }
++ }
++}
++
++void
++InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
++{
++ KdInitOutput(pScreenInfo, argc, argv);
++}
++
++void
++InitInput(int argc, char **argv)
++{
++ KdInitInput(&LinuxMouseFuncs, &LinuxKeyboardFuncs);
++#ifdef TOUCHSCREEN
++ KdAddMouseDriver(&TsFuncs);
++#endif
++}
++
++void
++ddxUseMsg(void)
++{
++ KdUseMsg();
++}
++
++int
++ddxProcessArgument(int argc, char **argv, int i)
++{
++ return KdProcessArgument(argc, argv, i);
++}
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,1474 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++
++#include <sys/time.h>
++
++#include "imageon.h"
++#include "imageon_regs.h"
++#include "imageon_const.h"
++
++CARD8 W100SolidRop[16] = {
++ /* GXclear */ 0x00, /* 0 */
++ /* GXand */ 0xa0, /* src AND dst */
++ /* GXandReverse */ 0x50, /* src AND NOT dst */
++ /* GXcopy */ 0xf0, /* src */
++ /* GXandInverted */ 0x0a, /* NOT src AND dst */
++ /* GXnoop */ 0xaa, /* dst */
++ /* GXxor */ 0x5a, /* src XOR dst */
++ /* GXor */ 0xfa, /* src OR dst */
++ /* GXnor */ 0x05, /* NOT src AND NOT dst */
++ /* GXequiv */ 0xa5, /* NOT src XOR dst */
++ /* GXinvert */ 0x55, /* NOT dst */
++ /* GXorReverse */ 0xf5, /* src OR NOT dst */
++ /* GXcopyInverted */ 0x0f, /* NOT src */
++ /* GXorInverted */ 0xaf, /* NOT src OR dst */
++ /* GXnand */ 0x5f, /* NOT src OR NOT dst */
++ /* GXset */ 0xff, /* 1 */
++};
++
++CARD8 W100BltRop[16] = {
++ /* GXclear */ 0x00, /* 0 */
++ /* GXand */ 0x88, /* src AND dst */
++ /* GXandReverse */ 0x44, /* src AND NOT dst */
++ /* GXcopy */ 0xcc, /* src */
++ /* GXandInverted */ 0x22, /* NOT src AND dst */
++ /* GXnoop */ 0xaa, /* dst */
++ /* GXxor */ 0x66, /* src XOR dst */
++ /* GXor */ 0xee, /* src OR dst */
++ /* GXnor */ 0x11, /* NOT src AND NOT dst */
++ /* GXequiv */ 0x99, /* NOT src XOR dst */
++ /* GXinvert */ 0x55, /* NOT dst */
++ /* GXorReverse */ 0xdd, /* src OR NOT dst */
++ /* GXcopyInverted */ 0x33, /* NOT src */
++ /* GXorInverted */ 0xbb, /* NOT src OR dst */
++ /* GXnand */ 0x77, /* NOT src OR NOT dst */
++ /* GXset */ 0xff, /* 1 */
++};
++
++extern W100ModeSpec w100_modes[];
++extern W100StartupInfo w100StartupInfo;
++
++void W100DisableDisplayUpdate(W100CardInfo *w100c)
++{
++ disp_db_buf_cntl_wr_u disp_db_buf_cntl;
++
++ disp_db_buf_cntl.f.db_buf_cntl = 30;
++ disp_db_buf_cntl.f.en_db_buf = 0;
++ disp_db_buf_cntl.f.update_db_buf = 0;
++ MMIO_OUT32(mmDISP_DB_BUF_CNTL, disp_db_buf_cntl.val);
++}
++
++void W100EnableDisplayUpdate(W100CardInfo *w100c)
++{
++ disp_db_buf_cntl_wr_u disp_db_buf_cntl;
++
++ disp_db_buf_cntl.f.db_buf_cntl = 30;
++ disp_db_buf_cntl.f.en_db_buf = 1;
++ disp_db_buf_cntl.f.update_db_buf = 1;
++ MMIO_OUT32(mmDISP_DB_BUF_CNTL, disp_db_buf_cntl.val);
++}
++
++void W100SetupGraphicEngine(W100CardInfo *w100c)
++{
++ eng_cntl_u eng_cntl;
++ sc_bottom_right_u bottomright;
++ rbbm_cntl_u rbbm_cntl;
++ dst_pitch_u dpitch;
++ dst_offset_u doffset;
++ src_pitch_u spitch;
++ src_offset_u soffset;
++ sc_top_left_u tl;
++ sc_bottom_right_u br;
++ src_sc_bottom_right_u srcbr;
++ dp_gui_master_cntl_u gmc;
++ dp_mix_u dp_mix;
++ dp_cntl_u dp_cntl;
++ dp_datatype_u dp_datatype;
++
++ DBG_IMAGEON(("W100SetupGraphicEngine(offset:%p, pitch:%d)\n",
++ w100c->hw_window.offset,
++ w100c->hw_window.width));
++
++ eng_cntl.val = MMIO_IN32(mmENG_CNTL);
++ eng_cntl.f.erc_reg_wr_ws = 0;
++ MMIO_OUT32(mmENG_CNTL, eng_cntl.val);
++
++ rbbm_cntl.val = 0;
++ rbbm_cntl.f.abortclks_hi = 4;
++ rbbm_cntl.f.abortclks_cp = 4;
++ rbbm_cntl.f.abortclks_cfifo = 2;
++ MMIO_OUT32(mmRBBM_CNTL, rbbm_cntl.val);
++
++ bottomright.val = 0;
++ bottomright.f.sc_bottom = 0x1fff;
++ bottomright.f.sc_right = 0x1fff;
++ MMIO_OUT32(mmDEFAULT_SC_BOTTOM_RIGHT, bottomright.val);
++
++ dpitch.val = 0;
++ dpitch.f.dst_pitch = w100c->hw_window.width;
++ MMIO_OUT32(mmDST_PITCH, dpitch.val);
++
++ doffset.val = 0;
++ doffset.f.dst_offset = (CARD32) w100c->hw_window.offset;
++ MMIO_OUT32(mmDST_OFFSET, doffset.val);
++
++ spitch.val = 0;
++ spitch.f.src_pitch = w100c->hw_window.width;
++ MMIO_OUT32(mmSRC_PITCH, spitch.val);
++ soffset.val = 0;
++ soffset.f.src_offset = (CARD32) w100c->hw_window.offset;
++ MMIO_OUT32(mmSRC_OFFSET, soffset.val);
++
++ tl.f.sc_left = tl.f.sc_top = 0;
++ br.f.sc_right = br.f.sc_bottom = 0x1fff;
++ MMIO_OUT32(mmSC_TOP_LEFT, tl.val);
++ MMIO_OUT32(mmSC_BOTTOM_RIGHT, br.val);
++
++ srcbr.f.sc_right = srcbr.f.sc_bottom = 0x1fff;
++ MMIO_OUT32(mmSRC_SC_BOTTOM_RIGHT, br.val);
++
++ gmc.val = dp_datatype.val = dp_mix.val = dp_cntl.val = 0;
++
++ dp_cntl.f.dst_x_dir = 1;
++ dp_cntl.f.dst_y_dir = 1;
++ dp_cntl.f.src_x_dir = 1;
++ dp_cntl.f.src_y_dir = 1;
++ dp_cntl.f.dst_major_x = 1;
++ dp_cntl.f.src_major_x = 1;
++ MMIO_OUT32(mmDP_CNTL, dp_cntl.val);
++
++ gmc.f.gmc_src_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_pitch_offset_cntl = 1;
++ gmc.f.gmc_src_clipping = 1;
++ gmc.f.gmc_dst_clipping = 1;
++ gmc.f.gmc_brush_datatype = DP_BRUSH_SOLIDCOLOR;
++ gmc.f.gmc_dst_datatype = DP_DST_16BPP_1555;
++ gmc.f.gmc_src_datatype = DP_SRC_SOLID_COLOR_BLT;
++ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++ gmc.f.gmc_default_sel = 0;
++ gmc.f.gmc_rop3 = W100SolidRop[GXcopy];
++ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ gmc.f.gmc_clr_cmp_fcn_dis = 1;
++ gmc.f.gmc_wr_msk_dis = 1;
++ gmc.f.gmc_dp_op = DP_OP_ROP;
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, gmc.val);
++
++ dp_datatype.f.dp_dst_datatype = gmc.f.gmc_dst_datatype;
++ dp_datatype.f.dp_brush_datatype = gmc.f.gmc_brush_datatype;
++ dp_datatype.f.dp_src2_type = 0;
++ dp_datatype.f.dp_src2_datatype = gmc.f.gmc_src_datatype;
++ dp_datatype.f.dp_src_datatype = gmc.f.gmc_src_datatype;
++ dp_datatype.f.dp_byte_pix_order = gmc.f.gmc_byte_pix_order;
++ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val);
++
++ dp_mix.f.dp_src_source = gmc.f.gmc_dp_src_source;
++ dp_mix.f.dp_src2_source = gmc.f.gmc_dp_src_source;
++ dp_mix.f.dp_rop3 = gmc.f.gmc_rop3;
++ dp_mix.f.dp_op = gmc.f.gmc_dp_op;
++ MMIO_OUT32(mmDP_MIX, dp_mix.val);
++}
++
++void W100ResetGraphicEngine(W100CardInfo *w100c)
++{
++ rbbm_soft_reset_u sreset;
++ sclk_cntl_u sclk_cntl;
++ CARD32 restore_sclk;
++
++ ErrorF("->W100ResetGraphicEngine\n");
++ sclk_cntl.val = restore_sclk = MMIO_IN32(mmSCLK_CNTL);
++
++ sclk_cntl.f.sclk_force_e2 = 1;
++ sclk_cntl.f.sclk_force_e3 = 1;
++ sclk_cntl.f.sclk_force_idct = 1;
++ MMIO_OUT32(mmSCLK_CNTL, sclk_cntl.val);
++
++ sreset.val = 0;
++ sreset.f.soft_reset_e2 = 1;
++ MMIO_OUT32(mmRBBM_SOFT_RESET, sreset.val);
++ sreset.f.soft_reset_e2 = 0;
++ MMIO_OUT32(mmRBBM_SOFT_RESET, 0);
++
++ MMIO_OUT32(mmSCLK_CNTL, restore_sclk);
++ ErrorF("<-W100ResetGraphicEngine\n");
++}
++
++W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode)
++{
++ W100ModeSpec *modes;
++ for (modes = w100_modes; modes->width; modes++) {
++ if ((modes->bpp == mode->bpp) &&
++ (((modes->width == mode->width) &&
++ (modes->height == mode->height)) ||
++ ((modes->width == mode->height) &&
++ (modes->height == mode->width)))) {
++ return modes;
++ }
++ }
++ ErrorF("No matching mode spec for %dx%d@%d\n",
++ mode->width, mode->height, mode->bpp);
++ return NULL;
++}
++
++W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height)
++{
++ unsigned int best_x = 0xffffffff;
++ unsigned int best_y = 0xffffffff;
++ W100ModeSpec *modes, *best_mode = NULL;
++ for (modes = w100_modes; modes->width; modes++) {
++ if (modes->supported) {
++ if (((modes->width >= width) && (modes->width < best_x)) &&
++ ((modes->height >= height) && (modes->height < best_y))) {
++ best_mode = modes;
++ best_x = modes->width;
++ best_y = modes->height;
++ } else if (((modes->width >= height) && (modes->width < best_y)) &&
++ ((modes->height >= width) && (modes->height < best_x))) {
++ best_mode = modes;
++ best_x = modes->height;
++ best_y = modes->width;
++ }
++ }
++ }
++ if (!best_mode) {
++ ErrorF("No matching mode spec for %dx%d\n", width, height);
++ }
++ return best_mode;
++}
++
++Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode)
++{
++ struct fb_var_screeninfo vinfo;
++ int i;
++
++ if (ioctl(w100c->fbdev.fd, FBIOGET_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("Unable to get framebuffer mode\n");
++ return FALSE;
++ }
++
++ mode->width = vinfo.xres;
++ mode->height = vinfo.yres;
++ mode->bpp = vinfo.bits_per_pixel;
++}
++
++Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes)
++{
++ struct fb_var_screeninfo vinfo;
++
++ vinfo.xres = vinfo.xres_virtual = modes->width;
++ vinfo.yres = vinfo.yres_virtual = modes->height;
++ vinfo.bits_per_pixel = modes->bpp;
++ vinfo.activate = FB_ACTIVATE_TEST;
++
++ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("(W) Mode %dx%d@%d not supported\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel);
++ return FALSE;
++ }
++ DBG_IMAGEON(("(I) Mode %dx%d@%d supported\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel));
++ return TRUE;
++}
++
++Bool W100SetFbMode(W100CardInfo *w100c)
++{
++ struct fb_var_screeninfo vinfo;
++ int randr = KdSubRotation(w100c->hw_window.randr, w100StartupInfo.randr);
++
++ if (randr & (RR_Rotate_0 | RR_Rotate_180)) {
++ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->width;
++ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->height;
++ } else {
++ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->height;
++ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->width;
++ }
++ vinfo.bits_per_pixel = w100c->hw_window.mode->bpp;
++ vinfo.activate = FB_ACTIVATE_NOW;
++ int flip = (w100c->hw_window.randr > RR_Rotate_90) ? 1 : 0;
++
++ DBG_IMAGEON(("Asking framebuffer for mode %dx%d@%d. Flipped:%d\n",
++ vinfo.xres, vinfo.yres, vinfo.bits_per_pixel, flip));
++ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("Error setting mode %dx%d@%d\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel);
++ return FALSE;
++ }
++ W100SysFsSet(w100c, W100_SYSFS_BASE "flip", flip ? "1" : "0");
++ return TRUE;
++}
++
++void W100SetupGraphicWindow(W100CardInfo *w100c)
++{
++ DBG_IMAGEON(("W100SetupGraphicWindow(width:%d,height:%d,randr:%d)\n",
++ w100c->hw_window.width,
++ w100c->hw_window.height,
++ w100c->hw_window.randr));
++
++ if (!W100SetFbMode(w100c)) {
++ ErrorF("Error Setting Graphic Window\n");
++ }
++}
++
++void W100EnableGraphicWindow(W100CardInfo *w100c)
++{
++ graphic_ctrl_u gc;
++
++ gc.val = MMIO_IN32(mmGRAPHIC_CTRL);
++ gc.f.en_graphic_crtc = 1;
++ gc.f.en_graphic_req = 1;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmGRAPHIC_CTRL, gc.val);
++ W100EnableDisplayUpdate(w100c);
++}
++
++void W100DisableGraphicWindow(W100CardInfo *w100c)
++{
++ graphic_ctrl_u gc;
++
++ gc.val = MMIO_IN32(mmGRAPHIC_CTRL);
++ gc.f.en_graphic_crtc = 0;
++ gc.f.en_graphic_req = 0;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmGRAPHIC_CTRL, gc.val);
++ W100EnableDisplayUpdate(w100c);
++}
++
++inline Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries)
++{
++ rbbm_status_u rbbmStatus;
++ TIMEOUT_LOCALS;
++
++ if (entries > W100_CMDFIFO_SIZE)
++ return FALSE;
++
++ if (entries <= w100c->cmdfifo_entries) {
++ w100c->cmdfifo_entries -= entries;
++ return TRUE;
++ }
++
++ WHILE_NOT_TIMEOUT(.2) {
++ rbbmStatus.val = MMIO_IN32(mmRBBM_STATUS);
++ w100c->cmdfifo_entries = rbbmStatus.f.cmdfifo_avail;
++ if (w100c->cmdfifo_entries >= entries) {
++ break;
++ }
++ }
++ if (TIMEDOUT()) {
++ ErrorF("Not enough CMDFIFO entries: %d (%d needed)\n",
++ w100c->cmdfifo_entries, entries);
++ return FALSE;
++ }
++ w100c->cmdfifo_entries -= entries;
++ return TRUE;
++}
++
++Bool W100WaitIdle(W100CardInfo *w100c)
++{
++ rbbm_status_u rbbm_status;
++ TIMEOUT_LOCALS;
++
++ DBG_IMAGEON(("W100WaitIdle\n"));
++ if (!W100WaitCmdFifoEntries(w100c, W100_CMDFIFO_SIZE)) {
++ return FALSE;
++ }
++
++ WHILE_NOT_TIMEOUT(.2) {
++ rbbm_status.val = MMIO_IN32(mmRBBM_STATUS);
++ if (rbbm_status.f.gui_active == 0) {
++ break;
++ }
++ }
++ if (TIMEDOUT()) {
++ ErrorF("Timeout waiting for idle. rbbm_status: 0x%08x\n"
++ " .cmdfifo_avail : %d\n"
++ " .cf_pipe_busy : %d\n"
++ " .eng_ev_busy : %d\n"
++ " .cp_cmdstrm_busy : %d\n"
++ " .e2_busy : %d\n"
++ " .rb2d_busy : %d\n"
++ " .rb3d_busy : %d\n"
++ " .se_busy : %d\n"
++ " .re_busy : %d\n"
++ " .tam_busy : %d\n"
++ " .tdm_busy : %d\n"
++ " .pb_busy : %d\n"
++ " .gui_active : %d\n",
++ rbbm_status.val,
++ rbbm_status.f.cmdfifo_avail,
++ rbbm_status.f.cf_pipe_busy,
++ rbbm_status.f.eng_ev_busy,
++ rbbm_status.f.cp_cmdstrm_busy,
++ rbbm_status.f.e2_busy,
++ rbbm_status.f.rb2d_busy,
++ rbbm_status.f.rb3d_busy,
++ rbbm_status.f.se_busy,
++ rbbm_status.f.re_busy,
++ rbbm_status.f.tam_busy,
++ rbbm_status.f.tdm_busy,
++ rbbm_status.f.pb_busy,
++ rbbm_status.f.gui_active);
++ ErrorF("Last context: src(datatype:%d,pitch:%d,offset:0x%08x)\n"
++ " dst(datatype:%d,pitch:%d,offset:0x%08x)\n"
++ " xform(dx:%d,dy:%d)\n"
++ " mask(pm:0x%08x,enable:%d)\n",
++ w100c->ctx.src.datatype,
++ w100c->ctx.src.pitch,
++ w100c->ctx.src.offset,
++ w100c->ctx.dst.datatype,
++ w100c->ctx.dst.pitch,
++ w100c->ctx.dst.offset,
++ w100c->ctx.xform.dx,
++ w100c->ctx.xform.dy,
++ w100c->ctx.mask.pm,
++ w100c->ctx.mask.enable);
++
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++void W100ResetContext(W100CardInfo *w100c)
++{
++ w100c->ctx.dst.datatype = DP_DST_16BPP_1555;
++ w100c->ctx.dst.pitch = 0;
++ w100c->ctx.dst.offset = 0;
++ w100c->ctx.dst.videomem = 0;
++
++ w100c->ctx.src.datatype = DP_SRC_COLOR_SAME_AS_DST;
++ w100c->ctx.src.pitch = 0;
++ w100c->ctx.src.offset = 0;
++ w100c->ctx.src.videomem = 0;
++
++ w100c->ctx.xform.dx = 0;
++ w100c->ctx.xform.dy = 0;
++ w100c->ctx.xform.randr = 0;
++ w100c->ctx.xform.mirror = FALSE;
++ w100c->ctx.xform.dataPath = 0x0000003f;
++
++ w100c->ctx.mask.pm = 0;
++ w100c->ctx.mask.enable = FALSE;
++}
++
++CARD32 W100ComputeSolidGmc(W100CardInfo *w100c, CARD8 alu)
++{
++ dp_gui_master_cntl_u gmc;
++
++ gmc.val = 0;
++ gmc.f.gmc_dst_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_clipping = 0;
++ gmc.f.gmc_brush_datatype = DP_BRUSH_SOLIDCOLOR;
++ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype;
++ gmc.f.gmc_dp_op = DP_OP_ROP;
++ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ gmc.f.gmc_rop3 = W100SolidRop[alu];
++ gmc.f.gmc_clr_cmp_fcn_dis = 1;
++ if (w100c->ctx.mask.enable) {
++ gmc.f.gmc_wr_msk_dis = 0;
++ } else {
++ gmc.f.gmc_wr_msk_dis = 1;
++ }
++ return gmc.val;
++}
++
++CARD32 W100ComputeCopyGmc(W100CardInfo *w100c, CARD8 alu)
++{
++ dp_gui_master_cntl_u gmc;
++
++ gmc.val = 0;
++ gmc.f.gmc_src_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_clipping = 0;
++ gmc.f.gmc_src_clipping = 0;
++ gmc.f.gmc_src_datatype = w100c->ctx.src.datatype;
++ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ gmc.f.gmc_brush_datatype = DP_BRUSH_NONE;
++ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype;
++ gmc.f.gmc_dp_op = DP_OP_ROP;
++ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++ gmc.f.gmc_rop3 = W100BltRop[alu];
++ gmc.f.gmc_clr_cmp_fcn_dis = 1;
++ if (w100c->ctx.mask.enable) {
++ gmc.f.gmc_wr_msk_dis = 0;
++ } else {
++ gmc.f.gmc_wr_msk_dis = 1;
++ }
++ return gmc.val;
++}
++
++CARD32 W100ComputeAritGmc(W100CardInfo *w100c, CARD8 alu)
++{
++ dp_gui_master_cntl_u gmc;
++
++ gmc.val = 0;
++ gmc.f.gmc_src_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_pitch_offset_cntl = 1;
++ gmc.f.gmc_dst_clipping = 0;
++ gmc.f.gmc_src_clipping = 0;
++ gmc.f.gmc_src_datatype = w100c->ctx.src.datatype;
++ gmc.f.gmc_dst_datatype = w100c->ctx.dst.datatype;
++ gmc.f.gmc_dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ gmc.f.gmc_brush_datatype = DP_BRUSH_NONE;
++ gmc.f.gmc_dp_op = DP_OP_ARITHMETIC;
++ gmc.f.gmc_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++ gmc.f.gmc_rop3 = W100BltRop[alu];
++ gmc.f.gmc_clr_cmp_fcn_dis = 1;
++ if (w100c->ctx.mask.enable) {
++ gmc.f.gmc_wr_msk_dis = 0;
++ } else {
++ gmc.f.gmc_wr_msk_dis = 1;
++ }
++ return gmc.val;
++}
++
++void W100SetXForm(W100CardInfo *w100c, int dx, int dy)
++{
++ dp_cntl_u dp_cntl;
++
++ w100c->ctx.xform.dx = dx;
++ w100c->ctx.xform.dy = dy;
++
++ dp_cntl.val = 0;
++ dp_cntl.f.src_x_dir = 1;
++ dp_cntl.f.src_y_dir = 1;
++ dp_cntl.f.src_major_x = 1;
++ dp_cntl.f.dst_major_x = 1;
++
++ if (dx >= 0) {
++ dp_cntl.f.dst_x_dir = 1;
++ } else {
++ dp_cntl.f.dst_x_dir = 0;
++ }
++ if (dy >= 0) {
++ dp_cntl.f.dst_y_dir = 1;
++ } else {
++ dp_cntl.f.dst_y_dir = 0;
++ }
++ w100c->ctx.xform.dataPath = dp_cntl.val;
++}
++
++void W100SetRotation(W100CardInfo *w100c,
++ int randr,
++ Bool mirror)
++{
++ dp_cntl_u dp_cntl;
++ w100c->ctx.xform.randr = randr;
++ w100c->ctx.xform.mirror = mirror;
++ dp_cntl.val = 0;
++ dp_cntl.f.src_x_dir = 1;
++ dp_cntl.f.src_y_dir = 1;
++ dp_cntl.f.src_major_x = 1;
++
++
++ switch (randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ dp_cntl.f.dst_x_dir = mirror ? 0 : 1;
++ dp_cntl.f.dst_y_dir = 1;
++ dp_cntl.f.dst_major_x = 1;
++ break;
++ case RR_Rotate_90:
++ dp_cntl.f.dst_x_dir = 0;
++ dp_cntl.f.dst_y_dir = mirror ? 0 : 1;
++ dp_cntl.f.dst_major_x = 0;
++ break;
++ case RR_Rotate_180:
++ dp_cntl.f.dst_x_dir = mirror ? 1 : 0;
++ dp_cntl.f.dst_y_dir = 0;
++ dp_cntl.f.dst_major_x = 1;
++ break;
++ case RR_Rotate_270:
++ dp_cntl.f.dst_x_dir = 1;
++ dp_cntl.f.dst_y_dir = mirror ? 1 : 0;
++ dp_cntl.f.dst_major_x = 0;
++ break;
++ }
++ w100c->ctx.xform.dataPath = dp_cntl.val;
++}
++
++void W100SetPixelMask(W100CardInfo *w100c, Pixel mask)
++{
++ if (mask != 0xffffffff) {
++ w100c->ctx.mask.enable = TRUE;
++ w100c->ctx.mask.pm = mask;
++ } else {
++ w100c->ctx.mask.enable = FALSE;
++ }
++}
++
++Bool W100SetSource(KdScreenInfo *screen,
++ CARD32 srcPitch,
++ CARD32 srcOffset,
++ CARD8 bpp)
++{
++ W100CardInfo(screen);
++ int i;
++ w100c->ctx.src.pitch = srcPitch * 8 / bpp;
++ switch (bpp) {
++ case 1:
++ w100c->ctx.src.datatype = DP_SRC_1BPP_OPA;
++ break;
++ case 4:
++ w100c->ctx.src.datatype = DP_SRC_4BPP;
++ break;
++ case 12:
++ w100c->ctx.src.datatype = DP_SRC_12BPP_PACKED;
++ break;
++ case 8:
++ case 16:
++ w100c->ctx.src.datatype = DP_SRC_COLOR_SAME_AS_DST;
++ break;
++ default:
++ return FALSE;
++ }
++
++ for (i = 0; i < screen->num_videomem_areas; i++) {
++ KdVideoMemArea *vidmem = screen->videomem_areas[i];
++ if ((((CARD8*)srcOffset) >= vidmem->base) &&
++ (((CARD8*)srcOffset) <= (vidmem->base + vidmem->size))) {
++ w100c->ctx.src.offset = (CARD32) W100_HOST2CARD(srcOffset);
++ if (w100c->last_src_videomem != i) {
++ W100WaitIdle(w100c);
++ }
++ w100c->last_src_videomem = i;
++ DBG_IMAGEON(("Setting src(pitch:%d,offset:0x%08x,type:%d)\n",
++ w100c->ctx.src.pitch,
++ w100c->ctx.src.offset,
++ w100c->ctx.src.datatype));
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
++Bool W100SetDestination(KdScreenInfo *screen,
++ CARD32 dstPitch,
++ CARD32 dstOffset,
++ CARD8 bpp)
++{
++ W100CardInfo(screen);
++ int i;
++ w100c->ctx.dst.pitch = dstPitch * 8 / bpp;
++ switch (bpp) {
++ case 8:
++ w100c->ctx.dst.datatype = DP_DST_8BPP;
++ break;
++ case 16:
++ w100c->ctx.dst.datatype = DP_DST_16BPP_1555;
++ break;
++ default:
++ return FALSE;
++ }
++
++ for (i = 0; i < screen->num_videomem_areas; i++) {
++ KdVideoMemArea *vidmem = screen->videomem_areas[i];
++ if ((((CARD8*)dstOffset) >= vidmem->base) &&
++ (((CARD8*)dstOffset) <= (vidmem->base + vidmem->size))) {
++ w100c->ctx.dst.offset = (CARD32) W100_HOST2CARD(dstOffset);
++ if (w100c->last_dst_videomem != i) {
++ W100WaitIdle(w100c);
++ }
++ w100c->last_dst_videomem = i;
++ DBG_IMAGEON(("Setting dst(pitch:%d,offset:0x%08x,type:%d)\n",
++ w100c->ctx.dst.pitch,
++ w100c->ctx.dst.offset,
++ w100c->ctx.dst.datatype));
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
++Bool W100SetSourcePixmap(PixmapPtr pPix)
++{
++ KdScreenPriv(pPix->drawable.pScreen);
++
++ return W100SetSource(pScreenPriv->screen,
++ pPix->devKind,
++ (CARD32) pPix->devPrivate.ptr,
++ pPix->drawable.bitsPerPixel);
++}
++
++Bool W100SetDestinationPixmap(PixmapPtr pPix)
++{
++ KdScreenPriv(pPix->drawable.pScreen);
++
++ return W100SetDestination(pScreenPriv->screen,
++ pPix->devKind,
++ (CARD32) pPix->devPrivate.ptr,
++ pPix->drawable.bitsPerPixel);
++}
++
++void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst)
++{
++ switch (w100c->hw_window.randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ dst->x1 = src->x1;
++ dst->y1 = src->y1;
++ dst->x2 = src->x2;
++ dst->y2 = src->y2;
++ break;
++ case RR_Rotate_90:
++ dst->x1 = w100c->hw_window.height - src->y2 - 1;
++ dst->y1 = src->x1;
++ dst->x2 = w100c->hw_window.height - src->y1 - 1;
++ dst->y2 = src->x2;
++ break;
++ case RR_Rotate_180:
++ dst->x1 = w100c->hw_window.width - src->x2 - 1;
++ dst->y1 = w100c->hw_window.height - src->y2 - 1;
++ dst->x2 = w100c->hw_window.width - src->x1 - 1;
++ dst->y2 = w100c->hw_window.height - src->y1 - 1;
++ break;
++ case RR_Rotate_270:
++ dst->x1 = src->y1;
++ dst->y1 = w100c->hw_window.width - src->x2 - 1;
++ dst->x2 = src->y2;
++ dst->y2 = w100c->hw_window.width - src->x1 - 1;
++ break;
++ }
++ DBG_IMAGEON(("MapToDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ src->x1, src->y1, src->x2, src->y2,
++ dst->x1, dst->y1, dst->x2, dst->y2));
++}
++
++void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst)
++{
++ switch (w100c->hw_window.randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ dst->x1 = src->x1;
++ dst->y1 = src->y1;
++ dst->x2 = src->x2;
++ dst->y2 = src->y2;
++ break;
++ case RR_Rotate_90:
++ dst->x1 = src->y1;
++ dst->y1 = w100c->hw_window.height - src->x2 - 1;
++ dst->x2 = src->y2;
++ dst->y2 = w100c->hw_window.height - src->x1 - 1;
++ break;
++ case RR_Rotate_180:
++ dst->x1 = w100c->hw_window.width - src->x2 - 1;
++ dst->y1 = w100c->hw_window.height - src->y2 - 1;
++ dst->x2 = w100c->hw_window.width - src->x1 - 1;
++ dst->y2 = w100c->hw_window.height - src->y1 - 1;
++ break;
++ case RR_Rotate_270:
++ dst->x1 = w100c->hw_window.height - src->y2 - 1;
++ dst->y1 = src->x1;
++ dst->x2 = w100c->hw_window.width - src->y1 - 1;
++ dst->y2 = src->x2;
++ break;
++ }
++ DBG_IMAGEON(("MapFromDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ src->x1, src->y1, src->x2, src->y2,
++ dst->x1, dst->y1, dst->x2, dst->y2));
++}
++
++void W100MoveTo(BoxPtr src, int x, int y)
++{
++ src->x1 += x;
++ src->y1 += y;
++ src->x2 += x;
++ src->y2 += y;
++}
++
++void W100ChangeOrigin(BoxPtr src, int x, int y)
++{
++ src->x1 -= x;
++ src->y1 -= y;
++ src->x2 -= x;
++ src->y2 -= y;
++}
++
++void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale)
++{
++ if (scale >= 0) {
++ dst->x1 = src->x1 << scale;
++ dst->x2 = src->x2 << scale;
++ dst->y1 = src->y1 << scale;
++ dst->y2 = src->y2 << scale;
++ } else {
++ dst->x1 = src->x1 >> -scale;
++ dst->x2 = src->x2 >> -scale;
++ dst->y1 = src->y1 >> -scale;
++ dst->y2 = src->y2 >> -scale;
++ }
++}
++
++void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y)
++{
++ switch (w100c->ctx.xform.randr & RR_Rotate_All) {
++ case RR_Rotate_0:
++ if (w100c->ctx.xform.mirror) {
++ *x = box->x2;
++ } else {
++ *x = box->x1;
++ }
++ *y = box->y1;
++ break;
++ case RR_Rotate_90:
++ *x = box->x2;
++ if (w100c->ctx.xform.mirror) {
++ *y = box->y2;
++ } else {
++ *y = box->y1;
++ }
++ break;
++ case RR_Rotate_180:
++ if (w100c->ctx.xform.mirror) {
++ *x = box->x1;
++ } else {
++ *x = box->x2;
++ }
++ *y = box->y2;
++ break;
++ case RR_Rotate_270:
++ *x = box->x1;
++ if (w100c->ctx.xform.mirror) {
++ *y = box->y1;
++ } else {
++ *y = box->y2;
++ }
++ }
++}
++
++CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize)
++{
++ return W100_MAX(1, W100_MIN(31, ((16 * srcsize) + dstsize - 1) / dstsize));
++
++}
++
++CARD16 W100ApplyScaler(CARD16 srcsize, CARD8 scaler)
++{
++ return ((srcsize * 16) + (scaler - 1)) / scaler;
++}
++
++
++static void W100Blt(KdScreenInfo *screen,
++ int randr, int bpp,
++ CARD32 srcOffset,
++ CARD16 srcPitch,
++ BoxPtr srcBox,
++ CARD32 dstOffset,
++ CARD16 dstPitch,
++ BoxPtr dstBox)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ int fifoEntries = 9;
++ Bool hasXForm = FALSE;
++ eng_cntl_u eng_cntl;
++ src_x_y_u src_x_y;
++ dst_x_y_u dst_x_y;
++ src_width_u src_width;
++ src_height_u src_height;
++ dst_width_height_u dst_width_height;
++ CARD16 dstX;
++ CARD16 dstY;
++
++ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
++ hasXForm = TRUE;
++ eng_cntl.val = w100c->regs.ENG_CNTL;
++ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1;
++ eng_cntl.f.dis_src_uses_dst_dirmaj = 1;
++ fifoEntries += 4;
++ }
++
++ W100ResetContext(w100c);
++ W100SetRotation(w100c, randr, FALSE);
++ W100SetSource(screen, srcPitch, srcOffset, bpp);
++ W100SetDestination(screen, dstPitch, dstOffset, bpp);
++ W100TrajectoryOrigin(w100c, dstBox, &dstX, &dstY);
++
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ dst_x_y.f.dst_x = dstX;
++ dst_x_y.f.dst_y = dstY;
++ src_width.f.src_width = srcBox->x2 - srcBox->x1 + 1;
++ src_height.f.src_height = srcBox->y2 - srcBox->y1 + 1;
++ dst_width_height.f.dst_height = dstBox->y2 - dstBox->y1 + 1;
++ dst_width_height.f.dst_width_b0 = (dstBox->x2 - dstBox->x1 + 1) & 0xff;
++ dst_width_height.f.dst_width_b1 = ((dstBox->x2 - dstBox->x1 + 1) >> 8) & 0x3f;
++
++ DBG_IMAGEON(("W100Blt src(x:%d,y:%d,w:%d,h:%d) dst(x:%d,y:%d,w:%d,h:%d)\n",
++ src_x_y.f.src_x,
++ src_x_y.f.src_y,
++ src_width.f.src_width,
++ src_height.f.src_height,
++ dst_x_y.f.dst_x,
++ dst_x_y.f.dst_y,
++ dst_width_height.f.dst_width_b0 |
++ dst_width_height.f.dst_width_b1 << 8,
++ dst_width_height.f.dst_height));
++
++ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) {
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch);
++ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset);
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeCopyGmc(w100c, GXcopy));
++ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath);
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, eng_cntl.val);
++ MMIO_OUT32(mmSRC_WIDTH, src_width.val);
++ MMIO_OUT32(mmSRC_HEIGHT, src_height.val);
++ }
++ MMIO_OUT32(mmSRC_X_Y, src_x_y.val);
++ MMIO_OUT32(mmDST_X_Y, dst_x_y.val);
++ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val);
++ /* Restore state */
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL);
++ }
++ } else {
++ ErrorF("Unable to perform Blitting\n");
++ }
++}
++
++static void W100StretchBlt(KdScreenInfo *screen,
++ int randr,
++ int bpp,
++ CARD32 srcOffset,
++ CARD16 srcPitch,
++ BoxPtr srcBox,
++ CARD32 dstOffset,
++ CARD16 dstPitch,
++ BoxPtr dstBox,
++ CARD8 xscaler,
++ CARD8 yscaler)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ Bool hasXForm = FALSE;
++ dp_datatype_u dp_datatype;
++ dp_mix_u dp_mix;
++ eng_cntl_u eng_cntl;
++ e2_arithmetic_cntl_u e2;
++ src_inc_u src_inc;
++ src_x_y_u src_x_y;
++ dst_x_y_u dst_x_y;
++ src_width_u src_width;
++ src_height_u src_height;
++ dst_width_height_u dst_width_height;
++ int firstStage = 10;
++ int secondStage = 10;
++ CARD16 dx, dy, sw, sh, dw, dh;
++ BoxRec dst;
++
++ DBG_IMAGEON(("W100StretchBlt(randr:%d,bpp:%d,"
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "xscaler:%d,yscaler:%d)\n",
++ randr, bpp,
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2,
++ srcPitch, srcOffset,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2,
++ dstPitch, dstOffset,
++ xscaler, yscaler));
++
++ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler);
++ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler);
++
++ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
++ hasXForm = TRUE;
++ eng_cntl.val = w100c->regs.ENG_CNTL;
++ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1;
++ eng_cntl.f.dis_src_uses_dst_dirmaj = 1;
++ ++firstStage;
++ ++secondStage;
++ dh = sw;
++ dw = sh;
++ } else {
++ dh = sh;
++ dw = sw;
++ }
++
++ dst.x1 = dstBox->x1;
++ dst.y1 = dstBox->y1;
++ dst.x2 = dst.x1 + dw - 1;
++ dst.y2 = dst.y1 + dh - 1;
++
++ W100ResetContext(w100c);
++ W100SetRotation(w100c, randr, FALSE);
++ W100SetSource(screen, srcPitch, srcOffset, bpp);
++ W100SetDestination(screen, dstPitch, dstOffset, bpp);
++ W100TrajectoryOrigin(w100c, &dst, &dx, &dy);
++
++ src_inc.val = 0;
++ src_inc.f.src_xinc = xscaler;
++ src_inc.f.src_yinc = yscaler;
++
++ dp_datatype.val = 0;
++ dp_datatype.f.dp_brush_datatype = DP_BRUSH_SOLIDCOLOR;
++ dp_datatype.f.dp_dst_datatype = w100c->ctx.dst.datatype;
++ dp_datatype.f.dp_src_datatype = w100c->ctx.src.datatype;
++ dp_datatype.f.dp_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++
++ dp_mix.val = 0;
++ dp_mix.f.dp_op = DP_OP_ARITHMETIC;
++ dp_mix.f.dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ dp_mix.f.dp_rop3 = W100BltRop[GXcopy];
++
++ e2.val = 0;
++ e2.f.opcode = E2_OPC_STRETCH_SRC2;
++ e2.f.srcblend = E2_SRCBLEND_ZERO;
++ e2.f.dstblend = E2_DSTBLEND_ZERO;
++
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ dst_x_y.f.dst_x = dx;
++ dst_x_y.f.dst_y = dy;
++ src_width.f.src_width = sw + 1;
++ src_height.f.src_height = sh;
++ dst_width_height.f.dst_height = dh;
++ dst_width_height.f.dst_width_b0 = dw & 0xff;
++ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f;
++
++
++ if (W100WaitCmdFifoEntries(w100c, firstStage)) {
++ /* Set Source */
++ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch);
++ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset);
++
++ /* Set Destination */
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++
++ /* Prepare for Stretch Operation */
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeAritGmc(w100c, GXcopy));
++ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val);
++ MMIO_OUT32(mmDP_MIX, dp_mix.val);
++ MMIO_OUT32(mmE2_ARITHMETIC_CNTL, e2.val);
++
++ /* Set Data Trajectory */
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, eng_cntl.val);
++ }
++ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath);
++ } else {
++ ErrorF("Error preparing for Stretch operation\n");
++ return;
++ }
++
++ if (W100WaitCmdFifoEntries(w100c, secondStage)) {
++ /* Perform blitting */
++ MMIO_OUT32(mmSRC_X_Y, src_x_y.val);
++ MMIO_OUT32(mmDST_X_Y, dst_x_y.val);
++ MMIO_OUT32(mmSRC_WIDTH, src_width.val);
++ MMIO_OUT32(mmSRC_HEIGHT, src_height.val);
++ MMIO_OUT32(mmSRC_INC, src_inc.val);
++ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val);
++ /* Restore state */
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL);
++ }
++ } else {
++ ErrorF("Error performing Stretch operation\n");
++ }
++}
++
++static void W100ScaledBlt(KdScreenInfo *screen,
++ int randr,
++ int bpp,
++ CARD32 srcOffset,
++ CARD16 srcPitch,
++ BoxPtr srcBox,
++ CARD32 dstOffset,
++ CARD16 dstPitch,
++ BoxPtr dstBox,
++ CARD8 xscaler,
++ CARD8 yscaler)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ Bool hasXForm = FALSE;
++ dp_datatype_u dp_datatype;
++ dp_mix_u dp_mix;
++ eng_cntl_u eng_cntl;
++ e2_arithmetic_cntl_u e2;
++ src_inc_u src_inc;
++ src_x_y_u src_x_y;
++ src2_x_y_u src2_x_y;
++ dst_x_y_u dst_x_y;
++ src_width_u src_width;
++ src_height_u src_height;
++ dst_width_height_u dst_width_height;
++ int firstStage = 11;
++ int secondStage = 11;
++ CARD16 dx, dy, sw, sh, dw, dh;
++ BoxRec dst;
++
++ DBG_IMAGEON(("W100ScaledBlt(randr:%d,bpp:%d,"
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "xscaler:%d,yscaler:%d)\n",
++ randr, bpp,
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2,
++ srcPitch, srcOffset,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2,
++ dstPitch, dstOffset,
++ xscaler, yscaler));
++
++ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler);
++ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler);
++
++ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
++ hasXForm = TRUE;
++ eng_cntl.val = w100c->regs.ENG_CNTL;
++ eng_cntl.f.dis_rop_src_uses_dst_w_h = 1;
++ eng_cntl.f.dis_src_uses_dst_dirmaj = 1;
++ ++firstStage;
++ ++secondStage;
++ dh = sw;
++ dw = sh;
++ } else {
++ dh = sh;
++ dw = sw;
++ }
++
++ dst.x1 = dstBox->x1;
++ dst.y1 = dstBox->y1;
++ dst.x2 = dst.x1 + dw - 1;
++ dst.y2 = dst.y1 + dh - 1;
++
++ W100ResetContext(w100c);
++ W100SetRotation(w100c, randr, FALSE);
++ W100SetSource(screen, srcPitch, srcOffset, bpp);
++ W100SetDestination(screen, dstPitch, dstOffset, bpp);
++ W100TrajectoryOrigin(w100c, &dst, &dx, &dy);
++
++ DBG_IMAGEON(("Corrected dst(x1:%d,y1:%d,x2:%d,y2:%d). Origin(%d,%d)\n",
++ dst.x1, dst.y1, dst.x2, dst.y2,
++ dx, dy));
++
++ src_inc.val = 0;
++ src_inc.f.src_xinc = xscaler;
++ src_inc.f.src_yinc = yscaler;
++
++ dp_datatype.val = 0;
++ dp_datatype.f.dp_brush_datatype = DP_BRUSH_SOLIDCOLOR;
++ dp_datatype.f.dp_src2_type = 1;
++ dp_datatype.f.dp_dst_datatype = w100c->ctx.dst.datatype;
++ dp_datatype.f.dp_src2_datatype = w100c->ctx.src.datatype;
++ dp_datatype.f.dp_src_datatype = w100c->ctx.src.datatype;
++ dp_datatype.f.dp_byte_pix_order = DP_PIX_ORDER_LSB2MSB;
++
++ dp_mix.val = 0;
++ dp_mix.f.dp_op = DP_OP_ARITHMETIC;
++ dp_mix.f.dp_src_source = DP_SRC_MEM_RECTANGULAR;
++ dp_mix.f.dp_src2_source = DP_SRC_MEM_RECTANGULAR;
++ dp_mix.f.dp_rop3 = W100BltRop[GXcopy];
++
++ e2.val = 0;
++ e2.f.opcode = E2_OPC_SCALE_SRC2;
++ e2.f.srcblend = E2_SRCBLEND_ZERO;
++ e2.f.dstblend = E2_DSTBLEND_ZERO;
++
++
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ src2_x_y.f.src_x = srcBox->x1;
++ src2_x_y.f.src_y = srcBox->y1 + 4;
++ dst_x_y.f.dst_x = dx;
++ dst_x_y.f.dst_y = dy;
++ src_width.f.src_width = sw + 1;
++ src_height.f.src_height = sh;
++ dst_width_height.f.dst_height = dh;
++ dst_width_height.f.dst_width_b0 = dw & 0xff;
++ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f;
++
++ if (W100WaitCmdFifoEntries(w100c, firstStage)) {
++ /* Set Source */
++ MMIO_OUT32(mmSRC_PITCH, w100c->ctx.src.pitch);
++ MMIO_OUT32(mmSRC_OFFSET, w100c->ctx.src.offset);
++
++ /* Set Destination */
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++ /* Set second source */
++ MMIO_OUT32(mmSRC2_PITCH, w100c->ctx.src.pitch);
++ MMIO_OUT32(mmSRC2_OFFSET, w100c->ctx.src.offset);
++
++ /* Prepare for Stretch Operation */
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL, W100ComputeAritGmc(w100c, GXcopy));
++ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val);
++ MMIO_OUT32(mmDP_MIX, dp_mix.val);
++ MMIO_OUT32(mmE2_ARITHMETIC_CNTL, e2.val);
++ /* Set Data Trajectory */
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, eng_cntl.val);
++ }
++ MMIO_OUT32(mmDP_CNTL, w100c->ctx.xform.dataPath);
++ } else {
++ ErrorF("Unable to prepare for Scaled Blitting\n");
++ return;
++ }
++ if (W100WaitCmdFifoEntries(w100c, secondStage)) {
++ /* Perform blitting */
++ MMIO_OUT32(mmSRC_X_Y, src_x_y.val);
++ MMIO_OUT32(mmSRC2_X_Y, src2_x_y.val);
++ MMIO_OUT32(mmSRC2_WIDTH, src_width.val);
++ MMIO_OUT32(mmSRC2_HEIGHT, src_height.val);
++ MMIO_OUT32(mmSRC_INC, src_inc.val);
++ MMIO_OUT32(mmSRC2_INC, src_inc.val);
++ MMIO_OUT32(mmDST_X_Y, dst_x_y.val);
++ MMIO_OUT32(mmSRC_WIDTH, src_width.val);
++ MMIO_OUT32(mmSRC_HEIGHT, src_height.val);
++ MMIO_OUT32(mmDST_WIDTH_HEIGHT, dst_width_height.val);
++ /* Restore state */
++ if (hasXForm) {
++ MMIO_OUT32(mmENG_CNTL, w100c->regs.ENG_CNTL);
++ }
++ /* Without this, solid blitting is no longer working correctly */
++ dp_datatype.f.dp_src2_type = 0;
++ MMIO_OUT32(mmDP_DATATYPE, dp_datatype.val);
++ } else {
++ ErrorF("Unable to perform Scaled Blitting\n");
++ }
++}
++
++void W100PlanarBlt(KdScreenInfo *screen,
++ int planes, int planeOffsets[],
++ int bpp, int randr,
++ KdOffscreenArea *src,
++ int srcW,
++ int srcH,
++ BoxPtr srcBox,
++ KdOffscreenArea *dst,
++ int dstW,
++ int dstH,
++ BoxPtr dstBox)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++
++ CARD16 dstBoxW, dstBoxH, srcBoxW, srcBoxH;
++ CARD8 *srcOffset, *dstBase, *dstOffset;
++ int xerror, yerror;
++ unsigned int subsampling[] = {0, 1, 1};
++ int plane;
++ srcBoxW = srcBox->x2 - srcBox->x1 + 1;
++ srcBoxH = srcBox->y2 - srcBox->y1 + 1;
++ if (randr & (RR_Rotate_90 | RR_Rotate_270)) {
++ dstBoxW = dstBox->y2 - dstBox->y1 + 1;
++ dstBoxH = dstBox->x2 - dstBox->x1 + 1;
++ } else {
++ dstBoxW = dstBox->x2 - dstBox->x1 + 1;
++ dstBoxH = dstBox->y2 - dstBox->y1 + 1;
++ }
++
++ Bool stretch = ((srcBoxW != dstBoxW) || (srcBoxH != dstBoxH));
++ CARD8 xscaler, yscaler;
++ BoxRec dstb = *dstBox;
++
++ DBG_IMAGEON(("W100PlanarBlt(planes:%d,bpp:%d,randr:%d,"
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d)\n",
++ planes, bpp, randr,
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2, srcW, srcH,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2, dstW, dstH));
++
++ xerror = yerror = 0;
++ if (stretch) {
++ xscaler = W100GetScaler(dstBoxW, srcBoxW);
++ yscaler = W100GetScaler(dstBoxH, srcBoxH);
++ if (xscaler != 16 || yscaler != 16) {
++ xerror = (dstBoxW - W100ApplyScaler(srcBoxW, xscaler)) / 2;
++ yerror = (dstBoxH - W100ApplyScaler(srcBoxH, yscaler)) / 2;
++ DBG_IMAGEON(("Stretching with xscaler:%d,yscaler:%d,"
++ "xerror:%d,yerror:%d\n",
++ xscaler, yscaler, xerror, yerror));
++ } else {
++ xerror = yerror = 0;
++ stretch = FALSE;
++ }
++ }
++
++ W100MoveTo(&dstb, xerror, yerror);
++
++ srcOffset = src->vidmem->base + src->offset;
++ dstBase = dst->vidmem->base + dst->offset;
++ for (plane = 0; plane < planes; plane++) {
++ BoxRec srcCBox;
++ BoxRec dstCBox;
++ dstOffset = dstBase + planeOffsets[plane];
++ W100ScaleBox(srcBox, &srcCBox, -subsampling[plane]);
++ W100ScaleBox(&dstb, &dstCBox, -subsampling[plane]);
++ if (stretch) {
++ W100ScaledBlt(screen, randr, bpp,
++ (CARD32) srcOffset,
++ srcW >> subsampling[plane],
++ &srcCBox,
++ (CARD32) dstOffset,
++ dstW >> subsampling[plane],
++ &dstCBox,
++ xscaler, yscaler);
++ } else {
++ W100Blt(screen, randr, bpp,
++ (CARD32) srcOffset,
++ srcW >> subsampling[plane],
++ &srcCBox,
++ (CARD32) dstOffset,
++ dstW >> subsampling[plane],
++ &dstCBox);
++ }
++ srcOffset += (srcW * srcH) >> (subsampling[plane] * 2);
++ }
++}
++
++void W100SetBrightness(W100CardInfo *w100c, CARD8 value)
++{
++ brightness_cntl_u brightness;
++ brightness.val = 0;
++ brightness.f.brightness = value;
++ MMIO_OUT32(mmBRIGHTNESS_CNTL, brightness.val);
++}
++
++CARD8 W100GetBrightness(W100CardInfo *w100c)
++{
++ brightness_cntl_u brightness;
++ brightness.val = MMIO_IN32(mmBRIGHTNESS_CNTL);
++ return brightness.f.brightness;
++}
++
++int W100GetRotation(W100CardInfo *w100c)
++{
++ graphic_ctrl_u gc;
++ int randr;
++
++ gc.val = MMIO_IN32(mmGRAPHIC_CTRL);
++
++ switch (gc.f.portrait_mode) {
++ case 0:
++ randr = RR_Rotate_0;
++ break;
++ case 1:
++ randr = RR_Rotate_90;
++ break;
++ case 2:
++ randr = RR_Rotate_270;
++ break;
++ case 3:
++ randr = RR_Rotate_180;
++ break;
++ }
++ return randr;
++}
++
++Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value)
++{
++ FILE *fd;
++ if ((fd = fopen(path, "w")) == NULL) {
++ ErrorF("(E) Error in W100SysFsSet: Unable to open '%s'\n", path);
++ return FALSE;
++ }
++ fprintf(fd, "%s", value);
++ fclose(fd);
++ return TRUE;
++}
++
++Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value)
++{
++ FILE *fd;
++ if ((fd = fopen(path, "r")) == NULL) {
++ ErrorF("(E) Error in W100SysFsGet: Unable to open '%s'\n", path);
++ return FALSE;
++ }
++ fscanf(fd, "%s", value);
++ fclose(fd);
++ return TRUE;
++}
++
++void W100TransformTsLibCoordinates(long *x, long *y, void *closure)
++{
++ W100CardInfo *w100c = closure;
++
++ if (w100c->hw_window.mode->width == 320) {
++ *x >>= 1;
++ *y >>= 1;
++ }
++}
++
++void W100VSync(W100CardInfo *w100c)
++{
++ int timeout = 30000; /* VSync timeout = 30[ms] > 16.8[ms] */
++ active_v_disp_u active_v_disp;
++ disp_int_cntl_u disp_int_cntl;
++ gen_int_cntl_u gen_int_cntl;
++ gen_int_status_wr_u gen_int_status;
++
++ active_v_disp.val = MMIO_IN32(mmACTIVE_V_DISP);
++
++ /*set vline pos */
++ disp_int_cntl.val = 0;
++ disp_int_cntl.f.vline_int_pos = active_v_disp.f.active_v_end;
++ MMIO_OUT32(mmDISP_INT_CNTL, disp_int_cntl.val);
++
++ /* disable vline irq */
++ gen_int_cntl.val = MMIO_IN32(mmGEN_INT_CNTL);
++ gen_int_cntl.f.crtc_vline_mask = 0;
++ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val);
++
++ /* clear vline irq status */
++ gen_int_status.val = 0;
++ gen_int_status.f.crtc_vline_stat_ak = 1;
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++
++ /* enable vline irq */
++ gen_int_cntl.f.crtc_vline_mask = 1;
++ MMIO_OUT32(gen_int_cntl.val, mmGEN_INT_CNTL);
++
++ /* clear vline irq status */
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++
++ while (timeout > 0) {
++ if (MMIO_IN32(mmGEN_INT_STATUS) & 0x00000002) {
++ break;
++ }
++ usleep(1);
++ timeout--;
++ }
++
++ /* disable vline irq */
++ gen_int_cntl.f.crtc_vline_mask = 0;
++ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val);
++
++ /* clear vline irq status */
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++}
++
++
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_video.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_video.c 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,1172 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <kdrive-config.h>
++#endif
++#include "imageon.h"
++#include "imageon_regs.h"
++#include "imageon_support.h"
++#include "imageon_const.h"
++#include "kaa.h"
++
++#include <X11/extensions/Xv.h>
++#include "fourcc.h"
++
++static Atom xvBrightness;
++static Atom xvMaxOverlaySize;
++static Atom xvColorKey;
++
++#define IMAGE_MAX_WIDTH 720
++#define IMAGE_MAX_HEIGHT 576
++
++#define W_ALIGN 0
++#define H_ALIGN 0
++
++#define OVL_W_ALIGN 16
++#define OVL_H_ALIGN 16
++
++#define OVL_MAX_SIZE 196608
++
++static KdVideoEncodingRec DummyEncoding[1] = {
++ {0, "XV_IMAGE", IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, {1, 1}}
++};
++
++#define NUM_IMAGES (4)
++static KdImageRec Images[NUM_IMAGES] = {
++ XVIMAGE_YUY2,
++ XVIMAGE_YV12,
++ XVIMAGE_I420,
++ XVIMAGE_UYVY
++};
++
++#define NUM_FORMATS (3)
++static KdVideoFormatRec Formats[NUM_FORMATS] = {
++ {15, TrueColor},
++ {16, TrueColor},
++ {24, TrueColor}
++};
++
++#define NUM_ATTRIBUTES (3)
++static KdAttributeRec Attributes[NUM_ATTRIBUTES] = {
++ {XvSettable | XvGettable, 0, (1 << 16) - 1, "XV_COLORKEY"},
++ {XvSettable | XvGettable, 0, 127, "XV_BRIGHTNESS"},
++ {XvSettable | XvGettable, 0, 392960, "XV_MAXOVERLAYSIZE"}
++};
++
++#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
++
++#define NUM_OVL_RESIZERS (10)
++static struct {
++ CARD8 xfactor;
++ CARD8 yfactor;
++} ovlResizers[NUM_OVL_RESIZERS] = {
++ { 0, 0 },
++ { 0, 1 }, { 1, 0 }, { 1, 1 },
++ { 1, 2 }, { 2, 1 }, { 2, 2 },
++ { 2, 3 }, { 3, 2 }, { 3, 3 }
++};
++
++static int W100SurfaceSize(W100PortPrivPtr port, short w, short h)
++{
++ int size = 0;
++ DBG_IMAGEON(("W100SurfaceSize for id=%08x, w=%d, h=%d\n",
++ port->src.id, w, h));
++
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ size = (3 * w * h) / 2;
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ size = w * h * 2;
++ break;
++ }
++ return size;
++}
++
++static void W100ClearSurface(KdScreenInfo *screen,
++ KdOffscreenArea *area,
++ CARD16 x,
++ CARD16 y,
++ CARD16 pitch,
++ CARD16 width,
++ CARD16 height,
++ int id)
++{
++ W100CardInfo(screen);
++ int nplanes;
++ unsigned int subsampling[] = {0, 1, 1};
++ unsigned int zero[] = {0, 0x80, 0x80};
++ int bpp;
++ int plane;
++ CARD8 *dstOffset = area->vidmem->base + area->offset;
++
++ switch (id) {
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ nplanes = 1;
++ bpp = 16;
++ break;
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ nplanes = 3;
++ bpp = 8;
++ }
++
++ DBG_IMAGEON(("Clearing surface with planes:%d, bpp:%d, pitch:%d, height:%d\n",
++ nplanes, bpp, pitch, height));
++
++ W100ResetContext(w100c);
++ for (plane = 0; plane < nplanes; plane++) {
++ W100SetDestination(screen,
++ pitch >> subsampling[plane],
++ (CARD32) dstOffset,
++ bpp);
++ if (W100WaitCmdFifoEntries(w100c, 6)) {
++ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
++ MMIO_OUT32(mmDST_OFFSET, w100c->ctx.dst.offset);
++ MMIO_OUT32(mmDP_GUI_MASTER_CNTL,
++ W100ComputeSolidGmc(w100c, GXcopy));
++ MMIO_OUT32(mmDP_BRUSH_FRGD_CLR, zero[plane]);
++ MMIO_OUT32(mmDST_Y_X, 0);
++ MMIO_OUT32(mmDST_HEIGHT_WIDTH, (height << 16) | width);
++ } else {
++ ErrorF("Error clearing surface\n");
++ break;
++ }
++ dstOffset += (pitch * height) >> (subsampling[plane] * 2);
++ }
++}
++
++static void W100OverlaySetup(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ CARD16 w, h, pitch;
++ video_ctrl_u video_ctrl;
++ video_y_offset_u video_y_offset;
++ video_y_pitch_u video_y_pitch;
++ video_u_offset_u video_u_offset;
++ video_u_pitch_u video_u_pitch;
++ video_v_offset_u video_v_offset;
++ video_v_pitch_u video_v_pitch;
++ graphic_key_u graphic_key;
++ video_h_pos_u video_hpos;
++ video_v_pos_u video_vpos;
++ graphic_h_disp_u graphic_h_disp;
++ graphic_v_disp_u graphic_v_disp;
++
++ w = pitch = port->ovl.frame.x2 - port->ovl.frame.x1 + 1;
++ h = port->ovl.frame.y2 - port->ovl.frame.y1 + 1;
++
++ ErrorF("W100OverlaySetup(ovlX:%d,ovlY:%d,ovlWidth:%d,ovlHeight:%d,"
++ "videoHorExp:%d,videoVerExp:%d,YPlane:0x%08x,UPlane:0x%08x,"
++ "VPlane:0x%08x)\n",
++ port->ovl.frame.x1, port->ovl.frame.y1, w, h,
++ port->ovl.horExp,
++ port->ovl.verExp,
++ port->planes.yplane,
++ port->planes.uplane,
++ port->planes.vplane);
++
++ if (port->videoStatus & W100_OVERLAY_CONFIGURED) {
++ return;
++ }
++
++ w <<= port->ovl.horExp;
++ h <<= port->ovl.verExp;
++
++ video_ctrl.val = w100c->regs.VIDEO_CTRL;
++
++ video_ctrl.f.video_inv_hor = 0;
++ video_ctrl.f.video_inv_ver = 0;
++ video_ctrl.f.yuv2rgb_option = 0;
++ video_ctrl.f.video_hor_exp = port->ovl.horExp;
++ video_ctrl.f.video_ver_exp = port->ovl.verExp;
++ video_ctrl.f.video_ch_sel = 0;
++
++ video_ctrl.f.yuv2rgb_en = 1;
++ //Only support this, by the moment
++ video_ctrl.f.video_mode = OVLFORMAT_YUV420;
++
++
++ video_y_pitch.val = 0;
++ video_u_pitch.val = 0;
++ video_v_pitch.val = 0;
++ video_y_pitch.f.y_pitch = pitch;
++ video_u_pitch.f.u_pitch = pitch >> 1;
++ video_v_pitch.f.v_pitch = pitch >> 1;
++
++ video_y_offset.val = 0;
++ video_u_offset.val = 0;
++ video_v_offset.val = 0;
++ video_y_offset.f.y_offset = port->planes.yplane;
++ video_u_offset.f.u_offset = port->planes.uplane;
++ video_v_offset.f.v_offset = port->planes.vplane;
++
++ graphic_key.val = 0;
++ graphic_key.f.keyer_color = port->ovl.colorKey;
++ graphic_key.f.keyer_mask = 0xffffUL;
++ video_ctrl.f.keyer_en = 1;
++
++ graphic_h_disp.val = w100c->regs.GRAPHIC_H_DISP;
++ graphic_v_disp.val = w100c->regs.GRAPHIC_V_DISP;
++
++ video_hpos.f.video_h_start = graphic_h_disp.f.graphic_h_start
++ + port->ovl.frame.x1;
++ video_hpos.f.video_h_end = video_hpos.f.video_h_start + w;
++
++ video_vpos.f.video_v_start = graphic_v_disp.f.graphic_v_start
++ + port->ovl.frame.y1;
++ video_vpos.f.video_v_end = video_vpos.f.video_v_start + h;
++ if (video_hpos.f.video_h_end > graphic_h_disp.f.graphic_h_end) {
++ w = graphic_h_disp.f.graphic_h_end - video_hpos.f.video_h_start;
++ }
++
++ //This is possibly not valid for non planar modes
++ video_ctrl.f.total_req_video = (w + 3) / 4;
++
++ W100DisableDisplayUpdate(w100c);
++ //This need to be tuned deeply, to get an stable
++ //overlay image:
++ //Best results seems to be present with 0x40xxxxxx
++ //But overlay surface must be located in a 8 dot multiple
++ MMIO_OUT32(mmDISP_DEBUG2,
++ (w100c->regs.DISP_DEBUG2 & ~0xff000000) | 0x40000000 );
++ MMIO_OUT32(mmGRAPHIC_KEY, graphic_key.val);
++ MMIO_OUT32(mmVIDEO_Y_OFFSET, video_y_offset.val);
++ MMIO_OUT32(mmVIDEO_Y_PITCH, video_y_pitch.val);
++ MMIO_OUT32(mmVIDEO_U_OFFSET, video_u_offset.val);
++ MMIO_OUT32(mmVIDEO_U_PITCH, video_u_pitch.val);
++ MMIO_OUT32(mmVIDEO_V_OFFSET, video_v_offset.val);
++ MMIO_OUT32(mmVIDEO_V_PITCH, video_v_pitch.val);
++ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
++ MMIO_OUT32(mmVIDEO_H_POS, video_hpos.val);
++ MMIO_OUT32(mmVIDEO_V_POS, video_vpos.val);
++ W100EnableDisplayUpdate(w100c);
++
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus |= W100_OVERLAY_CONFIGURED;
++}
++
++static void W100OverlayEnable(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ video_ctrl_u video_ctrl;
++
++ if (!(port->videoStatus & W100_OVERLAY_CONFIGURED)) {
++ W100OverlaySetup(screen);
++ }
++
++ if (!(port->videoStatus & W100_OVERLAY_ON)) {
++ ErrorF("W100OverlayEnable()\n");
++ video_ctrl.val = port->videoCtrl;
++ video_ctrl.f.en_video_req = 1;
++ video_ctrl.f.en_video_crtc = 1;
++ video_ctrl.f.en_graphic_req_video = 1;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
++ W100EnableDisplayUpdate(w100c);
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus |= W100_OVERLAY_ON;
++ }
++}
++
++static void W100OverlayDisable(KdScreenInfo *screen)
++{
++
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ video_ctrl_u video_ctrl;
++
++ if ((port->videoStatus & W100_OVERLAY_ON)) {
++ ErrorF("W100OverlayDisable()\n");
++ video_ctrl.val = port->videoCtrl;
++ video_ctrl.f.en_video_req = 0;
++ video_ctrl.f.en_video_crtc = 0;
++ video_ctrl.f.en_graphic_req_video = 0;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
++ W100EnableDisplayUpdate(w100c);
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus &= ~W100_OVERLAY_ON;
++ }
++}
++
++static void W100VideoSave(ScreenPtr pScreen, KdOffscreenArea *area)
++{
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ if (port->src.surface == area) {
++ port->src.surface = NULL;
++ }
++
++ if (port->ovl.surface == area) {
++ port->ovl.surface = NULL;
++ }
++}
++
++static void W100SaveSurface(CARD8 *src, int size, const char *file)
++{
++ int fd;
++ if (fd = open(file, O_WRONLY | O_CREAT | O_TRUNC,
++ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) {
++ write(fd, (void*) src, size);
++ close(fd);
++ }
++}
++
++static void W100HostPlanarData(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ KdOffscreenArea *dst = port->src.surface;
++ CARD8 *src = port->src.buffer;
++ CARD16 srcPitch = port->src.width; //WARN: padding?
++ CARD16 srcHeight = port->src.height;
++ CARD16 dstPitch = port->src.box.x2 - port->src.box.x1 + 1; //WARN: padding?
++ CARD16 dstHeight = port->src.box.y2 - port->src.box.y1 + 1;
++ CARD16 srcX = port->src.box.x1;
++ CARD16 srcY = port->src.box.y1;
++ CARD16 dstX = 0;
++ CARD16 dstY = 0;
++ CARD16 w = dstPitch;
++ CARD16 h = dstHeight;
++ CARD8 *dstBase = dst->vidmem->base + dst->offset;
++ CARD8 *dstPtr;
++ CARD8 *srcPtr;
++ int i;
++
++ srcPtr = src + (srcY * srcPitch) + srcX;
++ dstPtr = dstBase + (dstY * dstPitch) + dstX;
++
++ DBG_IMAGEON(("W100HostPlanarData(src(pitch:%d,offset:0x%08x,x:%d,y:%d),"
++ "dst(pitch:%d,offset:0x%08x,x:%d,y:%d), w:%d,h:%d)\n",
++ srcPitch, srcPtr, srcX, srcY,
++ dstPitch, dstPtr, dstX, dstY,
++ w, h));
++
++ /* Copy Y plane */
++ for (i = 0; i < h; i++) {
++ memcpy(dstPtr, srcPtr, w);
++ dstPtr += dstPitch;
++ srcPtr += srcPitch;
++ }
++ /* Copy U plane */
++ dstPtr = dstBase + (dstHeight * dstPitch) //Start of U Plane
++ + (dstX >> 1) //X Offset
++ + ((dstY * dstPitch) >> 2); //Y Offset
++ if (port->src.id == FOURCC_I420) {
++ srcPtr = src + (srcHeight * srcPitch) //Start of U Plane
++ + (srcX >> 1) //X Offset
++ + ((srcY * srcPitch) >> 2); //Y Offset
++ } else {
++ srcPtr = src + ((5 * srcHeight * srcPitch) / 4) //Start of U Plane
++ + (srcX >> 1) //X Offset
++ + ((srcY * srcPitch) >> 2); //Y Offset
++ }
++ for (i = 0; i < (h >> 1); i++) {
++ memcpy(dstPtr, srcPtr, w >> 1); //U Plane scanline
++ srcPtr += srcPitch >> 1;
++ dstPtr += dstPitch >> 1;
++ }
++
++ /* Copy V plane */
++ dstPtr = dstBase + ((5 * dstHeight * dstPitch) / 4) //Start of V Plane
++ + (dstX >> 1) //X Offset
++ + ((dstY * dstPitch) >> 2); //Y Offset
++ if (port->src.id == FOURCC_I420) {
++ srcPtr = src + ((5 * srcHeight * srcPitch) / 4) //Start of V Plane
++ + (srcX >> 1) //X Offset
++ + ((srcY * srcPitch) >> 2); //Y Offset
++ } else {
++ srcPtr = src + (srcHeight * srcPitch) //Start of V Plane
++ + (srcX >> 1) //X Offset
++ + ((srcY * srcPitch) >> 2); //Y Offset
++ }
++ for (i = 0; i < (h >> 1); i++) {
++ memcpy(dstPtr, srcPtr, w >> 1); //V Plane scanline
++ srcPtr += srcPitch >> 1;
++ dstPtr += dstPitch >> 1;
++ }
++}
++
++static void W100HostPackedData(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ KdOffscreenArea *dst = port->src.surface;
++ CARD8 *src = port->src.buffer;
++ CARD16 srcPitch = port->src.width << 1; //WARN: padding?
++ CARD16 dstPitch = (port->src.box.x2 - port->src.box.x1 + 1) << 1;
++ CARD16 srcX = port->src.box.x1;
++ CARD16 srcY = port->src.box.y1;
++ CARD16 dstX = 0;
++ CARD16 dstY = 0;
++ CARD16 w = port->src.box.x2 - port->src.box.x1 + 1;
++ CARD16 h = port->src.box.y2 - port->src.box.y1 + 1;
++
++ CARD8 *dstBase = dst->vidmem->base + dst->offset;
++ CARD8 *dstPtr = dstBase + (dstY * dstPitch) + (dstX << 1);
++ CARD8 *srcPtr = src + (srcY + srcPitch) + (srcX << 1);
++
++ DBG_IMAGEON(("W100HostPackedData(src(pitch:%d,offset:0x%08x,x:%d,y:%d),"
++ "dst(pitch:%d,offset:0x%08x,x:%d,y:%d), w:%d,h:%d)\n",
++ srcPitch, srcPtr, srcX, srcY,
++ dstPitch, dstPtr, dstX, dstY,
++ w, h));
++ while (h--) {
++ memcpy(dstPtr, srcPtr, (w << 1)); /* 16bpp assumed */
++ srcPtr += srcPitch;
++ dstPtr += dstPitch;
++ }
++}
++
++
++static void W100StopVideo(KdScreenInfo *screen, pointer data, Bool exit)
++{
++ W100CardInfo(screen);
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
++
++ DBG_IMAGEON(("W100StopVideo(exit:%d)\n", exit));
++
++ REGION_EMPTY(screen->pScreen, &port->clip);
++
++ if (exit) {
++ if (port->videoStatus & W100_OVERLAY_ON) {
++ W100OverlayDisable(screen);
++ }
++ if (port->src.surface) {
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->src.surface = NULL;
++ }
++
++ if (port->ovl.surface) {
++ KdOffscreenFree(screen->pScreen, port->ovl.surface);
++ port->ovl.surface = NULL;
++ }
++ port->src.id = -1; // Just to avoid cached values.
++ } else {
++ if (port->videoStatus & W100_OVERLAY_ON) {
++ W100OverlayDisable(screen);
++ }
++ }
++}
++
++static int W100SetPortAttribute(KdScreenInfo *screen,
++ Atom attribute,
++ int value,
++ pointer data)
++{
++ W100CardInfo(screen);
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
++
++ if (attribute == xvBrightness) {
++ DBG_IMAGEON(("Setting Brightness attribute to %d\n", value));
++ W100SetBrightness(w100c, value);
++ port->ovl.brightness = value;
++ } else if (attribute == xvMaxOverlaySize) {
++ DBG_IMAGEON(("Setting MaxOverlaySize to %d\n", value));
++ port->ovl.maxSize = value;
++ } else if (attribute == xvColorKey) {
++ DBG_IMAGEON(("Setting ColorKey attribute to %d\n", value));
++ port->ovl.colorKey = value;
++ }
++ return Success;
++}
++
++static int W100GetPortAttribute(KdScreenInfo *screen,
++ Atom attribute,
++ int *value,
++ pointer data)
++{
++ W100CardInfo(screen);
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
++
++ if (attribute == xvBrightness) {
++ DBG_IMAGEON(("Getting Brightness attribute\n"));
++ *value = port->ovl.brightness;
++ } else if (attribute == xvMaxOverlaySize) {
++ *value = port->ovl.maxSize;
++ DBG_IMAGEON(("Getting Contrast attribute\n"));
++ } else if (attribute == xvColorKey) {
++ DBG_IMAGEON(("Getting ColorKey attribute\n"));
++ *value = port->ovl.colorKey;
++ }
++ return Success;
++}
++
++static void W100QueryBestSize(KdScreenInfo *screen,
++ Bool motion,
++ short vid_w, short vid_h, /*Video dimensions */
++ short drw_w, short drw_h, /*Drawable dimensions */
++ unsigned int *p_w,
++ unsigned int *p_h,
++ pointer data)
++{
++ DBG_IMAGEON(("W100QueryBestSize(vid_w:%d,vid_h:%d,drw_w:%d,drw_h:%d)\n",
++ vid_w, vid_h, drw_w, drw_h));
++ int xscaler = W100GetScaler(drw_w, vid_w);
++ int yscaler = W100GetScaler(drw_h, vid_h);
++ *p_w = W100ApplyScaler(vid_w, xscaler);
++ *p_h = W100ApplyScaler(vid_h, yscaler);
++}
++
++static int W100QueryImageAttributes(KdScreenInfo *screen,
++ int id,
++ unsigned short *w, unsigned short *h,
++ int *pitches, int *offsets)
++{
++ int size, tmp;
++
++ DBG_IMAGEON(("W100QueryImageAttributes(id:%d,w:%d,h:%d)\n", id, *w, *h));
++
++ if (*w > IMAGE_MAX_WIDTH) {
++ *w = IMAGE_MAX_WIDTH;
++ }
++ if (*h > IMAGE_MAX_HEIGHT) {
++ *h = IMAGE_MAX_HEIGHT;
++ }
++
++ if (W_ALIGN) {
++ *w = (*w + (W_ALIGN - 1)) & ~(W_ALIGN - 1);
++ }
++ if (H_ALIGN) {
++ *h = (*h + (H_ALIGN - 1)) & ~(H_ALIGN - 1);
++ }
++
++ if (offsets) {
++ offsets[0] = 0;
++ }
++
++ switch (id) {
++ /* Planar formats */
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ *h = (*h + 1) & ~1;
++ size = (*w + 3) & ~3;
++ if (pitches) pitches[0] = size;
++ size *= *h;
++ if (offsets) offsets[1] = size;
++ tmp = ((*w >> 1) + 3) & ~3;
++ if (pitches) pitches[1] = pitches[2] = tmp;
++ tmp *= (*h >> 1);
++ size += tmp;
++ if (offsets) offsets[2] = size;
++ size += tmp;
++ break;
++ /* Packed Formats */
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ default:
++ size = *w << 1;
++ if (pitches) pitches[0] = size;
++ size *= *h;
++ break;
++ }
++ return size;
++}
++
++static void W100ClipVideo(BoxPtr src, BoxPtr dst, BoxPtr extents,
++ short width, short height)
++{
++ INT32 vscale, hscale, delta;
++ INT32 diff, x1, x2, y1, y2;
++
++ hscale = ((src->x2 - src->x1) << 16) / (dst->x2 - dst->x1);
++ vscale = ((src->y2 - src->y1) << 16) / (dst->y2 - dst->y1);
++
++ x1 = src->x1 << 16;
++ x2 = src->x2 << 16;
++ y1 = src->y1 << 16;
++ y2 = src->y2 << 16;
++
++ diff = extents->x1 - dst->x1;
++ if (diff > 0) {
++ dst->x1 = extents->x1;
++ x1 += diff * hscale;
++ }
++
++ diff = dst->x2 - extents->x2;
++ if (diff > 0) {
++ dst->x2 = extents->x2;
++ x2 -= diff * hscale;
++ }
++
++ diff = extents->y1 - dst->y1;
++ if (diff > 0) {
++ dst->y1 = extents->y1;
++ y1 += diff * vscale;
++ }
++
++ diff = dst->y2 - extents->y2;
++ if (diff > 0) {
++ dst->y2 = extents->y2;
++ y2 -= diff * vscale;
++ }
++
++ if (x1 < 0) {
++ diff = (- x1 + hscale - 1) / hscale;
++ dst->x1 += diff;
++ x1 += diff * hscale;
++ }
++
++ delta = x2 - (width << 16);
++ if (delta > 0) {
++ diff = (delta + hscale - 1) / hscale;
++ dst->x2 -= diff;
++ x2 -= diff * hscale;
++ }
++
++ if (y1 < 0) {
++ diff = (- y1 + vscale - 1) / vscale;
++ dst->y1 += diff;
++ y1 += diff * vscale;
++ }
++ delta = y2 - (height << 16);
++ if (delta > 0) {
++ diff = (delta + vscale - 1) / vscale;
++ dst->y2 -= diff;
++ y2 -= diff * vscale;
++ }
++
++ src->x1 = x1 >> 16;
++ src->x2 = x2 >> 16;
++ src->y1 = y1 >> 16;
++ src->y2 = y2 >> 16;
++}
++
++static Bool W100SetOverlaySource(W100PortPrivPtr port,
++ unsigned char *buffer,
++ int id,
++ short src_x, short src_y,
++ short src_w, short src_h,
++ short width, short height,
++ short drw_x, short drw_y,
++ short drw_w, short drw_h,
++ RegionPtr clipBoxes)
++{
++
++ BoxRec srcBox, dstBox;
++ Bool changed = FALSE;
++
++ srcBox.x1 = src_x;
++ srcBox.x2 = src_x + src_w - 1;
++ srcBox.y1 = src_y;
++ srcBox.y2 = src_y + src_h - 1;
++
++ dstBox.x1 = drw_x;
++ dstBox.x2 = drw_x + drw_w - 1;
++ dstBox.y1 = drw_y;
++ dstBox.y2 = drw_y + drw_h - 1;
++
++ W100ClipVideo(&srcBox, &dstBox,
++ REGION_EXTENTS(pScreen, clipBoxes),
++ width, height);
++
++ port->src.buffer = buffer;
++ port->ovl.changed = FALSE;
++
++ if (port->src.id != id) {
++ port->src.id = id;
++ changed = TRUE;
++ port->ovl.changed = TRUE;
++ }
++ if (port->src.box.x1 != srcBox.x1) {
++ port->src.box.x1 = srcBox.x1;
++ changed = TRUE;
++ }
++ if (port->src.box.x2 != srcBox.x2) {
++ port->src.box.x2 = srcBox.x2;
++ changed = TRUE;
++ }
++ if (port->src.box.y1 != srcBox.y1) {
++ port->src.box.y1 = srcBox.y1;
++ changed = TRUE;
++ }
++ if (port->src.box.y2 != srcBox.y2) {
++ port->src.box.y2 = srcBox.y2;
++ changed = TRUE;
++ }
++ if (port->src.width != width) {
++ port->src.width = width;
++ changed = TRUE;
++ }
++ if (port->src.height != height) {
++ port->src.height = height;
++ changed = TRUE;
++ }
++
++ if (port->dst.box.x1 != dstBox.x1) {
++ port->dst.box.x1 = dstBox.x1;
++ changed = TRUE;
++ }
++ if (port->dst.box.x2 != dstBox.x2) {
++ port->dst.box.x2 = dstBox.x2;
++ changed = TRUE;
++ }
++ if (port->dst.box.y1 != dstBox.y1) {
++ port->dst.box.y1 = dstBox.y1;
++ changed = TRUE;
++ }
++ if (port->dst.box.y2 != dstBox.y2) {
++ port->dst.box.y2 = dstBox.y2;
++ changed = TRUE;
++ }
++
++ if (changed) {
++ port->src.size = W100SurfaceSize(port,
++ srcBox.x2 - srcBox.x1 + 1,
++ srcBox.y2 - srcBox.y1 + 1);
++ }
++ port->changed = changed;
++ return changed;
++}
++
++
++
++static int W100SetOverlaySurfaces(KdScreenInfo *screen,
++ short x, short y, short w, short h)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ if (port->ovl.changed ||
++ (port->ovl.frame.x1 != x) ||
++ (port->ovl.frame.y1 != y) ||
++ (port->ovl.frame.x2 != (x + w - 1)) ||
++ (port->ovl.frame.y2 != (y + h - 1))) {
++
++ port->ovl.changed = TRUE;
++ port->ovl.frame.x1 = x;
++ port->ovl.frame.x2 = x + w - 1;
++ port->ovl.frame.y1 = y;
++ port->ovl.frame.y2 = y + h - 1;
++
++ W100MapToDevice(w100c, &port->dst.box, &port->ovl.box);
++ W100ChangeOrigin(&port->ovl.box,
++ port->ovl.frame.x1, port->ovl.frame.y1);
++ port->ovl.box.x2 >>= port->ovl.horExp;
++ port->ovl.box.y2 >>= port->ovl.verExp;
++ DBG_IMAGEON(("Translated ovl.box(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ port->ovl.box.x1, port->ovl.box.y1,
++ port->ovl.box.x2, port->ovl.box.y2));
++ }
++
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ port->planes.size = 3;
++ port->planes.offset[0] = 0;
++ port->planes.offset[1] = w * h;
++ port->planes.offset[2] = (5 * (w * h)) / 4;
++ port->planes.bpp = 8;
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ port->planes.size = 1;
++ port->planes.offset[0] = 0;
++ port->planes.bpp = 16;
++ break;
++ }
++
++ if (port->ovl.surface && port->ovl.size != port->ovl.surface->size) {
++ KdOffscreenFree(screen->pScreen, port->ovl.surface);
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->ovl.surface = NULL;
++ port->src.surface = NULL;
++ }
++ if (port->src.surface && port->src.size != port->src.surface->size) {
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->src.surface = NULL;
++ }
++
++ if (!port->ovl.surface) {
++ port->ovl.surface = KdOffscreenAllocPrio(screen->pScreen,
++ port->ovl.size, 0, TRUE,
++ W100VideoSave,
++ port,
++ KD_VIDMEM_MAXPRIO,
++ KD_VIDMEM_MAXPRIO,
++ TRUE);
++ if (!port->ovl.surface) {
++ ErrorF("Using external memory for overlay surface. "
++ "Expect bad performance\n");
++ port->ovl.surface = KdOffscreenAlloc(screen->pScreen,
++ port->ovl.size, 0, TRUE,
++ W100VideoSave,
++ port);
++ }
++ if (!port->ovl.surface) {
++ ErrorF("Unable to allocate %d bytes for overlay surface\n",
++ port->ovl.size);
++ return BadAlloc;
++ }
++
++ W100ClearSurface(screen, port->ovl.surface,
++ 0, 0,
++ (w * port->planes.bpp / 8),
++ w, h, port->src.id);
++ }
++ if (!port->src.surface) {
++ port->src.surface = KdOffscreenAlloc(screen->pScreen,
++ port->src.size, 0, TRUE,
++ W100VideoSave,
++ port);
++ if (!port->src.surface) {
++ ErrorF("Unable to allocate %d bytes for offscreen surface\n",
++ port->src.size);
++ return BadAlloc;
++ }
++ }
++
++ CARD32 baseAddr = (CARD32) W100_HOST2CARD(port->ovl.surface->vidmem->base +
++ port->ovl.surface->offset);
++
++
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ port->planes.yplane = baseAddr + port->planes.offset[0];
++ port->planes.uplane = baseAddr + port->planes.offset[1];
++ port->planes.vplane = baseAddr + port->planes.offset[2];
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ port->planes.yplane = baseAddr + port->planes.offset[0];
++ port->planes.uplane = 0;
++ port->planes.vplane = 0;
++ break;
++ }
++
++ return Success;
++}
++
++static int W100OvlSetup(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ BoxRec ovlBox;
++ short x, y, w, h;
++ int i;
++
++ W100MapToDevice(w100c, &port->dst.box, &ovlBox);
++
++ x = ovlBox.x1 & ~7;
++ y = ovlBox.y1;
++
++ for (i = 0; i < NUM_OVL_RESIZERS; i++) {
++ w = (ovlBox.x2 - x + 1) >> ovlResizers[i].xfactor;
++ h = (ovlBox.y2 - y + 1) >> ovlResizers[i].yfactor;
++ w = W100_ALIGN(w, OVL_W_ALIGN);
++ h = W100_ALIGN(h, OVL_H_ALIGN);
++ port->ovl.size = W100SurfaceSize(port, w, h);
++ DBG_IMAGEON(("Trying overlay surface (x:%d,y:%d,w:%d,h:%d). Size %d."
++ " xfactor:%d, yfactor:%d\n",
++ x, y, w, h, port->ovl.size,
++ ovlResizers[i].xfactor,
++ ovlResizers[i].yfactor));
++ if (port->ovl.size <= port->ovl.maxSize) {
++ ErrorF("Using (x=%d,y=%d,w=%d,h=%d) overlay surface (%d bytes). "
++ "Resizer(xfactor:%d,yfactor:%d)\n",
++ x, y, w, h, port->ovl.size,
++ ovlResizers[i].xfactor, ovlResizers[i].yfactor);
++ port->ovl.horExp = ovlResizers[i].xfactor;
++ port->ovl.verExp = ovlResizers[i].yfactor;
++ return W100SetOverlaySurfaces(screen, x, y, w, h);
++ }
++ }
++ return BadAlloc;
++}
++
++static void W100OvlHostData(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ W100WaitIdle(w100c);
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ W100HostPlanarData(screen);
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ W100HostPackedData(screen);
++ break;
++ }
++}
++
++static void W100OvlBlt(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ static int frame = 0;
++ int srcW = port->src.box.x2 - port->src.box.x1 + 1;
++ int srcH = port->src.box.y2 - port->src.box.y1 + 1;
++ int dstW = port->ovl.frame.x2 - port->ovl.frame.x1 + 1;
++ int dstH = port->ovl.frame.y2 - port->ovl.frame.y1 + 1;
++
++ DBG_IMAGEON(("ovl.box(x1:%d,y1:%d,x2:%d,y2:%d),"
++ "src.box(x1:%d,y1:%d,x2:%d,y2:%d),"
++ "dstW:%d, dstH:%d\n",
++ port->ovl.box.x1, port->ovl.box.y1,
++ port->ovl.box.x2, port->ovl.box.y2,
++ port->src.box.x1, port->src.box.y1,
++ port->src.box.x2, port->src.box.y2,
++ dstW, dstH));
++
++ W100PlanarBlt(screen, //KdScreenInfo* screen
++ port->planes.size, //int planes
++ port->planes.offset, //int planeOffsets[]
++ port->planes.bpp, //int bpp
++ w100c->hw_window.randr, //int randr
++ port->src.surface, //KdOffscrenArea *src
++ srcW, //int srcW
++ srcH, //int srcH
++ &port->src.box, //BoxPtr srcBox
++ port->ovl.surface, //KdOffscreenArea *dst
++ dstW, //int dstW
++ dstH, //int dstH
++ &port->ovl.box); //BoxPtr dstBox
++
++#if 0
++ if (++frame == 10) {
++ W100SaveSurface(port->src.surface->vidmem->base +
++ port->src.surface->offset,
++ port->src.surface->size,
++ "/media/card/kdrive/source.yuv");
++ W100SaveSurface(port->ovl.surface->vidmem->base +
++ port->ovl.surface->offset,
++ port->ovl.surface->size,
++ "/media/card/kdrive/ovl.yuv");
++ exit(1);
++ }
++#endif
++}
++
++static void W100OvlUpdate(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ if (port->videoStatus & W100_OVERLAY_ON) {
++ W100OverlayDisable(screen);
++ }
++ port->videoStatus &= ~W100_OVERLAY_CONFIGURED;
++
++ W100OverlayEnable(screen);
++}
++
++static int W100PutImage(KdScreenInfo *screen,
++ DrawablePtr pDraw, /* Destination drawable */
++ short src_x, short src_y, /* Source coordinates */
++ short drw_x, short drw_y, /* Destination coordinates */
++ short src_w, short src_h, /* Source rectangle to put */
++ short drw_w, short drw_h, /* Destination size */
++ int id, /* FOURCC id */
++ unsigned char *buffer, /* Source data */
++ short width, /* Source width */
++ short height, /* Source height */
++ Bool sync, /* Sync before returning */
++ RegionPtr clipBoxes,
++ pointer data)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100PortPrivPtr port = (W100PortPrivPtr) data;
++ int errCode;
++
++ DBG_IMAGEON(("W100PutImage(src(x:%d,y:%d,w:%d,h:%d),"
++ "drw(x:%d,y:%d,w:%d,h:%d),"
++ "width:%d,height:%d), buffer:%p)\n",
++ src_x,src_y,src_w,src_h,
++ drw_x,drw_y,drw_w,drw_h,
++ width, height,
++ buffer));
++
++ if (W100SetOverlaySource(port, buffer, id,
++ src_x, src_y, src_w, src_h,
++ width, height,
++ drw_x, drw_y, drw_w, drw_h,
++ clipBoxes)) {
++ if ((errCode = W100OvlSetup(screen)) != Success) {
++ return errCode;
++ }
++ }
++ W100OvlHostData(screen);
++ /* Update cliplist */
++ if(!REGION_EQUAL(screen->pScreen, &port->clip, clipBoxes)) {
++ REGION_COPY(screen->pScreen, &port->clip, clipBoxes);
++ KXVPaintRegion(pDraw, &port->clip, port->ovl.colorKey);
++ }
++
++ W100OvlBlt(screen);
++
++ if (port->ovl.changed) {
++ W100OvlUpdate(screen);
++ }
++ return Success;
++}
++
++static KdVideoAdaptorPtr
++W100SetupImageVideo(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100CardInfo(pScreenPriv);
++ KdVideoAdaptorPtr adaptor;
++ W100PortPrivPtr port;
++
++ adaptor = xcalloc(1, sizeof(KdVideoAdaptorRec)
++ + sizeof(W100PortPrivRec)
++ + sizeof(DevUnion));
++ if (adaptor == NULL) {
++ return NULL;
++ }
++
++ adaptor->type = XvWindowMask | XvInputMask | XvImageMask;
++ adaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
++ adaptor->name = "ATI (C) Imageon Video Overlay";
++ adaptor->nEncodings = 1;
++ adaptor->pEncodings = DummyEncoding;
++ adaptor->nFormats = NUM_FORMATS;
++ adaptor->pFormats = Formats;
++ adaptor->nPorts = 1;
++ adaptor->pPortPrivates = (DevUnion*)(&adaptor[1]);
++
++ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[1]);
++
++ adaptor->pPortPrivates[0].ptr = (pointer)(port);
++
++ adaptor->nAttributes = NUM_ATTRIBUTES;
++ adaptor->pAttributes = Attributes;
++ adaptor->pImages = Images;
++ adaptor->nImages = NUM_IMAGES;
++ adaptor->PutVideo = NULL;
++ adaptor->PutStill = NULL;
++ adaptor->GetVideo = NULL;
++ adaptor->GetStill = NULL;
++ adaptor->StopVideo = W100StopVideo;
++ adaptor->SetPortAttribute = W100SetPortAttribute;
++ adaptor->GetPortAttribute = W100GetPortAttribute;
++ adaptor->QueryBestSize = W100QueryBestSize;
++ adaptor->PutImage = W100PutImage;
++ adaptor->ReputImage = NULL;
++ adaptor->QueryImageAttributes = W100QueryImageAttributes;
++
++ REGION_INIT(pScreen, &port->clip, NullBox, 0);
++
++ w100s->pAdaptor = adaptor;
++
++ xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
++ xvColorKey = MAKE_ATOM("XV_COLORKEY");
++ xvMaxOverlaySize = MAKE_ATOM("XV_MAXOVERLAYSIZE");
++
++ port->ovl.maxSize = OVL_MAX_SIZE;
++ port->ovl.colorKey = 0xff00;
++ port->ovl.brightness = W100GetBrightness(w100c);
++ return adaptor;
++}
++
++Bool W100InitVideo(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ W100CardInfo(pScreenPriv);
++ KdScreenInfo *screen = pScreenPriv->screen;
++ KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
++ KdVideoAdaptorPtr newAdaptor = NULL;
++ int num_adaptors;
++
++ w100s->pAdaptor = NULL;
++
++ if (w100c->reg_base == NULL)
++ return FALSE;
++
++ num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
++
++ newAdaptor = W100SetupImageVideo(pScreen);
++
++ if (newAdaptor) {
++ if (!num_adaptors) {
++ num_adaptors = 1;
++ adaptors = &newAdaptor;
++ } else {
++ newAdaptors = xalloc((num_adaptors + 1) *
++ sizeof(KdVideoAdaptorPtr *));
++ if (newAdaptors) {
++ memcpy(newAdaptors, adaptors, num_adaptors *
++ sizeof(KdVideoAdaptorPtr));
++ newAdaptors[num_adaptors] = newAdaptor;
++ adaptors = newAdaptors;
++ num_adaptors++;
++ }
++ }
++ }
++
++ if (num_adaptors)
++ KdXVScreenInit(pScreen, adaptors, num_adaptors);
++
++ if (newAdaptors)
++ xfree(newAdaptors);
++
++ return TRUE;
++}
++
++void
++W100FiniVideo(ScreenPtr pScreen)
++{
++ KdScreenPriv(pScreen);
++ W100ScreenInfo(pScreenPriv);
++ KdVideoAdaptorPtr adaptor = w100s->pAdaptor;
++ W100PortPrivPtr port;
++ int i;
++
++ if (!adaptor)
++ return;
++
++ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[0].ptr);
++ REGION_UNINIT(pScreen, &port->clip);
++
++ xfree(adaptor);
++ w100s->pAdaptor = NULL;
++}
++
+Index: xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/imageon/imageon_support.h 2007-06-17 10:49:02.000000000 +0200
+@@ -0,0 +1,108 @@
++/*
++ * Copyright © 2007 Manuel Teira
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that
++ * copyright notice and this permission notice appear in supporting
++ * documentation, and that the name of Manuel Teira not be used in
++ * advertising or publicity pertaining to distribution of the software without
++ * specific, written prior permission. Manuel Teira makes no
++ * representations about the suitability of this software for any purpose. It
++ * is provided "as is" without express or implied warranty.
++ *
++ * MANUEL TEIRA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL MANUEL TEIRA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
++ * PERFORMANCE OF THIS SOFTWARE.
++ */
++
++#ifndef _IMAGEON_SUPPORT_H_
++#define _IMAGEON_SUPPORT_H
++
++#include "imageon.h"
++
++extern CARD8 W100SolidRop[16];
++extern CARD8 W100BltRop[16];
++
++/* Card control */
++void W100DisableDisplayUpdate(W100CardInfo *w100c);
++void W100EnableDisplayUpdate(W100CardInfo *w100c);
++void W100SetupGraphicEngine(W100CardInfo *w100c);
++void W100ResetGraphicEngine(W100CardInfo *w100c);
++void W100SetupGraphicWindow(W100CardInfo *w100c);
++void W100EnableGraphicWindow(W100CardInfo *w100c);
++void W100DisableGraphicWindow(W100CardInfo *w100c);
++void W100VSync(W100CardInfo *w100c);
++
++/* Wait for card slots */
++__inline__ Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries);
++Bool W100WaitIdle(W100CardInfo *w100c);
++
++/* Set context of the current operation */
++void W100ResetContext(W100CardInfo *w100c);
++CARD32 W100ComputeSolidGmc(W100CardInfo *w100c, CARD8 alu);
++CARD32 W100ComputeCopyGmc(W100CardInfo *w100c, CARD8 alu);
++CARD32 W100ComputeAritGmc(W100CardInfo *w100c, CARD8 alu);
++void W100SetXForm(W100CardInfo *w100c, int dx, int dy);
++void W100SetRotation(W100CardInfo *w100c, int randr, Bool mirror);
++void W100SetPixelMask(W100CardInfo *w100c, Pixel mask);
++Bool W100SetSource(KdScreenInfo *screen, CARD32 srcPitch,
++ CARD32 srcOffset, CARD8 bpp);
++Bool W100SetDestination(KdScreenInfo *screen, CARD32 dstPitch,
++ CARD32 dstOffset, CARD8 bpp);
++Bool W100SetSourcePixmap(PixmapPtr pPix);
++Bool W100SetDestinationPixmap(PixmapPtr pPix);
++
++/* Scaler related functions */
++CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize);
++CARD16 W100ApplyScaler(CARD16 srcsize, CARD8 scaler);
++
++/* Blitting functions */
++void W100PlanarBlt(KdScreenInfo *screen, int planes, int planeOffsets[],
++ int bpp, int randr,
++ KdOffscreenArea *src, int srcW, int srcH, BoxPtr srcBox,
++ KdOffscreenArea *dst, int dstW, int dstH, BoxPtr dstBox);
++static void W100ScaledBlt(KdScreenInfo *screen, int randr, int bpp,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox,
++ CARD8 xscaler, CARD8 yscaler);
++static void W100StretchBlt(KdScreenInfo *screen, int randr, int bpp,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox,
++ CARD8 xscaler, CARD8 yscaler);
++static void W100Blt(KdScreenInfo *screen, int randr, int bpp,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox);
++
++/* Brightness functions */
++CARD8 W100GetBrightness(W100CardInfo *w100c);
++void W100SetBrightness(W100CardInfo *w100c, CARD8 value);
++
++
++/* Get and set mode and rotation info */
++int W100GetRotation(W100CardInfo *w100c);
++W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode);
++Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode);
++Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes);
++W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height);
++
++/* SysFS helpers */
++Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value);
++Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value);
++
++/* Coordinate transformations */
++void W100TransformTsLibCoordinates(long *x, long *y, void *closure);
++void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst);
++void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst);
++void W100ChangeOrigin(BoxPtr src, int x, int y);
++void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y);
++void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale);
++void W100MoveTo(BoxPtr src, int x, int y);
++
++
++
++#endif
+Index: xorg-server-1.2.0/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.2.0.orig/hw/kdrive/linux/tslib.c 2007-01-23 06:39:15.000000000 +0100
++++ xorg-server-1.2.0/hw/kdrive/linux/tslib.c 2007-06-17 10:49:02.000000000 +0200
+@@ -92,6 +92,10 @@
+ void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
+ void *tslib_raw_event_closure;
+
++/* To support randr hot resolution change */
++void (*tslib_transform_coords)(long *x, long *y, void *closure);
++void *tslib_transform_closure;
++
+ int TsInputType = 0;
+ int KdTsPhyScreen = 0; /* XXX Togo .. */
+
+@@ -121,7 +125,9 @@
+ flags = (event.pressure) ? KD_BUTTON_1 : 0;
+ x = event.x;
+ y = event.y;
+-
++ if (tslib_transform_coords) {
++ tslib_transform_coords(&x, &y, tslib_transform_closure);
++ }
+ KdEnqueueMouseEvent (mi, flags, x, y);
+ }
+ }
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/optional-xkb.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/optional-xkb.patch
new file mode 100644
index 0000000000..a580b500b7
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/optional-xkb.patch
@@ -0,0 +1,58 @@
+Index: xorg-server-1.2.0/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/Makefile.am 2007-01-23 06:39:15.000000000 +0100
++++ xorg-server-1.2.0/Makefile.am 2007-03-28 20:26:19.000000000 +0200
+@@ -30,6 +30,10 @@
+ XINPUT_DIR=Xi
+ endif
+
++if XKB
++XKB_DIR=xkb
++endif
++
+ if DBE
+ DBE_DIR=dbe
+ endif
+@@ -46,7 +50,7 @@
+ randr \
+ render \
+ $(XINPUT_DIR) \
+- xkb \
++ $(XKB_DIR) \
+ $(DBE_DIR) \
+ $(MFB_DIR) \
+ $(AFB_DIR) \
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-01-23 06:39:15.000000000 +0100
++++ xorg-server-1.2.0/configure.ac 2007-03-28 20:27:13.000000000 +0200
+@@ -428,6 +428,7 @@
+ AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes])
+ AC_ARG_ENABLE(xinput, AS_HELP_STRING([--disable-xinput], [Build XInput Extension (default: enabled)]), [XINPUT=$enableval], [XINPUT=yes])
+ AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
++AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Build XKB (default: enabled)]), [XKB=$enableval], [XKB=yes])
+
+ dnl DDXes.
+ AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
+@@ -754,12 +755,15 @@
+
+ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
+
+-AC_DEFINE(XKB, 1, [Build XKB])
+-AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
+-AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
+-REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
+-XKB_LIB='$(top_builddir)/xkb/libxkb.la'
+-XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++AM_CONDITIONAL(XKB, [test "x$XKB" = xyes])
++if test "x$XKB" = xyes; then
++ AC_DEFINE(XKB, 1, [Build XKB])
++ AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
++ AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
++ REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
++ XKB_LIB='$(top_builddir)/xkb/libxkb.la'
++ XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++fi
+
+ AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
+ [Do not have `strcasecmp'.]))
diff --git a/packages/xorg-xserver/xserver-kdrive-1.2.0/xcalibrate_coords.patch b/packages/xorg-xserver/xserver-kdrive-1.2.0/xcalibrate_coords.patch
new file mode 100644
index 0000000000..e0cca5428b
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.2.0/xcalibrate_coords.patch
@@ -0,0 +1,122 @@
+---
+ Xext/xcalibrate.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
+ hw/kdrive/src/kdrive.h | 3 +++
+ hw/kdrive/src/kinput.c | 12 ++++++++++++
+ 3 files changed, 61 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.3.0.0/Xext/xcalibrate.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/Xext/xcalibrate.c 2007-06-29 17:30:03.000000000 +0100
++++ xorg-server-1.3.0.0/Xext/xcalibrate.c 2007-06-30 14:04:40.000000000 +0100
+@@ -166,7 +166,6 @@ ProcXCalibrateSetRawMode (ClientPtr clie
+ return (client->noClientException);
+ }
+
+-
+ static int
+ SProcXCalibrateSetRawMode (ClientPtr client)
+ {
+@@ -180,6 +179,47 @@ SProcXCalibrateSetRawMode (ClientPtr cli
+ return ProcXCalibrateSetRawMode(client);
+ }
+
++static int
++ProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ xXCalibrateScreenToCoordReply rep;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ memset (&rep, 0, sizeof (rep));
++ rep.type = X_Reply;
++ rep.sequenceNumber = client->sequence;
++ rep.x = stuff->x;
++ rep.y = stuff->y;
++
++ KdScreenToMouseCoords(&rep.x, &rep.y);
++
++ if (client->swapped)
++ {
++ int n;
++
++ swaps (&rep.x, n);
++ swaps (&rep.y, n);
++ }
++ WriteToClient(client, sizeof (rep), (char *) &rep);
++ return (client->noClientException);
++}
++
++static int
++SProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ int n;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ swaps(&stuff->x, n);
++ swaps(&stuff->y, n);
++
++ return ProcXCalibrateScreenToCoord(client);
++}
++
+ static void
+ XCalibrateResetProc (ExtensionEntry *extEntry)
+ {
+@@ -194,6 +234,9 @@ ProcXCalibrateDispatch (ClientPtr client
+ return ProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return ProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return ProcXCalibrateScreenToCoord(client);
++
+ default: break;
+ }
+
+@@ -213,6 +256,8 @@ SProcXCalibrateDispatch (ClientPtr clien
+ return SProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return SProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return SProcXCalibrateScreenToCoord(client);
+
+ default: break;
+ }
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kdrive.h
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kdrive.h 2007-06-30 13:43:45.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kdrive.h 2007-06-30 13:45:03.000000000 +0100
+@@ -746,6 +746,9 @@ void
+ KdSetMouseMatrix (KdMouseMatrix *matrix);
+
+ void
++KdScreenToMouseCoords (int *x, int *y);
++
++void
+ KdComputeMouseMatrix (KdMouseMatrix *matrix, Rotation randr, int width, int height);
+
+ void
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kinput.c 2007-06-29 17:30:16.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kinput.c 2007-06-30 15:52:16.000000000 +0100
+@@ -381,6 +381,18 @@ KdSetMouseMatrix (KdMouseMatrix *matrix)
+ }
+
+ void
++KdScreenToMouseCoords (int *x, int *y)
++{
++ int (*m)[3] = kdMouseMatrix.matrix;
++ int div = m[0][1] * m[1][0] - m[1][1] * m[0][0];
++ int sx = *x;
++ int sy = *y;
++
++ *x = (m[0][1] * sy - m[0][1] * m[1][2] + m[1][1] * m[0][2] - m[1][1] * sx) / div;
++ *y = (m[1][0] * sx + m[0][0] * m[1][2] - m[1][0] * m[0][2] - m[0][0] * sy) / div;
++}
++
++void
+ KdComputeMouseMatrix (KdMouseMatrix *m, Rotation randr, int width, int height)
+ {
+ int x_dir = 1, y_dir = 1;
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/.mtn2git_empty b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/.mtn2git_empty
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/disable-xf86-dga-xorgcfg.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/disable-xf86-dga-xorgcfg.patch
new file mode 100644
index 0000000000..ccc19139c8
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/disable-xf86-dga-xorgcfg.patch
@@ -0,0 +1,39 @@
+Index: xorg-server-1.3.0.0/configure.ac
+===================================================================
+--- xorg-server-1.3.0.0.orig/configure.ac 2007-04-20 03:23:40.000000000 +0200
++++ xorg-server-1.3.0.0/configure.ac 2007-05-09 16:51:34.000000000 +0200
+@@ -520,7 +520,11 @@
+ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
+
+ dnl Core modules for most extensions, et al.
++if test "$KDRIVE" = yes; then
++REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto [kbproto >= 1.0.3]"
++else
+ REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans xf86miscproto xf86vidmodeproto xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto xf86dgaproto [kbproto >= 1.0.3]"
++fi
+ REQUIRED_LIBS="xfont xau fontenc"
+
+ AM_CONDITIONAL(XV, [test "x$XV" = xyes])
+@@ -1603,7 +1607,9 @@
+ AC_SUBST(XKB_COMPILED_DIR)
+
+ dnl and the rest of these are generic, so they're in config.h
++if test ! x"$KDRIVE" = xyes; then
+ AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
++fi
+ AC_DEFINE(XResExtension, 1, [Build XRes extension])
+
+ AC_TRY_COMPILE([
+@@ -1616,10 +1622,12 @@
+
+ AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
+
++if test ! "x$KDRIVE" = xyes ; then
+ dnl xorgconfig CLI configuration utility
+ PKG_CHECK_MODULES([XORGCONFIG_DEP], [xkbfile x11])
+ AC_SUBST(XORGCONFIG_DEP_CFLAGS)
+ AC_SUBST(XORGCONFIG_DEP_LIBS)
++fi
+
+ dnl xorgcfg GUI configuration utility
+ AC_ARG_ENABLE(xorgcfg, AS_HELP_STRING([--enable-xorgcfg],
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-epson.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-epson.patch
new file mode 100644
index 0000000000..8ec3a37c78
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-epson.patch
@@ -0,0 +1,11 @@
+Index: xorg-server-1.2.0/hw/kdrive/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/hw/kdrive/Makefile.am 2007-03-28 17:11:38.000000000 +0200
++++ xorg-server-1.2.0/hw/kdrive/Makefile.am 2007-03-28 17:12:28.000000000 +0200
+@@ -1,5 +1,5 @@
+ if KDRIVEFBDEV
+-FBDEV_SUBDIRS = fbdev
++FBDEV_SUBDIRS = fbdev epson
+ endif
+
+ if KDRIVEIMAGEON
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-tslib.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-tslib.patch
new file mode 100644
index 0000000000..9a59530ed3
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-tslib.patch
@@ -0,0 +1,12 @@
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-03-29 13:28:10.000000000 +0200
++++ xorg-server-1.2.0/configure.ac 2007-03-29 13:28:35.000000000 +0200
+@@ -1517,6 +1517,7 @@
+ AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
+ fi
+ AC_DEFINE(TSLIB, 1, [Have tslib support])
++ AC_DEFINE(TOUCHSCREEN, 1, [Have touchscreen support])
+ fi
+
+ # damage shadow extension glx (NOTYET) fb mi
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-xcalibrate.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-xcalibrate.patch
new file mode 100644
index 0000000000..717e72f93f
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/enable-xcalibrate.patch
@@ -0,0 +1,101 @@
+---
+ Xext/Makefile.am | 6 ++++++
+ configure.ac | 9 ++++++++-
+ include/kdrive-config.h.in | 3 +++
+ mi/miinitext.c | 6 ++++++
+ 4 files changed, 23 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.3.0.0/mi/miinitext.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/mi/miinitext.c 2007-05-15 16:05:34.000000000 +0100
++++ xorg-server-1.3.0.0/mi/miinitext.c 2007-05-15 16:05:39.000000000 +0100
+@@ -372,6 +372,9 @@ extern void ResExtensionInit(INITARGS);
+ #ifdef DMXEXT
+ extern void DMXExtensionInit(INITARGS);
+ #endif
++#ifdef XCALIBRATE
++extern void XCalibrateExtensionInit(INITARGS);
++#endif
+ #ifdef XEVIE
+ extern void XevieExtensionInit(INITARGS);
+ #endif
+@@ -663,6 +666,9 @@ InitExtensions(argc, argv)
+ #ifdef DAMAGE
+ if (!noDamageExtension) DamageExtensionInit();
+ #endif
++#ifdef XCALIBRATE
++ XCalibrateExtensionInit ();
++#endif
+ }
+
+ void
+Index: xorg-server-1.3.0.0/configure.ac
+===================================================================
+--- xorg-server-1.3.0.0.orig/configure.ac 2007-05-15 16:05:34.000000000 +0100
++++ xorg-server-1.3.0.0/configure.ac 2007-05-15 16:17:54.000000000 +0100
+@@ -421,6 +421,7 @@ AC_ARG_ENABLE(xf86vidmode, AS_HELP_ST
+ AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: enabled)]), [XF86MISC=$enableval], [XF86MISC=yes])
+ AC_ARG_ENABLE(xace, AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
+ AC_ARG_ENABLE(xcsecurity, AS_HELP_STRING([--disable-xcsecurity], [Build Security extension (default: enabled)]), [XCSECURITY=$enableval], [XCSECURITY=$XACE])
++AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
+ AC_ARG_ENABLE(appgroup, AS_HELP_STRING([--disable-appgroup], [Build XC-APPGROUP extension (default: enabled)]), [APPGROUP=$enableval], [APPGROUP=$XCSECURITY])
+ AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
+ AC_ARG_ENABLE(tslib, AS_HELP_STRING([--enable-tslib], [Build kdrive tslib touchscreen support (default: disabled)]), [TSLIB=$enableval], [TSLIB=no])
+@@ -653,6 +654,12 @@ if test "x$XCSECURITY" = xyes; then
+ AC_DEFINE(XCSECURITY, 1, [Build Security extension])
+ fi
+
++AM_CONDITIONAL(XCALIBRATE, [test "x$XCALIBRATE" = xyes])
++if test "x$XCALIBRATE" = xyes; then
++ AC_DEFINE(XCALIBRATE, 1, [Build XCalibrate extension])
++ REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateproto"
++fi
++
+ AM_CONDITIONAL(XEVIE, [test "x$XEVIE" = xyes])
+ if test "x$XEVIE" = xyes; then
+ AC_DEFINE(XEVIE, 1, [Build XEvIE extension])
+@@ -1547,7 +1554,7 @@ if test "$KDRIVE" = yes; then
+ ;;
+ esac
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+- KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_OS_LIB $KDRIVE_PURE_LIBS $KDRIVE_STUB_LIB $TSLIB_LIBS"
++ KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_PURE_LIBS $KDRIVE_OS_LIB $KDRIVE_STUB_LIB $TSLIB_LIBS"
+
+ # check if we can build Xephyr
+ PKG_CHECK_MODULES(XEPHYR, x11 xext xfont xau xdmcp, [xephyr="yes"], [xephyr="no"])
+Index: xorg-server-1.3.0.0/include/kdrive-config.h.in
+===================================================================
+--- xorg-server-1.3.0.0.orig/include/kdrive-config.h.in 2007-05-15 16:05:34.000000000 +0100
++++ xorg-server-1.3.0.0/include/kdrive-config.h.in 2007-05-15 16:05:39.000000000 +0100
+@@ -25,4 +25,7 @@
+ /* Verbose debugging output hilarity */
+ #undef DEBUG
+
++/* Enable XCalibrate extension */
++#undef XCALIBRATE
++
+ #endif /* _KDRIVE_CONFIG_H_ */
+Index: xorg-server-1.3.0.0/Xext/Makefile.am
+===================================================================
+--- xorg-server-1.3.0.0.orig/Xext/Makefile.am 2007-05-15 16:05:34.000000000 +0100
++++ xorg-server-1.3.0.0/Xext/Makefile.am 2007-05-15 16:05:39.000000000 +0100
+@@ -91,6 +91,11 @@ BUILTIN_SRCS += $(XCALIBRATE_SRCS)
+ # XCalibrare needs tslib
+ endif
+
++XCALIBRATE_SRCS = xcalibrate.c
++if XCALIBRATE
++BUILTIN_SRCS += $(XCALIBRATE_SRCS)
++endif
++
+ # X EVent Interception Extension: allows accessibility helpers & composite
+ # managers to intercept events from input devices and transform as needed
+ # before the clients see them.
+@@ -169,6 +174,7 @@ EXTRA_DIST = \
+ $(XCSECURITY_SRCS) \
+ $(XCALIBRATE_SRCS) \
+ $(XINERAMA_SRCS) \
++ $(XCALIBRATE_SRCS) \
+ $(XEVIE_SRCS) \
+ $(XPRINT_SRCS) \
+ $(APPGROUP_SRCS) \
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/fix_default_mode.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/fix_default_mode.patch
new file mode 100644
index 0000000000..edc5146302
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/fix_default_mode.patch
@@ -0,0 +1,26 @@
+---
+ hw/kdrive/src/kmode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kmode.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kmode.c 2007-05-16 10:30:29.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kmode.c 2007-05-16 10:31:08.000000000 +0100
+@@ -106,6 +106,8 @@ const KdMonitorTiming kdMonitorTimings[
+ 16, 120, 176, KdSyncNegative, /* 37.861 */
+ 1, 20, 24, KdSyncNegative, /* 72.809 */
+ },
++ /* DEFAULT */
++#define MONITOR_TIMING_DEFAULT 13
+ { 640, 480, 60, 25175, /* VESA */
+ 16, 48, 160, KdSyncNegative, /* 31.469 */
+ 10, 33, 45, KdSyncNegative, /* 59.940 */
+@@ -127,8 +129,6 @@ const KdMonitorTiming kdMonitorTimings[
+ 16, 160, 256, KdSyncPositive, /* 46.875 */
+ 1, 21, 25, KdSyncPositive, /* 75.000 */
+ },
+- /* DEFAULT */
+-#define MONITOR_TIMING_DEFAULT 9
+ { 800, 600, 72, 50000, /* VESA */
+ 56, 64, 240, KdSyncPositive, /* 48.077 */
+ 37, 23, 66, KdSyncPositive, /* 72.188 */
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/hide-cursor-and-ppm-root.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/hide-cursor-and-ppm-root.patch
new file mode 100644
index 0000000000..c160cd41dc
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/hide-cursor-and-ppm-root.patch
@@ -0,0 +1,307 @@
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/dix/window.c xorg-server-X11R7.1-1.1.0/dix/window.c
+--- xorg-server-X11R7.1-1.1.0.orig/dix/window.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/dix/window.c 2007-01-16 17:16:19.000000000 +0000
+@@ -185,6 +185,8 @@
+ _X_EXPORT int numSaveUndersViewable = 0;
+ _X_EXPORT int deltaSaveUndersViewable = 0;
+
++char* RootPPM = NULL;
++
+ #ifdef DEBUG
+ /******
+ * PrintWindowTree
+@@ -311,6 +313,115 @@
+ #endif
+ }
+
++static int
++get_int(FILE *fp)
++{
++ int c = 0;
++
++ while ((c = getc(fp)) != EOF)
++ {
++ if (isspace(c))
++ continue;
++
++ if (c == '#')
++ while (c = getc(fp))
++ if (c == EOF)
++ return 0;
++ else if (c == '\n')
++ break;
++
++ if (isdigit(c))
++ {
++ int val = c - '0';
++ while ((c = getc(fp)) && isdigit(c))
++ val = (val * 10) + (c - '0');
++ return val;
++ }
++ }
++
++ return 0;
++}
++
++static unsigned char*
++ppm_load (const char* path, int depth, int *width, int *height)
++{
++ FILE *fp;
++ int max, n = 0, w, h, i, j, bytes_per_line;
++ unsigned char *data, *res, h1, h2;
++
++ if (depth < 16 || depth > 32)
++ return NULL;
++
++ if (depth > 16)
++ depth = 32;
++
++ fp = fopen (path, "r");
++ if (fp == NULL)
++ return FALSE;
++
++ h1 = getc(fp);
++ h2 = getc(fp);
++
++ /* magic is 'P6' for raw ppm */
++ if (h1 != 'P' && h2 != '6')
++ goto fail;
++
++ w = get_int(fp);
++ h = get_int(fp);
++
++ if (w == 0 || h == 0)
++ goto fail;
++
++ max = get_int(fp);
++
++ if (max != 255)
++ goto fail;
++
++ bytes_per_line = ((w * depth + 31) >> 5) << 2;
++
++ res = data = malloc(bytes_per_line * h);
++
++ for (i=0; i<h; i++)
++ {
++ for (j=0; j<w; j++)
++ {
++ unsigned char buf[3];
++ fread(buf, 1, 3, fp);
++
++ switch (depth)
++ {
++ case 24:
++ case 32:
++ *data = buf[2];
++ *(data+1) = buf[1];
++ *(data+2) = buf[0];
++ data += 4;
++ break;
++ case 16:
++ default:
++ *(unsigned short*)data
++ = ((buf[0] >> 3) << 11) | ((buf[1] >> 2) << 5) | (buf[2] >> 3);
++ data += 2;
++ break;
++ }
++ }
++ data += (bytes_per_line - (w*(depth>>3)));
++ }
++
++ data = res;
++
++ *width = w;
++ *height = h;
++
++ fclose(fp);
++
++ return res;
++
++ fail:
++ fclose(fp);
++ return NULL;
++}
++
+ static void
+ MakeRootTile(WindowPtr pWin)
+ {
+@@ -321,6 +432,36 @@
+ register unsigned char *from, *to;
+ register int i, j;
+
++ if (RootPPM != NULL)
++ {
++ int w, h;
++ unsigned char *data;
++
++ if ((data = ppm_load (RootPPM, pScreen->rootDepth, &w, &h)) != NULL)
++ {
++ pWin->background.pixmap
++ = (*pScreen->CreatePixmap)(pScreen, w, h, pScreen->rootDepth);
++
++ pWin->backgroundState = BackgroundPixmap;
++ pGC = GetScratchGC(pScreen->rootDepth, pScreen);
++ if (!pWin->background.pixmap || !pGC)
++ FatalError("could not create root tile");
++
++ ValidateGC((DrawablePtr)pWin->background.pixmap, pGC);
++
++ (*pGC->ops->PutImage)((DrawablePtr)pWin->background.pixmap,
++ pGC,
++ pScreen->rootDepth,
++ 0, 0, w, h, 0, ZPixmap, (char *)data);
++ FreeScratchGC(pGC);
++
++ free(data);
++ return;
++ }
++ else
++ ErrorF("Unable to load root window image.");
++ }
++
+ pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, 4, 4,
+ pScreen->rootDepth);
+
+@@ -357,6 +498,7 @@
+
+ }
+
++
+ WindowPtr
+ AllocateWindow(ScreenPtr pScreen)
+ {
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/src/kdrive.c xorg-server-X11R7.1-1.1.0/hw/kdrive/src/kdrive.c
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/src/kdrive.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/src/kdrive.c 2007-01-15 17:53:06.000000000 +0000
+@@ -58,6 +58,9 @@
+ { 32, 32 }
+ };
+
++int
++ProcXFixesHideCursor (ClientPtr client) ;
++
+ #define NUM_KD_DEPTHS (sizeof (kdDepths) / sizeof (kdDepths[0]))
+
+ int kdScreenPrivateIndex;
+@@ -84,6 +87,9 @@
+ KdOsFuncs *kdOsFuncs;
+ extern WindowPtr *WindowTable;
+
++extern Bool CursorInitiallyHidden; /* See Xfixes cursor.c */
++extern char* RootPPM; /* dix/window.c */
++
+ void
+ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
+ {
+@@ -312,6 +318,7 @@
+ KdSetRootClip (pScreen, TRUE);
+ if (pScreenPriv->card->cfuncs->dpms)
+ (*pScreenPriv->card->cfuncs->dpms) (pScreen, pScreenPriv->dpmsState);
++
+ return TRUE;
+ }
+
+@@ -686,10 +693,14 @@
+ ErrorF("-mouse path[,n] Filename of mouse device, n is number of buttons\n");
+ ErrorF("-switchCmd Command to execute on vt switch\n");
+ ErrorF("-nozap Don't terminate server on Ctrl+Alt+Backspace\n");
++ ErrorF("-hide-cursor Start with cursor hidden\n");
++ ErrorF("-root-ppm [path] Specify ppm file to use as root window background.\n");
+ ErrorF("vtxx Use virtual terminal xx instead of the next available\n");
+ #ifdef PSEUDO8
+ p8UseMsg ();
+ #endif
++
++
+ }
+
+ int
+@@ -761,6 +772,19 @@
+ kdSoftCursor = TRUE;
+ return 1;
+ }
++ if (!strcmp (argv[i], "-hide-cursor"))
++ {
++ CursorInitiallyHidden = TRUE;
++ return 1;
++ }
++ if (!strcmp (argv[i], "-root-ppm"))
++ {
++ if ((i+1) < argc)
++ RootPPM = argv[i+1];
++ else
++ UseMsg ();
++ return 2;
++ }
+ if (!strcmp (argv[i], "-videoTest"))
+ {
+ kdVideoTest = TRUE;
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/xfixes/cursor.c xorg-server-X11R7.1-1.1.0/xfixes/cursor.c
+--- xorg-server-X11R7.1-1.1.0.orig/xfixes/cursor.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/xfixes/cursor.c 2007-01-11 16:33:00.000000000 +0000
+@@ -59,9 +59,12 @@
+ static RESTYPE CursorWindowType;
+ static int CursorScreenPrivateIndex = -1;
+ static int CursorGeneration;
++static Bool CursorGloballyHidden;
+ static CursorPtr CursorCurrent;
+ static CursorPtr pInvisibleCursor = NULL;
+
++Bool CursorInitiallyHidden = FALSE;
++
+ static void deleteCursorHideCountsForScreen (ScreenPtr pScreen);
+
+ #define VERIFY_CURSOR(pCursor, cursor, client, access) { \
+@@ -130,7 +133,7 @@
+
+ Unwrap (cs, pScreen, DisplayCursor);
+
+- if (cs->pCursorHideCounts != NULL) {
++ if (cs->pCursorHideCounts != NULL || CursorGloballyHidden) {
+ ret = (*pScreen->DisplayCursor) (pScreen, pInvisibleCursor);
+ } else {
+ ret = (*pScreen->DisplayCursor) (pScreen, pCursor);
+@@ -848,6 +851,12 @@
+ return BadWindow;
+ }
+
++ /* Is cursor set to be initially hidden ?, if so reset this
++ * flag as now visibility assumed under control of client.
++ */
++ if (CursorGloballyHidden)
++ CursorGloballyHidden = FALSE;
++
+ /*
+ * Has client hidden the cursor before on this screen?
+ * If so, just increment the count.
+@@ -899,9 +908,19 @@
+ return BadWindow;
+ }
+
++ /* X was started with cursor hidden, therefore just reset our flag
++ * (returning to normal client control) and cause cursor to now be
++ * shown.
++ */
++ if (CursorGloballyHidden == TRUE)
++ {
++ CursorGloballyHidden = FALSE;
++ return (client->noClientException);
++ }
++
+ /*
+ * Has client hidden the cursor on this screen?
+- * If not, generate an error.
++ * If so, generate an error.
+ */
+ pChc = findCursorHideCount(client, pWin->drawable.pScreen);
+ if (pChc == NULL) {
+@@ -1009,6 +1028,8 @@
+ XFixesCursorInit (void)
+ {
+ int i;
++
++ CursorGloballyHidden = CursorInitiallyHidden;
+
+ if (CursorGeneration != serverGeneration)
+ {
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/optional-xkb.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/optional-xkb.patch
new file mode 100644
index 0000000000..a580b500b7
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/optional-xkb.patch
@@ -0,0 +1,58 @@
+Index: xorg-server-1.2.0/Makefile.am
+===================================================================
+--- xorg-server-1.2.0.orig/Makefile.am 2007-01-23 06:39:15.000000000 +0100
++++ xorg-server-1.2.0/Makefile.am 2007-03-28 20:26:19.000000000 +0200
+@@ -30,6 +30,10 @@
+ XINPUT_DIR=Xi
+ endif
+
++if XKB
++XKB_DIR=xkb
++endif
++
+ if DBE
+ DBE_DIR=dbe
+ endif
+@@ -46,7 +50,7 @@
+ randr \
+ render \
+ $(XINPUT_DIR) \
+- xkb \
++ $(XKB_DIR) \
+ $(DBE_DIR) \
+ $(MFB_DIR) \
+ $(AFB_DIR) \
+Index: xorg-server-1.2.0/configure.ac
+===================================================================
+--- xorg-server-1.2.0.orig/configure.ac 2007-01-23 06:39:15.000000000 +0100
++++ xorg-server-1.2.0/configure.ac 2007-03-28 20:27:13.000000000 +0200
+@@ -428,6 +428,7 @@
+ AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes])
+ AC_ARG_ENABLE(xinput, AS_HELP_STRING([--disable-xinput], [Build XInput Extension (default: enabled)]), [XINPUT=$enableval], [XINPUT=yes])
+ AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
++AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Build XKB (default: enabled)]), [XKB=$enableval], [XKB=yes])
+
+ dnl DDXes.
+ AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
+@@ -754,12 +755,15 @@
+
+ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
+
+-AC_DEFINE(XKB, 1, [Build XKB])
+-AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
+-AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
+-REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
+-XKB_LIB='$(top_builddir)/xkb/libxkb.la'
+-XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++AM_CONDITIONAL(XKB, [test "x$XKB" = xyes])
++if test "x$XKB" = xyes; then
++ AC_DEFINE(XKB, 1, [Build XKB])
++ AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
++ AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
++ REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
++ XKB_LIB='$(top_builddir)/xkb/libxkb.la'
++ XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++fi
+
+ AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
+ [Do not have `strcasecmp'.]))
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/xcalibrate_coords.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/xcalibrate_coords.patch
new file mode 100644
index 0000000000..e0cca5428b
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/xcalibrate_coords.patch
@@ -0,0 +1,122 @@
+---
+ Xext/xcalibrate.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
+ hw/kdrive/src/kdrive.h | 3 +++
+ hw/kdrive/src/kinput.c | 12 ++++++++++++
+ 3 files changed, 61 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.3.0.0/Xext/xcalibrate.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/Xext/xcalibrate.c 2007-06-29 17:30:03.000000000 +0100
++++ xorg-server-1.3.0.0/Xext/xcalibrate.c 2007-06-30 14:04:40.000000000 +0100
+@@ -166,7 +166,6 @@ ProcXCalibrateSetRawMode (ClientPtr clie
+ return (client->noClientException);
+ }
+
+-
+ static int
+ SProcXCalibrateSetRawMode (ClientPtr client)
+ {
+@@ -180,6 +179,47 @@ SProcXCalibrateSetRawMode (ClientPtr cli
+ return ProcXCalibrateSetRawMode(client);
+ }
+
++static int
++ProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ xXCalibrateScreenToCoordReply rep;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ memset (&rep, 0, sizeof (rep));
++ rep.type = X_Reply;
++ rep.sequenceNumber = client->sequence;
++ rep.x = stuff->x;
++ rep.y = stuff->y;
++
++ KdScreenToMouseCoords(&rep.x, &rep.y);
++
++ if (client->swapped)
++ {
++ int n;
++
++ swaps (&rep.x, n);
++ swaps (&rep.y, n);
++ }
++ WriteToClient(client, sizeof (rep), (char *) &rep);
++ return (client->noClientException);
++}
++
++static int
++SProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ int n;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ swaps(&stuff->x, n);
++ swaps(&stuff->y, n);
++
++ return ProcXCalibrateScreenToCoord(client);
++}
++
+ static void
+ XCalibrateResetProc (ExtensionEntry *extEntry)
+ {
+@@ -194,6 +234,9 @@ ProcXCalibrateDispatch (ClientPtr client
+ return ProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return ProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return ProcXCalibrateScreenToCoord(client);
++
+ default: break;
+ }
+
+@@ -213,6 +256,8 @@ SProcXCalibrateDispatch (ClientPtr clien
+ return SProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return SProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return SProcXCalibrateScreenToCoord(client);
+
+ default: break;
+ }
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kdrive.h
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kdrive.h 2007-06-30 13:43:45.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kdrive.h 2007-06-30 13:45:03.000000000 +0100
+@@ -746,6 +746,9 @@ void
+ KdSetMouseMatrix (KdMouseMatrix *matrix);
+
+ void
++KdScreenToMouseCoords (int *x, int *y);
++
++void
+ KdComputeMouseMatrix (KdMouseMatrix *matrix, Rotation randr, int width, int height);
+
+ void
+Index: xorg-server-1.3.0.0/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/src/kinput.c 2007-06-29 17:30:16.000000000 +0100
++++ xorg-server-1.3.0.0/hw/kdrive/src/kinput.c 2007-06-30 15:52:16.000000000 +0100
+@@ -381,6 +381,18 @@ KdSetMouseMatrix (KdMouseMatrix *matrix)
+ }
+
+ void
++KdScreenToMouseCoords (int *x, int *y)
++{
++ int (*m)[3] = kdMouseMatrix.matrix;
++ int div = m[0][1] * m[1][0] - m[1][1] * m[0][0];
++ int sx = *x;
++ int sy = *y;
++
++ *x = (m[0][1] * sy - m[0][1] * m[1][2] + m[1][1] * m[0][2] - m[1][1] * sx) / div;
++ *y = (m[1][0] * sx + m[0][0] * m[1][2] - m[1][0] * m[0][2] - m[0][0] * sy) / div;
++}
++
++void
+ KdComputeMouseMatrix (KdMouseMatrix *m, Rotation randr, int width, int height)
+ {
+ int x_dir = 1, y_dir = 1;
diff --git a/packages/xorg-xserver/xserver-kdrive-common.inc b/packages/xorg-xserver/xserver-kdrive-common.inc
new file mode 100644
index 0000000000..e46abe3fe8
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-common.inc
@@ -0,0 +1,129 @@
+LICENSE = "MIT"
+DEPENDS = "compositeproto damageproto fixesproto recordproto resourceproto scrnsaverproto xineramaproto videoproto xextproto xproto \
+ libxau libxext libxdmcp libxfont libxrandr tslib virtual/libx11 xtrans"
+
+PROVIDES = "virtual/xserver"
+PACKAGES =+ "xserver-kdrive-fbdev \
+ xserver-kdrive-sdl \
+ xserver-kdrive-fake \
+ xserver-kdrive-xephyr \
+ xserver-kdrive-epson \
+ xserver-kdrive-ati \
+ xserver-kdrive-chips \
+ xserver-kdrive-i810 \
+ xserver-kdrive-mach64 \
+ xserver-kdrive-mga \
+ xserver-kdrive-neomagic \
+ xserver-kdrive-nvidia \
+ xserver-kdrive-pm2 \
+ xserver-kdrive-r128 \
+ xserver-kdrive-smi \
+ xserver-kdrive-vesa \
+ xserver-kdrive-via \
+ xserver-kdrive-w100 \
+ "
+
+SECTION = "x11/base"
+DESCRIPTION = "X server from freedesktop.org"
+DESCRIPTION_xserver-kdrive-fbdev = "X server from freedesktop.org, supporting generic framebuffer devices"
+DESCRIPTION_xserver-kdrive-fake = "Fake X server"
+DESCRIPTION_xserver-kdrive-xephyr = "X server in an X window"
+DESCRIPTION_xserver-kdrive-epson = "X server from freedesktop.org, supporting Epson S1D13806 devices"
+DESCRIPTION_xserver-kdrive-sdl = "X server from freedesktop.org, SDL version"
+DESCRIPTION_xserver-kdrive-w100 = "X server from freedesktop.org, supporting the ATI imageon w100 chipset"
+DESCRIPTION_xserver-kdrive-ati = "X server from freedesktop.org, supporting ATI devices"
+DESCRIPTION_xserver-kdrive-chips = "X server from freedesktop.org, supporting Chips chipsets"
+DESCRIPTION_xserver-kdrive-i810 = "X server from freedesktop.org, supporting Intel chipsets"
+DESCRIPTION_xserver-kdrive-imageon = "X server from freedesktop.org, supporting the ATI imageon 100 chipset"
+DESCRIPTION_xserver-kdrive-mach64 = "X server from freedesktop.org, supporting mach64 chipsets"
+DESCRIPTION_xserver-kdrive-mga = "X server from freedesktop.org, supporting mga chipsets"
+DESCRIPTION_xserver-kdrive-neomagic = "X server from freedesktop.org, supporting neomagic chipsets"
+DESCRIPTION_xserver-kdrive-nvidia = "X server from freedesktop.org, supporting nvidia devices"
+DESCRIPTION_xserver-kdrive-pm2 = "X server from freedesktop.org, supporting Permedia2 chipsets"
+DESCRIPTION_xserver-kdrive-r128 = "X server from freedesktop.org, supporting rage128 chipsets"
+DESCRIPTION_xserver-kdrive-smi = "X server from freedesktop.org, supporting Silicon Motion devices"
+DESCRIPTION_xserver-kdrive-vesa = "X server from freedesktop.org, supporting any card with a VESA, VGA or even EGA BIOS. x86 hardware only"
+DESCRIPTION_xserver-kdrive-via = "X server from freedesktop.org, supporting VIA chipsets"
+
+FILES_${PN} += "${libdir}/xserver/SecurityPolicy"
+
+FILES_xserver-kdrive-fbdev = "${bindir}/Xfbdev"
+FILES_xserver-kdrive-fake = "${bindir}/Xfake"
+FILES_xserver-kdrive-xephyr = "${bindir}/Xephyr"
+FILES_xserver-kdrive-epson = "${bindir}/Xepson"
+FILES_xserver-kdrive-sdl = "${bindir}/Xsdl"
+FILES_xserver-kdrive-w100 = "${bindir}/Xw100"
+FILES_xserver-kdrive-ati = "${bindir}/Xati"
+FILES_xserver-kdrive-chips = "${bindir}/Xchips"
+FILES_xserver-kdrive-i810 = "${bindir}/Xi810"
+FILES_xserver-kdrive-imageon = "${bindir}/Ximageon"
+FILES_xserver-kdrive-mach64 = "${bindir}/Xmach64"
+FILES_xserver-kdrive-mga = "${bindir}/Xmga"
+FILES_xserver-kdrive-neomagic = "${bindir}/Xneomagic"
+FILES_xserver-kdrive-nvidia = "${bindir}/Xnvidia"
+FILES_xserver-kdrive-pm2 = "${bindir}/Xpm2"
+FILES_xserver-kdrive-r128 = "${bindir}/Xr128"
+FILES_xserver-kdrive-smi = "${bindir}/Xsmi"
+FILES_xserver-kdrive-vesa = "${bindir}/Xvesa"
+FILES_xserver-kdrive-via = "${bindir}/Xvia"
+
+RDEPENDS_xserver-kdrive-fbdev = "${PN}"
+RDEPENDS_xserver-kdrive-fake = "${PN}"
+RDEPENDS_xserver-kdrive-xephyr = "${PN}"
+RDEPENDS_xserver-kdrive-epson = "${PN}"
+RDEPENDS_xserver-kdrive-sdl = "${PN}"
+RDEPENDS_xserver-kdrive-w100 = "${PN}"
+RDEPENDS_xserver-kdrive-ati = "${PN}"
+RDEPENDS_xserver-kdrive-chips = "${PN}"
+RDEPENDS_xserver-kdrive-i810 = "${PN}"
+RDEPENDS_xserver-kdrive-mach64 = "${PN}"
+RDEPENDS_xserver-kdrive-mga = "${PN}"
+RDEPENDS_xserver-kdrive-neomagic = "${PN}"
+RDEPENDS_xserver-kdrive-nvidia = "${PN}"
+RDEPENDS_xserver-kdrive-pm2 = "${PN}"
+RDEPENDS_xserver-kdrive-r128 = "${PN}"
+RDEPENDS_xserver-kdrive-smi = "${PN}"
+RDEPENDS_xserver-kdrive-vesa = "${PN}"
+RDEPENDS_xserver-kdrive-via = "${PN}"
+
+SRC_URI ?= "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
+ ${KDRIVE_COMMON_PATCHES}"
+KDRIVE_COMMON_PATCHES = " \
+ file://kmode.patch;patch=1 \
+ file://disable-apm.patch;patch=1 \
+ file://no-serial-probing.patch;patch=1 \
+ file://kdrive-evdev.patch;patch=1 \
+ file://kdrive-use-evdev.patch;patch=1 \
+ file://fbdev-not-fix.patch;patch=1 \
+ file://enable-builtin-fonts.patch;patch=1 \
+ file://disable-xf86-dga-xorgcfg.patch;patch=1 \
+ file://optional-xkb.patch;patch=1 \
+ file://enable-epson.patch;patch=1 \
+ file://enable-tslib.patch;patch=1 \
+ file://kmode-palm.patch;patch=1 \
+ "
+
+SRC_URI_append_mnci = " file://onlyfb.patch;patch=1"
+SRC_URI_append_poodle = " file://xserver-kdrive-poodle.patch;patch=1"
+SRC_URI_append_qemux86 = " file://xserver-kdrive-poodle.patch;patch=1"
+PACKAGE_ARCH_poodle = "${MACHINE_ARCH}"
+PACKAGE_ARCH_qemux86 = "${MACHINE_ARCH}"
+
+inherit autotools pkgconfig
+
+ARM_INSTRUCTION_SET = "arm"
+
+EXTRA_OECONF = "--enable-composite --enable-kdrive \
+ --disable-dga --disable-dri --disable-xinerama \
+ --disable-xf86misc --disable-xf86vidmode \
+ --disable-xorg --disable-xorgcfg \
+ --disable-xkb --disable-xnest --disable-xvfb \
+ --disable-xevie --disable-xprint --disable-xtrap \
+ --disable-dmx \
+ --with-default-font-path=built-ins \
+ --enable-tslib --enable-xcalibrate \
+ ac_cv_file__usr_share_X11_sgml_defs_ent=no"
+
+do_configure_prepend() {
+ sed -i -e 's/tslib-0.0/tslib-1.0/' ${S}/configure.ac
+}
diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb
new file mode 100644
index 0000000000..d8a6c3d795
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-imageon_1.2.0.bb
@@ -0,0 +1,26 @@
+require xserver-kdrive-common.inc
+DESCRIPTION = "X server for ATI Imageon 100 Cards from freedesktop.org"
+COMPATIBLE_MACHINE = "c7x0"
+
+DEPENDS += "libxkbfile libxcalibrate"
+
+PROVIDES = "virtual/xserver"
+
+PE = "1"
+PR = "r1"
+
+FILESPATH = "${FILE_DIRNAME}/xserver-kdrive-1.2.0:${FILE_DIRNAME}/xserver-kdrive"
+SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
+ ${KDRIVE_COMMON_PATCHES} \
+ file://enable-xcalibrate.patch;patch=1 \
+ file://fbcompositesrc8888revnpx0565.patch;patch=1 \
+ file://kdrive-vidmemarea.patch;patch=1 \
+ file://kdrive-imageon.patch;patch=1 \
+ file://xcalibrate_coords.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/xorg-server-${PV}"
+
+IMAGEON_OECONF = "--disable-imageon"
+IMAGEON_OECONF_arm = "--enable-imageon"
+
diff --git a/packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb b/packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb
deleted file mode 100644
index 75b4a9956b..0000000000
--- a/packages/xorg-xserver/xserver-kdrive-imageon_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-DESCRIPTION = "X server for Imageon Cards from freedesktop.org"
-DESCRIPTION_xserver-kdrive-imageon = "X server from freedesktop.org, supporting the ATI imageon 100 chipset"
-
-COMPATIBLE_MACHINE = "(c7x0|hx4700)"
-
-SECTION = "x11/base"
-LICENSE = "MIT"
-
-DEPENDS = "tslib xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto xcalibrateext recordproto videoproto scrnsaverproto"
-
-PROVIDES = "virtual/xserver"
-RPROVIDES = "virtual/xserver"
-
-PR = "r0"
-
-FILESPATH = "${FILE_DIRNAME}/xserver-kdrive"
-
-SRC_URI = "http://ftp.x.org/pub/X11R7.1/src/xserver/xorg-server-X11R7.1-1.1.0.tar.bz2 \
- file://kmode.patch;patch=1 \
- file://disable-apm.patch;patch=1 \
- file://no-serial-probing.patch;patch=1 \
- file://kdrive-evdev.patch;patch=1 \
- file://kdrive-use-evdev.patch;patch=1 \
- file://fbdev-not-fix.patch;patch=1 \
- file://enable-builtin-fonts.patch;patch=1 \
- file://optional-xkb.patch;patch=1 \
- file://disable-xf86-dga-xorgcfg.patch;patch=1 \
- file://enable-tslib.patch;patch=1 \
- file://xcalibrate.patch;patch=1 \
- file://kdrive-vidmemarea.patch;patch=1 \
- file://kdrive-imageon.patch;patch=1"
-
-S = "${WORKDIR}/xorg-server-X11R7.1-1.1.0"
-
-inherit autotools pkgconfig
-
-ARM_INSTRUCTION_SET = "arm"
-W100_OECONF_arm = "--enable-imageon"
-
-EXTRA_OECONF = "--enable-composite --enable-kdrive \
- --disable-dga --disable-dri --disable-xinerama \
- --disable-xf86misc --disable-xf86vidmode \
- --disable-xorg --disable-xorgcfg \
- --disable-xkb --disable-xnest --disable-xvfb \
- --disable-xevie --disable-xprint --disable-xtrap \
- --disable-dmx ${W100_OECONF} \
- --with-default-font-path=built-ins \
- --enable-tslib --enable-xcalibrate \
- ac_cv_file__usr_share_X11_sgml_defs_ent=no"
-
-FILES_${PN} = "${libdir}/xserver/SecurityPolicy \
- ${bindir}/Ximageon"
diff --git a/packages/xorg-xserver/xserver-kdrive-omap/configure-tslib.patch b/packages/xorg-xserver/xserver-kdrive-omap/configure-tslib.patch
deleted file mode 100644
index 0c0b64bf14..0000000000
--- a/packages/xorg-xserver/xserver-kdrive-omap/configure-tslib.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- configure.ac~ 2005-06-03 17:23:36.000000000 +0200
-+++ configure.ac 2005-06-03 17:23:36.000000000 +0200
-@@ -447,10 +447,6 @@
- KDRIVE_INCS="$KDRIVE_PURE_INCS $KDRIVE_OS_INC"
- fi
-
--if test "$TSLIB" = yes; then
-- KDRIVE_LIBS="${KDRIVE_LIBS} -lts"
--fi
--
- AC_SUBST([KDRIVE_PURE_LIBS])
- AC_SUBST([KDRIVE_PURE_INCS])
- AC_SUBST([KDRIVE_LIBS])
diff --git a/packages/xorg-xserver/xserver-kdrive-omap/kmode.patch b/packages/xorg-xserver/xserver-kdrive-omap/kmode.patch
deleted file mode 100644
index 22ad51c5ad..0000000000
--- a/packages/xorg-xserver/xserver-kdrive-omap/kmode.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: hw/kdrive/src/kmode.c
-===================================================================
-RCS file: /cvs/xserver/xserver/hw/kdrive/src/kmode.c,v
-retrieving revision 1.13
-diff -u -r1.13 kmode.c
---- xserver/hw/kdrive/src/kmode.c 26 Jul 2004 17:14:26 -0000 1.13
-+++ xserver/hw/kdrive/src/kmode.c 28 Aug 2004 14:04:19 -0000
-@@ -41,6 +41,11 @@
- 1, 11, 14, KdSyncNegative,
- },
-
-+ { 240, 320, 64, 0,
-+ 0, 0, 0, KdSyncNegative,
-+ 0, 0, 0, KdSyncNegative,
-+ },
-+
- /* Other VESA modes */
- { 640, 350, 85, 31500, /* VESA */
- 32, 96, 192, KdSyncPositive, /* 26.413 */
diff --git a/packages/xorg-xserver/xserver-kdrive-omap_6.6.3.bb b/packages/xorg-xserver/xserver-kdrive-omap_6.6.3.bb
deleted file mode 100644
index d4a184b484..0000000000
--- a/packages/xorg-xserver/xserver-kdrive-omap_6.6.3.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-LICENSE = "MIT"
-DEPENDS = "xsp tslib-maemo xproto libxdmcp xextensions xtrans libxau virtual/libx11 libxext libxrandr fixesext damageext libxfont resourceext compositeext xcalibrateext recordext"
-PROVIDES = "virtual/xserver"
-PACKAGES = "${PN} ${PN}-doc ${PN}-dev ${PN}-locale"
-SECTION = "x11/base"
-DESCRIPTION = "X server from freedesktop.org"
-DESCRIPTION_xserver-kdrive-omap = "X server from freedesktop.org with patches from maemo.org, supporting X on OMAP based devices"
-
-PR = "r2"
-
-FILES_${PN} = "${bindir}/Xomap"
-
-SRC_URI = " http://stage.maemo.org/pool/maemo/ossw/source/x/xserver-kdrive/xserver-kdrive_${PV}-5.tar.gz \
- file://kmode.patch;patch=1 \
- file://fbdev-not-fix.patch;patch=1 \
- file://configure-tslib.patch;patch=1;pnum=0"
-
-S = "${WORKDIR}/xserver"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "--enable-composite --disable-xinerama --enable-xomapserver \
- --enable-xsp --disable-xlocale --disable-rpath --prefix=/usr"
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty b/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/.mtn2git_empty
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch b/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch
new file mode 100644
index 0000000000..ee8c1ed680
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/button_only.patch
@@ -0,0 +1,20 @@
+---
+ hw/kdrive/linux/tslib.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-05-17 10:28:12.000000000 +0100
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-05-17 10:28:42.000000000 +0100
+@@ -111,10 +111,7 @@ TsRead (int fd, void *closure)
+ event.pressure);
+ discard = 0;
+ if (event.pressure) {
+- if (event.pressure > pi->dixdev->absolute->button_threshold)
+- flags = KD_BUTTON_8;
+- else
+- flags = KD_BUTTON_1;
++ flags = KD_BUTTON_1;
+
+ /*
+ * Here we test for the touch screen driver actually being on the
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch b/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch
new file mode 100644
index 0000000000..c5997c2ffa
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/calibrateext.patch
@@ -0,0 +1,124 @@
+---
+ configure |38107 -----------------------------------------------------------
+ configure.ac | 2 -
+ hw/kdrive/linux/tslib.c | 68 ++++++++++++++++++++++++++----------------------
+ 2 files changed, 39 insertions(+), 31 deletions(-)
+
+
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-30 00:44:13.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-30 21:55:52.000000000 +0000
+@@ -47,6 +47,10 @@
+
+ #define TSLIB_QUEUE_SIZE 3
+
++/* For XCalibrate extension */
++void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
++void *tslib_raw_event_closure;
++
+ struct TslibPrivate {
+ int fd;
+ int lastx, lasty;
+@@ -76,6 +80,19 @@ TsRead (int fd, void *closure)
+ unsigned long flags = 0;
+ int discard = 0;
+
++ if (tslib_raw_event_hook)
++ {
++ /* XCalibrate Ext */
++ if (ts_read_raw(private->tsDev, &event, 1) == 1)
++ {
++ tslib_raw_event_hook (event.x,
++ event.y,
++ event.pressure,
++ tslib_raw_event_closure);
++ }
++ return;
++ }
++
+ if (!private->tsDev) {
+ DebugF("[tslib] EXTREME BADNESS: TsRead called while tsDev is null!\n");
+ return;
+@@ -322,14 +339,14 @@ TsRead (int fd, void *closure)
+ }
+ }
+
+-/* must always be NULL-terminated. */
+-char *valid_ts_names[] = {
+- "ADS784x Touchscreen",
+- "omap-ts",
+- "TSC2301 touchscreen",
+- NULL
++static char *TsNames[] = {
++ NULL, /* set via TSLIB_TSDEVICE */
++ "/dev/ts",
++ "/dev/touchscreen/0",
+ };
+
++#define NUM_TS_NAMES (sizeof (TsNames) / sizeof (TsNames[0]))
++
+ #define TS_NAME_SIZE 32
+
+ static Status
+@@ -383,11 +400,10 @@ TslibDisable (KdPointerInfo *pi)
+ private->tsDev = NULL;
+ }
+
+-
+ static Status
+ TslibInit (KdPointerInfo *pi)
+ {
+- int fd = 0, i = 0;
++ int fd = 0, i = 0, j = 0;
+ char devpath[PATH_MAX], devname[TS_NAME_SIZE];
+ DIR *inputdir = NULL;
+ struct dirent *inputent = NULL;
+@@ -397,33 +413,25 @@ TslibInit (KdPointerInfo *pi)
+ return !Success;
+
+ if (!pi->path || strcmp(pi->path, "auto") == 0) {
+- if (!(inputdir = opendir("/dev/input"))) {
+- ErrorF("[tslib/TslibInit]: couldn't open /dev/input!\n");
+- return BadMatch;
+- }
+
+- while ((inputent = readdir(inputdir))) {
+- if (strncmp(inputent->d_name, "event", 5) != 0)
+- continue;
++ if ((TsNames[0] = getenv("TSLIB_TSDEVICE")) == NULL)
++ j++;
++
++ for (i = j; i < NUM_TS_NAMES; i++)
++ {
++ struct tsdev *tsDev;
+
+- snprintf(devpath, PATH_MAX, "/dev/input/%s", inputent->d_name);
+- fd = open(devpath, O_RDWR);
++ if(!(tsDev = ts_open(TsNames[i], 0)))
++ continue;
+
+- if (!ioctl(fd, EVIOCGNAME(sizeof(devname)), devname)) {
+- close(fd);
++ if (ts_config(tsDev))
+ continue;
+- }
+- close(fd);
+
+- for (i = 0; valid_ts_names[i]; i++) {
+- if (strcmp(devname, valid_ts_names[i]) == 0) {
+- pi->path = KdSaveString(devpath);
+- break;
+- }
+- }
+- }
+-
+- closedir(inputdir);
++ ts_close(tsDev);
++
++ pi->path = KdSaveString(TsNames[i]);
++ break;
++ }
+ }
+
+ if (!pi->path || strcmp(pi->path, "auto") == 0) {
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch b/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch
new file mode 100644
index 0000000000..bd8842721b
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/disable-apm.patch
@@ -0,0 +1,20 @@
+--- xserver/hw/kdrive/linux/linux.c.orig 2005-04-23 15:56:13.988849232 +0000
++++ xserver/hw/kdrive/linux/linux.c 2005-04-23 15:57:05.001094192 +0000
+@@ -342,7 +342,7 @@
+ /*
+ * Open the APM driver
+ */
+- LinuxApmFd = open ("/dev/apm_bios", 2);
++ /*LinuxApmFd = open ("/dev/apm_bios", 2);
+ if (LinuxApmFd < 0 && errno == ENOENT)
+ LinuxApmFd = open ("/dev/misc/apm_bios", 2);
+ if (LinuxApmFd >= 0)
+@@ -352,7 +352,7 @@
+ RegisterBlockAndWakeupHandlers (LinuxApmBlock, LinuxApmWakeup, 0);
+ AddEnabledDevice (LinuxApmFd);
+ }
+-
++ */
+ /*
+ * now get the VT
+ */
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch b/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch
new file mode 100644
index 0000000000..9c43e52ead
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/disable-xf86-dga-xorgcfg.patch
@@ -0,0 +1,37 @@
+--- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
++++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
+@@ -505,7 +505,11 @@
+ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
+
+ dnl Core modules for most extensions, et al.
++if test "$KDRIVE" = yes; then
++REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto"
++else
+ REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans xf86miscproto xf86vidmodeproto xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto xf86dgaproto"
++fi
+ REQUIRED_LIBS="xfont xau fontenc"
+
+ AM_CONDITIONAL(XV, [test "x$XV" = xyes])
+@@ -1514,7 +1526,9 @@
+ AC_SUBST(XKB_COMPILED_DIR)
+
+ dnl and the rest of these are generic, so they're in config.h
++if test ! x"$KDRIVE" = xyes; then
+ AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
++fi
+ AC_DEFINE(XResExtension, 1, [Build XRes extension])
+
+ dnl CYGWIN does not define fd_set if _POSIX_SOURCE is defined
+@@ -1534,10 +1548,12 @@
+
+ AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
+
++if test ! "x$KDRIVE" = xyes ; then
+ dnl xorgconfig CLI configuration utility
+ PKG_CHECK_MODULES([XORGCONFIG_DEP], [xkbfile x11])
+ AC_SUBST(XORGCONFIG_DEP_CFLAGS)
+ AC_SUBST(XORGCONFIG_DEP_LIBS)
++fi
+
+ dnl xorgcfg GUI configuration utility
+ AC_ARG_ENABLE(xorgcfg, AS_HELP_STRING([--enable-xorgcfg],
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch b/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch
new file mode 100644
index 0000000000..13a6c2c954
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/enable-builtin-fonts.patch
@@ -0,0 +1,12 @@
+--- xorg-server-X11R7.1-1.1.0/dix/dixfonts.c.orig 2006-06-08 14:49:12.158684250 +0200
++++ xorg-server-X11R7.1-1.1.0/dix/dixfonts.c 2006-06-08 14:49:52.493205000 +0200
+@@ -52,8 +52,8 @@
+ /* $Xorg: dixfonts.c,v 1.4 2000/08/17 19:48:18 cpqbld Exp $ */
+
+ #define NEED_REPLIES
+ #ifdef HAVE_DIX_CONFIG_H
+-#include <dix-config.h>
++#include <kdrive-config.h>
+ #endif
+
+ #include <X11/X.h>
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch b/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch
new file mode 100644
index 0000000000..e488657b74
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/enable-tslib.patch
@@ -0,0 +1,23 @@
+--- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
++++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
+@@ -1438,6 +1446,10 @@
+ fi
+
+- # tslib...
++ AC_CHECK_HEADERS([tslib.h])
++ if test "$ac_cv_header_tslib_h" = yes; then
++ AC_DEFINE(TSLIB, 1, [Build kdrive with tslib support])
++ AC_DEFINE(TOUCHSCREEN, 1, [Build kdrive with touchscreen support])
++ fi
+
+ # damage shadow extension glx (NOTYET) fb mi
+ KDRIVE_INC='-I$(top_srcdir)/hw/kdrive/src'
+@@ -1467,7 +1479,7 @@
+ AC_SUBST(KDRIVE_CFLAGS)
+ AC_SUBST(KDRIVE_PURE_LIBS)
+ AC_SUBST(KDRIVE_LIBS)
+-AM_CONDITIONAL(TSLIB, false)
++AM_CONDITIONAL(TSLIB, [test x"$ac_cv_header_tslib_h" = xyes])
+ AM_CONDITIONAL(H3600_TS, false)
+ AM_CONDITIONAL(KDRIVEVESA, [test x"$ac_cv_header_sys_vm86_h" = xyes])
+ AM_CONDITIONAL(KDRIVEFBDEV, [test x"$ac_cv_header_linux_fb_h" = xyes])
diff --git a/packages/xorg-xserver/xserver-kdrive-omap/fbdev-not-fix.patch b/packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch
index f87e7cc2cd..f87e7cc2cd 100644
--- a/packages/xorg-xserver/xserver-kdrive-omap/fbdev-not-fix.patch
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/fbdev-not-fix.patch
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
new file mode 100644
index 0000000000..09c9e8909c
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/fixups.patch
@@ -0,0 +1,446 @@
+---
+ Xi/chgdctl.c | 55 +++++++++++++++++++------
+ Xi/getdctl.c | 87 +++++++++++++++++++++++++++++++----------
+ Xi/getdctl.h | 11 +++--
+ Xi/stubs.c | 2
+ configure.ac | 2
+ dix/devices.c | 31 +++++++++-----
+ hw/kdrive/linux/tslib.c | 8 +--
+ hw/kdrive/src/kinput.c | 6 +-
+ hw/xfree86/common/xf86Xinput.c | 3 -
+ include/input.h | 2
+ include/inputstr.h | 18 +++++++-
+ 11 files changed, 162 insertions(+), 63 deletions(-)
+
+Index: xorg-server-1.1.99.3/Xi/chgdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/chgdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/chgdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -104,8 +104,10 @@ ProcXChangeDeviceControl(ClientPtr clien
+ xChangeDeviceControlReply rep;
+ AxisInfoPtr a;
+ CARD32 *resolution;
+- xDeviceTSCtl *ts;
++ xDeviceAbsCalibCtl *calib;
++ xDeviceAbsAreaCtl *area;
+ xDeviceCoreCtl *c;
++ xDeviceEnableCtl *e;
+
+ REQUEST(xChangeDeviceControlReq);
+ REQUEST_AT_LEAST_SIZE(xChangeDeviceControlReq);
+@@ -170,25 +172,28 @@ ProcXChangeDeviceControl(ClientPtr clien
+ return Success;
+ }
+ break;
+- case DEVICE_TOUCHSCREEN:
+- ts = (xDeviceTSCtl *)&stuff[1];
+-
+- if (ts->button_threshold < 0 || ts->button_threshold > 255) {
++ case DEVICE_ABS_CALIB:
++ calib = (xDeviceAbsCalibCtl *)&stuff[1];
++
++ if (calib->button_threshold < 0 || calib->button_threshold > 255) {
+ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
+ BadValue);
+ return Success;
+ }
+
+- status = ChangeDeviceControl(client, dev, (xDeviceCtl *) ts);
++ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) calib);
+
+ if (status == Success) {
+- dev->touchscreen->min_x = ts->min_x;
+- dev->touchscreen->max_x = ts->max_x;
+- dev->touchscreen->min_y = ts->min_y;
+- dev->touchscreen->max_y = ts->max_y;
+- dev->touchscreen->button_threshold = ts->button_threshold;
+- } else if (status == DeviceBusy) {
+- rep.status = DeviceBusy;
++ dev->absolute->min_x = calib->min_x;
++ dev->absolute->max_x = calib->max_x;
++ dev->absolute->min_y = calib->min_y;
++ dev->absolute->max_y = calib->max_y;
++ dev->absolute->flip_x = calib->flip_x;
++ dev->absolute->flip_y = calib->flip_y;
++ dev->absolute->rotation = calib->rotation;
++ dev->absolute->button_threshold = calib->button_threshold;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
+ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
+ &rep);
+ return Success;
+@@ -199,6 +204,30 @@ ProcXChangeDeviceControl(ClientPtr clien
+ }
+
+ break;
++ case DEVICE_ABS_AREA:
++ area = (xDeviceAbsAreaCtl *)&stuff[1];
++
++ status = ChangeDeviceControl(client, dev, (xDeviceCtl *) area);
++
++ if (status == Success) {
++ dev->absolute->offset_x = area->offset_x;
++ dev->absolute->offset_y = area->offset_y;
++ dev->absolute->width = area->width;
++ dev->absolute->height = area->height;
++ dev->absolute->screen = area->screen;
++ dev->absolute->following = area->following;
++ } else if (status == DeviceBusy || status == BadValue) {
++ rep.status = status;
++ WriteReplyToClient(client, sizeof(xChangeDeviceControlReply),
++ &rep);
++ return Success;
++ } else {
++ SendErrorToClient(client, IReqCode, X_ChangeDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ break;
+ case DEVICE_CORE:
+ c = (xDeviceCoreCtl *)&stuff[1];
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.c 2007-01-29 22:59:27.000000000 +0000
+@@ -124,14 +124,23 @@ ProcXGetDeviceControl(ClientPtr client)
+ total_length = sizeof(xDeviceResolutionState) +
+ (3 * sizeof(int) * dev->valuator->numAxes);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- if (!dev->touchscreen) {
++ case DEVICE_ABS_CALIB:
++ if (!dev->absolute) {
+ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
+ BadMatch);
+ return Success;
+ }
+
+- total_length = sizeof(xDeviceTSCtl);
++ total_length = sizeof(xDeviceAbsCalibCtl);
++ break;
++ case DEVICE_ABS_AREA:
++ if (!dev->absolute) {
++ SendErrorToClient(client, IReqCode, X_GetDeviceControl, 0,
++ BadMatch);
++ return Success;
++ }
++
++ total_length = sizeof(xDeviceAbsAreaCtl);
+ break;
+ case DEVICE_CORE:
+ total_length = sizeof(xDeviceCoreCtl);
+@@ -152,8 +161,11 @@ ProcXGetDeviceControl(ClientPtr client)
+ case DEVICE_RESOLUTION:
+ CopySwapDeviceResolution(client, dev->valuator, buf, total_length);
+ break;
+- case DEVICE_TOUCHSCREEN:
+- CopySwapDeviceTouchscreen(client, dev->touchscreen, buf);
++ case DEVICE_ABS_CALIB:
++ CopySwapDeviceAbsCalib(client, dev->absolute, buf);
++ break;
++ case DEVICE_ABS_AREA:
++ CopySwapDeviceAbsArea(client, dev->absolute, buf);
+ break;
+ case DEVICE_CORE:
+ CopySwapDeviceCore(client, dev, buf);
+@@ -206,28 +218,61 @@ CopySwapDeviceResolution(ClientPtr clien
+ }
+ }
+
+-void CopySwapDeviceTouchscreen (ClientPtr client, TouchscreenClassPtr dts,
++void CopySwapDeviceAbsCalib (ClientPtr client, AbsoluteClassPtr dts,
+ char *buf)
+ {
+ register char n;
+- xDeviceTSState *ts = (xDeviceTSState *) buf;
++ xDeviceAbsCalibState *calib = (xDeviceAbsCalibState *) buf;
+
+- ts->control = DEVICE_TOUCHSCREEN;
+- ts->length = sizeof(ts);
+- ts->min_x = dts->min_x;
+- ts->max_x = dts->max_x;
+- ts->min_y = dts->min_y;
+- ts->max_y = dts->max_y;
+- ts->button_threshold = dts->button_threshold;
++ calib->control = DEVICE_ABS_CALIB;
++ calib->length = sizeof(calib);
++ calib->min_x = dts->min_x;
++ calib->max_x = dts->max_x;
++ calib->min_y = dts->min_y;
++ calib->max_y = dts->max_y;
++ calib->flip_x = dts->flip_x;
++ calib->flip_y = dts->flip_y;
++ calib->rotation = dts->rotation;
++ calib->button_threshold = dts->button_threshold;
+
+ if (client->swapped) {
+- swaps(&ts->control, n);
+- swaps(&ts->length, n);
+- swapl(&ts->min_x, n);
+- swapl(&ts->max_x, n);
+- swapl(&ts->min_y, n);
+- swapl(&ts->max_y, n);
+- swapl(&ts->button_threshold, n);
++ swaps(&calib->control, n);
++ swaps(&calib->length, n);
++ swapl(&calib->min_x, n);
++ swapl(&calib->max_x, n);
++ swapl(&calib->min_y, n);
++ swapl(&calib->max_y, n);
++ swapl(&calib->flip_x, n);
++ swapl(&calib->flip_y, n);
++ swapl(&calib->rotation, n);
++ swapl(&calib->button_threshold, n);
++ }
++}
++
++void CopySwapDeviceAbsArea (ClientPtr client, AbsoluteClassPtr dts,
++ char *buf)
++{
++ register char n;
++ xDeviceAbsAreaState *area = (xDeviceAbsAreaState *) buf;
++
++ area->control = DEVICE_ABS_AREA;
++ area->length = sizeof(area);
++ area->offset_x = dts->offset_x;
++ area->offset_y = dts->offset_y;
++ area->width = dts->width;
++ area->height = dts->height;
++ area->screen = dts->screen;
++ area->following = dts->following;
++
++ if (client->swapped) {
++ swaps(&area->control, n);
++ swaps(&area->length, n);
++ swapl(&area->offset_x, n);
++ swapl(&area->offset_y, n);
++ swapl(&area->width, n);
++ swapl(&area->height, n);
++ swapl(&area->screen, n);
++ swapl(&area->following, n);
+ }
+ }
+
+Index: xorg-server-1.1.99.3/Xi/getdctl.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/getdctl.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/getdctl.h 2007-01-29 22:59:27.000000000 +0000
+@@ -42,10 +42,13 @@ void CopySwapDeviceResolution(ClientPtr
+ int /* length */
+ );
+
+-void CopySwapDeviceTouchscreen(ClientPtr /* client */ ,
+- TouchscreenClassPtr /* ts */ ,
+- char * /* buf */
+- );
++void CopySwapDeviceAbsCalib (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
++
++void CopySwapDeviceAbsArea (ClientPtr client,
++ AbsoluteClassPtr dts,
++ char *buf);
+
+ void CopySwapDeviceCore(ClientPtr /* client */ ,
+ DeviceIntPtr /* dev */ ,
+Index: xorg-server-1.1.99.3/Xi/stubs.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xi/stubs.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/Xi/stubs.c 2007-01-29 22:59:27.000000000 +0000
+@@ -287,7 +287,7 @@ ChangeDeviceControl(register ClientPtr c
+ switch (control->control) {
+ case DEVICE_RESOLUTION:
+ return (BadMatch);
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
+ return (BadMatch);
+ case DEVICE_CORE:
+ return (BadMatch);
+Index: xorg-server-1.1.99.3/dix/devices.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/dix/devices.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/dix/devices.c 2007-01-29 22:59:27.000000000 +0000
+@@ -117,7 +117,7 @@ AddInputDevice(DeviceProc deviceProc, Bo
+ dev->button = (ButtonClassPtr)NULL;
+ dev->focus = (FocusClassPtr)NULL;
+ dev->proximity = (ProximityClassPtr)NULL;
+- dev->touchscreen = (TouchscreenClassPtr)NULL;
++ dev->absolute = (AbsoluteClassPtr)NULL;
+ dev->kbdfeed = (KbdFeedbackPtr)NULL;
+ dev->ptrfeed = (PtrFeedbackPtr)NULL;
+ dev->intfeed = (IntegerFeedbackPtr)NULL;
+@@ -821,22 +821,31 @@ InitValuatorClassDeviceStruct(DeviceIntP
+ }
+
+ _X_EXPORT Bool
+-InitTouchscreenClassDeviceStruct(DeviceIntPtr dev)
++InitAbsoluteClassDeviceStruct(DeviceIntPtr dev)
+ {
+- register TouchscreenClassPtr tsc;
++ register AbsoluteClassPtr abs;
+
+- tsc = (TouchscreenClassPtr)xalloc(sizeof(TouchscreenClassRec));
+- if (!tsc)
++ abs = (AbsoluteClassPtr)xalloc(sizeof(AbsoluteClassRec));
++ if (!abs)
+ return FALSE;
+
+ /* we don't do anything sensible with these, but should */
+- tsc->min_x = -1;
+- tsc->min_y = -1;
+- tsc->max_x = -1;
+- tsc->max_y = -1;
++ abs->min_x = -1;
++ abs->min_y = -1;
++ abs->max_x = -1;
++ abs->max_y = -1;
++ abs->flip_x = 0;
++ abs->flip_y = 0;
++ abs->rotation = 0;
++ abs->button_threshold = 0;
+
+- tsc->button_threshold = 0;
+- dev->touchscreen = tsc;
++ abs->offset_x = 0;
++ abs->offset_y = 0;
++ abs->width = -1;
++ abs->height = -1;
++ abs->following = 0;
++
++ dev->absolute = abs;
+
+ return TRUE;
+ }
+Index: xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/xfree86/common/xf86Xinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -538,7 +538,8 @@ ChangeDeviceControl (ClientPtr client, D
+ switch (control->control) {
+ case DEVICE_CORE:
+ case DEVICE_RESOLUTION:
+- case DEVICE_TOUCHSCREEN:
++ case DEVICE_ABS_CALIB:
++ case DEVICE_ABS_AREA:
+ return Success;
+ default:
+ return BadMatch;
+Index: xorg-server-1.1.99.3/include/input.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/input.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/input.h 2007-01-29 22:59:27.000000000 +0000
+@@ -238,7 +238,7 @@ extern Bool InitValuatorClassDeviceStruc
+ int /*numMotionEvents*/,
+ int /*mode*/);
+
+-extern Bool InitTouchscreenClassDeviceStruct(
++extern Bool InitAbsoluteClassDeviceStruct(
+ DeviceIntPtr /*device*/);
+
+ extern Bool InitFocusClassDeviceStruct(
+Index: xorg-server-1.1.99.3/include/inputstr.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/inputstr.h 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/include/inputstr.h 2007-01-29 22:59:27.000000000 +0000
+@@ -185,13 +185,25 @@ typedef struct _ProximityClassRec {
+ char pad;
+ } ProximityClassRec, *ProximityClassPtr;
+
+-typedef struct _TouchscreenClassRec {
++typedef struct _AbsoluteClassRec {
++ /* Calibration. */
+ int min_x;
+ int max_x;
+ int min_y;
+ int max_y;
++ int flip_x;
++ int flip_y;
++ int rotation;
+ int button_threshold;
+-} TouchscreenClassRec, *TouchscreenClassPtr;
++
++ /* Area. */
++ int offset_x;
++ int offset_y;
++ int width;
++ int height;
++ int screen;
++ XID following;
++} AbsoluteClassRec, *AbsoluteClassPtr;
+
+ typedef struct _KbdFeedbackClassRec *KbdFeedbackPtr;
+ typedef struct _PtrFeedbackClassRec *PtrFeedbackPtr;
+@@ -293,7 +305,7 @@ typedef struct _DeviceIntRec {
+ ButtonClassPtr button;
+ FocusClassPtr focus;
+ ProximityClassPtr proximity;
+- TouchscreenClassPtr touchscreen;
++ AbsoluteClassPtr absolute;
+ KbdFeedbackPtr kbdfeed;
+ PtrFeedbackPtr ptrfeed;
+ IntegerFeedbackPtr intfeed;
+Index: xorg-server-1.1.99.3/configure.ac
+===================================================================
+--- xorg-server-1.1.99.3.orig/configure.ac 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/configure.ac 2007-01-29 22:59:27.000000000 +0000
+@@ -1586,7 +1586,7 @@ if test "$KDRIVE" = yes; then
+ #KDRIVE_PURE_LIBS="$DIX_LIB $OS_LIB $FB_LIB $XEXT_LIB $MIEXT_DAMAGE_LIB \
+ # $MIEXT_SHADOW_LIB $XPSTUBS_LIB"
+ KDRIVE_XKB_DDX_LIB='$(top_builddir)/hw/kdrive/src/libkdrivexkb.a'
+- KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB$COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
++ KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $KDRIVE_XKB_DDX_LIB $XKB_LIB $KDRIVE_XKB_DDX_LIB $COMPOSITE_LIB $XPSTUBS_LIB $OS_LIB $CONFIG_LIB"
+ KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.a'
+ KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/tslib.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/tslib.c 2007-01-29 22:59:27.000000000 +0000
+@@ -94,7 +94,7 @@ TsRead (int fd, void *closure)
+ event.pressure);
+ discard = 0;
+ if (event.pressure) {
+- if (event.pressure > pi->dixdev->touchscreen->button_threshold)
++ if (event.pressure > pi->dixdev->absolute->button_threshold)
+ flags = KD_BUTTON_8;
+ else
+ flags = KD_BUTTON_1;
+@@ -356,9 +356,9 @@ TslibEnable (KdPointerInfo *pi)
+ close(private->fd);
+ return BadAlloc;
+ }
+- if (pi->dixdev && pi->dixdev->touchscreen &&
+- pi->dixdev->touchscreen->button_threshold == 0)
+- pi->dixdev->touchscreen->button_threshold = 115;
++ if (pi->dixdev && pi->dixdev->absolute &&
++ pi->dixdev->absolute->button_threshold == 0)
++ pi->dixdev->absolute->button_threshold = 115;
+
+ DebugF("[tslib/TslibEnable] successfully enabled %s\n", pi->path);
+ KdRegisterFd(private->fd, TsRead, pi);
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kinput.c 2007-01-29 22:58:18.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kinput.c 2007-01-29 22:59:27.000000000 +0000
+@@ -444,7 +444,7 @@ KdPointerProc(DeviceIntPtr pDevice, int
+
+ #ifdef XINPUT
+ if (pi->inputClass == KD_TOUCHSCREEN) {
+- InitTouchscreenClassDeviceStruct(pDevice);
++ InitAbsoluteClassDeviceStruct(pDevice);
+ xiclass = AtomFromName(XI_TOUCHSCREEN);
+ }
+ else {
+@@ -2323,8 +2323,8 @@ ChangeDeviceControl(register ClientPtr c
+ /* FIXME do something more intelligent here */
+ return BadMatch;
+
+- case DEVICE_TOUCHSCREEN:
+- if (!pDev->touchscreen)
++ case DEVICE_ABS_CALIB:
++ if (!pDev->absolute)
+ return BadDevice;
+ else
+ return Success;
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
new file mode 100644
index 0000000000..06eab817bd
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
@@ -0,0 +1,503 @@
+# Kdrive evdev support patch, posted by Ander Conselvan de Oliveira at
+# http://lists.freedesktop.org/archives/xorg/2005-December/011635.html
+---
+# hw/kdrive/linux/evdev.c | 385 ++++++++++++++++++++++++++++++++++++++++++++++--
+# hw/kdrive/src/kdrive.c | 9 +
+# hw/kdrive/src/kdrive.h | 4
+# 3 files changed, 386 insertions(+), 12 deletions(-)
+#
+Index: xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/evdev.c 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c 2007-01-25 22:05:48.000000000 +0000
+@@ -31,9 +31,11 @@
+ #include <X11/X.h>
+ #include <X11/Xproto.h>
+ #include <X11/Xpoll.h>
++#include <X11/keysym.h>
+ #include "inputstr.h"
+ #include "scrnintstr.h"
+ #include "kdrive.h"
++#include "kkeymap.h"
+
+ #define NUM_EVENTS 128
+ #define ABS_UNSET -65535
+@@ -107,9 +109,10 @@ EvdevRead (int evdevPort, void *closure)
+ {
+ KdPointerInfo *pi = closure;
+ Kevdev *ke = pi->driverPrivate;
+- int i;
++ int i, j;
+ struct input_event events[NUM_EVENTS];
+ int n;
++ int flags;
+
+ n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event));
+ if (n <= 0)
+@@ -117,22 +120,64 @@ EvdevRead (int evdevPort, void *closure)
+ n /= sizeof (struct input_event);
+ for (i = 0; i < n; i++)
+ {
++ flags = KD_MOUSE_DELTA | kdPointerInfo->buttonState;
+ switch (events[i].type) {
+ case EV_SYN:
+ break;
+ case EV_KEY:
+- EvdevMotion (pi);
+- ASSIGNBIT(ke->key,events[i].code, events[i].value);
+- if (events[i].code < 0x100)
+- ErrorF ("key %d %d\n", events[i].code, events[i].value);
+- else
+- ErrorF ("key 0x%x %d\n", events[i].code, events[i].value);
++ if (events[i].code >= BTN_MOUSE && events[i].code < BTN_JOYSTICK) {
++ switch (events[i].code) {
++ case BTN_LEFT:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_1;
++ else
++ flags &= ~KD_BUTTON_1;
++ break;
++ case BTN_MIDDLE:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_2;
++ else
++ flags &= ~KD_BUTTON_2;
++ break;
++ case BTN_RIGHT:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_3;
++ else
++ flags &= ~KD_BUTTON_3;
++ break;
++ default:
++ /* Unknow button */
++ break;
++ }
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++ }
+ break;
+ case EV_REL:
+- ke->rel[events[i].code] += events[i].value;
++ if (events[i].code == REL_X) {
++ KdEnqueueMouseEvent (kdMouseInfo, flags, events[i].value, 0);
++ }
++ else if (events[i].code == REL_Y) {
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, events[i].value);
++ }
++ else if (events[i].code == REL_WHEEL) {
++ for (j = 0; j < abs (events[i].value); j++) {
++ if (events[i].value > 0)
++ flags |= KD_BUTTON_4;
++ else
++ flags |= KD_BUTTON_5;
++
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++
++ if (events[i].value > 0)
++ flags &= ~KD_BUTTON_4;
++ else
++ flags &= ~KD_BUTTON_5;
++
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++ } /* events[i].code == REL_WHEEL */
++ }
+ break;
+ case EV_ABS:
+- ke->abs[events[i].code] = events[i].value;
+ break;
+ }
+ }
+@@ -162,6 +207,12 @@ EvdevInit (KdPointerInfo *pi)
+ for (i = 0; i < NUM_DEFAULT_EVDEV; i++) {
+ fd = open (kdefaultEvdev[i], 2);
+ if (fd >= 0) {
++ if (ioctl (fd, EVIOCGRAB, 1) < 0)
++ {
++ close (fd);
++ continue;
++ }
++
+ pi->path = KdSaveString (kdefaultEvdev[i]);
+ break;
+ }
+@@ -300,7 +351,319 @@ KdPointerDriver LinuxEvdevMouseDriver =
+ NULL,
+ };
+
+-#if 0
++/* Keyboard */
++
++int kbd_fd = -1;
++int EvdevInputType = 0;
++
++KeySym evdevKeymap[(194 - 1 + 1) * 2] = {
++/* These are directly mapped from DOS scanset 0 */
++/* 1 8 */ XK_Escape, NoSymbol,
++/* 2 9 */ XK_1, XK_exclam,
++/* 3 10 */ XK_2, XK_at,
++/* 4 11 */ XK_3, XK_numbersign,
++/* 5 12 */ XK_4, XK_dollar,
++/* 6 13 */ XK_5, XK_percent,
++/* 7 14 */ XK_6, XK_asciicircum,
++/* 8 15 */ XK_7, XK_ampersand,
++/* 9 16 */ XK_8, XK_asterisk,
++/* 10 17 */ XK_9, XK_parenleft,
++/* 11 18 */ XK_0, XK_parenright,
++/* 12 19 */ XK_minus, XK_underscore,
++/* 13 20 */ XK_equal, XK_plus,
++/* 14 21 */ XK_BackSpace, NoSymbol,
++/* 15 22 */ XK_Tab, NoSymbol,
++/* 16 23 */ XK_Q, NoSymbol,
++/* 17 24 */ XK_W, NoSymbol,
++/* 18 25 */ XK_E, NoSymbol,
++/* 19 26 */ XK_R, NoSymbol,
++/* 20 27 */ XK_T, NoSymbol,
++/* 21 28 */ XK_Y, NoSymbol,
++/* 22 29 */ XK_U, NoSymbol,
++/* 23 30 */ XK_I, NoSymbol,
++/* 24 31 */ XK_O, NoSymbol,
++/* 25 32 */ XK_P, NoSymbol,
++/* 26 33 */ XK_bracketleft, XK_braceleft,
++/* 27 34 */ XK_bracketright, XK_braceright,
++/* 28 35 */ XK_Return, NoSymbol,
++/* 29 36 */ XK_Control_L, NoSymbol,
++/* 30 37 */ XK_A, NoSymbol,
++/* 31 38 */ XK_S, NoSymbol,
++/* 32 39 */ XK_D, NoSymbol,
++/* 33 40 */ XK_F, NoSymbol,
++/* 34 41 */ XK_G, NoSymbol,
++/* 35 42 */ XK_H, NoSymbol,
++/* 36 43 */ XK_J, NoSymbol,
++/* 37 44 */ XK_K, NoSymbol,
++/* 38 45 */ XK_L, NoSymbol,
++/* 39 46 */ XK_semicolon, XK_colon,
++/* 40 47 */ XK_apostrophe, XK_quotedbl,
++/* 41 48 */ XK_grave, XK_asciitilde,
++/* 42 49 */ XK_Shift_L, NoSymbol,
++/* 43 50 */ XK_backslash, XK_bar,
++/* 44 51 */ XK_Z, NoSymbol,
++/* 45 52 */ XK_X, NoSymbol,
++/* 46 53 */ XK_C, NoSymbol,
++/* 47 54 */ XK_V, NoSymbol,
++/* 48 55 */ XK_B, NoSymbol,
++/* 49 56 */ XK_N, NoSymbol,
++/* 50 57 */ XK_M, NoSymbol,
++/* 51 58 */ XK_comma, XK_less,
++/* 52 59 */ XK_period, XK_greater,
++/* 53 60 */ XK_slash, XK_question,
++/* 54 61 */ XK_Shift_R, NoSymbol,
++/* 55 62 */ XK_KP_Multiply, NoSymbol,
++/* 56 63 */ XK_Alt_L, XK_Meta_L,
++/* 57 64 */ XK_space, NoSymbol,
++/* 58 65 */ XK_Caps_Lock, NoSymbol,
++/* 59 66 */ XK_F1, NoSymbol,
++/* 60 67 */ XK_F2, NoSymbol,
++/* 61 68 */ XK_F3, NoSymbol,
++/* 62 69 */ XK_F4, NoSymbol,
++/* 63 70 */ XK_F5, NoSymbol,
++/* 64 71 */ XK_F6, NoSymbol,
++/* 65 72 */ XK_F7, NoSymbol,
++/* 66 73 */ XK_F8, NoSymbol,
++/* 67 74 */ XK_F9, NoSymbol,
++/* 68 75 */ XK_F10, NoSymbol,
++/* 69 76 */ XK_Break, XK_Pause,
++/* 70 77 */ XK_Scroll_Lock, NoSymbol,
++/* 71 78 */ XK_KP_Home, XK_KP_7,
++/* 72 79 */ XK_KP_Up, XK_KP_8,
++/* 73 80 */ XK_KP_Page_Up, XK_KP_9,
++/* 74 81 */ XK_KP_Subtract, NoSymbol,
++/* 75 82 */ XK_KP_Left, XK_KP_4,
++/* 76 83 */ XK_KP_5, NoSymbol,
++/* 77 84 */ XK_KP_Right, XK_KP_6,
++/* 78 85 */ XK_KP_Add, NoSymbol,
++/* 79 86 */ XK_KP_End, XK_KP_1,
++/* 80 87 */ XK_KP_Down, XK_KP_2,
++/* 81 88 */ XK_KP_Page_Down, XK_KP_3,
++/* 82 89 */ XK_KP_Insert, XK_KP_0,
++/* 83 90 */ XK_KP_Delete, XK_KP_Decimal,
++/* 84 91 */ NoSymbol, NoSymbol,
++/* 85 92 */ NoSymbol, NoSymbol,
++/* 86 93 */ NoSymbol, NoSymbol,
++/* 87 94 */ XK_F11, NoSymbol,
++/* 88 95 */ XK_F12, NoSymbol,
++
++/* These are remapped from the extended set (using ExtendMap) */
++
++/* 89 96 */ XK_Control_R, NoSymbol,
++/* 90 97 */ XK_KP_Enter, NoSymbol,
++/* 91 98 */ XK_KP_Divide, NoSymbol,
++/* 92 99 */ XK_Sys_Req, XK_Print,
++/* 93 100 */ XK_Alt_R, XK_Meta_R,
++/* 94 101 */ XK_Num_Lock, NoSymbol,
++/* 95 102 */ XK_Home, NoSymbol,
++/* 96 103 */ XK_Up, NoSymbol,
++/* 97 104 */ XK_Page_Up, NoSymbol,
++/* 98 105 */ XK_Left, NoSymbol,
++/* 99 106 */ XK_Right, NoSymbol,
++/* 100 107 */ XK_End, NoSymbol,
++/* 101 108 */ XK_Down, NoSymbol,
++/* 102 109 */ XK_Page_Down, NoSymbol,
++/* 103 110 */ XK_Insert, NoSymbol,
++/* 104 111 */ XK_Delete, NoSymbol,
++/* 105 112 */ XK_Super_L, NoSymbol,
++/* 106 113 */ XK_Super_R, NoSymbol,
++/* 107 114 */ XK_Menu, NoSymbol,
++/* 108 115 */ NoSymbol, NoSymbol,
++/* 109 116 */ NoSymbol, NoSymbol,
++/* 110 117 */ NoSymbol, NoSymbol,
++/* 111 118 */ NoSymbol, NoSymbol,
++/* 112 119 */ NoSymbol, NoSymbol,
++
++/* 113 120 */ NoSymbol, NoSymbol,
++/* 114 121 */ NoSymbol, NoSymbol,
++/* 115 122 */ NoSymbol, NoSymbol,
++/* 116 123 */ NoSymbol, NoSymbol,
++/* 117 124 */ NoSymbol, NoSymbol,
++/* 118 125 */ NoSymbol, NoSymbol,
++/* 119 126 */ NoSymbol, NoSymbol,
++/* 120 127 */ NoSymbol, NoSymbol,
++/* 121 128 */ NoSymbol, NoSymbol,
++/* 122 129 */ NoSymbol, NoSymbol,
++/* 123 130 */ NoSymbol, NoSymbol,
++/* 124 131 */ NoSymbol, NoSymbol,
++/* 125 132 */ NoSymbol, NoSymbol,
++/* 126 133 */ NoSymbol, NoSymbol,
++/* 127 134 */ NoSymbol, NoSymbol,
++/* 128 135 */ NoSymbol, NoSymbol,
++/* 129 136 */ NoSymbol, NoSymbol,
++/* 130 137 */ NoSymbol, NoSymbol,
++/* 131 138 */ NoSymbol, NoSymbol,
++/* 132 139 */ NoSymbol, NoSymbol,
++/* 133 140 */ NoSymbol, NoSymbol,
++/* 134 141 */ NoSymbol, NoSymbol,
++/* 135 142 */ NoSymbol, NoSymbol,
++/* 136 143 */ NoSymbol, NoSymbol,
++/* 137 144 */ NoSymbol, NoSymbol,
++/* 138 145 */ NoSymbol, NoSymbol,
++/* 139 146 */ NoSymbol, NoSymbol,
++/* 140 147 */ NoSymbol, NoSymbol,
++/* 141 148 */ NoSymbol, NoSymbol,
++/* 142 149 */ NoSymbol, NoSymbol,
++/* 143 150 */ NoSymbol, NoSymbol,
++/* 144 151 */ NoSymbol, NoSymbol,
++/* 145 152 */ NoSymbol, NoSymbol,
++/* 146 153 */ NoSymbol, NoSymbol,
++/* 147 154 */ NoSymbol, NoSymbol,
++/* 148 155 */ NoSymbol, NoSymbol,
++/* 149 156 */ NoSymbol, NoSymbol,
++/* 150 157 */ NoSymbol, NoSymbol,
++/* 151 158 */ NoSymbol, NoSymbol,
++/* 152 159 */ NoSymbol, NoSymbol,
++/* 153 160 */ NoSymbol, NoSymbol,
++/* 154 161 */ NoSymbol, NoSymbol,
++/* 155 162 */ NoSymbol, NoSymbol,
++/* 156 163 */ NoSymbol, NoSymbol,
++/* 157 164 */ NoSymbol, NoSymbol,
++/* 158 165 */ NoSymbol, NoSymbol,
++/* 159 166 */ NoSymbol, NoSymbol,
++/* 160 167 */ NoSymbol, NoSymbol,
++/* 161 168 */ NoSymbol, NoSymbol,
++/* 162 169 */ NoSymbol, NoSymbol,
++/* 163 170 */ NoSymbol, NoSymbol,
++/* 164 171 */ NoSymbol, NoSymbol,
++/* 165 172 */ NoSymbol, NoSymbol,
++/* 166 173 */ NoSymbol, NoSymbol,
++/* 167 174 */ NoSymbol, NoSymbol,
++/* 168 175 */ NoSymbol, NoSymbol,
++/* 169 176 */ NoSymbol, NoSymbol,
++/* 170 177 */ NoSymbol, NoSymbol,
++/* 171 178 */ NoSymbol, NoSymbol,
++/* 172 179 */ NoSymbol, NoSymbol,
++/* 173 180 */ NoSymbol, NoSymbol,
++/* 174 181 */ NoSymbol, NoSymbol,
++/* 175 182 */ NoSymbol, NoSymbol,
++/* 176 183 */ NoSymbol, NoSymbol,
++/* 177 184 */ NoSymbol, NoSymbol,
++/* 178 185 */ NoSymbol, NoSymbol,
++/* 179 186 */ NoSymbol, NoSymbol,
++/* 180 187 */ NoSymbol, NoSymbol,
++/* 181 188 */ NoSymbol, NoSymbol,
++/* 182 189 */ NoSymbol, NoSymbol,
++/* 183 190 */ NoSymbol, NoSymbol,
++/* 184 191 */ NoSymbol, NoSymbol,
++/* 185 192 */ NoSymbol, NoSymbol,
++/* 186 193 */ NoSymbol, NoSymbol,
++/* 187 194 */ NoSymbol, NoSymbol,
++/* 188 195 */ NoSymbol, NoSymbol,
++/* 189 196 */ NoSymbol, NoSymbol,
++/* 190 197 */ NoSymbol, NoSymbol,
++/* 191 198 */ NoSymbol, NoSymbol,
++/* 192 199 */ NoSymbol, NoSymbol,
++/* 193 200 */ NoSymbol, NoSymbol,
++/* 194 201 */ NoSymbol, NoSymbol,
++};
++
++static void
++EvdevKbdRead (int fd, void *closure)
++{
++ int i, n;
++ struct input_event events[NUM_EVENTS];
++
++ n = read (fd, &events, NUM_EVENTS * sizeof (struct input_event));
++ if (n <= 0)
++ return;
++
++ n /= sizeof (struct input_event);
++
++ for (i = 0; i < n; i++)
++ {
++ if (events[i].type == EV_KEY)
++ KdEnqueueKeyboardEvent (events[i].code, !events[i].value);
++ }
++}
++
++static void
++EvdevKbdLoad (void)
++{
++ kdMinScanCode = 0;
++ kdMaxScanCode = 193;
++ kdKeymapWidth = 2;
++ memcpy (kdKeymap, evdevKeymap, sizeof (evdevKeymap));
++}
++
++static int
++EvdevKbdInit (void)
++{
++ int fd, i;
++
++ if (!EvdevInputType)
++ EvdevInputType = KdAllocInputType ();
++
++ if (!kdKeyboard)
++ {
++ for (i = 0; i < NUM_DEFAULT_EVDEV; i++)
++ {
++ fd = open (kdefaultEvdev[i], 2);
++ if (fd >= 0)
++ {
++ kdKeyboard = KdSaveString (kdefaultEvdev[i]);
++ break;
++ }
++ }
++ }
++ else
++ {
++ fd = open (kdKeyboard, O_RDWR);
++ if (fd < 0)
++ return FALSE;
++ }
++
++ if (ioctl (fd, EVIOCGRAB, 1) < 0)
++ {
++ close (fd);
++ return FALSE;
++ }
++
++ if (!KdRegisterFd (EvdevInputType, fd, EvdevKbdRead, NULL))
++ return FALSE;
++
++ kbd_fd = fd;
++ return TRUE;
++}
++
++static void
++EvdevKbdFini (void)
++{
++}
++
++static void
++EvdevKbdLeds (int leds)
++{
++ struct input_event event;
++
++ memset(&event, 0, sizeof(event));
++
++ event.type = EV_LED;
++ event.code = LED_CAPSL;
++ event.value = leds & (1 << 0) ? 1 : 0;
++ write(kbd_fd, (char *) &event, sizeof(event));
++
++ event.type = EV_LED;
++ event.code = LED_NUML;
++ event.value = leds & (1 << 1) ? 1 : 0;
++ write(kbd_fd, (char *) &event, sizeof(event));
++
++ event.type = EV_LED;
++ event.code = LED_SCROLLL;
++ event.value = leds & (1 << 2) ? 1 : 0;
++ write(kbd_fd, (char *) &event, sizeof(event));
++
++ event.type = EV_LED;
++ event.code = LED_COMPOSE;
++ event.value = leds & (1 << 3) ? 1 : 0;
++ write(kbd_fd, (char *) &event, sizeof(event));
++}
++
++static void
++EvdevKbdBell (int volume, int frequency, int duration)
++{
++}
++
+ KdKeyboardFuncs LinuxEvdevKeyboardFuncs = {
+ EvdevKbdLoad,
+ EvdevKbdInit,
+@@ -309,4 +672,4 @@ KdKeyboardFuncs LinuxEvdevKeyboardFuncs
+ EvdevKbdFini,
+ 0,
+ };
+-#endif
++
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kdrive.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kdrive.c 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kdrive.c 2007-01-25 21:56:32.000000000 +0000
+@@ -80,6 +80,7 @@ Bool kdDontZap;
+ Bool kdEnabled;
+ int kdSubpixelOrder;
+ int kdVirtualTerminal = -1;
++char *kdKeyboard = 0;
+ Bool kdSwitchPending;
+ char *kdSwitchCmd;
+ DDXPointRec kdOrigin;
+@@ -707,6 +708,14 @@ KdProcessArgument (int argc, char **argv
+ UseMsg ();
+ return 2;
+ }
++ if (!strcmp (argv[i], "-keyboard"))
++ {
++ if ((i+1) < argc)
++ kdKeyboard = argv[i+1];
++ else
++ UseMsg ();
++ return 2;
++ }
+ if (!strcmp (argv[i], "-rgba"))
+ {
+ if ((i+1) < argc)
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kdrive.h 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h 2007-01-25 21:58:26.000000000 +0000
+@@ -512,6 +512,7 @@ extern Bool kdEmulateMiddleButton;
+ extern Bool kdDisableZaphod;
+ extern Bool kdDontZap;
+ extern int kdVirtualTerminal;
++extern char *kdKeyboard;
+ extern char *kdSwitchCmd;
+ extern KdOsFuncs *kdOsFuncs;
+
+@@ -875,12 +876,13 @@ void
+ ProcessInputEvents (void);
+
+ extern KdPointerDriver LinuxMouseDriver;
+-extern KdPointerDriver LinuxEvdevDriver;
++extern KdPointerDriver LinuxEvdevMouseFuncs;
+ extern KdPointerDriver Ps2MouseDriver;
+ extern KdPointerDriver BusMouseDriver;
+ extern KdPointerDriver MsMouseDriver;
+ extern KdPointerDriver TsDriver;
+ extern KdKeyboardDriver LinuxKeyboardDriver;
++extern KdKeyboardFuncs LinuxEvdevKeyboardFuncs;
+ extern KdOsFuncs LinuxFuncs;
+
+ extern KdPointerDriver VxWorksMouseDriver;
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-use-evdev.patch b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-use-evdev.patch
new file mode 100644
index 0000000000..d4f885ee26
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-use-evdev.patch
@@ -0,0 +1,53 @@
+--- xserver/hw/kdrive/fbdev/fbinit.c~ 2006-01-31 17:09:33.000000000 +0100
++++ xserver/hw/kdrive/fbdev/fbinit.c 2006-01-31 17:11:55.000000000 +0100
+@@ -28,6 +28,8 @@
+ #endif
+ #include <fbdev.h>
+
++extern int use_evdev;
++
+ void
+ InitCard (char *name)
+ {
+@@ -45,7 +47,10 @@
+ void
+ InitInput (int argc, char **argv)
+ {
+- KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
++ if (use_evdev)
++ KdInitInput (&LinuxEvdevMouseFuncs, &LinuxEvdevKeyboardFuncs);
++ else
++ KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+ #ifdef TOUCHSCREEN
+ KdAddMouseDriver (&TsFuncs);
+ #endif
+--- xserver/hw/kdrive/src/kdrive.c.orig 2006-01-31 17:13:28.000000000 +0100
++++ xserver/hw/kdrive/src/kdrive.c 2006-01-31 17:15:28.000000000 +0100
+@@ -44,6 +44,8 @@
+ #include "dpmsproc.h"
+ #endif
+
++int use_evdev = 0;
++
+ typedef struct _kdDepths {
+ CARD8 depth;
+ CARD8 bpp;
+@@ -687,6 +689,7 @@
+ ErrorF("-videoTest Start the server, pause momentarily and exit\n");
+ ErrorF("-origin X,Y Locates the next screen in the the virtual screen (Xinerama)\n");
+ ErrorF("-mouse path[,n] Filename of mouse device, n is number of buttons\n");
++ ErrorF("-use-evdev Use Linux evdev input\n");
+ ErrorF("-switchCmd Command to execute on vt switch\n");
+ ErrorF("-nozap Don't terminate server on Ctrl+Alt+Backspace\n");
+ ErrorF("vtxx Use virtual terminal xx instead of the next available\n");
+@@ -796,6 +799,10 @@
+ UseMsg ();
+ return 2;
+ }
++ if (!strcmp (argv[i], "-use-evdev"))
++ {
++ use_evdev = 1;
++ }
+ if (!strcmp (argv[i], "-keyboard"))
+ {
+ if ((i+1) < argc)
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/kmode.patch b/packages/xorg-xserver/xserver-kdrive-xomap/kmode.patch
new file mode 100644
index 0000000000..23a0f7eae8
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/kmode.patch
@@ -0,0 +1,43 @@
+---
+ hw/kdrive/src/kmode.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kmode.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kmode.c 2007-01-25 23:53:59.000000000 +0000
++++ xorg-server-1.1.99.3/hw/kdrive/src/kmode.c 2007-01-27 17:17:09.000000000 +0000
+@@ -41,6 +41,11 @@ const KdMonitorTiming kdMonitorTimings[
+ 1, 11, 14, KdSyncNegative,
+ },
+
++ { 240, 320, 64, 0,
++ 0, 0, 0, KdSyncNegative,
++ 0, 0, 0, KdSyncNegative,
++ },
++
+ /* Other VESA modes */
+ { 640, 350, 85, 31500, /* VESA */
+ 32, 96, 192, KdSyncPositive, /* 26.413 */
+@@ -80,6 +85,22 @@ const KdMonitorTiming kdMonitorTimings[
+ 16, 48, 160, KdSyncNegative, /* 31.469 */
+ 10, 33, 45, KdSyncNegative, /* 59.940 */
+ },
++
++
++ { 480, 640, 60, 0,
++ 0, 0, 0, KdSyncNegative,
++ 0, 0, 0, KdSyncNegative,
++ },
++
++ { 800, 480, 51, 0,
++ 0, 0, 0, KdSyncNegative,
++ 0, 0, 0, KdSyncNegative,
++ },
++
++ { 480, 800, 51, 0,
++ 0, 0, 0, KdSyncNegative,
++ 0, 0, 0, KdSyncNegative,
++ },
+
+ /* 800x600 modes */
+ { 800, 600, 85, 56250, /* VESA */
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/no-serial-probing.patch b/packages/xorg-xserver/xserver-kdrive-xomap/no-serial-probing.patch
new file mode 100644
index 0000000000..35ccadaa8d
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/no-serial-probing.patch
@@ -0,0 +1,13 @@
+--- xserver/hw/kdrive/linux/mouse.c.orig 2004-05-13 14:25:51.000000000 -0700
++++ xserver/hw/kdrive/linux/mouse.c 2005-09-22 12:20:47.000000000 -0700
+@@ -927,8 +927,10 @@ char *kdefaultMouse[] = {
+ "/dev/psaux",
+ "/dev/input/mice",
+ "/dev/adbmouse",
++#ifdef BREAK_MY_SERIAL_CONSOLE
+ "/dev/ttyS0",
+ "/dev/ttyS1",
++#endif
+ };
+
+ #define NUM_DEFAULT_MOUSE (sizeof (kdefaultMouse) / sizeof (kdefaultMouse[0]))
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/optional-xkb.patch b/packages/xorg-xserver/xserver-kdrive-xomap/optional-xkb.patch
new file mode 100644
index 0000000000..d9ef51c5ba
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/optional-xkb.patch
@@ -0,0 +1,54 @@
+--- git/Makefile.am.orig 2006-06-09 16:01:51.000000000 +0200
++++ git/Makefile.am 2006-06-09 16:02:59.000000000 +0200
+@@ -35,6 +35,10 @@
+ XINPUT_DIR=Xi
+ endif
+
++if XKB
++XKB_DIR=xkb
++endif
++
+ if DBE
+ DBE_DIR=dbe
+ endif
+@@ -51,7 +55,7 @@
+ randr \
+ render \
+ $(XINPUT_DIR) \
+- xkb \
++ $(XKB_DIR) \
+ $(DBE_DIR) \
+ $(MFB_DIR) \
+ $(AFB_DIR) \
+--- git/configure.ac.orig 2006-05-22 22:40:00.000000000 +0200
++++ git/configure.ac 2006-06-10 15:10:14.000000000 +0200
+@@ -418,6 +418,7 @@
+ AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--disable-xf86bigfont], [Build XF86 Big Font extension (default: enabled)]), [XF86BIGFONT=$enableval], [XF86BIGFONT=yes])
+ AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMS=$enableval], [DPMSExtension=yes])
+ AC_ARG_ENABLE(xinput, AS_HELP_STRING([--disable-xinput], [Build XInput Extension (default: enabled)]), [XINPUT=$enableval], [XINPUT=yes])
++AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Build XKB (default: enabled)]), [XKB=$enableval], [XKB=yes])
+
+ dnl DDXes.
+ AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
+@@ -739,12 +740,15 @@
+
+ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
+
+-AC_DEFINE(XKB, 1, [Build XKB])
+-AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
+-AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
+-REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
+-XKB_LIB='$(top_builddir)/xkb/libxkb.la'
+-XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++AM_CONDITIONAL(XKB, [test "x$XKB" = xyes])
++if test "x$XKB" = xyes; then
++ AC_DEFINE(XKB, 1, [Build XKB])
++ AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
++ AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
++ REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
++ XKB_LIB='$(top_builddir)/xkb/libxkb.la'
++ XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++fi
+
+ AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
+ [Do not have `strcasecmp'.]))
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate.patch b/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate.patch
new file mode 100644
index 0000000000..2a10f13d40
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate.patch
@@ -0,0 +1,73 @@
+---
+ Xext/Makefile.am | 5
+ Xext/xcalibrate.c | 262 +++++++++++++++++++++++++++++++++++++++++++++
+ configure.ac | 8 +
+ include/kdrive-config.h.in | 3
+ mi/miinitext.c | 6 +
+ 5 files changed, 283 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.1.99.3/mi/miinitext.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/mi/miinitext.c 2006-11-03 14:49:06.000000000 +0000
++++ xorg-server-1.1.99.3/mi/miinitext.c 2007-01-27 17:59:40.000000000 +0000
+@@ -368,6 +368,9 @@ extern void ResExtensionInit(INITARGS);
+ #ifdef DMXEXT
+ extern void DMXExtensionInit(INITARGS);
+ #endif
++#ifdef XCALIBRATE
++extern void XCalibrateExtensionInit(INITARGS);
++#endif
+ #ifdef XEVIE
+ extern void XevieExtensionInit(INITARGS);
+ #endif
+@@ -662,6 +665,9 @@ InitExtensions(argc, argv)
+ #ifdef XSP
+ if (!noXspExtension) XSPExtensionInit();
+ #endif
++#ifdef XCALIBRATE
++ XCalibrateExtensionInit ();
++#endif
+ }
+
+ void
+Index: xorg-server-1.1.99.3/configure.ac
+===================================================================
+--- xorg-server-1.1.99.3.orig/configure.ac 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/configure.ac 2007-01-29 22:58:18.000000000 +0000
+@@ -1584,7 +1590,7 @@ if test "$KDRIVE" = yes; then
+ KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.a'
+ KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+- KDRIVE_LIBS="$XSERVERLIBS_LIBS $DIX_LIB $XSP_LIB $KDRIVE_LIB $TSLIB_LIBS $KDRIVE_OS_LIB $KDRIVE_PURE_LIBS $KDRIVE_STUB_LIB"
++ KDRIVE_LIBS="$XSERVERLIBS_LIBS $DIX_LIB $XSP_LIB $KDRIVE_LIB $TSLIB_LIBS $KDRIVE_PURE_LIBS $KDRIVE_OS_LIB $KDRIVE_STUB_LIB"
+
+ # check if we can build Xephyr
+ PKG_CHECK_MODULES(XEPHYR, x11 xext xfont xau xdmcp, [xephyr="yes"], [xephyr="no"])
+Index: xorg-server-1.1.99.3/include/kdrive-config.h.in
+===================================================================
+--- xorg-server-1.1.99.3.orig/include/kdrive-config.h.in 2006-11-03 14:49:06.000000000 +0000
++++ xorg-server-1.1.99.3/include/kdrive-config.h.in 2007-01-27 17:59:40.000000000 +0000
+@@ -28,4 +28,7 @@
+ /* Have the backtrace() functiln. */
+ #undef HAVE_BACKTRACE
+
++/* Enable XCalibrate extension */
++#undef XCALIBRATE
++
+ #endif /* _KDRIVE_CONFIG_H_ */
+Index: xorg-server-1.1.99.3/Xext/Makefile.am
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xext/Makefile.am 2006-11-03 14:49:05.000000000 +0000
++++ xorg-server-1.1.99.3/Xext/Makefile.am 2007-01-29 22:58:33.000000000 +0000
+@@ -81,6 +81,11 @@ BUILTIN_SRCS += $(XCALIBRATE_SRCS)
+ # XCalibrare needs tslib
+ endif
+
++XCALIBRATE_SRCS = xcalibrate.c
++if XCALIBRATE
++BUILTIN_SRCS += $(XCALIBRATE_SRCS)
++endif
++
+ # X EVent Interception Extension: allows accessibility helpers & composite
+ # managers to intercept events from input devices and transform as needed
+ # before the clients see them.
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate_coords.patch b/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate_coords.patch
new file mode 100644
index 0000000000..fbe89b16b1
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/xcalibrate_coords.patch
@@ -0,0 +1,122 @@
+---
+ Xext/xcalibrate.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
+ hw/kdrive/src/kdrive.h | 3 +++
+ hw/kdrive/src/kinput.c | 12 ++++++++++++
+ 3 files changed, 61 insertions(+), 1 deletion(-)
+
+Index: xorg-server-1.1.99.3/Xext/xcalibrate.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/Xext/xcalibrate.c 2007-06-30 16:27:13.000000000 +0100
++++ xorg-server-1.1.99.3/Xext/xcalibrate.c 2007-06-30 16:27:15.000000000 +0100
+@@ -166,7 +166,6 @@ ProcXCalibrateSetRawMode (ClientPtr clie
+ return (client->noClientException);
+ }
+
+-
+ static int
+ SProcXCalibrateSetRawMode (ClientPtr client)
+ {
+@@ -180,6 +179,47 @@ SProcXCalibrateSetRawMode (ClientPtr cli
+ return ProcXCalibrateSetRawMode(client);
+ }
+
++static int
++ProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ xXCalibrateScreenToCoordReply rep;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ memset (&rep, 0, sizeof (rep));
++ rep.type = X_Reply;
++ rep.sequenceNumber = client->sequence;
++ rep.x = stuff->x;
++ rep.y = stuff->y;
++
++ KdScreenToMouseCoords(&rep.x, &rep.y);
++
++ if (client->swapped)
++ {
++ int n;
++
++ swaps (&rep.x, n);
++ swaps (&rep.y, n);
++ }
++ WriteToClient(client, sizeof (rep), (char *) &rep);
++ return (client->noClientException);
++}
++
++static int
++SProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ int n;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ swaps(&stuff->x, n);
++ swaps(&stuff->y, n);
++
++ return ProcXCalibrateScreenToCoord(client);
++}
++
+ static void
+ XCalibrateResetProc (ExtensionEntry *extEntry)
+ {
+@@ -194,6 +234,9 @@ ProcXCalibrateDispatch (ClientPtr client
+ return ProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return ProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return ProcXCalibrateScreenToCoord(client);
++
+ default: break;
+ }
+
+@@ -213,6 +256,8 @@ SProcXCalibrateDispatch (ClientPtr clien
+ return SProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return SProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return SProcXCalibrateScreenToCoord(client);
+
+ default: break;
+ }
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kdrive.h 2007-06-30 16:27:13.000000000 +0100
++++ xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h 2007-06-30 16:30:40.000000000 +0100
+@@ -851,6 +851,9 @@ void
+ KdSetPointerMatrix (KdPointerMatrix *pointer);
+
+ void
++KdScreenToMouseCoords (int *x, int *y);
++
++void
+ KdComputePointerMatrix (KdPointerMatrix *pointer, Rotation randr, int width, int height);
+
+ void
+Index: xorg-server-1.1.99.3/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kinput.c 2007-06-30 16:27:14.000000000 +0100
++++ xorg-server-1.1.99.3/hw/kdrive/src/kinput.c 2007-06-30 16:30:16.000000000 +0100
+@@ -570,6 +570,18 @@ KdSetPointerMatrix (KdPointerMatrix *mat
+ }
+
+ void
++KdScreenToMouseCoords (int *x, int *y)
++{
++ int (*m)[3] = kdPointerMatrix.matrix;
++ int div = m[0][1] * m[1][0] - m[1][1] * m[0][0];
++ int sx = *x;
++ int sy = *y;
++
++ *x = (m[0][1] * sy - m[0][1] * m[1][2] + m[1][1] * m[0][2] - m[1][1] * sx) / div;
++ *y = (m[1][0] * sx + m[0][0] * m[1][2] - m[1][0] * m[0][2] - m[0][0] * sy) / div;
++}
++
++void
+ KdComputePointerMatrix (KdPointerMatrix *m, Rotation randr, int width,
+ int height)
+ {
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap/xfbdev-fb-opt.patch b/packages/xorg-xserver/xserver-kdrive-xomap/xfbdev-fb-opt.patch
new file mode 100644
index 0000000000..a8f002ea2a
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap/xfbdev-fb-opt.patch
@@ -0,0 +1,82 @@
+---
+ hw/kdrive/fbdev/fbdev.c | 17 ++++++++++++-----
+ hw/kdrive/fbdev/fbdev.h | 1 +
+ hw/kdrive/fbdev/fbinit.c | 20 ++++++++++++++++----
+ 3 files changed, 29 insertions(+), 9 deletions(-)
+
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbdev.c
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbdev.c
+@@ -33,16 +33,23 @@
+
+ extern int KdTsPhyScreen;
+
++char *fbdevDevicePath = NULL;
+ Bool
+ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv)
+ {
+ int k;
+ unsigned long off;
+- if ((priv->fd = open("/dev/fb0", O_RDWR)) < 0 && \
+- (priv->fd = open("/dev/fb/0", O_RDWR)) < 0) {
+- perror("Error opening /dev/fb0");
+- return FALSE;
+- }
++
++ if (fbdevDevicePath == NULL)
++ fbdevDevicePath = "/dev/fb0";
++
++ if ((priv->fd = open(fbdevDevicePath, O_RDWR)) < 0)
++ {
++ ErrorF("Error opening framebuffer %s: %s\n",
++ fbdevDevicePath, strerror(errno));
++ return FALSE;
++ }
++
+ /* quiet valgrind */
+ memset (&priv->fix, '\0', sizeof (priv->fix));
+ if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0) {
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbdev.h
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbdev.h
+@@ -53,6 +53,7 @@ typedef struct _fbdevScrPriv {
+ } FbdevScrPriv;
+
+ extern KdCardFuncs fbdevFuncs;
++extern char* fbdevDevicePath;
+
+ Bool
+ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv);
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbinit.c
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbinit.c
+@@ -59,16 +59,28 @@ InitInput (int argc, char **argv)
+ void
+ ddxUseMsg (void)
+ {
+- KdUseMsg();
++ KdUseMsg();
++ ErrorF("\nXfbdev Device Usage:\n");
++ ErrorF("-fb path Framebuffer device to use. Defaults to /dev/fb0\n");
++ ErrorF("\n");
+ }
+
+ int
+ ddxProcessArgument (int argc, char **argv, int i)
+ {
+- return KdProcessArgument (argc, argv, i);
+-}
+-
++ if (!strcmp (argv[i], "-fb"))
++ {
++ if (i+1 < argc)
++ {
++ fbdevDevicePath = argv[i+1];
++ return 2;
++ }
++ UseMsg();
++ exit(1);
++ }
+
++ return KdProcessArgument (argc, argv, i);
++}
+
+ KdCardFuncs fbdevFuncs = {
+ fbdevCardInit, /* cardinit */
diff --git a/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb b/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb
new file mode 100644
index 0000000000..372971e2ed
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-xomap_1.1.99.3.bb
@@ -0,0 +1,51 @@
+LICENSE = "MIT"
+DEPENDS = "tslib xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto calibrateproto recordproto videoproto scrnsaverproto xpext xsp libxkbfile dbus"
+
+PROVIDES = "virtual/xserver"
+PACKAGES =+ "xserver-kdrive-xomap"
+SECTION = "x11/base"
+DESCRIPTION = "X server from freedesktop.org"
+DESCRIPTION_xserver-kdrive-xomap = "X server for the OMAP in the Nokia 800"
+
+PE = "1"
+
+COMPATIBLE_MACHINE = "nokia(800|770)"
+
+FILES_${PN} = "${libdir}/xserver /etc/dbus-1/* ${bindir}/Xomap"
+
+SRC_URI = "http://repository.maemo.org/pool/maemo3.1/free/source/xorg-server_1.1.99.3-0osso31.tar.gz \
+ file://kmode.patch;patch=1 \
+ file://disable-apm.patch;patch=1 \
+ file://no-serial-probing.patch;patch=1 \
+ file://fbdev-not-fix.patch;patch=1 \
+ file://enable-builtin-fonts.patch;patch=1 \
+ file://xcalibrate.patch;patch=1 \
+ file://fixups.patch;patch=1 \
+ file://button_only.patch;patch=1 \
+ file://calibrateext.patch;patch=1 \
+ file://xcalibrate_coords.patch;patch=1"
+# file://kdrive-evdev.patch;patch=1 \
+# file://kdrive-use-evdev.patch;patch=1 \
+# file://optional-xkb.patch;patch=1 \
+# file://disable-xf86-dga-xorgcfg.patch;patch=1 \
+# file://enable-tslib.patch;patch=1 \
+# file://xfbdev-fb-opt.patch;patch=1"
+
+S = "${WORKDIR}/xorg-server-1.1.99.3"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-composite --enable-kdrive --enable-builtin-fonts \
+ --disable-dga --disable-dri --disable-xinerama \
+ --disable-xf86misc --disable-xf86vidmode \
+ --disable-xorg --disable-xorgcfg \
+ --disable-dmx --enable-xcalibrate \
+ --disable-xkb --disable-xnest --disable-xvfb \
+ --disable-xevie --disable-xprint --disable-xtrap \
+ --with-default-font-path=built-ins \
+ ac_cv_file__usr_share_X11_sgml_defs_ent=no \
+ --enable-xomap"
+
+do_configure_prepend() {
+ sed -i -e 's/tslib-0.0/tslib-1.0/' ${S}/configure.ac
+}
diff --git a/packages/xorg-xserver/xserver-kdrive/build-20050207-against-X11R7.diff b/packages/xorg-xserver/xserver-kdrive/build-20050207-against-X11R7.diff
deleted file mode 100644
index 596e498b80..0000000000
--- a/packages/xorg-xserver/xserver-kdrive/build-20050207-against-X11R7.diff
+++ /dev/null
@@ -1,464 +0,0 @@
---- xserver.orig/configure.ac 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/configure.ac 2006-03-11 16:46:51.000000000 +0100
-@@ -79,7 +79,7 @@
- # tslib touchscreen driver
- AC_CHECK_HEADERS([tslib.h])
-
--REQUIRED_MODULES="randr render fixesext damageext xextensions xfont xproto xtrans xau"
-+REQUIRED_MODULES="randrproto renderproto fixesproto damageproto xextproto xfont xproto xtrans xau"
-
- DEFAULT_FONT_PATH="/usr/lib/X11/fonts/misc,/usr/lib/X11/fonts/100dpi,/usr/lib/X11/fonts/75dpi"
- DEFAULT_VENDOR_STRING="freedesktop.org"
---- xserver.orig/dix/dispatch.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/dix/dispatch.c 2006-03-11 16:30:59.000000000 +0100
-@@ -79,7 +79,6 @@
- #endif
-
- #include "windowstr.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "gcstruct.h"
- #include "selection.h"
---- xserver.orig/dix/glyphcurs.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/dix/glyphcurs.c 2006-03-11 16:31:57.000000000 +0100
-@@ -51,7 +51,6 @@
- #include <config.h>
- #endif
- #include "misc.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "scrnintstr.h"
- #include "gcstruct.h"
---- xserver.orig/dix/main.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/dix/main.c 2006-03-11 16:32:05.000000000 +0100
-@@ -89,7 +89,6 @@
- #include "colormap.h"
- #include "colormapst.h"
- #include "cursorstr.h"
--#include "font.h"
- #include "opaque.h"
- #include "servermd.h"
- #include "site.h"
---- xserver.orig/dix/swaprep.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/dix/swaprep.c 2006-03-11 16:32:24.000000000 +0100
-@@ -57,7 +57,7 @@
- #include <X11/Xproto.h>
- #include "misc.h"
- #include "dixstruct.h"
--#include "fontstruct.h"
-+#include "dixfont.h"
- #include "scrnintstr.h"
- #include "swaprep.h"
- #include "globals.h"
---- xserver.orig/dix/xpstubs.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/dix/xpstubs.c 2006-03-11 16:32:34.000000000 +0100
-@@ -31,7 +31,7 @@
- #include <config.h>
- #endif
- #include "misc.h"
--#include "font.h"
-+#include "dixfont.h"
-
- Bool
- XpClientIsBitmapClient(ClientPtr client)
---- xserver.orig/fb/fbglyph.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/fb/fbglyph.c 2006-03-11 16:52:01.000000000 +0100
-@@ -26,7 +26,6 @@
- #include <config.h>
- #endif
- #include "fb.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
-
- Bool
---- xserver.orig/hw/kdrive/epson/epson13806draw.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/hw/kdrive/epson/epson13806draw.c 2006-03-11 16:34:56.000000000 +0100
-@@ -38,7 +38,6 @@
- #include "pixmapstr.h"
- #include "regionstr.h"
- #include "mistruct.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "fb.h"
- #include "migc.h"
---- xserver.orig/hw/kdrive/i810/i810draw.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/hw/kdrive/i810/i810draw.c 2006-03-11 16:34:41.000000000 +0100
-@@ -51,7 +51,6 @@
- #include "pixmapstr.h"
- #include "regionstr.h"
- #include "mistruct.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "fb.h"
- #include "migc.h"
---- xserver.orig/hw/kdrive/src/kaa.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/hw/kdrive/src/kaa.c 2006-03-11 16:35:39.000000000 +0100
-@@ -29,7 +29,6 @@
- #endif
- #include "kdrive.h"
- #include "kaa.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
-
- #define DEBUG_MIGRATE 0
---- xserver.orig/include/dixfont.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/include/dixfont.h 2006-03-11 16:43:25.000000000 +0100
-@@ -27,10 +27,10 @@
- #define DIXFONT_H 1
-
- #include "dix.h"
--#include "font.h"
--#include "fontconf.h"
-+#include <X11/fonts/font.h>
-+#include <X11/fonts/fontconf.h>
- #include "closure.h"
--#include "fontstruct.h"
-+#include <X11/fonts/fontstruct.h>
-
- #define NullDIXFontProp ((DIXFontPropPtr)0)
-
---- xserver.orig/include/dixfontstr.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/include/dixfontstr.h 2006-03-11 16:43:31.000000000 +0100
-@@ -27,7 +27,6 @@
-
- #include "servermd.h"
- #include "dixfont.h"
--#include "fontstruct.h"
- #include "closure.h"
- #define NEED_REPLIES
- #include "X11/Xproto.h" /* for xQueryFontReply */
---- xserver.orig/mi/mibstore.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/mibstore.c 2006-03-11 16:36:26.000000000 +0100
-@@ -57,7 +57,6 @@
- #include "gcstruct.h"
- #include "windowstr.h"
- #include "pixmapstr.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "dixstruct.h" /* For requestingClient */
- #include "mi.h"
---- xserver.orig/mi/miglblt.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/miglblt.c 2006-03-11 16:53:52.000000000 +0100
-@@ -55,7 +55,6 @@
- #include <X11/Xmd.h>
- #include <X11/Xproto.h>
- #include "misc.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "gcstruct.h"
- #include "windowstr.h"
---- xserver.orig/mi/mi.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/mi.h 2006-03-11 16:36:16.000000000 +0100
-@@ -54,7 +54,7 @@
- #include "validate.h"
- #include "window.h"
- #include "gc.h"
--#include "font.h"
-+#include "dixfont.h"
- #include "input.h"
- #include "cursor.h"
-
---- xserver.orig/mi/miinitext.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/miinitext.c 2006-03-11 16:36:41.000000000 +0100
-@@ -54,6 +54,8 @@
- #include "extension.h"
- #include "micmap.h"
- #include "xext.h"
-+#include "pixmap.h"
-+#include "gc.h"
-
- #ifdef NOPEXEXT /* sleaze for Solaris cpp building XsunMono */
- #undef PEXEXT
---- xserver.orig/mi/mipolytext.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/mipolytext.c 2006-03-11 16:36:48.000000000 +0100
-@@ -63,7 +63,6 @@
- #include <X11/Xproto.h>
- #include "misc.h"
- #include "gcstruct.h"
--#include "fontstruct.h"
- #include "dixfontstr.h"
- #include "mi.h"
-
---- xserver.orig/mi/misprite.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/mi/misprite.c 2006-03-11 16:37:00.000000000 +0100
-@@ -42,7 +42,6 @@
- # include "input.h"
- # include "mi.h"
- # include "cursorstr.h"
--# include "font.h"
- # include "scrnintstr.h"
- # include "colormapst.h"
- # include "windowstr.h"
-@@ -50,7 +49,6 @@
- # include "mipointer.h"
- # include "mispritest.h"
- # include "dixfontstr.h"
--# include "fontstruct.h"
- #ifdef RENDER
- # include "mipict.h"
- #endif
---- xserver.orig/miext/damage/damage.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/damage/damage.c 2006-03-11 16:37:17.000000000 +0100
-@@ -28,9 +28,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shadow.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shadow.c 2006-03-11 16:38:13.000000000 +0100
-@@ -29,9 +29,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shalloc.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shalloc.c 2006-03-11 16:38:25.000000000 +0100
-@@ -29,9 +29,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shpacked.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shpacked.c 2006-03-11 16:38:33.000000000 +0100
-@@ -28,9 +28,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shplanar8.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shplanar8.c 2006-03-11 16:38:44.000000000 +0100
-@@ -28,9 +28,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shplanar.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shplanar.c 2006-03-11 16:38:39.000000000 +0100
-@@ -28,9 +28,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shrotate.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shrotate.c 2006-03-11 16:38:56.000000000 +0100
-@@ -28,9 +28,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shrotpack.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shrotpack.h 2006-03-11 16:39:02.000000000 +0100
-@@ -30,9 +30,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/miext/shadow/shrotpackYX.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/miext/shadow/shrotpackYX.h 2006-03-11 16:39:08.000000000 +0100
-@@ -25,9 +25,7 @@
- #include <X11/X.h>
- #include "scrnintstr.h"
- #include "windowstr.h"
--#include "font.h"
- #include "dixfontstr.h"
--#include "fontstruct.h"
- #include "mi.h"
- #include "regionstr.h"
- #include "globals.h"
---- xserver.orig/os/xstrans.c 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/os/xstrans.c 2006-03-11 16:39:31.000000000 +0100
-@@ -27,4 +27,4 @@
-
- #include "config.h"
-
--#include <transport.c>
-+#include <X11/Xtrans/transport.c>
---- xserver.orig/os/xstrans.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/os/xstrans.h 2006-03-11 16:39:37.000000000 +0100
-@@ -25,4 +25,4 @@
- #define XSERV_t
- #define TRANS_SERVER
-
--#include <Xtrans.h>
-+#include <X11/Xtrans/Xtrans.h>
---- xserver.orig/Xext/shmint.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/Xext/shmint.h 2006-03-11 16:29:24.000000000 +0100
-@@ -32,27 +32,6 @@
- #include "pixmap.h"
- #include "gc.h"
-
--typedef struct _ShmFuncs {
-- PixmapPtr (* CreatePixmap)(ScreenPtr pScreen,
-- int width,
-- int height,
-- int depth,
-- char *addr);
-- void (* PutImage)(DrawablePtr dst,
-- GCPtr pGC,
-- int depth,
-- unsigned int format,
-- int w,
-- int h,
-- int sx,
-- int sy,
-- int sw,
-- int sh,
-- int dx,
-- int dy,
-- char *data);
--} ShmFuncs, *ShmFuncsPtr;
--
- void
- ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs);
-
---- xserver.orig/Xext/syncint.h 2006-03-11 16:27:42.000000000 +0100
-+++ xserver/Xext/syncint.h 2006-03-11 16:30:16.000000000 +0100
-@@ -48,7 +48,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-
- ******************************************************************/
--/* $Id: syncint.h,v 3.1 2003-11-02 19:56:10 keithp Exp $ */
-+/* $Id: syncint.h,v 3.2 2005-04-20 18:42:31 clee Exp $ */
-
- #ifndef _SYNCINT_H_
- #define _SYNCINT_H_
-@@ -57,26 +57,10 @@
-
- #define CARD64 XSyncValue /* XXX temporary! need real 64 bit values for Alpha */
-
--typedef struct _SyncCounter {
-- ClientPtr client; /* Owning client. 0 for system counters */
-- XSyncCounter id; /* resource ID */
-- CARD64 value; /* counter value */
-- struct _SyncTriggerList *pTriglist; /* list of triggers */
-- Bool beingDestroyed; /* in process of going away */
-- struct _SysCounterInfo *pSysCounterInfo; /* NULL if not a system counter */
--} SyncCounter;
--
- /*
- * The System Counter interface
- */
-
--typedef enum {
-- XSyncCounterNeverChanges,
-- XSyncCounterNeverIncreases,
-- XSyncCounterNeverDecreases,
-- XSyncCounterUnrestricted
--} SyncCounterType;
--
- typedef void
- (*SyncQueryValueProcPtr) (pointer pCounter,
- CARD64 *freshvalue);
-@@ -86,16 +70,6 @@
- CARD64 *lessthan,
- CARD64 *greaterthan);
-
--typedef struct _SysCounterInfo {
-- char *name;
-- CARD64 resolution;
-- CARD64 bracket_greater;
-- CARD64 bracket_less;
-- SyncCounterType counterType; /* how can this counter change */
-- SyncQueryValueProcPtr QueryValue;
-- SyncBracketValuesProcPtr BracketValues;
--} SysCounterInfo;
--
- struct _SyncTrigger;
-
- typedef Bool
-@@ -108,55 +82,6 @@
- typedef void
- (*SyncCounterDestroyedProcPtr) (struct _SyncTrigger *pTrigger);
-
--typedef struct _SyncTrigger {
-- SyncCounter *pCounter;
-- CARD64 wait_value; /* wait value */
-- unsigned int value_type; /* Absolute or Relative */
-- unsigned int test_type; /* transition or Comparision type */
-- CARD64 test_value; /* trigger event threshold value */
-- SyncCheckTriggerProcPtr CheckTrigger;
-- SyncTriggerFiredProcPtr TriggerFired;
-- SyncCounterDestroyedProcPtr CounterDestroyed;
--} SyncTrigger;
--
--typedef struct _SyncTriggerList {
-- SyncTrigger *pTrigger;
-- struct _SyncTriggerList *next;
--} SyncTriggerList;
--
--typedef struct _SyncAlarmClientList {
-- ClientPtr client;
-- XID delete_id;
-- struct _SyncAlarmClientList *next;
--} SyncAlarmClientList;
--
--typedef struct _SyncAlarm {
-- SyncTrigger trigger;
-- ClientPtr client;
-- XSyncAlarm alarm_id;
-- CARD64 delta;
-- int events;
-- int state;
-- SyncAlarmClientList *pEventClients;
--} SyncAlarm;
--
--typedef struct {
-- ClientPtr client;
-- CARD32 delete_id;
-- int num_waitconditions;
--} SyncAwaitHeader;
--
--typedef struct {
-- SyncTrigger trigger;
-- CARD64 event_threshold;
-- SyncAwaitHeader *pHeader;
--} SyncAwait;
--
--typedef union {
-- SyncAwaitHeader header;
-- SyncAwait await;
--} SyncAwaitUnion;
--
- pointer
- SyncCreateSystemCounter(char *name,
- CARD64 inital_value,
diff --git a/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch b/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch
new file mode 100644
index 0000000000..f919b48f0e
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/build-fix-panoramix.patch
@@ -0,0 +1,18 @@
+Index: git/composite/compext.c
+===================================================================
+--- git.orig/composite/compext.c 2007-03-28 16:25:12.000000000 +0200
++++ git/composite/compext.c 2007-03-28 16:25:15.000000000 +0200
+@@ -696,11 +696,13 @@
+ if (GetPictureScreenIfSet(pScreen) == NULL)
+ return;
+ }
++#ifdef PANORAMIX
+ /* Xinerama's rewriting of window drawing before Composite gets to it
+ * breaks Composite.
+ */
+ if (!noPanoramiXExtension)
+ return;
++#endif
+
+ CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow);
+ if (!CompositeClientWindowType)
diff --git a/packages/xorg-xserver/xserver-kdrive/hide-cursor-and-ppm-root.patch b/packages/xorg-xserver/xserver-kdrive/hide-cursor-and-ppm-root.patch
new file mode 100644
index 0000000000..c160cd41dc
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/hide-cursor-and-ppm-root.patch
@@ -0,0 +1,307 @@
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/dix/window.c xorg-server-X11R7.1-1.1.0/dix/window.c
+--- xorg-server-X11R7.1-1.1.0.orig/dix/window.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/dix/window.c 2007-01-16 17:16:19.000000000 +0000
+@@ -185,6 +185,8 @@
+ _X_EXPORT int numSaveUndersViewable = 0;
+ _X_EXPORT int deltaSaveUndersViewable = 0;
+
++char* RootPPM = NULL;
++
+ #ifdef DEBUG
+ /******
+ * PrintWindowTree
+@@ -311,6 +313,115 @@
+ #endif
+ }
+
++static int
++get_int(FILE *fp)
++{
++ int c = 0;
++
++ while ((c = getc(fp)) != EOF)
++ {
++ if (isspace(c))
++ continue;
++
++ if (c == '#')
++ while (c = getc(fp))
++ if (c == EOF)
++ return 0;
++ else if (c == '\n')
++ break;
++
++ if (isdigit(c))
++ {
++ int val = c - '0';
++ while ((c = getc(fp)) && isdigit(c))
++ val = (val * 10) + (c - '0');
++ return val;
++ }
++ }
++
++ return 0;
++}
++
++static unsigned char*
++ppm_load (const char* path, int depth, int *width, int *height)
++{
++ FILE *fp;
++ int max, n = 0, w, h, i, j, bytes_per_line;
++ unsigned char *data, *res, h1, h2;
++
++ if (depth < 16 || depth > 32)
++ return NULL;
++
++ if (depth > 16)
++ depth = 32;
++
++ fp = fopen (path, "r");
++ if (fp == NULL)
++ return FALSE;
++
++ h1 = getc(fp);
++ h2 = getc(fp);
++
++ /* magic is 'P6' for raw ppm */
++ if (h1 != 'P' && h2 != '6')
++ goto fail;
++
++ w = get_int(fp);
++ h = get_int(fp);
++
++ if (w == 0 || h == 0)
++ goto fail;
++
++ max = get_int(fp);
++
++ if (max != 255)
++ goto fail;
++
++ bytes_per_line = ((w * depth + 31) >> 5) << 2;
++
++ res = data = malloc(bytes_per_line * h);
++
++ for (i=0; i<h; i++)
++ {
++ for (j=0; j<w; j++)
++ {
++ unsigned char buf[3];
++ fread(buf, 1, 3, fp);
++
++ switch (depth)
++ {
++ case 24:
++ case 32:
++ *data = buf[2];
++ *(data+1) = buf[1];
++ *(data+2) = buf[0];
++ data += 4;
++ break;
++ case 16:
++ default:
++ *(unsigned short*)data
++ = ((buf[0] >> 3) << 11) | ((buf[1] >> 2) << 5) | (buf[2] >> 3);
++ data += 2;
++ break;
++ }
++ }
++ data += (bytes_per_line - (w*(depth>>3)));
++ }
++
++ data = res;
++
++ *width = w;
++ *height = h;
++
++ fclose(fp);
++
++ return res;
++
++ fail:
++ fclose(fp);
++ return NULL;
++}
++
+ static void
+ MakeRootTile(WindowPtr pWin)
+ {
+@@ -321,6 +432,36 @@
+ register unsigned char *from, *to;
+ register int i, j;
+
++ if (RootPPM != NULL)
++ {
++ int w, h;
++ unsigned char *data;
++
++ if ((data = ppm_load (RootPPM, pScreen->rootDepth, &w, &h)) != NULL)
++ {
++ pWin->background.pixmap
++ = (*pScreen->CreatePixmap)(pScreen, w, h, pScreen->rootDepth);
++
++ pWin->backgroundState = BackgroundPixmap;
++ pGC = GetScratchGC(pScreen->rootDepth, pScreen);
++ if (!pWin->background.pixmap || !pGC)
++ FatalError("could not create root tile");
++
++ ValidateGC((DrawablePtr)pWin->background.pixmap, pGC);
++
++ (*pGC->ops->PutImage)((DrawablePtr)pWin->background.pixmap,
++ pGC,
++ pScreen->rootDepth,
++ 0, 0, w, h, 0, ZPixmap, (char *)data);
++ FreeScratchGC(pGC);
++
++ free(data);
++ return;
++ }
++ else
++ ErrorF("Unable to load root window image.");
++ }
++
+ pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, 4, 4,
+ pScreen->rootDepth);
+
+@@ -357,6 +498,7 @@
+
+ }
+
++
+ WindowPtr
+ AllocateWindow(ScreenPtr pScreen)
+ {
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/src/kdrive.c xorg-server-X11R7.1-1.1.0/hw/kdrive/src/kdrive.c
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/src/kdrive.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/src/kdrive.c 2007-01-15 17:53:06.000000000 +0000
+@@ -58,6 +58,9 @@
+ { 32, 32 }
+ };
+
++int
++ProcXFixesHideCursor (ClientPtr client) ;
++
+ #define NUM_KD_DEPTHS (sizeof (kdDepths) / sizeof (kdDepths[0]))
+
+ int kdScreenPrivateIndex;
+@@ -84,6 +87,9 @@
+ KdOsFuncs *kdOsFuncs;
+ extern WindowPtr *WindowTable;
+
++extern Bool CursorInitiallyHidden; /* See Xfixes cursor.c */
++extern char* RootPPM; /* dix/window.c */
++
+ void
+ KdSetRootClip (ScreenPtr pScreen, BOOL enable)
+ {
+@@ -312,6 +318,7 @@
+ KdSetRootClip (pScreen, TRUE);
+ if (pScreenPriv->card->cfuncs->dpms)
+ (*pScreenPriv->card->cfuncs->dpms) (pScreen, pScreenPriv->dpmsState);
++
+ return TRUE;
+ }
+
+@@ -686,10 +693,14 @@
+ ErrorF("-mouse path[,n] Filename of mouse device, n is number of buttons\n");
+ ErrorF("-switchCmd Command to execute on vt switch\n");
+ ErrorF("-nozap Don't terminate server on Ctrl+Alt+Backspace\n");
++ ErrorF("-hide-cursor Start with cursor hidden\n");
++ ErrorF("-root-ppm [path] Specify ppm file to use as root window background.\n");
+ ErrorF("vtxx Use virtual terminal xx instead of the next available\n");
+ #ifdef PSEUDO8
+ p8UseMsg ();
+ #endif
++
++
+ }
+
+ int
+@@ -761,6 +772,19 @@
+ kdSoftCursor = TRUE;
+ return 1;
+ }
++ if (!strcmp (argv[i], "-hide-cursor"))
++ {
++ CursorInitiallyHidden = TRUE;
++ return 1;
++ }
++ if (!strcmp (argv[i], "-root-ppm"))
++ {
++ if ((i+1) < argc)
++ RootPPM = argv[i+1];
++ else
++ UseMsg ();
++ return 2;
++ }
+ if (!strcmp (argv[i], "-videoTest"))
+ {
+ kdVideoTest = TRUE;
+diff -u -r xorg-server-X11R7.1-1.1.0.orig/xfixes/cursor.c xorg-server-X11R7.1-1.1.0/xfixes/cursor.c
+--- xorg-server-X11R7.1-1.1.0.orig/xfixes/cursor.c 2007-01-08 14:30:38.000000000 +0000
++++ xorg-server-X11R7.1-1.1.0/xfixes/cursor.c 2007-01-11 16:33:00.000000000 +0000
+@@ -59,9 +59,12 @@
+ static RESTYPE CursorWindowType;
+ static int CursorScreenPrivateIndex = -1;
+ static int CursorGeneration;
++static Bool CursorGloballyHidden;
+ static CursorPtr CursorCurrent;
+ static CursorPtr pInvisibleCursor = NULL;
+
++Bool CursorInitiallyHidden = FALSE;
++
+ static void deleteCursorHideCountsForScreen (ScreenPtr pScreen);
+
+ #define VERIFY_CURSOR(pCursor, cursor, client, access) { \
+@@ -130,7 +133,7 @@
+
+ Unwrap (cs, pScreen, DisplayCursor);
+
+- if (cs->pCursorHideCounts != NULL) {
++ if (cs->pCursorHideCounts != NULL || CursorGloballyHidden) {
+ ret = (*pScreen->DisplayCursor) (pScreen, pInvisibleCursor);
+ } else {
+ ret = (*pScreen->DisplayCursor) (pScreen, pCursor);
+@@ -848,6 +851,12 @@
+ return BadWindow;
+ }
+
++ /* Is cursor set to be initially hidden ?, if so reset this
++ * flag as now visibility assumed under control of client.
++ */
++ if (CursorGloballyHidden)
++ CursorGloballyHidden = FALSE;
++
+ /*
+ * Has client hidden the cursor before on this screen?
+ * If so, just increment the count.
+@@ -899,9 +908,19 @@
+ return BadWindow;
+ }
+
++ /* X was started with cursor hidden, therefore just reset our flag
++ * (returning to normal client control) and cause cursor to now be
++ * shown.
++ */
++ if (CursorGloballyHidden == TRUE)
++ {
++ CursorGloballyHidden = FALSE;
++ return (client->noClientException);
++ }
++
+ /*
+ * Has client hidden the cursor on this screen?
+- * If not, generate an error.
++ * If so, generate an error.
+ */
+ pChc = findCursorHideCount(client, pWin->drawable.pScreen);
+ if (pChc == NULL) {
+@@ -1009,6 +1028,8 @@
+ XFixesCursorInit (void)
+ {
+ int i;
++
++ CursorGloballyHidden = CursorInitiallyHidden;
+
+ if (CursorGeneration != serverGeneration)
+ {
diff --git a/packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch b/packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch
index 376074951f..f2db7acb4b 100644
--- a/packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch
+++ b/packages/xorg-xserver/xserver-kdrive/kdrive-imageon.patch
@@ -1,4 +1,3 @@
-
# Author: Manuel Teira <manuel.teira@telefonica.net> (sirfred in #oe)
# Description: New driver for the Imageon ATI Card. Implementing:
# -Hardware solid fills
@@ -7,13 +6,14 @@
# -XV Extension
# -Internal and External Imageon offscreen memory support
# -Hardware RandR rotation (without using a shadow framebuffer)
+# -Support for RandR mode changing
#
# Patch managed by http://www.holgerschurig.de/patcher.html
#
---- xorg-server-X11R7.1-1.1.0.orig/configure.ac~kdrive-imageon
-+++ xorg-server-X11R7.1-1.1.0.orig/configure.ac
+--- xorg-server-X11R7.1-1.1.0.work/configure.ac~kdrive-imageon
++++ xorg-server-X11R7.1-1.1.0.work/configure.ac
@@ -435,6 +435,7 @@
AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
@@ -42,8 +42,8 @@
hw/kdrive/i810/Makefile
hw/kdrive/linux/Makefile
hw/kdrive/mach64/Makefile
---- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/Makefile.am~kdrive-imageon
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/Makefile.am
+--- xorg-server-X11R7.1-1.1.0.work/hw/kdrive/Makefile.am~kdrive-imageon
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/Makefile.am
@@ -1,18 +1,9 @@
-if KDRIVEVESA
-VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
@@ -78,7 +78,7 @@
DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
smi via fbdev sdl ephyr src linux fake sis300
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/Makefile.am
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/Makefile.am
@@ -0,0 +1,47 @@
+if KDRIVEFBDEV
+FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
@@ -128,8 +128,8 @@
+ libimageon.a \
+ $(FBDEV_LIBS)
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon.c
-@@ -0,0 +1,523 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon.c
+@@ -0,0 +1,606 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -157,19 +157,69 @@
+#endif
+#include "imageon.h"
+#include "imageon_regs.h"
++#include "imageon_support.h"
+
-+struct pci_id_entry w100_pci_ids[] = {
-+ {0x1002, 0x5644, 0, "ATI Imageon 3200"},
-+ {0x1002, 0x5741, 0, "ATI Imageon 100"},
-+ {0x1002, 0x5744, 0, "ATI Imageon 3220"},
-+ {0, 0, 0, NULL}
++W100CardEntry w100_cards[] = {
++ {0x1002, 0x5644, 0, "ATI Imageon 3200"},
++ {0x1002, 0x5741, W100XVSupport, "ATI Imageon 100"},
++ {0x1002, 0x5744, 0, "ATI Imageon 3220"},
++ {0, 0, 0, NULL}
+};
+
++W100ModeSpec w100_modes[] = {
++ {800, 600, 16, W100_EXTMEM, FALSE},
++ {640, 480, 16, W100_EXTMEM, FALSE},
++ {320, 240, 16, W100_INTMEM, FALSE},
++ { 0, 0, 0, 0, FALSE}
++};
++
++W100StartupInfo w100StartupInfo;
++
++extern void (*tslib_transform_coords)(long *x, long *y, void *closure);
++extern void *tslib_transform_closure;
++
++static void
++W100Startup(W100CardInfo *w100c)
++{
++ int i;
++ DBG_IMAGEON(("--W100Startup\n"));
++ W100ModeSpec *modes;
++ /* Take the current graphics mode */
++ if (!W100GetFbMode(w100c, &w100StartupInfo.mode)) {
++ ErrorF("(E) Unable to get current mode\n");
++ }
++ w100StartupInfo.randr = W100GetRotation(w100c);
++ w100StartupInfo.portrait = w100StartupInfo.mode.width < w100StartupInfo.mode.height;
++
++ /* Test the valid modes */
++ for (modes = w100_modes; modes->width; modes++) {
++ modes->supported = W100CheckFbMode(w100c, modes);
++ }
++
++ DBG_IMAGEON(("Startup Mode: %dx%d@%d, rot: %d, portrait: %s\n",
++ w100StartupInfo.mode.width,
++ w100StartupInfo.mode.height,
++ w100StartupInfo.mode.bpp,
++ w100StartupInfo.randr,
++ w100StartupInfo.portrait ? "Yes" : "No"));
++
++ /* Tell the kernel to never switch off external memory */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "extmem", "1");
++
++ /* Disable framebuffer accel */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "accel", "0");
++
++ /* Enable fastsysclk */
++ W100SysFsSet(w100c, W100_SYSFS_BASE "fastpllclk", "1");
++
++}
++
++
+static Bool
+W100Map(KdCardInfo * card, W100CardInfo *w100c)
+{
-+ w100c->mem_base = (CARD8 *) KdMapDevice(W100_MEM_BASE,
-+ W100_MEM_SIZE);
++ DBG_IMAGEON(("--W100Map\n"));
++ w100c->mem_base = (CARD8 *) KdMapDevice(W100_MEM_BASE, W100_MEM_SIZE);
+
+ if (w100c->mem_base == NULL) {
+ return FALSE;
@@ -182,8 +232,7 @@
+ * There's only difference when HAVE_ASM_MTRR_H is defined.
+ * So, this call is doing nothing.
+ */
-+ KdSetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
-+ KD_MAPPED_MODE_REGISTERS);
++ KdSetMappedMode(W100_MEM_BASE, W100_MEM_SIZE, KD_MAPPED_MODE_REGISTERS);
+
+ return TRUE;
+}
@@ -191,77 +240,108 @@
+static void
+W100Unmap(KdCardInfo * card, W100CardInfo *w100c)
+{
++ DBG_IMAGEON(("--W100Unmap\n"));
+ if (w100c->mem_base) {
-+ KdResetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
++ KdResetMappedMode(W100_MEM_BASE, W100_MEM_SIZE,
+ KD_MAPPED_MODE_REGISTERS);
+ KdUnmapDevice((void *) w100c->mem_base, W100_MEM_SIZE);
+ w100c->mem_base = w100c->reg_base = 0;
+ }
+}
+
++static void W100MemSetup(W100CardInfo *w100c)
++{
++ int reg_value;
++ int int_start, int_size;
++ int ext_start, ext_size;
++ int i;
++ DBG_IMAGEON(("--W100MemSetup\n"));
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ xfree(w100c->memareas[i]);
++ }
++ xfree(w100c->memareas);
++
++ reg_value = MMIO_IN32(mmMC_FB_LOCATION);
++ int_start = (reg_value & 0xffff) << 8;
++ int_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++ DBG_IMAGEON(("(I) MC_FB_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++ reg_value, int_start, int_size));
++
++ reg_value = MMIO_IN32(mmMC_EXT_MEM_LOCATION);
++ ext_start = (reg_value & 0xffff) << 8;
++ ext_size = (((reg_value >> 16) & 0xffff) - (reg_value & 0xffff)) << 8;
++ DBG_IMAGEON(("(I) MC_EXT_MEM_LOCATION: 0x%08x. Start: 0x%08x, size: %d\n",
++ reg_value, ext_start, ext_size));
++
++ w100c->num_memareas = (ext_size > 0) ? 2 : 1;
++ w100c->memareas = xcalloc(sizeof(W100MemArea *), w100c->num_memareas);
++
++ w100c->memareas[W100_INTMEM] = xcalloc(sizeof(W100MemArea), 1);
++ w100c->memareas[W100_INTMEM]->priority = KD_VIDMEM_MAXPRIO;
++ w100c->memareas[W100_INTMEM]->start = (CARD8 *) int_start;
++ w100c->memareas[W100_INTMEM]->size = int_size;
++
++ if (w100c->num_memareas == 2) {
++ w100c->memareas[W100_EXTMEM] = xcalloc(sizeof(W100MemArea), 1);
++ w100c->memareas[W100_EXTMEM]->priority = KD_VIDMEM_MINPRIO;
++ w100c->memareas[W100_EXTMEM]->start = (CARD8 *) ext_start;
++ w100c->memareas[W100_EXTMEM]->size = ext_size;
++ }
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ DBG_IMAGEON(("(I) Memory mapped at 0x%08x(0x%08x), size %d bytes\n",
++ W100_CARD2HOST(w100c->memareas[i]->start),
++ w100c->memareas[i]->start,
++ w100c->memareas[i]->size));
++ }
++
++}
++
+static Bool
+W100CardInit(KdCardInfo * card)
+{
+ W100CardInfo *w100c;
-+ int i;
-+ int ext_mem;
-+ int int_mem;
-+ Bool initialized = FALSE;
++
++ W100CardEntry *model = &w100_cards[0];
++ static Bool initialized = FALSE;
++
++ DBG_IMAGEON(("--W100CardInit\n"));
+
+ w100c = xcalloc(sizeof(W100CardInfo), 1);
+ if (w100c == NULL)
+ return FALSE;
+
-+ if (!initialized && fbdevInitialize(card, &w100c->fbdev)) {
-+ initialized = TRUE;
++ if (!fbdevInitialize(card, &w100c->fbdev)) {
++ return FALSE;
+ }
+
-+ if (!initialized || !W100Map(card, w100c)) {
++ if (!W100Map(card, w100c)) {
+ xfree(w100c);
+ return FALSE;
+ }
+ card->driver = w100c;
+
-+ for (i = 0; w100_pci_ids[i].name != NULL; i++) {
-+ if (w100_pci_ids[i].device == card->attr.deviceID) {
-+ w100c->pci_id = &w100_pci_ids[i];
++ while (model->name) {
++ if (model->device == card->attr.deviceID) {
++ w100c->card_id = model;
+ break;
+ }
++ model++;
+ }
-+ ErrorF("Using ATI card: %s\n", w100c->pci_id->name);
-+
-+ ext_mem = MMIO_IN32(mmMC_EXT_MEM_LOCATION);
-+ int_mem = MMIO_IN32(mmMC_FB_LOCATION);
-+
-+ w100c->memareas[0].priority = KD_VIDMEM_MAXPRIO;
-+ w100c->memareas[0].start = (CARD8 *) ((int_mem & 0xffff) << 8);
-+ w100c->memareas[0].size =
-+ (((int_mem >> 16) & 0xffff) - (int_mem & 0xffff)) << 8;
+
++ ErrorF("(I) Using ATI card: %s\n", w100c->card_id->name);
+
-+ w100c->memareas[1].priority = KD_VIDMEM_MINPRIO;
-+ w100c->memareas[1].start = (CARD8 *)((ext_mem & 0xffff) << 8);
-+ w100c->memareas[1].size =
-+ (((ext_mem >> 16) & 0xffff) - (ext_mem & 0xffff)) << 8;
++ if (!initialized) {
++ initialized = TRUE;
++ W100Startup(w100c);
++ }
+
-+ /* Get some register values */
-+ w100c->regs.ENG_CNTL = MMIO_IN32(mmENG_CNTL);
-+ w100c->regs.VIDEO_CTRL = MMIO_IN32(mmVIDEO_CTRL);
-+ w100c->regs.GRAPHIC_H_DISP = MMIO_IN32(mmGRAPHIC_H_DISP);
-+ w100c->regs.GRAPHIC_V_DISP = MMIO_IN32(mmGRAPHIC_V_DISP);
++ w100c->hw_window.mode = W100GetModeSpec(w100c, &w100StartupInfo.mode);
++ w100c->hw_window.randr = w100StartupInfo.randr;
+
-+ DBG_IMAGEON(("Internal memory at 0x%08x(0x%08x), size %d bytes\n"
-+ "External memory at 0x%08x(0x%08x), size %d bytes\n",
-+ w100c->memareas[0].start,
-+ W100_CARD2HOST(w100c->memareas[0].start),
-+ w100c->memareas[0].size,
-+ w100c->memareas[1].start,
-+ W100_CARD2HOST(w100c->memareas[1].start),
-+ w100c->memareas[1].size));
-+
-+ /* TODO: Change this to honour the framebuffer initial orientation? */
-+ w100c->defaultRandR = RR_Rotate_90;
-+ w100c->hwScreen.randr = w100c->defaultRandR;
++ tslib_transform_closure = w100c;
++ tslib_transform_coords = W100TransformTsLibCoordinates;
+ return TRUE;
+}
+
@@ -271,45 +351,63 @@
+{
+ W100CardInfo *w100c = (W100CardInfo *) card->driver;
+
++ DBG_IMAGEON(("--W100CardFini\n"));
+ W100Unmap(card, w100c);
+ fbdevCardFini(card);
+}
+
+static void
-+W100MemSetup(KdScreenInfo *screen)
++W100Setup(KdScreenInfo *screen)
+{
+ W100CardInfo(screen);
+ W100MemArea *mem;
++ KdMouseMatrix m;
+ int fb_size, i;
+
++ DBG_IMAGEON(("--W100Setup\n"));
++
++ /* Adjust mode */
++ w100c->hw_window.width = screen->width;
++ w100c->hw_window.height = screen->height;
++ w100c->hw_window.bpp = screen->fb[0].bitsPerPixel;
++ W100SetupGraphicWindow(w100c);
++
++ /* Get some register values */
++ w100c->regs.ENG_CNTL = MMIO_IN32(mmENG_CNTL);
++ w100c->regs.VIDEO_CTRL = MMIO_IN32(mmVIDEO_CTRL);
++ w100c->regs.GRAPHIC_H_DISP = MMIO_IN32(mmGRAPHIC_H_DISP);
++ w100c->regs.GRAPHIC_V_DISP = MMIO_IN32(mmGRAPHIC_V_DISP);
++ w100c->regs.DISP_DEBUG2 = MMIO_IN32(mmDISP_DEBUG2);
++
++ W100MemSetup(w100c);
++
+ /* Clear the VideoMemAreas set up by the framebuffer initialization */
+ for (i = 0; i < screen->num_videomem_areas; i++) {
+ xfree(screen->videomem_areas[i]);
+ }
+ xfree(screen->videomem_areas);
+
-+ screen->videomem_areas = xcalloc(sizeof(KdVideoMemArea *),
-+ W100_MEMAREAS);
-+ screen->num_videomem_areas = W100_MEMAREAS;
++ screen->videomem_areas = xcalloc(sizeof(KdVideoMemArea *),
++ w100c->num_memareas);
++ screen->num_videomem_areas = w100c->num_memareas;
+
++ screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8;
+ fb_size = screen->fb[0].byteStride * screen->height;
-+ DBG_IMAGEON(("Framebuffer required size: %d bytes\n", fb_size));
-+ /* Try to place the framebuffer in the best VideoMemArea */
-+ for (i = 0; i < W100_MEMAREAS; i++) {
-+ mem = &w100c->memareas[i];
++
++ DBG_IMAGEON(("(I) Framebuffer required size: %d bytes\n", fb_size));
++
++ for (i = 0; i < w100c->num_memareas; i++) {
++ mem = w100c->memareas[i];
+ screen->videomem_areas[i] = xcalloc(sizeof(KdVideoMemArea), 1);
-+ if (fb_size <= mem->size) {
-+ DBG_IMAGEON(("Setting FrameBuffer to w100 address 0x%08x\n",
-+ mem->start));
-+ screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start);
-+ screen->videomem_areas[i]->priority = mem->priority;
-+ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
-+ screen->videomem_areas[i]->size = mem->size;
++ screen->videomem_areas[i]->priority = mem->priority;
++ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
++ screen->videomem_areas[i]->size = mem->size;
++ if (w100c->hw_window.mode->fbpool == i) {
++ DBG_IMAGEON(("(I) FrameBuffer in w100 memzone 0x%08x(0x%08x)\n",
++ W100_CARD2HOST(mem->start), mem->start));
+ screen->videomem_areas[i]->available_offset = fb_size;
++ screen->fb[0].frameBuffer = W100_CARD2HOST(mem->start);
+ } else {
-+ screen->videomem_areas[i]->priority = mem->priority;
-+ screen->videomem_areas[i]->base = W100_CARD2HOST(mem->start);
-+ screen->videomem_areas[i]->size = mem->size;
+ screen->videomem_areas[i]->available_offset = 0;
+ }
+ DBG_IMAGEON(("New videomem_area(priority:%d, start:0x%08x, size:%d, available_offset:%d\n",
@@ -319,24 +417,28 @@
+ screen->videomem_areas[i]->available_offset));
+ }
+
-+ w100c->hwScreen.x = 0;
-+ w100c->hwScreen.y = 0;
-+ w100c->hwScreen.width = screen->width;
-+ w100c->hwScreen.height = screen->height;
-+ w100c->hwScreen.bpp = screen->fb[0].bitsPerPixel;
-+ w100c->hwScreen.offset = W100_HOST2CARD(screen->fb[0].frameBuffer);
+
++ w100c->hw_window.offset = W100_HOST2CARD(screen->fb[0].frameBuffer);
++
++ KdComputeMouseMatrix(&m, screen->randr,
++ w100StartupInfo.portrait ?
++ W100_MIN(screen->width, screen->height) :
++ W100_MAX(screen->width, screen->height),
++ w100StartupInfo.portrait ?
++ W100_MAX(screen->width, screen->height) :
++ W100_MIN(screen->width, screen->height));
+
-+ DBG_IMAGEON(("HWScreen(x:%d,y:%d,width:%d,height:%d,bpp:%d,offset:0x%08x"
++ KdSetMouseMatrix(&m);
++
++ DBG_IMAGEON(("Window(width:%d,height:%d,bpp:%d,offset:0x%08x"
+ "(0x%08x), randr:%d)\n",
-+ w100c->hwScreen.x,
-+ w100c->hwScreen.y,
-+ w100c->hwScreen.width,
-+ w100c->hwScreen.height,
-+ w100c->hwScreen.bpp,
-+ w100c->hwScreen.offset,
++ w100c->hw_window.width,
++ w100c->hw_window.height,
++ w100c->hw_window.bpp,
++ w100c->hw_window.offset,
+ screen->fb[0].frameBuffer,
-+ w100c->hwScreen.randr));
++ w100c->hw_window.randr));
++
+}
+
+static Bool
@@ -346,6 +448,7 @@
+ W100CardInfo(screen);
+ Bool success = FALSE;
+
++ DBG_IMAGEON(("--W100ScreenInit\n"));
+ w100s = xcalloc(sizeof(W100ScreenInfo), 1);
+ if (w100s == NULL)
+ return FALSE;
@@ -354,10 +457,6 @@
+ w100s->screen = screen;
+ screen->driver = w100s;
+
-+ if (screen->fb[0].depth == 0) {
-+ screen->fb[0].depth = 16;
-+ }
-+
+ success = fbdevScreenInitialize(screen, &w100s->fbdev);
+
+ if (!success) {
@@ -366,7 +465,7 @@
+ return FALSE;
+ }
+
-+ W100MemSetup(screen);
++ W100Setup(screen);
+
+ return TRUE;
+}
@@ -375,8 +474,7 @@
+W100ScreenFini(KdScreenInfo * screen)
+{
+ W100ScreenInfo *w100s = (W100ScreenInfo *) screen->driver;
-+ W100CardInfo *w100c = screen->card->driver;
-+
++ DBG_IMAGEON(("--W100ScreenFini\n"));
+ fbdevScreenFini(screen);
+ xfree(w100s);
+ screen->driver = 0;
@@ -388,7 +486,10 @@
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
+
-+ W100InitVideo(pScreen);
++ DBG_IMAGEON(("--W100InitScreen\n"));
++ if (w100c->card_id->caps & W100XVSupport) {
++ W100InitVideo(pScreen);
++ }
+ return fbdevInitScreen(pScreen);
+}
+
@@ -403,35 +504,42 @@
+ KdScreenInfo *screen = pScreenPriv->screen;
+ W100CardInfo(pScreenPriv);
+ Bool screenEnabled = pScreenPriv->enabled;
-+ KdMouseMatrix m;
+
-+ DBG_IMAGEON(("W100RandRSetConfig(randr:%d,pSize:%dx%d)\n",
++ DBG_IMAGEON(("--W100RandRSetConfig(randr:%d,pSize:%dx%d)\n",
+ randr, pSize->width, pSize->height));
+
-+
+ if (screenEnabled) {
+ KdDisableScreen(pScreen);
+ }
-+ KdOffscreenSwapOut(screen->pScreen);
+
+ if (randr & (RR_Rotate_0|RR_Rotate_180)) {
-+ pScreen->width = w100c->fbdev.var.xres;
-+ pScreen->height = w100c->fbdev.var.yres;
+ pScreen->mmWidth = screen->width_mm;
+ pScreen->mmHeight = screen->height_mm;
++ pScreen->width = pSize->width;
++ pScreen->height = pSize->height;
+ } else {
-+ pScreen->width = w100c->fbdev.var.yres;
-+ pScreen->height = w100c->fbdev.var.xres;
+ pScreen->mmWidth = screen->height_mm;
+ pScreen->mmHeight = screen->width_mm;
++ pScreen->width = pSize->height;
++ pScreen->height = pSize->width;
+ }
+
-+ KdComputeMouseMatrix(&m, randr, screen->width, screen->height);
-+ KdSetMouseMatrix(&m);
-+
++ screen->randr = randr;
+ screen->width = pScreen->width;
+ screen->height = pScreen->height;
-+ screen->fb[0].byteStride = screen->width * screen->fb[0].bitsPerPixel / 8;
++ w100c->hw_window.randr = KdSubRotation(w100StartupInfo.randr, randr);
++ w100c->hw_window.mode = W100GetBestMode(w100c, pScreen->width, pScreen->height);
++
++ KdOffscreenSwapOut(screen->pScreen);
++
++ W100Setup(screen);
++
++ DBG_IMAGEON(("ModifyPixMapHeader(width:%d,height:%d,depth:%d,bpp:%d,bs:%d,fb:0x%08x)\n", pScreen->width, pScreen->height,
++ screen->fb[0].depth,
++ screen->fb[0].bitsPerPixel,
++ screen->fb[0].byteStride,
++ screen->fb[0].frameBuffer));
++
+
+ (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap(pScreen),
+ pScreen->width,
@@ -442,77 +550,38 @@
+ screen->fb[0].frameBuffer);
+
+
-+ w100c->hwScreen.randr &= ~RR_Rotate_All;
-+ switch (randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ switch (w100c->defaultRandR) {
-+ case RR_Rotate_0:
-+ w100c->hwScreen.randr |= RR_Rotate_0;
-+ break;
-+ case RR_Rotate_90:
-+ w100c->hwScreen.randr |= RR_Rotate_90;
-+ break;
-+ case RR_Rotate_180:
-+ w100c->hwScreen.randr |= RR_Rotate_180;
-+ break;
-+ case RR_Rotate_270:
-+ w100c->hwScreen.randr |= RR_Rotate_270;
-+ break;
-+ }
-+ break;
-+ case RR_Rotate_90:
-+ switch (w100c->defaultRandR) {
-+ case RR_Rotate_0:
-+ w100c->hwScreen.randr |= RR_Rotate_90;
-+ break;
-+ case RR_Rotate_90:
-+ w100c->hwScreen.randr |= RR_Rotate_0;
-+ break;
-+ case RR_Rotate_180:
-+ w100c->hwScreen.randr |= RR_Rotate_270;
-+ break;
-+ case RR_Rotate_270:
-+ w100c->hwScreen.randr |= RR_Rotate_180;
-+ break;
-+ }
-+ break;
-+ case RR_Rotate_180:
-+ switch (w100c->defaultRandR) {
-+ case RR_Rotate_0:
-+ w100c->hwScreen.randr |= RR_Rotate_180;
-+ break;
-+ case RR_Rotate_90:
-+ w100c->hwScreen.randr |= RR_Rotate_270;
-+ break;
-+ case RR_Rotate_180:
-+ w100c->hwScreen.randr |= RR_Rotate_0;
-+ break;
-+ case RR_Rotate_270:
-+ w100c->hwScreen.randr |= RR_Rotate_90;
-+ break;
-+ }
-+ break;
-+ case RR_Rotate_270:
-+ switch (w100c->defaultRandR) {
-+ case RR_Rotate_0:
-+ w100c->hwScreen.randr |= RR_Rotate_270;
-+ break;
-+ case RR_Rotate_90:
-+ w100c->hwScreen.randr |= RR_Rotate_180;
-+ break;
-+ case RR_Rotate_180:
-+ w100c->hwScreen.randr |= RR_Rotate_90;
-+ break;
-+ case RR_Rotate_270:
-+ w100c->hwScreen.randr |= RR_Rotate_0;
-+ break;
-+ }
-+ break;
-+ }
-+
+ if (screenEnabled) {
+ KdEnableScreen(pScreen);
+ }
++ return TRUE;
++}
++
++static Bool W100RandRGetInfo(ScreenPtr pScreen, Rotation *rotations)
++{
++ KdScreenPriv(pScreen);
++ KdScreenInfo *screen = pScreenPriv->screen;
++ W100CardInfo(pScreenPriv);
++ RRScreenSizePtr pSize;
++ Rotation randr;
++ W100ModeSpec *modes;
++ int i;
++
++ DBG_IMAGEON(("--W100RandRGetInfo\n"));
++
++ *rotations = RR_Rotate_All;
++
++ for (modes = w100_modes; modes->width; modes++) {
++ if (modes->supported) {
++ pSize = RRRegisterSize(pScreen,
++ modes->width,
++ modes->height,
++ screen->width_mm,
++ screen->height_mm);
++ if (modes == w100c->hw_window.mode) {
++ RRSetCurrentConfig(pScreen, screen->randr, 0, pSize);
++ }
++ }
++ }
+
+ return TRUE;
+}
@@ -520,8 +589,9 @@
+static Bool W100RandRInit(ScreenPtr pScreen)
+{
+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
-+
++ DBG_IMAGEON(("--W100RandRInit\n"));
+ pScrPriv->rrSetConfig = W100RandRSetConfig;
++ pScrPriv->rrGetInfo = W100RandRGetInfo;
+ return TRUE;
+}
+
@@ -532,7 +602,7 @@
+{
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+
++ DBG_IMAGEON(("--W100FinishInitScreen\n"));
+ if (!fbdevFinishInitScreen(pScreen))
+ return FALSE;
+
@@ -556,6 +626,7 @@
+W100Preserve(KdCardInfo * card)
+{
+ W100CardInfo *w100c = card->driver;
++ DBG_IMAGEON(("--W100Preserve\n"));
+
+ fbdevPreserve(card);
+}
@@ -564,6 +635,7 @@
+W100Restore(KdCardInfo * card)
+{
+ W100CardInfo *w100c = card->driver;
++ DBG_IMAGEON(("--W100Restore\n"));
+ fbdevRestore(card);
+}
+
@@ -572,7 +644,7 @@
+{
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+
++ DBG_IMAGEON(("--W100DPMS\n"));
+ return fbdevDPMS(pScreen, mode);
+}
+
@@ -582,17 +654,28 @@
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
+
-+ DBG_IMAGEON(("W100Enable\n"));
++ DBG_IMAGEON(("--W100Enable\n"));
+
++ /*
+ if (!fbdevEnable(pScreen))
+ return FALSE;
++ */
+
+ if (w100c->mem_base == NULL) {
+ if (!W100Map(pScreenPriv->screen->card, w100c)) {
+ return FALSE;
+ }
-+ W100MemSetup(pScreenPriv->screen);
++ W100Setup(pScreenPriv->screen);
+ }
++ W100SetupGraphicEngine(w100c);
++
++ graphic_offset_u go;
++ go.val = MMIO_IN32(mmGRAPHIC_OFFSET);
++ DBG_IMAGEON(("Graphic offset is 0x%08x(0x%08x)\n",
++ go.f.graphic_offset,
++ W100_CARD2HOST(go.f.graphic_offset)));
++
++
+ return TRUE;
+}
+
@@ -601,8 +684,8 @@
+{
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+ DBG_IMAGEON(("W100Disable\n"));
-+ W100Unmap(pScreenPriv->card, w100c);
++ DBG_IMAGEON(("--W100Disable\n"));
++ //W100Unmap(pScreenPriv->card, w100c);
+
+ fbdevDisable(pScreen);
+}
@@ -654,7 +737,7 @@
+ W100PutColors, /* putColors */
+};
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_const.h
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_const.h
@@ -0,0 +1,161 @@
+/*
+ * Copyright © 2007 Manuel Teira
@@ -818,8 +901,8 @@
+
+#endif
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_cursor.c
-@@ -0,0 +1,571 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_cursor.c
+@@ -0,0 +1,569 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -851,8 +934,9 @@
+#include "imageon_regs.h"
+
+#define W100_CURSOR_HEIGHT (16)
-+#define W100_CURSOR_PITCH (4)
+#define W100_CURSOR_WIDTH (16)
++#define W100_CURSOR_PITCH (W100_CURSOR_WIDTH / 4)
++
+#define W100_CURSOR_SIZE W100_CURSOR_PITCH * W100_CURSOR_WIDTH
+
+static CARD16 expand2bpp[256];
@@ -885,7 +969,7 @@
+ (((y) * W100_CURSOR_PITCH + ((x) / 4)) >> 2)
+
+#define PixelShift(x, y) \
-+ (2 * ((x) % W100_CURSOR_WIDTH))
++ (2 * ((x) % 16))
+
+#define PixelMask(x, y) \
+ ((0xc0000000) >> PixelShift(x, y))
@@ -949,7 +1033,7 @@
+ x1 = 0;
+ y1 = 0;
+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >= 0; --y2) {
-+ for (x2 = W100_CURSOR_WIDTH - 1; x2 >= 0; --x2) {
++ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) {
+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
+ ++x1;
+ if (x1 >= W100_CURSOR_WIDTH) {
@@ -963,7 +1047,7 @@
+ x1 = 0;
+ y1 = 0;
+ for (x2 = 0; x2 < W100_CURSOR_WIDTH; x2++) {
-+ for (y2 = W100_CURSOR_HEIGHT - 1; y2 >= 0; --y2) {
++ for (y2 = 0; y2 < W100_CURSOR_HEIGHT; y2++) {
+ SetPixelVal(dst, x2, y2, PixelVal(src, x1, y1));
+ ++x1;
+ if (x1 >= W100_CURSOR_WIDTH) {
@@ -1030,9 +1114,6 @@
+ int line, i;
+ int h, w;
+
-+ DBG_IMAGEON(("W100LoadCursor(xhot:%d,yhot:%d,width:%d,height:%d)\n",
-+ bits->xhot, bits->yhot,
-+ bits->width, bits->height));
+
+ pCurPriv->pCursor = pCursor;
+ pCurPriv->xhot = bits->xhot;
@@ -1073,13 +1154,19 @@
+ }
+
+ /* Rotate the pixmap to get the correct orientation */
-+ W100RotateCursor(w100c->hwScreen.randr,
++ W100RotateCursor(w100c->hw_window.randr,
+ (CARD32*) tmpCursor0,
+ (CARD32*) tmpCursor1);
+
++ DUMP_CURSOR((CARD32*)tmpCursor1);
+ /* Correct endianness */
+ src = (CARD32*) tmpCursor1;
+ dst = (CARD32*) (pCurPriv->area->vidmem->base + pCurPriv->area->offset);
++ DBG_IMAGEON(("W100LoadCursor(xhot:%d,yhot:%d,width:%d,height:%d) dst(0x%08x)\n",
++ bits->xhot, bits->yhot,
++ bits->width, bits->height,
++ dst));
++
+ for (line = 0; line < h; line++) {
+ for (i = 0; i < lwsrc; i++) {
+ dst[i] = BigEndian(src[i]);
@@ -1087,6 +1174,7 @@
+ src += lwsrc;
+ dst += lwsrc;
+ }
++
+ W100SetCursorColors(pScreen);
+}
+
@@ -1117,13 +1205,14 @@
+ W100CardInfo(pScreenPriv);
+ W100ScreenInfo(pScreenPriv);
+ W100Cursor *pCurPriv = &w100s->cursor;
-+ CARD16 xoffs, yoffs;
++ int xoffs, yoffs;
+ cursor_offset_u cursor_offset;
+ cursor_h_pos_u hpos;
+ cursor_v_pos_u vpos;
+ graphic_h_disp_u graphic_hdisp;
+ graphic_v_disp_u graphic_vdisp;
-+ int tx, ty;
++ BoxRec cursorBox, deviceBox;
++
+
+ if (!pCurPriv->has_cursor) {
+ return;
@@ -1132,60 +1221,44 @@
+ return;
+ }
+
-+ DBG_IMAGEON(("W100MoveCursor(x:%d,y:%d)\n", x, y));
-+
+ graphic_hdisp.val = w100c->regs.GRAPHIC_H_DISP;
+ graphic_vdisp.val = w100c->regs.GRAPHIC_V_DISP;
-+
+ xoffs = 0;
+ yoffs = 0;
-+
-+ x -= pCurPriv->xhot;
-+ if (x < 0) {
-+ switch(w100c->hwScreen.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ case RR_Rotate_180:
-+ xoffs = -x;
-+ break;
-+ case RR_Rotate_90:
-+ case RR_Rotate_270:
-+ yoffs = -y;
-+ break;
-+ }
-+ x = 0;
-+ }
-+ y -= pCurPriv->yhot;
-+ if (y < 0) {
-+ switch(w100c->hwScreen.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ case RR_Rotate_180:
-+ yoffs = -y;
-+ break;
-+ case RR_Rotate_90:
-+ case RR_Rotate_270:
-+ xoffs = -y;
-+ break;
-+ }
-+ y = 0;
++ cursorBox.x1 = x - pCurPriv->xhot;
++ cursorBox.y1 = y - pCurPriv->yhot;
++ cursorBox.x2 = cursorBox.x1 + pCurPriv->width - 1;
++ cursorBox.y2 = cursorBox.y1 + pCurPriv->height - 1;
++ W100MapToDevice(w100c, &cursorBox, &deviceBox);
++
++ if (deviceBox.x1 < 0) {
++ xoffs = -deviceBox.x1;
++ deviceBox.x1 = 0;
+ }
+
-+ tx = W100MapToHWX(w100c, x, y, pCurPriv->width, pCurPriv->height);
-+ ty = W100MapToHWY(w100c, x, y, pCurPriv->width, pCurPriv->height);
-+
-+ DBG_IMAGEON(("W100MoveCursor dst(x:%d,y:%d),"
-+ "mapped(x:%d,y:%d,xoffs:%d,yoffs:%d\n",
-+ x, y, tx, ty, xoffs, yoffs));
++ if (deviceBox.y1 < 0) {
++ yoffs = -deviceBox.y1;
++ deviceBox.y1 = 0;
++ }
++
++ hpos.f.cur_h_start = graphic_hdisp.f.graphic_h_start + deviceBox.x1;
++ hpos.f.cur_h_end = graphic_hdisp.f.graphic_h_start + deviceBox.x2 + 1;
++ hpos.f.cur_en = 1;
++ vpos.f.cur_v_start = graphic_vdisp.f.graphic_v_start + deviceBox.y1;
++ vpos.f.cur_v_end = graphic_vdisp.f.graphic_v_start + deviceBox.y2 + 1;
+
+ cursor_offset.f.cur_x_offset = xoffs;
+ cursor_offset.f.cur_y_offset = yoffs;
+ cursor_offset.f.cur_offset = (CARD32)
+ W100_HOST2CARD(pCurPriv->area->vidmem->base
+ + pCurPriv->area->offset);
-+ hpos.f.cur_en = 1;
-+ hpos.f.cur_h_start = graphic_hdisp.f.graphic_h_start + tx;
-+ hpos.f.cur_h_end = hpos.f.cur_h_start + pCurPriv->width;
-+ vpos.f.cur_v_start = graphic_vdisp.f.graphic_v_start + ty;
-+ vpos.f.cur_v_end = vpos.f.cur_v_start + pCurPriv->height;
++ DBG_IMAGEON(("W100MoveCursor dst(x:%d,y:%d),"
++ "hwpos(hpos.start:%d,hpos.end:%d,vpos.start:%d,vpos.end:%d),"
++ "mapped(x:%d,y:%d,xoffs:%d,yoffs:%d)\n",
++ x, y,
++ hpos.f.cur_h_start, hpos.f.cur_h_end,
++ vpos.f.cur_v_start, vpos.f.cur_v_end,
++ deviceBox.x1, deviceBox.y1, xoffs, yoffs));
+
+ W100DisableDisplayUpdate(w100c);
+ MMIO_OUT32(mmCURSOR1_OFFSET, cursor_offset.val);
@@ -1199,7 +1272,6 @@
+
+}
+
-+
+static Bool
+W100RealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
@@ -1207,6 +1279,7 @@
+ W100CardInfo(pScreenPriv);
+ W100ScreenInfo(pScreenPriv);
+ W100Cursor *pCurPriv = &w100s->cursor;
++ DBG_IMAGEON(("W100RealizeCursor\n"));
+
+ if (!pScreenPriv->enabled) {
+ return TRUE;
@@ -1225,6 +1298,7 @@
+static Bool
+W100UnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
++ DBG_IMAGEON(("W100UnrealizeCursor\n"));
+ return TRUE;
+}
+
@@ -1320,6 +1394,11 @@
+ }
+ if (pCurPriv->area == NULL) {
+ FatalError("Couldn't allocate offscreen memory for cursor.\n");
++ } else {
++ DBG_IMAGEON(("Cursor memory at 0x%08x(0x%08x)\n",
++ pCurPriv->area->vidmem->base + pCurPriv->area->offset,
++ W100_HOST2CARD(pCurPriv->area->vidmem->base
++ + pCurPriv->area->offset)));
+ }
+ if (pCurPriv->pCursor) {
+ int x, y;
@@ -1348,6 +1427,8 @@
+ if (pCurPriv->pCursor) {
+ W100UnloadCursor(pScreen);
+ }
++
++ pCurPriv->area = NULL;
+}
+
+Bool
@@ -1392,8 +1473,8 @@
+ pCurPriv->pCursor = NULL;
+}
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_draw.c
-@@ -0,0 +1,241 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_draw.c
+@@ -0,0 +1,238 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -1442,6 +1523,7 @@
+ KdScreenPriv(pPix->drawable.pScreen);
+ W100ScreenInfo(pScreenPriv);
+ W100CardInfo(pScreenPriv);
++ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
+ int fifoEntries = 4;
+
+ DBG_IMAGEON(("W100PrepareSolid(alu:%d, pm:0x%08x, fg:%d)\n",
@@ -1574,7 +1656,7 @@
+ W100ScreenInfo(pScreenPriv);
+
+
-+ DBG_IMAGEON(("W100InitAccel: %d/%d depth/bpp\n",
++ DBG_IMAGEON(("--W100InitAccel: %d/%d depth/bpp\n",
+ pScreenPriv->screen->fb[0].depth,
+ pScreenPriv->screen->fb[0].bitsPerPixel));
+
@@ -1588,7 +1670,7 @@
+ w100s->kaa.DoneCopy = W100DoneCopy;
+
+ w100s->kaa.flags |= KAA_OFFSCREEN_PIXMAPS;
-+ /* Offset alignment, not sure if this is enough */
++ /* Offset alignment, not sure if this is enought */
+ w100s->kaa.offsetAlign = 0;
+ w100s->kaa.pitchAlign = 16;
+
@@ -1606,7 +1688,7 @@
+ W100ScreenInfo(pScreenPriv);
+ W100CardInfo(pScreenPriv);
+
-+ DBG_IMAGEON(("W100EnableAccel\n"));
++ DBG_IMAGEON(("--W100EnableAccel\n"));
+
+ w100s->kaa.PrepareBlend = NULL;
+ w100s->kaa.Blend = NULL;
@@ -1617,27 +1699,23 @@
+ w100s->kaa.DoneComposite = NULL;
+ w100s->kaa.UploadToScreen = NULL;
+ w100s->kaa.UploadToScratch = NULL;
-+
-+ W100SetupGraphicEngine(w100c);
-+ W100SetupGraphicWindow(w100c);
-+
+ kaaMarkSync(pScreen);
+}
+
+void
+W100DisableAccel(ScreenPtr pScreen)
+{
-+ DBG_IMAGEON(("W100DisableAccel\n"));
++ DBG_IMAGEON(("--W100DisableAccel\n"));
+}
+
+void
+W100FiniAccel(ScreenPtr pScreen)
+{
-+ DBG_IMAGEON(("W100FiniAccel\n"));
++ DBG_IMAGEON(("--W100FiniAccel\n"));
+}
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon.h
-@@ -0,0 +1,229 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon.h
+@@ -0,0 +1,284 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -1689,6 +1767,10 @@
+#define W100_CARD2HOST(x) (w100c->mem_base + (CARD32)(x))
+#define W100_HOST2CARD(x) ((x) - (CARD32)(w100c->mem_base))
+#define W100_MEMAREAS (2)
++#define W100_INTMEM (0)
++#define W100_EXTMEM (1)
++
++#define W100_SYSFS_BASE "/sys/bus/platform/devices/w100fb/"
+
+#define MMIO_OUT32(a, v) (*(VOL32 *)((w100c->reg_base) + (a)) = (v))
+#define MMIO_IN32(a) (*(VOL32 *)((w100c->reg_base) + (a)))
@@ -1696,6 +1778,8 @@
+#define W100_MAX(x, y) ((x) > (y) ? x : y)
+#define W100_MIN(x, y) ((x) < (y) ? x : y)
+
++#define W100_ALIGN(q, a) ((q + a - 1) & ~(a - 1))
++
+#define TIMEOUT_LOCALS struct timeval _target, _curtime;
+
+static inline Bool
@@ -1722,12 +1806,38 @@
+typedef volatile CARD16 VOL16;
+typedef volatile CARD32 VOL32;
+
-+struct pci_id_entry {
++typedef struct _W100CardEntry {
+ CARD16 vendor;
+ CARD16 device;
+ CARD8 caps;
+ char *name;
-+};
++} W100CardEntry;
++
++
++typedef enum _W100Caps {
++ W100XVSupport = 1
++} W100Caps;
++
++typedef struct _W100ModeSpec {
++ CARD16 width;
++ CARD16 height;
++ CARD8 bpp;
++ CARD8 fbpool;
++ Bool supported;
++} W100ModeSpec;
++
++typedef struct _W100BoxRec {
++ CARD16 x;
++ CARD16 y;
++ CARD16 w;
++ CARD16 h;
++} W100BoxRec, *W100BoxPtr;
++
++typedef struct _W100Mode {
++ CARD16 width;
++ CARD16 height;
++ CARD8 bpp;
++} W100Mode;
+
+typedef struct _W100MemArea {
+ CARD8 *start;
@@ -1735,29 +1845,36 @@
+ CARD8 priority;
+} W100MemArea;
+
++typedef struct _W100StartupInfo {
++ W100CardEntry *card_id;
++ W100Mode mode;
++ Bool portrait;
++ int randr;
++} W100StartupInfo;
++
+typedef struct _W100CardInfo {
+ FbdevPriv fbdev;
-+ struct pci_id_entry *pci_id;
++ W100CardEntry *card_id;
+ CARD8 *mem_base;
+ CARD8 *reg_base;
-+ W100MemArea memareas[W100_MEMAREAS];
++ W100MemArea **memareas;
++ int num_memareas;
+ int cmdfifo_entries;
+ struct {
+ CARD32 ENG_CNTL;
+ CARD32 VIDEO_CTRL;
+ CARD32 GRAPHIC_H_DISP;
+ CARD32 GRAPHIC_V_DISP;
++ CARD32 DISP_DEBUG2;
+ } regs;
+ struct {
+ CARD8 *offset;
-+ CARD16 x;
-+ CARD16 y;
+ CARD16 width;
+ CARD16 height;
+ int randr;
++ W100ModeSpec *mode;
+ CARD8 bpp;
-+ } hwScreen;
-+ int defaultRandR;
++ } hw_window;
+ CARD8 last_dst_videomem;
+ CARD8 last_src_videomem;
+ struct {
@@ -1823,23 +1940,39 @@
+ CARD32 videoStatus;
+ CARD32 videoCtrl;
+ RegionRec clip;
-+ KdOffscreenArea *offSurface;
-+ CARD32 offSize;
-+ KdOffscreenArea *ovlSurface;
-+ CARD32 ovlSize;
-+ CARD32 YPlaneOffset;
-+ CARD32 UPlaneOffset;
-+ CARD32 VPlaneOffset;
-+ CARD32 colorKey;
-+ CARD8 brightness;
-+ CARD32 maxOverlaySize;
-+ CARD16 ovlX;
-+ CARD16 ovlY;
-+ CARD16 ovlWidth;
-+ CARD16 ovlHeight;
-+ CARD8 videoHorExp;
-+ CARD8 videoVerExp;
-+ int id;
++ struct {
++ int width; /* Source width */
++ int height; /* Source height */
++ unsigned char *buffer; /* Source buffer */
++ int id; /* Source FOURCC */
++ int size; /* Size of source rect (bytes) */
++ KdOffscreenArea *surface; /* Source surface (on card memory) */
++ BoxRec box; /* Source rect boundaries */
++ } src;
++ struct {
++ BoxRec box; /* Screen rectangle */
++ } dst;
++ struct {
++ int size; /* Size of the overlay surface (bytes) */
++ KdOffscreenArea *surface; /* Overlay surface (on card memory) */
++ BoxRec box; /* Overlay box (util size) */
++ BoxRec frame; /* Overlay box (plus corrections) */
++ Bool changed; /* To avoid recalculations */
++ int horExp; /* Horizontal expansion */
++ int verExp; /* Vertical expansion */
++ int maxSize; /* Maximum allowed surface size (bytes) */
++ int colorKey; /* Colour to replace with overlay */
++ int brightness; /* Brigthness */
++ } ovl;
++ struct {
++ int size; /* Number of planes */
++ int bpp; /* bpp of the planes */
++ int offset[3]; /* Planes offsets */
++ CARD32 yplane; /* Offset (card) of Y plane */
++ CARD32 uplane; /* Offset (card) of U plane */
++ CARD32 vplane; /* Offset (card) of V plane */
++ } planes;
++ Bool changed; /* To track changes and avoid recalculations */
+} W100PortPrivRec, *W100PortPrivPtr;
+
+extern KdCardFuncs W100Funcs;
@@ -1868,7 +2001,7 @@
+
+#endif /* _IMAGEON_H_ */
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_regs.h
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_regs.h
@@ -0,0 +1,4155 @@
+/*
+ * Copyright © 2007 Manuel Teira
@@ -6026,7 +6159,7 @@
+
+#endif
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_stub.c
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_stub.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright © 2007 Manuel Teira
@@ -6057,10 +6190,10 @@
+#include "imageon_regs.h"
+#include "klinux.h"
+
-+extern struct pci_id_entry w100_pci_ids[];
++extern W100CardEntry w100_cards[];
+
+static Bool
-+FindW100(CARD16 vendor, CARD16 device, CARD32 count, KdCardAttr * attr)
++FindW100(CARD16 vendor, CARD16 device, KdCardAttr * attr)
+{
+ CARD8 *mmio;
+ CARD32 chip_id;
@@ -6072,7 +6205,7 @@
+
+ chip_id = (*(VOL32 *)(mmio + mmCHIP_ID));
+ if ((vendor | (device << 16)) == chip_id) {
-+ ErrorF("Found W100 Chip ID: %08x\n\n", chip_id);
++ ErrorF("(I) Found W100 Chip ID: %08x\n\n", chip_id);
+ attr->deviceID = device;
+ attr->vendorID = vendor;
+ found = TRUE;
@@ -6085,12 +6218,12 @@
+void
+InitCard(char *name)
+{
-+ struct pci_id_entry *id;
++ int i;
++ W100CardEntry *entry;
+ KdCardAttr attr;
+
-+ for (id = w100_pci_ids; id->name != NULL; id++) {
-+ int j = 0;
-+ if (FindW100(id->vendor, id->device, j++, &attr)) {
++ for (entry = w100_cards; entry->name; entry++) {
++ if (FindW100(entry->vendor, entry->device, &attr)) {
+ KdCardInfoAdd(&W100Funcs, &attr, 0);
+ break;
+ }
@@ -6124,8 +6257,8 @@
+ return KdProcessArgument(argc, argv, i);
+}
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_support.c
-@@ -0,0 +1,1306 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_support.c
+@@ -0,0 +1,1474 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -6196,6 +6329,9 @@
+ /* GXset */ 0xff, /* 1 */
+};
+
++extern W100ModeSpec w100_modes[];
++extern W100StartupInfo w100StartupInfo;
++
+void W100DisableDisplayUpdate(W100CardInfo *w100c)
+{
+ disp_db_buf_cntl_wr_u disp_db_buf_cntl;
@@ -6234,8 +6370,8 @@
+ dp_datatype_u dp_datatype;
+
+ DBG_IMAGEON(("W100SetupGraphicEngine(offset:%p, pitch:%d)\n",
-+ w100c->hwScreen.offset,
-+ w100c->hwScreen.width));
++ w100c->hw_window.offset,
++ w100c->hw_window.width));
+
+ eng_cntl.val = MMIO_IN32(mmENG_CNTL);
+ eng_cntl.f.erc_reg_wr_ws = 0;
@@ -6253,18 +6389,18 @@
+ MMIO_OUT32(mmDEFAULT_SC_BOTTOM_RIGHT, bottomright.val);
+
+ dpitch.val = 0;
-+ dpitch.f.dst_pitch = w100c->hwScreen.width;
++ dpitch.f.dst_pitch = w100c->hw_window.width;
+ MMIO_OUT32(mmDST_PITCH, dpitch.val);
+
+ doffset.val = 0;
-+ doffset.f.dst_offset = (CARD32) w100c->hwScreen.offset;
++ doffset.f.dst_offset = (CARD32) w100c->hw_window.offset;
+ MMIO_OUT32(mmDST_OFFSET, doffset.val);
+
+ spitch.val = 0;
-+ spitch.f.src_pitch = w100c->hwScreen.width;
++ spitch.f.src_pitch = w100c->hw_window.width;
+ MMIO_OUT32(mmSRC_PITCH, spitch.val);
+ soffset.val = 0;
-+ soffset.f.src_offset = (CARD32) w100c->hwScreen.offset;
++ soffset.f.src_offset = (CARD32) w100c->hw_window.offset;
+ MMIO_OUT32(mmSRC_OFFSET, soffset.val);
+
+ tl.f.sc_left = tl.f.sc_top = 0;
@@ -6340,90 +6476,126 @@
+ ErrorF("<-W100ResetGraphicEngine\n");
+}
+
-+void W100SetupGraphicWindow(W100CardInfo *w100c)
++W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode)
+{
-+ CARD32 offset = 0;
-+ graphic_ctrl_u gc;
-+ graphic_pitch_u gp;
-+ graphic_offset_u go;
-+ pclk_cntl_u pclk_cntl;
-+
-+ DBG_IMAGEON(("W100SetupGraphicWindow(offset:%p, x:%d, y:%d, "
-+ "width:%d, height:%d, randr:%d)\n",
-+ w100c->hwScreen.offset,
-+ w100c->hwScreen.x,
-+ w100c->hwScreen.y,
-+ w100c->hwScreen.width,
-+ w100c->hwScreen.height,
-+ w100c->hwScreen.randr));
-+
-+ gc.val = 0;
-+ gc.f.color_depth = COLOR_DEPTH_A555;
-+ gc.f.en_crtc = 1;
-+ gc.f.en_graphic_crtc = 1;
-+ gc.f.en_graphic_req = 1;
-+ gc.f.lcd_pclk_on = 1;
-+ gc.f.lcd_sclk_on = 1;
-+ gc.f.low_power_on = 0;
-+
-+ pclk_cntl.val = 0;
-+
-+ switch (w100c->hwScreen.width) {
-+ case 240:
-+ case 320:
-+ gc.f.total_req_graphic = 0xa0;
-+ gc.f.req_freq = 0;
-+ pclk_cntl.f.pclk_post_div = 1;
-+ pclk_cntl.f.pclk_src_sel = W100_CLK_SRC_XTAL;
-+ break;
-+ case 480:
-+ case 640:
-+ pclk_cntl.f.pclk_src_sel = W100_CLK_SRC_PLL;
-+ gc.f.total_req_graphic = 0xf0;
-+ if (w100c->hwScreen.randr & (RR_Rotate_0 | RR_Rotate_180)) {
-+ gc.f.low_power_on = 1;
-+ gc.f.req_freq = 5;
-+ pclk_cntl.f.pclk_post_div = 2;
-+ } else {
-+ gc.f.req_freq = 4;
-+ pclk_cntl.f.pclk_post_div = 6;
++ W100ModeSpec *modes;
++ for (modes = w100_modes; modes->width; modes++) {
++ if ((modes->bpp == mode->bpp) &&
++ (((modes->width == mode->width) &&
++ (modes->height == mode->height)) ||
++ ((modes->width == mode->height) &&
++ (modes->height == mode->width)))) {
++ return modes;
+ }
-+ break;
+ }
++ ErrorF("No matching mode spec for %dx%d@%d\n",
++ mode->width, mode->height, mode->bpp);
++ return NULL;
++}
+
-+ gp.val = 0;
-+ gp.f.graphic_pitch = w100c->hwScreen.width * w100c->hwScreen.bpp / 8;
++W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height)
++{
++ unsigned int best_x = 0xffffffff;
++ unsigned int best_y = 0xffffffff;
++ W100ModeSpec *modes, *best_mode = NULL;
++ for (modes = w100_modes; modes->width; modes++) {
++ if (modes->supported) {
++ if (((modes->width >= width) && (modes->width < best_x)) &&
++ ((modes->height >= height) && (modes->height < best_y))) {
++ best_mode = modes;
++ best_x = modes->width;
++ best_y = modes->height;
++ } else if (((modes->width >= height) && (modes->width < best_y)) &&
++ ((modes->height >= width) && (modes->height < best_x))) {
++ best_mode = modes;
++ best_x = modes->height;
++ best_y = modes->width;
++ }
++ }
++ }
++ if (!best_mode) {
++ ErrorF("No matching mode spec for %dx%d\n", width, height);
++ }
++ return best_mode;
++}
++
++Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode)
++{
++ struct fb_var_screeninfo vinfo;
++ int i;
++
++ if (ioctl(w100c->fbdev.fd, FBIOGET_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("Unable to get framebuffer mode\n");
++ return FALSE;
++ }
++
++ mode->width = vinfo.xres;
++ mode->height = vinfo.yres;
++ mode->bpp = vinfo.bits_per_pixel;
++}
++
++Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes)
++{
++ struct fb_var_screeninfo vinfo;
++
++ vinfo.xres = vinfo.xres_virtual = modes->width;
++ vinfo.yres = vinfo.yres_virtual = modes->height;
++ vinfo.bits_per_pixel = modes->bpp;
++ vinfo.activate = FB_ACTIVATE_TEST;
+
-+ go.val = 0;
-+ go.f.graphic_offset = (CARD32) w100c->hwScreen.offset;
++ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("(W) Mode %dx%d@%d not supported\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel);
++ return FALSE;
++ }
++ DBG_IMAGEON(("(I) Mode %dx%d@%d supported\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel));
++ return TRUE;
++}
+
-+ switch(w100c->hwScreen.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ gc.f.portrait_mode = 0;
-+ offset = 0;
-+ break;
-+ case RR_Rotate_90:
-+ gc.f.portrait_mode = 1;
-+ offset = w100c->hwScreen.width * (w100c->hwScreen.height - 1);
-+ break;
-+ case RR_Rotate_180:
-+ gc.f.portrait_mode = 3;
-+ offset = w100c->hwScreen.width * w100c->hwScreen.height - 1;
-+ break;
-+ case RR_Rotate_270:
-+ gc.f.portrait_mode = 2;
-+ offset = w100c->hwScreen.width - 1;
-+ break;
++Bool W100SetFbMode(W100CardInfo *w100c)
++{
++ struct fb_var_screeninfo vinfo;
++ int randr = KdSubRotation(w100c->hw_window.randr, w100StartupInfo.randr);
++
++ if (randr & (RR_Rotate_0 | RR_Rotate_180)) {
++ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->width;
++ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->height;
++ } else {
++ vinfo.xres = vinfo.xres_virtual = w100c->hw_window.mode->height;
++ vinfo.yres = vinfo.yres_virtual = w100c->hw_window.mode->width;
++ }
++ vinfo.bits_per_pixel = w100c->hw_window.mode->bpp;
++ vinfo.activate = FB_ACTIVATE_NOW;
++ int flip = (w100c->hw_window.randr > RR_Rotate_90) ? 1 : 0;
++
++ DBG_IMAGEON(("Asking framebuffer for mode %dx%d@%d. Flipped:%d\n",
++ vinfo.xres, vinfo.yres, vinfo.bits_per_pixel, flip));
++ if (ioctl(w100c->fbdev.fd, FBIOPUT_VSCREENINFO, &vinfo) != 0) {
++ ErrorF("Error setting mode %dx%d@%d\n",
++ vinfo.xres,
++ vinfo.yres,
++ vinfo.bits_per_pixel);
++ return FALSE;
+ }
-+ offset = (offset * w100c->hwScreen.bpp / 8) & ~0x03;
-+ go.f.graphic_offset += offset;
++ W100SysFsSet(w100c, W100_SYSFS_BASE "flip", flip ? "1" : "0");
++ return TRUE;
++}
+
-+ W100DisableDisplayUpdate(w100c);
-+ MMIO_OUT32(mmPCLK_CNTL, pclk_cntl.val);
-+ MMIO_OUT32(mmGRAPHIC_CTRL, gc.val);
-+ MMIO_OUT32(mmGRAPHIC_OFFSET, go.val);
-+ MMIO_OUT32(mmGRAPHIC_PITCH, gp.val);
-+ W100EnableDisplayUpdate(w100c);
++void W100SetupGraphicWindow(W100CardInfo *w100c)
++{
++ DBG_IMAGEON(("W100SetupGraphicWindow(width:%d,height:%d,randr:%d)\n",
++ w100c->hw_window.width,
++ w100c->hw_window.height,
++ w100c->hw_window.randr));
++
++ if (!W100SetFbMode(w100c)) {
++ ErrorF("Error Setting Graphic Window\n");
++ }
+}
+
+void W100EnableGraphicWindow(W100CardInfo *w100c)
@@ -6711,7 +6883,6 @@
+ } else {
+ w100c->ctx.mask.enable = FALSE;
+ }
-+
+}
+
+Bool W100SetSource(KdScreenInfo *screen,
@@ -6817,150 +6988,140 @@
+ pPix->drawable.bitsPerPixel);
+}
+
-+CARD16 W100MapToHWX(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
++void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst)
+{
-+ CARD16 tx;
-+ switch (w100c->hwScreen.randr & RR_Rotate_All) {
++ switch (w100c->hw_window.randr & RR_Rotate_All) {
+ case RR_Rotate_0:
-+ tx = x;
++ dst->x1 = src->x1;
++ dst->y1 = src->y1;
++ dst->x2 = src->x2;
++ dst->y2 = src->y2;
+ break;
+ case RR_Rotate_90:
-+ tx = w100c->hwScreen.height - (y + w - 1);
++ dst->x1 = w100c->hw_window.height - src->y2 - 1;
++ dst->y1 = src->x1;
++ dst->x2 = w100c->hw_window.height - src->y1 - 1;
++ dst->y2 = src->x2;
+ break;
+ case RR_Rotate_180:
-+ tx = w100c->hwScreen.width - (x + w);
++ dst->x1 = w100c->hw_window.width - src->x2 - 1;
++ dst->y1 = w100c->hw_window.height - src->y2 - 1;
++ dst->x2 = w100c->hw_window.width - src->x1 - 1;
++ dst->y2 = w100c->hw_window.height - src->y1 - 1;
+ break;
+ case RR_Rotate_270:
-+ tx = y;
++ dst->x1 = src->y1;
++ dst->y1 = w100c->hw_window.width - src->x2 - 1;
++ dst->x2 = src->y2;
++ dst->y2 = w100c->hw_window.width - src->x1 - 1;
+ break;
-+ default:
-+ tx = x;
+ }
-+ return tx;
++ DBG_IMAGEON(("MapToDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ src->x1, src->y1, src->x2, src->y2,
++ dst->x1, dst->y1, dst->x2, dst->y2));
+}
+
-+CARD16 W100MapToHWY(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
++void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst)
+{
-+ CARD16 ty;
-+ switch (w100c->hwScreen.randr & RR_Rotate_All) {
++ switch (w100c->hw_window.randr & RR_Rotate_All) {
+ case RR_Rotate_0:
-+ ty = y;
++ dst->x1 = src->x1;
++ dst->y1 = src->y1;
++ dst->x2 = src->x2;
++ dst->y2 = src->y2;
+ break;
+ case RR_Rotate_90:
-+ ty = x;
++ dst->x1 = src->y1;
++ dst->y1 = w100c->hw_window.height - src->x2 - 1;
++ dst->x2 = src->y2;
++ dst->y2 = w100c->hw_window.height - src->x1 - 1;
+ break;
+ case RR_Rotate_180:
-+ ty = w100c->hwScreen.height - (y + h - 1);
++ dst->x1 = w100c->hw_window.width - src->x2 - 1;
++ dst->y1 = w100c->hw_window.height - src->y2 - 1;
++ dst->x2 = w100c->hw_window.width - src->x1 - 1;
++ dst->y2 = w100c->hw_window.height - src->y1 - 1;
+ break;
+ case RR_Rotate_270:
-+ ty = w100c->hwScreen.width - (x + w);
++ dst->x1 = w100c->hw_window.height - src->y2 - 1;
++ dst->y1 = src->x1;
++ dst->x2 = w100c->hw_window.width - src->y1 - 1;
++ dst->y2 = src->x2;
+ break;
-+ default:
-+ ty = y;
+ }
-+ return ty;
++ DBG_IMAGEON(("MapFromDevice (x1:%d,y1:%d,x2:%d,y2:%d)->(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ src->x1, src->y1, src->x2, src->y2,
++ dst->x1, dst->y1, dst->x2, dst->y2));
+}
+
-+CARD16 W100XformX(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
++void W100MoveTo(BoxPtr src, int x, int y)
++{
++ src->x1 += x;
++ src->y1 += y;
++ src->x2 += x;
++ src->y2 += y;
++}
++
++void W100ChangeOrigin(BoxPtr src, int x, int y)
++{
++ src->x1 -= x;
++ src->y1 -= y;
++ src->x2 -= x;
++ src->y2 -= y;
++}
++
++void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale)
++{
++ if (scale >= 0) {
++ dst->x1 = src->x1 << scale;
++ dst->x2 = src->x2 << scale;
++ dst->y1 = src->y1 << scale;
++ dst->y2 = src->y2 << scale;
++ } else {
++ dst->x1 = src->x1 >> -scale;
++ dst->x2 = src->x2 >> -scale;
++ dst->y1 = src->y1 >> -scale;
++ dst->y2 = src->y2 >> -scale;
++ }
++}
++
++void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y)
+{
-+ CARD16 tx;
+ switch (w100c->ctx.xform.randr & RR_Rotate_All) {
+ case RR_Rotate_0:
+ if (w100c->ctx.xform.mirror) {
-+ tx = x + w - 1;
++ *x = box->x2;
+ } else {
-+ tx = x;
++ *x = box->x1;
+ }
++ *y = box->y1;
+ break;
+ case RR_Rotate_90:
-+ tx = x + h - 1;
-+ break;
-+ case RR_Rotate_180:
++ *x = box->x2;
+ if (w100c->ctx.xform.mirror) {
-+ tx = x;
++ *y = box->y2;
+ } else {
-+ tx = x + w - 1;
++ *y = box->y1;
+ }
+ break;
-+ case RR_Rotate_270:
-+ default:
-+ tx = x;
-+ break;
-+ }
-+ return tx;
-+}
-+
-+CARD16 W100XformY(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
-+{
-+ CARD16 ty;
-+ switch (w100c->ctx.xform.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ ty = y;
-+ break;
-+ case RR_Rotate_90:
++ case RR_Rotate_180:
+ if (w100c->ctx.xform.mirror) {
-+ ty = y + w - 1;
++ *x = box->x1;
+ } else {
-+ ty = y;
++ *x = box->x2;
+ }
-+ break;
-+ case RR_Rotate_180:
-+ ty = y + h - 1;
++ *y = box->y2;
+ break;
+ case RR_Rotate_270:
-+ default:
++ *x = box->x1;
+ if (w100c->ctx.xform.mirror) {
-+ ty = y;
++ *y = box->y1;
+ } else {
-+ ty = y + w - 1;
++ *y = box->y2;
+ }
-+ break;
+ }
-+ return ty;
+}
-+
-+CARD16 W100XformW(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
-+{
-+ CARD16 tw;
-+
-+ switch (w100c->ctx.xform.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ case RR_Rotate_180:
-+ default:
-+ tw = w;
-+ break;
-+ case RR_Rotate_90:
-+ case RR_Rotate_270:
-+ tw = h;
-+ break;
-+ }
-+ return tw;
-+}
-+
-+CARD16 W100XformH(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h)
-+{
-+ CARD16 th;
-+
-+ switch (w100c->ctx.xform.randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ case RR_Rotate_180:
-+ default:
-+ th = h;
-+ break;
-+ case RR_Rotate_90:
-+ case RR_Rotate_270:
-+ th = w;
-+ break;
-+ }
-+ return th;
-+}
-+
++
+CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize)
+{
+ return W100_MAX(1, W100_MIN(31, ((16 * srcsize) + dstsize - 1) / dstsize));
@@ -6973,22 +7134,18 @@
+}
+
+
-+static void W100Blt(KdScreenInfo *screen,
-+ int randr,
-+ int bpp,
++static void W100Blt(KdScreenInfo *screen,
++ int randr, int bpp,
+ CARD32 srcOffset,
-+ CARD16 srcW,
-+ CARD16 srcH,
+ CARD16 srcPitch,
++ BoxPtr srcBox,
+ CARD32 dstOffset,
+ CARD16 dstPitch,
-+ CARD16 dstX,
-+ CARD16 dstY)
++ BoxPtr dstBox)
+{
+ ScreenPtr pScreen = screen->pScreen;
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+ CARD16 x, y, w, h;
+ int fifoEntries = 9;
+ Bool hasXForm = FALSE;
+ eng_cntl_u eng_cntl;
@@ -6997,12 +7154,8 @@
+ src_width_u src_width;
+ src_height_u src_height;
+ dst_width_height_u dst_width_height;
-+
-+ DBG_IMAGEON(("W100Blt(randr:%d,bpp:%d,srcOffset:0x%08x,"
-+ "srcW:%d,srcH:%d,srcPitch:%d,dstOffset:0x%08x,"
-+ "dstPitch:%d,dstX:%d,dstY:%d)\n",
-+ randr, bpp, srcOffset, srcW, srcH,
-+ srcPitch, dstOffset, dstPitch, dstX, dstY));
++ CARD16 dstX;
++ CARD16 dstY;
+
+ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
+ hasXForm = TRUE;
@@ -7016,21 +7169,28 @@
+ W100SetRotation(w100c, randr, FALSE);
+ W100SetSource(screen, srcPitch, srcOffset, bpp);
+ W100SetDestination(screen, dstPitch, dstOffset, bpp);
-+
-+ x = W100XformX(w100c, dstX, dstY, srcW, srcH);
-+ y = W100XformY(w100c, dstX, dstY, srcW, srcH);
-+ w = W100XformW(w100c, dstX, dstY, srcW, srcH);
-+ h = W100XformH(w100c, dstX, dstY, srcW, srcH);
-+
-+ src_x_y.f.src_y = 0;
-+ src_x_y.f.src_x = 0;
-+ dst_x_y.f.dst_x = x;
-+ dst_x_y.f.dst_y = y;
-+ src_width.f.src_width = srcW;
-+ src_height.f.src_height = srcH;
-+ dst_width_height.f.dst_height = h;
-+ dst_width_height.f.dst_width_b0 = w & 0xff;
-+ dst_width_height.f.dst_width_b1 = (w >> 8) & 0x3f;
++ W100TrajectoryOrigin(w100c, dstBox, &dstX, &dstY);
++
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ dst_x_y.f.dst_x = dstX;
++ dst_x_y.f.dst_y = dstY;
++ src_width.f.src_width = srcBox->x2 - srcBox->x1 + 1;
++ src_height.f.src_height = srcBox->y2 - srcBox->y1 + 1;
++ dst_width_height.f.dst_height = dstBox->y2 - dstBox->y1 + 1;
++ dst_width_height.f.dst_width_b0 = (dstBox->x2 - dstBox->x1 + 1) & 0xff;
++ dst_width_height.f.dst_width_b1 = ((dstBox->x2 - dstBox->x1 + 1) >> 8) & 0x3f;
++
++ DBG_IMAGEON(("W100Blt src(x:%d,y:%d,w:%d,h:%d) dst(x:%d,y:%d,w:%d,h:%d)\n",
++ src_x_y.f.src_x,
++ src_x_y.f.src_y,
++ src_width.f.src_width,
++ src_height.f.src_height,
++ dst_x_y.f.dst_x,
++ dst_x_y.f.dst_y,
++ dst_width_height.f.dst_width_b0 |
++ dst_width_height.f.dst_width_b1 << 8,
++ dst_width_height.f.dst_height));
+
+ if (W100WaitCmdFifoEntries(w100c, fifoEntries)) {
+ MMIO_OUT32(mmDST_PITCH, w100c->ctx.dst.pitch);
@@ -7060,20 +7220,17 @@
+ int randr,
+ int bpp,
+ CARD32 srcOffset,
-+ CARD16 srcW,
-+ CARD16 srcH,
+ CARD16 srcPitch,
++ BoxPtr srcBox,
+ CARD32 dstOffset,
+ CARD16 dstPitch,
-+ CARD16 dstX,
-+ CARD16 dstY,
++ BoxPtr dstBox,
+ CARD8 xscaler,
+ CARD8 yscaler)
+{
+ ScreenPtr pScreen = screen->pScreen;
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+ CARD16 x, y, w, h, sw, sh;
+ Bool hasXForm = FALSE;
+ dp_datatype_u dp_datatype;
+ dp_mix_u dp_mix;
@@ -7087,13 +7244,22 @@
+ dst_width_height_u dst_width_height;
+ int firstStage = 10;
+ int secondStage = 10;
-+
-+ DBG_IMAGEON(("W100StretchBlt(randr:%d,bpp:%d,srcOffset:0x%08x,"
-+ "srcW:%d,srcH:%d,srcPitch:%d,dstOffset:0x%08x,"
-+ "dstPitch:%d,dstX:%d,dstY:%d,xscaler:%d,yscaler:%d)\n",
-+ randr, bpp, srcOffset, srcW, srcH,
-+ srcPitch, dstOffset, dstPitch,
-+ dstX, dstY, xscaler, yscaler));
++ CARD16 dx, dy, sw, sh, dw, dh;
++ BoxRec dst;
++
++ DBG_IMAGEON(("W100StretchBlt(randr:%d,bpp:%d,"
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "xscaler:%d,yscaler:%d)\n",
++ randr, bpp,
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2,
++ srcPitch, srcOffset,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2,
++ dstPitch, dstOffset,
++ xscaler, yscaler));
++
++ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler);
++ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler);
+
+ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
+ hasXForm = TRUE;
@@ -7102,12 +7268,23 @@
+ eng_cntl.f.dis_src_uses_dst_dirmaj = 1;
+ ++firstStage;
+ ++secondStage;
++ dh = sw;
++ dw = sh;
++ } else {
++ dh = sh;
++ dw = sw;
+ }
+
++ dst.x1 = dstBox->x1;
++ dst.y1 = dstBox->y1;
++ dst.x2 = dst.x1 + dw - 1;
++ dst.y2 = dst.y1 + dh - 1;
++
+ W100ResetContext(w100c);
+ W100SetRotation(w100c, randr, FALSE);
+ W100SetSource(screen, srcPitch, srcOffset, bpp);
+ W100SetDestination(screen, dstPitch, dstOffset, bpp);
++ W100TrajectoryOrigin(w100c, &dst, &dx, &dy);
+
+ src_inc.val = 0;
+ src_inc.f.src_xinc = xscaler;
@@ -7129,23 +7306,15 @@
+ e2.f.srcblend = E2_SRCBLEND_ZERO;
+ e2.f.dstblend = E2_DSTBLEND_ZERO;
+
-+ sw = W100ApplyScaler(srcW, xscaler);
-+ sh = W100ApplyScaler(srcH, yscaler);
-+
-+ x = W100XformX(w100c, dstX, dstY, sw, sh);
-+ y = W100XformY(w100c, dstX, dstY, sw, sh);
-+ w = W100XformW(w100c, dstX, dstY, sw, sh);
-+ h = W100XformH(w100c, dstX, dstY, sw, sh);
-+
-+ src_x_y.f.src_y = 0;
-+ src_x_y.f.src_x = 0;
-+ dst_x_y.f.dst_x = x;
-+ dst_x_y.f.dst_y = y;
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ dst_x_y.f.dst_x = dx;
++ dst_x_y.f.dst_y = dy;
+ src_width.f.src_width = sw + 1;
+ src_height.f.src_height = sh;
-+ dst_width_height.f.dst_height = h;
-+ dst_width_height.f.dst_width_b0 = w & 0xff;
-+ dst_width_height.f.dst_width_b1 = (w >> 8) & 0x3f;
++ dst_width_height.f.dst_height = dh;
++ dst_width_height.f.dst_width_b0 = dw & 0xff;
++ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f;
+
+
+ if (W100WaitCmdFifoEntries(w100c, firstStage)) {
@@ -7194,20 +7363,17 @@
+ int randr,
+ int bpp,
+ CARD32 srcOffset,
-+ CARD16 srcW,
-+ CARD16 srcH,
+ CARD16 srcPitch,
++ BoxPtr srcBox,
+ CARD32 dstOffset,
+ CARD16 dstPitch,
-+ CARD16 dstX,
-+ CARD16 dstY,
++ BoxPtr dstBox,
+ CARD8 xscaler,
+ CARD8 yscaler)
+{
+ ScreenPtr pScreen = screen->pScreen;
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
-+ CARD16 x, y, w, h, sw, sh;
+ Bool hasXForm = FALSE;
+ dp_datatype_u dp_datatype;
+ dp_mix_u dp_mix;
@@ -7222,14 +7388,23 @@
+ dst_width_height_u dst_width_height;
+ int firstStage = 11;
+ int secondStage = 11;
-+
-+ DBG_IMAGEON(("W100ScaledBlt(randr:%d,bpp:%d,srcOffset:0x%08x,"
-+ "srcW:%d,srcH:%d,srcPitch:%d,dstOffset:0x%08x,"
-+ "dstPitch:%d,dstX:%d,dstY:%d,xscaler:%d,yscaler:%d)\n",
-+ randr, bpp, srcOffset, srcW, srcH,
-+ srcPitch, dstOffset, dstPitch,
-+ dstX, dstY, xscaler, yscaler));
-+
++ CARD16 dx, dy, sw, sh, dw, dh;
++ BoxRec dst;
++
++ DBG_IMAGEON(("W100ScaledBlt(randr:%d,bpp:%d,"
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,pitch:%d,offset:%d),"
++ "xscaler:%d,yscaler:%d)\n",
++ randr, bpp,
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2,
++ srcPitch, srcOffset,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2,
++ dstPitch, dstOffset,
++ xscaler, yscaler));
++
++ sw = W100ApplyScaler(srcBox->x2 - srcBox->x1 + 1, xscaler);
++ sh = W100ApplyScaler(srcBox->y2 - srcBox->y1 + 1, yscaler);
++
+ if (randr & (RR_Rotate_90|RR_Rotate_270)) {
+ hasXForm = TRUE;
+ eng_cntl.val = w100c->regs.ENG_CNTL;
@@ -7237,12 +7412,27 @@
+ eng_cntl.f.dis_src_uses_dst_dirmaj = 1;
+ ++firstStage;
+ ++secondStage;
++ dh = sw;
++ dw = sh;
++ } else {
++ dh = sh;
++ dw = sw;
+ }
+
++ dst.x1 = dstBox->x1;
++ dst.y1 = dstBox->y1;
++ dst.x2 = dst.x1 + dw - 1;
++ dst.y2 = dst.y1 + dh - 1;
++
+ W100ResetContext(w100c);
+ W100SetRotation(w100c, randr, FALSE);
+ W100SetSource(screen, srcPitch, srcOffset, bpp);
+ W100SetDestination(screen, dstPitch, dstOffset, bpp);
++ W100TrajectoryOrigin(w100c, &dst, &dx, &dy);
++
++ DBG_IMAGEON(("Corrected dst(x1:%d,y1:%d,x2:%d,y2:%d). Origin(%d,%d)\n",
++ dst.x1, dst.y1, dst.x2, dst.y2,
++ dx, dy));
+
+ src_inc.val = 0;
+ src_inc.f.src_xinc = xscaler;
@@ -7267,25 +7457,18 @@
+ e2.f.srcblend = E2_SRCBLEND_ZERO;
+ e2.f.dstblend = E2_DSTBLEND_ZERO;
+
-+ sw = W100ApplyScaler(srcW, xscaler);
-+ sh = W100ApplyScaler(srcH, yscaler);
-+
-+ x = W100XformX(w100c, dstX, dstY, sw, sh);
-+ y = W100XformY(w100c, dstX, dstY, sw, sh);
-+ w = W100XformW(w100c, dstX, dstY, sw, sh);
-+ h = W100XformH(w100c, dstX, dstY, sw, sh);
+
-+ src_x_y.f.src_y = 0;
-+ src_x_y.f.src_x = 0;
-+ src2_x_y.f.src_y = 0 + 4;
-+ src2_x_y.f.src_x = 0;
-+ dst_x_y.f.dst_x = x;
-+ dst_x_y.f.dst_y = y;
++ src_x_y.f.src_x = srcBox->x1;
++ src_x_y.f.src_y = srcBox->y1;
++ src2_x_y.f.src_x = srcBox->x1;
++ src2_x_y.f.src_y = srcBox->y1 + 4;
++ dst_x_y.f.dst_x = dx;
++ dst_x_y.f.dst_y = dy;
+ src_width.f.src_width = sw + 1;
+ src_height.f.src_height = sh;
-+ dst_width_height.f.dst_height = h;
-+ dst_width_height.f.dst_width_b0 = w & 0xff;
-+ dst_width_height.f.dst_width_b1 = (w >> 8) & 0x3f;
++ dst_width_height.f.dst_height = dh;
++ dst_width_height.f.dst_width_b0 = dw & 0xff;
++ dst_width_height.f.dst_width_b1 = (dw >> 8) & 0x3f;
+
+ if (W100WaitCmdFifoEntries(w100c, firstStage)) {
+ /* Set Source */
@@ -7338,82 +7521,93 @@
+}
+
+void W100PlanarBlt(KdScreenInfo *screen,
-+ int planes,
-+ int bpp,
-+ int randr,
++ int planes, int planeOffsets[],
++ int bpp, int randr,
+ KdOffscreenArea *src,
+ int srcW,
-+ int srcPitch,
+ int srcH,
++ BoxPtr srcBox,
+ KdOffscreenArea *dst,
-+ int planeOffsets[],
+ int dstW,
-+ int dstPitch,
+ int dstH,
-+ int dstX,
-+ int dstY)
++ BoxPtr dstBox)
+{
+ ScreenPtr pScreen = screen->pScreen;
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
+ W100ScreenInfo(pScreenPriv);
++
++ CARD16 dstBoxW, dstBoxH, srcBoxW, srcBoxH;
+ CARD8 *srcOffset, *dstBase, *dstOffset;
-+ int xoffs, yoffs;
++ int xerror, yerror;
+ unsigned int subsampling[] = {0, 1, 1};
+ int plane;
-+ int stretch = ((srcW != dstW) || (srcH != dstH));
++ srcBoxW = srcBox->x2 - srcBox->x1 + 1;
++ srcBoxH = srcBox->y2 - srcBox->y1 + 1;
++ if (randr & (RR_Rotate_90 | RR_Rotate_270)) {
++ dstBoxW = dstBox->y2 - dstBox->y1 + 1;
++ dstBoxH = dstBox->x2 - dstBox->x1 + 1;
++ } else {
++ dstBoxW = dstBox->x2 - dstBox->x1 + 1;
++ dstBoxH = dstBox->y2 - dstBox->y1 + 1;
++ }
++
++ Bool stretch = ((srcBoxW != dstBoxW) || (srcBoxH != dstBoxH));
+ CARD8 xscaler, yscaler;
++ BoxRec dstb = *dstBox;
+
+ DBG_IMAGEON(("W100PlanarBlt(planes:%d,bpp:%d,randr:%d,"
-+ "src(w:%d,pitch:%d,h:%d),"
-+ "dst(w:%d,pitch:%d,h:%d,x:%d,y:%d)\n",
++ "src(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d),"
++ "dst(x1:%d,y1:%d,x2:%d,y2:%d,w:%d,h:%d)\n",
+ planes, bpp, randr,
-+ srcW, srcPitch, srcH,
-+ dstW, dstPitch, dstH, dstX, dstY));
++ srcBox->x1, srcBox->y1, srcBox->x2, srcBox->y2, srcW, srcH,
++ dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2, dstW, dstH));
+
++ xerror = yerror = 0;
+ if (stretch) {
-+ xscaler = W100GetScaler(dstW, srcW);
-+ yscaler = W100GetScaler(dstH, srcH);
-+ xoffs = yoffs = 0;
++ xscaler = W100GetScaler(dstBoxW, srcBoxW);
++ yscaler = W100GetScaler(dstBoxH, srcBoxH);
+ if (xscaler != 16 || yscaler != 16) {
-+ xoffs = (dstW - W100ApplyScaler(srcW, xscaler)) / 2;
-+ yoffs = (dstH - W100ApplyScaler(srcH, yscaler)) / 2;
++ xerror = (dstBoxW - W100ApplyScaler(srcBoxW, xscaler)) / 2;
++ yerror = (dstBoxH - W100ApplyScaler(srcBoxH, yscaler)) / 2;
+ DBG_IMAGEON(("Stretching with xscaler:%d,yscaler:%d,"
-+ "xoffs:%d,yoffs:%d\n",
-+ xscaler, yscaler, xoffs, yoffs));
++ "xerror:%d,yerror:%d\n",
++ xscaler, yscaler, xerror, yerror));
+ } else {
-+ xoffs = yoffs = 0;
++ xerror = yerror = 0;
+ stretch = FALSE;
+ }
+ }
+
++ W100MoveTo(&dstb, xerror, yerror);
++
+ srcOffset = src->vidmem->base + src->offset;
+ dstBase = dst->vidmem->base + dst->offset;
+ for (plane = 0; plane < planes; plane++) {
++ BoxRec srcCBox;
++ BoxRec dstCBox;
+ dstOffset = dstBase + planeOffsets[plane];
++ W100ScaleBox(srcBox, &srcCBox, -subsampling[plane]);
++ W100ScaleBox(&dstb, &dstCBox, -subsampling[plane]);
+ if (stretch) {
+ W100ScaledBlt(screen, randr, bpp,
+ (CARD32) srcOffset,
+ srcW >> subsampling[plane],
-+ srcH >> subsampling[plane],
-+ srcPitch >> subsampling[plane],
++ &srcCBox,
+ (CARD32) dstOffset,
-+ dstPitch >> subsampling[plane],
-+ (dstX + xoffs) >> subsampling[plane],
-+ (dstY + yoffs) >> subsampling[plane],
++ dstW >> subsampling[plane],
++ &dstCBox,
+ xscaler, yscaler);
+ } else {
+ W100Blt(screen, randr, bpp,
+ (CARD32) srcOffset,
+ srcW >> subsampling[plane],
-+ srcH >> subsampling[plane],
-+ srcPitch >> subsampling[plane],
++ &srcCBox,
+ (CARD32) dstOffset,
-+ dstPitch >> subsampling[plane],
-+ dstX >> subsampling[plane],
-+ dstY >> subsampling[plane]);
++ dstW >> subsampling[plane],
++ &dstCBox);
+ }
-+ srcOffset += (srcPitch * srcH) >> (subsampling[plane] * 2);
++ srcOffset += (srcW * srcH) >> (subsampling[plane] * 2);
+ }
+}
+
@@ -7432,9 +7626,116 @@
+ return brightness.f.brightness;
+}
+
++int W100GetRotation(W100CardInfo *w100c)
++{
++ graphic_ctrl_u gc;
++ int randr;
++
++ gc.val = MMIO_IN32(mmGRAPHIC_CTRL);
++
++ switch (gc.f.portrait_mode) {
++ case 0:
++ randr = RR_Rotate_0;
++ break;
++ case 1:
++ randr = RR_Rotate_90;
++ break;
++ case 2:
++ randr = RR_Rotate_270;
++ break;
++ case 3:
++ randr = RR_Rotate_180;
++ break;
++ }
++ return randr;
++}
++
++Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value)
++{
++ FILE *fd;
++ if ((fd = fopen(path, "w")) == NULL) {
++ ErrorF("(E) Error in W100SysFsSet: Unable to open '%s'\n", path);
++ return FALSE;
++ }
++ fprintf(fd, "%s", value);
++ fclose(fd);
++ return TRUE;
++}
++
++Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value)
++{
++ FILE *fd;
++ if ((fd = fopen(path, "r")) == NULL) {
++ ErrorF("(E) Error in W100SysFsGet: Unable to open '%s'\n", path);
++ return FALSE;
++ }
++ fscanf(fd, "%s", value);
++ fclose(fd);
++ return TRUE;
++}
++
++void W100TransformTsLibCoordinates(long *x, long *y, void *closure)
++{
++ W100CardInfo *w100c = closure;
++
++ if (w100c->hw_window.mode->width == 320) {
++ *x >>= 1;
++ *y >>= 1;
++ }
++}
++
++void W100VSync(W100CardInfo *w100c)
++{
++ int timeout = 30000; /* VSync timeout = 30[ms] > 16.8[ms] */
++ active_v_disp_u active_v_disp;
++ disp_int_cntl_u disp_int_cntl;
++ gen_int_cntl_u gen_int_cntl;
++ gen_int_status_wr_u gen_int_status;
++
++ active_v_disp.val = MMIO_IN32(mmACTIVE_V_DISP);
++
++ /*set vline pos */
++ disp_int_cntl.val = 0;
++ disp_int_cntl.f.vline_int_pos = active_v_disp.f.active_v_end;
++ MMIO_OUT32(mmDISP_INT_CNTL, disp_int_cntl.val);
++
++ /* disable vline irq */
++ gen_int_cntl.val = MMIO_IN32(mmGEN_INT_CNTL);
++ gen_int_cntl.f.crtc_vline_mask = 0;
++ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val);
++
++ /* clear vline irq status */
++ gen_int_status.val = 0;
++ gen_int_status.f.crtc_vline_stat_ak = 1;
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++
++ /* enable vline irq */
++ gen_int_cntl.f.crtc_vline_mask = 1;
++ MMIO_OUT32(gen_int_cntl.val, mmGEN_INT_CNTL);
++
++ /* clear vline irq status */
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++
++ while (timeout > 0) {
++ if (MMIO_IN32(mmGEN_INT_STATUS) & 0x00000002) {
++ break;
++ }
++ usleep(1);
++ timeout--;
++ }
++
++ /* disable vline irq */
++ gen_int_cntl.f.crtc_vline_mask = 0;
++ MMIO_OUT32(mmGEN_INT_CNTL, gen_int_cntl.val);
++
++ /* clear vline irq status */
++ MMIO_OUT32(mmGEN_INT_STATUS, gen_int_status.val);
++}
++
++
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_video.c
-@@ -0,0 +1,1056 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_video.c
+@@ -0,0 +1,1172 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -7516,19 +7817,32 @@
+static struct {
+ CARD8 xfactor;
+ CARD8 yfactor;
-+} ovlResizers[10] = {
-+ { 0, 0 },
-+ { 1, 0 },
-+ { 0, 1 },
-+ { 1, 1 },
-+ { 2, 1 },
-+ { 1, 2 },
-+ { 2, 2 },
-+ { 3, 2 },
-+ { 2, 3 },
-+ { 3, 3 }
++} ovlResizers[NUM_OVL_RESIZERS] = {
++ { 0, 0 },
++ { 0, 1 }, { 1, 0 }, { 1, 1 },
++ { 1, 2 }, { 2, 1 }, { 2, 2 },
++ { 2, 3 }, { 3, 2 }, { 3, 3 }
+};
+
++static int W100SurfaceSize(W100PortPrivPtr port, short w, short h)
++{
++ int size = 0;
++ DBG_IMAGEON(("W100SurfaceSize for id=%08x, w=%d, h=%d\n",
++ port->src.id, w, h));
++
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ size = (3 * w * h) / 2;
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ size = w * h * 2;
++ break;
++ }
++ return size;
++}
++
+static void W100ClearSurface(KdScreenInfo *screen,
+ KdOffscreenArea *area,
+ CARD16 x,
@@ -7587,9 +7901,8 @@
+{
+ W100ScreenInfo *w100s = screen->driver;
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
-+
-+ CARD32 disp_debug = 0;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ CARD16 w, h, pitch;
+ video_ctrl_u video_ctrl;
+ video_y_offset_u video_y_offset;
+ video_y_pitch_u video_y_pitch;
@@ -7603,56 +7916,56 @@
+ graphic_h_disp_u graphic_h_disp;
+ graphic_v_disp_u graphic_v_disp;
+
-+ CARD16 w, h;
++ w = pitch = port->ovl.frame.x2 - port->ovl.frame.x1 + 1;
++ h = port->ovl.frame.y2 - port->ovl.frame.y1 + 1;
+
-+ DBG_IMAGEON(("W100OverlaySetup(ovlX:%d,ovlY:%d,ovlWidth:%d,ovlHeight:%d,"
-+ "videoHorExp:%d,videoVerExp:%d,YPlane:0x%08x,UPlane:0x%08x,"
-+ "VPlane:0x%08x\n",
-+ pPortPriv->ovlX, pPortPriv->ovlY,
-+ pPortPriv->ovlWidth, pPortPriv->ovlHeight,
-+ pPortPriv->videoHorExp, pPortPriv->videoVerExp,
-+ pPortPriv->YPlaneOffset, pPortPriv->UPlaneOffset,
-+ pPortPriv->VPlaneOffset));
++ ErrorF("W100OverlaySetup(ovlX:%d,ovlY:%d,ovlWidth:%d,ovlHeight:%d,"
++ "videoHorExp:%d,videoVerExp:%d,YPlane:0x%08x,UPlane:0x%08x,"
++ "VPlane:0x%08x)\n",
++ port->ovl.frame.x1, port->ovl.frame.y1, w, h,
++ port->ovl.horExp,
++ port->ovl.verExp,
++ port->planes.yplane,
++ port->planes.uplane,
++ port->planes.vplane);
+
-+ if (pPortPriv->videoStatus & W100_OVERLAY_CONFIGURED) {
++ if (port->videoStatus & W100_OVERLAY_CONFIGURED) {
+ return;
+ }
+
-+ w = pPortPriv->ovlWidth * (pPortPriv->videoHorExp + 1);
-+ h = pPortPriv->ovlHeight * (pPortPriv->videoVerExp + 1);
++ w <<= port->ovl.horExp;
++ h <<= port->ovl.verExp;
+
+ video_ctrl.val = w100c->regs.VIDEO_CTRL;
+
+ video_ctrl.f.video_inv_hor = 0;
+ video_ctrl.f.video_inv_ver = 0;
+ video_ctrl.f.yuv2rgb_option = 0;
-+ video_ctrl.f.video_hor_exp = pPortPriv->videoHorExp;
-+ video_ctrl.f.video_ver_exp = pPortPriv->videoVerExp;
++ video_ctrl.f.video_hor_exp = port->ovl.horExp;
++ video_ctrl.f.video_ver_exp = port->ovl.verExp;
+ video_ctrl.f.video_ch_sel = 0;
+
+ video_ctrl.f.yuv2rgb_en = 1;
+ //Only support this, by the moment
+ video_ctrl.f.video_mode = OVLFORMAT_YUV420;
+
-+ video_y_pitch.f.y_pitch = pPortPriv->ovlWidth;
-+ video_u_pitch.f.u_pitch = pPortPriv->ovlWidth >> 1;
-+ video_v_pitch.f.v_pitch = pPortPriv->ovlWidth >> 1;
+
-+ /*
-+ video_y_offset.f.y_offset = pPortPriv->YPlaneOffset +
-+ video_y_pitch.f.y_pitch * pPortPriv->ovlY + pPortPriv->ovlX;
-+ video_u_offset.f.u_offset = pPortPriv->UPlaneOffset +
-+ video_u_pitch.f.u_pitch * pPortPriv->ovlY + (pPortPriv->ovlX / 2);
-+ video_v_offset.f.v_offset = pPortPriv->VPlaneOffset +
-+ video_v_pitch.f.v_pitch * pPortPriv->ovlY + (pPortPriv->ovlX / 2);
-+ */
++ video_y_pitch.val = 0;
++ video_u_pitch.val = 0;
++ video_v_pitch.val = 0;
++ video_y_pitch.f.y_pitch = pitch;
++ video_u_pitch.f.u_pitch = pitch >> 1;
++ video_v_pitch.f.v_pitch = pitch >> 1;
+
-+ video_y_offset.f.y_offset = pPortPriv->YPlaneOffset;
-+ video_u_offset.f.u_offset = pPortPriv->UPlaneOffset;
-+ video_v_offset.f.v_offset = pPortPriv->VPlaneOffset;
++ video_y_offset.val = 0;
++ video_u_offset.val = 0;
++ video_v_offset.val = 0;
++ video_y_offset.f.y_offset = port->planes.yplane;
++ video_u_offset.f.u_offset = port->planes.uplane;
++ video_v_offset.f.v_offset = port->planes.vplane;
+
+ graphic_key.val = 0;
-+ graphic_key.f.keyer_color = pPortPriv->colorKey;
++ graphic_key.f.keyer_color = port->ovl.colorKey;
+ graphic_key.f.keyer_mask = 0xffffUL;
+ video_ctrl.f.keyer_en = 1;
+
@@ -7660,12 +7973,11 @@
+ graphic_v_disp.val = w100c->regs.GRAPHIC_V_DISP;
+
+ video_hpos.f.video_h_start = graphic_h_disp.f.graphic_h_start
-+ + W100MapToHWX(w100c,
-+ pPortPriv->ovlX, pPortPriv->ovlY, w, h);
++ + port->ovl.frame.x1;
+ video_hpos.f.video_h_end = video_hpos.f.video_h_start + w;
++
+ video_vpos.f.video_v_start = graphic_v_disp.f.graphic_v_start
-+ + W100MapToHWY(w100c,
-+ pPortPriv->ovlX, pPortPriv->ovlY, w, h);
++ + port->ovl.frame.y1;
+ video_vpos.f.video_v_end = video_vpos.f.video_v_start + h;
+ if (video_hpos.f.video_h_end > graphic_h_disp.f.graphic_h_end) {
+ w = graphic_h_disp.f.graphic_h_end - video_hpos.f.video_h_start;
@@ -7675,6 +7987,12 @@
+ video_ctrl.f.total_req_video = (w + 3) / 4;
+
+ W100DisableDisplayUpdate(w100c);
++ //This need to be tuned deeply, to get an stable
++ //overlay image:
++ //Best results seems to be present with 0x40xxxxxx
++ //But overlay surface must be located in a 8 dot multiple
++ MMIO_OUT32(mmDISP_DEBUG2,
++ (w100c->regs.DISP_DEBUG2 & ~0xff000000) | 0x40000000 );
+ MMIO_OUT32(mmGRAPHIC_KEY, graphic_key.val);
+ MMIO_OUT32(mmVIDEO_Y_OFFSET, video_y_offset.val);
+ MMIO_OUT32(mmVIDEO_Y_PITCH, video_y_pitch.val);
@@ -7687,52 +8005,56 @@
+ MMIO_OUT32(mmVIDEO_V_POS, video_vpos.val);
+ W100EnableDisplayUpdate(w100c);
+
-+ pPortPriv->videoCtrl = video_ctrl.val;
-+ pPortPriv->videoStatus |= W100_OVERLAY_CONFIGURED;
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus |= W100_OVERLAY_CONFIGURED;
+}
+
+static void W100OverlayEnable(KdScreenInfo *screen)
+{
+ W100ScreenInfo *w100s = screen->driver;
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
+ video_ctrl_u video_ctrl;
+
-+ DBG_IMAGEON(("W100OverlayEnable()\n"));
-+
-+ if (!(pPortPriv->videoStatus & W100_OVERLAY_CONFIGURED)) {
++ if (!(port->videoStatus & W100_OVERLAY_CONFIGURED)) {
+ W100OverlaySetup(screen);
+ }
+
-+ video_ctrl.val = pPortPriv->videoCtrl;
-+ video_ctrl.f.en_video_req = 1;
-+ video_ctrl.f.en_video_crtc = 1;
-+ video_ctrl.f.en_graphic_req_video = 1;
-+ W100DisableDisplayUpdate(w100c);
-+ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
-+ W100EnableDisplayUpdate(w100c);
-+ pPortPriv->videoCtrl = video_ctrl.val;
-+ pPortPriv->videoStatus |= W100_OVERLAY_ON;
++ if (!(port->videoStatus & W100_OVERLAY_ON)) {
++ ErrorF("W100OverlayEnable()\n");
++ video_ctrl.val = port->videoCtrl;
++ video_ctrl.f.en_video_req = 1;
++ video_ctrl.f.en_video_crtc = 1;
++ video_ctrl.f.en_graphic_req_video = 1;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
++ W100EnableDisplayUpdate(w100c);
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus |= W100_OVERLAY_ON;
++ }
+}
+
+static void W100OverlayDisable(KdScreenInfo *screen)
+{
-+ DBG_IMAGEON(("W100OverlayDisable()\n"));
++
+ W100ScreenInfo *w100s = screen->driver;
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
+
+ video_ctrl_u video_ctrl;
+
-+ video_ctrl.val = pPortPriv->videoCtrl;
-+ video_ctrl.f.en_video_req = 0;
-+ video_ctrl.f.en_video_crtc = 0;
-+ video_ctrl.f.en_graphic_req_video = 0;
-+ W100DisableDisplayUpdate(w100c);
-+ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
-+ W100EnableDisplayUpdate(w100c);
-+ pPortPriv->videoCtrl = video_ctrl.val;
-+ pPortPriv->videoStatus &= ~W100_OVERLAY_ON;
++ if ((port->videoStatus & W100_OVERLAY_ON)) {
++ ErrorF("W100OverlayDisable()\n");
++ video_ctrl.val = port->videoCtrl;
++ video_ctrl.f.en_video_req = 0;
++ video_ctrl.f.en_video_crtc = 0;
++ video_ctrl.f.en_graphic_req_video = 0;
++ W100DisableDisplayUpdate(w100c);
++ MMIO_OUT32(mmVIDEO_CTRL, video_ctrl.val);
++ W100EnableDisplayUpdate(w100c);
++ port->videoCtrl = video_ctrl.val;
++ port->videoStatus &= ~W100_OVERLAY_ON;
++ }
+}
+
+static void W100VideoSave(ScreenPtr pScreen, KdOffscreenArea *area)
@@ -7740,28 +8062,44 @@
+ KdScreenPriv(pScreen);
+ W100CardInfo(pScreenPriv);
+ W100ScreenInfo(pScreenPriv);
-+ W100PortPrivPtr pPortPriv = w100s->pAdaptor->pPortPrivates[0].ptr;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
+
-+ if (pPortPriv->offSurface == area) {
-+ pPortPriv->offSurface = NULL;
-+ pPortPriv->offSize = 0;
++ if (port->src.surface == area) {
++ port->src.surface = NULL;
+ }
-+ if (pPortPriv->ovlSurface == area) {
-+ pPortPriv->ovlSurface = NULL;
-+ pPortPriv->ovlSize = 0;
++
++ if (port->ovl.surface == area) {
++ port->ovl.surface = NULL;
+ }
+}
+
-+static void W100HostPlanarData(KdScreenInfo *screen,
-+ int id,
-+ CARD8 *src,
-+ KdOffscreenArea *dst,
-+ CARD32 srcPitch, CARD32 srcHeight,
-+ CARD32 dstPitch, CARD32 dstHeight,
-+ CARD16 srcX, CARD16 srcY,
-+ CARD16 dstX, CARD16 dstY,
-+ CARD16 w, CARD16 h)
++static void W100SaveSurface(CARD8 *src, int size, const char *file)
++{
++ int fd;
++ if (fd = open(file, O_WRONLY | O_CREAT | O_TRUNC,
++ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) {
++ write(fd, (void*) src, size);
++ close(fd);
++ }
++}
++
++static void W100HostPlanarData(KdScreenInfo *screen)
+{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ KdOffscreenArea *dst = port->src.surface;
++ CARD8 *src = port->src.buffer;
++ CARD16 srcPitch = port->src.width; //WARN: padding?
++ CARD16 srcHeight = port->src.height;
++ CARD16 dstPitch = port->src.box.x2 - port->src.box.x1 + 1; //WARN: padding?
++ CARD16 dstHeight = port->src.box.y2 - port->src.box.y1 + 1;
++ CARD16 srcX = port->src.box.x1;
++ CARD16 srcY = port->src.box.y1;
++ CARD16 dstX = 0;
++ CARD16 dstY = 0;
++ CARD16 w = dstPitch;
++ CARD16 h = dstHeight;
+ CARD8 *dstBase = dst->vidmem->base + dst->offset;
+ CARD8 *dstPtr;
+ CARD8 *srcPtr;
@@ -7786,7 +8124,7 @@
+ dstPtr = dstBase + (dstHeight * dstPitch) //Start of U Plane
+ + (dstX >> 1) //X Offset
+ + ((dstY * dstPitch) >> 2); //Y Offset
-+ if (id == FOURCC_I420) {
++ if (port->src.id == FOURCC_I420) {
+ srcPtr = src + (srcHeight * srcPitch) //Start of U Plane
+ + (srcX >> 1) //X Offset
+ + ((srcY * srcPitch) >> 2); //Y Offset
@@ -7805,7 +8143,7 @@
+ dstPtr = dstBase + ((5 * dstHeight * dstPitch) / 4) //Start of V Plane
+ + (dstX >> 1) //X Offset
+ + ((dstY * dstPitch) >> 2); //Y Offset
-+ if (id == FOURCC_I420) {
++ if (port->src.id == FOURCC_I420) {
+ srcPtr = src + ((5 * srcHeight * srcPitch) / 4) //Start of V Plane
+ + (srcX >> 1) //X Offset
+ + ((srcY * srcPitch) >> 2); //Y Offset
@@ -7821,16 +8159,22 @@
+ }
+}
+
-+static void W100HostPackedData(KdScreenInfo *screen,
-+ int id,
-+ CARD8 *src,
-+ KdOffscreenArea *dst,
-+ CARD32 srcPitch,
-+ CARD32 dstPitch,
-+ CARD16 srcX, CARD16 srcY,
-+ CARD16 dstX, CARD16 dstY,
-+ CARD16 w, CARD16 h)
++static void W100HostPackedData(KdScreenInfo *screen)
+{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ KdOffscreenArea *dst = port->src.surface;
++ CARD8 *src = port->src.buffer;
++ CARD16 srcPitch = port->src.width << 1; //WARN: padding?
++ CARD16 dstPitch = (port->src.box.x2 - port->src.box.x1 + 1) << 1;
++ CARD16 srcX = port->src.box.x1;
++ CARD16 srcY = port->src.box.y1;
++ CARD16 dstX = 0;
++ CARD16 dstY = 0;
++ CARD16 w = port->src.box.x2 - port->src.box.x1 + 1;
++ CARD16 h = port->src.box.y2 - port->src.box.y1 + 1;
++
+ CARD8 *dstBase = dst->vidmem->base + dst->offset;
+ CARD8 *dstPtr = dstBase + (dstY * dstPitch) + (dstX << 1);
+ CARD8 *srcPtr = src + (srcY + srcPitch) + (srcX << 1);
@@ -7840,7 +8184,7 @@
+ srcPitch, srcPtr, srcX, srcY,
+ dstPitch, dstPtr, dstX, dstY,
+ w, h));
-+ while(h--) {
++ while (h--) {
+ memcpy(dstPtr, srcPtr, (w << 1)); /* 16bpp assumed */
+ srcPtr += srcPitch;
+ dstPtr += dstPitch;
@@ -7851,31 +8195,29 @@
+static void W100StopVideo(KdScreenInfo *screen, pointer data, Bool exit)
+{
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPriv = (W100PortPrivPtr)data;
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
+
+ DBG_IMAGEON(("W100StopVideo(exit:%d)\n", exit));
+
-+ REGION_EMPTY(screen->pScreen, &pPriv->clip);
++ REGION_EMPTY(screen->pScreen, &port->clip);
+
+ if (exit) {
-+ if (pPriv->videoStatus & W100_OVERLAY_ON) {
++ if (port->videoStatus & W100_OVERLAY_ON) {
+ W100OverlayDisable(screen);
+ }
-+ if (pPriv->offSurface) {
-+ KdOffscreenFree(screen->pScreen, pPriv->offSurface);
-+ pPriv->offSurface = NULL;
-+ pPriv->offSize = 0;
++ if (port->src.surface) {
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->src.surface = NULL;
+ }
-+ if (pPriv->ovlSurface) {
-+ KdOffscreenFree(screen->pScreen, pPriv->ovlSurface);
-+ pPriv->ovlSurface = NULL;
-+ pPriv->ovlSize = 0;
++
++ if (port->ovl.surface) {
++ KdOffscreenFree(screen->pScreen, port->ovl.surface);
++ port->ovl.surface = NULL;
+ }
-+ pPriv->videoStatus &= ~W100_OVERLAY_ON;
++ port->src.id = -1; // Just to avoid cached values.
+ } else {
-+ if (pPriv->videoStatus & W100_OVERLAY_ON) {
++ if (port->videoStatus & W100_OVERLAY_ON) {
+ W100OverlayDisable(screen);
-+ pPriv->videoStatus &= ~W100_OVERLAY_ON;
+ }
+ }
+}
@@ -7886,18 +8228,18 @@
+ pointer data)
+{
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPriv = (W100PortPrivPtr)data;
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
+
+ if (attribute == xvBrightness) {
+ DBG_IMAGEON(("Setting Brightness attribute to %d\n", value));
+ W100SetBrightness(w100c, value);
-+ pPriv->brightness = value;
++ port->ovl.brightness = value;
+ } else if (attribute == xvMaxOverlaySize) {
+ DBG_IMAGEON(("Setting MaxOverlaySize to %d\n", value));
-+ pPriv->maxOverlaySize = value;
++ port->ovl.maxSize = value;
+ } else if (attribute == xvColorKey) {
+ DBG_IMAGEON(("Setting ColorKey attribute to %d\n", value));
-+ pPriv->colorKey = value;
++ port->ovl.colorKey = value;
+ }
+ return Success;
+}
@@ -7908,17 +8250,17 @@
+ pointer data)
+{
+ W100CardInfo(screen);
-+ W100PortPrivPtr pPriv = (W100PortPrivPtr)data;
++ W100PortPrivPtr port = (W100PortPrivPtr)data;
+
+ if (attribute == xvBrightness) {
+ DBG_IMAGEON(("Getting Brightness attribute\n"));
-+ *value = pPriv->brightness;
++ *value = port->ovl.brightness;
+ } else if (attribute == xvMaxOverlaySize) {
-+ *value = pPriv->maxOverlaySize;
++ *value = port->ovl.maxSize;
+ DBG_IMAGEON(("Getting Contrast attribute\n"));
+ } else if (attribute == xvColorKey) {
+ DBG_IMAGEON(("Getting ColorKey attribute\n"));
-+ *value = pPriv->colorKey;
++ *value = port->ovl.colorKey;
+ }
+ return Success;
+}
@@ -7927,7 +8269,8 @@
+ Bool motion,
+ short vid_w, short vid_h, /*Video dimensions */
+ short drw_w, short drw_h, /*Drawable dimensions */
-+ unsigned int *p_w, unsigned int *p_h,
++ unsigned int *p_w,
++ unsigned int *p_h,
+ pointer data)
+{
+ DBG_IMAGEON(("W100QueryBestSize(vid_w:%d,vid_h:%d,drw_w:%d,drw_h:%d)\n",
@@ -7945,6 +8288,8 @@
+{
+ int size, tmp;
+
++ DBG_IMAGEON(("W100QueryImageAttributes(id:%d,w:%d,h:%d)\n", id, *w, *h));
++
+ if (*w > IMAGE_MAX_WIDTH) {
+ *w = IMAGE_MAX_WIDTH;
+ }
@@ -7976,7 +8321,7 @@
+ if (pitches) pitches[1] = pitches[2] = tmp;
+ tmp *= (*h >> 1);
+ size += tmp;
-+ if(offsets) offsets[2] = size;
++ if (offsets) offsets[2] = size;
+ size += tmp;
+ break;
+ /* Packed Formats */
@@ -7991,382 +8336,454 @@
+ return size;
+}
+
-+
-+static void W100ClipVideo(BoxPtr dst,
-+ INT32 *x1,
-+ INT32 *x2,
-+ INT32 *y1,
-+ INT32 *y2,
-+ BoxPtr extents,
-+ INT32 width,
-+ INT32 height)
++static void W100ClipVideo(BoxPtr src, BoxPtr dst, BoxPtr extents,
++ short width, short height)
+{
+ INT32 vscale, hscale, delta;
-+ int diff;
++ INT32 diff, x1, x2, y1, y2;
+
-+ hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
-+ vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
++ hscale = ((src->x2 - src->x1) << 16) / (dst->x2 - dst->x1);
++ vscale = ((src->y2 - src->y1) << 16) / (dst->y2 - dst->y1);
+
-+ *x1 <<= 16; *x2 <<= 16;
-+ *y1 <<= 16; *y2 <<= 16;
++ x1 = src->x1 << 16;
++ x2 = src->x2 << 16;
++ y1 = src->y1 << 16;
++ y2 = src->y2 << 16;
+
+ diff = extents->x1 - dst->x1;
-+ if(diff > 0) {
-+ dst->x1 = extents->x1;
-+ *x1 += diff * hscale;
++ if (diff > 0) {
++ dst->x1 = extents->x1;
++ x1 += diff * hscale;
+ }
++
+ diff = dst->x2 - extents->x2;
-+ if(diff > 0) {
-+ dst->x2 = extents->x2;
-+ *x2 -= diff * hscale;
++ if (diff > 0) {
++ dst->x2 = extents->x2;
++ x2 -= diff * hscale;
+ }
++
+ diff = extents->y1 - dst->y1;
-+ if(diff > 0) {
-+ dst->y1 = extents->y1;
-+ *y1 += diff * vscale;
++ if (diff > 0) {
++ dst->y1 = extents->y1;
++ y1 += diff * vscale;
+ }
++
+ diff = dst->y2 - extents->y2;
-+ if(diff > 0) {
-+ dst->y2 = extents->y2;
-+ *y2 -= diff * vscale;
++ if (diff > 0) {
++ dst->y2 = extents->y2;
++ y2 -= diff * vscale;
+ }
+
-+ if(*x1 < 0) {
-+ diff = (- *x1 + hscale - 1)/ hscale;
-+ dst->x1 += diff;
-+ *x1 += diff * hscale;
++ if (x1 < 0) {
++ diff = (- x1 + hscale - 1) / hscale;
++ dst->x1 += diff;
++ x1 += diff * hscale;
+ }
-+ delta = *x2 - (width << 16);
-+ if(delta > 0) {
-+ diff = (delta + hscale - 1)/ hscale;
-+ dst->x2 -= diff;
-+ *x2 -= diff * hscale;
++
++ delta = x2 - (width << 16);
++ if (delta > 0) {
++ diff = (delta + hscale - 1) / hscale;
++ dst->x2 -= diff;
++ x2 -= diff * hscale;
+ }
-+ if(*y1 < 0) {
-+ diff = (- *y1 + vscale - 1)/ vscale;
-+ dst->y1 += diff;
-+ *y1 += diff * vscale;
++
++ if (y1 < 0) {
++ diff = (- y1 + vscale - 1) / vscale;
++ dst->y1 += diff;
++ y1 += diff * vscale;
+ }
-+ delta = *y2 - (height << 16);
-+ if(delta > 0) {
-+ diff = (delta + vscale - 1)/ vscale;
-+ dst->y2 -= diff;
-+ *y2 -= diff * vscale;
++ delta = y2 - (height << 16);
++ if (delta > 0) {
++ diff = (delta + vscale - 1) / vscale;
++ dst->y2 -= diff;
++ y2 -= diff * vscale;
+ }
-+}
++
++ src->x1 = x1 >> 16;
++ src->x2 = x2 >> 16;
++ src->y1 = y1 >> 16;
++ src->y2 = y2 >> 16;
++}
+
-+static int W100PutImage(KdScreenInfo *screen,
-+ DrawablePtr pDraw, /* Destination drawable */
-+ short src_x, short src_y, /* Source coordinates */
-+ short drw_x, short drw_y, /* Destination coordinates */
-+ short src_w, short src_h, /* Source rectangle to put */
-+ short drw_w, short drw_h, /* Destination size */
-+ int id, /* FOURCC id */
-+ unsigned char *buf, /* Source data */
-+ short width, /* Source width */
-+ short height, /* Source height */
-+ Bool sync, /* Sync before returning */
-+ RegionPtr clipBoxes,
-+ pointer data)
++static Bool W100SetOverlaySource(W100PortPrivPtr port,
++ unsigned char *buffer,
++ int id,
++ short src_x, short src_y,
++ short src_w, short src_h,
++ short width, short height,
++ short drw_x, short drw_y,
++ short drw_w, short drw_h,
++ RegionPtr clipBoxes)
+{
-+ ScreenPtr pScreen = screen->pScreen;
-+ KdScreenPriv(pScreen);
-+ W100CardInfo(pScreenPriv);
-+ W100ScreenInfo(pScreenPriv);
-+ W100PortPrivPtr pPortPriv = (W100PortPrivPtr)data;
-+ CARD32 baseAddr;
-+ int randr = w100c->hwScreen.randr;
-+ int offWidth, offHeight;
-+ int ovlWidth, ovlHeight;
-+ int ovlX, ovlY;
-+ int dstX, dstY;
-+ int offSize;
-+ int ovlSize;
-+ int planes;
-+ int bpp;
-+ int i;
-+ INT32 x1, x2, y1, y2;
-+ BoxRec dstBox;
-+ int planeOffsets[3];
+
++ BoxRec srcBox, dstBox;
++ Bool changed = FALSE;
+
-+ DBG_IMAGEON(("W100PutImage(src(x:%d,y:%d,w:%d,h:%d),"
-+ "drw(x:%d,y:%d,w:%d,h:%d),"
-+ "width:%d,height:%d)\n",
-+ src_x,src_y,src_w,src_h,
-+ drw_x,drw_y,drw_w,drw_h,
-+ width, height));
-+
-+ /* Clip */
-+ x1 = src_x;
-+ x2 = src_x + src_w;
-+ y1 = src_y;
-+ y2 = src_y + src_h;
++ srcBox.x1 = src_x;
++ srcBox.x2 = src_x + src_w - 1;
++ srcBox.y1 = src_y;
++ srcBox.y2 = src_y + src_h - 1;
+
+ dstBox.x1 = drw_x;
-+ dstBox.x2 = drw_x + drw_w;
++ dstBox.x2 = drw_x + drw_w - 1;
+ dstBox.y1 = drw_y;
-+ dstBox.y2 = drw_y + drw_h;
++ dstBox.y2 = drw_y + drw_h - 1;
+
-+ W100ClipVideo(&dstBox, &x1, &x2, &y1, &y2,
-+ REGION_EXTENTS(pScreen, clipBoxes),
++ W100ClipVideo(&srcBox, &dstBox,
++ REGION_EXTENTS(pScreen, clipBoxes),
+ width, height);
+
-+ if ((x1 >= x2) || (y1 >= y2)) {
-+ return Success;
++ port->src.buffer = buffer;
++ port->ovl.changed = FALSE;
++
++ if (port->src.id != id) {
++ port->src.id = id;
++ changed = TRUE;
++ port->ovl.changed = TRUE;
++ }
++ if (port->src.box.x1 != srcBox.x1) {
++ port->src.box.x1 = srcBox.x1;
++ changed = TRUE;
++ }
++ if (port->src.box.x2 != srcBox.x2) {
++ port->src.box.x2 = srcBox.x2;
++ changed = TRUE;
++ }
++ if (port->src.box.y1 != srcBox.y1) {
++ port->src.box.y1 = srcBox.y1;
++ changed = TRUE;
++ }
++ if (port->src.box.y2 != srcBox.y2) {
++ port->src.box.y2 = srcBox.y2;
++ changed = TRUE;
++ }
++ if (port->src.width != width) {
++ port->src.width = width;
++ changed = TRUE;
++ }
++ if (port->src.height != height) {
++ port->src.height = height;
++ changed = TRUE;
+ }
+
-+ src_w = (x2 - x1) >> 16;
-+ src_h = (y2 - y1) >> 16;
-+ drw_w = dstBox.x2 - dstBox.x1;
-+ drw_h = dstBox.y2 - dstBox.y1;
-+ drw_x = dstBox.x1;
-+ drw_y = dstBox.y1;
-+ src_x = x1 >> 16;
-+ src_y = y1 >> 16;
-+
-+ /* Calculate dimensions for offscren and overlay surfaces */
-+ offWidth = src_w;
-+ offHeight = src_h;
++ if (port->dst.box.x1 != dstBox.x1) {
++ port->dst.box.x1 = dstBox.x1;
++ changed = TRUE;
++ }
++ if (port->dst.box.x2 != dstBox.x2) {
++ port->dst.box.x2 = dstBox.x2;
++ changed = TRUE;
++ }
++ if (port->dst.box.y1 != dstBox.y1) {
++ port->dst.box.y1 = dstBox.y1;
++ changed = TRUE;
++ }
++ if (port->dst.box.y2 != dstBox.y2) {
++ port->dst.box.y2 = dstBox.y2;
++ changed = TRUE;
++ }
+
-+ ovlX = drw_x;
-+ ovlY = drw_y;
++ if (changed) {
++ port->src.size = W100SurfaceSize(port,
++ srcBox.x2 - srcBox.x1 + 1,
++ srcBox.y2 - srcBox.y1 + 1);
++ }
++ port->changed = changed;
++ return changed;
++}
+
-+ for (i = 0; i < NUM_OVL_RESIZERS; i++) {
-+ CARD16 candidate_w;
-+ CARD16 candidate_h;
-+
-+ pPortPriv->videoHorExp = ovlResizers[i].xfactor;
-+ pPortPriv->videoVerExp = ovlResizers[i].yfactor;
-+
-+ candidate_w = drw_w >> ovlResizers[i].xfactor;
-+ candidate_h = drw_h >> ovlResizers[i].yfactor;
-+
-+ switch (randr & RR_Rotate_All) {
-+ case RR_Rotate_0:
-+ ovlWidth = (candidate_w + OVL_W_ALIGN - 1) & ~(OVL_W_ALIGN - 1);
-+ ovlHeight = (candidate_h + OVL_H_ALIGN - 1) & ~(OVL_H_ALIGN - 1);
-+ dstX = 0;
-+ dstY = 0;
-+ pPortPriv->videoHorExp = ovlResizers[i].xfactor;
-+ pPortPriv->videoVerExp = ovlResizers[i].yfactor;
-+ break;
-+ case RR_Rotate_180:
-+ ovlWidth = (candidate_w + OVL_W_ALIGN - 1) & ~(OVL_W_ALIGN - 1);
-+ ovlHeight = (candidate_h + OVL_H_ALIGN - 1) & ~(OVL_H_ALIGN - 1);
-+ dstX = ovlWidth - candidate_w;
-+ dstY = ovlHeight - candidate_h;
-+ pPortPriv->videoHorExp = ovlResizers[i].xfactor;
-+ pPortPriv->videoVerExp = ovlResizers[i].yfactor;
-+ break;
-+ case RR_Rotate_90:
-+ ovlWidth = (candidate_h + OVL_W_ALIGN - 1) & ~(OVL_W_ALIGN - 1);
-+ ovlHeight = (candidate_w + OVL_H_ALIGN - 1) & ~(OVL_H_ALIGN - 1);
-+ dstX = ovlWidth - candidate_h;
-+ dstY = 0;
-+ pPortPriv->videoHorExp = ovlResizers[i].yfactor;
-+ pPortPriv->videoVerExp = ovlResizers[i].xfactor;
-+ break;
-+ case RR_Rotate_270:
-+ ovlWidth = (candidate_h + OVL_W_ALIGN - 1) & ~(OVL_W_ALIGN - 1);
-+ ovlHeight = (candidate_w + OVL_H_ALIGN - 1) & ~(OVL_H_ALIGN - 1);
-+ dstX = 0;
-+ dstY = ovlHeight - candidate_w;
-+ pPortPriv->videoHorExp = ovlResizers[i].yfactor;
-+ pPortPriv->videoVerExp = ovlResizers[i].xfactor;
-+ break;
-+ }
+
-+ /* Calculate sizes for the surfaces */
-+ switch (id) {
-+ case FOURCC_YV12:
-+ case FOURCC_I420:
-+ offSize = (3 * offWidth * offHeight) / 2;
-+ ovlSize = (3 * ovlWidth * ovlHeight) / 2;
-+ planes = 3;
-+ planeOffsets[0] = 0;
-+ planeOffsets[1] = ovlWidth * ovlHeight;
-+ planeOffsets[2] = (5 * (ovlWidth * ovlHeight)) / 4;
-+ bpp = 8;
-+ break;
-+ case FOURCC_UYVY:
-+ case FOURCC_YUY2:
-+ offSize = offWidth * offHeight * 2;
-+ ovlSize = ovlWidth * ovlHeight * 2;
-+ planes = 1;
-+ planeOffsets[0] = 0;
-+ bpp = 16;
-+ break;
-+ }
-+ if (ovlSize <= pPortPriv->maxOverlaySize) {
-+ DBG_IMAGEON(("Using %dx%d overlay surface (%d bytes). "
-+ "Resizer(xfactor:%d,yfactor:%d)\n",
-+ ovlWidth, ovlHeight, ovlSize,
-+ ovlResizers[i].xfactor, ovlResizers[i].yfactor));
-+ drw_w = candidate_w;
-+ drw_h = candidate_h;
-+ break;
-+ }
++
++static int W100SetOverlaySurfaces(KdScreenInfo *screen,
++ short x, short y, short w, short h)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++
++ if (port->ovl.changed ||
++ (port->ovl.frame.x1 != x) ||
++ (port->ovl.frame.y1 != y) ||
++ (port->ovl.frame.x2 != (x + w - 1)) ||
++ (port->ovl.frame.y2 != (y + h - 1))) {
++
++ port->ovl.changed = TRUE;
++ port->ovl.frame.x1 = x;
++ port->ovl.frame.x2 = x + w - 1;
++ port->ovl.frame.y1 = y;
++ port->ovl.frame.y2 = y + h - 1;
++
++ W100MapToDevice(w100c, &port->dst.box, &port->ovl.box);
++ W100ChangeOrigin(&port->ovl.box,
++ port->ovl.frame.x1, port->ovl.frame.y1);
++ port->ovl.box.x2 >>= port->ovl.horExp;
++ port->ovl.box.y2 >>= port->ovl.verExp;
++ DBG_IMAGEON(("Translated ovl.box(x1:%d,y1:%d,x2:%d,y2:%d)\n",
++ port->ovl.box.x1, port->ovl.box.y1,
++ port->ovl.box.x2, port->ovl.box.y2));
+ }
+
-+ /* Reallocate the surfaces, if existing ones are not valid.
-+ * If overlay surface is not valid, dump both ones, to give
-+ * ovlSurface more chances to get internal memory
-+ */
-+ if (pPortPriv->ovlSurface && ovlSize != pPortPriv->ovlSize) {
-+ DBG_IMAGEON(("Freeing overlay and offscreen surfaces\n"));
-+ KdOffscreenFree(screen->pScreen, pPortPriv->ovlSurface);
-+ KdOffscreenFree(screen->pScreen, pPortPriv->offSurface);
-+ pPortPriv->ovlSurface = NULL;
-+ pPortPriv->offSurface = NULL;
-+ }
-+
-+ if (pPortPriv->offSurface && offSize != pPortPriv->offSize) {
-+ DBG_IMAGEON(("Freeing offscreen surface\n"));
-+ KdOffscreenFree(screen->pScreen, pPortPriv->offSurface);
-+ pPortPriv->offSurface = NULL;
-+ }
-+
-+ if (!pPortPriv->ovlSurface) {
-+ pPortPriv->ovlSurface = KdOffscreenAllocPrio(screen->pScreen,
-+ ovlSize, 0, TRUE,
-+ W100VideoSave,
-+ pPortPriv,
-+ KD_VIDMEM_MAXPRIO,
-+ KD_VIDMEM_MAXPRIO,
-+ TRUE);
-+ if (!pPortPriv->ovlSurface) {
-+ ErrorF("Using non internal memory to overlay. "
-+ "Expected bad performance\n");
-+ pPortPriv->ovlSurface = KdOffscreenAlloc(screen->pScreen,
-+ ovlSize, 0, TRUE,
-+ W100VideoSave,
-+ pPortPriv);
++ switch (port->src.id) {
++ case FOURCC_YV12:
++ case FOURCC_I420:
++ port->planes.size = 3;
++ port->planes.offset[0] = 0;
++ port->planes.offset[1] = w * h;
++ port->planes.offset[2] = (5 * (w * h)) / 4;
++ port->planes.bpp = 8;
++ break;
++ case FOURCC_UYVY:
++ case FOURCC_YUY2:
++ port->planes.size = 1;
++ port->planes.offset[0] = 0;
++ port->planes.bpp = 16;
++ break;
++ }
++
++ if (port->ovl.surface && port->ovl.size != port->ovl.surface->size) {
++ KdOffscreenFree(screen->pScreen, port->ovl.surface);
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->ovl.surface = NULL;
++ port->src.surface = NULL;
++ }
++ if (port->src.surface && port->src.size != port->src.surface->size) {
++ KdOffscreenFree(screen->pScreen, port->src.surface);
++ port->src.surface = NULL;
++ }
++
++ if (!port->ovl.surface) {
++ port->ovl.surface = KdOffscreenAllocPrio(screen->pScreen,
++ port->ovl.size, 0, TRUE,
++ W100VideoSave,
++ port,
++ KD_VIDMEM_MAXPRIO,
++ KD_VIDMEM_MAXPRIO,
++ TRUE);
++ if (!port->ovl.surface) {
++ ErrorF("Using external memory for overlay surface. "
++ "Expect bad performance\n");
++ port->ovl.surface = KdOffscreenAlloc(screen->pScreen,
++ port->ovl.size, 0, TRUE,
++ W100VideoSave,
++ port);
+ }
-+ if (!pPortPriv->ovlSurface) {
++ if (!port->ovl.surface) {
+ ErrorF("Unable to allocate %d bytes for overlay surface\n",
-+ ovlSize);
++ port->ovl.size);
+ return BadAlloc;
+ }
-+
-+ pPortPriv->ovlSize = ovlSize;
-+ W100ClearSurface(screen, pPortPriv->ovlSurface,
-+ 0, 0, (ovlWidth * bpp / 8),
-+ ovlWidth, ovlHeight, id);
++
++ W100ClearSurface(screen, port->ovl.surface,
++ 0, 0,
++ (w * port->planes.bpp / 8),
++ w, h, port->src.id);
+ }
-+
-+ if (!pPortPriv->offSurface) {
-+ pPortPriv->offSurface = KdOffscreenAlloc(screen->pScreen,
-+ offSize, 0, TRUE,
-+ W100VideoSave,
-+ pPortPriv);
-+ if (!pPortPriv->offSurface) {
++ if (!port->src.surface) {
++ port->src.surface = KdOffscreenAlloc(screen->pScreen,
++ port->src.size, 0, TRUE,
++ W100VideoSave,
++ port);
++ if (!port->src.surface) {
+ ErrorF("Unable to allocate %d bytes for offscreen surface\n",
-+ offSize);
++ port->src.size);
+ return BadAlloc;
+ }
-+ pPortPriv->offSize = offSize;
+ }
+
-+ /* Copy the data into the offscreen surface */
-+ W100WaitIdle(w100c);
++ CARD32 baseAddr = (CARD32) W100_HOST2CARD(port->ovl.surface->vidmem->base +
++ port->ovl.surface->offset);
+
-+ switch (id) {
++
++ switch (port->src.id) {
+ case FOURCC_YV12:
+ case FOURCC_I420:
-+ W100HostPlanarData(screen, //screen
-+ id, //id
-+ buf, //src
-+ pPortPriv->offSurface, //dst
-+ width, //srcPitch
-+ height, //srcHeight
-+ offWidth, //dstPitch
-+ offHeight, //dstHeight
-+ src_x, //srcX
-+ src_y, //srcY
-+ 0, //dstX
-+ 0, //dstY
-+ src_w, //w
-+ src_h); //h
++ port->planes.yplane = baseAddr + port->planes.offset[0];
++ port->planes.uplane = baseAddr + port->planes.offset[1];
++ port->planes.vplane = baseAddr + port->planes.offset[2];
+ break;
+ case FOURCC_UYVY:
+ case FOURCC_YUY2:
-+ W100HostPackedData(screen, //screen
-+ id, //id
-+ buf, //src
-+ pPortPriv->offSurface, //dst
-+ width << 1, //srcPitch
-+ offWidth << 1, //dstPitch
-+ src_x, //srcX
-+ src_y, //srcY
-+ 0, //dstX
-+ 0, //dstY
-+ src_w, //w
-+ src_h); //h
++ port->planes.yplane = baseAddr + port->planes.offset[0];
++ port->planes.uplane = 0;
++ port->planes.vplane = 0;
+ break;
+ }
+
-+ /* Update cliplist */
-+ if(!REGION_EQUAL(screen->pScreen, &pPortPriv->clip, clipBoxes)) {
-+ REGION_COPY(screen->pScreen, &pPortPriv->clip, clipBoxes);
-+ KXVPaintRegion(pDraw, &pPortPriv->clip, pPortPriv->colorKey);
++ return Success;
++}
++
++static int W100OvlSetup(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ BoxRec ovlBox;
++ short x, y, w, h;
++ int i;
++
++ W100MapToDevice(w100c, &port->dst.box, &ovlBox);
++
++ x = ovlBox.x1 & ~7;
++ y = ovlBox.y1;
++
++ for (i = 0; i < NUM_OVL_RESIZERS; i++) {
++ w = (ovlBox.x2 - x + 1) >> ovlResizers[i].xfactor;
++ h = (ovlBox.y2 - y + 1) >> ovlResizers[i].yfactor;
++ w = W100_ALIGN(w, OVL_W_ALIGN);
++ h = W100_ALIGN(h, OVL_H_ALIGN);
++ port->ovl.size = W100SurfaceSize(port, w, h);
++ DBG_IMAGEON(("Trying overlay surface (x:%d,y:%d,w:%d,h:%d). Size %d."
++ " xfactor:%d, yfactor:%d\n",
++ x, y, w, h, port->ovl.size,
++ ovlResizers[i].xfactor,
++ ovlResizers[i].yfactor));
++ if (port->ovl.size <= port->ovl.maxSize) {
++ ErrorF("Using (x=%d,y=%d,w=%d,h=%d) overlay surface (%d bytes). "
++ "Resizer(xfactor:%d,yfactor:%d)\n",
++ x, y, w, h, port->ovl.size,
++ ovlResizers[i].xfactor, ovlResizers[i].yfactor);
++ port->ovl.horExp = ovlResizers[i].xfactor;
++ port->ovl.verExp = ovlResizers[i].yfactor;
++ return W100SetOverlaySurfaces(screen, x, y, w, h);
++ }
+ }
++ return BadAlloc;
++}
++
++static void W100OvlHostData(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
+
-+ /* Calculate the incard offsets for the different planes */
-+ baseAddr = (CARD32) W100_HOST2CARD(pPortPriv->ovlSurface->vidmem->base +
-+ pPortPriv->ovlSurface->offset);
-+ switch (id) {
++ W100WaitIdle(w100c);
++ switch (port->src.id) {
+ case FOURCC_YV12:
+ case FOURCC_I420:
-+ pPortPriv->YPlaneOffset = baseAddr + planeOffsets[0];
-+ pPortPriv->UPlaneOffset = baseAddr + planeOffsets[1];
-+ pPortPriv->VPlaneOffset = baseAddr + planeOffsets[2];
++ W100HostPlanarData(screen);
+ break;
+ case FOURCC_UYVY:
+ case FOURCC_YUY2:
-+ pPortPriv->YPlaneOffset = baseAddr + planeOffsets[0];
-+ pPortPriv->UPlaneOffset = 0;
-+ pPortPriv->VPlaneOffset = 0;
++ W100HostPackedData(screen);
++ break;
+ }
++}
+
-+ DBG_IMAGEON(("Offsets(Y:0x%08x,U:0x%08x,V:0x%08x)\n",
-+ pPortPriv->YPlaneOffset,
-+ pPortPriv->UPlaneOffset,
-+ pPortPriv->VPlaneOffset));
-+
-+
-+ /* Blit from offSurface to ovlSurface taking into account
-+ * the randr needed transformation
-+ */
-+ W100DisableDisplayUpdate(w100c);
-+ W100PlanarBlt(screen, planes, bpp, randr,
-+ pPortPriv->offSurface,
-+ src_w, offWidth * bpp / 8, src_h,
-+ pPortPriv->ovlSurface, planeOffsets,
-+ drw_w, ovlWidth * bpp / 8, drw_h,
-+ dstX, dstY);
-+ W100EnableDisplayUpdate(w100c);
++static void W100OvlBlt(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100CardInfo(screen);
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
++ static int frame = 0;
++ int srcW = port->src.box.x2 - port->src.box.x1 + 1;
++ int srcH = port->src.box.y2 - port->src.box.y1 + 1;
++ int dstW = port->ovl.frame.x2 - port->ovl.frame.x1 + 1;
++ int dstH = port->ovl.frame.y2 - port->ovl.frame.y1 + 1;
++
++ DBG_IMAGEON(("ovl.box(x1:%d,y1:%d,x2:%d,y2:%d),"
++ "src.box(x1:%d,y1:%d,x2:%d,y2:%d),"
++ "dstW:%d, dstH:%d\n",
++ port->ovl.box.x1, port->ovl.box.y1,
++ port->ovl.box.x2, port->ovl.box.y2,
++ port->src.box.x1, port->src.box.y1,
++ port->src.box.x2, port->src.box.y2,
++ dstW, dstH));
++
++ W100PlanarBlt(screen, //KdScreenInfo* screen
++ port->planes.size, //int planes
++ port->planes.offset, //int planeOffsets[]
++ port->planes.bpp, //int bpp
++ w100c->hw_window.randr, //int randr
++ port->src.surface, //KdOffscrenArea *src
++ srcW, //int srcW
++ srcH, //int srcH
++ &port->src.box, //BoxPtr srcBox
++ port->ovl.surface, //KdOffscreenArea *dst
++ dstW, //int dstW
++ dstH, //int dstH
++ &port->ovl.box); //BoxPtr dstBox
++
++#if 0
++ if (++frame == 10) {
++ W100SaveSurface(port->src.surface->vidmem->base +
++ port->src.surface->offset,
++ port->src.surface->size,
++ "/media/card/kdrive/source.yuv");
++ W100SaveSurface(port->ovl.surface->vidmem->base +
++ port->ovl.surface->offset,
++ port->ovl.surface->size,
++ "/media/card/kdrive/ovl.yuv");
++ exit(1);
++ }
++#endif
++}
+
++static void W100OvlUpdate(KdScreenInfo *screen)
++{
++ W100ScreenInfo *w100s = screen->driver;
++ W100PortPrivPtr port = w100s->pAdaptor->pPortPrivates[0].ptr;
+
-+ if ((pPortPriv->ovlWidth != ovlWidth) ||
-+ (pPortPriv->ovlHeight != ovlHeight) ||
-+ (pPortPriv->ovlX != ovlX) ||
-+ (pPortPriv->ovlY != ovlY) ||
-+ (pPortPriv->id != id)) {
-+ pPortPriv->videoStatus &= ~W100_OVERLAY_CONFIGURED;
++ if (port->videoStatus & W100_OVERLAY_ON) {
+ W100OverlayDisable(screen);
+ }
-+ /* Enable overlay */
-+ pPortPriv->ovlWidth = ovlWidth;
-+ pPortPriv->ovlHeight = ovlHeight;
-+ pPortPriv->ovlX = ovlX;
-+ pPortPriv->ovlY = ovlY;
-+ pPortPriv->id = id;
++ port->videoStatus &= ~W100_OVERLAY_CONFIGURED;
++
+ W100OverlayEnable(screen);
++}
++
++static int W100PutImage(KdScreenInfo *screen,
++ DrawablePtr pDraw, /* Destination drawable */
++ short src_x, short src_y, /* Source coordinates */
++ short drw_x, short drw_y, /* Destination coordinates */
++ short src_w, short src_h, /* Source rectangle to put */
++ short drw_w, short drw_h, /* Destination size */
++ int id, /* FOURCC id */
++ unsigned char *buffer, /* Source data */
++ short width, /* Source width */
++ short height, /* Source height */
++ Bool sync, /* Sync before returning */
++ RegionPtr clipBoxes,
++ pointer data)
++{
++ ScreenPtr pScreen = screen->pScreen;
++ KdScreenPriv(pScreen);
++ W100CardInfo(pScreenPriv);
++ W100ScreenInfo(pScreenPriv);
++ W100PortPrivPtr port = (W100PortPrivPtr) data;
++ int errCode;
++
++ DBG_IMAGEON(("W100PutImage(src(x:%d,y:%d,w:%d,h:%d),"
++ "drw(x:%d,y:%d,w:%d,h:%d),"
++ "width:%d,height:%d), buffer:%p)\n",
++ src_x,src_y,src_w,src_h,
++ drw_x,drw_y,drw_w,drw_h,
++ width, height,
++ buffer));
++
++ if (W100SetOverlaySource(port, buffer, id,
++ src_x, src_y, src_w, src_h,
++ width, height,
++ drw_x, drw_y, drw_w, drw_h,
++ clipBoxes)) {
++ if ((errCode = W100OvlSetup(screen)) != Success) {
++ return errCode;
++ }
++ }
++ W100OvlHostData(screen);
++ /* Update cliplist */
++ if(!REGION_EQUAL(screen->pScreen, &port->clip, clipBoxes)) {
++ REGION_COPY(screen->pScreen, &port->clip, clipBoxes);
++ KXVPaintRegion(pDraw, &port->clip, port->ovl.colorKey);
++ }
+
++ W100OvlBlt(screen);
++
++ if (port->ovl.changed) {
++ W100OvlUpdate(screen);
++ }
+ return Success;
+}
-+
++
+static KdVideoAdaptorPtr
+W100SetupImageVideo(ScreenPtr pScreen)
+{
@@ -8374,7 +8791,7 @@
+ W100ScreenInfo(pScreenPriv);
+ W100CardInfo(pScreenPriv);
+ KdVideoAdaptorPtr adaptor;
-+ W100PortPrivPtr pPortPriv;
++ W100PortPrivPtr port;
+
+ adaptor = xcalloc(1, sizeof(KdVideoAdaptorRec)
+ + sizeof(W100PortPrivRec)
@@ -8393,9 +8810,9 @@
+ adaptor->nPorts = 1;
+ adaptor->pPortPrivates = (DevUnion*)(&adaptor[1]);
+
-+ pPortPriv = (W100PortPrivPtr)(&adaptor->pPortPrivates[1]);
++ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[1]);
+
-+ adaptor->pPortPrivates[0].ptr = (pointer)(pPortPriv);
++ adaptor->pPortPrivates[0].ptr = (pointer)(port);
+
+ adaptor->nAttributes = NUM_ATTRIBUTES;
+ adaptor->pAttributes = Attributes;
@@ -8413,7 +8830,7 @@
+ adaptor->ReputImage = NULL;
+ adaptor->QueryImageAttributes = W100QueryImageAttributes;
+
-+ REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0);
++ REGION_INIT(pScreen, &port->clip, NullBox, 0);
+
+ w100s->pAdaptor = adaptor;
+
@@ -8421,9 +8838,9 @@
+ xvColorKey = MAKE_ATOM("XV_COLORKEY");
+ xvMaxOverlaySize = MAKE_ATOM("XV_MAXOVERLAYSIZE");
+
-+ pPortPriv->maxOverlaySize = OVL_MAX_SIZE;
-+ pPortPriv->colorKey = 0xff00;
-+ pPortPriv->brightness = W100GetBrightness(w100c);
++ port->ovl.maxSize = OVL_MAX_SIZE;
++ port->ovl.colorKey = 0xff00;
++ port->ovl.brightness = W100GetBrightness(w100c);
+ return adaptor;
+}
+
@@ -8478,22 +8895,22 @@
+ KdScreenPriv(pScreen);
+ W100ScreenInfo(pScreenPriv);
+ KdVideoAdaptorPtr adaptor = w100s->pAdaptor;
-+ W100PortPrivPtr pPortPriv;
++ W100PortPrivPtr port;
+ int i;
+
+ if (!adaptor)
+ return;
+
-+ pPortPriv = (W100PortPrivPtr)(&adaptor->pPortPrivates[0].ptr);
-+ REGION_UNINIT(pScreen, &pPortPriv->clip);
++ port = (W100PortPrivPtr)(&adaptor->pPortPrivates[0].ptr);
++ REGION_UNINIT(pScreen, &port->clip);
+
+ xfree(adaptor);
+ w100s->pAdaptor = NULL;
+}
+
--- /dev/null
-+++ xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/imageon/imageon_support.h
-@@ -0,0 +1,87 @@
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/imageon/imageon_support.h
+@@ -0,0 +1,108 @@
+/*
+ * Copyright © 2007 Manuel Teira
+ *
@@ -8524,6 +8941,7 @@
+extern CARD8 W100SolidRop[16];
+extern CARD8 W100BltRop[16];
+
++/* Card control */
+void W100DisableDisplayUpdate(W100CardInfo *w100c);
+void W100EnableDisplayUpdate(W100CardInfo *w100c);
+void W100SetupGraphicEngine(W100CardInfo *w100c);
@@ -8531,8 +8949,13 @@
+void W100SetupGraphicWindow(W100CardInfo *w100c);
+void W100EnableGraphicWindow(W100CardInfo *w100c);
+void W100DisableGraphicWindow(W100CardInfo *w100c);
-+inline Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries);
++void W100VSync(W100CardInfo *w100c);
++
++/* Wait for card slots */
++__inline__ Bool W100WaitCmdFifoEntries(W100CardInfo *w100c, int entries);
+Bool W100WaitIdle(W100CardInfo *w100c);
++
++/* Set context of the current operation */
+void W100ResetContext(W100CardInfo *w100c);
+CARD32 W100ComputeSolidGmc(W100CardInfo *w100c, CARD8 alu);
+CARD32 W100ComputeCopyGmc(W100CardInfo *w100c, CARD8 alu);
@@ -8546,38 +8969,77 @@
+ CARD32 dstOffset, CARD8 bpp);
+Bool W100SetSourcePixmap(PixmapPtr pPix);
+Bool W100SetDestinationPixmap(PixmapPtr pPix);
-+CARD16 W100MapToHWX(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h);
-+CARD16 W100MapToHWY(W100CardInfo *w100c,
-+ CARD16 x, CARD16 y, CARD16 w, CARD16 h);
-+CARD16 W100XformX(W100CardInfo *w100c, CARD16 x, CARD16 y, CARD16 w, CARD16 h);
-+CARD16 W100XformY(W100CardInfo *w100c, CARD16 x, CARD16 y, CARD16 w, CARD16 h);
-+CARD16 W100XformW(W100CardInfo *w100c, CARD16 x, CARD16 y, CARD16 w, CARD16 h);
-+CARD16 W100XformH(W100CardInfo *w100c, CARD16 x, CARD16 y, CARD16 w, CARD16 h);
++
++/* Scaler related functions */
+CARD8 W100GetScaler(CARD16 dstsize, CARD16 srcsize);
+CARD16 W100ApplyScaler(CARD16 srcsize, CARD8 scaler);
-+static void W100Blt(KdScreenInfo *screen, int randr, int bpp,
-+ CARD32 srcOffset, CARD16 srcW, CARD16 srcH, CARD16 srcPitch,
-+ CARD32 dstOffset, CARD16 dstPitch,
-+ CARD16 dstX, CARD16 dstY);
-+static void W100StretchBlt(KdScreenInfo *screen, int randr, int bpp,
-+ CARD32 srcOffset, CARD16 srcW, CARD16 srcH,
-+ CARD16 srcPitch,
-+ CARD32 dstOffset, CARD16 dstPitch,
-+ CARD16 dstX, CARD16 dstY,
-+ CARD8 xscaler, CARD8 yscaler);
++
++/* Blitting functions */
++void W100PlanarBlt(KdScreenInfo *screen, int planes, int planeOffsets[],
++ int bpp, int randr,
++ KdOffscreenArea *src, int srcW, int srcH, BoxPtr srcBox,
++ KdOffscreenArea *dst, int dstW, int dstH, BoxPtr dstBox);
+static void W100ScaledBlt(KdScreenInfo *screen, int randr, int bpp,
-+ CARD32 srcOffset, CARD16 srcW, CARD16 srcH,
-+ CARD16 srcPitch,
-+ CARD32 dstOffset, CARD16 dstPitch,
-+ CARD16 dstX, CARD16 dstY,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox,
+ CARD8 xscaler, CARD8 yscaler);
-+void W100PlanarBlt(KdScreenInfo *screen, int planes, int bpp, int randr,
-+ KdOffscreenArea *src, int srcW, int srcPitch, int srcH,
-+ KdOffscreenArea *dst, int planeOffsets[],
-+ int dstW, int dstPitch, int dstH,
-+ int dstX, int dstY);
++static void W100StretchBlt(KdScreenInfo *screen, int randr, int bpp,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox,
++ CARD8 xscaler, CARD8 yscaler);
++static void W100Blt(KdScreenInfo *screen, int randr, int bpp,
++ CARD32 srcOffset, CARD16 srcPitch, BoxPtr srcBox,
++ CARD32 dstOffset, CARD16 dstPitch, BoxPtr dstBox);
++
++/* Brightness functions */
+CARD8 W100GetBrightness(W100CardInfo *w100c);
+void W100SetBrightness(W100CardInfo *w100c, CARD8 value);
+
++
++/* Get and set mode and rotation info */
++int W100GetRotation(W100CardInfo *w100c);
++W100ModeSpec *W100GetModeSpec(W100CardInfo *w100c, W100Mode *mode);
++Bool W100GetFbMode(W100CardInfo *w100c, W100Mode *mode);
++Bool W100CheckFbMode(W100CardInfo *w100c, W100ModeSpec *modes);
++W100ModeSpec *W100GetBestMode(W100CardInfo *w100c, int width, int height);
++
++/* SysFS helpers */
++Bool W100SysFsGet(W100CardInfo *w100c, const char *path, char *value);
++Bool W100SysFsSet(W100CardInfo *w100c, const char *path, const char *value);
++
++/* Coordinate transformations */
++void W100TransformTsLibCoordinates(long *x, long *y, void *closure);
++void W100MapToDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst);
++void W100MapFromDevice(W100CardInfo *w100c, BoxPtr src, BoxPtr dst);
++void W100ChangeOrigin(BoxPtr src, int x, int y);
++void W100TrajectoryOrigin(W100CardInfo *w100c, BoxPtr box, short *x, short *y);
++void W100ScaleBox(BoxPtr src, BoxPtr dst, int scale);
++void W100MoveTo(BoxPtr src, int x, int y);
++
++
++
+#endif
+--- xorg-server-X11R7.1-1.1.0.work/hw/kdrive/linux/tslib.c~kdrive-imageon
++++ xorg-server-X11R7.1-1.1.0.work/hw/kdrive/linux/tslib.c
+@@ -92,6 +92,10 @@
+ void (*tslib_raw_event_hook)(int x, int y, int pressure, void *closure);
+ void *tslib_raw_event_closure;
+
++/* To support randr hot resolution change */
++void (*tslib_transform_coords)(long *x, long *y, void *closure);
++void *tslib_transform_closure;
++
+ int TsInputType = 0;
+ int KdTsPhyScreen = 0; /* XXX Togo .. */
+
+@@ -121,7 +125,9 @@
+ flags = (event.pressure) ? KD_BUTTON_1 : 0;
+ x = event.x;
+ y = event.y;
+-
++ if (tslib_transform_coords) {
++ tslib_transform_coords(&x, &y, tslib_transform_closure);
++ }
+ KdEnqueueMouseEvent (mi, flags, x, y);
+ }
+ }
diff --git a/packages/xorg-xserver/xserver-kdrive/w100-fix-offscreen-bmp.patch b/packages/xorg-xserver/xserver-kdrive/w100-fix-offscreen-bmp.patch
new file mode 100644
index 0000000000..39bc22c6b3
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/w100-fix-offscreen-bmp.patch
@@ -0,0 +1,15 @@
+Patch suggested by Manuel Teira to actually enable offscreen pixmap
+acceleration in Xw100. Value 16 is empirical, works well on hx4700,
+but in case of issues, consider double it (other accelerated drivers
+use bigger values than 16).
+
+--- xorg-server-1.2.0/hw/kdrive/w100/ati_draw.c.org 2007-04-04 10:28:57.000000000 +0000
++++ xorg-server-1.2.0/hw/kdrive/w100/ati_draw.c 2007-04-06 14:43:40.000000000 +0000
+@@ -433,6 +433,7 @@
+ * or kaaPixmapUseScreen. But this is probably caused by some bug in this
+ * driver... */
+ atis->kaa.flags |= KAA_OFFSCREEN_PIXMAPS;
++ atis->kaa.pitchAlign = 16;
+ if (!kaaDrawInit(pScreen, &atis->kaa))
+ return FALSE;
+
diff --git a/packages/xorg-xserver/xserver-kdrive/xfbdev-fb-opt.patch b/packages/xorg-xserver/xserver-kdrive/xfbdev-fb-opt.patch
new file mode 100644
index 0000000000..a8f002ea2a
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive/xfbdev-fb-opt.patch
@@ -0,0 +1,82 @@
+---
+ hw/kdrive/fbdev/fbdev.c | 17 ++++++++++++-----
+ hw/kdrive/fbdev/fbdev.h | 1 +
+ hw/kdrive/fbdev/fbinit.c | 20 ++++++++++++++++----
+ 3 files changed, 29 insertions(+), 9 deletions(-)
+
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbdev.c
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbdev.c
+@@ -33,16 +33,23 @@
+
+ extern int KdTsPhyScreen;
+
++char *fbdevDevicePath = NULL;
+ Bool
+ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv)
+ {
+ int k;
+ unsigned long off;
+- if ((priv->fd = open("/dev/fb0", O_RDWR)) < 0 && \
+- (priv->fd = open("/dev/fb/0", O_RDWR)) < 0) {
+- perror("Error opening /dev/fb0");
+- return FALSE;
+- }
++
++ if (fbdevDevicePath == NULL)
++ fbdevDevicePath = "/dev/fb0";
++
++ if ((priv->fd = open(fbdevDevicePath, O_RDWR)) < 0)
++ {
++ ErrorF("Error opening framebuffer %s: %s\n",
++ fbdevDevicePath, strerror(errno));
++ return FALSE;
++ }
++
+ /* quiet valgrind */
+ memset (&priv->fix, '\0', sizeof (priv->fix));
+ if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0) {
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbdev.h
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbdev.h
+@@ -53,6 +53,7 @@ typedef struct _fbdevScrPriv {
+ } FbdevScrPriv;
+
+ extern KdCardFuncs fbdevFuncs;
++extern char* fbdevDevicePath;
+
+ Bool
+ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv);
+--- xorg-server-X11R7.1-1.1.0.orig/hw/kdrive/fbdev/fbinit.c
++++ xorg-server-X11R7.1-1.1.0/hw/kdrive/fbdev/fbinit.c
+@@ -59,16 +59,28 @@ InitInput (int argc, char **argv)
+ void
+ ddxUseMsg (void)
+ {
+- KdUseMsg();
++ KdUseMsg();
++ ErrorF("\nXfbdev Device Usage:\n");
++ ErrorF("-fb path Framebuffer device to use. Defaults to /dev/fb0\n");
++ ErrorF("\n");
+ }
+
+ int
+ ddxProcessArgument (int argc, char **argv, int i)
+ {
+- return KdProcessArgument (argc, argv, i);
+-}
+-
++ if (!strcmp (argv[i], "-fb"))
++ {
++ if (i+1 < argc)
++ {
++ fbdevDevicePath = argv[i+1];
++ return 2;
++ }
++ UseMsg();
++ exit(1);
++ }
+
++ return KdProcessArgument (argc, argv, i);
++}
+
+ KdCardFuncs fbdevFuncs = {
+ fbdevCardInit, /* cardinit */
diff --git a/packages/xorg-xserver/xserver-kdrive_1.1.0.bb b/packages/xorg-xserver/xserver-kdrive_1.1.0.bb
new file mode 100644
index 0000000000..2c7e1d5f48
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive_1.1.0.bb
@@ -0,0 +1,59 @@
+LICENSE = "MIT"
+DEPENDS = "tslib xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto calibrateproto recordproto videoproto scrnsaverproto"
+
+PROVIDES = "virtual/xserver"
+PACKAGES =+ "xserver-kdrive-fbdev xserver-kdrive-fake xserver-kdrive-xephyr"
+SECTION = "x11/base"
+DESCRIPTION = "X server from freedesktop.org"
+DESCRIPTION_xserver-kdrive-fbdev = "X server from freedesktop.org, supporting generic framebuffer devices"
+DESCRIPTION_xserver-kdrive-fake = "Fake X server"
+DESCRIPTION_xserver-kdrive-xephyr = "X server in an X window"
+
+PE = "1"
+
+FILES_${PN} = "${libdir}/xserver"
+FILES_xserver-kdrive-fbdev = "${bindir}/Xfbdev"
+FILES_xserver-kdrive-fake = "${bindir}/Xfake"
+FILES_xserver-kdrive-xephyr = "${bindir}/Xephyr"
+
+RDEPENDS_xserver-kdrive-fbdev = "${PN}"
+RDEPENDS_xserver-kdrive-fake = "${PN}"
+RDEPENDS_xserver-kdrive-xephyr = "${PN}"
+
+SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-1.1.0.tar.bz2 \
+ file://kmode.patch;patch=1 \
+ file://disable-apm.patch;patch=1 \
+ file://no-serial-probing.patch;patch=1 \
+ file://kdrive-evdev.patch;patch=1 \
+ file://kdrive-use-evdev.patch;patch=1 \
+ file://fbdev-not-fix.patch;patch=1 \
+ file://enable-builtin-fonts.patch;patch=1 \
+ file://optional-xkb.patch;patch=1 \
+ file://disable-xf86-dga-xorgcfg.patch;patch=1 \
+ file://enable-tslib.patch;patch=1 \
+ file://xcalibrate.patch;patch=1 \
+ file://xfbdev-fb-opt.patch;patch=1 \
+ file://hide-cursor-and-ppm-root.patch;patch=1"
+
+SRC_URI_append_mnci = " file://onlyfb.patch;patch=1"
+SRC_URI_append_poodle = " file://xserver-kdrive-poodle.patch;patch=1"
+SRC_URI_append_qemux86 = " file://xserver-kdrive-poodle.patch;patch=1"
+PACKAGE_ARCH_poodle = "poodle"
+
+S = "${WORKDIR}/xorg-server-1.1.0"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-composite --enable-kdrive \
+ --disable-dga --disable-dri --disable-xinerama \
+ --disable-xf86misc --disable-xf86vidmode \
+ --disable-xorg --disable-xorgcfg \
+ --disable-dmx \
+ --disable-xkb --disable-xnest --disable-xvfb \
+ --disable-xevie --disable-xprint --disable-xtrap \
+ --with-default-font-path=built-ins \
+ ac_cv_file__usr_share_X11_sgml_defs_ent=no"
+
+do_configure_prepend() {
+ sed -i -e 's/tslib-0.0/tslib-1.0/' ${S}/configure.ac
+}
diff --git a/packages/xorg-xserver/xserver-kdrive_1.2.0.bb b/packages/xorg-xserver/xserver-kdrive_1.2.0.bb
new file mode 100644
index 0000000000..5af854c3f0
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive_1.2.0.bb
@@ -0,0 +1,21 @@
+require xserver-kdrive-common.inc
+
+DEPENDS += "libxkbfile libxcalibrate"
+
+PE = "1"
+PR = "r9"
+
+SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
+ ${KDRIVE_COMMON_PATCHES} \
+ file://enable-xcalibrate.patch;patch=1 \
+ file://w100.patch;patch=1 \
+ file://w100-fix-offscreen-bmp.patch;patch=1 \
+ file://fbcompositesrc8888revnpx0565.patch;patch=1 \
+ file://xcalibrate_coords.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/xorg-server-${PV}"
+
+W100_OECONF = "--disable-w100"
+W100_OECONF_arm = "--enable-w100"
+
diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
new file mode 100644
index 0000000000..9adc638c17
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
@@ -0,0 +1,22 @@
+require xserver-kdrive-common.inc
+
+DEPENDS += "libxkbfile libxcalibrate"
+
+PE = "1"
+PR = "r16"
+
+SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
+ ${KDRIVE_COMMON_PATCHES} \
+ file://fix_default_mode.patch;patch=1 \
+ file://enable-xcalibrate.patch;patch=1 \
+ file://hide-cursor-and-ppm-root.patch;patch=1 \
+ file://xcalibrate_coords.patch;patch=1 \
+ file://w100.patch;patch=1 \
+ file://w100-fix-offscreen-bmp.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/xorg-server-${PV}"
+
+W100_OECONF = "--disable-w100"
+W100_OECONF_arm = "--enable-w100"
+
diff --git a/packages/xorg-xserver/xserver-kdrive_X11R7.1-1.1.0.bb b/packages/xorg-xserver/xserver-kdrive_X11R7.1-1.1.0.bb
deleted file mode 100644
index 1fdee510e2..0000000000
--- a/packages/xorg-xserver/xserver-kdrive_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,130 +0,0 @@
-LICENSE = "MIT"
-DEPENDS = "tslib virtual/libsdl xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto xcalibrateext recordproto videoproto scrnsaverproto"
-
-PR = "r7"
-
-PROVIDES = "virtual/xserver"
-RPROVIDES = "virtual/xserver"
-PACKAGES =+ "xserver-kdrive-fbdev \
- xserver-kdrive-sdl \
- xserver-kdrive-fake \
- xserver-kdrive-xephyr \
- xserver-kdrive-epson \
- xserver-kdrive-w100 \
- xserver-kdrive-ati \
- xserver-kdrive-chips \
- xserver-kdrive-i810 \
- xserver-kdrive-mach64 \
- xserver-kdrive-mga \
- xserver-kdrive-neomagic \
- xserver-kdrive-nvidia \
- xserver-kdrive-pm2 \
- xserver-kdrive-r128 \
- xserver-kdrive-smi \
- xserver-kdrive-vesa \
- xserver-kdrive-via \
- "
-
-SECTION = "x11/base"
-DESCRIPTION = "X server from freedesktop.org"
-DESCRIPTION_xserver-kdrive-fbdev = "X server from freedesktop.org, supporting generic framebuffer devices"
-DESCRIPTION_xserver-kdrive-fake = "Fake X server"
-DESCRIPTION_xserver-kdrive-xephyr = "X server in an X window"
-DESCRIPTION_xserver-kdrive-epson = "X server from freedesktop.org, supporting Epson S1D13806 devices"
-DESCRIPTION_xserver-kdrive-sdl = "X server from freedesktop.org, SDL version"
-DESCRIPTION_xserver-kdrive-w100 = "X server from freedesktop.org, supporting the ATI imageon w100 chipset"
-DESCRIPTION_xserver-kdrive-ati = "X server from freedesktop.org, supporting ATI devices"
-DESCRIPTION_xserver-kdrive-chips = "X server from freedesktop.org, supporting Chips chipsets"
-DESCRIPTION_xserver-kdrive-i810 = "X server from freedesktop.org, supporting Intel chipsets"
-DESCRIPTION_xserver-kdrive-mach64 = "X server from freedesktop.org, supporting mach64 chipsets"
-DESCRIPTION_xserver-kdrive-mga = "X server from freedesktop.org, supporting mga chipsets"
-DESCRIPTION_xserver-kdrive-neomagic = "X server from freedesktop.org, supporting neomagic chipsets"
-DESCRIPTION_xserver-kdrive-nvidia = "X server from freedesktop.org, supporting nvidia devices"
-DESCRIPTION_xserver-kdrive-pm2 = "X server from freedesktop.org, supporting Permedia2 chipsets"
-DESCRIPTION_xserver-kdrive-r128 = "X server from freedesktop.org, supporting rage128 chipsets"
-DESCRIPTION_xserver-kdrive-smi = "X server from freedesktop.org, supporting Silicon Motion devices"
-DESCRIPTION_xserver-kdrive-vesa = "X server from freedesktop.org, supporting any card with a VESA, VGA or even EGA BIOS. x86 hardware only"
-DESCRIPTION_xserver-kdrive-via = "X server from freedesktop.org, supporting VIA chipsets"
-
-FILES_${PN} += "${libdir}/xserver/SecurityPolicy"
-
-FILES_xserver-kdrive-fbdev = "${bindir}/Xfbdev"
-FILES_xserver-kdrive-fake = "${bindir}/Xfake"
-FILES_xserver-kdrive-xephyr = "${bindir}/Xephyr"
-FILES_xserver-kdrive-epson = "${bindir}/Xepson"
-FILES_xserver-kdrive-sdl = "${bindir}/Xsdl"
-FILES_xserver-kdrive-w100 = "${bindir}/Xw100"
-FILES_xserver-kdrive-ati = "${bindir}/Xati"
-FILES_xserver-kdrive-chips = "${bindir}/Xchips"
-FILES_xserver-kdrive-i810 = "${bindir}/Xi810"
-FILES_xserver-kdrive-mach64 = "${bindir}/Xmach64"
-FILES_xserver-kdrive-mga = "${bindir}/Xmga"
-FILES_xserver-kdrive-neomagic = "${bindir}/Xneomagic"
-FILES_xserver-kdrive-nvidia = "${bindir}/Xnvidia"
-FILES_xserver-kdrive-pm2 = "${bindir}/Xpm2"
-FILES_xserver-kdrive-r128 = "${bindir}/Xr128"
-FILES_xserver-kdrive-smi = "${bindir}/Xsmi"
-FILES_xserver-kdrive-vesa = "${bindir}/Xvesa"
-FILES_xserver-kdrive-via = "${bindir}/Xvia"
-
-RDEPENDS_xserver-kdrive-fbdev = "${PN}"
-RDEPENDS_xserver-kdrive-fake = "${PN}"
-RDEPENDS_xserver-kdrive-xephyr = "${PN}"
-RDEPENDS_xserver-kdrive-epson = "${PN}"
-RDEPENDS_xserver-kdrive-sdl = "${PN}"
-RDEPENDS_xserver-kdrive-w100 = "${PN}"
-RDEPENDS_xserver-kdrive-ati = "${PN}"
-RDEPENDS_xserver-kdrive-chips = "${PN}"
-RDEPENDS_xserver-kdrive-i810 = "${PN}"
-RDEPENDS_xserver-kdrive-mach64 = "${PN}"
-RDEPENDS_xserver-kdrive-mga = "${PN}"
-RDEPENDS_xserver-kdrive-neomagic = "${PN}"
-RDEPENDS_xserver-kdrive-nvidia = "${PN}"
-RDEPENDS_xserver-kdrive-pm2 = "${PN}"
-RDEPENDS_xserver-kdrive-r128 = "${PN}"
-RDEPENDS_xserver-kdrive-smi = "${PN}"
-RDEPENDS_xserver-kdrive-vesa = "${PN}"
-RDEPENDS_xserver-kdrive-via = "${PN}"
-
-SRC_URI = "http://ftp.x.org/pub/X11R7.1/src/xserver/xorg-server-X11R7.1-1.1.0.tar.bz2 \
- file://kmode.patch;patch=1 \
- file://disable-apm.patch;patch=1 \
- file://no-serial-probing.patch;patch=1 \
- file://kdrive-evdev.patch;patch=1 \
- file://kdrive-use-evdev.patch;patch=1 \
- file://fbdev-not-fix.patch;patch=1 \
- file://enable-builtin-fonts.patch;patch=1 \
- file://optional-xkb.patch;patch=1 \
- file://enable-epson.patch;patch=1 \
- file://disable-xf86-dga-xorgcfg.patch;patch=1 \
- file://w100.patch;patch=1 \
- file://enable-tslib.patch;patch=1 \
- file://xcalibrate.patch;patch=1 \
- file://kmode-palm.patch;patch=1"
-
-SRC_URI_append_mnci = " file://onlyfb.patch;patch=1"
-SRC_URI_append_poodle = " file://xserver-kdrive-poodle.patch;patch=1"
-PACKAGE_ARCH_poodle = "poodle"
-PACKAGE_ARCH_palmtx = "palmtx"
-PACKAGE_ARCH_palmld = "palmld"
-PACKAGE_ARCH_palmz72 = "palmz72"
-
-S = "${WORKDIR}/xorg-server-X11R7.1-1.1.0"
-
-inherit autotools pkgconfig
-
-ARM_INSTRUCTION_SET = "arm"
-
-W100_OECONF = "--disable-w100"
-W100_OECONF_arm = "--enable-w100"
-
-EXTRA_OECONF = "--enable-composite --enable-kdrive \
- --disable-dga --disable-dri --disable-xinerama \
- --disable-xf86misc --disable-xf86vidmode \
- --disable-xorg --disable-xorgcfg \
- --disable-xkb --disable-xnest --disable-xvfb \
- --disable-xevie --disable-xprint --disable-xtrap \
- --disable-dmx ${W100_OECONF} \
- --with-default-font-path=built-ins \
- --enable-tslib --enable-xcalibrate \
- ac_cv_file__usr_share_X11_sgml_defs_ent=no"
diff --git a/packages/xorg-xserver/xserver-kdrive_git.bb b/packages/xorg-xserver/xserver-kdrive_git.bb
index 0fc9ec1997..4e511fe694 100644
--- a/packages/xorg-xserver/xserver-kdrive_git.bb
+++ b/packages/xorg-xserver/xserver-kdrive_git.bb
@@ -1,38 +1,20 @@
PV = "1.1.0+git${SRCDATE}"
DEFAULT_PREFERENCE = "-2"
-PR = "r7"
-
LICENSE = "MIT"
-DEPENDS = "tslib virtual/libsdl libxkbfile xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto libxcalibrate recordproto videoproto scrnsaverproto"
+DEPENDS = "tslib xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto calibrateproto recordproto videoproto scrnsaverproto"
PROVIDES = "virtual/xserver"
-RPROVIDES = "virtual/xserver"
-PACKAGES =+ "xserver-kdrive-fbdev xserver-kdrive-sdl xserver-kdrive-fake xserver-kdrive-xephyr xserver-kdrive-epson xserver-kdrive-w100"
+PACKAGES = "xserver-kdrive-fbdev xserver-kdrive-fake xserver-kdrive-xephyr ${PN}-doc ${PN}-dev ${PN}-locale"
SECTION = "x11/base"
DESCRIPTION = "X server from freedesktop.org"
DESCRIPTION_xserver-kdrive-fbdev = "X server from freedesktop.org, supporting generic framebuffer devices"
DESCRIPTION_xserver-kdrive-fake = "Fake X server"
DESCRIPTION_xserver-kdrive-xephyr = "X server in an X window"
-DESCRIPTION_xserver-kdrive-epson = "X server from freedesktop.org, supporting Epson S1D13806 devices"
-DESCRIPTION_xserver-kdrive-sdl = "X server from freedesktop.org, SDL version"
-DESCRIPTION_xserver-kdrive-w100 = "X server from freedesktop.org, supporting the ATI imageon w100 chipset"
-
-FILES_${PN} += "${libdir}/xserver/SecurityPolicy"
FILES_xserver-kdrive-fbdev = "${bindir}/Xfbdev"
FILES_xserver-kdrive-fake = "${bindir}/Xfake"
FILES_xserver-kdrive-xephyr = "${bindir}/Xephyr"
-FILES_xserver-kdrive-epson = "${bindir}/Xepson"
-FILES_xserver-kdrive-sdl = "${bindir}/Xsdl"
-FILES_xserver-kdrive-w100 = "${bindir}/Xw100"
-
-RDEPENDS_xserver-kdrive-fbdev = "${PN}"
-RDEPENDS_xserver-kdrive-fake = "${PN}"
-RDEPENDS_xserver-kdrive-xephyr = "${PN}"
-RDEPENDS_xserver-kdrive-epson = "${PN}"
-RDEPENDS_xserver-kdrive-sdl = "${PN}"
-RDEPENDS_xserver-kdrive-w100 = "${PN}"
SRC_URI = "git://anongit.freedesktop.org/xorg/xserver;protocol=git \
file://kmode.patch;patch=1 \
@@ -43,10 +25,8 @@ SRC_URI = "git://anongit.freedesktop.org/xorg/xserver;protocol=git \
file://fbdev-not-fix.patch;patch=1 \
file://enable-builtin-fonts.patch;patch=1 \
file://optional-xkb.patch;patch=1 \
- file://enable-epson.patch;patch=1 \
- file://disable-xf86-dga-xorgcfg-git.patch;patch=1 \
- file://w100.patch;patch=1 \
- "
+# file://disable-xf86-dga-xorgcfg.patch;patch=1 \
+ file://enable-tslib.patch;patch=1"
SRC_URI_append_mnci = " file://onlyfb.patch;patch=1"
SRC_URI_append_poodle = " file://xserver-kdrive-poodle.patch;patch=1"
@@ -54,18 +34,14 @@ PACKAGE_ARCH_poodle = "poodle"
S = "${WORKDIR}/git"
-inherit autotools pkgconfig
-
-W100_OECONF = "--disable-w100"
-W100_OECONF_arm = "--enable-w100"
+inherit autotools pkgconfig
EXTRA_OECONF = "--enable-composite --enable-kdrive \
- --disable-dga --disable-dri --disable-xinerama \
- --disable-xf86misc --disable-xf86vidmode \
- --disable-xorg --disable-xorgcfg \
- --disable-xkb --disable-xnest --disable-xvfb \
- --disable-xevie --disable-xprint --disable-xtrap \
- --disable-dmx ${W100_OECONF} \
- --with-default-font-path=built-ins \
- --enable-tslib --enable-xcalibrate \
- ac_cv_file__usr_share_X11_sgml_defs_ent=no"
+ --disable-dga --disable-dri --disable-xinerama \
+ --disable-xf86misc --disable-xf86vidmode \
+ --disable-xorg --disable-xorgcfg \
+ --disable-xkb --disable-xnest --disable-xvfb \
+ --disable-xevie --disable-xprint --disable-xtrap \
+ --disable-dmx \
+ --with-default-font-path=built-ins \
+ ac_cv_file__usr_share_X11_sgml_defs_ent=no"
diff --git a/packages/xorg-xserver/xserver-xorg/no-screen-blanking.patch b/packages/xorg-xserver/xserver-xorg/no-screen-blanking.patch
new file mode 100644
index 0000000000..021ba6cded
--- /dev/null
+++ b/packages/xorg-xserver/xserver-xorg/no-screen-blanking.patch
@@ -0,0 +1,13 @@
+--- xserver/include/site.h-orig 2006-11-02 10:37:14.000000000 +0000
++++ xserver/include/site.h 2006-11-02 10:37:14.000000000 +0000
+@@ -117,8 +117,8 @@
+ #define DEFAULT_PTR_DENOMINATOR 1
+ #define DEFAULT_PTR_THRESHOLD 4
+
+-#define DEFAULT_SCREEN_SAVER_TIME (10 * (60 * 1000))
+-#define DEFAULT_SCREEN_SAVER_INTERVAL (10 * (60 * 1000))
++#define DEFAULT_SCREEN_SAVER_TIME 0
++#define DEFAULT_SCREEN_SAVER_INTERVAL 0
+ #define DEFAULT_SCREEN_SAVER_BLANKING PreferBlanking
+ #define DEFAULT_SCREEN_SAVER_EXPOSURES AllowExposures
+ #ifndef NOLOGOHACK
diff --git a/packages/xorg-xserver/xserver-xorg_1.2.0.bb b/packages/xorg-xserver/xserver-xorg_1.2.0.bb
new file mode 100644
index 0000000000..78fdc01b46
--- /dev/null
+++ b/packages/xorg-xserver/xserver-xorg_1.2.0.bb
@@ -0,0 +1,12 @@
+MESA_VER = "6.5.2"
+
+require xorg-xserver-common.inc
+PE = "1"
+
+EXTRA_OECONF += " ac_cv_file__usr_share_X11_sgml_defs_ent=no "
+
+export LDFLAGS += " -ldl "
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-xserver/xserver-xorg_1.3.0.0.bb b/packages/xorg-xserver/xserver-xorg_1.3.0.0.bb
new file mode 100644
index 0000000000..78fdc01b46
--- /dev/null
+++ b/packages/xorg-xserver/xserver-xorg_1.3.0.0.bb
@@ -0,0 +1,12 @@
+MESA_VER = "6.5.2"
+
+require xorg-xserver-common.inc
+PE = "1"
+
+EXTRA_OECONF += " ac_cv_file__usr_share_X11_sgml_defs_ent=no "
+
+export LDFLAGS += " -ldl "
+
+#DESCRIPTION = ""
+
+#DEPENDS += " "
diff --git a/packages/xorg-xserver/xserver-xorg_X11R7.0-1.0.1.bb b/packages/xorg-xserver/xserver-xorg_X11R7.0-1.0.1.bb
deleted file mode 100644
index e91a50a603..0000000000
--- a/packages/xorg-xserver/xserver-xorg_X11R7.0-1.0.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-xserver-common.inc
-
-PR = "r3"
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
-SRC_URI += " file://miext_layer_shadow_h.patch;patch=1 \
- file://xpconfig-parentdir.patch;patch=1"
-
diff --git a/packages/xorg-xserver/xserver-xorg_X11R7.1-1.1.0.bb b/packages/xorg-xserver/xserver-xorg_X11R7.1-1.1.0.bb
deleted file mode 100644
index 3c29684394..0000000000
--- a/packages/xorg-xserver/xserver-xorg_X11R7.1-1.1.0.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require xorg-xserver-common.inc
-
-SRC_URI += "file://drmfix.patch;patch=1"
-
-PR = "r3"
-
-EXTRA_OECONF += " ac_cv_file__usr_share_X11_sgml_defs_ent=no "
-
-#DESCRIPTION = ""
-
-#DEPENDS += " "
diff --git a/packages/xorg-xserver/xserver-xorg_cvs.bb b/packages/xorg-xserver/xserver-xorg_cvs.bb
index e410581e17..e8e19aaff8 100644
--- a/packages/xorg-xserver/xserver-xorg_cvs.bb
+++ b/packages/xorg-xserver/xserver-xorg_cvs.bb
@@ -1,6 +1,5 @@
SECTION = "x11/base"
LICENSE = "Xorg"
-RPROVIDES = "virtual/xserver"
PROVIDES = "virtual/xserver"
PR = "r3"
PV = "6.8.1+cvs${SRCDATE}"
diff --git a/packages/xournal/files/no-printing.diff b/packages/xournal/files/no-printing.diff
deleted file mode 100644
index 7a4724e696..0000000000
--- a/packages/xournal/files/no-printing.diff
+++ /dev/null
@@ -1,178 +0,0 @@
-diff -ru xournal-0.2/configure.in xournal-0.2.noprint/configure.in
---- xournal-0.2/configure.in 2006-01-29 22:25:10.000000000 +0000
-+++ xournal-0.2.noprint/configure.in 2006-03-17 13:08:01.000000000 +0000
-@@ -10,11 +10,16 @@
- AM_PROG_CC_STDC
- AC_HEADER_STDC
-
--pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0"
-+pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0"
- PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
- AC_SUBST(PACKAGE_CFLAGS)
- AC_SUBST(PACKAGE_LIBS)
-
-+#PKG_CHECK_MODULES(GNOMEPRINT, libgnomeprintui-2.2 >= 2.0.0
-+#AC_SUBST(GNOMEPRINT_CFLAGS)
-+#AC_SUBST(GNOMEPRINT_LIBS)
-+AM_CONDITIONAL(ENABLE_PRINTING, false)
-+
- AC_OUTPUT([
- Makefile
- src/Makefile
-diff -ru xournal-0.2/src/main.c xournal-0.2.noprint/src/main.c
---- xournal-0.2/src/main.c 2006-01-29 22:22:52.000000000 +0000
-+++ xournal-0.2.noprint/src/main.c 2006-03-17 13:14:50.000000000 +0000
-@@ -28,7 +28,9 @@
-
- void hide_unimplemented(void)
- {
-+#if ENABLE_PRINTING
- gtk_widget_hide(GET_COMPONENT("filePrintOptions"));
-+#endif
- gtk_widget_hide(GET_COMPONENT("journalFlatten"));
- gtk_widget_hide(GET_COMPONENT("papercolorOther"));
- gtk_widget_hide(GET_COMPONENT("journalApplyAllPages"));
-diff -ru xournal-0.2/src/Makefile.am xournal-0.2.noprint/src/Makefile.am
---- xournal-0.2/src/Makefile.am 2005-12-14 20:54:42.000000000 +0000
-+++ xournal-0.2.noprint/src/Makefile.am 2006-03-17 13:07:47.000000000 +0000
-@@ -7,12 +7,16 @@
-
- bin_PROGRAMS = xournal
-
-+if ENABLE_PRINTING
-+PRINT_SOURCE = xo-print.c xo-print.h
-+endif
-+
- xournal_SOURCES = \
- main.c xournal.h \
- xo-misc.c xo-misc.h \
- xo-file.c xo-file.h \
- xo-paint.c xo-paint.h \
-- xo-print.c xo-print.h \
-+ $(PRINT_SOURCE) \
- xo-support.c xo-support.h \
- xo-interface.c xo-interface.h \
- xo-callbacks.c xo-callbacks.h
-diff -ru xournal-0.2/src/xo-callbacks.c xournal-0.2.noprint/src/xo-callbacks.c
---- xournal-0.2/src/xo-callbacks.c 2006-01-29 19:39:22.000000000 +0000
-+++ xournal-0.2.noprint/src/xo-callbacks.c 2006-03-17 13:12:01.000000000 +0000
-@@ -7,7 +7,9 @@
- #include <gtk/gtk.h>
- #include <libgnomecanvas/libgnomecanvas.h>
- #include <time.h>
-+#if ENABLE_PRINTING
- #include <libgnomeprintui/gnome-print-dialog.h>
-+#endif
- #include <glib/gstdio.h>
-
- #include "xournal.h"
-@@ -17,7 +19,9 @@
- #include "xo-misc.h"
- #include "xo-file.h"
- #include "xo-paint.h"
-+#if ENABLE_PRINTING
- #include "xo-print.h"
-+#endif
-
- void
- on_fileNew_activate (GtkMenuItem *menuitem,
-@@ -261,7 +265,7 @@
-
- }
-
--
-+#if ENABLE_PRINTING
- void
- on_filePrint_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-@@ -407,7 +411,7 @@
-
- g_free(filename);
- }
--
-+#endif
-
- void
- on_fileQuit_activate (GtkMenuItem *menuitem,
-diff -ru xournal-0.2/src/xo-callbacks.h xournal-0.2.noprint/src/xo-callbacks.h
---- xournal-0.2/src/xo-callbacks.h 2006-01-26 20:47:00.000000000 +0000
-+++ xournal-0.2.noprint/src/xo-callbacks.h 2006-03-17 13:08:45.000000000 +0000
-@@ -24,6 +24,7 @@
- on_filePrintOptions_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-
-+#if ENABLE_PRINTING
- void
- on_filePrint_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-@@ -32,6 +33,8 @@
- on_filePrintPDF_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-
-+#endif
-+
- void
- on_fileQuit_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-diff -ru xournal-0.2/src/xo-interface.c xournal-0.2.noprint/src/xo-interface.c
---- xournal-0.2/src/xo-interface.c 2006-01-29 18:58:25.000000000 +0000
-+++ xournal-0.2.noprint/src/xo-interface.c 2006-03-17 13:11:31.000000000 +0000
-@@ -41,10 +41,12 @@
- GtkWidget *fileSave;
- GtkWidget *fileSaveAs;
- GtkWidget *separator1;
-+#if ENABLE_PRINTING
- GtkWidget *filePrintOptions;
- GtkWidget *image501;
- GtkWidget *filePrint;
- GtkWidget *filePrintPDF;
-+#endif
- GtkWidget *separator2;
- GtkWidget *fileQuit;
- GtkWidget *menuEdit;
-@@ -327,6 +329,7 @@
- gtk_container_add (GTK_CONTAINER (menuFile_menu), separator1);
- gtk_widget_set_sensitive (separator1, FALSE);
-
-+#if ENABLE_PRINTING
- filePrintOptions = gtk_image_menu_item_new_with_mnemonic ("Print Options");
- gtk_widget_show (filePrintOptions);
- gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrintOptions);
-@@ -347,6 +350,7 @@
- gtk_widget_show (separator2);
- gtk_container_add (GTK_CONTAINER (menuFile_menu), separator2);
- gtk_widget_set_sensitive (separator2, FALSE);
-+#endif
-
- fileQuit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
- gtk_widget_show (fileQuit);
-@@ -1522,6 +1526,7 @@
- g_signal_connect ((gpointer) fileSaveAs, "activate",
- G_CALLBACK (on_fileSaveAs_activate),
- NULL);
-+#if ENABLE_PRINTING
- g_signal_connect ((gpointer) filePrintOptions, "activate",
- G_CALLBACK (on_filePrintOptions_activate),
- NULL);
-@@ -1531,6 +1536,7 @@
- g_signal_connect ((gpointer) filePrintPDF, "activate",
- G_CALLBACK (on_filePrintPDF_activate),
- NULL);
-+#endif
- g_signal_connect ((gpointer) fileQuit, "activate",
- G_CALLBACK (on_fileQuit_activate),
- NULL);
-@@ -1941,11 +1947,13 @@
- GLADE_HOOKUP_OBJECT (winMain, fileSave, "fileSave");
- GLADE_HOOKUP_OBJECT (winMain, fileSaveAs, "fileSaveAs");
- GLADE_HOOKUP_OBJECT (winMain, separator1, "separator1");
-+#if ENABLE_PRINTING
- GLADE_HOOKUP_OBJECT (winMain, filePrintOptions, "filePrintOptions");
- GLADE_HOOKUP_OBJECT (winMain, image501, "image501");
- GLADE_HOOKUP_OBJECT (winMain, filePrint, "filePrint");
- GLADE_HOOKUP_OBJECT (winMain, filePrintPDF, "filePrintPDF");
- GLADE_HOOKUP_OBJECT (winMain, separator2, "separator2");
-+#endif
- GLADE_HOOKUP_OBJECT (winMain, fileQuit, "fileQuit");
- GLADE_HOOKUP_OBJECT (winMain, menuEdit, "menuEdit");
- GLADE_HOOKUP_OBJECT (winMain, menuEdit_menu, "menuEdit_menu");
diff --git a/packages/xournal/files/xournal.desktop b/packages/xournal/files/xournal.desktop
new file mode 100644
index 0000000000..52dde1e47c
--- /dev/null
+++ b/packages/xournal/files/xournal.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Version=0.3.3
+Type=Application
+Name=Xournal
+Comment=Notetaking tool
+Exec=/usr/bin/xournal
+Icon=/usr/share/xournal/pixmaps/xournal.png
+Terminal=false
+
diff --git a/packages/xournal/xournal_0.2.bb b/packages/xournal/xournal_0.2.bb
deleted file mode 100644
index 6a4b6839b4..0000000000
--- a/packages/xournal/xournal_0.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-HOMEPAGE = "http://xournal.sf.net/"
-DESCRIPTION = "Xournal is an application for notetaking, sketching, keeping a journal using a stylus."
-DEPENDS = "gtk+ libgnomecanvas"
-SECTION = "x11"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "http://xournal.sourceforge.net/xournal-0.2.tar.gz \
- file://no-printing.diff;patch=1"
-
-inherit autotools pkgconfig
diff --git a/packages/xournal/xournal_0.3.1.bb b/packages/xournal/xournal_0.3.1.bb
deleted file mode 100644
index 077036b686..0000000000
--- a/packages/xournal/xournal_0.3.1.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-HOMEPAGE = "http://xournal.sf.net/"
-DESCRIPTION = "Xournal is an application for notetaking, sketching, keeping a journal using a stylus."
-DEPENDS = "gtk+ libgnomecanvas"
-SECTION = "x11"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "http://xournal.sourceforge.net/xournal-0.3.1.tar.gz \
- "
-
-inherit autotools pkgconfig
diff --git a/packages/xournal/xournal_0.3.3.bb b/packages/xournal/xournal_0.3.3.bb
new file mode 100644
index 0000000000..5a8a1b74b7
--- /dev/null
+++ b/packages/xournal/xournal_0.3.3.bb
@@ -0,0 +1,17 @@
+HOMEPAGE = "http://xournal.sf.net/"
+DESCRIPTION = "Xournal is an application for notetaking, sketching, keeping a journal using a stylus."
+DEPENDS = "gtk+ libgnomecanvas libgnomeprintui"
+SECTION = "x11"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://xournal.sourceforge.net/xournal-${PV}.tar.gz \
+ file://xournal.desktop"
+
+inherit autotools pkgconfig
+
+do_install_append () {
+ install -d ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/xournal.desktop ${D}${datadir}/applications/
+}
+
diff --git a/packages/xqt2/xqt2_20060509.bb b/packages/xqt2/xqt2_20060509.bb
index 7f49cccb17..12e210d036 100644
--- a/packages/xqt2/xqt2_20060509.bb
+++ b/packages/xqt2/xqt2_20060509.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
SECTION = "opie/applications"
APPTYPE = "binary"
APPNAME = "Xqt"
-PR = "r0"
+PR = "r2"
inherit palmtop
@@ -100,10 +100,8 @@ do_install() {
oe_runmake -C lib/font DESTDIR="${D}" CC="${CC}" LD="${LD}" \
CC_STAGING="-I${STAGING_INCDIR}" LD_STAGING="-L${STAGING_LIBDIR}" INSTALLED_LIBS="" install
- install -d ${D}${palmtopdir}/Apps/applications/
- install -m 0644 ${WORKDIR}/xqt2/xfree86/files/Xqt.desktop ${D}${palmtopdir}/Apps/applications
- install -d ${D}${palmtopdir}/bin/
- install -m 0755 ${D}${bindir}/Xqt ${D}${palmtopdir}/bin/Xqt
+ install -d ${D}${palmtopdir}/apps/Applications/
+ install -m 0644 ${WORKDIR}/xqt2/xfree86/files/Xqt.desktop ${D}${palmtopdir}/apps/Applications
install -d ${D}${palmtopdir}/pics
install -m 0644 programs/Xserver/hw/xqt/Xqt.png ${D}${palmtopdir}/pics
}
diff --git a/packages/xscrnsaverh/xscrnsaverh_1.0.bb b/packages/xscrnsaverh/xscrnsaverh_1.0.bb
index 7fc7e6e15a..2989054f44 100644
--- a/packages/xscrnsaverh/xscrnsaverh_1.0.bb
+++ b/packages/xscrnsaverh/xscrnsaverh_1.0.bb
@@ -1,7 +1,7 @@
PR = "r0"
-DEPENDS = "xextensions"
+DEPENDS = "libxext"
SECTION = "x11"
LICENSE = "X-MIT"
DESCRIPTION = "missing header"
diff --git a/packages/xserver-common/files/Xserver-udev-input-helper.patch b/packages/xserver-common/files/Xserver-udev-input-helper.patch
new file mode 100644
index 0000000000..b4adc9ab96
--- /dev/null
+++ b/packages/xserver-common/files/Xserver-udev-input-helper.patch
@@ -0,0 +1,11 @@
+--- xserver-common-1.8/X11/Xserver.orig 2006-05-07 17:40:10.540539080 +0200
++++ xserver-common-1.8/X11/Xserver 2006-05-07 17:40:35.187792128 +0200
+@@ -27,7 +27,7 @@
+
+ export USER=root
+
+-ARGS="-br -pn"
++ARGS="-br -pn $INPUT_EXTRA_ARGS"
+
+ # use ucb 1x00 touchscreen if present
+ if [ -z "$TSLIB_TSDEVICE" ] && [ -e /dev/touchscreen/ucb1x00 ]; then
diff --git a/packages/xserver-common/files/at-fix-slcxxxx.patch b/packages/xserver-common/files/at-fix-slcxxxx.patch
new file mode 100644
index 0000000000..cc2af5a245
--- /dev/null
+++ b/packages/xserver-common/files/at-fix-slcxxxx.patch
@@ -0,0 +1,8 @@
+--- xserver-common-1.8/X11/slcXXXX.xmodmap.orig 2006-05-07 14:22:14.500971520 +0200
++++ xserver-common-1.8/X11/slcXXXX.xmodmap 2006-05-07 14:22:28.955774056 +0200
+@@ -10,3 +10,5 @@
+ keycode 80 = F28
+ keycode 81 = F29
+ keycode 86 = F30
++
++keycode 20 = minus at at
diff --git a/packages/xserver-common/files/load-xmodmap-k26.patch b/packages/xserver-common/files/load-xmodmap-k26.patch
new file mode 100644
index 0000000000..bc5a20bb6f
--- /dev/null
+++ b/packages/xserver-common/files/load-xmodmap-k26.patch
@@ -0,0 +1,23 @@
+--- xserver-common-1.8/X11/Xinit.d/12keymap.orig 2006-04-14 22:57:16.200518376 +0200
++++ xserver-common-1.8/X11/Xinit.d/12keymap 2006-04-14 23:01:46.938359968 +0200
+@@ -4,18 +4,10 @@
+
+ case $MACHINE in
+ "SHARP Shepherd" | "SHARP Husky" | "SHARP Corgi")
+- case `uname -r` in
+- 2.4*)
+- xmodmap - < /etc/X11/shepherd.xmodmap
+- ;;
+- esac
++ xmodmap - < /etc/X11/shepherd.xmodmap
+ ;;
+ "SHARP Akita" | "SHARP Borzoi" | "SHARP Spitz")
+- case `uname -r` in
+- 2.4*)
+- xmodmap - < /etc/X11/slcXXXX.xmodmap
+- ;;
+- esac
++ xmodmap - < /etc/X11/slcXXXX.xmodmap
+ ;;
+ "Sharp-Collie")
+ xmodmap - < /etc/X11/collie.xmodmap
diff --git a/packages/xserver-common/files/sl-cxx00-modmap.patch b/packages/xserver-common/files/sl-cxx00-modmap.patch
new file mode 100644
index 0000000000..18cc8e88c9
--- /dev/null
+++ b/packages/xserver-common/files/sl-cxx00-modmap.patch
@@ -0,0 +1,120 @@
+Index: xserver-common-1.16/X11/slcXXXX.xmodmap
+===================================================================
+--- xserver-common-1.16.orig/X11/slcXXXX.xmodmap 2006-10-12 11:19:42.000000000 +0100
++++ xserver-common-1.16/X11/slcXXXX.xmodmap 2007-06-27 12:31:33.000000000 +0100
+@@ -1,5 +1,111 @@
+-keycode 88 = XF86Calendar
+-keycode 89 = telephone
+-keycode 40 = XF86Start
+-keycode 90 = XF86Mail
++! Modmap for Sharp Zaurus clamshells:
++! SL-C1000 (Akita)
++! SL-C3000 (Spitz)
++! SL-C3100 (Borzoi)
++! SL-C3200 (Terrier)
++!
++! Changelog:
++! version: 30 May 2007
++! Initial version
++!
++! This modmap adds an Alt_L and a compose key (Multi_Key)
++! at the Kana/Hira and Zen/Han keys. Users can set these to their
++! original Japanese functions if desired, but as a default putting at
++! least one Alt on the keyboard is a polite thing to do.
++!
++! Adds:
++! Fn + q = ` (grave)
++! Fn + - (minus) = @ (at)
++! Fn + 5 = € (Euro)
++! Fn + k = ¥ (Yen)
++! Fn + d = ・ (nakaten)
++! Fn + Backspace = Delete
++!
++! Currently unset:
++! Fn + Kana/Hira (カナï¼ã²ã‚‰)
++! Fn + Zen/Han (å…¨ï¼åŠ)
++! Fn + Space bar (音訓)
++! These should be bound to Japanese keysims for use with Japanese
++! IME's at a later date.
++! =======================================================================
++
++! The Euro character is not printed as a label, but as
++! the 5 doesn't have a blue Fn label, this is a nice extra
++! as a normal European keyboard has it on the 5 as third level
++! character
++keycode 14 = 5 percent EuroSign
++
++keycode 20 = minus minus at
++keycode 22 = BackSpace BackSpace Delete
++
++! The grave is not printed as a label, but is missing
++! so this is a nice place to add it, not too far from where it
++! is on a normal keyboard.
++keycode 24 = q Q grave
++
++! The nakaten character
++keycode 40 = d D kana_conjunctive
++
++! The Yen character
++keycode 45 = k K yen
++
++! This is the Kana/Hira key, right from "Ctrl"
++keycode 64 = Alt_L
++
++! Turn the Zen/Han key (left of minus) into the compose key
++keycode 105 = Multi_key
++
++! Control_R is gone, so clear out and reload control:
++clear control
++add control = Control_L
++
++! These are the 11 fields that generate keycodes
++! On the edge of the touchscreen. Every second one
++! (87, 89, 84, 79, 81) has a label, the rest doesn't,
++! but can be used as button nontheless, the size of the
++! eleven fields is the same.
++! These are mapped to F20..F30.
++! These buttons with Fn or Shift generate the F1..F11 keys.
++
++! No icon
++keycode 90 = F20 F1 F1
++! "Home" icon:
++keycode 87 = F21 F2 F2
++! No icon
++keycode 88 = F22 F3 F3
++! "Mail" icon:
++keycode 89 = F23 F4 F4
++! No icon
++keycode 83 = F24 F5 F5
++! "Address" icon:
++keycode 84 = F25 F6 F6
++! No icon
++keycode 85 = F26 F7 F7
++! "Calendar" icon:
++keycode 79 = F27 F8 F8
++! No icon
++keycode 80 = F28 F9 F9
++! "Book" icon:
++keycode 81 = F29 F10 F10
++! No icon
++keycode 86 = F30 F11 F11
++
++! These are the five buttons below the inbuilt keyboard
++! These are mapped to F13..F19
++! The Menu key generates F12 when pressed with Fn or Shift.
++
++! "Calendar" label and icon, "Sync" label beneath it:
++keycode 67 = F9 F14 F14
++! "Address" label and icon:
++keycode 68 = F10 F15 F15
++! "Mail" label and icon, "Check" label beneath it:
++keycode 76 = F13 F17 F17
++! "Home" label and icon:
++keycode 107 = F12 F18 F18
++! "Menu" label and icon:
++keycode 96 = F11 F12 F12
++
++! Shift the Mode_switch definition to a different mod so mozilla stuff works
++add mod5 = Mode_switch
++remove mod4 = Mode_switch
+
diff --git a/packages/xserver-common/files/softkeys-c7x0.patch b/packages/xserver-common/files/softkeys-c7x0.patch
new file mode 100644
index 0000000000..6ef2d9fb59
--- /dev/null
+++ b/packages/xserver-common/files/softkeys-c7x0.patch
@@ -0,0 +1,52 @@
+--- xserver-common-1.8/X11/shepherd.xmodmap.orig 2006-04-15 13:10:03.845853928 +0200
++++ xserver-common-1.8/X11/shepherd.xmodmap 2006-04-15 13:11:14.996037456 +0200
+@@ -1,49 +0,0 @@
+-keycode 38 = Mode_switch
+-keycode 31 = w W caret
+-keycode 13 = e E equal
+-keycode 26 = r R plus
+-keycode 28 = t T bracketleft
+-keycode 33 = y y bracketright
+-keycode 29 = u U braceleft
+-keycode 17 = i I braceright
+-!keycode 73 = Tab Tab Caps_Lock
+-keycode 12 = d D periodcentered
+-keycode 14 = f F backslash
+-keycode 15 = g G semicolon
+-keycode 16 = h H colon
+-keycode 18 = j J asterisk
+-keycode 19 = k K currency
+-keycode 20 = l L bar
+-keycode 10 = b B underscore
+-keycode 66 = minus minus at
+-keycode 71 = comma slash less
+-keycode 72 = period question greater
+-
+-! Side keys
+-keycode 134 = Down
+-keycode 133 = Up
+-keycode 131 = Return
+-keycode 132 = Escape
+-
+-!Special keys
+-!keycode 96 = XF86Calendar
+-!keycode 97 = telephone
+-!keycode 98 = XF86Mail
+-!keycode 48 = XF86HomePage
+-!keycode 37 = XF86Start
+-
+-clear Shift
+-clear Lock
+-clear Control
+-clear Mod1
+-clear Mod2
+-clear Mod3
+-clear Mod4
+-clear Mod5
+-
+-add Shift = Shift_L Shift_R
+-!add Lock = Caps_Lock
+-add Control = Control_L Control_R
+-add Mod1 = Alt_L Alt_R
+-add Mod2 = Mode_switch
+-
diff --git a/packages/xserver-common/files/softkeys-slcxxxx-xmodmap.patch b/packages/xserver-common/files/softkeys-slcxxxx-xmodmap.patch
new file mode 100644
index 0000000000..2f029e5352
--- /dev/null
+++ b/packages/xserver-common/files/softkeys-slcxxxx-xmodmap.patch
@@ -0,0 +1,20 @@
+--- xserver-common-1.8/X11/slcXXXX.xmodmap.orig 2006-04-15 13:03:51.471463440 +0200
++++ xserver-common-1.8/X11/slcXXXX.xmodmap 2006-04-15 13:05:04.576349808 +0200
+@@ -1,5 +1,12 @@
+-keycode 88 = XF86Calendar
+-keycode 89 = telephone
+-keycode 40 = XF86Start
+-keycode 90 = XF86Mail
+-
++
++keycode 90 = F20
++keycode 87 = F21
++keycode 88 = F22
++keycode 89 = F23
++keycode 83 = F24
++keycode 84 = F25
++keycode 85 = F26
++keycode 79 = F27
++keycode 80 = F28
++keycode 81 = F29
++keycode 86 = F30
diff --git a/packages/xserver-common/xserver-common_1.14.bb b/packages/xserver-common/xserver-common_1.14.bb
index d608231348..48320ba006 100644
--- a/packages/xserver-common/xserver-common_1.14.bb
+++ b/packages/xserver-common/xserver-common_1.14.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Common X11 scripts and support files"
LICENSE = "GPL"
SECTION = "x11"
RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo"
-PR = "r1"
+PR = "r2"
PACKAGE_ARCH = "all"
@@ -10,7 +10,8 @@ PACKAGE_ARCH = "all"
inherit gpe
SRC_URI_append = " file://setDPI.sh \
- file://xserver-imageon.patch;patch=1"
+ file://xserver-imageon.patch;patch=1 \
+ file://calibrate-only-if-ts.patch;patch=1"
do_install_append() {
install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi"
diff --git a/packages/xserver-common/xserver-common_1.15.bb b/packages/xserver-common/xserver-common_1.15.bb
new file mode 100644
index 0000000000..48320ba006
--- /dev/null
+++ b/packages/xserver-common/xserver-common_1.15.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Common X11 scripts and support files"
+LICENSE = "GPL"
+SECTION = "x11"
+RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo"
+PR = "r2"
+
+PACKAGE_ARCH = "all"
+
+# we are using a gpe-style Makefile
+inherit gpe
+
+SRC_URI_append = " file://setDPI.sh \
+ file://xserver-imageon.patch;patch=1 \
+ file://calibrate-only-if-ts.patch;patch=1"
+
+do_install_append() {
+ install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi"
+}
diff --git a/packages/xserver-common/xserver-common_1.16.bb b/packages/xserver-common/xserver-common_1.16.bb
new file mode 100644
index 0000000000..fcf1dcfd78
--- /dev/null
+++ b/packages/xserver-common/xserver-common_1.16.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Common X11 scripts and support files"
+LICENSE = "GPL"
+SECTION = "x11"
+RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo"
+PR = "r7"
+
+PACKAGE_ARCH = "all"
+
+# we are using a gpe-style Makefile
+inherit gpe
+
+SRC_URI_append = " file://setDPI.sh \
+ file://xserver-imageon.patch;patch=1 \
+ file://calibrate-only-if-ts.patch;patch=1 \
+ file://softkeys-c7x0.patch;patch=1 \
+ file://load-xmodmap-k26.patch;patch=1 \
+ file://Xserver-udev-input-helper.patch;patch=1 \
+ file://sl-cxx00-modmap.patch;patch=1 \
+ "
+
+do_install_append() {
+ install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi"
+}
diff --git a/packages/xserver-common/xserver-common_svn.bb b/packages/xserver-common/xserver-common_svn.bb
index e272ac1a87..546481d48f 100644
--- a/packages/xserver-common/xserver-common_svn.bb
+++ b/packages/xserver-common/xserver-common_svn.bb
@@ -6,8 +6,15 @@ DEPENDS = "xmodmap xrandr xdpyinfo xtscal"
PV = "1.12+svn${SRCDATE}"
S = "${WORKDIR}/xserver-common"
+PR = "r2"
+
SRC_URI = "${GPE_SVN} \
file://Makefile.translation \
file://Makefile.dpkg_ipkg \
file://svn_makefiles.patch;patch=1 \
- file://keyboardless-buttonmap.patch;patch=1"
+ file://keyboardless-buttonmap.patch;patch=1 \
+ file://softkeys-c7x0.patch;patch=1 \
+ file://sl-cxx00-modmap.patch;patch=1 \
+ file://load-xmodmap-k26.patch;patch=1 \
+ file://Xserver-udev-input-helper.patch;patch=1"
+
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xserver b/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xserver
index 983b875830..e59460f3b0 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xserver
+++ b/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xserver
@@ -87,14 +87,18 @@ case `module_id` in
"Cellon C8000 Board")
ARGS="$ARGS -dpi 100 -screen 240x320,10,1" ;;
"HTC Universal")
- ARGS="$ARGS -dpi 100 -screen 480x640@270" ;;
+ ARGS="$ARGS -dpi 225 -screen 480x640@270" ;;
"ARM-IntegratorCP" | "ARM-Versatile PB")
ARGS="$ARGS -rgba vrgb" ;;
"Compulab CM-x270")
modprobe mbxfb
ARGS="$ARGS -fb /dev/fb1"
;;
- *)
+ "GTA01")
+ ARGS="$ARGS -dpi 285 -screen 480x640" ;;
+ "Nokia N800")
+ ARGS="$ARGS -dpi 225 -screen 800x480x16 -mouse tslib" ;;
+ *)
# Its a device we dont know about - in which case force
# kdrive to use the current framebuffer geometry otherwise
# it will defualt to trying to achieve 1024x768
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
index c076a3435a..9d9b577766 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
+++ b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Common X11 scripts"
LICENSE = "GPL"
SECTION = "x11"
RDEPENDS_${PN} = "xmodmap libxrandr xdpyinfo xtscal xinit"
-PR = "r9"
+PR = "r14"
SRC_URI = "file://etc"
S = ${WORKDIR}
@@ -15,4 +15,4 @@ do_install() {
rm -fR ${D}/etc/*/.svn
rm -fR ${D}/etc/*/*/.svn
chmod -R 755 ${D}/etc
-} \ No newline at end of file
+}
diff --git a/packages/xtscal/xtscal.inc b/packages/xtscal/xtscal.inc
index 220c262a9f..8dc5d1a0c6 100644
--- a/packages/xtscal/xtscal.inc
+++ b/packages/xtscal/xtscal.inc
@@ -3,6 +3,9 @@ SECTION = "x11/base"
LICENSE = "GPL"
DEPENDS = "virtual/libx11 libxft libxrandr xcalibrate"
+# xtscal needs a font to display text
+RRECOMMENDS = "ttf-dejavu-sans"
+
SRC_URI = "${GPE_MIRROR}/xtscal-${PV}.tar.bz2"
inherit autotools
diff --git a/packages/xtscal/xtscal/change-cross.patch b/packages/xtscal/xtscal/change-cross.patch
new file mode 100644
index 0000000000..3ecd36bb5e
--- /dev/null
+++ b/packages/xtscal/xtscal/change-cross.patch
@@ -0,0 +1,16 @@
+--- tmp/main.c.orig 2007-01-02 15:39:54.000000000 +0000
++++ tmp/main.c 2007-01-02 15:39:54.000000000 +0000
+@@ -131,9 +131,10 @@
+ {
+ XRenderFillRectangles (dpy, PictOpSrc, pict, &rect_color, rectangles, 2);
+
+- XFillArc (dpy, crosshair_w, crosshair_gc, (CROSSHAIR_SIZE / 2) - (WIDTH / 2) - 1,
+- (CROSSHAIR_SIZE / 2) - (WIDTH / 2) - 1,
+- WIDTH + 1, WIDTH + 1, 0, 360 * 64);
++ XFillRectangle (dpy, crosshair_w, crosshair_gc,
++ (CROSSHAIR_SIZE / 2) - (WIDTH / 2),
++ (CROSSHAIR_SIZE / 2) - (WIDTH / 2),
++ WIDTH, WIDTH);
+ }
+
+ void
diff --git a/packages/xtscal/xtscal/cleanup.patch b/packages/xtscal/xtscal/cleanup.patch
new file mode 100644
index 0000000000..ce674edef6
--- /dev/null
+++ b/packages/xtscal/xtscal/cleanup.patch
@@ -0,0 +1,619 @@
+---
+ Makefile.am | 9 --
+ configure.ac | 3
+ gpe-dist.am | 12 ---
+ h3600_ts.h | 216 -----------------------------------------------------------
+ main.c | 210 ++-------------------------------------------------------
+ xtscal.in | 19 -----
+ 6 files changed, 14 insertions(+), 455 deletions(-)
+
+Index: xtscal-0.6.3/xtscal.in
+===================================================================
+--- xtscal-0.6.3.orig/xtscal.in 2004-09-10 20:10:36.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,19 +0,0 @@
+-#!/bin/sh
+-
+-module_id() {
+- # Get model name
+- echo `grep "^Hardware" /proc/cpuinfo | sed -e "s/.*: *//" | tr a-z A-Z`
+-}
+-
+-case `module_id` in
+- "HP IPAQ H3100" | "HP IPAQ H3800" )
+- ARGS="-rotate 90" ;;
+- "HP IPAQ H3600" | "HP IPAQ H3700" | "HP IPAQ H3900" | *COLLIE | *POODLE)
+- ARGS="-rotate 270" ;;
+- # H2200: works without rotation
+-esac
+-
+-# the things we do for autoconf
+-prefix=@prefix@
+-exec_prefix=@exec_prefix@
+-exec @libexecdir@/xtscal.bin $ARGS $*
+Index: xtscal-0.6.3/main.c
+===================================================================
+--- xtscal-0.6.3.orig/main.c 2007-07-01 01:12:52.000000000 +0100
++++ xtscal-0.6.3/main.c 2007-07-01 01:12:55.000000000 +0100
+@@ -22,12 +22,10 @@
+ #include <X11/Xlib.h>
+
+ #include <X11/extensions/Xrender.h>
+-#include <X11/extensions/Xrandr.h>
+ #include <X11/Xft/Xft.h>
+ #include <X11/extensions/xcalibrate.h>
+ #include <X11/keysym.h>
+
+-#include "h3600_ts.h"
+ #include "calibrate.h"
+
+ Display *dpy;
+@@ -45,15 +43,11 @@ XftColor xftcol;
+ XftDraw *xftdraw;
+ XftFont *xftfont;
+ int screen_x, screen_y;
+-int ts_fd;
+ int samples;
+ Pixmap bg_pixmap;
+ int flag_debug;
+-int rotation = 0;
+ int error_base, event_base;
+
+-int using_xcalibrate;
+-
+ int moving;
+
+ #define CROSSHAIR_SIZE 25
+@@ -63,7 +57,6 @@ int moving;
+ #define ENOUGH 5
+ #define MAX_SAMPLES 40
+
+-#define RAW_DEVICE "/dev/h3600_tsraw"
+ #define FONTNAME "sans-10"
+
+ struct point
+@@ -287,12 +280,8 @@ sort_by_y (const void* a, const void *b)
+ void
+ set_calibration (calibration *cal)
+ {
+- TS_CAL tc;
+- int xtrans, ytrans, xscale, yscale, xyscale, yxscale;
+ calibration ocal = *cal;
+
+- if (using_xcalibrate)
+- {
+ FILE *fp;
+ if (flag_debug)
+ printf ("constants are: %d %d %d %d %d %d %d\n", cal->a[1], cal->a[2], cal->a[0], cal->a[4], cal->a[5], cal->a[3], cal->a[6]);
+@@ -304,29 +293,6 @@ set_calibration (calibration *cal)
+ }
+ fprintf (fp, "%d %d %d %d %d %d %d\n", cal->a[1], cal->a[2], cal->a[0], cal->a[4], cal->a[5], cal->a[3], cal->a[6]);
+ fclose (fp);
+- return;
+- }
+-
+- xtrans = cal->a[0] / cal->a[6];
+- ytrans = cal->a[3] / cal->a[6];
+- xscale = cal->a[1] * 256 / cal->a[6];
+- yscale = cal->a[5] * 256 / cal->a[6];
+- xyscale = cal->a[2] * 256 / cal->a[6];
+- yxscale = cal->a[4] * 256 / cal->a[6];
+-
+- tc.xtrans = xtrans;
+- tc.ytrans = ytrans;
+- tc.xscale = xscale;
+- tc.yscale = yscale;
+- tc.xyswap = 0;
+-
+- printf ("%d %d %d %d %d\n", tc.xscale, tc.xtrans, tc.yscale, tc.ytrans, tc.xyswap);
+-
+- if (ioctl (ts_fd, TS_SET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_SET_CAL");
+- exit (1);
+- }
+ }
+
+ void
+@@ -398,80 +364,13 @@ handle_ts_event (int x, int y, int press
+ }
+
+ void
+-read_ts (void)
+-{
+- TS_EVENT ts_ev;
+- int r;
+-
+- r = read (ts_fd, &ts_ev, sizeof (ts_ev));
+- if (r == sizeof (ts_ev))
+- handle_ts_event (ts_ev.x, ts_ev.y, ts_ev.pressure);
+-}
+-
+-void
+-do_cal (char **args)
+-{
+- TS_CAL tc;
+-
+- tc.xscale = atoi (args[0]);
+- tc.xtrans = atoi (args[1]);
+- tc.yscale = atoi (args[2]);
+- tc.ytrans = atoi (args[3]);
+- tc.xyswap = atoi (args[4]);
+-
+- if (flag_debug)
+- fprintf (stderr, "setting: %d %d %d %d %d\n",
+- tc.xtrans, tc.ytrans, tc.xscale, tc.yscale, tc.xyswap);
+-
+- if (ioctl (ts_fd, TS_SET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_SET_CAL");
+- exit (1);
+- }
+-
+- exit (0);
+-}
+-
+-void
+-show_cal (void)
+-{
+- TS_CAL tc;
+-
+- if (ioctl (ts_fd, TS_GET_CAL, (void *)&tc) != 0)
+- {
+- perror ("TS_GET_CAL");
+- exit (1);
+- }
+-
+- printf ("%d %d %d %d %d\n", tc.xscale, tc.xtrans, tc.yscale, tc.ytrans, tc.xyswap);
+-}
+-
+-void
+ usage (const char *name)
+ {
+- fprintf (stderr, "usage: %s -view\n", name);
+- fprintf (stderr, " %s [-rotate <0 | 90 | 180 | 270>]\n", name);
+- fprintf (stderr, " %s -cal <xs> <xt> <ys> <yt> <xyswap>\n", name);
+-
++ fprintf (stderr, "usage: %s [-debug]\n", name);
+ exit (1);
+ }
+
+ int
+-xrr_supported (void)
+-{
+- int xrr_event_base, xrr_error_base;
+- int xrr_major, xrr_minor;
+-
+- if (XRRQueryExtension (dpy, &xrr_event_base, &xrr_error_base) == False
+- || XRRQueryVersion (dpy, &xrr_major, &xrr_minor) == 0
+- || xrr_major != 1
+- || xrr_minor < 1)
+- return 0;
+-
+- return 1;
+-}
+-
+-int
+ main (int argc, char *argv[])
+ {
+ XSetWindowAttributes attributes;
+@@ -480,31 +379,11 @@ main (int argc, char *argv[])
+ int max_fd;
+ GC bg_gc;
+ int i;
+- int have_xrandr;
+
+ for (i = 1; i < argc; i++)
+ {
+- if (!strcmp (argv[i], "-view"))
+- {
+- show_cal ();
+- exit (0);
+- }
+- else if (!strcmp (argv[i], "-debug"))
++ if (!strcmp (argv[i], "-debug"))
+ flag_debug = 1;
+- else if (!strcmp (argv[i], "-cal"))
+- {
+- if (argc > (i + 5))
+- do_cal (argv + i + 1);
+- else
+- usage (argv[0]);
+- }
+- else if (!strcmp (argv[i], "-rotate"))
+- {
+- if (argc > (i + 1))
+- rotation = atoi (argv[++i]);
+- else
+- usage (argv[0]);
+- }
+ else
+ usage (argv[0]);
+ }
+@@ -531,48 +410,11 @@ main (int argc, char *argv[])
+ fprintf (stderr, "failed to set raw mode: error %d\n", r);
+ exit (1);
+ }
+-
+- using_xcalibrate = 1;
+- }
+-
+- have_xrandr = xrr_supported ();
+- if (have_xrandr)
+- {
+- XRRScreenConfiguration *rr_screen;
+- Rotation current_rotation;
+-
+- if (flag_debug)
+- fprintf (stderr, "XRANDR is supported\n");
+-
+- rr_screen = XRRGetScreenInfo (dpy, RootWindow (dpy, screen));
+-
+- XRRRotations (dpy, screen, &current_rotation);
+-
+- XRRFreeScreenConfigInfo (rr_screen);
+-
+- if (flag_debug)
+- fprintf (stderr, "Current RANDR rotation is %d\n", current_rotation);
+-
+- switch (current_rotation)
+- {
+- case RR_Rotate_270:
+- rotation += 90;
+- case RR_Rotate_180:
+- rotation += 90;
+- case RR_Rotate_90:
+- rotation += 90;
+- rotation %= 360;
+- case RR_Rotate_0:
+- break;
+- default:
+- fprintf (stderr, "Unknown RANDR rotation: %d\n", current_rotation);
+- break;
+- }
+ }
+ else
+ {
+- if (flag_debug)
+- fprintf (stderr, "XRANDR not supported\n");
++ perror ("XCALIBRATE extension missing");
++ exit (1);
+ }
+
+ attributes.override_redirect = flag_debug ? False : True;
+@@ -666,45 +508,17 @@ main (int argc, char *argv[])
+
+ for (i = 0; i < NR_POINTS; i++)
+ {
+- switch (rotation)
+- {
+- case 0:
+- cal.xfb[i] = cal.xscr[i];
+- cal.yfb[i] = cal.yscr[i];
+- break;
+- case 90:
+- cal.xfb[i] = cal.yscr[i];
+- cal.yfb[i] = screen_x - cal.xscr[i];
+- break;
+- case 180:
+- cal.xfb[i] = screen_x - cal.xscr[i];
+- cal.yfb[i] = screen_y - cal.yscr[i];
+- break;
+- case 270:
+- cal.xfb[i] = screen_y - cal.yscr[i];
+- cal.yfb[i] = cal.xscr[i];
+- break;
+- }
++ cal.xfb[i] = cal.xscr[i];
++ cal.yfb[i] = cal.yscr[i];
++ XCalibrateScreenToCoord (dpy, &cal.xfb[i], &cal.yfb[i]);
+
+ if (flag_debug)
+- printf ("rotation %d: (%d,%d) -> (%d,%d)\n", rotation,
++ printf ("rotation conversion: (%d,%d) -> (%d,%d)\n",
+ cal.xscr[i], cal.yscr[i], cal.xfb[i], cal.yfb[i]);
+ }
+
+ next_event ();
+
+- if (!using_xcalibrate)
+- {
+- ts_fd = open (RAW_DEVICE, O_RDONLY);
+- if (ts_fd < 0)
+- {
+- perror (RAW_DEVICE);
+- exit (1);
+- }
+- }
+-
+- max_fd = (xfd > ts_fd) ? xfd : ts_fd;
+-
+ for (;;)
+ {
+ fd_set fds;
+@@ -713,12 +527,8 @@ main (int argc, char *argv[])
+
+ FD_ZERO (&fds);
+ FD_SET (xfd, &fds);
+- if (ts_fd != -1)
+- FD_SET (ts_fd, &fds);
+
+- select (max_fd + 1, &fds, NULL, NULL, NULL);
+-
+- if (ts_fd != -1 && FD_ISSET (ts_fd, &fds))
+- read_ts ();
++ select (xfd + 1, &fds, NULL, NULL, NULL);
+ }
+ }
++
+Index: xtscal-0.6.3/configure.ac
+===================================================================
+--- xtscal-0.6.3.orig/configure.ac 2004-09-10 20:11:12.000000000 +0100
++++ xtscal-0.6.3/configure.ac 2007-07-01 01:12:55.000000000 +0100
+@@ -9,8 +9,7 @@ AM_INIT_AUTOMAKE([foreign dist-bzip2])
+ # Checks for programs.
+ AC_PROG_CC
+
+-PKG_CHECK_MODULES(XTSCAL, x11 xft xext xrandr xcalibrate)
++PKG_CHECK_MODULES(XTSCAL, x11 xft xext xcalibrate)
+
+ AC_CONFIG_FILES([Makefile])
+-AC_CONFIG_FILES([xtscal])
+ AC_OUTPUT
+Index: xtscal-0.6.3/gpe-dist.am
+===================================================================
+--- xtscal-0.6.3.orig/gpe-dist.am 2004-06-02 23:07:13.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,12 +0,0 @@
+-CVSTAG := $(shell echo $(PACKAGE)-$(VERSION) | tr [a-z.] [A-Z_])
+-
+-dist-upload: dist
+- scp $(PACKAGE)-$(VERSION).tar.bz2 $(USER)@handhelds.org:/home/ftp/pub/projects/gpe/source/
+-
+-tag:
+- cvs tag $(CVSTAG)
+-
+-retag:
+- cvs tag -F $(CVSTAG)
+-
+-source: tag dist-upload
+Index: xtscal-0.6.3/h3600_ts.h
+===================================================================
+--- xtscal-0.6.3.orig/h3600_ts.h 2003-07-05 17:27:10.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,216 +0,0 @@
+-/*
+-*
+-* Driver for the H3600 Touch Screen and other Atmel controlled devices.
+-*
+-* Copyright 2000 Compaq Computer Corporation.
+-*
+-* Use consistent with the GNU GPL is permitted,
+-* provided that this copyright notice is
+-* preserved in its entirety in all copies and derived works.
+-*
+-* COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
+-* AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
+-* FITNESS FOR ANY PARTICULAR PURPOSE.
+-*
+-* Author: Charles Flynn.
+-*
+-*/
+-
+-
+-#ifndef __H3600_TS_H__
+-#define __H3600_TS_H__
+-
+-#include <linux/ioctl.h>
+-
+-enum h3600_ts_minor_devices {
+- TS_MINOR = 0,
+- TSRAW_MINOR = 1,
+- KEY_MINOR = 2
+-};
+-
+-typedef struct h3600_ts_calibration {
+- int xscale;
+- int xtrans;
+- int yscale;
+- int ytrans;
+- int xyswap;
+-} TS_CAL;
+-
+-typedef struct h3600_ts_event {
+- unsigned short pressure;
+- unsigned short x;
+- unsigned short y;
+- unsigned short pad;
+-} TS_EVENT;
+-
+-/* Deprecated - do not use */
+-typedef struct h3600_ts_return {
+- unsigned short pressure;
+- unsigned short x;
+- unsigned short y;
+- unsigned short pad;
+-} TS_RET;
+-
+-enum power_button_mode {
+- PBM_SUSPEND = 0,
+- PBM_GENERATE_KEYPRESS = 1
+-};
+-
+-
+-/* ++++++++++++++ +++++++++++++++++++++++++++++++++++++ */
+-
+-typedef struct therm_dev {
+- short data;
+-} THERM_DEV;
+-
+-#define H3600_BATT_CHEM_ALKALINE 0x01
+-#define H3600_BATT_CHEM_NICD 0x02
+-#define H3600_BATT_CHEM_NIMH 0x03
+-#define H3600_BATT_CHEM_LION 0x04
+-#define H3600_BATT_CHEM_LIPOLY 0x05
+-#define H3600_BATT_CHEM_NOT_INSTALLED 0x06
+-#define H3600_BATT_CHEM_UNKNOWN 0xff
+-
+-/* These should match the apm_bios.h definitions */
+-#define H3600_AC_STATUS_AC_OFFLINE 0x00
+-#define H3600_AC_STATUS_AC_ONLINE 0x01
+-#define H3600_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */
+-#define H3600_AC_STATUS_AC_UNKNOWN 0xff
+-
+-/* These bitfields are rarely "or'd" together */
+-#define H3600_BATT_STATUS_HIGH 0x01
+-#define H3600_BATT_STATUS_LOW 0x02
+-#define H3600_BATT_STATUS_CRITICAL 0x04
+-#define H3600_BATT_STATUS_CHARGING 0x08
+-#define H3600_BATT_STATUS_CHARGE_MAIN 0x10
+-#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
+-#define H3600_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */
+-#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
+-#define H3600_BATT_STATUS_NOBATT 0x80
+-#define H3600_BATT_STATUS_UNKNOWN 0xff
+-
+-struct battery_data {
+- unsigned char chemistry;
+- unsigned char status;
+- unsigned short voltage; /* Voltage for battery #0; unknown for battery #1 */
+- unsigned short percentage; /* Percentage of full charge */
+- unsigned short life; /* Life remaining in minutes */
+-};
+-
+-struct h3600_battery {
+- unsigned char ac_status;
+- unsigned char battery_count; /* How many batteries we have */
+- struct battery_data battery[2];
+-};
+-
+-/* -------- EEPROM and SPI Interfaces ---------------*/
+-
+-#define EEPROM_RD_BUFSIZ 6 /* EEPROM reads are 16 bits */
+-#define EEPROM_WR_BUFSIZ 5 /* Allow room for 8bit 'addr' field in buffer*/
+-#define SPI_RD_BUFSIZ 16 /* SPI reads are 8 bits */
+-#define SPI_WR_BUFSIZ 7
+-
+-/* The EEPROM is where internal programs are stored on the Amtel.
+- You probably don't want to read or write these values */
+-
+-typedef struct h3600_eeprom_read_request {
+- unsigned char addr; /* 8bit Address Offset 0-255 */
+- unsigned char len; /* Number of 16bit words to read 0-128 */
+- unsigned short buff[EEPROM_RD_BUFSIZ];
+-} EEPROM_READ;
+-
+-typedef struct h3600_eeprom_write_request {
+- unsigned char len; /* used only to compute the number of bytes to send */
+- unsigned char addr; /* 0-128 */
+- unsigned short buff[EEPROM_WR_BUFSIZ];
+-} EEPROM_WRITE;
+-
+-/* The SPI bus connects to EEPROMs located on sleeves plugged into
+- the iPAQ. You may want to read these values */
+-
+-typedef struct h3600_spi_read_request {
+- unsigned short addr; /* 16bit Address Offset 0-128 */
+- unsigned char len; /* Number of bytes to read */
+- unsigned char buff[SPI_RD_BUFSIZ];
+-} SPI_READ;
+-
+-#define SPI_READ_STATUS_BYTE 0xffff /* Use this address to read the status byte */
+-
+-typedef struct h3600_spi_write_request {
+- unsigned short len; /* used only to compute the number of bytes to send */
+- unsigned short addr; /* this 16bit address accesses a single byte */
+- unsigned char buff[SPI_WR_BUFSIZ];
+-} SPI_WRITE;
+-
+-
+-/* -------- end of EEPROM and SPI Interfaces ---------------*/
+-
+-/* User space structures for IOCTL calls */
+-
+-typedef struct h3600_ts_version {
+- unsigned char host_version[8]; /* ascii "x.yy" */
+- unsigned char pack_version[8]; /* ascii "x.yy" */
+- unsigned char boot_type; /* TODO ?? */
+-} VER_RET;
+-
+-typedef struct h3600_ts_led {
+- unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
+- unsigned char TotalTime; /* Units of 5 seconds */
+- unsigned char OnTime; /* units of 100m/s */
+- unsigned char OffTime; /* units of 100m/s */
+-} LED_IN;
+-
+-enum flite_mode {
+- FLITE_MODE1 = 1,
+- FLITE_AUTO_MODE = 1, /* for reference only */
+- FLITE_MANUAL_MODE = 2, /* Use this normally? */
+- FLITE_GET_LIGHT_SENSOR = 3 /* Returns light reading in "brightness" field */
+-};
+-enum flite_pwr {
+- FLITE_PWR_OFF = 0,
+- FLITE_PWR_ON = 1
+-};
+-
+-typedef struct h3600_ts_flite {
+- unsigned char mode;
+- unsigned char pwr;
+- unsigned char brightness;
+-} FLITE_IN;
+-
+-/*************************** Updated "universal" structures *******************/
+-
+-/* Sets backlight for both H3100 and H3600 models - technically "frontlight" for H3600 */
+-struct h3600_ts_backlight {
+- enum flite_pwr power; /* 0 = off, 1 = on */
+- unsigned char brightness; /* 0 - 255 */
+-};
+-
+-struct h3600_ts_contrast { /* Only useful on H3100 model */
+- unsigned char contrast; /* 0 - 255 */
+-};
+-
+-/* IOCTL cmds user or kernel space */
+-
+-/* Use 'f' as magic number */
+-#define IOC_H3600_TS_MAGIC 'f'
+-
+-/* TODO: Some of these IOWR values are just plain wrong */
+-#define GET_VERSION _IOR(IOC_H3600_TS_MAGIC, 1, struct h3600_ts_version )
+-#define READ_EEPROM _IOWR(IOC_H3600_TS_MAGIC, 2, struct h3600_eeprom_read_request)
+-#define WRITE_EEPROM _IOWR(IOC_H3600_TS_MAGIC, 3, struct h3600_eeprom_write_request)
+-#define GET_THERMAL _IOR(IOC_H3600_TS_MAGIC, 4, struct therm_dev)
+-#define LED_ON _IOW(IOC_H3600_TS_MAGIC, 5, struct h3600_ts_led)
+-#define GET_BATTERY_STATUS _IOR(IOC_H3600_TS_MAGIC, 6, struct h3600_battery)
+-#define FLITE_ON _IOW(IOC_H3600_TS_MAGIC, 7, struct h3600_ts_flite)
+-#define READ_SPI _IOWR(IOC_H3600_TS_MAGIC, 8, struct h3600_spi_read_request)
+-#define WRITE_SPI _IOWR(IOC_H3600_TS_MAGIC, 9, struct h3600_spi_write_request)
+-#define TS_GET_CAL _IOR(IOC_H3600_TS_MAGIC, 10, struct h3600_ts_calibration)
+-#define TS_SET_CAL _IOW(IOC_H3600_TS_MAGIC, 11, struct h3600_ts_calibration)
+-
+-/* New IOCTL interfaces - defined to be more user friendly */
+-#define TS_GET_BACKLIGHT _IOR(IOC_H3600_TS_MAGIC, 20, struct h3600_ts_backlight)
+-#define TS_SET_BACKLIGHT _IOW(IOC_H3600_TS_MAGIC, 20, struct h3600_ts_backlight)
+-#define TS_GET_CONTRAST _IOR(IOC_H3600_TS_MAGIC, 21, struct h3600_ts_contrast)
+-#define TS_SET_CONTRAST _IOW(IOC_H3600_TS_MAGIC, 21, struct h3600_ts_contrast)
+-
+-#endif
+Index: xtscal-0.6.3/Makefile.am
+===================================================================
+--- xtscal-0.6.3.orig/Makefile.am 2004-06-02 23:07:13.000000000 +0100
++++ xtscal-0.6.3/Makefile.am 2007-07-02 12:51:02.000000000 +0100
+@@ -1,11 +1,8 @@
+-libexec_PROGRAMS = xtscal.bin
+-bin_SCRIPTS = xtscal
++bin_PROGRAMS = xtscal
+
+-xtscal_bin_SOURCES = main.c calibrate.c calibrate.h h3600_ts.h
++xtscal_SOURCES = main.c calibrate.c calibrate.h
+
+-xtscal_bin_LDADD = @XTSCAL_LIBS@
++xtscal_LDADD = @XTSCAL_LIBS@
+
+ INCLUDES = @XTSCAL_CFLAGS@ -DNR_POINTS=5
+
+-include gpe-dist.am
+-
diff --git a/packages/xtscal/xtscal/xtscal-cxk.patch b/packages/xtscal/xtscal/xtscal-cxk.patch
index 1cab8efb57..fbca56abd7 100644
--- a/packages/xtscal/xtscal/xtscal-cxk.patch
+++ b/packages/xtscal/xtscal/xtscal-cxk.patch
@@ -1,11 +1,25 @@
---- xtscal-0.6.3/xtscal.in~ 2004-09-10 12:10:36.000000000 -0700
-+++ xtscal-0.6.3/xtscal.in 2005-08-04 09:26:46.000000000 -0700
-@@ -8,7 +8,7 @@
+--- xtscal-0.6.3/xtscal.in~
++++ xtscal-0.6.3/xtscal.in
+@@ -1,16 +1,15 @@
+ #!/bin/sh
+
+ module_id() {
+- # Get model name
+- echo `grep "^Hardware" /proc/cpuinfo | sed -e "s/.*: *//" | tr a-z A-Z`
++ awk 'BEGIN { FS=": " } /Hardware/ { print $2 }' </proc/cpuinfo | tr a-z A-Z
+ }
+
case `module_id` in
- "HP IPAQ H3100" | "HP IPAQ H3800" )
- ARGS="-rotate 90" ;;
+- "HP IPAQ H3100" | "HP IPAQ H3800" )
+- ARGS="-rotate 90" ;;
- "HP IPAQ H3600" | "HP IPAQ H3700" | "HP IPAQ H3900" | *COLLIE | *POODLE)
-+ "HP IPAQ H3600" | "HP IPAQ H3700" | "HP IPAQ H3900" | *COLLIE | *POODLE | *SPITZ | *AKITA | *BORZOI)
- ARGS="-rotate 270" ;;
- # H2200: works without rotation
+- ARGS="-rotate 270" ;;
+- # H2200: works without rotation
++ "HP IPAQ H3100" | "HP IPAQ H3800" )
++ ARGS="-rotate 90" ;;
++ "HP IPAQ H3600" | "HP IPAQ H3700" | "HP IPAQ H3900" | "HTC UNIVERSAL" | *COLLIE | *POODLE | *SPITZ | *AKITA | *BORZOI)
++ ARGS="-rotate 270" ;;
++ # H2200: works without rotation
esac
+
+ # the things we do for autoconf
diff --git a/packages/xtscal/xtscal_0.6.3.bb b/packages/xtscal/xtscal_0.6.3.bb
index 7a75cd0fd8..74a6da0920 100644
--- a/packages/xtscal/xtscal_0.6.3.bb
+++ b/packages/xtscal/xtscal_0.6.3.bb
@@ -1,5 +1,13 @@
-require xtscal.inc
+LICENSE = "GPL"
+DESCRIPTION = "Touchscreen calibration utility"
+SECTION = "x11/base"
-PR = "r1"
+DEPENDS = "virtual/libx11 libxft libxcalibrate"
-SRC_URI += "file://xtscal-cxk.patch;patch=1"
+PR = "r7"
+
+SRC_URI = "${GPE_MIRROR}/xtscal-${PV}.tar.bz2 \
+ file://change-cross.patch;patch=1 \
+ file://cleanup.patch;patch=1"
+
+inherit autotools
diff --git a/packages/yeaphone/yeaphone_0.1.bb b/packages/yeaphone/yeaphone_0.1.bb
index e1e06d52e9..67b651ae71 100644
--- a/packages/yeaphone/yeaphone_0.1.bb
+++ b/packages/yeaphone/yeaphone_0.1.bb
@@ -1,19 +1,20 @@
DESCRIPTION = "A VoIP SIP phone for the Yealink USB handset"
HOMEPAGE = "http://www.devbase.at/voip/"
-MAINTAINER = "Thomas Reitmayr <treitmayr@yahoo.com>"
LICENSE = "GPLv2"
PRIORITY = "optional"
DEPENDS = "liblinphone"
RDEPENDS = "liblinphone"
-PR = "r1"
+RRECOMMENDS = "\
+ linphonec \
+ kernel-module-yealink \
+ kernel-module-usbhid \
+ kernel-module-snd-usb-audio \
+ "
+
+PR = "r3"
SRC_URI = "http://download.devbase.at/voip/yeaphone-${PV}.tar.gz"
S = "${WORKDIR}/yeaphone-${PV}"
inherit autotools
-
-#EXTRA_OECONF = ""
-
-#do_install_append() {
-#}
diff --git a/packages/zaurusd/files/alsa-cxx00-default.state.patch b/packages/zaurusd/files/alsa-cxx00-default.state.patch
new file mode 100644
index 0000000000..c3e234b534
--- /dev/null
+++ b/packages/zaurusd/files/alsa-cxx00-default.state.patch
@@ -0,0 +1,163 @@
+--- zaurusd/config/alsa/cxx00-default.state.orig 2006-06-28 08:45:07.000000000 +0000
++++ zaurusd/config/alsa/cxx00-default.state 2007-05-21 21:40:50.000000000 +0000
+@@ -32,7 +32,7 @@
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+- name 'Out1 Playback ZC Switch'
++ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+@@ -41,7 +41,7 @@
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+- name 'Out2 Playback ZC Switch'
++ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+@@ -218,7 +218,7 @@
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+- value Left
++ value Off
+ }
+ control.24 {
+ comment.access 'read write'
+@@ -321,8 +321,8 @@
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'Right Out2 Playback Invert Switch'
+- value true
++ name 'Right Speaker Playback Invert Switch'
++ value false
+ }
+ control.36 {
+ comment.access 'read write'
+@@ -331,8 +331,8 @@
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic Boost'
+- value.0 2
+- value.1 2
++ value.0 0
++ value.1 0
+ }
+ control.37 {
+ comment.access 'read write'
+@@ -351,8 +351,8 @@
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Right Playback Volume'
+- value.0 0
+- value.1 0
++ value.0 2
++ value.1 2
+ }
+ control.39 {
+ comment.access 'read write'
+@@ -378,9 +378,9 @@
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+- name 'Out1 Playback Volume'
+- value.0 120
+- value.1 120
++ name 'Headphone Playback Volume'
++ value.0 121
++ value.1 121
+ }
+ control.42 {
+ comment.access 'read write'
+@@ -388,9 +388,9 @@
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+- name 'Out2 Playback Volume'
+- value.0 119
+- value.1 119
++ name 'Speaker Playback Volume'
++ value.0 121
++ value.1 121
+ }
+ control.43 {
+ comment.access 'read write'
+@@ -411,7 +411,7 @@
+ comment.item.3 'Digital Mono'
+ iface MIXER
+ name 'Right ADC Mux'
+- value 'Mono (Left)'
++ value Stereo
+ }
+ control.45 {
+ comment.access 'read write'
+@@ -423,7 +423,7 @@
+ comment.item.3 'Digital Mono'
+ iface MIXER
+ name 'Left ADC Mux'
+- value 'Mono (Left)'
++ value Stereo
+ }
+ control.46 {
+ comment.access 'read write'
+@@ -458,7 +458,7 @@
+ comment.item.4 Differential
+ iface MIXER
+ name 'Right Line Mux'
+- value Differential
++ value 'Line 1'
+ }
+ control.49 {
+ comment.access 'read write'
+@@ -471,7 +471,7 @@
+ comment.item.4 Differential
+ iface MIXER
+ name 'Left Line Mux'
+- value PGA
++ value 'Line 1'
+ }
+ control.50 {
+ comment.access 'read write'
+@@ -483,7 +483,7 @@
+ comment.item.3 Differential
+ iface MIXER
+ name 'Right PGA Mux'
+- value Differential
++ value 'Line 1'
+ }
+ control.51 {
+ comment.access 'read write'
+@@ -495,7 +495,7 @@
+ comment.item.3 Differential
+ iface MIXER
+ name 'Left PGA Mux'
+- value Differential
++ value 'Line 1'
+ }
+ control.52 {
+ comment.access 'read write'
+@@ -535,7 +535,7 @@
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Left Playback Switc'
+- value false
++ value true
+ }
+ control.57 {
+ comment.access 'read write'
+@@ -610,9 +610,8 @@
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+- comment.item.0 Auto
+- comment.item.1 On
+- comment.item.2 Off
++ comment.item.0 On
++ comment.item.1 Off
+ iface MIXER
+ name 'Speaker Function'
+ value On
diff --git a/packages/zaurusd/files/disable-alsa-handling.patch b/packages/zaurusd/files/disable-alsa-handling.patch
new file mode 100644
index 0000000000..8f1879db60
--- /dev/null
+++ b/packages/zaurusd/files/disable-alsa-handling.patch
@@ -0,0 +1,16 @@
+--- zaurusd/config/config.in.orig 2007-05-21 21:58:14.000000000 +0000
++++ zaurusd/config/config.in 2007-05-21 22:10:26.000000000 +0000
+@@ -11,11 +11,5 @@
+ . @appconfdir@/mach-config-vars
+ . @appconfdir@/mach-config-funcs
+
+-if [ "x$HAVE_ALSA_MIXER" != "x" -a "x$ALSA_MIXER_INIT" != "x" ]; then
+- if [ ! -e /etc/asound.state ]; then
+- cp $ALSA_MIXER_INIT /etc/asound.state
+- @sbindir@/alsactl restore
+- fi
+-fi
+
+-export SWITCHEVD_EVENT_SCRIPT=@appconfdir@/scripts/switch-event
+\ No newline at end of file
++export SWITCHEVD_EVENT_SCRIPT=@appconfdir@/scripts/switch-event
diff --git a/packages/zaurusd/files/tslib-1.diff b/packages/zaurusd/files/tslib-1.diff
new file mode 100644
index 0000000000..8df1b83b3a
--- /dev/null
+++ b/packages/zaurusd/files/tslib-1.diff
@@ -0,0 +1,11 @@
+--- /tmp/configure.ac 2007-08-04 10:09:46.000000000 +0200
++++ zaurusd/configure.ac 2007-08-04 10:10:35.308400000 +0200
+@@ -45,7 +45,7 @@
+ #
+ # Checks for tslib
+ #
+- PKG_CHECK_MODULES(TSLIB, "tslib-0.0", :, AC_MSG_ERROR([TSKeys requires tslib.]))
++ PKG_CHECK_MODULES(TSLIB, "tslib-1.0", :, AC_MSG_ERROR([TSKeys requires tslib.]))
+ AC_SUBST(TSLIB_CFLAGS)
+ AC_SUBST(TSLIB_LIBS)
+ fi
diff --git a/packages/zaurusd/files/zaurus-hinge.bl-off b/packages/zaurusd/files/zaurus-hinge.bl-off
new file mode 100644
index 0000000000..888f90bfc5
--- /dev/null
+++ b/packages/zaurusd/files/zaurus-hinge.bl-off
@@ -0,0 +1,10 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: zaurus-hinge.bl-off
+# Date: 04-Jun-06
+
+test -z "${ZD_BINDIR}" && ZD_BINDIR="/usr/bin"
+${ZD_BINDIR}/bl off
diff --git a/packages/zaurusd/files/zaurus-hinge.bl-on b/packages/zaurusd/files/zaurus-hinge.bl-on
new file mode 100644
index 0000000000..6d416ad8c4
--- /dev/null
+++ b/packages/zaurusd/files/zaurus-hinge.bl-on
@@ -0,0 +1,10 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: zaurus-hinge.bl-on
+# Date: 04-Jun-06
+
+test -z "${ZD_BINDIR}" && ZD_BINDIR="/usr/bin"
+${ZD_BINDIR}/bl on
diff --git a/packages/zaurusd/files/zaurusd-mixer-callback.patch b/packages/zaurusd/files/zaurusd-mixer-callback.patch
new file mode 100644
index 0000000000..7c9455d042
--- /dev/null
+++ b/packages/zaurusd/files/zaurusd-mixer-callback.patch
@@ -0,0 +1,11 @@
+--- zaurusd/scripts/zaurus-mixer-callback.in.orig 2007-06-05 03:15:30.000000000 +0000
++++ zaurusd/scripts/zaurus-mixer-callback.in 2007-06-05 03:14:53.000000000 +0000
+@@ -16,7 +16,7 @@
+ JACK="$1"
+ SPK="$2"
+ LEFT="true"
+-RLPLAYBACK="false"
++RLPLAYBACK="true"
+ RLBYPASS="false"
+
+ case $SPK in
diff --git a/packages/zaurusd/zaurusd_svn.bb b/packages/zaurusd/zaurusd_svn.bb
index d536122eca..2b918bbaa3 100644
--- a/packages/zaurusd/zaurusd_svn.bb
+++ b/packages/zaurusd/zaurusd_svn.bb
@@ -4,13 +4,19 @@ LICENSE = "GPL"
DEPENDS = "tslib"
RDEPENDS = "procps"
PV = "0.0+svn${SRCDATE}"
-PR = "r7"
+PR = "r10"
SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=zaurusd;proto=http \
file://zaurus-hinge.in \
file://add-poodle.patch;patch=1 \
- file://zaurus-hinge.matchbox-portrait \
- file://zaurus-hinge.matchbox-landscape"
+ file://alsa-cxx00-default.state.patch;patch=1 \
+ file://disable-alsa-handling.patch;patch=1 \
+ file://zaurus-hinge.matchbox-portrait \
+ file://zaurus-hinge.matchbox-landscape \
+ file://zaurusd-mixer-callback.patch;patch=1 \
+ file://tslib-1.diff;patch=1 \
+ file://zaurus-hinge.bl-on \
+ file://zaurus-hinge.bl-off"
S = "${WORKDIR}/${PN}"
@@ -25,6 +31,12 @@ do_install_append() {
install -d "${D}/etc/zaurusd/hinge-landscape.d"
install -d "${D}/etc/zaurusd/hinge-portrait.d"
install -d "${D}/etc/zaurusd/hinge-close.d"
+ install -d ${D}/etc/apm/resume.d
+
+ install -m 0755 "${WORKDIR}/zaurus-hinge.bl-on" "${D}/etc/apm/resume.d/00-backlight-on"
+ install -m 0755 "${WORKDIR}/zaurus-hinge.bl-on" "${D}/etc/zaurusd/hinge-landscape.d/00-backlight-on"
+ install -m 0755 "${WORKDIR}/zaurus-hinge.bl-on" "${D}/etc/zaurusd/hinge-portrait.d/00-backlight-on"
+ install -m 0755 "${WORKDIR}/zaurus-hinge.bl-off" "${D}/etc/zaurusd/hinge-close.d/00-backlight-off"
install -m 0755 "${WORKDIR}/zaurus-hinge.matchbox-landscape" "${D}/etc/zaurusd/hinge-landscape.d/20-matchbox-landscape"
install -m 0755 "${WORKDIR}/zaurus-hinge.matchbox-portrait" "${D}/etc/zaurusd/hinge-portrait.d/20-matchbox-portrait"
diff --git a/packages/zd1211/zd1211-firmware_1.3.bb b/packages/zd1211/zd1211-firmware_1.3.bb
new file mode 100644
index 0000000000..e6f006971d
--- /dev/null
+++ b/packages/zd1211/zd1211-firmware_1.3.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "ZyDAS ZD1211 Firmware"
+HOMEPAGE = "http://zd1211.ath.cx/"
+SECTION = "net"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/zd1211/zd1211-firmware1.3.tar.bz2"
+
+S = "${WORKDIR}/${PN}"
+
+do_install() {
+ install -d -m 0755 ${D}/lib/firmware/zd1211
+ install -m 0644 ${S}/zd1211* ${D}/lib/firmware/zd1211/
+}
+
+FILES_${PN} = "/lib/firmware"
diff --git a/packages/zip/zip-native_2.32.bb b/packages/zip/zip-native_2.32.bb
index fde61efcb7..cfa4272378 100644
--- a/packages/zip/zip-native_2.32.bb
+++ b/packages/zip/zip-native_2.32.bb
@@ -1,6 +1,7 @@
-SECTION = "console/utils"
-inherit native
require zip_${PV}.bb
+
+inherit native
+
S = "${WORKDIR}/zip-${PV}"
do_stage() {
diff --git a/packages/zip/zip.inc b/packages/zip/zip.inc
index b66b4b217f..8d04bd5f61 100644
--- a/packages/zip/zip.inc
+++ b/packages/zip/zip.inc
@@ -1,6 +1,9 @@
+DESCRIPTION = "Archiver for .zip files"
SECTION = "console/utils"
-SRC_URI = "http://ftp.info-zip.org/pub/infozip/src/zip${@bb.data.getVar('PV',d,1).replace('.', '')}.tar.gz"
LICENSE = "Info-ZIP"
+
+SRC_URI = "http://ftp.info-zip.org/pub/infozip/src/zip${@bb.data.getVar('PV',d,1).replace('.', '')}.tar.gz"
+
EXTRA_OEMAKE = "'CC=${CC}' 'BIND=${CC}' 'AS=${CC} -c' 'CPP=${CPP}' \
'CFLAGS=-I. -DUNIX ${CFLAGS}' 'INSTALL=install' \
'BINFLAGS=0755' 'INSTALL_D=install -d'"
diff --git a/packages/zip/zip_2.32.bb b/packages/zip/zip_2.32.bb
index b8c4ae9da0..4e01db84c7 100644
--- a/packages/zip/zip_2.32.bb
+++ b/packages/zip/zip_2.32.bb
@@ -1,2 +1,3 @@
require zip.inc
-PR="r0"
+
+PR="r1"
diff --git a/packages/zope/zope_3.3.1.bb b/packages/zope/zope_3.3.1.bb
new file mode 100644
index 0000000000..717e5a119b
--- /dev/null
+++ b/packages/zope/zope_3.3.1.bb
@@ -0,0 +1,45 @@
+DESCRIPTION = "A full fledged pluggable content management system with integrated web server and much more."
+SECTION = "console/network"
+PRIORITY = "optional"
+DEPENDS = "python"
+RDEPENDS = "python-core python-shell"
+LICENSE = "ZPL"
+PR = "r3"
+
+SRC_URI = "http://www.zope.org/Products/Zope3/${PV}/Zope-${PV}.tgz"
+
+S = "${WORKDIR}/Zope-${PV}"
+
+do_configure() {
+ ./configure --with-python=${STAGING_BINDIR_NATIVE}/python --prefix=${prefix} --force
+}
+
+do_compile() {
+ oe_runmake HOST_SYS=${HOST_SYS} BUILD_SYS=${BUILD_SYS}
+}
+
+PYTHON_MAJMIN = "2.4"
+
+do_install() {
+ install -d ${D}${libdir}/python${PYTHON_MAJMIN}
+ oe_runmake install prefix=${D}${prefix} HOST_SYS=${HOST_SYS} BUILD_SYS=${BUILD_SYS}
+ mv ${D}${libdir}/python/* ${D}${libdir}/python${PYTHON_MAJMIN}
+}
+
+PACKAGES =+ "python-zopeinterface python-zopeinterface-dbg"
+
+FILES_${PN} = "${prefix}"
+FILES_${PN}_doc = "${prefix}/doc"
+FILES_${PN}-dbg += "\
+${libdir}/python${PYTHON_MAJMIN}/BTrees/.debug \
+${libdir}/python${PYTHON_MAJMIN}/persistent/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/proxy/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/thread/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/security/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/hookable/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/app/container/.debug \
+${libdir}/python${PYTHON_MAJMIN}/zope/i18nmessageid/.debug \
+${libdir}/python${PYTHON_MAJMIN}/ZODB/.debug"
+FILES_python-zopeinterface-dbg += "${libdir}/python${PYTHON_MAJMIN}/zope/interface/.debug "
+
+FILES_python-zopeinterface = "${libdir}/python${PYTHON_MAJMIN}/zope/interface/*.* ${libdir}/python${PYTHON_MAJMIN}/zope/interface/common"
diff --git a/packages/zten/.mtn2git_empty b/packages/zten/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/zten/.mtn2git_empty
diff --git a/packages/zten/files/.mtn2git_empty b/packages/zten/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/zten/files/.mtn2git_empty
diff --git a/packages/zten/files/zten.patch b/packages/zten/files/zten.patch
new file mode 100644
index 0000000000..22ba56951a
--- /dev/null
+++ b/packages/zten/files/zten.patch
@@ -0,0 +1,35 @@
+--- zten/zten.pro.orig 2003-02-16 16:45:44.000000000 +0100
++++ zten/zten.pro 2006-04-23 18:50:19.000000000 +0200
+@@ -1,11 +1,9 @@
+ TEMPLATE = app
+ CONFIG = qt warn_on release
+-HEADERS = pixmap.h \
+- qbookbrowser.h \
++HEADERS = qbookbrowser.h \
+ qbookentry.h \
+ qbookitem.h \
+ qhistorylineedit.h \
+- qlabeledit.h \
+ qlistboxrichtext.h \
+ zpixmap.h \
+ zten.h \
+@@ -29,5 +27,5 @@
+ ztenbookbase.ui \
+ ztencandidatebase.ui \
+ ztenextbase.ui
+-LIBS += -lqpe /opt/Embedix/lib/libeb.a /opt/Embedix/lib/libz.a -L/opt/QtPalmtop/lib -lkakasi
++LIBS += -lqpe -leb -lz -lkakasi
+ TRANSLATIONS = zten.ts
+
+--- zten/qbookentry.cpp.orig 2006-04-23 23:38:00.000000000 +0200
++++ zten/qbookentry.cpp 2006-04-23 23:38:10.000000000 +0200
+@@ -14,7 +14,8 @@
+ }
+
+ static const char* INSERT_MARK = "\a";
+-QTextCodec* g_codec;
++//QTextCodec* g_codec = NULL;
++QTextCodec* g_codec = QTextCodec::codecForName("eucJP");
+ unsigned int last_wide_font = 0;
+ unsigned int last_narrow_font = 0;
+
diff --git a/packages/zten/zten_1.6.2.bb b/packages/zten/zten_1.6.2.bb
new file mode 100644
index 0000000000..1511341f0a
--- /dev/null
+++ b/packages/zten/zten_1.6.2.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "EB*/EPWING dictionary browser for Linux Zaurus"
+HOMEPAGE = "http://www.gohome.org/zten"
+SECTION = "opie/applications"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "eb kakasi"
+RDEPENDS = "virtual/japanese-font"
+RCONFLICTS = "ztenv"
+
+SRC_URI = "http://www.gohome.org/cgi-bin/viewcvs.cgi/zten.tar.gz;md5sum=d24f03c8df5c98d510590bd9a63dc9321 \
+ file://zten.patch;patch=1"
+
+S = "${WORKDIR}/zten"
+
+inherit palmtop
+
+CXXFLAGS += " -DQWS"
+
+do_install() {
+ install -d ${D}${palmtopdir}/bin
+ install -d ${D}${palmtopdir}/apps/Applications
+ install -d ${D}${palmtopdir}/pics
+ install -m 0755 zten ${D}${palmtopdir}/bin/zten
+ install -m 0644 zten.desktop ${D}${palmtopdir}/apps/Applications/
+ install -m 0644 Zten.png ${D}${palmtopdir}/pics
+}
+